From c5b000fd00dd7860fbd2ab906ec02179c828bf20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Barr=C3=A9?= Date: Mon, 19 May 2025 03:43:28 +0200 Subject: [PATCH 001/313] fix(plugin-swc): skip HMR preamble in Vitest browser mode (#478) --- packages/plugin-react-swc/CHANGELOG.md | 4 ++++ packages/plugin-react-swc/src/index.ts | 18 +++++++++++------- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/packages/plugin-react-swc/CHANGELOG.md b/packages/plugin-react-swc/CHANGELOG.md index 8fb66bc3f..be8be4c6f 100644 --- a/packages/plugin-react-swc/CHANGELOG.md +++ b/packages/plugin-react-swc/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Skip HMR preamble in Vitest browser mode + +This was causing annoying `Sourcemap for "/@react-refresh" points to missing source files` and is unnecessary in test mode. + ## 3.9.0 (2025-04-15) ### Make compatible with rolldown-vite diff --git a/packages/plugin-react-swc/src/index.ts b/packages/plugin-react-swc/src/index.ts index 8e197588e..0185ece14 100644 --- a/packages/plugin-react-swc/src/index.ts +++ b/packages/plugin-react-swc/src/index.ts @@ -132,13 +132,17 @@ const react = (_options?: Options): PluginOption[] => { ) } }, - transformIndexHtml: (_, config) => [ - { - tag: 'script', - attrs: { type: 'module' }, - children: getPreambleCode(config.server!.config.base), - }, - ], + transformIndexHtml: (_, config) => { + if (!hmrDisabled) { + return [ + { + tag: 'script', + attrs: { type: 'module' }, + children: getPreambleCode(config.server!.config.base), + }, + ] + } + }, async transform(code, _id, transformOptions) { const id = _id.split('?')[0] const refresh = !transformOptions?.ssr && !hmrDisabled From fc9302bc7325cf23ca3d1a22c981a4ad176edc18 Mon Sep 17 00:00:00 2001 From: underfin Date: Tue, 20 May 2025 14:37:28 +0800 Subject: [PATCH 002/313] ci: add preview release action (#481) --- .github/workflows/release-continuous.yml | 38 ++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 .github/workflows/release-continuous.yml diff --git a/.github/workflows/release-continuous.yml b/.github/workflows/release-continuous.yml new file mode 100644 index 000000000..9534f0cc6 --- /dev/null +++ b/.github/workflows/release-continuous.yml @@ -0,0 +1,38 @@ +name: Preview Publish + +on: + push: + branches: + - main + pull_request: + types: [opened, synchronize, labeled] + +permissions: {} + +jobs: + preview: + if: > + github.repository == 'vitejs/vite-plugin-react' && + (github.event_name == 'push' || + (github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'trigger: preview'))) + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Install pnpm + uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 + + - uses: actions/setup-node@v4 + with: + node-version: lts/* + cache: pnpm + + - name: Install dependencies + run: pnpm install + + - name: Build + run: pnpm build + + - name: Publish + run: pnpm dlx pkg-pr-new@0.0 publish --pnpm --compact './packages/*' './packages/plugin-react-swc/dist' From 5a94bd799f69aee468c6b5b081dd3b4620f49db7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0?= Date: Tue, 20 May 2025 18:54:01 +0900 Subject: [PATCH 003/313] feat: add filter (#470) --- packages/plugin-react-oxc/CHANGELOG.md | 4 + packages/plugin-react-oxc/package.json | 3 + packages/plugin-react-oxc/src/index.ts | 10 +- packages/plugin-react-swc/CHANGELOG.md | 4 + packages/plugin-react-swc/package.json | 1 + packages/plugin-react-swc/src/index.ts | 26 ++- packages/plugin-react/CHANGELOG.md | 4 + packages/plugin-react/package.json | 1 + packages/plugin-react/src/index.ts | 263 +++++++++++++++---------- pnpm-lock.yaml | 16 ++ 10 files changed, 206 insertions(+), 126 deletions(-) diff --git a/packages/plugin-react-oxc/CHANGELOG.md b/packages/plugin-react-oxc/CHANGELOG.md index 1fc7ebfe0..7648dec4d 100644 --- a/packages/plugin-react-oxc/CHANGELOG.md +++ b/packages/plugin-react-oxc/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Add `filter` for rolldown-vite + +Added `filter` so that it is more performant when running this plugin with rolldown-powered version of Vite. + ## 0.1.1 (2025-04-10) ## 0.1.0 (2025-04-09) diff --git a/packages/plugin-react-oxc/package.json b/packages/plugin-react-oxc/package.json index f31de7df1..8b9321249 100644 --- a/packages/plugin-react-oxc/package.json +++ b/packages/plugin-react-oxc/package.json @@ -46,5 +46,8 @@ "@vitejs/react-common": "workspace:*", "unbuild": "^3.5.0", "vite": "catalog:rolldown-vite" + }, + "dependencies": { + "@rolldown/pluginutils": "1.0.0-beta.9" } } diff --git a/packages/plugin-react-oxc/src/index.ts b/packages/plugin-react-oxc/src/index.ts index 377d4c042..f234ad80d 100644 --- a/packages/plugin-react-oxc/src/index.ts +++ b/packages/plugin-react-oxc/src/index.ts @@ -9,6 +9,7 @@ import { runtimePublicPath, silenceUseClientWarning, } from '@vitejs/react-common' +import { exactRegex } from '@rolldown/pluginutils' const _dirname = dirname(fileURLToPath(import.meta.url)) @@ -149,12 +150,3 @@ export default function viteReact(opts: Options = {}): PluginOption[] { return [viteConfig, viteRefreshRuntime, viteRefreshWrapper] } - -function exactRegex(input: string): RegExp { - return new RegExp(`^${escapeRegex(input)}$`) -} - -const escapeRegexRE = /[-/\\^$*+?.()|[\]{}]/g -function escapeRegex(str: string): string { - return str.replace(escapeRegexRE, '\\$&') -} diff --git a/packages/plugin-react-swc/CHANGELOG.md b/packages/plugin-react-swc/CHANGELOG.md index be8be4c6f..79ed6f409 100644 --- a/packages/plugin-react-swc/CHANGELOG.md +++ b/packages/plugin-react-swc/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Add `filter` for rolldown-vite + +Added `filter` so that it is more performant when running this plugin with rolldown-powered version of Vite. + ### Skip HMR preamble in Vitest browser mode This was causing annoying `Sourcemap for "/@react-refresh" points to missing source files` and is unnecessary in test mode. diff --git a/packages/plugin-react-swc/package.json b/packages/plugin-react-swc/package.json index dd1140604..e41f5cb0a 100644 --- a/packages/plugin-react-swc/package.json +++ b/packages/plugin-react-swc/package.json @@ -29,6 +29,7 @@ }, "homepage": "https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react-swc#readme", "dependencies": { + "@rolldown/pluginutils": "1.0.0-beta.9", "@swc/core": "^1.11.22" }, "peerDependencies": { diff --git a/packages/plugin-react-swc/src/index.ts b/packages/plugin-react-swc/src/index.ts index 0185ece14..6f20a05df 100644 --- a/packages/plugin-react-swc/src/index.ts +++ b/packages/plugin-react-swc/src/index.ts @@ -18,6 +18,7 @@ import { runtimePublicPath, silenceUseClientWarning, } from '@vitejs/react-common' +import { exactRegex } from '@rolldown/pluginutils' /* eslint-disable no-restricted-globals */ const _dirname = @@ -96,14 +97,23 @@ const react = (_options?: Options): PluginOption[] => { name: 'vite:react-swc:resolve-runtime', apply: 'serve', enforce: 'pre', // Run before Vite default resolve to avoid syscalls - resolveId: (id) => (id === runtimePublicPath ? id : undefined), - load: (id) => - id === runtimePublicPath - ? readFileSync(join(_dirname, 'refresh-runtime.js'), 'utf-8').replace( - /__README_URL__/g, - 'https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react-swc', - ) - : undefined, + resolveId: { + filter: { id: exactRegex(runtimePublicPath) }, + handler: (id) => (id === runtimePublicPath ? id : undefined), + }, + load: { + filter: { id: exactRegex(runtimePublicPath) }, + handler: (id) => + id === runtimePublicPath + ? readFileSync( + join(_dirname, 'refresh-runtime.js'), + 'utf-8', + ).replace( + /__README_URL__/g, + 'https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react-swc', + ) + : undefined, + }, }, { name: 'vite:react-swc', diff --git a/packages/plugin-react/CHANGELOG.md b/packages/plugin-react/CHANGELOG.md index 86c6efd09..ccb6b02c9 100644 --- a/packages/plugin-react/CHANGELOG.md +++ b/packages/plugin-react/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Add `filter` for rolldown-vite + +Added `filter` so that it is more performant when running this plugin with rolldown-powered version of Vite. + ## 4.4.1 (2025-04-19) Fix type issue when using `moduleResolution: "node"` in tsconfig [#462](https://github.com/vitejs/vite-plugin-react/pull/462) diff --git a/packages/plugin-react/package.json b/packages/plugin-react/package.json index e893b948b..cc6bb6ddc 100644 --- a/packages/plugin-react/package.json +++ b/packages/plugin-react/package.json @@ -51,6 +51,7 @@ "@babel/core": "^7.26.10", "@babel/plugin-transform-react-jsx-self": "^7.25.9", "@babel/plugin-transform-react-jsx-source": "^7.25.9", + "@rolldown/pluginutils": "1.0.0-beta.9", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, diff --git a/packages/plugin-react/src/index.ts b/packages/plugin-react/src/index.ts index 66d280f93..250c4477e 100644 --- a/packages/plugin-react/src/index.ts +++ b/packages/plugin-react/src/index.ts @@ -13,6 +13,10 @@ import { runtimePublicPath, silenceUseClientWarning, } from '@vitejs/react-common' +import { + exactRegex, + makeIdFiltersToMatchWithQuery, +} from '@rolldown/pluginutils' const _dirname = dirname(fileURLToPath(import.meta.url)) @@ -102,7 +106,10 @@ const defaultIncludeRE = /\.[tj]sx?$/ const tsRE = /\.tsx?$/ export default function viteReact(opts: Options = {}): PluginOption[] { - const filter = createFilter(opts.include ?? defaultIncludeRE, opts.exclude) + const include = opts.include ?? defaultIncludeRE + const exclude = opts.exclude + const filter = createFilter(include, exclude) + const jsxImportSource = opts.jsxImportSource ?? 'react' const jsxImportRuntime = `${jsxImportSource}/jsx-runtime` const jsxImportDevRuntime = `${jsxImportSource}/jsx-dev-runtime` @@ -181,114 +188,130 @@ export default function viteReact(opts: Options = {}): PluginOption[] { // we only create static option in this case and re-create them // each time otherwise staticBabelOptions = createBabelOptions(opts.babel) + + if ( + canSkipBabel(staticBabelOptions.plugins, staticBabelOptions) && + skipFastRefresh && + (opts.jsxRuntime === 'classic' ? isProduction : true) + ) { + delete viteBabel.transform + } } }, - async transform(code, id, options) { - if (id.includes('/node_modules/')) return - - const [filepath] = id.split('?') - if (!filter(filepath)) return - - const ssr = options?.ssr === true - const babelOptions = (() => { - if (staticBabelOptions) return staticBabelOptions - const newBabelOptions = createBabelOptions( - typeof opts.babel === 'function' - ? opts.babel(id, { ssr }) - : opts.babel, - ) - runPluginOverrides?.(newBabelOptions, { id, ssr }) - return newBabelOptions - })() - const plugins = [...babelOptions.plugins] - - const isJSX = filepath.endsWith('x') - const useFastRefresh = - !skipFastRefresh && - !ssr && - (isJSX || - (opts.jsxRuntime === 'classic' - ? importReactRE.test(code) - : code.includes(jsxImportDevRuntime) || - code.includes(jsxImportRuntime))) - if (useFastRefresh) { - plugins.push([ - await loadPlugin('react-refresh/babel'), - { skipEnvCheck: true }, - ]) - } - - if (opts.jsxRuntime === 'classic' && isJSX) { - if (!isProduction) { - // These development plugins are only needed for the classic runtime. - plugins.push( - await loadPlugin('@babel/plugin-transform-react-jsx-self'), - await loadPlugin('@babel/plugin-transform-react-jsx-source'), + transform: { + filter: { + id: { + include: makeIdFiltersToMatchWithQuery(include), + exclude: [ + ...(exclude + ? makeIdFiltersToMatchWithQuery(ensureArray(exclude)) + : []), + /\/node_modules\//, + ], + }, + }, + async handler(code, id, options) { + if (id.includes('/node_modules/')) return + + const [filepath] = id.split('?') + if (!filter(filepath)) return + + const ssr = options?.ssr === true + const babelOptions = (() => { + if (staticBabelOptions) return staticBabelOptions + const newBabelOptions = createBabelOptions( + typeof opts.babel === 'function' + ? opts.babel(id, { ssr }) + : opts.babel, ) + runPluginOverrides?.(newBabelOptions, { id, ssr }) + return newBabelOptions + })() + const plugins = [...babelOptions.plugins] + + const isJSX = filepath.endsWith('x') + const useFastRefresh = + !skipFastRefresh && + !ssr && + (isJSX || + (opts.jsxRuntime === 'classic' + ? importReactRE.test(code) + : code.includes(jsxImportDevRuntime) || + code.includes(jsxImportRuntime))) + if (useFastRefresh) { + plugins.push([ + await loadPlugin('react-refresh/babel'), + { skipEnvCheck: true }, + ]) } - } - // Avoid parsing if no special transformation is needed - if ( - !plugins.length && - !babelOptions.presets.length && - !babelOptions.configFile && - !babelOptions.babelrc - ) { - return - } + if (opts.jsxRuntime === 'classic' && isJSX) { + if (!isProduction) { + // These development plugins are only needed for the classic runtime. + plugins.push( + await loadPlugin('@babel/plugin-transform-react-jsx-self'), + await loadPlugin('@babel/plugin-transform-react-jsx-source'), + ) + } + } - const parserPlugins = [...babelOptions.parserOpts.plugins] + // Avoid parsing if no special transformation is needed + if (canSkipBabel(plugins, babelOptions)) { + return + } - if (!filepath.endsWith('.ts')) { - parserPlugins.push('jsx') - } + const parserPlugins = [...babelOptions.parserOpts.plugins] - if (tsRE.test(filepath)) { - parserPlugins.push('typescript') - } + if (!filepath.endsWith('.ts')) { + parserPlugins.push('jsx') + } - const babel = await loadBabel() - const result = await babel.transformAsync(code, { - ...babelOptions, - root: projectRoot, - filename: id, - sourceFileName: filepath, - // Required for esbuild.jsxDev to provide correct line numbers - // This creates issues the react compiler because the re-order is too important - // People should use @babel/plugin-transform-react-jsx-development to get back good line numbers - retainLines: - getReactCompilerPlugin(plugins) != null - ? false - : !isProduction && isJSX && opts.jsxRuntime !== 'classic', - parserOpts: { - ...babelOptions.parserOpts, - sourceType: 'module', - allowAwaitOutsideFunction: true, - plugins: parserPlugins, - }, - generatorOpts: { - ...babelOptions.generatorOpts, - // import attributes parsing available without plugin since 7.26 - importAttributesKeyword: 'with', - decoratorsBeforeExport: true, - }, - plugins, - sourceMaps: true, - }) + if (tsRE.test(filepath)) { + parserPlugins.push('typescript') + } - if (result) { - if (!useFastRefresh) { - return { code: result.code!, map: result.map } + const babel = await loadBabel() + const result = await babel.transformAsync(code, { + ...babelOptions, + root: projectRoot, + filename: id, + sourceFileName: filepath, + // Required for esbuild.jsxDev to provide correct line numbers + // This creates issues the react compiler because the re-order is too important + // People should use @babel/plugin-transform-react-jsx-development to get back good line numbers + retainLines: + getReactCompilerPlugin(plugins) != null + ? false + : !isProduction && isJSX && opts.jsxRuntime !== 'classic', + parserOpts: { + ...babelOptions.parserOpts, + sourceType: 'module', + allowAwaitOutsideFunction: true, + plugins: parserPlugins, + }, + generatorOpts: { + ...babelOptions.generatorOpts, + // import attributes parsing available without plugin since 7.26 + importAttributesKeyword: 'with', + decoratorsBeforeExport: true, + }, + plugins, + sourceMaps: true, + }) + + if (result) { + if (!useFastRefresh) { + return { code: result.code!, map: result.map } + } + return addRefreshWrapper( + result.code!, + result.map!, + '@vitejs/plugin-react', + id, + opts.reactRefreshHost, + ) } - return addRefreshWrapper( - result.code!, - result.map!, - '@vitejs/plugin-react', - id, - opts.reactRefreshHost, - ) - } + }, }, } @@ -319,18 +342,24 @@ export default function viteReact(opts: Options = {}): PluginOption[] { dedupe: ['react', 'react-dom'], }, }), - resolveId(id) { - if (id === runtimePublicPath) { - return id - } + resolveId: { + filter: { id: exactRegex(runtimePublicPath) }, + handler(id) { + if (id === runtimePublicPath) { + return id + } + }, }, - load(id) { - if (id === runtimePublicPath) { - return readFileSync(refreshRuntimePath, 'utf-8').replace( - /__README_URL__/g, - 'https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react', - ) - } + load: { + filter: { id: exactRegex(runtimePublicPath) }, + handler(id) { + if (id === runtimePublicPath) { + return readFileSync(refreshRuntimePath, 'utf-8').replace( + /__README_URL__/g, + 'https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react', + ) + } + }, }, transformIndexHtml(_, config) { if (!skipFastRefresh) @@ -349,6 +378,18 @@ export default function viteReact(opts: Options = {}): PluginOption[] { viteReact.preambleCode = preambleCode +function canSkipBabel( + plugins: ReactBabelOptions['plugins'], + babelOptions: ReactBabelOptions, +) { + return !( + plugins.length || + babelOptions.presets.length || + babelOptions.configFile || + babelOptions.babelrc + ) +} + const loadedPlugin = new Map() function loadPlugin(path: string): any { const cached = loadedPlugin.get(path) @@ -408,3 +449,7 @@ function getReactCompilerRuntimeModule( } return moduleName } + +function ensureArray(value: T | T[]): T[] { + return Array.isArray(value) ? value : [value] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5e97246fa..bb0724961 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -94,6 +94,9 @@ importers: '@babel/plugin-transform-react-jsx-source': specifier: ^7.25.9 version: 7.25.9(@babel/core@7.26.10) + '@rolldown/pluginutils': + specifier: 1.0.0-beta.9 + version: 1.0.0-beta.9 '@types/babel__core': specifier: ^7.20.5 version: 7.20.5 @@ -109,6 +112,10 @@ importers: version: 3.5.0(typescript@5.8.3) packages/plugin-react-oxc: + dependencies: + '@rolldown/pluginutils': + specifier: 1.0.0-beta.9 + version: 1.0.0-beta.9 devDependencies: '@vitejs/react-common': specifier: workspace:* @@ -122,6 +129,9 @@ importers: packages/plugin-react-swc: dependencies: + '@rolldown/pluginutils': + specifier: 1.0.0-beta.9 + version: 1.0.0-beta.9 '@swc/core': specifier: ^1.11.22 version: 1.11.22 @@ -1490,6 +1500,9 @@ packages: cpu: [x64] os: [win32] + '@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'} @@ -1716,6 +1729,7 @@ 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: @@ -4767,6 +4781,8 @@ snapshots: '@rolldown/binding-win32-x64-msvc@1.0.0-beta.8-commit.2686eb1': optional: true + '@rolldown/pluginutils@1.0.0-beta.9': {} + '@rollup/plugin-alias@5.1.1(rollup@4.37.0)': optionalDependencies: rollup: 4.37.0 From e53210baa08cc082d59d55e5ca69e6f537bf55ff Mon Sep 17 00:00:00 2001 From: underfin Date: Fri, 9 May 2025 18:06:02 +0800 Subject: [PATCH 004/313] 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 005/313] 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 006/313] 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 007/313] 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 008/313] 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 009/313] 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 010/313] 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 011/313] 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 012/313] 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 013/313] 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 014/313] 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 02b1ede45dd88c9a81b4509235efe5a1c01fea20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Barr=C3=A9?= Date: Thu, 22 May 2025 13:01:01 +0200 Subject: [PATCH 015/313] fix(hmr): skip HMR for JSX files with hooks (#480) --- packages/common/refresh-utils.ts | 2 +- packages/plugin-react-oxc/CHANGELOG.md | 6 ++++- packages/plugin-react-swc/CHANGELOG.md | 8 ++++-- packages/plugin-react/CHANGELOG.md | 6 ++++- .../__tests__/hook-with-jsx.spec.ts | 27 +++++++++++++++++++ .../__tests__/oxc/hook-with-jsx.spec.ts | 1 + playground/hook-with-jsx/index.html | 13 +++++++++ playground/hook-with-jsx/package.json | 19 +++++++++++++ playground/hook-with-jsx/public/vite.svg | 1 + playground/hook-with-jsx/src/App.tsx | 6 +++++ playground/hook-with-jsx/src/index.tsx | 9 +++++++ .../hook-with-jsx/src/useButtonHook.tsx | 10 +++++++ playground/hook-with-jsx/tsconfig.json | 23 ++++++++++++++++ playground/hook-with-jsx/vite.config.ts | 7 +++++ pnpm-lock.yaml | 19 +++++++++++++ 15 files changed, 152 insertions(+), 5 deletions(-) create mode 100644 playground/hook-with-jsx/__tests__/hook-with-jsx.spec.ts create mode 100644 playground/hook-with-jsx/__tests__/oxc/hook-with-jsx.spec.ts create mode 100644 playground/hook-with-jsx/index.html create mode 100644 playground/hook-with-jsx/package.json create mode 100644 playground/hook-with-jsx/public/vite.svg create mode 100644 playground/hook-with-jsx/src/App.tsx create mode 100644 playground/hook-with-jsx/src/index.tsx create mode 100644 playground/hook-with-jsx/src/useButtonHook.tsx create mode 100644 playground/hook-with-jsx/tsconfig.json create mode 100644 playground/hook-with-jsx/vite.config.ts diff --git a/packages/common/refresh-utils.ts b/packages/common/refresh-utils.ts index 559cbaa04..8c0cadc12 100644 --- a/packages/common/refresh-utils.ts +++ b/packages/common/refresh-utils.ts @@ -1,7 +1,7 @@ export const runtimePublicPath = '/@react-refresh' const reactCompRE = /extends\s+(?:React\.)?(?:Pure)?Component/ -const refreshContentRE = /\$Refresh(?:Reg|Sig)\$\(/ +const refreshContentRE = /\$RefreshReg\$\(/ // NOTE: this is exposed publicly via plugin-react export const preambleCode = `import { injectIntoGlobalHook } from "__BASE__${runtimePublicPath.slice( diff --git a/packages/plugin-react-oxc/CHANGELOG.md b/packages/plugin-react-oxc/CHANGELOG.md index 7648dec4d..2f93c2517 100644 --- a/packages/plugin-react-oxc/CHANGELOG.md +++ b/packages/plugin-react-oxc/CHANGELOG.md @@ -2,10 +2,14 @@ ## Unreleased -### Add `filter` for rolldown-vite +### Add `filter` for rolldown-vite [#470](https://github.com/vitejs/vite-plugin-react/pull/470) Added `filter` so that it is more performant when running this plugin with rolldown-powered version of Vite. +### Skip HMR for JSX files with hooks [#480](https://github.com/vitejs/vite-plugin-react/pull/480) + +This removes the HMR warning for hooks with JSX. + ## 0.1.1 (2025-04-10) ## 0.1.0 (2025-04-09) diff --git a/packages/plugin-react-swc/CHANGELOG.md b/packages/plugin-react-swc/CHANGELOG.md index 79ed6f409..aed49abc7 100644 --- a/packages/plugin-react-swc/CHANGELOG.md +++ b/packages/plugin-react-swc/CHANGELOG.md @@ -2,14 +2,18 @@ ## Unreleased -### Add `filter` for rolldown-vite +### Add `filter` for rolldown-vite [#470](https://github.com/vitejs/vite-plugin-react/pull/470) Added `filter` so that it is more performant when running this plugin with rolldown-powered version of Vite. -### Skip HMR preamble in Vitest browser mode +### Skip HMR preamble in Vitest browser mode [#478](https://github.com/vitejs/vite-plugin-react/pull/478) This was causing annoying `Sourcemap for "/@react-refresh" points to missing source files` and is unnecessary in test mode. +### Skip HMR for JSX files with hooks [#480](https://github.com/vitejs/vite-plugin-react/pull/480) + +This removes the HMR warning for hooks with JSX. + ## 3.9.0 (2025-04-15) ### Make compatible with rolldown-vite diff --git a/packages/plugin-react/CHANGELOG.md b/packages/plugin-react/CHANGELOG.md index ccb6b02c9..52105e6d6 100644 --- a/packages/plugin-react/CHANGELOG.md +++ b/packages/plugin-react/CHANGELOG.md @@ -2,10 +2,14 @@ ## Unreleased -### Add `filter` for rolldown-vite +### Add `filter` for rolldown-vite [#470](https://github.com/vitejs/vite-plugin-react/pull/470) Added `filter` so that it is more performant when running this plugin with rolldown-powered version of Vite. +### Skip HMR for JSX files with hooks [#480](https://github.com/vitejs/vite-plugin-react/pull/480) + +This removes the HMR warning for hooks with JSX. + ## 4.4.1 (2025-04-19) Fix type issue when using `moduleResolution: "node"` in tsconfig [#462](https://github.com/vitejs/vite-plugin-react/pull/462) diff --git a/playground/hook-with-jsx/__tests__/hook-with-jsx.spec.ts b/playground/hook-with-jsx/__tests__/hook-with-jsx.spec.ts new file mode 100644 index 000000000..570ca8174 --- /dev/null +++ b/playground/hook-with-jsx/__tests__/hook-with-jsx.spec.ts @@ -0,0 +1,27 @@ +import { expect, test } from 'vitest' +import { + editFile, + isServe, + page, + untilBrowserLogAfter, + untilUpdated, +} from '~utils' + +test('should render', async () => { + expect(await page.textContent('button')).toMatch('count is 0') + expect(await page.click('button')) + expect(await page.textContent('button')).toMatch('count is 1') +}) + +if (isServe) { + test('Hook with JSX HMR', async () => { + 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 untilUpdated(() => page.textContent('button'), 'count is 1!') + }) +} diff --git a/playground/hook-with-jsx/__tests__/oxc/hook-with-jsx.spec.ts b/playground/hook-with-jsx/__tests__/oxc/hook-with-jsx.spec.ts new file mode 100644 index 000000000..4696fae50 --- /dev/null +++ b/playground/hook-with-jsx/__tests__/oxc/hook-with-jsx.spec.ts @@ -0,0 +1 @@ +import '../hook-with-jsx.spec' diff --git a/playground/hook-with-jsx/index.html b/playground/hook-with-jsx/index.html new file mode 100644 index 000000000..96ad88a1c --- /dev/null +++ b/playground/hook-with-jsx/index.html @@ -0,0 +1,13 @@ + + + + + + + React hook with JSX + + +
+ + + diff --git a/playground/hook-with-jsx/package.json b/playground/hook-with-jsx/package.json new file mode 100644 index 000000000..6a7bbfd7a --- /dev/null +++ b/playground/hook-with-jsx/package.json @@ -0,0 +1,19 @@ +{ + "name": "@vitejs/test-hook-with-jsx", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "react": "^19.1.0", + "react-dom": "^19.1.0" + }, + "devDependencies": { + "@types/react": "^19.1.2", + "@types/react-dom": "^19.1.2", + "@vitejs/plugin-react": "workspace:*" + } +} diff --git a/playground/hook-with-jsx/public/vite.svg b/playground/hook-with-jsx/public/vite.svg new file mode 100644 index 000000000..4dcd77ad0 --- /dev/null +++ b/playground/hook-with-jsx/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/playground/hook-with-jsx/src/App.tsx b/playground/hook-with-jsx/src/App.tsx new file mode 100644 index 000000000..9e0ae242e --- /dev/null +++ b/playground/hook-with-jsx/src/App.tsx @@ -0,0 +1,6 @@ +import { useButtonHook } from './useButtonHook.tsx' + +export function App() { + const button = useButtonHook() + return
{button}
+} diff --git a/playground/hook-with-jsx/src/index.tsx b/playground/hook-with-jsx/src/index.tsx new file mode 100644 index 000000000..5e7046ce2 --- /dev/null +++ b/playground/hook-with-jsx/src/index.tsx @@ -0,0 +1,9 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import { App } from './App.tsx' + +createRoot(document.getElementById('root')!).render( + + + , +) diff --git a/playground/hook-with-jsx/src/useButtonHook.tsx b/playground/hook-with-jsx/src/useButtonHook.tsx new file mode 100644 index 000000000..cae586690 --- /dev/null +++ b/playground/hook-with-jsx/src/useButtonHook.tsx @@ -0,0 +1,10 @@ +import { useState } from 'react' + +export function useButtonHook() { + const [count, setCount] = useState(0) + return ( + + ) +} diff --git a/playground/hook-with-jsx/tsconfig.json b/playground/hook-with-jsx/tsconfig.json new file mode 100644 index 000000000..c9e7d3d89 --- /dev/null +++ b/playground/hook-with-jsx/tsconfig.json @@ -0,0 +1,23 @@ +{ + "include": ["src"], + "compilerOptions": { + "module": "ESNext", + "lib": ["ESNext", "DOM", "DOM.Iterable"], + "target": "ESNext", + "jsx": "react-jsx", + "types": ["vite/client"], + "noEmit": true, + "isolatedModules": true, + "skipLibCheck": true, + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "useUnknownInCatchVariables": true + } +} diff --git a/playground/hook-with-jsx/vite.config.ts b/playground/hook-with-jsx/vite.config.ts new file mode 100644 index 000000000..6e5b8e40a --- /dev/null +++ b/playground/hook-with-jsx/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +export default defineConfig({ + server: { port: 8909 /* Should be unique */ }, + plugins: [react()], +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bb0724961..d0bcf61ef 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -521,6 +521,25 @@ importers: specifier: ^5.8.3 version: 5.8.3 + playground/hook-with-jsx: + dependencies: + react: + specifier: ^19.1.0 + version: 19.1.0 + react-dom: + specifier: ^19.1.0 + version: 19.1.0(react@19.1.0) + devDependencies: + '@types/react': + specifier: ^19.1.2 + version: 19.1.2 + '@types/react-dom': + specifier: ^19.1.2 + version: 19.1.2(@types/react@19.1.2) + '@vitejs/plugin-react': + specifier: workspace:* + version: link:../../packages/plugin-react + playground/mdx: dependencies: react: From 476e705375ef618458918580beb63f43799d12e4 Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Fri, 23 May 2025 09:32:10 +0900 Subject: [PATCH 016/313] release: plugin-react@4.5.0 --- packages/plugin-react/CHANGELOG.md | 2 ++ packages/plugin-react/package.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/plugin-react/CHANGELOG.md b/packages/plugin-react/CHANGELOG.md index 52105e6d6..030c4e9ae 100644 --- a/packages/plugin-react/CHANGELOG.md +++ b/packages/plugin-react/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +## 4.5.0 (2025-05-23) + ### Add `filter` for rolldown-vite [#470](https://github.com/vitejs/vite-plugin-react/pull/470) Added `filter` so that it is more performant when running this plugin with rolldown-powered version of Vite. diff --git a/packages/plugin-react/package.json b/packages/plugin-react/package.json index cc6bb6ddc..1d1a38c2e 100644 --- a/packages/plugin-react/package.json +++ b/packages/plugin-react/package.json @@ -1,6 +1,6 @@ { "name": "@vitejs/plugin-react", - "version": "4.4.1", + "version": "4.5.0", "license": "MIT", "author": "Evan You", "description": "The default Vite plugin for React projects", From dcadcfc2841c0bedfe44279c556835c350dfa5fa Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Fri, 23 May 2025 09:32:53 +0900 Subject: [PATCH 017/313] release: plugin-react-swc@3.10.0 --- packages/plugin-react-swc/CHANGELOG.md | 2 ++ packages/plugin-react-swc/package.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/plugin-react-swc/CHANGELOG.md b/packages/plugin-react-swc/CHANGELOG.md index aed49abc7..253f053b2 100644 --- a/packages/plugin-react-swc/CHANGELOG.md +++ b/packages/plugin-react-swc/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +## 3.10.0 (2025-05-23) + ### Add `filter` for rolldown-vite [#470](https://github.com/vitejs/vite-plugin-react/pull/470) Added `filter` so that it is more performant when running this plugin with rolldown-powered version of Vite. diff --git a/packages/plugin-react-swc/package.json b/packages/plugin-react-swc/package.json index e41f5cb0a..ec1aab90d 100644 --- a/packages/plugin-react-swc/package.json +++ b/packages/plugin-react-swc/package.json @@ -1,6 +1,6 @@ { "name": "@vitejs/plugin-react-swc", - "version": "3.9.0", + "version": "3.10.0", "license": "MIT", "author": "Arnaud Barré (https://github.com/ArnaudBarre)", "description": "Speed up your Vite dev server with SWC", From 2e69ea4e9d80dc9baaeab5468fd24d1c83cc171d Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Fri, 23 May 2025 09:33:08 +0900 Subject: [PATCH 018/313] release: plugin-react-oxc@0.2.0 --- packages/plugin-react-oxc/CHANGELOG.md | 2 ++ packages/plugin-react-oxc/package.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/plugin-react-oxc/CHANGELOG.md b/packages/plugin-react-oxc/CHANGELOG.md index 2f93c2517..d73252b8b 100644 --- a/packages/plugin-react-oxc/CHANGELOG.md +++ b/packages/plugin-react-oxc/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +## 0.2.0 (2025-05-23) + ### Add `filter` for rolldown-vite [#470](https://github.com/vitejs/vite-plugin-react/pull/470) Added `filter` so that it is more performant when running this plugin with rolldown-powered version of Vite. diff --git a/packages/plugin-react-oxc/package.json b/packages/plugin-react-oxc/package.json index 8b9321249..a94482957 100644 --- a/packages/plugin-react-oxc/package.json +++ b/packages/plugin-react-oxc/package.json @@ -1,6 +1,6 @@ { "name": "@vitejs/plugin-react-oxc", - "version": "0.1.1", + "version": "0.2.0", "license": "MIT", "author": "Evan You", "contributors": [ From 2cf67b01130e01b3b8f1835a334eb7d322593a16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0?= Date: Fri, 23 May 2025 16:57:04 +0900 Subject: [PATCH 019/313] chore: fix changelog log on release command (#483) --- scripts/release.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/release.ts b/scripts/release.ts index 0f02b0d5a..7a261555c 100644 --- a/scripts/release.ts +++ b/scripts/release.ts @@ -2,6 +2,8 @@ import { readFileSync, writeFileSync } from 'node:fs' import { release } from '@vitejs/release-scripts' import colors from 'picocolors' +const nextH2RE = /^## /gm + release({ repo: 'vite-plugin-react', packages: ['plugin-react', 'plugin-react-swc', 'plugin-react-oxc'], @@ -18,11 +20,9 @@ release({ throw new Error("Can't find '## Unreleased' section in CHANGELOG.md") } const index = changelog.indexOf('## Unreleased') + 13 - console.log( - colors.dim( - changelog.slice(index, changelog.indexOf('## ', index)).trim(), - ), - ) + nextH2RE.lastIndex = index + const nextH2Pos = nextH2RE.exec(changelog)?.index + console.log(colors.dim(changelog.slice(index, nextH2Pos).trim())) }, generateChangelog: async (pkgName, version) => { if (pkgName === 'plugin-react-swc') { From 88585dbd60f8ec40b31bed8994ac3a73fc0f1bac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Barr=C3=A9?= Date: Wed, 28 May 2025 15:09:32 +0200 Subject: [PATCH 020/313] fix: add explicit semicolon in preambleCode (#485) --- packages/common/refresh-utils.ts | 2 +- packages/plugin-react-oxc/CHANGELOG.md | 4 ++++ packages/plugin-react-swc/CHANGELOG.md | 4 ++++ packages/plugin-react/CHANGELOG.md | 4 ++++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/common/refresh-utils.ts b/packages/common/refresh-utils.ts index 8c0cadc12..7528bf781 100644 --- a/packages/common/refresh-utils.ts +++ b/packages/common/refresh-utils.ts @@ -6,7 +6,7 @@ const refreshContentRE = /\$RefreshReg\$\(/ // NOTE: this is exposed publicly via plugin-react export const preambleCode = `import { injectIntoGlobalHook } from "__BASE__${runtimePublicPath.slice( 1, -)}" +)}"; injectIntoGlobalHook(window); window.$RefreshReg$ = () => {}; window.$RefreshSig$ = () => (type) => type;` diff --git a/packages/plugin-react-oxc/CHANGELOG.md b/packages/plugin-react-oxc/CHANGELOG.md index d73252b8b..c2dce2e97 100644 --- a/packages/plugin-react-oxc/CHANGELOG.md +++ b/packages/plugin-react-oxc/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Add explicit semicolon in preambleCode [#485](https://github.com/vitejs/vite-plugin-react/pull/485) + +This fixes an edge case when using HTML minifiers that strips line breaks aggressively. + ## 0.2.0 (2025-05-23) ### Add `filter` for rolldown-vite [#470](https://github.com/vitejs/vite-plugin-react/pull/470) diff --git a/packages/plugin-react-swc/CHANGELOG.md b/packages/plugin-react-swc/CHANGELOG.md index 253f053b2..fb714b4f5 100644 --- a/packages/plugin-react-swc/CHANGELOG.md +++ b/packages/plugin-react-swc/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Add explicit semicolon in preambleCode [#485](https://github.com/vitejs/vite-plugin-react/pull/485) + +This fixes an edge case when using HTML minifiers that strips line breaks aggressively. + ## 3.10.0 (2025-05-23) ### Add `filter` for rolldown-vite [#470](https://github.com/vitejs/vite-plugin-react/pull/470) diff --git a/packages/plugin-react/CHANGELOG.md b/packages/plugin-react/CHANGELOG.md index 030c4e9ae..97f516de0 100644 --- a/packages/plugin-react/CHANGELOG.md +++ b/packages/plugin-react/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Add explicit semicolon in preambleCode [#485](https://github.com/vitejs/vite-plugin-react/pull/485) + +This fixes an edge case when using HTML minifiers that strips line breaks aggressively. + ## 4.5.0 (2025-05-23) ### Add `filter` for rolldown-vite [#470](https://github.com/vitejs/vite-plugin-react/pull/470) From 2f3205265904ff7770021700689a0d6fe17b1f03 Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Tue, 3 Jun 2025 12:24:36 +0900 Subject: [PATCH 021/313] release: plugin-react@4.5.1 --- packages/plugin-react/CHANGELOG.md | 2 ++ packages/plugin-react/package.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/plugin-react/CHANGELOG.md b/packages/plugin-react/CHANGELOG.md index 97f516de0..87db24bb4 100644 --- a/packages/plugin-react/CHANGELOG.md +++ b/packages/plugin-react/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +## 4.5.1 (2025-06-03) + ### Add explicit semicolon in preambleCode [#485](https://github.com/vitejs/vite-plugin-react/pull/485) This fixes an edge case when using HTML minifiers that strips line breaks aggressively. diff --git a/packages/plugin-react/package.json b/packages/plugin-react/package.json index 1d1a38c2e..0d2476dfd 100644 --- a/packages/plugin-react/package.json +++ b/packages/plugin-react/package.json @@ -1,6 +1,6 @@ { "name": "@vitejs/plugin-react", - "version": "4.5.0", + "version": "4.5.1", "license": "MIT", "author": "Evan You", "description": "The default Vite plugin for React projects", From 8ce7183265c43f88623655a9cfdcec5282068f9b Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Tue, 3 Jun 2025 12:25:06 +0900 Subject: [PATCH 022/313] release: plugin-react-swc@3.10.1 --- packages/plugin-react-swc/CHANGELOG.md | 2 ++ packages/plugin-react-swc/package.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/plugin-react-swc/CHANGELOG.md b/packages/plugin-react-swc/CHANGELOG.md index fb714b4f5..7f2f15c29 100644 --- a/packages/plugin-react-swc/CHANGELOG.md +++ b/packages/plugin-react-swc/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +## 3.10.1 (2025-06-03) + ### Add explicit semicolon in preambleCode [#485](https://github.com/vitejs/vite-plugin-react/pull/485) This fixes an edge case when using HTML minifiers that strips line breaks aggressively. diff --git a/packages/plugin-react-swc/package.json b/packages/plugin-react-swc/package.json index ec1aab90d..2b9dc1d4a 100644 --- a/packages/plugin-react-swc/package.json +++ b/packages/plugin-react-swc/package.json @@ -1,6 +1,6 @@ { "name": "@vitejs/plugin-react-swc", - "version": "3.10.0", + "version": "3.10.1", "license": "MIT", "author": "Arnaud Barré (https://github.com/ArnaudBarre)", "description": "Speed up your Vite dev server with SWC", From c7124fb35d36843d4ecb138535c2f00ff7211bac Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Tue, 3 Jun 2025 12:25:23 +0900 Subject: [PATCH 023/313] release: plugin-react-oxc@0.2.1 --- packages/plugin-react-oxc/CHANGELOG.md | 2 ++ packages/plugin-react-oxc/package.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/plugin-react-oxc/CHANGELOG.md b/packages/plugin-react-oxc/CHANGELOG.md index c2dce2e97..f9d56fd28 100644 --- a/packages/plugin-react-oxc/CHANGELOG.md +++ b/packages/plugin-react-oxc/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +## 0.2.1 (2025-06-03) + ### Add explicit semicolon in preambleCode [#485](https://github.com/vitejs/vite-plugin-react/pull/485) This fixes an edge case when using HTML minifiers that strips line breaks aggressively. diff --git a/packages/plugin-react-oxc/package.json b/packages/plugin-react-oxc/package.json index a94482957..a12f1725c 100644 --- a/packages/plugin-react-oxc/package.json +++ b/packages/plugin-react-oxc/package.json @@ -1,6 +1,6 @@ { "name": "@vitejs/plugin-react-oxc", - "version": "0.2.0", + "version": "0.2.1", "license": "MIT", "author": "Evan You", "contributors": [ From 7690525fe17dd6d693f4043b68652ad940d5bd33 Mon Sep 17 00:00:00 2001 From: Alexander Lichter Date: Wed, 4 Jun 2025 05:23:39 +0200 Subject: [PATCH 024/313] chore(readme): add plugin-react-oxc to the table (#490) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e8e034627..96f4281a2 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ See [`@vitejs/plugin-react` documentation](packages/plugin-react/README.md) and | Package | Version (click for changelogs) | | ----------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------- | | [@vitejs/plugin-react](packages/plugin-react) | [![plugin-react version](https://img.shields.io/npm/v/@vitejs/plugin-react.svg?label=%20)](packages/plugin-react/CHANGELOG.md) | +| [@vitejs/plugin-react-oxc](packages/plugin-react-oxc) | [![plugin-react-oxc version](https://img.shields.io/npm/v/@vitejs/plugin-react-oxc.svg?label=%20)](packages/plugin-react-oxc/CHANGELOG.md) | | [@vitejs/plugin-react-swc](packages/plugin-react-swc) | [![plugin-react-swc version](https://img.shields.io/npm/v/@vitejs/plugin-react-swc.svg?label=%20)](packages/plugin-react-swc/CHANGELOG.md) | ## License From 4bec551eb2f7651be24c77fb4be0da95e6c0e4fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0?= Date: Wed, 4 Jun 2025 12:35:00 +0900 Subject: [PATCH 025/313] fix: use `optimizeDeps.rollupOptions` for rolldown-vite (#489) --- packages/plugin-react-swc/CHANGELOG.md | 4 ++++ packages/plugin-react-swc/src/index.ts | 5 ++++- packages/plugin-react/CHANGELOG.md | 4 ++++ packages/plugin-react/src/index.ts | 5 ++++- 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/plugin-react-swc/CHANGELOG.md b/packages/plugin-react-swc/CHANGELOG.md index 7f2f15c29..f9166a84c 100644 --- a/packages/plugin-react-swc/CHANGELOG.md +++ b/packages/plugin-react-swc/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Use `optimizeDeps.rollupOptions` instead of `optimizeDeps.esbuildOptions` for rolldown-vite [#489](https://github.com/vitejs/vite-plugin-react/pull/489) + +This suppresses the warning about `optimizeDeps.esbuildOptions` being deprecated in rolldown-vite. + ## 3.10.1 (2025-06-03) ### Add explicit semicolon in preambleCode [#485](https://github.com/vitejs/vite-plugin-react/pull/485) diff --git a/packages/plugin-react-swc/src/index.ts b/packages/plugin-react-swc/src/index.ts index 6f20a05df..b2a277e31 100644 --- a/packages/plugin-react-swc/src/index.ts +++ b/packages/plugin-react-swc/src/index.ts @@ -12,6 +12,7 @@ import { transform, } from '@swc/core' import type { PluginOption } from 'vite' +import * as vite from 'vite' import { addRefreshWrapper, getPreambleCode, @@ -124,7 +125,9 @@ const react = (_options?: Options): PluginOption[] => { oxc: false, optimizeDeps: { include: [`${options.jsxImportSource}/jsx-dev-runtime`], - esbuildOptions: { jsx: 'automatic' }, + ...('rolldownVersion' in vite + ? { rollupOptions: { jsx: { mode: 'automatic' } } } + : { esbuildOptions: { jsx: 'automatic' } }), }, }), configResolved(config) { diff --git a/packages/plugin-react/CHANGELOG.md b/packages/plugin-react/CHANGELOG.md index 87db24bb4..7f5082a81 100644 --- a/packages/plugin-react/CHANGELOG.md +++ b/packages/plugin-react/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Use `optimizeDeps.rollupOptions` instead of `optimizeDeps.esbuildOptions` for rolldown-vite [#489](https://github.com/vitejs/vite-plugin-react/pull/489) + +This suppresses the warning about `optimizeDeps.esbuildOptions` being deprecated in rolldown-vite. + ## 4.5.1 (2025-06-03) ### Add explicit semicolon in preambleCode [#485](https://github.com/vitejs/vite-plugin-react/pull/485) diff --git a/packages/plugin-react/src/index.ts b/packages/plugin-react/src/index.ts index 250c4477e..147845e5c 100644 --- a/packages/plugin-react/src/index.ts +++ b/packages/plugin-react/src/index.ts @@ -157,7 +157,10 @@ export default function viteReact(opts: Options = {}): PluginOption[] { jsx: 'automatic', jsxImportSource: opts.jsxImportSource, }, - optimizeDeps: { esbuildOptions: { jsx: 'automatic' } }, + optimizeDeps: + 'rolldownVersion' in vite + ? { rollupOptions: { jsx: { mode: 'automatic' } } } + : { esbuildOptions: { jsx: 'automatic' } }, } } }, From c4501339e5f43d814acdd6a5397652d5178bca36 Mon Sep 17 00:00:00 2001 From: Alexander Lichter Date: Fri, 6 Jun 2025 04:32:10 +0200 Subject: [PATCH 026/313] feat: suggest `vite-plugin-react-oxc` when using `rolldown-vite` (#491) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 翠 --- packages/plugin-react-swc/CHANGELOG.md | 4 ++++ packages/plugin-react-swc/README.md | 8 ++++++++ packages/plugin-react-swc/src/index.ts | 19 ++++++++++++++++++- packages/plugin-react/CHANGELOG.md | 5 +++++ packages/plugin-react/README.md | 4 ++++ packages/plugin-react/src/index.ts | 16 ++++++++++++++++ 6 files changed, 55 insertions(+), 1 deletion(-) diff --git a/packages/plugin-react-swc/CHANGELOG.md b/packages/plugin-react-swc/CHANGELOG.md index f9166a84c..456128748 100644 --- a/packages/plugin-react-swc/CHANGELOG.md +++ b/packages/plugin-react-swc/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Suggest `@vitejs/plugin-react-oxc` if rolldown-vite is detected [#491](https://github.com/vitejs/vite-plugin-react/pull/491) + +Emit a log which recommends `@vitejs/plugin-react-oxc` when `rolldown-vite` is detected to improve performance and use Oxc under the hood. The warning can be disabled by setting `disableOxcRecommendation: false` in the plugin options. + ### Use `optimizeDeps.rollupOptions` instead of `optimizeDeps.esbuildOptions` for rolldown-vite [#489](https://github.com/vitejs/vite-plugin-react/pull/489) This suppresses the warning about `optimizeDeps.esbuildOptions` being deprecated in rolldown-vite. diff --git a/packages/plugin-react-swc/README.md b/packages/plugin-react-swc/README.md index 76bd52e6f..c74f11d72 100644 --- a/packages/plugin-react-swc/README.md +++ b/packages/plugin-react-swc/README.md @@ -117,6 +117,14 @@ react({ }) ``` +### disableOxcRecommendation + +If set, disables the recommendation to use `@vitejs/plugin-react-oxc` (which is shown when `rolldown-vite` is detected and neither `swc` plugins are used nor the `swc` options are mutated). + +```ts +react({ disableOxcRecommendation: true }) +``` + ## Consistent components exports For React refresh to work correctly, your file should only export React components. The best explanation I've read is the one from the [Gatsby docs](https://www.gatsbyjs.com/docs/reference/local-development/fast-refresh/#how-it-works). diff --git a/packages/plugin-react-swc/src/index.ts b/packages/plugin-react-swc/src/index.ts index b2a277e31..9f9f6738b 100644 --- a/packages/plugin-react-swc/src/index.ts +++ b/packages/plugin-react-swc/src/index.ts @@ -12,13 +12,13 @@ import { transform, } from '@swc/core' import type { PluginOption } from 'vite' -import * as vite from 'vite' import { addRefreshWrapper, getPreambleCode, runtimePublicPath, silenceUseClientWarning, } from '@vitejs/react-common' +import * as vite from 'vite' import { exactRegex } from '@rolldown/pluginutils' /* eslint-disable no-restricted-globals */ @@ -76,6 +76,11 @@ type Options = { * feature doesn't work is not fun, so we won't provide support for it, hence the name `useAtYourOwnRisk` */ useAtYourOwnRisk_mutateSwcOptions?: (options: SWCOptions) => void + + /** + * If set, disables the recommendation to use `@vitejs/plugin-react-oxc` + */ + disableOxcRecommendation?: boolean } const react = (_options?: Options): PluginOption[] => { @@ -91,6 +96,7 @@ const react = (_options?: Options): PluginOption[] => { reactRefreshHost: _options?.reactRefreshHost, useAtYourOwnRisk_mutateSwcOptions: _options?.useAtYourOwnRisk_mutateSwcOptions, + disableOxcRecommendation: _options?.disableOxcRecommendation, } return [ @@ -144,6 +150,17 @@ const react = (_options?: Options): PluginOption[] => { '[vite:react-swc] The MDX plugin should be placed before this plugin', ) } + + if ( + 'rolldownVersion' in vite && + !options.plugins && + !options.useAtYourOwnRisk_mutateSwcOptions && + !options.disableOxcRecommendation + ) { + config.logger.warn( + '[vite:react-swc] We recommend switching to `@vitejs/plugin-react-oxc` for improved performance as no swc plugins are used. More information at https://vite.dev/rolldown', + ) + } }, transformIndexHtml: (_, config) => { if (!hmrDisabled) { diff --git a/packages/plugin-react/CHANGELOG.md b/packages/plugin-react/CHANGELOG.md index 7f5082a81..f7d2e708a 100644 --- a/packages/plugin-react/CHANGELOG.md +++ b/packages/plugin-react/CHANGELOG.md @@ -2,6 +2,11 @@ ## Unreleased +### Suggest `@vitejs/plugin-react-oxc` if rolldown-vite is detected [#491](https://github.com/vitejs/vite-plugin-react/pull/491) + +Emit a log which recommends `@vitejs/plugin-react-oxc` when `rolldown-vite` is detected to improve performance and use Oxc under the hood. The warning can be disabled by setting `disableOxcRecommendation: false` in the plugin options. + + ### Use `optimizeDeps.rollupOptions` instead of `optimizeDeps.esbuildOptions` for rolldown-vite [#489](https://github.com/vitejs/vite-plugin-react/pull/489) This suppresses the warning about `optimizeDeps.esbuildOptions` being deprecated in rolldown-vite. diff --git a/packages/plugin-react/README.md b/packages/plugin-react/README.md index 7eaa29ab4..af7a2d545 100644 --- a/packages/plugin-react/README.md +++ b/packages/plugin-react/README.md @@ -129,6 +129,10 @@ Otherwise, you'll probably get this error: Uncaught Error: @vitejs/plugin-react can't detect preamble. Something is wrong. ``` +### disableOxcRecommendation + +If set, disables the recommendation to use `@vitejs/plugin-react-oxc` (which is shown when `rolldown-vite` is detected and `babel` is not configured). + ## Consistent components exports For React refresh to work correctly, your file should only export React components. You can find a good explanation in the [Gatsby docs](https://www.gatsbyjs.com/docs/reference/local-development/fast-refresh/#how-it-works). diff --git a/packages/plugin-react/src/index.ts b/packages/plugin-react/src/index.ts index 147845e5c..8103e2f25 100644 --- a/packages/plugin-react/src/index.ts +++ b/packages/plugin-react/src/index.ts @@ -62,6 +62,11 @@ export interface Options { * reactRefreshHost: 'http://localhost:3000' */ reactRefreshHost?: string + + /** + * If set, disables the recommendation to use `@vitejs/plugin-react-oxc` + */ + disableOxcRecommendation?: boolean } export type BabelOptions = Omit< @@ -182,6 +187,17 @@ export default function viteReact(opts: Options = {}): PluginOption[] { .map((plugin) => plugin.api?.reactBabel) .filter(defined) + if ( + 'rolldownVersion' in vite && + !opts.babel && + !hooks.length && + !opts.disableOxcRecommendation + ) { + config.logger.warn( + '[vite:react-babel] We recommend switching to `@vitejs/plugin-react-oxc` for improved performance. More information at https://vite.dev/rolldown', + ) + } + if (hooks.length > 0) { runPluginOverrides = (babelOptions, context) => { hooks.forEach((hook) => hook(babelOptions, context, config)) From 6db7e7c95826009c7db20b990cdc874569967489 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 6 Jun 2025 16:20:46 +0900 Subject: [PATCH 027/313] fix(deps): update all non-major dependencies (#469) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 24 +- packages/plugin-react-oxc/package.json | 2 +- packages/plugin-react-swc/package.json | 8 +- .../playground/base-path/package.json | 4 +- .../playground/class-components/package.json | 4 +- .../playground/decorators/package.json | 4 +- .../playground/emotion-plugin/package.json | 6 +- .../playground/emotion/package.json | 4 +- .../playground/hmr/package.json | 4 +- .../playground/mdx/package.json | 4 +- .../playground/shadow-export/package.json | 4 +- .../playground/styled-components/package.json | 8 +- .../playground/ts-lib/package.json | 6 +- .../playground/worker/package.json | 4 +- packages/plugin-react/package.json | 8 +- playground/class-components/package.json | 4 +- playground/compiler-react-18/package.json | 6 +- playground/compiler/package.json | 8 +- playground/hook-with-jsx/package.json | 4 +- playground/mdx/package.json | 4 +- playground/react-emotion/package.json | 2 +- pnpm-lock.yaml | 2013 ++++++++++------- pnpm-workspace.yaml | 2 +- 23 files changed, 1282 insertions(+), 855 deletions(-) diff --git a/package.json b/package.json index 4e5a1da38..4bc7d7511 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "engines": { "node": "^14.18.0 || >=16.0.0" }, - "packageManager": "pnpm@10.9.0", + "packageManager": "pnpm@10.11.1", "homepage": "https://github.com/vitejs/vite-plugin-react/", "keywords": [ "frontend", @@ -32,26 +32,26 @@ "ci-publish": "tsx scripts/publishCI.ts" }, "devDependencies": { - "@eslint/js": "^9.25.1", + "@eslint/js": "^9.28.0", "@types/fs-extra": "^11.0.4", - "@types/node": "^22.15.2", + "@types/node": "^22.15.30", "@vitejs/release-scripts": "^1.5.0", - "eslint": "^9.25.1", - "eslint-plugin-import-x": "^4.11.0", - "eslint-plugin-n": "^17.17.0", - "eslint-plugin-regexp": "^2.7.0", + "eslint": "^9.28.0", + "eslint-plugin-import-x": "^4.15.1", + "eslint-plugin-n": "^17.19.0", + "eslint-plugin-regexp": "^2.8.0", "fs-extra": "^11.3.0", - "globals": "^16.0.0", - "lint-staged": "^15.5.1", + "globals": "^16.2.0", + "lint-staged": "^15.5.2", "picocolors": "^1.1.1", "playwright-chromium": "^1.52.0", "prettier": "^3.0.3", "simple-git-hooks": "^2.13.0", - "tsx": "^4.19.3", + "tsx": "^4.19.4", "typescript": "^5.8.3", - "typescript-eslint": "^8.31.0", + "typescript-eslint": "^8.33.1", "vite": "^6.3.3", - "vitest": "^3.1.2" + "vitest": "^3.2.2" }, "simple-git-hooks": { "pre-commit": "pnpm exec lint-staged --concurrent false" diff --git a/packages/plugin-react-oxc/package.json b/packages/plugin-react-oxc/package.json index a12f1725c..81dfe341f 100644 --- a/packages/plugin-react-oxc/package.json +++ b/packages/plugin-react-oxc/package.json @@ -48,6 +48,6 @@ "vite": "catalog:rolldown-vite" }, "dependencies": { - "@rolldown/pluginutils": "1.0.0-beta.9" + "@rolldown/pluginutils": "1.0.0-beta.11" } } diff --git a/packages/plugin-react-swc/package.json b/packages/plugin-react-swc/package.json index 2b9dc1d4a..0b50b8739 100644 --- a/packages/plugin-react-swc/package.json +++ b/packages/plugin-react-swc/package.json @@ -29,8 +29,8 @@ }, "homepage": "https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react-swc#readme", "dependencies": { - "@rolldown/pluginutils": "1.0.0-beta.9", - "@swc/core": "^1.11.22" + "@rolldown/pluginutils": "1.0.0-beta.11", + "@swc/core": "^1.11.31" }, "peerDependencies": { "vite": "^4 || ^5 || ^6" @@ -38,9 +38,9 @@ "devDependencies": { "@playwright/test": "^1.52.0", "@types/fs-extra": "^11.0.4", - "@types/node": "^22.15.2", + "@types/node": "^22.15.30", "@vitejs/react-common": "workspace:*", - "esbuild": "^0.25.3", + "esbuild": "^0.25.5", "fs-extra": "^11.3.0", "picocolors": "^1.1.1", "prettier": "^3.0.3", diff --git a/packages/plugin-react-swc/playground/base-path/package.json b/packages/plugin-react-swc/playground/base-path/package.json index 5f3aef06d..dd48ddc83 100644 --- a/packages/plugin-react-swc/playground/base-path/package.json +++ b/packages/plugin-react-swc/playground/base-path/package.json @@ -12,8 +12,8 @@ "react-dom": "^19.1.0" }, "devDependencies": { - "@types/react": "^19.1.2", - "@types/react-dom": "^19.1.2", + "@types/react": "^19.1.6", + "@types/react-dom": "^19.1.6", "@vitejs/plugin-react-swc": "../../dist" } } diff --git a/packages/plugin-react-swc/playground/class-components/package.json b/packages/plugin-react-swc/playground/class-components/package.json index 29f0133d3..16dcee59c 100644 --- a/packages/plugin-react-swc/playground/class-components/package.json +++ b/packages/plugin-react-swc/playground/class-components/package.json @@ -12,8 +12,8 @@ "react-dom": "^19.1.0" }, "devDependencies": { - "@types/react": "^19.1.2", - "@types/react-dom": "^19.1.2", + "@types/react": "^19.1.6", + "@types/react-dom": "^19.1.6", "@vitejs/plugin-react-swc": "../../dist" } } diff --git a/packages/plugin-react-swc/playground/decorators/package.json b/packages/plugin-react-swc/playground/decorators/package.json index 89e37454b..f8e0deef0 100644 --- a/packages/plugin-react-swc/playground/decorators/package.json +++ b/packages/plugin-react-swc/playground/decorators/package.json @@ -12,8 +12,8 @@ "react-dom": "^19.1.0" }, "devDependencies": { - "@types/react": "^19.1.2", - "@types/react-dom": "^19.1.2", + "@types/react": "^19.1.6", + "@types/react-dom": "^19.1.6", "@vitejs/plugin-react-swc": "../../dist" } } diff --git a/packages/plugin-react-swc/playground/emotion-plugin/package.json b/packages/plugin-react-swc/playground/emotion-plugin/package.json index f9541a0d6..b4b60c152 100644 --- a/packages/plugin-react-swc/playground/emotion-plugin/package.json +++ b/packages/plugin-react-swc/playground/emotion-plugin/package.json @@ -14,9 +14,9 @@ "react-dom": "^19.1.0" }, "devDependencies": { - "@types/react": "^19.1.2", - "@types/react-dom": "^19.1.2", + "@types/react": "^19.1.6", + "@types/react-dom": "^19.1.6", "@vitejs/plugin-react-swc": "../../dist", - "@swc/plugin-emotion": "^9.0.3" + "@swc/plugin-emotion": "^9.0.4" } } diff --git a/packages/plugin-react-swc/playground/emotion/package.json b/packages/plugin-react-swc/playground/emotion/package.json index eefab7d2f..3de6b62e1 100644 --- a/packages/plugin-react-swc/playground/emotion/package.json +++ b/packages/plugin-react-swc/playground/emotion/package.json @@ -14,8 +14,8 @@ "react-dom": "^19.1.0" }, "devDependencies": { - "@types/react": "^19.1.2", - "@types/react-dom": "^19.1.2", + "@types/react": "^19.1.6", + "@types/react-dom": "^19.1.6", "@vitejs/plugin-react-swc": "../../dist" } } diff --git a/packages/plugin-react-swc/playground/hmr/package.json b/packages/plugin-react-swc/playground/hmr/package.json index 27f1f7a26..c4d580755 100644 --- a/packages/plugin-react-swc/playground/hmr/package.json +++ b/packages/plugin-react-swc/playground/hmr/package.json @@ -12,8 +12,8 @@ "react-dom": "^19.1.0" }, "devDependencies": { - "@types/react": "^19.1.2", - "@types/react-dom": "^19.1.2", + "@types/react": "^19.1.6", + "@types/react-dom": "^19.1.6", "@vitejs/plugin-react-swc": "../../dist" } } diff --git a/packages/plugin-react-swc/playground/mdx/package.json b/packages/plugin-react-swc/playground/mdx/package.json index 52da5cf9f..ccd783a21 100644 --- a/packages/plugin-react-swc/playground/mdx/package.json +++ b/packages/plugin-react-swc/playground/mdx/package.json @@ -13,8 +13,8 @@ }, "devDependencies": { "@mdx-js/rollup": "^3.1.0", - "@types/react": "^19.1.2", - "@types/react-dom": "^19.1.2", + "@types/react": "^19.1.6", + "@types/react-dom": "^19.1.6", "@vitejs/plugin-react-swc": "../../dist" } } diff --git a/packages/plugin-react-swc/playground/shadow-export/package.json b/packages/plugin-react-swc/playground/shadow-export/package.json index 9bbc43bca..052ec39d9 100644 --- a/packages/plugin-react-swc/playground/shadow-export/package.json +++ b/packages/plugin-react-swc/playground/shadow-export/package.json @@ -12,8 +12,8 @@ "react-dom": "^19.1.0" }, "devDependencies": { - "@types/react": "^19.1.2", - "@types/react-dom": "^19.1.2", + "@types/react": "^19.1.6", + "@types/react-dom": "^19.1.6", "@vitejs/plugin-react-swc": "../../dist" } } diff --git a/packages/plugin-react-swc/playground/styled-components/package.json b/packages/plugin-react-swc/playground/styled-components/package.json index ca5c0a80a..2719ab5b8 100644 --- a/packages/plugin-react-swc/playground/styled-components/package.json +++ b/packages/plugin-react-swc/playground/styled-components/package.json @@ -11,12 +11,12 @@ "react": "^19.1.0", "react-dom": "^19.1.0", "react-is": "^19.1.0", - "styled-components": "^6.1.17" + "styled-components": "^6.1.18" }, "devDependencies": { - "@swc/plugin-styled-components": "^7.1.3", - "@types/react": "^19.1.2", - "@types/react-dom": "^19.1.2", + "@swc/plugin-styled-components": "^7.1.5", + "@types/react": "^19.1.6", + "@types/react-dom": "^19.1.6", "@types/styled-components": "^5.1.34", "@vitejs/plugin-react-swc": "../../dist" } diff --git a/packages/plugin-react-swc/playground/ts-lib/package.json b/packages/plugin-react-swc/playground/ts-lib/package.json index ce2efa709..ad45d64c8 100644 --- a/packages/plugin-react-swc/playground/ts-lib/package.json +++ b/packages/plugin-react-swc/playground/ts-lib/package.json @@ -12,11 +12,11 @@ "generouted": "1.11.7", "react": "^19.1.0", "react-dom": "^19.1.0", - "react-router-dom": "^7.5.2" + "react-router-dom": "^7.6.2" }, "devDependencies": { - "@types/react": "^19.1.2", - "@types/react-dom": "^19.1.2", + "@types/react": "^19.1.6", + "@types/react-dom": "^19.1.6", "@vitejs/plugin-react-swc": "../../dist" } } diff --git a/packages/plugin-react-swc/playground/worker/package.json b/packages/plugin-react-swc/playground/worker/package.json index 6d4f16e2a..26e1a33dd 100644 --- a/packages/plugin-react-swc/playground/worker/package.json +++ b/packages/plugin-react-swc/playground/worker/package.json @@ -12,8 +12,8 @@ "react-dom": "^19.1.0" }, "devDependencies": { - "@types/react": "^19.1.2", - "@types/react-dom": "^19.1.2", + "@types/react": "^19.1.6", + "@types/react-dom": "^19.1.6", "@vitejs/plugin-react-swc": "../../dist" } } diff --git a/packages/plugin-react/package.json b/packages/plugin-react/package.json index 0d2476dfd..0f8d8cdbf 100644 --- a/packages/plugin-react/package.json +++ b/packages/plugin-react/package.json @@ -48,10 +48,10 @@ }, "homepage": "https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react#readme", "dependencies": { - "@babel/core": "^7.26.10", - "@babel/plugin-transform-react-jsx-self": "^7.25.9", - "@babel/plugin-transform-react-jsx-source": "^7.25.9", - "@rolldown/pluginutils": "1.0.0-beta.9", + "@babel/core": "^7.27.4", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.11", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, diff --git a/playground/class-components/package.json b/playground/class-components/package.json index 2a7e90571..a7921db4f 100644 --- a/playground/class-components/package.json +++ b/playground/class-components/package.json @@ -12,8 +12,8 @@ "react-dom": "^19.1.0" }, "devDependencies": { - "@types/react": "^19.1.2", - "@types/react-dom": "^19.1.2", + "@types/react": "^19.1.6", + "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "workspace:*" } } diff --git a/playground/compiler-react-18/package.json b/playground/compiler-react-18/package.json index 83a72aafc..e4450c986 100644 --- a/playground/compiler-react-18/package.json +++ b/playground/compiler-react-18/package.json @@ -9,15 +9,15 @@ }, "dependencies": { "react": "^18.3.1", - "react-compiler-runtime": "19.1.0-rc.1", + "react-compiler-runtime": "19.1.0-rc.2", "react-dom": "^18.3.1" }, "devDependencies": { - "@babel/plugin-transform-react-jsx-development": "^7.25.9", + "@babel/plugin-transform-react-jsx-development": "^7.27.1", "@types/react": "^18.3.20", "@types/react-dom": "^18.3.6", "@vitejs/plugin-react": "workspace:*", - "babel-plugin-react-compiler": "19.1.0-rc.1", + "babel-plugin-react-compiler": "19.1.0-rc.2", "typescript": "^5.8.3" } } diff --git a/playground/compiler/package.json b/playground/compiler/package.json index 00848a752..f62ffcdde 100644 --- a/playground/compiler/package.json +++ b/playground/compiler/package.json @@ -12,11 +12,11 @@ "react-dom": "^19.1.0" }, "devDependencies": { - "@babel/plugin-transform-react-jsx-development": "^7.25.9", - "@types/react": "^19.1.2", - "@types/react-dom": "^19.1.2", + "@babel/plugin-transform-react-jsx-development": "^7.27.1", + "@types/react": "^19.1.6", + "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "workspace:*", - "babel-plugin-react-compiler": "19.1.0-rc.1", + "babel-plugin-react-compiler": "19.1.0-rc.2", "typescript": "^5.8.3" } } diff --git a/playground/hook-with-jsx/package.json b/playground/hook-with-jsx/package.json index 6a7bbfd7a..b3daad23f 100644 --- a/playground/hook-with-jsx/package.json +++ b/playground/hook-with-jsx/package.json @@ -12,8 +12,8 @@ "react-dom": "^19.1.0" }, "devDependencies": { - "@types/react": "^19.1.2", - "@types/react-dom": "^19.1.2", + "@types/react": "^19.1.6", + "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "workspace:*" } } diff --git a/playground/mdx/package.json b/playground/mdx/package.json index 04d70bd4a..f8984a355 100644 --- a/playground/mdx/package.json +++ b/playground/mdx/package.json @@ -13,8 +13,8 @@ }, "devDependencies": { "@mdx-js/rollup": "^3.1.0", - "@types/react": "^19.1.2", - "@types/react-dom": "^19.1.2", + "@types/react": "^19.1.6", + "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "workspace:*" } } diff --git a/playground/react-emotion/package.json b/playground/react-emotion/package.json index 35e127e0c..85eb640b4 100644 --- a/playground/react-emotion/package.json +++ b/playground/react-emotion/package.json @@ -16,7 +16,7 @@ "react-switch": "^7.1.0" }, "devDependencies": { - "@babel/plugin-proposal-pipeline-operator": "^7.26.7", + "@babel/plugin-proposal-pipeline-operator": "^7.27.1", "@emotion/babel-plugin": "^11.13.5", "@vitejs/plugin-react": "workspace:*" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d0bcf61ef..23e69bcbe 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,8 +7,8 @@ settings: catalogs: rolldown-vite: vite: - specifier: npm:rolldown-vite@^6.3.5 - version: 6.3.5 + specifier: npm:rolldown-vite@^6.3.18 + version: 6.3.18 packageExtensionsChecksum: sha256-S82yCctxnlOTNFuHWCyTFRo/B6Y3jque/4DnsDO4WZA= @@ -17,38 +17,38 @@ importers: .: devDependencies: '@eslint/js': - specifier: ^9.25.1 - version: 9.25.1 + specifier: ^9.28.0 + version: 9.28.0 '@types/fs-extra': specifier: ^11.0.4 version: 11.0.4 '@types/node': - specifier: ^22.15.2 - version: 22.15.2 + specifier: ^22.15.30 + version: 22.15.30 '@vitejs/release-scripts': specifier: ^1.5.0 version: 1.5.0 eslint: - specifier: ^9.25.1 - version: 9.25.1(jiti@2.4.2) + specifier: ^9.28.0 + version: 9.28.0(jiti@2.4.2) eslint-plugin-import-x: - specifier: ^4.11.0 - version: 4.11.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3) + specifier: ^4.15.1 + version: 4.15.1(@typescript-eslint/utils@8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2)) eslint-plugin-n: - specifier: ^17.17.0 - version: 17.17.0(eslint@9.25.1(jiti@2.4.2)) + specifier: ^17.19.0 + version: 17.19.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) eslint-plugin-regexp: - specifier: ^2.7.0 - version: 2.7.0(eslint@9.25.1(jiti@2.4.2)) + specifier: ^2.8.0 + version: 2.8.0(eslint@9.28.0(jiti@2.4.2)) fs-extra: specifier: ^11.3.0 version: 11.3.0 globals: - specifier: ^16.0.0 - version: 16.0.0 + specifier: ^16.2.0 + version: 16.2.0 lint-staged: - specifier: ^15.5.1 - version: 15.5.1 + specifier: ^15.5.2 + version: 15.5.2 picocolors: specifier: ^1.1.1 version: 1.1.1 @@ -62,41 +62,41 @@ importers: specifier: ^2.13.0 version: 2.13.0 tsx: - specifier: ^4.19.3 - version: 4.19.3 + specifier: ^4.19.4 + version: 4.19.4 typescript: specifier: ^5.8.3 version: 5.8.3 typescript-eslint: - specifier: ^8.31.0 - version: 8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3) + specifier: ^8.33.1 + version: 8.33.1(eslint@9.28.0(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) + version: 6.3.3(@types/node@22.15.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(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) + specifier: ^3.2.2 + version: 3.2.2(@types/debug@4.1.12)(@types/node@22.15.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1) packages/common: devDependencies: 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) + version: 6.3.3(@types/node@22.15.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1) packages/plugin-react: dependencies: '@babel/core': - specifier: ^7.26.10 - version: 7.26.10 + specifier: ^7.27.4 + version: 7.27.4 '@babel/plugin-transform-react-jsx-self': - specifier: ^7.25.9 - version: 7.25.9(@babel/core@7.26.10) + specifier: ^7.27.1 + version: 7.27.1(@babel/core@7.27.4) '@babel/plugin-transform-react-jsx-source': - specifier: ^7.25.9 - version: 7.25.9(@babel/core@7.26.10) + specifier: ^7.27.1 + version: 7.27.1(@babel/core@7.27.4) '@rolldown/pluginutils': - specifier: 1.0.0-beta.9 - version: 1.0.0-beta.9 + specifier: 1.0.0-beta.11 + version: 1.0.0-beta.11 '@types/babel__core': specifier: ^7.20.5 version: 7.20.5 @@ -114,8 +114,8 @@ importers: packages/plugin-react-oxc: dependencies: '@rolldown/pluginutils': - specifier: 1.0.0-beta.9 - version: 1.0.0-beta.9 + specifier: 1.0.0-beta.11 + version: 1.0.0-beta.11 devDependencies: '@vitejs/react-common': specifier: workspace:* @@ -125,16 +125,16 @@ importers: 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) + version: rolldown-vite@6.3.18(@types/node@22.15.30)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.19.4)(yaml@2.7.1) packages/plugin-react-swc: dependencies: '@rolldown/pluginutils': - specifier: 1.0.0-beta.9 - version: 1.0.0-beta.9 + specifier: 1.0.0-beta.11 + version: 1.0.0-beta.11 '@swc/core': - specifier: ^1.11.22 - version: 1.11.22 + specifier: ^1.11.31 + version: 1.11.31 devDependencies: '@playwright/test': specifier: ^1.52.0 @@ -143,14 +143,14 @@ importers: specifier: ^11.0.4 version: 11.0.4 '@types/node': - specifier: ^22.15.2 - version: 22.15.2 + specifier: ^22.15.30 + version: 22.15.30 '@vitejs/react-common': specifier: workspace:* version: link:../common esbuild: - specifier: ^0.25.3 - version: 0.25.3 + specifier: ^0.25.5 + version: 0.25.5 fs-extra: specifier: ^11.3.0 version: 11.3.0 @@ -165,7 +165,7 @@ importers: 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) + version: 6.3.3(@types/node@22.15.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1) packages/plugin-react-swc/playground/base-path: dependencies: @@ -177,11 +177,11 @@ importers: version: 19.1.0(react@19.1.0) devDependencies: '@types/react': - specifier: ^19.1.2 - version: 19.1.2 + specifier: ^19.1.6 + version: 19.1.6 '@types/react-dom': - specifier: ^19.1.2 - version: 19.1.2(@types/react@19.1.2) + specifier: ^19.1.6 + version: 19.1.6(@types/react@19.1.6) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -196,11 +196,11 @@ importers: version: 19.1.0(react@19.1.0) devDependencies: '@types/react': - specifier: ^19.1.2 - version: 19.1.2 + specifier: ^19.1.6 + version: 19.1.6 '@types/react-dom': - specifier: ^19.1.2 - version: 19.1.2(@types/react@19.1.2) + specifier: ^19.1.6 + version: 19.1.6(@types/react@19.1.6) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -215,11 +215,11 @@ importers: version: 19.1.0(react@19.1.0) devDependencies: '@types/react': - specifier: ^19.1.2 - version: 19.1.2 + specifier: ^19.1.6 + version: 19.1.6 '@types/react-dom': - specifier: ^19.1.2 - version: 19.1.2(@types/react@19.1.2) + specifier: ^19.1.6 + version: 19.1.6(@types/react@19.1.6) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -228,10 +228,10 @@ importers: dependencies: '@emotion/react': specifier: ^11.14.0 - version: 11.14.0(@types/react@19.1.2)(react@19.1.0) + version: 11.14.0(@types/react@19.1.6)(react@19.1.0) '@emotion/styled': specifier: ^11.14.0 - version: 11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0) + version: 11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0) react: specifier: ^19.1.0 version: 19.1.0 @@ -240,11 +240,11 @@ importers: version: 19.1.0(react@19.1.0) devDependencies: '@types/react': - specifier: ^19.1.2 - version: 19.1.2 + specifier: ^19.1.6 + version: 19.1.6 '@types/react-dom': - specifier: ^19.1.2 - version: 19.1.2(@types/react@19.1.2) + specifier: ^19.1.6 + version: 19.1.6(@types/react@19.1.6) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -253,10 +253,10 @@ importers: dependencies: '@emotion/react': specifier: ^11.14.0 - version: 11.14.0(@types/react@19.1.2)(react@19.1.0) + version: 11.14.0(@types/react@19.1.6)(react@19.1.0) '@emotion/styled': specifier: ^11.14.0 - version: 11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0) + version: 11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0) react: specifier: ^19.1.0 version: 19.1.0 @@ -265,14 +265,14 @@ importers: version: 19.1.0(react@19.1.0) devDependencies: '@swc/plugin-emotion': - specifier: ^9.0.3 - version: 9.0.3 + specifier: ^9.0.4 + version: 9.0.4 '@types/react': - specifier: ^19.1.2 - version: 19.1.2 + specifier: ^19.1.6 + version: 19.1.6 '@types/react-dom': - specifier: ^19.1.2 - version: 19.1.2(@types/react@19.1.2) + specifier: ^19.1.6 + version: 19.1.6(@types/react@19.1.6) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -287,11 +287,11 @@ importers: version: 19.1.0(react@19.1.0) devDependencies: '@types/react': - specifier: ^19.1.2 - version: 19.1.2 + specifier: ^19.1.6 + version: 19.1.6 '@types/react-dom': - specifier: ^19.1.2 - version: 19.1.2(@types/react@19.1.2) + specifier: ^19.1.6 + version: 19.1.6(@types/react@19.1.6) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -309,11 +309,11 @@ importers: specifier: ^3.1.0 version: 3.1.0(rollup@4.37.0) '@types/react': - specifier: ^19.1.2 - version: 19.1.2 + specifier: ^19.1.6 + version: 19.1.6 '@types/react-dom': - specifier: ^19.1.2 - version: 19.1.2(@types/react@19.1.2) + specifier: ^19.1.6 + version: 19.1.6(@types/react@19.1.6) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -347,11 +347,11 @@ importers: version: 19.1.0(react@19.1.0) devDependencies: '@types/react': - specifier: ^19.1.2 - version: 19.1.2 + specifier: ^19.1.6 + version: 19.1.6 '@types/react-dom': - specifier: ^19.1.2 - version: 19.1.2(@types/react@19.1.2) + specifier: ^19.1.6 + version: 19.1.6(@types/react@19.1.6) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -368,18 +368,18 @@ importers: specifier: ^19.1.0 version: 19.1.0 styled-components: - specifier: ^6.1.17 - version: 6.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^6.1.18 + version: 6.1.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0) devDependencies: '@swc/plugin-styled-components': - specifier: ^7.1.3 - version: 7.1.3 + specifier: ^7.1.5 + version: 7.1.5 '@types/react': - specifier: ^19.1.2 - version: 19.1.2 + specifier: ^19.1.6 + version: 19.1.6 '@types/react-dom': - specifier: ^19.1.2 - version: 19.1.2(@types/react@19.1.2) + specifier: ^19.1.6 + version: 19.1.6(@types/react@19.1.6) '@types/styled-components': specifier: ^5.1.34 version: 5.1.34 @@ -391,10 +391,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(react-router-dom@7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-router@7.6.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.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(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(react-router-dom@7.6.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.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1)) react: specifier: ^19.1.0 version: 19.1.0 @@ -402,15 +402,15 @@ importers: specifier: ^19.1.0 version: 19.1.0(react@19.1.0) react-router-dom: - specifier: ^7.5.2 - version: 7.5.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^7.6.2 + version: 7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) devDependencies: '@types/react': - specifier: ^19.1.2 - version: 19.1.2 + specifier: ^19.1.6 + version: 19.1.6 '@types/react-dom': - specifier: ^19.1.2 - version: 19.1.2(@types/react@19.1.2) + specifier: ^19.1.6 + version: 19.1.6(@types/react@19.1.6) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -425,11 +425,11 @@ importers: version: 19.1.0(react@19.1.0) devDependencies: '@types/react': - specifier: ^19.1.2 - version: 19.1.2 + specifier: ^19.1.6 + version: 19.1.6 '@types/react-dom': - specifier: ^19.1.2 - version: 19.1.2(@types/react@19.1.2) + specifier: ^19.1.6 + version: 19.1.6(@types/react@19.1.6) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -453,11 +453,11 @@ importers: version: 19.1.0(react@19.1.0) devDependencies: '@types/react': - specifier: ^19.1.2 - version: 19.1.2 + specifier: ^19.1.6 + version: 19.1.6 '@types/react-dom': - specifier: ^19.1.2 - version: 19.1.2(@types/react@19.1.2) + specifier: ^19.1.6 + version: 19.1.6(@types/react@19.1.6) '@vitejs/plugin-react': specifier: workspace:* version: link:../../packages/plugin-react @@ -472,20 +472,20 @@ importers: version: 19.1.0(react@19.1.0) devDependencies: '@babel/plugin-transform-react-jsx-development': - specifier: ^7.25.9 - version: 7.25.9(@babel/core@7.26.10) + specifier: ^7.27.1 + version: 7.27.1(@babel/core@7.27.4) '@types/react': - specifier: ^19.1.2 - version: 19.1.2 + specifier: ^19.1.6 + version: 19.1.6 '@types/react-dom': - specifier: ^19.1.2 - version: 19.1.2(@types/react@19.1.2) + specifier: ^19.1.6 + version: 19.1.6(@types/react@19.1.6) '@vitejs/plugin-react': specifier: workspace:* version: link:../../packages/plugin-react babel-plugin-react-compiler: - specifier: 19.1.0-rc.1 - version: 19.1.0-rc.1 + specifier: 19.1.0-rc.2 + version: 19.1.0-rc.2 typescript: specifier: ^5.8.3 version: 5.8.3 @@ -496,15 +496,15 @@ importers: specifier: ^18.3.1 version: 18.3.1 react-compiler-runtime: - specifier: 19.1.0-rc.1 - version: 19.1.0-rc.1(react@18.3.1) + specifier: 19.1.0-rc.2 + version: 19.1.0-rc.2(react@18.3.1) react-dom: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) devDependencies: '@babel/plugin-transform-react-jsx-development': - specifier: ^7.25.9 - version: 7.25.9(@babel/core@7.26.10) + specifier: ^7.27.1 + version: 7.27.1(@babel/core@7.27.4) '@types/react': specifier: ^18.3.20 version: 18.3.20 @@ -515,8 +515,8 @@ importers: specifier: workspace:* version: link:../../packages/plugin-react babel-plugin-react-compiler: - specifier: 19.1.0-rc.1 - version: 19.1.0-rc.1 + specifier: 19.1.0-rc.2 + version: 19.1.0-rc.2 typescript: specifier: ^5.8.3 version: 5.8.3 @@ -531,11 +531,11 @@ importers: version: 19.1.0(react@19.1.0) devDependencies: '@types/react': - specifier: ^19.1.2 - version: 19.1.2 + specifier: ^19.1.6 + version: 19.1.6 '@types/react-dom': - specifier: ^19.1.2 - version: 19.1.2(@types/react@19.1.2) + specifier: ^19.1.6 + version: 19.1.6(@types/react@19.1.6) '@vitejs/plugin-react': specifier: workspace:* version: link:../../packages/plugin-react @@ -553,11 +553,11 @@ importers: specifier: ^3.1.0 version: 3.1.0(rollup@4.37.0) '@types/react': - specifier: ^19.1.2 - version: 19.1.2 + specifier: ^19.1.6 + version: 19.1.6 '@types/react-dom': - specifier: ^19.1.2 - version: 19.1.2(@types/react@19.1.2) + specifier: ^19.1.6 + version: 19.1.6(@types/react@19.1.6) '@vitejs/plugin-react': specifier: workspace:* version: link:../../packages/plugin-react @@ -595,10 +595,10 @@ importers: dependencies: '@emotion/react': specifier: ^11.14.0 - version: 11.14.0(@types/react@19.1.2)(react@19.1.0) + version: 11.14.0(@types/react@19.1.6)(react@19.1.0) '@emotion/styled': specifier: ^11.14.0 - version: 11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0) + version: 11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0) react: specifier: ^19.1.0 version: 19.1.0 @@ -610,8 +610,8 @@ importers: version: 7.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) devDependencies: '@babel/plugin-proposal-pipeline-operator': - specifier: ^7.26.7 - version: 7.26.7(@babel/core@7.26.10) + specifier: ^7.27.1 + version: 7.27.1(@babel/core@7.27.4) '@emotion/babel-plugin': specifier: ^11.13.5 version: 11.13.5 @@ -674,62 +674,74 @@ packages: resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.26.8': - resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/core@7.26.10': - resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==} + '@babel/compat-data@7.27.5': + resolution: {integrity: sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==} engines: {node: '>=6.9.0'} - '@babel/generator@7.26.2': - resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==} + '@babel/core@7.27.4': + resolution: {integrity: sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==} engines: {node: '>=6.9.0'} '@babel/generator@7.27.0': resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==} engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.25.9': - resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} + '@babel/generator@7.27.5': + resolution: {integrity: sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.27.0': - resolution: {integrity: sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==} + '@babel/helper-annotate-as-pure@7.27.3': + resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.27.2': + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} engines: {node: '>=6.9.0'} '@babel/helper-module-imports@7.25.9': resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.26.0': - resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + '@babel/helper-module-imports@7.27.1': + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/helper-plugin-utils@7.25.9': - resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} + '@babel/helper-module-transforms@7.27.3': + resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 - '@babel/helper-plugin-utils@7.26.5': - resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + '@babel/helper-plugin-utils@7.27.1': + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} engines: {node: '>=6.9.0'} '@babel/helper-string-parser@7.25.9': resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.25.9': resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.25.9': - resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.27.0': - resolution: {integrity: sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==} + '@babel/helpers@7.27.6': + resolution: {integrity: sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==} engines: {node: '>=6.9.0'} '@babel/parser@7.26.2': @@ -742,44 +754,49 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-proposal-pipeline-operator@7.26.7': - resolution: {integrity: sha512-RwHKOi/udKsbIBdVOPCwUBC4pCDBOxH1UgWh6QANTTOWL8oNDu2AI6gB4jcrlmiJYnim5oF2nmkDeueUgSSiKw==} + '@babel/parser@7.27.5': + resolution: {integrity: sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-proposal-pipeline-operator@7.27.1': + resolution: {integrity: sha512-3q36hiN0qG4KI+rDVJW3HVIQWLnX09E+QkraVJYWG4QPqOgiZaeyIFOfTyzWE2ZDVo9ZO0LZeyvBM8T+nhPlZA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-jsx@7.25.9': - resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} + '@babel/plugin-syntax-jsx@7.27.1': + resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-pipeline-operator@7.26.7': - resolution: {integrity: sha512-6TChXGY5xmWVqMXPkUO0VbfXX4hEQJe/Mub4zQLqZWPGA3MJkhMKTg4/mJxSOP+R36EXRJcb8hluodMsu2g7hg==} + '@babel/plugin-syntax-pipeline-operator@7.27.1': + resolution: {integrity: sha512-8HYe0Q/NCpFL9bqH2hHkKKeQsO09tGsGd1YDxrnhXgTKgJqeB2mj3a7diDQayjSlutJXDE67BlvXeudPk3XtbA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx-development@7.25.9': - resolution: {integrity: sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==} + '@babel/plugin-transform-react-jsx-development@7.27.1': + resolution: {integrity: sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx-self@7.25.9': - resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} + '@babel/plugin-transform-react-jsx-self@7.27.1': + resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx-source@7.25.9': - resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} + '@babel/plugin-transform-react-jsx-source@7.27.1': + resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx@7.25.9': - resolution: {integrity: sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==} + '@babel/plugin-transform-react-jsx@7.27.1': + resolution: {integrity: sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -788,22 +805,22 @@ packages: resolution: {integrity: sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w==} engines: {node: '>=6.9.0'} - '@babel/template@7.25.9': - resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} - engines: {node: '>=6.9.0'} - '@babel/template@7.27.0': resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.25.9': - resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} '@babel/traverse@7.27.0': resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.27.4': + resolution: {integrity: sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==} + engines: {node: '>=6.9.0'} + '@babel/types@7.26.0': resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} engines: {node: '>=6.9.0'} @@ -812,14 +829,18 @@ packages: resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==} engines: {node: '>=6.9.0'} - '@emnapi/core@1.4.0': - resolution: {integrity: sha512-H+N/FqT07NmLmt6OFFtDfwe8PNygprzBikrEMyQfgqSmT0vzE515Pz7R8izwB9q/zsH/MA64AKoul3sA6/CzVg==} + '@babel/types@7.27.6': + resolution: {integrity: sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==} + engines: {node: '>=6.9.0'} + + '@emnapi/core@1.4.3': + resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==} - '@emnapi/runtime@1.4.0': - resolution: {integrity: sha512-64WYIf4UYcdLnbKn/umDlNjQDSS8AgZrI/R9+x5ilkUVFxXcA1Ebl+gQLc/6mERA4407Xof0R7wEyEuj091CVw==} + '@emnapi/runtime@1.4.3': + resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} - '@emnapi/wasi-threads@1.0.1': - resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==} + '@emnapi/wasi-threads@1.0.2': + resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==} '@emotion/babel-plugin@11.13.5': resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} @@ -902,6 +923,12 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.25.5': + resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.24.2': resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} engines: {node: '>=18'} @@ -920,6 +947,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.25.5': + resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm@0.24.2': resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} engines: {node: '>=18'} @@ -938,6 +971,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-arm@0.25.5': + resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-x64@0.24.2': resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} engines: {node: '>=18'} @@ -956,6 +995,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/android-x64@0.25.5': + resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/darwin-arm64@0.24.2': resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} engines: {node: '>=18'} @@ -974,6 +1019,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.25.5': + resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-x64@0.24.2': resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} engines: {node: '>=18'} @@ -992,6 +1043,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.25.5': + resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/freebsd-arm64@0.24.2': resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} engines: {node: '>=18'} @@ -1010,6 +1067,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.25.5': + resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-x64@0.24.2': resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} engines: {node: '>=18'} @@ -1028,6 +1091,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.25.5': + resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/linux-arm64@0.24.2': resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} engines: {node: '>=18'} @@ -1046,6 +1115,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.25.5': + resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm@0.24.2': resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} engines: {node: '>=18'} @@ -1064,6 +1139,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.25.5': + resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-ia32@0.24.2': resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} engines: {node: '>=18'} @@ -1082,6 +1163,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.25.5': + resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-loong64@0.24.2': resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} engines: {node: '>=18'} @@ -1100,6 +1187,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.25.5': + resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-mips64el@0.24.2': resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} engines: {node: '>=18'} @@ -1118,6 +1211,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.25.5': + resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-ppc64@0.24.2': resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} engines: {node: '>=18'} @@ -1136,6 +1235,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.25.5': + resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-riscv64@0.24.2': resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} engines: {node: '>=18'} @@ -1154,6 +1259,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.25.5': + resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-s390x@0.24.2': resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} engines: {node: '>=18'} @@ -1172,6 +1283,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.25.5': + resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-x64@0.24.2': resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} engines: {node: '>=18'} @@ -1190,6 +1307,12 @@ packages: cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.25.5': + resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/netbsd-arm64@0.24.2': resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} engines: {node: '>=18'} @@ -1208,6 +1331,12 @@ packages: cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-arm64@0.25.5': + resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-x64@0.24.2': resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} engines: {node: '>=18'} @@ -1226,6 +1355,12 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.25.5': + resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/openbsd-arm64@0.24.2': resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} engines: {node: '>=18'} @@ -1244,6 +1379,12 @@ packages: cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-arm64@0.25.5': + resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-x64@0.24.2': resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} engines: {node: '>=18'} @@ -1262,6 +1403,12 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.25.5': + resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/sunos-x64@0.24.2': resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} engines: {node: '>=18'} @@ -1280,6 +1427,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.25.5': + resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/win32-arm64@0.24.2': resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} engines: {node: '>=18'} @@ -1298,6 +1451,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.25.5': + resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-ia32@0.24.2': resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} engines: {node: '>=18'} @@ -1316,6 +1475,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.25.5': + resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-x64@0.24.2': resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} engines: {node: '>=18'} @@ -1334,12 +1499,24 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.25.5': + resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.5.1': resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/eslint-utils@4.7.0': + resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/regexpp@4.12.1': resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -1352,24 +1529,24 @@ packages: resolution: {integrity: sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.13.0': - resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==} + '@eslint/core@0.14.0': + resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.25.1': - resolution: {integrity: sha512-dEIwmjntEx8u3Uvv+kr3PDeeArL8Hw07H9kyYxCjnM9pBjfEhk6uLXSchxxzgiwtRhhzVzqmUSDFBOi1TuZ7qg==} + '@eslint/js@9.28.0': + resolution: {integrity: sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.2.8': - resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==} + '@eslint/plugin-kit@0.3.1': + resolution: {integrity: sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@generouted/react-router@1.20.0': @@ -1425,11 +1602,8 @@ 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==} + '@napi-rs/wasm-runtime@0.2.10': + resolution: {integrity: sha512-bCsCyeZEwVErsGmyPNSzwfwFn4OdxBj0mmv6hOFucB/k81Ojdu68RbZdxYsRQUPc9l6SU5F/cG+bXgWs3oUgsQ==} '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -1443,12 +1617,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.72.2': + resolution: {integrity: sha512-J2lsPDen2mFs3cOA1gIBd0wsHEhum2vTnuKIRwmj3HJJcIz/XgeNdzvgSOioIXOJgURIpcDaK05jwaDG1rhDwg==} engines: {node: '>=6.9.0'} - '@oxc-project/types@0.66.0': - resolution: {integrity: sha512-KF5Wlo2KzQ+jmuCtrGISZoUfdHom7qHavNfPLW2KkeYJfYMGwtiia8KjwtsvNJ49qRiXImOCkPeVPd4bMlbR7w==} + '@oxc-project/types@0.72.2': + resolution: {integrity: sha512-il5RF8AP85XC0CMjHF4cnVT9nT/v/ocm6qlZQpSiAR9qBbQMGkFKloBZwm7PcnOdiUX97yHgsKM7uDCCWCu3tg==} '@playwright/test@1.52.0': resolution: {integrity: sha512-uh6W7sb55hl7D6vsAeA+V2p5JnlAqzhqFyF0VcJkKZXkgnFcVG9PziERRHQfPLfNGx1C292a4JqbWzhR8L4R1g==} @@ -1459,68 +1633,71 @@ 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.11-commit.0a985f3': + resolution: {integrity: sha512-wyBH60GIWFp+JPExag933Mroi4TH/kRjL5D1NWBVGX8BkCA5f8KYzBHl2je++4hEEiZaPhqt9LzGnuoDsGVT4w==} 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.11-commit.0a985f3': + resolution: {integrity: sha512-JOgRGe4NWzzPM9uwGuXvEqjNzf3Cg3rBi1K88lq6l6cW5BbnUUaXAuQ3gSqXVIODtJ18m5VvlOnb+d4fRPiVbg==} 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.11-commit.0a985f3': + resolution: {integrity: sha512-n8jKI6paSi1sbChM7O5rWiOL0sJU4u112GnfX2Rs5Vgf27HgBeuX6hV9W3mismknDaHtZCjvQt0po7gwBLqbvg==} 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.11-commit.0a985f3': + resolution: {integrity: sha512-t+DOeCjZf56kmjOLJJbmGalG7rHzolyblK188OEpylpf1smISOQbLjYMSikyMaBA6M/WGl5rOlA1hQd3JeieFw==} 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.11-commit.0a985f3': + resolution: {integrity: sha512-3SJOJ0ddxlUaBKz2LhwX/g4lfJyNYqtNI8Vxr6vnMJ8QRdo5TKr+/FrhIJxrl5Rceyh45l+plv6AsZMihQcPmA==} 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.11-commit.0a985f3': + resolution: {integrity: sha512-XR/SWdDHhQBmrpSUDTT6gqKzTv6q1NfjreOqYJmWho79kO/ohVGbT+I5oM+eE9XhUI0rSif/pF6vVWsyHLXEqw==} 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.11-commit.0a985f3': + resolution: {integrity: sha512-OXBTtIhT++3cCpc4pCtOcfPo4p9fOmlJLNOtxP+8USSVKy4n6snBfg2jdOyu6o/H6VeqoggHuLivtBXW5tFbPQ==} 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.11-commit.0a985f3': + resolution: {integrity: sha512-DUchRVMBPCOrg+UMFNW0MieM8YEn8sLV7s77zOz7cLQI7OgD3x7JfiRxlpazAtCOnJCuuHpnONLDrli+c8rluA==} 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.11-commit.0a985f3': + resolution: {integrity: sha512-gT++TSMmZM4nW6b/rM0r/qJ+7NSXONP8E/ok/j2CW/cR9f8wyU4tNzVmbZwVJf3kVUzKezYBO9JNdSq7IkF2Bw==} 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.11-commit.0a985f3': + resolution: {integrity: sha512-TvDW2TXF3b+eLqX8PqRKEIu7xaUwb//HmkzgbuDaGZbbUR4ewNOrue4xpUxJiRhRHqqfZBPpmp6ukyuUxsNaow==} 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.11-commit.0a985f3': + resolution: {integrity: sha512-cAoyh54I5wKQOvXQJz2bJfqsRP0AQv2aCWx2fwCP2ick142tKufFiKfYa5A7nsDHSjQiGA8sXxi6SLho65Wgog==} 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.11-commit.0a985f3': + resolution: {integrity: sha512-qsDfpbZb4sUbF4+n1th+JuwOlV17jRZoVwvdfZcyexXHXIzmYzoTpHPL86V0eTdbEK206vx/2NoFjK871CR4cg==} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-beta.9': - resolution: {integrity: sha512-e9MeMtVWo186sgvFFJOPGy7/d2j2mZhLJIdVW0C/xDluuOvymEATqz6zKsP0ZmXGzQtqlyjz5sC1sYQUoJG98w==} + '@rolldown/pluginutils@1.0.0-beta.11': + resolution: {integrity: sha512-L/gAA/hyCSuzTF1ftlzUSI/IKr2POHsv1Dd78GfqkR83KMNuswWD61JxGV2L7nRwBBBSDr6R1gCkdTmoN7W4ag==} + + '@rolldown/pluginutils@1.0.0-beta.11-commit.0a985f3': + resolution: {integrity: sha512-BzOULtKKG5aXllquK5TQKwonut+cN7KtWSt9UUAwlipWyNPKViJs+vFVTBwdvgSsHrWefNVjHkC9rO1eeYKkDA==} '@rollup/plugin-alias@5.1.1': resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} @@ -1685,70 +1862,69 @@ packages: cpu: [x64] os: [win32] - '@swc/core-darwin-arm64@1.11.22': - resolution: {integrity: sha512-upSiFQfo1TE2QM3+KpBcp5SrOdKKjoc+oUoD1mmBDU2Wv4Bjjv16Z2I5ADvIqMV+b87AhYW+4Qu6iVrQD7j96Q==} + '@swc/core-darwin-arm64@1.11.31': + resolution: {integrity: sha512-NTEaYOts0OGSbJZc0O74xsji+64JrF1stmBii6D5EevWEtrY4wlZhm8SiP/qPrOB+HqtAihxWIukWkP2aSdGSQ==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.11.22': - resolution: {integrity: sha512-8PEuF/gxIMJVK21DjuCOtzdqstn2DqnxVhpAYfXEtm3WmMqLIOIZBypF/xafAozyaHws4aB/5xmz8/7rPsjavw==} + '@swc/core-darwin-x64@1.11.31': + resolution: {integrity: sha512-THSGaSwT96JwXDwuXQ6yFBbn+xDMdyw7OmBpnweAWsh5DhZmQkALEm1DgdQO3+rrE99MkmzwAfclc0UmYro/OA==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.11.22': - resolution: {integrity: sha512-NIPTXvqtn9e7oQHgdaxM9Z/anHoXC3Fg4ZAgw5rSGa1OlnKKupt5sdfJamNggSi+eAtyoFcyfkgqHnfe2u63HA==} + '@swc/core-linux-arm-gnueabihf@1.11.31': + resolution: {integrity: sha512-laKtQFnW7KHgE57Hx32os2SNAogcuIDxYE+3DYIOmDMqD7/1DCfJe6Rln2N9WcOw6HuDbDpyQavIwZNfSAa8vQ==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.11.22': - resolution: {integrity: sha512-xZ+bgS60c5r8kAeYsLNjJJhhQNkXdidQ277pUabSlu5GjR0CkQUPQ+L9hFeHf8DITEqpPBPRiAiiJsWq5eqMBg==} + '@swc/core-linux-arm64-gnu@1.11.31': + resolution: {integrity: sha512-T+vGw9aPE1YVyRxRr1n7NAdkbgzBzrXCCJ95xAZc/0+WUwmL77Z+js0J5v1KKTRxw4FvrslNCOXzMWrSLdwPSA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.11.22': - resolution: {integrity: sha512-JhrP/q5VqQl2eJR0xKYIkKTPjgf8CRsAmRnjJA2PtZhfQ543YbYvUqxyXSRyBOxdyX8JwzuAxIPEAlKlT7PPuQ==} + '@swc/core-linux-arm64-musl@1.11.31': + resolution: {integrity: sha512-Mztp5NZkyd5MrOAG+kl+QSn0lL4Uawd4CK4J7wm97Hs44N9DHGIG5nOz7Qve1KZo407Y25lTxi/PqzPKHo61zQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.11.22': - resolution: {integrity: sha512-htmAVL+U01gk9GyziVUP0UWYaUQBgrsiP7Ytf6uDffrySyn/FclUS3MDPocNydqYsOpj3OpNKPxkaHK+F+X5fg==} + '@swc/core-linux-x64-gnu@1.11.31': + resolution: {integrity: sha512-DDVE0LZcXOWwOqFU1Xi7gdtiUg3FHA0vbGb3trjWCuI1ZtDZHEQYL4M3/2FjqKZtIwASrDvO96w91okZbXhvMg==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.11.22': - resolution: {integrity: sha512-PL0VHbduWPX+ANoyOzr58jBiL2VnD0xGSFwPy7NRZ1Pr6SNWm4jw3x2u6RjLArGhS5EcWp64BSk9ZxqmTV3FEg==} + '@swc/core-linux-x64-musl@1.11.31': + resolution: {integrity: sha512-mJA1MzPPRIfaBUHZi0xJQ4vwL09MNWDeFtxXb0r4Yzpf0v5Lue9ymumcBPmw/h6TKWms+Non4+TDquAsweuKSw==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.11.22': - resolution: {integrity: sha512-moJvFhhTVGoMeEThtdF7hQog80Q00CS06v5uB+32VRuv+I31+4WPRyGlTWHO+oY4rReNcXut/mlDHPH7p0LdFg==} + '@swc/core-win32-arm64-msvc@1.11.31': + resolution: {integrity: sha512-RdtakUkNVAb/FFIMw3LnfNdlH1/ep6KgiPDRlmyUfd0WdIQ3OACmeBegEFNFTzi7gEuzy2Yxg4LWf4IUVk8/bg==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.11.22': - resolution: {integrity: sha512-/jnsPJJz89F1aKHIb5ScHkwyzBciz2AjEq2m9tDvQdIdVufdJ4SpEDEN9FqsRNRLcBHjtbLs6bnboA+B+pRFXw==} + '@swc/core-win32-ia32-msvc@1.11.31': + resolution: {integrity: sha512-hErXdCGsg7swWdG1fossuL8542I59xV+all751mYlBoZ8kOghLSKObGQTkBbuNvc0sUKWfWg1X0iBuIhAYar+w==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.11.22': - resolution: {integrity: sha512-lc93Y8Mku7LCFGqIxJ91coXZp2HeoDcFZSHCL90Wttg5xhk5xVM9uUCP+OdQsSsEixLF34h5DbT9ObzP8rAdRw==} + '@swc/core-win32-x64-msvc@1.11.31': + resolution: {integrity: sha512-5t7SGjUBMMhF9b5j17ml/f/498kiBJNf4vZFNM421UGUEETdtjPN9jZIuQrowBkoFGJTCVL/ECM4YRtTH30u/A==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.11.22': - resolution: {integrity: sha512-mjPYbqq8XjwqSE0hEPT9CzaJDyxql97LgK4iyvYlwVSQhdN1uK0DBG4eP9PxYzCS2MUGAXB34WFLegdUj5HGpg==} + '@swc/core@1.11.31': + resolution: {integrity: sha512-mAby9aUnKRjMEA7v8cVZS9Ah4duoRBnX7X6r5qrhTxErx+68MoY1TPrVwj/66/SWN3Bl+jijqAqoB8Qx0QE34A==} engines: {node: '>=10'} - deprecated: It has a bug. See https://github.com/swc-project/swc/issues/10413 peerDependencies: '@swc/helpers': '>=0.5.17' peerDependenciesMeta: @@ -1758,11 +1934,11 @@ packages: '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - '@swc/plugin-emotion@9.0.3': - resolution: {integrity: sha512-5Uo/5rPri6yfyz35CJ9Zw7tTHRhS4r90seikmSpuzZ54Px7faCXKZ+MMjOP/ASlUNYoFqV0QH+XhMLj8u0bKLA==} + '@swc/plugin-emotion@9.0.4': + resolution: {integrity: sha512-kqdJmrZ6DRBeA8ZNOZJiDOpGlavFb+CwSCkPKuvvQ8f8TDTbzKj0kIs8AIHa3PisxvJHp91yE/6eBVIPppFmZw==} - '@swc/plugin-styled-components@7.1.3': - resolution: {integrity: sha512-aSGXNzGC8rvGHkhTsTDTq+8eeaN/LxvvBA5Yot7eT3uNSDEGFnrsZIeq3GBlKEDp6abJ3eFXdauxq0fItEXcbQ==} + '@swc/plugin-styled-components@7.1.5': + resolution: {integrity: sha512-7egPoZG24nwMXp042Taux58dEdto6fLsUSW0IPPbJ0/HNVW+TLjosndGggHs68zoTR+ddWjGEW7H0u10/Y6GYw==} '@swc/types@0.1.21': resolution: {integrity: sha512-2YEtj5HJVbKivud9N4bpPBAyZhj4S2Ipe5LkUG94alTpr7in/GU/EARgPAd3BwU+YOmFVJC2+kjqhGRi3r0ZpQ==} @@ -1789,9 +1965,15 @@ packages: '@types/babel__traverse@7.20.6': resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + '@types/chai@5.2.2': + resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} + '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/estree-jsx@1.0.3': resolution: {integrity: sha512-pvQ+TKeRHeiUGRhvYwRrQ/ISnohKkSJR14fT2yqyZ4e9K5vqc7hrtY2Y1Dw0ZwAzQ6DQsxsaCUuSIIi8v0Cq6w==} @@ -1825,8 +2007,8 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node@22.15.2': - resolution: {integrity: sha512-uKXqKN9beGoMdBfcaTY1ecwz6ctxuJAcUlwE55938g0ZJ8lRxwAZqRz2AJ4pzpt5dHdTPMB863UZ0ESiFUcP7A==} + '@types/node@22.15.30': + resolution: {integrity: sha512-6Q7lr06bEHdlfplU6YRbgG1SFBdlsfNC4/lX+SkhiTs0cpJkOElmWls8PxDFv4yY/xKb8Y6SO0OmSX4wgqTZbA==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -1839,16 +2021,16 @@ packages: peerDependencies: '@types/react': ^18.0.0 - '@types/react-dom@19.1.2': - resolution: {integrity: sha512-XGJkWF41Qq305SKWEILa1O8vzhb3aOo3ogBlSmiqNko/WmRb6QIaweuZCXjKygVDXpzXb5wyxKTSOsmkuqj+Qw==} + '@types/react-dom@19.1.6': + resolution: {integrity: sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==} peerDependencies: '@types/react': ^19.0.0 '@types/react@18.3.20': resolution: {integrity: sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==} - '@types/react@19.1.2': - resolution: {integrity: sha512-oxLPMytKchWGbnQM9O7D67uPa9paTNxO7jVoNMXgkkErULBPhPARCfkKL9ytcIJJRGjbsVwW4ugJzyFFvm/Tiw==} + '@types/react@19.1.6': + resolution: {integrity: sha512-JeG0rEWak0N6Itr6QUx+X60uQmN+5t3j9r/OVDtWzFXKaj6kD1BwJzOksD0FF6iWxZlbE1kB0q9vtnU2ekqa1Q==} '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} @@ -1865,27 +2047,43 @@ packages: '@types/unist@3.0.2': resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} - '@typescript-eslint/eslint-plugin@8.31.0': - resolution: {integrity: sha512-evaQJZ/J/S4wisevDvC1KFZkPzRetH8kYZbkgcTRyql3mcKsf+ZFDV1BVWUGTCAW5pQHoqn5gK5b8kn7ou9aFQ==} + '@typescript-eslint/eslint-plugin@8.33.1': + resolution: {integrity: sha512-TDCXj+YxLgtvxvFlAvpoRv9MAncDLBV2oT9Bd7YBGC/b/sEURoOYuIwLI99rjWOfY3QtDzO+mk0n4AmdFExW8A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + '@typescript-eslint/parser': ^8.33.1 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/parser@8.31.0': - resolution: {integrity: sha512-67kYYShjBR0jNI5vsf/c3WG4u+zDnCTHTPqVMQguffaWWFs7artgwKmfwdifl+r6XyM5LYLas/dInj2T0SgJyw==} + '@typescript-eslint/parser@8.33.1': + resolution: {integrity: sha512-qwxv6dq682yVvgKKp2qWwLgRbscDAYktPptK4JPojCwwi3R9cwrvIxS4lvBpzmcqzR4bdn54Z0IG1uHFskW4dA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/project-service@8.33.1': + resolution: {integrity: sha512-DZR0efeNklDIHHGRpMpR5gJITQpu6tLr9lDJnKdONTC7vvzOlLAG/wcfxcdxEWrbiZApcoBCzXqU/Z458Za5Iw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/scope-manager@8.31.0': resolution: {integrity: sha512-knO8UyF78Nt8O/B64i7TlGXod69ko7z6vJD9uhSlm0qkAbGeRUSudcm0+K/4CrRjrpiHfBCjMWlc08Vav1xwcw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.31.0': - resolution: {integrity: sha512-DJ1N1GdjI7IS7uRlzJuEDCgDQix3ZVYVtgeWEyhyn4iaoitpMBX6Ndd488mXSx0xah/cONAkEaYyylDyAeHMHg==} + '@typescript-eslint/scope-manager@8.33.1': + resolution: {integrity: sha512-dM4UBtgmzHR9bS0Rv09JST0RcHYearoEoo3pG5B6GoTR9XcyeqX87FEhPo+5kTvVfKCvfHaHrcgeJQc6mrDKrA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.33.1': + resolution: {integrity: sha512-STAQsGYbHCF0/e+ShUQ4EatXQ7ceh3fBCXkNU7/MZVKulrlq1usH7t2FhxvCpuCi5O5oi1vmVaAjrGeL71OK1g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/type-utils@8.33.1': + resolution: {integrity: sha512-1cG37d9xOkhlykom55WVwG2QRNC7YXlxMaMzqw2uPeJixBFfKWZgaP/hjAObqMN/u3fr5BrTwTnc31/L9jQ2ww==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1895,12 +2093,22 @@ packages: resolution: {integrity: sha512-Ch8oSjVyYyJxPQk8pMiP2FFGYatqXQfQIaMp+TpuuLlDachRWpUAeEu1u9B/v/8LToehUIWyiKcA/w5hUFRKuQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.33.1': + resolution: {integrity: sha512-xid1WfizGhy/TKMTwhtVOgalHwPtV8T32MS9MaH50Cwvz6x6YqRIPdD2WvW0XaqOzTV9p5xdLY0h/ZusU5Lokg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.31.0': resolution: {integrity: sha512-xLmgn4Yl46xi6aDSZ9KkyfhhtnYI15/CvHbpOy/eR5NWhK/BK8wc709KKwhAR0m4ZKRP7h07bm4BWUYOCuRpQQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/typescript-estree@8.33.1': + resolution: {integrity: sha512-+s9LYcT8LWjdYWu7IWs7FvUxpQ/DGkdjZeE/GGulHvv8rvYwQvVaUZ6DE+j5x/prADUgSbbCWZ2nPI3usuVeOA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/utils@8.31.0': resolution: {integrity: sha512-qi6uPLt9cjTFxAb1zGNgTob4x9ur7xC6mHQJ8GwEzGMGE9tYniublmJaowOJ9V2jUzxrltTPfdG2nKlWsq0+Ww==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1908,134 +2116,140 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/utils@8.33.1': + resolution: {integrity: sha512-52HaBiEQUaRYqAXpfzWSR2U3gxk92Kw006+xZpElaPMg3C4PgM+A5LqwoQI1f9E5aZ/qlxAZxzm42WX+vn92SQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/visitor-keys@8.31.0': resolution: {integrity: sha512-QcGHmlRHWOl93o64ZUMNewCdwKGU6WItOU52H0djgNmn1EOrhVudrDzXz4OycCRSCPwFCDrE2iIt5vmuUdHxuQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.33.1': + resolution: {integrity: sha512-3i8NrFcZeeDHJ+7ZUuDkGT+UHq+XoFGsymNK2jZCOHcfEzRQ0BdpRtdpSx/Iyf3MHLWIcLS0COuOPibKQboIiQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - '@unrs/resolver-binding-darwin-arm64@1.7.0': - resolution: {integrity: sha512-vIWAU56r2lZAmUsljp6m9+hrTlwNkZH6pqnSPff2WxzofV+jWRSHLmZRUS+g+VE+LlyPByifmGGHpJmhWetatg==} + '@unrs/resolver-binding-darwin-arm64@1.7.11': + resolution: {integrity: sha512-i3/wlWjQJXMh1uiGtiv7k1EYvrrS3L1hdwmWJJiz1D8jWy726YFYPIxQWbEIVPVAgrfRR0XNlLrTQwq17cuCGw==} cpu: [arm64] os: [darwin] - '@unrs/resolver-binding-darwin-x64@1.7.0': - resolution: {integrity: sha512-+bShFLgtdwuNteQbKq3X230754AouNMXSLDZ56EssgDyckDt6Ld7wRaJjZF0pY671HnY2pk9/amO4amAFzfN1A==} + '@unrs/resolver-binding-darwin-x64@1.7.11': + resolution: {integrity: sha512-8XXyFvc6w6kmMmi6VYchZhjd5CDcp+Lv6Cn1YmUme0ypsZ/0Kzd+9ESrWtDrWibKPTgSteDTxp75cvBOY64FQQ==} cpu: [x64] os: [darwin] - '@unrs/resolver-binding-freebsd-x64@1.7.0': - resolution: {integrity: sha512-HJjXb3aIptDZQ0saSmk2S4W1pWNVZ2iNpAbNGZOfsUXbi8xwCmHdVjErNS92hRp7djuDLup1OLrzOMtTdw5BmA==} + '@unrs/resolver-binding-freebsd-x64@1.7.11': + resolution: {integrity: sha512-0qJBYzP8Qk24CZ05RSWDQUjdiQUeIJGfqMMzbtXgCKl/a5xa6thfC0MQkGIr55LCLd6YmMyO640ifYUa53lybQ==} cpu: [x64] os: [freebsd] - '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.0': - resolution: {integrity: sha512-NF3lk7KHulLD97UE+MHjH0mrOjeZG8Hz10h48YcFz2V0rlxBdRSRcMbGer8iH/1mIlLqxtvXJfGLUr4SMj0XZg==} + '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.11': + resolution: {integrity: sha512-1sGwpgvx+WZf0GFT6vkkOm6UJ+mlsVnjw+Yv9esK71idWeRAG3bbpkf3AoY8KIqKqmnzJExi0uKxXpakQ5Pcbg==} cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm-musleabihf@1.7.0': - resolution: {integrity: sha512-Gn1c/t24irDgU8yYj4vVG6qHplwUM42ti9/zYWgfmFjoXCH6L4Ab9hh6HuO7bfDSvGDRGWQt1IVaBpgbKHdh3Q==} + '@unrs/resolver-binding-linux-arm-musleabihf@1.7.11': + resolution: {integrity: sha512-D/1F/2lTe+XAl3ohkYj51NjniVly8sIqkA/n1aOND3ZMO418nl2JNU95iVa1/RtpzaKcWEsNTtHRogykrUflJg==} cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm64-gnu@1.7.0': - resolution: {integrity: sha512-XRrVXRIUP++qyqAqgiXUpOv0GP3cHx7aA7NrzVFf6Cc8FoYuwtnmT+vctfSo4wRZN71MNU4xq2BEFxI4qvSerg==} + '@unrs/resolver-binding-linux-arm64-gnu@1.7.11': + resolution: {integrity: sha512-7vFWHLCCNFLEQlmwKQfVy066ohLLArZl+AV/AdmrD1/pD1FlmqM+FKbtnONnIwbHtgetFUCV/SRi1q4D49aTlw==} cpu: [arm64] os: [linux] - '@unrs/resolver-binding-linux-arm64-musl@1.7.0': - resolution: {integrity: sha512-Sligg+vTDAYTXkUtgviPjGEFIh57pkvlfdyRw21i9gkjp/eCNOAi2o5e7qLGTkoYdJHZJs5wVMViPEmAbw2/Tg==} + '@unrs/resolver-binding-linux-arm64-musl@1.7.11': + resolution: {integrity: sha512-tYkGIx8hjWPh4zcn17jLEHU8YMmdP2obRTGkdaB3BguGHh31VCS3ywqC4QjTODjmhhNyZYkj/1Dz/+0kKvg9YA==} cpu: [arm64] os: [linux] - '@unrs/resolver-binding-linux-ppc64-gnu@1.7.0': - resolution: {integrity: sha512-Apek8/x+7Rg33zUJlQV44Bvq8/t1brfulk0veNJrk9wprF89bCYFMUHF7zQYcpf2u+m1+qs3mYQrBd43fGXhMA==} + '@unrs/resolver-binding-linux-ppc64-gnu@1.7.11': + resolution: {integrity: sha512-6F328QIUev29vcZeRX6v6oqKxfUoGwIIAhWGD8wSysnBYFY0nivp25jdWmAb1GildbCCaQvOKEhCok7YfWkj4Q==} cpu: [ppc64] os: [linux] - '@unrs/resolver-binding-linux-riscv64-gnu@1.7.0': - resolution: {integrity: sha512-kBale8CFX5clfV9VmI9EwKw2ZACMEx1ecjV92F9SeWTUoxl9d+LGzS6zMSX3kGYqcfJB3NXMwLCTwIDBLG1y4g==} + '@unrs/resolver-binding-linux-riscv64-gnu@1.7.11': + resolution: {integrity: sha512-NqhWmiGJGdzbZbeucPZIG9Iav4lyYLCarEnxAceguMx9qlpeEF7ENqYKOwB8Zqk7/CeuYMEcLYMaW2li6HyDzQ==} cpu: [riscv64] os: [linux] - '@unrs/resolver-binding-linux-riscv64-musl@1.7.0': - resolution: {integrity: sha512-s/Q33xQjeFHSCvGl1sZztFZF6xhv7coMvFz6wa/x/ZlEArjiQoMMwGa/Aieq1Kp/6+S13iU3/IJF0ga6/451ow==} + '@unrs/resolver-binding-linux-riscv64-musl@1.7.11': + resolution: {integrity: sha512-J2RPIFKMdTrLtBdfR1cUMKl8Gcy05nlQ+bEs/6al7EdWLk9cs3tnDREHZ7mV9uGbeghpjo4i8neNZNx3PYUY9w==} cpu: [riscv64] os: [linux] - '@unrs/resolver-binding-linux-s390x-gnu@1.7.0': - resolution: {integrity: sha512-7PuNXAo97ydaxVNrIYJzPipvINJafDpB8pt5CoZHfu8BmqcU6d7kl6/SABTnqNffNkd6Cfhuo70jvGB2P7oJ/Q==} + '@unrs/resolver-binding-linux-s390x-gnu@1.7.11': + resolution: {integrity: sha512-bDpGRerHvvHdhun7MmFUNDpMiYcJSqWckwAVVRTJf8F+RyqYJOp/mx04PDc7DhpNPeWdnTMu91oZRMV+gGaVcQ==} cpu: [s390x] os: [linux] - '@unrs/resolver-binding-linux-x64-gnu@1.7.0': - resolution: {integrity: sha512-fNosEzDMYItA4It+R0tioHwKlEfx/3TkkJdP2x9B5o9R946NDC4ZZj5ZjA+Y4NQD2V/imB3QPAKmeh3vHQGQyA==} + '@unrs/resolver-binding-linux-x64-gnu@1.7.11': + resolution: {integrity: sha512-G9U7bVmylzRLma3cK39RBm3guoD1HOvY4o0NS4JNm37AD0lS7/xyMt7kn0JejYyc0Im8J+rH69/dXGM9DAJcSQ==} cpu: [x64] os: [linux] - '@unrs/resolver-binding-linux-x64-musl@1.7.0': - resolution: {integrity: sha512-gHIw42dmnVcw7osjNPRybaXhONhggWkkzqiOZzXco1q3OKkn4KsbDylATeemnq3TP+L1BrzSqzl0H9UTJ6ji+w==} + '@unrs/resolver-binding-linux-x64-musl@1.7.11': + resolution: {integrity: sha512-7qL20SBKomekSunm7M9Fe5L93bFbn+FbHiGJbfTlp0RKhPVoJDP73vOxf1QrmJHyDPECsGWPFnKa/f8fO2FsHw==} cpu: [x64] os: [linux] - '@unrs/resolver-binding-wasm32-wasi@1.7.0': - resolution: {integrity: sha512-yq7POusv63/yTkNTaNsnXU/SAcBzckHyk1oYrDXqjS1m/goaWAaU9J9HrsovgTHkljxTcDd6PMAsJ5WZVBuGEQ==} + '@unrs/resolver-binding-wasm32-wasi@1.7.11': + resolution: {integrity: sha512-jisvIva8MidjI+B1lFRZZMfCPaCISePgTyR60wNT1MeQvIh5Ksa0G3gvI+Iqyj3jqYbvOHByenpa5eDGcSdoSg==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@unrs/resolver-binding-win32-arm64-msvc@1.7.0': - resolution: {integrity: sha512-/IPZPbdri9jglHonwB3F7EpQZvBK3ObH+g4ma/KDrqTEAECwvgE10Unvo0ox3LQFR/iMMAkVY+sGNMrMiIV/QQ==} + '@unrs/resolver-binding-win32-arm64-msvc@1.7.11': + resolution: {integrity: sha512-G+H5nQZ8sRZ8ebMY6mRGBBvTEzMYEcgVauLsNHpvTUavZoCCRVP1zWkCZgOju2dW3O22+8seTHniTdl1/uLz3g==} cpu: [arm64] os: [win32] - '@unrs/resolver-binding-win32-ia32-msvc@1.7.0': - resolution: {integrity: sha512-NGVKbHEdrLuJdpcuGqV5zXO3v8t4CWOs0qeCGjO47RiwwufOi/yYcrtxtCzZAaMPBrffHL7c6tJ1Hxr17cPUGg==} + '@unrs/resolver-binding-win32-ia32-msvc@1.7.11': + resolution: {integrity: sha512-Hfy46DBfFzyv0wgR0MMOwFFib2W2+Btc8oE5h4XlPhpelnSyA6nFxkVIyTgIXYGTdFaLoZFNn62fmqx3rjEg3A==} cpu: [ia32] os: [win32] - '@unrs/resolver-binding-win32-x64-msvc@1.7.0': - resolution: {integrity: sha512-Jf14pKofg58DIwcZv4Wt9AyVVe7bSJP8ODz+EP9nG/rho08FQzan0VOJk1g6/BNE1RkoYd+lRTWK+/BgH12qoQ==} + '@unrs/resolver-binding-win32-x64-msvc@1.7.11': + resolution: {integrity: sha512-7L8NdsQlCJ8T106Gbz/AjzM4QKWVsoQbKpB9bMBGcIZswUuAnJMHpvbqGW3RBqLHCIwX4XZ5fxSBHEFcK2h9wA==} 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==} - '@vitest/expect@3.1.2': - resolution: {integrity: sha512-O8hJgr+zREopCAqWl3uCVaOdqJwZ9qaDwUP7vy3Xigad0phZe9APxKhPcDNqYYi0rX5oMvwJMSCAXY2afqeTSA==} + '@vitest/expect@3.2.2': + resolution: {integrity: sha512-ipHw0z669vEMjzz3xQE8nJX1s0rQIb7oEl4jjl35qWTwm/KIHERIg/p/zORrjAaZKXfsv7IybcNGHwhOOAPMwQ==} - '@vitest/mocker@3.1.2': - resolution: {integrity: sha512-kOtd6K2lc7SQ0mBqYv/wdGedlqPdM/B38paPY+OwJ1XiNi44w3Fpog82UfOibmHaV9Wod18A09I9SCKLyDMqgw==} + '@vitest/mocker@3.2.2': + resolution: {integrity: sha512-jKojcaRyIYpDEf+s7/dD3LJt53c0dPfp5zCPXz9H/kcGrSlovU/t1yEaNzM9oFME3dcd4ULwRI/x0Po1Zf+LTw==} peerDependencies: msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/pretty-format@3.1.2': - resolution: {integrity: sha512-R0xAiHuWeDjTSB3kQ3OQpT8Rx3yhdOAIm/JM4axXxnG7Q/fS8XUwggv/A4xzbQA+drYRjzkMnpYnOGAc4oeq8w==} + '@vitest/pretty-format@3.2.2': + resolution: {integrity: sha512-FY4o4U1UDhO9KMd2Wee5vumwcaHw7Vg4V7yR4Oq6uK34nhEJOmdRYrk3ClburPRUA09lXD/oXWZ8y/Sdma0aUQ==} - '@vitest/runner@3.1.2': - resolution: {integrity: sha512-bhLib9l4xb4sUMPXnThbnhX2Yi8OutBMA8Yahxa7yavQsFDtwY/jrUZwpKp2XH9DhRFJIeytlyGpXCqZ65nR+g==} + '@vitest/runner@3.2.2': + resolution: {integrity: sha512-GYcHcaS3ejGRZYed2GAkvsjBeXIEerDKdX3orQrBJqLRiea4NSS9qvn9Nxmuy1IwIB+EjFOaxXnX79l8HFaBwg==} - '@vitest/snapshot@3.1.2': - resolution: {integrity: sha512-Q1qkpazSF/p4ApZg1vfZSQ5Yw6OCQxVMVrLjslbLFA1hMDrT2uxtqMaw8Tc/jy5DLka1sNs1Y7rBcftMiaSH/Q==} + '@vitest/snapshot@3.2.2': + resolution: {integrity: sha512-aMEI2XFlR1aNECbBs5C5IZopfi5Lb8QJZGGpzS8ZUHML5La5wCbrbhLOVSME68qwpT05ROEEOAZPRXFpxZV2wA==} - '@vitest/spy@3.1.2': - resolution: {integrity: sha512-OEc5fSXMws6sHVe4kOFyDSj/+4MSwst0ib4un0DlcYgQvRuYQ0+M2HyqGaauUMnjq87tmUaMNDxKQx7wNfVqPA==} + '@vitest/spy@3.2.2': + resolution: {integrity: sha512-6Utxlx3o7pcTxvp0u8kUiXtRFScMrUg28KjB3R2hon7w4YqOFAEA9QwzPVVS1QNL3smo4xRNOpNZClRVfpMcYg==} - '@vitest/utils@3.1.2': - resolution: {integrity: sha512-5GGd0ytZ7BH3H6JTj9Kw7Prn1Nbg0wZVrIvou+UWxm54d+WoXXgAgjFJ8wn3LdagWLFSEfpPeyYrByZaGEZHLg==} + '@vitest/utils@3.2.2': + resolution: {integrity: sha512-qJYMllrWpF/OYfWHP32T31QCaLa3BAzT/n/8mNGhPdVcjY+JYazQFO1nsJvXU12Kp1xMpNY4AGuljPTNjQve6A==} acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -2066,8 +2280,8 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - ansis@3.17.0: - resolution: {integrity: sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==} + ansis@4.1.0: + resolution: {integrity: sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w==} engines: {node: '>=14'} argparse@2.0.1: @@ -2092,8 +2306,8 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} - babel-plugin-react-compiler@19.1.0-rc.1: - resolution: {integrity: sha512-M4fpG+Hfq5gWzsJeeMErdRokzg0fdJ8IAk+JDhfB/WLT+U3WwJWR8edphypJrk447/JEvYu6DBFwsTn10bMW4Q==} + babel-plugin-react-compiler@19.1.0-rc.2: + resolution: {integrity: sha512-kSNA//p5fMO6ypG8EkEVPIqAjwIXm5tMjfD1XRPL/sRjYSbJ6UsvORfaeolNWnZ9n310aM0xJP7peW26BuCVzA==} bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} @@ -2305,16 +2519,17 @@ packages: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} - debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} peerDependencies: supports-color: '*' peerDependenciesMeta: supports-color: optional: true - debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -2384,8 +2599,8 @@ packages: error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - es-module-lexer@1.6.0: - resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} esbuild@0.24.2: resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} @@ -2402,6 +2617,11 @@ packages: engines: {node: '>=18'} hasBin: true + esbuild@0.25.5: + resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -2416,8 +2636,14 @@ packages: peerDependencies: eslint: '>=6.0.0' - eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + eslint-import-context@0.1.8: + resolution: {integrity: sha512-bq+F7nyc65sKpZGT09dY0S0QrOnQtuDVIfyTGQ8uuvtMIF7oHp6CEP3mouN0rrnYF3Jqo6Ke0BfU/5wASZue1w==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + peerDependencies: + unrs-resolver: ^1.0.0 + peerDependenciesMeta: + unrs-resolver: + optional: true eslint-plugin-es-x@7.8.0: resolution: {integrity: sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==} @@ -2425,20 +2651,27 @@ packages: peerDependencies: eslint: '>=8' - eslint-plugin-import-x@4.11.0: - resolution: {integrity: sha512-NAaYY49342gj09QGvwnFFl5KcD5aLzjAz97Lo+upnN8MzjEGSIlmL5sxCYGqtIeMjw8fSRDFZIp2xjRLT+yl4Q==} + eslint-plugin-import-x@4.15.1: + resolution: {integrity: sha512-JfVpNg1qMkPD66iaSgmMoSYeUCGS8UFSm3GwHV0IbuV3Knar/SyK5qqCct9+AxoMIzaM+KSO7KK5pOeOkC/3GQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: + '@typescript-eslint/utils': ^8.0.0 eslint: ^8.57.0 || ^9.0.0 + eslint-import-resolver-node: '*' + peerDependenciesMeta: + '@typescript-eslint/utils': + optional: true + eslint-import-resolver-node: + optional: true - eslint-plugin-n@17.17.0: - resolution: {integrity: sha512-2VvPK7Mo73z1rDFb6pTvkH6kFibAmnTubFq5l83vePxu0WiY1s0LOtj2WHb6Sa40R3w4mnh8GFYbHBQyMlotKw==} + eslint-plugin-n@17.19.0: + resolution: {integrity: sha512-qxn1NaDHtizbhVAPpbMT8wWFaLtPnwhfN/e+chdu2i6Vgzmo/tGM62tcJ1Hf7J5Ie4dhse3DOPMmDxduzfifzw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=8.23.0' - eslint-plugin-regexp@2.7.0: - resolution: {integrity: sha512-U8oZI77SBtH8U3ulZ05iu0qEzIizyEDXd+BWHvyVxTOjGwcDcvy/kEpgFG4DYca2ByRLiVPFZ2GeH7j1pdvZTA==} + eslint-plugin-regexp@2.8.0: + resolution: {integrity: sha512-xme90IvkMgdyS+NJC21FM0H6ek4urGsdlIFTXpZRqH2BKJKVSd8hRbyrCpbcqfGBi2jth3eQoLiO3RC1gxZHiw==} engines: {node: ^18 || >=20} peerDependencies: eslint: '>=8.44.0' @@ -2455,8 +2688,8 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.25.1: - resolution: {integrity: sha512-E6Mtz9oGQWDCpV12319d59n4tx9zOTXSTmc8BLVxBx+G/0RdM5MvEEJLU9c0+aleoePYYgVTOsRblx433qmhWQ==} + eslint@9.28.0: + resolution: {integrity: sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -2640,6 +2873,9 @@ packages: get-tsconfig@4.10.0: resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} + get-tsconfig@4.10.1: + resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -2660,8 +2896,8 @@ packages: resolution: {integrity: sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==} engines: {node: '>=18'} - globals@16.0.0: - resolution: {integrity: sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==} + globals@16.2.0: + resolution: {integrity: sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==} engines: {node: '>=18'} graceful-fs@4.2.11: @@ -2701,6 +2937,10 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -2836,74 +3076,70 @@ 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: - resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} - engines: {node: '>=14'} - lilconfig@3.1.3: resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} engines: {node: '>=14'} @@ -2911,8 +3147,8 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lint-staged@15.5.1: - resolution: {integrity: sha512-6m7u8mue4Xn6wK6gZvSCQwBvMBR36xfY24nF5bMTf2MHDYG6S3yhJuOgdYVw99hsjyDt2d4z168b3naI8+NWtQ==} + lint-staged@15.5.2: + resolution: {integrity: sha512-YUSOLq9VeRNAo/CTaVmhGDKG+LBtA8KF1X4K5+ykMSwWST1vDxJRB2kv2COgLb1fvpCo+A/y9A0G0znNVmdx4w==} engines: {node: '>=18.12.0'} hasBin: true @@ -3137,8 +3373,8 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - napi-postinstall@0.1.6: - resolution: {integrity: sha512-w1bClprmjwpybo+7M1Rd0N4QK5Ein8kH/1CQ0Wv8Q9vrLbDMakxc4rZpv8zYc8RVErUELJlFhM8UzOF3IqlYKw==} + napi-postinstall@0.2.4: + resolution: {integrity: sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} hasBin: true @@ -3500,8 +3736,8 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - react-compiler-runtime@19.1.0-rc.1: - resolution: {integrity: sha512-wCt6g+cRh8g32QT18/9blfQHywGjYu+4FlEc3CW1mx3pPxYzZZl1y+VtqxRgnKKBCFLIGUYxog4j4rs5YS86hw==} + react-compiler-runtime@19.1.0-rc.2: + resolution: {integrity: sha512-852AwyIsbWJ5o1LkQVAZsVK3iLjMxOfKZuxqeGd/RfD+j1GqHb6j3DSHLtpu4HhFbQHsP2DzxjJyKR6luv4D8w==} peerDependencies: react: ^17.0.0 || ^18.0.0 || ^19.0.0 || ^0.0.0-experimental @@ -3525,15 +3761,15 @@ packages: resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} engines: {node: '>=0.10.0'} - react-router-dom@7.5.2: - resolution: {integrity: sha512-yk1XW8Fj7gK7flpYBXF3yzd2NbX6P7Kxjvs2b5nu1M04rb5pg/Zc4fGdBNTeT4eDYL2bvzWNyKaIMJX/RKHTTg==} + react-router-dom@7.6.2: + resolution: {integrity: sha512-Q8zb6VlTbdYKK5JJBLQEN06oTUa/RAbG/oQS1auK1I0TbJOXktqm+QENEVJU6QvWynlXPRBXI3fiOQcSEA78rA==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' react-dom: '>=18' - react-router@7.5.2: - resolution: {integrity: sha512-9Rw8r199klMnlGZ8VAsV/I8WrIF6IyJ90JQUdboupx1cdkgYqwnrYjH+I/nY/7cA1X5zia4mDJqH36npP7sxGQ==} + react-router@7.6.2: + resolution: {integrity: sha512-U7Nv3y+bMimgWjhlT5CRdzHPu2/KVmqPwKUCChW8en5P3znxUqwlYFlbmyj8Rgp1SF6zs5X4+77kBVknkg6a0w==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' @@ -3598,8 +3834,8 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rolldown-vite@6.3.5: - resolution: {integrity: sha512-lTKMNb6Vl2fNblU8ve4SM+3p0gwYzKy2fjae7KTLuKKN8bdI+TwgFeB97ICEKq/t6KNNAg8f66FaK/q0cylrNg==} + rolldown-vite@6.3.18: + resolution: {integrity: sha512-c1D5JZa82T5HDWTz11ZBm86hvOBejSP1Y9SSzol7HyNQ+rDx88MPbVlbI1gGJaYYLr3rxaJIfNJnSEQBcZXSbA==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -3638,14 +3874,9 @@ 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.11-commit.0a985f3: + resolution: {integrity: sha512-rfwPHnevUxuFPjpltnvjj7hrVcT9Y+GuegBtbKxfaitE2rkoo6HrnzOaIWgAMTOi2y57K9x5177weP/4YR96Xg==} hasBin: true - peerDependencies: - '@oxc-project/runtime': 0.66.0 - peerDependenciesMeta: - '@oxc-project/runtime': - optional: true rollup-plugin-dts@6.2.1: resolution: {integrity: sha512-sR3CxYUl7i2CHa0O7bA45mCrgADyAQ0tVtGSqi3yvH28M+eg1+g5d7kQ9hLvEz5dorK3XVsH5L2jwHLQf72DzA==} @@ -3688,6 +3919,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + set-cookie-parser@2.7.1: resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} @@ -3742,8 +3978,9 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - stable-hash@0.0.5: - resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} + stable-hash-x@0.1.1: + resolution: {integrity: sha512-l0x1D6vhnsNUGPFVDx45eif0y6eedVC8nm5uACTrVFJFtl2mLRW17aWtVyxFCpn5t94VUPkjU8vSLwIuwwqtJQ==} + engines: {node: '>=12.0.0'} stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -3780,8 +4017,8 @@ packages: style-to-object@1.0.5: resolution: {integrity: sha512-rDRwHtoDD3UMMrmZ6BzOW0naTjMsVZLIjsGleSKS/0Oz+cgCfAPRspaqJuE8rDzpKha/nEvnM0IF4seEAZUTKQ==} - styled-components@6.1.17: - resolution: {integrity: sha512-97D7DwWanI7nN24v0D4SvbfjLE9656umNSJZkBkDIWL37aZqG/wRQ+Y9pWtXyBIM/NSfcBzHLErEsqHmJNSVUg==} + styled-components@6.1.18: + resolution: {integrity: sha512-Mvf3gJFzZCkhjY2Y/Fx9z1m3dxbza0uI9H1CbNZm/jSHCojzJhQ0R7bByrlFJINnMzz/gPulpoFFGymNwrsMcw==} engines: {node: '>= 16'} peerDependencies: react: '>= 16.8.0' @@ -3830,16 +4067,20 @@ packages: resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} engines: {node: '>=12.0.0'} - tinypool@1.0.2: - resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} + tinyglobby@0.2.14: + resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} + engines: {node: '>=12.0.0'} + + tinypool@1.1.0: + resolution: {integrity: sha512-7CotroY9a8DKsKprEy/a14aCCm8jYVmR7aFy4fpkZM8sdpNJbKkixuNjgM50yCmip2ezc8z4N7k3oe2+rfRJCQ==} engines: {node: ^18.0.0 || >=20.0.0} tinyrainbow@2.0.0: resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} engines: {node: '>=14.0.0'} - tinyspy@3.0.2: - resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + tinyspy@4.0.3: + resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} engines: {node: '>=14.0.0'} to-regex-range@5.0.1: @@ -3858,26 +4099,28 @@ packages: peerDependencies: typescript: '>=4.8.4' + ts-declaration-location@1.0.7: + resolution: {integrity: sha512-EDyGAwH1gO0Ausm9gV6T2nUvBgXT5kGoCMJPllOaooZ+4VvJiKBdZE7wK18N1deEowhcUptS+5GXZK8U/fvpwA==} + peerDependencies: + typescript: '>=4.0.0' + tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsx@4.19.3: - resolution: {integrity: sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==} + tsx@4.19.4: + resolution: {integrity: sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==} engines: {node: '>=18.0.0'} hasBin: true - turbo-stream@2.4.0: - resolution: {integrity: sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==} - type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - typescript-eslint@8.31.0: - resolution: {integrity: sha512-u+93F0sB0An8WEAPtwxVhFby573E8ckdjwUUQUj9QA4v8JAvgtoDdIyYR3XFwFHq2W1KJ1AurwJCO+w+Y1ixyQ==} + typescript-eslint@8.33.1: + resolution: {integrity: sha512-AgRnV4sKkWOiZ0Kjbnf5ytTJXMUZQ0qhSVdQtDNYLPLnjsATEYhaO94GlRQwi4t4gO8FfjM6NnikHeKjUm8D7A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -3931,8 +4174,8 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - unrs-resolver@1.7.0: - resolution: {integrity: sha512-b76tVoT9KPniDY1GoYghDUQX20gjzXm/TONfHfgayLaiuo+oGyT9CsQkGCEJs+1/uryVBEOGOt3yYWDXbJhL7g==} + unrs-resolver@1.7.11: + resolution: {integrity: sha512-OhuAzBImFPjKNgZ2JwHMfGFUA6NSbRegd1+BPjC1Y0E6X9Y/vJ4zKeGmIMqmlYboj6cMNEwKI+xQisrg4J0HaQ==} untyped@2.0.0: resolution: {integrity: sha512-nwNCjxJTjNuLCgFr42fEak5OcLuB3ecca+9ksPFNvtfYSLpjf+iJqSIaSnIile6ZPbKYxI5k2AfXqeopGudK/g==} @@ -3950,22 +4193,14 @@ 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==} vfile@6.0.1: resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} - vite-node@3.1.2: - resolution: {integrity: sha512-/8iMryv46J3aK13iUXsei5G/A3CUlW4665THCPS+K8xAaqrVWiGB4RfXMQXCLjpK9P2eK//BczrVkn5JLAk6DA==} + vite-node@3.2.2: + resolution: {integrity: sha512-Xj/jovjZvDXOq2FgLXu8NsY4uHUMWtzVmMC2LkCu9HWdr9Qu1Is5sanX3Z4jOFKdohfaWDnEJWp9pRP0vVpAcA==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true @@ -4009,16 +4244,16 @@ packages: yaml: optional: true - vitest@3.1.2: - resolution: {integrity: sha512-WaxpJe092ID1C0mr+LH9MmNrhfzi8I65EX/NRU/Ld016KqQNRgxSOlGNP1hHN+a/F8L15Mh8klwaF77zR3GeDQ==} + vitest@3.2.2: + resolution: {integrity: sha512-fyNn/Rp016Bt5qvY0OQvIUCwW2vnaEBLxP42PmKbNIoasSYjML+8xyeADOPvBe+Xfl/ubIw4og7Lt9jflRsCNw==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/debug': ^4.1.12 '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.1.2 - '@vitest/ui': 3.1.2 + '@vitest/browser': 3.2.2 + '@vitest/ui': 3.2.2 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -4089,20 +4324,26 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.26.8': {} + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + js-tokens: 4.0.0 + picocolors: 1.1.1 - '@babel/core@7.26.10': + '@babel/compat-data@7.27.5': {} + + '@babel/core@7.27.4': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.27.0 - '@babel/helper-compilation-targets': 7.27.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) - '@babel/helpers': 7.27.0 - '@babel/parser': 7.27.0 - '@babel/template': 7.27.0 - '@babel/traverse': 7.27.0 - '@babel/types': 7.27.0 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.27.5 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4) + '@babel/helpers': 7.27.6 + '@babel/parser': 7.27.5 + '@babel/template': 7.27.2 + '@babel/traverse': 7.27.4 + '@babel/types': 7.27.6 convert-source-map: 2.0.0 debug: 4.4.0 gensync: 1.0.0-beta.2 @@ -4111,114 +4352,127 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.26.2': + '@babel/generator@7.27.0': dependencies: - '@babel/parser': 7.26.2 + '@babel/parser': 7.27.0 '@babel/types': 7.27.0 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.0.2 - '@babel/generator@7.27.0': + '@babel/generator@7.27.5': dependencies: - '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 + '@babel/parser': 7.27.5 + '@babel/types': 7.27.6 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.0.2 - '@babel/helper-annotate-as-pure@7.25.9': + '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.27.6 - '@babel/helper-compilation-targets@7.27.0': + '@babel/helper-compilation-targets@7.27.2': dependencies: - '@babel/compat-data': 7.26.8 - '@babel/helper-validator-option': 7.25.9 + '@babel/compat-data': 7.27.5 + '@babel/helper-validator-option': 7.27.1 browserslist: 4.24.4 lru-cache: 5.1.1 semver: 6.3.1 '@babel/helper-module-imports@7.25.9': dependencies: - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.27.0 '@babel/types': 7.27.0 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)': + '@babel/helper-module-imports@7.27.1': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.27.0 + '@babel/traverse': 7.27.4 + '@babel/types': 7.27.6 transitivePeerDependencies: - supports-color - '@babel/helper-plugin-utils@7.25.9': {} + '@babel/helper-module-transforms@7.27.3(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.27.4 + transitivePeerDependencies: + - supports-color - '@babel/helper-plugin-utils@7.26.5': {} + '@babel/helper-plugin-utils@7.27.1': {} '@babel/helper-string-parser@7.25.9': {} + '@babel/helper-string-parser@7.27.1': {} + '@babel/helper-validator-identifier@7.25.9': {} - '@babel/helper-validator-option@7.25.9': {} + '@babel/helper-validator-identifier@7.27.1': {} - '@babel/helpers@7.27.0': + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helpers@7.27.6': dependencies: - '@babel/template': 7.27.0 - '@babel/types': 7.27.0 + '@babel/template': 7.27.2 + '@babel/types': 7.27.6 '@babel/parser@7.26.2': dependencies: - '@babel/types': 7.26.0 + '@babel/types': 7.27.0 '@babel/parser@7.27.0': dependencies: '@babel/types': 7.27.0 - '@babel/plugin-proposal-pipeline-operator@7.26.7(@babel/core@7.26.10)': + '@babel/parser@7.27.5': + dependencies: + '@babel/types': 7.27.6 + + '@babel/plugin-proposal-pipeline-operator@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-pipeline-operator': 7.26.7(@babel/core@7.26.10) + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-pipeline-operator': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-pipeline-operator@7.26.7(@babel/core@7.26.10)': + '@babel/plugin-syntax-pipeline-operator@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx-development@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.26.10 - '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.10) + '@babel/core': 7.27.4 + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.27.4) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.27.4 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.10)': + '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.26.10 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10) - '@babel/types': 7.27.0 + '@babel/core': 7.27.4 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.4) + '@babel/types': 7.27.6 transitivePeerDependencies: - supports-color @@ -4226,29 +4480,17 @@ snapshots: dependencies: regenerator-runtime: 0.14.0 - '@babel/template@7.25.9': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.2 - '@babel/types': 7.27.0 - '@babel/template@7.27.0': dependencies: '@babel/code-frame': 7.26.2 '@babel/parser': 7.27.0 '@babel/types': 7.27.0 - '@babel/traverse@7.25.9': + '@babel/template@7.27.2': dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.2 - '@babel/parser': 7.26.2 - '@babel/template': 7.25.9 - '@babel/types': 7.27.0 - debug: 4.4.0 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.27.5 + '@babel/types': 7.27.6 '@babel/traverse@7.27.0': dependencies: @@ -4262,6 +4504,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/traverse@7.27.4': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.27.5 + '@babel/parser': 7.27.5 + '@babel/template': 7.27.2 + '@babel/types': 7.27.6 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + '@babel/types@7.26.0': dependencies: '@babel/helper-string-parser': 7.25.9 @@ -4272,18 +4526,23 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@emnapi/core@1.4.0': + '@babel/types@7.27.6': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + + '@emnapi/core@1.4.3': dependencies: - '@emnapi/wasi-threads': 1.0.1 + '@emnapi/wasi-threads': 1.0.2 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.4.0': + '@emnapi/runtime@1.4.3': dependencies: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.0.1': + '@emnapi/wasi-threads@1.0.2': dependencies: tslib: 2.8.1 optional: true @@ -4326,7 +4585,7 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0)': + '@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0)': dependencies: '@babel/runtime': 7.23.5 '@emotion/babel-plugin': 11.13.5 @@ -4338,7 +4597,7 @@ snapshots: hoist-non-react-statics: 3.3.2 react: 19.1.0 optionalDependencies: - '@types/react': 19.1.2 + '@types/react': 19.1.6 transitivePeerDependencies: - supports-color @@ -4352,18 +4611,18 @@ snapshots: '@emotion/sheet@1.4.0': {} - '@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0)': + '@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0)': dependencies: '@babel/runtime': 7.23.5 '@emotion/babel-plugin': 11.13.5 '@emotion/is-prop-valid': 1.3.1 - '@emotion/react': 11.14.0(@types/react@19.1.2)(react@19.1.0) + '@emotion/react': 11.14.0(@types/react@19.1.6)(react@19.1.0) '@emotion/serialize': 1.3.3 '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.0) '@emotion/utils': 1.4.2 react: 19.1.0 optionalDependencies: - '@types/react': 19.1.2 + '@types/react': 19.1.6 transitivePeerDependencies: - supports-color @@ -4388,6 +4647,9 @@ snapshots: '@esbuild/aix-ppc64@0.25.3': optional: true + '@esbuild/aix-ppc64@0.25.5': + optional: true + '@esbuild/android-arm64@0.24.2': optional: true @@ -4397,6 +4659,9 @@ snapshots: '@esbuild/android-arm64@0.25.3': optional: true + '@esbuild/android-arm64@0.25.5': + optional: true + '@esbuild/android-arm@0.24.2': optional: true @@ -4406,6 +4671,9 @@ snapshots: '@esbuild/android-arm@0.25.3': optional: true + '@esbuild/android-arm@0.25.5': + optional: true + '@esbuild/android-x64@0.24.2': optional: true @@ -4415,6 +4683,9 @@ snapshots: '@esbuild/android-x64@0.25.3': optional: true + '@esbuild/android-x64@0.25.5': + optional: true + '@esbuild/darwin-arm64@0.24.2': optional: true @@ -4424,6 +4695,9 @@ snapshots: '@esbuild/darwin-arm64@0.25.3': optional: true + '@esbuild/darwin-arm64@0.25.5': + optional: true + '@esbuild/darwin-x64@0.24.2': optional: true @@ -4433,6 +4707,9 @@ snapshots: '@esbuild/darwin-x64@0.25.3': optional: true + '@esbuild/darwin-x64@0.25.5': + optional: true + '@esbuild/freebsd-arm64@0.24.2': optional: true @@ -4442,6 +4719,9 @@ snapshots: '@esbuild/freebsd-arm64@0.25.3': optional: true + '@esbuild/freebsd-arm64@0.25.5': + optional: true + '@esbuild/freebsd-x64@0.24.2': optional: true @@ -4451,6 +4731,9 @@ snapshots: '@esbuild/freebsd-x64@0.25.3': optional: true + '@esbuild/freebsd-x64@0.25.5': + optional: true + '@esbuild/linux-arm64@0.24.2': optional: true @@ -4460,6 +4743,9 @@ snapshots: '@esbuild/linux-arm64@0.25.3': optional: true + '@esbuild/linux-arm64@0.25.5': + optional: true + '@esbuild/linux-arm@0.24.2': optional: true @@ -4469,6 +4755,9 @@ snapshots: '@esbuild/linux-arm@0.25.3': optional: true + '@esbuild/linux-arm@0.25.5': + optional: true + '@esbuild/linux-ia32@0.24.2': optional: true @@ -4478,6 +4767,9 @@ snapshots: '@esbuild/linux-ia32@0.25.3': optional: true + '@esbuild/linux-ia32@0.25.5': + optional: true + '@esbuild/linux-loong64@0.24.2': optional: true @@ -4487,6 +4779,9 @@ snapshots: '@esbuild/linux-loong64@0.25.3': optional: true + '@esbuild/linux-loong64@0.25.5': + optional: true + '@esbuild/linux-mips64el@0.24.2': optional: true @@ -4496,6 +4791,9 @@ snapshots: '@esbuild/linux-mips64el@0.25.3': optional: true + '@esbuild/linux-mips64el@0.25.5': + optional: true + '@esbuild/linux-ppc64@0.24.2': optional: true @@ -4505,6 +4803,9 @@ snapshots: '@esbuild/linux-ppc64@0.25.3': optional: true + '@esbuild/linux-ppc64@0.25.5': + optional: true + '@esbuild/linux-riscv64@0.24.2': optional: true @@ -4514,6 +4815,9 @@ snapshots: '@esbuild/linux-riscv64@0.25.3': optional: true + '@esbuild/linux-riscv64@0.25.5': + optional: true + '@esbuild/linux-s390x@0.24.2': optional: true @@ -4523,6 +4827,9 @@ snapshots: '@esbuild/linux-s390x@0.25.3': optional: true + '@esbuild/linux-s390x@0.25.5': + optional: true + '@esbuild/linux-x64@0.24.2': optional: true @@ -4532,6 +4839,9 @@ snapshots: '@esbuild/linux-x64@0.25.3': optional: true + '@esbuild/linux-x64@0.25.5': + optional: true + '@esbuild/netbsd-arm64@0.24.2': optional: true @@ -4541,6 +4851,9 @@ snapshots: '@esbuild/netbsd-arm64@0.25.3': optional: true + '@esbuild/netbsd-arm64@0.25.5': + optional: true + '@esbuild/netbsd-x64@0.24.2': optional: true @@ -4550,6 +4863,9 @@ snapshots: '@esbuild/netbsd-x64@0.25.3': optional: true + '@esbuild/netbsd-x64@0.25.5': + optional: true + '@esbuild/openbsd-arm64@0.24.2': optional: true @@ -4559,6 +4875,9 @@ snapshots: '@esbuild/openbsd-arm64@0.25.3': optional: true + '@esbuild/openbsd-arm64@0.25.5': + optional: true + '@esbuild/openbsd-x64@0.24.2': optional: true @@ -4568,6 +4887,9 @@ snapshots: '@esbuild/openbsd-x64@0.25.3': optional: true + '@esbuild/openbsd-x64@0.25.5': + optional: true + '@esbuild/sunos-x64@0.24.2': optional: true @@ -4577,6 +4899,9 @@ snapshots: '@esbuild/sunos-x64@0.25.3': optional: true + '@esbuild/sunos-x64@0.25.5': + optional: true + '@esbuild/win32-arm64@0.24.2': optional: true @@ -4586,6 +4911,9 @@ snapshots: '@esbuild/win32-arm64@0.25.3': optional: true + '@esbuild/win32-arm64@0.25.5': + optional: true + '@esbuild/win32-ia32@0.24.2': optional: true @@ -4595,6 +4923,9 @@ snapshots: '@esbuild/win32-ia32@0.25.3': optional: true + '@esbuild/win32-ia32@0.25.5': + optional: true + '@esbuild/win32-x64@0.24.2': optional: true @@ -4604,9 +4935,17 @@ snapshots: '@esbuild/win32-x64@0.25.3': optional: true - '@eslint-community/eslint-utils@4.5.1(eslint@9.25.1(jiti@2.4.2))': + '@esbuild/win32-x64@0.25.5': + optional: true + + '@eslint-community/eslint-utils@4.5.1(eslint@9.28.0(jiti@2.4.2))': + dependencies: + eslint: 9.28.0(jiti@2.4.2) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/eslint-utils@4.7.0(eslint@9.28.0(jiti@2.4.2))': dependencies: - eslint: 9.25.1(jiti@2.4.2) + eslint: 9.28.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -4621,7 +4960,7 @@ snapshots: '@eslint/config-helpers@0.2.1': {} - '@eslint/core@0.13.0': + '@eslint/core@0.14.0': dependencies: '@types/json-schema': 7.0.15 @@ -4639,22 +4978,22 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.25.1': {} + '@eslint/js@9.28.0': {} '@eslint/object-schema@2.1.6': {} - '@eslint/plugin-kit@0.2.8': + '@eslint/plugin-kit@0.3.1': dependencies: - '@eslint/core': 0.13.0 + '@eslint/core': 0.14.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(react-router-dom@7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-router@7.6.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.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(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(react-router-dom@7.6.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.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(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) + react-router: 7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + vite: 6.3.3(@types/node@22.15.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1) transitivePeerDependencies: - react-router-dom @@ -4726,17 +5065,10 @@ 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': + '@napi-rs/wasm-runtime@0.2.10': dependencies: - '@emnapi/core': 1.4.0 - '@emnapi/runtime': 1.4.0 + '@emnapi/core': 1.4.3 + '@emnapi/runtime': 1.4.3 '@tybys/wasm-util': 0.9.0 optional: true @@ -4752,9 +5084,9 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 - '@oxc-project/runtime@0.66.0': {} + '@oxc-project/runtime@0.72.2': {} - '@oxc-project/types@0.66.0': {} + '@oxc-project/types@0.72.2': {} '@playwright/test@1.52.0': dependencies: @@ -4762,45 +5094,47 @@ 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.11-commit.0a985f3': optional: true - '@rolldown/binding-darwin-x64@1.0.0-beta.8-commit.2686eb1': + '@rolldown/binding-darwin-x64@1.0.0-beta.11-commit.0a985f3': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-beta.8-commit.2686eb1': + '@rolldown/binding-freebsd-x64@1.0.0-beta.11-commit.0a985f3': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.8-commit.2686eb1': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.11-commit.0a985f3': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.8-commit.2686eb1': + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.11-commit.0a985f3': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.8-commit.2686eb1': + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.11-commit.0a985f3': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.8-commit.2686eb1': + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.11-commit.0a985f3': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-beta.8-commit.2686eb1': + '@rolldown/binding-linux-x64-musl@1.0.0-beta.11-commit.0a985f3': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-beta.8-commit.2686eb1': + '@rolldown/binding-wasm32-wasi@1.0.0-beta.11-commit.0a985f3': dependencies: - '@napi-rs/wasm-runtime': 0.2.8 + '@napi-rs/wasm-runtime': 0.2.10 optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.8-commit.2686eb1': + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.11-commit.0a985f3': optional: true - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.8-commit.2686eb1': + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.11-commit.0a985f3': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.8-commit.2686eb1': + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.11-commit.0a985f3': optional: true - '@rolldown/pluginutils@1.0.0-beta.9': {} + '@rolldown/pluginutils@1.0.0-beta.11': {} + + '@rolldown/pluginutils@1.0.0-beta.11-commit.0a985f3': {} '@rollup/plugin-alias@5.1.1(rollup@4.37.0)': optionalDependencies: @@ -4917,59 +5251,59 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.37.0': optional: true - '@swc/core-darwin-arm64@1.11.22': + '@swc/core-darwin-arm64@1.11.31': optional: true - '@swc/core-darwin-x64@1.11.22': + '@swc/core-darwin-x64@1.11.31': optional: true - '@swc/core-linux-arm-gnueabihf@1.11.22': + '@swc/core-linux-arm-gnueabihf@1.11.31': optional: true - '@swc/core-linux-arm64-gnu@1.11.22': + '@swc/core-linux-arm64-gnu@1.11.31': optional: true - '@swc/core-linux-arm64-musl@1.11.22': + '@swc/core-linux-arm64-musl@1.11.31': optional: true - '@swc/core-linux-x64-gnu@1.11.22': + '@swc/core-linux-x64-gnu@1.11.31': optional: true - '@swc/core-linux-x64-musl@1.11.22': + '@swc/core-linux-x64-musl@1.11.31': optional: true - '@swc/core-win32-arm64-msvc@1.11.22': + '@swc/core-win32-arm64-msvc@1.11.31': optional: true - '@swc/core-win32-ia32-msvc@1.11.22': + '@swc/core-win32-ia32-msvc@1.11.31': optional: true - '@swc/core-win32-x64-msvc@1.11.22': + '@swc/core-win32-x64-msvc@1.11.31': optional: true - '@swc/core@1.11.22': + '@swc/core@1.11.31': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.21 optionalDependencies: - '@swc/core-darwin-arm64': 1.11.22 - '@swc/core-darwin-x64': 1.11.22 - '@swc/core-linux-arm-gnueabihf': 1.11.22 - '@swc/core-linux-arm64-gnu': 1.11.22 - '@swc/core-linux-arm64-musl': 1.11.22 - '@swc/core-linux-x64-gnu': 1.11.22 - '@swc/core-linux-x64-musl': 1.11.22 - '@swc/core-win32-arm64-msvc': 1.11.22 - '@swc/core-win32-ia32-msvc': 1.11.22 - '@swc/core-win32-x64-msvc': 1.11.22 + '@swc/core-darwin-arm64': 1.11.31 + '@swc/core-darwin-x64': 1.11.31 + '@swc/core-linux-arm-gnueabihf': 1.11.31 + '@swc/core-linux-arm64-gnu': 1.11.31 + '@swc/core-linux-arm64-musl': 1.11.31 + '@swc/core-linux-x64-gnu': 1.11.31 + '@swc/core-linux-x64-musl': 1.11.31 + '@swc/core-win32-arm64-msvc': 1.11.31 + '@swc/core-win32-ia32-msvc': 1.11.31 + '@swc/core-win32-x64-msvc': 1.11.31 '@swc/counter@0.1.3': {} - '@swc/plugin-emotion@9.0.3': + '@swc/plugin-emotion@9.0.4': dependencies: '@swc/counter': 0.1.3 - '@swc/plugin-styled-components@7.1.3': + '@swc/plugin-styled-components@7.1.5': dependencies: '@swc/counter': 0.1.3 @@ -4998,21 +5332,27 @@ snapshots: '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.26.0 + '@babel/types': 7.27.0 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.26.2 - '@babel/types': 7.26.0 + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.26.0 + '@babel/types': 7.27.0 + + '@types/chai@5.2.2': + dependencies: + '@types/deep-eql': 4.0.2 '@types/debug@4.1.12': dependencies: '@types/ms': 0.7.34 + '@types/deep-eql@4.0.2': {} + '@types/estree-jsx@1.0.3': dependencies: '@types/estree': 1.0.7 @@ -5024,7 +5364,7 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 22.15.2 + '@types/node': 22.15.30 '@types/hast@3.0.3': dependencies: @@ -5039,7 +5379,7 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 22.15.2 + '@types/node': 22.15.30 '@types/mdast@4.0.3': dependencies: @@ -5049,7 +5389,7 @@ snapshots: '@types/ms@0.7.34': {} - '@types/node@22.15.2': + '@types/node@22.15.30': dependencies: undici-types: 6.21.0 @@ -5061,16 +5401,16 @@ snapshots: dependencies: '@types/react': 18.3.20 - '@types/react-dom@19.1.2(@types/react@19.1.2)': + '@types/react-dom@19.1.6(@types/react@19.1.6)': dependencies: - '@types/react': 19.1.2 + '@types/react': 19.1.6 '@types/react@18.3.20': dependencies: '@types/prop-types': 15.7.11 csstype: 3.1.3 - '@types/react@19.1.2': + '@types/react@19.1.6': dependencies: csstype: 3.1.3 @@ -5088,31 +5428,40 @@ snapshots: '@types/unist@3.0.2': {} - '@typescript-eslint/eslint-plugin@8.31.0(@typescript-eslint/parser@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.33.1(@typescript-eslint/parser@8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.31.0 - '@typescript-eslint/type-utils': 8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.31.0 - eslint: 9.25.1(jiti@2.4.2) + '@typescript-eslint/parser': 8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.33.1 + '@typescript-eslint/type-utils': 8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.33.1 + eslint: 9.28.0(jiti@2.4.2) graphemer: 1.4.0 - ignore: 5.3.2 + ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/parser@8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/scope-manager': 8.31.0 - '@typescript-eslint/types': 8.31.0 - '@typescript-eslint/typescript-estree': 8.31.0(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.31.0 + '@typescript-eslint/scope-manager': 8.33.1 + '@typescript-eslint/types': 8.33.1 + '@typescript-eslint/typescript-estree': 8.33.1(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.33.1 + debug: 4.4.0 + eslint: 9.28.0(jiti@2.4.2) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.33.1(typescript@5.8.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.33.1(typescript@5.8.3) + '@typescript-eslint/types': 8.33.1 debug: 4.4.0 - eslint: 9.25.1(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -5122,12 +5471,21 @@ snapshots: '@typescript-eslint/types': 8.31.0 '@typescript-eslint/visitor-keys': 8.31.0 - '@typescript-eslint/type-utils@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/scope-manager@8.33.1': dependencies: - '@typescript-eslint/typescript-estree': 8.31.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/types': 8.33.1 + '@typescript-eslint/visitor-keys': 8.33.1 + + '@typescript-eslint/tsconfig-utils@8.33.1(typescript@5.8.3)': + dependencies: + typescript: 5.8.3 + + '@typescript-eslint/type-utils@8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.33.1(typescript@5.8.3) + '@typescript-eslint/utils': 8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) debug: 4.4.0 - eslint: 9.25.1(jiti@2.4.2) + eslint: 9.28.0(jiti@2.4.2) ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: @@ -5135,6 +5493,8 @@ snapshots: '@typescript-eslint/types@8.31.0': {} + '@typescript-eslint/types@8.33.1': {} + '@typescript-eslint/typescript-estree@8.31.0(typescript@5.8.3)': dependencies: '@typescript-eslint/types': 8.31.0 @@ -5149,13 +5509,40 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.33.1(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.5.1(eslint@9.25.1(jiti@2.4.2)) + '@typescript-eslint/project-service': 8.33.1(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.33.1(typescript@5.8.3) + '@typescript-eslint/types': 8.33.1 + '@typescript-eslint/visitor-keys': 8.33.1 + debug: 4.4.0 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.1 + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.31.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': + dependencies: + '@eslint-community/eslint-utils': 4.5.1(eslint@9.28.0(jiti@2.4.2)) '@typescript-eslint/scope-manager': 8.31.0 '@typescript-eslint/types': 8.31.0 '@typescript-eslint/typescript-estree': 8.31.0(typescript@5.8.3) - eslint: 9.25.1(jiti@2.4.2) + eslint: 9.28.0(jiti@2.4.2) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.33.1 + '@typescript-eslint/types': 8.33.1 + '@typescript-eslint/typescript-estree': 8.33.1(typescript@5.8.3) + eslint: 9.28.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -5165,65 +5552,66 @@ snapshots: '@typescript-eslint/types': 8.31.0 eslint-visitor-keys: 4.2.0 + '@typescript-eslint/visitor-keys@8.33.1': + dependencies: + '@typescript-eslint/types': 8.33.1 + eslint-visitor-keys: 4.2.0 + '@ungap/structured-clone@1.2.0': {} - '@unrs/resolver-binding-darwin-arm64@1.7.0': + '@unrs/resolver-binding-darwin-arm64@1.7.11': optional: true - '@unrs/resolver-binding-darwin-x64@1.7.0': + '@unrs/resolver-binding-darwin-x64@1.7.11': optional: true - '@unrs/resolver-binding-freebsd-x64@1.7.0': + '@unrs/resolver-binding-freebsd-x64@1.7.11': optional: true - '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.0': + '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.11': optional: true - '@unrs/resolver-binding-linux-arm-musleabihf@1.7.0': + '@unrs/resolver-binding-linux-arm-musleabihf@1.7.11': optional: true - '@unrs/resolver-binding-linux-arm64-gnu@1.7.0': + '@unrs/resolver-binding-linux-arm64-gnu@1.7.11': optional: true - '@unrs/resolver-binding-linux-arm64-musl@1.7.0': + '@unrs/resolver-binding-linux-arm64-musl@1.7.11': optional: true - '@unrs/resolver-binding-linux-ppc64-gnu@1.7.0': + '@unrs/resolver-binding-linux-ppc64-gnu@1.7.11': optional: true - '@unrs/resolver-binding-linux-riscv64-gnu@1.7.0': + '@unrs/resolver-binding-linux-riscv64-gnu@1.7.11': optional: true - '@unrs/resolver-binding-linux-riscv64-musl@1.7.0': + '@unrs/resolver-binding-linux-riscv64-musl@1.7.11': optional: true - '@unrs/resolver-binding-linux-s390x-gnu@1.7.0': + '@unrs/resolver-binding-linux-s390x-gnu@1.7.11': optional: true - '@unrs/resolver-binding-linux-x64-gnu@1.7.0': + '@unrs/resolver-binding-linux-x64-gnu@1.7.11': optional: true - '@unrs/resolver-binding-linux-x64-musl@1.7.0': + '@unrs/resolver-binding-linux-x64-musl@1.7.11': optional: true - '@unrs/resolver-binding-wasm32-wasi@1.7.0': + '@unrs/resolver-binding-wasm32-wasi@1.7.11': dependencies: - '@napi-rs/wasm-runtime': 0.2.9 + '@napi-rs/wasm-runtime': 0.2.10 optional: true - '@unrs/resolver-binding-win32-arm64-msvc@1.7.0': + '@unrs/resolver-binding-win32-arm64-msvc@1.7.11': optional: true - '@unrs/resolver-binding-win32-ia32-msvc@1.7.0': + '@unrs/resolver-binding-win32-ia32-msvc@1.7.11': optional: true - '@unrs/resolver-binding-win32-x64-msvc@1.7.0': + '@unrs/resolver-binding-win32-x64-msvc@1.7.11': 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 @@ -5233,43 +5621,44 @@ snapshots: publint: 0.3.9 semver: 7.7.1 - '@vitest/expect@3.1.2': + '@vitest/expect@3.2.2': dependencies: - '@vitest/spy': 3.1.2 - '@vitest/utils': 3.1.2 + '@types/chai': 5.2.2 + '@vitest/spy': 3.2.2 + '@vitest/utils': 3.2.2 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.2.2(vite@6.3.3(@types/node@22.15.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1))': dependencies: - '@vitest/spy': 3.1.2 + '@vitest/spy': 3.2.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.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1) - '@vitest/pretty-format@3.1.2': + '@vitest/pretty-format@3.2.2': dependencies: tinyrainbow: 2.0.0 - '@vitest/runner@3.1.2': + '@vitest/runner@3.2.2': dependencies: - '@vitest/utils': 3.1.2 + '@vitest/utils': 3.2.2 pathe: 2.0.3 - '@vitest/snapshot@3.1.2': + '@vitest/snapshot@3.2.2': dependencies: - '@vitest/pretty-format': 3.1.2 + '@vitest/pretty-format': 3.2.2 magic-string: 0.30.17 pathe: 2.0.3 - '@vitest/spy@3.1.2': + '@vitest/spy@3.2.2': dependencies: - tinyspy: 3.0.2 + tinyspy: 4.0.3 - '@vitest/utils@3.1.2': + '@vitest/utils@3.2.2': dependencies: - '@vitest/pretty-format': 3.1.2 + '@vitest/pretty-format': 3.2.2 loupe: 3.1.3 tinyrainbow: 2.0.0 @@ -5298,7 +5687,7 @@ snapshots: ansi-styles@6.2.1: {} - ansis@3.17.0: {} + ansis@4.1.0: {} argparse@2.0.1: {} @@ -5322,7 +5711,7 @@ snapshots: cosmiconfig: 7.1.0 resolve: 1.22.8 - babel-plugin-react-compiler@19.1.0-rc.1: + babel-plugin-react-compiler@19.1.0-rc.2: dependencies: '@babel/types': 7.27.0 @@ -5532,7 +5921,7 @@ snapshots: cssnano@7.0.6(postcss@8.5.3): dependencies: cssnano-preset-default: 7.0.6(postcss@8.5.3) - lilconfig: 3.1.2 + lilconfig: 3.1.3 postcss: 8.5.3 csso@5.0.5: @@ -5543,11 +5932,11 @@ snapshots: data-uri-to-buffer@4.0.1: {} - debug@3.2.7: + debug@4.4.0: dependencies: ms: 2.1.3 - debug@4.4.0: + debug@4.4.1: dependencies: ms: 2.1.3 @@ -5606,7 +5995,7 @@ snapshots: dependencies: is-arrayish: 0.2.1 - es-module-lexer@1.6.0: {} + es-module-lexer@1.7.0: {} esbuild@0.24.2: optionalDependencies: @@ -5692,66 +6081,97 @@ snapshots: '@esbuild/win32-ia32': 0.25.3 '@esbuild/win32-x64': 0.25.3 + esbuild@0.25.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.5 + '@esbuild/android-arm': 0.25.5 + '@esbuild/android-arm64': 0.25.5 + '@esbuild/android-x64': 0.25.5 + '@esbuild/darwin-arm64': 0.25.5 + '@esbuild/darwin-x64': 0.25.5 + '@esbuild/freebsd-arm64': 0.25.5 + '@esbuild/freebsd-x64': 0.25.5 + '@esbuild/linux-arm': 0.25.5 + '@esbuild/linux-arm64': 0.25.5 + '@esbuild/linux-ia32': 0.25.5 + '@esbuild/linux-loong64': 0.25.5 + '@esbuild/linux-mips64el': 0.25.5 + '@esbuild/linux-ppc64': 0.25.5 + '@esbuild/linux-riscv64': 0.25.5 + '@esbuild/linux-s390x': 0.25.5 + '@esbuild/linux-x64': 0.25.5 + '@esbuild/netbsd-arm64': 0.25.5 + '@esbuild/netbsd-x64': 0.25.5 + '@esbuild/openbsd-arm64': 0.25.5 + '@esbuild/openbsd-x64': 0.25.5 + '@esbuild/sunos-x64': 0.25.5 + '@esbuild/win32-arm64': 0.25.5 + '@esbuild/win32-ia32': 0.25.5 + '@esbuild/win32-x64': 0.25.5 + escalade@3.2.0: {} escape-string-regexp@4.0.0: {} - eslint-compat-utils@0.5.1(eslint@9.25.1(jiti@2.4.2)): + eslint-compat-utils@0.5.1(eslint@9.28.0(jiti@2.4.2)): dependencies: - eslint: 9.25.1(jiti@2.4.2) + eslint: 9.28.0(jiti@2.4.2) semver: 7.7.1 - eslint-import-resolver-node@0.3.9: + eslint-import-context@0.1.8(unrs-resolver@1.7.11): dependencies: - debug: 3.2.7 - is-core-module: 2.15.1 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color + get-tsconfig: 4.10.1 + stable-hash-x: 0.1.1 + optionalDependencies: + unrs-resolver: 1.7.11 - eslint-plugin-es-x@7.8.0(eslint@9.25.1(jiti@2.4.2)): + eslint-plugin-es-x@7.8.0(eslint@9.28.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.5.1(eslint@9.25.1(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.5.1(eslint@9.28.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 - eslint: 9.25.1(jiti@2.4.2) - eslint-compat-utils: 0.5.1(eslint@9.25.1(jiti@2.4.2)) + eslint: 9.28.0(jiti@2.4.2) + eslint-compat-utils: 0.5.1(eslint@9.28.0(jiti@2.4.2)) - eslint-plugin-import-x@4.11.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3): + eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2)): dependencies: - '@typescript-eslint/utils': 8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/types': 8.33.1 comment-parser: 1.4.1 - debug: 4.4.0 - eslint: 9.25.1(jiti@2.4.2) - eslint-import-resolver-node: 0.3.9 - get-tsconfig: 4.10.0 + debug: 4.4.1 + eslint: 9.28.0(jiti@2.4.2) + eslint-import-context: 0.1.8(unrs-resolver@1.7.11) is-glob: 4.0.3 minimatch: 10.0.1 - semver: 7.7.1 - stable-hash: 0.0.5 - tslib: 2.8.1 - unrs-resolver: 1.7.0 + semver: 7.7.2 + stable-hash-x: 0.1.1 + unrs-resolver: 1.7.11 + optionalDependencies: + '@typescript-eslint/utils': 8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) transitivePeerDependencies: - supports-color - - typescript - eslint-plugin-n@17.17.0(eslint@9.25.1(jiti@2.4.2)): + eslint-plugin-n@17.19.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3): dependencies: - '@eslint-community/eslint-utils': 4.5.1(eslint@9.25.1(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.5.1(eslint@9.28.0(jiti@2.4.2)) + '@typescript-eslint/utils': 8.31.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) enhanced-resolve: 5.17.1 - eslint: 9.25.1(jiti@2.4.2) - eslint-plugin-es-x: 7.8.0(eslint@9.25.1(jiti@2.4.2)) + eslint: 9.28.0(jiti@2.4.2) + eslint-plugin-es-x: 7.8.0(eslint@9.28.0(jiti@2.4.2)) get-tsconfig: 4.10.0 globals: 15.12.0 ignore: 5.3.2 minimatch: 9.0.5 semver: 7.7.1 + ts-declaration-location: 1.0.7(typescript@5.8.3) + transitivePeerDependencies: + - supports-color + - typescript - eslint-plugin-regexp@2.7.0(eslint@9.25.1(jiti@2.4.2)): + eslint-plugin-regexp@2.8.0(eslint@9.28.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.5.1(eslint@9.25.1(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.5.1(eslint@9.28.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 comment-parser: 1.4.1 - eslint: 9.25.1(jiti@2.4.2) + eslint: 9.28.0(jiti@2.4.2) jsdoc-type-pratt-parser: 4.0.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 @@ -5766,16 +6186,16 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.25.1(jiti@2.4.2): + eslint@9.28.0(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.5.1(eslint@9.25.1(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.5.1(eslint@9.28.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.20.0 '@eslint/config-helpers': 0.2.1 - '@eslint/core': 0.13.0 + '@eslint/core': 0.14.0 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.25.1 - '@eslint/plugin-kit': 0.2.8 + '@eslint/js': 9.28.0 + '@eslint/plugin-kit': 0.3.1 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.2 @@ -5955,17 +6375,17 @@ 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(react-router-dom@7.6.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.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(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) + react-router-dom: 7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + vite: 6.3.3(@types/node@22.15.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1) - 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(react-router-dom@7.6.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.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(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) + react-router-dom: 7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + vite: 6.3.3(@types/node@22.15.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1) gensync@1.0.0-beta.2: {} @@ -5979,6 +6399,10 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 + get-tsconfig@4.10.1: + dependencies: + resolve-pkg-maps: 1.0.0 + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -5993,7 +6417,7 @@ snapshots: globals@15.12.0: {} - globals@16.0.0: {} + globals@16.2.0: {} graceful-fs@4.2.11: {} @@ -6060,6 +6484,8 @@ snapshots: ignore@5.3.2: {} + ignore@7.0.5: {} + import-fresh@3.3.0: dependencies: parent-module: 1.0.1 @@ -6166,58 +6592,56 @@ 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.3 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 - - lilconfig@3.1.2: {} + 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.3: {} lines-and-columns@1.2.4: {} - lint-staged@15.5.1: + lint-staged@15.5.2: dependencies: chalk: 5.4.1 commander: 13.1.0 @@ -6641,7 +7065,7 @@ snapshots: nanoid@3.3.11: {} - napi-postinstall@0.1.6: {} + napi-postinstall@0.2.4: {} natural-compare@1.4.0: {} @@ -6982,7 +7406,7 @@ snapshots: queue-microtask@1.2.3: {} - react-compiler-runtime@19.1.0-rc.1(react@18.3.1): + react-compiler-runtime@19.1.0-rc.2(react@18.3.1): dependencies: react: 18.3.1 @@ -7003,18 +7427,17 @@ snapshots: react-refresh@0.17.0: {} - react-router-dom@7.5.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-router-dom@7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: react: 19.1.0 react-dom: 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-router: 7.6.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-router@7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: cookie: 1.0.2 react: 19.1.0 set-cookie-parser: 2.7.1 - turbo-stream: 2.4.0 optionalDependencies: react-dom: 19.1.0(react@19.1.0) @@ -7084,47 +7507,42 @@ 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@6.3.18(@types/node@22.15.30)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.19.4)(yaml@2.7.1): dependencies: - '@oxc-project/runtime': 0.66.0 + '@oxc-project/runtime': 0.72.2 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.2686eb1(@oxc-project/runtime@0.66.0)(typescript@5.8.3) + rolldown: 1.0.0-beta.11-commit.0a985f3 tinyglobby: 0.2.13 optionalDependencies: - '@types/node': 22.15.2 - esbuild: 0.25.3 + '@types/node': 22.15.30 + esbuild: 0.25.5 fsevents: 2.3.3 jiti: 2.4.2 - tsx: 4.19.3 + tsx: 4.19.4 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.11-commit.0a985f3: dependencies: - '@oxc-project/types': 0.66.0 - '@valibot/to-json-schema': 1.0.0(valibot@1.0.0(typescript@5.8.3)) - ansis: 3.17.0 - valibot: 1.0.0(typescript@5.8.3) + '@oxc-project/runtime': 0.72.2 + '@oxc-project/types': 0.72.2 + '@rolldown/pluginutils': 1.0.0-beta.11-commit.0a985f3 + ansis: 4.1.0 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 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.11-commit.0a985f3 + '@rolldown/binding-darwin-x64': 1.0.0-beta.11-commit.0a985f3 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.11-commit.0a985f3 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.11-commit.0a985f3 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.11-commit.0a985f3 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.11-commit.0a985f3 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.11-commit.0a985f3 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.11-commit.0a985f3 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.11-commit.0a985f3 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.11-commit.0a985f3 + '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.11-commit.0a985f3 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.11-commit.0a985f3 rollup-plugin-dts@6.2.1(rollup@4.37.0)(typescript@5.8.3): dependencies: @@ -7186,6 +7604,8 @@ snapshots: semver@7.7.1: {} + semver@7.7.2: {} + set-cookie-parser@2.7.1: {} shallowequal@1.1.0: {} @@ -7224,7 +7644,7 @@ snapshots: space-separated-tokens@2.0.2: {} - stable-hash@0.0.5: {} + stable-hash-x@0.1.1: {} stackback@0.0.2: {} @@ -7259,7 +7679,7 @@ snapshots: dependencies: inline-style-parser: 0.2.2 - styled-components@6.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + styled-components@6.1.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@emotion/is-prop-valid': 1.2.2 '@emotion/unitless': 0.8.1 @@ -7315,11 +7735,16 @@ snapshots: fdir: 6.4.4(picomatch@4.0.2) picomatch: 4.0.2 - tinypool@1.0.2: {} + tinyglobby@0.2.14: + dependencies: + fdir: 6.4.4(picomatch@4.0.2) + picomatch: 4.0.2 + + tinypool@1.1.0: {} tinyrainbow@2.0.0: {} - tinyspy@3.0.2: {} + tinyspy@4.0.3: {} to-regex-range@5.0.1: dependencies: @@ -7333,29 +7758,33 @@ snapshots: dependencies: typescript: 5.8.3 + ts-declaration-location@1.0.7(typescript@5.8.3): + dependencies: + picomatch: 4.0.2 + typescript: 5.8.3 + tslib@2.6.2: {} - tslib@2.8.1: {} + tslib@2.8.1: + optional: true - tsx@4.19.3: + tsx@4.19.4: dependencies: - esbuild: 0.25.3 + esbuild: 0.25.5 get-tsconfig: 4.10.0 optionalDependencies: fsevents: 2.3.3 - turbo-stream@2.4.0: {} - type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3): + typescript-eslint@8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.31.0(@typescript-eslint/parser@8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': 8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.31.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.25.1(jiti@2.4.2) + '@typescript-eslint/eslint-plugin': 8.33.1(@typescript-eslint/parser@8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.28.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -7443,27 +7872,27 @@ snapshots: universalify@2.0.1: {} - unrs-resolver@1.7.0: + unrs-resolver@1.7.11: dependencies: - napi-postinstall: 0.1.6 + napi-postinstall: 0.2.4 optionalDependencies: - '@unrs/resolver-binding-darwin-arm64': 1.7.0 - '@unrs/resolver-binding-darwin-x64': 1.7.0 - '@unrs/resolver-binding-freebsd-x64': 1.7.0 - '@unrs/resolver-binding-linux-arm-gnueabihf': 1.7.0 - '@unrs/resolver-binding-linux-arm-musleabihf': 1.7.0 - '@unrs/resolver-binding-linux-arm64-gnu': 1.7.0 - '@unrs/resolver-binding-linux-arm64-musl': 1.7.0 - '@unrs/resolver-binding-linux-ppc64-gnu': 1.7.0 - '@unrs/resolver-binding-linux-riscv64-gnu': 1.7.0 - '@unrs/resolver-binding-linux-riscv64-musl': 1.7.0 - '@unrs/resolver-binding-linux-s390x-gnu': 1.7.0 - '@unrs/resolver-binding-linux-x64-gnu': 1.7.0 - '@unrs/resolver-binding-linux-x64-musl': 1.7.0 - '@unrs/resolver-binding-wasm32-wasi': 1.7.0 - '@unrs/resolver-binding-win32-arm64-msvc': 1.7.0 - '@unrs/resolver-binding-win32-ia32-msvc': 1.7.0 - '@unrs/resolver-binding-win32-x64-msvc': 1.7.0 + '@unrs/resolver-binding-darwin-arm64': 1.7.11 + '@unrs/resolver-binding-darwin-x64': 1.7.11 + '@unrs/resolver-binding-freebsd-x64': 1.7.11 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.7.11 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.7.11 + '@unrs/resolver-binding-linux-arm64-gnu': 1.7.11 + '@unrs/resolver-binding-linux-arm64-musl': 1.7.11 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.7.11 + '@unrs/resolver-binding-linux-riscv64-gnu': 1.7.11 + '@unrs/resolver-binding-linux-riscv64-musl': 1.7.11 + '@unrs/resolver-binding-linux-s390x-gnu': 1.7.11 + '@unrs/resolver-binding-linux-x64-gnu': 1.7.11 + '@unrs/resolver-binding-linux-x64-musl': 1.7.11 + '@unrs/resolver-binding-wasm32-wasi': 1.7.11 + '@unrs/resolver-binding-win32-arm64-msvc': 1.7.11 + '@unrs/resolver-binding-win32-ia32-msvc': 1.7.11 + '@unrs/resolver-binding-win32-x64-msvc': 1.7.11 untyped@2.0.0: dependencies: @@ -7485,10 +7914,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 @@ -7500,13 +7925,13 @@ 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.2.2(@types/node@22.15.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1): dependencies: cac: 6.7.14 - debug: 4.4.0 - es-module-lexer: 1.6.0 + debug: 4.4.1 + es-module-lexer: 1.7.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: 6.3.3(@types/node@22.15.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1) transitivePeerDependencies: - '@types/node' - jiti @@ -7521,7 +7946,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.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1): dependencies: esbuild: 0.25.3 fdir: 6.4.4(picomatch@4.0.2) @@ -7530,39 +7955,41 @@ snapshots: rollup: 4.37.0 tinyglobby: 0.2.13 optionalDependencies: - '@types/node': 22.15.2 + '@types/node': 22.15.30 fsevents: 2.3.3 jiti: 2.4.2 - lightningcss: 1.29.3 - tsx: 4.19.3 + lightningcss: 1.30.1 + tsx: 4.19.4 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.2.2(@types/debug@4.1.12)(@types/node@22.15.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(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/pretty-format': 3.1.2 - '@vitest/runner': 3.1.2 - '@vitest/snapshot': 3.1.2 - '@vitest/spy': 3.1.2 - '@vitest/utils': 3.1.2 + '@types/chai': 5.2.2 + '@vitest/expect': 3.2.2 + '@vitest/mocker': 3.2.2(vite@6.3.3(@types/node@22.15.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1)) + '@vitest/pretty-format': 3.2.2 + '@vitest/runner': 3.2.2 + '@vitest/snapshot': 3.2.2 + '@vitest/spy': 3.2.2 + '@vitest/utils': 3.2.2 chai: 5.2.0 - debug: 4.4.0 + debug: 4.4.1 expect-type: 1.2.1 magic-string: 0.30.17 pathe: 2.0.3 + picomatch: 4.0.2 std-env: 3.9.0 tinybench: 2.9.0 tinyexec: 0.3.2 - tinyglobby: 0.2.13 - tinypool: 1.0.2 + tinyglobby: 0.2.14 + tinypool: 1.1.0 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: 6.3.3(@types/node@22.15.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1) + vite-node: 3.2.2(@types/node@22.15.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.15.2 + '@types/node': 22.15.30 transitivePeerDependencies: - jiti - less diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 230accad5..295c317a3 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -5,4 +5,4 @@ packages: catalogs: rolldown-vite: - vite: npm:rolldown-vite@^6.3.5 + vite: npm:rolldown-vite@^6.3.18 From 6ea939869526bf4b59e910e7393edbd35cac3f36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Barr=C3=A9?= Date: Sat, 7 Jun 2025 22:03:03 +0200 Subject: [PATCH 028/313] feat: add Vite 7-beta to peerDependencies range (#497) --- packages/plugin-react-oxc/CHANGELOG.md | 4 ++++ packages/plugin-react-oxc/package.json | 2 +- packages/plugin-react-swc/CHANGELOG.md | 4 ++++ packages/plugin-react-swc/package.json | 2 +- packages/plugin-react/CHANGELOG.md | 5 ++++- packages/plugin-react/package.json | 2 +- 6 files changed, 15 insertions(+), 4 deletions(-) diff --git a/packages/plugin-react-oxc/CHANGELOG.md b/packages/plugin-react-oxc/CHANGELOG.md index f9d56fd28..8f6cb1308 100644 --- a/packages/plugin-react-oxc/CHANGELOG.md +++ b/packages/plugin-react-oxc/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Add Vite 7-beta to peerDependencies range [#497](https://github.com/vitejs/vite-plugin-react/pull/497) + +React plugins are compatible with Vite 7, this removes the warning when testing the beta. + ## 0.2.1 (2025-06-03) ### Add explicit semicolon in preambleCode [#485](https://github.com/vitejs/vite-plugin-react/pull/485) diff --git a/packages/plugin-react-oxc/package.json b/packages/plugin-react-oxc/package.json index 81dfe341f..b17b97c16 100644 --- a/packages/plugin-react-oxc/package.json +++ b/packages/plugin-react-oxc/package.json @@ -40,7 +40,7 @@ }, "homepage": "https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react#readme", "peerDependencies": { - "vite": "^6.3.0" + "vite": "^6.3.0 || ^7.0.0-beta.0" }, "devDependencies": { "@vitejs/react-common": "workspace:*", diff --git a/packages/plugin-react-swc/CHANGELOG.md b/packages/plugin-react-swc/CHANGELOG.md index 456128748..c485c0e8b 100644 --- a/packages/plugin-react-swc/CHANGELOG.md +++ b/packages/plugin-react-swc/CHANGELOG.md @@ -10,6 +10,10 @@ Emit a log which recommends `@vitejs/plugin-react-oxc` when `rolldown-vite` is d This suppresses the warning about `optimizeDeps.esbuildOptions` being deprecated in rolldown-vite. +### Add Vite 7-beta to peerDependencies range [#497](https://github.com/vitejs/vite-plugin-react/pull/497) + +React plugins are compatible with Vite 7, this removes the warning when testing the beta. + ## 3.10.1 (2025-06-03) ### Add explicit semicolon in preambleCode [#485](https://github.com/vitejs/vite-plugin-react/pull/485) diff --git a/packages/plugin-react-swc/package.json b/packages/plugin-react-swc/package.json index 0b50b8739..62a738784 100644 --- a/packages/plugin-react-swc/package.json +++ b/packages/plugin-react-swc/package.json @@ -33,7 +33,7 @@ "@swc/core": "^1.11.31" }, "peerDependencies": { - "vite": "^4 || ^5 || ^6" + "vite": "^4 || ^5 || ^6 || ^7.0.0-beta.0" }, "devDependencies": { "@playwright/test": "^1.52.0", diff --git a/packages/plugin-react/CHANGELOG.md b/packages/plugin-react/CHANGELOG.md index f7d2e708a..9e520640c 100644 --- a/packages/plugin-react/CHANGELOG.md +++ b/packages/plugin-react/CHANGELOG.md @@ -6,11 +6,14 @@ Emit a log which recommends `@vitejs/plugin-react-oxc` when `rolldown-vite` is detected to improve performance and use Oxc under the hood. The warning can be disabled by setting `disableOxcRecommendation: false` in the plugin options. - ### Use `optimizeDeps.rollupOptions` instead of `optimizeDeps.esbuildOptions` for rolldown-vite [#489](https://github.com/vitejs/vite-plugin-react/pull/489) This suppresses the warning about `optimizeDeps.esbuildOptions` being deprecated in rolldown-vite. +### Add Vite 7-beta to peerDependencies range [#497](https://github.com/vitejs/vite-plugin-react/pull/497) + +React plugins are compatible with Vite 7, this removes the warning when testing the beta. + ## 4.5.1 (2025-06-03) ### Add explicit semicolon in preambleCode [#485](https://github.com/vitejs/vite-plugin-react/pull/485) diff --git a/packages/plugin-react/package.json b/packages/plugin-react/package.json index 0f8d8cdbf..34c11de87 100644 --- a/packages/plugin-react/package.json +++ b/packages/plugin-react/package.json @@ -56,7 +56,7 @@ "react-refresh": "^0.17.0" }, "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" }, "devDependencies": { "@vitejs/react-common": "workspace:*", From bfb45addb83ebae8feebdb75be2e07ce27e916cb Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Tue, 10 Jun 2025 10:26:34 +0900 Subject: [PATCH 029/313] release: plugin-react@4.5.2 --- packages/plugin-react/CHANGELOG.md | 2 ++ packages/plugin-react/package.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/plugin-react/CHANGELOG.md b/packages/plugin-react/CHANGELOG.md index 9e520640c..267cf41e8 100644 --- a/packages/plugin-react/CHANGELOG.md +++ b/packages/plugin-react/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +## 4.5.2 (2025-06-10) + ### Suggest `@vitejs/plugin-react-oxc` if rolldown-vite is detected [#491](https://github.com/vitejs/vite-plugin-react/pull/491) Emit a log which recommends `@vitejs/plugin-react-oxc` when `rolldown-vite` is detected to improve performance and use Oxc under the hood. The warning can be disabled by setting `disableOxcRecommendation: false` in the plugin options. diff --git a/packages/plugin-react/package.json b/packages/plugin-react/package.json index 34c11de87..1190f158b 100644 --- a/packages/plugin-react/package.json +++ b/packages/plugin-react/package.json @@ -1,6 +1,6 @@ { "name": "@vitejs/plugin-react", - "version": "4.5.1", + "version": "4.5.2", "license": "MIT", "author": "Evan You", "description": "The default Vite plugin for React projects", From 32d49ecf9b15e3070c7abe5a176252a3fe542e5c Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Tue, 10 Jun 2025 10:27:29 +0900 Subject: [PATCH 030/313] release: plugin-react-swc@3.10.2 --- packages/plugin-react-swc/CHANGELOG.md | 2 ++ packages/plugin-react-swc/package.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/plugin-react-swc/CHANGELOG.md b/packages/plugin-react-swc/CHANGELOG.md index c485c0e8b..77d0c70d6 100644 --- a/packages/plugin-react-swc/CHANGELOG.md +++ b/packages/plugin-react-swc/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +## 3.10.2 (2025-06-10) + ### Suggest `@vitejs/plugin-react-oxc` if rolldown-vite is detected [#491](https://github.com/vitejs/vite-plugin-react/pull/491) Emit a log which recommends `@vitejs/plugin-react-oxc` when `rolldown-vite` is detected to improve performance and use Oxc under the hood. The warning can be disabled by setting `disableOxcRecommendation: false` in the plugin options. diff --git a/packages/plugin-react-swc/package.json b/packages/plugin-react-swc/package.json index 62a738784..a3929e074 100644 --- a/packages/plugin-react-swc/package.json +++ b/packages/plugin-react-swc/package.json @@ -1,6 +1,6 @@ { "name": "@vitejs/plugin-react-swc", - "version": "3.10.1", + "version": "3.10.2", "license": "MIT", "author": "Arnaud Barré (https://github.com/ArnaudBarre)", "description": "Speed up your Vite dev server with SWC", From 8a91260480590c12753a5143ab2564cb76f6f51a Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Tue, 10 Jun 2025 10:28:00 +0900 Subject: [PATCH 031/313] release: plugin-react-oxc@0.2.2 --- packages/plugin-react-oxc/CHANGELOG.md | 2 ++ packages/plugin-react-oxc/package.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/plugin-react-oxc/CHANGELOG.md b/packages/plugin-react-oxc/CHANGELOG.md index 8f6cb1308..a9c99e8c8 100644 --- a/packages/plugin-react-oxc/CHANGELOG.md +++ b/packages/plugin-react-oxc/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +## 0.2.2 (2025-06-10) + ### Add Vite 7-beta to peerDependencies range [#497](https://github.com/vitejs/vite-plugin-react/pull/497) React plugins are compatible with Vite 7, this removes the warning when testing the beta. diff --git a/packages/plugin-react-oxc/package.json b/packages/plugin-react-oxc/package.json index b17b97c16..dd6ad7fc1 100644 --- a/packages/plugin-react-oxc/package.json +++ b/packages/plugin-react-oxc/package.json @@ -1,6 +1,6 @@ { "name": "@vitejs/plugin-react-oxc", - "version": "0.2.1", + "version": "0.2.2", "license": "MIT", "author": "Evan You", "contributors": [ 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 032/313] 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 033/313] 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 4951c905dc8a9ba667eb1d1d73f29070dc94c16e Mon Sep 17 00:00:00 2001 From: Daniel Rentz Date: Mon, 16 Jun 2025 03:28:57 +0200 Subject: [PATCH 034/313] docs: typo in CHANGELOG.md (#504) --- packages/plugin-react-swc/CHANGELOG.md | 2 +- packages/plugin-react/CHANGELOG.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/plugin-react-swc/CHANGELOG.md b/packages/plugin-react-swc/CHANGELOG.md index 77d0c70d6..20bfd9597 100644 --- a/packages/plugin-react-swc/CHANGELOG.md +++ b/packages/plugin-react-swc/CHANGELOG.md @@ -6,7 +6,7 @@ ### Suggest `@vitejs/plugin-react-oxc` if rolldown-vite is detected [#491](https://github.com/vitejs/vite-plugin-react/pull/491) -Emit a log which recommends `@vitejs/plugin-react-oxc` when `rolldown-vite` is detected to improve performance and use Oxc under the hood. The warning can be disabled by setting `disableOxcRecommendation: false` in the plugin options. +Emit a log which recommends `@vitejs/plugin-react-oxc` when `rolldown-vite` is detected to improve performance and use Oxc under the hood. The warning can be disabled by setting `disableOxcRecommendation: true` in the plugin options. ### Use `optimizeDeps.rollupOptions` instead of `optimizeDeps.esbuildOptions` for rolldown-vite [#489](https://github.com/vitejs/vite-plugin-react/pull/489) diff --git a/packages/plugin-react/CHANGELOG.md b/packages/plugin-react/CHANGELOG.md index 267cf41e8..cf9487266 100644 --- a/packages/plugin-react/CHANGELOG.md +++ b/packages/plugin-react/CHANGELOG.md @@ -6,7 +6,7 @@ ### Suggest `@vitejs/plugin-react-oxc` if rolldown-vite is detected [#491](https://github.com/vitejs/vite-plugin-react/pull/491) -Emit a log which recommends `@vitejs/plugin-react-oxc` when `rolldown-vite` is detected to improve performance and use Oxc under the hood. The warning can be disabled by setting `disableOxcRecommendation: false` in the plugin options. +Emit a log which recommends `@vitejs/plugin-react-oxc` when `rolldown-vite` is detected to improve performance and use Oxc under the hood. The warning can be disabled by setting `disableOxcRecommendation: true` in the plugin options. ### Use `optimizeDeps.rollupOptions` instead of `optimizeDeps.esbuildOptions` for rolldown-vite [#489](https://github.com/vitejs/vite-plugin-react/pull/489) From cee4b2558d87f0da81eff6dfb9e58518f0059254 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 16 Jun 2025 10:30:03 +0900 Subject: [PATCH 035/313] fix(oxc): disable refresh transform when `server.hmr: false` (#502) --- packages/plugin-react-oxc/src/index.ts | 18 ++++++++++++- .../hmr-false/__tests__/hmr-false.spec.ts | 8 ++++++ .../hmr-false/__tests__/oxc/hmr-false.spec.ts | 1 + playground/hmr-false/index.html | 2 ++ playground/hmr-false/package.json | 20 +++++++++++++++ playground/hmr-false/src/App.tsx | 13 ++++++++++ playground/hmr-false/src/main.tsx | 4 +++ playground/hmr-false/tsconfig.json | 25 +++++++++++++++++++ playground/hmr-false/vite.config.ts | 9 +++++++ pnpm-lock.yaml | 19 ++++++++++++++ 10 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 playground/hmr-false/__tests__/hmr-false.spec.ts create mode 100644 playground/hmr-false/__tests__/oxc/hmr-false.spec.ts create mode 100644 playground/hmr-false/index.html create mode 100644 playground/hmr-false/package.json create mode 100644 playground/hmr-false/src/App.tsx create mode 100644 playground/hmr-false/src/main.tsx create mode 100644 playground/hmr-false/tsconfig.json create mode 100644 playground/hmr-false/vite.config.ts diff --git a/packages/plugin-react-oxc/src/index.ts b/packages/plugin-react-oxc/src/index.ts index f234ad80d..a3caa574a 100644 --- a/packages/plugin-react-oxc/src/index.ts +++ b/packages/plugin-react-oxc/src/index.ts @@ -82,6 +82,22 @@ export default function viteReact(opts: Options = {}): PluginOption[] { }, } + const viteConfigPost: Plugin = { + name: 'vite:react-oxc:config-post', + enforce: 'post', + config(userConfig) { + if (userConfig.server?.hmr === false) { + return { + oxc: { + jsx: { + refresh: false, + }, + }, + } + } + }, + } + const viteRefreshRuntime: Plugin = { name: 'vite:react-oxc:refresh-runtime', enforce: 'pre', @@ -148,5 +164,5 @@ export default function viteReact(opts: Options = {}): PluginOption[] { }, } - return [viteConfig, viteRefreshRuntime, viteRefreshWrapper] + return [viteConfig, viteConfigPost, viteRefreshRuntime, viteRefreshWrapper] } diff --git a/playground/hmr-false/__tests__/hmr-false.spec.ts b/playground/hmr-false/__tests__/hmr-false.spec.ts new file mode 100644 index 000000000..0301085b2 --- /dev/null +++ b/playground/hmr-false/__tests__/hmr-false.spec.ts @@ -0,0 +1,8 @@ +import { expect, test } from 'vitest' +import { page } from '~utils' + +test('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') +}) diff --git a/playground/hmr-false/__tests__/oxc/hmr-false.spec.ts b/playground/hmr-false/__tests__/oxc/hmr-false.spec.ts new file mode 100644 index 000000000..57dff5bd9 --- /dev/null +++ b/playground/hmr-false/__tests__/oxc/hmr-false.spec.ts @@ -0,0 +1 @@ +import '../hmr-false.spec' diff --git a/playground/hmr-false/index.html b/playground/hmr-false/index.html new file mode 100644 index 000000000..fb1aeef55 --- /dev/null +++ b/playground/hmr-false/index.html @@ -0,0 +1,2 @@ +
+ diff --git a/playground/hmr-false/package.json b/playground/hmr-false/package.json new file mode 100644 index 000000000..378ff9ec1 --- /dev/null +++ b/playground/hmr-false/package.json @@ -0,0 +1,20 @@ +{ + "name": "@vitejs/test-react-hmr-false", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "debug": "node --inspect-brk vite", + "preview": "vite preview" + }, + "dependencies": { + "react": "^19.1.0", + "react-dom": "^19.1.0" + }, + "devDependencies": { + "@types/react": "^19.1.6", + "@types/react-dom": "^19.1.6", + "@vitejs/plugin-react": "workspace:*" + } +} diff --git a/playground/hmr-false/src/App.tsx b/playground/hmr-false/src/App.tsx new file mode 100644 index 000000000..367379e00 --- /dev/null +++ b/playground/hmr-false/src/App.tsx @@ -0,0 +1,13 @@ +import { useState } from 'react' + +export default function App() { + const [count, setCount] = useState(0) + + return ( + <> + + + ) +} diff --git a/playground/hmr-false/src/main.tsx b/playground/hmr-false/src/main.tsx new file mode 100644 index 000000000..056386a7d --- /dev/null +++ b/playground/hmr-false/src/main.tsx @@ -0,0 +1,4 @@ +import ReactDOM from 'react-dom/client' +import App from './App.jsx' + +ReactDOM.createRoot(document.getElementById('app')!).render() diff --git a/playground/hmr-false/tsconfig.json b/playground/hmr-false/tsconfig.json new file mode 100644 index 000000000..fac7d251f --- /dev/null +++ b/playground/hmr-false/tsconfig.json @@ -0,0 +1,25 @@ +{ + "include": ["src"], + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "types": ["vite/client"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + } +} diff --git a/playground/hmr-false/vite.config.ts b/playground/hmr-false/vite.config.ts new file mode 100644 index 000000000..7d42dfb35 --- /dev/null +++ b/playground/hmr-false/vite.config.ts @@ -0,0 +1,9 @@ +import react from '@vitejs/plugin-react' +import { defineConfig } from 'vite' + +export default defineConfig({ + server: { + hmr: false, + }, + plugins: [react()], +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 23e69bcbe..c4810ea23 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -521,6 +521,25 @@ importers: specifier: ^5.8.3 version: 5.8.3 + playground/hmr-false: + dependencies: + react: + specifier: ^19.1.0 + version: 19.1.0 + react-dom: + specifier: ^19.1.0 + version: 19.1.0(react@19.1.0) + devDependencies: + '@types/react': + specifier: ^19.1.6 + version: 19.1.6 + '@types/react-dom': + specifier: ^19.1.6 + version: 19.1.6(@types/react@19.1.6) + '@vitejs/plugin-react': + specifier: workspace:* + version: link:../../packages/plugin-react + playground/hook-with-jsx: dependencies: react: From 707f23cd8e1deb50ddcff263c4da7b6cee35168f Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Mon, 16 Jun 2025 10:37:44 +0900 Subject: [PATCH 036/313] docs: add changelog for #502 --- packages/plugin-react-oxc/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/plugin-react-oxc/CHANGELOG.md b/packages/plugin-react-oxc/CHANGELOG.md index a9c99e8c8..514d543d6 100644 --- a/packages/plugin-react-oxc/CHANGELOG.md +++ b/packages/plugin-react-oxc/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Disable refresh transform when `server.hmr: false` is set [#502](https://github.com/vitejs/vite-plugin-react/pull/502) + +This fixes "`$RefreshReg$` is not defined" error when running Vitest with the plugin. + ## 0.2.2 (2025-06-10) ### Add Vite 7-beta to peerDependencies range [#497](https://github.com/vitejs/vite-plugin-react/pull/497) From 0704fc0e613999155701c49c2971cce37ef2eb46 Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Mon, 16 Jun 2025 10:39:43 +0900 Subject: [PATCH 037/313] release: plugin-react-oxc@0.2.3 --- packages/plugin-react-oxc/CHANGELOG.md | 2 ++ packages/plugin-react-oxc/package.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/plugin-react-oxc/CHANGELOG.md b/packages/plugin-react-oxc/CHANGELOG.md index 514d543d6..7d9c4390c 100644 --- a/packages/plugin-react-oxc/CHANGELOG.md +++ b/packages/plugin-react-oxc/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +## 0.2.3 (2025-06-16) + ### Disable refresh transform when `server.hmr: false` is set [#502](https://github.com/vitejs/vite-plugin-react/pull/502) This fixes "`$RefreshReg$` is not defined" error when running Vitest with the plugin. diff --git a/packages/plugin-react-oxc/package.json b/packages/plugin-react-oxc/package.json index dd6ad7fc1..a3089993d 100644 --- a/packages/plugin-react-oxc/package.json +++ b/packages/plugin-react-oxc/package.json @@ -1,6 +1,6 @@ { "name": "@vitejs/plugin-react-oxc", - "version": "0.2.2", + "version": "0.2.3", "license": "MIT", "author": "Evan You", "contributors": [ From 7b6b7c522b16fd67975416f0ddc7a8674ccad6c7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 16 Jun 2025 10:58:00 +0900 Subject: [PATCH 038/313] chore(config): migrate renovate config (#507) --- .github/renovate.json5 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/renovate.json5 b/.github/renovate.json5 index c5e9bc814..8b4910a8c 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -1,12 +1,12 @@ { "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": ["config:base", "schedule:weekly", "group:allNonMajor"], + "extends": ["config:recommended", "schedule:weekly", "group:allNonMajor"], "labels": ["dependencies"], "ignorePaths": ["**/__tests__/**"], "rangeStrategy": "bump", "packageRules": [ { - "depTypeList": ["peerDependencies"], + "matchDepTypes": ["peerDependencies"], "enabled": false, }, { @@ -23,8 +23,8 @@ }, { "matchDepTypes": ["action"], - "excludePackagePrefixes": ["actions/", "github/"], "pinDigests": true, + "matchPackageNames": ["!actions/{/,}**", "!github/{/,}**"], }, ], "ignoreDeps": [ From bbd34e2777c56a87c53e03eca528d9ebd7356211 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0?= Date: Mon, 16 Jun 2025 12:43:26 +0900 Subject: [PATCH 039/313] chore: group swc updates by renovate including majors (#506) --- .github/renovate.json5 | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 8b4910a8c..0e68cbe1d 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -1,6 +1,11 @@ { "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": ["config:recommended", "schedule:weekly", "group:allNonMajor"], + "extends": [ + "config:recommended", + "schedule:weekly", + "group:allNonMajor", + "group:swcMonorepo", + ], "labels": ["dependencies"], "ignorePaths": ["**/__tests__/**"], "rangeStrategy": "bump", From 7f169144ecc3f8464ac3a0698dfb8efb9b6d2bf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0?= Date: Mon, 16 Jun 2025 14:05:54 +0900 Subject: [PATCH 040/313] chore: group swc updates by renovate including majors (#509) --- .github/renovate.json5 | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 0e68cbe1d..6f9063f6c 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -1,11 +1,6 @@ { "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": [ - "config:recommended", - "schedule:weekly", - "group:allNonMajor", - "group:swcMonorepo", - ], + "extends": ["config:recommended", "schedule:weekly", "group:allNonMajor"], "labels": ["dependencies"], "ignorePaths": ["**/__tests__/**"], "rangeStrategy": "bump", @@ -18,6 +13,12 @@ "matchFileNames": ["**/react-18/**", "**/compiler-react-18/**"], "ignoreDeps": ["react", "react-dom", "@types/react", "@types/react-dom"], }, + { + "extends": ["monorepo:swc"], + "groupName": "swc monorepo", + "matchUpdateTypes": ["patch", "minor", "major"], + "separateMajorMinor": false, + }, // renovate doesn't properly handle x.x.x-beta-hash-yyyymm version schema { "matchPackageNames": [ From 0a54a1a1f1a980412b99a40bbc569749f03d0914 Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Mon, 16 Jun 2025 14:14:36 +0900 Subject: [PATCH 041/313] chore: group swc updates by renovate including majors --- .github/renovate.json5 | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 6f9063f6c..94494bbd2 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -16,7 +16,6 @@ { "extends": ["monorepo:swc"], "groupName": "swc monorepo", - "matchUpdateTypes": ["patch", "minor", "major"], "separateMajorMinor": false, }, // renovate doesn't properly handle x.x.x-beta-hash-yyyymm version schema From e343cc2e9cc7abc5ef404fe8dd0eda0de46cb500 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 16 Jun 2025 15:00:08 +0900 Subject: [PATCH 042/313] fix(deps): update swc monorepo (#508) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/plugin-react-swc/package.json | 2 +- .../playground/emotion-plugin/package.json | 2 +- .../playground/styled-components/package.json | 2 +- pnpm-lock.yaml | 118 +++++++++--------- 4 files changed, 62 insertions(+), 62 deletions(-) diff --git a/packages/plugin-react-swc/package.json b/packages/plugin-react-swc/package.json index a3929e074..7627f1a4a 100644 --- a/packages/plugin-react-swc/package.json +++ b/packages/plugin-react-swc/package.json @@ -30,7 +30,7 @@ "homepage": "https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react-swc#readme", "dependencies": { "@rolldown/pluginutils": "1.0.0-beta.11", - "@swc/core": "^1.11.31" + "@swc/core": "^1.12.1" }, "peerDependencies": { "vite": "^4 || ^5 || ^6 || ^7.0.0-beta.0" diff --git a/packages/plugin-react-swc/playground/emotion-plugin/package.json b/packages/plugin-react-swc/playground/emotion-plugin/package.json index b4b60c152..fbcc0815a 100644 --- a/packages/plugin-react-swc/playground/emotion-plugin/package.json +++ b/packages/plugin-react-swc/playground/emotion-plugin/package.json @@ -17,6 +17,6 @@ "@types/react": "^19.1.6", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react-swc": "../../dist", - "@swc/plugin-emotion": "^9.0.4" + "@swc/plugin-emotion": "^10.0.0" } } diff --git a/packages/plugin-react-swc/playground/styled-components/package.json b/packages/plugin-react-swc/playground/styled-components/package.json index 2719ab5b8..da879c7b1 100644 --- a/packages/plugin-react-swc/playground/styled-components/package.json +++ b/packages/plugin-react-swc/playground/styled-components/package.json @@ -14,7 +14,7 @@ "styled-components": "^6.1.18" }, "devDependencies": { - "@swc/plugin-styled-components": "^7.1.5", + "@swc/plugin-styled-components": "^8.0.0", "@types/react": "^19.1.6", "@types/react-dom": "^19.1.6", "@types/styled-components": "^5.1.34", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c4810ea23..7ba4dbe09 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -133,8 +133,8 @@ importers: specifier: 1.0.0-beta.11 version: 1.0.0-beta.11 '@swc/core': - specifier: ^1.11.31 - version: 1.11.31 + specifier: ^1.12.1 + version: 1.12.1 devDependencies: '@playwright/test': specifier: ^1.52.0 @@ -265,8 +265,8 @@ importers: version: 19.1.0(react@19.1.0) devDependencies: '@swc/plugin-emotion': - specifier: ^9.0.4 - version: 9.0.4 + specifier: ^10.0.0 + version: 10.0.0 '@types/react': specifier: ^19.1.6 version: 19.1.6 @@ -372,8 +372,8 @@ importers: version: 6.1.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0) devDependencies: '@swc/plugin-styled-components': - specifier: ^7.1.5 - version: 7.1.5 + specifier: ^8.0.0 + version: 8.0.0 '@types/react': specifier: ^19.1.6 version: 19.1.6 @@ -1881,68 +1881,68 @@ packages: cpu: [x64] os: [win32] - '@swc/core-darwin-arm64@1.11.31': - resolution: {integrity: sha512-NTEaYOts0OGSbJZc0O74xsji+64JrF1stmBii6D5EevWEtrY4wlZhm8SiP/qPrOB+HqtAihxWIukWkP2aSdGSQ==} + '@swc/core-darwin-arm64@1.12.1': + resolution: {integrity: sha512-nUjWVcJ3YS2N40ZbKwYO2RJ4+o2tWYRzNOcIQp05FqW0+aoUCVMdAUUzQinPDynfgwVshDAXCKemY8X7nN5MaA==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.11.31': - resolution: {integrity: sha512-THSGaSwT96JwXDwuXQ6yFBbn+xDMdyw7OmBpnweAWsh5DhZmQkALEm1DgdQO3+rrE99MkmzwAfclc0UmYro/OA==} + '@swc/core-darwin-x64@1.12.1': + resolution: {integrity: sha512-OGm4a4d3OeJn+tRt8H/eiHgTFrJbS6r8mi/Ob65tAEXZGHN900T2kR7c5ALr0V2hBOQ8BfhexwPoQlGQP/B95w==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.11.31': - resolution: {integrity: sha512-laKtQFnW7KHgE57Hx32os2SNAogcuIDxYE+3DYIOmDMqD7/1DCfJe6Rln2N9WcOw6HuDbDpyQavIwZNfSAa8vQ==} + '@swc/core-linux-arm-gnueabihf@1.12.1': + resolution: {integrity: sha512-76YeeQKyK0EtNkQiNBZ0nbVGooPf9IucY0WqVXVpaU4wuG7ZyLEE2ZAIgXafIuzODGQoLfetue7I8boMxh1/MA==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.11.31': - resolution: {integrity: sha512-T+vGw9aPE1YVyRxRr1n7NAdkbgzBzrXCCJ95xAZc/0+WUwmL77Z+js0J5v1KKTRxw4FvrslNCOXzMWrSLdwPSA==} + '@swc/core-linux-arm64-gnu@1.12.1': + resolution: {integrity: sha512-BxJDIJPq1+aCh9UsaSAN6wo3tuln8UhNXruOrzTI8/ElIig/3sAueDM6Eq7GvZSGGSA7ljhNATMJ0elD7lFatQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.11.31': - resolution: {integrity: sha512-Mztp5NZkyd5MrOAG+kl+QSn0lL4Uawd4CK4J7wm97Hs44N9DHGIG5nOz7Qve1KZo407Y25lTxi/PqzPKHo61zQ==} + '@swc/core-linux-arm64-musl@1.12.1': + resolution: {integrity: sha512-NhLdbffSXvY0/FwUSAl4hKBlpe5GHQGXK8DxTo3HHjLsD9sCPYieo3vG0NQoUYAy4ZUY1WeGjyxeq4qZddJzEQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.11.31': - resolution: {integrity: sha512-DDVE0LZcXOWwOqFU1Xi7gdtiUg3FHA0vbGb3trjWCuI1ZtDZHEQYL4M3/2FjqKZtIwASrDvO96w91okZbXhvMg==} + '@swc/core-linux-x64-gnu@1.12.1': + resolution: {integrity: sha512-CrYnV8SZIgArQ9LKH0xEF95PKXzX9WkRSc5j55arOSBeDCeDUQk1Bg/iKdnDiuj5HC1hZpvzwMzSBJjv+Z70jA==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.11.31': - resolution: {integrity: sha512-mJA1MzPPRIfaBUHZi0xJQ4vwL09MNWDeFtxXb0r4Yzpf0v5Lue9ymumcBPmw/h6TKWms+Non4+TDquAsweuKSw==} + '@swc/core-linux-x64-musl@1.12.1': + resolution: {integrity: sha512-BQMl3d0HaGB0/h2xcKlGtjk/cGRn2tnbsaChAKcjFdCepblKBCz1pgO/mL7w5iXq3s57wMDUn++71/a5RAkZOA==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.11.31': - resolution: {integrity: sha512-RdtakUkNVAb/FFIMw3LnfNdlH1/ep6KgiPDRlmyUfd0WdIQ3OACmeBegEFNFTzi7gEuzy2Yxg4LWf4IUVk8/bg==} + '@swc/core-win32-arm64-msvc@1.12.1': + resolution: {integrity: sha512-b7NeGnpqTfmIGtUqXBl0KqoSmOnH64nRZoT5l4BAGdvwY7nxitWR94CqZuwyLPty/bLywmyDA9uO12Kvgb3+gg==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.11.31': - resolution: {integrity: sha512-hErXdCGsg7swWdG1fossuL8542I59xV+all751mYlBoZ8kOghLSKObGQTkBbuNvc0sUKWfWg1X0iBuIhAYar+w==} + '@swc/core-win32-ia32-msvc@1.12.1': + resolution: {integrity: sha512-iU/29X2D7cHBp1to62cUg/5Xk8K+lyOJiKIGGW5rdzTW/c2zz3d/ehgpzVP/rqC4NVr88MXspqHU4il5gmDajw==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.11.31': - resolution: {integrity: sha512-5t7SGjUBMMhF9b5j17ml/f/498kiBJNf4vZFNM421UGUEETdtjPN9jZIuQrowBkoFGJTCVL/ECM4YRtTH30u/A==} + '@swc/core-win32-x64-msvc@1.12.1': + resolution: {integrity: sha512-+Zh+JKDwiFqV5N9yAd2DhYVGPORGh9cfenu1ptr9yge+eHAf7vZJcC3rnj6QMR1QJh0Y5VC9+YBjRFjZVA7XDw==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.11.31': - resolution: {integrity: sha512-mAby9aUnKRjMEA7v8cVZS9Ah4duoRBnX7X6r5qrhTxErx+68MoY1TPrVwj/66/SWN3Bl+jijqAqoB8Qx0QE34A==} + '@swc/core@1.12.1': + resolution: {integrity: sha512-aKXdDTqxTVFl/bKQZ3EQUjEMBEoF6JBv29moMZq0kbVO43na6u/u+3Vcbhbrh+A2N0X5OL4RaveuWfAjEgOmeA==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '>=0.5.17' @@ -1953,14 +1953,14 @@ packages: '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - '@swc/plugin-emotion@9.0.4': - resolution: {integrity: sha512-kqdJmrZ6DRBeA8ZNOZJiDOpGlavFb+CwSCkPKuvvQ8f8TDTbzKj0kIs8AIHa3PisxvJHp91yE/6eBVIPppFmZw==} + '@swc/plugin-emotion@10.0.0': + resolution: {integrity: sha512-xyfWcxgoVWkSw2O1tdY0EGpdtdSn+gsf8t7KlZPy1W3FR5YiWEo0ynS4Nhmf60ID6HcgJyaiZghtwiRPKWAqqw==} - '@swc/plugin-styled-components@7.1.5': - resolution: {integrity: sha512-7egPoZG24nwMXp042Taux58dEdto6fLsUSW0IPPbJ0/HNVW+TLjosndGggHs68zoTR+ddWjGEW7H0u10/Y6GYw==} + '@swc/plugin-styled-components@8.0.0': + resolution: {integrity: sha512-5FD2is0JZJbseUD4Nv1wbYCNWOa7+j34FfXX1yACpoxiguNSph1JYH41QPcbbu73EECw7TD480r8JFr7MVE65A==} - '@swc/types@0.1.21': - resolution: {integrity: sha512-2YEtj5HJVbKivud9N4bpPBAyZhj4S2Ipe5LkUG94alTpr7in/GU/EARgPAd3BwU+YOmFVJC2+kjqhGRi3r0ZpQ==} + '@swc/types@0.1.23': + resolution: {integrity: sha512-u1iIVZV9Q0jxY+yM2vw/hZGDNudsN85bBpTqzAQ9rzkxW9D+e3aEM4Han+ow518gSewkXgjmEK0BD79ZcNVgPw==} '@trysound/sax@0.2.0': resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} @@ -5270,63 +5270,63 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.37.0': optional: true - '@swc/core-darwin-arm64@1.11.31': + '@swc/core-darwin-arm64@1.12.1': optional: true - '@swc/core-darwin-x64@1.11.31': + '@swc/core-darwin-x64@1.12.1': optional: true - '@swc/core-linux-arm-gnueabihf@1.11.31': + '@swc/core-linux-arm-gnueabihf@1.12.1': optional: true - '@swc/core-linux-arm64-gnu@1.11.31': + '@swc/core-linux-arm64-gnu@1.12.1': optional: true - '@swc/core-linux-arm64-musl@1.11.31': + '@swc/core-linux-arm64-musl@1.12.1': optional: true - '@swc/core-linux-x64-gnu@1.11.31': + '@swc/core-linux-x64-gnu@1.12.1': optional: true - '@swc/core-linux-x64-musl@1.11.31': + '@swc/core-linux-x64-musl@1.12.1': optional: true - '@swc/core-win32-arm64-msvc@1.11.31': + '@swc/core-win32-arm64-msvc@1.12.1': optional: true - '@swc/core-win32-ia32-msvc@1.11.31': + '@swc/core-win32-ia32-msvc@1.12.1': optional: true - '@swc/core-win32-x64-msvc@1.11.31': + '@swc/core-win32-x64-msvc@1.12.1': optional: true - '@swc/core@1.11.31': + '@swc/core@1.12.1': dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.21 + '@swc/types': 0.1.23 optionalDependencies: - '@swc/core-darwin-arm64': 1.11.31 - '@swc/core-darwin-x64': 1.11.31 - '@swc/core-linux-arm-gnueabihf': 1.11.31 - '@swc/core-linux-arm64-gnu': 1.11.31 - '@swc/core-linux-arm64-musl': 1.11.31 - '@swc/core-linux-x64-gnu': 1.11.31 - '@swc/core-linux-x64-musl': 1.11.31 - '@swc/core-win32-arm64-msvc': 1.11.31 - '@swc/core-win32-ia32-msvc': 1.11.31 - '@swc/core-win32-x64-msvc': 1.11.31 + '@swc/core-darwin-arm64': 1.12.1 + '@swc/core-darwin-x64': 1.12.1 + '@swc/core-linux-arm-gnueabihf': 1.12.1 + '@swc/core-linux-arm64-gnu': 1.12.1 + '@swc/core-linux-arm64-musl': 1.12.1 + '@swc/core-linux-x64-gnu': 1.12.1 + '@swc/core-linux-x64-musl': 1.12.1 + '@swc/core-win32-arm64-msvc': 1.12.1 + '@swc/core-win32-ia32-msvc': 1.12.1 + '@swc/core-win32-x64-msvc': 1.12.1 '@swc/counter@0.1.3': {} - '@swc/plugin-emotion@9.0.4': + '@swc/plugin-emotion@10.0.0': dependencies: '@swc/counter': 0.1.3 - '@swc/plugin-styled-components@7.1.5': + '@swc/plugin-styled-components@8.0.0': dependencies: '@swc/counter': 0.1.3 - '@swc/types@0.1.21': + '@swc/types@0.1.23': dependencies: '@swc/counter': 0.1.3 From dd5bd78b4b4ae75e28251075efd8611847c1a412 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 16 Jun 2025 15:13:35 +0900 Subject: [PATCH 043/313] fix(deps): update all non-major dependencies (#498) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 22 +- packages/plugin-react-oxc/package.json | 2 +- packages/plugin-react-swc/package.json | 6 +- .../playground/base-path/package.json | 2 +- .../playground/class-components/package.json | 2 +- .../playground/decorators/package.json | 2 +- .../playground/emotion-plugin/package.json | 2 +- .../playground/emotion/package.json | 2 +- .../playground/hmr/package.json | 2 +- .../playground/mdx/package.json | 2 +- .../playground/shadow-export/package.json | 2 +- .../playground/styled-components/package.json | 4 +- .../playground/ts-lib/package.json | 2 +- .../playground/worker/package.json | 2 +- packages/plugin-react/package.json | 2 +- playground/class-components/package.json | 2 +- playground/compiler/package.json | 2 +- playground/hmr-false/package.json | 2 +- playground/hook-with-jsx/package.json | 2 +- playground/mdx/package.json | 2 +- pnpm-lock.yaml | 1057 +++++++++-------- pnpm-workspace.yaml | 2 +- 22 files changed, 596 insertions(+), 529 deletions(-) diff --git a/package.json b/package.json index 4bc7d7511..4212c944f 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "engines": { "node": "^14.18.0 || >=16.0.0" }, - "packageManager": "pnpm@10.11.1", + "packageManager": "pnpm@10.12.1", "homepage": "https://github.com/vitejs/vite-plugin-react/", "keywords": [ "frontend", @@ -32,26 +32,26 @@ "ci-publish": "tsx scripts/publishCI.ts" }, "devDependencies": { - "@eslint/js": "^9.28.0", + "@eslint/js": "^9.29.0", "@types/fs-extra": "^11.0.4", - "@types/node": "^22.15.30", + "@types/node": "^22.15.31", "@vitejs/release-scripts": "^1.5.0", - "eslint": "^9.28.0", - "eslint-plugin-import-x": "^4.15.1", - "eslint-plugin-n": "^17.19.0", - "eslint-plugin-regexp": "^2.8.0", + "eslint": "^9.29.0", + "eslint-plugin-import-x": "^4.15.2", + "eslint-plugin-n": "^17.20.0", + "eslint-plugin-regexp": "^2.9.0", "fs-extra": "^11.3.0", "globals": "^16.2.0", "lint-staged": "^15.5.2", "picocolors": "^1.1.1", - "playwright-chromium": "^1.52.0", + "playwright-chromium": "^1.53.0", "prettier": "^3.0.3", "simple-git-hooks": "^2.13.0", - "tsx": "^4.19.4", + "tsx": "^4.20.3", "typescript": "^5.8.3", - "typescript-eslint": "^8.33.1", + "typescript-eslint": "^8.34.0", "vite": "^6.3.3", - "vitest": "^3.2.2" + "vitest": "^3.2.3" }, "simple-git-hooks": { "pre-commit": "pnpm exec lint-staged --concurrent false" diff --git a/packages/plugin-react-oxc/package.json b/packages/plugin-react-oxc/package.json index a3089993d..88b09c1f1 100644 --- a/packages/plugin-react-oxc/package.json +++ b/packages/plugin-react-oxc/package.json @@ -48,6 +48,6 @@ "vite": "catalog:rolldown-vite" }, "dependencies": { - "@rolldown/pluginutils": "1.0.0-beta.11" + "@rolldown/pluginutils": "1.0.0-beta.16" } } diff --git a/packages/plugin-react-swc/package.json b/packages/plugin-react-swc/package.json index 7627f1a4a..760bb7235 100644 --- a/packages/plugin-react-swc/package.json +++ b/packages/plugin-react-swc/package.json @@ -29,16 +29,16 @@ }, "homepage": "https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react-swc#readme", "dependencies": { - "@rolldown/pluginutils": "1.0.0-beta.11", + "@rolldown/pluginutils": "1.0.0-beta.16", "@swc/core": "^1.12.1" }, "peerDependencies": { "vite": "^4 || ^5 || ^6 || ^7.0.0-beta.0" }, "devDependencies": { - "@playwright/test": "^1.52.0", + "@playwright/test": "^1.53.0", "@types/fs-extra": "^11.0.4", - "@types/node": "^22.15.30", + "@types/node": "^22.15.31", "@vitejs/react-common": "workspace:*", "esbuild": "^0.25.5", "fs-extra": "^11.3.0", diff --git a/packages/plugin-react-swc/playground/base-path/package.json b/packages/plugin-react-swc/playground/base-path/package.json index dd48ddc83..9be36412d 100644 --- a/packages/plugin-react-swc/playground/base-path/package.json +++ b/packages/plugin-react-swc/playground/base-path/package.json @@ -12,7 +12,7 @@ "react-dom": "^19.1.0" }, "devDependencies": { - "@types/react": "^19.1.6", + "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react-swc": "../../dist" } diff --git a/packages/plugin-react-swc/playground/class-components/package.json b/packages/plugin-react-swc/playground/class-components/package.json index 16dcee59c..bd6956ebd 100644 --- a/packages/plugin-react-swc/playground/class-components/package.json +++ b/packages/plugin-react-swc/playground/class-components/package.json @@ -12,7 +12,7 @@ "react-dom": "^19.1.0" }, "devDependencies": { - "@types/react": "^19.1.6", + "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react-swc": "../../dist" } diff --git a/packages/plugin-react-swc/playground/decorators/package.json b/packages/plugin-react-swc/playground/decorators/package.json index f8e0deef0..7b7f9d74c 100644 --- a/packages/plugin-react-swc/playground/decorators/package.json +++ b/packages/plugin-react-swc/playground/decorators/package.json @@ -12,7 +12,7 @@ "react-dom": "^19.1.0" }, "devDependencies": { - "@types/react": "^19.1.6", + "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react-swc": "../../dist" } diff --git a/packages/plugin-react-swc/playground/emotion-plugin/package.json b/packages/plugin-react-swc/playground/emotion-plugin/package.json index fbcc0815a..2a23b4ec0 100644 --- a/packages/plugin-react-swc/playground/emotion-plugin/package.json +++ b/packages/plugin-react-swc/playground/emotion-plugin/package.json @@ -14,7 +14,7 @@ "react-dom": "^19.1.0" }, "devDependencies": { - "@types/react": "^19.1.6", + "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react-swc": "../../dist", "@swc/plugin-emotion": "^10.0.0" diff --git a/packages/plugin-react-swc/playground/emotion/package.json b/packages/plugin-react-swc/playground/emotion/package.json index 3de6b62e1..d04934b2a 100644 --- a/packages/plugin-react-swc/playground/emotion/package.json +++ b/packages/plugin-react-swc/playground/emotion/package.json @@ -14,7 +14,7 @@ "react-dom": "^19.1.0" }, "devDependencies": { - "@types/react": "^19.1.6", + "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react-swc": "../../dist" } diff --git a/packages/plugin-react-swc/playground/hmr/package.json b/packages/plugin-react-swc/playground/hmr/package.json index c4d580755..0466f7d05 100644 --- a/packages/plugin-react-swc/playground/hmr/package.json +++ b/packages/plugin-react-swc/playground/hmr/package.json @@ -12,7 +12,7 @@ "react-dom": "^19.1.0" }, "devDependencies": { - "@types/react": "^19.1.6", + "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react-swc": "../../dist" } diff --git a/packages/plugin-react-swc/playground/mdx/package.json b/packages/plugin-react-swc/playground/mdx/package.json index ccd783a21..b468958ff 100644 --- a/packages/plugin-react-swc/playground/mdx/package.json +++ b/packages/plugin-react-swc/playground/mdx/package.json @@ -13,7 +13,7 @@ }, "devDependencies": { "@mdx-js/rollup": "^3.1.0", - "@types/react": "^19.1.6", + "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react-swc": "../../dist" } diff --git a/packages/plugin-react-swc/playground/shadow-export/package.json b/packages/plugin-react-swc/playground/shadow-export/package.json index 052ec39d9..60f0e552a 100644 --- a/packages/plugin-react-swc/playground/shadow-export/package.json +++ b/packages/plugin-react-swc/playground/shadow-export/package.json @@ -12,7 +12,7 @@ "react-dom": "^19.1.0" }, "devDependencies": { - "@types/react": "^19.1.6", + "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react-swc": "../../dist" } diff --git a/packages/plugin-react-swc/playground/styled-components/package.json b/packages/plugin-react-swc/playground/styled-components/package.json index da879c7b1..32223c91d 100644 --- a/packages/plugin-react-swc/playground/styled-components/package.json +++ b/packages/plugin-react-swc/playground/styled-components/package.json @@ -11,11 +11,11 @@ "react": "^19.1.0", "react-dom": "^19.1.0", "react-is": "^19.1.0", - "styled-components": "^6.1.18" + "styled-components": "^6.1.19" }, "devDependencies": { "@swc/plugin-styled-components": "^8.0.0", - "@types/react": "^19.1.6", + "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@types/styled-components": "^5.1.34", "@vitejs/plugin-react-swc": "../../dist" diff --git a/packages/plugin-react-swc/playground/ts-lib/package.json b/packages/plugin-react-swc/playground/ts-lib/package.json index ad45d64c8..22d2e4f21 100644 --- a/packages/plugin-react-swc/playground/ts-lib/package.json +++ b/packages/plugin-react-swc/playground/ts-lib/package.json @@ -15,7 +15,7 @@ "react-router-dom": "^7.6.2" }, "devDependencies": { - "@types/react": "^19.1.6", + "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react-swc": "../../dist" } diff --git a/packages/plugin-react-swc/playground/worker/package.json b/packages/plugin-react-swc/playground/worker/package.json index 26e1a33dd..fae57dcb2 100644 --- a/packages/plugin-react-swc/playground/worker/package.json +++ b/packages/plugin-react-swc/playground/worker/package.json @@ -12,7 +12,7 @@ "react-dom": "^19.1.0" }, "devDependencies": { - "@types/react": "^19.1.6", + "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react-swc": "../../dist" } diff --git a/packages/plugin-react/package.json b/packages/plugin-react/package.json index 1190f158b..e0363abed 100644 --- a/packages/plugin-react/package.json +++ b/packages/plugin-react/package.json @@ -51,7 +51,7 @@ "@babel/core": "^7.27.4", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", - "@rolldown/pluginutils": "1.0.0-beta.11", + "@rolldown/pluginutils": "1.0.0-beta.16", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, diff --git a/playground/class-components/package.json b/playground/class-components/package.json index a7921db4f..6a4e5cf23 100644 --- a/playground/class-components/package.json +++ b/playground/class-components/package.json @@ -12,7 +12,7 @@ "react-dom": "^19.1.0" }, "devDependencies": { - "@types/react": "^19.1.6", + "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "workspace:*" } diff --git a/playground/compiler/package.json b/playground/compiler/package.json index f62ffcdde..ef1816475 100644 --- a/playground/compiler/package.json +++ b/playground/compiler/package.json @@ -13,7 +13,7 @@ }, "devDependencies": { "@babel/plugin-transform-react-jsx-development": "^7.27.1", - "@types/react": "^19.1.6", + "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "workspace:*", "babel-plugin-react-compiler": "19.1.0-rc.2", diff --git a/playground/hmr-false/package.json b/playground/hmr-false/package.json index 378ff9ec1..4fa2e178b 100644 --- a/playground/hmr-false/package.json +++ b/playground/hmr-false/package.json @@ -13,7 +13,7 @@ "react-dom": "^19.1.0" }, "devDependencies": { - "@types/react": "^19.1.6", + "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "workspace:*" } diff --git a/playground/hook-with-jsx/package.json b/playground/hook-with-jsx/package.json index b3daad23f..9cd325011 100644 --- a/playground/hook-with-jsx/package.json +++ b/playground/hook-with-jsx/package.json @@ -12,7 +12,7 @@ "react-dom": "^19.1.0" }, "devDependencies": { - "@types/react": "^19.1.6", + "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "workspace:*" } diff --git a/playground/mdx/package.json b/playground/mdx/package.json index f8984a355..ead34e015 100644 --- a/playground/mdx/package.json +++ b/playground/mdx/package.json @@ -13,7 +13,7 @@ }, "devDependencies": { "@mdx-js/rollup": "^3.1.0", - "@types/react": "^19.1.6", + "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "workspace:*" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7ba4dbe09..0efa5f3ac 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,8 +7,8 @@ settings: catalogs: rolldown-vite: vite: - specifier: npm:rolldown-vite@^6.3.18 - version: 6.3.18 + specifier: npm:rolldown-vite@^6.3.19 + version: 6.3.19 packageExtensionsChecksum: sha256-S82yCctxnlOTNFuHWCyTFRo/B6Y3jque/4DnsDO4WZA= @@ -17,29 +17,29 @@ importers: .: devDependencies: '@eslint/js': - specifier: ^9.28.0 - version: 9.28.0 + specifier: ^9.29.0 + version: 9.29.0 '@types/fs-extra': specifier: ^11.0.4 version: 11.0.4 '@types/node': - specifier: ^22.15.30 - version: 22.15.30 + specifier: ^22.15.31 + version: 22.15.31 '@vitejs/release-scripts': specifier: ^1.5.0 version: 1.5.0 eslint: - specifier: ^9.28.0 - version: 9.28.0(jiti@2.4.2) + specifier: ^9.29.0 + version: 9.29.0(jiti@2.4.2) eslint-plugin-import-x: - specifier: ^4.15.1 - version: 4.15.1(@typescript-eslint/utils@8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2)) + specifier: ^4.15.2 + version: 4.15.2(@typescript-eslint/utils@8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2)) eslint-plugin-n: - specifier: ^17.19.0 - version: 17.19.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + specifier: ^17.20.0 + version: 17.20.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) eslint-plugin-regexp: - specifier: ^2.8.0 - version: 2.8.0(eslint@9.28.0(jiti@2.4.2)) + specifier: ^2.9.0 + version: 2.9.0(eslint@9.29.0(jiti@2.4.2)) fs-extra: specifier: ^11.3.0 version: 11.3.0 @@ -53,8 +53,8 @@ importers: specifier: ^1.1.1 version: 1.1.1 playwright-chromium: - specifier: ^1.52.0 - version: 1.52.0 + specifier: ^1.53.0 + version: 1.53.0 prettier: specifier: ^3.0.3 version: 3.1.0 @@ -62,26 +62,26 @@ importers: specifier: ^2.13.0 version: 2.13.0 tsx: - specifier: ^4.19.4 - version: 4.19.4 + specifier: ^4.20.3 + version: 4.20.3 typescript: specifier: ^5.8.3 version: 5.8.3 typescript-eslint: - specifier: ^8.33.1 - version: 8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + specifier: ^8.34.0 + version: 8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) vite: specifier: ^6.3.3 - version: 6.3.3(@types/node@22.15.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1) + version: 6.3.3(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vitest: - specifier: ^3.2.2 - version: 3.2.2(@types/debug@4.1.12)(@types/node@22.15.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1) + specifier: ^3.2.3 + version: 3.2.3(@types/debug@4.1.12)(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) packages/common: devDependencies: vite: specifier: ^6.3.3 - version: 6.3.3(@types/node@22.15.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1) + version: 6.3.3(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) packages/plugin-react: dependencies: @@ -95,8 +95,8 @@ importers: specifier: ^7.27.1 version: 7.27.1(@babel/core@7.27.4) '@rolldown/pluginutils': - specifier: 1.0.0-beta.11 - version: 1.0.0-beta.11 + specifier: 1.0.0-beta.16 + version: 1.0.0-beta.16 '@types/babel__core': specifier: ^7.20.5 version: 7.20.5 @@ -114,8 +114,8 @@ importers: packages/plugin-react-oxc: dependencies: '@rolldown/pluginutils': - specifier: 1.0.0-beta.11 - version: 1.0.0-beta.11 + specifier: 1.0.0-beta.16 + version: 1.0.0-beta.16 devDependencies: '@vitejs/react-common': specifier: workspace:* @@ -125,26 +125,26 @@ importers: version: 3.5.0(typescript@5.8.3) vite: specifier: catalog:rolldown-vite - version: rolldown-vite@6.3.18(@types/node@22.15.30)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.19.4)(yaml@2.7.1) + version: rolldown-vite@6.3.19(@types/node@22.15.31)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1) packages/plugin-react-swc: dependencies: '@rolldown/pluginutils': - specifier: 1.0.0-beta.11 - version: 1.0.0-beta.11 + specifier: 1.0.0-beta.16 + version: 1.0.0-beta.16 '@swc/core': specifier: ^1.12.1 version: 1.12.1 devDependencies: '@playwright/test': - specifier: ^1.52.0 - version: 1.52.0 + specifier: ^1.53.0 + version: 1.53.0 '@types/fs-extra': specifier: ^11.0.4 version: 11.0.4 '@types/node': - specifier: ^22.15.30 - version: 22.15.30 + specifier: ^22.15.31 + version: 22.15.31 '@vitejs/react-common': specifier: workspace:* version: link:../common @@ -165,7 +165,7 @@ importers: version: 5.8.3 vite: specifier: ^6.3.3 - version: 6.3.3(@types/node@22.15.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1) + version: 6.3.3(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) packages/plugin-react-swc/playground/base-path: dependencies: @@ -177,11 +177,11 @@ importers: version: 19.1.0(react@19.1.0) devDependencies: '@types/react': - specifier: ^19.1.6 - version: 19.1.6 + specifier: ^19.1.8 + version: 19.1.8 '@types/react-dom': specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.6) + version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -196,11 +196,11 @@ importers: version: 19.1.0(react@19.1.0) devDependencies: '@types/react': - specifier: ^19.1.6 - version: 19.1.6 + specifier: ^19.1.8 + version: 19.1.8 '@types/react-dom': specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.6) + version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -215,11 +215,11 @@ importers: version: 19.1.0(react@19.1.0) devDependencies: '@types/react': - specifier: ^19.1.6 - version: 19.1.6 + specifier: ^19.1.8 + version: 19.1.8 '@types/react-dom': specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.6) + version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -228,10 +228,10 @@ importers: dependencies: '@emotion/react': specifier: ^11.14.0 - version: 11.14.0(@types/react@19.1.6)(react@19.1.0) + version: 11.14.0(@types/react@19.1.8)(react@19.1.0) '@emotion/styled': specifier: ^11.14.0 - version: 11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0) + version: 11.14.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) react: specifier: ^19.1.0 version: 19.1.0 @@ -240,11 +240,11 @@ importers: version: 19.1.0(react@19.1.0) devDependencies: '@types/react': - specifier: ^19.1.6 - version: 19.1.6 + specifier: ^19.1.8 + version: 19.1.8 '@types/react-dom': specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.6) + version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -253,10 +253,10 @@ importers: dependencies: '@emotion/react': specifier: ^11.14.0 - version: 11.14.0(@types/react@19.1.6)(react@19.1.0) + version: 11.14.0(@types/react@19.1.8)(react@19.1.0) '@emotion/styled': specifier: ^11.14.0 - version: 11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0) + version: 11.14.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) react: specifier: ^19.1.0 version: 19.1.0 @@ -268,11 +268,11 @@ importers: specifier: ^10.0.0 version: 10.0.0 '@types/react': - specifier: ^19.1.6 - version: 19.1.6 + specifier: ^19.1.8 + version: 19.1.8 '@types/react-dom': specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.6) + version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -287,11 +287,11 @@ importers: version: 19.1.0(react@19.1.0) devDependencies: '@types/react': - specifier: ^19.1.6 - version: 19.1.6 + specifier: ^19.1.8 + version: 19.1.8 '@types/react-dom': specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.6) + version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -309,11 +309,11 @@ importers: specifier: ^3.1.0 version: 3.1.0(rollup@4.37.0) '@types/react': - specifier: ^19.1.6 - version: 19.1.6 + specifier: ^19.1.8 + version: 19.1.8 '@types/react-dom': specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.6) + version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -347,11 +347,11 @@ importers: version: 19.1.0(react@19.1.0) devDependencies: '@types/react': - specifier: ^19.1.6 - version: 19.1.6 + specifier: ^19.1.8 + version: 19.1.8 '@types/react-dom': specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.6) + version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -368,18 +368,18 @@ importers: specifier: ^19.1.0 version: 19.1.0 styled-components: - specifier: ^6.1.18 - version: 6.1.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^6.1.19 + version: 6.1.19(react-dom@19.1.0(react@19.1.0))(react@19.1.0) devDependencies: '@swc/plugin-styled-components': specifier: ^8.0.0 version: 8.0.0 '@types/react': - specifier: ^19.1.6 - version: 19.1.6 + specifier: ^19.1.8 + version: 19.1.8 '@types/react-dom': specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.6) + version: 19.1.6(@types/react@19.1.8) '@types/styled-components': specifier: ^5.1.34 version: 5.1.34 @@ -391,10 +391,10 @@ importers: dependencies: '@generouted/react-router': specifier: ^1.20.0 - version: 1.20.0(react-router-dom@7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-router@7.6.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.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1)) + version: 1.20.0(react-router-dom@7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-router@7.6.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.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) generouted: specifier: 1.11.7 - version: 1.11.7(react-router-dom@7.6.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.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1)) + version: 1.11.7(react-router-dom@7.6.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.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) react: specifier: ^19.1.0 version: 19.1.0 @@ -406,11 +406,11 @@ importers: version: 7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) devDependencies: '@types/react': - specifier: ^19.1.6 - version: 19.1.6 + specifier: ^19.1.8 + version: 19.1.8 '@types/react-dom': specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.6) + version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -425,11 +425,11 @@ importers: version: 19.1.0(react@19.1.0) devDependencies: '@types/react': - specifier: ^19.1.6 - version: 19.1.6 + specifier: ^19.1.8 + version: 19.1.8 '@types/react-dom': specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.6) + version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -453,11 +453,11 @@ importers: version: 19.1.0(react@19.1.0) devDependencies: '@types/react': - specifier: ^19.1.6 - version: 19.1.6 + specifier: ^19.1.8 + version: 19.1.8 '@types/react-dom': specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.6) + version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: workspace:* version: link:../../packages/plugin-react @@ -475,11 +475,11 @@ importers: specifier: ^7.27.1 version: 7.27.1(@babel/core@7.27.4) '@types/react': - specifier: ^19.1.6 - version: 19.1.6 + specifier: ^19.1.8 + version: 19.1.8 '@types/react-dom': specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.6) + version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: workspace:* version: link:../../packages/plugin-react @@ -531,11 +531,11 @@ importers: version: 19.1.0(react@19.1.0) devDependencies: '@types/react': - specifier: ^19.1.6 - version: 19.1.6 + specifier: ^19.1.8 + version: 19.1.8 '@types/react-dom': specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.6) + version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: workspace:* version: link:../../packages/plugin-react @@ -550,11 +550,11 @@ importers: version: 19.1.0(react@19.1.0) devDependencies: '@types/react': - specifier: ^19.1.6 - version: 19.1.6 + specifier: ^19.1.8 + version: 19.1.8 '@types/react-dom': specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.6) + version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: workspace:* version: link:../../packages/plugin-react @@ -572,11 +572,11 @@ importers: specifier: ^3.1.0 version: 3.1.0(rollup@4.37.0) '@types/react': - specifier: ^19.1.6 - version: 19.1.6 + specifier: ^19.1.8 + version: 19.1.8 '@types/react-dom': specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.6) + version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: workspace:* version: link:../../packages/plugin-react @@ -614,10 +614,10 @@ importers: dependencies: '@emotion/react': specifier: ^11.14.0 - version: 11.14.0(@types/react@19.1.6)(react@19.1.0) + version: 11.14.0(@types/react@19.1.8)(react@19.1.0) '@emotion/styled': specifier: ^11.14.0 - version: 11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0) + version: 11.14.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) react: specifier: ^19.1.0 version: 19.1.0 @@ -1524,12 +1524,6 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.5.1': - resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/eslint-utils@4.7.0': resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1540,8 +1534,8 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.20.0': - resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==} + '@eslint/config-array@0.20.1': + resolution: {integrity: sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/config-helpers@0.2.1': @@ -1556,8 +1550,8 @@ packages: resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.28.0': - resolution: {integrity: sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==} + '@eslint/js@9.29.0': + resolution: {integrity: sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': @@ -1624,6 +1618,9 @@ packages: '@napi-rs/wasm-runtime@0.2.10': resolution: {integrity: sha512-bCsCyeZEwVErsGmyPNSzwfwFn4OdxBj0mmv6hOFucB/k81Ojdu68RbZdxYsRQUPc9l6SU5F/cG+bXgWs3oUgsQ==} + '@napi-rs/wasm-runtime@0.2.11': + resolution: {integrity: sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1636,15 +1633,15 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@oxc-project/runtime@0.72.2': - resolution: {integrity: sha512-J2lsPDen2mFs3cOA1gIBd0wsHEhum2vTnuKIRwmj3HJJcIz/XgeNdzvgSOioIXOJgURIpcDaK05jwaDG1rhDwg==} + '@oxc-project/runtime@0.72.3': + resolution: {integrity: sha512-FtOS+0v7rZcnjXzYTTqv1vu/KDptD1UztFgoZkYBGe/6TcNFm+SP/jQoLvzau1SPir95WgDOBOUm2Gmsm+bQag==} engines: {node: '>=6.9.0'} - '@oxc-project/types@0.72.2': - resolution: {integrity: sha512-il5RF8AP85XC0CMjHF4cnVT9nT/v/ocm6qlZQpSiAR9qBbQMGkFKloBZwm7PcnOdiUX97yHgsKM7uDCCWCu3tg==} + '@oxc-project/types@0.72.3': + resolution: {integrity: sha512-CfAC4wrmMkUoISpQkFAIfMVvlPfQV3xg7ZlcqPXPOIMQhdKIId44G8W0mCPgtpWdFFAyJ+SFtiM+9vbyCkoVng==} - '@playwright/test@1.52.0': - resolution: {integrity: sha512-uh6W7sb55hl7D6vsAeA+V2p5JnlAqzhqFyF0VcJkKZXkgnFcVG9PziERRHQfPLfNGx1C292a4JqbWzhR8L4R1g==} + '@playwright/test@1.53.0': + resolution: {integrity: sha512-15hjKreZDcp7t6TL/7jkAo6Df5STZN09jGiv5dbP9A6vMVncXRqE7/B2SncsyOwrkZRBH2i6/TPOL8BVmm3c7w==} engines: {node: '>=18'} hasBin: true @@ -1652,71 +1649,71 @@ packages: resolution: {integrity: sha512-S+9ANAvUmjutrshV4jZjaiG8XQyuJIZ8a4utWmN/vW1sgQ9IfBnPndwkmQYw53QmouOIytT874u65HEmu6H5jw==} engines: {node: '>=18'} - '@rolldown/binding-darwin-arm64@1.0.0-beta.11-commit.0a985f3': - resolution: {integrity: sha512-wyBH60GIWFp+JPExag933Mroi4TH/kRjL5D1NWBVGX8BkCA5f8KYzBHl2je++4hEEiZaPhqt9LzGnuoDsGVT4w==} + '@rolldown/binding-darwin-arm64@1.0.0-beta.15': + resolution: {integrity: sha512-YInZppDBLp5DadbJZGc7xBfDrMCSj3P6i2rPlvOCMlvjBQxJi2kX8Jquh+LufsWUiHD3JsvvH5EuUUc/tF5fkA==} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-beta.11-commit.0a985f3': - resolution: {integrity: sha512-JOgRGe4NWzzPM9uwGuXvEqjNzf3Cg3rBi1K88lq6l6cW5BbnUUaXAuQ3gSqXVIODtJ18m5VvlOnb+d4fRPiVbg==} + '@rolldown/binding-darwin-x64@1.0.0-beta.15': + resolution: {integrity: sha512-Zwv8KHU/XdVwLseHG6slJ0FAFklPpiO0sjNvhrcMp1X3F2ajPzUdIO8Cnu3KLmX1GWVSvu6q1kyARLUqPvlh7Q==} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-beta.11-commit.0a985f3': - resolution: {integrity: sha512-n8jKI6paSi1sbChM7O5rWiOL0sJU4u112GnfX2Rs5Vgf27HgBeuX6hV9W3mismknDaHtZCjvQt0po7gwBLqbvg==} + '@rolldown/binding-freebsd-x64@1.0.0-beta.15': + resolution: {integrity: sha512-FwhNC23Fz9ldHW1/rX4QaoQe4kyOybCgxO9eglue3cbb3ol28KWpQl3xJfvXc9+O6PDefAs4oFBCbtTh8seiUw==} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.11-commit.0a985f3': - resolution: {integrity: sha512-t+DOeCjZf56kmjOLJJbmGalG7rHzolyblK188OEpylpf1smISOQbLjYMSikyMaBA6M/WGl5rOlA1hQd3JeieFw==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.15': + resolution: {integrity: sha512-E60pNliWl4j7EFEVX2oeJZ5VzR+NG6fvDJoqfqRfCl8wtKIf9E1WPWVQIrT+zkz+Fhc5op8g7h25z6rtxsDy9g==} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.11-commit.0a985f3': - resolution: {integrity: sha512-3SJOJ0ddxlUaBKz2LhwX/g4lfJyNYqtNI8Vxr6vnMJ8QRdo5TKr+/FrhIJxrl5Rceyh45l+plv6AsZMihQcPmA==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.15': + resolution: {integrity: sha512-d+qo1LZ/a3EcQW08byIIZy0PBthmG/7dr69pifmNIet/azWR8jbceQaRFFczVc/NwVV3fsZDCmjG8mgJzsNEAg==} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.11-commit.0a985f3': - resolution: {integrity: sha512-XR/SWdDHhQBmrpSUDTT6gqKzTv6q1NfjreOqYJmWho79kO/ohVGbT+I5oM+eE9XhUI0rSif/pF6vVWsyHLXEqw==} + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.15': + resolution: {integrity: sha512-P1hbtYF+5ftJI2Ergs4iARbAk6Xd6WnTQb3CF9kjN3KfJTsRYdo5/fvU8Lz/gzhZVvkCXXH3NxDd9308UBO8cw==} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.11-commit.0a985f3': - resolution: {integrity: sha512-OXBTtIhT++3cCpc4pCtOcfPo4p9fOmlJLNOtxP+8USSVKy4n6snBfg2jdOyu6o/H6VeqoggHuLivtBXW5tFbPQ==} + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.15': + resolution: {integrity: sha512-Q9NM9uMFN9cjcrW7gd9U087B5WzkEj9dQQHOgoENZSy+vYJYS2fINCIG40ljEVC6jXmVrJgUhJKv7elRZM1nng==} cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-musl@1.0.0-beta.11-commit.0a985f3': - resolution: {integrity: sha512-DUchRVMBPCOrg+UMFNW0MieM8YEn8sLV7s77zOz7cLQI7OgD3x7JfiRxlpazAtCOnJCuuHpnONLDrli+c8rluA==} + '@rolldown/binding-linux-x64-musl@1.0.0-beta.15': + resolution: {integrity: sha512-1tuCWuR8gx9PyW2pxAx2ZqnOnwhoY6NWBVP6ZmrjCKQ16NclYc61BzegFXSdugCy8w1QpBPT8/c5oh2W4E5aeA==} cpu: [x64] os: [linux] - '@rolldown/binding-wasm32-wasi@1.0.0-beta.11-commit.0a985f3': - resolution: {integrity: sha512-gT++TSMmZM4nW6b/rM0r/qJ+7NSXONP8E/ok/j2CW/cR9f8wyU4tNzVmbZwVJf3kVUzKezYBO9JNdSq7IkF2Bw==} + '@rolldown/binding-wasm32-wasi@1.0.0-beta.15': + resolution: {integrity: sha512-zrSeYrpTf27hRxMLh0qpkCoWgzRKG8EyR6o09Zt9xkqCOeE5tEK/S3jV1Nii9WSqVCWFRA+OYxKzMNoykV590g==} engines: {node: '>=14.21.3'} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.11-commit.0a985f3': - resolution: {integrity: sha512-TvDW2TXF3b+eLqX8PqRKEIu7xaUwb//HmkzgbuDaGZbbUR4ewNOrue4xpUxJiRhRHqqfZBPpmp6ukyuUxsNaow==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.15': + resolution: {integrity: sha512-diR41DsMUnkvb9hvW8vuIrA0WaacAN1fu6lPseXhYifAOZN6kvxEwKn7Xib8i0zjdrYErLv7GNSQ48W+xiNOnA==} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.11-commit.0a985f3': - resolution: {integrity: sha512-cAoyh54I5wKQOvXQJz2bJfqsRP0AQv2aCWx2fwCP2ick142tKufFiKfYa5A7nsDHSjQiGA8sXxi6SLho65Wgog==} + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.15': + resolution: {integrity: sha512-oCbbcDC3Lk8YgdxCkG23UqVrvXVvllIBgmmwq89bhq5okPP899OI/P+oTTDsUTbhljzNq1pH8a+mR6YBxAFfvw==} cpu: [ia32] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.11-commit.0a985f3': - resolution: {integrity: sha512-qsDfpbZb4sUbF4+n1th+JuwOlV17jRZoVwvdfZcyexXHXIzmYzoTpHPL86V0eTdbEK206vx/2NoFjK871CR4cg==} + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.15': + resolution: {integrity: sha512-w5hVsOv3dzKo10wAXizmnDvUo1yasn/ps+mcn9H9TiJ/GeRE5/15Y6hG6vUQYRQNLVbYRHUt2qG0MyOoasPcHg==} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-beta.11': - resolution: {integrity: sha512-L/gAA/hyCSuzTF1ftlzUSI/IKr2POHsv1Dd78GfqkR83KMNuswWD61JxGV2L7nRwBBBSDr6R1gCkdTmoN7W4ag==} + '@rolldown/pluginutils@1.0.0-beta.15': + resolution: {integrity: sha512-lvFtIbidq5EqyAAeiVk41ZNjGRgUoGRBIuqpe1VRJ7R8Av7TLAgGWAwGlHNhO7MFkl7MNRX350CsTtIWIYkNIQ==} - '@rolldown/pluginutils@1.0.0-beta.11-commit.0a985f3': - resolution: {integrity: sha512-BzOULtKKG5aXllquK5TQKwonut+cN7KtWSt9UUAwlipWyNPKViJs+vFVTBwdvgSsHrWefNVjHkC9rO1eeYKkDA==} + '@rolldown/pluginutils@1.0.0-beta.16': + resolution: {integrity: sha512-w3f87JpF7lgIlK03I0R3XidspFgB4MsixE5o/VjBMJI+Ki4XW/Ffrykmj2AUCbVxhRD7Pi9W0Qu2XapJhB2mSA==} '@rollup/plugin-alias@5.1.1': resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} @@ -2026,8 +2023,8 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node@22.15.30': - resolution: {integrity: sha512-6Q7lr06bEHdlfplU6YRbgG1SFBdlsfNC4/lX+SkhiTs0cpJkOElmWls8PxDFv4yY/xKb8Y6SO0OmSX4wgqTZbA==} + '@types/node@22.15.31': + resolution: {integrity: sha512-jnVe5ULKl6tijxUhvQeNbQG/84fHfg+yMak02cT8QVhBx/F05rAVxCGBYYTh2EKz22D6JF5ktXuNwdx7b9iEGw==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -2048,8 +2045,8 @@ packages: '@types/react@18.3.20': resolution: {integrity: sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==} - '@types/react@19.1.6': - resolution: {integrity: sha512-JeG0rEWak0N6Itr6QUx+X60uQmN+5t3j9r/OVDtWzFXKaj6kD1BwJzOksD0FF6iWxZlbE1kB0q9vtnU2ekqa1Q==} + '@types/react@19.1.8': + resolution: {integrity: sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==} '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} @@ -2066,16 +2063,16 @@ packages: '@types/unist@3.0.2': resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} - '@typescript-eslint/eslint-plugin@8.33.1': - resolution: {integrity: sha512-TDCXj+YxLgtvxvFlAvpoRv9MAncDLBV2oT9Bd7YBGC/b/sEURoOYuIwLI99rjWOfY3QtDzO+mk0n4AmdFExW8A==} + '@typescript-eslint/eslint-plugin@8.34.0': + resolution: {integrity: sha512-QXwAlHlbcAwNlEEMKQS2RCgJsgXrTJdjXT08xEgbPFa2yYQgVjBymxP5DrfrE7X7iodSzd9qBUHUycdyVJTW1w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.33.1 + '@typescript-eslint/parser': ^8.34.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/parser@8.33.1': - resolution: {integrity: sha512-qwxv6dq682yVvgKKp2qWwLgRbscDAYktPptK4JPojCwwi3R9cwrvIxS4lvBpzmcqzR4bdn54Z0IG1uHFskW4dA==} + '@typescript-eslint/parser@8.34.0': + resolution: {integrity: sha512-vxXJV1hVFx3IXz/oy2sICsJukaBrtDEQSBiV48/YIV5KWjX1dO+bcIr/kCPrW6weKXvsaGKFNlwH0v2eYdRRbA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2087,40 +2084,46 @@ packages: peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/scope-manager@8.31.0': - resolution: {integrity: sha512-knO8UyF78Nt8O/B64i7TlGXod69ko7z6vJD9uhSlm0qkAbGeRUSudcm0+K/4CrRjrpiHfBCjMWlc08Vav1xwcw==} + '@typescript-eslint/project-service@8.34.0': + resolution: {integrity: sha512-iEgDALRf970/B2YExmtPMPF54NenZUf4xpL3wsCRx/lgjz6ul/l13R81ozP/ZNuXfnLCS+oPmG7JIxfdNYKELw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' '@typescript-eslint/scope-manager@8.33.1': resolution: {integrity: sha512-dM4UBtgmzHR9bS0Rv09JST0RcHYearoEoo3pG5B6GoTR9XcyeqX87FEhPo+5kTvVfKCvfHaHrcgeJQc6mrDKrA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.34.0': + resolution: {integrity: sha512-9Ac0X8WiLykl0aj1oYQNcLZjHgBojT6cW68yAgZ19letYu+Hxd0rE0veI1XznSSst1X5lwnxhPbVdwjDRIomRw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/tsconfig-utils@8.33.1': resolution: {integrity: sha512-STAQsGYbHCF0/e+ShUQ4EatXQ7ceh3fBCXkNU7/MZVKulrlq1usH7t2FhxvCpuCi5O5oi1vmVaAjrGeL71OK1g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/type-utils@8.33.1': - resolution: {integrity: sha512-1cG37d9xOkhlykom55WVwG2QRNC7YXlxMaMzqw2uPeJixBFfKWZgaP/hjAObqMN/u3fr5BrTwTnc31/L9jQ2ww==} + '@typescript-eslint/tsconfig-utils@8.34.0': + resolution: {integrity: sha512-+W9VYHKFIzA5cBeooqQxqNriAP0QeQ7xTiDuIOr71hzgffm3EL2hxwWBIIj4GuofIbKxGNarpKqIq6Q6YrShOA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/types@8.31.0': - resolution: {integrity: sha512-Ch8oSjVyYyJxPQk8pMiP2FFGYatqXQfQIaMp+TpuuLlDachRWpUAeEu1u9B/v/8LToehUIWyiKcA/w5hUFRKuQ==} + '@typescript-eslint/type-utils@8.34.0': + resolution: {integrity: sha512-n7zSmOcUVhcRYC75W2pnPpbO1iwhJY3NLoHEtbJwJSNlVAZuwqu05zY3f3s2SDWWDSo9FdN5szqc73DCtDObAg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' '@typescript-eslint/types@8.33.1': resolution: {integrity: sha512-xid1WfizGhy/TKMTwhtVOgalHwPtV8T32MS9MaH50Cwvz6x6YqRIPdD2WvW0XaqOzTV9p5xdLY0h/ZusU5Lokg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.31.0': - resolution: {integrity: sha512-xLmgn4Yl46xi6aDSZ9KkyfhhtnYI15/CvHbpOy/eR5NWhK/BK8wc709KKwhAR0m4ZKRP7h07bm4BWUYOCuRpQQ==} + '@typescript-eslint/types@8.34.0': + resolution: {integrity: sha512-9V24k/paICYPniajHfJ4cuAWETnt7Ssy+R0Rbcqo5sSFr3QEZ/8TSoUi9XeXVBGXCaLtwTOKSLGcInCAvyZeMA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' '@typescript-eslint/typescript-estree@8.33.1': resolution: {integrity: sha512-+s9LYcT8LWjdYWu7IWs7FvUxpQ/DGkdjZeE/GGulHvv8rvYwQvVaUZ6DE+j5x/prADUgSbbCWZ2nPI3usuVeOA==} @@ -2128,11 +2131,10 @@ packages: peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.31.0': - resolution: {integrity: sha512-qi6uPLt9cjTFxAb1zGNgTob4x9ur7xC6mHQJ8GwEzGMGE9tYniublmJaowOJ9V2jUzxrltTPfdG2nKlWsq0+Ww==} + '@typescript-eslint/typescript-estree@8.34.0': + resolution: {integrity: sha512-rOi4KZxI7E0+BMqG7emPSK1bB4RICCpF7QD3KCLXn9ZvWoESsOMlHyZPAHyG04ujVplPaHbmEvs34m+wjgtVtg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' '@typescript-eslint/utils@8.33.1': @@ -2142,110 +2144,127 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/visitor-keys@8.31.0': - resolution: {integrity: sha512-QcGHmlRHWOl93o64ZUMNewCdwKGU6WItOU52H0djgNmn1EOrhVudrDzXz4OycCRSCPwFCDrE2iIt5vmuUdHxuQ==} + '@typescript-eslint/utils@8.34.0': + resolution: {integrity: sha512-8L4tWatGchV9A1cKbjaavS6mwYwp39jql8xUmIIKJdm+qiaeHy5KMKlBrf30akXAWBzn2SqKsNOtSENWUwg7XQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' '@typescript-eslint/visitor-keys@8.33.1': resolution: {integrity: sha512-3i8NrFcZeeDHJ+7ZUuDkGT+UHq+XoFGsymNK2jZCOHcfEzRQ0BdpRtdpSx/Iyf3MHLWIcLS0COuOPibKQboIiQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.34.0': + resolution: {integrity: sha512-qHV7pW7E85A0x6qyrFn+O+q1k1p3tQCsqIZ1KZ5ESLXY57aTvUd3/a4rdPTeXisvhXn2VQG0VSKUqs8KHF2zcA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - '@unrs/resolver-binding-darwin-arm64@1.7.11': - resolution: {integrity: sha512-i3/wlWjQJXMh1uiGtiv7k1EYvrrS3L1hdwmWJJiz1D8jWy726YFYPIxQWbEIVPVAgrfRR0XNlLrTQwq17cuCGw==} + '@unrs/resolver-binding-android-arm-eabi@1.9.0': + resolution: {integrity: sha512-h1T2c2Di49ekF2TE8ZCoJkb+jwETKUIPDJ/nO3tJBKlLFPu+fyd93f0rGP/BvArKx2k2HlRM4kqkNarj3dvZlg==} + cpu: [arm] + os: [android] + + '@unrs/resolver-binding-android-arm64@1.9.0': + resolution: {integrity: sha512-sG1NHtgXtX8owEkJ11yn34vt0Xqzi3k9TJ8zppDmyG8GZV4kVWw44FHwKwHeEFl07uKPeC4ZoyuQaGh5ruJYPA==} + cpu: [arm64] + os: [android] + + '@unrs/resolver-binding-darwin-arm64@1.9.0': + resolution: {integrity: sha512-nJ9z47kfFnCxN1z/oYZS7HSNsFh43y2asePzTEZpEvK7kGyuShSl3RRXnm/1QaqFL+iP+BjMwuB+DYUymOkA5A==} cpu: [arm64] os: [darwin] - '@unrs/resolver-binding-darwin-x64@1.7.11': - resolution: {integrity: sha512-8XXyFvc6w6kmMmi6VYchZhjd5CDcp+Lv6Cn1YmUme0ypsZ/0Kzd+9ESrWtDrWibKPTgSteDTxp75cvBOY64FQQ==} + '@unrs/resolver-binding-darwin-x64@1.9.0': + resolution: {integrity: sha512-TK+UA1TTa0qS53rjWn7cVlEKVGz2B6JYe0C++TdQjvWYIyx83ruwh0wd4LRxYBM5HeuAzXcylA9BH2trARXJTw==} cpu: [x64] os: [darwin] - '@unrs/resolver-binding-freebsd-x64@1.7.11': - resolution: {integrity: sha512-0qJBYzP8Qk24CZ05RSWDQUjdiQUeIJGfqMMzbtXgCKl/a5xa6thfC0MQkGIr55LCLd6YmMyO640ifYUa53lybQ==} + '@unrs/resolver-binding-freebsd-x64@1.9.0': + resolution: {integrity: sha512-6uZwzMRFcD7CcCd0vz3Hp+9qIL2jseE/bx3ZjaLwn8t714nYGwiE84WpaMCYjU+IQET8Vu/+BNAGtYD7BG/0yA==} cpu: [x64] os: [freebsd] - '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.11': - resolution: {integrity: sha512-1sGwpgvx+WZf0GFT6vkkOm6UJ+mlsVnjw+Yv9esK71idWeRAG3bbpkf3AoY8KIqKqmnzJExi0uKxXpakQ5Pcbg==} + '@unrs/resolver-binding-linux-arm-gnueabihf@1.9.0': + resolution: {integrity: sha512-bPUBksQfrgcfv2+mm+AZinaKq8LCFvt5PThYqRotqSuuZK1TVKkhbVMS/jvSRfYl7jr3AoZLYbDkItxgqMKRkg==} cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm-musleabihf@1.7.11': - resolution: {integrity: sha512-D/1F/2lTe+XAl3ohkYj51NjniVly8sIqkA/n1aOND3ZMO418nl2JNU95iVa1/RtpzaKcWEsNTtHRogykrUflJg==} + '@unrs/resolver-binding-linux-arm-musleabihf@1.9.0': + resolution: {integrity: sha512-uT6E7UBIrTdCsFQ+y0tQd3g5oudmrS/hds5pbU3h4s2t/1vsGWbbSKhBSCD9mcqaqkBwoqlECpUrRJCmldl8PA==} cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm64-gnu@1.7.11': - resolution: {integrity: sha512-7vFWHLCCNFLEQlmwKQfVy066ohLLArZl+AV/AdmrD1/pD1FlmqM+FKbtnONnIwbHtgetFUCV/SRi1q4D49aTlw==} + '@unrs/resolver-binding-linux-arm64-gnu@1.9.0': + resolution: {integrity: sha512-vdqBh911wc5awE2bX2zx3eflbyv8U9xbE/jVKAm425eRoOVv/VseGZsqi3A3SykckSpF4wSROkbQPvbQFn8EsA==} cpu: [arm64] os: [linux] - '@unrs/resolver-binding-linux-arm64-musl@1.7.11': - resolution: {integrity: sha512-tYkGIx8hjWPh4zcn17jLEHU8YMmdP2obRTGkdaB3BguGHh31VCS3ywqC4QjTODjmhhNyZYkj/1Dz/+0kKvg9YA==} + '@unrs/resolver-binding-linux-arm64-musl@1.9.0': + resolution: {integrity: sha512-/8JFZ/SnuDr1lLEVsxsuVwrsGquTvT51RZGvyDB/dOK3oYK2UqeXzgeyq6Otp8FZXQcEYqJwxb9v+gtdXn03eQ==} cpu: [arm64] os: [linux] - '@unrs/resolver-binding-linux-ppc64-gnu@1.7.11': - resolution: {integrity: sha512-6F328QIUev29vcZeRX6v6oqKxfUoGwIIAhWGD8wSysnBYFY0nivp25jdWmAb1GildbCCaQvOKEhCok7YfWkj4Q==} + '@unrs/resolver-binding-linux-ppc64-gnu@1.9.0': + resolution: {integrity: sha512-FkJjybtrl+rajTw4loI3L6YqSOpeZfDls4SstL/5lsP2bka9TiHUjgMBjygeZEis1oC8LfJTS8FSgpKPaQx2tQ==} cpu: [ppc64] os: [linux] - '@unrs/resolver-binding-linux-riscv64-gnu@1.7.11': - resolution: {integrity: sha512-NqhWmiGJGdzbZbeucPZIG9Iav4lyYLCarEnxAceguMx9qlpeEF7ENqYKOwB8Zqk7/CeuYMEcLYMaW2li6HyDzQ==} + '@unrs/resolver-binding-linux-riscv64-gnu@1.9.0': + resolution: {integrity: sha512-w/NZfHNeDusbqSZ8r/hp8iL4S39h4+vQMc9/vvzuIKMWKppyUGKm3IST0Qv0aOZ1rzIbl9SrDeIqK86ZpUK37w==} cpu: [riscv64] os: [linux] - '@unrs/resolver-binding-linux-riscv64-musl@1.7.11': - resolution: {integrity: sha512-J2RPIFKMdTrLtBdfR1cUMKl8Gcy05nlQ+bEs/6al7EdWLk9cs3tnDREHZ7mV9uGbeghpjo4i8neNZNx3PYUY9w==} + '@unrs/resolver-binding-linux-riscv64-musl@1.9.0': + resolution: {integrity: sha512-bEPBosut8/8KQbUixPry8zg/fOzVOWyvwzOfz0C0Rw6dp+wIBseyiHKjkcSyZKv/98edrbMknBaMNJfA/UEdqw==} cpu: [riscv64] os: [linux] - '@unrs/resolver-binding-linux-s390x-gnu@1.7.11': - resolution: {integrity: sha512-bDpGRerHvvHdhun7MmFUNDpMiYcJSqWckwAVVRTJf8F+RyqYJOp/mx04PDc7DhpNPeWdnTMu91oZRMV+gGaVcQ==} + '@unrs/resolver-binding-linux-s390x-gnu@1.9.0': + resolution: {integrity: sha512-LDtMT7moE3gK753gG4pc31AAqGUC86j3AplaFusc717EUGF9ZFJ356sdQzzZzkBk1XzMdxFyZ4f/i35NKM/lFA==} cpu: [s390x] os: [linux] - '@unrs/resolver-binding-linux-x64-gnu@1.7.11': - resolution: {integrity: sha512-G9U7bVmylzRLma3cK39RBm3guoD1HOvY4o0NS4JNm37AD0lS7/xyMt7kn0JejYyc0Im8J+rH69/dXGM9DAJcSQ==} + '@unrs/resolver-binding-linux-x64-gnu@1.9.0': + resolution: {integrity: sha512-WmFd5KINHIXj8o1mPaT8QRjA9HgSXhN1gl9Da4IZihARihEnOylu4co7i/yeaIpcfsI6sYs33cNZKyHYDh0lrA==} cpu: [x64] os: [linux] - '@unrs/resolver-binding-linux-x64-musl@1.7.11': - resolution: {integrity: sha512-7qL20SBKomekSunm7M9Fe5L93bFbn+FbHiGJbfTlp0RKhPVoJDP73vOxf1QrmJHyDPECsGWPFnKa/f8fO2FsHw==} + '@unrs/resolver-binding-linux-x64-musl@1.9.0': + resolution: {integrity: sha512-CYuXbANW+WgzVRIl8/QvZmDaZxrqvOldOwlbUjIM4pQ46FJ0W5cinJ/Ghwa/Ng1ZPMJMk1VFdsD/XwmCGIXBWg==} cpu: [x64] os: [linux] - '@unrs/resolver-binding-wasm32-wasi@1.7.11': - resolution: {integrity: sha512-jisvIva8MidjI+B1lFRZZMfCPaCISePgTyR60wNT1MeQvIh5Ksa0G3gvI+Iqyj3jqYbvOHByenpa5eDGcSdoSg==} + '@unrs/resolver-binding-wasm32-wasi@1.9.0': + resolution: {integrity: sha512-6Rp2WH0OoitMYR57Z6VE8Y6corX8C6QEMWLgOV6qXiJIeZ1F9WGXY/yQ8yDC4iTraotyLOeJ2Asea0urWj2fKQ==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@unrs/resolver-binding-win32-arm64-msvc@1.7.11': - resolution: {integrity: sha512-G+H5nQZ8sRZ8ebMY6mRGBBvTEzMYEcgVauLsNHpvTUavZoCCRVP1zWkCZgOju2dW3O22+8seTHniTdl1/uLz3g==} + '@unrs/resolver-binding-win32-arm64-msvc@1.9.0': + resolution: {integrity: sha512-rknkrTRuvujprrbPmGeHi8wYWxmNVlBoNW8+4XF2hXUnASOjmuC9FNF1tGbDiRQWn264q9U/oGtixyO3BT8adQ==} cpu: [arm64] os: [win32] - '@unrs/resolver-binding-win32-ia32-msvc@1.7.11': - resolution: {integrity: sha512-Hfy46DBfFzyv0wgR0MMOwFFib2W2+Btc8oE5h4XlPhpelnSyA6nFxkVIyTgIXYGTdFaLoZFNn62fmqx3rjEg3A==} + '@unrs/resolver-binding-win32-ia32-msvc@1.9.0': + resolution: {integrity: sha512-Ceymm+iBl+bgAICtgiHyMLz6hjxmLJKqBim8tDzpX61wpZOx2bPK6Gjuor7I2RiUynVjvvkoRIkrPyMwzBzF3A==} cpu: [ia32] os: [win32] - '@unrs/resolver-binding-win32-x64-msvc@1.7.11': - resolution: {integrity: sha512-7L8NdsQlCJ8T106Gbz/AjzM4QKWVsoQbKpB9bMBGcIZswUuAnJMHpvbqGW3RBqLHCIwX4XZ5fxSBHEFcK2h9wA==} + '@unrs/resolver-binding-win32-x64-msvc@1.9.0': + resolution: {integrity: sha512-k59o9ZyeyS0hAlcaKFezYSH2agQeRFEB7KoQLXl3Nb3rgkqT1NY9Vwy+SqODiLmYnEjxWJVRE/yq2jFVqdIxZw==} cpu: [x64] os: [win32] '@vitejs/release-scripts@1.5.0': resolution: {integrity: sha512-rZQdM5AneNJHzDOTUaQOOifauH6MkGTSI+GH8bKKrimBaa5BtvpnE1iz43fJ4QDO7RdGxAlxWnPQAVlFhGM1cQ==} - '@vitest/expect@3.2.2': - resolution: {integrity: sha512-ipHw0z669vEMjzz3xQE8nJX1s0rQIb7oEl4jjl35qWTwm/KIHERIg/p/zORrjAaZKXfsv7IybcNGHwhOOAPMwQ==} + '@vitest/expect@3.2.3': + resolution: {integrity: sha512-W2RH2TPWVHA1o7UmaFKISPvdicFJH+mjykctJFoAkUw+SPTJTGjUNdKscFBrqM7IPnCVu6zihtKYa7TkZS1dkQ==} - '@vitest/mocker@3.2.2': - resolution: {integrity: sha512-jKojcaRyIYpDEf+s7/dD3LJt53c0dPfp5zCPXz9H/kcGrSlovU/t1yEaNzM9oFME3dcd4ULwRI/x0Po1Zf+LTw==} + '@vitest/mocker@3.2.3': + resolution: {integrity: sha512-cP6fIun+Zx8he4rbWvi+Oya6goKQDZK+Yq4hhlggwQBbrlOQ4qtZ+G4nxB6ZnzI9lyIb+JnvyiJnPC2AGbKSPA==} peerDependencies: msw: ^2.4.9 vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 @@ -2255,20 +2274,20 @@ packages: vite: optional: true - '@vitest/pretty-format@3.2.2': - resolution: {integrity: sha512-FY4o4U1UDhO9KMd2Wee5vumwcaHw7Vg4V7yR4Oq6uK34nhEJOmdRYrk3ClburPRUA09lXD/oXWZ8y/Sdma0aUQ==} + '@vitest/pretty-format@3.2.3': + resolution: {integrity: sha512-yFglXGkr9hW/yEXngO+IKMhP0jxyFw2/qys/CK4fFUZnSltD+MU7dVYGrH8rvPcK/O6feXQA+EU33gjaBBbAng==} - '@vitest/runner@3.2.2': - resolution: {integrity: sha512-GYcHcaS3ejGRZYed2GAkvsjBeXIEerDKdX3orQrBJqLRiea4NSS9qvn9Nxmuy1IwIB+EjFOaxXnX79l8HFaBwg==} + '@vitest/runner@3.2.3': + resolution: {integrity: sha512-83HWYisT3IpMaU9LN+VN+/nLHVBCSIUKJzGxC5RWUOsK1h3USg7ojL+UXQR3b4o4UBIWCYdD2fxuzM7PQQ1u8w==} - '@vitest/snapshot@3.2.2': - resolution: {integrity: sha512-aMEI2XFlR1aNECbBs5C5IZopfi5Lb8QJZGGpzS8ZUHML5La5wCbrbhLOVSME68qwpT05ROEEOAZPRXFpxZV2wA==} + '@vitest/snapshot@3.2.3': + resolution: {integrity: sha512-9gIVWx2+tysDqUmmM1L0hwadyumqssOL1r8KJipwLx5JVYyxvVRfxvMq7DaWbZZsCqZnu/dZedaZQh4iYTtneA==} - '@vitest/spy@3.2.2': - resolution: {integrity: sha512-6Utxlx3o7pcTxvp0u8kUiXtRFScMrUg28KjB3R2hon7w4YqOFAEA9QwzPVVS1QNL3smo4xRNOpNZClRVfpMcYg==} + '@vitest/spy@3.2.3': + resolution: {integrity: sha512-JHu9Wl+7bf6FEejTCREy+DmgWe+rQKbK+y32C/k5f4TBIAlijhJbRBIRIOCEpVevgRsCQR2iHRUH2/qKVM/plw==} - '@vitest/utils@3.2.2': - resolution: {integrity: sha512-qJYMllrWpF/OYfWHP32T31QCaLa3BAzT/n/8mNGhPdVcjY+JYazQFO1nsJvXU12Kp1xMpNY4AGuljPTNjQve6A==} + '@vitest/utils@3.2.3': + resolution: {integrity: sha512-4zFBCU5Pf+4Z6v+rwnZ1HU1yzOKKvDkMXZrymE2PBlbjKJRlrOxbvpfPSvJTGRIwGoahaOGvp+kbCoxifhzJ1Q==} acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -2280,6 +2299,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -2670,8 +2694,8 @@ packages: peerDependencies: eslint: '>=8' - eslint-plugin-import-x@4.15.1: - resolution: {integrity: sha512-JfVpNg1qMkPD66iaSgmMoSYeUCGS8UFSm3GwHV0IbuV3Knar/SyK5qqCct9+AxoMIzaM+KSO7KK5pOeOkC/3GQ==} + eslint-plugin-import-x@4.15.2: + resolution: {integrity: sha512-J5gx7sN6DTm0LRT//eP3rVVQ2Yi4hrX0B+DbWxa5er8PZ6JjLo9GUBwogIFvEDdwJaSqZplpQT+haK/cXhb7VQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/utils': ^8.0.0 @@ -2683,20 +2707,20 @@ packages: eslint-import-resolver-node: optional: true - eslint-plugin-n@17.19.0: - resolution: {integrity: sha512-qxn1NaDHtizbhVAPpbMT8wWFaLtPnwhfN/e+chdu2i6Vgzmo/tGM62tcJ1Hf7J5Ie4dhse3DOPMmDxduzfifzw==} + eslint-plugin-n@17.20.0: + resolution: {integrity: sha512-IRSoatgB/NQJZG5EeTbv/iAx1byOGdbbyhQrNvWdCfTnmPxUT0ao9/eGOeG7ljD8wJBsxwE8f6tES5Db0FRKEw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=8.23.0' - eslint-plugin-regexp@2.8.0: - resolution: {integrity: sha512-xme90IvkMgdyS+NJC21FM0H6ek4urGsdlIFTXpZRqH2BKJKVSd8hRbyrCpbcqfGBi2jth3eQoLiO3RC1gxZHiw==} + eslint-plugin-regexp@2.9.0: + resolution: {integrity: sha512-9WqJMnOq8VlE/cK+YAo9C9YHhkOtcEtEk9d12a+H7OSZFwlpI6stiHmYPGa2VE0QhTzodJyhlyprUaXDZLgHBw==} engines: {node: ^18 || >=20} peerDependencies: eslint: '>=8.44.0' - eslint-scope@8.3.0: - resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: @@ -2707,8 +2731,12 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.28.0: - resolution: {integrity: sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ==} + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.29.0: + resolution: {integrity: sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -2717,8 +2745,8 @@ packages: jiti: optional: true - espree@10.3.0: - resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} esquery@1.5.0: @@ -2889,9 +2917,6 @@ packages: get-them-args@1.3.2: resolution: {integrity: sha512-LRn8Jlk+DwZE4GTlDbT3Hikd1wSHgLMme/+7ddlqKd7ldwR6LjJgTVWzBnR01wnYGe4KgrXjg287RaI22UHmAw==} - get-tsconfig@4.10.0: - resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} - get-tsconfig@4.10.1: resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} @@ -3044,6 +3069,9 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true @@ -3515,18 +3543,18 @@ packages: pkg-types@2.1.0: resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==} - playwright-chromium@1.52.0: - resolution: {integrity: sha512-ZTpzBzRFFRglyqRnAqdK5mFaw1P41qe8V2zSR+fA0eKPgGEEaH7r91ejXKijs3WhReatRcatHQe3ndMBMN1PLA==} + playwright-chromium@1.53.0: + resolution: {integrity: sha512-wFIOWSc3037Ql9swJrfCQL/SfcVXbl8X944CzzQmkvh4KqCNp1QMBOGPfltu/+URTfCa5I9qc6HW1YEgY1jeNA==} engines: {node: '>=18'} hasBin: true - playwright-core@1.52.0: - resolution: {integrity: sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==} + playwright-core@1.53.0: + resolution: {integrity: sha512-mGLg8m0pm4+mmtB7M89Xw/GSqoNC+twivl8ITteqvAndachozYe2ZA7srU6uleV1vEdAHYqjq+SV8SNxRRFYBw==} engines: {node: '>=18'} hasBin: true - playwright@1.52.0: - resolution: {integrity: sha512-JAwMNMBlxJ2oD1kce4KPtMkDeKGHQstdpFPcPH3maElAXon/QZeTvtsfXmTMRyO9TslfoYOXkSsvao2nE1ilTw==} + playwright@1.53.0: + resolution: {integrity: sha512-ghGNnIEYZC4E+YtclRn4/p6oYbdPiASELBIYkBXfaTVKreQUYbMUYQDwS12a8F0/HtIjr/CkGjtwABeFPGcS4Q==} engines: {node: '>=18'} hasBin: true @@ -3853,8 +3881,8 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rolldown-vite@6.3.18: - resolution: {integrity: sha512-c1D5JZa82T5HDWTz11ZBm86hvOBejSP1Y9SSzol7HyNQ+rDx88MPbVlbI1gGJaYYLr3rxaJIfNJnSEQBcZXSbA==} + rolldown-vite@6.3.19: + resolution: {integrity: sha512-WhyqhhSrC46rh+r36Dk7B+WN3tVgzbCr5oKEZGHed7fxydNhHmantPY+U36g4wb+GT1dQypc7OeazoFAsbMyfg==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -3893,8 +3921,8 @@ packages: yaml: optional: true - rolldown@1.0.0-beta.11-commit.0a985f3: - resolution: {integrity: sha512-rfwPHnevUxuFPjpltnvjj7hrVcT9Y+GuegBtbKxfaitE2rkoo6HrnzOaIWgAMTOi2y57K9x5177weP/4YR96Xg==} + rolldown@1.0.0-beta.15: + resolution: {integrity: sha512-ep788NsIGl0W5gT+99hBrSGe4Hdhcwc55PqM3O0mR5H0C4ZpGpDGgu9YzTJ8a6mFDLnFnc/LYC+Dszb7oWK/dg==} hasBin: true rollup-plugin-dts@6.2.1: @@ -4030,14 +4058,17 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + strip-literal@3.0.0: + resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} + style-to-object@0.4.4: resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} style-to-object@1.0.5: resolution: {integrity: sha512-rDRwHtoDD3UMMrmZ6BzOW0naTjMsVZLIjsGleSKS/0Oz+cgCfAPRspaqJuE8rDzpKha/nEvnM0IF4seEAZUTKQ==} - styled-components@6.1.18: - resolution: {integrity: sha512-Mvf3gJFzZCkhjY2Y/Fx9z1m3dxbza0uI9H1CbNZm/jSHCojzJhQ0R7bByrlFJINnMzz/gPulpoFFGymNwrsMcw==} + styled-components@6.1.19: + resolution: {integrity: sha512-1v/e3Dl1BknC37cXMhwGomhO8AkYmN41CqyX9xhUDxry1ns3BFQy2lLDRQXJRdVVWB9OHemv/53xaStimvWyuA==} engines: {node: '>= 16'} peerDependencies: react: '>= 16.8.0' @@ -4129,8 +4160,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsx@4.19.4: - resolution: {integrity: sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==} + tsx@4.20.3: + resolution: {integrity: sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ==} engines: {node: '>=18.0.0'} hasBin: true @@ -4138,8 +4169,8 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - typescript-eslint@8.33.1: - resolution: {integrity: sha512-AgRnV4sKkWOiZ0Kjbnf5ytTJXMUZQ0qhSVdQtDNYLPLnjsATEYhaO94GlRQwi4t4gO8FfjM6NnikHeKjUm8D7A==} + typescript-eslint@8.34.0: + resolution: {integrity: sha512-MRpfN7uYjTrTGigFCt8sRyNqJFhjN0WwZecldaqhWm+wy0gaRt8Edb/3cuUy0zdq2opJWT6iXINKAtewnDOltQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -4193,8 +4224,8 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - unrs-resolver@1.7.11: - resolution: {integrity: sha512-OhuAzBImFPjKNgZ2JwHMfGFUA6NSbRegd1+BPjC1Y0E6X9Y/vJ4zKeGmIMqmlYboj6cMNEwKI+xQisrg4J0HaQ==} + unrs-resolver@1.9.0: + resolution: {integrity: sha512-wqaRu4UnzBD2ABTC1kLfBjAqIDZ5YUTr/MLGa7By47JV1bJDSW7jq/ZSLigB7enLe7ubNaJhtnBXgrc/50cEhg==} untyped@2.0.0: resolution: {integrity: sha512-nwNCjxJTjNuLCgFr42fEak5OcLuB3ecca+9ksPFNvtfYSLpjf+iJqSIaSnIile6ZPbKYxI5k2AfXqeopGudK/g==} @@ -4218,8 +4249,8 @@ packages: vfile@6.0.1: resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} - vite-node@3.2.2: - resolution: {integrity: sha512-Xj/jovjZvDXOq2FgLXu8NsY4uHUMWtzVmMC2LkCu9HWdr9Qu1Is5sanX3Z4jOFKdohfaWDnEJWp9pRP0vVpAcA==} + vite-node@3.2.3: + resolution: {integrity: sha512-gc8aAifGuDIpZHrPjuHyP4dpQmYXqWw7D1GmDnWeNWP654UEXzVfQ5IHPSK5HaHkwB/+p1atpYpSdw/2kOv8iQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true @@ -4263,16 +4294,16 @@ packages: yaml: optional: true - vitest@3.2.2: - resolution: {integrity: sha512-fyNn/Rp016Bt5qvY0OQvIUCwW2vnaEBLxP42PmKbNIoasSYjML+8xyeADOPvBe+Xfl/ubIw4og7Lt9jflRsCNw==} + vitest@3.2.3: + resolution: {integrity: sha512-E6U2ZFXe3N/t4f5BwUaVCKRLHqUpk1CBWeMh78UT4VaTPH/2dyvH6ALl29JTovEPu9dVKr/K/J4PkXgrMbw4Ww==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/debug': ^4.1.12 '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.2.2 - '@vitest/ui': 3.2.2 + '@vitest/browser': 3.2.3 + '@vitest/ui': 3.2.3 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -4518,7 +4549,7 @@ snapshots: '@babel/parser': 7.27.0 '@babel/template': 7.27.0 '@babel/types': 7.27.0 - debug: 4.4.0 + debug: 4.4.1 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -4604,7 +4635,7 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0)': + '@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0)': dependencies: '@babel/runtime': 7.23.5 '@emotion/babel-plugin': 11.13.5 @@ -4616,7 +4647,7 @@ snapshots: hoist-non-react-statics: 3.3.2 react: 19.1.0 optionalDependencies: - '@types/react': 19.1.6 + '@types/react': 19.1.8 transitivePeerDependencies: - supports-color @@ -4630,18 +4661,18 @@ snapshots: '@emotion/sheet@1.4.0': {} - '@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.6)(react@19.1.0))(@types/react@19.1.6)(react@19.1.0)': + '@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0)': dependencies: '@babel/runtime': 7.23.5 '@emotion/babel-plugin': 11.13.5 '@emotion/is-prop-valid': 1.3.1 - '@emotion/react': 11.14.0(@types/react@19.1.6)(react@19.1.0) + '@emotion/react': 11.14.0(@types/react@19.1.8)(react@19.1.0) '@emotion/serialize': 1.3.3 '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.0) '@emotion/utils': 1.4.2 react: 19.1.0 optionalDependencies: - '@types/react': 19.1.6 + '@types/react': 19.1.8 transitivePeerDependencies: - supports-color @@ -4957,22 +4988,17 @@ snapshots: '@esbuild/win32-x64@0.25.5': optional: true - '@eslint-community/eslint-utils@4.5.1(eslint@9.28.0(jiti@2.4.2))': - dependencies: - eslint: 9.28.0(jiti@2.4.2) - eslint-visitor-keys: 3.4.3 - - '@eslint-community/eslint-utils@4.7.0(eslint@9.28.0(jiti@2.4.2))': + '@eslint-community/eslint-utils@4.7.0(eslint@9.29.0(jiti@2.4.2))': dependencies: - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.29.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/config-array@0.20.0': + '@eslint/config-array@0.20.1': dependencies: '@eslint/object-schema': 2.1.6 - debug: 4.4.0 + debug: 4.4.1 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -4986,8 +5012,8 @@ snapshots: '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 - debug: 4.4.0 - espree: 10.3.0 + debug: 4.4.1 + espree: 10.4.0 globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.0 @@ -4997,7 +5023,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.28.0': {} + '@eslint/js@9.29.0': {} '@eslint/object-schema@2.1.6': {} @@ -5006,13 +5032,13 @@ snapshots: '@eslint/core': 0.14.0 levn: 0.4.1 - '@generouted/react-router@1.20.0(react-router-dom@7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-router@7.6.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.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1))': + '@generouted/react-router@1.20.0(react-router-dom@7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-router@7.6.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.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': dependencies: fast-glob: 3.3.3 - generouted: 1.20.0(react-router-dom@7.6.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.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1)) + generouted: 1.20.0(react-router-dom@7.6.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.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) react: 19.1.0 react-router: 7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 6.3.3(@types/node@22.15.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1) + vite: 6.3.3(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) transitivePeerDependencies: - react-router-dom @@ -5091,6 +5117,13 @@ snapshots: '@tybys/wasm-util': 0.9.0 optional: true + '@napi-rs/wasm-runtime@0.2.11': + dependencies: + '@emnapi/core': 1.4.3 + '@emnapi/runtime': 1.4.3 + '@tybys/wasm-util': 0.9.0 + optional: true + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -5103,57 +5136,57 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 - '@oxc-project/runtime@0.72.2': {} + '@oxc-project/runtime@0.72.3': {} - '@oxc-project/types@0.72.2': {} + '@oxc-project/types@0.72.3': {} - '@playwright/test@1.52.0': + '@playwright/test@1.53.0': dependencies: - playwright: 1.52.0 + playwright: 1.53.0 '@publint/pack@0.1.2': {} - '@rolldown/binding-darwin-arm64@1.0.0-beta.11-commit.0a985f3': + '@rolldown/binding-darwin-arm64@1.0.0-beta.15': optional: true - '@rolldown/binding-darwin-x64@1.0.0-beta.11-commit.0a985f3': + '@rolldown/binding-darwin-x64@1.0.0-beta.15': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-beta.11-commit.0a985f3': + '@rolldown/binding-freebsd-x64@1.0.0-beta.15': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.11-commit.0a985f3': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.15': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.11-commit.0a985f3': + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.15': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.11-commit.0a985f3': + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.15': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.11-commit.0a985f3': + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.15': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-beta.11-commit.0a985f3': + '@rolldown/binding-linux-x64-musl@1.0.0-beta.15': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-beta.11-commit.0a985f3': + '@rolldown/binding-wasm32-wasi@1.0.0-beta.15': dependencies: '@napi-rs/wasm-runtime': 0.2.10 optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.11-commit.0a985f3': + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.15': optional: true - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.11-commit.0a985f3': + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.15': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.11-commit.0a985f3': + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.15': optional: true - '@rolldown/pluginutils@1.0.0-beta.11': {} + '@rolldown/pluginutils@1.0.0-beta.15': {} - '@rolldown/pluginutils@1.0.0-beta.11-commit.0a985f3': {} + '@rolldown/pluginutils@1.0.0-beta.16': {} '@rollup/plugin-alias@5.1.1(rollup@4.37.0)': optionalDependencies: @@ -5383,7 +5416,7 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 22.15.30 + '@types/node': 22.15.31 '@types/hast@3.0.3': dependencies: @@ -5398,7 +5431,7 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 22.15.30 + '@types/node': 22.15.31 '@types/mdast@4.0.3': dependencies: @@ -5408,7 +5441,7 @@ snapshots: '@types/ms@0.7.34': {} - '@types/node@22.15.30': + '@types/node@22.15.31': dependencies: undici-types: 6.21.0 @@ -5420,16 +5453,16 @@ snapshots: dependencies: '@types/react': 18.3.20 - '@types/react-dom@19.1.6(@types/react@19.1.6)': + '@types/react-dom@19.1.6(@types/react@19.1.8)': dependencies: - '@types/react': 19.1.6 + '@types/react': 19.1.8 '@types/react@18.3.20': dependencies: '@types/prop-types': 15.7.11 csstype: 3.1.3 - '@types/react@19.1.6': + '@types/react@19.1.8': dependencies: csstype: 3.1.3 @@ -5447,15 +5480,15 @@ snapshots: '@types/unist@3.0.2': {} - '@typescript-eslint/eslint-plugin@8.33.1(@typescript-eslint/parser@8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.34.0(@typescript-eslint/parser@8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.33.1 - '@typescript-eslint/type-utils': 8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.33.1 - eslint: 9.28.0(jiti@2.4.2) + '@typescript-eslint/parser': 8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.34.0 + '@typescript-eslint/type-utils': 8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.34.0 + eslint: 9.29.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -5464,14 +5497,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/parser@8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/scope-manager': 8.33.1 - '@typescript-eslint/types': 8.33.1 - '@typescript-eslint/typescript-estree': 8.33.1(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.33.1 - debug: 4.4.0 - eslint: 9.28.0(jiti@2.4.2) + '@typescript-eslint/scope-manager': 8.34.0 + '@typescript-eslint/types': 8.34.0 + '@typescript-eslint/typescript-estree': 8.34.0(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.34.0 + debug: 4.4.1 + eslint: 9.29.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -5480,155 +5513,176 @@ snapshots: dependencies: '@typescript-eslint/tsconfig-utils': 8.33.1(typescript@5.8.3) '@typescript-eslint/types': 8.33.1 - debug: 4.4.0 + debug: 4.4.1 typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.31.0': + '@typescript-eslint/project-service@8.34.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 8.31.0 - '@typescript-eslint/visitor-keys': 8.31.0 + '@typescript-eslint/tsconfig-utils': 8.34.0(typescript@5.8.3) + '@typescript-eslint/types': 8.34.0 + debug: 4.4.1 + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color '@typescript-eslint/scope-manager@8.33.1': dependencies: '@typescript-eslint/types': 8.33.1 '@typescript-eslint/visitor-keys': 8.33.1 + '@typescript-eslint/scope-manager@8.34.0': + dependencies: + '@typescript-eslint/types': 8.34.0 + '@typescript-eslint/visitor-keys': 8.34.0 + '@typescript-eslint/tsconfig-utils@8.33.1(typescript@5.8.3)': dependencies: typescript: 5.8.3 - '@typescript-eslint/type-utils@8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/tsconfig-utils@8.34.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.33.1(typescript@5.8.3) - '@typescript-eslint/utils': 8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - debug: 4.4.0 - eslint: 9.28.0(jiti@2.4.2) - ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/types@8.31.0': {} - - '@typescript-eslint/types@8.33.1': {} - - '@typescript-eslint/typescript-estree@8.31.0(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 8.31.0 - '@typescript-eslint/visitor-keys': 8.31.0 - debug: 4.4.0 - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.1 + '@typescript-eslint/typescript-estree': 8.34.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + debug: 4.4.1 + eslint: 9.29.0(jiti@2.4.2) ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: - supports-color + '@typescript-eslint/types@8.33.1': {} + + '@typescript-eslint/types@8.34.0': {} + '@typescript-eslint/typescript-estree@8.33.1(typescript@5.8.3)': dependencies: '@typescript-eslint/project-service': 8.33.1(typescript@5.8.3) '@typescript-eslint/tsconfig-utils': 8.33.1(typescript@5.8.3) '@typescript-eslint/types': 8.33.1 '@typescript-eslint/visitor-keys': 8.33.1 - debug: 4.4.0 + debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.1 + semver: 7.7.2 ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.31.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.34.0(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.5.1(eslint@9.28.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.31.0 - '@typescript-eslint/types': 8.31.0 - '@typescript-eslint/typescript-estree': 8.31.0(typescript@5.8.3) - eslint: 9.28.0(jiti@2.4.2) + '@typescript-eslint/project-service': 8.34.0(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.34.0(typescript@5.8.3) + '@typescript-eslint/types': 8.34.0 + '@typescript-eslint/visitor-keys': 8.34.0 + debug: 4.4.1 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.2 + ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/utils@8.33.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) '@typescript-eslint/scope-manager': 8.33.1 '@typescript-eslint/types': 8.33.1 '@typescript-eslint/typescript-estree': 8.33.1(typescript@5.8.3) - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.29.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.31.0': + '@typescript-eslint/utils@8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 8.31.0 - eslint-visitor-keys: 4.2.0 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.34.0 + '@typescript-eslint/types': 8.34.0 + '@typescript-eslint/typescript-estree': 8.34.0(typescript@5.8.3) + eslint: 9.29.0(jiti@2.4.2) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color '@typescript-eslint/visitor-keys@8.33.1': dependencies: '@typescript-eslint/types': 8.33.1 eslint-visitor-keys: 4.2.0 + '@typescript-eslint/visitor-keys@8.34.0': + dependencies: + '@typescript-eslint/types': 8.34.0 + eslint-visitor-keys: 4.2.0 + '@ungap/structured-clone@1.2.0': {} - '@unrs/resolver-binding-darwin-arm64@1.7.11': + '@unrs/resolver-binding-android-arm-eabi@1.9.0': optional: true - '@unrs/resolver-binding-darwin-x64@1.7.11': + '@unrs/resolver-binding-android-arm64@1.9.0': optional: true - '@unrs/resolver-binding-freebsd-x64@1.7.11': + '@unrs/resolver-binding-darwin-arm64@1.9.0': optional: true - '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.11': + '@unrs/resolver-binding-darwin-x64@1.9.0': optional: true - '@unrs/resolver-binding-linux-arm-musleabihf@1.7.11': + '@unrs/resolver-binding-freebsd-x64@1.9.0': optional: true - '@unrs/resolver-binding-linux-arm64-gnu@1.7.11': + '@unrs/resolver-binding-linux-arm-gnueabihf@1.9.0': optional: true - '@unrs/resolver-binding-linux-arm64-musl@1.7.11': + '@unrs/resolver-binding-linux-arm-musleabihf@1.9.0': optional: true - '@unrs/resolver-binding-linux-ppc64-gnu@1.7.11': + '@unrs/resolver-binding-linux-arm64-gnu@1.9.0': optional: true - '@unrs/resolver-binding-linux-riscv64-gnu@1.7.11': + '@unrs/resolver-binding-linux-arm64-musl@1.9.0': optional: true - '@unrs/resolver-binding-linux-riscv64-musl@1.7.11': + '@unrs/resolver-binding-linux-ppc64-gnu@1.9.0': optional: true - '@unrs/resolver-binding-linux-s390x-gnu@1.7.11': + '@unrs/resolver-binding-linux-riscv64-gnu@1.9.0': optional: true - '@unrs/resolver-binding-linux-x64-gnu@1.7.11': + '@unrs/resolver-binding-linux-riscv64-musl@1.9.0': optional: true - '@unrs/resolver-binding-linux-x64-musl@1.7.11': + '@unrs/resolver-binding-linux-s390x-gnu@1.9.0': optional: true - '@unrs/resolver-binding-wasm32-wasi@1.7.11': + '@unrs/resolver-binding-linux-x64-gnu@1.9.0': + optional: true + + '@unrs/resolver-binding-linux-x64-musl@1.9.0': + optional: true + + '@unrs/resolver-binding-wasm32-wasi@1.9.0': dependencies: - '@napi-rs/wasm-runtime': 0.2.10 + '@napi-rs/wasm-runtime': 0.2.11 optional: true - '@unrs/resolver-binding-win32-arm64-msvc@1.7.11': + '@unrs/resolver-binding-win32-arm64-msvc@1.9.0': optional: true - '@unrs/resolver-binding-win32-ia32-msvc@1.7.11': + '@unrs/resolver-binding-win32-ia32-msvc@1.9.0': optional: true - '@unrs/resolver-binding-win32-x64-msvc@1.7.11': + '@unrs/resolver-binding-win32-x64-msvc@1.9.0': optional: true '@vitejs/release-scripts@1.5.0': @@ -5640,44 +5694,45 @@ snapshots: publint: 0.3.9 semver: 7.7.1 - '@vitest/expect@3.2.2': + '@vitest/expect@3.2.3': dependencies: '@types/chai': 5.2.2 - '@vitest/spy': 3.2.2 - '@vitest/utils': 3.2.2 + '@vitest/spy': 3.2.3 + '@vitest/utils': 3.2.3 chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.2(vite@6.3.3(@types/node@22.15.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1))': + '@vitest/mocker@3.2.3(vite@6.3.3(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': dependencies: - '@vitest/spy': 3.2.2 + '@vitest/spy': 3.2.3 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.3.3(@types/node@22.15.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1) + vite: 6.3.3(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - '@vitest/pretty-format@3.2.2': + '@vitest/pretty-format@3.2.3': dependencies: tinyrainbow: 2.0.0 - '@vitest/runner@3.2.2': + '@vitest/runner@3.2.3': dependencies: - '@vitest/utils': 3.2.2 + '@vitest/utils': 3.2.3 pathe: 2.0.3 + strip-literal: 3.0.0 - '@vitest/snapshot@3.2.2': + '@vitest/snapshot@3.2.3': dependencies: - '@vitest/pretty-format': 3.2.2 + '@vitest/pretty-format': 3.2.3 magic-string: 0.30.17 pathe: 2.0.3 - '@vitest/spy@3.2.2': + '@vitest/spy@3.2.3': dependencies: tinyspy: 4.0.3 - '@vitest/utils@3.2.2': + '@vitest/utils@3.2.3': dependencies: - '@vitest/pretty-format': 3.2.2 + '@vitest/pretty-format': 3.2.3 loupe: 3.1.3 tinyrainbow: 2.0.0 @@ -5685,8 +5740,14 @@ snapshots: dependencies: acorn: 8.14.1 + acorn-jsx@5.3.2(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + acorn@8.14.1: {} + acorn@8.15.0: {} + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -6132,71 +6193,71 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-compat-utils@0.5.1(eslint@9.28.0(jiti@2.4.2)): + eslint-compat-utils@0.5.1(eslint@9.29.0(jiti@2.4.2)): dependencies: - eslint: 9.28.0(jiti@2.4.2) - semver: 7.7.1 + eslint: 9.29.0(jiti@2.4.2) + semver: 7.7.2 - eslint-import-context@0.1.8(unrs-resolver@1.7.11): + eslint-import-context@0.1.8(unrs-resolver@1.9.0): dependencies: get-tsconfig: 4.10.1 stable-hash-x: 0.1.1 optionalDependencies: - unrs-resolver: 1.7.11 + unrs-resolver: 1.9.0 - eslint-plugin-es-x@7.8.0(eslint@9.28.0(jiti@2.4.2)): + eslint-plugin-es-x@7.8.0(eslint@9.29.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.5.1(eslint@9.28.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 - eslint: 9.28.0(jiti@2.4.2) - eslint-compat-utils: 0.5.1(eslint@9.28.0(jiti@2.4.2)) + eslint: 9.29.0(jiti@2.4.2) + eslint-compat-utils: 0.5.1(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-import-x@4.15.1(@typescript-eslint/utils@8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2)): + eslint-plugin-import-x@4.15.2(@typescript-eslint/utils@8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2)): dependencies: - '@typescript-eslint/types': 8.33.1 + '@typescript-eslint/types': 8.34.0 comment-parser: 1.4.1 debug: 4.4.1 - eslint: 9.28.0(jiti@2.4.2) - eslint-import-context: 0.1.8(unrs-resolver@1.7.11) + eslint: 9.29.0(jiti@2.4.2) + eslint-import-context: 0.1.8(unrs-resolver@1.9.0) is-glob: 4.0.3 minimatch: 10.0.1 semver: 7.7.2 stable-hash-x: 0.1.1 - unrs-resolver: 1.7.11 + unrs-resolver: 1.9.0 optionalDependencies: - '@typescript-eslint/utils': 8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) transitivePeerDependencies: - supports-color - eslint-plugin-n@17.19.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3): + eslint-plugin-n@17.20.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): dependencies: - '@eslint-community/eslint-utils': 4.5.1(eslint@9.28.0(jiti@2.4.2)) - '@typescript-eslint/utils': 8.31.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) + '@typescript-eslint/utils': 8.33.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) enhanced-resolve: 5.17.1 - eslint: 9.28.0(jiti@2.4.2) - eslint-plugin-es-x: 7.8.0(eslint@9.28.0(jiti@2.4.2)) - get-tsconfig: 4.10.0 + eslint: 9.29.0(jiti@2.4.2) + eslint-plugin-es-x: 7.8.0(eslint@9.29.0(jiti@2.4.2)) + get-tsconfig: 4.10.1 globals: 15.12.0 ignore: 5.3.2 minimatch: 9.0.5 - semver: 7.7.1 + semver: 7.7.2 ts-declaration-location: 1.0.7(typescript@5.8.3) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-regexp@2.8.0(eslint@9.28.0(jiti@2.4.2)): + eslint-plugin-regexp@2.9.0(eslint@9.29.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.5.1(eslint@9.28.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 comment-parser: 1.4.1 - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.29.0(jiti@2.4.2) jsdoc-type-pratt-parser: 4.0.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 scslre: 0.3.0 - eslint-scope@8.3.0: + eslint-scope@8.4.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 @@ -6205,15 +6266,17 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.28.0(jiti@2.4.2): + eslint-visitor-keys@4.2.1: {} + + eslint@9.29.0(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.5.1(eslint@9.28.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.20.0 + '@eslint/config-array': 0.20.1 '@eslint/config-helpers': 0.2.1 '@eslint/core': 0.14.0 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.28.0 + '@eslint/js': 9.29.0 '@eslint/plugin-kit': 0.3.1 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 @@ -6223,11 +6286,11 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.0 + debug: 4.4.1 escape-string-regexp: 4.0.0 - eslint-scope: 8.3.0 - eslint-visitor-keys: 4.2.0 - espree: 10.3.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -6247,11 +6310,11 @@ snapshots: transitivePeerDependencies: - supports-color - espree@10.3.0: + espree@10.4.0: dependencies: - acorn: 8.14.1 - acorn-jsx: 5.3.2(acorn@8.14.1) - eslint-visitor-keys: 4.2.0 + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 4.2.1 esquery@1.5.0: dependencies: @@ -6394,17 +6457,17 @@ snapshots: function-bind@1.1.2: {} - generouted@1.11.7(react-router-dom@7.6.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.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1)): + generouted@1.11.7(react-router-dom@7.6.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.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): dependencies: react: 19.1.0 react-router-dom: 7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 6.3.3(@types/node@22.15.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1) + vite: 6.3.3(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - generouted@1.20.0(react-router-dom@7.6.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.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1)): + generouted@1.20.0(react-router-dom@7.6.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.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): dependencies: react: 19.1.0 react-router-dom: 7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 6.3.3(@types/node@22.15.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1) + vite: 6.3.3(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) gensync@1.0.0-beta.2: {} @@ -6414,10 +6477,6 @@ snapshots: get-them-args@1.3.2: {} - get-tsconfig@4.10.0: - dependencies: - resolve-pkg-maps: 1.0.0 - get-tsconfig@4.10.1: dependencies: resolve-pkg-maps: 1.0.0 @@ -6569,6 +6628,8 @@ snapshots: js-tokens@4.0.0: {} + js-tokens@9.0.1: {} + js-yaml@4.1.0: dependencies: argparse: 2.0.1 @@ -7013,7 +7074,7 @@ snapshots: micromark@4.0.0: dependencies: '@types/debug': 4.1.12 - debug: 4.4.0 + debug: 4.4.1 decode-named-character-reference: 1.0.2 devlop: 1.1.0 micromark-core-commonmark: 2.0.0 @@ -7203,15 +7264,15 @@ snapshots: exsolve: 1.0.4 pathe: 2.0.3 - playwright-chromium@1.52.0: + playwright-chromium@1.53.0: dependencies: - playwright-core: 1.52.0 + playwright-core: 1.53.0 - playwright-core@1.52.0: {} + playwright-core@1.53.0: {} - playwright@1.52.0: + playwright@1.53.0: dependencies: - playwright-core: 1.52.0 + playwright-core: 1.53.0 optionalDependencies: fsevents: 2.3.2 @@ -7526,42 +7587,42 @@ snapshots: rfdc@1.4.1: {} - rolldown-vite@6.3.18(@types/node@22.15.30)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.19.4)(yaml@2.7.1): + rolldown-vite@6.3.19(@types/node@22.15.31)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1): dependencies: - '@oxc-project/runtime': 0.72.2 + '@oxc-project/runtime': 0.72.3 fdir: 6.4.4(picomatch@4.0.2) lightningcss: 1.30.1 picomatch: 4.0.2 postcss: 8.5.3 - rolldown: 1.0.0-beta.11-commit.0a985f3 - tinyglobby: 0.2.13 + rolldown: 1.0.0-beta.15 + tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 22.15.30 + '@types/node': 22.15.31 esbuild: 0.25.5 fsevents: 2.3.3 jiti: 2.4.2 - tsx: 4.19.4 + tsx: 4.20.3 yaml: 2.7.1 - rolldown@1.0.0-beta.11-commit.0a985f3: + rolldown@1.0.0-beta.15: dependencies: - '@oxc-project/runtime': 0.72.2 - '@oxc-project/types': 0.72.2 - '@rolldown/pluginutils': 1.0.0-beta.11-commit.0a985f3 + '@oxc-project/runtime': 0.72.3 + '@oxc-project/types': 0.72.3 + '@rolldown/pluginutils': 1.0.0-beta.15 ansis: 4.1.0 optionalDependencies: - '@rolldown/binding-darwin-arm64': 1.0.0-beta.11-commit.0a985f3 - '@rolldown/binding-darwin-x64': 1.0.0-beta.11-commit.0a985f3 - '@rolldown/binding-freebsd-x64': 1.0.0-beta.11-commit.0a985f3 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.11-commit.0a985f3 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.11-commit.0a985f3 - '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.11-commit.0a985f3 - '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.11-commit.0a985f3 - '@rolldown/binding-linux-x64-musl': 1.0.0-beta.11-commit.0a985f3 - '@rolldown/binding-wasm32-wasi': 1.0.0-beta.11-commit.0a985f3 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.11-commit.0a985f3 - '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.11-commit.0a985f3 - '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.11-commit.0a985f3 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.15 + '@rolldown/binding-darwin-x64': 1.0.0-beta.15 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.15 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.15 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.15 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.15 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.15 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.15 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.15 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.15 + '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.15 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.15 rollup-plugin-dts@6.2.1(rollup@4.37.0)(typescript@5.8.3): dependencies: @@ -7690,6 +7751,10 @@ snapshots: strip-json-comments@3.1.1: {} + strip-literal@3.0.0: + dependencies: + js-tokens: 9.0.1 + style-to-object@0.4.4: dependencies: inline-style-parser: 0.1.1 @@ -7698,7 +7763,7 @@ snapshots: dependencies: inline-style-parser: 0.2.2 - styled-components@6.1.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + styled-components@6.1.19(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@emotion/is-prop-valid': 1.2.2 '@emotion/unitless': 0.8.1 @@ -7787,10 +7852,10 @@ snapshots: tslib@2.8.1: optional: true - tsx@4.19.4: + tsx@4.20.3: dependencies: esbuild: 0.25.5 - get-tsconfig: 4.10.0 + get-tsconfig: 4.10.1 optionalDependencies: fsevents: 2.3.3 @@ -7798,12 +7863,12 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3): + typescript-eslint@8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.33.1(@typescript-eslint/parser@8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': 8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.28.0(jiti@2.4.2) + '@typescript-eslint/eslint-plugin': 8.34.0(@typescript-eslint/parser@8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.29.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -7891,27 +7956,29 @@ snapshots: universalify@2.0.1: {} - unrs-resolver@1.7.11: + unrs-resolver@1.9.0: dependencies: napi-postinstall: 0.2.4 optionalDependencies: - '@unrs/resolver-binding-darwin-arm64': 1.7.11 - '@unrs/resolver-binding-darwin-x64': 1.7.11 - '@unrs/resolver-binding-freebsd-x64': 1.7.11 - '@unrs/resolver-binding-linux-arm-gnueabihf': 1.7.11 - '@unrs/resolver-binding-linux-arm-musleabihf': 1.7.11 - '@unrs/resolver-binding-linux-arm64-gnu': 1.7.11 - '@unrs/resolver-binding-linux-arm64-musl': 1.7.11 - '@unrs/resolver-binding-linux-ppc64-gnu': 1.7.11 - '@unrs/resolver-binding-linux-riscv64-gnu': 1.7.11 - '@unrs/resolver-binding-linux-riscv64-musl': 1.7.11 - '@unrs/resolver-binding-linux-s390x-gnu': 1.7.11 - '@unrs/resolver-binding-linux-x64-gnu': 1.7.11 - '@unrs/resolver-binding-linux-x64-musl': 1.7.11 - '@unrs/resolver-binding-wasm32-wasi': 1.7.11 - '@unrs/resolver-binding-win32-arm64-msvc': 1.7.11 - '@unrs/resolver-binding-win32-ia32-msvc': 1.7.11 - '@unrs/resolver-binding-win32-x64-msvc': 1.7.11 + '@unrs/resolver-binding-android-arm-eabi': 1.9.0 + '@unrs/resolver-binding-android-arm64': 1.9.0 + '@unrs/resolver-binding-darwin-arm64': 1.9.0 + '@unrs/resolver-binding-darwin-x64': 1.9.0 + '@unrs/resolver-binding-freebsd-x64': 1.9.0 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.9.0 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.9.0 + '@unrs/resolver-binding-linux-arm64-gnu': 1.9.0 + '@unrs/resolver-binding-linux-arm64-musl': 1.9.0 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.9.0 + '@unrs/resolver-binding-linux-riscv64-gnu': 1.9.0 + '@unrs/resolver-binding-linux-riscv64-musl': 1.9.0 + '@unrs/resolver-binding-linux-s390x-gnu': 1.9.0 + '@unrs/resolver-binding-linux-x64-gnu': 1.9.0 + '@unrs/resolver-binding-linux-x64-musl': 1.9.0 + '@unrs/resolver-binding-wasm32-wasi': 1.9.0 + '@unrs/resolver-binding-win32-arm64-msvc': 1.9.0 + '@unrs/resolver-binding-win32-ia32-msvc': 1.9.0 + '@unrs/resolver-binding-win32-x64-msvc': 1.9.0 untyped@2.0.0: dependencies: @@ -7944,13 +8011,13 @@ snapshots: unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 - vite-node@3.2.2(@types/node@22.15.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1): + vite-node@3.2.3(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: cac: 6.7.14 debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.3.3(@types/node@22.15.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1) + vite: 6.3.3(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) transitivePeerDependencies: - '@types/node' - jiti @@ -7965,7 +8032,7 @@ snapshots: - tsx - yaml - vite@6.3.3(@types/node@22.15.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1): + vite@6.3.3(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: esbuild: 0.25.3 fdir: 6.4.4(picomatch@4.0.2) @@ -7974,23 +8041,23 @@ snapshots: rollup: 4.37.0 tinyglobby: 0.2.13 optionalDependencies: - '@types/node': 22.15.30 + '@types/node': 22.15.31 fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.30.1 - tsx: 4.19.4 + tsx: 4.20.3 yaml: 2.7.1 - vitest@3.2.2(@types/debug@4.1.12)(@types/node@22.15.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1): + vitest@3.2.3(@types/debug@4.1.12)(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: '@types/chai': 5.2.2 - '@vitest/expect': 3.2.2 - '@vitest/mocker': 3.2.2(vite@6.3.3(@types/node@22.15.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1)) - '@vitest/pretty-format': 3.2.2 - '@vitest/runner': 3.2.2 - '@vitest/snapshot': 3.2.2 - '@vitest/spy': 3.2.2 - '@vitest/utils': 3.2.2 + '@vitest/expect': 3.2.3 + '@vitest/mocker': 3.2.3(vite@6.3.3(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + '@vitest/pretty-format': 3.2.3 + '@vitest/runner': 3.2.3 + '@vitest/snapshot': 3.2.3 + '@vitest/spy': 3.2.3 + '@vitest/utils': 3.2.3 chai: 5.2.0 debug: 4.4.1 expect-type: 1.2.1 @@ -8003,12 +8070,12 @@ snapshots: tinyglobby: 0.2.14 tinypool: 1.1.0 tinyrainbow: 2.0.0 - vite: 6.3.3(@types/node@22.15.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1) - vite-node: 3.2.2(@types/node@22.15.30)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.7.1) + vite: 6.3.3(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite-node: 3.2.3(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.15.30 + '@types/node': 22.15.31 transitivePeerDependencies: - jiti - less diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 295c317a3..30ad01cd0 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -5,4 +5,4 @@ packages: catalogs: rolldown-vite: - vite: npm:rolldown-vite@^6.3.18 + vite: npm:rolldown-vite@^6.3.19 From 18e89ce2838440363b77185e2f13cc604d697aaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0?= Date: Tue, 17 Jun 2025 09:48:49 +0900 Subject: [PATCH 044/313] test: use `expect.poll` instead of `untilUpdated` (#511) --- .../__tests__/class-components.spec.ts | 16 +++++----- .../__tests__/compiler-react-18.spec.ts | 4 +-- .../compiler/__tests__/compiler.spec.ts | 4 +-- .../__tests__/hook-with-jsx.spec.ts | 10 ++----- playground/mdx/__tests__/mdx.spec.ts | 17 ++++------- .../react-classic/__tests__/react.spec.ts | 4 +-- .../react-emotion/__tests__/react.spec.ts | 8 ++--- playground/react/__tests__/react.spec.ts | 30 +++++++++---------- .../ssr-react/__tests__/ssr-react.spec.ts | 11 ++++--- playground/test-utils.ts | 21 ------------- playground/vitest.config.e2e.ts | 5 ++++ 11 files changed, 48 insertions(+), 82 deletions(-) diff --git a/playground/class-components/__tests__/class-components.spec.ts b/playground/class-components/__tests__/class-components.spec.ts index 74875caf2..8ebb42c84 100644 --- a/playground/class-components/__tests__/class-components.spec.ts +++ b/playground/class-components/__tests__/class-components.spec.ts @@ -1,11 +1,5 @@ import { expect, test } from 'vitest' -import { - editFile, - isServe, - page, - untilBrowserLogAfter, - untilUpdated, -} from '~utils' +import { editFile, isServe, page, untilBrowserLogAfter } from '~utils' test('should render', async () => { expect(await page.textContent('span')).toMatch('Hello World') @@ -18,13 +12,17 @@ if (isServe) { () => page.textContent('span'), '[vite] hot updated: /src/App.tsx', ) - await untilUpdated(() => page.textContent('span'), 'Hello class components') + 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 untilUpdated(() => page.textContent('span'), 'Hi class components') + await expect + .poll(() => page.textContent('span')) + .toMatch('Hi class components') }) } diff --git a/playground/compiler-react-18/__tests__/compiler-react-18.spec.ts b/playground/compiler-react-18/__tests__/compiler-react-18.spec.ts index 545505ff2..742b6f37a 100644 --- a/playground/compiler-react-18/__tests__/compiler-react-18.spec.ts +++ b/playground/compiler-react-18/__tests__/compiler-react-18.spec.ts @@ -1,5 +1,5 @@ import { expect, test } from 'vitest' -import { editFile, isServe, page, untilUpdated } from '~utils' +import { editFile, isServe, page } from '~utils' test('should render', async () => { expect(await page.textContent('button')).toMatch('count is 0') @@ -11,5 +11,5 @@ test.runIf(isServe)('should hmr', async () => { editFile('src/App.tsx', (code) => code.replace('count is {count}', 'count is {count}!'), ) - await untilUpdated(() => page.textContent('button'), 'count is 1!') + await expect.poll(() => page.textContent('button')).toMatch('count is 1!') }) diff --git a/playground/compiler/__tests__/compiler.spec.ts b/playground/compiler/__tests__/compiler.spec.ts index 545505ff2..742b6f37a 100644 --- a/playground/compiler/__tests__/compiler.spec.ts +++ b/playground/compiler/__tests__/compiler.spec.ts @@ -1,5 +1,5 @@ import { expect, test } from 'vitest' -import { editFile, isServe, page, untilUpdated } from '~utils' +import { editFile, isServe, page } from '~utils' test('should render', async () => { expect(await page.textContent('button')).toMatch('count is 0') @@ -11,5 +11,5 @@ test.runIf(isServe)('should hmr', async () => { editFile('src/App.tsx', (code) => code.replace('count is {count}', 'count is {count}!'), ) - await untilUpdated(() => page.textContent('button'), 'count is 1!') + await expect.poll(() => page.textContent('button')).toMatch('count is 1!') }) 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 570ca8174..a07c15092 100644 --- a/playground/hook-with-jsx/__tests__/hook-with-jsx.spec.ts +++ b/playground/hook-with-jsx/__tests__/hook-with-jsx.spec.ts @@ -1,11 +1,5 @@ import { expect, test } from 'vitest' -import { - editFile, - isServe, - page, - untilBrowserLogAfter, - untilUpdated, -} from '~utils' +import { editFile, isServe, page, untilBrowserLogAfter } from '~utils' test('should render', async () => { expect(await page.textContent('button')).toMatch('count is 0') @@ -22,6 +16,6 @@ if (isServe) { () => page.textContent('button'), '[vite] hot updated: /src/App.tsx', ) - await untilUpdated(() => page.textContent('button'), 'count is 1!') + await expect.poll(() => page.textContent('button')).toMatch('count is 1!') }) } diff --git a/playground/mdx/__tests__/mdx.spec.ts b/playground/mdx/__tests__/mdx.spec.ts index ccf2aa854..12a510613 100644 --- a/playground/mdx/__tests__/mdx.spec.ts +++ b/playground/mdx/__tests__/mdx.spec.ts @@ -1,11 +1,5 @@ import { expect, test } from 'vitest' -import { - editFile, - isServe, - page, - untilBrowserLogAfter, - untilUpdated, -} from '~utils' +import { editFile, isServe, page, untilBrowserLogAfter } from '~utils' test('should render', async () => { expect(await page.textContent('h1')).toMatch('Vite + MDX') @@ -24,7 +18,7 @@ if (isServe) { () => page.textContent('h1'), '[vite] hot updated: /src/demo.mdx', ) - await untilUpdated(() => page.textContent('h1'), 'Updated') + await expect.poll(() => page.textContent('h1')).toMatch('Updated') }) test('should hmr with .md extension', async () => { @@ -35,9 +29,8 @@ if (isServe) { ), '[vite] hot updated: /src/demo2.md', ) - await untilUpdated( - () => page.getByText('.md extension hmr works.').textContent(), - '.md extension hmr works. This is bold text.', - ) + 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 c0cd2b73e..c2c55c4ba 100644 --- a/playground/react-classic/__tests__/react.spec.ts +++ b/playground/react-classic/__tests__/react.spec.ts @@ -1,5 +1,5 @@ import { expect, test } from 'vitest' -import { editFile, isServe, page, untilUpdated, viteTestUrl } from '~utils' +import { editFile, isServe, page, viteTestUrl } from '~utils' test('should render', async () => { expect(await page.textContent('h1')).toMatch('Hello Vite + React') @@ -13,7 +13,7 @@ test('should update', async () => { test.runIf(isServe)('should hmr', async () => { editFile('App.jsx', (code) => code.replace('Vite + React', 'Updated')) - await untilUpdated(() => page.textContent('h1'), 'Hello Updated') + await expect.poll(() => page.textContent('h1')).toMatch('Hello Updated') // preserve state expect(await page.textContent('button')).toMatch('count is: 1') }) diff --git a/playground/react-emotion/__tests__/react.spec.ts b/playground/react-emotion/__tests__/react.spec.ts index dc98fb37b..ff4731ee3 100644 --- a/playground/react-emotion/__tests__/react.spec.ts +++ b/playground/react-emotion/__tests__/react.spec.ts @@ -1,5 +1,5 @@ import { expect, test } from 'vitest' -import { editFile, getColor, isServe, page, untilUpdated } from '~utils' +import { editFile, getColor, isServe, page } from '~utils' test('should render', async () => { expect(await page.textContent('h1')).toMatch( @@ -17,13 +17,13 @@ test.runIf(isServe)('should hmr', async () => { editFile('App.jsx', (code) => code.replace('Vite + React + @emotion/react', 'Updated'), ) - await untilUpdated(() => page.textContent('h1'), 'Hello Updated') + await expect.poll(() => page.textContent('h1')).toMatch('Hello Updated') editFile('Counter.jsx', (code) => code.replace('color: #646cff;', 'color: #d26ac2;'), ) - await untilUpdated(() => getColor('code'), '#d26ac2') + await expect.poll(() => getColor('code')).toMatch('#d26ac2') // preserve state expect(await page.textContent('button')).toMatch('count is: 1') @@ -47,7 +47,7 @@ test('should update button style', async () => { code.replace('border: 2px solid #000', 'border: 4px solid red'), ) - await untilUpdated(getButtonBorderStyle, '4px solid rgb(255, 0, 0)') + await expect.poll(getButtonBorderStyle).toMatch('4px solid rgb(255, 0, 0)') // preserve state expect(await page.textContent('button')).toMatch('count is: 1') diff --git a/playground/react/__tests__/react.spec.ts b/playground/react/__tests__/react.spec.ts index 48128f2d9..f9d4275af 100644 --- a/playground/react/__tests__/react.spec.ts +++ b/playground/react/__tests__/react.spec.ts @@ -6,7 +6,6 @@ import { isServe, page, untilBrowserLogAfter, - untilUpdated, viteTestUrl, } from '~utils' @@ -24,14 +23,16 @@ test.runIf(isServe)('should hmr', async () => { editFile('App.jsx', (code) => code.replace('Vite + React', 'Vite + React Updated'), ) - await untilUpdated(() => page.textContent('h1'), 'Hello Vite + React Updated') + await expect + .poll(() => page.textContent('h1')) + .toMatch('Hello Vite + React Updated') // preserve state expect(await page.textContent('#state-button')).toMatch('count is: 1') editFile('App.jsx', (code) => code.replace('Vite + React Updated', 'Vite + React'), ) - await untilUpdated(() => page.textContent('h1'), 'Hello Vite + React') + await expect.poll(() => page.textContent('h1')).toMatch('Hello Vite + React') }) test.runIf(isServe)('should not invalidate when code is invalid', async () => { @@ -39,10 +40,9 @@ test.runIf(isServe)('should not invalidate when code is invalid', async () => { code.replace('
', '
'), ) - await untilUpdated( - () => page.textContent('vite-error-overlay .message-body'), - 'Unexpected token', - ) + 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') @@ -90,7 +90,7 @@ if (!isBuild) { 'Parent rendered', ], ) - await untilUpdated(() => page.textContent('#parent'), 'Updated') + await expect.poll(() => page.textContent('#parent')).toMatch('Updated') }) // #3301 @@ -122,10 +122,9 @@ if (!isBuild) { 'Parent rendered', ], ) - await untilUpdated( - () => page.textContent('#context-provider'), - 'context provider updated', - ) + await expect + .poll(() => page.textContent('#context-provider')) + .toMatch('context provider updated') }) test('should hmr files with "react/jsx-runtime"', async () => { @@ -143,10 +142,9 @@ if (!isBuild) { ), ['[vite] hot updated: /hmr/jsx-import-runtime.js'], ) - await untilUpdated( - () => page.textContent('#jsx-import-runtime'), - 'JSX import runtime updated', - ) + await expect + .poll(() => page.textContent('#jsx-import-runtime')) + .toMatch('JSX import runtime updated') expect(await page.textContent('#state-button')).toMatch('count is: 1') }) diff --git a/playground/ssr-react/__tests__/ssr-react.spec.ts b/playground/ssr-react/__tests__/ssr-react.spec.ts index 5455cde25..5be3bed9f 100644 --- a/playground/ssr-react/__tests__/ssr-react.spec.ts +++ b/playground/ssr-react/__tests__/ssr-react.spec.ts @@ -6,7 +6,6 @@ import { isBuild, page, untilBrowserLogAfter, - untilUpdated, viteTestUrl as url, } from '~utils' @@ -51,11 +50,11 @@ test('/', async () => { test.skipIf(isBuild)('hmr', async () => { await untilBrowserLogAfter(() => page.goto(url), 'hydrated') - await untilUpdated(() => page.textContent('h1'), 'Home') + await expect.poll(() => page.textContent('h1')).toMatch('Home') editFile('src/pages/Home.jsx', (code) => code.replace('

Home', '

changed'), ) - await untilUpdated(() => page.textContent('h1'), 'changed') + await expect.poll(() => page.textContent('h1')).toMatch('changed') // verify the change also affects next SSR const res = await page.reload() @@ -65,14 +64,14 @@ test.skipIf(isBuild)('hmr', async () => { test('client navigation', async () => { await untilBrowserLogAfter(() => page.goto(url), 'hydrated') - await untilUpdated(() => page.textContent('a[href="/about"]'), 'About') + await expect.poll(() => page.textContent('a[href="/about"]')).toMatch('About') await page.click('a[href="/about"]') - await untilUpdated(() => page.textContent('h1'), 'About') + await expect.poll(() => page.textContent('h1')).toMatch('About') if (!isBuild) { editFile('src/pages/About.jsx', (code) => code.replace('

About', '

changed'), ) - await untilUpdated(() => page.textContent('h1'), 'changed') + await expect.poll(() => page.textContent('h1')).toMatch('changed') } }) diff --git a/playground/test-utils.ts b/playground/test-utils.ts index 6d8e730d1..558a4b30a 100644 --- a/playground/test-utils.ts +++ b/playground/test-utils.ts @@ -37,8 +37,6 @@ function rgbToHex(rgb: string): string { } } -const timeout = (n: number) => new Promise((r) => setTimeout(r, n)) - async function toEl(el: string | ElementHandle): Promise { if (typeof el === 'string') { return await page.$(el) @@ -84,25 +82,6 @@ export function removeFile(filename: string): void { fs.unlinkSync(path.resolve(testDir, filename)) } -/** - * Poll a getter until the value it returns includes the expected value. - */ -export async function untilUpdated( - poll: () => string | Promise, - expected: string, -): Promise { - const maxTries = process.env.CI ? 100 : 50 - for (let tries = 0; tries < maxTries; tries++) { - const actual = (await poll()) ?? '' - if (actual.indexOf(expected) > -1 || tries === maxTries - 1) { - expect(actual).toMatch(expected) - break - } else { - await timeout(50) - } - } -} - type UntilBrowserLogAfterCallback = (logs: string[]) => PromiseLike | void export async function untilBrowserLogAfter( diff --git a/playground/vitest.config.e2e.ts b/playground/vitest.config.e2e.ts index 945e0db28..412f3142f 100644 --- a/playground/vitest.config.e2e.ts +++ b/playground/vitest.config.e2e.ts @@ -17,6 +17,11 @@ export default defineConfig({ testTimeout: timeout, hookTimeout: timeout, reporters: 'dot', + expect: { + poll: { + timeout: 50 * (process.env.CI ? 200 : 50), + }, + }, }, esbuild: { target: 'node14', From 552af8fda8e4c079e9685638d5105572a29195f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0?= Date: Mon, 23 Jun 2025 10:49:12 +0900 Subject: [PATCH 045/313] feat(react): add raw rolldown support (#513) --- eslint.config.js | 1 + package.json | 3 +- packages/plugin-react/CHANGELOG.md | 4 + packages/plugin-react/package.json | 10 +- packages/plugin-react/src/index.ts | 16 +- packages/plugin-react/tests/rolldown.test.ts | 66 +++++++ pnpm-lock.yaml | 177 +++++++++++++++++-- 7 files changed, 254 insertions(+), 23 deletions(-) create mode 100644 packages/plugin-react/tests/rolldown.test.ts diff --git a/eslint.config.js b/eslint.config.js index 4da3ec86b..ae5f6db82 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -127,6 +127,7 @@ export default tseslint.config( { name: 'disables/playground', files: [ + 'packages/**/*.test.?([cm])[jt]s?(x)', 'playground/**/*.?([cm])[jt]s?(x)', 'packages/plugin-react-swc/playground/**/*.?([cm])[jt]s?(x)', ], diff --git a/package.json b/package.json index 4212c944f..b705d1df3 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,8 @@ "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-unit && pnpm run test-serve && pnpm run test-build && pnpm --filter ./packages/plugin-react-swc run test", + "test-unit": "pnpm -r --filter='./packages/*' run test-unit", "test-serve": "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", diff --git a/packages/plugin-react/CHANGELOG.md b/packages/plugin-react/CHANGELOG.md index cf9487266..40a7dd8ba 100644 --- a/packages/plugin-react/CHANGELOG.md +++ b/packages/plugin-react/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Add raw Rolldown support + +This plugin only worked with Vite. But now it can also be used with raw Rolldown. The main purpose for using this plugin with Rolldown is to use react compiler. + ## 4.5.2 (2025-06-10) ### Suggest `@vitejs/plugin-react-oxc` if rolldown-vite is detected [#491](https://github.com/vitejs/vite-plugin-react/pull/491) diff --git a/packages/plugin-react/package.json b/packages/plugin-react/package.json index e0363abed..071a063a4 100644 --- a/packages/plugin-react/package.json +++ b/packages/plugin-react/package.json @@ -33,7 +33,8 @@ "dev": "unbuild --stub", "build": "unbuild && pnpm run patch-cjs && tsx scripts/copyRefreshRuntime.ts", "patch-cjs": "tsx ../../scripts/patchCJS.ts", - "prepublishOnly": "npm run build" + "prepublishOnly": "npm run build", + "test-unit": "vitest run" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -60,6 +61,11 @@ }, "devDependencies": { "@vitejs/react-common": "workspace:*", - "unbuild": "^3.5.0" + "babel-plugin-react-compiler": "19.1.0-rc.2", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "rolldown": "1.0.0-beta.17", + "unbuild": "^3.5.0", + "vitest": "^3.2.3" } } diff --git a/packages/plugin-react/src/index.ts b/packages/plugin-react/src/index.ts index 8103e2f25..4d43dd47f 100644 --- a/packages/plugin-react/src/index.ts +++ b/packages/plugin-react/src/index.ts @@ -22,8 +22,7 @@ const _dirname = dirname(fileURLToPath(import.meta.url)) const refreshRuntimePath = globalThis.__IS_BUILD__ ? join(_dirname, 'refresh-runtime.js') - : // eslint-disable-next-line n/no-unsupported-features/node-builtins -- only used in dev - fileURLToPath(import.meta.resolve('@vitejs/react-common/refresh-runtime')) + : join(_dirname, '../../common/refresh-runtime.js') // lazy load babel since it's not used during build if plugins are not used let babel: typeof babelCore | undefined @@ -118,9 +117,10 @@ export default function viteReact(opts: Options = {}): PluginOption[] { const jsxImportSource = opts.jsxImportSource ?? 'react' const jsxImportRuntime = `${jsxImportSource}/jsx-runtime` const jsxImportDevRuntime = `${jsxImportSource}/jsx-dev-runtime` + let runningInVite = false let isProduction = true let projectRoot = process.cwd() - let skipFastRefresh = false + let skipFastRefresh = true let runPluginOverrides: | ((options: ReactBabelOptions, context: ReactBabelHookContext) => void) | undefined @@ -170,6 +170,7 @@ export default function viteReact(opts: Options = {}): PluginOption[] { } }, configResolved(config) { + runningInVite = true projectRoot = config.root isProduction = config.isProduction skipFastRefresh = @@ -217,6 +218,15 @@ export default function viteReact(opts: Options = {}): PluginOption[] { } } }, + options(options) { + if (!runningInVite) { + options.jsx = { + mode: opts.jsxRuntime, + importSource: opts.jsxImportSource, + } + return options + } + }, transform: { filter: { id: { diff --git a/packages/plugin-react/tests/rolldown.test.ts b/packages/plugin-react/tests/rolldown.test.ts new file mode 100644 index 000000000..e62e7cb53 --- /dev/null +++ b/packages/plugin-react/tests/rolldown.test.ts @@ -0,0 +1,66 @@ +import path from 'node:path' +import { expect, test } from 'vitest' +import { type Plugin, rolldown } from 'rolldown' +import pluginReact, { type Options } from '../src/index.ts' + +test('HMR related code should not be included when using rolldown', async () => { + const { output } = await bundleWithRolldown() + + expect(output[0].code).toBeDefined() + expect(output[0].code).not.toContain('import.meta.hot') +}) + +test('HMR related code should not be included when using rolldown with babel plugin', async () => { + const { output } = await bundleWithRolldown({ + babel: { + plugins: [['babel-plugin-react-compiler', {}]], + }, + }) + + expect(output[0].code).toBeDefined() + expect(output[0].code).not.toContain('import.meta.hot') +}) + +async function bundleWithRolldown(pluginReactOptions: Options = {}) { + const ENTRY = '/entry.tsx' + const files: Record = { + [ENTRY]: /* tsx */ ` + import React from "react" + import { hydrateRoot } from "react-dom/client" + import App from "./App.tsx" + + const container = document.getElementById("root"); + hydrateRoot(container, ); + `, + '/App.tsx': /* tsx */ ` + export default function App() { + return
Hello World
+ } + `, + } + + const bundle = await rolldown({ + input: ENTRY, + plugins: [virtualFilesPlugin(files), pluginReact(pluginReactOptions)], + external: [/^react(\/|$)/, /^react-dom(\/|$)/], + }) + return await bundle.generate({ format: 'esm' }) +} + +function virtualFilesPlugin(files: Record): Plugin { + return { + name: 'virtual-files', + resolveId(id, importer) { + const baseDir = importer ? path.posix.dirname(importer) : '/' + const result = path.posix.resolve(baseDir, id) + if (result in files) { + return result + } + }, + load(id) { + if (id in files) { + return files[id] + } + }, + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0efa5f3ac..9e28a3a2f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -107,9 +107,24 @@ importers: '@vitejs/react-common': specifier: workspace:* version: link:../common + babel-plugin-react-compiler: + specifier: 19.1.0-rc.2 + version: 19.1.0-rc.2 + react: + specifier: ^19.1.0 + version: 19.1.0 + react-dom: + specifier: ^19.1.0 + version: 19.1.0(react@19.1.0) + rolldown: + specifier: 1.0.0-beta.17 + version: 1.0.0-beta.17 unbuild: specifier: ^3.5.0 version: 3.5.0(typescript@5.8.3) + vitest: + specifier: ^3.2.3 + version: 3.2.3(@types/debug@4.1.12)(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) packages/plugin-react-oxc: dependencies: @@ -1615,9 +1630,6 @@ packages: peerDependencies: rollup: '>=2' - '@napi-rs/wasm-runtime@0.2.10': - resolution: {integrity: sha512-bCsCyeZEwVErsGmyPNSzwfwFn4OdxBj0mmv6hOFucB/k81Ojdu68RbZdxYsRQUPc9l6SU5F/cG+bXgWs3oUgsQ==} - '@napi-rs/wasm-runtime@0.2.11': resolution: {integrity: sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==} @@ -1637,9 +1649,16 @@ packages: resolution: {integrity: sha512-FtOS+0v7rZcnjXzYTTqv1vu/KDptD1UztFgoZkYBGe/6TcNFm+SP/jQoLvzau1SPir95WgDOBOUm2Gmsm+bQag==} engines: {node: '>=6.9.0'} + '@oxc-project/runtime@0.73.0': + resolution: {integrity: sha512-YFvBzVQK/ix0RQxOI02ebCumehSHoiJgvb7nOU4o7xFoMnnujLdjmxnEBK/qiOQrEyXlY69gXGMEsKYVe+YZ3A==} + engines: {node: '>=6.9.0'} + '@oxc-project/types@0.72.3': resolution: {integrity: sha512-CfAC4wrmMkUoISpQkFAIfMVvlPfQV3xg7ZlcqPXPOIMQhdKIId44G8W0mCPgtpWdFFAyJ+SFtiM+9vbyCkoVng==} + '@oxc-project/types@0.73.0': + resolution: {integrity: sha512-ZQS7dpsga43R7bjqRKHRhOeNpuIBeLBnlS3M6H3IqWIWiapGOQIxp4lpETLBYupkSd4dh85ESFn6vAvtpPdGkA==} + '@playwright/test@1.53.0': resolution: {integrity: sha512-15hjKreZDcp7t6TL/7jkAo6Df5STZN09jGiv5dbP9A6vMVncXRqE7/B2SncsyOwrkZRBH2i6/TPOL8BVmm3c7w==} engines: {node: '>=18'} @@ -1654,67 +1673,130 @@ packages: cpu: [arm64] os: [darwin] + '@rolldown/binding-darwin-arm64@1.0.0-beta.17': + resolution: {integrity: sha512-uYxIZ+QdYsjtLUNT3BWCJAww5YJMKL5ZreEO6uJKHCPUE4wbAU1t4JzQudnjrqpkviz4IQYL62Ry/uKuZxzmrw==} + cpu: [arm64] + os: [darwin] + '@rolldown/binding-darwin-x64@1.0.0-beta.15': resolution: {integrity: sha512-Zwv8KHU/XdVwLseHG6slJ0FAFklPpiO0sjNvhrcMp1X3F2ajPzUdIO8Cnu3KLmX1GWVSvu6q1kyARLUqPvlh7Q==} cpu: [x64] os: [darwin] + '@rolldown/binding-darwin-x64@1.0.0-beta.17': + resolution: {integrity: sha512-uu1ovSv1BmYvpR8nJdhkPcnV90l5jmAE4YNmJHo1sSLXWPqlWfigTJ+4v1g8ww1hU4It6Rd7Odf4fqOFnRu74g==} + cpu: [x64] + os: [darwin] + '@rolldown/binding-freebsd-x64@1.0.0-beta.15': resolution: {integrity: sha512-FwhNC23Fz9ldHW1/rX4QaoQe4kyOybCgxO9eglue3cbb3ol28KWpQl3xJfvXc9+O6PDefAs4oFBCbtTh8seiUw==} cpu: [x64] os: [freebsd] + '@rolldown/binding-freebsd-x64@1.0.0-beta.17': + resolution: {integrity: sha512-7PhPJ/V8RxvHtk4VDLYsSlDi43W766X2AXlMEqtUi9qpImVH55PsMUrDq74GvJsSKYAO9pAzncP6/sDB0i6F6g==} + cpu: [x64] + os: [freebsd] + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.15': resolution: {integrity: sha512-E60pNliWl4j7EFEVX2oeJZ5VzR+NG6fvDJoqfqRfCl8wtKIf9E1WPWVQIrT+zkz+Fhc5op8g7h25z6rtxsDy9g==} cpu: [arm] os: [linux] + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.17': + resolution: {integrity: sha512-VHmUdihRL3kFYgUjr6n3laeZPdmHEliFW+R1F4JhbkztpjdcZjztuOKGul6/x77JJf+LJuAgny45Gw2W5i/hsg==} + cpu: [arm] + os: [linux] + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.15': resolution: {integrity: sha512-d+qo1LZ/a3EcQW08byIIZy0PBthmG/7dr69pifmNIet/azWR8jbceQaRFFczVc/NwVV3fsZDCmjG8mgJzsNEAg==} cpu: [arm64] os: [linux] + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.17': + resolution: {integrity: sha512-P/BDueuHUcw5fHNK1UBtItH/o1HNUb3n0o03/lFh3VkrP5yzC9Ov/bVj5wtat1Gb0JAm4ypVHcvlFtU/XOB57w==} + cpu: [arm64] + os: [linux] + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.15': resolution: {integrity: sha512-P1hbtYF+5ftJI2Ergs4iARbAk6Xd6WnTQb3CF9kjN3KfJTsRYdo5/fvU8Lz/gzhZVvkCXXH3NxDd9308UBO8cw==} cpu: [arm64] os: [linux] + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.17': + resolution: {integrity: sha512-ZUYk2/j335hVqlhwpkbjgH4eENQIA6aCTwt5Lm8yv3Ny3Dp+NJWjW+a98OruAHel5dsqbKVQriP5av5Ga10rMQ==} + cpu: [arm64] + os: [linux] + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.15': resolution: {integrity: sha512-Q9NM9uMFN9cjcrW7gd9U087B5WzkEj9dQQHOgoENZSy+vYJYS2fINCIG40ljEVC6jXmVrJgUhJKv7elRZM1nng==} cpu: [x64] os: [linux] + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.17': + resolution: {integrity: sha512-yM9lISQs+es9Mma1qadEj/0hOMJThEVu4azPw9vp1gVtG7fQg/k+AGqULzy175exaZS3IodVwaCC9qtk9QZiUw==} + cpu: [x64] + os: [linux] + '@rolldown/binding-linux-x64-musl@1.0.0-beta.15': resolution: {integrity: sha512-1tuCWuR8gx9PyW2pxAx2ZqnOnwhoY6NWBVP6ZmrjCKQ16NclYc61BzegFXSdugCy8w1QpBPT8/c5oh2W4E5aeA==} cpu: [x64] os: [linux] + '@rolldown/binding-linux-x64-musl@1.0.0-beta.17': + resolution: {integrity: sha512-3n+NDnMItllqo09RooFrNJpPjznId7TZcicnGObbnSMBtIfIknkUyjECQssoLajjZ2E4DK7N62yd7jbRkTNZ1g==} + cpu: [x64] + os: [linux] + '@rolldown/binding-wasm32-wasi@1.0.0-beta.15': resolution: {integrity: sha512-zrSeYrpTf27hRxMLh0qpkCoWgzRKG8EyR6o09Zt9xkqCOeE5tEK/S3jV1Nii9WSqVCWFRA+OYxKzMNoykV590g==} engines: {node: '>=14.21.3'} cpu: [wasm32] + '@rolldown/binding-wasm32-wasi@1.0.0-beta.17': + resolution: {integrity: sha512-CL7bKJg+GhZAM2R2I+mHQb3+8NJmQU1UkXqtR9tJCw60f9yOFi6cwC8lYtFHdM6CuFA+X7+8L3DcTupBNmUiRA==} + engines: {node: '>=14.21.3'} + cpu: [wasm32] + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.15': resolution: {integrity: sha512-diR41DsMUnkvb9hvW8vuIrA0WaacAN1fu6lPseXhYifAOZN6kvxEwKn7Xib8i0zjdrYErLv7GNSQ48W+xiNOnA==} cpu: [arm64] os: [win32] + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.17': + resolution: {integrity: sha512-35aU4xs7zbAsvirVHnpKjAS0Lblrf4PzJPj2cvII0olFyizfqYZ6yxdzgiUjbPFdF34SKc7obmiA4BG16URsvA==} + cpu: [arm64] + os: [win32] + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.15': resolution: {integrity: sha512-oCbbcDC3Lk8YgdxCkG23UqVrvXVvllIBgmmwq89bhq5okPP899OI/P+oTTDsUTbhljzNq1pH8a+mR6YBxAFfvw==} cpu: [ia32] os: [win32] + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.17': + resolution: {integrity: sha512-cPQNXNf74epAShehFaudP4TG3+faHcg+SAB+3sTVu5oGfKHfocHwNo/Uhf6HnFr+6gXpRWcnOj3+k2+KDVisCQ==} + cpu: [ia32] + os: [win32] + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.15': resolution: {integrity: sha512-w5hVsOv3dzKo10wAXizmnDvUo1yasn/ps+mcn9H9TiJ/GeRE5/15Y6hG6vUQYRQNLVbYRHUt2qG0MyOoasPcHg==} cpu: [x64] os: [win32] + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.17': + resolution: {integrity: sha512-n/3qfwsk6VvDK3RE/mcsA3IIduVAAiAXIkDFGZopj0EZQVYSuFmZ3V3InAk/4cue1YGMARZNPOtTR4LozfzBUA==} + cpu: [x64] + os: [win32] + '@rolldown/pluginutils@1.0.0-beta.15': resolution: {integrity: sha512-lvFtIbidq5EqyAAeiVk41ZNjGRgUoGRBIuqpe1VRJ7R8Av7TLAgGWAwGlHNhO7MFkl7MNRX350CsTtIWIYkNIQ==} '@rolldown/pluginutils@1.0.0-beta.16': resolution: {integrity: sha512-w3f87JpF7lgIlK03I0R3XidspFgB4MsixE5o/VjBMJI+Ki4XW/Ffrykmj2AUCbVxhRD7Pi9W0Qu2XapJhB2mSA==} + '@rolldown/pluginutils@1.0.0-beta.17': + resolution: {integrity: sha512-i6p5fc1+lAmR3OHmNlv7/3PIY3EtuUu4kVARjkid38p7cmyIyqr0QFnA+k3xoB06wQUpBA91H1HFlRreZ2v5oA==} + '@rollup/plugin-alias@5.1.1': resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} engines: {node: '>=14.0.0'} @@ -3925,6 +4007,10 @@ packages: resolution: {integrity: sha512-ep788NsIGl0W5gT+99hBrSGe4Hdhcwc55PqM3O0mR5H0C4ZpGpDGgu9YzTJ8a6mFDLnFnc/LYC+Dszb7oWK/dg==} hasBin: true + rolldown@1.0.0-beta.17: + resolution: {integrity: sha512-L45QWZF/7HYfIO1nZZL83O8xOMOxBlMiFsspMRUus68wkiag3PNn6PDqEFbzbQDYN32YHFEb2qzqkC2M0enZ2A==} + hasBin: true + rollup-plugin-dts@6.2.1: resolution: {integrity: sha512-sR3CxYUl7i2CHa0O7bA45mCrgADyAQ0tVtGSqi3yvH28M+eg1+g5d7kQ9hLvEz5dorK3XVsH5L2jwHLQf72DzA==} engines: {node: '>=16'} @@ -4405,7 +4491,7 @@ snapshots: '@babel/generator@7.27.0': dependencies: '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 + '@babel/types': 7.27.6 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.0.2 @@ -4433,7 +4519,7 @@ snapshots: '@babel/helper-module-imports@7.25.9': dependencies: '@babel/traverse': 7.27.0 - '@babel/types': 7.27.0 + '@babel/types': 7.27.6 transitivePeerDependencies: - supports-color @@ -4476,7 +4562,7 @@ snapshots: '@babel/parser@7.27.0': dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.27.6 '@babel/parser@7.27.5': dependencies: @@ -4534,7 +4620,7 @@ snapshots: dependencies: '@babel/code-frame': 7.26.2 '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 + '@babel/types': 7.27.6 '@babel/template@7.27.2': dependencies: @@ -4548,7 +4634,7 @@ snapshots: '@babel/generator': 7.27.0 '@babel/parser': 7.27.0 '@babel/template': 7.27.0 - '@babel/types': 7.27.0 + '@babel/types': 7.27.6 debug: 4.4.1 globals: 11.12.0 transitivePeerDependencies: @@ -5110,13 +5196,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@napi-rs/wasm-runtime@0.2.10': - dependencies: - '@emnapi/core': 1.4.3 - '@emnapi/runtime': 1.4.3 - '@tybys/wasm-util': 0.9.0 - optional: true - '@napi-rs/wasm-runtime@0.2.11': dependencies: '@emnapi/core': 1.4.3 @@ -5138,8 +5217,12 @@ snapshots: '@oxc-project/runtime@0.72.3': {} + '@oxc-project/runtime@0.73.0': {} + '@oxc-project/types@0.72.3': {} + '@oxc-project/types@0.73.0': {} + '@playwright/test@1.53.0': dependencies: playwright: 1.53.0 @@ -5149,45 +5232,85 @@ snapshots: '@rolldown/binding-darwin-arm64@1.0.0-beta.15': optional: true + '@rolldown/binding-darwin-arm64@1.0.0-beta.17': + optional: true + '@rolldown/binding-darwin-x64@1.0.0-beta.15': optional: true + '@rolldown/binding-darwin-x64@1.0.0-beta.17': + optional: true + '@rolldown/binding-freebsd-x64@1.0.0-beta.15': optional: true + '@rolldown/binding-freebsd-x64@1.0.0-beta.17': + optional: true + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.15': optional: true + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.17': + optional: true + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.15': optional: true + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.17': + optional: true + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.15': optional: true + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.17': + optional: true + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.15': optional: true + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.17': + optional: true + '@rolldown/binding-linux-x64-musl@1.0.0-beta.15': optional: true + '@rolldown/binding-linux-x64-musl@1.0.0-beta.17': + optional: true + '@rolldown/binding-wasm32-wasi@1.0.0-beta.15': dependencies: - '@napi-rs/wasm-runtime': 0.2.10 + '@napi-rs/wasm-runtime': 0.2.11 + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.0-beta.17': + dependencies: + '@napi-rs/wasm-runtime': 0.2.11 optional: true '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.15': optional: true + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.17': + optional: true + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.15': optional: true + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.17': + optional: true + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.15': optional: true + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.17': + optional: true + '@rolldown/pluginutils@1.0.0-beta.15': {} '@rolldown/pluginutils@1.0.0-beta.16': {} + '@rolldown/pluginutils@1.0.0-beta.17': {} + '@rollup/plugin-alias@5.1.1(rollup@4.37.0)': optionalDependencies: rollup: 4.37.0 @@ -5793,7 +5916,7 @@ snapshots: babel-plugin-react-compiler@19.1.0-rc.2: dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.27.6 bail@2.0.2: {} @@ -7624,6 +7747,26 @@ snapshots: '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.15 '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.15 + rolldown@1.0.0-beta.17: + dependencies: + '@oxc-project/runtime': 0.73.0 + '@oxc-project/types': 0.73.0 + '@rolldown/pluginutils': 1.0.0-beta.17 + ansis: 4.1.0 + optionalDependencies: + '@rolldown/binding-darwin-arm64': 1.0.0-beta.17 + '@rolldown/binding-darwin-x64': 1.0.0-beta.17 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.17 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.17 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.17 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.17 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.17 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.17 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.17 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.17 + '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.17 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.17 + rollup-plugin-dts@6.2.1(rollup@4.37.0)(typescript@5.8.3): dependencies: magic-string: 0.30.17 From ad5a42ede0b66477ab7a8174e4d8954e7fab461a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Jun 2025 10:49:52 +0900 Subject: [PATCH 046/313] fix(deps): update swc monorepo (#516) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/plugin-react-swc/package.json | 2 +- .../playground/emotion-plugin/package.json | 2 +- .../playground/styled-components/package.json | 2 +- pnpm-lock.yaml | 110 +++++++++--------- 4 files changed, 58 insertions(+), 58 deletions(-) diff --git a/packages/plugin-react-swc/package.json b/packages/plugin-react-swc/package.json index 760bb7235..a2c43b22a 100644 --- a/packages/plugin-react-swc/package.json +++ b/packages/plugin-react-swc/package.json @@ -30,7 +30,7 @@ "homepage": "https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react-swc#readme", "dependencies": { "@rolldown/pluginutils": "1.0.0-beta.16", - "@swc/core": "^1.12.1" + "@swc/core": "^1.12.5" }, "peerDependencies": { "vite": "^4 || ^5 || ^6 || ^7.0.0-beta.0" diff --git a/packages/plugin-react-swc/playground/emotion-plugin/package.json b/packages/plugin-react-swc/playground/emotion-plugin/package.json index 2a23b4ec0..954a3f88b 100644 --- a/packages/plugin-react-swc/playground/emotion-plugin/package.json +++ b/packages/plugin-react-swc/playground/emotion-plugin/package.json @@ -17,6 +17,6 @@ "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react-swc": "../../dist", - "@swc/plugin-emotion": "^10.0.0" + "@swc/plugin-emotion": "^10.0.2" } } diff --git a/packages/plugin-react-swc/playground/styled-components/package.json b/packages/plugin-react-swc/playground/styled-components/package.json index 32223c91d..4f6358847 100644 --- a/packages/plugin-react-swc/playground/styled-components/package.json +++ b/packages/plugin-react-swc/playground/styled-components/package.json @@ -14,7 +14,7 @@ "styled-components": "^6.1.19" }, "devDependencies": { - "@swc/plugin-styled-components": "^8.0.0", + "@swc/plugin-styled-components": "^8.0.2", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@types/styled-components": "^5.1.34", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9e28a3a2f..66c4d39ad 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -148,8 +148,8 @@ importers: specifier: 1.0.0-beta.16 version: 1.0.0-beta.16 '@swc/core': - specifier: ^1.12.1 - version: 1.12.1 + specifier: ^1.12.5 + version: 1.12.5 devDependencies: '@playwright/test': specifier: ^1.53.0 @@ -280,8 +280,8 @@ importers: version: 19.1.0(react@19.1.0) devDependencies: '@swc/plugin-emotion': - specifier: ^10.0.0 - version: 10.0.0 + specifier: ^10.0.2 + version: 10.0.2 '@types/react': specifier: ^19.1.8 version: 19.1.8 @@ -387,8 +387,8 @@ importers: version: 6.1.19(react-dom@19.1.0(react@19.1.0))(react@19.1.0) devDependencies: '@swc/plugin-styled-components': - specifier: ^8.0.0 - version: 8.0.0 + specifier: ^8.0.2 + version: 8.0.2 '@types/react': specifier: ^19.1.8 version: 19.1.8 @@ -1960,68 +1960,68 @@ packages: cpu: [x64] os: [win32] - '@swc/core-darwin-arm64@1.12.1': - resolution: {integrity: sha512-nUjWVcJ3YS2N40ZbKwYO2RJ4+o2tWYRzNOcIQp05FqW0+aoUCVMdAUUzQinPDynfgwVshDAXCKemY8X7nN5MaA==} + '@swc/core-darwin-arm64@1.12.5': + resolution: {integrity: sha512-3WF+naP/qkt5flrTfJr+p07b522JcixKvIivM7FgvllA6LjJxf+pheoILrTS8IwrNAK/XtHfKWYcGY+3eaA4mA==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.12.1': - resolution: {integrity: sha512-OGm4a4d3OeJn+tRt8H/eiHgTFrJbS6r8mi/Ob65tAEXZGHN900T2kR7c5ALr0V2hBOQ8BfhexwPoQlGQP/B95w==} + '@swc/core-darwin-x64@1.12.5': + resolution: {integrity: sha512-GCcD3dft8YN7unTBcW02Fx41jXp2MNQHCjx5ceWSEYOGvn7vBSUp7k7LkfTxGN5Ftxb9a1mxhPq8r4rD2u/aPw==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.12.1': - resolution: {integrity: sha512-76YeeQKyK0EtNkQiNBZ0nbVGooPf9IucY0WqVXVpaU4wuG7ZyLEE2ZAIgXafIuzODGQoLfetue7I8boMxh1/MA==} + '@swc/core-linux-arm-gnueabihf@1.12.5': + resolution: {integrity: sha512-jWlzP/Y4+wbE/EJM+WGIDQsklLFV3g5LmbYTBgrY4+5nb517P31mkBzf5y2knfNWPrL7HzNu0578j3Zi2E6Iig==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.12.1': - resolution: {integrity: sha512-BxJDIJPq1+aCh9UsaSAN6wo3tuln8UhNXruOrzTI8/ElIig/3sAueDM6Eq7GvZSGGSA7ljhNATMJ0elD7lFatQ==} + '@swc/core-linux-arm64-gnu@1.12.5': + resolution: {integrity: sha512-GkzgIUz+2r6J6Tn3hb7/4ByaWHRrRZt4vuN9BLAd+y65m2Bt0vlEpPtWhrB/TVe4hEkFR+W5PDETLEbUT4i0tQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.12.1': - resolution: {integrity: sha512-NhLdbffSXvY0/FwUSAl4hKBlpe5GHQGXK8DxTo3HHjLsD9sCPYieo3vG0NQoUYAy4ZUY1WeGjyxeq4qZddJzEQ==} + '@swc/core-linux-arm64-musl@1.12.5': + resolution: {integrity: sha512-g0AJ7QmZPj3Uw+C5pDa48LAUG7JBgQmB0mN5cW+s2mjaFKT0mTSxYALtx/MDZwJExDPo0yJV8kSbFO1tvFPyhg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.12.1': - resolution: {integrity: sha512-CrYnV8SZIgArQ9LKH0xEF95PKXzX9WkRSc5j55arOSBeDCeDUQk1Bg/iKdnDiuj5HC1hZpvzwMzSBJjv+Z70jA==} + '@swc/core-linux-x64-gnu@1.12.5': + resolution: {integrity: sha512-PeYoSziNy+iNiBHPtAsO84bzBne/mbCsG5ijYkAhS1GVsDgohClorUvRXXhcUZoX2gr8TfSI9WLHo30K+DKiHg==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.12.1': - resolution: {integrity: sha512-BQMl3d0HaGB0/h2xcKlGtjk/cGRn2tnbsaChAKcjFdCepblKBCz1pgO/mL7w5iXq3s57wMDUn++71/a5RAkZOA==} + '@swc/core-linux-x64-musl@1.12.5': + resolution: {integrity: sha512-EJrfCCIyuV5LLmYgKtIMwtgsnjVesdFe0IgQzEKs9OfB6cL6g7WO9conn8BkGX8jphVa7jChKxShDGkreWWDzA==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.12.1': - resolution: {integrity: sha512-b7NeGnpqTfmIGtUqXBl0KqoSmOnH64nRZoT5l4BAGdvwY7nxitWR94CqZuwyLPty/bLywmyDA9uO12Kvgb3+gg==} + '@swc/core-win32-arm64-msvc@1.12.5': + resolution: {integrity: sha512-FnwT7fxkJJMgsfiDoZKEVGyCzrPFbzpflFAAoTCUCu3MaHw6mW55o/MAAfofvJ1iIcEpec4o93OilsmKtpyO5Q==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.12.1': - resolution: {integrity: sha512-iU/29X2D7cHBp1to62cUg/5Xk8K+lyOJiKIGGW5rdzTW/c2zz3d/ehgpzVP/rqC4NVr88MXspqHU4il5gmDajw==} + '@swc/core-win32-ia32-msvc@1.12.5': + resolution: {integrity: sha512-jW6l4KFt9mIXSpGseE6BQOEFmbIeXeShDuWgldEJXKeXf/uPs8wrqv80XBIUwVpK0ZbmJwPQ0waGVj8UM3th2Q==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.12.1': - resolution: {integrity: sha512-+Zh+JKDwiFqV5N9yAd2DhYVGPORGh9cfenu1ptr9yge+eHAf7vZJcC3rnj6QMR1QJh0Y5VC9+YBjRFjZVA7XDw==} + '@swc/core-win32-x64-msvc@1.12.5': + resolution: {integrity: sha512-AZszwuEjlz1tSNLQRm3T5OZJ5eebxjJlDQnnzXJmg0B7DJMRoaAe1HTLOmejxjFK6yWr7fh+pSeCw2PgQLxgqA==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.12.1': - resolution: {integrity: sha512-aKXdDTqxTVFl/bKQZ3EQUjEMBEoF6JBv29moMZq0kbVO43na6u/u+3Vcbhbrh+A2N0X5OL4RaveuWfAjEgOmeA==} + '@swc/core@1.12.5': + resolution: {integrity: sha512-KxA0PHHIuUBmQ/Oi+xFpVzILj2Oo37sTtftCbyowQlyx5YOknEOw1kLpas5hMcpznXgFyAWbpK71xQps4INPgA==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '>=0.5.17' @@ -2032,11 +2032,11 @@ packages: '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - '@swc/plugin-emotion@10.0.0': - resolution: {integrity: sha512-xyfWcxgoVWkSw2O1tdY0EGpdtdSn+gsf8t7KlZPy1W3FR5YiWEo0ynS4Nhmf60ID6HcgJyaiZghtwiRPKWAqqw==} + '@swc/plugin-emotion@10.0.2': + resolution: {integrity: sha512-cwuxHN1PcbK5mer+K8x6pH3qpT8A4+ywesCmheuekBt+J4KtBCFc8glVgGY795QqC5ViUm68dYN5xkS1HSswRA==} - '@swc/plugin-styled-components@8.0.0': - resolution: {integrity: sha512-5FD2is0JZJbseUD4Nv1wbYCNWOa7+j34FfXX1yACpoxiguNSph1JYH41QPcbbu73EECw7TD480r8JFr7MVE65A==} + '@swc/plugin-styled-components@8.0.2': + resolution: {integrity: sha512-JNDeeSZd8EQFCO013QNY+WXdeu/Gwu2vG0uJssEqVSzoz+HoHhNaPz5yvN4psor/6VXAY6LKCTqDfrsrfA6pXA==} '@swc/types@0.1.23': resolution: {integrity: sha512-u1iIVZV9Q0jxY+yM2vw/hZGDNudsN85bBpTqzAQ9rzkxW9D+e3aEM4Han+ow518gSewkXgjmEK0BD79ZcNVgPw==} @@ -5426,59 +5426,59 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.37.0': optional: true - '@swc/core-darwin-arm64@1.12.1': + '@swc/core-darwin-arm64@1.12.5': optional: true - '@swc/core-darwin-x64@1.12.1': + '@swc/core-darwin-x64@1.12.5': optional: true - '@swc/core-linux-arm-gnueabihf@1.12.1': + '@swc/core-linux-arm-gnueabihf@1.12.5': optional: true - '@swc/core-linux-arm64-gnu@1.12.1': + '@swc/core-linux-arm64-gnu@1.12.5': optional: true - '@swc/core-linux-arm64-musl@1.12.1': + '@swc/core-linux-arm64-musl@1.12.5': optional: true - '@swc/core-linux-x64-gnu@1.12.1': + '@swc/core-linux-x64-gnu@1.12.5': optional: true - '@swc/core-linux-x64-musl@1.12.1': + '@swc/core-linux-x64-musl@1.12.5': optional: true - '@swc/core-win32-arm64-msvc@1.12.1': + '@swc/core-win32-arm64-msvc@1.12.5': optional: true - '@swc/core-win32-ia32-msvc@1.12.1': + '@swc/core-win32-ia32-msvc@1.12.5': optional: true - '@swc/core-win32-x64-msvc@1.12.1': + '@swc/core-win32-x64-msvc@1.12.5': optional: true - '@swc/core@1.12.1': + '@swc/core@1.12.5': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.23 optionalDependencies: - '@swc/core-darwin-arm64': 1.12.1 - '@swc/core-darwin-x64': 1.12.1 - '@swc/core-linux-arm-gnueabihf': 1.12.1 - '@swc/core-linux-arm64-gnu': 1.12.1 - '@swc/core-linux-arm64-musl': 1.12.1 - '@swc/core-linux-x64-gnu': 1.12.1 - '@swc/core-linux-x64-musl': 1.12.1 - '@swc/core-win32-arm64-msvc': 1.12.1 - '@swc/core-win32-ia32-msvc': 1.12.1 - '@swc/core-win32-x64-msvc': 1.12.1 + '@swc/core-darwin-arm64': 1.12.5 + '@swc/core-darwin-x64': 1.12.5 + '@swc/core-linux-arm-gnueabihf': 1.12.5 + '@swc/core-linux-arm64-gnu': 1.12.5 + '@swc/core-linux-arm64-musl': 1.12.5 + '@swc/core-linux-x64-gnu': 1.12.5 + '@swc/core-linux-x64-musl': 1.12.5 + '@swc/core-win32-arm64-msvc': 1.12.5 + '@swc/core-win32-ia32-msvc': 1.12.5 + '@swc/core-win32-x64-msvc': 1.12.5 '@swc/counter@0.1.3': {} - '@swc/plugin-emotion@10.0.0': + '@swc/plugin-emotion@10.0.2': dependencies: '@swc/counter': 0.1.3 - '@swc/plugin-styled-components@8.0.0': + '@swc/plugin-styled-components@8.0.2': dependencies: '@swc/counter': 0.1.3 From 572bb9498bd785e4e3a2a4f9520b44967c04ec4a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Jun 2025 11:01:31 +0900 Subject: [PATCH 047/313] fix(deps): update all non-major dependencies (#515) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 10 +- packages/plugin-react-oxc/package.json | 2 +- packages/plugin-react-swc/package.json | 6 +- packages/plugin-react/package.json | 6 +- pnpm-lock.yaml | 618 +++++++++++++------------ pnpm-workspace.yaml | 2 +- 6 files changed, 325 insertions(+), 319 deletions(-) diff --git a/package.json b/package.json index b705d1df3..a195b200d 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "engines": { "node": "^14.18.0 || >=16.0.0" }, - "packageManager": "pnpm@10.12.1", + "packageManager": "pnpm@10.12.2", "homepage": "https://github.com/vitejs/vite-plugin-react/", "keywords": [ "frontend", @@ -35,7 +35,7 @@ "devDependencies": { "@eslint/js": "^9.29.0", "@types/fs-extra": "^11.0.4", - "@types/node": "^22.15.31", + "@types/node": "^22.15.32", "@vitejs/release-scripts": "^1.5.0", "eslint": "^9.29.0", "eslint-plugin-import-x": "^4.15.2", @@ -45,14 +45,14 @@ "globals": "^16.2.0", "lint-staged": "^15.5.2", "picocolors": "^1.1.1", - "playwright-chromium": "^1.53.0", + "playwright-chromium": "^1.53.1", "prettier": "^3.0.3", "simple-git-hooks": "^2.13.0", "tsx": "^4.20.3", "typescript": "^5.8.3", - "typescript-eslint": "^8.34.0", + "typescript-eslint": "^8.34.1", "vite": "^6.3.3", - "vitest": "^3.2.3" + "vitest": "^3.2.4" }, "simple-git-hooks": { "pre-commit": "pnpm exec lint-staged --concurrent false" diff --git a/packages/plugin-react-oxc/package.json b/packages/plugin-react-oxc/package.json index 88b09c1f1..20f36fd47 100644 --- a/packages/plugin-react-oxc/package.json +++ b/packages/plugin-react-oxc/package.json @@ -48,6 +48,6 @@ "vite": "catalog:rolldown-vite" }, "dependencies": { - "@rolldown/pluginutils": "1.0.0-beta.16" + "@rolldown/pluginutils": "1.0.0-beta.19" } } diff --git a/packages/plugin-react-swc/package.json b/packages/plugin-react-swc/package.json index a2c43b22a..041193758 100644 --- a/packages/plugin-react-swc/package.json +++ b/packages/plugin-react-swc/package.json @@ -29,16 +29,16 @@ }, "homepage": "https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react-swc#readme", "dependencies": { - "@rolldown/pluginutils": "1.0.0-beta.16", + "@rolldown/pluginutils": "1.0.0-beta.19", "@swc/core": "^1.12.5" }, "peerDependencies": { "vite": "^4 || ^5 || ^6 || ^7.0.0-beta.0" }, "devDependencies": { - "@playwright/test": "^1.53.0", + "@playwright/test": "^1.53.1", "@types/fs-extra": "^11.0.4", - "@types/node": "^22.15.31", + "@types/node": "^22.15.32", "@vitejs/react-common": "workspace:*", "esbuild": "^0.25.5", "fs-extra": "^11.3.0", diff --git a/packages/plugin-react/package.json b/packages/plugin-react/package.json index 071a063a4..35f3093a7 100644 --- a/packages/plugin-react/package.json +++ b/packages/plugin-react/package.json @@ -52,7 +52,7 @@ "@babel/core": "^7.27.4", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", - "@rolldown/pluginutils": "1.0.0-beta.16", + "@rolldown/pluginutils": "1.0.0-beta.19", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, @@ -64,8 +64,8 @@ "babel-plugin-react-compiler": "19.1.0-rc.2", "react": "^19.1.0", "react-dom": "^19.1.0", - "rolldown": "1.0.0-beta.17", + "rolldown": "1.0.0-beta.19", "unbuild": "^3.5.0", - "vitest": "^3.2.3" + "vitest": "^3.2.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 66c4d39ad..b20e62d3a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,8 +7,8 @@ settings: catalogs: rolldown-vite: vite: - specifier: npm:rolldown-vite@^6.3.19 - version: 6.3.19 + specifier: npm:rolldown-vite@^6.3.21 + version: 6.3.21 packageExtensionsChecksum: sha256-S82yCctxnlOTNFuHWCyTFRo/B6Y3jque/4DnsDO4WZA= @@ -23,8 +23,8 @@ importers: specifier: ^11.0.4 version: 11.0.4 '@types/node': - specifier: ^22.15.31 - version: 22.15.31 + specifier: ^22.15.32 + version: 22.15.32 '@vitejs/release-scripts': specifier: ^1.5.0 version: 1.5.0 @@ -33,7 +33,7 @@ importers: version: 9.29.0(jiti@2.4.2) eslint-plugin-import-x: specifier: ^4.15.2 - version: 4.15.2(@typescript-eslint/utils@8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2)) + version: 4.15.2(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2)) eslint-plugin-n: specifier: ^17.20.0 version: 17.20.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) @@ -53,8 +53,8 @@ importers: specifier: ^1.1.1 version: 1.1.1 playwright-chromium: - specifier: ^1.53.0 - version: 1.53.0 + specifier: ^1.53.1 + version: 1.53.1 prettier: specifier: ^3.0.3 version: 3.1.0 @@ -68,20 +68,20 @@ importers: specifier: ^5.8.3 version: 5.8.3 typescript-eslint: - specifier: ^8.34.0 - version: 8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + specifier: ^8.34.1 + version: 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) vite: specifier: ^6.3.3 - version: 6.3.3(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + version: 6.3.3(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vitest: - specifier: ^3.2.3 - version: 3.2.3(@types/debug@4.1.12)(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + specifier: ^3.2.4 + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) packages/common: devDependencies: vite: specifier: ^6.3.3 - version: 6.3.3(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + version: 6.3.3(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) packages/plugin-react: dependencies: @@ -95,8 +95,8 @@ importers: specifier: ^7.27.1 version: 7.27.1(@babel/core@7.27.4) '@rolldown/pluginutils': - specifier: 1.0.0-beta.16 - version: 1.0.0-beta.16 + specifier: 1.0.0-beta.19 + version: 1.0.0-beta.19 '@types/babel__core': specifier: ^7.20.5 version: 7.20.5 @@ -117,20 +117,20 @@ importers: specifier: ^19.1.0 version: 19.1.0(react@19.1.0) rolldown: - specifier: 1.0.0-beta.17 - version: 1.0.0-beta.17 + specifier: 1.0.0-beta.19 + version: 1.0.0-beta.19 unbuild: specifier: ^3.5.0 version: 3.5.0(typescript@5.8.3) vitest: - specifier: ^3.2.3 - version: 3.2.3(@types/debug@4.1.12)(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + specifier: ^3.2.4 + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) packages/plugin-react-oxc: dependencies: '@rolldown/pluginutils': - specifier: 1.0.0-beta.16 - version: 1.0.0-beta.16 + specifier: 1.0.0-beta.19 + version: 1.0.0-beta.19 devDependencies: '@vitejs/react-common': specifier: workspace:* @@ -140,26 +140,26 @@ importers: version: 3.5.0(typescript@5.8.3) vite: specifier: catalog:rolldown-vite - version: rolldown-vite@6.3.19(@types/node@22.15.31)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1) + version: rolldown-vite@6.3.21(@types/node@22.15.32)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1) packages/plugin-react-swc: dependencies: '@rolldown/pluginutils': - specifier: 1.0.0-beta.16 - version: 1.0.0-beta.16 + specifier: 1.0.0-beta.19 + version: 1.0.0-beta.19 '@swc/core': specifier: ^1.12.5 version: 1.12.5 devDependencies: '@playwright/test': - specifier: ^1.53.0 - version: 1.53.0 + specifier: ^1.53.1 + version: 1.53.1 '@types/fs-extra': specifier: ^11.0.4 version: 11.0.4 '@types/node': - specifier: ^22.15.31 - version: 22.15.31 + specifier: ^22.15.32 + version: 22.15.32 '@vitejs/react-common': specifier: workspace:* version: link:../common @@ -180,7 +180,7 @@ importers: version: 5.8.3 vite: specifier: ^6.3.3 - version: 6.3.3(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + version: 6.3.3(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) packages/plugin-react-swc/playground/base-path: dependencies: @@ -406,10 +406,10 @@ importers: dependencies: '@generouted/react-router': specifier: ^1.20.0 - version: 1.20.0(react-router-dom@7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-router@7.6.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.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 1.20.0(react-router-dom@7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-router@7.6.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.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) generouted: specifier: 1.11.7 - version: 1.11.7(react-router-dom@7.6.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.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 1.11.7(react-router-dom@7.6.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.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) react: specifier: ^19.1.0 version: 19.1.0 @@ -1645,22 +1645,22 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@oxc-project/runtime@0.72.3': - resolution: {integrity: sha512-FtOS+0v7rZcnjXzYTTqv1vu/KDptD1UztFgoZkYBGe/6TcNFm+SP/jQoLvzau1SPir95WgDOBOUm2Gmsm+bQag==} - engines: {node: '>=6.9.0'} - '@oxc-project/runtime@0.73.0': resolution: {integrity: sha512-YFvBzVQK/ix0RQxOI02ebCumehSHoiJgvb7nOU4o7xFoMnnujLdjmxnEBK/qiOQrEyXlY69gXGMEsKYVe+YZ3A==} engines: {node: '>=6.9.0'} - '@oxc-project/types@0.72.3': - resolution: {integrity: sha512-CfAC4wrmMkUoISpQkFAIfMVvlPfQV3xg7ZlcqPXPOIMQhdKIId44G8W0mCPgtpWdFFAyJ+SFtiM+9vbyCkoVng==} + '@oxc-project/runtime@0.73.2': + resolution: {integrity: sha512-wbUN3K3zjMRHxAsNm1nKHebSnDY800b3LxQFTr9wSZpdQdhiQQAZpRIFsYjh0sAotoyqahN576sB1DmpPUhl5Q==} + engines: {node: '>=6.9.0'} '@oxc-project/types@0.73.0': resolution: {integrity: sha512-ZQS7dpsga43R7bjqRKHRhOeNpuIBeLBnlS3M6H3IqWIWiapGOQIxp4lpETLBYupkSd4dh85ESFn6vAvtpPdGkA==} - '@playwright/test@1.53.0': - resolution: {integrity: sha512-15hjKreZDcp7t6TL/7jkAo6Df5STZN09jGiv5dbP9A6vMVncXRqE7/B2SncsyOwrkZRBH2i6/TPOL8BVmm3c7w==} + '@oxc-project/types@0.73.2': + resolution: {integrity: sha512-kU2FjfCb9VTNg/KbOTKVi2sYrKTkNQYq1Fi1v1jCKjbUGA9wqkNDqijNBLeDwagFtDuK2EIWvTzNDYU4k/918g==} + + '@playwright/test@1.53.1': + resolution: {integrity: sha512-Z4c23LHV0muZ8hfv4jw6HngPJkbbtZxTkxPNIg7cJcTc9C28N/p2q7g3JZS2SiKBBHJ3uM1dgDye66bB7LEk5w==} engines: {node: '>=18'} hasBin: true @@ -1668,134 +1668,131 @@ packages: resolution: {integrity: sha512-S+9ANAvUmjutrshV4jZjaiG8XQyuJIZ8a4utWmN/vW1sgQ9IfBnPndwkmQYw53QmouOIytT874u65HEmu6H5jw==} engines: {node: '>=18'} - '@rolldown/binding-darwin-arm64@1.0.0-beta.15': - resolution: {integrity: sha512-YInZppDBLp5DadbJZGc7xBfDrMCSj3P6i2rPlvOCMlvjBQxJi2kX8Jquh+LufsWUiHD3JsvvH5EuUUc/tF5fkA==} + '@rolldown/binding-darwin-arm64@1.0.0-beta.16': + resolution: {integrity: sha512-dzlvuodUFc/QX97jYSsPHtYysqeSeM5gBxiN+DpV93tXEYyFMWm3cECxNmShz4ZM+lrgm6eG2/txzLZ/z9qWLw==} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-arm64@1.0.0-beta.17': - resolution: {integrity: sha512-uYxIZ+QdYsjtLUNT3BWCJAww5YJMKL5ZreEO6uJKHCPUE4wbAU1t4JzQudnjrqpkviz4IQYL62Ry/uKuZxzmrw==} + '@rolldown/binding-darwin-arm64@1.0.0-beta.19': + resolution: {integrity: sha512-Lr2bcnzrqa5fb/tyaOJxbAe6r+Zf5mbCDYnRW8u4hv19b519C6d+8LHl879mBDVWAmRaPt1LPsiQUZJQnKb/jQ==} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-beta.15': - resolution: {integrity: sha512-Zwv8KHU/XdVwLseHG6slJ0FAFklPpiO0sjNvhrcMp1X3F2ajPzUdIO8Cnu3KLmX1GWVSvu6q1kyARLUqPvlh7Q==} + '@rolldown/binding-darwin-x64@1.0.0-beta.16': + resolution: {integrity: sha512-H5604ucjaYy5AxxuOP/CoE5RV3lKCJ+btclWL5rV+hVh0qNN9dVgve+onzAYmi8h2RBPET1Novj+2KB640PC9Q==} cpu: [x64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-beta.17': - resolution: {integrity: sha512-uu1ovSv1BmYvpR8nJdhkPcnV90l5jmAE4YNmJHo1sSLXWPqlWfigTJ+4v1g8ww1hU4It6Rd7Odf4fqOFnRu74g==} + '@rolldown/binding-darwin-x64@1.0.0-beta.19': + resolution: {integrity: sha512-EMzFFW+Wshv0d0FnunDOKl3QQK5KW69c9NOo7SL+fXmeDRrhhKnjoAggi6IX+Vq3gz0PqfqsbElT2uFS5g1dcg==} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-beta.15': - resolution: {integrity: sha512-FwhNC23Fz9ldHW1/rX4QaoQe4kyOybCgxO9eglue3cbb3ol28KWpQl3xJfvXc9+O6PDefAs4oFBCbtTh8seiUw==} + '@rolldown/binding-freebsd-x64@1.0.0-beta.16': + resolution: {integrity: sha512-DDzmSFFKfAcrUJfuwK4URKl28fIgK8fT5Kp374B1iJJ9KwcqIZzN1a3s/ubjTGIwiE+vUDEclVQ3z9R0VwkGAQ==} cpu: [x64] os: [freebsd] - '@rolldown/binding-freebsd-x64@1.0.0-beta.17': - resolution: {integrity: sha512-7PhPJ/V8RxvHtk4VDLYsSlDi43W766X2AXlMEqtUi9qpImVH55PsMUrDq74GvJsSKYAO9pAzncP6/sDB0i6F6g==} + '@rolldown/binding-freebsd-x64@1.0.0-beta.19': + resolution: {integrity: sha512-aoILM0xYehAQdpMrD1rDU14SLJ5j8TsIAB6Ywc6ba85CV2Ks/1EFVSKp9iNL9/V4wqQf4Gk/s3A1kgSzwmw0lg==} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.15': - resolution: {integrity: sha512-E60pNliWl4j7EFEVX2oeJZ5VzR+NG6fvDJoqfqRfCl8wtKIf9E1WPWVQIrT+zkz+Fhc5op8g7h25z6rtxsDy9g==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.16': + resolution: {integrity: sha512-xkCdzCXW6SSDlFYaHjzCFrsbqxxo60YKVW4B/G2ST8HYruv0Ql4qpoQw7WoGeXL+bc/3RpKWzsxIiooUKX6e9Q==} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.17': - resolution: {integrity: sha512-VHmUdihRL3kFYgUjr6n3laeZPdmHEliFW+R1F4JhbkztpjdcZjztuOKGul6/x77JJf+LJuAgny45Gw2W5i/hsg==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.19': + resolution: {integrity: sha512-p5PY3ezHgWN5DurWBMSxrZhnQcJTIuyl8d0aHrC53EXKMG8vMr80L7U545p0nqC14XtWjlMPFxumFxLD+zVL9g==} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.15': - resolution: {integrity: sha512-d+qo1LZ/a3EcQW08byIIZy0PBthmG/7dr69pifmNIet/azWR8jbceQaRFFczVc/NwVV3fsZDCmjG8mgJzsNEAg==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.16': + resolution: {integrity: sha512-Yrz782pZsFVfxlsqppDneV2dl7St7lGt1uCscXnLC0vXiesj59vl3sULQ45eMKKeEEqPKz7X8OAJI7ao6zLSyg==} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.17': - resolution: {integrity: sha512-P/BDueuHUcw5fHNK1UBtItH/o1HNUb3n0o03/lFh3VkrP5yzC9Ov/bVj5wtat1Gb0JAm4ypVHcvlFtU/XOB57w==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.19': + resolution: {integrity: sha512-TNZ3jlApVMpix2h9BclYsurjBYCyiRsz4H7opQY3Tf67Yi1UBe69yNwXZ9l+5fnEGipYzwAUPpTYSw35wbU6bQ==} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.15': - resolution: {integrity: sha512-P1hbtYF+5ftJI2Ergs4iARbAk6Xd6WnTQb3CF9kjN3KfJTsRYdo5/fvU8Lz/gzhZVvkCXXH3NxDd9308UBO8cw==} + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.16': + resolution: {integrity: sha512-1M8jPk7BICBjKfqNZCMtcLvzpEFHBkySPHt+RsYGZhFuAbCb352C9ilWsjpi7WwhWBOvh6tHUNmO77NTKlLxkA==} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.17': - resolution: {integrity: sha512-ZUYk2/j335hVqlhwpkbjgH4eENQIA6aCTwt5Lm8yv3Ny3Dp+NJWjW+a98OruAHel5dsqbKVQriP5av5Ga10rMQ==} + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.19': + resolution: {integrity: sha512-4FowIEu7YIBKLYMG0659V2kN/drV/ghljDl9k9DGmUL/Mko0tG2itRmgLeZyjrkbQNTkXUTI3/0fEbwAg8Jazg==} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.15': - resolution: {integrity: sha512-Q9NM9uMFN9cjcrW7gd9U087B5WzkEj9dQQHOgoENZSy+vYJYS2fINCIG40ljEVC6jXmVrJgUhJKv7elRZM1nng==} + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.16': + resolution: {integrity: sha512-6xhZMDt4r3r3DeurJFakCqev0ct0FHU9hQPvoaHTE3EfC0yRhUp7aQmf2lsB7YVU7Zcel/KiOv/DjJQR9fntog==} cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.17': - resolution: {integrity: sha512-yM9lISQs+es9Mma1qadEj/0hOMJThEVu4azPw9vp1gVtG7fQg/k+AGqULzy175exaZS3IodVwaCC9qtk9QZiUw==} + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.19': + resolution: {integrity: sha512-7/P+dvNsReOZoUvr6p3EKqKHWT+dxjBC5nxelfNWqs32oyVKqv/MvPtayAUqNMv0F94fzQW/l4EOwzLfBHiIJA==} cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-musl@1.0.0-beta.15': - resolution: {integrity: sha512-1tuCWuR8gx9PyW2pxAx2ZqnOnwhoY6NWBVP6ZmrjCKQ16NclYc61BzegFXSdugCy8w1QpBPT8/c5oh2W4E5aeA==} + '@rolldown/binding-linux-x64-musl@1.0.0-beta.16': + resolution: {integrity: sha512-zYnSz4Z39kEUUA1B03KbNFGgCNykZPhaDltJGY9C3bA3zU5+Ygtr+aeaRxEgXYP4PYBqE3rhPIGmDnlTzx18wA==} cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-musl@1.0.0-beta.17': - resolution: {integrity: sha512-3n+NDnMItllqo09RooFrNJpPjznId7TZcicnGObbnSMBtIfIknkUyjECQssoLajjZ2E4DK7N62yd7jbRkTNZ1g==} + '@rolldown/binding-linux-x64-musl@1.0.0-beta.19': + resolution: {integrity: sha512-TztajvVHulPEn1hKCTxmpkomIUvMaeQ9Vv5TEn3bHBp/3T8W7zOwju0ExXNiLtSoD8Nk85T8O1DBPwuo0h+Uig==} cpu: [x64] os: [linux] - '@rolldown/binding-wasm32-wasi@1.0.0-beta.15': - resolution: {integrity: sha512-zrSeYrpTf27hRxMLh0qpkCoWgzRKG8EyR6o09Zt9xkqCOeE5tEK/S3jV1Nii9WSqVCWFRA+OYxKzMNoykV590g==} + '@rolldown/binding-wasm32-wasi@1.0.0-beta.16': + resolution: {integrity: sha512-gFWaCVJENQWYAWkk6yJbteyMmxdZAYE9VLB4S4YqfxOYbGvVxq0K1Dn89uPEzN4beEaLToe917YzXqLdv4tPvQ==} engines: {node: '>=14.21.3'} cpu: [wasm32] - '@rolldown/binding-wasm32-wasi@1.0.0-beta.17': - resolution: {integrity: sha512-CL7bKJg+GhZAM2R2I+mHQb3+8NJmQU1UkXqtR9tJCw60f9yOFi6cwC8lYtFHdM6CuFA+X7+8L3DcTupBNmUiRA==} + '@rolldown/binding-wasm32-wasi@1.0.0-beta.19': + resolution: {integrity: sha512-AqRQiUYEgxEkBPxkz8UvJcpFlknCRwxNDhcUj3ZRNsFWNqSeNFV7Nx41yxB7lpS7EHUNhUsEaydLBU3QeRiV5Q==} engines: {node: '>=14.21.3'} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.15': - resolution: {integrity: sha512-diR41DsMUnkvb9hvW8vuIrA0WaacAN1fu6lPseXhYifAOZN6kvxEwKn7Xib8i0zjdrYErLv7GNSQ48W+xiNOnA==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.16': + resolution: {integrity: sha512-rbXNzlc3/aZSNaIWKAx6TGGUcgSnDmBYxyHLYthtAXz1uvg2o0YsAKYJszWHk0fTrjtKnDXLxwNjua1pf87cZA==} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.17': - resolution: {integrity: sha512-35aU4xs7zbAsvirVHnpKjAS0Lblrf4PzJPj2cvII0olFyizfqYZ6yxdzgiUjbPFdF34SKc7obmiA4BG16URsvA==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.19': + resolution: {integrity: sha512-ak0Dv/IKcbVHr8JhP0rLUCgEQ++GsSQQ2O+VofTXmCeXhquOkVSxcicgDJ4yLgQDIM0DC2pFXWpAoHRGvkrEdQ==} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.15': - resolution: {integrity: sha512-oCbbcDC3Lk8YgdxCkG23UqVrvXVvllIBgmmwq89bhq5okPP899OI/P+oTTDsUTbhljzNq1pH8a+mR6YBxAFfvw==} + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.16': + resolution: {integrity: sha512-9o4nk+IEvyWkE5qsLjcN+Sic869hELVZ5FsEvDruCa9sX5qZV4A5pj5bR9Sc+x4L0Aa1kQkPdChgxRqV1tgOdw==} cpu: [ia32] os: [win32] - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.17': - resolution: {integrity: sha512-cPQNXNf74epAShehFaudP4TG3+faHcg+SAB+3sTVu5oGfKHfocHwNo/Uhf6HnFr+6gXpRWcnOj3+k2+KDVisCQ==} + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.19': + resolution: {integrity: sha512-N8FaTCEpobYggCVAQpYNvwIhlPUDZbxO9Hugk5eT7rFBS2iosjiOailJGa44ppWxa8Ap3sPYjr5z0v/M6gxjhg==} cpu: [ia32] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.15': - resolution: {integrity: sha512-w5hVsOv3dzKo10wAXizmnDvUo1yasn/ps+mcn9H9TiJ/GeRE5/15Y6hG6vUQYRQNLVbYRHUt2qG0MyOoasPcHg==} + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.16': + resolution: {integrity: sha512-PJSdUi02LT2dRS5nRNmqWTAEvq11NSBfPK5DoCTUj4DaUHJd05jBBtVyLabTutjaACN53O/pLOXds73W4obZ/g==} cpu: [x64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.17': - resolution: {integrity: sha512-n/3qfwsk6VvDK3RE/mcsA3IIduVAAiAXIkDFGZopj0EZQVYSuFmZ3V3InAk/4cue1YGMARZNPOtTR4LozfzBUA==} + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.19': + resolution: {integrity: sha512-a+GPUvLUkG8Qh2XPn7JI9Ui8wz9HhbrB5iJPMWh7VSv/4uLJZYZqxkL1kC+K/dUjE0CSun/4zds+C0SW83S69A==} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-beta.15': - resolution: {integrity: sha512-lvFtIbidq5EqyAAeiVk41ZNjGRgUoGRBIuqpe1VRJ7R8Av7TLAgGWAwGlHNhO7MFkl7MNRX350CsTtIWIYkNIQ==} - '@rolldown/pluginutils@1.0.0-beta.16': resolution: {integrity: sha512-w3f87JpF7lgIlK03I0R3XidspFgB4MsixE5o/VjBMJI+Ki4XW/Ffrykmj2AUCbVxhRD7Pi9W0Qu2XapJhB2mSA==} - '@rolldown/pluginutils@1.0.0-beta.17': - resolution: {integrity: sha512-i6p5fc1+lAmR3OHmNlv7/3PIY3EtuUu4kVARjkid38p7cmyIyqr0QFnA+k3xoB06wQUpBA91H1HFlRreZ2v5oA==} + '@rolldown/pluginutils@1.0.0-beta.19': + resolution: {integrity: sha512-3FL3mnMbPu0muGOCaKAhhFEYmqv9eTfPSJRJmANrCwtgK8VuxpsZDGK+m0LYAGoyO8+0j5uRe4PeyPDK1yA/hA==} '@rollup/plugin-alias@5.1.1': resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} @@ -2105,8 +2102,8 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node@22.15.31': - resolution: {integrity: sha512-jnVe5ULKl6tijxUhvQeNbQG/84fHfg+yMak02cT8QVhBx/F05rAVxCGBYYTh2EKz22D6JF5ktXuNwdx7b9iEGw==} + '@types/node@22.15.32': + resolution: {integrity: sha512-3jigKqgSjsH6gYZv2nEsqdXfZqIFGAV36XYYjf9KGZ3PSG+IhLecqPnI310RvjutyMwifE2hhhNEklOUrvx/wA==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -2145,16 +2142,16 @@ packages: '@types/unist@3.0.2': resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} - '@typescript-eslint/eslint-plugin@8.34.0': - resolution: {integrity: sha512-QXwAlHlbcAwNlEEMKQS2RCgJsgXrTJdjXT08xEgbPFa2yYQgVjBymxP5DrfrE7X7iodSzd9qBUHUycdyVJTW1w==} + '@typescript-eslint/eslint-plugin@8.34.1': + resolution: {integrity: sha512-STXcN6ebF6li4PxwNeFnqF8/2BNDvBupf2OPx2yWNzr6mKNGF7q49VM00Pz5FaomJyqvbXpY6PhO+T9w139YEQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.34.0 + '@typescript-eslint/parser': ^8.34.1 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/parser@8.34.0': - resolution: {integrity: sha512-vxXJV1hVFx3IXz/oy2sICsJukaBrtDEQSBiV48/YIV5KWjX1dO+bcIr/kCPrW6weKXvsaGKFNlwH0v2eYdRRbA==} + '@typescript-eslint/parser@8.34.1': + resolution: {integrity: sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2166,8 +2163,8 @@ packages: peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/project-service@8.34.0': - resolution: {integrity: sha512-iEgDALRf970/B2YExmtPMPF54NenZUf4xpL3wsCRx/lgjz6ul/l13R81ozP/ZNuXfnLCS+oPmG7JIxfdNYKELw==} + '@typescript-eslint/project-service@8.34.1': + resolution: {integrity: sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' @@ -2176,8 +2173,8 @@ packages: resolution: {integrity: sha512-dM4UBtgmzHR9bS0Rv09JST0RcHYearoEoo3pG5B6GoTR9XcyeqX87FEhPo+5kTvVfKCvfHaHrcgeJQc6mrDKrA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.34.0': - resolution: {integrity: sha512-9Ac0X8WiLykl0aj1oYQNcLZjHgBojT6cW68yAgZ19letYu+Hxd0rE0veI1XznSSst1X5lwnxhPbVdwjDRIomRw==} + '@typescript-eslint/scope-manager@8.34.1': + resolution: {integrity: sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/tsconfig-utils@8.33.1': @@ -2186,14 +2183,14 @@ packages: peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/tsconfig-utils@8.34.0': - resolution: {integrity: sha512-+W9VYHKFIzA5cBeooqQxqNriAP0QeQ7xTiDuIOr71hzgffm3EL2hxwWBIIj4GuofIbKxGNarpKqIq6Q6YrShOA==} + '@typescript-eslint/tsconfig-utils@8.34.1': + resolution: {integrity: sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/type-utils@8.34.0': - resolution: {integrity: sha512-n7zSmOcUVhcRYC75W2pnPpbO1iwhJY3NLoHEtbJwJSNlVAZuwqu05zY3f3s2SDWWDSo9FdN5szqc73DCtDObAg==} + '@typescript-eslint/type-utils@8.34.1': + resolution: {integrity: sha512-Tv7tCCr6e5m8hP4+xFugcrwTOucB8lshffJ6zf1mF1TbU67R+ntCc6DzLNKM+s/uzDyv8gLq7tufaAhIBYeV8g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2207,14 +2204,18 @@ packages: resolution: {integrity: sha512-9V24k/paICYPniajHfJ4cuAWETnt7Ssy+R0Rbcqo5sSFr3QEZ/8TSoUi9XeXVBGXCaLtwTOKSLGcInCAvyZeMA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.34.1': + resolution: {integrity: sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.33.1': resolution: {integrity: sha512-+s9LYcT8LWjdYWu7IWs7FvUxpQ/DGkdjZeE/GGulHvv8rvYwQvVaUZ6DE+j5x/prADUgSbbCWZ2nPI3usuVeOA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/typescript-estree@8.34.0': - resolution: {integrity: sha512-rOi4KZxI7E0+BMqG7emPSK1bB4RICCpF7QD3KCLXn9ZvWoESsOMlHyZPAHyG04ujVplPaHbmEvs34m+wjgtVtg==} + '@typescript-eslint/typescript-estree@8.34.1': + resolution: {integrity: sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' @@ -2226,8 +2227,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.34.0': - resolution: {integrity: sha512-8L4tWatGchV9A1cKbjaavS6mwYwp39jql8xUmIIKJdm+qiaeHy5KMKlBrf30akXAWBzn2SqKsNOtSENWUwg7XQ==} + '@typescript-eslint/utils@8.34.1': + resolution: {integrity: sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2237,8 +2238,8 @@ packages: resolution: {integrity: sha512-3i8NrFcZeeDHJ+7ZUuDkGT+UHq+XoFGsymNK2jZCOHcfEzRQ0BdpRtdpSx/Iyf3MHLWIcLS0COuOPibKQboIiQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.34.0': - resolution: {integrity: sha512-qHV7pW7E85A0x6qyrFn+O+q1k1p3tQCsqIZ1KZ5ESLXY57aTvUd3/a4rdPTeXisvhXn2VQG0VSKUqs8KHF2zcA==} + '@typescript-eslint/visitor-keys@8.34.1': + resolution: {integrity: sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.2.0': @@ -2342,11 +2343,11 @@ packages: '@vitejs/release-scripts@1.5.0': resolution: {integrity: sha512-rZQdM5AneNJHzDOTUaQOOifauH6MkGTSI+GH8bKKrimBaa5BtvpnE1iz43fJ4QDO7RdGxAlxWnPQAVlFhGM1cQ==} - '@vitest/expect@3.2.3': - resolution: {integrity: sha512-W2RH2TPWVHA1o7UmaFKISPvdicFJH+mjykctJFoAkUw+SPTJTGjUNdKscFBrqM7IPnCVu6zihtKYa7TkZS1dkQ==} + '@vitest/expect@3.2.4': + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} - '@vitest/mocker@3.2.3': - resolution: {integrity: sha512-cP6fIun+Zx8he4rbWvi+Oya6goKQDZK+Yq4hhlggwQBbrlOQ4qtZ+G4nxB6ZnzI9lyIb+JnvyiJnPC2AGbKSPA==} + '@vitest/mocker@3.2.4': + resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} peerDependencies: msw: ^2.4.9 vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 @@ -2356,20 +2357,20 @@ packages: vite: optional: true - '@vitest/pretty-format@3.2.3': - resolution: {integrity: sha512-yFglXGkr9hW/yEXngO+IKMhP0jxyFw2/qys/CK4fFUZnSltD+MU7dVYGrH8rvPcK/O6feXQA+EU33gjaBBbAng==} + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} - '@vitest/runner@3.2.3': - resolution: {integrity: sha512-83HWYisT3IpMaU9LN+VN+/nLHVBCSIUKJzGxC5RWUOsK1h3USg7ojL+UXQR3b4o4UBIWCYdD2fxuzM7PQQ1u8w==} + '@vitest/runner@3.2.4': + resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} - '@vitest/snapshot@3.2.3': - resolution: {integrity: sha512-9gIVWx2+tysDqUmmM1L0hwadyumqssOL1r8KJipwLx5JVYyxvVRfxvMq7DaWbZZsCqZnu/dZedaZQh4iYTtneA==} + '@vitest/snapshot@3.2.4': + resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} - '@vitest/spy@3.2.3': - resolution: {integrity: sha512-JHu9Wl+7bf6FEejTCREy+DmgWe+rQKbK+y32C/k5f4TBIAlijhJbRBIRIOCEpVevgRsCQR2iHRUH2/qKVM/plw==} + '@vitest/spy@3.2.4': + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} - '@vitest/utils@3.2.3': - resolution: {integrity: sha512-4zFBCU5Pf+4Z6v+rwnZ1HU1yzOKKvDkMXZrymE2PBlbjKJRlrOxbvpfPSvJTGRIwGoahaOGvp+kbCoxifhzJ1Q==} + '@vitest/utils@3.2.4': + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -3312,6 +3313,9 @@ packages: loupe@3.1.3: resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} + loupe@3.1.4: + resolution: {integrity: sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -3625,18 +3629,18 @@ packages: pkg-types@2.1.0: resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==} - playwright-chromium@1.53.0: - resolution: {integrity: sha512-wFIOWSc3037Ql9swJrfCQL/SfcVXbl8X944CzzQmkvh4KqCNp1QMBOGPfltu/+URTfCa5I9qc6HW1YEgY1jeNA==} + playwright-chromium@1.53.1: + resolution: {integrity: sha512-V+S/r4UkmVoF+ARC4YDnJF6fIsdIGMgyJ6daBdrODryU5qqWrM1M+5PP/jRX6u1yfwPfSNRwlYsat49duKsyMQ==} engines: {node: '>=18'} hasBin: true - playwright-core@1.53.0: - resolution: {integrity: sha512-mGLg8m0pm4+mmtB7M89Xw/GSqoNC+twivl8ITteqvAndachozYe2ZA7srU6uleV1vEdAHYqjq+SV8SNxRRFYBw==} + playwright-core@1.53.1: + resolution: {integrity: sha512-Z46Oq7tLAyT0lGoFx4DOuB1IA9D1TPj0QkYxpPVUnGDqHHvDpCftu1J2hM2PiWsNMoZh8+LQaarAWcDfPBc6zg==} engines: {node: '>=18'} hasBin: true - playwright@1.53.0: - resolution: {integrity: sha512-ghGNnIEYZC4E+YtclRn4/p6oYbdPiASELBIYkBXfaTVKreQUYbMUYQDwS12a8F0/HtIjr/CkGjtwABeFPGcS4Q==} + playwright@1.53.1: + resolution: {integrity: sha512-LJ13YLr/ocweuwxyGf1XNFWIU4M2zUSo149Qbp+A4cpwDjsxRPj7k6H25LBrEHiEwxvRbD8HdwvQmRMSvquhYw==} engines: {node: '>=18'} hasBin: true @@ -3963,8 +3967,8 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rolldown-vite@6.3.19: - resolution: {integrity: sha512-WhyqhhSrC46rh+r36Dk7B+WN3tVgzbCr5oKEZGHed7fxydNhHmantPY+U36g4wb+GT1dQypc7OeazoFAsbMyfg==} + rolldown-vite@6.3.21: + resolution: {integrity: sha512-mjds/3g+YPWJmT08oQic/L5sWvs/lNc4vs9vmD7uHQtGdP7qGriWtYf62Vp+6eQhd/MPeFVw71TMEEt/cH+sLQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -4003,12 +4007,12 @@ packages: yaml: optional: true - rolldown@1.0.0-beta.15: - resolution: {integrity: sha512-ep788NsIGl0W5gT+99hBrSGe4Hdhcwc55PqM3O0mR5H0C4ZpGpDGgu9YzTJ8a6mFDLnFnc/LYC+Dszb7oWK/dg==} + rolldown@1.0.0-beta.16: + resolution: {integrity: sha512-ruNh01VbnTJsW0kgYywrQ80FUY0yJvXqavPVljGg0dRiwggYB7yXlypw1ptkFiomkEOnOGiwncjiviUakgPHxg==} hasBin: true - rolldown@1.0.0-beta.17: - resolution: {integrity: sha512-L45QWZF/7HYfIO1nZZL83O8xOMOxBlMiFsspMRUus68wkiag3PNn6PDqEFbzbQDYN32YHFEb2qzqkC2M0enZ2A==} + rolldown@1.0.0-beta.19: + resolution: {integrity: sha512-rEBMUCfaK4LOf2rynaqcgKDGqwZ6GdWFdbgjfBOBvsY3Mr3AL0G6AKx516vDhOj1UVkAnxixfqDrXkZkH27n3w==} hasBin: true rollup-plugin-dts@6.2.1: @@ -4207,8 +4211,8 @@ packages: resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} - tinypool@1.1.0: - resolution: {integrity: sha512-7CotroY9a8DKsKprEy/a14aCCm8jYVmR7aFy4fpkZM8sdpNJbKkixuNjgM50yCmip2ezc8z4N7k3oe2+rfRJCQ==} + tinypool@1.1.1: + resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} engines: {node: ^18.0.0 || >=20.0.0} tinyrainbow@2.0.0: @@ -4255,8 +4259,8 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - typescript-eslint@8.34.0: - resolution: {integrity: sha512-MRpfN7uYjTrTGigFCt8sRyNqJFhjN0WwZecldaqhWm+wy0gaRt8Edb/3cuUy0zdq2opJWT6iXINKAtewnDOltQ==} + typescript-eslint@8.34.1: + resolution: {integrity: sha512-XjS+b6Vg9oT1BaIUfkW3M3LvqZE++rbzAMEHuccCfO/YkP43ha6w3jTEMilQxMF92nVOYCcdjv1ZUhAa1D/0ow==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -4335,8 +4339,8 @@ packages: vfile@6.0.1: resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} - vite-node@3.2.3: - resolution: {integrity: sha512-gc8aAifGuDIpZHrPjuHyP4dpQmYXqWw7D1GmDnWeNWP654UEXzVfQ5IHPSK5HaHkwB/+p1atpYpSdw/2kOv8iQ==} + vite-node@3.2.4: + resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true @@ -4380,16 +4384,16 @@ packages: yaml: optional: true - vitest@3.2.3: - resolution: {integrity: sha512-E6U2ZFXe3N/t4f5BwUaVCKRLHqUpk1CBWeMh78UT4VaTPH/2dyvH6ALl29JTovEPu9dVKr/K/J4PkXgrMbw4Ww==} + vitest@3.2.4: + resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/debug': ^4.1.12 '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.2.3 - '@vitest/ui': 3.2.3 + '@vitest/browser': 3.2.4 + '@vitest/ui': 3.2.4 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -5118,13 +5122,13 @@ snapshots: '@eslint/core': 0.14.0 levn: 0.4.1 - '@generouted/react-router@1.20.0(react-router-dom@7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-router@7.6.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.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': + '@generouted/react-router@1.20.0(react-router-dom@7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-router@7.6.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.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': dependencies: fast-glob: 3.3.3 - generouted: 1.20.0(react-router-dom@7.6.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.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + generouted: 1.20.0(react-router-dom@7.6.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.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) react: 19.1.0 react-router: 7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 6.3.3(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 6.3.3(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) transitivePeerDependencies: - react-router-dom @@ -5215,101 +5219,99 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 - '@oxc-project/runtime@0.72.3': {} - '@oxc-project/runtime@0.73.0': {} - '@oxc-project/types@0.72.3': {} + '@oxc-project/runtime@0.73.2': {} '@oxc-project/types@0.73.0': {} - '@playwright/test@1.53.0': + '@oxc-project/types@0.73.2': {} + + '@playwright/test@1.53.1': dependencies: - playwright: 1.53.0 + playwright: 1.53.1 '@publint/pack@0.1.2': {} - '@rolldown/binding-darwin-arm64@1.0.0-beta.15': + '@rolldown/binding-darwin-arm64@1.0.0-beta.16': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-beta.17': + '@rolldown/binding-darwin-arm64@1.0.0-beta.19': optional: true - '@rolldown/binding-darwin-x64@1.0.0-beta.15': + '@rolldown/binding-darwin-x64@1.0.0-beta.16': optional: true - '@rolldown/binding-darwin-x64@1.0.0-beta.17': + '@rolldown/binding-darwin-x64@1.0.0-beta.19': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-beta.15': + '@rolldown/binding-freebsd-x64@1.0.0-beta.16': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-beta.17': + '@rolldown/binding-freebsd-x64@1.0.0-beta.19': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.15': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.16': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.17': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.19': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.15': + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.16': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.17': + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.19': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.15': + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.16': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.17': + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.19': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.15': + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.16': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.17': + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.19': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-beta.15': + '@rolldown/binding-linux-x64-musl@1.0.0-beta.16': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-beta.17': + '@rolldown/binding-linux-x64-musl@1.0.0-beta.19': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-beta.15': + '@rolldown/binding-wasm32-wasi@1.0.0-beta.16': dependencies: '@napi-rs/wasm-runtime': 0.2.11 optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-beta.17': + '@rolldown/binding-wasm32-wasi@1.0.0-beta.19': dependencies: '@napi-rs/wasm-runtime': 0.2.11 optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.15': + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.16': optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.17': + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.19': optional: true - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.15': + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.16': optional: true - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.17': + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.19': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.15': + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.16': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.17': + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.19': optional: true - '@rolldown/pluginutils@1.0.0-beta.15': {} - '@rolldown/pluginutils@1.0.0-beta.16': {} - '@rolldown/pluginutils@1.0.0-beta.17': {} + '@rolldown/pluginutils@1.0.0-beta.19': {} '@rollup/plugin-alias@5.1.1(rollup@4.37.0)': optionalDependencies: @@ -5539,7 +5541,7 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 22.15.31 + '@types/node': 22.15.32 '@types/hast@3.0.3': dependencies: @@ -5554,7 +5556,7 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 22.15.31 + '@types/node': 22.15.32 '@types/mdast@4.0.3': dependencies: @@ -5564,7 +5566,7 @@ snapshots: '@types/ms@0.7.34': {} - '@types/node@22.15.31': + '@types/node@22.15.32': dependencies: undici-types: 6.21.0 @@ -5603,14 +5605,14 @@ snapshots: '@types/unist@3.0.2': {} - '@typescript-eslint/eslint-plugin@8.34.0(@typescript-eslint/parser@8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.34.0 - '@typescript-eslint/type-utils': 8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.34.0 + '@typescript-eslint/parser': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.34.1 + '@typescript-eslint/type-utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.34.1 eslint: 9.29.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 7.0.5 @@ -5620,12 +5622,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/scope-manager': 8.34.0 - '@typescript-eslint/types': 8.34.0 - '@typescript-eslint/typescript-estree': 8.34.0(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.34.0 + '@typescript-eslint/scope-manager': 8.34.1 + '@typescript-eslint/types': 8.34.1 + '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.34.1 debug: 4.4.1 eslint: 9.29.0(jiti@2.4.2) typescript: 5.8.3 @@ -5635,16 +5637,16 @@ snapshots: '@typescript-eslint/project-service@8.33.1(typescript@5.8.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.33.1(typescript@5.8.3) - '@typescript-eslint/types': 8.33.1 + '@typescript-eslint/types': 8.34.0 debug: 4.4.1 typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.34.0(typescript@5.8.3)': + '@typescript-eslint/project-service@8.34.1(typescript@5.8.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.34.0(typescript@5.8.3) - '@typescript-eslint/types': 8.34.0 + '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.8.3) + '@typescript-eslint/types': 8.34.1 debug: 4.4.1 typescript: 5.8.3 transitivePeerDependencies: @@ -5655,23 +5657,23 @@ snapshots: '@typescript-eslint/types': 8.33.1 '@typescript-eslint/visitor-keys': 8.33.1 - '@typescript-eslint/scope-manager@8.34.0': + '@typescript-eslint/scope-manager@8.34.1': dependencies: - '@typescript-eslint/types': 8.34.0 - '@typescript-eslint/visitor-keys': 8.34.0 + '@typescript-eslint/types': 8.34.1 + '@typescript-eslint/visitor-keys': 8.34.1 '@typescript-eslint/tsconfig-utils@8.33.1(typescript@5.8.3)': dependencies: typescript: 5.8.3 - '@typescript-eslint/tsconfig-utils@8.34.0(typescript@5.8.3)': + '@typescript-eslint/tsconfig-utils@8.34.1(typescript@5.8.3)': dependencies: typescript: 5.8.3 - '@typescript-eslint/type-utils@8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.34.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3) + '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) debug: 4.4.1 eslint: 9.29.0(jiti@2.4.2) ts-api-utils: 2.1.0(typescript@5.8.3) @@ -5683,6 +5685,8 @@ snapshots: '@typescript-eslint/types@8.34.0': {} + '@typescript-eslint/types@8.34.1': {} + '@typescript-eslint/typescript-estree@8.33.1(typescript@5.8.3)': dependencies: '@typescript-eslint/project-service': 8.33.1(typescript@5.8.3) @@ -5699,12 +5703,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.34.0(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.34.1(typescript@5.8.3)': dependencies: - '@typescript-eslint/project-service': 8.34.0(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.34.0(typescript@5.8.3) - '@typescript-eslint/types': 8.34.0 - '@typescript-eslint/visitor-keys': 8.34.0 + '@typescript-eslint/project-service': 8.34.1(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.8.3) + '@typescript-eslint/types': 8.34.1 + '@typescript-eslint/visitor-keys': 8.34.1 debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 @@ -5726,12 +5730,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.34.0 - '@typescript-eslint/types': 8.34.0 - '@typescript-eslint/typescript-estree': 8.34.0(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.34.1 + '@typescript-eslint/types': 8.34.1 + '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3) eslint: 9.29.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: @@ -5742,10 +5746,10 @@ snapshots: '@typescript-eslint/types': 8.33.1 eslint-visitor-keys: 4.2.0 - '@typescript-eslint/visitor-keys@8.34.0': + '@typescript-eslint/visitor-keys@8.34.1': dependencies: - '@typescript-eslint/types': 8.34.0 - eslint-visitor-keys: 4.2.0 + '@typescript-eslint/types': 8.34.1 + eslint-visitor-keys: 4.2.1 '@ungap/structured-clone@1.2.0': {} @@ -5817,46 +5821,46 @@ snapshots: publint: 0.3.9 semver: 7.7.1 - '@vitest/expect@3.2.3': + '@vitest/expect@3.2.4': dependencies: '@types/chai': 5.2.2 - '@vitest/spy': 3.2.3 - '@vitest/utils': 3.2.3 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.3(vite@6.3.3(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': + '@vitest/mocker@3.2.4(vite@6.3.3(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': dependencies: - '@vitest/spy': 3.2.3 + '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.3.3(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 6.3.3(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - '@vitest/pretty-format@3.2.3': + '@vitest/pretty-format@3.2.4': dependencies: tinyrainbow: 2.0.0 - '@vitest/runner@3.2.3': + '@vitest/runner@3.2.4': dependencies: - '@vitest/utils': 3.2.3 + '@vitest/utils': 3.2.4 pathe: 2.0.3 strip-literal: 3.0.0 - '@vitest/snapshot@3.2.3': + '@vitest/snapshot@3.2.4': dependencies: - '@vitest/pretty-format': 3.2.3 + '@vitest/pretty-format': 3.2.4 magic-string: 0.30.17 pathe: 2.0.3 - '@vitest/spy@3.2.3': + '@vitest/spy@3.2.4': dependencies: tinyspy: 4.0.3 - '@vitest/utils@3.2.3': + '@vitest/utils@3.2.4': dependencies: - '@vitest/pretty-format': 3.2.3 - loupe: 3.1.3 + '@vitest/pretty-format': 3.2.4 + loupe: 3.1.4 tinyrainbow: 2.0.0 acorn-jsx@5.3.2(acorn@8.14.1): @@ -6335,7 +6339,7 @@ snapshots: eslint: 9.29.0(jiti@2.4.2) eslint-compat-utils: 0.5.1(eslint@9.29.0(jiti@2.4.2)) - eslint-plugin-import-x@4.15.2(@typescript-eslint/utils@8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2)): + eslint-plugin-import-x@4.15.2(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2)): dependencies: '@typescript-eslint/types': 8.34.0 comment-parser: 1.4.1 @@ -6348,7 +6352,7 @@ snapshots: stable-hash-x: 0.1.1 unrs-resolver: 1.9.0 optionalDependencies: - '@typescript-eslint/utils': 8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) transitivePeerDependencies: - supports-color @@ -6580,17 +6584,17 @@ snapshots: function-bind@1.1.2: {} - generouted@1.11.7(react-router-dom@7.6.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.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + generouted@1.11.7(react-router-dom@7.6.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.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): dependencies: react: 19.1.0 react-router-dom: 7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 6.3.3(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 6.3.3(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - generouted@1.20.0(react-router-dom@7.6.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.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + generouted@1.20.0(react-router-dom@7.6.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.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): dependencies: react: 19.1.0 react-router-dom: 7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 6.3.3(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 6.3.3(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) gensync@1.0.0-beta.2: {} @@ -6894,6 +6898,8 @@ snapshots: loupe@3.1.3: {} + loupe@3.1.4: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -7387,15 +7393,15 @@ snapshots: exsolve: 1.0.4 pathe: 2.0.3 - playwright-chromium@1.53.0: + playwright-chromium@1.53.1: dependencies: - playwright-core: 1.53.0 + playwright-core: 1.53.1 - playwright-core@1.53.0: {} + playwright-core@1.53.1: {} - playwright@1.53.0: + playwright@1.53.1: dependencies: - playwright-core: 1.53.0 + playwright-core: 1.53.1 optionalDependencies: fsevents: 2.3.2 @@ -7710,62 +7716,62 @@ snapshots: rfdc@1.4.1: {} - rolldown-vite@6.3.19(@types/node@22.15.31)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1): + rolldown-vite@6.3.21(@types/node@22.15.32)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1): dependencies: - '@oxc-project/runtime': 0.72.3 + '@oxc-project/runtime': 0.73.0 fdir: 6.4.4(picomatch@4.0.2) lightningcss: 1.30.1 picomatch: 4.0.2 postcss: 8.5.3 - rolldown: 1.0.0-beta.15 + rolldown: 1.0.0-beta.16 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 22.15.31 + '@types/node': 22.15.32 esbuild: 0.25.5 fsevents: 2.3.3 jiti: 2.4.2 tsx: 4.20.3 yaml: 2.7.1 - rolldown@1.0.0-beta.15: - dependencies: - '@oxc-project/runtime': 0.72.3 - '@oxc-project/types': 0.72.3 - '@rolldown/pluginutils': 1.0.0-beta.15 - ansis: 4.1.0 - optionalDependencies: - '@rolldown/binding-darwin-arm64': 1.0.0-beta.15 - '@rolldown/binding-darwin-x64': 1.0.0-beta.15 - '@rolldown/binding-freebsd-x64': 1.0.0-beta.15 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.15 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.15 - '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.15 - '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.15 - '@rolldown/binding-linux-x64-musl': 1.0.0-beta.15 - '@rolldown/binding-wasm32-wasi': 1.0.0-beta.15 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.15 - '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.15 - '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.15 - - rolldown@1.0.0-beta.17: + rolldown@1.0.0-beta.16: dependencies: '@oxc-project/runtime': 0.73.0 '@oxc-project/types': 0.73.0 - '@rolldown/pluginutils': 1.0.0-beta.17 + '@rolldown/pluginutils': 1.0.0-beta.16 + ansis: 4.1.0 + optionalDependencies: + '@rolldown/binding-darwin-arm64': 1.0.0-beta.16 + '@rolldown/binding-darwin-x64': 1.0.0-beta.16 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.16 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.16 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.16 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.16 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.16 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.16 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.16 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.16 + '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.16 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.16 + + rolldown@1.0.0-beta.19: + dependencies: + '@oxc-project/runtime': 0.73.2 + '@oxc-project/types': 0.73.2 + '@rolldown/pluginutils': 1.0.0-beta.19 ansis: 4.1.0 optionalDependencies: - '@rolldown/binding-darwin-arm64': 1.0.0-beta.17 - '@rolldown/binding-darwin-x64': 1.0.0-beta.17 - '@rolldown/binding-freebsd-x64': 1.0.0-beta.17 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.17 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.17 - '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.17 - '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.17 - '@rolldown/binding-linux-x64-musl': 1.0.0-beta.17 - '@rolldown/binding-wasm32-wasi': 1.0.0-beta.17 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.17 - '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.17 - '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.17 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.19 + '@rolldown/binding-darwin-x64': 1.0.0-beta.19 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.19 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.19 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.19 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.19 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.19 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.19 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.19 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.19 + '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.19 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.19 rollup-plugin-dts@6.2.1(rollup@4.37.0)(typescript@5.8.3): dependencies: @@ -7967,7 +7973,7 @@ snapshots: fdir: 6.4.4(picomatch@4.0.2) picomatch: 4.0.2 - tinypool@1.1.0: {} + tinypool@1.1.1: {} tinyrainbow@2.0.0: {} @@ -8006,11 +8012,11 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): + typescript-eslint@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.34.0(@typescript-eslint/parser@8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': 8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.34.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) eslint: 9.29.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: @@ -8154,13 +8160,13 @@ snapshots: unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 - vite-node@3.2.3(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): + vite-node@3.2.4(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: cac: 6.7.14 debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.3.3(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 6.3.3(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) transitivePeerDependencies: - '@types/node' - jiti @@ -8175,7 +8181,7 @@ snapshots: - tsx - yaml - vite@6.3.3(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): + vite@6.3.3(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: esbuild: 0.25.3 fdir: 6.4.4(picomatch@4.0.2) @@ -8184,23 +8190,23 @@ snapshots: rollup: 4.37.0 tinyglobby: 0.2.13 optionalDependencies: - '@types/node': 22.15.31 + '@types/node': 22.15.32 fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.30.1 tsx: 4.20.3 yaml: 2.7.1 - vitest@3.2.3(@types/debug@4.1.12)(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: '@types/chai': 5.2.2 - '@vitest/expect': 3.2.3 - '@vitest/mocker': 3.2.3(vite@6.3.3(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) - '@vitest/pretty-format': 3.2.3 - '@vitest/runner': 3.2.3 - '@vitest/snapshot': 3.2.3 - '@vitest/spy': 3.2.3 - '@vitest/utils': 3.2.3 + '@vitest/expect': 3.2.4 + '@vitest/mocker': 3.2.4(vite@6.3.3(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + '@vitest/pretty-format': 3.2.4 + '@vitest/runner': 3.2.4 + '@vitest/snapshot': 3.2.4 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 chai: 5.2.0 debug: 4.4.1 expect-type: 1.2.1 @@ -8211,14 +8217,14 @@ snapshots: tinybench: 2.9.0 tinyexec: 0.3.2 tinyglobby: 0.2.14 - tinypool: 1.1.0 + tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 6.3.3(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vite-node: 3.2.3(@types/node@22.15.31)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 6.3.3(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite-node: 3.2.4(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.15.31 + '@types/node': 22.15.32 transitivePeerDependencies: - jiti - less diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 30ad01cd0..94320515b 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -5,4 +5,4 @@ packages: catalogs: rolldown-vite: - vite: npm:rolldown-vite@^6.3.19 + vite: npm:rolldown-vite@^6.3.21 From 12bd153622731890678e43367e30c4a212d74376 Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Mon, 23 Jun 2025 12:28:13 +0900 Subject: [PATCH 048/313] release: plugin-react@4.6.0 --- packages/plugin-react/CHANGELOG.md | 2 ++ packages/plugin-react/package.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/plugin-react/CHANGELOG.md b/packages/plugin-react/CHANGELOG.md index 40a7dd8ba..3f267d9ed 100644 --- a/packages/plugin-react/CHANGELOG.md +++ b/packages/plugin-react/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +## 4.6.0 (2025-06-23) + ### Add raw Rolldown support This plugin only worked with Vite. But now it can also be used with raw Rolldown. The main purpose for using this plugin with Rolldown is to use react compiler. diff --git a/packages/plugin-react/package.json b/packages/plugin-react/package.json index 35f3093a7..f5e3cafe9 100644 --- a/packages/plugin-react/package.json +++ b/packages/plugin-react/package.json @@ -1,6 +1,6 @@ { "name": "@vitejs/plugin-react", - "version": "4.5.2", + "version": "4.6.0", "license": "MIT", "author": "Evan You", "description": "The default Vite plugin for React projects", From 1583c5d727265faa668ab3d7009736e9fc01ec9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0?= Date: Wed, 25 Jun 2025 10:58:19 +0900 Subject: [PATCH 049/313] chore: remove Vite 7 beta from supported range (#517) --- packages/plugin-react-oxc/package.json | 2 +- packages/plugin-react-swc/package.json | 2 +- packages/plugin-react/package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/plugin-react-oxc/package.json b/packages/plugin-react-oxc/package.json index 20f36fd47..39f6d9288 100644 --- a/packages/plugin-react-oxc/package.json +++ b/packages/plugin-react-oxc/package.json @@ -40,7 +40,7 @@ }, "homepage": "https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react#readme", "peerDependencies": { - "vite": "^6.3.0 || ^7.0.0-beta.0" + "vite": "^6.3.0 || ^7.0.0" }, "devDependencies": { "@vitejs/react-common": "workspace:*", diff --git a/packages/plugin-react-swc/package.json b/packages/plugin-react-swc/package.json index 041193758..ce4c210d5 100644 --- a/packages/plugin-react-swc/package.json +++ b/packages/plugin-react-swc/package.json @@ -33,7 +33,7 @@ "@swc/core": "^1.12.5" }, "peerDependencies": { - "vite": "^4 || ^5 || ^6 || ^7.0.0-beta.0" + "vite": "^4 || ^5 || ^6 || ^7" }, "devDependencies": { "@playwright/test": "^1.53.1", diff --git a/packages/plugin-react/package.json b/packages/plugin-react/package.json index f5e3cafe9..c92677d4c 100644 --- a/packages/plugin-react/package.json +++ b/packages/plugin-react/package.json @@ -57,7 +57,7 @@ "react-refresh": "^0.17.0" }, "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" }, "devDependencies": { "@vitejs/react-common": "workspace:*", From 64abd322bd877468c050c22e8170e3f63716b29b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Jul 2025 12:08:24 +0900 Subject: [PATCH 050/313] fix(deps): update dependency @swc/core to ^1.12.9 (#520) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/plugin-react-swc/package.json | 2 +- pnpm-lock.yaml | 90 +++++++++++++------------- 2 files changed, 46 insertions(+), 46 deletions(-) diff --git a/packages/plugin-react-swc/package.json b/packages/plugin-react-swc/package.json index ce4c210d5..32b08d2aa 100644 --- a/packages/plugin-react-swc/package.json +++ b/packages/plugin-react-swc/package.json @@ -30,7 +30,7 @@ "homepage": "https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react-swc#readme", "dependencies": { "@rolldown/pluginutils": "1.0.0-beta.19", - "@swc/core": "^1.12.5" + "@swc/core": "^1.12.9" }, "peerDependencies": { "vite": "^4 || ^5 || ^6 || ^7" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b20e62d3a..b3bbcc6f5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -148,8 +148,8 @@ importers: specifier: 1.0.0-beta.19 version: 1.0.0-beta.19 '@swc/core': - specifier: ^1.12.5 - version: 1.12.5 + specifier: ^1.12.9 + version: 1.12.9 devDependencies: '@playwright/test': specifier: ^1.53.1 @@ -1957,68 +1957,68 @@ packages: cpu: [x64] os: [win32] - '@swc/core-darwin-arm64@1.12.5': - resolution: {integrity: sha512-3WF+naP/qkt5flrTfJr+p07b522JcixKvIivM7FgvllA6LjJxf+pheoILrTS8IwrNAK/XtHfKWYcGY+3eaA4mA==} + '@swc/core-darwin-arm64@1.12.9': + resolution: {integrity: sha512-GACFEp4nD6V+TZNR2JwbMZRHB+Yyvp14FrcmB6UCUYmhuNWjkxi+CLnEvdbuiKyQYv0zA+TRpCHZ+whEs6gwfA==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.12.5': - resolution: {integrity: sha512-GCcD3dft8YN7unTBcW02Fx41jXp2MNQHCjx5ceWSEYOGvn7vBSUp7k7LkfTxGN5Ftxb9a1mxhPq8r4rD2u/aPw==} + '@swc/core-darwin-x64@1.12.9': + resolution: {integrity: sha512-hv2kls7Ilkm2EpeJz+I9MCil7pGS3z55ZAgZfxklEuYsxpICycxeH+RNRv4EraggN44ms+FWCjtZFu0LGg2V3g==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.12.5': - resolution: {integrity: sha512-jWlzP/Y4+wbE/EJM+WGIDQsklLFV3g5LmbYTBgrY4+5nb517P31mkBzf5y2knfNWPrL7HzNu0578j3Zi2E6Iig==} + '@swc/core-linux-arm-gnueabihf@1.12.9': + resolution: {integrity: sha512-od9tDPiG+wMU9wKtd6y3nYJdNqgDOyLdgRRcrj1/hrbHoUPOM8wZQZdwQYGarw63iLXGgsw7t5HAF9Yc51ilFA==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.12.5': - resolution: {integrity: sha512-GkzgIUz+2r6J6Tn3hb7/4ByaWHRrRZt4vuN9BLAd+y65m2Bt0vlEpPtWhrB/TVe4hEkFR+W5PDETLEbUT4i0tQ==} + '@swc/core-linux-arm64-gnu@1.12.9': + resolution: {integrity: sha512-6qx1ka9LHcLzxIgn2Mros+CZLkHK2TawlXzi/h7DJeNnzi8F1Hw0Yzjp8WimxNCg6s2n+o3jnmin1oXB7gg8rw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.12.5': - resolution: {integrity: sha512-g0AJ7QmZPj3Uw+C5pDa48LAUG7JBgQmB0mN5cW+s2mjaFKT0mTSxYALtx/MDZwJExDPo0yJV8kSbFO1tvFPyhg==} + '@swc/core-linux-arm64-musl@1.12.9': + resolution: {integrity: sha512-yghFZWKPVVGbUdqiD7ft23G0JX6YFGDJPz9YbLLAwGuKZ9th3/jlWoQDAw1Naci31LQhVC+oIji6ozihSuwB2A==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.12.5': - resolution: {integrity: sha512-PeYoSziNy+iNiBHPtAsO84bzBne/mbCsG5ijYkAhS1GVsDgohClorUvRXXhcUZoX2gr8TfSI9WLHo30K+DKiHg==} + '@swc/core-linux-x64-gnu@1.12.9': + resolution: {integrity: sha512-SFUxyhWLZRNL8QmgGNqdi2Q43PNyFVkRZ2zIif30SOGFSxnxcf2JNeSeBgKIGVgaLSuk6xFVVCtJ3KIeaStgRg==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.12.5': - resolution: {integrity: sha512-EJrfCCIyuV5LLmYgKtIMwtgsnjVesdFe0IgQzEKs9OfB6cL6g7WO9conn8BkGX8jphVa7jChKxShDGkreWWDzA==} + '@swc/core-linux-x64-musl@1.12.9': + resolution: {integrity: sha512-9FB0wM+6idCGTI20YsBNBg9xSWtkDBymnpaTCsZM3qDc0l4uOpJMqbfWhQvp17x7r/ulZfb2QY8RDvQmCL6AcQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.12.5': - resolution: {integrity: sha512-FnwT7fxkJJMgsfiDoZKEVGyCzrPFbzpflFAAoTCUCu3MaHw6mW55o/MAAfofvJ1iIcEpec4o93OilsmKtpyO5Q==} + '@swc/core-win32-arm64-msvc@1.12.9': + resolution: {integrity: sha512-zHOusMVbOH9ik5RtRrMiGzLpKwxrPXgXkBm3SbUCa65HAdjV33NZ0/R9Rv1uPESALtEl2tzMYLUxYA5ECFDFhA==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.12.5': - resolution: {integrity: sha512-jW6l4KFt9mIXSpGseE6BQOEFmbIeXeShDuWgldEJXKeXf/uPs8wrqv80XBIUwVpK0ZbmJwPQ0waGVj8UM3th2Q==} + '@swc/core-win32-ia32-msvc@1.12.9': + resolution: {integrity: sha512-aWZf0PqE0ot7tCuhAjRkDFf41AzzSQO0x2xRfTbnhpROp57BRJ/N5eee1VULO/UA2PIJRG7GKQky5bSGBYlFug==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.12.5': - resolution: {integrity: sha512-AZszwuEjlz1tSNLQRm3T5OZJ5eebxjJlDQnnzXJmg0B7DJMRoaAe1HTLOmejxjFK6yWr7fh+pSeCw2PgQLxgqA==} + '@swc/core-win32-x64-msvc@1.12.9': + resolution: {integrity: sha512-C25fYftXOras3P3anSUeXXIpxmEkdAcsIL9yrr0j1xepTZ/yKwpnQ6g3coj8UXdeJy4GTVlR6+Ow/QiBgZQNOg==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.12.5': - resolution: {integrity: sha512-KxA0PHHIuUBmQ/Oi+xFpVzILj2Oo37sTtftCbyowQlyx5YOknEOw1kLpas5hMcpznXgFyAWbpK71xQps4INPgA==} + '@swc/core@1.12.9': + resolution: {integrity: sha512-O+LfT2JlVMsIMWG9x+rdxg8GzpzeGtCZQfXV7cKc1PjIKUkLFf1QJ7okuseA4f/9vncu37dQ2ZcRrPKy0Ndd5g==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '>=0.5.17' @@ -5428,51 +5428,51 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.37.0': optional: true - '@swc/core-darwin-arm64@1.12.5': + '@swc/core-darwin-arm64@1.12.9': optional: true - '@swc/core-darwin-x64@1.12.5': + '@swc/core-darwin-x64@1.12.9': optional: true - '@swc/core-linux-arm-gnueabihf@1.12.5': + '@swc/core-linux-arm-gnueabihf@1.12.9': optional: true - '@swc/core-linux-arm64-gnu@1.12.5': + '@swc/core-linux-arm64-gnu@1.12.9': optional: true - '@swc/core-linux-arm64-musl@1.12.5': + '@swc/core-linux-arm64-musl@1.12.9': optional: true - '@swc/core-linux-x64-gnu@1.12.5': + '@swc/core-linux-x64-gnu@1.12.9': optional: true - '@swc/core-linux-x64-musl@1.12.5': + '@swc/core-linux-x64-musl@1.12.9': optional: true - '@swc/core-win32-arm64-msvc@1.12.5': + '@swc/core-win32-arm64-msvc@1.12.9': optional: true - '@swc/core-win32-ia32-msvc@1.12.5': + '@swc/core-win32-ia32-msvc@1.12.9': optional: true - '@swc/core-win32-x64-msvc@1.12.5': + '@swc/core-win32-x64-msvc@1.12.9': optional: true - '@swc/core@1.12.5': + '@swc/core@1.12.9': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.23 optionalDependencies: - '@swc/core-darwin-arm64': 1.12.5 - '@swc/core-darwin-x64': 1.12.5 - '@swc/core-linux-arm-gnueabihf': 1.12.5 - '@swc/core-linux-arm64-gnu': 1.12.5 - '@swc/core-linux-arm64-musl': 1.12.5 - '@swc/core-linux-x64-gnu': 1.12.5 - '@swc/core-linux-x64-musl': 1.12.5 - '@swc/core-win32-arm64-msvc': 1.12.5 - '@swc/core-win32-ia32-msvc': 1.12.5 - '@swc/core-win32-x64-msvc': 1.12.5 + '@swc/core-darwin-arm64': 1.12.9 + '@swc/core-darwin-x64': 1.12.9 + '@swc/core-linux-arm-gnueabihf': 1.12.9 + '@swc/core-linux-arm64-gnu': 1.12.9 + '@swc/core-linux-arm64-musl': 1.12.9 + '@swc/core-linux-x64-gnu': 1.12.9 + '@swc/core-linux-x64-musl': 1.12.9 + '@swc/core-win32-arm64-msvc': 1.12.9 + '@swc/core-win32-ia32-msvc': 1.12.9 + '@swc/core-win32-x64-msvc': 1.12.9 '@swc/counter@0.1.3': {} From 9da5e19bb87ea4e1ee817781f2c7c6f5801f385d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Jul 2025 12:12:52 +0900 Subject: [PATCH 051/313] fix(deps): update all non-major dependencies (#519) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 16 +- packages/plugin-react-oxc/package.json | 2 +- packages/plugin-react-swc/package.json | 6 +- .../playground/emotion-plugin/package.json | 2 +- .../playground/emotion/package.json | 2 +- .../playground/ts-lib/package.json | 2 +- packages/plugin-react/package.json | 6 +- playground/react-emotion/package.json | 2 +- pnpm-lock.yaml | 899 +++++++++--------- 9 files changed, 462 insertions(+), 475 deletions(-) diff --git a/package.json b/package.json index a195b200d..ca1a11662 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "engines": { "node": "^14.18.0 || >=16.0.0" }, - "packageManager": "pnpm@10.12.2", + "packageManager": "pnpm@10.12.4", "homepage": "https://github.com/vitejs/vite-plugin-react/", "keywords": [ "frontend", @@ -33,24 +33,24 @@ "ci-publish": "tsx scripts/publishCI.ts" }, "devDependencies": { - "@eslint/js": "^9.29.0", + "@eslint/js": "^9.30.1", "@types/fs-extra": "^11.0.4", - "@types/node": "^22.15.32", + "@types/node": "^22.16.0", "@vitejs/release-scripts": "^1.5.0", - "eslint": "^9.29.0", - "eslint-plugin-import-x": "^4.15.2", + "eslint": "^9.30.1", + "eslint-plugin-import-x": "^4.16.1", "eslint-plugin-n": "^17.20.0", "eslint-plugin-regexp": "^2.9.0", "fs-extra": "^11.3.0", - "globals": "^16.2.0", + "globals": "^16.3.0", "lint-staged": "^15.5.2", "picocolors": "^1.1.1", - "playwright-chromium": "^1.53.1", + "playwright-chromium": "^1.53.2", "prettier": "^3.0.3", "simple-git-hooks": "^2.13.0", "tsx": "^4.20.3", "typescript": "^5.8.3", - "typescript-eslint": "^8.34.1", + "typescript-eslint": "^8.35.1", "vite": "^6.3.3", "vitest": "^3.2.4" }, diff --git a/packages/plugin-react-oxc/package.json b/packages/plugin-react-oxc/package.json index 39f6d9288..fbf23afa1 100644 --- a/packages/plugin-react-oxc/package.json +++ b/packages/plugin-react-oxc/package.json @@ -48,6 +48,6 @@ "vite": "catalog:rolldown-vite" }, "dependencies": { - "@rolldown/pluginutils": "1.0.0-beta.19" + "@rolldown/pluginutils": "1.0.0-beta.23" } } diff --git a/packages/plugin-react-swc/package.json b/packages/plugin-react-swc/package.json index 32b08d2aa..9a4c6576e 100644 --- a/packages/plugin-react-swc/package.json +++ b/packages/plugin-react-swc/package.json @@ -29,16 +29,16 @@ }, "homepage": "https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react-swc#readme", "dependencies": { - "@rolldown/pluginutils": "1.0.0-beta.19", + "@rolldown/pluginutils": "1.0.0-beta.23", "@swc/core": "^1.12.9" }, "peerDependencies": { "vite": "^4 || ^5 || ^6 || ^7" }, "devDependencies": { - "@playwright/test": "^1.53.1", + "@playwright/test": "^1.53.2", "@types/fs-extra": "^11.0.4", - "@types/node": "^22.15.32", + "@types/node": "^22.16.0", "@vitejs/react-common": "workspace:*", "esbuild": "^0.25.5", "fs-extra": "^11.3.0", diff --git a/packages/plugin-react-swc/playground/emotion-plugin/package.json b/packages/plugin-react-swc/playground/emotion-plugin/package.json index 954a3f88b..75c850c01 100644 --- a/packages/plugin-react-swc/playground/emotion-plugin/package.json +++ b/packages/plugin-react-swc/playground/emotion-plugin/package.json @@ -9,7 +9,7 @@ }, "dependencies": { "@emotion/react": "^11.14.0", - "@emotion/styled": "^11.14.0", + "@emotion/styled": "^11.14.1", "react": "^19.1.0", "react-dom": "^19.1.0" }, diff --git a/packages/plugin-react-swc/playground/emotion/package.json b/packages/plugin-react-swc/playground/emotion/package.json index d04934b2a..774cfcba8 100644 --- a/packages/plugin-react-swc/playground/emotion/package.json +++ b/packages/plugin-react-swc/playground/emotion/package.json @@ -9,7 +9,7 @@ }, "dependencies": { "@emotion/react": "^11.14.0", - "@emotion/styled": "^11.14.0", + "@emotion/styled": "^11.14.1", "react": "^19.1.0", "react-dom": "^19.1.0" }, diff --git a/packages/plugin-react-swc/playground/ts-lib/package.json b/packages/plugin-react-swc/playground/ts-lib/package.json index 22d2e4f21..7d175c97e 100644 --- a/packages/plugin-react-swc/playground/ts-lib/package.json +++ b/packages/plugin-react-swc/playground/ts-lib/package.json @@ -12,7 +12,7 @@ "generouted": "1.11.7", "react": "^19.1.0", "react-dom": "^19.1.0", - "react-router-dom": "^7.6.2" + "react-router-dom": "^7.6.3" }, "devDependencies": { "@types/react": "^19.1.8", diff --git a/packages/plugin-react/package.json b/packages/plugin-react/package.json index c92677d4c..eba25aa6d 100644 --- a/packages/plugin-react/package.json +++ b/packages/plugin-react/package.json @@ -49,10 +49,10 @@ }, "homepage": "https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react#readme", "dependencies": { - "@babel/core": "^7.27.4", + "@babel/core": "^7.27.7", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", - "@rolldown/pluginutils": "1.0.0-beta.19", + "@rolldown/pluginutils": "1.0.0-beta.23", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, @@ -64,7 +64,7 @@ "babel-plugin-react-compiler": "19.1.0-rc.2", "react": "^19.1.0", "react-dom": "^19.1.0", - "rolldown": "1.0.0-beta.19", + "rolldown": "1.0.0-beta.23", "unbuild": "^3.5.0", "vitest": "^3.2.4" } diff --git a/playground/react-emotion/package.json b/playground/react-emotion/package.json index 85eb640b4..d8d1f113a 100644 --- a/playground/react-emotion/package.json +++ b/playground/react-emotion/package.json @@ -10,7 +10,7 @@ }, "dependencies": { "@emotion/react": "^11.14.0", - "@emotion/styled": "^11.14.0", + "@emotion/styled": "^11.14.1", "react": "^19.1.0", "react-dom": "^19.1.0", "react-switch": "^7.1.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b3bbcc6f5..2878c52f6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,35 +17,35 @@ importers: .: devDependencies: '@eslint/js': - specifier: ^9.29.0 - version: 9.29.0 + specifier: ^9.30.1 + version: 9.30.1 '@types/fs-extra': specifier: ^11.0.4 version: 11.0.4 '@types/node': - specifier: ^22.15.32 - version: 22.15.32 + specifier: ^22.16.0 + version: 22.16.0 '@vitejs/release-scripts': specifier: ^1.5.0 version: 1.5.0 eslint: - specifier: ^9.29.0 - version: 9.29.0(jiti@2.4.2) + specifier: ^9.30.1 + version: 9.30.1(jiti@2.4.2) eslint-plugin-import-x: - specifier: ^4.15.2 - version: 4.15.2(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2)) + specifier: ^4.16.1 + version: 4.16.1(@typescript-eslint/utils@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2)) eslint-plugin-n: specifier: ^17.20.0 - version: 17.20.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + version: 17.20.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) eslint-plugin-regexp: specifier: ^2.9.0 - version: 2.9.0(eslint@9.29.0(jiti@2.4.2)) + version: 2.9.0(eslint@9.30.1(jiti@2.4.2)) fs-extra: specifier: ^11.3.0 version: 11.3.0 globals: - specifier: ^16.2.0 - version: 16.2.0 + specifier: ^16.3.0 + version: 16.3.0 lint-staged: specifier: ^15.5.2 version: 15.5.2 @@ -53,8 +53,8 @@ importers: specifier: ^1.1.1 version: 1.1.1 playwright-chromium: - specifier: ^1.53.1 - version: 1.53.1 + specifier: ^1.53.2 + version: 1.53.2 prettier: specifier: ^3.0.3 version: 3.1.0 @@ -68,35 +68,35 @@ importers: specifier: ^5.8.3 version: 5.8.3 typescript-eslint: - specifier: ^8.34.1 - version: 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + specifier: ^8.35.1 + version: 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) vite: specifier: ^6.3.3 - version: 6.3.3(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + version: 6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) packages/common: devDependencies: vite: specifier: ^6.3.3 - version: 6.3.3(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + version: 6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) packages/plugin-react: dependencies: '@babel/core': - specifier: ^7.27.4 - version: 7.27.4 + specifier: ^7.27.7 + version: 7.27.7 '@babel/plugin-transform-react-jsx-self': specifier: ^7.27.1 - version: 7.27.1(@babel/core@7.27.4) + version: 7.27.1(@babel/core@7.27.7) '@babel/plugin-transform-react-jsx-source': specifier: ^7.27.1 - version: 7.27.1(@babel/core@7.27.4) + version: 7.27.1(@babel/core@7.27.7) '@rolldown/pluginutils': - specifier: 1.0.0-beta.19 - version: 1.0.0-beta.19 + specifier: 1.0.0-beta.23 + version: 1.0.0-beta.23 '@types/babel__core': specifier: ^7.20.5 version: 7.20.5 @@ -117,20 +117,20 @@ importers: specifier: ^19.1.0 version: 19.1.0(react@19.1.0) rolldown: - specifier: 1.0.0-beta.19 - version: 1.0.0-beta.19 + specifier: 1.0.0-beta.23 + version: 1.0.0-beta.23 unbuild: specifier: ^3.5.0 version: 3.5.0(typescript@5.8.3) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) packages/plugin-react-oxc: dependencies: '@rolldown/pluginutils': - specifier: 1.0.0-beta.19 - version: 1.0.0-beta.19 + specifier: 1.0.0-beta.23 + version: 1.0.0-beta.23 devDependencies: '@vitejs/react-common': specifier: workspace:* @@ -140,26 +140,26 @@ importers: version: 3.5.0(typescript@5.8.3) vite: specifier: catalog:rolldown-vite - version: rolldown-vite@6.3.21(@types/node@22.15.32)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1) + version: rolldown-vite@6.3.21(@types/node@22.16.0)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1) packages/plugin-react-swc: dependencies: '@rolldown/pluginutils': - specifier: 1.0.0-beta.19 - version: 1.0.0-beta.19 + specifier: 1.0.0-beta.23 + version: 1.0.0-beta.23 '@swc/core': specifier: ^1.12.9 version: 1.12.9 devDependencies: '@playwright/test': - specifier: ^1.53.1 - version: 1.53.1 + specifier: ^1.53.2 + version: 1.53.2 '@types/fs-extra': specifier: ^11.0.4 version: 11.0.4 '@types/node': - specifier: ^22.15.32 - version: 22.15.32 + specifier: ^22.16.0 + version: 22.16.0 '@vitejs/react-common': specifier: workspace:* version: link:../common @@ -180,7 +180,7 @@ importers: version: 5.8.3 vite: specifier: ^6.3.3 - version: 6.3.3(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + version: 6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) packages/plugin-react-swc/playground/base-path: dependencies: @@ -245,8 +245,8 @@ importers: specifier: ^11.14.0 version: 11.14.0(@types/react@19.1.8)(react@19.1.0) '@emotion/styled': - specifier: ^11.14.0 - version: 11.14.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) + specifier: ^11.14.1 + version: 11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) react: specifier: ^19.1.0 version: 19.1.0 @@ -270,8 +270,8 @@ importers: specifier: ^11.14.0 version: 11.14.0(@types/react@19.1.8)(react@19.1.0) '@emotion/styled': - specifier: ^11.14.0 - version: 11.14.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) + specifier: ^11.14.1 + version: 11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) react: specifier: ^19.1.0 version: 19.1.0 @@ -406,10 +406,10 @@ importers: dependencies: '@generouted/react-router': specifier: ^1.20.0 - version: 1.20.0(react-router-dom@7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-router@7.6.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.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 1.20.0(react-router-dom@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-router@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) generouted: specifier: 1.11.7 - version: 1.11.7(react-router-dom@7.6.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.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 1.11.7(react-router-dom@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) react: specifier: ^19.1.0 version: 19.1.0 @@ -417,8 +417,8 @@ importers: specifier: ^19.1.0 version: 19.1.0(react@19.1.0) react-router-dom: - specifier: ^7.6.2 - version: 7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^7.6.3 + version: 7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) devDependencies: '@types/react': specifier: ^19.1.8 @@ -488,7 +488,7 @@ importers: devDependencies: '@babel/plugin-transform-react-jsx-development': specifier: ^7.27.1 - version: 7.27.1(@babel/core@7.27.4) + version: 7.27.1(@babel/core@7.27.7) '@types/react': specifier: ^19.1.8 version: 19.1.8 @@ -519,7 +519,7 @@ importers: devDependencies: '@babel/plugin-transform-react-jsx-development': specifier: ^7.27.1 - version: 7.27.1(@babel/core@7.27.4) + version: 7.27.1(@babel/core@7.27.7) '@types/react': specifier: ^18.3.20 version: 18.3.20 @@ -631,8 +631,8 @@ importers: specifier: ^11.14.0 version: 11.14.0(@types/react@19.1.8)(react@19.1.0) '@emotion/styled': - specifier: ^11.14.0 - version: 11.14.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) + specifier: ^11.14.1 + version: 11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) react: specifier: ^19.1.0 version: 19.1.0 @@ -645,7 +645,7 @@ importers: devDependencies: '@babel/plugin-proposal-pipeline-operator': specifier: ^7.27.1 - version: 7.27.1(@babel/core@7.27.4) + version: 7.27.1(@babel/core@7.27.7) '@emotion/babel-plugin': specifier: ^11.13.5 version: 11.13.5 @@ -716,12 +716,8 @@ packages: resolution: {integrity: sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==} engines: {node: '>=6.9.0'} - '@babel/core@7.27.4': - resolution: {integrity: sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.27.0': - resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==} + '@babel/core@7.27.7': + resolution: {integrity: sha512-BU2f9tlKQ5CAthiMIgpzAh4eDTLWo1mqi9jqE2OxMG0E/OM199VJt2q8BztTxpnSW0i1ymdwLXRJnYzvDM5r2w==} engines: {node: '>=6.9.0'} '@babel/generator@7.27.5': @@ -793,6 +789,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.27.7': + resolution: {integrity: sha512-qnzXzDXdr/po3bOTbTIQZ7+TxNKxpkN5IifVLXS+r7qwynkZfPyjZfE7hCXbo7IoO9TNcSyibgONsf2HauUd3Q==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-proposal-pipeline-operator@7.27.1': resolution: {integrity: sha512-3q36hiN0qG4KI+rDVJW3HVIQWLnX09E+QkraVJYWG4QPqOgiZaeyIFOfTyzWE2ZDVo9ZO0LZeyvBM8T+nhPlZA==} engines: {node: '>=6.9.0'} @@ -839,22 +840,18 @@ packages: resolution: {integrity: sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w==} engines: {node: '>=6.9.0'} - '@babel/template@7.27.0': - resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==} - engines: {node: '>=6.9.0'} - '@babel/template@7.27.2': resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.27.0': - resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==} - engines: {node: '>=6.9.0'} - '@babel/traverse@7.27.4': resolution: {integrity: sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.27.7': + resolution: {integrity: sha512-X6ZlfR/O/s5EQ/SnUSLzr+6kGnkg8HXGMzpgsMsrJVcfDtH1vIp6ctCN4eZ1LS5c0+te5Cb6Y514fASjMRJ1nw==} + engines: {node: '>=6.9.0'} + '@babel/types@7.26.0': resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} engines: {node: '>=6.9.0'} @@ -867,6 +864,10 @@ packages: resolution: {integrity: sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==} engines: {node: '>=6.9.0'} + '@babel/types@7.27.7': + resolution: {integrity: sha512-8OLQgDScAOHXnAz2cV+RfzzNMipuLVBz2biuAJFMV9bfkNf393je3VM8CLkjQodW5+iWsSJdSgSWT6rsZoXHPw==} + engines: {node: '>=6.9.0'} + '@emnapi/core@1.4.3': resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==} @@ -912,8 +913,8 @@ packages: '@emotion/sheet@1.4.0': resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} - '@emotion/styled@11.14.0': - resolution: {integrity: sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==} + '@emotion/styled@11.14.1': + resolution: {integrity: sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==} peerDependencies: '@emotion/react': ^11.0.0-rc.0 '@types/react': '*' @@ -1549,12 +1550,12 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.20.1': - resolution: {integrity: sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==} + '@eslint/config-array@0.21.0': + resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.2.1': - resolution: {integrity: sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==} + '@eslint/config-helpers@0.3.0': + resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/core@0.14.0': @@ -1565,8 +1566,8 @@ packages: resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.29.0': - resolution: {integrity: sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==} + '@eslint/js@9.30.1': + resolution: {integrity: sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': @@ -1649,18 +1650,18 @@ packages: resolution: {integrity: sha512-YFvBzVQK/ix0RQxOI02ebCumehSHoiJgvb7nOU4o7xFoMnnujLdjmxnEBK/qiOQrEyXlY69gXGMEsKYVe+YZ3A==} engines: {node: '>=6.9.0'} - '@oxc-project/runtime@0.73.2': - resolution: {integrity: sha512-wbUN3K3zjMRHxAsNm1nKHebSnDY800b3LxQFTr9wSZpdQdhiQQAZpRIFsYjh0sAotoyqahN576sB1DmpPUhl5Q==} + '@oxc-project/runtime@0.75.0': + resolution: {integrity: sha512-gzRmVI/vorsPmbDXt7GD4Uh2lD3rCOku/1xWPB4Yx48k0EP4TZmzQudWapjN4+7Vv+rgXr0RqCHQadeaMvdBuw==} engines: {node: '>=6.9.0'} '@oxc-project/types@0.73.0': resolution: {integrity: sha512-ZQS7dpsga43R7bjqRKHRhOeNpuIBeLBnlS3M6H3IqWIWiapGOQIxp4lpETLBYupkSd4dh85ESFn6vAvtpPdGkA==} - '@oxc-project/types@0.73.2': - resolution: {integrity: sha512-kU2FjfCb9VTNg/KbOTKVi2sYrKTkNQYq1Fi1v1jCKjbUGA9wqkNDqijNBLeDwagFtDuK2EIWvTzNDYU4k/918g==} + '@oxc-project/types@0.75.0': + resolution: {integrity: sha512-QMW+06WOXs7+F301Y3X0VpmWhwuQVc/X/RP2zF9OIwvSMmsif3xURS2wxbakFIABYsytgBcHpUcFepVS0Qnd3A==} - '@playwright/test@1.53.1': - resolution: {integrity: sha512-Z4c23LHV0muZ8hfv4jw6HngPJkbbtZxTkxPNIg7cJcTc9C28N/p2q7g3JZS2SiKBBHJ3uM1dgDye66bB7LEk5w==} + '@playwright/test@1.53.2': + resolution: {integrity: sha512-tEB2U5z74ebBeyfGNZ3Jfg29AnW+5HlWhvHtb/Mqco9pFdZU1ZLNdVb2UtB5CvmiilNr2ZfVH/qMmAROG/XTzw==} engines: {node: '>=18'} hasBin: true @@ -1673,8 +1674,8 @@ packages: cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-arm64@1.0.0-beta.19': - resolution: {integrity: sha512-Lr2bcnzrqa5fb/tyaOJxbAe6r+Zf5mbCDYnRW8u4hv19b519C6d+8LHl879mBDVWAmRaPt1LPsiQUZJQnKb/jQ==} + '@rolldown/binding-darwin-arm64@1.0.0-beta.23': + resolution: {integrity: sha512-rppgXFU4+dNDPQvPsfovUuYfDgMoATDomKGjIRR5bIU98BYkQF1fm+87trApilfWSosLQP9JsXOoUJO/EMrspQ==} cpu: [arm64] os: [darwin] @@ -1683,8 +1684,8 @@ packages: cpu: [x64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-beta.19': - resolution: {integrity: sha512-EMzFFW+Wshv0d0FnunDOKl3QQK5KW69c9NOo7SL+fXmeDRrhhKnjoAggi6IX+Vq3gz0PqfqsbElT2uFS5g1dcg==} + '@rolldown/binding-darwin-x64@1.0.0-beta.23': + resolution: {integrity: sha512-aFo1v7GKysuwSAfsyNcBb9mj3M+wxMCu3N+DcTD5eAaz3mFex6l+2b/vLGaTWNrCMoWhRxV8rTaI1eFoMVdSuQ==} cpu: [x64] os: [darwin] @@ -1693,8 +1694,8 @@ packages: cpu: [x64] os: [freebsd] - '@rolldown/binding-freebsd-x64@1.0.0-beta.19': - resolution: {integrity: sha512-aoILM0xYehAQdpMrD1rDU14SLJ5j8TsIAB6Ywc6ba85CV2Ks/1EFVSKp9iNL9/V4wqQf4Gk/s3A1kgSzwmw0lg==} + '@rolldown/binding-freebsd-x64@1.0.0-beta.23': + resolution: {integrity: sha512-/NzbXIFIR5KR+fZ351K1qONekakXpiPhUX55ydP6ok8iKdG7bTbgs6dlMg7Ow0E2DKlQoTbZbPTUY3kTzmNrsQ==} cpu: [x64] os: [freebsd] @@ -1703,8 +1704,8 @@ packages: cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.19': - resolution: {integrity: sha512-p5PY3ezHgWN5DurWBMSxrZhnQcJTIuyl8d0aHrC53EXKMG8vMr80L7U545p0nqC14XtWjlMPFxumFxLD+zVL9g==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.23': + resolution: {integrity: sha512-vPnCHxjyR4ZVj9x6sLJMCAdBY99RPe6Mnwxb5BSaE6ccHzvy015xtsIEG7H9E9pVj3yfI/om77jrP+YA5IqL3w==} cpu: [arm] os: [linux] @@ -1713,8 +1714,8 @@ packages: cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.19': - resolution: {integrity: sha512-TNZ3jlApVMpix2h9BclYsurjBYCyiRsz4H7opQY3Tf67Yi1UBe69yNwXZ9l+5fnEGipYzwAUPpTYSw35wbU6bQ==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.23': + resolution: {integrity: sha512-PFBBnj9JqLOL8gjZtoVGfOXe0PSpnPUXE+JuMcWz568K/p4Zzk7lDDHl7guD95wVtV89TmfaRwK2PWd9vKxHtg==} cpu: [arm64] os: [linux] @@ -1723,8 +1724,8 @@ packages: cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.19': - resolution: {integrity: sha512-4FowIEu7YIBKLYMG0659V2kN/drV/ghljDl9k9DGmUL/Mko0tG2itRmgLeZyjrkbQNTkXUTI3/0fEbwAg8Jazg==} + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.23': + resolution: {integrity: sha512-KyQRLofVP78yUCXT90YmEzxK6I9VCBeOTSyOrs40Qx0Q0XwaGVwxo7sKj2SmnqxribdcouBA3CfNZC4ZNcyEnQ==} cpu: [arm64] os: [linux] @@ -1733,8 +1734,8 @@ packages: cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.19': - resolution: {integrity: sha512-7/P+dvNsReOZoUvr6p3EKqKHWT+dxjBC5nxelfNWqs32oyVKqv/MvPtayAUqNMv0F94fzQW/l4EOwzLfBHiIJA==} + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.23': + resolution: {integrity: sha512-EubfEsJyjQbKK9j3Ez1hhbIOsttABb07Z7PhMRcVYW0wrVr8SfKLew9pULIMfcSNnoz8QqzoI4lOSmezJ9bYWw==} cpu: [x64] os: [linux] @@ -1743,8 +1744,8 @@ packages: cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-musl@1.0.0-beta.19': - resolution: {integrity: sha512-TztajvVHulPEn1hKCTxmpkomIUvMaeQ9Vv5TEn3bHBp/3T8W7zOwju0ExXNiLtSoD8Nk85T8O1DBPwuo0h+Uig==} + '@rolldown/binding-linux-x64-musl@1.0.0-beta.23': + resolution: {integrity: sha512-MUAthvl3I/+hySltZuj5ClKiq8fAMqExeBnxadLFShwWCbdHKFd+aRjBxxzarPcnqbDlTaOCUaAaYmQTOTOHSg==} cpu: [x64] os: [linux] @@ -1753,8 +1754,8 @@ packages: engines: {node: '>=14.21.3'} cpu: [wasm32] - '@rolldown/binding-wasm32-wasi@1.0.0-beta.19': - resolution: {integrity: sha512-AqRQiUYEgxEkBPxkz8UvJcpFlknCRwxNDhcUj3ZRNsFWNqSeNFV7Nx41yxB7lpS7EHUNhUsEaydLBU3QeRiV5Q==} + '@rolldown/binding-wasm32-wasi@1.0.0-beta.23': + resolution: {integrity: sha512-YI7QMQU01QFVNTEaQt3ysrq+wGBwLdFVFEGO64CoZ3gTsr/HulU8gvgR+67coQOlQC9iO/Hm1bvkBtceLxKrnA==} engines: {node: '>=14.21.3'} cpu: [wasm32] @@ -1763,8 +1764,8 @@ packages: cpu: [arm64] os: [win32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.19': - resolution: {integrity: sha512-ak0Dv/IKcbVHr8JhP0rLUCgEQ++GsSQQ2O+VofTXmCeXhquOkVSxcicgDJ4yLgQDIM0DC2pFXWpAoHRGvkrEdQ==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.23': + resolution: {integrity: sha512-JdHx6Hli53etB/QsZL1tjpf4qa87kNcwPdx4iVicP/kL7po6k5bHoS5/l/nRRccwPh7BlPlB2uoEuTwJygJosQ==} cpu: [arm64] os: [win32] @@ -1773,8 +1774,8 @@ packages: cpu: [ia32] os: [win32] - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.19': - resolution: {integrity: sha512-N8FaTCEpobYggCVAQpYNvwIhlPUDZbxO9Hugk5eT7rFBS2iosjiOailJGa44ppWxa8Ap3sPYjr5z0v/M6gxjhg==} + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.23': + resolution: {integrity: sha512-rMZ0QBmcDND97+5unXxquKvSudV8tz6S7tBY3gOYlqMFEDIRX0BAgxaqQBQbq34ZxB9bXwGdjuau3LZHGreB6g==} cpu: [ia32] os: [win32] @@ -1783,16 +1784,16 @@ packages: cpu: [x64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.19': - resolution: {integrity: sha512-a+GPUvLUkG8Qh2XPn7JI9Ui8wz9HhbrB5iJPMWh7VSv/4uLJZYZqxkL1kC+K/dUjE0CSun/4zds+C0SW83S69A==} + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.23': + resolution: {integrity: sha512-0PqE7vGIpA+XT+qxAYJQKTrB5zz8vJiuCOInfY/ks/QOs6ZZ9Os8bdNkcpCy4rYo+GMZn0Q8CwyPu4uexWB1aA==} cpu: [x64] os: [win32] '@rolldown/pluginutils@1.0.0-beta.16': resolution: {integrity: sha512-w3f87JpF7lgIlK03I0R3XidspFgB4MsixE5o/VjBMJI+Ki4XW/Ffrykmj2AUCbVxhRD7Pi9W0Qu2XapJhB2mSA==} - '@rolldown/pluginutils@1.0.0-beta.19': - resolution: {integrity: sha512-3FL3mnMbPu0muGOCaKAhhFEYmqv9eTfPSJRJmANrCwtgK8VuxpsZDGK+m0LYAGoyO8+0j5uRe4PeyPDK1yA/hA==} + '@rolldown/pluginutils@1.0.0-beta.23': + resolution: {integrity: sha512-lLCP4LUecUGBLq8EfkbY2esGYyvZj5ee+WZG12+mVnQH48b46SVbwp+0vJkD+6Pnsc+u9SWarBV9sQ5mVwmb5g==} '@rollup/plugin-alias@5.1.1': resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} @@ -2102,8 +2103,8 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node@22.15.32': - resolution: {integrity: sha512-3jigKqgSjsH6gYZv2nEsqdXfZqIFGAV36XYYjf9KGZ3PSG+IhLecqPnI310RvjutyMwifE2hhhNEklOUrvx/wA==} + '@types/node@22.16.0': + resolution: {integrity: sha512-B2egV9wALML1JCpv3VQoQ+yesQKAmNMBIAY7OteVrikcOcAkWm+dGL6qpeCktPjAv6N1JLnhbNiqS35UpFyBsQ==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -2142,16 +2143,16 @@ packages: '@types/unist@3.0.2': resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} - '@typescript-eslint/eslint-plugin@8.34.1': - resolution: {integrity: sha512-STXcN6ebF6li4PxwNeFnqF8/2BNDvBupf2OPx2yWNzr6mKNGF7q49VM00Pz5FaomJyqvbXpY6PhO+T9w139YEQ==} + '@typescript-eslint/eslint-plugin@8.35.1': + resolution: {integrity: sha512-9XNTlo7P7RJxbVeICaIIIEipqxLKguyh+3UbXuT2XQuFp6d8VOeDEGuz5IiX0dgZo8CiI6aOFLg4e8cF71SFVg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.34.1 + '@typescript-eslint/parser': ^8.35.1 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/parser@8.34.1': - resolution: {integrity: sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA==} + '@typescript-eslint/parser@8.35.1': + resolution: {integrity: sha512-3MyiDfrfLeK06bi/g9DqJxP5pV74LNv4rFTyvGDmT3x2p1yp1lOd+qYZfiRPIOf/oON+WRZR5wxxuF85qOar+w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2163,8 +2164,8 @@ packages: peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/project-service@8.34.1': - resolution: {integrity: sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA==} + '@typescript-eslint/project-service@8.35.1': + resolution: {integrity: sha512-VYxn/5LOpVxADAuP3NrnxxHYfzVtQzLKeldIhDhzC8UHaiQvYlXvKuVho1qLduFbJjjy5U5bkGwa3rUGUb1Q6Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' @@ -2173,8 +2174,8 @@ packages: resolution: {integrity: sha512-dM4UBtgmzHR9bS0Rv09JST0RcHYearoEoo3pG5B6GoTR9XcyeqX87FEhPo+5kTvVfKCvfHaHrcgeJQc6mrDKrA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.34.1': - resolution: {integrity: sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==} + '@typescript-eslint/scope-manager@8.35.1': + resolution: {integrity: sha512-s/Bpd4i7ht2934nG+UoSPlYXd08KYz3bmjLEb7Ye1UVob0d1ENiT3lY8bsCmik4RqfSbPw9xJJHbugpPpP5JUg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/tsconfig-utils@8.33.1': @@ -2183,14 +2184,14 @@ packages: peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/tsconfig-utils@8.34.1': - resolution: {integrity: sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg==} + '@typescript-eslint/tsconfig-utils@8.35.1': + resolution: {integrity: sha512-K5/U9VmT9dTHoNowWZpz+/TObS3xqC5h0xAIjXPw+MNcKV9qg6eSatEnmeAwkjHijhACH0/N7bkhKvbt1+DXWQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/type-utils@8.34.1': - resolution: {integrity: sha512-Tv7tCCr6e5m8hP4+xFugcrwTOucB8lshffJ6zf1mF1TbU67R+ntCc6DzLNKM+s/uzDyv8gLq7tufaAhIBYeV8g==} + '@typescript-eslint/type-utils@8.35.1': + resolution: {integrity: sha512-HOrUBlfVRz5W2LIKpXzZoy6VTZzMu2n8q9C2V/cFngIC5U1nStJgv0tMV4sZPzdf4wQm9/ToWUFPMN9Vq9VJQQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2200,22 +2201,22 @@ packages: resolution: {integrity: sha512-xid1WfizGhy/TKMTwhtVOgalHwPtV8T32MS9MaH50Cwvz6x6YqRIPdD2WvW0XaqOzTV9p5xdLY0h/ZusU5Lokg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.34.0': - resolution: {integrity: sha512-9V24k/paICYPniajHfJ4cuAWETnt7Ssy+R0Rbcqo5sSFr3QEZ/8TSoUi9XeXVBGXCaLtwTOKSLGcInCAvyZeMA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.34.1': resolution: {integrity: sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.35.1': + resolution: {integrity: sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.33.1': resolution: {integrity: sha512-+s9LYcT8LWjdYWu7IWs7FvUxpQ/DGkdjZeE/GGulHvv8rvYwQvVaUZ6DE+j5x/prADUgSbbCWZ2nPI3usuVeOA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/typescript-estree@8.34.1': - resolution: {integrity: sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==} + '@typescript-eslint/typescript-estree@8.35.1': + resolution: {integrity: sha512-Vvpuvj4tBxIka7cPs6Y1uvM7gJgdF5Uu9F+mBJBPY4MhvjrjWGK4H0lVgLJd/8PWZ23FTqsaJaLEkBCFUk8Y9g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' @@ -2227,8 +2228,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.34.1': - resolution: {integrity: sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ==} + '@typescript-eslint/utils@8.35.1': + resolution: {integrity: sha512-lhnwatFmOFcazAsUm3ZnZFpXSxiwoa1Lj50HphnDe1Et01NF4+hrdXONSUHIcbVu2eFb1bAf+5yjXkGVkXBKAQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2238,105 +2239,105 @@ packages: resolution: {integrity: sha512-3i8NrFcZeeDHJ+7ZUuDkGT+UHq+XoFGsymNK2jZCOHcfEzRQ0BdpRtdpSx/Iyf3MHLWIcLS0COuOPibKQboIiQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.34.1': - resolution: {integrity: sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==} + '@typescript-eslint/visitor-keys@8.35.1': + resolution: {integrity: sha512-VRwixir4zBWCSTP/ljEo091lbpypz57PoeAQ9imjG+vbeof9LplljsL1mos4ccG6H9IjfrVGM359RozUnuFhpw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - '@unrs/resolver-binding-android-arm-eabi@1.9.0': - resolution: {integrity: sha512-h1T2c2Di49ekF2TE8ZCoJkb+jwETKUIPDJ/nO3tJBKlLFPu+fyd93f0rGP/BvArKx2k2HlRM4kqkNarj3dvZlg==} + '@unrs/resolver-binding-android-arm-eabi@1.9.2': + resolution: {integrity: sha512-tS+lqTU3N0kkthU+rYp0spAYq15DU8ld9kXkaKg9sbQqJNF+WPMuNHZQGCgdxrUOEO0j22RKMwRVhF1HTl+X8A==} cpu: [arm] os: [android] - '@unrs/resolver-binding-android-arm64@1.9.0': - resolution: {integrity: sha512-sG1NHtgXtX8owEkJ11yn34vt0Xqzi3k9TJ8zppDmyG8GZV4kVWw44FHwKwHeEFl07uKPeC4ZoyuQaGh5ruJYPA==} + '@unrs/resolver-binding-android-arm64@1.9.2': + resolution: {integrity: sha512-MffGiZULa/KmkNjHeuuflLVqfhqLv1vZLm8lWIyeADvlElJ/GLSOkoUX+5jf4/EGtfwrNFcEaB8BRas03KT0/Q==} cpu: [arm64] os: [android] - '@unrs/resolver-binding-darwin-arm64@1.9.0': - resolution: {integrity: sha512-nJ9z47kfFnCxN1z/oYZS7HSNsFh43y2asePzTEZpEvK7kGyuShSl3RRXnm/1QaqFL+iP+BjMwuB+DYUymOkA5A==} + '@unrs/resolver-binding-darwin-arm64@1.9.2': + resolution: {integrity: sha512-dzJYK5rohS1sYl1DHdJ3mwfwClJj5BClQnQSyAgEfggbUwA9RlROQSSbKBLqrGfsiC/VyrDPtbO8hh56fnkbsQ==} cpu: [arm64] os: [darwin] - '@unrs/resolver-binding-darwin-x64@1.9.0': - resolution: {integrity: sha512-TK+UA1TTa0qS53rjWn7cVlEKVGz2B6JYe0C++TdQjvWYIyx83ruwh0wd4LRxYBM5HeuAzXcylA9BH2trARXJTw==} + '@unrs/resolver-binding-darwin-x64@1.9.2': + resolution: {integrity: sha512-gaIMWK+CWtXcg9gUyznkdV54LzQ90S3X3dn8zlh+QR5Xy7Y+Efqw4Rs4im61K1juy4YNb67vmJsCDAGOnIeffQ==} cpu: [x64] os: [darwin] - '@unrs/resolver-binding-freebsd-x64@1.9.0': - resolution: {integrity: sha512-6uZwzMRFcD7CcCd0vz3Hp+9qIL2jseE/bx3ZjaLwn8t714nYGwiE84WpaMCYjU+IQET8Vu/+BNAGtYD7BG/0yA==} + '@unrs/resolver-binding-freebsd-x64@1.9.2': + resolution: {integrity: sha512-S7QpkMbVoVJb0xwHFwujnwCAEDe/596xqY603rpi/ioTn9VDgBHnCCxh+UFrr5yxuMH+dliHfjwCZJXOPJGPnw==} cpu: [x64] os: [freebsd] - '@unrs/resolver-binding-linux-arm-gnueabihf@1.9.0': - resolution: {integrity: sha512-bPUBksQfrgcfv2+mm+AZinaKq8LCFvt5PThYqRotqSuuZK1TVKkhbVMS/jvSRfYl7jr3AoZLYbDkItxgqMKRkg==} + '@unrs/resolver-binding-linux-arm-gnueabihf@1.9.2': + resolution: {integrity: sha512-+XPUMCuCCI80I46nCDFbGum0ZODP5NWGiwS3Pj8fOgsG5/ctz+/zzuBlq/WmGa+EjWZdue6CF0aWWNv84sE1uw==} cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm-musleabihf@1.9.0': - resolution: {integrity: sha512-uT6E7UBIrTdCsFQ+y0tQd3g5oudmrS/hds5pbU3h4s2t/1vsGWbbSKhBSCD9mcqaqkBwoqlECpUrRJCmldl8PA==} + '@unrs/resolver-binding-linux-arm-musleabihf@1.9.2': + resolution: {integrity: sha512-sqvUyAd1JUpwbz33Ce2tuTLJKM+ucSsYpPGl2vuFwZnEIg0CmdxiZ01MHQ3j6ExuRqEDUCy8yvkDKvjYFPb8Zg==} cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm64-gnu@1.9.0': - resolution: {integrity: sha512-vdqBh911wc5awE2bX2zx3eflbyv8U9xbE/jVKAm425eRoOVv/VseGZsqi3A3SykckSpF4wSROkbQPvbQFn8EsA==} + '@unrs/resolver-binding-linux-arm64-gnu@1.9.2': + resolution: {integrity: sha512-UYA0MA8ajkEDCFRQdng/FVx3F6szBvk3EPnkTTQuuO9lV1kPGuTB+V9TmbDxy5ikaEgyWKxa4CI3ySjklZ9lFA==} cpu: [arm64] os: [linux] - '@unrs/resolver-binding-linux-arm64-musl@1.9.0': - resolution: {integrity: sha512-/8JFZ/SnuDr1lLEVsxsuVwrsGquTvT51RZGvyDB/dOK3oYK2UqeXzgeyq6Otp8FZXQcEYqJwxb9v+gtdXn03eQ==} + '@unrs/resolver-binding-linux-arm64-musl@1.9.2': + resolution: {integrity: sha512-P/CO3ODU9YJIHFqAkHbquKtFst0COxdphc8TKGL5yCX75GOiVpGqd1d15ahpqu8xXVsqP4MGFP2C3LRZnnL5MA==} cpu: [arm64] os: [linux] - '@unrs/resolver-binding-linux-ppc64-gnu@1.9.0': - resolution: {integrity: sha512-FkJjybtrl+rajTw4loI3L6YqSOpeZfDls4SstL/5lsP2bka9TiHUjgMBjygeZEis1oC8LfJTS8FSgpKPaQx2tQ==} + '@unrs/resolver-binding-linux-ppc64-gnu@1.9.2': + resolution: {integrity: sha512-uKStFlOELBxBum2s1hODPtgJhY4NxYJE9pAeyBgNEzHgTqTiVBPjfTlPFJkfxyTjQEuxZbbJlJnMCrRgD7ubzw==} cpu: [ppc64] os: [linux] - '@unrs/resolver-binding-linux-riscv64-gnu@1.9.0': - resolution: {integrity: sha512-w/NZfHNeDusbqSZ8r/hp8iL4S39h4+vQMc9/vvzuIKMWKppyUGKm3IST0Qv0aOZ1rzIbl9SrDeIqK86ZpUK37w==} + '@unrs/resolver-binding-linux-riscv64-gnu@1.9.2': + resolution: {integrity: sha512-LkbNnZlhINfY9gK30AHs26IIVEZ9PEl9qOScYdmY2o81imJYI4IMnJiW0vJVtXaDHvBvxeAgEy5CflwJFIl3tQ==} cpu: [riscv64] os: [linux] - '@unrs/resolver-binding-linux-riscv64-musl@1.9.0': - resolution: {integrity: sha512-bEPBosut8/8KQbUixPry8zg/fOzVOWyvwzOfz0C0Rw6dp+wIBseyiHKjkcSyZKv/98edrbMknBaMNJfA/UEdqw==} + '@unrs/resolver-binding-linux-riscv64-musl@1.9.2': + resolution: {integrity: sha512-vI+e6FzLyZHSLFNomPi+nT+qUWN4YSj8pFtQZSFTtmgFoxqB6NyjxSjAxEC1m93qn6hUXhIsh8WMp+fGgxCoRg==} cpu: [riscv64] os: [linux] - '@unrs/resolver-binding-linux-s390x-gnu@1.9.0': - resolution: {integrity: sha512-LDtMT7moE3gK753gG4pc31AAqGUC86j3AplaFusc717EUGF9ZFJ356sdQzzZzkBk1XzMdxFyZ4f/i35NKM/lFA==} + '@unrs/resolver-binding-linux-s390x-gnu@1.9.2': + resolution: {integrity: sha512-sSO4AlAYhSM2RAzBsRpahcJB1msc6uYLAtP6pesPbZtptF8OU/CbCPhSRW6cnYOGuVmEmWVW5xVboAqCnWTeHQ==} cpu: [s390x] os: [linux] - '@unrs/resolver-binding-linux-x64-gnu@1.9.0': - resolution: {integrity: sha512-WmFd5KINHIXj8o1mPaT8QRjA9HgSXhN1gl9Da4IZihARihEnOylu4co7i/yeaIpcfsI6sYs33cNZKyHYDh0lrA==} + '@unrs/resolver-binding-linux-x64-gnu@1.9.2': + resolution: {integrity: sha512-jkSkwch0uPFva20Mdu8orbQjv2A3G88NExTN2oPTI1AJ+7mZfYW3cDCTyoH6OnctBKbBVeJCEqh0U02lTkqD5w==} cpu: [x64] os: [linux] - '@unrs/resolver-binding-linux-x64-musl@1.9.0': - resolution: {integrity: sha512-CYuXbANW+WgzVRIl8/QvZmDaZxrqvOldOwlbUjIM4pQ46FJ0W5cinJ/Ghwa/Ng1ZPMJMk1VFdsD/XwmCGIXBWg==} + '@unrs/resolver-binding-linux-x64-musl@1.9.2': + resolution: {integrity: sha512-Uk64NoiTpQbkpl+bXsbeyOPRpUoMdcUqa+hDC1KhMW7aN1lfW8PBlBH4mJ3n3Y47dYE8qi0XTxy1mBACruYBaw==} cpu: [x64] os: [linux] - '@unrs/resolver-binding-wasm32-wasi@1.9.0': - resolution: {integrity: sha512-6Rp2WH0OoitMYR57Z6VE8Y6corX8C6QEMWLgOV6qXiJIeZ1F9WGXY/yQ8yDC4iTraotyLOeJ2Asea0urWj2fKQ==} + '@unrs/resolver-binding-wasm32-wasi@1.9.2': + resolution: {integrity: sha512-EpBGwkcjDicjR/ybC0g8wO5adPNdVuMrNalVgYcWi+gYtC1XYNuxe3rufcO7dA76OHGeVabcO6cSkPJKVcbCXQ==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@unrs/resolver-binding-win32-arm64-msvc@1.9.0': - resolution: {integrity: sha512-rknkrTRuvujprrbPmGeHi8wYWxmNVlBoNW8+4XF2hXUnASOjmuC9FNF1tGbDiRQWn264q9U/oGtixyO3BT8adQ==} + '@unrs/resolver-binding-win32-arm64-msvc@1.9.2': + resolution: {integrity: sha512-EdFbGn7o1SxGmN6aZw9wAkehZJetFPao0VGZ9OMBwKx6TkvDuj6cNeLimF/Psi6ts9lMOe+Dt6z19fZQ9Ye2fw==} cpu: [arm64] os: [win32] - '@unrs/resolver-binding-win32-ia32-msvc@1.9.0': - resolution: {integrity: sha512-Ceymm+iBl+bgAICtgiHyMLz6hjxmLJKqBim8tDzpX61wpZOx2bPK6Gjuor7I2RiUynVjvvkoRIkrPyMwzBzF3A==} + '@unrs/resolver-binding-win32-ia32-msvc@1.9.2': + resolution: {integrity: sha512-JY9hi1p7AG+5c/dMU8o2kWemM8I6VZxfGwn1GCtf3c5i+IKcMo2NQ8OjZ4Z3/itvY/Si3K10jOBQn7qsD/whUA==} cpu: [ia32] os: [win32] - '@unrs/resolver-binding-win32-x64-msvc@1.9.0': - resolution: {integrity: sha512-k59o9ZyeyS0hAlcaKFezYSH2agQeRFEB7KoQLXl3Nb3rgkqT1NY9Vwy+SqODiLmYnEjxWJVRE/yq2jFVqdIxZw==} + '@unrs/resolver-binding-win32-x64-msvc@1.9.2': + resolution: {integrity: sha512-ryoo+EB19lMxAd80ln9BVf8pdOAxLb97amrQ3SFN9OCRn/5M5wvwDgAe4i8ZjhpbiHoDeP8yavcTEnpKBo7lZg==} cpu: [x64] os: [win32] @@ -2762,8 +2763,8 @@ packages: peerDependencies: eslint: '>=6.0.0' - eslint-import-context@0.1.8: - resolution: {integrity: sha512-bq+F7nyc65sKpZGT09dY0S0QrOnQtuDVIfyTGQ8uuvtMIF7oHp6CEP3mouN0rrnYF3Jqo6Ke0BfU/5wASZue1w==} + eslint-import-context@0.1.9: + resolution: {integrity: sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} peerDependencies: unrs-resolver: ^1.0.0 @@ -2777,8 +2778,8 @@ packages: peerDependencies: eslint: '>=8' - eslint-plugin-import-x@4.15.2: - resolution: {integrity: sha512-J5gx7sN6DTm0LRT//eP3rVVQ2Yi4hrX0B+DbWxa5er8PZ6JjLo9GUBwogIFvEDdwJaSqZplpQT+haK/cXhb7VQ==} + eslint-plugin-import-x@4.16.1: + resolution: {integrity: sha512-vPZZsiOKaBAIATpFE2uMI4w5IRwdv/FpQ+qZZMR4E+PeOcM4OeoEbqxRMnywdxP19TyB/3h6QBB0EWon7letSQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/utils': ^8.0.0 @@ -2810,16 +2811,12 @@ packages: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-visitor-keys@4.2.0: - resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint-visitor-keys@4.2.1: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.29.0: - resolution: {integrity: sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==} + eslint@9.30.1: + resolution: {integrity: sha512-zmxXPNMOXmwm9E0yQLi5uqXHs7uq2UIiqEKo3Gq+3fwo1XrJ+hijAZImyF7hclW3E6oHz43Yk3RP8at6OTKflQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -3023,8 +3020,8 @@ packages: resolution: {integrity: sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==} engines: {node: '>=18'} - globals@16.2.0: - resolution: {integrity: sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==} + globals@16.3.0: + resolution: {integrity: sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==} engines: {node: '>=18'} graceful-fs@4.2.11: @@ -3629,18 +3626,18 @@ packages: pkg-types@2.1.0: resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==} - playwright-chromium@1.53.1: - resolution: {integrity: sha512-V+S/r4UkmVoF+ARC4YDnJF6fIsdIGMgyJ6daBdrODryU5qqWrM1M+5PP/jRX6u1yfwPfSNRwlYsat49duKsyMQ==} + playwright-chromium@1.53.2: + resolution: {integrity: sha512-srR0AVmLltaDH6bkEdPlHrqOwtqHI7XkQNm1m20RZNYBIo3L83uv2ENX2SZyYNKtTcT6R//F5moFS7D5UoMINw==} engines: {node: '>=18'} hasBin: true - playwright-core@1.53.1: - resolution: {integrity: sha512-Z46Oq7tLAyT0lGoFx4DOuB1IA9D1TPj0QkYxpPVUnGDqHHvDpCftu1J2hM2PiWsNMoZh8+LQaarAWcDfPBc6zg==} + playwright-core@1.53.2: + resolution: {integrity: sha512-ox/OytMy+2w1jcYEYlOo1Hhp8hZkLCximMTUTMBXjGUA1KoFfiSZ+DU+3a739jsPY0yoKH2TFy9S2fsJas8yAw==} engines: {node: '>=18'} hasBin: true - playwright@1.53.1: - resolution: {integrity: sha512-LJ13YLr/ocweuwxyGf1XNFWIU4M2zUSo149Qbp+A4cpwDjsxRPj7k6H25LBrEHiEwxvRbD8HdwvQmRMSvquhYw==} + playwright@1.53.2: + resolution: {integrity: sha512-6K/qQxVFuVQhRQhFsVZ9fGeatxirtrpPgxzBYWyZLEXJzqYwuL4fuNmfOfD5et1tJE4GScKyPNeLhZeRwuTU3A==} engines: {node: '>=18'} hasBin: true @@ -3894,15 +3891,15 @@ packages: resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} engines: {node: '>=0.10.0'} - react-router-dom@7.6.2: - resolution: {integrity: sha512-Q8zb6VlTbdYKK5JJBLQEN06oTUa/RAbG/oQS1auK1I0TbJOXktqm+QENEVJU6QvWynlXPRBXI3fiOQcSEA78rA==} + react-router-dom@7.6.3: + resolution: {integrity: sha512-DiWJm9qdUAmiJrVWaeJdu4TKu13+iB/8IEi0EW/XgaHCjW/vWGrwzup0GVvaMteuZjKnh5bEvJP/K0MDnzawHw==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' react-dom: '>=18' - react-router@7.6.2: - resolution: {integrity: sha512-U7Nv3y+bMimgWjhlT5CRdzHPu2/KVmqPwKUCChW8en5P3znxUqwlYFlbmyj8Rgp1SF6zs5X4+77kBVknkg6a0w==} + react-router@7.6.3: + resolution: {integrity: sha512-zf45LZp5skDC6I3jDLXQUu0u26jtuP4lEGbc7BbdyxenBN1vJSTA18czM2D+h5qyMBuMrD+9uB+mU37HIoKGRA==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' @@ -4011,8 +4008,8 @@ packages: resolution: {integrity: sha512-ruNh01VbnTJsW0kgYywrQ80FUY0yJvXqavPVljGg0dRiwggYB7yXlypw1ptkFiomkEOnOGiwncjiviUakgPHxg==} hasBin: true - rolldown@1.0.0-beta.19: - resolution: {integrity: sha512-rEBMUCfaK4LOf2rynaqcgKDGqwZ6GdWFdbgjfBOBvsY3Mr3AL0G6AKx516vDhOj1UVkAnxixfqDrXkZkH27n3w==} + rolldown@1.0.0-beta.23: + resolution: {integrity: sha512-+/TR2YSZxLTtDAfG9LHlYqsHO6jtvr9qxaRD77E+PCAQi5X47bJkgiZsjDmE1jGR19NfYegWToOvSe6E+8NfwA==} hasBin: true rollup-plugin-dts@6.2.1: @@ -4115,8 +4112,8 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - stable-hash-x@0.1.1: - resolution: {integrity: sha512-l0x1D6vhnsNUGPFVDx45eif0y6eedVC8nm5uACTrVFJFtl2mLRW17aWtVyxFCpn5t94VUPkjU8vSLwIuwwqtJQ==} + stable-hash-x@0.2.0: + resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==} engines: {node: '>=12.0.0'} stackback@0.0.2: @@ -4259,8 +4256,8 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - typescript-eslint@8.34.1: - resolution: {integrity: sha512-XjS+b6Vg9oT1BaIUfkW3M3LvqZE++rbzAMEHuccCfO/YkP43ha6w3jTEMilQxMF92nVOYCcdjv1ZUhAa1D/0ow==} + typescript-eslint@8.35.1: + resolution: {integrity: sha512-xslJjFzhOmHYQzSB/QTeASAHbjmxOGEP6Coh93TXmUBFQoJ1VU35UHIDmG06Jd6taf3wqqC1ntBnCMeymy5Ovw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -4314,8 +4311,8 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - unrs-resolver@1.9.0: - resolution: {integrity: sha512-wqaRu4UnzBD2ABTC1kLfBjAqIDZ5YUTr/MLGa7By47JV1bJDSW7jq/ZSLigB7enLe7ubNaJhtnBXgrc/50cEhg==} + unrs-resolver@1.9.2: + resolution: {integrity: sha512-VUyWiTNQD7itdiMuJy+EuLEErLj3uwX/EpHQF8EOf33Dq3Ju6VW1GXm+swk6+1h7a49uv9fKZ+dft9jU7esdLA==} untyped@2.0.0: resolution: {integrity: sha512-nwNCjxJTjNuLCgFr42fEak5OcLuB3ecca+9ksPFNvtfYSLpjf+iJqSIaSnIile6ZPbKYxI5k2AfXqeopGudK/g==} @@ -4463,6 +4460,7 @@ snapshots: '@babel/helper-validator-identifier': 7.25.9 js-tokens: 4.0.0 picocolors: 1.1.1 + optional: true '@babel/code-frame@7.27.1': dependencies: @@ -4472,38 +4470,30 @@ snapshots: '@babel/compat-data@7.27.5': {} - '@babel/core@7.27.4': + '@babel/core@7.27.7': dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.27.1 '@babel/generator': 7.27.5 '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4) + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.7) '@babel/helpers': 7.27.6 - '@babel/parser': 7.27.5 + '@babel/parser': 7.27.7 '@babel/template': 7.27.2 - '@babel/traverse': 7.27.4 - '@babel/types': 7.27.6 + '@babel/traverse': 7.27.7 + '@babel/types': 7.27.7 convert-source-map: 2.0.0 - debug: 4.4.0 + debug: 4.4.1 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/generator@7.27.0': - dependencies: - '@babel/parser': 7.27.0 - '@babel/types': 7.27.6 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 3.0.2 - '@babel/generator@7.27.5': dependencies: - '@babel/parser': 7.27.5 - '@babel/types': 7.27.6 + '@babel/parser': 7.27.7 + '@babel/types': 7.27.7 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.0.2 @@ -4522,24 +4512,24 @@ snapshots: '@babel/helper-module-imports@7.25.9': dependencies: - '@babel/traverse': 7.27.0 + '@babel/traverse': 7.27.4 '@babel/types': 7.27.6 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.27.1': dependencies: - '@babel/traverse': 7.27.4 - '@babel/types': 7.27.6 + '@babel/traverse': 7.27.7 + '@babel/types': 7.27.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.27.3(@babel/core@7.27.4)': + '@babel/helper-module-transforms@7.27.3(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.27.7 '@babel/helper-module-imports': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.27.7 transitivePeerDependencies: - supports-color @@ -4558,7 +4548,7 @@ snapshots: '@babel/helpers@7.27.6': dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.27.6 + '@babel/types': 7.27.7 '@babel/parser@7.26.2': dependencies: @@ -4572,46 +4562,50 @@ snapshots: dependencies: '@babel/types': 7.27.6 - '@babel/plugin-proposal-pipeline-operator@7.27.1(@babel/core@7.27.4)': + '@babel/parser@7.27.7': + dependencies: + '@babel/types': 7.27.7 + + '@babel/plugin-proposal-pipeline-operator@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.27.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-pipeline-operator': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-syntax-pipeline-operator': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.27.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-pipeline-operator@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-syntax-pipeline-operator@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.27.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.27.4 - '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.27.4) + '@babel/core': 7.27.7 + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.27.7) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.27.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.27.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.27.7 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.7) '@babel/types': 7.27.6 transitivePeerDependencies: - supports-color @@ -4620,38 +4614,32 @@ snapshots: dependencies: regenerator-runtime: 0.14.0 - '@babel/template@7.27.0': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/parser': 7.27.0 - '@babel/types': 7.27.6 - '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.27.5 - '@babel/types': 7.27.6 + '@babel/parser': 7.27.7 + '@babel/types': 7.27.7 - '@babel/traverse@7.27.0': + '@babel/traverse@7.27.4': dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.27.0 - '@babel/parser': 7.27.0 - '@babel/template': 7.27.0 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.27.5 + '@babel/parser': 7.27.5 + '@babel/template': 7.27.2 '@babel/types': 7.27.6 debug: 4.4.1 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/traverse@7.27.4': + '@babel/traverse@7.27.7': dependencies: '@babel/code-frame': 7.27.1 '@babel/generator': 7.27.5 - '@babel/parser': 7.27.5 + '@babel/parser': 7.27.7 '@babel/template': 7.27.2 - '@babel/types': 7.27.6 - debug: 4.4.0 + '@babel/types': 7.27.7 + debug: 4.4.1 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -4671,6 +4659,11 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 + '@babel/types@7.27.7': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@emnapi/core@1.4.3': dependencies: '@emnapi/wasi-threads': 1.0.2 @@ -4751,7 +4744,7 @@ snapshots: '@emotion/sheet@1.4.0': {} - '@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0)': + '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0)': dependencies: '@babel/runtime': 7.23.5 '@emotion/babel-plugin': 11.13.5 @@ -5078,14 +5071,14 @@ snapshots: '@esbuild/win32-x64@0.25.5': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@9.29.0(jiti@2.4.2))': + '@eslint-community/eslint-utils@4.7.0(eslint@9.30.1(jiti@2.4.2))': dependencies: - eslint: 9.29.0(jiti@2.4.2) + eslint: 9.30.1(jiti@2.4.2) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/config-array@0.20.1': + '@eslint/config-array@0.21.0': dependencies: '@eslint/object-schema': 2.1.6 debug: 4.4.1 @@ -5093,7 +5086,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.2.1': {} + '@eslint/config-helpers@0.3.0': {} '@eslint/core@0.14.0': dependencies: @@ -5113,7 +5106,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.29.0': {} + '@eslint/js@9.30.1': {} '@eslint/object-schema@2.1.6': {} @@ -5122,13 +5115,13 @@ snapshots: '@eslint/core': 0.14.0 levn: 0.4.1 - '@generouted/react-router@1.20.0(react-router-dom@7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-router@7.6.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.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': + '@generouted/react-router@1.20.0(react-router-dom@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-router@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': dependencies: fast-glob: 3.3.3 - generouted: 1.20.0(react-router-dom@7.6.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.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + generouted: 1.20.0(react-router-dom@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) react: 19.1.0 - react-router: 7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 6.3.3(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + react-router: 7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + vite: 6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) transitivePeerDependencies: - react-router-dom @@ -5221,64 +5214,64 @@ snapshots: '@oxc-project/runtime@0.73.0': {} - '@oxc-project/runtime@0.73.2': {} + '@oxc-project/runtime@0.75.0': {} '@oxc-project/types@0.73.0': {} - '@oxc-project/types@0.73.2': {} + '@oxc-project/types@0.75.0': {} - '@playwright/test@1.53.1': + '@playwright/test@1.53.2': dependencies: - playwright: 1.53.1 + playwright: 1.53.2 '@publint/pack@0.1.2': {} '@rolldown/binding-darwin-arm64@1.0.0-beta.16': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-beta.19': + '@rolldown/binding-darwin-arm64@1.0.0-beta.23': optional: true '@rolldown/binding-darwin-x64@1.0.0-beta.16': optional: true - '@rolldown/binding-darwin-x64@1.0.0-beta.19': + '@rolldown/binding-darwin-x64@1.0.0-beta.23': optional: true '@rolldown/binding-freebsd-x64@1.0.0-beta.16': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-beta.19': + '@rolldown/binding-freebsd-x64@1.0.0-beta.23': optional: true '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.16': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.19': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.23': optional: true '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.16': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.19': + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.23': optional: true '@rolldown/binding-linux-arm64-musl@1.0.0-beta.16': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.19': + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.23': optional: true '@rolldown/binding-linux-x64-gnu@1.0.0-beta.16': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.19': + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.23': optional: true '@rolldown/binding-linux-x64-musl@1.0.0-beta.16': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-beta.19': + '@rolldown/binding-linux-x64-musl@1.0.0-beta.23': optional: true '@rolldown/binding-wasm32-wasi@1.0.0-beta.16': @@ -5286,7 +5279,7 @@ snapshots: '@napi-rs/wasm-runtime': 0.2.11 optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-beta.19': + '@rolldown/binding-wasm32-wasi@1.0.0-beta.23': dependencies: '@napi-rs/wasm-runtime': 0.2.11 optional: true @@ -5294,24 +5287,24 @@ snapshots: '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.16': optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.19': + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.23': optional: true '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.16': optional: true - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.19': + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.23': optional: true '@rolldown/binding-win32-x64-msvc@1.0.0-beta.16': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.19': + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.23': optional: true '@rolldown/pluginutils@1.0.0-beta.16': {} - '@rolldown/pluginutils@1.0.0-beta.19': {} + '@rolldown/pluginutils@1.0.0-beta.23': {} '@rollup/plugin-alias@5.1.1(rollup@4.37.0)': optionalDependencies: @@ -5541,7 +5534,7 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 22.15.32 + '@types/node': 22.16.0 '@types/hast@3.0.3': dependencies: @@ -5556,7 +5549,7 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 22.15.32 + '@types/node': 22.16.0 '@types/mdast@4.0.3': dependencies: @@ -5566,7 +5559,7 @@ snapshots: '@types/ms@0.7.34': {} - '@types/node@22.15.32': + '@types/node@22.16.0': dependencies: undici-types: 6.21.0 @@ -5605,15 +5598,15 @@ snapshots: '@types/unist@3.0.2': {} - '@typescript-eslint/eslint-plugin@8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.34.1 - '@typescript-eslint/type-utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.34.1 - eslint: 9.29.0(jiti@2.4.2) + '@typescript-eslint/parser': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.35.1 + '@typescript-eslint/type-utils': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.35.1 + eslint: 9.30.1(jiti@2.4.2) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -5622,14 +5615,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/parser@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/scope-manager': 8.34.1 - '@typescript-eslint/types': 8.34.1 - '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.34.1 + '@typescript-eslint/scope-manager': 8.35.1 + '@typescript-eslint/types': 8.35.1 + '@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.35.1 debug: 4.4.1 - eslint: 9.29.0(jiti@2.4.2) + eslint: 9.30.1(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -5637,16 +5630,16 @@ snapshots: '@typescript-eslint/project-service@8.33.1(typescript@5.8.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.33.1(typescript@5.8.3) - '@typescript-eslint/types': 8.34.0 + '@typescript-eslint/types': 8.34.1 debug: 4.4.1 typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.34.1(typescript@5.8.3)': + '@typescript-eslint/project-service@8.35.1(typescript@5.8.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.8.3) - '@typescript-eslint/types': 8.34.1 + '@typescript-eslint/tsconfig-utils': 8.35.1(typescript@5.8.3) + '@typescript-eslint/types': 8.35.1 debug: 4.4.1 typescript: 5.8.3 transitivePeerDependencies: @@ -5657,25 +5650,25 @@ snapshots: '@typescript-eslint/types': 8.33.1 '@typescript-eslint/visitor-keys': 8.33.1 - '@typescript-eslint/scope-manager@8.34.1': + '@typescript-eslint/scope-manager@8.35.1': dependencies: - '@typescript-eslint/types': 8.34.1 - '@typescript-eslint/visitor-keys': 8.34.1 + '@typescript-eslint/types': 8.35.1 + '@typescript-eslint/visitor-keys': 8.35.1 '@typescript-eslint/tsconfig-utils@8.33.1(typescript@5.8.3)': dependencies: typescript: 5.8.3 - '@typescript-eslint/tsconfig-utils@8.34.1(typescript@5.8.3)': + '@typescript-eslint/tsconfig-utils@8.35.1(typescript@5.8.3)': dependencies: typescript: 5.8.3 - '@typescript-eslint/type-utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3) - '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3) + '@typescript-eslint/utils': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) debug: 4.4.1 - eslint: 9.29.0(jiti@2.4.2) + eslint: 9.30.1(jiti@2.4.2) ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: @@ -5683,10 +5676,10 @@ snapshots: '@typescript-eslint/types@8.33.1': {} - '@typescript-eslint/types@8.34.0': {} - '@typescript-eslint/types@8.34.1': {} + '@typescript-eslint/types@8.35.1': {} + '@typescript-eslint/typescript-estree@8.33.1(typescript@5.8.3)': dependencies: '@typescript-eslint/project-service': 8.33.1(typescript@5.8.3) @@ -5703,12 +5696,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.34.1(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.35.1(typescript@5.8.3)': dependencies: - '@typescript-eslint/project-service': 8.34.1(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.8.3) - '@typescript-eslint/types': 8.34.1 - '@typescript-eslint/visitor-keys': 8.34.1 + '@typescript-eslint/project-service': 8.35.1(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.35.1(typescript@5.8.3) + '@typescript-eslint/types': 8.35.1 + '@typescript-eslint/visitor-keys': 8.35.1 debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 @@ -5719,24 +5712,24 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.33.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/utils@8.33.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2)) '@typescript-eslint/scope-manager': 8.33.1 '@typescript-eslint/types': 8.33.1 '@typescript-eslint/typescript-estree': 8.33.1(typescript@5.8.3) - eslint: 9.29.0(jiti@2.4.2) + eslint: 9.30.1(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/utils@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.34.1 - '@typescript-eslint/types': 8.34.1 - '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3) - eslint: 9.29.0(jiti@2.4.2) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.35.1 + '@typescript-eslint/types': 8.35.1 + '@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3) + eslint: 9.30.1(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -5744,72 +5737,72 @@ snapshots: '@typescript-eslint/visitor-keys@8.33.1': dependencies: '@typescript-eslint/types': 8.33.1 - eslint-visitor-keys: 4.2.0 + eslint-visitor-keys: 4.2.1 - '@typescript-eslint/visitor-keys@8.34.1': + '@typescript-eslint/visitor-keys@8.35.1': dependencies: - '@typescript-eslint/types': 8.34.1 + '@typescript-eslint/types': 8.35.1 eslint-visitor-keys: 4.2.1 '@ungap/structured-clone@1.2.0': {} - '@unrs/resolver-binding-android-arm-eabi@1.9.0': + '@unrs/resolver-binding-android-arm-eabi@1.9.2': optional: true - '@unrs/resolver-binding-android-arm64@1.9.0': + '@unrs/resolver-binding-android-arm64@1.9.2': optional: true - '@unrs/resolver-binding-darwin-arm64@1.9.0': + '@unrs/resolver-binding-darwin-arm64@1.9.2': optional: true - '@unrs/resolver-binding-darwin-x64@1.9.0': + '@unrs/resolver-binding-darwin-x64@1.9.2': optional: true - '@unrs/resolver-binding-freebsd-x64@1.9.0': + '@unrs/resolver-binding-freebsd-x64@1.9.2': optional: true - '@unrs/resolver-binding-linux-arm-gnueabihf@1.9.0': + '@unrs/resolver-binding-linux-arm-gnueabihf@1.9.2': optional: true - '@unrs/resolver-binding-linux-arm-musleabihf@1.9.0': + '@unrs/resolver-binding-linux-arm-musleabihf@1.9.2': optional: true - '@unrs/resolver-binding-linux-arm64-gnu@1.9.0': + '@unrs/resolver-binding-linux-arm64-gnu@1.9.2': optional: true - '@unrs/resolver-binding-linux-arm64-musl@1.9.0': + '@unrs/resolver-binding-linux-arm64-musl@1.9.2': optional: true - '@unrs/resolver-binding-linux-ppc64-gnu@1.9.0': + '@unrs/resolver-binding-linux-ppc64-gnu@1.9.2': optional: true - '@unrs/resolver-binding-linux-riscv64-gnu@1.9.0': + '@unrs/resolver-binding-linux-riscv64-gnu@1.9.2': optional: true - '@unrs/resolver-binding-linux-riscv64-musl@1.9.0': + '@unrs/resolver-binding-linux-riscv64-musl@1.9.2': optional: true - '@unrs/resolver-binding-linux-s390x-gnu@1.9.0': + '@unrs/resolver-binding-linux-s390x-gnu@1.9.2': optional: true - '@unrs/resolver-binding-linux-x64-gnu@1.9.0': + '@unrs/resolver-binding-linux-x64-gnu@1.9.2': optional: true - '@unrs/resolver-binding-linux-x64-musl@1.9.0': + '@unrs/resolver-binding-linux-x64-musl@1.9.2': optional: true - '@unrs/resolver-binding-wasm32-wasi@1.9.0': + '@unrs/resolver-binding-wasm32-wasi@1.9.2': dependencies: '@napi-rs/wasm-runtime': 0.2.11 optional: true - '@unrs/resolver-binding-win32-arm64-msvc@1.9.0': + '@unrs/resolver-binding-win32-arm64-msvc@1.9.2': optional: true - '@unrs/resolver-binding-win32-ia32-msvc@1.9.0': + '@unrs/resolver-binding-win32-ia32-msvc@1.9.2': optional: true - '@unrs/resolver-binding-win32-x64-msvc@1.9.0': + '@unrs/resolver-binding-win32-x64-msvc@1.9.2': optional: true '@vitejs/release-scripts@1.5.0': @@ -5829,13 +5822,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@6.3.3(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': + '@vitest/mocker@3.2.4(vite@6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.3.3(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) '@vitest/pretty-format@3.2.4': dependencies: @@ -5863,10 +5856,6 @@ snapshots: loupe: 3.1.4 tinyrainbow: 2.0.0 - acorn-jsx@5.3.2(acorn@8.14.1): - dependencies: - acorn: 8.14.1 - acorn-jsx@5.3.2(acorn@8.15.0): dependencies: acorn: 8.15.0 @@ -6320,49 +6309,49 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-compat-utils@0.5.1(eslint@9.29.0(jiti@2.4.2)): + eslint-compat-utils@0.5.1(eslint@9.30.1(jiti@2.4.2)): dependencies: - eslint: 9.29.0(jiti@2.4.2) + eslint: 9.30.1(jiti@2.4.2) semver: 7.7.2 - eslint-import-context@0.1.8(unrs-resolver@1.9.0): + eslint-import-context@0.1.9(unrs-resolver@1.9.2): dependencies: get-tsconfig: 4.10.1 - stable-hash-x: 0.1.1 + stable-hash-x: 0.2.0 optionalDependencies: - unrs-resolver: 1.9.0 + unrs-resolver: 1.9.2 - eslint-plugin-es-x@7.8.0(eslint@9.29.0(jiti@2.4.2)): + eslint-plugin-es-x@7.8.0(eslint@9.30.1(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 - eslint: 9.29.0(jiti@2.4.2) - eslint-compat-utils: 0.5.1(eslint@9.29.0(jiti@2.4.2)) + eslint: 9.30.1(jiti@2.4.2) + eslint-compat-utils: 0.5.1(eslint@9.30.1(jiti@2.4.2)) - eslint-plugin-import-x@4.15.2(@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2)): dependencies: - '@typescript-eslint/types': 8.34.0 + '@typescript-eslint/types': 8.35.1 comment-parser: 1.4.1 debug: 4.4.1 - eslint: 9.29.0(jiti@2.4.2) - eslint-import-context: 0.1.8(unrs-resolver@1.9.0) + eslint: 9.30.1(jiti@2.4.2) + eslint-import-context: 0.1.9(unrs-resolver@1.9.2) is-glob: 4.0.3 minimatch: 10.0.1 semver: 7.7.2 - stable-hash-x: 0.1.1 - unrs-resolver: 1.9.0 + stable-hash-x: 0.2.0 + unrs-resolver: 1.9.2 optionalDependencies: - '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) transitivePeerDependencies: - supports-color - eslint-plugin-n@17.20.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): + eslint-plugin-n@17.20.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) - '@typescript-eslint/utils': 8.33.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2)) + '@typescript-eslint/utils': 8.33.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) enhanced-resolve: 5.17.1 - eslint: 9.29.0(jiti@2.4.2) - eslint-plugin-es-x: 7.8.0(eslint@9.29.0(jiti@2.4.2)) + eslint: 9.30.1(jiti@2.4.2) + eslint-plugin-es-x: 7.8.0(eslint@9.30.1(jiti@2.4.2)) get-tsconfig: 4.10.1 globals: 15.12.0 ignore: 5.3.2 @@ -6373,12 +6362,12 @@ snapshots: - supports-color - typescript - eslint-plugin-regexp@2.9.0(eslint@9.29.0(jiti@2.4.2)): + eslint-plugin-regexp@2.9.0(eslint@9.30.1(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 comment-parser: 1.4.1 - eslint: 9.29.0(jiti@2.4.2) + eslint: 9.30.1(jiti@2.4.2) jsdoc-type-pratt-parser: 4.0.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 @@ -6391,19 +6380,17 @@ snapshots: eslint-visitor-keys@3.4.3: {} - eslint-visitor-keys@4.2.0: {} - eslint-visitor-keys@4.2.1: {} - eslint@9.29.0(jiti@2.4.2): + eslint@9.30.1(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.20.1 - '@eslint/config-helpers': 0.2.1 + '@eslint/config-array': 0.21.0 + '@eslint/config-helpers': 0.3.0 '@eslint/core': 0.14.0 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.29.0 + '@eslint/js': 9.30.1 '@eslint/plugin-kit': 0.3.1 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 @@ -6584,17 +6571,17 @@ snapshots: function-bind@1.1.2: {} - generouted@1.11.7(react-router-dom@7.6.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.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + generouted@1.11.7(react-router-dom@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): dependencies: react: 19.1.0 - react-router-dom: 7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 6.3.3(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + react-router-dom: 7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + vite: 6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - generouted@1.20.0(react-router-dom@7.6.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.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + generouted@1.20.0(react-router-dom@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): dependencies: react: 19.1.0 - react-router-dom: 7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 6.3.3(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + react-router-dom: 7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + vite: 6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) gensync@1.0.0-beta.2: {} @@ -6622,7 +6609,7 @@ snapshots: globals@15.12.0: {} - globals@16.2.0: {} + globals@16.3.0: {} graceful-fs@4.2.11: {} @@ -7077,8 +7064,8 @@ snapshots: micromark-extension-mdxjs@3.0.0: dependencies: - acorn: 8.14.1 - acorn-jsx: 5.3.2(acorn@8.14.1) + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) micromark-extension-mdx-expression: 3.0.0 micromark-extension-mdx-jsx: 3.0.0 micromark-extension-mdx-md: 2.0.0 @@ -7346,7 +7333,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.27.1 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -7393,15 +7380,15 @@ snapshots: exsolve: 1.0.4 pathe: 2.0.3 - playwright-chromium@1.53.1: + playwright-chromium@1.53.2: dependencies: - playwright-core: 1.53.1 + playwright-core: 1.53.2 - playwright-core@1.53.1: {} + playwright-core@1.53.2: {} - playwright@1.53.1: + playwright@1.53.2: dependencies: - playwright-core: 1.53.1 + playwright-core: 1.53.2 optionalDependencies: fsevents: 2.3.2 @@ -7636,13 +7623,13 @@ snapshots: react-refresh@0.17.0: {} - react-router-dom@7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-router-dom@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - react-router: 7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react-router: 7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react-router@7.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-router@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: cookie: 1.0.2 react: 19.1.0 @@ -7716,7 +7703,7 @@ snapshots: rfdc@1.4.1: {} - rolldown-vite@6.3.21(@types/node@22.15.32)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1): + rolldown-vite@6.3.21(@types/node@22.16.0)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1): dependencies: '@oxc-project/runtime': 0.73.0 fdir: 6.4.4(picomatch@4.0.2) @@ -7726,7 +7713,7 @@ snapshots: rolldown: 1.0.0-beta.16 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 22.15.32 + '@types/node': 22.16.0 esbuild: 0.25.5 fsevents: 2.3.3 jiti: 2.4.2 @@ -7753,25 +7740,25 @@ snapshots: '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.16 '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.16 - rolldown@1.0.0-beta.19: + rolldown@1.0.0-beta.23: dependencies: - '@oxc-project/runtime': 0.73.2 - '@oxc-project/types': 0.73.2 - '@rolldown/pluginutils': 1.0.0-beta.19 + '@oxc-project/runtime': 0.75.0 + '@oxc-project/types': 0.75.0 + '@rolldown/pluginutils': 1.0.0-beta.23 ansis: 4.1.0 optionalDependencies: - '@rolldown/binding-darwin-arm64': 1.0.0-beta.19 - '@rolldown/binding-darwin-x64': 1.0.0-beta.19 - '@rolldown/binding-freebsd-x64': 1.0.0-beta.19 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.19 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.19 - '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.19 - '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.19 - '@rolldown/binding-linux-x64-musl': 1.0.0-beta.19 - '@rolldown/binding-wasm32-wasi': 1.0.0-beta.19 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.19 - '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.19 - '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.19 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.23 + '@rolldown/binding-darwin-x64': 1.0.0-beta.23 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.23 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.23 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.23 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.23 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.23 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.23 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.23 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.23 + '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.23 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.23 rollup-plugin-dts@6.2.1(rollup@4.37.0)(typescript@5.8.3): dependencies: @@ -7873,7 +7860,7 @@ snapshots: space-separated-tokens@2.0.2: {} - stable-hash-x@0.1.1: {} + stable-hash-x@0.2.0: {} stackback@0.0.2: {} @@ -8012,12 +7999,12 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3): + typescript-eslint@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.29.0(jiti@2.4.2) + '@typescript-eslint/eslint-plugin': 8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.30.1(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -8105,29 +8092,29 @@ snapshots: universalify@2.0.1: {} - unrs-resolver@1.9.0: + unrs-resolver@1.9.2: dependencies: napi-postinstall: 0.2.4 optionalDependencies: - '@unrs/resolver-binding-android-arm-eabi': 1.9.0 - '@unrs/resolver-binding-android-arm64': 1.9.0 - '@unrs/resolver-binding-darwin-arm64': 1.9.0 - '@unrs/resolver-binding-darwin-x64': 1.9.0 - '@unrs/resolver-binding-freebsd-x64': 1.9.0 - '@unrs/resolver-binding-linux-arm-gnueabihf': 1.9.0 - '@unrs/resolver-binding-linux-arm-musleabihf': 1.9.0 - '@unrs/resolver-binding-linux-arm64-gnu': 1.9.0 - '@unrs/resolver-binding-linux-arm64-musl': 1.9.0 - '@unrs/resolver-binding-linux-ppc64-gnu': 1.9.0 - '@unrs/resolver-binding-linux-riscv64-gnu': 1.9.0 - '@unrs/resolver-binding-linux-riscv64-musl': 1.9.0 - '@unrs/resolver-binding-linux-s390x-gnu': 1.9.0 - '@unrs/resolver-binding-linux-x64-gnu': 1.9.0 - '@unrs/resolver-binding-linux-x64-musl': 1.9.0 - '@unrs/resolver-binding-wasm32-wasi': 1.9.0 - '@unrs/resolver-binding-win32-arm64-msvc': 1.9.0 - '@unrs/resolver-binding-win32-ia32-msvc': 1.9.0 - '@unrs/resolver-binding-win32-x64-msvc': 1.9.0 + '@unrs/resolver-binding-android-arm-eabi': 1.9.2 + '@unrs/resolver-binding-android-arm64': 1.9.2 + '@unrs/resolver-binding-darwin-arm64': 1.9.2 + '@unrs/resolver-binding-darwin-x64': 1.9.2 + '@unrs/resolver-binding-freebsd-x64': 1.9.2 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.9.2 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.9.2 + '@unrs/resolver-binding-linux-arm64-gnu': 1.9.2 + '@unrs/resolver-binding-linux-arm64-musl': 1.9.2 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.9.2 + '@unrs/resolver-binding-linux-riscv64-gnu': 1.9.2 + '@unrs/resolver-binding-linux-riscv64-musl': 1.9.2 + '@unrs/resolver-binding-linux-s390x-gnu': 1.9.2 + '@unrs/resolver-binding-linux-x64-gnu': 1.9.2 + '@unrs/resolver-binding-linux-x64-musl': 1.9.2 + '@unrs/resolver-binding-wasm32-wasi': 1.9.2 + '@unrs/resolver-binding-win32-arm64-msvc': 1.9.2 + '@unrs/resolver-binding-win32-ia32-msvc': 1.9.2 + '@unrs/resolver-binding-win32-x64-msvc': 1.9.2 untyped@2.0.0: dependencies: @@ -8160,13 +8147,13 @@ snapshots: unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 - vite-node@3.2.4(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): + vite-node@3.2.4(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: cac: 6.7.14 debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.3.3(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) transitivePeerDependencies: - '@types/node' - jiti @@ -8181,7 +8168,7 @@ snapshots: - tsx - yaml - vite@6.3.3(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): + vite@6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: esbuild: 0.25.3 fdir: 6.4.4(picomatch@4.0.2) @@ -8190,18 +8177,18 @@ snapshots: rollup: 4.37.0 tinyglobby: 0.2.13 optionalDependencies: - '@types/node': 22.15.32 + '@types/node': 22.16.0 fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.30.1 tsx: 4.20.3 yaml: 2.7.1 - vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@6.3.3(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + '@vitest/mocker': 3.2.4(vite@6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -8219,12 +8206,12 @@ snapshots: tinyglobby: 0.2.14 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 6.3.3(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vite-node: 3.2.4(@types/node@22.15.32)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite-node: 3.2.4(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.15.32 + '@types/node': 22.16.0 transitivePeerDependencies: - jiti - less From 7196f66f9d05270972be7bbdac84e95987c6dd73 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Fri, 4 Jul 2025 15:36:23 +0900 Subject: [PATCH 052/313] chore(deps): update Vite 7 (#522) --- .github/workflows/ci.yml | 5 +- package.json | 2 +- packages/common/package.json | 3 - packages/plugin-react-swc/package.json | 3 +- pnpm-lock.yaml | 626 ++++++++++++------------- 5 files changed, 319 insertions(+), 320 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cc6104cac..013b70b73 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,7 +29,7 @@ jobs: strategy: matrix: os: [ubuntu-latest] - node_version: [18, 20, 22] + node_version: [18, 20, 22, 24] include: # Active LTS + other OS - os: macos-latest @@ -81,6 +81,9 @@ jobs: # does not need to explicitly set chromium after https://github.com/microsoft/playwright/issues/14862 is solved run: pnpm playwright install chromium + - if: matrix.node_version == '18' + run: pnpm i -D vite@6.3.5 -w + - name: Build run: pnpm run build diff --git a/package.json b/package.json index ca1a11662..95e06ace2 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "tsx": "^4.20.3", "typescript": "^5.8.3", "typescript-eslint": "^8.35.1", - "vite": "^6.3.3", + "vite": "^7.0.2", "vitest": "^3.2.4" }, "simple-git-hooks": { diff --git a/packages/common/package.json b/packages/common/package.json index dfa9ddf23..1bb806f8c 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -9,8 +9,5 @@ }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" - }, - "devDependencies": { - "vite": "^6.3.3" } } diff --git a/packages/plugin-react-swc/package.json b/packages/plugin-react-swc/package.json index 9a4c6576e..7425fd3e0 100644 --- a/packages/plugin-react-swc/package.json +++ b/packages/plugin-react-swc/package.json @@ -44,7 +44,6 @@ "fs-extra": "^11.3.0", "picocolors": "^1.1.1", "prettier": "^3.0.3", - "typescript": "^5.8.3", - "vite": "^6.3.3" + "typescript": "^5.8.3" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2878c52f6..bd662290a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -71,17 +71,13 @@ importers: specifier: ^8.35.1 version: 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) vite: - specifier: ^6.3.3 - version: 6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + specifier: ^7.0.2 + version: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vitest: specifier: ^3.2.4 version: 3.2.4(@types/debug@4.1.12)(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - packages/common: - devDependencies: - vite: - specifier: ^6.3.3 - version: 6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + packages/common: {} packages/plugin-react: dependencies: @@ -178,9 +174,6 @@ importers: typescript: specifier: ^5.8.3 version: 5.8.3 - vite: - specifier: ^6.3.3 - version: 6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) packages/plugin-react-swc/playground/base-path: dependencies: @@ -322,7 +315,7 @@ importers: devDependencies: '@mdx-js/rollup': specifier: ^3.1.0 - version: 3.1.0(rollup@4.37.0) + version: 3.1.0(rollup@4.44.1) '@types/react': specifier: ^19.1.8 version: 19.1.8 @@ -406,10 +399,10 @@ importers: dependencies: '@generouted/react-router': specifier: ^1.20.0 - version: 1.20.0(react-router-dom@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-router@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 1.20.0(react-router-dom@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-router@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) generouted: specifier: 1.11.7 - version: 1.11.7(react-router-dom@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 1.11.7(react-router-dom@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) react: specifier: ^19.1.0 version: 19.1.0 @@ -585,7 +578,7 @@ importers: devDependencies: '@mdx-js/rollup': specifier: ^3.1.0 - version: 3.1.0(rollup@4.37.0) + version: 3.1.0(rollup@4.44.1) '@types/react': specifier: ^19.1.8 version: 19.1.8 @@ -952,12 +945,6 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.25.3': - resolution: {integrity: sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.25.5': resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} engines: {node: '>=18'} @@ -976,12 +963,6 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.25.3': - resolution: {integrity: sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.25.5': resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} engines: {node: '>=18'} @@ -1000,12 +981,6 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.25.3': - resolution: {integrity: sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.25.5': resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==} engines: {node: '>=18'} @@ -1024,12 +999,6 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.25.3': - resolution: {integrity: sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.25.5': resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==} engines: {node: '>=18'} @@ -1048,12 +1017,6 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.25.3': - resolution: {integrity: sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.25.5': resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} engines: {node: '>=18'} @@ -1072,12 +1035,6 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.25.3': - resolution: {integrity: sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.25.5': resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==} engines: {node: '>=18'} @@ -1096,12 +1053,6 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.25.3': - resolution: {integrity: sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.25.5': resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} engines: {node: '>=18'} @@ -1120,12 +1071,6 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.3': - resolution: {integrity: sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.25.5': resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==} engines: {node: '>=18'} @@ -1144,12 +1089,6 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.25.3': - resolution: {integrity: sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.25.5': resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} engines: {node: '>=18'} @@ -1168,12 +1107,6 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.25.3': - resolution: {integrity: sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.25.5': resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==} engines: {node: '>=18'} @@ -1192,12 +1125,6 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.25.3': - resolution: {integrity: sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.25.5': resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==} engines: {node: '>=18'} @@ -1216,12 +1143,6 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.25.3': - resolution: {integrity: sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.25.5': resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==} engines: {node: '>=18'} @@ -1240,12 +1161,6 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.25.3': - resolution: {integrity: sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.25.5': resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==} engines: {node: '>=18'} @@ -1264,12 +1179,6 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.25.3': - resolution: {integrity: sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.25.5': resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==} engines: {node: '>=18'} @@ -1288,12 +1197,6 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.25.3': - resolution: {integrity: sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.25.5': resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==} engines: {node: '>=18'} @@ -1312,12 +1215,6 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.25.3': - resolution: {integrity: sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.25.5': resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==} engines: {node: '>=18'} @@ -1336,12 +1233,6 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.25.3': - resolution: {integrity: sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.25.5': resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==} engines: {node: '>=18'} @@ -1360,12 +1251,6 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-arm64@0.25.3': - resolution: {integrity: sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - '@esbuild/netbsd-arm64@0.25.5': resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} engines: {node: '>=18'} @@ -1384,12 +1269,6 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.3': - resolution: {integrity: sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.25.5': resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==} engines: {node: '>=18'} @@ -1408,12 +1287,6 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.25.3': - resolution: {integrity: sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - '@esbuild/openbsd-arm64@0.25.5': resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} engines: {node: '>=18'} @@ -1432,12 +1305,6 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.3': - resolution: {integrity: sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.25.5': resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==} engines: {node: '>=18'} @@ -1456,12 +1323,6 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.25.3': - resolution: {integrity: sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.25.5': resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} engines: {node: '>=18'} @@ -1480,12 +1341,6 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.25.3': - resolution: {integrity: sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.25.5': resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} engines: {node: '>=18'} @@ -1504,12 +1359,6 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.25.3': - resolution: {integrity: sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.25.5': resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==} engines: {node: '>=18'} @@ -1528,12 +1377,6 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.25.3': - resolution: {integrity: sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.25.5': resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==} engines: {node: '>=18'} @@ -1863,101 +1706,201 @@ packages: cpu: [arm] os: [android] + '@rollup/rollup-android-arm-eabi@4.44.1': + resolution: {integrity: sha512-JAcBr1+fgqx20m7Fwe1DxPUl/hPkee6jA6Pl7n1v2EFiktAHenTaXl5aIFjUIEsfn9w3HE4gK1lEgNGMzBDs1w==} + cpu: [arm] + os: [android] + '@rollup/rollup-android-arm64@4.37.0': resolution: {integrity: sha512-6U3SlVyMxezt8Y+/iEBcbp945uZjJwjZimu76xoG7tO1av9VO691z8PkhzQ85ith2I8R2RddEPeSfcbyPfD4hA==} cpu: [arm64] os: [android] + '@rollup/rollup-android-arm64@4.44.1': + resolution: {integrity: sha512-RurZetXqTu4p+G0ChbnkwBuAtwAbIwJkycw1n6GvlGlBuS4u5qlr5opix8cBAYFJgaY05TWtM+LaoFggUmbZEQ==} + cpu: [arm64] + os: [android] + '@rollup/rollup-darwin-arm64@4.37.0': resolution: {integrity: sha512-+iTQ5YHuGmPt10NTzEyMPbayiNTcOZDWsbxZYR1ZnmLnZxG17ivrPSWFO9j6GalY0+gV3Jtwrrs12DBscxnlYA==} cpu: [arm64] os: [darwin] + '@rollup/rollup-darwin-arm64@4.44.1': + resolution: {integrity: sha512-fM/xPesi7g2M7chk37LOnmnSTHLG/v2ggWqKj3CCA1rMA4mm5KVBT1fNoswbo1JhPuNNZrVwpTvlCVggv8A2zg==} + cpu: [arm64] + os: [darwin] + '@rollup/rollup-darwin-x64@4.37.0': resolution: {integrity: sha512-m8W2UbxLDcmRKVjgl5J/k4B8d7qX2EcJve3Sut7YGrQoPtCIQGPH5AMzuFvYRWZi0FVS0zEY4c8uttPfX6bwYQ==} cpu: [x64] os: [darwin] + '@rollup/rollup-darwin-x64@4.44.1': + resolution: {integrity: sha512-gDnWk57urJrkrHQ2WVx9TSVTH7lSlU7E3AFqiko+bgjlh78aJ88/3nycMax52VIVjIm3ObXnDL2H00e/xzoipw==} + cpu: [x64] + os: [darwin] + '@rollup/rollup-freebsd-arm64@4.37.0': resolution: {integrity: sha512-FOMXGmH15OmtQWEt174v9P1JqqhlgYge/bUjIbiVD1nI1NeJ30HYT9SJlZMqdo1uQFyt9cz748F1BHghWaDnVA==} cpu: [arm64] os: [freebsd] + '@rollup/rollup-freebsd-arm64@4.44.1': + resolution: {integrity: sha512-wnFQmJ/zPThM5zEGcnDcCJeYJgtSLjh1d//WuHzhf6zT3Md1BvvhJnWoy+HECKu2bMxaIcfWiu3bJgx6z4g2XA==} + cpu: [arm64] + os: [freebsd] + '@rollup/rollup-freebsd-x64@4.37.0': resolution: {integrity: sha512-SZMxNttjPKvV14Hjck5t70xS3l63sbVwl98g3FlVVx2YIDmfUIy29jQrsw06ewEYQ8lQSuY9mpAPlmgRD2iSsA==} cpu: [x64] os: [freebsd] + '@rollup/rollup-freebsd-x64@4.44.1': + resolution: {integrity: sha512-uBmIxoJ4493YATvU2c0upGz87f99e3wop7TJgOA/bXMFd2SvKCI7xkxY/5k50bv7J6dw1SXT4MQBQSLn8Bb/Uw==} + cpu: [x64] + os: [freebsd] + '@rollup/rollup-linux-arm-gnueabihf@4.37.0': resolution: {integrity: sha512-hhAALKJPidCwZcj+g+iN+38SIOkhK2a9bqtJR+EtyxrKKSt1ynCBeqrQy31z0oWU6thRZzdx53hVgEbRkuI19w==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-gnueabihf@4.44.1': + resolution: {integrity: sha512-n0edDmSHlXFhrlmTK7XBuwKlG5MbS7yleS1cQ9nn4kIeW+dJH+ExqNgQ0RrFRew8Y+0V/x6C5IjsHrJmiHtkxQ==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.37.0': resolution: {integrity: sha512-jUb/kmn/Gd8epbHKEqkRAxq5c2EwRt0DqhSGWjPFxLeFvldFdHQs/n8lQ9x85oAeVb6bHcS8irhTJX2FCOd8Ag==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.44.1': + resolution: {integrity: sha512-8WVUPy3FtAsKSpyk21kV52HCxB+me6YkbkFHATzC2Yd3yuqHwy2lbFL4alJOLXKljoRw08Zk8/xEj89cLQ/4Nw==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.37.0': resolution: {integrity: sha512-oNrJxcQT9IcbcmKlkF+Yz2tmOxZgG9D9GRq+1OE6XCQwCVwxixYAa38Z8qqPzQvzt1FCfmrHX03E0pWoXm1DqA==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.44.1': + resolution: {integrity: sha512-yuktAOaeOgorWDeFJggjuCkMGeITfqvPgkIXhDqsfKX8J3jGyxdDZgBV/2kj/2DyPaLiX6bPdjJDTu9RB8lUPQ==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-arm64-musl@4.37.0': resolution: {integrity: sha512-pfxLBMls+28Ey2enpX3JvjEjaJMBX5XlPCZNGxj4kdJyHduPBXtxYeb8alo0a7bqOoWZW2uKynhHxF/MWoHaGQ==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-musl@4.44.1': + resolution: {integrity: sha512-W+GBM4ifET1Plw8pdVaecwUgxmiH23CfAUj32u8knq0JPFyK4weRy6H7ooxYFD19YxBulL0Ktsflg5XS7+7u9g==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-loongarch64-gnu@4.37.0': resolution: {integrity: sha512-yCE0NnutTC/7IGUq/PUHmoeZbIwq3KRh02e9SfFh7Vmc1Z7atuJRYWhRME5fKgT8aS20mwi1RyChA23qSyRGpA==} cpu: [loong64] os: [linux] + '@rollup/rollup-linux-loongarch64-gnu@4.44.1': + resolution: {integrity: sha512-1zqnUEMWp9WrGVuVak6jWTl4fEtrVKfZY7CvcBmUUpxAJ7WcSowPSAWIKa/0o5mBL/Ij50SIf9tuirGx63Ovew==} + cpu: [loong64] + os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.37.0': resolution: {integrity: sha512-NxcICptHk06E2Lh3a4Pu+2PEdZ6ahNHuK7o6Np9zcWkrBMuv21j10SQDJW3C9Yf/A/P7cutWoC/DptNLVsZ0VQ==} cpu: [ppc64] os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.44.1': + resolution: {integrity: sha512-Rl3JKaRu0LHIx7ExBAAnf0JcOQetQffaw34T8vLlg9b1IhzcBgaIdnvEbbsZq9uZp3uAH+JkHd20Nwn0h9zPjA==} + cpu: [ppc64] + os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.37.0': resolution: {integrity: sha512-PpWwHMPCVpFZLTfLq7EWJWvrmEuLdGn1GMYcm5MV7PaRgwCEYJAwiN94uBuZev0/J/hFIIJCsYw4nLmXA9J7Pw==} cpu: [riscv64] os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.44.1': + resolution: {integrity: sha512-j5akelU3snyL6K3N/iX7otLBIl347fGwmd95U5gS/7z6T4ftK288jKq3A5lcFKcx7wwzb5rgNvAg3ZbV4BqUSw==} + cpu: [riscv64] + os: [linux] + '@rollup/rollup-linux-riscv64-musl@4.37.0': resolution: {integrity: sha512-DTNwl6a3CfhGTAOYZ4KtYbdS8b+275LSLqJVJIrPa5/JuIufWWZ/QFvkxp52gpmguN95eujrM68ZG+zVxa8zHA==} cpu: [riscv64] os: [linux] + '@rollup/rollup-linux-riscv64-musl@4.44.1': + resolution: {integrity: sha512-ppn5llVGgrZw7yxbIm8TTvtj1EoPgYUAbfw0uDjIOzzoqlZlZrLJ/KuiE7uf5EpTpCTrNt1EdtzF0naMm0wGYg==} + cpu: [riscv64] + os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.37.0': resolution: {integrity: sha512-hZDDU5fgWvDdHFuExN1gBOhCuzo/8TMpidfOR+1cPZJflcEzXdCy1LjnklQdW8/Et9sryOPJAKAQRw8Jq7Tg+A==} cpu: [s390x] os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.44.1': + resolution: {integrity: sha512-Hu6hEdix0oxtUma99jSP7xbvjkUM/ycke/AQQ4EC5g7jNRLLIwjcNwaUy95ZKBJJwg1ZowsclNnjYqzN4zwkAw==} + cpu: [s390x] + os: [linux] + '@rollup/rollup-linux-x64-gnu@4.37.0': resolution: {integrity: sha512-pKivGpgJM5g8dwj0ywBwe/HeVAUSuVVJhUTa/URXjxvoyTT/AxsLTAbkHkDHG7qQxLoW2s3apEIl26uUe08LVQ==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-gnu@4.44.1': + resolution: {integrity: sha512-EtnsrmZGomz9WxK1bR5079zee3+7a+AdFlghyd6VbAjgRJDbTANJ9dcPIPAi76uG05micpEL+gPGmAKYTschQw==} + cpu: [x64] + os: [linux] + '@rollup/rollup-linux-x64-musl@4.37.0': resolution: {integrity: sha512-E2lPrLKE8sQbY/2bEkVTGDEk4/49UYRVWgj90MY8yPjpnGBQ+Xi1Qnr7b7UIWw1NOggdFQFOLZ8+5CzCiz143w==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-musl@4.44.1': + resolution: {integrity: sha512-iAS4p+J1az6Usn0f8xhgL4PaU878KEtutP4hqw52I4IO6AGoyOkHCxcc4bqufv1tQLdDWFx8lR9YlwxKuv3/3g==} + cpu: [x64] + os: [linux] + '@rollup/rollup-win32-arm64-msvc@4.37.0': resolution: {integrity: sha512-Jm7biMazjNzTU4PrQtr7VS8ibeys9Pn29/1bm4ph7CP2kf21950LgN+BaE2mJ1QujnvOc6p54eWWiVvn05SOBg==} cpu: [arm64] os: [win32] + '@rollup/rollup-win32-arm64-msvc@4.44.1': + resolution: {integrity: sha512-NtSJVKcXwcqozOl+FwI41OH3OApDyLk3kqTJgx8+gp6On9ZEt5mYhIsKNPGuaZr3p9T6NWPKGU/03Vw4CNU9qg==} + cpu: [arm64] + os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.37.0': resolution: {integrity: sha512-e3/1SFm1OjefWICB2Ucstg2dxYDkDTZGDYgwufcbsxTHyqQps1UQf33dFEChBNmeSsTOyrjw2JJq0zbG5GF6RA==} cpu: [ia32] os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.44.1': + resolution: {integrity: sha512-JYA3qvCOLXSsnTR3oiyGws1Dm0YTuxAAeaYGVlGpUsHqloPcFjPg+X0Fj2qODGLNwQOAcCiQmHub/V007kiH5A==} + cpu: [ia32] + os: [win32] + '@rollup/rollup-win32-x64-msvc@4.37.0': resolution: {integrity: sha512-LWbXUBwn/bcLx2sSsqy7pK5o+Nr+VCoRoAohfJ5C/aBio9nfJmGQqHAhU6pwxV/RmyTk5AqdySma7uwWGlmeuA==} cpu: [x64] os: [win32] + '@rollup/rollup-win32-x64-msvc@4.44.1': + resolution: {integrity: sha512-J8o22LuF0kTe7m+8PvW9wk3/bRq5+mRo5Dqo6+vXb7otCm3TPhYOJqOaQtGU9YMWQSL3krMnoOxMr0+9E6F3Ug==} + cpu: [x64] + os: [win32] + '@swc/core-darwin-arm64@1.12.9': resolution: {integrity: sha512-GACFEp4nD6V+TZNR2JwbMZRHB+Yyvp14FrcmB6UCUYmhuNWjkxi+CLnEvdbuiKyQYv0zA+TRpCHZ+whEs6gwfA==} engines: {node: '>=10'} @@ -2079,6 +2022,9 @@ packages: '@types/estree@1.0.7': resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/fs-extra@11.0.4': resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} @@ -2739,11 +2685,6 @@ packages: engines: {node: '>=18'} hasBin: true - esbuild@0.25.3: - resolution: {integrity: sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==} - engines: {node: '>=18'} - hasBin: true - esbuild@0.25.5: resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} engines: {node: '>=18'} @@ -2915,6 +2856,14 @@ packages: picomatch: optional: true + fdir@6.4.6: + resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + fetch-blob@3.2.0: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} @@ -3828,6 +3777,10 @@ packages: resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -4024,6 +3977,11 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rollup@4.44.1: + resolution: {integrity: sha512-x8H8aPvD+xbl0Do8oez5f5o8eMS3trfCghc4HhLAnCkj7Vl0d1JWGs0UF/D886zLW2rOj2QymV/JcSSsw+XDNg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -4200,10 +4158,6 @@ packages: resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} engines: {node: '>=12.0.0'} - tinyglobby@0.2.13: - resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} - engines: {node: '>=12.0.0'} - tinyglobby@0.2.14: resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} @@ -4341,19 +4295,59 @@ packages: engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true - vite@6.3.3: - resolution: {integrity: sha512-5nXH+QsELbFKhsEfWLkHrvgRpTdGJzqOZ+utSdmPTvwHmvU6ITTm3xx+mRusihkcI8GeC7lCDyn3kDtiki9scw==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + vite@7.0.1: + resolution: {integrity: sha512-BiKOQoW5HGR30E6JDeNsati6HnSPMVEKbkIWbCiol+xKeu3g5owrjy7kbk/QEMuzCV87dSUTvycYKmlcfGKq3Q==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@types/node': ^20.19.0 || >=22.12.0 jiti: '>=1.21.0' - less: '*' + less: ^4.0.0 lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vite@7.0.2: + resolution: {integrity: sha512-hxdyZDY1CM6SNpKI4w4lcUc3Mtkd9ej4ECWVHSMrOdSinVc2zYOAppHeGc/hzmRo3pxM5blMzkuWHOJA/3NiFw==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 terser: ^5.16.0 tsx: ^4.8.1 yaml: ^2.4.2 @@ -4777,9 +4771,6 @@ snapshots: '@esbuild/aix-ppc64@0.25.2': optional: true - '@esbuild/aix-ppc64@0.25.3': - optional: true - '@esbuild/aix-ppc64@0.25.5': optional: true @@ -4789,9 +4780,6 @@ snapshots: '@esbuild/android-arm64@0.25.2': optional: true - '@esbuild/android-arm64@0.25.3': - optional: true - '@esbuild/android-arm64@0.25.5': optional: true @@ -4801,9 +4789,6 @@ snapshots: '@esbuild/android-arm@0.25.2': optional: true - '@esbuild/android-arm@0.25.3': - optional: true - '@esbuild/android-arm@0.25.5': optional: true @@ -4813,9 +4798,6 @@ snapshots: '@esbuild/android-x64@0.25.2': optional: true - '@esbuild/android-x64@0.25.3': - optional: true - '@esbuild/android-x64@0.25.5': optional: true @@ -4825,9 +4807,6 @@ snapshots: '@esbuild/darwin-arm64@0.25.2': optional: true - '@esbuild/darwin-arm64@0.25.3': - optional: true - '@esbuild/darwin-arm64@0.25.5': optional: true @@ -4837,9 +4816,6 @@ snapshots: '@esbuild/darwin-x64@0.25.2': optional: true - '@esbuild/darwin-x64@0.25.3': - optional: true - '@esbuild/darwin-x64@0.25.5': optional: true @@ -4849,9 +4825,6 @@ snapshots: '@esbuild/freebsd-arm64@0.25.2': optional: true - '@esbuild/freebsd-arm64@0.25.3': - optional: true - '@esbuild/freebsd-arm64@0.25.5': optional: true @@ -4861,9 +4834,6 @@ snapshots: '@esbuild/freebsd-x64@0.25.2': optional: true - '@esbuild/freebsd-x64@0.25.3': - optional: true - '@esbuild/freebsd-x64@0.25.5': optional: true @@ -4873,9 +4843,6 @@ snapshots: '@esbuild/linux-arm64@0.25.2': optional: true - '@esbuild/linux-arm64@0.25.3': - optional: true - '@esbuild/linux-arm64@0.25.5': optional: true @@ -4885,9 +4852,6 @@ snapshots: '@esbuild/linux-arm@0.25.2': optional: true - '@esbuild/linux-arm@0.25.3': - optional: true - '@esbuild/linux-arm@0.25.5': optional: true @@ -4897,9 +4861,6 @@ snapshots: '@esbuild/linux-ia32@0.25.2': optional: true - '@esbuild/linux-ia32@0.25.3': - optional: true - '@esbuild/linux-ia32@0.25.5': optional: true @@ -4909,9 +4870,6 @@ snapshots: '@esbuild/linux-loong64@0.25.2': optional: true - '@esbuild/linux-loong64@0.25.3': - optional: true - '@esbuild/linux-loong64@0.25.5': optional: true @@ -4921,9 +4879,6 @@ snapshots: '@esbuild/linux-mips64el@0.25.2': optional: true - '@esbuild/linux-mips64el@0.25.3': - optional: true - '@esbuild/linux-mips64el@0.25.5': optional: true @@ -4933,9 +4888,6 @@ snapshots: '@esbuild/linux-ppc64@0.25.2': optional: true - '@esbuild/linux-ppc64@0.25.3': - optional: true - '@esbuild/linux-ppc64@0.25.5': optional: true @@ -4945,9 +4897,6 @@ snapshots: '@esbuild/linux-riscv64@0.25.2': optional: true - '@esbuild/linux-riscv64@0.25.3': - optional: true - '@esbuild/linux-riscv64@0.25.5': optional: true @@ -4957,9 +4906,6 @@ snapshots: '@esbuild/linux-s390x@0.25.2': optional: true - '@esbuild/linux-s390x@0.25.3': - optional: true - '@esbuild/linux-s390x@0.25.5': optional: true @@ -4969,9 +4915,6 @@ snapshots: '@esbuild/linux-x64@0.25.2': optional: true - '@esbuild/linux-x64@0.25.3': - optional: true - '@esbuild/linux-x64@0.25.5': optional: true @@ -4981,9 +4924,6 @@ snapshots: '@esbuild/netbsd-arm64@0.25.2': optional: true - '@esbuild/netbsd-arm64@0.25.3': - optional: true - '@esbuild/netbsd-arm64@0.25.5': optional: true @@ -4993,9 +4933,6 @@ snapshots: '@esbuild/netbsd-x64@0.25.2': optional: true - '@esbuild/netbsd-x64@0.25.3': - optional: true - '@esbuild/netbsd-x64@0.25.5': optional: true @@ -5005,9 +4942,6 @@ snapshots: '@esbuild/openbsd-arm64@0.25.2': optional: true - '@esbuild/openbsd-arm64@0.25.3': - optional: true - '@esbuild/openbsd-arm64@0.25.5': optional: true @@ -5017,9 +4951,6 @@ snapshots: '@esbuild/openbsd-x64@0.25.2': optional: true - '@esbuild/openbsd-x64@0.25.3': - optional: true - '@esbuild/openbsd-x64@0.25.5': optional: true @@ -5029,9 +4960,6 @@ snapshots: '@esbuild/sunos-x64@0.25.2': optional: true - '@esbuild/sunos-x64@0.25.3': - optional: true - '@esbuild/sunos-x64@0.25.5': optional: true @@ -5041,9 +4969,6 @@ snapshots: '@esbuild/win32-arm64@0.25.2': optional: true - '@esbuild/win32-arm64@0.25.3': - optional: true - '@esbuild/win32-arm64@0.25.5': optional: true @@ -5053,9 +4978,6 @@ snapshots: '@esbuild/win32-ia32@0.25.2': optional: true - '@esbuild/win32-ia32@0.25.3': - optional: true - '@esbuild/win32-ia32@0.25.5': optional: true @@ -5065,9 +4987,6 @@ snapshots: '@esbuild/win32-x64@0.25.2': optional: true - '@esbuild/win32-x64@0.25.3': - optional: true - '@esbuild/win32-x64@0.25.5': optional: true @@ -5115,13 +5034,13 @@ snapshots: '@eslint/core': 0.14.0 levn: 0.4.1 - '@generouted/react-router@1.20.0(react-router-dom@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-router@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': + '@generouted/react-router@1.20.0(react-router-dom@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-router@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': dependencies: fast-glob: 3.3.3 - generouted: 1.20.0(react-router-dom@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + generouted: 1.20.0(react-router-dom@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) react: 19.1.0 react-router: 7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) transitivePeerDependencies: - react-router-dom @@ -5183,11 +5102,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@mdx-js/rollup@3.1.0(rollup@4.37.0)': + '@mdx-js/rollup@3.1.0(rollup@4.44.1)': dependencies: '@mdx-js/mdx': 3.0.0 - '@rollup/pluginutils': 5.1.0(rollup@4.37.0) - rollup: 4.37.0 + '@rollup/pluginutils': 5.1.0(rollup@4.44.1) + rollup: 4.44.1 source-map: 0.7.4 vfile: 6.0.1 transitivePeerDependencies: @@ -5345,13 +5264,13 @@ snapshots: optionalDependencies: rollup: 4.37.0 - '@rollup/pluginutils@5.1.0(rollup@4.37.0)': + '@rollup/pluginutils@5.1.0(rollup@4.44.1)': dependencies: '@types/estree': 1.0.7 estree-walker: 2.0.2 picomatch: 2.3.1 optionalDependencies: - rollup: 4.37.0 + rollup: 4.44.1 '@rollup/pluginutils@5.1.4(rollup@4.37.0)': dependencies: @@ -5364,63 +5283,123 @@ snapshots: '@rollup/rollup-android-arm-eabi@4.37.0': optional: true + '@rollup/rollup-android-arm-eabi@4.44.1': + optional: true + '@rollup/rollup-android-arm64@4.37.0': optional: true + '@rollup/rollup-android-arm64@4.44.1': + optional: true + '@rollup/rollup-darwin-arm64@4.37.0': optional: true + '@rollup/rollup-darwin-arm64@4.44.1': + optional: true + '@rollup/rollup-darwin-x64@4.37.0': optional: true + '@rollup/rollup-darwin-x64@4.44.1': + optional: true + '@rollup/rollup-freebsd-arm64@4.37.0': optional: true + '@rollup/rollup-freebsd-arm64@4.44.1': + optional: true + '@rollup/rollup-freebsd-x64@4.37.0': optional: true + '@rollup/rollup-freebsd-x64@4.44.1': + optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.37.0': optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.44.1': + optional: true + '@rollup/rollup-linux-arm-musleabihf@4.37.0': optional: true + '@rollup/rollup-linux-arm-musleabihf@4.44.1': + optional: true + '@rollup/rollup-linux-arm64-gnu@4.37.0': optional: true + '@rollup/rollup-linux-arm64-gnu@4.44.1': + optional: true + '@rollup/rollup-linux-arm64-musl@4.37.0': optional: true + '@rollup/rollup-linux-arm64-musl@4.44.1': + optional: true + '@rollup/rollup-linux-loongarch64-gnu@4.37.0': optional: true + '@rollup/rollup-linux-loongarch64-gnu@4.44.1': + optional: true + '@rollup/rollup-linux-powerpc64le-gnu@4.37.0': optional: true + '@rollup/rollup-linux-powerpc64le-gnu@4.44.1': + optional: true + '@rollup/rollup-linux-riscv64-gnu@4.37.0': optional: true + '@rollup/rollup-linux-riscv64-gnu@4.44.1': + optional: true + '@rollup/rollup-linux-riscv64-musl@4.37.0': optional: true + '@rollup/rollup-linux-riscv64-musl@4.44.1': + optional: true + '@rollup/rollup-linux-s390x-gnu@4.37.0': optional: true + '@rollup/rollup-linux-s390x-gnu@4.44.1': + optional: true + '@rollup/rollup-linux-x64-gnu@4.37.0': optional: true + '@rollup/rollup-linux-x64-gnu@4.44.1': + optional: true + '@rollup/rollup-linux-x64-musl@4.37.0': optional: true + '@rollup/rollup-linux-x64-musl@4.44.1': + optional: true + '@rollup/rollup-win32-arm64-msvc@4.37.0': optional: true + '@rollup/rollup-win32-arm64-msvc@4.44.1': + optional: true + '@rollup/rollup-win32-ia32-msvc@4.37.0': optional: true + '@rollup/rollup-win32-ia32-msvc@4.44.1': + optional: true + '@rollup/rollup-win32-x64-msvc@4.37.0': optional: true + '@rollup/rollup-win32-x64-msvc@4.44.1': + optional: true + '@swc/core-darwin-arm64@1.12.9': optional: true @@ -5531,6 +5510,8 @@ snapshots: '@types/estree@1.0.7': {} + '@types/estree@1.0.8': {} + '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 @@ -5822,13 +5803,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': + '@vitest/mocker@3.2.4(vite@7.0.1(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.1(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) '@vitest/pretty-format@3.2.4': dependencies: @@ -6249,34 +6230,6 @@ snapshots: '@esbuild/win32-ia32': 0.25.2 '@esbuild/win32-x64': 0.25.2 - esbuild@0.25.3: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.3 - '@esbuild/android-arm': 0.25.3 - '@esbuild/android-arm64': 0.25.3 - '@esbuild/android-x64': 0.25.3 - '@esbuild/darwin-arm64': 0.25.3 - '@esbuild/darwin-x64': 0.25.3 - '@esbuild/freebsd-arm64': 0.25.3 - '@esbuild/freebsd-x64': 0.25.3 - '@esbuild/linux-arm': 0.25.3 - '@esbuild/linux-arm64': 0.25.3 - '@esbuild/linux-ia32': 0.25.3 - '@esbuild/linux-loong64': 0.25.3 - '@esbuild/linux-mips64el': 0.25.3 - '@esbuild/linux-ppc64': 0.25.3 - '@esbuild/linux-riscv64': 0.25.3 - '@esbuild/linux-s390x': 0.25.3 - '@esbuild/linux-x64': 0.25.3 - '@esbuild/netbsd-arm64': 0.25.3 - '@esbuild/netbsd-x64': 0.25.3 - '@esbuild/openbsd-arm64': 0.25.3 - '@esbuild/openbsd-x64': 0.25.3 - '@esbuild/sunos-x64': 0.25.3 - '@esbuild/win32-arm64': 0.25.3 - '@esbuild/win32-ia32': 0.25.3 - '@esbuild/win32-x64': 0.25.3 - esbuild@0.25.5: optionalDependencies: '@esbuild/aix-ppc64': 0.25.5 @@ -6518,6 +6471,10 @@ snapshots: optionalDependencies: picomatch: 4.0.2 + fdir@6.4.6(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + fetch-blob@3.2.0: dependencies: node-domexception: 1.0.0 @@ -6571,17 +6528,17 @@ snapshots: function-bind@1.1.2: {} - generouted@1.11.7(react-router-dom@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + generouted@1.11.7(react-router-dom@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): dependencies: react: 19.1.0 react-router-dom: 7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - generouted@1.20.0(react-router-dom@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + generouted@1.20.0(react-router-dom@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): dependencies: react: 19.1.0 react-router-dom: 7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) gensync@1.0.0-beta.2: {} @@ -7570,6 +7527,12 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + prelude-ls@1.2.1: {} prettier@3.1.0: {} @@ -7794,6 +7757,32 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.37.0 fsevents: 2.3.3 + rollup@4.44.1: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.44.1 + '@rollup/rollup-android-arm64': 4.44.1 + '@rollup/rollup-darwin-arm64': 4.44.1 + '@rollup/rollup-darwin-x64': 4.44.1 + '@rollup/rollup-freebsd-arm64': 4.44.1 + '@rollup/rollup-freebsd-x64': 4.44.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.44.1 + '@rollup/rollup-linux-arm-musleabihf': 4.44.1 + '@rollup/rollup-linux-arm64-gnu': 4.44.1 + '@rollup/rollup-linux-arm64-musl': 4.44.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.44.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.44.1 + '@rollup/rollup-linux-riscv64-gnu': 4.44.1 + '@rollup/rollup-linux-riscv64-musl': 4.44.1 + '@rollup/rollup-linux-s390x-gnu': 4.44.1 + '@rollup/rollup-linux-x64-gnu': 4.44.1 + '@rollup/rollup-linux-x64-musl': 4.44.1 + '@rollup/rollup-win32-arm64-msvc': 4.44.1 + '@rollup/rollup-win32-ia32-msvc': 4.44.1 + '@rollup/rollup-win32-x64-msvc': 4.44.1 + fsevents: 2.3.3 + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -7950,11 +7939,6 @@ snapshots: fdir: 6.4.3(picomatch@4.0.2) picomatch: 4.0.2 - tinyglobby@0.2.13: - dependencies: - fdir: 6.4.4(picomatch@4.0.2) - picomatch: 4.0.2 - tinyglobby@0.2.14: dependencies: fdir: 6.4.4(picomatch@4.0.2) @@ -8153,7 +8137,7 @@ snapshots: debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) transitivePeerDependencies: - '@types/node' - jiti @@ -8168,14 +8152,30 @@ snapshots: - tsx - yaml - vite@6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): + vite@7.0.1(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: - esbuild: 0.25.3 - fdir: 6.4.4(picomatch@4.0.2) + esbuild: 0.25.5 + fdir: 6.4.6(picomatch@4.0.2) picomatch: 4.0.2 - postcss: 8.5.3 - rollup: 4.37.0 - tinyglobby: 0.2.13 + postcss: 8.5.6 + rollup: 4.44.1 + tinyglobby: 0.2.14 + optionalDependencies: + '@types/node': 22.16.0 + fsevents: 2.3.3 + jiti: 2.4.2 + lightningcss: 1.30.1 + tsx: 4.20.3 + yaml: 2.7.1 + + vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): + dependencies: + esbuild: 0.25.5 + fdir: 6.4.6(picomatch@4.0.2) + picomatch: 4.0.2 + postcss: 8.5.6 + rollup: 4.44.1 + tinyglobby: 0.2.14 optionalDependencies: '@types/node': 22.16.0 fsevents: 2.3.3 @@ -8188,7 +8188,7 @@ snapshots: dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + '@vitest/mocker': 3.2.4(vite@7.0.1(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -8206,7 +8206,7 @@ snapshots: tinyglobby: 0.2.14 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 6.3.3(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.1(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vite-node: 3.2.4(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) why-is-node-running: 2.3.0 optionalDependencies: From 03183346630c73fa58ca4d403785a36913535bb6 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sun, 6 Jul 2025 10:08:26 +0900 Subject: [PATCH 053/313] feat: add `@vitejs/plugin-rsc` (#521) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 翠 --- .github/workflows/ci-rsc.yml | 61 + README.md | 5 + eslint.config.js | 7 +- package.json | 5 +- packages/plugin-rsc/.gitignore | 13 + packages/plugin-rsc/CHANGELOG.md | 172 + packages/plugin-rsc/README.md | 447 +++ packages/plugin-rsc/e2e/basic.test.ts | 931 ++++++ packages/plugin-rsc/e2e/fixture.ts | 191 ++ packages/plugin-rsc/e2e/helper.ts | 44 + packages/plugin-rsc/e2e/react-router.test.ts | 179 ++ packages/plugin-rsc/e2e/ssg.test.ts | 35 + packages/plugin-rsc/e2e/starter.test.ts | 94 + packages/plugin-rsc/e2e/tsconfig.json | 8 + packages/plugin-rsc/examples/basic/README.md | 9 + .../plugin-rsc/examples/basic/package.json | 32 + .../examples/basic/public/favicon.ico | Bin 0 -> 4286 bytes .../plugin-rsc/examples/basic/src/client.tsx | 3 + .../basic/src/routes/action-bind/client.tsx | 12 + .../basic/src/routes/action-bind/form.tsx | 16 + .../basic/src/routes/action-bind/server.tsx | 96 + .../routes/action-error/error-boundary.tsx | 40 + .../basic/src/routes/action-error/server.tsx | 19 + .../src/routes/action-from-client/action.tsx | 27 + .../src/routes/action-from-client/client.tsx | 25 + .../basic/src/routes/action-state/client.tsx | 19 + .../basic/src/routes/action-state/server.tsx | 21 + .../basic/src/routes/action/action.tsx | 16 + .../basic/src/routes/action/server.tsx | 15 + .../examples/basic/src/routes/client.tsx | 26 + .../routes/deps/client-in-server/client.tsx | 8 + .../routes/deps/client-in-server/server.tsx | 22 + .../routes/deps/server-in-client/client.tsx | 6 + .../routes/deps/server-in-server/server.tsx | 6 + .../src/routes/hmr-client-dep/client-dep.tsx | 3 + .../src/routes/hmr-client-dep/client.tsx | 16 + .../routes/module-invalidation/server-dep.tsx | 3 + .../src/routes/module-invalidation/server.tsx | 18 + .../basic/src/routes/payload/client.tsx | 29 + .../basic/src/routes/payload/server.tsx | 24 + .../examples/basic/src/routes/root.tsx | 97 + .../basic/src/routes/serialization/action.tsx | 6 + .../basic/src/routes/serialization/client.tsx | 18 + .../basic/src/routes/serialization/server.tsx | 27 + .../src/routes/style-client-no-ssr/client.css | 3 + .../src/routes/style-client-no-ssr/client.tsx | 7 + .../src/routes/style-client-no-ssr/server.tsx | 11 + .../src/routes/style-client/client-dep.css | 3 + .../src/routes/style-client/client-dep.tsx | 5 + .../basic/src/routes/style-client/client.css | 5 + .../src/routes/style-client/client.module.css | 3 + .../basic/src/routes/style-client/client.tsx | 17 + .../basic/src/routes/style-server/server.css | 3 + .../src/routes/style-server/server.module.css | 3 + .../basic/src/routes/style-server/server.tsx | 13 + .../basic/src/routes/tailwind/client.tsx | 5 + .../basic/src/routes/tailwind/server.tsx | 3 + .../src/routes/temporary-reference/action.tsx | 10 + .../src/routes/temporary-reference/client.tsx | 21 + .../basic/src/routes/use-cache/server.tsx | 105 + .../examples/basic/src/server.ssr.tsx | 1 + .../plugin-rsc/examples/basic/src/server.tsx | 31 + .../plugin-rsc/examples/basic/src/styles.css | 13 + .../examples/basic/src/use-cache-runtime.tsx | 94 + .../basic/test-dep/client-in-server/client.js | 8 + .../test-dep/client-in-server/package.json | 11 + .../basic/test-dep/client-in-server/server.js | 6 + .../test-dep/client-in-server2/client.js | 18 + .../test-dep/client-in-server2/package.json | 12 + .../test-dep/client-in-server2/server.js | 10 + .../basic/test-dep/server-in-client/client.js | 21 + .../test-dep/server-in-client/package.json | 11 + .../basic/test-dep/server-in-client/server.js | 12 + .../test-dep/server-in-server/package.json | 11 + .../basic/test-dep/server-in-server/server.js | 19 + .../plugin-rsc/examples/basic/tsconfig.json | 17 + .../plugin-rsc/examples/basic/vite.config.ts | 178 ++ .../plugin-rsc/examples/basic/wrangler.jsonc | 11 + .../plugin-rsc/examples/hono/package.json | 15 + .../examples/hono/public/favicon.ico | Bin 0 -> 4286 bytes .../plugin-rsc/examples/hono/src/client.tsx | 36 + .../plugin-rsc/examples/hono/src/server.tsx | 34 + .../plugin-rsc/examples/hono/tsconfig.json | 17 + .../plugin-rsc/examples/hono/vite.config.ts | 20 + .../examples/react-router/README.md | 31 + .../examples/react-router/app/paper.css | 150 + .../examples/react-router/app/root.tsx | 56 + .../examples/react-router/app/routes.ts | 6 + .../react-router/app/routes/about.tsx | 20 + .../react-router/app/routes/client.tsx | 22 + .../react-router/app/routes/home.actions.ts | 7 + .../react-router/app/routes/home.client.tsx | 12 + .../examples/react-router/app/routes/home.css | 3 + .../examples/react-router/app/routes/home.tsx | 56 + .../react-router/app/routes/root.client.tsx | 44 + .../app/routes/test-action-state/client.tsx | 19 + .../app/routes/test-action-state/server.tsx | 20 + .../examples/react-router/app/styles.css | 32 + .../examples/react-router/cf/entry.rsc.tsx | 13 + .../examples/react-router/cf/entry.ssr.tsx | 13 + .../examples/react-router/cf/vite.config.ts | 72 + .../react-router/cf/wrangler.rsc.jsonc | 8 + .../react-router/cf/wrangler.ssr.jsonc | 9 + .../examples/react-router/package.json | 34 + .../examples/react-router/public/favicon.ico | Bin 0 -> 15086 bytes .../react-router-vite/entry.browser.tsx | 38 + .../react-router-vite/entry.rsc.tsx | 31 + .../react-router-vite/entry.ssr.single.tsx | 8 + .../react-router-vite/entry.ssr.tsx | 27 + .../react-router/react-router-vite/plugin.ts | 123 + .../react-router-vite/server-hmr.tsx | 19 + .../react-router/react-router-vite/types.d.ts | 11 + .../react-router/react-router.config.ts | 5 + .../examples/react-router/tsconfig.json | 16 + .../examples/react-router/vite.config.ts | 33 + packages/plugin-rsc/examples/ssg/README.md | 15 + packages/plugin-rsc/examples/ssg/package.json | 24 + .../examples/ssg/public/favicon.ico | Bin 0 -> 4286 bytes .../plugin-rsc/examples/ssg/src/counter.tsx | 11 + .../ssg/src/framework/entry.browser.tsx | 97 + .../examples/ssg/src/framework/entry.rsc.tsx | 38 + .../examples/ssg/src/framework/entry.ssr.tsx | 29 + .../examples/ssg/src/framework/shared.tsx | 7 + .../examples/ssg/src/posts/counter.mdx | 7 + .../plugin-rsc/examples/ssg/src/posts/oxc.mdx | 3 + .../examples/ssg/src/posts/rolldown.mdx | 3 + .../examples/ssg/src/posts/vite.mdx | 3 + .../examples/ssg/src/posts/vitest.mdx | 3 + .../plugin-rsc/examples/ssg/src/react.d.ts | 3 + packages/plugin-rsc/examples/ssg/src/root.tsx | 70 + .../plugin-rsc/examples/ssg/tsconfig.json | 18 + .../plugin-rsc/examples/ssg/vite.config.ts | 96 + .../examples/starter-cf-single/README.md | 23 + .../examples/starter-cf-single/package.json | 24 + .../starter-cf-single/public/vite.svg | 1 + .../examples/starter-cf-single/src/action.tsx | 11 + .../starter-cf-single/src/assets/react.svg | 1 + .../examples/starter-cf-single/src/client.tsx | 13 + .../src/framework/entry.browser.tsx | 127 + .../src/framework/entry.rsc.tsx | 95 + .../src/framework/entry.ssr.tsx | 55 + .../src/framework/react.d.ts | 3 + .../examples/starter-cf-single/src/index.css | 112 + .../examples/starter-cf-single/src/root.tsx | 70 + .../examples/starter-cf-single/tsconfig.json | 18 + .../examples/starter-cf-single/vite.config.ts | 46 + .../examples/starter-cf-single/wrangler.jsonc | 8 + .../plugin-rsc/examples/starter/README.md | 36 + .../plugin-rsc/examples/starter/package.json | 23 + .../examples/starter/public/vite.svg | 1 + .../examples/starter/src/action.tsx | 11 + .../examples/starter/src/assets/react.svg | 1 + .../examples/starter/src/client.tsx | 13 + .../starter/src/framework/entry.browser.tsx | 127 + .../starter/src/framework/entry.rsc.tsx | 103 + .../starter/src/framework/entry.ssr.tsx | 53 + .../examples/starter/src/framework/react.d.ts | 3 + .../plugin-rsc/examples/starter/src/index.css | 112 + .../plugin-rsc/examples/starter/src/root.tsx | 70 + .../plugin-rsc/examples/starter/tsconfig.json | 18 + .../examples/starter/vite.config.ts | 73 + packages/plugin-rsc/package.json | 70 + packages/plugin-rsc/playwright.config.ts | 34 + packages/plugin-rsc/src/browser.ts | 23 + packages/plugin-rsc/src/core/browser.ts | 19 + packages/plugin-rsc/src/core/plugin.ts | 42 + packages/plugin-rsc/src/core/rsc.ts | 130 + packages/plugin-rsc/src/core/shared.ts | 25 + packages/plugin-rsc/src/core/ssr.ts | 27 + packages/plugin-rsc/src/extra/browser.tsx | 126 + packages/plugin-rsc/src/extra/rsc.tsx | 93 + packages/plugin-rsc/src/extra/ssr.tsx | 55 + packages/plugin-rsc/src/index.ts | 2 + packages/plugin-rsc/src/plugin.ts | 1832 +++++++++++ packages/plugin-rsc/src/react/browser.ts | 62 + packages/plugin-rsc/src/react/rsc.ts | 81 + packages/plugin-rsc/src/react/ssr.ts | 22 + .../plugin-rsc/src/rsc-html-stream/browser.ts | 4 + .../plugin-rsc/src/rsc-html-stream/ssr.ts | 7 + packages/plugin-rsc/src/rsc.tsx | 33 + packages/plugin-rsc/src/ssr.tsx | 65 + packages/plugin-rsc/src/transforms/estree.ts | 9 + .../plugin-rsc/src/transforms/hoist.test.ts | 372 +++ packages/plugin-rsc/src/transforms/hoist.ts | 142 + packages/plugin-rsc/src/transforms/index.ts | 5 + .../src/transforms/proxy-export.test.ts | 242 ++ .../plugin-rsc/src/transforms/proxy-export.ts | 169 + .../src/transforms/server-action.ts | 36 + .../plugin-rsc/src/transforms/test-utils.ts | 19 + packages/plugin-rsc/src/transforms/utils.ts | 82 + .../src/transforms/wrap-export.test.ts | 274 ++ .../plugin-rsc/src/transforms/wrap-export.ts | 245 ++ packages/plugin-rsc/src/types/index.ts | 27 + packages/plugin-rsc/src/types/react.ts | 3 + packages/plugin-rsc/src/types/virtual.d.ts | 22 + .../src/utils/encryption-runtime.ts | 48 + .../plugin-rsc/src/utils/encryption-utils.ts | 115 + packages/plugin-rsc/src/utils/rpc.ts | 76 + packages/plugin-rsc/src/vite-utils.ts | 127 + packages/plugin-rsc/tsconfig.base.json | 16 + packages/plugin-rsc/tsconfig.json | 13 + packages/plugin-rsc/tsdown.config.ts | 49 + packages/plugin-rsc/types/index.d.ts | 19 + packages/plugin-rsc/types/virtual.d.ts | 5 + packages/plugin-rsc/vitest.config.ts | 7 + pnpm-lock.yaml | 2759 ++++++++++++++++- pnpm-workspace.yaml | 1 + scripts/release.ts | 19 +- 208 files changed, 13893 insertions(+), 50 deletions(-) create mode 100644 .github/workflows/ci-rsc.yml create mode 100644 packages/plugin-rsc/.gitignore create mode 100644 packages/plugin-rsc/CHANGELOG.md create mode 100644 packages/plugin-rsc/README.md create mode 100644 packages/plugin-rsc/e2e/basic.test.ts create mode 100644 packages/plugin-rsc/e2e/fixture.ts create mode 100644 packages/plugin-rsc/e2e/helper.ts create mode 100644 packages/plugin-rsc/e2e/react-router.test.ts create mode 100644 packages/plugin-rsc/e2e/ssg.test.ts create mode 100644 packages/plugin-rsc/e2e/starter.test.ts create mode 100644 packages/plugin-rsc/e2e/tsconfig.json create mode 100644 packages/plugin-rsc/examples/basic/README.md create mode 100644 packages/plugin-rsc/examples/basic/package.json create mode 100644 packages/plugin-rsc/examples/basic/public/favicon.ico create mode 100644 packages/plugin-rsc/examples/basic/src/client.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/action-bind/client.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/action-bind/form.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/action-bind/server.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/action-error/error-boundary.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/action-error/server.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/action-from-client/action.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/action-from-client/client.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/action-state/client.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/action-state/server.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/action/action.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/action/server.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/client.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/deps/client-in-server/client.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/deps/client-in-server/server.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/deps/server-in-client/client.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/deps/server-in-server/server.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/hmr-client-dep/client-dep.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/hmr-client-dep/client.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/module-invalidation/server-dep.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/module-invalidation/server.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/payload/client.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/payload/server.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/root.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/serialization/action.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/serialization/client.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/serialization/server.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/style-client-no-ssr/client.css create mode 100644 packages/plugin-rsc/examples/basic/src/routes/style-client-no-ssr/client.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/style-client-no-ssr/server.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/style-client/client-dep.css create mode 100644 packages/plugin-rsc/examples/basic/src/routes/style-client/client-dep.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/style-client/client.css create mode 100644 packages/plugin-rsc/examples/basic/src/routes/style-client/client.module.css create mode 100644 packages/plugin-rsc/examples/basic/src/routes/style-client/client.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/style-server/server.css create mode 100644 packages/plugin-rsc/examples/basic/src/routes/style-server/server.module.css create mode 100644 packages/plugin-rsc/examples/basic/src/routes/style-server/server.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/tailwind/client.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/tailwind/server.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/temporary-reference/action.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/temporary-reference/client.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/use-cache/server.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/server.ssr.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/server.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/styles.css create mode 100644 packages/plugin-rsc/examples/basic/src/use-cache-runtime.tsx create mode 100644 packages/plugin-rsc/examples/basic/test-dep/client-in-server/client.js create mode 100644 packages/plugin-rsc/examples/basic/test-dep/client-in-server/package.json create mode 100644 packages/plugin-rsc/examples/basic/test-dep/client-in-server/server.js create mode 100644 packages/plugin-rsc/examples/basic/test-dep/client-in-server2/client.js create mode 100644 packages/plugin-rsc/examples/basic/test-dep/client-in-server2/package.json create mode 100644 packages/plugin-rsc/examples/basic/test-dep/client-in-server2/server.js create mode 100644 packages/plugin-rsc/examples/basic/test-dep/server-in-client/client.js create mode 100644 packages/plugin-rsc/examples/basic/test-dep/server-in-client/package.json create mode 100644 packages/plugin-rsc/examples/basic/test-dep/server-in-client/server.js create mode 100644 packages/plugin-rsc/examples/basic/test-dep/server-in-server/package.json create mode 100644 packages/plugin-rsc/examples/basic/test-dep/server-in-server/server.js create mode 100644 packages/plugin-rsc/examples/basic/tsconfig.json create mode 100644 packages/plugin-rsc/examples/basic/vite.config.ts create mode 100644 packages/plugin-rsc/examples/basic/wrangler.jsonc create mode 100644 packages/plugin-rsc/examples/hono/package.json create mode 100644 packages/plugin-rsc/examples/hono/public/favicon.ico create mode 100644 packages/plugin-rsc/examples/hono/src/client.tsx create mode 100644 packages/plugin-rsc/examples/hono/src/server.tsx create mode 100644 packages/plugin-rsc/examples/hono/tsconfig.json create mode 100644 packages/plugin-rsc/examples/hono/vite.config.ts create mode 100644 packages/plugin-rsc/examples/react-router/README.md create mode 100644 packages/plugin-rsc/examples/react-router/app/paper.css create mode 100644 packages/plugin-rsc/examples/react-router/app/root.tsx create mode 100644 packages/plugin-rsc/examples/react-router/app/routes.ts create mode 100644 packages/plugin-rsc/examples/react-router/app/routes/about.tsx create mode 100644 packages/plugin-rsc/examples/react-router/app/routes/client.tsx create mode 100644 packages/plugin-rsc/examples/react-router/app/routes/home.actions.ts create mode 100644 packages/plugin-rsc/examples/react-router/app/routes/home.client.tsx create mode 100644 packages/plugin-rsc/examples/react-router/app/routes/home.css create mode 100644 packages/plugin-rsc/examples/react-router/app/routes/home.tsx create mode 100644 packages/plugin-rsc/examples/react-router/app/routes/root.client.tsx create mode 100644 packages/plugin-rsc/examples/react-router/app/routes/test-action-state/client.tsx create mode 100644 packages/plugin-rsc/examples/react-router/app/routes/test-action-state/server.tsx create mode 100644 packages/plugin-rsc/examples/react-router/app/styles.css create mode 100644 packages/plugin-rsc/examples/react-router/cf/entry.rsc.tsx create mode 100644 packages/plugin-rsc/examples/react-router/cf/entry.ssr.tsx create mode 100644 packages/plugin-rsc/examples/react-router/cf/vite.config.ts create mode 100644 packages/plugin-rsc/examples/react-router/cf/wrangler.rsc.jsonc create mode 100644 packages/plugin-rsc/examples/react-router/cf/wrangler.ssr.jsonc create mode 100644 packages/plugin-rsc/examples/react-router/package.json create mode 100644 packages/plugin-rsc/examples/react-router/public/favicon.ico create mode 100644 packages/plugin-rsc/examples/react-router/react-router-vite/entry.browser.tsx create mode 100644 packages/plugin-rsc/examples/react-router/react-router-vite/entry.rsc.tsx create mode 100644 packages/plugin-rsc/examples/react-router/react-router-vite/entry.ssr.single.tsx create mode 100644 packages/plugin-rsc/examples/react-router/react-router-vite/entry.ssr.tsx create mode 100644 packages/plugin-rsc/examples/react-router/react-router-vite/plugin.ts create mode 100644 packages/plugin-rsc/examples/react-router/react-router-vite/server-hmr.tsx create mode 100644 packages/plugin-rsc/examples/react-router/react-router-vite/types.d.ts create mode 100644 packages/plugin-rsc/examples/react-router/react-router.config.ts create mode 100644 packages/plugin-rsc/examples/react-router/tsconfig.json create mode 100644 packages/plugin-rsc/examples/react-router/vite.config.ts create mode 100644 packages/plugin-rsc/examples/ssg/README.md create mode 100644 packages/plugin-rsc/examples/ssg/package.json create mode 100644 packages/plugin-rsc/examples/ssg/public/favicon.ico create mode 100644 packages/plugin-rsc/examples/ssg/src/counter.tsx create mode 100644 packages/plugin-rsc/examples/ssg/src/framework/entry.browser.tsx create mode 100644 packages/plugin-rsc/examples/ssg/src/framework/entry.rsc.tsx create mode 100644 packages/plugin-rsc/examples/ssg/src/framework/entry.ssr.tsx create mode 100644 packages/plugin-rsc/examples/ssg/src/framework/shared.tsx create mode 100644 packages/plugin-rsc/examples/ssg/src/posts/counter.mdx create mode 100644 packages/plugin-rsc/examples/ssg/src/posts/oxc.mdx create mode 100644 packages/plugin-rsc/examples/ssg/src/posts/rolldown.mdx create mode 100644 packages/plugin-rsc/examples/ssg/src/posts/vite.mdx create mode 100644 packages/plugin-rsc/examples/ssg/src/posts/vitest.mdx create mode 100644 packages/plugin-rsc/examples/ssg/src/react.d.ts create mode 100644 packages/plugin-rsc/examples/ssg/src/root.tsx create mode 100644 packages/plugin-rsc/examples/ssg/tsconfig.json create mode 100644 packages/plugin-rsc/examples/ssg/vite.config.ts create mode 100644 packages/plugin-rsc/examples/starter-cf-single/README.md create mode 100644 packages/plugin-rsc/examples/starter-cf-single/package.json create mode 100644 packages/plugin-rsc/examples/starter-cf-single/public/vite.svg create mode 100644 packages/plugin-rsc/examples/starter-cf-single/src/action.tsx create mode 100644 packages/plugin-rsc/examples/starter-cf-single/src/assets/react.svg create mode 100644 packages/plugin-rsc/examples/starter-cf-single/src/client.tsx create mode 100644 packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.browser.tsx create mode 100644 packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.rsc.tsx create mode 100644 packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.ssr.tsx create mode 100644 packages/plugin-rsc/examples/starter-cf-single/src/framework/react.d.ts create mode 100644 packages/plugin-rsc/examples/starter-cf-single/src/index.css create mode 100644 packages/plugin-rsc/examples/starter-cf-single/src/root.tsx create mode 100644 packages/plugin-rsc/examples/starter-cf-single/tsconfig.json create mode 100644 packages/plugin-rsc/examples/starter-cf-single/vite.config.ts create mode 100644 packages/plugin-rsc/examples/starter-cf-single/wrangler.jsonc create mode 100644 packages/plugin-rsc/examples/starter/README.md create mode 100644 packages/plugin-rsc/examples/starter/package.json create mode 100644 packages/plugin-rsc/examples/starter/public/vite.svg create mode 100644 packages/plugin-rsc/examples/starter/src/action.tsx create mode 100644 packages/plugin-rsc/examples/starter/src/assets/react.svg create mode 100644 packages/plugin-rsc/examples/starter/src/client.tsx create mode 100644 packages/plugin-rsc/examples/starter/src/framework/entry.browser.tsx create mode 100644 packages/plugin-rsc/examples/starter/src/framework/entry.rsc.tsx create mode 100644 packages/plugin-rsc/examples/starter/src/framework/entry.ssr.tsx create mode 100644 packages/plugin-rsc/examples/starter/src/framework/react.d.ts create mode 100644 packages/plugin-rsc/examples/starter/src/index.css create mode 100644 packages/plugin-rsc/examples/starter/src/root.tsx create mode 100644 packages/plugin-rsc/examples/starter/tsconfig.json create mode 100644 packages/plugin-rsc/examples/starter/vite.config.ts create mode 100644 packages/plugin-rsc/package.json create mode 100644 packages/plugin-rsc/playwright.config.ts create mode 100644 packages/plugin-rsc/src/browser.ts create mode 100644 packages/plugin-rsc/src/core/browser.ts create mode 100644 packages/plugin-rsc/src/core/plugin.ts create mode 100644 packages/plugin-rsc/src/core/rsc.ts create mode 100644 packages/plugin-rsc/src/core/shared.ts create mode 100644 packages/plugin-rsc/src/core/ssr.ts create mode 100644 packages/plugin-rsc/src/extra/browser.tsx create mode 100644 packages/plugin-rsc/src/extra/rsc.tsx create mode 100644 packages/plugin-rsc/src/extra/ssr.tsx create mode 100644 packages/plugin-rsc/src/index.ts create mode 100644 packages/plugin-rsc/src/plugin.ts create mode 100644 packages/plugin-rsc/src/react/browser.ts create mode 100644 packages/plugin-rsc/src/react/rsc.ts create mode 100644 packages/plugin-rsc/src/react/ssr.ts create mode 100644 packages/plugin-rsc/src/rsc-html-stream/browser.ts create mode 100644 packages/plugin-rsc/src/rsc-html-stream/ssr.ts create mode 100644 packages/plugin-rsc/src/rsc.tsx create mode 100644 packages/plugin-rsc/src/ssr.tsx create mode 100644 packages/plugin-rsc/src/transforms/estree.ts create mode 100644 packages/plugin-rsc/src/transforms/hoist.test.ts create mode 100644 packages/plugin-rsc/src/transforms/hoist.ts create mode 100644 packages/plugin-rsc/src/transforms/index.ts create mode 100644 packages/plugin-rsc/src/transforms/proxy-export.test.ts create mode 100644 packages/plugin-rsc/src/transforms/proxy-export.ts create mode 100644 packages/plugin-rsc/src/transforms/server-action.ts create mode 100644 packages/plugin-rsc/src/transforms/test-utils.ts create mode 100644 packages/plugin-rsc/src/transforms/utils.ts create mode 100644 packages/plugin-rsc/src/transforms/wrap-export.test.ts create mode 100644 packages/plugin-rsc/src/transforms/wrap-export.ts create mode 100644 packages/plugin-rsc/src/types/index.ts create mode 100644 packages/plugin-rsc/src/types/react.ts create mode 100644 packages/plugin-rsc/src/types/virtual.d.ts create mode 100644 packages/plugin-rsc/src/utils/encryption-runtime.ts create mode 100644 packages/plugin-rsc/src/utils/encryption-utils.ts create mode 100644 packages/plugin-rsc/src/utils/rpc.ts create mode 100644 packages/plugin-rsc/src/vite-utils.ts create mode 100644 packages/plugin-rsc/tsconfig.base.json create mode 100644 packages/plugin-rsc/tsconfig.json create mode 100644 packages/plugin-rsc/tsdown.config.ts create mode 100644 packages/plugin-rsc/types/index.d.ts create mode 100644 packages/plugin-rsc/types/virtual.d.ts create mode 100644 packages/plugin-rsc/vitest.config.ts diff --git a/.github/workflows/ci-rsc.yml b/.github/workflows/ci-rsc.yml new file mode 100644 index 000000000..46fc7ea53 --- /dev/null +++ b/.github/workflows/ci-rsc.yml @@ -0,0 +1,61 @@ +name: ci-rsc +on: + push: + branches: + - main + pull_request: + paths: + - "packages/plugin-rsc/**" + - "pnpm-lock.yaml" + - ".github/workflows/ci-rsc.yml" + +concurrency: + group: ${{ github.workflow }}-${{ github.event.number || github.sha }} + cancel-in-progress: true + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 22 + - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 + - run: pnpm i + - run: pnpm build + - run: pnpm -C packages/plugin-rsc tsc + - run: pnpm -C packages/plugin-rsc test + + test-e2e: + name: test-rsc (${{ matrix.os }} / ${{ matrix.browser }}) + runs-on: ${{ matrix.os }} + strategy: + # TODO: shard? + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + browser: [chromium] + include: + - os: ubuntu-latest + browser: firefox + - os: macos-latest + browser: webkit + fail-fast: false + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 22 + - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 + - run: pnpm i + - run: pnpm build + - run: pnpm -C packages/plugin-rsc exec playwright install ${{ matrix.browser }} + - run: pnpm -C packages/plugin-rsc test-e2e-ci --project=${{ matrix.browser }} + env: + TEST_ISOLATED: true + - uses: actions/upload-artifact@v4 + if: always() + with: + name: test-results-${{ matrix.os }}-${{ matrix.browser }} + path: | + packages/plugin-rsc/test-results diff --git a/README.md b/README.md index 96f4281a2..a2589146f 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,10 @@ See [`@vitejs/plugin-react` documentation](packages/plugin-react/README.md) and [`@vitejs/plugin-react-swc` documentation](packages/plugin-react-swc/README.md) +# Vite Plugin RSC + +See [`@vitejs/plugin-rsc` documentation](packages/plugin-rsc/README.md) + ## Packages | Package | Version (click for changelogs) | @@ -22,6 +26,7 @@ See [`@vitejs/plugin-react` documentation](packages/plugin-react/README.md) and | [@vitejs/plugin-react](packages/plugin-react) | [![plugin-react version](https://img.shields.io/npm/v/@vitejs/plugin-react.svg?label=%20)](packages/plugin-react/CHANGELOG.md) | | [@vitejs/plugin-react-oxc](packages/plugin-react-oxc) | [![plugin-react-oxc version](https://img.shields.io/npm/v/@vitejs/plugin-react-oxc.svg?label=%20)](packages/plugin-react-oxc/CHANGELOG.md) | | [@vitejs/plugin-react-swc](packages/plugin-react-swc) | [![plugin-react-swc version](https://img.shields.io/npm/v/@vitejs/plugin-react-swc.svg?label=%20)](packages/plugin-react-swc/CHANGELOG.md) | +| [@vitejs/plugin-rsc](packages/plugin-rsc) | [![plugin-rsc version](https://img.shields.io/npm/v/@vitejs/plugin-rsc.svg?label=%20)](packages/plugin-rsc/CHANGELOG.md) | ## License diff --git a/eslint.config.js b/eslint.config.js index ae5f6db82..1b2ff21dc 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -9,7 +9,12 @@ import globals from 'globals' export default tseslint.config( { - ignores: ['**/dist/**', '**/playground-temp/**', '**/temp/**'], + ignores: [ + '**/dist/**', + '**/playground-temp/**', + '**/temp/**', + 'packages/plugin-rsc/**', + ], }, eslint.configs.recommended, ...tseslint.configs.recommended, diff --git a/package.json b/package.json index 95e06ace2..e01ef4a33 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "@eslint/js": "^9.30.1", "@types/fs-extra": "^11.0.4", "@types/node": "^22.16.0", - "@vitejs/release-scripts": "^1.5.0", + "@vitejs/release-scripts": "^1.6.0", "eslint": "^9.30.1", "eslint-plugin-import-x": "^4.16.1", "eslint-plugin-n": "^17.20.0", @@ -72,6 +72,9 @@ ] }, "pnpm": { + "overrides": { + "@vitejs/plugin-rsc": "workspace:*" + }, "packageExtensions": { "generouted": { "peerDependencies": { diff --git a/packages/plugin-rsc/.gitignore b/packages/plugin-rsc/.gitignore new file mode 100644 index 000000000..416330c31 --- /dev/null +++ b/packages/plugin-rsc/.gitignore @@ -0,0 +1,13 @@ +node_modules +dist +.vercel +.vite-node +.wrangler +.netlify +*.log +*.tgz +test-results +*.tsbuildinfo +.debug +.vite-inspect +.claude diff --git a/packages/plugin-rsc/CHANGELOG.md b/packages/plugin-rsc/CHANGELOG.md new file mode 100644 index 000000000..88290a611 --- /dev/null +++ b/packages/plugin-rsc/CHANGELOG.md @@ -0,0 +1,172 @@ +# Changelog + +## v0.4.10 (2025-07-04) + +- feat: add `@vitejs/plugin-rsc` ([#521](https://github.com/vitejs/vite-plugin-react/pull/521)) + +--- + +Older versions were released as [`@hi-ogawa/vite-rsc`](https://github.com/hi-ogawa/vite-plugins/tree/main/packages/rsc). + +## v0.4.9 (2025-07-03) + +- feat: re-export plugin from base exports entry ([#1125](https://github.com/hi-ogawa/vite-plugins/pull/1125)) +- feat: re-export `transformHoistInlineDirective` ([#1122](https://github.com/hi-ogawa/vite-plugins/pull/1122)) +- fix: don't copy vite manifest from rsc to client ([#1118](https://github.com/hi-ogawa/vite-plugins/pull/1118)) + +## v0.4.8 (2025-07-01) + +- fix: copy all server assets to client by default and output `__vite_rsc_encryption_key` to fs directly ([#1102](https://github.com/hi-ogawa/vite-plugins/pull/1102)) +- fix: stable client build ([#1094](https://github.com/hi-ogawa/vite-plugins/pull/1094)) + +## v0.4.7 (2025-06-28) + +- feat: re-export `encodeReply` and `createTemporaryReferenceSet` from `react-server-dom/client` in `rsc` ([#1089](https://github.com/hi-ogawa/vite-plugins/pull/1089)) +- chore: add `use cache` example ([#1089](https://github.com/hi-ogawa/vite-plugins/pull/1089)) +- refactor: output code without indent ([#1087](https://github.com/hi-ogawa/vite-plugins/pull/1087)) + +## v0.4.6 (2025-06-27) + +- fix: correctly resolve server function created by 3rd party package during dev ([#1067](https://github.com/hi-ogawa/vite-plugins/pull/1067)) +- fix: correctly resolve client boundary created by server package during dev ([#1050](https://github.com/hi-ogawa/vite-plugins/pull/1050)) +- fix: copy only css assets from server build to client build by default ([#1072](https://github.com/hi-ogawa/vite-plugins/pull/1072)) +- fix: fix single quote string in `loadModule('ssr', 'index')` ([#1064](https://github.com/hi-ogawa/vite-plugins/pull/1064)) +- fix: stabilize server build by externalizing encryption key file ([#1069](https://github.com/hi-ogawa/vite-plugins/pull/1069)) +- fix: check build instead of `import.meta.env.DEV` ([#1083](https://github.com/hi-ogawa/vite-plugins/pull/1083)) +- perf: strip code during scan build ([#1066](https://github.com/hi-ogawa/vite-plugins/pull/1066)) +- feat: support preserving client reference original value ([#1078](https://github.com/hi-ogawa/vite-plugins/pull/1078)) +- feat: add `enableActionEncryption` option for debugging purpose ([#1084](https://github.com/hi-ogawa/vite-plugins/pull/1084)) +- feat: add `ignoredClientInServerPackageWarning` option ([#1065](https://github.com/hi-ogawa/vite-plugins/pull/1065)) + +## v0.4.5 (2025-06-22) + +- feat: rsc css transform for default export identifier ([#1046](https://github.com/hi-ogawa/vite-plugins/pull/1046)) +- feat: add `import.meta.viteRsc.loadBootstrapScriptContent` ([#1042](https://github.com/hi-ogawa/vite-plugins/pull/1042)) +- fix: only include jsx/tsx for rsc css export transform ([#1034](https://github.com/hi-ogawa/vite-plugins/pull/1034)) +- fix: ensure server-only and client-only not externalized ([#1045](https://github.com/hi-ogawa/vite-plugins/pull/1045)) +- fix: use static import for `loadCss` virtuals during build ([#1043](https://github.com/hi-ogawa/vite-plugins/pull/1043)) + +## v0.4.4 (2025-06-20) + +- feat: automatic rsc css export transform ([#1030](https://github.com/hi-ogawa/vite-plugins/pull/1030)) +- feat: add plugin to workaround cloudflare error ([#1014](https://github.com/hi-ogawa/vite-plugins/pull/1014)) +- feat: add load module dev proxy ([#1012](https://github.com/hi-ogawa/vite-plugins/pull/1012)) +- feat: add `serverHandler` option to allow using ssr environment as main handler ([#1008](https://github.com/hi-ogawa/vite-plugins/pull/1008)) +- feat: support `loadModule(environment, entry)` ([#1007](https://github.com/hi-ogawa/vite-plugins/pull/1007)) +- refactor: tweak renderHtml types and naming ([#1029](https://github.com/hi-ogawa/vite-plugins/pull/1029)) + +## v0.4.3 (2025-06-18) + +- feat: add rsc css export transform helper ([#1002](https://github.com/hi-ogawa/vite-plugins/pull/1002)) +- feat: support `loadCss(importer)` ([#1001](https://github.com/hi-ogawa/vite-plugins/pull/1001)) + +## v0.4.2 (2025-06-17) + +- fix: allow custom `outDir` + chore: cloudflare single worker setup ([#990](https://github.com/hi-ogawa/vite-plugins/pull/990)) +- fix: transform `__webpack_require__` global ([#980](https://github.com/hi-ogawa/vite-plugins/pull/980)) +- fix: inline and optimize react deps in ssr environment ([#982](https://github.com/hi-ogawa/vite-plugins/pull/982)) +- refactor: resolve self runtime import instead of `dedupe` ([#975](https://github.com/hi-ogawa/vite-plugins/pull/975)) +- refactor: emit assets manifest during `writeBundle` ([#972](https://github.com/hi-ogawa/vite-plugins/pull/972)) +- refactor: use `../` instead of `./../` path in output ([#963](https://github.com/hi-ogawa/vite-plugins/pull/963)) + +## v0.4.1 (2025-06-15) + +- fix: re-publish to fix vendored dependency + +## v0.4.0 (2025-06-15) + +- refactor!: rework multi environment API (bootstrap script) ([#958](https://github.com/hi-ogawa/vite-plugins/pull/958)) +- refactor!: rework multi environment API (ssr module) ([#957](https://github.com/hi-ogawa/vite-plugins/pull/957)) +- refactor!: simplify plugin options in favor of `rollupOptions.input` ([#956](https://github.com/hi-ogawa/vite-plugins/pull/956)) +- feat: expose `rsc-html-stream` utils ([#950](https://github.com/hi-ogawa/vite-plugins/pull/950)) +- fix: fix missing rsc css on build ([#949](https://github.com/hi-ogawa/vite-plugins/pull/949)) + +## v0.3.4 (2025-06-12) + +- fix: fix internal import to allow stable react vendor chunk ([#824](https://github.com/hi-ogawa/vite-plugins/pull/824)) +- fix: compat for old react plugin ([#939](https://github.com/hi-ogawa/vite-plugins/pull/939)) + +## v0.3.3 (2025-06-12) + +- feat: support rolldown-vite ([#931](https://github.com/hi-ogawa/vite-plugins/pull/931)) +- fix: allow usage without react plugin ([#934](https://github.com/hi-ogawa/vite-plugins/pull/934)) +- chore: docs ([#921](https://github.com/hi-ogawa/vite-plugins/pull/921)) + +## v0.3.2 (2025-06-10) + +- feat: auto initialize ([#925](https://github.com/hi-ogawa/vite-plugins/pull/925)) +- fix: emit assets manifest only in server build ([#929](https://github.com/hi-ogawa/vite-plugins/pull/929)) +- refactor: inline react-server-dom in ssr (2) ([#927](https://github.com/hi-ogawa/vite-plugins/pull/927)) +- chore: add `@cloudflare/vite-plugin` example ([#926](https://github.com/hi-ogawa/vite-plugins/pull/926)) + +## v0.3.1 (2025-06-06) + +- refactor: vendor react-server-dom ([#854](https://github.com/hi-ogawa/vite-plugins/pull/854)) + +## v0.3.0 (2025-06-05) + +- feat!: rsc css code split ([#876](https://github.com/hi-ogawa/vite-plugins/pull/876)) +- feat: encrypt closure bind values ([#897](https://github.com/hi-ogawa/vite-plugins/pull/897)) +- fix: client element as bound arg encryption ([#905](https://github.com/hi-ogawa/vite-plugins/pull/905)) +- fix: throw on client reference call on server ([#900](https://github.com/hi-ogawa/vite-plugins/pull/900)) + +## v0.2.4 (2025-05-26) + +- fix: fix stale css import in non-boundary client module ([#887](https://github.com/hi-ogawa/vite-plugins/pull/887)) +- fix: fix non-client-boundary client module hmr in tailwind example ([#886](https://github.com/hi-ogawa/vite-plugins/pull/886)) + +## v0.2.3 (2025-05-22) + +- fix: support Windows ([#884](https://github.com/hi-ogawa/vite-plugins/pull/884)) +- fix: remove stale ssr styles during dev ([#879](https://github.com/hi-ogawa/vite-plugins/pull/879)) +- fix: add `vary` header to avoid rsc payload on tab re-open ([#877](https://github.com/hi-ogawa/vite-plugins/pull/877)) + +## v0.2.2 (2025-05-18) + +- fix: emit server assets and copy to client ([#861](https://github.com/hi-ogawa/vite-plugins/pull/861)) +- fix: css modules hmr ([#860](https://github.com/hi-ogawa/vite-plugins/pull/860)) +- fix: fix `collectCssByUrl` error ([#856](https://github.com/hi-ogawa/vite-plugins/pull/856)) +- fix: show invalid transform error with code frame ([#871](https://github.com/hi-ogawa/vite-plugins/pull/871)) +- perf: preload client reference deps before non-cached import ([#850](https://github.com/hi-ogawa/vite-plugins/pull/850)) + +## v0.2.1 (2025-05-13) + +- feat: automatic client package heuristics ([#830](https://github.com/hi-ogawa/vite-plugins/pull/830)) +- fix: add browser entry to `optimizeDeps.entries` ([#846](https://github.com/hi-ogawa/vite-plugins/pull/846)) +- fix: resolve self package from project root ([#845](https://github.com/hi-ogawa/vite-plugins/pull/845)) +- refactor: use `rsc-html-stream` ([#843](https://github.com/hi-ogawa/vite-plugins/pull/843)) + +## v0.2.0 (2025-05-12) + +- feat: apply tree-shaking to all client references (2nd approach) ([#838](https://github.com/hi-ogawa/vite-plugins/pull/838)) +- feat: support nonce ([#813](https://github.com/hi-ogawa/vite-plugins/pull/813)) +- feat: support css in rsc environment ([#825](https://github.com/hi-ogawa/vite-plugins/pull/825)) +- feat: support css in client references ([#823](https://github.com/hi-ogawa/vite-plugins/pull/823)) +- fix: handle html escape and binary data in ssr rsc payload ([#839](https://github.com/hi-ogawa/vite-plugins/pull/839)) +- fix: wrap virtual to workaround module runner entry issues ([#832](https://github.com/hi-ogawa/vite-plugins/pull/832)) +- fix: scan build in two environments ([#820](https://github.com/hi-ogawa/vite-plugins/pull/820)) +- refactor: simplify client reference mapping ([#836](https://github.com/hi-ogawa/vite-plugins/pull/836)) +- refactor!: remove `entries.css` ([#831](https://github.com/hi-ogawa/vite-plugins/pull/831)) +- refactor: client reference ssr preinit/preload via proxy and remove `prepareDestination` ([#828](https://github.com/hi-ogawa/vite-plugins/pull/828)) +- refactor: tweak asset links api ([#826](https://github.com/hi-ogawa/vite-plugins/pull/826)) + +## v0.1.1 (2025-05-07) + +- fix: statically import client references virtual ([#815](https://github.com/hi-ogawa/vite-plugins/pull/815)) +- fix: fix base for findSourceMapURL ([#812](https://github.com/hi-ogawa/vite-plugins/pull/812)) +- fix: fix module runner line offset in `findSourceMapURL` ([#810](https://github.com/hi-ogawa/vite-plugins/pull/810)) + +## v0.1.0 (2025-05-01) + +- feat: support `findSourceMapURL` for `createServerReference` ([#796](https://github.com/hi-ogawa/vite-plugins/pull/796)) +- feat: support `findSourceMapURL` for component stack and replay logs ([#779](https://github.com/hi-ogawa/vite-plugins/pull/779)) +- feat: support temporary references ([#776](https://github.com/hi-ogawa/vite-plugins/pull/776)) +- feat: support custom base ([#775](https://github.com/hi-ogawa/vite-plugins/pull/775)) +- feat: refactor assets manifest and expose it to rsc build ([#767](https://github.com/hi-ogawa/vite-plugins/pull/767)) +- feat: ssr modulepreload only for build ([#763](https://github.com/hi-ogawa/vite-plugins/pull/763)) +- feat: tree shake unused reference exports ([#761](https://github.com/hi-ogawa/vite-plugins/pull/761)) +- feat: re-export react-server-dom ([#744](https://github.com/hi-ogawa/vite-plugins/pull/744)) +- feat: support css entry ([#737](https://github.com/hi-ogawa/vite-plugins/pull/737)) +- feat wrap client packages in virtual (support `clientPackages` options) ([#718](https://github.com/hi-ogawa/vite-plugins/pull/718)) +- feat: modulepreload client reference on ssr ([#703](https://github.com/hi-ogawa/vite-plugins/pull/703)) +- feat: create vite-rsc ([#692](https://github.com/hi-ogawa/vite-plugins/pull/692)) diff --git a/packages/plugin-rsc/README.md b/packages/plugin-rsc/README.md new file mode 100644 index 000000000..cca3a4d0c --- /dev/null +++ b/packages/plugin-rsc/README.md @@ -0,0 +1,447 @@ +# @vitejs/plugin-rsc + +This package provides [React Server Components](https://react.dev/reference/rsc/server-components) (RSC) support for Vite. + +## Features + +- **Framework-less RSC experience**: The plugin implements [RSC conventions](https://react.dev/reference/rsc/server-components) and provides low level `react-server-dom` runtime API without framework-specific abstractions. +- **CSS support**: CSS is automatically code-split both at client and server components and they are injected upon rendering. +- **HMR support**: Enables editing both client and server components without full page reloads. +- **Runtime agnostic**: Built on [Vite environment API](https://vite.dev/guide/api-environment.html) and works with other runtimes (e.g., [`@cloudflare/vite-plugin`](https://github.com/cloudflare/workers-sdk/tree/main/packages/vite-plugin-cloudflare)). + +## Getting Started + +You can start a project by copying an example locally by: + +```sh +npx degit vitejs/vite-plugin-react/packages/plugin-rsc/examples/starter my-app +``` + +## Examples + +- [`./examples/starter`](./examples/starter) + - This example provides an in-depth overview of API with inline comments to explain how they function within RSC-powered React application. +- [`./examples/react-router`](./examples/react-router) + - This demonstrates how to integrate [experimental React Router RSC API](https://remix.run/blog/rsc-preview) with this plugin. + It also includes `@cloudflare/vite-plugin` integration. +- [`./examples/basic`](./examples/basic) + - This is mainly used for e2e testing and include various advanced RSC usages (e.g. `"use cache"` example). + It also uses a high level `@vitejs/plugin-rsc/extra/{rsc,ssr,browser}` API for quick setup. +- [`./examples/ssg`](./examples/ssg) + - Static site generation (SSG) example with MDX and client components for interactivity. + +## Basic Concepts + +This example is a simplified version of [`./examples/starter`](./examples/starter). You can read [`./examples/starter/src/framework/entry.{rsc,ssr,browser}.tsx`](./examples/starter/src/framework) for more in-depth commentary, which includes server function handling and client-side RSC re-fetching/re-rendering. + +This is the diagram to show the basic flow of RSC rendering process. See also https://github.com/hi-ogawa/vite-plugins/discussions/606. + +```mermaid +graph TD + + subgraph "rsc environment" + A["React virtual dom tree"] --> |"[@vitejs/plugin-rsc/rsc]
renderToReadableStream"| B1["RSC Stream"]; + end + + B1 --> B2 + B1 --> B3 + + subgraph "ssr environment" + B2["RSC Stream"] --> |"[@vitejs/plugin-rsc/ssr]
createFromReadableStream"| C1["React virtual dom tree"]; + C1 --> |"[react-dom/server]
SSR"| E["HTML String/Stream"]; + end + + subgraph "client environment" + B3["RSC Stream"] --> |"[@vitejs/plugin-rsc/browser]
createFromReadableStream"| C2["React virtual dom tree"]; + C2 --> |"[react-dom/client]
CSR: mount, hydration"| D["DOM Elements"]; + end + + style A fill:#D6EAF8,stroke:#333,stroke-width:2px + style B1 fill:#FEF9E7,stroke:#333,stroke-width:2px + style B2 fill:#FEF9E7,stroke:#333,stroke-width:2px + style B3 fill:#FEF9E7,stroke:#333,stroke-width:2px + style C1 fill:#D6EAF8,stroke:#333,stroke-width:2px + style C2 fill:#D6EAF8,stroke:#333,stroke-width:2px + style D fill:#D5F5E3,stroke:#333,stroke-width:2px + style E fill:#FADBD8,stroke:#333,stroke-width:2px +``` + +- [`vite.config.ts`](./examples/starter/vite.config.ts) + +```js +import rsc from '@vitejs/plugin-rsc' +import { defineConfig } from 'vite' + +export default defineConfig({ + plugins: [ + // add plugin + rsc(), + ], + + // specify entry point for each environment. + environments: { + // `rsc` environment loads modules with `react-server` condition. + // this environment is responsible for: + // - RSC stream serialization (React VDOM -> RSC stream) + // - server functions handling + rsc: { + build: { + rollupOptions: { + input: { + index: './src/framework/entry.rsc.tsx', + }, + }, + }, + }, + + // `ssr` environment loads modules without `react-server` condition. + // this environment is responsible for: + // - RSC stream deserialization (RSC stream -> React VDOM) + // - traditional SSR (React VDOM -> HTML string/stream) + // (NOTE: as it can be seen in the above diagram. SSR is technically an optional mechanism.) + ssr: { + build: { + rollupOptions: { + input: { + index: './src/framework/entry.ssr.tsx', + }, + }, + }, + }, + + // client environment is used for hydration and client-side rendering + // this environment is responsible for: + // - RSC stream deserialization (RSC stream -> React VDOM) + // - traditional CSR (React VDOM -> Browser DOM tree mount/hydration) + // - refetch and re-render RSC + // - calling server functions + client: { + build: { + rollupOptions: { + input: { + index: './src/framework/entry.browser.tsx', + }, + }, + }, + }, + }, +}) +``` + +- [`entry.rsc.tsx`](./examples/starter/src/framework/entry.rsc.tsx) + +```tsx +import * as ReactServer from '@vitejs/plugin-rsc/rsc' // re-export of react-server-dom/server.edge + +// the plugin assumes `rsc` entry having default export of request handler +export default async function handler(request: Request): Promise { + // serialization React VDOM to RSC stream + const root = ( + + +

Test

+ + + ) + const rscStream = ReactServer.renderToReadableStream(root) + + // respond direct RSC stream request based on framework's convention + if (request.url.endsWith('.rsc')) { + return new Response(rscStream, { + headers: { + 'Content-type': 'text/x-component;charset=utf-8', + }, + }) + } + + // delegate to SSR environment for html rendering + // `loadModule` is a helper API provided by the plugin for multi environment interaction. + const ssrEntry = await import.meta.viteRsc.loadModule< + typeof import('./entry.ssr.tsx') + >('ssr', 'index') + const htmlStream = await ssrEntry.handleSsr(rscStream) + + // respond html + return new Response(htmlStream, { + headers: { + 'Content-type': 'text/html', + }, + }) +} +``` + +- [`entry.ssr.tsx`](./examples/starter/src/framework/entry.ssr.tsx) + +```tsx +import * as ReactClient from '@vitejs/plugin-rsc/ssr' // re-export of react-server-dom/client.edge +import * as ReactDOMServer from 'react-dom/server.edge' + +export async function handleSsr(rscStream: ReadableStream) { + // deserialize RSC stream back to React VDOM + const root = await ReactClient.createFromReadableStream(rscStream) + + // helper API to allow referencing browser entry content from SSR environment + const bootstrapScriptContent = + await import.meta.viteRsc.loadBootstrapScriptContent('index') + + // render html (traditional SSR) + const htmlStream = ReactDOMServer.renderToReadableStream(root, { + bootstrapScriptContent, + }) + + return htmlStream +} +``` + +- [`entry.browser.tsx`](./examples/starter/src/framework/entry.browser.tsx) + +```tsx +import * as ReactClient from "@vitejs/plugin-rsc/browser"; // re-export of react-server-dom/client.browser +import * as ReactDOMClient from "react-dom/client"; + +async function main() { + // fetch and deserialize RSC stream back to React VDOM + const rscResponse = await fetch(window.location.href + ".rsc); + const root = await ReactClient.createFromReadableStream(rscResponse.body); + + // hydration (traditional CSR) + ReactDOMClient.hydrateRoot(document, root); +} + +main(); +``` + +## `react-server-dom` API + +### `@vitejs/plugin-rsc/rsc` + +This module re-exports RSC runtime API provided by `react-server-dom/server.edge` + +- `renderToReadableStream`: RSC serialization (React VDOM -> RSC stream) +- `createFromReadableStream`: RSC deserialization (RSC stream -> React VDOM). This is also available on rsc environment itself. For example, it allows saving serailized RSC and deserializing it for later use. +- `decodeAction/decodeReply/loadServerAction`: server function related... + +### `@vitejs/plugin-rsc/ssr` + +This module re-exports RSC runtime API provided by `react-server-dom/client.edge` + +- `createFromReadableStream`: RSC deserialization (RSC stream -> React VDOM) + +### `@vitejs/plugin-rsc/browser` + +This module re-exports RSC runtime API provided by `react-server-dom/client.browser` + +- `createFromReadableStream`: RSC deserialization (RSC stream -> React VDOM) +- `createFromFetch`: a robust way of `createFromReadableStream((await fetch("...")).body)` +- `encodeReply/setServerCallback`: server function related... + +## Environment helper API + +The plugin provides an additional helper for multi environment interaction. + +### available on `rsc` or `ssr` environment + +#### `import.meta.viteRsc.loadModule` + +- Type: `(environmentName: "ssr" | "rsc", entryName: string) => Promise` + +This allows importing `ssr` environment module specified by `environments.ssr.build.rollupOptions.input[entryName]` inside `rsc` environment and vice versa. + +During development, by default, this API assumes both `rsc` and `ssr` environments execute under the main Vite process. When enabling `rsc({ loadModuleDevProxy: true })` plugin option, the loaded module is implemented as a proxy with `fetch`-based RPC to call in node environment on the main Vite process, which for example, allows `rsc` environment inside cloudflare workers to access `ssr` environment on the main Vite process. + +During production build, this API will be rewritten into a static import of the specified entry of other environment build and the modules are executed inside the same runtime. + +For example, + +```js +// ./entry.rsc.tsx +const ssrModule = await import.meta.viteRsc.loadModule("ssr", "index"); +ssrModule.renderHTML(...); + +// ./entry.ssr.tsx (with environments.ssr.build.rollupOptions.input.index = "./entry.ssr.tsx") +export function renderHTML(...) {} +``` + +### available on `rsc` environment + +#### `import.meta.viteRsc.loadCss` + +- Type: `(importer?: string) => React.ReactNode` + +This allows collecting css which is imported through a current server module and injecting them inside server components. + +```tsx +import './test.css' +import dep from './dep.tsx' + +export function ServerPage() { + // this will include css assets for "test.css" + // and any css transitively imported through "dep.tsx" + return ( + <> + {import.meta.viteRsc.loadCss()} + ... + + ) +} +``` + +Where specifying `loadCss()`, it will collect css through the server module resolved by ``. + +```tsx +// virtual:my-framework-helper +export function Assets() { + return <> + {import.meta.viteRsc.loadCss("/routes/home.tsx")} + {import.meta.viteRsc.loadCss("/routes/about.tsx")} + {...} + +} + +// user-app.tsx +import { Assets } from "virtual:my-framework-helper"; + +export function UserApp() { + return + + + + ... + +} +``` + +#### `?vite-rsc-css-export=` + +This special query convention provides automatic injection of `import.meta.viteRsc.loadCss`. + +For example, + +```tsx +// my-route.tsx +export function Page(props) { + return
...
+} + +// my-route.css?vite-rsc-css-export=Page +function Page(props) { + return
...
+} + +function __Page(props) { + return ( + <> + {import.meta.viteRsc.loadCss()} + + + ) +} + +export { __Page as Page } +``` + +### available on `ssr` environment + +#### `import.meta.viteRsc.loadBootstrapScriptContent("index")` + +This provides a raw js code to execute a browser entry file specified by `environments.client.build.rollupOptions.input.index`. This is intended to be used with React DOM SSR API, such as [`renderToReadableStream`](https://react.dev/reference/react-dom/server/renderToReadableStream) + +```js +import bootstrapScriptContent from 'virtual:vite-rsc/bootstrap-script-content' +import { renderToReadableStream } from 'react-dom/server.edge' + +const bootstrapScriptContent = + await import.meta.viteRsc.loadBootstrapScriptContent('index') +const htmlStream = await renderToReadableStream(reactNode, { + bootstrapScriptContent, +}) +``` + +### available on `client` environment + +#### `rsc:update` event + +This event is fired when server modules are updated, which can be used to trigger re-fetching and re-rendering of RSC components on browser. + +```js +import * as ReactClient from '@vitejs/plugin-rsc/browser' + +import.meta.hot.on('rsc:update', async () => { + // re-fetch RSC stream + const rscPayload = await ReactClient.createFromFetch( + fetch(window.location.href + '.rsc'), + ) + // re-render ... +}) +``` + +## Plugin API + +### `@vitejs/plugin-rsc` + +```js +import rsc from '@vitejs/plugin-rsc' +import { defineConfig } from 'vite' + +export default defineConfig({ + plugins: [ + rsc({ + // this is only a shorthand of specifying each rollup input via + // `environments[name].build.rollupOptions.input.index` + entries: { + rsc: '...', + ssr: '...', + client: '...', + }, + + // by default, the plugin sets up middleware + // using `default` export of `rsc` environment `index` entry. + // this behavior can be customized by `serverHandler` option. + serverHandler: false, + + // when `loadModuleDevProxy: true`, `import.meta.viteRsc.loadModule` is implemented + // through `fetch` based RPC, which allows, for example, rsc environment inside + // cloudflare workers to communicate with node ssr environment on main Vite process. + loadModuleDevProxy: true, + + // by default, `loadCss()` helper is injected based on certain heuristics. + // if it breaks, it can be opt-out or selectively applied based on files. + rscCssTransform: { filter: (id) => id.includes('/my-app/') }, + + // by default, the plugin uses a build-time generated encryption key for + // "use server" closure argument binding. + // This can be overwritten by configuring `defineEncryptionKey` option, + // for example, to obtain a key through environment variable during runtime. + // cf. https://nextjs.org/docs/app/guides/data-security#overwriting-encryption-keys-advanced + defineEncryptionKey: 'process.env.MY_ENCRYPTION_KEY', + }), + ], +}) +``` + +## Higher level API + +This is a wrapper of `react-server-dom` API and helper API to setup a minimal RSC app without writing own framework code like [`./examples/starter/src/framework`](./examples/starter/src/framework/). See [`./examples/basic`](./examples/basic/) for how this API is used. + +### `@vitejs/plugin-rsc/extra/rsc` + +- `renderRequest` + +### `@vitejs/plugin-rsc/extra/ssr` + +- `renderHtml` + +### `@vitejs/plugin-rsc/extra/browser` + +- `hydrate` + +## Credits + +This project builds on fundamental techniques and insights from pioneering Vite RSC implementations. +Additionally, Parcel and React Router's work on standardizing the RSC bundler/app responsibility has guided this plugin's API design: + +- [Waku](https://github.com/wakujs/waku) +- [@lazarv/react-server](https://github.com/lazarv/react-server) +- [@jacob-ebey/vite-react-server-dom](https://github.com/jacob-ebey/vite-plugins/tree/main/packages/vite-react-server-dom) +- [React Router RSC](https://remix.run/blog/rsc-preview) +- [Parcel RSC](https://parceljs.org/recipes/rsc) diff --git a/packages/plugin-rsc/e2e/basic.test.ts b/packages/plugin-rsc/e2e/basic.test.ts new file mode 100644 index 000000000..9b98ee9f8 --- /dev/null +++ b/packages/plugin-rsc/e2e/basic.test.ts @@ -0,0 +1,931 @@ +import { createHash } from 'node:crypto' +import { readFileSync } from 'node:fs' +import { type Page, expect, test } from '@playwright/test' +import { type Fixture, setupIsolatedFixture, useFixture } from './fixture' +import { expectNoReload, testNoJs, waitForHydration } from './helper' + +// TODO: parallel? + +test.describe('dev-default', () => { + const f = useFixture({ root: 'examples/basic', mode: 'dev' }) + defineTest(f) +}) + +test.describe('build-default', () => { + const f = useFixture({ root: 'examples/basic', mode: 'build' }) + defineTest(f) +}) + +test.describe('dev-base', () => { + const f = useFixture({ + root: 'examples/basic', + mode: 'dev', + cliOptions: { + env: { + TEST_BASE: 'true', + }, + }, + }) + defineTest(f) +}) + +test.describe('build-base', () => { + const f = useFixture({ + root: 'examples/basic', + mode: 'build', + cliOptions: { + env: { + TEST_BASE: 'true', + }, + }, + }) + defineTest(f) +}) + +test.describe(() => { + // disabled by default + if (!process.env.TEST_ISOLATED) return + + let tmpRoot = '/tmp/test-vite-rsc' + test.beforeAll(async () => { + await setupIsolatedFixture({ src: 'examples/basic', dest: tmpRoot }) + }) + + test.describe('dev-isolated', () => { + const f = useFixture({ root: tmpRoot, mode: 'dev' }) + defineTest(f) + }) + + test.describe('build-isolated', () => { + const f = useFixture({ root: tmpRoot, mode: 'build' }) + defineTest(f) + }) +}) + +function defineTest(f: Fixture) { + test('basic', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + }) + + test('client component', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await page.getByRole('button', { name: 'client-counter: 0' }).click() + await page.getByRole('button', { name: 'client-counter: 1' }).click() + }) + + test('server action @js', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await using _ = await expectNoReload(page) + await testAction(page) + }) + + testNoJs('server action @nojs', async ({ page }) => { + await page.goto(f.url()) + await testAction(page) + }) + + async function testAction(page: Page) { + await page.getByRole('button', { name: 'server-counter: 0' }).click() + await page.getByRole('button', { name: 'server-counter: 1' }).click() + await expect( + page.getByRole('button', { name: 'server-counter: 2' }), + ).toBeVisible() + await page.getByRole('button', { name: 'server-counter-reset' }).click() + await expect( + page.getByRole('button', { name: 'server-counter: 0' }), + ).toBeVisible() + } + + test('useActionState @js', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await using _ = await expectNoReload(page) + await testUseActionState(page) + }) + + testNoJs('useActionState @nojs', async ({ page }) => { + await page.goto(f.url()) + await testUseActionState(page) + }) + + async function testUseActionState(page: Page) { + await expect(page.getByTestId('use-action-state')).toContainText( + 'test-useActionState: 0', + ) + await page.getByTestId('use-action-state').click() + await expect(page.getByTestId('use-action-state')).toContainText( + 'test-useActionState: 1', + ) + await page.getByTestId('use-action-state').click() + await expect(page.getByTestId('use-action-state')).toContainText( + 'test-useActionState: 2', + ) + } + + test('useActionState with jsx @js', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await using _ = await expectNoReload(page) + await testUseActionStateJsx(page) + }) + + testNoJs('useActionState with jsx @nojs', async ({ page }) => { + await page.goto(f.url()) + await testUseActionStateJsx(page, { js: false }) + }) + + async function testUseActionStateJsx(page: Page, options?: { js?: boolean }) { + await page.getByTestId('use-action-state-jsx').getByRole('button').click() + await expect(page.getByTestId('use-action-state-jsx')).toContainText( + /\(ok\)/, + ) + + // 1st call "works" but it shows an error during reponse and it breaks 2nd call. + // Failed to serialize an action for progressive enhancement: + // Error: React Element cannot be passed to Server Functions from the Client without a temporary reference set. Pass a TemporaryReferenceSet to the options. + // [Promise, ] + if (!options?.js) return + + await page.getByTestId('use-action-state-jsx').getByRole('button').click() + await expect(page.getByTestId('use-action-state-jsx')).toContainText( + /\(ok\).*\(ok\)/, + ) + } + + test.describe(() => { + test.skip(f.mode !== 'build') + + testNoJs('module preload on ssr', async ({ page }) => { + await page.goto(f.url()) + const srcs = await page + .locator(`head >> link[rel="modulepreload"]`) + .evaluateAll((elements) => + elements.map((el) => el.getAttribute('href')), + ) + const manifest = JSON.parse( + readFileSync( + f.root + '/dist/ssr/__vite_rsc_assets_manifest.js', + 'utf-8', + ).slice('export default '.length), + ) + const hashString = (v: string) => + createHash('sha256').update(v).digest().toString('hex').slice(0, 12) + const deps = + manifest.clientReferenceDeps[hashString('src/routes/client.tsx')] + expect(srcs).toEqual(expect.arrayContaining(deps.js)) + }) + }) + + test.describe(() => { + test.skip(f.mode !== 'dev') + + test('server reference update @js', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await using _ = await expectNoReload(page) + await testServerActionUpdate(page, { js: true }) + }) + + test('server reference update @nojs', async ({ page }) => { + await page.goto(f.url()) + await testServerActionUpdate(page, { js: false }) + }) + }) + + async function testServerActionUpdate(page: Page, options: { js: boolean }) { + await page.getByRole('button', { name: 'server-counter: 0' }).click() + await expect( + page.getByRole('button', { name: 'server-counter: 1' }), + ).toBeVisible() + + // update server code + const editor = f.createEditor('src/routes/action/action.tsx') + editor.edit((s) => + s.replace('const TEST_UPDATE = 1\n', 'const TEST_UPDATE = 10\n'), + ) + await expect(async () => { + if (!options.js) await page.goto(f.url()) + await expect( + page.getByRole('button', { name: 'server-counter: 0' }), + ).toBeVisible({ timeout: 10 }) + }).toPass() + + await page.getByRole('button', { name: 'server-counter: 0' }).click() + await expect( + page.getByRole('button', { name: 'server-counter: 10' }), + ).toBeVisible() + + editor.reset() + await expect(async () => { + if (!options.js) await page.goto(f.url()) + await expect( + page.getByRole('button', { name: 'server-counter: 0' }), + ).toBeVisible({ timeout: 10 }) + }).toPass() + } + + test.describe(() => { + test.skip(f.mode !== 'dev') + + test('client hmr', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await page.getByRole('button', { name: 'client-counter: 0' }).click() + await expect( + page.getByRole('button', { name: 'client-counter: 1' }), + ).toBeVisible() + + const editor = f.createEditor('src/routes/client.tsx') + editor.edit((s) => s.replace('client-counter', 'client-[edit]-counter')) + await expect( + page.getByRole('button', { name: 'client-[edit]-counter: 1' }), + ).toBeVisible() + + // check next ssr is also updated + const res = await page.goto(f.url()) + expect(await res?.text()).toContain('client-[edit]-counter') + await waitForHydration(page) + editor.reset() + await page.getByRole('button', { name: 'client-counter: 0' }).click() + }) + + test('non-boundary client hmr', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + + const locator = page.getByTestId('test-hmr-client-dep') + await expect(locator).toHaveText('test-hmr-client-dep: 0[ok]') + await locator.locator('button').click() + await expect(locator).toHaveText('test-hmr-client-dep: 1[ok]') + + const editor = f.createEditor('src/routes/hmr-client-dep/client-dep.tsx') + editor.edit((s) => s.replace('[ok]', '[ok-edit]')) + await expect(locator).toHaveText('test-hmr-client-dep: 1[ok-edit]') + + // check next ssr is also updated + const res = await page.reload() + expect(await res?.text()).toContain('[ok-edit]') + + await waitForHydration(page) + editor.reset() + await expect(locator).toHaveText('test-hmr-client-dep: 0[ok]') + }) + + test('server hmr', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await using _ = await expectNoReload(page) + const editor = f.createEditor('src/routes/action/server.tsx') + editor.edit((s) => s.replace('server-counter', 'server-[edit]-counter')) + await expect( + page.getByRole('button', { name: 'server-[edit]-counter: 0' }), + ).toBeVisible() + editor.reset() + await expect( + page.getByRole('button', { name: 'server-counter: 0' }), + ).toBeVisible() + }) + + test('module invalidation', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await using _ = await expectNoReload(page) + + // change child module state + const locator = page.getByTestId('test-module-invalidation-server') + await expect(locator).toContainText('[dep: 0]') + locator.getByRole('button').click() + await expect(locator).toContainText('[dep: 1]') + + // change parent module + const editor = f.createEditor('src/routes/module-invalidation/server.tsx') + editor.edit((s) => s.replace('[dep:', '[dep-edit:')) + + // preserve child module state + await expect(locator).toContainText('[dep-edit: 1]') + editor.reset() + await expect(locator).toContainText('[dep: 1]') + }) + }) + + test('css @js', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await testCss(page) + }) + + testNoJs('css @nojs', async ({ page }) => { + await page.goto(f.url()) + await testCss(page) + }) + + async function testCss(page: Page, color = 'rgb(255, 165, 0)') { + await expect(page.locator('.test-style-client')).toHaveCSS('color', color) + await expect(page.locator('.test-style-server')).toHaveCSS('color', color) + } + + test.describe(() => { + test.skip(f.mode !== 'dev') + + test('css hmr client', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + + await using _ = await expectNoReload(page) + const editor = f.createEditor('src/routes/style-client/client.css') + editor.edit((s) => s.replaceAll('rgb(255, 165, 0)', 'rgb(0, 165, 255)')) + await expect(page.locator('.test-style-client')).toHaveCSS( + 'color', + 'rgb(0, 165, 255)', + ) + editor.edit((s) => + s.replaceAll( + `color: rgb(0, 165, 255);`, + `/* color: rgb(0, 165, 255); */`, + ), + ) + await expect(page.locator('.test-style-client')).toHaveCSS( + 'color', + 'rgb(0, 0, 0)', + ) + // wait longer for multiple edits + await page.waitForTimeout(100) + editor.reset() + await expect(page.locator('.test-style-client')).toHaveCSS( + 'color', + 'rgb(255, 165, 0)', + ) + }) + + test('adding/removing css client @js', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await using _ = await expectNoReload(page) + await testAddRemoveCssClient(page, { js: true }) + }) + + testNoJs('adding/removing css client @nojs', async ({ page }) => { + await page.goto(f.url()) + await testAddRemoveCssClient(page, { js: false }) + }) + + async function testAddRemoveCssClient( + page: Page, + options: { js: boolean }, + ) { + await expect(page.locator('.test-style-client-dep')).toHaveCSS( + 'color', + 'rgb(255, 165, 0)', + ) + + // remove css import + const editor = f.createEditor('src/routes/style-client/client-dep.tsx') + editor.edit((s) => + s.replaceAll( + `import './client-dep.css'`, + `/* import './client-dep.css' */`, + ), + ) + await page.waitForTimeout(100) + await expect(async () => { + if (!options.js) await page.reload() + await expect(page.locator('.test-style-client-dep')).toHaveCSS( + 'color', + 'rgb(0, 0, 0)', + { timeout: 10 }, + ) + }).toPass() + + // add back css import + editor.reset() + await page.waitForTimeout(100) + await expect(async () => { + if (!options.js) await page.reload() + await expect(page.locator('.test-style-client-dep')).toHaveCSS( + 'color', + 'rgb(255, 165, 0)', + { timeout: 10 }, + ) + }).toPass() + } + + test('css hmr server', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + + await using _ = await expectNoReload(page) + const editor = f.createEditor('src/routes/style-server/server.css') + editor.edit((s) => s.replaceAll('rgb(255, 165, 0)', 'rgb(0, 165, 255)')) + await expect(page.locator('.test-style-server')).toHaveCSS( + 'color', + 'rgb(0, 165, 255)', + ) + editor.edit((s) => + s.replaceAll( + `color: rgb(0, 165, 255);`, + `/* color: rgb(0, 165, 255); */`, + ), + ) + await expect(page.locator('.test-style-server')).toHaveCSS( + 'color', + 'rgb(0, 0, 0)', + ) + editor.reset() + await expect(page.locator('.test-style-server')).toHaveCSS( + 'color', + 'rgb(255, 165, 0)', + ) + }) + + // TODO: need a way to add/remove links on server hmr. for now, it requires a manually reload. + test.skip('adding/removing css server @js', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await using _ = await expectNoReload(page) + await testAddRemoveCssServer(page, { js: true }) + }) + + testNoJs('adding/removing css server @nojs', async ({ page }) => { + await page.goto(f.url()) + await testAddRemoveCssServer(page, { js: false }) + }) + + async function testAddRemoveCssServer( + page: Page, + options: { js: boolean }, + ) { + await expect(page.locator('.test-style-server')).toHaveCSS( + 'color', + 'rgb(255, 165, 0)', + ) + + // remove css import + const editor = f.createEditor('src/routes/style-server/server.tsx') + editor.edit((s) => + s.replaceAll(`import './server.css'`, `/* import './server.css' */`), + ) + await page.waitForTimeout(100) + await expect(async () => { + if (!options.js) await page.reload() + await expect(page.locator('.test-style-server')).toHaveCSS( + 'color', + 'rgb(0, 0, 0)', + { timeout: 10 }, + ) + }).toPass() + + // add back css import + editor.reset() + await page.waitForTimeout(100) + await expect(async () => { + if (!options.js) await page.reload() + await expect(page.locator('.test-style-server')).toHaveCSS( + 'color', + 'rgb(255, 165, 0)', + { timeout: 10 }, + ) + }).toPass() + } + }) + + test('css client no ssr', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await using _ = await expectNoReload(page) + await page.locator("a[href='?test-client-style-no-ssr']").click() + await expect(page.locator('.test-style-client-no-ssr')).toHaveCSS( + 'color', + 'rgb(0, 200, 100)', + ) + }) + + test('css module client @js', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await expect(page.getByTestId('css-module-client')).toHaveCSS( + 'color', + 'rgb(255, 165, 0)', + ) + + if (f.mode !== 'dev') return + + // test client css module HMR + await using _ = await expectNoReload(page) + const editor = f.createEditor('src/routes/style-client/client.module.css') + editor.edit((s) => s.replaceAll('rgb(255, 165, 0)', 'rgb(0, 165, 255)')) + await expect(page.getByTestId('css-module-client')).toHaveCSS( + 'color', + 'rgb(0, 165, 255)', + ) + editor.reset() + await expect(page.getByTestId('css-module-client')).toHaveCSS( + 'color', + 'rgb(255, 165, 0)', + ) + }) + + test('css module server @js', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await expect(page.getByTestId('css-module-server')).toHaveCSS( + 'color', + 'rgb(255, 165, 0)', + ) + + if (f.mode !== 'dev') return + + // test server css module HMR + await using _ = await expectNoReload(page) + const editor = f.createEditor('src/routes/style-server/server.module.css') + editor.edit((s) => s.replaceAll('rgb(255, 165, 0)', 'rgb(0, 165, 255)')) + await expect(page.getByTestId('css-module-server')).toHaveCSS( + 'color', + 'rgb(0, 165, 255)', + ) + editor.reset() + await expect(page.getByTestId('css-module-server')).toHaveCSS( + 'color', + 'rgb(255, 165, 0)', + ) + }) + + testNoJs('css module @nojs', async ({ page }) => { + await page.goto(f.url()) + await expect(page.getByTestId('css-module-client')).toHaveCSS( + 'color', + 'rgb(255, 165, 0)', + ) + await expect(page.getByTestId('css-module-server')).toHaveCSS( + 'color', + 'rgb(255, 165, 0)', + ) + }) + + test('tailwind @js', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await testTailwind(page) + }) + + testNoJs('tailwind @nojs', async ({ page }) => { + await page.goto(f.url()) + await testTailwind(page) + }) + + async function testTailwind(page: Page) { + await expect(page.locator('.test-tw-client')).toHaveCSS( + 'color', + // blue-500 + 'rgb(0, 0, 255)', + ) + await expect(page.locator('.test-tw-server')).toHaveCSS( + 'color', + // red-500 + 'rgb(255, 0, 0)', + ) + } + + test.describe(() => { + test.skip(f.mode !== 'dev') + + test('tailwind hmr', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await testTailwind(page) + + await using _ = await expectNoReload(page) + + const clientFile = f.createEditor('src/routes/tailwind/client.tsx') + clientFile.edit((s) => s.replaceAll('text-[#00f]', 'text-[#88f]')) + await expect(page.locator('.test-tw-client')).toHaveCSS( + 'color', + 'rgb(136, 136, 255)', + ) + clientFile.reset() + await expect(page.locator('.test-tw-client')).toHaveCSS( + 'color', + 'rgb(0, 0, 255)', + ) + + const serverFile = f.createEditor('src/routes/tailwind/server.tsx') + serverFile.edit((s) => s.replaceAll('text-[#f00]', 'text-[#f88]')) + await expect(page.locator('.test-tw-server')).toHaveCSS( + 'color', + 'rgb(255, 136, 136)', + ) + serverFile.reset() + await expect(page.locator('.test-tw-server')).toHaveCSS( + 'color', + 'rgb(255, 0, 0)', + ) + }) + + testNoJs('no FOUC after server restart @nojs', async ({ page }) => { + const res = await page.request.get(f.url('/__test_restart')) + expect(await res.text()).toBe('ok') + await new Promise((r) => setTimeout(r, 100)) + await page.goto(f.url('./')) + await testCss(page) + await testTailwind(page) + }) + }) + + test('temporary references @js', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await page.getByRole('button', { name: 'test-temporary-reference' }).click() + await expect(page.getByTestId('temporary-reference')).toContainText( + 'result: [server [client]]', + ) + }) + + test('server action error @js', async ({ page }) => { + // it doesn't seem possible to assert react error stack mapping on playwright. + // this need to be verified manually on browser devtools console. + await page.goto(f.url()) + await waitForHydration(page) + await page.getByRole('button', { name: 'test-server-action-error' }).click() + await expect(page.getByText('ErrorBoundary caught')).toBeVisible() + await page.getByRole('button', { name: 'reset-error' }).click() + await expect( + page.getByRole('button', { name: 'test-server-action-error' }), + ).toBeVisible() + }) + + test('hydrate while streaming @js', async ({ page }) => { + // client is interactive before suspense is resolved + await page.goto(f.url('./?test-suspense=1000'), { waitUntil: 'commit' }) + await waitForHydration(page) + await expect(page.getByTestId('suspense')).toContainText( + 'suspense-fallback', + ) + await expect(page.getByTestId('suspense')).toContainText( + 'suspense-resolved', + ) + }) + + test('ssr rsc payload encoding', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await expect(page.getByTestId('ssr-rsc-payload')).toHaveText( + 'test1: true, test2: true, test3: false, test4: true', + ) + + await page.goto(f.url('./?test-payload-binary')) + await waitForHydration(page) + await expect(page.getByTestId('ssr-rsc-payload')).toHaveText( + 'test1: true, test2: true, test3: true, test4: true', + ) + }) + + test('action bind simple @js', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await using _ = await expectNoReload(page) + await testActionBindSimple(page) + }) + + testNoJs('action bind simple @nojs', async ({ page }) => { + await page.goto(f.url()) + await testActionBindSimple(page) + }) + + async function testActionBindSimple(page: Page) { + await expect(page.getByTestId('test-server-action-bind-simple')).toHaveText( + '[?]', + ) + await page + .getByRole('button', { name: 'test-server-action-bind-simple' }) + .click() + await expect(page.getByTestId('test-server-action-bind-simple')).toHaveText( + 'true', + ) + await page + .getByRole('button', { name: 'test-server-action-bind-reset' }) + .click() + } + + test('action bind client @js', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await using _ = await expectNoReload(page) + await testActionBindClient(page) + }) + + // this doesn't work on Next either https://github.com/hi-ogawa/reproductions/tree/main/next-rsc-client-action-bind + testNoJs.skip('action bind client @nojs', async ({ page }) => { + await page.goto(f.url()) + await testActionBindClient(page) + }) + + async function testActionBindClient(page: Page) { + await expect(page.getByTestId('test-server-action-bind-client')).toHaveText( + '[?]', + ) + await page + .getByRole('button', { name: 'test-server-action-bind-client' }) + .click() + await expect(page.getByTestId('test-server-action-bind-client')).toHaveText( + 'true', + ) + await page + .getByRole('button', { name: 'test-server-action-bind-reset' }) + .click() + } + + test('action bind action @js', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await using _ = await expectNoReload(page) + await testActionBindAction(page) + }) + + testNoJs('action bind action @nojs', async ({ page }) => { + await page.goto(f.url()) + await testActionBindAction(page) + }) + + async function testActionBindAction(page: Page) { + await expect(page.getByTestId('test-server-action-bind-action')).toHaveText( + '[?]', + ) + await page + .getByRole('button', { name: 'test-server-action-bind-action' }) + .click() + await expect(page.getByTestId('test-server-action-bind-action')).toHaveText( + '[true,true]', + ) + await page + .getByRole('button', { name: 'test-server-action-bind-reset' }) + .click() + } + + test('test serialization @js', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await expect(page.getByTestId('serialization')).toHaveText('?') + await page.getByTestId('serialization').click() + await expect(page.getByTestId('serialization')).toHaveText('ok') + }) + + test('client-in-server package', async ({ page }) => { + await page.goto(f.url()) + await expect(page.getByTestId('client-in-server')).toHaveText( + '[test-client-in-server-dep: true]', + ) + await expect(page.getByTestId('provider-in-server')).toHaveText( + '[test-provider-in-server-dep: true]', + ) + }) + + test('server-in-server package', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await expect(page.getByTestId('server-in-server')).toHaveText( + 'server-in-server: 0', + ) + await page.getByTestId('server-in-server').click() + await expect(page.getByTestId('server-in-server')).toHaveText( + 'server-in-server: 1', + ) + await page.reload() + await expect(page.getByTestId('server-in-server')).toHaveText( + 'server-in-server: 1', + ) + }) + + test('server-in-client package', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await expect(page.getByTestId('server-in-client')).toHaveText( + 'server-in-client: ?', + ) + await page.getByTestId('server-in-client').click() + await expect(page.getByTestId('server-in-client')).toHaveText( + 'server-in-client: 1', + ) + await page.reload() + await waitForHydration(page) + await expect(page.getByTestId('server-in-client')).toHaveText( + 'server-in-client: ?', + ) + await page.getByTestId('server-in-client').click() + await expect(page.getByTestId('server-in-client')).toHaveText( + 'server-in-client: 2', + ) + }) + + test('use cache function', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + const locator = page.getByTestId('test-use-cache-fn') + await expect(locator.locator('span')).toHaveText( + '(actionCount: 0, cacheFnCount: 0)', + ) + await locator.getByRole('button').click() + await expect(locator.locator('span')).toHaveText( + '(actionCount: 1, cacheFnCount: 1)', + ) + await locator.getByRole('button').click() + await expect(locator.locator('span')).toHaveText( + '(actionCount: 2, cacheFnCount: 1)', + ) + await locator.getByRole('textbox').fill('test') + await locator.getByRole('button').click() + await expect(locator.locator('span')).toHaveText( + '(actionCount: 3, cacheFnCount: 2)', + ) + await locator.getByRole('textbox').fill('test') + await locator.getByRole('button').click() + await expect(locator.locator('span')).toHaveText( + '(actionCount: 4, cacheFnCount: 2)', + ) + + // revalidate cache + await locator.getByRole('textbox').fill('revalidate') + await locator.getByRole('button').click() + await expect(locator.locator('span')).toHaveText( + '(actionCount: 5, cacheFnCount: 3)', + ) + await locator.getByRole('textbox').fill('test') + await locator.getByRole('button').click() + await expect(locator.locator('span')).toHaveText( + '(actionCount: 6, cacheFnCount: 4)', + ) + }) + + test('use cache component', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + const static1 = await page + .getByTestId('test-use-cache-component-static') + .textContent() + const dynamic1 = await page + .getByTestId('test-use-cache-component-dynamic') + .textContent() + await page.waitForTimeout(100) + await page.reload() + const static2 = await page + .getByTestId('test-use-cache-component-static') + .textContent() + const dynamic2 = await page + .getByTestId('test-use-cache-component-dynamic') + .textContent() + expect({ static2, dynamic2 }).toEqual({ + static2: expect.stringMatching(static1!), + dynamic2: expect.not.stringMatching(dynamic1!), + }) + }) + + test('use cache closure', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + const locator = page.getByTestId('test-use-cache-closure') + await expect(locator.locator('span')).toHaveText( + '(actionCount: 0, innerFnCount: 0)', + ) + + // (x, y) + await locator.getByPlaceholder('outer').fill('x') + await locator.getByPlaceholder('inner').fill('y') + await locator.getByRole('button').click() + await expect(locator.locator('span')).toHaveText( + '(actionCount: 1, innerFnCount: 1)', + ) + + // (x, y) + await locator.getByPlaceholder('outer').fill('x') + await locator.getByPlaceholder('inner').fill('y') + await locator.getByRole('button').click() + await expect(locator.locator('span')).toHaveText( + '(actionCount: 2, innerFnCount: 1)', + ) + + // (xx, y) + await locator.getByPlaceholder('outer').fill('xx') + await locator.getByPlaceholder('inner').fill('y') + await locator.getByRole('button').click() + await expect(locator.locator('span')).toHaveText( + '(actionCount: 3, innerFnCount: 2)', + ) + + // (xx, y) + await locator.getByPlaceholder('outer').fill('xx') + await locator.getByPlaceholder('inner').fill('y') + await locator.getByRole('button').click() + await expect(locator.locator('span')).toHaveText( + '(actionCount: 4, innerFnCount: 2)', + ) + + // (xx, yy) + await locator.getByPlaceholder('outer').fill('xx') + await locator.getByPlaceholder('inner').fill('yy') + await locator.getByRole('button').click() + await expect(locator.locator('span')).toHaveText( + '(actionCount: 5, innerFnCount: 3)', + ) + }) +} diff --git a/packages/plugin-rsc/e2e/fixture.ts b/packages/plugin-rsc/e2e/fixture.ts new file mode 100644 index 000000000..7d99f99da --- /dev/null +++ b/packages/plugin-rsc/e2e/fixture.ts @@ -0,0 +1,191 @@ +import assert from 'node:assert' +import { type SpawnOptions, spawn } from 'node:child_process' +import fs from 'node:fs' +import path from 'node:path' +import { stripVTControlCharacters, styleText } from 'node:util' +import test from '@playwright/test' +import { x } from 'tinyexec' + +function runCli(options: { command: string; label?: string } & SpawnOptions) { + const [name, ...args] = options.command.split(' ') + const child = x(name!, args, { nodeOptions: options }).process! + const label = `[${options.label ?? 'cli'}]` + child.stdout!.on('data', (data) => { + if (process.env.TEST_DEBUG) { + console.log(styleText('cyan', label), data.toString()) + } + }) + child.stderr!.on('data', (data) => { + console.log(styleText('magenta', label), data.toString()) + }) + const done = new Promise((resolve) => { + child.on('exit', (code) => { + if (code !== 0 && code !== 143 && process.platform !== 'win32') { + console.log(styleText('magenta', `${label}`), `exit code ${code}`) + } + resolve() + }) + }) + + async function findPort(): Promise { + let stdout = '' + return new Promise((resolve) => { + child.stdout!.on('data', (data) => { + stdout += stripVTControlCharacters(String(data)) + const match = stdout.match(/http:\/\/localhost:(\d+)/) + if (match) { + resolve(Number(match[1])) + } + }) + }) + } + + function kill() { + if (process.platform === 'win32') { + spawn('taskkill', ['/pid', String(child.pid), '/t', '/f']) + } else { + child.kill() + } + } + + return { proc: child, done, findPort, kill } +} + +export type Fixture = ReturnType + +export function useFixture(options: { + root: string + mode?: 'dev' | 'build' + command?: string + buildCommand?: string + cliOptions?: SpawnOptions +}) { + let cleanup: (() => Promise) | undefined + let baseURL!: string + + const cwd = path.resolve(options.root) + + // TODO: `beforeAll` is called again on any test failure. + // https://playwright.dev/docs/test-retries + test.beforeAll(async () => { + if (options.mode === 'dev') { + const proc = runCli({ + command: options.command ?? `pnpm dev`, + label: `${options.root}:dev`, + cwd, + ...options.cliOptions, + }) + const port = await proc.findPort() + // TODO: use `test.extend` to set `baseURL`? + baseURL = `http://localhost:${port}` + cleanup = async () => { + proc.kill() + await proc.done + } + } + if (options.mode === 'build') { + if (!process.env.TEST_SKIP_BUILD) { + const proc = runCli({ + command: options.buildCommand ?? `pnpm build`, + label: `${options.root}:build`, + cwd, + ...options.cliOptions, + }) + await proc.done + assert(proc.proc.exitCode === 0) + } + const proc = runCli({ + command: options.command ?? `pnpm preview`, + label: `${options.root}:preview`, + cwd, + ...options.cliOptions, + }) + const port = await proc.findPort() + baseURL = `http://localhost:${port}` + cleanup = async () => { + proc.kill() + await proc.done + } + } + }) + + test.afterAll(async () => { + await cleanup?.() + }) + + const originalFiles: Record = {} + + function createEditor(filepath: string) { + filepath = path.resolve(cwd, filepath) + const init = fs.readFileSync(filepath, 'utf-8') + originalFiles[filepath] ??= init + let current = init + return { + edit(editFn: (data: string) => string): void { + const next = editFn(current) + assert(next !== current, 'Edit function did not change the content') + current = next + fs.writeFileSync(filepath, next) + }, + reset(): void { + fs.writeFileSync(filepath, originalFiles[filepath]!) + }, + } + } + + test.afterAll(async () => { + for (const [filepath, content] of Object.entries(originalFiles)) { + fs.writeFileSync(filepath, content) + } + }) + + return { + mode: options.mode, + root: cwd, + url: (url: string = './') => new URL(url, baseURL).href, + createEditor, + } +} + +export async function setupIsolatedFixture(options: { + src: string + dest: string +}) { + // copy fixture + fs.rmSync(options.dest, { recursive: true, force: true }) + fs.cpSync(options.src, options.dest, { recursive: true }) + fs.rmSync(path.join(options.dest, 'node_modules'), { + recursive: true, + force: true, + }) + + // setup package.json overrides + const packagesDir = path.join(import.meta.dirname, '..', '..') + const overrides = { + '@vitejs/plugin-rsc': `file:${path.join(packagesDir, 'plugin-rsc')}`, + } + editFileJson(path.join(options.dest, 'package.json'), (pkg: any) => { + Object.assign(((pkg.pnpm ??= {}).overrides ??= {}), overrides) + return pkg + }) + + // install + await x('pnpm', ['i'], { + throwOnError: true, + nodeOptions: { + cwd: options.dest, + stdio: process.env.TEST_DEBUG ? 'inherit' : undefined, + }, + }) +} + +function editFileJson(filepath: string, edit: (s: string) => string) { + fs.writeFileSync( + filepath, + JSON.stringify( + edit(JSON.parse(fs.readFileSync(filepath, 'utf-8'))), + null, + 2, + ), + ) +} diff --git a/packages/plugin-rsc/e2e/helper.ts b/packages/plugin-rsc/e2e/helper.ts new file mode 100644 index 000000000..fdb366064 --- /dev/null +++ b/packages/plugin-rsc/e2e/helper.ts @@ -0,0 +1,44 @@ +import test, { type Page, expect } from '@playwright/test' + +export const testNoJs = test.extend({ + javaScriptEnabled: ({}, use) => use(false), +}) + +export async function waitForHydration(page: Page) { + await expect + .poll( + () => + page + .locator('body') + .evaluate( + (el) => + el && + Object.keys(el).some((key) => key.startsWith('__reactFiber')), + ), + { timeout: 3000 }, + ) + .toBeTruthy() +} + +export async function expectNoReload(page: Page) { + // inject custom meta + await page.evaluate(() => { + const el = document.createElement('meta') + el.setAttribute('name', 'x-reload-check') + document.head.append(el) + }) + + // TODO: playwright prints a weird error on dispose error, + // so maybe we shouldn't abuse this pattern :( + return { + [Symbol.asyncDispose]: async () => { + // check if meta is preserved + await expect(page.locator(`meta[name="x-reload-check"]`)).toBeAttached({ + timeout: 1, + }) + await page.evaluate(() => { + document.querySelector(`meta[name="x-reload-check"]`)!.remove() + }) + }, + } +} diff --git a/packages/plugin-rsc/e2e/react-router.test.ts b/packages/plugin-rsc/e2e/react-router.test.ts new file mode 100644 index 000000000..9a8f6e785 --- /dev/null +++ b/packages/plugin-rsc/e2e/react-router.test.ts @@ -0,0 +1,179 @@ +import { createHash } from 'node:crypto' +import path from 'node:path' +import { expect, test } from '@playwright/test' +import { type Fixture, useFixture } from './fixture' +import { expectNoReload, testNoJs, waitForHydration } from './helper' + +test.describe('dev-default', () => { + const f = useFixture({ root: 'examples/react-router', mode: 'dev' }) + defineTest(f) +}) + +test.describe('build-default', () => { + const f = useFixture({ root: 'examples/react-router', mode: 'build' }) + defineTest(f) +}) + +test.describe('dev-cloudflare', () => { + const f = useFixture({ + root: 'examples/react-router', + mode: 'dev', + command: 'pnpm cf-dev', + }) + defineTest(f) +}) + +test.describe('build-cloudflare', () => { + const f = useFixture({ + root: 'examples/react-router', + mode: 'build', + buildCommand: 'pnpm cf-build', + command: 'pnpm cf-preview', + }) + defineTest(f) +}) + +function defineTest(f: Fixture) { + test('loader', async ({ page }) => { + await page.goto(f.url()) + await expect(page.getByText(`loaderData: {"name":"Unknown"}`)).toBeVisible() + }) + + test('client', async ({ page }) => { + await page.goto(f.url('./about')) + await waitForHydration(page) + await page.getByRole('button', { name: 'Client counter: 0' }).click() + await expect( + page.getByRole('button', { name: 'Client counter: 1' }), + ).toBeVisible() + }) + + test('navigation', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await using _ = await expectNoReload(page) + + await page.getByText('This is the home page.').click() + + await page.getByRole('link', { name: 'About' }).click() + await page.waitForURL(f.url('./about')) + await page.getByText('This is the about page.').click() + + await page.getByRole('link', { name: 'Home' }).click() + await page.waitForURL(f.url()) + await page.getByText('This is the home page.').click() + }) + + test.describe(() => { + test.skip(f.mode !== 'build') + + testNoJs('ssr modulepreload', async ({ page }) => { + await page.goto(f.url()) + const srcs = await page + .locator(`head >> link[rel="modulepreload"]`) + .evaluateAll((elements) => + elements.map((el) => el.getAttribute('href')), + ) + const { default: manifest } = await import( + path.resolve(f.root, 'dist/ssr/__vite_rsc_assets_manifest.js') + ) + const hashString = (v: string) => + createHash('sha256').update(v).digest().toString('hex').slice(0, 12) + const deps = + manifest.clientReferenceDeps[hashString('app/routes/home.client.tsx')] + expect(srcs).toEqual(expect.arrayContaining(deps.js)) + }) + }) + + test.describe(() => { + test.skip(f.mode !== 'dev') + + test('client hmr', async ({ page }) => { + await page.goto(f.url('./about')) + await waitForHydration(page) + await using _ = await expectNoReload(page) + + await page.getByRole('button', { name: 'Client counter: 0' }).click() + await expect( + page.getByRole('button', { name: 'Client counter: 1' }), + ).toBeVisible() + + const editor = f.createEditor('app/routes/about.tsx') + editor.edit((s) => s.replace('Client counter:', 'Client [edit] counter:')) + + await expect( + page.getByRole('button', { name: 'Client [edit] counter: 1' }), + ).toBeVisible() + }) + + test('server hmr', async ({ page }) => { + await page.goto(f.url('/')) + await waitForHydration(page) + await using _ = await expectNoReload(page) + + await page.getByText('This is the home page.').click() + + const editor = f.createEditor('app/routes/home.tsx') + editor.edit((s) => + s.replace('This is the home page.', 'This is the home [edit] page.'), + ) + + await page.getByText('This is the home [edit] page.').click() + }) + }) + + test('server css code split', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await expect(page.locator('.test-style-home')).toHaveCSS( + 'color', + 'rgb(250, 150, 0)', + ) + + // client side navigation to "/about" keeps "/" styles + await page.getByRole('link', { name: 'About' }).click() + await page.waitForURL(f.url('./about')) + await expect(page.locator('.test-style-home')).toHaveCSS( + 'color', + 'rgb(250, 150, 0)', + ) + + // SSR of "/about" doesn't include "/" styles + await page.goto(f.url('./about')) + await waitForHydration(page) + await expect(page.locator('.test-style-home')).not.toHaveCSS( + 'color', + 'rgb(250, 150, 0)', + ) + + // client side navigation to "/" loads "/" styles + await page.getByRole('link', { name: 'Home' }).click() + await page.waitForURL(f.url()) + await expect(page.locator('.test-style-home')).toHaveCSS( + 'color', + 'rgb(250, 150, 0)', + ) + }) + + test('vite-rsc-css-export', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await expect(page.getByTestId('root-style')).toHaveCSS( + 'color', + 'rgb(0, 0, 255)', + ) + }) + + test('useActionState', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await page.getByTestId('use-action-state-jsx').getByRole('button').click() + await expect(page.getByTestId('use-action-state-jsx')).toContainText( + /\(ok\)/, + ) + await page.getByTestId('use-action-state-jsx').getByRole('button').click() + await expect(page.getByTestId('use-action-state-jsx')).toContainText( + /\(ok\).*\(ok\)/, + ) + }) +} diff --git a/packages/plugin-rsc/e2e/ssg.test.ts b/packages/plugin-rsc/e2e/ssg.test.ts new file mode 100644 index 000000000..b1b7d4fb1 --- /dev/null +++ b/packages/plugin-rsc/e2e/ssg.test.ts @@ -0,0 +1,35 @@ +import { expect, test } from '@playwright/test' +import { type Fixture, useFixture } from './fixture' +import { waitForHydration } from './helper' + +test.describe('dev', () => { + const f = useFixture({ + root: 'examples/ssg', + mode: 'dev', + }) + defineTestSsg(f) +}) + +test.describe('build', () => { + const f = useFixture({ + root: 'examples/ssg', + mode: 'build', + }) + defineTestSsg(f) +}) + +function defineTestSsg(f: Fixture) { + test('basic', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + + if (f.mode === 'build') { + const t1 = await page.getByTestId('timestamp').textContent() + await page.waitForTimeout(100) + await page.reload() + await waitForHydration(page) + const t2 = await page.getByTestId('timestamp').textContent() + expect(t2).toBe(t1) + } + }) +} diff --git a/packages/plugin-rsc/e2e/starter.test.ts b/packages/plugin-rsc/e2e/starter.test.ts new file mode 100644 index 000000000..f0d6aa233 --- /dev/null +++ b/packages/plugin-rsc/e2e/starter.test.ts @@ -0,0 +1,94 @@ +import { expect, test } from '@playwright/test' +import { type Fixture, useFixture } from './fixture' +import { expectNoReload, testNoJs, waitForHydration } from './helper' + +test.describe('dev-default', () => { + const f = useFixture({ root: 'examples/starter', mode: 'dev' }) + defineTest(f) +}) + +test.describe('build-default', () => { + const f = useFixture({ root: 'examples/starter', mode: 'build' }) + defineTest(f) +}) + +test.describe('dev-cloudflare', () => { + const f = useFixture({ root: 'examples/starter-cf-single', mode: 'dev' }) + defineTest(f) +}) + +test.describe('build-cloudflare', () => { + const f = useFixture({ root: 'examples/starter-cf-single', mode: 'build' }) + defineTest(f) +}) + +function defineTest(f: Fixture) { + test('basic', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + }) + + test('client component', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await page.getByRole('button', { name: 'Client Counter: 0' }).click() + await expect( + page.getByRole('button', { name: 'Client Counter: 1' }), + ).toBeVisible() + }) + + test('server action @js', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await using _ = await expectNoReload(page) + await page.getByRole('button', { name: 'Server Counter: 0' }).click() + await expect( + page.getByRole('button', { name: 'Server Counter: 1' }), + ).toBeVisible() + }) + + testNoJs('server action @nojs', async ({ page }) => { + await page.goto(f.url()) + await page.getByRole('button', { name: 'Server Counter: 1' }).click() + await expect( + page.getByRole('button', { name: 'Server Counter: 2' }), + ).toBeVisible() + }) + + test('client hmr', async ({ page }) => { + test.skip(f.mode === 'build') + + await page.goto(f.url()) + await waitForHydration(page) + await page.getByRole('button', { name: 'Client Counter: 0' }).click() + await expect( + page.getByRole('button', { name: 'Client Counter: 1' }), + ).toBeVisible() + + const editor = f.createEditor(`src/client.tsx`) + editor.edit((s) => s.replace('Client Counter', 'Client [edit] Counter')) + await expect( + page.getByRole('button', { name: 'Client [edit] Counter: 1' }), + ).toBeVisible() + + // check next ssr is also updated + const res = await page.goto(f.url()) + expect(await res?.text()).toContain('Client [edit] Counter') + await waitForHydration(page) + editor.reset() + await page.getByRole('button', { name: 'Client Counter: 0' }).click() + }) + + test('image assets', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await expect(page.getByAltText('Vite logo')).not.toHaveJSProperty( + 'naturalWidth', + 0, + ) + await expect(page.getByAltText('React logo')).not.toHaveJSProperty( + 'naturalWidth', + 0, + ) + }) +} diff --git a/packages/plugin-rsc/e2e/tsconfig.json b/packages/plugin-rsc/e2e/tsconfig.json new file mode 100644 index 000000000..fbf20fed5 --- /dev/null +++ b/packages/plugin-rsc/e2e/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../tsconfig.base.json", + "compilerOptions": { + "noPropertyAccessFromIndexSignature": false, + "noImplicitReturns": false, + "checkJs": false + } +} diff --git a/packages/plugin-rsc/examples/basic/README.md b/packages/plugin-rsc/examples/basic/README.md new file mode 100644 index 000000000..f96083231 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/README.md @@ -0,0 +1,9 @@ +# rsc basic + +[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/hi-ogawa/vite-plugins/tree/main/packages/rsc/examples/basic) + +https://vite-rsc-basic.hiro18181.workers.dev + +```sh +npx giget gh:hi-ogawa/vite-plugins/packages/rsc/examples/basic my-app +``` diff --git a/packages/plugin-rsc/examples/basic/package.json b/packages/plugin-rsc/examples/basic/package.json new file mode 100644 index 000000000..7db4bcf45 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/package.json @@ -0,0 +1,32 @@ +{ + "name": "@vitejs/plugin-rsc-examples-basic", + "private": true, + "license": "MIT", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build --app", + "preview": "vite preview", + "cf-build": "CF_BUILD=1 pnpm build", + "cf-preview": "wrangler dev", + "cf-release": "wrangler deploy" + }, + "dependencies": { + "@vitejs/plugin-rsc": "latest", + "react": "latest", + "react-dom": "latest" + }, + "devDependencies": { + "@tailwindcss/vite": "^4.1.4", + "@types/react": "latest", + "@types/react-dom": "latest", + "@vitejs/plugin-react": "latest", + "@vitejs/test-dep-client-in-server": "file:./test-dep/client-in-server", + "@vitejs/test-dep-client-in-server2": "file:./test-dep/client-in-server2", + "@vitejs/test-dep-server-in-client": "file:./test-dep/server-in-client", + "@vitejs/test-dep-server-in-server": "file:./test-dep/server-in-server", + "tailwindcss": "^4.1.4", + "vite": "^7.0.2", + "vite-plugin-inspect": "^11.2.0" + } +} diff --git a/packages/plugin-rsc/examples/basic/public/favicon.ico b/packages/plugin-rsc/examples/basic/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..4aff076603f8f01fb3b7d8b5e38df77cc1efdd69 GIT binary patch literal 4286 zcmc(jeOQ&{9mmi9Y5(N4wKaEHmR6cpj%~hXo13+jb7bn2986aeCEr<~nOgZmpr$E` zf`o4brE!#(M1gZu646vl&`1pxMdw?|n=m>c+@F0P;mO>tlyk0ib#r~sdCqh0=e|Gp z@BY2q2Z!Sa`s>)yVZAyw{@CGY>u@-_O1kCfFIo4mH+}bzU$dHTI2`!e8Vx4;1ZKh^ zxKi)yD84^;xC-;kZcMM8u;Hxl=0 zrl(}R$D9P?+i+ezRaK9fv=7rK8`IkjJ!J!H{(<@MS+!R~`O?{>ox=Qa3-rsRXz(63 z2OX9VwCuy2qfp=E%do9`=6nq%BuDe7!jtKI6u6hZ(Up|S59#T~^xp-0ue5F~Z+jVS zZek&3&_;~E69#PN+~91w#MclR`Z@H~e)M!gs0@p&odJ103qFqWoKTLTHzP(@mAxzj(#e6hoycovD(ij}ivB{e#lRuP=cG5k$iaRo)dtx=G zM`-QOi1(><%*tYDlHdB;$}2ES5-{NlF)zQ3nIet}%c&n1$C&sM{8FwGkZ_g`sUGg! z3T>ptZyW}H`KjW=1Y|*Rxo@*u@#a=udF@Tij3~@2VhCG&oq>tVm=kl5JGI?yq#tEV znyQW7d%s`BnUNog;R7)^G4l^7CpCJ{a9%Yn`Yp_y*_byXFtZ{t(-+7Viy(9{&V^aD zbs2uD6#Nr0*t#nRmP8cFH{WZ{6~oeCpO^7?twAxY_*(EPM7@rgXEDr!SrITj3c}}8 zG&hNdv%li*9q=>hZiT(2yL8>xDH{YUC=?&&*$uMcN6JZFoDoXp$8j^YkZG`J2F#yD zT~q{{;?mf*+{vkkRh*ogz;80kX{(g`^V}P1yAv!$FZ=}TTrvCu$T`)zJ@6=Iw#2~7 zDX=^omRbzcx$<@-Pv=~u!|o<}xvTke<^?+EHqb5)?vdJw!(HPN#foO70Yl-k>>`W6NT?SD*WDt)y&<{AiS7Soz8*XK=RiTNo5?#oDKo7j&K*4as9+{Y$WBf^0FF zhPW_7T*Y)e2oGsl4=Su|Js>7q|IHS&LZG8pDR+w@NcCf#pc|Y1m!a|mxHMN<5IFx1 z8~>pkE;}TKz}oRNCQKpRUBH8fptD@dQYW$4vY4(*To35FgLJ?22Ui7UQ&lU1W0kw( zmA{hV*u|UYZ&JK{x(u?0L*`#0{co^Y3@IiNbQp!w zO~^{sk=0O8+H8YsRd7@>zI!0-dJcAo!6iFvdtPxEsQr*FoZ{FpidEZFc~oV-Tk*|$ zOiZ@A>Uvn-1u7yJ!OXeJSCKGPdDF_>p{gGfEe6%GMd?tjc)TqC{6ur_9{_tS27fUO z62lPLLUzcOFS-?jc~K-4?ZfXl{PI|{{KR7G7oUNpZc?8j4+TjnD#%v;R^FZ=O;ZgC zQw<4K9kXibq*$#{4s=ZGD|!+NHE*G=kG!mVVn4kRE-IKSOQ7zG>Zpg*Dnk!_{PpKI z^ege$`kG68tF7N7moCV*M=`td75h4u#3o_hR4h!F4JOMLvlF2rN59`Pl%M4|o^y(g zS}=__`)A81R}DOVN=Mz3(8JOR)qGpx>fXX;*=W+gG@L^E>t@wck4JM=z=<;1T8?r+ z2K1tp)T{Jd($Pnl{u<(`)5^1QqbH<3;_5B+5|_m^P~VlR|NpaD%c*J7PrU}Yugsfq z6=KWbwaXB4Ua4MOgTyu9jE-TFWv}nL35VJirUPP1tyZ~^yM!slY|{1Zn*D!(@9X_P D`VsgZ literal 0 HcmV?d00001 diff --git a/packages/plugin-rsc/examples/basic/src/client.tsx b/packages/plugin-rsc/examples/basic/src/client.tsx new file mode 100644 index 000000000..ebbd43356 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/client.tsx @@ -0,0 +1,3 @@ +import { hydrate } from '@vitejs/plugin-rsc/extra/browser' + +hydrate() diff --git a/packages/plugin-rsc/examples/basic/src/routes/action-bind/client.tsx b/packages/plugin-rsc/examples/basic/src/routes/action-bind/client.tsx new file mode 100644 index 000000000..2fe0c81c6 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/action-bind/client.tsx @@ -0,0 +1,12 @@ +'use client' + +import React from 'react' + +export function ActionBindClient() { + const hydrated = React.useSyncExternalStore( + React.useCallback(() => () => {}, []), + () => true, + () => false, + ) + return <>{String(hydrated)} +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/action-bind/form.tsx b/packages/plugin-rsc/examples/basic/src/routes/action-bind/form.tsx new file mode 100644 index 000000000..1b1675c3a --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/action-bind/form.tsx @@ -0,0 +1,16 @@ +'use client' + +import React from 'react' + +export function TestServerActionBindClientForm(props: { + action: () => Promise +}) { + const [result, formAction] = React.useActionState(props.action, '[?]') + + return ( +
+ + {result} +
+ ) +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/action-bind/server.tsx b/packages/plugin-rsc/examples/basic/src/routes/action-bind/server.tsx new file mode 100644 index 000000000..2de0f294a --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/action-bind/server.tsx @@ -0,0 +1,96 @@ +// based on test cases in +// https://github.com/vercel/next.js/blob/ad898de735c393d98960a68c8d9eaeee32206c57/test/e2e/app-dir/actions/app/encryption/page.js + +import { ActionBindClient } from './client' +import { TestServerActionBindClientForm } from './form' + +export function TestServerActionBindReset() { + return ( +
{ + 'use server' + testServerActionBindSimpleState = '[?]' + testServerActionBindActionState = '[?]' + testServerActionBindClientState++ + }} + > + +
+ ) +} + +let testServerActionBindSimpleState = '[?]' + +export function TestServerActionBindSimple() { + const outerValue = 'outerValue' + + return ( +
{ + 'use server' + const result = String(formData.get('value')) === outerValue + testServerActionBindSimpleState = JSON.stringify(result) + }} + > + + + + {testServerActionBindSimpleState} + +
+ ) +} + +let testServerActionBindClientState = 0 + +export function TestServerActionBindClient() { + // client element as server action bound argument + const client = + + const action = async () => { + 'use server' + return client + } + + return ( + + ) +} + +let testServerActionBindActionState = '[?]' + +export function TestServerActionBindAction() { + async function otherAction() { + 'use server' + return 'otherActionValue' + } + + function wrapAction(value: string, action: () => Promise) { + return async function (formValue: string) { + 'use server' + const actionValue = await action() + return [actionValue === 'otherActionValue', formValue === value] + } + } + + const action = wrapAction('ok', otherAction) + + return ( +
{ + 'use server' + const result = await action(String(formData.get('value'))) + testServerActionBindActionState = JSON.stringify(result) + }} + > + + + + {testServerActionBindActionState} + +
+ ) +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/action-error/error-boundary.tsx b/packages/plugin-rsc/examples/basic/src/routes/action-error/error-boundary.tsx new file mode 100644 index 000000000..9b06078c3 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/action-error/error-boundary.tsx @@ -0,0 +1,40 @@ +'use client' + +import * as React from 'react' + +interface Props { + children?: React.ReactNode +} + +interface State { + error: Error | null +} + +export default class ErrorBoundary extends React.Component { + constructor(props: Props) { + super(props) + this.state = { error: null } + } + + static getDerivedStateFromError(error: Error) { + return { error } + } + + render() { + if (this.state.error) { + return ( +
+ ErrorBoundary caught '{this.state.error.message}' + +
+ ) + } + return this.props.children + } +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/action-error/server.tsx b/packages/plugin-rsc/examples/basic/src/routes/action-error/server.tsx new file mode 100644 index 000000000..07647569b --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/action-error/server.tsx @@ -0,0 +1,19 @@ +import ErrorBoundary from './error-boundary' + +// see browser console to verify that server action error shows +// server component stack with correct source map + +export function TestServerActionError() { + return ( + +
{ + 'use server' + throw new Error('boom!') + }} + > + +
+
+ ) +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/action-from-client/action.tsx b/packages/plugin-rsc/examples/basic/src/routes/action-from-client/action.tsx new file mode 100644 index 000000000..d40fa1db3 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/action-from-client/action.tsx @@ -0,0 +1,27 @@ +'use server' + +// test findSourceMapURL for server action imported from client + +export async function notThis() { + // + // + // + notThis2() +} + +export async function testAction() { + console.log('[test-action-from-client]') +} + +function notThis2() { + // + // +} + +export async function testAction2() { + console.log('[test-action-from-client-2]') +} + +export async function testActionState(prev: number) { + return prev + 1 +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/action-from-client/client.tsx b/packages/plugin-rsc/examples/basic/src/routes/action-from-client/client.tsx new file mode 100644 index 000000000..8f0bc2368 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/action-from-client/client.tsx @@ -0,0 +1,25 @@ +'use client' + +import React from 'react' +import { testAction, testAction2, testActionState } from './action' + +export function TestActionFromClient() { + return ( +
+ + +
+ ) +} + +export function TestUseActionState() { + const [state, formAction] = React.useActionState(testActionState, 0) + + return ( +
+ +
+ ) +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/action-state/client.tsx b/packages/plugin-rsc/examples/basic/src/routes/action-state/client.tsx new file mode 100644 index 000000000..5c6b6e682 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/action-state/client.tsx @@ -0,0 +1,19 @@ +'use client' + +import React from 'react' + +export function TestActionStateClient(props: { + action: (prev: React.ReactNode) => Promise +}) { + const [state, formAction, isPending] = React.useActionState( + props.action, + null, + ) + + return ( +
+ + {isPending ? 'pending...' : state} +
+ ) +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/action-state/server.tsx b/packages/plugin-rsc/examples/basic/src/routes/action-state/server.tsx new file mode 100644 index 000000000..fb7288313 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/action-state/server.tsx @@ -0,0 +1,21 @@ +import { TestActionStateClient } from './client' + +// Test case based on +// https://github.com/remix-run/react-router/issues/13882 + +export function TestActionStateServer() { + const time = new Date().toISOString() // test closure encryption + return ( + { + 'use server' + await new Promise((resolve) => setTimeout(resolve, 500)) + return ( + + [(ok) (time: {time})] {prev} + + ) + }} + /> + ) +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/action/action.tsx b/packages/plugin-rsc/examples/basic/src/routes/action/action.tsx new file mode 100644 index 000000000..5c6769a34 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/action/action.tsx @@ -0,0 +1,16 @@ +'use server' + +let serverCounter = 0 + +export async function getServerCounter(): Promise { + return serverCounter +} + +export async function changeServerCounter(formData: FormData): Promise { + const TEST_UPDATE = 1 + serverCounter += Number(formData.get('change')) * TEST_UPDATE +} + +export async function resetServerCounter(): Promise { + serverCounter = 0 +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/action/server.tsx b/packages/plugin-rsc/examples/basic/src/routes/action/server.tsx new file mode 100644 index 000000000..6bb0646fc --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/action/server.tsx @@ -0,0 +1,15 @@ +import { + changeServerCounter, + getServerCounter, + resetServerCounter, +} from './action' + +export function ServerCounter() { + return ( +
+ + + +
+ ) +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/client.tsx b/packages/plugin-rsc/examples/basic/src/routes/client.tsx new file mode 100644 index 000000000..237ff422f --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/client.tsx @@ -0,0 +1,26 @@ +'use client' + +import React from 'react' + +export function ClientCounter(): React.ReactElement { + const [count, setCount] = React.useState(0) + return ( + + ) +} + +const noop = () => () => {} +export function Hydrated() { + const hydrated = React.useSyncExternalStore( + noop, + () => true, + () => false, + ) + return [hydrated: {hydrated ? 1 : 0}] +} + +export function UnusedClientReference() { + console.log('__unused_client_reference__') +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/deps/client-in-server/client.tsx b/packages/plugin-rsc/examples/basic/src/routes/deps/client-in-server/client.tsx new file mode 100644 index 000000000..2e7dc9f2b --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/deps/client-in-server/client.tsx @@ -0,0 +1,8 @@ +'use client' + +// @ts-ignore +import { TestContextValue } from '@vitejs/test-dep-client-in-server2/client' + +export function TestContextValueIndirect() { + return +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/deps/client-in-server/server.tsx b/packages/plugin-rsc/examples/basic/src/routes/deps/client-in-server/server.tsx new file mode 100644 index 000000000..cb029357e --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/deps/client-in-server/server.tsx @@ -0,0 +1,22 @@ +// @ts-ignore +import { TestClientInServerDep } from '@vitejs/test-dep-client-in-server/server' +// @ts-ignore +import { TestContextProviderInServer } from '@vitejs/test-dep-client-in-server2/server' +import { TestContextValueIndirect } from './client' + +export function TestClientInServer() { + return ( +
+
+ [test-client-in-server-dep: ] +
+
+ [test-provider-in-server-dep:{' '} + + + + ] +
+
+ ) +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/deps/server-in-client/client.tsx b/packages/plugin-rsc/examples/basic/src/routes/deps/server-in-client/client.tsx new file mode 100644 index 000000000..0a0c7335f --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/deps/server-in-client/client.tsx @@ -0,0 +1,6 @@ +// @ts-ignore +import { TestClient } from '@vitejs/test-dep-server-in-client/client' + +export function TestServerInClient() { + return +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/deps/server-in-server/server.tsx b/packages/plugin-rsc/examples/basic/src/routes/deps/server-in-server/server.tsx new file mode 100644 index 000000000..5d15747bb --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/deps/server-in-server/server.tsx @@ -0,0 +1,6 @@ +// @ts-ignore +import { ServerCounter } from '@vitejs/test-dep-server-in-server/server' + +export function TestServerInServer() { + return +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/hmr-client-dep/client-dep.tsx b/packages/plugin-rsc/examples/basic/src/routes/hmr-client-dep/client-dep.tsx new file mode 100644 index 000000000..adb03ac2b --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/hmr-client-dep/client-dep.tsx @@ -0,0 +1,3 @@ +export function ClientDep() { + return <>[ok] +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/hmr-client-dep/client.tsx b/packages/plugin-rsc/examples/basic/src/routes/hmr-client-dep/client.tsx new file mode 100644 index 000000000..1812aadb5 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/hmr-client-dep/client.tsx @@ -0,0 +1,16 @@ +'use client' + +import React from 'react' +import { ClientDep } from './client-dep' + +export function TestHmrClientDep() { + const [count, setCount] = React.useState(0) + return ( +
+ + +
+ ) +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/module-invalidation/server-dep.tsx b/packages/plugin-rsc/examples/basic/src/routes/module-invalidation/server-dep.tsx new file mode 100644 index 000000000..64c930ab6 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/module-invalidation/server-dep.tsx @@ -0,0 +1,3 @@ +export const dep = { + value: 0, +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/module-invalidation/server.tsx b/packages/plugin-rsc/examples/basic/src/routes/module-invalidation/server.tsx new file mode 100644 index 000000000..90062572b --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/module-invalidation/server.tsx @@ -0,0 +1,18 @@ +import { dep } from './server-dep' + +export function TestModuleInvalidationServer() { + return ( +
+
{ + 'use server' + dep.value ^= 1 + }} + > + + [dep: {dep.value}] +
+
+ ) +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/payload/client.tsx b/packages/plugin-rsc/examples/basic/src/routes/payload/client.tsx new file mode 100644 index 000000000..788de21f6 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/payload/client.tsx @@ -0,0 +1,29 @@ +'use client' + +export function TestPayloadClient(props: { + test1?: any + test2?: any + test3?: any + test4?: any +}) { + const results = { + test1: props.test1 === '🙂', + test2: props.test2 === "", + test3: + props.test3 instanceof Uint8Array && + isSameArray(props.test3, new TextEncoder().encode('🔥').reverse()), + test4: props.test4 === '&><\u2028\u2029', + } + const formatted = Object.entries(results) + .map(([k, v]) => `${k}: ${String(v)}`) + .join(', ') + return <>{formatted} +} + +function isSameArray(x: Uint8Array, y: Uint8Array) { + if (x.length !== y.length) return false + for (let i = 0; i < x.length; i++) { + if (x[i] !== y[i]) return false + } + return true +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/payload/server.tsx b/packages/plugin-rsc/examples/basic/src/routes/payload/server.tsx new file mode 100644 index 000000000..253a6b719 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/payload/server.tsx @@ -0,0 +1,24 @@ +import { TestPayloadClient } from './client' + +export function TestPayloadServer(props: { url: URL }) { + return ( +
+ test-payload (binary):{' '} + + throw new Error('boom')"} + test3={ + // disabled by default so that it won't break Stackblitz demo + // https://github.com/stackblitz/webcontainer-core/issues/1861 + props.url.searchParams.has('test-payload-binary') + ? // reverse to have non-utf8 binary data + new TextEncoder().encode('🔥').reverse() + : null + } + test4={'&><\u2028\u2029'} + /> + +
+ ) +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/root.tsx b/packages/plugin-rsc/examples/basic/src/routes/root.tsx new file mode 100644 index 000000000..352d97ad1 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/root.tsx @@ -0,0 +1,97 @@ +import React from 'react' +import { + TestServerActionBindAction, + TestServerActionBindClient, + TestServerActionBindReset, + TestServerActionBindSimple, +} from './action-bind/server' +import { TestServerActionError } from './action-error/server' +import { + TestActionFromClient, + TestUseActionState, +} from './action-from-client/client' +import { TestActionStateServer } from './action-state/server' +import { ServerCounter } from './action/server' +import { ClientCounter, Hydrated } from './client' +import { TestClientInServer } from './deps/client-in-server/server' +import { TestServerInClient } from './deps/server-in-client/client' +import { TestServerInServer } from './deps/server-in-server/server' +import { TestHmrClientDep } from './hmr-client-dep/client' +import { TestModuleInvalidationServer } from './module-invalidation/server' +import { TestPayloadServer } from './payload/server' +import { TestSerializationServer } from './serialization/server' +import { TestCssClientNoSsr } from './style-client-no-ssr/server' +import { TestStyleClient } from './style-client/client' +import { TestStyleServer } from './style-server/server' +import { TestTailwindClient } from './tailwind/client' +import { TestTailwindServer } from './tailwind/server' +import { TestTemporaryReference } from './temporary-reference/client' +import { TestUseCache } from './use-cache/server' + +export function Root(props: { url: URL }) { + return ( + + + vite-rsc + {import.meta.viteRsc.loadCss('/src/routes/root.tsx')} + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} + +function TestReplayConsoleLogs(props: { url: URL }) { + if (props.url.search.includes('test-replay-console-logs')) { + console.log('[test-replay-console-logs]') + } + return test-replayConsoleLogs +} + +function TestSuspense(props: { url: URL }) { + if (props.url.search.includes('test-suspense')) { + const ms = Number(props.url.searchParams.get('test-suspense')) || 1000 + async function Inner() { + await new Promise((resolve) => setTimeout(resolve, ms)) + return
suspense-resolved
+ } + return ( +
+ suspense-fallback
}> + + +

+ ) + } + return test-suspense +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/serialization/action.tsx b/packages/plugin-rsc/examples/basic/src/routes/serialization/action.tsx new file mode 100644 index 000000000..69e96d666 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/serialization/action.tsx @@ -0,0 +1,6 @@ +'use server' + +export async function testSerializationAction() { + console.log('[test-serialization-action]') + return 'ok' +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/serialization/client.tsx b/packages/plugin-rsc/examples/basic/src/routes/serialization/client.tsx new file mode 100644 index 000000000..7815f8072 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/serialization/client.tsx @@ -0,0 +1,18 @@ +'use client' + +import React from 'react' + +export function TestSerializationClient(props: { action: () => Promise }) { + const [state, setState] = React.useState('?') + return ( + + ) +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/serialization/server.tsx b/packages/plugin-rsc/examples/basic/src/routes/serialization/server.tsx new file mode 100644 index 000000000..7930bf7ad --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/serialization/server.tsx @@ -0,0 +1,27 @@ +import { + createFromReadableStream, + renderToReadableStream, +} from '@vitejs/plugin-rsc/rsc' +import { testSerializationAction } from './action' +import { TestSerializationClient } from './client' + +export function TestSerializationServer() { + const original = + let serialized = renderToReadableStream(original) + // debug serialization + if (0) { + serialized = serialized + .pipeThrough(new TextDecoderStream()) + .pipeThrough( + new TransformStream({ + transform(chunk, controller) { + console.log('[test-serialization]', { chunk }) + controller.enqueue(chunk) + }, + }), + ) + .pipeThrough(new TextEncoderStream()) + } + const deserialized = createFromReadableStream(serialized) + return
test-serialization:{deserialized}
+} diff --git a/packages/plugin-rsc/examples/basic/src/routes/style-client-no-ssr/client.css b/packages/plugin-rsc/examples/basic/src/routes/style-client-no-ssr/client.css new file mode 100644 index 000000000..96c363257 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/style-client-no-ssr/client.css @@ -0,0 +1,3 @@ +.test-style-client-no-ssr { + color: rgb(0, 200, 100); +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/style-client-no-ssr/client.tsx b/packages/plugin-rsc/examples/basic/src/routes/style-client-no-ssr/client.tsx new file mode 100644 index 000000000..85754d472 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/style-client-no-ssr/client.tsx @@ -0,0 +1,7 @@ +'use client' + +import './client.css' + +export function TestClient() { + return [test] +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/style-client-no-ssr/server.tsx b/packages/plugin-rsc/examples/basic/src/routes/style-client-no-ssr/server.tsx new file mode 100644 index 000000000..8e0f7304f --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/style-client-no-ssr/server.tsx @@ -0,0 +1,11 @@ +import { TestClient } from './client' + +export function TestCssClientNoSsr(props: { url: URL }) { + return ( +
+ test-client-style-no-ssr{' '} + show hide{' '} + {props.url.searchParams.has('test-client-style-no-ssr') && } +
+ ) +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/style-client/client-dep.css b/packages/plugin-rsc/examples/basic/src/routes/style-client/client-dep.css new file mode 100644 index 000000000..a58f3cfcf --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/style-client/client-dep.css @@ -0,0 +1,3 @@ +.test-style-client-dep { + color: rgb(255, 165, 0); +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/style-client/client-dep.tsx b/packages/plugin-rsc/examples/basic/src/routes/style-client/client-dep.tsx new file mode 100644 index 000000000..8dcd56b14 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/style-client/client-dep.tsx @@ -0,0 +1,5 @@ +import './client-dep.css' + +export function TestClientDep() { + return
test-style-client-dep
+} diff --git a/packages/plugin-rsc/examples/basic/src/routes/style-client/client.css b/packages/plugin-rsc/examples/basic/src/routes/style-client/client.css new file mode 100644 index 000000000..bd95cc0fd --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/style-client/client.css @@ -0,0 +1,5 @@ +/* css imported by client references */ + +.test-style-client { + color: rgb(255, 165, 0); +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/style-client/client.module.css b/packages/plugin-rsc/examples/basic/src/routes/style-client/client.module.css new file mode 100644 index 000000000..7b8fea47b --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/style-client/client.module.css @@ -0,0 +1,3 @@ +.client { + color: rgb(255, 165, 0); +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/style-client/client.tsx b/packages/plugin-rsc/examples/basic/src/routes/style-client/client.tsx new file mode 100644 index 000000000..bc715d672 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/style-client/client.tsx @@ -0,0 +1,17 @@ +'use client' + +import './client.css' +import { TestClientDep } from './client-dep' +import styles from './client.module.css' + +export function TestStyleClient() { + return ( + <> +
test-style-client
+
+ test-css-module-client +
+ + + ) +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/style-server/server.css b/packages/plugin-rsc/examples/basic/src/routes/style-server/server.css new file mode 100644 index 000000000..480fa1388 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/style-server/server.css @@ -0,0 +1,3 @@ +.test-style-server { + color: rgb(255, 165, 0); +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/style-server/server.module.css b/packages/plugin-rsc/examples/basic/src/routes/style-server/server.module.css new file mode 100644 index 000000000..a391a735e --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/style-server/server.module.css @@ -0,0 +1,3 @@ +.server { + color: rgb(255, 165, 0); +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/style-server/server.tsx b/packages/plugin-rsc/examples/basic/src/routes/style-server/server.tsx new file mode 100644 index 000000000..6684e6b5f --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/style-server/server.tsx @@ -0,0 +1,13 @@ +import './server.css' +import styles from './server.module.css' + +export function TestStyleServer() { + return ( + <> +
test-style-server
+
+ test-css-module-server +
+ + ) +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/tailwind/client.tsx b/packages/plugin-rsc/examples/basic/src/routes/tailwind/client.tsx new file mode 100644 index 000000000..868bc0bb3 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/tailwind/client.tsx @@ -0,0 +1,5 @@ +'use client' + +export function TestTailwindClient() { + return
test-tw-client
+} diff --git a/packages/plugin-rsc/examples/basic/src/routes/tailwind/server.tsx b/packages/plugin-rsc/examples/basic/src/routes/tailwind/server.tsx new file mode 100644 index 000000000..b130e1cae --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/tailwind/server.tsx @@ -0,0 +1,3 @@ +export function TestTailwindServer() { + return
test-tw-server
+} diff --git a/packages/plugin-rsc/examples/basic/src/routes/temporary-reference/action.tsx b/packages/plugin-rsc/examples/basic/src/routes/temporary-reference/action.tsx new file mode 100644 index 000000000..c855de521 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/temporary-reference/action.tsx @@ -0,0 +1,10 @@ +'use server' + +export async function action(node: React.ReactNode) { + 'use server' + return ( + + [server {node}] + + ) +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/temporary-reference/client.tsx b/packages/plugin-rsc/examples/basic/src/routes/temporary-reference/client.tsx new file mode 100644 index 000000000..69dd7e9fa --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/temporary-reference/client.tsx @@ -0,0 +1,21 @@ +'use client' + +import React from 'react' +import { action } from './action' + +export function TestTemporaryReference() { + const [result, setResult] = React.useState('(none)') + + return ( +
+
{ + setResult(await action([client])) + }} + > + +
+
result: {result}
+
+ ) +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/use-cache/server.tsx b/packages/plugin-rsc/examples/basic/src/routes/use-cache/server.tsx new file mode 100644 index 000000000..d90f7496a --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/use-cache/server.tsx @@ -0,0 +1,105 @@ +import { revalidateCache } from '../../use-cache-runtime' + +export function TestUseCache() { + return ( + <> + + + + + ) +} + +function TestUseCacheFn() { + return ( +
{ + 'use server' + actionCount++ + const argument = formData.get('argument') + await testFn(argument) + if (argument === 'revalidate') { + revalidateCache(testFn) + } + }} + > + + + + (actionCount: {actionCount}, cacheFnCount: {cacheFnCount}) + +
+ ) +} + +let actionCount = 0 +let cacheFnCount = 0 + +async function testFn(..._args: unknown[]) { + 'use cache' + cacheFnCount++ +} + +function TestUseCacheComponent() { + // NOTE: wrapping with `span` (or any jsx) is crucial because + // raw string `children` would get included as cache key + // and thus causes `TestComponent` to be evaluated in each render. + return ( + + {new Date().toISOString()} + + ) +} + +async function TestComponent(props: { children?: React.ReactNode }) { + 'use cache' + return ( +
+ [test-use-cache-component]{' '} + + (static: {new Date().toISOString()}) + {' '} + + (dynamic: {props.children}) + +
+ ) +} + +async function TestUseCacheClosure() { + return ( +
+
{ + 'use server' + actionCount2++ + outerFnArg = formData.get('outer') as string + innerFnArg = formData.get('inner') as string + await outerFn(outerFnArg)(innerFnArg) + }} + > + + + +
+ + (actionCount: {actionCount2}, innerFnCount: {innerFnCount}) + +
+ ) +} + +function outerFn(outer: string) { + async function innerFn(inner: string) { + 'use cache' + innerFnCount++ + console.log({ outer, inner }) + } + return innerFn +} + +let outerFnArg = '' +let innerFnArg = '' +let innerFnCount = 0 +let actionCount2 = 0 diff --git a/packages/plugin-rsc/examples/basic/src/server.ssr.tsx b/packages/plugin-rsc/examples/basic/src/server.ssr.tsx new file mode 100644 index 000000000..651769496 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/server.ssr.tsx @@ -0,0 +1 @@ +export * from '@vitejs/plugin-rsc/extra/ssr' diff --git a/packages/plugin-rsc/examples/basic/src/server.tsx b/packages/plugin-rsc/examples/basic/src/server.tsx new file mode 100644 index 000000000..86b9234d3 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/server.tsx @@ -0,0 +1,31 @@ +import './styles.css' +import { renderRequest } from '@vitejs/plugin-rsc/extra/rsc' + +export default async function handler(request: Request): Promise { + const url = new URL(request.url) + const { Root } = await import('./routes/root.tsx') + const root = ( + <> + {import.meta.viteRsc.loadCss()} + + + ) + const nonce = !process.env.NO_CSP ? crypto.randomUUID() : undefined + const response = await renderRequest(request, root, { nonce }) + if (nonce) { + response.headers.set( + 'content-security-policy', + `default-src 'self'; ` + + // `unsafe-eval` is required during dev since React uses eval for findSourceMapURL feature + `script-src 'self' 'nonce-${nonce}' ${ + import.meta.env.DEV ? `'unsafe-eval'` : `` + } ; ` + + `style-src 'self' 'nonce-${nonce}'; `, + ) + } + return response +} + +if (import.meta.hot) { + import.meta.hot.accept() +} diff --git a/packages/plugin-rsc/examples/basic/src/styles.css b/packages/plugin-rsc/examples/basic/src/styles.css new file mode 100644 index 000000000..9ea32262f --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/styles.css @@ -0,0 +1,13 @@ +@import 'tailwindcss' source('./'); + +button { + @apply bg-gray-100 mx-1 px-2 border hover:bg-gray-200 active:bg-gray-300; +} + +input { + @apply mx-1 px-2 border; +} + +a { + @apply text-gray-500 underline hover:text-gray-700; +} diff --git a/packages/plugin-rsc/examples/basic/src/use-cache-runtime.tsx b/packages/plugin-rsc/examples/basic/src/use-cache-runtime.tsx new file mode 100644 index 000000000..44e011050 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/use-cache-runtime.tsx @@ -0,0 +1,94 @@ +import * as ReactRsc from '@vitejs/plugin-rsc/rsc' + +// based on +// https://github.com/vercel/next.js/pull/70435 +// https://github.com/vercel/next.js/blob/09a2167b0a970757606b7f91ff2d470f77f13f8c/packages/next/src/server/use-cache/use-cache-wrapper.ts + +const cachedFnMap = new WeakMap() +const cachedFnCacheEntries = new WeakMap< + Function, + Record> +>() + +export default function cacheWrapper(fn: (...args: any[]) => Promise) { + if (cachedFnMap.has(fn)) { + return cachedFnMap.get(fn)! + } + + async function cachedFn(...args: any[]): Promise { + let cacheEntries = cachedFnCacheEntries.get(cachedFn) + if (!cacheEntries) { + cacheEntries = {} + cachedFnCacheEntries.set(cachedFn, cacheEntries) + } + + // Serialize arguments to a cache key via `encodeReply` from `react-server-dom/client`. + // NOTE: using `renderToReadableStream` here for arguments serialization would end up + // serializing react elements (e.g. children props), which causes + // those arguments to be included as a cache key and it doesn't achieve + // "use cache static shell + dynamic children props" pattern. + // cf. https://nextjs.org/docs/app/api-reference/directives/use-cache#non-serializable-arguments + const clientTemporaryReferences = + ReactRsc.createClientTemporaryReferenceSet() + const encodedArguments = await ReactRsc.encodeReply(args, { + temporaryReferences: clientTemporaryReferences, + }) + const serializedCacheKey = await replyToCacheKey(encodedArguments) + + // cache `fn` result as stream + // (cache value is promise so that it dedupes concurrent async calls) + const entryPromise = (cacheEntries[serializedCacheKey] ??= (async () => { + const temporaryReferences = ReactRsc.createTemporaryReferenceSet() + const decodedArgs = await ReactRsc.decodeReply(encodedArguments, { + temporaryReferences, + }) + + // run the original function + const result = await fn(...decodedArgs) + + // serialize result to a ReadableStream + const stream = ReactRsc.renderToReadableStream(result, { + environmentName: 'Cache', + temporaryReferences, + }) + return new StreamCacher(stream) + })()) + + // deserialized cached stream + const stream = (await entryPromise).get() + const result = ReactRsc.createFromReadableStream(stream, { + environmentName: 'Cache', + replayConsoleLogs: true, + temporaryReferences: clientTemporaryReferences, + }) + return result + } + + cachedFnMap.set(fn, cachedFn) + + return cachedFn +} + +export function revalidateCache(cachedFn: Function) { + cachedFnCacheEntries.delete(cachedFn) +} + +class StreamCacher { + constructor(private stream: ReadableStream) {} + get(): ReadableStream { + const [returnStream, savedStream] = this.stream.tee() + this.stream = savedStream + return returnStream + } +} + +async function replyToCacheKey(reply: string | FormData) { + if (typeof reply === 'string') { + return reply + } + const buffer = await crypto.subtle.digest( + 'SHA-256', + await new Response(reply).arrayBuffer(), + ) + return btoa(String.fromCharCode(...new Uint8Array(buffer))) +} diff --git a/packages/plugin-rsc/examples/basic/test-dep/client-in-server/client.js b/packages/plugin-rsc/examples/basic/test-dep/client-in-server/client.js new file mode 100644 index 000000000..6a7a8d1ba --- /dev/null +++ b/packages/plugin-rsc/examples/basic/test-dep/client-in-server/client.js @@ -0,0 +1,8 @@ +'use client' + +import React from 'react' + +export function TestClient() { + const [ok] = React.useState(() => true) + return React.createElement('span', null, String(ok)) +} diff --git a/packages/plugin-rsc/examples/basic/test-dep/client-in-server/package.json b/packages/plugin-rsc/examples/basic/test-dep/client-in-server/package.json new file mode 100644 index 000000000..68ab77952 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/test-dep/client-in-server/package.json @@ -0,0 +1,11 @@ +{ + "name": "@vitejs/test-dep-client-in-server", + "private": true, + "type": "module", + "exports": { + "./server": "./server.js" + }, + "peerDependencies": { + "react": "*" + } +} diff --git a/packages/plugin-rsc/examples/basic/test-dep/client-in-server/server.js b/packages/plugin-rsc/examples/basic/test-dep/client-in-server/server.js new file mode 100644 index 000000000..e145d3c52 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/test-dep/client-in-server/server.js @@ -0,0 +1,6 @@ +import React from 'react' +import { TestClient } from './client.js' + +export async function TestClientInServerDep() { + return React.createElement(TestClient) +} diff --git a/packages/plugin-rsc/examples/basic/test-dep/client-in-server2/client.js b/packages/plugin-rsc/examples/basic/test-dep/client-in-server2/client.js new file mode 100644 index 000000000..8a09b673a --- /dev/null +++ b/packages/plugin-rsc/examples/basic/test-dep/client-in-server2/client.js @@ -0,0 +1,18 @@ +'use client' + +import React from 'react' + +const testContext = React.createContext() + +export function TestContextProvider(props) { + return React.createElement( + testContext.Provider, + { value: props.value }, + props.children, + ) +} + +export function TestContextValue() { + const value = React.useContext(testContext) + return React.createElement('span', null, String(value)) +} diff --git a/packages/plugin-rsc/examples/basic/test-dep/client-in-server2/package.json b/packages/plugin-rsc/examples/basic/test-dep/client-in-server2/package.json new file mode 100644 index 000000000..fbc55fef5 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/test-dep/client-in-server2/package.json @@ -0,0 +1,12 @@ +{ + "name": "@vitejs/test-dep-client-in-server2", + "private": true, + "type": "module", + "exports": { + "./server": "./server.js", + "./client": "./client.js" + }, + "peerDependencies": { + "react": "*" + } +} diff --git a/packages/plugin-rsc/examples/basic/test-dep/client-in-server2/server.js b/packages/plugin-rsc/examples/basic/test-dep/client-in-server2/server.js new file mode 100644 index 000000000..323d0e03f --- /dev/null +++ b/packages/plugin-rsc/examples/basic/test-dep/client-in-server2/server.js @@ -0,0 +1,10 @@ +import React from 'react' +import { TestContextProvider } from './client.js' + +export function TestContextProviderInServer(props) { + return React.createElement( + TestContextProvider, + { value: props.value }, + props.children, + ) +} diff --git a/packages/plugin-rsc/examples/basic/test-dep/server-in-client/client.js b/packages/plugin-rsc/examples/basic/test-dep/server-in-client/client.js new file mode 100644 index 000000000..bdb6c4596 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/test-dep/server-in-client/client.js @@ -0,0 +1,21 @@ +'use client' + +import React from 'react' +import { changeCounter } from './server.js' + +const h = React.createElement + +export function TestClient() { + const [count, setCount] = React.useState(() => '?') + + return h( + 'button', + { + 'data-testid': 'server-in-client', + onClick: async () => { + setCount(await changeCounter(1)) + }, + }, + `server-in-client: ${count}`, + ) +} diff --git a/packages/plugin-rsc/examples/basic/test-dep/server-in-client/package.json b/packages/plugin-rsc/examples/basic/test-dep/server-in-client/package.json new file mode 100644 index 000000000..d172984a1 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/test-dep/server-in-client/package.json @@ -0,0 +1,11 @@ +{ + "name": "@vitejs/test-dep-server-in-client", + "private": true, + "type": "module", + "exports": { + "./client": "./client.js" + }, + "peerDependencies": { + "react": "*" + } +} diff --git a/packages/plugin-rsc/examples/basic/test-dep/server-in-client/server.js b/packages/plugin-rsc/examples/basic/test-dep/server-in-client/server.js new file mode 100644 index 000000000..3e76f153e --- /dev/null +++ b/packages/plugin-rsc/examples/basic/test-dep/server-in-client/server.js @@ -0,0 +1,12 @@ +'use server' + +let counter = 0 + +export async function getCounter() { + return counter +} + +export async function changeCounter(change) { + counter += change + return counter +} diff --git a/packages/plugin-rsc/examples/basic/test-dep/server-in-server/package.json b/packages/plugin-rsc/examples/basic/test-dep/server-in-server/package.json new file mode 100644 index 000000000..7a84ef530 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/test-dep/server-in-server/package.json @@ -0,0 +1,11 @@ +{ + "name": "@vitejs/test-dep-server-in-server", + "private": true, + "type": "module", + "exports": { + "./server": "./server.js" + }, + "peerDependencies": { + "react": "*" + } +} diff --git a/packages/plugin-rsc/examples/basic/test-dep/server-in-server/server.js b/packages/plugin-rsc/examples/basic/test-dep/server-in-server/server.js new file mode 100644 index 000000000..bc553464a --- /dev/null +++ b/packages/plugin-rsc/examples/basic/test-dep/server-in-server/server.js @@ -0,0 +1,19 @@ +import React from 'react' + +const h = React.createElement + +let counter = 0 + +export function ServerCounter() { + return h( + 'form', + { + 'data-testid': 'server-in-server', + action: async () => { + 'use server' + counter++ + }, + }, + h('button', null, `server-in-server: ${counter}`), + ) +} diff --git a/packages/plugin-rsc/examples/basic/tsconfig.json b/packages/plugin-rsc/examples/basic/tsconfig.json new file mode 100644 index 000000000..77438d9db --- /dev/null +++ b/packages/plugin-rsc/examples/basic/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "allowImportingTsExtensions": true, + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "skipLibCheck": true, + "verbatimModuleSyntax": true, + "noEmit": true, + "moduleResolution": "Bundler", + "module": "ESNext", + "target": "ESNext", + "lib": ["ESNext", "DOM", "DOM.Iterable"], + "types": ["vite/client", "@vitejs/plugin-rsc/types"], + "jsx": "react-jsx" + } +} diff --git a/packages/plugin-rsc/examples/basic/vite.config.ts b/packages/plugin-rsc/examples/basic/vite.config.ts new file mode 100644 index 000000000..7eff64dcc --- /dev/null +++ b/packages/plugin-rsc/examples/basic/vite.config.ts @@ -0,0 +1,178 @@ +import assert from 'node:assert' +import rsc, { transformHoistInlineDirective } from '@vitejs/plugin-rsc' +import tailwindcss from '@tailwindcss/vite' +import react from '@vitejs/plugin-react' +import { type Plugin, defineConfig, parseAstAsync } from 'vite' +import inspect from 'vite-plugin-inspect' + +// log unhandled rejection to debug e2e failures +if (!(globalThis as any).__debugHandlerRegisterd) { + process.on('uncaughtException', (err) => { + console.error('⚠️⚠️⚠️ uncaughtException ⚠️⚠️⚠️', err) + }) + process.on('unhandledRejection', (err) => { + console.error('⚠️⚠️⚠️ unhandledRejection ⚠️⚠️⚠️', err) + }) + ;(globalThis as any).__debugHandlerRegisterd = true +} + +export default defineConfig({ + base: process.env.TEST_BASE ? '/custom-base/' : undefined, + clearScreen: false, + plugins: [ + tailwindcss(), + react(), + vitePluginUseCache(), + rsc({ + entries: { + client: './src/client.tsx', + ssr: './src/server.ssr.tsx', + rsc: './src/server.tsx', + }, + // disable auto css injection to manually test `loadCss` feature. + rscCssTransform: false, + ignoredPackageWarnings: [/@vitejs\/test-dep-/], + copyServerAssetsToClient: (fileName) => + fileName !== '__server_secret.txt', + }), + // avoid ecosystem CI fail due to vite-plugin-inspect compatibility + !process.env.ECOSYSTEM_CI && inspect(), + { + // test server restart scenario on e2e + name: 'test-api', + configureServer(server) { + server.middlewares.use((req, res, next) => { + const url = new URL(req.url!, 'http://localhost') + if (url.pathname === '/__test_restart') { + setTimeout(() => { + server.restart() + }, 10) + res.end('ok') + return + } + next() + }) + }, + }, + { + name: 'test-client-reference-tree-shaking', + enforce: 'post', + writeBundle(_options, bundle) { + for (const chunk of Object.values(bundle)) { + if (chunk.type === 'chunk') { + assert(!chunk.code.includes('__unused_client_reference__')) + } + } + }, + }, + { + name: 'test-server-assets-security', + buildStart() { + if (this.environment.name === 'rsc') { + this.emitFile({ + type: 'asset', + fileName: '__server_secret.txt', + source: '__server_secret', + }) + } + }, + writeBundle(_options, bundle) { + if (this.environment.name === 'rsc') { + assert(Object.keys(bundle).includes('__server_secret.txt')) + } else { + assert(!Object.keys(bundle).includes('__server_secret.txt')) + } + + const viteManifest = bundle['.vite/manifest.json'] + assert(viteManifest.type === 'asset') + assert(typeof viteManifest.source === 'string') + if (this.environment.name === 'rsc') { + assert(viteManifest.source.includes('src/server.tsx')) + assert(!viteManifest.source.includes('src/client.tsx')) + } + if (this.environment.name === 'client') { + assert(!viteManifest.source.includes('src/server.tsx')) + assert(viteManifest.source.includes('src/client.tsx')) + } + }, + }, + { + name: 'cf-build', + enforce: 'post', + apply: () => !!process.env.CF_BUILD, + configEnvironment() { + return { + keepProcessEnv: false, + define: { + 'process.env.NO_CSP': 'false', + }, + resolve: { + noExternal: true, + }, + } + }, + generateBundle() { + if (this.environment.name === 'rsc') { + this.emitFile({ + type: 'asset', + fileName: 'cloudflare.js', + source: `\ +import handler from './index.js'; +export default { fetch: handler }; +`, + }) + } + if (this.environment.name === 'client') { + // https://developers.cloudflare.com/workers/static-assets/headers/#custom-headers + this.emitFile({ + type: 'asset', + fileName: '_headers', + source: `\ +/favicon.ico + Cache-Control: public, max-age=3600, s-maxage=3600 +/assets/* + Cache-Control: public, max-age=31536000, immutable +`, + }) + } + }, + }, + ], + build: { + minify: false, + manifest: true, + }, + optimizeDeps: { + exclude: [ + '@vitejs/test-dep-client-in-server/client', + '@vitejs/test-dep-client-in-server2/client', + '@vitejs/test-dep-server-in-client/client', + ], + }, +}) as any + +function vitePluginUseCache(): Plugin[] { + return [ + { + name: 'use-cache', + async transform(code) { + if (!code.includes('use cache')) return + const ast = await parseAstAsync(code) + const result = transformHoistInlineDirective(code, ast, { + runtime: (value) => `__vite_rsc_cache(${value})`, + directive: 'use cache', + rejectNonAsyncFunction: true, + noExport: true, + }) + if (!result.output.hasChanged()) return + result.output.prepend( + `import __vite_rsc_cache from "/src/use-cache-runtime";`, + ) + return { + code: result.output.toString(), + map: result.output.generateMap({ hires: 'boundary' }), + } + }, + }, + ] +} diff --git a/packages/plugin-rsc/examples/basic/wrangler.jsonc b/packages/plugin-rsc/examples/basic/wrangler.jsonc new file mode 100644 index 000000000..d5cb469b8 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/wrangler.jsonc @@ -0,0 +1,11 @@ +{ + "$schema": "https://www.unpkg.com/wrangler@4.13.0/config-schema.json", + "name": "vite-rsc-basic", + "main": "dist/rsc/cloudflare.js", + "assets": { + "directory": "dist/client" + }, + "workers_dev": true, + "compatibility_date": "2025-04-01", + "compatibility_flags": ["nodejs_als"] +} diff --git a/packages/plugin-rsc/examples/hono/package.json b/packages/plugin-rsc/examples/hono/package.json new file mode 100644 index 000000000..a33afc4cf --- /dev/null +++ b/packages/plugin-rsc/examples/hono/package.json @@ -0,0 +1,15 @@ +{ + "name": "@vitejs/plugin-rsc-examples-hono", + "private": true, + "license": "MIT", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build --app", + "preview": "vite preview" + }, + "dependencies": { + "@vitejs/plugin-rsc": "workspace:*", + "hono": "^4.7.5" + } +} diff --git a/packages/plugin-rsc/examples/hono/public/favicon.ico b/packages/plugin-rsc/examples/hono/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..4aff076603f8f01fb3b7d8b5e38df77cc1efdd69 GIT binary patch literal 4286 zcmc(jeOQ&{9mmi9Y5(N4wKaEHmR6cpj%~hXo13+jb7bn2986aeCEr<~nOgZmpr$E` zf`o4brE!#(M1gZu646vl&`1pxMdw?|n=m>c+@F0P;mO>tlyk0ib#r~sdCqh0=e|Gp z@BY2q2Z!Sa`s>)yVZAyw{@CGY>u@-_O1kCfFIo4mH+}bzU$dHTI2`!e8Vx4;1ZKh^ zxKi)yD84^;xC-;kZcMM8u;Hxl=0 zrl(}R$D9P?+i+ezRaK9fv=7rK8`IkjJ!J!H{(<@MS+!R~`O?{>ox=Qa3-rsRXz(63 z2OX9VwCuy2qfp=E%do9`=6nq%BuDe7!jtKI6u6hZ(Up|S59#T~^xp-0ue5F~Z+jVS zZek&3&_;~E69#PN+~91w#MclR`Z@H~e)M!gs0@p&odJ103qFqWoKTLTHzP(@mAxzj(#e6hoycovD(ij}ivB{e#lRuP=cG5k$iaRo)dtx=G zM`-QOi1(><%*tYDlHdB;$}2ES5-{NlF)zQ3nIet}%c&n1$C&sM{8FwGkZ_g`sUGg! z3T>ptZyW}H`KjW=1Y|*Rxo@*u@#a=udF@Tij3~@2VhCG&oq>tVm=kl5JGI?yq#tEV znyQW7d%s`BnUNog;R7)^G4l^7CpCJ{a9%Yn`Yp_y*_byXFtZ{t(-+7Viy(9{&V^aD zbs2uD6#Nr0*t#nRmP8cFH{WZ{6~oeCpO^7?twAxY_*(EPM7@rgXEDr!SrITj3c}}8 zG&hNdv%li*9q=>hZiT(2yL8>xDH{YUC=?&&*$uMcN6JZFoDoXp$8j^YkZG`J2F#yD zT~q{{;?mf*+{vkkRh*ogz;80kX{(g`^V}P1yAv!$FZ=}TTrvCu$T`)zJ@6=Iw#2~7 zDX=^omRbzcx$<@-Pv=~u!|o<}xvTke<^?+EHqb5)?vdJw!(HPN#foO70Yl-k>>`W6NT?SD*WDt)y&<{AiS7Soz8*XK=RiTNo5?#oDKo7j&K*4as9+{Y$WBf^0FF zhPW_7T*Y)e2oGsl4=Su|Js>7q|IHS&LZG8pDR+w@NcCf#pc|Y1m!a|mxHMN<5IFx1 z8~>pkE;}TKz}oRNCQKpRUBH8fptD@dQYW$4vY4(*To35FgLJ?22Ui7UQ&lU1W0kw( zmA{hV*u|UYZ&JK{x(u?0L*`#0{co^Y3@IiNbQp!w zO~^{sk=0O8+H8YsRd7@>zI!0-dJcAo!6iFvdtPxEsQr*FoZ{FpidEZFc~oV-Tk*|$ zOiZ@A>Uvn-1u7yJ!OXeJSCKGPdDF_>p{gGfEe6%GMd?tjc)TqC{6ur_9{_tS27fUO z62lPLLUzcOFS-?jc~K-4?ZfXl{PI|{{KR7G7oUNpZc?8j4+TjnD#%v;R^FZ=O;ZgC zQw<4K9kXibq*$#{4s=ZGD|!+NHE*G=kG!mVVn4kRE-IKSOQ7zG>Zpg*Dnk!_{PpKI z^ege$`kG68tF7N7moCV*M=`td75h4u#3o_hR4h!F4JOMLvlF2rN59`Pl%M4|o^y(g zS}=__`)A81R}DOVN=Mz3(8JOR)qGpx>fXX;*=W+gG@L^E>t@wck4JM=z=<;1T8?r+ z2K1tp)T{Jd($Pnl{u<(`)5^1QqbH<3;_5B+5|_m^P~VlR|NpaD%c*J7PrU}Yugsfq z6=KWbwaXB4Ua4MOgTyu9jE-TFWv}nL35VJirUPP1tyZ~^yM!slY|{1Zn*D!(@9X_P D`VsgZ literal 0 HcmV?d00001 diff --git a/packages/plugin-rsc/examples/hono/src/client.tsx b/packages/plugin-rsc/examples/hono/src/client.tsx new file mode 100644 index 000000000..c734dae74 --- /dev/null +++ b/packages/plugin-rsc/examples/hono/src/client.tsx @@ -0,0 +1,36 @@ +import { fetchRSC } from '@vitejs/plugin-rsc/extra/browser' +import React from 'react' +import ReactDOM from 'react-dom/client' + +function main() { + const dom = document.getElementById('root')! + ReactDOM.createRoot(dom).render() +} + +function App() { + return ( +
+

hello client

+ +
+ ) +} + +function FetchRsc() { + const [rsc, setRsc] = React.useState(null) + + return ( +
+ + {rsc} +
+ ) +} + +main() diff --git a/packages/plugin-rsc/examples/hono/src/server.tsx b/packages/plugin-rsc/examples/hono/src/server.tsx new file mode 100644 index 000000000..3499a18c5 --- /dev/null +++ b/packages/plugin-rsc/examples/hono/src/server.tsx @@ -0,0 +1,34 @@ +import { renderRequest } from '@vitejs/plugin-rsc/extra/rsc' +import { Hono } from 'hono' + +const app = new Hono() + +app.get('/api/rsc', (c) => { + const el = ( +
+
Hono!
+
random: ${Math.random().toString(36).slice(2)}
+
+ ) + // TODO: request is irrelevant + return renderRequest(c.req.raw, el) +}) + +app.all('/', (c) => { + return renderRequest(c.req.raw, ) +}) + +function Document() { + return ( + + + vite-rsc + + +
+ + + ) +} + +export default app.fetch diff --git a/packages/plugin-rsc/examples/hono/tsconfig.json b/packages/plugin-rsc/examples/hono/tsconfig.json new file mode 100644 index 000000000..eeb2d95d9 --- /dev/null +++ b/packages/plugin-rsc/examples/hono/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "allowImportingTsExtensions": true, + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "skipLibCheck": true, + "verbatimModuleSyntax": true, + "noEmit": true, + "moduleResolution": "Bundler", + "module": "ESNext", + "target": "ESNext", + "lib": ["ESNext", "DOM", "DOM.Iterable"], + "types": ["vite/client"], + "jsx": "react-jsx" + } +} diff --git a/packages/plugin-rsc/examples/hono/vite.config.ts b/packages/plugin-rsc/examples/hono/vite.config.ts new file mode 100644 index 000000000..fb5b09500 --- /dev/null +++ b/packages/plugin-rsc/examples/hono/vite.config.ts @@ -0,0 +1,20 @@ +import rsc from '@vitejs/plugin-rsc' +import react from '@vitejs/plugin-react' +import { defineConfig } from 'vite' + +export default defineConfig({ + clearScreen: false, + plugins: [ + react(), + rsc({ + entries: { + client: './src/client.tsx', + rsc: './src/server.tsx', + ssr: '@vitejs/plugin-rsc/extra/ssr', + }, + }), + ], + build: { + minify: false, + }, +}) as any diff --git a/packages/plugin-rsc/examples/react-router/README.md b/packages/plugin-rsc/examples/react-router/README.md new file mode 100644 index 000000000..d560eb651 --- /dev/null +++ b/packages/plugin-rsc/examples/react-router/README.md @@ -0,0 +1,31 @@ +# rsc react-router + +https://vite-rsc-react-router.hiro18181.workers.dev + +Vite RSC example based on demo made by React router team with Parcel: + +- https://github.com/jacob-ebey/parcel-plugin-react-router/ +- https://github.com/jacob-ebey/experimental-parcel-react-router-starter +- https://github.com/remix-run/react-router/tree/rsc/playground/rsc-vite + +See also [`rsc-movies`](https://github.com/hi-ogawa/rsc-movies/). + +[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/hi-ogawa/vite-plugins/tree/main/packages/rsc/examples/react-router?file=src%2Froutes%2Froot.tsx) + +Or try it locally by: + +```sh +npx giget gh:hi-ogawa/vite-plugins/packages/rsc/examples/react-router my-app +cd my-app +npm i +npm run dev +npm run build +npm run preview + +# run on @cloudflare/vite-plugin and deploy. +# a separate configuration is found in ./cf/vite.config.ts +npm run cf-dev +npm run cf-build +npm run cf-preview +npm run cf-release +``` diff --git a/packages/plugin-rsc/examples/react-router/app/paper.css b/packages/plugin-rsc/examples/react-router/app/paper.css new file mode 100644 index 000000000..a4087ac5a --- /dev/null +++ b/packages/plugin-rsc/examples/react-router/app/paper.css @@ -0,0 +1,150 @@ +@theme { + --default-font-family: 'Patrick Hand SC', sans-serif; + --default-mono-font-family: 'Patrick Hand SC', sans-serif; + + --color-foreground: black; + --color-danger: rgb(167, 52, 45); + --color-secondary: rgb(11, 116, 213); + --color-success: rgb(134, 163, 97); + --color-warning: rgb(221, 205, 69); + --color-border: #cdcccb; + --color-border-active: rgba(0, 0, 0, 0.2); + + --color-paper-background: white; + --color-paper-border: #cdcccb; + --shadow-paper: -1px 5px 35px -9px rgba(0, 0, 0, 0.2); + + --shadow-btn: 15px 28px 25px -18px rgba(0, 0, 0, 0.2); + --shadow-btn-hover: 2px 8px 8px -5px rgba(0, 0, 0, 0.3); + --color-btn-border: black; + --btn-color-danger: var(--color-danger); + --btn-color-secondary: var(--color-secondary); + --btn-color-success: var(--color-success); + --btn-color-warning: var(--color-warning); +} + +@utility paper-border { + @apply border-2 border-border; + border-bottom-left-radius: 25px 115px; + border-bottom-right-radius: 155px 25px; + border-top-left-radius: 15px 225px; + border-top-right-radius: 25px 150px; +} + +@utility no-paper-border { + @apply border-0; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +@utility paper-underline { + @apply border-b-3 border-[currentcolor]; + border-bottom-left-radius: 15px 3px; + border-bottom-right-radius: 15px 5px; + border-bottom-style: solid; +} + +@utility paper-underline-hover { + @apply paper-underline border-transparent; + @variant hover { + @apply border-[currentcolor]; + } +} + +@utility paper { + @apply border border-paper-border bg-paper-background p-8 shadow-paper; +} + +@utility breadcrumbs { + @apply flex flex-wrap gap-2; + & > * { + @apply inline-block after:text-lg after:content-[""] not-last:after:ml-2 not-last:after:text-foreground not-last:after:content-["/"]; + } + & > a { + @apply text-secondary; + } +} + +@utility btn { + @apply inline-block cursor-pointer bg-paper-background paper-border px-4 py-2 text-lg shadow-btn transition-[shadow_transition]; + + @variant active { + @apply border-border-active; + } + @variant hover { + @apply translate-y-1 shadow-btn-hover; + } + + &.btn-icon { + @apply aspect-square px-2 py-2; + & img, + & svg { + @apply h-7 w-7; + } + } +} + +@utility btn-* { + border-color: --value(--btn-color- *); + color: --value(--btn-color- *); +} + +@utility btn-sm { + @apply px-2 py-1 text-base; +} + +@utility btn-lg { + @apply px-6 py-3 text-2xl; +} + +@utility label { + @apply mb-1 block font-semibold; +} + +@utility input { + @apply paper-border px-3 py-2; + + @variant disabled { + @apply border-border-active; + } +} + +@utility checkbox { + @apply h-6 w-6 paper-border; + + @variant disabled { + @apply border-border-active; + } +} + +@utility select { + @apply paper-border px-3 py-2; + + @variant disabled { + @apply border-border-active; + } +} + +@layer base { + body { + @apply text-foreground; + } + + * { + @apply outline-secondary; + } +} + +@layer utilities { + .prose { + :where(u):not(:where([class~='not-prose'], [class~='not-prose'] *)) { + @apply paper-underline no-underline; + } + + :where(a):not(:where([class~='not-prose'], [class~='not-prose'] *)) { + @apply paper-underline-hover no-underline text-secondary; + } + } +} diff --git a/packages/plugin-rsc/examples/react-router/app/root.tsx b/packages/plugin-rsc/examples/react-router/app/root.tsx new file mode 100644 index 000000000..0c356b69e --- /dev/null +++ b/packages/plugin-rsc/examples/react-router/app/root.tsx @@ -0,0 +1,56 @@ +import './styles.css' +import { Link, Outlet } from 'react-router' +import { ServerHmr } from '../react-router-vite/server-hmr' +import { TestClientState, TestHydrated } from './routes/client' +import { DumpError, GlobalNavigationLoadingBar } from './routes/root.client' + +export function Layout({ children }: { children: React.ReactNode }) { + console.log('Layout') + return ( + + + + + React Router Vite + + +
+ +
+ + + {children} + + + ) +} + +export default function Component() { + console.log('Root') + return ( + <> + + + ) +} + +export function ErrorBoundary() { + return +} diff --git a/packages/plugin-rsc/examples/react-router/app/routes.ts b/packages/plugin-rsc/examples/react-router/app/routes.ts new file mode 100644 index 000000000..cd3087750 --- /dev/null +++ b/packages/plugin-rsc/examples/react-router/app/routes.ts @@ -0,0 +1,6 @@ +import { type RouteConfig, index, route } from '@react-router/dev/routes' + +export default [ + index('routes/home.tsx'), + route('about', 'routes/about.tsx'), +] satisfies RouteConfig diff --git a/packages/plugin-rsc/examples/react-router/app/routes/about.tsx b/packages/plugin-rsc/examples/react-router/app/routes/about.tsx new file mode 100644 index 000000000..a4a076cac --- /dev/null +++ b/packages/plugin-rsc/examples/react-router/app/routes/about.tsx @@ -0,0 +1,20 @@ +'use client' + +import React from 'react' + +export function Component() { + const [count, setCount] = React.useState(0) + + return ( +
+
+

About

+

This is the about page.

+

[test-style-home]

+ +
+
+ ) +} diff --git a/packages/plugin-rsc/examples/react-router/app/routes/client.tsx b/packages/plugin-rsc/examples/react-router/app/routes/client.tsx new file mode 100644 index 000000000..679c9938d --- /dev/null +++ b/packages/plugin-rsc/examples/react-router/app/routes/client.tsx @@ -0,0 +1,22 @@ +'use client' + +import React from 'react' + +export function TestHydrated() { + const hydrated = React.useSyncExternalStore( + React.useCallback(() => () => {}, []), + () => true, + () => false, + ) + return [hydrated: {hydrated ? 1 : 0}] +} + +export function TestClientState() { + return ( + + ) +} diff --git a/packages/plugin-rsc/examples/react-router/app/routes/home.actions.ts b/packages/plugin-rsc/examples/react-router/app/routes/home.actions.ts new file mode 100644 index 000000000..94e686299 --- /dev/null +++ b/packages/plugin-rsc/examples/react-router/app/routes/home.actions.ts @@ -0,0 +1,7 @@ +'use server' + +export async function sayHello(defaultName: string, formData: FormData) { + await new Promise((resolve) => setTimeout(resolve, 500)) + const name = formData.get('name') || defaultName + console.log(`Hello, ${name}`) +} diff --git a/packages/plugin-rsc/examples/react-router/app/routes/home.client.tsx b/packages/plugin-rsc/examples/react-router/app/routes/home.client.tsx new file mode 100644 index 000000000..6da32f109 --- /dev/null +++ b/packages/plugin-rsc/examples/react-router/app/routes/home.client.tsx @@ -0,0 +1,12 @@ +'use client' + +import { useFormStatus } from 'react-dom' + +export function PendingButton() { + const status = useFormStatus() + return ( + + ) +} diff --git a/packages/plugin-rsc/examples/react-router/app/routes/home.css b/packages/plugin-rsc/examples/react-router/app/routes/home.css new file mode 100644 index 000000000..7204e2fde --- /dev/null +++ b/packages/plugin-rsc/examples/react-router/app/routes/home.css @@ -0,0 +1,3 @@ +.test-style-home { + color: rgb(250, 150, 0); +} diff --git a/packages/plugin-rsc/examples/react-router/app/routes/home.tsx b/packages/plugin-rsc/examples/react-router/app/routes/home.tsx new file mode 100644 index 000000000..d632fe29a --- /dev/null +++ b/packages/plugin-rsc/examples/react-router/app/routes/home.tsx @@ -0,0 +1,56 @@ +namespace Route { + export type LoaderArgs = any + export type ComponentProps = any +} + +import { sayHello } from './home.actions.ts' +import { PendingButton } from './home.client.tsx' +import './home.css' +import { TestActionStateServer } from './test-action-state/server.tsx' + +export function loader({ request }: Route.LoaderArgs) { + const url = new URL(request.url) + const name = url.searchParams.get('name') + return { name: name || 'Unknown' } +} + +const Component = ({ loaderData }: Route.ComponentProps) => { + return ( +
+
+

Home

+

This is the home page.

+ [test-style-home] +
+          loaderData: {JSON.stringify(loaderData)}
+        
+

Server Action

+
+
+ + +
+
+ +
+
+
+ +
+
+
+ ) +} + +export default Component diff --git a/packages/plugin-rsc/examples/react-router/app/routes/root.client.tsx b/packages/plugin-rsc/examples/react-router/app/routes/root.client.tsx new file mode 100644 index 000000000..be3a8e3de --- /dev/null +++ b/packages/plugin-rsc/examples/react-router/app/routes/root.client.tsx @@ -0,0 +1,44 @@ +'use client' + +import { useNavigation, useRouteError } from 'react-router' + +export function GlobalNavigationLoadingBar() { + const navigation = useNavigation() + + if (navigation.state === 'idle') return null + + return ( +
+
+
+ ) +} + +export function DumpError() { + const error = useRouteError() + const message = + error instanceof Error ? ( +
+
+          {JSON.stringify(
+            {
+              ...error,
+              name: error.name,
+              message: error.message,
+            },
+            null,
+            2,
+          )}
+        
+ {error.stack &&
{error.stack}
} +
+ ) : ( +
Unknown Error
+ ) + return ( + <> +

Oooops

+
{message}
+ + ) +} diff --git a/packages/plugin-rsc/examples/react-router/app/routes/test-action-state/client.tsx b/packages/plugin-rsc/examples/react-router/app/routes/test-action-state/client.tsx new file mode 100644 index 000000000..520dab494 --- /dev/null +++ b/packages/plugin-rsc/examples/react-router/app/routes/test-action-state/client.tsx @@ -0,0 +1,19 @@ +'use client' + +import React from 'react' + +export function TestActionStateClient(props: { + action: (prev: React.ReactNode) => Promise +}) { + const [state, formAction, isPending] = React.useActionState( + props.action, + null, + ) + + return ( +
+ + {isPending ? 'pending...' : state} +
+ ) +} diff --git a/packages/plugin-rsc/examples/react-router/app/routes/test-action-state/server.tsx b/packages/plugin-rsc/examples/react-router/app/routes/test-action-state/server.tsx new file mode 100644 index 000000000..128186e2f --- /dev/null +++ b/packages/plugin-rsc/examples/react-router/app/routes/test-action-state/server.tsx @@ -0,0 +1,20 @@ +import { TestActionStateClient } from './client' + +// Test case based on +// https://github.com/remix-run/react-router/issues/13882 + +export function TestActionStateServer({ message }: { message: string }) { + return ( + { + 'use server' + await new Promise((resolve) => setTimeout(resolve, 200)) + return ( + + [(ok) ({message})] {prev} + + ) + }} + /> + ) +} diff --git a/packages/plugin-rsc/examples/react-router/app/styles.css b/packages/plugin-rsc/examples/react-router/app/styles.css new file mode 100644 index 000000000..e1a22e4ec --- /dev/null +++ b/packages/plugin-rsc/examples/react-router/app/styles.css @@ -0,0 +1,32 @@ +@import 'tailwindcss'; +@plugin "@tailwindcss/typography"; + +@import './paper.css'; + +@theme { + --animate-progress: progress 1s infinite linear; + + @keyframes progress { + 0% { + transform: translateX(0) scaleX(0); + } + 40% { + transform: translateX(0) scaleX(0.4); + } + 100% { + transform: translateX(100%) scaleX(0.5); + } + } +} + +@utility vt-name { + view-transition-name: var(--vt-name); +} + +@utility no-vt { + view-transition-name: none; +} + +@view-transition { + navigation: auto; +} diff --git a/packages/plugin-rsc/examples/react-router/cf/entry.rsc.tsx b/packages/plugin-rsc/examples/react-router/cf/entry.rsc.tsx new file mode 100644 index 000000000..b194dfeb0 --- /dev/null +++ b/packages/plugin-rsc/examples/react-router/cf/entry.rsc.tsx @@ -0,0 +1,13 @@ +import { fetchServer } from '../react-router-vite/entry.rsc' + +console.log('[debug:cf-rsc-entry]') + +export default { + fetch(request: Request) { + return fetchServer(request) + }, +} + +if (import.meta.hot) { + import.meta.hot.accept() +} diff --git a/packages/plugin-rsc/examples/react-router/cf/entry.ssr.tsx b/packages/plugin-rsc/examples/react-router/cf/entry.ssr.tsx new file mode 100644 index 000000000..9a570e706 --- /dev/null +++ b/packages/plugin-rsc/examples/react-router/cf/entry.ssr.tsx @@ -0,0 +1,13 @@ +import handler from '../react-router-vite/entry.ssr' + +console.log('[debug:cf-ssr-entry]') + +// TODO: +// shouldn't "entry.rsc.tsx" be the main server entry +// and optionally call "entry.ssr.tsx" only for rendering html? + +export default { + fetch(request: Request, env: any) { + return handler(request, (request) => env.RSC.fetch(request)) + }, +} diff --git a/packages/plugin-rsc/examples/react-router/cf/vite.config.ts b/packages/plugin-rsc/examples/react-router/cf/vite.config.ts new file mode 100644 index 000000000..c4348cec7 --- /dev/null +++ b/packages/plugin-rsc/examples/react-router/cf/vite.config.ts @@ -0,0 +1,72 @@ +import { cloudflare } from '@cloudflare/vite-plugin' +import rsc from '@vitejs/plugin-rsc' +import tailwindcss from '@tailwindcss/vite' +import react from '@vitejs/plugin-react' +import { defineConfig } from 'vite' +import inspect from 'vite-plugin-inspect' +import { reactRouter } from '../react-router-vite/plugin' + +export default defineConfig({ + clearScreen: false, + build: { + minify: false, + }, + plugins: [ + tailwindcss(), + react(), + reactRouter(), + rsc({ + entries: { + client: './react-router-vite/entry.browser.tsx', + }, + serverHandler: false, + }), + inspect(), + cloudflare({ + configPath: './cf/wrangler.ssr.jsonc', + viteEnvironment: { + name: 'ssr', + }, + auxiliaryWorkers: [ + { + configPath: './cf/wrangler.rsc.jsonc', + viteEnvironment: { + name: 'rsc', + }, + }, + ], + }), + { + name: 'react-router-fixup', + transform(code) { + if (code.includes(`import { AsyncLocalStorage } from 'async_hooks';`)) { + code = code.replaceAll('async_hooks', 'node:async_hooks') + code = code.replaceAll( + `global.___reactRouterServerStorage___`, + `globalThis.___reactRouterServerStorage___`, + ) + return code + } + }, + }, + ], + environments: { + client: { + optimizeDeps: { + include: ['react-router', 'react-router/internal/react-server-client'], + }, + }, + ssr: { + optimizeDeps: { + include: ['react-router > cookie', 'react-router > set-cookie-parser'], + exclude: ['react-router'], + }, + }, + rsc: { + optimizeDeps: { + include: ['react-router > cookie', 'react-router > set-cookie-parser'], + exclude: ['react-router'], + }, + }, + }, +}) diff --git a/packages/plugin-rsc/examples/react-router/cf/wrangler.rsc.jsonc b/packages/plugin-rsc/examples/react-router/cf/wrangler.rsc.jsonc new file mode 100644 index 000000000..68270a8be --- /dev/null +++ b/packages/plugin-rsc/examples/react-router/cf/wrangler.rsc.jsonc @@ -0,0 +1,8 @@ +{ + "$schema": "https://www.unpkg.com/wrangler@4.19.1/config-schema.json", + "name": "vite-rsc-react-router-rsc", + "main": "./entry.rsc.tsx", + "workers_dev": true, + "compatibility_date": "2025-04-01", + "compatibility_flags": ["nodejs_als"] +} diff --git a/packages/plugin-rsc/examples/react-router/cf/wrangler.ssr.jsonc b/packages/plugin-rsc/examples/react-router/cf/wrangler.ssr.jsonc new file mode 100644 index 000000000..bfc7066b0 --- /dev/null +++ b/packages/plugin-rsc/examples/react-router/cf/wrangler.ssr.jsonc @@ -0,0 +1,9 @@ +{ + "$schema": "https://www.unpkg.com/wrangler@4.19.1/config-schema.json", + "name": "vite-rsc-react-router", + "main": "./entry.ssr.tsx", + "workers_dev": true, + "services": [{ "binding": "RSC", "service": "vite-rsc-react-router-rsc" }], + "compatibility_date": "2025-04-01", + "compatibility_flags": ["nodejs_als"] +} diff --git a/packages/plugin-rsc/examples/react-router/package.json b/packages/plugin-rsc/examples/react-router/package.json new file mode 100644 index 000000000..c3e665895 --- /dev/null +++ b/packages/plugin-rsc/examples/react-router/package.json @@ -0,0 +1,34 @@ +{ + "name": "@vitejs/plugin-rsc-examples-react-router", + "private": true, + "license": "MIT", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build --app", + "preview": "vite preview", + "cf-dev": "vite -c ./cf/vite.config.ts", + "cf-build": "vite -c ./cf/vite.config.ts build", + "cf-preview": "vite -c ./cf/vite.config.ts preview", + "cf-release": "wrangler deploy -c dist/rsc/wrangler.json && wrangler deploy" + }, + "dependencies": { + "@vitejs/plugin-rsc": "latest", + "react": "latest", + "react-dom": "latest", + "react-router": "0.0.0-experimental-23decd7bc" + }, + "devDependencies": { + "@cloudflare/vite-plugin": "^1.8.0", + "@react-router/dev": "0.0.0-experimental-23decd7bc", + "@tailwindcss/typography": "^0.5.16", + "@tailwindcss/vite": "^4.1.4", + "@types/react": "latest", + "@types/react-dom": "latest", + "@vitejs/plugin-react": "latest", + "tailwindcss": "^4.1.4", + "vite": "^7.0.2", + "vite-plugin-inspect": "^11.2.0", + "wrangler": "^4.22.0" + } +} diff --git a/packages/plugin-rsc/examples/react-router/public/favicon.ico b/packages/plugin-rsc/examples/react-router/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..5dbdfcddcb14182535f6d32d1c900681321b1aa3 GIT binary patch literal 15086 zcmeI33v3ic7{|AFEmuJ-;v>ep_G*NPi6KM`qNryCe1PIJ8siIN1WZ(7qVa)RVtmC% z)Ch?tN+afMKm;5@rvorJk zcXnoOc4q51HBQnQH_jn!cAg&XI1?PlX>Kl^k8qq0;zkha`kY$Fxt#=KNJAE9CMdpW zqr4#g8`nTw191(+H4xW8Tmyru2I^3=J1G3emPxkPXA=3{vvuvse_WWSshqaqls^-m zgB7q8&Vk*aYRe?sn$n53dGH#%3y%^vxv{pL*-h0Z4bmb_(k6{FL7HWIz(V*HT#IcS z-wE{)+0x1U!RUPt3gB97%p}@oHxF4|6S*+Yw=_tLtxZ~`S=z6J?O^AfU>7qOX`JNBbV&8+bO0%@fhQitKIJ^O^ zpgIa__qD_y07t@DFlBJ)8SP_#^j{6jpaXt{U%=dx!qu=4u7^21lWEYHPPY5U3TcoQ zX_7W+lvZi>TapNk_X>k-KO%MC9iZp>1E`N34gHKd9tK&){jq2~7OsJ>!G0FzxQFw6G zm&Vb(2#-T|rM|n3>uAsG_hnbvUKFf3#ay@u4uTzia~NY%XgCHfx4^To4BDU@)HlV? z@EN=g^ymETa1sQK{kRwyE4Ax8?wT&GvaG@ASO}{&a17&^v`y z!oPdiSiia^oov(Z)QhG2&|FgE{M9_4hJROGbnj>#$~ZF$-G^|zPj*QApltKe?;u;uKHJ~-V!=VLkg7Kgct)l7u39f@%VG8e3f$N-B zAu3a4%ZGf)r+jPAYCSLt73m_J3}p>}6Tx0j(wg4vvKhP!DzgiWANiE;Ppvp}P2W@m z-VbYn+NXFF?6ngef5CfY6ZwKnWvNV4z6s^~yMXw2i5mv}jC$6$46g?G|CPAu{W5qF zDobS=zb2ILX9D827g*NtGe5w;>frjanY{f)hrBP_2ehBt1?`~ypvg_Ot4x1V+43P@Ve8>qd)9NX_jWdLo`Zfy zoeam9)@Dpym{4m@+LNxXBPjPKA7{3a&H+~xQvr>C_A;7=JrfK~$M2pCh>|xLz>W6SCs4qC|#V`)# z)0C|?$o>jzh<|-cpf

K7osU{Xp5PG4-K+L2G=)c3f&}H&M3wo7TlO_UJjQ-Oq&_ zjAc9=nNIYz{c3zxOiS5UfcE1}8#iI4@uy;$Q7>}u`j+OU0N<*Ezx$k{x_27+{s2Eg z`^=rhtIzCm!_UcJ?Db~Lh-=_))PT3{Q0{Mwdq;0>ZL%l3+;B&4!&xm#%HYAK|;b456Iv&&f$VQHf` z>$*K9w8T+paVwc7fLfMlhQ4)*zL_SG{~v4QR;IuX-(oRtYAhWOlh`NLoX0k$RUYMi z2Y!bqpdN}wz8q`-%>&Le@q|jFw92ErW-hma-le?S z-@OZt2EEUm4wLsuEMkt4zlyy29_3S50JAcQHTtgTC{P~%-mvCTzrjXOc|{}N`Cz`W zSj7CrXfa7lcsU0J(0uSX6G`54t^7}+OLM0n(|g4waOQ}bd3%!XLh?NX9|8G_|06Ie zD5F1)w5I~!et7lA{G^;uf7aqT`KE&2qx9|~O;s6t!gb`+zVLJyT2T)l*8l(j literal 0 HcmV?d00001 diff --git a/packages/plugin-rsc/examples/react-router/react-router-vite/entry.browser.tsx b/packages/plugin-rsc/examples/react-router/react-router-vite/entry.browser.tsx new file mode 100644 index 000000000..fcc8b3ccb --- /dev/null +++ b/packages/plugin-rsc/examples/react-router/react-router-vite/entry.browser.tsx @@ -0,0 +1,38 @@ +import { + createFromReadableStream, + createTemporaryReferenceSet, + encodeReply, + setServerCallback, +} from '@vitejs/plugin-rsc/browser' +import * as React from 'react' +import { hydrateRoot } from 'react-dom/client' +import { + unstable_RSCHydratedRouter as RSCHydratedRouter, + type unstable_RSCPayload as RSCPayload, + unstable_createCallServer as createCallServer, + unstable_getRSCStream as getRSCStream, +} from 'react-router' + +setServerCallback( + createCallServer({ + createFromReadableStream, + encodeReply, + createTemporaryReferenceSet, + }), +) + +createFromReadableStream(getRSCStream()).then( + (payload: RSCPayload) => { + React.startTransition(() => { + hydrateRoot( + document, + + + , + ) + }) + }, +) diff --git a/packages/plugin-rsc/examples/react-router/react-router-vite/entry.rsc.tsx b/packages/plugin-rsc/examples/react-router/react-router-vite/entry.rsc.tsx new file mode 100644 index 000000000..8583030ce --- /dev/null +++ b/packages/plugin-rsc/examples/react-router/react-router-vite/entry.rsc.tsx @@ -0,0 +1,31 @@ +import { + createTemporaryReferenceSet, + decodeAction, + decodeReply, + loadServerAction, + renderToReadableStream, +} from '@vitejs/plugin-rsc/rsc' +import { unstable_matchRSCServerRequest as matchRSCServerRequest } from 'react-router' + +import routes from 'virtual:react-router-routes' + +export async function fetchServer(request: Request): Promise { + return await matchRSCServerRequest({ + createTemporaryReferenceSet, + decodeReply, + decodeAction, + loadServerAction, + request, + routes, + generateResponse(match, options) { + return new Response(renderToReadableStream(match.payload, options), { + status: match.statusCode, + headers: match.headers, + }) + }, + }) +} + +if (import.meta.hot) { + import.meta.hot.accept() +} diff --git a/packages/plugin-rsc/examples/react-router/react-router-vite/entry.ssr.single.tsx b/packages/plugin-rsc/examples/react-router/react-router-vite/entry.ssr.single.tsx new file mode 100644 index 000000000..5aff3e4e3 --- /dev/null +++ b/packages/plugin-rsc/examples/react-router/react-router-vite/entry.ssr.single.tsx @@ -0,0 +1,8 @@ +import baseHandler from './entry.ssr' + +export default async function handler(request: Request) { + const rsc = await import.meta.viteRsc.loadModule< + typeof import('./entry.rsc') + >('rsc', 'index') + return baseHandler(request, rsc.fetchServer) +} diff --git a/packages/plugin-rsc/examples/react-router/react-router-vite/entry.ssr.tsx b/packages/plugin-rsc/examples/react-router/react-router-vite/entry.ssr.tsx new file mode 100644 index 000000000..4e226dc1e --- /dev/null +++ b/packages/plugin-rsc/examples/react-router/react-router-vite/entry.ssr.tsx @@ -0,0 +1,27 @@ +import { createFromReadableStream } from '@vitejs/plugin-rsc/ssr' +import * as ReactDomServer from 'react-dom/server.edge' +import { + unstable_RSCStaticRouter as RSCStaticRouter, + unstable_routeRSCServerRequest as routeRSCServerRequest, +} from 'react-router' + +export default async function handler( + request: Request, + fetchServer: (request: Request) => Promise, +): Promise { + const bootstrapScriptContent = + await import.meta.viteRsc.loadBootstrapScriptContent('index') + return routeRSCServerRequest({ + request, + fetchServer, + createFromReadableStream: (body) => createFromReadableStream(body), + renderHTML(getPayload) { + return ReactDomServer.renderToReadableStream( + , + { + bootstrapScriptContent, + }, + ) + }, + }) +} diff --git a/packages/plugin-rsc/examples/react-router/react-router-vite/plugin.ts b/packages/plugin-rsc/examples/react-router/react-router-vite/plugin.ts new file mode 100644 index 000000000..b9850bc1b --- /dev/null +++ b/packages/plugin-rsc/examples/react-router/react-router-vite/plugin.ts @@ -0,0 +1,123 @@ +import assert from 'node:assert/strict' +import path from 'node:path' +import type { Config } from '@react-router/dev/config' +import type { RouteConfigEntry } from '@react-router/dev/routes' +import { type Plugin, createIdResolver, runnerImport } from 'vite' + +export function reactRouter(): Plugin[] { + let idResolver: ReturnType + + return [ + { + name: 'react-router:config', + configResolved(config) { + idResolver = createIdResolver(config) + }, + resolveId(source) { + if (source === 'virtual:react-router-routes') { + return '\0' + source + } + }, + async load(id) { + if (id === '\0virtual:react-router-routes') { + const findFile = (id: string) => idResolver(this.environment, id) + const config = await readReactRouterConfig(findFile) + this.addWatchFile(config.configFile) + this.addWatchFile(config.routesFile) + const code = generateRoutesCode(config) + return code + } + }, + }, + ] +} + +async function readReactRouterConfig( + findFile: (id: string) => Promise, +) { + // find react-router.config.ts + const configFile = await findFile('./react-router.config') + assert(configFile, "Cannot find 'react-router.config' file") + const configImport = await runnerImport<{ default: Config }>(configFile) + const appDirectory = path.resolve( + configImport.module.default.appDirectory ?? 'app', + ) + + // find routes.ts + const routesFile = await findFile(path.join(appDirectory, 'routes')) + assert(routesFile, "Cannot find 'routes' file") + const routesImport = await runnerImport<{ + default: RouteConfigEntry[] + }>(routesFile) + + // find root.tsx + const rootFile = await findFile(path.join(appDirectory, 'root')) + assert(rootFile, "Cannot find 'root' file") + + const routes = [ + { + id: 'root', + path: '', + file: rootFile, + children: routesImport.module.default, + }, + ] + + return { configFile, routesFile, appDirectory, routes } +} + +// copied from +// https://github.com/jacob-ebey/parcel-plugin-react-router/blob/9385be813534537dfb0fe640a3e5c5607be3b61d/packages/resolver/src/resolver.ts + +function generateRoutesCode(config: { + appDirectory: string + routes: RouteConfigEntry[] +}) { + let code = 'export default [' + const closeRouteSymbol = Symbol('CLOSE_ROUTE') + let stack: Array = [ + ...config.routes, + ] + while (stack.length > 0) { + const route = stack.pop() + if (!route) break + if (route === closeRouteSymbol) { + code += ']},' + continue + } + code += '{' + // TODO: route-module transform + code += `lazy: () => import(${JSON.stringify( + path.resolve(config.appDirectory, route.file), + )}),` + code += `id: ${JSON.stringify( + route.id || createRouteId(route.file, config.appDirectory), + )},` + if (typeof route.path === 'string') { + code += `path: ${JSON.stringify(route.path)},` + } + if (route.index) { + code += `index: true,` + } + if (route.caseSensitive) { + code += `caseSensitive: true,` + } + if (route.children) { + code += ['children:['] + stack.push(closeRouteSymbol) + stack.push(...[...route.children].reverse()) + } else { + code += '},' + } + } + code += '];\n' + + return code +} + +function createRouteId(file: string, appDirectory: string) { + return path + .relative(appDirectory, file) + .replace(/\\+/, '/') + .slice(0, -path.extname(file).length) +} diff --git a/packages/plugin-rsc/examples/react-router/react-router-vite/server-hmr.tsx b/packages/plugin-rsc/examples/react-router/react-router-vite/server-hmr.tsx new file mode 100644 index 000000000..0b1e799af --- /dev/null +++ b/packages/plugin-rsc/examples/react-router/react-router-vite/server-hmr.tsx @@ -0,0 +1,19 @@ +'use client' + +import React from 'react' +import { useNavigate } from 'react-router' + +export function ServerHmr() { + if (import.meta.hot) { + const navigate = useNavigate() + React.useEffect(() => { + const refetch = () => + navigate(window.location.pathname, { replace: true }) + import.meta.hot!.on('rsc:update', refetch) + return () => { + import.meta.hot!.off('rsc:update', refetch) + } + }, [navigate]) + } + return null +} diff --git a/packages/plugin-rsc/examples/react-router/react-router-vite/types.d.ts b/packages/plugin-rsc/examples/react-router/react-router-vite/types.d.ts new file mode 100644 index 000000000..2982ced94 --- /dev/null +++ b/packages/plugin-rsc/examples/react-router/react-router-vite/types.d.ts @@ -0,0 +1,11 @@ +/// +/// + +declare module 'react-dom/server.edge' { + export * from 'react-dom/server' +} + +declare module 'virtual:react-router-routes' { + const routes: any + export default routes +} diff --git a/packages/plugin-rsc/examples/react-router/react-router.config.ts b/packages/plugin-rsc/examples/react-router/react-router.config.ts new file mode 100644 index 000000000..c7029a54b --- /dev/null +++ b/packages/plugin-rsc/examples/react-router/react-router.config.ts @@ -0,0 +1,5 @@ +import type { Config } from '@react-router/dev/config' + +export default { + appDirectory: './app', +} satisfies Config diff --git a/packages/plugin-rsc/examples/react-router/tsconfig.json b/packages/plugin-rsc/examples/react-router/tsconfig.json new file mode 100644 index 000000000..20b648a36 --- /dev/null +++ b/packages/plugin-rsc/examples/react-router/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "allowImportingTsExtensions": true, + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "skipLibCheck": true, + "verbatimModuleSyntax": true, + "noEmit": true, + "moduleResolution": "Bundler", + "module": "ESNext", + "target": "ESNext", + "lib": ["ESNext", "DOM", "DOM.Iterable"], + "jsx": "react-jsx" + } +} diff --git a/packages/plugin-rsc/examples/react-router/vite.config.ts b/packages/plugin-rsc/examples/react-router/vite.config.ts new file mode 100644 index 000000000..d02451810 --- /dev/null +++ b/packages/plugin-rsc/examples/react-router/vite.config.ts @@ -0,0 +1,33 @@ +import rsc from '@vitejs/plugin-rsc' +import tailwindcss from '@tailwindcss/vite' +import react from '@vitejs/plugin-react' +import { defineConfig } from 'vite' +import inspect from 'vite-plugin-inspect' +import { reactRouter } from './react-router-vite/plugin' + +export default defineConfig({ + clearScreen: false, + build: { + minify: false, + }, + plugins: [ + tailwindcss(), + react(), + reactRouter(), + rsc({ + entries: { + client: './react-router-vite/entry.browser.tsx', + ssr: './react-router-vite/entry.ssr.single.tsx', + rsc: './react-router-vite/entry.rsc.tsx', + }, + serverHandler: { + environmentName: 'ssr', + entryName: 'index', + }, + }), + inspect(), + ], + optimizeDeps: { + include: ['react-router', 'react-router/internal/react-server-client'], + }, +}) as any diff --git a/packages/plugin-rsc/examples/ssg/README.md b/packages/plugin-rsc/examples/ssg/README.md new file mode 100644 index 000000000..c5da5218d --- /dev/null +++ b/packages/plugin-rsc/examples/ssg/README.md @@ -0,0 +1,15 @@ +# SSG + MDX example + +This example demonstrates: + +- Client component inside MDX +- MDX HMR +- Static site generation + +## usage + +```js +pnpm dev +pnpm build +pnpm preview +``` diff --git a/packages/plugin-rsc/examples/ssg/package.json b/packages/plugin-rsc/examples/ssg/package.json new file mode 100644 index 000000000..13e508cbd --- /dev/null +++ b/packages/plugin-rsc/examples/ssg/package.json @@ -0,0 +1,24 @@ +{ + "name": "@vitejs/plugin-rsc-examples-ssg", + "version": "0.0.0", + "private": true, + "license": "MIT", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "@vitejs/plugin-rsc": "latest", + "react": "latest", + "react-dom": "latest" + }, + "devDependencies": { + "@mdx-js/rollup": "^3.1.0", + "@types/react": "latest", + "@types/react-dom": "latest", + "@vitejs/plugin-react": "latest", + "vite-plugin-inspect": "latest" + } +} diff --git a/packages/plugin-rsc/examples/ssg/public/favicon.ico b/packages/plugin-rsc/examples/ssg/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..4aff076603f8f01fb3b7d8b5e38df77cc1efdd69 GIT binary patch literal 4286 zcmc(jeOQ&{9mmi9Y5(N4wKaEHmR6cpj%~hXo13+jb7bn2986aeCEr<~nOgZmpr$E` zf`o4brE!#(M1gZu646vl&`1pxMdw?|n=m>c+@F0P;mO>tlyk0ib#r~sdCqh0=e|Gp z@BY2q2Z!Sa`s>)yVZAyw{@CGY>u@-_O1kCfFIo4mH+}bzU$dHTI2`!e8Vx4;1ZKh^ zxKi)yD84^;xC-;kZcMM8u;Hxl=0 zrl(}R$D9P?+i+ezRaK9fv=7rK8`IkjJ!J!H{(<@MS+!R~`O?{>ox=Qa3-rsRXz(63 z2OX9VwCuy2qfp=E%do9`=6nq%BuDe7!jtKI6u6hZ(Up|S59#T~^xp-0ue5F~Z+jVS zZek&3&_;~E69#PN+~91w#MclR`Z@H~e)M!gs0@p&odJ103qFqWoKTLTHzP(@mAxzj(#e6hoycovD(ij}ivB{e#lRuP=cG5k$iaRo)dtx=G zM`-QOi1(><%*tYDlHdB;$}2ES5-{NlF)zQ3nIet}%c&n1$C&sM{8FwGkZ_g`sUGg! z3T>ptZyW}H`KjW=1Y|*Rxo@*u@#a=udF@Tij3~@2VhCG&oq>tVm=kl5JGI?yq#tEV znyQW7d%s`BnUNog;R7)^G4l^7CpCJ{a9%Yn`Yp_y*_byXFtZ{t(-+7Viy(9{&V^aD zbs2uD6#Nr0*t#nRmP8cFH{WZ{6~oeCpO^7?twAxY_*(EPM7@rgXEDr!SrITj3c}}8 zG&hNdv%li*9q=>hZiT(2yL8>xDH{YUC=?&&*$uMcN6JZFoDoXp$8j^YkZG`J2F#yD zT~q{{;?mf*+{vkkRh*ogz;80kX{(g`^V}P1yAv!$FZ=}TTrvCu$T`)zJ@6=Iw#2~7 zDX=^omRbzcx$<@-Pv=~u!|o<}xvTke<^?+EHqb5)?vdJw!(HPN#foO70Yl-k>>`W6NT?SD*WDt)y&<{AiS7Soz8*XK=RiTNo5?#oDKo7j&K*4as9+{Y$WBf^0FF zhPW_7T*Y)e2oGsl4=Su|Js>7q|IHS&LZG8pDR+w@NcCf#pc|Y1m!a|mxHMN<5IFx1 z8~>pkE;}TKz}oRNCQKpRUBH8fptD@dQYW$4vY4(*To35FgLJ?22Ui7UQ&lU1W0kw( zmA{hV*u|UYZ&JK{x(u?0L*`#0{co^Y3@IiNbQp!w zO~^{sk=0O8+H8YsRd7@>zI!0-dJcAo!6iFvdtPxEsQr*FoZ{FpidEZFc~oV-Tk*|$ zOiZ@A>Uvn-1u7yJ!OXeJSCKGPdDF_>p{gGfEe6%GMd?tjc)TqC{6ur_9{_tS27fUO z62lPLLUzcOFS-?jc~K-4?ZfXl{PI|{{KR7G7oUNpZc?8j4+TjnD#%v;R^FZ=O;ZgC zQw<4K9kXibq*$#{4s=ZGD|!+NHE*G=kG!mVVn4kRE-IKSOQ7zG>Zpg*Dnk!_{PpKI z^ege$`kG68tF7N7moCV*M=`td75h4u#3o_hR4h!F4JOMLvlF2rN59`Pl%M4|o^y(g zS}=__`)A81R}DOVN=Mz3(8JOR)qGpx>fXX;*=W+gG@L^E>t@wck4JM=z=<;1T8?r+ z2K1tp)T{Jd($Pnl{u<(`)5^1QqbH<3;_5B+5|_m^P~VlR|NpaD%c*J7PrU}Yugsfq z6=KWbwaXB4Ua4MOgTyu9jE-TFWv}nL35VJirUPP1tyZ~^yM!slY|{1Zn*D!(@9X_P D`VsgZ literal 0 HcmV?d00001 diff --git a/packages/plugin-rsc/examples/ssg/src/counter.tsx b/packages/plugin-rsc/examples/ssg/src/counter.tsx new file mode 100644 index 000000000..79444524a --- /dev/null +++ b/packages/plugin-rsc/examples/ssg/src/counter.tsx @@ -0,0 +1,11 @@ +'use client' + +import React from 'react' + +export function Counter() { + const [count, setCount] = React.useState(0) + + return ( + + ) +} diff --git a/packages/plugin-rsc/examples/ssg/src/framework/entry.browser.tsx b/packages/plugin-rsc/examples/ssg/src/framework/entry.browser.tsx new file mode 100644 index 000000000..6ef285d86 --- /dev/null +++ b/packages/plugin-rsc/examples/ssg/src/framework/entry.browser.tsx @@ -0,0 +1,97 @@ +import * as ReactClient from '@vitejs/plugin-rsc/browser' +import { getRscStreamFromHtml } from '@vitejs/plugin-rsc/rsc-html-stream/browser' +import React from 'react' +import ReactDomClient from 'react-dom/client' +import { RSC_POSTFIX, type RscPayload } from './shared' + +async function hydrate(): Promise { + async function onNavigation() { + const url = new URL(window.location.href) + url.pathname = url.pathname + RSC_POSTFIX + const payload = await ReactClient.createFromFetch(fetch(url)) + setPayload(payload) + } + + const initialPayload = await ReactClient.createFromReadableStream( + getRscStreamFromHtml(), + ) + + let setPayload: (v: RscPayload) => void + + function BrowserRoot() { + const [payload, setPayload_] = React.useState(initialPayload) + + React.useEffect(() => { + setPayload = (v) => React.startTransition(() => setPayload_(v)) + }, [setPayload_]) + + React.useEffect(() => { + return listenNavigation(() => onNavigation()) + }, []) + + return payload.root + } + + const browserRoot = ( + + + + ) + + ReactDomClient.hydrateRoot(document, browserRoot) + + if (import.meta.hot) { + import.meta.hot.on('rsc:update', () => { + window.history.replaceState({}, '', window.location.href) + }) + } +} + +function listenNavigation(onNavigation: () => void): () => void { + window.addEventListener('popstate', onNavigation) + + const oldPushState = window.history.pushState + window.history.pushState = function (...args) { + const res = oldPushState.apply(this, args) + onNavigation() + return res + } + + const oldReplaceState = window.history.replaceState + window.history.replaceState = function (...args) { + const res = oldReplaceState.apply(this, args) + onNavigation() + return res + } + + function onClick(e: MouseEvent) { + let link = (e.target as Element).closest('a') + if ( + link && + link instanceof HTMLAnchorElement && + link.href && + (!link.target || link.target === '_self') && + link.origin === location.origin && + !link.hasAttribute('download') && + e.button === 0 && // left clicks only + !e.metaKey && // open in new tab (mac) + !e.ctrlKey && // open in new tab (windows) + !e.altKey && // download + !e.shiftKey && + !e.defaultPrevented + ) { + e.preventDefault() + history.pushState(null, '', link.href) + } + } + document.addEventListener('click', onClick) + + return () => { + document.removeEventListener('click', onClick) + window.removeEventListener('popstate', onNavigation) + window.history.pushState = oldPushState + window.history.replaceState = oldReplaceState + } +} + +hydrate() diff --git a/packages/plugin-rsc/examples/ssg/src/framework/entry.rsc.tsx b/packages/plugin-rsc/examples/ssg/src/framework/entry.rsc.tsx new file mode 100644 index 000000000..d0d9d2354 --- /dev/null +++ b/packages/plugin-rsc/examples/ssg/src/framework/entry.rsc.tsx @@ -0,0 +1,38 @@ +import * as ReactServer from '@vitejs/plugin-rsc/rsc' +import { Root, getStaticPaths } from '../root' +import { RSC_POSTFIX, type RscPayload } from './shared' + +export { getStaticPaths } + +export default async function handler(request: Request): Promise { + let url = new URL(request.url) + let isRscRequest = false + if (url.pathname.endsWith(RSC_POSTFIX)) { + isRscRequest = true + url.pathname = url.pathname.slice(0, -RSC_POSTFIX.length) + } + + const rscPayload: RscPayload = { root: } + const rscStream = ReactServer.renderToReadableStream(rscPayload) + + if (isRscRequest) { + return new Response(rscStream, { + headers: { + 'content-type': 'text/x-component;charset=utf-8', + vary: 'accept', + }, + }) + } + + const ssr = await import.meta.viteRsc.loadModule< + typeof import('./entry.ssr') + >('ssr', 'index') + const htmlStream = await ssr.renderHtml(rscStream) + + return new Response(htmlStream, { + headers: { + 'content-type': 'text/html;charset=utf-8', + vary: 'accept', + }, + }) +} diff --git a/packages/plugin-rsc/examples/ssg/src/framework/entry.ssr.tsx b/packages/plugin-rsc/examples/ssg/src/framework/entry.ssr.tsx new file mode 100644 index 000000000..452978250 --- /dev/null +++ b/packages/plugin-rsc/examples/ssg/src/framework/entry.ssr.tsx @@ -0,0 +1,29 @@ +import { injectRscStreamToHtml } from '@vitejs/plugin-rsc/rsc-html-stream/ssr' +import * as ReactClient from '@vitejs/plugin-rsc/ssr' +import React from 'react' +import * as ReactDomServer from 'react-dom/server.edge' +import type { RscPayload } from './shared' + +export async function renderHtml(rscStream: ReadableStream) { + const [rscStream1, rscStream2] = rscStream.tee() + + let payload: Promise + function SsrRoot() { + payload ??= ReactClient.createFromReadableStream(rscStream1) + const root = React.use(payload).root + return root + } + + const bootstrapScriptContent = + await import.meta.viteRsc.loadBootstrapScriptContent('index') + + const htmlStream = await ReactDomServer.renderToReadableStream(, { + bootstrapScriptContent, + }) + // for SSG + await htmlStream.allReady + + let responseStream: ReadableStream = htmlStream + responseStream = responseStream.pipeThrough(injectRscStreamToHtml(rscStream2)) + return responseStream +} diff --git a/packages/plugin-rsc/examples/ssg/src/framework/shared.tsx b/packages/plugin-rsc/examples/ssg/src/framework/shared.tsx new file mode 100644 index 000000000..e602b35d8 --- /dev/null +++ b/packages/plugin-rsc/examples/ssg/src/framework/shared.tsx @@ -0,0 +1,7 @@ +import type React from 'react' + +export const RSC_POSTFIX = '_.rsc' + +export type RscPayload = { + root: React.ReactNode +} diff --git a/packages/plugin-rsc/examples/ssg/src/posts/counter.mdx b/packages/plugin-rsc/examples/ssg/src/posts/counter.mdx new file mode 100644 index 000000000..1654ee8b4 --- /dev/null +++ b/packages/plugin-rsc/examples/ssg/src/posts/counter.mdx @@ -0,0 +1,7 @@ +export const title = 'Counter in MDX' + +import { Counter } from '../counter' + +# Counter in MDX + + diff --git a/packages/plugin-rsc/examples/ssg/src/posts/oxc.mdx b/packages/plugin-rsc/examples/ssg/src/posts/oxc.mdx new file mode 100644 index 000000000..5cff86b88 --- /dev/null +++ b/packages/plugin-rsc/examples/ssg/src/posts/oxc.mdx @@ -0,0 +1,3 @@ +# Oxc + +The fastest JavaScript language toolchain! diff --git a/packages/plugin-rsc/examples/ssg/src/posts/rolldown.mdx b/packages/plugin-rsc/examples/ssg/src/posts/rolldown.mdx new file mode 100644 index 000000000..71e2931a0 --- /dev/null +++ b/packages/plugin-rsc/examples/ssg/src/posts/rolldown.mdx @@ -0,0 +1,3 @@ +# Rolldown + +The fastest JavaScript bundler! diff --git a/packages/plugin-rsc/examples/ssg/src/posts/vite.mdx b/packages/plugin-rsc/examples/ssg/src/posts/vite.mdx new file mode 100644 index 000000000..b510d3862 --- /dev/null +++ b/packages/plugin-rsc/examples/ssg/src/posts/vite.mdx @@ -0,0 +1,3 @@ +# Vite + +The build tool for the web! diff --git a/packages/plugin-rsc/examples/ssg/src/posts/vitest.mdx b/packages/plugin-rsc/examples/ssg/src/posts/vitest.mdx new file mode 100644 index 000000000..9b534e107 --- /dev/null +++ b/packages/plugin-rsc/examples/ssg/src/posts/vitest.mdx @@ -0,0 +1,3 @@ +# Vitest + +Next-generation test runner! diff --git a/packages/plugin-rsc/examples/ssg/src/react.d.ts b/packages/plugin-rsc/examples/ssg/src/react.d.ts new file mode 100644 index 000000000..d92ea675b --- /dev/null +++ b/packages/plugin-rsc/examples/ssg/src/react.d.ts @@ -0,0 +1,3 @@ +declare module 'react-dom/server.edge' { + export * from 'react-dom/server' +} diff --git a/packages/plugin-rsc/examples/ssg/src/root.tsx b/packages/plugin-rsc/examples/ssg/src/root.tsx new file mode 100644 index 000000000..cb3ecb122 --- /dev/null +++ b/packages/plugin-rsc/examples/ssg/src/root.tsx @@ -0,0 +1,70 @@ +import { Counter } from './counter' + +async function getPosts() { + let glob = import.meta.glob('./posts/*.mdx', { eager: true }) + glob = Object.fromEntries( + Object.entries(glob).map(([k, v]) => [ + k.slice('./posts'.length, -'.mdx'.length), + v, + ]), + ) + return glob +} + +export async function getStaticPaths() { + const posts = await getPosts() + return ['/', ...Object.keys(posts)] +} + +export async function Root({ url }: { url: URL }) { + const posts = await getPosts() + + async function RootContent() { + if (url.pathname === '/') { + return ( +

+ ) + } + + const module = posts[url.pathname] + if (!!module) { + const Component = (module as any).default + return + } + + // TODO: how to 404? + return

Not found

+ } + + return ( + + + + + RSC MDX SSG + + +
+

+ RSC + MDX + SSG +

+ + + Rendered at {new Date().toISOString()} + +
+
+ +
+ + + ) +} diff --git a/packages/plugin-rsc/examples/ssg/tsconfig.json b/packages/plugin-rsc/examples/ssg/tsconfig.json new file mode 100644 index 000000000..4c355ed3c --- /dev/null +++ b/packages/plugin-rsc/examples/ssg/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "erasableSyntaxOnly": true, + "allowImportingTsExtensions": true, + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "skipLibCheck": true, + "verbatimModuleSyntax": true, + "noEmit": true, + "moduleResolution": "Bundler", + "module": "ESNext", + "target": "ESNext", + "lib": ["ESNext", "DOM", "DOM.Iterable"], + "types": ["vite/client", "@vitejs/plugin-rsc/types"], + "jsx": "react-jsx" + } +} diff --git a/packages/plugin-rsc/examples/ssg/vite.config.ts b/packages/plugin-rsc/examples/ssg/vite.config.ts new file mode 100644 index 000000000..05807fd2f --- /dev/null +++ b/packages/plugin-rsc/examples/ssg/vite.config.ts @@ -0,0 +1,96 @@ +import assert from 'node:assert' +import fs from 'node:fs' +import path from 'node:path' +import { Readable } from 'node:stream' +import { pathToFileURL } from 'node:url' +import rsc from '@vitejs/plugin-rsc' +import mdx from '@mdx-js/rollup' +import react from '@vitejs/plugin-react' +import { type Plugin, type ResolvedConfig, defineConfig } from 'vite' +import inspect from 'vite-plugin-inspect' +import { RSC_POSTFIX } from './src/framework/shared' + +export default defineConfig((env) => ({ + plugins: [ + mdx(), + react(), + rsc({ + entries: { + client: './src/framework/entry.browser.tsx', + rsc: './src/framework/entry.rsc.tsx', + ssr: './src/framework/entry.ssr.tsx', + }, + serverHandler: env.isPreview ? false : undefined, + }), + rscSsgPlugin(), + inspect(), + ], +})) + +function rscSsgPlugin(): Plugin[] { + return [ + { + name: 'rsc-ssg', + config(_config, env) { + if (env.isPreview) { + return { + appType: 'mpa', + } + } + }, + // Use post ssr writeBundle to wait for app is fully built. + // On Vite 7, you can use `buildApp` hook instead. + writeBundle: { + order: 'post', + async handler() { + if (this.environment.name === 'ssr') { + const config = this.environment.getTopLevelConfig() + await renderStatic(config) + } + }, + }, + }, + ] +} + +async function renderStatic(config: ResolvedConfig) { + // import server entry + const entryPath = path.join(config.environments.rsc.build.outDir, 'index.js') + const entry: typeof import('./src/framework/entry.rsc') = await import( + pathToFileURL(entryPath).href + ) + + // entry provides a list of static paths + const staticPaths = await entry.getStaticPaths() + + // render rsc and html + const baseDir = config.environments.client.build.outDir + for (const htmlPath of staticPaths) { + config.logger.info('[vite-rsc:ssg] -> ' + htmlPath) + const rscPath = htmlPath + RSC_POSTFIX + const htmlResponse = await entry.default( + new Request(new URL(htmlPath, 'http://ssg.local')), + ) + assert.equal(htmlResponse.status, 200) + await fs.promises.writeFile( + path.join(baseDir, normalizeHtmlFilePath(htmlPath)), + Readable.fromWeb(htmlResponse.body as any), + ) + + const rscResponse = await entry.default( + new Request(new URL(rscPath, 'http://ssg.local')), + ) + assert.equal(rscResponse.status, 200) + await fs.promises.writeFile( + path.join(baseDir, rscPath), + Readable.fromWeb(rscResponse.body as any), + ) + } +} + +function normalizeHtmlFilePath(p: string) { + if (p.endsWith('/')) { + return p + 'index.html' + } + return p + '.html' +} diff --git a/packages/plugin-rsc/examples/starter-cf-single/README.md b/packages/plugin-rsc/examples/starter-cf-single/README.md new file mode 100644 index 000000000..78d862b66 --- /dev/null +++ b/packages/plugin-rsc/examples/starter-cf-single/README.md @@ -0,0 +1,23 @@ +# Vite + RSC + Cloudflare Workers + +https://vite-rsc-starter.hiro18181.workers.dev + +[examples/starter](https://github.com/hi-ogawa/vite-plugins/tree/main/packages/rsc/examples/starter) integrated with [`@cloudflare/vite-plugin`](https://github.com/cloudflare/workers-sdk/tree/main/packages/vite-plugin-cloudflare). + +The difference from [examples/react-router](https://github.com/hi-ogawa/vite-plugins/tree/main/packages/rsc/examples/react-router) is that this doesn't require two workers. + +- RSC environment always runs on Cloudflare Workers. +- During development, SSR environment runs as Vite's deafult Node environment. +- During production, SSR environment build output is directly imported into RSC environment build and both codes run on the same worker. + +Such communication mechanism is enabled via `rsc({ loadModuleDevProxy: true })` plugin option. + +```sh +# run dev server +npm run dev + +# build for production and preview +npm run build +npm run preview +npm run release +``` diff --git a/packages/plugin-rsc/examples/starter-cf-single/package.json b/packages/plugin-rsc/examples/starter-cf-single/package.json new file mode 100644 index 000000000..4398bd68d --- /dev/null +++ b/packages/plugin-rsc/examples/starter-cf-single/package.json @@ -0,0 +1,24 @@ +{ + "name": "@vitejs/plugin-rsc-examples-starter-cf-single", + "version": "0.0.0", + "private": true, + "license": "MIT", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview", + "release": "wrangler deploy" + }, + "dependencies": { + "@vitejs/plugin-rsc": "latest", + "react": "latest", + "react-dom": "latest" + }, + "devDependencies": { + "@cloudflare/vite-plugin": "^1.8.0", + "@types/react": "latest", + "@types/react-dom": "latest", + "@vitejs/plugin-react": "latest" + } +} diff --git a/packages/plugin-rsc/examples/starter-cf-single/public/vite.svg b/packages/plugin-rsc/examples/starter-cf-single/public/vite.svg new file mode 100644 index 000000000..e7b8dfb1b --- /dev/null +++ b/packages/plugin-rsc/examples/starter-cf-single/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/plugin-rsc/examples/starter-cf-single/src/action.tsx b/packages/plugin-rsc/examples/starter-cf-single/src/action.tsx new file mode 100644 index 000000000..4fc55d65b --- /dev/null +++ b/packages/plugin-rsc/examples/starter-cf-single/src/action.tsx @@ -0,0 +1,11 @@ +'use server' + +let serverCounter = 0 + +export async function getServerCounter() { + return serverCounter +} + +export async function updateServerCounter(change: number) { + serverCounter += change +} diff --git a/packages/plugin-rsc/examples/starter-cf-single/src/assets/react.svg b/packages/plugin-rsc/examples/starter-cf-single/src/assets/react.svg new file mode 100644 index 000000000..6c87de9bb --- /dev/null +++ b/packages/plugin-rsc/examples/starter-cf-single/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/plugin-rsc/examples/starter-cf-single/src/client.tsx b/packages/plugin-rsc/examples/starter-cf-single/src/client.tsx new file mode 100644 index 000000000..29bb5d367 --- /dev/null +++ b/packages/plugin-rsc/examples/starter-cf-single/src/client.tsx @@ -0,0 +1,13 @@ +'use client' + +import React from 'react' + +export function ClientCounter() { + const [count, setCount] = React.useState(0) + + return ( + + ) +} diff --git a/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.browser.tsx b/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.browser.tsx new file mode 100644 index 000000000..9ba4ae4ee --- /dev/null +++ b/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.browser.tsx @@ -0,0 +1,127 @@ +import * as ReactClient from '@vitejs/plugin-rsc/browser' +import { getRscStreamFromHtml } from '@vitejs/plugin-rsc/rsc-html-stream/browser' +import React from 'react' +import * as ReactDOMClient from 'react-dom/client' +import type { RscPayload } from './entry.rsc' + +async function main() { + // stash `setPayload` function to trigger re-rendering + // from outside of `BrowserRoot` component (e.g. server function call, navigation, hmr) + let setPayload: (v: RscPayload) => void + + // deserialize RSC stream back to React VDOM for CSR + const initialPayload = await ReactClient.createFromReadableStream( + // initial RSC stream is injected in SSR stream as + getRscStreamFromHtml(), + ) + + // browser root component to (re-)render RSC payload as state + function BrowserRoot() { + const [payload, setPayload_] = React.useState(initialPayload) + + React.useEffect(() => { + setPayload = (v) => React.startTransition(() => setPayload_(v)) + }, [setPayload_]) + + // re-fetch/render on client side navigation + React.useEffect(() => { + return listenNavigation(() => fetchRscPayload()) + }, []) + + return payload.root + } + + // re-fetch RSC and trigger re-rendering + async function fetchRscPayload() { + const payload = await ReactClient.createFromFetch( + fetch(window.location.href), + ) + setPayload(payload) + } + + // register a handler which will be internally called by React + // on server function request after hydration. + ReactClient.setServerCallback(async (id, args) => { + const url = new URL(window.location.href) + const temporaryReferences = ReactClient.createTemporaryReferenceSet() + const payload = await ReactClient.createFromFetch( + fetch(url, { + method: 'POST', + body: await ReactClient.encodeReply(args, { temporaryReferences }), + headers: { + 'x-rsc-action': id, + }, + }), + { temporaryReferences }, + ) + setPayload(payload) + return payload.returnValue + }) + + // hydration + const browserRoot = ( + + + + ) + ReactDOMClient.hydrateRoot(document, browserRoot, { + formState: initialPayload.formState, + }) + + // implement server HMR by trigering re-fetch/render of RSC upon server code change + if (import.meta.hot) { + import.meta.hot.on('rsc:update', () => { + fetchRscPayload() + }) + } +} + +// a little helper to setup events interception for client side navigation +function listenNavigation(onNavigation: () => void) { + window.addEventListener('popstate', onNavigation) + + const oldPushState = window.history.pushState + window.history.pushState = function (...args) { + const res = oldPushState.apply(this, args) + onNavigation() + return res + } + + const oldReplaceState = window.history.replaceState + window.history.replaceState = function (...args) { + const res = oldReplaceState.apply(this, args) + onNavigation() + return res + } + + function onClick(e: MouseEvent) { + let link = (e.target as Element).closest('a') + if ( + link && + link instanceof HTMLAnchorElement && + link.href && + (!link.target || link.target === '_self') && + link.origin === location.origin && + !link.hasAttribute('download') && + e.button === 0 && // left clicks only + !e.metaKey && // open in new tab (mac) + !e.ctrlKey && // open in new tab (windows) + !e.altKey && // download + !e.shiftKey && + !e.defaultPrevented + ) { + e.preventDefault() + history.pushState(null, '', link.href) + } + } + document.addEventListener('click', onClick) + + return () => { + document.removeEventListener('click', onClick) + window.removeEventListener('popstate', onNavigation) + window.history.pushState = oldPushState + window.history.replaceState = oldReplaceState + } +} + +main() diff --git a/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.rsc.tsx b/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.rsc.tsx new file mode 100644 index 000000000..a3060d2f4 --- /dev/null +++ b/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.rsc.tsx @@ -0,0 +1,95 @@ +import * as ReactServer from '@vitejs/plugin-rsc/rsc' +import type { ReactFormState } from 'react-dom/client' +import { Root } from '../root.tsx' + +export type RscPayload = { + root: React.ReactNode + returnValue?: unknown + formState?: ReactFormState +} + +async function handler(request: Request): Promise { + // handle server function request + const isAction = request.method === 'POST' + let returnValue: unknown | undefined + let formState: ReactFormState | undefined + let temporaryReferences: unknown | undefined + if (isAction) { + // x-rsc-action header exists when action is called via `ReactClient.setServerCallback`. + const actionId = request.headers.get('x-rsc-action') + if (actionId) { + const contentType = request.headers.get('content-type') + const body = contentType?.startsWith('multipart/form-data') + ? await request.formData() + : await request.text() + temporaryReferences = ReactServer.createTemporaryReferenceSet() + const args = await ReactServer.decodeReply(body, { temporaryReferences }) + const action = await ReactServer.loadServerAction(actionId) + returnValue = await action.apply(null, args) + } else { + // otherwise server function is called via `
` + // before hydration (e.g. when javascript is disabled). + // aka progressive enhancement. + const formData = await request.formData() + const decodedAction = await ReactServer.decodeAction(formData) + const result = await decodedAction() + formState = await ReactServer.decodeFormState(result, formData) + } + } + + // serialization from React VDOM tree to RSC stream. + // we render RSC stream after handling server function request + // so that new render reflects updated state from server function call + // to achieve single round trip to mutate and fetch from server. + const rscStream = ReactServer.renderToReadableStream({ + // in this example, we always render the same `` + root: , + returnValue, + formState, + }) + + // respond RSC stream without HTML rendering based on framework's convention. + // here we use request header `content-type`. + // additionally we allow `?__rsc` and `?__html` to easily view payload directly. + const url = new URL(request.url) + const isRscRequest = + (!request.headers.get('accept')?.includes('text/html') && + !url.searchParams.has('__html')) || + url.searchParams.has('__rsc') + + if (isRscRequest) { + return new Response(rscStream, { + headers: { + 'content-type': 'text/x-component;charset=utf-8', + vary: 'accept', + }, + }) + } + + const { renderHTML } = await import.meta.viteRsc.loadModule< + typeof import('./entry.ssr.tsx') + >('ssr', 'index') + const htmlStream = await renderHTML(rscStream, { + formState, + // allow quick simulation of javscript disabled browser + debugNojs: url.searchParams.has('__nojs'), + }) + + // respond html + return new Response(htmlStream, { + headers: { + 'Content-type': 'text/html', + vary: 'accept', + }, + }) +} + +export default { + fetch(request: Request) { + return handler(request) + }, +} + +if (import.meta.hot) { + import.meta.hot.accept() +} diff --git a/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.ssr.tsx b/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.ssr.tsx new file mode 100644 index 000000000..c9e0fab93 --- /dev/null +++ b/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.ssr.tsx @@ -0,0 +1,55 @@ +import { injectRscStreamToHtml } from '@vitejs/plugin-rsc/rsc-html-stream/ssr' // helper API +import * as ReactClient from '@vitejs/plugin-rsc/ssr' // RSC API +import React from 'react' +import type { ReactFormState } from 'react-dom/client' +import * as ReactDOMServer from 'react-dom/server.edge' +import type { RscPayload } from './entry.rsc' + +export type RenderHTML = typeof renderHTML + +export async function renderHTML( + rscStream: ReadableStream, + options?: { + formState?: ReactFormState + nonce?: string + debugNojs?: boolean + }, +) { + // duplicate one RSC stream into two. + // - one for SSR (ReactClient.createFromReadableStream below) + // - another for browser hydration payload by injecting . + const [rscStream1, rscStream2] = rscStream.tee() + + // deserialize RSC stream back to React VDOM + let payload: Promise + function SsrRoot() { + // deserialization needs to be kicked off inside ReactDOMServer context + // for ReactDomServer preinit/preloading to work + payload ??= ReactClient.createFromReadableStream(rscStream1) + return React.use(payload).root + } + + // render html (traditional SSR) + const bootstrapScriptContent = + await import.meta.viteRsc.loadBootstrapScriptContent('index') + const htmlStream = await ReactDOMServer.renderToReadableStream(, { + bootstrapScriptContent: options?.debugNojs + ? undefined + : bootstrapScriptContent, + nonce: options?.nonce, + // no types + ...{ formState: options?.formState }, + }) + + let responseStream: ReadableStream = htmlStream + if (!options?.debugNojs) { + // initial RSC stream is injected in HTML stream as + responseStream = responseStream.pipeThrough( + injectRscStreamToHtml(rscStream2, { + nonce: options?.nonce, + }), + ) + } + + return responseStream +} diff --git a/packages/plugin-rsc/examples/starter-cf-single/src/framework/react.d.ts b/packages/plugin-rsc/examples/starter-cf-single/src/framework/react.d.ts new file mode 100644 index 000000000..d92ea675b --- /dev/null +++ b/packages/plugin-rsc/examples/starter-cf-single/src/framework/react.d.ts @@ -0,0 +1,3 @@ +declare module 'react-dom/server.edge' { + export * from 'react-dom/server' +} diff --git a/packages/plugin-rsc/examples/starter-cf-single/src/index.css b/packages/plugin-rsc/examples/starter-cf-single/src/index.css new file mode 100644 index 000000000..f4d2128c0 --- /dev/null +++ b/packages/plugin-rsc/examples/starter-cf-single/src/index.css @@ -0,0 +1,112 @@ +:root { + font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} + +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 1rem; +} + +.read-the-docs { + color: #888; + text-align: left; +} diff --git a/packages/plugin-rsc/examples/starter-cf-single/src/root.tsx b/packages/plugin-rsc/examples/starter-cf-single/src/root.tsx new file mode 100644 index 000000000..694d3fe7d --- /dev/null +++ b/packages/plugin-rsc/examples/starter-cf-single/src/root.tsx @@ -0,0 +1,70 @@ +import './index.css' +import viteLogo from '/vite.svg' +import { getServerCounter, updateServerCounter } from './action.tsx' +import reactLogo from './assets/react.svg' +import { ClientCounter } from './client.tsx' + +export function Root() { + return ( + + + + + + Vite + RSC + + + + + + ) +} + +function App() { + return ( +
+ +

Vite + RSC

+
+ +
+
+ + + +
+
    +
  • + Edit src/client.tsx to test client HMR. +
  • +
  • + Edit src/root.tsx to test server HMR. +
  • +
  • + Visit{' '} + + /?__rsc + {' '} + to view RSC stream payload. +
  • +
  • + Visit{' '} + + /?__nojs + {' '} + to test server action without js enabled. +
  • +
+
+ ) +} diff --git a/packages/plugin-rsc/examples/starter-cf-single/tsconfig.json b/packages/plugin-rsc/examples/starter-cf-single/tsconfig.json new file mode 100644 index 000000000..4c355ed3c --- /dev/null +++ b/packages/plugin-rsc/examples/starter-cf-single/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "erasableSyntaxOnly": true, + "allowImportingTsExtensions": true, + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "skipLibCheck": true, + "verbatimModuleSyntax": true, + "noEmit": true, + "moduleResolution": "Bundler", + "module": "ESNext", + "target": "ESNext", + "lib": ["ESNext", "DOM", "DOM.Iterable"], + "types": ["vite/client", "@vitejs/plugin-rsc/types"], + "jsx": "react-jsx" + } +} diff --git a/packages/plugin-rsc/examples/starter-cf-single/vite.config.ts b/packages/plugin-rsc/examples/starter-cf-single/vite.config.ts new file mode 100644 index 000000000..4ca6437be --- /dev/null +++ b/packages/plugin-rsc/examples/starter-cf-single/vite.config.ts @@ -0,0 +1,46 @@ +import { cloudflare } from '@cloudflare/vite-plugin' +import rsc from '@vitejs/plugin-rsc' +import react from '@vitejs/plugin-react' +import { defineConfig } from 'vite' + +export default defineConfig((_env) => ({ + clearScreen: false, + build: { + minify: false, + }, + plugins: [ + react(), + rsc({ + entries: { + client: './src/framework/entry.browser.tsx', + ssr: './src/framework/entry.ssr.tsx', + }, + serverHandler: false, + loadModuleDevProxy: true, + }), + cloudflare({ + configPath: './wrangler.jsonc', + viteEnvironment: { + name: 'rsc', + }, + }), + ], + environments: { + rsc: { + build: { + rollupOptions: { + // ensure `default` export only in cloudflare entry output + preserveEntrySignatures: 'exports-only', + }, + }, + }, + ssr: { + keepProcessEnv: false, + build: { + // build `ssr` inside `rsc` directory so that + // wrangler can deploy self-contained `dist/rsc` + outDir: './dist/rsc/ssr', + }, + }, + }, +})) diff --git a/packages/plugin-rsc/examples/starter-cf-single/wrangler.jsonc b/packages/plugin-rsc/examples/starter-cf-single/wrangler.jsonc new file mode 100644 index 000000000..bbd479cbb --- /dev/null +++ b/packages/plugin-rsc/examples/starter-cf-single/wrangler.jsonc @@ -0,0 +1,8 @@ +{ + "$schema": "https://www.unpkg.com/wrangler@4.19.1/config-schema.json", + "name": "vite-rsc-starter", + "main": "./src/framework/entry.rsc.tsx", + "workers_dev": true, + "compatibility_date": "2025-04-01", + "compatibility_flags": ["nodejs_als"] +} diff --git a/packages/plugin-rsc/examples/starter/README.md b/packages/plugin-rsc/examples/starter/README.md new file mode 100644 index 000000000..8031f9262 --- /dev/null +++ b/packages/plugin-rsc/examples/starter/README.md @@ -0,0 +1,36 @@ +# Vite + RSC + +This example shows how to setup a React application with [Server Component](https://react.dev/reference/rsc/server-components) features on Vite using [`@vitejs/plugin-rsc`](https://github.com/hi-ogawa/vite-plugins/tree/main/packages/rsc). + +[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/hi-ogawa/vite-plugins/tree/main/packages/rsc/examples/starter) + +```sh +# run dev server +npm run dev + +# build for production and preview +npm run build +npm run preview +``` + +## API usages + +See [`@vitejs/plugin-rsc`](https://github.com/hi-ogawa/vite-plugins/tree/main/packages/rsc) for the documentation. + +- [`vite.config.ts`](./vite.config.ts) + - `@higoawa/vite-rsc/plugin` +- [`./src/framework/entry.rsc.tsx`](./src/framework/entry.rsc.tsx) + - `@vitejs/plugin-rsc/rsc` + - `import.meta.viteRsc.loadModule` +- [`./src/framework/entry.ssr.tsx`](./src/framework/entry.ssr.tsx) + - `@vitejs/plugin-rsc/ssr` + - `@vitejs/plugin-rsc/rsc-html-stream/ssr` + - `import.meta.viteRsc.loadBootstrapScriptContent` +- [`./src/framework/entry.browser.tsx`](./src/framework/entry.browser.tsx) + - `@vitejs/plugin-rsc/browser` + - `@vitejs/plugin-rsc/rsc-html-stream/browser` + +## Notes + +- [`./src/framework/entry.{browser,rsc,ssr}.tsx`](./src/framework) (with inline comments) provides an overview of how low level RSC (React flight) API can be used to build RSC framework. +- You can use [`vite-plugin-inspect`](https://github.com/antfu-collective/vite-plugin-inspect) to understand how `"use client"` and `"use server"` directives are transformed internally. diff --git a/packages/plugin-rsc/examples/starter/package.json b/packages/plugin-rsc/examples/starter/package.json new file mode 100644 index 000000000..91f3871a4 --- /dev/null +++ b/packages/plugin-rsc/examples/starter/package.json @@ -0,0 +1,23 @@ +{ + "name": "@vitejs/plugin-rsc-examples-starter", + "version": "0.0.0", + "private": true, + "license": "MIT", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "@vitejs/plugin-rsc": "latest", + "react": "latest", + "react-dom": "latest" + }, + "devDependencies": { + "@types/react": "latest", + "@types/react-dom": "latest", + "@vitejs/plugin-react": "latest", + "vite-plugin-inspect": "latest" + } +} diff --git a/packages/plugin-rsc/examples/starter/public/vite.svg b/packages/plugin-rsc/examples/starter/public/vite.svg new file mode 100644 index 000000000..e7b8dfb1b --- /dev/null +++ b/packages/plugin-rsc/examples/starter/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/plugin-rsc/examples/starter/src/action.tsx b/packages/plugin-rsc/examples/starter/src/action.tsx new file mode 100644 index 000000000..4fc55d65b --- /dev/null +++ b/packages/plugin-rsc/examples/starter/src/action.tsx @@ -0,0 +1,11 @@ +'use server' + +let serverCounter = 0 + +export async function getServerCounter() { + return serverCounter +} + +export async function updateServerCounter(change: number) { + serverCounter += change +} diff --git a/packages/plugin-rsc/examples/starter/src/assets/react.svg b/packages/plugin-rsc/examples/starter/src/assets/react.svg new file mode 100644 index 000000000..6c87de9bb --- /dev/null +++ b/packages/plugin-rsc/examples/starter/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/plugin-rsc/examples/starter/src/client.tsx b/packages/plugin-rsc/examples/starter/src/client.tsx new file mode 100644 index 000000000..29bb5d367 --- /dev/null +++ b/packages/plugin-rsc/examples/starter/src/client.tsx @@ -0,0 +1,13 @@ +'use client' + +import React from 'react' + +export function ClientCounter() { + const [count, setCount] = React.useState(0) + + return ( + + ) +} diff --git a/packages/plugin-rsc/examples/starter/src/framework/entry.browser.tsx b/packages/plugin-rsc/examples/starter/src/framework/entry.browser.tsx new file mode 100644 index 000000000..9ba4ae4ee --- /dev/null +++ b/packages/plugin-rsc/examples/starter/src/framework/entry.browser.tsx @@ -0,0 +1,127 @@ +import * as ReactClient from '@vitejs/plugin-rsc/browser' +import { getRscStreamFromHtml } from '@vitejs/plugin-rsc/rsc-html-stream/browser' +import React from 'react' +import * as ReactDOMClient from 'react-dom/client' +import type { RscPayload } from './entry.rsc' + +async function main() { + // stash `setPayload` function to trigger re-rendering + // from outside of `BrowserRoot` component (e.g. server function call, navigation, hmr) + let setPayload: (v: RscPayload) => void + + // deserialize RSC stream back to React VDOM for CSR + const initialPayload = await ReactClient.createFromReadableStream( + // initial RSC stream is injected in SSR stream as + getRscStreamFromHtml(), + ) + + // browser root component to (re-)render RSC payload as state + function BrowserRoot() { + const [payload, setPayload_] = React.useState(initialPayload) + + React.useEffect(() => { + setPayload = (v) => React.startTransition(() => setPayload_(v)) + }, [setPayload_]) + + // re-fetch/render on client side navigation + React.useEffect(() => { + return listenNavigation(() => fetchRscPayload()) + }, []) + + return payload.root + } + + // re-fetch RSC and trigger re-rendering + async function fetchRscPayload() { + const payload = await ReactClient.createFromFetch( + fetch(window.location.href), + ) + setPayload(payload) + } + + // register a handler which will be internally called by React + // on server function request after hydration. + ReactClient.setServerCallback(async (id, args) => { + const url = new URL(window.location.href) + const temporaryReferences = ReactClient.createTemporaryReferenceSet() + const payload = await ReactClient.createFromFetch( + fetch(url, { + method: 'POST', + body: await ReactClient.encodeReply(args, { temporaryReferences }), + headers: { + 'x-rsc-action': id, + }, + }), + { temporaryReferences }, + ) + setPayload(payload) + return payload.returnValue + }) + + // hydration + const browserRoot = ( + + + + ) + ReactDOMClient.hydrateRoot(document, browserRoot, { + formState: initialPayload.formState, + }) + + // implement server HMR by trigering re-fetch/render of RSC upon server code change + if (import.meta.hot) { + import.meta.hot.on('rsc:update', () => { + fetchRscPayload() + }) + } +} + +// a little helper to setup events interception for client side navigation +function listenNavigation(onNavigation: () => void) { + window.addEventListener('popstate', onNavigation) + + const oldPushState = window.history.pushState + window.history.pushState = function (...args) { + const res = oldPushState.apply(this, args) + onNavigation() + return res + } + + const oldReplaceState = window.history.replaceState + window.history.replaceState = function (...args) { + const res = oldReplaceState.apply(this, args) + onNavigation() + return res + } + + function onClick(e: MouseEvent) { + let link = (e.target as Element).closest('a') + if ( + link && + link instanceof HTMLAnchorElement && + link.href && + (!link.target || link.target === '_self') && + link.origin === location.origin && + !link.hasAttribute('download') && + e.button === 0 && // left clicks only + !e.metaKey && // open in new tab (mac) + !e.ctrlKey && // open in new tab (windows) + !e.altKey && // download + !e.shiftKey && + !e.defaultPrevented + ) { + e.preventDefault() + history.pushState(null, '', link.href) + } + } + document.addEventListener('click', onClick) + + return () => { + document.removeEventListener('click', onClick) + window.removeEventListener('popstate', onNavigation) + window.history.pushState = oldPushState + window.history.replaceState = oldReplaceState + } +} + +main() diff --git a/packages/plugin-rsc/examples/starter/src/framework/entry.rsc.tsx b/packages/plugin-rsc/examples/starter/src/framework/entry.rsc.tsx new file mode 100644 index 000000000..b45e053e2 --- /dev/null +++ b/packages/plugin-rsc/examples/starter/src/framework/entry.rsc.tsx @@ -0,0 +1,103 @@ +import * as ReactServer from '@vitejs/plugin-rsc/rsc' +import type { ReactFormState } from 'react-dom/client' +import { Root } from '../root.tsx' + +// The schema of payload which is serialized into RSC stream on rsc environment +// and deserialized on ssr/client environments. +export type RscPayload = { + // this demo renders/serializes/deserizlies entire root html element + // but this mechanism can be changed to render/fetch different parts of components + // based on your own route conventions. + root: React.ReactNode + // server action return value of non-progressive enhancement case + returnValue?: unknown + // server action form state (e.g. useActionState) of progressive enhancement case + formState?: ReactFormState +} + +// the plugin by default assumes `rsc` entry having default export of request handler. +// however, how server entries are executed can be customized by registering +// own server handler e.g. `@cloudflare/vite-plugin`. +export default async function handler(request: Request): Promise { + // handle server function request + const isAction = request.method === 'POST' + let returnValue: unknown | undefined + let formState: ReactFormState | undefined + let temporaryReferences: unknown | undefined + if (isAction) { + // x-rsc-action header exists when action is called via `ReactClient.setServerCallback`. + const actionId = request.headers.get('x-rsc-action') + if (actionId) { + const contentType = request.headers.get('content-type') + const body = contentType?.startsWith('multipart/form-data') + ? await request.formData() + : await request.text() + temporaryReferences = ReactServer.createTemporaryReferenceSet() + const args = await ReactServer.decodeReply(body, { temporaryReferences }) + const action = await ReactServer.loadServerAction(actionId) + returnValue = await action.apply(null, args) + } else { + // otherwise server function is called via `
` + // before hydration (e.g. when javascript is disabled). + // aka progressive enhancement. + const formData = await request.formData() + const decodedAction = await ReactServer.decodeAction(formData) + const result = await decodedAction() + formState = await ReactServer.decodeFormState(result, formData) + } + } + + // serialization from React VDOM tree to RSC stream. + // we render RSC stream after handling server function request + // so that new render reflects updated state from server function call + // to achieve single round trip to mutate and fetch from server. + const rscStream = ReactServer.renderToReadableStream({ + // in this example, we always render the same `` + root: , + returnValue, + formState, + }) + + // respond RSC stream without HTML rendering based on framework's convention. + // here we use request header `content-type`. + // additionally we allow `?__rsc` and `?__html` to easily view payload directly. + const url = new URL(request.url) + const isRscRequest = + (!request.headers.get('accept')?.includes('text/html') && + !url.searchParams.has('__html')) || + url.searchParams.has('__rsc') + + if (isRscRequest) { + return new Response(rscStream, { + headers: { + 'content-type': 'text/x-component;charset=utf-8', + vary: 'accept', + }, + }) + } + + // Delegate to SSR environment for html rendering. + // The plugin provides `loadSsrModule` helper to allow loading SSR environment entry module + // in RSC environment. however this can be customized by implementing own runtime communication + // e.g. `@cloudflare/vite-plugin`'s service binding. + const ssrEntryModule = await import.meta.viteRsc.loadModule< + typeof import('./entry.ssr.tsx') + >('ssr', 'index') + const htmlStream = await ssrEntryModule.renderHTML(rscStream, { + formState, + // allow quick simulation of javscript disabled browser + debugNojs: url.searchParams.has('__nojs'), + }) + + // respond html + return new Response(htmlStream, { + headers: { + 'Content-type': 'text/html', + vary: 'accept', + }, + }) +} + +if (import.meta.hot) { + import.meta.hot.accept() +} diff --git a/packages/plugin-rsc/examples/starter/src/framework/entry.ssr.tsx b/packages/plugin-rsc/examples/starter/src/framework/entry.ssr.tsx new file mode 100644 index 000000000..129dbadf1 --- /dev/null +++ b/packages/plugin-rsc/examples/starter/src/framework/entry.ssr.tsx @@ -0,0 +1,53 @@ +import { injectRscStreamToHtml } from '@vitejs/plugin-rsc/rsc-html-stream/ssr' // helper API +import * as ReactClient from '@vitejs/plugin-rsc/ssr' // RSC API +import React from 'react' +import type { ReactFormState } from 'react-dom/client' +import * as ReactDOMServer from 'react-dom/server.edge' +import type { RscPayload } from './entry.rsc' + +export async function renderHTML( + rscStream: ReadableStream, + options: { + formState?: ReactFormState + nonce?: string + debugNojs?: boolean + }, +) { + // duplicate one RSC stream into two. + // - one for SSR (ReactClient.createFromReadableStream below) + // - another for browser hydration payload by injecting . + const [rscStream1, rscStream2] = rscStream.tee() + + // deserialize RSC stream back to React VDOM + let payload: Promise + function SsrRoot() { + // deserialization needs to be kicked off inside ReactDOMServer context + // for ReactDomServer preinit/preloading to work + payload ??= ReactClient.createFromReadableStream(rscStream1) + return React.use(payload).root + } + + // render html (traditional SSR) + const bootstrapScriptContent = + await import.meta.viteRsc.loadBootstrapScriptContent('index') + const htmlStream = await ReactDOMServer.renderToReadableStream(, { + bootstrapScriptContent: options?.debugNojs + ? undefined + : bootstrapScriptContent, + nonce: options?.nonce, + // no types + ...{ formState: options?.formState }, + }) + + let responseStream: ReadableStream = htmlStream + if (!options?.debugNojs) { + // initial RSC stream is injected in HTML stream as + responseStream = responseStream.pipeThrough( + injectRscStreamToHtml(rscStream2, { + nonce: options?.nonce, + }), + ) + } + + return responseStream +} diff --git a/packages/plugin-rsc/examples/starter/src/framework/react.d.ts b/packages/plugin-rsc/examples/starter/src/framework/react.d.ts new file mode 100644 index 000000000..d92ea675b --- /dev/null +++ b/packages/plugin-rsc/examples/starter/src/framework/react.d.ts @@ -0,0 +1,3 @@ +declare module 'react-dom/server.edge' { + export * from 'react-dom/server' +} diff --git a/packages/plugin-rsc/examples/starter/src/index.css b/packages/plugin-rsc/examples/starter/src/index.css new file mode 100644 index 000000000..f4d2128c0 --- /dev/null +++ b/packages/plugin-rsc/examples/starter/src/index.css @@ -0,0 +1,112 @@ +:root { + font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} + +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 1rem; +} + +.read-the-docs { + color: #888; + text-align: left; +} diff --git a/packages/plugin-rsc/examples/starter/src/root.tsx b/packages/plugin-rsc/examples/starter/src/root.tsx new file mode 100644 index 000000000..a42c6a92a --- /dev/null +++ b/packages/plugin-rsc/examples/starter/src/root.tsx @@ -0,0 +1,70 @@ +import './index.css' // css import is automatically injected in exported server components +import viteLogo from '/vite.svg' +import { getServerCounter, updateServerCounter } from './action.tsx' +import reactLogo from './assets/react.svg' +import { ClientCounter } from './client.tsx' + +export function Root() { + return ( + + + + + + Vite + RSC + + + + + + ) +} + +function App() { + return ( +
+ +

Vite + RSC

+
+ +
+
+ + + +
+
    +
  • + Edit src/client.tsx to test client HMR. +
  • +
  • + Edit src/root.tsx to test server HMR. +
  • +
  • + Visit{' '} + + /?__rsc + {' '} + to view RSC stream payload. +
  • +
  • + Visit{' '} + + /?__nojs + {' '} + to test server action without js enabled. +
  • +
+
+ ) +} diff --git a/packages/plugin-rsc/examples/starter/tsconfig.json b/packages/plugin-rsc/examples/starter/tsconfig.json new file mode 100644 index 000000000..4c355ed3c --- /dev/null +++ b/packages/plugin-rsc/examples/starter/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "erasableSyntaxOnly": true, + "allowImportingTsExtensions": true, + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "skipLibCheck": true, + "verbatimModuleSyntax": true, + "noEmit": true, + "moduleResolution": "Bundler", + "module": "ESNext", + "target": "ESNext", + "lib": ["ESNext", "DOM", "DOM.Iterable"], + "types": ["vite/client", "@vitejs/plugin-rsc/types"], + "jsx": "react-jsx" + } +} diff --git a/packages/plugin-rsc/examples/starter/vite.config.ts b/packages/plugin-rsc/examples/starter/vite.config.ts new file mode 100644 index 000000000..99837202c --- /dev/null +++ b/packages/plugin-rsc/examples/starter/vite.config.ts @@ -0,0 +1,73 @@ +import rsc from '@vitejs/plugin-rsc' +import react from '@vitejs/plugin-react' +import { defineConfig } from 'vite' +// import inspect from "vite-plugin-inspect"; + +export default defineConfig({ + plugins: [ + rsc({ + // `entries` option is only a shorthand for specifying each `rollupOptions.input` below + // > entries: { rsc, ssr, client }, + // + // by default, the plugin setup request handler based on `default export` of `rsc` environment `rollupOptions.input.index`. + // This can be disabled when setting up own server handler e.g. `@cloudflare/vite-plugin`. + // > serverHandler: false + }), + + // use any of react plugins https://github.com/vitejs/vite-plugin-react + // to enable client component HMR + react(), + + // use https://github.com/antfu-collective/vite-plugin-inspect + // to understand internal transforms required for RSC. + // inspect(), + ], + + // specify entry point for each environment. + // (currently the plugin assumes `rollupOptions.input.index` for some features.) + environments: { + // `rsc` environment loads modules with `react-server` condition. + // this environment is responsible for: + // - RSC stream serialization (React VDOM -> RSC stream) + // - server functions handling + rsc: { + build: { + rollupOptions: { + input: { + index: './src/framework/entry.rsc.tsx', + }, + }, + }, + }, + + // `ssr` environment loads modules without `react-server` condition. + // this environment is responsible for: + // - RSC stream deserialization (RSC stream -> React VDOM) + // - traditional SSR (React VDOM -> HTML string/stream) + ssr: { + build: { + rollupOptions: { + input: { + index: './src/framework/entry.ssr.tsx', + }, + }, + }, + }, + + // client environment is used for hydration and client-side rendering + // this environment is responsible for: + // - RSC stream deserialization (RSC stream -> React VDOM) + // - traditional CSR (React VDOM -> Browser DOM tree mount/hydration) + // - refetch and re-render RSC + // - calling server functions + client: { + build: { + rollupOptions: { + input: { + index: './src/framework/entry.browser.tsx', + }, + }, + }, + }, + }, +}) diff --git a/packages/plugin-rsc/package.json b/packages/plugin-rsc/package.json new file mode 100644 index 000000000..cfb754b6b --- /dev/null +++ b/packages/plugin-rsc/package.json @@ -0,0 +1,70 @@ +{ + "name": "@vitejs/plugin-rsc", + "version": "0.4.10-alpha.1", + "description": "React Server Components (RSC) support for Vite.", + "keywords": [ + "vite", + "vite-plugin", + "react", + "react-server-components", + "rsc" + ], + "homepage": "https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-rsc", + "repository": { + "type": "git", + "url": "git+https://github.com/vitejs/vite-plugin-react.git", + "directory": "packages/plugin-rsc" + }, + "license": "MIT", + "type": "module", + "exports": { + "./package.json": "./package.json", + "./types": "./types/index.d.ts", + ".": "./dist/index.js", + "./*": "./dist/*.js" + }, + "files": [ + "dist", + "types" + ], + "scripts": { + "test": "vitest", + "test-e2e": "playwright test --project=chromium", + "test-e2e-ci": "playwright test", + "tsc": "tsc -b ./tsconfig.json ./e2e/tsconfig.json ./examples/*/tsconfig.json", + "tsc-dev": "pnpm tsc --watch --preserveWatchOutput", + "dev": "tsdown --sourcemap --watch src", + "build": "tsdown", + "prepack": "tsdown --clean" + }, + "dependencies": { + "@mjackson/node-fetch-server": "^0.6.1", + "es-module-lexer": "^1.6.0", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17", + "periscopic": "^4.0.2", + "turbo-stream": "^3.1.0", + "vitefu": "^1.0.5" + }, + "devDependencies": { + "@hiogawa/utils": "^1.7.0", + "@playwright/test": "^1.53.1", + "@tsconfig/strictest": "^2.0.5", + "@types/estree": "^1.0.8", + "@types/node": "^22.14.1", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", + "@vitejs/plugin-react": "workspace:*", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "react-server-dom-webpack": "^19.1.0", + "rsc-html-stream": "^0.0.6", + "tinyexec": "^1.0.1", + "tsdown": "^0.12.9" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*", + "vite": "*" + } +} diff --git a/packages/plugin-rsc/playwright.config.ts b/packages/plugin-rsc/playwright.config.ts new file mode 100644 index 000000000..29a7d0c6e --- /dev/null +++ b/packages/plugin-rsc/playwright.config.ts @@ -0,0 +1,34 @@ +import { defineConfig, devices } from '@playwright/test' + +export default defineConfig({ + testDir: 'e2e', + use: { + trace: 'on-first-retry', + }, + expect: { + toPass: { timeout: 5000 }, + }, + projects: [ + { + name: 'chromium', + use: { + ...devices['Desktop Chrome'], + viewport: null, + deviceScaleFactor: undefined, + }, + }, + { + name: 'firefox', + use: devices['Desktop Firefox'], + }, + { + name: 'webkit', + use: devices['Desktop Safari'], + }, + ], + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 2 : 0, + reporter: ['list', process.env.CI && 'github'] + .filter(Boolean) + .map((name) => [name] as any), +}) as any diff --git a/packages/plugin-rsc/src/browser.ts b/packages/plugin-rsc/src/browser.ts new file mode 100644 index 000000000..e5a52f945 --- /dev/null +++ b/packages/plugin-rsc/src/browser.ts @@ -0,0 +1,23 @@ +import * as clientReferences from 'virtual:vite-rsc/client-references' +import { setRequireModule } from './core/browser' + +export * from './react/browser' + +initialize() + +function initialize(): void { + setRequireModule({ + load: async (id) => { + if (!import.meta.env.__vite_rsc_build__) { + // @ts-ignore + return __vite_rsc_raw_import__(import.meta.env.BASE_URL + id.slice(1)) + } else { + const import_ = clientReferences.default[id] + if (!import_) { + throw new Error(`client reference not found '${id}'`) + } + return import_() + } + }, + }) +} diff --git a/packages/plugin-rsc/src/core/browser.ts b/packages/plugin-rsc/src/core/browser.ts new file mode 100644 index 000000000..d0f5e649f --- /dev/null +++ b/packages/plugin-rsc/src/core/browser.ts @@ -0,0 +1,19 @@ +import { memoize } from '@hiogawa/utils' +import { removeReferenceCacheTag, setInternalRequire } from './shared' + +let init = false + +export function setRequireModule(options: { + load: (id: string) => Promise +}): void { + if (init) return + init = true + + const requireModule = memoize((id: string) => { + return options.load(removeReferenceCacheTag(id)) + }) + + ;(globalThis as any).__vite_rsc_client_require__ = requireModule + + setInternalRequire() +} diff --git a/packages/plugin-rsc/src/core/plugin.ts b/packages/plugin-rsc/src/core/plugin.ts new file mode 100644 index 000000000..d22d2ab0a --- /dev/null +++ b/packages/plugin-rsc/src/core/plugin.ts @@ -0,0 +1,42 @@ +import type { Plugin } from 'vite' + +export default function vitePluginRscCore(): Plugin[] { + return [ + { + name: 'rsc:patch-react-server-dom-webpack', + transform(originalCode, _id, _options) { + let code = originalCode + if (code.includes('__webpack_require__.u')) { + // avoid accessing `__webpack_require__` on import side effect + // https://github.com/facebook/react/blob/a9bbe34622885ef5667d33236d580fe7321c0d8b/packages/react-server-dom-webpack/src/client/ReactFlightClientConfigBundlerWebpackBrowser.js#L16-L17 + code = code.replaceAll('__webpack_require__.u', '({}).u') + } + + // the existance of `__webpack_require__` global can break some packages + // https://github.com/TooTallNate/node-bindings/blob/c8033dcfc04c34397384e23f7399a30e6c13830d/bindings.js#L90-L94 + if (code.includes('__webpack_require__')) { + code = code.replaceAll('__webpack_require__', '__vite_rsc_require__') + } + + if (code !== originalCode) { + return { code, map: null } + } + }, + }, + { + // commonjsOptions needs to be tweaked when this is a linked dep + // since otherwise vendored cjs doesn't work. + name: 'rsc:workaround-linked-dep', + apply: () => !import.meta.url.includes('/node_modules/'), + configEnvironment() { + return { + build: { + commonjsOptions: { + include: [/\/node_modules\//, /\/vendor\/react-server-dom\//], + }, + }, + } + }, + }, + ] +} diff --git a/packages/plugin-rsc/src/core/rsc.ts b/packages/plugin-rsc/src/core/rsc.ts new file mode 100644 index 000000000..d00452555 --- /dev/null +++ b/packages/plugin-rsc/src/core/rsc.ts @@ -0,0 +1,130 @@ +import { memoize, tinyassert } from '@hiogawa/utils' +import type { BundlerConfig, ImportManifestEntry, ModuleMap } from '../types' +import { + SERVER_DECODE_CLIENT_PREFIX, + SERVER_REFERENCE_PREFIX, + createReferenceCacheTag, + removeReferenceCacheTag, + setInternalRequire, +} from './shared' + +// @ts-ignore +import * as ReactServer from '@vitejs/plugin-rsc/vendor/react-server-dom/server.edge' + +let init = false +let requireModule!: (id: string) => unknown + +export function setRequireModule(options: { + load: (id: string) => unknown +}): void { + if (init) return + init = true + + requireModule = (id) => { + return options.load(removeReferenceCacheTag(id)) + } + + // need memoize to return stable promise from __webpack_require__ + ;(globalThis as any).__vite_rsc_server_require__ = memoize( + async (id: string) => { + if (id.startsWith(SERVER_DECODE_CLIENT_PREFIX)) { + id = id.slice(SERVER_DECODE_CLIENT_PREFIX.length) + id = removeReferenceCacheTag(id) + // create `registerClientReference` on the fly since there's no way to + // grab the original client reference module on ther server. + // cf. https://github.com/lazarv/react-server/blob/79e7acebc6f4a8c930ad8422e2a4a9fdacfcce9b/packages/react-server/server/module-loader.mjs#L19 + // decode client reference on the server + return new Proxy({} as any, { + get(target, name, _receiver) { + if (typeof name !== 'string' || name === 'then') return + return (target[name] ??= ReactServer.registerClientReference( + () => { + throw new Error( + `Unexpectedly client reference export '${name}' is called on server`, + ) + }, + id, + name, + )) + }, + }) + } + return requireModule(id) + }, + ) + + setInternalRequire() +} + +export async function loadServerAction(id: string): Promise { + const [file, name] = id.split('#') as [string, string] + const mod: any = await requireModule(file) + return mod[name] +} + +export function createServerManifest(): BundlerConfig { + const cacheTag = import.meta.env.DEV ? createReferenceCacheTag() : '' + + return new Proxy( + {}, + { + get(_target, $$id, _receiver) { + tinyassert(typeof $$id === 'string') + let [id, name] = $$id.split('#') + tinyassert(id) + tinyassert(name) + return { + id: SERVER_REFERENCE_PREFIX + id + cacheTag, + name, + chunks: [], + async: true, + } satisfies ImportManifestEntry + }, + }, + ) +} + +export function createServerDecodeClientManifest(): ModuleMap { + return new Proxy( + {}, + { + get(_target, id: string) { + return new Proxy( + {}, + { + get(_target, name: string) { + return { + id: SERVER_REFERENCE_PREFIX + SERVER_DECODE_CLIENT_PREFIX + id, + name, + chunks: [], + async: true, + } + }, + }, + ) + }, + }, + ) +} + +export function createClientManifest(): BundlerConfig { + const cacheTag = import.meta.env.DEV ? createReferenceCacheTag() : '' + + return new Proxy( + {}, + { + get(_target, $$id, _receiver) { + tinyassert(typeof $$id === 'string') + let [id, name] = $$id.split('#') + tinyassert(id) + tinyassert(name) + return { + id: id + cacheTag, + name, + chunks: [], + async: true, + } satisfies ImportManifestEntry + }, + }, + ) +} diff --git a/packages/plugin-rsc/src/core/shared.ts b/packages/plugin-rsc/src/core/shared.ts new file mode 100644 index 000000000..bd3d18af3 --- /dev/null +++ b/packages/plugin-rsc/src/core/shared.ts @@ -0,0 +1,25 @@ +// use special prefix to switch client/server reference loading inside __webpack_require__ +export const SERVER_REFERENCE_PREFIX = '$$server:' + +export const SERVER_DECODE_CLIENT_PREFIX = '$$decode-client:' + +// cache bust memoized require promise during dev +export function createReferenceCacheTag(): string { + const cache = Math.random().toString(36).slice(2) + return '$$cache=' + cache +} + +export function removeReferenceCacheTag(id: string): string { + return id.split('$$cache=')[0]! +} + +export function setInternalRequire(): void { + // branch client and server require to support the case when ssr and rsc share the same global + ;(globalThis as any).__vite_rsc_require__ = (id: string) => { + if (id.startsWith(SERVER_REFERENCE_PREFIX)) { + id = id.slice(SERVER_REFERENCE_PREFIX.length) + return (globalThis as any).__vite_rsc_server_require__(id) + } + return (globalThis as any).__vite_rsc_client_require__(id) + } +} diff --git a/packages/plugin-rsc/src/core/ssr.ts b/packages/plugin-rsc/src/core/ssr.ts new file mode 100644 index 000000000..68a847a36 --- /dev/null +++ b/packages/plugin-rsc/src/core/ssr.ts @@ -0,0 +1,27 @@ +import { memoize } from '@hiogawa/utils' +import type { ServerConsumerManifest } from '../types' +import { removeReferenceCacheTag, setInternalRequire } from './shared' + +let init = false + +export function setRequireModule(options: { + load: (id: string) => unknown +}): void { + if (init) return + init = true + + const requireModule = memoize((id: string) => { + return options.load(removeReferenceCacheTag(id)) + }) + + const clientRequire = (id: string) => { + return requireModule(id) + } + ;(globalThis as any).__vite_rsc_client_require__ = clientRequire + + setInternalRequire() +} + +export function createServerConsumerManifest(): ServerConsumerManifest { + return {} +} diff --git a/packages/plugin-rsc/src/extra/browser.tsx b/packages/plugin-rsc/src/extra/browser.tsx new file mode 100644 index 000000000..509aa8706 --- /dev/null +++ b/packages/plugin-rsc/src/extra/browser.tsx @@ -0,0 +1,126 @@ +import React from 'react' +import ReactDomClient from 'react-dom/client' +import { rscStream } from 'rsc-html-stream/client' +import { + type CallServerCallback, + createFromFetch, + createFromReadableStream, + createTemporaryReferenceSet, + encodeReply, + setServerCallback, +} from '../browser' +import type { RscPayload } from './rsc' + +export async function hydrate(): Promise { + const callServer: CallServerCallback = async (id, args) => { + const url = new URL(window.location.href) + const temporaryReferences = createTemporaryReferenceSet() + const payload = await createFromFetch( + fetch(url, { + method: 'POST', + body: await encodeReply(args, { temporaryReferences }), + headers: { + 'x-rsc-action': id, + }, + }), + { temporaryReferences }, + ) + setPayload(payload) + return payload.returnValue + } + setServerCallback(callServer) + + async function onNavigation() { + const url = new URL(window.location.href) + const payload = await createFromFetch(fetch(url)) + setPayload(payload) + } + + const initialPayload = await createFromReadableStream(rscStream) + + let setPayload: (v: RscPayload) => void + + function BrowserRoot() { + const [payload, setPayload_] = React.useState(initialPayload) + + React.useEffect(() => { + setPayload = (v) => React.startTransition(() => setPayload_(v)) + }, [setPayload_]) + + React.useEffect(() => { + return listenNavigation(() => onNavigation()) + }, []) + + return payload.root + } + + const browserRoot = ( + + + + ) + + ReactDomClient.hydrateRoot(document, browserRoot, { + formState: initialPayload.formState, + }) + + if (import.meta.hot) { + import.meta.hot.on('rsc:update', () => { + window.history.replaceState({}, '', window.location.href) + }) + } +} + +export async function fetchRSC( + request: string | URL | Request, +): Promise { + const payload = await createFromFetch(fetch(request)) + return payload.root +} + +function listenNavigation(onNavigation: () => void): () => void { + window.addEventListener('popstate', onNavigation) + + const oldPushState = window.history.pushState + window.history.pushState = function (...args) { + const res = oldPushState.apply(this, args) + onNavigation() + return res + } + + const oldReplaceState = window.history.replaceState + window.history.replaceState = function (...args) { + const res = oldReplaceState.apply(this, args) + onNavigation() + return res + } + + function onClick(e: MouseEvent) { + let link = (e.target as Element).closest('a') + if ( + link && + link instanceof HTMLAnchorElement && + link.href && + (!link.target || link.target === '_self') && + link.origin === location.origin && + !link.hasAttribute('download') && + e.button === 0 && // left clicks only + !e.metaKey && // open in new tab (mac) + !e.ctrlKey && // open in new tab (windows) + !e.altKey && // download + !e.shiftKey && + !e.defaultPrevented + ) { + e.preventDefault() + history.pushState(null, '', link.href) + } + } + document.addEventListener('click', onClick) + + return () => { + document.removeEventListener('click', onClick) + window.removeEventListener('popstate', onNavigation) + window.history.pushState = oldPushState + window.history.replaceState = oldReplaceState + } +} diff --git a/packages/plugin-rsc/src/extra/rsc.tsx b/packages/plugin-rsc/src/extra/rsc.tsx new file mode 100644 index 000000000..3947ecc25 --- /dev/null +++ b/packages/plugin-rsc/src/extra/rsc.tsx @@ -0,0 +1,93 @@ +import type { ReactFormState } from 'react-dom/client' +import { + createTemporaryReferenceSet, + decodeAction, + decodeFormState, + decodeReply, + loadServerAction, + renderToReadableStream, +} from '../rsc' + +export type RscPayload = { + root: React.ReactNode + formState?: ReactFormState + returnValue?: unknown +} + +export async function renderRequest( + request: Request, + root: React.ReactNode, + options?: { nonce?: string }, +): Promise { + function RscRoot() { + // https://vite.dev/guide/features.html#content-security-policy-csp + // this isn't needed if `style-src: 'unsafe-inline'` (dev) and `script-src: 'self'` + const nonceMeta = options?.nonce && ( + + ) + return ( + <> + {nonceMeta} + {root} + + ) + } + + const url = new URL(request.url) + const isAction = request.method === 'POST' + + // use ?__rsc and ?__html for quick debugging + const isRscRequest = + (!request.headers.get('accept')?.includes('text/html') && + !url.searchParams.has('__html')) || + url.searchParams.has('__rsc') + + // TODO: error handling + // callAction + let returnValue: unknown | undefined + let formState: ReactFormState | undefined + let temporaryReferences: unknown | undefined + if (isAction) { + const actionId = request.headers.get('x-rsc-action') + if (actionId) { + // client stream request + const contentType = request.headers.get('content-type') + const body = contentType?.startsWith('multipart/form-data') + ? await request.formData() + : await request.text() + temporaryReferences = createTemporaryReferenceSet() + const args = await decodeReply(body, { temporaryReferences }) + const action = await loadServerAction(actionId) + returnValue = await action.apply(null, args) + } else { + // progressive enhancement + const formData = await request.formData() + const decodedAction = await decodeAction(formData) + const result = await decodedAction() + formState = await decodeFormState(result, formData) + } + } + + const rscPayload: RscPayload = { root: , formState, returnValue } + const rscOptions = { temporaryReferences } + const rscStream = renderToReadableStream(rscPayload, rscOptions) + + if (isRscRequest) { + return new Response(rscStream, { + headers: { + 'content-type': 'text/x-component;charset=utf-8', + vary: 'accept', + }, + }) + } + + const ssrEntry = await import.meta.viteRsc.loadModule( + 'ssr', + 'index', + ) + return ssrEntry.renderHtml(rscStream, { + formState, + nonce: options?.nonce, + debugNoJs: url.searchParams.has('__nojs'), + }) +} diff --git a/packages/plugin-rsc/src/extra/ssr.tsx b/packages/plugin-rsc/src/extra/ssr.tsx new file mode 100644 index 000000000..4d7aef664 --- /dev/null +++ b/packages/plugin-rsc/src/extra/ssr.tsx @@ -0,0 +1,55 @@ +import React from 'react' +import type { ReactFormState } from 'react-dom/client' +import ReactDomServer from 'react-dom/server.edge' +import { injectRSCPayload } from 'rsc-html-stream/server' +import { createFromReadableStream } from '../ssr' +import type { RscPayload } from './rsc' + +export async function renderHtml( + rscStream: ReadableStream, + options?: { + formState?: ReactFormState + nonce?: string + debugNoJs?: boolean + }, +): Promise { + const [rscStream1, rscStream2] = rscStream.tee() + + // flight deserialization needs to be kicked off inside SSR context + // for ReactDomServer preinit/preloading to work + let payload: Promise + function SsrRoot() { + payload ??= createFromReadableStream(rscStream1, { + nonce: options?.nonce, + }) + const root = React.use(payload).root + return root + } + + const bootstrapScriptContent = + await import.meta.viteRsc.loadBootstrapScriptContent('index') + const htmlStream = await ReactDomServer.renderToReadableStream(, { + bootstrapScriptContent: options?.debugNoJs + ? undefined + : bootstrapScriptContent, + nonce: options?.nonce, + // no types + ...{ formState: options?.formState }, + }) + + let responseStream: ReadableStream = htmlStream + if (!options?.debugNoJs) { + responseStream = responseStream.pipeThrough( + injectRSCPayload(rscStream2, { + nonce: options?.nonce, + }), + ) + } + + return new Response(responseStream, { + headers: { + 'content-type': 'text/html;charset=utf-8', + vary: 'accept', + }, + }) +} diff --git a/packages/plugin-rsc/src/index.ts b/packages/plugin-rsc/src/index.ts new file mode 100644 index 000000000..92c432cad --- /dev/null +++ b/packages/plugin-rsc/src/index.ts @@ -0,0 +1,2 @@ +export { default, type RscPluginOptions } from './plugin' +export { transformHoistInlineDirective } from './transforms' diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts new file mode 100644 index 000000000..8698f7283 --- /dev/null +++ b/packages/plugin-rsc/src/plugin.ts @@ -0,0 +1,1832 @@ +import assert from 'node:assert' +import { createHash } from 'node:crypto' +import fs from 'node:fs' +import { createRequire } from 'node:module' +import path from 'node:path' +import { fileURLToPath, pathToFileURL } from 'node:url' +import { createRequestListener } from '@mjackson/node-fetch-server' +import * as esModuleLexer from 'es-module-lexer' +import MagicString from 'magic-string' +import { + type DevEnvironment, + type EnvironmentModuleNode, + type Plugin, + type ResolvedConfig, + type Rollup, + type RunnableDevEnvironment, + type ViteDevServer, + defaultServerConditions, + isCSSRequest, + normalizePath, + parseAstAsync, +} from 'vite' +import { crawlFrameworkPkgs } from 'vitefu' +import vitePluginRscCore from './core/plugin' +import { + type TransformWrapExportFilter, + hasDirective, + transformDirectiveProxyExport, + transformServerActionServer, + transformWrapExport, +} from './transforms' +import { generateEncryptionKey, toBase64 } from './utils/encryption-utils' +import { createRpcServer } from './utils/rpc' +import { normalizeViteImportAnalysisUrl } from './vite-utils' + +// state for build orchestration +let serverReferences: Record = {} +let server: ViteDevServer +let config: ResolvedConfig +let rscBundle: Rollup.OutputBundle +let buildAssetsManifest: AssetsManifest | undefined +let isScanBuild = false +const BUILD_ASSETS_MANIFEST_NAME = '__vite_rsc_assets_manifest.js' + +type ClientReferenceMeta = { + importId: string + // same as `importId` during dev. hashed id during build. + referenceKey: string + packageSource?: string + // build only for tree-shaking unused export + exportNames: string[] + renderedExports: string[] +} +let clientReferenceMetaMap: Record = {} + +let serverResourcesMetaMap: Record = {} + +const PKG_NAME = '@vitejs/plugin-rsc' +const REACT_SERVER_DOM_NAME = `${PKG_NAME}/vendor/react-server-dom` + +// dev-only wrapper virtual module of rollupOptions.input.index +const VIRTUAL_ENTRIES = { + browser: 'virtual:vite-rsc/entry-browser', +} + +const require = createRequire(import.meta.url) + +function resolvePackage(name: string) { + return pathToFileURL(require.resolve(name)).href +} + +export type RscPluginOptions = { + /** + * shorthand for configuring `environments.(name).build.rollupOptions.input.index` + */ + entries?: Partial> + + /** @deprecated use `serverHandler: false` */ + disableServerHandler?: boolean + + /** @default { enviornmentName: "rsc", entryName: "index" } */ + serverHandler?: + | { + environmentName: string + entryName: string + } + | false + + /** @default false */ + loadModuleDevProxy?: boolean + + rscCssTransform?: false | { filter?: (id: string) => boolean } + + ignoredPackageWarnings?: (string | RegExp)[] + + /** + * This option allows customizing how client build copies assets from server build. + * By default, all assets are copied, but frameworks might want to establish some convention + * to tighten security based on this option. + */ + copyServerAssetsToClient?: (fileName: string) => boolean + + defineEncryptionKey?: string + + /** + * Allows enabling action closure encryption for debugging purpose. + * @default true + */ + enableActionEncryption?: boolean + + /** Escape hatch for Waku's `allowServer` */ + keepUseCientProxy?: boolean +} + +export default function vitePluginRsc( + rscPluginOptions: RscPluginOptions = {}, +): Plugin[] { + return [ + { + name: 'rsc', + async config(config, env) { + await esModuleLexer.init + + // crawl packages with "react" in "peerDependencies" to bundle react deps on server + // see https://github.com/svitejs/vitefu/blob/d8d82fa121e3b2215ba437107093c77bde51b63b/src/index.js#L95-L101 + const result = await crawlFrameworkPkgs({ + root: process.cwd(), + isBuild: env.command === 'build', + isFrameworkPkgByJson(pkgJson) { + if ([PKG_NAME, 'react-dom'].includes(pkgJson.name)) { + return + } + const deps = pkgJson['peerDependencies'] + return deps && 'react' in deps + }, + }) + const noExternal = [ + 'react', + 'react-dom', + 'server-only', + 'client-only', + PKG_NAME, + ...result.ssr.noExternal.sort(), + ] + + return { + appType: 'custom', + define: { + 'import.meta.env.__vite_rsc_build__': JSON.stringify( + env.command === 'build', + ), + }, + environments: { + client: { + build: { + outDir: + config.environments?.client?.build?.outDir ?? 'dist/client', + rollupOptions: { + input: rscPluginOptions.entries?.client && { + index: rscPluginOptions.entries.client, + }, + }, + }, + optimizeDeps: { + include: [ + 'react-dom/client', + `${REACT_SERVER_DOM_NAME}/client.browser`, + ], + exclude: [PKG_NAME], + }, + }, + ssr: { + build: { + outDir: config.environments?.ssr?.build?.outDir ?? 'dist/ssr', + rollupOptions: { + input: rscPluginOptions.entries?.ssr && { + index: rscPluginOptions.entries.ssr, + }, + }, + }, + resolve: { + noExternal, + }, + optimizeDeps: { + include: [ + 'react', + 'react-dom', + 'react/jsx-runtime', + 'react/jsx-dev-runtime', + 'react-dom/server.edge', + `${REACT_SERVER_DOM_NAME}/client.edge`, + ], + exclude: [PKG_NAME], + }, + }, + rsc: { + build: { + outDir: config.environments?.rsc?.build?.outDir ?? 'dist/rsc', + emitAssets: true, + rollupOptions: { + input: rscPluginOptions.entries?.rsc && { + index: rscPluginOptions.entries.rsc, + }, + }, + }, + resolve: { + conditions: ['react-server', ...defaultServerConditions], + noExternal, + }, + optimizeDeps: { + include: [ + 'react', + 'react-dom', + 'react/jsx-runtime', + 'react/jsx-dev-runtime', + `${REACT_SERVER_DOM_NAME}/server.edge`, + `${REACT_SERVER_DOM_NAME}/client.edge`, + ], + exclude: [PKG_NAME], + }, + }, + }, + builder: { + sharedPlugins: true, + sharedConfigBuild: true, + async buildApp(builder) { + isScanBuild = true + builder.environments.rsc!.config.build.write = false + builder.environments.ssr!.config.build.write = false + await builder.build(builder.environments.rsc!) + await builder.build(builder.environments.ssr!) + isScanBuild = false + builder.environments.rsc!.config.build.write = true + builder.environments.ssr!.config.build.write = true + await builder.build(builder.environments.rsc!) + // sort for stable build + clientReferenceMetaMap = sortObject(clientReferenceMetaMap) + serverResourcesMetaMap = sortObject(serverResourcesMetaMap) + await builder.build(builder.environments.client!) + await builder.build(builder.environments.ssr!) + }, + }, + } + }, + configResolved(config_) { + config = config_ + }, + configureServer(server_) { + server = server_ + ;(globalThis as any).__viteRscDevServer = server + + if (rscPluginOptions.disableServerHandler) return + if (rscPluginOptions.serverHandler === false) return + const options = rscPluginOptions.serverHandler ?? { + environmentName: 'rsc', + entryName: 'index', + } + const environment = server.environments[ + options.environmentName + ] as RunnableDevEnvironment + const source = getEntrySource(environment.config, options.entryName) + + return () => { + server.middlewares.use(async (req, res, next) => { + try { + // resolve before `runner.import` to workaround https://github.com/vitejs/vite/issues/19975 + const resolved = + await environment.pluginContainer.resolveId(source) + assert( + resolved, + `[vite-rsc] failed to resolve server handler '${source}'`, + ) + const mod = await environment.runner.import(resolved.id) + createRequestListener(mod.default)(req, res) + } catch (e) { + next(e) + } + }) + } + }, + async configurePreviewServer(server) { + if (rscPluginOptions.disableServerHandler) return + if (rscPluginOptions.serverHandler === false) return + const options = rscPluginOptions.serverHandler ?? { + environmentName: 'rsc', + entryName: 'index', + } + + const entryFile = path.join( + config.environments[options.environmentName]!.build.outDir, + `${options.entryName}.js`, + ) + const entry = pathToFileURL(entryFile).href + const mod = await import(/* @vite-ignore */ entry) + const handler = createRequestListener(mod.default) + + // disable compressions since it breaks html streaming + // https://github.com/vitejs/vite/blob/9f5c59f07aefb1756a37bcb1c0aff24d54288950/packages/vite/src/node/preview.ts#L178 + server.middlewares.use((req, _res, next) => { + delete req.headers['accept-encoding'] + next() + }) + + return () => { + server.middlewares.use(async (req, res, next) => { + try { + handler(req, res) + } catch (e) { + next(e) + } + }) + } + }, + async hotUpdate(ctx) { + if (isCSSRequest(ctx.file)) { + if (this.environment.name === 'client') { + // filter out `.css?direct` (injected by SSR) to avoid browser full reload + // when changing non-self accepting css such as `module.css`. + return ctx.modules.filter((m) => !m.id?.includes('?direct')) + } + } + + const ids = ctx.modules.map((mod) => mod.id).filter((v) => v !== null) + if (ids.length === 0) return + + // TODO: what if shared component? + function isInsideClientBoundary(mods: EnvironmentModuleNode[]) { + const visited = new Set() + function recurse(mod: EnvironmentModuleNode): boolean { + if (!mod.id) return false + if (clientReferenceMetaMap[mod.id]) return true + if (visited.has(mod.id)) return false + visited.add(mod.id) + for (const importer of mod.importers) { + if (recurse(importer)) { + return true + } + } + return false + } + return mods.some((mod) => recurse(mod)) + } + + if (!isInsideClientBoundary(ctx.modules)) { + if (this.environment.name === 'rsc') { + // server hmr + ctx.server.environments.client.hot.send({ + type: 'custom', + event: 'rsc:update', + data: { + file: ctx.file, + }, + }) + } + + if (this.environment.name === 'client') { + // Server files can be included in client module graph, for example, + // when `addWatchFile` is used to track js files as style dependency (e.g. tailwind) + // In this case, reload all importers (for css hmr), and return empty modules to avoid full-reload. + const env = ctx.server.environments.rsc! + const mod = env.moduleGraph.getModuleById(ctx.file) + if (mod) { + for (const clientMod of ctx.modules) { + for (const importer of clientMod.importers) { + if (importer.id && isCSSRequest(importer.id)) { + await this.environment.reloadModule(importer) + } + } + } + return [] + } + } + } + }, + }, + { + name: 'rsc:patch-browser-raw-import', + transform: { + order: 'post', + handler(code) { + if (code.includes('__vite_rsc_raw_import__')) { + // inject dynamic import last to avoid Vite adding `?import` query to client references + return code.replace('__vite_rsc_raw_import__', 'import') + } + }, + }, + }, + { + // backward compat: `loadSsrModule(name)` implemented as `loadModule("ssr", name)` + name: 'rsc:load-ssr-module', + transform(code) { + if (code.includes('import.meta.viteRsc.loadSsrModule(')) { + return code.replaceAll( + `import.meta.viteRsc.loadSsrModule(`, + `import.meta.viteRsc.loadModule("ssr", `, + ) + } + }, + }, + { + // allow loading entry module in other environment by + // - (dev) rewriting to `server.environments[].runner.import()` + // - (build) rewriting to external `import("..//.js")` + name: 'rsc:load-environment-module', + async transform(code) { + if (!code.includes('import.meta.viteRsc.loadModule')) return + const s = new MagicString(code) + for (const match of code.matchAll( + /import\.meta\.viteRsc\.loadModule\(([\s\S]*?)\)/dg, + )) { + const argCode = match[1]!.trim() + const [environmentName, entryName] = evalValue(`[${argCode}]`) + let replacement: string + if ( + this.environment.mode === 'dev' && + rscPluginOptions.loadModuleDevProxy + ) { + const origin = server.resolvedUrls?.local[0] + assert(origin, '[vite-rsc] no server for loadModueleDevProxy') + const endpoint = + origin + + '__vite_rsc_load_module_dev_proxy?' + + new URLSearchParams({ environmentName, entryName }) + replacement = `__vite_rsc_rpc.createRpcClient(${JSON.stringify({ + endpoint, + })})` + s.prepend( + `import * as __vite_rsc_rpc from "@vitejs/plugin-rsc/utils/rpc";`, + ) + } else if (this.environment.mode === 'dev') { + const environment = server.environments[environmentName]! + const source = getEntrySource(environment.config, entryName) + const resolved = await environment.pluginContainer.resolveId(source) + assert(resolved, `[vite-rsc] failed to resolve entry '${source}'`) + replacement = + `globalThis.__viteRscDevServer.environments[${JSON.stringify( + environmentName, + )}]` + `.runner.import(${JSON.stringify(resolved.id)})` + } else { + replacement = JSON.stringify( + `__vite_rsc_load_module:${this.environment.name}:${environmentName}:${entryName}`, + ) + } + const [start, end] = match.indices![0]! + s.overwrite(start, end, replacement) + } + if (s.hasChanged()) { + return { + code: s.toString(), + map: s.generateMap({ hires: 'boundary' }), + } + } + }, + renderChunk(code, chunk) { + if (!code.includes('__vite_rsc_load_module')) return + const s = new MagicString(code) + for (const match of code.matchAll( + /['"]__vite_rsc_load_module:(\w+):(\w+):(\w+)['"]/dg, + )) { + const [fromEnv, toEnv, entryName] = match.slice(1) + const importPath = normalizeRelativePath( + path.relative( + path.join( + config.environments[fromEnv!]!.build.outDir, + chunk.fileName, + '..', + ), + path.join( + config.environments[toEnv!]!.build.outDir, + // TODO: this breaks when custom entyFileNames + `${entryName}.js`, + ), + ), + ) + const replacement = `(import(${JSON.stringify(importPath)}))` + const [start, end] = match.indices![0]! + s.overwrite(start, end, replacement) + } + if (s.hasChanged()) { + return { + code: s.toString(), + map: s.generateMap({ hires: 'boundary' }), + } + } + }, + }, + { + name: 'vite-rsc-load-module-dev-proxy', + apply: () => !!rscPluginOptions.loadModuleDevProxy, + configureServer(server) { + async function createHandler(url: URL) { + const { environmentName, entryName } = Object.fromEntries( + url.searchParams, + ) + assert(environmentName) + assert(entryName) + const environment = server.environments[ + environmentName + ] as RunnableDevEnvironment + const source = getEntrySource(environment.config, entryName) + const resolvedEntry = + await environment.pluginContainer.resolveId(source) + assert( + resolvedEntry, + `[vite-rsc] failed to resolve entry '${source}'`, + ) + const runnerProxy = new Proxy( + {}, + { + get(_target, p, _receiver) { + if (typeof p !== 'string' || p === 'then') { + return + } + return async (...args: any[]) => { + const mod = await environment.runner.import(resolvedEntry.id) + return (mod as any)[p](...args) + } + }, + }, + ) + return createRpcServer(runnerProxy) + } + + server.middlewares.use(async (req, res, next) => { + const url = new URL(req.url ?? '/', `http://localhost`) + if (url.pathname === '/__vite_rsc_load_module_dev_proxy') { + try { + const handler = await createHandler(url) + createRequestListener(handler)(req, res) + } catch (e) { + next(e) + } + return + } + next() + }) + }, + }, + { + name: 'rsc:virtual:vite-rsc/assets-manifest', + resolveId(source) { + if (source === 'virtual:vite-rsc/assets-manifest') { + if (this.environment.mode === 'build') { + return { id: source, external: true } + } + return `\0` + source + } + }, + load(id) { + if (id === '\0virtual:vite-rsc/assets-manifest') { + assert(this.environment.name !== 'client') + assert(this.environment.mode === 'dev') + const entryUrl = assetsURL('@id/__x00__' + VIRTUAL_ENTRIES.browser) + const manifest: AssetsManifest = { + bootstrapScriptContent: `import(${JSON.stringify(entryUrl)})`, + clientReferenceDeps: {}, + } + return `export default ${JSON.stringify(manifest, null, 2)}` + } + }, + // client build + generateBundle(_options, bundle) { + // copy assets from rsc build to client build + if (this.environment.name === 'rsc') { + rscBundle = bundle + } + + if (this.environment.name === 'client') { + const filterAssets = + rscPluginOptions.copyServerAssetsToClient ?? (() => true) + const rscBuildOptions = config.environments.rsc!.build + const rscViteManifest = + typeof rscBuildOptions.manifest === 'string' + ? rscBuildOptions.manifest + : rscBuildOptions.manifest && '.vite/manifest.json' + for (const asset of Object.values(rscBundle)) { + if (asset.fileName === rscViteManifest) continue + if (asset.type === 'asset' && filterAssets(asset.fileName)) { + this.emitFile({ + type: 'asset', + fileName: asset.fileName, + source: asset.source, + }) + } + } + + const serverResources: Record = {} + const rscAssetDeps = collectAssetDeps(rscBundle) + for (const [id, meta] of Object.entries(serverResourcesMetaMap)) { + serverResources[meta.key] = assetsURLOfDeps({ + js: [], + css: rscAssetDeps[id]?.deps.css ?? [], + }) + } + + const assetDeps = collectAssetDeps(bundle) + const entry = Object.values(assetDeps).find( + (v) => v.chunk.name === 'index', + ) + assert(entry) + const entryUrl = assetsURL(entry.chunk.fileName) + const clientReferenceDeps: Record = {} + for (const [id, meta] of Object.entries(clientReferenceMetaMap)) { + const deps: AssetDeps = assetDeps[id]?.deps ?? { js: [], css: [] } + clientReferenceDeps[meta.referenceKey] = assetsURLOfDeps( + mergeAssetDeps(deps, entry.deps), + ) + } + buildAssetsManifest = { + bootstrapScriptContent: `import(${JSON.stringify(entryUrl)})`, + clientReferenceDeps, + serverResources, + } + } + }, + // non-client builds can load assets manifest as external + renderChunk(code, chunk) { + if (code.includes('virtual:vite-rsc/assets-manifest')) { + assert(this.environment.name !== 'client') + const replacement = normalizeRelativePath( + path.relative( + path.join(chunk.fileName, '..'), + BUILD_ASSETS_MANIFEST_NAME, + ), + ) + code = code.replaceAll( + 'virtual:vite-rsc/assets-manifest', + () => replacement, + ) + return { code } + } + return + }, + writeBundle() { + if (this.environment.name === 'ssr') { + // output client manifest to non-client build directly. + // this makes server build to be self-contained and deploy-able for cloudflare. + const assetsManifestCode = `export default ${JSON.stringify( + buildAssetsManifest, + null, + 2, + )}` + for (const name of ['ssr', 'rsc']) { + const manifestPath = path.join( + config.environments[name]!.build.outDir, + BUILD_ASSETS_MANIFEST_NAME, + ) + fs.writeFileSync(manifestPath, assetsManifestCode) + } + } + }, + }, + createVirtualPlugin('vite-rsc/bootstrap-script-content', function () { + assert(this.environment.name !== 'client') + return `\ +import assetsManifest from "virtual:vite-rsc/assets-manifest"; +export default assetsManifest.bootstrapScriptContent; +` + }), + { + name: 'rsc:bootstrap-script-content', + async transform(code) { + if ( + !code.includes('loadBootstrapScriptContent') || + !/import\s*\.\s*meta\s*\.\s*viteRsc\s*\.\s*loadBootstrapScriptContent/.test( + code, + ) + ) { + return + } + + assert(this.environment.name !== 'client') + const output = new MagicString(code) + + for (const match of code.matchAll( + /import\s*\.\s*meta\s*\.\s*viteRsc\s*\.\s*loadBootstrapScriptContent\(([\s\S]*?)\)/dg, + )) { + const argCode = match[1]!.trim() + const entryName = evalValue(argCode) + assert( + entryName, + `[vite-rsc] expected 'loadBootstrapScriptContent("index")' but got ${argCode}`, + ) + let replacement: string = `Promise.resolve(__vite_rsc_assets_manifest.bootstrapScriptContent)` + const [start, end] = match.indices![0]! + output.overwrite(start, end, replacement) + } + if (output.hasChanged()) { + if (!code.includes('__vite_rsc_assets_manifest')) { + output.prepend( + `import __vite_rsc_assets_manifest from "virtual:vite-rsc/assets-manifest";`, + ) + } + return { + code: output.toString(), + map: output.generateMap({ hires: 'boundary' }), + } + } + }, + }, + createVirtualPlugin( + VIRTUAL_ENTRIES.browser.slice('virtual:'.length), + async function () { + assert(this.environment.mode === 'dev') + let code = '' + // enable hmr only when react plugin is available + const resolved = await this.resolve('/@react-refresh') + if (resolved) { + code += ` +import RefreshRuntime from "/@react-refresh"; +RefreshRuntime.injectIntoGlobalHook(window); +window.$RefreshReg$ = () => {}; +window.$RefreshSig$ = () => (type) => type; +window.__vite_plugin_react_preamble_installed__ = true; +` + } + const source = getEntrySource(this.environment.config, 'index') + const resolvedEntry = await this.resolve(source) + assert(resolvedEntry, `[vite-rsc] failed to resolve entry '${source}'`) + code += `await import(${JSON.stringify(resolvedEntry.id)});` + // TODO + // should remove only the ones we injected during ssr, which are duplicated by browser imports for HMR. + // technically this doesn't have to wait for "vite:beforeUpdate" and should do it right after browser css import. + // TODO: there migth be a clever way to let Vite deduplicate itself. + // cf. https://github.com/withastro/astro/blob/acb9b302f56e38833a1ab01147f7fde0bf967889/packages/astro/src/vite-plugin-astro-server/pipeline.ts#L133-L135 + code += ` +const ssrCss = document.querySelectorAll("link[rel='stylesheet']"); +import.meta.hot.on("vite:beforeUpdate", () => ssrCss.forEach(node => node.remove())); +` + return code + }, + ), + { + // make `AsyncLocalStorage` available globally for React request context on edge build (e.g. React.cache, ssr preload) + // https://github.com/facebook/react/blob/f14d7f0d2597ea25da12bcf97772e8803f2a394c/packages/react-server/src/forks/ReactFlightServerConfig.dom-edge.js#L16-L19 + name: 'rsc:inject-async-local-storage', + async configureServer() { + const __viteRscAyncHooks = await import('node:async_hooks') + ;(globalThis as any).AsyncLocalStorage = + __viteRscAyncHooks.AsyncLocalStorage + }, + banner(chunk) { + if ( + (this.environment.name === 'ssr' || + this.environment.name === 'rsc') && + this.environment.mode === 'build' && + chunk.isEntry + ) { + return `\ +import * as __viteRscAyncHooks from "node:async_hooks"; +globalThis.AsyncLocalStorage = __viteRscAyncHooks.AsyncLocalStorage; +` + } + return '' + }, + }, + ...vitePluginRscCore(), + ...vitePluginUseClient(rscPluginOptions), + ...vitePluginUseServer(rscPluginOptions), + ...vitePluginDefineEncryptionKey(rscPluginOptions), + ...vitePluginFindSourceMapURL(), + ...vitePluginRscCss({ rscCssTransform: rscPluginOptions.rscCssTransform }), + scanBuildStripPlugin(), + ] +} + +function scanBuildStripPlugin(): Plugin { + return { + name: 'rsc:scan-strip', + apply: 'build', + enforce: 'post', + transform(code, _id, _options) { + if (!isScanBuild) return + // During server scan, we strip all code but imports to only discover client/server references. + const [imports] = esModuleLexer.parse(code) + const output = imports + .map((e) => e.n && `import ${JSON.stringify(e.n)};\n`) + .filter(Boolean) + .join('') + return { code: output, map: { mappings: '' } } + }, + } +} + +function normalizeRelativePath(s: string) { + s = normalizePath(s) + return s[0] === '.' ? s : './' + s +} + +function getEntrySource( + config: Pick, + name: string = 'index', +) { + const input = config.build.rollupOptions.input + assert(input) + assert( + typeof input === 'object' && + !Array.isArray(input) && + name in input && + typeof input[name] === 'string', + ) + return input[name] +} + +function hashString(v: string) { + return createHash('sha256').update(v).digest().toString('hex').slice(0, 12) +} + +function normalizeReferenceId(id: string, name: 'client' | 'rsc') { + if (!server) { + return hashString(path.relative(config.root, id)) + } + + // align with how Vite import analysis would rewrite id + // to avoid double modules on browser and ssr. + const environment = server.environments[name]! + return normalizeViteImportAnalysisUrl(environment, id) +} + +function vitePluginUseClient( + useClientPluginOptions: Pick< + RscPluginOptions, + 'ignoredPackageWarnings' | 'keepUseCientProxy' + >, +): Plugin[] { + const packageSources = new Map() + + // https://github.com/vitejs/vite/blob/4bcf45863b5f46aa2b41f261283d08f12d3e8675/packages/vite/src/node/utils.ts#L175 + const bareImportRE = /^(?![a-zA-Z]:)[\w@](?!.*:\/\/)/ + + return [ + { + name: 'rsc:use-client', + async transform(code, id) { + if (this.environment.name !== 'rsc') return + if (!code.includes('use client')) return + + const ast = await parseAstAsync(code) + if (!hasDirective(ast.body, 'use client')) return + + let importId: string + let referenceKey: string + const packageSource = packageSources.get(id) + if (!packageSource && id.includes('?v=')) { + assert(this.environment.mode === 'dev') + // If non package source `?v=` reached here, this is a client boundary + // created by a package imported on server environment, which breaks the + // expectation on dependency optimizer on browser. Directly copying over + // "?v=" from client optimizer in client reference can make a hashed + // module stale, so we use another virtual module wrapper to delay such process. + // TODO: suggest `optimizeDeps.exclude` and skip warning if that's already the case. + const ignored = useClientPluginOptions.ignoredPackageWarnings?.some( + (pattern) => + pattern instanceof RegExp + ? pattern.test(id) + : id.includes(`/node_modules/${pattern}/`), + ) + if (!ignored) { + this.warn( + `[vite-rsc] detected an internal client boundary created by a package imported on rsc environment`, + ) + } + importId = `/@id/__x00__virtual:vite-rsc/client-in-server-package-proxy/${encodeURIComponent( + id.split('?v=')[0]!, + )}` + referenceKey = importId + } else if (packageSource) { + if (this.environment.mode === 'dev') { + importId = `/@id/__x00__virtual:vite-rsc/client-package-proxy/${packageSource}` + referenceKey = importId + } else { + importId = packageSource + referenceKey = hashString(packageSource) + } + } else { + if (this.environment.mode === 'dev') { + importId = normalizeViteImportAnalysisUrl( + server.environments.client, + id, + ) + referenceKey = importId + } else { + importId = id + referenceKey = hashString( + normalizePath(path.relative(config.root, id)), + ) + } + } + + const transformDirectiveProxyExport_ = withRollupError( + this, + transformDirectiveProxyExport, + ) + const result = transformDirectiveProxyExport_(ast, { + directive: 'use client', + code, + keep: !!useClientPluginOptions.keepUseCientProxy, + runtime: (name, meta) => { + let proxyValue = + `() => { throw new Error("Unexpectedly client reference export '" + ` + + JSON.stringify(name) + + ` + "' is called on server") }` + if (meta?.value) { + proxyValue = `(${meta.value})` + } + return ( + `$$ReactServer.registerClientReference(` + + ` ${proxyValue},` + + ` ${JSON.stringify(referenceKey)},` + + ` ${JSON.stringify(name)})` + ) + }, + }) + if (!result) return + const { output, exportNames } = result + clientReferenceMetaMap[id] = { + importId, + referenceKey, + packageSource, + exportNames, + renderedExports: [], + } + const importSource = resolvePackage(`${PKG_NAME}/react/rsc`) + output.prepend(`import * as $$ReactServer from "${importSource}";\n`) + return { code: output.toString(), map: { mappings: '' } } + }, + }, + createVirtualPlugin('vite-rsc/client-references', function () { + if (this.environment.mode === 'dev') { + return { code: `export default {}`, map: null } + } + let code = '' + for (const meta of Object.values(clientReferenceMetaMap)) { + // vite/rollup can apply tree-shaking to dynamic import of this form + const key = JSON.stringify(meta.referenceKey) + const id = JSON.stringify(meta.importId) + const exports = meta.renderedExports + .map((name) => (name === 'default' ? 'default: _default' : name)) + .sort() + code += ` + ${key}: async () => { + const {${exports}} = await import(${id}); + return {${exports}}; + }, + ` + } + code = `export default {${code}};\n` + return { code, map: null } + }), + { + name: 'rsc:virtual-client-in-server-package', + async load(id) { + if ( + id.startsWith('\0virtual:vite-rsc/client-in-server-package-proxy/') + ) { + assert.equal(this.environment.mode, 'dev') + assert.notEqual(this.environment.name, 'rsc') + id = decodeURIComponent( + id.slice( + '\0virtual:vite-rsc/client-in-server-package-proxy/'.length, + ), + ) + // TODO: avoid `export default undefined` + return ` + export * from ${JSON.stringify(id)}; + import * as __all__ from ${JSON.stringify(id)}; + export default __all__.default; + ` + } + }, + }, + { + name: 'rsc:virtual-client-package', + resolveId: { + order: 'pre', + async handler(source, importer, options) { + if (this.environment.name === 'rsc' && bareImportRE.test(source)) { + const resolved = await this.resolve(source, importer, options) + if (resolved && resolved.id.includes('/node_modules/')) { + packageSources.set(resolved.id, source) + return resolved + } + } + }, + }, + async load(id) { + if (id.startsWith('\0virtual:vite-rsc/client-package-proxy/')) { + assert(this.environment.mode === 'dev') + const source = id.slice( + '\0virtual:vite-rsc/client-package-proxy/'.length, + ) + const meta = Object.values(clientReferenceMetaMap).find( + (v) => v.packageSource === source, + )! + const exportNames = meta.exportNames + return `export {${exportNames.join(',')}} from ${JSON.stringify( + source, + )};\n` + } + }, + generateBundle(_options, bundle) { + if (this.environment.name !== 'rsc') return + + // track used exports of client references in rsc build + // to tree shake unused exports in browser and ssr build + for (const chunk of Object.values(bundle)) { + if (chunk.type === 'chunk') { + for (const [id, mod] of Object.entries(chunk.modules)) { + const meta = clientReferenceMetaMap[id] + if (meta) { + meta.renderedExports = mod.renderedExports + } + } + } + } + }, + }, + ] +} + +function vitePluginDefineEncryptionKey( + useServerPluginOptions: Pick, +): Plugin[] { + let defineEncryptionKey: string + let emitEncryptionKey = false + const KEY_PLACEHOLDER = '__vite_rsc_define_encryption_key' + const KEY_FILE = '__vite_rsc_encryption_key.js' + + return [ + { + name: 'rsc:encryption-key', + async configEnvironment(name, _config, env) { + if (name === 'rsc' && !env.isPreview) { + defineEncryptionKey = + useServerPluginOptions.defineEncryptionKey ?? + JSON.stringify(toBase64(await generateEncryptionKey())) + } + }, + resolveId(source) { + if (source === 'virtual:vite-rsc/encryption-key') { + // encryption logic can be tree-shaken if action bind is not used. + return { id: '\0' + source, moduleSideEffects: false } + } + }, + load(id) { + if (id === '\0virtual:vite-rsc/encryption-key') { + if (this.environment.mode === 'build') { + // during build, load key from an external file to make chunks stable. + return `export default () => ${KEY_PLACEHOLDER}` + } + return `export default () => (${defineEncryptionKey})` + } + }, + renderChunk(code, chunk) { + if (code.includes(KEY_PLACEHOLDER)) { + assert.equal(this.environment.name, 'rsc') + emitEncryptionKey = true + const normalizedPath = normalizeRelativePath( + path.relative(path.join(chunk.fileName, '..'), KEY_FILE), + ) + const replacement = `import(${JSON.stringify( + normalizedPath, + )}).then(__m => __m.default)` + code = code.replaceAll(KEY_PLACEHOLDER, () => replacement) + return { code } + } + }, + writeBundle() { + if (this.environment.name === 'rsc' && emitEncryptionKey) { + fs.writeFileSync( + path.join(this.environment.config.build.outDir, KEY_FILE), + `export default ${defineEncryptionKey};\n`, + ) + } + }, + }, + ] +} + +function vitePluginUseServer( + useServerPluginOptions: Pick< + RscPluginOptions, + 'ignoredPackageWarnings' | 'enableActionEncryption' + >, +): Plugin[] { + return [ + { + name: 'rsc:use-server', + async transform(code, id) { + if (!code.includes('use server')) return + const ast = await parseAstAsync(code) + + let normalizedId_: string | undefined + const getNormalizedId = () => { + if (!normalizedId_) { + if (id.includes('?v=')) { + assert(this.environment.mode === 'dev') + const ignored = + useServerPluginOptions.ignoredPackageWarnings?.some( + (pattern) => + pattern instanceof RegExp + ? pattern.test(id) + : id.includes(`/node_modules/${pattern}/`), + ) + if (!ignored) { + this.warn( + `[vite-rsc] detected an internal server function created by a package imported on ${this.environment.name} environment`, + ) + } + // module runner has additional resolution step and it's not strict about + // module identity of `import(id)` like browser, so we simply strip it off. + id = id.split('?v=')[0]! + } + normalizedId_ = normalizeReferenceId(id, 'rsc') + } + return normalizedId_ + } + + if (this.environment.name === 'rsc') { + const transformServerActionServer_ = withRollupError( + this, + transformServerActionServer, + ) + const enableEncryption = + useServerPluginOptions.enableActionEncryption ?? true + const { output } = transformServerActionServer_(code, ast, { + runtime: (value, name) => + `$$ReactServer.registerServerReference(${value}, ${JSON.stringify( + getNormalizedId(), + )}, ${JSON.stringify(name)})`, + rejectNonAsyncFunction: true, + encode: enableEncryption + ? (value) => `$$ReactServer.encryptActionBoundArgs(${value})` + : undefined, + decode: enableEncryption + ? (value) => + `await $$ReactServer.decryptActionBoundArgs(${value})` + : undefined, + }) + if (!output.hasChanged()) return + serverReferences[getNormalizedId()] = id + const importSource = resolvePackage(`${PKG_NAME}/rsc`) + output.prepend(`import * as $$ReactServer from "${importSource}";\n`) + return { + code: output.toString(), + map: output.generateMap({ hires: 'boundary' }), + } + } else { + if (!hasDirective(ast.body, 'use server')) return + const transformDirectiveProxyExport_ = withRollupError( + this, + transformDirectiveProxyExport, + ) + const result = transformDirectiveProxyExport_(ast, { + code, + runtime: (name) => + `$$ReactClient.createServerReference(` + + `${JSON.stringify(getNormalizedId() + '#' + name)},` + + `$$ReactClient.callServer, ` + + `undefined, ` + + (this.environment.mode === 'dev' + ? `$$ReactClient.findSourceMapURL,` + : 'undefined,') + + `${JSON.stringify(name)})`, + directive: 'use server', + rejectNonAsyncFunction: true, + }) + const output = result?.output + if (!output?.hasChanged()) return + serverReferences[getNormalizedId()] = id + const name = this.environment.name === 'client' ? 'browser' : 'ssr' + const importSource = resolvePackage(`${PKG_NAME}/react/${name}`) + output.prepend(`import * as $$ReactClient from "${importSource}";\n`) + return { + code: output.toString(), + map: output.generateMap({ hires: 'boundary' }), + } + } + }, + }, + createVirtualPlugin('vite-rsc/server-references', function () { + if (this.environment.mode === 'dev') { + return { code: `export {}`, map: null } + } + const code = generateDynamicImportCode(serverReferences) + return { code, map: null } + }), + ] +} + +// Rethrow transform error through `this.error` with `error.pos` which is injected by `@hiogawa/transforms` +function withRollupError any>( + ctx: Rollup.TransformPluginContext, + f: F, +): F { + function processError(e: any): never { + if (e && typeof e === 'object' && typeof e.pos === 'number') { + return ctx.error(e, e.pos) + } + throw e + } + return function (this: any, ...args: any[]) { + try { + const result = f.apply(this, args) + if (result instanceof Promise) { + return result.catch((e: any) => processError(e)) + } + return result + } catch (e: any) { + processError(e) + } + } as F +} + +function createVirtualPlugin(name: string, load: Plugin['load']) { + name = 'virtual:' + name + return { + name: `rsc:virtual-${name}`, + resolveId(source, _importer, _options) { + return source === name ? '\0' + name : undefined + }, + load(id, options) { + if (id === '\0' + name) { + return (load as Function).apply(this, [id, options]) + } + }, + } satisfies Plugin +} + +function generateDynamicImportCode(map: Record) { + let code = Object.entries(map) + .map( + ([key, id]) => + `${JSON.stringify(key)}: () => import(${JSON.stringify(id)}),`, + ) + .join('\n') + return `export default {${code}};\n` +} + +// // https://github.com/vitejs/vite/blob/2a7473cfed96237711cda9f736465c84d442ddef/packages/vite/src/node/plugins/importAnalysisBuild.ts#L222-L230 +function assetsURL(url: string) { + return config.base + url +} + +function assetsURLOfDeps(deps: AssetDeps) { + return { + js: deps.js.map((href) => assetsURL(href)), + css: deps.css.map((href) => assetsURL(href)), + } +} + +// +// collect client reference dependency chunk for modulepreload +// + +export type AssetsManifest = { + bootstrapScriptContent: string + clientReferenceDeps: Record + serverResources?: Record +} + +export type AssetDeps = { + js: string[] + css: string[] +} + +function mergeAssetDeps(a: AssetDeps, b: AssetDeps): AssetDeps { + return { + js: [...new Set([...a.js, ...b.js])], + css: [...new Set([...a.css, ...b.css])], + } +} + +function collectAssetDeps(bundle: Rollup.OutputBundle) { + const chunkToDeps = new Map() + for (const chunk of Object.values(bundle)) { + if (chunk.type === 'chunk') { + chunkToDeps.set(chunk, collectAssetDepsInner(chunk.fileName, bundle)) + } + } + const idToDeps: Record< + string, + { chunk: Rollup.OutputChunk; deps: AssetDeps } + > = {} + for (const [chunk, deps] of chunkToDeps.entries()) { + for (const id of chunk.moduleIds) { + idToDeps[id] = { chunk, deps } + } + } + return idToDeps +} + +function collectAssetDepsInner( + fileName: string, + bundle: Rollup.OutputBundle, +): AssetDeps { + const visited = new Set() + const css: string[] = [] + + function recurse(k: string) { + if (visited.has(k)) return + visited.add(k) + const v = bundle[k] + assert(v, `Not found '${k}' in the bundle`) + if (v.type === 'chunk') { + css.push(...(v.viteMetadata?.importedCss ?? [])) + for (const k2 of v.imports) { + // server external imports is not in bundle + if (k2 in bundle) { + recurse(k2) + } + } + } + } + + recurse(fileName) + return { + js: [...visited], + css: [...new Set(css)], + } +} + +// +// support findSourceMapURL +// https://github.com/facebook/react/pull/29708 +// https://github.com/facebook/react/pull/30741 +// + +export function vitePluginFindSourceMapURL(): Plugin[] { + return [ + { + name: 'rsc:findSourceMapURL', + apply: 'serve', + configureServer(server) { + server.middlewares.use(async (req, res, next) => { + const url = new URL(req.url!, `http://localhost`) + if (url.pathname === '/__vite_rsc_findSourceMapURL') { + let filename = url.searchParams.get('filename')! + let environmentName = url.searchParams.get('environmentName')! + try { + const map = await findSourceMapURL( + server, + filename, + environmentName, + ) + res.setHeader('content-type', 'application/json') + if (!map) res.statusCode = 404 + res.end(JSON.stringify(map ?? {})) + } catch (e) { + next(e) + } + return + } + next() + }) + }, + }, + ] +} + +export async function findSourceMapURL( + server: ViteDevServer, + filename: string, + environmentName: string, +): Promise { + // this is likely server external (i.e. outside of Vite processing) + if (filename.startsWith('file://')) { + filename = fileURLToPath(filename) + if (fs.existsSync(filename)) { + // line-by-line identity source map + const content = fs.readFileSync(filename, 'utf-8') + return { + version: 3, + sources: [filename], + sourcesContent: [content], + mappings: 'AAAA' + ';AACA'.repeat(content.split('\n').length), + } + } + return + } + + // server component stack, replace log, `registerServerReference`, etc... + let mod: EnvironmentModuleNode | undefined + let map: + | NonNullable['map'] + | undefined + if (environmentName === 'Server') { + mod = server.environments.rsc!.moduleGraph.getModuleById(filename) + // React extracts stacktrace via resetting `prepareStackTrace` on the server + // and let browser devtools handle the mapping. + // https://github.com/facebook/react/blob/4a36d3eab7d9bbbfae62699989aa95e5a0297c16/packages/react-server/src/ReactFlightStackConfigV8.js#L15-L20 + // This means it has additional +2 line offset due to Vite's module runner + // function wrapper. We need to correct it just like Vite module runner. + // https://github.com/vitejs/vite/blob/d94e7b25564abb81ab7b921d4cd44d0f0d22fec4/packages/vite/src/shared/utils.ts#L58-L69 + // https://github.com/vitejs/vite/blob/d94e7b25564abb81ab7b921d4cd44d0f0d22fec4/packages/vite/src/node/ssr/fetchModule.ts#L142-L146 + map = mod?.transformResult?.map + if (map && map.mappings) { + map = { ...map, mappings: (';;' + map.mappings) as any } + } + } + + const base = server.config.base.slice(0, -1) + + // `createServerReference(... findSourceMapURL ...)` called on browser + if (environmentName === 'Client') { + try { + const url = new URL(filename).pathname.slice(base.length) + mod = server.environments.client.moduleGraph.urlToModuleMap.get(url) + map = mod?.transformResult?.map + } catch (e) {} + } + + if (mod && map) { + // fix sources to match Vite's module url on browser + return { ...map, sources: [base + mod.url] } + } +} + +// +// css support +// + +export function vitePluginRscCss( + rscCssOptions?: Pick, +): Plugin[] { + function collectCss(environment: DevEnvironment, entryId: string) { + const visited = new Set() + const cssIds = new Set() + const visitedFiles = new Set() + + function recurse(id: string) { + if (visited.has(id)) { + return + } + visited.add(id) + const mod = environment.moduleGraph.getModuleById(id) + if (mod?.file) { + visitedFiles.add(mod.file) + } + for (const next of mod?.importedModules ?? []) { + if (next.id) { + if (isCSSRequest(next.id)) { + cssIds.add(next.id) + } else { + recurse(next.id) + } + } + } + } + + recurse(entryId) + + // this doesn't include ?t= query so that RSC won't keep adding styles. + const hrefs = [...cssIds].map((id) => + normalizeViteImportAnalysisUrl(environment, id), + ) + return { ids: [...cssIds], hrefs, visitedFiles: [...visitedFiles] } + } + + function getRscCssTransformFilter({ + id, + code, + }: { + id: string + code: string + }): false | TransformWrapExportFilter { + const { query } = parseIdQuery(id) + if ('vite-rsc-css-export' in query) { + const value = query['vite-rsc-css-export'] + if (value) { + const names = value.split(',') + return (name: string) => names.includes(name) + } + return (name: string) => /^[A-Z]/.test(name) + } + + const options = rscCssOptions?.rscCssTransform + if (options === false) return false + if (options?.filter && !options.filter(id)) return false + if (id.includes('/node_modules/') || !/\.[tj]sx$/.test(id)) return false + + // skip transform if no css imports + const result = esModuleLexer.parse(code) + if (!result[0].some((i) => i.t === 1 && i.n && isCSSRequest(i.n))) { + return false + } + // transform only function exports with capital names, e.g. + // export default function Page() {} + // export function Page() {} + // export const Page = () => {} + return (_name: string, meta) => + !!( + (meta.isFunction && meta.declName && /^[A-Z]/.test(meta.declName)) || + (meta.defaultExportIdentifierName && + /^[A-Z]/.test(meta.defaultExportIdentifierName)) + ) + } + + return [ + { + name: 'rsc:rsc-css-export-transform', + async transform(code, id) { + if (this.environment.name !== 'rsc') return + const filter = getRscCssTransformFilter({ id, code }) + if (!filter) return + const ast = await parseAstAsync(code) + const result = await transformRscCssExport({ + ast, + code, + filter, + }) + if (result) { + return { + code: result.output.toString(), + map: result.output.generateMap({ hires: 'boundary' }), + } + } + }, + }, + { + name: 'rsc:css/dev-ssr-virtual', + resolveId(source) { + if (source.startsWith('virtual:vite-rsc/css/dev-ssr/')) { + return '\0' + source + } + }, + async load(id) { + if (id.startsWith('\0virtual:vite-rsc/css/dev-ssr/')) { + id = id.slice('\0virtual:vite-rsc/css/dev-ssr/'.length) + const mod = + await server.environments.ssr.moduleGraph.getModuleByUrl(id) + if (!mod?.id || !mod?.file) { + return `export default []` + } + const result = collectCss(server.environments.ssr, mod.id) + // invalidate virtual module on js file changes to reflect added/deleted css import + for (const file of [mod.file, ...result.visitedFiles]) { + this.addWatchFile(file) + } + const hrefs = result.hrefs.map((href) => assetsURL(href.slice(1))) + return `export default ${JSON.stringify(hrefs)}` + } + }, + }, + { + name: 'rsc:importer-resources', + async transform(code, id) { + if (!code.includes('import.meta.viteRsc.loadCss')) return + + assert(this.environment.name === 'rsc') + const output = new MagicString(code) + + for (const match of code.matchAll( + /import\.meta\.viteRsc\.loadCss\(([\s\S]*?)\)/dg, + )) { + const [start, end] = match.indices![0]! + const argCode = match[1]!.trim() + let importer = id + if (argCode) { + const argValue = evalValue(argCode) + const resolved = await this.resolve(argValue, id) + if (resolved) { + importer = resolved.id + } else { + this.warn( + `[vite-rsc] failed to transform 'import.meta.viteRsc.loadCss(${argCode})'`, + ) + output.update(start, end, `null`) + continue + } + } + const importId = `virtual:vite-rsc/importer-resources?importer=${encodeURIComponent( + importer, + )}` + + // use dynamic import during dev to delay crawling and discover css correctly. + let replacement: string + if (this.environment.mode === 'dev') { + replacement = `__vite_rsc_react__.createElement(async () => { + const __m = await import(${JSON.stringify(importId)}); + return __vite_rsc_react__.createElement(__m.Resources); + })` + } else { + const hash = hashString(importId) + if (!code.includes(`__vite_rsc_importer_resources_${hash}`)) { + output.prepend( + `import * as __vite_rsc_importer_resources_${hash} from ${JSON.stringify( + importId, + )};`, + ) + } + replacement = `__vite_rsc_react__.createElement(__vite_rsc_importer_resources_${hash}.Resources)` + } + output.update(start, end, replacement) + } + + if (output.hasChanged()) { + if (!code.includes('__vite_rsc_react__')) { + output.prepend(`import __vite_rsc_react__ from "react";`) + } + return { + code: output.toString(), + map: output.generateMap({ hires: 'boundary' }), + } + } + }, + resolveId(source) { + if ( + source.startsWith('virtual:vite-rsc/importer-resources?importer=') + ) { + assert(this.environment.name === 'rsc') + return '\0' + source + } + }, + load(id) { + if (id.startsWith('\0virtual:vite-rsc/importer-resources?importer=')) { + const importer = decodeURIComponent( + parseIdQuery(id).query['importer']!, + ) + if (this.environment.mode === 'dev') { + const result = collectCss(server.environments.rsc!, importer) + const cssHrefs = result.hrefs.map((href) => href.slice(1)) + const jsHrefs = [ + '@id/__x00__virtual:vite-rsc/importer-resources-browser?importer=' + + encodeURIComponent(importer), + ] + const deps = assetsURLOfDeps({ css: cssHrefs, js: jsHrefs }) + return generateResourcesCode(JSON.stringify(deps, null, 2)) + } else { + const key = normalizePath(path.relative(config.root, importer)) + serverResourcesMetaMap[importer] = { key } + return ` + import __vite_rsc_assets_manifest__ from "virtual:vite-rsc/assets-manifest"; + ${generateResourcesCode( + `__vite_rsc_assets_manifest__.serverResources[${JSON.stringify( + key, + )}]`, + )} + ` + } + } + if ( + id.startsWith( + '\0virtual:vite-rsc/importer-resources-browser?importer=', + ) + ) { + assert(this.environment.name === 'client') + assert(this.environment.mode === 'dev') + const importer = decodeURIComponent( + parseIdQuery(id).query['importer']!, + ) + const result = collectCss(server.environments.rsc!, importer) + let code = result.ids + .map((id) => id.replace(/^\0/, '')) + .map((id) => `import ${JSON.stringify(id)};\n`) + .join('') + // ensure hmr boundary at this virtual since otherwise non-self accepting css + // (e.g. css module) causes full reload + code += `if (import.meta.hot) { import.meta.hot.accept() }\n` + return code + } + }, + hotUpdate(ctx) { + if (this.environment.name === 'rsc') { + const mods = collectModuleDependents(ctx.modules) + for (const mod of mods) { + if (mod.id) { + const importer = encodeURIComponent(mod.id) + invalidteModuleById( + server.environments.rsc!, + `\0virtual:vite-rsc/importer-resources?importer=${importer}`, + ) + invalidteModuleById( + server.environments.client, + `\0virtual:vite-rsc/importer-resources-browser?importer=${importer}`, + ) + } + } + } + }, + }, + ] +} + +function invalidteModuleById(environment: DevEnvironment, id: string) { + const mod = environment.moduleGraph.getModuleById(id) + if (mod) { + environment.moduleGraph.invalidateModule(mod) + } + return mod +} + +function collectModuleDependents(mods: EnvironmentModuleNode[]) { + const visited = new Set() + function recurse(mod: EnvironmentModuleNode) { + if (visited.has(mod)) return + visited.add(mod) + for (const importer of mod.importers) { + recurse(importer) + } + } + for (const mod of mods) { + recurse(mod) + } + return [...visited] +} + +function generateResourcesCode(depsCode: string) { + const ResourcesFn = (React: typeof import('react'), deps: AssetDeps) => { + return function Resources() { + return React.createElement(React.Fragment, null, [ + ...deps.css.map((href: string) => + React.createElement('link', { + key: 'css:' + href, + rel: 'stylesheet', + precedence: 'vite-rsc/importer-resources', + href: href, + }), + ), + // js is only for dev to forward css import on browser to have hmr + ...deps.js.map((href: string) => + React.createElement('script', { + key: 'js:' + href, + type: 'module', + async: true, + src: href, + }), + ), + ]) + } + } + + return ` + import __vite_rsc_react__ from "react"; + export const Resources = (${ResourcesFn.toString()})(__vite_rsc_react__, ${depsCode}); + ` +} + +// https://github.com/vitejs/vite/blob/ea9aed7ebcb7f4be542bd2a384cbcb5a1e7b31bd/packages/vite/src/node/utils.ts#L1469-L1475 +function evalValue(rawValue: string): T { + const fn = new Function(` + var console, exports, global, module, process, require + return (\n${rawValue}\n) + `) + return fn() +} + +// https://github.com/vitejs/vite-plugin-vue/blob/06931b1ea2b9299267374cb8eb4db27c0626774a/packages/plugin-vue/src/utils/query.ts#L13 +function parseIdQuery(id: string) { + if (!id.includes('?')) return { filename: id, query: {} } + const [filename, rawQuery] = id.split(`?`, 2) + const query = Object.fromEntries(new URLSearchParams(rawQuery)) + return { filename, query } +} + +export async function transformRscCssExport(options: { + ast: Awaited> + code: string + id?: string + filter: TransformWrapExportFilter +}): Promise<{ output: MagicString } | undefined> { + if (hasDirective(options.ast.body, 'use client')) { + return + } + + const result = transformWrapExport(options.code, options.ast, { + runtime: (value, name, meta) => + `__vite_rsc_wrap_css__(${value}, ${JSON.stringify( + meta.defaultExportIdentifierName ?? name, + )})`, + filter: options.filter, + ignoreExportAllDeclaration: true, + }) + if (result.output.hasChanged()) { + if (!options.code.includes('__vite_rsc_react__')) { + result.output.prepend(`import __vite_rsc_react__ from "react";`) + } + result.output.append(` +function __vite_rsc_wrap_css__(value, name) { + if (typeof value !== 'function') return value; + + function __wrapper(props) { + return __vite_rsc_react__.createElement( + __vite_rsc_react__.Fragment, + null, + import.meta.viteRsc.loadCss(${ + options.id ? JSON.stringify(options.id) : '' + }), + __vite_rsc_react__.createElement(value, props), + ); + } + Object.defineProperty(__wrapper, "name", { value: name }); + return __wrapper; +} +`) + return { output: result.output } + } +} + +/** + * temporary workaround for + * - https://github.com/cloudflare/workers-sdk/issues/9538 (fixed in @cloudflare/vite-plugin@1.8.0) + * - https://github.com/vitejs/vite/pull/20077 (fixed in vite@7.0.0) + */ +export function __fix_cloudflare(): Plugin { + return { + name: 'rsc:workaround-cloudflare', + enforce: 'post', + config(config) { + // https://github.com/cloudflare/workers-sdk/issues/9538 + const plugin = config + .plugins!.flat() + .find((p) => p && 'name' in p && p.name === 'vite-plugin-cloudflare') + const original = (plugin as any).configResolved + ;(plugin as any).configResolved = function (this: any, ...args: any[]) { + try { + return original.apply(this, args) + } catch (e) {} + } + + // workaround (fixed in Vite 7) https://github.com/vitejs/vite/pull/20077 + ;(config.environments as any).ssr.resolve.noExternal = true + ;(config.environments as any).rsc.resolve.noExternal = true + }, + } +} + +function sortObject(o: T) { + return Object.fromEntries( + Object.entries(o).sort(([a], [b]) => a.localeCompare(b)), + ) as T +} diff --git a/packages/plugin-rsc/src/react/browser.ts b/packages/plugin-rsc/src/react/browser.ts new file mode 100644 index 000000000..2d0bded73 --- /dev/null +++ b/packages/plugin-rsc/src/react/browser.ts @@ -0,0 +1,62 @@ +// @ts-ignore +import * as ReactClient from '@vitejs/plugin-rsc/vendor/react-server-dom/client.browser' +import type { CallServerCallback } from '../types' + +export { setRequireModule } from '../core/browser' + +export function createFromReadableStream( + stream: ReadableStream, + options: object = {}, +): Promise { + return ReactClient.createFromReadableStream(stream, { + callServer, + findSourceMapURL, + ...options, + }) +} + +export function createFromFetch( + promiseForResponse: Promise, + options: object = {}, +): Promise { + return ReactClient.createFromFetch(promiseForResponse, { + callServer, + findSourceMapURL, + ...options, + }) +} + +export const encodeReply: ( + v: unknown[], + options?: unknown, +) => Promise = ReactClient.encodeReply + +export const createServerReference: (...args: any[]) => unknown = + ReactClient.createServerReference + +// use global instead of local variable to tolerate duplicate modules +// e.g. when `setServerCallback` is pre-bundled but `createServerReference` is not + +export function callServer(...args: any[]): any { + return (globalThis as any).__viteRscCallServer(...args) +} + +export function setServerCallback(fn: CallServerCallback): void { + ;(globalThis as any).__viteRscCallServer = fn +} + +export type { CallServerCallback } + +export const createTemporaryReferenceSet: () => unknown = + ReactClient.createTemporaryReferenceSet + +export function findSourceMapURL( + filename: string, + environmentName: string, +): string | null { + // TODO: respect config.server.origin and config.base? + const url = new URL('/__vite_rsc_findSourceMapURL', window.location.origin) + url.searchParams.set('filename', filename) + url.searchParams.set('environmentName', environmentName) + return url.toString() +} diff --git a/packages/plugin-rsc/src/react/rsc.ts b/packages/plugin-rsc/src/react/rsc.ts new file mode 100644 index 000000000..260cd820f --- /dev/null +++ b/packages/plugin-rsc/src/react/rsc.ts @@ -0,0 +1,81 @@ +// @ts-ignore +import * as ReactClient from '@vitejs/plugin-rsc/vendor/react-server-dom/client.edge' +// @ts-ignore +import * as ReactServer from '@vitejs/plugin-rsc/vendor/react-server-dom/server.edge' +import type { ReactFormState } from 'react-dom/client' +import { + createClientManifest, + createServerDecodeClientManifest, + createServerManifest, +} from '../core/rsc' + +export { loadServerAction, setRequireModule } from '../core/rsc' + +export function renderToReadableStream( + data: T, + options?: object, +): ReadableStream { + return ReactServer.renderToReadableStream( + data, + createClientManifest(), + options, + ) +} + +export function createFromReadableStream( + stream: ReadableStream, + options: object = {}, +): Promise { + return ReactClient.createFromReadableStream(stream, { + serverConsumerManifest: { + // https://github.com/facebook/react/pull/31300 + // https://github.com/vercel/next.js/pull/71527 + serverModuleMap: createServerManifest(), + moduleMap: createServerDecodeClientManifest(), + }, + ...options, + }) +} + +export function registerClientReference( + proxy: T, + id: string, + name: string, +): T { + return ReactServer.registerClientReference(proxy, id, name) +} + +export const registerServerReference: ( + ref: T, + id: string, + name: string, +) => T = ReactServer.registerServerReference + +export function decodeReply( + body: string | FormData, + options?: unknown, +): Promise { + return ReactServer.decodeReply(body, createServerManifest(), options) +} + +export function decodeAction(body: FormData): Promise<() => Promise> { + return ReactServer.decodeAction(body, createServerManifest()) +} + +export function decodeFormState( + actionResult: unknown, + body: FormData, +): Promise { + return ReactServer.decodeFormState(actionResult, body, createServerManifest()) +} + +export const createTemporaryReferenceSet: () => unknown = + ReactServer.createTemporaryReferenceSet + +export const encodeReply: ( + v: unknown[], + options?: unknown, +) => Promise = ReactClient.encodeReply + +export const createClientTemporaryReferenceSet: () => unknown = + ReactClient.createTemporaryReferenceSet diff --git a/packages/plugin-rsc/src/react/ssr.ts b/packages/plugin-rsc/src/react/ssr.ts new file mode 100644 index 000000000..caa325750 --- /dev/null +++ b/packages/plugin-rsc/src/react/ssr.ts @@ -0,0 +1,22 @@ +// @ts-ignore +import * as ReactClient from '@vitejs/plugin-rsc/vendor/react-server-dom/client.edge' +import { createServerConsumerManifest } from '../core/ssr' + +export { setRequireModule } from '../core/ssr' + +export function createFromReadableStream( + stream: ReadableStream, + options: object = {}, +): Promise { + return ReactClient.createFromReadableStream(stream, { + serverConsumerManifest: createServerConsumerManifest(), + ...options, + }) +} + +export function createServerReference(id: string): unknown { + return ReactClient.createServerReference(id) +} + +export const callServer = null +export const findSourceMapURL = null diff --git a/packages/plugin-rsc/src/rsc-html-stream/browser.ts b/packages/plugin-rsc/src/rsc-html-stream/browser.ts new file mode 100644 index 000000000..eb2a74e8d --- /dev/null +++ b/packages/plugin-rsc/src/rsc-html-stream/browser.ts @@ -0,0 +1,4 @@ +import * as rscHtmlStreamClient from 'rsc-html-stream/client' + +export const getRscStreamFromHtml = (): ReadableStream => + rscHtmlStreamClient.rscStream diff --git a/packages/plugin-rsc/src/rsc-html-stream/ssr.ts b/packages/plugin-rsc/src/rsc-html-stream/ssr.ts new file mode 100644 index 000000000..109d09eb0 --- /dev/null +++ b/packages/plugin-rsc/src/rsc-html-stream/ssr.ts @@ -0,0 +1,7 @@ +import * as rscHtmlStreamServer from 'rsc-html-stream/server' + +export const injectRscStreamToHtml = ( + stream: ReadableStream, + options?: { nonce?: string }, +): TransformStream => + rscHtmlStreamServer.injectRSCPayload(stream, options) diff --git a/packages/plugin-rsc/src/rsc.tsx b/packages/plugin-rsc/src/rsc.tsx new file mode 100644 index 000000000..801fea4c0 --- /dev/null +++ b/packages/plugin-rsc/src/rsc.tsx @@ -0,0 +1,33 @@ +import serverReferences from 'virtual:vite-rsc/server-references' +import { setRequireModule } from './core/rsc' + +export { + createClientManifest, + createServerManifest, + loadServerAction, +} from './core/rsc' + +export { + encryptActionBoundArgs, + decryptActionBoundArgs, +} from './utils/encryption-runtime' + +export * from './react/rsc' + +initialize() + +function initialize(): void { + setRequireModule({ + load: async (id) => { + if (!import.meta.env.__vite_rsc_build__) { + return import(/* @vite-ignore */ id) + } else { + const import_ = serverReferences[id] + if (!import_) { + throw new Error(`server reference not found '${id}'`) + } + return import_() + } + }, + }) +} diff --git a/packages/plugin-rsc/src/ssr.tsx b/packages/plugin-rsc/src/ssr.tsx new file mode 100644 index 000000000..ecd0b18fb --- /dev/null +++ b/packages/plugin-rsc/src/ssr.tsx @@ -0,0 +1,65 @@ +import assetsManifest from 'virtual:vite-rsc/assets-manifest' +import * as clientReferences from 'virtual:vite-rsc/client-references' +import * as ReactDOM from 'react-dom' +import { setRequireModule } from './core/ssr' +import type { AssetDeps } from './plugin' + +export { createServerConsumerManifest } from './core/ssr' + +export * from './react/ssr' + +initialize() + +function initialize(): void { + setRequireModule({ + load: async (id) => { + if (!import.meta.env.__vite_rsc_build__) { + const mod = await import(/* @vite-ignore */ id) + const modCss = await import( + /* @vite-ignore */ '/@id/__x00__virtual:vite-rsc/css/dev-ssr/' + id + ) + return wrapResourceProxy(mod, { js: [], css: modCss.default }) + } else { + const import_ = clientReferences.default[id] + if (!import_) { + throw new Error(`client reference not found '${id}'`) + } + const deps = assetsManifest.clientReferenceDeps[id] + // kick off preload before initial async import, which is not sync-cached + if (deps) { + preloadDeps(deps) + } + const mod: any = await import_() + return wrapResourceProxy(mod, deps) + } + }, + }) +} + +// preload/preinit during getter access since `load` is cached on production +function wrapResourceProxy(mod: any, deps?: AssetDeps) { + return new Proxy(mod, { + get(target, p, receiver) { + if (p in mod) { + if (deps) { + preloadDeps(deps) + } + } + return Reflect.get(target, p, receiver) + }, + }) +} + +function preloadDeps(deps: AssetDeps) { + for (const href of deps.js) { + ReactDOM.preloadModule(href, { + as: 'script', + // vite doesn't allow configuring crossorigin at the moment, so we can hard code it as well. + // https://github.com/vitejs/vite/issues/6648 + crossOrigin: '', + }) + } + for (const href of deps.css) { + ReactDOM.preinit(href, { as: 'style' }) + } +} diff --git a/packages/plugin-rsc/src/transforms/estree.ts b/packages/plugin-rsc/src/transforms/estree.ts new file mode 100644 index 000000000..3cd7681ce --- /dev/null +++ b/packages/plugin-rsc/src/transforms/estree.ts @@ -0,0 +1,9 @@ +import type {} from 'estree' + +// rollup ast has node position +declare module 'estree' { + interface BaseNode { + start: number + end: number + } +} diff --git a/packages/plugin-rsc/src/transforms/hoist.test.ts b/packages/plugin-rsc/src/transforms/hoist.test.ts new file mode 100644 index 000000000..7f0d53937 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/hoist.test.ts @@ -0,0 +1,372 @@ +import { parseAstAsync } from 'vite' +import { describe, expect, it } from 'vitest' +import { transformHoistInlineDirective } from './hoist' +import { debugSourceMap } from './test-utils' + +describe(transformHoistInlineDirective, () => { + async function testTransform( + input: string, + options?: { encode?: boolean; noExport?: boolean; directive?: string }, + ) { + const ast = await parseAstAsync(input) + const { output } = transformHoistInlineDirective(input, ast, { + runtime: (value, name) => + `$$register(${value}, "", ${JSON.stringify(name)})`, + directive: options?.directive ?? 'use server', + encode: options?.encode ? (v) => `__enc(${v})` : undefined, + decode: options?.encode ? (v) => `__dec(${v})` : undefined, + noExport: options?.noExport, + }) + if (!output.hasChanged()) { + return + } + if (process.env['DEBUG_SOURCEMAP']) { + await debugSourceMap(output) + } + return output.toString() + } + + it('none', async () => { + const input = ` +const x = "x"; + +async function f() { + return x; +} +` + expect(await testTransform(input)).toMatchInlineSnapshot(`undefined`) + }) + + it('top level', async () => { + const input = ` +const x = "x"; + +async function f() { + "use server"; + return x; +} + +async function g() { +} + +export async function h(formData) { + "use server"; + return formData.get(x); +} + +export default function w() { + "use server"; +} +` + expect(await testTransform(input)).toMatchInlineSnapshot(` + " + const x = "x"; + + const f = /* #__PURE__ */ $$register($$hoist_0_f, "", "$$hoist_0_f"); + + async function g() { + } + + export const h = /* #__PURE__ */ $$register($$hoist_1_h, "", "$$hoist_1_h"); + + const w = /* #__PURE__ */ $$register($$hoist_2_w, "", "$$hoist_2_w"); + export default w; + + ;export async function $$hoist_0_f() { + "use server"; + return x; + }; + /* #__PURE__ */ Object.defineProperty($$hoist_0_f, "name", { value: "f" }); + + ;export async function $$hoist_1_h(formData) { + "use server"; + return formData.get(x); + }; + /* #__PURE__ */ Object.defineProperty($$hoist_1_h, "name", { value: "h" }); + + ;export function $$hoist_2_w() { + "use server"; + }; + /* #__PURE__ */ Object.defineProperty($$hoist_2_w, "name", { value: "w" }); + " + `) + + // nothing to encode + expect(await testTransform(input, { encode: true })).toBe( + await testTransform(input), + ) + }) + + it('closure', async () => { + const input = ` +let count = 0; + +function Counter() { + const name = "value"; + + async function changeCount(formData) { + "use server"; + count += Number(formData.get(name)); + } + + return "something"; +} +` + expect(await testTransform(input)).toMatchInlineSnapshot(` + " + let count = 0; + + function Counter() { + const name = "value"; + + const changeCount = /* #__PURE__ */ $$register($$hoist_0_changeCount, "", "$$hoist_0_changeCount").bind(null, name); + + return "something"; + } + + ;export async function $$hoist_0_changeCount(name, formData) { + "use server"; + count += Number(formData.get(name)); + }; + /* #__PURE__ */ Object.defineProperty($$hoist_0_changeCount, "name", { value: "changeCount" }); + " + `) + }) + + it('many', async () => { + const input = ` +let count = 0; + +function Counter() { + const name = "value"; + + async function changeCount(formData) { + "use server"; + count += Number(formData.get(name)); + } + + async function changeCount2(formData) { + "use server"; + count += Number(formData.get(name)); + } + + return "something"; +} +` + expect(await testTransform(input)).toMatchInlineSnapshot(` + " + let count = 0; + + function Counter() { + const name = "value"; + + const changeCount = /* #__PURE__ */ $$register($$hoist_0_changeCount, "", "$$hoist_0_changeCount").bind(null, name); + + const changeCount2 = /* #__PURE__ */ $$register($$hoist_1_changeCount2, "", "$$hoist_1_changeCount2").bind(null, name); + + return "something"; + } + + ;export async function $$hoist_0_changeCount(name, formData) { + "use server"; + count += Number(formData.get(name)); + }; + /* #__PURE__ */ Object.defineProperty($$hoist_0_changeCount, "name", { value: "changeCount" }); + + ;export async function $$hoist_1_changeCount2(name, formData) { + "use server"; + count += Number(formData.get(name)); + }; + /* #__PURE__ */ Object.defineProperty($$hoist_1_changeCount2, "name", { value: "changeCount2" }); + " + `) + }) + + it('arrow', async () => { + const input = ` +let count = 0; + +function Counter() { + const name = "value"; + + return { + type: "form", + action: (formData) => { + "use server"; + count += Number(formData.get(name)); + } + } +} +` + expect(await testTransform(input)).toMatchInlineSnapshot(` + " + let count = 0; + + function Counter() { + const name = "value"; + + return { + type: "form", + action: /* #__PURE__ */ $$register($$hoist_0_anonymous_server_function, "", "$$hoist_0_anonymous_server_function").bind(null, name) + } + } + + ;export function $$hoist_0_anonymous_server_function(name, formData) { + "use server"; + count += Number(formData.get(name)); + }; + /* #__PURE__ */ Object.defineProperty($$hoist_0_anonymous_server_function, "name", { value: "anonymous_server_function" }); + " + `) + + expect(await testTransform(input, { encode: true })).toMatchInlineSnapshot(` + " + let count = 0; + + function Counter() { + const name = "value"; + + return { + type: "form", + action: /* #__PURE__ */ $$register($$hoist_0_anonymous_server_function, "", "$$hoist_0_anonymous_server_function").bind(null, __enc([name])) + } + } + + ;export function $$hoist_0_anonymous_server_function($$hoist_encoded, formData) { + const [name] = __dec($$hoist_encoded); + "use server"; + count += Number(formData.get(name)); + }; + /* #__PURE__ */ Object.defineProperty($$hoist_0_anonymous_server_function, "name", { value: "anonymous_server_function" }); + " + `) + }) + + it('higher order', async () => { + // packages/react-server/examples/next/app/actions/header/page.tsx + // packages/react-server/examples/next/app/actions/header/validator.ts + const input = ` +export default function Page() { + const x = 0; + const action = validator(async (y) => { + "use server"; + return x + y; + }) +} + +function validator(action) { + return async function (arg) { + "use server"; + return action(arg); + }; +} +` + expect(await testTransform(input)).toMatchInlineSnapshot(` + " + export default function Page() { + const x = 0; + const action = validator(/* #__PURE__ */ $$register($$hoist_0_anonymous_server_function, "", "$$hoist_0_anonymous_server_function").bind(null, x)) + } + + function validator(action) { + return /* #__PURE__ */ $$register($$hoist_1_anonymous_server_function, "", "$$hoist_1_anonymous_server_function").bind(null, action); + } + + ;export async function $$hoist_0_anonymous_server_function(x, y) { + "use server"; + return x + y; + }; + /* #__PURE__ */ Object.defineProperty($$hoist_0_anonymous_server_function, "name", { value: "anonymous_server_function" }); + + ;export async function $$hoist_1_anonymous_server_function(action, arg) { + "use server"; + return action(arg); + }; + /* #__PURE__ */ Object.defineProperty($$hoist_1_anonymous_server_function, "name", { value: "anonymous_server_function" }); + " + `) + + expect(await testTransform(input, { encode: true })).toMatchInlineSnapshot(` + " + export default function Page() { + const x = 0; + const action = validator(/* #__PURE__ */ $$register($$hoist_0_anonymous_server_function, "", "$$hoist_0_anonymous_server_function").bind(null, __enc([x]))) + } + + function validator(action) { + return /* #__PURE__ */ $$register($$hoist_1_anonymous_server_function, "", "$$hoist_1_anonymous_server_function").bind(null, __enc([action])); + } + + ;export async function $$hoist_0_anonymous_server_function($$hoist_encoded, y) { + const [x] = __dec($$hoist_encoded); + "use server"; + return x + y; + }; + /* #__PURE__ */ Object.defineProperty($$hoist_0_anonymous_server_function, "name", { value: "anonymous_server_function" }); + + ;export async function $$hoist_1_anonymous_server_function($$hoist_encoded, arg) { + const [action] = __dec($$hoist_encoded); + "use server"; + return action(arg); + }; + /* #__PURE__ */ Object.defineProperty($$hoist_1_anonymous_server_function, "name", { value: "anonymous_server_function" }); + " + `) + }) + + // edge case found in https://github.com/remix-run/react-router/blob/98367e49900701c460cb08eb16c2441da5007efc/playground/rsc-vite/src/routes/home/home.tsx + it('export before import', async () => { + const input = ` +export {} from "edge-case"; +import { redirect } from "react-router/rsc"; + +export default () => { + const redirectOnServer = async () => { + "use server"; + throw redirect(); + }; +} +` + expect(await testTransform(input)).toMatchInlineSnapshot(` + " + export {} from "edge-case"; + import { redirect } from "react-router/rsc"; + + export default () => { + const redirectOnServer = /* #__PURE__ */ $$register($$hoist_0_redirectOnServer, "", "$$hoist_0_redirectOnServer"); + } + + ;export async function $$hoist_0_redirectOnServer() { + "use server"; + throw redirect(); + }; + /* #__PURE__ */ Object.defineProperty($$hoist_0_redirectOnServer, "name", { value: "redirectOnServer" }); + " + `) + }) + + it('noExport', async () => { + const input = ` +export async function test() { + "use cache"; + return "test"; +} +` + expect( + await testTransform(input, { + directive: 'use cache', + noExport: true, + }), + ).toMatchInlineSnapshot(` + " + export const test = /* #__PURE__ */ $$register($$hoist_0_test, "", "$$hoist_0_test"); + + ;async function $$hoist_0_test() { + "use cache"; + return "test"; + }; + /* #__PURE__ */ Object.defineProperty($$hoist_0_test, "name", { value: "test" }); + " + `) + }) +}) diff --git a/packages/plugin-rsc/src/transforms/hoist.ts b/packages/plugin-rsc/src/transforms/hoist.ts new file mode 100644 index 000000000..3cb7e9ac7 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/hoist.ts @@ -0,0 +1,142 @@ +import { tinyassert } from '@hiogawa/utils' +import type { Program } from 'estree' +import { walk } from 'estree-walker' +import MagicString from 'magic-string' +import { analyze } from 'periscopic' +import { hasDirective } from './utils' + +export function transformHoistInlineDirective( + input: string, + ast: Program, + { + runtime, + directive, + rejectNonAsyncFunction, + ...options + }: { + runtime: (value: string, name: string) => string + directive: string + rejectNonAsyncFunction?: boolean + encode?: (value: string) => string + decode?: (value: string) => string + noExport?: boolean + }, +): { + output: MagicString + names: string[] +} { + const output = new MagicString(input) + + // re-export somehow confuses periscopic scopes so remove them before analysis + walk(ast, { + enter(node) { + if (node.type === 'ExportAllDeclaration') { + this.remove() + } + if (node.type === 'ExportNamedDeclaration' && !node.declaration) { + this.remove() + } + }, + }) + + const analyzed = analyze(ast) + const names: string[] = [] + + walk(ast, { + enter(node, parent) { + if ( + (node.type === 'FunctionExpression' || + node.type === 'FunctionDeclaration' || + node.type === 'ArrowFunctionExpression') && + node.body.type === 'BlockStatement' && + hasDirective(node.body.body, directive) + ) { + if (!node.async && rejectNonAsyncFunction) { + throw Object.assign( + new Error(`"${directive}" doesn't allow non async function`), + { + pos: node.start, + }, + ) + } + + const scope = analyzed.map.get(node) + tinyassert(scope) + const declName = node.type === 'FunctionDeclaration' && node.id.name + const originalName = + declName || + (parent?.type === 'VariableDeclarator' && + parent.id.type === 'Identifier' && + parent.id.name) || + 'anonymous_server_function' + + // bind variables which are neither global nor in own scope + const bindVars = [...scope.references].filter((ref) => { + // declared function itself is included as reference + if (ref === declName) { + return false + } + const owner = scope.find_owner(ref) + return owner && owner !== scope && owner !== analyzed.scope + }) + let newParams = [ + ...bindVars, + ...node.params.map((n) => input.slice(n.start, n.end)), + ].join(', ') + if (bindVars.length > 0 && options.decode) { + newParams = [ + '$$hoist_encoded', + ...node.params.map((n) => input.slice(n.start, n.end)), + ].join(', ') + output.appendLeft( + node.body.body[0]!.start, + `const [${bindVars.join(',')}] = ${options.decode( + '$$hoist_encoded', + )};\n`, + ) + } + + // append a new `FunctionDeclaration` at the end + const newName = + `$$hoist_${names.length}` + (originalName ? `_${originalName}` : '') + names.push(newName) + output.update( + node.start, + node.body.start, + `\n;${options.noExport ? '' : 'export '}${ + node.async ? 'async ' : '' + }function ${newName}(${newParams}) `, + ) + output.appendLeft( + node.end, + `;\n/* #__PURE__ */ Object.defineProperty(${newName}, "name", { value: ${JSON.stringify( + originalName, + )} });\n`, + ) + output.move(node.start, node.end, input.length) + + // replace original declartion with action register + bind + let newCode = `/* #__PURE__ */ ${runtime(newName, newName)}` + if (bindVars.length > 0) { + const bindArgs = options.encode + ? options.encode('[' + bindVars.join(', ') + ']') + : bindVars.join(', ') + newCode = `${newCode}.bind(null, ${bindArgs})` + } + if (declName) { + newCode = `const ${declName} = ${newCode};` + if (parent?.type === 'ExportDefaultDeclaration') { + output.remove(parent.start, node.start) + newCode = `${newCode}\nexport default ${declName};` + } + } + output.appendLeft(node.start, newCode) + } + }, + }) + + return { + output, + names, + } +} diff --git a/packages/plugin-rsc/src/transforms/index.ts b/packages/plugin-rsc/src/transforms/index.ts new file mode 100644 index 000000000..55b054c08 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/index.ts @@ -0,0 +1,5 @@ +export * from './hoist' +export * from './wrap-export' +export * from './proxy-export' +export * from './utils' +export * from './server-action' diff --git a/packages/plugin-rsc/src/transforms/proxy-export.test.ts b/packages/plugin-rsc/src/transforms/proxy-export.test.ts new file mode 100644 index 000000000..4be88ac00 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/proxy-export.test.ts @@ -0,0 +1,242 @@ +import { parseAstAsync } from 'vite' +import { describe, expect, test } from 'vitest' +import { transformProxyExport } from './proxy-export' +import { debugSourceMap } from './test-utils' +import { transformWrapExport } from './wrap-export' + +async function testTransform(input: string, options?: { keep?: boolean }) { + const ast = await parseAstAsync(input) + const result = transformProxyExport(ast, { + code: input, + runtime: (name, meta) => { + if (meta?.value) { + return `$$proxy(${meta.value}, "", ${JSON.stringify(name)})` + } + return `$$proxy("", ${JSON.stringify(name)})` + }, + ...options, + }) + if (process.env['DEBUG_SOURCEMAP']) { + await debugSourceMap(result.output) + } + return { ...result, output: result.output.toString() } +} + +describe(transformWrapExport, () => { + test('basic', async () => { + const input = ` +export const Arrow = () => { + +}; +export default "hi"; +export function Fn() { +}; + +export async function AsyncFn() { + + +}; + +export class Cls {}; +` + expect(await testTransform(input)).toMatchInlineSnapshot(` + { + "exportNames": [ + "Arrow", + "default", + "Fn", + "AsyncFn", + "Cls", + ], + "output": " + export const Arrow = /* #__PURE__ */ $$proxy("", "Arrow"); + + export default /* #__PURE__ */ $$proxy("", "default"); + + export const Fn = /* #__PURE__ */ $$proxy("", "Fn"); + + + export const AsyncFn = /* #__PURE__ */ $$proxy("", "AsyncFn"); + + + export const Cls = /* #__PURE__ */ $$proxy("", "Cls"); + + ", + } + `) + }) + + test('export destructuring', async () => { + const input = ` +export const { x, y: [z] } = { x: 0, y: [1] }; +` + expect(await testTransform(input)).toMatchInlineSnapshot(` + { + "exportNames": [ + "x", + "z", + ], + "output": " + export const x = /* #__PURE__ */ $$proxy("", "x"); + export const z = /* #__PURE__ */ $$proxy("", "z"); + + ", + } + `) + }) + + test('default function', async () => { + const input = `export default function Fn() {}` + expect(await testTransform(input)).toMatchInlineSnapshot( + ` + { + "exportNames": [ + "default", + ], + "output": "export default /* #__PURE__ */ $$proxy("", "default"); + ", + } + `, + ) + }) + + test('default anonymous function', async () => { + const input = `export default function () {}` + expect(await testTransform(input)).toMatchInlineSnapshot( + ` + { + "exportNames": [ + "default", + ], + "output": "export default /* #__PURE__ */ $$proxy("", "default"); + ", + } + `, + ) + }) + + test('default class', async () => { + const input = `export default class Cls {}` + expect(await testTransform(input)).toMatchInlineSnapshot( + ` + { + "exportNames": [ + "default", + ], + "output": "export default /* #__PURE__ */ $$proxy("", "default"); + ", + } + `, + ) + }) + + test('export simple', async () => { + const input = ` +const x = 0; +export { x } +` + expect(await testTransform(input)).toMatchInlineSnapshot(` + { + "exportNames": [ + "x", + ], + "output": " + + export const x = /* #__PURE__ */ $$proxy("", "x"); + + ", + } + `) + }) + + test('export rename', async () => { + const input = ` +const x = 0; +export { x as y } +` + expect(await testTransform(input)).toMatchInlineSnapshot(` + { + "exportNames": [ + "y", + ], + "output": " + + export const y = /* #__PURE__ */ $$proxy("", "y"); + + ", + } + `) + }) + + test('re-export simple', async () => { + const input = `export { x } from "./dep"` + expect(await testTransform(input)).toMatchInlineSnapshot(` + { + "exportNames": [ + "x", + ], + "output": "export const x = /* #__PURE__ */ $$proxy("", "x"); + ", + } + `) + }) + + test('re-export rename', async () => { + const input = `export { x as y } from "./dep"` + expect(await testTransform(input)).toMatchInlineSnapshot(` + { + "exportNames": [ + "y", + ], + "output": "export const y = /* #__PURE__ */ $$proxy("", "y"); + ", + } + `) + }) + + test('keep', async () => { + const input = `\ +"use client" +import { atom } from 'jotai/vanilla'; + +const local1 = 1; +export const countAtom = atom(local1); + +export const MyClientComp = () => { throw new Error('...') } +` + expect(await testTransform(input)).toMatchInlineSnapshot(` + { + "exportNames": [ + "countAtom", + "MyClientComp", + ], + "output": " + + + + export const countAtom = /* #__PURE__ */ $$proxy("", "countAtom"); + + + export const MyClientComp = /* #__PURE__ */ $$proxy("", "MyClientComp"); + + ", + } + `) + expect(await testTransform(input, { keep: true })).toMatchInlineSnapshot(` + { + "exportNames": [ + "countAtom", + "MyClientComp", + ], + "output": ""use client" + import { atom } from 'jotai/vanilla'; + + const local1 = 1; + export const countAtom = /* #__PURE__ */ $$proxy(atom(local1), "", "countAtom"); + + export const MyClientComp = /* #__PURE__ */ $$proxy(() => { throw new Error('...') }, "", "MyClientComp"); + ", + } + `) + }) +}) diff --git a/packages/plugin-rsc/src/transforms/proxy-export.ts b/packages/plugin-rsc/src/transforms/proxy-export.ts new file mode 100644 index 000000000..f08a05701 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/proxy-export.ts @@ -0,0 +1,169 @@ +import { tinyassert } from '@hiogawa/utils' +import type { Node, Program } from 'estree' +import MagicString from 'magic-string' +import { extract_names } from 'periscopic' +import { hasDirective } from './utils' + +export type TransformProxyExportOptions = { + /** Required for source map and `keep` options */ + code?: string + runtime: (name: string, meta?: { value: string }) => string + ignoreExportAllDeclaration?: boolean + rejectNonAsyncFunction?: boolean + /** + * escape hatch for Waku's `allowServer` + * @default false + */ + keep?: boolean +} + +export function transformDirectiveProxyExport( + ast: Program, + options: { + directive: string + } & TransformProxyExportOptions, +): + | { + exportNames: string[] + output: MagicString + } + | undefined { + if (!hasDirective(ast.body, options.directive)) { + return + } + return transformProxyExport(ast, options) +} + +export function transformProxyExport( + ast: Program, + options: TransformProxyExportOptions, +): { + exportNames: string[] + output: MagicString +} { + if (options.keep && typeof options.code !== 'string') { + throw new Error('`keep` option requires `code`') + } + const output = new MagicString(options.code ?? ' '.repeat(ast.end)) + const exportNames: string[] = [] + + function createExport(node: Node, names: string[]) { + exportNames.push(...names) + const newCode = names + .map( + (name) => + (name === 'default' ? `export default` : `export const ${name} =`) + + ` /* #__PURE__ */ ${options.runtime(name)};\n`, + ) + .join('') + output.update(node.start, node.end, newCode) + } + + function validateNonAsyncFunction(node: Node, ok?: boolean) { + if (options.rejectNonAsyncFunction && !ok) { + throw Object.assign(new Error(`unsupported non async function`), { + pos: node.start, + }) + } + } + + for (const node of ast.body) { + if (node.type === 'ExportNamedDeclaration') { + if (node.declaration) { + if ( + node.declaration.type === 'FunctionDeclaration' || + node.declaration.type === 'ClassDeclaration' + ) { + /** + * export function foo() {} + */ + validateNonAsyncFunction( + node, + node.declaration.type === 'FunctionDeclaration' && + node.declaration.async, + ) + createExport(node, [node.declaration.id.name]) + } else if (node.declaration.type === 'VariableDeclaration') { + /** + * export const foo = 1, bar = 2 + */ + validateNonAsyncFunction( + node, + node.declaration.declarations.every( + (decl) => + decl.init?.type === 'ArrowFunctionExpression' && + decl.init.async, + ), + ) + if (options.keep && options.code) { + if (node.declaration.declarations.length === 1) { + const decl = node.declaration.declarations[0]! + if (decl.id.type === 'Identifier' && decl.init) { + const name = decl.id.name + const value = options.code.slice(decl.init.start, decl.init.end) + const newCode = `export const ${name} = /* #__PURE__ */ ${options.runtime( + name, + { value }, + )};` + output.update(node.start, node.end, newCode) + exportNames.push(name) + continue + } + } + } + const names = node.declaration.declarations.flatMap((decl) => + extract_names(decl.id), + ) + createExport(node, names) + } else { + node.declaration satisfies never + } + } else { + /** + * export { foo, bar as car } from './foo' + * export { foo, bar as car } + */ + const names: string[] = [] + for (const spec of node.specifiers) { + tinyassert(spec.exported.type === 'Identifier') + names.push(spec.exported.name) + } + createExport(node, names) + } + continue + } + + /** + * export * from './foo' + */ + if ( + !options.ignoreExportAllDeclaration && + node.type === 'ExportAllDeclaration' + ) { + throw new Error('unsupported ExportAllDeclaration') + } + + /** + * export default function foo() {} + * export default class Foo {} + * export default () => {} + */ + if (node.type === 'ExportDefaultDeclaration') { + validateNonAsyncFunction( + node, + node.declaration.type === 'Identifier' || + (node.declaration.type === 'FunctionDeclaration' && + node.declaration.async), + ) + createExport(node, ['default']) + continue + } + + if (options.keep) continue + + // remove all other nodes + output.remove(node.start, node.end) + } + + return { exportNames, output } +} diff --git a/packages/plugin-rsc/src/transforms/server-action.ts b/packages/plugin-rsc/src/transforms/server-action.ts new file mode 100644 index 000000000..a7e3b83a1 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/server-action.ts @@ -0,0 +1,36 @@ +import type { Program } from 'estree' +import type MagicString from 'magic-string' +import { transformHoistInlineDirective } from './hoist' +import { hasDirective } from './utils' +import { transformWrapExport } from './wrap-export' + +// TODO +// source map for `options.runtime` (registerServerReference) call +// needs to match original position. +export function transformServerActionServer( + input: string, + ast: Program, + options: { + runtime: (value: string, name: string) => string + rejectNonAsyncFunction?: boolean + encode?: (value: string) => string + decode?: (value: string) => string + }, +): + | { + exportNames: string[] + output: MagicString + } + | { + output: MagicString + names: string[] + } { + // TODO: unify (generalize transformHoistInlineDirective to support top leve directive case) + if (hasDirective(ast.body, 'use server')) { + return transformWrapExport(input, ast, options) + } + return transformHoistInlineDirective(input, ast, { + ...options, + directive: 'use server', + }) +} diff --git a/packages/plugin-rsc/src/transforms/test-utils.ts b/packages/plugin-rsc/src/transforms/test-utils.ts new file mode 100644 index 000000000..31818b9a2 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/test-utils.ts @@ -0,0 +1,19 @@ +import { dirname } from 'path' +import { hashString } from '@hiogawa/utils' +import { mkdir, writeFile } from 'fs/promises' +import type MagicString from 'magic-string' + +export async function debugSourceMap(output: MagicString): Promise { + // load it directly to https://evanw.github.io/source-map-visualization + const code = output.toString() + const map = output.generateMap({ includeContent: true, hires: 'boundary' }) + const filepath = `.debug/sourcemap/${hashString(code)}.js` + await mkdir(dirname(filepath), { recursive: true }) + await writeFile(filepath, inlineSourceMap(code, map)) +} + +function inlineSourceMap(code: string, map: unknown) { + const encoded = Buffer.from(JSON.stringify(map), 'utf-8').toString('base64') + const sourceMappingURL = 'sourceMappingURL'.slice() // avoid vite-node regex match + return `${code}\n\n//# ${sourceMappingURL}=data:application/json;charset=utf-8;base64,${encoded}\n` +} diff --git a/packages/plugin-rsc/src/transforms/utils.ts b/packages/plugin-rsc/src/transforms/utils.ts new file mode 100644 index 000000000..aafcecbfc --- /dev/null +++ b/packages/plugin-rsc/src/transforms/utils.ts @@ -0,0 +1,82 @@ +import { tinyassert } from '@hiogawa/utils' +import type { Program } from 'estree' +import { extract_names } from 'periscopic' + +export function hasDirective( + body: Program['body'], + directive: string, +): boolean { + return !!body.find( + (stmt) => + stmt.type === 'ExpressionStatement' && + stmt.expression.type === 'Literal' && + typeof stmt.expression.value === 'string' && + stmt.expression.value === directive, + ) +} + +export function getExportNames( + ast: Program, + options: { + ignoreExportAllDeclaration?: boolean + }, +): { + exportNames: string[] +} { + const exportNames: string[] = [] + + for (const node of ast.body) { + if (node.type === 'ExportNamedDeclaration') { + if (node.declaration) { + if ( + node.declaration.type === 'FunctionDeclaration' || + node.declaration.type === 'ClassDeclaration' + ) { + /** + * export function foo() {} + */ + exportNames.push(node.declaration.id.name) + } else if (node.declaration.type === 'VariableDeclaration') { + /** + * export const foo = 1, bar = 2 + */ + for (const decl of node.declaration.declarations) { + exportNames.push(...extract_names(decl.id)) + } + } else { + node.declaration satisfies never + } + } else { + /** + * export { foo, bar as car } from './foo' + * export { foo, bar as car } + */ + for (const spec of node.specifiers) { + tinyassert(spec.exported.type === 'Identifier') + exportNames.push(spec.exported.name) + } + } + } + + /** + * export * from './foo' + */ + if ( + !options.ignoreExportAllDeclaration && + node.type === 'ExportAllDeclaration' + ) { + throw new Error('unsupported ExportAllDeclaration') + } + + /** + * export default function foo() {} + * export default class Foo {} + * export default () => {} + */ + if (node.type === 'ExportDefaultDeclaration') { + exportNames.push('default') + } + } + + return { exportNames } +} diff --git a/packages/plugin-rsc/src/transforms/wrap-export.test.ts b/packages/plugin-rsc/src/transforms/wrap-export.test.ts new file mode 100644 index 000000000..1382e53c3 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/wrap-export.test.ts @@ -0,0 +1,274 @@ +import { parseAstAsync } from 'vite' +import { describe, expect, test } from 'vitest' +import { debugSourceMap } from './test-utils' +import { + type TransformWrapExportFilter, + transformWrapExport, +} from './wrap-export' + +async function testTransform( + input: string, + options?: { filter?: TransformWrapExportFilter }, +) { + const ast = await parseAstAsync(input) + const { output } = transformWrapExport(input, ast, { + runtime: (value, name) => + `$$wrap(${value}, "", ${JSON.stringify(name)})`, + ignoreExportAllDeclaration: true, + ...options, + }) + if (process.env['DEBUG_SOURCEMAP']) { + await debugSourceMap(output) + } + return output.hasChanged() && output.toString() +} + +describe(transformWrapExport, () => { + test('basic', async () => { + const input = ` +export const Arrow = () => {}; +export default "hi"; +export function Fn() {}; +export async function AsyncFn() {}; +export class Cls {}; +` + expect(await testTransform(input)).toMatchInlineSnapshot(` + " + let Arrow = () => {}; + const $$default = "hi"; + function Fn() {}; + async function AsyncFn() {}; + class Cls {}; + Arrow = /* #__PURE__ */ $$wrap(Arrow, "", "Arrow"); + export { Arrow }; + Fn = /* #__PURE__ */ $$wrap(Fn, "", "Fn"); + export { Fn }; + AsyncFn = /* #__PURE__ */ $$wrap(AsyncFn, "", "AsyncFn"); + export { AsyncFn }; + Cls = /* #__PURE__ */ $$wrap(Cls, "", "Cls"); + export { Cls }; + ; + const $$wrap_$$default = /* #__PURE__ */ $$wrap($$default, "", "default"); + export { $$wrap_$$default as default }; + " + `) + }) + + test('preserve reference', async () => { + const input = ` +export let count = 0; +export function changeCount() { + count += 1; +} +` + expect(await testTransform(input)).toMatchInlineSnapshot(` + " + let count = 0; + function changeCount() { + count += 1; + } + count = /* #__PURE__ */ $$wrap(count, "", "count"); + export { count }; + changeCount = /* #__PURE__ */ $$wrap(changeCount, "", "changeCount"); + export { changeCount }; + " + `) + }) + + test('export destructuring', async () => { + const input = ` +export const { x, y: [z] } = { x: 0, y: [1] }; +` + expect(await testTransform(input)).toMatchInlineSnapshot(` + " + let { x, y: [z] } = { x: 0, y: [1] }; + x = /* #__PURE__ */ $$wrap(x, "", "x"); + export { x }; + z = /* #__PURE__ */ $$wrap(z, "", "z"); + export { z }; + " + `) + }) + + test('default function', async () => { + const input = `export default function Fn() {}` + expect(await testTransform(input)).toMatchInlineSnapshot( + ` + "function Fn() {}; + const $$wrap_Fn = /* #__PURE__ */ $$wrap(Fn, "", "default"); + export { $$wrap_Fn as default }; + " + `, + ) + }) + + test('default anonymous function', async () => { + const input = `export default function () {}` + expect(await testTransform(input)).toMatchInlineSnapshot( + ` + "const $$default = function () {}; + const $$wrap_$$default = /* #__PURE__ */ $$wrap($$default, "", "default"); + export { $$wrap_$$default as default }; + " + `, + ) + }) + + test('default class', async () => { + const input = `export default class Cls {}` + expect(await testTransform(input)).toMatchInlineSnapshot( + ` + "class Cls {}; + const $$wrap_Cls = /* #__PURE__ */ $$wrap(Cls, "", "default"); + export { $$wrap_Cls as default }; + " + `, + ) + }) + + test('export simple', async () => { + const input = ` +const x = 0; +export { x } +` + expect(await testTransform(input)).toMatchInlineSnapshot(` + " + const x = 0; + + ; + const $$wrap_x = /* #__PURE__ */ $$wrap(x, "", "x"); + export { $$wrap_x as x }; + " + `) + }) + + test('export rename', async () => { + const input = ` +const x = 0; +export { x as y } +` + expect(await testTransform(input)).toMatchInlineSnapshot(` + " + const x = 0; + + ; + const $$wrap_x = /* #__PURE__ */ $$wrap(x, "", "y"); + export { $$wrap_x as y }; + " + `) + }) + + test('re-export simple', async () => { + const input = `export { x } from "./dep"` + expect(await testTransform(input)).toMatchInlineSnapshot(` + "; + import { x as $$import_x } from "./dep"; + const $$wrap_$$import_x = /* #__PURE__ */ $$wrap($$import_x, "", "x"); + export { $$wrap_$$import_x as x }; + " + `) + }) + + test('re-export rename', async () => { + const input = `export { x as y } from "./dep"` + expect(await testTransform(input)).toMatchInlineSnapshot(` + "; + import { x as $$import_x } from "./dep"; + const $$wrap_$$import_x = /* #__PURE__ */ $$wrap($$import_x, "", "y"); + export { $$wrap_$$import_x as y }; + " + `) + }) + + test('re-export all simple', async () => { + const input = `export * from "./dep"` + expect(await testTransform(input)).toMatchInlineSnapshot(`false`) + }) + + test('re-export all rename', async () => { + const input = `export * as all from "./dep"` + expect(await testTransform(input)).toMatchInlineSnapshot(`false`) + }) + + test('filter', async () => { + const input = ` +export const a = 0; +export const b = 0, b_no = 0; +export { c } from "./c"; +export { a as aa }; +` + const result = await testTransform(input, { + filter: (name) => !name.endsWith('no'), + }) + expect(result).toMatchInlineSnapshot(` + " + let a = 0; + let b = 0, b_no = 0; + + + a = /* #__PURE__ */ $$wrap(a, "", "a"); + export { a }; + b = /* #__PURE__ */ $$wrap(b, "", "b"); + export { b }; + export { b_no }; + ; + import { c as $$import_c } from "./c"; + const $$wrap_$$import_c = /* #__PURE__ */ $$wrap($$import_c, "", "c"); + export { $$wrap_$$import_c as c }; + const $$wrap_a = /* #__PURE__ */ $$wrap(a, "", "aa"); + export { $$wrap_a as aa }; + " + `) + }) + + test('filter meta', async () => { + const input = ` +export const a = 0; +export const b = function() {} +export const c = () => {} +export default function d() {} +export default () => {} +` + const result = await testTransform(input, { + filter: (_name, meta) => !!(meta.isFunction && meta.declName), + }) + expect(result).toMatchInlineSnapshot(` + " + let a = 0; + let b = function() {} + let c = () => {} + function d() {} + const $$default = () => {} + export { a }; + b = /* #__PURE__ */ $$wrap(b, "", "b"); + export { b }; + c = /* #__PURE__ */ $$wrap(c, "", "c"); + export { c }; + ; + const $$wrap_d = /* #__PURE__ */ $$wrap(d, "", "default"); + export { $$wrap_d as default }; + export { $$default as default }; + " + `) + }) + + test('filter defaultExportIdentifierName', async () => { + const input = ` +const Page = () => {} +export default Page; +` + expect( + await testTransform(input, { + filter: (_name, meta) => meta.defaultExportIdentifierName === 'Page', + }), + ).toMatchInlineSnapshot(` + " + const Page = () => {} + const $$default = Page; + ; + const $$wrap_$$default = /* #__PURE__ */ $$wrap($$default, "", "default"); + export { $$wrap_$$default as default }; + " + `) + }) +}) diff --git a/packages/plugin-rsc/src/transforms/wrap-export.ts b/packages/plugin-rsc/src/transforms/wrap-export.ts new file mode 100644 index 000000000..6587f966b --- /dev/null +++ b/packages/plugin-rsc/src/transforms/wrap-export.ts @@ -0,0 +1,245 @@ +import { tinyassert } from '@hiogawa/utils' +import type { Node, Program } from 'estree' +import MagicString from 'magic-string' +import { extract_names } from 'periscopic' + +type ExportMeta = { + declName?: string + isFunction?: boolean + defaultExportIdentifierName?: string +} + +export type TransformWrapExportFilter = ( + name: string, + meta: ExportMeta, +) => boolean + +export function transformWrapExport( + input: string, + ast: Program, + options: { + runtime: (value: string, name: string, meta: ExportMeta) => string + ignoreExportAllDeclaration?: boolean + rejectNonAsyncFunction?: boolean + filter?: TransformWrapExportFilter + }, +): { + exportNames: string[] + output: MagicString +} { + const output = new MagicString(input) + const exportNames: string[] = [] + const toAppend: string[] = [] + const filter = options.filter ?? (() => true) + + function wrapSimple( + start: number, + end: number, + exports: { name: string; meta: ExportMeta }[], + ) { + // update code and move to preserve `registerServerReference` position + // e.g. + // input + // export async function f() {} + // ^^^^^^ + // output + // async function f() {} + // f = registerServerReference(f, ...) << maps to original "export" token + // export { f } << + const newCode = exports + .map((e) => [ + filter(e.name, e.meta) && + `${e.name} = /* #__PURE__ */ ${options.runtime( + e.name, + e.name, + e.meta, + )};\n`, + `export { ${e.name} };\n`, + ]) + .flat() + .filter(Boolean) + .join('') + output.update(start, end, newCode) + output.move(start, end, input.length) + } + + function wrapExport(name: string, exportName: string, meta: ExportMeta = {}) { + if (!filter(exportName, meta)) { + toAppend.push(`export { ${name} as ${exportName} }`) + return + } + + toAppend.push( + `const $$wrap_${name} = /* #__PURE__ */ ${options.runtime( + name, + exportName, + meta, + )}`, + `export { $$wrap_${name} as ${exportName} }`, + ) + } + + function validateNonAsyncFunction(node: Node, ok?: boolean) { + if (options.rejectNonAsyncFunction && !ok) { + throw Object.assign(new Error(`unsupported non async function`), { + pos: node.start, + }) + } + } + + for (const node of ast.body) { + // named exports + if (node.type === 'ExportNamedDeclaration') { + if (node.declaration) { + if ( + node.declaration.type === 'FunctionDeclaration' || + node.declaration.type === 'ClassDeclaration' + ) { + /** + * export function foo() {} + */ + validateNonAsyncFunction( + node, + node.declaration.type === 'FunctionDeclaration' && + node.declaration.async, + ) + const name = node.declaration.id.name + wrapSimple(node.start, node.declaration.start, [ + { name, meta: { isFunction: true, declName: name } }, + ]) + } else if (node.declaration.type === 'VariableDeclaration') { + /** + * export const foo = 1, bar = 2 + */ + validateNonAsyncFunction( + node, + node.declaration.declarations.every( + (decl) => + decl.init?.type === 'ArrowFunctionExpression' && + decl.init.async, + ), + ) + if (node.declaration.kind === 'const') { + output.update( + node.declaration.start, + node.declaration.start + 5, + 'let', + ) + } + const names = node.declaration.declarations.flatMap((decl) => + extract_names(decl.id), + ) + // treat only simple single decl as function + let isFunction = false + if (node.declaration.declarations.length === 1) { + const decl = node.declaration.declarations[0]! + isFunction = + decl.id.type === 'Identifier' && + (decl.init?.type === 'ArrowFunctionExpression' || + decl.init?.type === 'FunctionExpression') + } + wrapSimple( + node.start, + node.declaration.start, + names.map((name) => ({ + name, + meta: { isFunction, declName: name }, + })), + ) + } else { + node.declaration satisfies never + } + } else { + if (node.source) { + /** + * export { foo, bar as car } from './foo' + */ + output.remove(node.start, node.end) + for (const spec of node.specifiers) { + tinyassert(spec.local.type === 'Identifier') + tinyassert(spec.exported.type === 'Identifier') + const name = spec.local.name + toAppend.push( + `import { ${name} as $$import_${name} } from ${node.source.raw}`, + ) + wrapExport(`$$import_${name}`, spec.exported.name) + } + } else { + /** + * export { foo, bar as car } + */ + output.remove(node.start, node.end) + for (const spec of node.specifiers) { + tinyassert(spec.local.type === 'Identifier') + tinyassert(spec.exported.type === 'Identifier') + wrapExport(spec.local.name, spec.exported.name) + } + } + } + } + + /** + * export * from './foo' + */ + // vue sfc uses ExportAllDeclaration to re-export setup script. + // for now we just give an option to not throw for this case. + // https://github.com/vitejs/vite-plugin-vue/blob/30a97c1ddbdfb0e23b7dc14a1d2fb609668b9987/packages/plugin-vue/src/main.ts#L372 + if ( + !options.ignoreExportAllDeclaration && + node.type === 'ExportAllDeclaration' + ) { + throw Object.assign(new Error('unsupported ExportAllDeclaration'), { + pos: node.start, + }) + } + + /** + * export default function foo() {} + * export default class Foo {} + * export default () => {} + */ + if (node.type === 'ExportDefaultDeclaration') { + validateNonAsyncFunction( + node, + // TODO: somehow identifier is allowed in next.js? + // (see packages/react-server/examples/next/app/actions/server/actions.ts) + node.declaration.type === 'Identifier' || + (node.declaration.type === 'FunctionDeclaration' && + node.declaration.async), + ) + let localName: string + let isFunction = false + let declName: string | undefined + let defaultExportIdentifierName: string | undefined + if ( + (node.declaration.type === 'FunctionDeclaration' || + node.declaration.type === 'ClassDeclaration') && + node.declaration.id + ) { + // preserve name scope for `function foo() {}` and `class Foo {}` + localName = node.declaration.id.name + output.remove(node.start, node.declaration.start) + isFunction = node.declaration.type === 'FunctionDeclaration' + declName = node.declaration.id.name + } else { + // otherwise we can introduce new variable + localName = '$$default' + output.update(node.start, node.declaration.start, 'const $$default = ') + if (node.declaration.type === 'Identifier') { + defaultExportIdentifierName = node.declaration.name + } + } + wrapExport(localName, 'default', { + isFunction, + declName, + defaultExportIdentifierName, + }) + } + } + + if (toAppend.length > 0) { + output.append(['', ...toAppend, ''].join(';\n')) + } + + return { exportNames, output } +} diff --git a/packages/plugin-rsc/src/types/index.ts b/packages/plugin-rsc/src/types/index.ts new file mode 100644 index 000000000..aae722125 --- /dev/null +++ b/packages/plugin-rsc/src/types/index.ts @@ -0,0 +1,27 @@ +export interface ImportManifestEntry { + id: string + name: string + chunks: string[] + async?: boolean +} + +export interface BundlerConfig { + [bundlerId: string]: ImportManifestEntry +} + +export type ModuleMap = { + [id: string]: { + [exportName: string]: ImportManifestEntry + } +} + +export interface ServerConsumerManifest { + moduleMap?: ModuleMap + serverModuleMap?: BundlerConfig + moduleLoading?: { + prefix: string + crossOriign?: string + } +} + +export type CallServerCallback = (id: string, args: unknown[]) => unknown diff --git a/packages/plugin-rsc/src/types/react.ts b/packages/plugin-rsc/src/types/react.ts new file mode 100644 index 000000000..d92ea675b --- /dev/null +++ b/packages/plugin-rsc/src/types/react.ts @@ -0,0 +1,3 @@ +declare module 'react-dom/server.edge' { + export * from 'react-dom/server' +} diff --git a/packages/plugin-rsc/src/types/virtual.d.ts b/packages/plugin-rsc/src/types/virtual.d.ts new file mode 100644 index 000000000..81bbc242d --- /dev/null +++ b/packages/plugin-rsc/src/types/virtual.d.ts @@ -0,0 +1,22 @@ +declare module 'virtual:vite-rsc/assets-manifest' { + const assetsManifest: import('../plugin').AssetsManifest + export default assetsManifest +} + +declare module 'virtual:vite-rsc/client-references' { + const default_: Record Promise> + export default default_ + export const assetDeps: + | Record + | undefined +} + +declare module 'virtual:vite-rsc/server-references' { + const default_: Record Promise> + export default default_ +} + +declare module 'virtual:vite-rsc/encryption-key' { + const default_: () => string | Promise + export default default_ +} diff --git a/packages/plugin-rsc/src/utils/encryption-runtime.ts b/packages/plugin-rsc/src/utils/encryption-runtime.ts new file mode 100644 index 000000000..86a3c02eb --- /dev/null +++ b/packages/plugin-rsc/src/utils/encryption-runtime.ts @@ -0,0 +1,48 @@ +import encryptionKeySource from 'virtual:vite-rsc/encryption-key' +import { once } from '@hiogawa/utils' +import { createFromReadableStream, renderToReadableStream } from '../react/rsc' +import { + arrayToStream, + concatArrayStream, + decryptBuffer, + encryptBuffer, + fromBase64, +} from './encryption-utils' + +// based on +// https://github.com/parcel-bundler/parcel/blob/9855f558a69edde843b1464f39a6010f6b421efe/packages/transformers/js/src/rsc-utils.js +// https://github.com/vercel/next.js/blob/c10c10daf9e95346c31c24dc49d6b7cda48b5bc8/packages/next/src/server/app-render/encryption.ts +// https://github.com/vercel/next.js/pull/56377 + +export async function encryptActionBoundArgs( + originalValue: unknown, +): Promise { + const serialized = renderToReadableStream(originalValue) + const serializedBuffer = await concatArrayStream(serialized) + return encryptBuffer(serializedBuffer, await getEncryptionKey()) +} + +export async function decryptActionBoundArgs( + encrypted: ReturnType, +): Promise { + const serializedBuffer = await decryptBuffer( + await encrypted, + await getEncryptionKey(), + ) + const serialized = arrayToStream(new Uint8Array(serializedBuffer)) + return createFromReadableStream(serialized) +} + +const getEncryptionKey = /* #__PURE__ */ once(async () => { + const resolved = await encryptionKeySource() + const key = await crypto.subtle.importKey( + 'raw', + fromBase64(resolved), + { + name: 'AES-GCM', + }, + true, + ['encrypt', 'decrypt'], + ) + return key +}) diff --git a/packages/plugin-rsc/src/utils/encryption-utils.ts b/packages/plugin-rsc/src/utils/encryption-utils.ts new file mode 100644 index 000000000..34ca2a379 --- /dev/null +++ b/packages/plugin-rsc/src/utils/encryption-utils.ts @@ -0,0 +1,115 @@ +// based on +// https://github.com/vercel/next.js/blob/a0993d90c280690e83a2a1bc7c292e1187429fe8/packages/next/src/server/app-render/encryption-utils.ts + +function arrayBufferToString(buffer: ArrayBuffer | Uint8Array): string { + const bytes = new Uint8Array(buffer) + const len = bytes.byteLength + if (len < 65535) { + return String.fromCharCode.apply(null, bytes as unknown as number[]) + } + let binary = '' + for (let i = 0; i < len; i++) { + binary += String.fromCharCode(bytes[i]!) + } + return binary +} + +function stringToUint8Array(binary: string): Uint8Array { + const len = binary.length + const arr = new Uint8Array(len) + for (let i = 0; i < len; i++) { + arr[i] = binary.charCodeAt(i) + } + return arr +} + +function concatArray(chunks: Uint8Array[]): Uint8Array { + let total = 0 + for (const chunk of chunks) { + total += chunk.length + } + const result = new Uint8Array(total) + let offset = 0 + for (const chunk of chunks) { + result.set(chunk, offset) + offset += chunk.length + } + return result +} + +export async function concatArrayStream( + stream: ReadableStream, +): Promise { + const chunks: Uint8Array[] = [] + await stream.pipeTo( + new WritableStream({ + write(chunk) { + chunks.push(chunk) + }, + }), + ) + return concatArray(chunks) +} + +export function arrayToStream(data: Uint8Array): ReadableStream { + return new ReadableStream({ + start(controller) { + controller.enqueue(data) + controller.close() + }, + }) +} + +export function toBase64(buffer: Uint8Array): string { + return btoa(arrayBufferToString(buffer)) +} + +export function fromBase64(data: string): Uint8Array { + return stringToUint8Array(atob(data)) +} + +export async function generateEncryptionKey(): Promise { + const key = await crypto.subtle.generateKey( + { + name: 'AES-GCM', + length: 256, + }, + true, + ['encrypt', 'decrypt'], + ) + const exported = await crypto.subtle.exportKey('raw', key) + return new Uint8Array(exported) +} + +export async function encryptBuffer( + data: BufferSource, + key: CryptoKey, +): Promise { + const iv = crypto.getRandomValues(new Uint8Array(16)) + const encrypted = await crypto.subtle.encrypt( + { + name: 'AES-GCM', + iv, + }, + key, + data, + ) + return toBase64(concatArray([iv, new Uint8Array(encrypted)])) +} + +export async function decryptBuffer( + encryptedString: string, + key: CryptoKey, +): Promise { + const concatenated = fromBase64(encryptedString) + const iv = concatenated.slice(0, 16) + const encrypted = concatenated.slice(16) + return crypto.subtle.decrypt( + { + name: 'AES-GCM', + iv, + }, + key, + encrypted, + ) +} diff --git a/packages/plugin-rsc/src/utils/rpc.ts b/packages/plugin-rsc/src/utils/rpc.ts new file mode 100644 index 000000000..483b9a2e7 --- /dev/null +++ b/packages/plugin-rsc/src/utils/rpc.ts @@ -0,0 +1,76 @@ +import { decode, encode } from 'turbo-stream' + +type RequestPayload = { + method: string + args: any[] +} + +type ResponsePayload = { + ok: boolean + data: any +} + +export function createRpcServer(handlers: T) { + return async (request: Request): Promise => { + if (!request.body) { + throw new Error(`loadModuleDevProxy error: missing request body`) + } + const reqPayload = await decode( + request.body.pipeThrough(new TextDecoderStream()), + ) + const handler = (handlers as any)[reqPayload.method] + if (!handler) { + throw new Error( + `loadModuleDevProxy error: unknown method ${reqPayload.method}`, + ) + } + const resPayload: ResponsePayload = { ok: true, data: undefined } + try { + resPayload.data = await handler(...reqPayload.args) + } catch (e) { + resPayload.ok = false + resPayload.data = e + } + return new Response(encode(resPayload)) + } +} + +export function createRpcClient(options: { endpoint: string }): T { + async function callRpc(method: string, args: any[]) { + const reqPayload: RequestPayload = { + method, + args, + } + const body = encode(reqPayload).pipeThrough(new TextEncoderStream()) + const res = await fetch(options.endpoint, { + method: 'POST', + body, + // @ts-ignore undici compat + duplex: 'half', + }) + if (!res.ok || !res.body) { + throw new Error( + `loadModuleDevProxy error: ${res.status} ${res.statusText}`, + ) + } + const resPayload = await decode( + res.body.pipeThrough(new TextDecoderStream()), + ) + if (!resPayload.ok) { + throw resPayload.data + } + return resPayload.data + } + + return new Proxy( + {}, + { + get(_target, p, _receiver) { + if (typeof p !== 'string' || p === 'then') { + return + } + return (...args: any[]) => callRpc(p, args) + }, + }, + ) as any +} diff --git a/packages/plugin-rsc/src/vite-utils.ts b/packages/plugin-rsc/src/vite-utils.ts new file mode 100644 index 000000000..b23e58444 --- /dev/null +++ b/packages/plugin-rsc/src/vite-utils.ts @@ -0,0 +1,127 @@ +// import analysis logic copied from vite + +import fs from 'node:fs' +import path from 'node:path' +import type { DevEnvironment, Rollup } from 'vite' + +export const VALID_ID_PREFIX = `/@id/` + +export const NULL_BYTE_PLACEHOLDER = `__x00__` + +export const FS_PREFIX = `/@fs/` + +export function wrapId(id: string): string { + return id.startsWith(VALID_ID_PREFIX) + ? id + : VALID_ID_PREFIX + id.replace('\0', NULL_BYTE_PLACEHOLDER) +} + +export function unwrapId(id: string): string { + return id.startsWith(VALID_ID_PREFIX) + ? id.slice(VALID_ID_PREFIX.length).replace(NULL_BYTE_PLACEHOLDER, '\0') + : id +} + +export function withTrailingSlash(path: string): string { + if (path[path.length - 1] !== '/') { + return `${path}/` + } + return path +} + +const postfixRE = /[?#].*$/ +export function cleanUrl(url: string): string { + return url.replace(postfixRE, '') +} + +export function splitFileAndPostfix(path: string): { + file: string + postfix: string +} { + const file = cleanUrl(path) + return { file, postfix: path.slice(file.length) } +} + +const windowsSlashRE = /\\/g +export function slash(p: string): string { + return p.replace(windowsSlashRE, '/') +} + +const isWindows = typeof process !== 'undefined' && process.platform === 'win32' + +export function injectQuery(url: string, queryToInject: string): string { + const { file, postfix } = splitFileAndPostfix(url) + const normalizedFile = isWindows ? slash(file) : file + return `${normalizedFile}?${queryToInject}${ + postfix[0] === '?' ? `&${postfix.slice(1)}` : /* hash only */ postfix + }` +} + +export function joinUrlSegments(a: string, b: string): string { + if (!a || !b) { + return a || b || '' + } + if (a.endsWith('/')) { + a = a.substring(0, a.length - 1) + } + if (b[0] !== '/') { + b = '/' + b + } + return a + b +} + +export function normalizeResolvedIdToUrl( + environment: DevEnvironment, + url: string, + resolved: Rollup.PartialResolvedId, +): string { + const root = environment.config.root + const depsOptimizer = environment.depsOptimizer + + // normalize all imports into resolved URLs + // e.g. `import 'foo'` -> `import '/@fs/.../node_modules/foo/index.js'` + if (resolved.id.startsWith(withTrailingSlash(root))) { + // in root: infer short absolute path from root + url = resolved.id.slice(root.length) + } else if ( + depsOptimizer?.isOptimizedDepFile(resolved.id) || + // vite-plugin-react isn't following the leading \0 virtual module convention. + // This is a temporary hack to avoid expensive fs checks for React apps. + // We'll remove this as soon we're able to fix the react plugins. + (resolved.id !== '/@react-refresh' && + path.isAbsolute(resolved.id) && + fs.existsSync(cleanUrl(resolved.id))) + ) { + // an optimized deps may not yet exists in the filesystem, or + // a regular file exists but is out of root: rewrite to absolute /@fs/ paths + url = path.posix.join(FS_PREFIX, resolved.id) + } else { + url = resolved.id + } + + // if the resolved id is not a valid browser import specifier, + // prefix it to make it valid. We will strip this before feeding it + // back into the transform pipeline + if (url[0] !== '.' && url[0] !== '/') { + url = wrapId(resolved.id) + } + + return url +} + +export function normalizeViteImportAnalysisUrl( + environment: DevEnvironment, + id: string, +): string { + let url = normalizeResolvedIdToUrl(environment, id, { id }) + + // https://github.com/vitejs/vite/blob/c18ce868c4d70873406e9f7d1b2d0a03264d2168/packages/vite/src/node/plugins/importAnalysis.ts#L416 + if (environment.config.consumer === 'client') { + const mod = environment.moduleGraph.getModuleById(id) + if (mod && mod.lastHMRTimestamp > 0) { + url = injectQuery(url, `t=${mod.lastHMRTimestamp}`) + } + } + + return url +} diff --git a/packages/plugin-rsc/tsconfig.base.json b/packages/plugin-rsc/tsconfig.base.json new file mode 100644 index 000000000..e0ab8c298 --- /dev/null +++ b/packages/plugin-rsc/tsconfig.base.json @@ -0,0 +1,16 @@ +{ + "extends": "@tsconfig/strictest/tsconfig.json", + "compilerOptions": { + "paths": { + "@oxc-project/types": ["./node_modules/@types/estree"] + }, + "noImplicitReturns": false, + "exactOptionalPropertyTypes": false, + "verbatimModuleSyntax": true, + "noEmit": true, + "moduleResolution": "Bundler", + "module": "ESNext", + "target": "ESNext", + "lib": ["ESNext", "DOM", "DOM.Iterable", "DOM.AsyncIterable"] + } +} diff --git a/packages/plugin-rsc/tsconfig.json b/packages/plugin-rsc/tsconfig.json new file mode 100644 index 000000000..e4cfe71d1 --- /dev/null +++ b/packages/plugin-rsc/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.base.json", + "include": ["src", "*.ts", "types"], + "compilerOptions": { + "noPropertyAccessFromIndexSignature": false, + "noImplicitReturns": false, + "checkJs": false, + "declaration": true, + "isolatedDeclarations": true, + "types": ["vite/client"], + "jsx": "react-jsx" + } +} diff --git a/packages/plugin-rsc/tsdown.config.ts b/packages/plugin-rsc/tsdown.config.ts new file mode 100644 index 000000000..0c39520ab --- /dev/null +++ b/packages/plugin-rsc/tsdown.config.ts @@ -0,0 +1,49 @@ +import fs from 'node:fs' +import { defineConfig } from 'tsdown' + +export default defineConfig({ + entry: [ + 'src/index.ts', + 'src/plugin.ts', + 'src/browser.ts', + 'src/ssr.tsx', + 'src/rsc.tsx', + 'src/vite-utils.ts', + 'src/core/browser.ts', + 'src/core/ssr.ts', + 'src/core/rsc.ts', + 'src/core/plugin.ts', + 'src/react/browser.ts', + 'src/react/ssr.ts', + 'src/react/rsc.ts', + 'src/extra/browser.tsx', + 'src/extra/ssr.tsx', + 'src/extra/rsc.tsx', + 'src/rsc-html-stream/ssr.ts', + 'src/rsc-html-stream/browser.ts', + 'src/utils/rpc.ts', + ], + format: ['esm'], + external: [/^virtual:/, /^@vitejs\/plugin-rsc\/vendor\//], + dts: { + sourcemap: process.argv.slice(2).includes('--sourcemap'), + }, + plugins: [ + { + name: 'vendor-react-server-dom', + buildStart() { + fs.rmSync('./dist/vendor/', { recursive: true, force: true }) + fs.mkdirSync('./dist/vendor', { recursive: true }) + fs.cpSync( + './node_modules/react-server-dom-webpack', + './dist/vendor/react-server-dom', + { recursive: true, dereference: true }, + ) + fs.rmSync('./dist/vendor/react-server-dom/node_modules', { + recursive: true, + force: true, + }) + }, + }, + ], +}) as any diff --git a/packages/plugin-rsc/types/index.d.ts b/packages/plugin-rsc/types/index.d.ts new file mode 100644 index 000000000..dfd4de56b --- /dev/null +++ b/packages/plugin-rsc/types/index.d.ts @@ -0,0 +1,19 @@ +import './virtual' + +declare global { + interface ImportMeta { + readonly viteRsc: { + loadCss: (importer?: string) => import('react').ReactNode + /** @deprecated use `loadModule("ssr", entry)` instead */ + loadSsrModule: (entry: string) => Promise + loadModule: (environmentName: string, entryName: string) => Promise + loadBootstrapScriptContent: (entryName: string) => Promise + } + } + + interface ImportMetaEnv { + readonly __vite_rsc_build__: boolean + } +} + +export {} diff --git a/packages/plugin-rsc/types/virtual.d.ts b/packages/plugin-rsc/types/virtual.d.ts new file mode 100644 index 000000000..cf9ba0ccc --- /dev/null +++ b/packages/plugin-rsc/types/virtual.d.ts @@ -0,0 +1,5 @@ +declare module 'virtual:vite-rsc/bootstrap-script-content' { + /** @deprecated use `import.meta.viteRsc.loadBootstrapScriptContent("index")` instead */ + const bootstrapScriptContent: string + export default bootstrapScriptContent +} diff --git a/packages/plugin-rsc/vitest.config.ts b/packages/plugin-rsc/vitest.config.ts new file mode 100644 index 000000000..55fa35bed --- /dev/null +++ b/packages/plugin-rsc/vitest.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + dir: './src', + }, +}) as any diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bd662290a..7541cbf39 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,6 +10,9 @@ catalogs: specifier: npm:rolldown-vite@^6.3.21 version: 6.3.21 +overrides: + '@vitejs/plugin-rsc': workspace:* + packageExtensionsChecksum: sha256-S82yCctxnlOTNFuHWCyTFRo/B6Y3jque/4DnsDO4WZA= importers: @@ -26,8 +29,8 @@ importers: specifier: ^22.16.0 version: 22.16.0 '@vitejs/release-scripts': - specifier: ^1.5.0 - version: 1.5.0 + specifier: ^1.6.0 + version: 1.6.0(conventional-commits-filter@5.0.0) eslint: specifier: ^9.30.1 version: 9.30.1(jiti@2.4.2) @@ -442,6 +445,255 @@ importers: specifier: ../../dist version: link:../../dist + packages/plugin-rsc: + dependencies: + '@mjackson/node-fetch-server': + specifier: ^0.6.1 + version: 0.6.1 + es-module-lexer: + specifier: ^1.6.0 + version: 1.7.0 + estree-walker: + specifier: ^3.0.3 + version: 3.0.3 + magic-string: + specifier: ^0.30.17 + version: 0.30.17 + periscopic: + specifier: ^4.0.2 + version: 4.0.2 + turbo-stream: + specifier: ^3.1.0 + version: 3.1.0 + vitefu: + specifier: ^1.0.5 + version: 1.1.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + devDependencies: + '@hiogawa/utils': + specifier: ^1.7.0 + version: 1.7.0 + '@playwright/test': + specifier: ^1.53.1 + version: 1.53.2 + '@tsconfig/strictest': + specifier: ^2.0.5 + version: 2.0.5 + '@types/estree': + specifier: ^1.0.8 + version: 1.0.8 + '@types/node': + specifier: ^22.14.1 + version: 22.16.0 + '@types/react': + specifier: ^19.1.8 + version: 19.1.8 + '@types/react-dom': + specifier: ^19.1.6 + version: 19.1.6(@types/react@19.1.8) + '@vitejs/plugin-react': + specifier: workspace:* + version: link:../plugin-react + react: + specifier: ^19.1.0 + version: 19.1.0 + react-dom: + specifier: ^19.1.0 + version: 19.1.0(react@19.1.0) + react-server-dom-webpack: + specifier: ^19.1.0 + version: 19.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rsc-html-stream: + specifier: ^0.0.6 + version: 0.0.6 + tinyexec: + specifier: ^1.0.1 + version: 1.0.1 + tsdown: + specifier: ^0.12.9 + version: 0.12.9(publint@0.3.12)(typescript@5.8.3) + + packages/plugin-rsc/examples/basic: + dependencies: + '@vitejs/plugin-rsc': + specifier: workspace:* + version: link:../.. + react: + specifier: latest + version: 19.1.0 + react-dom: + specifier: latest + version: 19.1.0(react@19.1.0) + devDependencies: + '@tailwindcss/vite': + specifier: ^4.1.4 + version: 4.1.11(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + '@types/react': + specifier: latest + version: 19.1.8 + '@types/react-dom': + specifier: latest + version: 19.1.6(@types/react@19.1.8) + '@vitejs/plugin-react': + specifier: latest + version: 4.6.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + '@vitejs/test-dep-client-in-server': + specifier: file:./test-dep/client-in-server + version: file:packages/plugin-rsc/examples/basic/test-dep/client-in-server(react@19.1.0) + '@vitejs/test-dep-client-in-server2': + specifier: file:./test-dep/client-in-server2 + version: file:packages/plugin-rsc/examples/basic/test-dep/client-in-server2(react@19.1.0) + '@vitejs/test-dep-server-in-client': + specifier: file:./test-dep/server-in-client + version: file:packages/plugin-rsc/examples/basic/test-dep/server-in-client(react@19.1.0) + '@vitejs/test-dep-server-in-server': + specifier: file:./test-dep/server-in-server + version: file:packages/plugin-rsc/examples/basic/test-dep/server-in-server(react@19.1.0) + tailwindcss: + specifier: ^4.1.4 + version: 4.1.11 + vite: + specifier: ^7.0.2 + version: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite-plugin-inspect: + specifier: ^11.2.0 + version: 11.3.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + + packages/plugin-rsc/examples/hono: + dependencies: + '@vitejs/plugin-rsc': + specifier: workspace:* + version: link:../.. + hono: + specifier: ^4.7.5 + version: 4.8.3 + + packages/plugin-rsc/examples/react-router: + dependencies: + '@vitejs/plugin-rsc': + specifier: workspace:* + version: link:../.. + react: + specifier: latest + version: 19.1.0 + react-dom: + specifier: latest + version: 19.1.0(react@19.1.0) + react-router: + specifier: 0.0.0-experimental-23decd7bc + version: 0.0.0-experimental-23decd7bc(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + devDependencies: + '@cloudflare/vite-plugin': + specifier: ^1.8.0 + version: 1.9.0(rollup@4.44.1)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250617.0)(wrangler@4.23.0) + '@react-router/dev': + specifier: 0.0.0-experimental-23decd7bc + version: 0.0.0-experimental-23decd7bc(@types/node@22.16.0)(babel-plugin-macros@3.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(react-router@0.0.0-experimental-23decd7bc(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tsx@4.20.3)(typescript@5.8.3)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(wrangler@4.23.0)(yaml@2.7.1) + '@tailwindcss/typography': + specifier: ^0.5.16 + version: 0.5.16(tailwindcss@4.1.11) + '@tailwindcss/vite': + specifier: ^4.1.4 + version: 4.1.11(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + '@types/react': + specifier: latest + version: 19.1.8 + '@types/react-dom': + specifier: latest + version: 19.1.6(@types/react@19.1.8) + '@vitejs/plugin-react': + specifier: latest + version: 4.6.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + tailwindcss: + specifier: ^4.1.4 + version: 4.1.11 + vite: + specifier: ^7.0.2 + version: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite-plugin-inspect: + specifier: ^11.2.0 + version: 11.3.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + wrangler: + specifier: ^4.22.0 + version: 4.23.0 + + packages/plugin-rsc/examples/ssg: + dependencies: + '@vitejs/plugin-rsc': + specifier: workspace:* + version: link:../.. + react: + specifier: latest + version: 19.1.0 + react-dom: + specifier: latest + version: 19.1.0(react@19.1.0) + devDependencies: + '@mdx-js/rollup': + specifier: ^3.1.0 + version: 3.1.0(rollup@4.44.1) + '@types/react': + specifier: latest + version: 19.1.8 + '@types/react-dom': + specifier: latest + version: 19.1.6(@types/react@19.1.8) + '@vitejs/plugin-react': + specifier: latest + version: 4.6.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + vite-plugin-inspect: + specifier: latest + version: 11.3.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + + packages/plugin-rsc/examples/starter: + dependencies: + '@vitejs/plugin-rsc': + specifier: workspace:* + version: link:../.. + react: + specifier: latest + version: 19.1.0 + react-dom: + specifier: latest + version: 19.1.0(react@19.1.0) + devDependencies: + '@types/react': + specifier: latest + version: 19.1.8 + '@types/react-dom': + specifier: latest + version: 19.1.6(@types/react@19.1.8) + '@vitejs/plugin-react': + specifier: latest + version: 4.6.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + vite-plugin-inspect: + specifier: latest + version: 11.3.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + + packages/plugin-rsc/examples/starter-cf-single: + dependencies: + '@vitejs/plugin-rsc': + specifier: workspace:* + version: link:../.. + react: + specifier: latest + version: 19.1.0 + react-dom: + specifier: latest + version: 19.1.0(react@19.1.0) + devDependencies: + '@cloudflare/vite-plugin': + specifier: ^1.8.0 + version: 1.9.0(rollup@4.44.1)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250617.0)(wrangler@4.23.0) + '@types/react': + specifier: latest + version: 19.1.8 + '@types/react-dom': + specifier: latest + version: 19.1.6(@types/react@19.1.8) + '@vitejs/plugin-react': + specifier: latest + version: 4.6.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + playground: devDependencies: kill-port: @@ -725,6 +977,16 @@ packages: resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} engines: {node: '>=6.9.0'} + '@babel/helper-create-class-features-plugin@7.27.1': + resolution: {integrity: sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-member-expression-to-functions@7.27.1': + resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.25.9': resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} engines: {node: '>=6.9.0'} @@ -739,10 +1001,24 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-optimise-call-expression@7.27.1': + resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} + engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.27.1': resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} engines: {node: '>=6.9.0'} + '@babel/helper-replace-supers@7.27.1': + resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} + engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.25.9': resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} @@ -793,6 +1069,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-decorators@7.27.1': + resolution: {integrity: sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-jsx@7.27.1': resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} engines: {node: '>=6.9.0'} @@ -805,6 +1087,18 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-typescript@7.27.1': + resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-commonjs@7.27.1': + resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx-development@7.27.1': resolution: {integrity: sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==} engines: {node: '>=6.9.0'} @@ -829,6 +1123,18 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-typescript@7.28.0': + resolution: {integrity: sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-typescript@7.27.1': + resolution: {integrity: sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/runtime@7.23.5': resolution: {integrity: sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w==} engines: {node: '>=6.9.0'} @@ -861,6 +1167,71 @@ packages: resolution: {integrity: sha512-8OLQgDScAOHXnAz2cV+RfzzNMipuLVBz2biuAJFMV9bfkNf393je3VM8CLkjQodW5+iWsSJdSgSWT6rsZoXHPw==} engines: {node: '>=6.9.0'} + '@cloudflare/kv-asset-handler@0.4.0': + resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==} + engines: {node: '>=18.0.0'} + + '@cloudflare/unenv-preset@2.3.3': + resolution: {integrity: sha512-/M3MEcj3V2WHIRSW1eAQBPRJ6JnGQHc6JKMAPLkDb7pLs3m6X9ES/+K3ceGqxI6TKeF32AWAi7ls0AYzVxCP0A==} + peerDependencies: + unenv: 2.0.0-rc.17 + workerd: ^1.20250508.0 + peerDependenciesMeta: + workerd: + optional: true + + '@cloudflare/vite-plugin@1.9.0': + resolution: {integrity: sha512-YYmWZklDPF7Ay97JX51bZzKGNP7Z6Sme0+Pje1g5Jr7M6oU6L3NmmvIi8VKFLM48FRlSpXRmTF1tULJng6d6vg==} + peerDependencies: + vite: ^6.1.0 || ^7.0.0 + wrangler: ^3.101.0 || ^4.0.0 + + '@cloudflare/workerd-darwin-64@1.20250617.0': + resolution: {integrity: sha512-toG8JUKVLIks4oOJLe9FeuixE84pDpMZ32ip7mCpE7JaFc5BqGFvevk0YC/db3T71AQlialjRwioH3jS/dzItA==} + engines: {node: '>=16'} + cpu: [x64] + os: [darwin] + + '@cloudflare/workerd-darwin-arm64@1.20250617.0': + resolution: {integrity: sha512-JTX0exbC9/ZtMmQQA8tDZEZFMXZrxOpTUj2hHnsUkErWYkr5SSZH04RBhPg6dU4VL8bXuB5/eJAh7+P9cZAp7g==} + engines: {node: '>=16'} + cpu: [arm64] + os: [darwin] + + '@cloudflare/workerd-linux-64@1.20250617.0': + resolution: {integrity: sha512-8jkSoVRJ+1bOx3tuWlZCGaGCV2ew7/jFMl6V3CPXOoEtERUHsZBQLVkQIGKcmC/LKSj7f/mpyBUeu2EPTo2HEg==} + engines: {node: '>=16'} + cpu: [x64] + os: [linux] + + '@cloudflare/workerd-linux-arm64@1.20250617.0': + resolution: {integrity: sha512-YAzcOyu897z5dQKFzme1oujGWMGEJCR7/Wrrm1nSP6dqutxFPTubRADM8BHn2CV3ij//vaPnAeLmZE3jVwOwig==} + engines: {node: '>=16'} + cpu: [arm64] + os: [linux] + + '@cloudflare/workerd-windows-64@1.20250617.0': + resolution: {integrity: sha512-XWM/6sagDrO0CYDKhXhPjM23qusvIN1ju9ZEml6gOQs8tNOFnq6Cn6X9FAmnyapRFCGUSEC3HZYJAm7zwVKaMA==} + engines: {node: '>=16'} + cpu: [x64] + os: [win32] + + '@conventional-changelog/git-client@2.5.1': + resolution: {integrity: sha512-lAw7iA5oTPWOLjiweb7DlGEMDEvzqzLLa6aWOly2FSZ64IwLE8T458rC+o+WvI31Doz6joM7X2DoNog7mX8r4A==} + engines: {node: '>=18'} + peerDependencies: + conventional-commits-filter: ^5.0.0 + conventional-commits-parser: ^6.1.0 + peerDependenciesMeta: + conventional-commits-filter: + optional: true + conventional-commits-parser: + optional: true + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + '@emnapi/core@1.4.3': resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==} @@ -945,6 +1316,12 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.25.4': + resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/aix-ppc64@0.25.5': resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} engines: {node: '>=18'} @@ -963,6 +1340,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.25.4': + resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.25.5': resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} engines: {node: '>=18'} @@ -981,6 +1364,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-arm@0.25.4': + resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.25.5': resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==} engines: {node: '>=18'} @@ -999,6 +1388,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/android-x64@0.25.4': + resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.25.5': resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==} engines: {node: '>=18'} @@ -1017,6 +1412,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.25.4': + resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.25.5': resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} engines: {node: '>=18'} @@ -1035,6 +1436,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.25.4': + resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.25.5': resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==} engines: {node: '>=18'} @@ -1053,6 +1460,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.25.4': + resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.25.5': resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} engines: {node: '>=18'} @@ -1071,6 +1484,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.25.4': + resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.25.5': resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==} engines: {node: '>=18'} @@ -1089,6 +1508,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.25.4': + resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.25.5': resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} engines: {node: '>=18'} @@ -1107,6 +1532,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.25.4': + resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.25.5': resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==} engines: {node: '>=18'} @@ -1125,6 +1556,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.25.4': + resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.25.5': resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==} engines: {node: '>=18'} @@ -1143,6 +1580,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.25.4': + resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.25.5': resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==} engines: {node: '>=18'} @@ -1161,6 +1604,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.25.4': + resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.25.5': resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==} engines: {node: '>=18'} @@ -1179,6 +1628,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.25.4': + resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.25.5': resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==} engines: {node: '>=18'} @@ -1197,6 +1652,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.25.4': + resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.25.5': resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==} engines: {node: '>=18'} @@ -1215,6 +1676,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.25.4': + resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.25.5': resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==} engines: {node: '>=18'} @@ -1233,6 +1700,12 @@ packages: cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.25.4': + resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.25.5': resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==} engines: {node: '>=18'} @@ -1251,6 +1724,12 @@ packages: cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-arm64@0.25.4': + resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-arm64@0.25.5': resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} engines: {node: '>=18'} @@ -1269,6 +1748,12 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.25.4': + resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.25.5': resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==} engines: {node: '>=18'} @@ -1287,6 +1772,12 @@ packages: cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-arm64@0.25.4': + resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-arm64@0.25.5': resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} engines: {node: '>=18'} @@ -1305,6 +1796,12 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.25.4': + resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.25.5': resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==} engines: {node: '>=18'} @@ -1323,7 +1820,13 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.25.5': + '@esbuild/sunos-x64@0.25.4': + resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.25.5': resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} engines: {node: '>=18'} cpu: [x64] @@ -1341,6 +1844,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.25.4': + resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.25.5': resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} engines: {node: '>=18'} @@ -1359,6 +1868,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.25.4': + resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.25.5': resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==} engines: {node: '>=18'} @@ -1377,6 +1892,12 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.25.4': + resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.25.5': resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==} engines: {node: '>=18'} @@ -1421,6 +1942,10 @@ packages: resolution: {integrity: sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@fastify/busboy@2.1.1': + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} + '@generouted/react-router@1.20.0': resolution: {integrity: sha512-VAOdbH/Z2MzroTB61XYsS1uMJvX5am7CKuF/MgF3ZXS6YSvA6rz9pvQxZbg5PIK4R9h7bsA/oRQlJNLSgQKjEA==} peerDependencies: @@ -1428,6 +1953,9 @@ packages: react-router: '>=7' vite: '>=5' + '@hiogawa/utils@1.7.0': + resolution: {integrity: sha512-ghiEFWBR1NENoHn+lSuW7liicTIzVPN+8Srm5UedCTw43gus0mlse6Wp2lz6GmbOXJ/CalMPp/0Tz2X8tajkAg==} + '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} @@ -1448,6 +1976,119 @@ packages: resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} engines: {node: '>=18.18'} + '@img/sharp-darwin-arm64@0.33.5': + resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.33.5': + resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.0.4': + resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.0.4': + resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.0.4': + resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.0.5': + resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.0.4': + resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.0.4': + resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.33.5': + resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.33.5': + resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-s390x@0.33.5': + resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.33.5': + resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.33.5': + resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.33.5': + resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.33.5': + resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-ia32@0.33.5': + resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.33.5': + resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@isaacs/fs-minipass@4.0.1': + resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} + engines: {node: '>=18.0.0'} + '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} @@ -1466,6 +2107,9 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@mdx-js/mdx@3.0.0': resolution: {integrity: sha512-Icm0TBKBLYqroYbNW3BPnzMGn+7mwpQOK310aZ7+fkCtiU3aqv2cdcX+nd0Ydo3wI5Rx8bX2Z2QmGb/XcAClCw==} @@ -1474,6 +2118,12 @@ packages: peerDependencies: rollup: '>=2' + '@mjackson/node-fetch-server@0.2.0': + resolution: {integrity: sha512-EMlH1e30yzmTpGLQjlFmaDAjyOeZhng1/XCd7DExR8PNAnG/G1tyruZxEoUe11ClnwGhGrtsdnyyUx1frSzjng==} + + '@mjackson/node-fetch-server@0.6.1': + resolution: {integrity: sha512-9ZJnk/DJjt805uv5PPv11haJIW+HHf3YEEyVXv+8iLQxLD/iXA68FH220XoiTPBC4gCg5q+IMadDw8qPqlA5wg==} + '@napi-rs/wasm-runtime@0.2.11': resolution: {integrity: sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==} @@ -1489,6 +2139,18 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@npmcli/git@4.1.0': + resolution: {integrity: sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@npmcli/package-json@4.0.1': + resolution: {integrity: sha512-lRCEGdHZomFsURroh522YvA/2cVb9oPIJrjHanCJZkiasz1BzcnLr3tBJhlV7S86MBJBuAQ33is2D60YitZL2Q==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@npmcli/promise-spawn@6.0.2': + resolution: {integrity: sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@oxc-project/runtime@0.73.0': resolution: {integrity: sha512-YFvBzVQK/ix0RQxOI02ebCumehSHoiJgvb7nOU4o7xFoMnnujLdjmxnEBK/qiOQrEyXlY69gXGMEsKYVe+YZ3A==} engines: {node: '>=6.9.0'} @@ -1503,15 +2165,54 @@ packages: '@oxc-project/types@0.75.0': resolution: {integrity: sha512-QMW+06WOXs7+F301Y3X0VpmWhwuQVc/X/RP2zF9OIwvSMmsif3xURS2wxbakFIABYsytgBcHpUcFepVS0Qnd3A==} + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + '@playwright/test@1.53.2': resolution: {integrity: sha512-tEB2U5z74ebBeyfGNZ3Jfg29AnW+5HlWhvHtb/Mqco9pFdZU1ZLNdVb2UtB5CvmiilNr2ZfVH/qMmAROG/XTzw==} engines: {node: '>=18'} hasBin: true + '@polka/url@1.0.0-next.29': + resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} + '@publint/pack@0.1.2': resolution: {integrity: sha512-S+9ANAvUmjutrshV4jZjaiG8XQyuJIZ8a4utWmN/vW1sgQ9IfBnPndwkmQYw53QmouOIytT874u65HEmu6H5jw==} engines: {node: '>=18'} + '@quansync/fs@0.1.3': + resolution: {integrity: sha512-G0OnZbMWEs5LhDyqy2UL17vGhSVHkQIfVojMtEWVenvj0V5S84VBgy86kJIuNsGDp2p7sTKlpSIpBUWdC35OKg==} + engines: {node: '>=20.0.0'} + + '@react-router/dev@0.0.0-experimental-23decd7bc': + resolution: {integrity: sha512-iY4WgHNv/7mDbExXQA35u7H54ihPJTrm20Z42Ni2G+Hgz3X4A0ZmeT7CtpfuBzC3UIrqdmNZT3nQOSoKNwJlWA==} + engines: {node: '>=20.0.0'} + hasBin: true + peerDependencies: + '@react-router/serve': ^0.0.0-experimental-23decd7bc + react-router: ^0.0.0-experimental-23decd7bc + typescript: ^5.1.0 + vite: ^5.1.0 || ^6.0.0 || ^7.0.0 + wrangler: ^3.28.2 || ^4.0.0 + peerDependenciesMeta: + '@react-router/serve': + optional: true + typescript: + optional: true + wrangler: + optional: true + + '@react-router/node@0.0.0-experimental-23decd7bc': + resolution: {integrity: sha512-y9tOT+jEzBGXrwBjCq2obqKe+N6znsT+I02R/SDFTqTcXrdTJ7aK0iRnWGHxUw/FrOxoPeGkA0v5dWoJI0jBew==} + engines: {node: '>=20.0.0'} + peerDependencies: + react-router: 0.0.0-experimental-23decd7bc + typescript: ^5.1.0 + peerDependenciesMeta: + typescript: + optional: true + '@rolldown/binding-darwin-arm64@1.0.0-beta.16': resolution: {integrity: sha512-dzlvuodUFc/QX97jYSsPHtYysqeSeM5gBxiN+DpV93tXEYyFMWm3cECxNmShz4ZM+lrgm6eG2/txzLZ/z9qWLw==} cpu: [arm64] @@ -1635,6 +2336,9 @@ packages: '@rolldown/pluginutils@1.0.0-beta.16': resolution: {integrity: sha512-w3f87JpF7lgIlK03I0R3XidspFgB4MsixE5o/VjBMJI+Ki4XW/Ffrykmj2AUCbVxhRD7Pi9W0Qu2XapJhB2mSA==} + '@rolldown/pluginutils@1.0.0-beta.19': + resolution: {integrity: sha512-3FL3mnMbPu0muGOCaKAhhFEYmqv9eTfPSJRJmANrCwtgK8VuxpsZDGK+m0LYAGoyO8+0j5uRe4PeyPDK1yA/hA==} + '@rolldown/pluginutils@1.0.0-beta.23': resolution: {integrity: sha512-lLCP4LUecUGBLq8EfkbY2esGYyvZj5ee+WZG12+mVnQH48b46SVbwp+0vJkD+6Pnsc+u9SWarBV9sQ5mVwmb5g==} @@ -1901,6 +2605,14 @@ packages: cpu: [x64] os: [win32] + '@simple-libs/child-process-utils@1.0.1': + resolution: {integrity: sha512-3nWd8irxvDI6v856wpPCHZ+08iQR0oHTZfzAZmnbsLzf+Sf1odraP6uKOHDZToXq3RPRV/LbqGVlSCogm9cJjg==} + engines: {node: '>=18'} + + '@simple-libs/stream-utils@1.1.0': + resolution: {integrity: sha512-6rsHTjodIn/t90lv5snQjRPVtOosM7Vp0AKdrObymq45ojlgVwnpAqdc+0OBBrpEiy31zZ6/TKeIVqV1HwvnuQ==} + engines: {node: '>=18'} + '@swc/core-darwin-arm64@1.12.9': resolution: {integrity: sha512-GACFEp4nD6V+TZNR2JwbMZRHB+Yyvp14FrcmB6UCUYmhuNWjkxi+CLnEvdbuiKyQYv0zA+TRpCHZ+whEs6gwfA==} engines: {node: '>=10'} @@ -1982,10 +2694,108 @@ packages: '@swc/types@0.1.23': resolution: {integrity: sha512-u1iIVZV9Q0jxY+yM2vw/hZGDNudsN85bBpTqzAQ9rzkxW9D+e3aEM4Han+ow518gSewkXgjmEK0BD79ZcNVgPw==} + '@tailwindcss/node@4.1.11': + resolution: {integrity: sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==} + + '@tailwindcss/oxide-android-arm64@4.1.11': + resolution: {integrity: sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.1.11': + resolution: {integrity: sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.1.11': + resolution: {integrity: sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.1.11': + resolution: {integrity: sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11': + resolution: {integrity: sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.11': + resolution: {integrity: sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-musl@4.1.11': + resolution: {integrity: sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-gnu@4.1.11': + resolution: {integrity: sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-musl@4.1.11': + resolution: {integrity: sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-wasm32-wasi@4.1.11': + resolution: {integrity: sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.11': + resolution: {integrity: sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.1.11': + resolution: {integrity: sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.1.11': + resolution: {integrity: sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==} + engines: {node: '>= 10'} + + '@tailwindcss/typography@0.5.16': + resolution: {integrity: sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' + + '@tailwindcss/vite@4.1.11': + resolution: {integrity: sha512-RHYhrR3hku0MJFRV+fN2gNbDNEh3dwKvY8XJvTxCSXeMOsCRSr+uKvDWQcbizrHgjML6ZmTE5OwMrl5wKcujCw==} + peerDependencies: + vite: ^5.2.0 || ^6 || ^7 + '@trysound/sax@0.2.0': resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} + '@tsconfig/strictest@2.0.5': + resolution: {integrity: sha512-ec4tjL2Rr0pkZ5hww65c+EEPYwxOi4Ryv+0MtjeaSQRJyq322Q27eOQiFbuNgw2hpL4hB1/W/HBGk3VKS43osg==} + '@tybys/wasm-util@0.9.0': resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} @@ -2019,9 +2829,6 @@ packages: '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - '@types/estree@1.0.7': - resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} - '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -2052,6 +2859,9 @@ packages: '@types/node@22.16.0': resolution: {integrity: sha512-B2egV9wALML1JCpv3VQoQ+yesQKAmNMBIAY7OteVrikcOcAkWm+dGL6qpeCktPjAv6N1JLnhbNiqS35UpFyBsQ==} + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -2287,8 +3097,34 @@ packages: cpu: [x64] os: [win32] - '@vitejs/release-scripts@1.5.0': - resolution: {integrity: sha512-rZQdM5AneNJHzDOTUaQOOifauH6MkGTSI+GH8bKKrimBaa5BtvpnE1iz43fJ4QDO7RdGxAlxWnPQAVlFhGM1cQ==} + '@vitejs/plugin-react@4.6.0': + resolution: {integrity: sha512-5Kgff+m8e2PB+9j51eGHEpn5kUzRKH2Ry0qGoe8ItJg7pqnkPrYPkDQZGgGmTa0EGarHrkjLvOdU3b1fzI8otQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0 + + '@vitejs/release-scripts@1.6.0': + resolution: {integrity: sha512-XV+w22Fvn+wqDtEkz8nQIJzvmRVSh90c2xvOO7cX9fkX8+39ZJpYRiXDIRJG1JRnF8khm1rHjulid+l+khc7TQ==} + + '@vitejs/test-dep-client-in-server2@file:packages/plugin-rsc/examples/basic/test-dep/client-in-server2': + resolution: {directory: packages/plugin-rsc/examples/basic/test-dep/client-in-server2, type: directory} + peerDependencies: + react: '*' + + '@vitejs/test-dep-client-in-server@file:packages/plugin-rsc/examples/basic/test-dep/client-in-server': + resolution: {directory: packages/plugin-rsc/examples/basic/test-dep/client-in-server, type: directory} + peerDependencies: + react: '*' + + '@vitejs/test-dep-server-in-client@file:packages/plugin-rsc/examples/basic/test-dep/server-in-client': + resolution: {directory: packages/plugin-rsc/examples/basic/test-dep/server-in-client, type: directory} + peerDependencies: + react: '*' + + '@vitejs/test-dep-server-in-server@file:packages/plugin-rsc/examples/basic/test-dep/server-in-server': + resolution: {directory: packages/plugin-rsc/examples/basic/test-dep/server-in-server, type: directory} + peerDependencies: + react: '*' '@vitest/expect@3.2.4': resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} @@ -2324,6 +3160,19 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-loose@8.5.2: + resolution: {integrity: sha512-PPvV6g8UGMGgjrMu+n/f9E/tCSkNQ2Y97eFvuVdJfG11+xdIeDcLyNdC8SHcrHbRqkfwLASdplyR6B6sKM1U4A==} + engines: {node: '>=0.4.0'} + + acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + engines: {node: '>=0.4.0'} + + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + acorn@8.14.1: resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} engines: {node: '>=0.4.0'} @@ -2341,6 +3190,10 @@ packages: resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} engines: {node: '>=18'} + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + ansi-regex@6.0.1: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} @@ -2357,13 +3210,26 @@ packages: resolution: {integrity: sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w==} engines: {node: '>=14'} + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + array-ify@1.0.0: + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + + as-table@1.0.55: + resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==} + assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} + ast-kit@2.1.1: + resolution: {integrity: sha512-mfh6a7gKXE8pDlxTvqIc/syH/P3RkzbOF6LeHdcKztLEzYe6IMsRCL7N8vI7hqTGWNxpkCuuRTpT21xNWqhRtQ==} + engines: {node: '>=20.18.0'} + astring@1.8.6: resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==} hasBin: true @@ -2375,6 +3241,9 @@ packages: peerDependencies: postcss: ^8.1.0 + babel-dead-code-elimination@1.0.10: + resolution: {integrity: sha512-DV5bdJZTzZ0zn0DC24v3jD7Mnidh6xhKa4GfKCbq3sfW8kaWhDdZjP3i81geA8T33tdYqWKw4D3fVv0CwEgKVA==} + babel-plugin-macros@3.1.0: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} @@ -2388,6 +3257,12 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + birpc@2.4.0: + resolution: {integrity: sha512-5IdNxTyhXHv2UlgnPHQ0h+5ypVmkrYHzL8QT+DwFZ//2N/oNV8Ch+BCRmTJ3x6/z9Axo/cXYBc9eprsUVK/Jsg==} + + blake3-wasm@2.1.5: + resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} + boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} @@ -2406,6 +3281,10 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -2454,6 +3333,14 @@ packages: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + chownr@3.0.0: + resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} + engines: {node: '>=18'} + citty@0.1.6: resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} @@ -2475,6 +3362,13 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + colord@2.9.3: resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} @@ -2499,6 +3393,9 @@ packages: commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + compare-func@2.0.0: + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -2512,12 +3409,43 @@ packages: resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} engines: {node: ^14.18.0 || >=16.10.0} + conventional-changelog-conventionalcommits@9.0.0: + resolution: {integrity: sha512-5e48V0+DsWvQBEnnbBFhYQwYDzFPXVrakGPP1uSxekDkr5d7YWrmaWsgJpKFR0SkXmxK6qQr9O42uuLb9wpKxA==} + engines: {node: '>=18'} + + conventional-changelog-preset-loader@5.0.0: + resolution: {integrity: sha512-SetDSntXLk8Jh1NOAl1Gu5uLiCNSYenB5tm0YVeZKePRIgDW9lQImromTwLa3c/Gae298tsgOM+/CYT9XAl0NA==} + engines: {node: '>=18'} + + conventional-changelog-writer@8.1.0: + resolution: {integrity: sha512-dpC440QnORNCO81XYuRRFOLCsjKj4W7tMkUIn3lR6F/FAaJcWLi7iCj6IcEvSQY2zw6VUgwUKd5DEHKEWrpmEQ==} + engines: {node: '>=18'} + hasBin: true + + conventional-changelog@7.1.0: + resolution: {integrity: sha512-2hHa/MpDunPnYK3QcZdHl4MOnyLlicBmohsM5/dfvfeoPp0faIjYKHbKyb8nKth/Zd4HhxtlMWfVKrmM9OMj/Q==} + engines: {node: '>=18'} + hasBin: true + + conventional-commits-filter@5.0.0: + resolution: {integrity: sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==} + engines: {node: '>=18'} + + conventional-commits-parser@6.2.0: + resolution: {integrity: sha512-uLnoLeIW4XaoFtH37qEcg/SXMJmKF4vi7V0H2rnPueg+VEtFGA/asSCNTcq4M/GQ6QmlzchAEtOoDTtKqWeHag==} + engines: {node: '>=18'} + hasBin: true + convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + cookie@1.0.2: resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} engines: {node: '>=18'} @@ -2588,6 +3516,9 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + data-uri-to-buffer@2.0.2: + resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==} + data-uri-to-buffer@4.0.1: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} @@ -2613,6 +3544,14 @@ packages: decode-named-character-reference@1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + dedent@1.6.0: + resolution: {integrity: sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + deep-eql@5.0.2: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} @@ -2624,6 +3563,18 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} + default-browser-id@5.0.0: + resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} + engines: {node: '>=18'} + + default-browser@5.2.1: + resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} + engines: {node: '>=18'} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} @@ -2635,9 +3586,17 @@ packages: resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} engines: {node: '>=8'} + detect-libc@2.0.4: + resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} + engines: {node: '>=8'} + devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + diff@8.0.2: + resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} + engines: {node: '>=0.3.1'} + dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} @@ -2651,16 +3610,46 @@ packages: domutils@3.1.0: resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + dot-prop@5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} + + dts-resolver@2.1.1: + resolution: {integrity: sha512-3BiGFhB6mj5Kv+W2vdJseQUYW+SKVzAFJL6YNP6ursbrwy1fXHRotfHi3xLNxe4wZl/K8qbAFeCDjZLjzqxxRw==} + engines: {node: '>=20.18.0'} + peerDependencies: + oxc-resolver: '>=11.0.0' + peerDependenciesMeta: + oxc-resolver: + optional: true + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + electron-to-chromium@1.5.129: resolution: {integrity: sha512-JlXUemX4s0+9f8mLqib/bHH8gOHf5elKS6KeWG3sk3xozb/JTq/RLXIv8OKUWiK4Ah00Wm88EFj5PYkFr4RUPA==} emoji-regex@10.3.0: resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + empathic@2.0.0: + resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} + engines: {node: '>=14'} + enhanced-resolve@5.17.1: resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} engines: {node: '>=10.13.0'} + enhanced-resolve@5.18.2: + resolution: {integrity: sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==} + engines: {node: '>=10.13.0'} + entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -2669,9 +3658,15 @@ packages: resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} engines: {node: '>=18'} + err-code@2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-stack-parser-es@1.0.5: + resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==} + es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} @@ -2685,6 +3680,11 @@ packages: engines: {node: '>=18'} hasBin: true + esbuild@0.25.4: + resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==} + engines: {node: '>=18'} + hasBin: true + esbuild@0.25.5: resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} engines: {node: '>=18'} @@ -2814,6 +3814,10 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} + exit-hook@2.2.1: + resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} + engines: {node: '>=6'} + expect-type@1.2.1: resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} engines: {node: '>=12.0.0'} @@ -2840,6 +3844,9 @@ packages: fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + fd-package-json@1.2.0: + resolution: {integrity: sha512-45LSPmWf+gC5tdCQMNH4s9Sr00bIkiD9aN7dc5hqkrEw1geRYyDQS1v1oMHAW3ysfxfndqGsrDREHHjNNbKUfA==} + fdir@6.4.3: resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} peerDependencies: @@ -2893,6 +3900,10 @@ packages: flatted@3.2.9: resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + formdata-polyfill@4.0.10: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} @@ -2939,6 +3950,13 @@ packages: resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} engines: {node: '>=18'} + get-port@7.1.0: + resolution: {integrity: sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==} + engines: {node: '>=16'} + + get-source@2.0.12: + resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==} + get-stream@8.0.1: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} @@ -2957,6 +3975,13 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} @@ -2979,6 +4004,11 @@ packages: graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + engines: {node: '>=0.4.7'} + hasBin: true + has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} @@ -2999,9 +4029,21 @@ packages: hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + hono@4.8.3: + resolution: {integrity: sha512-jYZ6ZtfWjzBdh8H/0CIFfCBHaFL75k+KMzaM177hrWWm2TWL39YMYaJgB74uK/niRc866NMlH9B8uCvIo284WQ==} + engines: {node: '>=16.9.0'} + hookable@5.5.3: resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + hosted-git-info@6.1.3: + resolution: {integrity: sha512-HVJyzUrLIL1c0QmviVh5E8VGyUS7xCFPS6yydaVd1UegW+ibV/CohqTH9MkOLDp5o+rb82DMo77PTuc9F/8GKw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + hosted-git-info@8.1.0: + resolution: {integrity: sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==} + engines: {node: ^18.17.0 || >=20.5.0} + human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} @@ -3037,6 +4079,9 @@ packages: is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + is-core-module@2.15.1: resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} engines: {node: '>= 0.4'} @@ -3044,10 +4089,19 @@ packages: is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + is-fullwidth-code-point@4.0.0: resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} engines: {node: '>=12'} @@ -3063,6 +4117,11 @@ packages: is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + is-module@1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} @@ -3070,6 +4129,10 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} @@ -3084,9 +4147,16 @@ packages: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jiti@1.21.7: resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true @@ -3120,6 +4190,10 @@ packages: json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-parse-even-better-errors@3.0.2: + resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -3236,6 +4310,12 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + lodash.castarray@4.4.0: + resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} @@ -3245,6 +4325,9 @@ packages: lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + log-update@6.1.0: resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} engines: {node: '>=18'} @@ -3262,9 +4345,16 @@ packages: loupe@3.1.4: resolution: {integrity: sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==} + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} @@ -3305,6 +4395,10 @@ packages: mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + meow@13.2.0: + resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} + engines: {node: '>=18'} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -3400,6 +4494,11 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} @@ -3408,6 +4507,11 @@ packages: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} + miniflare@4.20250617.5: + resolution: {integrity: sha512-Qqn30jR6dCjXaKVizT6vH4KOb+GyLccoxLNOJEfu63yBPn8eoXa7PrdiSGTmjs2RY8/tr7eTO8Wu/Yr14k0xVA==} + engines: {node: '>=18.0.0'} + hasBin: true + minimatch@10.0.1: resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} engines: {node: 20 || >=22} @@ -3419,6 +4523,22 @@ packages: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@3.0.2: + resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==} + engines: {node: '>= 18'} + + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + mkdist@2.2.0: resolution: {integrity: sha512-GfKwu4A2grXfhj2TZm4ydfzP515NaALqKaPq4WqaZ6NhEnD47BiIQPySoCTTvVqHxYcuqVkNdCXjYf9Bz1Y04Q==} hasBin: true @@ -3444,9 +4564,17 @@ packages: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + mustache@4.2.0: + resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} + hasBin: true + nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -3460,6 +4588,9 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} @@ -3472,10 +4603,34 @@ packages: node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + normalize-package-data@5.0.0: + resolution: {integrity: sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + normalize-package-data@7.0.0: + resolution: {integrity: sha512-k6U0gKRIuNCTkwHGZqblCfLfBRh+w1vI6tBo+IeJwq2M8FUiOqhX7GH+GArQGScA7azd1WfyRCvxoXDO3hQDIA==} + engines: {node: ^18.17.0 || >=20.5.0} + normalize-range@0.1.2: resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} engines: {node: '>=0.10.0'} + npm-install-checks@6.3.0: + resolution: {integrity: sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-normalize-package-bin@3.0.1: + resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-package-arg@10.1.0: + resolution: {integrity: sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-pick-manifest@8.0.2: + resolution: {integrity: sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + npm-run-path@5.1.0: resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3487,6 +4642,9 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + ohash@2.0.11: + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + onetime@6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} @@ -3495,6 +4653,10 @@ packages: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} + open@10.1.2: + resolution: {integrity: sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==} + engines: {node: '>=18'} + optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} @@ -3507,8 +4669,11 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - package-manager-detector@0.2.11: - resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + package-manager-detector@1.3.0: + resolution: {integrity: sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==} parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} @@ -3536,6 +4701,13 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -3550,9 +4722,15 @@ packages: resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} engines: {node: '>= 14.16'} + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + periscopic@3.1.0: resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} + periscopic@4.0.2: + resolution: {integrity: sha512-sqpQDUy8vgB7ycLkendSKS6HnVz1Rneoc3Rc+ZBUCe2pbqlVuCC5vF52l0NJ1aiMg/r1qfYF9/myz8CZeI2rjA==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -3746,6 +4924,10 @@ packages: peerDependencies: postcss: ^8.4.31 + postcss-selector-parser@6.0.10: + resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} + engines: {node: '>=4'} + postcss-selector-parser@6.1.2: resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} engines: {node: '>=4'} @@ -3785,6 +4967,11 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + prettier@3.1.0: resolution: {integrity: sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==} engines: {node: '>=14'} @@ -3794,6 +4981,25 @@ packages: resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} engines: {node: ^14.13.1 || >=16.0.0} + printable-characters@1.0.42: + resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==} + + proc-log@3.0.0: + resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + promise-inflight@1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + + promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -3804,8 +5010,8 @@ packages: property-information@6.4.0: resolution: {integrity: sha512-9t5qARVofg2xQqKtytzt+lZ4d1Qvj8t5B8fEwXK6qOfgRLgH/b13QlgEyDh033NOS31nXeFbYv7CLUDG1CeifQ==} - publint@0.3.9: - resolution: {integrity: sha512-irTwfRfYW38vomkxxoiZQtFtUOQKpz5m0p9Z60z4xpXrl1KmvSrX1OMARvnnolB5usOXeNfvLj6d/W3rwXKfBQ==} + publint@0.3.12: + resolution: {integrity: sha512-1w3MMtL9iotBjm1mmXtG3Nk06wnq9UhGNRpQ2j6n1Zq7YAD6gnxMMZMIxlRPAydVjVbjSm+n0lhwqsD1m4LD5w==} engines: {node: '>=18'} hasBin: true @@ -3840,6 +5046,10 @@ packages: react-is@19.1.0: resolution: {integrity: sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg==} + react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + engines: {node: '>=0.10.0'} + react-refresh@0.17.0: resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} engines: {node: '>=0.10.0'} @@ -3851,6 +5061,16 @@ packages: react: '>=18' react-dom: '>=18' + react-router@0.0.0-experimental-23decd7bc: + resolution: {integrity: sha512-oTDa74rdP6WACxX8wihI71TiwQa+3aAXNjGGm20OAyA4hGdfe0VBEbJvuIT0vxR+LKsJisI4rpaq0boBGY3m+g==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + peerDependenciesMeta: + react-dom: + optional: true + react-router@7.6.3: resolution: {integrity: sha512-zf45LZp5skDC6I3jDLXQUu0u26jtuP4lEGbc7BbdyxenBN1vJSTA18czM2D+h5qyMBuMrD+9uB+mU37HIoKGRA==} engines: {node: '>=20.0.0'} @@ -3861,6 +5081,14 @@ packages: react-dom: optional: true + react-server-dom-webpack@19.1.0: + resolution: {integrity: sha512-GUbawkNSN0oj8GnuNhMzsvyIHpXqqpAmyOY5NRqNNQ/M8wvUUN8YBoGjDUj9lbmBrmAHS65BByp6325CcWA0eg==} + engines: {node: '>=0.10.0'} + peerDependencies: + react: ^19.1.0 + react-dom: ^19.1.0 + webpack: ^5.59.0 + react-switch@7.1.0: resolution: {integrity: sha512-4xVeyImZE8QOTDw2FmhWz0iqo2psoRiS7XzdjaZBCIP8Dzo3rT0esHUjLee5WsAPSFXWWl1eVA5arp9n2C6yQA==} peerDependencies: @@ -3875,6 +5103,10 @@ packages: resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} engines: {node: '>=0.10.0'} + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + refa@0.12.1: resolution: {integrity: sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -3910,6 +5142,10 @@ packages: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -3917,6 +5153,22 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + rolldown-plugin-dts@0.13.13: + resolution: {integrity: sha512-Nchx9nQoa4IpfQ/BJzodKMvtJ3H3dT322siAJSp3uvQJ+Pi1qgEjOp7hSQwGSQRhaC5gC+9hparbWEH5oiAL9Q==} + engines: {node: '>=20.18.0'} + peerDependencies: + '@typescript/native-preview': '>=7.0.0-dev.20250601.1' + rolldown: ^1.0.0-beta.9 + typescript: ^5.0.0 + vue-tsc: ~2.2.0 + peerDependenciesMeta: + '@typescript/native-preview': + optional: true + typescript: + optional: true + vue-tsc: + optional: true + rolldown-vite@6.3.21: resolution: {integrity: sha512-mjds/3g+YPWJmT08oQic/L5sWvs/lNc4vs9vmD7uHQtGdP7qGriWtYf62Vp+6eQhd/MPeFVw71TMEEt/cH+sLQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} @@ -3982,6 +5234,13 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rsc-html-stream@0.0.6: + resolution: {integrity: sha512-oZUJ5AH0oDo9QywxD9yMY6N5Z3VwX2YfQg0FanNdCmvXmO0itTfv7BMkbMSwxg7JmBjYmefU8DTW0EcLsePPgQ==} + + run-applescript@7.0.0: + resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} + engines: {node: '>=18'} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -4022,6 +5281,10 @@ packages: shallowequal@1.1.0: resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} + sharp@0.33.5: + resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -4044,6 +5307,13 @@ packages: resolution: {integrity: sha512-N+goiLxlkHJlyaYEglFypzVNMaNplPAk5syu0+OPp/Bk6dwVoXF6FfOw2vO0Dp+JHsBaI+w6cm8TnFl2Hw6tDA==} hasBin: true + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + + sirv@3.0.1: + resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==} + engines: {node: '>=18'} + sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -4063,6 +5333,10 @@ packages: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + source-map@0.7.4: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} engines: {node: '>= 8'} @@ -4070,6 +5344,18 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.21: + resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} + stable-hash-x@0.2.0: resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==} engines: {node: '>=12.0.0'} @@ -4077,13 +5363,28 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + stacktracey@2.1.8: + resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==} + std-env@3.9.0: resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + stoppable@1.1.0: + resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==} + engines: {node: '>=4', npm: '>=6'} + string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + string-width@7.0.0: resolution: {integrity: sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==} engines: {node: '>=18'} @@ -4091,6 +5392,10 @@ packages: stringify-entities@4.0.3: resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==} + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + strip-ansi@7.1.0: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} @@ -4144,16 +5449,26 @@ packages: engines: {node: '>=14.0.0'} hasBin: true + tailwindcss@4.1.11: + resolution: {integrity: sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==} + tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} + tar@7.4.3: + resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} + engines: {node: '>=18'} + tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + tinyexec@1.0.1: + resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} + tinyglobby@0.2.12: resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} engines: {node: '>=12.0.0'} @@ -4178,6 +5493,10 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} @@ -4195,6 +5514,28 @@ packages: peerDependencies: typescript: '>=4.0.0' + tsdown@0.12.9: + resolution: {integrity: sha512-MfrXm9PIlT3saovtWKf/gCJJ/NQCdE0SiREkdNC+9Qy6UHhdeDPxnkFaBD7xttVUmgp0yUHtGirpoLB+OVLuLA==} + engines: {node: '>=18.0.0'} + hasBin: true + peerDependencies: + '@arethetypeswrong/core': ^0.18.1 + publint: ^0.3.0 + typescript: ^5.0.0 + unplugin-lightningcss: ^0.4.0 + unplugin-unused: ^0.5.0 + peerDependenciesMeta: + '@arethetypeswrong/core': + optional: true + publint: + optional: true + typescript: + optional: true + unplugin-lightningcss: + optional: true + unplugin-unused: + optional: true + tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} @@ -4206,6 +5547,9 @@ packages: engines: {node: '>=18.0.0'} hasBin: true + turbo-stream@3.1.0: + resolution: {integrity: sha512-tVI25WEXl4fckNEmrq70xU1XumxUwEx/FZD5AgEcV8ri7Wvrg2o7GEq8U7htrNx3CajciGm+kDyhRf5JB6t7/A==} + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -4225,6 +5569,14 @@ packages: ufo@1.5.4: resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} + ufo@1.6.1: + resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + + uglify-js@3.19.3: + resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} + engines: {node: '>=0.8.0'} + hasBin: true + unbuild@3.5.0: resolution: {integrity: sha512-DPFttsiADnHRb/K+yJ9r9jdn6JyXlsmdT0S12VFC14DFSJD+cxBnHq+v0INmqqPVPxOoUjvJFYUVIb02rWnVeA==} hasBin: true @@ -4234,9 +5586,19 @@ packages: typescript: optional: true + unconfig@7.3.2: + resolution: {integrity: sha512-nqG5NNL2wFVGZ0NA/aCFw0oJ2pxSf1lwg4Z5ill8wd7K4KX/rQbHlwbh+bjctXL5Ly1xtzHenHGOK0b+lG6JVg==} + undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici@5.29.0: + resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} + engines: {node: '>=14.0'} + + unenv@2.0.0-rc.17: + resolution: {integrity: sha512-B06u0wXkEd+o5gOCMl/ZHl5cfpYbDZKAT+HWTL+Hws6jWu7dCiqBBXXXzMFcFVJb8D4ytAnYmxJA83uwOQRSsg==} + unified@11.0.4: resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==} @@ -4265,6 +5627,10 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} + unplugin-utils@0.2.4: + resolution: {integrity: sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==} + engines: {node: '>=18.12.0'} + unrs-resolver@1.9.2: resolution: {integrity: sha512-VUyWiTNQD7itdiMuJy+EuLEErLj3uwX/EpHQF8EOf33Dq3Ju6VW1GXm+swk6+1h7a49uv9fKZ+dft9jU7esdLA==} @@ -4284,17 +5650,52 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + valibot@0.41.0: + resolution: {integrity: sha512-igDBb8CTYr8YTQlOKgaN9nSS0Be7z+WRuaeYqGf3Cjz3aKmSnqEmYnkfVjzIuumGqfHpa3fLIvMEAfhrpqN8ng==} + peerDependencies: + typescript: '>=5' + peerDependenciesMeta: + typescript: + optional: true + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + validate-npm-package-name@5.0.1: + resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + vfile-message@4.0.2: resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} vfile@6.0.1: resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} + vite-dev-rpc@1.1.0: + resolution: {integrity: sha512-pKXZlgoXGoE8sEKiKJSng4hI1sQ4wi5YT24FCrwrLt6opmkjlqPPVmiPWWJn8M8byMxRGzp1CrFuqQs4M/Z39A==} + peerDependencies: + vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.1 || ^7.0.0-0 + + vite-hot-client@2.1.0: + resolution: {integrity: sha512-7SpgZmU7R+dDnSmvXE1mfDtnHLHQSisdySVR7lO8ceAXvM0otZeuQQ6C8LrS5d/aYyP/QZ0hI0L+dIPrm4YlFQ==} + peerDependencies: + vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 + vite-node@3.2.4: resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true + vite-plugin-inspect@11.3.0: + resolution: {integrity: sha512-vmt7K1WVKQkuiwvsM6e5h3HDJ2pSWTnzoj+JP9Kvu3Sh2G+nFap1F1V7tqpyA4qFxM1GQ84ryffWFGQrwShERQ==} + engines: {node: '>=14'} + peerDependencies: + '@nuxt/kit': '*' + vite: ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + '@nuxt/kit': + optional: true + vite@7.0.1: resolution: {integrity: sha512-BiKOQoW5HGR30E6JDeNsati6HnSPMVEKbkIWbCiol+xKeu3g5owrjy7kbk/QEMuzCV87dSUTvycYKmlcfGKq3Q==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4375,6 +5776,14 @@ packages: yaml: optional: true + vitefu@1.1.0: + resolution: {integrity: sha512-AiG/L9DVsEYHWQ9jAEnke0nKiASlPw+JYwDl6Z4l6a6/IqT1tKseEl6R5+rVnKJt/K3jCTWiQvgoIh5MuqBJJQ==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0 + peerDependenciesMeta: + vite: + optional: true + vitest@3.2.4: resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} @@ -4403,27 +5812,81 @@ packages: jsdom: optional: true + walk-up-path@3.0.1: + resolution: {integrity: sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==} + web-streams-polyfill@3.2.1: resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} engines: {node: '>= 8'} + webpack-sources@3.3.3: + resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==} + engines: {node: '>=10.13.0'} + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true + which@3.0.1: + resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + why-is-node-running@2.3.0: resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} engines: {node: '>=8'} hasBin: true + wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + + workerd@1.20250617.0: + resolution: {integrity: sha512-Uv6p0PYUHp/W/aWfUPLkZVAoAjapisM27JJlwcX9wCPTfCfnuegGOxFMvvlYpmNaX4YCwEdLCwuNn3xkpSkuZw==} + engines: {node: '>=16'} + hasBin: true + + wrangler@4.23.0: + resolution: {integrity: sha512-JSeDt3IwA4TEmg/V3tRblImPjdxynBt9PUVO/acQJ83XGlMMSwswDKL1FuwvbFzgX6+JXc3GMHeu7r8AQIxw9w==} + engines: {node: '>=18.0.0'} + hasBin: true + peerDependencies: + '@cloudflare/workers-types': ^4.20250617.0 + peerDependenciesMeta: + '@cloudflare/workers-types': + optional: true + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + wrap-ansi@9.0.0: resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} engines: {node: '>=18'} + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yallist@5.0.0: + resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} + engines: {node: '>=18'} + yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} @@ -4437,6 +5900,15 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + youch@3.3.4: + resolution: {integrity: sha512-UeVBXie8cA35DS6+nBkls68xaBBXCye0CNznrhszZjTbRVnJKQuNsyLKBTTL4ln1o1rh2PKtv35twV7irj5SEg==} + + zimmerframe@1.1.2: + resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==} + + zod@3.22.3: + resolution: {integrity: sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==} + zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -4504,6 +5976,26 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 + '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.27.7)': + dependencies: + '@babel/core': 7.27.7 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.7) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.27.7 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-member-expression-to-functions@7.27.1': + dependencies: + '@babel/traverse': 7.27.7 + '@babel/types': 7.27.7 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-imports@7.25.9': dependencies: '@babel/traverse': 7.27.4 @@ -4527,8 +6019,28 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-optimise-call-expression@7.27.1': + dependencies: + '@babel/types': 7.27.7 + '@babel/helper-plugin-utils@7.27.1': {} + '@babel/helper-replace-supers@7.27.1(@babel/core@7.27.7)': + dependencies: + '@babel/core': 7.27.7 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.27.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + dependencies: + '@babel/traverse': 7.27.7 + '@babel/types': 7.27.7 + transitivePeerDependencies: + - supports-color + '@babel/helper-string-parser@7.25.9': {} '@babel/helper-string-parser@7.27.1': {} @@ -4566,6 +6078,11 @@ snapshots: '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-pipeline-operator': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-syntax-decorators@7.27.1(@babel/core@7.27.7)': + dependencies: + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 @@ -4576,6 +6093,19 @@ snapshots: '@babel/core': 7.27.7 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.27.7)': + dependencies: + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.7)': + dependencies: + '@babel/core': 7.27.7 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.7) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 @@ -4604,14 +6134,36 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/runtime@7.23.5': + '@babel/plugin-transform-typescript@7.28.0(@babel/core@7.27.7)': dependencies: - regenerator-runtime: 0.14.0 + '@babel/core': 7.27.7 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.7) + transitivePeerDependencies: + - supports-color - '@babel/template@7.27.2': + '@babel/preset-typescript@7.27.1(@babel/core@7.27.7)': dependencies: - '@babel/code-frame': 7.27.1 - '@babel/parser': 7.27.7 + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.27.7) + transitivePeerDependencies: + - supports-color + + '@babel/runtime@7.23.5': + dependencies: + regenerator-runtime: 0.14.0 + + '@babel/template@7.27.2': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.27.7 '@babel/types': 7.27.7 '@babel/traverse@7.27.4': @@ -4658,6 +6210,63 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 + '@cloudflare/kv-asset-handler@0.4.0': + dependencies: + mime: 3.0.0 + + '@cloudflare/unenv-preset@2.3.3(unenv@2.0.0-rc.17)(workerd@1.20250617.0)': + dependencies: + unenv: 2.0.0-rc.17 + optionalDependencies: + workerd: 1.20250617.0 + + '@cloudflare/vite-plugin@1.9.0(rollup@4.44.1)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250617.0)(wrangler@4.23.0)': + dependencies: + '@cloudflare/unenv-preset': 2.3.3(unenv@2.0.0-rc.17)(workerd@1.20250617.0) + '@mjackson/node-fetch-server': 0.6.1 + '@rollup/plugin-replace': 6.0.2(rollup@4.44.1) + get-port: 7.1.0 + miniflare: 4.20250617.5 + picocolors: 1.1.1 + tinyglobby: 0.2.14 + unenv: 2.0.0-rc.17 + vite: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + wrangler: 4.23.0 + ws: 8.18.0 + transitivePeerDependencies: + - bufferutil + - rollup + - utf-8-validate + - workerd + + '@cloudflare/workerd-darwin-64@1.20250617.0': + optional: true + + '@cloudflare/workerd-darwin-arm64@1.20250617.0': + optional: true + + '@cloudflare/workerd-linux-64@1.20250617.0': + optional: true + + '@cloudflare/workerd-linux-arm64@1.20250617.0': + optional: true + + '@cloudflare/workerd-windows-64@1.20250617.0': + optional: true + + '@conventional-changelog/git-client@2.5.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.0)': + dependencies: + '@simple-libs/child-process-utils': 1.0.1 + '@simple-libs/stream-utils': 1.1.0 + semver: 7.7.2 + optionalDependencies: + conventional-commits-filter: 5.0.0 + conventional-commits-parser: 6.2.0 + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + '@emnapi/core@1.4.3': dependencies: '@emnapi/wasi-threads': 1.0.2 @@ -4771,6 +6380,9 @@ snapshots: '@esbuild/aix-ppc64@0.25.2': optional: true + '@esbuild/aix-ppc64@0.25.4': + optional: true + '@esbuild/aix-ppc64@0.25.5': optional: true @@ -4780,6 +6392,9 @@ snapshots: '@esbuild/android-arm64@0.25.2': optional: true + '@esbuild/android-arm64@0.25.4': + optional: true + '@esbuild/android-arm64@0.25.5': optional: true @@ -4789,6 +6404,9 @@ snapshots: '@esbuild/android-arm@0.25.2': optional: true + '@esbuild/android-arm@0.25.4': + optional: true + '@esbuild/android-arm@0.25.5': optional: true @@ -4798,6 +6416,9 @@ snapshots: '@esbuild/android-x64@0.25.2': optional: true + '@esbuild/android-x64@0.25.4': + optional: true + '@esbuild/android-x64@0.25.5': optional: true @@ -4807,6 +6428,9 @@ snapshots: '@esbuild/darwin-arm64@0.25.2': optional: true + '@esbuild/darwin-arm64@0.25.4': + optional: true + '@esbuild/darwin-arm64@0.25.5': optional: true @@ -4816,6 +6440,9 @@ snapshots: '@esbuild/darwin-x64@0.25.2': optional: true + '@esbuild/darwin-x64@0.25.4': + optional: true + '@esbuild/darwin-x64@0.25.5': optional: true @@ -4825,6 +6452,9 @@ snapshots: '@esbuild/freebsd-arm64@0.25.2': optional: true + '@esbuild/freebsd-arm64@0.25.4': + optional: true + '@esbuild/freebsd-arm64@0.25.5': optional: true @@ -4834,6 +6464,9 @@ snapshots: '@esbuild/freebsd-x64@0.25.2': optional: true + '@esbuild/freebsd-x64@0.25.4': + optional: true + '@esbuild/freebsd-x64@0.25.5': optional: true @@ -4843,6 +6476,9 @@ snapshots: '@esbuild/linux-arm64@0.25.2': optional: true + '@esbuild/linux-arm64@0.25.4': + optional: true + '@esbuild/linux-arm64@0.25.5': optional: true @@ -4852,6 +6488,9 @@ snapshots: '@esbuild/linux-arm@0.25.2': optional: true + '@esbuild/linux-arm@0.25.4': + optional: true + '@esbuild/linux-arm@0.25.5': optional: true @@ -4861,6 +6500,9 @@ snapshots: '@esbuild/linux-ia32@0.25.2': optional: true + '@esbuild/linux-ia32@0.25.4': + optional: true + '@esbuild/linux-ia32@0.25.5': optional: true @@ -4870,6 +6512,9 @@ snapshots: '@esbuild/linux-loong64@0.25.2': optional: true + '@esbuild/linux-loong64@0.25.4': + optional: true + '@esbuild/linux-loong64@0.25.5': optional: true @@ -4879,6 +6524,9 @@ snapshots: '@esbuild/linux-mips64el@0.25.2': optional: true + '@esbuild/linux-mips64el@0.25.4': + optional: true + '@esbuild/linux-mips64el@0.25.5': optional: true @@ -4888,6 +6536,9 @@ snapshots: '@esbuild/linux-ppc64@0.25.2': optional: true + '@esbuild/linux-ppc64@0.25.4': + optional: true + '@esbuild/linux-ppc64@0.25.5': optional: true @@ -4897,6 +6548,9 @@ snapshots: '@esbuild/linux-riscv64@0.25.2': optional: true + '@esbuild/linux-riscv64@0.25.4': + optional: true + '@esbuild/linux-riscv64@0.25.5': optional: true @@ -4906,6 +6560,9 @@ snapshots: '@esbuild/linux-s390x@0.25.2': optional: true + '@esbuild/linux-s390x@0.25.4': + optional: true + '@esbuild/linux-s390x@0.25.5': optional: true @@ -4915,6 +6572,9 @@ snapshots: '@esbuild/linux-x64@0.25.2': optional: true + '@esbuild/linux-x64@0.25.4': + optional: true + '@esbuild/linux-x64@0.25.5': optional: true @@ -4924,6 +6584,9 @@ snapshots: '@esbuild/netbsd-arm64@0.25.2': optional: true + '@esbuild/netbsd-arm64@0.25.4': + optional: true + '@esbuild/netbsd-arm64@0.25.5': optional: true @@ -4933,6 +6596,9 @@ snapshots: '@esbuild/netbsd-x64@0.25.2': optional: true + '@esbuild/netbsd-x64@0.25.4': + optional: true + '@esbuild/netbsd-x64@0.25.5': optional: true @@ -4942,6 +6608,9 @@ snapshots: '@esbuild/openbsd-arm64@0.25.2': optional: true + '@esbuild/openbsd-arm64@0.25.4': + optional: true + '@esbuild/openbsd-arm64@0.25.5': optional: true @@ -4951,6 +6620,9 @@ snapshots: '@esbuild/openbsd-x64@0.25.2': optional: true + '@esbuild/openbsd-x64@0.25.4': + optional: true + '@esbuild/openbsd-x64@0.25.5': optional: true @@ -4960,6 +6632,9 @@ snapshots: '@esbuild/sunos-x64@0.25.2': optional: true + '@esbuild/sunos-x64@0.25.4': + optional: true + '@esbuild/sunos-x64@0.25.5': optional: true @@ -4969,6 +6644,9 @@ snapshots: '@esbuild/win32-arm64@0.25.2': optional: true + '@esbuild/win32-arm64@0.25.4': + optional: true + '@esbuild/win32-arm64@0.25.5': optional: true @@ -4978,6 +6656,9 @@ snapshots: '@esbuild/win32-ia32@0.25.2': optional: true + '@esbuild/win32-ia32@0.25.4': + optional: true + '@esbuild/win32-ia32@0.25.5': optional: true @@ -4987,6 +6668,9 @@ snapshots: '@esbuild/win32-x64@0.25.2': optional: true + '@esbuild/win32-x64@0.25.4': + optional: true + '@esbuild/win32-x64@0.25.5': optional: true @@ -5034,6 +6718,8 @@ snapshots: '@eslint/core': 0.14.0 levn: 0.4.1 + '@fastify/busboy@2.1.1': {} + '@generouted/react-router@1.20.0(react-router-dom@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-router@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': dependencies: fast-glob: 3.3.3 @@ -5044,6 +6730,8 @@ snapshots: transitivePeerDependencies: - react-router-dom + '@hiogawa/utils@1.7.0': {} + '@humanfs/core@0.19.1': {} '@humanfs/node@0.16.6': @@ -5057,6 +6745,94 @@ snapshots: '@humanwhocodes/retry@0.4.2': {} + '@img/sharp-darwin-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.0.4 + optional: true + + '@img/sharp-darwin-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.0.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.0.5': + optional: true + + '@img/sharp-libvips-linux-s390x@1.0.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + optional: true + + '@img/sharp-linux-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.0.4 + optional: true + + '@img/sharp-linux-arm@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.0.5 + optional: true + + '@img/sharp-linux-s390x@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.0.4 + optional: true + + '@img/sharp-linux-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + optional: true + + '@img/sharp-wasm32@0.33.5': + dependencies: + '@emnapi/runtime': 1.4.3 + optional: true + + '@img/sharp-win32-ia32@0.33.5': + optional: true + + '@img/sharp-win32-x64@0.33.5': + optional: true + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@isaacs/fs-minipass@4.0.1': + dependencies: + minipass: 7.1.2 + '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 @@ -5074,9 +6850,14 @@ snapshots: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@mdx-js/mdx@3.0.0': dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/estree-jsx': 1.0.3 '@types/hast': 3.0.3 '@types/mdx': 2.0.10 @@ -5112,6 +6893,10 @@ snapshots: transitivePeerDependencies: - supports-color + '@mjackson/node-fetch-server@0.2.0': {} + + '@mjackson/node-fetch-server@0.6.1': {} + '@napi-rs/wasm-runtime@0.2.11': dependencies: '@emnapi/core': 1.4.3 @@ -5131,6 +6916,35 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 + '@npmcli/git@4.1.0': + dependencies: + '@npmcli/promise-spawn': 6.0.2 + lru-cache: 7.18.3 + npm-pick-manifest: 8.0.2 + proc-log: 3.0.0 + promise-inflight: 1.0.1 + promise-retry: 2.0.1 + semver: 7.7.2 + which: 3.0.1 + transitivePeerDependencies: + - bluebird + + '@npmcli/package-json@4.0.1': + dependencies: + '@npmcli/git': 4.1.0 + glob: 10.4.5 + hosted-git-info: 6.1.3 + json-parse-even-better-errors: 3.0.2 + normalize-package-data: 5.0.0 + proc-log: 3.0.0 + semver: 7.7.2 + transitivePeerDependencies: + - bluebird + + '@npmcli/promise-spawn@6.0.2': + dependencies: + which: 3.0.1 + '@oxc-project/runtime@0.73.0': {} '@oxc-project/runtime@0.75.0': {} @@ -5139,12 +6953,78 @@ snapshots: '@oxc-project/types@0.75.0': {} + '@pkgjs/parseargs@0.11.0': + optional: true + '@playwright/test@1.53.2': dependencies: playwright: 1.53.2 + '@polka/url@1.0.0-next.29': {} + '@publint/pack@0.1.2': {} + '@quansync/fs@0.1.3': + dependencies: + quansync: 0.2.10 + + '@react-router/dev@0.0.0-experimental-23decd7bc(@types/node@22.16.0)(babel-plugin-macros@3.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(react-router@0.0.0-experimental-23decd7bc(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tsx@4.20.3)(typescript@5.8.3)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(wrangler@4.23.0)(yaml@2.7.1)': + dependencies: + '@babel/core': 7.27.7 + '@babel/generator': 7.27.5 + '@babel/parser': 7.27.7 + '@babel/plugin-syntax-decorators': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.7) + '@babel/preset-typescript': 7.27.1(@babel/core@7.27.7) + '@babel/traverse': 7.27.7 + '@babel/types': 7.27.7 + '@npmcli/package-json': 4.0.1 + '@react-router/node': 0.0.0-experimental-23decd7bc(react-router@0.0.0-experimental-23decd7bc(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(typescript@5.8.3) + arg: 5.0.2 + babel-dead-code-elimination: 1.0.10 + chokidar: 4.0.3 + dedent: 1.6.0(babel-plugin-macros@3.1.0) + es-module-lexer: 1.7.0 + exit-hook: 2.2.1 + jsesc: 3.0.2 + lodash: 4.17.21 + pathe: 1.1.2 + picocolors: 1.1.1 + prettier: 2.8.8 + react-refresh: 0.14.2 + react-router: 0.0.0-experimental-23decd7bc(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + semver: 7.7.2 + set-cookie-parser: 2.7.1 + tinyglobby: 0.2.14 + valibot: 0.41.0(typescript@5.8.3) + vite: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite-node: 3.2.4(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + optionalDependencies: + typescript: 5.8.3 + wrangler: 4.23.0 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - bluebird + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + '@react-router/node@0.0.0-experimental-23decd7bc(react-router@0.0.0-experimental-23decd7bc(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(typescript@5.8.3)': + dependencies: + '@mjackson/node-fetch-server': 0.2.0 + react-router: 0.0.0-experimental-23decd7bc(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + optionalDependencies: + typescript: 5.8.3 + '@rolldown/binding-darwin-arm64@1.0.0-beta.16': optional: true @@ -5223,6 +7103,8 @@ snapshots: '@rolldown/pluginutils@1.0.0-beta.16': {} + '@rolldown/pluginutils@1.0.0-beta.19': {} + '@rolldown/pluginutils@1.0.0-beta.23': {} '@rollup/plugin-alias@5.1.1(rollup@4.37.0)': @@ -5264,9 +7146,16 @@ snapshots: optionalDependencies: rollup: 4.37.0 + '@rollup/plugin-replace@6.0.2(rollup@4.44.1)': + dependencies: + '@rollup/pluginutils': 5.1.4(rollup@4.44.1) + magic-string: 0.30.17 + optionalDependencies: + rollup: 4.44.1 + '@rollup/pluginutils@5.1.0(rollup@4.44.1)': dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 2.3.1 optionalDependencies: @@ -5274,12 +7163,20 @@ snapshots: '@rollup/pluginutils@5.1.4(rollup@4.37.0)': dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.2 optionalDependencies: rollup: 4.37.0 + '@rollup/pluginutils@5.1.4(rollup@4.44.1)': + dependencies: + '@types/estree': 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.2 + optionalDependencies: + rollup: 4.44.1 + '@rollup/rollup-android-arm-eabi@4.37.0': optional: true @@ -5400,6 +7297,15 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.44.1': optional: true + '@simple-libs/child-process-utils@1.0.1': + dependencies: + '@simple-libs/stream-utils': 1.1.0 + '@types/node': 22.16.0 + + '@simple-libs/stream-utils@1.1.0': + dependencies: + '@types/node': 22.16.0 + '@swc/core-darwin-arm64@1.12.9': optional: true @@ -5460,8 +7366,89 @@ snapshots: dependencies: '@swc/counter': 0.1.3 + '@tailwindcss/node@4.1.11': + dependencies: + '@ampproject/remapping': 2.3.0 + enhanced-resolve: 5.18.2 + jiti: 2.4.2 + lightningcss: 1.30.1 + magic-string: 0.30.17 + source-map-js: 1.2.1 + tailwindcss: 4.1.11 + + '@tailwindcss/oxide-android-arm64@4.1.11': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.1.11': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.1.11': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.1.11': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.11': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.1.11': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.1.11': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.1.11': + optional: true + + '@tailwindcss/oxide-wasm32-wasi@4.1.11': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.11': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.1.11': + optional: true + + '@tailwindcss/oxide@4.1.11': + dependencies: + detect-libc: 2.0.4 + tar: 7.4.3 + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.1.11 + '@tailwindcss/oxide-darwin-arm64': 4.1.11 + '@tailwindcss/oxide-darwin-x64': 4.1.11 + '@tailwindcss/oxide-freebsd-x64': 4.1.11 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.11 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.11 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.11 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.11 + '@tailwindcss/oxide-linux-x64-musl': 4.1.11 + '@tailwindcss/oxide-wasm32-wasi': 4.1.11 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.11 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.11 + + '@tailwindcss/typography@0.5.16(tailwindcss@4.1.11)': + dependencies: + lodash.castarray: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + postcss-selector-parser: 6.0.10 + tailwindcss: 4.1.11 + + '@tailwindcss/vite@4.1.11(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': + dependencies: + '@tailwindcss/node': 4.1.11 + '@tailwindcss/oxide': 4.1.11 + tailwindcss: 4.1.11 + vite: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + '@trysound/sax@0.2.0': {} + '@tsconfig/strictest@2.0.5': {} + '@tybys/wasm-util@0.9.0': dependencies: tslib: 2.8.1 @@ -5469,7 +7456,7 @@ snapshots: '@types/acorn@4.0.6': dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/babel__core@7.20.5': dependencies: @@ -5504,12 +7491,10 @@ snapshots: '@types/estree-jsx@1.0.3': dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/estree@1.0.6': {} - '@types/estree@1.0.7': {} - '@types/estree@1.0.8': {} '@types/fs-extra@11.0.4': @@ -5523,7 +7508,7 @@ snapshots: '@types/hoist-non-react-statics@3.3.6': dependencies: - '@types/react': 18.3.20 + '@types/react': 19.1.8 hoist-non-react-statics: 3.3.2 '@types/json-schema@7.0.15': {} @@ -5544,6 +7529,8 @@ snapshots: dependencies: undici-types: 6.21.0 + '@types/normalize-package-data@2.4.4': {} + '@types/parse-json@4.0.2': {} '@types/prop-types@15.7.11': {} @@ -5786,14 +7773,46 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.9.2': optional: true - '@vitejs/release-scripts@1.5.0': + '@vitejs/plugin-react@4.6.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': + dependencies: + '@babel/core': 7.27.7 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.27.7) + '@rolldown/pluginutils': 1.0.0-beta.19 + '@types/babel__core': 7.20.5 + react-refresh: 0.17.0 + vite: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + transitivePeerDependencies: + - supports-color + + '@vitejs/release-scripts@1.6.0(conventional-commits-filter@5.0.0)': dependencies: + conventional-changelog: 7.1.0(conventional-commits-filter@5.0.0) + conventional-changelog-conventionalcommits: 9.0.0 execa: 8.0.1 mri: 1.2.0 picocolors: 1.1.1 prompts: 2.4.2 - publint: 0.3.9 - semver: 7.7.1 + publint: 0.3.12 + semver: 7.7.2 + transitivePeerDependencies: + - conventional-commits-filter + + '@vitejs/test-dep-client-in-server2@file:packages/plugin-rsc/examples/basic/test-dep/client-in-server2(react@19.1.0)': + dependencies: + react: 19.1.0 + + '@vitejs/test-dep-client-in-server@file:packages/plugin-rsc/examples/basic/test-dep/client-in-server(react@19.1.0)': + dependencies: + react: 19.1.0 + + '@vitejs/test-dep-server-in-client@file:packages/plugin-rsc/examples/basic/test-dep/server-in-client(react@19.1.0)': + dependencies: + react: 19.1.0 + + '@vitejs/test-dep-server-in-server@file:packages/plugin-rsc/examples/basic/test-dep/server-in-server(react@19.1.0)': + dependencies: + react: 19.1.0 '@vitest/expect@3.2.4': dependencies: @@ -5841,6 +7860,14 @@ snapshots: dependencies: acorn: 8.15.0 + acorn-loose@8.5.2: + dependencies: + acorn: 8.15.0 + + acorn-walk@8.3.2: {} + + acorn@8.14.0: {} + acorn@8.14.1: {} acorn@8.15.0: {} @@ -5856,6 +7883,8 @@ snapshots: dependencies: environment: 1.1.0 + ansi-regex@5.0.1: {} + ansi-regex@6.0.1: {} ansi-styles@4.3.0: @@ -5866,10 +7895,23 @@ snapshots: ansis@4.1.0: {} + arg@5.0.2: {} + argparse@2.0.1: {} + array-ify@1.0.0: {} + + as-table@1.0.55: + dependencies: + printable-characters: 1.0.42 + assertion-error@2.0.1: {} + ast-kit@2.1.1: + dependencies: + '@babel/parser': 7.27.7 + pathe: 2.0.3 + astring@1.8.6: {} autoprefixer@10.4.21(postcss@8.5.3): @@ -5882,6 +7924,15 @@ snapshots: postcss: 8.5.3 postcss-value-parser: 4.2.0 + babel-dead-code-elimination@1.0.10: + dependencies: + '@babel/core': 7.27.7 + '@babel/parser': 7.27.7 + '@babel/traverse': 7.27.7 + '@babel/types': 7.27.7 + transitivePeerDependencies: + - supports-color + babel-plugin-macros@3.1.0: dependencies: '@babel/runtime': 7.23.5 @@ -5896,6 +7947,10 @@ snapshots: balanced-match@1.0.2: {} + birpc@2.4.0: {} + + blake3-wasm@2.1.5: {} + boolbase@1.0.0: {} brace-expansion@1.1.11: @@ -5918,6 +7973,10 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.1(browserslist@4.24.4) + bundle-name@4.1.0: + dependencies: + run-applescript: 7.0.0 + cac@6.7.14: {} callsites@3.1.0: {} @@ -5960,6 +8019,12 @@ snapshots: check-error@2.1.1: {} + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + chownr@3.0.0: {} + citty@0.1.6: dependencies: consola: 3.4.2 @@ -5981,6 +8046,16 @@ snapshots: color-name@1.1.4: {} + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + colord@2.9.3: {} colorette@2.0.20: {} @@ -5995,6 +8070,11 @@ snapshots: commondir@1.0.1: {} + compare-func@2.0.0: + dependencies: + array-ify: 1.0.0 + dot-prop: 5.3.0 + concat-map@0.0.1: {} confbox@0.1.8: {} @@ -6003,10 +8083,44 @@ snapshots: consola@3.4.2: {} + conventional-changelog-conventionalcommits@9.0.0: + dependencies: + compare-func: 2.0.0 + + conventional-changelog-preset-loader@5.0.0: {} + + conventional-changelog-writer@8.1.0: + dependencies: + conventional-commits-filter: 5.0.0 + handlebars: 4.7.8 + meow: 13.2.0 + semver: 7.7.2 + + conventional-changelog@7.1.0(conventional-commits-filter@5.0.0): + dependencies: + '@conventional-changelog/git-client': 2.5.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.0) + '@types/normalize-package-data': 2.4.4 + conventional-changelog-preset-loader: 5.0.0 + conventional-changelog-writer: 8.1.0 + conventional-commits-parser: 6.2.0 + fd-package-json: 1.2.0 + meow: 13.2.0 + normalize-package-data: 7.0.0 + transitivePeerDependencies: + - conventional-commits-filter + + conventional-commits-filter@5.0.0: {} + + conventional-commits-parser@6.2.0: + dependencies: + meow: 13.2.0 + convert-source-map@1.9.0: {} convert-source-map@2.0.0: {} + cookie@0.7.2: {} + cookie@1.0.2: {} cosmiconfig@7.1.0: @@ -6107,6 +8221,8 @@ snapshots: csstype@3.1.3: {} + data-uri-to-buffer@2.0.2: {} + data-uri-to-buffer@4.0.1: {} debug@4.4.0: @@ -6121,22 +8237,39 @@ snapshots: dependencies: character-entities: 2.0.2 + dedent@1.6.0(babel-plugin-macros@3.1.0): + optionalDependencies: + babel-plugin-macros: 3.1.0 + deep-eql@5.0.2: {} deep-is@0.1.4: {} deepmerge@4.3.1: {} + default-browser-id@5.0.0: {} + + default-browser@5.2.1: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.0 + + define-lazy-prop@3.0.0: {} + defu@6.1.4: {} dequal@2.0.3: {} detect-libc@2.0.3: {} + detect-libc@2.0.4: {} + devlop@1.1.0: dependencies: dequal: 2.0.3 + diff@8.0.2: {} + dom-serializer@2.0.0: dependencies: domelementtype: 2.3.0 @@ -6155,23 +8288,46 @@ snapshots: domelementtype: 2.3.0 domhandler: 5.0.3 + dot-prop@5.3.0: + dependencies: + is-obj: 2.0.0 + + dts-resolver@2.1.1: {} + + eastasianwidth@0.2.0: {} + electron-to-chromium@1.5.129: {} emoji-regex@10.3.0: {} + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + empathic@2.0.0: {} + enhanced-resolve@5.17.1: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 + enhanced-resolve@5.18.2: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + entities@4.5.0: {} environment@1.1.0: {} + err-code@2.0.3: {} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 + error-stack-parser-es@1.0.5: {} + es-module-lexer@1.7.0: {} esbuild@0.24.2: @@ -6230,6 +8386,34 @@ snapshots: '@esbuild/win32-ia32': 0.25.2 '@esbuild/win32-x64': 0.25.2 + esbuild@0.25.4: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.4 + '@esbuild/android-arm': 0.25.4 + '@esbuild/android-arm64': 0.25.4 + '@esbuild/android-x64': 0.25.4 + '@esbuild/darwin-arm64': 0.25.4 + '@esbuild/darwin-x64': 0.25.4 + '@esbuild/freebsd-arm64': 0.25.4 + '@esbuild/freebsd-x64': 0.25.4 + '@esbuild/linux-arm': 0.25.4 + '@esbuild/linux-arm64': 0.25.4 + '@esbuild/linux-ia32': 0.25.4 + '@esbuild/linux-loong64': 0.25.4 + '@esbuild/linux-mips64el': 0.25.4 + '@esbuild/linux-ppc64': 0.25.4 + '@esbuild/linux-riscv64': 0.25.4 + '@esbuild/linux-s390x': 0.25.4 + '@esbuild/linux-x64': 0.25.4 + '@esbuild/netbsd-arm64': 0.25.4 + '@esbuild/netbsd-x64': 0.25.4 + '@esbuild/openbsd-arm64': 0.25.4 + '@esbuild/openbsd-x64': 0.25.4 + '@esbuild/sunos-x64': 0.25.4 + '@esbuild/win32-arm64': 0.25.4 + '@esbuild/win32-ia32': 0.25.4 + '@esbuild/win32-x64': 0.25.4 + esbuild@0.25.5: optionalDependencies: '@esbuild/aix-ppc64': 0.25.5 @@ -6348,7 +8532,7 @@ snapshots: '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.2 - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 @@ -6395,7 +8579,7 @@ snapshots: estree-util-attach-comments@3.0.0: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 estree-util-build-jsx@3.0.1: dependencies: @@ -6421,7 +8605,7 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 esutils@2.0.3: {} @@ -6439,6 +8623,8 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 + exit-hook@2.2.1: {} + expect-type@1.2.1: {} exsolve@1.0.4: {} @@ -6463,6 +8649,10 @@ snapshots: dependencies: reusify: 1.0.4 + fd-package-json@1.2.0: + dependencies: + walk-up-path: 3.0.1 + fdir@6.4.3(picomatch@4.0.2): optionalDependencies: picomatch: 4.0.2 @@ -6508,6 +8698,11 @@ snapshots: flatted@3.2.9: {} + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + formdata-polyfill@4.0.10: dependencies: fetch-blob: 3.2.0 @@ -6544,6 +8739,13 @@ snapshots: get-east-asian-width@1.2.0: {} + get-port@7.1.0: {} + + get-source@2.0.12: + dependencies: + data-uri-to-buffer: 2.0.2 + source-map: 0.6.1 + get-stream@8.0.1: {} get-them-args@1.3.2: {} @@ -6560,6 +8762,17 @@ snapshots: dependencies: is-glob: 4.0.3 + glob-to-regexp@0.4.1: {} + + glob@10.4.5: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + globals@11.12.0: {} globals@14.0.0: {} @@ -6572,6 +8785,15 @@ snapshots: graphemer@1.4.0: {} + handlebars@4.7.8: + dependencies: + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.19.3 + has-flag@4.0.0: {} hasown@2.0.2: @@ -6580,7 +8802,7 @@ snapshots: hast-util-to-estree@3.1.0: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/estree-jsx': 1.0.3 '@types/hast': 3.0.3 comma-separated-tokens: 2.0.3 @@ -6601,7 +8823,7 @@ snapshots: hast-util-to-jsx-runtime@2.3.0: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/hast': 3.0.3 '@types/unist': 3.0.2 comma-separated-tokens: 2.0.3 @@ -6627,8 +8849,18 @@ snapshots: dependencies: react-is: 16.13.1 + hono@4.8.3: {} + hookable@5.5.3: {} + hosted-git-info@6.1.3: + dependencies: + lru-cache: 7.18.3 + + hosted-git-info@8.1.0: + dependencies: + lru-cache: 10.4.3 + human-signals@5.0.0: {} ignore@5.3.2: {} @@ -6655,14 +8887,20 @@ snapshots: is-arrayish@0.2.1: {} + is-arrayish@0.3.2: {} + is-core-module@2.15.1: dependencies: hasown: 2.0.2 is-decimal@2.0.1: {} + is-docker@3.0.0: {} + is-extglob@2.1.1: {} + is-fullwidth-code-point@3.0.0: {} + is-fullwidth-code-point@4.0.0: {} is-fullwidth-code-point@5.0.0: @@ -6675,24 +8913,40 @@ snapshots: is-hexadecimal@2.0.1: {} + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + is-module@1.0.0: {} is-number@7.0.0: {} + is-obj@2.0.0: {} + is-plain-obj@4.1.0: {} is-reference@1.2.1: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 is-reference@3.0.2: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 is-stream@3.0.0: {} + is-wsl@3.1.0: + dependencies: + is-inside-container: 1.0.0 + isexe@2.0.0: {} + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + jiti@1.21.7: {} jiti@2.4.2: {} @@ -6713,6 +8967,8 @@ snapshots: json-parse-even-better-errors@2.3.1: {} + json-parse-even-better-errors@3.0.2: {} + json-schema-traverse@0.4.1: {} json-stable-stringify-without-jsonify@1.0.1: {} @@ -6820,12 +9076,18 @@ snapshots: dependencies: p-locate: 5.0.0 + lodash.castarray@4.4.0: {} + + lodash.isplainobject@4.0.6: {} + lodash.memoize@4.1.2: {} lodash.merge@4.6.2: {} lodash.uniq@4.5.0: {} + lodash@4.17.21: {} + log-update@6.1.0: dependencies: ansi-escapes: 7.0.0 @@ -6844,10 +9106,14 @@ snapshots: loupe@3.1.4: {} + lru-cache@10.4.3: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 + lru-cache@7.18.3: {} + magic-string@0.30.17: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -6956,6 +9222,8 @@ snapshots: mdn-data@2.0.30: {} + meow@13.2.0: {} + merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -6981,7 +9249,7 @@ snapshots: micromark-extension-mdx-expression@3.0.0: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 devlop: 1.1.0 micromark-factory-mdx-expression: 2.0.1 micromark-factory-space: 2.0.0 @@ -6993,7 +9261,7 @@ snapshots: micromark-extension-mdx-jsx@3.0.0: dependencies: '@types/acorn': 4.0.6 - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 micromark-factory-mdx-expression: 2.0.1 @@ -7009,7 +9277,7 @@ snapshots: micromark-extension-mdxjs-esm@3.0.0: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 devlop: 1.1.0 micromark-core-commonmark: 2.0.0 micromark-util-character: 2.0.1 @@ -7045,7 +9313,7 @@ snapshots: micromark-factory-mdx-expression@2.0.1: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 devlop: 1.1.0 micromark-util-character: 2.0.1 micromark-util-events-to-acorn: 2.0.2 @@ -7109,7 +9377,7 @@ snapshots: micromark-util-events-to-acorn@2.0.2: dependencies: '@types/acorn': 4.0.6 - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/unist': 3.0.2 devlop: 1.1.0 estree-util-visit: 2.0.0 @@ -7171,10 +9439,30 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 + mime@3.0.0: {} + mimic-fn@4.0.0: {} mimic-function@5.0.1: {} + miniflare@4.20250617.5: + dependencies: + '@cspotcode/source-map-support': 0.8.1 + acorn: 8.14.0 + acorn-walk: 8.3.2 + exit-hook: 2.2.1 + glob-to-regexp: 0.4.1 + sharp: 0.33.5 + stoppable: 1.1.0 + undici: 5.29.0 + workerd: 1.20250617.0 + ws: 8.18.0 + youch: 3.3.4 + zod: 3.22.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + minimatch@10.0.1: dependencies: brace-expansion: 2.0.1 @@ -7187,6 +9475,16 @@ snapshots: dependencies: brace-expansion: 2.0.1 + minimist@1.2.8: {} + + minipass@7.1.2: {} + + minizlib@3.0.2: + dependencies: + minipass: 7.1.2 + + mkdirp@3.0.1: {} + mkdist@2.2.0(typescript@5.8.3): dependencies: autoprefixer: 10.4.21(postcss@8.5.3) @@ -7214,14 +9512,20 @@ snapshots: mri@1.2.0: {} + mrmime@2.0.1: {} + ms@2.1.3: {} + mustache@4.2.0: {} + nanoid@3.3.11: {} napi-postinstall@0.2.4: {} natural-compare@1.4.0: {} + neo-async@2.6.2: {} + node-domexception@1.0.0: {} node-fetch@3.3.2: @@ -7232,8 +9536,41 @@ snapshots: node-releases@2.0.19: {} + normalize-package-data@5.0.0: + dependencies: + hosted-git-info: 6.1.3 + is-core-module: 2.15.1 + semver: 7.7.2 + validate-npm-package-license: 3.0.4 + + normalize-package-data@7.0.0: + dependencies: + hosted-git-info: 8.1.0 + semver: 7.7.2 + validate-npm-package-license: 3.0.4 + normalize-range@0.1.2: {} + npm-install-checks@6.3.0: + dependencies: + semver: 7.7.2 + + npm-normalize-package-bin@3.0.1: {} + + npm-package-arg@10.1.0: + dependencies: + hosted-git-info: 6.1.3 + proc-log: 3.0.0 + semver: 7.7.2 + validate-npm-package-name: 5.0.1 + + npm-pick-manifest@8.0.2: + dependencies: + npm-install-checks: 6.3.0 + npm-normalize-package-bin: 3.0.1 + npm-package-arg: 10.1.0 + semver: 7.7.2 + npm-run-path@5.1.0: dependencies: path-key: 4.0.0 @@ -7244,6 +9581,8 @@ snapshots: object-assign@4.1.1: {} + ohash@2.0.11: {} + onetime@6.0.0: dependencies: mimic-fn: 4.0.0 @@ -7252,6 +9591,13 @@ snapshots: dependencies: mimic-function: 5.0.1 + open@10.1.2: + dependencies: + default-browser: 5.2.1 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 3.1.0 + optionator@0.9.3: dependencies: '@aashutoshrathi/word-wrap': 1.2.6 @@ -7269,9 +9615,9 @@ snapshots: dependencies: p-limit: 3.1.0 - package-manager-detector@0.2.11: - dependencies: - quansync: 0.2.10 + package-json-from-dist@1.0.1: {} + + package-manager-detector@1.3.0: {} parent-module@1.0.1: dependencies: @@ -7303,6 +9649,13 @@ snapshots: path-parse@1.0.7: {} + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-to-regexp@6.3.0: {} + path-type@4.0.0: {} pathe@1.1.2: {} @@ -7311,12 +9664,20 @@ snapshots: pathval@2.0.0: {} + perfect-debounce@1.0.0: {} + periscopic@3.1.0: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 estree-walker: 3.0.3 is-reference: 3.0.2 + periscopic@4.0.2: + dependencies: + '@types/estree': 1.0.8 + is-reference: 3.0.2 + zimmerframe: 1.1.2 + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -7492,6 +9853,11 @@ snapshots: postcss: 8.5.3 postcss-value-parser: 4.2.0 + postcss-selector-parser@6.0.10: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + postcss-selector-parser@6.1.2: dependencies: cssesc: 3.0.0 @@ -7535,10 +9901,23 @@ snapshots: prelude-ls@1.2.1: {} + prettier@2.8.8: {} + prettier@3.1.0: {} pretty-bytes@6.1.1: {} + printable-characters@1.0.42: {} + + proc-log@3.0.0: {} + + promise-inflight@1.0.1: {} + + promise-retry@2.0.1: + dependencies: + err-code: 2.0.3 + retry: 0.12.0 + prompts@2.4.2: dependencies: kleur: 3.0.3 @@ -7552,10 +9931,10 @@ snapshots: property-information@6.4.0: {} - publint@0.3.9: + publint@0.3.12: dependencies: '@publint/pack': 0.1.2 - package-manager-detector: 0.2.11 + package-manager-detector: 1.3.0 picocolors: 1.1.1 sade: 1.8.1 @@ -7584,6 +9963,8 @@ snapshots: react-is@19.1.0: {} + react-refresh@0.14.2: {} + react-refresh@0.17.0: {} react-router-dom@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0): @@ -7592,6 +9973,14 @@ snapshots: react-dom: 19.1.0(react@19.1.0) react-router: 7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react-router@0.0.0-experimental-23decd7bc(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + cookie: 1.0.2 + react: 19.1.0 + set-cookie-parser: 2.7.1 + optionalDependencies: + react-dom: 19.1.0(react@19.1.0) + react-router@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: cookie: 1.0.2 @@ -7600,6 +9989,14 @@ snapshots: optionalDependencies: react-dom: 19.1.0(react@19.1.0) + react-server-dom-webpack@19.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + acorn-loose: 8.5.2 + neo-async: 2.6.2 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + webpack-sources: 3.3.3 + react-switch@7.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: prop-types: 15.8.1 @@ -7612,6 +10009,8 @@ snapshots: react@19.1.0: {} + readdirp@4.1.2: {} + refa@0.12.1: dependencies: '@eslint-community/regexpp': 4.12.1 @@ -7662,10 +10061,29 @@ snapshots: onetime: 7.0.0 signal-exit: 4.1.0 + retry@0.12.0: {} + reusify@1.0.4: {} rfdc@1.4.1: {} + rolldown-plugin-dts@0.13.13(rolldown@1.0.0-beta.23)(typescript@5.8.3): + dependencies: + '@babel/generator': 7.27.5 + '@babel/parser': 7.27.7 + '@babel/types': 7.27.7 + ast-kit: 2.1.1 + birpc: 2.4.0 + debug: 4.4.1 + dts-resolver: 2.1.1 + get-tsconfig: 4.10.1 + rolldown: 1.0.0-beta.23 + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - oxc-resolver + - supports-color + rolldown-vite@6.3.21(@types/node@22.16.0)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1): dependencies: '@oxc-project/runtime': 0.73.0 @@ -7783,6 +10201,10 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.44.1 fsevents: 2.3.3 + rsc-html-stream@0.0.6: {} + + run-applescript@7.0.0: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -7815,6 +10237,32 @@ snapshots: shallowequal@1.1.0: {} + sharp@0.33.5: + dependencies: + color: 4.2.3 + detect-libc: 2.0.3 + semver: 7.7.2 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.33.5 + '@img/sharp-darwin-x64': 0.33.5 + '@img/sharp-libvips-darwin-arm64': 1.0.4 + '@img/sharp-libvips-darwin-x64': 1.0.4 + '@img/sharp-libvips-linux-arm': 1.0.5 + '@img/sharp-libvips-linux-arm64': 1.0.4 + '@img/sharp-libvips-linux-s390x': 1.0.4 + '@img/sharp-libvips-linux-x64': 1.0.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + '@img/sharp-linux-arm': 0.33.5 + '@img/sharp-linux-arm64': 0.33.5 + '@img/sharp-linux-s390x': 0.33.5 + '@img/sharp-linux-x64': 0.33.5 + '@img/sharp-linuxmusl-arm64': 0.33.5 + '@img/sharp-linuxmusl-x64': 0.33.5 + '@img/sharp-wasm32': 0.33.5 + '@img/sharp-win32-ia32': 0.33.5 + '@img/sharp-win32-x64': 0.33.5 + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -7829,6 +10277,16 @@ snapshots: simple-git-hooks@2.13.0: {} + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + + sirv@3.0.1: + dependencies: + '@polka/url': 1.0.0-next.29 + mrmime: 2.0.1 + totalist: 3.0.1 + sisteransi@1.0.5: {} slice-ansi@5.0.0: @@ -7845,18 +10303,53 @@ snapshots: source-map@0.5.7: {} + source-map@0.6.1: {} + source-map@0.7.4: {} space-separated-tokens@2.0.2: {} + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.21 + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.21 + + spdx-license-ids@3.0.21: {} + stable-hash-x@0.2.0: {} stackback@0.0.2: {} + stacktracey@2.1.8: + dependencies: + as-table: 1.0.55 + get-source: 2.0.12 + std-env@3.9.0: {} + stoppable@1.1.0: {} + string-argv@0.3.2: {} + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + string-width@7.0.0: dependencies: emoji-regex: 10.3.0 @@ -7868,6 +10361,10 @@ snapshots: character-entities-html4: 2.1.0 character-entities-legacy: 3.0.0 + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + strip-ansi@7.1.0: dependencies: ansi-regex: 6.0.1 @@ -7928,12 +10425,25 @@ snapshots: csso: 5.0.5 picocolors: 1.1.1 + tailwindcss@4.1.11: {} + tapable@2.2.1: {} + tar@7.4.3: + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.2 + minizlib: 3.0.2 + mkdirp: 3.0.1 + yallist: 5.0.0 + tinybench@2.9.0: {} tinyexec@0.3.2: {} + tinyexec@1.0.1: {} + tinyglobby@0.2.12: dependencies: fdir: 6.4.3(picomatch@4.0.2) @@ -7954,6 +10464,8 @@ snapshots: dependencies: is-number: 7.0.0 + totalist@3.0.1: {} + trim-lines@3.0.1: {} trough@2.1.0: {} @@ -7967,6 +10479,30 @@ snapshots: picomatch: 4.0.2 typescript: 5.8.3 + tsdown@0.12.9(publint@0.3.12)(typescript@5.8.3): + dependencies: + ansis: 4.1.0 + cac: 6.7.14 + chokidar: 4.0.3 + debug: 4.4.1 + diff: 8.0.2 + empathic: 2.0.0 + hookable: 5.5.3 + rolldown: 1.0.0-beta.23 + rolldown-plugin-dts: 0.13.13(rolldown@1.0.0-beta.23)(typescript@5.8.3) + semver: 7.7.2 + tinyexec: 1.0.1 + tinyglobby: 0.2.14 + unconfig: 7.3.2 + optionalDependencies: + publint: 0.3.12 + typescript: 5.8.3 + transitivePeerDependencies: + - '@typescript/native-preview' + - oxc-resolver + - supports-color + - vue-tsc + tslib@2.6.2: {} tslib@2.8.1: @@ -7979,6 +10515,8 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + turbo-stream@3.1.0: {} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -7997,6 +10535,11 @@ snapshots: ufo@1.5.4: {} + ufo@1.6.1: {} + + uglify-js@3.19.3: + optional: true + unbuild@3.5.0(typescript@5.8.3): dependencies: '@rollup/plugin-alias': 5.1.1(rollup@4.37.0) @@ -8030,8 +10573,27 @@ snapshots: - vue - vue-tsc + unconfig@7.3.2: + dependencies: + '@quansync/fs': 0.1.3 + defu: 6.1.4 + jiti: 2.4.2 + quansync: 0.2.10 + undici-types@6.21.0: {} + undici@5.29.0: + dependencies: + '@fastify/busboy': 2.1.1 + + unenv@2.0.0-rc.17: + dependencies: + defu: 6.1.4 + exsolve: 1.0.4 + ohash: 2.0.11 + pathe: 2.0.3 + ufo: 1.6.1 + unified@11.0.4: dependencies: '@types/unist': 3.0.2 @@ -8076,6 +10638,11 @@ snapshots: universalify@2.0.1: {} + unplugin-utils@0.2.4: + dependencies: + pathe: 2.0.3 + picomatch: 4.0.2 + unrs-resolver@1.9.2: dependencies: napi-postinstall: 0.2.4 @@ -8120,6 +10687,17 @@ snapshots: util-deprecate@1.0.2: {} + valibot@0.41.0(typescript@5.8.3): + optionalDependencies: + typescript: 5.8.3 + + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + + validate-npm-package-name@5.0.1: {} + vfile-message@4.0.2: dependencies: '@types/unist': 3.0.2 @@ -8131,6 +10709,16 @@ snapshots: unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 + vite-dev-rpc@1.1.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + dependencies: + birpc: 2.4.0 + vite: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite-hot-client: 2.1.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + + vite-hot-client@2.1.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + dependencies: + vite: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite-node@3.2.4(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: cac: 6.7.14 @@ -8152,6 +10740,21 @@ snapshots: - tsx - yaml + vite-plugin-inspect@11.3.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + dependencies: + ansis: 4.1.0 + debug: 4.4.1 + error-stack-parser-es: 1.0.5 + ohash: 2.0.11 + open: 10.1.2 + perfect-debounce: 1.0.0 + sirv: 3.0.1 + unplugin-utils: 0.2.4 + vite: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite-dev-rpc: 1.1.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + transitivePeerDependencies: + - supports-color + vite@7.0.1(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: esbuild: 0.25.5 @@ -8184,6 +10787,10 @@ snapshots: tsx: 4.20.3 yaml: 2.7.1 + vitefu@1.1.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + optionalDependencies: + vite: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: '@types/chai': 5.2.2 @@ -8226,29 +10833,89 @@ snapshots: - tsx - yaml + walk-up-path@3.0.1: {} + web-streams-polyfill@3.2.1: {} + webpack-sources@3.3.3: {} + which@2.0.2: dependencies: isexe: 2.0.0 + which@3.0.1: + dependencies: + isexe: 2.0.0 + why-is-node-running@2.3.0: dependencies: siginfo: 2.0.0 stackback: 0.0.2 + wordwrap@1.0.0: {} + + workerd@1.20250617.0: + optionalDependencies: + '@cloudflare/workerd-darwin-64': 1.20250617.0 + '@cloudflare/workerd-darwin-arm64': 1.20250617.0 + '@cloudflare/workerd-linux-64': 1.20250617.0 + '@cloudflare/workerd-linux-arm64': 1.20250617.0 + '@cloudflare/workerd-windows-64': 1.20250617.0 + + wrangler@4.23.0: + dependencies: + '@cloudflare/kv-asset-handler': 0.4.0 + '@cloudflare/unenv-preset': 2.3.3(unenv@2.0.0-rc.17)(workerd@1.20250617.0) + blake3-wasm: 2.1.5 + esbuild: 0.25.4 + miniflare: 4.20250617.5 + path-to-regexp: 6.3.0 + unenv: 2.0.0-rc.17 + workerd: 1.20250617.0 + optionalDependencies: + fsevents: 2.3.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + wrap-ansi@9.0.0: dependencies: ansi-styles: 6.2.1 string-width: 7.0.0 strip-ansi: 7.1.0 + ws@8.18.0: {} + yallist@3.1.1: {} + yallist@5.0.0: {} + yaml@1.10.2: {} yaml@2.7.1: {} yocto-queue@0.1.0: {} + youch@3.3.4: + dependencies: + cookie: 0.7.2 + mustache: 4.2.0 + stacktracey: 2.1.8 + + zimmerframe@1.1.2: {} + + zod@3.22.3: {} + zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 94320515b..7832fad02 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -2,6 +2,7 @@ packages: - 'packages/*' - 'playground/**' - 'packages/plugin-react-swc/playground/**' + - 'packages/plugin-rsc/examples/*' catalogs: rolldown-vite: diff --git a/scripts/release.ts b/scripts/release.ts index 7a261555c..4a71b452c 100644 --- a/scripts/release.ts +++ b/scripts/release.ts @@ -1,12 +1,17 @@ import { readFileSync, writeFileSync } from 'node:fs' -import { release } from '@vitejs/release-scripts' +import { generateChangelog, release } from '@vitejs/release-scripts' import colors from 'picocolors' const nextH2RE = /^## /gm release({ repo: 'vite-plugin-react', - packages: ['plugin-react', 'plugin-react-swc', 'plugin-react-oxc'], + packages: [ + 'plugin-react', + 'plugin-react-swc', + 'plugin-react-oxc', + 'plugin-rsc', + ], getPkgDir(pkg) { if (pkg === 'plugin-react-swc') { return `packages/${pkg}/dist` @@ -15,6 +20,8 @@ release({ }, toTag: (pkg, version) => `${pkg}@${version}`, logChangelog: async (pkgName) => { + if (pkgName === 'plugin-rsc') return + const changelog = readFileSync(`packages/${pkgName}/CHANGELOG.md`, 'utf-8') if (!changelog.includes('## Unreleased')) { throw new Error("Can't find '## Unreleased' section in CHANGELOG.md") @@ -25,6 +32,14 @@ release({ console.log(colors.dim(changelog.slice(index, nextH2Pos).trim())) }, generateChangelog: async (pkgName, version) => { + if (pkgName === 'plugin-rsc') { + await generateChangelog({ + getPkgDir: () => `packages/${pkgName}`, + tagPrefix: `${pkgName}@`, + }) + return + } + if (pkgName === 'plugin-react-swc') { console.log(colors.cyan('\nUpdating package.json version...')) const pkgJsonPath = `packages/${pkgName}/package.json` From ce84449c87a8834ffafcf0b3f2fc63ad464b921d Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sun, 6 Jul 2025 10:33:24 +0900 Subject: [PATCH 054/313] test(rsc): check hydration mismatch (#526) --- packages/plugin-rsc/e2e/basic.test.ts | 24 +++++++++++++++++++ .../src/routes/hydration-mismatch/client.tsx | 6 +++++ .../src/routes/hydration-mismatch/server.tsx | 16 +++++++++++++ .../examples/basic/src/routes/root.tsx | 2 ++ .../plugin-rsc/examples/basic/src/styles.css | 2 +- packages/plugin-rsc/package.json | 3 +-- 6 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 packages/plugin-rsc/examples/basic/src/routes/hydration-mismatch/client.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/hydration-mismatch/server.tsx diff --git a/packages/plugin-rsc/e2e/basic.test.ts b/packages/plugin-rsc/e2e/basic.test.ts index 9b98ee9f8..494b80818 100644 --- a/packages/plugin-rsc/e2e/basic.test.ts +++ b/packages/plugin-rsc/e2e/basic.test.ts @@ -5,6 +5,7 @@ import { type Fixture, setupIsolatedFixture, useFixture } from './fixture' import { expectNoReload, testNoJs, waitForHydration } from './helper' // TODO: parallel? +// TODO: all tests don't need to be tested in all variants? test.describe('dev-default', () => { const f = useFixture({ root: 'examples/basic', mode: 'dev' }) @@ -928,4 +929,27 @@ function defineTest(f: Fixture) { '(actionCount: 5, innerFnCount: 3)', ) }) + + test('hydration mismatch', async ({ page }) => { + const errors: Error[] = [] + page.on('pageerror', (error) => { + errors.push(error) + }) + await page.goto(f.url('/?test-hydration-mismatch')) + await waitForHydration(page) + expect(errors).toMatchObject([ + { + message: expect.stringContaining( + f.mode === 'dev' + ? `Hydration failed because the server rendered HTML didn't match the client.` + : `Minified React error #418`, + ), + }, + ]) + + errors.length = 0 + await page.goto(f.url()) + await waitForHydration(page) + expect(errors).toEqual([]) + }) } diff --git a/packages/plugin-rsc/examples/basic/src/routes/hydration-mismatch/client.tsx b/packages/plugin-rsc/examples/basic/src/routes/hydration-mismatch/client.tsx new file mode 100644 index 000000000..079d20712 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/hydration-mismatch/client.tsx @@ -0,0 +1,6 @@ +'use client' + +export function Mismatch() { + const value = typeof window !== 'undefined' ? 'browser' : 'ssr' + return <>[{value}] +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/hydration-mismatch/server.tsx b/packages/plugin-rsc/examples/basic/src/routes/hydration-mismatch/server.tsx new file mode 100644 index 000000000..b16d51be7 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/hydration-mismatch/server.tsx @@ -0,0 +1,16 @@ +import { Mismatch } from './client' + +export function TestHydrationMismatch(props: { url: URL }) { + const show = props.url.searchParams.has('test-hydration-mismatch') + return ( +
+ test-hydration-mismatch{' '} + {show ? ( + hide + ) : ( + show + )}{' '} + {show && } +
+ ) +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/root.tsx b/packages/plugin-rsc/examples/basic/src/routes/root.tsx index 352d97ad1..6214ae7d2 100644 --- a/packages/plugin-rsc/examples/basic/src/routes/root.tsx +++ b/packages/plugin-rsc/examples/basic/src/routes/root.tsx @@ -27,6 +27,7 @@ import { TestTailwindClient } from './tailwind/client' import { TestTailwindServer } from './tailwind/server' import { TestTemporaryReference } from './temporary-reference/client' import { TestUseCache } from './use-cache/server' +import { TestHydrationMismatch } from './hydration-mismatch/server' export function Root(props: { url: URL }) { return ( @@ -47,6 +48,7 @@ export function Root(props: { url: URL }) { + diff --git a/packages/plugin-rsc/examples/basic/src/styles.css b/packages/plugin-rsc/examples/basic/src/styles.css index 9ea32262f..e34d4399d 100644 --- a/packages/plugin-rsc/examples/basic/src/styles.css +++ b/packages/plugin-rsc/examples/basic/src/styles.css @@ -9,5 +9,5 @@ input { } a { - @apply text-gray-500 underline hover:text-gray-700; + @apply text-gray-500 underline hover:text-gray-700 cursor-pointer; } diff --git a/packages/plugin-rsc/package.json b/packages/plugin-rsc/package.json index cfb754b6b..79a0efa53 100644 --- a/packages/plugin-rsc/package.json +++ b/packages/plugin-rsc/package.json @@ -34,8 +34,7 @@ "tsc": "tsc -b ./tsconfig.json ./e2e/tsconfig.json ./examples/*/tsconfig.json", "tsc-dev": "pnpm tsc --watch --preserveWatchOutput", "dev": "tsdown --sourcemap --watch src", - "build": "tsdown", - "prepack": "tsdown --clean" + "build": "tsdown" }, "dependencies": { "@mjackson/node-fetch-server": "^0.6.1", From feb762f291cf6460281e64820374bf288485c4a3 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sun, 6 Jul 2025 11:18:28 +0900 Subject: [PATCH 055/313] chore(rsc): fix links (#530) --- packages/plugin-rsc/examples/basic/README.md | 4 ++-- packages/plugin-rsc/examples/react-router/README.md | 4 ++-- packages/plugin-rsc/examples/starter-cf-single/README.md | 4 ++-- packages/plugin-rsc/examples/starter/README.md | 6 +++--- packages/plugin-rsc/examples/starter/package.json | 1 + pnpm-lock.yaml | 3 +++ 6 files changed, 13 insertions(+), 9 deletions(-) diff --git a/packages/plugin-rsc/examples/basic/README.md b/packages/plugin-rsc/examples/basic/README.md index f96083231..03a0a54a3 100644 --- a/packages/plugin-rsc/examples/basic/README.md +++ b/packages/plugin-rsc/examples/basic/README.md @@ -1,9 +1,9 @@ # rsc basic -[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/hi-ogawa/vite-plugins/tree/main/packages/rsc/examples/basic) +[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/vitejs/vite-plugin-react/tree/main/packages/plugin-rsc/examples/basic) https://vite-rsc-basic.hiro18181.workers.dev ```sh -npx giget gh:hi-ogawa/vite-plugins/packages/rsc/examples/basic my-app +npx giget gh:vitejs/vite-plugin-react/packages/plugin-rsc/examples/basic my-app ``` diff --git a/packages/plugin-rsc/examples/react-router/README.md b/packages/plugin-rsc/examples/react-router/README.md index d560eb651..af758971b 100644 --- a/packages/plugin-rsc/examples/react-router/README.md +++ b/packages/plugin-rsc/examples/react-router/README.md @@ -10,12 +10,12 @@ Vite RSC example based on demo made by React router team with Parcel: See also [`rsc-movies`](https://github.com/hi-ogawa/rsc-movies/). -[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/hi-ogawa/vite-plugins/tree/main/packages/rsc/examples/react-router?file=src%2Froutes%2Froot.tsx) +[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/vitejs/vite-plugin-react/tree/main/packages/plugin-rsc/examples/react-router?file=src%2Froutes%2Froot.tsx) Or try it locally by: ```sh -npx giget gh:hi-ogawa/vite-plugins/packages/rsc/examples/react-router my-app +npx giget gh:vitejs/vite-plugin-react/packages/plugin-rsc/examples/react-router my-app cd my-app npm i npm run dev diff --git a/packages/plugin-rsc/examples/starter-cf-single/README.md b/packages/plugin-rsc/examples/starter-cf-single/README.md index 78d862b66..3be9c6ec1 100644 --- a/packages/plugin-rsc/examples/starter-cf-single/README.md +++ b/packages/plugin-rsc/examples/starter-cf-single/README.md @@ -2,9 +2,9 @@ https://vite-rsc-starter.hiro18181.workers.dev -[examples/starter](https://github.com/hi-ogawa/vite-plugins/tree/main/packages/rsc/examples/starter) integrated with [`@cloudflare/vite-plugin`](https://github.com/cloudflare/workers-sdk/tree/main/packages/vite-plugin-cloudflare). +[examples/starter](https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-rsc/examples/starter) integrated with [`@cloudflare/vite-plugin`](https://github.com/cloudflare/workers-sdk/tree/main/packages/vite-plugin-cloudflare). -The difference from [examples/react-router](https://github.com/hi-ogawa/vite-plugins/tree/main/packages/rsc/examples/react-router) is that this doesn't require two workers. +The difference from [examples/react-router](https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-rsc/examples/react-router) is that this doesn't require two workers. - RSC environment always runs on Cloudflare Workers. - During development, SSR environment runs as Vite's deafult Node environment. diff --git a/packages/plugin-rsc/examples/starter/README.md b/packages/plugin-rsc/examples/starter/README.md index 8031f9262..15efa6164 100644 --- a/packages/plugin-rsc/examples/starter/README.md +++ b/packages/plugin-rsc/examples/starter/README.md @@ -1,8 +1,8 @@ # Vite + RSC -This example shows how to setup a React application with [Server Component](https://react.dev/reference/rsc/server-components) features on Vite using [`@vitejs/plugin-rsc`](https://github.com/hi-ogawa/vite-plugins/tree/main/packages/rsc). +This example shows how to setup a React application with [Server Component](https://react.dev/reference/rsc/server-components) features on Vite using [`@vitejs/plugin-rsc`](https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-rsc). -[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/hi-ogawa/vite-plugins/tree/main/packages/rsc/examples/starter) +[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/vitejs/vite-plugin-react/tree/main/packages/plugin-rsc/examples/starter) ```sh # run dev server @@ -15,7 +15,7 @@ npm run preview ## API usages -See [`@vitejs/plugin-rsc`](https://github.com/hi-ogawa/vite-plugins/tree/main/packages/rsc) for the documentation. +See [`@vitejs/plugin-rsc`](https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-rsc) for the documentation. - [`vite.config.ts`](./vite.config.ts) - `@higoawa/vite-rsc/plugin` diff --git a/packages/plugin-rsc/examples/starter/package.json b/packages/plugin-rsc/examples/starter/package.json index 91f3871a4..56a8883df 100644 --- a/packages/plugin-rsc/examples/starter/package.json +++ b/packages/plugin-rsc/examples/starter/package.json @@ -18,6 +18,7 @@ "@types/react": "latest", "@types/react-dom": "latest", "@vitejs/plugin-react": "latest", + "vite": "^7.0.2", "vite-plugin-inspect": "latest" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7541cbf39..5b58d2d7a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -665,6 +665,9 @@ importers: '@vitejs/plugin-react': specifier: latest version: 4.6.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + vite: + specifier: ^7.0.2 + version: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vite-plugin-inspect: specifier: latest version: 11.3.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) From 795303efe78fed2cff2237c6d6d066d76c284ced Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sun, 6 Jul 2025 11:58:21 +0900 Subject: [PATCH 056/313] test(rsc): test browser only component (#528) --- packages/plugin-rsc/e2e/basic.test.ts | 13 ++++ .../src/routes/browser-only/browser-dep.tsx | 3 + .../basic/src/routes/browser-only/client.tsx | 65 +++++++++++++++++++ .../examples/basic/src/routes/root.tsx | 2 + .../plugin-rsc/examples/basic/vite.config.ts | 20 +++++- 5 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 packages/plugin-rsc/examples/basic/src/routes/browser-only/browser-dep.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/browser-only/client.tsx diff --git a/packages/plugin-rsc/e2e/basic.test.ts b/packages/plugin-rsc/e2e/basic.test.ts index 494b80818..e7d63d11e 100644 --- a/packages/plugin-rsc/e2e/basic.test.ts +++ b/packages/plugin-rsc/e2e/basic.test.ts @@ -952,4 +952,17 @@ function defineTest(f: Fixture) { await waitForHydration(page) expect(errors).toEqual([]) }) + + test('browser only', async ({ page, browser }) => { + await page.goto(f.url()) + await expect(page.getByTestId('test-browser-only')).toHaveText( + 'test-browser-only: true', + ) + + const pageNoJs = await browser.newPage({ javaScriptEnabled: false }) + await pageNoJs.goto(f.url()) + await expect(pageNoJs.getByTestId('test-browser-only')).toHaveText( + 'test-browser-only: loading...', + ) + }) } diff --git a/packages/plugin-rsc/examples/basic/src/routes/browser-only/browser-dep.tsx b/packages/plugin-rsc/examples/basic/src/routes/browser-only/browser-dep.tsx new file mode 100644 index 000000000..b922367d1 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/browser-only/browser-dep.tsx @@ -0,0 +1,3 @@ +export default function BrowserDep() { + return <>{String(!!window)} +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/browser-only/client.tsx b/packages/plugin-rsc/examples/basic/src/routes/browser-only/client.tsx new file mode 100644 index 000000000..21c76d2b6 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/browser-only/client.tsx @@ -0,0 +1,65 @@ +'use client' + +import * as React from 'react' + +const BrowserDep = ( + import.meta.env.SSR ? undefined : React.lazy(() => import('./browser-dep')) +)! + +export function TestBrowserOnly() { + return ( +
+ test-browser-only:{' '} + loading...}> + + +
+ ) +} + +function BrowserOnly(props: React.SuspenseProps) { + const hydrated = useHydrated() + if (!hydrated) { + return props.fallback + } + return +} + +const noopStore = () => () => {} + +const useHydrated = () => + React.useSyncExternalStore( + noopStore, + () => true, + () => false, + ) + +/* +If we were to implement this whole logic via hypothetical `browserOnly` helper with transform: + +======= input ====== + +const SomeDep = browserOnly(() => import('./some-dep')) + +======= output ====== + +const __TmpLazy = import.meta.env.SSR ? undefined : React.lazy(() => import('./some-dep'})); + +const SomeDep = ({ browserOnlyFallback, ...props }) => { + const hydrated = useHydrated() + if (!hydrated) { + return browserOnlyFallback + } + return ( + + <__TmpLazy {...props} /> + + ) +} + +=== helper types === + +declare function browserOnly(fn: () => Promise<{ default: React.ComponentType }>): + React.ComponentType + +*/ diff --git a/packages/plugin-rsc/examples/basic/src/routes/root.tsx b/packages/plugin-rsc/examples/basic/src/routes/root.tsx index 6214ae7d2..5a3421ed4 100644 --- a/packages/plugin-rsc/examples/basic/src/routes/root.tsx +++ b/packages/plugin-rsc/examples/basic/src/routes/root.tsx @@ -28,6 +28,7 @@ import { TestTailwindServer } from './tailwind/server' import { TestTemporaryReference } from './temporary-reference/client' import { TestUseCache } from './use-cache/server' import { TestHydrationMismatch } from './hydration-mismatch/server' +import { TestBrowserOnly } from './browser-only/client' export function Root(props: { url: URL }) { return ( @@ -67,6 +68,7 @@ export function Root(props: { url: URL }) { + diff --git a/packages/plugin-rsc/examples/basic/vite.config.ts b/packages/plugin-rsc/examples/basic/vite.config.ts index 7eff64dcc..67c4404e5 100644 --- a/packages/plugin-rsc/examples/basic/vite.config.ts +++ b/packages/plugin-rsc/examples/basic/vite.config.ts @@ -2,8 +2,9 @@ import assert from 'node:assert' import rsc, { transformHoistInlineDirective } from '@vitejs/plugin-rsc' import tailwindcss from '@tailwindcss/vite' import react from '@vitejs/plugin-react' -import { type Plugin, defineConfig, parseAstAsync } from 'vite' +import { type Plugin, defineConfig, normalizePath, parseAstAsync } from 'vite' import inspect from 'vite-plugin-inspect' +import path from 'node:path' // log unhandled rejection to debug e2e failures if (!(globalThis as any).__debugHandlerRegisterd) { @@ -96,6 +97,23 @@ export default defineConfig({ } }, }, + { + name: 'test-browser-only', + writeBundle(_options, bundle) { + const moduleIds = Object.values(bundle).flatMap((c) => + c.type === 'chunk' ? [...c.moduleIds] : [], + ) + const browserId = normalizePath( + path.resolve('src/routes/browser-only/browser-dep.tsx'), + ) + if (this.environment.name === 'client') { + assert(moduleIds.includes(browserId)) + } + if (this.environment.name === 'ssr') { + assert(!moduleIds.includes(browserId)) + } + }, + }, { name: 'cf-build', enforce: 'post', From 46df0fd6274365168259a67bc63ea1e689eb9681 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sun, 6 Jul 2025 16:26:56 +0900 Subject: [PATCH 057/313] chore(rsc): remove `examples/hono` (#533) --- packages/plugin-rsc/README.md | 1 - .../plugin-rsc/examples/hono/package.json | 15 -------- .../examples/hono/public/favicon.ico | Bin 4286 -> 0 bytes .../plugin-rsc/examples/hono/src/client.tsx | 36 ------------------ .../plugin-rsc/examples/hono/src/server.tsx | 34 ----------------- .../plugin-rsc/examples/hono/tsconfig.json | 17 --------- .../plugin-rsc/examples/hono/vite.config.ts | 20 ---------- pnpm-lock.yaml | 15 -------- 8 files changed, 138 deletions(-) delete mode 100644 packages/plugin-rsc/examples/hono/package.json delete mode 100644 packages/plugin-rsc/examples/hono/public/favicon.ico delete mode 100644 packages/plugin-rsc/examples/hono/src/client.tsx delete mode 100644 packages/plugin-rsc/examples/hono/src/server.tsx delete mode 100644 packages/plugin-rsc/examples/hono/tsconfig.json delete mode 100644 packages/plugin-rsc/examples/hono/vite.config.ts diff --git a/packages/plugin-rsc/README.md b/packages/plugin-rsc/README.md index cca3a4d0c..fe626c73a 100644 --- a/packages/plugin-rsc/README.md +++ b/packages/plugin-rsc/README.md @@ -98,7 +98,6 @@ export default defineConfig({ // this environment is responsible for: // - RSC stream deserialization (RSC stream -> React VDOM) // - traditional SSR (React VDOM -> HTML string/stream) - // (NOTE: as it can be seen in the above diagram. SSR is technically an optional mechanism.) ssr: { build: { rollupOptions: { diff --git a/packages/plugin-rsc/examples/hono/package.json b/packages/plugin-rsc/examples/hono/package.json deleted file mode 100644 index a33afc4cf..000000000 --- a/packages/plugin-rsc/examples/hono/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "@vitejs/plugin-rsc-examples-hono", - "private": true, - "license": "MIT", - "type": "module", - "scripts": { - "dev": "vite", - "build": "vite build --app", - "preview": "vite preview" - }, - "dependencies": { - "@vitejs/plugin-rsc": "workspace:*", - "hono": "^4.7.5" - } -} diff --git a/packages/plugin-rsc/examples/hono/public/favicon.ico b/packages/plugin-rsc/examples/hono/public/favicon.ico deleted file mode 100644 index 4aff076603f8f01fb3b7d8b5e38df77cc1efdd69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4286 zcmc(jeOQ&{9mmi9Y5(N4wKaEHmR6cpj%~hXo13+jb7bn2986aeCEr<~nOgZmpr$E` zf`o4brE!#(M1gZu646vl&`1pxMdw?|n=m>c+@F0P;mO>tlyk0ib#r~sdCqh0=e|Gp z@BY2q2Z!Sa`s>)yVZAyw{@CGY>u@-_O1kCfFIo4mH+}bzU$dHTI2`!e8Vx4;1ZKh^ zxKi)yD84^;xC-;kZcMM8u;Hxl=0 zrl(}R$D9P?+i+ezRaK9fv=7rK8`IkjJ!J!H{(<@MS+!R~`O?{>ox=Qa3-rsRXz(63 z2OX9VwCuy2qfp=E%do9`=6nq%BuDe7!jtKI6u6hZ(Up|S59#T~^xp-0ue5F~Z+jVS zZek&3&_;~E69#PN+~91w#MclR`Z@H~e)M!gs0@p&odJ103qFqWoKTLTHzP(@mAxzj(#e6hoycovD(ij}ivB{e#lRuP=cG5k$iaRo)dtx=G zM`-QOi1(><%*tYDlHdB;$}2ES5-{NlF)zQ3nIet}%c&n1$C&sM{8FwGkZ_g`sUGg! z3T>ptZyW}H`KjW=1Y|*Rxo@*u@#a=udF@Tij3~@2VhCG&oq>tVm=kl5JGI?yq#tEV znyQW7d%s`BnUNog;R7)^G4l^7CpCJ{a9%Yn`Yp_y*_byXFtZ{t(-+7Viy(9{&V^aD zbs2uD6#Nr0*t#nRmP8cFH{WZ{6~oeCpO^7?twAxY_*(EPM7@rgXEDr!SrITj3c}}8 zG&hNdv%li*9q=>hZiT(2yL8>xDH{YUC=?&&*$uMcN6JZFoDoXp$8j^YkZG`J2F#yD zT~q{{;?mf*+{vkkRh*ogz;80kX{(g`^V}P1yAv!$FZ=}TTrvCu$T`)zJ@6=Iw#2~7 zDX=^omRbzcx$<@-Pv=~u!|o<}xvTke<^?+EHqb5)?vdJw!(HPN#foO70Yl-k>>`W6NT?SD*WDt)y&<{AiS7Soz8*XK=RiTNo5?#oDKo7j&K*4as9+{Y$WBf^0FF zhPW_7T*Y)e2oGsl4=Su|Js>7q|IHS&LZG8pDR+w@NcCf#pc|Y1m!a|mxHMN<5IFx1 z8~>pkE;}TKz}oRNCQKpRUBH8fptD@dQYW$4vY4(*To35FgLJ?22Ui7UQ&lU1W0kw( zmA{hV*u|UYZ&JK{x(u?0L*`#0{co^Y3@IiNbQp!w zO~^{sk=0O8+H8YsRd7@>zI!0-dJcAo!6iFvdtPxEsQr*FoZ{FpidEZFc~oV-Tk*|$ zOiZ@A>Uvn-1u7yJ!OXeJSCKGPdDF_>p{gGfEe6%GMd?tjc)TqC{6ur_9{_tS27fUO z62lPLLUzcOFS-?jc~K-4?ZfXl{PI|{{KR7G7oUNpZc?8j4+TjnD#%v;R^FZ=O;ZgC zQw<4K9kXibq*$#{4s=ZGD|!+NHE*G=kG!mVVn4kRE-IKSOQ7zG>Zpg*Dnk!_{PpKI z^ege$`kG68tF7N7moCV*M=`td75h4u#3o_hR4h!F4JOMLvlF2rN59`Pl%M4|o^y(g zS}=__`)A81R}DOVN=Mz3(8JOR)qGpx>fXX;*=W+gG@L^E>t@wck4JM=z=<;1T8?r+ z2K1tp)T{Jd($Pnl{u<(`)5^1QqbH<3;_5B+5|_m^P~VlR|NpaD%c*J7PrU}Yugsfq z6=KWbwaXB4Ua4MOgTyu9jE-TFWv}nL35VJirUPP1tyZ~^yM!slY|{1Zn*D!(@9X_P D`VsgZ diff --git a/packages/plugin-rsc/examples/hono/src/client.tsx b/packages/plugin-rsc/examples/hono/src/client.tsx deleted file mode 100644 index c734dae74..000000000 --- a/packages/plugin-rsc/examples/hono/src/client.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { fetchRSC } from '@vitejs/plugin-rsc/extra/browser' -import React from 'react' -import ReactDOM from 'react-dom/client' - -function main() { - const dom = document.getElementById('root')! - ReactDOM.createRoot(dom).render() -} - -function App() { - return ( -
-

hello client

- -
- ) -} - -function FetchRsc() { - const [rsc, setRsc] = React.useState(null) - - return ( -
- - {rsc} -
- ) -} - -main() diff --git a/packages/plugin-rsc/examples/hono/src/server.tsx b/packages/plugin-rsc/examples/hono/src/server.tsx deleted file mode 100644 index 3499a18c5..000000000 --- a/packages/plugin-rsc/examples/hono/src/server.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { renderRequest } from '@vitejs/plugin-rsc/extra/rsc' -import { Hono } from 'hono' - -const app = new Hono() - -app.get('/api/rsc', (c) => { - const el = ( -
-
Hono!
-
random: ${Math.random().toString(36).slice(2)}
-
- ) - // TODO: request is irrelevant - return renderRequest(c.req.raw, el) -}) - -app.all('/', (c) => { - return renderRequest(c.req.raw, ) -}) - -function Document() { - return ( - - - vite-rsc - - -
- - - ) -} - -export default app.fetch diff --git a/packages/plugin-rsc/examples/hono/tsconfig.json b/packages/plugin-rsc/examples/hono/tsconfig.json deleted file mode 100644 index eeb2d95d9..000000000 --- a/packages/plugin-rsc/examples/hono/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "allowImportingTsExtensions": true, - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "skipLibCheck": true, - "verbatimModuleSyntax": true, - "noEmit": true, - "moduleResolution": "Bundler", - "module": "ESNext", - "target": "ESNext", - "lib": ["ESNext", "DOM", "DOM.Iterable"], - "types": ["vite/client"], - "jsx": "react-jsx" - } -} diff --git a/packages/plugin-rsc/examples/hono/vite.config.ts b/packages/plugin-rsc/examples/hono/vite.config.ts deleted file mode 100644 index fb5b09500..000000000 --- a/packages/plugin-rsc/examples/hono/vite.config.ts +++ /dev/null @@ -1,20 +0,0 @@ -import rsc from '@vitejs/plugin-rsc' -import react from '@vitejs/plugin-react' -import { defineConfig } from 'vite' - -export default defineConfig({ - clearScreen: false, - plugins: [ - react(), - rsc({ - entries: { - client: './src/client.tsx', - rsc: './src/server.tsx', - ssr: '@vitejs/plugin-rsc/extra/ssr', - }, - }), - ], - build: { - minify: false, - }, -}) as any diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5b58d2d7a..8a63c7def 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -558,15 +558,6 @@ importers: specifier: ^11.2.0 version: 11.3.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) - packages/plugin-rsc/examples/hono: - dependencies: - '@vitejs/plugin-rsc': - specifier: workspace:* - version: link:../.. - hono: - specifier: ^4.7.5 - version: 4.8.3 - packages/plugin-rsc/examples/react-router: dependencies: '@vitejs/plugin-rsc': @@ -4032,10 +4023,6 @@ packages: hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} - hono@4.8.3: - resolution: {integrity: sha512-jYZ6ZtfWjzBdh8H/0CIFfCBHaFL75k+KMzaM177hrWWm2TWL39YMYaJgB74uK/niRc866NMlH9B8uCvIo284WQ==} - engines: {node: '>=16.9.0'} - hookable@5.5.3: resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} @@ -8852,8 +8839,6 @@ snapshots: dependencies: react-is: 16.13.1 - hono@4.8.3: {} - hookable@5.5.3: {} hosted-git-info@6.1.3: From 2966af52393514e0c23d3236afccba699b042322 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sun, 6 Jul 2025 17:04:54 +0900 Subject: [PATCH 058/313] test(rsc): test react compiler (#529) --- packages/plugin-rsc/e2e/basic.test.ts | 33 +++++++++++++++++++ .../plugin-rsc/examples/basic/package.json | 1 + .../plugin-rsc/examples/basic/vite.config.ts | 9 ++++- pnpm-lock.yaml | 5 ++- 4 files changed, 46 insertions(+), 2 deletions(-) diff --git a/packages/plugin-rsc/e2e/basic.test.ts b/packages/plugin-rsc/e2e/basic.test.ts index e7d63d11e..76d77c79a 100644 --- a/packages/plugin-rsc/e2e/basic.test.ts +++ b/packages/plugin-rsc/e2e/basic.test.ts @@ -43,6 +43,39 @@ test.describe('build-base', () => { defineTest(f) }) +test.describe('dev-react-compiler', () => { + const f = useFixture({ + root: 'examples/basic', + mode: 'dev', + cliOptions: { + env: { + TEST_REACT_COMPILER: 'true', + }, + }, + }) + defineTest(f) + + test('verify react compiler', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + const res = await page.request.get(f.url('src/routes/client.tsx')) + expect(await res.text()).toContain('react.memo_cache_sentinel') + }) +}) + +test.describe('build-react-compiler', () => { + const f = useFixture({ + root: 'examples/basic', + mode: 'build', + cliOptions: { + env: { + TEST_REACT_COMPILER: 'true', + }, + }, + }) + defineTest(f) +}) + test.describe(() => { // disabled by default if (!process.env.TEST_ISOLATED) return diff --git a/packages/plugin-rsc/examples/basic/package.json b/packages/plugin-rsc/examples/basic/package.json index 7db4bcf45..dbbd36342 100644 --- a/packages/plugin-rsc/examples/basic/package.json +++ b/packages/plugin-rsc/examples/basic/package.json @@ -25,6 +25,7 @@ "@vitejs/test-dep-client-in-server2": "file:./test-dep/client-in-server2", "@vitejs/test-dep-server-in-client": "file:./test-dep/server-in-client", "@vitejs/test-dep-server-in-server": "file:./test-dep/server-in-server", + "babel-plugin-react-compiler": "19.1.0-rc.2", "tailwindcss": "^4.1.4", "vite": "^7.0.2", "vite-plugin-inspect": "^11.2.0" diff --git a/packages/plugin-rsc/examples/basic/vite.config.ts b/packages/plugin-rsc/examples/basic/vite.config.ts index 67c4404e5..7e960be8f 100644 --- a/packages/plugin-rsc/examples/basic/vite.config.ts +++ b/packages/plugin-rsc/examples/basic/vite.config.ts @@ -22,7 +22,14 @@ export default defineConfig({ clearScreen: false, plugins: [ tailwindcss(), - react(), + process.env.TEST_REACT_COMPILER + ? (react({ + babel: { plugins: ['babel-plugin-react-compiler'] }, + }).map((p) => ({ + ...p, + applyToEnvironment: (e: any) => e.name === 'client', + })) as any) + : react(), vitePluginUseCache(), rsc({ entries: { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8a63c7def..514f03a0d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -548,6 +548,9 @@ importers: '@vitejs/test-dep-server-in-server': specifier: file:./test-dep/server-in-server version: file:packages/plugin-rsc/examples/basic/test-dep/server-in-server(react@19.1.0) + babel-plugin-react-compiler: + specifier: 19.1.0-rc.2 + version: 19.1.0-rc.2 tailwindcss: specifier: ^4.1.4 version: 4.1.11 @@ -7931,7 +7934,7 @@ snapshots: babel-plugin-react-compiler@19.1.0-rc.2: dependencies: - '@babel/types': 7.27.6 + '@babel/types': 7.27.7 bail@2.0.2: {} From 079feaf1ac2b06a704efc0c7ef6d6a0276207d53 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sun, 6 Jul 2025 17:33:29 +0900 Subject: [PATCH 059/313] test(rsc): fix flaky server restart test (#535) --- packages/plugin-rsc/e2e/basic.test.ts | 36 ++++++++++++++----- .../plugin-rsc/examples/basic/vite.config.ts | 17 --------- 2 files changed, 27 insertions(+), 26 deletions(-) diff --git a/packages/plugin-rsc/e2e/basic.test.ts b/packages/plugin-rsc/e2e/basic.test.ts index 76d77c79a..a1ef08495 100644 --- a/packages/plugin-rsc/e2e/basic.test.ts +++ b/packages/plugin-rsc/e2e/basic.test.ts @@ -12,6 +12,33 @@ test.describe('dev-default', () => { defineTest(f) }) +test.describe('dev-initial', () => { + const f = useFixture({ root: 'examples/basic', mode: 'dev' }) + + // verify css is collected properly on server startup (i.e. empty module graph) + testNoJs('style', async ({ page }) => { + await page.goto(f.url('./')) + await expect(page.locator('.test-style-client')).toHaveCSS( + 'color', + 'rgb(255, 165, 0)', + ) + await expect(page.locator('.test-style-server')).toHaveCSS( + 'color', + 'rgb(255, 165, 0)', + ) + await expect(page.locator('.test-tw-client')).toHaveCSS( + 'color', + // blue-500 + 'rgb(0, 0, 255)', + ) + await expect(page.locator('.test-tw-server')).toHaveCSS( + 'color', + // red-500 + 'rgb(255, 0, 0)', + ) + }) +}) + test.describe('build-default', () => { const f = useFixture({ root: 'examples/basic', mode: 'build' }) defineTest(f) @@ -656,15 +683,6 @@ function defineTest(f: Fixture) { 'rgb(255, 0, 0)', ) }) - - testNoJs('no FOUC after server restart @nojs', async ({ page }) => { - const res = await page.request.get(f.url('/__test_restart')) - expect(await res.text()).toBe('ok') - await new Promise((r) => setTimeout(r, 100)) - await page.goto(f.url('./')) - await testCss(page) - await testTailwind(page) - }) }) test('temporary references @js', async ({ page }) => { diff --git a/packages/plugin-rsc/examples/basic/vite.config.ts b/packages/plugin-rsc/examples/basic/vite.config.ts index 7e960be8f..8b73c83cc 100644 --- a/packages/plugin-rsc/examples/basic/vite.config.ts +++ b/packages/plugin-rsc/examples/basic/vite.config.ts @@ -45,23 +45,6 @@ export default defineConfig({ }), // avoid ecosystem CI fail due to vite-plugin-inspect compatibility !process.env.ECOSYSTEM_CI && inspect(), - { - // test server restart scenario on e2e - name: 'test-api', - configureServer(server) { - server.middlewares.use((req, res, next) => { - const url = new URL(req.url!, 'http://localhost') - if (url.pathname === '/__test_restart') { - setTimeout(() => { - server.restart() - }, 10) - res.end('ok') - return - } - next() - }) - }, - }, { name: 'test-client-reference-tree-shaking', enforce: 'post', From 8412e2759d892c43f262a98b30337fec08969dff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0?= Date: Sun, 6 Jul 2025 18:27:14 +0900 Subject: [PATCH 060/313] ci: set permissions to ci-rsc workflow (#538) --- .github/workflows/ci-rsc.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ci-rsc.yml b/.github/workflows/ci-rsc.yml index 46fc7ea53..d3bf406db 100644 --- a/.github/workflows/ci-rsc.yml +++ b/.github/workflows/ci-rsc.yml @@ -1,4 +1,7 @@ name: ci-rsc + +permissions: {} + on: push: branches: From a7d32a0a1c383964b67fa01c1f5959446759f02d Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sun, 6 Jul 2025 18:36:59 +0900 Subject: [PATCH 061/313] chore(rsc): fix example deps (#534) --- .npmrc | 2 + package.json | 3 - .../plugin-rsc/examples/basic/package.json | 11 ++-- .../examples/react-router/package.json | 8 +-- packages/plugin-rsc/examples/ssg/package.json | 10 +-- .../examples/starter-cf-single/package.json | 8 +-- .../plugin-rsc/examples/starter/package.json | 10 +-- pnpm-lock.yaml | 62 +++++++++---------- 8 files changed, 57 insertions(+), 57 deletions(-) diff --git a/.npmrc b/.npmrc index bdc1cfac7..80af6f76f 100644 --- a/.npmrc +++ b/.npmrc @@ -5,3 +5,5 @@ hoist-pattern[]=eslint-import-resolver-* strict-peer-dependencies=false shell-emulator=true auto-install-peers=false +link-workspace-packages=true +prefer-workspace-packages=true diff --git a/package.json b/package.json index e01ef4a33..bb4bfefae 100644 --- a/package.json +++ b/package.json @@ -72,9 +72,6 @@ ] }, "pnpm": { - "overrides": { - "@vitejs/plugin-rsc": "workspace:*" - }, "packageExtensions": { "generouted": { "peerDependencies": { diff --git a/packages/plugin-rsc/examples/basic/package.json b/packages/plugin-rsc/examples/basic/package.json index dbbd36342..f596e2b10 100644 --- a/packages/plugin-rsc/examples/basic/package.json +++ b/packages/plugin-rsc/examples/basic/package.json @@ -13,13 +13,13 @@ }, "dependencies": { "@vitejs/plugin-rsc": "latest", - "react": "latest", - "react-dom": "latest" + "react": "^19.1.0", + "react-dom": "^19.1.0" }, "devDependencies": { "@tailwindcss/vite": "^4.1.4", - "@types/react": "latest", - "@types/react-dom": "latest", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "latest", "@vitejs/test-dep-client-in-server": "file:./test-dep/client-in-server", "@vitejs/test-dep-client-in-server2": "file:./test-dep/client-in-server2", @@ -28,6 +28,7 @@ "babel-plugin-react-compiler": "19.1.0-rc.2", "tailwindcss": "^4.1.4", "vite": "^7.0.2", - "vite-plugin-inspect": "^11.2.0" + "vite-plugin-inspect": "^11.2.0", + "wrangler": "^4.22.0" } } diff --git a/packages/plugin-rsc/examples/react-router/package.json b/packages/plugin-rsc/examples/react-router/package.json index c3e665895..d7aa14935 100644 --- a/packages/plugin-rsc/examples/react-router/package.json +++ b/packages/plugin-rsc/examples/react-router/package.json @@ -14,8 +14,8 @@ }, "dependencies": { "@vitejs/plugin-rsc": "latest", - "react": "latest", - "react-dom": "latest", + "react": "^19.1.0", + "react-dom": "^19.1.0", "react-router": "0.0.0-experimental-23decd7bc" }, "devDependencies": { @@ -23,8 +23,8 @@ "@react-router/dev": "0.0.0-experimental-23decd7bc", "@tailwindcss/typography": "^0.5.16", "@tailwindcss/vite": "^4.1.4", - "@types/react": "latest", - "@types/react-dom": "latest", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "latest", "tailwindcss": "^4.1.4", "vite": "^7.0.2", diff --git a/packages/plugin-rsc/examples/ssg/package.json b/packages/plugin-rsc/examples/ssg/package.json index 13e508cbd..a6ebe7f45 100644 --- a/packages/plugin-rsc/examples/ssg/package.json +++ b/packages/plugin-rsc/examples/ssg/package.json @@ -11,14 +11,14 @@ }, "dependencies": { "@vitejs/plugin-rsc": "latest", - "react": "latest", - "react-dom": "latest" + "react": "^19.1.0", + "react-dom": "^19.1.0" }, "devDependencies": { "@mdx-js/rollup": "^3.1.0", - "@types/react": "latest", - "@types/react-dom": "latest", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "latest", - "vite-plugin-inspect": "latest" + "vite-plugin-inspect": "^11.2.0" } } diff --git a/packages/plugin-rsc/examples/starter-cf-single/package.json b/packages/plugin-rsc/examples/starter-cf-single/package.json index 4398bd68d..875fb1ad1 100644 --- a/packages/plugin-rsc/examples/starter-cf-single/package.json +++ b/packages/plugin-rsc/examples/starter-cf-single/package.json @@ -12,13 +12,13 @@ }, "dependencies": { "@vitejs/plugin-rsc": "latest", - "react": "latest", - "react-dom": "latest" + "react": "^19.1.0", + "react-dom": "^19.1.0" }, "devDependencies": { "@cloudflare/vite-plugin": "^1.8.0", - "@types/react": "latest", - "@types/react-dom": "latest", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "latest" } } diff --git a/packages/plugin-rsc/examples/starter/package.json b/packages/plugin-rsc/examples/starter/package.json index 56a8883df..997c097d2 100644 --- a/packages/plugin-rsc/examples/starter/package.json +++ b/packages/plugin-rsc/examples/starter/package.json @@ -11,14 +11,14 @@ }, "dependencies": { "@vitejs/plugin-rsc": "latest", - "react": "latest", - "react-dom": "latest" + "react": "^19.1.0", + "react-dom": "^19.1.0" }, "devDependencies": { - "@types/react": "latest", - "@types/react-dom": "latest", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "latest", "vite": "^7.0.2", - "vite-plugin-inspect": "latest" + "vite-plugin-inspect": "^11.2.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 514f03a0d..5bbbfa0e2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,9 +10,6 @@ catalogs: specifier: npm:rolldown-vite@^6.3.21 version: 6.3.21 -overrides: - '@vitejs/plugin-rsc': workspace:* - packageExtensionsChecksum: sha256-S82yCctxnlOTNFuHWCyTFRo/B6Y3jque/4DnsDO4WZA= importers: @@ -515,23 +512,23 @@ importers: packages/plugin-rsc/examples/basic: dependencies: '@vitejs/plugin-rsc': - specifier: workspace:* + specifier: latest version: link:../.. react: - specifier: latest + specifier: ^19.1.0 version: 19.1.0 react-dom: - specifier: latest + specifier: ^19.1.0 version: 19.1.0(react@19.1.0) devDependencies: '@tailwindcss/vite': specifier: ^4.1.4 version: 4.1.11(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) '@types/react': - specifier: latest + specifier: ^19.1.8 version: 19.1.8 '@types/react-dom': - specifier: latest + specifier: ^19.1.6 version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: latest @@ -560,17 +557,20 @@ importers: vite-plugin-inspect: specifier: ^11.2.0 version: 11.3.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + wrangler: + specifier: ^4.22.0 + version: 4.23.0 packages/plugin-rsc/examples/react-router: dependencies: '@vitejs/plugin-rsc': - specifier: workspace:* + specifier: latest version: link:../.. react: - specifier: latest + specifier: ^19.1.0 version: 19.1.0 react-dom: - specifier: latest + specifier: ^19.1.0 version: 19.1.0(react@19.1.0) react-router: specifier: 0.0.0-experimental-23decd7bc @@ -589,10 +589,10 @@ importers: specifier: ^4.1.4 version: 4.1.11(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) '@types/react': - specifier: latest + specifier: ^19.1.8 version: 19.1.8 '@types/react-dom': - specifier: latest + specifier: ^19.1.6 version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: latest @@ -613,48 +613,48 @@ importers: packages/plugin-rsc/examples/ssg: dependencies: '@vitejs/plugin-rsc': - specifier: workspace:* + specifier: latest version: link:../.. react: - specifier: latest + specifier: ^19.1.0 version: 19.1.0 react-dom: - specifier: latest + specifier: ^19.1.0 version: 19.1.0(react@19.1.0) devDependencies: '@mdx-js/rollup': specifier: ^3.1.0 version: 3.1.0(rollup@4.44.1) '@types/react': - specifier: latest + specifier: ^19.1.8 version: 19.1.8 '@types/react-dom': - specifier: latest + specifier: ^19.1.6 version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: latest version: 4.6.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) vite-plugin-inspect: - specifier: latest + specifier: ^11.2.0 version: 11.3.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) packages/plugin-rsc/examples/starter: dependencies: '@vitejs/plugin-rsc': - specifier: workspace:* + specifier: latest version: link:../.. react: - specifier: latest + specifier: ^19.1.0 version: 19.1.0 react-dom: - specifier: latest + specifier: ^19.1.0 version: 19.1.0(react@19.1.0) devDependencies: '@types/react': - specifier: latest + specifier: ^19.1.8 version: 19.1.8 '@types/react-dom': - specifier: latest + specifier: ^19.1.6 version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: latest @@ -663,29 +663,29 @@ importers: specifier: ^7.0.2 version: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vite-plugin-inspect: - specifier: latest + specifier: ^11.2.0 version: 11.3.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) packages/plugin-rsc/examples/starter-cf-single: dependencies: '@vitejs/plugin-rsc': - specifier: workspace:* + specifier: latest version: link:../.. react: - specifier: latest + specifier: ^19.1.0 version: 19.1.0 react-dom: - specifier: latest + specifier: ^19.1.0 version: 19.1.0(react@19.1.0) devDependencies: '@cloudflare/vite-plugin': specifier: ^1.8.0 version: 1.9.0(rollup@4.44.1)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250617.0)(wrangler@4.23.0) '@types/react': - specifier: latest + specifier: ^19.1.8 version: 19.1.8 '@types/react-dom': - specifier: latest + specifier: ^19.1.6 version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: latest @@ -7501,7 +7501,7 @@ snapshots: '@types/hoist-non-react-statics@3.3.6': dependencies: - '@types/react': 19.1.8 + '@types/react': 18.3.20 hoist-non-react-statics: 3.3.2 '@types/json-schema@7.0.15': {} From 442e46e22ea4a1ac818657ad9c22b8ce501898da Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 7 Jul 2025 10:09:28 +0900 Subject: [PATCH 062/313] chore(rsc): re-install example deps (#539) --- pnpm-lock.yaml | 33 +++++---------------------------- 1 file changed, 5 insertions(+), 28 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5bbbfa0e2..4ce27d39a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -532,7 +532,7 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: latest - version: 4.6.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: link:../../../plugin-react '@vitejs/test-dep-client-in-server': specifier: file:./test-dep/client-in-server version: file:packages/plugin-rsc/examples/basic/test-dep/client-in-server(react@19.1.0) @@ -596,7 +596,7 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: latest - version: 4.6.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: link:../../../plugin-react tailwindcss: specifier: ^4.1.4 version: 4.1.11 @@ -633,7 +633,7 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: latest - version: 4.6.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: link:../../../plugin-react vite-plugin-inspect: specifier: ^11.2.0 version: 11.3.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) @@ -658,7 +658,7 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: latest - version: 4.6.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: link:../../../plugin-react vite: specifier: ^7.0.2 version: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) @@ -689,7 +689,7 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: latest - version: 4.6.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: link:../../../plugin-react playground: devDependencies: @@ -2333,9 +2333,6 @@ packages: '@rolldown/pluginutils@1.0.0-beta.16': resolution: {integrity: sha512-w3f87JpF7lgIlK03I0R3XidspFgB4MsixE5o/VjBMJI+Ki4XW/Ffrykmj2AUCbVxhRD7Pi9W0Qu2XapJhB2mSA==} - '@rolldown/pluginutils@1.0.0-beta.19': - resolution: {integrity: sha512-3FL3mnMbPu0muGOCaKAhhFEYmqv9eTfPSJRJmANrCwtgK8VuxpsZDGK+m0LYAGoyO8+0j5uRe4PeyPDK1yA/hA==} - '@rolldown/pluginutils@1.0.0-beta.23': resolution: {integrity: sha512-lLCP4LUecUGBLq8EfkbY2esGYyvZj5ee+WZG12+mVnQH48b46SVbwp+0vJkD+6Pnsc+u9SWarBV9sQ5mVwmb5g==} @@ -3094,12 +3091,6 @@ packages: cpu: [x64] os: [win32] - '@vitejs/plugin-react@4.6.0': - resolution: {integrity: sha512-5Kgff+m8e2PB+9j51eGHEpn5kUzRKH2Ry0qGoe8ItJg7pqnkPrYPkDQZGgGmTa0EGarHrkjLvOdU3b1fzI8otQ==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0 - '@vitejs/release-scripts@1.6.0': resolution: {integrity: sha512-XV+w22Fvn+wqDtEkz8nQIJzvmRVSh90c2xvOO7cX9fkX8+39ZJpYRiXDIRJG1JRnF8khm1rHjulid+l+khc7TQ==} @@ -7096,8 +7087,6 @@ snapshots: '@rolldown/pluginutils@1.0.0-beta.16': {} - '@rolldown/pluginutils@1.0.0-beta.19': {} - '@rolldown/pluginutils@1.0.0-beta.23': {} '@rollup/plugin-alias@5.1.1(rollup@4.37.0)': @@ -7766,18 +7755,6 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.9.2': optional: true - '@vitejs/plugin-react@4.6.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': - dependencies: - '@babel/core': 7.27.7 - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.27.7) - '@rolldown/pluginutils': 1.0.0-beta.19 - '@types/babel__core': 7.20.5 - react-refresh: 0.17.0 - vite: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - transitivePeerDependencies: - - supports-color - '@vitejs/release-scripts@1.6.0(conventional-commits-filter@5.0.0)': dependencies: conventional-changelog: 7.1.0(conventional-commits-filter@5.0.0) From 11f56d63a9ed082137732211db556c784cadb523 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 7 Jul 2025 10:32:33 +0900 Subject: [PATCH 063/313] fix: return `Plugin[]` instead of `PluginOption[]` (#537) --- packages/plugin-react-oxc/CHANGELOG.md | 2 ++ packages/plugin-react-oxc/src/index.ts | 4 ++-- packages/plugin-react-swc/CHANGELOG.md | 2 ++ packages/plugin-react-swc/src/index.ts | 4 ++-- packages/plugin-react/CHANGELOG.md | 10 ++++++++++ packages/plugin-react/src/index.ts | 4 ++-- packages/plugin-rsc/examples/basic/vite.config.ts | 6 +++--- 7 files changed, 23 insertions(+), 9 deletions(-) diff --git a/packages/plugin-react-oxc/CHANGELOG.md b/packages/plugin-react-oxc/CHANGELOG.md index 7d9c4390c..e82a2fa30 100644 --- a/packages/plugin-react-oxc/CHANGELOG.md +++ b/packages/plugin-react-oxc/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +### Return `Plugin[]` instead of `PluginOption[]` + ## 0.2.3 (2025-06-16) ### Disable refresh transform when `server.hmr: false` is set [#502](https://github.com/vitejs/vite-plugin-react/pull/502) diff --git a/packages/plugin-react-oxc/src/index.ts b/packages/plugin-react-oxc/src/index.ts index a3caa574a..0d7fa5717 100644 --- a/packages/plugin-react-oxc/src/index.ts +++ b/packages/plugin-react-oxc/src/index.ts @@ -1,7 +1,7 @@ import { dirname, join } from 'node:path' import { fileURLToPath } from 'node:url' import { readFileSync } from 'node:fs' -import type { BuildOptions, Plugin, PluginOption } from 'vite' +import type { BuildOptions, Plugin } from 'vite' import { addRefreshWrapper, avoidSourceMapOption, @@ -30,7 +30,7 @@ export interface Options { const defaultIncludeRE = /\.[tj]sx?(?:$|\?)/ -export default function viteReact(opts: Options = {}): PluginOption[] { +export default function viteReact(opts: Options = {}): Plugin[] { const include = opts.include ?? defaultIncludeRE const exclude = [ ...(Array.isArray(opts.exclude) diff --git a/packages/plugin-react-swc/CHANGELOG.md b/packages/plugin-react-swc/CHANGELOG.md index 20bfd9597..5a2b0dd8e 100644 --- a/packages/plugin-react-swc/CHANGELOG.md +++ b/packages/plugin-react-swc/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +### Return `Plugin[]` instead of `PluginOption[]` + ## 3.10.2 (2025-06-10) ### Suggest `@vitejs/plugin-react-oxc` if rolldown-vite is detected [#491](https://github.com/vitejs/vite-plugin-react/pull/491) diff --git a/packages/plugin-react-swc/src/index.ts b/packages/plugin-react-swc/src/index.ts index 9f9f6738b..49d34920d 100644 --- a/packages/plugin-react-swc/src/index.ts +++ b/packages/plugin-react-swc/src/index.ts @@ -11,7 +11,7 @@ import { type Options as SWCOptions, transform, } from '@swc/core' -import type { PluginOption } from 'vite' +import type { Plugin } from 'vite' import { addRefreshWrapper, getPreambleCode, @@ -83,7 +83,7 @@ type Options = { disableOxcRecommendation?: boolean } -const react = (_options?: Options): PluginOption[] => { +const react = (_options?: Options): Plugin[] => { let hmrDisabled = false const options = { jsxImportSource: _options?.jsxImportSource ?? 'react', diff --git a/packages/plugin-react/CHANGELOG.md b/packages/plugin-react/CHANGELOG.md index 3f267d9ed..960c754ed 100644 --- a/packages/plugin-react/CHANGELOG.md +++ b/packages/plugin-react/CHANGELOG.md @@ -2,6 +2,16 @@ ## Unreleased +### Return `Plugin[]` instead of `PluginOption[]` + +The return type has changed from `react(): PluginOption[]` to more specialized type `react(): Plugin[]`. This allows for type-safe manipulation of plugins, for example: + +```tsx +// previously this causes type errors +react({ babel: { plugins: ['babel-plugin-react-compiler'] } }) + .map(p => ({ ...p, applyToEnvironment: e => e.name === 'client' })) +``` + ## 4.6.0 (2025-06-23) ### Add raw Rolldown support diff --git a/packages/plugin-react/src/index.ts b/packages/plugin-react/src/index.ts index 4d43dd47f..ed5756531 100644 --- a/packages/plugin-react/src/index.ts +++ b/packages/plugin-react/src/index.ts @@ -5,7 +5,7 @@ import type * as babelCore from '@babel/core' import type { ParserOptions, TransformOptions } from '@babel/core' import { createFilter } from 'vite' import * as vite from 'vite' -import type { Plugin, PluginOption, ResolvedConfig } from 'vite' +import type { Plugin, ResolvedConfig } from 'vite' import { addRefreshWrapper, getPreambleCode, @@ -109,7 +109,7 @@ export type ViteReactPluginApi = { const defaultIncludeRE = /\.[tj]sx?$/ const tsRE = /\.tsx?$/ -export default function viteReact(opts: Options = {}): PluginOption[] { +export default function viteReact(opts: Options = {}): Plugin[] { const include = opts.include ?? defaultIncludeRE const exclude = opts.exclude const filter = createFilter(include, exclude) diff --git a/packages/plugin-rsc/examples/basic/vite.config.ts b/packages/plugin-rsc/examples/basic/vite.config.ts index 8b73c83cc..198838c1c 100644 --- a/packages/plugin-rsc/examples/basic/vite.config.ts +++ b/packages/plugin-rsc/examples/basic/vite.config.ts @@ -23,12 +23,12 @@ export default defineConfig({ plugins: [ tailwindcss(), process.env.TEST_REACT_COMPILER - ? (react({ + ? react({ babel: { plugins: ['babel-plugin-react-compiler'] }, }).map((p) => ({ ...p, - applyToEnvironment: (e: any) => e.name === 'client', - })) as any) + applyToEnvironment: (e) => e.name === 'client', + })) : react(), vitePluginUseCache(), rsc({ From 9d7a1ad1b58407e78e303ec9a265e529bc40048d Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 7 Jul 2025 10:38:37 +0900 Subject: [PATCH 064/313] chore: renovate ignoreDeps react-router (#542) --- .github/renovate.json5 | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 94494bbd2..388a9462b 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -43,5 +43,9 @@ "kill-port", // `kill-port:^2.0.0 has perf issues (#8392) "prettier", // waiting for stable choice on ternaries + + // plugin-rsc + "react-router", + "@react-router/dev", ], } From cfe29122a8eec6c1e2ed9999531237dbce140e60 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 7 Jul 2025 11:25:36 +0900 Subject: [PATCH 065/313] fix(deps): update all non-major dependencies (#540) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- packages/plugin-react-oxc/package.json | 2 +- packages/plugin-react-swc/package.json | 2 +- packages/plugin-react/package.json | 6 +- .../plugin-rsc/examples/basic/package.json | 8 +- .../examples/react-router/package.json | 10 +- packages/plugin-rsc/examples/ssg/package.json | 2 +- .../examples/starter-cf-single/package.json | 2 +- .../plugin-rsc/examples/starter/package.json | 2 +- packages/plugin-rsc/package.json | 10 +- pnpm-lock.yaml | 569 ++++++++---------- 11 files changed, 265 insertions(+), 350 deletions(-) diff --git a/package.json b/package.json index bb4bfefae..ffc6ec87b 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "@vitejs/release-scripts": "^1.6.0", "eslint": "^9.30.1", "eslint-plugin-import-x": "^4.16.1", - "eslint-plugin-n": "^17.20.0", + "eslint-plugin-n": "^17.21.0", "eslint-plugin-regexp": "^2.9.0", "fs-extra": "^11.3.0", "globals": "^16.3.0", diff --git a/packages/plugin-react-oxc/package.json b/packages/plugin-react-oxc/package.json index fbf23afa1..de0af4a01 100644 --- a/packages/plugin-react-oxc/package.json +++ b/packages/plugin-react-oxc/package.json @@ -48,6 +48,6 @@ "vite": "catalog:rolldown-vite" }, "dependencies": { - "@rolldown/pluginutils": "1.0.0-beta.23" + "@rolldown/pluginutils": "1.0.0-beta.24" } } diff --git a/packages/plugin-react-swc/package.json b/packages/plugin-react-swc/package.json index 7425fd3e0..ae5c286e3 100644 --- a/packages/plugin-react-swc/package.json +++ b/packages/plugin-react-swc/package.json @@ -29,7 +29,7 @@ }, "homepage": "https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react-swc#readme", "dependencies": { - "@rolldown/pluginutils": "1.0.0-beta.23", + "@rolldown/pluginutils": "1.0.0-beta.24", "@swc/core": "^1.12.9" }, "peerDependencies": { diff --git a/packages/plugin-react/package.json b/packages/plugin-react/package.json index eba25aa6d..53cf9b1ba 100644 --- a/packages/plugin-react/package.json +++ b/packages/plugin-react/package.json @@ -49,10 +49,10 @@ }, "homepage": "https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react#readme", "dependencies": { - "@babel/core": "^7.27.7", + "@babel/core": "^7.28.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", - "@rolldown/pluginutils": "1.0.0-beta.23", + "@rolldown/pluginutils": "1.0.0-beta.24", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, @@ -64,7 +64,7 @@ "babel-plugin-react-compiler": "19.1.0-rc.2", "react": "^19.1.0", "react-dom": "^19.1.0", - "rolldown": "1.0.0-beta.23", + "rolldown": "1.0.0-beta.24", "unbuild": "^3.5.0", "vitest": "^3.2.4" } diff --git a/packages/plugin-rsc/examples/basic/package.json b/packages/plugin-rsc/examples/basic/package.json index f596e2b10..e12b60482 100644 --- a/packages/plugin-rsc/examples/basic/package.json +++ b/packages/plugin-rsc/examples/basic/package.json @@ -17,7 +17,7 @@ "react-dom": "^19.1.0" }, "devDependencies": { - "@tailwindcss/vite": "^4.1.4", + "@tailwindcss/vite": "^4.1.11", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "latest", @@ -26,9 +26,9 @@ "@vitejs/test-dep-server-in-client": "file:./test-dep/server-in-client", "@vitejs/test-dep-server-in-server": "file:./test-dep/server-in-server", "babel-plugin-react-compiler": "19.1.0-rc.2", - "tailwindcss": "^4.1.4", + "tailwindcss": "^4.1.11", "vite": "^7.0.2", - "vite-plugin-inspect": "^11.2.0", - "wrangler": "^4.22.0" + "vite-plugin-inspect": "^11.3.0", + "wrangler": "^4.23.0" } } diff --git a/packages/plugin-rsc/examples/react-router/package.json b/packages/plugin-rsc/examples/react-router/package.json index d7aa14935..77fa70034 100644 --- a/packages/plugin-rsc/examples/react-router/package.json +++ b/packages/plugin-rsc/examples/react-router/package.json @@ -19,16 +19,16 @@ "react-router": "0.0.0-experimental-23decd7bc" }, "devDependencies": { - "@cloudflare/vite-plugin": "^1.8.0", + "@cloudflare/vite-plugin": "^1.9.0", "@react-router/dev": "0.0.0-experimental-23decd7bc", "@tailwindcss/typography": "^0.5.16", - "@tailwindcss/vite": "^4.1.4", + "@tailwindcss/vite": "^4.1.11", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "latest", - "tailwindcss": "^4.1.4", + "tailwindcss": "^4.1.11", "vite": "^7.0.2", - "vite-plugin-inspect": "^11.2.0", - "wrangler": "^4.22.0" + "vite-plugin-inspect": "^11.3.0", + "wrangler": "^4.23.0" } } diff --git a/packages/plugin-rsc/examples/ssg/package.json b/packages/plugin-rsc/examples/ssg/package.json index a6ebe7f45..10a02275c 100644 --- a/packages/plugin-rsc/examples/ssg/package.json +++ b/packages/plugin-rsc/examples/ssg/package.json @@ -19,6 +19,6 @@ "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "latest", - "vite-plugin-inspect": "^11.2.0" + "vite-plugin-inspect": "^11.3.0" } } diff --git a/packages/plugin-rsc/examples/starter-cf-single/package.json b/packages/plugin-rsc/examples/starter-cf-single/package.json index 875fb1ad1..eac94a97c 100644 --- a/packages/plugin-rsc/examples/starter-cf-single/package.json +++ b/packages/plugin-rsc/examples/starter-cf-single/package.json @@ -16,7 +16,7 @@ "react-dom": "^19.1.0" }, "devDependencies": { - "@cloudflare/vite-plugin": "^1.8.0", + "@cloudflare/vite-plugin": "^1.9.0", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "latest" diff --git a/packages/plugin-rsc/examples/starter/package.json b/packages/plugin-rsc/examples/starter/package.json index 997c097d2..c9f7b75e7 100644 --- a/packages/plugin-rsc/examples/starter/package.json +++ b/packages/plugin-rsc/examples/starter/package.json @@ -19,6 +19,6 @@ "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "latest", "vite": "^7.0.2", - "vite-plugin-inspect": "^11.2.0" + "vite-plugin-inspect": "^11.3.0" } } diff --git a/packages/plugin-rsc/package.json b/packages/plugin-rsc/package.json index 79a0efa53..a0ddf3aa1 100644 --- a/packages/plugin-rsc/package.json +++ b/packages/plugin-rsc/package.json @@ -37,20 +37,20 @@ "build": "tsdown" }, "dependencies": { - "@mjackson/node-fetch-server": "^0.6.1", - "es-module-lexer": "^1.6.0", + "@mjackson/node-fetch-server": "^0.7.0", + "es-module-lexer": "^1.7.0", "estree-walker": "^3.0.3", "magic-string": "^0.30.17", "periscopic": "^4.0.2", "turbo-stream": "^3.1.0", - "vitefu": "^1.0.5" + "vitefu": "^1.1.1" }, "devDependencies": { "@hiogawa/utils": "^1.7.0", - "@playwright/test": "^1.53.1", + "@playwright/test": "^1.53.2", "@tsconfig/strictest": "^2.0.5", "@types/estree": "^1.0.8", - "@types/node": "^22.14.1", + "@types/node": "^22.16.0", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "workspace:*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4ce27d39a..673b2422a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -35,8 +35,8 @@ importers: specifier: ^4.16.1 version: 4.16.1(@typescript-eslint/utils@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2)) eslint-plugin-n: - specifier: ^17.20.0 - version: 17.20.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) + specifier: ^17.21.0 + version: 17.21.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) eslint-plugin-regexp: specifier: ^2.9.0 version: 2.9.0(eslint@9.30.1(jiti@2.4.2)) @@ -82,17 +82,17 @@ importers: packages/plugin-react: dependencies: '@babel/core': - specifier: ^7.27.7 - version: 7.27.7 + specifier: ^7.28.0 + version: 7.28.0 '@babel/plugin-transform-react-jsx-self': specifier: ^7.27.1 - version: 7.27.1(@babel/core@7.27.7) + version: 7.27.1(@babel/core@7.28.0) '@babel/plugin-transform-react-jsx-source': specifier: ^7.27.1 - version: 7.27.1(@babel/core@7.27.7) + version: 7.27.1(@babel/core@7.28.0) '@rolldown/pluginutils': - specifier: 1.0.0-beta.23 - version: 1.0.0-beta.23 + specifier: 1.0.0-beta.24 + version: 1.0.0-beta.24 '@types/babel__core': specifier: ^7.20.5 version: 7.20.5 @@ -113,8 +113,8 @@ importers: specifier: ^19.1.0 version: 19.1.0(react@19.1.0) rolldown: - specifier: 1.0.0-beta.23 - version: 1.0.0-beta.23 + specifier: 1.0.0-beta.24 + version: 1.0.0-beta.24 unbuild: specifier: ^3.5.0 version: 3.5.0(typescript@5.8.3) @@ -125,8 +125,8 @@ importers: packages/plugin-react-oxc: dependencies: '@rolldown/pluginutils': - specifier: 1.0.0-beta.23 - version: 1.0.0-beta.23 + specifier: 1.0.0-beta.24 + version: 1.0.0-beta.24 devDependencies: '@vitejs/react-common': specifier: workspace:* @@ -141,8 +141,8 @@ importers: packages/plugin-react-swc: dependencies: '@rolldown/pluginutils': - specifier: 1.0.0-beta.23 - version: 1.0.0-beta.23 + specifier: 1.0.0-beta.24 + version: 1.0.0-beta.24 '@swc/core': specifier: ^1.12.9 version: 1.12.9 @@ -445,10 +445,10 @@ importers: packages/plugin-rsc: dependencies: '@mjackson/node-fetch-server': - specifier: ^0.6.1 - version: 0.6.1 + specifier: ^0.7.0 + version: 0.7.0 es-module-lexer: - specifier: ^1.6.0 + specifier: ^1.7.0 version: 1.7.0 estree-walker: specifier: ^3.0.3 @@ -463,14 +463,14 @@ importers: specifier: ^3.1.0 version: 3.1.0 vitefu: - specifier: ^1.0.5 - version: 1.1.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + specifier: ^1.1.1 + version: 1.1.1(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) devDependencies: '@hiogawa/utils': specifier: ^1.7.0 version: 1.7.0 '@playwright/test': - specifier: ^1.53.1 + specifier: ^1.53.2 version: 1.53.2 '@tsconfig/strictest': specifier: ^2.0.5 @@ -479,7 +479,7 @@ importers: specifier: ^1.0.8 version: 1.0.8 '@types/node': - specifier: ^22.14.1 + specifier: ^22.16.0 version: 22.16.0 '@types/react': specifier: ^19.1.8 @@ -522,7 +522,7 @@ importers: version: 19.1.0(react@19.1.0) devDependencies: '@tailwindcss/vite': - specifier: ^4.1.4 + specifier: ^4.1.11 version: 4.1.11(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) '@types/react': specifier: ^19.1.8 @@ -549,16 +549,16 @@ importers: specifier: 19.1.0-rc.2 version: 19.1.0-rc.2 tailwindcss: - specifier: ^4.1.4 + specifier: ^4.1.11 version: 4.1.11 vite: specifier: ^7.0.2 version: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vite-plugin-inspect: - specifier: ^11.2.0 + specifier: ^11.3.0 version: 11.3.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) wrangler: - specifier: ^4.22.0 + specifier: ^4.23.0 version: 4.23.0 packages/plugin-rsc/examples/react-router: @@ -577,7 +577,7 @@ importers: version: 0.0.0-experimental-23decd7bc(react-dom@19.1.0(react@19.1.0))(react@19.1.0) devDependencies: '@cloudflare/vite-plugin': - specifier: ^1.8.0 + specifier: ^1.9.0 version: 1.9.0(rollup@4.44.1)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250617.0)(wrangler@4.23.0) '@react-router/dev': specifier: 0.0.0-experimental-23decd7bc @@ -586,7 +586,7 @@ importers: specifier: ^0.5.16 version: 0.5.16(tailwindcss@4.1.11) '@tailwindcss/vite': - specifier: ^4.1.4 + specifier: ^4.1.11 version: 4.1.11(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) '@types/react': specifier: ^19.1.8 @@ -598,16 +598,16 @@ importers: specifier: latest version: link:../../../plugin-react tailwindcss: - specifier: ^4.1.4 + specifier: ^4.1.11 version: 4.1.11 vite: specifier: ^7.0.2 version: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vite-plugin-inspect: - specifier: ^11.2.0 + specifier: ^11.3.0 version: 11.3.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) wrangler: - specifier: ^4.22.0 + specifier: ^4.23.0 version: 4.23.0 packages/plugin-rsc/examples/ssg: @@ -635,7 +635,7 @@ importers: specifier: latest version: link:../../../plugin-react vite-plugin-inspect: - specifier: ^11.2.0 + specifier: ^11.3.0 version: 11.3.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) packages/plugin-rsc/examples/starter: @@ -663,7 +663,7 @@ importers: specifier: ^7.0.2 version: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vite-plugin-inspect: - specifier: ^11.2.0 + specifier: ^11.3.0 version: 11.3.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) packages/plugin-rsc/examples/starter-cf-single: @@ -679,7 +679,7 @@ importers: version: 19.1.0(react@19.1.0) devDependencies: '@cloudflare/vite-plugin': - specifier: ^1.8.0 + specifier: ^1.9.0 version: 1.9.0(rollup@4.44.1)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250617.0)(wrangler@4.23.0) '@types/react': specifier: ^19.1.8 @@ -730,7 +730,7 @@ importers: devDependencies: '@babel/plugin-transform-react-jsx-development': specifier: ^7.27.1 - version: 7.27.1(@babel/core@7.27.7) + version: 7.27.1(@babel/core@7.28.0) '@types/react': specifier: ^19.1.8 version: 19.1.8 @@ -761,7 +761,7 @@ importers: devDependencies: '@babel/plugin-transform-react-jsx-development': specifier: ^7.27.1 - version: 7.27.1(@babel/core@7.27.7) + version: 7.27.1(@babel/core@7.28.0) '@types/react': specifier: ^18.3.20 version: 18.3.20 @@ -887,7 +887,7 @@ importers: devDependencies: '@babel/plugin-proposal-pipeline-operator': specifier: ^7.27.1 - version: 7.27.1(@babel/core@7.27.7) + version: 7.27.1(@babel/core@7.28.0) '@emotion/babel-plugin': specifier: ^11.13.5 version: 11.13.5 @@ -946,10 +946,6 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@babel/code-frame@7.26.2': - resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} - engines: {node: '>=6.9.0'} - '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} @@ -958,14 +954,18 @@ packages: resolution: {integrity: sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==} engines: {node: '>=6.9.0'} - '@babel/core@7.27.7': - resolution: {integrity: sha512-BU2f9tlKQ5CAthiMIgpzAh4eDTLWo1mqi9jqE2OxMG0E/OM199VJt2q8BztTxpnSW0i1ymdwLXRJnYzvDM5r2w==} + '@babel/core@7.28.0': + resolution: {integrity: sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==} engines: {node: '>=6.9.0'} '@babel/generator@7.27.5': resolution: {integrity: sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==} engines: {node: '>=6.9.0'} + '@babel/generator@7.28.0': + resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==} + engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.27.3': resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} engines: {node: '>=6.9.0'} @@ -980,6 +980,10 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + '@babel/helper-member-expression-to-functions@7.27.1': resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==} engines: {node: '>=6.9.0'} @@ -1050,13 +1054,13 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.27.5': - resolution: {integrity: sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==} + '@babel/parser@7.27.7': + resolution: {integrity: sha512-qnzXzDXdr/po3bOTbTIQZ7+TxNKxpkN5IifVLXS+r7qwynkZfPyjZfE7hCXbo7IoO9TNcSyibgONsf2HauUd3Q==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.27.7': - resolution: {integrity: sha512-qnzXzDXdr/po3bOTbTIQZ7+TxNKxpkN5IifVLXS+r7qwynkZfPyjZfE7hCXbo7IoO9TNcSyibgONsf2HauUd3Q==} + '@babel/parser@7.28.0': + resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} engines: {node: '>=6.0.0'} hasBin: true @@ -1140,14 +1144,14 @@ packages: resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.27.4': - resolution: {integrity: sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==} - engines: {node: '>=6.9.0'} - '@babel/traverse@7.27.7': resolution: {integrity: sha512-X6ZlfR/O/s5EQ/SnUSLzr+6kGnkg8HXGMzpgsMsrJVcfDtH1vIp6ctCN4eZ1LS5c0+te5Cb6Y514fASjMRJ1nw==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.28.0': + resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==} + engines: {node: '>=6.9.0'} + '@babel/types@7.26.0': resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} engines: {node: '>=6.9.0'} @@ -1156,14 +1160,14 @@ packages: resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==} engines: {node: '>=6.9.0'} - '@babel/types@7.27.6': - resolution: {integrity: sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==} - engines: {node: '>=6.9.0'} - '@babel/types@7.27.7': resolution: {integrity: sha512-8OLQgDScAOHXnAz2cV+RfzzNMipuLVBz2biuAJFMV9bfkNf393je3VM8CLkjQodW5+iWsSJdSgSWT6rsZoXHPw==} engines: {node: '>=6.9.0'} + '@babel/types@7.28.0': + resolution: {integrity: sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg==} + engines: {node: '>=6.9.0'} + '@cloudflare/kv-asset-handler@0.4.0': resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==} engines: {node: '>=18.0.0'} @@ -2086,6 +2090,9 @@ packages: resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} engines: {node: '>=18.0.0'} + '@jridgewell/gen-mapping@0.3.12': + resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} + '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} @@ -2104,6 +2111,9 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.29': + resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} + '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} @@ -2121,6 +2131,9 @@ packages: '@mjackson/node-fetch-server@0.6.1': resolution: {integrity: sha512-9ZJnk/DJjt805uv5PPv11haJIW+HHf3YEEyVXv+8iLQxLD/iXA68FH220XoiTPBC4gCg5q+IMadDw8qPqlA5wg==} + '@mjackson/node-fetch-server@0.7.0': + resolution: {integrity: sha512-un8diyEBKU3BTVj3GzlTPA1kIjCkGdD+AMYQy31Gf9JCkfoZzwgJ79GUtHrF2BN3XPNMLpubbzPcxys+a3uZEw==} + '@napi-rs/wasm-runtime@0.2.11': resolution: {integrity: sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==} @@ -2152,15 +2165,15 @@ packages: resolution: {integrity: sha512-YFvBzVQK/ix0RQxOI02ebCumehSHoiJgvb7nOU4o7xFoMnnujLdjmxnEBK/qiOQrEyXlY69gXGMEsKYVe+YZ3A==} engines: {node: '>=6.9.0'} - '@oxc-project/runtime@0.75.0': - resolution: {integrity: sha512-gzRmVI/vorsPmbDXt7GD4Uh2lD3rCOku/1xWPB4Yx48k0EP4TZmzQudWapjN4+7Vv+rgXr0RqCHQadeaMvdBuw==} + '@oxc-project/runtime@0.75.1': + resolution: {integrity: sha512-UH07DRi7xXqAsJ/sFbJJg0liIXnapB6P5uADXIiF1s6WQjZzcTIkKHca0s522QVxmijPxVX5ijCYxSr7eSq5CQ==} engines: {node: '>=6.9.0'} '@oxc-project/types@0.73.0': resolution: {integrity: sha512-ZQS7dpsga43R7bjqRKHRhOeNpuIBeLBnlS3M6H3IqWIWiapGOQIxp4lpETLBYupkSd4dh85ESFn6vAvtpPdGkA==} - '@oxc-project/types@0.75.0': - resolution: {integrity: sha512-QMW+06WOXs7+F301Y3X0VpmWhwuQVc/X/RP2zF9OIwvSMmsif3xURS2wxbakFIABYsytgBcHpUcFepVS0Qnd3A==} + '@oxc-project/types@0.75.1': + resolution: {integrity: sha512-7ZJy+51qWpZRvynaQUezeYfjCtaSdiXIWFUZIlOuTSfDXpXqnSl/m1IUPLx6XrOy6s0SFv3CLE14vcZy63bz7g==} '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} @@ -2215,8 +2228,8 @@ packages: cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-arm64@1.0.0-beta.23': - resolution: {integrity: sha512-rppgXFU4+dNDPQvPsfovUuYfDgMoATDomKGjIRR5bIU98BYkQF1fm+87trApilfWSosLQP9JsXOoUJO/EMrspQ==} + '@rolldown/binding-darwin-arm64@1.0.0-beta.24': + resolution: {integrity: sha512-gE4HGjIioZaMGZupq2zQQdqhlRV2b2qnjFHHkJEW50zVDmiVNWwdHjwvZDPx9JfW5y4GuHgp/zKDLZZbJlQ1/Q==} cpu: [arm64] os: [darwin] @@ -2225,8 +2238,8 @@ packages: cpu: [x64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-beta.23': - resolution: {integrity: sha512-aFo1v7GKysuwSAfsyNcBb9mj3M+wxMCu3N+DcTD5eAaz3mFex6l+2b/vLGaTWNrCMoWhRxV8rTaI1eFoMVdSuQ==} + '@rolldown/binding-darwin-x64@1.0.0-beta.24': + resolution: {integrity: sha512-h2HfOtqmjIHIz9WdpKAJ8sBfLNGkrMlwrCfNV2MDDGu0x3YdYBYPE+ozS5PvE53Tp8y6EYn2/thNWJTGWy/N3Q==} cpu: [x64] os: [darwin] @@ -2235,8 +2248,8 @@ packages: cpu: [x64] os: [freebsd] - '@rolldown/binding-freebsd-x64@1.0.0-beta.23': - resolution: {integrity: sha512-/NzbXIFIR5KR+fZ351K1qONekakXpiPhUX55ydP6ok8iKdG7bTbgs6dlMg7Ow0E2DKlQoTbZbPTUY3kTzmNrsQ==} + '@rolldown/binding-freebsd-x64@1.0.0-beta.24': + resolution: {integrity: sha512-lx3Q2TU2bbY4yDCZ6e+Wiom3VMLFlZmQswx/1CyjFd+Vv3Q+99SZm6CSfNAIZBaWD246yQRRr1Vx+iIoWCdYzQ==} cpu: [x64] os: [freebsd] @@ -2245,8 +2258,8 @@ packages: cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.23': - resolution: {integrity: sha512-vPnCHxjyR4ZVj9x6sLJMCAdBY99RPe6Mnwxb5BSaE6ccHzvy015xtsIEG7H9E9pVj3yfI/om77jrP+YA5IqL3w==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.24': + resolution: {integrity: sha512-PLtsV6uf3uS1/cNF8Wu/kitTpXT2YpOZbN6VJm7oMi5A8o5oO0vh8STCB71O5k2kwQMVycsmxHWFk2ZyEa6aMw==} cpu: [arm] os: [linux] @@ -2255,8 +2268,8 @@ packages: cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.23': - resolution: {integrity: sha512-PFBBnj9JqLOL8gjZtoVGfOXe0PSpnPUXE+JuMcWz568K/p4Zzk7lDDHl7guD95wVtV89TmfaRwK2PWd9vKxHtg==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.24': + resolution: {integrity: sha512-UxGukDkWnv7uS5R+BPVeJ4FSuwA+lgC62LRsyPPSJhJhKMNGZ2W9sQPIpEtBRlww8t0qR6QBsiD5TGLW98ktGw==} cpu: [arm64] os: [linux] @@ -2265,8 +2278,8 @@ packages: cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.23': - resolution: {integrity: sha512-KyQRLofVP78yUCXT90YmEzxK6I9VCBeOTSyOrs40Qx0Q0XwaGVwxo7sKj2SmnqxribdcouBA3CfNZC4ZNcyEnQ==} + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.24': + resolution: {integrity: sha512-vB99yGYW9FOQe4lk3MNKa13+vRj+7waZFlRE3Ba/IpEy7RFxZ78ASkPLXkz4+kYYbUvMnRaOfk9RKX2fqYZRUg==} cpu: [arm64] os: [linux] @@ -2275,8 +2288,8 @@ packages: cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.23': - resolution: {integrity: sha512-EubfEsJyjQbKK9j3Ez1hhbIOsttABb07Z7PhMRcVYW0wrVr8SfKLew9pULIMfcSNnoz8QqzoI4lOSmezJ9bYWw==} + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.24': + resolution: {integrity: sha512-fAMZBWutuKWHsyvHVsKjFYRXVgTbzBfNmomzPPpog8UtdkHk5Vnb0qVEeZP4hR4TsXnKfzD2EQ98NRqFej5QYA==} cpu: [x64] os: [linux] @@ -2285,8 +2298,8 @@ packages: cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-musl@1.0.0-beta.23': - resolution: {integrity: sha512-MUAthvl3I/+hySltZuj5ClKiq8fAMqExeBnxadLFShwWCbdHKFd+aRjBxxzarPcnqbDlTaOCUaAaYmQTOTOHSg==} + '@rolldown/binding-linux-x64-musl@1.0.0-beta.24': + resolution: {integrity: sha512-0UY/Qo8fAlpolcWOg2ZU7SCUrsCJWifdRMliV9GXlZaBKbMoVNFw0pHGDm9cj/3TWhJu/iB0peZK00dm22LlNw==} cpu: [x64] os: [linux] @@ -2295,8 +2308,8 @@ packages: engines: {node: '>=14.21.3'} cpu: [wasm32] - '@rolldown/binding-wasm32-wasi@1.0.0-beta.23': - resolution: {integrity: sha512-YI7QMQU01QFVNTEaQt3ysrq+wGBwLdFVFEGO64CoZ3gTsr/HulU8gvgR+67coQOlQC9iO/Hm1bvkBtceLxKrnA==} + '@rolldown/binding-wasm32-wasi@1.0.0-beta.24': + resolution: {integrity: sha512-7ubbtKCo6FBuAM4q6LoT5dOea7f/zj9OYXgumbwSmA0fw18mN5h8SrFTUjl7h9MpPkOyhi2uY6ss4pb39KXkcw==} engines: {node: '>=14.21.3'} cpu: [wasm32] @@ -2305,8 +2318,8 @@ packages: cpu: [arm64] os: [win32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.23': - resolution: {integrity: sha512-JdHx6Hli53etB/QsZL1tjpf4qa87kNcwPdx4iVicP/kL7po6k5bHoS5/l/nRRccwPh7BlPlB2uoEuTwJygJosQ==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.24': + resolution: {integrity: sha512-S5WKIabtRBJyzu31KnJRlbZRR6FMrTMzYRrNTnIY2hWWXfpcB1PNuHqbo+98ODLpH8knul4Vyf5sCL61okLTjA==} cpu: [arm64] os: [win32] @@ -2315,8 +2328,8 @@ packages: cpu: [ia32] os: [win32] - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.23': - resolution: {integrity: sha512-rMZ0QBmcDND97+5unXxquKvSudV8tz6S7tBY3gOYlqMFEDIRX0BAgxaqQBQbq34ZxB9bXwGdjuau3LZHGreB6g==} + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.24': + resolution: {integrity: sha512-5EW8mzHoukz3zBn/VAaTapK+i+/ZFbSSP9meDmLSuGnk6La8uLAPc7E+6S3gbJnQ6k8lSC6ipIIeXC4SPdttKQ==} cpu: [ia32] os: [win32] @@ -2325,16 +2338,16 @@ packages: cpu: [x64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.23': - resolution: {integrity: sha512-0PqE7vGIpA+XT+qxAYJQKTrB5zz8vJiuCOInfY/ks/QOs6ZZ9Os8bdNkcpCy4rYo+GMZn0Q8CwyPu4uexWB1aA==} + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.24': + resolution: {integrity: sha512-KpurHt8+B0yTg9gHroC3H/Tf2c9VfjIBsC/wVHTf7GGAe+xkw1+5iYB3Y5iSy3OaMTGq1U3/YEvTqqBdSbDMUg==} cpu: [x64] os: [win32] '@rolldown/pluginutils@1.0.0-beta.16': resolution: {integrity: sha512-w3f87JpF7lgIlK03I0R3XidspFgB4MsixE5o/VjBMJI+Ki4XW/Ffrykmj2AUCbVxhRD7Pi9W0Qu2XapJhB2mSA==} - '@rolldown/pluginutils@1.0.0-beta.23': - resolution: {integrity: sha512-lLCP4LUecUGBLq8EfkbY2esGYyvZj5ee+WZG12+mVnQH48b46SVbwp+0vJkD+6Pnsc+u9SWarBV9sQ5mVwmb5g==} + '@rolldown/pluginutils@1.0.0-beta.24': + resolution: {integrity: sha512-NMiim/enJlffMP16IanVj1ajFNEg8SaMEYyxyYfJoEyt5EiFT3HUH/T2GRdeStNWp+/kg5U8DiJqnQBgLQ8uCw==} '@rollup/plugin-alias@5.1.1': resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} @@ -2908,32 +2921,16 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/project-service@8.33.1': - resolution: {integrity: sha512-DZR0efeNklDIHHGRpMpR5gJITQpu6tLr9lDJnKdONTC7vvzOlLAG/wcfxcdxEWrbiZApcoBCzXqU/Z458Za5Iw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/project-service@8.35.1': resolution: {integrity: sha512-VYxn/5LOpVxADAuP3NrnxxHYfzVtQzLKeldIhDhzC8UHaiQvYlXvKuVho1qLduFbJjjy5U5bkGwa3rUGUb1Q6Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/scope-manager@8.33.1': - resolution: {integrity: sha512-dM4UBtgmzHR9bS0Rv09JST0RcHYearoEoo3pG5B6GoTR9XcyeqX87FEhPo+5kTvVfKCvfHaHrcgeJQc6mrDKrA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.35.1': resolution: {integrity: sha512-s/Bpd4i7ht2934nG+UoSPlYXd08KYz3bmjLEb7Ye1UVob0d1ENiT3lY8bsCmik4RqfSbPw9xJJHbugpPpP5JUg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.33.1': - resolution: {integrity: sha512-STAQsGYbHCF0/e+ShUQ4EatXQ7ceh3fBCXkNU7/MZVKulrlq1usH7t2FhxvCpuCi5O5oi1vmVaAjrGeL71OK1g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/tsconfig-utils@8.35.1': resolution: {integrity: sha512-K5/U9VmT9dTHoNowWZpz+/TObS3xqC5h0xAIjXPw+MNcKV9qg6eSatEnmeAwkjHijhACH0/N7bkhKvbt1+DXWQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2947,37 +2944,16 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/types@8.33.1': - resolution: {integrity: sha512-xid1WfizGhy/TKMTwhtVOgalHwPtV8T32MS9MaH50Cwvz6x6YqRIPdD2WvW0XaqOzTV9p5xdLY0h/ZusU5Lokg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/types@8.34.1': - resolution: {integrity: sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.35.1': resolution: {integrity: sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.33.1': - resolution: {integrity: sha512-+s9LYcT8LWjdYWu7IWs7FvUxpQ/DGkdjZeE/GGulHvv8rvYwQvVaUZ6DE+j5x/prADUgSbbCWZ2nPI3usuVeOA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/typescript-estree@8.35.1': resolution: {integrity: sha512-Vvpuvj4tBxIka7cPs6Y1uvM7gJgdF5Uu9F+mBJBPY4MhvjrjWGK4H0lVgLJd/8PWZ23FTqsaJaLEkBCFUk8Y9g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.33.1': - resolution: {integrity: sha512-52HaBiEQUaRYqAXpfzWSR2U3gxk92Kw006+xZpElaPMg3C4PgM+A5LqwoQI1f9E5aZ/qlxAZxzm42WX+vn92SQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.35.1': resolution: {integrity: sha512-lhnwatFmOFcazAsUm3ZnZFpXSxiwoa1Lj50HphnDe1Et01NF4+hrdXONSUHIcbVu2eFb1bAf+5yjXkGVkXBKAQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2985,10 +2961,6 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/visitor-keys@8.33.1': - resolution: {integrity: sha512-3i8NrFcZeeDHJ+7ZUuDkGT+UHq+XoFGsymNK2jZCOHcfEzRQ0BdpRtdpSx/Iyf3MHLWIcLS0COuOPibKQboIiQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.35.1': resolution: {integrity: sha512-VRwixir4zBWCSTP/ljEo091lbpypz57PoeAQ9imjG+vbeof9LplljsL1mos4ccG6H9IjfrVGM359RozUnuFhpw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3630,10 +3602,6 @@ packages: resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} engines: {node: '>=14'} - enhanced-resolve@5.17.1: - resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} - engines: {node: '>=10.13.0'} - enhanced-resolve@5.18.2: resolution: {integrity: sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==} engines: {node: '>=10.13.0'} @@ -3720,8 +3688,8 @@ packages: eslint-import-resolver-node: optional: true - eslint-plugin-n@17.20.0: - resolution: {integrity: sha512-IRSoatgB/NQJZG5EeTbv/iAx1byOGdbbyhQrNvWdCfTnmPxUT0ao9/eGOeG7ljD8wJBsxwE8f6tES5Db0FRKEw==} + eslint-plugin-n@17.21.0: + resolution: {integrity: sha512-1+iZ8We4ZlwVMtb/DcHG3y5/bZOdazIpa/4TySo22MLKdwrLcfrX0hbadnCvykSQCCmkAnWmIP8jZVb2AAq29A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=8.23.0' @@ -5197,8 +5165,8 @@ packages: resolution: {integrity: sha512-ruNh01VbnTJsW0kgYywrQ80FUY0yJvXqavPVljGg0dRiwggYB7yXlypw1ptkFiomkEOnOGiwncjiviUakgPHxg==} hasBin: true - rolldown@1.0.0-beta.23: - resolution: {integrity: sha512-+/TR2YSZxLTtDAfG9LHlYqsHO6jtvr9qxaRD77E+PCAQi5X47bJkgiZsjDmE1jGR19NfYegWToOvSe6E+8NfwA==} + rolldown@1.0.0-beta.24: + resolution: {integrity: sha512-eDyipoOnoHQ5p6INkJ8g31eKGlqPSCAN9PapyOTw5HET4FYIWALZnSgpMZ67mdn+xT3jAsqGidNnBcIM6EAUhA==} hasBin: true rollup-plugin-dts@6.2.1: @@ -5249,11 +5217,6 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.7.1: - resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} - engines: {node: '>=10'} - hasBin: true - semver@7.7.2: resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} engines: {node: '>=10'} @@ -5760,8 +5723,8 @@ packages: yaml: optional: true - vitefu@1.1.0: - resolution: {integrity: sha512-AiG/L9DVsEYHWQ9jAEnke0nKiASlPw+JYwDl6Z4l6a6/IqT1tKseEl6R5+rVnKJt/K3jCTWiQvgoIh5MuqBJJQ==} + vitefu@1.1.1: + resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==} peerDependencies: vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0 peerDependenciesMeta: @@ -5905,13 +5868,6 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@babel/code-frame@7.26.2': - dependencies: - '@babel/helper-validator-identifier': 7.25.9 - js-tokens: 4.0.0 - picocolors: 1.1.1 - optional: true - '@babel/code-frame@7.27.1': dependencies: '@babel/helper-validator-identifier': 7.27.1 @@ -5920,18 +5876,18 @@ snapshots: '@babel/compat-data@7.27.5': {} - '@babel/core@7.27.7': + '@babel/core@7.28.0': dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.27.1 - '@babel/generator': 7.27.5 + '@babel/generator': 7.28.0 '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.7) + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0) '@babel/helpers': 7.27.6 - '@babel/parser': 7.27.7 + '@babel/parser': 7.28.0 '@babel/template': 7.27.2 - '@babel/traverse': 7.27.7 - '@babel/types': 7.27.7 + '@babel/traverse': 7.28.0 + '@babel/types': 7.28.0 convert-source-map: 2.0.0 debug: 4.4.1 gensync: 1.0.0-beta.2 @@ -5948,9 +5904,17 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.0.2 + '@babel/generator@7.28.0': + dependencies: + '@babel/parser': 7.28.0 + '@babel/types': 7.28.0 + '@jridgewell/gen-mapping': 0.3.12 + '@jridgewell/trace-mapping': 0.3.29 + jsesc: 3.0.2 + '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.27.6 + '@babel/types': 7.27.7 '@babel/helper-compilation-targets@7.27.2': dependencies: @@ -5960,19 +5924,21 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.27.7)': + '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.28.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.28.0 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.7) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.0) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 '@babel/traverse': 7.27.7 semver: 6.3.1 transitivePeerDependencies: - supports-color + '@babel/helper-globals@7.28.0': {} + '@babel/helper-member-expression-to-functions@7.27.1': dependencies: '@babel/traverse': 7.27.7 @@ -5982,24 +5948,24 @@ snapshots: '@babel/helper-module-imports@7.25.9': dependencies: - '@babel/traverse': 7.27.4 - '@babel/types': 7.27.6 + '@babel/traverse': 7.27.7 + '@babel/types': 7.27.7 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.27.1': dependencies: - '@babel/traverse': 7.27.7 - '@babel/types': 7.27.7 + '@babel/traverse': 7.28.0 + '@babel/types': 7.28.0 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.27.3(@babel/core@7.27.7)': + '@babel/helper-module-transforms@7.27.3(@babel/core@7.28.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.28.0 '@babel/helper-module-imports': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.27.7 + '@babel/traverse': 7.28.0 transitivePeerDependencies: - supports-color @@ -6009,9 +5975,9 @@ snapshots: '@babel/helper-plugin-utils@7.27.1': {} - '@babel/helper-replace-supers@7.27.1(@babel/core@7.27.7)': + '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.28.0 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 '@babel/traverse': 7.27.7 @@ -6038,7 +6004,7 @@ snapshots: '@babel/helpers@7.27.6': dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.27.7 + '@babel/types': 7.28.0 '@babel/parser@7.26.2': dependencies: @@ -6046,97 +6012,97 @@ snapshots: '@babel/parser@7.27.0': dependencies: - '@babel/types': 7.27.6 - - '@babel/parser@7.27.5': - dependencies: - '@babel/types': 7.27.6 + '@babel/types': 7.27.7 '@babel/parser@7.27.7': dependencies: '@babel/types': 7.27.7 - '@babel/plugin-proposal-pipeline-operator@7.27.1(@babel/core@7.27.7)': + '@babel/parser@7.28.0': + dependencies: + '@babel/types': 7.28.0 + + '@babel/plugin-proposal-pipeline-operator@7.27.1(@babel/core@7.28.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.28.0 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-pipeline-operator': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-syntax-pipeline-operator': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-syntax-decorators@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-syntax-decorators@7.27.1(@babel/core@7.28.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.28.0 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.28.0 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-pipeline-operator@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-syntax-pipeline-operator@7.27.1(@babel/core@7.28.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.28.0 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.28.0 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.0)': dependencies: - '@babel/core': 7.27.7 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.7) + '@babel/core': 7.28.0 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.28.0)': dependencies: - '@babel/core': 7.27.7 - '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.27.7) + '@babel/core': 7.28.0 + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.28.0 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.28.0 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.28.0 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.7) - '@babel/types': 7.27.6 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0) + '@babel/types': 7.27.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-typescript@7.28.0(@babel/core@7.27.7)': + '@babel/plugin-transform-typescript@7.28.0(@babel/core@7.28.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.28.0 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.0) '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.0) transitivePeerDependencies: - supports-color - '@babel/preset-typescript@7.27.1(@babel/core@7.27.7)': + '@babel/preset-typescript@7.27.1(@babel/core@7.28.0)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.28.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.27.7) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.0) transitivePeerDependencies: - supports-color @@ -6147,30 +6113,30 @@ snapshots: '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.27.7 - '@babel/types': 7.27.7 + '@babel/parser': 7.28.0 + '@babel/types': 7.28.0 - '@babel/traverse@7.27.4': + '@babel/traverse@7.27.7': dependencies: '@babel/code-frame': 7.27.1 '@babel/generator': 7.27.5 - '@babel/parser': 7.27.5 + '@babel/parser': 7.27.7 '@babel/template': 7.27.2 - '@babel/types': 7.27.6 + '@babel/types': 7.27.7 debug: 4.4.1 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/traverse@7.27.7': + '@babel/traverse@7.28.0': dependencies: '@babel/code-frame': 7.27.1 - '@babel/generator': 7.27.5 - '@babel/parser': 7.27.7 + '@babel/generator': 7.28.0 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.0 '@babel/template': 7.27.2 - '@babel/types': 7.27.7 + '@babel/types': 7.28.0 debug: 4.4.1 - globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -6184,12 +6150,12 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@babel/types@7.27.6': + '@babel/types@7.27.7': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/types@7.27.7': + '@babel/types@7.28.0': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 @@ -6817,6 +6783,11 @@ snapshots: dependencies: minipass: 7.1.2 + '@jridgewell/gen-mapping@0.3.12': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 @@ -6834,6 +6805,11 @@ snapshots: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping@0.3.29': + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.1 @@ -6881,6 +6857,8 @@ snapshots: '@mjackson/node-fetch-server@0.6.1': {} + '@mjackson/node-fetch-server@0.7.0': {} + '@napi-rs/wasm-runtime@0.2.11': dependencies: '@emnapi/core': 1.4.3 @@ -6931,11 +6909,11 @@ snapshots: '@oxc-project/runtime@0.73.0': {} - '@oxc-project/runtime@0.75.0': {} + '@oxc-project/runtime@0.75.1': {} '@oxc-project/types@0.73.0': {} - '@oxc-project/types@0.75.0': {} + '@oxc-project/types@0.75.1': {} '@pkgjs/parseargs@0.11.0': optional: true @@ -6954,12 +6932,12 @@ snapshots: '@react-router/dev@0.0.0-experimental-23decd7bc(@types/node@22.16.0)(babel-plugin-macros@3.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(react-router@0.0.0-experimental-23decd7bc(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tsx@4.20.3)(typescript@5.8.3)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(wrangler@4.23.0)(yaml@2.7.1)': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.28.0 '@babel/generator': 7.27.5 '@babel/parser': 7.27.7 - '@babel/plugin-syntax-decorators': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.7) - '@babel/preset-typescript': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-syntax-decorators': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0) + '@babel/preset-typescript': 7.27.1(@babel/core@7.28.0) '@babel/traverse': 7.27.7 '@babel/types': 7.27.7 '@npmcli/package-json': 4.0.1 @@ -7012,49 +6990,49 @@ snapshots: '@rolldown/binding-darwin-arm64@1.0.0-beta.16': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-beta.23': + '@rolldown/binding-darwin-arm64@1.0.0-beta.24': optional: true '@rolldown/binding-darwin-x64@1.0.0-beta.16': optional: true - '@rolldown/binding-darwin-x64@1.0.0-beta.23': + '@rolldown/binding-darwin-x64@1.0.0-beta.24': optional: true '@rolldown/binding-freebsd-x64@1.0.0-beta.16': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-beta.23': + '@rolldown/binding-freebsd-x64@1.0.0-beta.24': optional: true '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.16': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.23': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.24': optional: true '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.16': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.23': + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.24': optional: true '@rolldown/binding-linux-arm64-musl@1.0.0-beta.16': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.23': + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.24': optional: true '@rolldown/binding-linux-x64-gnu@1.0.0-beta.16': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.23': + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.24': optional: true '@rolldown/binding-linux-x64-musl@1.0.0-beta.16': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-beta.23': + '@rolldown/binding-linux-x64-musl@1.0.0-beta.24': optional: true '@rolldown/binding-wasm32-wasi@1.0.0-beta.16': @@ -7062,7 +7040,7 @@ snapshots: '@napi-rs/wasm-runtime': 0.2.11 optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-beta.23': + '@rolldown/binding-wasm32-wasi@1.0.0-beta.24': dependencies: '@napi-rs/wasm-runtime': 0.2.11 optional: true @@ -7070,24 +7048,24 @@ snapshots: '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.16': optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.23': + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.24': optional: true '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.16': optional: true - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.23': + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.24': optional: true '@rolldown/binding-win32-x64-msvc@1.0.0-beta.16': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.23': + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.24': optional: true '@rolldown/pluginutils@1.0.0-beta.16': {} - '@rolldown/pluginutils@1.0.0-beta.23': {} + '@rolldown/pluginutils@1.0.0-beta.24': {} '@rollup/plugin-alias@5.1.1(rollup@4.37.0)': optionalDependencies: @@ -7577,15 +7555,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.33.1(typescript@5.8.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.33.1(typescript@5.8.3) - '@typescript-eslint/types': 8.34.1 - debug: 4.4.1 - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/project-service@8.35.1(typescript@5.8.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.35.1(typescript@5.8.3) @@ -7595,20 +7564,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.33.1': - dependencies: - '@typescript-eslint/types': 8.33.1 - '@typescript-eslint/visitor-keys': 8.33.1 - '@typescript-eslint/scope-manager@8.35.1': dependencies: '@typescript-eslint/types': 8.35.1 '@typescript-eslint/visitor-keys': 8.35.1 - '@typescript-eslint/tsconfig-utils@8.33.1(typescript@5.8.3)': - dependencies: - typescript: 5.8.3 - '@typescript-eslint/tsconfig-utils@8.35.1(typescript@5.8.3)': dependencies: typescript: 5.8.3 @@ -7624,28 +7584,8 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.33.1': {} - - '@typescript-eslint/types@8.34.1': {} - '@typescript-eslint/types@8.35.1': {} - '@typescript-eslint/typescript-estree@8.33.1(typescript@5.8.3)': - dependencies: - '@typescript-eslint/project-service': 8.33.1(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.33.1(typescript@5.8.3) - '@typescript-eslint/types': 8.33.1 - '@typescript-eslint/visitor-keys': 8.33.1 - debug: 4.4.1 - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/typescript-estree@8.35.1(typescript@5.8.3)': dependencies: '@typescript-eslint/project-service': 8.35.1(typescript@5.8.3) @@ -7662,17 +7602,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.33.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)': - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.33.1 - '@typescript-eslint/types': 8.33.1 - '@typescript-eslint/typescript-estree': 8.33.1(typescript@5.8.3) - eslint: 9.30.1(jiti@2.4.2) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/utils@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2)) @@ -7684,11 +7613,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.33.1': - dependencies: - '@typescript-eslint/types': 8.33.1 - eslint-visitor-keys: 4.2.1 - '@typescript-eslint/visitor-keys@8.35.1': dependencies: '@typescript-eslint/types': 8.35.1 @@ -7896,7 +7820,7 @@ snapshots: babel-dead-code-elimination@1.0.10: dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.28.0 '@babel/parser': 7.27.7 '@babel/traverse': 7.27.7 '@babel/types': 7.27.7 @@ -8276,11 +8200,6 @@ snapshots: empathic@2.0.0: {} - enhanced-resolve@5.17.1: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - enhanced-resolve@5.18.2: dependencies: graceful-fs: 4.2.11 @@ -8452,11 +8371,10 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-n@17.20.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3): + eslint-plugin-n@17.21.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3): dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2)) - '@typescript-eslint/utils': 8.33.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) - enhanced-resolve: 5.17.1 + enhanced-resolve: 5.18.2 eslint: 9.30.1(jiti@2.4.2) eslint-plugin-es-x: 7.8.0(eslint@9.30.1(jiti@2.4.2)) get-tsconfig: 4.10.1 @@ -8466,7 +8384,6 @@ snapshots: semver: 7.7.2 ts-declaration-location: 1.0.7(typescript@5.8.3) transitivePeerDependencies: - - supports-color - typescript eslint-plugin-regexp@2.9.0(eslint@9.30.1(jiti@2.4.2)): @@ -9466,7 +9383,7 @@ snapshots: pkg-types: 1.3.1 postcss: 8.5.3 postcss-nested: 7.0.2(postcss@8.5.3) - semver: 7.7.1 + semver: 7.7.2 tinyglobby: 0.2.12 optionalDependencies: typescript: 5.8.3 @@ -10035,7 +9952,7 @@ snapshots: rfdc@1.4.1: {} - rolldown-plugin-dts@0.13.13(rolldown@1.0.0-beta.23)(typescript@5.8.3): + rolldown-plugin-dts@0.13.13(rolldown@1.0.0-beta.24)(typescript@5.8.3): dependencies: '@babel/generator': 7.27.5 '@babel/parser': 7.27.7 @@ -10045,7 +9962,7 @@ snapshots: debug: 4.4.1 dts-resolver: 2.1.1 get-tsconfig: 4.10.1 - rolldown: 1.0.0-beta.23 + rolldown: 1.0.0-beta.24 optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -10089,25 +10006,25 @@ snapshots: '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.16 '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.16 - rolldown@1.0.0-beta.23: + rolldown@1.0.0-beta.24: dependencies: - '@oxc-project/runtime': 0.75.0 - '@oxc-project/types': 0.75.0 - '@rolldown/pluginutils': 1.0.0-beta.23 + '@oxc-project/runtime': 0.75.1 + '@oxc-project/types': 0.75.1 + '@rolldown/pluginutils': 1.0.0-beta.24 ansis: 4.1.0 optionalDependencies: - '@rolldown/binding-darwin-arm64': 1.0.0-beta.23 - '@rolldown/binding-darwin-x64': 1.0.0-beta.23 - '@rolldown/binding-freebsd-x64': 1.0.0-beta.23 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.23 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.23 - '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.23 - '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.23 - '@rolldown/binding-linux-x64-musl': 1.0.0-beta.23 - '@rolldown/binding-wasm32-wasi': 1.0.0-beta.23 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.23 - '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.23 - '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.23 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.24 + '@rolldown/binding-darwin-x64': 1.0.0-beta.24 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.24 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.24 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.24 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.24 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.24 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.24 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.24 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.24 + '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.24 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.24 rollup-plugin-dts@6.2.1(rollup@4.37.0)(typescript@5.8.3): dependencies: @@ -10115,7 +10032,7 @@ snapshots: rollup: 4.37.0 typescript: 5.8.3 optionalDependencies: - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.27.1 rollup@4.37.0: dependencies: @@ -10197,8 +10114,6 @@ snapshots: semver@6.3.1: {} - semver@7.7.1: {} - semver@7.7.2: {} set-cookie-parser@2.7.1: {} @@ -10208,7 +10123,7 @@ snapshots: sharp@0.33.5: dependencies: color: 4.2.3 - detect-libc: 2.0.3 + detect-libc: 2.0.4 semver: 7.7.2 optionalDependencies: '@img/sharp-darwin-arm64': 0.33.5 @@ -10456,8 +10371,8 @@ snapshots: diff: 8.0.2 empathic: 2.0.0 hookable: 5.5.3 - rolldown: 1.0.0-beta.23 - rolldown-plugin-dts: 0.13.13(rolldown@1.0.0-beta.23)(typescript@5.8.3) + rolldown: 1.0.0-beta.24 + rolldown-plugin-dts: 0.13.13(rolldown@1.0.0-beta.24)(typescript@5.8.3) semver: 7.7.2 tinyexec: 1.0.1 tinyglobby: 0.2.14 @@ -10755,7 +10670,7 @@ snapshots: tsx: 4.20.3 yaml: 2.7.1 - vitefu@1.1.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + vitefu@1.1.1(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): optionalDependencies: vite: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) From de4ce3e33e5c1aeeab9304590a63a3b6b2b34a9f Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 7 Jul 2025 11:40:18 +0900 Subject: [PATCH 066/313] release: plugin-rsc@0.4.10 --- packages/plugin-rsc/CHANGELOG.md | 23 +++++++++++++++++++++++ packages/plugin-rsc/package.json | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/packages/plugin-rsc/CHANGELOG.md b/packages/plugin-rsc/CHANGELOG.md index 88290a611..852af5ea3 100644 --- a/packages/plugin-rsc/CHANGELOG.md +++ b/packages/plugin-rsc/CHANGELOG.md @@ -1,3 +1,26 @@ +## 0.4.10 (2025-07-07) +### Features + +* add `@vitejs/plugin-rsc` ([#521](https://github.com/vitejs/vite-plugin-react/issues/521)) ([0318334](https://github.com/vitejs/vite-plugin-react/commit/03183346630c73fa58ca4d403785a36913535bb6)) + +### Bug Fixes + +* **deps:** update all non-major dependencies ([#540](https://github.com/vitejs/vite-plugin-react/issues/540)) ([cfe2912](https://github.com/vitejs/vite-plugin-react/commit/cfe29122a8eec6c1e2ed9999531237dbce140e60)) +* return `Plugin[]` instead of `PluginOption[]` ([#537](https://github.com/vitejs/vite-plugin-react/issues/537)) ([11f56d6](https://github.com/vitejs/vite-plugin-react/commit/11f56d63a9ed082137732211db556c784cadb523)) + +### Miscellaneous Chores + +* **rsc:** fix example deps ([#534](https://github.com/vitejs/vite-plugin-react/issues/534)) ([a7d32a0](https://github.com/vitejs/vite-plugin-react/commit/a7d32a0a1c383964b67fa01c1f5959446759f02d)) +* **rsc:** fix links ([#530](https://github.com/vitejs/vite-plugin-react/issues/530)) ([feb762f](https://github.com/vitejs/vite-plugin-react/commit/feb762f291cf6460281e64820374bf288485c4a3)) +* **rsc:** remove `examples/hono` ([#533](https://github.com/vitejs/vite-plugin-react/issues/533)) ([46df0fd](https://github.com/vitejs/vite-plugin-react/commit/46df0fd6274365168259a67bc63ea1e689eb9681)) + +### Tests + +* **rsc:** check hydration mismatch ([#526](https://github.com/vitejs/vite-plugin-react/issues/526)) ([ce84449](https://github.com/vitejs/vite-plugin-react/commit/ce84449c87a8834ffafcf0b3f2fc63ad464b921d)) +* **rsc:** fix flaky server restart test ([#535](https://github.com/vitejs/vite-plugin-react/issues/535)) ([079feaf](https://github.com/vitejs/vite-plugin-react/commit/079feaf1ac2b06a704efc0c7ef6d6a0276207d53)) +* **rsc:** test browser only component ([#528](https://github.com/vitejs/vite-plugin-react/issues/528)) ([795303e](https://github.com/vitejs/vite-plugin-react/commit/795303efe78fed2cff2237c6d6d066d76c284ced)) +* **rsc:** test react compiler ([#529](https://github.com/vitejs/vite-plugin-react/issues/529)) ([2966af5](https://github.com/vitejs/vite-plugin-react/commit/2966af52393514e0c23d3236afccba699b042322)) + # Changelog ## v0.4.10 (2025-07-04) diff --git a/packages/plugin-rsc/package.json b/packages/plugin-rsc/package.json index a0ddf3aa1..13cdb3271 100644 --- a/packages/plugin-rsc/package.json +++ b/packages/plugin-rsc/package.json @@ -1,6 +1,6 @@ { "name": "@vitejs/plugin-rsc", - "version": "0.4.10-alpha.1", + "version": "0.4.10", "description": "React Server Components (RSC) support for Vite.", "keywords": [ "vite", From 58c8bfd1f4e9584d81cb5e85aa466119fd72bbbc Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 7 Jul 2025 12:24:10 +0900 Subject: [PATCH 067/313] chore: fix rsc release (#543) --- .github/workflows/publish.yml | 2 +- packages/plugin-rsc/package.json | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index af2715b15..1e43d19cf 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -55,7 +55,7 @@ jobs: env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - if: steps.tag.outputs.isAlpha == 'false' + - if: steps.tag.outputs.isAlpha == 'false' && steps.tag.outputs.pkgName != 'plugin-rsc' uses: ArnaudBarre/github-release@4fa6eafe8e2449c7c1c5a91ae50de4ee34db0b40 # v1.5.0 with: path: packages/${{ steps.tag.outputs.pkgName }}/CHANGELOG.md diff --git a/packages/plugin-rsc/package.json b/packages/plugin-rsc/package.json index 13cdb3271..c21c5cc36 100644 --- a/packages/plugin-rsc/package.json +++ b/packages/plugin-rsc/package.json @@ -34,7 +34,8 @@ "tsc": "tsc -b ./tsconfig.json ./e2e/tsconfig.json ./examples/*/tsconfig.json", "tsc-dev": "pnpm tsc --watch --preserveWatchOutput", "dev": "tsdown --sourcemap --watch src", - "build": "tsdown" + "build": "tsdown", + "prepack": "tsdown" }, "dependencies": { "@mjackson/node-fetch-server": "^0.7.0", From 6949c75c3d933d7cef48f0d33330805d1fdcbe25 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 7 Jul 2025 12:25:00 +0900 Subject: [PATCH 068/313] release: plugin-rsc@0.4.11 --- packages/plugin-rsc/CHANGELOG.md | 5 +++++ packages/plugin-rsc/package.json | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/plugin-rsc/CHANGELOG.md b/packages/plugin-rsc/CHANGELOG.md index 852af5ea3..045c5049d 100644 --- a/packages/plugin-rsc/CHANGELOG.md +++ b/packages/plugin-rsc/CHANGELOG.md @@ -1,3 +1,8 @@ +## [0.4.11](https://github.com/vitejs/vite-plugin-react/compare/plugin-rsc@0.4.10...plugin-rsc@0.4.11) (2025-07-07) +### Miscellaneous Chores + +* fix rsc release ([#543](https://github.com/vitejs/vite-plugin-react/issues/543)) ([58c8bfd](https://github.com/vitejs/vite-plugin-react/commit/58c8bfd1f4e9584d81cb5e85aa466119fd72bbbc)) + ## 0.4.10 (2025-07-07) ### Features diff --git a/packages/plugin-rsc/package.json b/packages/plugin-rsc/package.json index c21c5cc36..e81630dc8 100644 --- a/packages/plugin-rsc/package.json +++ b/packages/plugin-rsc/package.json @@ -1,6 +1,6 @@ { "name": "@vitejs/plugin-rsc", - "version": "0.4.10", + "version": "0.4.11", "description": "React Server Components (RSC) support for Vite.", "keywords": [ "vite", From 713a3204aeb8bd36fd14cf52197d0f7677db4abc Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 7 Jul 2025 13:20:00 +0900 Subject: [PATCH 069/313] chore(rsc): adjust changelog (#544) --- packages/plugin-rsc/CHANGELOG.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/plugin-rsc/CHANGELOG.md b/packages/plugin-rsc/CHANGELOG.md index 045c5049d..43693c5fb 100644 --- a/packages/plugin-rsc/CHANGELOG.md +++ b/packages/plugin-rsc/CHANGELOG.md @@ -26,15 +26,13 @@ * **rsc:** test browser only component ([#528](https://github.com/vitejs/vite-plugin-react/issues/528)) ([795303e](https://github.com/vitejs/vite-plugin-react/commit/795303efe78fed2cff2237c6d6d066d76c284ced)) * **rsc:** test react compiler ([#529](https://github.com/vitejs/vite-plugin-react/issues/529)) ([2966af5](https://github.com/vitejs/vite-plugin-react/commit/2966af52393514e0c23d3236afccba699b042322)) -# Changelog - -## v0.4.10 (2025-07-04) +## v0.4.10-alpha.1 (2025-07-04) - feat: add `@vitejs/plugin-rsc` ([#521](https://github.com/vitejs/vite-plugin-react/pull/521)) --- -Older versions were released as [`@hi-ogawa/vite-rsc`](https://github.com/hi-ogawa/vite-plugins/tree/main/packages/rsc). +Older versions were released as [`@hi-ogawa/vite-rsc`](https://www.npmjs.com/package/@hiogawa/vite-rsc). ## v0.4.9 (2025-07-03) From f54dc608d976fd584b868bb5644ddaefc593261a Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 7 Jul 2025 17:07:03 +0900 Subject: [PATCH 070/313] chore(rsc): setup github release (#546) --- .github/workflows/publish.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 1e43d19cf..1d23e1255 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -60,3 +60,12 @@ jobs: with: path: packages/${{ steps.tag.outputs.pkgName }}/CHANGELOG.md tag-name: ${{ github.ref_name }} + + - if: steps.tag.outputs.isAlpha == 'false' && steps.tag.outputs.pkgName == 'plugin-rsc' + uses: yyx990803/release-tag@master + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.ref }} + body: | + Please refer to [CHANGELOG.md](https://github.com/vitejs/vite-plugin-react/blob/${{ github.ref_name }}/packages/${{ steps.tag.outputs.pkgName }}/CHANGELOG.md) for details. From c8ecad052001b6fc42e508f18433e6b305bca641 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 7 Jul 2025 17:35:36 +0900 Subject: [PATCH 071/313] chore(deps): update dependency vite to v7 (#541) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: sapphi-red <49056869+sapphi-red@users.noreply.github.com> --- playground/vitest.config.e2e.ts | 7 +- pnpm-lock.yaml | 430 ++++++++++---------------------- pnpm-workspace.yaml | 2 +- 3 files changed, 142 insertions(+), 297 deletions(-) diff --git a/playground/vitest.config.e2e.ts b/playground/vitest.config.e2e.ts index 412f3142f..6a59bd577 100644 --- a/playground/vitest.config.e2e.ts +++ b/playground/vitest.config.e2e.ts @@ -1,8 +1,10 @@ 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 +const isBelowNode20 = +process.versions.node.split('.')[0] < 20 + export default defineConfig({ resolve: { alias: { @@ -12,6 +14,9 @@ export default defineConfig({ test: { pool: 'forks', include: ['./playground/**/*.spec.[tj]s'], + exclude: isBelowNode20 + ? ['**/__tests__/oxc/**', ...defaultExclude] // plugin-oxc only supports node >= 20 + : defaultExclude, setupFiles: ['./playground/vitestSetup.ts'], globalSetup: ['./playground/vitestGlobalSetup.ts'], testTimeout: timeout, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 673b2422a..cda6eb118 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,8 +7,8 @@ settings: catalogs: rolldown-vite: vite: - specifier: npm:rolldown-vite@^6.3.21 - version: 6.3.21 + specifier: npm:rolldown-vite@^7.0.5 + version: 7.0.5 packageExtensionsChecksum: sha256-S82yCctxnlOTNFuHWCyTFRo/B6Y3jque/4DnsDO4WZA= @@ -136,7 +136,7 @@ importers: version: 3.5.0(typescript@5.8.3) vite: specifier: catalog:rolldown-vite - version: rolldown-vite@6.3.21(@types/node@22.16.0)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1) + version: rolldown-vite@7.0.5(@types/node@22.16.0)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1) packages/plugin-react-swc: dependencies: @@ -2161,17 +2161,14 @@ packages: resolution: {integrity: sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - '@oxc-project/runtime@0.73.0': - resolution: {integrity: sha512-YFvBzVQK/ix0RQxOI02ebCumehSHoiJgvb7nOU4o7xFoMnnujLdjmxnEBK/qiOQrEyXlY69gXGMEsKYVe+YZ3A==} + '@oxc-project/runtime@0.75.0': + resolution: {integrity: sha512-gzRmVI/vorsPmbDXt7GD4Uh2lD3rCOku/1xWPB4Yx48k0EP4TZmzQudWapjN4+7Vv+rgXr0RqCHQadeaMvdBuw==} engines: {node: '>=6.9.0'} '@oxc-project/runtime@0.75.1': resolution: {integrity: sha512-UH07DRi7xXqAsJ/sFbJJg0liIXnapB6P5uADXIiF1s6WQjZzcTIkKHca0s522QVxmijPxVX5ijCYxSr7eSq5CQ==} engines: {node: '>=6.9.0'} - '@oxc-project/types@0.73.0': - resolution: {integrity: sha512-ZQS7dpsga43R7bjqRKHRhOeNpuIBeLBnlS3M6H3IqWIWiapGOQIxp4lpETLBYupkSd4dh85ESFn6vAvtpPdGkA==} - '@oxc-project/types@0.75.1': resolution: {integrity: sha512-7ZJy+51qWpZRvynaQUezeYfjCtaSdiXIWFUZIlOuTSfDXpXqnSl/m1IUPLx6XrOy6s0SFv3CLE14vcZy63bz7g==} @@ -2223,129 +2220,66 @@ packages: typescript: optional: true - '@rolldown/binding-darwin-arm64@1.0.0-beta.16': - resolution: {integrity: sha512-dzlvuodUFc/QX97jYSsPHtYysqeSeM5gBxiN+DpV93tXEYyFMWm3cECxNmShz4ZM+lrgm6eG2/txzLZ/z9qWLw==} - cpu: [arm64] - os: [darwin] - '@rolldown/binding-darwin-arm64@1.0.0-beta.24': resolution: {integrity: sha512-gE4HGjIioZaMGZupq2zQQdqhlRV2b2qnjFHHkJEW50zVDmiVNWwdHjwvZDPx9JfW5y4GuHgp/zKDLZZbJlQ1/Q==} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-beta.16': - resolution: {integrity: sha512-H5604ucjaYy5AxxuOP/CoE5RV3lKCJ+btclWL5rV+hVh0qNN9dVgve+onzAYmi8h2RBPET1Novj+2KB640PC9Q==} - cpu: [x64] - os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-beta.24': resolution: {integrity: sha512-h2HfOtqmjIHIz9WdpKAJ8sBfLNGkrMlwrCfNV2MDDGu0x3YdYBYPE+ozS5PvE53Tp8y6EYn2/thNWJTGWy/N3Q==} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-beta.16': - resolution: {integrity: sha512-DDzmSFFKfAcrUJfuwK4URKl28fIgK8fT5Kp374B1iJJ9KwcqIZzN1a3s/ubjTGIwiE+vUDEclVQ3z9R0VwkGAQ==} - cpu: [x64] - os: [freebsd] - '@rolldown/binding-freebsd-x64@1.0.0-beta.24': resolution: {integrity: sha512-lx3Q2TU2bbY4yDCZ6e+Wiom3VMLFlZmQswx/1CyjFd+Vv3Q+99SZm6CSfNAIZBaWD246yQRRr1Vx+iIoWCdYzQ==} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.16': - resolution: {integrity: sha512-xkCdzCXW6SSDlFYaHjzCFrsbqxxo60YKVW4B/G2ST8HYruv0Ql4qpoQw7WoGeXL+bc/3RpKWzsxIiooUKX6e9Q==} - cpu: [arm] - os: [linux] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.24': resolution: {integrity: sha512-PLtsV6uf3uS1/cNF8Wu/kitTpXT2YpOZbN6VJm7oMi5A8o5oO0vh8STCB71O5k2kwQMVycsmxHWFk2ZyEa6aMw==} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.16': - resolution: {integrity: sha512-Yrz782pZsFVfxlsqppDneV2dl7St7lGt1uCscXnLC0vXiesj59vl3sULQ45eMKKeEEqPKz7X8OAJI7ao6zLSyg==} - cpu: [arm64] - os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.24': resolution: {integrity: sha512-UxGukDkWnv7uS5R+BPVeJ4FSuwA+lgC62LRsyPPSJhJhKMNGZ2W9sQPIpEtBRlww8t0qR6QBsiD5TGLW98ktGw==} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.16': - resolution: {integrity: sha512-1M8jPk7BICBjKfqNZCMtcLvzpEFHBkySPHt+RsYGZhFuAbCb352C9ilWsjpi7WwhWBOvh6tHUNmO77NTKlLxkA==} - cpu: [arm64] - os: [linux] - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.24': resolution: {integrity: sha512-vB99yGYW9FOQe4lk3MNKa13+vRj+7waZFlRE3Ba/IpEy7RFxZ78ASkPLXkz4+kYYbUvMnRaOfk9RKX2fqYZRUg==} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.16': - resolution: {integrity: sha512-6xhZMDt4r3r3DeurJFakCqev0ct0FHU9hQPvoaHTE3EfC0yRhUp7aQmf2lsB7YVU7Zcel/KiOv/DjJQR9fntog==} - cpu: [x64] - os: [linux] - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.24': resolution: {integrity: sha512-fAMZBWutuKWHsyvHVsKjFYRXVgTbzBfNmomzPPpog8UtdkHk5Vnb0qVEeZP4hR4TsXnKfzD2EQ98NRqFej5QYA==} cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-musl@1.0.0-beta.16': - resolution: {integrity: sha512-zYnSz4Z39kEUUA1B03KbNFGgCNykZPhaDltJGY9C3bA3zU5+Ygtr+aeaRxEgXYP4PYBqE3rhPIGmDnlTzx18wA==} - cpu: [x64] - os: [linux] - '@rolldown/binding-linux-x64-musl@1.0.0-beta.24': resolution: {integrity: sha512-0UY/Qo8fAlpolcWOg2ZU7SCUrsCJWifdRMliV9GXlZaBKbMoVNFw0pHGDm9cj/3TWhJu/iB0peZK00dm22LlNw==} cpu: [x64] os: [linux] - '@rolldown/binding-wasm32-wasi@1.0.0-beta.16': - resolution: {integrity: sha512-gFWaCVJENQWYAWkk6yJbteyMmxdZAYE9VLB4S4YqfxOYbGvVxq0K1Dn89uPEzN4beEaLToe917YzXqLdv4tPvQ==} - engines: {node: '>=14.21.3'} - cpu: [wasm32] - '@rolldown/binding-wasm32-wasi@1.0.0-beta.24': resolution: {integrity: sha512-7ubbtKCo6FBuAM4q6LoT5dOea7f/zj9OYXgumbwSmA0fw18mN5h8SrFTUjl7h9MpPkOyhi2uY6ss4pb39KXkcw==} engines: {node: '>=14.21.3'} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.16': - resolution: {integrity: sha512-rbXNzlc3/aZSNaIWKAx6TGGUcgSnDmBYxyHLYthtAXz1uvg2o0YsAKYJszWHk0fTrjtKnDXLxwNjua1pf87cZA==} - cpu: [arm64] - os: [win32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.24': resolution: {integrity: sha512-S5WKIabtRBJyzu31KnJRlbZRR6FMrTMzYRrNTnIY2hWWXfpcB1PNuHqbo+98ODLpH8knul4Vyf5sCL61okLTjA==} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.16': - resolution: {integrity: sha512-9o4nk+IEvyWkE5qsLjcN+Sic869hELVZ5FsEvDruCa9sX5qZV4A5pj5bR9Sc+x4L0Aa1kQkPdChgxRqV1tgOdw==} - cpu: [ia32] - os: [win32] - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.24': resolution: {integrity: sha512-5EW8mzHoukz3zBn/VAaTapK+i+/ZFbSSP9meDmLSuGnk6La8uLAPc7E+6S3gbJnQ6k8lSC6ipIIeXC4SPdttKQ==} cpu: [ia32] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.16': - resolution: {integrity: sha512-PJSdUi02LT2dRS5nRNmqWTAEvq11NSBfPK5DoCTUj4DaUHJd05jBBtVyLabTutjaACN53O/pLOXds73W4obZ/g==} - cpu: [x64] - os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.24': resolution: {integrity: sha512-KpurHt8+B0yTg9gHroC3H/Tf2c9VfjIBsC/wVHTf7GGAe+xkw1+5iYB3Y5iSy3OaMTGq1U3/YEvTqqBdSbDMUg==} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-beta.16': - resolution: {integrity: sha512-w3f87JpF7lgIlK03I0R3XidspFgB4MsixE5o/VjBMJI+Ki4XW/Ffrykmj2AUCbVxhRD7Pi9W0Qu2XapJhB2mSA==} - '@rolldown/pluginutils@1.0.0-beta.24': resolution: {integrity: sha512-NMiim/enJlffMP16IanVj1ajFNEg8SaMEYyxyYfJoEyt5EiFT3HUH/T2GRdeStNWp+/kg5U8DiJqnQBgLQ8uCw==} @@ -3542,10 +3476,6 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - detect-libc@2.0.3: - resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} - engines: {node: '>=8'} - detect-libc@2.0.4: resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} engines: {node: '>=8'} @@ -3803,14 +3733,6 @@ packages: fd-package-json@1.2.0: resolution: {integrity: sha512-45LSPmWf+gC5tdCQMNH4s9Sr00bIkiD9aN7dc5hqkrEw1geRYyDQS1v1oMHAW3ysfxfndqGsrDREHHjNNbKUfA==} - fdir@6.4.3: - resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - fdir@6.4.4: resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} peerDependencies: @@ -4907,10 +4829,6 @@ packages: resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} engines: {node: ^10 || ^12 || >=14} - postcss@8.5.3: - resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} - engines: {node: ^10 || ^12 || >=14} - postcss@8.5.6: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} @@ -5121,19 +5039,19 @@ packages: vue-tsc: optional: true - rolldown-vite@6.3.21: - resolution: {integrity: sha512-mjds/3g+YPWJmT08oQic/L5sWvs/lNc4vs9vmD7uHQtGdP7qGriWtYf62Vp+6eQhd/MPeFVw71TMEEt/cH+sLQ==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + rolldown-vite@7.0.5: + resolution: {integrity: sha512-z239GrVtwr+DVgFw6s64Wa+OLjE4aG1Ux+MeVdQKXes0XaIDja5ouacPDLExgpSlplbe0zxSb1JbYtFvOr+pIw==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@types/node': ^20.19.0 || >=22.12.0 esbuild: ^0.25.0 jiti: '>=1.21.0' - less: '*' - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' + less: ^4.0.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 terser: ^5.16.0 tsx: ^4.8.1 yaml: ^2.4.2 @@ -5161,10 +5079,6 @@ packages: yaml: optional: true - rolldown@1.0.0-beta.16: - resolution: {integrity: sha512-ruNh01VbnTJsW0kgYywrQ80FUY0yJvXqavPVljGg0dRiwggYB7yXlypw1ptkFiomkEOnOGiwncjiviUakgPHxg==} - hasBin: true - rolldown@1.0.0-beta.24: resolution: {integrity: sha512-eDyipoOnoHQ5p6INkJ8g31eKGlqPSCAN9PapyOTw5HET4FYIWALZnSgpMZ67mdn+xT3jAsqGidNnBcIM6EAUhA==} hasBin: true @@ -6907,12 +6821,10 @@ snapshots: dependencies: which: 3.0.1 - '@oxc-project/runtime@0.73.0': {} + '@oxc-project/runtime@0.75.0': {} '@oxc-project/runtime@0.75.1': {} - '@oxc-project/types@0.73.0': {} - '@oxc-project/types@0.75.1': {} '@pkgjs/parseargs@0.11.0': @@ -6987,84 +6899,44 @@ snapshots: optionalDependencies: typescript: 5.8.3 - '@rolldown/binding-darwin-arm64@1.0.0-beta.16': - optional: true - '@rolldown/binding-darwin-arm64@1.0.0-beta.24': optional: true - '@rolldown/binding-darwin-x64@1.0.0-beta.16': - optional: true - '@rolldown/binding-darwin-x64@1.0.0-beta.24': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-beta.16': - optional: true - '@rolldown/binding-freebsd-x64@1.0.0-beta.24': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.16': - optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.24': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.16': - optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.24': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.16': - optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.24': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.16': - optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.24': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-beta.16': - optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-beta.24': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-beta.16': - dependencies: - '@napi-rs/wasm-runtime': 0.2.11 - optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-beta.24': dependencies: '@napi-rs/wasm-runtime': 0.2.11 optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.16': - optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.24': optional: true - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.16': - optional: true - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.24': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.16': - optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.24': optional: true - '@rolldown/pluginutils@1.0.0-beta.16': {} - '@rolldown/pluginutils@1.0.0-beta.24': {} '@rollup/plugin-alias@5.1.1(rollup@4.37.0)': @@ -7076,7 +6948,7 @@ snapshots: '@rollup/pluginutils': 5.1.4(rollup@4.37.0) commondir: 1.0.1 estree-walker: 2.0.2 - fdir: 6.4.3(picomatch@4.0.2) + fdir: 6.4.6(picomatch@4.0.2) is-reference: 1.2.1 magic-string: 0.30.17 picomatch: 4.0.2 @@ -7808,14 +7680,14 @@ snapshots: astring@1.8.6: {} - autoprefixer@10.4.21(postcss@8.5.3): + autoprefixer@10.4.21(postcss@8.5.6): dependencies: browserslist: 4.24.4 caniuse-lite: 1.0.30001707 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 babel-dead-code-elimination@1.0.10: @@ -8033,9 +7905,9 @@ snapshots: css-color-keywords@1.0.0: {} - css-declaration-sorter@7.2.0(postcss@8.5.3): + css-declaration-sorter@7.2.0(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 css-select@5.1.0: dependencies: @@ -8065,49 +7937,49 @@ snapshots: cssesc@3.0.0: {} - cssnano-preset-default@7.0.6(postcss@8.5.3): + cssnano-preset-default@7.0.6(postcss@8.5.6): dependencies: browserslist: 4.24.4 - css-declaration-sorter: 7.2.0(postcss@8.5.3) - cssnano-utils: 5.0.0(postcss@8.5.3) - postcss: 8.5.3 - postcss-calc: 10.1.1(postcss@8.5.3) - postcss-colormin: 7.0.2(postcss@8.5.3) - postcss-convert-values: 7.0.4(postcss@8.5.3) - postcss-discard-comments: 7.0.3(postcss@8.5.3) - postcss-discard-duplicates: 7.0.1(postcss@8.5.3) - postcss-discard-empty: 7.0.0(postcss@8.5.3) - postcss-discard-overridden: 7.0.0(postcss@8.5.3) - postcss-merge-longhand: 7.0.4(postcss@8.5.3) - postcss-merge-rules: 7.0.4(postcss@8.5.3) - postcss-minify-font-values: 7.0.0(postcss@8.5.3) - postcss-minify-gradients: 7.0.0(postcss@8.5.3) - postcss-minify-params: 7.0.2(postcss@8.5.3) - postcss-minify-selectors: 7.0.4(postcss@8.5.3) - postcss-normalize-charset: 7.0.0(postcss@8.5.3) - postcss-normalize-display-values: 7.0.0(postcss@8.5.3) - postcss-normalize-positions: 7.0.0(postcss@8.5.3) - postcss-normalize-repeat-style: 7.0.0(postcss@8.5.3) - postcss-normalize-string: 7.0.0(postcss@8.5.3) - postcss-normalize-timing-functions: 7.0.0(postcss@8.5.3) - postcss-normalize-unicode: 7.0.2(postcss@8.5.3) - postcss-normalize-url: 7.0.0(postcss@8.5.3) - postcss-normalize-whitespace: 7.0.0(postcss@8.5.3) - postcss-ordered-values: 7.0.1(postcss@8.5.3) - postcss-reduce-initial: 7.0.2(postcss@8.5.3) - postcss-reduce-transforms: 7.0.0(postcss@8.5.3) - postcss-svgo: 7.0.1(postcss@8.5.3) - postcss-unique-selectors: 7.0.3(postcss@8.5.3) - - cssnano-utils@5.0.0(postcss@8.5.3): - dependencies: - postcss: 8.5.3 - - cssnano@7.0.6(postcss@8.5.3): - dependencies: - cssnano-preset-default: 7.0.6(postcss@8.5.3) + css-declaration-sorter: 7.2.0(postcss@8.5.6) + cssnano-utils: 5.0.0(postcss@8.5.6) + postcss: 8.5.6 + postcss-calc: 10.1.1(postcss@8.5.6) + postcss-colormin: 7.0.2(postcss@8.5.6) + postcss-convert-values: 7.0.4(postcss@8.5.6) + postcss-discard-comments: 7.0.3(postcss@8.5.6) + postcss-discard-duplicates: 7.0.1(postcss@8.5.6) + postcss-discard-empty: 7.0.0(postcss@8.5.6) + postcss-discard-overridden: 7.0.0(postcss@8.5.6) + postcss-merge-longhand: 7.0.4(postcss@8.5.6) + postcss-merge-rules: 7.0.4(postcss@8.5.6) + postcss-minify-font-values: 7.0.0(postcss@8.5.6) + postcss-minify-gradients: 7.0.0(postcss@8.5.6) + postcss-minify-params: 7.0.2(postcss@8.5.6) + postcss-minify-selectors: 7.0.4(postcss@8.5.6) + postcss-normalize-charset: 7.0.0(postcss@8.5.6) + postcss-normalize-display-values: 7.0.0(postcss@8.5.6) + postcss-normalize-positions: 7.0.0(postcss@8.5.6) + postcss-normalize-repeat-style: 7.0.0(postcss@8.5.6) + postcss-normalize-string: 7.0.0(postcss@8.5.6) + postcss-normalize-timing-functions: 7.0.0(postcss@8.5.6) + postcss-normalize-unicode: 7.0.2(postcss@8.5.6) + postcss-normalize-url: 7.0.0(postcss@8.5.6) + postcss-normalize-whitespace: 7.0.0(postcss@8.5.6) + postcss-ordered-values: 7.0.1(postcss@8.5.6) + postcss-reduce-initial: 7.0.2(postcss@8.5.6) + postcss-reduce-transforms: 7.0.0(postcss@8.5.6) + postcss-svgo: 7.0.1(postcss@8.5.6) + postcss-unique-selectors: 7.0.3(postcss@8.5.6) + + cssnano-utils@5.0.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + cssnano@7.0.6(postcss@8.5.6): + dependencies: + cssnano-preset-default: 7.0.6(postcss@8.5.6) lilconfig: 3.1.3 - postcss: 8.5.3 + postcss: 8.5.6 csso@5.0.5: dependencies: @@ -8154,8 +8026,6 @@ snapshots: dequal@2.0.3: {} - detect-libc@2.0.3: {} - detect-libc@2.0.4: {} devlop@1.1.0: @@ -8540,10 +8410,6 @@ snapshots: dependencies: walk-up-path: 3.0.1 - fdir@6.4.3(picomatch@4.0.2): - optionalDependencies: - picomatch: 4.0.2 - fdir@6.4.4(picomatch@4.0.2): optionalDependencies: picomatch: 4.0.2 @@ -8916,7 +8782,7 @@ snapshots: lightningcss@1.30.1: dependencies: - detect-libc: 2.0.3 + detect-libc: 2.0.4 optionalDependencies: lightningcss-darwin-arm64: 1.30.1 lightningcss-darwin-x64: 1.30.1 @@ -9372,19 +9238,19 @@ snapshots: mkdist@2.2.0(typescript@5.8.3): dependencies: - autoprefixer: 10.4.21(postcss@8.5.3) + autoprefixer: 10.4.21(postcss@8.5.6) citty: 0.1.6 - cssnano: 7.0.6(postcss@8.5.3) + cssnano: 7.0.6(postcss@8.5.6) defu: 6.1.4 esbuild: 0.24.2 jiti: 1.21.7 mlly: 1.7.4 pathe: 1.1.2 pkg-types: 1.3.1 - postcss: 8.5.3 - postcss-nested: 7.0.2(postcss@8.5.3) + postcss: 8.5.6 + postcss-nested: 7.0.2(postcss@8.5.6) semver: 7.7.2 - tinyglobby: 0.2.12 + tinyglobby: 0.2.14 optionalDependencies: typescript: 5.8.3 @@ -9595,147 +9461,147 @@ snapshots: optionalDependencies: fsevents: 2.3.2 - postcss-calc@10.1.1(postcss@8.5.3): + postcss-calc@10.1.1(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-selector-parser: 7.1.0 postcss-value-parser: 4.2.0 - postcss-colormin@7.0.2(postcss@8.5.3): + postcss-colormin@7.0.2(postcss@8.5.6): dependencies: browserslist: 4.24.4 caniuse-api: 3.0.0 colord: 2.9.3 - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-convert-values@7.0.4(postcss@8.5.3): + postcss-convert-values@7.0.4(postcss@8.5.6): dependencies: browserslist: 4.24.4 - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-discard-comments@7.0.3(postcss@8.5.3): + postcss-discard-comments@7.0.3(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 - postcss-discard-duplicates@7.0.1(postcss@8.5.3): + postcss-discard-duplicates@7.0.1(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 - postcss-discard-empty@7.0.0(postcss@8.5.3): + postcss-discard-empty@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 - postcss-discard-overridden@7.0.0(postcss@8.5.3): + postcss-discard-overridden@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 - postcss-merge-longhand@7.0.4(postcss@8.5.3): + postcss-merge-longhand@7.0.4(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - stylehacks: 7.0.4(postcss@8.5.3) + stylehacks: 7.0.4(postcss@8.5.6) - postcss-merge-rules@7.0.4(postcss@8.5.3): + postcss-merge-rules@7.0.4(postcss@8.5.6): dependencies: browserslist: 4.24.4 caniuse-api: 3.0.0 - cssnano-utils: 5.0.0(postcss@8.5.3) - postcss: 8.5.3 + cssnano-utils: 5.0.0(postcss@8.5.6) + postcss: 8.5.6 postcss-selector-parser: 6.1.2 - postcss-minify-font-values@7.0.0(postcss@8.5.3): + postcss-minify-font-values@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-minify-gradients@7.0.0(postcss@8.5.3): + postcss-minify-gradients@7.0.0(postcss@8.5.6): dependencies: colord: 2.9.3 - cssnano-utils: 5.0.0(postcss@8.5.3) - postcss: 8.5.3 + cssnano-utils: 5.0.0(postcss@8.5.6) + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-minify-params@7.0.2(postcss@8.5.3): + postcss-minify-params@7.0.2(postcss@8.5.6): dependencies: browserslist: 4.24.4 - cssnano-utils: 5.0.0(postcss@8.5.3) - postcss: 8.5.3 + cssnano-utils: 5.0.0(postcss@8.5.6) + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-minify-selectors@7.0.4(postcss@8.5.3): + postcss-minify-selectors@7.0.4(postcss@8.5.6): dependencies: cssesc: 3.0.0 - postcss: 8.5.3 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 - postcss-nested@7.0.2(postcss@8.5.3): + postcss-nested@7.0.2(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-selector-parser: 7.1.0 - postcss-normalize-charset@7.0.0(postcss@8.5.3): + postcss-normalize-charset@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 - postcss-normalize-display-values@7.0.0(postcss@8.5.3): + postcss-normalize-display-values@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-normalize-positions@7.0.0(postcss@8.5.3): + postcss-normalize-positions@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-normalize-repeat-style@7.0.0(postcss@8.5.3): + postcss-normalize-repeat-style@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-normalize-string@7.0.0(postcss@8.5.3): + postcss-normalize-string@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-normalize-timing-functions@7.0.0(postcss@8.5.3): + postcss-normalize-timing-functions@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-normalize-unicode@7.0.2(postcss@8.5.3): + postcss-normalize-unicode@7.0.2(postcss@8.5.6): dependencies: browserslist: 4.24.4 - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-normalize-url@7.0.0(postcss@8.5.3): + postcss-normalize-url@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-normalize-whitespace@7.0.0(postcss@8.5.3): + postcss-normalize-whitespace@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-ordered-values@7.0.1(postcss@8.5.3): + postcss-ordered-values@7.0.1(postcss@8.5.6): dependencies: - cssnano-utils: 5.0.0(postcss@8.5.3) - postcss: 8.5.3 + cssnano-utils: 5.0.0(postcss@8.5.6) + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-reduce-initial@7.0.2(postcss@8.5.3): + postcss-reduce-initial@7.0.2(postcss@8.5.6): dependencies: browserslist: 4.24.4 caniuse-api: 3.0.0 - postcss: 8.5.3 + postcss: 8.5.6 - postcss-reduce-transforms@7.0.0(postcss@8.5.3): + postcss-reduce-transforms@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 postcss-selector-parser@6.0.10: @@ -9753,15 +9619,15 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-svgo@7.0.1(postcss@8.5.3): + postcss-svgo@7.0.1(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 svgo: 3.3.2 - postcss-unique-selectors@7.0.3(postcss@8.5.3): + postcss-unique-selectors@7.0.3(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 postcss-value-parser@4.2.0: {} @@ -9772,12 +9638,6 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.5.3: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - postcss@8.5.6: dependencies: nanoid: 3.3.11 @@ -9969,14 +9829,14 @@ snapshots: - oxc-resolver - supports-color - rolldown-vite@6.3.21(@types/node@22.16.0)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1): + rolldown-vite@7.0.5(@types/node@22.16.0)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1): dependencies: - '@oxc-project/runtime': 0.73.0 - fdir: 6.4.4(picomatch@4.0.2) + '@oxc-project/runtime': 0.75.0 + fdir: 6.4.6(picomatch@4.0.2) lightningcss: 1.30.1 picomatch: 4.0.2 - postcss: 8.5.3 - rolldown: 1.0.0-beta.16 + postcss: 8.5.6 + rolldown: 1.0.0-beta.24 tinyglobby: 0.2.14 optionalDependencies: '@types/node': 22.16.0 @@ -9986,26 +9846,6 @@ snapshots: tsx: 4.20.3 yaml: 2.7.1 - rolldown@1.0.0-beta.16: - dependencies: - '@oxc-project/runtime': 0.73.0 - '@oxc-project/types': 0.73.0 - '@rolldown/pluginutils': 1.0.0-beta.16 - ansis: 4.1.0 - optionalDependencies: - '@rolldown/binding-darwin-arm64': 1.0.0-beta.16 - '@rolldown/binding-darwin-x64': 1.0.0-beta.16 - '@rolldown/binding-freebsd-x64': 1.0.0-beta.16 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.16 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.16 - '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.16 - '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.16 - '@rolldown/binding-linux-x64-musl': 1.0.0-beta.16 - '@rolldown/binding-wasm32-wasi': 1.0.0-beta.16 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.16 - '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.16 - '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.16 - rolldown@1.0.0-beta.24: dependencies: '@oxc-project/runtime': 0.75.1 @@ -10282,10 +10122,10 @@ snapshots: stylis: 4.3.2 tslib: 2.6.2 - stylehacks@7.0.4(postcss@8.5.3): + stylehacks@7.0.4(postcss@8.5.6): dependencies: browserslist: 4.24.4 - postcss: 8.5.3 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 stylis@4.2.0: {} @@ -10329,7 +10169,7 @@ snapshots: tinyglobby@0.2.12: dependencies: - fdir: 6.4.3(picomatch@4.0.2) + fdir: 6.4.6(picomatch@4.0.2) picomatch: 4.0.2 tinyglobby@0.2.14: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 7832fad02..7471e6f9b 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -6,4 +6,4 @@ packages: catalogs: rolldown-vite: - vite: npm:rolldown-vite@^6.3.21 + vite: npm:rolldown-vite@^7.0.5 From 904a0623cc55b2c5944f0da396dc99b82b8a8ddb Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Tue, 8 Jul 2025 17:52:54 +0900 Subject: [PATCH 072/313] test(rsc): serial e2e (#545) --- packages/plugin-rsc/playwright.config.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/plugin-rsc/playwright.config.ts b/packages/plugin-rsc/playwright.config.ts index 29a7d0c6e..cea3a5506 100644 --- a/packages/plugin-rsc/playwright.config.ts +++ b/packages/plugin-rsc/playwright.config.ts @@ -26,6 +26,7 @@ export default defineConfig({ use: devices['Desktop Safari'], }, ], + workers: 1, forbidOnly: !!process.env.CI, retries: process.env.CI ? 2 : 0, reporter: ['list', process.env.CI && 'github'] From 8c3929c4a8c02a3fe2251fde087fa42358a79de5 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Tue, 8 Jul 2025 18:09:48 +0900 Subject: [PATCH 073/313] chore(rsc): remove unused code (#550) --- .../examples/react-router/cf/vite.config.ts | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/packages/plugin-rsc/examples/react-router/cf/vite.config.ts b/packages/plugin-rsc/examples/react-router/cf/vite.config.ts index c4348cec7..8cf7a02f5 100644 --- a/packages/plugin-rsc/examples/react-router/cf/vite.config.ts +++ b/packages/plugin-rsc/examples/react-router/cf/vite.config.ts @@ -36,19 +36,6 @@ export default defineConfig({ }, ], }), - { - name: 'react-router-fixup', - transform(code) { - if (code.includes(`import { AsyncLocalStorage } from 'async_hooks';`)) { - code = code.replaceAll('async_hooks', 'node:async_hooks') - code = code.replaceAll( - `global.___reactRouterServerStorage___`, - `globalThis.___reactRouterServerStorage___`, - ) - return code - } - }, - }, ], environments: { client: { From b37d377bc48fb99b451036d20aec45367580a627 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Tue, 8 Jul 2025 18:19:44 +0900 Subject: [PATCH 074/313] test(rsc): fix tests on rolldown-vite (#549) --- .github/workflows/ci-rsc.yml | 12 ++++++++++-- .../examples/react-router/cf/vite.config.ts | 12 ++++++++++++ .../examples/starter-cf-single/vite.config.ts | 12 ++++++++++-- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci-rsc.yml b/.github/workflows/ci-rsc.yml index d3bf406db..b21b0d0b3 100644 --- a/.github/workflows/ci-rsc.yml +++ b/.github/workflows/ci-rsc.yml @@ -31,18 +31,21 @@ jobs: - run: pnpm -C packages/plugin-rsc test test-e2e: - name: test-rsc (${{ matrix.os }} / ${{ matrix.browser }}) + name: test-rsc (${{ matrix.os }} / ${{ matrix.browser }}) ${{ matrix.rolldown == true && '(rolldown)' || '' }} runs-on: ${{ matrix.os }} strategy: - # TODO: shard? matrix: os: [ubuntu-latest, macos-latest, windows-latest] browser: [chromium] + rolldown: [false] include: - os: ubuntu-latest browser: firefox - os: macos-latest browser: webkit + - os: ubuntu-latest + browser: chromium + rolldown: true fail-fast: false steps: - uses: actions/checkout@v4 @@ -52,6 +55,11 @@ jobs: - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 - run: pnpm i - run: pnpm build + - name: install rolldown + if: ${{ matrix.rolldown }} + run: | + echo 'overrides: { vite: "npm:rolldown-vite@latest" }' >> pnpm-workspace.yaml + pnpm i --no-frozen-lockfile - run: pnpm -C packages/plugin-rsc exec playwright install ${{ matrix.browser }} - run: pnpm -C packages/plugin-rsc test-e2e-ci --project=${{ matrix.browser }} env: diff --git a/packages/plugin-rsc/examples/react-router/cf/vite.config.ts b/packages/plugin-rsc/examples/react-router/cf/vite.config.ts index 8cf7a02f5..ee9f9bcf3 100644 --- a/packages/plugin-rsc/examples/react-router/cf/vite.config.ts +++ b/packages/plugin-rsc/examples/react-router/cf/vite.config.ts @@ -48,12 +48,24 @@ export default defineConfig({ include: ['react-router > cookie', 'react-router > set-cookie-parser'], exclude: ['react-router'], }, + build: { + rollupOptions: { + // @ts-ignore rolldown + platform: 'neutral', + }, + }, }, rsc: { optimizeDeps: { include: ['react-router > cookie', 'react-router > set-cookie-parser'], exclude: ['react-router'], }, + build: { + rollupOptions: { + // @ts-ignore rolldown + platform: 'neutral', + }, + }, }, }, }) diff --git a/packages/plugin-rsc/examples/starter-cf-single/vite.config.ts b/packages/plugin-rsc/examples/starter-cf-single/vite.config.ts index 4ca6437be..9df9911f8 100644 --- a/packages/plugin-rsc/examples/starter-cf-single/vite.config.ts +++ b/packages/plugin-rsc/examples/starter-cf-single/vite.config.ts @@ -3,7 +3,7 @@ import rsc from '@vitejs/plugin-rsc' import react from '@vitejs/plugin-react' import { defineConfig } from 'vite' -export default defineConfig((_env) => ({ +export default defineConfig({ clearScreen: false, build: { minify: false, @@ -31,6 +31,14 @@ export default defineConfig((_env) => ({ rollupOptions: { // ensure `default` export only in cloudflare entry output preserveEntrySignatures: 'exports-only', + // @ts-ignore rolldown + platform: 'neutral', + }, + }, + optimizeDeps: { + // @ts-ignore rolldown + rollupOptions: { + platform: 'neutral', }, }, }, @@ -43,4 +51,4 @@ export default defineConfig((_env) => ({ }, }, }, -})) +}) From 54a782fec4f85c15912ed5f550429bc147d697fd Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 9 Jul 2025 07:54:24 +0900 Subject: [PATCH 075/313] test(react-swc): simplify ts-lib test (#548) --- .github/renovate.json5 | 2 - package.json | 10 -- .../ts-lib/__tests__/ts-lib.spec.ts | 20 ++-- .../playground/ts-lib/package.json | 6 +- .../playground/ts-lib/src/app.tsx | 11 +++ .../playground/ts-lib/src/index.tsx | 4 +- .../playground/ts-lib/src/pages/404.tsx | 3 - .../playground/ts-lib/src/pages/_app.tsx | 16 --- .../playground/ts-lib/src/pages/about.tsx | 3 - .../playground/ts-lib/src/pages/index.tsx | 10 -- .../ts-lib/test-dep/non-js/index.tsx | 10 ++ .../ts-lib/test-dep/non-js/package.json | 9 ++ .../playground/ts-lib/vite.config.ts | 1 - pnpm-lock.yaml | 99 +++---------------- 14 files changed, 57 insertions(+), 147 deletions(-) create mode 100644 packages/plugin-react-swc/playground/ts-lib/src/app.tsx delete mode 100644 packages/plugin-react-swc/playground/ts-lib/src/pages/404.tsx delete mode 100644 packages/plugin-react-swc/playground/ts-lib/src/pages/_app.tsx delete mode 100644 packages/plugin-react-swc/playground/ts-lib/src/pages/about.tsx delete mode 100644 packages/plugin-react-swc/playground/ts-lib/src/pages/index.tsx create mode 100644 packages/plugin-react-swc/playground/ts-lib/test-dep/non-js/index.tsx create mode 100644 packages/plugin-react-swc/playground/ts-lib/test-dep/non-js/package.json diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 388a9462b..61ced90b0 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -36,8 +36,6 @@ // manually bumping "node", - "generouted", // testing lib shipping JSX (new version ship transpiled JS) - // breaking changes "source-map", // `source-map:v0.7.0+` needs more investigation "kill-port", // `kill-port:^2.0.0 has perf issues (#8392) diff --git a/package.json b/package.json index ffc6ec87b..efc3ce13d 100644 --- a/package.json +++ b/package.json @@ -70,15 +70,5 @@ "playground/**/__tests__/**/*.ts": [ "eslint --cache --fix" ] - }, - "pnpm": { - "packageExtensions": { - "generouted": { - "peerDependencies": { - "react": "*", - "react-router-dom": "*" - } - } - } } } diff --git a/packages/plugin-react-swc/playground/ts-lib/__tests__/ts-lib.spec.ts b/packages/plugin-react-swc/playground/ts-lib/__tests__/ts-lib.spec.ts index 44e73fd4d..7f3357908 100644 --- a/packages/plugin-react-swc/playground/ts-lib/__tests__/ts-lib.spec.ts +++ b/packages/plugin-react-swc/playground/ts-lib/__tests__/ts-lib.spec.ts @@ -1,24 +1,22 @@ -import { expect, test } from '@playwright/test' +import { type Page, expect, test } from '@playwright/test' import { setupBuildAndPreview, setupDevServer } from '../../utils.ts' test('TS lib build', async ({ page }) => { const { testUrl, server } = await setupBuildAndPreview('ts-lib') await page.goto(testUrl) - await expect(page.locator('main')).toHaveText('Home page') - - await page.locator('a', { hasText: 'About' }).click() - await expect(page.locator('main')).toHaveText('About page') - + await testNonJs(page) await server.httpServer.close() }) test('TS lib dev', async ({ page }) => { const { testUrl, server } = await setupDevServer('ts-lib') await page.goto(testUrl) - await expect(page.locator('main')).toHaveText('Home page') - - await page.locator('a', { hasText: 'About' }).click() - await expect(page.locator('main')).toHaveText('About page') - + await testNonJs(page) await server.close() }) + +async function testNonJs(page: Page) { + await expect(page.getByTestId('test-non-js')).toHaveText('test-non-js: 0') + await page.getByTestId('test-non-js').click() + await expect(page.getByTestId('test-non-js')).toHaveText('test-non-js: 1') +} diff --git a/packages/plugin-react-swc/playground/ts-lib/package.json b/packages/plugin-react-swc/playground/ts-lib/package.json index 7d175c97e..28b5a65f6 100644 --- a/packages/plugin-react-swc/playground/ts-lib/package.json +++ b/packages/plugin-react-swc/playground/ts-lib/package.json @@ -8,11 +8,9 @@ "preview": "vite preview" }, "dependencies": { - "@generouted/react-router": "^1.20.0", - "generouted": "1.11.7", + "@vitejs/test-dep-non-js": "file:./test-dep/non-js", "react": "^19.1.0", - "react-dom": "^19.1.0", - "react-router-dom": "^7.6.3" + "react-dom": "^19.1.0" }, "devDependencies": { "@types/react": "^19.1.8", diff --git a/packages/plugin-react-swc/playground/ts-lib/src/app.tsx b/packages/plugin-react-swc/playground/ts-lib/src/app.tsx new file mode 100644 index 000000000..fc8ba7dfa --- /dev/null +++ b/packages/plugin-react-swc/playground/ts-lib/src/app.tsx @@ -0,0 +1,11 @@ +import TestNonJs from '@vitejs/test-dep-non-js' + +export default function App() { + return ( +
+
+ +
+
+ ) +} diff --git a/packages/plugin-react-swc/playground/ts-lib/src/index.tsx b/packages/plugin-react-swc/playground/ts-lib/src/index.tsx index 991484efc..c0e262737 100644 --- a/packages/plugin-react-swc/playground/ts-lib/src/index.tsx +++ b/packages/plugin-react-swc/playground/ts-lib/src/index.tsx @@ -1,9 +1,9 @@ import { StrictMode } from 'react' import { createRoot } from 'react-dom/client' -import { Routes } from 'generouted/react-router' +import App from './app' createRoot(document.getElementById('root')!).render( - + , ) diff --git a/packages/plugin-react-swc/playground/ts-lib/src/pages/404.tsx b/packages/plugin-react-swc/playground/ts-lib/src/pages/404.tsx deleted file mode 100644 index 6e9fc906c..000000000 --- a/packages/plugin-react-swc/playground/ts-lib/src/pages/404.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export default function NotFound() { - return

404

-} diff --git a/packages/plugin-react-swc/playground/ts-lib/src/pages/_app.tsx b/packages/plugin-react-swc/playground/ts-lib/src/pages/_app.tsx deleted file mode 100644 index 977445f78..000000000 --- a/packages/plugin-react-swc/playground/ts-lib/src/pages/_app.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { Link, Outlet } from 'react-router-dom' - -export default function App() { - return ( -
-
- Home - About -
- -
- -
-
- ) -} diff --git a/packages/plugin-react-swc/playground/ts-lib/src/pages/about.tsx b/packages/plugin-react-swc/playground/ts-lib/src/pages/about.tsx deleted file mode 100644 index 5e6d93641..000000000 --- a/packages/plugin-react-swc/playground/ts-lib/src/pages/about.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export default function About() { - return

About page

-} diff --git a/packages/plugin-react-swc/playground/ts-lib/src/pages/index.tsx b/packages/plugin-react-swc/playground/ts-lib/src/pages/index.tsx deleted file mode 100644 index 342887999..000000000 --- a/packages/plugin-react-swc/playground/ts-lib/src/pages/index.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { Outlet } from 'react-router-dom' - -export default function Home() { - return ( -
-

Home page

- -
- ) -} diff --git a/packages/plugin-react-swc/playground/ts-lib/test-dep/non-js/index.tsx b/packages/plugin-react-swc/playground/ts-lib/test-dep/non-js/index.tsx new file mode 100644 index 000000000..c3603614c --- /dev/null +++ b/packages/plugin-react-swc/playground/ts-lib/test-dep/non-js/index.tsx @@ -0,0 +1,10 @@ +import React from 'react' + +export default function TestNonJs() { + const [count, setCount] = React.useState(0) + return ( + + ) +} diff --git a/packages/plugin-react-swc/playground/ts-lib/test-dep/non-js/package.json b/packages/plugin-react-swc/playground/ts-lib/test-dep/non-js/package.json new file mode 100644 index 000000000..6e098895e --- /dev/null +++ b/packages/plugin-react-swc/playground/ts-lib/test-dep/non-js/package.json @@ -0,0 +1,9 @@ +{ + "name": "@vitejs/test-dep-non-js", + "private": true, + "type": "module", + "exports": "./index.tsx", + "peerDependencies": { + "react": "*" + } +} diff --git a/packages/plugin-react-swc/playground/ts-lib/vite.config.ts b/packages/plugin-react-swc/playground/ts-lib/vite.config.ts index b9f401547..7af9f6f97 100644 --- a/packages/plugin-react-swc/playground/ts-lib/vite.config.ts +++ b/packages/plugin-react-swc/playground/ts-lib/vite.config.ts @@ -2,6 +2,5 @@ import { defineConfig } from 'vite' import react from '@vitejs/plugin-react-swc' export default defineConfig({ - optimizeDeps: { include: ['react-router-dom'] }, plugins: [react()], }) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cda6eb118..19c01e53d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,8 +10,6 @@ catalogs: specifier: npm:rolldown-vite@^7.0.5 version: 7.0.5 -packageExtensionsChecksum: sha256-S82yCctxnlOTNFuHWCyTFRo/B6Y3jque/4DnsDO4WZA= - importers: .: @@ -397,21 +395,15 @@ importers: packages/plugin-react-swc/playground/ts-lib: dependencies: - '@generouted/react-router': - specifier: ^1.20.0 - version: 1.20.0(react-router-dom@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-router@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) - generouted: - specifier: 1.11.7 - version: 1.11.7(react-router-dom@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + '@vitejs/test-dep-non-js': + specifier: file:./test-dep/non-js + version: file:packages/plugin-react-swc/playground/ts-lib/test-dep/non-js(react@19.1.0) react: specifier: ^19.1.0 version: 19.1.0 react-dom: specifier: ^19.1.0 version: 19.1.0(react@19.1.0) - react-router-dom: - specifier: ^7.6.3 - version: 7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) devDependencies: '@types/react': specifier: ^19.1.8 @@ -423,6 +415,8 @@ importers: specifier: ../../dist version: link:../../dist + packages/plugin-react-swc/playground/ts-lib/test-dep/non-js: {} + packages/plugin-react-swc/playground/worker: dependencies: react: @@ -1947,13 +1941,6 @@ packages: resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} engines: {node: '>=14'} - '@generouted/react-router@1.20.0': - resolution: {integrity: sha512-VAOdbH/Z2MzroTB61XYsS1uMJvX5am7CKuF/MgF3ZXS6YSvA6rz9pvQxZbg5PIK4R9h7bsA/oRQlJNLSgQKjEA==} - peerDependencies: - react: '>=18' - react-router: '>=7' - vite: '>=5' - '@hiogawa/utils@1.7.0': resolution: {integrity: sha512-ghiEFWBR1NENoHn+lSuW7liicTIzVPN+8Srm5UedCTw43gus0mlse6Wp2lz6GmbOXJ/CalMPp/0Tz2X8tajkAg==} @@ -3010,6 +2997,11 @@ packages: peerDependencies: react: '*' + '@vitejs/test-dep-non-js@file:packages/plugin-react-swc/playground/ts-lib/test-dep/non-js': + resolution: {directory: packages/plugin-react-swc/playground/ts-lib/test-dep/non-js, type: directory} + peerDependencies: + react: '*' + '@vitejs/test-dep-server-in-client@file:packages/plugin-rsc/examples/basic/test-dep/server-in-client': resolution: {directory: packages/plugin-rsc/examples/basic/test-dep/server-in-client, type: directory} peerDependencies: @@ -3806,20 +3798,6 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - generouted@1.11.7: - resolution: {integrity: sha512-CFOF2N8upP84E5Lh7l1F9lC7XgHHkokKMptC+zD/T7K2f++gQH6OEIUv7XIIuwWfZAz8DtdQXVph4bB5Wg8vcw==} - 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==} engines: {node: '>=6.9.0'} @@ -4924,13 +4902,6 @@ packages: resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} engines: {node: '>=0.10.0'} - react-router-dom@7.6.3: - resolution: {integrity: sha512-DiWJm9qdUAmiJrVWaeJdu4TKu13+iB/8IEi0EW/XgaHCjW/vWGrwzup0GVvaMteuZjKnh5bEvJP/K0MDnzawHw==} - engines: {node: '>=20.0.0'} - peerDependencies: - react: '>=18' - react-dom: '>=18' - react-router@0.0.0-experimental-23decd7bc: resolution: {integrity: sha512-oTDa74rdP6WACxX8wihI71TiwQa+3aAXNjGGm20OAyA4hGdfe0VBEbJvuIT0vxR+LKsJisI4rpaq0boBGY3m+g==} engines: {node: '>=20.0.0'} @@ -4941,16 +4912,6 @@ packages: react-dom: optional: true - react-router@7.6.3: - resolution: {integrity: sha512-zf45LZp5skDC6I3jDLXQUu0u26jtuP4lEGbc7BbdyxenBN1vJSTA18czM2D+h5qyMBuMrD+9uB+mU37HIoKGRA==} - engines: {node: '>=20.0.0'} - peerDependencies: - react: '>=18' - react-dom: '>=18' - peerDependenciesMeta: - react-dom: - optional: true - react-server-dom-webpack@19.1.0: resolution: {integrity: sha512-GUbawkNSN0oj8GnuNhMzsvyIHpXqqpAmyOY5NRqNNQ/M8wvUUN8YBoGjDUj9lbmBrmAHS65BByp6325CcWA0eg==} engines: {node: '>=0.10.0'} @@ -6584,16 +6545,6 @@ snapshots: '@fastify/busboy@2.1.1': {} - '@generouted/react-router@1.20.0(react-router-dom@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-router@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': - dependencies: - fast-glob: 3.3.3 - generouted: 1.20.0(react-router-dom@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) - react: 19.1.0 - react-router: 7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - transitivePeerDependencies: - - react-router-dom - '@hiogawa/utils@1.7.0': {} '@humanfs/core@0.19.1': {} @@ -7572,6 +7523,10 @@ snapshots: dependencies: react: 19.1.0 + '@vitejs/test-dep-non-js@file:packages/plugin-react-swc/playground/ts-lib/test-dep/non-js(react@19.1.0)': + dependencies: + react: 19.1.0 + '@vitejs/test-dep-server-in-client@file:packages/plugin-rsc/examples/basic/test-dep/server-in-client(react@19.1.0)': dependencies: react: 19.1.0 @@ -8476,18 +8431,6 @@ snapshots: function-bind@1.1.2: {} - generouted@1.11.7(react-router-dom@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): - dependencies: - react: 19.1.0 - react-router-dom: 7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - - generouted@1.20.0(react-router-dom@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): - dependencies: - react: 19.1.0 - react-router-dom: 7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - gensync@1.0.0-beta.2: {} get-east-asian-width@1.2.0: {} @@ -9712,12 +9655,6 @@ snapshots: react-refresh@0.17.0: {} - react-router-dom@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0): - dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-router: 7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react-router@0.0.0-experimental-23decd7bc(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: cookie: 1.0.2 @@ -9726,14 +9663,6 @@ snapshots: optionalDependencies: react-dom: 19.1.0(react@19.1.0) - react-router@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0): - dependencies: - cookie: 1.0.2 - react: 19.1.0 - set-cookie-parser: 2.7.1 - optionalDependencies: - react-dom: 19.1.0(react@19.1.0) - react-server-dom-webpack@19.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: acorn-loose: 8.5.2 From 1a4a7bbc051ea22f3290f8abed2e5966ce60e4da Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 9 Jul 2025 08:52:37 +0900 Subject: [PATCH 076/313] chore(rsc): tweak cloudflare setting on rolldown-vite (#551) --- .../plugin-rsc/examples/starter-cf-single/vite.config.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/packages/plugin-rsc/examples/starter-cf-single/vite.config.ts b/packages/plugin-rsc/examples/starter-cf-single/vite.config.ts index 9df9911f8..3b839553c 100644 --- a/packages/plugin-rsc/examples/starter-cf-single/vite.config.ts +++ b/packages/plugin-rsc/examples/starter-cf-single/vite.config.ts @@ -35,12 +35,6 @@ export default defineConfig({ platform: 'neutral', }, }, - optimizeDeps: { - // @ts-ignore rolldown - rollupOptions: { - platform: 'neutral', - }, - }, }, ssr: { keepProcessEnv: false, From 822e7dd4e4ef3a613f734f46ad8681957881c4ba Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Thu, 10 Jul 2025 13:44:30 +0900 Subject: [PATCH 077/313] chore(rsc): update readme (#553) --- packages/plugin-rsc/README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/plugin-rsc/README.md b/packages/plugin-rsc/README.md index fe626c73a..63480b6a1 100644 --- a/packages/plugin-rsc/README.md +++ b/packages/plugin-rsc/README.md @@ -130,7 +130,7 @@ export default defineConfig({ - [`entry.rsc.tsx`](./examples/starter/src/framework/entry.rsc.tsx) ```tsx -import * as ReactServer from '@vitejs/plugin-rsc/rsc' // re-export of react-server-dom/server.edge +import * as ReactServer from '@vitejs/plugin-rsc/rsc' // re-export of react-server-dom/server.edge and client.edge // the plugin assumes `rsc` entry having default export of request handler export default async function handler(request: Request): Promise { @@ -214,11 +214,12 @@ main(); ### `@vitejs/plugin-rsc/rsc` -This module re-exports RSC runtime API provided by `react-server-dom/server.edge` +This module re-exports RSC runtime API provided by `react-server-dom/server.edge` and `react-server-dom/client.edge` such as: - `renderToReadableStream`: RSC serialization (React VDOM -> RSC stream) - `createFromReadableStream`: RSC deserialization (RSC stream -> React VDOM). This is also available on rsc environment itself. For example, it allows saving serailized RSC and deserializing it for later use. -- `decodeAction/decodeReply/loadServerAction`: server function related... +- `decodeAction/decodeReply/decodeFormState/loadServerAction/createTemporaryReferenceSet` +- `encodeReply/createClientTemporaryReferenceSet` ### `@vitejs/plugin-rsc/ssr` From 840f0b1386b65e6c96ca3b953a2811348ec5c3a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0?= Date: Thu, 10 Jul 2025 23:19:13 +0900 Subject: [PATCH 078/313] chore(deps): update prettier (#556) --- CONTRIBUTING.md | 2 -- package.json | 2 +- packages/plugin-react/src/index.ts | 2 +- packages/plugin-rsc/examples/basic/wrangler.jsonc | 4 ++-- .../plugin-rsc/examples/react-router/app/paper.css | 4 ++-- .../examples/react-router/cf/wrangler.rsc.jsonc | 2 +- .../examples/react-router/cf/wrangler.ssr.jsonc | 2 +- .../examples/starter-cf-single/wrangler.jsonc | 2 +- pnpm-lock.yaml | 11 +++++++++-- 9 files changed, 18 insertions(+), 13 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f1a4e84dc..d912057d8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -13,12 +13,10 @@ This repo is a monorepo using pnpm workspaces. The package manager used to insta - Checkout a topic branch from a base branch (e.g. `main`), and merge back against that branch. - If adding a new feature: - - Add accompanying test case. - Provide a convincing reason to add this feature. Ideally, you should open a suggestion issue first, and have it approved before working on it. - If fixing a bug: - - If you are resolving a special issue, add `(fix #xxxx[,#xxxx])` (#xxxx is the issue id) in your PR title for a better release log (e.g. `fix: update entities encoding/decoding (fix #3899)`). - Provide a detailed description of the bug in the PR. Live demo preferred. - Add appropriate test coverage if applicable. diff --git a/package.json b/package.json index efc3ce13d..54f33e1d2 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "lint-staged": "^15.5.2", "picocolors": "^1.1.1", "playwright-chromium": "^1.53.2", - "prettier": "^3.0.3", + "prettier": "^3.6.2", "simple-git-hooks": "^2.13.0", "tsx": "^4.20.3", "typescript": "^5.8.3", diff --git a/packages/plugin-react/src/index.ts b/packages/plugin-react/src/index.ts index ed5756531..9234eae9c 100644 --- a/packages/plugin-react/src/index.ts +++ b/packages/plugin-react/src/index.ts @@ -351,7 +351,7 @@ export default function viteReact(opts: Options = {}): Plugin[] { jsxImportRuntime, ] const staticBabelPlugins = - typeof opts.babel === 'object' ? opts.babel?.plugins ?? [] : [] + typeof opts.babel === 'object' ? (opts.babel?.plugins ?? []) : [] const reactCompilerPlugin = getReactCompilerPlugin(staticBabelPlugins) if (reactCompilerPlugin != null) { const reactCompilerRuntimeModule = diff --git a/packages/plugin-rsc/examples/basic/wrangler.jsonc b/packages/plugin-rsc/examples/basic/wrangler.jsonc index d5cb469b8..0d5ead71e 100644 --- a/packages/plugin-rsc/examples/basic/wrangler.jsonc +++ b/packages/plugin-rsc/examples/basic/wrangler.jsonc @@ -3,9 +3,9 @@ "name": "vite-rsc-basic", "main": "dist/rsc/cloudflare.js", "assets": { - "directory": "dist/client" + "directory": "dist/client", }, "workers_dev": true, "compatibility_date": "2025-04-01", - "compatibility_flags": ["nodejs_als"] + "compatibility_flags": ["nodejs_als"], } diff --git a/packages/plugin-rsc/examples/react-router/app/paper.css b/packages/plugin-rsc/examples/react-router/app/paper.css index a4087ac5a..761e51864 100644 --- a/packages/plugin-rsc/examples/react-router/app/paper.css +++ b/packages/plugin-rsc/examples/react-router/app/paper.css @@ -87,8 +87,8 @@ } @utility btn-* { - border-color: --value(--btn-color- *); - color: --value(--btn-color- *); + border-color: --value(--btn-color-*); + color: --value(--btn-color-*); } @utility btn-sm { diff --git a/packages/plugin-rsc/examples/react-router/cf/wrangler.rsc.jsonc b/packages/plugin-rsc/examples/react-router/cf/wrangler.rsc.jsonc index 68270a8be..67cdb5435 100644 --- a/packages/plugin-rsc/examples/react-router/cf/wrangler.rsc.jsonc +++ b/packages/plugin-rsc/examples/react-router/cf/wrangler.rsc.jsonc @@ -4,5 +4,5 @@ "main": "./entry.rsc.tsx", "workers_dev": true, "compatibility_date": "2025-04-01", - "compatibility_flags": ["nodejs_als"] + "compatibility_flags": ["nodejs_als"], } diff --git a/packages/plugin-rsc/examples/react-router/cf/wrangler.ssr.jsonc b/packages/plugin-rsc/examples/react-router/cf/wrangler.ssr.jsonc index bfc7066b0..22b718b03 100644 --- a/packages/plugin-rsc/examples/react-router/cf/wrangler.ssr.jsonc +++ b/packages/plugin-rsc/examples/react-router/cf/wrangler.ssr.jsonc @@ -5,5 +5,5 @@ "workers_dev": true, "services": [{ "binding": "RSC", "service": "vite-rsc-react-router-rsc" }], "compatibility_date": "2025-04-01", - "compatibility_flags": ["nodejs_als"] + "compatibility_flags": ["nodejs_als"], } diff --git a/packages/plugin-rsc/examples/starter-cf-single/wrangler.jsonc b/packages/plugin-rsc/examples/starter-cf-single/wrangler.jsonc index bbd479cbb..c098e4362 100644 --- a/packages/plugin-rsc/examples/starter-cf-single/wrangler.jsonc +++ b/packages/plugin-rsc/examples/starter-cf-single/wrangler.jsonc @@ -4,5 +4,5 @@ "main": "./src/framework/entry.rsc.tsx", "workers_dev": true, "compatibility_date": "2025-04-01", - "compatibility_flags": ["nodejs_als"] + "compatibility_flags": ["nodejs_als"], } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 19c01e53d..d5f145142 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -54,8 +54,8 @@ importers: specifier: ^1.53.2 version: 1.53.2 prettier: - specifier: ^3.0.3 - version: 3.1.0 + specifier: ^3.6.2 + version: 3.6.2 simple-git-hooks: specifier: ^2.13.0 version: 2.13.0 @@ -4825,6 +4825,11 @@ packages: engines: {node: '>=14'} hasBin: true + prettier@3.6.2: + resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} + engines: {node: '>=14'} + hasBin: true + pretty-bytes@6.1.1: resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} engines: {node: ^14.13.1 || >=16.0.0} @@ -9593,6 +9598,8 @@ snapshots: prettier@3.1.0: {} + prettier@3.6.2: {} + pretty-bytes@6.1.1: {} printable-characters@1.0.42: {} From fb5e40d784be2109885c2c6168ee9cc11c7592a8 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Fri, 11 Jul 2025 12:40:49 +0900 Subject: [PATCH 079/313] ci(rsc): disable `TEST_ISOLATED` on windows (#558) --- .github/workflows/ci-rsc.yml | 2 +- packages/plugin-rsc/e2e/basic.test.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-rsc.yml b/.github/workflows/ci-rsc.yml index b21b0d0b3..19107c4da 100644 --- a/.github/workflows/ci-rsc.yml +++ b/.github/workflows/ci-rsc.yml @@ -63,7 +63,7 @@ jobs: - run: pnpm -C packages/plugin-rsc exec playwright install ${{ matrix.browser }} - run: pnpm -C packages/plugin-rsc test-e2e-ci --project=${{ matrix.browser }} env: - TEST_ISOLATED: true + TEST_ISOLATED: ${{ matrix.os != 'windows-latest' }} - uses: actions/upload-artifact@v4 if: always() with: diff --git a/packages/plugin-rsc/e2e/basic.test.ts b/packages/plugin-rsc/e2e/basic.test.ts index a1ef08495..77066ce42 100644 --- a/packages/plugin-rsc/e2e/basic.test.ts +++ b/packages/plugin-rsc/e2e/basic.test.ts @@ -105,7 +105,7 @@ test.describe('build-react-compiler', () => { test.describe(() => { // disabled by default - if (!process.env.TEST_ISOLATED) return + if (process.env.TEST_ISOLATED !== 'true') return let tmpRoot = '/tmp/test-vite-rsc' test.beforeAll(async () => { From 84dfff77f315c7268e1012e68be277ec0efa644a Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Fri, 11 Jul 2025 14:22:54 +0900 Subject: [PATCH 080/313] chore: overrides `@types/estree` to fix type duplicates (#557) --- .github/workflows/ci-rsc.yml | 2 +- pnpm-lock.yaml | 10 ++++------ pnpm-workspace.yaml | 3 +++ 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci-rsc.yml b/.github/workflows/ci-rsc.yml index 19107c4da..cb0015f3e 100644 --- a/.github/workflows/ci-rsc.yml +++ b/.github/workflows/ci-rsc.yml @@ -58,7 +58,7 @@ jobs: - name: install rolldown if: ${{ matrix.rolldown }} run: | - echo 'overrides: { vite: "npm:rolldown-vite@latest" }' >> pnpm-workspace.yaml + sed -i '/^overrides:/a\ vite: "npm:rolldown-vite@latest"' pnpm-workspace.yaml pnpm i --no-frozen-lockfile - run: pnpm -C packages/plugin-rsc exec playwright install ${{ matrix.browser }} - run: pnpm -C packages/plugin-rsc test-e2e-ci --project=${{ matrix.browser }} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d5f145142..4293f734e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,6 +10,9 @@ catalogs: specifier: npm:rolldown-vite@^7.0.5 version: 7.0.5 +overrides: + '@types/estree': ^1.0.8 + importers: .: @@ -2754,9 +2757,6 @@ packages: '@types/estree-jsx@1.0.3': resolution: {integrity: sha512-pvQ+TKeRHeiUGRhvYwRrQ/ISnohKkSJR14fT2yqyZ4e9K5vqc7hrtY2Y1Dw0ZwAzQ6DQsxsaCUuSIIi8v0Cq6w==} - '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -7281,8 +7281,6 @@ snapshots: dependencies: '@types/estree': 1.0.8 - '@types/estree@1.0.6': {} - '@types/estree@1.0.8': {} '@types/fs-extra@11.0.4': @@ -9812,7 +9810,7 @@ snapshots: rollup@4.37.0: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.8 optionalDependencies: '@rollup/rollup-android-arm-eabi': 4.37.0 '@rollup/rollup-android-arm64': 4.37.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 7471e6f9b..3a829e192 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -7,3 +7,6 @@ packages: catalogs: rolldown-vite: vite: npm:rolldown-vite@^7.0.5 + +overrides: + '@types/estree': ^1.0.8 From 22be17f72f3ec97ecb03e54a59cb9384de50a537 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0?= Date: Fri, 11 Jul 2025 15:03:42 +0900 Subject: [PATCH 081/313] build: use tsdown for plugin-react / plugin-react-oxc (#554) --- packages/plugin-react-oxc/build.config.ts | 14 ----- packages/plugin-react-oxc/package.json | 9 +-- .../scripts/copyRefreshRuntime.ts | 6 -- packages/plugin-react-oxc/src/build.d.ts | 7 --- packages/plugin-react-oxc/src/index.ts | 6 +- packages/plugin-react-oxc/tsconfig.json | 2 +- packages/plugin-react-oxc/tsdown.config.ts | 11 ++++ packages/plugin-react/build.config.ts | 15 ----- packages/plugin-react/package.json | 13 ++--- .../scripts/copyRefreshRuntime.ts | 6 -- packages/plugin-react/src/build.d.ts | 7 --- packages/plugin-react/src/index.ts | 5 +- packages/plugin-react/tsconfig.json | 2 +- packages/plugin-react/tsdown.config.ts | 24 ++++++++ pnpm-lock.yaml | 31 ++++------ scripts/patchCJS.ts | 57 ------------------- 16 files changed, 61 insertions(+), 154 deletions(-) delete mode 100644 packages/plugin-react-oxc/build.config.ts delete mode 100644 packages/plugin-react-oxc/scripts/copyRefreshRuntime.ts delete mode 100644 packages/plugin-react-oxc/src/build.d.ts create mode 100644 packages/plugin-react-oxc/tsdown.config.ts delete mode 100644 packages/plugin-react/build.config.ts delete mode 100644 packages/plugin-react/scripts/copyRefreshRuntime.ts delete mode 100644 packages/plugin-react/src/build.d.ts create mode 100644 packages/plugin-react/tsdown.config.ts delete mode 100644 scripts/patchCJS.ts diff --git a/packages/plugin-react-oxc/build.config.ts b/packages/plugin-react-oxc/build.config.ts deleted file mode 100644 index 68131222c..000000000 --- a/packages/plugin-react-oxc/build.config.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { defineBuildConfig } from 'unbuild' - -export default defineBuildConfig({ - entries: ['src/index'], - externals: ['vite'], - clean: true, - declaration: true, - rollup: { - inlineDependencies: true, - }, - replace: { - 'globalThis.__IS_BUILD__': 'true', - }, -}) diff --git a/packages/plugin-react-oxc/package.json b/packages/plugin-react-oxc/package.json index de0af4a01..cc860a81a 100644 --- a/packages/plugin-react-oxc/package.json +++ b/packages/plugin-react-oxc/package.json @@ -20,11 +20,11 @@ "dist" ], "type": "module", - "types": "./dist/index.d.mts", - "exports": "./dist/index.mjs", + "types": "./dist/index.d.ts", + "exports": "./dist/index.js", "scripts": { - "dev": "unbuild --stub", - "build": "unbuild && tsx scripts/copyRefreshRuntime.ts", + "dev": "tsdown --watch", + "build": "tsdown", "prepublishOnly": "npm run build" }, "engines": { @@ -44,6 +44,7 @@ }, "devDependencies": { "@vitejs/react-common": "workspace:*", + "tsdown": "^0.12.9", "unbuild": "^3.5.0", "vite": "catalog:rolldown-vite" }, diff --git a/packages/plugin-react-oxc/scripts/copyRefreshRuntime.ts b/packages/plugin-react-oxc/scripts/copyRefreshRuntime.ts deleted file mode 100644 index 2666e968e..000000000 --- a/packages/plugin-react-oxc/scripts/copyRefreshRuntime.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { copyFileSync } from 'node:fs' - -copyFileSync( - 'node_modules/@vitejs/react-common/refresh-runtime.js', - 'dist/refresh-runtime.js', -) diff --git a/packages/plugin-react-oxc/src/build.d.ts b/packages/plugin-react-oxc/src/build.d.ts deleted file mode 100644 index 262bd804b..000000000 --- a/packages/plugin-react-oxc/src/build.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -declare global { - /** replaced by unbuild only in build */ - // eslint-disable-next-line no-var --- top level var has to be var - var __IS_BUILD__: boolean | void -} - -export {} diff --git a/packages/plugin-react-oxc/src/index.ts b/packages/plugin-react-oxc/src/index.ts index 0d7fa5717..d54da0ded 100644 --- a/packages/plugin-react-oxc/src/index.ts +++ b/packages/plugin-react-oxc/src/index.ts @@ -12,11 +12,7 @@ import { import { exactRegex } from '@rolldown/pluginutils' const _dirname = dirname(fileURLToPath(import.meta.url)) - -const refreshRuntimePath = globalThis.__IS_BUILD__ - ? join(_dirname, 'refresh-runtime.js') - : // eslint-disable-next-line n/no-unsupported-features/node-builtins -- only used in dev - fileURLToPath(import.meta.resolve('@vitejs/react-common/refresh-runtime')) +const refreshRuntimePath = join(_dirname, 'refresh-runtime.js') export interface Options { include?: string | RegExp | Array diff --git a/packages/plugin-react-oxc/tsconfig.json b/packages/plugin-react-oxc/tsconfig.json index e2b17f9c7..1d2f67860 100644 --- a/packages/plugin-react-oxc/tsconfig.json +++ b/packages/plugin-react-oxc/tsconfig.json @@ -1,5 +1,5 @@ { - "include": ["src", "scripts"], + "include": ["src"], "compilerOptions": { "outDir": "dist", "target": "ES2020", diff --git a/packages/plugin-react-oxc/tsdown.config.ts b/packages/plugin-react-oxc/tsdown.config.ts new file mode 100644 index 000000000..1f9c7eb25 --- /dev/null +++ b/packages/plugin-react-oxc/tsdown.config.ts @@ -0,0 +1,11 @@ +import { defineConfig } from 'tsdown' + +export default defineConfig({ + entry: 'src/index.ts', + copy: [ + { + from: 'node_modules/@vitejs/react-common/refresh-runtime.js', + to: 'dist/refresh-runtime.js', + }, + ], +}) diff --git a/packages/plugin-react/build.config.ts b/packages/plugin-react/build.config.ts deleted file mode 100644 index 98285c8d0..000000000 --- a/packages/plugin-react/build.config.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { defineBuildConfig } from 'unbuild' - -export default defineBuildConfig({ - entries: ['src/index'], - externals: ['vite'], - clean: true, - declaration: true, - rollup: { - emitCJS: true, - inlineDependencies: true, - }, - replace: { - 'globalThis.__IS_BUILD__': 'true', - }, -}) diff --git a/packages/plugin-react/package.json b/packages/plugin-react/package.json index 53cf9b1ba..8a222df8f 100644 --- a/packages/plugin-react/package.json +++ b/packages/plugin-react/package.json @@ -21,18 +21,17 @@ ], "type": "module", "main": "./dist/index.cjs", - "module": "./dist/index.mjs", - "types": "./dist/index.d.mts", + "module": "./dist/index.js", + "types": "./dist/index.d.ts", "exports": { ".": { - "import": "./dist/index.mjs", + "import": "./dist/index.js", "require": "./dist/index.cjs" } }, "scripts": { - "dev": "unbuild --stub", - "build": "unbuild && pnpm run patch-cjs && tsx scripts/copyRefreshRuntime.ts", - "patch-cjs": "tsx ../../scripts/patchCJS.ts", + "dev": "tsdown --watch", + "build": "tsdown", "prepublishOnly": "npm run build", "test-unit": "vitest run" }, @@ -65,7 +64,7 @@ "react": "^19.1.0", "react-dom": "^19.1.0", "rolldown": "1.0.0-beta.24", - "unbuild": "^3.5.0", + "tsdown": "^0.12.9", "vitest": "^3.2.4" } } diff --git a/packages/plugin-react/scripts/copyRefreshRuntime.ts b/packages/plugin-react/scripts/copyRefreshRuntime.ts deleted file mode 100644 index 2666e968e..000000000 --- a/packages/plugin-react/scripts/copyRefreshRuntime.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { copyFileSync } from 'node:fs' - -copyFileSync( - 'node_modules/@vitejs/react-common/refresh-runtime.js', - 'dist/refresh-runtime.js', -) diff --git a/packages/plugin-react/src/build.d.ts b/packages/plugin-react/src/build.d.ts deleted file mode 100644 index 262bd804b..000000000 --- a/packages/plugin-react/src/build.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -declare global { - /** replaced by unbuild only in build */ - // eslint-disable-next-line no-var --- top level var has to be var - var __IS_BUILD__: boolean | void -} - -export {} diff --git a/packages/plugin-react/src/index.ts b/packages/plugin-react/src/index.ts index 9234eae9c..f8dd135a4 100644 --- a/packages/plugin-react/src/index.ts +++ b/packages/plugin-react/src/index.ts @@ -19,10 +19,7 @@ import { } from '@rolldown/pluginutils' const _dirname = dirname(fileURLToPath(import.meta.url)) - -const refreshRuntimePath = globalThis.__IS_BUILD__ - ? join(_dirname, 'refresh-runtime.js') - : join(_dirname, '../../common/refresh-runtime.js') +const refreshRuntimePath = join(_dirname, 'refresh-runtime.js') // lazy load babel since it's not used during build if plugins are not used let babel: typeof babelCore | undefined diff --git a/packages/plugin-react/tsconfig.json b/packages/plugin-react/tsconfig.json index e2b17f9c7..1d2f67860 100644 --- a/packages/plugin-react/tsconfig.json +++ b/packages/plugin-react/tsconfig.json @@ -1,5 +1,5 @@ { - "include": ["src", "scripts"], + "include": ["src"], "compilerOptions": { "outDir": "dist", "target": "ES2020", diff --git a/packages/plugin-react/tsdown.config.ts b/packages/plugin-react/tsdown.config.ts new file mode 100644 index 000000000..f816d7ae2 --- /dev/null +++ b/packages/plugin-react/tsdown.config.ts @@ -0,0 +1,24 @@ +import { defineConfig } from 'tsdown' + +export default defineConfig({ + entry: 'src/index.ts', + format: ['esm', 'cjs'], + copy: [ + { + from: 'node_modules/@vitejs/react-common/refresh-runtime.js', + to: 'dist/refresh-runtime.js', + }, + ], + outputOptions(outputOpts, format) { + if (format === 'cjs') { + outputOpts.footer = (chunk) => { + // don't append to dts files + if (chunk.fileName.endsWith('.cjs')) { + return 'module.exports.default = module.exports' + } + return '' + } + } + return outputOpts + }, +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4293f734e..36ea67d65 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -116,9 +116,9 @@ importers: rolldown: specifier: 1.0.0-beta.24 version: 1.0.0-beta.24 - unbuild: - specifier: ^3.5.0 - version: 3.5.0(typescript@5.8.3) + tsdown: + specifier: ^0.12.9 + version: 0.12.9(publint@0.3.12)(typescript@5.8.3) vitest: specifier: ^3.2.4 version: 3.2.4(@types/debug@4.1.12)(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) @@ -132,6 +132,9 @@ importers: '@vitejs/react-common': specifier: workspace:* version: link:../common + tsdown: + specifier: ^0.12.9 + version: 0.12.9(publint@0.3.12)(typescript@5.8.3) unbuild: specifier: ^3.5.0 version: 3.5.0(typescript@5.8.3) @@ -3725,14 +3728,6 @@ packages: fd-package-json@1.2.0: resolution: {integrity: sha512-45LSPmWf+gC5tdCQMNH4s9Sr00bIkiD9aN7dc5hqkrEw1geRYyDQS1v1oMHAW3ysfxfndqGsrDREHHjNNbKUfA==} - fdir@6.4.4: - resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - fdir@6.4.6: resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} peerDependencies: @@ -7633,7 +7628,7 @@ snapshots: ast-kit@2.1.1: dependencies: - '@babel/parser': 7.27.7 + '@babel/parser': 7.28.0 pathe: 2.0.3 astring@1.8.6: {} @@ -8368,10 +8363,6 @@ snapshots: dependencies: walk-up-path: 3.0.1 - fdir@6.4.4(picomatch@4.0.2): - optionalDependencies: - picomatch: 4.0.2 - fdir@6.4.6(picomatch@4.0.2): optionalDependencies: picomatch: 4.0.2 @@ -9748,9 +9739,9 @@ snapshots: rolldown-plugin-dts@0.13.13(rolldown@1.0.0-beta.24)(typescript@5.8.3): dependencies: - '@babel/generator': 7.27.5 - '@babel/parser': 7.27.7 - '@babel/types': 7.27.7 + '@babel/generator': 7.28.0 + '@babel/parser': 7.28.0 + '@babel/types': 7.28.0 ast-kit: 2.1.1 birpc: 2.4.0 debug: 4.4.1 @@ -10108,7 +10099,7 @@ snapshots: tinyglobby@0.2.14: dependencies: - fdir: 6.4.4(picomatch@4.0.2) + fdir: 6.4.6(picomatch@4.0.2) picomatch: 4.0.2 tinypool@1.1.1: {} diff --git a/scripts/patchCJS.ts b/scripts/patchCJS.ts deleted file mode 100644 index 192264e6a..000000000 --- a/scripts/patchCJS.ts +++ /dev/null @@ -1,57 +0,0 @@ -/** - -It converts - -```ts -exports.default = vuePlugin; -exports.parseVueRequest = parseVueRequest; -``` - -to - -```ts -module.exports = vuePlugin; -module.exports.default = vuePlugin; -module.exports.parseVueRequest = parseVueRequest; -``` -*/ - -import { readFileSync, writeFileSync } from 'node:fs' -import colors from 'picocolors' - -const indexPath = 'dist/index.cjs' -let code = readFileSync(indexPath, 'utf-8') - -const matchMixed = code.match(/\nexports.default = (\w+);/) -if (matchMixed) { - const name = matchMixed[1] - - const lines = code.trimEnd().split('\n') - - // search from the end to prepend `modules.` to `export[xxx]` - for (let i = lines.length - 1; i > 0; i--) { - if (lines[i].startsWith('exports')) lines[i] = 'module.' + lines[i] - else { - // at the beginning of exports, export the default function - lines[i] += `\nmodule.exports = ${name};` - break - } - } - - writeFileSync(indexPath, lines.join('\n')) - - console.log(colors.bold(`${indexPath} CJS patched`)) - process.exit(0) -} - -const matchDefault = code.match(/\nmodule.exports = (\w+);/) - -if (matchDefault) { - code += `module.exports.default = ${matchDefault[1]};\n` - writeFileSync(indexPath, code) - console.log(colors.bold(`${indexPath} CJS patched`)) - process.exit(0) -} - -console.error(colors.red(`${indexPath} CJS patch failed`)) -process.exit(1) From 9ff10752d3679208ee88ce1cfcf6f17eb9f3aa8b Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Fri, 11 Jul 2025 15:16:45 +0900 Subject: [PATCH 082/313] ci: fix duplicate artifact name (#560) --- .github/workflows/ci-rsc.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-rsc.yml b/.github/workflows/ci-rsc.yml index cb0015f3e..9a0f234cc 100644 --- a/.github/workflows/ci-rsc.yml +++ b/.github/workflows/ci-rsc.yml @@ -67,6 +67,6 @@ jobs: - uses: actions/upload-artifact@v4 if: always() with: - name: test-results-${{ matrix.os }}-${{ matrix.browser }} + name: test-results-${{ matrix.os }}-${{ matrix.browser }}${{ matrix.rolldown == true && '-rolldown' || '' }} path: | packages/plugin-rsc/test-results From 6328ef2a9e46e2468e6b68b31c623baafc7e3ff1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0?= Date: Fri, 11 Jul 2025 15:30:26 +0900 Subject: [PATCH 083/313] build: use tsdown for plugin-react-swc (#555) Co-authored-by: Hiroshi Ogawa --- packages/plugin-react-swc/package.json | 7 +- packages/plugin-react-swc/scripts/bundle.ts | 91 -------------------- packages/plugin-react-swc/tsconfig.json | 34 ++------ packages/plugin-react-swc/tsconfig.src.json | 27 ++++++ packages/plugin-react-swc/tsconfig.test.json | 25 ++++++ packages/plugin-react-swc/tsdown.config.ts | 64 ++++++++++++++ pnpm-lock.yaml | 9 +- 7 files changed, 127 insertions(+), 130 deletions(-) delete mode 100644 packages/plugin-react-swc/scripts/bundle.ts create mode 100644 packages/plugin-react-swc/tsconfig.src.json create mode 100644 packages/plugin-react-swc/tsconfig.test.json create mode 100644 packages/plugin-react-swc/tsdown.config.ts diff --git a/packages/plugin-react-swc/package.json b/packages/plugin-react-swc/package.json index ae5c286e3..1dcdc32b3 100644 --- a/packages/plugin-react-swc/package.json +++ b/packages/plugin-react-swc/package.json @@ -15,8 +15,8 @@ "type": "module", "private": true, "scripts": { - "dev": "tsx scripts/bundle.ts --dev", - "build": "tsx scripts/bundle.ts", + "dev": "tsdown --watch", + "build": "tsdown", "test": "playwright test" }, "repository": { @@ -40,10 +40,9 @@ "@types/fs-extra": "^11.0.4", "@types/node": "^22.16.0", "@vitejs/react-common": "workspace:*", - "esbuild": "^0.25.5", "fs-extra": "^11.3.0", - "picocolors": "^1.1.1", "prettier": "^3.0.3", + "tsdown": "^0.12.9", "typescript": "^5.8.3" } } diff --git a/packages/plugin-react-swc/scripts/bundle.ts b/packages/plugin-react-swc/scripts/bundle.ts deleted file mode 100644 index dd3c63707..000000000 --- a/packages/plugin-react-swc/scripts/bundle.ts +++ /dev/null @@ -1,91 +0,0 @@ -import { copyFileSync, rmSync, writeFileSync } from 'node:fs' -import { execSync } from 'node:child_process' -import { type BuildOptions, build, context } from 'esbuild' - -import packageJSON from '../package.json' - -const dev = process.argv.includes('--dev') - -rmSync('dist', { force: true, recursive: true }) - -const serverOptions: BuildOptions = { - bundle: true, - platform: 'node', - target: 'node14', - legalComments: 'inline', - external: Object.keys(packageJSON.peerDependencies).concat( - Object.keys(packageJSON.dependencies), - ), -} - -const buildOrWatch = async (options: BuildOptions) => { - if (!dev) return build(options) - const ctx = await context(options) - await ctx.watch() - await ctx.rebuild() -} - -Promise.all([ - buildOrWatch({ - entryPoints: ['@vitejs/react-common/refresh-runtime'], - outdir: 'dist', - platform: 'browser', - format: 'esm', - target: 'safari13', - legalComments: 'inline', - }), - buildOrWatch({ - ...serverOptions, - stdin: { - contents: `import react from "./src"; -module.exports = react; -// For backward compatibility with the first broken version -module.exports.default = react;`, - resolveDir: '.', - }, - outfile: 'dist/index.cjs', - logOverride: { 'empty-import-meta': 'silent' }, - }), - buildOrWatch({ - ...serverOptions, - entryPoints: ['src/index.ts'], - format: 'esm', - outfile: 'dist/index.mjs', - }), -]).then(() => { - copyFileSync('LICENSE', 'dist/LICENSE') - copyFileSync('README.md', 'dist/README.md') - - execSync( - 'tsc src/index.ts --declaration --isolatedDeclarations --noCheck --emitDeclarationOnly --outDir dist --target es2020 --module es2020 --moduleResolution bundler', - { stdio: 'inherit' }, - ) - - writeFileSync( - 'dist/package.json', - JSON.stringify( - { - ...Object.fromEntries( - Object.entries(packageJSON).filter( - ([key, _val]) => - key !== 'devDependencies' && - key !== 'scripts' && - key !== 'private', - ), - ), - main: 'index.cjs', - types: 'index.d.ts', - module: 'index.mjs', - exports: { - '.': { - types: './index.d.ts', - require: './index.cjs', - import: './index.mjs', - }, - }, - }, - null, - 2, - ), - ) -}) diff --git a/packages/plugin-react-swc/tsconfig.json b/packages/plugin-react-swc/tsconfig.json index fb429cf57..ac687cd46 100644 --- a/packages/plugin-react-swc/tsconfig.json +++ b/packages/plugin-react-swc/tsconfig.json @@ -1,31 +1,7 @@ { - "include": [ - "src", - "scripts", - "playwright.config.ts", - "playground/utils.ts", - "playground/*/__tests__" - ], - "compilerOptions": { - /* Target node 22 */ - "module": "ESNext", - "lib": ["ES2023", "DOM"], - "target": "ES2023", - "skipLibCheck": true, - - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "verbatimModuleSyntax": true, - "noEmit": true, - - /* Linting */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true, - "useUnknownInCatchVariables": true, - "noUncheckedSideEffectImports": true, - "noPropertyAccessFromIndexSignature": true - } + "include": [], + "references": [ + { "path": "./tsconfig.src.json" }, + { "path": "./tsconfig.test.json" } + ] } diff --git a/packages/plugin-react-swc/tsconfig.src.json b/packages/plugin-react-swc/tsconfig.src.json new file mode 100644 index 000000000..4194367e6 --- /dev/null +++ b/packages/plugin-react-swc/tsconfig.src.json @@ -0,0 +1,27 @@ +{ + "include": ["src"], + "compilerOptions": { + /* Target node 22 */ + "module": "ESNext", + "lib": ["ES2023", "DOM"], + "target": "ES2023", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + "declaration": true, + "isolatedDeclarations": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "useUnknownInCatchVariables": true, + "noUncheckedSideEffectImports": true, + "noPropertyAccessFromIndexSignature": true + } +} diff --git a/packages/plugin-react-swc/tsconfig.test.json b/packages/plugin-react-swc/tsconfig.test.json new file mode 100644 index 000000000..8bc9cb430 --- /dev/null +++ b/packages/plugin-react-swc/tsconfig.test.json @@ -0,0 +1,25 @@ +{ + "include": ["playwright.config.ts", "playground"], + "compilerOptions": { + /* Target node 22 */ + "module": "ESNext", + "lib": ["ES2023", "DOM"], + "target": "ES2023", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "useUnknownInCatchVariables": true, + "noUncheckedSideEffectImports": true, + "noPropertyAccessFromIndexSignature": true + } +} diff --git a/packages/plugin-react-swc/tsdown.config.ts b/packages/plugin-react-swc/tsdown.config.ts new file mode 100644 index 000000000..8220e365c --- /dev/null +++ b/packages/plugin-react-swc/tsdown.config.ts @@ -0,0 +1,64 @@ +import { writeFileSync } from 'node:fs' +import { defineConfig } from 'tsdown' +import packageJSON from './package.json' with { type: 'json' } + +export default defineConfig({ + entry: 'src/index.ts', + format: ['esm', 'cjs'], + dts: true, + tsconfig: './tsconfig.src.json', // https://github.com/sxzz/rolldown-plugin-dts/issues/55 + copy: [ + { + from: 'node_modules/@vitejs/react-common/refresh-runtime.js', + to: 'dist/refresh-runtime.js', + }, + { + from: 'LICENSE', + to: 'dist/LICENSE', + }, + { + from: 'README.md', + to: 'dist/README.md', + }, + ], + outputOptions(outputOpts, format) { + if (format === 'cjs') { + outputOpts.footer = (chunk) => { + // don't append to dts files + if (chunk.fileName.endsWith('.cjs')) { + return 'module.exports.default = module.exports' + } + return '' + } + } + return outputOpts + }, + onSuccess() { + writeFileSync( + 'dist/package.json', + JSON.stringify( + { + ...Object.fromEntries( + Object.entries(packageJSON).filter( + ([key, _val]) => + key !== 'devDependencies' && + key !== 'scripts' && + key !== 'private', + ), + ), + main: 'index.cjs', + types: 'index.d.ts', + module: 'index.js', + exports: { + '.': { + require: './index.cjs', + import: './index.js', + }, + }, + }, + null, + 2, + ), + ) + }, +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 36ea67d65..388dcc123 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -163,18 +163,15 @@ importers: '@vitejs/react-common': specifier: workspace:* version: link:../common - esbuild: - specifier: ^0.25.5 - version: 0.25.5 fs-extra: specifier: ^11.3.0 version: 11.3.0 - picocolors: - specifier: ^1.1.1 - version: 1.1.1 prettier: specifier: ^3.0.3 version: 3.1.0 + tsdown: + specifier: ^0.12.9 + version: 0.12.9(publint@0.3.12)(typescript@5.8.3) typescript: specifier: ^5.8.3 version: 5.8.3 From aa004d41c5f650dfe8b24fb51b01a79fa94ae612 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Fri, 11 Jul 2025 15:30:44 +0900 Subject: [PATCH 084/313] test(rsc): fix `setupIsolatedFixture` on windows ci (#559) --- .github/workflows/ci-rsc.yml | 2 +- packages/plugin-rsc/e2e/basic.test.ts | 9 ++++++++- packages/plugin-rsc/e2e/fixture.ts | 11 +++++++---- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci-rsc.yml b/.github/workflows/ci-rsc.yml index 9a0f234cc..cb9e932cc 100644 --- a/.github/workflows/ci-rsc.yml +++ b/.github/workflows/ci-rsc.yml @@ -63,7 +63,7 @@ jobs: - run: pnpm -C packages/plugin-rsc exec playwright install ${{ matrix.browser }} - run: pnpm -C packages/plugin-rsc test-e2e-ci --project=${{ matrix.browser }} env: - TEST_ISOLATED: ${{ matrix.os != 'windows-latest' }} + TEST_ISOLATED: true - uses: actions/upload-artifact@v4 if: always() with: diff --git a/packages/plugin-rsc/e2e/basic.test.ts b/packages/plugin-rsc/e2e/basic.test.ts index 77066ce42..cc6cadd06 100644 --- a/packages/plugin-rsc/e2e/basic.test.ts +++ b/packages/plugin-rsc/e2e/basic.test.ts @@ -3,6 +3,8 @@ import { readFileSync } from 'node:fs' import { type Page, expect, test } from '@playwright/test' import { type Fixture, setupIsolatedFixture, useFixture } from './fixture' import { expectNoReload, testNoJs, waitForHydration } from './helper' +import path from 'node:path' +import os from 'node:os' // TODO: parallel? // TODO: all tests don't need to be tested in all variants? @@ -107,7 +109,12 @@ test.describe(() => { // disabled by default if (process.env.TEST_ISOLATED !== 'true') return - let tmpRoot = '/tmp/test-vite-rsc' + // use RUNNER_TEMP on Github Actions + // https://github.com/actions/toolkit/issues/518 + const tmpRoot = path.join( + process.env['RUNNER_TEMP'] || os.tmpdir(), + 'test-vite-rsc', + ) test.beforeAll(async () => { await setupIsolatedFixture({ src: 'examples/basic', dest: tmpRoot }) }) diff --git a/packages/plugin-rsc/e2e/fixture.ts b/packages/plugin-rsc/e2e/fixture.ts index 7d99f99da..b9cf2f070 100644 --- a/packages/plugin-rsc/e2e/fixture.ts +++ b/packages/plugin-rsc/e2e/fixture.ts @@ -153,10 +153,9 @@ export async function setupIsolatedFixture(options: { }) { // copy fixture fs.rmSync(options.dest, { recursive: true, force: true }) - fs.cpSync(options.src, options.dest, { recursive: true }) - fs.rmSync(path.join(options.dest, 'node_modules'), { + fs.cpSync(options.src, options.dest, { recursive: true, - force: true, + filter: (src) => !src.includes('node_modules'), }) // setup package.json overrides @@ -174,7 +173,11 @@ export async function setupIsolatedFixture(options: { throwOnError: true, nodeOptions: { cwd: options.dest, - stdio: process.env.TEST_DEBUG ? 'inherit' : undefined, + stdio: [ + 'ignore', + process.env.TEST_DEBUG ? 'inherit' : 'ignore', + 'inherit', + ], }, }) } From 0fc7fcdae31568dcd2568a10333ad1e79e2d5176 Mon Sep 17 00:00:00 2001 From: Jacob Ebey Date: Fri, 11 Jul 2025 22:32:41 -0700 Subject: [PATCH 085/313] fix(rsc): support setups without an SSR environment (#562) Co-authored-by: Hiroshi Ogawa --- packages/plugin-rsc/e2e/helper.ts | 4 +- packages/plugin-rsc/e2e/starter.test.ts | 35 ++++- packages/plugin-rsc/examples/no-ssr/README.md | 1 + .../plugin-rsc/examples/no-ssr/index.html | 12 ++ .../plugin-rsc/examples/no-ssr/package.json | 23 ++++ .../examples/no-ssr/public/vite.svg | 1 + .../plugin-rsc/examples/no-ssr/src/action.tsx | 11 ++ .../examples/no-ssr/src/assets/react.svg | 1 + .../plugin-rsc/examples/no-ssr/src/client.tsx | 13 ++ .../no-ssr/src/framework/entry.browser.tsx | 122 ++++++++++++++++++ .../no-ssr/src/framework/entry.rsc.tsx | 51 ++++++++ .../plugin-rsc/examples/no-ssr/src/index.css | 112 ++++++++++++++++ .../plugin-rsc/examples/no-ssr/src/root.tsx | 44 +++++++ .../plugin-rsc/examples/no-ssr/tsconfig.json | 18 +++ .../plugin-rsc/examples/no-ssr/vite.config.ts | 65 ++++++++++ packages/plugin-rsc/src/plugin.ts | 34 +++++ pnpm-lock.yaml | 25 ++++ 17 files changed, 568 insertions(+), 4 deletions(-) create mode 100644 packages/plugin-rsc/examples/no-ssr/README.md create mode 100644 packages/plugin-rsc/examples/no-ssr/index.html create mode 100644 packages/plugin-rsc/examples/no-ssr/package.json create mode 100644 packages/plugin-rsc/examples/no-ssr/public/vite.svg create mode 100644 packages/plugin-rsc/examples/no-ssr/src/action.tsx create mode 100644 packages/plugin-rsc/examples/no-ssr/src/assets/react.svg create mode 100644 packages/plugin-rsc/examples/no-ssr/src/client.tsx create mode 100644 packages/plugin-rsc/examples/no-ssr/src/framework/entry.browser.tsx create mode 100644 packages/plugin-rsc/examples/no-ssr/src/framework/entry.rsc.tsx create mode 100644 packages/plugin-rsc/examples/no-ssr/src/index.css create mode 100644 packages/plugin-rsc/examples/no-ssr/src/root.tsx create mode 100644 packages/plugin-rsc/examples/no-ssr/tsconfig.json create mode 100644 packages/plugin-rsc/examples/no-ssr/vite.config.ts diff --git a/packages/plugin-rsc/e2e/helper.ts b/packages/plugin-rsc/e2e/helper.ts index fdb366064..b1b167e38 100644 --- a/packages/plugin-rsc/e2e/helper.ts +++ b/packages/plugin-rsc/e2e/helper.ts @@ -4,12 +4,12 @@ export const testNoJs = test.extend({ javaScriptEnabled: ({}, use) => use(false), }) -export async function waitForHydration(page: Page) { +export async function waitForHydration(page: Page, locator: string = 'body') { await expect .poll( () => page - .locator('body') + .locator(locator) .evaluate( (el) => el && diff --git a/packages/plugin-rsc/e2e/starter.test.ts b/packages/plugin-rsc/e2e/starter.test.ts index f0d6aa233..1ee2c2e0e 100644 --- a/packages/plugin-rsc/e2e/starter.test.ts +++ b/packages/plugin-rsc/e2e/starter.test.ts @@ -1,6 +1,12 @@ import { expect, test } from '@playwright/test' import { type Fixture, useFixture } from './fixture' -import { expectNoReload, testNoJs, waitForHydration } from './helper' +import { + expectNoReload, + testNoJs, + waitForHydration as waitForHydration_, +} from './helper' +import path from 'node:path' +import fs from 'node:fs' test.describe('dev-default', () => { const f = useFixture({ root: 'examples/starter', mode: 'dev' }) @@ -22,7 +28,24 @@ test.describe('build-cloudflare', () => { defineTest(f) }) -function defineTest(f: Fixture) { +test.describe('dev-no-ssr', () => { + const f = useFixture({ root: 'examples/no-ssr', mode: 'dev' }) + defineTest(f, 'no-ssr') +}) + +test.describe('build-no-ssr', () => { + const f = useFixture({ root: 'examples/no-ssr', mode: 'build' }) + defineTest(f, 'no-ssr') + + test('no ssr build', () => { + expect(fs.existsSync(path.join(f.root, 'dist/ssr'))).toBe(false) + }) +}) + +function defineTest(f: Fixture, variant?: 'no-ssr') { + const waitForHydration: typeof waitForHydration_ = (page) => + waitForHydration_(page, variant === 'no-ssr' ? '#root' : 'body') + test('basic', async ({ page }) => { await page.goto(f.url()) await waitForHydration(page) @@ -48,6 +71,8 @@ function defineTest(f: Fixture) { }) testNoJs('server action @nojs', async ({ page }) => { + test.skip(variant === 'no-ssr') + await page.goto(f.url()) await page.getByRole('button', { name: 'Server Counter: 1' }).click() await expect( @@ -71,6 +96,12 @@ function defineTest(f: Fixture) { page.getByRole('button', { name: 'Client [edit] Counter: 1' }), ).toBeVisible() + if (variant === 'no-ssr') { + editor.reset() + await page.getByRole('button', { name: 'Client Counter: 1' }).click() + return + } + // check next ssr is also updated const res = await page.goto(f.url()) expect(await res?.text()).toContain('Client [edit] Counter') diff --git a/packages/plugin-rsc/examples/no-ssr/README.md b/packages/plugin-rsc/examples/no-ssr/README.md new file mode 100644 index 000000000..db13dfe8d --- /dev/null +++ b/packages/plugin-rsc/examples/no-ssr/README.md @@ -0,0 +1 @@ +[examples/starter](https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-rsc/examples/starter) without SSR environment diff --git a/packages/plugin-rsc/examples/no-ssr/index.html b/packages/plugin-rsc/examples/no-ssr/index.html new file mode 100644 index 000000000..01b0331d7 --- /dev/null +++ b/packages/plugin-rsc/examples/no-ssr/index.html @@ -0,0 +1,12 @@ + + + + + + + + + +
+ + diff --git a/packages/plugin-rsc/examples/no-ssr/package.json b/packages/plugin-rsc/examples/no-ssr/package.json new file mode 100644 index 000000000..64a3f79b4 --- /dev/null +++ b/packages/plugin-rsc/examples/no-ssr/package.json @@ -0,0 +1,23 @@ +{ + "name": "@vitejs/plugin-rsc-examples-no-ssr", + "version": "0.0.0", + "private": true, + "license": "MIT", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "@vitejs/plugin-rsc": "latest", + "react": "^19.1.0", + "react-dom": "^19.1.0" + }, + "devDependencies": { + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", + "@vitejs/plugin-react": "latest", + "vite": "^7.0.2" + } +} diff --git a/packages/plugin-rsc/examples/no-ssr/public/vite.svg b/packages/plugin-rsc/examples/no-ssr/public/vite.svg new file mode 100644 index 000000000..e7b8dfb1b --- /dev/null +++ b/packages/plugin-rsc/examples/no-ssr/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/plugin-rsc/examples/no-ssr/src/action.tsx b/packages/plugin-rsc/examples/no-ssr/src/action.tsx new file mode 100644 index 000000000..4fc55d65b --- /dev/null +++ b/packages/plugin-rsc/examples/no-ssr/src/action.tsx @@ -0,0 +1,11 @@ +'use server' + +let serverCounter = 0 + +export async function getServerCounter() { + return serverCounter +} + +export async function updateServerCounter(change: number) { + serverCounter += change +} diff --git a/packages/plugin-rsc/examples/no-ssr/src/assets/react.svg b/packages/plugin-rsc/examples/no-ssr/src/assets/react.svg new file mode 100644 index 000000000..6c87de9bb --- /dev/null +++ b/packages/plugin-rsc/examples/no-ssr/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/plugin-rsc/examples/no-ssr/src/client.tsx b/packages/plugin-rsc/examples/no-ssr/src/client.tsx new file mode 100644 index 000000000..29bb5d367 --- /dev/null +++ b/packages/plugin-rsc/examples/no-ssr/src/client.tsx @@ -0,0 +1,13 @@ +'use client' + +import React from 'react' + +export function ClientCounter() { + const [count, setCount] = React.useState(0) + + return ( + + ) +} diff --git a/packages/plugin-rsc/examples/no-ssr/src/framework/entry.browser.tsx b/packages/plugin-rsc/examples/no-ssr/src/framework/entry.browser.tsx new file mode 100644 index 000000000..0d3451c56 --- /dev/null +++ b/packages/plugin-rsc/examples/no-ssr/src/framework/entry.browser.tsx @@ -0,0 +1,122 @@ +import * as ReactClient from '@vitejs/plugin-rsc/browser' +import React from 'react' +import * as ReactDOMClient from 'react-dom/client' +import type { RscPayload } from './entry.rsc' + +async function main() { + // stash `setPayload` function to trigger re-rendering + // from outside of `BrowserRoot` component (e.g. server function call, navigation, hmr) + let setPayload: (v: RscPayload) => void + + const initialPayload = await ReactClient.createFromFetch( + fetch(window.location.href), + ) + + // browser root component to (re-)render RSC payload as state + function BrowserRoot() { + const [payload, setPayload_] = React.useState(initialPayload) + + React.useEffect(() => { + setPayload = (v) => React.startTransition(() => setPayload_(v)) + }, [setPayload_]) + + // re-fetch/render on client side navigation + React.useEffect(() => { + return listenNavigation(() => fetchRscPayload()) + }, []) + + return payload.root + } + + // re-fetch RSC and trigger re-rendering + async function fetchRscPayload() { + const payload = await ReactClient.createFromFetch( + fetch(window.location.href), + ) + setPayload(payload) + } + + // register a handler which will be internally called by React + // on server function request after hydration. + ReactClient.setServerCallback(async (id, args) => { + const url = new URL(window.location.href) + const temporaryReferences = ReactClient.createTemporaryReferenceSet() + const payload = await ReactClient.createFromFetch( + fetch(url, { + method: 'POST', + body: await ReactClient.encodeReply(args, { temporaryReferences }), + headers: { + 'x-rsc-action': id, + }, + }), + { temporaryReferences }, + ) + setPayload(payload) + return payload.returnValue + }) + + // hydration + const browserRoot = ( + + + + ) + ReactDOMClient.createRoot(document.body).render(browserRoot) + + // implement server HMR by trigering re-fetch/render of RSC upon server code change + if (import.meta.hot) { + import.meta.hot.on('rsc:update', () => { + fetchRscPayload() + }) + } +} + +// a little helper to setup events interception for client side navigation +function listenNavigation(onNavigation: () => void) { + window.addEventListener('popstate', onNavigation) + + const oldPushState = window.history.pushState + window.history.pushState = function (...args) { + const res = oldPushState.apply(this, args) + onNavigation() + return res + } + + const oldReplaceState = window.history.replaceState + window.history.replaceState = function (...args) { + const res = oldReplaceState.apply(this, args) + onNavigation() + return res + } + + function onClick(e: MouseEvent) { + let link = (e.target as Element).closest('a') + if ( + link && + link instanceof HTMLAnchorElement && + link.href && + (!link.target || link.target === '_self') && + link.origin === location.origin && + !link.hasAttribute('download') && + e.button === 0 && // left clicks only + !e.metaKey && // open in new tab (mac) + !e.ctrlKey && // open in new tab (windows) + !e.altKey && // download + !e.shiftKey && + !e.defaultPrevented + ) { + e.preventDefault() + history.pushState(null, '', link.href) + } + } + document.addEventListener('click', onClick) + + return () => { + document.removeEventListener('click', onClick) + window.removeEventListener('popstate', onNavigation) + window.history.pushState = oldPushState + window.history.replaceState = oldReplaceState + } +} + +main() diff --git a/packages/plugin-rsc/examples/no-ssr/src/framework/entry.rsc.tsx b/packages/plugin-rsc/examples/no-ssr/src/framework/entry.rsc.tsx new file mode 100644 index 000000000..da968de3a --- /dev/null +++ b/packages/plugin-rsc/examples/no-ssr/src/framework/entry.rsc.tsx @@ -0,0 +1,51 @@ +import * as ReactServer from '@vitejs/plugin-rsc/rsc' +import type { ReactFormState } from 'react-dom/client' +import { Root } from '../root.tsx' + +export type RscPayload = { + root: React.ReactNode + returnValue?: unknown + formState?: ReactFormState +} + +export default async function handler(request: Request): Promise { + const isAction = request.method === 'POST' + let returnValue: unknown | undefined + let formState: ReactFormState | undefined + let temporaryReferences: unknown | undefined + if (isAction) { + const actionId = request.headers.get('x-rsc-action') + if (actionId) { + const contentType = request.headers.get('content-type') + const body = contentType?.startsWith('multipart/form-data') + ? await request.formData() + : await request.text() + temporaryReferences = ReactServer.createTemporaryReferenceSet() + const args = await ReactServer.decodeReply(body, { temporaryReferences }) + const action = await ReactServer.loadServerAction(actionId) + returnValue = await action.apply(null, args) + } else { + const formData = await request.formData() + const decodedAction = await ReactServer.decodeAction(formData) + const result = await decodedAction() + formState = await ReactServer.decodeFormState(result, formData) + } + } + + const rscStream = ReactServer.renderToReadableStream({ + root: , + returnValue, + formState, + }) + + return new Response(rscStream, { + headers: { + 'content-type': 'text/x-component;charset=utf-8', + vary: 'accept', + }, + }) +} + +if (import.meta.hot) { + import.meta.hot.accept() +} diff --git a/packages/plugin-rsc/examples/no-ssr/src/index.css b/packages/plugin-rsc/examples/no-ssr/src/index.css new file mode 100644 index 000000000..f4d2128c0 --- /dev/null +++ b/packages/plugin-rsc/examples/no-ssr/src/index.css @@ -0,0 +1,112 @@ +:root { + font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} + +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 1rem; +} + +.read-the-docs { + color: #888; + text-align: left; +} diff --git a/packages/plugin-rsc/examples/no-ssr/src/root.tsx b/packages/plugin-rsc/examples/no-ssr/src/root.tsx new file mode 100644 index 000000000..9baa7b9c2 --- /dev/null +++ b/packages/plugin-rsc/examples/no-ssr/src/root.tsx @@ -0,0 +1,44 @@ +import './index.css' // css import is automatically injected in exported server components +import viteLogo from '/vite.svg' +import { getServerCounter, updateServerCounter } from './action.tsx' +import reactLogo from './assets/react.svg' +import { ClientCounter } from './client.tsx' + +export function Root() { + return +} + +function App() { + return ( +
+ +

Vite + RSC

+
+ +
+
+
+ +
+
+
    +
  • + Edit src/client.tsx to test client HMR. +
  • +
  • + Edit src/root.tsx to test server HMR. +
  • +
+
+ ) +} diff --git a/packages/plugin-rsc/examples/no-ssr/tsconfig.json b/packages/plugin-rsc/examples/no-ssr/tsconfig.json new file mode 100644 index 000000000..4c355ed3c --- /dev/null +++ b/packages/plugin-rsc/examples/no-ssr/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "erasableSyntaxOnly": true, + "allowImportingTsExtensions": true, + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "skipLibCheck": true, + "verbatimModuleSyntax": true, + "noEmit": true, + "moduleResolution": "Bundler", + "module": "ESNext", + "target": "ESNext", + "lib": ["ESNext", "DOM", "DOM.Iterable"], + "types": ["vite/client", "@vitejs/plugin-rsc/types"], + "jsx": "react-jsx" + } +} diff --git a/packages/plugin-rsc/examples/no-ssr/vite.config.ts b/packages/plugin-rsc/examples/no-ssr/vite.config.ts new file mode 100644 index 000000000..ce349c6e9 --- /dev/null +++ b/packages/plugin-rsc/examples/no-ssr/vite.config.ts @@ -0,0 +1,65 @@ +import rsc from '@vitejs/plugin-rsc' +import react from '@vitejs/plugin-react' +import { defineConfig, type Plugin } from 'vite' +import fsp from 'node:fs/promises' + +export default defineConfig({ + plugins: [ + spaPlugin(), + react(), + rsc({ + entries: { + rsc: './src/framework/entry.rsc.tsx', + }, + }), + ], +}) + +function spaPlugin(): Plugin[] { + // serve index.html before rsc server + return [ + { + name: 'serve-spa', + configureServer(server) { + return () => { + server.middlewares.use(async (req, res, next) => { + try { + if (req.headers.accept?.includes('text/html')) { + const html = await fsp.readFile('index.html', 'utf-8') + const transformed = await server.transformIndexHtml('/', html) + res.setHeader('Content-type', 'text/html') + res.setHeader('Vary', 'accept') + res.end(transformed) + return + } + } catch (error) { + next(error) + return + } + next() + }) + } + }, + configurePreviewServer(server) { + return () => { + server.middlewares.use(async (req, res, next) => { + try { + if (req.headers.accept?.includes('text/html')) { + const html = await fsp.readFile( + 'dist/client/index.html', + 'utf-8', + ) + res.end(html) + return + } + } catch (error) { + next(error) + return + } + next() + }) + } + }, + }, + ] +} diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index 8698f7283..d53f31e15 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -220,10 +220,42 @@ export default function vitePluginRsc( }, }, }, + // TODO: use buildApp hook on v7? builder: { sharedPlugins: true, sharedConfigBuild: true, async buildApp(builder) { + // no-ssr case + // rsc -> client -> rsc -> client + if (!builder.environments.ssr?.config.build.rollupOptions.input) { + isScanBuild = true + builder.environments.rsc!.config.build.write = false + builder.environments.client!.config.build.write = false + await builder.build(builder.environments.rsc!) + await builder.build(builder.environments.client!) + isScanBuild = false + builder.environments.rsc!.config.build.write = true + builder.environments.client!.config.build.write = true + await builder.build(builder.environments.rsc!) + // sort for stable build + clientReferenceMetaMap = sortObject(clientReferenceMetaMap) + serverResourcesMetaMap = sortObject(serverResourcesMetaMap) + await builder.build(builder.environments.client!) + + const assetsManifestCode = `export default ${JSON.stringify( + buildAssetsManifest, + null, + 2, + )}` + const manifestPath = path.join( + builder.environments!.rsc!.config.build!.outDir!, + BUILD_ASSETS_MANIFEST_NAME, + ) + fs.writeFileSync(manifestPath, assetsManifestCode) + return + } + + // rsc -> ssr -> rsc -> client -> ssr isScanBuild = true builder.environments.rsc!.config.build.write = false builder.environments.ssr!.config.build.write = false @@ -632,6 +664,8 @@ export default function vitePluginRsc( return }, writeBundle() { + // TODO: move this to `buildApp`. + // note that we already do this in buildApp for no-ssr case. if (this.environment.name === 'ssr') { // output client manifest to non-client build directly. // this makes server build to be self-contained and deploy-able for cloudflare. diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 388dcc123..d710fb269 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -558,6 +558,31 @@ importers: specifier: ^4.23.0 version: 4.23.0 + packages/plugin-rsc/examples/no-ssr: + dependencies: + '@vitejs/plugin-rsc': + specifier: latest + version: link:../.. + react: + specifier: ^19.1.0 + version: 19.1.0 + react-dom: + specifier: ^19.1.0 + version: 19.1.0(react@19.1.0) + devDependencies: + '@types/react': + specifier: ^19.1.8 + version: 19.1.8 + '@types/react-dom': + specifier: ^19.1.6 + version: 19.1.6(@types/react@19.1.8) + '@vitejs/plugin-react': + specifier: latest + version: link:../../../plugin-react + vite: + specifier: ^7.0.2 + version: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + packages/plugin-rsc/examples/react-router: dependencies: '@vitejs/plugin-rsc': From b598bb57d6a7d76bb4ce41ae5990913461949ec3 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sat, 12 Jul 2025 14:59:39 +0900 Subject: [PATCH 086/313] feat(rsc): support regex directive for `transformHoistInlineDirective` (#527) --- .../plugin-rsc/src/transforms/hoist.test.ts | 66 ++++++++++++++++++- packages/plugin-rsc/src/transforms/hoist.ts | 44 +++++++++++-- 2 files changed, 100 insertions(+), 10 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/hoist.test.ts b/packages/plugin-rsc/src/transforms/hoist.test.ts index 7f0d53937..4164192c1 100644 --- a/packages/plugin-rsc/src/transforms/hoist.test.ts +++ b/packages/plugin-rsc/src/transforms/hoist.test.ts @@ -6,12 +6,21 @@ import { debugSourceMap } from './test-utils' describe(transformHoistInlineDirective, () => { async function testTransform( input: string, - options?: { encode?: boolean; noExport?: boolean; directive?: string }, + options?: { + encode?: boolean + noExport?: boolean + directive?: string | RegExp + }, ) { const ast = await parseAstAsync(input) const { output } = transformHoistInlineDirective(input, ast, { - runtime: (value, name) => - `$$register(${value}, "", ${JSON.stringify(name)})`, + runtime: (value, name, meta) => + `$$register(${value}, "", ${JSON.stringify(name)}` + + `${ + options?.directive instanceof RegExp + ? `, ${JSON.stringify(meta)}` + : '' + })`, directive: options?.directive ?? 'use server', encode: options?.encode ? (v) => `__enc(${v})` : undefined, decode: options?.encode ? (v) => `__dec(${v})` : undefined, @@ -369,4 +378,55 @@ export async function test() { " `) }) + + it('directive pattern', async () => { + const input = ` +export async function none() { + "use cache"; + return "test"; +} + +export async function fs() { + "use cache: fs"; + return "test"; +} + +export async function kv() { + "use cache: kv"; + return "test"; +} +` + expect( + await testTransform(input, { + directive: /^use cache(: .+)?$/, + noExport: true, + }), + ).toMatchInlineSnapshot(` + " + export const none = /* #__PURE__ */ $$register($$hoist_0_none, "", "$$hoist_0_none", {"directiveMatch":["use cache",null]}); + + export const fs = /* #__PURE__ */ $$register($$hoist_1_fs, "", "$$hoist_1_fs", {"directiveMatch":["use cache: fs",": fs"]}); + + export const kv = /* #__PURE__ */ $$register($$hoist_2_kv, "", "$$hoist_2_kv", {"directiveMatch":["use cache: kv",": kv"]}); + + ;async function $$hoist_0_none() { + "use cache"; + return "test"; + }; + /* #__PURE__ */ Object.defineProperty($$hoist_0_none, "name", { value: "none" }); + + ;async function $$hoist_1_fs() { + "use cache: fs"; + return "test"; + }; + /* #__PURE__ */ Object.defineProperty($$hoist_1_fs, "name", { value: "fs" }); + + ;async function $$hoist_2_kv() { + "use cache: kv"; + return "test"; + }; + /* #__PURE__ */ Object.defineProperty($$hoist_2_kv, "name", { value: "kv" }); + " + `) + }) }) diff --git a/packages/plugin-rsc/src/transforms/hoist.ts b/packages/plugin-rsc/src/transforms/hoist.ts index 3cb7e9ac7..a471f2c54 100644 --- a/packages/plugin-rsc/src/transforms/hoist.ts +++ b/packages/plugin-rsc/src/transforms/hoist.ts @@ -3,19 +3,21 @@ import type { Program } from 'estree' import { walk } from 'estree-walker' import MagicString from 'magic-string' import { analyze } from 'periscopic' -import { hasDirective } from './utils' export function transformHoistInlineDirective( input: string, ast: Program, { runtime, - directive, rejectNonAsyncFunction, ...options }: { - runtime: (value: string, name: string) => string - directive: string + runtime: ( + value: string, + name: string, + meta: { directiveMatch: RegExpMatchArray }, + ) => string + directive: string | RegExp rejectNonAsyncFunction?: boolean encode?: (value: string) => string decode?: (value: string) => string @@ -26,6 +28,10 @@ export function transformHoistInlineDirective( names: string[] } { const output = new MagicString(input) + const directive = + typeof options.directive === 'string' + ? exactRegex(options.directive) + : options.directive // re-export somehow confuses periscopic scopes so remove them before analysis walk(ast, { @@ -48,9 +54,10 @@ export function transformHoistInlineDirective( (node.type === 'FunctionExpression' || node.type === 'FunctionDeclaration' || node.type === 'ArrowFunctionExpression') && - node.body.type === 'BlockStatement' && - hasDirective(node.body.body, directive) + node.body.type === 'BlockStatement' ) { + const match = matchDirective(node.body.body, directive) + if (!match) return if (!node.async && rejectNonAsyncFunction) { throw Object.assign( new Error(`"${directive}" doesn't allow non async function`), @@ -116,7 +123,9 @@ export function transformHoistInlineDirective( output.move(node.start, node.end, input.length) // replace original declartion with action register + bind - let newCode = `/* #__PURE__ */ ${runtime(newName, newName)}` + let newCode = `/* #__PURE__ */ ${runtime(newName, newName, { + directiveMatch: match, + })}` if (bindVars.length > 0) { const bindArgs = options.encode ? options.encode('[' + bindVars.join(', ') + ']') @@ -140,3 +149,24 @@ export function transformHoistInlineDirective( names, } } + +const exactRegex = (s: string): RegExp => + new RegExp('^' + s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') + '$') + +function matchDirective( + body: Program['body'], + directive: RegExp, +): RegExpMatchArray | undefined { + for (const stable of body) { + if ( + stable.type === 'ExpressionStatement' && + stable.expression.type === 'Literal' && + typeof stable.expression.value === 'string' + ) { + const match = stable.expression.value.match(directive) + if (match) { + return match + } + } + } +} From b1d63a8f0f56ca33cb11d5a509a7d31ff9207474 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sat, 12 Jul 2025 15:39:40 +0900 Subject: [PATCH 087/313] test(rsc): fix ssr modulepreload link test (#565) --- packages/plugin-rsc/e2e/react-router.test.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/plugin-rsc/e2e/react-router.test.ts b/packages/plugin-rsc/e2e/react-router.test.ts index 9a8f6e785..01637fb58 100644 --- a/packages/plugin-rsc/e2e/react-router.test.ts +++ b/packages/plugin-rsc/e2e/react-router.test.ts @@ -1,8 +1,8 @@ import { createHash } from 'node:crypto' -import path from 'node:path' import { expect, test } from '@playwright/test' import { type Fixture, useFixture } from './fixture' import { expectNoReload, testNoJs, waitForHydration } from './helper' +import { readFileSync } from 'node:fs' test.describe('dev-default', () => { const f = useFixture({ root: 'examples/react-router', mode: 'dev' }) @@ -74,8 +74,11 @@ function defineTest(f: Fixture) { .evaluateAll((elements) => elements.map((el) => el.getAttribute('href')), ) - const { default: manifest } = await import( - path.resolve(f.root, 'dist/ssr/__vite_rsc_assets_manifest.js') + const manifest = JSON.parse( + readFileSync( + f.root + '/dist/ssr/__vite_rsc_assets_manifest.js', + 'utf-8', + ).slice('export default '.length), ) const hashString = (v: string) => createHash('sha256').update(v).digest().toString('hex').slice(0, 12) From 44567c350b6b0b887dc404ae7ed81d6eab5515a5 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sat, 12 Jul 2025 17:02:48 +0900 Subject: [PATCH 088/313] chore: ts-ignore for rolldown-vite ci (#566) --- packages/plugin-rsc/examples/basic/vite.config.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/plugin-rsc/examples/basic/vite.config.ts b/packages/plugin-rsc/examples/basic/vite.config.ts index 198838c1c..35e31d2ab 100644 --- a/packages/plugin-rsc/examples/basic/vite.config.ts +++ b/packages/plugin-rsc/examples/basic/vite.config.ts @@ -166,6 +166,7 @@ function vitePluginUseCache(): Plugin[] { async transform(code) { if (!code.includes('use cache')) return const ast = await parseAstAsync(code) + // @ts-ignore for rolldown-vite ci estree/oxc mismatch const result = transformHoistInlineDirective(code, ast, { runtime: (value) => `__vite_rsc_cache(${value})`, directive: 'use cache', From 9d4c60f3cc00e8f6744dbaec499e02c43916140c Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 14 Jul 2025 10:29:07 +0900 Subject: [PATCH 089/313] release: plugin-rsc@0.4.12 --- packages/plugin-rsc/CHANGELOG.md | 29 +++++++++++++++++++++++++++++ packages/plugin-rsc/package.json | 2 +- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/packages/plugin-rsc/CHANGELOG.md b/packages/plugin-rsc/CHANGELOG.md index 43693c5fb..3d35a59dd 100644 --- a/packages/plugin-rsc/CHANGELOG.md +++ b/packages/plugin-rsc/CHANGELOG.md @@ -1,3 +1,32 @@ +## [0.4.12](https://github.com/vitejs/vite-plugin-react/compare/plugin-rsc@0.4.11...plugin-rsc@0.4.12) (2025-07-14) +### Features + +* **rsc:** support regex directive for `transformHoistInlineDirective` ([#527](https://github.com/vitejs/vite-plugin-react/issues/527)) ([b598bb5](https://github.com/vitejs/vite-plugin-react/commit/b598bb57d6a7d76bb4ce41ae5990913461949ec3)) + +### Bug Fixes + +* **rsc:** support setups without an SSR environment ([#562](https://github.com/vitejs/vite-plugin-react/issues/562)) ([0fc7fcd](https://github.com/vitejs/vite-plugin-react/commit/0fc7fcdae31568dcd2568a10333ad1e79e2d5176)) + +### Miscellaneous Chores + +* **deps:** update prettier ([#556](https://github.com/vitejs/vite-plugin-react/issues/556)) ([840f0b1](https://github.com/vitejs/vite-plugin-react/commit/840f0b1386b65e6c96ca3b953a2811348ec5c3a0)) +* **rsc:** adjust changelog ([#544](https://github.com/vitejs/vite-plugin-react/issues/544)) ([713a320](https://github.com/vitejs/vite-plugin-react/commit/713a3204aeb8bd36fd14cf52197d0f7677db4abc)) +* **rsc:** remove unused code ([#550](https://github.com/vitejs/vite-plugin-react/issues/550)) ([8c3929c](https://github.com/vitejs/vite-plugin-react/commit/8c3929c4a8c02a3fe2251fde087fa42358a79de5)) +* **rsc:** tweak cloudflare setting on rolldown-vite ([#551](https://github.com/vitejs/vite-plugin-react/issues/551)) ([1a4a7bb](https://github.com/vitejs/vite-plugin-react/commit/1a4a7bbc051ea22f3290f8abed2e5966ce60e4da)) +* **rsc:** update readme ([#553](https://github.com/vitejs/vite-plugin-react/issues/553)) ([822e7dd](https://github.com/vitejs/vite-plugin-react/commit/822e7dd4e4ef3a613f734f46ad8681957881c4ba)) +* ts-ignore for rolldown-vite ci ([#566](https://github.com/vitejs/vite-plugin-react/issues/566)) ([44567c3](https://github.com/vitejs/vite-plugin-react/commit/44567c350b6b0b887dc404ae7ed81d6eab5515a5)) + +### Tests + +* **rsc:** fix `setupIsolatedFixture` on windows ci ([#559](https://github.com/vitejs/vite-plugin-react/issues/559)) ([aa004d4](https://github.com/vitejs/vite-plugin-react/commit/aa004d41c5f650dfe8b24fb51b01a79fa94ae612)) +* **rsc:** fix ssr modulepreload link test ([#565](https://github.com/vitejs/vite-plugin-react/issues/565)) ([b1d63a8](https://github.com/vitejs/vite-plugin-react/commit/b1d63a8f0f56ca33cb11d5a509a7d31ff9207474)) +* **rsc:** fix tests on rolldown-vite ([#549](https://github.com/vitejs/vite-plugin-react/issues/549)) ([b37d377](https://github.com/vitejs/vite-plugin-react/commit/b37d377bc48fb99b451036d20aec45367580a627)) +* **rsc:** serial e2e ([#545](https://github.com/vitejs/vite-plugin-react/issues/545)) ([904a062](https://github.com/vitejs/vite-plugin-react/commit/904a0623cc55b2c5944f0da396dc99b82b8a8ddb)) + +### Continuous Integration + +* **rsc:** disable `TEST_ISOLATED` on windows ([#558](https://github.com/vitejs/vite-plugin-react/issues/558)) ([fb5e40d](https://github.com/vitejs/vite-plugin-react/commit/fb5e40d784be2109885c2c6168ee9cc11c7592a8)) + ## [0.4.11](https://github.com/vitejs/vite-plugin-react/compare/plugin-rsc@0.4.10...plugin-rsc@0.4.11) (2025-07-07) ### Miscellaneous Chores diff --git a/packages/plugin-rsc/package.json b/packages/plugin-rsc/package.json index e81630dc8..1981a4d5e 100644 --- a/packages/plugin-rsc/package.json +++ b/packages/plugin-rsc/package.json @@ -1,6 +1,6 @@ { "name": "@vitejs/plugin-rsc", - "version": "0.4.11", + "version": "0.4.12", "description": "React Server Components (RSC) support for Vite.", "keywords": [ "vite", From 2a3b053679d43bc05ff4773480082e0716162841 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 14 Jul 2025 10:46:52 +0900 Subject: [PATCH 090/313] fix(deps): update swc monorepo (#569) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/plugin-react-swc/package.json | 2 +- .../playground/emotion-plugin/package.json | 2 +- .../playground/styled-components/package.json | 2 +- pnpm-lock.yaml | 110 +++++++++--------- 4 files changed, 58 insertions(+), 58 deletions(-) diff --git a/packages/plugin-react-swc/package.json b/packages/plugin-react-swc/package.json index 1dcdc32b3..ae63dc640 100644 --- a/packages/plugin-react-swc/package.json +++ b/packages/plugin-react-swc/package.json @@ -30,7 +30,7 @@ "homepage": "https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react-swc#readme", "dependencies": { "@rolldown/pluginutils": "1.0.0-beta.24", - "@swc/core": "^1.12.9" + "@swc/core": "^1.12.11" }, "peerDependencies": { "vite": "^4 || ^5 || ^6 || ^7" diff --git a/packages/plugin-react-swc/playground/emotion-plugin/package.json b/packages/plugin-react-swc/playground/emotion-plugin/package.json index 75c850c01..ec0283f0c 100644 --- a/packages/plugin-react-swc/playground/emotion-plugin/package.json +++ b/packages/plugin-react-swc/playground/emotion-plugin/package.json @@ -17,6 +17,6 @@ "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react-swc": "../../dist", - "@swc/plugin-emotion": "^10.0.2" + "@swc/plugin-emotion": "^10.0.3" } } diff --git a/packages/plugin-react-swc/playground/styled-components/package.json b/packages/plugin-react-swc/playground/styled-components/package.json index 4f6358847..bcf8ea098 100644 --- a/packages/plugin-react-swc/playground/styled-components/package.json +++ b/packages/plugin-react-swc/playground/styled-components/package.json @@ -14,7 +14,7 @@ "styled-components": "^6.1.19" }, "devDependencies": { - "@swc/plugin-styled-components": "^8.0.2", + "@swc/plugin-styled-components": "^8.0.3", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@types/styled-components": "^5.1.34", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d710fb269..febc2ca6e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -148,8 +148,8 @@ importers: specifier: 1.0.0-beta.24 version: 1.0.0-beta.24 '@swc/core': - specifier: ^1.12.9 - version: 1.12.9 + specifier: ^1.12.11 + version: 1.12.11 devDependencies: '@playwright/test': specifier: ^1.53.2 @@ -274,8 +274,8 @@ importers: version: 19.1.0(react@19.1.0) devDependencies: '@swc/plugin-emotion': - specifier: ^10.0.2 - version: 10.0.2 + specifier: ^10.0.3 + version: 10.0.3 '@types/react': specifier: ^19.1.8 version: 19.1.8 @@ -381,8 +381,8 @@ importers: version: 6.1.19(react-dom@19.1.0(react@19.1.0))(react@19.1.0) devDependencies: '@swc/plugin-styled-components': - specifier: ^8.0.2 - version: 8.0.2 + specifier: ^8.0.3 + version: 8.0.3 '@types/react': specifier: ^19.1.8 version: 19.1.8 @@ -2569,68 +2569,68 @@ packages: resolution: {integrity: sha512-6rsHTjodIn/t90lv5snQjRPVtOosM7Vp0AKdrObymq45ojlgVwnpAqdc+0OBBrpEiy31zZ6/TKeIVqV1HwvnuQ==} engines: {node: '>=18'} - '@swc/core-darwin-arm64@1.12.9': - resolution: {integrity: sha512-GACFEp4nD6V+TZNR2JwbMZRHB+Yyvp14FrcmB6UCUYmhuNWjkxi+CLnEvdbuiKyQYv0zA+TRpCHZ+whEs6gwfA==} + '@swc/core-darwin-arm64@1.12.11': + resolution: {integrity: sha512-J19Jj9Y5x/N0loExH7W0OI9OwwoVyxutDdkyq1o/kgXyBqmmzV7Y/Q9QekI2Fm/qc5mNeAdP7aj4boY4AY/JPw==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.12.9': - resolution: {integrity: sha512-hv2kls7Ilkm2EpeJz+I9MCil7pGS3z55ZAgZfxklEuYsxpICycxeH+RNRv4EraggN44ms+FWCjtZFu0LGg2V3g==} + '@swc/core-darwin-x64@1.12.11': + resolution: {integrity: sha512-PTuUQrfStQ6cjW+uprGO2lpQHy84/l0v+GqRqq8s/jdK55rFRjMfCeyf6FAR0l6saO5oNOQl+zWR1aNpj8pMQw==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.12.9': - resolution: {integrity: sha512-od9tDPiG+wMU9wKtd6y3nYJdNqgDOyLdgRRcrj1/hrbHoUPOM8wZQZdwQYGarw63iLXGgsw7t5HAF9Yc51ilFA==} + '@swc/core-linux-arm-gnueabihf@1.12.11': + resolution: {integrity: sha512-poxBq152HsupOtnZilenvHmxZ9a8SRj4LtfxUnkMDNOGrZR9oxbQNwEzNKfi3RXEcXz+P8c0Rai1ubBazXv8oQ==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.12.9': - resolution: {integrity: sha512-6qx1ka9LHcLzxIgn2Mros+CZLkHK2TawlXzi/h7DJeNnzi8F1Hw0Yzjp8WimxNCg6s2n+o3jnmin1oXB7gg8rw==} + '@swc/core-linux-arm64-gnu@1.12.11': + resolution: {integrity: sha512-y1HNamR/D0Hc8xIE910ysyLe269UYiGaQPoLjQS0phzWFfWdMj9bHM++oydVXZ4RSWycO7KyJ3uvw4NilvyMKQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.12.9': - resolution: {integrity: sha512-yghFZWKPVVGbUdqiD7ft23G0JX6YFGDJPz9YbLLAwGuKZ9th3/jlWoQDAw1Naci31LQhVC+oIji6ozihSuwB2A==} + '@swc/core-linux-arm64-musl@1.12.11': + resolution: {integrity: sha512-LlBxPh/32pyQsu2emMEOFRm7poEFLsw12Y1mPY7FWZiZeptomKSOSHRzKDz9EolMiV4qhK1caP1lvW4vminYgQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.12.9': - resolution: {integrity: sha512-SFUxyhWLZRNL8QmgGNqdi2Q43PNyFVkRZ2zIif30SOGFSxnxcf2JNeSeBgKIGVgaLSuk6xFVVCtJ3KIeaStgRg==} + '@swc/core-linux-x64-gnu@1.12.11': + resolution: {integrity: sha512-bOjiZB8O/1AzHkzjge1jqX62HGRIpOHqFUrGPfAln/NC6NR+Z2A78u3ixV7k5KesWZFhCV0YVGJL+qToL27myA==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.12.9': - resolution: {integrity: sha512-9FB0wM+6idCGTI20YsBNBg9xSWtkDBymnpaTCsZM3qDc0l4uOpJMqbfWhQvp17x7r/ulZfb2QY8RDvQmCL6AcQ==} + '@swc/core-linux-x64-musl@1.12.11': + resolution: {integrity: sha512-4dzAtbT/m3/UjF045+33gLiHd8aSXJDoqof7gTtu4q0ZyAf7XJ3HHspz+/AvOJLVo4FHHdFcdXhmo/zi1nFn8A==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.12.9': - resolution: {integrity: sha512-zHOusMVbOH9ik5RtRrMiGzLpKwxrPXgXkBm3SbUCa65HAdjV33NZ0/R9Rv1uPESALtEl2tzMYLUxYA5ECFDFhA==} + '@swc/core-win32-arm64-msvc@1.12.11': + resolution: {integrity: sha512-h8HiwBZErKvCAmjW92JvQp0iOqm6bncU4ac5jxBGkRApabpUenNJcj3h2g5O6GL5K6T9/WhnXE5gyq/s1fhPQg==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.12.9': - resolution: {integrity: sha512-aWZf0PqE0ot7tCuhAjRkDFf41AzzSQO0x2xRfTbnhpROp57BRJ/N5eee1VULO/UA2PIJRG7GKQky5bSGBYlFug==} + '@swc/core-win32-ia32-msvc@1.12.11': + resolution: {integrity: sha512-1pwr325mXRNUhxTtXmx1IokV5SiRL+6iDvnt3FRXj+X5UvXXKtg2zeyftk+03u8v8v8WUr5I32hIypVJPTNxNg==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.12.9': - resolution: {integrity: sha512-C25fYftXOras3P3anSUeXXIpxmEkdAcsIL9yrr0j1xepTZ/yKwpnQ6g3coj8UXdeJy4GTVlR6+Ow/QiBgZQNOg==} + '@swc/core-win32-x64-msvc@1.12.11': + resolution: {integrity: sha512-5gggWo690Gvs7XiPxAmb5tHwzB9RTVXUV7AWoGb6bmyUd1OXYaebQF0HAOtade5jIoNhfQMQJ7QReRgt/d2jAA==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.12.9': - resolution: {integrity: sha512-O+LfT2JlVMsIMWG9x+rdxg8GzpzeGtCZQfXV7cKc1PjIKUkLFf1QJ7okuseA4f/9vncu37dQ2ZcRrPKy0Ndd5g==} + '@swc/core@1.12.11': + resolution: {integrity: sha512-P3GM+0lqjFctcp5HhR9mOcvLSX3SptI9L1aux0Fuvgt8oH4f92rCUrkodAa0U2ktmdjcyIiG37xg2mb/dSCYSA==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '>=0.5.17' @@ -2641,11 +2641,11 @@ packages: '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - '@swc/plugin-emotion@10.0.2': - resolution: {integrity: sha512-cwuxHN1PcbK5mer+K8x6pH3qpT8A4+ywesCmheuekBt+J4KtBCFc8glVgGY795QqC5ViUm68dYN5xkS1HSswRA==} + '@swc/plugin-emotion@10.0.3': + resolution: {integrity: sha512-YJVWKwvcggWUBz952/TKHLlF9aMhgxjzliuLB3xuXbM/r/xAV/whVUiH8zvrTJZmzj15xApRWX4EkXQmGkRt3g==} - '@swc/plugin-styled-components@8.0.2': - resolution: {integrity: sha512-JNDeeSZd8EQFCO013QNY+WXdeu/Gwu2vG0uJssEqVSzoz+HoHhNaPz5yvN4psor/6VXAY6LKCTqDfrsrfA6pXA==} + '@swc/plugin-styled-components@8.0.3': + resolution: {integrity: sha512-9Do3BPUP7nQuE0yfw7Ycr904UMHcy7rMY1gxSDCNTw+WpSfRiVNs6ndyWbV9Yns9g+yaBkRiX5oq6/q1mQUfMg==} '@swc/types@0.1.23': resolution: {integrity: sha512-u1iIVZV9Q0jxY+yM2vw/hZGDNudsN85bBpTqzAQ9rzkxW9D+e3aEM4Han+ow518gSewkXgjmEK0BD79ZcNVgPw==} @@ -7111,59 +7111,59 @@ snapshots: dependencies: '@types/node': 22.16.0 - '@swc/core-darwin-arm64@1.12.9': + '@swc/core-darwin-arm64@1.12.11': optional: true - '@swc/core-darwin-x64@1.12.9': + '@swc/core-darwin-x64@1.12.11': optional: true - '@swc/core-linux-arm-gnueabihf@1.12.9': + '@swc/core-linux-arm-gnueabihf@1.12.11': optional: true - '@swc/core-linux-arm64-gnu@1.12.9': + '@swc/core-linux-arm64-gnu@1.12.11': optional: true - '@swc/core-linux-arm64-musl@1.12.9': + '@swc/core-linux-arm64-musl@1.12.11': optional: true - '@swc/core-linux-x64-gnu@1.12.9': + '@swc/core-linux-x64-gnu@1.12.11': optional: true - '@swc/core-linux-x64-musl@1.12.9': + '@swc/core-linux-x64-musl@1.12.11': optional: true - '@swc/core-win32-arm64-msvc@1.12.9': + '@swc/core-win32-arm64-msvc@1.12.11': optional: true - '@swc/core-win32-ia32-msvc@1.12.9': + '@swc/core-win32-ia32-msvc@1.12.11': optional: true - '@swc/core-win32-x64-msvc@1.12.9': + '@swc/core-win32-x64-msvc@1.12.11': optional: true - '@swc/core@1.12.9': + '@swc/core@1.12.11': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.23 optionalDependencies: - '@swc/core-darwin-arm64': 1.12.9 - '@swc/core-darwin-x64': 1.12.9 - '@swc/core-linux-arm-gnueabihf': 1.12.9 - '@swc/core-linux-arm64-gnu': 1.12.9 - '@swc/core-linux-arm64-musl': 1.12.9 - '@swc/core-linux-x64-gnu': 1.12.9 - '@swc/core-linux-x64-musl': 1.12.9 - '@swc/core-win32-arm64-msvc': 1.12.9 - '@swc/core-win32-ia32-msvc': 1.12.9 - '@swc/core-win32-x64-msvc': 1.12.9 + '@swc/core-darwin-arm64': 1.12.11 + '@swc/core-darwin-x64': 1.12.11 + '@swc/core-linux-arm-gnueabihf': 1.12.11 + '@swc/core-linux-arm64-gnu': 1.12.11 + '@swc/core-linux-arm64-musl': 1.12.11 + '@swc/core-linux-x64-gnu': 1.12.11 + '@swc/core-linux-x64-musl': 1.12.11 + '@swc/core-win32-arm64-msvc': 1.12.11 + '@swc/core-win32-ia32-msvc': 1.12.11 + '@swc/core-win32-x64-msvc': 1.12.11 '@swc/counter@0.1.3': {} - '@swc/plugin-emotion@10.0.2': + '@swc/plugin-emotion@10.0.3': dependencies: '@swc/counter': 0.1.3 - '@swc/plugin-styled-components@8.0.2': + '@swc/plugin-styled-components@8.0.3': dependencies: '@swc/counter': 0.1.3 From 88044469a6399c8a1d909b564f6ddc039782c066 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 14 Jul 2025 10:49:11 +0900 Subject: [PATCH 091/313] chore(rsc): tweak changelog (#570) --- packages/plugin-rsc/CHANGELOG.md | 33 -------------------------------- 1 file changed, 33 deletions(-) diff --git a/packages/plugin-rsc/CHANGELOG.md b/packages/plugin-rsc/CHANGELOG.md index 3d35a59dd..8148f449d 100644 --- a/packages/plugin-rsc/CHANGELOG.md +++ b/packages/plugin-rsc/CHANGELOG.md @@ -7,26 +7,6 @@ * **rsc:** support setups without an SSR environment ([#562](https://github.com/vitejs/vite-plugin-react/issues/562)) ([0fc7fcd](https://github.com/vitejs/vite-plugin-react/commit/0fc7fcdae31568dcd2568a10333ad1e79e2d5176)) -### Miscellaneous Chores - -* **deps:** update prettier ([#556](https://github.com/vitejs/vite-plugin-react/issues/556)) ([840f0b1](https://github.com/vitejs/vite-plugin-react/commit/840f0b1386b65e6c96ca3b953a2811348ec5c3a0)) -* **rsc:** adjust changelog ([#544](https://github.com/vitejs/vite-plugin-react/issues/544)) ([713a320](https://github.com/vitejs/vite-plugin-react/commit/713a3204aeb8bd36fd14cf52197d0f7677db4abc)) -* **rsc:** remove unused code ([#550](https://github.com/vitejs/vite-plugin-react/issues/550)) ([8c3929c](https://github.com/vitejs/vite-plugin-react/commit/8c3929c4a8c02a3fe2251fde087fa42358a79de5)) -* **rsc:** tweak cloudflare setting on rolldown-vite ([#551](https://github.com/vitejs/vite-plugin-react/issues/551)) ([1a4a7bb](https://github.com/vitejs/vite-plugin-react/commit/1a4a7bbc051ea22f3290f8abed2e5966ce60e4da)) -* **rsc:** update readme ([#553](https://github.com/vitejs/vite-plugin-react/issues/553)) ([822e7dd](https://github.com/vitejs/vite-plugin-react/commit/822e7dd4e4ef3a613f734f46ad8681957881c4ba)) -* ts-ignore for rolldown-vite ci ([#566](https://github.com/vitejs/vite-plugin-react/issues/566)) ([44567c3](https://github.com/vitejs/vite-plugin-react/commit/44567c350b6b0b887dc404ae7ed81d6eab5515a5)) - -### Tests - -* **rsc:** fix `setupIsolatedFixture` on windows ci ([#559](https://github.com/vitejs/vite-plugin-react/issues/559)) ([aa004d4](https://github.com/vitejs/vite-plugin-react/commit/aa004d41c5f650dfe8b24fb51b01a79fa94ae612)) -* **rsc:** fix ssr modulepreload link test ([#565](https://github.com/vitejs/vite-plugin-react/issues/565)) ([b1d63a8](https://github.com/vitejs/vite-plugin-react/commit/b1d63a8f0f56ca33cb11d5a509a7d31ff9207474)) -* **rsc:** fix tests on rolldown-vite ([#549](https://github.com/vitejs/vite-plugin-react/issues/549)) ([b37d377](https://github.com/vitejs/vite-plugin-react/commit/b37d377bc48fb99b451036d20aec45367580a627)) -* **rsc:** serial e2e ([#545](https://github.com/vitejs/vite-plugin-react/issues/545)) ([904a062](https://github.com/vitejs/vite-plugin-react/commit/904a0623cc55b2c5944f0da396dc99b82b8a8ddb)) - -### Continuous Integration - -* **rsc:** disable `TEST_ISOLATED` on windows ([#558](https://github.com/vitejs/vite-plugin-react/issues/558)) ([fb5e40d](https://github.com/vitejs/vite-plugin-react/commit/fb5e40d784be2109885c2c6168ee9cc11c7592a8)) - ## [0.4.11](https://github.com/vitejs/vite-plugin-react/compare/plugin-rsc@0.4.10...plugin-rsc@0.4.11) (2025-07-07) ### Miscellaneous Chores @@ -42,19 +22,6 @@ * **deps:** update all non-major dependencies ([#540](https://github.com/vitejs/vite-plugin-react/issues/540)) ([cfe2912](https://github.com/vitejs/vite-plugin-react/commit/cfe29122a8eec6c1e2ed9999531237dbce140e60)) * return `Plugin[]` instead of `PluginOption[]` ([#537](https://github.com/vitejs/vite-plugin-react/issues/537)) ([11f56d6](https://github.com/vitejs/vite-plugin-react/commit/11f56d63a9ed082137732211db556c784cadb523)) -### Miscellaneous Chores - -* **rsc:** fix example deps ([#534](https://github.com/vitejs/vite-plugin-react/issues/534)) ([a7d32a0](https://github.com/vitejs/vite-plugin-react/commit/a7d32a0a1c383964b67fa01c1f5959446759f02d)) -* **rsc:** fix links ([#530](https://github.com/vitejs/vite-plugin-react/issues/530)) ([feb762f](https://github.com/vitejs/vite-plugin-react/commit/feb762f291cf6460281e64820374bf288485c4a3)) -* **rsc:** remove `examples/hono` ([#533](https://github.com/vitejs/vite-plugin-react/issues/533)) ([46df0fd](https://github.com/vitejs/vite-plugin-react/commit/46df0fd6274365168259a67bc63ea1e689eb9681)) - -### Tests - -* **rsc:** check hydration mismatch ([#526](https://github.com/vitejs/vite-plugin-react/issues/526)) ([ce84449](https://github.com/vitejs/vite-plugin-react/commit/ce84449c87a8834ffafcf0b3f2fc63ad464b921d)) -* **rsc:** fix flaky server restart test ([#535](https://github.com/vitejs/vite-plugin-react/issues/535)) ([079feaf](https://github.com/vitejs/vite-plugin-react/commit/079feaf1ac2b06a704efc0c7ef6d6a0276207d53)) -* **rsc:** test browser only component ([#528](https://github.com/vitejs/vite-plugin-react/issues/528)) ([795303e](https://github.com/vitejs/vite-plugin-react/commit/795303efe78fed2cff2237c6d6d066d76c284ced)) -* **rsc:** test react compiler ([#529](https://github.com/vitejs/vite-plugin-react/issues/529)) ([2966af5](https://github.com/vitejs/vite-plugin-react/commit/2966af52393514e0c23d3236afccba699b042322)) - ## v0.4.10-alpha.1 (2025-07-04) - feat: add `@vitejs/plugin-rsc` ([#521](https://github.com/vitejs/vite-plugin-react/pull/521)) From 20bf875c95700456d3220b9784e32a1d092f6c84 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 14 Jul 2025 11:49:24 +0900 Subject: [PATCH 092/313] chore: add plugin-rsc to issue templates (#574) --- .github/ISSUE_TEMPLATE/bug_report.yml | 2 ++ .github/ISSUE_TEMPLATE/feature_request.yml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index ca1aad91f..b2bf121e9 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -19,6 +19,8 @@ body: [plugin-react-swc](https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react-swc) - label: | [plugin-react-oxc](https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react-oxc) + - label: | + [plugin-rsc](https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-rsc) - type: textarea id: bug-description attributes: diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 453e70e6d..22ad9c813 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -19,6 +19,8 @@ body: [plugin-react-swc](https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react-swc) - label: | [plugin-react-oxc](https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react-oxc) + - label: | + [plugin-rsc](https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-rsc) - type: textarea id: feature-description attributes: From 7c564ff4f290a554927f2eef600e82bffee16e6b Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 14 Jul 2025 12:01:05 +0900 Subject: [PATCH 093/313] chore: replace `build --app` with `build` in examples (#572) --- packages/plugin-rsc/examples/basic/package.json | 2 +- packages/plugin-rsc/examples/react-router/package.json | 2 +- playground/ssr-react/package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/plugin-rsc/examples/basic/package.json b/packages/plugin-rsc/examples/basic/package.json index e12b60482..3cde8054f 100644 --- a/packages/plugin-rsc/examples/basic/package.json +++ b/packages/plugin-rsc/examples/basic/package.json @@ -5,7 +5,7 @@ "type": "module", "scripts": { "dev": "vite", - "build": "vite build --app", + "build": "vite build", "preview": "vite preview", "cf-build": "CF_BUILD=1 pnpm build", "cf-preview": "wrangler dev", diff --git a/packages/plugin-rsc/examples/react-router/package.json b/packages/plugin-rsc/examples/react-router/package.json index 77fa70034..7f39e2322 100644 --- a/packages/plugin-rsc/examples/react-router/package.json +++ b/packages/plugin-rsc/examples/react-router/package.json @@ -5,7 +5,7 @@ "type": "module", "scripts": { "dev": "vite", - "build": "vite build --app", + "build": "vite build", "preview": "vite preview", "cf-dev": "vite -c ./cf/vite.config.ts", "cf-build": "vite -c ./cf/vite.config.ts build", diff --git a/playground/ssr-react/package.json b/playground/ssr-react/package.json index 23fcd26ab..f0091a61a 100644 --- a/playground/ssr-react/package.json +++ b/playground/ssr-react/package.json @@ -4,7 +4,7 @@ "type": "module", "scripts": { "dev": "vite dev", - "build": "vite build --app", + "build": "vite build", "preview": "vite preview" }, "dependencies": { From fa60127be46d48ecd8a8b0d0e7e6751ed11303e2 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 14 Jul 2025 17:01:07 +0900 Subject: [PATCH 094/313] fix(rsc): await handler to avoid unhandled rejection (#576) --- packages/plugin-rsc/src/plugin.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index d53f31e15..8f7f7f0f3 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -303,7 +303,9 @@ export default function vitePluginRsc( `[vite-rsc] failed to resolve server handler '${source}'`, ) const mod = await environment.runner.import(resolved.id) - createRequestListener(mod.default)(req, res) + // ensure catching rejected promise + // https://github.com/mjackson/remix-the-web/blob/b5aa2ae24558f5d926af576482caf6e9b35461dc/packages/node-fetch-server/src/lib/request-listener.ts#L87 + await createRequestListener(mod.default)(req, res) } catch (e) { next(e) } @@ -336,7 +338,7 @@ export default function vitePluginRsc( return () => { server.middlewares.use(async (req, res, next) => { try { - handler(req, res) + await handler(req, res) } catch (e) { next(e) } From d14f31d3bf8487346ae6f9db7e6ca7263c93066b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 15 Jul 2025 10:13:32 +0900 Subject: [PATCH 095/313] fix(deps): update all non-major dependencies (#568) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 14 +- packages/plugin-react-oxc/package.json | 2 +- packages/plugin-react-swc/package.json | 6 +- packages/plugin-react/package.json | 4 +- .../plugin-rsc/examples/basic/package.json | 4 +- .../plugin-rsc/examples/no-ssr/package.json | 2 +- .../examples/react-router/package.json | 6 +- .../examples/starter-cf-single/package.json | 2 +- .../plugin-rsc/examples/starter/package.json | 2 +- packages/plugin-rsc/package.json | 4 +- pnpm-lock.yaml | 814 ++++++++++-------- pnpm-workspace.yaml | 2 +- 12 files changed, 458 insertions(+), 404 deletions(-) diff --git a/package.json b/package.json index 54f33e1d2..b51a42923 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "engines": { "node": "^14.18.0 || >=16.0.0" }, - "packageManager": "pnpm@10.12.4", + "packageManager": "pnpm@10.13.1", "homepage": "https://github.com/vitejs/vite-plugin-react/", "keywords": [ "frontend", @@ -33,11 +33,11 @@ "ci-publish": "tsx scripts/publishCI.ts" }, "devDependencies": { - "@eslint/js": "^9.30.1", + "@eslint/js": "^9.31.0", "@types/fs-extra": "^11.0.4", - "@types/node": "^22.16.0", + "@types/node": "^22.16.3", "@vitejs/release-scripts": "^1.6.0", - "eslint": "^9.30.1", + "eslint": "^9.31.0", "eslint-plugin-import-x": "^4.16.1", "eslint-plugin-n": "^17.21.0", "eslint-plugin-regexp": "^2.9.0", @@ -45,13 +45,13 @@ "globals": "^16.3.0", "lint-staged": "^15.5.2", "picocolors": "^1.1.1", - "playwright-chromium": "^1.53.2", + "playwright-chromium": "^1.54.1", "prettier": "^3.6.2", "simple-git-hooks": "^2.13.0", "tsx": "^4.20.3", "typescript": "^5.8.3", - "typescript-eslint": "^8.35.1", - "vite": "^7.0.2", + "typescript-eslint": "^8.37.0", + "vite": "^7.0.4", "vitest": "^3.2.4" }, "simple-git-hooks": { diff --git a/packages/plugin-react-oxc/package.json b/packages/plugin-react-oxc/package.json index cc860a81a..cb918ad46 100644 --- a/packages/plugin-react-oxc/package.json +++ b/packages/plugin-react-oxc/package.json @@ -49,6 +49,6 @@ "vite": "catalog:rolldown-vite" }, "dependencies": { - "@rolldown/pluginutils": "1.0.0-beta.24" + "@rolldown/pluginutils": "1.0.0-beta.27" } } diff --git a/packages/plugin-react-swc/package.json b/packages/plugin-react-swc/package.json index ae63dc640..6febd4c90 100644 --- a/packages/plugin-react-swc/package.json +++ b/packages/plugin-react-swc/package.json @@ -29,16 +29,16 @@ }, "homepage": "https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react-swc#readme", "dependencies": { - "@rolldown/pluginutils": "1.0.0-beta.24", + "@rolldown/pluginutils": "1.0.0-beta.27", "@swc/core": "^1.12.11" }, "peerDependencies": { "vite": "^4 || ^5 || ^6 || ^7" }, "devDependencies": { - "@playwright/test": "^1.53.2", + "@playwright/test": "^1.54.1", "@types/fs-extra": "^11.0.4", - "@types/node": "^22.16.0", + "@types/node": "^22.16.3", "@vitejs/react-common": "workspace:*", "fs-extra": "^11.3.0", "prettier": "^3.0.3", diff --git a/packages/plugin-react/package.json b/packages/plugin-react/package.json index 8a222df8f..082365a56 100644 --- a/packages/plugin-react/package.json +++ b/packages/plugin-react/package.json @@ -51,7 +51,7 @@ "@babel/core": "^7.28.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", - "@rolldown/pluginutils": "1.0.0-beta.24", + "@rolldown/pluginutils": "1.0.0-beta.27", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, @@ -63,7 +63,7 @@ "babel-plugin-react-compiler": "19.1.0-rc.2", "react": "^19.1.0", "react-dom": "^19.1.0", - "rolldown": "1.0.0-beta.24", + "rolldown": "1.0.0-beta.27", "tsdown": "^0.12.9", "vitest": "^3.2.4" } diff --git a/packages/plugin-rsc/examples/basic/package.json b/packages/plugin-rsc/examples/basic/package.json index 3cde8054f..fc11d417a 100644 --- a/packages/plugin-rsc/examples/basic/package.json +++ b/packages/plugin-rsc/examples/basic/package.json @@ -27,8 +27,8 @@ "@vitejs/test-dep-server-in-server": "file:./test-dep/server-in-server", "babel-plugin-react-compiler": "19.1.0-rc.2", "tailwindcss": "^4.1.11", - "vite": "^7.0.2", + "vite": "^7.0.4", "vite-plugin-inspect": "^11.3.0", - "wrangler": "^4.23.0" + "wrangler": "^4.24.3" } } diff --git a/packages/plugin-rsc/examples/no-ssr/package.json b/packages/plugin-rsc/examples/no-ssr/package.json index 64a3f79b4..fef0a5e46 100644 --- a/packages/plugin-rsc/examples/no-ssr/package.json +++ b/packages/plugin-rsc/examples/no-ssr/package.json @@ -18,6 +18,6 @@ "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "latest", - "vite": "^7.0.2" + "vite": "^7.0.4" } } diff --git a/packages/plugin-rsc/examples/react-router/package.json b/packages/plugin-rsc/examples/react-router/package.json index 7f39e2322..e5b66dd17 100644 --- a/packages/plugin-rsc/examples/react-router/package.json +++ b/packages/plugin-rsc/examples/react-router/package.json @@ -19,7 +19,7 @@ "react-router": "0.0.0-experimental-23decd7bc" }, "devDependencies": { - "@cloudflare/vite-plugin": "^1.9.0", + "@cloudflare/vite-plugin": "^1.9.4", "@react-router/dev": "0.0.0-experimental-23decd7bc", "@tailwindcss/typography": "^0.5.16", "@tailwindcss/vite": "^4.1.11", @@ -27,8 +27,8 @@ "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "latest", "tailwindcss": "^4.1.11", - "vite": "^7.0.2", + "vite": "^7.0.4", "vite-plugin-inspect": "^11.3.0", - "wrangler": "^4.23.0" + "wrangler": "^4.24.3" } } diff --git a/packages/plugin-rsc/examples/starter-cf-single/package.json b/packages/plugin-rsc/examples/starter-cf-single/package.json index eac94a97c..a2fbd24ea 100644 --- a/packages/plugin-rsc/examples/starter-cf-single/package.json +++ b/packages/plugin-rsc/examples/starter-cf-single/package.json @@ -16,7 +16,7 @@ "react-dom": "^19.1.0" }, "devDependencies": { - "@cloudflare/vite-plugin": "^1.9.0", + "@cloudflare/vite-plugin": "^1.9.4", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "latest" diff --git a/packages/plugin-rsc/examples/starter/package.json b/packages/plugin-rsc/examples/starter/package.json index c9f7b75e7..b400b4da0 100644 --- a/packages/plugin-rsc/examples/starter/package.json +++ b/packages/plugin-rsc/examples/starter/package.json @@ -18,7 +18,7 @@ "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "latest", - "vite": "^7.0.2", + "vite": "^7.0.4", "vite-plugin-inspect": "^11.3.0" } } diff --git a/packages/plugin-rsc/package.json b/packages/plugin-rsc/package.json index 1981a4d5e..8fae1aca7 100644 --- a/packages/plugin-rsc/package.json +++ b/packages/plugin-rsc/package.json @@ -48,10 +48,10 @@ }, "devDependencies": { "@hiogawa/utils": "^1.7.0", - "@playwright/test": "^1.53.2", + "@playwright/test": "^1.54.1", "@tsconfig/strictest": "^2.0.5", "@types/estree": "^1.0.8", - "@types/node": "^22.16.0", + "@types/node": "^22.16.3", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "workspace:*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index febc2ca6e..5e02064aa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,8 +7,8 @@ settings: catalogs: rolldown-vite: vite: - specifier: npm:rolldown-vite@^7.0.5 - version: 7.0.5 + specifier: npm:rolldown-vite@^7.0.9 + version: 7.0.9 overrides: '@types/estree': ^1.0.8 @@ -18,29 +18,29 @@ importers: .: devDependencies: '@eslint/js': - specifier: ^9.30.1 - version: 9.30.1 + specifier: ^9.31.0 + version: 9.31.0 '@types/fs-extra': specifier: ^11.0.4 version: 11.0.4 '@types/node': - specifier: ^22.16.0 - version: 22.16.0 + specifier: ^22.16.3 + version: 22.16.3 '@vitejs/release-scripts': specifier: ^1.6.0 version: 1.6.0(conventional-commits-filter@5.0.0) eslint: - specifier: ^9.30.1 - version: 9.30.1(jiti@2.4.2) + specifier: ^9.31.0 + version: 9.31.0(jiti@2.4.2) eslint-plugin-import-x: specifier: ^4.16.1 - version: 4.16.1(@typescript-eslint/utils@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2)) + version: 4.16.1(@typescript-eslint/utils@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2)) eslint-plugin-n: specifier: ^17.21.0 - version: 17.21.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) + version: 17.21.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) eslint-plugin-regexp: specifier: ^2.9.0 - version: 2.9.0(eslint@9.30.1(jiti@2.4.2)) + version: 2.9.0(eslint@9.31.0(jiti@2.4.2)) fs-extra: specifier: ^11.3.0 version: 11.3.0 @@ -54,8 +54,8 @@ importers: specifier: ^1.1.1 version: 1.1.1 playwright-chromium: - specifier: ^1.53.2 - version: 1.53.2 + specifier: ^1.54.1 + version: 1.54.1 prettier: specifier: ^3.6.2 version: 3.6.2 @@ -69,14 +69,14 @@ importers: specifier: ^5.8.3 version: 5.8.3 typescript-eslint: - specifier: ^8.35.1 - version: 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) + specifier: ^8.37.0 + version: 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) vite: - specifier: ^7.0.2 - version: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + specifier: ^7.0.4 + version: 7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) packages/common: {} @@ -92,8 +92,8 @@ importers: specifier: ^7.27.1 version: 7.27.1(@babel/core@7.28.0) '@rolldown/pluginutils': - specifier: 1.0.0-beta.24 - version: 1.0.0-beta.24 + specifier: 1.0.0-beta.27 + version: 1.0.0-beta.27 '@types/babel__core': specifier: ^7.20.5 version: 7.20.5 @@ -114,20 +114,20 @@ importers: specifier: ^19.1.0 version: 19.1.0(react@19.1.0) rolldown: - specifier: 1.0.0-beta.24 - version: 1.0.0-beta.24 + specifier: 1.0.0-beta.27 + version: 1.0.0-beta.27 tsdown: specifier: ^0.12.9 version: 0.12.9(publint@0.3.12)(typescript@5.8.3) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) packages/plugin-react-oxc: dependencies: '@rolldown/pluginutils': - specifier: 1.0.0-beta.24 - version: 1.0.0-beta.24 + specifier: 1.0.0-beta.27 + version: 1.0.0-beta.27 devDependencies: '@vitejs/react-common': specifier: workspace:* @@ -140,26 +140,26 @@ importers: version: 3.5.0(typescript@5.8.3) vite: specifier: catalog:rolldown-vite - version: rolldown-vite@7.0.5(@types/node@22.16.0)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1) + version: rolldown-vite@7.0.9(@types/node@22.16.3)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1) packages/plugin-react-swc: dependencies: '@rolldown/pluginutils': - specifier: 1.0.0-beta.24 - version: 1.0.0-beta.24 + specifier: 1.0.0-beta.27 + version: 1.0.0-beta.27 '@swc/core': specifier: ^1.12.11 version: 1.12.11 devDependencies: '@playwright/test': - specifier: ^1.53.2 - version: 1.53.2 + specifier: ^1.54.1 + version: 1.54.1 '@types/fs-extra': specifier: ^11.0.4 version: 11.0.4 '@types/node': - specifier: ^22.16.0 - version: 22.16.0 + specifier: ^22.16.3 + version: 22.16.3 '@vitejs/react-common': specifier: workspace:* version: link:../common @@ -461,14 +461,14 @@ importers: version: 3.1.0 vitefu: specifier: ^1.1.1 - version: 1.1.1(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 1.1.1(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) devDependencies: '@hiogawa/utils': specifier: ^1.7.0 version: 1.7.0 '@playwright/test': - specifier: ^1.53.2 - version: 1.53.2 + specifier: ^1.54.1 + version: 1.54.1 '@tsconfig/strictest': specifier: ^2.0.5 version: 2.0.5 @@ -476,8 +476,8 @@ importers: specifier: ^1.0.8 version: 1.0.8 '@types/node': - specifier: ^22.16.0 - version: 22.16.0 + specifier: ^22.16.3 + version: 22.16.3 '@types/react': specifier: ^19.1.8 version: 19.1.8 @@ -520,7 +520,7 @@ importers: devDependencies: '@tailwindcss/vite': specifier: ^4.1.11 - version: 4.1.11(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 4.1.11(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) '@types/react': specifier: ^19.1.8 version: 19.1.8 @@ -549,14 +549,14 @@ importers: specifier: ^4.1.11 version: 4.1.11 vite: - specifier: ^7.0.2 - version: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + specifier: ^7.0.4 + version: 7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vite-plugin-inspect: specifier: ^11.3.0 - version: 11.3.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 11.3.0(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) wrangler: - specifier: ^4.23.0 - version: 4.23.0 + specifier: ^4.24.3 + version: 4.24.3 packages/plugin-rsc/examples/no-ssr: dependencies: @@ -580,8 +580,8 @@ importers: specifier: latest version: link:../../../plugin-react vite: - specifier: ^7.0.2 - version: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + specifier: ^7.0.4 + version: 7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) packages/plugin-rsc/examples/react-router: dependencies: @@ -599,17 +599,17 @@ importers: version: 0.0.0-experimental-23decd7bc(react-dom@19.1.0(react@19.1.0))(react@19.1.0) devDependencies: '@cloudflare/vite-plugin': - specifier: ^1.9.0 - version: 1.9.0(rollup@4.44.1)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250617.0)(wrangler@4.23.0) + specifier: ^1.9.4 + version: 1.9.4(rollup@4.44.1)(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250709.0)(wrangler@4.24.3) '@react-router/dev': specifier: 0.0.0-experimental-23decd7bc - version: 0.0.0-experimental-23decd7bc(@types/node@22.16.0)(babel-plugin-macros@3.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(react-router@0.0.0-experimental-23decd7bc(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tsx@4.20.3)(typescript@5.8.3)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(wrangler@4.23.0)(yaml@2.7.1) + version: 0.0.0-experimental-23decd7bc(@types/node@22.16.3)(babel-plugin-macros@3.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(react-router@0.0.0-experimental-23decd7bc(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tsx@4.20.3)(typescript@5.8.3)(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(wrangler@4.24.3)(yaml@2.7.1) '@tailwindcss/typography': specifier: ^0.5.16 version: 0.5.16(tailwindcss@4.1.11) '@tailwindcss/vite': specifier: ^4.1.11 - version: 4.1.11(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 4.1.11(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) '@types/react': specifier: ^19.1.8 version: 19.1.8 @@ -623,14 +623,14 @@ importers: specifier: ^4.1.11 version: 4.1.11 vite: - specifier: ^7.0.2 - version: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + specifier: ^7.0.4 + version: 7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vite-plugin-inspect: specifier: ^11.3.0 - version: 11.3.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 11.3.0(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) wrangler: - specifier: ^4.23.0 - version: 4.23.0 + specifier: ^4.24.3 + version: 4.24.3 packages/plugin-rsc/examples/ssg: dependencies: @@ -658,7 +658,7 @@ importers: version: link:../../../plugin-react vite-plugin-inspect: specifier: ^11.3.0 - version: 11.3.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 11.3.0(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) packages/plugin-rsc/examples/starter: dependencies: @@ -682,11 +682,11 @@ importers: specifier: latest version: link:../../../plugin-react vite: - specifier: ^7.0.2 - version: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + specifier: ^7.0.4 + version: 7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vite-plugin-inspect: specifier: ^11.3.0 - version: 11.3.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 11.3.0(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) packages/plugin-rsc/examples/starter-cf-single: dependencies: @@ -701,8 +701,8 @@ importers: version: 19.1.0(react@19.1.0) devDependencies: '@cloudflare/vite-plugin': - specifier: ^1.9.0 - version: 1.9.0(rollup@4.44.1)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250617.0)(wrangler@4.23.0) + specifier: ^1.9.4 + version: 1.9.4(rollup@4.44.1)(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250709.0)(wrangler@4.24.3) '@types/react': specifier: ^19.1.8 version: 19.1.8 @@ -1203,38 +1203,38 @@ packages: workerd: optional: true - '@cloudflare/vite-plugin@1.9.0': - resolution: {integrity: sha512-YYmWZklDPF7Ay97JX51bZzKGNP7Z6Sme0+Pje1g5Jr7M6oU6L3NmmvIi8VKFLM48FRlSpXRmTF1tULJng6d6vg==} + '@cloudflare/vite-plugin@1.9.4': + resolution: {integrity: sha512-i1sMePamMZs/eR5ennHNICEFEtXWDCbt8j+mSE0EQuMFt0YrqqU9WSCZzUvISyYebnnLfnHZQpq3Y8y4uPz4RQ==} peerDependencies: vite: ^6.1.0 || ^7.0.0 - wrangler: ^3.101.0 || ^4.0.0 + wrangler: 4.24.3 - '@cloudflare/workerd-darwin-64@1.20250617.0': - resolution: {integrity: sha512-toG8JUKVLIks4oOJLe9FeuixE84pDpMZ32ip7mCpE7JaFc5BqGFvevk0YC/db3T71AQlialjRwioH3jS/dzItA==} + '@cloudflare/workerd-darwin-64@1.20250709.0': + resolution: {integrity: sha512-VqwcvnbI8FNCP87ZWNHA3/sAC5U9wMbNnjBG0sHEYzM7B9RPHKYHdVKdBEWhzZXnkQYMK81IHm4CZsK16XxAuQ==} engines: {node: '>=16'} cpu: [x64] os: [darwin] - '@cloudflare/workerd-darwin-arm64@1.20250617.0': - resolution: {integrity: sha512-JTX0exbC9/ZtMmQQA8tDZEZFMXZrxOpTUj2hHnsUkErWYkr5SSZH04RBhPg6dU4VL8bXuB5/eJAh7+P9cZAp7g==} + '@cloudflare/workerd-darwin-arm64@1.20250709.0': + resolution: {integrity: sha512-A54ttSgXMM4huChPTThhkieOjpDxR+srVOO9zjTHVIyoQxA8zVsku4CcY/GQ95RczMV+yCKVVu/tAME7vwBFuA==} engines: {node: '>=16'} cpu: [arm64] os: [darwin] - '@cloudflare/workerd-linux-64@1.20250617.0': - resolution: {integrity: sha512-8jkSoVRJ+1bOx3tuWlZCGaGCV2ew7/jFMl6V3CPXOoEtERUHsZBQLVkQIGKcmC/LKSj7f/mpyBUeu2EPTo2HEg==} + '@cloudflare/workerd-linux-64@1.20250709.0': + resolution: {integrity: sha512-no4O3OK+VXINIxv99OHJDpIgML2ZssrSvImwLtULzqm+cl4t1PIfXNRUqj89ujTkmad+L9y4G6dBQMPCLnmlGg==} engines: {node: '>=16'} cpu: [x64] os: [linux] - '@cloudflare/workerd-linux-arm64@1.20250617.0': - resolution: {integrity: sha512-YAzcOyu897z5dQKFzme1oujGWMGEJCR7/Wrrm1nSP6dqutxFPTubRADM8BHn2CV3ij//vaPnAeLmZE3jVwOwig==} + '@cloudflare/workerd-linux-arm64@1.20250709.0': + resolution: {integrity: sha512-7cNICk2Qd+m4QGrcmWyAuZJXTHt1ud6isA+dic7Yk42WZmwXhlcUATyvFD9FSQNFcldjuRB4n8JlWEFqZBn+lw==} engines: {node: '>=16'} cpu: [arm64] os: [linux] - '@cloudflare/workerd-windows-64@1.20250617.0': - resolution: {integrity: sha512-XWM/6sagDrO0CYDKhXhPjM23qusvIN1ju9ZEml6gOQs8tNOFnq6Cn6X9FAmnyapRFCGUSEC3HZYJAm7zwVKaMA==} + '@cloudflare/workerd-windows-64@1.20250709.0': + resolution: {integrity: sha512-j1AyO8V/62Q23EJplWgzBlRCqo/diXgox58AbDqSqgyzCBAlvUzXQRDBab/FPNG/erRqt7I1zQhahrBhrM0uLA==} engines: {node: '>=16'} cpu: [x64] os: [win32] @@ -1949,12 +1949,16 @@ packages: resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/core@0.15.1': + resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.30.1': - resolution: {integrity: sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==} + '@eslint/js@9.31.0': + resolution: {integrity: sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': @@ -2152,6 +2156,9 @@ packages: '@napi-rs/wasm-runtime@0.2.11': resolution: {integrity: sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==} + '@napi-rs/wasm-runtime@0.2.12': + resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -2176,29 +2183,34 @@ packages: resolution: {integrity: sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - '@oxc-project/runtime@0.75.0': - resolution: {integrity: sha512-gzRmVI/vorsPmbDXt7GD4Uh2lD3rCOku/1xWPB4Yx48k0EP4TZmzQudWapjN4+7Vv+rgXr0RqCHQadeaMvdBuw==} + '@oxc-project/runtime@0.77.0': + resolution: {integrity: sha512-cMbHs/DaomWSjxeJ79G10GA5hzJW9A7CZ+/cO+KuPZ7Trf3Rr07qSLauC4Ns8ba4DKVDjd8VSC9nVLpw6jpoGQ==} engines: {node: '>=6.9.0'} - '@oxc-project/runtime@0.75.1': - resolution: {integrity: sha512-UH07DRi7xXqAsJ/sFbJJg0liIXnapB6P5uADXIiF1s6WQjZzcTIkKHca0s522QVxmijPxVX5ijCYxSr7eSq5CQ==} - engines: {node: '>=6.9.0'} - - '@oxc-project/types@0.75.1': - resolution: {integrity: sha512-7ZJy+51qWpZRvynaQUezeYfjCtaSdiXIWFUZIlOuTSfDXpXqnSl/m1IUPLx6XrOy6s0SFv3CLE14vcZy63bz7g==} + '@oxc-project/types@0.77.0': + resolution: {integrity: sha512-iUQj185VvCPnSba+ltUV5tVDrPX6LeZVtQywnnoGbe4oJ1VKvDKisjGkD/AvVtdm98b/BdsVS35IlJV1m2mBBA==} '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.53.2': - resolution: {integrity: sha512-tEB2U5z74ebBeyfGNZ3Jfg29AnW+5HlWhvHtb/Mqco9pFdZU1ZLNdVb2UtB5CvmiilNr2ZfVH/qMmAROG/XTzw==} + '@playwright/test@1.54.1': + resolution: {integrity: sha512-FS8hQ12acieG2dYSksmLOF7BNxnVf2afRJdCuM1eMSxj6QTSE6G4InGF7oApGgDb65MX7AwMVlIkpru0yZA4Xw==} engines: {node: '>=18'} hasBin: true '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} + '@poppinss/colors@4.1.5': + resolution: {integrity: sha512-FvdDqtcRCtz6hThExcFOgW0cWX+xwSMWcRuQe5ZEb2m7cVQOAVZOIMt+/v9RxGiD9/OY16qJBXK4CVKWAPalBw==} + + '@poppinss/dumper@0.6.4': + resolution: {integrity: sha512-iG0TIdqv8xJ3Lt9O8DrPRxw1MRLjNpoqiSGU03P/wNLP/s0ra0udPJ1J2Tx5M0J3H/cVyEgpbn8xUKRY9j59kQ==} + + '@poppinss/exception@1.2.2': + resolution: {integrity: sha512-m7bpKCD4QMlFCjA/nKTs23fuvoVFoA83brRKmObCUNmi/9tVu8Ve3w4YQAnJu4q3Tjf5fr685HYIC/IA2zHRSg==} + '@publint/pack@0.1.2': resolution: {integrity: sha512-S+9ANAvUmjutrshV4jZjaiG8XQyuJIZ8a4utWmN/vW1sgQ9IfBnPndwkmQYw53QmouOIytT874u65HEmu6H5jw==} engines: {node: '>=18'} @@ -2235,68 +2247,78 @@ packages: typescript: optional: true - '@rolldown/binding-darwin-arm64@1.0.0-beta.24': - resolution: {integrity: sha512-gE4HGjIioZaMGZupq2zQQdqhlRV2b2qnjFHHkJEW50zVDmiVNWwdHjwvZDPx9JfW5y4GuHgp/zKDLZZbJlQ1/Q==} + '@rolldown/binding-android-arm64@1.0.0-beta.27': + resolution: {integrity: sha512-IJL3efUJmvb5MfTEi7bGK4jq3ZFAzVbSy+vmul0DcdrglUd81Tfyy7Zzq2oM0tUgmACG32d8Jz/ykbpbf+3C5A==} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.0-beta.27': + resolution: {integrity: sha512-TXTiuHbtnHfb0c44vNfWfIyEFJ0BFUf63ip9Z4mj8T2zRcZXQYVger4OuAxnwGNGBgDyHo1VaNBG+Vxn2VrpqQ==} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-beta.24': - resolution: {integrity: sha512-h2HfOtqmjIHIz9WdpKAJ8sBfLNGkrMlwrCfNV2MDDGu0x3YdYBYPE+ozS5PvE53Tp8y6EYn2/thNWJTGWy/N3Q==} + '@rolldown/binding-darwin-x64@1.0.0-beta.27': + resolution: {integrity: sha512-Jpjflgvbolh+fAaaEajPJQCOpZMawYMbNVzuZp3nidX1B7kMAP7NEKp9CWzthoL2Y8RfD7OApN6bx4+vFurTaw==} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-beta.24': - resolution: {integrity: sha512-lx3Q2TU2bbY4yDCZ6e+Wiom3VMLFlZmQswx/1CyjFd+Vv3Q+99SZm6CSfNAIZBaWD246yQRRr1Vx+iIoWCdYzQ==} + '@rolldown/binding-freebsd-x64@1.0.0-beta.27': + resolution: {integrity: sha512-07ZNlXIunyS1jCTnene7aokkzCZNBUnmnJWu4Nz5X5XQvVHJNjsDhPFJTlNmneSDzA3vGkRNwdECKXiDTH/CqA==} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.24': - resolution: {integrity: sha512-PLtsV6uf3uS1/cNF8Wu/kitTpXT2YpOZbN6VJm7oMi5A8o5oO0vh8STCB71O5k2kwQMVycsmxHWFk2ZyEa6aMw==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.27': + resolution: {integrity: sha512-z74ah00oyKnTUtaIbg34TaIU1PYM8tGE1bK6aUs8OLZ9sWW4g3Xo5A0nit2zyeanmYFvrAUxnt3Bpk+mTZCtlg==} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.24': - resolution: {integrity: sha512-UxGukDkWnv7uS5R+BPVeJ4FSuwA+lgC62LRsyPPSJhJhKMNGZ2W9sQPIpEtBRlww8t0qR6QBsiD5TGLW98ktGw==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.27': + resolution: {integrity: sha512-b9oKl/M5OIyAcosS73BmjOZOjvcONV97t2SnKpgwfDX/mjQO3dBgTYyvHMFA6hfhIDW1+2XVQR/k5uzBULFhoA==} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.24': - resolution: {integrity: sha512-vB99yGYW9FOQe4lk3MNKa13+vRj+7waZFlRE3Ba/IpEy7RFxZ78ASkPLXkz4+kYYbUvMnRaOfk9RKX2fqYZRUg==} + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.27': + resolution: {integrity: sha512-RmaNSkVmAH8u/r5Q+v4O0zL4HY8pLrvlM5wBoBrb/QHDQgksGKBqhecpg1ERER0Q7gMh/GJUz6JiiD55Q+9UOA==} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.24': - resolution: {integrity: sha512-fAMZBWutuKWHsyvHVsKjFYRXVgTbzBfNmomzPPpog8UtdkHk5Vnb0qVEeZP4hR4TsXnKfzD2EQ98NRqFej5QYA==} + '@rolldown/binding-linux-arm64-ohos@1.0.0-beta.27': + resolution: {integrity: sha512-gq78fI/g0cp1UKFMk53kP/oZAgYOXbaqdadVMuCJc0CoSkDJcpO2YIasRs/QYlE91QWfcHD5RZl9zbf4ksTS/w==} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.27': + resolution: {integrity: sha512-yS/GreJ6BT44dHu1WLigc50S8jZA+pDzzsf8tqRptUTwi5YW7dX3NqcDlc/lXsZqu57aKynLljgClYAm90LEKw==} cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-musl@1.0.0-beta.24': - resolution: {integrity: sha512-0UY/Qo8fAlpolcWOg2ZU7SCUrsCJWifdRMliV9GXlZaBKbMoVNFw0pHGDm9cj/3TWhJu/iB0peZK00dm22LlNw==} + '@rolldown/binding-linux-x64-musl@1.0.0-beta.27': + resolution: {integrity: sha512-6FV9To1sXewGHY4NaCPeOE5p5o1qfuAjj+m75WVIPw9HEJVsQoC5QiTL5wWVNqSMch4X0eWnQ6WsQolU6sGMIA==} cpu: [x64] os: [linux] - '@rolldown/binding-wasm32-wasi@1.0.0-beta.24': - resolution: {integrity: sha512-7ubbtKCo6FBuAM4q6LoT5dOea7f/zj9OYXgumbwSmA0fw18mN5h8SrFTUjl7h9MpPkOyhi2uY6ss4pb39KXkcw==} - engines: {node: '>=14.21.3'} + '@rolldown/binding-wasm32-wasi@1.0.0-beta.27': + resolution: {integrity: sha512-VcxdhF0PQda9krFJHw4DqUkdAsHWYs/Uz/Kr/zhU8zMFDzmK6OdUgl9emGj9wTzXAEHYkAMDhk+OJBRJvp424g==} + engines: {node: '>=14.0.0'} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.24': - resolution: {integrity: sha512-S5WKIabtRBJyzu31KnJRlbZRR6FMrTMzYRrNTnIY2hWWXfpcB1PNuHqbo+98ODLpH8knul4Vyf5sCL61okLTjA==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.27': + resolution: {integrity: sha512-3bXSARqSf8jLHrQ1/tw9pX1GwIR9jA6OEsqTgdC0DdpoZ+34sbJXE9Nse3dQ0foGLKBkh4PqDv/rm2Thu9oVBw==} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.24': - resolution: {integrity: sha512-5EW8mzHoukz3zBn/VAaTapK+i+/ZFbSSP9meDmLSuGnk6La8uLAPc7E+6S3gbJnQ6k8lSC6ipIIeXC4SPdttKQ==} + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.27': + resolution: {integrity: sha512-xPGcKb+W8NIWAf5KApsUIrhiKH5NImTarICge5jQ2m0BBxD31crio4OXy/eYVq5CZkqkqszLQz2fWZcWNmbzlQ==} cpu: [ia32] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.24': - resolution: {integrity: sha512-KpurHt8+B0yTg9gHroC3H/Tf2c9VfjIBsC/wVHTf7GGAe+xkw1+5iYB3Y5iSy3OaMTGq1U3/YEvTqqBdSbDMUg==} + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.27': + resolution: {integrity: sha512-3y1G8ARpXBAcz4RJM5nzMU6isS/gXZl8SuX8lS2piFOnQMiOp6ajeelnciD+EgG4ej793zvNvr+WZtdnao2yrw==} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-beta.24': - resolution: {integrity: sha512-NMiim/enJlffMP16IanVj1ajFNEg8SaMEYyxyYfJoEyt5EiFT3HUH/T2GRdeStNWp+/kg5U8DiJqnQBgLQ8uCw==} + '@rolldown/pluginutils@1.0.0-beta.27': + resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} '@rollup/plugin-alias@5.1.1': resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} @@ -2569,6 +2591,13 @@ packages: resolution: {integrity: sha512-6rsHTjodIn/t90lv5snQjRPVtOosM7Vp0AKdrObymq45ojlgVwnpAqdc+0OBBrpEiy31zZ6/TKeIVqV1HwvnuQ==} engines: {node: '>=18'} + '@sindresorhus/is@7.0.2': + resolution: {integrity: sha512-d9xRovfKNz1SKieM0qJdO+PQonjnnIfSNWfHYnBSJ9hkjm0ZPw6HlxscDXYstp3z+7V2GOFHc+J0CYrYTjqCJw==} + engines: {node: '>=18'} + + '@speed-highlight/core@1.2.7': + resolution: {integrity: sha512-0dxmVj4gxg3Jg879kvFS/msl4s9F3T9UXC1InxgOf7t5NvcPD97u/WTA5vL/IxWHMn7qSxBozqrnnE2wvl1m8g==} + '@swc/core-darwin-arm64@1.12.11': resolution: {integrity: sha512-J19Jj9Y5x/N0loExH7W0OI9OwwoVyxutDdkyq1o/kgXyBqmmzV7Y/Q9QekI2Fm/qc5mNeAdP7aj4boY4AY/JPw==} engines: {node: '>=10'} @@ -2752,6 +2781,9 @@ packages: '@tsconfig/strictest@2.0.5': resolution: {integrity: sha512-ec4tjL2Rr0pkZ5hww65c+EEPYwxOi4Ryv+0MtjeaSQRJyq322Q27eOQiFbuNgw2hpL4hB1/W/HBGk3VKS43osg==} + '@tybys/wasm-util@0.10.0': + resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==} + '@tybys/wasm-util@0.9.0': resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} @@ -2809,8 +2841,8 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node@22.16.0': - resolution: {integrity: sha512-B2egV9wALML1JCpv3VQoQ+yesQKAmNMBIAY7OteVrikcOcAkWm+dGL6qpeCktPjAv6N1JLnhbNiqS35UpFyBsQ==} + '@types/node@22.16.3': + resolution: {integrity: sha512-sr4Xz74KOUeYadexo1r8imhRtlVXcs+j3XK3TcoiYk7B1t3YRVJgtaD3cwX73NYb71pmVuMLNRhJ9XKdoDB74g==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -2852,39 +2884,39 @@ packages: '@types/unist@3.0.2': resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} - '@typescript-eslint/eslint-plugin@8.35.1': - resolution: {integrity: sha512-9XNTlo7P7RJxbVeICaIIIEipqxLKguyh+3UbXuT2XQuFp6d8VOeDEGuz5IiX0dgZo8CiI6aOFLg4e8cF71SFVg==} + '@typescript-eslint/eslint-plugin@8.37.0': + resolution: {integrity: sha512-jsuVWeIkb6ggzB+wPCsR4e6loj+rM72ohW6IBn2C+5NCvfUVY8s33iFPySSVXqtm5Hu29Ne/9bnA0JmyLmgenA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.35.1 + '@typescript-eslint/parser': ^8.37.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/parser@8.35.1': - resolution: {integrity: sha512-3MyiDfrfLeK06bi/g9DqJxP5pV74LNv4rFTyvGDmT3x2p1yp1lOd+qYZfiRPIOf/oON+WRZR5wxxuF85qOar+w==} + '@typescript-eslint/parser@8.37.0': + resolution: {integrity: sha512-kVIaQE9vrN9RLCQMQ3iyRlVJpTiDUY6woHGb30JDkfJErqrQEmtdWH3gV0PBAfGZgQXoqzXOO0T3K6ioApbbAA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/project-service@8.35.1': - resolution: {integrity: sha512-VYxn/5LOpVxADAuP3NrnxxHYfzVtQzLKeldIhDhzC8UHaiQvYlXvKuVho1qLduFbJjjy5U5bkGwa3rUGUb1Q6Q==} + '@typescript-eslint/project-service@8.37.0': + resolution: {integrity: sha512-BIUXYsbkl5A1aJDdYJCBAo8rCEbAvdquQ8AnLb6z5Lp1u3x5PNgSSx9A/zqYc++Xnr/0DVpls8iQ2cJs/izTXA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/scope-manager@8.35.1': - resolution: {integrity: sha512-s/Bpd4i7ht2934nG+UoSPlYXd08KYz3bmjLEb7Ye1UVob0d1ENiT3lY8bsCmik4RqfSbPw9xJJHbugpPpP5JUg==} + '@typescript-eslint/scope-manager@8.37.0': + resolution: {integrity: sha512-0vGq0yiU1gbjKob2q691ybTg9JX6ShiVXAAfm2jGf3q0hdP6/BruaFjL/ManAR/lj05AvYCH+5bbVo0VtzmjOA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.35.1': - resolution: {integrity: sha512-K5/U9VmT9dTHoNowWZpz+/TObS3xqC5h0xAIjXPw+MNcKV9qg6eSatEnmeAwkjHijhACH0/N7bkhKvbt1+DXWQ==} + '@typescript-eslint/tsconfig-utils@8.37.0': + resolution: {integrity: sha512-1/YHvAVTimMM9mmlPvTec9NP4bobA1RkDbMydxG8omqwJJLEW/Iy2C4adsAESIXU3WGLXFHSZUU+C9EoFWl4Zg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/type-utils@8.35.1': - resolution: {integrity: sha512-HOrUBlfVRz5W2LIKpXzZoy6VTZzMu2n8q9C2V/cFngIC5U1nStJgv0tMV4sZPzdf4wQm9/ToWUFPMN9Vq9VJQQ==} + '@typescript-eslint/type-utils@8.37.0': + resolution: {integrity: sha512-SPkXWIkVZxhgwSwVq9rqj/4VFo7MnWwVaRNznfQDc/xPYHjXnPfLWn+4L6FF1cAz6e7dsqBeMawgl7QjUMj4Ow==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2894,21 +2926,25 @@ packages: resolution: {integrity: sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.35.1': - resolution: {integrity: sha512-Vvpuvj4tBxIka7cPs6Y1uvM7gJgdF5Uu9F+mBJBPY4MhvjrjWGK4H0lVgLJd/8PWZ23FTqsaJaLEkBCFUk8Y9g==} + '@typescript-eslint/types@8.37.0': + resolution: {integrity: sha512-ax0nv7PUF9NOVPs+lmQ7yIE7IQmAf8LGcXbMvHX5Gm+YJUYNAl340XkGnrimxZ0elXyoQJuN5sbg6C4evKA4SQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.37.0': + resolution: {integrity: sha512-zuWDMDuzMRbQOM+bHyU4/slw27bAUEcKSKKs3hcv2aNnc/tvE/h7w60dwVw8vnal2Pub6RT1T7BI8tFZ1fE+yg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.35.1': - resolution: {integrity: sha512-lhnwatFmOFcazAsUm3ZnZFpXSxiwoa1Lj50HphnDe1Et01NF4+hrdXONSUHIcbVu2eFb1bAf+5yjXkGVkXBKAQ==} + '@typescript-eslint/utils@8.37.0': + resolution: {integrity: sha512-TSFvkIW6gGjN2p6zbXo20FzCABbyUAuq6tBvNRGsKdsSQ6a7rnV6ADfZ7f4iI3lIiXc4F4WWvtUfDw9CJ9pO5A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/visitor-keys@8.35.1': - resolution: {integrity: sha512-VRwixir4zBWCSTP/ljEo091lbpypz57PoeAQ9imjG+vbeof9LplljsL1mos4ccG6H9IjfrVGM359RozUnuFhpw==} + '@typescript-eslint/visitor-keys@8.37.0': + resolution: {integrity: sha512-YzfhzcTnZVPiLfP/oeKtDp2evwvHLMe0LOy7oe+hb9KKIumLNohYS9Hgp1ifwpu42YWxhZE8yieggz6JpqO/1w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.2.0': @@ -3130,9 +3166,6 @@ packages: array-ify@1.0.0: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} - as-table@1.0.55: - resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==} - assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} @@ -3353,10 +3386,6 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} - cookie@1.0.2: resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} engines: {node: '>=18'} @@ -3427,9 +3456,6 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - data-uri-to-buffer@2.0.2: - resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==} - data-uri-to-buffer@4.0.1: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} @@ -3659,8 +3685,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.30.1: - resolution: {integrity: sha512-zmxXPNMOXmwm9E0yQLi5uqXHs7uq2UIiqEKo3Gq+3fwo1XrJ+hijAZImyF7hclW3E6oHz43Yk3RP8at6OTKflQ==} + eslint@9.31.0: + resolution: {integrity: sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -3827,9 +3853,6 @@ packages: resolution: {integrity: sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==} engines: {node: '>=16'} - get-source@2.0.12: - resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==} - get-stream@8.0.1: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} @@ -4088,6 +4111,10 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + knitwork@1.2.0: resolution: {integrity: sha512-xYSH7AvuQ6nXkq42x0v5S8/Iry+cfulBz/DJQzhIyESdLD7425jXsPy4vn5cCXU+HhRN2kVw51Vd1K6/By4BQg==} @@ -4376,8 +4403,8 @@ packages: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} - miniflare@4.20250617.5: - resolution: {integrity: sha512-Qqn30jR6dCjXaKVizT6vH4KOb+GyLccoxLNOJEfu63yBPn8eoXa7PrdiSGTmjs2RY8/tr7eTO8Wu/Yr14k0xVA==} + miniflare@4.20250709.0: + resolution: {integrity: sha512-dRGXi6Do9ArQZt7205QGWZ1tD6k6xQNY/mAZBAtiaQYvKxFuNyiHYlFnSN8Co4AFCVOozo/U52sVAaHvlcmnew==} engines: {node: '>=18.0.0'} hasBin: true @@ -4440,10 +4467,6 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - mustache@4.2.0: - resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} - hasBin: true - nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -4622,18 +4645,18 @@ packages: pkg-types@2.1.0: resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==} - playwright-chromium@1.53.2: - resolution: {integrity: sha512-srR0AVmLltaDH6bkEdPlHrqOwtqHI7XkQNm1m20RZNYBIo3L83uv2ENX2SZyYNKtTcT6R//F5moFS7D5UoMINw==} + playwright-chromium@1.54.1: + resolution: {integrity: sha512-1tOND4/hyQsYng5NLkLm+Ntew+CWBsvVZCcEZ0wafF5BAd9DBQHAT9SO95+QFk5iL5IBEdB6vFdsHf9Ma72vzQ==} engines: {node: '>=18'} hasBin: true - playwright-core@1.53.2: - resolution: {integrity: sha512-ox/OytMy+2w1jcYEYlOo1Hhp8hZkLCximMTUTMBXjGUA1KoFfiSZ+DU+3a739jsPY0yoKH2TFy9S2fsJas8yAw==} + playwright-core@1.54.1: + resolution: {integrity: sha512-Nbjs2zjj0htNhzgiy5wu+3w09YetDx5pkrpI/kZotDlDUaYk0HVA5xrBVPdow4SAUIlhgKcJeJg4GRKW6xHusA==} engines: {node: '>=18'} hasBin: true - playwright@1.53.2: - resolution: {integrity: sha512-6K/qQxVFuVQhRQhFsVZ9fGeatxirtrpPgxzBYWyZLEXJzqYwuL4fuNmfOfD5et1tJE4GScKyPNeLhZeRwuTU3A==} + playwright@1.54.1: + resolution: {integrity: sha512-peWpSwIBmSLi6aW2auvrUtf2DqY16YYcCMO8rTVx486jKmDTJg7UAhyrraP98GB8BoPURZP8+nxO7TSd4cPr5g==} engines: {node: '>=18'} hasBin: true @@ -4851,9 +4874,6 @@ packages: resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} engines: {node: ^14.13.1 || >=16.0.0} - printable-characters@1.0.42: - resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==} - proc-log@3.0.0: resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -5022,8 +5042,8 @@ packages: vue-tsc: optional: true - rolldown-vite@7.0.5: - resolution: {integrity: sha512-z239GrVtwr+DVgFw6s64Wa+OLjE4aG1Ux+MeVdQKXes0XaIDja5ouacPDLExgpSlplbe0zxSb1JbYtFvOr+pIw==} + rolldown-vite@7.0.9: + resolution: {integrity: sha512-RxVP6CY9CNCEM9UecdytqeADxOGSjgkfSE/eI986sM7I3/F09lQ9UfQo3y6W10ICBppKsEHe71NbCX/tirYDFg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -5062,8 +5082,8 @@ packages: yaml: optional: true - rolldown@1.0.0-beta.24: - resolution: {integrity: sha512-eDyipoOnoHQ5p6INkJ8g31eKGlqPSCAN9PapyOTw5HET4FYIWALZnSgpMZ67mdn+xT3jAsqGidNnBcIM6EAUhA==} + rolldown@1.0.0-beta.27: + resolution: {integrity: sha512-aYiJmzKoUHoaaEZLRegYVfZkXW7gzdgSbq+u5cXQ6iXc/y8tnQ3zGffQo44Pr1lTKeLluw3bDIDUCx/NAzqKeA==} hasBin: true rollup-plugin-dts@6.2.1: @@ -5207,9 +5227,6 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - stacktracey@2.1.8: - resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==} - std-env@3.9.0: resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} @@ -5280,6 +5297,10 @@ packages: stylis@4.3.2: resolution: {integrity: sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==} + supports-color@10.0.0: + resolution: {integrity: sha512-HRVVSbCCMbj7/kdWF9Q+bbckjBHLtHMEoJWlkmYzzdwhYMkjkOwubLM6t7NbWKjgKamGDrWL1++KrjUO1t9oAQ==} + engines: {node: '>=18'} + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -5398,8 +5419,8 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - typescript-eslint@8.35.1: - resolution: {integrity: sha512-xslJjFzhOmHYQzSB/QTeASAHbjmxOGEP6Coh93TXmUBFQoJ1VU35UHIDmG06Jd6taf3wqqC1ntBnCMeymy5Ovw==} + typescript-eslint@8.37.0: + resolution: {integrity: sha512-TnbEjzkE9EmcO0Q2zM+GE8NQLItNAJpMmED1BdgoBMYNdqMhzlbqfdSwiRlAzEK2pA9UzVW0gzaaIzXWg2BjfA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -5580,8 +5601,8 @@ packages: yaml: optional: true - vite@7.0.2: - resolution: {integrity: sha512-hxdyZDY1CM6SNpKI4w4lcUc3Mtkd9ej4ECWVHSMrOdSinVc2zYOAppHeGc/hzmRo3pxM5blMzkuWHOJA/3NiFw==} + vite@7.0.4: + resolution: {integrity: sha512-SkaSguuS7nnmV7mfJ8l81JGBFV7Gvzp8IzgE8A8t23+AxuNX61Q5H1Tpz5efduSN7NHC8nQXD3sKQKZAu5mNEA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -5685,17 +5706,17 @@ packages: wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - workerd@1.20250617.0: - resolution: {integrity: sha512-Uv6p0PYUHp/W/aWfUPLkZVAoAjapisM27JJlwcX9wCPTfCfnuegGOxFMvvlYpmNaX4YCwEdLCwuNn3xkpSkuZw==} + workerd@1.20250709.0: + resolution: {integrity: sha512-BqLPpmvRN+TYUSG61OkWamsGdEuMwgvabP8m0QOHIfofnrD2YVyWqE1kXJ0GH5EsVEuWamE5sR8XpTfsGBmIpg==} engines: {node: '>=16'} hasBin: true - wrangler@4.23.0: - resolution: {integrity: sha512-JSeDt3IwA4TEmg/V3tRblImPjdxynBt9PUVO/acQJ83XGlMMSwswDKL1FuwvbFzgX6+JXc3GMHeu7r8AQIxw9w==} + wrangler@4.24.3: + resolution: {integrity: sha512-stB1Wfs5NKlspsAzz8SBujBKsDqT5lpCyrL+vSUMy3uueEtI1A5qyORbKoJhIguEbwHfWS39mBsxzm6Vm1J2cg==} engines: {node: '>=18.0.0'} hasBin: true peerDependencies: - '@cloudflare/workers-types': ^4.20250617.0 + '@cloudflare/workers-types': ^4.20250709.0 peerDependenciesMeta: '@cloudflare/workers-types': optional: true @@ -5744,8 +5765,11 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - youch@3.3.4: - resolution: {integrity: sha512-UeVBXie8cA35DS6+nBkls68xaBBXCye0CNznrhszZjTbRVnJKQuNsyLKBTTL4ln1o1rh2PKtv35twV7irj5SEg==} + youch-core@0.3.3: + resolution: {integrity: sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==} + + youch@4.1.0-beta.10: + resolution: {integrity: sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==} zimmerframe@1.1.2: resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==} @@ -6061,24 +6085,24 @@ snapshots: dependencies: mime: 3.0.0 - '@cloudflare/unenv-preset@2.3.3(unenv@2.0.0-rc.17)(workerd@1.20250617.0)': + '@cloudflare/unenv-preset@2.3.3(unenv@2.0.0-rc.17)(workerd@1.20250709.0)': dependencies: unenv: 2.0.0-rc.17 optionalDependencies: - workerd: 1.20250617.0 + workerd: 1.20250709.0 - '@cloudflare/vite-plugin@1.9.0(rollup@4.44.1)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250617.0)(wrangler@4.23.0)': + '@cloudflare/vite-plugin@1.9.4(rollup@4.44.1)(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250709.0)(wrangler@4.24.3)': dependencies: - '@cloudflare/unenv-preset': 2.3.3(unenv@2.0.0-rc.17)(workerd@1.20250617.0) + '@cloudflare/unenv-preset': 2.3.3(unenv@2.0.0-rc.17)(workerd@1.20250709.0) '@mjackson/node-fetch-server': 0.6.1 '@rollup/plugin-replace': 6.0.2(rollup@4.44.1) get-port: 7.1.0 - miniflare: 4.20250617.5 + miniflare: 4.20250709.0 picocolors: 1.1.1 tinyglobby: 0.2.14 unenv: 2.0.0-rc.17 - vite: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - wrangler: 4.23.0 + vite: 7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + wrangler: 4.24.3 ws: 8.18.0 transitivePeerDependencies: - bufferutil @@ -6086,19 +6110,19 @@ snapshots: - utf-8-validate - workerd - '@cloudflare/workerd-darwin-64@1.20250617.0': + '@cloudflare/workerd-darwin-64@1.20250709.0': optional: true - '@cloudflare/workerd-darwin-arm64@1.20250617.0': + '@cloudflare/workerd-darwin-arm64@1.20250709.0': optional: true - '@cloudflare/workerd-linux-64@1.20250617.0': + '@cloudflare/workerd-linux-64@1.20250709.0': optional: true - '@cloudflare/workerd-linux-arm64@1.20250617.0': + '@cloudflare/workerd-linux-arm64@1.20250709.0': optional: true - '@cloudflare/workerd-windows-64@1.20250617.0': + '@cloudflare/workerd-windows-64@1.20250709.0': optional: true '@conventional-changelog/git-client@2.5.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.0)': @@ -6521,9 +6545,9 @@ snapshots: '@esbuild/win32-x64@0.25.5': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@9.30.1(jiti@2.4.2))': + '@eslint-community/eslint-utils@4.7.0(eslint@9.31.0(jiti@2.4.2))': dependencies: - eslint: 9.30.1(jiti@2.4.2) + eslint: 9.31.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -6542,6 +6566,10 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 + '@eslint/core@0.15.1': + dependencies: + '@types/json-schema': 7.0.15 + '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 @@ -6556,7 +6584,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.30.1': {} + '@eslint/js@9.31.0': {} '@eslint/object-schema@2.1.6': {} @@ -6753,6 +6781,13 @@ snapshots: '@tybys/wasm-util': 0.9.0 optional: true + '@napi-rs/wasm-runtime@0.2.12': + dependencies: + '@emnapi/core': 1.4.3 + '@emnapi/runtime': 1.4.3 + '@tybys/wasm-util': 0.10.0 + optional: true + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -6794,28 +6829,38 @@ snapshots: dependencies: which: 3.0.1 - '@oxc-project/runtime@0.75.0': {} - - '@oxc-project/runtime@0.75.1': {} + '@oxc-project/runtime@0.77.0': {} - '@oxc-project/types@0.75.1': {} + '@oxc-project/types@0.77.0': {} '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.53.2': + '@playwright/test@1.54.1': dependencies: - playwright: 1.53.2 + playwright: 1.54.1 '@polka/url@1.0.0-next.29': {} + '@poppinss/colors@4.1.5': + dependencies: + kleur: 4.1.5 + + '@poppinss/dumper@0.6.4': + dependencies: + '@poppinss/colors': 4.1.5 + '@sindresorhus/is': 7.0.2 + supports-color: 10.0.0 + + '@poppinss/exception@1.2.2': {} + '@publint/pack@0.1.2': {} '@quansync/fs@0.1.3': dependencies: quansync: 0.2.10 - '@react-router/dev@0.0.0-experimental-23decd7bc(@types/node@22.16.0)(babel-plugin-macros@3.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(react-router@0.0.0-experimental-23decd7bc(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tsx@4.20.3)(typescript@5.8.3)(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(wrangler@4.23.0)(yaml@2.7.1)': + '@react-router/dev@0.0.0-experimental-23decd7bc(@types/node@22.16.3)(babel-plugin-macros@3.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(react-router@0.0.0-experimental-23decd7bc(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tsx@4.20.3)(typescript@5.8.3)(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(wrangler@4.24.3)(yaml@2.7.1)': dependencies: '@babel/core': 7.28.0 '@babel/generator': 7.27.5 @@ -6844,11 +6889,11 @@ snapshots: set-cookie-parser: 2.7.1 tinyglobby: 0.2.14 valibot: 0.41.0(typescript@5.8.3) - vite: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vite-node: 3.2.4(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite-node: 3.2.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) optionalDependencies: typescript: 5.8.3 - wrangler: 4.23.0 + wrangler: 4.24.3 transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -6872,45 +6917,51 @@ snapshots: optionalDependencies: typescript: 5.8.3 - '@rolldown/binding-darwin-arm64@1.0.0-beta.24': + '@rolldown/binding-android-arm64@1.0.0-beta.27': optional: true - '@rolldown/binding-darwin-x64@1.0.0-beta.24': + '@rolldown/binding-darwin-arm64@1.0.0-beta.27': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-beta.24': + '@rolldown/binding-darwin-x64@1.0.0-beta.27': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.24': + '@rolldown/binding-freebsd-x64@1.0.0-beta.27': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.24': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.27': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.24': + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.27': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.24': + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.27': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-beta.24': + '@rolldown/binding-linux-arm64-ohos@1.0.0-beta.27': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-beta.24': + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.27': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.0-beta.27': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.0-beta.27': dependencies: - '@napi-rs/wasm-runtime': 0.2.11 + '@napi-rs/wasm-runtime': 0.2.12 optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.24': + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.27': optional: true - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.24': + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.27': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.24': + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.27': optional: true - '@rolldown/pluginutils@1.0.0-beta.24': {} + '@rolldown/pluginutils@1.0.0-beta.27': {} '@rollup/plugin-alias@5.1.1(rollup@4.37.0)': optionalDependencies: @@ -7105,11 +7156,15 @@ snapshots: '@simple-libs/child-process-utils@1.0.1': dependencies: '@simple-libs/stream-utils': 1.1.0 - '@types/node': 22.16.0 + '@types/node': 22.16.3 '@simple-libs/stream-utils@1.1.0': dependencies: - '@types/node': 22.16.0 + '@types/node': 22.16.3 + + '@sindresorhus/is@7.0.2': {} + + '@speed-highlight/core@1.2.7': {} '@swc/core-darwin-arm64@1.12.11': optional: true @@ -7243,17 +7298,22 @@ snapshots: postcss-selector-parser: 6.0.10 tailwindcss: 4.1.11 - '@tailwindcss/vite@4.1.11(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': + '@tailwindcss/vite@4.1.11(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': dependencies: '@tailwindcss/node': 4.1.11 '@tailwindcss/oxide': 4.1.11 tailwindcss: 4.1.11 - vite: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) '@trysound/sax@0.2.0': {} '@tsconfig/strictest@2.0.5': {} + '@tybys/wasm-util@0.10.0': + dependencies: + tslib: 2.8.1 + optional: true + '@tybys/wasm-util@0.9.0': dependencies: tslib: 2.8.1 @@ -7303,7 +7363,7 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 22.16.0 + '@types/node': 22.16.3 '@types/hast@3.0.3': dependencies: @@ -7318,7 +7378,7 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 22.16.0 + '@types/node': 22.16.3 '@types/mdast@4.0.3': dependencies: @@ -7328,7 +7388,7 @@ snapshots: '@types/ms@0.7.34': {} - '@types/node@22.16.0': + '@types/node@22.16.3': dependencies: undici-types: 6.21.0 @@ -7369,15 +7429,15 @@ snapshots: '@types/unist@3.0.2': {} - '@typescript-eslint/eslint-plugin@8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.35.1 - '@typescript-eslint/type-utils': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.35.1 - eslint: 9.30.1(jiti@2.4.2) + '@typescript-eslint/parser': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.37.0 + '@typescript-eslint/type-utils': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.37.0 + eslint: 9.31.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -7386,42 +7446,43 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/scope-manager': 8.35.1 - '@typescript-eslint/types': 8.35.1 - '@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.35.1 + '@typescript-eslint/scope-manager': 8.37.0 + '@typescript-eslint/types': 8.37.0 + '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.37.0 debug: 4.4.1 - eslint: 9.30.1(jiti@2.4.2) + eslint: 9.31.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.35.1(typescript@5.8.3)': + '@typescript-eslint/project-service@8.37.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.35.1(typescript@5.8.3) - '@typescript-eslint/types': 8.35.1 + '@typescript-eslint/tsconfig-utils': 8.37.0(typescript@5.8.3) + '@typescript-eslint/types': 8.37.0 debug: 4.4.1 typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.35.1': + '@typescript-eslint/scope-manager@8.37.0': dependencies: - '@typescript-eslint/types': 8.35.1 - '@typescript-eslint/visitor-keys': 8.35.1 + '@typescript-eslint/types': 8.37.0 + '@typescript-eslint/visitor-keys': 8.37.0 - '@typescript-eslint/tsconfig-utils@8.35.1(typescript@5.8.3)': + '@typescript-eslint/tsconfig-utils@8.37.0(typescript@5.8.3)': dependencies: typescript: 5.8.3 - '@typescript-eslint/type-utils@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3) - '@typescript-eslint/utils': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/types': 8.37.0 + '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) debug: 4.4.1 - eslint: 9.30.1(jiti@2.4.2) + eslint: 9.31.0(jiti@2.4.2) ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: @@ -7429,12 +7490,14 @@ snapshots: '@typescript-eslint/types@8.35.1': {} - '@typescript-eslint/typescript-estree@8.35.1(typescript@5.8.3)': + '@typescript-eslint/types@8.37.0': {} + + '@typescript-eslint/typescript-estree@8.37.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/project-service': 8.35.1(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.35.1(typescript@5.8.3) - '@typescript-eslint/types': 8.35.1 - '@typescript-eslint/visitor-keys': 8.35.1 + '@typescript-eslint/project-service': 8.37.0(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.37.0(typescript@5.8.3) + '@typescript-eslint/types': 8.37.0 + '@typescript-eslint/visitor-keys': 8.37.0 debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 @@ -7445,20 +7508,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/utils@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.35.1 - '@typescript-eslint/types': 8.35.1 - '@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3) - eslint: 9.30.1(jiti@2.4.2) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.37.0 + '@typescript-eslint/types': 8.37.0 + '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.8.3) + eslint: 9.31.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.35.1': + '@typescript-eslint/visitor-keys@8.37.0': dependencies: - '@typescript-eslint/types': 8.35.1 + '@typescript-eslint/types': 8.37.0 eslint-visitor-keys: 4.2.1 '@ungap/structured-clone@1.2.0': {} @@ -7563,13 +7626,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@7.0.1(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': + '@vitest/mocker@3.2.4(vite@7.0.1(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 7.0.1(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.1(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) '@vitest/pretty-format@3.2.4': dependencies: @@ -7642,10 +7705,6 @@ snapshots: array-ify@1.0.0: {} - as-table@1.0.55: - dependencies: - printable-characters: 1.0.42 - assertion-error@2.0.1: {} ast-kit@2.1.1: @@ -7860,8 +7919,6 @@ snapshots: convert-source-map@2.0.0: {} - cookie@0.7.2: {} - cookie@1.0.2: {} cosmiconfig@7.1.0: @@ -7962,8 +8019,6 @@ snapshots: csstype@3.1.3: {} - data-uri-to-buffer@2.0.2: {} - data-uri-to-buffer@4.0.1: {} debug@4.4.0: @@ -8180,9 +8235,9 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-compat-utils@0.5.1(eslint@9.30.1(jiti@2.4.2)): + eslint-compat-utils@0.5.1(eslint@9.31.0(jiti@2.4.2)): dependencies: - eslint: 9.30.1(jiti@2.4.2) + eslint: 9.31.0(jiti@2.4.2) semver: 7.7.2 eslint-import-context@0.1.9(unrs-resolver@1.9.2): @@ -8192,19 +8247,19 @@ snapshots: optionalDependencies: unrs-resolver: 1.9.2 - eslint-plugin-es-x@7.8.0(eslint@9.30.1(jiti@2.4.2)): + eslint-plugin-es-x@7.8.0(eslint@9.31.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 - eslint: 9.30.1(jiti@2.4.2) - eslint-compat-utils: 0.5.1(eslint@9.30.1(jiti@2.4.2)) + eslint: 9.31.0(jiti@2.4.2) + eslint-compat-utils: 0.5.1(eslint@9.31.0(jiti@2.4.2)) - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2)): dependencies: '@typescript-eslint/types': 8.35.1 comment-parser: 1.4.1 debug: 4.4.1 - eslint: 9.30.1(jiti@2.4.2) + eslint: 9.31.0(jiti@2.4.2) eslint-import-context: 0.1.9(unrs-resolver@1.9.2) is-glob: 4.0.3 minimatch: 10.0.1 @@ -8212,16 +8267,16 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.9.2 optionalDependencies: - '@typescript-eslint/utils': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) transitivePeerDependencies: - supports-color - eslint-plugin-n@17.21.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3): + eslint-plugin-n@17.21.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2)) enhanced-resolve: 5.18.2 - eslint: 9.30.1(jiti@2.4.2) - eslint-plugin-es-x: 7.8.0(eslint@9.30.1(jiti@2.4.2)) + eslint: 9.31.0(jiti@2.4.2) + eslint-plugin-es-x: 7.8.0(eslint@9.31.0(jiti@2.4.2)) get-tsconfig: 4.10.1 globals: 15.12.0 ignore: 5.3.2 @@ -8231,12 +8286,12 @@ snapshots: transitivePeerDependencies: - typescript - eslint-plugin-regexp@2.9.0(eslint@9.30.1(jiti@2.4.2)): + eslint-plugin-regexp@2.9.0(eslint@9.31.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 comment-parser: 1.4.1 - eslint: 9.30.1(jiti@2.4.2) + eslint: 9.31.0(jiti@2.4.2) jsdoc-type-pratt-parser: 4.0.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 @@ -8251,15 +8306,15 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.30.1(jiti@2.4.2): + eslint@9.31.0(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.0 '@eslint/config-helpers': 0.3.0 - '@eslint/core': 0.14.0 + '@eslint/core': 0.15.1 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.30.1 + '@eslint/js': 9.31.0 '@eslint/plugin-kit': 0.3.1 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 @@ -8453,11 +8508,6 @@ snapshots: get-port@7.1.0: {} - get-source@2.0.12: - dependencies: - data-uri-to-buffer: 2.0.2 - source-map: 0.6.1 - get-stream@8.0.1: {} get-them-args@1.3.2: {} @@ -8702,6 +8752,8 @@ snapshots: kleur@3.0.3: {} + kleur@4.1.5: {} + knitwork@1.2.0: {} levn@0.4.1: @@ -9155,7 +9207,7 @@ snapshots: mimic-function@5.0.1: {} - miniflare@4.20250617.5: + miniflare@4.20250709.0: dependencies: '@cspotcode/source-map-support': 0.8.1 acorn: 8.14.0 @@ -9165,9 +9217,9 @@ snapshots: sharp: 0.33.5 stoppable: 1.1.0 undici: 5.29.0 - workerd: 1.20250617.0 + workerd: 1.20250709.0 ws: 8.18.0 - youch: 3.3.4 + youch: 4.1.0-beta.10 zod: 3.22.3 transitivePeerDependencies: - bufferutil @@ -9226,8 +9278,6 @@ snapshots: ms@2.1.3: {} - mustache@4.2.0: {} - nanoid@3.3.11: {} napi-postinstall@0.2.4: {} @@ -9408,15 +9458,15 @@ snapshots: exsolve: 1.0.4 pathe: 2.0.3 - playwright-chromium@1.53.2: + playwright-chromium@1.54.1: dependencies: - playwright-core: 1.53.2 + playwright-core: 1.54.1 - playwright-core@1.53.2: {} + playwright-core@1.54.1: {} - playwright@1.53.2: + playwright@1.54.1: dependencies: - playwright-core: 1.53.2 + playwright-core: 1.54.1 optionalDependencies: fsevents: 2.3.2 @@ -9613,8 +9663,6 @@ snapshots: pretty-bytes@6.1.1: {} - printable-characters@1.0.42: {} - proc-log@3.0.0: {} promise-inflight@1.0.1: {} @@ -9759,7 +9807,7 @@ snapshots: rfdc@1.4.1: {} - rolldown-plugin-dts@0.13.13(rolldown@1.0.0-beta.24)(typescript@5.8.3): + rolldown-plugin-dts@0.13.13(rolldown@1.0.0-beta.27)(typescript@5.8.3): dependencies: '@babel/generator': 7.28.0 '@babel/parser': 7.28.0 @@ -9769,49 +9817,50 @@ snapshots: debug: 4.4.1 dts-resolver: 2.1.1 get-tsconfig: 4.10.1 - rolldown: 1.0.0-beta.24 + rolldown: 1.0.0-beta.27 optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - oxc-resolver - supports-color - rolldown-vite@7.0.5(@types/node@22.16.0)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1): + rolldown-vite@7.0.9(@types/node@22.16.3)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1): dependencies: - '@oxc-project/runtime': 0.75.0 fdir: 6.4.6(picomatch@4.0.2) lightningcss: 1.30.1 picomatch: 4.0.2 postcss: 8.5.6 - rolldown: 1.0.0-beta.24 + rolldown: 1.0.0-beta.27 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 22.16.0 + '@types/node': 22.16.3 esbuild: 0.25.5 fsevents: 2.3.3 jiti: 2.4.2 tsx: 4.20.3 yaml: 2.7.1 - rolldown@1.0.0-beta.24: + rolldown@1.0.0-beta.27: dependencies: - '@oxc-project/runtime': 0.75.1 - '@oxc-project/types': 0.75.1 - '@rolldown/pluginutils': 1.0.0-beta.24 + '@oxc-project/runtime': 0.77.0 + '@oxc-project/types': 0.77.0 + '@rolldown/pluginutils': 1.0.0-beta.27 ansis: 4.1.0 optionalDependencies: - '@rolldown/binding-darwin-arm64': 1.0.0-beta.24 - '@rolldown/binding-darwin-x64': 1.0.0-beta.24 - '@rolldown/binding-freebsd-x64': 1.0.0-beta.24 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.24 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.24 - '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.24 - '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.24 - '@rolldown/binding-linux-x64-musl': 1.0.0-beta.24 - '@rolldown/binding-wasm32-wasi': 1.0.0-beta.24 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.24 - '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.24 - '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.24 + '@rolldown/binding-android-arm64': 1.0.0-beta.27 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.27 + '@rolldown/binding-darwin-x64': 1.0.0-beta.27 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.27 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.27 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.27 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.27 + '@rolldown/binding-linux-arm64-ohos': 1.0.0-beta.27 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.27 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.27 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.27 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.27 + '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.27 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.27 rollup-plugin-dts@6.2.1(rollup@4.37.0)(typescript@5.8.3): dependencies: @@ -9997,11 +10046,6 @@ snapshots: stackback@0.0.2: {} - stacktracey@2.1.8: - dependencies: - as-table: 1.0.55 - get-source: 2.0.12 - std-env@3.9.0: {} stoppable@1.1.0: {} @@ -10079,6 +10123,8 @@ snapshots: stylis@4.3.2: {} + supports-color@10.0.0: {} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -10158,8 +10204,8 @@ snapshots: diff: 8.0.2 empathic: 2.0.0 hookable: 5.5.3 - rolldown: 1.0.0-beta.24 - rolldown-plugin-dts: 0.13.13(rolldown@1.0.0-beta.24)(typescript@5.8.3) + rolldown: 1.0.0-beta.27 + rolldown-plugin-dts: 0.13.13(rolldown@1.0.0-beta.27)(typescript@5.8.3) semver: 7.7.2 tinyexec: 1.0.1 tinyglobby: 0.2.14 @@ -10191,12 +10237,13 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3): + typescript-eslint@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.30.1(jiti@2.4.2) + '@typescript-eslint/eslint-plugin': 8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.31.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -10379,23 +10426,23 @@ snapshots: unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 - vite-dev-rpc@1.1.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + vite-dev-rpc@1.1.0(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): dependencies: birpc: 2.4.0 - vite: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vite-hot-client: 2.1.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + vite: 7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite-hot-client: 2.1.0(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) - vite-hot-client@2.1.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + vite-hot-client@2.1.0(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): dependencies: - vite: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vite-node@3.2.4(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): + vite-node@3.2.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: cac: 6.7.14 debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) transitivePeerDependencies: - '@types/node' - jiti @@ -10410,7 +10457,7 @@ snapshots: - tsx - yaml - vite-plugin-inspect@11.3.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + vite-plugin-inspect@11.3.0(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): dependencies: ansis: 4.1.0 debug: 4.4.1 @@ -10420,12 +10467,12 @@ snapshots: perfect-debounce: 1.0.0 sirv: 3.0.1 unplugin-utils: 0.2.4 - vite: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vite-dev-rpc: 1.1.0(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + vite: 7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite-dev-rpc: 1.1.0(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) transitivePeerDependencies: - supports-color - vite@7.0.1(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): + vite@7.0.1(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: esbuild: 0.25.5 fdir: 6.4.6(picomatch@4.0.2) @@ -10434,14 +10481,14 @@ snapshots: rollup: 4.44.1 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 22.16.0 + '@types/node': 22.16.3 fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.30.1 tsx: 4.20.3 yaml: 2.7.1 - vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): + vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: esbuild: 0.25.5 fdir: 6.4.6(picomatch@4.0.2) @@ -10450,22 +10497,22 @@ snapshots: rollup: 4.44.1 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 22.16.0 + '@types/node': 22.16.3 fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.30.1 tsx: 4.20.3 yaml: 2.7.1 - vitefu@1.1.1(vite@7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + vitefu@1.1.1(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): optionalDependencies: - vite: 7.0.2(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.0.1(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + '@vitest/mocker': 3.2.4(vite@7.0.1(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -10483,12 +10530,12 @@ snapshots: tinyglobby: 0.2.14 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.0.1(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vite-node: 3.2.4(@types/node@22.16.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.1(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite-node: 3.2.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.16.0 + '@types/node': 22.16.3 transitivePeerDependencies: - jiti - less @@ -10524,24 +10571,24 @@ snapshots: wordwrap@1.0.0: {} - workerd@1.20250617.0: + workerd@1.20250709.0: optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20250617.0 - '@cloudflare/workerd-darwin-arm64': 1.20250617.0 - '@cloudflare/workerd-linux-64': 1.20250617.0 - '@cloudflare/workerd-linux-arm64': 1.20250617.0 - '@cloudflare/workerd-windows-64': 1.20250617.0 + '@cloudflare/workerd-darwin-64': 1.20250709.0 + '@cloudflare/workerd-darwin-arm64': 1.20250709.0 + '@cloudflare/workerd-linux-64': 1.20250709.0 + '@cloudflare/workerd-linux-arm64': 1.20250709.0 + '@cloudflare/workerd-windows-64': 1.20250709.0 - wrangler@4.23.0: + wrangler@4.24.3: dependencies: '@cloudflare/kv-asset-handler': 0.4.0 - '@cloudflare/unenv-preset': 2.3.3(unenv@2.0.0-rc.17)(workerd@1.20250617.0) + '@cloudflare/unenv-preset': 2.3.3(unenv@2.0.0-rc.17)(workerd@1.20250709.0) blake3-wasm: 2.1.5 esbuild: 0.25.4 - miniflare: 4.20250617.5 + miniflare: 4.20250709.0 path-to-regexp: 6.3.0 unenv: 2.0.0-rc.17 - workerd: 1.20250617.0 + workerd: 1.20250709.0 optionalDependencies: fsevents: 2.3.3 transitivePeerDependencies: @@ -10578,11 +10625,18 @@ snapshots: yocto-queue@0.1.0: {} - youch@3.3.4: + youch-core@0.3.3: dependencies: - cookie: 0.7.2 - mustache: 4.2.0 - stacktracey: 2.1.8 + '@poppinss/exception': 1.2.2 + error-stack-parser-es: 1.0.5 + + youch@4.1.0-beta.10: + dependencies: + '@poppinss/colors': 4.1.5 + '@poppinss/dumper': 0.6.4 + '@speed-highlight/core': 1.2.7 + cookie: 1.0.2 + youch-core: 0.3.3 zimmerframe@1.1.2: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 3a829e192..ee699e693 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -6,7 +6,7 @@ packages: catalogs: rolldown-vite: - vite: npm:rolldown-vite@^7.0.5 + vite: npm:rolldown-vite@^7.0.9 overrides: '@types/estree': ^1.0.8 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 096/313] 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 df6a38e42339cf5deecd3f1b6c0aa4dd838833c5 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Tue, 15 Jul 2025 13:48:40 +0900 Subject: [PATCH 097/313] fix(rsc): update rsc-html-stream v0.0.7 (#578) --- packages/plugin-rsc/package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/plugin-rsc/package.json b/packages/plugin-rsc/package.json index 8fae1aca7..038571dd6 100644 --- a/packages/plugin-rsc/package.json +++ b/packages/plugin-rsc/package.json @@ -58,7 +58,7 @@ "react": "^19.1.0", "react-dom": "^19.1.0", "react-server-dom-webpack": "^19.1.0", - "rsc-html-stream": "^0.0.6", + "rsc-html-stream": "^0.0.7", "tinyexec": "^1.0.1", "tsdown": "^0.12.9" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5e02064aa..42641f74b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -497,8 +497,8 @@ importers: specifier: ^19.1.0 version: 19.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) rsc-html-stream: - specifier: ^0.0.6 - version: 0.0.6 + specifier: ^0.0.7 + version: 0.0.7 tinyexec: specifier: ^1.0.1 version: 1.0.1 @@ -5103,8 +5103,8 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - rsc-html-stream@0.0.6: - resolution: {integrity: sha512-oZUJ5AH0oDo9QywxD9yMY6N5Z3VwX2YfQg0FanNdCmvXmO0itTfv7BMkbMSwxg7JmBjYmefU8DTW0EcLsePPgQ==} + rsc-html-stream@0.0.7: + resolution: {integrity: sha512-v9+fuY7usTgvXdNl8JmfXCvSsQbq2YMd60kOeeMIqCJFZ69fViuIxztHei7v5mlMMa2h3SqS+v44Gu9i9xANZA==} run-applescript@7.0.0: resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} @@ -9922,7 +9922,7 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.44.1 fsevents: 2.3.3 - rsc-html-stream@0.0.6: {} + rsc-html-stream@0.0.7: {} run-applescript@7.0.0: {} From fdc9d9a18a909398b8e217438631f49035e0797b Mon Sep 17 00:00:00 2001 From: Eliya Cohen Date: Fri, 18 Jul 2025 05:23:08 +0300 Subject: [PATCH 098/313] feat: add hmr support for compound components (#518) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Arnaud Barré --- packages/common/refresh-runtime.js | 23 ++++++++++++++ packages/plugin-react-oxc/CHANGELOG.md | 11 +++++++ packages/plugin-react-swc/CHANGELOG.md | 11 +++++++ packages/plugin-react/CHANGELOG.md | 11 +++++++ playground/react/App.jsx | 5 +++ playground/react/__tests__/react.spec.ts | 15 +++++++++ playground/react/components/Accordion.jsx | 37 +++++++++++++++++++++++ 7 files changed, 113 insertions(+) create mode 100644 playground/react/components/Accordion.jsx diff --git a/packages/common/refresh-runtime.js b/packages/common/refresh-runtime.js index 08d1df630..0029017fe 100644 --- a/packages/common/refresh-runtime.js +++ b/packages/common/refresh-runtime.js @@ -545,6 +545,21 @@ function isLikelyComponentType(type) { } } +function isCompoundComponent(type) { + if (!isPlainObject(type)) return false + for (const key in type) { + if (!isLikelyComponentType(type[key])) return false + } + return true +} + +function isPlainObject(obj) { + return ( + Object.prototype.toString.call(obj) === '[object Object]' && + (obj.constructor === Object || obj.constructor === undefined) + ) +} + /** * Plugin utils */ @@ -565,6 +580,13 @@ export function registerExportsForReactRefresh(filename, moduleExports) { // The register function has an identity check to not register twice the same component, // so this is safe to not used the same key here. register(exportValue, filename + ' export ' + key) + } else if (isCompoundComponent(exportValue)) { + for (const subKey in exportValue) { + register( + exportValue[subKey], + filename + ' export ' + key + '-' + subKey, + ) + } } } } @@ -618,6 +640,7 @@ export function validateRefreshBoundaryAndEnqueueUpdate( (key, value) => { hasExports = true if (isLikelyComponentType(value)) return true + if (isCompoundComponent(value)) return true return prevExports[key] === nextExports[key] }, ) diff --git a/packages/plugin-react-oxc/CHANGELOG.md b/packages/plugin-react-oxc/CHANGELOG.md index e82a2fa30..146a51778 100644 --- a/packages/plugin-react-oxc/CHANGELOG.md +++ b/packages/plugin-react-oxc/CHANGELOG.md @@ -2,6 +2,17 @@ ## Unreleased +### Add HMR support for compound components ([#518](https://github.com/vitejs/vite-plugin-react/pull/518)) + +HMR now works for compound components like this: + +```tsx +const Root = () =>
Accordion Root
+const Item = () =>
Accordion Item
+ +export const Accordion = { Root, Item } +``` + ### Return `Plugin[]` instead of `PluginOption[]` ## 0.2.3 (2025-06-16) diff --git a/packages/plugin-react-swc/CHANGELOG.md b/packages/plugin-react-swc/CHANGELOG.md index 5a2b0dd8e..a23f92d0a 100644 --- a/packages/plugin-react-swc/CHANGELOG.md +++ b/packages/plugin-react-swc/CHANGELOG.md @@ -2,6 +2,17 @@ ## Unreleased +### Add HMR support for compound components ([#518](https://github.com/vitejs/vite-plugin-react/pull/518)) + +HMR now works for compound components like this: + +```tsx +const Root = () =>
Accordion Root
+const Item = () =>
Accordion Item
+ +export const Accordion = { Root, Item } +``` + ### Return `Plugin[]` instead of `PluginOption[]` ## 3.10.2 (2025-06-10) diff --git a/packages/plugin-react/CHANGELOG.md b/packages/plugin-react/CHANGELOG.md index 960c754ed..22373b8df 100644 --- a/packages/plugin-react/CHANGELOG.md +++ b/packages/plugin-react/CHANGELOG.md @@ -2,6 +2,17 @@ ## Unreleased +### Add HMR support for compound components ([#518](https://github.com/vitejs/vite-plugin-react/pull/518)) + +HMR now works for compound components like this: + +```tsx +const Root = () =>
Accordion Root
+const Item = () =>
Accordion Item
+ +export const Accordion = { Root, Item } +``` + ### Return `Plugin[]` instead of `PluginOption[]` The return type has changed from `react(): PluginOption[]` to more specialized type `react(): Plugin[]`. This allows for type-safe manipulation of plugins, for example: diff --git a/playground/react/App.jsx b/playground/react/App.jsx index c7ffb805a..3d1b29988 100644 --- a/playground/react/App.jsx +++ b/playground/react/App.jsx @@ -1,6 +1,7 @@ import { useState } from 'react' import Button from 'jsx-entry' import Dummy from './components/Dummy?qs-should-not-break-plugin-react' +import { Accordion } from './components/Accordion' import Parent from './hmr/parent' import { JsxImportRuntime } from './hmr/jsx-import-runtime' import { CountProvider } from './context/CountProvider' @@ -38,6 +39,10 @@ function App() { + + First Item + Second Item + diff --git a/playground/react/__tests__/react.spec.ts b/playground/react/__tests__/react.spec.ts index f9d4275af..ea78cabfe 100644 --- a/playground/react/__tests__/react.spec.ts +++ b/playground/react/__tests__/react.spec.ts @@ -148,4 +148,19 @@ if (!isBuild) { expect(await page.textContent('#state-button')).toMatch('count is: 1') }) + + // #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'], + ) + + await expect + .poll(() => page.textContent('#accordion-root')) + .toMatch('Accordion Root Updated') + }) } diff --git a/playground/react/components/Accordion.jsx b/playground/react/components/Accordion.jsx new file mode 100644 index 000000000..c690a48e0 --- /dev/null +++ b/playground/react/components/Accordion.jsx @@ -0,0 +1,37 @@ +function Root({ children }) { + return ( +
+

+ Accordion Root +

+
{children}
+
+ ) +} + +function Item({ children }) { + return ( +
+ {children} +
+ ) +} + +export const Accordion = { Root, Item } From bbfd1b797c510fbe54348469e952bb1f6ec287f6 Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Fri, 18 Jul 2025 12:26:51 +0900 Subject: [PATCH 099/313] chore: update changelog for #537 --- packages/plugin-react-oxc/CHANGELOG.md | 10 +++++++++- packages/plugin-react-swc/CHANGELOG.md | 10 +++++++++- packages/plugin-react/CHANGELOG.md | 2 +- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/packages/plugin-react-oxc/CHANGELOG.md b/packages/plugin-react-oxc/CHANGELOG.md index 146a51778..751c4288d 100644 --- a/packages/plugin-react-oxc/CHANGELOG.md +++ b/packages/plugin-react-oxc/CHANGELOG.md @@ -13,7 +13,15 @@ const Item = () =>
Accordion Item
export const Accordion = { Root, Item } ``` -### Return `Plugin[]` instead of `PluginOption[]` +### Return `Plugin[]` instead of `PluginOption[]` ([#537](https://github.com/vitejs/vite-plugin-react/pull/537)) + +The return type has changed from `react(): PluginOption[]` to more specialized type `react(): Plugin[]`. This allows for type-safe manipulation of plugins, for example: + +```tsx +// previously this causes type errors +react() + .map(p => ({ ...p, applyToEnvironment: e => e.name === 'client' })) +``` ## 0.2.3 (2025-06-16) diff --git a/packages/plugin-react-swc/CHANGELOG.md b/packages/plugin-react-swc/CHANGELOG.md index a23f92d0a..5c39b4ccc 100644 --- a/packages/plugin-react-swc/CHANGELOG.md +++ b/packages/plugin-react-swc/CHANGELOG.md @@ -13,7 +13,15 @@ const Item = () =>
Accordion Item
export const Accordion = { Root, Item } ``` -### Return `Plugin[]` instead of `PluginOption[]` +### Return `Plugin[]` instead of `PluginOption[]` ([#537](https://github.com/vitejs/vite-plugin-react/pull/537)) + +The return type has changed from `react(): PluginOption[]` to more specialized type `react(): Plugin[]`. This allows for type-safe manipulation of plugins, for example: + +```tsx +// previously this causes type errors +react() + .map(p => ({ ...p, applyToEnvironment: e => e.name === 'client' })) +``` ## 3.10.2 (2025-06-10) diff --git a/packages/plugin-react/CHANGELOG.md b/packages/plugin-react/CHANGELOG.md index 22373b8df..57e6763e9 100644 --- a/packages/plugin-react/CHANGELOG.md +++ b/packages/plugin-react/CHANGELOG.md @@ -13,7 +13,7 @@ const Item = () =>
Accordion Item
export const Accordion = { Root, Item } ``` -### Return `Plugin[]` instead of `PluginOption[]` +### Return `Plugin[]` instead of `PluginOption[]` ([#537](https://github.com/vitejs/vite-plugin-react/pull/537)) The return type has changed from `react(): PluginOption[]` to more specialized type `react(): Plugin[]`. This allows for type-safe manipulation of plugins, for example: From 80417060f7bc239d5100e1b47c819e8364c7d551 Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Fri, 18 Jul 2025 12:30:16 +0900 Subject: [PATCH 100/313] release: plugin-react@4.7.0 --- packages/plugin-react/CHANGELOG.md | 2 ++ packages/plugin-react/package.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/plugin-react/CHANGELOG.md b/packages/plugin-react/CHANGELOG.md index 57e6763e9..4c764e635 100644 --- a/packages/plugin-react/CHANGELOG.md +++ b/packages/plugin-react/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +## 4.7.0 (2025-07-18) + ### Add HMR support for compound components ([#518](https://github.com/vitejs/vite-plugin-react/pull/518)) HMR now works for compound components like this: diff --git a/packages/plugin-react/package.json b/packages/plugin-react/package.json index 082365a56..7ff59d14e 100644 --- a/packages/plugin-react/package.json +++ b/packages/plugin-react/package.json @@ -1,6 +1,6 @@ { "name": "@vitejs/plugin-react", - "version": "4.6.0", + "version": "4.7.0", "license": "MIT", "author": "Evan You", "description": "The default Vite plugin for React projects", From 9e0c1038959e828865be810a164a51c3db1ac375 Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Fri, 18 Jul 2025 12:30:28 +0900 Subject: [PATCH 101/313] release: plugin-react-swc@3.11.0 --- packages/plugin-react-swc/CHANGELOG.md | 2 ++ packages/plugin-react-swc/package.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/plugin-react-swc/CHANGELOG.md b/packages/plugin-react-swc/CHANGELOG.md index 5c39b4ccc..7898a2524 100644 --- a/packages/plugin-react-swc/CHANGELOG.md +++ b/packages/plugin-react-swc/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +## 3.11.0 (2025-07-18) + ### Add HMR support for compound components ([#518](https://github.com/vitejs/vite-plugin-react/pull/518)) HMR now works for compound components like this: diff --git a/packages/plugin-react-swc/package.json b/packages/plugin-react-swc/package.json index 6febd4c90..255673c77 100644 --- a/packages/plugin-react-swc/package.json +++ b/packages/plugin-react-swc/package.json @@ -1,6 +1,6 @@ { "name": "@vitejs/plugin-react-swc", - "version": "3.10.2", + "version": "3.11.0", "license": "MIT", "author": "Arnaud Barré (https://github.com/ArnaudBarre)", "description": "Speed up your Vite dev server with SWC", From 1b4e0f0e21060b5f6522215919c895074bbb36fb Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Fri, 18 Jul 2025 12:32:27 +0900 Subject: [PATCH 102/313] release: plugin-react-oxc@0.3.0 --- packages/plugin-react-oxc/CHANGELOG.md | 2 ++ packages/plugin-react-oxc/package.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/plugin-react-oxc/CHANGELOG.md b/packages/plugin-react-oxc/CHANGELOG.md index 751c4288d..48c74c811 100644 --- a/packages/plugin-react-oxc/CHANGELOG.md +++ b/packages/plugin-react-oxc/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +## 0.3.0 (2025-07-18) + ### Add HMR support for compound components ([#518](https://github.com/vitejs/vite-plugin-react/pull/518)) HMR now works for compound components like this: diff --git a/packages/plugin-react-oxc/package.json b/packages/plugin-react-oxc/package.json index cb918ad46..5b2f5b1af 100644 --- a/packages/plugin-react-oxc/package.json +++ b/packages/plugin-react-oxc/package.json @@ -1,6 +1,6 @@ { "name": "@vitejs/plugin-react-oxc", - "version": "0.2.3", + "version": "0.3.0", "license": "MIT", "author": "Evan You", "contributors": [ From fa1d260ef384d986284aaec6e0984967f3b436ad Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sat, 19 Jul 2025 11:39:36 +0900 Subject: [PATCH 103/313] fix(rsc): ensure trailing slash of `BASE_URL` (#589) --- packages/plugin-rsc/src/browser.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/plugin-rsc/src/browser.ts b/packages/plugin-rsc/src/browser.ts index e5a52f945..0892a8879 100644 --- a/packages/plugin-rsc/src/browser.ts +++ b/packages/plugin-rsc/src/browser.ts @@ -10,7 +10,9 @@ function initialize(): void { load: async (id) => { if (!import.meta.env.__vite_rsc_build__) { // @ts-ignore - return __vite_rsc_raw_import__(import.meta.env.BASE_URL + id.slice(1)) + return __vite_rsc_raw_import__( + withTrailingSlash(import.meta.env.BASE_URL) + id.slice(1), + ) } else { const import_ = clientReferences.default[id] if (!import_) { @@ -21,3 +23,12 @@ function initialize(): void { }, }) } + +// Vite normalizes `config.base` to have trailing slash, but not for `import.meta.env.BASE_URL`. +// https://github.com/vitejs/vite/blob/27a192fc95036dbdb6e615a4201b858eb64aa075/packages/vite/src/shared/utils.ts#L48-L53 +function withTrailingSlash(path: string): string { + if (path[path.length - 1] !== '/') { + return `${path}/` + } + return path +} From bd6a2a1ff272c8550f92bc1530c7b28fb81e1c60 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 21 Jul 2025 10:07:22 +0900 Subject: [PATCH 104/313] chore(rsc): deprecate `@vitejs/plugin-rsc/extra` API (#592) --- packages/plugin-rsc/README.md | 5 ++++- packages/plugin-rsc/src/extra/browser.tsx | 6 ++++++ packages/plugin-rsc/src/extra/rsc.tsx | 3 +++ packages/plugin-rsc/src/extra/ssr.tsx | 3 +++ 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/plugin-rsc/README.md b/packages/plugin-rsc/README.md index 63480b6a1..2d7593f07 100644 --- a/packages/plugin-rsc/README.md +++ b/packages/plugin-rsc/README.md @@ -419,7 +419,10 @@ export default defineConfig({ }) ``` -## Higher level API +## High level API + +> [!NOTE] +> High level API is deprecated. Please write on your own `@vitejs/plugin-rsc/{rsc,ssr,browser}` integration. This is a wrapper of `react-server-dom` API and helper API to setup a minimal RSC app without writing own framework code like [`./examples/starter/src/framework`](./examples/starter/src/framework/). See [`./examples/basic`](./examples/basic/) for how this API is used. diff --git a/packages/plugin-rsc/src/extra/browser.tsx b/packages/plugin-rsc/src/extra/browser.tsx index 509aa8706..4bf272e9a 100644 --- a/packages/plugin-rsc/src/extra/browser.tsx +++ b/packages/plugin-rsc/src/extra/browser.tsx @@ -11,6 +11,9 @@ import { } from '../browser' import type { RscPayload } from './rsc' +/** + * @deprecated Use `@vitejs/plugin-rsc/browser` API instead. + */ export async function hydrate(): Promise { const callServer: CallServerCallback = async (id, args) => { const url = new URL(window.location.href) @@ -71,6 +74,9 @@ export async function hydrate(): Promise { } } +/** + * @deprecated Use `@vitejs/plugin-rsc/browser` API instead. + */ export async function fetchRSC( request: string | URL | Request, ): Promise { diff --git a/packages/plugin-rsc/src/extra/rsc.tsx b/packages/plugin-rsc/src/extra/rsc.tsx index 3947ecc25..393dae1dd 100644 --- a/packages/plugin-rsc/src/extra/rsc.tsx +++ b/packages/plugin-rsc/src/extra/rsc.tsx @@ -14,6 +14,9 @@ export type RscPayload = { returnValue?: unknown } +/** + * @deprecated Use `@vitejs/plugin-rsc/rsc` API instead. + */ export async function renderRequest( request: Request, root: React.ReactNode, diff --git a/packages/plugin-rsc/src/extra/ssr.tsx b/packages/plugin-rsc/src/extra/ssr.tsx index 4d7aef664..d5164b82b 100644 --- a/packages/plugin-rsc/src/extra/ssr.tsx +++ b/packages/plugin-rsc/src/extra/ssr.tsx @@ -5,6 +5,9 @@ import { injectRSCPayload } from 'rsc-html-stream/server' import { createFromReadableStream } from '../ssr' import type { RscPayload } from './rsc' +/** + * @deprecated Use `@vitejs/plugin-rsc/ssr` API instead. + */ export async function renderHtml( rscStream: ReadableStream, options?: { From d464e8fc9e8e14bdc84051de9ffacec16317d2ae Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 21 Jul 2025 10:53:47 +0900 Subject: [PATCH 105/313] chore(rsc): update React Router RSC references (#581) --- packages/plugin-rsc/README.md | 3 +-- packages/plugin-rsc/examples/react-router/README.md | 3 +++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/plugin-rsc/README.md b/packages/plugin-rsc/README.md index 2d7593f07..440d6f516 100644 --- a/packages/plugin-rsc/README.md +++ b/packages/plugin-rsc/README.md @@ -22,8 +22,7 @@ npx degit vitejs/vite-plugin-react/packages/plugin-rsc/examples/starter my-app - [`./examples/starter`](./examples/starter) - This example provides an in-depth overview of API with inline comments to explain how they function within RSC-powered React application. - [`./examples/react-router`](./examples/react-router) - - This demonstrates how to integrate [experimental React Router RSC API](https://remix.run/blog/rsc-preview) with this plugin. - It also includes `@cloudflare/vite-plugin` integration. + - This demonstrates how to integrate [experimental React Router RSC API](https://remix.run/blog/rsc-preview). React Router now provides [official RSC support](https://reactrouter.com/how-to/react-server-components), so it's recommended to follow React Router's official documentation for the latest integration. - [`./examples/basic`](./examples/basic) - This is mainly used for e2e testing and include various advanced RSC usages (e.g. `"use cache"` example). It also uses a high level `@vitejs/plugin-rsc/extra/{rsc,ssr,browser}` API for quick setup. diff --git a/packages/plugin-rsc/examples/react-router/README.md b/packages/plugin-rsc/examples/react-router/README.md index af758971b..27e7f9c77 100644 --- a/packages/plugin-rsc/examples/react-router/README.md +++ b/packages/plugin-rsc/examples/react-router/README.md @@ -2,6 +2,9 @@ https://vite-rsc-react-router.hiro18181.workers.dev +> [!NOTE] +> React Router now provides [official RSC support](https://reactrouter.com/how-to/react-server-components) for Vite. The example might not be kept up to date with the latest version. Please refer to React Router's official documentation for the latest integrations. + Vite RSC example based on demo made by React router team with Parcel: - https://github.com/jacob-ebey/parcel-plugin-react-router/ From a6e1ccabe8ece14364032853d8c87e749c78666b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0?= Date: Mon, 21 Jul 2025 10:54:26 +0900 Subject: [PATCH 106/313] refactor: remove `jsxPure` warning (#585) --- packages/plugin-react/src/index.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/packages/plugin-react/src/index.ts b/packages/plugin-react/src/index.ts index f8dd135a4..760f03ba9 100644 --- a/packages/plugin-react/src/index.ts +++ b/packages/plugin-react/src/index.ts @@ -175,12 +175,6 @@ export default function viteReact(opts: Options = {}): Plugin[] { config.command === 'build' || config.server.hmr === false - if ('jsxPure' in opts) { - config.logger.warnOnce( - '[@vitejs/plugin-react] jsxPure was removed. You can configure esbuild.jsxSideEffects directly.', - ) - } - const hooks: ReactBabelHook[] = config.plugins .map((plugin) => plugin.api?.reactBabel) .filter(defined) From c5f0babdc06c813bbef08d3c44ee696789416116 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 21 Jul 2025 13:06:36 +0900 Subject: [PATCH 107/313] test(rsc): remove global unhandled error handlers (#597) --- packages/plugin-rsc/examples/basic/vite.config.ts | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/packages/plugin-rsc/examples/basic/vite.config.ts b/packages/plugin-rsc/examples/basic/vite.config.ts index 35e31d2ab..7bd492542 100644 --- a/packages/plugin-rsc/examples/basic/vite.config.ts +++ b/packages/plugin-rsc/examples/basic/vite.config.ts @@ -6,17 +6,6 @@ import { type Plugin, defineConfig, normalizePath, parseAstAsync } from 'vite' import inspect from 'vite-plugin-inspect' import path from 'node:path' -// log unhandled rejection to debug e2e failures -if (!(globalThis as any).__debugHandlerRegisterd) { - process.on('uncaughtException', (err) => { - console.error('⚠️⚠️⚠️ uncaughtException ⚠️⚠️⚠️', err) - }) - process.on('unhandledRejection', (err) => { - console.error('⚠️⚠️⚠️ unhandledRejection ⚠️⚠️⚠️', err) - }) - ;(globalThis as any).__debugHandlerRegisterd = true -} - export default defineConfig({ base: process.env.TEST_BASE ? '/custom-base/' : undefined, clearScreen: false, From 87319bf94ddb07061a1a80d3eefbfadb980f7008 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 21 Jul 2025 13:35:22 +0900 Subject: [PATCH 108/313] chore(rsc): remove `@vite/plugin-rsc/extra` API usages from examples (#596) --- packages/plugin-rsc/README.md | 1 - .../plugin-rsc/examples/basic/src/client.tsx | 3 - .../basic/src/framework/entry.browser.tsx | 127 ++++++++++++++++++ .../basic/src/framework/entry.rsc.tsx | 108 +++++++++++++++ .../basic/src/framework/entry.ssr.tsx | 53 ++++++++ .../examples/basic/src/framework/react.d.ts | 3 + .../src/{ => framework}/use-cache-runtime.tsx | 0 .../examples/basic/src/routes/root.tsx | 1 + .../basic/src/routes/use-cache/server.tsx | 2 +- .../examples/basic/src/server.ssr.tsx | 1 - .../plugin-rsc/examples/basic/src/server.tsx | 16 ++- .../plugin-rsc/examples/basic/vite.config.ts | 14 +- 12 files changed, 314 insertions(+), 15 deletions(-) delete mode 100644 packages/plugin-rsc/examples/basic/src/client.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/framework/entry.browser.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/framework/entry.rsc.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/framework/entry.ssr.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/framework/react.d.ts rename packages/plugin-rsc/examples/basic/src/{ => framework}/use-cache-runtime.tsx (100%) delete mode 100644 packages/plugin-rsc/examples/basic/src/server.ssr.tsx diff --git a/packages/plugin-rsc/README.md b/packages/plugin-rsc/README.md index 440d6f516..8aadcb337 100644 --- a/packages/plugin-rsc/README.md +++ b/packages/plugin-rsc/README.md @@ -25,7 +25,6 @@ npx degit vitejs/vite-plugin-react/packages/plugin-rsc/examples/starter my-app - This demonstrates how to integrate [experimental React Router RSC API](https://remix.run/blog/rsc-preview). React Router now provides [official RSC support](https://reactrouter.com/how-to/react-server-components), so it's recommended to follow React Router's official documentation for the latest integration. - [`./examples/basic`](./examples/basic) - This is mainly used for e2e testing and include various advanced RSC usages (e.g. `"use cache"` example). - It also uses a high level `@vitejs/plugin-rsc/extra/{rsc,ssr,browser}` API for quick setup. - [`./examples/ssg`](./examples/ssg) - Static site generation (SSG) example with MDX and client components for interactivity. diff --git a/packages/plugin-rsc/examples/basic/src/client.tsx b/packages/plugin-rsc/examples/basic/src/client.tsx deleted file mode 100644 index ebbd43356..000000000 --- a/packages/plugin-rsc/examples/basic/src/client.tsx +++ /dev/null @@ -1,3 +0,0 @@ -import { hydrate } from '@vitejs/plugin-rsc/extra/browser' - -hydrate() diff --git a/packages/plugin-rsc/examples/basic/src/framework/entry.browser.tsx b/packages/plugin-rsc/examples/basic/src/framework/entry.browser.tsx new file mode 100644 index 000000000..9ba4ae4ee --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/framework/entry.browser.tsx @@ -0,0 +1,127 @@ +import * as ReactClient from '@vitejs/plugin-rsc/browser' +import { getRscStreamFromHtml } from '@vitejs/plugin-rsc/rsc-html-stream/browser' +import React from 'react' +import * as ReactDOMClient from 'react-dom/client' +import type { RscPayload } from './entry.rsc' + +async function main() { + // stash `setPayload` function to trigger re-rendering + // from outside of `BrowserRoot` component (e.g. server function call, navigation, hmr) + let setPayload: (v: RscPayload) => void + + // deserialize RSC stream back to React VDOM for CSR + const initialPayload = await ReactClient.createFromReadableStream( + // initial RSC stream is injected in SSR stream as + getRscStreamFromHtml(), + ) + + // browser root component to (re-)render RSC payload as state + function BrowserRoot() { + const [payload, setPayload_] = React.useState(initialPayload) + + React.useEffect(() => { + setPayload = (v) => React.startTransition(() => setPayload_(v)) + }, [setPayload_]) + + // re-fetch/render on client side navigation + React.useEffect(() => { + return listenNavigation(() => fetchRscPayload()) + }, []) + + return payload.root + } + + // re-fetch RSC and trigger re-rendering + async function fetchRscPayload() { + const payload = await ReactClient.createFromFetch( + fetch(window.location.href), + ) + setPayload(payload) + } + + // register a handler which will be internally called by React + // on server function request after hydration. + ReactClient.setServerCallback(async (id, args) => { + const url = new URL(window.location.href) + const temporaryReferences = ReactClient.createTemporaryReferenceSet() + const payload = await ReactClient.createFromFetch( + fetch(url, { + method: 'POST', + body: await ReactClient.encodeReply(args, { temporaryReferences }), + headers: { + 'x-rsc-action': id, + }, + }), + { temporaryReferences }, + ) + setPayload(payload) + return payload.returnValue + }) + + // hydration + const browserRoot = ( + + + + ) + ReactDOMClient.hydrateRoot(document, browserRoot, { + formState: initialPayload.formState, + }) + + // implement server HMR by trigering re-fetch/render of RSC upon server code change + if (import.meta.hot) { + import.meta.hot.on('rsc:update', () => { + fetchRscPayload() + }) + } +} + +// a little helper to setup events interception for client side navigation +function listenNavigation(onNavigation: () => void) { + window.addEventListener('popstate', onNavigation) + + const oldPushState = window.history.pushState + window.history.pushState = function (...args) { + const res = oldPushState.apply(this, args) + onNavigation() + return res + } + + const oldReplaceState = window.history.replaceState + window.history.replaceState = function (...args) { + const res = oldReplaceState.apply(this, args) + onNavigation() + return res + } + + function onClick(e: MouseEvent) { + let link = (e.target as Element).closest('a') + if ( + link && + link instanceof HTMLAnchorElement && + link.href && + (!link.target || link.target === '_self') && + link.origin === location.origin && + !link.hasAttribute('download') && + e.button === 0 && // left clicks only + !e.metaKey && // open in new tab (mac) + !e.ctrlKey && // open in new tab (windows) + !e.altKey && // download + !e.shiftKey && + !e.defaultPrevented + ) { + e.preventDefault() + history.pushState(null, '', link.href) + } + } + document.addEventListener('click', onClick) + + return () => { + document.removeEventListener('click', onClick) + window.removeEventListener('popstate', onNavigation) + window.history.pushState = oldPushState + window.history.replaceState = oldReplaceState + } +} + +main() diff --git a/packages/plugin-rsc/examples/basic/src/framework/entry.rsc.tsx b/packages/plugin-rsc/examples/basic/src/framework/entry.rsc.tsx new file mode 100644 index 000000000..ff7c2068d --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/framework/entry.rsc.tsx @@ -0,0 +1,108 @@ +import * as ReactServer from '@vitejs/plugin-rsc/rsc' +import type { ReactFormState } from 'react-dom/client' +import type React from 'react' + +// The schema of payload which is serialized into RSC stream on rsc environment +// and deserialized on ssr/client environments. +export type RscPayload = { + // this demo renders/serializes/deserizlies entire root html element + // but this mechanism can be changed to render/fetch different parts of components + // based on your own route conventions. + root: React.ReactNode + // server action return value of non-progressive enhancement case + returnValue?: unknown + // server action form state (e.g. useActionState) of progressive enhancement case + formState?: ReactFormState +} + +// the plugin by default assumes `rsc` entry having default export of request handler. +// however, how server entries are executed can be customized by registering +// own server handler e.g. `@cloudflare/vite-plugin`. +export async function handleRequest({ + request, + getRoot, + nonce, +}: { + request: Request + getRoot: () => React.ReactNode + nonce?: string +}): Promise { + // handle server function request + const isAction = request.method === 'POST' + let returnValue: unknown | undefined + let formState: ReactFormState | undefined + let temporaryReferences: unknown | undefined + if (isAction) { + // x-rsc-action header exists when action is called via `ReactClient.setServerCallback`. + const actionId = request.headers.get('x-rsc-action') + if (actionId) { + const contentType = request.headers.get('content-type') + const body = contentType?.startsWith('multipart/form-data') + ? await request.formData() + : await request.text() + temporaryReferences = ReactServer.createTemporaryReferenceSet() + const args = await ReactServer.decodeReply(body, { temporaryReferences }) + const action = await ReactServer.loadServerAction(actionId) + returnValue = await action.apply(null, args) + } else { + // otherwise server function is called via `
` + // before hydration (e.g. when javascript is disabled). + // aka progressive enhancement. + const formData = await request.formData() + const decodedAction = await ReactServer.decodeAction(formData) + const result = await decodedAction() + formState = await ReactServer.decodeFormState(result, formData) + } + } + + const url = new URL(request.url) + const rscPayload: RscPayload = { root: getRoot(), formState, returnValue } + const rscOptions = { temporaryReferences } + const rscStream = ReactServer.renderToReadableStream( + rscPayload, + rscOptions, + ) + + // respond RSC stream without HTML rendering based on framework's convention. + // here we use request header `content-type`. + // additionally we allow `?__rsc` and `?__html` to easily view payload directly. + const isRscRequest = + (!request.headers.get('accept')?.includes('text/html') && + !url.searchParams.has('__html')) || + url.searchParams.has('__rsc') + + if (isRscRequest) { + return new Response(rscStream, { + headers: { + 'content-type': 'text/x-component;charset=utf-8', + vary: 'accept', + }, + }) + } + + // Delegate to SSR environment for html rendering. + // The plugin provides `loadSsrModule` helper to allow loading SSR environment entry module + // in RSC environment. however this can be customized by implementing own runtime communication + // e.g. `@cloudflare/vite-plugin`'s service binding. + const ssrEntryModule = await import.meta.viteRsc.loadModule< + typeof import('./entry.ssr.tsx') + >('ssr', 'index') + const htmlStream = await ssrEntryModule.renderHTML(rscStream, { + formState, + nonce, + // allow quick simulation of javscript disabled browser + debugNojs: url.searchParams.has('__nojs'), + }) + + // respond html + return new Response(htmlStream, { + headers: { + 'content-type': 'text/html;charset=utf-8', + vary: 'accept', + }, + }) +} + +if (import.meta.hot) { + import.meta.hot.accept() +} diff --git a/packages/plugin-rsc/examples/basic/src/framework/entry.ssr.tsx b/packages/plugin-rsc/examples/basic/src/framework/entry.ssr.tsx new file mode 100644 index 000000000..129dbadf1 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/framework/entry.ssr.tsx @@ -0,0 +1,53 @@ +import { injectRscStreamToHtml } from '@vitejs/plugin-rsc/rsc-html-stream/ssr' // helper API +import * as ReactClient from '@vitejs/plugin-rsc/ssr' // RSC API +import React from 'react' +import type { ReactFormState } from 'react-dom/client' +import * as ReactDOMServer from 'react-dom/server.edge' +import type { RscPayload } from './entry.rsc' + +export async function renderHTML( + rscStream: ReadableStream, + options: { + formState?: ReactFormState + nonce?: string + debugNojs?: boolean + }, +) { + // duplicate one RSC stream into two. + // - one for SSR (ReactClient.createFromReadableStream below) + // - another for browser hydration payload by injecting . + const [rscStream1, rscStream2] = rscStream.tee() + + // deserialize RSC stream back to React VDOM + let payload: Promise + function SsrRoot() { + // deserialization needs to be kicked off inside ReactDOMServer context + // for ReactDomServer preinit/preloading to work + payload ??= ReactClient.createFromReadableStream(rscStream1) + return React.use(payload).root + } + + // render html (traditional SSR) + const bootstrapScriptContent = + await import.meta.viteRsc.loadBootstrapScriptContent('index') + const htmlStream = await ReactDOMServer.renderToReadableStream(, { + bootstrapScriptContent: options?.debugNojs + ? undefined + : bootstrapScriptContent, + nonce: options?.nonce, + // no types + ...{ formState: options?.formState }, + }) + + let responseStream: ReadableStream = htmlStream + if (!options?.debugNojs) { + // initial RSC stream is injected in HTML stream as + responseStream = responseStream.pipeThrough( + injectRscStreamToHtml(rscStream2, { + nonce: options?.nonce, + }), + ) + } + + return responseStream +} diff --git a/packages/plugin-rsc/examples/basic/src/framework/react.d.ts b/packages/plugin-rsc/examples/basic/src/framework/react.d.ts new file mode 100644 index 000000000..d92ea675b --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/framework/react.d.ts @@ -0,0 +1,3 @@ +declare module 'react-dom/server.edge' { + export * from 'react-dom/server' +} diff --git a/packages/plugin-rsc/examples/basic/src/use-cache-runtime.tsx b/packages/plugin-rsc/examples/basic/src/framework/use-cache-runtime.tsx similarity index 100% rename from packages/plugin-rsc/examples/basic/src/use-cache-runtime.tsx rename to packages/plugin-rsc/examples/basic/src/framework/use-cache-runtime.tsx diff --git a/packages/plugin-rsc/examples/basic/src/routes/root.tsx b/packages/plugin-rsc/examples/basic/src/routes/root.tsx index 5a3421ed4..52ce38dee 100644 --- a/packages/plugin-rsc/examples/basic/src/routes/root.tsx +++ b/packages/plugin-rsc/examples/basic/src/routes/root.tsx @@ -34,6 +34,7 @@ export function Root(props: { url: URL }) { return ( + vite-rsc {import.meta.viteRsc.loadCss('/src/routes/root.tsx')} diff --git a/packages/plugin-rsc/examples/basic/src/routes/use-cache/server.tsx b/packages/plugin-rsc/examples/basic/src/routes/use-cache/server.tsx index d90f7496a..9c5e09f4c 100644 --- a/packages/plugin-rsc/examples/basic/src/routes/use-cache/server.tsx +++ b/packages/plugin-rsc/examples/basic/src/routes/use-cache/server.tsx @@ -1,4 +1,4 @@ -import { revalidateCache } from '../../use-cache-runtime' +import { revalidateCache } from '../../framework/use-cache-runtime' export function TestUseCache() { return ( diff --git a/packages/plugin-rsc/examples/basic/src/server.ssr.tsx b/packages/plugin-rsc/examples/basic/src/server.ssr.tsx deleted file mode 100644 index 651769496..000000000 --- a/packages/plugin-rsc/examples/basic/src/server.ssr.tsx +++ /dev/null @@ -1 +0,0 @@ -export * from '@vitejs/plugin-rsc/extra/ssr' diff --git a/packages/plugin-rsc/examples/basic/src/server.tsx b/packages/plugin-rsc/examples/basic/src/server.tsx index 86b9234d3..49b39a442 100644 --- a/packages/plugin-rsc/examples/basic/src/server.tsx +++ b/packages/plugin-rsc/examples/basic/src/server.tsx @@ -1,18 +1,26 @@ +import { handleRequest } from './framework/entry.rsc.tsx' import './styles.css' -import { renderRequest } from '@vitejs/plugin-rsc/extra/rsc' export default async function handler(request: Request): Promise { const url = new URL(request.url) const { Root } = await import('./routes/root.tsx') + const nonce = !process.env.NO_CSP ? crypto.randomUUID() : undefined + // https://vite.dev/guide/features.html#content-security-policy-csp + // this isn't needed if `style-src: 'unsafe-inline'` (dev) and `script-src: 'self'` + const nonceMeta = nonce && const root = ( <> {import.meta.viteRsc.loadCss()} + {nonceMeta} ) - const nonce = !process.env.NO_CSP ? crypto.randomUUID() : undefined - const response = await renderRequest(request, root, { nonce }) - if (nonce) { + const response = await handleRequest({ + request, + getRoot: () => root, + nonce, + }) + if (nonce && response.headers.get('content-type')?.includes('text/html')) { response.headers.set( 'content-security-policy', `default-src 'self'; ` + diff --git a/packages/plugin-rsc/examples/basic/vite.config.ts b/packages/plugin-rsc/examples/basic/vite.config.ts index 7bd492542..38061c0f1 100644 --- a/packages/plugin-rsc/examples/basic/vite.config.ts +++ b/packages/plugin-rsc/examples/basic/vite.config.ts @@ -22,8 +22,8 @@ export default defineConfig({ vitePluginUseCache(), rsc({ entries: { - client: './src/client.tsx', - ssr: './src/server.ssr.tsx', + client: './src/framework/entry.browser.tsx', + ssr: './src/framework/entry.ssr.tsx', rsc: './src/server.tsx', }, // disable auto css injection to manually test `loadCss` feature. @@ -68,11 +68,15 @@ export default defineConfig({ assert(typeof viteManifest.source === 'string') if (this.environment.name === 'rsc') { assert(viteManifest.source.includes('src/server.tsx')) - assert(!viteManifest.source.includes('src/client.tsx')) + assert( + !viteManifest.source.includes('src/framework/entry.browser.tsx'), + ) } if (this.environment.name === 'client') { assert(!viteManifest.source.includes('src/server.tsx')) - assert(viteManifest.source.includes('src/client.tsx')) + assert( + viteManifest.source.includes('src/framework/entry.browser.tsx'), + ) } }, }, @@ -164,7 +168,7 @@ function vitePluginUseCache(): Plugin[] { }) if (!result.output.hasChanged()) return result.output.prepend( - `import __vite_rsc_cache from "/src/use-cache-runtime";`, + `import __vite_rsc_cache from "/src/framework/use-cache-runtime";`, ) return { code: result.output.toString(), From b550b63fe7f6ef82588ff0d60389d11906c3cc4e Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 21 Jul 2025 13:49:10 +0900 Subject: [PATCH 109/313] chore(rsc): comment (#599) --- packages/plugin-rsc/examples/basic/src/server.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/plugin-rsc/examples/basic/src/server.tsx b/packages/plugin-rsc/examples/basic/src/server.tsx index 49b39a442..9beac0a6c 100644 --- a/packages/plugin-rsc/examples/basic/src/server.tsx +++ b/packages/plugin-rsc/examples/basic/src/server.tsx @@ -10,6 +10,7 @@ export default async function handler(request: Request): Promise { const nonceMeta = nonce && const root = ( <> + {/* this `loadCss` only collects `styles.css` but not css inside dynamic import `root.tsx` */} {import.meta.viteRsc.loadCss()} {nonceMeta} From d7fcdd8550a7a11da01887cbf48a646af898b7f1 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 21 Jul 2025 18:33:41 +0900 Subject: [PATCH 110/313] test(rsc): add more basic tests to starter (#600) --- packages/plugin-rsc/e2e/starter.test.ts | 39 +++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/packages/plugin-rsc/e2e/starter.test.ts b/packages/plugin-rsc/e2e/starter.test.ts index 1ee2c2e0e..1bee50b70 100644 --- a/packages/plugin-rsc/e2e/starter.test.ts +++ b/packages/plugin-rsc/e2e/starter.test.ts @@ -110,6 +110,24 @@ function defineTest(f: Fixture, variant?: 'no-ssr') { await page.getByRole('button', { name: 'Client Counter: 0' }).click() }) + test.describe(() => { + test.skip(f.mode === 'build') + + test('server hmr', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await using _ = await expectNoReload(page) + await expect(page.getByText('Vite + RSC')).toBeVisible() + const editor = f.createEditor('src/root.tsx') + editor.edit((s) => + s.replace('

Vite + RSC

', '

Vite x RSC

'), + ) + await expect(page.getByText('Vite x RSC')).toBeVisible() + editor.reset() + await expect(page.getByText('Vite + RSC')).toBeVisible() + }) + }) + test('image assets', async ({ page }) => { await page.goto(f.url()) await waitForHydration(page) @@ -122,4 +140,25 @@ function defineTest(f: Fixture, variant?: 'no-ssr') { 0, ) }) + + test('css @js', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await expect(page.locator('.read-the-docs')).toHaveCSS( + 'color', + 'rgb(136, 136, 136)', + ) + }) + + test.describe(() => { + test.skip(variant === 'no-ssr') + + testNoJs('css @nojs', async ({ page }) => { + await page.goto(f.url()) + await expect(page.locator('.read-the-docs')).toHaveCSS( + 'color', + 'rgb(136, 136, 136)', + ) + }) + }) } From 5167266aff6671065cf5b49cf8ada3d0ace2bbb4 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 21 Jul 2025 19:05:57 +0900 Subject: [PATCH 111/313] test(rsc): refactor variant tests (#601) --- packages/plugin-rsc/e2e/basic.test.ts | 59 ---------- packages/plugin-rsc/e2e/fixture.ts | 34 ++++++ packages/plugin-rsc/e2e/starter.test.ts | 103 +++++++++++++++++- .../plugin-rsc/examples/basic/package.json | 1 - .../plugin-rsc/examples/basic/vite.config.ts | 10 +- packages/plugin-rsc/examples/e2e/package.json | 10 ++ pnpm-lock.yaml | 17 ++- 7 files changed, 160 insertions(+), 74 deletions(-) create mode 100644 packages/plugin-rsc/examples/e2e/package.json diff --git a/packages/plugin-rsc/e2e/basic.test.ts b/packages/plugin-rsc/e2e/basic.test.ts index cc6cadd06..763cd379a 100644 --- a/packages/plugin-rsc/e2e/basic.test.ts +++ b/packages/plugin-rsc/e2e/basic.test.ts @@ -46,65 +46,6 @@ test.describe('build-default', () => { defineTest(f) }) -test.describe('dev-base', () => { - const f = useFixture({ - root: 'examples/basic', - mode: 'dev', - cliOptions: { - env: { - TEST_BASE: 'true', - }, - }, - }) - defineTest(f) -}) - -test.describe('build-base', () => { - const f = useFixture({ - root: 'examples/basic', - mode: 'build', - cliOptions: { - env: { - TEST_BASE: 'true', - }, - }, - }) - defineTest(f) -}) - -test.describe('dev-react-compiler', () => { - const f = useFixture({ - root: 'examples/basic', - mode: 'dev', - cliOptions: { - env: { - TEST_REACT_COMPILER: 'true', - }, - }, - }) - defineTest(f) - - test('verify react compiler', async ({ page }) => { - await page.goto(f.url()) - await waitForHydration(page) - const res = await page.request.get(f.url('src/routes/client.tsx')) - expect(await res.text()).toContain('react.memo_cache_sentinel') - }) -}) - -test.describe('build-react-compiler', () => { - const f = useFixture({ - root: 'examples/basic', - mode: 'build', - cliOptions: { - env: { - TEST_REACT_COMPILER: 'true', - }, - }, - }) - defineTest(f) -}) - test.describe(() => { // disabled by default if (process.env.TEST_ISOLATED !== 'true') return diff --git a/packages/plugin-rsc/e2e/fixture.ts b/packages/plugin-rsc/e2e/fixture.ts index b9cf2f070..0f3e2c169 100644 --- a/packages/plugin-rsc/e2e/fixture.ts +++ b/packages/plugin-rsc/e2e/fixture.ts @@ -192,3 +192,37 @@ function editFileJson(filepath: string, edit: (s: string) => string) { ), ) } + +// inspired by +// https://github.com/remix-run/react-router/blob/433872f6ab098eaf946cc6c9cf80abf137420ad2/integration/helpers/vite.ts#L239 +// for syntax highlighting of /* js */, use this extension +// https://github.com/mjbvz/vscode-comment-tagged-templates +export async function setupInlineFixture(options: { + src: string + dest: string + files?: Record +}) { + fs.rmSync(options.dest, { recursive: true, force: true }) + fs.mkdirSync(options.dest, { recursive: true }) + + // copy src + fs.cpSync(options.src, options.dest, { + recursive: true, + filter: (src) => !src.includes('node_modules') && !src.includes('dist'), + }) + + // write additional files + if (options.files) { + for (const [filename, contents] of Object.entries(options.files)) { + let filepath = path.join(options.dest, filename) + fs.mkdirSync(path.dirname(filepath), { recursive: true }) + // strip indent + const indent = contents.match(/^\s*/)?.[0] ?? '' + const strippedContents = contents + .split('\n') + .map((line) => line.replace(new RegExp(`^${indent}`), '')) + .join('\n') + fs.writeFileSync(filepath, strippedContents) + } + } +} diff --git a/packages/plugin-rsc/e2e/starter.test.ts b/packages/plugin-rsc/e2e/starter.test.ts index 1bee50b70..cccdd7b1a 100644 --- a/packages/plugin-rsc/e2e/starter.test.ts +++ b/packages/plugin-rsc/e2e/starter.test.ts @@ -1,5 +1,5 @@ import { expect, test } from '@playwright/test' -import { type Fixture, useFixture } from './fixture' +import { setupInlineFixture, type Fixture, useFixture } from './fixture' import { expectNoReload, testNoJs, @@ -42,6 +42,107 @@ test.describe('build-no-ssr', () => { }) }) +test.describe(() => { + const root = 'examples/e2e/temp/react-compiler' + + test.beforeAll(async () => { + await setupInlineFixture({ + src: 'examples/starter', + dest: root, + files: { + 'vite.config.ts': /* js */ ` + import rsc from '@vitejs/plugin-rsc' + import react from '@vitejs/plugin-react' + import { defineConfig } from 'vite' + + export default defineConfig({ + plugins: [ + react({ + babel: { plugins: ['babel-plugin-react-compiler'] }, + }).map((p) => ({ + ...p, + applyToEnvironment: (e) => e.name === 'client', + })), + rsc({ + entries: { + client: './src/framework/entry.browser.tsx', + ssr: './src/framework/entry.ssr.tsx', + rsc: './src/framework/entry.rsc.tsx', + } + }), + ], + }) + `, + }, + }) + }) + + test.describe('dev-react-compiler', () => { + const f = useFixture({ root, mode: 'dev' }) + defineTest(f) + + test('verify react compiler', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration_(page) + const res = await page.request.get(f.url('src/client.tsx')) + expect(await res.text()).toContain('react.memo_cache_sentinel') + }) + }) + + test.describe('build-react-compiler', () => { + const f = useFixture({ root, mode: 'build' }) + defineTest(f) + }) +}) + +test.describe(() => { + const root = 'examples/e2e/temp/base' + + test.beforeAll(async () => { + await setupInlineFixture({ + src: 'examples/starter', + dest: root, + files: { + 'vite.config.ts': /* js */ ` + import rsc from '@vitejs/plugin-rsc' + import react from '@vitejs/plugin-react' + import { defineConfig } from 'vite' + + export default defineConfig({ + base: '/custom-base/', + plugins: [ + react(), + rsc({ + entries: { + client: './src/framework/entry.browser.tsx', + ssr: './src/framework/entry.ssr.tsx', + rsc: './src/framework/entry.rsc.tsx', + } + }), + ], + }) + `, + }, + }) + }) + + test.describe('dev-base', () => { + const f = useFixture({ root, mode: 'dev' }) + defineTest({ + ...f, + url: (url) => new URL(url ?? './', f.url('./custom-base/')).href, + }) + }) + + test.describe('build-base', () => { + const f = useFixture({ root, mode: 'build' }) + defineTest({ + ...f, + url: (url) => new URL(url ?? './', f.url('./custom-base/')).href, + }) + }) +}) + function defineTest(f: Fixture, variant?: 'no-ssr') { const waitForHydration: typeof waitForHydration_ = (page) => waitForHydration_(page, variant === 'no-ssr' ? '#root' : 'body') diff --git a/packages/plugin-rsc/examples/basic/package.json b/packages/plugin-rsc/examples/basic/package.json index fc11d417a..bed815b99 100644 --- a/packages/plugin-rsc/examples/basic/package.json +++ b/packages/plugin-rsc/examples/basic/package.json @@ -25,7 +25,6 @@ "@vitejs/test-dep-client-in-server2": "file:./test-dep/client-in-server2", "@vitejs/test-dep-server-in-client": "file:./test-dep/server-in-client", "@vitejs/test-dep-server-in-server": "file:./test-dep/server-in-server", - "babel-plugin-react-compiler": "19.1.0-rc.2", "tailwindcss": "^4.1.11", "vite": "^7.0.4", "vite-plugin-inspect": "^11.3.0", diff --git a/packages/plugin-rsc/examples/basic/vite.config.ts b/packages/plugin-rsc/examples/basic/vite.config.ts index 38061c0f1..97d0f30b8 100644 --- a/packages/plugin-rsc/examples/basic/vite.config.ts +++ b/packages/plugin-rsc/examples/basic/vite.config.ts @@ -7,18 +7,10 @@ import inspect from 'vite-plugin-inspect' import path from 'node:path' export default defineConfig({ - base: process.env.TEST_BASE ? '/custom-base/' : undefined, clearScreen: false, plugins: [ tailwindcss(), - process.env.TEST_REACT_COMPILER - ? react({ - babel: { plugins: ['babel-plugin-react-compiler'] }, - }).map((p) => ({ - ...p, - applyToEnvironment: (e) => e.name === 'client', - })) - : react(), + react(), vitePluginUseCache(), rsc({ entries: { diff --git a/packages/plugin-rsc/examples/e2e/package.json b/packages/plugin-rsc/examples/e2e/package.json new file mode 100644 index 000000000..314068f26 --- /dev/null +++ b/packages/plugin-rsc/examples/e2e/package.json @@ -0,0 +1,10 @@ +{ + "name": "@vitejs/plugin-rsc-examples-e2e", + "private": true, + "type": "module", + "devDependencies": { + "@vitejs/plugin-rsc": "latest", + "@vitejs/plugin-react": "latest", + "babel-plugin-react-compiler": "19.1.0-rc.2" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 42641f74b..74e6d51d0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -542,9 +542,6 @@ importers: '@vitejs/test-dep-server-in-server': specifier: file:./test-dep/server-in-server version: file:packages/plugin-rsc/examples/basic/test-dep/server-in-server(react@19.1.0) - babel-plugin-react-compiler: - specifier: 19.1.0-rc.2 - version: 19.1.0-rc.2 tailwindcss: specifier: ^4.1.11 version: 4.1.11 @@ -558,6 +555,18 @@ importers: specifier: ^4.24.3 version: 4.24.3 + packages/plugin-rsc/examples/e2e: + devDependencies: + '@vitejs/plugin-react': + specifier: latest + version: link:../../../plugin-react + '@vitejs/plugin-rsc': + specifier: latest + version: link:../.. + babel-plugin-react-compiler: + specifier: 19.1.0-rc.2 + version: 19.1.0-rc.2 + packages/plugin-rsc/examples/no-ssr: dependencies: '@vitejs/plugin-rsc': @@ -7741,7 +7750,7 @@ snapshots: babel-plugin-react-compiler@19.1.0-rc.2: dependencies: - '@babel/types': 7.27.7 + '@babel/types': 7.28.0 bail@2.0.2: {} From 7223093d793242f3d1ef313bbfec692499f0659e Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Tue, 22 Jul 2025 08:11:56 +0900 Subject: [PATCH 112/313] test(rsc): test module runner `hmr: false` (#595) --- packages/plugin-rsc/e2e/fixture.ts | 3 +- packages/plugin-rsc/e2e/starter.test.ts | 60 +++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/packages/plugin-rsc/e2e/fixture.ts b/packages/plugin-rsc/e2e/fixture.ts index 0f3e2c169..4c927a271 100644 --- a/packages/plugin-rsc/e2e/fixture.ts +++ b/packages/plugin-rsc/e2e/fixture.ts @@ -213,10 +213,11 @@ export async function setupInlineFixture(options: { // write additional files if (options.files) { - for (const [filename, contents] of Object.entries(options.files)) { + for (let [filename, contents] of Object.entries(options.files)) { let filepath = path.join(options.dest, filename) fs.mkdirSync(path.dirname(filepath), { recursive: true }) // strip indent + contents = contents.replace(/^\n/, '') const indent = contents.match(/^\s*/)?.[0] ?? '' const strippedContents = contents .split('\n') diff --git a/packages/plugin-rsc/e2e/starter.test.ts b/packages/plugin-rsc/e2e/starter.test.ts index cccdd7b1a..8b1958471 100644 --- a/packages/plugin-rsc/e2e/starter.test.ts +++ b/packages/plugin-rsc/e2e/starter.test.ts @@ -143,6 +143,66 @@ test.describe(() => { }) }) +test.describe(() => { + const root = 'examples/e2e/temp/module-runner-hmr-false' + + test.beforeAll(async () => { + await setupInlineFixture({ + src: 'examples/starter', + dest: root, + files: { + 'vite.config.ts': /* js */ ` + import rsc from '@vitejs/plugin-rsc' + import react from '@vitejs/plugin-react' + import { defineConfig, createRunnableDevEnvironment } from 'vite' + + export default defineConfig({ + plugins: [ + react(), + rsc({ + entries: { + client: './src/framework/entry.browser.tsx', + ssr: './src/framework/entry.ssr.tsx', + rsc: './src/framework/entry.rsc.tsx', + } + }), + ], + environments: { + ssr: { + dev: { + createEnvironment(name, config) { + return createRunnableDevEnvironment(name, config, { + runnerOptions: { + hmr: false, + }, + }) + }, + }, + }, + rsc: { + dev: { + createEnvironment(name, config) { + return createRunnableDevEnvironment(name, config, { + runnerOptions: { + hmr: false, + }, + }) + }, + }, + }, + }, + }) + `, + }, + }) + }) + + test.describe('dev-module-runner-hmr-false', () => { + const f = useFixture({ root, mode: 'dev' }) + defineTest(f) + }) +}) + function defineTest(f: Fixture, variant?: 'no-ssr') { const waitForHydration: typeof waitForHydration_ = (page) => waitForHydration_(page, variant === 'no-ssr' ? '#root' : 'body') From 8e0e8b60c511f34df188a8e8b103cf273891d7ad Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Tue, 22 Jul 2025 09:07:30 +0900 Subject: [PATCH 113/313] chore(rsc): deprecate `rsc-html-stream` re-exports (#602) --- packages/plugin-rsc/README.md | 2 +- packages/plugin-rsc/examples/basic/package.json | 1 + .../examples/basic/src/framework/entry.browser.tsx | 4 ++-- .../plugin-rsc/examples/basic/src/framework/entry.ssr.tsx | 5 +++-- .../examples/ssg/src/framework/entry.browser.tsx | 7 +++---- .../plugin-rsc/examples/ssg/src/framework/entry.ssr.tsx | 4 ++-- .../starter-cf-single/src/framework/entry.browser.tsx | 4 ++-- .../examples/starter-cf-single/src/framework/entry.ssr.tsx | 4 ++-- .../plugin-rsc/examples/starter-cf-single/vite.config.ts | 6 ++++++ packages/plugin-rsc/examples/starter/README.md | 4 ++-- packages/plugin-rsc/examples/starter/package.json | 1 + .../examples/starter/src/framework/entry.browser.tsx | 4 ++-- .../examples/starter/src/framework/entry.ssr.tsx | 4 ++-- packages/plugin-rsc/src/rsc-html-stream/browser.ts | 1 + packages/plugin-rsc/src/rsc-html-stream/ssr.ts | 1 + pnpm-lock.yaml | 6 ++++++ 16 files changed, 37 insertions(+), 21 deletions(-) diff --git a/packages/plugin-rsc/README.md b/packages/plugin-rsc/README.md index 8aadcb337..50a165080 100644 --- a/packages/plugin-rsc/README.md +++ b/packages/plugin-rsc/README.md @@ -11,7 +11,7 @@ This package provides [React Server Components](https://react.dev/reference/rsc/ ## Getting Started -You can start a project by copying an example locally by: +You can create a starter project by: ```sh npx degit vitejs/vite-plugin-react/packages/plugin-rsc/examples/starter my-app diff --git a/packages/plugin-rsc/examples/basic/package.json b/packages/plugin-rsc/examples/basic/package.json index bed815b99..ff1648a7f 100644 --- a/packages/plugin-rsc/examples/basic/package.json +++ b/packages/plugin-rsc/examples/basic/package.json @@ -25,6 +25,7 @@ "@vitejs/test-dep-client-in-server2": "file:./test-dep/client-in-server2", "@vitejs/test-dep-server-in-client": "file:./test-dep/server-in-client", "@vitejs/test-dep-server-in-server": "file:./test-dep/server-in-server", + "rsc-html-stream": "^0.0.7", "tailwindcss": "^4.1.11", "vite": "^7.0.4", "vite-plugin-inspect": "^11.3.0", diff --git a/packages/plugin-rsc/examples/basic/src/framework/entry.browser.tsx b/packages/plugin-rsc/examples/basic/src/framework/entry.browser.tsx index 9ba4ae4ee..473fc492d 100644 --- a/packages/plugin-rsc/examples/basic/src/framework/entry.browser.tsx +++ b/packages/plugin-rsc/examples/basic/src/framework/entry.browser.tsx @@ -1,7 +1,7 @@ import * as ReactClient from '@vitejs/plugin-rsc/browser' -import { getRscStreamFromHtml } from '@vitejs/plugin-rsc/rsc-html-stream/browser' import React from 'react' import * as ReactDOMClient from 'react-dom/client' +import { rscStream } from 'rsc-html-stream/client' import type { RscPayload } from './entry.rsc' async function main() { @@ -12,7 +12,7 @@ async function main() { // deserialize RSC stream back to React VDOM for CSR const initialPayload = await ReactClient.createFromReadableStream( // initial RSC stream is injected in SSR stream as - getRscStreamFromHtml(), + rscStream, ) // browser root component to (re-)render RSC payload as state diff --git a/packages/plugin-rsc/examples/basic/src/framework/entry.ssr.tsx b/packages/plugin-rsc/examples/basic/src/framework/entry.ssr.tsx index 129dbadf1..0fd5e92f3 100644 --- a/packages/plugin-rsc/examples/basic/src/framework/entry.ssr.tsx +++ b/packages/plugin-rsc/examples/basic/src/framework/entry.ssr.tsx @@ -1,8 +1,8 @@ -import { injectRscStreamToHtml } from '@vitejs/plugin-rsc/rsc-html-stream/ssr' // helper API import * as ReactClient from '@vitejs/plugin-rsc/ssr' // RSC API import React from 'react' import type { ReactFormState } from 'react-dom/client' import * as ReactDOMServer from 'react-dom/server.edge' +import { injectRSCPayload } from 'rsc-html-stream/server' import type { RscPayload } from './entry.rsc' export async function renderHTML( @@ -42,8 +42,9 @@ export async function renderHTML( let responseStream: ReadableStream = htmlStream if (!options?.debugNojs) { // initial RSC stream is injected in HTML stream as + // using utility made by devongovett https://github.com/devongovett/rsc-html-stream responseStream = responseStream.pipeThrough( - injectRscStreamToHtml(rscStream2, { + injectRSCPayload(rscStream2, { nonce: options?.nonce, }), ) diff --git a/packages/plugin-rsc/examples/ssg/src/framework/entry.browser.tsx b/packages/plugin-rsc/examples/ssg/src/framework/entry.browser.tsx index 6ef285d86..7f77627e5 100644 --- a/packages/plugin-rsc/examples/ssg/src/framework/entry.browser.tsx +++ b/packages/plugin-rsc/examples/ssg/src/framework/entry.browser.tsx @@ -1,7 +1,7 @@ import * as ReactClient from '@vitejs/plugin-rsc/browser' -import { getRscStreamFromHtml } from '@vitejs/plugin-rsc/rsc-html-stream/browser' import React from 'react' import ReactDomClient from 'react-dom/client' +import { rscStream } from 'rsc-html-stream/client' import { RSC_POSTFIX, type RscPayload } from './shared' async function hydrate(): Promise { @@ -12,9 +12,8 @@ async function hydrate(): Promise { setPayload(payload) } - const initialPayload = await ReactClient.createFromReadableStream( - getRscStreamFromHtml(), - ) + const initialPayload = + await ReactClient.createFromReadableStream(rscStream) let setPayload: (v: RscPayload) => void diff --git a/packages/plugin-rsc/examples/ssg/src/framework/entry.ssr.tsx b/packages/plugin-rsc/examples/ssg/src/framework/entry.ssr.tsx index 452978250..449c6ca21 100644 --- a/packages/plugin-rsc/examples/ssg/src/framework/entry.ssr.tsx +++ b/packages/plugin-rsc/examples/ssg/src/framework/entry.ssr.tsx @@ -1,7 +1,7 @@ -import { injectRscStreamToHtml } from '@vitejs/plugin-rsc/rsc-html-stream/ssr' import * as ReactClient from '@vitejs/plugin-rsc/ssr' import React from 'react' import * as ReactDomServer from 'react-dom/server.edge' +import { injectRSCPayload } from 'rsc-html-stream/server' import type { RscPayload } from './shared' export async function renderHtml(rscStream: ReadableStream) { @@ -24,6 +24,6 @@ export async function renderHtml(rscStream: ReadableStream) { await htmlStream.allReady let responseStream: ReadableStream = htmlStream - responseStream = responseStream.pipeThrough(injectRscStreamToHtml(rscStream2)) + responseStream = responseStream.pipeThrough(injectRSCPayload(rscStream2)) return responseStream } diff --git a/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.browser.tsx b/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.browser.tsx index 9ba4ae4ee..473fc492d 100644 --- a/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.browser.tsx +++ b/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.browser.tsx @@ -1,7 +1,7 @@ import * as ReactClient from '@vitejs/plugin-rsc/browser' -import { getRscStreamFromHtml } from '@vitejs/plugin-rsc/rsc-html-stream/browser' import React from 'react' import * as ReactDOMClient from 'react-dom/client' +import { rscStream } from 'rsc-html-stream/client' import type { RscPayload } from './entry.rsc' async function main() { @@ -12,7 +12,7 @@ async function main() { // deserialize RSC stream back to React VDOM for CSR const initialPayload = await ReactClient.createFromReadableStream( // initial RSC stream is injected in SSR stream as - getRscStreamFromHtml(), + rscStream, ) // browser root component to (re-)render RSC payload as state diff --git a/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.ssr.tsx b/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.ssr.tsx index c9e0fab93..9fae3468b 100644 --- a/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.ssr.tsx +++ b/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.ssr.tsx @@ -1,8 +1,8 @@ -import { injectRscStreamToHtml } from '@vitejs/plugin-rsc/rsc-html-stream/ssr' // helper API import * as ReactClient from '@vitejs/plugin-rsc/ssr' // RSC API import React from 'react' import type { ReactFormState } from 'react-dom/client' import * as ReactDOMServer from 'react-dom/server.edge' +import { injectRSCPayload } from 'rsc-html-stream/server' import type { RscPayload } from './entry.rsc' export type RenderHTML = typeof renderHTML @@ -45,7 +45,7 @@ export async function renderHTML( if (!options?.debugNojs) { // initial RSC stream is injected in HTML stream as responseStream = responseStream.pipeThrough( - injectRscStreamToHtml(rscStream2, { + injectRSCPayload(rscStream2, { nonce: options?.nonce, }), ) diff --git a/packages/plugin-rsc/examples/starter-cf-single/vite.config.ts b/packages/plugin-rsc/examples/starter-cf-single/vite.config.ts index 3b839553c..9617078a7 100644 --- a/packages/plugin-rsc/examples/starter-cf-single/vite.config.ts +++ b/packages/plugin-rsc/examples/starter-cf-single/vite.config.ts @@ -35,6 +35,9 @@ export default defineConfig({ platform: 'neutral', }, }, + optimizeDeps: { + include: ['turbo-stream'], + }, }, ssr: { keepProcessEnv: false, @@ -43,6 +46,9 @@ export default defineConfig({ // wrangler can deploy self-contained `dist/rsc` outDir: './dist/rsc/ssr', }, + resolve: { + noExternal: true, + }, }, }, }) diff --git a/packages/plugin-rsc/examples/starter/README.md b/packages/plugin-rsc/examples/starter/README.md index 15efa6164..daf79d3bd 100644 --- a/packages/plugin-rsc/examples/starter/README.md +++ b/packages/plugin-rsc/examples/starter/README.md @@ -24,11 +24,11 @@ See [`@vitejs/plugin-rsc`](https://github.com/vitejs/vite-plugin-react/tree/main - `import.meta.viteRsc.loadModule` - [`./src/framework/entry.ssr.tsx`](./src/framework/entry.ssr.tsx) - `@vitejs/plugin-rsc/ssr` - - `@vitejs/plugin-rsc/rsc-html-stream/ssr` - `import.meta.viteRsc.loadBootstrapScriptContent` + - `rsc-html-stream/server` - [`./src/framework/entry.browser.tsx`](./src/framework/entry.browser.tsx) - `@vitejs/plugin-rsc/browser` - - `@vitejs/plugin-rsc/rsc-html-stream/browser` + - `rsc-html-stream/client` ## Notes diff --git a/packages/plugin-rsc/examples/starter/package.json b/packages/plugin-rsc/examples/starter/package.json index b400b4da0..059e49fee 100644 --- a/packages/plugin-rsc/examples/starter/package.json +++ b/packages/plugin-rsc/examples/starter/package.json @@ -18,6 +18,7 @@ "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "latest", + "rsc-html-stream": "^0.0.7", "vite": "^7.0.4", "vite-plugin-inspect": "^11.3.0" } diff --git a/packages/plugin-rsc/examples/starter/src/framework/entry.browser.tsx b/packages/plugin-rsc/examples/starter/src/framework/entry.browser.tsx index 9ba4ae4ee..473fc492d 100644 --- a/packages/plugin-rsc/examples/starter/src/framework/entry.browser.tsx +++ b/packages/plugin-rsc/examples/starter/src/framework/entry.browser.tsx @@ -1,7 +1,7 @@ import * as ReactClient from '@vitejs/plugin-rsc/browser' -import { getRscStreamFromHtml } from '@vitejs/plugin-rsc/rsc-html-stream/browser' import React from 'react' import * as ReactDOMClient from 'react-dom/client' +import { rscStream } from 'rsc-html-stream/client' import type { RscPayload } from './entry.rsc' async function main() { @@ -12,7 +12,7 @@ async function main() { // deserialize RSC stream back to React VDOM for CSR const initialPayload = await ReactClient.createFromReadableStream( // initial RSC stream is injected in SSR stream as - getRscStreamFromHtml(), + rscStream, ) // browser root component to (re-)render RSC payload as state diff --git a/packages/plugin-rsc/examples/starter/src/framework/entry.ssr.tsx b/packages/plugin-rsc/examples/starter/src/framework/entry.ssr.tsx index 129dbadf1..1918f834b 100644 --- a/packages/plugin-rsc/examples/starter/src/framework/entry.ssr.tsx +++ b/packages/plugin-rsc/examples/starter/src/framework/entry.ssr.tsx @@ -1,8 +1,8 @@ -import { injectRscStreamToHtml } from '@vitejs/plugin-rsc/rsc-html-stream/ssr' // helper API import * as ReactClient from '@vitejs/plugin-rsc/ssr' // RSC API import React from 'react' import type { ReactFormState } from 'react-dom/client' import * as ReactDOMServer from 'react-dom/server.edge' +import { injectRSCPayload } from 'rsc-html-stream/server' import type { RscPayload } from './entry.rsc' export async function renderHTML( @@ -43,7 +43,7 @@ export async function renderHTML( if (!options?.debugNojs) { // initial RSC stream is injected in HTML stream as responseStream = responseStream.pipeThrough( - injectRscStreamToHtml(rscStream2, { + injectRSCPayload(rscStream2, { nonce: options?.nonce, }), ) diff --git a/packages/plugin-rsc/src/rsc-html-stream/browser.ts b/packages/plugin-rsc/src/rsc-html-stream/browser.ts index eb2a74e8d..166faf332 100644 --- a/packages/plugin-rsc/src/rsc-html-stream/browser.ts +++ b/packages/plugin-rsc/src/rsc-html-stream/browser.ts @@ -1,4 +1,5 @@ import * as rscHtmlStreamClient from 'rsc-html-stream/client' +/** @deprecated use `rsc-html-stream/client` instead */ export const getRscStreamFromHtml = (): ReadableStream => rscHtmlStreamClient.rscStream diff --git a/packages/plugin-rsc/src/rsc-html-stream/ssr.ts b/packages/plugin-rsc/src/rsc-html-stream/ssr.ts index 109d09eb0..92c0b57d1 100644 --- a/packages/plugin-rsc/src/rsc-html-stream/ssr.ts +++ b/packages/plugin-rsc/src/rsc-html-stream/ssr.ts @@ -1,5 +1,6 @@ import * as rscHtmlStreamServer from 'rsc-html-stream/server' +/** @deprecated use `rsc-html-stream/server` instead */ export const injectRscStreamToHtml = ( stream: ReadableStream, options?: { nonce?: string }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 74e6d51d0..7be516b19 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -542,6 +542,9 @@ importers: '@vitejs/test-dep-server-in-server': specifier: file:./test-dep/server-in-server version: file:packages/plugin-rsc/examples/basic/test-dep/server-in-server(react@19.1.0) + rsc-html-stream: + specifier: ^0.0.7 + version: 0.0.7 tailwindcss: specifier: ^4.1.11 version: 4.1.11 @@ -690,6 +693,9 @@ importers: '@vitejs/plugin-react': specifier: latest version: link:../../../plugin-react + rsc-html-stream: + specifier: ^0.0.7 + version: 0.0.7 vite: specifier: ^7.0.4 version: 7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) From 22e53987a5548d237fcbe61377bd1da6e86947ef Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Tue, 22 Jul 2025 09:17:05 +0900 Subject: [PATCH 114/313] chore(rsc): fix temporary references in examples (#603) --- .../examples/no-ssr/src/framework/entry.rsc.tsx | 11 ++++++----- .../starter-cf-single/src/framework/entry.rsc.tsx | 12 ++++++------ .../examples/starter/src/framework/entry.rsc.tsx | 12 ++++++------ 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/packages/plugin-rsc/examples/no-ssr/src/framework/entry.rsc.tsx b/packages/plugin-rsc/examples/no-ssr/src/framework/entry.rsc.tsx index da968de3a..439cfddc9 100644 --- a/packages/plugin-rsc/examples/no-ssr/src/framework/entry.rsc.tsx +++ b/packages/plugin-rsc/examples/no-ssr/src/framework/entry.rsc.tsx @@ -32,11 +32,12 @@ export default async function handler(request: Request): Promise { } } - const rscStream = ReactServer.renderToReadableStream({ - root: , - returnValue, - formState, - }) + const rscPayload: RscPayload = { root: , formState, returnValue } + const rscOptions = { temporaryReferences } + const rscStream = ReactServer.renderToReadableStream( + rscPayload, + rscOptions, + ) return new Response(rscStream, { headers: { diff --git a/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.rsc.tsx b/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.rsc.tsx index a3060d2f4..1113c4bcc 100644 --- a/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.rsc.tsx +++ b/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.rsc.tsx @@ -41,12 +41,12 @@ async function handler(request: Request): Promise { // we render RSC stream after handling server function request // so that new render reflects updated state from server function call // to achieve single round trip to mutate and fetch from server. - const rscStream = ReactServer.renderToReadableStream({ - // in this example, we always render the same `` - root: , - returnValue, - formState, - }) + const rscPayload: RscPayload = { root: , formState, returnValue } + const rscOptions = { temporaryReferences } + const rscStream = ReactServer.renderToReadableStream( + rscPayload, + rscOptions, + ) // respond RSC stream without HTML rendering based on framework's convention. // here we use request header `content-type`. diff --git a/packages/plugin-rsc/examples/starter/src/framework/entry.rsc.tsx b/packages/plugin-rsc/examples/starter/src/framework/entry.rsc.tsx index b45e053e2..58b0c60be 100644 --- a/packages/plugin-rsc/examples/starter/src/framework/entry.rsc.tsx +++ b/packages/plugin-rsc/examples/starter/src/framework/entry.rsc.tsx @@ -51,12 +51,12 @@ export default async function handler(request: Request): Promise { // we render RSC stream after handling server function request // so that new render reflects updated state from server function call // to achieve single round trip to mutate and fetch from server. - const rscStream = ReactServer.renderToReadableStream({ - // in this example, we always render the same `` - root: , - returnValue, - formState, - }) + const rscPayload: RscPayload = { root: , formState, returnValue } + const rscOptions = { temporaryReferences } + const rscStream = ReactServer.renderToReadableStream( + rscPayload, + rscOptions, + ) // respond RSC stream without HTML rendering based on framework's convention. // here we use request header `content-type`. From 4d6c72f81d64972ac84735240d27516be81431f8 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Tue, 22 Jul 2025 11:00:19 +0900 Subject: [PATCH 115/313] chore(rsc): move comment (#604) --- packages/plugin-rsc/examples/basic/src/framework/entry.ssr.tsx | 1 - packages/plugin-rsc/examples/starter/src/framework/entry.ssr.tsx | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/plugin-rsc/examples/basic/src/framework/entry.ssr.tsx b/packages/plugin-rsc/examples/basic/src/framework/entry.ssr.tsx index 0fd5e92f3..1918f834b 100644 --- a/packages/plugin-rsc/examples/basic/src/framework/entry.ssr.tsx +++ b/packages/plugin-rsc/examples/basic/src/framework/entry.ssr.tsx @@ -42,7 +42,6 @@ export async function renderHTML( let responseStream: ReadableStream = htmlStream if (!options?.debugNojs) { // initial RSC stream is injected in HTML stream as - // using utility made by devongovett https://github.com/devongovett/rsc-html-stream responseStream = responseStream.pipeThrough( injectRSCPayload(rscStream2, { nonce: options?.nonce, diff --git a/packages/plugin-rsc/examples/starter/src/framework/entry.ssr.tsx b/packages/plugin-rsc/examples/starter/src/framework/entry.ssr.tsx index 1918f834b..0fd5e92f3 100644 --- a/packages/plugin-rsc/examples/starter/src/framework/entry.ssr.tsx +++ b/packages/plugin-rsc/examples/starter/src/framework/entry.ssr.tsx @@ -42,6 +42,7 @@ export async function renderHTML( let responseStream: ReadableStream = htmlStream if (!options?.debugNojs) { // initial RSC stream is injected in HTML stream as + // using utility made by devongovett https://github.com/devongovett/rsc-html-stream responseStream = responseStream.pipeThrough( injectRSCPayload(rscStream2, { nonce: options?.nonce, From bfd434f7fdd063ad017aa3c3a41e42983efc0ef4 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Tue, 22 Jul 2025 11:06:33 +0900 Subject: [PATCH 116/313] test(rsc): add SSR thenable workaround in examples (#591) --- packages/plugin-rsc/e2e/fixture.ts | 2 +- packages/plugin-rsc/e2e/helper.ts | 12 ++++ packages/plugin-rsc/e2e/ssr-thenable.test.ts | 64 +++++++++++++++++++ .../basic/src/framework/entry.ssr.tsx | 6 +- .../starter/src/framework/entry.ssr.tsx | 13 +++- 5 files changed, 93 insertions(+), 4 deletions(-) create mode 100644 packages/plugin-rsc/e2e/ssr-thenable.test.ts diff --git a/packages/plugin-rsc/e2e/fixture.ts b/packages/plugin-rsc/e2e/fixture.ts index 4c927a271..ac1d7385d 100644 --- a/packages/plugin-rsc/e2e/fixture.ts +++ b/packages/plugin-rsc/e2e/fixture.ts @@ -217,7 +217,7 @@ export async function setupInlineFixture(options: { let filepath = path.join(options.dest, filename) fs.mkdirSync(path.dirname(filepath), { recursive: true }) // strip indent - contents = contents.replace(/^\n/, '') + contents = contents.replace(/^\n*/, '').replace(/\s*$/, '\n') const indent = contents.match(/^\s*/)?.[0] ?? '' const strippedContents = contents .split('\n') diff --git a/packages/plugin-rsc/e2e/helper.ts b/packages/plugin-rsc/e2e/helper.ts index b1b167e38..702c5b7ec 100644 --- a/packages/plugin-rsc/e2e/helper.ts +++ b/packages/plugin-rsc/e2e/helper.ts @@ -42,3 +42,15 @@ export async function expectNoReload(page: Page) { }, } } + +export function expectNoPageError(page: Page) { + const errors: Error[] = [] + page.on('pageerror', (error) => { + errors.push(error) + }) + return { + [Symbol.dispose]: () => { + expect(errors).toEqual([]) + }, + } +} diff --git a/packages/plugin-rsc/e2e/ssr-thenable.test.ts b/packages/plugin-rsc/e2e/ssr-thenable.test.ts new file mode 100644 index 000000000..7bf9e14e4 --- /dev/null +++ b/packages/plugin-rsc/e2e/ssr-thenable.test.ts @@ -0,0 +1,64 @@ +import { test } from '@playwright/test' +import { setupInlineFixture, type Fixture, useFixture } from './fixture' +import { + expectNoPageError, + waitForHydration as waitForHydration_, +} from './helper' + +test.describe(() => { + const root = 'examples/e2e/temp/ssr-thenable' + + test.beforeAll(async () => { + await setupInlineFixture({ + src: 'examples/starter', + dest: root, + files: { + 'src/root.tsx': /* tsx */ ` + import { TestClientUse } from './client.tsx' + + export function Root() { + return ( + + + + + + + + + ) + } + `, + 'src/client.tsx': /* tsx */ ` + "use client"; + import React from 'react' + + const promise = Promise.resolve('ok') + + export function TestClientUse() { + const value = React.use(promise) + return {value} + } + `, + }, + }) + }) + + function defineSsrThenableTest(f: Fixture) { + test('ssr-thenable', async ({ page }) => { + using _ = expectNoPageError(page) + await page.goto(f.url()) + await waitForHydration_(page) + }) + } + + test.describe('dev', () => { + const f = useFixture({ root, mode: 'dev' }) + defineSsrThenableTest(f) + }) + + test.describe('build', () => { + const f = useFixture({ root, mode: 'build' }) + defineSsrThenableTest(f) + }) +}) diff --git a/packages/plugin-rsc/examples/basic/src/framework/entry.ssr.tsx b/packages/plugin-rsc/examples/basic/src/framework/entry.ssr.tsx index 1918f834b..982dacf16 100644 --- a/packages/plugin-rsc/examples/basic/src/framework/entry.ssr.tsx +++ b/packages/plugin-rsc/examples/basic/src/framework/entry.ssr.tsx @@ -24,7 +24,11 @@ export async function renderHTML( // deserialization needs to be kicked off inside ReactDOMServer context // for ReactDomServer preinit/preloading to work payload ??= ReactClient.createFromReadableStream(rscStream1) - return React.use(payload).root + return {React.use(payload).root} + } + + function FixSsrThenable(props: React.PropsWithChildren) { + return props.children } // render html (traditional SSR) diff --git a/packages/plugin-rsc/examples/starter/src/framework/entry.ssr.tsx b/packages/plugin-rsc/examples/starter/src/framework/entry.ssr.tsx index 0fd5e92f3..d4944bc5d 100644 --- a/packages/plugin-rsc/examples/starter/src/framework/entry.ssr.tsx +++ b/packages/plugin-rsc/examples/starter/src/framework/entry.ssr.tsx @@ -19,12 +19,21 @@ export async function renderHTML( const [rscStream1, rscStream2] = rscStream.tee() // deserialize RSC stream back to React VDOM - let payload: Promise + let payload: Promise | undefined function SsrRoot() { // deserialization needs to be kicked off inside ReactDOMServer context // for ReactDomServer preinit/preloading to work payload ??= ReactClient.createFromReadableStream(rscStream1) - return React.use(payload).root + return {React.use(payload).root} + } + + // Add an empty component in between `SsrRoot` and user `root` to avoid React SSR bugs. + // SsrRoot (use) + // => FixSsrThenable + // => root (which potentially has `lazy` + `use`) + // https://github.com/facebook/react/issues/33937#issuecomment-3091349011 + function FixSsrThenable(props: React.PropsWithChildren) { + return props.children } // render html (traditional SSR) From b9efa3fb356f687d25dce370f9f756cf370280dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0?= Date: Tue, 22 Jul 2025 11:54:37 +0900 Subject: [PATCH 117/313] refactor!: bump required node version to 20.19+, 22.12+ and drop CJS build (#583) --- .github/workflows/ci.yml | 5 +---- package.json | 2 +- packages/plugin-react-oxc/CHANGELOG.md | 4 ++++ packages/plugin-react-oxc/package.json | 3 +-- packages/plugin-react-oxc/tsconfig.json | 4 ++-- packages/plugin-react-oxc/tsdown.config.ts | 1 + packages/plugin-react-swc/CHANGELOG.md | 4 ++++ packages/plugin-react-swc/package.json | 3 +++ packages/plugin-react-swc/src/index.ts | 9 +++++++++ packages/plugin-react-swc/tsdown.config.ts | 23 +--------------------- packages/plugin-react/CHANGELOG.md | 4 ++++ packages/plugin-react/package.json | 12 ++--------- packages/plugin-react/src/index.ts | 9 +++++++++ packages/plugin-react/tsconfig.json | 4 ++-- packages/plugin-react/tsdown.config.ts | 14 +------------ playground/tsconfig.json | 6 +++--- 16 files changed, 48 insertions(+), 59 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 013b70b73..c395dddec 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,7 +29,7 @@ jobs: strategy: matrix: os: [ubuntu-latest] - node_version: [18, 20, 22, 24] + node_version: [20, 22, 24] include: # Active LTS + other OS - os: macos-latest @@ -81,9 +81,6 @@ jobs: # does not need to explicitly set chromium after https://github.com/microsoft/playwright/issues/14862 is solved run: pnpm playwright install chromium - - if: matrix.node_version == '18' - run: pnpm i -D vite@6.3.5 -w - - name: Build run: pnpm run build diff --git a/package.json b/package.json index b51a42923..a78df8171 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "private": true, "type": "module", "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^20.19.0 || >=22.12.0" }, "packageManager": "pnpm@10.13.1", "homepage": "https://github.com/vitejs/vite-plugin-react/", diff --git a/packages/plugin-react-oxc/CHANGELOG.md b/packages/plugin-react-oxc/CHANGELOG.md index 48c74c811..f10da0efa 100644 --- a/packages/plugin-react-oxc/CHANGELOG.md +++ b/packages/plugin-react-oxc/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Require Node 20.19+, 22.12+ + +This plugin now requires Node 20.19+ or 22.12+. + ## 0.3.0 (2025-07-18) ### Add HMR support for compound components ([#518](https://github.com/vitejs/vite-plugin-react/pull/518)) diff --git a/packages/plugin-react-oxc/package.json b/packages/plugin-react-oxc/package.json index 5b2f5b1af..693366005 100644 --- a/packages/plugin-react-oxc/package.json +++ b/packages/plugin-react-oxc/package.json @@ -20,7 +20,6 @@ "dist" ], "type": "module", - "types": "./dist/index.d.ts", "exports": "./dist/index.js", "scripts": { "dev": "tsdown --watch", @@ -28,7 +27,7 @@ "prepublishOnly": "npm run build" }, "engines": { - "node": ">=20.0.0" + "node": "^20.19.0 || >=22.12.0" }, "repository": { "type": "git", diff --git a/packages/plugin-react-oxc/tsconfig.json b/packages/plugin-react-oxc/tsconfig.json index 1d2f67860..70c7eacff 100644 --- a/packages/plugin-react-oxc/tsconfig.json +++ b/packages/plugin-react-oxc/tsconfig.json @@ -2,8 +2,8 @@ "include": ["src"], "compilerOptions": { "outDir": "dist", - "target": "ES2020", - "module": "ES2020", + "target": "es2023", + "module": "preserve", "moduleResolution": "bundler", "strict": true, "declaration": true, diff --git a/packages/plugin-react-oxc/tsdown.config.ts b/packages/plugin-react-oxc/tsdown.config.ts index 1f9c7eb25..3e38aa5d7 100644 --- a/packages/plugin-react-oxc/tsdown.config.ts +++ b/packages/plugin-react-oxc/tsdown.config.ts @@ -2,6 +2,7 @@ import { defineConfig } from 'tsdown' export default defineConfig({ entry: 'src/index.ts', + dts: true, copy: [ { from: 'node_modules/@vitejs/react-common/refresh-runtime.js', diff --git a/packages/plugin-react-swc/CHANGELOG.md b/packages/plugin-react-swc/CHANGELOG.md index 7898a2524..629e79cfd 100644 --- a/packages/plugin-react-swc/CHANGELOG.md +++ b/packages/plugin-react-swc/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Require Node 20.19+, 22.12+ + +This plugin now requires Node 20.19+ or 22.12+. + ## 3.11.0 (2025-07-18) ### Add HMR support for compound components ([#518](https://github.com/vitejs/vite-plugin-react/pull/518)) diff --git a/packages/plugin-react-swc/package.json b/packages/plugin-react-swc/package.json index 255673c77..1cc53b2b0 100644 --- a/packages/plugin-react-swc/package.json +++ b/packages/plugin-react-swc/package.json @@ -19,6 +19,9 @@ "build": "tsdown", "test": "playwright test" }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, "repository": { "type": "git", "url": "git+https://github.com/vitejs/vite-plugin-react.git", diff --git a/packages/plugin-react-swc/src/index.ts b/packages/plugin-react-swc/src/index.ts index 49d34920d..432f8fbeb 100644 --- a/packages/plugin-react-swc/src/index.ts +++ b/packages/plugin-react-swc/src/index.ts @@ -292,3 +292,12 @@ const transformWithOptions = async ( } export default react + +// Compat for require +function pluginForCjs(this: unknown, options: Options): Plugin[] { + return react.call(this, options) +} +Object.assign(pluginForCjs, { + default: pluginForCjs, +}) +export { pluginForCjs as 'module.exports' } diff --git a/packages/plugin-react-swc/tsdown.config.ts b/packages/plugin-react-swc/tsdown.config.ts index 8220e365c..dea2c33a0 100644 --- a/packages/plugin-react-swc/tsdown.config.ts +++ b/packages/plugin-react-swc/tsdown.config.ts @@ -4,7 +4,6 @@ import packageJSON from './package.json' with { type: 'json' } export default defineConfig({ entry: 'src/index.ts', - format: ['esm', 'cjs'], dts: true, tsconfig: './tsconfig.src.json', // https://github.com/sxzz/rolldown-plugin-dts/issues/55 copy: [ @@ -21,18 +20,6 @@ export default defineConfig({ to: 'dist/README.md', }, ], - outputOptions(outputOpts, format) { - if (format === 'cjs') { - outputOpts.footer = (chunk) => { - // don't append to dts files - if (chunk.fileName.endsWith('.cjs')) { - return 'module.exports.default = module.exports' - } - return '' - } - } - return outputOpts - }, onSuccess() { writeFileSync( 'dist/package.json', @@ -46,15 +33,7 @@ export default defineConfig({ key !== 'private', ), ), - main: 'index.cjs', - types: 'index.d.ts', - module: 'index.js', - exports: { - '.': { - require: './index.cjs', - import: './index.js', - }, - }, + exports: './index.js', }, null, 2, diff --git a/packages/plugin-react/CHANGELOG.md b/packages/plugin-react/CHANGELOG.md index 4c764e635..63f84fbdf 100644 --- a/packages/plugin-react/CHANGELOG.md +++ b/packages/plugin-react/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Require Node 20.19+, 22.12+ + +This plugin now requires Node 20.19+ or 22.12+. + ## 4.7.0 (2025-07-18) ### Add HMR support for compound components ([#518](https://github.com/vitejs/vite-plugin-react/pull/518)) diff --git a/packages/plugin-react/package.json b/packages/plugin-react/package.json index 7ff59d14e..35b50c43e 100644 --- a/packages/plugin-react/package.json +++ b/packages/plugin-react/package.json @@ -20,15 +20,7 @@ "dist" ], "type": "module", - "main": "./dist/index.cjs", - "module": "./dist/index.js", - "types": "./dist/index.d.ts", - "exports": { - ".": { - "import": "./dist/index.js", - "require": "./dist/index.cjs" - } - }, + "exports": "./dist/index.js", "scripts": { "dev": "tsdown --watch", "build": "tsdown", @@ -36,7 +28,7 @@ "test-unit": "vitest run" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^20.19.0 || >=22.12.0" }, "repository": { "type": "git", diff --git a/packages/plugin-react/src/index.ts b/packages/plugin-react/src/index.ts index 760f03ba9..ff31bd450 100644 --- a/packages/plugin-react/src/index.ts +++ b/packages/plugin-react/src/index.ts @@ -398,6 +398,15 @@ export default function viteReact(opts: Options = {}): Plugin[] { viteReact.preambleCode = preambleCode +// Compat for require +function viteReactForCjs(this: unknown, options: Options): Plugin[] { + return viteReact.call(this, options) +} +Object.assign(viteReactForCjs, { + default: viteReactForCjs, +}) +export { viteReactForCjs as 'module.exports' } + function canSkipBabel( plugins: ReactBabelOptions['plugins'], babelOptions: ReactBabelOptions, diff --git a/packages/plugin-react/tsconfig.json b/packages/plugin-react/tsconfig.json index 1d2f67860..70c7eacff 100644 --- a/packages/plugin-react/tsconfig.json +++ b/packages/plugin-react/tsconfig.json @@ -2,8 +2,8 @@ "include": ["src"], "compilerOptions": { "outDir": "dist", - "target": "ES2020", - "module": "ES2020", + "target": "es2023", + "module": "preserve", "moduleResolution": "bundler", "strict": true, "declaration": true, diff --git a/packages/plugin-react/tsdown.config.ts b/packages/plugin-react/tsdown.config.ts index f816d7ae2..3e38aa5d7 100644 --- a/packages/plugin-react/tsdown.config.ts +++ b/packages/plugin-react/tsdown.config.ts @@ -2,23 +2,11 @@ import { defineConfig } from 'tsdown' export default defineConfig({ entry: 'src/index.ts', - format: ['esm', 'cjs'], + dts: true, copy: [ { from: 'node_modules/@vitejs/react-common/refresh-runtime.js', to: 'dist/refresh-runtime.js', }, ], - outputOptions(outputOpts, format) { - if (format === 'cjs') { - outputOpts.footer = (chunk) => { - // don't append to dts files - if (chunk.fileName.endsWith('.cjs')) { - return 'module.exports.default = module.exports' - } - return '' - } - } - return outputOpts - }, }) diff --git a/playground/tsconfig.json b/playground/tsconfig.json index b33cf555e..d6e393de0 100644 --- a/playground/tsconfig.json +++ b/playground/tsconfig.json @@ -2,14 +2,14 @@ "include": ["*.ts", "**/__tests__/*.ts", "**/vite.config.ts"], "exclude": ["**/dist/**"], "compilerOptions": { - "target": "ES2020", - "module": "ESNext", + "target": "ES2023", + "module": "preserve", "outDir": "dist", "baseUrl": ".", "allowJs": true, "esModuleInterop": true, "resolveJsonModule": true, - "moduleResolution": "Node", + "moduleResolution": "bundler", "skipLibCheck": true, "noEmit": true, "noUnusedLocals": true, From 005f16e6e9ac5dad01ed8cb029cc586f8f60c27a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0?= Date: Tue, 22 Jul 2025 11:55:33 +0900 Subject: [PATCH 118/313] refactor!: remove old `babel-plugin-react-compiler` support (#584) --- packages/plugin-react/CHANGELOG.md | 4 ++++ packages/plugin-react/src/index.ts | 3 --- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/plugin-react/CHANGELOG.md b/packages/plugin-react/CHANGELOG.md index 63f84fbdf..7c45fca58 100644 --- a/packages/plugin-react/CHANGELOG.md +++ b/packages/plugin-react/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Remove old `babel-plugin-react-compiler` support that requires `runtimeModule` option + +`runtimeModule` option is no longer needed in newer `babel-plugin-react-compiler` versions. Make sure to use a newer version of `babel-plugin-react-compiler` that supports `target` option. + ### Require Node 20.19+, 22.12+ This plugin now requires Node 20.19+ or 22.12+. diff --git a/packages/plugin-react/src/index.ts b/packages/plugin-react/src/index.ts index ff31bd450..88ebe367f 100644 --- a/packages/plugin-react/src/index.ts +++ b/packages/plugin-react/src/index.ts @@ -471,9 +471,6 @@ function getReactCompilerRuntimeModule( if (Array.isArray(plugin)) { if (plugin[1]?.target === '17' || plugin[1]?.target === '18') { moduleName = 'react-compiler-runtime' - } else if (typeof plugin[1]?.runtimeModule === 'string') { - // backward compatibility from (#374), can be removed in next major - moduleName = plugin[1]?.runtimeModule } } return moduleName From cadd7d22a772b7442cd57ab428592efba532e41a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0?= Date: Tue, 22 Jul 2025 11:58:35 +0900 Subject: [PATCH 119/313] fix!: remove `resolve.dedupe` (#586) --- packages/plugin-react/CHANGELOG.md | 6 ++++++ packages/plugin-react/src/index.ts | 3 --- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/plugin-react/CHANGELOG.md b/packages/plugin-react/CHANGELOG.md index 7c45fca58..7ee10b3de 100644 --- a/packages/plugin-react/CHANGELOG.md +++ b/packages/plugin-react/CHANGELOG.md @@ -2,6 +2,12 @@ ## Unreleased +### `react` and `react-dom` is no longer added to [`resolve.dedupe`](https://vite.dev/config/#resolve-dedupe) automatically + +Adding values to `resolve.dedupe` forces Vite to resolve them differently from how Node.js does, which can be confusing and may not be expected. This plugin no longer adds `react` and `react-dom` to `resolve.dedupe` automatically. + +If you encounter errors after upgrading, check your package.json for version mismatches in `dependencies` or `devDependencies`, as well as your package manager’s configuration. If you prefer the previous behavior, you can manually add `react` and `react-dom` to `resolve.dedupe`. + ### Remove old `babel-plugin-react-compiler` support that requires `runtimeModule` option `runtimeModule` option is no longer needed in newer `babel-plugin-react-compiler` versions. Make sure to use a newer version of `babel-plugin-react-compiler` that supports `target` option. diff --git a/packages/plugin-react/src/index.ts b/packages/plugin-react/src/index.ts index 88ebe367f..eecd32ea2 100644 --- a/packages/plugin-react/src/index.ts +++ b/packages/plugin-react/src/index.ts @@ -358,9 +358,6 @@ export default function viteReact(opts: Options = {}): Plugin[] { optimizeDeps: { include: dependencies, }, - resolve: { - dedupe: ['react', 'react-dom'], - }, }), resolveId: { filter: { id: exactRegex(runtimePublicPath) }, From e8fa2d0b4cb6e1dd3132fe8b7f45529a74d9be03 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Tue, 22 Jul 2025 12:14:34 +0900 Subject: [PATCH 120/313] test(rsc): test build with `NODE_ENV=development` and vice versa (#606) --- packages/plugin-rsc/e2e/basic.test.ts | 8 ++++- packages/plugin-rsc/e2e/starter.test.ts | 48 +++++++++++++++++++++++-- 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/packages/plugin-rsc/e2e/basic.test.ts b/packages/plugin-rsc/e2e/basic.test.ts index 763cd379a..5a0464a09 100644 --- a/packages/plugin-rsc/e2e/basic.test.ts +++ b/packages/plugin-rsc/e2e/basic.test.ts @@ -2,7 +2,12 @@ import { createHash } from 'node:crypto' import { readFileSync } from 'node:fs' import { type Page, expect, test } from '@playwright/test' import { type Fixture, setupIsolatedFixture, useFixture } from './fixture' -import { expectNoReload, testNoJs, waitForHydration } from './helper' +import { + expectNoPageError, + expectNoReload, + testNoJs, + waitForHydration, +} from './helper' import path from 'node:path' import os from 'node:os' @@ -73,6 +78,7 @@ test.describe(() => { function defineTest(f: Fixture) { test('basic', async ({ page }) => { + using _ = expectNoPageError(page) await page.goto(f.url()) await waitForHydration(page) }) diff --git a/packages/plugin-rsc/e2e/starter.test.ts b/packages/plugin-rsc/e2e/starter.test.ts index 8b1958471..ec5b3c42b 100644 --- a/packages/plugin-rsc/e2e/starter.test.ts +++ b/packages/plugin-rsc/e2e/starter.test.ts @@ -1,6 +1,7 @@ import { expect, test } from '@playwright/test' import { setupInlineFixture, type Fixture, useFixture } from './fixture' import { + expectNoPageError, expectNoReload, testNoJs, waitForHydration as waitForHydration_, @@ -42,6 +43,48 @@ test.describe('build-no-ssr', () => { }) }) +test.describe('dev-production', () => { + const f = useFixture({ + root: 'examples/starter', + mode: 'dev', + cliOptions: { + env: { NODE_ENV: 'production' }, + }, + }) + defineTest(f, 'dev-production') + + test('verify production', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration_(page) + const res = await page.request.get(f.url('src/client.tsx')) + expect(await res.text()).not.toContain('jsxDEV') + }) +}) + +test.describe('build-development', () => { + const f = useFixture({ + root: 'examples/starter', + mode: 'build', + cliOptions: { + env: { NODE_ENV: 'development' }, + }, + }) + defineTest(f) + + test('verify development', async ({ page }) => { + let output!: string + page.on('response', async (response) => { + if (response.url().match(/\/assets\/client-[\w-]+\.js$/)) { + output = await response.text() + } + }) + await page.goto(f.url()) + await waitForHydration_(page) + console.log({ output }) + expect(output).toContain('jsxDEV') + }) +}) + test.describe(() => { const root = 'examples/e2e/temp/react-compiler' @@ -203,11 +246,12 @@ test.describe(() => { }) }) -function defineTest(f: Fixture, variant?: 'no-ssr') { +function defineTest(f: Fixture, variant?: 'no-ssr' | 'dev-production') { const waitForHydration: typeof waitForHydration_ = (page) => waitForHydration_(page, variant === 'no-ssr' ? '#root' : 'body') test('basic', async ({ page }) => { + using _ = expectNoPageError(page) await page.goto(f.url()) await waitForHydration(page) }) @@ -242,7 +286,7 @@ function defineTest(f: Fixture, variant?: 'no-ssr') { }) test('client hmr', async ({ page }) => { - test.skip(f.mode === 'build') + test.skip(f.mode === 'build' || variant === 'dev-production') await page.goto(f.url()) await waitForHydration(page) From 2a7ff5c93e600b06aafc7ce1a6d8a11c2ad4cf2e Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Tue, 22 Jul 2025 12:17:54 +0900 Subject: [PATCH 121/313] chore(rsc): remove console.log (#607) --- packages/plugin-rsc/e2e/starter.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/plugin-rsc/e2e/starter.test.ts b/packages/plugin-rsc/e2e/starter.test.ts index ec5b3c42b..86752aa64 100644 --- a/packages/plugin-rsc/e2e/starter.test.ts +++ b/packages/plugin-rsc/e2e/starter.test.ts @@ -80,7 +80,6 @@ test.describe('build-development', () => { }) await page.goto(f.url()) await waitForHydration_(page) - console.log({ output }) expect(output).toContain('jsxDEV') }) }) From 9ce3b22e4bc7db28f549b9c9b9195d2bd82ff736 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 23 Jul 2025 08:53:57 +0900 Subject: [PATCH 122/313] fix(deps): update all non-major dependencies (#593) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Hiroshi Ogawa --- package.json | 6 +- packages/plugin-react-oxc/package.json | 4 +- packages/plugin-react-swc/package.json | 6 +- packages/plugin-react/package.json | 6 +- .../plugin-rsc/examples/basic/package.json | 4 +- .../plugin-rsc/examples/no-ssr/package.json | 2 +- .../examples/react-router/cf/vite.config.ts | 12 - .../examples/react-router/package.json | 6 +- .../examples/starter-cf-single/package.json | 2 +- .../examples/starter-cf-single/vite.config.ts | 2 - .../plugin-rsc/examples/starter/package.json | 2 +- packages/plugin-rsc/package.json | 4 +- pnpm-lock.yaml | 677 +++++++++--------- pnpm-workspace.yaml | 2 +- 14 files changed, 372 insertions(+), 363 deletions(-) diff --git a/package.json b/package.json index a78df8171..eafb1254d 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "devDependencies": { "@eslint/js": "^9.31.0", "@types/fs-extra": "^11.0.4", - "@types/node": "^22.16.3", + "@types/node": "^22.16.5", "@vitejs/release-scripts": "^1.6.0", "eslint": "^9.31.0", "eslint-plugin-import-x": "^4.16.1", @@ -50,8 +50,8 @@ "simple-git-hooks": "^2.13.0", "tsx": "^4.20.3", "typescript": "^5.8.3", - "typescript-eslint": "^8.37.0", - "vite": "^7.0.4", + "typescript-eslint": "^8.38.0", + "vite": "^7.0.5", "vitest": "^3.2.4" }, "simple-git-hooks": { diff --git a/packages/plugin-react-oxc/package.json b/packages/plugin-react-oxc/package.json index 693366005..3428fe951 100644 --- a/packages/plugin-react-oxc/package.json +++ b/packages/plugin-react-oxc/package.json @@ -43,11 +43,11 @@ }, "devDependencies": { "@vitejs/react-common": "workspace:*", - "tsdown": "^0.12.9", + "tsdown": "^0.13.0", "unbuild": "^3.5.0", "vite": "catalog:rolldown-vite" }, "dependencies": { - "@rolldown/pluginutils": "1.0.0-beta.27" + "@rolldown/pluginutils": "1.0.0-beta.29" } } diff --git a/packages/plugin-react-swc/package.json b/packages/plugin-react-swc/package.json index 1cc53b2b0..1cfaa5678 100644 --- a/packages/plugin-react-swc/package.json +++ b/packages/plugin-react-swc/package.json @@ -32,7 +32,7 @@ }, "homepage": "https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react-swc#readme", "dependencies": { - "@rolldown/pluginutils": "1.0.0-beta.27", + "@rolldown/pluginutils": "1.0.0-beta.29", "@swc/core": "^1.12.11" }, "peerDependencies": { @@ -41,11 +41,11 @@ "devDependencies": { "@playwright/test": "^1.54.1", "@types/fs-extra": "^11.0.4", - "@types/node": "^22.16.3", + "@types/node": "^22.16.5", "@vitejs/react-common": "workspace:*", "fs-extra": "^11.3.0", "prettier": "^3.0.3", - "tsdown": "^0.12.9", + "tsdown": "^0.13.0", "typescript": "^5.8.3" } } diff --git a/packages/plugin-react/package.json b/packages/plugin-react/package.json index 35b50c43e..1ce0d7ca2 100644 --- a/packages/plugin-react/package.json +++ b/packages/plugin-react/package.json @@ -43,7 +43,7 @@ "@babel/core": "^7.28.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", - "@rolldown/pluginutils": "1.0.0-beta.27", + "@rolldown/pluginutils": "1.0.0-beta.29", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, @@ -55,8 +55,8 @@ "babel-plugin-react-compiler": "19.1.0-rc.2", "react": "^19.1.0", "react-dom": "^19.1.0", - "rolldown": "1.0.0-beta.27", - "tsdown": "^0.12.9", + "rolldown": "1.0.0-beta.29", + "tsdown": "^0.13.0", "vitest": "^3.2.4" } } diff --git a/packages/plugin-rsc/examples/basic/package.json b/packages/plugin-rsc/examples/basic/package.json index ff1648a7f..43d95645d 100644 --- a/packages/plugin-rsc/examples/basic/package.json +++ b/packages/plugin-rsc/examples/basic/package.json @@ -27,8 +27,8 @@ "@vitejs/test-dep-server-in-server": "file:./test-dep/server-in-server", "rsc-html-stream": "^0.0.7", "tailwindcss": "^4.1.11", - "vite": "^7.0.4", + "vite": "^7.0.5", "vite-plugin-inspect": "^11.3.0", - "wrangler": "^4.24.3" + "wrangler": "^4.25.1" } } diff --git a/packages/plugin-rsc/examples/no-ssr/package.json b/packages/plugin-rsc/examples/no-ssr/package.json index fef0a5e46..113bf7533 100644 --- a/packages/plugin-rsc/examples/no-ssr/package.json +++ b/packages/plugin-rsc/examples/no-ssr/package.json @@ -18,6 +18,6 @@ "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "latest", - "vite": "^7.0.4" + "vite": "^7.0.5" } } diff --git a/packages/plugin-rsc/examples/react-router/cf/vite.config.ts b/packages/plugin-rsc/examples/react-router/cf/vite.config.ts index ee9f9bcf3..8cf7a02f5 100644 --- a/packages/plugin-rsc/examples/react-router/cf/vite.config.ts +++ b/packages/plugin-rsc/examples/react-router/cf/vite.config.ts @@ -48,24 +48,12 @@ export default defineConfig({ include: ['react-router > cookie', 'react-router > set-cookie-parser'], exclude: ['react-router'], }, - build: { - rollupOptions: { - // @ts-ignore rolldown - platform: 'neutral', - }, - }, }, rsc: { optimizeDeps: { include: ['react-router > cookie', 'react-router > set-cookie-parser'], exclude: ['react-router'], }, - build: { - rollupOptions: { - // @ts-ignore rolldown - platform: 'neutral', - }, - }, }, }, }) diff --git a/packages/plugin-rsc/examples/react-router/package.json b/packages/plugin-rsc/examples/react-router/package.json index e5b66dd17..d49b4cab8 100644 --- a/packages/plugin-rsc/examples/react-router/package.json +++ b/packages/plugin-rsc/examples/react-router/package.json @@ -19,7 +19,7 @@ "react-router": "0.0.0-experimental-23decd7bc" }, "devDependencies": { - "@cloudflare/vite-plugin": "^1.9.4", + "@cloudflare/vite-plugin": "^1.10.0", "@react-router/dev": "0.0.0-experimental-23decd7bc", "@tailwindcss/typography": "^0.5.16", "@tailwindcss/vite": "^4.1.11", @@ -27,8 +27,8 @@ "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "latest", "tailwindcss": "^4.1.11", - "vite": "^7.0.4", + "vite": "^7.0.5", "vite-plugin-inspect": "^11.3.0", - "wrangler": "^4.24.3" + "wrangler": "^4.25.1" } } diff --git a/packages/plugin-rsc/examples/starter-cf-single/package.json b/packages/plugin-rsc/examples/starter-cf-single/package.json index a2fbd24ea..776754b67 100644 --- a/packages/plugin-rsc/examples/starter-cf-single/package.json +++ b/packages/plugin-rsc/examples/starter-cf-single/package.json @@ -16,7 +16,7 @@ "react-dom": "^19.1.0" }, "devDependencies": { - "@cloudflare/vite-plugin": "^1.9.4", + "@cloudflare/vite-plugin": "^1.10.0", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "latest" diff --git a/packages/plugin-rsc/examples/starter-cf-single/vite.config.ts b/packages/plugin-rsc/examples/starter-cf-single/vite.config.ts index 9617078a7..e93d3b493 100644 --- a/packages/plugin-rsc/examples/starter-cf-single/vite.config.ts +++ b/packages/plugin-rsc/examples/starter-cf-single/vite.config.ts @@ -31,8 +31,6 @@ export default defineConfig({ rollupOptions: { // ensure `default` export only in cloudflare entry output preserveEntrySignatures: 'exports-only', - // @ts-ignore rolldown - platform: 'neutral', }, }, optimizeDeps: { diff --git a/packages/plugin-rsc/examples/starter/package.json b/packages/plugin-rsc/examples/starter/package.json index 059e49fee..c2ff2950f 100644 --- a/packages/plugin-rsc/examples/starter/package.json +++ b/packages/plugin-rsc/examples/starter/package.json @@ -19,7 +19,7 @@ "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "latest", "rsc-html-stream": "^0.0.7", - "vite": "^7.0.4", + "vite": "^7.0.5", "vite-plugin-inspect": "^11.3.0" } } diff --git a/packages/plugin-rsc/package.json b/packages/plugin-rsc/package.json index 038571dd6..68370d293 100644 --- a/packages/plugin-rsc/package.json +++ b/packages/plugin-rsc/package.json @@ -51,7 +51,7 @@ "@playwright/test": "^1.54.1", "@tsconfig/strictest": "^2.0.5", "@types/estree": "^1.0.8", - "@types/node": "^22.16.3", + "@types/node": "^22.16.5", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "workspace:*", @@ -60,7 +60,7 @@ "react-server-dom-webpack": "^19.1.0", "rsc-html-stream": "^0.0.7", "tinyexec": "^1.0.1", - "tsdown": "^0.12.9" + "tsdown": "^0.13.0" }, "peerDependencies": { "react": "*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7be516b19..8bd988406 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,8 +7,8 @@ settings: catalogs: rolldown-vite: vite: - specifier: npm:rolldown-vite@^7.0.9 - version: 7.0.9 + specifier: npm:rolldown-vite@^7.0.10 + version: 7.0.10 overrides: '@types/estree': ^1.0.8 @@ -24,8 +24,8 @@ importers: specifier: ^11.0.4 version: 11.0.4 '@types/node': - specifier: ^22.16.3 - version: 22.16.3 + specifier: ^22.16.5 + version: 22.16.5 '@vitejs/release-scripts': specifier: ^1.6.0 version: 1.6.0(conventional-commits-filter@5.0.0) @@ -34,7 +34,7 @@ importers: version: 9.31.0(jiti@2.4.2) eslint-plugin-import-x: specifier: ^4.16.1 - version: 4.16.1(@typescript-eslint/utils@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2)) + version: 4.16.1(@typescript-eslint/utils@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2)) eslint-plugin-n: specifier: ^17.21.0 version: 17.21.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) @@ -69,14 +69,14 @@ importers: specifier: ^5.8.3 version: 5.8.3 typescript-eslint: - specifier: ^8.37.0 - version: 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + specifier: ^8.38.0 + version: 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) vite: - specifier: ^7.0.4 - version: 7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + specifier: ^7.0.5 + version: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) packages/common: {} @@ -92,8 +92,8 @@ importers: specifier: ^7.27.1 version: 7.27.1(@babel/core@7.28.0) '@rolldown/pluginutils': - specifier: 1.0.0-beta.27 - version: 1.0.0-beta.27 + specifier: 1.0.0-beta.29 + version: 1.0.0-beta.29 '@types/babel__core': specifier: ^7.20.5 version: 7.20.5 @@ -114,39 +114,39 @@ importers: specifier: ^19.1.0 version: 19.1.0(react@19.1.0) rolldown: - specifier: 1.0.0-beta.27 - version: 1.0.0-beta.27 + specifier: 1.0.0-beta.29 + version: 1.0.0-beta.29 tsdown: - specifier: ^0.12.9 - version: 0.12.9(publint@0.3.12)(typescript@5.8.3) + specifier: ^0.13.0 + version: 0.13.0(publint@0.3.12)(typescript@5.8.3) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) packages/plugin-react-oxc: dependencies: '@rolldown/pluginutils': - specifier: 1.0.0-beta.27 - version: 1.0.0-beta.27 + specifier: 1.0.0-beta.29 + version: 1.0.0-beta.29 devDependencies: '@vitejs/react-common': specifier: workspace:* version: link:../common tsdown: - specifier: ^0.12.9 - version: 0.12.9(publint@0.3.12)(typescript@5.8.3) + specifier: ^0.13.0 + version: 0.13.0(publint@0.3.12)(typescript@5.8.3) unbuild: specifier: ^3.5.0 version: 3.5.0(typescript@5.8.3) vite: specifier: catalog:rolldown-vite - version: rolldown-vite@7.0.9(@types/node@22.16.3)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1) + version: rolldown-vite@7.0.10(@types/node@22.16.5)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1) packages/plugin-react-swc: dependencies: '@rolldown/pluginutils': - specifier: 1.0.0-beta.27 - version: 1.0.0-beta.27 + specifier: 1.0.0-beta.29 + version: 1.0.0-beta.29 '@swc/core': specifier: ^1.12.11 version: 1.12.11 @@ -158,8 +158,8 @@ importers: specifier: ^11.0.4 version: 11.0.4 '@types/node': - specifier: ^22.16.3 - version: 22.16.3 + specifier: ^22.16.5 + version: 22.16.5 '@vitejs/react-common': specifier: workspace:* version: link:../common @@ -170,8 +170,8 @@ importers: specifier: ^3.0.3 version: 3.1.0 tsdown: - specifier: ^0.12.9 - version: 0.12.9(publint@0.3.12)(typescript@5.8.3) + specifier: ^0.13.0 + version: 0.13.0(publint@0.3.12)(typescript@5.8.3) typescript: specifier: ^5.8.3 version: 5.8.3 @@ -461,7 +461,7 @@ importers: version: 3.1.0 vitefu: specifier: ^1.1.1 - version: 1.1.1(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 1.1.1(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) devDependencies: '@hiogawa/utils': specifier: ^1.7.0 @@ -476,8 +476,8 @@ importers: specifier: ^1.0.8 version: 1.0.8 '@types/node': - specifier: ^22.16.3 - version: 22.16.3 + specifier: ^22.16.5 + version: 22.16.5 '@types/react': specifier: ^19.1.8 version: 19.1.8 @@ -503,8 +503,8 @@ importers: specifier: ^1.0.1 version: 1.0.1 tsdown: - specifier: ^0.12.9 - version: 0.12.9(publint@0.3.12)(typescript@5.8.3) + specifier: ^0.13.0 + version: 0.13.0(publint@0.3.12)(typescript@5.8.3) packages/plugin-rsc/examples/basic: dependencies: @@ -520,7 +520,7 @@ importers: devDependencies: '@tailwindcss/vite': specifier: ^4.1.11 - version: 4.1.11(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 4.1.11(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) '@types/react': specifier: ^19.1.8 version: 19.1.8 @@ -549,14 +549,14 @@ importers: specifier: ^4.1.11 version: 4.1.11 vite: - specifier: ^7.0.4 - version: 7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + specifier: ^7.0.5 + version: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vite-plugin-inspect: specifier: ^11.3.0 - version: 11.3.0(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 11.3.0(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) wrangler: - specifier: ^4.24.3 - version: 4.24.3 + specifier: ^4.25.1 + version: 4.25.1 packages/plugin-rsc/examples/e2e: devDependencies: @@ -592,8 +592,8 @@ importers: specifier: latest version: link:../../../plugin-react vite: - specifier: ^7.0.4 - version: 7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + specifier: ^7.0.5 + version: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) packages/plugin-rsc/examples/react-router: dependencies: @@ -611,17 +611,17 @@ importers: version: 0.0.0-experimental-23decd7bc(react-dom@19.1.0(react@19.1.0))(react@19.1.0) devDependencies: '@cloudflare/vite-plugin': - specifier: ^1.9.4 - version: 1.9.4(rollup@4.44.1)(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250709.0)(wrangler@4.24.3) + specifier: ^1.10.0 + version: 1.10.0(rollup@4.44.1)(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250712.0)(wrangler@4.25.1) '@react-router/dev': specifier: 0.0.0-experimental-23decd7bc - version: 0.0.0-experimental-23decd7bc(@types/node@22.16.3)(babel-plugin-macros@3.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(react-router@0.0.0-experimental-23decd7bc(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tsx@4.20.3)(typescript@5.8.3)(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(wrangler@4.24.3)(yaml@2.7.1) + version: 0.0.0-experimental-23decd7bc(@types/node@22.16.5)(babel-plugin-macros@3.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(react-router@0.0.0-experimental-23decd7bc(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tsx@4.20.3)(typescript@5.8.3)(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(wrangler@4.25.1)(yaml@2.7.1) '@tailwindcss/typography': specifier: ^0.5.16 version: 0.5.16(tailwindcss@4.1.11) '@tailwindcss/vite': specifier: ^4.1.11 - version: 4.1.11(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 4.1.11(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) '@types/react': specifier: ^19.1.8 version: 19.1.8 @@ -635,14 +635,14 @@ importers: specifier: ^4.1.11 version: 4.1.11 vite: - specifier: ^7.0.4 - version: 7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + specifier: ^7.0.5 + version: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vite-plugin-inspect: specifier: ^11.3.0 - version: 11.3.0(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 11.3.0(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) wrangler: - specifier: ^4.24.3 - version: 4.24.3 + specifier: ^4.25.1 + version: 4.25.1 packages/plugin-rsc/examples/ssg: dependencies: @@ -670,7 +670,7 @@ importers: version: link:../../../plugin-react vite-plugin-inspect: specifier: ^11.3.0 - version: 11.3.0(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 11.3.0(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) packages/plugin-rsc/examples/starter: dependencies: @@ -697,11 +697,11 @@ importers: specifier: ^0.0.7 version: 0.0.7 vite: - specifier: ^7.0.4 - version: 7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + specifier: ^7.0.5 + version: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vite-plugin-inspect: specifier: ^11.3.0 - version: 11.3.0(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 11.3.0(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) packages/plugin-rsc/examples/starter-cf-single: dependencies: @@ -716,8 +716,8 @@ importers: version: 19.1.0(react@19.1.0) devDependencies: '@cloudflare/vite-plugin': - specifier: ^1.9.4 - version: 1.9.4(rollup@4.44.1)(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250709.0)(wrangler@4.24.3) + specifier: ^1.10.0 + version: 1.10.0(rollup@4.44.1)(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250712.0)(wrangler@4.25.1) '@types/react': specifier: ^19.1.8 version: 19.1.8 @@ -1205,6 +1205,10 @@ packages: resolution: {integrity: sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg==} engines: {node: '>=6.9.0'} + '@babel/types@7.28.1': + resolution: {integrity: sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==} + engines: {node: '>=6.9.0'} + '@cloudflare/kv-asset-handler@0.4.0': resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==} engines: {node: '>=18.0.0'} @@ -1218,38 +1222,38 @@ packages: workerd: optional: true - '@cloudflare/vite-plugin@1.9.4': - resolution: {integrity: sha512-i1sMePamMZs/eR5ennHNICEFEtXWDCbt8j+mSE0EQuMFt0YrqqU9WSCZzUvISyYebnnLfnHZQpq3Y8y4uPz4RQ==} + '@cloudflare/vite-plugin@1.10.0': + resolution: {integrity: sha512-pdlz+GdNmL+8aVz8b8GXRHs33oI0DQpZvWNFyuMeN1MeHq/z+DOLGBU63YZC8S2hkdxC2rQQkNnRtsRCXfloWw==} peerDependencies: vite: ^6.1.0 || ^7.0.0 - wrangler: 4.24.3 + wrangler: ^4.25.1 - '@cloudflare/workerd-darwin-64@1.20250709.0': - resolution: {integrity: sha512-VqwcvnbI8FNCP87ZWNHA3/sAC5U9wMbNnjBG0sHEYzM7B9RPHKYHdVKdBEWhzZXnkQYMK81IHm4CZsK16XxAuQ==} + '@cloudflare/workerd-darwin-64@1.20250712.0': + resolution: {integrity: sha512-M6S6a/LQ0Jb0R+g0XhlYi1adGifvYmxA5mD/i9TuZZgjs2bIm5ELuka/n3SCnI98ltvlx3HahRaHagAtOilsFg==} engines: {node: '>=16'} cpu: [x64] os: [darwin] - '@cloudflare/workerd-darwin-arm64@1.20250709.0': - resolution: {integrity: sha512-A54ttSgXMM4huChPTThhkieOjpDxR+srVOO9zjTHVIyoQxA8zVsku4CcY/GQ95RczMV+yCKVVu/tAME7vwBFuA==} + '@cloudflare/workerd-darwin-arm64@1.20250712.0': + resolution: {integrity: sha512-7sFzn6rvAcnLy7MktFL42dYtzL0Idw/kiUmNf2P3TvsBRoShhLK5ZKhbw+NAhvU8e4pXWm5lkE0XmpieA0zNjw==} engines: {node: '>=16'} cpu: [arm64] os: [darwin] - '@cloudflare/workerd-linux-64@1.20250709.0': - resolution: {integrity: sha512-no4O3OK+VXINIxv99OHJDpIgML2ZssrSvImwLtULzqm+cl4t1PIfXNRUqj89ujTkmad+L9y4G6dBQMPCLnmlGg==} + '@cloudflare/workerd-linux-64@1.20250712.0': + resolution: {integrity: sha512-EFRrGe/bqK7NHtht7vNlbrDpfvH3eRvtJOgsTpEQEysDjVmlK6pVJxSnLy9Hg1zlLY15IfhfGC+K2qisseHGJQ==} engines: {node: '>=16'} cpu: [x64] os: [linux] - '@cloudflare/workerd-linux-arm64@1.20250709.0': - resolution: {integrity: sha512-7cNICk2Qd+m4QGrcmWyAuZJXTHt1ud6isA+dic7Yk42WZmwXhlcUATyvFD9FSQNFcldjuRB4n8JlWEFqZBn+lw==} + '@cloudflare/workerd-linux-arm64@1.20250712.0': + resolution: {integrity: sha512-rG8JUleddhUHQVwpXOYv0VbL0S9kOtR9PNKecgVhFpxEhC8aTeg2HNBBjo8st7IfcUvY8WaW3pD3qdAMZ05UwQ==} engines: {node: '>=16'} cpu: [arm64] os: [linux] - '@cloudflare/workerd-windows-64@1.20250709.0': - resolution: {integrity: sha512-j1AyO8V/62Q23EJplWgzBlRCqo/diXgox58AbDqSqgyzCBAlvUzXQRDBab/FPNG/erRqt7I1zQhahrBhrM0uLA==} + '@cloudflare/workerd-windows-64@1.20250712.0': + resolution: {integrity: sha512-qS8H5RCYwE21Om9wo5/F807ClBJIfknhuLBj16eYxvJcj9JqgAKWi12BGgjyGxHuJJjeoQ63lr4wHAdbFntDDg==} engines: {node: '>=16'} cpu: [x64] os: [win32] @@ -1273,12 +1277,21 @@ packages: '@emnapi/core@1.4.3': resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==} + '@emnapi/core@1.4.5': + resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==} + '@emnapi/runtime@1.4.3': resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} + '@emnapi/runtime@1.4.5': + resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==} + '@emnapi/wasi-threads@1.0.2': resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==} + '@emnapi/wasi-threads@1.0.4': + resolution: {integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==} + '@emotion/babel-plugin@11.13.5': resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} @@ -1984,10 +1997,6 @@ packages: resolution: {integrity: sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@fastify/busboy@2.1.1': - resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} - engines: {node: '>=14'} - '@hiogawa/utils@1.7.0': resolution: {integrity: sha512-ghiEFWBR1NENoHn+lSuW7liicTIzVPN+8Srm5UedCTw43gus0mlse6Wp2lz6GmbOXJ/CalMPp/0Tz2X8tajkAg==} @@ -2168,12 +2177,12 @@ packages: '@mjackson/node-fetch-server@0.7.0': resolution: {integrity: sha512-un8diyEBKU3BTVj3GzlTPA1kIjCkGdD+AMYQy31Gf9JCkfoZzwgJ79GUtHrF2BN3XPNMLpubbzPcxys+a3uZEw==} - '@napi-rs/wasm-runtime@0.2.11': - resolution: {integrity: sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==} - '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} + '@napi-rs/wasm-runtime@1.0.1': + resolution: {integrity: sha512-KVlQ/jgywZpixGCKMNwxStmmbYEMyokZpCf2YuIChhfJA2uqfAKNEM8INz7zzTo55iEXfBhIIs3VqYyqzDLj8g==} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -2198,12 +2207,12 @@ packages: resolution: {integrity: sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - '@oxc-project/runtime@0.77.0': - resolution: {integrity: sha512-cMbHs/DaomWSjxeJ79G10GA5hzJW9A7CZ+/cO+KuPZ7Trf3Rr07qSLauC4Ns8ba4DKVDjd8VSC9nVLpw6jpoGQ==} + '@oxc-project/runtime@0.77.3': + resolution: {integrity: sha512-vsC/ewcGJ7xXnnwZkku7rpPH5Lxb5g4J+V6lD9eBTnRLmXVXM7Qu50y+ozD+UD5IXaSoVOvVMGTT4YSNCz2MQQ==} engines: {node: '>=6.9.0'} - '@oxc-project/types@0.77.0': - resolution: {integrity: sha512-iUQj185VvCPnSba+ltUV5tVDrPX6LeZVtQywnnoGbe4oJ1VKvDKisjGkD/AvVtdm98b/BdsVS35IlJV1m2mBBA==} + '@oxc-project/types@0.77.3': + resolution: {integrity: sha512-5Vh+neJhhxuF0lYCjZXbxjqm2EO6YJ1jG+KuHntrd6VY67OMpYhWq2cZhUhy+xL9qLJVJRaeII7Xj9fciA6v7A==} '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} @@ -2262,78 +2271,78 @@ packages: typescript: optional: true - '@rolldown/binding-android-arm64@1.0.0-beta.27': - resolution: {integrity: sha512-IJL3efUJmvb5MfTEi7bGK4jq3ZFAzVbSy+vmul0DcdrglUd81Tfyy7Zzq2oM0tUgmACG32d8Jz/ykbpbf+3C5A==} + '@rolldown/binding-android-arm64@1.0.0-beta.29': + resolution: {integrity: sha512-pDv7gg59Gdy80eFmMkEqXEaoJi3Y9W/a9T3z9M4t8Ma8aVXNldvSy9UgtlX7AK7DPqF8tULnmIZ2Z3rvGMz/NQ==} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-beta.27': - resolution: {integrity: sha512-TXTiuHbtnHfb0c44vNfWfIyEFJ0BFUf63ip9Z4mj8T2zRcZXQYVger4OuAxnwGNGBgDyHo1VaNBG+Vxn2VrpqQ==} + '@rolldown/binding-darwin-arm64@1.0.0-beta.29': + resolution: {integrity: sha512-fPqR6TfTqbzgKKCQYtcCS+Dms91YcptTbdlwJ13DxOUgMe8LgDIVsLLlEykfm7ijJd5mM4zNw0Hr2CJb6kvQZw==} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-beta.27': - resolution: {integrity: sha512-Jpjflgvbolh+fAaaEajPJQCOpZMawYMbNVzuZp3nidX1B7kMAP7NEKp9CWzthoL2Y8RfD7OApN6bx4+vFurTaw==} + '@rolldown/binding-darwin-x64@1.0.0-beta.29': + resolution: {integrity: sha512-7Z4qosL0xN8i6++txHOEPCVP3/lcGLOvftUJOWATZ5aDkDskwcZDa66BGiJt/K1/DgW4kpRVmnGWUWAORHBbFA==} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-beta.27': - resolution: {integrity: sha512-07ZNlXIunyS1jCTnene7aokkzCZNBUnmnJWu4Nz5X5XQvVHJNjsDhPFJTlNmneSDzA3vGkRNwdECKXiDTH/CqA==} + '@rolldown/binding-freebsd-x64@1.0.0-beta.29': + resolution: {integrity: sha512-0HLTfPW5Glh608s76qgayN/nPsXPchNUumavf7W5nh1eMG6qBsOO7Q1QaK0v4un7qtsn3IA/1Tgq0ZgNc0dbeg==} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.27': - resolution: {integrity: sha512-z74ah00oyKnTUtaIbg34TaIU1PYM8tGE1bK6aUs8OLZ9sWW4g3Xo5A0nit2zyeanmYFvrAUxnt3Bpk+mTZCtlg==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.29': + resolution: {integrity: sha512-QNboxdVTJOZS4zP8kA2+XUwAegejd5QNSH5zVR4neqG2AfbxRcMFzSVRkJHN6yDaaKweD/4sUvXfmef6p/7zsw==} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.27': - resolution: {integrity: sha512-b9oKl/M5OIyAcosS73BmjOZOjvcONV97t2SnKpgwfDX/mjQO3dBgTYyvHMFA6hfhIDW1+2XVQR/k5uzBULFhoA==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.29': + resolution: {integrity: sha512-hzBmOtYdC4369XxN2SNJ3oBlXKWNif3ieWBT+oh/qvAeox4fQR0ngqyh+kIGOufBnP5Zc2rqJf9LzIbJw3Tx/Q==} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.27': - resolution: {integrity: sha512-RmaNSkVmAH8u/r5Q+v4O0zL4HY8pLrvlM5wBoBrb/QHDQgksGKBqhecpg1ERER0Q7gMh/GJUz6JiiD55Q+9UOA==} + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.29': + resolution: {integrity: sha512-6B35GmFJJ4RX88OgubrnUmuJBUgRh6/OTXIpy8m/VUnoc683lufIPo26HW/0LxLgxp2GM7KHr3LOULcVxbqq4Q==} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-ohos@1.0.0-beta.27': - resolution: {integrity: sha512-gq78fI/g0cp1UKFMk53kP/oZAgYOXbaqdadVMuCJc0CoSkDJcpO2YIasRs/QYlE91QWfcHD5RZl9zbf4ksTS/w==} + '@rolldown/binding-linux-arm64-ohos@1.0.0-beta.29': + resolution: {integrity: sha512-z3ru8fUCunQM8q9I7RbDVMT5cxzxVVVBNNKM5/qAQQrdObd1u8g0LR5z0yLtaFWzybwLVdPtJDRcXtLm5tOBFA==} cpu: [arm64] os: [openharmony] - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.27': - resolution: {integrity: sha512-yS/GreJ6BT44dHu1WLigc50S8jZA+pDzzsf8tqRptUTwi5YW7dX3NqcDlc/lXsZqu57aKynLljgClYAm90LEKw==} + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.29': + resolution: {integrity: sha512-n6fs4L7j99MIiI6vKhQDdyScv4/uMAPtIMkB0zGbUX8MKWT1osym1hvWVdlENjnS/Phf0zzhjyOgoFDzdhI1cQ==} cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-musl@1.0.0-beta.27': - resolution: {integrity: sha512-6FV9To1sXewGHY4NaCPeOE5p5o1qfuAjj+m75WVIPw9HEJVsQoC5QiTL5wWVNqSMch4X0eWnQ6WsQolU6sGMIA==} + '@rolldown/binding-linux-x64-musl@1.0.0-beta.29': + resolution: {integrity: sha512-C5hcJgtDN4rp6/WsPTQSDVUWrdnIC//ynMGcUIh1O0anm9KnSy47zKQ5D9EqtlEKvO+2PPqmyUVJ2DTq18nlVA==} cpu: [x64] os: [linux] - '@rolldown/binding-wasm32-wasi@1.0.0-beta.27': - resolution: {integrity: sha512-VcxdhF0PQda9krFJHw4DqUkdAsHWYs/Uz/Kr/zhU8zMFDzmK6OdUgl9emGj9wTzXAEHYkAMDhk+OJBRJvp424g==} + '@rolldown/binding-wasm32-wasi@1.0.0-beta.29': + resolution: {integrity: sha512-lMN1IBItdZFO182Sdus9oVuNDqyIymn/bsR5KwgeGaiqLsrmpQHBSLwkS/nKJO1nzYlpGDRugFSpnrSJ5ZmihQ==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.27': - resolution: {integrity: sha512-3bXSARqSf8jLHrQ1/tw9pX1GwIR9jA6OEsqTgdC0DdpoZ+34sbJXE9Nse3dQ0foGLKBkh4PqDv/rm2Thu9oVBw==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.29': + resolution: {integrity: sha512-0UrXCUAOrbWdyVJskzjtne/4d3YMMhhhpBnob3SeF4jAvbKYqPhCZJ71pP7yUpvbowGXXTnHWpKfitg4Sovmtw==} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.27': - resolution: {integrity: sha512-xPGcKb+W8NIWAf5KApsUIrhiKH5NImTarICge5jQ2m0BBxD31crio4OXy/eYVq5CZkqkqszLQz2fWZcWNmbzlQ==} + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.29': + resolution: {integrity: sha512-YX0OYL1dcB7rPnsndpEa68fytYyZZj1iaWzH7momFB2oBS2lXAe1UrrDWcdLoUXdzPIyzpvtBCiS2XcDgYG7ag==} cpu: [ia32] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.27': - resolution: {integrity: sha512-3y1G8ARpXBAcz4RJM5nzMU6isS/gXZl8SuX8lS2piFOnQMiOp6ajeelnciD+EgG4ej793zvNvr+WZtdnao2yrw==} + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.29': + resolution: {integrity: sha512-azrPWbV+NZiCFNs59AgH9Y6vFKHoAI6T/XtKKsoLxkPyP1LpbdgL5eqRfeWz+GCAUY9qhDOC4hH1GjFG8PrZIg==} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-beta.27': - resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} + '@rolldown/pluginutils@1.0.0-beta.29': + resolution: {integrity: sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q==} '@rollup/plugin-alias@5.1.1': resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} @@ -2799,9 +2808,6 @@ packages: '@tybys/wasm-util@0.10.0': resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==} - '@tybys/wasm-util@0.9.0': - resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} - '@types/acorn@4.0.6': resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} @@ -2856,8 +2862,8 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node@22.16.3': - resolution: {integrity: sha512-sr4Xz74KOUeYadexo1r8imhRtlVXcs+j3XK3TcoiYk7B1t3YRVJgtaD3cwX73NYb71pmVuMLNRhJ9XKdoDB74g==} + '@types/node@22.16.5': + resolution: {integrity: sha512-bJFoMATwIGaxxx8VJPeM8TonI8t579oRvgAuT8zFugJsJZgzqv0Fu8Mhp68iecjzG7cnN3mO2dJQ5uUM2EFrgQ==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -2899,39 +2905,39 @@ packages: '@types/unist@3.0.2': resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} - '@typescript-eslint/eslint-plugin@8.37.0': - resolution: {integrity: sha512-jsuVWeIkb6ggzB+wPCsR4e6loj+rM72ohW6IBn2C+5NCvfUVY8s33iFPySSVXqtm5Hu29Ne/9bnA0JmyLmgenA==} + '@typescript-eslint/eslint-plugin@8.38.0': + resolution: {integrity: sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.37.0 + '@typescript-eslint/parser': ^8.38.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/parser@8.37.0': - resolution: {integrity: sha512-kVIaQE9vrN9RLCQMQ3iyRlVJpTiDUY6woHGb30JDkfJErqrQEmtdWH3gV0PBAfGZgQXoqzXOO0T3K6ioApbbAA==} + '@typescript-eslint/parser@8.38.0': + resolution: {integrity: sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/project-service@8.37.0': - resolution: {integrity: sha512-BIUXYsbkl5A1aJDdYJCBAo8rCEbAvdquQ8AnLb6z5Lp1u3x5PNgSSx9A/zqYc++Xnr/0DVpls8iQ2cJs/izTXA==} + '@typescript-eslint/project-service@8.38.0': + resolution: {integrity: sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/scope-manager@8.37.0': - resolution: {integrity: sha512-0vGq0yiU1gbjKob2q691ybTg9JX6ShiVXAAfm2jGf3q0hdP6/BruaFjL/ManAR/lj05AvYCH+5bbVo0VtzmjOA==} + '@typescript-eslint/scope-manager@8.38.0': + resolution: {integrity: sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.37.0': - resolution: {integrity: sha512-1/YHvAVTimMM9mmlPvTec9NP4bobA1RkDbMydxG8omqwJJLEW/Iy2C4adsAESIXU3WGLXFHSZUU+C9EoFWl4Zg==} + '@typescript-eslint/tsconfig-utils@8.38.0': + resolution: {integrity: sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/type-utils@8.37.0': - resolution: {integrity: sha512-SPkXWIkVZxhgwSwVq9rqj/4VFo7MnWwVaRNznfQDc/xPYHjXnPfLWn+4L6FF1cAz6e7dsqBeMawgl7QjUMj4Ow==} + '@typescript-eslint/type-utils@8.38.0': + resolution: {integrity: sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2941,25 +2947,25 @@ packages: resolution: {integrity: sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.37.0': - resolution: {integrity: sha512-ax0nv7PUF9NOVPs+lmQ7yIE7IQmAf8LGcXbMvHX5Gm+YJUYNAl340XkGnrimxZ0elXyoQJuN5sbg6C4evKA4SQ==} + '@typescript-eslint/types@8.38.0': + resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.37.0': - resolution: {integrity: sha512-zuWDMDuzMRbQOM+bHyU4/slw27bAUEcKSKKs3hcv2aNnc/tvE/h7w60dwVw8vnal2Pub6RT1T7BI8tFZ1fE+yg==} + '@typescript-eslint/typescript-estree@8.38.0': + resolution: {integrity: sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.37.0': - resolution: {integrity: sha512-TSFvkIW6gGjN2p6zbXo20FzCABbyUAuq6tBvNRGsKdsSQ6a7rnV6ADfZ7f4iI3lIiXc4F4WWvtUfDw9CJ9pO5A==} + '@typescript-eslint/utils@8.38.0': + resolution: {integrity: sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/visitor-keys@8.37.0': - resolution: {integrity: sha512-YzfhzcTnZVPiLfP/oeKtDp2evwvHLMe0LOy7oe+hb9KKIumLNohYS9Hgp1ifwpu42YWxhZE8yieggz6JpqO/1w==} + '@typescript-eslint/visitor-keys@8.38.0': + resolution: {integrity: sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.2.0': @@ -3219,6 +3225,9 @@ packages: birpc@2.4.0: resolution: {integrity: sha512-5IdNxTyhXHv2UlgnPHQ0h+5ypVmkrYHzL8QT+DwFZ//2N/oNV8Ch+BCRmTJ3x6/z9Axo/cXYBc9eprsUVK/Jsg==} + birpc@2.5.0: + resolution: {integrity: sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==} + blake3-wasm@2.1.5: resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} @@ -4418,8 +4427,8 @@ packages: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} - miniflare@4.20250709.0: - resolution: {integrity: sha512-dRGXi6Do9ArQZt7205QGWZ1tD6k6xQNY/mAZBAtiaQYvKxFuNyiHYlFnSN8Co4AFCVOozo/U52sVAaHvlcmnew==} + miniflare@4.20250712.1: + resolution: {integrity: sha512-46gB3FGPOsy+EpFGufjhr8agYycO/55d6l0y7hNJ13NcTVwrObMg/0HmI3pC5yQj0974IVXzBgUfDBMAX6thow==} engines: {node: '>=18.0.0'} hasBin: true @@ -5041,14 +5050,14 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rolldown-plugin-dts@0.13.13: - resolution: {integrity: sha512-Nchx9nQoa4IpfQ/BJzodKMvtJ3H3dT322siAJSp3uvQJ+Pi1qgEjOp7hSQwGSQRhaC5gC+9hparbWEH5oiAL9Q==} + rolldown-plugin-dts@0.14.1: + resolution: {integrity: sha512-M++jFiiI0dwd9jNnta5vfxc058wwoibgeBzNMZw0QRm8jPJYxy4P3nQYlBtwQagKUDQVR0LXHSrRgXTezELEhw==} engines: {node: '>=20.18.0'} peerDependencies: '@typescript/native-preview': '>=7.0.0-dev.20250601.1' rolldown: ^1.0.0-beta.9 typescript: ^5.0.0 - vue-tsc: ~2.2.0 + vue-tsc: ~3.0.3 peerDependenciesMeta: '@typescript/native-preview': optional: true @@ -5057,8 +5066,8 @@ packages: vue-tsc: optional: true - rolldown-vite@7.0.9: - resolution: {integrity: sha512-RxVP6CY9CNCEM9UecdytqeADxOGSjgkfSE/eI986sM7I3/F09lQ9UfQo3y6W10ICBppKsEHe71NbCX/tirYDFg==} + rolldown-vite@7.0.10: + resolution: {integrity: sha512-t3jMDID78NAJ2PWd0Q5RFrDpD1mFv20ouO/yDbqeHzG2Iyi2ZsjChLKClag1bUm591JJXBsoJIjP6FDkFi9qbw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -5097,8 +5106,8 @@ packages: yaml: optional: true - rolldown@1.0.0-beta.27: - resolution: {integrity: sha512-aYiJmzKoUHoaaEZLRegYVfZkXW7gzdgSbq+u5cXQ6iXc/y8tnQ3zGffQo44Pr1lTKeLluw3bDIDUCx/NAzqKeA==} + rolldown@1.0.0-beta.29: + resolution: {integrity: sha512-EsoOi8moHN6CAYyTZipxDDVTJn0j2nBCWor4wRU45RQ8ER2qREDykXLr3Ulz6hBh6oBKCFTQIjo21i0FXNo/IA==} hasBin: true rollup-plugin-dts@6.2.1: @@ -5394,9 +5403,9 @@ packages: peerDependencies: typescript: '>=4.0.0' - tsdown@0.12.9: - resolution: {integrity: sha512-MfrXm9PIlT3saovtWKf/gCJJ/NQCdE0SiREkdNC+9Qy6UHhdeDPxnkFaBD7xttVUmgp0yUHtGirpoLB+OVLuLA==} - engines: {node: '>=18.0.0'} + tsdown@0.13.0: + resolution: {integrity: sha512-+1ZqbLIYDAiNxtAvq9RsTg55PRvaMxGmtvRFBW2J+i4GfDKiyHAkxez1eB3EPvHG1Z917nsf2madsSeblJS3GA==} + engines: {node: '>=20.19.0'} hasBin: true peerDependencies: '@arethetypeswrong/core': ^0.18.1 @@ -5434,8 +5443,8 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - typescript-eslint@8.37.0: - resolution: {integrity: sha512-TnbEjzkE9EmcO0Q2zM+GE8NQLItNAJpMmED1BdgoBMYNdqMhzlbqfdSwiRlAzEK2pA9UzVW0gzaaIzXWg2BjfA==} + typescript-eslint@8.38.0: + resolution: {integrity: sha512-FsZlrYK6bPDGoLeZRuvx2v6qrM03I0U0SnfCLPs/XCCPCFD80xU9Pg09H/K+XFa68uJuZo7l/Xhs+eDRg2l3hg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -5472,9 +5481,9 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici@5.29.0: - resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} - engines: {node: '>=14.0'} + undici@7.12.0: + resolution: {integrity: sha512-GrKEsc3ughskmGA9jevVlIOPMiiAHJ4OFUtaAH+NhfTUSiZ1wMPIQqQvAJUrJspFXJt3EBWgpAeoHEDVT1IBug==} + engines: {node: '>=20.18.1'} unenv@2.0.0-rc.17: resolution: {integrity: sha512-B06u0wXkEd+o5gOCMl/ZHl5cfpYbDZKAT+HWTL+Hws6jWu7dCiqBBXXXzMFcFVJb8D4ytAnYmxJA83uwOQRSsg==} @@ -5616,8 +5625,8 @@ packages: yaml: optional: true - vite@7.0.4: - resolution: {integrity: sha512-SkaSguuS7nnmV7mfJ8l81JGBFV7Gvzp8IzgE8A8t23+AxuNX61Q5H1Tpz5efduSN7NHC8nQXD3sKQKZAu5mNEA==} + vite@7.0.5: + resolution: {integrity: sha512-1mncVwJxy2C9ThLwz0+2GKZyEXuC3MyWtAAlNftlZZXZDP3AJt5FmwcMit/IGGaNZ8ZOB2BNO/HFUB+CpN0NQw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -5721,17 +5730,17 @@ packages: wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - workerd@1.20250709.0: - resolution: {integrity: sha512-BqLPpmvRN+TYUSG61OkWamsGdEuMwgvabP8m0QOHIfofnrD2YVyWqE1kXJ0GH5EsVEuWamE5sR8XpTfsGBmIpg==} + workerd@1.20250712.0: + resolution: {integrity: sha512-7h+k1OxREpiZW0849g0uQNexRWMcs5i5gUGhJzCY8nIx6Tv4D/ndlXJ47lEFj7/LQdp165IL9dM2D5uDiedZrg==} engines: {node: '>=16'} hasBin: true - wrangler@4.24.3: - resolution: {integrity: sha512-stB1Wfs5NKlspsAzz8SBujBKsDqT5lpCyrL+vSUMy3uueEtI1A5qyORbKoJhIguEbwHfWS39mBsxzm6Vm1J2cg==} + wrangler@4.25.1: + resolution: {integrity: sha512-4Tlg+jmqxCX3xFm+Nz1b4jHHY9iOu1EyJ17SSCCJ6MGp+FCGtXgr+CynT94+MP0v/qKQUkMKjoeJ5FNDunZ9cA==} engines: {node: '>=18.0.0'} hasBin: true peerDependencies: - '@cloudflare/workers-types': ^4.20250709.0 + '@cloudflare/workers-types': ^4.20250712.0 peerDependenciesMeta: '@cloudflare/workers-types': optional: true @@ -5850,7 +5859,7 @@ snapshots: '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.27.7 + '@babel/types': 7.28.0 '@babel/helper-compilation-targets@7.27.2': dependencies: @@ -5878,7 +5887,7 @@ snapshots: '@babel/helper-member-expression-to-functions@7.27.1': dependencies: '@babel/traverse': 7.27.7 - '@babel/types': 7.27.7 + '@babel/types': 7.28.0 transitivePeerDependencies: - supports-color @@ -5907,7 +5916,7 @@ snapshots: '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.27.7 + '@babel/types': 7.28.0 '@babel/helper-plugin-utils@7.27.1': {} @@ -5923,7 +5932,7 @@ snapshots: '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: '@babel/traverse': 7.27.7 - '@babel/types': 7.27.7 + '@babel/types': 7.28.0 transitivePeerDependencies: - supports-color @@ -5948,7 +5957,7 @@ snapshots: '@babel/parser@7.27.0': dependencies: - '@babel/types': 7.27.7 + '@babel/types': 7.28.0 '@babel/parser@7.27.7': dependencies: @@ -6096,28 +6105,33 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 + '@babel/types@7.28.1': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@cloudflare/kv-asset-handler@0.4.0': dependencies: mime: 3.0.0 - '@cloudflare/unenv-preset@2.3.3(unenv@2.0.0-rc.17)(workerd@1.20250709.0)': + '@cloudflare/unenv-preset@2.3.3(unenv@2.0.0-rc.17)(workerd@1.20250712.0)': dependencies: unenv: 2.0.0-rc.17 optionalDependencies: - workerd: 1.20250709.0 + workerd: 1.20250712.0 - '@cloudflare/vite-plugin@1.9.4(rollup@4.44.1)(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250709.0)(wrangler@4.24.3)': + '@cloudflare/vite-plugin@1.10.0(rollup@4.44.1)(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250712.0)(wrangler@4.25.1)': dependencies: - '@cloudflare/unenv-preset': 2.3.3(unenv@2.0.0-rc.17)(workerd@1.20250709.0) + '@cloudflare/unenv-preset': 2.3.3(unenv@2.0.0-rc.17)(workerd@1.20250712.0) '@mjackson/node-fetch-server': 0.6.1 '@rollup/plugin-replace': 6.0.2(rollup@4.44.1) get-port: 7.1.0 - miniflare: 4.20250709.0 + miniflare: 4.20250712.1 picocolors: 1.1.1 tinyglobby: 0.2.14 unenv: 2.0.0-rc.17 - vite: 7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - wrangler: 4.24.3 + vite: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + wrangler: 4.25.1 ws: 8.18.0 transitivePeerDependencies: - bufferutil @@ -6125,19 +6139,19 @@ snapshots: - utf-8-validate - workerd - '@cloudflare/workerd-darwin-64@1.20250709.0': + '@cloudflare/workerd-darwin-64@1.20250712.0': optional: true - '@cloudflare/workerd-darwin-arm64@1.20250709.0': + '@cloudflare/workerd-darwin-arm64@1.20250712.0': optional: true - '@cloudflare/workerd-linux-64@1.20250709.0': + '@cloudflare/workerd-linux-64@1.20250712.0': optional: true - '@cloudflare/workerd-linux-arm64@1.20250709.0': + '@cloudflare/workerd-linux-arm64@1.20250712.0': optional: true - '@cloudflare/workerd-windows-64@1.20250709.0': + '@cloudflare/workerd-windows-64@1.20250712.0': optional: true '@conventional-changelog/git-client@2.5.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.0)': @@ -6159,16 +6173,32 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/core@1.4.5': + dependencies: + '@emnapi/wasi-threads': 1.0.4 + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.4.3': dependencies: tslib: 2.8.1 optional: true + '@emnapi/runtime@1.4.5': + dependencies: + tslib: 2.8.1 + optional: true + '@emnapi/wasi-threads@1.0.2': dependencies: tslib: 2.8.1 optional: true + '@emnapi/wasi-threads@1.0.4': + dependencies: + tslib: 2.8.1 + optional: true + '@emotion/babel-plugin@11.13.5': dependencies: '@babel/helper-module-imports': 7.25.9 @@ -6608,8 +6638,6 @@ snapshots: '@eslint/core': 0.14.0 levn: 0.4.1 - '@fastify/busboy@2.1.1': {} - '@hiogawa/utils@1.7.0': {} '@humanfs/core@0.19.1': {} @@ -6789,17 +6817,17 @@ snapshots: '@mjackson/node-fetch-server@0.7.0': {} - '@napi-rs/wasm-runtime@0.2.11': + '@napi-rs/wasm-runtime@0.2.12': dependencies: '@emnapi/core': 1.4.3 '@emnapi/runtime': 1.4.3 - '@tybys/wasm-util': 0.9.0 + '@tybys/wasm-util': 0.10.0 optional: true - '@napi-rs/wasm-runtime@0.2.12': + '@napi-rs/wasm-runtime@1.0.1': dependencies: - '@emnapi/core': 1.4.3 - '@emnapi/runtime': 1.4.3 + '@emnapi/core': 1.4.5 + '@emnapi/runtime': 1.4.5 '@tybys/wasm-util': 0.10.0 optional: true @@ -6844,9 +6872,9 @@ snapshots: dependencies: which: 3.0.1 - '@oxc-project/runtime@0.77.0': {} + '@oxc-project/runtime@0.77.3': {} - '@oxc-project/types@0.77.0': {} + '@oxc-project/types@0.77.3': {} '@pkgjs/parseargs@0.11.0': optional: true @@ -6875,7 +6903,7 @@ snapshots: dependencies: quansync: 0.2.10 - '@react-router/dev@0.0.0-experimental-23decd7bc(@types/node@22.16.3)(babel-plugin-macros@3.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(react-router@0.0.0-experimental-23decd7bc(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tsx@4.20.3)(typescript@5.8.3)(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(wrangler@4.24.3)(yaml@2.7.1)': + '@react-router/dev@0.0.0-experimental-23decd7bc(@types/node@22.16.5)(babel-plugin-macros@3.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(react-router@0.0.0-experimental-23decd7bc(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tsx@4.20.3)(typescript@5.8.3)(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(wrangler@4.25.1)(yaml@2.7.1)': dependencies: '@babel/core': 7.28.0 '@babel/generator': 7.27.5 @@ -6904,11 +6932,11 @@ snapshots: set-cookie-parser: 2.7.1 tinyglobby: 0.2.14 valibot: 0.41.0(typescript@5.8.3) - vite: 7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vite-node: 3.2.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite-node: 3.2.4(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) optionalDependencies: typescript: 5.8.3 - wrangler: 4.24.3 + wrangler: 4.25.1 transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -6932,51 +6960,51 @@ snapshots: optionalDependencies: typescript: 5.8.3 - '@rolldown/binding-android-arm64@1.0.0-beta.27': + '@rolldown/binding-android-arm64@1.0.0-beta.29': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-beta.27': + '@rolldown/binding-darwin-arm64@1.0.0-beta.29': optional: true - '@rolldown/binding-darwin-x64@1.0.0-beta.27': + '@rolldown/binding-darwin-x64@1.0.0-beta.29': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-beta.27': + '@rolldown/binding-freebsd-x64@1.0.0-beta.29': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.27': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.29': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.27': + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.29': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.27': + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.29': optional: true - '@rolldown/binding-linux-arm64-ohos@1.0.0-beta.27': + '@rolldown/binding-linux-arm64-ohos@1.0.0-beta.29': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.27': + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.29': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-beta.27': + '@rolldown/binding-linux-x64-musl@1.0.0-beta.29': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-beta.27': + '@rolldown/binding-wasm32-wasi@1.0.0-beta.29': dependencies: - '@napi-rs/wasm-runtime': 0.2.12 + '@napi-rs/wasm-runtime': 1.0.1 optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.27': + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.29': optional: true - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.27': + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.29': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.27': + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.29': optional: true - '@rolldown/pluginutils@1.0.0-beta.27': {} + '@rolldown/pluginutils@1.0.0-beta.29': {} '@rollup/plugin-alias@5.1.1(rollup@4.37.0)': optionalDependencies: @@ -7171,11 +7199,11 @@ snapshots: '@simple-libs/child-process-utils@1.0.1': dependencies: '@simple-libs/stream-utils': 1.1.0 - '@types/node': 22.16.3 + '@types/node': 22.16.5 '@simple-libs/stream-utils@1.1.0': dependencies: - '@types/node': 22.16.3 + '@types/node': 22.16.5 '@sindresorhus/is@7.0.2': {} @@ -7313,12 +7341,12 @@ snapshots: postcss-selector-parser: 6.0.10 tailwindcss: 4.1.11 - '@tailwindcss/vite@4.1.11(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': + '@tailwindcss/vite@4.1.11(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': dependencies: '@tailwindcss/node': 4.1.11 '@tailwindcss/oxide': 4.1.11 tailwindcss: 4.1.11 - vite: 7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) '@trysound/sax@0.2.0': {} @@ -7329,11 +7357,6 @@ snapshots: tslib: 2.8.1 optional: true - '@tybys/wasm-util@0.9.0': - dependencies: - tslib: 2.8.1 - optional: true - '@types/acorn@4.0.6': dependencies: '@types/estree': 1.0.8 @@ -7378,7 +7401,7 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 22.16.3 + '@types/node': 22.16.5 '@types/hast@3.0.3': dependencies: @@ -7393,7 +7416,7 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 22.16.3 + '@types/node': 22.16.5 '@types/mdast@4.0.3': dependencies: @@ -7403,7 +7426,7 @@ snapshots: '@types/ms@0.7.34': {} - '@types/node@22.16.3': + '@types/node@22.16.5': dependencies: undici-types: 6.21.0 @@ -7444,14 +7467,14 @@ snapshots: '@types/unist@3.0.2': {} - '@typescript-eslint/eslint-plugin@8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.37.0 - '@typescript-eslint/type-utils': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.37.0 + '@typescript-eslint/parser': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/type-utils': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.38.0 eslint: 9.31.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 7.0.5 @@ -7461,41 +7484,41 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/scope-manager': 8.37.0 - '@typescript-eslint/types': 8.37.0 - '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.37.0 + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.38.0 debug: 4.4.1 eslint: 9.31.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.37.0(typescript@5.8.3)': + '@typescript-eslint/project-service@8.38.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.37.0(typescript@5.8.3) - '@typescript-eslint/types': 8.37.0 + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) + '@typescript-eslint/types': 8.38.0 debug: 4.4.1 typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.37.0': + '@typescript-eslint/scope-manager@8.38.0': dependencies: - '@typescript-eslint/types': 8.37.0 - '@typescript-eslint/visitor-keys': 8.37.0 + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/visitor-keys': 8.38.0 - '@typescript-eslint/tsconfig-utils@8.37.0(typescript@5.8.3)': + '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.8.3)': dependencies: typescript: 5.8.3 - '@typescript-eslint/type-utils@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 8.37.0 - '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) debug: 4.4.1 eslint: 9.31.0(jiti@2.4.2) ts-api-utils: 2.1.0(typescript@5.8.3) @@ -7505,14 +7528,14 @@ snapshots: '@typescript-eslint/types@8.35.1': {} - '@typescript-eslint/types@8.37.0': {} + '@typescript-eslint/types@8.38.0': {} - '@typescript-eslint/typescript-estree@8.37.0(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.38.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/project-service': 8.37.0(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.37.0(typescript@5.8.3) - '@typescript-eslint/types': 8.37.0 - '@typescript-eslint/visitor-keys': 8.37.0 + '@typescript-eslint/project-service': 8.38.0(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/visitor-keys': 8.38.0 debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 @@ -7523,20 +7546,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/utils@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.37.0 - '@typescript-eslint/types': 8.37.0 - '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) eslint: 9.31.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.37.0': + '@typescript-eslint/visitor-keys@8.38.0': dependencies: - '@typescript-eslint/types': 8.37.0 + '@typescript-eslint/types': 8.38.0 eslint-visitor-keys: 4.2.1 '@ungap/structured-clone@1.2.0': {} @@ -7588,7 +7611,7 @@ snapshots: '@unrs/resolver-binding-wasm32-wasi@1.9.2': dependencies: - '@napi-rs/wasm-runtime': 0.2.11 + '@napi-rs/wasm-runtime': 0.2.12 optional: true '@unrs/resolver-binding-win32-arm64-msvc@1.9.2': @@ -7641,13 +7664,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@7.0.1(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': + '@vitest/mocker@3.2.4(vite@7.0.1(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 7.0.1(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.1(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) '@vitest/pretty-format@3.2.4': dependencies: @@ -7764,6 +7787,8 @@ snapshots: birpc@2.4.0: {} + birpc@2.5.0: {} + blake3-wasm@2.1.5: {} boolbase@1.0.0: {} @@ -8269,7 +8294,7 @@ snapshots: eslint: 9.31.0(jiti@2.4.2) eslint-compat-utils: 0.5.1(eslint@9.31.0(jiti@2.4.2)) - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2)): dependencies: '@typescript-eslint/types': 8.35.1 comment-parser: 1.4.1 @@ -8282,7 +8307,7 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.9.2 optionalDependencies: - '@typescript-eslint/utils': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) transitivePeerDependencies: - supports-color @@ -9222,7 +9247,7 @@ snapshots: mimic-function@5.0.1: {} - miniflare@4.20250709.0: + miniflare@4.20250712.1: dependencies: '@cspotcode/source-map-support': 0.8.1 acorn: 8.14.0 @@ -9231,8 +9256,8 @@ snapshots: glob-to-regexp: 0.4.1 sharp: 0.33.5 stoppable: 1.1.0 - undici: 5.29.0 - workerd: 1.20250709.0 + undici: 7.12.0 + workerd: 1.20250712.0 ws: 8.18.0 youch: 4.1.0-beta.10 zod: 3.22.3 @@ -9822,60 +9847,60 @@ snapshots: rfdc@1.4.1: {} - rolldown-plugin-dts@0.13.13(rolldown@1.0.0-beta.27)(typescript@5.8.3): + rolldown-plugin-dts@0.14.1(rolldown@1.0.0-beta.29)(typescript@5.8.3): dependencies: '@babel/generator': 7.28.0 '@babel/parser': 7.28.0 - '@babel/types': 7.28.0 + '@babel/types': 7.28.1 ast-kit: 2.1.1 - birpc: 2.4.0 + birpc: 2.5.0 debug: 4.4.1 dts-resolver: 2.1.1 get-tsconfig: 4.10.1 - rolldown: 1.0.0-beta.27 + rolldown: 1.0.0-beta.29 optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - oxc-resolver - supports-color - rolldown-vite@7.0.9(@types/node@22.16.3)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1): + rolldown-vite@7.0.10(@types/node@22.16.5)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1): dependencies: fdir: 6.4.6(picomatch@4.0.2) lightningcss: 1.30.1 picomatch: 4.0.2 postcss: 8.5.6 - rolldown: 1.0.0-beta.27 + rolldown: 1.0.0-beta.29 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 22.16.3 + '@types/node': 22.16.5 esbuild: 0.25.5 fsevents: 2.3.3 jiti: 2.4.2 tsx: 4.20.3 yaml: 2.7.1 - rolldown@1.0.0-beta.27: + rolldown@1.0.0-beta.29: dependencies: - '@oxc-project/runtime': 0.77.0 - '@oxc-project/types': 0.77.0 - '@rolldown/pluginutils': 1.0.0-beta.27 + '@oxc-project/runtime': 0.77.3 + '@oxc-project/types': 0.77.3 + '@rolldown/pluginutils': 1.0.0-beta.29 ansis: 4.1.0 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-beta.27 - '@rolldown/binding-darwin-arm64': 1.0.0-beta.27 - '@rolldown/binding-darwin-x64': 1.0.0-beta.27 - '@rolldown/binding-freebsd-x64': 1.0.0-beta.27 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.27 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.27 - '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.27 - '@rolldown/binding-linux-arm64-ohos': 1.0.0-beta.27 - '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.27 - '@rolldown/binding-linux-x64-musl': 1.0.0-beta.27 - '@rolldown/binding-wasm32-wasi': 1.0.0-beta.27 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.27 - '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.27 - '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.27 + '@rolldown/binding-android-arm64': 1.0.0-beta.29 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.29 + '@rolldown/binding-darwin-x64': 1.0.0-beta.29 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.29 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.29 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.29 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.29 + '@rolldown/binding-linux-arm64-ohos': 1.0.0-beta.29 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.29 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.29 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.29 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.29 + '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.29 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.29 rollup-plugin-dts@6.2.1(rollup@4.37.0)(typescript@5.8.3): dependencies: @@ -10210,7 +10235,7 @@ snapshots: picomatch: 4.0.2 typescript: 5.8.3 - tsdown@0.12.9(publint@0.3.12)(typescript@5.8.3): + tsdown@0.13.0(publint@0.3.12)(typescript@5.8.3): dependencies: ansis: 4.1.0 cac: 6.7.14 @@ -10219,8 +10244,8 @@ snapshots: diff: 8.0.2 empathic: 2.0.0 hookable: 5.5.3 - rolldown: 1.0.0-beta.27 - rolldown-plugin-dts: 0.13.13(rolldown@1.0.0-beta.27)(typescript@5.8.3) + rolldown: 1.0.0-beta.29 + rolldown-plugin-dts: 0.14.1(rolldown@1.0.0-beta.29)(typescript@5.8.3) semver: 7.7.2 tinyexec: 1.0.1 tinyglobby: 0.2.14 @@ -10252,12 +10277,12 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3): + typescript-eslint@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) eslint: 9.31.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: @@ -10314,9 +10339,7 @@ snapshots: undici-types@6.21.0: {} - undici@5.29.0: - dependencies: - '@fastify/busboy': 2.1.1 + undici@7.12.0: {} unenv@2.0.0-rc.17: dependencies: @@ -10441,23 +10464,23 @@ snapshots: unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 - vite-dev-rpc@1.1.0(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + vite-dev-rpc@1.1.0(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): dependencies: birpc: 2.4.0 - vite: 7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vite-hot-client: 2.1.0(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + vite: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite-hot-client: 2.1.0(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) - vite-hot-client@2.1.0(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + vite-hot-client@2.1.0(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): dependencies: - vite: 7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vite-node@3.2.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): + vite-node@3.2.4(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: cac: 6.7.14 debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) transitivePeerDependencies: - '@types/node' - jiti @@ -10472,7 +10495,7 @@ snapshots: - tsx - yaml - vite-plugin-inspect@11.3.0(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + vite-plugin-inspect@11.3.0(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): dependencies: ansis: 4.1.0 debug: 4.4.1 @@ -10482,12 +10505,12 @@ snapshots: perfect-debounce: 1.0.0 sirv: 3.0.1 unplugin-utils: 0.2.4 - vite: 7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vite-dev-rpc: 1.1.0(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + vite: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite-dev-rpc: 1.1.0(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) transitivePeerDependencies: - supports-color - vite@7.0.1(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): + vite@7.0.1(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: esbuild: 0.25.5 fdir: 6.4.6(picomatch@4.0.2) @@ -10496,14 +10519,14 @@ snapshots: rollup: 4.44.1 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 22.16.3 + '@types/node': 22.16.5 fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.30.1 tsx: 4.20.3 yaml: 2.7.1 - vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): + vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: esbuild: 0.25.5 fdir: 6.4.6(picomatch@4.0.2) @@ -10512,22 +10535,22 @@ snapshots: rollup: 4.44.1 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 22.16.3 + '@types/node': 22.16.5 fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.30.1 tsx: 4.20.3 yaml: 2.7.1 - vitefu@1.1.1(vite@7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + vitefu@1.1.1(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): optionalDependencies: - vite: 7.0.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.0.1(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + '@vitest/mocker': 3.2.4(vite@7.0.1(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -10545,12 +10568,12 @@ snapshots: tinyglobby: 0.2.14 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.0.1(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vite-node: 3.2.4(@types/node@22.16.3)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.1(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite-node: 3.2.4(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.16.3 + '@types/node': 22.16.5 transitivePeerDependencies: - jiti - less @@ -10586,24 +10609,24 @@ snapshots: wordwrap@1.0.0: {} - workerd@1.20250709.0: + workerd@1.20250712.0: optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20250709.0 - '@cloudflare/workerd-darwin-arm64': 1.20250709.0 - '@cloudflare/workerd-linux-64': 1.20250709.0 - '@cloudflare/workerd-linux-arm64': 1.20250709.0 - '@cloudflare/workerd-windows-64': 1.20250709.0 + '@cloudflare/workerd-darwin-64': 1.20250712.0 + '@cloudflare/workerd-darwin-arm64': 1.20250712.0 + '@cloudflare/workerd-linux-64': 1.20250712.0 + '@cloudflare/workerd-linux-arm64': 1.20250712.0 + '@cloudflare/workerd-windows-64': 1.20250712.0 - wrangler@4.24.3: + wrangler@4.25.1: dependencies: '@cloudflare/kv-asset-handler': 0.4.0 - '@cloudflare/unenv-preset': 2.3.3(unenv@2.0.0-rc.17)(workerd@1.20250709.0) + '@cloudflare/unenv-preset': 2.3.3(unenv@2.0.0-rc.17)(workerd@1.20250712.0) blake3-wasm: 2.1.5 esbuild: 0.25.4 - miniflare: 4.20250709.0 + miniflare: 4.20250712.1 path-to-regexp: 6.3.0 unenv: 2.0.0-rc.17 - workerd: 1.20250709.0 + workerd: 1.20250712.0 optionalDependencies: fsevents: 2.3.3 transitivePeerDependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index ee699e693..c26c75e23 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -6,7 +6,7 @@ packages: catalogs: rolldown-vite: - vite: npm:rolldown-vite@^7.0.9 + vite: npm:rolldown-vite@^7.0.10 overrides: '@types/estree': ^1.0.8 From 2a81b9015286558c1463ab8079a7a6e40a82a5c6 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 23 Jul 2025 10:15:44 +0900 Subject: [PATCH 123/313] test(rsc): add transitive cjs dep example (#611) Co-authored-by: Claude --- packages/plugin-rsc/e2e/basic.test.ts | 11 +++++-- .../plugin-rsc/examples/basic/package.json | 1 + .../src/routes/deps/transitive-cjs/client.tsx | 12 ++++++++ .../examples/basic/src/routes/root.tsx | 2 ++ .../basic/test-dep/transitive-cjs/client.js | 27 +++++++++++++++++ .../test-dep/transitive-cjs/package.json | 14 +++++++++ .../plugin-rsc/examples/basic/vite.config.ts | 29 +++++++++++++++---- pnpm-lock.yaml | 22 ++++++++++++++ 8 files changed, 109 insertions(+), 9 deletions(-) create mode 100644 packages/plugin-rsc/examples/basic/src/routes/deps/transitive-cjs/client.tsx create mode 100644 packages/plugin-rsc/examples/basic/test-dep/transitive-cjs/client.js create mode 100644 packages/plugin-rsc/examples/basic/test-dep/transitive-cjs/package.json diff --git a/packages/plugin-rsc/e2e/basic.test.ts b/packages/plugin-rsc/e2e/basic.test.ts index 5a0464a09..d463b983b 100644 --- a/packages/plugin-rsc/e2e/basic.test.ts +++ b/packages/plugin-rsc/e2e/basic.test.ts @@ -11,9 +11,6 @@ import { import path from 'node:path' import os from 'node:os' -// TODO: parallel? -// TODO: all tests don't need to be tested in all variants? - test.describe('dev-default', () => { const f = useFixture({ root: 'examples/basic', mode: 'dev' }) defineTest(f) @@ -824,6 +821,14 @@ function defineTest(f: Fixture) { ) }) + test('transitive cjs dep', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await expect(page.getByTestId('transitive-cjs-client')).toHaveText( + 'ok:browser', + ) + }) + test('use cache function', async ({ page }) => { await page.goto(f.url()) await waitForHydration(page) diff --git a/packages/plugin-rsc/examples/basic/package.json b/packages/plugin-rsc/examples/basic/package.json index 43d95645d..6fb6344bc 100644 --- a/packages/plugin-rsc/examples/basic/package.json +++ b/packages/plugin-rsc/examples/basic/package.json @@ -21,6 +21,7 @@ "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "latest", + "@vitejs/test-dep-transitive-cjs": "file:./test-dep/transitive-cjs", "@vitejs/test-dep-client-in-server": "file:./test-dep/client-in-server", "@vitejs/test-dep-client-in-server2": "file:./test-dep/client-in-server2", "@vitejs/test-dep-server-in-client": "file:./test-dep/server-in-client", diff --git a/packages/plugin-rsc/examples/basic/src/routes/deps/transitive-cjs/client.tsx b/packages/plugin-rsc/examples/basic/src/routes/deps/transitive-cjs/client.tsx new file mode 100644 index 000000000..11045ee39 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/deps/transitive-cjs/client.tsx @@ -0,0 +1,12 @@ +'use client' + +// @ts-ignore +import { TestClient } from '@vitejs/test-dep-transitive-cjs/client' + +export function TestTransitiveCjsClient() { + return ( +
+ [test-dep-transitive-cjs-client: ] +
+ ) +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/root.tsx b/packages/plugin-rsc/examples/basic/src/routes/root.tsx index 52ce38dee..f679c362e 100644 --- a/packages/plugin-rsc/examples/basic/src/routes/root.tsx +++ b/packages/plugin-rsc/examples/basic/src/routes/root.tsx @@ -29,6 +29,7 @@ import { TestTemporaryReference } from './temporary-reference/client' import { TestUseCache } from './use-cache/server' import { TestHydrationMismatch } from './hydration-mismatch/server' import { TestBrowserOnly } from './browser-only/client' +import { TestTransitiveCjsClient } from './deps/transitive-cjs/client' export function Root(props: { url: URL }) { return ( @@ -67,6 +68,7 @@ export function Root(props: { url: URL }) { + diff --git a/packages/plugin-rsc/examples/basic/test-dep/transitive-cjs/client.js b/packages/plugin-rsc/examples/basic/test-dep/transitive-cjs/client.js new file mode 100644 index 000000000..db2fd4b6f --- /dev/null +++ b/packages/plugin-rsc/examples/basic/test-dep/transitive-cjs/client.js @@ -0,0 +1,27 @@ +'use client' + +import React from 'react' + +// similar to swr +// https://github.com/vercel/swr/blob/063fe55dddb95f0b6c3f1637a935c43d732ded78/src/index/use-swr.ts#L3 +import { useSyncExternalStore } from 'use-sync-external-store/shim/index.js' + +const h = React.createElement + +const noopStore = () => () => {} + +export function TestClient() { + const value = useSyncExternalStore( + noopStore, + () => 'ok:browser', + () => 'ok:ssr', + ) + + return h( + 'span', + { + 'data-testid': 'transitive-cjs-client', + }, + value, + ) +} diff --git a/packages/plugin-rsc/examples/basic/test-dep/transitive-cjs/package.json b/packages/plugin-rsc/examples/basic/test-dep/transitive-cjs/package.json new file mode 100644 index 000000000..8368742da --- /dev/null +++ b/packages/plugin-rsc/examples/basic/test-dep/transitive-cjs/package.json @@ -0,0 +1,14 @@ +{ + "name": "@vitejs/test-dep-transitive-cjs", + "private": true, + "type": "module", + "exports": { + "./client": "./client.js" + }, + "dependencies": { + "use-sync-external-store": "^1.5.0" + }, + "peerDependencies": { + "react": "*" + } +} diff --git a/packages/plugin-rsc/examples/basic/vite.config.ts b/packages/plugin-rsc/examples/basic/vite.config.ts index 97d0f30b8..b0eec5511 100644 --- a/packages/plugin-rsc/examples/basic/vite.config.ts +++ b/packages/plugin-rsc/examples/basic/vite.config.ts @@ -135,12 +135,29 @@ export default { fetch: handler }; minify: false, manifest: true, }, - optimizeDeps: { - exclude: [ - '@vitejs/test-dep-client-in-server/client', - '@vitejs/test-dep-client-in-server2/client', - '@vitejs/test-dep-server-in-client/client', - ], + environments: { + client: { + optimizeDeps: { + entries: [ + './src/routes/**/client.tsx', + './src/framework/entry.browser.tsx', + ], + exclude: [ + '@vitejs/test-dep-client-in-server/client', + '@vitejs/test-dep-client-in-server2/client', + '@vitejs/test-dep-server-in-client/client', + ], + }, + }, + ssr: { + optimizeDeps: { + // TODO: this should be somehow auto inferred or at least show a warning + // to guide users to `optimizeDeps.include` + include: [ + '@vitejs/test-dep-transitive-cjs > use-sync-external-store/shim/index.js', + ], + }, + }, }, }) as any diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8bd988406..8b1fa0154 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -542,6 +542,9 @@ importers: '@vitejs/test-dep-server-in-server': specifier: file:./test-dep/server-in-server version: file:packages/plugin-rsc/examples/basic/test-dep/server-in-server(react@19.1.0) + '@vitejs/test-dep-transitive-cjs': + specifier: file:./test-dep/transitive-cjs + version: file:packages/plugin-rsc/examples/basic/test-dep/transitive-cjs(react@19.1.0) rsc-html-stream: specifier: ^0.0.7 version: 0.0.7 @@ -3094,6 +3097,11 @@ packages: peerDependencies: react: '*' + '@vitejs/test-dep-transitive-cjs@file:packages/plugin-rsc/examples/basic/test-dep/transitive-cjs': + resolution: {directory: packages/plugin-rsc/examples/basic/test-dep/transitive-cjs, type: directory} + peerDependencies: + react: '*' + '@vitest/expect@3.2.4': resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} @@ -5536,6 +5544,11 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + use-sync-external-store@1.5.0: + resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -7656,6 +7669,11 @@ snapshots: dependencies: react: 19.1.0 + '@vitejs/test-dep-transitive-cjs@file:packages/plugin-rsc/examples/basic/test-dep/transitive-cjs(react@19.1.0)': + dependencies: + react: 19.1.0 + use-sync-external-store: 1.5.0(react@19.1.0) + '@vitest/expect@3.2.4': dependencies: '@types/chai': 5.2.2 @@ -10440,6 +10458,10 @@ snapshots: dependencies: punycode: 2.3.1 + use-sync-external-store@1.5.0(react@19.1.0): + dependencies: + react: 19.1.0 + util-deprecate@1.0.2: {} valibot@0.41.0(typescript@5.8.3): From 26326b36f1fd191ebee3e05294cd1c0fe6d8bc76 Mon Sep 17 00:00:00 2001 From: Jinjiang Date: Wed, 23 Jul 2025 09:19:32 +0800 Subject: [PATCH 124/313] feat!: support including files in node_modules (#306) Co-authored-by: Hiroshi Ogawa Co-authored-by: sapphi-red <49056869+sapphi-red@users.noreply.github.com> --- packages/plugin-react-oxc/CHANGELOG.md | 4 + packages/plugin-react-oxc/README.md | 4 +- packages/plugin-react-oxc/src/index.ts | 10 +- packages/plugin-react/CHANGELOG.md | 4 + packages/plugin-react/README.md | 4 +- packages/plugin-react/src/index.ts | 16 +-- playground/include-node-modules/App.jsx | 17 ++++ .../__tests__/node-modules-include.spec.ts | 10 ++ playground/include-node-modules/index.html | 10 ++ playground/include-node-modules/package.json | 21 ++++ .../test-package/index.js | 1 + .../test-package/package.json | 6 ++ .../include-node-modules/vite.config.ts | 28 ++++++ playground/react/package.json | 2 +- pnpm-lock.yaml | 98 ++++++++----------- pnpm-workspace.yaml | 2 + 16 files changed, 152 insertions(+), 85 deletions(-) create mode 100644 playground/include-node-modules/App.jsx create mode 100644 playground/include-node-modules/__tests__/node-modules-include.spec.ts create mode 100644 playground/include-node-modules/index.html create mode 100644 playground/include-node-modules/package.json create mode 100644 playground/include-node-modules/test-package/index.js create mode 100644 playground/include-node-modules/test-package/package.json create mode 100644 playground/include-node-modules/vite.config.ts diff --git a/packages/plugin-react-oxc/CHANGELOG.md b/packages/plugin-react-oxc/CHANGELOG.md index f10da0efa..2e08df63d 100644 --- a/packages/plugin-react-oxc/CHANGELOG.md +++ b/packages/plugin-react-oxc/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Allow processing files in `node_modules` + +The default value of `exclude` options is now `[/\/node_modules\//]` to allow processing files in `node_modules` directory. It was previously `[]` and files in `node_modules` was always excluded regardless of the value of `exclude` option. + ### Require Node 20.19+, 22.12+ This plugin now requires Node 20.19+ or 22.12+. diff --git a/packages/plugin-react-oxc/README.md b/packages/plugin-react-oxc/README.md index f717cbf8e..23bdaa58a 100644 --- a/packages/plugin-react-oxc/README.md +++ b/packages/plugin-react-oxc/README.md @@ -25,7 +25,7 @@ export default defineConfig({ ### include/exclude -Includes `.js`, `.jsx`, `.ts` & `.tsx` by default. This option can be used to add fast refresh to `.mdx` files: +Includes `.js`, `.jsx`, `.ts` & `.tsx` and excludes `/node_modules/` by default. This option can be used to add fast refresh to `.mdx` files: ```js import { defineConfig } from 'vite' @@ -40,8 +40,6 @@ export default defineConfig({ }) ``` -> `node_modules` are never processed by this plugin (but Oxc will) - ### jsxImportSource Control where the JSX factory is imported from. Default to `'react'` diff --git a/packages/plugin-react-oxc/src/index.ts b/packages/plugin-react-oxc/src/index.ts index d54da0ded..3b6318b02 100644 --- a/packages/plugin-react-oxc/src/index.ts +++ b/packages/plugin-react-oxc/src/index.ts @@ -25,17 +25,11 @@ export interface Options { } const defaultIncludeRE = /\.[tj]sx?(?:$|\?)/ +const defaultExcludeRE = /\/node_modules\// export default function viteReact(opts: Options = {}): Plugin[] { const include = opts.include ?? defaultIncludeRE - const exclude = [ - ...(Array.isArray(opts.exclude) - ? opts.exclude - : opts.exclude - ? [opts.exclude] - : []), - /\/node_modules\//, - ] + const exclude = opts.exclude ?? defaultExcludeRE const jsxImportSource = opts.jsxImportSource ?? 'react' const jsxImportRuntime = `${jsxImportSource}/jsx-runtime` diff --git a/packages/plugin-react/CHANGELOG.md b/packages/plugin-react/CHANGELOG.md index 7ee10b3de..0aabccc3e 100644 --- a/packages/plugin-react/CHANGELOG.md +++ b/packages/plugin-react/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Allow processing files in `node_modules` + +The default value of `exclude` options is now `[/\/node_modules\//]` to allow processing files in `node_modules` directory. It was previously `[]` and files in `node_modules` was always excluded regardless of the value of `exclude` option. + ### `react` and `react-dom` is no longer added to [`resolve.dedupe`](https://vite.dev/config/#resolve-dedupe) automatically Adding values to `resolve.dedupe` forces Vite to resolve them differently from how Node.js does, which can be confusing and may not be expected. This plugin no longer adds `react` and `react-dom` to `resolve.dedupe` automatically. diff --git a/packages/plugin-react/README.md b/packages/plugin-react/README.md index af7a2d545..3b66e4658 100644 --- a/packages/plugin-react/README.md +++ b/packages/plugin-react/README.md @@ -21,7 +21,7 @@ export default defineConfig({ ### include/exclude -Includes `.js`, `.jsx`, `.ts` & `.tsx` by default. This option can be used to add fast refresh to `.mdx` files: +Includes `.js`, `.jsx`, `.ts` & `.tsx` and excludes `/node_modules/` by default. This option can be used to add fast refresh to `.mdx` files: ```js import { defineConfig } from 'vite' @@ -36,8 +36,6 @@ export default defineConfig({ }) ``` -> `node_modules` are never processed by this plugin (but esbuild will) - ### jsxImportSource Control where the JSX factory is imported from. Default to `'react'` diff --git a/packages/plugin-react/src/index.ts b/packages/plugin-react/src/index.ts index eecd32ea2..436091402 100644 --- a/packages/plugin-react/src/index.ts +++ b/packages/plugin-react/src/index.ts @@ -104,11 +104,12 @@ export type ViteReactPluginApi = { } const defaultIncludeRE = /\.[tj]sx?$/ +const defaultExcludeRE = /\/node_modules\// const tsRE = /\.tsx?$/ export default function viteReact(opts: Options = {}): Plugin[] { const include = opts.include ?? defaultIncludeRE - const exclude = opts.exclude + const exclude = opts.exclude ?? defaultExcludeRE const filter = createFilter(include, exclude) const jsxImportSource = opts.jsxImportSource ?? 'react' @@ -222,17 +223,10 @@ export default function viteReact(opts: Options = {}): Plugin[] { filter: { id: { include: makeIdFiltersToMatchWithQuery(include), - exclude: [ - ...(exclude - ? makeIdFiltersToMatchWithQuery(ensureArray(exclude)) - : []), - /\/node_modules\//, - ], + exclude: makeIdFiltersToMatchWithQuery(exclude), }, }, async handler(code, id, options) { - if (id.includes('/node_modules/')) return - const [filepath] = id.split('?') if (!filter(filepath)) return @@ -472,7 +466,3 @@ function getReactCompilerRuntimeModule( } return moduleName } - -function ensureArray(value: T | T[]): T[] { - return Array.isArray(value) ? value : [value] -} diff --git a/playground/include-node-modules/App.jsx b/playground/include-node-modules/App.jsx new file mode 100644 index 000000000..fb04124a6 --- /dev/null +++ b/playground/include-node-modules/App.jsx @@ -0,0 +1,17 @@ +import test from '@vitejs/test-package' + +function App() { + return ( +
+

Node Modules Include Test

+

+ This playground tests that files in node_modules are processed + correctly. +

+ +

Result: {'' + test}

+
+ ) +} + +export default App diff --git a/playground/include-node-modules/__tests__/node-modules-include.spec.ts b/playground/include-node-modules/__tests__/node-modules-include.spec.ts new file mode 100644 index 000000000..0debee0a4 --- /dev/null +++ b/playground/include-node-modules/__tests__/node-modules-include.spec.ts @@ -0,0 +1,10 @@ +import { expect, test } from 'vitest' +import { page } from '~utils' + +test('should render', async () => { + expect(await page.textContent('h1')).toMatch('Node Modules Include Test') +}) + +test('babel should run on files in node_modules', async () => { + expect(await page.textContent('.result')).toMatch('Result: true') +}) diff --git a/playground/include-node-modules/index.html b/playground/include-node-modules/index.html new file mode 100644 index 000000000..7417c442d --- /dev/null +++ b/playground/include-node-modules/index.html @@ -0,0 +1,10 @@ +
+ diff --git a/playground/include-node-modules/package.json b/playground/include-node-modules/package.json new file mode 100644 index 000000000..7eb9673bb --- /dev/null +++ b/playground/include-node-modules/package.json @@ -0,0 +1,21 @@ +{ + "name": "@vitejs/test-node-modules-include", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "react": "^19.1.0", + "react-dom": "^19.1.0" + }, + "devDependencies": { + "@types/babel__core": "^7.20.5", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", + "@vitejs/plugin-react": "workspace:*", + "@vitejs/test-package": "file:./test-package" + } +} diff --git a/playground/include-node-modules/test-package/index.js b/playground/include-node-modules/test-package/index.js new file mode 100644 index 000000000..9e12dfa54 --- /dev/null +++ b/playground/include-node-modules/test-package/index.js @@ -0,0 +1 @@ +export default TEST_BABEL diff --git a/playground/include-node-modules/test-package/package.json b/playground/include-node-modules/test-package/package.json new file mode 100644 index 000000000..99651ea20 --- /dev/null +++ b/playground/include-node-modules/test-package/package.json @@ -0,0 +1,6 @@ +{ + "name": "test-package", + "version": "1.0.0", + "main": "index.js", + "type": "module" +} diff --git a/playground/include-node-modules/vite.config.ts b/playground/include-node-modules/vite.config.ts new file mode 100644 index 000000000..28c3dd518 --- /dev/null +++ b/playground/include-node-modules/vite.config.ts @@ -0,0 +1,28 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' +import type { PluginItem as BabelPlugin } from '@babel/core' + +export default defineConfig({ + plugins: [ + react({ + exclude: [/\/node_modules\/(?!(\.pnpm\/)?test-package)/], + babel: { + plugins: [ + ({ types: t }): BabelPlugin => ({ + name: 'test-replace-test-babel', + visitor: { + Identifier(path) { + if (path.node.name === 'TEST_BABEL') { + path.replaceWith(t.booleanLiteral(true)) + } + }, + }, + }), + ], + }, + }), + ], + optimizeDeps: { + exclude: ['@vitejs/test-package'], + }, +}) diff --git a/playground/react/package.json b/playground/react/package.json index abb756b71..b3d6b13cb 100644 --- a/playground/react/package.json +++ b/playground/react/package.json @@ -9,7 +9,7 @@ "preview": "vite preview" }, "dependencies": { - "jsx-entry": "file:./jsx-entry", + "jsx-entry": "link:./jsx-entry", "react": "^19.1.0", "react-dom": "^19.1.0" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8b1fa0154..ed03505b5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -856,6 +856,33 @@ importers: specifier: workspace:* version: link:../../packages/plugin-react + playground/include-node-modules: + dependencies: + react: + specifier: ^19.1.0 + version: 19.1.0 + react-dom: + specifier: ^19.1.0 + version: 19.1.0(react@19.1.0) + devDependencies: + '@types/babel__core': + specifier: ^7.20.5 + version: 7.20.5 + '@types/react': + specifier: ^19.1.8 + version: 19.1.8 + '@types/react-dom': + specifier: ^19.1.6 + version: 19.1.6(@types/react@19.1.8) + '@vitejs/plugin-react': + specifier: workspace:* + version: link:../../packages/plugin-react + '@vitejs/test-package': + specifier: file:./test-package + version: test-package@file:playground/include-node-modules/test-package + + playground/include-node-modules/test-package: {} + playground/mdx: dependencies: react: @@ -881,7 +908,7 @@ importers: playground/react: dependencies: jsx-entry: - specifier: file:./jsx-entry + specifier: link:./jsx-entry version: link:jsx-entry react: specifier: ^19.1.0 @@ -1060,18 +1087,10 @@ packages: resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.25.9': - resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} - engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.27.1': resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.25.9': - resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.27.1': resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} @@ -1084,16 +1103,6 @@ packages: resolution: {integrity: sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==} engines: {node: '>=6.9.0'} - '@babel/parser@7.26.2': - resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/parser@7.27.0': - resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.27.7': resolution: {integrity: sha512-qnzXzDXdr/po3bOTbTIQZ7+TxNKxpkN5IifVLXS+r7qwynkZfPyjZfE7hCXbo7IoO9TNcSyibgONsf2HauUd3Q==} engines: {node: '>=6.0.0'} @@ -1192,14 +1201,6 @@ packages: resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==} engines: {node: '>=6.9.0'} - '@babel/types@7.26.0': - resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.27.0': - resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==} - engines: {node: '>=6.9.0'} - '@babel/types@7.27.7': resolution: {integrity: sha512-8OLQgDScAOHXnAz2cV+RfzzNMipuLVBz2biuAJFMV9bfkNf393je3VM8CLkjQodW5+iWsSJdSgSWT6rsZoXHPw==} engines: {node: '>=6.9.0'} @@ -5357,6 +5358,9 @@ packages: resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} engines: {node: '>=18'} + test-package@file:playground/include-node-modules/test-package: + resolution: {directory: playground/include-node-modules/test-package, type: directory} + tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -5907,7 +5911,7 @@ snapshots: '@babel/helper-module-imports@7.25.9': dependencies: '@babel/traverse': 7.27.7 - '@babel/types': 7.27.7 + '@babel/types': 7.28.0 transitivePeerDependencies: - supports-color @@ -5949,12 +5953,8 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-string-parser@7.25.9': {} - '@babel/helper-string-parser@7.27.1': {} - '@babel/helper-validator-identifier@7.25.9': {} - '@babel/helper-validator-identifier@7.27.1': {} '@babel/helper-validator-option@7.27.1': {} @@ -5964,14 +5964,6 @@ snapshots: '@babel/template': 7.27.2 '@babel/types': 7.28.0 - '@babel/parser@7.26.2': - dependencies: - '@babel/types': 7.27.0 - - '@babel/parser@7.27.0': - dependencies: - '@babel/types': 7.28.0 - '@babel/parser@7.27.7': dependencies: '@babel/types': 7.27.7 @@ -6038,7 +6030,7 @@ snapshots: '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0) - '@babel/types': 7.27.7 + '@babel/types': 7.28.0 transitivePeerDependencies: - supports-color @@ -6098,16 +6090,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/types@7.26.0': - dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - - '@babel/types@7.27.0': - dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/types@7.27.7': dependencies: '@babel/helper-string-parser': 7.27.1 @@ -7376,24 +7358,24 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.26.2 - '@babel/types': 7.26.0 + '@babel/parser': 7.28.0 + '@babel/types': 7.28.0 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.28.0 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 + '@babel/parser': 7.28.0 + '@babel/types': 7.28.0 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.28.0 '@types/chai@5.2.2': dependencies: @@ -10212,6 +10194,8 @@ snapshots: mkdirp: 3.0.1 yallist: 5.0.0 + test-package@file:playground/include-node-modules/test-package: {} + tinybench@2.9.0: {} tinyexec@0.3.2: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index c26c75e23..69069a427 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -10,3 +10,5 @@ catalogs: overrides: '@types/estree': ^1.0.8 + +dedupeInjectedDeps: false From 4005dbe1bb943b882d8199ef29ccaeb9d268784e Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 23 Jul 2025 12:18:23 +0900 Subject: [PATCH 125/313] docs(rsc): add `CONTRIBUTING.md` (#613) Co-authored-by: Claude --- CONTRIBUTING.md | 4 ++ packages/plugin-rsc/CONTRIBUTING.md | 63 +++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 packages/plugin-rsc/CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d912057d8..94862594c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -132,3 +132,7 @@ Some errors are masked and hidden away because of the layers of abstraction and In many test cases, we need to mock dependencies using `link:` and `file:` protocols. `pnpm` treats `link:` as symlinks and `file:` as hardlinks. To test dependencies as if they were copied into `node_modules`, use the `file:` protocol. Otherwise, use the `link:` protocol. For a mock dependency, make sure you add a `@vitejs/test-` prefix to the package name. This will avoid possible issues like false-positive alerts. + +## Contributing to `@vitejs/plugin-rsc` + +See [CONTRIBUTING.md](packages/plugin-rsc/CONTRIBUTING.md) in the `@vitejs/plugin-rsc` package for specific guidelines on contributing to the React Server Components plugin. diff --git a/packages/plugin-rsc/CONTRIBUTING.md b/packages/plugin-rsc/CONTRIBUTING.md new file mode 100644 index 000000000..74f5bdf1a --- /dev/null +++ b/packages/plugin-rsc/CONTRIBUTING.md @@ -0,0 +1,63 @@ +# Contributing to @vitejs/plugin-rsc + +This guide provides essential tips for contributors working on the RSC plugin. + +## Testing + +### E2E Test Setup + +Tests use Playwright and are located in `e2e/` and use `examples` as test apps. + +#### Test Fixture Patterns + +- `examples/basic` - comprehensive test suite for the RSC plugin +- `examples/starter` - lightweight base template for writing more targeted tests using `setupInlineFixture` utility +- `examples/e2e/temp/` - base directory for test projects + +### Adding New Test Cases + +**Expanding `examples/basic` (for comprehensive features)** +Best for features that should be part of the main test suite. `examples/basic` is mainly used for e2e testing: + +1. Add your test case files to `examples/basic/src/routes/` +2. Update the routing in `examples/basic/src/routes/root.tsx` +3. Add corresponding tests in `e2e/basic.test.ts` + +**Using `setupInlineFixture` (for specific edge cases)** +Best for testing specific edge cases or isolated features. See `e2e/ssr-thenable.test.ts` for the pattern. + + + +## Development Workflow + + + +```bash +# Build packages +pnpm dev # pnpm -C packages/plugin-rsc dev + +# Run examples +pnpm -C packages/plugin-rsc/examples/basic dev # build / preview +pnpm -C packages/plugin-rsc/examples/starter dev # build / preview + +# Run all e2e tests +pnpm -C packages/plugin-rsc test-e2e + +# Run with UI (this allows filtering interactively) +pnpm -C packages/plugin-rsc test-e2e --ui + +# Run specific test file +pnpm -C packages/plugin-rsc test-e2e basic + +# Run with filter/grep +pnpm -C packages/plugin-rsc test-e2e -g "hmr" + +# Test projects created with `setupInlineFixture` are locally runnable. For example: +pnpm -C packages/plugin-rsc/examples/e2e/temp/react-compiler dev +``` + +## Tips + +- Prefer `setupInlineFixture` for new tests - it's more maintainable and faster +- The `examples/basic` project contains comprehensive test scenarios +- Dependencies for temp test projects are managed in `examples/e2e/package.json` From 758dc732c5cd943e8a11885927ef5403a8903ff5 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 23 Jul 2025 13:19:37 +0900 Subject: [PATCH 126/313] ci: add workflow_dispatch to ci-rsc (#614) --- .github/workflows/ci-rsc.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci-rsc.yml b/.github/workflows/ci-rsc.yml index cb9e932cc..3f0f3cc00 100644 --- a/.github/workflows/ci-rsc.yml +++ b/.github/workflows/ci-rsc.yml @@ -3,6 +3,7 @@ name: ci-rsc permissions: {} on: + workflow_dispatch: push: branches: - main From d9cb92650b217abba4144d62737c5c696b55d0bb Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Thu, 24 Jul 2025 18:02:30 +0900 Subject: [PATCH 127/313] test(rsc): support `fs:cp` command in `setupInlineFixture` (#621) --- packages/plugin-rsc/CONTRIBUTING.md | 3 ++ packages/plugin-rsc/e2e/fixture.ts | 18 +++++--- packages/plugin-rsc/e2e/starter.test.ts | 58 +++++++++---------------- 3 files changed, 37 insertions(+), 42 deletions(-) diff --git a/packages/plugin-rsc/CONTRIBUTING.md b/packages/plugin-rsc/CONTRIBUTING.md index 74f5bdf1a..7de848fb2 100644 --- a/packages/plugin-rsc/CONTRIBUTING.md +++ b/packages/plugin-rsc/CONTRIBUTING.md @@ -36,6 +36,9 @@ Best for testing specific edge cases or isolated features. See `e2e/ssr-thenable # Build packages pnpm dev # pnpm -C packages/plugin-rsc dev +# Type check +pnpm -C packages/plugin-rsc tsc-dev + # Run examples pnpm -C packages/plugin-rsc/examples/basic dev # build / preview pnpm -C packages/plugin-rsc/examples/starter dev # build / preview diff --git a/packages/plugin-rsc/e2e/fixture.ts b/packages/plugin-rsc/e2e/fixture.ts index ac1d7385d..f5b883246 100644 --- a/packages/plugin-rsc/e2e/fixture.ts +++ b/packages/plugin-rsc/e2e/fixture.ts @@ -200,7 +200,7 @@ function editFileJson(filepath: string, edit: (s: string) => string) { export async function setupInlineFixture(options: { src: string dest: string - files?: Record + files?: Record }) { fs.rmSync(options.dest, { recursive: true, force: true }) fs.mkdirSync(options.dest, { recursive: true }) @@ -214,16 +214,24 @@ export async function setupInlineFixture(options: { // write additional files if (options.files) { for (let [filename, contents] of Object.entries(options.files)) { - let filepath = path.join(options.dest, filename) - fs.mkdirSync(path.dirname(filepath), { recursive: true }) - // strip indent + const destFile = path.join(options.dest, filename) + fs.mkdirSync(path.dirname(destFile), { recursive: true }) + + // custom command + if (typeof contents === 'object' && 'cp' in contents) { + const srcFile = path.join(options.dest, contents.cp) + fs.copyFileSync(srcFile, destFile) + continue + } + + // write a new file contents = contents.replace(/^\n*/, '').replace(/\s*$/, '\n') const indent = contents.match(/^\s*/)?.[0] ?? '' const strippedContents = contents .split('\n') .map((line) => line.replace(new RegExp(`^${indent}`), '')) .join('\n') - fs.writeFileSync(filepath, strippedContents) + fs.writeFileSync(destFile, strippedContents) } } } diff --git a/packages/plugin-rsc/e2e/starter.test.ts b/packages/plugin-rsc/e2e/starter.test.ts index 86752aa64..6d80bc986 100644 --- a/packages/plugin-rsc/e2e/starter.test.ts +++ b/packages/plugin-rsc/e2e/starter.test.ts @@ -92,12 +92,16 @@ test.describe(() => { src: 'examples/starter', dest: root, files: { + 'vite.config.base.ts': { cp: 'vite.config.ts' }, 'vite.config.ts': /* js */ ` import rsc from '@vitejs/plugin-rsc' import react from '@vitejs/plugin-react' - import { defineConfig } from 'vite' + import { defineConfig, mergeConfig } from 'vite' + import baseConfig from './vite.config.base.ts' + + delete baseConfig.plugins - export default defineConfig({ + const overrideConfig = defineConfig({ plugins: [ react({ babel: { plugins: ['babel-plugin-react-compiler'] }, @@ -105,15 +109,11 @@ test.describe(() => { ...p, applyToEnvironment: (e) => e.name === 'client', })), - rsc({ - entries: { - client: './src/framework/entry.browser.tsx', - ssr: './src/framework/entry.ssr.tsx', - rsc: './src/framework/entry.rsc.tsx', - } - }), + rsc(), ], }) + + export default mergeConfig(baseConfig, overrideConfig) `, }, }) @@ -145,24 +145,16 @@ test.describe(() => { src: 'examples/starter', dest: root, files: { + 'vite.config.base.ts': { cp: 'vite.config.ts' }, 'vite.config.ts': /* js */ ` - import rsc from '@vitejs/plugin-rsc' - import react from '@vitejs/plugin-react' - import { defineConfig } from 'vite' + import { defineConfig, mergeConfig } from 'vite' + import baseConfig from './vite.config.base.ts' - export default defineConfig({ + const overrideConfig = defineConfig({ base: '/custom-base/', - plugins: [ - react(), - rsc({ - entries: { - client: './src/framework/entry.browser.tsx', - ssr: './src/framework/entry.ssr.tsx', - rsc: './src/framework/entry.rsc.tsx', - } - }), - ], }) + + export default mergeConfig(baseConfig, overrideConfig) `, }, }) @@ -193,22 +185,12 @@ test.describe(() => { src: 'examples/starter', dest: root, files: { + 'vite.config.base.ts': { cp: 'vite.config.ts' }, 'vite.config.ts': /* js */ ` - import rsc from '@vitejs/plugin-rsc' - import react from '@vitejs/plugin-react' - import { defineConfig, createRunnableDevEnvironment } from 'vite' + import { defineConfig, mergeConfig, createRunnableDevEnvironment } from 'vite' + import baseConfig from './vite.config.base.ts' - export default defineConfig({ - plugins: [ - react(), - rsc({ - entries: { - client: './src/framework/entry.browser.tsx', - ssr: './src/framework/entry.ssr.tsx', - rsc: './src/framework/entry.rsc.tsx', - } - }), - ], + const overrideConfig = defineConfig({ environments: { ssr: { dev: { @@ -234,6 +216,8 @@ test.describe(() => { }, }, }) + + export default mergeConfig(baseConfig, overrideConfig) `, }, }) From 5314ed60572e2c89963e5a720d21bcad17687382 Mon Sep 17 00:00:00 2001 From: Henrique Limas Date: Thu, 24 Jul 2025 16:14:48 -0700 Subject: [PATCH 128/313] feat(rsc): add support for `experimental.renderBuiltUrl` on assets metadata (#612) Co-authored-by: hlimas Co-authored-by: Hiroshi Ogawa --- packages/plugin-rsc/e2e/fixture.ts | 10 +- packages/plugin-rsc/e2e/starter.test.ts | 159 +++++++++++++++++++++ packages/plugin-rsc/src/plugin.ts | 111 +++++++++++--- packages/plugin-rsc/src/ssr.tsx | 6 +- packages/plugin-rsc/src/types/virtual.d.ts | 2 +- 5 files changed, 267 insertions(+), 21 deletions(-) diff --git a/packages/plugin-rsc/e2e/fixture.ts b/packages/plugin-rsc/e2e/fixture.ts index f5b883246..47429e119 100644 --- a/packages/plugin-rsc/e2e/fixture.ts +++ b/packages/plugin-rsc/e2e/fixture.ts @@ -200,7 +200,10 @@ function editFileJson(filepath: string, edit: (s: string) => string) { export async function setupInlineFixture(options: { src: string dest: string - files?: Record + files?: Record< + string, + string | { cp: string } | { edit: (s: string) => string } + > }) { fs.rmSync(options.dest, { recursive: true, force: true }) fs.mkdirSync(options.dest, { recursive: true }) @@ -223,6 +226,11 @@ export async function setupInlineFixture(options: { fs.copyFileSync(srcFile, destFile) continue } + if (typeof contents === 'object' && 'edit' in contents) { + const editted = contents.edit(fs.readFileSync(destFile, 'utf-8')) + fs.writeFileSync(destFile, editted) + continue + } // write a new file contents = contents.replace(/^\n*/, '').replace(/\s*$/, '\n') diff --git a/packages/plugin-rsc/e2e/starter.test.ts b/packages/plugin-rsc/e2e/starter.test.ts index 6d80bc986..df0d93b0b 100644 --- a/packages/plugin-rsc/e2e/starter.test.ts +++ b/packages/plugin-rsc/e2e/starter.test.ts @@ -229,6 +229,165 @@ test.describe(() => { }) }) +test.describe(() => { + const root = 'examples/e2e/temp/renderBuiltUrl-runtime' + + test.beforeAll(async () => { + const renderBuiltUrl = (filename: string) => { + return { + runtime: `__dynamicBase + ${JSON.stringify(filename)}`, + } + } + await setupInlineFixture({ + src: 'examples/starter', + dest: root, + files: { + 'vite.config.ts': /* js */ ` + import rsc from '@vitejs/plugin-rsc' + import react from '@vitejs/plugin-react' + import { defineConfig } from 'vite' + + export default defineConfig({ + plugins: [ + react(), + rsc({ + entries: { + client: './src/framework/entry.browser.tsx', + ssr: './src/framework/entry.ssr.tsx', + rsc: './src/framework/entry.rsc.tsx', + } + }), + { + // simulate custom asset server + name: 'custom-server', + config(_config, env) { + if (env.isPreview) { + globalThis.__dynamicBase = '/custom-server/'; + } + }, + configurePreviewServer(server) { + server.middlewares.use((req, res, next) => { + const url = new URL(req.url ?? '', "http://localhost"); + if (url.pathname.startsWith('/custom-server/')) { + req.url = url.pathname.replace('/custom-server/', '/'); + } + next(); + }); + } + } + ], + // tweak chunks to test "__dynamicBase" used on browser for "__vite__mapDeps" + environments: { + client: { + build: { + rollupOptions: { + output: { + manualChunks: (id) => { + if (id.includes('node_modules/react/')) { + return 'lib-react'; + } + } + }, + } + } + } + }, + experimental: { + renderBuiltUrl: ${renderBuiltUrl.toString()} + }, + }) + `, + 'src/root.tsx': { + // define __dynamicBase on browser via head script + edit: (s: string) => + s.replace( + '', + () => + ``, + ), + }, + }, + }) + }) + + test.describe('dev-renderBuiltUrl-runtime', () => { + const f = useFixture({ root, mode: 'dev' }) + + test('basic', async ({ page }) => { + using _ = expectNoPageError(page) + await page.goto(f.url()) + await waitForHydration_(page) + }) + }) + + test.describe('build-renderBuiltUrl-runtime', () => { + const f = useFixture({ root, mode: 'build' }) + defineTest(f) + + test('verify runtime url', () => { + const manifestFileContent = fs.readFileSync( + f.root + '/dist/ssr/__vite_rsc_assets_manifest.js', + 'utf-8', + ) + expect(manifestFileContent).toContain(`__dynamicBase + "assets/client-`) + }) + }) +}) + +test.describe(() => { + const root = 'examples/e2e/temp/renderBuiltUrl-string' + + test.beforeAll(async () => { + await setupInlineFixture({ + src: 'examples/starter', + dest: root, + files: { + 'vite.config.ts': /* js */ ` + import rsc from '@vitejs/plugin-rsc' + import react from '@vitejs/plugin-react' + import { defineConfig } from 'vite' + + export default defineConfig({ + plugins: [ + react(), + rsc({ + entries: { + client: './src/framework/entry.browser.tsx', + ssr: './src/framework/entry.ssr.tsx', + rsc: './src/framework/entry.rsc.tsx', + } + }), + { + // simulate custom asset server + name: 'custom-server', + configurePreviewServer(server) { + server.middlewares.use((req, res, next) => { + const url = new URL(req.url ?? '', "http://localhost"); + if (url.pathname.startsWith('/custom-server/')) { + req.url = url.pathname.replace('/custom-server/', '/'); + } + next(); + }); + } + } + ], + experimental: { + renderBuiltUrl(filename) { + return '/custom-server/' + filename; + } + } + }) + `, + }, + }) + }) + + test.describe('build-renderBuiltUrl-string', () => { + const f = useFixture({ root, mode: 'build' }) + defineTest(f) + }) +}) + function defineTest(f: Fixture, variant?: 'no-ssr' | 'dev-production') { const waitForHydration: typeof waitForHydration_ = (page) => waitForHydration_(page, variant === 'no-ssr' ? '#root' : 'body') diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index 8f7f7f0f3..0ef7db0b8 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -242,10 +242,8 @@ export default function vitePluginRsc( serverResourcesMetaMap = sortObject(serverResourcesMetaMap) await builder.build(builder.environments.client!) - const assetsManifestCode = `export default ${JSON.stringify( + const assetsManifestCode = `export default ${serializeValueWithRuntime( buildAssetsManifest, - null, - 2, )}` const manifestPath = path.join( builder.environments!.rsc!.config.build!.outDir!, @@ -586,7 +584,7 @@ export default function vitePluginRsc( assert(this.environment.mode === 'dev') const entryUrl = assetsURL('@id/__x00__' + VIRTUAL_ENTRIES.browser) const manifest: AssetsManifest = { - bootstrapScriptContent: `import(${JSON.stringify(entryUrl)})`, + bootstrapScriptContent: `import(${serializeValueWithRuntime(entryUrl)})`, clientReferenceDeps: {}, } return `export default ${JSON.stringify(manifest, null, 2)}` @@ -640,8 +638,16 @@ export default function vitePluginRsc( mergeAssetDeps(deps, entry.deps), ) } + let bootstrapScriptContent: string | RuntimeAsset + if (typeof entryUrl === 'string') { + bootstrapScriptContent = `import(${JSON.stringify(entryUrl)})` + } else { + bootstrapScriptContent = new RuntimeAsset( + `"import(" + JSON.stringify(${entryUrl.runtime}) + ")"`, + ) + } buildAssetsManifest = { - bootstrapScriptContent: `import(${JSON.stringify(entryUrl)})`, + bootstrapScriptContent, clientReferenceDeps, serverResources, } @@ -671,10 +677,8 @@ export default function vitePluginRsc( if (this.environment.name === 'ssr') { // output client manifest to non-client build directly. // this makes server build to be self-contained and deploy-able for cloudflare. - const assetsManifestCode = `export default ${JSON.stringify( + const assetsManifestCode = `export default ${serializeValueWithRuntime( buildAssetsManifest, - null, - 2, )}` for (const name of ['ssr', 'rsc']) { const manifestPath = path.join( @@ -1273,15 +1277,76 @@ function generateDynamicImportCode(map: Record) { return `export default {${code}};\n` } -// // https://github.com/vitejs/vite/blob/2a7473cfed96237711cda9f736465c84d442ddef/packages/vite/src/node/plugins/importAnalysisBuild.ts#L222-L230 +class RuntimeAsset { + runtime: string + constructor(value: string) { + this.runtime = value + } +} + +function serializeValueWithRuntime(value: any) { + const replacements: [string, string][] = [] + let result = JSON.stringify( + value, + (_key, value) => { + if (value instanceof RuntimeAsset) { + const placeholder = `__runtime_placeholder_${replacements.length}__` + replacements.push([placeholder, value.runtime]) + return placeholder + } + + return value + }, + 2, + ) + + for (const [placeholder, runtime] of replacements) { + result = result.replace(`"${placeholder}"`, runtime) + } + + return result +} + function assetsURL(url: string) { + if ( + config.command === 'build' && + typeof config.experimental?.renderBuiltUrl === 'function' + ) { + // https://github.com/vitejs/vite/blob/bdde0f9e5077ca1a21a04eefc30abad055047226/packages/vite/src/node/build.ts#L1369 + const result = config.experimental.renderBuiltUrl(url, { + type: 'asset', + hostType: 'js', + ssr: true, + hostId: '', + }) + + if (typeof result === 'object') { + if (result.runtime) { + return new RuntimeAsset(result.runtime) + } + assert( + !result.relative, + '"result.relative" not supported on renderBuiltUrl() for RSC', + ) + } else if (result) { + return result satisfies string + } + } + + // https://github.com/vitejs/vite/blob/2a7473cfed96237711cda9f736465c84d442ddef/packages/vite/src/node/plugins/importAnalysisBuild.ts#L222-L230 return config.base + url } function assetsURLOfDeps(deps: AssetDeps) { return { - js: deps.js.map((href) => assetsURL(href)), - css: deps.css.map((href) => assetsURL(href)), + js: deps.js.map((href) => { + assert(typeof href === 'string') + return assetsURL(href) + }), + css: deps.css.map((href) => { + assert(typeof href === 'string') + return assetsURL(href) + }), } } @@ -1290,12 +1355,23 @@ function assetsURLOfDeps(deps: AssetDeps) { // export type AssetsManifest = { - bootstrapScriptContent: string + bootstrapScriptContent: string | RuntimeAsset clientReferenceDeps: Record - serverResources?: Record + serverResources?: Record> } export type AssetDeps = { + js: (string | RuntimeAsset)[] + css: (string | RuntimeAsset)[] +} + +export type ResolvedAssetsManifest = { + bootstrapScriptContent: string + clientReferenceDeps: Record + serverResources?: Record> +} + +export type ResolvedAssetDeps = { js: string[] css: string[] } @@ -1574,7 +1650,7 @@ export function vitePluginRscCss( this.addWatchFile(file) } const hrefs = result.hrefs.map((href) => assetsURL(href.slice(1))) - return `export default ${JSON.stringify(hrefs)}` + return `export default ${serializeValueWithRuntime(hrefs)}` } }, }, @@ -1661,7 +1737,7 @@ export function vitePluginRscCss( encodeURIComponent(importer), ] const deps = assetsURLOfDeps({ css: cssHrefs, js: jsHrefs }) - return generateResourcesCode(JSON.stringify(deps, null, 2)) + return generateResourcesCode(serializeValueWithRuntime(deps)) } else { const key = normalizePath(path.relative(config.root, importer)) serverResourcesMetaMap[importer] = { key } @@ -1742,7 +1818,10 @@ function collectModuleDependents(mods: EnvironmentModuleNode[]) { } function generateResourcesCode(depsCode: string) { - const ResourcesFn = (React: typeof import('react'), deps: AssetDeps) => { + const ResourcesFn = ( + React: typeof import('react'), + deps: ResolvedAssetDeps, + ) => { return function Resources() { return React.createElement(React.Fragment, null, [ ...deps.css.map((href: string) => diff --git a/packages/plugin-rsc/src/ssr.tsx b/packages/plugin-rsc/src/ssr.tsx index ecd0b18fb..dec5e6c17 100644 --- a/packages/plugin-rsc/src/ssr.tsx +++ b/packages/plugin-rsc/src/ssr.tsx @@ -2,7 +2,7 @@ import assetsManifest from 'virtual:vite-rsc/assets-manifest' import * as clientReferences from 'virtual:vite-rsc/client-references' import * as ReactDOM from 'react-dom' import { setRequireModule } from './core/ssr' -import type { AssetDeps } from './plugin' +import type { ResolvedAssetDeps } from './plugin' export { createServerConsumerManifest } from './core/ssr' @@ -37,7 +37,7 @@ function initialize(): void { } // preload/preinit during getter access since `load` is cached on production -function wrapResourceProxy(mod: any, deps?: AssetDeps) { +function wrapResourceProxy(mod: any, deps?: ResolvedAssetDeps) { return new Proxy(mod, { get(target, p, receiver) { if (p in mod) { @@ -50,7 +50,7 @@ function wrapResourceProxy(mod: any, deps?: AssetDeps) { }) } -function preloadDeps(deps: AssetDeps) { +function preloadDeps(deps: ResolvedAssetDeps) { for (const href of deps.js) { ReactDOM.preloadModule(href, { as: 'script', diff --git a/packages/plugin-rsc/src/types/virtual.d.ts b/packages/plugin-rsc/src/types/virtual.d.ts index 81bbc242d..eb2108382 100644 --- a/packages/plugin-rsc/src/types/virtual.d.ts +++ b/packages/plugin-rsc/src/types/virtual.d.ts @@ -1,5 +1,5 @@ declare module 'virtual:vite-rsc/assets-manifest' { - const assetsManifest: import('../plugin').AssetsManifest + const assetsManifest: import('../plugin').ResolvedAssetsManifest export default assetsManifest } From 6ab197380edb377f37e6ce7b288c2f04db9ef84d Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Fri, 25 Jul 2025 08:16:34 +0900 Subject: [PATCH 129/313] release: plugin-rsc@0.4.13 --- packages/plugin-rsc/CHANGELOG.md | 41 ++++++++++++++++++++++++++++++++ packages/plugin-rsc/package.json | 2 +- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/packages/plugin-rsc/CHANGELOG.md b/packages/plugin-rsc/CHANGELOG.md index 8148f449d..41df21904 100644 --- a/packages/plugin-rsc/CHANGELOG.md +++ b/packages/plugin-rsc/CHANGELOG.md @@ -1,3 +1,44 @@ +## [0.4.13](https://github.com/vitejs/vite-plugin-react/compare/plugin-rsc@0.4.12...plugin-rsc@0.4.13) (2025-07-24) +### Features + +* **rsc:** add support for `experimental.renderBuiltUrl` on assets metadata ([#612](https://github.com/vitejs/vite-plugin-react/issues/612)) ([5314ed6](https://github.com/vitejs/vite-plugin-react/commit/5314ed60572e2c89963e5a720d21bcad17687382)) + +### Bug Fixes + +* **deps:** update all non-major dependencies ([#568](https://github.com/vitejs/vite-plugin-react/issues/568)) ([d14f31d](https://github.com/vitejs/vite-plugin-react/commit/d14f31d3bf8487346ae6f9db7e6ca7263c93066b)) +* **deps:** update all non-major dependencies ([#593](https://github.com/vitejs/vite-plugin-react/issues/593)) ([9ce3b22](https://github.com/vitejs/vite-plugin-react/commit/9ce3b22e4bc7db28f549b9c9b9195d2bd82ff736)) +* **rsc:** await handler to avoid unhandled rejection ([#576](https://github.com/vitejs/vite-plugin-react/issues/576)) ([fa60127](https://github.com/vitejs/vite-plugin-react/commit/fa60127be46d48ecd8a8b0d0e7e6751ed11303e2)) +* **rsc:** ensure trailing slash of `BASE_URL` ([#589](https://github.com/vitejs/vite-plugin-react/issues/589)) ([fa1d260](https://github.com/vitejs/vite-plugin-react/commit/fa1d260ef384d986284aaec6e0984967f3b436ad)) +* **rsc:** update rsc-html-stream v0.0.7 ([#578](https://github.com/vitejs/vite-plugin-react/issues/578)) ([df6a38e](https://github.com/vitejs/vite-plugin-react/commit/df6a38e42339cf5deecd3f1b6c0aa4dd838833c5)) + +### Documentation + +* **rsc:** add `CONTRIBUTING.md` ([#613](https://github.com/vitejs/vite-plugin-react/issues/613)) ([4005dbe](https://github.com/vitejs/vite-plugin-react/commit/4005dbe1bb943b882d8199ef29ccaeb9d268784e)) + +### Miscellaneous Chores + +* replace `build --app` with `build` in examples ([#572](https://github.com/vitejs/vite-plugin-react/issues/572)) ([7c564ff](https://github.com/vitejs/vite-plugin-react/commit/7c564ff4f290a554927f2eef600e82bffee16e6b)) +* **rsc:** comment ([#599](https://github.com/vitejs/vite-plugin-react/issues/599)) ([b550b63](https://github.com/vitejs/vite-plugin-react/commit/b550b63fe7f6ef82588ff0d60389d11906c3cc4e)) +* **rsc:** deprecate `@vitejs/plugin-rsc/extra` API ([#592](https://github.com/vitejs/vite-plugin-react/issues/592)) ([bd6a2a1](https://github.com/vitejs/vite-plugin-react/commit/bd6a2a1ff272c8550f92bc1530c7b28fb81e1c60)) +* **rsc:** deprecate `rsc-html-stream` re-exports ([#602](https://github.com/vitejs/vite-plugin-react/issues/602)) ([8e0e8b6](https://github.com/vitejs/vite-plugin-react/commit/8e0e8b60c511f34df188a8e8b103cf273891d7ad)) +* **rsc:** fix temporary references in examples ([#603](https://github.com/vitejs/vite-plugin-react/issues/603)) ([22e5398](https://github.com/vitejs/vite-plugin-react/commit/22e53987a5548d237fcbe61377bd1da6e86947ef)) +* **rsc:** move comment ([#604](https://github.com/vitejs/vite-plugin-react/issues/604)) ([4d6c72f](https://github.com/vitejs/vite-plugin-react/commit/4d6c72f81d64972ac84735240d27516be81431f8)) +* **rsc:** remove `@vite/plugin-rsc/extra` API usages from examples ([#596](https://github.com/vitejs/vite-plugin-react/issues/596)) ([87319bf](https://github.com/vitejs/vite-plugin-react/commit/87319bf94ddb07061a1a80d3eefbfadb980f7008)) +* **rsc:** remove console.log ([#607](https://github.com/vitejs/vite-plugin-react/issues/607)) ([2a7ff5c](https://github.com/vitejs/vite-plugin-react/commit/2a7ff5c93e600b06aafc7ce1a6d8a11c2ad4cf2e)) +* **rsc:** tweak changelog ([#570](https://github.com/vitejs/vite-plugin-react/issues/570)) ([8804446](https://github.com/vitejs/vite-plugin-react/commit/88044469a6399c8a1d909b564f6ddc039782c066)) +* **rsc:** update React Router RSC references ([#581](https://github.com/vitejs/vite-plugin-react/issues/581)) ([d464e8f](https://github.com/vitejs/vite-plugin-react/commit/d464e8fc9e8e14bdc84051de9ffacec16317d2ae)) + +### Tests + +* **rsc:** add more basic tests to starter ([#600](https://github.com/vitejs/vite-plugin-react/issues/600)) ([d7fcdd8](https://github.com/vitejs/vite-plugin-react/commit/d7fcdd8550a7a11da01887cbf48a646af898b7f1)) +* **rsc:** add SSR thenable workaround in examples ([#591](https://github.com/vitejs/vite-plugin-react/issues/591)) ([bfd434f](https://github.com/vitejs/vite-plugin-react/commit/bfd434f7fdd063ad017aa3c3a41e42983efc0ef4)) +* **rsc:** add transitive cjs dep example ([#611](https://github.com/vitejs/vite-plugin-react/issues/611)) ([2a81b90](https://github.com/vitejs/vite-plugin-react/commit/2a81b9015286558c1463ab8079a7a6e40a82a5c6)) +* **rsc:** refactor variant tests ([#601](https://github.com/vitejs/vite-plugin-react/issues/601)) ([5167266](https://github.com/vitejs/vite-plugin-react/commit/5167266aff6671065cf5b49cf8ada3d0ace2bbb4)) +* **rsc:** remove global unhandled error handlers ([#597](https://github.com/vitejs/vite-plugin-react/issues/597)) ([c5f0bab](https://github.com/vitejs/vite-plugin-react/commit/c5f0babdc06c813bbef08d3c44ee696789416116)) +* **rsc:** support `fs:cp` command in `setupInlineFixture` ([#621](https://github.com/vitejs/vite-plugin-react/issues/621)) ([d9cb926](https://github.com/vitejs/vite-plugin-react/commit/d9cb92650b217abba4144d62737c5c696b55d0bb)) +* **rsc:** test build with `NODE_ENV=development` and vice versa ([#606](https://github.com/vitejs/vite-plugin-react/issues/606)) ([e8fa2d0](https://github.com/vitejs/vite-plugin-react/commit/e8fa2d0b4cb6e1dd3132fe8b7f45529a74d9be03)) +* **rsc:** test module runner `hmr: false` ([#595](https://github.com/vitejs/vite-plugin-react/issues/595)) ([7223093](https://github.com/vitejs/vite-plugin-react/commit/7223093d793242f3d1ef313bbfec692499f0659e)) + ## [0.4.12](https://github.com/vitejs/vite-plugin-react/compare/plugin-rsc@0.4.11...plugin-rsc@0.4.12) (2025-07-14) ### Features diff --git a/packages/plugin-rsc/package.json b/packages/plugin-rsc/package.json index 68370d293..afaf97c7b 100644 --- a/packages/plugin-rsc/package.json +++ b/packages/plugin-rsc/package.json @@ -1,6 +1,6 @@ { "name": "@vitejs/plugin-rsc", - "version": "0.4.12", + "version": "0.4.13", "description": "React Server Components (RSC) support for Vite.", "keywords": [ "vite", From 73d457b2774c26a9fd1ec0f53aee8b4ff60dacd6 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Fri, 25 Jul 2025 16:23:12 +0900 Subject: [PATCH 130/313] docs(rsc): fix jsdoc (#623) --- packages/plugin-rsc/src/plugin.ts | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index 0ef7db0b8..8c8009c20 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -95,19 +95,26 @@ export type RscPluginOptions = { /** * This option allows customizing how client build copies assets from server build. - * By default, all assets are copied, but frameworks might want to establish some convention - * to tighten security based on this option. + * By default, all assets are copied, but frameworks can establish server asset convention + * to tighten security using this option. */ copyServerAssetsToClient?: (fileName: string) => boolean - defineEncryptionKey?: string - /** - * Allows enabling action closure encryption for debugging purpose. + * This option allows disabling action closure encryption for debugging purpose. * @default true */ enableActionEncryption?: boolean + /** + * By default, the plugin uses a build-time generated encryption key for + * "use server" closure argument binding. + * This can be overwritten by configuring `defineEncryptionKey` option, + * for example, to obtain a key through environment variable during runtime. + * cf. https://nextjs.org/docs/app/guides/data-security#overwriting-encryption-keys-advanced + */ + defineEncryptionKey?: string + /** Escape hatch for Waku's `allowServer` */ keepUseCientProxy?: boolean } From d28356f5caca2867ced9af3a02a3f441ff4a5238 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sat, 26 Jul 2025 16:04:17 +0900 Subject: [PATCH 131/313] fix(rsc): handle transform errors before server hmr (#626) Co-authored-by: Claude --- packages/plugin-rsc/e2e/syntax-error.test.ts | 207 +++++++++++++++++++ packages/plugin-rsc/src/plugin.ts | 23 ++- packages/plugin-rsc/src/vite-utils.ts | 29 ++- 3 files changed, 257 insertions(+), 2 deletions(-) create mode 100644 packages/plugin-rsc/e2e/syntax-error.test.ts diff --git a/packages/plugin-rsc/e2e/syntax-error.test.ts b/packages/plugin-rsc/e2e/syntax-error.test.ts new file mode 100644 index 000000000..75425713c --- /dev/null +++ b/packages/plugin-rsc/e2e/syntax-error.test.ts @@ -0,0 +1,207 @@ +import { test, expect } from '@playwright/test' +import { setupInlineFixture, useFixture } from './fixture' +import { waitForHydration, expectNoReload } from './helper' + +test.describe(() => { + const root = 'examples/e2e/temp/syntax-error' + + test.beforeAll(async () => { + await setupInlineFixture({ + src: 'examples/starter', + dest: root, + files: { + 'src/root.tsx': /* tsx */ ` + import { TestSyntaxErrorClient } from './client.tsx' + + export function Root() { + return ( + + + + + + +
server:ok
+ + + ) + } + `, + 'src/client.tsx': /* tsx */ ` + "use client"; + import { useState } from 'react' + + export function TestSyntaxErrorClient() { + const [count, setCount] = useState(0) + + return ( +
+ +
client:ok
+
+ ) + } + `, + }, + }) + }) + + test.describe(() => { + const f = useFixture({ root, mode: 'dev' }) + + test('client hmr', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await using _ = await expectNoReload(page) + await expect(page.getByTestId('client-content')).toHaveText('client:ok') + + // Set client state to verify preservation after HMR + await page.getByTestId('client-counter').click() + await expect(page.getByTestId('client-counter')).toHaveText( + 'Client Count: 1', + ) + + // add syntax error + const editor = f.createEditor('src/client.tsx') + editor.edit((s) => + s.replace( + '
client:ok
', + '
client:broken<
', + ), + ) + await expect(page.locator('vite-error-overlay')).toBeVisible() + + // fix syntax error + await page.waitForTimeout(200) + editor.edit((s) => + s.replace( + '
client:broken<
', + '
client:fixed
', + ), + ) + await expect(page.locator('vite-error-overlay')).not.toBeVisible() + await expect(page.getByTestId('client-syntax-ready')).toBeVisible() + await expect(page.getByTestId('client-content')).toHaveText( + 'client:fixed', + ) + await expect(page.getByTestId('client-counter')).toHaveText( + 'Client Count: 1', + ) + }) + }) + + test.describe(() => { + const f = useFixture({ root, mode: 'dev' }) + + test('server hmr', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await using _ = await expectNoReload(page) + + await expect(page.getByTestId('server-content')).toHaveText('server:ok') + + // Set client state to verify preservation during server HMR + await page.getByTestId('client-counter').click() + await expect(page.getByTestId('client-counter')).toHaveText( + 'Client Count: 1', + ) + + // add syntax error + const editor = f.createEditor('src/root.tsx') + editor.edit((s) => + s.replace( + '
server:ok
', + '
server:broken<
', + ), + ) + await expect(page.locator('vite-error-overlay')).toBeVisible() + + // fix syntax error + await page.waitForTimeout(200) + editor.edit((s) => + s.replace( + '
server:broken<
', + '
server:fixed
', + ), + ) + await expect(page.locator('vite-error-overlay')).not.toBeVisible() + await expect(page.getByTestId('server-content')).toHaveText( + 'server:fixed', + ) + await expect(page.getByTestId('client-counter')).toHaveText( + 'Client Count: 1', + ) + }) + }) + + test.describe(() => { + const f = useFixture({ root, mode: 'dev' }) + + test('client ssr', async ({ page }) => { + // add syntax error + const editor = f.createEditor('src/client.tsx') + editor.edit((s) => + s.replace( + '
client:ok
', + '
client:broken<
', + ), + ) + await page.goto(f.url()) + await expect(page.locator('body')).toContainText('src/client.tsx:15') + + // fix syntax error + await page.waitForTimeout(200) + editor.edit((s) => + s.replace( + '
client:broken<
', + '
client:fixed
', + ), + ) + await expect(async () => { + await page.goto(f.url()) + await waitForHydration(page) + await expect(page.getByTestId('client-content')).toHaveText( + 'client:fixed', + ) + }).toPass() + }) + }) + + test.describe(() => { + const f = useFixture({ root, mode: 'dev' }) + + test('server ssr', async ({ page }) => { + // add syntax error + const editor = f.createEditor('src/root.tsx') + editor.edit((s) => + s.replace( + '
server:ok
', + '
server:broken<
', + ), + ) + await page.goto(f.url()) + await expect(page.locator('body')).toContainText('src/root.tsx:11') + + // fix syntax error + await page.waitForTimeout(200) + editor.edit((s) => + s.replace( + '
server:broken<
', + '
server:fixed
', + ), + ) + await expect(async () => { + await page.goto(f.url()) + await waitForHydration(page) + await expect(page.getByTestId('server-content')).toHaveText( + 'server:fixed', + ) + }).toPass() + }) + }) +}) diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index 8c8009c20..304d7c514 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -31,7 +31,7 @@ import { } from './transforms' import { generateEncryptionKey, toBase64 } from './utils/encryption-utils' import { createRpcServer } from './utils/rpc' -import { normalizeViteImportAnalysisUrl } from './vite-utils' +import { normalizeViteImportAnalysisUrl, prepareError } from './vite-utils' // state for build orchestration let serverReferences: Record = {} @@ -382,6 +382,20 @@ export default function vitePluginRsc( if (!isInsideClientBoundary(ctx.modules)) { if (this.environment.name === 'rsc') { + // transform js to surface syntax errors + for (const mod of ctx.modules) { + if (mod.type === 'js') { + try { + await this.environment.transformRequest(mod.url) + } catch (e) { + server.environments.client.hot.send({ + type: 'error', + err: prepareError(e as any), + }) + throw e + } + } + } // server hmr ctx.server.environments.client.hot.send({ type: 'custom', @@ -773,6 +787,13 @@ window.__vite_plugin_react_preamble_installed__ = true; code += ` const ssrCss = document.querySelectorAll("link[rel='stylesheet']"); import.meta.hot.on("vite:beforeUpdate", () => ssrCss.forEach(node => node.remove())); +` + // close error overlay after syntax error is fixed and hmr is triggered. + // https://github.com/vitejs/vite/blob/8033e5bf8d3ff43995d0620490ed8739c59171dd/packages/vite/src/client/client.ts#L318-L320 + code += ` +import.meta.hot.on("rsc:update", () => { + document.querySelectorAll("vite-error-overlay").forEach((n) => n.close()) +}); ` return code }, diff --git a/packages/plugin-rsc/src/vite-utils.ts b/packages/plugin-rsc/src/vite-utils.ts index b23e58444..d65a5f008 100644 --- a/packages/plugin-rsc/src/vite-utils.ts +++ b/packages/plugin-rsc/src/vite-utils.ts @@ -2,7 +2,8 @@ import fs from 'node:fs' import path from 'node:path' -import type { DevEnvironment, Rollup } from 'vite' +import type { DevEnvironment, ErrorPayload, Rollup } from 'vite' +import { stripVTControlCharacters as strip } from 'node:util' export const VALID_ID_PREFIX = `/@id/` @@ -125,3 +126,29 @@ export function normalizeViteImportAnalysisUrl( return url } + +// error formatting +// https://github.com/vitejs/vite/blob/8033e5bf8d3ff43995d0620490ed8739c59171dd/packages/vite/src/node/server/middlewares/error.ts#L11 + +type RollupError = Rollup.RollupError + +export function prepareError(err: Error | RollupError): ErrorPayload['err'] { + // only copy the information we need and avoid serializing unnecessary + // properties, since some errors may attach full objects (e.g. PostCSS) + return { + message: strip(err.message), + stack: strip(cleanStack(err.stack || '')), + id: (err as RollupError).id, + frame: strip((err as RollupError).frame || ''), + plugin: (err as RollupError).plugin, + pluginCode: (err as RollupError).pluginCode?.toString(), + loc: (err as RollupError).loc, + } +} + +function cleanStack(stack: string) { + return stack + .split(/\n/) + .filter((l) => /^\s*at/.test(l)) + .join('\n') +} From 47d02d0643cecc8243c72fddd9e125cc3d020847 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Sat, 26 Jul 2025 16:51:53 +0900 Subject: [PATCH 132/313] feat(rsc): validate `client-only` and `server-only` import during resolve (#624) Co-authored-by: Hiroshi Ogawa --- .../plugin-rsc/e2e/validate-imports.test.ts | 160 ++++++++++++++++++ packages/plugin-rsc/src/plugin.ts | 52 ++++++ 2 files changed, 212 insertions(+) create mode 100644 packages/plugin-rsc/e2e/validate-imports.test.ts diff --git a/packages/plugin-rsc/e2e/validate-imports.test.ts b/packages/plugin-rsc/e2e/validate-imports.test.ts new file mode 100644 index 000000000..7f032bad4 --- /dev/null +++ b/packages/plugin-rsc/e2e/validate-imports.test.ts @@ -0,0 +1,160 @@ +import { test, expect } from '@playwright/test' +import { setupInlineFixture, useFixture, type Fixture } from './fixture' +import { x } from 'tinyexec' +import { expectNoPageError, waitForHydration } from './helper' + +test.describe('validate imports', () => { + test.describe('valid imports', () => { + const root = 'examples/e2e/temp/validate-imports' + test.beforeAll(async () => { + await setupInlineFixture({ + src: 'examples/starter', + dest: root, + files: { + 'src/client.tsx': /* tsx */ ` + "use client"; + import 'client-only'; + + export function TestClient() { + return
[test-client]
+ } + `, + 'src/root.tsx': /* tsx */ ` + import { TestClient } from './client.tsx' + import 'server-only'; + + export function Root() { + return ( + + + + + +
[test-server]
+ + + + ) + } + `, + }, + }) + }) + + test.describe('dev', () => { + const f = useFixture({ root, mode: 'dev' }) + defineTest(f) + }) + + test.describe('build', () => { + const f = useFixture({ root, mode: 'build' }) + defineTest(f) + }) + + function defineTest(f: Fixture) { + test('basic', async ({ page }) => { + using _ = expectNoPageError(page) + await page.goto(f.url()) + await waitForHydration(page) + }) + } + }) + + test.describe('server-only on client', () => { + const root = 'examples/e2e/temp/validate-server-only' + test.beforeAll(async () => { + await setupInlineFixture({ + src: 'examples/starter', + dest: root, + files: { + 'src/client.tsx': /* tsx */ ` + "use client"; + import 'server-only'; + + export function TestClient() { + return
[test-client]
+ } + `, + 'src/root.tsx': /* tsx */ ` + import { TestClient } from './client.tsx' + import 'server-only'; + + export function Root() { + return ( + + + + + +
[test-server]
+ + + + ) + } + `, + }, + }) + }) + + test('build', async () => { + const result = await x('pnpm', ['build'], { + throwOnError: false, + nodeOptions: { cwd: root }, + }) + expect(result.stderr).toContain( + `'server-only' cannot be imported in client build`, + ) + expect(result.exitCode).not.toBe(0) + }) + }) + + test.describe('client-only on server', () => { + const root = 'examples/e2e/temp/validate-client-only' + test.beforeAll(async () => { + await setupInlineFixture({ + src: 'examples/starter', + dest: root, + files: { + 'src/client.tsx': /* tsx */ ` + "use client"; + import 'client-only'; + + export function TestClient() { + return
[test-client]
+ } + `, + 'src/root.tsx': /* tsx */ ` + import { TestClient } from './client.tsx' + import 'client-only'; + + export function Root() { + return ( + + + + + +
[test-server]
+ + + + ) + } + `, + }, + }) + }) + + test('build', async () => { + const result = await x('pnpm', ['build'], { + throwOnError: false, + nodeOptions: { cwd: root }, + }) + expect(result.stderr).toContain( + `'client-only' cannot be imported in server build`, + ) + expect(result.exitCode).not.toBe(0) + }) + }) +}) diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index 304d7c514..05c184b72 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -117,6 +117,12 @@ export type RscPluginOptions = { /** Escape hatch for Waku's `allowServer` */ keepUseCientProxy?: boolean + + /** + * Enable build-time validation of 'client-only' and 'server-only' imports + * @default true + */ + validateImports?: boolean } export default function vitePluginRsc( @@ -828,6 +834,9 @@ globalThis.AsyncLocalStorage = __viteRscAyncHooks.AsyncLocalStorage; ...vitePluginDefineEncryptionKey(rscPluginOptions), ...vitePluginFindSourceMapURL(), ...vitePluginRscCss({ rscCssTransform: rscPluginOptions.rscCssTransform }), + ...(rscPluginOptions.validateImports !== false + ? [validateImportPlugin()] + : []), scanBuildStripPlugin(), ] } @@ -1968,6 +1977,49 @@ export function __fix_cloudflare(): Plugin { } } +// https://github.com/vercel/next.js/blob/90f564d376153fe0b5808eab7b83665ee5e08aaf/packages/next/src/build/webpack-config.ts#L1249-L1280 +// https://github.com/pcattori/vite-env-only/blob/68a0cc8546b9a37c181c0b0a025eb9b62dbedd09/src/deny-imports.ts +// https://github.com/sveltejs/kit/blob/84298477a014ec471839adf7a4448d91bc7949e4/packages/kit/src/exports/vite/index.js#L513 +function validateImportPlugin(): Plugin { + return { + name: 'rsc:validate-imports', + resolveId: { + order: 'pre', + async handler(source, importer, options) { + // optimizer is not aware of server/client boudnary so skip + if ('scan' in options && options.scan) { + return + } + + // Validate client-only imports in server environments + if (source === 'client-only') { + if (this.environment.name === 'rsc') { + throw new Error( + `'client-only' cannot be imported in server build (importer: '${importer ?? 'unknown'}', environment: ${this.environment.name})`, + ) + } + return { id: `\0virtual:vite-rsc/empty`, moduleSideEffects: false } + } + if (source === 'server-only') { + if (this.environment.name !== 'rsc') { + throw new Error( + `'server-only' cannot be imported in client build (importer: '${importer ?? 'unknown'}', environment: ${this.environment.name})`, + ) + } + return { id: `\0virtual:vite-rsc/empty`, moduleSideEffects: false } + } + + return + }, + }, + load(id) { + if (id.startsWith('\0virtual:vite-rsc/empty')) { + return `export {}` + } + }, + } +} + function sortObject(o: T) { return Object.fromEntries( Object.entries(o).sort(([a], [b]) => a.localeCompare(b)), From 24ddea46d016311a8efe34314a4faa9d61af0d9d Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sat, 26 Jul 2025 17:04:09 +0900 Subject: [PATCH 133/313] test(rsc): parallel e2e (#628) --- packages/plugin-rsc/playwright.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/plugin-rsc/playwright.config.ts b/packages/plugin-rsc/playwright.config.ts index cea3a5506..13549cb7e 100644 --- a/packages/plugin-rsc/playwright.config.ts +++ b/packages/plugin-rsc/playwright.config.ts @@ -26,7 +26,7 @@ export default defineConfig({ use: devices['Desktop Safari'], }, ], - workers: 1, + workers: 2, forbidOnly: !!process.env.CI, retries: process.env.CI ? 2 : 0, reporter: ['list', process.env.CI && 'github'] From 707f35bfe1fb047a453fca6281885bc1565303fc Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sat, 26 Jul 2025 17:51:40 +0900 Subject: [PATCH 134/313] test(rsc): split starter tests into multiple files (#629) --- packages/plugin-rsc/e2e/base.test.ts | 43 ++ packages/plugin-rsc/e2e/basic.test.ts | 29 +- packages/plugin-rsc/e2e/fixture.ts | 1 + packages/plugin-rsc/e2e/isolated.test.ts | 27 + packages/plugin-rsc/e2e/module-runner.test.ts | 55 ++ packages/plugin-rsc/e2e/no-ssr.test.ts | 19 + .../plugin-rsc/e2e/react-compiler.test.ts | 57 +++ .../plugin-rsc/e2e/render-built-url.test.ts | 164 ++++++ packages/plugin-rsc/e2e/starter.test.ts | 468 +----------------- packages/plugin-rsc/e2e/starter.ts | 133 +++++ 10 files changed, 511 insertions(+), 485 deletions(-) create mode 100644 packages/plugin-rsc/e2e/base.test.ts create mode 100644 packages/plugin-rsc/e2e/isolated.test.ts create mode 100644 packages/plugin-rsc/e2e/module-runner.test.ts create mode 100644 packages/plugin-rsc/e2e/no-ssr.test.ts create mode 100644 packages/plugin-rsc/e2e/react-compiler.test.ts create mode 100644 packages/plugin-rsc/e2e/render-built-url.test.ts create mode 100644 packages/plugin-rsc/e2e/starter.ts diff --git a/packages/plugin-rsc/e2e/base.test.ts b/packages/plugin-rsc/e2e/base.test.ts new file mode 100644 index 000000000..6ab6cc3dd --- /dev/null +++ b/packages/plugin-rsc/e2e/base.test.ts @@ -0,0 +1,43 @@ +import { test } from '@playwright/test' +import { setupInlineFixture, useFixture } from './fixture' +import { defineStarterTest } from './starter' + +test.describe(() => { + const root = 'examples/e2e/temp/base' + + test.beforeAll(async () => { + await setupInlineFixture({ + src: 'examples/starter', + dest: root, + files: { + 'vite.config.base.ts': { cp: 'vite.config.ts' }, + 'vite.config.ts': /* js */ ` + import { defineConfig, mergeConfig } from 'vite' + import baseConfig from './vite.config.base.ts' + + const overrideConfig = defineConfig({ + base: '/custom-base/', + }) + + export default mergeConfig(baseConfig, overrideConfig) + `, + }, + }) + }) + + test.describe('dev-base', () => { + const f = useFixture({ root, mode: 'dev' }) + defineStarterTest({ + ...f, + url: (url) => new URL(url ?? './', f.url('./custom-base/')).href, + }) + }) + + test.describe('build-base', () => { + const f = useFixture({ root, mode: 'build' }) + defineStarterTest({ + ...f, + url: (url) => new URL(url ?? './', f.url('./custom-base/')).href, + }) + }) +}) diff --git a/packages/plugin-rsc/e2e/basic.test.ts b/packages/plugin-rsc/e2e/basic.test.ts index d463b983b..c02cec2a5 100644 --- a/packages/plugin-rsc/e2e/basic.test.ts +++ b/packages/plugin-rsc/e2e/basic.test.ts @@ -1,15 +1,13 @@ import { createHash } from 'node:crypto' import { readFileSync } from 'node:fs' import { type Page, expect, test } from '@playwright/test' -import { type Fixture, setupIsolatedFixture, useFixture } from './fixture' +import { type Fixture, useFixture } from './fixture' import { expectNoPageError, expectNoReload, testNoJs, waitForHydration, } from './helper' -import path from 'node:path' -import os from 'node:os' test.describe('dev-default', () => { const f = useFixture({ root: 'examples/basic', mode: 'dev' }) @@ -48,31 +46,6 @@ test.describe('build-default', () => { defineTest(f) }) -test.describe(() => { - // disabled by default - if (process.env.TEST_ISOLATED !== 'true') return - - // use RUNNER_TEMP on Github Actions - // https://github.com/actions/toolkit/issues/518 - const tmpRoot = path.join( - process.env['RUNNER_TEMP'] || os.tmpdir(), - 'test-vite-rsc', - ) - test.beforeAll(async () => { - await setupIsolatedFixture({ src: 'examples/basic', dest: tmpRoot }) - }) - - test.describe('dev-isolated', () => { - const f = useFixture({ root: tmpRoot, mode: 'dev' }) - defineTest(f) - }) - - test.describe('build-isolated', () => { - const f = useFixture({ root: tmpRoot, mode: 'build' }) - defineTest(f) - }) -}) - function defineTest(f: Fixture) { test('basic', async ({ page }) => { using _ = expectNoPageError(page) diff --git a/packages/plugin-rsc/e2e/fixture.ts b/packages/plugin-rsc/e2e/fixture.ts index 47429e119..71a363c68 100644 --- a/packages/plugin-rsc/e2e/fixture.ts +++ b/packages/plugin-rsc/e2e/fixture.ts @@ -162,6 +162,7 @@ export async function setupIsolatedFixture(options: { const packagesDir = path.join(import.meta.dirname, '..', '..') const overrides = { '@vitejs/plugin-rsc': `file:${path.join(packagesDir, 'plugin-rsc')}`, + '@vitejs/plugin-react': `file:${path.join(packagesDir, 'plugin-react')}`, } editFileJson(path.join(options.dest, 'package.json'), (pkg: any) => { Object.assign(((pkg.pnpm ??= {}).overrides ??= {}), overrides) diff --git a/packages/plugin-rsc/e2e/isolated.test.ts b/packages/plugin-rsc/e2e/isolated.test.ts new file mode 100644 index 000000000..a457daf5f --- /dev/null +++ b/packages/plugin-rsc/e2e/isolated.test.ts @@ -0,0 +1,27 @@ +import { test } from '@playwright/test' +import { setupIsolatedFixture, useFixture } from './fixture' +import { defineStarterTest } from './starter' +import path from 'node:path' +import os from 'node:os' + +test.describe(() => { + // use RUNNER_TEMP on Github Actions + // https://github.com/actions/toolkit/issues/518 + const tmpRoot = path.join( + process.env['RUNNER_TEMP'] || os.tmpdir(), + 'test-vite-rsc', + ) + test.beforeAll(async () => { + await setupIsolatedFixture({ src: 'examples/starter', dest: tmpRoot }) + }) + + test.describe('dev-isolated', () => { + const f = useFixture({ root: tmpRoot, mode: 'dev' }) + defineStarterTest(f) + }) + + test.describe('build-isolated', () => { + const f = useFixture({ root: tmpRoot, mode: 'build' }) + defineStarterTest(f) + }) +}) diff --git a/packages/plugin-rsc/e2e/module-runner.test.ts b/packages/plugin-rsc/e2e/module-runner.test.ts new file mode 100644 index 000000000..382495acb --- /dev/null +++ b/packages/plugin-rsc/e2e/module-runner.test.ts @@ -0,0 +1,55 @@ +import { test } from '@playwright/test' +import { setupInlineFixture, useFixture } from './fixture' +import { defineStarterTest } from './starter' + +test.describe(() => { + const root = 'examples/e2e/temp/module-runner-hmr-false' + + test.beforeAll(async () => { + await setupInlineFixture({ + src: 'examples/starter', + dest: root, + files: { + 'vite.config.base.ts': { cp: 'vite.config.ts' }, + 'vite.config.ts': /* js */ ` + import { defineConfig, mergeConfig, createRunnableDevEnvironment } from 'vite' + import baseConfig from './vite.config.base.ts' + + const overrideConfig = defineConfig({ + environments: { + ssr: { + dev: { + createEnvironment(name, config) { + return createRunnableDevEnvironment(name, config, { + runnerOptions: { + hmr: false, + }, + }) + }, + }, + }, + rsc: { + dev: { + createEnvironment(name, config) { + return createRunnableDevEnvironment(name, config, { + runnerOptions: { + hmr: false, + }, + }) + }, + }, + }, + }, + }) + + export default mergeConfig(baseConfig, overrideConfig) + `, + }, + }) + }) + + test.describe('dev-module-runner-hmr-false', () => { + const f = useFixture({ root, mode: 'dev' }) + defineStarterTest(f) + }) +}) diff --git a/packages/plugin-rsc/e2e/no-ssr.test.ts b/packages/plugin-rsc/e2e/no-ssr.test.ts new file mode 100644 index 000000000..16e814162 --- /dev/null +++ b/packages/plugin-rsc/e2e/no-ssr.test.ts @@ -0,0 +1,19 @@ +import { expect, test } from '@playwright/test' +import { useFixture } from './fixture' +import { defineStarterTest } from './starter' +import path from 'node:path' +import fs from 'node:fs' + +test.describe('dev-no-ssr', () => { + const f = useFixture({ root: 'examples/no-ssr', mode: 'dev' }) + defineStarterTest(f, 'no-ssr') +}) + +test.describe('build-no-ssr', () => { + const f = useFixture({ root: 'examples/no-ssr', mode: 'build' }) + defineStarterTest(f, 'no-ssr') + + test('no ssr build', () => { + expect(fs.existsSync(path.join(f.root, 'dist/ssr'))).toBe(false) + }) +}) diff --git a/packages/plugin-rsc/e2e/react-compiler.test.ts b/packages/plugin-rsc/e2e/react-compiler.test.ts new file mode 100644 index 000000000..de8e9c52e --- /dev/null +++ b/packages/plugin-rsc/e2e/react-compiler.test.ts @@ -0,0 +1,57 @@ +import { expect, test } from '@playwright/test' +import { setupInlineFixture, useFixture } from './fixture' +import { defineStarterTest } from './starter' +import { waitForHydration } from './helper' + +test.describe(() => { + const root = 'examples/e2e/temp/react-compiler' + + test.beforeAll(async () => { + await setupInlineFixture({ + src: 'examples/starter', + dest: root, + files: { + 'vite.config.base.ts': { cp: 'vite.config.ts' }, + 'vite.config.ts': /* js */ ` + import rsc from '@vitejs/plugin-rsc' + import react from '@vitejs/plugin-react' + import { defineConfig, mergeConfig } from 'vite' + import baseConfig from './vite.config.base.ts' + + delete baseConfig.plugins + + const overrideConfig = defineConfig({ + plugins: [ + react({ + babel: { plugins: ['babel-plugin-react-compiler'] }, + }).map((p) => ({ + ...p, + applyToEnvironment: (e) => e.name === 'client', + })), + rsc(), + ], + }) + + export default mergeConfig(baseConfig, overrideConfig) + `, + }, + }) + }) + + test.describe('dev-react-compiler', () => { + const f = useFixture({ root, mode: 'dev' }) + defineStarterTest(f) + + test('verify react compiler', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + const res = await page.request.get(f.url('src/client.tsx')) + expect(await res.text()).toContain('react.memo_cache_sentinel') + }) + }) + + test.describe('build-react-compiler', () => { + const f = useFixture({ root, mode: 'build' }) + defineStarterTest(f) + }) +}) diff --git a/packages/plugin-rsc/e2e/render-built-url.test.ts b/packages/plugin-rsc/e2e/render-built-url.test.ts new file mode 100644 index 000000000..565bb499e --- /dev/null +++ b/packages/plugin-rsc/e2e/render-built-url.test.ts @@ -0,0 +1,164 @@ +import { expect, test } from '@playwright/test' +import { setupInlineFixture, useFixture } from './fixture' +import { defineStarterTest } from './starter' +import { expectNoPageError, waitForHydration } from './helper' +import fs from 'node:fs' + +test.describe(() => { + const root = 'examples/e2e/temp/renderBuiltUrl-runtime' + + test.beforeAll(async () => { + const renderBuiltUrl = (filename: string) => { + return { + runtime: `__dynamicBase + ${JSON.stringify(filename)}`, + } + } + await setupInlineFixture({ + src: 'examples/starter', + dest: root, + files: { + 'vite.config.ts': /* js */ ` + import rsc from '@vitejs/plugin-rsc' + import react from '@vitejs/plugin-react' + import { defineConfig } from 'vite' + + export default defineConfig({ + plugins: [ + react(), + rsc({ + entries: { + client: './src/framework/entry.browser.tsx', + ssr: './src/framework/entry.ssr.tsx', + rsc: './src/framework/entry.rsc.tsx', + } + }), + { + // simulate custom asset server + name: 'custom-server', + config(_config, env) { + if (env.isPreview) { + globalThis.__dynamicBase = '/custom-server/'; + } + }, + configurePreviewServer(server) { + server.middlewares.use((req, res, next) => { + const url = new URL(req.url ?? '', "http://localhost"); + if (url.pathname.startsWith('/custom-server/')) { + req.url = url.pathname.replace('/custom-server/', '/'); + } + next(); + }); + } + } + ], + // tweak chunks to test "__dynamicBase" used on browser for "__vite__mapDeps" + environments: { + client: { + build: { + rollupOptions: { + output: { + manualChunks: (id) => { + if (id.includes('node_modules/react/')) { + return 'lib-react'; + } + } + }, + } + } + } + }, + experimental: { + renderBuiltUrl: ${renderBuiltUrl.toString()} + }, + }) + `, + 'src/root.tsx': { + // define __dynamicBase on browser via head script + edit: (s: string) => + s.replace( + '', + () => + ``, + ), + }, + }, + }) + }) + + test.describe('dev-renderBuiltUrl-runtime', () => { + const f = useFixture({ root, mode: 'dev' }) + + test('basic', async ({ page }) => { + using _ = expectNoPageError(page) + await page.goto(f.url()) + await waitForHydration(page) + }) + }) + + test.describe('build-renderBuiltUrl-runtime', () => { + const f = useFixture({ root, mode: 'build' }) + defineStarterTest(f) + + test('verify runtime url', () => { + const manifestFileContent = fs.readFileSync( + f.root + '/dist/ssr/__vite_rsc_assets_manifest.js', + 'utf-8', + ) + expect(manifestFileContent).toContain(`__dynamicBase + "assets/client-`) + }) + }) +}) + +test.describe(() => { + const root = 'examples/e2e/temp/renderBuiltUrl-string' + + test.beforeAll(async () => { + await setupInlineFixture({ + src: 'examples/starter', + dest: root, + files: { + 'vite.config.ts': /* js */ ` + import rsc from '@vitejs/plugin-rsc' + import react from '@vitejs/plugin-react' + import { defineConfig } from 'vite' + + export default defineConfig({ + plugins: [ + react(), + rsc({ + entries: { + client: './src/framework/entry.browser.tsx', + ssr: './src/framework/entry.ssr.tsx', + rsc: './src/framework/entry.rsc.tsx', + } + }), + { + // simulate custom asset server + name: 'custom-server', + configurePreviewServer(server) { + server.middlewares.use((req, res, next) => { + const url = new URL(req.url ?? '', "http://localhost"); + if (url.pathname.startsWith('/custom-server/')) { + req.url = url.pathname.replace('/custom-server/', '/'); + } + next(); + }); + } + } + ], + experimental: { + renderBuiltUrl(filename) { + return '/custom-server/' + filename; + } + } + }) + `, + }, + }) + }) + + test.describe('build-renderBuiltUrl-string', () => { + const f = useFixture({ root, mode: 'build' }) + defineStarterTest(f) + }) +}) diff --git a/packages/plugin-rsc/e2e/starter.test.ts b/packages/plugin-rsc/e2e/starter.test.ts index df0d93b0b..a66db75cf 100644 --- a/packages/plugin-rsc/e2e/starter.test.ts +++ b/packages/plugin-rsc/e2e/starter.test.ts @@ -1,46 +1,26 @@ import { expect, test } from '@playwright/test' -import { setupInlineFixture, type Fixture, useFixture } from './fixture' -import { - expectNoPageError, - expectNoReload, - testNoJs, - waitForHydration as waitForHydration_, -} from './helper' -import path from 'node:path' -import fs from 'node:fs' +import { useFixture } from './fixture' +import { defineStarterTest } from './starter' +import { waitForHydration } from './helper' test.describe('dev-default', () => { const f = useFixture({ root: 'examples/starter', mode: 'dev' }) - defineTest(f) + defineStarterTest(f) }) test.describe('build-default', () => { const f = useFixture({ root: 'examples/starter', mode: 'build' }) - defineTest(f) + defineStarterTest(f) }) test.describe('dev-cloudflare', () => { const f = useFixture({ root: 'examples/starter-cf-single', mode: 'dev' }) - defineTest(f) + defineStarterTest(f) }) test.describe('build-cloudflare', () => { const f = useFixture({ root: 'examples/starter-cf-single', mode: 'build' }) - defineTest(f) -}) - -test.describe('dev-no-ssr', () => { - const f = useFixture({ root: 'examples/no-ssr', mode: 'dev' }) - defineTest(f, 'no-ssr') -}) - -test.describe('build-no-ssr', () => { - const f = useFixture({ root: 'examples/no-ssr', mode: 'build' }) - defineTest(f, 'no-ssr') - - test('no ssr build', () => { - expect(fs.existsSync(path.join(f.root, 'dist/ssr'))).toBe(false) - }) + defineStarterTest(f) }) test.describe('dev-production', () => { @@ -51,11 +31,11 @@ test.describe('dev-production', () => { env: { NODE_ENV: 'production' }, }, }) - defineTest(f, 'dev-production') + defineStarterTest(f, 'dev-production') test('verify production', async ({ page }) => { await page.goto(f.url()) - await waitForHydration_(page) + await waitForHydration(page) const res = await page.request.get(f.url('src/client.tsx')) expect(await res.text()).not.toContain('jsxDEV') }) @@ -69,7 +49,7 @@ test.describe('build-development', () => { env: { NODE_ENV: 'development' }, }, }) - defineTest(f) + defineStarterTest(f) test('verify development', async ({ page }) => { let output!: string @@ -79,433 +59,7 @@ test.describe('build-development', () => { } }) await page.goto(f.url()) - await waitForHydration_(page) + await waitForHydration(page) expect(output).toContain('jsxDEV') }) }) - -test.describe(() => { - const root = 'examples/e2e/temp/react-compiler' - - test.beforeAll(async () => { - await setupInlineFixture({ - src: 'examples/starter', - dest: root, - files: { - 'vite.config.base.ts': { cp: 'vite.config.ts' }, - 'vite.config.ts': /* js */ ` - import rsc from '@vitejs/plugin-rsc' - import react from '@vitejs/plugin-react' - import { defineConfig, mergeConfig } from 'vite' - import baseConfig from './vite.config.base.ts' - - delete baseConfig.plugins - - const overrideConfig = defineConfig({ - plugins: [ - react({ - babel: { plugins: ['babel-plugin-react-compiler'] }, - }).map((p) => ({ - ...p, - applyToEnvironment: (e) => e.name === 'client', - })), - rsc(), - ], - }) - - export default mergeConfig(baseConfig, overrideConfig) - `, - }, - }) - }) - - test.describe('dev-react-compiler', () => { - const f = useFixture({ root, mode: 'dev' }) - defineTest(f) - - test('verify react compiler', async ({ page }) => { - await page.goto(f.url()) - await waitForHydration_(page) - const res = await page.request.get(f.url('src/client.tsx')) - expect(await res.text()).toContain('react.memo_cache_sentinel') - }) - }) - - test.describe('build-react-compiler', () => { - const f = useFixture({ root, mode: 'build' }) - defineTest(f) - }) -}) - -test.describe(() => { - const root = 'examples/e2e/temp/base' - - test.beforeAll(async () => { - await setupInlineFixture({ - src: 'examples/starter', - dest: root, - files: { - 'vite.config.base.ts': { cp: 'vite.config.ts' }, - 'vite.config.ts': /* js */ ` - import { defineConfig, mergeConfig } from 'vite' - import baseConfig from './vite.config.base.ts' - - const overrideConfig = defineConfig({ - base: '/custom-base/', - }) - - export default mergeConfig(baseConfig, overrideConfig) - `, - }, - }) - }) - - test.describe('dev-base', () => { - const f = useFixture({ root, mode: 'dev' }) - defineTest({ - ...f, - url: (url) => new URL(url ?? './', f.url('./custom-base/')).href, - }) - }) - - test.describe('build-base', () => { - const f = useFixture({ root, mode: 'build' }) - defineTest({ - ...f, - url: (url) => new URL(url ?? './', f.url('./custom-base/')).href, - }) - }) -}) - -test.describe(() => { - const root = 'examples/e2e/temp/module-runner-hmr-false' - - test.beforeAll(async () => { - await setupInlineFixture({ - src: 'examples/starter', - dest: root, - files: { - 'vite.config.base.ts': { cp: 'vite.config.ts' }, - 'vite.config.ts': /* js */ ` - import { defineConfig, mergeConfig, createRunnableDevEnvironment } from 'vite' - import baseConfig from './vite.config.base.ts' - - const overrideConfig = defineConfig({ - environments: { - ssr: { - dev: { - createEnvironment(name, config) { - return createRunnableDevEnvironment(name, config, { - runnerOptions: { - hmr: false, - }, - }) - }, - }, - }, - rsc: { - dev: { - createEnvironment(name, config) { - return createRunnableDevEnvironment(name, config, { - runnerOptions: { - hmr: false, - }, - }) - }, - }, - }, - }, - }) - - export default mergeConfig(baseConfig, overrideConfig) - `, - }, - }) - }) - - test.describe('dev-module-runner-hmr-false', () => { - const f = useFixture({ root, mode: 'dev' }) - defineTest(f) - }) -}) - -test.describe(() => { - const root = 'examples/e2e/temp/renderBuiltUrl-runtime' - - test.beforeAll(async () => { - const renderBuiltUrl = (filename: string) => { - return { - runtime: `__dynamicBase + ${JSON.stringify(filename)}`, - } - } - await setupInlineFixture({ - src: 'examples/starter', - dest: root, - files: { - 'vite.config.ts': /* js */ ` - import rsc from '@vitejs/plugin-rsc' - import react from '@vitejs/plugin-react' - import { defineConfig } from 'vite' - - export default defineConfig({ - plugins: [ - react(), - rsc({ - entries: { - client: './src/framework/entry.browser.tsx', - ssr: './src/framework/entry.ssr.tsx', - rsc: './src/framework/entry.rsc.tsx', - } - }), - { - // simulate custom asset server - name: 'custom-server', - config(_config, env) { - if (env.isPreview) { - globalThis.__dynamicBase = '/custom-server/'; - } - }, - configurePreviewServer(server) { - server.middlewares.use((req, res, next) => { - const url = new URL(req.url ?? '', "http://localhost"); - if (url.pathname.startsWith('/custom-server/')) { - req.url = url.pathname.replace('/custom-server/', '/'); - } - next(); - }); - } - } - ], - // tweak chunks to test "__dynamicBase" used on browser for "__vite__mapDeps" - environments: { - client: { - build: { - rollupOptions: { - output: { - manualChunks: (id) => { - if (id.includes('node_modules/react/')) { - return 'lib-react'; - } - } - }, - } - } - } - }, - experimental: { - renderBuiltUrl: ${renderBuiltUrl.toString()} - }, - }) - `, - 'src/root.tsx': { - // define __dynamicBase on browser via head script - edit: (s: string) => - s.replace( - '', - () => - ``, - ), - }, - }, - }) - }) - - test.describe('dev-renderBuiltUrl-runtime', () => { - const f = useFixture({ root, mode: 'dev' }) - - test('basic', async ({ page }) => { - using _ = expectNoPageError(page) - await page.goto(f.url()) - await waitForHydration_(page) - }) - }) - - test.describe('build-renderBuiltUrl-runtime', () => { - const f = useFixture({ root, mode: 'build' }) - defineTest(f) - - test('verify runtime url', () => { - const manifestFileContent = fs.readFileSync( - f.root + '/dist/ssr/__vite_rsc_assets_manifest.js', - 'utf-8', - ) - expect(manifestFileContent).toContain(`__dynamicBase + "assets/client-`) - }) - }) -}) - -test.describe(() => { - const root = 'examples/e2e/temp/renderBuiltUrl-string' - - test.beforeAll(async () => { - await setupInlineFixture({ - src: 'examples/starter', - dest: root, - files: { - 'vite.config.ts': /* js */ ` - import rsc from '@vitejs/plugin-rsc' - import react from '@vitejs/plugin-react' - import { defineConfig } from 'vite' - - export default defineConfig({ - plugins: [ - react(), - rsc({ - entries: { - client: './src/framework/entry.browser.tsx', - ssr: './src/framework/entry.ssr.tsx', - rsc: './src/framework/entry.rsc.tsx', - } - }), - { - // simulate custom asset server - name: 'custom-server', - configurePreviewServer(server) { - server.middlewares.use((req, res, next) => { - const url = new URL(req.url ?? '', "http://localhost"); - if (url.pathname.startsWith('/custom-server/')) { - req.url = url.pathname.replace('/custom-server/', '/'); - } - next(); - }); - } - } - ], - experimental: { - renderBuiltUrl(filename) { - return '/custom-server/' + filename; - } - } - }) - `, - }, - }) - }) - - test.describe('build-renderBuiltUrl-string', () => { - const f = useFixture({ root, mode: 'build' }) - defineTest(f) - }) -}) - -function defineTest(f: Fixture, variant?: 'no-ssr' | 'dev-production') { - const waitForHydration: typeof waitForHydration_ = (page) => - waitForHydration_(page, variant === 'no-ssr' ? '#root' : 'body') - - test('basic', async ({ page }) => { - using _ = expectNoPageError(page) - await page.goto(f.url()) - await waitForHydration(page) - }) - - test('client component', async ({ page }) => { - await page.goto(f.url()) - await waitForHydration(page) - await page.getByRole('button', { name: 'Client Counter: 0' }).click() - await expect( - page.getByRole('button', { name: 'Client Counter: 1' }), - ).toBeVisible() - }) - - test('server action @js', async ({ page }) => { - await page.goto(f.url()) - await waitForHydration(page) - await using _ = await expectNoReload(page) - await page.getByRole('button', { name: 'Server Counter: 0' }).click() - await expect( - page.getByRole('button', { name: 'Server Counter: 1' }), - ).toBeVisible() - }) - - testNoJs('server action @nojs', async ({ page }) => { - test.skip(variant === 'no-ssr') - - await page.goto(f.url()) - await page.getByRole('button', { name: 'Server Counter: 1' }).click() - await expect( - page.getByRole('button', { name: 'Server Counter: 2' }), - ).toBeVisible() - }) - - test('client hmr', async ({ page }) => { - test.skip(f.mode === 'build' || variant === 'dev-production') - - await page.goto(f.url()) - await waitForHydration(page) - await page.getByRole('button', { name: 'Client Counter: 0' }).click() - await expect( - page.getByRole('button', { name: 'Client Counter: 1' }), - ).toBeVisible() - - const editor = f.createEditor(`src/client.tsx`) - editor.edit((s) => s.replace('Client Counter', 'Client [edit] Counter')) - await expect( - page.getByRole('button', { name: 'Client [edit] Counter: 1' }), - ).toBeVisible() - - if (variant === 'no-ssr') { - editor.reset() - await page.getByRole('button', { name: 'Client Counter: 1' }).click() - return - } - - // check next ssr is also updated - const res = await page.goto(f.url()) - expect(await res?.text()).toContain('Client [edit] Counter') - await waitForHydration(page) - editor.reset() - await page.getByRole('button', { name: 'Client Counter: 0' }).click() - }) - - test.describe(() => { - test.skip(f.mode === 'build') - - test('server hmr', async ({ page }) => { - await page.goto(f.url()) - await waitForHydration(page) - await using _ = await expectNoReload(page) - await expect(page.getByText('Vite + RSC')).toBeVisible() - const editor = f.createEditor('src/root.tsx') - editor.edit((s) => - s.replace('

Vite + RSC

', '

Vite x RSC

'), - ) - await expect(page.getByText('Vite x RSC')).toBeVisible() - editor.reset() - await expect(page.getByText('Vite + RSC')).toBeVisible() - }) - }) - - test('image assets', async ({ page }) => { - await page.goto(f.url()) - await waitForHydration(page) - await expect(page.getByAltText('Vite logo')).not.toHaveJSProperty( - 'naturalWidth', - 0, - ) - await expect(page.getByAltText('React logo')).not.toHaveJSProperty( - 'naturalWidth', - 0, - ) - }) - - test('css @js', async ({ page }) => { - await page.goto(f.url()) - await waitForHydration(page) - await expect(page.locator('.read-the-docs')).toHaveCSS( - 'color', - 'rgb(136, 136, 136)', - ) - }) - - test.describe(() => { - test.skip(variant === 'no-ssr') - - testNoJs('css @nojs', async ({ page }) => { - await page.goto(f.url()) - await expect(page.locator('.read-the-docs')).toHaveCSS( - 'color', - 'rgb(136, 136, 136)', - ) - }) - }) -} diff --git a/packages/plugin-rsc/e2e/starter.ts b/packages/plugin-rsc/e2e/starter.ts new file mode 100644 index 000000000..68b05706f --- /dev/null +++ b/packages/plugin-rsc/e2e/starter.ts @@ -0,0 +1,133 @@ +import { expect, test } from '@playwright/test' +import { type Fixture } from './fixture' +import { + expectNoPageError, + expectNoReload, + testNoJs, + waitForHydration as waitForHydration_, +} from './helper' + +export function defineStarterTest( + f: Fixture, + variant?: 'no-ssr' | 'dev-production', +) { + const waitForHydration: typeof waitForHydration_ = (page) => + waitForHydration_(page, variant === 'no-ssr' ? '#root' : 'body') + + test('basic', async ({ page }) => { + using _ = expectNoPageError(page) + await page.goto(f.url()) + await waitForHydration(page) + }) + + test('client component', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await page.getByRole('button', { name: 'Client Counter: 0' }).click() + await expect( + page.getByRole('button', { name: 'Client Counter: 1' }), + ).toBeVisible() + }) + + test('server action @js', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await using _ = await expectNoReload(page) + await page.getByRole('button', { name: 'Server Counter: 0' }).click() + await expect( + page.getByRole('button', { name: 'Server Counter: 1' }), + ).toBeVisible() + }) + + testNoJs('server action @nojs', async ({ page }) => { + test.skip(variant === 'no-ssr') + + await page.goto(f.url()) + await page.getByRole('button', { name: 'Server Counter: 1' }).click() + await expect( + page.getByRole('button', { name: 'Server Counter: 2' }), + ).toBeVisible() + }) + + test('client hmr', async ({ page }) => { + test.skip(f.mode === 'build' || variant === 'dev-production') + + await page.goto(f.url()) + await waitForHydration(page) + await page.getByRole('button', { name: 'Client Counter: 0' }).click() + await expect( + page.getByRole('button', { name: 'Client Counter: 1' }), + ).toBeVisible() + + const editor = f.createEditor(`src/client.tsx`) + editor.edit((s) => s.replace('Client Counter', 'Client [edit] Counter')) + await expect( + page.getByRole('button', { name: 'Client [edit] Counter: 1' }), + ).toBeVisible() + + if (variant === 'no-ssr') { + editor.reset() + await page.getByRole('button', { name: 'Client Counter: 1' }).click() + return + } + + // check next ssr is also updated + const res = await page.goto(f.url()) + expect(await res?.text()).toContain('Client [edit] Counter') + await waitForHydration(page) + editor.reset() + await page.getByRole('button', { name: 'Client Counter: 0' }).click() + }) + + test.describe(() => { + test.skip(f.mode === 'build') + + test('server hmr', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await using _ = await expectNoReload(page) + await expect(page.getByText('Vite + RSC')).toBeVisible() + const editor = f.createEditor('src/root.tsx') + editor.edit((s) => + s.replace('

Vite + RSC

', '

Vite x RSC

'), + ) + await expect(page.getByText('Vite x RSC')).toBeVisible() + editor.reset() + await expect(page.getByText('Vite + RSC')).toBeVisible() + }) + }) + + test('image assets', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await expect(page.getByAltText('Vite logo')).not.toHaveJSProperty( + 'naturalWidth', + 0, + ) + await expect(page.getByAltText('React logo')).not.toHaveJSProperty( + 'naturalWidth', + 0, + ) + }) + + test('css @js', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await expect(page.locator('.read-the-docs')).toHaveCSS( + 'color', + 'rgb(136, 136, 136)', + ) + }) + + test.describe(() => { + test.skip(variant === 'no-ssr') + + testNoJs('css @nojs', async ({ page }) => { + await page.goto(f.url()) + await expect(page.locator('.read-the-docs')).toHaveCSS( + 'color', + 'rgb(136, 136, 136)', + ) + }) + }) +} From 45685561d7e85cd6e2f77dc383cc6728d5fc916f Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sun, 27 Jul 2025 12:20:36 +0900 Subject: [PATCH 135/313] fix(rsc): add `getEntrySource` assertion error message (#633) --- packages/plugin-rsc/src/plugin.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index 05c184b72..cc3861b52 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -869,12 +869,12 @@ function getEntrySource( name: string = 'index', ) { const input = config.build.rollupOptions.input - assert(input) assert( typeof input === 'object' && !Array.isArray(input) && name in input && typeof input[name] === 'string', + `[vite-rsc:getEntrySource] expected 'build.rollupOptions.input' to be an object with a '${name}' property that is a string, but got ${JSON.stringify(input)}`, ) return input[name] } From b077c4a774ebe4a059902f3e0cb043c7194cceeb Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sun, 27 Jul 2025 12:27:38 +0900 Subject: [PATCH 136/313] chore(deps): update react-router (#632) --- .../examples/react-router/cf/entry.rsc.tsx | 4 - .../examples/react-router/cf/entry.ssr.tsx | 8 +- .../examples/react-router/package.json | 4 +- .../react-router-vite/entry.browser.tsx | 45 +++++----- .../react-router-vite/entry.rsc.single.tsx | 10 +++ .../react-router-vite/entry.rsc.tsx | 12 ++- .../react-router-vite/entry.ssr.single.tsx | 8 -- .../react-router-vite/entry.ssr.tsx | 29 +++++-- .../examples/react-router/vite.config.ts | 8 +- pnpm-lock.yaml | 85 +++++++++---------- 10 files changed, 111 insertions(+), 102 deletions(-) create mode 100644 packages/plugin-rsc/examples/react-router/react-router-vite/entry.rsc.single.tsx delete mode 100644 packages/plugin-rsc/examples/react-router/react-router-vite/entry.ssr.single.tsx diff --git a/packages/plugin-rsc/examples/react-router/cf/entry.rsc.tsx b/packages/plugin-rsc/examples/react-router/cf/entry.rsc.tsx index b194dfeb0..103b41ed1 100644 --- a/packages/plugin-rsc/examples/react-router/cf/entry.rsc.tsx +++ b/packages/plugin-rsc/examples/react-router/cf/entry.rsc.tsx @@ -7,7 +7,3 @@ export default { return fetchServer(request) }, } - -if (import.meta.hot) { - import.meta.hot.accept() -} diff --git a/packages/plugin-rsc/examples/react-router/cf/entry.ssr.tsx b/packages/plugin-rsc/examples/react-router/cf/entry.ssr.tsx index 9a570e706..689e7ac25 100644 --- a/packages/plugin-rsc/examples/react-router/cf/entry.ssr.tsx +++ b/packages/plugin-rsc/examples/react-router/cf/entry.ssr.tsx @@ -1,13 +1,9 @@ -import handler from '../react-router-vite/entry.ssr' +import { generateHTML } from '../react-router-vite/entry.ssr' console.log('[debug:cf-ssr-entry]') -// TODO: -// shouldn't "entry.rsc.tsx" be the main server entry -// and optionally call "entry.ssr.tsx" only for rendering html? - export default { fetch(request: Request, env: any) { - return handler(request, (request) => env.RSC.fetch(request)) + return generateHTML(request, (request) => env.RSC.fetch(request)) }, } diff --git a/packages/plugin-rsc/examples/react-router/package.json b/packages/plugin-rsc/examples/react-router/package.json index d49b4cab8..818629ba6 100644 --- a/packages/plugin-rsc/examples/react-router/package.json +++ b/packages/plugin-rsc/examples/react-router/package.json @@ -16,11 +16,11 @@ "@vitejs/plugin-rsc": "latest", "react": "^19.1.0", "react-dom": "^19.1.0", - "react-router": "0.0.0-experimental-23decd7bc" + "react-router": "7.7.0" }, "devDependencies": { "@cloudflare/vite-plugin": "^1.10.0", - "@react-router/dev": "0.0.0-experimental-23decd7bc", + "@react-router/dev": "7.7.0", "@tailwindcss/typography": "^0.5.16", "@tailwindcss/vite": "^4.1.11", "@types/react": "^19.1.8", diff --git a/packages/plugin-rsc/examples/react-router/react-router-vite/entry.browser.tsx b/packages/plugin-rsc/examples/react-router/react-router-vite/entry.browser.tsx index fcc8b3ccb..56e028872 100644 --- a/packages/plugin-rsc/examples/react-router/react-router-vite/entry.browser.tsx +++ b/packages/plugin-rsc/examples/react-router/react-router-vite/entry.browser.tsx @@ -4,35 +4,42 @@ import { encodeReply, setServerCallback, } from '@vitejs/plugin-rsc/browser' -import * as React from 'react' +import { startTransition, StrictMode } from 'react' import { hydrateRoot } from 'react-dom/client' import { - unstable_RSCHydratedRouter as RSCHydratedRouter, - type unstable_RSCPayload as RSCPayload, unstable_createCallServer as createCallServer, unstable_getRSCStream as getRSCStream, + unstable_RSCHydratedRouter as RSCHydratedRouter, + type unstable_RSCPayload as RSCServerPayload, } from 'react-router' +// Create and set the callServer function to support post-hydration server actions. setServerCallback( createCallServer({ createFromReadableStream, - encodeReply, createTemporaryReferenceSet, + encodeReply, }), ) -createFromReadableStream(getRSCStream()).then( - (payload: RSCPayload) => { - React.startTransition(() => { - hydrateRoot( - document, - - - , - ) - }) - }, -) +// Get and decode the initial server payload +createFromReadableStream(getRSCStream()).then((payload) => { + startTransition(async () => { + const formState = + payload.type === 'render' ? await payload.formState : undefined + + hydrateRoot( + document, + + + , + { + // @ts-expect-error - no types for this yet + formState, + }, + ) + }) +}) diff --git a/packages/plugin-rsc/examples/react-router/react-router-vite/entry.rsc.single.tsx b/packages/plugin-rsc/examples/react-router/react-router-vite/entry.rsc.single.tsx new file mode 100644 index 000000000..da3895388 --- /dev/null +++ b/packages/plugin-rsc/examples/react-router/react-router-vite/entry.rsc.single.tsx @@ -0,0 +1,10 @@ +import { fetchServer } from './entry.rsc' + +export default async function handler(request: Request) { + // Import the generateHTML function from the client environment + const ssr = await import.meta.viteRsc.loadModule< + typeof import('./entry.ssr') + >('ssr', 'index') + + return ssr.generateHTML(request, fetchServer) +} diff --git a/packages/plugin-rsc/examples/react-router/react-router-vite/entry.rsc.tsx b/packages/plugin-rsc/examples/react-router/react-router-vite/entry.rsc.tsx index 8583030ce..3e2ce9c92 100644 --- a/packages/plugin-rsc/examples/react-router/react-router-vite/entry.rsc.tsx +++ b/packages/plugin-rsc/examples/react-router/react-router-vite/entry.rsc.tsx @@ -1,6 +1,7 @@ import { createTemporaryReferenceSet, decodeAction, + decodeFormState, decodeReply, loadServerAction, renderToReadableStream, @@ -9,14 +10,19 @@ import { unstable_matchRSCServerRequest as matchRSCServerRequest } from 'react-r import routes from 'virtual:react-router-routes' -export async function fetchServer(request: Request): Promise { - return await matchRSCServerRequest({ +export function fetchServer(request: Request) { + return matchRSCServerRequest({ + // Provide the React Server touchpoints. createTemporaryReferenceSet, - decodeReply, decodeAction, + decodeFormState, + decodeReply, loadServerAction, + // The incoming request. request, + // The app routes. routes, + // Encode the match with the React Server implementation. generateResponse(match, options) { return new Response(renderToReadableStream(match.payload, options), { status: match.statusCode, diff --git a/packages/plugin-rsc/examples/react-router/react-router-vite/entry.ssr.single.tsx b/packages/plugin-rsc/examples/react-router/react-router-vite/entry.ssr.single.tsx deleted file mode 100644 index 5aff3e4e3..000000000 --- a/packages/plugin-rsc/examples/react-router/react-router-vite/entry.ssr.single.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import baseHandler from './entry.ssr' - -export default async function handler(request: Request) { - const rsc = await import.meta.viteRsc.loadModule< - typeof import('./entry.rsc') - >('rsc', 'index') - return baseHandler(request, rsc.fetchServer) -} diff --git a/packages/plugin-rsc/examples/react-router/react-router-vite/entry.ssr.tsx b/packages/plugin-rsc/examples/react-router/react-router-vite/entry.ssr.tsx index 4e226dc1e..c80cde622 100644 --- a/packages/plugin-rsc/examples/react-router/react-router-vite/entry.ssr.tsx +++ b/packages/plugin-rsc/examples/react-router/react-router-vite/entry.ssr.tsx @@ -1,25 +1,36 @@ import { createFromReadableStream } from '@vitejs/plugin-rsc/ssr' -import * as ReactDomServer from 'react-dom/server.edge' +import { renderToReadableStream as renderHTMLToReadableStream } from 'react-dom/server.edge' import { - unstable_RSCStaticRouter as RSCStaticRouter, unstable_routeRSCServerRequest as routeRSCServerRequest, + unstable_RSCStaticRouter as RSCStaticRouter, } from 'react-router' -export default async function handler( +export async function generateHTML( request: Request, fetchServer: (request: Request) => Promise, ): Promise { - const bootstrapScriptContent = - await import.meta.viteRsc.loadBootstrapScriptContent('index') - return routeRSCServerRequest({ + return await routeRSCServerRequest({ + // The incoming request. request, + // How to call the React Server. fetchServer, - createFromReadableStream: (body) => createFromReadableStream(body), - renderHTML(getPayload) { - return ReactDomServer.renderToReadableStream( + // Provide the React Server touchpoints. + createFromReadableStream, + // Render the router to HTML. + async renderHTML(getPayload) { + const payload = await getPayload() + const formState = + payload.type === 'render' ? await payload.formState : undefined + + const bootstrapScriptContent = + await import.meta.viteRsc.loadBootstrapScriptContent('index') + + return await renderHTMLToReadableStream( , { bootstrapScriptContent, + // @ts-expect-error - no types for this yet + formState, }, ) }, diff --git a/packages/plugin-rsc/examples/react-router/vite.config.ts b/packages/plugin-rsc/examples/react-router/vite.config.ts index d02451810..2f1091c65 100644 --- a/packages/plugin-rsc/examples/react-router/vite.config.ts +++ b/packages/plugin-rsc/examples/react-router/vite.config.ts @@ -17,12 +17,8 @@ export default defineConfig({ rsc({ entries: { client: './react-router-vite/entry.browser.tsx', - ssr: './react-router-vite/entry.ssr.single.tsx', - rsc: './react-router-vite/entry.rsc.tsx', - }, - serverHandler: { - environmentName: 'ssr', - entryName: 'index', + ssr: './react-router-vite/entry.ssr.tsx', + rsc: './react-router-vite/entry.rsc.single.tsx', }, }), inspect(), diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ed03505b5..2bd9797c0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -610,15 +610,15 @@ importers: specifier: ^19.1.0 version: 19.1.0(react@19.1.0) react-router: - specifier: 0.0.0-experimental-23decd7bc - version: 0.0.0-experimental-23decd7bc(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: 7.7.0 + version: 7.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) devDependencies: '@cloudflare/vite-plugin': specifier: ^1.10.0 version: 1.10.0(rollup@4.44.1)(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250712.0)(wrangler@4.25.1) '@react-router/dev': - specifier: 0.0.0-experimental-23decd7bc - version: 0.0.0-experimental-23decd7bc(@types/node@22.16.5)(babel-plugin-macros@3.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(react-router@0.0.0-experimental-23decd7bc(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tsx@4.20.3)(typescript@5.8.3)(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(wrangler@4.25.1)(yaml@2.7.1) + specifier: 7.7.0 + version: 7.7.0(@types/node@22.16.5)(babel-plugin-macros@3.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(react-router@7.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tsx@4.20.3)(typescript@5.8.3)(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(wrangler@4.25.1)(yaml@2.7.1) '@tailwindcss/typography': specifier: ^0.5.16 version: 0.5.16(tailwindcss@4.1.11) @@ -1119,12 +1119,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-decorators@7.27.1': - resolution: {integrity: sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-jsx@7.27.1': resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} engines: {node: '>=6.9.0'} @@ -2247,13 +2241,13 @@ packages: resolution: {integrity: sha512-G0OnZbMWEs5LhDyqy2UL17vGhSVHkQIfVojMtEWVenvj0V5S84VBgy86kJIuNsGDp2p7sTKlpSIpBUWdC35OKg==} engines: {node: '>=20.0.0'} - '@react-router/dev@0.0.0-experimental-23decd7bc': - resolution: {integrity: sha512-iY4WgHNv/7mDbExXQA35u7H54ihPJTrm20Z42Ni2G+Hgz3X4A0ZmeT7CtpfuBzC3UIrqdmNZT3nQOSoKNwJlWA==} + '@react-router/dev@7.7.0': + resolution: {integrity: sha512-z6tJ0US20pS/YpaPz59SJgSH+1BJ6xvQmQ/u4Y4HM1uLOa4b3Mleg3KujqAvwGP5wkMkNFz3Ae2g6/kDTFyuCA==} engines: {node: '>=20.0.0'} hasBin: true peerDependencies: - '@react-router/serve': ^0.0.0-experimental-23decd7bc - react-router: ^0.0.0-experimental-23decd7bc + '@react-router/serve': ^7.7.0 + react-router: ^7.7.0 typescript: ^5.1.0 vite: ^5.1.0 || ^6.0.0 || ^7.0.0 wrangler: ^3.28.2 || ^4.0.0 @@ -2265,11 +2259,11 @@ packages: wrangler: optional: true - '@react-router/node@0.0.0-experimental-23decd7bc': - resolution: {integrity: sha512-y9tOT+jEzBGXrwBjCq2obqKe+N6znsT+I02R/SDFTqTcXrdTJ7aK0iRnWGHxUw/FrOxoPeGkA0v5dWoJI0jBew==} + '@react-router/node@7.7.0': + resolution: {integrity: sha512-PTl4C+QjWsbTfp+9mybOzIH10ZM/pjZrAlcoxc/KGYxcfWDEe2GDFFBQN6nGZgJe/0SwSjHsVwqo2haMKgTbvQ==} engines: {node: '>=20.0.0'} peerDependencies: - react-router: 0.0.0-experimental-23decd7bc + react-router: 7.7.0 typescript: ^5.1.0 peerDependenciesMeta: typescript: @@ -4076,6 +4070,10 @@ packages: resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} engines: {node: '>=16'} + isbot@5.1.28: + resolution: {integrity: sha512-qrOp4g3xj8YNse4biorv6O5ZShwsJM0trsoda4y7j/Su7ZtTTfVXFzbKkpgcSoDrHS8FcTuUwcU04YimZlZOxw==} + engines: {node: '>=18'} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -4977,8 +4975,8 @@ packages: resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} engines: {node: '>=0.10.0'} - react-router@0.0.0-experimental-23decd7bc: - resolution: {integrity: sha512-oTDa74rdP6WACxX8wihI71TiwQa+3aAXNjGGm20OAyA4hGdfe0VBEbJvuIT0vxR+LKsJisI4rpaq0boBGY3m+g==} + react-router@7.7.0: + resolution: {integrity: sha512-3FUYSwlvB/5wRJVTL/aavqHmfUKe0+Xm9MllkYgGo9eDwNdkvwlJGjpPxono1kCycLt6AnDTgjmXvK3/B4QGuw==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' @@ -5894,7 +5892,7 @@ snapshots: '@babel/helper-optimise-call-expression': 7.27.1 '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.0) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.27.7 + '@babel/traverse': 7.28.0 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -5903,8 +5901,8 @@ snapshots: '@babel/helper-member-expression-to-functions@7.27.1': dependencies: - '@babel/traverse': 7.27.7 - '@babel/types': 7.28.0 + '@babel/traverse': 7.28.0 + '@babel/types': 7.28.1 transitivePeerDependencies: - supports-color @@ -5933,7 +5931,7 @@ snapshots: '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.28.0 + '@babel/types': 7.28.1 '@babel/helper-plugin-utils@7.27.1': {} @@ -5942,14 +5940,14 @@ snapshots: '@babel/core': 7.28.0 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.27.7 + '@babel/traverse': 7.28.0 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: - '@babel/traverse': 7.27.7 - '@babel/types': 7.28.0 + '@babel/traverse': 7.28.0 + '@babel/types': 7.28.1 transitivePeerDependencies: - supports-color @@ -5978,11 +5976,6 @@ snapshots: '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-pipeline-operator': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-syntax-decorators@7.27.1(@babel/core@7.28.0)': - dependencies: - '@babel/core': 7.28.0 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.0)': dependencies: '@babel/core': 7.28.0 @@ -6898,31 +6891,31 @@ snapshots: dependencies: quansync: 0.2.10 - '@react-router/dev@0.0.0-experimental-23decd7bc(@types/node@22.16.5)(babel-plugin-macros@3.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(react-router@0.0.0-experimental-23decd7bc(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tsx@4.20.3)(typescript@5.8.3)(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(wrangler@4.25.1)(yaml@2.7.1)': + '@react-router/dev@7.7.0(@types/node@22.16.5)(babel-plugin-macros@3.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(react-router@7.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tsx@4.20.3)(typescript@5.8.3)(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(wrangler@4.25.1)(yaml@2.7.1)': dependencies: '@babel/core': 7.28.0 - '@babel/generator': 7.27.5 - '@babel/parser': 7.27.7 - '@babel/plugin-syntax-decorators': 7.27.1(@babel/core@7.28.0) + '@babel/generator': 7.28.0 + '@babel/parser': 7.28.0 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0) '@babel/preset-typescript': 7.27.1(@babel/core@7.28.0) - '@babel/traverse': 7.27.7 - '@babel/types': 7.27.7 + '@babel/traverse': 7.28.0 + '@babel/types': 7.28.1 '@npmcli/package-json': 4.0.1 - '@react-router/node': 0.0.0-experimental-23decd7bc(react-router@0.0.0-experimental-23decd7bc(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(typescript@5.8.3) + '@react-router/node': 7.7.0(react-router@7.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(typescript@5.8.3) arg: 5.0.2 babel-dead-code-elimination: 1.0.10 chokidar: 4.0.3 dedent: 1.6.0(babel-plugin-macros@3.1.0) es-module-lexer: 1.7.0 exit-hook: 2.2.1 + isbot: 5.1.28 jsesc: 3.0.2 lodash: 4.17.21 pathe: 1.1.2 picocolors: 1.1.1 prettier: 2.8.8 react-refresh: 0.14.2 - react-router: 0.0.0-experimental-23decd7bc(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react-router: 7.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) semver: 7.7.2 set-cookie-parser: 2.7.1 tinyglobby: 0.2.14 @@ -6948,10 +6941,10 @@ snapshots: - tsx - yaml - '@react-router/node@0.0.0-experimental-23decd7bc(react-router@0.0.0-experimental-23decd7bc(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(typescript@5.8.3)': + '@react-router/node@7.7.0(react-router@7.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(typescript@5.8.3)': dependencies: '@mjackson/node-fetch-server': 0.2.0 - react-router: 0.0.0-experimental-23decd7bc(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react-router: 7.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) optionalDependencies: typescript: 5.8.3 @@ -7765,9 +7758,9 @@ snapshots: babel-dead-code-elimination@1.0.10: dependencies: '@babel/core': 7.28.0 - '@babel/parser': 7.27.7 - '@babel/traverse': 7.27.7 - '@babel/types': 7.27.7 + '@babel/parser': 7.28.0 + '@babel/traverse': 7.28.0 + '@babel/types': 7.28.1 transitivePeerDependencies: - supports-color @@ -8739,6 +8732,8 @@ snapshots: dependencies: is-inside-container: 1.0.0 + isbot@5.1.28: {} + isexe@2.0.0: {} jackspeak@3.4.3: @@ -9761,7 +9756,7 @@ snapshots: react-refresh@0.17.0: {} - react-router@0.0.0-experimental-23decd7bc(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-router@7.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: cookie: 1.0.2 react: 19.1.0 From 3e2f5a9e03f56d1a218f030a71be72ef28b91a43 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sun, 27 Jul 2025 13:37:41 +0900 Subject: [PATCH 137/313] ci(rsc): test react nightly (#630) Co-authored-by: Claude --- .github/workflows/ci-rsc.yml | 20 ++++++++-- packages/plugin-rsc/e2e/basic.test.ts | 4 +- packages/plugin-rsc/e2e/fixture.ts | 40 ++++++++++---------- packages/plugin-rsc/e2e/react-router.test.ts | 5 +++ 4 files changed, 41 insertions(+), 28 deletions(-) diff --git a/.github/workflows/ci-rsc.yml b/.github/workflows/ci-rsc.yml index 3f0f3cc00..1409cfaac 100644 --- a/.github/workflows/ci-rsc.yml +++ b/.github/workflows/ci-rsc.yml @@ -32,13 +32,14 @@ jobs: - run: pnpm -C packages/plugin-rsc test test-e2e: - name: test-rsc (${{ matrix.os }} / ${{ matrix.browser }}) ${{ matrix.rolldown == true && '(rolldown)' || '' }} + name: test-rsc (${{ matrix.os }} / ${{ matrix.browser }}) ${{ matrix.rolldown == true && '(rolldown)' || '' }} ${{ matrix.react_version && format('(react-{0})', matrix.react_version) || '' }} runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, macos-latest, windows-latest] browser: [chromium] rolldown: [false] + react_version: [""] include: - os: ubuntu-latest browser: firefox @@ -47,6 +48,12 @@ jobs: - os: ubuntu-latest browser: chromium rolldown: true + - os: ubuntu-latest + browser: chromium + react_version: canary + - os: ubuntu-latest + browser: chromium + react_version: experimental fail-fast: false steps: - uses: actions/checkout@v4 @@ -55,6 +62,13 @@ jobs: node-version: 22 - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 - run: pnpm i + - name: install react + if: ${{ matrix.react_version }} + run: | + sed -i "/^overrides:/a\ react: \"${{ matrix.react_version }}\"" pnpm-workspace.yaml + sed -i "/^overrides:/a\ react-dom: \"${{ matrix.react_version }}\"" pnpm-workspace.yaml + sed -i "/^overrides:/a\ react-server-dom-webpack: \"${{ matrix.react_version }}\"" pnpm-workspace.yaml + pnpm i --no-frozen-lockfile - run: pnpm build - name: install rolldown if: ${{ matrix.rolldown }} @@ -63,11 +77,9 @@ jobs: pnpm i --no-frozen-lockfile - run: pnpm -C packages/plugin-rsc exec playwright install ${{ matrix.browser }} - run: pnpm -C packages/plugin-rsc test-e2e-ci --project=${{ matrix.browser }} - env: - TEST_ISOLATED: true - uses: actions/upload-artifact@v4 if: always() with: - name: test-results-${{ matrix.os }}-${{ matrix.browser }}${{ matrix.rolldown == true && '-rolldown' || '' }} + name: test-results-${{ matrix.os }}-${{ matrix.browser }}${{ matrix.rolldown == true && '-rolldown' || '' }}${{ matrix.react_version && format('-react-{0}', matrix.react_version) || '' }} path: | packages/plugin-rsc/test-results diff --git a/packages/plugin-rsc/e2e/basic.test.ts b/packages/plugin-rsc/e2e/basic.test.ts index c02cec2a5..30ffc231d 100644 --- a/packages/plugin-rsc/e2e/basic.test.ts +++ b/packages/plugin-rsc/e2e/basic.test.ts @@ -923,9 +923,7 @@ function defineTest(f: Fixture) { expect(errors).toMatchObject([ { message: expect.stringContaining( - f.mode === 'dev' - ? `Hydration failed because the server rendered HTML didn't match the client.` - : `Minified React error #418`, + f.mode === 'dev' ? `Hydration failed` : `Minified React error #418`, ), }, ]) diff --git a/packages/plugin-rsc/e2e/fixture.ts b/packages/plugin-rsc/e2e/fixture.ts index 71a363c68..b21ac65ca 100644 --- a/packages/plugin-rsc/e2e/fixture.ts +++ b/packages/plugin-rsc/e2e/fixture.ts @@ -158,16 +158,25 @@ export async function setupIsolatedFixture(options: { filter: (src) => !src.includes('node_modules'), }) - // setup package.json overrides - const packagesDir = path.join(import.meta.dirname, '..', '..') - const overrides = { - '@vitejs/plugin-rsc': `file:${path.join(packagesDir, 'plugin-rsc')}`, - '@vitejs/plugin-react': `file:${path.join(packagesDir, 'plugin-react')}`, - } - editFileJson(path.join(options.dest, 'package.json'), (pkg: any) => { - Object.assign(((pkg.pnpm ??= {}).overrides ??= {}), overrides) - return pkg - }) + // extract workspace overrides + const rootDir = path.join(import.meta.dirname, '..', '..', '..') + const workspaceYaml = fs.readFileSync( + path.join(rootDir, 'pnpm-workspace.yaml'), + 'utf-8', + ) + const overridesMatch = workspaceYaml.match( + /overrides:\s*([\s\S]*?)(?=\n\w|\n*$)/, + ) + const overridesSection = overridesMatch ? overridesMatch[0] : 'overrides:' + const tempWorkspaceYaml = `\ +${overridesSection} + '@vitejs/plugin-rsc': ${JSON.stringify('file:' + path.join(rootDir, 'packages/plugin-rsc'))} + '@vitejs/plugin-react': ${JSON.stringify('file:' + path.join(rootDir, 'packages/plugin-react'))} +` + fs.writeFileSync( + path.join(options.dest, 'pnpm-workspace.yaml'), + tempWorkspaceYaml, + ) // install await x('pnpm', ['i'], { @@ -183,17 +192,6 @@ export async function setupIsolatedFixture(options: { }) } -function editFileJson(filepath: string, edit: (s: string) => string) { - fs.writeFileSync( - filepath, - JSON.stringify( - edit(JSON.parse(fs.readFileSync(filepath, 'utf-8'))), - null, - 2, - ), - ) -} - // inspired by // https://github.com/remix-run/react-router/blob/433872f6ab098eaf946cc6c9cf80abf137420ad2/integration/helpers/vite.ts#L239 // for syntax highlighting of /* js */, use this extension diff --git a/packages/plugin-rsc/e2e/react-router.test.ts b/packages/plugin-rsc/e2e/react-router.test.ts index 01637fb58..e62352e84 100644 --- a/packages/plugin-rsc/e2e/react-router.test.ts +++ b/packages/plugin-rsc/e2e/react-router.test.ts @@ -3,8 +3,11 @@ import { expect, test } from '@playwright/test' import { type Fixture, useFixture } from './fixture' import { expectNoReload, testNoJs, waitForHydration } from './helper' import { readFileSync } from 'node:fs' +import React from 'react' test.describe('dev-default', () => { + test.skip(/canary|experimental/.test(React.version)) + const f = useFixture({ root: 'examples/react-router', mode: 'dev' }) defineTest(f) }) @@ -15,6 +18,8 @@ test.describe('build-default', () => { }) test.describe('dev-cloudflare', () => { + test.skip(/canary|experimental/.test(React.version)) + const f = useFixture({ root: 'examples/react-router', mode: 'dev', From d1fe8c2d56af0cc86391dc2c89d526c533b31ca8 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sun, 27 Jul 2025 13:48:15 +0900 Subject: [PATCH 138/313] release: plugin-rsc@0.4.14 --- packages/plugin-rsc/CHANGELOG.md | 27 +++++++++++++++++++++++++++ packages/plugin-rsc/package.json | 2 +- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/plugin-rsc/CHANGELOG.md b/packages/plugin-rsc/CHANGELOG.md index 41df21904..cf3ddac58 100644 --- a/packages/plugin-rsc/CHANGELOG.md +++ b/packages/plugin-rsc/CHANGELOG.md @@ -1,3 +1,30 @@ +## [0.4.14](https://github.com/vitejs/vite-plugin-react/compare/plugin-rsc@0.4.13...plugin-rsc@0.4.14) (2025-07-27) +### Features + +* **rsc:** validate `client-only` and `server-only` import during resolve ([#624](https://github.com/vitejs/vite-plugin-react/issues/624)) ([47d02d0](https://github.com/vitejs/vite-plugin-react/commit/47d02d0643cecc8243c72fddd9e125cc3d020847)) + +### Bug Fixes + +* **rsc:** add `getEntrySource` assertion error message ([#633](https://github.com/vitejs/vite-plugin-react/issues/633)) ([4568556](https://github.com/vitejs/vite-plugin-react/commit/45685561d7e85cd6e2f77dc383cc6728d5fc916f)) +* **rsc:** handle transform errors before server hmr ([#626](https://github.com/vitejs/vite-plugin-react/issues/626)) ([d28356f](https://github.com/vitejs/vite-plugin-react/commit/d28356f5caca2867ced9af3a02a3f441ff4a5238)) + +### Documentation + +* **rsc:** fix jsdoc ([#623](https://github.com/vitejs/vite-plugin-react/issues/623)) ([73d457b](https://github.com/vitejs/vite-plugin-react/commit/73d457b2774c26a9fd1ec0f53aee8b4ff60dacd6)) + +### Miscellaneous Chores + +* **deps:** update react-router ([#632](https://github.com/vitejs/vite-plugin-react/issues/632)) ([b077c4a](https://github.com/vitejs/vite-plugin-react/commit/b077c4a774ebe4a059902f3e0cb043c7194cceeb)) + +### Tests + +* **rsc:** parallel e2e ([#628](https://github.com/vitejs/vite-plugin-react/issues/628)) ([24ddea4](https://github.com/vitejs/vite-plugin-react/commit/24ddea46d016311a8efe34314a4faa9d61af0d9d)) +* **rsc:** split starter tests into multiple files ([#629](https://github.com/vitejs/vite-plugin-react/issues/629)) ([707f35b](https://github.com/vitejs/vite-plugin-react/commit/707f35bfe1fb047a453fca6281885bc1565303fc)) + +### Continuous Integration + +* **rsc:** test react nightly ([#630](https://github.com/vitejs/vite-plugin-react/issues/630)) ([3e2f5a9](https://github.com/vitejs/vite-plugin-react/commit/3e2f5a9e03f56d1a218f030a71be72ef28b91a43)) + ## [0.4.13](https://github.com/vitejs/vite-plugin-react/compare/plugin-rsc@0.4.12...plugin-rsc@0.4.13) (2025-07-24) ### Features diff --git a/packages/plugin-rsc/package.json b/packages/plugin-rsc/package.json index afaf97c7b..7932edba1 100644 --- a/packages/plugin-rsc/package.json +++ b/packages/plugin-rsc/package.json @@ -1,6 +1,6 @@ { "name": "@vitejs/plugin-rsc", - "version": "0.4.13", + "version": "0.4.14", "description": "React Server Components (RSC) support for Vite.", "keywords": [ "vite", From 3e154c821daa25ecf538f8182fbdc593c1d62e3d Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 28 Jul 2025 07:59:01 +0900 Subject: [PATCH 139/313] test(react): test no refresh transform for non-jsx files (#547) --- playground/react/App.jsx | 3 +++ playground/react/__tests__/react.spec.ts | 6 ++++++ playground/react/non-jsx/test.ts | 7 +++++++ 3 files changed, 16 insertions(+) create mode 100644 playground/react/non-jsx/test.ts diff --git a/playground/react/App.jsx b/playground/react/App.jsx index 3d1b29988..ac393c306 100644 --- a/playground/react/App.jsx +++ b/playground/react/App.jsx @@ -7,6 +7,7 @@ import { JsxImportRuntime } from './hmr/jsx-import-runtime' import { CountProvider } from './context/CountProvider' import { ContextButton } from './context/ContextButton' import { TestImportAttributes } from './import-attributes/test' +import { TEST_NON_JSX, TestNonJsx } from './non-jsx/test' function App() { const [count, setCount] = useState(0) @@ -47,6 +48,8 @@ function App() { + {TestNonJsx()} + {TEST_NON_JSX()} ) } diff --git a/playground/react/__tests__/react.spec.ts b/playground/react/__tests__/react.spec.ts index ea78cabfe..6495194cf 100644 --- a/playground/react/__tests__/react.spec.ts +++ b/playground/react/__tests__/react.spec.ts @@ -163,4 +163,10 @@ if (!isBuild) { .poll(() => page.textContent('#accordion-root')) .toMatch('Accordion Root Updated') }) + + 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() + expect(code).not.toContain('$RefreshReg$') + }) } diff --git a/playground/react/non-jsx/test.ts b/playground/react/non-jsx/test.ts new file mode 100644 index 000000000..ec12ec129 --- /dev/null +++ b/playground/react/non-jsx/test.ts @@ -0,0 +1,7 @@ +export const TestNonJsx = () => { + return 'TestNonJsx' +} + +export const TEST_NON_JSX = () => { + return 'TEST_NON_JSX' +} From 0f40c3b14d74d8c1aec1fc44d0409e164f0f3a2e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 28 Jul 2025 10:31:43 +0900 Subject: [PATCH 140/313] chore(deps): update actions-cool/issues-helper digest to 50068f4 (#638) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/issue-close-require.yml | 2 +- .github/workflows/issue-labeled.yml | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/issue-close-require.yml b/.github/workflows/issue-close-require.yml index 6dce7b71a..4ed095524 100644 --- a/.github/workflows/issue-close-require.yml +++ b/.github/workflows/issue-close-require.yml @@ -13,7 +13,7 @@ jobs: pull-requests: write # for actions-cool/issues-helper to update PRs steps: - name: need reproduction - uses: actions-cool/issues-helper@a610082f8ac0cf03e357eb8dd0d5e2ba075e017e # v3 + uses: actions-cool/issues-helper@50068f49b7b2b3857270ead65e2d02e4459b022c # v3 with: actions: "close-issues" token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/issue-labeled.yml b/.github/workflows/issue-labeled.yml index fdbebdcb0..7560af04b 100644 --- a/.github/workflows/issue-labeled.yml +++ b/.github/workflows/issue-labeled.yml @@ -14,7 +14,7 @@ jobs: steps: - name: contribution welcome if: github.event.label.name == 'contribution welcome' || github.event.label.name == 'help wanted' - uses: actions-cool/issues-helper@a610082f8ac0cf03e357eb8dd0d5e2ba075e017e # v3 + uses: actions-cool/issues-helper@50068f49b7b2b3857270ead65e2d02e4459b022c # v3 with: actions: "create-comment, remove-labels" token: ${{ secrets.GITHUB_TOKEN }} @@ -25,7 +25,7 @@ jobs: - name: remove pending if: (github.event.label.name == 'enhancement' || contains(github.event.label.description, '(priority)')) && contains(github.event.issue.labels.*.name, 'pending triage') - uses: actions-cool/issues-helper@a610082f8ac0cf03e357eb8dd0d5e2ba075e017e # v3 + uses: actions-cool/issues-helper@50068f49b7b2b3857270ead65e2d02e4459b022c # v3 with: actions: "remove-labels" token: ${{ secrets.GITHUB_TOKEN }} @@ -34,7 +34,7 @@ jobs: - name: need reproduction if: github.event.label.name == 'need reproduction' - uses: actions-cool/issues-helper@a610082f8ac0cf03e357eb8dd0d5e2ba075e017e # v3 + uses: actions-cool/issues-helper@50068f49b7b2b3857270ead65e2d02e4459b022c # v3 with: actions: "create-comment, remove-labels" token: ${{ secrets.GITHUB_TOKEN }} From da0a78607d18be534232fba5ea95bb96cc987449 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 28 Jul 2025 10:34:49 +0900 Subject: [PATCH 141/313] feat(rsc): show warning for non optimized cjs (#635) --- packages/plugin-rsc/e2e/basic.test.ts | 22 +++++++++++ packages/plugin-rsc/e2e/fixture.ts | 17 ++++++++- .../plugin-rsc/examples/basic/vite.config.ts | 2 - packages/plugin-rsc/src/plugin.ts | 37 ++++++++++++++++++- 4 files changed, 72 insertions(+), 6 deletions(-) diff --git a/packages/plugin-rsc/e2e/basic.test.ts b/packages/plugin-rsc/e2e/basic.test.ts index 30ffc231d..6e6aef111 100644 --- a/packages/plugin-rsc/e2e/basic.test.ts +++ b/packages/plugin-rsc/e2e/basic.test.ts @@ -46,6 +46,28 @@ test.describe('build-default', () => { defineTest(f) }) +test.describe('dev-non-optimized-cjs', () => { + test.beforeAll(async () => { + // remove explicitly added optimizeDeps.include + const editor = f.createEditor('vite.config.ts') + editor.edit((s) => + s.replace( + `'@vitejs/test-dep-transitive-cjs > use-sync-external-store/shim/index.js',`, + ``, + ), + ) + }) + + const f = useFixture({ root: 'examples/basic', mode: 'dev' }) + + test('show warning', async ({ page }) => { + await page.goto(f.url()) + expect(f.proc().stderr()).toContain( + `[vite-rsc] found non-optimized CJS dependency in 'ssr' environment.`, + ) + }) +}) + function defineTest(f: Fixture) { test('basic', async ({ page }) => { using _ = expectNoPageError(page) diff --git a/packages/plugin-rsc/e2e/fixture.ts b/packages/plugin-rsc/e2e/fixture.ts index b21ac65ca..aa61f332a 100644 --- a/packages/plugin-rsc/e2e/fixture.ts +++ b/packages/plugin-rsc/e2e/fixture.ts @@ -10,12 +10,16 @@ function runCli(options: { command: string; label?: string } & SpawnOptions) { const [name, ...args] = options.command.split(' ') const child = x(name!, args, { nodeOptions: options }).process! const label = `[${options.label ?? 'cli'}]` + let stdout = '' + let stderr = '' child.stdout!.on('data', (data) => { + stdout += stripVTControlCharacters(String(data)) if (process.env.TEST_DEBUG) { console.log(styleText('cyan', label), data.toString()) } }) child.stderr!.on('data', (data) => { + stderr += stripVTControlCharacters(String(data)) console.log(styleText('magenta', label), data.toString()) }) const done = new Promise((resolve) => { @@ -48,7 +52,14 @@ function runCli(options: { command: string; label?: string } & SpawnOptions) { } } - return { proc: child, done, findPort, kill } + return { + proc: child, + done, + findPort, + kill, + stdout: () => stdout, + stderr: () => stderr, + } } export type Fixture = ReturnType @@ -64,12 +75,13 @@ export function useFixture(options: { let baseURL!: string const cwd = path.resolve(options.root) + let proc!: ReturnType // TODO: `beforeAll` is called again on any test failure. // https://playwright.dev/docs/test-retries test.beforeAll(async () => { if (options.mode === 'dev') { - const proc = runCli({ + proc = runCli({ command: options.command ?? `pnpm dev`, label: `${options.root}:dev`, cwd, @@ -144,6 +156,7 @@ export function useFixture(options: { root: cwd, url: (url: string = './') => new URL(url, baseURL).href, createEditor, + proc: () => proc, } } diff --git a/packages/plugin-rsc/examples/basic/vite.config.ts b/packages/plugin-rsc/examples/basic/vite.config.ts index b0eec5511..d4ee08d3b 100644 --- a/packages/plugin-rsc/examples/basic/vite.config.ts +++ b/packages/plugin-rsc/examples/basic/vite.config.ts @@ -151,8 +151,6 @@ export default { fetch: handler }; }, ssr: { optimizeDeps: { - // TODO: this should be somehow auto inferred or at least show a warning - // to guide users to `optimizeDeps.include` include: [ '@vitejs/test-dep-transitive-cjs > use-sync-external-store/shim/index.js', ], diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index cc3861b52..c89213f94 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -20,7 +20,7 @@ import { normalizePath, parseAstAsync, } from 'vite' -import { crawlFrameworkPkgs } from 'vitefu' +import { crawlFrameworkPkgs, findClosestPkgJsonPath } from 'vitefu' import vitePluginRscCore from './core/plugin' import { type TransformWrapExportFilter, @@ -838,9 +838,42 @@ globalThis.AsyncLocalStorage = __viteRscAyncHooks.AsyncLocalStorage; ? [validateImportPlugin()] : []), scanBuildStripPlugin(), + detectNonOptimizedCjsPlugin(), ] } +function detectNonOptimizedCjsPlugin(): Plugin { + return { + name: 'rsc:detect-non-optimized-cjs', + apply: 'serve', + async transform(code, id) { + if ( + id.includes('/node_modules/') && + !id.startsWith(this.environment.config.cacheDir) && + /\b(require|exports)\b/.test(code) + ) { + id = parseIdQuery(id).filename + let isEsm = id.endsWith('.mjs') + if (id.endsWith('.js')) { + const pkgJsonPath = await findClosestPkgJsonPath(path.dirname(id)) + if (pkgJsonPath) { + const pkgJson = JSON.parse( + fs.readFileSync(pkgJsonPath, 'utf-8'), + ) as { type?: string } + isEsm = pkgJson.type === 'module' + } + } + if (!isEsm) { + this.warn( + `[vite-rsc] found non-optimized CJS dependency in '${this.environment.name}' environment. ` + + `It is recommended to manually add the dependency to 'environments.${this.environment.name}.optimizeDeps.include'.`, + ) + } + } + }, + } +} + function scanBuildStripPlugin(): Plugin { return { name: 'rsc:scan-strip', @@ -1900,7 +1933,7 @@ function evalValue(rawValue: string): T { // https://github.com/vitejs/vite-plugin-vue/blob/06931b1ea2b9299267374cb8eb4db27c0626774a/packages/plugin-vue/src/utils/query.ts#L13 function parseIdQuery(id: string) { if (!id.includes('?')) return { filename: id, query: {} } - const [filename, rawQuery] = id.split(`?`, 2) + const [filename, rawQuery] = id.split(`?`, 2) as [string, string] const query = Object.fromEntries(new URLSearchParams(rawQuery)) return { filename, query } } From d1b163638899ce207283020932bdde4b5d49fa73 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 28 Jul 2025 10:40:40 +0900 Subject: [PATCH 142/313] chore(deps): pnpm dedupe (#642) --- pnpm-lock.yaml | 827 ++++--------------------------------------------- 1 file changed, 56 insertions(+), 771 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2bd9797c0..35d11c015 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -168,7 +168,7 @@ importers: version: 11.3.0 prettier: specifier: ^3.0.3 - version: 3.1.0 + version: 3.6.2 tsdown: specifier: ^0.13.0 version: 0.13.0(publint@0.3.12)(typescript@5.8.3) @@ -1025,10 +1025,6 @@ packages: resolution: {integrity: sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==} engines: {node: '>=6.9.0'} - '@babel/generator@7.27.5': - resolution: {integrity: sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==} - engines: {node: '>=6.9.0'} - '@babel/generator@7.28.0': resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==} engines: {node: '>=6.9.0'} @@ -1055,10 +1051,6 @@ packages: resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.25.9': - resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} - engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.27.1': resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} engines: {node: '>=6.9.0'} @@ -1103,11 +1095,6 @@ packages: resolution: {integrity: sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==} engines: {node: '>=6.9.0'} - '@babel/parser@7.27.7': - resolution: {integrity: sha512-qnzXzDXdr/po3bOTbTIQZ7+TxNKxpkN5IifVLXS+r7qwynkZfPyjZfE7hCXbo7IoO9TNcSyibgONsf2HauUd3Q==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.28.0': resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} engines: {node: '>=6.0.0'} @@ -1187,22 +1174,10 @@ packages: resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.27.7': - resolution: {integrity: sha512-X6ZlfR/O/s5EQ/SnUSLzr+6kGnkg8HXGMzpgsMsrJVcfDtH1vIp6ctCN4eZ1LS5c0+te5Cb6Y514fASjMRJ1nw==} - engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.0': resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==} engines: {node: '>=6.9.0'} - '@babel/types@7.27.7': - resolution: {integrity: sha512-8OLQgDScAOHXnAz2cV+RfzzNMipuLVBz2biuAJFMV9bfkNf393je3VM8CLkjQodW5+iWsSJdSgSWT6rsZoXHPw==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.28.0': - resolution: {integrity: sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg==} - engines: {node: '>=6.9.0'} - '@babel/types@7.28.1': resolution: {integrity: sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==} engines: {node: '>=6.9.0'} @@ -1272,21 +1247,12 @@ packages: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - '@emnapi/core@1.4.3': - resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==} - '@emnapi/core@1.4.5': resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==} - '@emnapi/runtime@1.4.3': - resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} - '@emnapi/runtime@1.4.5': resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==} - '@emnapi/wasi-threads@1.0.2': - resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==} - '@emnapi/wasi-threads@1.0.4': resolution: {integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==} @@ -1359,12 +1325,6 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.25.2': - resolution: {integrity: sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.25.4': resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==} engines: {node: '>=18'} @@ -1383,12 +1343,6 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.25.2': - resolution: {integrity: sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.25.4': resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==} engines: {node: '>=18'} @@ -1407,12 +1361,6 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.25.2': - resolution: {integrity: sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.25.4': resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==} engines: {node: '>=18'} @@ -1431,12 +1379,6 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.25.2': - resolution: {integrity: sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.25.4': resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==} engines: {node: '>=18'} @@ -1455,12 +1397,6 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.25.2': - resolution: {integrity: sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.25.4': resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==} engines: {node: '>=18'} @@ -1479,12 +1415,6 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.25.2': - resolution: {integrity: sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.25.4': resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==} engines: {node: '>=18'} @@ -1503,12 +1433,6 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.25.2': - resolution: {integrity: sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.25.4': resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==} engines: {node: '>=18'} @@ -1527,12 +1451,6 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.2': - resolution: {integrity: sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.25.4': resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==} engines: {node: '>=18'} @@ -1551,12 +1469,6 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.25.2': - resolution: {integrity: sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.25.4': resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==} engines: {node: '>=18'} @@ -1575,12 +1487,6 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.25.2': - resolution: {integrity: sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.25.4': resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==} engines: {node: '>=18'} @@ -1599,12 +1505,6 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.25.2': - resolution: {integrity: sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.25.4': resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==} engines: {node: '>=18'} @@ -1623,12 +1523,6 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.25.2': - resolution: {integrity: sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.25.4': resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==} engines: {node: '>=18'} @@ -1647,12 +1541,6 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.25.2': - resolution: {integrity: sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.25.4': resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==} engines: {node: '>=18'} @@ -1671,12 +1559,6 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.25.2': - resolution: {integrity: sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.25.4': resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==} engines: {node: '>=18'} @@ -1695,12 +1577,6 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.25.2': - resolution: {integrity: sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.25.4': resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==} engines: {node: '>=18'} @@ -1719,12 +1595,6 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.25.2': - resolution: {integrity: sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.25.4': resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==} engines: {node: '>=18'} @@ -1743,12 +1613,6 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.25.2': - resolution: {integrity: sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.25.4': resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==} engines: {node: '>=18'} @@ -1767,12 +1631,6 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-arm64@0.25.2': - resolution: {integrity: sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - '@esbuild/netbsd-arm64@0.25.4': resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==} engines: {node: '>=18'} @@ -1791,12 +1649,6 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.2': - resolution: {integrity: sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.25.4': resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==} engines: {node: '>=18'} @@ -1815,12 +1667,6 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.25.2': - resolution: {integrity: sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - '@esbuild/openbsd-arm64@0.25.4': resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==} engines: {node: '>=18'} @@ -1839,12 +1685,6 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.2': - resolution: {integrity: sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.25.4': resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==} engines: {node: '>=18'} @@ -1863,12 +1703,6 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.25.2': - resolution: {integrity: sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.25.4': resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==} engines: {node: '>=18'} @@ -1887,12 +1721,6 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.25.2': - resolution: {integrity: sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.25.4': resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==} engines: {node: '>=18'} @@ -1911,12 +1739,6 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.25.2': - resolution: {integrity: sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.25.4': resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==} engines: {node: '>=18'} @@ -1935,12 +1757,6 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.25.2': - resolution: {integrity: sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.25.4': resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==} engines: {node: '>=18'} @@ -2134,24 +1950,13 @@ packages: '@jridgewell/gen-mapping@0.3.12': resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} - '@jridgewell/gen-mapping@0.3.5': - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} - engines: {node: '>=6.0.0'} - '@jridgewell/resolve-uri@3.1.1': resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@jridgewell/trace-mapping@0.3.29': resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} @@ -2387,15 +2192,6 @@ packages: rollup: optional: true - '@rollup/pluginutils@5.1.0': - resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - '@rollup/pluginutils@5.1.4': resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} engines: {node: '>=14.0.0'} @@ -2405,201 +2201,101 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.37.0': - resolution: {integrity: sha512-l7StVw6WAa8l3vA1ov80jyetOAEo1FtHvZDbzXDO/02Sq/QVvqlHkYoFwDJPIMj0GKiistsBudfx5tGFnwYWDQ==} - cpu: [arm] - os: [android] - '@rollup/rollup-android-arm-eabi@4.44.1': resolution: {integrity: sha512-JAcBr1+fgqx20m7Fwe1DxPUl/hPkee6jA6Pl7n1v2EFiktAHenTaXl5aIFjUIEsfn9w3HE4gK1lEgNGMzBDs1w==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.37.0': - resolution: {integrity: sha512-6U3SlVyMxezt8Y+/iEBcbp945uZjJwjZimu76xoG7tO1av9VO691z8PkhzQ85ith2I8R2RddEPeSfcbyPfD4hA==} - cpu: [arm64] - os: [android] - '@rollup/rollup-android-arm64@4.44.1': resolution: {integrity: sha512-RurZetXqTu4p+G0ChbnkwBuAtwAbIwJkycw1n6GvlGlBuS4u5qlr5opix8cBAYFJgaY05TWtM+LaoFggUmbZEQ==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.37.0': - resolution: {integrity: sha512-+iTQ5YHuGmPt10NTzEyMPbayiNTcOZDWsbxZYR1ZnmLnZxG17ivrPSWFO9j6GalY0+gV3Jtwrrs12DBscxnlYA==} - cpu: [arm64] - os: [darwin] - '@rollup/rollup-darwin-arm64@4.44.1': resolution: {integrity: sha512-fM/xPesi7g2M7chk37LOnmnSTHLG/v2ggWqKj3CCA1rMA4mm5KVBT1fNoswbo1JhPuNNZrVwpTvlCVggv8A2zg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.37.0': - resolution: {integrity: sha512-m8W2UbxLDcmRKVjgl5J/k4B8d7qX2EcJve3Sut7YGrQoPtCIQGPH5AMzuFvYRWZi0FVS0zEY4c8uttPfX6bwYQ==} - cpu: [x64] - os: [darwin] - '@rollup/rollup-darwin-x64@4.44.1': resolution: {integrity: sha512-gDnWk57urJrkrHQ2WVx9TSVTH7lSlU7E3AFqiko+bgjlh78aJ88/3nycMax52VIVjIm3ObXnDL2H00e/xzoipw==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.37.0': - resolution: {integrity: sha512-FOMXGmH15OmtQWEt174v9P1JqqhlgYge/bUjIbiVD1nI1NeJ30HYT9SJlZMqdo1uQFyt9cz748F1BHghWaDnVA==} - cpu: [arm64] - os: [freebsd] - '@rollup/rollup-freebsd-arm64@4.44.1': resolution: {integrity: sha512-wnFQmJ/zPThM5zEGcnDcCJeYJgtSLjh1d//WuHzhf6zT3Md1BvvhJnWoy+HECKu2bMxaIcfWiu3bJgx6z4g2XA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.37.0': - resolution: {integrity: sha512-SZMxNttjPKvV14Hjck5t70xS3l63sbVwl98g3FlVVx2YIDmfUIy29jQrsw06ewEYQ8lQSuY9mpAPlmgRD2iSsA==} - cpu: [x64] - os: [freebsd] - '@rollup/rollup-freebsd-x64@4.44.1': resolution: {integrity: sha512-uBmIxoJ4493YATvU2c0upGz87f99e3wop7TJgOA/bXMFd2SvKCI7xkxY/5k50bv7J6dw1SXT4MQBQSLn8Bb/Uw==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.37.0': - resolution: {integrity: sha512-hhAALKJPidCwZcj+g+iN+38SIOkhK2a9bqtJR+EtyxrKKSt1ynCBeqrQy31z0oWU6thRZzdx53hVgEbRkuI19w==} - cpu: [arm] - os: [linux] - '@rollup/rollup-linux-arm-gnueabihf@4.44.1': resolution: {integrity: sha512-n0edDmSHlXFhrlmTK7XBuwKlG5MbS7yleS1cQ9nn4kIeW+dJH+ExqNgQ0RrFRew8Y+0V/x6C5IjsHrJmiHtkxQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.37.0': - resolution: {integrity: sha512-jUb/kmn/Gd8epbHKEqkRAxq5c2EwRt0DqhSGWjPFxLeFvldFdHQs/n8lQ9x85oAeVb6bHcS8irhTJX2FCOd8Ag==} - cpu: [arm] - os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.44.1': resolution: {integrity: sha512-8WVUPy3FtAsKSpyk21kV52HCxB+me6YkbkFHATzC2Yd3yuqHwy2lbFL4alJOLXKljoRw08Zk8/xEj89cLQ/4Nw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.37.0': - resolution: {integrity: sha512-oNrJxcQT9IcbcmKlkF+Yz2tmOxZgG9D9GRq+1OE6XCQwCVwxixYAa38Z8qqPzQvzt1FCfmrHX03E0pWoXm1DqA==} - cpu: [arm64] - os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.44.1': resolution: {integrity: sha512-yuktAOaeOgorWDeFJggjuCkMGeITfqvPgkIXhDqsfKX8J3jGyxdDZgBV/2kj/2DyPaLiX6bPdjJDTu9RB8lUPQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.37.0': - resolution: {integrity: sha512-pfxLBMls+28Ey2enpX3JvjEjaJMBX5XlPCZNGxj4kdJyHduPBXtxYeb8alo0a7bqOoWZW2uKynhHxF/MWoHaGQ==} - cpu: [arm64] - os: [linux] - '@rollup/rollup-linux-arm64-musl@4.44.1': resolution: {integrity: sha512-W+GBM4ifET1Plw8pdVaecwUgxmiH23CfAUj32u8knq0JPFyK4weRy6H7ooxYFD19YxBulL0Ktsflg5XS7+7u9g==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.37.0': - resolution: {integrity: sha512-yCE0NnutTC/7IGUq/PUHmoeZbIwq3KRh02e9SfFh7Vmc1Z7atuJRYWhRME5fKgT8aS20mwi1RyChA23qSyRGpA==} - cpu: [loong64] - os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.44.1': resolution: {integrity: sha512-1zqnUEMWp9WrGVuVak6jWTl4fEtrVKfZY7CvcBmUUpxAJ7WcSowPSAWIKa/0o5mBL/Ij50SIf9tuirGx63Ovew==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.37.0': - resolution: {integrity: sha512-NxcICptHk06E2Lh3a4Pu+2PEdZ6ahNHuK7o6Np9zcWkrBMuv21j10SQDJW3C9Yf/A/P7cutWoC/DptNLVsZ0VQ==} - cpu: [ppc64] - os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.44.1': resolution: {integrity: sha512-Rl3JKaRu0LHIx7ExBAAnf0JcOQetQffaw34T8vLlg9b1IhzcBgaIdnvEbbsZq9uZp3uAH+JkHd20Nwn0h9zPjA==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.37.0': - resolution: {integrity: sha512-PpWwHMPCVpFZLTfLq7EWJWvrmEuLdGn1GMYcm5MV7PaRgwCEYJAwiN94uBuZev0/J/hFIIJCsYw4nLmXA9J7Pw==} - cpu: [riscv64] - os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.44.1': resolution: {integrity: sha512-j5akelU3snyL6K3N/iX7otLBIl347fGwmd95U5gS/7z6T4ftK288jKq3A5lcFKcx7wwzb5rgNvAg3ZbV4BqUSw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.37.0': - resolution: {integrity: sha512-DTNwl6a3CfhGTAOYZ4KtYbdS8b+275LSLqJVJIrPa5/JuIufWWZ/QFvkxp52gpmguN95eujrM68ZG+zVxa8zHA==} - cpu: [riscv64] - os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.44.1': resolution: {integrity: sha512-ppn5llVGgrZw7yxbIm8TTvtj1EoPgYUAbfw0uDjIOzzoqlZlZrLJ/KuiE7uf5EpTpCTrNt1EdtzF0naMm0wGYg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.37.0': - resolution: {integrity: sha512-hZDDU5fgWvDdHFuExN1gBOhCuzo/8TMpidfOR+1cPZJflcEzXdCy1LjnklQdW8/Et9sryOPJAKAQRw8Jq7Tg+A==} - cpu: [s390x] - os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.44.1': resolution: {integrity: sha512-Hu6hEdix0oxtUma99jSP7xbvjkUM/ycke/AQQ4EC5g7jNRLLIwjcNwaUy95ZKBJJwg1ZowsclNnjYqzN4zwkAw==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.37.0': - resolution: {integrity: sha512-pKivGpgJM5g8dwj0ywBwe/HeVAUSuVVJhUTa/URXjxvoyTT/AxsLTAbkHkDHG7qQxLoW2s3apEIl26uUe08LVQ==} - cpu: [x64] - os: [linux] - '@rollup/rollup-linux-x64-gnu@4.44.1': resolution: {integrity: sha512-EtnsrmZGomz9WxK1bR5079zee3+7a+AdFlghyd6VbAjgRJDbTANJ9dcPIPAi76uG05micpEL+gPGmAKYTschQw==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.37.0': - resolution: {integrity: sha512-E2lPrLKE8sQbY/2bEkVTGDEk4/49UYRVWgj90MY8yPjpnGBQ+Xi1Qnr7b7UIWw1NOggdFQFOLZ8+5CzCiz143w==} - cpu: [x64] - os: [linux] - '@rollup/rollup-linux-x64-musl@4.44.1': resolution: {integrity: sha512-iAS4p+J1az6Usn0f8xhgL4PaU878KEtutP4hqw52I4IO6AGoyOkHCxcc4bqufv1tQLdDWFx8lR9YlwxKuv3/3g==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.37.0': - resolution: {integrity: sha512-Jm7biMazjNzTU4PrQtr7VS8ibeys9Pn29/1bm4ph7CP2kf21950LgN+BaE2mJ1QujnvOc6p54eWWiVvn05SOBg==} - cpu: [arm64] - os: [win32] - '@rollup/rollup-win32-arm64-msvc@4.44.1': resolution: {integrity: sha512-NtSJVKcXwcqozOl+FwI41OH3OApDyLk3kqTJgx8+gp6On9ZEt5mYhIsKNPGuaZr3p9T6NWPKGU/03Vw4CNU9qg==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.37.0': - resolution: {integrity: sha512-e3/1SFm1OjefWICB2Ucstg2dxYDkDTZGDYgwufcbsxTHyqQps1UQf33dFEChBNmeSsTOyrjw2JJq0zbG5GF6RA==} - cpu: [ia32] - os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.44.1': resolution: {integrity: sha512-JYA3qvCOLXSsnTR3oiyGws1Dm0YTuxAAeaYGVlGpUsHqloPcFjPg+X0Fj2qODGLNwQOAcCiQmHub/V007kiH5A==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.37.0': - resolution: {integrity: sha512-LWbXUBwn/bcLx2sSsqy7pK5o+Nr+VCoRoAohfJ5C/aBio9nfJmGQqHAhU6pwxV/RmyTk5AqdySma7uwWGlmeuA==} - cpu: [x64] - os: [win32] - '@rollup/rollup-win32-x64-msvc@4.44.1': resolution: {integrity: sha512-J8o22LuF0kTe7m+8PvW9wk3/bRq5+mRo5Dqo6+vXb7otCm3TPhYOJqOaQtGU9YMWQSL3krMnoOxMr0+9E6F3Ug==} cpu: [x64] @@ -2941,10 +2637,6 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/types@8.35.1': - resolution: {integrity: sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.38.0': resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3144,11 +2836,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - acorn@8.14.1: - resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@8.15.0: resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} @@ -3225,9 +2912,6 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - birpc@2.4.0: - resolution: {integrity: sha512-5IdNxTyhXHv2UlgnPHQ0h+5ypVmkrYHzL8QT+DwFZ//2N/oNV8Ch+BCRmTJ3x6/z9Axo/cXYBc9eprsUVK/Jsg==} - birpc@2.5.0: resolution: {integrity: sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==} @@ -3487,15 +3171,6 @@ packages: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} - debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.1: resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} engines: {node: '>=6.0'} @@ -3631,11 +3306,6 @@ packages: engines: {node: '>=18'} hasBin: true - esbuild@0.25.2: - resolution: {integrity: sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==} - engines: {node: '>=18'} - hasBin: true - esbuild@0.25.4: resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==} engines: {node: '>=18'} @@ -3905,10 +3575,6 @@ packages: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true - globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} @@ -4266,9 +3932,6 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - loupe@3.1.3: - resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} - loupe@3.1.4: resolution: {integrity: sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==} @@ -4891,11 +4554,6 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - prettier@3.1.0: - resolution: {integrity: sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==} - engines: {node: '>=14'} - hasBin: true - prettier@3.6.2: resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} engines: {node: '>=14'} @@ -5124,11 +4782,6 @@ packages: rollup: ^3.29.4 || ^4 typescript: ^4.5 || ^5.0 - rollup@4.37.0: - resolution: {integrity: sha512-iAtQy/L4QFU+rTJ1YUjXqJOJzuwEghqWzCEYD2FEghT7Gsy1VdABntrO4CLopA5IkflTyqNiLNwPcOJ3S7UKLg==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - rollup@4.44.1: resolution: {integrity: sha512-x8H8aPvD+xbl0Do8oez5f5o8eMS3trfCghc4HhLAnCkj7Vl0d1JWGs0UF/D886zLW2rOj2QymV/JcSSsw+XDNg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -5368,10 +5021,6 @@ packages: tinyexec@1.0.1: resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} - tinyglobby@0.2.12: - resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} - engines: {node: '>=12.0.0'} - tinyglobby@0.2.14: resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} @@ -5465,9 +5114,6 @@ packages: engines: {node: '>=14.17'} hasBin: true - ufo@1.5.4: - resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} - ufo@1.6.1: resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} @@ -5600,46 +5246,6 @@ packages: '@nuxt/kit': optional: true - vite@7.0.1: - resolution: {integrity: sha512-BiKOQoW5HGR30E6JDeNsati6HnSPMVEKbkIWbCiol+xKeu3g5owrjy7kbk/QEMuzCV87dSUTvycYKmlcfGKq3Q==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 - jiti: '>=1.21.0' - less: ^4.0.0 - lightningcss: ^1.21.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: '>=0.54.8' - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - vite@7.0.5: resolution: {integrity: sha512-1mncVwJxy2C9ThLwz0+2GKZyEXuC3MyWtAAlNftlZZXZDP3AJt5FmwcMit/IGGaNZ8ZOB2BNO/HFUB+CpN0NQw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -5825,8 +5431,8 @@ snapshots: '@ampproject/remapping@2.3.0': dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/gen-mapping': 0.3.12 + '@jridgewell/trace-mapping': 0.3.29 '@babel/code-frame@7.27.1': dependencies: @@ -5847,7 +5453,7 @@ snapshots: '@babel/parser': 7.28.0 '@babel/template': 7.27.2 '@babel/traverse': 7.28.0 - '@babel/types': 7.28.0 + '@babel/types': 7.28.1 convert-source-map: 2.0.0 debug: 4.4.1 gensync: 1.0.0-beta.2 @@ -5856,25 +5462,17 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.27.5': - dependencies: - '@babel/parser': 7.27.7 - '@babel/types': 7.27.7 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 3.0.2 - '@babel/generator@7.28.0': dependencies: '@babel/parser': 7.28.0 - '@babel/types': 7.28.0 + '@babel/types': 7.28.1 '@jridgewell/gen-mapping': 0.3.12 '@jridgewell/trace-mapping': 0.3.29 jsesc: 3.0.2 '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.28.0 + '@babel/types': 7.28.1 '@babel/helper-compilation-targets@7.27.2': dependencies: @@ -5906,17 +5504,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-imports@7.25.9': - dependencies: - '@babel/traverse': 7.27.7 - '@babel/types': 7.28.0 - transitivePeerDependencies: - - supports-color - '@babel/helper-module-imports@7.27.1': dependencies: '@babel/traverse': 7.28.0 - '@babel/types': 7.28.0 + '@babel/types': 7.28.1 transitivePeerDependencies: - supports-color @@ -5960,15 +5551,11 @@ snapshots: '@babel/helpers@7.27.6': dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.28.0 - - '@babel/parser@7.27.7': - dependencies: - '@babel/types': 7.27.7 + '@babel/types': 7.28.1 '@babel/parser@7.28.0': dependencies: - '@babel/types': 7.28.0 + '@babel/types': 7.28.1 '@babel/plugin-proposal-pipeline-operator@7.27.1(@babel/core@7.28.0)': dependencies: @@ -6023,7 +5610,7 @@ snapshots: '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0) - '@babel/types': 7.28.0 + '@babel/types': 7.28.1 transitivePeerDependencies: - supports-color @@ -6057,19 +5644,7 @@ snapshots: dependencies: '@babel/code-frame': 7.27.1 '@babel/parser': 7.28.0 - '@babel/types': 7.28.0 - - '@babel/traverse@7.27.7': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.27.5 - '@babel/parser': 7.27.7 - '@babel/template': 7.27.2 - '@babel/types': 7.27.7 - debug: 4.4.1 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color + '@babel/types': 7.28.1 '@babel/traverse@7.28.0': dependencies: @@ -6078,21 +5653,11 @@ snapshots: '@babel/helper-globals': 7.28.0 '@babel/parser': 7.28.0 '@babel/template': 7.27.2 - '@babel/types': 7.28.0 + '@babel/types': 7.28.1 debug: 4.4.1 transitivePeerDependencies: - supports-color - '@babel/types@7.27.7': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - - '@babel/types@7.28.0': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/types@7.28.1': dependencies: '@babel/helper-string-parser': 7.27.1 @@ -6155,33 +5720,17 @@ snapshots: dependencies: '@jridgewell/trace-mapping': 0.3.9 - '@emnapi/core@1.4.3': - dependencies: - '@emnapi/wasi-threads': 1.0.2 - tslib: 2.8.1 - optional: true - '@emnapi/core@1.4.5': dependencies: '@emnapi/wasi-threads': 1.0.4 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.4.3': - dependencies: - tslib: 2.8.1 - optional: true - '@emnapi/runtime@1.4.5': dependencies: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.0.2': - dependencies: - tslib: 2.8.1 - optional: true - '@emnapi/wasi-threads@1.0.4': dependencies: tslib: 2.8.1 @@ -6189,7 +5738,7 @@ snapshots: '@emotion/babel-plugin@11.13.5': dependencies: - '@babel/helper-module-imports': 7.25.9 + '@babel/helper-module-imports': 7.27.1 '@babel/runtime': 7.23.5 '@emotion/hash': 0.9.2 '@emotion/memoize': 0.9.0 @@ -6281,9 +5830,6 @@ snapshots: '@esbuild/aix-ppc64@0.24.2': optional: true - '@esbuild/aix-ppc64@0.25.2': - optional: true - '@esbuild/aix-ppc64@0.25.4': optional: true @@ -6293,9 +5839,6 @@ snapshots: '@esbuild/android-arm64@0.24.2': optional: true - '@esbuild/android-arm64@0.25.2': - optional: true - '@esbuild/android-arm64@0.25.4': optional: true @@ -6305,9 +5848,6 @@ snapshots: '@esbuild/android-arm@0.24.2': optional: true - '@esbuild/android-arm@0.25.2': - optional: true - '@esbuild/android-arm@0.25.4': optional: true @@ -6317,9 +5857,6 @@ snapshots: '@esbuild/android-x64@0.24.2': optional: true - '@esbuild/android-x64@0.25.2': - optional: true - '@esbuild/android-x64@0.25.4': optional: true @@ -6329,9 +5866,6 @@ snapshots: '@esbuild/darwin-arm64@0.24.2': optional: true - '@esbuild/darwin-arm64@0.25.2': - optional: true - '@esbuild/darwin-arm64@0.25.4': optional: true @@ -6341,9 +5875,6 @@ snapshots: '@esbuild/darwin-x64@0.24.2': optional: true - '@esbuild/darwin-x64@0.25.2': - optional: true - '@esbuild/darwin-x64@0.25.4': optional: true @@ -6353,9 +5884,6 @@ snapshots: '@esbuild/freebsd-arm64@0.24.2': optional: true - '@esbuild/freebsd-arm64@0.25.2': - optional: true - '@esbuild/freebsd-arm64@0.25.4': optional: true @@ -6365,9 +5893,6 @@ snapshots: '@esbuild/freebsd-x64@0.24.2': optional: true - '@esbuild/freebsd-x64@0.25.2': - optional: true - '@esbuild/freebsd-x64@0.25.4': optional: true @@ -6377,9 +5902,6 @@ snapshots: '@esbuild/linux-arm64@0.24.2': optional: true - '@esbuild/linux-arm64@0.25.2': - optional: true - '@esbuild/linux-arm64@0.25.4': optional: true @@ -6389,9 +5911,6 @@ snapshots: '@esbuild/linux-arm@0.24.2': optional: true - '@esbuild/linux-arm@0.25.2': - optional: true - '@esbuild/linux-arm@0.25.4': optional: true @@ -6401,9 +5920,6 @@ snapshots: '@esbuild/linux-ia32@0.24.2': optional: true - '@esbuild/linux-ia32@0.25.2': - optional: true - '@esbuild/linux-ia32@0.25.4': optional: true @@ -6413,9 +5929,6 @@ snapshots: '@esbuild/linux-loong64@0.24.2': optional: true - '@esbuild/linux-loong64@0.25.2': - optional: true - '@esbuild/linux-loong64@0.25.4': optional: true @@ -6425,9 +5938,6 @@ snapshots: '@esbuild/linux-mips64el@0.24.2': optional: true - '@esbuild/linux-mips64el@0.25.2': - optional: true - '@esbuild/linux-mips64el@0.25.4': optional: true @@ -6437,9 +5947,6 @@ snapshots: '@esbuild/linux-ppc64@0.24.2': optional: true - '@esbuild/linux-ppc64@0.25.2': - optional: true - '@esbuild/linux-ppc64@0.25.4': optional: true @@ -6449,9 +5956,6 @@ snapshots: '@esbuild/linux-riscv64@0.24.2': optional: true - '@esbuild/linux-riscv64@0.25.2': - optional: true - '@esbuild/linux-riscv64@0.25.4': optional: true @@ -6461,9 +5965,6 @@ snapshots: '@esbuild/linux-s390x@0.24.2': optional: true - '@esbuild/linux-s390x@0.25.2': - optional: true - '@esbuild/linux-s390x@0.25.4': optional: true @@ -6473,9 +5974,6 @@ snapshots: '@esbuild/linux-x64@0.24.2': optional: true - '@esbuild/linux-x64@0.25.2': - optional: true - '@esbuild/linux-x64@0.25.4': optional: true @@ -6485,9 +5983,6 @@ snapshots: '@esbuild/netbsd-arm64@0.24.2': optional: true - '@esbuild/netbsd-arm64@0.25.2': - optional: true - '@esbuild/netbsd-arm64@0.25.4': optional: true @@ -6497,9 +5992,6 @@ snapshots: '@esbuild/netbsd-x64@0.24.2': optional: true - '@esbuild/netbsd-x64@0.25.2': - optional: true - '@esbuild/netbsd-x64@0.25.4': optional: true @@ -6509,9 +6001,6 @@ snapshots: '@esbuild/openbsd-arm64@0.24.2': optional: true - '@esbuild/openbsd-arm64@0.25.2': - optional: true - '@esbuild/openbsd-arm64@0.25.4': optional: true @@ -6521,9 +6010,6 @@ snapshots: '@esbuild/openbsd-x64@0.24.2': optional: true - '@esbuild/openbsd-x64@0.25.2': - optional: true - '@esbuild/openbsd-x64@0.25.4': optional: true @@ -6533,9 +6019,6 @@ snapshots: '@esbuild/sunos-x64@0.24.2': optional: true - '@esbuild/sunos-x64@0.25.2': - optional: true - '@esbuild/sunos-x64@0.25.4': optional: true @@ -6545,9 +6028,6 @@ snapshots: '@esbuild/win32-arm64@0.24.2': optional: true - '@esbuild/win32-arm64@0.25.2': - optional: true - '@esbuild/win32-arm64@0.25.4': optional: true @@ -6557,9 +6037,6 @@ snapshots: '@esbuild/win32-ia32@0.24.2': optional: true - '@esbuild/win32-ia32@0.25.2': - optional: true - '@esbuild/win32-ia32@0.25.4': optional: true @@ -6569,9 +6046,6 @@ snapshots: '@esbuild/win32-x64@0.24.2': optional: true - '@esbuild/win32-x64@0.25.2': - optional: true - '@esbuild/win32-x64@0.25.4': optional: true @@ -6707,7 +6181,7 @@ snapshots: '@img/sharp-wasm32@0.33.5': dependencies: - '@emnapi/runtime': 1.4.3 + '@emnapi/runtime': 1.4.5 optional: true '@img/sharp-win32-ia32@0.33.5': @@ -6734,23 +6208,10 @@ snapshots: '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.29 - '@jridgewell/gen-mapping@0.3.5': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 - '@jridgewell/resolve-uri@3.1.1': {} - '@jridgewell/set-array@1.2.1': {} - '@jridgewell/sourcemap-codec@1.5.0': {} - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping@0.3.29': dependencies: '@jridgewell/resolve-uri': 3.1.1 @@ -6792,7 +6253,7 @@ snapshots: '@mdx-js/rollup@3.1.0(rollup@4.44.1)': dependencies: '@mdx-js/mdx': 3.0.0 - '@rollup/pluginutils': 5.1.0(rollup@4.44.1) + '@rollup/pluginutils': 5.1.4(rollup@4.44.1) rollup: 4.44.1 source-map: 0.7.4 vfile: 6.0.1 @@ -6807,8 +6268,8 @@ snapshots: '@napi-rs/wasm-runtime@0.2.12': dependencies: - '@emnapi/core': 1.4.3 - '@emnapi/runtime': 1.4.3 + '@emnapi/core': 1.4.5 + '@emnapi/runtime': 1.4.5 '@tybys/wasm-util': 0.10.0 optional: true @@ -6994,13 +6455,13 @@ snapshots: '@rolldown/pluginutils@1.0.0-beta.29': {} - '@rollup/plugin-alias@5.1.1(rollup@4.37.0)': + '@rollup/plugin-alias@5.1.1(rollup@4.44.1)': optionalDependencies: - rollup: 4.37.0 + rollup: 4.44.1 - '@rollup/plugin-commonjs@28.0.3(rollup@4.37.0)': + '@rollup/plugin-commonjs@28.0.3(rollup@4.44.1)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.37.0) + '@rollup/pluginutils': 5.1.4(rollup@4.44.1) commondir: 1.0.1 estree-walker: 2.0.2 fdir: 6.4.6(picomatch@4.0.2) @@ -7008,30 +6469,23 @@ snapshots: magic-string: 0.30.17 picomatch: 4.0.2 optionalDependencies: - rollup: 4.37.0 + rollup: 4.44.1 - '@rollup/plugin-json@6.1.0(rollup@4.37.0)': + '@rollup/plugin-json@6.1.0(rollup@4.44.1)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.37.0) + '@rollup/pluginutils': 5.1.4(rollup@4.44.1) optionalDependencies: - rollup: 4.37.0 + rollup: 4.44.1 - '@rollup/plugin-node-resolve@16.0.1(rollup@4.37.0)': + '@rollup/plugin-node-resolve@16.0.1(rollup@4.44.1)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.37.0) + '@rollup/pluginutils': 5.1.4(rollup@4.44.1) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.8 optionalDependencies: - rollup: 4.37.0 - - '@rollup/plugin-replace@6.0.2(rollup@4.37.0)': - dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.37.0) - magic-string: 0.30.17 - optionalDependencies: - rollup: 4.37.0 + rollup: 4.44.1 '@rollup/plugin-replace@6.0.2(rollup@4.44.1)': dependencies: @@ -7040,22 +6494,6 @@ snapshots: optionalDependencies: rollup: 4.44.1 - '@rollup/pluginutils@5.1.0(rollup@4.44.1)': - dependencies: - '@types/estree': 1.0.8 - estree-walker: 2.0.2 - picomatch: 2.3.1 - optionalDependencies: - rollup: 4.44.1 - - '@rollup/pluginutils@5.1.4(rollup@4.37.0)': - dependencies: - '@types/estree': 1.0.8 - estree-walker: 2.0.2 - picomatch: 4.0.2 - optionalDependencies: - rollup: 4.37.0 - '@rollup/pluginutils@5.1.4(rollup@4.44.1)': dependencies: '@types/estree': 1.0.8 @@ -7064,123 +6502,63 @@ snapshots: optionalDependencies: rollup: 4.44.1 - '@rollup/rollup-android-arm-eabi@4.37.0': - optional: true - '@rollup/rollup-android-arm-eabi@4.44.1': optional: true - '@rollup/rollup-android-arm64@4.37.0': - optional: true - '@rollup/rollup-android-arm64@4.44.1': optional: true - '@rollup/rollup-darwin-arm64@4.37.0': - optional: true - '@rollup/rollup-darwin-arm64@4.44.1': optional: true - '@rollup/rollup-darwin-x64@4.37.0': - optional: true - '@rollup/rollup-darwin-x64@4.44.1': optional: true - '@rollup/rollup-freebsd-arm64@4.37.0': - optional: true - '@rollup/rollup-freebsd-arm64@4.44.1': optional: true - '@rollup/rollup-freebsd-x64@4.37.0': - optional: true - '@rollup/rollup-freebsd-x64@4.44.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.37.0': - optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.44.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.37.0': - optional: true - '@rollup/rollup-linux-arm-musleabihf@4.44.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.37.0': - optional: true - '@rollup/rollup-linux-arm64-gnu@4.44.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.37.0': - optional: true - '@rollup/rollup-linux-arm64-musl@4.44.1': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.37.0': - optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.44.1': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.37.0': - optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.44.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.37.0': - optional: true - '@rollup/rollup-linux-riscv64-gnu@4.44.1': optional: true - '@rollup/rollup-linux-riscv64-musl@4.37.0': - optional: true - '@rollup/rollup-linux-riscv64-musl@4.44.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.37.0': - optional: true - '@rollup/rollup-linux-s390x-gnu@4.44.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.37.0': - optional: true - '@rollup/rollup-linux-x64-gnu@4.44.1': optional: true - '@rollup/rollup-linux-x64-musl@4.37.0': - optional: true - '@rollup/rollup-linux-x64-musl@4.44.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.37.0': - optional: true - '@rollup/rollup-win32-arm64-msvc@4.44.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.37.0': - optional: true - '@rollup/rollup-win32-ia32-msvc@4.44.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.37.0': - optional: true - '@rollup/rollup-win32-x64-msvc@4.44.1': optional: true @@ -7352,23 +6730,23 @@ snapshots: '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.28.0 - '@babel/types': 7.28.0 + '@babel/types': 7.28.1 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.28.0 + '@babel/types': 7.28.1 '@types/babel__template@7.4.4': dependencies: '@babel/parser': 7.28.0 - '@babel/types': 7.28.0 + '@babel/types': 7.28.1 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.28.0 + '@babel/types': 7.28.1 '@types/chai@5.2.2': dependencies: @@ -7514,8 +6892,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.35.1': {} - '@typescript-eslint/types@8.38.0': {} '@typescript-eslint/typescript-estree@8.38.0(typescript@5.8.3)': @@ -7657,13 +7033,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@7.0.1(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': + '@vitest/mocker@3.2.4(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 7.0.1(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) '@vitest/pretty-format@3.2.4': dependencies: @@ -7703,8 +7079,6 @@ snapshots: acorn@8.14.0: {} - acorn@8.14.1: {} - acorn@8.15.0: {} ajv@6.12.6: @@ -7772,14 +7146,12 @@ snapshots: babel-plugin-react-compiler@19.1.0-rc.2: dependencies: - '@babel/types': 7.28.0 + '@babel/types': 7.28.1 bail@2.0.2: {} balanced-match@1.0.2: {} - birpc@2.4.0: {} - birpc@2.5.0: {} blake3-wasm@2.1.5: {} @@ -7832,7 +7204,7 @@ snapshots: assertion-error: 2.0.1 check-error: 2.1.1 deep-eql: 5.0.2 - loupe: 3.1.3 + loupe: 3.1.4 pathval: 2.0.0 chalk@4.1.2: @@ -8054,10 +7426,6 @@ snapshots: data-uri-to-buffer@4.0.1: {} - debug@4.4.0: - dependencies: - ms: 2.1.3 - debug@4.4.1: dependencies: ms: 2.1.3 @@ -8180,34 +7548,6 @@ snapshots: '@esbuild/win32-ia32': 0.24.2 '@esbuild/win32-x64': 0.24.2 - esbuild@0.25.2: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.2 - '@esbuild/android-arm': 0.25.2 - '@esbuild/android-arm64': 0.25.2 - '@esbuild/android-x64': 0.25.2 - '@esbuild/darwin-arm64': 0.25.2 - '@esbuild/darwin-x64': 0.25.2 - '@esbuild/freebsd-arm64': 0.25.2 - '@esbuild/freebsd-x64': 0.25.2 - '@esbuild/linux-arm': 0.25.2 - '@esbuild/linux-arm64': 0.25.2 - '@esbuild/linux-ia32': 0.25.2 - '@esbuild/linux-loong64': 0.25.2 - '@esbuild/linux-mips64el': 0.25.2 - '@esbuild/linux-ppc64': 0.25.2 - '@esbuild/linux-riscv64': 0.25.2 - '@esbuild/linux-s390x': 0.25.2 - '@esbuild/linux-x64': 0.25.2 - '@esbuild/netbsd-arm64': 0.25.2 - '@esbuild/netbsd-x64': 0.25.2 - '@esbuild/openbsd-arm64': 0.25.2 - '@esbuild/openbsd-x64': 0.25.2 - '@esbuild/sunos-x64': 0.25.2 - '@esbuild/win32-arm64': 0.25.2 - '@esbuild/win32-ia32': 0.25.2 - '@esbuild/win32-x64': 0.25.2 - esbuild@0.25.4: optionalDependencies: '@esbuild/aix-ppc64': 0.25.4 @@ -8289,7 +7629,7 @@ snapshots: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2)): dependencies: - '@typescript-eslint/types': 8.35.1 + '@typescript-eslint/types': 8.38.0 comment-parser: 1.4.1 debug: 4.4.1 eslint: 9.31.0(jiti@2.4.2) @@ -8501,7 +7841,7 @@ snapshots: dependencies: magic-string: 0.30.17 mlly: 1.7.4 - rollup: 4.37.0 + rollup: 4.44.1 flat-cache@4.0.1: dependencies: @@ -8568,8 +7908,6 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 - globals@11.12.0: {} - globals@14.0.0: {} globals@15.12.0: {} @@ -8849,7 +8187,7 @@ snapshots: dependencies: chalk: 5.4.1 commander: 13.1.0 - debug: 4.4.0 + debug: 4.4.1 execa: 8.0.1 lilconfig: 3.1.3 listr2: 8.3.2 @@ -8899,8 +8237,6 @@ snapshots: dependencies: js-tokens: 4.0.0 - loupe@3.1.3: {} - loupe@3.1.4: {} lru-cache@10.4.3: {} @@ -9302,10 +8638,10 @@ snapshots: mlly@1.7.4: dependencies: - acorn: 8.14.1 + acorn: 8.15.0 pathe: 2.0.3 pkg-types: 1.3.1 - ufo: 1.5.4 + ufo: 1.6.1 mri@1.2.0: {} @@ -9692,8 +9028,6 @@ snapshots: prettier@2.8.8: {} - prettier@3.1.0: {} - prettier@3.6.2: {} pretty-bytes@6.1.1: {} @@ -9897,40 +9231,14 @@ snapshots: '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.29 '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.29 - rollup-plugin-dts@6.2.1(rollup@4.37.0)(typescript@5.8.3): + rollup-plugin-dts@6.2.1(rollup@4.44.1)(typescript@5.8.3): dependencies: magic-string: 0.30.17 - rollup: 4.37.0 + rollup: 4.44.1 typescript: 5.8.3 optionalDependencies: '@babel/code-frame': 7.27.1 - rollup@4.37.0: - dependencies: - '@types/estree': 1.0.8 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.37.0 - '@rollup/rollup-android-arm64': 4.37.0 - '@rollup/rollup-darwin-arm64': 4.37.0 - '@rollup/rollup-darwin-x64': 4.37.0 - '@rollup/rollup-freebsd-arm64': 4.37.0 - '@rollup/rollup-freebsd-x64': 4.37.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.37.0 - '@rollup/rollup-linux-arm-musleabihf': 4.37.0 - '@rollup/rollup-linux-arm64-gnu': 4.37.0 - '@rollup/rollup-linux-arm64-musl': 4.37.0 - '@rollup/rollup-linux-loongarch64-gnu': 4.37.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.37.0 - '@rollup/rollup-linux-riscv64-gnu': 4.37.0 - '@rollup/rollup-linux-riscv64-musl': 4.37.0 - '@rollup/rollup-linux-s390x-gnu': 4.37.0 - '@rollup/rollup-linux-x64-gnu': 4.37.0 - '@rollup/rollup-linux-x64-musl': 4.37.0 - '@rollup/rollup-win32-arm64-msvc': 4.37.0 - '@rollup/rollup-win32-ia32-msvc': 4.37.0 - '@rollup/rollup-win32-x64-msvc': 4.37.0 - fsevents: 2.3.3 - rollup@4.44.1: dependencies: '@types/estree': 1.0.8 @@ -10197,11 +9505,6 @@ snapshots: tinyexec@1.0.1: {} - tinyglobby@0.2.12: - dependencies: - fdir: 6.4.6(picomatch@4.0.2) - picomatch: 4.0.2 - tinyglobby@0.2.14: dependencies: fdir: 6.4.6(picomatch@4.0.2) @@ -10287,8 +9590,6 @@ snapshots: typescript@5.8.3: {} - ufo@1.5.4: {} - ufo@1.6.1: {} uglify-js@3.19.3: @@ -10296,16 +9597,16 @@ snapshots: unbuild@3.5.0(typescript@5.8.3): dependencies: - '@rollup/plugin-alias': 5.1.1(rollup@4.37.0) - '@rollup/plugin-commonjs': 28.0.3(rollup@4.37.0) - '@rollup/plugin-json': 6.1.0(rollup@4.37.0) - '@rollup/plugin-node-resolve': 16.0.1(rollup@4.37.0) - '@rollup/plugin-replace': 6.0.2(rollup@4.37.0) - '@rollup/pluginutils': 5.1.4(rollup@4.37.0) + '@rollup/plugin-alias': 5.1.1(rollup@4.44.1) + '@rollup/plugin-commonjs': 28.0.3(rollup@4.44.1) + '@rollup/plugin-json': 6.1.0(rollup@4.44.1) + '@rollup/plugin-node-resolve': 16.0.1(rollup@4.44.1) + '@rollup/plugin-replace': 6.0.2(rollup@4.44.1) + '@rollup/pluginutils': 5.1.4(rollup@4.44.1) citty: 0.1.6 consola: 3.4.2 defu: 6.1.4 - esbuild: 0.25.2 + esbuild: 0.25.5 fix-dts-default-cjs-exports: 1.0.1 hookable: 5.5.3 jiti: 2.4.2 @@ -10315,10 +9616,10 @@ snapshots: pathe: 2.0.3 pkg-types: 2.1.0 pretty-bytes: 6.1.1 - rollup: 4.37.0 - rollup-plugin-dts: 6.2.1(rollup@4.37.0)(typescript@5.8.3) + rollup: 4.44.1 + rollup-plugin-dts: 6.2.1(rollup@4.44.1)(typescript@5.8.3) scule: 1.3.0 - tinyglobby: 0.2.12 + tinyglobby: 0.2.14 untyped: 2.0.0 optionalDependencies: typescript: 5.8.3 @@ -10467,7 +9768,7 @@ snapshots: vite-dev-rpc@1.1.0(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): dependencies: - birpc: 2.4.0 + birpc: 2.5.0 vite: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vite-hot-client: 2.1.0(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) @@ -10511,22 +9812,6 @@ snapshots: transitivePeerDependencies: - supports-color - vite@7.0.1(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): - dependencies: - esbuild: 0.25.5 - fdir: 6.4.6(picomatch@4.0.2) - picomatch: 4.0.2 - postcss: 8.5.6 - rollup: 4.44.1 - tinyglobby: 0.2.14 - optionalDependencies: - '@types/node': 22.16.5 - fsevents: 2.3.3 - jiti: 2.4.2 - lightningcss: 1.30.1 - tsx: 4.20.3 - yaml: 2.7.1 - vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: esbuild: 0.25.5 @@ -10551,7 +9836,7 @@ snapshots: dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.0.1(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + '@vitest/mocker': 3.2.4(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -10569,7 +9854,7 @@ snapshots: tinyglobby: 0.2.14 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.0.1(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vite-node: 3.2.4(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) why-is-node-running: 2.3.0 optionalDependencies: From b8a23e49808c10021a9e15d213b5495116397203 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 28 Jul 2025 10:55:52 +0900 Subject: [PATCH 143/313] chore(deps): remove unused deps (#644) --- packages/plugin-react-oxc/package.json | 1 - pnpm-lock.yaml | 1150 ------------------------ 2 files changed, 1151 deletions(-) diff --git a/packages/plugin-react-oxc/package.json b/packages/plugin-react-oxc/package.json index 3428fe951..34f55a1bc 100644 --- a/packages/plugin-react-oxc/package.json +++ b/packages/plugin-react-oxc/package.json @@ -44,7 +44,6 @@ "devDependencies": { "@vitejs/react-common": "workspace:*", "tsdown": "^0.13.0", - "unbuild": "^3.5.0", "vite": "catalog:rolldown-vite" }, "dependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 35d11c015..a3baa0c6a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -135,9 +135,6 @@ importers: tsdown: specifier: ^0.13.0 version: 0.13.0(publint@0.3.12)(typescript@5.8.3) - unbuild: - specifier: ^3.5.0 - version: 3.5.0(typescript@5.8.3) vite: specifier: catalog:rolldown-vite version: rolldown-vite@7.0.10(@types/node@22.16.5)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1) @@ -1319,12 +1316,6 @@ packages: '@emotion/weak-memoize@0.4.0': resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} - '@esbuild/aix-ppc64@0.24.2': - resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.25.4': resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==} engines: {node: '>=18'} @@ -1337,12 +1328,6 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.24.2': - resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.25.4': resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==} engines: {node: '>=18'} @@ -1355,12 +1340,6 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm@0.24.2': - resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.25.4': resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==} engines: {node: '>=18'} @@ -1373,12 +1352,6 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-x64@0.24.2': - resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.25.4': resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==} engines: {node: '>=18'} @@ -1391,12 +1364,6 @@ packages: cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.24.2': - resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.25.4': resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==} engines: {node: '>=18'} @@ -1409,12 +1376,6 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.24.2': - resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.25.4': resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==} engines: {node: '>=18'} @@ -1427,12 +1388,6 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.24.2': - resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.25.4': resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==} engines: {node: '>=18'} @@ -1445,12 +1400,6 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.24.2': - resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.25.4': resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==} engines: {node: '>=18'} @@ -1463,12 +1412,6 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.24.2': - resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.25.4': resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==} engines: {node: '>=18'} @@ -1481,12 +1424,6 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.24.2': - resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.25.4': resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==} engines: {node: '>=18'} @@ -1499,12 +1436,6 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.24.2': - resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.25.4': resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==} engines: {node: '>=18'} @@ -1517,12 +1448,6 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.24.2': - resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.25.4': resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==} engines: {node: '>=18'} @@ -1535,12 +1460,6 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.24.2': - resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.25.4': resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==} engines: {node: '>=18'} @@ -1553,12 +1472,6 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.24.2': - resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.25.4': resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==} engines: {node: '>=18'} @@ -1571,12 +1484,6 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.24.2': - resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.25.4': resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==} engines: {node: '>=18'} @@ -1589,12 +1496,6 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.24.2': - resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.25.4': resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==} engines: {node: '>=18'} @@ -1607,12 +1508,6 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.24.2': - resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.25.4': resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==} engines: {node: '>=18'} @@ -1625,12 +1520,6 @@ packages: cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.24.2': - resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - '@esbuild/netbsd-arm64@0.25.4': resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==} engines: {node: '>=18'} @@ -1643,12 +1532,6 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.24.2': - resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.25.4': resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==} engines: {node: '>=18'} @@ -1661,12 +1544,6 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.24.2': - resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - '@esbuild/openbsd-arm64@0.25.4': resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==} engines: {node: '>=18'} @@ -1679,12 +1556,6 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.24.2': - resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.25.4': resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==} engines: {node: '>=18'} @@ -1697,12 +1568,6 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.24.2': - resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.25.4': resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==} engines: {node: '>=18'} @@ -1715,12 +1580,6 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.24.2': - resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.25.4': resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==} engines: {node: '>=18'} @@ -1733,12 +1592,6 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.24.2': - resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.25.4': resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==} engines: {node: '>=18'} @@ -1751,12 +1604,6 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.24.2': - resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.25.4': resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==} engines: {node: '>=18'} @@ -2147,42 +1994,6 @@ packages: '@rolldown/pluginutils@1.0.0-beta.29': resolution: {integrity: sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q==} - '@rollup/plugin-alias@5.1.1': - resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/plugin-commonjs@28.0.3': - resolution: {integrity: sha512-pyltgilam1QPdn+Zd9gaCfOLcnjMEJ9gV+bTw6/r73INdvzf1ah9zLIJBm+kW7R6IUFIQ1YO+VqZtYxZNWFPEQ==} - engines: {node: '>=16.0.0 || 14 >= 14.17'} - peerDependencies: - rollup: ^2.68.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/plugin-json@6.1.0': - resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/plugin-node-resolve@16.0.1': - resolution: {integrity: sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.78.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - '@rollup/plugin-replace@6.0.2': resolution: {integrity: sha512-7QaYCf8bqF04dOy7w/eHmJeNExxTYwvKAmlSAH/EaWWUzbT0h5sbF6bktFoX/0F/0qwng5/dWFMyf3gzaM8DsQ==} engines: {node: '>=14.0.0'} @@ -2492,10 +2303,6 @@ packages: peerDependencies: vite: ^5.2.0 || ^6 || ^7 - '@trysound/sax@0.2.0': - resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} - engines: {node: '>=10.13.0'} - '@tsconfig/strictest@2.0.5': resolution: {integrity: sha512-ec4tjL2Rr0pkZ5hww65c+EEPYwxOi4Ryv+0MtjeaSQRJyq322Q27eOQiFbuNgw2hpL4hB1/W/HBGk3VKS43osg==} @@ -2584,9 +2391,6 @@ packages: '@types/react@19.1.8': resolution: {integrity: sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==} - '@types/resolve@1.20.2': - resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - '@types/styled-components@5.1.34': resolution: {integrity: sha512-mmiVvwpYklFIv9E8qfxuPyIt/OuyIrn6gMOAMOFUO3WJfSrSE+sGUoa4PiZj77Ut7bKZpaa6o1fBKS/4TOEvnA==} @@ -2889,13 +2693,6 @@ packages: resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==} hasBin: true - autoprefixer@10.4.21: - resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - babel-dead-code-elimination@1.0.10: resolution: {integrity: sha512-DV5bdJZTzZ0zn0DC24v3jD7Mnidh6xhKa4GfKCbq3sfW8kaWhDdZjP3i81geA8T33tdYqWKw4D3fVv0CwEgKVA==} @@ -2918,9 +2715,6 @@ packages: blake3-wasm@2.1.5: resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} - boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -2951,9 +2745,6 @@ packages: camelize@1.0.1: resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} - caniuse-api@3.0.0: - resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - caniuse-lite@1.0.30001707: resolution: {integrity: sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==} @@ -2996,9 +2787,6 @@ packages: resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} - citty@0.1.6: - resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} - cli-cursor@5.0.0: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} @@ -3024,9 +2812,6 @@ packages: resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} engines: {node: '>=12.5.0'} - colord@2.9.3: - resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} - colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} @@ -3037,33 +2822,16 @@ packages: resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} engines: {node: '>=18'} - commander@7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} - engines: {node: '>= 10'} - comment-parser@1.4.1: resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} engines: {node: '>= 12.0.0'} - commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - confbox@0.1.8: - resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} - - confbox@0.2.1: - resolution: {integrity: sha512-hkT3yDPFbs95mNCy1+7qNKC6Pro+/ibzYxtM2iqEigpf0sVw+bg4Zh9/snjsBcf990vfIsg5+1U7VyiyBb3etg==} - - consola@3.4.2: - resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} - engines: {node: ^14.18.0 || >=16.10.0} - conventional-changelog-conventionalcommits@9.0.0: resolution: {integrity: sha512-5e48V0+DsWvQBEnnbBFhYQwYDzFPXVrakGPP1uSxekDkr5d7YWrmaWsgJpKFR0SkXmxK6qQr9O42uuLb9wpKxA==} engines: {node: '>=18'} @@ -3113,57 +2881,14 @@ packages: resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} engines: {node: '>=4'} - css-declaration-sorter@7.2.0: - resolution: {integrity: sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.0.9 - - css-select@5.1.0: - resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} - css-to-react-native@3.2.0: resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} - css-tree@2.2.1: - resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} - - css-tree@2.3.1: - resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - - css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} - engines: {node: '>= 6'} - cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} hasBin: true - cssnano-preset-default@7.0.6: - resolution: {integrity: sha512-ZzrgYupYxEvdGGuqL+JKOY70s7+saoNlHSCK/OGn1vB2pQK8KSET8jvenzItcY+kA7NoWvfbb/YhlzuzNKjOhQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - cssnano-utils@5.0.0: - resolution: {integrity: sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - cssnano@7.0.6: - resolution: {integrity: sha512-54woqx8SCbp8HwvNZYn68ZFAepuouZW4lTwiMVnBErM3VkO7/Sd4oTOt3Zz3bPx3kxQ36aISppyXj2Md4lg8bw==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - csso@5.0.5: - resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} - csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} @@ -3198,10 +2923,6 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - default-browser-id@5.0.0: resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} engines: {node: '>=18'} @@ -3232,19 +2953,6 @@ packages: resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} engines: {node: '>=0.3.1'} - dom-serializer@2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} - - domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - - domhandler@5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} - engines: {node: '>= 4'} - - domutils@3.1.0: - resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} - dot-prop@5.3.0: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} @@ -3281,10 +2989,6 @@ packages: resolution: {integrity: sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==} engines: {node: '>=10.13.0'} - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - environment@1.1.0: resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} engines: {node: '>=18'} @@ -3301,11 +3005,6 @@ packages: es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} - esbuild@0.24.2: - resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} - engines: {node: '>=18'} - hasBin: true - esbuild@0.25.4: resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==} engines: {node: '>=18'} @@ -3500,9 +3199,6 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - fix-dts-default-cjs-exports@1.0.1: - resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==} - flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} @@ -3518,9 +3214,6 @@ packages: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} - fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - fs-extra@11.3.0: resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} engines: {node: '>=14.14'} @@ -3707,9 +3400,6 @@ packages: engines: {node: '>=14.16'} hasBin: true - is-module@1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -3722,9 +3412,6 @@ packages: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} - is-reference@1.2.1: - resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} - is-reference@3.0.2: resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} @@ -3746,10 +3433,6 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jiti@1.21.7: - resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} - hasBin: true - jiti@2.4.2: resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true @@ -3812,9 +3495,6 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} - knitwork@1.2.0: - resolution: {integrity: sha512-xYSH7AvuQ6nXkq42x0v5S8/Iry+cfulBz/DJQzhIyESdLD7425jXsPy4vn5cCXU+HhRN2kVw51Vd1K6/By4BQg==} - levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -3909,15 +3589,9 @@ packages: lodash.isplainobject@4.0.6: resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - lodash.uniq@4.5.0: - resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -3979,12 +3653,6 @@ packages: mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} - mdn-data@2.0.28: - resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} - - mdn-data@2.0.30: - resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - meow@13.2.0: resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} engines: {node: '>=18'} @@ -4129,27 +3797,6 @@ packages: engines: {node: '>=10'} hasBin: true - mkdist@2.2.0: - resolution: {integrity: sha512-GfKwu4A2grXfhj2TZm4ydfzP515NaALqKaPq4WqaZ6NhEnD47BiIQPySoCTTvVqHxYcuqVkNdCXjYf9Bz1Y04Q==} - hasBin: true - peerDependencies: - sass: ^1.83.0 - typescript: '>=5.7.2' - vue: ^3.5.13 - vue-tsc: ^1.8.27 || ^2.0.21 - peerDependenciesMeta: - sass: - optional: true - typescript: - optional: true - vue: - optional: true - vue-tsc: - optional: true - - mlly@1.7.4: - resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} - mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -4197,10 +3844,6 @@ packages: resolution: {integrity: sha512-k6U0gKRIuNCTkwHGZqblCfLfBRh+w1vI6tBo+IeJwq2M8FUiOqhX7GH+GArQGScA7azd1WfyRCvxoXDO3hQDIA==} engines: {node: ^18.17.0 || >=20.5.0} - normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - npm-install-checks@6.3.0: resolution: {integrity: sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -4221,9 +3864,6 @@ packages: resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -4333,12 +3973,6 @@ packages: engines: {node: '>=0.10'} hasBin: true - pkg-types@1.3.1: - resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - - pkg-types@2.1.0: - resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==} - playwright-chromium@1.54.1: resolution: {integrity: sha512-1tOND4/hyQsYng5NLkLm+Ntew+CWBsvVZCcEZ0wafF5BAd9DBQHAT9SO95+QFk5iL5IBEdB6vFdsHf9Ma72vzQ==} engines: {node: '>=18'} @@ -4354,186 +3988,10 @@ packages: engines: {node: '>=18'} hasBin: true - postcss-calc@10.1.1: - resolution: {integrity: sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==} - engines: {node: ^18.12 || ^20.9 || >=22.0} - peerDependencies: - postcss: ^8.4.38 - - postcss-colormin@7.0.2: - resolution: {integrity: sha512-YntRXNngcvEvDbEjTdRWGU606eZvB5prmHG4BF0yLmVpamXbpsRJzevyy6MZVyuecgzI2AWAlvFi8DAeCqwpvA==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-convert-values@7.0.4: - resolution: {integrity: sha512-e2LSXPqEHVW6aoGbjV9RsSSNDO3A0rZLCBxN24zvxF25WknMPpX8Dm9UxxThyEbaytzggRuZxaGXqaOhxQ514Q==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-discard-comments@7.0.3: - resolution: {integrity: sha512-q6fjd4WU4afNhWOA2WltHgCbkRhZPgQe7cXF74fuVB/ge4QbM9HEaOIzGSiMvM+g/cOsNAUGdf2JDzqA2F8iLA==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-discard-duplicates@7.0.1: - resolution: {integrity: sha512-oZA+v8Jkpu1ct/xbbrntHRsfLGuzoP+cpt0nJe5ED2FQF8n8bJtn7Bo28jSmBYwqgqnqkuSXJfSUEE7if4nClQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-discard-empty@7.0.0: - resolution: {integrity: sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-discard-overridden@7.0.0: - resolution: {integrity: sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-merge-longhand@7.0.4: - resolution: {integrity: sha512-zer1KoZA54Q8RVHKOY5vMke0cCdNxMP3KBfDerjH/BYHh4nCIh+1Yy0t1pAEQF18ac/4z3OFclO+ZVH8azjR4A==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-merge-rules@7.0.4: - resolution: {integrity: sha512-ZsaamiMVu7uBYsIdGtKJ64PkcQt6Pcpep/uO90EpLS3dxJi6OXamIobTYcImyXGoW0Wpugh7DSD3XzxZS9JCPg==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-minify-font-values@7.0.0: - resolution: {integrity: sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-minify-gradients@7.0.0: - resolution: {integrity: sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-minify-params@7.0.2: - resolution: {integrity: sha512-nyqVLu4MFl9df32zTsdcLqCFfE/z2+f8GE1KHPxWOAmegSo6lpV2GNy5XQvrzwbLmiU7d+fYay4cwto1oNdAaQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-minify-selectors@7.0.4: - resolution: {integrity: sha512-JG55VADcNb4xFCf75hXkzc1rNeURhlo7ugf6JjiiKRfMsKlDzN9CXHZDyiG6x/zGchpjQS+UAgb1d4nqXqOpmA==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-nested@7.0.2: - resolution: {integrity: sha512-5osppouFc0VR9/VYzYxO03VaDa3e8F23Kfd6/9qcZTUI8P58GIYlArOET2Wq0ywSl2o2PjELhYOFI4W7l5QHKw==} - engines: {node: '>=18.0'} - peerDependencies: - postcss: ^8.2.14 - - postcss-normalize-charset@7.0.0: - resolution: {integrity: sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-normalize-display-values@7.0.0: - resolution: {integrity: sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-normalize-positions@7.0.0: - resolution: {integrity: sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-normalize-repeat-style@7.0.0: - resolution: {integrity: sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-normalize-string@7.0.0: - resolution: {integrity: sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-normalize-timing-functions@7.0.0: - resolution: {integrity: sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-normalize-unicode@7.0.2: - resolution: {integrity: sha512-ztisabK5C/+ZWBdYC+Y9JCkp3M9qBv/XFvDtSw0d/XwfT3UaKeW/YTm/MD/QrPNxuecia46vkfEhewjwcYFjkg==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-normalize-url@7.0.0: - resolution: {integrity: sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-normalize-whitespace@7.0.0: - resolution: {integrity: sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-ordered-values@7.0.1: - resolution: {integrity: sha512-irWScWRL6nRzYmBOXReIKch75RRhNS86UPUAxXdmW/l0FcAsg0lvAXQCby/1lymxn/o0gVa6Rv/0f03eJOwHxw==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-reduce-initial@7.0.2: - resolution: {integrity: sha512-pOnu9zqQww7dEKf62Nuju6JgsW2V0KRNBHxeKohU+JkHd/GAH5uvoObqFLqkeB2n20mr6yrlWDvo5UBU5GnkfA==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - - postcss-reduce-transforms@7.0.0: - resolution: {integrity: sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - postcss-selector-parser@6.0.10: resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} engines: {node: '>=4'} - postcss-selector-parser@6.1.2: - resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} - engines: {node: '>=4'} - - postcss-selector-parser@7.1.0: - resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} - engines: {node: '>=4'} - - postcss-svgo@7.0.1: - resolution: {integrity: sha512-0WBUlSL4lhD9rA5k1e5D8EN5wCEyZD6HJk0jIvRxl+FDVOMlJ7DePHYWGGVc5QRqrJ3/06FTXM0bxjmJpmTPSA==} - engines: {node: ^18.12.0 || ^20.9.0 || >= 18} - peerDependencies: - postcss: ^8.4.31 - - postcss-unique-selectors@7.0.3: - resolution: {integrity: sha512-J+58u5Ic5T1QjP/LDV9g3Cx4CNOgB5vz+kM6+OxHHhFACdcDeKhBXjQmB7fnIZM12YSTvsL0Opwco83DmacW2g==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} @@ -4559,10 +4017,6 @@ packages: engines: {node: '>=14'} hasBin: true - pretty-bytes@6.1.1: - resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} - engines: {node: ^14.13.1 || >=16.0.0} - proc-log@3.0.0: resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -4775,13 +4229,6 @@ packages: resolution: {integrity: sha512-EsoOi8moHN6CAYyTZipxDDVTJn0j2nBCWor4wRU45RQ8ER2qREDykXLr3Ulz6hBh6oBKCFTQIjo21i0FXNo/IA==} hasBin: true - rollup-plugin-dts@6.2.1: - resolution: {integrity: sha512-sR3CxYUl7i2CHa0O7bA45mCrgADyAQ0tVtGSqi3yvH28M+eg1+g5d7kQ9hLvEz5dorK3XVsH5L2jwHLQf72DzA==} - engines: {node: '>=16'} - peerDependencies: - rollup: ^3.29.4 || ^4 - typescript: ^4.5 || ^5.0 - rollup@4.44.1: resolution: {integrity: sha512-x8H8aPvD+xbl0Do8oez5f5o8eMS3trfCghc4HhLAnCkj7Vl0d1JWGs0UF/D886zLW2rOj2QymV/JcSSsw+XDNg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -4811,9 +4258,6 @@ packages: resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==} engines: {node: ^14.0.0 || >=16.0.0} - scule@1.3.0: - resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} - semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -4969,12 +4413,6 @@ packages: react: '>= 16.8.0' react-dom: '>= 16.8.0' - stylehacks@7.0.4: - resolution: {integrity: sha512-i4zfNrGMt9SB4xRK9L83rlsFCgdGANfeDAYacO1pkqcE7cRHPdWHwnKZVz7WY17Veq/FvyYsRAU++Ga+qDFIww==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.31 - stylis@4.2.0: resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} @@ -4993,11 +4431,6 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - svgo@3.3.2: - resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==} - engines: {node: '>=14.0.0'} - hasBin: true - tailwindcss@4.1.11: resolution: {integrity: sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==} @@ -5122,15 +4555,6 @@ packages: engines: {node: '>=0.8.0'} hasBin: true - unbuild@3.5.0: - resolution: {integrity: sha512-DPFttsiADnHRb/K+yJ9r9jdn6JyXlsmdT0S12VFC14DFSJD+cxBnHq+v0INmqqPVPxOoUjvJFYUVIb02rWnVeA==} - hasBin: true - peerDependencies: - typescript: ^5.7.3 - peerDependenciesMeta: - typescript: - optional: true - unconfig@7.3.2: resolution: {integrity: sha512-nqG5NNL2wFVGZ0NA/aCFw0oJ2pxSf1lwg4Z5ill8wd7K4KX/rQbHlwbh+bjctXL5Ly1xtzHenHGOK0b+lG6JVg==} @@ -5179,10 +4603,6 @@ packages: unrs-resolver@1.9.2: resolution: {integrity: sha512-VUyWiTNQD7itdiMuJy+EuLEErLj3uwX/EpHQF8EOf33Dq3Ju6VW1GXm+swk6+1h7a49uv9fKZ+dft9jU7esdLA==} - untyped@2.0.0: - resolution: {integrity: sha512-nwNCjxJTjNuLCgFr42fEak5OcLuB3ecca+9ksPFNvtfYSLpjf+iJqSIaSnIile6ZPbKYxI5k2AfXqeopGudK/g==} - hasBin: true - update-browserslist-db@1.1.1: resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} hasBin: true @@ -5827,225 +5247,150 @@ snapshots: '@emotion/weak-memoize@0.4.0': {} - '@esbuild/aix-ppc64@0.24.2': - optional: true - '@esbuild/aix-ppc64@0.25.4': optional: true '@esbuild/aix-ppc64@0.25.5': optional: true - '@esbuild/android-arm64@0.24.2': - optional: true - '@esbuild/android-arm64@0.25.4': optional: true '@esbuild/android-arm64@0.25.5': optional: true - '@esbuild/android-arm@0.24.2': - optional: true - '@esbuild/android-arm@0.25.4': optional: true '@esbuild/android-arm@0.25.5': optional: true - '@esbuild/android-x64@0.24.2': - optional: true - '@esbuild/android-x64@0.25.4': optional: true '@esbuild/android-x64@0.25.5': optional: true - '@esbuild/darwin-arm64@0.24.2': - optional: true - '@esbuild/darwin-arm64@0.25.4': optional: true '@esbuild/darwin-arm64@0.25.5': optional: true - '@esbuild/darwin-x64@0.24.2': - optional: true - '@esbuild/darwin-x64@0.25.4': optional: true '@esbuild/darwin-x64@0.25.5': optional: true - '@esbuild/freebsd-arm64@0.24.2': - optional: true - '@esbuild/freebsd-arm64@0.25.4': optional: true '@esbuild/freebsd-arm64@0.25.5': optional: true - '@esbuild/freebsd-x64@0.24.2': - optional: true - '@esbuild/freebsd-x64@0.25.4': optional: true '@esbuild/freebsd-x64@0.25.5': optional: true - '@esbuild/linux-arm64@0.24.2': - optional: true - '@esbuild/linux-arm64@0.25.4': optional: true '@esbuild/linux-arm64@0.25.5': optional: true - '@esbuild/linux-arm@0.24.2': - optional: true - '@esbuild/linux-arm@0.25.4': optional: true '@esbuild/linux-arm@0.25.5': optional: true - '@esbuild/linux-ia32@0.24.2': - optional: true - '@esbuild/linux-ia32@0.25.4': optional: true '@esbuild/linux-ia32@0.25.5': optional: true - '@esbuild/linux-loong64@0.24.2': - optional: true - '@esbuild/linux-loong64@0.25.4': optional: true '@esbuild/linux-loong64@0.25.5': optional: true - '@esbuild/linux-mips64el@0.24.2': - optional: true - '@esbuild/linux-mips64el@0.25.4': optional: true '@esbuild/linux-mips64el@0.25.5': optional: true - '@esbuild/linux-ppc64@0.24.2': - optional: true - '@esbuild/linux-ppc64@0.25.4': optional: true '@esbuild/linux-ppc64@0.25.5': optional: true - '@esbuild/linux-riscv64@0.24.2': - optional: true - '@esbuild/linux-riscv64@0.25.4': optional: true '@esbuild/linux-riscv64@0.25.5': optional: true - '@esbuild/linux-s390x@0.24.2': - optional: true - '@esbuild/linux-s390x@0.25.4': optional: true '@esbuild/linux-s390x@0.25.5': optional: true - '@esbuild/linux-x64@0.24.2': - optional: true - '@esbuild/linux-x64@0.25.4': optional: true '@esbuild/linux-x64@0.25.5': optional: true - '@esbuild/netbsd-arm64@0.24.2': - optional: true - '@esbuild/netbsd-arm64@0.25.4': optional: true '@esbuild/netbsd-arm64@0.25.5': optional: true - '@esbuild/netbsd-x64@0.24.2': - optional: true - '@esbuild/netbsd-x64@0.25.4': optional: true '@esbuild/netbsd-x64@0.25.5': optional: true - '@esbuild/openbsd-arm64@0.24.2': - optional: true - '@esbuild/openbsd-arm64@0.25.4': optional: true '@esbuild/openbsd-arm64@0.25.5': optional: true - '@esbuild/openbsd-x64@0.24.2': - optional: true - '@esbuild/openbsd-x64@0.25.4': optional: true '@esbuild/openbsd-x64@0.25.5': optional: true - '@esbuild/sunos-x64@0.24.2': - optional: true - '@esbuild/sunos-x64@0.25.4': optional: true '@esbuild/sunos-x64@0.25.5': optional: true - '@esbuild/win32-arm64@0.24.2': - optional: true - '@esbuild/win32-arm64@0.25.4': optional: true '@esbuild/win32-arm64@0.25.5': optional: true - '@esbuild/win32-ia32@0.24.2': - optional: true - '@esbuild/win32-ia32@0.25.4': optional: true '@esbuild/win32-ia32@0.25.5': optional: true - '@esbuild/win32-x64@0.24.2': - optional: true - '@esbuild/win32-x64@0.25.4': optional: true @@ -6455,38 +5800,6 @@ snapshots: '@rolldown/pluginutils@1.0.0-beta.29': {} - '@rollup/plugin-alias@5.1.1(rollup@4.44.1)': - optionalDependencies: - rollup: 4.44.1 - - '@rollup/plugin-commonjs@28.0.3(rollup@4.44.1)': - dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.44.1) - commondir: 1.0.1 - estree-walker: 2.0.2 - fdir: 6.4.6(picomatch@4.0.2) - is-reference: 1.2.1 - magic-string: 0.30.17 - picomatch: 4.0.2 - optionalDependencies: - rollup: 4.44.1 - - '@rollup/plugin-json@6.1.0(rollup@4.44.1)': - dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.44.1) - optionalDependencies: - rollup: 4.44.1 - - '@rollup/plugin-node-resolve@16.0.1(rollup@4.44.1)': - dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.44.1) - '@types/resolve': 1.20.2 - deepmerge: 4.3.1 - is-module: 1.0.0 - resolve: 1.22.8 - optionalDependencies: - rollup: 4.44.1 - '@rollup/plugin-replace@6.0.2(rollup@4.44.1)': dependencies: '@rollup/pluginutils': 5.1.4(rollup@4.44.1) @@ -6714,8 +6027,6 @@ snapshots: tailwindcss: 4.1.11 vite: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - '@trysound/sax@0.2.0': {} - '@tsconfig/strictest@2.0.5': {} '@tybys/wasm-util@0.10.0': @@ -6819,8 +6130,6 @@ snapshots: dependencies: csstype: 3.1.3 - '@types/resolve@1.20.2': {} - '@types/styled-components@5.1.34': dependencies: '@types/hoist-non-react-statics': 3.3.6 @@ -7119,16 +6428,6 @@ snapshots: astring@1.8.6: {} - autoprefixer@10.4.21(postcss@8.5.6): - dependencies: - browserslist: 4.24.4 - caniuse-lite: 1.0.30001707 - fraction.js: 4.3.7 - normalize-range: 0.1.2 - picocolors: 1.1.1 - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - babel-dead-code-elimination@1.0.10: dependencies: '@babel/core': 7.28.0 @@ -7156,8 +6455,6 @@ snapshots: blake3-wasm@2.1.5: {} - boolbase@1.0.0: {} - brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 @@ -7188,13 +6485,6 @@ snapshots: camelize@1.0.1: {} - caniuse-api@3.0.0: - dependencies: - browserslist: 4.24.4 - caniuse-lite: 1.0.30001707 - lodash.memoize: 4.1.2 - lodash.uniq: 4.5.0 - caniuse-lite@1.0.30001707: {} ccount@2.0.1: {} @@ -7230,10 +6520,6 @@ snapshots: chownr@3.0.0: {} - citty@0.1.6: - dependencies: - consola: 3.4.2 - cli-cursor@5.0.0: dependencies: restore-cursor: 5.1.0 @@ -7261,20 +6547,14 @@ snapshots: color-convert: 2.0.1 color-string: 1.9.1 - colord@2.9.3: {} - colorette@2.0.20: {} comma-separated-tokens@2.0.3: {} commander@13.1.0: {} - commander@7.2.0: {} - comment-parser@1.4.1: {} - commondir@1.0.1: {} - compare-func@2.0.0: dependencies: array-ify: 1.0.0 @@ -7282,12 +6562,6 @@ snapshots: concat-map@0.0.1: {} - confbox@0.1.8: {} - - confbox@0.2.1: {} - - consola@3.4.2: {} - conventional-changelog-conventionalcommits@9.0.0: dependencies: compare-func: 2.0.0 @@ -7342,86 +6616,14 @@ snapshots: css-color-keywords@1.0.0: {} - css-declaration-sorter@7.2.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - - css-select@5.1.0: - dependencies: - boolbase: 1.0.0 - css-what: 6.1.0 - domhandler: 5.0.3 - domutils: 3.1.0 - nth-check: 2.1.1 - css-to-react-native@3.2.0: dependencies: camelize: 1.0.1 css-color-keywords: 1.0.0 postcss-value-parser: 4.2.0 - css-tree@2.2.1: - dependencies: - mdn-data: 2.0.28 - source-map-js: 1.2.1 - - css-tree@2.3.1: - dependencies: - mdn-data: 2.0.30 - source-map-js: 1.2.1 - - css-what@6.1.0: {} - cssesc@3.0.0: {} - cssnano-preset-default@7.0.6(postcss@8.5.6): - dependencies: - browserslist: 4.24.4 - css-declaration-sorter: 7.2.0(postcss@8.5.6) - cssnano-utils: 5.0.0(postcss@8.5.6) - postcss: 8.5.6 - postcss-calc: 10.1.1(postcss@8.5.6) - postcss-colormin: 7.0.2(postcss@8.5.6) - postcss-convert-values: 7.0.4(postcss@8.5.6) - postcss-discard-comments: 7.0.3(postcss@8.5.6) - postcss-discard-duplicates: 7.0.1(postcss@8.5.6) - postcss-discard-empty: 7.0.0(postcss@8.5.6) - postcss-discard-overridden: 7.0.0(postcss@8.5.6) - postcss-merge-longhand: 7.0.4(postcss@8.5.6) - postcss-merge-rules: 7.0.4(postcss@8.5.6) - postcss-minify-font-values: 7.0.0(postcss@8.5.6) - postcss-minify-gradients: 7.0.0(postcss@8.5.6) - postcss-minify-params: 7.0.2(postcss@8.5.6) - postcss-minify-selectors: 7.0.4(postcss@8.5.6) - postcss-normalize-charset: 7.0.0(postcss@8.5.6) - postcss-normalize-display-values: 7.0.0(postcss@8.5.6) - postcss-normalize-positions: 7.0.0(postcss@8.5.6) - postcss-normalize-repeat-style: 7.0.0(postcss@8.5.6) - postcss-normalize-string: 7.0.0(postcss@8.5.6) - postcss-normalize-timing-functions: 7.0.0(postcss@8.5.6) - postcss-normalize-unicode: 7.0.2(postcss@8.5.6) - postcss-normalize-url: 7.0.0(postcss@8.5.6) - postcss-normalize-whitespace: 7.0.0(postcss@8.5.6) - postcss-ordered-values: 7.0.1(postcss@8.5.6) - postcss-reduce-initial: 7.0.2(postcss@8.5.6) - postcss-reduce-transforms: 7.0.0(postcss@8.5.6) - postcss-svgo: 7.0.1(postcss@8.5.6) - postcss-unique-selectors: 7.0.3(postcss@8.5.6) - - cssnano-utils@5.0.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - - cssnano@7.0.6(postcss@8.5.6): - dependencies: - cssnano-preset-default: 7.0.6(postcss@8.5.6) - lilconfig: 3.1.3 - postcss: 8.5.6 - - csso@5.0.5: - dependencies: - css-tree: 2.2.1 - csstype@3.1.3: {} data-uri-to-buffer@4.0.1: {} @@ -7442,8 +6644,6 @@ snapshots: deep-is@0.1.4: {} - deepmerge@4.3.1: {} - default-browser-id@5.0.0: {} default-browser@5.2.1: @@ -7465,24 +6665,6 @@ snapshots: diff@8.0.2: {} - dom-serializer@2.0.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - entities: 4.5.0 - - domelementtype@2.3.0: {} - - domhandler@5.0.3: - dependencies: - domelementtype: 2.3.0 - - domutils@3.1.0: - dependencies: - dom-serializer: 2.0.0 - domelementtype: 2.3.0 - domhandler: 5.0.3 - dot-prop@5.3.0: dependencies: is-obj: 2.0.0 @@ -7506,8 +6688,6 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.2.1 - entities@4.5.0: {} - environment@1.1.0: {} err-code@2.0.3: {} @@ -7520,34 +6700,6 @@ snapshots: es-module-lexer@1.7.0: {} - esbuild@0.24.2: - optionalDependencies: - '@esbuild/aix-ppc64': 0.24.2 - '@esbuild/android-arm': 0.24.2 - '@esbuild/android-arm64': 0.24.2 - '@esbuild/android-x64': 0.24.2 - '@esbuild/darwin-arm64': 0.24.2 - '@esbuild/darwin-x64': 0.24.2 - '@esbuild/freebsd-arm64': 0.24.2 - '@esbuild/freebsd-x64': 0.24.2 - '@esbuild/linux-arm': 0.24.2 - '@esbuild/linux-arm64': 0.24.2 - '@esbuild/linux-ia32': 0.24.2 - '@esbuild/linux-loong64': 0.24.2 - '@esbuild/linux-mips64el': 0.24.2 - '@esbuild/linux-ppc64': 0.24.2 - '@esbuild/linux-riscv64': 0.24.2 - '@esbuild/linux-s390x': 0.24.2 - '@esbuild/linux-x64': 0.24.2 - '@esbuild/netbsd-arm64': 0.24.2 - '@esbuild/netbsd-x64': 0.24.2 - '@esbuild/openbsd-arm64': 0.24.2 - '@esbuild/openbsd-x64': 0.24.2 - '@esbuild/sunos-x64': 0.24.2 - '@esbuild/win32-arm64': 0.24.2 - '@esbuild/win32-ia32': 0.24.2 - '@esbuild/win32-x64': 0.24.2 - esbuild@0.25.4: optionalDependencies: '@esbuild/aix-ppc64': 0.25.4 @@ -7837,12 +6989,6 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - fix-dts-default-cjs-exports@1.0.1: - dependencies: - magic-string: 0.30.17 - mlly: 1.7.4 - rollup: 4.44.1 - flat-cache@4.0.1: dependencies: flatted: 3.2.9 @@ -7859,8 +7005,6 @@ snapshots: dependencies: fetch-blob: 3.2.0 - fraction.js@4.3.7: {} - fs-extra@11.3.0: dependencies: graceful-fs: 4.2.11 @@ -8048,18 +7192,12 @@ snapshots: dependencies: is-docker: 3.0.0 - is-module@1.0.0: {} - is-number@7.0.0: {} is-obj@2.0.0: {} is-plain-obj@4.1.0: {} - is-reference@1.2.1: - dependencies: - '@types/estree': 1.0.8 - is-reference@3.0.2: dependencies: '@types/estree': 1.0.8 @@ -8080,8 +7218,6 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jiti@1.21.7: {} - jiti@2.4.2: {} js-tokens@4.0.0: {} @@ -8127,8 +7263,6 @@ snapshots: kleur@4.1.5: {} - knitwork@1.2.0: {} - levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -8215,12 +7349,8 @@ snapshots: lodash.isplainobject@4.0.6: {} - lodash.memoize@4.1.2: {} - lodash.merge@4.6.2: {} - lodash.uniq@4.5.0: {} - lodash@4.17.21: {} log-update@6.1.0: @@ -8351,10 +7481,6 @@ snapshots: dependencies: '@types/mdast': 4.0.3 - mdn-data@2.0.28: {} - - mdn-data@2.0.30: {} - meow@13.2.0: {} merge-stream@2.0.0: {} @@ -8618,31 +7744,6 @@ snapshots: mkdirp@3.0.1: {} - mkdist@2.2.0(typescript@5.8.3): - dependencies: - autoprefixer: 10.4.21(postcss@8.5.6) - citty: 0.1.6 - cssnano: 7.0.6(postcss@8.5.6) - defu: 6.1.4 - esbuild: 0.24.2 - jiti: 1.21.7 - mlly: 1.7.4 - pathe: 1.1.2 - pkg-types: 1.3.1 - postcss: 8.5.6 - postcss-nested: 7.0.2(postcss@8.5.6) - semver: 7.7.2 - tinyglobby: 0.2.14 - optionalDependencies: - typescript: 5.8.3 - - mlly@1.7.4: - dependencies: - acorn: 8.15.0 - pathe: 2.0.3 - pkg-types: 1.3.1 - ufo: 1.6.1 - mri@1.2.0: {} mrmime@2.0.1: {} @@ -8680,8 +7781,6 @@ snapshots: semver: 7.7.2 validate-npm-package-license: 3.0.4 - normalize-range@0.1.2: {} - npm-install-checks@6.3.0: dependencies: semver: 7.7.2 @@ -8706,10 +7805,6 @@ snapshots: dependencies: path-key: 4.0.0 - nth-check@2.1.1: - dependencies: - boolbase: 1.0.0 - object-assign@4.1.1: {} ohash@2.0.11: {} @@ -8817,18 +7912,6 @@ snapshots: pidtree@0.6.0: {} - pkg-types@1.3.1: - dependencies: - confbox: 0.1.8 - mlly: 1.7.4 - pathe: 2.0.3 - - pkg-types@2.1.0: - dependencies: - confbox: 0.2.1 - exsolve: 1.0.4 - pathe: 2.0.3 - playwright-chromium@1.54.1: dependencies: playwright-core: 1.54.1 @@ -8841,175 +7924,11 @@ snapshots: optionalDependencies: fsevents: 2.3.2 - postcss-calc@10.1.1(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-selector-parser: 7.1.0 - postcss-value-parser: 4.2.0 - - postcss-colormin@7.0.2(postcss@8.5.6): - dependencies: - browserslist: 4.24.4 - caniuse-api: 3.0.0 - colord: 2.9.3 - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-convert-values@7.0.4(postcss@8.5.6): - dependencies: - browserslist: 4.24.4 - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-discard-comments@7.0.3(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-selector-parser: 6.1.2 - - postcss-discard-duplicates@7.0.1(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - - postcss-discard-empty@7.0.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - - postcss-discard-overridden@7.0.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - - postcss-merge-longhand@7.0.4(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - stylehacks: 7.0.4(postcss@8.5.6) - - postcss-merge-rules@7.0.4(postcss@8.5.6): - dependencies: - browserslist: 4.24.4 - caniuse-api: 3.0.0 - cssnano-utils: 5.0.0(postcss@8.5.6) - postcss: 8.5.6 - postcss-selector-parser: 6.1.2 - - postcss-minify-font-values@7.0.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-minify-gradients@7.0.0(postcss@8.5.6): - dependencies: - colord: 2.9.3 - cssnano-utils: 5.0.0(postcss@8.5.6) - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-minify-params@7.0.2(postcss@8.5.6): - dependencies: - browserslist: 4.24.4 - cssnano-utils: 5.0.0(postcss@8.5.6) - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-minify-selectors@7.0.4(postcss@8.5.6): - dependencies: - cssesc: 3.0.0 - postcss: 8.5.6 - postcss-selector-parser: 6.1.2 - - postcss-nested@7.0.2(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-selector-parser: 7.1.0 - - postcss-normalize-charset@7.0.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - - postcss-normalize-display-values@7.0.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-normalize-positions@7.0.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-normalize-repeat-style@7.0.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-normalize-string@7.0.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-normalize-timing-functions@7.0.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-normalize-unicode@7.0.2(postcss@8.5.6): - dependencies: - browserslist: 4.24.4 - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-normalize-url@7.0.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-normalize-whitespace@7.0.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-ordered-values@7.0.1(postcss@8.5.6): - dependencies: - cssnano-utils: 5.0.0(postcss@8.5.6) - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-reduce-initial@7.0.2(postcss@8.5.6): - dependencies: - browserslist: 4.24.4 - caniuse-api: 3.0.0 - postcss: 8.5.6 - - postcss-reduce-transforms@7.0.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - postcss-selector-parser@6.0.10: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-selector-parser@6.1.2: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - - postcss-selector-parser@7.1.0: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - - postcss-svgo@7.0.1(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - svgo: 3.3.2 - - postcss-unique-selectors@7.0.3(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-selector-parser: 6.1.2 - postcss-value-parser@4.2.0: {} postcss@8.4.49: @@ -9030,8 +7949,6 @@ snapshots: prettier@3.6.2: {} - pretty-bytes@6.1.1: {} - proc-log@3.0.0: {} promise-inflight@1.0.1: {} @@ -9231,14 +8148,6 @@ snapshots: '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.29 '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.29 - rollup-plugin-dts@6.2.1(rollup@4.44.1)(typescript@5.8.3): - dependencies: - magic-string: 0.30.17 - rollup: 4.44.1 - typescript: 5.8.3 - optionalDependencies: - '@babel/code-frame': 7.27.1 - rollup@4.44.1: dependencies: '@types/estree': 1.0.8 @@ -9289,8 +8198,6 @@ snapshots: refa: 0.12.1 regexp-ast-analysis: 0.7.1 - scule@1.3.0: {} - semver@6.3.1: {} semver@7.7.2: {} @@ -9456,12 +8363,6 @@ snapshots: stylis: 4.3.2 tslib: 2.6.2 - stylehacks@7.0.4(postcss@8.5.6): - dependencies: - browserslist: 4.24.4 - postcss: 8.5.6 - postcss-selector-parser: 6.1.2 - stylis@4.2.0: {} stylis@4.3.2: {} @@ -9474,16 +8375,6 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svgo@3.3.2: - dependencies: - '@trysound/sax': 0.2.0 - commander: 7.2.0 - css-select: 5.1.0 - css-tree: 2.3.1 - css-what: 6.1.0 - csso: 5.0.5 - picocolors: 1.1.1 - tailwindcss@4.1.11: {} tapable@2.2.1: {} @@ -9595,39 +8486,6 @@ snapshots: uglify-js@3.19.3: optional: true - unbuild@3.5.0(typescript@5.8.3): - dependencies: - '@rollup/plugin-alias': 5.1.1(rollup@4.44.1) - '@rollup/plugin-commonjs': 28.0.3(rollup@4.44.1) - '@rollup/plugin-json': 6.1.0(rollup@4.44.1) - '@rollup/plugin-node-resolve': 16.0.1(rollup@4.44.1) - '@rollup/plugin-replace': 6.0.2(rollup@4.44.1) - '@rollup/pluginutils': 5.1.4(rollup@4.44.1) - citty: 0.1.6 - consola: 3.4.2 - defu: 6.1.4 - esbuild: 0.25.5 - fix-dts-default-cjs-exports: 1.0.1 - hookable: 5.5.3 - jiti: 2.4.2 - magic-string: 0.30.17 - mkdist: 2.2.0(typescript@5.8.3) - mlly: 1.7.4 - pathe: 2.0.3 - pkg-types: 2.1.0 - pretty-bytes: 6.1.1 - rollup: 4.44.1 - rollup-plugin-dts: 6.2.1(rollup@4.44.1)(typescript@5.8.3) - scule: 1.3.0 - tinyglobby: 0.2.14 - untyped: 2.0.0 - optionalDependencies: - typescript: 5.8.3 - transitivePeerDependencies: - - sass - - vue - - vue-tsc - unconfig@7.3.2: dependencies: '@quansync/fs': 0.1.3 @@ -9720,14 +8578,6 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.9.2 '@unrs/resolver-binding-win32-x64-msvc': 1.9.2 - untyped@2.0.0: - dependencies: - citty: 0.1.6 - defu: 6.1.4 - jiti: 2.4.2 - knitwork: 1.2.0 - scule: 1.3.0 - update-browserslist-db@1.1.1(browserslist@4.24.4): dependencies: browserslist: 4.24.4 From f0b4cff636558a27ed4e5527ed4ea68a2243e40e Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 28 Jul 2025 12:36:25 +0900 Subject: [PATCH 144/313] fix(rsc): improve auto css heuristics (#643) --- packages/plugin-rsc/e2e/basic.test.ts | 8 ++++++++ packages/plugin-rsc/examples/basic/package.json | 1 + .../plugin-rsc/examples/basic/src/routes/root.tsx | 2 ++ .../basic/test-dep/css-in-server/package.json | 11 +++++++++++ .../examples/basic/test-dep/css-in-server/server.css | 3 +++ .../basic/test-dep/css-in-server/server.d.ts | 1 + .../examples/basic/test-dep/css-in-server/server.js | 12 ++++++++++++ packages/plugin-rsc/src/plugin.ts | 11 ++++++++--- pnpm-lock.yaml | 12 ++++++++++++ 9 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 packages/plugin-rsc/examples/basic/test-dep/css-in-server/package.json create mode 100644 packages/plugin-rsc/examples/basic/test-dep/css-in-server/server.css create mode 100644 packages/plugin-rsc/examples/basic/test-dep/css-in-server/server.d.ts create mode 100644 packages/plugin-rsc/examples/basic/test-dep/css-in-server/server.js diff --git a/packages/plugin-rsc/e2e/basic.test.ts b/packages/plugin-rsc/e2e/basic.test.ts index 6e6aef111..6fff84076 100644 --- a/packages/plugin-rsc/e2e/basic.test.ts +++ b/packages/plugin-rsc/e2e/basic.test.ts @@ -322,11 +322,19 @@ function defineTest(f: Fixture) { await page.goto(f.url()) await waitForHydration(page) await testCss(page) + await expect(page.locator('.test-dep-css-in-server')).toHaveCSS( + 'color', + 'rgb(255, 165, 0)', + ) }) testNoJs('css @nojs', async ({ page }) => { await page.goto(f.url()) await testCss(page) + await expect(page.locator('.test-dep-css-in-server')).toHaveCSS( + 'color', + 'rgb(255, 165, 0)', + ) }) async function testCss(page: Page, color = 'rgb(255, 165, 0)') { diff --git a/packages/plugin-rsc/examples/basic/package.json b/packages/plugin-rsc/examples/basic/package.json index 6fb6344bc..419c98348 100644 --- a/packages/plugin-rsc/examples/basic/package.json +++ b/packages/plugin-rsc/examples/basic/package.json @@ -26,6 +26,7 @@ "@vitejs/test-dep-client-in-server2": "file:./test-dep/client-in-server2", "@vitejs/test-dep-server-in-client": "file:./test-dep/server-in-client", "@vitejs/test-dep-server-in-server": "file:./test-dep/server-in-server", + "@vitejs/test-dep-css-in-server": "file:./test-dep/css-in-server", "rsc-html-stream": "^0.0.7", "tailwindcss": "^4.1.11", "vite": "^7.0.5", diff --git a/packages/plugin-rsc/examples/basic/src/routes/root.tsx b/packages/plugin-rsc/examples/basic/src/routes/root.tsx index f679c362e..1bda17eed 100644 --- a/packages/plugin-rsc/examples/basic/src/routes/root.tsx +++ b/packages/plugin-rsc/examples/basic/src/routes/root.tsx @@ -30,6 +30,7 @@ import { TestUseCache } from './use-cache/server' import { TestHydrationMismatch } from './hydration-mismatch/server' import { TestBrowserOnly } from './browser-only/client' import { TestTransitiveCjsClient } from './deps/transitive-cjs/client' +import TestDepCssInServer from '@vitejs/test-dep-css-in-server/server' export function Root(props: { url: URL }) { return ( @@ -51,6 +52,7 @@ export function Root(props: { url: URL }) { + diff --git a/packages/plugin-rsc/examples/basic/test-dep/css-in-server/package.json b/packages/plugin-rsc/examples/basic/test-dep/css-in-server/package.json new file mode 100644 index 000000000..946252b68 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/test-dep/css-in-server/package.json @@ -0,0 +1,11 @@ +{ + "name": "@vitejs/test-dep-css-in-server", + "private": true, + "type": "module", + "exports": { + "./server": "./server.js" + }, + "peerDependencies": { + "react": "*" + } +} diff --git a/packages/plugin-rsc/examples/basic/test-dep/css-in-server/server.css b/packages/plugin-rsc/examples/basic/test-dep/css-in-server/server.css new file mode 100644 index 000000000..9f6f4f39a --- /dev/null +++ b/packages/plugin-rsc/examples/basic/test-dep/css-in-server/server.css @@ -0,0 +1,3 @@ +.test-dep-css-in-server { + color: rgb(255, 165, 0); +} diff --git a/packages/plugin-rsc/examples/basic/test-dep/css-in-server/server.d.ts b/packages/plugin-rsc/examples/basic/test-dep/css-in-server/server.d.ts new file mode 100644 index 000000000..8177ed95c --- /dev/null +++ b/packages/plugin-rsc/examples/basic/test-dep/css-in-server/server.d.ts @@ -0,0 +1 @@ +export default function TestDepCssInServer(): import('react').ReactNode diff --git a/packages/plugin-rsc/examples/basic/test-dep/css-in-server/server.js b/packages/plugin-rsc/examples/basic/test-dep/css-in-server/server.js new file mode 100644 index 000000000..4fefceb50 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/test-dep/css-in-server/server.js @@ -0,0 +1,12 @@ +import React from 'react' +import './server.css' + +const h = React.createElement + +export default function TestDepCssInServer() { + return h( + 'div', + { className: 'test-dep-css-in-server' }, + `test-dep-css-in-server`, + ) +} diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index c89213f94..df5b70f9b 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -1646,7 +1646,7 @@ export function vitePluginRscCss( id: string code: string }): false | TransformWrapExportFilter { - const { query } = parseIdQuery(id) + const { filename, query } = parseIdQuery(id) if ('vite-rsc-css-export' in query) { const value = query['vite-rsc-css-export'] if (value) { @@ -1658,8 +1658,13 @@ export function vitePluginRscCss( const options = rscCssOptions?.rscCssTransform if (options === false) return false - if (options?.filter && !options.filter(id)) return false - if (id.includes('/node_modules/') || !/\.[tj]sx$/.test(id)) return false + if (options?.filter && !options.filter(filename)) return false + // https://github.com/vitejs/vite/blob/7979f9da555aa16bd221b32ea78ce8cb5292fac4/packages/vite/src/node/constants.ts#L95 + if ( + !/\.(css|less|sass|scss|styl|stylus|pcss|postcss|sss)\b/.test(code) || + !/\.[tj]sx?$/.test(filename) + ) + return false // skip transform if no css imports const result = esModuleLexer.parse(code) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a3baa0c6a..5509c0050 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -533,6 +533,9 @@ importers: '@vitejs/test-dep-client-in-server2': specifier: file:./test-dep/client-in-server2 version: file:packages/plugin-rsc/examples/basic/test-dep/client-in-server2(react@19.1.0) + '@vitejs/test-dep-css-in-server': + specifier: file:./test-dep/css-in-server + version: file:packages/plugin-rsc/examples/basic/test-dep/css-in-server(react@19.1.0) '@vitejs/test-dep-server-in-client': specifier: file:./test-dep/server-in-client version: file:packages/plugin-rsc/examples/basic/test-dep/server-in-client(react@19.1.0) @@ -2573,6 +2576,11 @@ packages: peerDependencies: react: '*' + '@vitejs/test-dep-css-in-server@file:packages/plugin-rsc/examples/basic/test-dep/css-in-server': + resolution: {directory: packages/plugin-rsc/examples/basic/test-dep/css-in-server, type: directory} + peerDependencies: + react: '*' + '@vitejs/test-dep-non-js@file:packages/plugin-react-swc/playground/ts-lib/test-dep/non-js': resolution: {directory: packages/plugin-react-swc/playground/ts-lib/test-dep/non-js, type: directory} peerDependencies: @@ -6317,6 +6325,10 @@ snapshots: dependencies: react: 19.1.0 + '@vitejs/test-dep-css-in-server@file:packages/plugin-rsc/examples/basic/test-dep/css-in-server(react@19.1.0)': + dependencies: + react: 19.1.0 + '@vitejs/test-dep-non-js@file:packages/plugin-react-swc/playground/ts-lib/test-dep/non-js(react@19.1.0)': dependencies: react: 19.1.0 From 9a0c7398c247235ef933932a29cb05ef2a1e33eb Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 28 Jul 2025 12:38:33 +0900 Subject: [PATCH 145/313] release: plugin-rsc@0.4.15 --- packages/plugin-rsc/CHANGELOG.md | 9 +++++++++ packages/plugin-rsc/package.json | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/plugin-rsc/CHANGELOG.md b/packages/plugin-rsc/CHANGELOG.md index cf3ddac58..5449f8a6b 100644 --- a/packages/plugin-rsc/CHANGELOG.md +++ b/packages/plugin-rsc/CHANGELOG.md @@ -1,3 +1,12 @@ +## [0.4.15](https://github.com/vitejs/vite-plugin-react/compare/plugin-rsc@0.4.14...plugin-rsc@0.4.15) (2025-07-28) +### Features + +* **rsc:** show warning for non optimized cjs ([#635](https://github.com/vitejs/vite-plugin-react/issues/635)) ([da0a786](https://github.com/vitejs/vite-plugin-react/commit/da0a78607d18be534232fba5ea95bb96cc987449)) + +### Bug Fixes + +* **rsc:** improve auto css heuristics ([#643](https://github.com/vitejs/vite-plugin-react/issues/643)) ([f0b4cff](https://github.com/vitejs/vite-plugin-react/commit/f0b4cff636558a27ed4e5527ed4ea68a2243e40e)) + ## [0.4.14](https://github.com/vitejs/vite-plugin-react/compare/plugin-rsc@0.4.13...plugin-rsc@0.4.14) (2025-07-27) ### Features diff --git a/packages/plugin-rsc/package.json b/packages/plugin-rsc/package.json index 7932edba1..01e4e08be 100644 --- a/packages/plugin-rsc/package.json +++ b/packages/plugin-rsc/package.json @@ -1,6 +1,6 @@ { "name": "@vitejs/plugin-rsc", - "version": "0.4.14", + "version": "0.4.15", "description": "React Server Components (RSC) support for Vite.", "keywords": [ "vite", From edadfef2e7f5e22e2305d0bd5da2eb48205a61bc Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 28 Jul 2025 17:20:03 +0900 Subject: [PATCH 146/313] chore: add `webpack` to `peerDependencyRules.ignoreMissing` (#648) --- pnpm-workspace.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 69069a427..9b04071ae 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -12,3 +12,8 @@ overrides: '@types/estree': ^1.0.8 dedupeInjectedDeps: false + +peerDependencyRules: + ignoreMissing: + # ignore react-server-dom-webpack -> webpack + - webpack From 133d7865f42aa3376b5d3119fdb6a71eaf600275 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0?= Date: Mon, 28 Jul 2025 17:42:38 +0900 Subject: [PATCH 147/313] feat: merge `plugin-react-oxc` into `plugin-react` (#609) Co-authored-by: Hiroshi Ogawa --- .github/workflows/ci.yml | 11 ++ packages/plugin-react-oxc/CHANGELOG.md | 4 + packages/plugin-react-oxc/src/index.ts | 7 ++ packages/plugin-react-swc/src/index.ts | 4 +- packages/plugin-react/CHANGELOG.md | 6 + packages/plugin-react/src/index.ts | 112 +++++++++++++----- packages/plugin-rsc/e2e/starter.test.ts | 5 + .../__tests__/oxc/class-components.spec.ts | 1 - .../hmr-false/__tests__/oxc/hmr-false.spec.ts | 1 - .../__tests__/oxc/hook-with-jsx.spec.ts | 1 - playground/mdx/__tests__/oxc/mdx.spec.ts | 1 - .../react-env/__tests__/oxc/react.spec.ts | 1 - .../__tests__/oxc/react-sourcemap.spec.ts | 1 - playground/react/__tests__/oxc/react.spec.ts | 1 - .../ssr-react/__tests__/oxc/ssr-react.spec.ts | 1 - playground/vitest.config.e2e.ts | 7 +- playground/vitestGlobalSetup.ts | 49 -------- playground/vitestSetup.ts | 18 ++- 18 files changed, 128 insertions(+), 103 deletions(-) delete mode 100644 playground/class-components/__tests__/oxc/class-components.spec.ts delete mode 100644 playground/hmr-false/__tests__/oxc/hmr-false.spec.ts delete mode 100644 playground/hook-with-jsx/__tests__/oxc/hook-with-jsx.spec.ts delete mode 100644 playground/mdx/__tests__/oxc/mdx.spec.ts delete mode 100644 playground/react-env/__tests__/oxc/react.spec.ts delete mode 100644 playground/react-sourcemap/__tests__/oxc/react-sourcemap.spec.ts delete mode 100644 playground/react/__tests__/oxc/react.spec.ts delete mode 100644 playground/ssr-react/__tests__/oxc/ssr-react.spec.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c395dddec..5ef2c8337 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -93,6 +93,17 @@ jobs: - name: Test SWC run: pnpm --filter ./packages/plugin-react-swc run test + - name: Setup rolldown-vite + run: | + sed -i"" -e "s/overrides:/overrides:\n vite: catalog:rolldown-vite/" pnpm-workspace.yaml + pnpm i --no-frozen-lockfile + + - name: Test serve (rolldown-vite) + run: pnpm run test-serve + + - name: Test build (rolldown-vite) + run: pnpm run test-build + lint: if: github.repository == 'vitejs/vite-plugin-react' timeout-minutes: 10 diff --git a/packages/plugin-react-oxc/CHANGELOG.md b/packages/plugin-react-oxc/CHANGELOG.md index 2e08df63d..4b94ef788 100644 --- a/packages/plugin-react-oxc/CHANGELOG.md +++ b/packages/plugin-react-oxc/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Deprecate this plugin + +The changes of this plugin is now included in `@vitejs/plugin-react`. Please use `@vitejs/plugin-react` instead. + ### Allow processing files in `node_modules` The default value of `exclude` options is now `[/\/node_modules\//]` to allow processing files in `node_modules` directory. It was previously `[]` and files in `node_modules` was always excluded regardless of the value of `exclude` option. diff --git a/packages/plugin-react-oxc/src/index.ts b/packages/plugin-react-oxc/src/index.ts index 3b6318b02..3f35996f9 100644 --- a/packages/plugin-react-oxc/src/index.ts +++ b/packages/plugin-react-oxc/src/index.ts @@ -62,6 +62,13 @@ export default function viteReact(opts: Options = {}): Plugin[] { }, } }, + configResolved(config) { + config.logger.warn( + '@vitejs/plugin-react-oxc is deprecated. ' + + 'Please use @vitejs/plugin-react instead. ' + + 'The changes of this plugin is now included in @vitejs/plugin-react.', + ) + }, options() { if (!this.meta.rolldownVersion) { throw new Error( diff --git a/packages/plugin-react-swc/src/index.ts b/packages/plugin-react-swc/src/index.ts index 432f8fbeb..b781b2e36 100644 --- a/packages/plugin-react-swc/src/index.ts +++ b/packages/plugin-react-swc/src/index.ts @@ -78,7 +78,7 @@ type Options = { useAtYourOwnRisk_mutateSwcOptions?: (options: SWCOptions) => void /** - * If set, disables the recommendation to use `@vitejs/plugin-react-oxc` + * If set, disables the recommendation to use `@vitejs/plugin-react` */ disableOxcRecommendation?: boolean } @@ -158,7 +158,7 @@ const react = (_options?: Options): Plugin[] => { !options.disableOxcRecommendation ) { config.logger.warn( - '[vite:react-swc] We recommend switching to `@vitejs/plugin-react-oxc` for improved performance as no swc plugins are used. More information at https://vite.dev/rolldown', + '[vite:react-swc] We recommend switching to `@vitejs/plugin-react` for improved performance as no swc plugins are used. More information at https://vite.dev/rolldown', ) } }, diff --git a/packages/plugin-react/CHANGELOG.md b/packages/plugin-react/CHANGELOG.md index 0aabccc3e..d004d75d3 100644 --- a/packages/plugin-react/CHANGELOG.md +++ b/packages/plugin-react/CHANGELOG.md @@ -2,6 +2,12 @@ ## Unreleased +### Use Oxc for react refresh transform in rolldown-vite + +When used with rolldown-vite, this plugin now uses Oxc for react refresh transform. + +Since this behavior is what `@vitejs/plugin-react-oxc` did, `@vitejs/plugin-react-oxc` is now deprecated and the `disableOxcRecommendation` option is removed. + ### Allow processing files in `node_modules` The default value of `exclude` options is now `[/\/node_modules\//]` to allow processing files in `node_modules` directory. It was previously `[]` and files in `node_modules` was always excluded regardless of the value of `exclude` option. diff --git a/packages/plugin-react/src/index.ts b/packages/plugin-react/src/index.ts index 436091402..648da2cf8 100644 --- a/packages/plugin-react/src/index.ts +++ b/packages/plugin-react/src/index.ts @@ -8,6 +8,7 @@ import * as vite from 'vite' import type { Plugin, ResolvedConfig } from 'vite' import { addRefreshWrapper, + avoidSourceMapOption, getPreambleCode, preambleCode, runtimePublicPath, @@ -58,11 +59,6 @@ export interface Options { * reactRefreshHost: 'http://localhost:3000' */ reactRefreshHost?: string - - /** - * If set, disables the recommendation to use `@vitejs/plugin-react-oxc` - */ - disableOxcRecommendation?: boolean } export type BabelOptions = Omit< @@ -115,6 +111,8 @@ export default function viteReact(opts: Options = {}): Plugin[] { const jsxImportSource = opts.jsxImportSource ?? 'react' const jsxImportRuntime = `${jsxImportSource}/jsx-runtime` const jsxImportDevRuntime = `${jsxImportSource}/jsx-dev-runtime` + + const isRolldownVite = 'rolldownVersion' in vite let runningInVite = false let isProduction = true let projectRoot = process.cwd() @@ -133,37 +131,53 @@ export default function viteReact(opts: Options = {}): Plugin[] { const viteBabel: Plugin = { name: 'vite:react-babel', enforce: 'pre', - config() { - if (opts.jsxRuntime === 'classic') { - if ('rolldownVersion' in vite) { + config(_userConfig, { command }) { + if ('rolldownVersion' in vite) { + if (opts.jsxRuntime === 'classic') { return { oxc: { jsx: { runtime: 'classic', + refresh: command === 'serve', // disable __self and __source injection even in dev // as this plugin injects them by babel and oxc will throw // if development is enabled and those properties are already present development: false, }, + jsxRefreshInclude: include, + jsxRefreshExclude: exclude, }, } } else { return { - esbuild: { - jsx: 'transform', + oxc: { + jsx: { + runtime: 'automatic', + importSource: jsxImportSource, + refresh: command === 'serve', + development: command === 'serve', + }, + jsxRefreshInclude: include, + jsxRefreshExclude: exclude, }, + optimizeDeps: { rollupOptions: { jsx: { mode: 'automatic' } } }, } } + } + + if (opts.jsxRuntime === 'classic') { + return { + esbuild: { + jsx: 'transform', + }, + } } else { return { esbuild: { jsx: 'automatic', - jsxImportSource: opts.jsxImportSource, + jsxImportSource: jsxImportSource, }, - optimizeDeps: - 'rolldownVersion' in vite - ? { rollupOptions: { jsx: { mode: 'automatic' } } } - : { esbuildOptions: { jsx: 'automatic' } }, + optimizeDeps: { esbuildOptions: { jsx: 'automatic' } }, } } }, @@ -180,17 +194,6 @@ export default function viteReact(opts: Options = {}): Plugin[] { .map((plugin) => plugin.api?.reactBabel) .filter(defined) - if ( - 'rolldownVersion' in vite && - !opts.babel && - !hooks.length && - !opts.disableOxcRecommendation - ) { - config.logger.warn( - '[vite:react-babel] We recommend switching to `@vitejs/plugin-react-oxc` for improved performance. More information at https://vite.dev/rolldown', - ) - } - if (hooks.length > 0) { runPluginOverrides = (babelOptions, context) => { hooks.forEach((hook) => hook(babelOptions, context, config)) @@ -252,7 +255,7 @@ export default function viteReact(opts: Options = {}): Plugin[] { ? importReactRE.test(code) : code.includes(jsxImportDevRuntime) || code.includes(jsxImportRuntime))) - if (useFastRefresh) { + if (useFastRefresh && !isRolldownVite) { plugins.push([ await loadPlugin('react-refresh/babel'), { skipEnvCheck: true }, @@ -329,6 +332,59 @@ export default function viteReact(opts: Options = {}): Plugin[] { }, } + const viteRefreshWrapper: Plugin = { + name: 'vite:react:refresh-wrapper', + apply: 'serve', + transform: isRolldownVite + ? { + filter: { + id: { + include: makeIdFiltersToMatchWithQuery(include), + exclude: makeIdFiltersToMatchWithQuery(exclude), + }, + }, + handler(code, id, options) { + const ssr = options?.ssr === true + + const [filepath] = id.split('?') + const isJSX = filepath.endsWith('x') + const useFastRefresh = + !skipFastRefresh && + !ssr && + (isJSX || + code.includes(jsxImportDevRuntime) || + code.includes(jsxImportRuntime)) + if (!useFastRefresh) return + + const { code: newCode } = addRefreshWrapper( + code, + avoidSourceMapOption, + '@vitejs/plugin-react', + id, + ) + return { code: newCode, map: null } + }, + } + : undefined, + } + + const viteConfigPost: Plugin = { + name: 'vite:react:config-post', + enforce: 'post', + config(userConfig) { + if (userConfig.server?.hmr === false) { + return { + oxc: { + jsx: { + refresh: false, + }, + }, + // oxc option is only available in rolldown-vite + } as any + } + }, + } + const dependencies = [ 'react', 'react-dom', @@ -384,7 +440,7 @@ export default function viteReact(opts: Options = {}): Plugin[] { }, } - return [viteBabel, viteReactRefresh] + return [viteBabel, viteRefreshWrapper, viteConfigPost, viteReactRefresh] } viteReact.preambleCode = preambleCode diff --git a/packages/plugin-rsc/e2e/starter.test.ts b/packages/plugin-rsc/e2e/starter.test.ts index a66db75cf..2d49059a3 100644 --- a/packages/plugin-rsc/e2e/starter.test.ts +++ b/packages/plugin-rsc/e2e/starter.test.ts @@ -2,6 +2,7 @@ import { expect, test } from '@playwright/test' import { useFixture } from './fixture' import { defineStarterTest } from './starter' import { waitForHydration } from './helper' +import * as vite from 'vite' test.describe('dev-default', () => { const f = useFixture({ root: 'examples/starter', mode: 'dev' }) @@ -24,6 +25,8 @@ test.describe('build-cloudflare', () => { }) test.describe('dev-production', () => { + test.skip('rolldownVersion' in vite) + const f = useFixture({ root: 'examples/starter', mode: 'dev', @@ -42,6 +45,8 @@ test.describe('dev-production', () => { }) test.describe('build-development', () => { + test.skip('rolldownVersion' in vite) + const f = useFixture({ root: 'examples/starter', mode: 'build', diff --git a/playground/class-components/__tests__/oxc/class-components.spec.ts b/playground/class-components/__tests__/oxc/class-components.spec.ts deleted file mode 100644 index 471b6e892..000000000 --- a/playground/class-components/__tests__/oxc/class-components.spec.ts +++ /dev/null @@ -1 +0,0 @@ -import '../class-components.spec' diff --git a/playground/hmr-false/__tests__/oxc/hmr-false.spec.ts b/playground/hmr-false/__tests__/oxc/hmr-false.spec.ts deleted file mode 100644 index 57dff5bd9..000000000 --- a/playground/hmr-false/__tests__/oxc/hmr-false.spec.ts +++ /dev/null @@ -1 +0,0 @@ -import '../hmr-false.spec' diff --git a/playground/hook-with-jsx/__tests__/oxc/hook-with-jsx.spec.ts b/playground/hook-with-jsx/__tests__/oxc/hook-with-jsx.spec.ts deleted file mode 100644 index 4696fae50..000000000 --- a/playground/hook-with-jsx/__tests__/oxc/hook-with-jsx.spec.ts +++ /dev/null @@ -1 +0,0 @@ -import '../hook-with-jsx.spec' diff --git a/playground/mdx/__tests__/oxc/mdx.spec.ts b/playground/mdx/__tests__/oxc/mdx.spec.ts deleted file mode 100644 index 4f2df7980..000000000 --- a/playground/mdx/__tests__/oxc/mdx.spec.ts +++ /dev/null @@ -1 +0,0 @@ -import '../mdx.spec' diff --git a/playground/react-env/__tests__/oxc/react.spec.ts b/playground/react-env/__tests__/oxc/react.spec.ts deleted file mode 100644 index 776f43259..000000000 --- a/playground/react-env/__tests__/oxc/react.spec.ts +++ /dev/null @@ -1 +0,0 @@ -import '../react.spec' diff --git a/playground/react-sourcemap/__tests__/oxc/react-sourcemap.spec.ts b/playground/react-sourcemap/__tests__/oxc/react-sourcemap.spec.ts deleted file mode 100644 index 4fb7caa7e..000000000 --- a/playground/react-sourcemap/__tests__/oxc/react-sourcemap.spec.ts +++ /dev/null @@ -1 +0,0 @@ -import '../react-sourcemap.spec' diff --git a/playground/react/__tests__/oxc/react.spec.ts b/playground/react/__tests__/oxc/react.spec.ts deleted file mode 100644 index 776f43259..000000000 --- a/playground/react/__tests__/oxc/react.spec.ts +++ /dev/null @@ -1 +0,0 @@ -import '../react.spec' diff --git a/playground/ssr-react/__tests__/oxc/ssr-react.spec.ts b/playground/ssr-react/__tests__/oxc/ssr-react.spec.ts deleted file mode 100644 index 66fde5a3f..000000000 --- a/playground/ssr-react/__tests__/oxc/ssr-react.spec.ts +++ /dev/null @@ -1 +0,0 @@ -import '../ssr-react.spec' diff --git a/playground/vitest.config.e2e.ts b/playground/vitest.config.e2e.ts index 6a59bd577..412f3142f 100644 --- a/playground/vitest.config.e2e.ts +++ b/playground/vitest.config.e2e.ts @@ -1,10 +1,8 @@ import { resolve } from 'node:path' -import { defaultExclude, defineConfig } from 'vitest/config' +import { defineConfig } from 'vitest/config' const timeout = process.env.PWDEBUG ? Infinity : process.env.CI ? 20_000 : 5_000 -const isBelowNode20 = +process.versions.node.split('.')[0] < 20 - export default defineConfig({ resolve: { alias: { @@ -14,9 +12,6 @@ export default defineConfig({ test: { pool: 'forks', include: ['./playground/**/*.spec.[tj]s'], - exclude: isBelowNode20 - ? ['**/__tests__/oxc/**', ...defaultExclude] // plugin-oxc only supports node >= 20 - : defaultExclude, setupFiles: ['./playground/vitestSetup.ts'], globalSetup: ['./playground/vitestGlobalSetup.ts'], testTimeout: timeout, diff --git a/playground/vitestGlobalSetup.ts b/playground/vitestGlobalSetup.ts index a7fa1d6e7..508ec0f0a 100644 --- a/playground/vitestGlobalSetup.ts +++ b/playground/vitestGlobalSetup.ts @@ -40,55 +40,6 @@ export async function setup({ provide }: TestProject): Promise { throw error } }) - - const playgrounds = ( - await fs.readdir(path.resolve(__dirname, '../playground'), { - withFileTypes: true, - }) - ).filter((dirent) => dirent.name !== 'node_modules' && dirent.isDirectory()) - for (const { name: playgroundName } of playgrounds) { - // write vite proxy file to load vite from each playground - await fs.writeFile( - path.resolve(tempDir, `${playgroundName}/_vite-proxy.js`), - "export * from 'vite';", - ) - - // also setup dedicated copy for plugin-react-oxc tests - const oxcTestDir = path.resolve( - __dirname, - '../playground', - playgroundName, - '__tests__/oxc', - ) - if (!(await fs.exists(oxcTestDir))) continue - - const variantPlaygroundName = `${playgroundName}__oxc` - await fs.copy( - path.resolve(tempDir, playgroundName), - path.resolve(tempDir, variantPlaygroundName), - ) - await fs.remove( - path.resolve( - tempDir, - `${variantPlaygroundName}/node_modules/@vitejs/plugin-react`, - ), - ) - await fs.symlink( - path.resolve(__dirname, '../packages/plugin-react-oxc'), - path.resolve( - tempDir, - `${variantPlaygroundName}/node_modules/@vitejs/plugin-react`, - ), - ) - await fs.symlink( - path.resolve(__dirname, '../packages/plugin-react-oxc/node_modules/vite'), - path.resolve(tempDir, `${variantPlaygroundName}/node_modules/vite`), - ) - await fs.copy( - path.resolve(__dirname, '../packages/plugin-react-oxc/node_modules/.bin'), - path.resolve(tempDir, `${variantPlaygroundName}/node_modules/.bin`), - ) - } } export async function teardown(): Promise { diff --git a/playground/vitestSetup.ts b/playground/vitestSetup.ts index dda7a4ffb..0638b88a5 100644 --- a/playground/vitestSetup.ts +++ b/playground/vitestSetup.ts @@ -15,6 +15,14 @@ import type { import type { Browser, Page } from 'playwright-chromium' import type { RunnerTestFile } from 'vitest' import { beforeAll, inject } from 'vitest' +import { + build, + createBuilder, + createServer, + loadConfigFromFile, + mergeConfig, + preview, +} from 'vite' // #region env @@ -169,8 +177,6 @@ beforeAll(async (s) => { }) async function loadConfig(configEnv: ConfigEnv) { - const { loadConfigFromFile, mergeConfig } = await importVite() - let config: UserConfig | null = null // config file named by convention as the *.spec.ts folder @@ -220,9 +226,6 @@ async function loadConfig(configEnv: ConfigEnv) { } export async function startDefaultServe(): Promise { - const { build, createBuilder, createServer, mergeConfig, preview } = - await importVite() - setupConsoleWarnCollector(serverLogs) if (!isBuild) { @@ -353,11 +356,6 @@ function stripTrailingSlashIfNeeded(url: string, base: string): string { return url } -async function importVite(): Promise { - const vitePath = path.resolve(testDir, '_vite-proxy.js') - return await import(vitePath) -} - declare module 'vite' { export interface UserConfig { /** From 1a02ba7f4d3fe4a1696b43bc5161d6d466802faf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 28 Jul 2025 17:56:55 +0900 Subject: [PATCH 148/313] chore(deps): update all non-major dependencies (#639) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 8 +- .../plugin-rsc/examples/basic/package.json | 6 +- .../plugin-rsc/examples/no-ssr/package.json | 2 +- .../examples/react-router/package.json | 8 +- packages/plugin-rsc/examples/ssg/package.json | 2 +- .../examples/starter-cf-single/package.json | 2 +- .../plugin-rsc/examples/starter/package.json | 4 +- pnpm-lock.yaml | 371 +++++++++++------- pnpm-workspace.yaml | 2 +- 9 files changed, 238 insertions(+), 167 deletions(-) diff --git a/package.json b/package.json index eafb1254d..05d7c184e 100644 --- a/package.json +++ b/package.json @@ -33,13 +33,13 @@ "ci-publish": "tsx scripts/publishCI.ts" }, "devDependencies": { - "@eslint/js": "^9.31.0", + "@eslint/js": "^9.32.0", "@types/fs-extra": "^11.0.4", "@types/node": "^22.16.5", "@vitejs/release-scripts": "^1.6.0", - "eslint": "^9.31.0", + "eslint": "^9.32.0", "eslint-plugin-import-x": "^4.16.1", - "eslint-plugin-n": "^17.21.0", + "eslint-plugin-n": "^17.21.2", "eslint-plugin-regexp": "^2.9.0", "fs-extra": "^11.3.0", "globals": "^16.3.0", @@ -51,7 +51,7 @@ "tsx": "^4.20.3", "typescript": "^5.8.3", "typescript-eslint": "^8.38.0", - "vite": "^7.0.5", + "vite": "^7.0.6", "vitest": "^3.2.4" }, "simple-git-hooks": { diff --git a/packages/plugin-rsc/examples/basic/package.json b/packages/plugin-rsc/examples/basic/package.json index 419c98348..bbdffa9bd 100644 --- a/packages/plugin-rsc/examples/basic/package.json +++ b/packages/plugin-rsc/examples/basic/package.json @@ -29,8 +29,8 @@ "@vitejs/test-dep-css-in-server": "file:./test-dep/css-in-server", "rsc-html-stream": "^0.0.7", "tailwindcss": "^4.1.11", - "vite": "^7.0.5", - "vite-plugin-inspect": "^11.3.0", - "wrangler": "^4.25.1" + "vite": "^7.0.6", + "vite-plugin-inspect": "^11.3.2", + "wrangler": "^4.26.0" } } diff --git a/packages/plugin-rsc/examples/no-ssr/package.json b/packages/plugin-rsc/examples/no-ssr/package.json index 113bf7533..2e6ce1ac9 100644 --- a/packages/plugin-rsc/examples/no-ssr/package.json +++ b/packages/plugin-rsc/examples/no-ssr/package.json @@ -18,6 +18,6 @@ "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "latest", - "vite": "^7.0.5" + "vite": "^7.0.6" } } diff --git a/packages/plugin-rsc/examples/react-router/package.json b/packages/plugin-rsc/examples/react-router/package.json index 818629ba6..b1d88dfc0 100644 --- a/packages/plugin-rsc/examples/react-router/package.json +++ b/packages/plugin-rsc/examples/react-router/package.json @@ -19,7 +19,7 @@ "react-router": "7.7.0" }, "devDependencies": { - "@cloudflare/vite-plugin": "^1.10.0", + "@cloudflare/vite-plugin": "^1.10.1", "@react-router/dev": "7.7.0", "@tailwindcss/typography": "^0.5.16", "@tailwindcss/vite": "^4.1.11", @@ -27,8 +27,8 @@ "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "latest", "tailwindcss": "^4.1.11", - "vite": "^7.0.5", - "vite-plugin-inspect": "^11.3.0", - "wrangler": "^4.25.1" + "vite": "^7.0.6", + "vite-plugin-inspect": "^11.3.2", + "wrangler": "^4.26.0" } } diff --git a/packages/plugin-rsc/examples/ssg/package.json b/packages/plugin-rsc/examples/ssg/package.json index 10a02275c..faa07634f 100644 --- a/packages/plugin-rsc/examples/ssg/package.json +++ b/packages/plugin-rsc/examples/ssg/package.json @@ -19,6 +19,6 @@ "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "latest", - "vite-plugin-inspect": "^11.3.0" + "vite-plugin-inspect": "^11.3.2" } } diff --git a/packages/plugin-rsc/examples/starter-cf-single/package.json b/packages/plugin-rsc/examples/starter-cf-single/package.json index 776754b67..98f455813 100644 --- a/packages/plugin-rsc/examples/starter-cf-single/package.json +++ b/packages/plugin-rsc/examples/starter-cf-single/package.json @@ -16,7 +16,7 @@ "react-dom": "^19.1.0" }, "devDependencies": { - "@cloudflare/vite-plugin": "^1.10.0", + "@cloudflare/vite-plugin": "^1.10.1", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "latest" diff --git a/packages/plugin-rsc/examples/starter/package.json b/packages/plugin-rsc/examples/starter/package.json index c2ff2950f..20f3bc8ca 100644 --- a/packages/plugin-rsc/examples/starter/package.json +++ b/packages/plugin-rsc/examples/starter/package.json @@ -19,7 +19,7 @@ "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "latest", "rsc-html-stream": "^0.0.7", - "vite": "^7.0.5", - "vite-plugin-inspect": "^11.3.0" + "vite": "^7.0.6", + "vite-plugin-inspect": "^11.3.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5509c0050..1b5466baa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,8 +7,8 @@ settings: catalogs: rolldown-vite: vite: - specifier: npm:rolldown-vite@^7.0.10 - version: 7.0.10 + specifier: npm:rolldown-vite@^7.0.11 + version: 7.0.11 overrides: '@types/estree': ^1.0.8 @@ -18,8 +18,8 @@ importers: .: devDependencies: '@eslint/js': - specifier: ^9.31.0 - version: 9.31.0 + specifier: ^9.32.0 + version: 9.32.0 '@types/fs-extra': specifier: ^11.0.4 version: 11.0.4 @@ -30,17 +30,17 @@ importers: specifier: ^1.6.0 version: 1.6.0(conventional-commits-filter@5.0.0) eslint: - specifier: ^9.31.0 - version: 9.31.0(jiti@2.4.2) + specifier: ^9.32.0 + version: 9.32.0(jiti@2.4.2) eslint-plugin-import-x: specifier: ^4.16.1 - version: 4.16.1(@typescript-eslint/utils@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2)) + version: 4.16.1(@typescript-eslint/utils@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.32.0(jiti@2.4.2)) eslint-plugin-n: - specifier: ^17.21.0 - version: 17.21.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + specifier: ^17.21.2 + version: 17.21.2(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3) eslint-plugin-regexp: specifier: ^2.9.0 - version: 2.9.0(eslint@9.31.0(jiti@2.4.2)) + version: 2.9.0(eslint@9.32.0(jiti@2.4.2)) fs-extra: specifier: ^11.3.0 version: 11.3.0 @@ -70,10 +70,10 @@ importers: version: 5.8.3 typescript-eslint: specifier: ^8.38.0 - version: 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + version: 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3) vite: - specifier: ^7.0.5 - version: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + specifier: ^7.0.6 + version: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vitest: specifier: ^3.2.4 version: 3.2.4(@types/debug@4.1.12)(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) @@ -137,7 +137,7 @@ importers: version: 0.13.0(publint@0.3.12)(typescript@5.8.3) vite: specifier: catalog:rolldown-vite - version: rolldown-vite@7.0.10(@types/node@22.16.5)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1) + version: rolldown-vite@7.0.11(@types/node@22.16.5)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1) packages/plugin-react-swc: dependencies: @@ -458,7 +458,7 @@ importers: version: 3.1.0 vitefu: specifier: ^1.1.1 - version: 1.1.1(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 1.1.1(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) devDependencies: '@hiogawa/utils': specifier: ^1.7.0 @@ -517,7 +517,7 @@ importers: devDependencies: '@tailwindcss/vite': specifier: ^4.1.11 - version: 4.1.11(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 4.1.11(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) '@types/react': specifier: ^19.1.8 version: 19.1.8 @@ -552,14 +552,14 @@ importers: specifier: ^4.1.11 version: 4.1.11 vite: - specifier: ^7.0.5 - version: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + specifier: ^7.0.6 + version: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vite-plugin-inspect: - specifier: ^11.3.0 - version: 11.3.0(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + specifier: ^11.3.2 + version: 11.3.2(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) wrangler: - specifier: ^4.25.1 - version: 4.25.1 + specifier: ^4.26.0 + version: 4.26.0 packages/plugin-rsc/examples/e2e: devDependencies: @@ -595,8 +595,8 @@ importers: specifier: latest version: link:../../../plugin-react vite: - specifier: ^7.0.5 - version: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + specifier: ^7.0.6 + version: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) packages/plugin-rsc/examples/react-router: dependencies: @@ -614,17 +614,17 @@ importers: version: 7.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) devDependencies: '@cloudflare/vite-plugin': - specifier: ^1.10.0 - version: 1.10.0(rollup@4.44.1)(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250712.0)(wrangler@4.25.1) + specifier: ^1.10.1 + version: 1.10.1(rollup@4.44.1)(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250712.0)(wrangler@4.26.0) '@react-router/dev': specifier: 7.7.0 - version: 7.7.0(@types/node@22.16.5)(babel-plugin-macros@3.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(react-router@7.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tsx@4.20.3)(typescript@5.8.3)(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(wrangler@4.25.1)(yaml@2.7.1) + version: 7.7.0(@types/node@22.16.5)(babel-plugin-macros@3.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(react-router@7.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tsx@4.20.3)(typescript@5.8.3)(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(wrangler@4.26.0)(yaml@2.7.1) '@tailwindcss/typography': specifier: ^0.5.16 version: 0.5.16(tailwindcss@4.1.11) '@tailwindcss/vite': specifier: ^4.1.11 - version: 4.1.11(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 4.1.11(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) '@types/react': specifier: ^19.1.8 version: 19.1.8 @@ -638,14 +638,14 @@ importers: specifier: ^4.1.11 version: 4.1.11 vite: - specifier: ^7.0.5 - version: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + specifier: ^7.0.6 + version: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vite-plugin-inspect: - specifier: ^11.3.0 - version: 11.3.0(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + specifier: ^11.3.2 + version: 11.3.2(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) wrangler: - specifier: ^4.25.1 - version: 4.25.1 + specifier: ^4.26.0 + version: 4.26.0 packages/plugin-rsc/examples/ssg: dependencies: @@ -672,8 +672,8 @@ importers: specifier: latest version: link:../../../plugin-react vite-plugin-inspect: - specifier: ^11.3.0 - version: 11.3.0(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + specifier: ^11.3.2 + version: 11.3.2(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) packages/plugin-rsc/examples/starter: dependencies: @@ -700,11 +700,11 @@ importers: specifier: ^0.0.7 version: 0.0.7 vite: - specifier: ^7.0.5 - version: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + specifier: ^7.0.6 + version: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vite-plugin-inspect: - specifier: ^11.3.0 - version: 11.3.0(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + specifier: ^11.3.2 + version: 11.3.2(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) packages/plugin-rsc/examples/starter-cf-single: dependencies: @@ -719,8 +719,8 @@ importers: version: 19.1.0(react@19.1.0) devDependencies: '@cloudflare/vite-plugin': - specifier: ^1.10.0 - version: 1.10.0(rollup@4.44.1)(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250712.0)(wrangler@4.25.1) + specifier: ^1.10.1 + version: 1.10.1(rollup@4.44.1)(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250712.0)(wrangler@4.26.0) '@types/react': specifier: ^19.1.8 version: 19.1.8 @@ -1186,20 +1186,20 @@ packages: resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==} engines: {node: '>=18.0.0'} - '@cloudflare/unenv-preset@2.3.3': - resolution: {integrity: sha512-/M3MEcj3V2WHIRSW1eAQBPRJ6JnGQHc6JKMAPLkDb7pLs3m6X9ES/+K3ceGqxI6TKeF32AWAi7ls0AYzVxCP0A==} + '@cloudflare/unenv-preset@2.4.1': + resolution: {integrity: sha512-70mk5GPv+ozJ5XcIhFpq4ps7HvQYu+As7vwasUy9LcBadsTcWA2iFis/7aFJmQehfKerDwVOHfMYpgTTC+u24Q==} peerDependencies: unenv: 2.0.0-rc.17 - workerd: ^1.20250508.0 + workerd: ^1.20250521.0 peerDependenciesMeta: workerd: optional: true - '@cloudflare/vite-plugin@1.10.0': - resolution: {integrity: sha512-pdlz+GdNmL+8aVz8b8GXRHs33oI0DQpZvWNFyuMeN1MeHq/z+DOLGBU63YZC8S2hkdxC2rQQkNnRtsRCXfloWw==} + '@cloudflare/vite-plugin@1.10.1': + resolution: {integrity: sha512-XXaEe1RVFp2cKHTkaK3JPurdvii44n2c2veyWEZl7l6U1xSqOuXkOfs2flDgX+74w7bbknvd8wLCXCTHRxXuBQ==} peerDependencies: vite: ^6.1.0 || ^7.0.0 - wrangler: ^4.25.1 + wrangler: ^4.26.0 '@cloudflare/workerd-darwin-64@1.20250712.0': resolution: {integrity: sha512-M6S6a/LQ0Jb0R+g0XhlYi1adGifvYmxA5mD/i9TuZZgjs2bIm5ELuka/n3SCnI98ltvlx3HahRaHagAtOilsFg==} @@ -1637,10 +1637,6 @@ packages: resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.14.0': - resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.15.1': resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1649,16 +1645,16 @@ packages: resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.31.0': - resolution: {integrity: sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==} + '@eslint/js@9.32.0': + resolution: {integrity: sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.3.1': - resolution: {integrity: sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==} + '@eslint/plugin-kit@0.3.4': + resolution: {integrity: sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@hiogawa/utils@1.7.0': @@ -3065,8 +3061,8 @@ packages: eslint-import-resolver-node: optional: true - eslint-plugin-n@17.21.0: - resolution: {integrity: sha512-1+iZ8We4ZlwVMtb/DcHG3y5/bZOdazIpa/4TySo22MLKdwrLcfrX0hbadnCvykSQCCmkAnWmIP8jZVb2AAq29A==} + eslint-plugin-n@17.21.2: + resolution: {integrity: sha512-s3ai4Msfk5mbSvOgCkYo6k5+zP3W/OK+AvLmMmx++Ki4a5CPO7luIDwOnjUZm/t+oZYP0YADTxe+u4JqnT8+Dg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=8.23.0' @@ -3089,8 +3085,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.31.0: - resolution: {integrity: sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==} + eslint@9.32.0: + resolution: {integrity: sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -3288,6 +3284,9 @@ packages: resolution: {integrity: sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==} engines: {node: '>=18'} + globrex@0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -3773,8 +3772,8 @@ packages: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} - miniflare@4.20250712.1: - resolution: {integrity: sha512-46gB3FGPOsy+EpFGufjhr8agYycO/55d6l0y7hNJ13NcTVwrObMg/0HmI3pC5yQj0974IVXzBgUfDBMAX6thow==} + miniflare@4.20250712.2: + resolution: {integrity: sha512-cZ8WyQBwqfjYLjd61fDR4/j0nAVbjB3Wxbun/brL9S5FAi4RlTR0LyMTKsIVA0s+nL4Pg9VjVMki4M/Jk2cz+Q==} engines: {node: '>=18.0.0'} hasBin: true @@ -3887,8 +3886,8 @@ packages: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} - open@10.1.2: - resolution: {integrity: sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==} + open@10.2.0: + resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} engines: {node: '>=18'} optionator@0.9.3: @@ -3976,6 +3975,10 @@ packages: resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + pidtree@0.6.0: resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} engines: {node: '>=0.10'} @@ -4193,8 +4196,8 @@ packages: vue-tsc: optional: true - rolldown-vite@7.0.10: - resolution: {integrity: sha512-t3jMDID78NAJ2PWd0Q5RFrDpD1mFv20ouO/yDbqeHzG2Iyi2ZsjChLKClag1bUm591JJXBsoJIjP6FDkFi9qbw==} + rolldown-vite@7.0.11: + resolution: {integrity: sha512-5C0rxNUIQLnFNJenYieXU1A9RSAbnM7hGFZayIvR/wbU2tiCE/CQ6Z2dIk1msTozZlNrM0nSYeYLM/6VWuMYuA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -4664,8 +4667,8 @@ packages: engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true - vite-plugin-inspect@11.3.0: - resolution: {integrity: sha512-vmt7K1WVKQkuiwvsM6e5h3HDJ2pSWTnzoj+JP9Kvu3Sh2G+nFap1F1V7tqpyA4qFxM1GQ84ryffWFGQrwShERQ==} + vite-plugin-inspect@11.3.2: + resolution: {integrity: sha512-nzwvyFQg58XSMAmKVLr2uekAxNYvAbz1lyPmCAFVIBncCgN9S/HPM+2UM9Q9cvc4JEbC5ZBgwLAdaE2onmQuKg==} engines: {node: '>=14'} peerDependencies: '@nuxt/kit': '*' @@ -4714,6 +4717,46 @@ packages: yaml: optional: true + vite@7.0.6: + resolution: {integrity: sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + vitefu@1.1.1: resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==} peerDependencies: @@ -4784,8 +4827,8 @@ packages: engines: {node: '>=16'} hasBin: true - wrangler@4.25.1: - resolution: {integrity: sha512-4Tlg+jmqxCX3xFm+Nz1b4jHHY9iOu1EyJ17SSCCJ6MGp+FCGtXgr+CynT94+MP0v/qKQUkMKjoeJ5FNDunZ9cA==} + wrangler@4.26.0: + resolution: {integrity: sha512-EXuwyWlgYQZv6GJlyE0lVGk9hHqASssuECECT1XC5aIijTwNLQhsj/TOZ0hKSFlMbVr1E+OAdevAxd0kaF4ovA==} engines: {node: '>=18.0.0'} hasBin: true peerDependencies: @@ -4818,6 +4861,10 @@ packages: utf-8-validate: optional: true + wsl-utils@0.1.0: + resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} + engines: {node: '>=18'} + yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -5095,24 +5142,24 @@ snapshots: dependencies: mime: 3.0.0 - '@cloudflare/unenv-preset@2.3.3(unenv@2.0.0-rc.17)(workerd@1.20250712.0)': + '@cloudflare/unenv-preset@2.4.1(unenv@2.0.0-rc.17)(workerd@1.20250712.0)': dependencies: unenv: 2.0.0-rc.17 optionalDependencies: workerd: 1.20250712.0 - '@cloudflare/vite-plugin@1.10.0(rollup@4.44.1)(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250712.0)(wrangler@4.25.1)': + '@cloudflare/vite-plugin@1.10.1(rollup@4.44.1)(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250712.0)(wrangler@4.26.0)': dependencies: - '@cloudflare/unenv-preset': 2.3.3(unenv@2.0.0-rc.17)(workerd@1.20250712.0) + '@cloudflare/unenv-preset': 2.4.1(unenv@2.0.0-rc.17)(workerd@1.20250712.0) '@mjackson/node-fetch-server': 0.6.1 '@rollup/plugin-replace': 6.0.2(rollup@4.44.1) get-port: 7.1.0 - miniflare: 4.20250712.1 + miniflare: 4.20250712.2 picocolors: 1.1.1 tinyglobby: 0.2.14 unenv: 2.0.0-rc.17 - vite: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - wrangler: 4.25.1 + vite: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + wrangler: 4.26.0 ws: 8.18.0 transitivePeerDependencies: - bufferutil @@ -5405,9 +5452,9 @@ snapshots: '@esbuild/win32-x64@0.25.5': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@9.31.0(jiti@2.4.2))': + '@eslint-community/eslint-utils@4.7.0(eslint@9.32.0(jiti@2.4.2))': dependencies: - eslint: 9.31.0(jiti@2.4.2) + eslint: 9.32.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -5422,10 +5469,6 @@ snapshots: '@eslint/config-helpers@0.3.0': {} - '@eslint/core@0.14.0': - dependencies: - '@types/json-schema': 7.0.15 - '@eslint/core@0.15.1': dependencies: '@types/json-schema': 7.0.15 @@ -5444,13 +5487,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.31.0': {} + '@eslint/js@9.32.0': {} '@eslint/object-schema@2.1.6': {} - '@eslint/plugin-kit@0.3.1': + '@eslint/plugin-kit@0.3.4': dependencies: - '@eslint/core': 0.14.0 + '@eslint/core': 0.15.1 levn: 0.4.1 '@hiogawa/utils@1.7.0': {} @@ -5705,7 +5748,7 @@ snapshots: dependencies: quansync: 0.2.10 - '@react-router/dev@7.7.0(@types/node@22.16.5)(babel-plugin-macros@3.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(react-router@7.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tsx@4.20.3)(typescript@5.8.3)(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(wrangler@4.25.1)(yaml@2.7.1)': + '@react-router/dev@7.7.0(@types/node@22.16.5)(babel-plugin-macros@3.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(react-router@7.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tsx@4.20.3)(typescript@5.8.3)(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(wrangler@4.26.0)(yaml@2.7.1)': dependencies: '@babel/core': 7.28.0 '@babel/generator': 7.28.0 @@ -5734,11 +5777,11 @@ snapshots: set-cookie-parser: 2.7.1 tinyglobby: 0.2.14 valibot: 0.41.0(typescript@5.8.3) - vite: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vite-node: 3.2.4(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) optionalDependencies: typescript: 5.8.3 - wrangler: 4.25.1 + wrangler: 4.26.0 transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -6028,12 +6071,12 @@ snapshots: postcss-selector-parser: 6.0.10 tailwindcss: 4.1.11 - '@tailwindcss/vite@4.1.11(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': + '@tailwindcss/vite@4.1.11(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': dependencies: '@tailwindcss/node': 4.1.11 '@tailwindcss/oxide': 4.1.11 tailwindcss: 4.1.11 - vite: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) '@tsconfig/strictest@2.0.5': {} @@ -6150,15 +6193,15 @@ snapshots: '@types/unist@3.0.2': {} - '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3) '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/type-utils': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.38.0 - eslint: 9.31.0(jiti@2.4.2) + eslint: 9.32.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -6167,14 +6210,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@typescript-eslint/scope-manager': 8.38.0 '@typescript-eslint/types': 8.38.0 '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.38.0 debug: 4.4.1 - eslint: 9.31.0(jiti@2.4.2) + eslint: 9.32.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -6197,13 +6240,13 @@ snapshots: dependencies: typescript: 5.8.3 - '@typescript-eslint/type-utils@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@typescript-eslint/types': 8.38.0 '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3) debug: 4.4.1 - eslint: 9.31.0(jiti@2.4.2) + eslint: 9.32.0(jiti@2.4.2) ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: @@ -6227,13 +6270,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/utils@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.4.2)) '@typescript-eslint/scope-manager': 8.38.0 '@typescript-eslint/types': 8.38.0 '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) - eslint: 9.31.0(jiti@2.4.2) + eslint: 9.32.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -6772,9 +6815,9 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-compat-utils@0.5.1(eslint@9.31.0(jiti@2.4.2)): + eslint-compat-utils@0.5.1(eslint@9.32.0(jiti@2.4.2)): dependencies: - eslint: 9.31.0(jiti@2.4.2) + eslint: 9.32.0(jiti@2.4.2) semver: 7.7.2 eslint-import-context@0.1.9(unrs-resolver@1.9.2): @@ -6784,19 +6827,19 @@ snapshots: optionalDependencies: unrs-resolver: 1.9.2 - eslint-plugin-es-x@7.8.0(eslint@9.31.0(jiti@2.4.2)): + eslint-plugin-es-x@7.8.0(eslint@9.32.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 - eslint: 9.31.0(jiti@2.4.2) - eslint-compat-utils: 0.5.1(eslint@9.31.0(jiti@2.4.2)) + eslint: 9.32.0(jiti@2.4.2) + eslint-compat-utils: 0.5.1(eslint@9.32.0(jiti@2.4.2)) - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.32.0(jiti@2.4.2)): dependencies: '@typescript-eslint/types': 8.38.0 comment-parser: 1.4.1 debug: 4.4.1 - eslint: 9.31.0(jiti@2.4.2) + eslint: 9.32.0(jiti@2.4.2) eslint-import-context: 0.1.9(unrs-resolver@1.9.2) is-glob: 4.0.3 minimatch: 10.0.1 @@ -6804,31 +6847,31 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.9.2 optionalDependencies: - '@typescript-eslint/utils': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3) transitivePeerDependencies: - supports-color - eslint-plugin-n@17.21.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3): + eslint-plugin-n@17.21.2(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.4.2)) enhanced-resolve: 5.18.2 - eslint: 9.31.0(jiti@2.4.2) - eslint-plugin-es-x: 7.8.0(eslint@9.31.0(jiti@2.4.2)) + eslint: 9.32.0(jiti@2.4.2) + eslint-plugin-es-x: 7.8.0(eslint@9.32.0(jiti@2.4.2)) get-tsconfig: 4.10.1 globals: 15.12.0 + globrex: 0.1.2 ignore: 5.3.2 - minimatch: 9.0.5 semver: 7.7.2 ts-declaration-location: 1.0.7(typescript@5.8.3) transitivePeerDependencies: - typescript - eslint-plugin-regexp@2.9.0(eslint@9.31.0(jiti@2.4.2)): + eslint-plugin-regexp@2.9.0(eslint@9.32.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 comment-parser: 1.4.1 - eslint: 9.31.0(jiti@2.4.2) + eslint: 9.32.0(jiti@2.4.2) jsdoc-type-pratt-parser: 4.0.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 @@ -6843,16 +6886,16 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.31.0(jiti@2.4.2): + eslint@9.32.0(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.0 '@eslint/config-helpers': 0.3.0 '@eslint/core': 0.15.1 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.31.0 - '@eslint/plugin-kit': 0.3.1 + '@eslint/js': 9.32.0 + '@eslint/plugin-kit': 0.3.4 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.2 @@ -6981,6 +7024,10 @@ snapshots: optionalDependencies: picomatch: 4.0.2 + fdir@6.4.6(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + fetch-blob@3.2.0: dependencies: node-domexception: 1.0.0 @@ -7070,6 +7117,8 @@ snapshots: globals@16.3.0: {} + globrex@0.1.2: {} + graceful-fs@4.2.11: {} graphemer@1.4.0: {} @@ -7716,7 +7765,7 @@ snapshots: mimic-function@5.0.1: {} - miniflare@4.20250712.1: + miniflare@4.20250712.2: dependencies: '@cspotcode/source-map-support': 0.8.1 acorn: 8.14.0 @@ -7829,12 +7878,12 @@ snapshots: dependencies: mimic-function: 5.0.1 - open@10.1.2: + open@10.2.0: dependencies: default-browser: 5.2.1 define-lazy-prop: 3.0.0 is-inside-container: 1.0.0 - is-wsl: 3.1.0 + wsl-utils: 0.1.0 optionator@0.9.3: dependencies: @@ -7922,6 +7971,8 @@ snapshots: picomatch@4.0.2: {} + picomatch@4.0.3: {} + pidtree@0.6.0: {} playwright-chromium@1.54.1: @@ -8122,11 +8173,11 @@ snapshots: - oxc-resolver - supports-color - rolldown-vite@7.0.10(@types/node@22.16.5)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1): + rolldown-vite@7.0.11(@types/node@22.16.5)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1): dependencies: - fdir: 6.4.6(picomatch@4.0.2) + fdir: 6.4.6(picomatch@4.0.3) lightningcss: 1.30.1 - picomatch: 4.0.2 + picomatch: 4.0.3 postcss: 8.5.6 rolldown: 1.0.0-beta.29 tinyglobby: 0.2.14 @@ -8480,13 +8531,13 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3): + typescript-eslint@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3) '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.31.0(jiti@2.4.2) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.32.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -8628,15 +8679,15 @@ snapshots: unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 - vite-dev-rpc@1.1.0(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + vite-dev-rpc@1.1.0(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): dependencies: birpc: 2.5.0 - vite: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vite-hot-client: 2.1.0(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + vite: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite-hot-client: 2.1.0(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) - vite-hot-client@2.1.0(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + vite-hot-client@2.1.0(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): dependencies: - vite: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vite-node@3.2.4(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: @@ -8644,7 +8695,7 @@ snapshots: debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) transitivePeerDependencies: - '@types/node' - jiti @@ -8659,18 +8710,18 @@ snapshots: - tsx - yaml - vite-plugin-inspect@11.3.0(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + vite-plugin-inspect@11.3.2(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): dependencies: ansis: 4.1.0 debug: 4.4.1 error-stack-parser-es: 1.0.5 ohash: 2.0.11 - open: 10.1.2 + open: 10.2.0 perfect-debounce: 1.0.0 sirv: 3.0.1 unplugin-utils: 0.2.4 - vite: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vite-dev-rpc: 1.1.0(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + vite: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite-dev-rpc: 1.1.0(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) transitivePeerDependencies: - supports-color @@ -8690,9 +8741,25 @@ snapshots: tsx: 4.20.3 yaml: 2.7.1 - vitefu@1.1.1(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): + dependencies: + esbuild: 0.25.5 + fdir: 6.4.6(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.44.1 + tinyglobby: 0.2.14 optionalDependencies: - vite: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + '@types/node': 22.16.5 + fsevents: 2.3.3 + jiti: 2.4.2 + lightningcss: 1.30.1 + tsx: 4.20.3 + yaml: 2.7.1 + + vitefu@1.1.1(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + optionalDependencies: + vite: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: @@ -8765,13 +8832,13 @@ snapshots: '@cloudflare/workerd-linux-arm64': 1.20250712.0 '@cloudflare/workerd-windows-64': 1.20250712.0 - wrangler@4.25.1: + wrangler@4.26.0: dependencies: '@cloudflare/kv-asset-handler': 0.4.0 - '@cloudflare/unenv-preset': 2.3.3(unenv@2.0.0-rc.17)(workerd@1.20250712.0) + '@cloudflare/unenv-preset': 2.4.1(unenv@2.0.0-rc.17)(workerd@1.20250712.0) blake3-wasm: 2.1.5 esbuild: 0.25.4 - miniflare: 4.20250712.1 + miniflare: 4.20250712.2 path-to-regexp: 6.3.0 unenv: 2.0.0-rc.17 workerd: 1.20250712.0 @@ -8801,6 +8868,10 @@ snapshots: ws@8.18.0: {} + wsl-utils@0.1.0: + dependencies: + is-wsl: 3.1.0 + yallist@3.1.1: {} yallist@5.0.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 9b04071ae..d7ff73e83 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -6,7 +6,7 @@ packages: catalogs: rolldown-vite: - vite: npm:rolldown-vite@^7.0.10 + vite: npm:rolldown-vite@^7.0.11 overrides: '@types/estree': ^1.0.8 From aca6a5eee9c6bf6b5a8e7e36c877b907cec70dfe Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 28 Jul 2025 18:00:07 +0900 Subject: [PATCH 149/313] fix(deps): update swc monorepo (#594) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/plugin-react-swc/package.json | 2 +- .../playground/emotion-plugin/package.json | 2 +- .../playground/styled-components/package.json | 2 +- pnpm-lock.yaml | 110 +++++++++--------- 4 files changed, 58 insertions(+), 58 deletions(-) diff --git a/packages/plugin-react-swc/package.json b/packages/plugin-react-swc/package.json index 1cfaa5678..887859430 100644 --- a/packages/plugin-react-swc/package.json +++ b/packages/plugin-react-swc/package.json @@ -33,7 +33,7 @@ "homepage": "https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react-swc#readme", "dependencies": { "@rolldown/pluginutils": "1.0.0-beta.29", - "@swc/core": "^1.12.11" + "@swc/core": "^1.13.2" }, "peerDependencies": { "vite": "^4 || ^5 || ^6 || ^7" diff --git a/packages/plugin-react-swc/playground/emotion-plugin/package.json b/packages/plugin-react-swc/playground/emotion-plugin/package.json index ec0283f0c..4e779c991 100644 --- a/packages/plugin-react-swc/playground/emotion-plugin/package.json +++ b/packages/plugin-react-swc/playground/emotion-plugin/package.json @@ -17,6 +17,6 @@ "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react-swc": "../../dist", - "@swc/plugin-emotion": "^10.0.3" + "@swc/plugin-emotion": "^11.0.0" } } diff --git a/packages/plugin-react-swc/playground/styled-components/package.json b/packages/plugin-react-swc/playground/styled-components/package.json index bcf8ea098..73b291235 100644 --- a/packages/plugin-react-swc/playground/styled-components/package.json +++ b/packages/plugin-react-swc/playground/styled-components/package.json @@ -14,7 +14,7 @@ "styled-components": "^6.1.19" }, "devDependencies": { - "@swc/plugin-styled-components": "^8.0.3", + "@swc/plugin-styled-components": "^9.0.0", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@types/styled-components": "^5.1.34", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1b5466baa..0406d1e0d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -145,8 +145,8 @@ importers: specifier: 1.0.0-beta.29 version: 1.0.0-beta.29 '@swc/core': - specifier: ^1.12.11 - version: 1.12.11 + specifier: ^1.13.2 + version: 1.13.2 devDependencies: '@playwright/test': specifier: ^1.54.1 @@ -271,8 +271,8 @@ importers: version: 19.1.0(react@19.1.0) devDependencies: '@swc/plugin-emotion': - specifier: ^10.0.3 - version: 10.0.3 + specifier: ^11.0.0 + version: 11.0.0 '@types/react': specifier: ^19.1.8 version: 19.1.8 @@ -378,8 +378,8 @@ importers: version: 6.1.19(react-dom@19.1.0(react@19.1.0))(react@19.1.0) devDependencies: '@swc/plugin-styled-components': - specifier: ^8.0.3 - version: 8.0.3 + specifier: ^9.0.0 + version: 9.0.0 '@types/react': specifier: ^19.1.8 version: 19.1.8 @@ -2126,68 +2126,68 @@ packages: '@speed-highlight/core@1.2.7': resolution: {integrity: sha512-0dxmVj4gxg3Jg879kvFS/msl4s9F3T9UXC1InxgOf7t5NvcPD97u/WTA5vL/IxWHMn7qSxBozqrnnE2wvl1m8g==} - '@swc/core-darwin-arm64@1.12.11': - resolution: {integrity: sha512-J19Jj9Y5x/N0loExH7W0OI9OwwoVyxutDdkyq1o/kgXyBqmmzV7Y/Q9QekI2Fm/qc5mNeAdP7aj4boY4AY/JPw==} + '@swc/core-darwin-arm64@1.13.2': + resolution: {integrity: sha512-44p7ivuLSGFJ15Vly4ivLJjg3ARo4879LtEBAabcHhSZygpmkP8eyjyWxrH3OxkY1eRZSIJe8yRZPFw4kPXFPw==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.12.11': - resolution: {integrity: sha512-PTuUQrfStQ6cjW+uprGO2lpQHy84/l0v+GqRqq8s/jdK55rFRjMfCeyf6FAR0l6saO5oNOQl+zWR1aNpj8pMQw==} + '@swc/core-darwin-x64@1.13.2': + resolution: {integrity: sha512-Lb9EZi7X2XDAVmuUlBm2UvVAgSCbD3qKqDCxSI4jEOddzVOpNCnyZ/xEampdngUIyDDhhJLYU9duC+Mcsv5Y+A==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.12.11': - resolution: {integrity: sha512-poxBq152HsupOtnZilenvHmxZ9a8SRj4LtfxUnkMDNOGrZR9oxbQNwEzNKfi3RXEcXz+P8c0Rai1ubBazXv8oQ==} + '@swc/core-linux-arm-gnueabihf@1.13.2': + resolution: {integrity: sha512-9TDe/92ee1x57x+0OqL1huG4BeljVx0nWW4QOOxp8CCK67Rpc/HHl2wciJ0Kl9Dxf2NvpNtkPvqj9+BUmM9WVA==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.12.11': - resolution: {integrity: sha512-y1HNamR/D0Hc8xIE910ysyLe269UYiGaQPoLjQS0phzWFfWdMj9bHM++oydVXZ4RSWycO7KyJ3uvw4NilvyMKQ==} + '@swc/core-linux-arm64-gnu@1.13.2': + resolution: {integrity: sha512-KJUSl56DBk7AWMAIEcU83zl5mg3vlQYhLELhjwRFkGFMvghQvdqQ3zFOYa4TexKA7noBZa3C8fb24rI5sw9Exg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.12.11': - resolution: {integrity: sha512-LlBxPh/32pyQsu2emMEOFRm7poEFLsw12Y1mPY7FWZiZeptomKSOSHRzKDz9EolMiV4qhK1caP1lvW4vminYgQ==} + '@swc/core-linux-arm64-musl@1.13.2': + resolution: {integrity: sha512-teU27iG1oyWpNh9CzcGQ48ClDRt/RCem7mYO7ehd2FY102UeTws2+OzLESS1TS1tEZipq/5xwx3FzbVgiolCiQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.12.11': - resolution: {integrity: sha512-bOjiZB8O/1AzHkzjge1jqX62HGRIpOHqFUrGPfAln/NC6NR+Z2A78u3ixV7k5KesWZFhCV0YVGJL+qToL27myA==} + '@swc/core-linux-x64-gnu@1.13.2': + resolution: {integrity: sha512-dRPsyPyqpLD0HMRCRpYALIh4kdOir8pPg4AhNQZLehKowigRd30RcLXGNVZcc31Ua8CiPI4QSgjOIxK+EQe4LQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.12.11': - resolution: {integrity: sha512-4dzAtbT/m3/UjF045+33gLiHd8aSXJDoqof7gTtu4q0ZyAf7XJ3HHspz+/AvOJLVo4FHHdFcdXhmo/zi1nFn8A==} + '@swc/core-linux-x64-musl@1.13.2': + resolution: {integrity: sha512-CCxETW+KkYEQDqz1SYC15YIWYheqFC+PJVOW76Maa/8yu8Biw+HTAcblKf2isrlUtK8RvrQN94v3UXkC2NzCEw==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.12.11': - resolution: {integrity: sha512-h8HiwBZErKvCAmjW92JvQp0iOqm6bncU4ac5jxBGkRApabpUenNJcj3h2g5O6GL5K6T9/WhnXE5gyq/s1fhPQg==} + '@swc/core-win32-arm64-msvc@1.13.2': + resolution: {integrity: sha512-Wv/QTA6PjyRLlmKcN6AmSI4jwSMRl0VTLGs57PHTqYRwwfwd7y4s2fIPJVBNbAlXd795dOEP6d/bGSQSyhOX3A==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.12.11': - resolution: {integrity: sha512-1pwr325mXRNUhxTtXmx1IokV5SiRL+6iDvnt3FRXj+X5UvXXKtg2zeyftk+03u8v8v8WUr5I32hIypVJPTNxNg==} + '@swc/core-win32-ia32-msvc@1.13.2': + resolution: {integrity: sha512-PuCdtNynEkUNbUXX/wsyUC+t4mamIU5y00lT5vJcAvco3/r16Iaxl5UCzhXYaWZSNVZMzPp9qN8NlSL8M5pPxw==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.12.11': - resolution: {integrity: sha512-5gggWo690Gvs7XiPxAmb5tHwzB9RTVXUV7AWoGb6bmyUd1OXYaebQF0HAOtade5jIoNhfQMQJ7QReRgt/d2jAA==} + '@swc/core-win32-x64-msvc@1.13.2': + resolution: {integrity: sha512-qlmMkFZJus8cYuBURx1a3YAG2G7IW44i+FEYV5/32ylKkzGNAr9tDJSA53XNnNXkAB5EXSPsOz7bn5C3JlEtdQ==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.12.11': - resolution: {integrity: sha512-P3GM+0lqjFctcp5HhR9mOcvLSX3SptI9L1aux0Fuvgt8oH4f92rCUrkodAa0U2ktmdjcyIiG37xg2mb/dSCYSA==} + '@swc/core@1.13.2': + resolution: {integrity: sha512-YWqn+0IKXDhqVLKoac4v2tV6hJqB/wOh8/Br8zjqeqBkKa77Qb0Kw2i7LOFzjFNZbZaPH6AlMGlBwNrxaauaAg==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '>=0.5.17' @@ -2198,11 +2198,11 @@ packages: '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - '@swc/plugin-emotion@10.0.3': - resolution: {integrity: sha512-YJVWKwvcggWUBz952/TKHLlF9aMhgxjzliuLB3xuXbM/r/xAV/whVUiH8zvrTJZmzj15xApRWX4EkXQmGkRt3g==} + '@swc/plugin-emotion@11.0.0': + resolution: {integrity: sha512-PrEQw8mjoIbYLEqkI7Cz0RErnoLDcIMNXBKjBP0qJGNmd9RwNrvLG80rxZTqT7WgrQBCB+HLY7I2kHjRvIVh9w==} - '@swc/plugin-styled-components@8.0.3': - resolution: {integrity: sha512-9Do3BPUP7nQuE0yfw7Ycr904UMHcy7rMY1gxSDCNTw+WpSfRiVNs6ndyWbV9Yns9g+yaBkRiX5oq6/q1mQUfMg==} + '@swc/plugin-styled-components@9.0.0': + resolution: {integrity: sha512-B1GHBUnk1jFMyYcCpkWoN6AmB9EbMe13AZ34K2cLpO+0sKRR4v/oCuXvorUG8HQPCikaItq43nsHsVjZSF/BCQ==} '@swc/types@0.1.23': resolution: {integrity: sha512-u1iIVZV9Q0jxY+yM2vw/hZGDNudsN85bBpTqzAQ9rzkxW9D+e3aEM4Han+ow518gSewkXgjmEK0BD79ZcNVgPw==} @@ -5939,59 +5939,59 @@ snapshots: '@speed-highlight/core@1.2.7': {} - '@swc/core-darwin-arm64@1.12.11': + '@swc/core-darwin-arm64@1.13.2': optional: true - '@swc/core-darwin-x64@1.12.11': + '@swc/core-darwin-x64@1.13.2': optional: true - '@swc/core-linux-arm-gnueabihf@1.12.11': + '@swc/core-linux-arm-gnueabihf@1.13.2': optional: true - '@swc/core-linux-arm64-gnu@1.12.11': + '@swc/core-linux-arm64-gnu@1.13.2': optional: true - '@swc/core-linux-arm64-musl@1.12.11': + '@swc/core-linux-arm64-musl@1.13.2': optional: true - '@swc/core-linux-x64-gnu@1.12.11': + '@swc/core-linux-x64-gnu@1.13.2': optional: true - '@swc/core-linux-x64-musl@1.12.11': + '@swc/core-linux-x64-musl@1.13.2': optional: true - '@swc/core-win32-arm64-msvc@1.12.11': + '@swc/core-win32-arm64-msvc@1.13.2': optional: true - '@swc/core-win32-ia32-msvc@1.12.11': + '@swc/core-win32-ia32-msvc@1.13.2': optional: true - '@swc/core-win32-x64-msvc@1.12.11': + '@swc/core-win32-x64-msvc@1.13.2': optional: true - '@swc/core@1.12.11': + '@swc/core@1.13.2': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.23 optionalDependencies: - '@swc/core-darwin-arm64': 1.12.11 - '@swc/core-darwin-x64': 1.12.11 - '@swc/core-linux-arm-gnueabihf': 1.12.11 - '@swc/core-linux-arm64-gnu': 1.12.11 - '@swc/core-linux-arm64-musl': 1.12.11 - '@swc/core-linux-x64-gnu': 1.12.11 - '@swc/core-linux-x64-musl': 1.12.11 - '@swc/core-win32-arm64-msvc': 1.12.11 - '@swc/core-win32-ia32-msvc': 1.12.11 - '@swc/core-win32-x64-msvc': 1.12.11 + '@swc/core-darwin-arm64': 1.13.2 + '@swc/core-darwin-x64': 1.13.2 + '@swc/core-linux-arm-gnueabihf': 1.13.2 + '@swc/core-linux-arm64-gnu': 1.13.2 + '@swc/core-linux-arm64-musl': 1.13.2 + '@swc/core-linux-x64-gnu': 1.13.2 + '@swc/core-linux-x64-musl': 1.13.2 + '@swc/core-win32-arm64-msvc': 1.13.2 + '@swc/core-win32-ia32-msvc': 1.13.2 + '@swc/core-win32-x64-msvc': 1.13.2 '@swc/counter@0.1.3': {} - '@swc/plugin-emotion@10.0.3': + '@swc/plugin-emotion@11.0.0': dependencies: '@swc/counter': 0.1.3 - '@swc/plugin-styled-components@8.0.3': + '@swc/plugin-styled-components@9.0.0': dependencies: '@swc/counter': 0.1.3 From 9ffd86df3c0cfc2060669cac7cc0b86144158b1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0?= Date: Mon, 28 Jul 2025 19:09:34 +0900 Subject: [PATCH 150/313] fix(react): use development jsx transform for `NODE_ENV=development` build (#649) --- packages/plugin-react/CHANGELOG.md | 2 ++ packages/plugin-react/src/index.ts | 1 - packages/plugin-rsc/e2e/starter.test.ts | 5 ----- playground/tsconfig.json | 2 +- 4 files changed, 3 insertions(+), 7 deletions(-) diff --git a/packages/plugin-react/CHANGELOG.md b/packages/plugin-react/CHANGELOG.md index d004d75d3..a582cea08 100644 --- a/packages/plugin-react/CHANGELOG.md +++ b/packages/plugin-react/CHANGELOG.md @@ -8,6 +8,8 @@ When used with rolldown-vite, this plugin now uses Oxc for react refresh transfo Since this behavior is what `@vitejs/plugin-react-oxc` did, `@vitejs/plugin-react-oxc` is now deprecated and the `disableOxcRecommendation` option is removed. +Also, while `@vitejs/plugin-react-oxc` used the production JSX transform even for `NODE_ENV=development` build, `@vitejs/plugin-react` uses the development JSX transform for `NODE_ENV=development` build. + ### Allow processing files in `node_modules` The default value of `exclude` options is now `[/\/node_modules\//]` to allow processing files in `node_modules` directory. It was previously `[]` and files in `node_modules` was always excluded regardless of the value of `exclude` option. diff --git a/packages/plugin-react/src/index.ts b/packages/plugin-react/src/index.ts index 648da2cf8..7ee6535ea 100644 --- a/packages/plugin-react/src/index.ts +++ b/packages/plugin-react/src/index.ts @@ -155,7 +155,6 @@ export default function viteReact(opts: Options = {}): Plugin[] { runtime: 'automatic', importSource: jsxImportSource, refresh: command === 'serve', - development: command === 'serve', }, jsxRefreshInclude: include, jsxRefreshExclude: exclude, diff --git a/packages/plugin-rsc/e2e/starter.test.ts b/packages/plugin-rsc/e2e/starter.test.ts index 2d49059a3..a66db75cf 100644 --- a/packages/plugin-rsc/e2e/starter.test.ts +++ b/packages/plugin-rsc/e2e/starter.test.ts @@ -2,7 +2,6 @@ import { expect, test } from '@playwright/test' import { useFixture } from './fixture' import { defineStarterTest } from './starter' import { waitForHydration } from './helper' -import * as vite from 'vite' test.describe('dev-default', () => { const f = useFixture({ root: 'examples/starter', mode: 'dev' }) @@ -25,8 +24,6 @@ test.describe('build-cloudflare', () => { }) test.describe('dev-production', () => { - test.skip('rolldownVersion' in vite) - const f = useFixture({ root: 'examples/starter', mode: 'dev', @@ -45,8 +42,6 @@ test.describe('dev-production', () => { }) test.describe('build-development', () => { - test.skip('rolldownVersion' in vite) - const f = useFixture({ root: 'examples/starter', mode: 'build', diff --git a/playground/tsconfig.json b/playground/tsconfig.json index d6e393de0..e7d00756b 100644 --- a/playground/tsconfig.json +++ b/playground/tsconfig.json @@ -1,5 +1,5 @@ { - "include": ["*.ts", "**/__tests__/*.ts", "**/vite.config.ts"], + "include": ["*.ts", "**/__tests__/**/*", "**/vite.config.ts"], "exclude": ["**/dist/**"], "compilerOptions": { "target": "ES2023", From 7d3a57aa97961aea9998105ba0512f9beae1bbff Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Mon, 28 Jul 2025 19:14:14 +0900 Subject: [PATCH 151/313] release: plugin-react@5.0.0-beta.0 --- packages/plugin-react/CHANGELOG.md | 2 ++ packages/plugin-react/package.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/plugin-react/CHANGELOG.md b/packages/plugin-react/CHANGELOG.md index a582cea08..32dcffca7 100644 --- a/packages/plugin-react/CHANGELOG.md +++ b/packages/plugin-react/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +## 5.0.0-beta.0 (2025-07-28) + ### Use Oxc for react refresh transform in rolldown-vite When used with rolldown-vite, this plugin now uses Oxc for react refresh transform. diff --git a/packages/plugin-react/package.json b/packages/plugin-react/package.json index 1ce0d7ca2..9ad551a41 100644 --- a/packages/plugin-react/package.json +++ b/packages/plugin-react/package.json @@ -1,6 +1,6 @@ { "name": "@vitejs/plugin-react", - "version": "4.7.0", + "version": "5.0.0-beta.0", "license": "MIT", "author": "Evan You", "description": "The default Vite plugin for React projects", From d661a301f0cc53f6bcc603c65b43b87d2d097635 Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Mon, 28 Jul 2025 19:15:12 +0900 Subject: [PATCH 152/313] release: plugin-react-swc@4.0.0-beta.0 --- packages/plugin-react-swc/CHANGELOG.md | 2 ++ packages/plugin-react-swc/package.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/plugin-react-swc/CHANGELOG.md b/packages/plugin-react-swc/CHANGELOG.md index 629e79cfd..ac8f7eda0 100644 --- a/packages/plugin-react-swc/CHANGELOG.md +++ b/packages/plugin-react-swc/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +## 4.0.0-beta.0 (2025-07-28) + ### Require Node 20.19+, 22.12+ This plugin now requires Node 20.19+ or 22.12+. diff --git a/packages/plugin-react-swc/package.json b/packages/plugin-react-swc/package.json index 887859430..1e564f97a 100644 --- a/packages/plugin-react-swc/package.json +++ b/packages/plugin-react-swc/package.json @@ -1,6 +1,6 @@ { "name": "@vitejs/plugin-react-swc", - "version": "3.11.0", + "version": "4.0.0-beta.0", "license": "MIT", "author": "Arnaud Barré (https://github.com/ArnaudBarre)", "description": "Speed up your Vite dev server with SWC", From 533e8cdd50f6ecfe2018d0ec2a05d477b7e245e1 Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Mon, 28 Jul 2025 19:16:16 +0900 Subject: [PATCH 153/313] release: plugin-react-oxc@0.4.0-beta.0 --- packages/plugin-react-oxc/CHANGELOG.md | 2 ++ packages/plugin-react-oxc/package.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/plugin-react-oxc/CHANGELOG.md b/packages/plugin-react-oxc/CHANGELOG.md index 4b94ef788..72a9dde79 100644 --- a/packages/plugin-react-oxc/CHANGELOG.md +++ b/packages/plugin-react-oxc/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +## 0.4.0-beta.0 (2025-07-28) + ### Deprecate this plugin The changes of this plugin is now included in `@vitejs/plugin-react`. Please use `@vitejs/plugin-react` instead. diff --git a/packages/plugin-react-oxc/package.json b/packages/plugin-react-oxc/package.json index 34f55a1bc..1fd95d4fd 100644 --- a/packages/plugin-react-oxc/package.json +++ b/packages/plugin-react-oxc/package.json @@ -1,6 +1,6 @@ { "name": "@vitejs/plugin-react-oxc", - "version": "0.3.0", + "version": "0.4.0-beta.0", "license": "MIT", "author": "Evan You", "contributors": [ From ac0cac7465cc94e91e8ac40269f36e91599b8162 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 30 Jul 2025 09:18:50 +0900 Subject: [PATCH 154/313] test(rsc): split more independent tests (#652) --- packages/plugin-rsc/e2e/cloudflare.test.ts | 13 +++++++++++++ packages/plugin-rsc/e2e/starter.test.ts | 10 ---------- 2 files changed, 13 insertions(+), 10 deletions(-) create mode 100644 packages/plugin-rsc/e2e/cloudflare.test.ts diff --git a/packages/plugin-rsc/e2e/cloudflare.test.ts b/packages/plugin-rsc/e2e/cloudflare.test.ts new file mode 100644 index 000000000..0f26214fe --- /dev/null +++ b/packages/plugin-rsc/e2e/cloudflare.test.ts @@ -0,0 +1,13 @@ +import { test } from '@playwright/test' +import { useFixture } from './fixture' +import { defineStarterTest } from './starter' + +test.describe('dev-cloudflare', () => { + const f = useFixture({ root: 'examples/starter-cf-single', mode: 'dev' }) + defineStarterTest(f) +}) + +test.describe('build-cloudflare', () => { + const f = useFixture({ root: 'examples/starter-cf-single', mode: 'build' }) + defineStarterTest(f) +}) diff --git a/packages/plugin-rsc/e2e/starter.test.ts b/packages/plugin-rsc/e2e/starter.test.ts index a66db75cf..4762dbc22 100644 --- a/packages/plugin-rsc/e2e/starter.test.ts +++ b/packages/plugin-rsc/e2e/starter.test.ts @@ -13,16 +13,6 @@ test.describe('build-default', () => { defineStarterTest(f) }) -test.describe('dev-cloudflare', () => { - const f = useFixture({ root: 'examples/starter-cf-single', mode: 'dev' }) - defineStarterTest(f) -}) - -test.describe('build-cloudflare', () => { - const f = useFixture({ root: 'examples/starter-cf-single', mode: 'build' }) - defineStarterTest(f) -}) - test.describe('dev-production', () => { const f = useFixture({ root: 'examples/starter', From 83a57414169684bc705a5f6ca13cf097225117d8 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 30 Jul 2025 11:14:42 +0900 Subject: [PATCH 155/313] feat(rsc): add `useBuildAppHook` option to switch `plugin.buildApp` or `builder.buildApp` (#653) --- packages/plugin-rsc/e2e/build-app.test.ts | 110 ++++++++++++++++++++++ packages/plugin-rsc/src/plugin.ts | 103 +++++++++++--------- 2 files changed, 166 insertions(+), 47 deletions(-) create mode 100644 packages/plugin-rsc/e2e/build-app.test.ts diff --git a/packages/plugin-rsc/e2e/build-app.test.ts b/packages/plugin-rsc/e2e/build-app.test.ts new file mode 100644 index 000000000..d4b831cf8 --- /dev/null +++ b/packages/plugin-rsc/e2e/build-app.test.ts @@ -0,0 +1,110 @@ +import { test, expect } from '@playwright/test' +import { setupInlineFixture, useFixture } from './fixture' +import { x } from 'tinyexec' +import { waitForHydration } from './helper' + +test.describe('buildApp hook', () => { + const root = 'examples/e2e/temp/buildApp' + test.beforeAll(async () => { + await setupInlineFixture({ + src: 'examples/starter', + dest: root, + files: { + 'vite.config.base.ts': { cp: 'vite.config.ts' }, + 'vite.config.ts': /* js */ ` + import rsc from '@vitejs/plugin-rsc' + import react from '@vitejs/plugin-react' + import { defineConfig, mergeConfig } from 'vite' + import baseConfig from './vite.config.base.ts' + + delete baseConfig.plugins + + const overrideConfig = defineConfig({ + plugins: [ + { + name: 'buildApp-prafter', + buildApp: async () => { + console.log('++++ buildApp:before ++++') + }, + }, + rsc({ + useBuildAppHook: process.env.TEST_USE_BUILD_APP_HOOK === 'true', + }), + { + name: 'buildApp-after', + buildApp: async () => { + console.log('++++ buildApp:after ++++') + }, + }, + react(), + ], + }) + + export default mergeConfig(baseConfig, overrideConfig) + `, + }, + }) + }) + + function verifyMatchOrder(s: string, matches: string[]) { + const found = matches + .map((match) => ({ match, index: s.indexOf(match) })) + .filter((item) => item.index !== -1) + .sort((a, b) => a.index - b.index) + .map((item) => item.match) + expect(found).toEqual(matches) + } + + test('useBuildAppHook: true', async () => { + const result = await x('pnpm', ['build'], { + nodeOptions: { + cwd: root, + env: { + TEST_USE_BUILD_APP_HOOK: 'true', + }, + }, + throwOnError: true, + }) + verifyMatchOrder(result.stdout, [ + '++++ buildApp:before ++++', + 'building for production...', + '++++ buildApp:after ++++', + ]) + expect(result.exitCode).toBe(0) + }) + + test('useBuildAppHook: false', async () => { + const result = await x('pnpm', ['build'], { + nodeOptions: { + cwd: root, + env: { + TEST_USE_BUILD_APP_HOOK: 'false', + }, + }, + throwOnError: true, + }) + verifyMatchOrder(result.stdout, [ + '++++ buildApp:before ++++', + '++++ buildApp:after ++++', + 'building for production...', + ]) + expect(result.exitCode).toBe(0) + }) + + test.describe('build', () => { + const f = useFixture({ + root, + mode: 'build', + cliOptions: { + env: { + TEST_USE_BUILD_APP_HOOK: 'true', + }, + }, + }) + + test('basic', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + }) + }) +}) diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index df5b70f9b..a8b946ea2 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -8,6 +8,7 @@ import { createRequestListener } from '@mjackson/node-fetch-server' import * as esModuleLexer from 'es-module-lexer' import MagicString from 'magic-string' import { + type BuilderOptions, type DevEnvironment, type EnvironmentModuleNode, type Plugin, @@ -123,11 +124,64 @@ export type RscPluginOptions = { * @default true */ validateImports?: boolean + + /** + * use `Plugin.buildApp` hook (introduced on Vite 7) instead of `builder.buildApp` configuration + * for better composability with other plugins. + * @default false + */ + useBuildAppHook?: boolean } export default function vitePluginRsc( rscPluginOptions: RscPluginOptions = {}, ): Plugin[] { + const buildApp: NonNullable = async (builder) => { + // no-ssr case + // rsc -> client -> rsc -> client + if (!builder.environments.ssr?.config.build.rollupOptions.input) { + isScanBuild = true + builder.environments.rsc!.config.build.write = false + builder.environments.client!.config.build.write = false + await builder.build(builder.environments.rsc!) + await builder.build(builder.environments.client!) + isScanBuild = false + builder.environments.rsc!.config.build.write = true + builder.environments.client!.config.build.write = true + await builder.build(builder.environments.rsc!) + // sort for stable build + clientReferenceMetaMap = sortObject(clientReferenceMetaMap) + serverResourcesMetaMap = sortObject(serverResourcesMetaMap) + await builder.build(builder.environments.client!) + + const assetsManifestCode = `export default ${serializeValueWithRuntime( + buildAssetsManifest, + )}` + const manifestPath = path.join( + builder.environments!.rsc!.config.build!.outDir!, + BUILD_ASSETS_MANIFEST_NAME, + ) + fs.writeFileSync(manifestPath, assetsManifestCode) + return + } + + // rsc -> ssr -> rsc -> client -> ssr + isScanBuild = true + builder.environments.rsc!.config.build.write = false + builder.environments.ssr!.config.build.write = false + await builder.build(builder.environments.rsc!) + await builder.build(builder.environments.ssr!) + isScanBuild = false + builder.environments.rsc!.config.build.write = true + builder.environments.ssr!.config.build.write = true + await builder.build(builder.environments.rsc!) + // sort for stable build + clientReferenceMetaMap = sortObject(clientReferenceMetaMap) + serverResourcesMetaMap = sortObject(serverResourcesMetaMap) + await builder.build(builder.environments.client!) + await builder.build(builder.environments.ssr!) + } + return [ { name: 'rsc', @@ -233,58 +287,14 @@ export default function vitePluginRsc( }, }, }, - // TODO: use buildApp hook on v7? builder: { sharedPlugins: true, sharedConfigBuild: true, - async buildApp(builder) { - // no-ssr case - // rsc -> client -> rsc -> client - if (!builder.environments.ssr?.config.build.rollupOptions.input) { - isScanBuild = true - builder.environments.rsc!.config.build.write = false - builder.environments.client!.config.build.write = false - await builder.build(builder.environments.rsc!) - await builder.build(builder.environments.client!) - isScanBuild = false - builder.environments.rsc!.config.build.write = true - builder.environments.client!.config.build.write = true - await builder.build(builder.environments.rsc!) - // sort for stable build - clientReferenceMetaMap = sortObject(clientReferenceMetaMap) - serverResourcesMetaMap = sortObject(serverResourcesMetaMap) - await builder.build(builder.environments.client!) - - const assetsManifestCode = `export default ${serializeValueWithRuntime( - buildAssetsManifest, - )}` - const manifestPath = path.join( - builder.environments!.rsc!.config.build!.outDir!, - BUILD_ASSETS_MANIFEST_NAME, - ) - fs.writeFileSync(manifestPath, assetsManifestCode) - return - } - - // rsc -> ssr -> rsc -> client -> ssr - isScanBuild = true - builder.environments.rsc!.config.build.write = false - builder.environments.ssr!.config.build.write = false - await builder.build(builder.environments.rsc!) - await builder.build(builder.environments.ssr!) - isScanBuild = false - builder.environments.rsc!.config.build.write = true - builder.environments.ssr!.config.build.write = true - await builder.build(builder.environments.rsc!) - // sort for stable build - clientReferenceMetaMap = sortObject(clientReferenceMetaMap) - serverResourcesMetaMap = sortObject(serverResourcesMetaMap) - await builder.build(builder.environments.client!) - await builder.build(builder.environments.ssr!) - }, + buildApp: rscPluginOptions.useBuildAppHook ? undefined : buildApp, }, } }, + buildApp: rscPluginOptions.useBuildAppHook ? buildApp : undefined, configResolved(config_) { config = config_ }, @@ -841,7 +851,6 @@ globalThis.AsyncLocalStorage = __viteRscAyncHooks.AsyncLocalStorage; detectNonOptimizedCjsPlugin(), ] } - function detectNonOptimizedCjsPlugin(): Plugin { return { name: 'rsc:detect-non-optimized-cjs', From c602225271d4acf462ba00f8d6d8a2e42492c5cd Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 30 Jul 2025 14:50:55 +0900 Subject: [PATCH 156/313] test(rsc): port transform tests from waku (#655) Co-authored-by: Claude --- .../plugin-rsc/src/transforms/waku.test.ts | 549 ++++++++++++++++++ 1 file changed, 549 insertions(+) create mode 100644 packages/plugin-rsc/src/transforms/waku.test.ts diff --git a/packages/plugin-rsc/src/transforms/waku.test.ts b/packages/plugin-rsc/src/transforms/waku.test.ts new file mode 100644 index 000000000..a89d6bbda --- /dev/null +++ b/packages/plugin-rsc/src/transforms/waku.test.ts @@ -0,0 +1,549 @@ +import { parseAstAsync } from 'vite' +import { describe, expect, test } from 'vitest' +import { transformDirectiveProxyExport } from './proxy-export' +import { transformServerActionServer } from './server-action' +import { debugSourceMap } from './test-utils' + +// copied from +// https://github.com/wakujs/waku/blob/55cc5fb3c74b1cd9fa5dac5b20b8626c4d5043ff/packages/waku/tests/vite-plugin-rsc-transform-internals.test.ts + +async function testDirectiveTransform(input: string, directive: string) { + const ast = await parseAstAsync(input) + const result = transformDirectiveProxyExport(ast, { + directive, + code: input, + runtime: (name) => + `$runtime(${JSON.stringify('#' + name)}, ${JSON.stringify(name)})`, + keep: directive === 'use client', + }) + + if (!result || !result.output.hasChanged()) { + return + } + + if (process.env['DEBUG_SOURCEMAP']) { + await debugSourceMap(result.output) + } + + return result.output.toString() +} + +describe('internal transform function for server environment', () => { + async function testTransform(input: string) { + const ast = await parseAstAsync(input) + const result = transformServerActionServer(input, ast, { + runtime: (value, name) => + `$runtime(${value}, "", ${JSON.stringify(name)})`, + }) + + if (!('output' in result) || !result.output.hasChanged()) { + return + } + + if (process.env['DEBUG_SOURCEMAP']) { + await debugSourceMap(result.output) + } + + return result.output.toString() + } + + test('no transformation', async () => { + const input = ` +export default function App() { + return "Hello World"; +} +` + expect(await testTransform(input)).toBeUndefined() + }) + + test('top-level use client', async () => { + const input = ` +'use client'; + +import { Component, createContext, useContext, memo } from 'react'; +import { atom } from 'jotai/vanilla'; +import { unstable_allowServer as allowServer } from 'waku/client'; + +const initialCount = 1; +const TWO = 2; +function double (x) { + return x * TWO; +} +export const countAtom = allowServer(atom(double(initialCount))); + +export const Empty = () => null; + +function Private() { + return "Secret"; +} +const SecretComponent = () => "Secret"; +const SecretFunction = (n) => 'Secret' + n; + +export function Greet({ name }) { + return "Hello " + name; +} + +export class MyComponent extends Component { + render() { + return "Class Component"; + } +} + +const MyContext = createContext(); + +export const useMyContext = () => useContext(MyContext); + +const MyProvider = memo(MyContext); + +export const NAME = 'World'; + +export default function App() { + return "Hello World"; +} +` + expect(await testDirectiveTransform(input, 'use client')) + .toMatchInlineSnapshot(` + " + 'use client'; + + import { Component, createContext, useContext, memo } from 'react'; + import { atom } from 'jotai/vanilla'; + import { unstable_allowServer as allowServer } from 'waku/client'; + + const initialCount = 1; + const TWO = 2; + function double (x) { + return x * TWO; + } + export const countAtom = /* #__PURE__ */ $runtime("#countAtom", "countAtom"); + + export const Empty = /* #__PURE__ */ $runtime("#Empty", "Empty"); + + function Private() { + return "Secret"; + } + const SecretComponent = () => "Secret"; + const SecretFunction = (n) => 'Secret' + n; + + export const Greet = /* #__PURE__ */ $runtime("#Greet", "Greet"); + + + export const MyComponent = /* #__PURE__ */ $runtime("#MyComponent", "MyComponent"); + + + const MyContext = createContext(); + + export const useMyContext = /* #__PURE__ */ $runtime("#useMyContext", "useMyContext"); + + const MyProvider = memo(MyContext); + + export const NAME = /* #__PURE__ */ $runtime("#NAME", "NAME"); + + export default /* #__PURE__ */ $runtime("#default", "default"); + + " + `) + }) + + test('top-level use server', async () => { + const input = ` +'use server'; + +const privateFunction = () => 'Secret'; + +export const log = async (mesg) => { + console.log(mesg); +}; + +export async function greet(name) { + return 'Hello ' + name; +} + +export default async function() { + return Date.now(); +} +` + expect(await testTransform(input)).toMatchInlineSnapshot(` + " + 'use server'; + + const privateFunction = () => 'Secret'; + + let log = async (mesg) => { + console.log(mesg); + }; + + async function greet(name) { + return 'Hello ' + name; + } + + const $$default = async function() { + return Date.now(); + } + log = /* #__PURE__ */ $runtime(log, "", "log"); + export { log }; + greet = /* #__PURE__ */ $runtime(greet, "", "greet"); + export { greet }; + ; + const $$wrap_$$default = /* #__PURE__ */ $runtime($$default, "", "default"); + export { $$wrap_$$default as default }; + " + `) + }) + + test('server action in object', async () => { + const input = ` +const AI = { + actions: { + foo: async () => { + 'use server'; + return 0; + }, + }, +}; + +export function ServerProvider() { + return AI; +} +` + expect(await testTransform(input)).toMatchInlineSnapshot(` + " + const AI = { + actions: { + foo: /* #__PURE__ */ $runtime($$hoist_0_anonymous_server_function, "", "$$hoist_0_anonymous_server_function"), + }, + }; + + export function ServerProvider() { + return AI; + } + + ;export async function $$hoist_0_anonymous_server_function() { + 'use server'; + return 0; + }; + /* #__PURE__ */ Object.defineProperty($$hoist_0_anonymous_server_function, "name", { value: "anonymous_server_function" }); + " + `) + }) + + test('top-level use server and inline use server', async () => { + const input = ` +'use server'; + +async function innerAction(action, ...args) { + 'use server'; + return await action(...args); +} + +function wrapAction(action) { + return innerAction.bind(null, action); +} + +export async function exportedAction() { + 'use server'; + return null; +} + +export default async () => null; +` + expect(await testTransform(input)).toMatchInlineSnapshot(` + " + 'use server'; + + async function innerAction(action, ...args) { + 'use server'; + return await action(...args); + } + + function wrapAction(action) { + return innerAction.bind(null, action); + } + + async function exportedAction() { + 'use server'; + return null; + } + + const $$default = async () => null; + exportedAction = /* #__PURE__ */ $runtime(exportedAction, "", "exportedAction"); + export { exportedAction }; + ; + const $$wrap_$$default = /* #__PURE__ */ $runtime($$default, "", "default"); + export { $$wrap_$$default as default }; + " + `) + }) + + test('inline use server (function declaration)', async () => { + const input = ` +export default function App() { + const a = 'test'; + async function log(mesg) { + 'use server'; + console.log(mesg, a); + } + return log; +} +` + expect(await testTransform(input)).toMatchInlineSnapshot(` + " + export default function App() { + const a = 'test'; + const log = /* #__PURE__ */ $runtime($$hoist_0_log, "", "$$hoist_0_log").bind(null, a); + return log; + } + + ;export async function $$hoist_0_log(a, mesg) { + 'use server'; + console.log(mesg, a); + }; + /* #__PURE__ */ Object.defineProperty($$hoist_0_log, "name", { value: "log" }); + " + `) + }) + + test('inline use server (const function expression)', async () => { + const input = ` +export default function App() { + const rand = Math.random(); + const log = async function (mesg) { + 'use server'; + console.log(mesg, rand); + }; + return log; +} +` + expect(await testTransform(input)).toMatchInlineSnapshot(` + " + export default function App() { + const rand = Math.random(); + const log = /* #__PURE__ */ $runtime($$hoist_0_log, "", "$$hoist_0_log").bind(null, rand); + return log; + } + + ;export async function $$hoist_0_log(rand, mesg) { + 'use server'; + console.log(mesg, rand); + }; + /* #__PURE__ */ Object.defineProperty($$hoist_0_log, "name", { value: "log" }); + " + `) + }) + + test('inline use server (const arrow function)', async () => { + const input = ` +const now = Date.now(); +export default function App() { + const log = async (mesg) => { + 'use server'; + console.log(mesg, now); + }; + return log; +} +` + expect(await testTransform(input)).toMatchInlineSnapshot(` + " + const now = Date.now(); + export default function App() { + const log = /* #__PURE__ */ $runtime($$hoist_0_log, "", "$$hoist_0_log"); + return log; + } + + ;export async function $$hoist_0_log(mesg) { + 'use server'; + console.log(mesg, now); + }; + /* #__PURE__ */ Object.defineProperty($$hoist_0_log, "name", { value: "log" }); + " + `) + }) + + test('inline use server (anonymous arrow function)', async () => { + const input = ` +const now = Date.now(); +export default function App() { + return (mesg) => { + 'use server'; + console.log(mesg, now); + }; +} +` + expect(await testTransform(input)).toMatchInlineSnapshot(` + " + const now = Date.now(); + export default function App() { + return /* #__PURE__ */ $runtime($$hoist_0_anonymous_server_function, "", "$$hoist_0_anonymous_server_function"); + } + + ;export function $$hoist_0_anonymous_server_function(mesg) { + 'use server'; + console.log(mesg, now); + }; + /* #__PURE__ */ Object.defineProperty($$hoist_0_anonymous_server_function, "name", { value: "anonymous_server_function" }); + " + `) + }) + + test('inline use server (various patterns)', async () => { + const input = ` +const actions = { + log: async (mesg) => { + 'use server'; + console.log(mesg); + }, +}; + +async function log2 (mesg) { + 'use server'; + console.log(mesg); +} + +const log3 = async function(mesg) { + 'use server'; + console.log(mesg); +} + +const log4 = async (mesg) => { + 'use server'; + console.log(mesg); +}; + +const defaultFn = async function(mesg) { + 'use server'; + console.log(mesg); +} + +export default defaultFn; +` + expect(await testTransform(input)).toMatchInlineSnapshot(` + " + const actions = { + log: /* #__PURE__ */ $runtime($$hoist_0_anonymous_server_function, "", "$$hoist_0_anonymous_server_function"), + }; + + const log2 = /* #__PURE__ */ $runtime($$hoist_1_log2, "", "$$hoist_1_log2"); + + const log3 = /* #__PURE__ */ $runtime($$hoist_2_log3, "", "$$hoist_2_log3") + + const log4 = /* #__PURE__ */ $runtime($$hoist_3_log4, "", "$$hoist_3_log4"); + + const defaultFn = /* #__PURE__ */ $runtime($$hoist_4_defaultFn, "", "$$hoist_4_defaultFn") + + export default defaultFn; + + ;export async function $$hoist_0_anonymous_server_function(mesg) { + 'use server'; + console.log(mesg); + }; + /* #__PURE__ */ Object.defineProperty($$hoist_0_anonymous_server_function, "name", { value: "anonymous_server_function" }); + + ;export async function $$hoist_1_log2(mesg) { + 'use server'; + console.log(mesg); + }; + /* #__PURE__ */ Object.defineProperty($$hoist_1_log2, "name", { value: "log2" }); + + ;export async function $$hoist_2_log3(mesg) { + 'use server'; + console.log(mesg); + }; + /* #__PURE__ */ Object.defineProperty($$hoist_2_log3, "name", { value: "log3" }); + + ;export async function $$hoist_3_log4(mesg) { + 'use server'; + console.log(mesg); + }; + /* #__PURE__ */ Object.defineProperty($$hoist_3_log4, "name", { value: "log4" }); + + ;export async function $$hoist_4_defaultFn(mesg) { + 'use server'; + console.log(mesg); + }; + /* #__PURE__ */ Object.defineProperty($$hoist_4_defaultFn, "name", { value: "defaultFn" }); + " + `) + }) +}) + +describe('internal transform function for client environment', () => { + test('no transformation', async () => { + const input = ` +export const log = (mesg) => { + console.log(mesg); +}; +` + expect(await testDirectiveTransform(input, 'use server')).toBeUndefined() + }) + + test('top-level use server', async () => { + const input = ` +'use server'; + +const privateFunction = () => 'Secret'; + +export const log1 = async function(mesg) { + console.log(mesg); +} + +export const log2 = async (mesg) => { + console.log(mesg); +}; + +export async function log3(mesg) { + console.log(mesg); +} + +export default async function log4(mesg) { + console.log(mesg); +} +` + expect(await testDirectiveTransform(input, 'use server')) + .toMatchInlineSnapshot(` + " + + + + + export const log1 = /* #__PURE__ */ $runtime("#log1", "log1"); + + + export const log2 = /* #__PURE__ */ $runtime("#log2", "log2"); + + + export const log3 = /* #__PURE__ */ $runtime("#log3", "log3"); + + + export default /* #__PURE__ */ $runtime("#default", "default"); + + " + `) + }) + + test('top-level use server for SSR', async () => { + const input = ` +'use server'; + +import { getEnv } from 'waku'; + +const privateFunction = () => getEnv('SECRET'); + +export async function log(mesg) { + console.log(mesg); +} +` + expect(await testDirectiveTransform(input, 'use server')) + .toMatchInlineSnapshot(` + " + + + + + + + export const log = /* #__PURE__ */ $runtime("#log", "log"); + + " + `) + }) +}) 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 157/313] 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 c1383f870137c0f152d7687250e8095635a1177c Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Fri, 1 Aug 2025 11:34:20 +0900 Subject: [PATCH 158/313] fix(rsc): avoid unnecessary server hmr due to tailwind module deps (#658) --- packages/plugin-rsc/e2e/basic.test.ts | 18 ++++++++++++++++++ packages/plugin-rsc/e2e/fixture.ts | 3 +++ .../basic/src/framework/entry.browser.tsx | 3 ++- .../basic/src/routes/tailwind/unused.tsx | 1 + .../plugin-rsc/examples/basic/src/styles.css | 2 +- packages/plugin-rsc/src/plugin.ts | 13 +++++++++++++ 6 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 packages/plugin-rsc/examples/basic/src/routes/tailwind/unused.tsx diff --git a/packages/plugin-rsc/e2e/basic.test.ts b/packages/plugin-rsc/e2e/basic.test.ts index 6fff84076..a2c9e4c20 100644 --- a/packages/plugin-rsc/e2e/basic.test.ts +++ b/packages/plugin-rsc/e2e/basic.test.ts @@ -637,6 +637,24 @@ function defineTest(f: Fixture) { 'rgb(255, 0, 0)', ) }) + + test('tailwind no redundant server hmr', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + const logs: string[] = [] + page.on('console', (msg) => { + if (msg.type() === 'log') { + logs.push(msg.text()) + } + }) + f.createEditor('src/routes/tailwind/unused.tsx').resave() + await page.waitForTimeout(200) + f.createEditor('src/routes/tailwind/server.tsx').resave() + await page.waitForTimeout(200) + expect(logs).toEqual([ + expect.stringMatching(/\[vite-rsc:update\].*\/tailwind\/server.tsx/), + ]) + }) }) test('temporary references @js', async ({ page }) => { diff --git a/packages/plugin-rsc/e2e/fixture.ts b/packages/plugin-rsc/e2e/fixture.ts index aa61f332a..1848ba3f5 100644 --- a/packages/plugin-rsc/e2e/fixture.ts +++ b/packages/plugin-rsc/e2e/fixture.ts @@ -142,6 +142,9 @@ export function useFixture(options: { reset(): void { fs.writeFileSync(filepath, originalFiles[filepath]!) }, + resave(): void { + fs.writeFileSync(filepath, current) + }, } } diff --git a/packages/plugin-rsc/examples/basic/src/framework/entry.browser.tsx b/packages/plugin-rsc/examples/basic/src/framework/entry.browser.tsx index 473fc492d..1998e86ff 100644 --- a/packages/plugin-rsc/examples/basic/src/framework/entry.browser.tsx +++ b/packages/plugin-rsc/examples/basic/src/framework/entry.browser.tsx @@ -70,7 +70,8 @@ async function main() { // implement server HMR by trigering re-fetch/render of RSC upon server code change if (import.meta.hot) { - import.meta.hot.on('rsc:update', () => { + import.meta.hot.on('rsc:update', (e) => { + console.log('[vite-rsc:update]', e.file) fetchRscPayload() }) } diff --git a/packages/plugin-rsc/examples/basic/src/routes/tailwind/unused.tsx b/packages/plugin-rsc/examples/basic/src/routes/tailwind/unused.tsx new file mode 100644 index 000000000..98476b011 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/tailwind/unused.tsx @@ -0,0 +1 @@ +console.log(
unused
) diff --git a/packages/plugin-rsc/examples/basic/src/styles.css b/packages/plugin-rsc/examples/basic/src/styles.css index e34d4399d..2cb11909b 100644 --- a/packages/plugin-rsc/examples/basic/src/styles.css +++ b/packages/plugin-rsc/examples/basic/src/styles.css @@ -1,4 +1,4 @@ -@import 'tailwindcss' source('./'); +@import 'tailwindcss'; button { @apply bg-gray-100 mx-1 px-2 border hover:bg-gray-200 active:bg-gray-300; diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index a8b946ea2..3016a3b68 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -398,6 +398,18 @@ export default function vitePluginRsc( if (!isInsideClientBoundary(ctx.modules)) { if (this.environment.name === 'rsc') { + // detect if this module is only created as css deps (e.g. tailwind) + // (NOTE: this is not necessary since Vite 7.1.0-beta.0 https://github.com/vitejs/vite/pull/20391 ) + if (ctx.modules.length === 1) { + const importers = [...ctx.modules[0]!.importers] + if ( + importers.length > 0 && + importers.every((m) => m.id && isCSSRequest(m.id)) + ) { + return [] + } + } + // transform js to surface syntax errors for (const mod of ctx.modules) { if (mod.type === 'js') { @@ -426,6 +438,7 @@ export default function vitePluginRsc( // Server files can be included in client module graph, for example, // when `addWatchFile` is used to track js files as style dependency (e.g. tailwind) // In this case, reload all importers (for css hmr), and return empty modules to avoid full-reload. + // (NOTE: this is not necessary since Vite 7.1.0-beta.0 https://github.com/vitejs/vite/pull/20391 ) const env = ctx.server.environments.rsc! const mod = env.moduleGraph.getModuleById(ctx.file) if (mod) { From ff44ae49697e6ebca4ae4b241ab8337ebe659b5e Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Fri, 1 Aug 2025 12:27:13 +0900 Subject: [PATCH 159/313] refactor(rsc): split encryption runtime exports (#660) --- packages/plugin-rsc/src/plugin.ts | 35 ++++++++++++++++------------ packages/plugin-rsc/tsdown.config.ts | 1 + 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index 3016a3b68..e5e87e35f 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -938,17 +938,6 @@ function hashString(v: string) { return createHash('sha256').update(v).digest().toString('hex').slice(0, 12) } -function normalizeReferenceId(id: string, name: 'client' | 'rsc') { - if (!server) { - return hashString(path.relative(config.root, id)) - } - - // align with how Vite import analysis would rewrite id - // to avoid double modules on browser and ssr. - const environment = server.environments[name]! - return normalizeViteImportAnalysisUrl(environment, id) -} - function vitePluginUseClient( useClientPluginOptions: Pick< RscPluginOptions, @@ -1243,7 +1232,14 @@ function vitePluginUseServer( // module identity of `import(id)` like browser, so we simply strip it off. id = id.split('?v=')[0]! } - normalizedId_ = normalizeReferenceId(id, 'rsc') + if (config.command === 'build') { + normalizedId_ = hashString(path.relative(config.root, id)) + } else { + normalizedId_ = normalizeViteImportAnalysisUrl( + server.environments.rsc!, + id, + ) + } } return normalizedId_ } @@ -1262,17 +1258,26 @@ function vitePluginUseServer( )}, ${JSON.stringify(name)})`, rejectNonAsyncFunction: true, encode: enableEncryption - ? (value) => `$$ReactServer.encryptActionBoundArgs(${value})` + ? (value) => + `__vite_rsc_encryption_runtime.encryptActionBoundArgs(${value})` : undefined, decode: enableEncryption ? (value) => - `await $$ReactServer.decryptActionBoundArgs(${value})` + `await __vite_rsc_encryption_runtime.decryptActionBoundArgs(${value})` : undefined, }) if (!output.hasChanged()) return serverReferences[getNormalizedId()] = id - const importSource = resolvePackage(`${PKG_NAME}/rsc`) + const importSource = resolvePackage(`${PKG_NAME}/react/rsc`) output.prepend(`import * as $$ReactServer from "${importSource}";\n`) + if (enableEncryption) { + const importSource = resolvePackage( + `${PKG_NAME}/utils/encryption-runtime`, + ) + output.prepend( + `import * as __vite_rsc_encryption_runtime from ${JSON.stringify(importSource)};\n`, + ) + } return { code: output.toString(), map: output.generateMap({ hires: 'boundary' }), diff --git a/packages/plugin-rsc/tsdown.config.ts b/packages/plugin-rsc/tsdown.config.ts index 0c39520ab..e5a8c06d7 100644 --- a/packages/plugin-rsc/tsdown.config.ts +++ b/packages/plugin-rsc/tsdown.config.ts @@ -22,6 +22,7 @@ export default defineConfig({ 'src/rsc-html-stream/ssr.ts', 'src/rsc-html-stream/browser.ts', 'src/utils/rpc.ts', + 'src/utils/encryption-runtime.ts', ], format: ['esm'], external: [/^virtual:/, /^@vitejs\/plugin-rsc\/vendor\//], From 5df00707522ecbcda40f2c53c620f46b517e68e6 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Fri, 1 Aug 2025 13:04:40 +0900 Subject: [PATCH 160/313] feat(rsc): support `client` environment as `react-server` (#657) Co-authored-by: Claude --- packages/plugin-rsc/e2e/browser-mode.test.ts | 74 +++++++++++ packages/plugin-rsc/e2e/helper.ts | 2 +- packages/plugin-rsc/e2e/starter.ts | 30 +++-- packages/plugin-rsc/e2e/syntax-error.test.ts | 4 +- .../examples/browser-mode/README.md | 1 + .../examples/browser-mode/index.html | 13 ++ .../examples/browser-mode/package.json | 23 ++++ .../examples/browser-mode/public/vite.svg | 1 + .../browser-mode/src/action-bind/client.tsx | 12 ++ .../browser-mode/src/action-bind/form.tsx | 16 +++ .../browser-mode/src/action-bind/server.tsx | 107 ++++++++++++++++ .../src/action-from-client/action.tsx | 5 + .../src/action-from-client/client.tsx | 14 +++ .../examples/browser-mode/src/action.tsx | 11 ++ .../browser-mode/src/assets/react.svg | 1 + .../examples/browser-mode/src/client.tsx | 13 ++ .../src/framework/entry.browser.tsx | 57 +++++++++ .../browser-mode/src/framework/entry.rsc.tsx | 55 +++++++++ .../browser-mode/src/framework/main.tsx | 35 ++++++ .../examples/browser-mode/src/index.css | 112 +++++++++++++++++ .../examples/browser-mode/src/root.tsx | 44 +++++++ .../examples/browser-mode/tsconfig.json | 18 +++ .../examples/browser-mode/vite.config.ts | 104 ++++++++++++++++ packages/plugin-rsc/package.json | 3 +- packages/plugin-rsc/playwright.config.ts | 2 +- packages/plugin-rsc/src/plugin.ts | 115 ++++++++++++------ pnpm-lock.yaml | 30 ++++- 27 files changed, 848 insertions(+), 54 deletions(-) create mode 100644 packages/plugin-rsc/e2e/browser-mode.test.ts create mode 100644 packages/plugin-rsc/examples/browser-mode/README.md create mode 100644 packages/plugin-rsc/examples/browser-mode/index.html create mode 100644 packages/plugin-rsc/examples/browser-mode/package.json create mode 100644 packages/plugin-rsc/examples/browser-mode/public/vite.svg create mode 100644 packages/plugin-rsc/examples/browser-mode/src/action-bind/client.tsx create mode 100644 packages/plugin-rsc/examples/browser-mode/src/action-bind/form.tsx create mode 100644 packages/plugin-rsc/examples/browser-mode/src/action-bind/server.tsx create mode 100644 packages/plugin-rsc/examples/browser-mode/src/action-from-client/action.tsx create mode 100644 packages/plugin-rsc/examples/browser-mode/src/action-from-client/client.tsx create mode 100644 packages/plugin-rsc/examples/browser-mode/src/action.tsx create mode 100644 packages/plugin-rsc/examples/browser-mode/src/assets/react.svg create mode 100644 packages/plugin-rsc/examples/browser-mode/src/client.tsx create mode 100644 packages/plugin-rsc/examples/browser-mode/src/framework/entry.browser.tsx create mode 100644 packages/plugin-rsc/examples/browser-mode/src/framework/entry.rsc.tsx create mode 100644 packages/plugin-rsc/examples/browser-mode/src/framework/main.tsx create mode 100644 packages/plugin-rsc/examples/browser-mode/src/index.css create mode 100644 packages/plugin-rsc/examples/browser-mode/src/root.tsx create mode 100644 packages/plugin-rsc/examples/browser-mode/tsconfig.json create mode 100644 packages/plugin-rsc/examples/browser-mode/vite.config.ts diff --git a/packages/plugin-rsc/e2e/browser-mode.test.ts b/packages/plugin-rsc/e2e/browser-mode.test.ts new file mode 100644 index 000000000..42e2e6d6a --- /dev/null +++ b/packages/plugin-rsc/e2e/browser-mode.test.ts @@ -0,0 +1,74 @@ +import { expect, test, type Page } from '@playwright/test' +import { useFixture } from './fixture' +import { defineStarterTest } from './starter' + +test.describe('dev-browser-mode', () => { + // Webkit fails by + // > TypeError: ReadableByteStreamController is not implemented + test.skip(({ browserName }) => browserName === 'webkit') + + const f = useFixture({ root: 'examples/browser-mode', mode: 'dev' }) + defineStarterTest(f, 'browser-mode') + + // action-bind tests copied from basic.test.ts + + test('action bind simple', async ({ page }) => { + await page.goto(f.url()) + await testActionBindSimple(page) + }) + + async function testActionBindSimple(page: Page) { + await expect(page.getByTestId('test-server-action-bind-simple')).toHaveText( + '[?]', + ) + await page + .getByRole('button', { name: 'test-server-action-bind-simple' }) + .click() + await expect(page.getByTestId('test-server-action-bind-simple')).toHaveText( + 'true', + ) + await page + .getByRole('button', { name: 'test-server-action-bind-reset' }) + .click() + } + + test('action bind client', async ({ page }) => { + await page.goto(f.url()) + await testActionBindClient(page) + }) + + async function testActionBindClient(page: Page) { + await expect(page.getByTestId('test-server-action-bind-client')).toHaveText( + '[?]', + ) + await page + .getByRole('button', { name: 'test-server-action-bind-client' }) + .click() + await expect(page.getByTestId('test-server-action-bind-client')).toHaveText( + 'true', + ) + await page + .getByRole('button', { name: 'test-server-action-bind-reset' }) + .click() + } + + test('action bind action', async ({ page }) => { + await page.goto(f.url()) + await testActionBindAction(page) + }) + + async function testActionBindAction(page: Page) { + await expect(page.getByTestId('test-server-action-bind-action')).toHaveText( + '[?]', + ) + await page + .getByRole('button', { name: 'test-server-action-bind-action' }) + .click() + await expect(page.getByTestId('test-server-action-bind-action')).toHaveText( + '[true,true]', + ) + await page + .getByRole('button', { name: 'test-server-action-bind-reset' }) + .click() + } +}) diff --git a/packages/plugin-rsc/e2e/helper.ts b/packages/plugin-rsc/e2e/helper.ts index 702c5b7ec..60c3aa4f2 100644 --- a/packages/plugin-rsc/e2e/helper.ts +++ b/packages/plugin-rsc/e2e/helper.ts @@ -15,7 +15,7 @@ export async function waitForHydration(page: Page, locator: string = 'body') { el && Object.keys(el).some((key) => key.startsWith('__reactFiber')), ), - { timeout: 3000 }, + { timeout: 10000 }, ) .toBeTruthy() } diff --git a/packages/plugin-rsc/e2e/starter.ts b/packages/plugin-rsc/e2e/starter.ts index 68b05706f..3f2e02378 100644 --- a/packages/plugin-rsc/e2e/starter.ts +++ b/packages/plugin-rsc/e2e/starter.ts @@ -9,10 +9,13 @@ import { export function defineStarterTest( f: Fixture, - variant?: 'no-ssr' | 'dev-production', + variant?: 'no-ssr' | 'dev-production' | 'browser-mode', ) { const waitForHydration: typeof waitForHydration_ = (page) => - waitForHydration_(page, variant === 'no-ssr' ? '#root' : 'body') + waitForHydration_( + page, + variant === 'no-ssr' || variant === 'browser-mode' ? '#root' : 'body', + ) test('basic', async ({ page }) => { using _ = expectNoPageError(page) @@ -40,7 +43,7 @@ export function defineStarterTest( }) testNoJs('server action @nojs', async ({ page }) => { - test.skip(variant === 'no-ssr') + test.skip(variant === 'no-ssr' || variant === 'browser-mode') await page.goto(f.url()) await page.getByRole('button', { name: 'Server Counter: 1' }).click() @@ -50,7 +53,11 @@ export function defineStarterTest( }) test('client hmr', async ({ page }) => { - test.skip(f.mode === 'build' || variant === 'dev-production') + test.skip( + f.mode === 'build' || + variant === 'dev-production' || + variant === 'browser-mode', + ) await page.goto(f.url()) await waitForHydration(page) @@ -80,7 +87,7 @@ export function defineStarterTest( }) test.describe(() => { - test.skip(f.mode === 'build') + test.skip(f.mode === 'build' || variant === 'browser-mode') test('server hmr', async ({ page }) => { await page.goto(f.url()) @@ -113,20 +120,17 @@ export function defineStarterTest( test('css @js', async ({ page }) => { await page.goto(f.url()) await waitForHydration(page) - await expect(page.locator('.read-the-docs')).toHaveCSS( - 'color', - 'rgb(136, 136, 136)', - ) + await expect(page.locator('.card').nth(0)).toHaveCSS('padding-left', '16px') }) test.describe(() => { - test.skip(variant === 'no-ssr') + test.skip(variant === 'no-ssr' || variant === 'browser-mode') testNoJs('css @nojs', async ({ page }) => { await page.goto(f.url()) - await expect(page.locator('.read-the-docs')).toHaveCSS( - 'color', - 'rgb(136, 136, 136)', + await expect(page.locator('.card').nth(0)).toHaveCSS( + 'padding-left', + '16px', ) }) }) diff --git a/packages/plugin-rsc/e2e/syntax-error.test.ts b/packages/plugin-rsc/e2e/syntax-error.test.ts index 75425713c..a44980d95 100644 --- a/packages/plugin-rsc/e2e/syntax-error.test.ts +++ b/packages/plugin-rsc/e2e/syntax-error.test.ts @@ -164,11 +164,11 @@ test.describe(() => { ) await expect(async () => { await page.goto(f.url()) - await waitForHydration(page) await expect(page.getByTestId('client-content')).toHaveText( 'client:fixed', ) }).toPass() + await waitForHydration(page) }) }) @@ -197,11 +197,11 @@ test.describe(() => { ) await expect(async () => { await page.goto(f.url()) - await waitForHydration(page) await expect(page.getByTestId('server-content')).toHaveText( 'server:fixed', ) }).toPass() + await waitForHydration(page) }) }) }) diff --git a/packages/plugin-rsc/examples/browser-mode/README.md b/packages/plugin-rsc/examples/browser-mode/README.md new file mode 100644 index 000000000..2e9ed6455 --- /dev/null +++ b/packages/plugin-rsc/examples/browser-mode/README.md @@ -0,0 +1 @@ +[examples/starter](https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-rsc/examples/starter) but entirely on Browser. Inspired by https://github.com/kasperpeulen/vitest-plugin-rsc/ diff --git a/packages/plugin-rsc/examples/browser-mode/index.html b/packages/plugin-rsc/examples/browser-mode/index.html new file mode 100644 index 000000000..6323c94f5 --- /dev/null +++ b/packages/plugin-rsc/examples/browser-mode/index.html @@ -0,0 +1,13 @@ + + + + + RSC Browser Mode + + + + + +
+ + diff --git a/packages/plugin-rsc/examples/browser-mode/package.json b/packages/plugin-rsc/examples/browser-mode/package.json new file mode 100644 index 000000000..a4f517d27 --- /dev/null +++ b/packages/plugin-rsc/examples/browser-mode/package.json @@ -0,0 +1,23 @@ +{ + "name": "@vitejs/plugin-rsc-examples-browser-mode", + "version": "0.0.0", + "private": true, + "license": "MIT", + "type": "module", + "scripts": { + "dev": "vite", + "build": "false && vite build", + "preview": "false && vite preview" + }, + "dependencies": { + "@vitejs/plugin-rsc": "latest", + "react": "^19.1.0", + "react-dom": "^19.1.0" + }, + "devDependencies": { + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", + "@vitejs/plugin-react": "latest", + "vite": "^7.0.6" + } +} diff --git a/packages/plugin-rsc/examples/browser-mode/public/vite.svg b/packages/plugin-rsc/examples/browser-mode/public/vite.svg new file mode 100644 index 000000000..e7b8dfb1b --- /dev/null +++ b/packages/plugin-rsc/examples/browser-mode/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/plugin-rsc/examples/browser-mode/src/action-bind/client.tsx b/packages/plugin-rsc/examples/browser-mode/src/action-bind/client.tsx new file mode 100644 index 000000000..2fe0c81c6 --- /dev/null +++ b/packages/plugin-rsc/examples/browser-mode/src/action-bind/client.tsx @@ -0,0 +1,12 @@ +'use client' + +import React from 'react' + +export function ActionBindClient() { + const hydrated = React.useSyncExternalStore( + React.useCallback(() => () => {}, []), + () => true, + () => false, + ) + return <>{String(hydrated)} +} diff --git a/packages/plugin-rsc/examples/browser-mode/src/action-bind/form.tsx b/packages/plugin-rsc/examples/browser-mode/src/action-bind/form.tsx new file mode 100644 index 000000000..1b1675c3a --- /dev/null +++ b/packages/plugin-rsc/examples/browser-mode/src/action-bind/form.tsx @@ -0,0 +1,16 @@ +'use client' + +import React from 'react' + +export function TestServerActionBindClientForm(props: { + action: () => Promise +}) { + const [result, formAction] = React.useActionState(props.action, '[?]') + + return ( + + + {result} + + ) +} diff --git a/packages/plugin-rsc/examples/browser-mode/src/action-bind/server.tsx b/packages/plugin-rsc/examples/browser-mode/src/action-bind/server.tsx new file mode 100644 index 000000000..dda9ee2ed --- /dev/null +++ b/packages/plugin-rsc/examples/browser-mode/src/action-bind/server.tsx @@ -0,0 +1,107 @@ +// based on test cases in +// https://github.com/vercel/next.js/blob/ad898de735c393d98960a68c8d9eaeee32206c57/test/e2e/app-dir/actions/app/encryption/page.js + +import { ActionBindClient } from './client' +import { TestServerActionBindClientForm } from './form' + +export function TestActionBind() { + return ( + <> + + + + + + ) +} + +export function TestServerActionBindReset() { + return ( +
{ + 'use server' + testServerActionBindSimpleState = '[?]' + testServerActionBindActionState = '[?]' + testServerActionBindClientState++ + }} + > + +
+ ) +} + +let testServerActionBindSimpleState = '[?]' + +export function TestServerActionBindSimple() { + const outerValue = 'outerValue' + + return ( +
{ + 'use server' + const result = String(formData.get('value')) === outerValue + testServerActionBindSimpleState = JSON.stringify(result) + }} + > + + + + {testServerActionBindSimpleState} + +
+ ) +} + +let testServerActionBindClientState = 0 + +export function TestServerActionBindClient() { + // client element as server action bound argument + const client = + + const action = async () => { + 'use server' + return client + } + + return ( + + ) +} + +let testServerActionBindActionState = '[?]' + +export function TestServerActionBindAction() { + async function otherAction() { + 'use server' + return 'otherActionValue' + } + + function wrapAction(value: string, action: () => Promise) { + return async function (formValue: string) { + 'use server' + const actionValue = await action() + return [actionValue === 'otherActionValue', formValue === value] + } + } + + const action = wrapAction('ok', otherAction) + + return ( +
{ + 'use server' + const result = await action(String(formData.get('value'))) + testServerActionBindActionState = JSON.stringify(result) + }} + > + + + + {testServerActionBindActionState} + +
+ ) +} diff --git a/packages/plugin-rsc/examples/browser-mode/src/action-from-client/action.tsx b/packages/plugin-rsc/examples/browser-mode/src/action-from-client/action.tsx new file mode 100644 index 000000000..a72eb0bda --- /dev/null +++ b/packages/plugin-rsc/examples/browser-mode/src/action-from-client/action.tsx @@ -0,0 +1,5 @@ +'use server' + +export async function testActionState(prev: number) { + return prev + 1 +} diff --git a/packages/plugin-rsc/examples/browser-mode/src/action-from-client/client.tsx b/packages/plugin-rsc/examples/browser-mode/src/action-from-client/client.tsx new file mode 100644 index 000000000..aca850f2f --- /dev/null +++ b/packages/plugin-rsc/examples/browser-mode/src/action-from-client/client.tsx @@ -0,0 +1,14 @@ +'use client' + +import React from 'react' +import { testActionState } from './action' + +export function TestUseActionState() { + const [state, formAction] = React.useActionState(testActionState, 0) + + return ( +
+ +
+ ) +} diff --git a/packages/plugin-rsc/examples/browser-mode/src/action.tsx b/packages/plugin-rsc/examples/browser-mode/src/action.tsx new file mode 100644 index 000000000..4fc55d65b --- /dev/null +++ b/packages/plugin-rsc/examples/browser-mode/src/action.tsx @@ -0,0 +1,11 @@ +'use server' + +let serverCounter = 0 + +export async function getServerCounter() { + return serverCounter +} + +export async function updateServerCounter(change: number) { + serverCounter += change +} diff --git a/packages/plugin-rsc/examples/browser-mode/src/assets/react.svg b/packages/plugin-rsc/examples/browser-mode/src/assets/react.svg new file mode 100644 index 000000000..6c87de9bb --- /dev/null +++ b/packages/plugin-rsc/examples/browser-mode/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/plugin-rsc/examples/browser-mode/src/client.tsx b/packages/plugin-rsc/examples/browser-mode/src/client.tsx new file mode 100644 index 000000000..29bb5d367 --- /dev/null +++ b/packages/plugin-rsc/examples/browser-mode/src/client.tsx @@ -0,0 +1,13 @@ +'use client' + +import React from 'react' + +export function ClientCounter() { + const [count, setCount] = React.useState(0) + + return ( + + ) +} diff --git a/packages/plugin-rsc/examples/browser-mode/src/framework/entry.browser.tsx b/packages/plugin-rsc/examples/browser-mode/src/framework/entry.browser.tsx new file mode 100644 index 000000000..bb36e3626 --- /dev/null +++ b/packages/plugin-rsc/examples/browser-mode/src/framework/entry.browser.tsx @@ -0,0 +1,57 @@ +import * as React from 'react' +import * as ReactDOMClient from 'react-dom/client' +import * as ReactClient from '@vitejs/plugin-rsc/react/browser' +import type { RscPayload } from './entry.rsc' + +let fetchServer: typeof import('./entry.rsc').fetchServer + +export function initialize(options: { fetchServer: typeof fetchServer }) { + fetchServer = options.fetchServer + ReactClient.setRequireModule({ + load: (id) => import(/* @vite-ignore */ id), + }) +} + +export async function main() { + let setPayload: (v: RscPayload) => void + + const initialPayload = await ReactClient.createFromFetch( + fetchServer(new Request(window.location.href)), + ) + + function BrowserRoot() { + const [payload, setPayload_] = React.useState(initialPayload) + + React.useEffect(() => { + setPayload = (v) => React.startTransition(() => setPayload_(v)) + }, [setPayload_]) + + return payload.root + } + + ReactClient.setServerCallback(async (id, args) => { + const url = new URL(window.location.href) + const temporaryReferences = ReactClient.createTemporaryReferenceSet() + const payload = await ReactClient.createFromFetch( + fetchServer( + new Request(url, { + method: 'POST', + body: await ReactClient.encodeReply(args, { temporaryReferences }), + headers: { + 'x-rsc-action': id, + }, + }), + ), + { temporaryReferences }, + ) + setPayload(payload) + return payload.returnValue + }) + + const browserRoot = ( + + + + ) + ReactDOMClient.createRoot(document.body).render(browserRoot) +} diff --git a/packages/plugin-rsc/examples/browser-mode/src/framework/entry.rsc.tsx b/packages/plugin-rsc/examples/browser-mode/src/framework/entry.rsc.tsx new file mode 100644 index 000000000..343e6751c --- /dev/null +++ b/packages/plugin-rsc/examples/browser-mode/src/framework/entry.rsc.tsx @@ -0,0 +1,55 @@ +import * as ReactServer from '@vitejs/plugin-rsc/react/rsc' +import type React from 'react' +import { Root } from '../root' +import type { ReactFormState } from 'react-dom/client' + +export type RscPayload = { + root: React.ReactNode + returnValue?: unknown + formState?: ReactFormState +} + +declare let __vite_rsc_raw_import__: (id: string) => Promise + +export function initialize() { + ReactServer.setRequireModule({ load: (id) => __vite_rsc_raw_import__(id) }) +} + +export async function fetchServer(request: Request): Promise { + const isAction = request.method === 'POST' + let returnValue: unknown | undefined + let formState: ReactFormState | undefined + let temporaryReferences: unknown | undefined + if (isAction) { + const actionId = request.headers.get('x-rsc-action') + if (actionId) { + const contentType = request.headers.get('content-type') + const body = contentType?.startsWith('multipart/form-data') + ? await request.formData() + : await request.text() + temporaryReferences = ReactServer.createTemporaryReferenceSet() + const args = await ReactServer.decodeReply(body, { temporaryReferences }) + const action = await ReactServer.loadServerAction(actionId) + returnValue = await action.apply(null, args) + } else { + const formData = await request.formData() + const decodedAction = await ReactServer.decodeAction(formData) + const result = await decodedAction() + formState = await ReactServer.decodeFormState(result, formData) + } + } + + const rscPayload: RscPayload = { root: , formState, returnValue } + const rscOptions = { temporaryReferences } + const rscStream = ReactServer.renderToReadableStream( + rscPayload, + rscOptions, + ) + + return new Response(rscStream, { + headers: { + 'content-type': 'text/x-component;charset=utf-8', + vary: 'accept', + }, + }) +} diff --git a/packages/plugin-rsc/examples/browser-mode/src/framework/main.tsx b/packages/plugin-rsc/examples/browser-mode/src/framework/main.tsx new file mode 100644 index 000000000..12d5c7546 --- /dev/null +++ b/packages/plugin-rsc/examples/browser-mode/src/framework/main.tsx @@ -0,0 +1,35 @@ +import { ESModulesEvaluator, ModuleRunner } from 'vite/module-runner' +import * as server from './entry.rsc' + +async function main() { + const client = await importClient() + server.initialize() + client.initialize({ fetchServer: server.fetchServer }) + await client.main() +} + +async function importClient() { + const runner = new ModuleRunner( + { + sourcemapInterceptor: false, + transport: { + invoke: async (payload) => { + const response = await fetch( + '/@vite/invoke-react-client?' + + new URLSearchParams({ + data: JSON.stringify(payload), + }), + ) + return response.json() + }, + }, + hmr: false, + }, + new ESModulesEvaluator(), + ) + return await runner.import( + '/src/framework/entry.browser.tsx', + ) +} + +main() diff --git a/packages/plugin-rsc/examples/browser-mode/src/index.css b/packages/plugin-rsc/examples/browser-mode/src/index.css new file mode 100644 index 000000000..f4d2128c0 --- /dev/null +++ b/packages/plugin-rsc/examples/browser-mode/src/index.css @@ -0,0 +1,112 @@ +:root { + font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} + +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 1rem; +} + +.read-the-docs { + color: #888; + text-align: left; +} diff --git a/packages/plugin-rsc/examples/browser-mode/src/root.tsx b/packages/plugin-rsc/examples/browser-mode/src/root.tsx new file mode 100644 index 000000000..e8d912527 --- /dev/null +++ b/packages/plugin-rsc/examples/browser-mode/src/root.tsx @@ -0,0 +1,44 @@ +import './index.css' +import viteLogo from '/vite.svg' +import { getServerCounter, updateServerCounter } from './action.tsx' +import reactLogo from './assets/react.svg' +import { ClientCounter } from './client.tsx' +import { TestUseActionState } from './action-from-client/client.tsx' +import { TestActionBind } from './action-bind/server.tsx' + +export function Root() { + return +} + +function App() { + return ( +
+ +

Vite + RSC

+
+ +
+
+
+ +
+
+
+ +
+
+ +
+
+ ) +} diff --git a/packages/plugin-rsc/examples/browser-mode/tsconfig.json b/packages/plugin-rsc/examples/browser-mode/tsconfig.json new file mode 100644 index 000000000..4c355ed3c --- /dev/null +++ b/packages/plugin-rsc/examples/browser-mode/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "erasableSyntaxOnly": true, + "allowImportingTsExtensions": true, + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "skipLibCheck": true, + "verbatimModuleSyntax": true, + "noEmit": true, + "moduleResolution": "Bundler", + "module": "ESNext", + "target": "ESNext", + "lib": ["ESNext", "DOM", "DOM.Iterable"], + "types": ["vite/client", "@vitejs/plugin-rsc/types"], + "jsx": "react-jsx" + } +} diff --git a/packages/plugin-rsc/examples/browser-mode/vite.config.ts b/packages/plugin-rsc/examples/browser-mode/vite.config.ts new file mode 100644 index 000000000..c8bf161f4 --- /dev/null +++ b/packages/plugin-rsc/examples/browser-mode/vite.config.ts @@ -0,0 +1,104 @@ +import { defaultClientConditions, defineConfig } from 'vite' +import { vitePluginRscMinimal } from '@vitejs/plugin-rsc/plugin' +// import inspect from 'vite-plugin-inspect' + +export default defineConfig({ + plugins: [ + // inspect(), + vitePluginRscMinimal({ + environment: { + rsc: 'client', + browser: 'react_client', + }, + }), + { + name: 'rsc:browser-mode', + configureServer(server) { + server.middlewares.use(async (req, res, next) => { + const url = new URL(req.url ?? '/', 'https://any.local') + if (url.pathname === '/@vite/invoke-react-client') { + const payload = JSON.parse(url.searchParams.get('data')!) + const result = + await server.environments['react_client']!.hot.handleInvoke( + payload, + ) + res.setHeader('Content-Type', 'application/json') + res.end(JSON.stringify(result)) + return + } + next() + }) + }, + // for "react_client" hmr, it requires: + // - enable fast-refresh transform on `react_client` environment + // - currently `@vitejs/plugin-react` doesn't support it + // - implement and enable module runner hmr + hotUpdate(ctx) { + if (this.environment.name === 'react_client') { + if (ctx.modules.length > 0) { + ctx.server.environments.client.hot.send({ + type: 'full-reload', + path: ctx.file, + }) + } + } + }, + config() { + return { + environments: { + client: { + keepProcessEnv: false, + resolve: { + conditions: ['react-server', ...defaultClientConditions], + }, + optimizeDeps: { + include: [ + 'react', + 'react-dom', + 'react-dom/client', + 'react/jsx-runtime', + 'react/jsx-dev-runtime', + '@vitejs/plugin-rsc/vendor/react-server-dom/server.edge', + '@vitejs/plugin-rsc/vendor/react-server-dom/client.edge', + // TODO: browser build breaks `src/actin-bind` examples + // '@vitejs/plugin-rsc/vendor/react-server-dom/server.browser', + // '@vitejs/plugin-rsc/vendor/react-server-dom/client.browser', + ], + exclude: ['vite', '@vitejs/plugin-rsc'], + }, + }, + react_client: { + keepProcessEnv: false, + resolve: { + conditions: [...defaultClientConditions], + noExternal: true, + }, + optimizeDeps: { + include: [ + 'react', + 'react-dom', + 'react-dom/client', + 'react/jsx-runtime', + 'react/jsx-dev-runtime', + '@vitejs/plugin-rsc/vendor/react-server-dom/client.browser', + ], + exclude: ['@vitejs/plugin-rsc'], + esbuildOptions: { + platform: 'browser', + }, + }, + }, + }, + resolve: { + // alias: { + // '@vitejs/plugin-rsc/vendor/react-server-dom/server.edge': + // '@vitejs/plugin-rsc/vendor/react-server-dom/server.browser', + // '@vitejs/plugin-rsc/vendor/react-server-dom/client.edge': + // '@vitejs/plugin-rsc/vendor/react-server-dom/client.browser', + // }, + }, + } + }, + }, + ], +}) diff --git a/packages/plugin-rsc/package.json b/packages/plugin-rsc/package.json index 01e4e08be..41a8f18a0 100644 --- a/packages/plugin-rsc/package.json +++ b/packages/plugin-rsc/package.json @@ -60,7 +60,8 @@ "react-server-dom-webpack": "^19.1.0", "rsc-html-stream": "^0.0.7", "tinyexec": "^1.0.1", - "tsdown": "^0.13.0" + "tsdown": "^0.13.0", + "vite-plugin-inspect": "^11.3.2" }, "peerDependencies": { "react": "*", diff --git a/packages/plugin-rsc/playwright.config.ts b/packages/plugin-rsc/playwright.config.ts index 13549cb7e..5c390e9de 100644 --- a/packages/plugin-rsc/playwright.config.ts +++ b/packages/plugin-rsc/playwright.config.ts @@ -6,7 +6,7 @@ export default defineConfig({ trace: 'on-first-retry', }, expect: { - toPass: { timeout: 5000 }, + toPass: { timeout: 10000 }, }, projects: [ { diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index e5e87e35f..b9b28de71 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -131,6 +131,55 @@ export type RscPluginOptions = { * @default false */ useBuildAppHook?: boolean + + /** + * Custom environment configuration + * @experimental + * @default { browser: 'client', ssr: 'ssr', rsc: 'rsc' } + */ + environment?: { + browser?: string + ssr?: string + rsc?: string + } +} + +/** @experimental */ +export function vitePluginRscMinimal( + rscPluginOptions: RscPluginOptions = {}, +): Plugin[] { + return [ + { + name: 'rsc:minimal', + enforce: 'pre', + async config() { + await esModuleLexer.init + }, + configResolved(config_) { + config = config_ + }, + configureServer(server_) { + server = server_ + }, + }, + { + name: 'rsc:vite-client-raw-import', + transform: { + order: 'post', + handler(code) { + if (code.includes('__vite_rsc_raw_import__')) { + // inject dynamic import last to avoid Vite adding `?import` query + // to client references (and browser mode server references) + return code.replace('__vite_rsc_raw_import__', 'import') + } + }, + }, + }, + ...vitePluginRscCore(), + ...vitePluginUseClient(rscPluginOptions), + ...vitePluginUseServer(rscPluginOptions), + ...vitePluginDefineEncryptionKey(rscPluginOptions), + ] } export default function vitePluginRsc( @@ -186,8 +235,6 @@ export default function vitePluginRsc( { name: 'rsc', async config(config, env) { - await esModuleLexer.init - // crawl packages with "react" in "peerDependencies" to bundle react deps on server // see https://github.com/svitejs/vitefu/blob/d8d82fa121e3b2215ba437107093c77bde51b63b/src/index.js#L95-L101 const result = await crawlFrameworkPkgs({ @@ -295,11 +342,7 @@ export default function vitePluginRsc( } }, buildApp: rscPluginOptions.useBuildAppHook ? buildApp : undefined, - configResolved(config_) { - config = config_ - }, - configureServer(server_) { - server = server_ + configureServer() { ;(globalThis as any).__viteRscDevServer = server if (rscPluginOptions.disableServerHandler) return @@ -455,18 +498,6 @@ export default function vitePluginRsc( } }, }, - { - name: 'rsc:patch-browser-raw-import', - transform: { - order: 'post', - handler(code) { - if (code.includes('__vite_rsc_raw_import__')) { - // inject dynamic import last to avoid Vite adding `?import` query to client references - return code.replace('__vite_rsc_raw_import__', 'import') - } - }, - }, - }, { // backward compat: `loadSsrModule(name)` implemented as `loadModule("ssr", name)` name: 'rsc:load-ssr-module', @@ -851,10 +882,7 @@ globalThis.AsyncLocalStorage = __viteRscAyncHooks.AsyncLocalStorage; return '' }, }, - ...vitePluginRscCore(), - ...vitePluginUseClient(rscPluginOptions), - ...vitePluginUseServer(rscPluginOptions), - ...vitePluginDefineEncryptionKey(rscPluginOptions), + ...vitePluginRscMinimal(rscPluginOptions), ...vitePluginFindSourceMapURL(), ...vitePluginRscCss({ rscCssTransform: rscPluginOptions.rscCssTransform }), ...(rscPluginOptions.validateImports !== false @@ -941,7 +969,7 @@ function hashString(v: string) { function vitePluginUseClient( useClientPluginOptions: Pick< RscPluginOptions, - 'ignoredPackageWarnings' | 'keepUseCientProxy' + 'ignoredPackageWarnings' | 'keepUseCientProxy' | 'environment' >, ): Plugin[] { const packageSources = new Map() @@ -949,11 +977,15 @@ function vitePluginUseClient( // https://github.com/vitejs/vite/blob/4bcf45863b5f46aa2b41f261283d08f12d3e8675/packages/vite/src/node/utils.ts#L175 const bareImportRE = /^(?![a-zA-Z]:)[\w@](?!.*:\/\/)/ + const serverEnvironmentName = useClientPluginOptions.environment?.rsc ?? 'rsc' + const browserEnvironmentName = + useClientPluginOptions.environment?.browser ?? 'client' + return [ { name: 'rsc:use-client', async transform(code, id) { - if (this.environment.name !== 'rsc') return + if (this.environment.name !== serverEnvironmentName) return if (!code.includes('use client')) return const ast = await parseAstAsync(code) @@ -996,7 +1028,7 @@ function vitePluginUseClient( } else { if (this.environment.mode === 'dev') { importId = normalizeViteImportAnalysisUrl( - server.environments.client, + server.environments[browserEnvironmentName]!, id, ) referenceKey = importId @@ -1075,7 +1107,7 @@ function vitePluginUseClient( id.startsWith('\0virtual:vite-rsc/client-in-server-package-proxy/') ) { assert.equal(this.environment.mode, 'dev') - assert.notEqual(this.environment.name, 'rsc') + assert(this.environment.name !== serverEnvironmentName) id = decodeURIComponent( id.slice( '\0virtual:vite-rsc/client-in-server-package-proxy/'.length, @@ -1095,7 +1127,10 @@ function vitePluginUseClient( resolveId: { order: 'pre', async handler(source, importer, options) { - if (this.environment.name === 'rsc' && bareImportRE.test(source)) { + if ( + this.environment.name === serverEnvironmentName && + bareImportRE.test(source) + ) { const resolved = await this.resolve(source, importer, options) if (resolved && resolved.id.includes('/node_modules/')) { packageSources.set(resolved.id, source) @@ -1120,7 +1155,7 @@ function vitePluginUseClient( } }, generateBundle(_options, bundle) { - if (this.environment.name !== 'rsc') return + if (this.environment.name !== serverEnvironmentName) return // track used exports of client references in rsc build // to tree shake unused exports in browser and ssr build @@ -1140,18 +1175,23 @@ function vitePluginUseClient( } function vitePluginDefineEncryptionKey( - useServerPluginOptions: Pick, + useServerPluginOptions: Pick< + RscPluginOptions, + 'defineEncryptionKey' | 'environment' + >, ): Plugin[] { let defineEncryptionKey: string let emitEncryptionKey = false const KEY_PLACEHOLDER = '__vite_rsc_define_encryption_key' const KEY_FILE = '__vite_rsc_encryption_key.js' + const serverEnvironmentName = useServerPluginOptions.environment?.rsc ?? 'rsc' + return [ { name: 'rsc:encryption-key', async configEnvironment(name, _config, env) { - if (name === 'rsc' && !env.isPreview) { + if (name === serverEnvironmentName && !env.isPreview) { defineEncryptionKey = useServerPluginOptions.defineEncryptionKey ?? JSON.stringify(toBase64(await generateEncryptionKey())) @@ -1201,9 +1241,13 @@ function vitePluginDefineEncryptionKey( function vitePluginUseServer( useServerPluginOptions: Pick< RscPluginOptions, - 'ignoredPackageWarnings' | 'enableActionEncryption' + 'ignoredPackageWarnings' | 'enableActionEncryption' | 'environment' >, ): Plugin[] { + const serverEnvironmentName = useServerPluginOptions.environment?.rsc ?? 'rsc' + const browserEnvironmentName = + useServerPluginOptions.environment?.browser ?? 'client' + return [ { name: 'rsc:use-server', @@ -1236,7 +1280,7 @@ function vitePluginUseServer( normalizedId_ = hashString(path.relative(config.root, id)) } else { normalizedId_ = normalizeViteImportAnalysisUrl( - server.environments.rsc!, + server.environments[serverEnvironmentName]!, id, ) } @@ -1244,7 +1288,7 @@ function vitePluginUseServer( return normalizedId_ } - if (this.environment.name === 'rsc') { + if (this.environment.name === serverEnvironmentName) { const transformServerActionServer_ = withRollupError( this, transformServerActionServer, @@ -1305,7 +1349,8 @@ function vitePluginUseServer( const output = result?.output if (!output?.hasChanged()) return serverReferences[getNormalizedId()] = id - const name = this.environment.name === 'client' ? 'browser' : 'ssr' + const name = + this.environment.name === browserEnvironmentName ? 'browser' : 'ssr' const importSource = resolvePackage(`${PKG_NAME}/react/${name}`) output.prepend(`import * as $$ReactClient from "${importSource}";\n`) return { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0406d1e0d..889b162a4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -502,6 +502,9 @@ importers: tsdown: specifier: ^0.13.0 version: 0.13.0(publint@0.3.12)(typescript@5.8.3) + vite-plugin-inspect: + specifier: ^11.3.2 + version: 11.3.2(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) packages/plugin-rsc/examples/basic: dependencies: @@ -561,6 +564,31 @@ importers: specifier: ^4.26.0 version: 4.26.0 + packages/plugin-rsc/examples/browser-mode: + dependencies: + '@vitejs/plugin-rsc': + specifier: latest + version: link:../.. + react: + specifier: ^19.1.0 + version: 19.1.0 + react-dom: + specifier: ^19.1.0 + version: 19.1.0(react@19.1.0) + devDependencies: + '@types/react': + specifier: ^19.1.8 + version: 19.1.8 + '@types/react-dom': + specifier: ^19.1.6 + version: 19.1.6(@types/react@19.1.8) + '@vitejs/plugin-react': + specifier: latest + version: link:../../../plugin-react + vite: + specifier: ^7.0.6 + version: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + packages/plugin-rsc/examples/e2e: devDependencies: '@vitejs/plugin-react': @@ -8615,7 +8643,7 @@ snapshots: unplugin-utils@0.2.4: dependencies: pathe: 2.0.3 - picomatch: 4.0.2 + picomatch: 4.0.3 unrs-resolver@1.9.2: dependencies: From a34f8c537df2efc27d55a510bfd3597c639842f6 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Fri, 1 Aug 2025 14:19:47 +0900 Subject: [PATCH 161/313] refactor(rsc): move `writeManifest` inside `buildApp` hook (#659) --- .../plugin-rsc/examples/ssg/vite.config.ts | 13 ++---- packages/plugin-rsc/src/plugin.ts | 44 +++++++------------ 2 files changed, 21 insertions(+), 36 deletions(-) diff --git a/packages/plugin-rsc/examples/ssg/vite.config.ts b/packages/plugin-rsc/examples/ssg/vite.config.ts index 05807fd2f..b84ad62f3 100644 --- a/packages/plugin-rsc/examples/ssg/vite.config.ts +++ b/packages/plugin-rsc/examples/ssg/vite.config.ts @@ -21,6 +21,7 @@ export default defineConfig((env) => ({ ssr: './src/framework/entry.ssr.tsx', }, serverHandler: env.isPreview ? false : undefined, + useBuildAppHook: true, }), rscSsgPlugin(), inspect(), @@ -38,15 +39,9 @@ function rscSsgPlugin(): Plugin[] { } } }, - // Use post ssr writeBundle to wait for app is fully built. - // On Vite 7, you can use `buildApp` hook instead. - writeBundle: { - order: 'post', - async handler() { - if (this.environment.name === 'ssr') { - const config = this.environment.getTopLevelConfig() - await renderStatic(config) - } + buildApp: { + async handler(builder) { + await renderStatic(builder.config) }, }, }, diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index b9b28de71..1e0f84df8 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -202,15 +202,7 @@ export default function vitePluginRsc( clientReferenceMetaMap = sortObject(clientReferenceMetaMap) serverResourcesMetaMap = sortObject(serverResourcesMetaMap) await builder.build(builder.environments.client!) - - const assetsManifestCode = `export default ${serializeValueWithRuntime( - buildAssetsManifest, - )}` - const manifestPath = path.join( - builder.environments!.rsc!.config.build!.outDir!, - BUILD_ASSETS_MANIFEST_NAME, - ) - fs.writeFileSync(manifestPath, assetsManifestCode) + writeAssetsManifest(['rsc']) return } @@ -229,6 +221,22 @@ export default function vitePluginRsc( serverResourcesMetaMap = sortObject(serverResourcesMetaMap) await builder.build(builder.environments.client!) await builder.build(builder.environments.ssr!) + writeAssetsManifest(['ssr', 'rsc']) + } + + function writeAssetsManifest(environmentNames: string[]) { + // output client manifest to non-client build directly. + // this makes server build to be self-contained and deploy-able for cloudflare. + const assetsManifestCode = `export default ${serializeValueWithRuntime( + buildAssetsManifest, + )}` + for (const name of environmentNames) { + const manifestPath = path.join( + config.environments[name]!.build.outDir, + BUILD_ASSETS_MANIFEST_NAME, + ) + fs.writeFileSync(manifestPath, assetsManifestCode) + } } return [ @@ -752,24 +760,6 @@ export default function vitePluginRsc( } return }, - writeBundle() { - // TODO: move this to `buildApp`. - // note that we already do this in buildApp for no-ssr case. - if (this.environment.name === 'ssr') { - // output client manifest to non-client build directly. - // this makes server build to be self-contained and deploy-able for cloudflare. - const assetsManifestCode = `export default ${serializeValueWithRuntime( - buildAssetsManifest, - )}` - for (const name of ['ssr', 'rsc']) { - const manifestPath = path.join( - config.environments[name]!.build.outDir, - BUILD_ASSETS_MANIFEST_NAME, - ) - fs.writeFileSync(manifestPath, assetsManifestCode) - } - } - }, }, createVirtualPlugin('vite-rsc/bootstrap-script-content', function () { assert(this.environment.name !== 'client') From aa956279f8f74e4bc04013e803a3c4d062b6a159 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Fri, 1 Aug 2025 14:20:16 +0900 Subject: [PATCH 162/313] release: plugin-rsc@0.4.16 --- packages/plugin-rsc/CHANGELOG.md | 26 ++++++++++++++++++++++++++ packages/plugin-rsc/package.json | 2 +- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/packages/plugin-rsc/CHANGELOG.md b/packages/plugin-rsc/CHANGELOG.md index 5449f8a6b..b3be96f28 100644 --- a/packages/plugin-rsc/CHANGELOG.md +++ b/packages/plugin-rsc/CHANGELOG.md @@ -1,3 +1,29 @@ +## [0.4.16](https://github.com/vitejs/vite-plugin-react/compare/plugin-rsc@0.4.15...plugin-rsc@0.4.16) (2025-08-01) +### Features + +* merge `plugin-react-oxc` into `plugin-react` ([#609](https://github.com/vitejs/vite-plugin-react/issues/609)) ([133d786](https://github.com/vitejs/vite-plugin-react/commit/133d7865f42aa3376b5d3119fdb6a71eaf600275)) +* **rsc:** add `useBuildAppHook` option to switch `plugin.buildApp` or `builder.buildApp` ([#653](https://github.com/vitejs/vite-plugin-react/issues/653)) ([83a5741](https://github.com/vitejs/vite-plugin-react/commit/83a57414169684bc705a5f6ca13cf097225117d8)) +* **rsc:** support `client` environment as `react-server` ([#657](https://github.com/vitejs/vite-plugin-react/issues/657)) ([5df0070](https://github.com/vitejs/vite-plugin-react/commit/5df00707522ecbcda40f2c53c620f46b517e68e6)) + +### Bug Fixes + +* **react:** use development jsx transform for `NODE_ENV=development` build ([#649](https://github.com/vitejs/vite-plugin-react/issues/649)) ([9ffd86d](https://github.com/vitejs/vite-plugin-react/commit/9ffd86df3c0cfc2060669cac7cc0b86144158b1b)) +* **rsc:** avoid unnecessary server hmr due to tailwind module deps ([#658](https://github.com/vitejs/vite-plugin-react/issues/658)) ([c1383f8](https://github.com/vitejs/vite-plugin-react/commit/c1383f870137c0f152d7687250e8095635a1177c)) + +### Miscellaneous Chores + +* **deps:** update all non-major dependencies ([#639](https://github.com/vitejs/vite-plugin-react/issues/639)) ([1a02ba7](https://github.com/vitejs/vite-plugin-react/commit/1a02ba7f4d3fe4a1696b43bc5161d6d466802faf)) + +### Code Refactoring + +* **rsc:** move `writeManifest` inside `buildApp` hook ([#659](https://github.com/vitejs/vite-plugin-react/issues/659)) ([a34f8c5](https://github.com/vitejs/vite-plugin-react/commit/a34f8c537df2efc27d55a510bfd3597c639842f6)) +* **rsc:** split encryption runtime exports ([#660](https://github.com/vitejs/vite-plugin-react/issues/660)) ([ff44ae4](https://github.com/vitejs/vite-plugin-react/commit/ff44ae49697e6ebca4ae4b241ab8337ebe659b5e)) + +### Tests + +* **rsc:** port transform tests from waku ([#655](https://github.com/vitejs/vite-plugin-react/issues/655)) ([c602225](https://github.com/vitejs/vite-plugin-react/commit/c602225271d4acf462ba00f8d6d8a2e42492c5cd)) +* **rsc:** split more independent tests ([#652](https://github.com/vitejs/vite-plugin-react/issues/652)) ([ac0cac7](https://github.com/vitejs/vite-plugin-react/commit/ac0cac7465cc94e91e8ac40269f36e91599b8162)) + ## [0.4.15](https://github.com/vitejs/vite-plugin-react/compare/plugin-rsc@0.4.14...plugin-rsc@0.4.15) (2025-07-28) ### Features diff --git a/packages/plugin-rsc/package.json b/packages/plugin-rsc/package.json index 41a8f18a0..aca3a329f 100644 --- a/packages/plugin-rsc/package.json +++ b/packages/plugin-rsc/package.json @@ -1,6 +1,6 @@ { "name": "@vitejs/plugin-rsc", - "version": "0.4.15", + "version": "0.4.16", "description": "React Server Components (RSC) support for Vite.", "keywords": [ "vite", From ac20b31279f6884169503ef6e5786639c93251df Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 4 Aug 2025 08:10:50 +0900 Subject: [PATCH 163/313] fix(rsc): keep manually added link stylesheet during dev (#663) --- packages/plugin-rsc/e2e/basic.test.ts | 12 ++++++++++++ .../plugin-rsc/examples/basic/public/test.css | 3 +++ .../basic/src/routes/style-server/server.tsx | 6 ++++++ .../plugin-rsc/examples/basic/vite.config.ts | 2 ++ packages/plugin-rsc/src/plugin.ts | 16 +++++++++------- packages/plugin-rsc/src/ssr.tsx | 5 ++++- 6 files changed, 36 insertions(+), 8 deletions(-) create mode 100644 packages/plugin-rsc/examples/basic/public/test.css diff --git a/packages/plugin-rsc/e2e/basic.test.ts b/packages/plugin-rsc/e2e/basic.test.ts index a2c9e4c20..e228b5914 100644 --- a/packages/plugin-rsc/e2e/basic.test.ts +++ b/packages/plugin-rsc/e2e/basic.test.ts @@ -326,6 +326,10 @@ function defineTest(f: Fixture) { 'color', 'rgb(255, 165, 0)', ) + await expect(page.locator('.test-style-server-manual')).toHaveCSS( + 'color', + 'rgb(255, 165, 0)', + ) }) testNoJs('css @nojs', async ({ page }) => { @@ -335,6 +339,10 @@ function defineTest(f: Fixture) { 'color', 'rgb(255, 165, 0)', ) + await expect(page.locator('.test-style-server-manual')).toHaveCSS( + 'color', + 'rgb(255, 165, 0)', + ) }) async function testCss(page: Page, color = 'rgb(255, 165, 0)') { @@ -453,6 +461,10 @@ function defineTest(f: Fixture) { 'color', 'rgb(255, 165, 0)', ) + await expect(page.locator('.test-style-server-manual')).toHaveCSS( + 'color', + 'rgb(255, 165, 0)', + ) }) // TODO: need a way to add/remove links on server hmr. for now, it requires a manually reload. diff --git a/packages/plugin-rsc/examples/basic/public/test.css b/packages/plugin-rsc/examples/basic/public/test.css new file mode 100644 index 000000000..f1c9489d9 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/public/test.css @@ -0,0 +1,3 @@ +.test-style-server-manual { + color: orange; +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/style-server/server.tsx b/packages/plugin-rsc/examples/basic/src/routes/style-server/server.tsx index 6684e6b5f..661669924 100644 --- a/packages/plugin-rsc/examples/basic/src/routes/style-server/server.tsx +++ b/packages/plugin-rsc/examples/basic/src/routes/style-server/server.tsx @@ -8,6 +8,12 @@ export function TestStyleServer() {
test-css-module-server
+ +
test-style-server-manual
) } diff --git a/packages/plugin-rsc/examples/basic/vite.config.ts b/packages/plugin-rsc/examples/basic/vite.config.ts index d4ee08d3b..94df04e00 100644 --- a/packages/plugin-rsc/examples/basic/vite.config.ts +++ b/packages/plugin-rsc/examples/basic/vite.config.ts @@ -123,6 +123,8 @@ export default { fetch: handler }; source: `\ /favicon.ico Cache-Control: public, max-age=3600, s-maxage=3600 +/test.css + Cache-Control: public, max-age=3600, s-maxage=3600 /assets/* Cache-Control: public, max-age=31536000, immutable `, diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index 1e0f84df8..01a7e1630 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -829,14 +829,16 @@ window.__vite_plugin_react_preamble_installed__ = true; const resolvedEntry = await this.resolve(source) assert(resolvedEntry, `[vite-rsc] failed to resolve entry '${source}'`) code += `await import(${JSON.stringify(resolvedEntry.id)});` - // TODO - // should remove only the ones we injected during ssr, which are duplicated by browser imports for HMR. - // technically this doesn't have to wait for "vite:beforeUpdate" and should do it right after browser css import. - // TODO: there migth be a clever way to let Vite deduplicate itself. - // cf. https://github.com/withastro/astro/blob/acb9b302f56e38833a1ab01147f7fde0bf967889/packages/astro/src/vite-plugin-astro-server/pipeline.ts#L133-L135 - code += ` + // TODO: this doesn't have to wait for "vite:beforeUpdate" and should do it right after browser css import. + code += /* js */ ` const ssrCss = document.querySelectorAll("link[rel='stylesheet']"); -import.meta.hot.on("vite:beforeUpdate", () => ssrCss.forEach(node => node.remove())); +import.meta.hot.on("vite:beforeUpdate", () => { + ssrCss.forEach(node => { + if (node.dataset.precedence?.startsWith("vite-rsc/")) { + node.remove(); + } + }); +}); ` // close error overlay after syntax error is fixed and hmr is triggered. // https://github.com/vitejs/vite/blob/8033e5bf8d3ff43995d0620490ed8739c59171dd/packages/vite/src/client/client.ts#L318-L320 diff --git a/packages/plugin-rsc/src/ssr.tsx b/packages/plugin-rsc/src/ssr.tsx index dec5e6c17..9cbaf8545 100644 --- a/packages/plugin-rsc/src/ssr.tsx +++ b/packages/plugin-rsc/src/ssr.tsx @@ -60,6 +60,9 @@ function preloadDeps(deps: ResolvedAssetDeps) { }) } for (const href of deps.css) { - ReactDOM.preinit(href, { as: 'style' }) + ReactDOM.preinit(href, { + as: 'style', + precedence: 'vite-rsc/client-reference', + }) } } From f4e0d2aa7658927684652eaf2a4d599c3aa86fbd Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 4 Aug 2025 08:28:17 +0900 Subject: [PATCH 164/313] chore: add copilot-setup-steps.yml (#667) --- .github/workflows/copilot-setup-steps.yml | 28 +++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 .github/workflows/copilot-setup-steps.yml diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml new file mode 100644 index 000000000..9ed224f8c --- /dev/null +++ b/.github/workflows/copilot-setup-steps.yml @@ -0,0 +1,28 @@ +# https://docs.github.com/en/copilot/how-tos/use-copilot-agents/coding-agent/customize-the-agent-environment + +name: "Copilot Setup Steps" + +on: + workflow_dispatch: + push: + paths: + - .github/workflows/copilot-setup-steps.yml + pull_request: + paths: + - .github/workflows/copilot-setup-steps.yml + +jobs: + copilot-setup-steps: + runs-on: ubuntu-latest + + permissions: + contents: read + + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 22 + - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 + - run: pnpm i + - run: pnpm exec playwright install chromium From 26ad4adcb69affb8932151f245b25a8fcf95c85a Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Mon, 4 Aug 2025 12:00:41 +0900 Subject: [PATCH 165/313] test(rsc): test `React.cache` (#668) Co-authored-by: Hiroshi Ogawa --- packages/plugin-rsc/e2e/basic.test.ts | 13 ++++++ .../basic/src/routes/react-cache/server.tsx | 45 +++++++++++++++++++ .../examples/basic/src/routes/root.tsx | 2 + 3 files changed, 60 insertions(+) create mode 100644 packages/plugin-rsc/examples/basic/src/routes/react-cache/server.tsx diff --git a/packages/plugin-rsc/e2e/basic.test.ts b/packages/plugin-rsc/e2e/basic.test.ts index e228b5914..7b14539b6 100644 --- a/packages/plugin-rsc/e2e/basic.test.ts +++ b/packages/plugin-rsc/e2e/basic.test.ts @@ -1006,4 +1006,17 @@ function defineTest(f: Fixture) { 'test-browser-only: loading...', ) }) + + test('React.cache', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await page.getByRole('link', { name: 'test-react-cache' }).click() + await expect(page.getByTestId('test-react-cache-result')).toHaveText( + '(cacheFnCount = 2, nonCacheFnCount = 3)', + ) + await page.reload() + await expect(page.getByTestId('test-react-cache-result')).toHaveText( + '(cacheFnCount = 4, nonCacheFnCount = 6)', + ) + }) } diff --git a/packages/plugin-rsc/examples/basic/src/routes/react-cache/server.tsx b/packages/plugin-rsc/examples/basic/src/routes/react-cache/server.tsx new file mode 100644 index 000000000..d977a7a76 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/react-cache/server.tsx @@ -0,0 +1,45 @@ +import React from 'react' + +// Note that `React.cache` doesn't have effect inside action +// since it's outside of RSC render request context. +// https://github.com/hi-ogawa/reproductions/tree/main/next-rsc-action-cache + +export async function TestReactCache(props: { url: URL }) { + if (props.url.searchParams.has('test-react-cache')) { + await Promise.all([ + testCacheFn('test1'), + testCacheFn('test2'), + testCacheFn('test1'), + testNonCacheFn('test1'), + testNonCacheFn('test2'), + testNonCacheFn('test1'), + ]) + } else { + cacheFnCount = 0 + nonCacheFnCount = 0 + } + + return ( +
+ test-react-cache{' '} + + (cacheFnCount = {cacheFnCount}, nonCacheFnCount = {nonCacheFnCount}) + +
+ ) +} + +let cacheFnCount = 0 +let nonCacheFnCount = 0 + +const testCacheFn = React.cache(async (...args: unknown[]) => { + console.log('[cached:args]', args) + cacheFnCount++ + await new Promise((resolve) => setTimeout(resolve, 20)) +}) + +const testNonCacheFn = async (...args: unknown[]) => { + console.log('[not-cached:args]', args) + nonCacheFnCount++ + await new Promise((resolve) => setTimeout(resolve, 20)) +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/root.tsx b/packages/plugin-rsc/examples/basic/src/routes/root.tsx index 1bda17eed..b3a61be94 100644 --- a/packages/plugin-rsc/examples/basic/src/routes/root.tsx +++ b/packages/plugin-rsc/examples/basic/src/routes/root.tsx @@ -27,6 +27,7 @@ import { TestTailwindClient } from './tailwind/client' import { TestTailwindServer } from './tailwind/server' import { TestTemporaryReference } from './temporary-reference/client' import { TestUseCache } from './use-cache/server' +import { TestReactCache } from './react-cache/server' import { TestHydrationMismatch } from './hydration-mismatch/server' import { TestBrowserOnly } from './browser-only/client' import { TestTransitiveCjsClient } from './deps/transitive-cjs/client' @@ -75,6 +76,7 @@ export function Root(props: { url: URL }) { + ) From 61d777ddc8524256f890f43a2a78dbfbfd1e97ac Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Aug 2025 14:08:27 +0900 Subject: [PATCH 166/313] fix(deps): update all non-major dependencies (#670) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Hiroshi Ogawa --- package.json | 14 +- packages/plugin-react-oxc/package.json | 4 +- packages/plugin-react-swc/package.json | 10 +- .../playground/base-path/package.json | 8 +- .../playground/class-components/package.json | 8 +- .../playground/decorators/package.json | 8 +- .../playground/emotion-plugin/package.json | 8 +- .../playground/emotion/package.json | 8 +- .../playground/hmr/package.json | 8 +- .../playground/mdx/package.json | 8 +- .../playground/shadow-export/package.json | 8 +- .../playground/styled-components/package.json | 10 +- .../playground/ts-lib/package.json | 8 +- .../playground/worker/package.json | 8 +- packages/plugin-react/package.json | 10 +- .../plugin-rsc/examples/basic/package.json | 10 +- .../basic/src/routes/serialization/server.tsx | 2 +- .../examples/browser-mode/package.json | 8 +- .../plugin-rsc/examples/no-ssr/package.json | 8 +- .../examples/react-router/package.json | 12 +- packages/plugin-rsc/examples/ssg/package.json | 8 +- .../examples/starter-cf-single/package.json | 10 +- .../plugin-rsc/examples/starter/package.json | 8 +- packages/plugin-rsc/package.json | 16 +- .../src/utils/encryption-runtime.ts | 7 +- playground/class-components/package.json | 8 +- playground/compiler-react-18/package.json | 2 +- playground/compiler/package.json | 10 +- playground/hmr-false/package.json | 8 +- playground/hook-with-jsx/package.json | 8 +- playground/include-node-modules/package.json | 8 +- playground/mdx/package.json | 8 +- playground/react-classic/package.json | 4 +- playground/react-emotion/package.json | 4 +- playground/react-env/package.json | 4 +- playground/react-sourcemap/package.json | 4 +- playground/react/package.json | 4 +- playground/ssr-react/package.json | 4 +- pnpm-lock.yaml | 1298 +++++++++-------- pnpm-workspace.yaml | 2 +- 40 files changed, 806 insertions(+), 787 deletions(-) diff --git a/package.json b/package.json index 05d7c184e..d981abee2 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "engines": { "node": "^20.19.0 || >=22.12.0" }, - "packageManager": "pnpm@10.13.1", + "packageManager": "pnpm@10.14.0", "homepage": "https://github.com/vitejs/vite-plugin-react/", "keywords": [ "frontend", @@ -35,21 +35,21 @@ "devDependencies": { "@eslint/js": "^9.32.0", "@types/fs-extra": "^11.0.4", - "@types/node": "^22.16.5", + "@types/node": "^22.17.0", "@vitejs/release-scripts": "^1.6.0", "eslint": "^9.32.0", "eslint-plugin-import-x": "^4.16.1", - "eslint-plugin-n": "^17.21.2", - "eslint-plugin-regexp": "^2.9.0", + "eslint-plugin-n": "^17.21.3", + "eslint-plugin-regexp": "^2.9.1", "fs-extra": "^11.3.0", "globals": "^16.3.0", "lint-staged": "^15.5.2", "picocolors": "^1.1.1", - "playwright-chromium": "^1.54.1", + "playwright-chromium": "^1.54.2", "prettier": "^3.6.2", - "simple-git-hooks": "^2.13.0", + "simple-git-hooks": "^2.13.1", "tsx": "^4.20.3", - "typescript": "^5.8.3", + "typescript": "^5.9.2", "typescript-eslint": "^8.38.0", "vite": "^7.0.6", "vitest": "^3.2.4" diff --git a/packages/plugin-react-oxc/package.json b/packages/plugin-react-oxc/package.json index 1fd95d4fd..9ee81666d 100644 --- a/packages/plugin-react-oxc/package.json +++ b/packages/plugin-react-oxc/package.json @@ -43,10 +43,10 @@ }, "devDependencies": { "@vitejs/react-common": "workspace:*", - "tsdown": "^0.13.0", + "tsdown": "^0.13.2", "vite": "catalog:rolldown-vite" }, "dependencies": { - "@rolldown/pluginutils": "1.0.0-beta.29" + "@rolldown/pluginutils": "1.0.0-beta.30" } } diff --git a/packages/plugin-react-swc/package.json b/packages/plugin-react-swc/package.json index 1e564f97a..21c41ef9d 100644 --- a/packages/plugin-react-swc/package.json +++ b/packages/plugin-react-swc/package.json @@ -32,20 +32,20 @@ }, "homepage": "https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react-swc#readme", "dependencies": { - "@rolldown/pluginutils": "1.0.0-beta.29", + "@rolldown/pluginutils": "1.0.0-beta.30", "@swc/core": "^1.13.2" }, "peerDependencies": { "vite": "^4 || ^5 || ^6 || ^7" }, "devDependencies": { - "@playwright/test": "^1.54.1", + "@playwright/test": "^1.54.2", "@types/fs-extra": "^11.0.4", - "@types/node": "^22.16.5", + "@types/node": "^22.17.0", "@vitejs/react-common": "workspace:*", "fs-extra": "^11.3.0", "prettier": "^3.0.3", - "tsdown": "^0.13.0", - "typescript": "^5.8.3" + "tsdown": "^0.13.2", + "typescript": "^5.9.2" } } diff --git a/packages/plugin-react-swc/playground/base-path/package.json b/packages/plugin-react-swc/playground/base-path/package.json index 9be36412d..c620022d6 100644 --- a/packages/plugin-react-swc/playground/base-path/package.json +++ b/packages/plugin-react-swc/playground/base-path/package.json @@ -8,12 +8,12 @@ "preview": "vite preview" }, "dependencies": { - "react": "^19.1.0", - "react-dom": "^19.1.0" + "react": "^19.1.1", + "react-dom": "^19.1.1" }, "devDependencies": { - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", "@vitejs/plugin-react-swc": "../../dist" } } diff --git a/packages/plugin-react-swc/playground/class-components/package.json b/packages/plugin-react-swc/playground/class-components/package.json index bd6956ebd..8e5eb2751 100644 --- a/packages/plugin-react-swc/playground/class-components/package.json +++ b/packages/plugin-react-swc/playground/class-components/package.json @@ -8,12 +8,12 @@ "preview": "vite preview" }, "dependencies": { - "react": "^19.1.0", - "react-dom": "^19.1.0" + "react": "^19.1.1", + "react-dom": "^19.1.1" }, "devDependencies": { - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", "@vitejs/plugin-react-swc": "../../dist" } } diff --git a/packages/plugin-react-swc/playground/decorators/package.json b/packages/plugin-react-swc/playground/decorators/package.json index 7b7f9d74c..cd84a7087 100644 --- a/packages/plugin-react-swc/playground/decorators/package.json +++ b/packages/plugin-react-swc/playground/decorators/package.json @@ -8,12 +8,12 @@ "preview": "vite preview" }, "dependencies": { - "react": "^19.1.0", - "react-dom": "^19.1.0" + "react": "^19.1.1", + "react-dom": "^19.1.1" }, "devDependencies": { - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", "@vitejs/plugin-react-swc": "../../dist" } } diff --git a/packages/plugin-react-swc/playground/emotion-plugin/package.json b/packages/plugin-react-swc/playground/emotion-plugin/package.json index 4e779c991..718a30295 100644 --- a/packages/plugin-react-swc/playground/emotion-plugin/package.json +++ b/packages/plugin-react-swc/playground/emotion-plugin/package.json @@ -10,12 +10,12 @@ "dependencies": { "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.1", - "react": "^19.1.0", - "react-dom": "^19.1.0" + "react": "^19.1.1", + "react-dom": "^19.1.1" }, "devDependencies": { - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", "@vitejs/plugin-react-swc": "../../dist", "@swc/plugin-emotion": "^11.0.0" } diff --git a/packages/plugin-react-swc/playground/emotion/package.json b/packages/plugin-react-swc/playground/emotion/package.json index 774cfcba8..fb0ea41d8 100644 --- a/packages/plugin-react-swc/playground/emotion/package.json +++ b/packages/plugin-react-swc/playground/emotion/package.json @@ -10,12 +10,12 @@ "dependencies": { "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.1", - "react": "^19.1.0", - "react-dom": "^19.1.0" + "react": "^19.1.1", + "react-dom": "^19.1.1" }, "devDependencies": { - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", "@vitejs/plugin-react-swc": "../../dist" } } diff --git a/packages/plugin-react-swc/playground/hmr/package.json b/packages/plugin-react-swc/playground/hmr/package.json index 0466f7d05..056be2a0d 100644 --- a/packages/plugin-react-swc/playground/hmr/package.json +++ b/packages/plugin-react-swc/playground/hmr/package.json @@ -8,12 +8,12 @@ "preview": "vite preview" }, "dependencies": { - "react": "^19.1.0", - "react-dom": "^19.1.0" + "react": "^19.1.1", + "react-dom": "^19.1.1" }, "devDependencies": { - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", "@vitejs/plugin-react-swc": "../../dist" } } diff --git a/packages/plugin-react-swc/playground/mdx/package.json b/packages/plugin-react-swc/playground/mdx/package.json index b468958ff..0cfb48fd7 100644 --- a/packages/plugin-react-swc/playground/mdx/package.json +++ b/packages/plugin-react-swc/playground/mdx/package.json @@ -8,13 +8,13 @@ "preview": "vite preview" }, "dependencies": { - "react": "^19.1.0", - "react-dom": "^19.1.0" + "react": "^19.1.1", + "react-dom": "^19.1.1" }, "devDependencies": { "@mdx-js/rollup": "^3.1.0", - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", "@vitejs/plugin-react-swc": "../../dist" } } diff --git a/packages/plugin-react-swc/playground/shadow-export/package.json b/packages/plugin-react-swc/playground/shadow-export/package.json index 60f0e552a..b179bb1b6 100644 --- a/packages/plugin-react-swc/playground/shadow-export/package.json +++ b/packages/plugin-react-swc/playground/shadow-export/package.json @@ -8,12 +8,12 @@ "preview": "vite preview" }, "dependencies": { - "react": "^19.1.0", - "react-dom": "^19.1.0" + "react": "^19.1.1", + "react-dom": "^19.1.1" }, "devDependencies": { - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", "@vitejs/plugin-react-swc": "../../dist" } } diff --git a/packages/plugin-react-swc/playground/styled-components/package.json b/packages/plugin-react-swc/playground/styled-components/package.json index 73b291235..0fb4edd99 100644 --- a/packages/plugin-react-swc/playground/styled-components/package.json +++ b/packages/plugin-react-swc/playground/styled-components/package.json @@ -8,15 +8,15 @@ "preview": "vite preview" }, "dependencies": { - "react": "^19.1.0", - "react-dom": "^19.1.0", - "react-is": "^19.1.0", + "react": "^19.1.1", + "react-dom": "^19.1.1", + "react-is": "^19.1.1", "styled-components": "^6.1.19" }, "devDependencies": { "@swc/plugin-styled-components": "^9.0.0", - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", "@types/styled-components": "^5.1.34", "@vitejs/plugin-react-swc": "../../dist" } diff --git a/packages/plugin-react-swc/playground/ts-lib/package.json b/packages/plugin-react-swc/playground/ts-lib/package.json index 28b5a65f6..8d8050446 100644 --- a/packages/plugin-react-swc/playground/ts-lib/package.json +++ b/packages/plugin-react-swc/playground/ts-lib/package.json @@ -9,12 +9,12 @@ }, "dependencies": { "@vitejs/test-dep-non-js": "file:./test-dep/non-js", - "react": "^19.1.0", - "react-dom": "^19.1.0" + "react": "^19.1.1", + "react-dom": "^19.1.1" }, "devDependencies": { - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", "@vitejs/plugin-react-swc": "../../dist" } } diff --git a/packages/plugin-react-swc/playground/worker/package.json b/packages/plugin-react-swc/playground/worker/package.json index fae57dcb2..61ead9aa6 100644 --- a/packages/plugin-react-swc/playground/worker/package.json +++ b/packages/plugin-react-swc/playground/worker/package.json @@ -8,12 +8,12 @@ "preview": "vite preview" }, "dependencies": { - "react": "^19.1.0", - "react-dom": "^19.1.0" + "react": "^19.1.1", + "react-dom": "^19.1.1" }, "devDependencies": { - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", "@vitejs/plugin-react-swc": "../../dist" } } diff --git a/packages/plugin-react/package.json b/packages/plugin-react/package.json index 9ad551a41..1bb0aec33 100644 --- a/packages/plugin-react/package.json +++ b/packages/plugin-react/package.json @@ -43,7 +43,7 @@ "@babel/core": "^7.28.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", - "@rolldown/pluginutils": "1.0.0-beta.29", + "@rolldown/pluginutils": "1.0.0-beta.30", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, @@ -53,10 +53,10 @@ "devDependencies": { "@vitejs/react-common": "workspace:*", "babel-plugin-react-compiler": "19.1.0-rc.2", - "react": "^19.1.0", - "react-dom": "^19.1.0", - "rolldown": "1.0.0-beta.29", - "tsdown": "^0.13.0", + "react": "^19.1.1", + "react-dom": "^19.1.1", + "rolldown": "1.0.0-beta.30", + "tsdown": "^0.13.2", "vitest": "^3.2.4" } } diff --git a/packages/plugin-rsc/examples/basic/package.json b/packages/plugin-rsc/examples/basic/package.json index bbdffa9bd..e0b2de770 100644 --- a/packages/plugin-rsc/examples/basic/package.json +++ b/packages/plugin-rsc/examples/basic/package.json @@ -13,13 +13,13 @@ }, "dependencies": { "@vitejs/plugin-rsc": "latest", - "react": "^19.1.0", - "react-dom": "^19.1.0" + "react": "^19.1.1", + "react-dom": "^19.1.1" }, "devDependencies": { "@tailwindcss/vite": "^4.1.11", - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "latest", "@vitejs/test-dep-transitive-cjs": "file:./test-dep/transitive-cjs", "@vitejs/test-dep-client-in-server": "file:./test-dep/client-in-server", @@ -31,6 +31,6 @@ "tailwindcss": "^4.1.11", "vite": "^7.0.6", "vite-plugin-inspect": "^11.3.2", - "wrangler": "^4.26.0" + "wrangler": "^4.27.0" } } diff --git a/packages/plugin-rsc/examples/basic/src/routes/serialization/server.tsx b/packages/plugin-rsc/examples/basic/src/routes/serialization/server.tsx index 7930bf7ad..ffb7b9699 100644 --- a/packages/plugin-rsc/examples/basic/src/routes/serialization/server.tsx +++ b/packages/plugin-rsc/examples/basic/src/routes/serialization/server.tsx @@ -10,7 +10,7 @@ export function TestSerializationServer() { let serialized = renderToReadableStream(original) // debug serialization if (0) { - serialized = serialized + serialized = (serialized as ReadableStream>) .pipeThrough(new TextDecoderStream()) .pipeThrough( new TransformStream({ diff --git a/packages/plugin-rsc/examples/browser-mode/package.json b/packages/plugin-rsc/examples/browser-mode/package.json index a4f517d27..ab6e1a85f 100644 --- a/packages/plugin-rsc/examples/browser-mode/package.json +++ b/packages/plugin-rsc/examples/browser-mode/package.json @@ -11,12 +11,12 @@ }, "dependencies": { "@vitejs/plugin-rsc": "latest", - "react": "^19.1.0", - "react-dom": "^19.1.0" + "react": "^19.1.1", + "react-dom": "^19.1.1" }, "devDependencies": { - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "latest", "vite": "^7.0.6" } diff --git a/packages/plugin-rsc/examples/no-ssr/package.json b/packages/plugin-rsc/examples/no-ssr/package.json index 2e6ce1ac9..9acf0796d 100644 --- a/packages/plugin-rsc/examples/no-ssr/package.json +++ b/packages/plugin-rsc/examples/no-ssr/package.json @@ -11,12 +11,12 @@ }, "dependencies": { "@vitejs/plugin-rsc": "latest", - "react": "^19.1.0", - "react-dom": "^19.1.0" + "react": "^19.1.1", + "react-dom": "^19.1.1" }, "devDependencies": { - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "latest", "vite": "^7.0.6" } diff --git a/packages/plugin-rsc/examples/react-router/package.json b/packages/plugin-rsc/examples/react-router/package.json index b1d88dfc0..ab1240f67 100644 --- a/packages/plugin-rsc/examples/react-router/package.json +++ b/packages/plugin-rsc/examples/react-router/package.json @@ -14,21 +14,21 @@ }, "dependencies": { "@vitejs/plugin-rsc": "latest", - "react": "^19.1.0", - "react-dom": "^19.1.0", + "react": "^19.1.1", + "react-dom": "^19.1.1", "react-router": "7.7.0" }, "devDependencies": { - "@cloudflare/vite-plugin": "^1.10.1", + "@cloudflare/vite-plugin": "^1.11.0", "@react-router/dev": "7.7.0", "@tailwindcss/typography": "^0.5.16", "@tailwindcss/vite": "^4.1.11", - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "latest", "tailwindcss": "^4.1.11", "vite": "^7.0.6", "vite-plugin-inspect": "^11.3.2", - "wrangler": "^4.26.0" + "wrangler": "^4.27.0" } } diff --git a/packages/plugin-rsc/examples/ssg/package.json b/packages/plugin-rsc/examples/ssg/package.json index faa07634f..476eaa626 100644 --- a/packages/plugin-rsc/examples/ssg/package.json +++ b/packages/plugin-rsc/examples/ssg/package.json @@ -11,13 +11,13 @@ }, "dependencies": { "@vitejs/plugin-rsc": "latest", - "react": "^19.1.0", - "react-dom": "^19.1.0" + "react": "^19.1.1", + "react-dom": "^19.1.1" }, "devDependencies": { "@mdx-js/rollup": "^3.1.0", - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "latest", "vite-plugin-inspect": "^11.3.2" } diff --git a/packages/plugin-rsc/examples/starter-cf-single/package.json b/packages/plugin-rsc/examples/starter-cf-single/package.json index 98f455813..fb8b626f0 100644 --- a/packages/plugin-rsc/examples/starter-cf-single/package.json +++ b/packages/plugin-rsc/examples/starter-cf-single/package.json @@ -12,13 +12,13 @@ }, "dependencies": { "@vitejs/plugin-rsc": "latest", - "react": "^19.1.0", - "react-dom": "^19.1.0" + "react": "^19.1.1", + "react-dom": "^19.1.1" }, "devDependencies": { - "@cloudflare/vite-plugin": "^1.10.1", - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", + "@cloudflare/vite-plugin": "^1.11.0", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "latest" } } diff --git a/packages/plugin-rsc/examples/starter/package.json b/packages/plugin-rsc/examples/starter/package.json index 20f3bc8ca..5f1c0de41 100644 --- a/packages/plugin-rsc/examples/starter/package.json +++ b/packages/plugin-rsc/examples/starter/package.json @@ -11,12 +11,12 @@ }, "dependencies": { "@vitejs/plugin-rsc": "latest", - "react": "^19.1.0", - "react-dom": "^19.1.0" + "react": "^19.1.1", + "react-dom": "^19.1.1" }, "devDependencies": { - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "latest", "rsc-html-stream": "^0.0.7", "vite": "^7.0.6", diff --git a/packages/plugin-rsc/package.json b/packages/plugin-rsc/package.json index aca3a329f..a48532370 100644 --- a/packages/plugin-rsc/package.json +++ b/packages/plugin-rsc/package.json @@ -48,19 +48,19 @@ }, "devDependencies": { "@hiogawa/utils": "^1.7.0", - "@playwright/test": "^1.54.1", + "@playwright/test": "^1.54.2", "@tsconfig/strictest": "^2.0.5", "@types/estree": "^1.0.8", - "@types/node": "^22.16.5", - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", + "@types/node": "^22.17.0", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "workspace:*", - "react": "^19.1.0", - "react-dom": "^19.1.0", - "react-server-dom-webpack": "^19.1.0", + "react": "^19.1.1", + "react-dom": "^19.1.1", + "react-server-dom-webpack": "^19.1.1", "rsc-html-stream": "^0.0.7", "tinyexec": "^1.0.1", - "tsdown": "^0.13.0", + "tsdown": "^0.13.2", "vite-plugin-inspect": "^11.3.2" }, "peerDependencies": { diff --git a/packages/plugin-rsc/src/utils/encryption-runtime.ts b/packages/plugin-rsc/src/utils/encryption-runtime.ts index 86a3c02eb..84b307ce0 100644 --- a/packages/plugin-rsc/src/utils/encryption-runtime.ts +++ b/packages/plugin-rsc/src/utils/encryption-runtime.ts @@ -19,7 +19,10 @@ export async function encryptActionBoundArgs( ): Promise { const serialized = renderToReadableStream(originalValue) const serializedBuffer = await concatArrayStream(serialized) - return encryptBuffer(serializedBuffer, await getEncryptionKey()) + return encryptBuffer( + serializedBuffer as BufferSource, + await getEncryptionKey(), + ) } export async function decryptActionBoundArgs( @@ -37,7 +40,7 @@ const getEncryptionKey = /* #__PURE__ */ once(async () => { const resolved = await encryptionKeySource() const key = await crypto.subtle.importKey( 'raw', - fromBase64(resolved), + fromBase64(resolved) as BufferSource, { name: 'AES-GCM', }, diff --git a/playground/class-components/package.json b/playground/class-components/package.json index 6a4e5cf23..ecb009386 100644 --- a/playground/class-components/package.json +++ b/playground/class-components/package.json @@ -8,12 +8,12 @@ "preview": "vite preview" }, "dependencies": { - "react": "^19.1.0", - "react-dom": "^19.1.0" + "react": "^19.1.1", + "react-dom": "^19.1.1" }, "devDependencies": { - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "workspace:*" } } diff --git a/playground/compiler-react-18/package.json b/playground/compiler-react-18/package.json index e4450c986..7d761779c 100644 --- a/playground/compiler-react-18/package.json +++ b/playground/compiler-react-18/package.json @@ -18,6 +18,6 @@ "@types/react-dom": "^18.3.6", "@vitejs/plugin-react": "workspace:*", "babel-plugin-react-compiler": "19.1.0-rc.2", - "typescript": "^5.8.3" + "typescript": "^5.9.2" } } diff --git a/playground/compiler/package.json b/playground/compiler/package.json index ef1816475..e1d839c3b 100644 --- a/playground/compiler/package.json +++ b/playground/compiler/package.json @@ -8,15 +8,15 @@ "preview": "vite preview" }, "dependencies": { - "react": "^19.1.0", - "react-dom": "^19.1.0" + "react": "^19.1.1", + "react-dom": "^19.1.1" }, "devDependencies": { "@babel/plugin-transform-react-jsx-development": "^7.27.1", - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "workspace:*", "babel-plugin-react-compiler": "19.1.0-rc.2", - "typescript": "^5.8.3" + "typescript": "^5.9.2" } } diff --git a/playground/hmr-false/package.json b/playground/hmr-false/package.json index 4fa2e178b..69f2e2afe 100644 --- a/playground/hmr-false/package.json +++ b/playground/hmr-false/package.json @@ -9,12 +9,12 @@ "preview": "vite preview" }, "dependencies": { - "react": "^19.1.0", - "react-dom": "^19.1.0" + "react": "^19.1.1", + "react-dom": "^19.1.1" }, "devDependencies": { - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "workspace:*" } } diff --git a/playground/hook-with-jsx/package.json b/playground/hook-with-jsx/package.json index 9cd325011..6cd521df3 100644 --- a/playground/hook-with-jsx/package.json +++ b/playground/hook-with-jsx/package.json @@ -8,12 +8,12 @@ "preview": "vite preview" }, "dependencies": { - "react": "^19.1.0", - "react-dom": "^19.1.0" + "react": "^19.1.1", + "react-dom": "^19.1.1" }, "devDependencies": { - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "workspace:*" } } diff --git a/playground/include-node-modules/package.json b/playground/include-node-modules/package.json index 7eb9673bb..ca2b602f9 100644 --- a/playground/include-node-modules/package.json +++ b/playground/include-node-modules/package.json @@ -8,13 +8,13 @@ "preview": "vite preview" }, "dependencies": { - "react": "^19.1.0", - "react-dom": "^19.1.0" + "react": "^19.1.1", + "react-dom": "^19.1.1" }, "devDependencies": { "@types/babel__core": "^7.20.5", - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "workspace:*", "@vitejs/test-package": "file:./test-package" } diff --git a/playground/mdx/package.json b/playground/mdx/package.json index ead34e015..286fcb0ec 100644 --- a/playground/mdx/package.json +++ b/playground/mdx/package.json @@ -8,13 +8,13 @@ "preview": "vite preview" }, "dependencies": { - "react": "^19.1.0", - "react-dom": "^19.1.0" + "react": "^19.1.1", + "react-dom": "^19.1.1" }, "devDependencies": { "@mdx-js/rollup": "^3.1.0", - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "workspace:*" } } diff --git a/playground/react-classic/package.json b/playground/react-classic/package.json index 93bb56f60..fbb26c9a8 100644 --- a/playground/react-classic/package.json +++ b/playground/react-classic/package.json @@ -9,8 +9,8 @@ "preview": "vite preview" }, "dependencies": { - "react": "^19.1.0", - "react-dom": "^19.1.0" + "react": "^19.1.1", + "react-dom": "^19.1.1" }, "devDependencies": { "@vitejs/plugin-react": "workspace:*" diff --git a/playground/react-emotion/package.json b/playground/react-emotion/package.json index d8d1f113a..fcad26419 100644 --- a/playground/react-emotion/package.json +++ b/playground/react-emotion/package.json @@ -11,8 +11,8 @@ "dependencies": { "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.1", - "react": "^19.1.0", - "react-dom": "^19.1.0", + "react": "^19.1.1", + "react-dom": "^19.1.1", "react-switch": "^7.1.0" }, "devDependencies": { diff --git a/playground/react-env/package.json b/playground/react-env/package.json index c0f990c7a..97b191092 100644 --- a/playground/react-env/package.json +++ b/playground/react-env/package.json @@ -9,8 +9,8 @@ "preview": "vite preview" }, "dependencies": { - "react": "^19.1.0", - "react-dom": "^19.1.0" + "react": "^19.1.1", + "react-dom": "^19.1.1" }, "devDependencies": { "@vitejs/plugin-react": "workspace:*" diff --git a/playground/react-sourcemap/package.json b/playground/react-sourcemap/package.json index 4bcd6e221..9184051ba 100644 --- a/playground/react-sourcemap/package.json +++ b/playground/react-sourcemap/package.json @@ -11,8 +11,8 @@ "preview": "vite preview" }, "dependencies": { - "react": "^19.1.0", - "react-dom": "^19.1.0" + "react": "^19.1.1", + "react-dom": "^19.1.1" }, "devDependencies": { "@vitejs/plugin-react": "workspace:*" diff --git a/playground/react/package.json b/playground/react/package.json index b3d6b13cb..2f41c4e78 100644 --- a/playground/react/package.json +++ b/playground/react/package.json @@ -10,8 +10,8 @@ }, "dependencies": { "jsx-entry": "link:./jsx-entry", - "react": "^19.1.0", - "react-dom": "^19.1.0" + "react": "^19.1.1", + "react-dom": "^19.1.1" }, "devDependencies": { "@vitejs/plugin-react": "workspace:*" diff --git a/playground/ssr-react/package.json b/playground/ssr-react/package.json index f0091a61a..e05840e86 100644 --- a/playground/ssr-react/package.json +++ b/playground/ssr-react/package.json @@ -8,8 +8,8 @@ "preview": "vite preview" }, "dependencies": { - "react": "^19.1.0", - "react-dom": "^19.1.0" + "react": "^19.1.1", + "react-dom": "^19.1.1" }, "devDependencies": { "@vitejs/plugin-react": "workspace:*" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 889b162a4..93502e92c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,8 +7,8 @@ settings: catalogs: rolldown-vite: vite: - specifier: npm:rolldown-vite@^7.0.11 - version: 7.0.11 + specifier: npm:rolldown-vite@^7.0.12 + version: 7.0.12 overrides: '@types/estree': ^1.0.8 @@ -24,8 +24,8 @@ importers: specifier: ^11.0.4 version: 11.0.4 '@types/node': - specifier: ^22.16.5 - version: 22.16.5 + specifier: ^22.17.0 + version: 22.17.0 '@vitejs/release-scripts': specifier: ^1.6.0 version: 1.6.0(conventional-commits-filter@5.0.0) @@ -34,13 +34,13 @@ importers: version: 9.32.0(jiti@2.4.2) eslint-plugin-import-x: specifier: ^4.16.1 - version: 4.16.1(@typescript-eslint/utils@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.32.0(jiti@2.4.2)) + version: 4.16.1(@typescript-eslint/utils@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2))(eslint@9.32.0(jiti@2.4.2)) eslint-plugin-n: - specifier: ^17.21.2 - version: 17.21.2(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3) + specifier: ^17.21.3 + version: 17.21.3(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2) eslint-plugin-regexp: - specifier: ^2.9.0 - version: 2.9.0(eslint@9.32.0(jiti@2.4.2)) + specifier: ^2.9.1 + version: 2.9.1(eslint@9.32.0(jiti@2.4.2)) fs-extra: specifier: ^11.3.0 version: 11.3.0 @@ -54,29 +54,29 @@ importers: specifier: ^1.1.1 version: 1.1.1 playwright-chromium: - specifier: ^1.54.1 - version: 1.54.1 + specifier: ^1.54.2 + version: 1.54.2 prettier: specifier: ^3.6.2 version: 3.6.2 simple-git-hooks: - specifier: ^2.13.0 - version: 2.13.0 + specifier: ^2.13.1 + version: 2.13.1 tsx: specifier: ^4.20.3 version: 4.20.3 typescript: - specifier: ^5.8.3 - version: 5.8.3 + specifier: ^5.9.2 + version: 5.9.2 typescript-eslint: specifier: ^8.38.0 - version: 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3) + version: 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2) vite: specifier: ^7.0.6 - version: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + version: 7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) packages/common: {} @@ -92,8 +92,8 @@ importers: specifier: ^7.27.1 version: 7.27.1(@babel/core@7.28.0) '@rolldown/pluginutils': - specifier: 1.0.0-beta.29 - version: 1.0.0-beta.29 + specifier: 1.0.0-beta.30 + version: 1.0.0-beta.30 '@types/babel__core': specifier: ^7.20.5 version: 7.20.5 @@ -108,55 +108,55 @@ importers: specifier: 19.1.0-rc.2 version: 19.1.0-rc.2 react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) rolldown: - specifier: 1.0.0-beta.29 - version: 1.0.0-beta.29 + specifier: 1.0.0-beta.30 + version: 1.0.0-beta.30 tsdown: - specifier: ^0.13.0 - version: 0.13.0(publint@0.3.12)(typescript@5.8.3) + specifier: ^0.13.2 + version: 0.13.2(publint@0.3.12)(typescript@5.9.2) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) packages/plugin-react-oxc: dependencies: '@rolldown/pluginutils': - specifier: 1.0.0-beta.29 - version: 1.0.0-beta.29 + specifier: 1.0.0-beta.30 + version: 1.0.0-beta.30 devDependencies: '@vitejs/react-common': specifier: workspace:* version: link:../common tsdown: - specifier: ^0.13.0 - version: 0.13.0(publint@0.3.12)(typescript@5.8.3) + specifier: ^0.13.2 + version: 0.13.2(publint@0.3.12)(typescript@5.9.2) vite: specifier: catalog:rolldown-vite - version: rolldown-vite@7.0.11(@types/node@22.16.5)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1) + version: rolldown-vite@7.0.12(@types/node@22.17.0)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1) packages/plugin-react-swc: dependencies: '@rolldown/pluginutils': - specifier: 1.0.0-beta.29 - version: 1.0.0-beta.29 + specifier: 1.0.0-beta.30 + version: 1.0.0-beta.30 '@swc/core': specifier: ^1.13.2 version: 1.13.2 devDependencies: '@playwright/test': - specifier: ^1.54.1 - version: 1.54.1 + specifier: ^1.54.2 + version: 1.54.2 '@types/fs-extra': specifier: ^11.0.4 version: 11.0.4 '@types/node': - specifier: ^22.16.5 - version: 22.16.5 + specifier: ^22.17.0 + version: 22.17.0 '@vitejs/react-common': specifier: workspace:* version: link:../common @@ -167,27 +167,27 @@ importers: specifier: ^3.0.3 version: 3.6.2 tsdown: - specifier: ^0.13.0 - version: 0.13.0(publint@0.3.12)(typescript@5.8.3) + specifier: ^0.13.2 + version: 0.13.2(publint@0.3.12)(typescript@5.9.2) typescript: - specifier: ^5.8.3 - version: 5.8.3 + specifier: ^5.9.2 + version: 5.9.2 packages/plugin-react-swc/playground/base-path: dependencies: react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) devDependencies: '@types/react': - specifier: ^19.1.8 - version: 19.1.8 + specifier: ^19.1.9 + version: 19.1.9 '@types/react-dom': - specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.9) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -195,18 +195,18 @@ importers: packages/plugin-react-swc/playground/class-components: dependencies: react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) devDependencies: '@types/react': - specifier: ^19.1.8 - version: 19.1.8 + specifier: ^19.1.9 + version: 19.1.9 '@types/react-dom': - specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.9) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -214,18 +214,18 @@ importers: packages/plugin-react-swc/playground/decorators: dependencies: react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) devDependencies: '@types/react': - specifier: ^19.1.8 - version: 19.1.8 + specifier: ^19.1.9 + version: 19.1.9 '@types/react-dom': - specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.9) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -234,23 +234,23 @@ importers: dependencies: '@emotion/react': specifier: ^11.14.0 - version: 11.14.0(@types/react@19.1.8)(react@19.1.0) + version: 11.14.0(@types/react@19.1.9)(react@19.1.1) '@emotion/styled': specifier: ^11.14.1 - version: 11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) + version: 11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1) react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) devDependencies: '@types/react': - specifier: ^19.1.8 - version: 19.1.8 + specifier: ^19.1.9 + version: 19.1.9 '@types/react-dom': - specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.9) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -259,26 +259,26 @@ importers: dependencies: '@emotion/react': specifier: ^11.14.0 - version: 11.14.0(@types/react@19.1.8)(react@19.1.0) + version: 11.14.0(@types/react@19.1.9)(react@19.1.1) '@emotion/styled': specifier: ^11.14.1 - version: 11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) + version: 11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1) react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) devDependencies: '@swc/plugin-emotion': specifier: ^11.0.0 version: 11.0.0 '@types/react': - specifier: ^19.1.8 - version: 19.1.8 + specifier: ^19.1.9 + version: 19.1.9 '@types/react-dom': - specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.9) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -286,18 +286,18 @@ importers: packages/plugin-react-swc/playground/hmr: dependencies: react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) devDependencies: '@types/react': - specifier: ^19.1.8 - version: 19.1.8 + specifier: ^19.1.9 + version: 19.1.9 '@types/react-dom': - specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.9) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -305,21 +305,21 @@ importers: packages/plugin-react-swc/playground/mdx: dependencies: react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) devDependencies: '@mdx-js/rollup': specifier: ^3.1.0 version: 3.1.0(rollup@4.44.1) '@types/react': - specifier: ^19.1.8 - version: 19.1.8 + specifier: ^19.1.9 + version: 19.1.9 '@types/react-dom': - specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.9) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -346,18 +346,18 @@ importers: packages/plugin-react-swc/playground/shadow-export: dependencies: react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) devDependencies: '@types/react': - specifier: ^19.1.8 - version: 19.1.8 + specifier: ^19.1.9 + version: 19.1.9 '@types/react-dom': - specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.9) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -365,27 +365,27 @@ importers: packages/plugin-react-swc/playground/styled-components: dependencies: react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) react-is: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 styled-components: specifier: ^6.1.19 - version: 6.1.19(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 6.1.19(react-dom@19.1.1(react@19.1.1))(react@19.1.1) devDependencies: '@swc/plugin-styled-components': specifier: ^9.0.0 version: 9.0.0 '@types/react': - specifier: ^19.1.8 - version: 19.1.8 + specifier: ^19.1.9 + version: 19.1.9 '@types/react-dom': - specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.9) '@types/styled-components': specifier: ^5.1.34 version: 5.1.34 @@ -397,20 +397,20 @@ importers: dependencies: '@vitejs/test-dep-non-js': specifier: file:./test-dep/non-js - version: file:packages/plugin-react-swc/playground/ts-lib/test-dep/non-js(react@19.1.0) + version: file:packages/plugin-react-swc/playground/ts-lib/test-dep/non-js(react@19.1.1) react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) devDependencies: '@types/react': - specifier: ^19.1.8 - version: 19.1.8 + specifier: ^19.1.9 + version: 19.1.9 '@types/react-dom': - specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.9) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -420,18 +420,18 @@ importers: packages/plugin-react-swc/playground/worker: dependencies: react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) devDependencies: '@types/react': - specifier: ^19.1.8 - version: 19.1.8 + specifier: ^19.1.9 + version: 19.1.9 '@types/react-dom': - specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.9) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -458,14 +458,14 @@ importers: version: 3.1.0 vitefu: specifier: ^1.1.1 - version: 1.1.1(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 1.1.1(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) devDependencies: '@hiogawa/utils': specifier: ^1.7.0 version: 1.7.0 '@playwright/test': - specifier: ^1.54.1 - version: 1.54.1 + specifier: ^1.54.2 + version: 1.54.2 '@tsconfig/strictest': specifier: ^2.0.5 version: 2.0.5 @@ -473,26 +473,26 @@ importers: specifier: ^1.0.8 version: 1.0.8 '@types/node': - specifier: ^22.16.5 - version: 22.16.5 + specifier: ^22.17.0 + version: 22.17.0 '@types/react': - specifier: ^19.1.8 - version: 19.1.8 + specifier: ^19.1.9 + version: 19.1.9 '@types/react-dom': - specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.9) '@vitejs/plugin-react': specifier: workspace:* version: link:../plugin-react react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) react-server-dom-webpack: - specifier: ^19.1.0 - version: 19.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1) rsc-html-stream: specifier: ^0.0.7 version: 0.0.7 @@ -500,11 +500,11 @@ importers: specifier: ^1.0.1 version: 1.0.1 tsdown: - specifier: ^0.13.0 - version: 0.13.0(publint@0.3.12)(typescript@5.8.3) + specifier: ^0.13.2 + version: 0.13.2(publint@0.3.12)(typescript@5.9.2) vite-plugin-inspect: specifier: ^11.3.2 - version: 11.3.2(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 11.3.2(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) packages/plugin-rsc/examples/basic: dependencies: @@ -512,42 +512,42 @@ importers: specifier: latest version: link:../.. react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) devDependencies: '@tailwindcss/vite': specifier: ^4.1.11 - version: 4.1.11(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 4.1.11(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) '@types/react': - specifier: ^19.1.8 - version: 19.1.8 + specifier: ^19.1.9 + version: 19.1.9 '@types/react-dom': - specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.9) '@vitejs/plugin-react': specifier: latest version: link:../../../plugin-react '@vitejs/test-dep-client-in-server': specifier: file:./test-dep/client-in-server - version: file:packages/plugin-rsc/examples/basic/test-dep/client-in-server(react@19.1.0) + version: file:packages/plugin-rsc/examples/basic/test-dep/client-in-server(react@19.1.1) '@vitejs/test-dep-client-in-server2': specifier: file:./test-dep/client-in-server2 - version: file:packages/plugin-rsc/examples/basic/test-dep/client-in-server2(react@19.1.0) + version: file:packages/plugin-rsc/examples/basic/test-dep/client-in-server2(react@19.1.1) '@vitejs/test-dep-css-in-server': specifier: file:./test-dep/css-in-server - version: file:packages/plugin-rsc/examples/basic/test-dep/css-in-server(react@19.1.0) + version: file:packages/plugin-rsc/examples/basic/test-dep/css-in-server(react@19.1.1) '@vitejs/test-dep-server-in-client': specifier: file:./test-dep/server-in-client - version: file:packages/plugin-rsc/examples/basic/test-dep/server-in-client(react@19.1.0) + version: file:packages/plugin-rsc/examples/basic/test-dep/server-in-client(react@19.1.1) '@vitejs/test-dep-server-in-server': specifier: file:./test-dep/server-in-server - version: file:packages/plugin-rsc/examples/basic/test-dep/server-in-server(react@19.1.0) + version: file:packages/plugin-rsc/examples/basic/test-dep/server-in-server(react@19.1.1) '@vitejs/test-dep-transitive-cjs': specifier: file:./test-dep/transitive-cjs - version: file:packages/plugin-rsc/examples/basic/test-dep/transitive-cjs(react@19.1.0) + version: file:packages/plugin-rsc/examples/basic/test-dep/transitive-cjs(react@19.1.1) rsc-html-stream: specifier: ^0.0.7 version: 0.0.7 @@ -556,13 +556,13 @@ importers: version: 4.1.11 vite: specifier: ^7.0.6 - version: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + version: 7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vite-plugin-inspect: specifier: ^11.3.2 - version: 11.3.2(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 11.3.2(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) wrangler: - specifier: ^4.26.0 - version: 4.26.0 + specifier: ^4.27.0 + version: 4.27.0 packages/plugin-rsc/examples/browser-mode: dependencies: @@ -570,24 +570,24 @@ importers: specifier: latest version: link:../.. react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) devDependencies: '@types/react': - specifier: ^19.1.8 - version: 19.1.8 + specifier: ^19.1.9 + version: 19.1.9 '@types/react-dom': - specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.9) '@vitejs/plugin-react': specifier: latest version: link:../../../plugin-react vite: specifier: ^7.0.6 - version: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + version: 7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) packages/plugin-rsc/examples/e2e: devDependencies: @@ -607,24 +607,24 @@ importers: specifier: latest version: link:../.. react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) devDependencies: '@types/react': - specifier: ^19.1.8 - version: 19.1.8 + specifier: ^19.1.9 + version: 19.1.9 '@types/react-dom': - specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.9) '@vitejs/plugin-react': specifier: latest version: link:../../../plugin-react vite: specifier: ^7.0.6 - version: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + version: 7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) packages/plugin-rsc/examples/react-router: dependencies: @@ -632,33 +632,33 @@ importers: specifier: latest version: link:../.. react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) react-router: specifier: 7.7.0 - version: 7.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 7.7.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) devDependencies: '@cloudflare/vite-plugin': - specifier: ^1.10.1 - version: 1.10.1(rollup@4.44.1)(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250712.0)(wrangler@4.26.0) + specifier: ^1.11.0 + version: 1.11.0(rollup@4.44.1)(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250730.0)(wrangler@4.27.0) '@react-router/dev': specifier: 7.7.0 - version: 7.7.0(@types/node@22.16.5)(babel-plugin-macros@3.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(react-router@7.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tsx@4.20.3)(typescript@5.8.3)(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(wrangler@4.26.0)(yaml@2.7.1) + version: 7.7.0(@types/node@22.17.0)(babel-plugin-macros@3.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(react-router@7.7.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(tsx@4.20.3)(typescript@5.9.2)(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(wrangler@4.27.0)(yaml@2.7.1) '@tailwindcss/typography': specifier: ^0.5.16 version: 0.5.16(tailwindcss@4.1.11) '@tailwindcss/vite': specifier: ^4.1.11 - version: 4.1.11(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 4.1.11(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) '@types/react': - specifier: ^19.1.8 - version: 19.1.8 + specifier: ^19.1.9 + version: 19.1.9 '@types/react-dom': - specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.9) '@vitejs/plugin-react': specifier: latest version: link:../../../plugin-react @@ -667,13 +667,13 @@ importers: version: 4.1.11 vite: specifier: ^7.0.6 - version: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + version: 7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vite-plugin-inspect: specifier: ^11.3.2 - version: 11.3.2(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 11.3.2(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) wrangler: - specifier: ^4.26.0 - version: 4.26.0 + specifier: ^4.27.0 + version: 4.27.0 packages/plugin-rsc/examples/ssg: dependencies: @@ -681,27 +681,27 @@ importers: specifier: latest version: link:../.. react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) devDependencies: '@mdx-js/rollup': specifier: ^3.1.0 version: 3.1.0(rollup@4.44.1) '@types/react': - specifier: ^19.1.8 - version: 19.1.8 + specifier: ^19.1.9 + version: 19.1.9 '@types/react-dom': - specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.9) '@vitejs/plugin-react': specifier: latest version: link:../../../plugin-react vite-plugin-inspect: specifier: ^11.3.2 - version: 11.3.2(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 11.3.2(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) packages/plugin-rsc/examples/starter: dependencies: @@ -709,18 +709,18 @@ importers: specifier: latest version: link:../.. react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) devDependencies: '@types/react': - specifier: ^19.1.8 - version: 19.1.8 + specifier: ^19.1.9 + version: 19.1.9 '@types/react-dom': - specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.9) '@vitejs/plugin-react': specifier: latest version: link:../../../plugin-react @@ -729,10 +729,10 @@ importers: version: 0.0.7 vite: specifier: ^7.0.6 - version: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + version: 7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vite-plugin-inspect: specifier: ^11.3.2 - version: 11.3.2(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 11.3.2(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) packages/plugin-rsc/examples/starter-cf-single: dependencies: @@ -740,21 +740,21 @@ importers: specifier: latest version: link:../.. react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) devDependencies: '@cloudflare/vite-plugin': - specifier: ^1.10.1 - version: 1.10.1(rollup@4.44.1)(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250712.0)(wrangler@4.26.0) + specifier: ^1.11.0 + version: 1.11.0(rollup@4.44.1)(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250730.0)(wrangler@4.27.0) '@types/react': - specifier: ^19.1.8 - version: 19.1.8 + specifier: ^19.1.9 + version: 19.1.9 '@types/react-dom': - specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.9) '@vitejs/plugin-react': specifier: latest version: link:../../../plugin-react @@ -771,18 +771,18 @@ importers: playground/class-components: dependencies: react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) devDependencies: '@types/react': - specifier: ^19.1.8 - version: 19.1.8 + specifier: ^19.1.9 + version: 19.1.9 '@types/react-dom': - specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.9) '@vitejs/plugin-react': specifier: workspace:* version: link:../../packages/plugin-react @@ -790,21 +790,21 @@ importers: playground/compiler: dependencies: react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) devDependencies: '@babel/plugin-transform-react-jsx-development': specifier: ^7.27.1 version: 7.27.1(@babel/core@7.28.0) '@types/react': - specifier: ^19.1.8 - version: 19.1.8 + specifier: ^19.1.9 + version: 19.1.9 '@types/react-dom': - specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.9) '@vitejs/plugin-react': specifier: workspace:* version: link:../../packages/plugin-react @@ -812,8 +812,8 @@ importers: specifier: 19.1.0-rc.2 version: 19.1.0-rc.2 typescript: - specifier: ^5.8.3 - version: 5.8.3 + specifier: ^5.9.2 + version: 5.9.2 playground/compiler-react-18: dependencies: @@ -843,24 +843,24 @@ importers: specifier: 19.1.0-rc.2 version: 19.1.0-rc.2 typescript: - specifier: ^5.8.3 - version: 5.8.3 + specifier: ^5.9.2 + version: 5.9.2 playground/hmr-false: dependencies: react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) devDependencies: '@types/react': - specifier: ^19.1.8 - version: 19.1.8 + specifier: ^19.1.9 + version: 19.1.9 '@types/react-dom': - specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.9) '@vitejs/plugin-react': specifier: workspace:* version: link:../../packages/plugin-react @@ -868,18 +868,18 @@ importers: playground/hook-with-jsx: dependencies: react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) devDependencies: '@types/react': - specifier: ^19.1.8 - version: 19.1.8 + specifier: ^19.1.9 + version: 19.1.9 '@types/react-dom': - specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.9) '@vitejs/plugin-react': specifier: workspace:* version: link:../../packages/plugin-react @@ -887,21 +887,21 @@ importers: playground/include-node-modules: dependencies: react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) devDependencies: '@types/babel__core': specifier: ^7.20.5 version: 7.20.5 '@types/react': - specifier: ^19.1.8 - version: 19.1.8 + specifier: ^19.1.9 + version: 19.1.9 '@types/react-dom': - specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.9) '@vitejs/plugin-react': specifier: workspace:* version: link:../../packages/plugin-react @@ -914,21 +914,21 @@ importers: playground/mdx: dependencies: react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) devDependencies: '@mdx-js/rollup': specifier: ^3.1.0 version: 3.1.0(rollup@4.44.1) '@types/react': - specifier: ^19.1.8 - version: 19.1.8 + specifier: ^19.1.9 + version: 19.1.9 '@types/react-dom': - specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.9) '@vitejs/plugin-react': specifier: workspace:* version: link:../../packages/plugin-react @@ -939,11 +939,11 @@ importers: specifier: link:./jsx-entry version: link:jsx-entry react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) devDependencies: '@vitejs/plugin-react': specifier: workspace:* @@ -952,11 +952,11 @@ importers: playground/react-classic: dependencies: react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) devDependencies: '@vitejs/plugin-react': specifier: workspace:* @@ -966,19 +966,19 @@ importers: dependencies: '@emotion/react': specifier: ^11.14.0 - version: 11.14.0(@types/react@19.1.8)(react@19.1.0) + version: 11.14.0(@types/react@19.1.9)(react@19.1.1) '@emotion/styled': specifier: ^11.14.1 - version: 11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) + version: 11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1) react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) react-switch: specifier: ^7.1.0 - version: 7.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 7.1.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) devDependencies: '@babel/plugin-proposal-pipeline-operator': specifier: ^7.27.1 @@ -993,11 +993,11 @@ importers: playground/react-env: dependencies: react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) devDependencies: '@vitejs/plugin-react': specifier: workspace:* @@ -1006,11 +1006,11 @@ importers: playground/react-sourcemap: dependencies: react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) devDependencies: '@vitejs/plugin-react': specifier: workspace:* @@ -1021,11 +1021,11 @@ importers: playground/ssr-react: dependencies: react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) devDependencies: '@vitejs/plugin-react': specifier: workspace:* @@ -1210,51 +1210,55 @@ packages: resolution: {integrity: sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==} engines: {node: '>=6.9.0'} + '@babel/types@7.28.2': + resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} + engines: {node: '>=6.9.0'} + '@cloudflare/kv-asset-handler@0.4.0': resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==} engines: {node: '>=18.0.0'} - '@cloudflare/unenv-preset@2.4.1': - resolution: {integrity: sha512-70mk5GPv+ozJ5XcIhFpq4ps7HvQYu+As7vwasUy9LcBadsTcWA2iFis/7aFJmQehfKerDwVOHfMYpgTTC+u24Q==} + '@cloudflare/unenv-preset@2.5.0': + resolution: {integrity: sha512-CZe9B2VbjIQjBTyc+KoZcN1oUcm4T6GgCXoel9O7647djHuSRAa6sM6G+NdxWArATZgeMMbsvn9C50GCcnIatA==} peerDependencies: - unenv: 2.0.0-rc.17 - workerd: ^1.20250521.0 + unenv: 2.0.0-rc.19 + workerd: ^1.20250722.0 peerDependenciesMeta: workerd: optional: true - '@cloudflare/vite-plugin@1.10.1': - resolution: {integrity: sha512-XXaEe1RVFp2cKHTkaK3JPurdvii44n2c2veyWEZl7l6U1xSqOuXkOfs2flDgX+74w7bbknvd8wLCXCTHRxXuBQ==} + '@cloudflare/vite-plugin@1.11.0': + resolution: {integrity: sha512-NVK5n6CTRf0cXItSc+X3UJZ37xKCLybbSEUDYuZNGzvAsbwivgI66eKl7+BKTVq55fo17YbrrIBQAUsQkgopHQ==} peerDependencies: vite: ^6.1.0 || ^7.0.0 - wrangler: ^4.26.0 + wrangler: ^4.27.0 - '@cloudflare/workerd-darwin-64@1.20250712.0': - resolution: {integrity: sha512-M6S6a/LQ0Jb0R+g0XhlYi1adGifvYmxA5mD/i9TuZZgjs2bIm5ELuka/n3SCnI98ltvlx3HahRaHagAtOilsFg==} + '@cloudflare/workerd-darwin-64@1.20250730.0': + resolution: {integrity: sha512-X3egNyTjLQaECYe34x8Al7r4oXAhcN3a8+8qcpNCcq1sgtuHIeAwS9potgRR/mwkGfmrJn7nfAyDKC4vrkniQQ==} engines: {node: '>=16'} cpu: [x64] os: [darwin] - '@cloudflare/workerd-darwin-arm64@1.20250712.0': - resolution: {integrity: sha512-7sFzn6rvAcnLy7MktFL42dYtzL0Idw/kiUmNf2P3TvsBRoShhLK5ZKhbw+NAhvU8e4pXWm5lkE0XmpieA0zNjw==} + '@cloudflare/workerd-darwin-arm64@1.20250730.0': + resolution: {integrity: sha512-/4bvcaGY/9v0rghgKboGiyPKKGQTbDnQ1EeY0oN0SSQH0Cp3OBzqwni/JRvh8TEaD+5azJnSFLlFZj9w7fo+hw==} engines: {node: '>=16'} cpu: [arm64] os: [darwin] - '@cloudflare/workerd-linux-64@1.20250712.0': - resolution: {integrity: sha512-EFRrGe/bqK7NHtht7vNlbrDpfvH3eRvtJOgsTpEQEysDjVmlK6pVJxSnLy9Hg1zlLY15IfhfGC+K2qisseHGJQ==} + '@cloudflare/workerd-linux-64@1.20250730.0': + resolution: {integrity: sha512-I4ZsXYdNkqkJnzNFKADMufiLIzRdIRsN7dSH8UCPw2fYp1BbKA10AkKVqitFwBxIY8eOzQ6Vf7c41AjLQmtJqA==} engines: {node: '>=16'} cpu: [x64] os: [linux] - '@cloudflare/workerd-linux-arm64@1.20250712.0': - resolution: {integrity: sha512-rG8JUleddhUHQVwpXOYv0VbL0S9kOtR9PNKecgVhFpxEhC8aTeg2HNBBjo8st7IfcUvY8WaW3pD3qdAMZ05UwQ==} + '@cloudflare/workerd-linux-arm64@1.20250730.0': + resolution: {integrity: sha512-tTpO6139jFQ5vxgtBZgS8Y8R1jVidS4n7s37x5xO9bCWLZoL0kTj38UGZ8FENkTeaMxE9Mm//nbQol7TfJ2nZg==} engines: {node: '>=16'} cpu: [arm64] os: [linux] - '@cloudflare/workerd-windows-64@1.20250712.0': - resolution: {integrity: sha512-qS8H5RCYwE21Om9wo5/F807ClBJIfknhuLBj16eYxvJcj9JqgAKWi12BGgjyGxHuJJjeoQ63lr4wHAdbFntDDg==} + '@cloudflare/workerd-windows-64@1.20250730.0': + resolution: {integrity: sha512-paVHgocuilMzOU+gEyKR/86j/yI+QzmSHRnqdd8OdQ37Hf6SyPX7kQj6VVNRXbzVHWix1WxaJsXfTGK1LK05wA==} engines: {node: '>=16'} cpu: [x64] os: [win32] @@ -1884,19 +1888,19 @@ packages: resolution: {integrity: sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - '@oxc-project/runtime@0.77.3': - resolution: {integrity: sha512-vsC/ewcGJ7xXnnwZkku7rpPH5Lxb5g4J+V6lD9eBTnRLmXVXM7Qu50y+ozD+UD5IXaSoVOvVMGTT4YSNCz2MQQ==} + '@oxc-project/runtime@0.78.0': + resolution: {integrity: sha512-jOU7sDFMyq5ShGJC21UobalVzqcdtWGfySVp8ELvKoVLzMpLHb4kv1bs9VKxaP8XC7Z9hlAXwEKVhCTN+j21aQ==} engines: {node: '>=6.9.0'} - '@oxc-project/types@0.77.3': - resolution: {integrity: sha512-5Vh+neJhhxuF0lYCjZXbxjqm2EO6YJ1jG+KuHntrd6VY67OMpYhWq2cZhUhy+xL9qLJVJRaeII7Xj9fciA6v7A==} + '@oxc-project/types@0.78.0': + resolution: {integrity: sha512-8FvExh0WRWN1FoSTjah1xa9RlavZcJQ8/yxRbZ7ElmSa2Ij5f5Em7MvRbSthE6FbwC6Wh8iAw0Gpna7QdoqLGg==} '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.54.1': - resolution: {integrity: sha512-FS8hQ12acieG2dYSksmLOF7BNxnVf2afRJdCuM1eMSxj6QTSE6G4InGF7oApGgDb65MX7AwMVlIkpru0yZA4Xw==} + '@playwright/test@1.54.2': + resolution: {integrity: sha512-A+znathYxPf+72riFd1r1ovOLqsIIB0jKIoPjyK2kqEIe30/6jF6BC7QNluHuwUmsD2tv1XZVugN8GqfTMOxsA==} engines: {node: '>=18'} hasBin: true @@ -1948,78 +1952,78 @@ packages: typescript: optional: true - '@rolldown/binding-android-arm64@1.0.0-beta.29': - resolution: {integrity: sha512-pDv7gg59Gdy80eFmMkEqXEaoJi3Y9W/a9T3z9M4t8Ma8aVXNldvSy9UgtlX7AK7DPqF8tULnmIZ2Z3rvGMz/NQ==} + '@rolldown/binding-android-arm64@1.0.0-beta.30': + resolution: {integrity: sha512-4j7QBitb/WMT1fzdJo7BsFvVNaFR5WCQPdf/RPDHEsgQIYwBaHaL47KTZxncGFQDD1UAKN3XScJ0k7LAsZfsvg==} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-beta.29': - resolution: {integrity: sha512-fPqR6TfTqbzgKKCQYtcCS+Dms91YcptTbdlwJ13DxOUgMe8LgDIVsLLlEykfm7ijJd5mM4zNw0Hr2CJb6kvQZw==} + '@rolldown/binding-darwin-arm64@1.0.0-beta.30': + resolution: {integrity: sha512-4vWFTe1o5LXeitI2lW8qMGRxxwrH/LhKd2HDLa/QPhdxohvdnfKyDZWN96XUhDyje2bHFCFyhMs3ak2lg2mJFA==} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-beta.29': - resolution: {integrity: sha512-7Z4qosL0xN8i6++txHOEPCVP3/lcGLOvftUJOWATZ5aDkDskwcZDa66BGiJt/K1/DgW4kpRVmnGWUWAORHBbFA==} + '@rolldown/binding-darwin-x64@1.0.0-beta.30': + resolution: {integrity: sha512-MxrfodqImbsDFFFU/8LxyFPZjt7s4ht8g2Zb76EmIQ+xlmit46L9IzvWiuMpEaSJ5WbnjO7fCDWwakMGyJJ+Dw==} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-beta.29': - resolution: {integrity: sha512-0HLTfPW5Glh608s76qgayN/nPsXPchNUumavf7W5nh1eMG6qBsOO7Q1QaK0v4un7qtsn3IA/1Tgq0ZgNc0dbeg==} + '@rolldown/binding-freebsd-x64@1.0.0-beta.30': + resolution: {integrity: sha512-c/TQXcATKoO8qE1bCjCOkymZTu7yVUAxBSNLp42Q97XHCb0Cu9v6MjZpB6c7Hq9NQ9NzW44uglak9D/r77JeDw==} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.29': - resolution: {integrity: sha512-QNboxdVTJOZS4zP8kA2+XUwAegejd5QNSH5zVR4neqG2AfbxRcMFzSVRkJHN6yDaaKweD/4sUvXfmef6p/7zsw==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.30': + resolution: {integrity: sha512-Vxci4xylM11zVqvrmezAaRjGBDyOlMRtlt7TDgxaBmSYLuiokXbZpD8aoSuOyjUAeN0/tmWItkxNGQza8UWGNQ==} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.29': - resolution: {integrity: sha512-hzBmOtYdC4369XxN2SNJ3oBlXKWNif3ieWBT+oh/qvAeox4fQR0ngqyh+kIGOufBnP5Zc2rqJf9LzIbJw3Tx/Q==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.30': + resolution: {integrity: sha512-iEBEdSs25Ol0lXyVNs763f7YPAIP0t1EAjoXME81oJ94DesJslaLTj71Rn1shoMDVA+dfkYA286w5uYnOs9ZNA==} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.29': - resolution: {integrity: sha512-6B35GmFJJ4RX88OgubrnUmuJBUgRh6/OTXIpy8m/VUnoc683lufIPo26HW/0LxLgxp2GM7KHr3LOULcVxbqq4Q==} + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.30': + resolution: {integrity: sha512-Ny684Sn1X8c+gGLuDlxkOuwiEE3C7eEOqp1/YVBzQB4HO7U/b4n7alvHvShboOEY5DP1fFUjq6Z+sBLYlCIZbQ==} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-ohos@1.0.0-beta.29': - resolution: {integrity: sha512-z3ru8fUCunQM8q9I7RbDVMT5cxzxVVVBNNKM5/qAQQrdObd1u8g0LR5z0yLtaFWzybwLVdPtJDRcXtLm5tOBFA==} + '@rolldown/binding-linux-arm64-ohos@1.0.0-beta.30': + resolution: {integrity: sha512-6moyULHDPKwt5RDEV72EqYw5n+s46AerTwtEBau5wCsZd1wuHS1L9z6wqhKISXAFTK9sneN0TEjvYKo+sgbbiA==} cpu: [arm64] os: [openharmony] - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.29': - resolution: {integrity: sha512-n6fs4L7j99MIiI6vKhQDdyScv4/uMAPtIMkB0zGbUX8MKWT1osym1hvWVdlENjnS/Phf0zzhjyOgoFDzdhI1cQ==} + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.30': + resolution: {integrity: sha512-p0yoPdoGg5Ow2YZKKB5Ypbn58i7u4XFk3PvMkriFnEcgtVk40c5u7miaX7jH0JdzahyXVBJ/KT5yEpJrzQn8yg==} cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-musl@1.0.0-beta.29': - resolution: {integrity: sha512-C5hcJgtDN4rp6/WsPTQSDVUWrdnIC//ynMGcUIh1O0anm9KnSy47zKQ5D9EqtlEKvO+2PPqmyUVJ2DTq18nlVA==} + '@rolldown/binding-linux-x64-musl@1.0.0-beta.30': + resolution: {integrity: sha512-sM/KhCrsT0YdHX10mFSr0cvbfk1+btG6ftepAfqhbcDfhi0s65J4dTOxGmklJnJL9i1LXZ8WA3N4wmnqsfoK8Q==} cpu: [x64] os: [linux] - '@rolldown/binding-wasm32-wasi@1.0.0-beta.29': - resolution: {integrity: sha512-lMN1IBItdZFO182Sdus9oVuNDqyIymn/bsR5KwgeGaiqLsrmpQHBSLwkS/nKJO1nzYlpGDRugFSpnrSJ5ZmihQ==} + '@rolldown/binding-wasm32-wasi@1.0.0-beta.30': + resolution: {integrity: sha512-i3kD5OWs8PQP0V+JW3TFyCLuyjuNzrB45em0g84Jc+gvnDsGVlzVjMNPo7txE/yT8CfE90HC/lDs3ry9FvaUyw==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.29': - resolution: {integrity: sha512-0UrXCUAOrbWdyVJskzjtne/4d3YMMhhhpBnob3SeF4jAvbKYqPhCZJ71pP7yUpvbowGXXTnHWpKfitg4Sovmtw==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.30': + resolution: {integrity: sha512-q7mrYln30V35VrCqnBVQQvNPQm8Om9HC59I3kMYiOWogvJobzSPyO+HA1MP363+Qgwe39I2I1nqBKPOtWZ33AQ==} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.29': - resolution: {integrity: sha512-YX0OYL1dcB7rPnsndpEa68fytYyZZj1iaWzH7momFB2oBS2lXAe1UrrDWcdLoUXdzPIyzpvtBCiS2XcDgYG7ag==} + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.30': + resolution: {integrity: sha512-nUqGBt39XTpbBEREEnyKofdP3uz+SN/x2884BH+N3B2NjSUrP6NXwzltM35C0wKK42hX/nthRrwSgj715m99Jw==} cpu: [ia32] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.29': - resolution: {integrity: sha512-azrPWbV+NZiCFNs59AgH9Y6vFKHoAI6T/XtKKsoLxkPyP1LpbdgL5eqRfeWz+GCAUY9qhDOC4hH1GjFG8PrZIg==} + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.30': + resolution: {integrity: sha512-lbnvUwAXIVWSXAeZrCa4b1KvV/DW0rBnMHuX0T7I6ey1IsXZ90J37dEgt3j48Ex1Cw1E+5H7VDNP2gyOX8iu3w==} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-beta.29': - resolution: {integrity: sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q==} + '@rolldown/pluginutils@1.0.0-beta.30': + resolution: {integrity: sha512-whXaSoNUFiyDAjkUF8OBpOm77Szdbk5lGNqFe6CbVbJFrhCCPinCbRA3NjawwlNHla1No7xvXXh+CpSxnPfUEw==} '@rollup/plugin-replace@6.0.2': resolution: {integrity: sha512-7QaYCf8bqF04dOy7w/eHmJeNExxTYwvKAmlSAH/EaWWUzbT0h5sbF6bktFoX/0F/0qwng5/dWFMyf3gzaM8DsQ==} @@ -2390,8 +2394,8 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node@22.16.5': - resolution: {integrity: sha512-bJFoMATwIGaxxx8VJPeM8TonI8t579oRvgAuT8zFugJsJZgzqv0Fu8Mhp68iecjzG7cnN3mO2dJQ5uUM2EFrgQ==} + '@types/node@22.17.0': + resolution: {integrity: sha512-bbAKTCqX5aNVryi7qXVMi+OkB3w/OyblodicMbvE38blyAz7GxXf6XYhklokijuPwwVg9sDLKRxt0ZHXQwZVfQ==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -2407,16 +2411,16 @@ packages: peerDependencies: '@types/react': ^18.0.0 - '@types/react-dom@19.1.6': - resolution: {integrity: sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==} + '@types/react-dom@19.1.7': + resolution: {integrity: sha512-i5ZzwYpqjmrKenzkoLM2Ibzt6mAsM7pxB6BCIouEVVmgiqaMj1TjaK7hnA36hbW5aZv20kx7Lw6hWzPWg0Rurw==} peerDependencies: '@types/react': ^19.0.0 '@types/react@18.3.20': resolution: {integrity: sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==} - '@types/react@19.1.8': - resolution: {integrity: sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==} + '@types/react@19.1.9': + resolution: {integrity: sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA==} '@types/styled-components@5.1.34': resolution: {integrity: sha512-mmiVvwpYklFIv9E8qfxuPyIt/OuyIrn6gMOAMOFUO3WJfSrSE+sGUoa4PiZj77Ut7bKZpaa6o1fBKS/4TOEvnA==} @@ -3089,14 +3093,14 @@ packages: eslint-import-resolver-node: optional: true - eslint-plugin-n@17.21.2: - resolution: {integrity: sha512-s3ai4Msfk5mbSvOgCkYo6k5+zP3W/OK+AvLmMmx++Ki4a5CPO7luIDwOnjUZm/t+oZYP0YADTxe+u4JqnT8+Dg==} + eslint-plugin-n@17.21.3: + resolution: {integrity: sha512-MtxYjDZhMQgsWRm/4xYLL0i2EhusWT7itDxlJ80l1NND2AL2Vi5Mvneqv/ikG9+zpran0VsVRXTEHrpLmUZRNw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=8.23.0' - eslint-plugin-regexp@2.9.0: - resolution: {integrity: sha512-9WqJMnOq8VlE/cK+YAo9C9YHhkOtcEtEk9d12a+H7OSZFwlpI6stiHmYPGa2VE0QhTzodJyhlyprUaXDZLgHBw==} + eslint-plugin-regexp@2.9.1: + resolution: {integrity: sha512-JwK6glV/aoYDxvXcrvMQbw/pByBewZwqXVSBzzjot3GxSbmjDYuWU4LWiLdBO8JKi4o8A1+rygO6JWRBg4qAQQ==} engines: {node: ^18 || >=20} peerDependencies: eslint: '>=8.44.0' @@ -3179,8 +3183,8 @@ packages: resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} engines: {node: '>=12.0.0'} - exsolve@1.0.4: - resolution: {integrity: sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==} + exsolve@1.0.7: + resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -3800,8 +3804,8 @@ packages: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} - miniflare@4.20250712.2: - resolution: {integrity: sha512-cZ8WyQBwqfjYLjd61fDR4/j0nAVbjB3Wxbun/brL9S5FAi4RlTR0LyMTKsIVA0s+nL4Pg9VjVMki4M/Jk2cz+Q==} + miniflare@4.20250730.0: + resolution: {integrity: sha512-avGXBStHQSqcJr8ra1mJ3/OQvnLZ49B1uAILQapAha1DHNZZvXWLIgUVre/WGY6ZOlNGFPh5CJ+dXLm4yuV3Jw==} engines: {node: '>=18.0.0'} hasBin: true @@ -4012,18 +4016,18 @@ packages: engines: {node: '>=0.10'} hasBin: true - playwright-chromium@1.54.1: - resolution: {integrity: sha512-1tOND4/hyQsYng5NLkLm+Ntew+CWBsvVZCcEZ0wafF5BAd9DBQHAT9SO95+QFk5iL5IBEdB6vFdsHf9Ma72vzQ==} + playwright-chromium@1.54.2: + resolution: {integrity: sha512-8ytI6xNjB//5zWSZUvOvn+N9xkXw6GXiDuBePOejcDiyUmzl5R5rvAU7MTl6h633sS3JVmlCS10EhYCt4Crzsg==} engines: {node: '>=18'} hasBin: true - playwright-core@1.54.1: - resolution: {integrity: sha512-Nbjs2zjj0htNhzgiy5wu+3w09YetDx5pkrpI/kZotDlDUaYk0HVA5xrBVPdow4SAUIlhgKcJeJg4GRKW6xHusA==} + playwright-core@1.54.2: + resolution: {integrity: sha512-n5r4HFbMmWsB4twG7tJLDN9gmBUeSPcsBZiWSE4DnYz9mJMAFqr2ID7+eGC9kpEnxExJ1epttwR59LEWCk8mtA==} engines: {node: '>=18'} hasBin: true - playwright@1.54.1: - resolution: {integrity: sha512-peWpSwIBmSLi6aW2auvrUtf2DqY16YYcCMO8rTVx486jKmDTJg7UAhyrraP98GB8BoPURZP8+nxO7TSd4cPr5g==} + playwright@1.54.2: + resolution: {integrity: sha512-Hu/BMoA1NAdRUuulyvQC0pEqZ4vQbGfn8f7wPXcnqQmM+zct9UliKxsIkLNmz/ku7LElUNqmaiv1TG/aL5ACsw==} engines: {node: '>=18'} hasBin: true @@ -4107,16 +4111,16 @@ packages: peerDependencies: react: ^18.3.1 - react-dom@19.1.0: - resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==} + react-dom@19.1.1: + resolution: {integrity: sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==} peerDependencies: - react: ^19.1.0 + react: ^19.1.1 react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - react-is@19.1.0: - resolution: {integrity: sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg==} + react-is@19.1.1: + resolution: {integrity: sha512-tr41fA15Vn8p4X9ntI+yCyeGSf1TlYaY5vlTZfQmeLBrFo3psOPX6HhTDnFNL9uj3EhP0KAQ80cugCl4b4BERA==} react-refresh@0.14.2: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} @@ -4136,12 +4140,12 @@ packages: react-dom: optional: true - react-server-dom-webpack@19.1.0: - resolution: {integrity: sha512-GUbawkNSN0oj8GnuNhMzsvyIHpXqqpAmyOY5NRqNNQ/M8wvUUN8YBoGjDUj9lbmBrmAHS65BByp6325CcWA0eg==} + react-server-dom-webpack@19.1.1: + resolution: {integrity: sha512-6MJwCAgQKcNxzRQebeyDspWzcncJMxe7JfmA8OFHWCMtp6L++HyJMgScM492iIeQZln3C834HyG4/UeMMZeRMw==} engines: {node: '>=0.10.0'} peerDependencies: - react: ^19.1.0 - react-dom: ^19.1.0 + react: ^19.1.1 + react-dom: ^19.1.1 webpack: ^5.59.0 react-switch@7.1.0: @@ -4154,8 +4158,8 @@ packages: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} - react@19.1.0: - resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} + react@19.1.1: + resolution: {integrity: sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==} engines: {node: '>=0.10.0'} readdirp@4.1.2: @@ -4208,8 +4212,8 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rolldown-plugin-dts@0.14.1: - resolution: {integrity: sha512-M++jFiiI0dwd9jNnta5vfxc058wwoibgeBzNMZw0QRm8jPJYxy4P3nQYlBtwQagKUDQVR0LXHSrRgXTezELEhw==} + rolldown-plugin-dts@0.15.1: + resolution: {integrity: sha512-X/oIfoqsEWb46aWXvdgKSN/TcF3Z50Mikk30KZcceVBgypEl9Tscvt3+o6pZzyJxZV3m+Kc+ftlHBBVQUGpXtw==} engines: {node: '>=20.18.0'} peerDependencies: '@typescript/native-preview': '>=7.0.0-dev.20250601.1' @@ -4224,8 +4228,8 @@ packages: vue-tsc: optional: true - rolldown-vite@7.0.11: - resolution: {integrity: sha512-5C0rxNUIQLnFNJenYieXU1A9RSAbnM7hGFZayIvR/wbU2tiCE/CQ6Z2dIk1msTozZlNrM0nSYeYLM/6VWuMYuA==} + rolldown-vite@7.0.12: + resolution: {integrity: sha512-Gr40FRnE98FwPJcMwcJgBwP6U7Qxw/VEtDsFdFjvGUTdgI/tTmF7z7dbVo/ajItM54G+Zo9w5BIrUmat6MbuWQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -4264,8 +4268,8 @@ packages: yaml: optional: true - rolldown@1.0.0-beta.29: - resolution: {integrity: sha512-EsoOi8moHN6CAYyTZipxDDVTJn0j2nBCWor4wRU45RQ8ER2qREDykXLr3Ulz6hBh6oBKCFTQIjo21i0FXNo/IA==} + rolldown@1.0.0-beta.30: + resolution: {integrity: sha512-H/LmDTUPlm65hWOTjXvd1k0qrGinNi8LrG3JsHVm6Oit7STg0upBmgoG5PZUHbAnGTHr0MLoLyzjmH261lIqSg==} hasBin: true rollup@4.44.1: @@ -4334,8 +4338,8 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - simple-git-hooks@2.13.0: - resolution: {integrity: sha512-N+goiLxlkHJlyaYEglFypzVNMaNplPAk5syu0+OPp/Bk6dwVoXF6FfOw2vO0Dp+JHsBaI+w6cm8TnFl2Hw6tDA==} + simple-git-hooks@2.13.1: + resolution: {integrity: sha512-WszCLXwT4h2k1ufIXAgsbiTOazqqevFCIncOuUBZJ91DdvWcC5+OFkluWRQPrcuSYd8fjq+o2y1QfWqYMoAToQ==} hasBin: true simple-swizzle@0.2.2: @@ -4517,6 +4521,10 @@ packages: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} @@ -4534,8 +4542,8 @@ packages: peerDependencies: typescript: '>=4.0.0' - tsdown@0.13.0: - resolution: {integrity: sha512-+1ZqbLIYDAiNxtAvq9RsTg55PRvaMxGmtvRFBW2J+i4GfDKiyHAkxez1eB3EPvHG1Z917nsf2madsSeblJS3GA==} + tsdown@0.13.2: + resolution: {integrity: sha512-sXZKvkqxxKMBL6I/AzXJnC+/9i6bLO8an+Jg4JSJDkEc99e3Y5bACQMTQyE1IXJE+7F6IRZ1P8AJQu31eQqv8A==} engines: {node: '>=20.19.0'} hasBin: true peerDependencies: @@ -4581,8 +4589,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - typescript@5.8.3: - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} + typescript@5.9.2: + resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} engines: {node: '>=14.17'} hasBin: true @@ -4604,8 +4612,8 @@ packages: resolution: {integrity: sha512-GrKEsc3ughskmGA9jevVlIOPMiiAHJ4OFUtaAH+NhfTUSiZ1wMPIQqQvAJUrJspFXJt3EBWgpAeoHEDVT1IBug==} engines: {node: '>=20.18.1'} - unenv@2.0.0-rc.17: - resolution: {integrity: sha512-B06u0wXkEd+o5gOCMl/ZHl5cfpYbDZKAT+HWTL+Hws6jWu7dCiqBBXXXzMFcFVJb8D4ytAnYmxJA83uwOQRSsg==} + unenv@2.0.0-rc.19: + resolution: {integrity: sha512-t/OMHBNAkknVCI7bVB9OWjUUAwhVv9vsPIAGnNUxnu3FxPQN11rjh0sksLMzc3g7IlTgvHmOTl4JM7JHpcv5wA==} unified@11.0.4: resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==} @@ -4850,17 +4858,17 @@ packages: wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - workerd@1.20250712.0: - resolution: {integrity: sha512-7h+k1OxREpiZW0849g0uQNexRWMcs5i5gUGhJzCY8nIx6Tv4D/ndlXJ47lEFj7/LQdp165IL9dM2D5uDiedZrg==} + workerd@1.20250730.0: + resolution: {integrity: sha512-w6e0WM2YGfYQGmg0dewZeLUYIxAzMYK1R31vaS4HHHjgT32Xqj0eVQH+leegzY51RZPNCvw5pe8DFmW4MGf8Fg==} engines: {node: '>=16'} hasBin: true - wrangler@4.26.0: - resolution: {integrity: sha512-EXuwyWlgYQZv6GJlyE0lVGk9hHqASssuECECT1XC5aIijTwNLQhsj/TOZ0hKSFlMbVr1E+OAdevAxd0kaF4ovA==} + wrangler@4.27.0: + resolution: {integrity: sha512-YNHZyMNWebFt9jD6dc20tQrCmnSzJj3SoB0FFa90w11Cx4lbP3d+rUZYjb18Zt+OGSMay1wT2PzwT2vCTskkmg==} engines: {node: '>=18.0.0'} hasBin: true peerDependencies: - '@cloudflare/workers-types': ^4.20250712.0 + '@cloudflare/workers-types': ^4.20250730.0 peerDependenciesMeta: '@cloudflare/workers-types': optional: true @@ -5166,28 +5174,33 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 + '@babel/types@7.28.2': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@cloudflare/kv-asset-handler@0.4.0': dependencies: mime: 3.0.0 - '@cloudflare/unenv-preset@2.4.1(unenv@2.0.0-rc.17)(workerd@1.20250712.0)': + '@cloudflare/unenv-preset@2.5.0(unenv@2.0.0-rc.19)(workerd@1.20250730.0)': dependencies: - unenv: 2.0.0-rc.17 + unenv: 2.0.0-rc.19 optionalDependencies: - workerd: 1.20250712.0 + workerd: 1.20250730.0 - '@cloudflare/vite-plugin@1.10.1(rollup@4.44.1)(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250712.0)(wrangler@4.26.0)': + '@cloudflare/vite-plugin@1.11.0(rollup@4.44.1)(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250730.0)(wrangler@4.27.0)': dependencies: - '@cloudflare/unenv-preset': 2.4.1(unenv@2.0.0-rc.17)(workerd@1.20250712.0) + '@cloudflare/unenv-preset': 2.5.0(unenv@2.0.0-rc.19)(workerd@1.20250730.0) '@mjackson/node-fetch-server': 0.6.1 '@rollup/plugin-replace': 6.0.2(rollup@4.44.1) get-port: 7.1.0 - miniflare: 4.20250712.2 + miniflare: 4.20250730.0 picocolors: 1.1.1 tinyglobby: 0.2.14 - unenv: 2.0.0-rc.17 - vite: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - wrangler: 4.26.0 + unenv: 2.0.0-rc.19 + vite: 7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + wrangler: 4.27.0 ws: 8.18.0 transitivePeerDependencies: - bufferutil @@ -5195,19 +5208,19 @@ snapshots: - utf-8-validate - workerd - '@cloudflare/workerd-darwin-64@1.20250712.0': + '@cloudflare/workerd-darwin-64@1.20250730.0': optional: true - '@cloudflare/workerd-darwin-arm64@1.20250712.0': + '@cloudflare/workerd-darwin-arm64@1.20250730.0': optional: true - '@cloudflare/workerd-linux-64@1.20250712.0': + '@cloudflare/workerd-linux-64@1.20250730.0': optional: true - '@cloudflare/workerd-linux-arm64@1.20250712.0': + '@cloudflare/workerd-linux-arm64@1.20250730.0': optional: true - '@cloudflare/workerd-windows-64@1.20250712.0': + '@cloudflare/workerd-windows-64@1.20250730.0': optional: true '@conventional-changelog/git-client@2.5.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.0)': @@ -5277,19 +5290,19 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0)': + '@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1)': dependencies: '@babel/runtime': 7.23.5 '@emotion/babel-plugin': 11.13.5 '@emotion/cache': 11.14.0 '@emotion/serialize': 1.3.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.0) + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.1) '@emotion/utils': 1.4.2 '@emotion/weak-memoize': 0.4.0 hoist-non-react-statics: 3.3.2 - react: 19.1.0 + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 transitivePeerDependencies: - supports-color @@ -5303,18 +5316,18 @@ snapshots: '@emotion/sheet@1.4.0': {} - '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0)': + '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1)': dependencies: '@babel/runtime': 7.23.5 '@emotion/babel-plugin': 11.13.5 '@emotion/is-prop-valid': 1.3.1 - '@emotion/react': 11.14.0(@types/react@19.1.8)(react@19.1.0) + '@emotion/react': 11.14.0(@types/react@19.1.9)(react@19.1.1) '@emotion/serialize': 1.3.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.0) + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.1) '@emotion/utils': 1.4.2 - react: 19.1.0 + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 transitivePeerDependencies: - supports-color @@ -5322,9 +5335,9 @@ snapshots: '@emotion/unitless@0.8.1': {} - '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.1.0)': + '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 '@emotion/utils@1.4.2': {} @@ -5745,16 +5758,16 @@ snapshots: dependencies: which: 3.0.1 - '@oxc-project/runtime@0.77.3': {} + '@oxc-project/runtime@0.78.0': {} - '@oxc-project/types@0.77.3': {} + '@oxc-project/types@0.78.0': {} '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.54.1': + '@playwright/test@1.54.2': dependencies: - playwright: 1.54.1 + playwright: 1.54.2 '@polka/url@1.0.0-next.29': {} @@ -5776,7 +5789,7 @@ snapshots: dependencies: quansync: 0.2.10 - '@react-router/dev@7.7.0(@types/node@22.16.5)(babel-plugin-macros@3.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(react-router@7.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(tsx@4.20.3)(typescript@5.8.3)(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(wrangler@4.26.0)(yaml@2.7.1)': + '@react-router/dev@7.7.0(@types/node@22.17.0)(babel-plugin-macros@3.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(react-router@7.7.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(tsx@4.20.3)(typescript@5.9.2)(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(wrangler@4.27.0)(yaml@2.7.1)': dependencies: '@babel/core': 7.28.0 '@babel/generator': 7.28.0 @@ -5786,7 +5799,7 @@ snapshots: '@babel/traverse': 7.28.0 '@babel/types': 7.28.1 '@npmcli/package-json': 4.0.1 - '@react-router/node': 7.7.0(react-router@7.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(typescript@5.8.3) + '@react-router/node': 7.7.0(react-router@7.7.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(typescript@5.9.2) arg: 5.0.2 babel-dead-code-elimination: 1.0.10 chokidar: 4.0.3 @@ -5800,16 +5813,16 @@ snapshots: picocolors: 1.1.1 prettier: 2.8.8 react-refresh: 0.14.2 - react-router: 7.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react-router: 7.7.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) semver: 7.7.2 set-cookie-parser: 2.7.1 tinyglobby: 0.2.14 - valibot: 0.41.0(typescript@5.8.3) - vite: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vite-node: 3.2.4(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + valibot: 0.41.0(typescript@5.9.2) + vite: 7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite-node: 3.2.4(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) optionalDependencies: - typescript: 5.8.3 - wrangler: 4.26.0 + typescript: 5.9.2 + wrangler: 4.27.0 transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -5826,58 +5839,58 @@ snapshots: - tsx - yaml - '@react-router/node@7.7.0(react-router@7.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(typescript@5.8.3)': + '@react-router/node@7.7.0(react-router@7.7.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(typescript@5.9.2)': dependencies: '@mjackson/node-fetch-server': 0.2.0 - react-router: 7.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react-router: 7.7.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 - '@rolldown/binding-android-arm64@1.0.0-beta.29': + '@rolldown/binding-android-arm64@1.0.0-beta.30': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-beta.29': + '@rolldown/binding-darwin-arm64@1.0.0-beta.30': optional: true - '@rolldown/binding-darwin-x64@1.0.0-beta.29': + '@rolldown/binding-darwin-x64@1.0.0-beta.30': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-beta.29': + '@rolldown/binding-freebsd-x64@1.0.0-beta.30': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.29': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.30': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.29': + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.30': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.29': + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.30': optional: true - '@rolldown/binding-linux-arm64-ohos@1.0.0-beta.29': + '@rolldown/binding-linux-arm64-ohos@1.0.0-beta.30': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.29': + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.30': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-beta.29': + '@rolldown/binding-linux-x64-musl@1.0.0-beta.30': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-beta.29': + '@rolldown/binding-wasm32-wasi@1.0.0-beta.30': dependencies: '@napi-rs/wasm-runtime': 1.0.1 optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.29': + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.30': optional: true - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.29': + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.30': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.29': + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.30': optional: true - '@rolldown/pluginutils@1.0.0-beta.29': {} + '@rolldown/pluginutils@1.0.0-beta.30': {} '@rollup/plugin-replace@6.0.2(rollup@4.44.1)': dependencies: @@ -5957,11 +5970,11 @@ snapshots: '@simple-libs/child-process-utils@1.0.1': dependencies: '@simple-libs/stream-utils': 1.1.0 - '@types/node': 22.16.5 + '@types/node': 22.17.0 '@simple-libs/stream-utils@1.1.0': dependencies: - '@types/node': 22.16.5 + '@types/node': 22.17.0 '@sindresorhus/is@7.0.2': {} @@ -6099,12 +6112,12 @@ snapshots: postcss-selector-parser: 6.0.10 tailwindcss: 4.1.11 - '@tailwindcss/vite@4.1.11(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': + '@tailwindcss/vite@4.1.11(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': dependencies: '@tailwindcss/node': 4.1.11 '@tailwindcss/oxide': 4.1.11 tailwindcss: 4.1.11 - vite: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) '@tsconfig/strictest@2.0.5': {} @@ -6157,7 +6170,7 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 22.16.5 + '@types/node': 22.17.0 '@types/hast@3.0.3': dependencies: @@ -6172,7 +6185,7 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 22.16.5 + '@types/node': 22.17.0 '@types/mdast@4.0.3': dependencies: @@ -6182,7 +6195,7 @@ snapshots: '@types/ms@0.7.34': {} - '@types/node@22.16.5': + '@types/node@22.17.0': dependencies: undici-types: 6.21.0 @@ -6196,16 +6209,16 @@ snapshots: dependencies: '@types/react': 18.3.20 - '@types/react-dom@19.1.6(@types/react@19.1.8)': + '@types/react-dom@19.1.7(@types/react@19.1.9)': dependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 '@types/react@18.3.20': dependencies: '@types/prop-types': 15.7.11 csstype: 3.1.3 - '@types/react@19.1.8': + '@types/react@19.1.9': dependencies: csstype: 3.1.3 @@ -6221,41 +6234,41 @@ snapshots: '@types/unist@3.0.2': {} - '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2))(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2) '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2) '@typescript-eslint/visitor-keys': 8.38.0 eslint: 9.32.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2)': dependencies: '@typescript-eslint/scope-manager': 8.38.0 '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) '@typescript-eslint/visitor-keys': 8.38.0 debug: 4.4.1 eslint: 9.32.0(jiti@2.4.2) - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.38.0(typescript@5.8.3)': + '@typescript-eslint/project-service@8.38.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.9.2) '@typescript-eslint/types': 8.38.0 debug: 4.4.1 - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -6264,28 +6277,28 @@ snapshots: '@typescript-eslint/types': 8.38.0 '@typescript-eslint/visitor-keys': 8.38.0 - '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.8.3)': + '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.9.2)': dependencies: - typescript: 5.8.3 + typescript: 5.9.2 - '@typescript-eslint/type-utils@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2)': dependencies: '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2) debug: 4.4.1 eslint: 9.32.0(jiti@2.4.2) - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color '@typescript-eslint/types@8.38.0': {} - '@typescript-eslint/typescript-estree@8.38.0(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.38.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/project-service': 8.38.0(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) + '@typescript-eslint/project-service': 8.38.0(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.9.2) '@typescript-eslint/types': 8.38.0 '@typescript-eslint/visitor-keys': 8.38.0 debug: 4.4.1 @@ -6293,19 +6306,19 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/utils@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2)': dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.4.2)) '@typescript-eslint/scope-manager': 8.38.0 '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) eslint: 9.32.0(jiti@2.4.2) - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -6388,34 +6401,34 @@ snapshots: transitivePeerDependencies: - conventional-commits-filter - '@vitejs/test-dep-client-in-server2@file:packages/plugin-rsc/examples/basic/test-dep/client-in-server2(react@19.1.0)': + '@vitejs/test-dep-client-in-server2@file:packages/plugin-rsc/examples/basic/test-dep/client-in-server2(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 - '@vitejs/test-dep-client-in-server@file:packages/plugin-rsc/examples/basic/test-dep/client-in-server(react@19.1.0)': + '@vitejs/test-dep-client-in-server@file:packages/plugin-rsc/examples/basic/test-dep/client-in-server(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 - '@vitejs/test-dep-css-in-server@file:packages/plugin-rsc/examples/basic/test-dep/css-in-server(react@19.1.0)': + '@vitejs/test-dep-css-in-server@file:packages/plugin-rsc/examples/basic/test-dep/css-in-server(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 - '@vitejs/test-dep-non-js@file:packages/plugin-react-swc/playground/ts-lib/test-dep/non-js(react@19.1.0)': + '@vitejs/test-dep-non-js@file:packages/plugin-react-swc/playground/ts-lib/test-dep/non-js(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 - '@vitejs/test-dep-server-in-client@file:packages/plugin-rsc/examples/basic/test-dep/server-in-client(react@19.1.0)': + '@vitejs/test-dep-server-in-client@file:packages/plugin-rsc/examples/basic/test-dep/server-in-client(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 - '@vitejs/test-dep-server-in-server@file:packages/plugin-rsc/examples/basic/test-dep/server-in-server(react@19.1.0)': + '@vitejs/test-dep-server-in-server@file:packages/plugin-rsc/examples/basic/test-dep/server-in-server(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 - '@vitejs/test-dep-transitive-cjs@file:packages/plugin-rsc/examples/basic/test-dep/transitive-cjs(react@19.1.0)': + '@vitejs/test-dep-transitive-cjs@file:packages/plugin-rsc/examples/basic/test-dep/transitive-cjs(react@19.1.1)': dependencies: - react: 19.1.0 - use-sync-external-store: 1.5.0(react@19.1.0) + react: 19.1.1 + use-sync-external-store: 1.5.0(react@19.1.1) '@vitest/expect@3.2.4': dependencies: @@ -6425,13 +6438,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': + '@vitest/mocker@3.2.4(vite@7.0.5(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.5(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) '@vitest/pretty-format@3.2.4': dependencies: @@ -6862,7 +6875,7 @@ snapshots: eslint: 9.32.0(jiti@2.4.2) eslint-compat-utils: 0.5.1(eslint@9.32.0(jiti@2.4.2)) - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.32.0(jiti@2.4.2)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2))(eslint@9.32.0(jiti@2.4.2)): dependencies: '@typescript-eslint/types': 8.38.0 comment-parser: 1.4.1 @@ -6875,11 +6888,11 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.9.2 optionalDependencies: - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2) transitivePeerDependencies: - supports-color - eslint-plugin-n@17.21.2(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3): + eslint-plugin-n@17.21.3(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2): dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.4.2)) enhanced-resolve: 5.18.2 @@ -6890,11 +6903,11 @@ snapshots: globrex: 0.1.2 ignore: 5.3.2 semver: 7.7.2 - ts-declaration-location: 1.0.7(typescript@5.8.3) + ts-declaration-location: 1.0.7(typescript@5.9.2) transitivePeerDependencies: - typescript - eslint-plugin-regexp@2.9.0(eslint@9.32.0(jiti@2.4.2)): + eslint-plugin-regexp@2.9.1(eslint@9.32.0(jiti@2.4.2)): dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 @@ -7022,7 +7035,7 @@ snapshots: expect-type@1.2.1: {} - exsolve@1.0.4: {} + exsolve@1.0.7: {} extend@3.0.2: {} @@ -7793,7 +7806,7 @@ snapshots: mimic-function@5.0.1: {} - miniflare@4.20250712.2: + miniflare@4.20250730.0: dependencies: '@cspotcode/source-map-support': 0.8.1 acorn: 8.14.0 @@ -7803,7 +7816,7 @@ snapshots: sharp: 0.33.5 stoppable: 1.1.0 undici: 7.12.0 - workerd: 1.20250712.0 + workerd: 1.20250730.0 ws: 8.18.0 youch: 4.1.0-beta.10 zod: 3.22.3 @@ -8003,15 +8016,15 @@ snapshots: pidtree@0.6.0: {} - playwright-chromium@1.54.1: + playwright-chromium@1.54.2: dependencies: - playwright-core: 1.54.1 + playwright-core: 1.54.2 - playwright-core@1.54.1: {} + playwright-core@1.54.2: {} - playwright@1.54.1: + playwright@1.54.2: dependencies: - playwright-core: 1.54.1 + playwright-core: 1.54.2 optionalDependencies: fsevents: 2.3.2 @@ -8085,46 +8098,46 @@ snapshots: react: 18.3.1 scheduler: 0.23.2 - react-dom@19.1.0(react@19.1.0): + react-dom@19.1.1(react@19.1.1): dependencies: - react: 19.1.0 + react: 19.1.1 scheduler: 0.26.0 react-is@16.13.1: {} - react-is@19.1.0: {} + react-is@19.1.1: {} react-refresh@0.14.2: {} react-refresh@0.17.0: {} - react-router@7.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-router@7.7.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: cookie: 1.0.2 - react: 19.1.0 + react: 19.1.1 set-cookie-parser: 2.7.1 optionalDependencies: - react-dom: 19.1.0(react@19.1.0) + react-dom: 19.1.1(react@19.1.1) - react-server-dom-webpack@19.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-server-dom-webpack@19.1.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: acorn-loose: 8.5.2 neo-async: 2.6.2 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) webpack-sources: 3.3.3 - react-switch@7.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-switch@7.1.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: prop-types: 15.8.1 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) react@18.3.1: dependencies: loose-envify: 1.4.0 - react@19.1.0: {} + react@19.1.1: {} readdirp@4.1.2: {} @@ -8184,60 +8197,60 @@ snapshots: rfdc@1.4.1: {} - rolldown-plugin-dts@0.14.1(rolldown@1.0.0-beta.29)(typescript@5.8.3): + rolldown-plugin-dts@0.15.1(rolldown@1.0.0-beta.30)(typescript@5.9.2): dependencies: '@babel/generator': 7.28.0 '@babel/parser': 7.28.0 - '@babel/types': 7.28.1 + '@babel/types': 7.28.2 ast-kit: 2.1.1 birpc: 2.5.0 debug: 4.4.1 dts-resolver: 2.1.1 get-tsconfig: 4.10.1 - rolldown: 1.0.0-beta.29 + rolldown: 1.0.0-beta.30 optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - oxc-resolver - supports-color - rolldown-vite@7.0.11(@types/node@22.16.5)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1): + rolldown-vite@7.0.12(@types/node@22.17.0)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1): dependencies: fdir: 6.4.6(picomatch@4.0.3) lightningcss: 1.30.1 picomatch: 4.0.3 postcss: 8.5.6 - rolldown: 1.0.0-beta.29 + rolldown: 1.0.0-beta.30 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 22.16.5 + '@types/node': 22.17.0 esbuild: 0.25.5 fsevents: 2.3.3 jiti: 2.4.2 tsx: 4.20.3 yaml: 2.7.1 - rolldown@1.0.0-beta.29: + rolldown@1.0.0-beta.30: dependencies: - '@oxc-project/runtime': 0.77.3 - '@oxc-project/types': 0.77.3 - '@rolldown/pluginutils': 1.0.0-beta.29 + '@oxc-project/runtime': 0.78.0 + '@oxc-project/types': 0.78.0 + '@rolldown/pluginutils': 1.0.0-beta.30 ansis: 4.1.0 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-beta.29 - '@rolldown/binding-darwin-arm64': 1.0.0-beta.29 - '@rolldown/binding-darwin-x64': 1.0.0-beta.29 - '@rolldown/binding-freebsd-x64': 1.0.0-beta.29 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.29 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.29 - '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.29 - '@rolldown/binding-linux-arm64-ohos': 1.0.0-beta.29 - '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.29 - '@rolldown/binding-linux-x64-musl': 1.0.0-beta.29 - '@rolldown/binding-wasm32-wasi': 1.0.0-beta.29 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.29 - '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.29 - '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.29 + '@rolldown/binding-android-arm64': 1.0.0-beta.30 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.30 + '@rolldown/binding-darwin-x64': 1.0.0-beta.30 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.30 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.30 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.30 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.30 + '@rolldown/binding-linux-arm64-ohos': 1.0.0-beta.30 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.30 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.30 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.30 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.30 + '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.30 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.30 rollup@4.44.1: dependencies: @@ -8335,7 +8348,7 @@ snapshots: signal-exit@4.1.0: {} - simple-git-hooks@2.13.0: {} + simple-git-hooks@2.13.1: {} simple-swizzle@0.2.2: dependencies: @@ -8440,7 +8453,7 @@ snapshots: dependencies: inline-style-parser: 0.2.2 - styled-components@6.1.19(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + styled-components@6.1.19(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: '@emotion/is-prop-valid': 1.2.2 '@emotion/unitless': 0.8.1 @@ -8448,8 +8461,8 @@ snapshots: css-to-react-native: 3.2.0 csstype: 3.1.3 postcss: 8.4.49 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) shallowequal: 1.1.0 stylis: 4.3.2 tslib: 2.6.2 @@ -8504,20 +8517,22 @@ snapshots: totalist@3.0.1: {} + tree-kill@1.2.2: {} + trim-lines@3.0.1: {} trough@2.1.0: {} - ts-api-utils@2.1.0(typescript@5.8.3): + ts-api-utils@2.1.0(typescript@5.9.2): dependencies: - typescript: 5.8.3 + typescript: 5.9.2 - ts-declaration-location@1.0.7(typescript@5.8.3): + ts-declaration-location@1.0.7(typescript@5.9.2): dependencies: - picomatch: 4.0.2 - typescript: 5.8.3 + picomatch: 4.0.3 + typescript: 5.9.2 - tsdown@0.13.0(publint@0.3.12)(typescript@5.8.3): + tsdown@0.13.2(publint@0.3.12)(typescript@5.9.2): dependencies: ansis: 4.1.0 cac: 6.7.14 @@ -8526,15 +8541,16 @@ snapshots: diff: 8.0.2 empathic: 2.0.0 hookable: 5.5.3 - rolldown: 1.0.0-beta.29 - rolldown-plugin-dts: 0.14.1(rolldown@1.0.0-beta.29)(typescript@5.8.3) + rolldown: 1.0.0-beta.30 + rolldown-plugin-dts: 0.15.1(rolldown@1.0.0-beta.30)(typescript@5.9.2) semver: 7.7.2 tinyexec: 1.0.1 tinyglobby: 0.2.14 + tree-kill: 1.2.2 unconfig: 7.3.2 optionalDependencies: publint: 0.3.12 - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - '@typescript/native-preview' - oxc-resolver @@ -8559,18 +8575,18 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3): + typescript-eslint@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2))(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2) + '@typescript-eslint/parser': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2) eslint: 9.32.0(jiti@2.4.2) - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - typescript@5.8.3: {} + typescript@5.9.2: {} ufo@1.6.1: {} @@ -8588,10 +8604,10 @@ snapshots: undici@7.12.0: {} - unenv@2.0.0-rc.17: + unenv@2.0.0-rc.19: dependencies: defu: 6.1.4 - exsolve: 1.0.4 + exsolve: 1.0.7 ohash: 2.0.11 pathe: 2.0.3 ufo: 1.6.1 @@ -8679,15 +8695,15 @@ snapshots: dependencies: punycode: 2.3.1 - use-sync-external-store@1.5.0(react@19.1.0): + use-sync-external-store@1.5.0(react@19.1.1): dependencies: - react: 19.1.0 + react: 19.1.1 util-deprecate@1.0.2: {} - valibot@0.41.0(typescript@5.8.3): + valibot@0.41.0(typescript@5.9.2): optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 validate-npm-package-license@3.0.4: dependencies: @@ -8707,23 +8723,23 @@ snapshots: unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 - vite-dev-rpc@1.1.0(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + vite-dev-rpc@1.1.0(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): dependencies: birpc: 2.5.0 - vite: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vite-hot-client: 2.1.0(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + vite: 7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite-hot-client: 2.1.0(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) - vite-hot-client@2.1.0(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + vite-hot-client@2.1.0(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): dependencies: - vite: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vite-node@3.2.4(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): + vite-node@3.2.4(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: cac: 6.7.14 debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) transitivePeerDependencies: - '@types/node' - jiti @@ -8738,7 +8754,7 @@ snapshots: - tsx - yaml - vite-plugin-inspect@11.3.2(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + vite-plugin-inspect@11.3.2(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): dependencies: ansis: 4.1.0 debug: 4.4.1 @@ -8748,12 +8764,12 @@ snapshots: perfect-debounce: 1.0.0 sirv: 3.0.1 unplugin-utils: 0.2.4 - vite: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vite-dev-rpc: 1.1.0(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + vite: 7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite-dev-rpc: 1.1.0(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) transitivePeerDependencies: - supports-color - vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): + vite@7.0.5(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: esbuild: 0.25.5 fdir: 6.4.6(picomatch@4.0.2) @@ -8762,14 +8778,14 @@ snapshots: rollup: 4.44.1 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 22.16.5 + '@types/node': 22.17.0 fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.30.1 tsx: 4.20.3 yaml: 2.7.1 - vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): + vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: esbuild: 0.25.5 fdir: 6.4.6(picomatch@4.0.3) @@ -8778,22 +8794,22 @@ snapshots: rollup: 4.44.1 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 22.16.5 + '@types/node': 22.17.0 fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.30.1 tsx: 4.20.3 yaml: 2.7.1 - vitefu@1.1.1(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + vitefu@1.1.1(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): optionalDependencies: - vite: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + '@vitest/mocker': 3.2.4(vite@7.0.5(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -8811,12 +8827,12 @@ snapshots: tinyglobby: 0.2.14 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.0.5(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vite-node: 3.2.4(@types/node@22.16.5)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.5(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite-node: 3.2.4(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.16.5 + '@types/node': 22.17.0 transitivePeerDependencies: - jiti - less @@ -8852,24 +8868,24 @@ snapshots: wordwrap@1.0.0: {} - workerd@1.20250712.0: + workerd@1.20250730.0: optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20250712.0 - '@cloudflare/workerd-darwin-arm64': 1.20250712.0 - '@cloudflare/workerd-linux-64': 1.20250712.0 - '@cloudflare/workerd-linux-arm64': 1.20250712.0 - '@cloudflare/workerd-windows-64': 1.20250712.0 + '@cloudflare/workerd-darwin-64': 1.20250730.0 + '@cloudflare/workerd-darwin-arm64': 1.20250730.0 + '@cloudflare/workerd-linux-64': 1.20250730.0 + '@cloudflare/workerd-linux-arm64': 1.20250730.0 + '@cloudflare/workerd-windows-64': 1.20250730.0 - wrangler@4.26.0: + wrangler@4.27.0: dependencies: '@cloudflare/kv-asset-handler': 0.4.0 - '@cloudflare/unenv-preset': 2.4.1(unenv@2.0.0-rc.17)(workerd@1.20250712.0) + '@cloudflare/unenv-preset': 2.5.0(unenv@2.0.0-rc.19)(workerd@1.20250730.0) blake3-wasm: 2.1.5 esbuild: 0.25.4 - miniflare: 4.20250712.2 + miniflare: 4.20250730.0 path-to-regexp: 6.3.0 - unenv: 2.0.0-rc.17 - workerd: 1.20250712.0 + unenv: 2.0.0-rc.19 + workerd: 1.20250730.0 optionalDependencies: fsevents: 2.3.3 transitivePeerDependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index d7ff73e83..29c84f27b 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -6,7 +6,7 @@ packages: catalogs: rolldown-vite: - vite: npm:rolldown-vite@^7.0.11 + vite: npm:rolldown-vite@^7.0.12 overrides: '@types/estree': ^1.0.8 From 44616384d67a54cd0ae52884aa7e6dc5d2907ba4 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 4 Aug 2025 15:55:13 +0900 Subject: [PATCH 167/313] ci: add `if-no-files-found: ignore` to `actions/upload-artifact` (#672) --- .github/workflows/ci-rsc.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci-rsc.yml b/.github/workflows/ci-rsc.yml index 1409cfaac..9964f6796 100644 --- a/.github/workflows/ci-rsc.yml +++ b/.github/workflows/ci-rsc.yml @@ -83,3 +83,4 @@ jobs: name: test-results-${{ matrix.os }}-${{ matrix.browser }}${{ matrix.rolldown == true && '-rolldown' || '' }}${{ matrix.react_version && format('-react-{0}', matrix.react_version) || '' }} path: | packages/plugin-rsc/test-results + if-no-files-found: ignore From 775ac6157ef7af545b4cb03ff116a01c7cffa815 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 4 Aug 2025 16:20:09 +0900 Subject: [PATCH 168/313] test(rsc): test shared module hmr (#671) Co-authored-by: Claude --- packages/plugin-rsc/e2e/basic.test.ts | 84 +++++++++++++++++++ .../src/routes/hmr-shared/atomic/client.tsx | 21 +++++ .../hmr-shared/atomic/error-boundary.tsx | 40 +++++++++ .../src/routes/hmr-shared/atomic/server.tsx | 14 ++++ .../src/routes/hmr-shared/atomic/shared.tsx | 1 + .../basic/src/routes/hmr-shared/client.tsx | 13 +++ .../basic/src/routes/hmr-shared/server.tsx | 11 +++ .../basic/src/routes/hmr-shared/shared1.tsx | 3 + .../basic/src/routes/hmr-shared/shared2.tsx | 3 + .../examples/basic/src/routes/root.tsx | 6 ++ packages/plugin-rsc/src/plugin.ts | 4 +- 11 files changed, 199 insertions(+), 1 deletion(-) create mode 100644 packages/plugin-rsc/examples/basic/src/routes/hmr-shared/atomic/client.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/hmr-shared/atomic/error-boundary.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/hmr-shared/atomic/server.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/hmr-shared/atomic/shared.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/hmr-shared/client.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/hmr-shared/server.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/hmr-shared/shared1.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/hmr-shared/shared2.tsx diff --git a/packages/plugin-rsc/e2e/basic.test.ts b/packages/plugin-rsc/e2e/basic.test.ts index 7b14539b6..71c2679a1 100644 --- a/packages/plugin-rsc/e2e/basic.test.ts +++ b/packages/plugin-rsc/e2e/basic.test.ts @@ -316,6 +316,90 @@ function defineTest(f: Fixture) { editor.reset() await expect(locator).toContainText('[dep: 1]') }) + + test('shared hmr basic', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await using _ = await expectNoReload(page) + + // Test initial state + await expect(page.getByTestId('test-hmr-shared-server')).toContainText( + '(shared1, shared2)', + ) + await expect(page.getByTestId('test-hmr-shared-client')).toContainText( + '(shared1, shared2)', + ) + + // Test 1: Component HMR (shared1.tsx) + const editor1 = f.createEditor('src/routes/hmr-shared/shared1.tsx') + editor1.edit((s) => s.replace('shared1', 'shared1-edit')) + + // Verify both server and client components updated + await expect(page.getByTestId('test-hmr-shared-server')).toContainText( + '(shared1-edit, shared2)', + ) + await expect(page.getByTestId('test-hmr-shared-client')).toContainText( + '(shared1-edit, shared2)', + ) + + editor1.reset() + await expect(page.getByTestId('test-hmr-shared-server')).toContainText( + '(shared1, shared2)', + ) + await expect(page.getByTestId('test-hmr-shared-client')).toContainText( + '(shared1, shared2)', + ) + + // Test 2: Non-component HMR (shared2.tsx) + const editor2 = f.createEditor('src/routes/hmr-shared/shared2.tsx') + editor2.edit((s) => s.replace('shared2', 'shared2-edit')) + + // Verify both server and client components updated + await expect(page.getByTestId('test-hmr-shared-server')).toContainText( + '(shared1, shared2-edit)', + ) + await expect(page.getByTestId('test-hmr-shared-client')).toContainText( + '(shared1, shared2-edit)', + ) + + editor2.reset() + await expect(page.getByTestId('test-hmr-shared-server')).toContainText( + '(shared1, shared2)', + ) + await expect(page.getByTestId('test-hmr-shared-client')).toContainText( + '(shared1, shared2)', + ) + }) + + // for this use case to work, server refetch/render and client hmr needs to applied atomically + // at the same time. Next.js doesn't seem to support this either. + // https://github.com/hi-ogawa/reproductions/tree/main/next-rsc-hmr-shared-module + test('shared hmr not atomic', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await expect(page.getByTestId('test-hmr-shared-atomic')).toContainText( + 'ok (test-shared)', + ) + + // non-atomic update causes an error + const editor = f.createEditor('src/routes/hmr-shared/atomic/shared.tsx') + editor.edit((s) => s.replace('test-shared', 'test-shared-edit')) + await expect(page.getByTestId('test-hmr-shared-atomic')).toContainText( + 'ErrorBoundary', + ) + + await page.reload() + await expect(page.getByText('ok (test-shared-edit)')).toBeVisible() + + // non-atomic update causes an error + editor.reset() + await expect(page.getByTestId('test-hmr-shared-atomic')).toContainText( + 'ErrorBoundary', + ) + + await page.reload() + await expect(page.getByText('ok (test-shared)')).toBeVisible() + }) }) test('css @js', async ({ page }) => { diff --git a/packages/plugin-rsc/examples/basic/src/routes/hmr-shared/atomic/client.tsx b/packages/plugin-rsc/examples/basic/src/routes/hmr-shared/atomic/client.tsx new file mode 100644 index 000000000..bc28b88a0 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/hmr-shared/atomic/client.tsx @@ -0,0 +1,21 @@ +'use client' + +import React from 'react' +import { testShared } from './shared' + +export function TestClient({ + testSharedFromServer, +}: { + testSharedFromServer: string +}) { + React.useEffect(() => { + console.log({ testShared, testSharedFromServer }) + if (testShared !== testSharedFromServer) { + throw new Error( + `Mismatch: ${JSON.stringify({ testShared, testSharedFromServer })}`, + ) + } + }, [testShared, testSharedFromServer]) + + return <>ok ({testShared}) +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/hmr-shared/atomic/error-boundary.tsx b/packages/plugin-rsc/examples/basic/src/routes/hmr-shared/atomic/error-boundary.tsx new file mode 100644 index 000000000..af59d2c4b --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/hmr-shared/atomic/error-boundary.tsx @@ -0,0 +1,40 @@ +'use client' + +import * as React from 'react' + +interface Props { + children?: React.ReactNode +} + +interface State { + error: Error | null +} + +export default class ErrorBoundary extends React.Component { + constructor(props: Props) { + super(props) + this.state = { error: null } + } + + static getDerivedStateFromError(error: Error) { + return { error } + } + + render() { + if (this.state.error) { + return ( + + ErrorBoundary: {this.state.error.message} + + + ) + } + return this.props.children + } +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/hmr-shared/atomic/server.tsx b/packages/plugin-rsc/examples/basic/src/routes/hmr-shared/atomic/server.tsx new file mode 100644 index 000000000..478d9ac03 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/hmr-shared/atomic/server.tsx @@ -0,0 +1,14 @@ +import { TestClient } from './client' +import ErrorBoundary from './error-boundary' +import { testShared } from './shared' + +export function TestHmrSharedAtomic() { + return ( +
+ test-hmr-shared-atomic:{' '} + + + +
+ ) +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/hmr-shared/atomic/shared.tsx b/packages/plugin-rsc/examples/basic/src/routes/hmr-shared/atomic/shared.tsx new file mode 100644 index 000000000..64f17a986 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/hmr-shared/atomic/shared.tsx @@ -0,0 +1 @@ +export const testShared = 'test-shared' diff --git a/packages/plugin-rsc/examples/basic/src/routes/hmr-shared/client.tsx b/packages/plugin-rsc/examples/basic/src/routes/hmr-shared/client.tsx new file mode 100644 index 000000000..ef7497222 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/hmr-shared/client.tsx @@ -0,0 +1,13 @@ +'use client' + +import { TestHmrSharedComponent } from './shared1' +import { testHmrSharedObject } from './shared2' + +export function TestHmrSharedClient() { + return ( +
+ test-hmr-shared-client: (,{' '} + {testHmrSharedObject.value}) +
+ ) +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/hmr-shared/server.tsx b/packages/plugin-rsc/examples/basic/src/routes/hmr-shared/server.tsx new file mode 100644 index 000000000..f53a1037a --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/hmr-shared/server.tsx @@ -0,0 +1,11 @@ +import { TestHmrSharedComponent } from './shared1' +import { testHmrSharedObject } from './shared2' + +export function TestHmrSharedServer() { + return ( +
+ test-hmr-shared-server: (,{' '} + {testHmrSharedObject.value}) +
+ ) +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/hmr-shared/shared1.tsx b/packages/plugin-rsc/examples/basic/src/routes/hmr-shared/shared1.tsx new file mode 100644 index 000000000..b2fc6ea7d --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/hmr-shared/shared1.tsx @@ -0,0 +1,3 @@ +export function TestHmrSharedComponent() { + return <>shared1 +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/hmr-shared/shared2.tsx b/packages/plugin-rsc/examples/basic/src/routes/hmr-shared/shared2.tsx new file mode 100644 index 000000000..fd39b39fb --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/hmr-shared/shared2.tsx @@ -0,0 +1,3 @@ +export const testHmrSharedObject = { + value: 'shared2', +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/root.tsx b/packages/plugin-rsc/examples/basic/src/routes/root.tsx index b3a61be94..41d73ace8 100644 --- a/packages/plugin-rsc/examples/basic/src/routes/root.tsx +++ b/packages/plugin-rsc/examples/basic/src/routes/root.tsx @@ -32,6 +32,9 @@ import { TestHydrationMismatch } from './hydration-mismatch/server' import { TestBrowserOnly } from './browser-only/client' import { TestTransitiveCjsClient } from './deps/transitive-cjs/client' import TestDepCssInServer from '@vitejs/test-dep-css-in-server/server' +import { TestHmrSharedServer } from './hmr-shared/server' +import { TestHmrSharedClient } from './hmr-shared/client' +import { TestHmrSharedAtomic } from './hmr-shared/atomic/server' export function Root(props: { url: URL }) { return ( @@ -56,6 +59,9 @@ export function Root(props: { url: URL }) { + + + diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index 01a7e1630..37dd4201c 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -429,7 +429,9 @@ export default function vitePluginRsc( const ids = ctx.modules.map((mod) => mod.id).filter((v) => v !== null) if (ids.length === 0) return - // TODO: what if shared component? + // a shared component/module will have `isInsideClientBoundary = false` on `rsc` environment + // and `isInsideClientBoundary = true` on `client` environment, + // which means both server hmr and client hmr will be triggered. function isInsideClientBoundary(mods: EnvironmentModuleNode[]) { const visited = new Set() function recurse(mod: EnvironmentModuleNode): boolean { From 9b2741f3dc3da8e9e2ef486ab8d7eaa317230f7d Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 4 Aug 2025 18:16:52 +0900 Subject: [PATCH 169/313] docs(rsc): notes on CSS support (#673) Co-authored-by: Claude --- packages/plugin-rsc/README.md | 37 +++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/packages/plugin-rsc/README.md b/packages/plugin-rsc/README.md index 50a165080..acc1bc5e8 100644 --- a/packages/plugin-rsc/README.md +++ b/packages/plugin-rsc/README.md @@ -264,6 +264,9 @@ export function renderHTML(...) {} #### `import.meta.viteRsc.loadCss` +> [!NOTE] +> The plugin automatically injects CSS for server components. See the [CSS Support](#css-support) section for detailed information about automatic CSS injection. + - Type: `(importer?: string) => React.ReactNode` This allows collecting css which is imported through a current server module and injecting them inside server components. @@ -436,6 +439,40 @@ This is a wrapper of `react-server-dom` API and helper API to setup a minimal RS - `hydrate` +## CSS Support + +The plugin automatically handles CSS code-splitting and injection for server components. This eliminates the need to manually call [`import.meta.viteRsc.loadCss()`](#importmetaviterscloadcss) in most cases. + +1. **Component Detection**: The plugin automatically detects server components by looking for: + - Function exports with capital letter names (e.g., `export function Page() {}`) + - Default exports that are functions with capital names (e.g., `export default function Page() {}`) + - Const exports assigned to functions with capital names (e.g., `export const Page = () => {}`) + +2. **CSS Import Detection**: For detected components, the plugin checks if the module imports any CSS files (`.css`, `.scss`, `.sass`, etc.) + +3. **Automatic Wrapping**: When both conditions are met, the plugin wraps the component with a CSS injection wrapper: + +```tsx +// Before transformation +import './styles.css' + +export function Page() { + return
Hello
+} + +// After transformation +import './styles.css' + +export function Page() { + return ( + <> + {import.meta.viteRsc.loadCss()} +
Hello
+ + ) +} +``` + ## Credits This project builds on fundamental techniques and insights from pioneering Vite RSC implementations. From 97b5f1b26c2260825447c7e9781f1b168bebbe62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20De=20Boey?= Date: Tue, 5 Aug 2025 02:09:03 +0200 Subject: [PATCH 170/313] refactor(rsc): update `@mjackson/node-fetch-server` to `@remix-run/node-fetch-server` (#680) --- packages/plugin-rsc/package.json | 2 +- packages/plugin-rsc/src/plugin.ts | 2 +- pnpm-lock.yaml | 16 ++++++++-------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/plugin-rsc/package.json b/packages/plugin-rsc/package.json index a48532370..5d92ab985 100644 --- a/packages/plugin-rsc/package.json +++ b/packages/plugin-rsc/package.json @@ -38,7 +38,7 @@ "prepack": "tsdown" }, "dependencies": { - "@mjackson/node-fetch-server": "^0.7.0", + "@remix-run/node-fetch-server": "^0.8.0", "es-module-lexer": "^1.7.0", "estree-walker": "^3.0.3", "magic-string": "^0.30.17", diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index 37dd4201c..1ba255517 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -4,7 +4,7 @@ import fs from 'node:fs' import { createRequire } from 'node:module' import path from 'node:path' import { fileURLToPath, pathToFileURL } from 'node:url' -import { createRequestListener } from '@mjackson/node-fetch-server' +import { createRequestListener } from '@remix-run/node-fetch-server' import * as esModuleLexer from 'es-module-lexer' import MagicString from 'magic-string' import { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 93502e92c..0867e2a71 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -438,9 +438,9 @@ importers: packages/plugin-rsc: dependencies: - '@mjackson/node-fetch-server': - specifier: ^0.7.0 - version: 0.7.0 + '@remix-run/node-fetch-server': + specifier: ^0.8.0 + version: 0.8.0 es-module-lexer: specifier: ^1.7.0 version: 1.7.0 @@ -1855,9 +1855,6 @@ packages: '@mjackson/node-fetch-server@0.6.1': resolution: {integrity: sha512-9ZJnk/DJjt805uv5PPv11haJIW+HHf3YEEyVXv+8iLQxLD/iXA68FH220XoiTPBC4gCg5q+IMadDw8qPqlA5wg==} - '@mjackson/node-fetch-server@0.7.0': - resolution: {integrity: sha512-un8diyEBKU3BTVj3GzlTPA1kIjCkGdD+AMYQy31Gf9JCkfoZzwgJ79GUtHrF2BN3XPNMLpubbzPcxys+a3uZEw==} - '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} @@ -1952,6 +1949,9 @@ packages: typescript: optional: true + '@remix-run/node-fetch-server@0.8.0': + resolution: {integrity: sha512-8/sKegb4HrM6IdcQeU0KPhj9VOHm5SUqswJDHuMCS3mwbr/NRx078QDbySmn0xslahvvZoOENd7EnK40kWKxkg==} + '@rolldown/binding-android-arm64@1.0.0-beta.30': resolution: {integrity: sha512-4j7QBitb/WMT1fzdJo7BsFvVNaFR5WCQPdf/RPDHEsgQIYwBaHaL47KTZxncGFQDD1UAKN3XScJ0k7LAsZfsvg==} cpu: [arm64] @@ -5701,8 +5701,6 @@ snapshots: '@mjackson/node-fetch-server@0.6.1': {} - '@mjackson/node-fetch-server@0.7.0': {} - '@napi-rs/wasm-runtime@0.2.12': dependencies: '@emnapi/core': 1.4.5 @@ -5846,6 +5844,8 @@ snapshots: optionalDependencies: typescript: 5.9.2 + '@remix-run/node-fetch-server@0.8.0': {} + '@rolldown/binding-android-arm64@1.0.0-beta.30': optional: true From 556de15191eb2dfa26d9c0ba396c219d4b4a2dd4 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Tue, 5 Aug 2025 10:32:44 +0900 Subject: [PATCH 171/313] fix(rsc): optimize `use-sync-external-store` (#674) --- packages/plugin-rsc/e2e/basic.test.ts | 9 ++--- .../plugin-rsc/examples/basic/package.json | 1 + .../src/routes/deps/transitive-cjs/client.tsx | 14 ++++++-- .../examples/basic/test-dep/cjs/index.js | 1 + .../examples/basic/test-dep/cjs/package.json | 9 +++++ .../basic/test-dep/transitive-cjs/client.js | 14 ++------ .../test-dep/transitive-cjs/package.json | 2 +- .../client.js | 28 +++++++++++++++ .../package.json | 14 ++++++++ .../plugin-rsc/examples/basic/vite.config.ts | 4 +-- packages/plugin-rsc/package.json | 1 + packages/plugin-rsc/src/plugin.ts | 36 +++++++++++++++++++ pnpm-lock.yaml | 25 +++++++++++++ 13 files changed, 135 insertions(+), 23 deletions(-) create mode 100644 packages/plugin-rsc/examples/basic/test-dep/cjs/index.js create mode 100644 packages/plugin-rsc/examples/basic/test-dep/cjs/package.json create mode 100644 packages/plugin-rsc/examples/basic/test-dep/transitive-use-sync-external-store/client.js create mode 100644 packages/plugin-rsc/examples/basic/test-dep/transitive-use-sync-external-store/package.json diff --git a/packages/plugin-rsc/e2e/basic.test.ts b/packages/plugin-rsc/e2e/basic.test.ts index 71c2679a1..2955afce4 100644 --- a/packages/plugin-rsc/e2e/basic.test.ts +++ b/packages/plugin-rsc/e2e/basic.test.ts @@ -52,7 +52,7 @@ test.describe('dev-non-optimized-cjs', () => { const editor = f.createEditor('vite.config.ts') editor.edit((s) => s.replace( - `'@vitejs/test-dep-transitive-cjs > use-sync-external-store/shim/index.js',`, + `include: ['@vitejs/test-dep-transitive-cjs > @vitejs/test-dep-cjs'],`, ``, ), ) @@ -941,9 +941,10 @@ function defineTest(f: Fixture) { test('transitive cjs dep', async ({ page }) => { await page.goto(f.url()) await waitForHydration(page) - await expect(page.getByTestId('transitive-cjs-client')).toHaveText( - 'ok:browser', - ) + await expect(page.getByTestId('transitive-cjs-client')).toHaveText('ok') + await expect( + page.getByTestId('transitive-use-sync-external-store-client'), + ).toHaveText('ok:browser') }) test('use cache function', async ({ page }) => { diff --git a/packages/plugin-rsc/examples/basic/package.json b/packages/plugin-rsc/examples/basic/package.json index e0b2de770..d80757fef 100644 --- a/packages/plugin-rsc/examples/basic/package.json +++ b/packages/plugin-rsc/examples/basic/package.json @@ -22,6 +22,7 @@ "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "latest", "@vitejs/test-dep-transitive-cjs": "file:./test-dep/transitive-cjs", + "@vitejs/test-dep-transitive-use-sync-external-store": "file:./test-dep/transitive-use-sync-external-store", "@vitejs/test-dep-client-in-server": "file:./test-dep/client-in-server", "@vitejs/test-dep-client-in-server2": "file:./test-dep/client-in-server2", "@vitejs/test-dep-server-in-client": "file:./test-dep/server-in-client", diff --git a/packages/plugin-rsc/examples/basic/src/routes/deps/transitive-cjs/client.tsx b/packages/plugin-rsc/examples/basic/src/routes/deps/transitive-cjs/client.tsx index 11045ee39..10c2a1e44 100644 --- a/packages/plugin-rsc/examples/basic/src/routes/deps/transitive-cjs/client.tsx +++ b/packages/plugin-rsc/examples/basic/src/routes/deps/transitive-cjs/client.tsx @@ -3,10 +3,18 @@ // @ts-ignore import { TestClient } from '@vitejs/test-dep-transitive-cjs/client' +// @ts-ignore +import { TestClient as TestClient2 } from '@vitejs/test-dep-transitive-use-sync-external-store/client' + export function TestTransitiveCjsClient() { return ( -
- [test-dep-transitive-cjs-client: ] -
+ <> +
+ [test-dep-transitive-cjs-client: ] +
+
+ [test-dep-transitive-use-sync-external-store-client: ] +
+ ) } diff --git a/packages/plugin-rsc/examples/basic/test-dep/cjs/index.js b/packages/plugin-rsc/examples/basic/test-dep/cjs/index.js new file mode 100644 index 000000000..94dc9b3a4 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/test-dep/cjs/index.js @@ -0,0 +1 @@ +exports.ok = 'ok' diff --git a/packages/plugin-rsc/examples/basic/test-dep/cjs/package.json b/packages/plugin-rsc/examples/basic/test-dep/cjs/package.json new file mode 100644 index 000000000..dc270dca8 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/test-dep/cjs/package.json @@ -0,0 +1,9 @@ +{ + "name": "@vitejs/test-dep-cjs", + "private": true, + "type": "commonjs", + "exports": "./index.js", + "peerDependencies": { + "react": "*" + } +} diff --git a/packages/plugin-rsc/examples/basic/test-dep/transitive-cjs/client.js b/packages/plugin-rsc/examples/basic/test-dep/transitive-cjs/client.js index db2fd4b6f..87aa08e69 100644 --- a/packages/plugin-rsc/examples/basic/test-dep/transitive-cjs/client.js +++ b/packages/plugin-rsc/examples/basic/test-dep/transitive-cjs/client.js @@ -2,26 +2,16 @@ import React from 'react' -// similar to swr -// https://github.com/vercel/swr/blob/063fe55dddb95f0b6c3f1637a935c43d732ded78/src/index/use-swr.ts#L3 -import { useSyncExternalStore } from 'use-sync-external-store/shim/index.js' +import { ok } from '@vitejs/test-dep-cjs' const h = React.createElement -const noopStore = () => () => {} - export function TestClient() { - const value = useSyncExternalStore( - noopStore, - () => 'ok:browser', - () => 'ok:ssr', - ) - return h( 'span', { 'data-testid': 'transitive-cjs-client', }, - value, + ok, ) } diff --git a/packages/plugin-rsc/examples/basic/test-dep/transitive-cjs/package.json b/packages/plugin-rsc/examples/basic/test-dep/transitive-cjs/package.json index 8368742da..e0a0eaea8 100644 --- a/packages/plugin-rsc/examples/basic/test-dep/transitive-cjs/package.json +++ b/packages/plugin-rsc/examples/basic/test-dep/transitive-cjs/package.json @@ -6,7 +6,7 @@ "./client": "./client.js" }, "dependencies": { - "use-sync-external-store": "^1.5.0" + "@vitejs/test-dep-cjs": "file:../cjs" }, "peerDependencies": { "react": "*" diff --git a/packages/plugin-rsc/examples/basic/test-dep/transitive-use-sync-external-store/client.js b/packages/plugin-rsc/examples/basic/test-dep/transitive-use-sync-external-store/client.js new file mode 100644 index 000000000..1ac3e0cc1 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/test-dep/transitive-use-sync-external-store/client.js @@ -0,0 +1,28 @@ +'use client' + +import React from 'react' + +// similar to +// https://github.com/vercel/swr/blob/063fe55dddb95f0b6c3f1637a935c43d732ded78/src/index/use-swr.ts#L3 +// https://github.com/TanStack/store/blob/1d1323283e79059821d6c731eaaee60e4143dbc2/packages/react-store/src/index.ts#L1 +import { useSyncExternalStore } from 'use-sync-external-store/shim/index.js' + +const h = React.createElement + +const noopStore = () => () => {} + +export function TestClient() { + const value = useSyncExternalStore( + noopStore, + () => 'ok:browser', + () => 'ok:ssr', + ) + + return h( + 'span', + { + 'data-testid': 'transitive-use-sync-external-store-client', + }, + value, + ) +} diff --git a/packages/plugin-rsc/examples/basic/test-dep/transitive-use-sync-external-store/package.json b/packages/plugin-rsc/examples/basic/test-dep/transitive-use-sync-external-store/package.json new file mode 100644 index 000000000..c478349fa --- /dev/null +++ b/packages/plugin-rsc/examples/basic/test-dep/transitive-use-sync-external-store/package.json @@ -0,0 +1,14 @@ +{ + "name": "@vitejs/test-dep-transitive-use-sync-external-store", + "private": true, + "type": "module", + "exports": { + "./client": "./client.js" + }, + "dependencies": { + "use-sync-external-store": "^1.5.0" + }, + "peerDependencies": { + "react": "*" + } +} diff --git a/packages/plugin-rsc/examples/basic/vite.config.ts b/packages/plugin-rsc/examples/basic/vite.config.ts index 94df04e00..98edceac7 100644 --- a/packages/plugin-rsc/examples/basic/vite.config.ts +++ b/packages/plugin-rsc/examples/basic/vite.config.ts @@ -153,9 +153,7 @@ export default { fetch: handler }; }, ssr: { optimizeDeps: { - include: [ - '@vitejs/test-dep-transitive-cjs > use-sync-external-store/shim/index.js', - ], + include: ['@vitejs/test-dep-transitive-cjs > @vitejs/test-dep-cjs'], }, }, }, diff --git a/packages/plugin-rsc/package.json b/packages/plugin-rsc/package.json index 5d92ab985..ec4b66e87 100644 --- a/packages/plugin-rsc/package.json +++ b/packages/plugin-rsc/package.json @@ -44,6 +44,7 @@ "magic-string": "^0.30.17", "periscopic": "^4.0.2", "turbo-stream": "^3.1.0", + "use-sync-external-store": "^1.5.0", "vitefu": "^1.1.1" }, "devDependencies": { diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index 1ba255517..91b7e8116 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -882,6 +882,7 @@ globalThis.AsyncLocalStorage = __viteRscAyncHooks.AsyncLocalStorage; ...(rscPluginOptions.validateImports !== false ? [validateImportPlugin()] : []), + ...vendorUseSyncExternalStorePlugin(), scanBuildStripPlugin(), detectNonOptimizedCjsPlugin(), ] @@ -2124,6 +2125,41 @@ function validateImportPlugin(): Plugin { } } +function vendorUseSyncExternalStorePlugin(): Plugin[] { + // vendor and optimize use-sync-external-store out of the box + // since this is a common enough cjs, which tends to break + // other packages (e.g. swr, @tanstack/react-store) + + // https://github.com/facebook/react/blob/c499adf8c89bbfd884f4d3a58c4e510001383525/packages/use-sync-external-store/package.json#L5-L20 + const exports = [ + 'use-sync-external-store', + 'use-sync-external-store/with-selector', + 'use-sync-external-store/with-selector.js', + 'use-sync-external-store/shim', + 'use-sync-external-store/shim/index.js', + 'use-sync-external-store/shim/with-selector', + 'use-sync-external-store/shim/with-selector.js', + ] + + return [ + { + name: 'rsc:vendor-use-sync-external-store', + apply: 'serve', + config() { + return { + environments: { + ssr: { + optimizeDeps: { + include: exports.map((e) => `${PKG_NAME} > ${e}`), + }, + }, + }, + } + }, + }, + ] +} + function sortObject(o: T) { return Object.fromEntries( Object.entries(o).sort(([a], [b]) => a.localeCompare(b)), diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0867e2a71..ec37ca6f2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -456,6 +456,9 @@ importers: turbo-stream: specifier: ^3.1.0 version: 3.1.0 + use-sync-external-store: + specifier: ^1.5.0 + version: 1.5.0(react@19.1.1) vitefu: specifier: ^1.1.1 version: 1.1.1(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) @@ -548,6 +551,9 @@ importers: '@vitejs/test-dep-transitive-cjs': specifier: file:./test-dep/transitive-cjs version: file:packages/plugin-rsc/examples/basic/test-dep/transitive-cjs(react@19.1.1) + '@vitejs/test-dep-transitive-use-sync-external-store': + specifier: file:./test-dep/transitive-use-sync-external-store + version: file:packages/plugin-rsc/examples/basic/test-dep/transitive-use-sync-external-store(react@19.1.1) rsc-html-stream: specifier: ^0.0.7 version: 0.0.7 @@ -2594,6 +2600,11 @@ packages: '@vitejs/release-scripts@1.6.0': resolution: {integrity: sha512-XV+w22Fvn+wqDtEkz8nQIJzvmRVSh90c2xvOO7cX9fkX8+39ZJpYRiXDIRJG1JRnF8khm1rHjulid+l+khc7TQ==} + '@vitejs/test-dep-cjs@file:packages/plugin-rsc/examples/basic/test-dep/cjs': + resolution: {directory: packages/plugin-rsc/examples/basic/test-dep/cjs, type: directory} + peerDependencies: + react: '*' + '@vitejs/test-dep-client-in-server2@file:packages/plugin-rsc/examples/basic/test-dep/client-in-server2': resolution: {directory: packages/plugin-rsc/examples/basic/test-dep/client-in-server2, type: directory} peerDependencies: @@ -2629,6 +2640,11 @@ packages: peerDependencies: react: '*' + '@vitejs/test-dep-transitive-use-sync-external-store@file:packages/plugin-rsc/examples/basic/test-dep/transitive-use-sync-external-store': + resolution: {directory: packages/plugin-rsc/examples/basic/test-dep/transitive-use-sync-external-store, type: directory} + peerDependencies: + react: '*' + '@vitest/expect@3.2.4': resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} @@ -6401,6 +6417,10 @@ snapshots: transitivePeerDependencies: - conventional-commits-filter + '@vitejs/test-dep-cjs@file:packages/plugin-rsc/examples/basic/test-dep/cjs(react@19.1.1)': + dependencies: + react: 19.1.1 + '@vitejs/test-dep-client-in-server2@file:packages/plugin-rsc/examples/basic/test-dep/client-in-server2(react@19.1.1)': dependencies: react: 19.1.1 @@ -6426,6 +6446,11 @@ snapshots: react: 19.1.1 '@vitejs/test-dep-transitive-cjs@file:packages/plugin-rsc/examples/basic/test-dep/transitive-cjs(react@19.1.1)': + dependencies: + '@vitejs/test-dep-cjs': file:packages/plugin-rsc/examples/basic/test-dep/cjs(react@19.1.1) + react: 19.1.1 + + '@vitejs/test-dep-transitive-use-sync-external-store@file:packages/plugin-rsc/examples/basic/test-dep/transitive-use-sync-external-store(react@19.1.1)': dependencies: react: 19.1.1 use-sync-external-store: 1.5.0(react@19.1.1) From 7b07098746a672950f278ea7edffd04834133d1f Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Tue, 5 Aug 2025 12:28:36 +0900 Subject: [PATCH 172/313] chore(rsc): tweak types and examples (#682) --- .../examples/basic/src/routes/hmr-shared/atomic/client.tsx | 2 +- packages/plugin-rsc/src/plugin.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/plugin-rsc/examples/basic/src/routes/hmr-shared/atomic/client.tsx b/packages/plugin-rsc/examples/basic/src/routes/hmr-shared/atomic/client.tsx index bc28b88a0..76dcff0b2 100644 --- a/packages/plugin-rsc/examples/basic/src/routes/hmr-shared/atomic/client.tsx +++ b/packages/plugin-rsc/examples/basic/src/routes/hmr-shared/atomic/client.tsx @@ -9,8 +9,8 @@ export function TestClient({ testSharedFromServer: string }) { React.useEffect(() => { - console.log({ testShared, testSharedFromServer }) if (testShared !== testSharedFromServer) { + console.log({ testShared, testSharedFromServer }) throw new Error( `Mismatch: ${JSON.stringify({ testShared, testSharedFromServer })}`, ) diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index 91b7e8116..9a2a49c70 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -1521,7 +1521,7 @@ function mergeAssetDeps(a: AssetDeps, b: AssetDeps): AssetDeps { } function collectAssetDeps(bundle: Rollup.OutputBundle) { - const chunkToDeps = new Map() + const chunkToDeps = new Map() for (const chunk of Object.values(bundle)) { if (chunk.type === 'chunk') { chunkToDeps.set(chunk, collectAssetDepsInner(chunk.fileName, bundle)) @@ -1529,7 +1529,7 @@ function collectAssetDeps(bundle: Rollup.OutputBundle) { } const idToDeps: Record< string, - { chunk: Rollup.OutputChunk; deps: AssetDeps } + { chunk: Rollup.OutputChunk; deps: ResolvedAssetDeps } > = {} for (const [chunk, deps] of chunkToDeps.entries()) { for (const id of chunk.moduleIds) { @@ -1542,7 +1542,7 @@ function collectAssetDeps(bundle: Rollup.OutputBundle) { function collectAssetDepsInner( fileName: string, bundle: Rollup.OutputBundle, -): AssetDeps { +): ResolvedAssetDeps { const visited = new Set() const css: string[] = [] From 3c5de797c015a9c8edbdf47e5bae3a28c3e24a8b Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Tue, 5 Aug 2025 12:49:31 +0900 Subject: [PATCH 173/313] release: plugin-rsc@0.4.17 --- packages/plugin-rsc/CHANGELOG.md | 24 ++++++++++++++++++++++++ packages/plugin-rsc/package.json | 2 +- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/packages/plugin-rsc/CHANGELOG.md b/packages/plugin-rsc/CHANGELOG.md index b3be96f28..65416fd10 100644 --- a/packages/plugin-rsc/CHANGELOG.md +++ b/packages/plugin-rsc/CHANGELOG.md @@ -1,3 +1,27 @@ +## [0.4.17](https://github.com/vitejs/vite-plugin-react/compare/plugin-rsc@0.4.16...plugin-rsc@0.4.17) (2025-08-05) +### Bug Fixes + +* **deps:** update all non-major dependencies ([#670](https://github.com/vitejs/vite-plugin-react/issues/670)) ([61d777d](https://github.com/vitejs/vite-plugin-react/commit/61d777ddc8524256f890f43a2a78dbfbfd1e97ac)) +* **rsc:** keep manually added link stylesheet during dev ([#663](https://github.com/vitejs/vite-plugin-react/issues/663)) ([ac20b31](https://github.com/vitejs/vite-plugin-react/commit/ac20b31279f6884169503ef6e5786639c93251df)) +* **rsc:** optimize `use-sync-external-store` ([#674](https://github.com/vitejs/vite-plugin-react/issues/674)) ([556de15](https://github.com/vitejs/vite-plugin-react/commit/556de15191eb2dfa26d9c0ba396c219d4b4a2dd4)) + +### Documentation + +* **rsc:** notes on CSS support ([#673](https://github.com/vitejs/vite-plugin-react/issues/673)) ([9b2741f](https://github.com/vitejs/vite-plugin-react/commit/9b2741f3dc3da8e9e2ef486ab8d7eaa317230f7d)) + +### Miscellaneous Chores + +* **rsc:** tweak types and examples ([#682](https://github.com/vitejs/vite-plugin-react/issues/682)) ([7b07098](https://github.com/vitejs/vite-plugin-react/commit/7b07098746a672950f278ea7edffd04834133d1f)) + +### Code Refactoring + +* **rsc:** update `@mjackson/node-fetch-server` to `@remix-run/node-fetch-server` ([#680](https://github.com/vitejs/vite-plugin-react/issues/680)) ([97b5f1b](https://github.com/vitejs/vite-plugin-react/commit/97b5f1b26c2260825447c7e9781f1b168bebbe62)) + +### Tests + +* **rsc:** test `React.cache` ([#668](https://github.com/vitejs/vite-plugin-react/issues/668)) ([26ad4ad](https://github.com/vitejs/vite-plugin-react/commit/26ad4adcb69affb8932151f245b25a8fcf95c85a)) +* **rsc:** test shared module hmr ([#671](https://github.com/vitejs/vite-plugin-react/issues/671)) ([775ac61](https://github.com/vitejs/vite-plugin-react/commit/775ac6157ef7af545b4cb03ff116a01c7cffa815)) + ## [0.4.16](https://github.com/vitejs/vite-plugin-react/compare/plugin-rsc@0.4.15...plugin-rsc@0.4.16) (2025-08-01) ### Features diff --git a/packages/plugin-rsc/package.json b/packages/plugin-rsc/package.json index ec4b66e87..7fa205899 100644 --- a/packages/plugin-rsc/package.json +++ b/packages/plugin-rsc/package.json @@ -1,6 +1,6 @@ { "name": "@vitejs/plugin-rsc", - "version": "0.4.16", + "version": "0.4.17", "description": "React Server Components (RSC) support for Vite.", "keywords": [ "vite", From dea484ab8c740babab89da0f716bb929e57ba2af Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Thu, 7 Aug 2025 16:17:33 +0900 Subject: [PATCH 174/313] chore(rsc): mention deploy example (#685) --- packages/plugin-rsc/examples/starter/README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/plugin-rsc/examples/starter/README.md b/packages/plugin-rsc/examples/starter/README.md index daf79d3bd..a79ba51ad 100644 --- a/packages/plugin-rsc/examples/starter/README.md +++ b/packages/plugin-rsc/examples/starter/README.md @@ -34,3 +34,7 @@ See [`@vitejs/plugin-rsc`](https://github.com/vitejs/vite-plugin-react/tree/main - [`./src/framework/entry.{browser,rsc,ssr}.tsx`](./src/framework) (with inline comments) provides an overview of how low level RSC (React flight) API can be used to build RSC framework. - You can use [`vite-plugin-inspect`](https://github.com/antfu-collective/vite-plugin-inspect) to understand how `"use client"` and `"use server"` directives are transformed internally. + +## Deployment + +See [vite-plugin-rsc-deploy-example](https://github.com/hi-ogawa/vite-plugin-rsc-deploy-example) From 6df71929ea5c2176408054bc40bcb8dfbb370018 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Thu, 7 Aug 2025 16:52:58 +0900 Subject: [PATCH 175/313] chore(rsc): add .gitignore to create-vite example (#686) --- packages/plugin-rsc/examples/starter/.gitignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 packages/plugin-rsc/examples/starter/.gitignore diff --git a/packages/plugin-rsc/examples/starter/.gitignore b/packages/plugin-rsc/examples/starter/.gitignore new file mode 100644 index 000000000..f06235c46 --- /dev/null +++ b/packages/plugin-rsc/examples/starter/.gitignore @@ -0,0 +1,2 @@ +node_modules +dist From 9e4a94428dae6d39ccc13e0220f2abc7a76aeb5e Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Thu, 7 Aug 2025 17:27:19 +0900 Subject: [PATCH 176/313] release: plugin-react@5.0.0 --- packages/plugin-react/CHANGELOG.md | 2 ++ packages/plugin-react/package.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/plugin-react/CHANGELOG.md b/packages/plugin-react/CHANGELOG.md index 32dcffca7..c1dc40979 100644 --- a/packages/plugin-react/CHANGELOG.md +++ b/packages/plugin-react/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +## 5.0.0 (2025-08-07) + ## 5.0.0-beta.0 (2025-07-28) ### Use Oxc for react refresh transform in rolldown-vite diff --git a/packages/plugin-react/package.json b/packages/plugin-react/package.json index 1bb0aec33..c3712b2ce 100644 --- a/packages/plugin-react/package.json +++ b/packages/plugin-react/package.json @@ -1,6 +1,6 @@ { "name": "@vitejs/plugin-react", - "version": "5.0.0-beta.0", + "version": "5.0.0", "license": "MIT", "author": "Evan You", "description": "The default Vite plugin for React projects", From 590f394c1e451987258ed64a4b5fb6207c5e8261 Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Thu, 7 Aug 2025 17:27:59 +0900 Subject: [PATCH 177/313] release: plugin-react-swc@4.0.0 --- packages/plugin-react-swc/CHANGELOG.md | 2 ++ packages/plugin-react-swc/package.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/plugin-react-swc/CHANGELOG.md b/packages/plugin-react-swc/CHANGELOG.md index ac8f7eda0..539a329cf 100644 --- a/packages/plugin-react-swc/CHANGELOG.md +++ b/packages/plugin-react-swc/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +## 4.0.0 (2025-08-07) + ## 4.0.0-beta.0 (2025-07-28) ### Require Node 20.19+, 22.12+ diff --git a/packages/plugin-react-swc/package.json b/packages/plugin-react-swc/package.json index 21c41ef9d..f74ec00af 100644 --- a/packages/plugin-react-swc/package.json +++ b/packages/plugin-react-swc/package.json @@ -1,6 +1,6 @@ { "name": "@vitejs/plugin-react-swc", - "version": "4.0.0-beta.0", + "version": "4.0.0", "license": "MIT", "author": "Arnaud Barré (https://github.com/ArnaudBarre)", "description": "Speed up your Vite dev server with SWC", From b654046360b76f202c6cb8cac90bce91cc8eee95 Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Thu, 7 Aug 2025 17:28:50 +0900 Subject: [PATCH 178/313] release: plugin-react-oxc@0.4.0 --- packages/plugin-react-oxc/CHANGELOG.md | 2 ++ packages/plugin-react-oxc/package.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/plugin-react-oxc/CHANGELOG.md b/packages/plugin-react-oxc/CHANGELOG.md index 72a9dde79..ee7143834 100644 --- a/packages/plugin-react-oxc/CHANGELOG.md +++ b/packages/plugin-react-oxc/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +## 0.4.0 (2025-08-07) + ## 0.4.0-beta.0 (2025-07-28) ### Deprecate this plugin diff --git a/packages/plugin-react-oxc/package.json b/packages/plugin-react-oxc/package.json index 9ee81666d..3cc3635e8 100644 --- a/packages/plugin-react-oxc/package.json +++ b/packages/plugin-react-oxc/package.json @@ -1,6 +1,6 @@ { "name": "@vitejs/plugin-react-oxc", - "version": "0.4.0-beta.0", + "version": "0.4.0", "license": "MIT", "author": "Evan You", "contributors": [ From 7a92083eadb6ad8d92e6e560de414bc600e977c0 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Fri, 8 Aug 2025 14:09:40 +0900 Subject: [PATCH 179/313] fix(rsc): support cjs on module runner (#687) --- packages/plugin-rsc/e2e/basic.test.ts | 2 +- packages/plugin-rsc/package.json | 1 - packages/plugin-rsc/src/plugin.ts | 90 +------------------ packages/plugin-rsc/src/plugins/cjs.ts | 87 ++++++++++++++++++ packages/plugin-rsc/src/plugins/utils.ts | 21 +++++ .../plugin-rsc/src/transforms/cjs.test.ts | 86 ++++++++++++++++++ packages/plugin-rsc/src/transforms/cjs.ts | 64 +++++++++++++ pnpm-lock.yaml | 3 - 8 files changed, 263 insertions(+), 91 deletions(-) create mode 100644 packages/plugin-rsc/src/plugins/cjs.ts create mode 100644 packages/plugin-rsc/src/plugins/utils.ts create mode 100644 packages/plugin-rsc/src/transforms/cjs.test.ts create mode 100644 packages/plugin-rsc/src/transforms/cjs.ts diff --git a/packages/plugin-rsc/e2e/basic.test.ts b/packages/plugin-rsc/e2e/basic.test.ts index 2955afce4..680975568 100644 --- a/packages/plugin-rsc/e2e/basic.test.ts +++ b/packages/plugin-rsc/e2e/basic.test.ts @@ -63,7 +63,7 @@ test.describe('dev-non-optimized-cjs', () => { test('show warning', async ({ page }) => { await page.goto(f.url()) expect(f.proc().stderr()).toContain( - `[vite-rsc] found non-optimized CJS dependency in 'ssr' environment.`, + `Found non-optimized CJS dependency in 'ssr' environment.`, ) }) }) diff --git a/packages/plugin-rsc/package.json b/packages/plugin-rsc/package.json index 7fa205899..a4419ddb2 100644 --- a/packages/plugin-rsc/package.json +++ b/packages/plugin-rsc/package.json @@ -44,7 +44,6 @@ "magic-string": "^0.30.17", "periscopic": "^4.0.2", "turbo-stream": "^3.1.0", - "use-sync-external-store": "^1.5.0", "vitefu": "^1.1.1" }, "devDependencies": { diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index 9a2a49c70..7bba9b1ac 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -21,7 +21,7 @@ import { normalizePath, parseAstAsync, } from 'vite' -import { crawlFrameworkPkgs, findClosestPkgJsonPath } from 'vitefu' +import { crawlFrameworkPkgs } from 'vitefu' import vitePluginRscCore from './core/plugin' import { type TransformWrapExportFilter, @@ -33,6 +33,8 @@ import { import { generateEncryptionKey, toBase64 } from './utils/encryption-utils' import { createRpcServer } from './utils/rpc' import { normalizeViteImportAnalysisUrl, prepareError } from './vite-utils' +import { cjsModuleRunnerPlugin } from './plugins/cjs' +import { evalValue, parseIdQuery } from './plugins/utils' // state for build orchestration let serverReferences: Record = {} @@ -882,42 +884,10 @@ globalThis.AsyncLocalStorage = __viteRscAyncHooks.AsyncLocalStorage; ...(rscPluginOptions.validateImports !== false ? [validateImportPlugin()] : []), - ...vendorUseSyncExternalStorePlugin(), scanBuildStripPlugin(), - detectNonOptimizedCjsPlugin(), + ...cjsModuleRunnerPlugin(), ] } -function detectNonOptimizedCjsPlugin(): Plugin { - return { - name: 'rsc:detect-non-optimized-cjs', - apply: 'serve', - async transform(code, id) { - if ( - id.includes('/node_modules/') && - !id.startsWith(this.environment.config.cacheDir) && - /\b(require|exports)\b/.test(code) - ) { - id = parseIdQuery(id).filename - let isEsm = id.endsWith('.mjs') - if (id.endsWith('.js')) { - const pkgJsonPath = await findClosestPkgJsonPath(path.dirname(id)) - if (pkgJsonPath) { - const pkgJson = JSON.parse( - fs.readFileSync(pkgJsonPath, 'utf-8'), - ) as { type?: string } - isEsm = pkgJson.type === 'module' - } - } - if (!isEsm) { - this.warn( - `[vite-rsc] found non-optimized CJS dependency in '${this.environment.name}' environment. ` + - `It is recommended to manually add the dependency to 'environments.${this.environment.name}.optimizeDeps.include'.`, - ) - } - } - }, - } -} function scanBuildStripPlugin(): Plugin { return { @@ -1993,23 +1963,6 @@ function generateResourcesCode(depsCode: string) { ` } -// https://github.com/vitejs/vite/blob/ea9aed7ebcb7f4be542bd2a384cbcb5a1e7b31bd/packages/vite/src/node/utils.ts#L1469-L1475 -function evalValue(rawValue: string): T { - const fn = new Function(` - var console, exports, global, module, process, require - return (\n${rawValue}\n) - `) - return fn() -} - -// https://github.com/vitejs/vite-plugin-vue/blob/06931b1ea2b9299267374cb8eb4db27c0626774a/packages/plugin-vue/src/utils/query.ts#L13 -function parseIdQuery(id: string) { - if (!id.includes('?')) return { filename: id, query: {} } - const [filename, rawQuery] = id.split(`?`, 2) as [string, string] - const query = Object.fromEntries(new URLSearchParams(rawQuery)) - return { filename, query } -} - export async function transformRscCssExport(options: { ast: Awaited> code: string @@ -2125,41 +2078,6 @@ function validateImportPlugin(): Plugin { } } -function vendorUseSyncExternalStorePlugin(): Plugin[] { - // vendor and optimize use-sync-external-store out of the box - // since this is a common enough cjs, which tends to break - // other packages (e.g. swr, @tanstack/react-store) - - // https://github.com/facebook/react/blob/c499adf8c89bbfd884f4d3a58c4e510001383525/packages/use-sync-external-store/package.json#L5-L20 - const exports = [ - 'use-sync-external-store', - 'use-sync-external-store/with-selector', - 'use-sync-external-store/with-selector.js', - 'use-sync-external-store/shim', - 'use-sync-external-store/shim/index.js', - 'use-sync-external-store/shim/with-selector', - 'use-sync-external-store/shim/with-selector.js', - ] - - return [ - { - name: 'rsc:vendor-use-sync-external-store', - apply: 'serve', - config() { - return { - environments: { - ssr: { - optimizeDeps: { - include: exports.map((e) => `${PKG_NAME} > ${e}`), - }, - }, - }, - } - }, - }, - ] -} - function sortObject(o: T) { return Object.fromEntries( Object.entries(o).sort(([a], [b]) => a.localeCompare(b)), diff --git a/packages/plugin-rsc/src/plugins/cjs.ts b/packages/plugin-rsc/src/plugins/cjs.ts new file mode 100644 index 000000000..b2b9e85e4 --- /dev/null +++ b/packages/plugin-rsc/src/plugins/cjs.ts @@ -0,0 +1,87 @@ +import { parseAstAsync, type Plugin } from 'vite' +import { parseIdQuery } from './utils' +import { findClosestPkgJsonPath } from 'vitefu' +import path from 'node:path' +import fs from 'node:fs' +import * as esModuleLexer from 'es-module-lexer' +import { transformCjsToEsm } from '../transforms/cjs' + +export function cjsModuleRunnerPlugin(): Plugin[] { + // use-sync-external-store is known to work fine so don't show warning + const warnedPackages = new Set(['use-sync-external-store']) + + return [ + { + name: 'cjs-module-runner-transform', + apply: 'serve', + applyToEnvironment: (env) => env.config.dev.moduleRunnerTransform, + async transform(code, id) { + if ( + id.includes('/node_modules/') && + !id.startsWith(this.environment.config.cacheDir) && + /\b(require|exports)\b/.test(code) + ) { + id = parseIdQuery(id).filename + if (!/\.[cm]?js$/.test(id)) return + + // skip genuine esm + if (id.endsWith('.mjs')) return + if (id.endsWith('.js')) { + const pkgJsonPath = await findClosestPkgJsonPath(path.dirname(id)) + if (pkgJsonPath) { + const pkgJson = JSON.parse( + fs.readFileSync(pkgJsonPath, 'utf-8'), + ) as { type?: string } + if (pkgJson.type === 'module') return + } + } + + // skip faux esm (e.g. from "module" field) + const [, , , hasModuleSyntax] = esModuleLexer.parse(code) + if (hasModuleSyntax) return + + // warning once per package + const packageKey = extractPackageKey(id) + if (!warnedPackages.has(packageKey)) { + this.warn( + `Found non-optimized CJS dependency in '${this.environment.name}' environment. ` + + `It is recommended to add the dependency to 'environments.${this.environment.name}.optimizeDeps.include'.`, + ) + warnedPackages.add(packageKey) + } + + const ast = await parseAstAsync(code) + const result = transformCjsToEsm(code, ast) + const output = result.output + // TODO: can we use cjs-module-lexer to properly define named exports? + // for re-exports, we need to eagerly transform dependencies though. + // https://github.com/nodejs/node/blob/f3adc11e37b8bfaaa026ea85c1cf22e3a0e29ae9/lib/internal/modules/esm/translators.js#L382-L409 + output.append(`__vite_ssr_exportAll__(module.exports)`) + return { + code: output.toString(), + map: output.generateMap({ hires: 'boundary' }), + } + } + }, + }, + ] +} + +function extractPackageKey(id: string): string { + // .../.yarn/cache/abc/... => abc + const yarnMatch = id.match(/\/.yarn\/cache\/([^/]+)/) + if (yarnMatch) { + return yarnMatch[1]! + } + // .../node_modules/@x/y/... => @x/y + // .../node_modules/x/... => x + if (id.includes('/node_modules')) { + id = id.split('/node_modules/').at(-1)! + let [x, y] = id.split('/') + if (x!.startsWith('@')) { + return `${x}/${y}` + } + return x! + } + return id +} diff --git a/packages/plugin-rsc/src/plugins/utils.ts b/packages/plugin-rsc/src/plugins/utils.ts new file mode 100644 index 000000000..5628fad57 --- /dev/null +++ b/packages/plugin-rsc/src/plugins/utils.ts @@ -0,0 +1,21 @@ +// https://github.com/vitejs/vite/blob/ea9aed7ebcb7f4be542bd2a384cbcb5a1e7b31bd/packages/vite/src/node/utils.ts#L1469-L1475 +export function evalValue(rawValue: string): T { + const fn = new Function(` + var console, exports, global, module, process, require + return (\n${rawValue}\n) + `) + return fn() +} + +// https://github.com/vitejs/vite-plugin-vue/blob/06931b1ea2b9299267374cb8eb4db27c0626774a/packages/plugin-vue/src/utils/query.ts#L13 +export function parseIdQuery(id: string): { + filename: string + query: { + [k: string]: string + } +} { + if (!id.includes('?')) return { filename: id, query: {} } + const [filename, rawQuery] = id.split(`?`, 2) as [string, string] + const query = Object.fromEntries(new URLSearchParams(rawQuery)) + return { filename, query } +} diff --git a/packages/plugin-rsc/src/transforms/cjs.test.ts b/packages/plugin-rsc/src/transforms/cjs.test.ts new file mode 100644 index 000000000..659eff7dd --- /dev/null +++ b/packages/plugin-rsc/src/transforms/cjs.test.ts @@ -0,0 +1,86 @@ +import { parseAstAsync } from 'vite' +import { describe, expect, it } from 'vitest' +import { debugSourceMap } from './test-utils' +import { transformCjsToEsm } from './cjs' + +describe(transformCjsToEsm, () => { + async function testTransform(input: string) { + const ast = await parseAstAsync(input) + const { output } = transformCjsToEsm(input, ast) + if (!output.hasChanged()) { + return + } + if (process.env['DEBUG_SOURCEMAP']) { + await debugSourceMap(output) + } + return output.toString() + } + + it('basic', async () => { + const input = `\ +exports.ok = true; +` + expect(await testTransform(input)).toMatchInlineSnapshot(` + "const exports = {}; const module = { exports }; + exports.ok = true; + " + `) + }) + + it('top-level re-export', async () => { + const input = `\ +if (true) { + module.exports = require('./cjs/use-sync-external-store.production.js'); +} else { + module.exports = require('./cjs/use-sync-external-store.development.js'); +} +` + expect(await testTransform(input)).toMatchInlineSnapshot(` + "const exports = {}; const module = { exports }; + if (true) { + module.exports = (await import('./cjs/use-sync-external-store.production.js')); + } else { + module.exports = (await import('./cjs/use-sync-external-store.development.js')); + } + " + `) + }) + + it('non top-level re-export', async () => { + const input = `\ +"production" !== process.env.NODE_ENV && (function() { + var React = require("react"); + var ReactDOM = require("react-dom"); + exports.useSyncExternalStoreWithSelector = function () {} +})() +` + expect(await testTransform(input)).toMatchInlineSnapshot(` + "const exports = {}; const module = { exports }; + const __cjs_to_esm_hoist_1 = await import("react-dom"); + const __cjs_to_esm_hoist_0 = await import("react"); + "production" !== process.env.NODE_ENV && (function() { + var React = __cjs_to_esm_hoist_0; + var ReactDOM = __cjs_to_esm_hoist_1; + exports.useSyncExternalStoreWithSelector = function () {} + })() + " + `) + }) + + it('local require', async () => { + const input = `\ +{ + const require = () => {}; + require("test"); +} +` + expect(await testTransform(input)).toMatchInlineSnapshot(` + "const exports = {}; const module = { exports }; + { + const require = () => {}; + require("test"); + } + " + `) + }) +}) diff --git a/packages/plugin-rsc/src/transforms/cjs.ts b/packages/plugin-rsc/src/transforms/cjs.ts new file mode 100644 index 000000000..455bb94b7 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/cjs.ts @@ -0,0 +1,64 @@ +import type { Program, Node } from 'estree' +import MagicString from 'magic-string' +import { analyze } from 'periscopic' +import { walk } from 'estree-walker' + +export function transformCjsToEsm( + code: string, + ast: Program, +): { output: MagicString } { + const output = new MagicString(code) + const analyzed = analyze(ast) + + let parentNodes: Node[] = [] + let hoistIndex = 0 + walk(ast, { + enter(node) { + parentNodes.push(node) + if ( + node.type === 'CallExpression' && + node.callee.type === 'Identifier' && + node.callee.name === 'require' && + node.arguments.length === 1 + ) { + let isTopLevel = true + for (const parent of parentNodes) { + if ( + parent.type === 'FunctionExpression' || + parent.type === 'FunctionDeclaration' || + parent.type === 'ArrowFunctionExpression' + ) { + isTopLevel = false + } + // skip locally declared `require` + const scope = analyzed.map.get(parent) + if (scope && scope.declarations.has('require')) { + return + } + } + + if (isTopLevel) { + // top-level scope `require` to dynamic import + // (this allows handling react development/production re-export within top-level if branch) + output.update(node.start, node.callee.end, '(await import') + output.appendRight(node.end, ')') + } else { + // hoist non top-level `require` to top-level + const hoisted = `__cjs_to_esm_hoist_${hoistIndex}` + const importee = code.slice( + node.arguments[0]!.start, + node.arguments[0]!.end, + ) + output.prepend(`const ${hoisted} = await import(${importee});\n`) + output.update(node.start, node.end, hoisted) + hoistIndex++ + } + } + }, + leave() { + parentNodes.pop()! + }, + }) + output.prepend(`const exports = {}; const module = { exports };\n`) + return { output } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ec37ca6f2..2b286c369 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -456,9 +456,6 @@ importers: turbo-stream: specifier: ^3.1.0 version: 3.1.0 - use-sync-external-store: - specifier: ^1.5.0 - version: 1.5.0(react@19.1.1) vitefu: specifier: ^1.1.1 version: 1.1.1(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) From 481edfbbda1db26239be9b8dc22c7886d5f5ab47 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 11 Aug 2025 10:27:55 +0900 Subject: [PATCH 180/313] chore(oxc): mention deprecation in readme (#693) --- packages/plugin-react-oxc/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/plugin-react-oxc/README.md b/packages/plugin-react-oxc/README.md index 23bdaa58a..bc6b77646 100644 --- a/packages/plugin-react-oxc/README.md +++ b/packages/plugin-react-oxc/README.md @@ -1,3 +1,6 @@ +> [!IMPORTANT] +> This package is deprecated. Please use [@vitejs/plugin-react](https://www.npmjs.com/package/@vitejs/plugin-react) instead, which automatically enables Oxc-based Fast Refresh transform on [`rolldown-vite`](https://vitejs.dev/guide/rolldown). + # @vitejs/plugin-react-oxc [![npm](https://img.shields.io/npm/v/@vitejs/plugin-react-oxc.svg)](https://npmjs.com/package/@vitejs/plugin-react-oxc) The future default Vite plugin for React projects. From 50578587472d23125980a46ff993fedaabca28d2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 11 Aug 2025 11:39:33 +0900 Subject: [PATCH 181/313] fix(deps): update all non-major dependencies (#694) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 14 +- packages/plugin-react-oxc/package.json | 4 +- packages/plugin-react-swc/package.json | 8 +- packages/plugin-react/package.json | 6 +- .../plugin-rsc/examples/basic/package.json | 4 +- .../examples/browser-mode/package.json | 2 +- .../plugin-rsc/examples/no-ssr/package.json | 2 +- .../examples/react-router/package.json | 6 +- .../examples/starter-cf-single/package.json | 2 +- .../plugin-rsc/examples/starter/package.json | 2 +- packages/plugin-rsc/package.json | 4 +- pnpm-lock.yaml | 734 +++++++++--------- pnpm-workspace.yaml | 2 +- 13 files changed, 398 insertions(+), 392 deletions(-) diff --git a/package.json b/package.json index d981abee2..7aa99d627 100644 --- a/package.json +++ b/package.json @@ -33,15 +33,15 @@ "ci-publish": "tsx scripts/publishCI.ts" }, "devDependencies": { - "@eslint/js": "^9.32.0", + "@eslint/js": "^9.33.0", "@types/fs-extra": "^11.0.4", - "@types/node": "^22.17.0", + "@types/node": "^22.17.1", "@vitejs/release-scripts": "^1.6.0", - "eslint": "^9.32.0", + "eslint": "^9.33.0", "eslint-plugin-import-x": "^4.16.1", "eslint-plugin-n": "^17.21.3", - "eslint-plugin-regexp": "^2.9.1", - "fs-extra": "^11.3.0", + "eslint-plugin-regexp": "^2.10.0", + "fs-extra": "^11.3.1", "globals": "^16.3.0", "lint-staged": "^15.5.2", "picocolors": "^1.1.1", @@ -50,8 +50,8 @@ "simple-git-hooks": "^2.13.1", "tsx": "^4.20.3", "typescript": "^5.9.2", - "typescript-eslint": "^8.38.0", - "vite": "^7.0.6", + "typescript-eslint": "^8.39.0", + "vite": "^7.1.1", "vitest": "^3.2.4" }, "simple-git-hooks": { diff --git a/packages/plugin-react-oxc/package.json b/packages/plugin-react-oxc/package.json index 3cc3635e8..d7498a1eb 100644 --- a/packages/plugin-react-oxc/package.json +++ b/packages/plugin-react-oxc/package.json @@ -43,10 +43,10 @@ }, "devDependencies": { "@vitejs/react-common": "workspace:*", - "tsdown": "^0.13.2", + "tsdown": "^0.14.0", "vite": "catalog:rolldown-vite" }, "dependencies": { - "@rolldown/pluginutils": "1.0.0-beta.30" + "@rolldown/pluginutils": "1.0.0-beta.31" } } diff --git a/packages/plugin-react-swc/package.json b/packages/plugin-react-swc/package.json index f74ec00af..4cfe7b944 100644 --- a/packages/plugin-react-swc/package.json +++ b/packages/plugin-react-swc/package.json @@ -32,7 +32,7 @@ }, "homepage": "https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react-swc#readme", "dependencies": { - "@rolldown/pluginutils": "1.0.0-beta.30", + "@rolldown/pluginutils": "1.0.0-beta.31", "@swc/core": "^1.13.2" }, "peerDependencies": { @@ -41,11 +41,11 @@ "devDependencies": { "@playwright/test": "^1.54.2", "@types/fs-extra": "^11.0.4", - "@types/node": "^22.17.0", + "@types/node": "^22.17.1", "@vitejs/react-common": "workspace:*", - "fs-extra": "^11.3.0", + "fs-extra": "^11.3.1", "prettier": "^3.0.3", - "tsdown": "^0.13.2", + "tsdown": "^0.14.0", "typescript": "^5.9.2" } } diff --git a/packages/plugin-react/package.json b/packages/plugin-react/package.json index c3712b2ce..173064457 100644 --- a/packages/plugin-react/package.json +++ b/packages/plugin-react/package.json @@ -43,7 +43,7 @@ "@babel/core": "^7.28.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", - "@rolldown/pluginutils": "1.0.0-beta.30", + "@rolldown/pluginutils": "1.0.0-beta.31", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, @@ -55,8 +55,8 @@ "babel-plugin-react-compiler": "19.1.0-rc.2", "react": "^19.1.1", "react-dom": "^19.1.1", - "rolldown": "1.0.0-beta.30", - "tsdown": "^0.13.2", + "rolldown": "1.0.0-beta.31", + "tsdown": "^0.14.0", "vitest": "^3.2.4" } } diff --git a/packages/plugin-rsc/examples/basic/package.json b/packages/plugin-rsc/examples/basic/package.json index d80757fef..9bc8dddcb 100644 --- a/packages/plugin-rsc/examples/basic/package.json +++ b/packages/plugin-rsc/examples/basic/package.json @@ -30,8 +30,8 @@ "@vitejs/test-dep-css-in-server": "file:./test-dep/css-in-server", "rsc-html-stream": "^0.0.7", "tailwindcss": "^4.1.11", - "vite": "^7.0.6", + "vite": "^7.1.1", "vite-plugin-inspect": "^11.3.2", - "wrangler": "^4.27.0" + "wrangler": "^4.28.1" } } diff --git a/packages/plugin-rsc/examples/browser-mode/package.json b/packages/plugin-rsc/examples/browser-mode/package.json index ab6e1a85f..efcd2bada 100644 --- a/packages/plugin-rsc/examples/browser-mode/package.json +++ b/packages/plugin-rsc/examples/browser-mode/package.json @@ -18,6 +18,6 @@ "@types/react": "^19.1.9", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "latest", - "vite": "^7.0.6" + "vite": "^7.1.1" } } diff --git a/packages/plugin-rsc/examples/no-ssr/package.json b/packages/plugin-rsc/examples/no-ssr/package.json index 9acf0796d..972f98240 100644 --- a/packages/plugin-rsc/examples/no-ssr/package.json +++ b/packages/plugin-rsc/examples/no-ssr/package.json @@ -18,6 +18,6 @@ "@types/react": "^19.1.9", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "latest", - "vite": "^7.0.6" + "vite": "^7.1.1" } } diff --git a/packages/plugin-rsc/examples/react-router/package.json b/packages/plugin-rsc/examples/react-router/package.json index ab1240f67..2ffce42ed 100644 --- a/packages/plugin-rsc/examples/react-router/package.json +++ b/packages/plugin-rsc/examples/react-router/package.json @@ -19,7 +19,7 @@ "react-router": "7.7.0" }, "devDependencies": { - "@cloudflare/vite-plugin": "^1.11.0", + "@cloudflare/vite-plugin": "^1.11.2", "@react-router/dev": "7.7.0", "@tailwindcss/typography": "^0.5.16", "@tailwindcss/vite": "^4.1.11", @@ -27,8 +27,8 @@ "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "latest", "tailwindcss": "^4.1.11", - "vite": "^7.0.6", + "vite": "^7.1.1", "vite-plugin-inspect": "^11.3.2", - "wrangler": "^4.27.0" + "wrangler": "^4.28.1" } } diff --git a/packages/plugin-rsc/examples/starter-cf-single/package.json b/packages/plugin-rsc/examples/starter-cf-single/package.json index fb8b626f0..d00cae9e2 100644 --- a/packages/plugin-rsc/examples/starter-cf-single/package.json +++ b/packages/plugin-rsc/examples/starter-cf-single/package.json @@ -16,7 +16,7 @@ "react-dom": "^19.1.1" }, "devDependencies": { - "@cloudflare/vite-plugin": "^1.11.0", + "@cloudflare/vite-plugin": "^1.11.2", "@types/react": "^19.1.9", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "latest" diff --git a/packages/plugin-rsc/examples/starter/package.json b/packages/plugin-rsc/examples/starter/package.json index 5f1c0de41..b0d7c82fe 100644 --- a/packages/plugin-rsc/examples/starter/package.json +++ b/packages/plugin-rsc/examples/starter/package.json @@ -19,7 +19,7 @@ "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "latest", "rsc-html-stream": "^0.0.7", - "vite": "^7.0.6", + "vite": "^7.1.1", "vite-plugin-inspect": "^11.3.2" } } diff --git a/packages/plugin-rsc/package.json b/packages/plugin-rsc/package.json index a4419ddb2..37b100a37 100644 --- a/packages/plugin-rsc/package.json +++ b/packages/plugin-rsc/package.json @@ -51,7 +51,7 @@ "@playwright/test": "^1.54.2", "@tsconfig/strictest": "^2.0.5", "@types/estree": "^1.0.8", - "@types/node": "^22.17.0", + "@types/node": "^22.17.1", "@types/react": "^19.1.9", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "workspace:*", @@ -60,7 +60,7 @@ "react-server-dom-webpack": "^19.1.1", "rsc-html-stream": "^0.0.7", "tinyexec": "^1.0.1", - "tsdown": "^0.13.2", + "tsdown": "^0.14.0", "vite-plugin-inspect": "^11.3.2" }, "peerDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2b286c369..00d499311 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,8 +7,8 @@ settings: catalogs: rolldown-vite: vite: - specifier: npm:rolldown-vite@^7.0.12 - version: 7.0.12 + specifier: npm:rolldown-vite@^7.1.0 + version: 7.1.0 overrides: '@types/estree': ^1.0.8 @@ -18,32 +18,32 @@ importers: .: devDependencies: '@eslint/js': - specifier: ^9.32.0 - version: 9.32.0 + specifier: ^9.33.0 + version: 9.33.0 '@types/fs-extra': specifier: ^11.0.4 version: 11.0.4 '@types/node': - specifier: ^22.17.0 - version: 22.17.0 + specifier: ^22.17.1 + version: 22.17.1 '@vitejs/release-scripts': specifier: ^1.6.0 version: 1.6.0(conventional-commits-filter@5.0.0) eslint: - specifier: ^9.32.0 - version: 9.32.0(jiti@2.4.2) + specifier: ^9.33.0 + version: 9.33.0(jiti@2.4.2) eslint-plugin-import-x: specifier: ^4.16.1 - version: 4.16.1(@typescript-eslint/utils@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2))(eslint@9.32.0(jiti@2.4.2)) + version: 4.16.1(@typescript-eslint/utils@8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2))(eslint@9.33.0(jiti@2.4.2)) eslint-plugin-n: specifier: ^17.21.3 - version: 17.21.3(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2) + version: 17.21.3(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2) eslint-plugin-regexp: - specifier: ^2.9.1 - version: 2.9.1(eslint@9.32.0(jiti@2.4.2)) + specifier: ^2.10.0 + version: 2.10.0(eslint@9.33.0(jiti@2.4.2)) fs-extra: - specifier: ^11.3.0 - version: 11.3.0 + specifier: ^11.3.1 + version: 11.3.1 globals: specifier: ^16.3.0 version: 16.3.0 @@ -69,14 +69,14 @@ importers: specifier: ^5.9.2 version: 5.9.2 typescript-eslint: - specifier: ^8.38.0 - version: 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2) + specifier: ^8.39.0 + version: 8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2) vite: - specifier: ^7.0.6 - version: 7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + specifier: ^7.1.1 + version: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) packages/common: {} @@ -92,8 +92,8 @@ importers: specifier: ^7.27.1 version: 7.27.1(@babel/core@7.28.0) '@rolldown/pluginutils': - specifier: 1.0.0-beta.30 - version: 1.0.0-beta.30 + specifier: 1.0.0-beta.31 + version: 1.0.0-beta.31 '@types/babel__core': specifier: ^7.20.5 version: 7.20.5 @@ -114,36 +114,36 @@ importers: specifier: ^19.1.1 version: 19.1.1(react@19.1.1) rolldown: - specifier: 1.0.0-beta.30 - version: 1.0.0-beta.30 + specifier: 1.0.0-beta.31 + version: 1.0.0-beta.31 tsdown: - specifier: ^0.13.2 - version: 0.13.2(publint@0.3.12)(typescript@5.9.2) + specifier: ^0.14.0 + version: 0.14.0(publint@0.3.12)(typescript@5.9.2) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) packages/plugin-react-oxc: dependencies: '@rolldown/pluginutils': - specifier: 1.0.0-beta.30 - version: 1.0.0-beta.30 + specifier: 1.0.0-beta.31 + version: 1.0.0-beta.31 devDependencies: '@vitejs/react-common': specifier: workspace:* version: link:../common tsdown: - specifier: ^0.13.2 - version: 0.13.2(publint@0.3.12)(typescript@5.9.2) + specifier: ^0.14.0 + version: 0.14.0(publint@0.3.12)(typescript@5.9.2) vite: specifier: catalog:rolldown-vite - version: rolldown-vite@7.0.12(@types/node@22.17.0)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1) + version: rolldown-vite@7.1.0(@types/node@22.17.1)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1) packages/plugin-react-swc: dependencies: '@rolldown/pluginutils': - specifier: 1.0.0-beta.30 - version: 1.0.0-beta.30 + specifier: 1.0.0-beta.31 + version: 1.0.0-beta.31 '@swc/core': specifier: ^1.13.2 version: 1.13.2 @@ -155,20 +155,20 @@ importers: specifier: ^11.0.4 version: 11.0.4 '@types/node': - specifier: ^22.17.0 - version: 22.17.0 + specifier: ^22.17.1 + version: 22.17.1 '@vitejs/react-common': specifier: workspace:* version: link:../common fs-extra: - specifier: ^11.3.0 - version: 11.3.0 + specifier: ^11.3.1 + version: 11.3.1 prettier: specifier: ^3.0.3 version: 3.6.2 tsdown: - specifier: ^0.13.2 - version: 0.13.2(publint@0.3.12)(typescript@5.9.2) + specifier: ^0.14.0 + version: 0.14.0(publint@0.3.12)(typescript@5.9.2) typescript: specifier: ^5.9.2 version: 5.9.2 @@ -458,7 +458,7 @@ importers: version: 3.1.0 vitefu: specifier: ^1.1.1 - version: 1.1.1(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 1.1.1(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) devDependencies: '@hiogawa/utils': specifier: ^1.7.0 @@ -473,8 +473,8 @@ importers: specifier: ^1.0.8 version: 1.0.8 '@types/node': - specifier: ^22.17.0 - version: 22.17.0 + specifier: ^22.17.1 + version: 22.17.1 '@types/react': specifier: ^19.1.9 version: 19.1.9 @@ -500,11 +500,11 @@ importers: specifier: ^1.0.1 version: 1.0.1 tsdown: - specifier: ^0.13.2 - version: 0.13.2(publint@0.3.12)(typescript@5.9.2) + specifier: ^0.14.0 + version: 0.14.0(publint@0.3.12)(typescript@5.9.2) vite-plugin-inspect: specifier: ^11.3.2 - version: 11.3.2(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 11.3.2(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) packages/plugin-rsc/examples/basic: dependencies: @@ -520,7 +520,7 @@ importers: devDependencies: '@tailwindcss/vite': specifier: ^4.1.11 - version: 4.1.11(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 4.1.11(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) '@types/react': specifier: ^19.1.9 version: 19.1.9 @@ -558,14 +558,14 @@ importers: specifier: ^4.1.11 version: 4.1.11 vite: - specifier: ^7.0.6 - version: 7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + specifier: ^7.1.1 + version: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vite-plugin-inspect: specifier: ^11.3.2 - version: 11.3.2(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 11.3.2(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) wrangler: - specifier: ^4.27.0 - version: 4.27.0 + specifier: ^4.28.1 + version: 4.28.1 packages/plugin-rsc/examples/browser-mode: dependencies: @@ -589,8 +589,8 @@ importers: specifier: latest version: link:../../../plugin-react vite: - specifier: ^7.0.6 - version: 7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + specifier: ^7.1.1 + version: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) packages/plugin-rsc/examples/e2e: devDependencies: @@ -626,8 +626,8 @@ importers: specifier: latest version: link:../../../plugin-react vite: - specifier: ^7.0.6 - version: 7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + specifier: ^7.1.1 + version: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) packages/plugin-rsc/examples/react-router: dependencies: @@ -645,17 +645,17 @@ importers: version: 7.7.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) devDependencies: '@cloudflare/vite-plugin': - specifier: ^1.11.0 - version: 1.11.0(rollup@4.44.1)(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250730.0)(wrangler@4.27.0) + specifier: ^1.11.2 + version: 1.11.2(rollup@4.44.1)(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250803.0)(wrangler@4.28.1) '@react-router/dev': specifier: 7.7.0 - version: 7.7.0(@types/node@22.17.0)(babel-plugin-macros@3.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(react-router@7.7.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(tsx@4.20.3)(typescript@5.9.2)(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(wrangler@4.27.0)(yaml@2.7.1) + version: 7.7.0(@types/node@22.17.1)(babel-plugin-macros@3.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(react-router@7.7.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(tsx@4.20.3)(typescript@5.9.2)(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(wrangler@4.28.1)(yaml@2.7.1) '@tailwindcss/typography': specifier: ^0.5.16 version: 0.5.16(tailwindcss@4.1.11) '@tailwindcss/vite': specifier: ^4.1.11 - version: 4.1.11(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 4.1.11(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) '@types/react': specifier: ^19.1.9 version: 19.1.9 @@ -669,14 +669,14 @@ importers: specifier: ^4.1.11 version: 4.1.11 vite: - specifier: ^7.0.6 - version: 7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + specifier: ^7.1.1 + version: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vite-plugin-inspect: specifier: ^11.3.2 - version: 11.3.2(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 11.3.2(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) wrangler: - specifier: ^4.27.0 - version: 4.27.0 + specifier: ^4.28.1 + version: 4.28.1 packages/plugin-rsc/examples/ssg: dependencies: @@ -704,7 +704,7 @@ importers: version: link:../../../plugin-react vite-plugin-inspect: specifier: ^11.3.2 - version: 11.3.2(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 11.3.2(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) packages/plugin-rsc/examples/starter: dependencies: @@ -731,11 +731,11 @@ importers: specifier: ^0.0.7 version: 0.0.7 vite: - specifier: ^7.0.6 - version: 7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + specifier: ^7.1.1 + version: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) vite-plugin-inspect: specifier: ^11.3.2 - version: 11.3.2(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 11.3.2(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) packages/plugin-rsc/examples/starter-cf-single: dependencies: @@ -750,8 +750,8 @@ importers: version: 19.1.1(react@19.1.1) devDependencies: '@cloudflare/vite-plugin': - specifier: ^1.11.0 - version: 1.11.0(rollup@4.44.1)(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250730.0)(wrangler@4.27.0) + specifier: ^1.11.2 + version: 1.11.2(rollup@4.44.1)(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250803.0)(wrangler@4.28.1) '@types/react': specifier: ^19.1.9 version: 19.1.9 @@ -1221,47 +1221,47 @@ packages: resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==} engines: {node: '>=18.0.0'} - '@cloudflare/unenv-preset@2.5.0': - resolution: {integrity: sha512-CZe9B2VbjIQjBTyc+KoZcN1oUcm4T6GgCXoel9O7647djHuSRAa6sM6G+NdxWArATZgeMMbsvn9C50GCcnIatA==} + '@cloudflare/unenv-preset@2.6.0': + resolution: {integrity: sha512-h7Txw0WbDuUbrvZwky6+x7ft+U/Gppfn/rWx6IdR+e9gjygozRJnV26Y2TOr3yrIFa6OsZqqR2lN+jWTrakHXg==} peerDependencies: unenv: 2.0.0-rc.19 - workerd: ^1.20250722.0 + workerd: ^1.20250802.0 peerDependenciesMeta: workerd: optional: true - '@cloudflare/vite-plugin@1.11.0': - resolution: {integrity: sha512-NVK5n6CTRf0cXItSc+X3UJZ37xKCLybbSEUDYuZNGzvAsbwivgI66eKl7+BKTVq55fo17YbrrIBQAUsQkgopHQ==} + '@cloudflare/vite-plugin@1.11.2': + resolution: {integrity: sha512-iY/XTYE3TCZLXaIYGljGQeG81XmUkQ2ZOqzVs56a+5QQyxkA9S8sqfBh/FX0vwzUASLFVUru0WsyqCB4fxrSAA==} peerDependencies: vite: ^6.1.0 || ^7.0.0 - wrangler: ^4.27.0 + wrangler: ^4.28.1 - '@cloudflare/workerd-darwin-64@1.20250730.0': - resolution: {integrity: sha512-X3egNyTjLQaECYe34x8Al7r4oXAhcN3a8+8qcpNCcq1sgtuHIeAwS9potgRR/mwkGfmrJn7nfAyDKC4vrkniQQ==} + '@cloudflare/workerd-darwin-64@1.20250803.0': + resolution: {integrity: sha512-6QciMnJp1p3F1qUiN0LaLfmw7SuZA/gfUBOe8Ft81pw16JYZ3CyiqIKPJvc1SV8jgDx8r+gz/PRi1NwOMt329A==} engines: {node: '>=16'} cpu: [x64] os: [darwin] - '@cloudflare/workerd-darwin-arm64@1.20250730.0': - resolution: {integrity: sha512-/4bvcaGY/9v0rghgKboGiyPKKGQTbDnQ1EeY0oN0SSQH0Cp3OBzqwni/JRvh8TEaD+5azJnSFLlFZj9w7fo+hw==} + '@cloudflare/workerd-darwin-arm64@1.20250803.0': + resolution: {integrity: sha512-DoIgghDowtqoNhL6OoN/F92SKtrk7mRQKc4YSs/Dst8IwFZq+pCShOlWfB0MXqHKPSoiz5xLSrUKR9H6gQMPvw==} engines: {node: '>=16'} cpu: [arm64] os: [darwin] - '@cloudflare/workerd-linux-64@1.20250730.0': - resolution: {integrity: sha512-I4ZsXYdNkqkJnzNFKADMufiLIzRdIRsN7dSH8UCPw2fYp1BbKA10AkKVqitFwBxIY8eOzQ6Vf7c41AjLQmtJqA==} + '@cloudflare/workerd-linux-64@1.20250803.0': + resolution: {integrity: sha512-mYdz4vNWX3+PoqRjssepVQqgh42IBiSrl+wb7vbh7VVWUVzBnQKtW3G+UFiBF62hohCLexGIEi7L0cFfRlcKSQ==} engines: {node: '>=16'} cpu: [x64] os: [linux] - '@cloudflare/workerd-linux-arm64@1.20250730.0': - resolution: {integrity: sha512-tTpO6139jFQ5vxgtBZgS8Y8R1jVidS4n7s37x5xO9bCWLZoL0kTj38UGZ8FENkTeaMxE9Mm//nbQol7TfJ2nZg==} + '@cloudflare/workerd-linux-arm64@1.20250803.0': + resolution: {integrity: sha512-RmrtUYLRUg6djKU7Z6yebS6YGJVnaDVY6bbXca+2s26vw4ibJDOTPLuBHFQF62Grw3fAfsNbjQh5i14vG2mqUg==} engines: {node: '>=16'} cpu: [arm64] os: [linux] - '@cloudflare/workerd-windows-64@1.20250730.0': - resolution: {integrity: sha512-paVHgocuilMzOU+gEyKR/86j/yI+QzmSHRnqdd8OdQ37Hf6SyPX7kQj6VVNRXbzVHWix1WxaJsXfTGK1LK05wA==} + '@cloudflare/workerd-windows-64@1.20250803.0': + resolution: {integrity: sha512-uLV8gdudz36o9sUaAKbBxxTwZwLFz1KyW7QpBvOo4+r3Ib8yVKXGiySIMWGD7A0urSMrjf3e5LlLcJKgZUOjMA==} engines: {node: '>=16'} cpu: [x64] os: [win32] @@ -1668,28 +1668,28 @@ packages: resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.3.0': - resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==} + '@eslint/config-helpers@0.3.1': + resolution: {integrity: sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.15.1': - resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==} + '@eslint/core@0.15.2': + resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.32.0': - resolution: {integrity: sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==} + '@eslint/js@9.33.0': + resolution: {integrity: sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.3.4': - resolution: {integrity: sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==} + '@eslint/plugin-kit@0.3.5': + resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@hiogawa/utils@1.7.0': @@ -1888,12 +1888,12 @@ packages: resolution: {integrity: sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - '@oxc-project/runtime@0.78.0': - resolution: {integrity: sha512-jOU7sDFMyq5ShGJC21UobalVzqcdtWGfySVp8ELvKoVLzMpLHb4kv1bs9VKxaP8XC7Z9hlAXwEKVhCTN+j21aQ==} + '@oxc-project/runtime@0.80.0': + resolution: {integrity: sha512-3rzy1bJAZ4s7zV9TKT60x119RwJDCDqEtCwK/Zc2qlm7wGhiIUxLLYUhE/mN91yB0u1kxm5sh4NjU12sPqQTpg==} engines: {node: '>=6.9.0'} - '@oxc-project/types@0.78.0': - resolution: {integrity: sha512-8FvExh0WRWN1FoSTjah1xa9RlavZcJQ8/yxRbZ7ElmSa2Ij5f5Em7MvRbSthE6FbwC6Wh8iAw0Gpna7QdoqLGg==} + '@oxc-project/types@0.80.0': + resolution: {integrity: sha512-xxHQm8wfCv2e8EmtaDwpMeAHOWqgQDAYg+BJouLXSQt5oTKu9TIXrgNMGSrM2fLvKmECsRd9uUFAAD+hPyootA==} '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} @@ -1955,78 +1955,78 @@ packages: '@remix-run/node-fetch-server@0.8.0': resolution: {integrity: sha512-8/sKegb4HrM6IdcQeU0KPhj9VOHm5SUqswJDHuMCS3mwbr/NRx078QDbySmn0xslahvvZoOENd7EnK40kWKxkg==} - '@rolldown/binding-android-arm64@1.0.0-beta.30': - resolution: {integrity: sha512-4j7QBitb/WMT1fzdJo7BsFvVNaFR5WCQPdf/RPDHEsgQIYwBaHaL47KTZxncGFQDD1UAKN3XScJ0k7LAsZfsvg==} + '@rolldown/binding-android-arm64@1.0.0-beta.31': + resolution: {integrity: sha512-0mFtKwOG7smn0HkvQ6h8j0m/ohkR7Fp5eMTJ2Pns/HSbePHuDpxMaQ4TjZ6arlVXxpeWZlAHeT5BeNsOA3iWTg==} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-beta.30': - resolution: {integrity: sha512-4vWFTe1o5LXeitI2lW8qMGRxxwrH/LhKd2HDLa/QPhdxohvdnfKyDZWN96XUhDyje2bHFCFyhMs3ak2lg2mJFA==} + '@rolldown/binding-darwin-arm64@1.0.0-beta.31': + resolution: {integrity: sha512-BHfHJ8Nb5G7ZKJl6pimJacupONT4F7w6gmQHw41rouAnJF51ORDwGefWeb6OMLzGmJwzxlIVPERfnJf1EsMM7A==} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-beta.30': - resolution: {integrity: sha512-MxrfodqImbsDFFFU/8LxyFPZjt7s4ht8g2Zb76EmIQ+xlmit46L9IzvWiuMpEaSJ5WbnjO7fCDWwakMGyJJ+Dw==} + '@rolldown/binding-darwin-x64@1.0.0-beta.31': + resolution: {integrity: sha512-4MiuRtExC08jHbSU/diIL+IuQP+3Ck1FbWAplK+ysQJ7fxT3DMxy5FmnIGfmhaqow8oTjb2GEwZJKgTRjZL1Vw==} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-beta.30': - resolution: {integrity: sha512-c/TQXcATKoO8qE1bCjCOkymZTu7yVUAxBSNLp42Q97XHCb0Cu9v6MjZpB6c7Hq9NQ9NzW44uglak9D/r77JeDw==} + '@rolldown/binding-freebsd-x64@1.0.0-beta.31': + resolution: {integrity: sha512-nffC1u7ccm12qlAea8ExY3AvqlaHy/o/3L4p5Es8JFJ3zJSs6e3DyuxGZZVdl9EVwsLxPPTvioIl4tEm2afwyw==} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.30': - resolution: {integrity: sha512-Vxci4xylM11zVqvrmezAaRjGBDyOlMRtlt7TDgxaBmSYLuiokXbZpD8aoSuOyjUAeN0/tmWItkxNGQza8UWGNQ==} + '@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-arm64-gnu@1.0.0-beta.30': - resolution: {integrity: sha512-iEBEdSs25Ol0lXyVNs763f7YPAIP0t1EAjoXME81oJ94DesJslaLTj71Rn1shoMDVA+dfkYA286w5uYnOs9ZNA==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.31': + resolution: {integrity: sha512-oTDZVfqIAjLB2I1yTiLyyhfPPO6dky33sTblxTCpe+ZT55WizN3KDoBKJ4yXG8shI6I4bRShVu29Xg0yAjyQYw==} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.30': - resolution: {integrity: sha512-Ny684Sn1X8c+gGLuDlxkOuwiEE3C7eEOqp1/YVBzQB4HO7U/b4n7alvHvShboOEY5DP1fFUjq6Z+sBLYlCIZbQ==} + '@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-ohos@1.0.0-beta.30': - resolution: {integrity: sha512-6moyULHDPKwt5RDEV72EqYw5n+s46AerTwtEBau5wCsZd1wuHS1L9z6wqhKISXAFTK9sneN0TEjvYKo+sgbbiA==} + '@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.30': - resolution: {integrity: sha512-p0yoPdoGg5Ow2YZKKB5Ypbn58i7u4XFk3PvMkriFnEcgtVk40c5u7miaX7jH0JdzahyXVBJ/KT5yEpJrzQn8yg==} + '@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-musl@1.0.0-beta.30': - resolution: {integrity: sha512-sM/KhCrsT0YdHX10mFSr0cvbfk1+btG6ftepAfqhbcDfhi0s65J4dTOxGmklJnJL9i1LXZ8WA3N4wmnqsfoK8Q==} + '@rolldown/binding-linux-x64-musl@1.0.0-beta.31': + resolution: {integrity: sha512-zRm2YmzFVqbsmUsyyZnHfJrOlQUcWS/FJ5ZWL8Q1kZh5PnLBrTVZNpakIWwAxpN5gNEi9MmFd5YHocVJp8ps1Q==} cpu: [x64] os: [linux] - '@rolldown/binding-wasm32-wasi@1.0.0-beta.30': - resolution: {integrity: sha512-i3kD5OWs8PQP0V+JW3TFyCLuyjuNzrB45em0g84Jc+gvnDsGVlzVjMNPo7txE/yT8CfE90HC/lDs3ry9FvaUyw==} + '@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-win32-arm64-msvc@1.0.0-beta.30': - resolution: {integrity: sha512-q7mrYln30V35VrCqnBVQQvNPQm8Om9HC59I3kMYiOWogvJobzSPyO+HA1MP363+Qgwe39I2I1nqBKPOtWZ33AQ==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.31': + resolution: {integrity: sha512-4nftR9V2KHH3zjBwf6leuZZJQZ7v0d70ogjHIqB3SDsbDLvVEZiGSsSn2X6blSZRZeJSFzK0pp4kZ67zdZXwSw==} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.30': - resolution: {integrity: sha512-nUqGBt39XTpbBEREEnyKofdP3uz+SN/x2884BH+N3B2NjSUrP6NXwzltM35C0wKK42hX/nthRrwSgj715m99Jw==} + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.31': + resolution: {integrity: sha512-0TQcKu9xZVHYALit+WJsSuADGlTFfOXhnZoIHWWQhTk3OgbwwbYcSoZUXjRdFmR6Wswn4csHtJGN1oYKeQ6/2g==} cpu: [ia32] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.30': - resolution: {integrity: sha512-lbnvUwAXIVWSXAeZrCa4b1KvV/DW0rBnMHuX0T7I6ey1IsXZ90J37dEgt3j48Ex1Cw1E+5H7VDNP2gyOX8iu3w==} + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.31': + resolution: {integrity: sha512-3zMICWwpZh1jrkkKDYIUCx/2wY3PXLICAS0AnbeLlhzfWPhCcpNK9eKhiTlLAZyTp+3kyipoi/ZSVIh+WDnBpQ==} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-beta.30': - resolution: {integrity: sha512-whXaSoNUFiyDAjkUF8OBpOm77Szdbk5lGNqFe6CbVbJFrhCCPinCbRA3NjawwlNHla1No7xvXXh+CpSxnPfUEw==} + '@rolldown/pluginutils@1.0.0-beta.31': + resolution: {integrity: sha512-IaDZ9NhjOIOkYtm+hH0GX33h3iVZ2OeSUnFF0+7Z4+1GuKs4Kj5wK3+I2zNV9IPLfqV4XlwWif8SXrZNutxciQ==} '@rollup/plugin-replace@6.0.2': resolution: {integrity: sha512-7QaYCf8bqF04dOy7w/eHmJeNExxTYwvKAmlSAH/EaWWUzbT0h5sbF6bktFoX/0F/0qwng5/dWFMyf3gzaM8DsQ==} @@ -2397,8 +2397,8 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node@22.17.0': - resolution: {integrity: sha512-bbAKTCqX5aNVryi7qXVMi+OkB3w/OyblodicMbvE38blyAz7GxXf6XYhklokijuPwwVg9sDLKRxt0ZHXQwZVfQ==} + '@types/node@22.17.1': + resolution: {integrity: sha512-y3tBaz+rjspDTylNjAX37jEC3TETEFGNJL6uQDxwF9/8GLLIjW1rvVHlynyuUKMnMr1Roq8jOv3vkopBjC4/VA==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -2437,63 +2437,67 @@ packages: '@types/unist@3.0.2': resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} - '@typescript-eslint/eslint-plugin@8.38.0': - resolution: {integrity: sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==} + '@typescript-eslint/eslint-plugin@8.39.0': + resolution: {integrity: sha512-bhEz6OZeUR+O/6yx9Jk6ohX6H9JSFTaiY0v9/PuKT3oGK0rn0jNplLmyFUGV+a9gfYnVNwGDwS/UkLIuXNb2Rw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.38.0 + '@typescript-eslint/parser': ^8.39.0 eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.38.0': - resolution: {integrity: sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==} + '@typescript-eslint/parser@8.39.0': + resolution: {integrity: sha512-g3WpVQHngx0aLXn6kfIYCZxM6rRJlWzEkVpqEFLT3SgEDsp9cpCbxxgwnE504q4H+ruSDh/VGS6nqZIDynP+vg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.38.0': - resolution: {integrity: sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==} + '@typescript-eslint/project-service@8.39.0': + resolution: {integrity: sha512-CTzJqaSq30V/Z2Og9jogzZt8lJRR5TKlAdXmWgdu4hgcC9Kww5flQ+xFvMxIBWVNdxJO7OifgdOK4PokMIWPew==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.38.0': - resolution: {integrity: sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==} + '@typescript-eslint/scope-manager@8.39.0': + resolution: {integrity: sha512-8QOzff9UKxOh6npZQ/4FQu4mjdOCGSdO3p44ww0hk8Vu+IGbg0tB/H1LcTARRDzGCC8pDGbh2rissBuuoPgH8A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.38.0': - resolution: {integrity: sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==} + '@typescript-eslint/tsconfig-utils@8.39.0': + resolution: {integrity: sha512-Fd3/QjmFV2sKmvv3Mrj8r6N8CryYiCS8Wdb/6/rgOXAWGcFuc+VkQuG28uk/4kVNVZBQuuDHEDUpo/pQ32zsIQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.38.0': - resolution: {integrity: sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==} + '@typescript-eslint/type-utils@8.39.0': + resolution: {integrity: sha512-6B3z0c1DXVT2vYA9+z9axjtc09rqKUPRmijD5m9iv8iQpHBRYRMBcgxSiKTZKm6FwWw1/cI4v6em35OsKCiN5Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/types@8.38.0': resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.38.0': - resolution: {integrity: sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==} + '@typescript-eslint/types@8.39.0': + resolution: {integrity: sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.39.0': + resolution: {integrity: sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.38.0': - resolution: {integrity: sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==} + '@typescript-eslint/utils@8.39.0': + resolution: {integrity: sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.38.0': - resolution: {integrity: sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==} + '@typescript-eslint/visitor-keys@8.39.0': + resolution: {integrity: sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.2.0': @@ -3112,8 +3116,8 @@ packages: peerDependencies: eslint: '>=8.23.0' - eslint-plugin-regexp@2.9.1: - resolution: {integrity: sha512-JwK6glV/aoYDxvXcrvMQbw/pByBewZwqXVSBzzjot3GxSbmjDYuWU4LWiLdBO8JKi4o8A1+rygO6JWRBg4qAQQ==} + eslint-plugin-regexp@2.10.0: + resolution: {integrity: sha512-ovzQT8ESVn5oOe5a7gIDPD5v9bCSjIFJu57sVPDqgPRXicQzOnYfFN21WoQBQF18vrhT5o7UMKFwJQVVjyJ0ng==} engines: {node: ^18 || >=20} peerDependencies: eslint: '>=8.44.0' @@ -3130,8 +3134,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.32.0: - resolution: {integrity: sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==} + eslint@9.33.0: + resolution: {integrity: sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -3263,8 +3267,8 @@ packages: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} - fs-extra@11.3.0: - resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} + fs-extra@11.3.1: + resolution: {integrity: sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==} engines: {node: '>=14.14'} fsevents@2.3.2: @@ -3817,8 +3821,8 @@ packages: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} - miniflare@4.20250730.0: - resolution: {integrity: sha512-avGXBStHQSqcJr8ra1mJ3/OQvnLZ49B1uAILQapAha1DHNZZvXWLIgUVre/WGY6ZOlNGFPh5CJ+dXLm4yuV3Jw==} + miniflare@4.20250803.0: + resolution: {integrity: sha512-1tmCLfmMw0SqRBF9PPII9CVLQRzOrO7uIBmSng8BMSmtgs2kos7OeoM0sg6KbR9FrvP/zAniLyZuCAMAjuu4fQ==} engines: {node: '>=18.0.0'} hasBin: true @@ -4225,8 +4229,8 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rolldown-plugin-dts@0.15.1: - resolution: {integrity: sha512-X/oIfoqsEWb46aWXvdgKSN/TcF3Z50Mikk30KZcceVBgypEl9Tscvt3+o6pZzyJxZV3m+Kc+ftlHBBVQUGpXtw==} + rolldown-plugin-dts@0.15.6: + resolution: {integrity: sha512-AxQlyx3Nszob5QLmVUjz/VnC5BevtUo0h8tliuE0egddss7IbtCBU7GOe7biRU0fJNRQJmQjPKXFcc7K98j3+w==} engines: {node: '>=20.18.0'} peerDependencies: '@typescript/native-preview': '>=7.0.0-dev.20250601.1' @@ -4241,8 +4245,8 @@ packages: vue-tsc: optional: true - rolldown-vite@7.0.12: - resolution: {integrity: sha512-Gr40FRnE98FwPJcMwcJgBwP6U7Qxw/VEtDsFdFjvGUTdgI/tTmF7z7dbVo/ajItM54G+Zo9w5BIrUmat6MbuWQ==} + rolldown-vite@7.1.0: + resolution: {integrity: sha512-DCfutVwSkuc3NA75SdFuetKwcpq97tO2JZdM6gYv7GwW6/9qyXnITYER+8zrJt+vQVGP2SadAkMOpWw7B4LVwg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -4281,8 +4285,8 @@ packages: yaml: optional: true - rolldown@1.0.0-beta.30: - resolution: {integrity: sha512-H/LmDTUPlm65hWOTjXvd1k0qrGinNi8LrG3JsHVm6Oit7STg0upBmgoG5PZUHbAnGTHr0MLoLyzjmH261lIqSg==} + rolldown@1.0.0-beta.31: + resolution: {integrity: sha512-M2Q+RfG0FMJeSW3RSFTbvtjGVTcQpTQvN247D0EMSsPkpZFoinopR9oAnQiwgogQyzDuvKNnbyCbQQlmNAzSoQ==} hasBin: true rollup@4.44.1: @@ -4555,8 +4559,8 @@ packages: peerDependencies: typescript: '>=4.0.0' - tsdown@0.13.2: - resolution: {integrity: sha512-sXZKvkqxxKMBL6I/AzXJnC+/9i6bLO8an+Jg4JSJDkEc99e3Y5bACQMTQyE1IXJE+7F6IRZ1P8AJQu31eQqv8A==} + tsdown@0.14.0: + resolution: {integrity: sha512-3zBEDUC1XPnVE5rwfsm1y8REh58CJsDT319hkRwBgIpN9eMClE30dqF4HkK8zPKoczNNqFrQ2cKGrjE50WprIw==} engines: {node: '>=20.19.0'} hasBin: true peerDependencies: @@ -4595,12 +4599,12 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - typescript-eslint@8.38.0: - resolution: {integrity: sha512-FsZlrYK6bPDGoLeZRuvx2v6qrM03I0U0SnfCLPs/XCCPCFD80xU9Pg09H/K+XFa68uJuZo7l/Xhs+eDRg2l3hg==} + typescript-eslint@8.39.0: + resolution: {integrity: sha512-lH8FvtdtzcHJCkMOKnN73LIn6SLTpoojgJqDAxPm1jCR14eWSGPX8ul/gggBdPMk/d5+u9V854vTYQ8T5jF/1Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' typescript@5.9.2: resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} @@ -4766,8 +4770,8 @@ packages: yaml: optional: true - vite@7.0.6: - resolution: {integrity: sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==} + vite@7.1.1: + resolution: {integrity: sha512-yJ+Mp7OyV+4S+afWo+QyoL9jFWD11QFH0i5i7JypnfTcA1rmgxCbiA8WwAICDEtZ1Z1hzrVhN8R8rGTqkTY8ZQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -4871,17 +4875,17 @@ packages: wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - workerd@1.20250730.0: - resolution: {integrity: sha512-w6e0WM2YGfYQGmg0dewZeLUYIxAzMYK1R31vaS4HHHjgT32Xqj0eVQH+leegzY51RZPNCvw5pe8DFmW4MGf8Fg==} + workerd@1.20250803.0: + resolution: {integrity: sha512-oYH29mE/wNolPc32NHHQbySaNorj6+KASUtOvQHySxB5mO1NWdGuNv49woxNCF5971UYceGQndY+OLT+24C3wQ==} engines: {node: '>=16'} hasBin: true - wrangler@4.27.0: - resolution: {integrity: sha512-YNHZyMNWebFt9jD6dc20tQrCmnSzJj3SoB0FFa90w11Cx4lbP3d+rUZYjb18Zt+OGSMay1wT2PzwT2vCTskkmg==} + wrangler@4.28.1: + resolution: {integrity: sha512-B1w6XS3o1q1Icyx1CyirY5GNyYhucd63Jqml/EYSbB5dgv0VT8ir7L8IkCdbICEa4yYTETIgvTTZqffM6tBulA==} engines: {node: '>=18.0.0'} hasBin: true peerDependencies: - '@cloudflare/workers-types': ^4.20250730.0 + '@cloudflare/workers-types': ^4.20250803.0 peerDependenciesMeta: '@cloudflare/workers-types': optional: true @@ -4996,7 +5000,7 @@ snapshots: '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.28.1 + '@babel/types': 7.28.2 '@babel/helper-compilation-targets@7.27.2': dependencies: @@ -5024,7 +5028,7 @@ snapshots: '@babel/helper-member-expression-to-functions@7.27.1': dependencies: '@babel/traverse': 7.28.0 - '@babel/types': 7.28.1 + '@babel/types': 7.28.2 transitivePeerDependencies: - supports-color @@ -5046,7 +5050,7 @@ snapshots: '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.28.1 + '@babel/types': 7.28.2 '@babel/helper-plugin-utils@7.27.1': {} @@ -5062,7 +5066,7 @@ snapshots: '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: '@babel/traverse': 7.28.0 - '@babel/types': 7.28.1 + '@babel/types': 7.28.2 transitivePeerDependencies: - supports-color @@ -5196,24 +5200,24 @@ snapshots: dependencies: mime: 3.0.0 - '@cloudflare/unenv-preset@2.5.0(unenv@2.0.0-rc.19)(workerd@1.20250730.0)': + '@cloudflare/unenv-preset@2.6.0(unenv@2.0.0-rc.19)(workerd@1.20250803.0)': dependencies: unenv: 2.0.0-rc.19 optionalDependencies: - workerd: 1.20250730.0 + workerd: 1.20250803.0 - '@cloudflare/vite-plugin@1.11.0(rollup@4.44.1)(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250730.0)(wrangler@4.27.0)': + '@cloudflare/vite-plugin@1.11.2(rollup@4.44.1)(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250803.0)(wrangler@4.28.1)': dependencies: - '@cloudflare/unenv-preset': 2.5.0(unenv@2.0.0-rc.19)(workerd@1.20250730.0) + '@cloudflare/unenv-preset': 2.6.0(unenv@2.0.0-rc.19)(workerd@1.20250803.0) '@mjackson/node-fetch-server': 0.6.1 '@rollup/plugin-replace': 6.0.2(rollup@4.44.1) get-port: 7.1.0 - miniflare: 4.20250730.0 + miniflare: 4.20250803.0 picocolors: 1.1.1 tinyglobby: 0.2.14 unenv: 2.0.0-rc.19 - vite: 7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - wrangler: 4.27.0 + vite: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + wrangler: 4.28.1 ws: 8.18.0 transitivePeerDependencies: - bufferutil @@ -5221,19 +5225,19 @@ snapshots: - utf-8-validate - workerd - '@cloudflare/workerd-darwin-64@1.20250730.0': + '@cloudflare/workerd-darwin-64@1.20250803.0': optional: true - '@cloudflare/workerd-darwin-arm64@1.20250730.0': + '@cloudflare/workerd-darwin-arm64@1.20250803.0': optional: true - '@cloudflare/workerd-linux-64@1.20250730.0': + '@cloudflare/workerd-linux-64@1.20250803.0': optional: true - '@cloudflare/workerd-linux-arm64@1.20250730.0': + '@cloudflare/workerd-linux-arm64@1.20250803.0': optional: true - '@cloudflare/workerd-windows-64@1.20250730.0': + '@cloudflare/workerd-windows-64@1.20250803.0': optional: true '@conventional-changelog/git-client@2.5.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.0)': @@ -5506,9 +5510,9 @@ snapshots: '@esbuild/win32-x64@0.25.5': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@9.32.0(jiti@2.4.2))': + '@eslint-community/eslint-utils@4.7.0(eslint@9.33.0(jiti@2.4.2))': dependencies: - eslint: 9.32.0(jiti@2.4.2) + eslint: 9.33.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -5521,9 +5525,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.3.0': {} + '@eslint/config-helpers@0.3.1': {} - '@eslint/core@0.15.1': + '@eslint/core@0.15.2': dependencies: '@types/json-schema': 7.0.15 @@ -5541,13 +5545,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.32.0': {} + '@eslint/js@9.33.0': {} '@eslint/object-schema@2.1.6': {} - '@eslint/plugin-kit@0.3.4': + '@eslint/plugin-kit@0.3.5': dependencies: - '@eslint/core': 0.15.1 + '@eslint/core': 0.15.2 levn: 0.4.1 '@hiogawa/utils@1.7.0': {} @@ -5769,9 +5773,9 @@ snapshots: dependencies: which: 3.0.1 - '@oxc-project/runtime@0.78.0': {} + '@oxc-project/runtime@0.80.0': {} - '@oxc-project/types@0.78.0': {} + '@oxc-project/types@0.80.0': {} '@pkgjs/parseargs@0.11.0': optional: true @@ -5800,7 +5804,7 @@ snapshots: dependencies: quansync: 0.2.10 - '@react-router/dev@7.7.0(@types/node@22.17.0)(babel-plugin-macros@3.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(react-router@7.7.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(tsx@4.20.3)(typescript@5.9.2)(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(wrangler@4.27.0)(yaml@2.7.1)': + '@react-router/dev@7.7.0(@types/node@22.17.1)(babel-plugin-macros@3.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(react-router@7.7.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(tsx@4.20.3)(typescript@5.9.2)(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(wrangler@4.28.1)(yaml@2.7.1)': dependencies: '@babel/core': 7.28.0 '@babel/generator': 7.28.0 @@ -5829,11 +5833,11 @@ snapshots: set-cookie-parser: 2.7.1 tinyglobby: 0.2.14 valibot: 0.41.0(typescript@5.9.2) - vite: 7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vite-node: 3.2.4(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite-node: 3.2.4(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) optionalDependencies: typescript: 5.9.2 - wrangler: 4.27.0 + wrangler: 4.28.1 transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -5859,51 +5863,51 @@ snapshots: '@remix-run/node-fetch-server@0.8.0': {} - '@rolldown/binding-android-arm64@1.0.0-beta.30': + '@rolldown/binding-android-arm64@1.0.0-beta.31': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-beta.30': + '@rolldown/binding-darwin-arm64@1.0.0-beta.31': optional: true - '@rolldown/binding-darwin-x64@1.0.0-beta.30': + '@rolldown/binding-darwin-x64@1.0.0-beta.31': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-beta.30': + '@rolldown/binding-freebsd-x64@1.0.0-beta.31': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.30': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.31': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.30': + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.31': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.30': + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.31': optional: true - '@rolldown/binding-linux-arm64-ohos@1.0.0-beta.30': + '@rolldown/binding-linux-arm64-ohos@1.0.0-beta.31': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.30': + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.31': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-beta.30': + '@rolldown/binding-linux-x64-musl@1.0.0-beta.31': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-beta.30': + '@rolldown/binding-wasm32-wasi@1.0.0-beta.31': dependencies: '@napi-rs/wasm-runtime': 1.0.1 optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.30': + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.31': optional: true - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.30': + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.31': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.30': + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.31': optional: true - '@rolldown/pluginutils@1.0.0-beta.30': {} + '@rolldown/pluginutils@1.0.0-beta.31': {} '@rollup/plugin-replace@6.0.2(rollup@4.44.1)': dependencies: @@ -5916,7 +5920,7 @@ snapshots: dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 - picomatch: 4.0.2 + picomatch: 4.0.3 optionalDependencies: rollup: 4.44.1 @@ -5983,11 +5987,11 @@ snapshots: '@simple-libs/child-process-utils@1.0.1': dependencies: '@simple-libs/stream-utils': 1.1.0 - '@types/node': 22.17.0 + '@types/node': 22.17.1 '@simple-libs/stream-utils@1.1.0': dependencies: - '@types/node': 22.17.0 + '@types/node': 22.17.1 '@sindresorhus/is@7.0.2': {} @@ -6125,12 +6129,12 @@ snapshots: postcss-selector-parser: 6.0.10 tailwindcss: 4.1.11 - '@tailwindcss/vite@4.1.11(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': + '@tailwindcss/vite@4.1.11(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': dependencies: '@tailwindcss/node': 4.1.11 '@tailwindcss/oxide': 4.1.11 tailwindcss: 4.1.11 - vite: 7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) '@tsconfig/strictest@2.0.5': {} @@ -6183,7 +6187,7 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 22.17.0 + '@types/node': 22.17.1 '@types/hast@3.0.3': dependencies: @@ -6198,7 +6202,7 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 22.17.0 + '@types/node': 22.17.1 '@types/mdast@4.0.3': dependencies: @@ -6208,7 +6212,7 @@ snapshots: '@types/ms@0.7.34': {} - '@types/node@22.17.0': + '@types/node@22.17.1': dependencies: undici-types: 6.21.0 @@ -6247,15 +6251,15 @@ snapshots: '@types/unist@3.0.2': {} - '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2))(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2)': + '@typescript-eslint/eslint-plugin@8.39.0(@typescript-eslint/parser@8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2))(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2) - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.38.0 - eslint: 9.32.0(jiti@2.4.2) + '@typescript-eslint/parser': 8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.39.0 + '@typescript-eslint/type-utils': 8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.39.0 + eslint: 9.33.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -6264,43 +6268,43 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2)': + '@typescript-eslint/parser@8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2)': dependencies: - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.38.0 + '@typescript-eslint/scope-manager': 8.39.0 + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.39.0 debug: 4.4.1 - eslint: 9.32.0(jiti@2.4.2) + eslint: 9.33.0(jiti@2.4.2) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.38.0(typescript@5.9.2)': + '@typescript-eslint/project-service@8.39.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.9.2) - '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/tsconfig-utils': 8.39.0(typescript@5.9.2) + '@typescript-eslint/types': 8.39.0 debug: 4.4.1 typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.38.0': + '@typescript-eslint/scope-manager@8.39.0': dependencies: - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/visitor-keys': 8.38.0 + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/visitor-keys': 8.39.0 - '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.9.2)': + '@typescript-eslint/tsconfig-utils@8.39.0(typescript@5.9.2)': dependencies: typescript: 5.9.2 - '@typescript-eslint/type-utils@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2)': + '@typescript-eslint/type-utils@8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2)': dependencies: - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2) + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2) debug: 4.4.1 - eslint: 9.32.0(jiti@2.4.2) + eslint: 9.33.0(jiti@2.4.2) ts-api-utils: 2.1.0(typescript@5.9.2) typescript: 5.9.2 transitivePeerDependencies: @@ -6308,12 +6312,14 @@ snapshots: '@typescript-eslint/types@8.38.0': {} - '@typescript-eslint/typescript-estree@8.38.0(typescript@5.9.2)': + '@typescript-eslint/types@8.39.0': {} + + '@typescript-eslint/typescript-estree@8.39.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/project-service': 8.38.0(typescript@5.9.2) - '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.9.2) - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/visitor-keys': 8.38.0 + '@typescript-eslint/project-service': 8.39.0(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.39.0(typescript@5.9.2) + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/visitor-keys': 8.39.0 debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 @@ -6324,20 +6330,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2)': + '@typescript-eslint/utils@8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) - eslint: 9.32.0(jiti@2.4.2) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.39.0 + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) + eslint: 9.33.0(jiti@2.4.2) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.38.0': + '@typescript-eslint/visitor-keys@8.39.0': dependencies: - '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/types': 8.39.0 eslint-visitor-keys: 4.2.1 '@ungap/structured-clone@1.2.0': {} @@ -6460,13 +6466,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@7.0.5(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': + '@vitest/mocker@3.2.4(vite@7.0.5(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 7.0.5(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.5(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) '@vitest/pretty-format@3.2.4': dependencies: @@ -6878,9 +6884,9 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-compat-utils@0.5.1(eslint@9.32.0(jiti@2.4.2)): + eslint-compat-utils@0.5.1(eslint@9.33.0(jiti@2.4.2)): dependencies: - eslint: 9.32.0(jiti@2.4.2) + eslint: 9.33.0(jiti@2.4.2) semver: 7.7.2 eslint-import-context@0.1.9(unrs-resolver@1.9.2): @@ -6890,19 +6896,19 @@ snapshots: optionalDependencies: unrs-resolver: 1.9.2 - eslint-plugin-es-x@7.8.0(eslint@9.32.0(jiti@2.4.2)): + eslint-plugin-es-x@7.8.0(eslint@9.33.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 - eslint: 9.32.0(jiti@2.4.2) - eslint-compat-utils: 0.5.1(eslint@9.32.0(jiti@2.4.2)) + eslint: 9.33.0(jiti@2.4.2) + eslint-compat-utils: 0.5.1(eslint@9.33.0(jiti@2.4.2)) - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2))(eslint@9.32.0(jiti@2.4.2)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2))(eslint@9.33.0(jiti@2.4.2)): dependencies: '@typescript-eslint/types': 8.38.0 comment-parser: 1.4.1 debug: 4.4.1 - eslint: 9.32.0(jiti@2.4.2) + eslint: 9.33.0(jiti@2.4.2) eslint-import-context: 0.1.9(unrs-resolver@1.9.2) is-glob: 4.0.3 minimatch: 10.0.1 @@ -6910,16 +6916,16 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.9.2 optionalDependencies: - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2) transitivePeerDependencies: - supports-color - eslint-plugin-n@17.21.3(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2): + eslint-plugin-n@17.21.3(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.4.2)) enhanced-resolve: 5.18.2 - eslint: 9.32.0(jiti@2.4.2) - eslint-plugin-es-x: 7.8.0(eslint@9.32.0(jiti@2.4.2)) + eslint: 9.33.0(jiti@2.4.2) + eslint-plugin-es-x: 7.8.0(eslint@9.33.0(jiti@2.4.2)) get-tsconfig: 4.10.1 globals: 15.12.0 globrex: 0.1.2 @@ -6929,12 +6935,12 @@ snapshots: transitivePeerDependencies: - typescript - eslint-plugin-regexp@2.9.1(eslint@9.32.0(jiti@2.4.2)): + eslint-plugin-regexp@2.10.0(eslint@9.33.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 comment-parser: 1.4.1 - eslint: 9.32.0(jiti@2.4.2) + eslint: 9.33.0(jiti@2.4.2) jsdoc-type-pratt-parser: 4.0.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 @@ -6949,16 +6955,16 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.32.0(jiti@2.4.2): + eslint@9.33.0(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.0 - '@eslint/config-helpers': 0.3.0 - '@eslint/core': 0.15.1 + '@eslint/config-helpers': 0.3.1 + '@eslint/core': 0.15.2 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.32.0 - '@eslint/plugin-kit': 0.3.4 + '@eslint/js': 9.33.0 + '@eslint/plugin-kit': 0.3.5 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.2 @@ -7127,7 +7133,7 @@ snapshots: dependencies: fetch-blob: 3.2.0 - fs-extra@11.3.0: + fs-extra@11.3.1: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 @@ -7828,7 +7834,7 @@ snapshots: mimic-function@5.0.1: {} - miniflare@4.20250730.0: + miniflare@4.20250803.0: dependencies: '@cspotcode/source-map-support': 0.8.1 acorn: 8.14.0 @@ -7838,7 +7844,7 @@ snapshots: sharp: 0.33.5 stoppable: 1.1.0 undici: 7.12.0 - workerd: 1.20250730.0 + workerd: 1.20250803.0 ws: 8.18.0 youch: 4.1.0-beta.10 zod: 3.22.3 @@ -8219,7 +8225,7 @@ snapshots: rfdc@1.4.1: {} - rolldown-plugin-dts@0.15.1(rolldown@1.0.0-beta.30)(typescript@5.9.2): + rolldown-plugin-dts@0.15.6(rolldown@1.0.0-beta.31)(typescript@5.9.2): dependencies: '@babel/generator': 7.28.0 '@babel/parser': 7.28.0 @@ -8229,50 +8235,50 @@ snapshots: debug: 4.4.1 dts-resolver: 2.1.1 get-tsconfig: 4.10.1 - rolldown: 1.0.0-beta.30 + rolldown: 1.0.0-beta.31 optionalDependencies: typescript: 5.9.2 transitivePeerDependencies: - oxc-resolver - supports-color - rolldown-vite@7.0.12(@types/node@22.17.0)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1): + rolldown-vite@7.1.0(@types/node@22.17.1)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1): dependencies: fdir: 6.4.6(picomatch@4.0.3) lightningcss: 1.30.1 picomatch: 4.0.3 postcss: 8.5.6 - rolldown: 1.0.0-beta.30 + rolldown: 1.0.0-beta.31 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 22.17.0 + '@types/node': 22.17.1 esbuild: 0.25.5 fsevents: 2.3.3 jiti: 2.4.2 tsx: 4.20.3 yaml: 2.7.1 - rolldown@1.0.0-beta.30: + rolldown@1.0.0-beta.31: dependencies: - '@oxc-project/runtime': 0.78.0 - '@oxc-project/types': 0.78.0 - '@rolldown/pluginutils': 1.0.0-beta.30 + '@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.30 - '@rolldown/binding-darwin-arm64': 1.0.0-beta.30 - '@rolldown/binding-darwin-x64': 1.0.0-beta.30 - '@rolldown/binding-freebsd-x64': 1.0.0-beta.30 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.30 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.30 - '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.30 - '@rolldown/binding-linux-arm64-ohos': 1.0.0-beta.30 - '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.30 - '@rolldown/binding-linux-x64-musl': 1.0.0-beta.30 - '@rolldown/binding-wasm32-wasi': 1.0.0-beta.30 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.30 - '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.30 - '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.30 + '@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 rollup@4.44.1: dependencies: @@ -8524,8 +8530,8 @@ snapshots: tinyglobby@0.2.14: dependencies: - fdir: 6.4.6(picomatch@4.0.2) - picomatch: 4.0.2 + fdir: 6.4.6(picomatch@4.0.3) + picomatch: 4.0.3 tinypool@1.1.1: {} @@ -8554,7 +8560,7 @@ snapshots: picomatch: 4.0.3 typescript: 5.9.2 - tsdown@0.13.2(publint@0.3.12)(typescript@5.9.2): + tsdown@0.14.0(publint@0.3.12)(typescript@5.9.2): dependencies: ansis: 4.1.0 cac: 6.7.14 @@ -8563,8 +8569,8 @@ snapshots: diff: 8.0.2 empathic: 2.0.0 hookable: 5.5.3 - rolldown: 1.0.0-beta.30 - rolldown-plugin-dts: 0.15.1(rolldown@1.0.0-beta.30)(typescript@5.9.2) + rolldown: 1.0.0-beta.31 + rolldown-plugin-dts: 0.15.6(rolldown@1.0.0-beta.31)(typescript@5.9.2) semver: 7.7.2 tinyexec: 1.0.1 tinyglobby: 0.2.14 @@ -8597,13 +8603,13 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2): + typescript-eslint@8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2))(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2) - '@typescript-eslint/parser': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2) - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.9.2) - eslint: 9.32.0(jiti@2.4.2) + '@typescript-eslint/eslint-plugin': 8.39.0(@typescript-eslint/parser@8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2))(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2) + '@typescript-eslint/parser': 8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2) + eslint: 9.33.0(jiti@2.4.2) typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -8745,23 +8751,23 @@ snapshots: unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 - vite-dev-rpc@1.1.0(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + vite-dev-rpc@1.1.0(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): dependencies: birpc: 2.5.0 - vite: 7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vite-hot-client: 2.1.0(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + vite: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite-hot-client: 2.1.0(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) - vite-hot-client@2.1.0(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + vite-hot-client@2.1.0(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): dependencies: - vite: 7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vite-node@3.2.4(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): + vite-node@3.2.4(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: cac: 6.7.14 debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) transitivePeerDependencies: - '@types/node' - jiti @@ -8776,7 +8782,7 @@ snapshots: - tsx - yaml - vite-plugin-inspect@11.3.2(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + vite-plugin-inspect@11.3.2(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): dependencies: ansis: 4.1.0 debug: 4.4.1 @@ -8786,12 +8792,12 @@ snapshots: perfect-debounce: 1.0.0 sirv: 3.0.1 unplugin-utils: 0.2.4 - vite: 7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vite-dev-rpc: 1.1.0(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + vite: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite-dev-rpc: 1.1.0(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) transitivePeerDependencies: - supports-color - vite@7.0.5(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): + vite@7.0.5(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: esbuild: 0.25.5 fdir: 6.4.6(picomatch@4.0.2) @@ -8800,14 +8806,14 @@ snapshots: rollup: 4.44.1 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 22.17.0 + '@types/node': 22.17.1 fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.30.1 tsx: 4.20.3 yaml: 2.7.1 - vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): + vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: esbuild: 0.25.5 fdir: 6.4.6(picomatch@4.0.3) @@ -8816,22 +8822,22 @@ snapshots: rollup: 4.44.1 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 22.17.0 + '@types/node': 22.17.1 fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.30.1 tsx: 4.20.3 yaml: 2.7.1 - vitefu@1.1.1(vite@7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + vitefu@1.1.1(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): optionalDependencies: - vite: 7.0.6(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.0.5(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + '@vitest/mocker': 3.2.4(vite@7.0.5(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -8849,12 +8855,12 @@ snapshots: tinyglobby: 0.2.14 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.0.5(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vite-node: 3.2.4(@types/node@22.17.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.5(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite-node: 3.2.4(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.17.0 + '@types/node': 22.17.1 transitivePeerDependencies: - jiti - less @@ -8890,24 +8896,24 @@ snapshots: wordwrap@1.0.0: {} - workerd@1.20250730.0: + workerd@1.20250803.0: optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20250730.0 - '@cloudflare/workerd-darwin-arm64': 1.20250730.0 - '@cloudflare/workerd-linux-64': 1.20250730.0 - '@cloudflare/workerd-linux-arm64': 1.20250730.0 - '@cloudflare/workerd-windows-64': 1.20250730.0 + '@cloudflare/workerd-darwin-64': 1.20250803.0 + '@cloudflare/workerd-darwin-arm64': 1.20250803.0 + '@cloudflare/workerd-linux-64': 1.20250803.0 + '@cloudflare/workerd-linux-arm64': 1.20250803.0 + '@cloudflare/workerd-windows-64': 1.20250803.0 - wrangler@4.27.0: + wrangler@4.28.1: dependencies: '@cloudflare/kv-asset-handler': 0.4.0 - '@cloudflare/unenv-preset': 2.5.0(unenv@2.0.0-rc.19)(workerd@1.20250730.0) + '@cloudflare/unenv-preset': 2.6.0(unenv@2.0.0-rc.19)(workerd@1.20250803.0) blake3-wasm: 2.1.5 esbuild: 0.25.4 - miniflare: 4.20250730.0 + miniflare: 4.20250803.0 path-to-regexp: 6.3.0 unenv: 2.0.0-rc.19 - workerd: 1.20250730.0 + workerd: 1.20250803.0 optionalDependencies: fsevents: 2.3.3 transitivePeerDependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 29c84f27b..b94b01a2c 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -6,7 +6,7 @@ packages: catalogs: rolldown-vite: - vite: npm:rolldown-vite@^7.0.12 + vite: npm:rolldown-vite@^7.1.0 overrides: '@types/estree': ^1.0.8 From 2f62dc0778e8c527c7951d6e35b0658a07f1e6fc Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 11 Aug 2025 11:39:50 +0900 Subject: [PATCH 182/313] fix(react): always skip react-compiler on non client envrionment (#689) --- packages/plugin-react/src/index.ts | 8 ++++++++ packages/plugin-rsc/e2e/react-compiler.test.ts | 7 +------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/packages/plugin-react/src/index.ts b/packages/plugin-react/src/index.ts index 7ee6535ea..87d00b167 100644 --- a/packages/plugin-react/src/index.ts +++ b/packages/plugin-react/src/index.ts @@ -245,6 +245,14 @@ export default function viteReact(opts: Options = {}): Plugin[] { })() const plugins = [...babelOptions.plugins] + // remove react-compiler plugin on non client environment + if (ssr) { + const reactCompilerPlugin = getReactCompilerPlugin(plugins) + if (reactCompilerPlugin) { + plugins.splice(plugins.indexOf(reactCompilerPlugin), 1) + } + } + const isJSX = filepath.endsWith('x') const useFastRefresh = !skipFastRefresh && diff --git a/packages/plugin-rsc/e2e/react-compiler.test.ts b/packages/plugin-rsc/e2e/react-compiler.test.ts index de8e9c52e..2c36e24b5 100644 --- a/packages/plugin-rsc/e2e/react-compiler.test.ts +++ b/packages/plugin-rsc/e2e/react-compiler.test.ts @@ -22,12 +22,7 @@ test.describe(() => { const overrideConfig = defineConfig({ plugins: [ - react({ - babel: { plugins: ['babel-plugin-react-compiler'] }, - }).map((p) => ({ - ...p, - applyToEnvironment: (e) => e.name === 'client', - })), + react({ babel: { plugins: ['babel-plugin-react-compiler'] } }), rsc(), ], }) From 9da2c98e17906bf8b2ba5aef95347306bb6c62ac Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 11 Aug 2025 12:11:41 +0900 Subject: [PATCH 183/313] release: plugin-rsc@0.4.18 --- packages/plugin-rsc/CHANGELOG.md | 12 ++++++++++++ packages/plugin-rsc/package.json | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/plugin-rsc/CHANGELOG.md b/packages/plugin-rsc/CHANGELOG.md index 65416fd10..a634a64c1 100644 --- a/packages/plugin-rsc/CHANGELOG.md +++ b/packages/plugin-rsc/CHANGELOG.md @@ -1,3 +1,15 @@ +## [0.4.18](https://github.com/vitejs/vite-plugin-react/compare/plugin-rsc@0.4.17...plugin-rsc@0.4.18) (2025-08-11) +### Bug Fixes + +* **deps:** update all non-major dependencies ([#694](https://github.com/vitejs/vite-plugin-react/issues/694)) ([5057858](https://github.com/vitejs/vite-plugin-react/commit/50578587472d23125980a46ff993fedaabca28d2)) +* **react:** always skip react-compiler on non client envrionment ([#689](https://github.com/vitejs/vite-plugin-react/issues/689)) ([2f62dc0](https://github.com/vitejs/vite-plugin-react/commit/2f62dc0778e8c527c7951d6e35b0658a07f1e6fc)) +* **rsc:** support cjs on module runner ([#687](https://github.com/vitejs/vite-plugin-react/issues/687)) ([7a92083](https://github.com/vitejs/vite-plugin-react/commit/7a92083eadb6ad8d92e6e560de414bc600e977c0)) + +### Miscellaneous Chores + +* **rsc:** add .gitignore to create-vite example ([#686](https://github.com/vitejs/vite-plugin-react/issues/686)) ([6df7192](https://github.com/vitejs/vite-plugin-react/commit/6df71929ea5c2176408054bc40bcb8dfbb370018)) +* **rsc:** mention deploy example ([#685](https://github.com/vitejs/vite-plugin-react/issues/685)) ([dea484a](https://github.com/vitejs/vite-plugin-react/commit/dea484ab8c740babab89da0f716bb929e57ba2af)) + ## [0.4.17](https://github.com/vitejs/vite-plugin-react/compare/plugin-rsc@0.4.16...plugin-rsc@0.4.17) (2025-08-05) ### Bug Fixes diff --git a/packages/plugin-rsc/package.json b/packages/plugin-rsc/package.json index 37b100a37..84438fa15 100644 --- a/packages/plugin-rsc/package.json +++ b/packages/plugin-rsc/package.json @@ -1,6 +1,6 @@ { "name": "@vitejs/plugin-rsc", - "version": "0.4.17", + "version": "0.4.18", "description": "React Server Components (RSC) support for Vite.", "keywords": [ "vite", From c329914c572473d4f09261fa0eba77484e720d2e Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 11 Aug 2025 13:21:19 +0900 Subject: [PATCH 184/313] fix(rsc): fix cjs default import on module runner (#695) --- packages/plugin-rsc/src/plugins/cjs.ts | 5 +- .../plugin-rsc/src/transforms/cjs.test.ts | 50 ++++++++++++++++++- .../src/transforms/fixtures/cjs/dep1.cjs | 2 + .../src/transforms/fixtures/cjs/dep2.cjs | 2 + .../src/transforms/fixtures/cjs/entry.mjs | 3 ++ 5 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 packages/plugin-rsc/src/transforms/fixtures/cjs/dep1.cjs create mode 100644 packages/plugin-rsc/src/transforms/fixtures/cjs/dep2.cjs create mode 100644 packages/plugin-rsc/src/transforms/fixtures/cjs/entry.mjs diff --git a/packages/plugin-rsc/src/plugins/cjs.ts b/packages/plugin-rsc/src/plugins/cjs.ts index b2b9e85e4..a232f69cb 100644 --- a/packages/plugin-rsc/src/plugins/cjs.ts +++ b/packages/plugin-rsc/src/plugins/cjs.ts @@ -56,7 +56,10 @@ export function cjsModuleRunnerPlugin(): Plugin[] { // TODO: can we use cjs-module-lexer to properly define named exports? // for re-exports, we need to eagerly transform dependencies though. // https://github.com/nodejs/node/blob/f3adc11e37b8bfaaa026ea85c1cf22e3a0e29ae9/lib/internal/modules/esm/translators.js#L382-L409 - output.append(`__vite_ssr_exportAll__(module.exports)`) + output.append(` +;__vite_ssr_exportAll__(module.exports); +export default module.exports; +`) return { code: output.toString(), map: output.generateMap({ hires: 'boundary' }), diff --git a/packages/plugin-rsc/src/transforms/cjs.test.ts b/packages/plugin-rsc/src/transforms/cjs.test.ts index 659eff7dd..2305ddea0 100644 --- a/packages/plugin-rsc/src/transforms/cjs.test.ts +++ b/packages/plugin-rsc/src/transforms/cjs.test.ts @@ -1,7 +1,8 @@ -import { parseAstAsync } from 'vite' +import { createServer, createServerModuleRunner, parseAstAsync } from 'vite' import { describe, expect, it } from 'vitest' import { debugSourceMap } from './test-utils' import { transformCjsToEsm } from './cjs' +import path from 'node:path' describe(transformCjsToEsm, () => { async function testTransform(input: string) { @@ -83,4 +84,51 @@ if (true) { " `) }) + + it('e2e', async () => { + const server = await createServer({ + configFile: false, + logLevel: 'error', + root: path.join(import.meta.dirname, 'fixtures/cjs'), + plugins: [ + { + name: 'cjs-module-runner-transform', + async transform(code, id) { + if (id.endsWith('.cjs')) { + const ast = await parseAstAsync(code) + const { output } = transformCjsToEsm(code, ast) + output.append(` +;__vite_ssr_exportAll__(module.exports); +export default module.exports; +`) + return { + code: output.toString(), + map: output.generateMap({ hires: 'boundary' }), + } + } + }, + }, + ], + }) + const runner = createServerModuleRunner(server.environments.ssr, { + hmr: false, + }) + const mod = await runner.import('/entry.mjs') + expect(mod).toMatchInlineSnapshot(` + { + "depDefault": { + "a": "a", + "b": "b", + }, + "depNamespace": { + "a": "a", + "b": "b", + "default": { + "a": "a", + "b": "b", + }, + }, + } + `) + }) }) diff --git a/packages/plugin-rsc/src/transforms/fixtures/cjs/dep1.cjs b/packages/plugin-rsc/src/transforms/fixtures/cjs/dep1.cjs new file mode 100644 index 000000000..9d823f886 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/cjs/dep1.cjs @@ -0,0 +1,2 @@ +exports.a = 'a' +exports.b = 'b' diff --git a/packages/plugin-rsc/src/transforms/fixtures/cjs/dep2.cjs b/packages/plugin-rsc/src/transforms/fixtures/cjs/dep2.cjs new file mode 100644 index 000000000..9d823f886 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/cjs/dep2.cjs @@ -0,0 +1,2 @@ +exports.a = 'a' +exports.b = 'b' diff --git a/packages/plugin-rsc/src/transforms/fixtures/cjs/entry.mjs b/packages/plugin-rsc/src/transforms/fixtures/cjs/entry.mjs new file mode 100644 index 000000000..bdcffd801 --- /dev/null +++ b/packages/plugin-rsc/src/transforms/fixtures/cjs/entry.mjs @@ -0,0 +1,3 @@ +import depDefault from './dep1.cjs' +import * as depNamespace from './dep2.cjs' +export { depDefault, depNamespace } From f0359c4eca48ca6eb2ba98254a272949a13f149e Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 11 Aug 2025 13:56:01 +0900 Subject: [PATCH 185/313] fix(rsc): replace `?v=` check with more robust `node_modules` detection (#696) --- packages/plugin-rsc/src/plugin.ts | 29 +++++++++++++++--------- packages/plugin-rsc/src/plugins/utils.ts | 6 +++++ 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index 7bba9b1ac..1181c7d1e 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -32,7 +32,11 @@ import { } from './transforms' import { generateEncryptionKey, toBase64 } from './utils/encryption-utils' import { createRpcServer } from './utils/rpc' -import { normalizeViteImportAnalysisUrl, prepareError } from './vite-utils' +import { + cleanUrl, + normalizeViteImportAnalysisUrl, + prepareError, +} from './vite-utils' import { cjsModuleRunnerPlugin } from './plugins/cjs' import { evalValue, parseIdQuery } from './plugins/utils' @@ -959,9 +963,12 @@ function vitePluginUseClient( let importId: string let referenceKey: string const packageSource = packageSources.get(id) - if (!packageSource && id.includes('?v=')) { - assert(this.environment.mode === 'dev') - // If non package source `?v=` reached here, this is a client boundary + if ( + !packageSource && + this.environment.mode === 'dev' && + id.includes('/node_modules/') + ) { + // If non package source reached here (often with ?v=... query), this is a client boundary // created by a package imported on server environment, which breaks the // expectation on dependency optimizer on browser. Directly copying over // "?v=" from client optimizer in client reference can make a hashed @@ -978,9 +985,7 @@ function vitePluginUseClient( `[vite-rsc] detected an internal client boundary created by a package imported on rsc environment`, ) } - importId = `/@id/__x00__virtual:vite-rsc/client-in-server-package-proxy/${encodeURIComponent( - id.split('?v=')[0]!, - )}` + importId = `/@id/__x00__virtual:vite-rsc/client-in-server-package-proxy/${encodeURIComponent(cleanUrl(id))}` referenceKey = importId } else if (packageSource) { if (this.environment.mode === 'dev') { @@ -1223,8 +1228,10 @@ function vitePluginUseServer( let normalizedId_: string | undefined const getNormalizedId = () => { if (!normalizedId_) { - if (id.includes('?v=')) { - assert(this.environment.mode === 'dev') + if ( + this.environment.mode === 'dev' && + id.includes('/node_modules/') + ) { const ignored = useServerPluginOptions.ignoredPackageWarnings?.some( (pattern) => @@ -1238,8 +1245,8 @@ function vitePluginUseServer( ) } // module runner has additional resolution step and it's not strict about - // module identity of `import(id)` like browser, so we simply strip it off. - id = id.split('?v=')[0]! + // module identity of `import(id)` like browser, so we simply strip queries such as `?v=`. + id = cleanUrl(id) } if (config.command === 'build') { normalizedId_ = hashString(path.relative(config.root, id)) diff --git a/packages/plugin-rsc/src/plugins/utils.ts b/packages/plugin-rsc/src/plugins/utils.ts index 5628fad57..a544a58e3 100644 --- a/packages/plugin-rsc/src/plugins/utils.ts +++ b/packages/plugin-rsc/src/plugins/utils.ts @@ -19,3 +19,9 @@ export function parseIdQuery(id: string): { const query = Object.fromEntries(new URLSearchParams(rawQuery)) return { filename, query } } + +// https://github.com/vitejs/vite/blob/946831f986cb797009b8178659d2b31f570c44ff/packages/vite/src/shared/utils.ts#L31-L34 +const postfixRE = /[?#].*$/ +export function cleanUrl(url: string): string { + return url.replace(postfixRE, '') +} From a88fb2ded4c8b9f42f2fee70a482615f331122f4 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 11 Aug 2025 15:18:14 +0900 Subject: [PATCH 186/313] fix(rsc): replace non-optimized server cjs warning with debug only log (#698) --- packages/plugin-rsc/e2e/basic.test.ts | 14 +++++++++++--- .../examples/react-router/cf/vite.config.ts | 2 -- packages/plugin-rsc/src/plugins/cjs.ts | 11 ++++++----- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/packages/plugin-rsc/e2e/basic.test.ts b/packages/plugin-rsc/e2e/basic.test.ts index 680975568..5cf1c21f2 100644 --- a/packages/plugin-rsc/e2e/basic.test.ts +++ b/packages/plugin-rsc/e2e/basic.test.ts @@ -58,12 +58,20 @@ test.describe('dev-non-optimized-cjs', () => { ) }) - const f = useFixture({ root: 'examples/basic', mode: 'dev' }) + const f = useFixture({ + root: 'examples/basic', + mode: 'dev', + cliOptions: { + env: { + DEBUG: 'vite-rsc:cjs', + }, + }, + }) test('show warning', async ({ page }) => { await page.goto(f.url()) - expect(f.proc().stderr()).toContain( - `Found non-optimized CJS dependency in 'ssr' environment.`, + expect(f.proc().stderr()).toMatch( + /non-optimized CJS dependency in 'ssr' environment.*@vitejs\/test-dep-cjs\/index.js/, ) }) }) diff --git a/packages/plugin-rsc/examples/react-router/cf/vite.config.ts b/packages/plugin-rsc/examples/react-router/cf/vite.config.ts index 8cf7a02f5..6895d0c12 100644 --- a/packages/plugin-rsc/examples/react-router/cf/vite.config.ts +++ b/packages/plugin-rsc/examples/react-router/cf/vite.config.ts @@ -45,13 +45,11 @@ export default defineConfig({ }, ssr: { optimizeDeps: { - include: ['react-router > cookie', 'react-router > set-cookie-parser'], exclude: ['react-router'], }, }, rsc: { optimizeDeps: { - include: ['react-router > cookie', 'react-router > set-cookie-parser'], exclude: ['react-router'], }, }, diff --git a/packages/plugin-rsc/src/plugins/cjs.ts b/packages/plugin-rsc/src/plugins/cjs.ts index a232f69cb..a501bbe04 100644 --- a/packages/plugin-rsc/src/plugins/cjs.ts +++ b/packages/plugin-rsc/src/plugins/cjs.ts @@ -5,10 +5,12 @@ import path from 'node:path' import fs from 'node:fs' import * as esModuleLexer from 'es-module-lexer' import { transformCjsToEsm } from '../transforms/cjs' +import { createDebug } from '@hiogawa/utils' + +const debug = createDebug('vite-rsc:cjs') export function cjsModuleRunnerPlugin(): Plugin[] { - // use-sync-external-store is known to work fine so don't show warning - const warnedPackages = new Set(['use-sync-external-store']) + const warnedPackages = new Set() return [ { @@ -43,9 +45,8 @@ export function cjsModuleRunnerPlugin(): Plugin[] { // warning once per package const packageKey = extractPackageKey(id) if (!warnedPackages.has(packageKey)) { - this.warn( - `Found non-optimized CJS dependency in '${this.environment.name}' environment. ` + - `It is recommended to add the dependency to 'environments.${this.environment.name}.optimizeDeps.include'.`, + debug( + `non-optimized CJS dependency in '${this.environment.name}' environment: ${id}`, ) warnedPackages.add(packageKey) } From 11ecfb47828068cb77e71f755156656c99e9fbe9 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 11 Aug 2025 15:25:46 +0900 Subject: [PATCH 187/313] release: plugin-rsc@0.4.19 --- packages/plugin-rsc/CHANGELOG.md | 7 +++++++ packages/plugin-rsc/package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/plugin-rsc/CHANGELOG.md b/packages/plugin-rsc/CHANGELOG.md index a634a64c1..9538dfa60 100644 --- a/packages/plugin-rsc/CHANGELOG.md +++ b/packages/plugin-rsc/CHANGELOG.md @@ -1,3 +1,10 @@ +## [0.4.19](https://github.com/vitejs/vite-plugin-react/compare/plugin-rsc@0.4.18...plugin-rsc@0.4.19) (2025-08-11) +### Bug Fixes + +* **rsc:** fix cjs default import on module runner ([#695](https://github.com/vitejs/vite-plugin-react/issues/695)) ([c329914](https://github.com/vitejs/vite-plugin-react/commit/c329914c572473d4f09261fa0eba77484e720d2e)) +* **rsc:** replace `?v=` check with more robust `node_modules` detection ([#696](https://github.com/vitejs/vite-plugin-react/issues/696)) ([f0359c4](https://github.com/vitejs/vite-plugin-react/commit/f0359c4eca48ca6eb2ba98254a272949a13f149e)) +* **rsc:** replace non-optimized server cjs warning with debug only log ([#698](https://github.com/vitejs/vite-plugin-react/issues/698)) ([a88fb2d](https://github.com/vitejs/vite-plugin-react/commit/a88fb2ded4c8b9f42f2fee70a482615f331122f4)) + ## [0.4.18](https://github.com/vitejs/vite-plugin-react/compare/plugin-rsc@0.4.17...plugin-rsc@0.4.18) (2025-08-11) ### Bug Fixes diff --git a/packages/plugin-rsc/package.json b/packages/plugin-rsc/package.json index 84438fa15..054b53282 100644 --- a/packages/plugin-rsc/package.json +++ b/packages/plugin-rsc/package.json @@ -1,6 +1,6 @@ { "name": "@vitejs/plugin-rsc", - "version": "0.4.18", + "version": "0.4.19", "description": "React Server Components (RSC) support for Vite.", "keywords": [ "vite", From a1f4311f87d0f983b8332ab393514e0d71263374 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 11 Aug 2025 18:28:53 +0900 Subject: [PATCH 188/313] refactor: move @vitejs/plugin-rsc to devDependencies in examples (#699) Co-authored-by: Claude --- .../plugin-rsc/examples/basic/package.json | 8 ++-- .../examples/browser-mode/package.json | 2 +- packages/plugin-rsc/examples/e2e/package.json | 2 +- .../plugin-rsc/examples/no-ssr/package.json | 2 +- .../examples/react-router/package.json | 2 +- packages/plugin-rsc/examples/ssg/package.json | 2 +- .../examples/starter-cf-single/package.json | 4 +- .../plugin-rsc/examples/starter/package.json | 2 +- pnpm-lock.yaml | 42 +++++++++---------- 9 files changed, 33 insertions(+), 33 deletions(-) diff --git a/packages/plugin-rsc/examples/basic/package.json b/packages/plugin-rsc/examples/basic/package.json index 9bc8dddcb..c3603880a 100644 --- a/packages/plugin-rsc/examples/basic/package.json +++ b/packages/plugin-rsc/examples/basic/package.json @@ -12,7 +12,6 @@ "cf-release": "wrangler deploy" }, "dependencies": { - "@vitejs/plugin-rsc": "latest", "react": "^19.1.1", "react-dom": "^19.1.1" }, @@ -21,13 +20,14 @@ "@types/react": "^19.1.9", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "latest", - "@vitejs/test-dep-transitive-cjs": "file:./test-dep/transitive-cjs", - "@vitejs/test-dep-transitive-use-sync-external-store": "file:./test-dep/transitive-use-sync-external-store", + "@vitejs/plugin-rsc": "latest", "@vitejs/test-dep-client-in-server": "file:./test-dep/client-in-server", "@vitejs/test-dep-client-in-server2": "file:./test-dep/client-in-server2", + "@vitejs/test-dep-css-in-server": "file:./test-dep/css-in-server", "@vitejs/test-dep-server-in-client": "file:./test-dep/server-in-client", "@vitejs/test-dep-server-in-server": "file:./test-dep/server-in-server", - "@vitejs/test-dep-css-in-server": "file:./test-dep/css-in-server", + "@vitejs/test-dep-transitive-cjs": "file:./test-dep/transitive-cjs", + "@vitejs/test-dep-transitive-use-sync-external-store": "file:./test-dep/transitive-use-sync-external-store", "rsc-html-stream": "^0.0.7", "tailwindcss": "^4.1.11", "vite": "^7.1.1", diff --git a/packages/plugin-rsc/examples/browser-mode/package.json b/packages/plugin-rsc/examples/browser-mode/package.json index efcd2bada..dfe3f5f07 100644 --- a/packages/plugin-rsc/examples/browser-mode/package.json +++ b/packages/plugin-rsc/examples/browser-mode/package.json @@ -10,7 +10,6 @@ "preview": "false && vite preview" }, "dependencies": { - "@vitejs/plugin-rsc": "latest", "react": "^19.1.1", "react-dom": "^19.1.1" }, @@ -18,6 +17,7 @@ "@types/react": "^19.1.9", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "latest", + "@vitejs/plugin-rsc": "latest", "vite": "^7.1.1" } } diff --git a/packages/plugin-rsc/examples/e2e/package.json b/packages/plugin-rsc/examples/e2e/package.json index 314068f26..0ef6d6d95 100644 --- a/packages/plugin-rsc/examples/e2e/package.json +++ b/packages/plugin-rsc/examples/e2e/package.json @@ -3,8 +3,8 @@ "private": true, "type": "module", "devDependencies": { - "@vitejs/plugin-rsc": "latest", "@vitejs/plugin-react": "latest", + "@vitejs/plugin-rsc": "latest", "babel-plugin-react-compiler": "19.1.0-rc.2" } } diff --git a/packages/plugin-rsc/examples/no-ssr/package.json b/packages/plugin-rsc/examples/no-ssr/package.json index 972f98240..322fa0ffa 100644 --- a/packages/plugin-rsc/examples/no-ssr/package.json +++ b/packages/plugin-rsc/examples/no-ssr/package.json @@ -10,7 +10,6 @@ "preview": "vite preview" }, "dependencies": { - "@vitejs/plugin-rsc": "latest", "react": "^19.1.1", "react-dom": "^19.1.1" }, @@ -18,6 +17,7 @@ "@types/react": "^19.1.9", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "latest", + "@vitejs/plugin-rsc": "latest", "vite": "^7.1.1" } } diff --git a/packages/plugin-rsc/examples/react-router/package.json b/packages/plugin-rsc/examples/react-router/package.json index 2ffce42ed..464662f3b 100644 --- a/packages/plugin-rsc/examples/react-router/package.json +++ b/packages/plugin-rsc/examples/react-router/package.json @@ -13,7 +13,6 @@ "cf-release": "wrangler deploy -c dist/rsc/wrangler.json && wrangler deploy" }, "dependencies": { - "@vitejs/plugin-rsc": "latest", "react": "^19.1.1", "react-dom": "^19.1.1", "react-router": "7.7.0" @@ -26,6 +25,7 @@ "@types/react": "^19.1.9", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "latest", + "@vitejs/plugin-rsc": "latest", "tailwindcss": "^4.1.11", "vite": "^7.1.1", "vite-plugin-inspect": "^11.3.2", diff --git a/packages/plugin-rsc/examples/ssg/package.json b/packages/plugin-rsc/examples/ssg/package.json index 476eaa626..993320321 100644 --- a/packages/plugin-rsc/examples/ssg/package.json +++ b/packages/plugin-rsc/examples/ssg/package.json @@ -10,7 +10,6 @@ "preview": "vite preview" }, "dependencies": { - "@vitejs/plugin-rsc": "latest", "react": "^19.1.1", "react-dom": "^19.1.1" }, @@ -19,6 +18,7 @@ "@types/react": "^19.1.9", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "latest", + "@vitejs/plugin-rsc": "latest", "vite-plugin-inspect": "^11.3.2" } } diff --git a/packages/plugin-rsc/examples/starter-cf-single/package.json b/packages/plugin-rsc/examples/starter-cf-single/package.json index d00cae9e2..6e7da4530 100644 --- a/packages/plugin-rsc/examples/starter-cf-single/package.json +++ b/packages/plugin-rsc/examples/starter-cf-single/package.json @@ -11,7 +11,6 @@ "release": "wrangler deploy" }, "dependencies": { - "@vitejs/plugin-rsc": "latest", "react": "^19.1.1", "react-dom": "^19.1.1" }, @@ -19,6 +18,7 @@ "@cloudflare/vite-plugin": "^1.11.2", "@types/react": "^19.1.9", "@types/react-dom": "^19.1.7", - "@vitejs/plugin-react": "latest" + "@vitejs/plugin-react": "latest", + "@vitejs/plugin-rsc": "latest" } } diff --git a/packages/plugin-rsc/examples/starter/package.json b/packages/plugin-rsc/examples/starter/package.json index b0d7c82fe..4087db393 100644 --- a/packages/plugin-rsc/examples/starter/package.json +++ b/packages/plugin-rsc/examples/starter/package.json @@ -10,7 +10,6 @@ "preview": "vite preview" }, "dependencies": { - "@vitejs/plugin-rsc": "latest", "react": "^19.1.1", "react-dom": "^19.1.1" }, @@ -18,6 +17,7 @@ "@types/react": "^19.1.9", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "latest", + "@vitejs/plugin-rsc": "latest", "rsc-html-stream": "^0.0.7", "vite": "^7.1.1", "vite-plugin-inspect": "^11.3.2" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 00d499311..ed7386735 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -508,9 +508,6 @@ importers: packages/plugin-rsc/examples/basic: dependencies: - '@vitejs/plugin-rsc': - specifier: latest - version: link:../.. react: specifier: ^19.1.1 version: 19.1.1 @@ -530,6 +527,9 @@ importers: '@vitejs/plugin-react': specifier: latest version: link:../../../plugin-react + '@vitejs/plugin-rsc': + specifier: latest + version: link:../.. '@vitejs/test-dep-client-in-server': specifier: file:./test-dep/client-in-server version: file:packages/plugin-rsc/examples/basic/test-dep/client-in-server(react@19.1.1) @@ -569,9 +569,6 @@ importers: packages/plugin-rsc/examples/browser-mode: dependencies: - '@vitejs/plugin-rsc': - specifier: latest - version: link:../.. react: specifier: ^19.1.1 version: 19.1.1 @@ -588,6 +585,9 @@ importers: '@vitejs/plugin-react': specifier: latest version: link:../../../plugin-react + '@vitejs/plugin-rsc': + specifier: latest + version: link:../.. vite: specifier: ^7.1.1 version: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) @@ -606,9 +606,6 @@ importers: packages/plugin-rsc/examples/no-ssr: dependencies: - '@vitejs/plugin-rsc': - specifier: latest - version: link:../.. react: specifier: ^19.1.1 version: 19.1.1 @@ -625,15 +622,15 @@ importers: '@vitejs/plugin-react': specifier: latest version: link:../../../plugin-react + '@vitejs/plugin-rsc': + specifier: latest + version: link:../.. vite: specifier: ^7.1.1 version: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) packages/plugin-rsc/examples/react-router: dependencies: - '@vitejs/plugin-rsc': - specifier: latest - version: link:../.. react: specifier: ^19.1.1 version: 19.1.1 @@ -665,6 +662,9 @@ importers: '@vitejs/plugin-react': specifier: latest version: link:../../../plugin-react + '@vitejs/plugin-rsc': + specifier: latest + version: link:../.. tailwindcss: specifier: ^4.1.11 version: 4.1.11 @@ -680,9 +680,6 @@ importers: packages/plugin-rsc/examples/ssg: dependencies: - '@vitejs/plugin-rsc': - specifier: latest - version: link:../.. react: specifier: ^19.1.1 version: 19.1.1 @@ -702,15 +699,15 @@ importers: '@vitejs/plugin-react': specifier: latest version: link:../../../plugin-react + '@vitejs/plugin-rsc': + specifier: latest + version: link:../.. vite-plugin-inspect: specifier: ^11.3.2 version: 11.3.2(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) packages/plugin-rsc/examples/starter: dependencies: - '@vitejs/plugin-rsc': - specifier: latest - version: link:../.. react: specifier: ^19.1.1 version: 19.1.1 @@ -727,6 +724,9 @@ importers: '@vitejs/plugin-react': specifier: latest version: link:../../../plugin-react + '@vitejs/plugin-rsc': + specifier: latest + version: link:../.. rsc-html-stream: specifier: ^0.0.7 version: 0.0.7 @@ -739,9 +739,6 @@ importers: packages/plugin-rsc/examples/starter-cf-single: dependencies: - '@vitejs/plugin-rsc': - specifier: latest - version: link:../.. react: specifier: ^19.1.1 version: 19.1.1 @@ -761,6 +758,9 @@ importers: '@vitejs/plugin-react': specifier: latest version: link:../../../plugin-react + '@vitejs/plugin-rsc': + specifier: latest + version: link:../.. playground: devDependencies: From 3114e88bcd8303d7c42da29eb7215c54ed43ce0d Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Tue, 12 Aug 2025 14:47:51 +0900 Subject: [PATCH 189/313] fix(rsc): remove duplicate server css on initial render (#702) --- packages/plugin-rsc/e2e/basic.test.ts | 17 ++++++ ...{test.css => test-style-server-manual.css} | 0 .../basic/src/routes/style-server/server.tsx | 2 +- packages/plugin-rsc/src/plugin.ts | 55 +++++++++++++++++-- 4 files changed, 69 insertions(+), 5 deletions(-) rename packages/plugin-rsc/examples/basic/public/{test.css => test-style-server-manual.css} (100%) diff --git a/packages/plugin-rsc/e2e/basic.test.ts b/packages/plugin-rsc/e2e/basic.test.ts index 5cf1c21f2..3860cf807 100644 --- a/packages/plugin-rsc/e2e/basic.test.ts +++ b/packages/plugin-rsc/e2e/basic.test.ts @@ -473,6 +473,22 @@ function defineTest(f: Fixture) { 'color', 'rgb(255, 165, 0)', ) + await expectNoDuplicateServerCss(page) + }) + + async function expectNoDuplicateServerCss(page: Page) { + // check only manually inserted stylesheet link exists + // (toHaveAttribute passes only when locator matches single element) + await expect(page.locator('link[rel="stylesheet"]')).toHaveAttribute( + 'href', + '/test-style-server-manual.css', + ) + } + + test('no duplicate server css', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await expectNoDuplicateServerCss(page) }) test('adding/removing css client @js', async ({ page }) => { @@ -557,6 +573,7 @@ function defineTest(f: Fixture) { 'color', 'rgb(255, 165, 0)', ) + await expectNoDuplicateServerCss(page) }) // TODO: need a way to add/remove links on server hmr. for now, it requires a manually reload. diff --git a/packages/plugin-rsc/examples/basic/public/test.css b/packages/plugin-rsc/examples/basic/public/test-style-server-manual.css similarity index 100% rename from packages/plugin-rsc/examples/basic/public/test.css rename to packages/plugin-rsc/examples/basic/public/test-style-server-manual.css diff --git a/packages/plugin-rsc/examples/basic/src/routes/style-server/server.tsx b/packages/plugin-rsc/examples/basic/src/routes/style-server/server.tsx index 661669924..4a6e2180d 100644 --- a/packages/plugin-rsc/examples/basic/src/routes/style-server/server.tsx +++ b/packages/plugin-rsc/examples/basic/src/routes/style-server/server.tsx @@ -10,7 +10,7 @@ export function TestStyleServer() {
test-style-server-manual
diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index 1181c7d1e..71fc7c00f 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -837,7 +837,8 @@ window.__vite_plugin_react_preamble_installed__ = true; const resolvedEntry = await this.resolve(source) assert(resolvedEntry, `[vite-rsc] failed to resolve entry '${source}'`) code += `await import(${JSON.stringify(resolvedEntry.id)});` - // TODO: this doesn't have to wait for "vite:beforeUpdate" and should do it right after browser css import. + // server css is normally removed via `RemoveDuplicateServerCss` on useEffect. + // this also makes sure they are removed on hmr in case initial rendering failed. code += /* js */ ` const ssrCss = document.querySelectorAll("link[rel='stylesheet']"); import.meta.hot.on("vite:beforeUpdate", () => { @@ -1910,6 +1911,36 @@ export function vitePluginRscCss( } }, }, + createVirtualPlugin( + 'vite-rsc/remove-duplicate-server-css', + async function () { + // Remove duplicate css during dev due to server rendered and client inline + + + + + + )} +
test-css-url-client
+
test-css-inline-client
+
test-css-raw-client
+ + ) +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/css-queries/server-inline.css b/packages/plugin-rsc/examples/basic/src/routes/css-queries/server-inline.css new file mode 100644 index 000000000..4f007865a --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/css-queries/server-inline.css @@ -0,0 +1,3 @@ +.test-css-inline-server { + color: rgb(0, 255, 50); +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/css-queries/server-raw.css b/packages/plugin-rsc/examples/basic/src/routes/css-queries/server-raw.css new file mode 100644 index 000000000..c7cdd3a57 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/css-queries/server-raw.css @@ -0,0 +1,3 @@ +.test-css-raw-server { + color: rgb(0, 255, 0); +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/css-queries/server-url.css b/packages/plugin-rsc/examples/basic/src/routes/css-queries/server-url.css new file mode 100644 index 000000000..167620c4b --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/css-queries/server-url.css @@ -0,0 +1,3 @@ +.test-css-url-server { + color: rgb(0, 255, 100); +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/css-queries/server.tsx b/packages/plugin-rsc/examples/basic/src/routes/css-queries/server.tsx new file mode 100644 index 000000000..5b3e1c2b6 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/css-queries/server.tsx @@ -0,0 +1,21 @@ +import cssUrl from './server-url.css?url' +import cssInline from './server-inline.css?inline' +import cssRaw from './server-raw.css?raw' +import { TestCssQueriesClient } from './client' + +export function TestCssQueries() { + return ( +
+ +
+
test-css-url-server
+
test-css-inline-server
+
test-css-raw-server
+
+
+ ) +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/root.tsx b/packages/plugin-rsc/examples/basic/src/routes/root.tsx index 41d73ace8..04b74343c 100644 --- a/packages/plugin-rsc/examples/basic/src/routes/root.tsx +++ b/packages/plugin-rsc/examples/basic/src/routes/root.tsx @@ -35,6 +35,7 @@ import TestDepCssInServer from '@vitejs/test-dep-css-in-server/server' import { TestHmrSharedServer } from './hmr-shared/server' import { TestHmrSharedClient } from './hmr-shared/client' import { TestHmrSharedAtomic } from './hmr-shared/atomic/server' +import { TestCssQueries } from './css-queries/server' export function Root(props: { url: URL }) { return ( @@ -83,6 +84,7 @@ export function Root(props: { url: URL }) { + ) diff --git a/packages/plugin-rsc/examples/basic/src/server.tsx b/packages/plugin-rsc/examples/basic/src/server.tsx index e4ba468da..27808ff17 100644 --- a/packages/plugin-rsc/examples/basic/src/server.tsx +++ b/packages/plugin-rsc/examples/basic/src/server.tsx @@ -26,7 +26,7 @@ export default async function handler(request: Request): Promise { `default-src 'self';`, // `unsafe-eval` is required during dev since React uses eval for findSourceMapURL feature `script-src 'self' 'nonce-${nonce}' ${import.meta.env.DEV ? `'unsafe-eval'` : ``};`, - `style-src 'self' 'nonce-${nonce}';`, + `style-src 'self' 'unsafe-inline';`, // allow blob: worker for Vite server ping shared worker import.meta.hot && `worker-src 'self' blob:;`, ] diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index 68fdcce83..acdf6ab87 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -1664,6 +1664,10 @@ export async function findSourceMapURL( export function vitePluginRscCss( rscCssOptions?: Pick, ): Plugin[] { + function hasSpecialCssQuery(id: string): boolean { + return /[?&](url|inline|raw)(\b|=|&|$)/.test(id) + } + function collectCss(environment: DevEnvironment, entryId: string) { const visited = new Set() const cssIds = new Set() @@ -1681,6 +1685,9 @@ export function vitePluginRscCss( for (const next of mod?.importedModules ?? []) { if (next.id) { if (isCSSRequest(next.id)) { + if (hasSpecialCssQuery(next.id)) { + continue + } cssIds.add(next.id) } else { recurse(next.id) From d33f37db05b4f3fbd4e9ed4a1b0405274f1af478 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Fri, 15 Aug 2025 13:03:26 +0900 Subject: [PATCH 203/313] refactor(react): simplify rolldown-vite only plugins (#720) --- packages/plugin-react/src/index.ts | 70 ++++++++++++++++-------------- 1 file changed, 37 insertions(+), 33 deletions(-) diff --git a/packages/plugin-react/src/index.ts b/packages/plugin-react/src/index.ts index 6700f5982..b111c5be1 100644 --- a/packages/plugin-react/src/index.ts +++ b/packages/plugin-react/src/index.ts @@ -340,43 +340,43 @@ export default function viteReact(opts: Options = {}): Plugin[] { }, } + // for rolldown-vite const viteRefreshWrapper: Plugin = { name: 'vite:react:refresh-wrapper', apply: 'serve', - transform: isRolldownVite - ? { - filter: { - id: { - include: makeIdFiltersToMatchWithQuery(include), - exclude: makeIdFiltersToMatchWithQuery(exclude), - }, - }, - handler(code, id, options) { - const ssr = options?.ssr === true - - const [filepath] = id.split('?') - const isJSX = filepath.endsWith('x') - const useFastRefresh = - !skipFastRefresh && - !ssr && - (isJSX || - code.includes(jsxImportDevRuntime) || - code.includes(jsxImportRuntime)) - if (!useFastRefresh) return - - const { code: newCode } = addRefreshWrapper( - code, - avoidSourceMapOption, - '@vitejs/plugin-react', - id, - opts.reactRefreshHost, - ) - return { code: newCode, map: null } - }, - } - : undefined, + transform: { + filter: { + id: { + include: makeIdFiltersToMatchWithQuery(include), + exclude: makeIdFiltersToMatchWithQuery(exclude), + }, + }, + handler(code, id, options) { + const ssr = options?.ssr === true + + const [filepath] = id.split('?') + const isJSX = filepath.endsWith('x') + const useFastRefresh = + !skipFastRefresh && + !ssr && + (isJSX || + code.includes(jsxImportDevRuntime) || + code.includes(jsxImportRuntime)) + if (!useFastRefresh) return + + const { code: newCode } = addRefreshWrapper( + code, + avoidSourceMapOption, + '@vitejs/plugin-react', + id, + opts.reactRefreshHost, + ) + return { code: newCode, map: null } + }, + }, } + // for rolldown-vite const viteConfigPost: Plugin = { name: 'vite:react:config-post', enforce: 'post', @@ -449,7 +449,11 @@ export default function viteReact(opts: Options = {}): Plugin[] { }, } - return [viteBabel, viteRefreshWrapper, viteConfigPost, viteReactRefresh] + return [ + viteBabel, + ...(isRolldownVite ? [viteRefreshWrapper, viteConfigPost] : []), + viteReactRefresh, + ] } viteReact.preambleCode = preambleCode From a39d8375cd0da1bd1e608894124bc7bfbffe6fa9 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Fri, 15 Aug 2025 13:55:47 +0900 Subject: [PATCH 204/313] test(rsc): fix invalid code (#722) --- .../src/transforms/wrap-export.test.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/plugin-rsc/src/transforms/wrap-export.test.ts b/packages/plugin-rsc/src/transforms/wrap-export.test.ts index 1382e53c3..008a2b474 100644 --- a/packages/plugin-rsc/src/transforms/wrap-export.test.ts +++ b/packages/plugin-rsc/src/transforms/wrap-export.test.ts @@ -227,7 +227,6 @@ export const a = 0; export const b = function() {} export const c = () => {} export default function d() {} -export default () => {} ` const result = await testTransform(input, { filter: (_name, meta) => !!(meta.isFunction && meta.declName), @@ -238,7 +237,6 @@ export default () => {} let b = function() {} let c = () => {} function d() {} - const $$default = () => {} export { a }; b = /* #__PURE__ */ $$wrap(b, "", "b"); export { b }; @@ -247,6 +245,21 @@ export default () => {} ; const $$wrap_d = /* #__PURE__ */ $$wrap(d, "", "default"); export { $$wrap_d as default }; + " + `) + }) + + test('filter meta 2', async () => { + const input = ` +export default () => {} +` + const result = await testTransform(input, { + filter: (_name, meta) => !!(meta.isFunction && meta.declName), + }) + expect(result).toMatchInlineSnapshot(` + " + const $$default = () => {} + ; export { $$default as default }; " `) From e6d7392f4c2b052db6ba719217641099cfa8f817 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sat, 16 Aug 2025 10:39:22 +0900 Subject: [PATCH 205/313] docs(rsc): improve plugin-rsc README organization and clarity (#723) Co-authored-by: Claude --- packages/plugin-rsc/README.md | 106 ++++++++++++++++++---------------- 1 file changed, 56 insertions(+), 50 deletions(-) diff --git a/packages/plugin-rsc/README.md b/packages/plugin-rsc/README.md index acc1bc5e8..f4fcc44de 100644 --- a/packages/plugin-rsc/README.md +++ b/packages/plugin-rsc/README.md @@ -4,10 +4,10 @@ This package provides [React Server Components](https://react.dev/reference/rsc/ ## Features -- **Framework-less RSC experience**: The plugin implements [RSC conventions](https://react.dev/reference/rsc/server-components) and provides low level `react-server-dom` runtime API without framework-specific abstractions. -- **CSS support**: CSS is automatically code-split both at client and server components and they are injected upon rendering. +- **Framework-agnostic**: The plugin implements [RSC bundler features](https://react.dev/reference/rsc/server-components) and provides low level RSC runtime (`react-server-dom`) API without framework-specific abstractions. +- **Runtime-agnostic**: Built on [Vite environment API](https://vite.dev/guide/api-environment.html) and works with other runtimes (e.g., [`@cloudflare/vite-plugin`](https://github.com/cloudflare/workers-sdk/tree/main/packages/vite-plugin-cloudflare)). - **HMR support**: Enables editing both client and server components without full page reloads. -- **Runtime agnostic**: Built on [Vite environment API](https://vite.dev/guide/api-environment.html) and works with other runtimes (e.g., [`@cloudflare/vite-plugin`](https://github.com/cloudflare/workers-sdk/tree/main/packages/vite-plugin-cloudflare)). +- **CSS support**: CSS is automatically code-split both at client and server components and they are injected upon rendering. ## Getting Started @@ -19,14 +19,17 @@ npx degit vitejs/vite-plugin-react/packages/plugin-rsc/examples/starter my-app ## Examples -- [`./examples/starter`](./examples/starter) - - This example provides an in-depth overview of API with inline comments to explain how they function within RSC-powered React application. -- [`./examples/react-router`](./examples/react-router) - - This demonstrates how to integrate [experimental React Router RSC API](https://remix.run/blog/rsc-preview). React Router now provides [official RSC support](https://reactrouter.com/how-to/react-server-components), so it's recommended to follow React Router's official documentation for the latest integration. -- [`./examples/basic`](./examples/basic) - - This is mainly used for e2e testing and include various advanced RSC usages (e.g. `"use cache"` example). -- [`./examples/ssg`](./examples/ssg) - - Static site generation (SSG) example with MDX and client components for interactivity. +**Start here:** [`./examples/starter`](./examples/starter) - Recommended for understanding the plugin + +- Provides an in-depth overview of API with inline comments to explain how they function within RSC-powered React application. + +**Integration examples:** + +- [`./examples/basic`](./examples/basic) - Advanced RSC features and testing + - This is mainly used for e2e testing and includes various advanced RSC usages (e.g. `"use cache"` example). +- [`./examples/ssg`](./examples/ssg) - Static site generation with MDX and client components for interactivity. +- [`./examples/react-router`](./examples/react-router) - React Router RSC integration + - Demonstrates how to integrate [experimental React Router RSC API](https://remix.run/blog/rsc-preview). React Router now provides [official RSC support](https://reactrouter.com/how-to/react-server-components), so it's recommended to follow React Router's official documentation for the latest integration. ## Basic Concepts @@ -132,7 +135,7 @@ import * as ReactServer from '@vitejs/plugin-rsc/rsc' // re-export of react-serv // the plugin assumes `rsc` entry having default export of request handler export default async function handler(request: Request): Promise { - // serialization React VDOM to RSC stream + // serialize React VDOM to RSC stream const root = ( @@ -193,51 +196,26 @@ export async function handleSsr(rscStream: ReadableStream) { - [`entry.browser.tsx`](./examples/starter/src/framework/entry.browser.tsx) ```tsx -import * as ReactClient from "@vitejs/plugin-rsc/browser"; // re-export of react-server-dom/client.browser -import * as ReactDOMClient from "react-dom/client"; +import * as ReactClient from '@vitejs/plugin-rsc/browser' // re-export of react-server-dom/client.browser +import * as ReactDOMClient from 'react-dom/client' async function main() { // fetch and deserialize RSC stream back to React VDOM - const rscResponse = await fetch(window.location.href + ".rsc); - const root = await ReactClient.createFromReadableStream(rscResponse.body); + const rscResponse = await fetch(window.location.href + '.rsc') + const root = await ReactClient.createFromReadableStream(rscResponse.body) // hydration (traditional CSR) - ReactDOMClient.hydrateRoot(document, root); + ReactDOMClient.hydrateRoot(document, root) } -main(); +main() ``` -## `react-server-dom` API - -### `@vitejs/plugin-rsc/rsc` - -This module re-exports RSC runtime API provided by `react-server-dom/server.edge` and `react-server-dom/client.edge` such as: - -- `renderToReadableStream`: RSC serialization (React VDOM -> RSC stream) -- `createFromReadableStream`: RSC deserialization (RSC stream -> React VDOM). This is also available on rsc environment itself. For example, it allows saving serailized RSC and deserializing it for later use. -- `decodeAction/decodeReply/decodeFormState/loadServerAction/createTemporaryReferenceSet` -- `encodeReply/createClientTemporaryReferenceSet` - -### `@vitejs/plugin-rsc/ssr` - -This module re-exports RSC runtime API provided by `react-server-dom/client.edge` - -- `createFromReadableStream`: RSC deserialization (RSC stream -> React VDOM) - -### `@vitejs/plugin-rsc/browser` - -This module re-exports RSC runtime API provided by `react-server-dom/client.browser` - -- `createFromReadableStream`: RSC deserialization (RSC stream -> React VDOM) -- `createFromFetch`: a robust way of `createFromReadableStream((await fetch("...")).body)` -- `encodeReply/setServerCallback`: server function related... - ## Environment helper API The plugin provides an additional helper for multi environment interaction. -### available on `rsc` or `ssr` environment +### Available on `rsc` or `ssr` environment #### `import.meta.viteRsc.loadModule` @@ -260,7 +238,7 @@ ssrModule.renderHTML(...); export function renderHTML(...) {} ``` -### available on `rsc` environment +### Available on `rsc` environment #### `import.meta.viteRsc.loadCss` @@ -287,7 +265,7 @@ export function ServerPage() { } ``` -Where specifying `loadCss()`, it will collect css through the server module resolved by ``. +When specifying `loadCss()`, it will collect css through the server module resolved by ``. ```tsx // virtual:my-framework-helper @@ -324,7 +302,7 @@ export function Page(props) { return
...
} -// my-route.css?vite-rsc-css-export=Page +// my-route.tsx?vite-rsc-css-export=Page function Page(props) { return
...
} @@ -341,14 +319,13 @@ function __Page(props) { export { __Page as Page } ``` -### available on `ssr` environment +### Available on `ssr` environment #### `import.meta.viteRsc.loadBootstrapScriptContent("index")` This provides a raw js code to execute a browser entry file specified by `environments.client.build.rollupOptions.input.index`. This is intended to be used with React DOM SSR API, such as [`renderToReadableStream`](https://react.dev/reference/react-dom/server/renderToReadableStream) ```js -import bootstrapScriptContent from 'virtual:vite-rsc/bootstrap-script-content' import { renderToReadableStream } from 'react-dom/server.edge' const bootstrapScriptContent = @@ -358,7 +335,7 @@ const htmlStream = await renderToReadableStream(reactNode, { }) ``` -### available on `client` environment +### Available on `client` environment #### `rsc:update` event @@ -420,6 +397,31 @@ export default defineConfig({ }) ``` +## RSC runtime (react-server-dom) API + +### `@vitejs/plugin-rsc/rsc` + +This module re-exports RSC runtime API provided by `react-server-dom/server.edge` and `react-server-dom/client.edge` such as: + +- `renderToReadableStream`: RSC serialization (React VDOM -> RSC stream) +- `createFromReadableStream`: RSC deserialization (RSC stream -> React VDOM). This is also available on rsc environment itself. For example, it allows saving serialized RSC and deserializing it for later use. +- `decodeAction/decodeReply/decodeFormState/loadServerAction/createTemporaryReferenceSet` +- `encodeReply/createClientTemporaryReferenceSet` + +### `@vitejs/plugin-rsc/ssr` + +This module re-exports RSC runtime API provided by `react-server-dom/client.edge` + +- `createFromReadableStream`: RSC deserialization (RSC stream -> React VDOM) + +### `@vitejs/plugin-rsc/browser` + +This module re-exports RSC runtime API provided by `react-server-dom/client.browser` + +- `createFromReadableStream`: RSC deserialization (RSC stream -> React VDOM) +- `createFromFetch`: a robust way of `createFromReadableStream((await fetch("...")).body)` +- `encodeReply/setServerCallback`: server function related... + ## High level API > [!NOTE] @@ -473,6 +475,10 @@ export function Page() { } ``` +## Canary and Experimental channel releases + +See https://github.com/vitejs/vite-plugin-react/pull/524 for how to install the package for React [canary](https://react.dev/community/versioning-policy#canary-channel) and [experimental](https://react.dev/community/versioning-policy#all-release-channels) usages. + ## Credits This project builds on fundamental techniques and insights from pioneering Vite RSC implementations. From 1abe044668a13d55ea5549c558f666baa6196f15 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sat, 16 Aug 2025 10:56:31 +0900 Subject: [PATCH 206/313] chore(rsc): fix `examples/basic` on stackblitz (#724) --- packages/plugin-rsc/examples/basic/package.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/plugin-rsc/examples/basic/package.json b/packages/plugin-rsc/examples/basic/package.json index c3603880a..1dda6bb20 100644 --- a/packages/plugin-rsc/examples/basic/package.json +++ b/packages/plugin-rsc/examples/basic/package.json @@ -33,5 +33,9 @@ "vite": "^7.1.1", "vite-plugin-inspect": "^11.3.2", "wrangler": "^4.28.1" + }, + "stackblitz": { + "installDependencies": false, + "startCommand": "pnpm i && pnpm dev" } } From cc1bcdfce4323119d0d918f72226168abbfadb4f Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sat, 16 Aug 2025 11:20:33 +0900 Subject: [PATCH 207/313] chore(rsc): tweak React.cache example (#725) --- .../basic/src/routes/react-cache/server.tsx | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/packages/plugin-rsc/examples/basic/src/routes/react-cache/server.tsx b/packages/plugin-rsc/examples/basic/src/routes/react-cache/server.tsx index d977a7a76..12733af46 100644 --- a/packages/plugin-rsc/examples/basic/src/routes/react-cache/server.tsx +++ b/packages/plugin-rsc/examples/basic/src/routes/react-cache/server.tsx @@ -6,14 +6,12 @@ import React from 'react' export async function TestReactCache(props: { url: URL }) { if (props.url.searchParams.has('test-react-cache')) { - await Promise.all([ - testCacheFn('test1'), - testCacheFn('test2'), - testCacheFn('test1'), - testNonCacheFn('test1'), - testNonCacheFn('test2'), - testNonCacheFn('test1'), - ]) + await testCacheFn('test1') + await testCacheFn('test2') + await testCacheFn('test1') + await testNonCacheFn('test1') + await testNonCacheFn('test2') + await testNonCacheFn('test1') } else { cacheFnCount = 0 nonCacheFnCount = 0 From 74ec0e0e0e21355884b0aff26ca0919404cef3f2 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sat, 16 Aug 2025 14:32:58 +0900 Subject: [PATCH 208/313] fix(rsc): keep `import.meta.glob` during scan build for rolldown-vite (#721) --- .../basic/src/routes/import-meta-glob/dep.tsx | 3 ++ .../src/routes/import-meta-glob/server.tsx | 4 ++ .../examples/basic/src/routes/root.tsx | 2 + .../plugin-rsc/examples/basic/vite.config.ts | 33 +++++++++++++++ packages/plugin-rsc/src/plugin.ts | 12 +++--- packages/plugin-rsc/src/plugins/scan.test.ts | 25 +++++++++++ packages/plugin-rsc/src/plugins/scan.ts | 41 +++++++++++++++++++ 7 files changed, 113 insertions(+), 7 deletions(-) create mode 100644 packages/plugin-rsc/examples/basic/src/routes/import-meta-glob/dep.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/import-meta-glob/server.tsx create mode 100644 packages/plugin-rsc/src/plugins/scan.test.ts create mode 100644 packages/plugin-rsc/src/plugins/scan.ts diff --git a/packages/plugin-rsc/examples/basic/src/routes/import-meta-glob/dep.tsx b/packages/plugin-rsc/examples/basic/src/routes/import-meta-glob/dep.tsx new file mode 100644 index 000000000..e6d3de7ef --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/import-meta-glob/dep.tsx @@ -0,0 +1,3 @@ +export default function Dep() { + return <>test-import-meta-glob +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/import-meta-glob/server.tsx b/packages/plugin-rsc/examples/basic/src/routes/import-meta-glob/server.tsx new file mode 100644 index 000000000..a9ec558a2 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/import-meta-glob/server.tsx @@ -0,0 +1,4 @@ +export async function TestImportMetaGlob() { + const mod: any = await Object.values(import.meta.glob('./dep.tsx'))[0]() + return +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/root.tsx b/packages/plugin-rsc/examples/basic/src/routes/root.tsx index 04b74343c..70e6e0112 100644 --- a/packages/plugin-rsc/examples/basic/src/routes/root.tsx +++ b/packages/plugin-rsc/examples/basic/src/routes/root.tsx @@ -36,6 +36,7 @@ import { TestHmrSharedServer } from './hmr-shared/server' import { TestHmrSharedClient } from './hmr-shared/client' import { TestHmrSharedAtomic } from './hmr-shared/atomic/server' import { TestCssQueries } from './css-queries/server' +import { TestImportMetaGlob } from './import-meta-glob/server' export function Root(props: { url: URL }) { return ( @@ -85,6 +86,7 @@ export function Root(props: { url: URL }) { + ) diff --git a/packages/plugin-rsc/examples/basic/vite.config.ts b/packages/plugin-rsc/examples/basic/vite.config.ts index 258a0e3ef..b6d3cc084 100644 --- a/packages/plugin-rsc/examples/basic/vite.config.ts +++ b/packages/plugin-rsc/examples/basic/vite.config.ts @@ -131,6 +131,7 @@ export default { fetch: handler }; } }, }, + testScanPlugin(), ], build: { minify: false, @@ -158,6 +159,38 @@ export default { fetch: handler }; }, }) as any +function testScanPlugin(): Plugin[] { + const moduleIds: { name: string; ids: string[] }[] = [] + return [ + { + name: 'test-scan', + apply: 'build', + buildEnd() { + moduleIds.push({ + name: this.environment.name, + ids: [...this.getModuleIds()], + }) + }, + buildApp: { + order: 'post', + async handler() { + // client scan build discovers additional modules for server references. + const [m1, m2] = moduleIds.filter((m) => m.name === 'rsc') + const diff = m2.ids.filter((id) => !m1.ids.includes(id)) + assert(diff.length > 0) + + // but make sure it's not due to import.meta.glob + // https://github.com/vitejs/rolldown-vite/issues/373 + assert.equal( + diff.find((id) => id.includes('import-meta-glob/dep.tsx')), + undefined, + ) + }, + }, + }, + ] +} + function vitePluginUseCache(): Plugin[] { return [ { diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index acdf6ab87..559ec7d38 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -40,6 +40,7 @@ import { import { cjsModuleRunnerPlugin } from './plugins/cjs' import { evalValue, parseIdQuery } from './plugins/utils' import { createDebug } from '@hiogawa/utils' +import { transformScanBuildStrip } from './plugins/scan' // state for build orchestration let serverReferences: Record = {} @@ -901,19 +902,16 @@ globalThis.AsyncLocalStorage = __viteRscAyncHooks.AsyncLocalStorage; ] } +// During scan build, we strip all code but imports to +// traverse module graph faster and just discover client/server references. function scanBuildStripPlugin(): Plugin { return { name: 'rsc:scan-strip', apply: 'build', enforce: 'post', - transform(code, _id, _options) { + async transform(code, _id, _options) { if (!isScanBuild) return - // During server scan, we strip all code but imports to only discover client/server references. - const [imports] = esModuleLexer.parse(code) - const output = imports - .map((e) => e.n && `import ${JSON.stringify(e.n)};\n`) - .filter(Boolean) - .join('') + const output = await transformScanBuildStrip(code) return { code: output, map: { mappings: '' } } }, } diff --git a/packages/plugin-rsc/src/plugins/scan.test.ts b/packages/plugin-rsc/src/plugins/scan.test.ts new file mode 100644 index 000000000..f56737329 --- /dev/null +++ b/packages/plugin-rsc/src/plugins/scan.test.ts @@ -0,0 +1,25 @@ +import { describe, expect, it } from 'vitest' +import { transformScanBuildStrip } from './scan' + +describe(transformScanBuildStrip, () => { + it('basic', async () => { + const input = `\ +import { a } from "a"; +import "b"; +import(String("c")) +import.meta.glob("d", { + query: "?e", +}) +import.meta.globee("d", { query: "?e" }) +export default "foo"; +` + expect(await transformScanBuildStrip(input)).toMatchInlineSnapshot(` + "import "a"; + import "b"; + console.log(import.meta.glob("d", { + query: "?e", + })); + " + `) + }) +}) diff --git a/packages/plugin-rsc/src/plugins/scan.ts b/packages/plugin-rsc/src/plugins/scan.ts new file mode 100644 index 000000000..bfaa6aaf7 --- /dev/null +++ b/packages/plugin-rsc/src/plugins/scan.ts @@ -0,0 +1,41 @@ +import * as esModuleLexer from 'es-module-lexer' +import { parseAstAsync } from 'vite' +import { walk } from 'estree-walker' + +// https://github.com/vitejs/vite/blob/86d2e8be50be535494734f9f5f5236c61626b308/packages/vite/src/node/plugins/importMetaGlob.ts#L113 +const importGlobRE = /\bimport\.meta\.glob(?:<\w+>)?\s*\(/g + +export async function transformScanBuildStrip(code: string): Promise { + const [imports] = esModuleLexer.parse(code) + let output = imports + .map((e) => e.n && `import ${JSON.stringify(e.n)};\n`) + .filter(Boolean) + .join('') + + // preserve import.meta.glob for rolldown-vite + // https://github.com/vitejs/rolldown-vite/issues/373 + if (importGlobRE.test(code)) { + const ast = await parseAstAsync(code) + walk(ast, { + enter(node) { + if ( + node.type === 'CallExpression' && + node.callee.type === 'MemberExpression' && + node.callee.object.type === 'MetaProperty' && + node.callee.object.meta.type === 'Identifier' && + node.callee.object.meta.name === 'import' && + node.callee.object.property.type === 'Identifier' && + node.callee.object.property.name === 'meta' && + node.callee.property.type === 'Identifier' && + node.callee.property.name === 'glob' + ) { + const importMetaGlob = code.slice(node.start, node.end) + output += `console.log(${importMetaGlob});\n` + } + }, + }) + output += '' + } + + return output +} From ba25233b3afafa20916ad35e4c7f1d3ecda0d0da Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sun, 17 Aug 2025 17:19:20 +0900 Subject: [PATCH 209/313] chore(rsc): use named imports (#727) Co-authored-by: Claude --- packages/plugin-rsc/README.md | 26 +++++++++--------- .../basic/src/framework/entry.browser.tsx | 24 ++++++++++------- .../basic/src/framework/entry.rsc.tsx | 24 ++++++++++------- .../basic/src/framework/entry.ssr.tsx | 8 +++--- .../basic/src/framework/use-cache-runtime.tsx | 22 +++++++++------ .../src/framework/entry.browser.tsx | 24 ++++++++++------- .../browser-mode/src/framework/entry.rsc.tsx | 27 +++++++++++-------- .../no-ssr/src/framework/entry.browser.tsx | 23 +++++++++------- .../no-ssr/src/framework/entry.rsc.tsx | 24 ++++++++++------- .../ssg/src/framework/entry.browser.tsx | 14 +++++----- .../examples/ssg/src/framework/entry.rsc.tsx | 6 ++--- .../examples/ssg/src/framework/entry.ssr.tsx | 8 +++--- .../src/framework/entry.browser.tsx | 24 ++++++++++------- .../src/framework/entry.rsc.tsx | 24 ++++++++++------- .../src/framework/entry.ssr.tsx | 8 +++--- .../starter/src/framework/entry.browser.tsx | 24 ++++++++++------- .../starter/src/framework/entry.rsc.tsx | 24 ++++++++++------- .../starter/src/framework/entry.ssr.tsx | 8 +++--- 18 files changed, 199 insertions(+), 143 deletions(-) diff --git a/packages/plugin-rsc/README.md b/packages/plugin-rsc/README.md index f4fcc44de..bc1063613 100644 --- a/packages/plugin-rsc/README.md +++ b/packages/plugin-rsc/README.md @@ -131,7 +131,7 @@ export default defineConfig({ - [`entry.rsc.tsx`](./examples/starter/src/framework/entry.rsc.tsx) ```tsx -import * as ReactServer from '@vitejs/plugin-rsc/rsc' // re-export of react-server-dom/server.edge and client.edge +import { renderToReadableStream } from '@vitejs/plugin-rsc/rsc' // the plugin assumes `rsc` entry having default export of request handler export default async function handler(request: Request): Promise { @@ -143,7 +143,7 @@ export default async function handler(request: Request): Promise { ) - const rscStream = ReactServer.renderToReadableStream(root) + const rscStream = renderToReadableStream(root) // respond direct RSC stream request based on framework's convention if (request.url.endsWith('.rsc')) { @@ -173,19 +173,19 @@ export default async function handler(request: Request): Promise { - [`entry.ssr.tsx`](./examples/starter/src/framework/entry.ssr.tsx) ```tsx -import * as ReactClient from '@vitejs/plugin-rsc/ssr' // re-export of react-server-dom/client.edge -import * as ReactDOMServer from 'react-dom/server.edge' +import { createFromReadableStream } from '@vitejs/plugin-rsc/ssr' +import { renderToReadableStream } from 'react-dom/server.edge' export async function handleSsr(rscStream: ReadableStream) { // deserialize RSC stream back to React VDOM - const root = await ReactClient.createFromReadableStream(rscStream) + const root = await createFromReadableStream(rscStream) // helper API to allow referencing browser entry content from SSR environment const bootstrapScriptContent = await import.meta.viteRsc.loadBootstrapScriptContent('index') // render html (traditional SSR) - const htmlStream = ReactDOMServer.renderToReadableStream(root, { + const htmlStream = renderToReadableStream(root, { bootstrapScriptContent, }) @@ -196,16 +196,16 @@ export async function handleSsr(rscStream: ReadableStream) { - [`entry.browser.tsx`](./examples/starter/src/framework/entry.browser.tsx) ```tsx -import * as ReactClient from '@vitejs/plugin-rsc/browser' // re-export of react-server-dom/client.browser -import * as ReactDOMClient from 'react-dom/client' +import { createFromReadableStream } from '@vitejs/plugin-rsc/browser' +import { hydrateRoot } from 'react-dom/client' async function main() { // fetch and deserialize RSC stream back to React VDOM const rscResponse = await fetch(window.location.href + '.rsc') - const root = await ReactClient.createFromReadableStream(rscResponse.body) + const root = await createFromReadableStream(rscResponse.body) // hydration (traditional CSR) - ReactDOMClient.hydrateRoot(document, root) + hydrateRoot(document, root) } main() @@ -342,13 +342,11 @@ const htmlStream = await renderToReadableStream(reactNode, { This event is fired when server modules are updated, which can be used to trigger re-fetching and re-rendering of RSC components on browser. ```js -import * as ReactClient from '@vitejs/plugin-rsc/browser' +import { createFromFetch } from '@vitejs/plugin-rsc/browser' import.meta.hot.on('rsc:update', async () => { // re-fetch RSC stream - const rscPayload = await ReactClient.createFromFetch( - fetch(window.location.href + '.rsc'), - ) + const rscPayload = await createFromFetch(fetch(window.location.href + '.rsc')) // re-render ... }) ``` diff --git a/packages/plugin-rsc/examples/basic/src/framework/entry.browser.tsx b/packages/plugin-rsc/examples/basic/src/framework/entry.browser.tsx index 1998e86ff..551f4aac9 100644 --- a/packages/plugin-rsc/examples/basic/src/framework/entry.browser.tsx +++ b/packages/plugin-rsc/examples/basic/src/framework/entry.browser.tsx @@ -1,6 +1,12 @@ -import * as ReactClient from '@vitejs/plugin-rsc/browser' +import { + createFromReadableStream, + createFromFetch, + setServerCallback, + createTemporaryReferenceSet, + encodeReply, +} from '@vitejs/plugin-rsc/browser' import React from 'react' -import * as ReactDOMClient from 'react-dom/client' +import { hydrateRoot } from 'react-dom/client' import { rscStream } from 'rsc-html-stream/client' import type { RscPayload } from './entry.rsc' @@ -10,7 +16,7 @@ async function main() { let setPayload: (v: RscPayload) => void // deserialize RSC stream back to React VDOM for CSR - const initialPayload = await ReactClient.createFromReadableStream( + const initialPayload = await createFromReadableStream( // initial RSC stream is injected in SSR stream as rscStream, ) @@ -33,7 +39,7 @@ async function main() { // re-fetch RSC and trigger re-rendering async function fetchRscPayload() { - const payload = await ReactClient.createFromFetch( + const payload = await createFromFetch( fetch(window.location.href), ) setPayload(payload) @@ -41,13 +47,13 @@ async function main() { // register a handler which will be internally called by React // on server function request after hydration. - ReactClient.setServerCallback(async (id, args) => { + setServerCallback(async (id, args) => { const url = new URL(window.location.href) - const temporaryReferences = ReactClient.createTemporaryReferenceSet() - const payload = await ReactClient.createFromFetch( + const temporaryReferences = createTemporaryReferenceSet() + const payload = await createFromFetch( fetch(url, { method: 'POST', - body: await ReactClient.encodeReply(args, { temporaryReferences }), + body: await encodeReply(args, { temporaryReferences }), headers: { 'x-rsc-action': id, }, @@ -64,7 +70,7 @@ async function main() { ) - ReactDOMClient.hydrateRoot(document, browserRoot, { + hydrateRoot(document, browserRoot, { formState: initialPayload.formState, }) diff --git a/packages/plugin-rsc/examples/basic/src/framework/entry.rsc.tsx b/packages/plugin-rsc/examples/basic/src/framework/entry.rsc.tsx index ff7c2068d..853c4686e 100644 --- a/packages/plugin-rsc/examples/basic/src/framework/entry.rsc.tsx +++ b/packages/plugin-rsc/examples/basic/src/framework/entry.rsc.tsx @@ -1,4 +1,11 @@ -import * as ReactServer from '@vitejs/plugin-rsc/rsc' +import { + renderToReadableStream, + createTemporaryReferenceSet, + decodeReply, + loadServerAction, + decodeAction, + decodeFormState, +} from '@vitejs/plugin-rsc/rsc' import type { ReactFormState } from 'react-dom/client' import type React from 'react' @@ -40,28 +47,25 @@ export async function handleRequest({ const body = contentType?.startsWith('multipart/form-data') ? await request.formData() : await request.text() - temporaryReferences = ReactServer.createTemporaryReferenceSet() - const args = await ReactServer.decodeReply(body, { temporaryReferences }) - const action = await ReactServer.loadServerAction(actionId) + temporaryReferences = createTemporaryReferenceSet() + const args = await decodeReply(body, { temporaryReferences }) + const action = await loadServerAction(actionId) returnValue = await action.apply(null, args) } else { // otherwise server function is called via `
` // before hydration (e.g. when javascript is disabled). // aka progressive enhancement. const formData = await request.formData() - const decodedAction = await ReactServer.decodeAction(formData) + const decodedAction = await decodeAction(formData) const result = await decodedAction() - formState = await ReactServer.decodeFormState(result, formData) + formState = await decodeFormState(result, formData) } } const url = new URL(request.url) const rscPayload: RscPayload = { root: getRoot(), formState, returnValue } const rscOptions = { temporaryReferences } - const rscStream = ReactServer.renderToReadableStream( - rscPayload, - rscOptions, - ) + const rscStream = renderToReadableStream(rscPayload, rscOptions) // respond RSC stream without HTML rendering based on framework's convention. // here we use request header `content-type`. diff --git a/packages/plugin-rsc/examples/basic/src/framework/entry.ssr.tsx b/packages/plugin-rsc/examples/basic/src/framework/entry.ssr.tsx index 982dacf16..736a29b9a 100644 --- a/packages/plugin-rsc/examples/basic/src/framework/entry.ssr.tsx +++ b/packages/plugin-rsc/examples/basic/src/framework/entry.ssr.tsx @@ -1,7 +1,7 @@ -import * as ReactClient from '@vitejs/plugin-rsc/ssr' // RSC API +import { createFromReadableStream } from '@vitejs/plugin-rsc/ssr' import React from 'react' import type { ReactFormState } from 'react-dom/client' -import * as ReactDOMServer from 'react-dom/server.edge' +import { renderToReadableStream } from 'react-dom/server.edge' import { injectRSCPayload } from 'rsc-html-stream/server' import type { RscPayload } from './entry.rsc' @@ -23,7 +23,7 @@ export async function renderHTML( function SsrRoot() { // deserialization needs to be kicked off inside ReactDOMServer context // for ReactDomServer preinit/preloading to work - payload ??= ReactClient.createFromReadableStream(rscStream1) + payload ??= createFromReadableStream(rscStream1) return {React.use(payload).root} } @@ -34,7 +34,7 @@ export async function renderHTML( // render html (traditional SSR) const bootstrapScriptContent = await import.meta.viteRsc.loadBootstrapScriptContent('index') - const htmlStream = await ReactDOMServer.renderToReadableStream(, { + const htmlStream = await renderToReadableStream(, { bootstrapScriptContent: options?.debugNojs ? undefined : bootstrapScriptContent, diff --git a/packages/plugin-rsc/examples/basic/src/framework/use-cache-runtime.tsx b/packages/plugin-rsc/examples/basic/src/framework/use-cache-runtime.tsx index 44e011050..a25e56c6c 100644 --- a/packages/plugin-rsc/examples/basic/src/framework/use-cache-runtime.tsx +++ b/packages/plugin-rsc/examples/basic/src/framework/use-cache-runtime.tsx @@ -1,4 +1,11 @@ -import * as ReactRsc from '@vitejs/plugin-rsc/rsc' +import { + createClientTemporaryReferenceSet, + encodeReply, + createTemporaryReferenceSet, + decodeReply, + renderToReadableStream, + createFromReadableStream, +} from '@vitejs/plugin-rsc/rsc' // based on // https://github.com/vercel/next.js/pull/70435 @@ -28,9 +35,8 @@ export default function cacheWrapper(fn: (...args: any[]) => Promise) { // those arguments to be included as a cache key and it doesn't achieve // "use cache static shell + dynamic children props" pattern. // cf. https://nextjs.org/docs/app/api-reference/directives/use-cache#non-serializable-arguments - const clientTemporaryReferences = - ReactRsc.createClientTemporaryReferenceSet() - const encodedArguments = await ReactRsc.encodeReply(args, { + const clientTemporaryReferences = createClientTemporaryReferenceSet() + const encodedArguments = await encodeReply(args, { temporaryReferences: clientTemporaryReferences, }) const serializedCacheKey = await replyToCacheKey(encodedArguments) @@ -38,8 +44,8 @@ export default function cacheWrapper(fn: (...args: any[]) => Promise) { // cache `fn` result as stream // (cache value is promise so that it dedupes concurrent async calls) const entryPromise = (cacheEntries[serializedCacheKey] ??= (async () => { - const temporaryReferences = ReactRsc.createTemporaryReferenceSet() - const decodedArgs = await ReactRsc.decodeReply(encodedArguments, { + const temporaryReferences = createTemporaryReferenceSet() + const decodedArgs = await decodeReply(encodedArguments, { temporaryReferences, }) @@ -47,7 +53,7 @@ export default function cacheWrapper(fn: (...args: any[]) => Promise) { const result = await fn(...decodedArgs) // serialize result to a ReadableStream - const stream = ReactRsc.renderToReadableStream(result, { + const stream = renderToReadableStream(result, { environmentName: 'Cache', temporaryReferences, }) @@ -56,7 +62,7 @@ export default function cacheWrapper(fn: (...args: any[]) => Promise) { // deserialized cached stream const stream = (await entryPromise).get() - const result = ReactRsc.createFromReadableStream(stream, { + const result = createFromReadableStream(stream, { environmentName: 'Cache', replayConsoleLogs: true, temporaryReferences: clientTemporaryReferences, diff --git a/packages/plugin-rsc/examples/browser-mode/src/framework/entry.browser.tsx b/packages/plugin-rsc/examples/browser-mode/src/framework/entry.browser.tsx index bb36e3626..a8ce1e792 100644 --- a/packages/plugin-rsc/examples/browser-mode/src/framework/entry.browser.tsx +++ b/packages/plugin-rsc/examples/browser-mode/src/framework/entry.browser.tsx @@ -1,13 +1,19 @@ import * as React from 'react' -import * as ReactDOMClient from 'react-dom/client' -import * as ReactClient from '@vitejs/plugin-rsc/react/browser' +import { createRoot } from 'react-dom/client' +import { + createFromFetch, + setRequireModule, + setServerCallback, + createTemporaryReferenceSet, + encodeReply, +} from '@vitejs/plugin-rsc/react/browser' import type { RscPayload } from './entry.rsc' let fetchServer: typeof import('./entry.rsc').fetchServer export function initialize(options: { fetchServer: typeof fetchServer }) { fetchServer = options.fetchServer - ReactClient.setRequireModule({ + setRequireModule({ load: (id) => import(/* @vite-ignore */ id), }) } @@ -15,7 +21,7 @@ export function initialize(options: { fetchServer: typeof fetchServer }) { export async function main() { let setPayload: (v: RscPayload) => void - const initialPayload = await ReactClient.createFromFetch( + const initialPayload = await createFromFetch( fetchServer(new Request(window.location.href)), ) @@ -29,14 +35,14 @@ export async function main() { return payload.root } - ReactClient.setServerCallback(async (id, args) => { + setServerCallback(async (id, args) => { const url = new URL(window.location.href) - const temporaryReferences = ReactClient.createTemporaryReferenceSet() - const payload = await ReactClient.createFromFetch( + const temporaryReferences = createTemporaryReferenceSet() + const payload = await createFromFetch( fetchServer( new Request(url, { method: 'POST', - body: await ReactClient.encodeReply(args, { temporaryReferences }), + body: await encodeReply(args, { temporaryReferences }), headers: { 'x-rsc-action': id, }, @@ -53,5 +59,5 @@ export async function main() { ) - ReactDOMClient.createRoot(document.body).render(browserRoot) + createRoot(document.body).render(browserRoot) } diff --git a/packages/plugin-rsc/examples/browser-mode/src/framework/entry.rsc.tsx b/packages/plugin-rsc/examples/browser-mode/src/framework/entry.rsc.tsx index 343e6751c..44adc4bac 100644 --- a/packages/plugin-rsc/examples/browser-mode/src/framework/entry.rsc.tsx +++ b/packages/plugin-rsc/examples/browser-mode/src/framework/entry.rsc.tsx @@ -1,4 +1,12 @@ -import * as ReactServer from '@vitejs/plugin-rsc/react/rsc' +import { + setRequireModule, + renderToReadableStream, + createTemporaryReferenceSet, + decodeReply, + loadServerAction, + decodeAction, + decodeFormState, +} from '@vitejs/plugin-rsc/react/rsc' import type React from 'react' import { Root } from '../root' import type { ReactFormState } from 'react-dom/client' @@ -12,7 +20,7 @@ export type RscPayload = { declare let __vite_rsc_raw_import__: (id: string) => Promise export function initialize() { - ReactServer.setRequireModule({ load: (id) => __vite_rsc_raw_import__(id) }) + setRequireModule({ load: (id) => __vite_rsc_raw_import__(id) }) } export async function fetchServer(request: Request): Promise { @@ -27,24 +35,21 @@ export async function fetchServer(request: Request): Promise { const body = contentType?.startsWith('multipart/form-data') ? await request.formData() : await request.text() - temporaryReferences = ReactServer.createTemporaryReferenceSet() - const args = await ReactServer.decodeReply(body, { temporaryReferences }) - const action = await ReactServer.loadServerAction(actionId) + temporaryReferences = createTemporaryReferenceSet() + const args = await decodeReply(body, { temporaryReferences }) + const action = await loadServerAction(actionId) returnValue = await action.apply(null, args) } else { const formData = await request.formData() - const decodedAction = await ReactServer.decodeAction(formData) + const decodedAction = await decodeAction(formData) const result = await decodedAction() - formState = await ReactServer.decodeFormState(result, formData) + formState = await decodeFormState(result, formData) } } const rscPayload: RscPayload = { root: , formState, returnValue } const rscOptions = { temporaryReferences } - const rscStream = ReactServer.renderToReadableStream( - rscPayload, - rscOptions, - ) + const rscStream = renderToReadableStream(rscPayload, rscOptions) return new Response(rscStream, { headers: { diff --git a/packages/plugin-rsc/examples/no-ssr/src/framework/entry.browser.tsx b/packages/plugin-rsc/examples/no-ssr/src/framework/entry.browser.tsx index 0d3451c56..f33a65500 100644 --- a/packages/plugin-rsc/examples/no-ssr/src/framework/entry.browser.tsx +++ b/packages/plugin-rsc/examples/no-ssr/src/framework/entry.browser.tsx @@ -1,6 +1,11 @@ -import * as ReactClient from '@vitejs/plugin-rsc/browser' +import { + createFromFetch, + setServerCallback, + createTemporaryReferenceSet, + encodeReply, +} from '@vitejs/plugin-rsc/browser' import React from 'react' -import * as ReactDOMClient from 'react-dom/client' +import { createRoot } from 'react-dom/client' import type { RscPayload } from './entry.rsc' async function main() { @@ -8,7 +13,7 @@ async function main() { // from outside of `BrowserRoot` component (e.g. server function call, navigation, hmr) let setPayload: (v: RscPayload) => void - const initialPayload = await ReactClient.createFromFetch( + const initialPayload = await createFromFetch( fetch(window.location.href), ) @@ -30,7 +35,7 @@ async function main() { // re-fetch RSC and trigger re-rendering async function fetchRscPayload() { - const payload = await ReactClient.createFromFetch( + const payload = await createFromFetch( fetch(window.location.href), ) setPayload(payload) @@ -38,13 +43,13 @@ async function main() { // register a handler which will be internally called by React // on server function request after hydration. - ReactClient.setServerCallback(async (id, args) => { + setServerCallback(async (id, args) => { const url = new URL(window.location.href) - const temporaryReferences = ReactClient.createTemporaryReferenceSet() - const payload = await ReactClient.createFromFetch( + const temporaryReferences = createTemporaryReferenceSet() + const payload = await createFromFetch( fetch(url, { method: 'POST', - body: await ReactClient.encodeReply(args, { temporaryReferences }), + body: await encodeReply(args, { temporaryReferences }), headers: { 'x-rsc-action': id, }, @@ -61,7 +66,7 @@ async function main() { ) - ReactDOMClient.createRoot(document.body).render(browserRoot) + createRoot(document.body).render(browserRoot) // implement server HMR by trigering re-fetch/render of RSC upon server code change if (import.meta.hot) { diff --git a/packages/plugin-rsc/examples/no-ssr/src/framework/entry.rsc.tsx b/packages/plugin-rsc/examples/no-ssr/src/framework/entry.rsc.tsx index 439cfddc9..27a5ce931 100644 --- a/packages/plugin-rsc/examples/no-ssr/src/framework/entry.rsc.tsx +++ b/packages/plugin-rsc/examples/no-ssr/src/framework/entry.rsc.tsx @@ -1,4 +1,11 @@ -import * as ReactServer from '@vitejs/plugin-rsc/rsc' +import { + renderToReadableStream, + createTemporaryReferenceSet, + decodeReply, + loadServerAction, + decodeAction, + decodeFormState, +} from '@vitejs/plugin-rsc/rsc' import type { ReactFormState } from 'react-dom/client' import { Root } from '../root.tsx' @@ -20,24 +27,21 @@ export default async function handler(request: Request): Promise { const body = contentType?.startsWith('multipart/form-data') ? await request.formData() : await request.text() - temporaryReferences = ReactServer.createTemporaryReferenceSet() - const args = await ReactServer.decodeReply(body, { temporaryReferences }) - const action = await ReactServer.loadServerAction(actionId) + temporaryReferences = createTemporaryReferenceSet() + const args = await decodeReply(body, { temporaryReferences }) + const action = await loadServerAction(actionId) returnValue = await action.apply(null, args) } else { const formData = await request.formData() - const decodedAction = await ReactServer.decodeAction(formData) + const decodedAction = await decodeAction(formData) const result = await decodedAction() - formState = await ReactServer.decodeFormState(result, formData) + formState = await decodeFormState(result, formData) } } const rscPayload: RscPayload = { root: , formState, returnValue } const rscOptions = { temporaryReferences } - const rscStream = ReactServer.renderToReadableStream( - rscPayload, - rscOptions, - ) + const rscStream = renderToReadableStream(rscPayload, rscOptions) return new Response(rscStream, { headers: { diff --git a/packages/plugin-rsc/examples/ssg/src/framework/entry.browser.tsx b/packages/plugin-rsc/examples/ssg/src/framework/entry.browser.tsx index 7f77627e5..381be8dc5 100644 --- a/packages/plugin-rsc/examples/ssg/src/framework/entry.browser.tsx +++ b/packages/plugin-rsc/examples/ssg/src/framework/entry.browser.tsx @@ -1,6 +1,9 @@ -import * as ReactClient from '@vitejs/plugin-rsc/browser' +import { + createFromFetch, + createFromReadableStream, +} from '@vitejs/plugin-rsc/browser' import React from 'react' -import ReactDomClient from 'react-dom/client' +import { hydrateRoot } from 'react-dom/client' import { rscStream } from 'rsc-html-stream/client' import { RSC_POSTFIX, type RscPayload } from './shared' @@ -8,12 +11,11 @@ async function hydrate(): Promise { async function onNavigation() { const url = new URL(window.location.href) url.pathname = url.pathname + RSC_POSTFIX - const payload = await ReactClient.createFromFetch(fetch(url)) + const payload = await createFromFetch(fetch(url)) setPayload(payload) } - const initialPayload = - await ReactClient.createFromReadableStream(rscStream) + const initialPayload = await createFromReadableStream(rscStream) let setPayload: (v: RscPayload) => void @@ -37,7 +39,7 @@ async function hydrate(): Promise { ) - ReactDomClient.hydrateRoot(document, browserRoot) + hydrateRoot(document, browserRoot) if (import.meta.hot) { import.meta.hot.on('rsc:update', () => { diff --git a/packages/plugin-rsc/examples/ssg/src/framework/entry.rsc.tsx b/packages/plugin-rsc/examples/ssg/src/framework/entry.rsc.tsx index 6af940baa..7b87fdc18 100644 --- a/packages/plugin-rsc/examples/ssg/src/framework/entry.rsc.tsx +++ b/packages/plugin-rsc/examples/ssg/src/framework/entry.rsc.tsx @@ -1,4 +1,4 @@ -import * as ReactServer from '@vitejs/plugin-rsc/rsc' +import { renderToReadableStream } from '@vitejs/plugin-rsc/rsc' import { Root, getStaticPaths } from '../root' import { RSC_POSTFIX, type RscPayload } from './shared' @@ -13,7 +13,7 @@ export default async function handler(request: Request): Promise { } const rscPayload: RscPayload = { root: } - const rscStream = ReactServer.renderToReadableStream(rscPayload) + const rscStream = renderToReadableStream(rscPayload) if (isRscRequest) { return new Response(rscStream, { @@ -44,7 +44,7 @@ export async function handleSsg(request: Request): Promise<{ }> { const url = new URL(request.url) const rscPayload: RscPayload = { root: } - const rscStream = ReactServer.renderToReadableStream(rscPayload) + const rscStream = renderToReadableStream(rscPayload) const [rscStream1, rscStream2] = rscStream.tee() const ssr = await import.meta.viteRsc.loadModule< diff --git a/packages/plugin-rsc/examples/ssg/src/framework/entry.ssr.tsx b/packages/plugin-rsc/examples/ssg/src/framework/entry.ssr.tsx index d5ee6264d..e47f8b188 100644 --- a/packages/plugin-rsc/examples/ssg/src/framework/entry.ssr.tsx +++ b/packages/plugin-rsc/examples/ssg/src/framework/entry.ssr.tsx @@ -1,6 +1,6 @@ -import * as ReactClient from '@vitejs/plugin-rsc/ssr' +import { createFromReadableStream } from '@vitejs/plugin-rsc/ssr' import React from 'react' -import * as ReactDomServer from 'react-dom/server.edge' +import { renderToReadableStream } from 'react-dom/server.edge' import { injectRSCPayload } from 'rsc-html-stream/server' import type { RscPayload } from './shared' @@ -14,7 +14,7 @@ export async function renderHtml( let payload: Promise function SsrRoot() { - payload ??= ReactClient.createFromReadableStream(rscStream1) + payload ??= createFromReadableStream(rscStream1) const root = React.use(payload).root return root } @@ -22,7 +22,7 @@ export async function renderHtml( const bootstrapScriptContent = await import.meta.viteRsc.loadBootstrapScriptContent('index') - const htmlStream = await ReactDomServer.renderToReadableStream(, { + const htmlStream = await renderToReadableStream(, { bootstrapScriptContent, }) if (options?.ssg) { diff --git a/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.browser.tsx b/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.browser.tsx index 473fc492d..c4c0e4ade 100644 --- a/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.browser.tsx +++ b/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.browser.tsx @@ -1,6 +1,12 @@ -import * as ReactClient from '@vitejs/plugin-rsc/browser' +import { + createFromReadableStream, + createFromFetch, + setServerCallback, + createTemporaryReferenceSet, + encodeReply, +} from '@vitejs/plugin-rsc/browser' import React from 'react' -import * as ReactDOMClient from 'react-dom/client' +import { hydrateRoot } from 'react-dom/client' import { rscStream } from 'rsc-html-stream/client' import type { RscPayload } from './entry.rsc' @@ -10,7 +16,7 @@ async function main() { let setPayload: (v: RscPayload) => void // deserialize RSC stream back to React VDOM for CSR - const initialPayload = await ReactClient.createFromReadableStream( + const initialPayload = await createFromReadableStream( // initial RSC stream is injected in SSR stream as rscStream, ) @@ -33,7 +39,7 @@ async function main() { // re-fetch RSC and trigger re-rendering async function fetchRscPayload() { - const payload = await ReactClient.createFromFetch( + const payload = await createFromFetch( fetch(window.location.href), ) setPayload(payload) @@ -41,13 +47,13 @@ async function main() { // register a handler which will be internally called by React // on server function request after hydration. - ReactClient.setServerCallback(async (id, args) => { + setServerCallback(async (id, args) => { const url = new URL(window.location.href) - const temporaryReferences = ReactClient.createTemporaryReferenceSet() - const payload = await ReactClient.createFromFetch( + const temporaryReferences = createTemporaryReferenceSet() + const payload = await createFromFetch( fetch(url, { method: 'POST', - body: await ReactClient.encodeReply(args, { temporaryReferences }), + body: await encodeReply(args, { temporaryReferences }), headers: { 'x-rsc-action': id, }, @@ -64,7 +70,7 @@ async function main() { ) - ReactDOMClient.hydrateRoot(document, browserRoot, { + hydrateRoot(document, browserRoot, { formState: initialPayload.formState, }) diff --git a/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.rsc.tsx b/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.rsc.tsx index 1113c4bcc..767164f1e 100644 --- a/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.rsc.tsx +++ b/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.rsc.tsx @@ -1,4 +1,11 @@ -import * as ReactServer from '@vitejs/plugin-rsc/rsc' +import { + renderToReadableStream, + createTemporaryReferenceSet, + decodeReply, + loadServerAction, + decodeAction, + decodeFormState, +} from '@vitejs/plugin-rsc/rsc' import type { ReactFormState } from 'react-dom/client' import { Root } from '../root.tsx' @@ -22,18 +29,18 @@ async function handler(request: Request): Promise { const body = contentType?.startsWith('multipart/form-data') ? await request.formData() : await request.text() - temporaryReferences = ReactServer.createTemporaryReferenceSet() - const args = await ReactServer.decodeReply(body, { temporaryReferences }) - const action = await ReactServer.loadServerAction(actionId) + temporaryReferences = createTemporaryReferenceSet() + const args = await decodeReply(body, { temporaryReferences }) + const action = await loadServerAction(actionId) returnValue = await action.apply(null, args) } else { // otherwise server function is called via `` // before hydration (e.g. when javascript is disabled). // aka progressive enhancement. const formData = await request.formData() - const decodedAction = await ReactServer.decodeAction(formData) + const decodedAction = await decodeAction(formData) const result = await decodedAction() - formState = await ReactServer.decodeFormState(result, formData) + formState = await decodeFormState(result, formData) } } @@ -43,10 +50,7 @@ async function handler(request: Request): Promise { // to achieve single round trip to mutate and fetch from server. const rscPayload: RscPayload = { root: , formState, returnValue } const rscOptions = { temporaryReferences } - const rscStream = ReactServer.renderToReadableStream( - rscPayload, - rscOptions, - ) + const rscStream = renderToReadableStream(rscPayload, rscOptions) // respond RSC stream without HTML rendering based on framework's convention. // here we use request header `content-type`. diff --git a/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.ssr.tsx b/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.ssr.tsx index 9fae3468b..c3ea6b9c4 100644 --- a/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.ssr.tsx +++ b/packages/plugin-rsc/examples/starter-cf-single/src/framework/entry.ssr.tsx @@ -1,7 +1,7 @@ -import * as ReactClient from '@vitejs/plugin-rsc/ssr' // RSC API +import { createFromReadableStream } from '@vitejs/plugin-rsc/ssr' import React from 'react' import type { ReactFormState } from 'react-dom/client' -import * as ReactDOMServer from 'react-dom/server.edge' +import { renderToReadableStream } from 'react-dom/server.edge' import { injectRSCPayload } from 'rsc-html-stream/server' import type { RscPayload } from './entry.rsc' @@ -25,14 +25,14 @@ export async function renderHTML( function SsrRoot() { // deserialization needs to be kicked off inside ReactDOMServer context // for ReactDomServer preinit/preloading to work - payload ??= ReactClient.createFromReadableStream(rscStream1) + payload ??= createFromReadableStream(rscStream1) return React.use(payload).root } // render html (traditional SSR) const bootstrapScriptContent = await import.meta.viteRsc.loadBootstrapScriptContent('index') - const htmlStream = await ReactDOMServer.renderToReadableStream(, { + const htmlStream = await renderToReadableStream(, { bootstrapScriptContent: options?.debugNojs ? undefined : bootstrapScriptContent, diff --git a/packages/plugin-rsc/examples/starter/src/framework/entry.browser.tsx b/packages/plugin-rsc/examples/starter/src/framework/entry.browser.tsx index 473fc492d..c4c0e4ade 100644 --- a/packages/plugin-rsc/examples/starter/src/framework/entry.browser.tsx +++ b/packages/plugin-rsc/examples/starter/src/framework/entry.browser.tsx @@ -1,6 +1,12 @@ -import * as ReactClient from '@vitejs/plugin-rsc/browser' +import { + createFromReadableStream, + createFromFetch, + setServerCallback, + createTemporaryReferenceSet, + encodeReply, +} from '@vitejs/plugin-rsc/browser' import React from 'react' -import * as ReactDOMClient from 'react-dom/client' +import { hydrateRoot } from 'react-dom/client' import { rscStream } from 'rsc-html-stream/client' import type { RscPayload } from './entry.rsc' @@ -10,7 +16,7 @@ async function main() { let setPayload: (v: RscPayload) => void // deserialize RSC stream back to React VDOM for CSR - const initialPayload = await ReactClient.createFromReadableStream( + const initialPayload = await createFromReadableStream( // initial RSC stream is injected in SSR stream as rscStream, ) @@ -33,7 +39,7 @@ async function main() { // re-fetch RSC and trigger re-rendering async function fetchRscPayload() { - const payload = await ReactClient.createFromFetch( + const payload = await createFromFetch( fetch(window.location.href), ) setPayload(payload) @@ -41,13 +47,13 @@ async function main() { // register a handler which will be internally called by React // on server function request after hydration. - ReactClient.setServerCallback(async (id, args) => { + setServerCallback(async (id, args) => { const url = new URL(window.location.href) - const temporaryReferences = ReactClient.createTemporaryReferenceSet() - const payload = await ReactClient.createFromFetch( + const temporaryReferences = createTemporaryReferenceSet() + const payload = await createFromFetch( fetch(url, { method: 'POST', - body: await ReactClient.encodeReply(args, { temporaryReferences }), + body: await encodeReply(args, { temporaryReferences }), headers: { 'x-rsc-action': id, }, @@ -64,7 +70,7 @@ async function main() { ) - ReactDOMClient.hydrateRoot(document, browserRoot, { + hydrateRoot(document, browserRoot, { formState: initialPayload.formState, }) diff --git a/packages/plugin-rsc/examples/starter/src/framework/entry.rsc.tsx b/packages/plugin-rsc/examples/starter/src/framework/entry.rsc.tsx index 58b0c60be..5f346b568 100644 --- a/packages/plugin-rsc/examples/starter/src/framework/entry.rsc.tsx +++ b/packages/plugin-rsc/examples/starter/src/framework/entry.rsc.tsx @@ -1,4 +1,11 @@ -import * as ReactServer from '@vitejs/plugin-rsc/rsc' +import { + renderToReadableStream, + createTemporaryReferenceSet, + decodeReply, + loadServerAction, + decodeAction, + decodeFormState, +} from '@vitejs/plugin-rsc/rsc' import type { ReactFormState } from 'react-dom/client' import { Root } from '../root.tsx' @@ -32,18 +39,18 @@ export default async function handler(request: Request): Promise { const body = contentType?.startsWith('multipart/form-data') ? await request.formData() : await request.text() - temporaryReferences = ReactServer.createTemporaryReferenceSet() - const args = await ReactServer.decodeReply(body, { temporaryReferences }) - const action = await ReactServer.loadServerAction(actionId) + temporaryReferences = createTemporaryReferenceSet() + const args = await decodeReply(body, { temporaryReferences }) + const action = await loadServerAction(actionId) returnValue = await action.apply(null, args) } else { // otherwise server function is called via `` // before hydration (e.g. when javascript is disabled). // aka progressive enhancement. const formData = await request.formData() - const decodedAction = await ReactServer.decodeAction(formData) + const decodedAction = await decodeAction(formData) const result = await decodedAction() - formState = await ReactServer.decodeFormState(result, formData) + formState = await decodeFormState(result, formData) } } @@ -53,10 +60,7 @@ export default async function handler(request: Request): Promise { // to achieve single round trip to mutate and fetch from server. const rscPayload: RscPayload = { root: , formState, returnValue } const rscOptions = { temporaryReferences } - const rscStream = ReactServer.renderToReadableStream( - rscPayload, - rscOptions, - ) + const rscStream = renderToReadableStream(rscPayload, rscOptions) // respond RSC stream without HTML rendering based on framework's convention. // here we use request header `content-type`. diff --git a/packages/plugin-rsc/examples/starter/src/framework/entry.ssr.tsx b/packages/plugin-rsc/examples/starter/src/framework/entry.ssr.tsx index d4944bc5d..d55f967cb 100644 --- a/packages/plugin-rsc/examples/starter/src/framework/entry.ssr.tsx +++ b/packages/plugin-rsc/examples/starter/src/framework/entry.ssr.tsx @@ -1,7 +1,7 @@ -import * as ReactClient from '@vitejs/plugin-rsc/ssr' // RSC API +import { createFromReadableStream } from '@vitejs/plugin-rsc/ssr' import React from 'react' import type { ReactFormState } from 'react-dom/client' -import * as ReactDOMServer from 'react-dom/server.edge' +import { renderToReadableStream } from 'react-dom/server.edge' import { injectRSCPayload } from 'rsc-html-stream/server' import type { RscPayload } from './entry.rsc' @@ -23,7 +23,7 @@ export async function renderHTML( function SsrRoot() { // deserialization needs to be kicked off inside ReactDOMServer context // for ReactDomServer preinit/preloading to work - payload ??= ReactClient.createFromReadableStream(rscStream1) + payload ??= createFromReadableStream(rscStream1) return {React.use(payload).root} } @@ -39,7 +39,7 @@ export async function renderHTML( // render html (traditional SSR) const bootstrapScriptContent = await import.meta.viteRsc.loadBootstrapScriptContent('index') - const htmlStream = await ReactDOMServer.renderToReadableStream(, { + const htmlStream = await renderToReadableStream(, { bootstrapScriptContent: options?.debugNojs ? undefined : bootstrapScriptContent, From feb55537d036dcd6f9008cb13a9748ca5ef57925 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 18 Aug 2025 11:09:22 +0900 Subject: [PATCH 210/313] chore: remove vite-plugin-inspect dependency from examples (#730) --- package.json | 1 + .../plugin-rsc/examples/basic/package.json | 1 - .../plugin-rsc/examples/basic/vite.config.ts | 5 ++--- .../examples/react-router/cf/vite.config.ts | 4 ++-- .../examples/react-router/package.json | 1 - .../examples/react-router/vite.config.ts | 4 ++-- packages/plugin-rsc/examples/ssg/package.json | 3 +-- .../plugin-rsc/examples/ssg/vite.config.ts | 4 ++-- .../plugin-rsc/examples/starter/package.json | 3 +-- packages/plugin-rsc/package.json | 3 +-- pnpm-lock.yaml | 18 +++--------------- 11 files changed, 15 insertions(+), 32 deletions(-) diff --git a/package.json b/package.json index 7aa99d627..d7f745f8c 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ "typescript": "^5.9.2", "typescript-eslint": "^8.39.0", "vite": "^7.1.1", + "vite-plugin-inspect": "^11.3.2", "vitest": "^3.2.4" }, "simple-git-hooks": { diff --git a/packages/plugin-rsc/examples/basic/package.json b/packages/plugin-rsc/examples/basic/package.json index 1dda6bb20..c2ca3e6bc 100644 --- a/packages/plugin-rsc/examples/basic/package.json +++ b/packages/plugin-rsc/examples/basic/package.json @@ -31,7 +31,6 @@ "rsc-html-stream": "^0.0.7", "tailwindcss": "^4.1.11", "vite": "^7.1.1", - "vite-plugin-inspect": "^11.3.2", "wrangler": "^4.28.1" }, "stackblitz": { diff --git a/packages/plugin-rsc/examples/basic/vite.config.ts b/packages/plugin-rsc/examples/basic/vite.config.ts index b6d3cc084..0f149dbbe 100644 --- a/packages/plugin-rsc/examples/basic/vite.config.ts +++ b/packages/plugin-rsc/examples/basic/vite.config.ts @@ -3,12 +3,13 @@ import rsc, { transformHoistInlineDirective } from '@vitejs/plugin-rsc' import tailwindcss from '@tailwindcss/vite' import react from '@vitejs/plugin-react' import { type Plugin, defineConfig, normalizePath, parseAstAsync } from 'vite' -import inspect from 'vite-plugin-inspect' +// import inspect from 'vite-plugin-inspect' import path from 'node:path' export default defineConfig({ clearScreen: false, plugins: [ + // inspect(), tailwindcss(), react(), vitePluginUseCache(), @@ -23,8 +24,6 @@ export default defineConfig({ copyServerAssetsToClient: (fileName) => fileName !== '__server_secret.txt', }), - // avoid ecosystem CI fail due to vite-plugin-inspect compatibility - !process.env.ECOSYSTEM_CI && inspect(), { name: 'test-client-reference-tree-shaking', enforce: 'post', diff --git a/packages/plugin-rsc/examples/react-router/cf/vite.config.ts b/packages/plugin-rsc/examples/react-router/cf/vite.config.ts index 6895d0c12..413a971d6 100644 --- a/packages/plugin-rsc/examples/react-router/cf/vite.config.ts +++ b/packages/plugin-rsc/examples/react-router/cf/vite.config.ts @@ -3,7 +3,7 @@ import rsc from '@vitejs/plugin-rsc' import tailwindcss from '@tailwindcss/vite' import react from '@vitejs/plugin-react' import { defineConfig } from 'vite' -import inspect from 'vite-plugin-inspect' +// import inspect from 'vite-plugin-inspect' import { reactRouter } from '../react-router-vite/plugin' export default defineConfig({ @@ -12,6 +12,7 @@ export default defineConfig({ minify: false, }, plugins: [ + // inspect(), tailwindcss(), react(), reactRouter(), @@ -21,7 +22,6 @@ export default defineConfig({ }, serverHandler: false, }), - inspect(), cloudflare({ configPath: './cf/wrangler.ssr.jsonc', viteEnvironment: { diff --git a/packages/plugin-rsc/examples/react-router/package.json b/packages/plugin-rsc/examples/react-router/package.json index 464662f3b..78c8a2a5a 100644 --- a/packages/plugin-rsc/examples/react-router/package.json +++ b/packages/plugin-rsc/examples/react-router/package.json @@ -28,7 +28,6 @@ "@vitejs/plugin-rsc": "latest", "tailwindcss": "^4.1.11", "vite": "^7.1.1", - "vite-plugin-inspect": "^11.3.2", "wrangler": "^4.28.1" } } diff --git a/packages/plugin-rsc/examples/react-router/vite.config.ts b/packages/plugin-rsc/examples/react-router/vite.config.ts index 2f1091c65..9cd2013d6 100644 --- a/packages/plugin-rsc/examples/react-router/vite.config.ts +++ b/packages/plugin-rsc/examples/react-router/vite.config.ts @@ -2,7 +2,7 @@ import rsc from '@vitejs/plugin-rsc' import tailwindcss from '@tailwindcss/vite' import react from '@vitejs/plugin-react' import { defineConfig } from 'vite' -import inspect from 'vite-plugin-inspect' +// import inspect from 'vite-plugin-inspect' import { reactRouter } from './react-router-vite/plugin' export default defineConfig({ @@ -11,6 +11,7 @@ export default defineConfig({ minify: false, }, plugins: [ + // inspect(), tailwindcss(), react(), reactRouter(), @@ -21,7 +22,6 @@ export default defineConfig({ rsc: './react-router-vite/entry.rsc.single.tsx', }, }), - inspect(), ], optimizeDeps: { include: ['react-router', 'react-router/internal/react-server-client'], diff --git a/packages/plugin-rsc/examples/ssg/package.json b/packages/plugin-rsc/examples/ssg/package.json index 993320321..7ecf19dcf 100644 --- a/packages/plugin-rsc/examples/ssg/package.json +++ b/packages/plugin-rsc/examples/ssg/package.json @@ -18,7 +18,6 @@ "@types/react": "^19.1.9", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "latest", - "@vitejs/plugin-rsc": "latest", - "vite-plugin-inspect": "^11.3.2" + "@vitejs/plugin-rsc": "latest" } } diff --git a/packages/plugin-rsc/examples/ssg/vite.config.ts b/packages/plugin-rsc/examples/ssg/vite.config.ts index c66088463..7c0fb059a 100644 --- a/packages/plugin-rsc/examples/ssg/vite.config.ts +++ b/packages/plugin-rsc/examples/ssg/vite.config.ts @@ -6,11 +6,12 @@ import rsc from '@vitejs/plugin-rsc' import mdx from '@mdx-js/rollup' import react from '@vitejs/plugin-react' import { type Plugin, type ResolvedConfig, defineConfig } from 'vite' -import inspect from 'vite-plugin-inspect' +// import inspect from 'vite-plugin-inspect' import { RSC_POSTFIX } from './src/framework/shared' export default defineConfig((env) => ({ plugins: [ + // inspect(), mdx(), react(), rsc({ @@ -23,7 +24,6 @@ export default defineConfig((env) => ({ useBuildAppHook: true, }), rscSsgPlugin(), - inspect(), ], })) diff --git a/packages/plugin-rsc/examples/starter/package.json b/packages/plugin-rsc/examples/starter/package.json index 4087db393..6fbe7c15e 100644 --- a/packages/plugin-rsc/examples/starter/package.json +++ b/packages/plugin-rsc/examples/starter/package.json @@ -19,7 +19,6 @@ "@vitejs/plugin-react": "latest", "@vitejs/plugin-rsc": "latest", "rsc-html-stream": "^0.0.7", - "vite": "^7.1.1", - "vite-plugin-inspect": "^11.3.2" + "vite": "^7.1.1" } } diff --git a/packages/plugin-rsc/package.json b/packages/plugin-rsc/package.json index f95a10104..fd90398c2 100644 --- a/packages/plugin-rsc/package.json +++ b/packages/plugin-rsc/package.json @@ -60,8 +60,7 @@ "react-server-dom-webpack": "^19.1.1", "rsc-html-stream": "^0.0.7", "tinyexec": "^1.0.1", - "tsdown": "^0.14.0", - "vite-plugin-inspect": "^11.3.2" + "tsdown": "^0.14.0" }, "peerDependencies": { "react": "*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 41c8fd089..dcea07a9e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -74,6 +74,9 @@ importers: vite: specifier: ^7.1.1 version: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite-plugin-inspect: + specifier: ^11.3.2 + version: 11.3.2(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) vitest: specifier: ^3.2.4 version: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) @@ -502,9 +505,6 @@ importers: tsdown: specifier: ^0.14.0 version: 0.14.0(publint@0.3.12)(typescript@5.9.2) - vite-plugin-inspect: - specifier: ^11.3.2 - version: 11.3.2(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) packages/plugin-rsc/examples/basic: dependencies: @@ -560,9 +560,6 @@ importers: vite: specifier: ^7.1.1 version: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vite-plugin-inspect: - specifier: ^11.3.2 - version: 11.3.2(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) wrangler: specifier: ^4.28.1 version: 4.28.1 @@ -671,9 +668,6 @@ importers: vite: specifier: ^7.1.1 version: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vite-plugin-inspect: - specifier: ^11.3.2 - version: 11.3.2(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) wrangler: specifier: ^4.28.1 version: 4.28.1 @@ -702,9 +696,6 @@ importers: '@vitejs/plugin-rsc': specifier: latest version: link:../.. - vite-plugin-inspect: - specifier: ^11.3.2 - version: 11.3.2(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) packages/plugin-rsc/examples/starter: dependencies: @@ -733,9 +724,6 @@ importers: vite: specifier: ^7.1.1 version: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vite-plugin-inspect: - specifier: ^11.3.2 - version: 11.3.2(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) packages/plugin-rsc/examples/starter-cf-single: dependencies: From b49522bba7a9de90e210d01d11e67feb36ccad8e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 18 Aug 2025 12:50:03 +0900 Subject: [PATCH 211/313] chore(deps): update actions/checkout action to v5 (#731) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/ci-rsc.yml | 4 ++-- .github/workflows/ci.yml | 4 ++-- .github/workflows/copilot-setup-steps.yml | 2 +- .github/workflows/publish.yml | 2 +- .github/workflows/release-continuous.yml | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci-rsc.yml b/.github/workflows/ci-rsc.yml index 9964f6796..7dcbd388c 100644 --- a/.github/workflows/ci-rsc.yml +++ b/.github/workflows/ci-rsc.yml @@ -21,7 +21,7 @@ jobs: test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: actions/setup-node@v4 with: node-version: 22 @@ -56,7 +56,7 @@ jobs: react_version: experimental fail-fast: false steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: actions/setup-node@v4 with: node-version: 22 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5ef2c8337..5aee7417a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -41,7 +41,7 @@ jobs: name: "Build&Test: node-${{ matrix.node_version }}, ${{ matrix.os }}" steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Install pnpm uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 @@ -110,7 +110,7 @@ jobs: runs-on: ubuntu-latest name: "Lint: node-20, ubuntu-latest" steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: fetch-depth: 0 diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml index 9ed224f8c..6261d4a06 100644 --- a/.github/workflows/copilot-setup-steps.yml +++ b/.github/workflows/copilot-setup-steps.yml @@ -19,7 +19,7 @@ jobs: contents: read steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: actions/setup-node@v4 with: node-version: 22 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 1d23e1255..f89343b43 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -14,7 +14,7 @@ jobs: environment: Release steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Install pnpm uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 diff --git a/.github/workflows/release-continuous.yml b/.github/workflows/release-continuous.yml index 9534f0cc6..af673dbb3 100644 --- a/.github/workflows/release-continuous.yml +++ b/.github/workflows/release-continuous.yml @@ -18,7 +18,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Install pnpm uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 From ba0323cfcd7343362e64f782c5aae02ed9ee3273 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 18 Aug 2025 12:51:19 +0900 Subject: [PATCH 212/313] fix(deps): update all non-major dependencies (#729) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 8 +- packages/plugin-react-oxc/package.json | 4 +- packages/plugin-react-swc/package.json | 6 +- .../playground/base-path/package.json | 2 +- .../playground/class-components/package.json | 2 +- .../playground/decorators/package.json | 2 +- .../playground/emotion-plugin/package.json | 2 +- .../playground/emotion/package.json | 2 +- .../playground/hmr/package.json | 2 +- .../playground/mdx/package.json | 2 +- .../playground/shadow-export/package.json | 2 +- .../playground/styled-components/package.json | 2 +- .../playground/ts-lib/package.json | 2 +- .../playground/worker/package.json | 2 +- packages/plugin-react/package.json | 8 +- .../plugin-rsc/examples/basic/package.json | 10 +- .../examples/browser-mode/package.json | 4 +- .../plugin-rsc/examples/no-ssr/package.json | 4 +- .../examples/react-router/package.json | 12 +- packages/plugin-rsc/examples/ssg/package.json | 2 +- .../examples/starter-cf-single/package.json | 6 +- .../plugin-rsc/examples/starter/package.json | 4 +- packages/plugin-rsc/package.json | 6 +- playground/class-components/package.json | 2 +- playground/compiler/package.json | 2 +- playground/hmr-false/package.json | 2 +- playground/hook-with-jsx/package.json | 2 +- playground/include-node-modules/package.json | 2 +- playground/mdx/package.json | 2 +- pnpm-lock.yaml | 1225 ++++++++--------- pnpm-workspace.yaml | 2 +- 31 files changed, 620 insertions(+), 715 deletions(-) diff --git a/package.json b/package.json index d7f745f8c..7e184c49d 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "devDependencies": { "@eslint/js": "^9.33.0", "@types/fs-extra": "^11.0.4", - "@types/node": "^22.17.1", + "@types/node": "^22.17.2", "@vitejs/release-scripts": "^1.6.0", "eslint": "^9.33.0", "eslint-plugin-import-x": "^4.16.1", @@ -48,10 +48,10 @@ "playwright-chromium": "^1.54.2", "prettier": "^3.6.2", "simple-git-hooks": "^2.13.1", - "tsx": "^4.20.3", + "tsx": "^4.20.4", "typescript": "^5.9.2", - "typescript-eslint": "^8.39.0", - "vite": "^7.1.1", + "typescript-eslint": "^8.39.1", + "vite": "^7.1.2", "vite-plugin-inspect": "^11.3.2", "vitest": "^3.2.4" }, diff --git a/packages/plugin-react-oxc/package.json b/packages/plugin-react-oxc/package.json index d7498a1eb..33d87ebba 100644 --- a/packages/plugin-react-oxc/package.json +++ b/packages/plugin-react-oxc/package.json @@ -43,10 +43,10 @@ }, "devDependencies": { "@vitejs/react-common": "workspace:*", - "tsdown": "^0.14.0", + "tsdown": "^0.14.1", "vite": "catalog:rolldown-vite" }, "dependencies": { - "@rolldown/pluginutils": "1.0.0-beta.31" + "@rolldown/pluginutils": "1.0.0-beta.32" } } diff --git a/packages/plugin-react-swc/package.json b/packages/plugin-react-swc/package.json index 4cfe7b944..862bc17c5 100644 --- a/packages/plugin-react-swc/package.json +++ b/packages/plugin-react-swc/package.json @@ -32,7 +32,7 @@ }, "homepage": "https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react-swc#readme", "dependencies": { - "@rolldown/pluginutils": "1.0.0-beta.31", + "@rolldown/pluginutils": "1.0.0-beta.32", "@swc/core": "^1.13.2" }, "peerDependencies": { @@ -41,11 +41,11 @@ "devDependencies": { "@playwright/test": "^1.54.2", "@types/fs-extra": "^11.0.4", - "@types/node": "^22.17.1", + "@types/node": "^22.17.2", "@vitejs/react-common": "workspace:*", "fs-extra": "^11.3.1", "prettier": "^3.0.3", - "tsdown": "^0.14.0", + "tsdown": "^0.14.1", "typescript": "^5.9.2" } } diff --git a/packages/plugin-react-swc/playground/base-path/package.json b/packages/plugin-react-swc/playground/base-path/package.json index c620022d6..39ac8ccd9 100644 --- a/packages/plugin-react-swc/playground/base-path/package.json +++ b/packages/plugin-react-swc/playground/base-path/package.json @@ -12,7 +12,7 @@ "react-dom": "^19.1.1" }, "devDependencies": { - "@types/react": "^19.1.9", + "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react-swc": "../../dist" } diff --git a/packages/plugin-react-swc/playground/class-components/package.json b/packages/plugin-react-swc/playground/class-components/package.json index 8e5eb2751..02c346792 100644 --- a/packages/plugin-react-swc/playground/class-components/package.json +++ b/packages/plugin-react-swc/playground/class-components/package.json @@ -12,7 +12,7 @@ "react-dom": "^19.1.1" }, "devDependencies": { - "@types/react": "^19.1.9", + "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react-swc": "../../dist" } diff --git a/packages/plugin-react-swc/playground/decorators/package.json b/packages/plugin-react-swc/playground/decorators/package.json index cd84a7087..564855970 100644 --- a/packages/plugin-react-swc/playground/decorators/package.json +++ b/packages/plugin-react-swc/playground/decorators/package.json @@ -12,7 +12,7 @@ "react-dom": "^19.1.1" }, "devDependencies": { - "@types/react": "^19.1.9", + "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react-swc": "../../dist" } diff --git a/packages/plugin-react-swc/playground/emotion-plugin/package.json b/packages/plugin-react-swc/playground/emotion-plugin/package.json index 718a30295..9fde03c55 100644 --- a/packages/plugin-react-swc/playground/emotion-plugin/package.json +++ b/packages/plugin-react-swc/playground/emotion-plugin/package.json @@ -14,7 +14,7 @@ "react-dom": "^19.1.1" }, "devDependencies": { - "@types/react": "^19.1.9", + "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react-swc": "../../dist", "@swc/plugin-emotion": "^11.0.0" diff --git a/packages/plugin-react-swc/playground/emotion/package.json b/packages/plugin-react-swc/playground/emotion/package.json index fb0ea41d8..5cb3c32a9 100644 --- a/packages/plugin-react-swc/playground/emotion/package.json +++ b/packages/plugin-react-swc/playground/emotion/package.json @@ -14,7 +14,7 @@ "react-dom": "^19.1.1" }, "devDependencies": { - "@types/react": "^19.1.9", + "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react-swc": "../../dist" } diff --git a/packages/plugin-react-swc/playground/hmr/package.json b/packages/plugin-react-swc/playground/hmr/package.json index 056be2a0d..f8ea953d7 100644 --- a/packages/plugin-react-swc/playground/hmr/package.json +++ b/packages/plugin-react-swc/playground/hmr/package.json @@ -12,7 +12,7 @@ "react-dom": "^19.1.1" }, "devDependencies": { - "@types/react": "^19.1.9", + "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react-swc": "../../dist" } diff --git a/packages/plugin-react-swc/playground/mdx/package.json b/packages/plugin-react-swc/playground/mdx/package.json index 0cfb48fd7..736323d95 100644 --- a/packages/plugin-react-swc/playground/mdx/package.json +++ b/packages/plugin-react-swc/playground/mdx/package.json @@ -13,7 +13,7 @@ }, "devDependencies": { "@mdx-js/rollup": "^3.1.0", - "@types/react": "^19.1.9", + "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react-swc": "../../dist" } diff --git a/packages/plugin-react-swc/playground/shadow-export/package.json b/packages/plugin-react-swc/playground/shadow-export/package.json index b179bb1b6..2e0611a1c 100644 --- a/packages/plugin-react-swc/playground/shadow-export/package.json +++ b/packages/plugin-react-swc/playground/shadow-export/package.json @@ -12,7 +12,7 @@ "react-dom": "^19.1.1" }, "devDependencies": { - "@types/react": "^19.1.9", + "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react-swc": "../../dist" } diff --git a/packages/plugin-react-swc/playground/styled-components/package.json b/packages/plugin-react-swc/playground/styled-components/package.json index 0fb4edd99..469d529d7 100644 --- a/packages/plugin-react-swc/playground/styled-components/package.json +++ b/packages/plugin-react-swc/playground/styled-components/package.json @@ -15,7 +15,7 @@ }, "devDependencies": { "@swc/plugin-styled-components": "^9.0.0", - "@types/react": "^19.1.9", + "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", "@types/styled-components": "^5.1.34", "@vitejs/plugin-react-swc": "../../dist" diff --git a/packages/plugin-react-swc/playground/ts-lib/package.json b/packages/plugin-react-swc/playground/ts-lib/package.json index 8d8050446..19ed09600 100644 --- a/packages/plugin-react-swc/playground/ts-lib/package.json +++ b/packages/plugin-react-swc/playground/ts-lib/package.json @@ -13,7 +13,7 @@ "react-dom": "^19.1.1" }, "devDependencies": { - "@types/react": "^19.1.9", + "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react-swc": "../../dist" } diff --git a/packages/plugin-react-swc/playground/worker/package.json b/packages/plugin-react-swc/playground/worker/package.json index 61ead9aa6..ecc8d5fc8 100644 --- a/packages/plugin-react-swc/playground/worker/package.json +++ b/packages/plugin-react-swc/playground/worker/package.json @@ -12,7 +12,7 @@ "react-dom": "^19.1.1" }, "devDependencies": { - "@types/react": "^19.1.9", + "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react-swc": "../../dist" } diff --git a/packages/plugin-react/package.json b/packages/plugin-react/package.json index 173064457..5a5976b9a 100644 --- a/packages/plugin-react/package.json +++ b/packages/plugin-react/package.json @@ -40,10 +40,10 @@ }, "homepage": "https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react#readme", "dependencies": { - "@babel/core": "^7.28.0", + "@babel/core": "^7.28.3", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", - "@rolldown/pluginutils": "1.0.0-beta.31", + "@rolldown/pluginutils": "1.0.0-beta.32", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, @@ -55,8 +55,8 @@ "babel-plugin-react-compiler": "19.1.0-rc.2", "react": "^19.1.1", "react-dom": "^19.1.1", - "rolldown": "1.0.0-beta.31", - "tsdown": "^0.14.0", + "rolldown": "1.0.0-beta.32", + "tsdown": "^0.14.1", "vitest": "^3.2.4" } } diff --git a/packages/plugin-rsc/examples/basic/package.json b/packages/plugin-rsc/examples/basic/package.json index c2ca3e6bc..d5d6323a5 100644 --- a/packages/plugin-rsc/examples/basic/package.json +++ b/packages/plugin-rsc/examples/basic/package.json @@ -16,8 +16,8 @@ "react-dom": "^19.1.1" }, "devDependencies": { - "@tailwindcss/vite": "^4.1.11", - "@types/react": "^19.1.9", + "@tailwindcss/vite": "^4.1.12", + "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "latest", "@vitejs/plugin-rsc": "latest", @@ -29,9 +29,9 @@ "@vitejs/test-dep-transitive-cjs": "file:./test-dep/transitive-cjs", "@vitejs/test-dep-transitive-use-sync-external-store": "file:./test-dep/transitive-use-sync-external-store", "rsc-html-stream": "^0.0.7", - "tailwindcss": "^4.1.11", - "vite": "^7.1.1", - "wrangler": "^4.28.1" + "tailwindcss": "^4.1.12", + "vite": "^7.1.2", + "wrangler": "^4.30.0" }, "stackblitz": { "installDependencies": false, diff --git a/packages/plugin-rsc/examples/browser-mode/package.json b/packages/plugin-rsc/examples/browser-mode/package.json index dfe3f5f07..fdb948f41 100644 --- a/packages/plugin-rsc/examples/browser-mode/package.json +++ b/packages/plugin-rsc/examples/browser-mode/package.json @@ -14,10 +14,10 @@ "react-dom": "^19.1.1" }, "devDependencies": { - "@types/react": "^19.1.9", + "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "latest", "@vitejs/plugin-rsc": "latest", - "vite": "^7.1.1" + "vite": "^7.1.2" } } diff --git a/packages/plugin-rsc/examples/no-ssr/package.json b/packages/plugin-rsc/examples/no-ssr/package.json index 322fa0ffa..22f367df2 100644 --- a/packages/plugin-rsc/examples/no-ssr/package.json +++ b/packages/plugin-rsc/examples/no-ssr/package.json @@ -14,10 +14,10 @@ "react-dom": "^19.1.1" }, "devDependencies": { - "@types/react": "^19.1.9", + "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "latest", "@vitejs/plugin-rsc": "latest", - "vite": "^7.1.1" + "vite": "^7.1.2" } } diff --git a/packages/plugin-rsc/examples/react-router/package.json b/packages/plugin-rsc/examples/react-router/package.json index 78c8a2a5a..56869fd3e 100644 --- a/packages/plugin-rsc/examples/react-router/package.json +++ b/packages/plugin-rsc/examples/react-router/package.json @@ -18,16 +18,16 @@ "react-router": "7.7.0" }, "devDependencies": { - "@cloudflare/vite-plugin": "^1.11.2", + "@cloudflare/vite-plugin": "^1.11.5", "@react-router/dev": "7.7.0", "@tailwindcss/typography": "^0.5.16", - "@tailwindcss/vite": "^4.1.11", - "@types/react": "^19.1.9", + "@tailwindcss/vite": "^4.1.12", + "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "latest", "@vitejs/plugin-rsc": "latest", - "tailwindcss": "^4.1.11", - "vite": "^7.1.1", - "wrangler": "^4.28.1" + "tailwindcss": "^4.1.12", + "vite": "^7.1.2", + "wrangler": "^4.30.0" } } diff --git a/packages/plugin-rsc/examples/ssg/package.json b/packages/plugin-rsc/examples/ssg/package.json index 7ecf19dcf..b384174a5 100644 --- a/packages/plugin-rsc/examples/ssg/package.json +++ b/packages/plugin-rsc/examples/ssg/package.json @@ -15,7 +15,7 @@ }, "devDependencies": { "@mdx-js/rollup": "^3.1.0", - "@types/react": "^19.1.9", + "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "latest", "@vitejs/plugin-rsc": "latest" diff --git a/packages/plugin-rsc/examples/starter-cf-single/package.json b/packages/plugin-rsc/examples/starter-cf-single/package.json index a0dbed703..fb5bad7c9 100644 --- a/packages/plugin-rsc/examples/starter-cf-single/package.json +++ b/packages/plugin-rsc/examples/starter-cf-single/package.json @@ -15,12 +15,12 @@ "react-dom": "^19.1.1" }, "devDependencies": { - "@cloudflare/vite-plugin": "^1.11.2", - "@types/react": "^19.1.9", + "@cloudflare/vite-plugin": "^1.11.5", + "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "latest", "@vitejs/plugin-rsc": "latest", "rsc-html-stream": "^0.0.7", - "vite": "^7.1.1" + "vite": "^7.1.2" } } diff --git a/packages/plugin-rsc/examples/starter/package.json b/packages/plugin-rsc/examples/starter/package.json index 6fbe7c15e..c5c985668 100644 --- a/packages/plugin-rsc/examples/starter/package.json +++ b/packages/plugin-rsc/examples/starter/package.json @@ -14,11 +14,11 @@ "react-dom": "^19.1.1" }, "devDependencies": { - "@types/react": "^19.1.9", + "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "latest", "@vitejs/plugin-rsc": "latest", "rsc-html-stream": "^0.0.7", - "vite": "^7.1.1" + "vite": "^7.1.2" } } diff --git a/packages/plugin-rsc/package.json b/packages/plugin-rsc/package.json index fd90398c2..05c306758 100644 --- a/packages/plugin-rsc/package.json +++ b/packages/plugin-rsc/package.json @@ -51,8 +51,8 @@ "@playwright/test": "^1.54.2", "@tsconfig/strictest": "^2.0.5", "@types/estree": "^1.0.8", - "@types/node": "^22.17.1", - "@types/react": "^19.1.9", + "@types/node": "^22.17.2", + "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "workspace:*", "react": "^19.1.1", @@ -60,7 +60,7 @@ "react-server-dom-webpack": "^19.1.1", "rsc-html-stream": "^0.0.7", "tinyexec": "^1.0.1", - "tsdown": "^0.14.0" + "tsdown": "^0.14.1" }, "peerDependencies": { "react": "*", diff --git a/playground/class-components/package.json b/playground/class-components/package.json index ecb009386..001ed2769 100644 --- a/playground/class-components/package.json +++ b/playground/class-components/package.json @@ -12,7 +12,7 @@ "react-dom": "^19.1.1" }, "devDependencies": { - "@types/react": "^19.1.9", + "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "workspace:*" } diff --git a/playground/compiler/package.json b/playground/compiler/package.json index e1d839c3b..b57857e8b 100644 --- a/playground/compiler/package.json +++ b/playground/compiler/package.json @@ -13,7 +13,7 @@ }, "devDependencies": { "@babel/plugin-transform-react-jsx-development": "^7.27.1", - "@types/react": "^19.1.9", + "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "workspace:*", "babel-plugin-react-compiler": "19.1.0-rc.2", diff --git a/playground/hmr-false/package.json b/playground/hmr-false/package.json index 69f2e2afe..8938ec8a4 100644 --- a/playground/hmr-false/package.json +++ b/playground/hmr-false/package.json @@ -13,7 +13,7 @@ "react-dom": "^19.1.1" }, "devDependencies": { - "@types/react": "^19.1.9", + "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "workspace:*" } diff --git a/playground/hook-with-jsx/package.json b/playground/hook-with-jsx/package.json index 6cd521df3..0e44cd73b 100644 --- a/playground/hook-with-jsx/package.json +++ b/playground/hook-with-jsx/package.json @@ -12,7 +12,7 @@ "react-dom": "^19.1.1" }, "devDependencies": { - "@types/react": "^19.1.9", + "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "workspace:*" } diff --git a/playground/include-node-modules/package.json b/playground/include-node-modules/package.json index ca2b602f9..20add2b94 100644 --- a/playground/include-node-modules/package.json +++ b/playground/include-node-modules/package.json @@ -13,7 +13,7 @@ }, "devDependencies": { "@types/babel__core": "^7.20.5", - "@types/react": "^19.1.9", + "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "workspace:*", "@vitejs/test-package": "file:./test-package" diff --git a/playground/mdx/package.json b/playground/mdx/package.json index 286fcb0ec..fb120ef21 100644 --- a/playground/mdx/package.json +++ b/playground/mdx/package.json @@ -13,7 +13,7 @@ }, "devDependencies": { "@mdx-js/rollup": "^3.1.0", - "@types/react": "^19.1.9", + "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "workspace:*" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dcea07a9e..bdbf04429 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,8 +7,8 @@ settings: catalogs: rolldown-vite: vite: - specifier: npm:rolldown-vite@^7.1.0 - version: 7.1.0 + specifier: npm:rolldown-vite@^7.1.2 + version: 7.1.2 overrides: '@types/estree': ^1.0.8 @@ -24,23 +24,23 @@ importers: specifier: ^11.0.4 version: 11.0.4 '@types/node': - specifier: ^22.17.1 - version: 22.17.1 + specifier: ^22.17.2 + version: 22.17.2 '@vitejs/release-scripts': specifier: ^1.6.0 version: 1.6.0(conventional-commits-filter@5.0.0) eslint: specifier: ^9.33.0 - version: 9.33.0(jiti@2.4.2) + version: 9.33.0(jiti@2.5.1) eslint-plugin-import-x: specifier: ^4.16.1 - version: 4.16.1(@typescript-eslint/utils@8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2))(eslint@9.33.0(jiti@2.4.2)) + version: 4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1)) eslint-plugin-n: specifier: ^17.21.3 - version: 17.21.3(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2) + version: 17.21.3(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) eslint-plugin-regexp: specifier: ^2.10.0 - version: 2.10.0(eslint@9.33.0(jiti@2.4.2)) + version: 2.10.0(eslint@9.33.0(jiti@2.5.1)) fs-extra: specifier: ^11.3.1 version: 11.3.1 @@ -63,40 +63,40 @@ importers: specifier: ^2.13.1 version: 2.13.1 tsx: - specifier: ^4.20.3 - version: 4.20.3 + specifier: ^4.20.4 + version: 4.20.4 typescript: specifier: ^5.9.2 version: 5.9.2 typescript-eslint: - specifier: ^8.39.0 - version: 8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2) + specifier: ^8.39.1 + version: 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) vite: - specifier: ^7.1.1 - version: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + specifier: ^7.1.2 + version: 7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1) vite-plugin-inspect: specifier: ^11.3.2 - version: 11.3.2(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 11.3.2(vite@7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1)) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1) packages/common: {} packages/plugin-react: dependencies: '@babel/core': - specifier: ^7.28.0 - version: 7.28.0 + specifier: ^7.28.3 + version: 7.28.3 '@babel/plugin-transform-react-jsx-self': specifier: ^7.27.1 - version: 7.27.1(@babel/core@7.28.0) + version: 7.27.1(@babel/core@7.28.3) '@babel/plugin-transform-react-jsx-source': specifier: ^7.27.1 - version: 7.27.1(@babel/core@7.28.0) + version: 7.27.1(@babel/core@7.28.3) '@rolldown/pluginutils': - specifier: 1.0.0-beta.31 - version: 1.0.0-beta.31 + specifier: 1.0.0-beta.32 + version: 1.0.0-beta.32 '@types/babel__core': specifier: ^7.20.5 version: 7.20.5 @@ -117,36 +117,36 @@ importers: specifier: ^19.1.1 version: 19.1.1(react@19.1.1) rolldown: - specifier: 1.0.0-beta.31 - version: 1.0.0-beta.31 + specifier: 1.0.0-beta.32 + version: 1.0.0-beta.32 tsdown: - specifier: ^0.14.0 - version: 0.14.0(publint@0.3.12)(typescript@5.9.2) + specifier: ^0.14.1 + version: 0.14.1(publint@0.3.12)(typescript@5.9.2) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1) packages/plugin-react-oxc: dependencies: '@rolldown/pluginutils': - specifier: 1.0.0-beta.31 - version: 1.0.0-beta.31 + specifier: 1.0.0-beta.32 + version: 1.0.0-beta.32 devDependencies: '@vitejs/react-common': specifier: workspace:* version: link:../common tsdown: - specifier: ^0.14.0 - version: 0.14.0(publint@0.3.12)(typescript@5.9.2) + specifier: ^0.14.1 + version: 0.14.1(publint@0.3.12)(typescript@5.9.2) vite: specifier: catalog:rolldown-vite - version: rolldown-vite@7.1.0(@types/node@22.17.1)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1) + version: rolldown-vite@7.1.2(@types/node@22.17.2)(esbuild@0.25.5)(jiti@2.5.1)(tsx@4.20.4)(yaml@2.7.1) packages/plugin-react-swc: dependencies: '@rolldown/pluginutils': - specifier: 1.0.0-beta.31 - version: 1.0.0-beta.31 + specifier: 1.0.0-beta.32 + version: 1.0.0-beta.32 '@swc/core': specifier: ^1.13.2 version: 1.13.2 @@ -158,8 +158,8 @@ importers: specifier: ^11.0.4 version: 11.0.4 '@types/node': - specifier: ^22.17.1 - version: 22.17.1 + specifier: ^22.17.2 + version: 22.17.2 '@vitejs/react-common': specifier: workspace:* version: link:../common @@ -170,8 +170,8 @@ importers: specifier: ^3.0.3 version: 3.6.2 tsdown: - specifier: ^0.14.0 - version: 0.14.0(publint@0.3.12)(typescript@5.9.2) + specifier: ^0.14.1 + version: 0.14.1(publint@0.3.12)(typescript@5.9.2) typescript: specifier: ^5.9.2 version: 5.9.2 @@ -186,11 +186,11 @@ importers: version: 19.1.1(react@19.1.1) devDependencies: '@types/react': - specifier: ^19.1.9 - version: 19.1.9 + specifier: ^19.1.10 + version: 19.1.10 '@types/react-dom': specifier: ^19.1.7 - version: 19.1.7(@types/react@19.1.9) + version: 19.1.7(@types/react@19.1.10) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -205,11 +205,11 @@ importers: version: 19.1.1(react@19.1.1) devDependencies: '@types/react': - specifier: ^19.1.9 - version: 19.1.9 + specifier: ^19.1.10 + version: 19.1.10 '@types/react-dom': specifier: ^19.1.7 - version: 19.1.7(@types/react@19.1.9) + version: 19.1.7(@types/react@19.1.10) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -224,11 +224,11 @@ importers: version: 19.1.1(react@19.1.1) devDependencies: '@types/react': - specifier: ^19.1.9 - version: 19.1.9 + specifier: ^19.1.10 + version: 19.1.10 '@types/react-dom': specifier: ^19.1.7 - version: 19.1.7(@types/react@19.1.9) + version: 19.1.7(@types/react@19.1.10) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -237,10 +237,10 @@ importers: dependencies: '@emotion/react': specifier: ^11.14.0 - version: 11.14.0(@types/react@19.1.9)(react@19.1.1) + version: 11.14.0(@types/react@19.1.10)(react@19.1.1) '@emotion/styled': specifier: ^11.14.1 - version: 11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1) + version: 11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1) react: specifier: ^19.1.1 version: 19.1.1 @@ -249,11 +249,11 @@ importers: version: 19.1.1(react@19.1.1) devDependencies: '@types/react': - specifier: ^19.1.9 - version: 19.1.9 + specifier: ^19.1.10 + version: 19.1.10 '@types/react-dom': specifier: ^19.1.7 - version: 19.1.7(@types/react@19.1.9) + version: 19.1.7(@types/react@19.1.10) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -262,10 +262,10 @@ importers: dependencies: '@emotion/react': specifier: ^11.14.0 - version: 11.14.0(@types/react@19.1.9)(react@19.1.1) + version: 11.14.0(@types/react@19.1.10)(react@19.1.1) '@emotion/styled': specifier: ^11.14.1 - version: 11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1) + version: 11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1) react: specifier: ^19.1.1 version: 19.1.1 @@ -277,11 +277,11 @@ importers: specifier: ^11.0.0 version: 11.0.0 '@types/react': - specifier: ^19.1.9 - version: 19.1.9 + specifier: ^19.1.10 + version: 19.1.10 '@types/react-dom': specifier: ^19.1.7 - version: 19.1.7(@types/react@19.1.9) + version: 19.1.7(@types/react@19.1.10) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -296,11 +296,11 @@ importers: version: 19.1.1(react@19.1.1) devDependencies: '@types/react': - specifier: ^19.1.9 - version: 19.1.9 + specifier: ^19.1.10 + version: 19.1.10 '@types/react-dom': specifier: ^19.1.7 - version: 19.1.7(@types/react@19.1.9) + version: 19.1.7(@types/react@19.1.10) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -318,11 +318,11 @@ importers: specifier: ^3.1.0 version: 3.1.0(rollup@4.44.1) '@types/react': - specifier: ^19.1.9 - version: 19.1.9 + specifier: ^19.1.10 + version: 19.1.10 '@types/react-dom': specifier: ^19.1.7 - version: 19.1.7(@types/react@19.1.9) + version: 19.1.7(@types/react@19.1.10) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -356,11 +356,11 @@ importers: version: 19.1.1(react@19.1.1) devDependencies: '@types/react': - specifier: ^19.1.9 - version: 19.1.9 + specifier: ^19.1.10 + version: 19.1.10 '@types/react-dom': specifier: ^19.1.7 - version: 19.1.7(@types/react@19.1.9) + version: 19.1.7(@types/react@19.1.10) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -384,11 +384,11 @@ importers: specifier: ^9.0.0 version: 9.0.0 '@types/react': - specifier: ^19.1.9 - version: 19.1.9 + specifier: ^19.1.10 + version: 19.1.10 '@types/react-dom': specifier: ^19.1.7 - version: 19.1.7(@types/react@19.1.9) + version: 19.1.7(@types/react@19.1.10) '@types/styled-components': specifier: ^5.1.34 version: 5.1.34 @@ -409,11 +409,11 @@ importers: version: 19.1.1(react@19.1.1) devDependencies: '@types/react': - specifier: ^19.1.9 - version: 19.1.9 + specifier: ^19.1.10 + version: 19.1.10 '@types/react-dom': specifier: ^19.1.7 - version: 19.1.7(@types/react@19.1.9) + version: 19.1.7(@types/react@19.1.10) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -430,11 +430,11 @@ importers: version: 19.1.1(react@19.1.1) devDependencies: '@types/react': - specifier: ^19.1.9 - version: 19.1.9 + specifier: ^19.1.10 + version: 19.1.10 '@types/react-dom': specifier: ^19.1.7 - version: 19.1.7(@types/react@19.1.9) + version: 19.1.7(@types/react@19.1.10) '@vitejs/plugin-react-swc': specifier: ../../dist version: link:../../dist @@ -461,7 +461,7 @@ importers: version: 3.1.0 vitefu: specifier: ^1.1.1 - version: 1.1.1(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + version: 1.1.1(vite@7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1)) devDependencies: '@hiogawa/utils': specifier: ^1.7.0 @@ -476,14 +476,14 @@ importers: specifier: ^1.0.8 version: 1.0.8 '@types/node': - specifier: ^22.17.1 - version: 22.17.1 + specifier: ^22.17.2 + version: 22.17.2 '@types/react': - specifier: ^19.1.9 - version: 19.1.9 + specifier: ^19.1.10 + version: 19.1.10 '@types/react-dom': specifier: ^19.1.7 - version: 19.1.7(@types/react@19.1.9) + version: 19.1.7(@types/react@19.1.10) '@vitejs/plugin-react': specifier: workspace:* version: link:../plugin-react @@ -503,8 +503,8 @@ importers: specifier: ^1.0.1 version: 1.0.1 tsdown: - specifier: ^0.14.0 - version: 0.14.0(publint@0.3.12)(typescript@5.9.2) + specifier: ^0.14.1 + version: 0.14.1(publint@0.3.12)(typescript@5.9.2) packages/plugin-rsc/examples/basic: dependencies: @@ -516,14 +516,14 @@ importers: version: 19.1.1(react@19.1.1) devDependencies: '@tailwindcss/vite': - specifier: ^4.1.11 - version: 4.1.11(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + specifier: ^4.1.12 + version: 4.1.12(vite@7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1)) '@types/react': - specifier: ^19.1.9 - version: 19.1.9 + specifier: ^19.1.10 + version: 19.1.10 '@types/react-dom': specifier: ^19.1.7 - version: 19.1.7(@types/react@19.1.9) + version: 19.1.7(@types/react@19.1.10) '@vitejs/plugin-react': specifier: latest version: link:../../../plugin-react @@ -555,14 +555,14 @@ importers: specifier: ^0.0.7 version: 0.0.7 tailwindcss: - specifier: ^4.1.11 - version: 4.1.11 + specifier: ^4.1.12 + version: 4.1.12 vite: - specifier: ^7.1.1 - version: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + specifier: ^7.1.2 + version: 7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1) wrangler: - specifier: ^4.28.1 - version: 4.28.1 + specifier: ^4.30.0 + version: 4.30.0 packages/plugin-rsc/examples/browser-mode: dependencies: @@ -574,11 +574,11 @@ importers: version: 19.1.1(react@19.1.1) devDependencies: '@types/react': - specifier: ^19.1.9 - version: 19.1.9 + specifier: ^19.1.10 + version: 19.1.10 '@types/react-dom': specifier: ^19.1.7 - version: 19.1.7(@types/react@19.1.9) + version: 19.1.7(@types/react@19.1.10) '@vitejs/plugin-react': specifier: latest version: link:../../../plugin-react @@ -586,8 +586,8 @@ importers: specifier: latest version: link:../.. vite: - specifier: ^7.1.1 - version: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + specifier: ^7.1.2 + version: 7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1) packages/plugin-rsc/examples/e2e: devDependencies: @@ -611,11 +611,11 @@ importers: version: 19.1.1(react@19.1.1) devDependencies: '@types/react': - specifier: ^19.1.9 - version: 19.1.9 + specifier: ^19.1.10 + version: 19.1.10 '@types/react-dom': specifier: ^19.1.7 - version: 19.1.7(@types/react@19.1.9) + version: 19.1.7(@types/react@19.1.10) '@vitejs/plugin-react': specifier: latest version: link:../../../plugin-react @@ -623,8 +623,8 @@ importers: specifier: latest version: link:../.. vite: - specifier: ^7.1.1 - version: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + specifier: ^7.1.2 + version: 7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1) packages/plugin-rsc/examples/react-router: dependencies: @@ -639,23 +639,23 @@ importers: version: 7.7.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) devDependencies: '@cloudflare/vite-plugin': - specifier: ^1.11.2 - version: 1.11.2(rollup@4.44.1)(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250803.0)(wrangler@4.28.1) + specifier: ^1.11.5 + version: 1.11.5(rollup@4.44.1)(vite@7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1))(workerd@1.20250813.0)(wrangler@4.30.0) '@react-router/dev': specifier: 7.7.0 - version: 7.7.0(@types/node@22.17.1)(babel-plugin-macros@3.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(react-router@7.7.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(tsx@4.20.3)(typescript@5.9.2)(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(wrangler@4.28.1)(yaml@2.7.1) + version: 7.7.0(@types/node@22.17.2)(babel-plugin-macros@3.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(react-router@7.7.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(tsx@4.20.4)(typescript@5.9.2)(vite@7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1))(wrangler@4.30.0)(yaml@2.7.1) '@tailwindcss/typography': specifier: ^0.5.16 - version: 0.5.16(tailwindcss@4.1.11) + version: 0.5.16(tailwindcss@4.1.12) '@tailwindcss/vite': - specifier: ^4.1.11 - version: 4.1.11(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + specifier: ^4.1.12 + version: 4.1.12(vite@7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1)) '@types/react': - specifier: ^19.1.9 - version: 19.1.9 + specifier: ^19.1.10 + version: 19.1.10 '@types/react-dom': specifier: ^19.1.7 - version: 19.1.7(@types/react@19.1.9) + version: 19.1.7(@types/react@19.1.10) '@vitejs/plugin-react': specifier: latest version: link:../../../plugin-react @@ -663,14 +663,14 @@ importers: specifier: latest version: link:../.. tailwindcss: - specifier: ^4.1.11 - version: 4.1.11 + specifier: ^4.1.12 + version: 4.1.12 vite: - specifier: ^7.1.1 - version: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + specifier: ^7.1.2 + version: 7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1) wrangler: - specifier: ^4.28.1 - version: 4.28.1 + specifier: ^4.30.0 + version: 4.30.0 packages/plugin-rsc/examples/ssg: dependencies: @@ -685,11 +685,11 @@ importers: specifier: ^3.1.0 version: 3.1.0(rollup@4.44.1) '@types/react': - specifier: ^19.1.9 - version: 19.1.9 + specifier: ^19.1.10 + version: 19.1.10 '@types/react-dom': specifier: ^19.1.7 - version: 19.1.7(@types/react@19.1.9) + version: 19.1.7(@types/react@19.1.10) '@vitejs/plugin-react': specifier: latest version: link:../../../plugin-react @@ -707,11 +707,11 @@ importers: version: 19.1.1(react@19.1.1) devDependencies: '@types/react': - specifier: ^19.1.9 - version: 19.1.9 + specifier: ^19.1.10 + version: 19.1.10 '@types/react-dom': specifier: ^19.1.7 - version: 19.1.7(@types/react@19.1.9) + version: 19.1.7(@types/react@19.1.10) '@vitejs/plugin-react': specifier: latest version: link:../../../plugin-react @@ -722,8 +722,8 @@ importers: specifier: ^0.0.7 version: 0.0.7 vite: - specifier: ^7.1.1 - version: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + specifier: ^7.1.2 + version: 7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1) packages/plugin-rsc/examples/starter-cf-single: dependencies: @@ -735,14 +735,14 @@ importers: version: 19.1.1(react@19.1.1) devDependencies: '@cloudflare/vite-plugin': - specifier: ^1.11.2 - version: 1.11.2(rollup@4.44.1)(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250803.0)(wrangler@4.28.1) + specifier: ^1.11.5 + version: 1.11.5(rollup@4.44.1)(vite@7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1))(workerd@1.20250813.0)(wrangler@4.30.0) '@types/react': - specifier: ^19.1.9 - version: 19.1.9 + specifier: ^19.1.10 + version: 19.1.10 '@types/react-dom': specifier: ^19.1.7 - version: 19.1.7(@types/react@19.1.9) + version: 19.1.7(@types/react@19.1.10) '@vitejs/plugin-react': specifier: latest version: link:../../../plugin-react @@ -753,8 +753,8 @@ importers: specifier: ^0.0.7 version: 0.0.7 vite: - specifier: ^7.1.1 - version: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + specifier: ^7.1.2 + version: 7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1) playground: devDependencies: @@ -775,11 +775,11 @@ importers: version: 19.1.1(react@19.1.1) devDependencies: '@types/react': - specifier: ^19.1.9 - version: 19.1.9 + specifier: ^19.1.10 + version: 19.1.10 '@types/react-dom': specifier: ^19.1.7 - version: 19.1.7(@types/react@19.1.9) + version: 19.1.7(@types/react@19.1.10) '@vitejs/plugin-react': specifier: workspace:* version: link:../../packages/plugin-react @@ -795,13 +795,13 @@ importers: devDependencies: '@babel/plugin-transform-react-jsx-development': specifier: ^7.27.1 - version: 7.27.1(@babel/core@7.28.0) + version: 7.27.1(@babel/core@7.28.3) '@types/react': - specifier: ^19.1.9 - version: 19.1.9 + specifier: ^19.1.10 + version: 19.1.10 '@types/react-dom': specifier: ^19.1.7 - version: 19.1.7(@types/react@19.1.9) + version: 19.1.7(@types/react@19.1.10) '@vitejs/plugin-react': specifier: workspace:* version: link:../../packages/plugin-react @@ -826,7 +826,7 @@ importers: devDependencies: '@babel/plugin-transform-react-jsx-development': specifier: ^7.27.1 - version: 7.27.1(@babel/core@7.28.0) + version: 7.27.1(@babel/core@7.28.3) '@types/react': specifier: ^18.3.20 version: 18.3.20 @@ -853,11 +853,11 @@ importers: version: 19.1.1(react@19.1.1) devDependencies: '@types/react': - specifier: ^19.1.9 - version: 19.1.9 + specifier: ^19.1.10 + version: 19.1.10 '@types/react-dom': specifier: ^19.1.7 - version: 19.1.7(@types/react@19.1.9) + version: 19.1.7(@types/react@19.1.10) '@vitejs/plugin-react': specifier: workspace:* version: link:../../packages/plugin-react @@ -872,11 +872,11 @@ importers: version: 19.1.1(react@19.1.1) devDependencies: '@types/react': - specifier: ^19.1.9 - version: 19.1.9 + specifier: ^19.1.10 + version: 19.1.10 '@types/react-dom': specifier: ^19.1.7 - version: 19.1.7(@types/react@19.1.9) + version: 19.1.7(@types/react@19.1.10) '@vitejs/plugin-react': specifier: workspace:* version: link:../../packages/plugin-react @@ -894,11 +894,11 @@ importers: specifier: ^7.20.5 version: 7.20.5 '@types/react': - specifier: ^19.1.9 - version: 19.1.9 + specifier: ^19.1.10 + version: 19.1.10 '@types/react-dom': specifier: ^19.1.7 - version: 19.1.7(@types/react@19.1.9) + version: 19.1.7(@types/react@19.1.10) '@vitejs/plugin-react': specifier: workspace:* version: link:../../packages/plugin-react @@ -921,11 +921,11 @@ importers: specifier: ^3.1.0 version: 3.1.0(rollup@4.44.1) '@types/react': - specifier: ^19.1.9 - version: 19.1.9 + specifier: ^19.1.10 + version: 19.1.10 '@types/react-dom': specifier: ^19.1.7 - version: 19.1.7(@types/react@19.1.9) + version: 19.1.7(@types/react@19.1.10) '@vitejs/plugin-react': specifier: workspace:* version: link:../../packages/plugin-react @@ -963,10 +963,10 @@ importers: dependencies: '@emotion/react': specifier: ^11.14.0 - version: 11.14.0(@types/react@19.1.9)(react@19.1.1) + version: 11.14.0(@types/react@19.1.10)(react@19.1.1) '@emotion/styled': specifier: ^11.14.1 - version: 11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1) + version: 11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1) react: specifier: ^19.1.1 version: 19.1.1 @@ -979,7 +979,7 @@ importers: devDependencies: '@babel/plugin-proposal-pipeline-operator': specifier: ^7.27.1 - version: 7.27.1(@babel/core@7.28.0) + version: 7.27.1(@babel/core@7.28.3) '@emotion/babel-plugin': specifier: ^11.13.5 version: 11.13.5 @@ -1046,14 +1046,18 @@ packages: resolution: {integrity: sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==} engines: {node: '>=6.9.0'} - '@babel/core@7.28.0': - resolution: {integrity: sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==} + '@babel/core@7.28.3': + resolution: {integrity: sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==} engines: {node: '>=6.9.0'} '@babel/generator@7.28.0': resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==} engines: {node: '>=6.9.0'} + '@babel/generator@7.28.3': + resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} + engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.27.3': resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} engines: {node: '>=6.9.0'} @@ -1086,6 +1090,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.28.3': + resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-optimise-call-expression@7.27.1': resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} engines: {node: '>=6.9.0'} @@ -1116,8 +1126,8 @@ packages: resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.27.6': - resolution: {integrity: sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==} + '@babel/helpers@7.28.3': + resolution: {integrity: sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==} engines: {node: '>=6.9.0'} '@babel/parser@7.28.0': @@ -1125,6 +1135,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.28.3': + resolution: {integrity: sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-proposal-pipeline-operator@7.27.1': resolution: {integrity: sha512-3q36hiN0qG4KI+rDVJW3HVIQWLnX09E+QkraVJYWG4QPqOgiZaeyIFOfTyzWE2ZDVo9ZO0LZeyvBM8T+nhPlZA==} engines: {node: '>=6.9.0'} @@ -1203,6 +1218,10 @@ packages: resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.28.3': + resolution: {integrity: sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==} + engines: {node: '>=6.9.0'} + '@babel/types@7.28.1': resolution: {integrity: sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==} engines: {node: '>=6.9.0'} @@ -1215,8 +1234,8 @@ packages: resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==} engines: {node: '>=18.0.0'} - '@cloudflare/unenv-preset@2.6.0': - resolution: {integrity: sha512-h7Txw0WbDuUbrvZwky6+x7ft+U/Gppfn/rWx6IdR+e9gjygozRJnV26Y2TOr3yrIFa6OsZqqR2lN+jWTrakHXg==} + '@cloudflare/unenv-preset@2.6.1': + resolution: {integrity: sha512-48rC6jo9CkSRkImfu5KU4zKyoPJx7b9GTUpZn0Emr6J+jkmrLhwCY3BI10QS+fhOt1NkJNlxIcYrBgvWeCpKOw==} peerDependencies: unenv: 2.0.0-rc.19 workerd: ^1.20250802.0 @@ -1224,38 +1243,38 @@ packages: workerd: optional: true - '@cloudflare/vite-plugin@1.11.2': - resolution: {integrity: sha512-iY/XTYE3TCZLXaIYGljGQeG81XmUkQ2ZOqzVs56a+5QQyxkA9S8sqfBh/FX0vwzUASLFVUru0WsyqCB4fxrSAA==} + '@cloudflare/vite-plugin@1.11.5': + resolution: {integrity: sha512-un5CFooAJhnoOQVX98a90m2fmeqp1UOZF0619yOZvkm4E/9xTrO9Qq72f8bG7jxiliF7kuy/VzY0ixjRhZaZYw==} peerDependencies: vite: ^6.1.0 || ^7.0.0 - wrangler: ^4.28.1 + wrangler: ^4.30.0 - '@cloudflare/workerd-darwin-64@1.20250803.0': - resolution: {integrity: sha512-6QciMnJp1p3F1qUiN0LaLfmw7SuZA/gfUBOe8Ft81pw16JYZ3CyiqIKPJvc1SV8jgDx8r+gz/PRi1NwOMt329A==} + '@cloudflare/workerd-darwin-64@1.20250813.0': + resolution: {integrity: sha512-Pka37/jqLy7ZaQlwpBy79A/BLH+qpRPSEX2h/zWND+qRfoCVCCaZQPdknHZO0pcvHPzK8E2Z4j5QI1IafPA5UA==} engines: {node: '>=16'} cpu: [x64] os: [darwin] - '@cloudflare/workerd-darwin-arm64@1.20250803.0': - resolution: {integrity: sha512-DoIgghDowtqoNhL6OoN/F92SKtrk7mRQKc4YSs/Dst8IwFZq+pCShOlWfB0MXqHKPSoiz5xLSrUKR9H6gQMPvw==} + '@cloudflare/workerd-darwin-arm64@1.20250813.0': + resolution: {integrity: sha512-QnaJbmhcA32+4uZ+or1hXZjdxGqrFUuh6Ye+skEGu3iB/xzq9CmyVyoKoshiUOcWGKndQb7KRo56dq0bVvVLFw==} engines: {node: '>=16'} cpu: [arm64] os: [darwin] - '@cloudflare/workerd-linux-64@1.20250803.0': - resolution: {integrity: sha512-mYdz4vNWX3+PoqRjssepVQqgh42IBiSrl+wb7vbh7VVWUVzBnQKtW3G+UFiBF62hohCLexGIEi7L0cFfRlcKSQ==} + '@cloudflare/workerd-linux-64@1.20250813.0': + resolution: {integrity: sha512-6pokgBQmujJsAuqOme2wBX5ol/1YW3d7kV7wp0Y1/tFi46TnmWcEy08B4FD5t2AARQJ68a7XMxIJKWChcaJ9Cg==} engines: {node: '>=16'} cpu: [x64] os: [linux] - '@cloudflare/workerd-linux-arm64@1.20250803.0': - resolution: {integrity: sha512-RmrtUYLRUg6djKU7Z6yebS6YGJVnaDVY6bbXca+2s26vw4ibJDOTPLuBHFQF62Grw3fAfsNbjQh5i14vG2mqUg==} + '@cloudflare/workerd-linux-arm64@1.20250813.0': + resolution: {integrity: sha512-lFwqohi8fkR98OwjHT69sbThx4BJem7vu6N8kqrge7wuKJWrMDNbzOTdyBA8adV9DmE07ELuN2vcbbu8ZjaL2Q==} engines: {node: '>=16'} cpu: [arm64] os: [linux] - '@cloudflare/workerd-windows-64@1.20250803.0': - resolution: {integrity: sha512-uLV8gdudz36o9sUaAKbBxxTwZwLFz1KyW7QpBvOo4+r3Ib8yVKXGiySIMWGD7A0urSMrjf3e5LlLcJKgZUOjMA==} + '@cloudflare/workerd-windows-64@1.20250813.0': + resolution: {integrity: sha512-Fs62NvUajtoXb+4W8jaRXzw64Nbmb8X+PbRLZbxUFv68sGhxKPw1nB1YEmNNZ215ma47hTlSdF3UQh4FOmz7NA==} engines: {node: '>=16'} cpu: [x64] os: [win32] @@ -1825,6 +1844,9 @@ packages: '@jridgewell/gen-mapping@0.3.12': resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + '@jridgewell/resolve-uri@3.1.1': resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} @@ -1855,9 +1877,6 @@ packages: '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - '@napi-rs/wasm-runtime@1.0.1': - resolution: {integrity: sha512-KVlQ/jgywZpixGCKMNwxStmmbYEMyokZpCf2YuIChhfJA2uqfAKNEM8INz7zzTo55iEXfBhIIs3VqYyqzDLj8g==} - '@napi-rs/wasm-runtime@1.0.3': resolution: {integrity: sha512-rZxtMsLwjdXkMUGC3WwsPwLNVqVqnTJT6MNIB6e+5fhMcSCPP0AOsNWuMQ5mdCq6HNjs/ZeWAEchpqeprqBD2Q==} @@ -1885,17 +1904,10 @@ packages: resolution: {integrity: sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - '@oxc-project/runtime@0.80.0': - resolution: {integrity: sha512-3rzy1bJAZ4s7zV9TKT60x119RwJDCDqEtCwK/Zc2qlm7wGhiIUxLLYUhE/mN91yB0u1kxm5sh4NjU12sPqQTpg==} - engines: {node: '>=6.9.0'} - '@oxc-project/runtime@0.81.0': resolution: {integrity: sha512-zm/LDVOq9FEmHiuM8zO4DWirv0VP2Tv2VsgaiHby9nvpq+FVrcqNYgv+TysLKOITQXWZj/roluTxFvpkHP0Iuw==} engines: {node: '>=6.9.0'} - '@oxc-project/types@0.80.0': - resolution: {integrity: sha512-xxHQm8wfCv2e8EmtaDwpMeAHOWqgQDAYg+BJouLXSQt5oTKu9TIXrgNMGSrM2fLvKmECsRd9uUFAAD+hPyootA==} - '@oxc-project/types@0.81.0': resolution: {integrity: sha512-CnOqkybZK8z6Gx7Wb1qF7AEnSzbol1WwcIzxYOr8e91LytGOjo0wCpgoYWZo8sdbpqX+X+TJayIzo4Pv0R/KjA==} @@ -1959,96 +1971,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.32': resolution: {integrity: sha512-Gs+313LfR4Ka3hvifdag9r44WrdKQaohya7ZXUXzARF7yx0atzFlVZjsvxtKAw1Vmtr4hB/RjUD1jf73SW7zDw==} 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.32': resolution: {integrity: sha512-W8oMqzGcI7wKPXUtS3WJNXzbghHfNiuM1UBAGpVb+XlUCgYRQJd2PRGP7D3WGql3rR3QEhUvSyAuCBAftPQw6Q==} 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.32': resolution: {integrity: sha512-pM4c4sKUk37noJrnnDkJknLhCsfZu7aWyfe67bD0GQHfzAPjV16wPeD9CmQg4/0vv+5IfHYaa4VE536xbA+W0Q==} 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.32': resolution: {integrity: sha512-M8SUgFlYb5kJJWcFC8gUMRiX4WLFxPKMed3SJ2YrxontgIrEcpizPU8nLNVsRYEStoSfKHKExpQw3OP6fm+5bw==} 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.32': resolution: {integrity: sha512-FuQpbNC/hE//bvv29PFnk0AtpJzdPdYl5CMhlWPovd9g3Kc3lw9TrEPIbL7gRPUdhKAiq6rVaaGvOnXxsa0eww==} 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.32': resolution: {integrity: sha512-hRZygRlaGCjcNTNY9GV7dDI18sG1dK3cc7ujHq72LoDad23zFDUGMQjiSxHWK+/r92iMV+j2MiHbvzayxqynsg==} 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.32': resolution: {integrity: sha512-HzgT6h+CXLs+GKAU0Wvkt3rvcv0CmDBsDjlPhh4GHysOKbG9NjpKYX2zvjx671E9pGbTvcPpwy7gGsy7xpu+8g==} 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.32': resolution: {integrity: sha512-Ab/wbf6gdzphDbsg51UaxsC93foQ7wxhtg0SVCXd25BrV4MAJ1HoDtKN/f4h0maFmJobkqYub2DlmoasUzkvBg==} 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.32': resolution: {integrity: sha512-VoxqGEfh5A1Yx+zBp/FR5QwAbtzbuvky2SVc+ii4g1gLD4zww6mt/hPi5zG+b88zYPFBKHpxMtsz9cWqXU5V5Q==} cpu: [x64] @@ -2059,49 +2021,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.32': resolution: {integrity: sha512-hEkG3wD+f3wytV0lqwb/uCrXc4r4Ny/DWJFJPfQR3VeMWplhWGgSHNwZc2Q7k86Yi36f9NNzzWmrIuvHI9lCVw==} 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.32': resolution: {integrity: sha512-k3MvDf8SiA7uP2ikP0unNouJ2YCrnwi7xcVW+RDgMp5YXVr3Xu6svmT3HGn0tkCKUuPmf+uy8I5uiHt5qWQbew==} 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.32': resolution: {integrity: sha512-wAi/FxGh7arDOUG45UmnXE1sZUa0hY4cXAO2qWAjFa3f7bTgz/BqwJ7XN5SUezvAJPNkME4fEpInfnBvM25a0w==} 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.32': resolution: {integrity: sha512-Ej0i4PZk8ltblZtzVK8ouaGUacUtxRmTm5S9794mdyU/tYxXjAJNseOfxrnHpMWKjMDrOKbqkPqJ52T9NR4LQQ==} 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.32': resolution: {integrity: sha512-QReCdvxiUZAPkvp1xpAg62IeNzykOFA6syH2CnClif4YmALN1XKpB39XneL80008UbtMShthSVDKmrx05N1q/g==} @@ -2319,65 +2258,65 @@ packages: '@swc/types@0.1.23': resolution: {integrity: sha512-u1iIVZV9Q0jxY+yM2vw/hZGDNudsN85bBpTqzAQ9rzkxW9D+e3aEM4Han+ow518gSewkXgjmEK0BD79ZcNVgPw==} - '@tailwindcss/node@4.1.11': - resolution: {integrity: sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==} + '@tailwindcss/node@4.1.12': + resolution: {integrity: sha512-3hm9brwvQkZFe++SBt+oLjo4OLDtkvlE8q2WalaD/7QWaeM7KEJbAiY/LJZUaCs7Xa8aUu4xy3uoyX4q54UVdQ==} - '@tailwindcss/oxide-android-arm64@4.1.11': - resolution: {integrity: sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==} + '@tailwindcss/oxide-android-arm64@4.1.12': + resolution: {integrity: sha512-oNY5pq+1gc4T6QVTsZKwZaGpBb2N1H1fsc1GD4o7yinFySqIuRZ2E4NvGasWc6PhYJwGK2+5YT1f9Tp80zUQZQ==} engines: {node: '>= 10'} cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.1.11': - resolution: {integrity: sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==} + '@tailwindcss/oxide-darwin-arm64@4.1.12': + resolution: {integrity: sha512-cq1qmq2HEtDV9HvZlTtrj671mCdGB93bVY6J29mwCyaMYCP/JaUBXxrQQQm7Qn33AXXASPUb2HFZlWiiHWFytw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.1.11': - resolution: {integrity: sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==} + '@tailwindcss/oxide-darwin-x64@4.1.12': + resolution: {integrity: sha512-6UCsIeFUcBfpangqlXay9Ffty9XhFH1QuUFn0WV83W8lGdX8cD5/+2ONLluALJD5+yJ7k8mVtwy3zMZmzEfbLg==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.1.11': - resolution: {integrity: sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==} + '@tailwindcss/oxide-freebsd-x64@4.1.12': + resolution: {integrity: sha512-JOH/f7j6+nYXIrHobRYCtoArJdMJh5zy5lr0FV0Qu47MID/vqJAY3r/OElPzx1C/wdT1uS7cPq+xdYYelny1ww==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11': - resolution: {integrity: sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.12': + resolution: {integrity: sha512-v4Ghvi9AU1SYgGr3/j38PD8PEe6bRfTnNSUE3YCMIRrrNigCFtHZ2TCm8142X8fcSqHBZBceDx+JlFJEfNg5zQ==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.1.11': - resolution: {integrity: sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==} + '@tailwindcss/oxide-linux-arm64-gnu@4.1.12': + resolution: {integrity: sha512-YP5s1LmetL9UsvVAKusHSyPlzSRqYyRB0f+Kl/xcYQSPLEw/BvGfxzbH+ihUciePDjiXwHh+p+qbSP3SlJw+6g==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-arm64-musl@4.1.11': - resolution: {integrity: sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==} + '@tailwindcss/oxide-linux-arm64-musl@4.1.12': + resolution: {integrity: sha512-V8pAM3s8gsrXcCv6kCHSuwyb/gPsd863iT+v1PGXC4fSL/OJqsKhfK//v8P+w9ThKIoqNbEnsZqNy+WDnwQqCA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-x64-gnu@4.1.11': - resolution: {integrity: sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==} + '@tailwindcss/oxide-linux-x64-gnu@4.1.12': + resolution: {integrity: sha512-xYfqYLjvm2UQ3TZggTGrwxjYaLB62b1Wiysw/YE3Yqbh86sOMoTn0feF98PonP7LtjsWOWcXEbGqDL7zv0uW8Q==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-linux-x64-musl@4.1.11': - resolution: {integrity: sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==} + '@tailwindcss/oxide-linux-x64-musl@4.1.12': + resolution: {integrity: sha512-ha0pHPamN+fWZY7GCzz5rKunlv9L5R8kdh+YNvP5awe3LtuXb5nRi/H27GeL2U+TdhDOptU7T6Is7mdwh5Ar3A==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-wasm32-wasi@4.1.11': - resolution: {integrity: sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==} + '@tailwindcss/oxide-wasm32-wasi@4.1.12': + resolution: {integrity: sha512-4tSyu3dW+ktzdEpuk6g49KdEangu3eCYoqPhWNsZgUhyegEda3M9rG0/j1GV/JjVVsj+lG7jWAyrTlLzd/WEBg==} engines: {node: '>=14.0.0'} cpu: [wasm32] bundledDependencies: @@ -2388,20 +2327,20 @@ packages: - '@emnapi/wasi-threads' - tslib - '@tailwindcss/oxide-win32-arm64-msvc@4.1.11': - resolution: {integrity: sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==} + '@tailwindcss/oxide-win32-arm64-msvc@4.1.12': + resolution: {integrity: sha512-iGLyD/cVP724+FGtMWslhcFyg4xyYyM+5F4hGvKA7eifPkXHRAUDFaimu53fpNg9X8dfP75pXx/zFt/jlNF+lg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.1.11': - resolution: {integrity: sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==} + '@tailwindcss/oxide-win32-x64-msvc@4.1.12': + resolution: {integrity: sha512-NKIh5rzw6CpEodv/++r0hGLlfgT/gFN+5WNdZtvh6wpU2BpGNgdjvj6H2oFc8nCM839QM1YOhjpgbAONUb4IxA==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.1.11': - resolution: {integrity: sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==} + '@tailwindcss/oxide@4.1.12': + resolution: {integrity: sha512-gM5EoKHW/ukmlEtphNwaGx45fGoEmP10v51t9unv55voWh6WrOL19hfuIdo2FjxIaZzw776/BUQg7Pck++cIVw==} engines: {node: '>= 10'} '@tailwindcss/typography@0.5.16': @@ -2409,8 +2348,8 @@ packages: peerDependencies: tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' - '@tailwindcss/vite@4.1.11': - resolution: {integrity: sha512-RHYhrR3hku0MJFRV+fN2gNbDNEh3dwKvY8XJvTxCSXeMOsCRSr+uKvDWQcbizrHgjML6ZmTE5OwMrl5wKcujCw==} + '@tailwindcss/vite@4.1.12': + resolution: {integrity: sha512-4pt0AMFDx7gzIrAOIYgYP0KCBuKWqyW8ayrdiLEjoJTT4pKTjrzG/e4uzWtTLDziC+66R9wbUqZBccJalSE5vQ==} peerDependencies: vite: ^5.2.0 || ^6 || ^7 @@ -2474,8 +2413,8 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node@22.17.1': - resolution: {integrity: sha512-y3tBaz+rjspDTylNjAX37jEC3TETEFGNJL6uQDxwF9/8GLLIjW1rvVHlynyuUKMnMr1Roq8jOv3vkopBjC4/VA==} + '@types/node@22.17.2': + resolution: {integrity: sha512-gL6z5N9Jm9mhY+U2KXZpteb+09zyffliRkZyZOHODGATyC5B1Jt/7TzuuiLkFsSUMLbS1OLmlj/E+/3KF4Q/4w==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -2499,8 +2438,8 @@ packages: '@types/react@18.3.20': resolution: {integrity: sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==} - '@types/react@19.1.9': - resolution: {integrity: sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA==} + '@types/react@19.1.10': + resolution: {integrity: sha512-EhBeSYX0Y6ye8pNebpKrwFJq7BoQ8J5SO6NlvNwwHjSj6adXJViPQrKlsyPw7hLBLvckEMO1yxeGdR82YBBlDg==} '@types/styled-components@5.1.34': resolution: {integrity: sha512-mmiVvwpYklFIv9E8qfxuPyIt/OuyIrn6gMOAMOFUO3WJfSrSE+sGUoa4PiZj77Ut7bKZpaa6o1fBKS/4TOEvnA==} @@ -2514,39 +2453,39 @@ packages: '@types/unist@3.0.2': resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} - '@typescript-eslint/eslint-plugin@8.39.0': - resolution: {integrity: sha512-bhEz6OZeUR+O/6yx9Jk6ohX6H9JSFTaiY0v9/PuKT3oGK0rn0jNplLmyFUGV+a9gfYnVNwGDwS/UkLIuXNb2Rw==} + '@typescript-eslint/eslint-plugin@8.39.1': + resolution: {integrity: sha512-yYegZ5n3Yr6eOcqgj2nJH8cH/ZZgF+l0YIdKILSDjYFRjgYQMgv/lRjV5Z7Up04b9VYUondt8EPMqg7kTWgJ2g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.39.0 + '@typescript-eslint/parser': ^8.39.1 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.39.0': - resolution: {integrity: sha512-g3WpVQHngx0aLXn6kfIYCZxM6rRJlWzEkVpqEFLT3SgEDsp9cpCbxxgwnE504q4H+ruSDh/VGS6nqZIDynP+vg==} + '@typescript-eslint/parser@8.39.1': + resolution: {integrity: sha512-pUXGCuHnnKw6PyYq93lLRiZm3vjuslIy7tus1lIQTYVK9bL8XBgJnCWm8a0KcTtHC84Yya1Q6rtll+duSMj0dg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.39.0': - resolution: {integrity: sha512-CTzJqaSq30V/Z2Og9jogzZt8lJRR5TKlAdXmWgdu4hgcC9Kww5flQ+xFvMxIBWVNdxJO7OifgdOK4PokMIWPew==} + '@typescript-eslint/project-service@8.39.1': + resolution: {integrity: sha512-8fZxek3ONTwBu9ptw5nCKqZOSkXshZB7uAxuFF0J/wTMkKydjXCzqqga7MlFMpHi9DoG4BadhmTkITBcg8Aybw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.39.0': - resolution: {integrity: sha512-8QOzff9UKxOh6npZQ/4FQu4mjdOCGSdO3p44ww0hk8Vu+IGbg0tB/H1LcTARRDzGCC8pDGbh2rissBuuoPgH8A==} + '@typescript-eslint/scope-manager@8.39.1': + resolution: {integrity: sha512-RkBKGBrjgskFGWuyUGz/EtD8AF/GW49S21J8dvMzpJitOF1slLEbbHnNEtAHtnDAnx8qDEdRrULRnWVx27wGBw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.39.0': - resolution: {integrity: sha512-Fd3/QjmFV2sKmvv3Mrj8r6N8CryYiCS8Wdb/6/rgOXAWGcFuc+VkQuG28uk/4kVNVZBQuuDHEDUpo/pQ32zsIQ==} + '@typescript-eslint/tsconfig-utils@8.39.1': + resolution: {integrity: sha512-ePUPGVtTMR8XMU2Hee8kD0Pu4NDE1CN9Q1sxGSGd/mbOtGZDM7pnhXNJnzW63zk/q+Z54zVzj44HtwXln5CvHA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.39.0': - resolution: {integrity: sha512-6B3z0c1DXVT2vYA9+z9axjtc09rqKUPRmijD5m9iv8iQpHBRYRMBcgxSiKTZKm6FwWw1/cI4v6em35OsKCiN5Q==} + '@typescript-eslint/type-utils@8.39.1': + resolution: {integrity: sha512-gu9/ahyatyAdQbKeHnhT4R+y3YLtqqHyvkfDxaBYk97EcbfChSJXyaJnIL3ygUv7OuZatePHmQvuH5ru0lnVeA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2556,25 +2495,25 @@ packages: resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.39.0': - resolution: {integrity: sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==} + '@typescript-eslint/types@8.39.1': + resolution: {integrity: sha512-7sPDKQQp+S11laqTrhHqeAbsCfMkwJMrV7oTDvtDds4mEofJYir414bYKUEb8YPUm9QL3U+8f6L6YExSoAGdQw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.39.0': - resolution: {integrity: sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw==} + '@typescript-eslint/typescript-estree@8.39.1': + resolution: {integrity: sha512-EKkpcPuIux48dddVDXyQBlKdeTPMmALqBUbEk38McWv0qVEZwOpVJBi7ugK5qVNgeuYjGNQxrrnoM/5+TI/BPw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.39.0': - resolution: {integrity: sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ==} + '@typescript-eslint/utils@8.39.1': + resolution: {integrity: sha512-VF5tZ2XnUSTuiqZFXCZfZs1cgkdd3O/sSYmdo2EpSyDlC86UM/8YytTmKnehOW3TGAlivqTDT6bS87B/GQ/jyg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.39.0': - resolution: {integrity: sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA==} + '@typescript-eslint/visitor-keys@8.39.1': + resolution: {integrity: sha512-W8FQi6kEh2e8zVhQ0eeRnxdvIoOkAp/CPAahcNio6nO9dsIwb9b34z90KOlheoyuVf6LSOEdjlkxSkapNEc+4A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.2.0': @@ -3119,6 +3058,10 @@ packages: resolution: {integrity: sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==} engines: {node: '>=10.13.0'} + enhanced-resolve@5.18.3: + resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} + engines: {node: '>=10.13.0'} + environment@1.1.0: resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} engines: {node: '>=18'} @@ -3570,6 +3513,10 @@ packages: resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true + jiti@2.5.1: + resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} + hasBin: true + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -3898,8 +3845,8 @@ packages: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} - miniflare@4.20250803.0: - resolution: {integrity: sha512-1tmCLfmMw0SqRBF9PPII9CVLQRzOrO7uIBmSng8BMSmtgs2kos7OeoM0sg6KbR9FrvP/zAniLyZuCAMAjuu4fQ==} + miniflare@4.20250813.1: + resolution: {integrity: sha512-6PyXwR4pZmH9ukO0jR5LmhlFVMktsVVGVcUjD9Lpev5QwnqjTRPEv73cnXCe0+oTbIm5TYnvXsAklaWxQuxstA==} engines: {node: '>=18.0.0'} hasBin: true @@ -4322,8 +4269,8 @@ packages: vue-tsc: optional: true - rolldown-vite@7.1.0: - resolution: {integrity: sha512-DCfutVwSkuc3NA75SdFuetKwcpq97tO2JZdM6gYv7GwW6/9qyXnITYER+8zrJt+vQVGP2SadAkMOpWw7B4LVwg==} + rolldown-vite@7.1.2: + resolution: {integrity: sha512-9VwY/BOirnPDJ8HXiXTdVdLXTSQkNGDVgpuhfmMxAH7HxSBb71VaTyQh/FHPtMk2psAyglQXWheYKXV53N27/Q==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -4362,10 +4309,6 @@ packages: yaml: optional: true - rolldown@1.0.0-beta.31: - resolution: {integrity: sha512-M2Q+RfG0FMJeSW3RSFTbvtjGVTcQpTQvN247D0EMSsPkpZFoinopR9oAnQiwgogQyzDuvKNnbyCbQQlmNAzSoQ==} - hasBin: true - rolldown@1.0.0-beta.32: resolution: {integrity: sha512-vxI2sPN07MMaoYKlFrVva5qZ1Y7DAZkgp7MQwTnyHt4FUMz9Sh+YeCzNFV9JYHI6ZNwoGWLCfCViE3XVsRC1cg==} hasBin: true @@ -4572,8 +4515,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - tailwindcss@4.1.11: - resolution: {integrity: sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==} + tailwindcss@4.1.12: + resolution: {integrity: sha512-DzFtxOi+7NsFf7DBtI3BJsynR+0Yp6etH+nRPTbpWnS2pZBaSksv/JGctNwSWzbFjp0vxSqknaUylseZqMDGrA==} tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} @@ -4640,8 +4583,8 @@ packages: peerDependencies: typescript: '>=4.0.0' - tsdown@0.14.0: - resolution: {integrity: sha512-3zBEDUC1XPnVE5rwfsm1y8REh58CJsDT319hkRwBgIpN9eMClE30dqF4HkK8zPKoczNNqFrQ2cKGrjE50WprIw==} + tsdown@0.14.1: + resolution: {integrity: sha512-/nBuFDKZeYln9hAxwWG5Cm55/823sNIVI693iVi0xRFHzf9OVUq4b/lx9PH1TErFr/IQ0kd2hutFbJIPM0XQWA==} engines: {node: '>=20.19.0'} hasBin: true peerDependencies: @@ -4668,8 +4611,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsx@4.20.3: - resolution: {integrity: sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ==} + tsx@4.20.4: + resolution: {integrity: sha512-yyxBKfORQ7LuRt/BQKBXrpcq59ZvSW0XxwfjAt3w2/8PmdxaFzijtMhTawprSHhpzeM5BgU2hXHG3lklIERZXg==} engines: {node: '>=18.0.0'} hasBin: true @@ -4680,8 +4623,8 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - typescript-eslint@8.39.0: - resolution: {integrity: sha512-lH8FvtdtzcHJCkMOKnN73LIn6SLTpoojgJqDAxPm1jCR14eWSGPX8ul/gggBdPMk/d5+u9V854vTYQ8T5jF/1Q==} + typescript-eslint@8.39.1: + resolution: {integrity: sha512-GDUv6/NDYngUlNvwaHM1RamYftxf782IyEDbdj3SeaIHHv8fNQVRC++fITT7kUJV/5rIA/tkoRSSskt6osEfqg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -4851,8 +4794,8 @@ packages: yaml: optional: true - vite@7.1.1: - resolution: {integrity: sha512-yJ+Mp7OyV+4S+afWo+QyoL9jFWD11QFH0i5i7JypnfTcA1rmgxCbiA8WwAICDEtZ1Z1hzrVhN8R8rGTqkTY8ZQ==} + vite@7.1.2: + resolution: {integrity: sha512-J0SQBPlQiEXAF7tajiH+rUooJPo0l8KQgyg4/aMunNtrOa7bwuZJsJbDWzeljqQpgftxuq5yNJxQ91O9ts29UQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -4956,17 +4899,17 @@ packages: wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - workerd@1.20250803.0: - resolution: {integrity: sha512-oYH29mE/wNolPc32NHHQbySaNorj6+KASUtOvQHySxB5mO1NWdGuNv49woxNCF5971UYceGQndY+OLT+24C3wQ==} + workerd@1.20250813.0: + resolution: {integrity: sha512-bDlPGSnb/KESpGFE57cDjgP8mEKDM4WBTd/uGJBsQYCB6Aokk1eK3ivtHoxFx3MfJNo3v6/hJy6KK1b6rw1gvg==} engines: {node: '>=16'} hasBin: true - wrangler@4.28.1: - resolution: {integrity: sha512-B1w6XS3o1q1Icyx1CyirY5GNyYhucd63Jqml/EYSbB5dgv0VT8ir7L8IkCdbICEa4yYTETIgvTTZqffM6tBulA==} + wrangler@4.30.0: + resolution: {integrity: sha512-NXJUObuXxgG8/ChQ4yXkWLmDQ5ZcO98gyq1yFKYVntJ884C0IpDQrVnAv2RA0ZEz5eB8zal+4OKnr26P3N7ItA==} engines: {node: '>=18.0.0'} hasBin: true peerDependencies: - '@cloudflare/workers-types': ^4.20250803.0 + '@cloudflare/workers-types': ^4.20250813.0 peerDependenciesMeta: '@cloudflare/workers-types': optional: true @@ -5051,18 +4994,18 @@ snapshots: '@babel/compat-data@7.27.5': {} - '@babel/core@7.28.0': + '@babel/core@7.28.3': dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.0 + '@babel/generator': 7.28.3 '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0) - '@babel/helpers': 7.27.6 - '@babel/parser': 7.28.0 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.3) + '@babel/helpers': 7.28.3 + '@babel/parser': 7.28.3 '@babel/template': 7.27.2 - '@babel/traverse': 7.28.0 - '@babel/types': 7.28.1 + '@babel/traverse': 7.28.3 + '@babel/types': 7.28.2 convert-source-map: 2.0.0 debug: 4.4.1 gensync: 1.0.0-beta.2 @@ -5074,7 +5017,15 @@ snapshots: '@babel/generator@7.28.0': dependencies: '@babel/parser': 7.28.0 - '@babel/types': 7.28.1 + '@babel/types': 7.28.2 + '@jridgewell/gen-mapping': 0.3.12 + '@jridgewell/trace-mapping': 0.3.29 + jsesc: 3.0.2 + + '@babel/generator@7.28.3': + dependencies: + '@babel/parser': 7.28.3 + '@babel/types': 7.28.2 '@jridgewell/gen-mapping': 0.3.12 '@jridgewell/trace-mapping': 0.3.29 jsesc: 3.0.2 @@ -5091,13 +5042,13 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.28.0)': + '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.3 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.0) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.3) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 '@babel/traverse': 7.28.0 semver: 6.3.1 @@ -5116,28 +5067,37 @@ snapshots: '@babel/helper-module-imports@7.27.1': dependencies: '@babel/traverse': 7.28.0 - '@babel/types': 7.28.1 + '@babel/types': 7.28.2 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.27.3(@babel/core@7.28.0)': + '@babel/helper-module-transforms@7.27.3(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.3 '@babel/helper-module-imports': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 '@babel/traverse': 7.28.0 transitivePeerDependencies: - supports-color + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.3)': + dependencies: + '@babel/core': 7.28.3 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.28.3 + transitivePeerDependencies: + - supports-color + '@babel/helper-optimise-call-expression@7.27.1': dependencies: '@babel/types': 7.28.2 '@babel/helper-plugin-utils@7.27.1': {} - '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.0)': + '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.3 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 '@babel/traverse': 7.28.0 @@ -5157,91 +5117,95 @@ snapshots: '@babel/helper-validator-option@7.27.1': {} - '@babel/helpers@7.27.6': + '@babel/helpers@7.28.3': dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.28.1 + '@babel/types': 7.28.2 '@babel/parser@7.28.0': dependencies: '@babel/types': 7.28.1 - '@babel/plugin-proposal-pipeline-operator@7.27.1(@babel/core@7.28.0)': + '@babel/parser@7.28.3': + dependencies: + '@babel/types': 7.28.2 + + '@babel/plugin-proposal-pipeline-operator@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-pipeline-operator': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-syntax-pipeline-operator': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-pipeline-operator@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-syntax-pipeline-operator@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.28.0 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0) + '@babel/core': 7.28.3 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.28.0 - '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.0) + '@babel/core': 7.28.3 + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.3) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.3 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0) - '@babel/types': 7.28.1 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.3) + '@babel/types': 7.28.2 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-typescript@7.28.0(@babel/core@7.28.0)': + '@babel/plugin-transform-typescript@7.28.0(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.3 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.3) transitivePeerDependencies: - supports-color - '@babel/preset-typescript@7.27.1(@babel/core@7.28.0)': + '@babel/preset-typescript@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.0) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.3) transitivePeerDependencies: - supports-color @@ -5252,8 +5216,8 @@ snapshots: '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.0 - '@babel/types': 7.28.1 + '@babel/parser': 7.28.3 + '@babel/types': 7.28.2 '@babel/traverse@7.28.0': dependencies: @@ -5262,7 +5226,19 @@ snapshots: '@babel/helper-globals': 7.28.0 '@babel/parser': 7.28.0 '@babel/template': 7.27.2 - '@babel/types': 7.28.1 + '@babel/types': 7.28.2 + debug: 4.4.1 + transitivePeerDependencies: + - supports-color + + '@babel/traverse@7.28.3': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.3 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.3 + '@babel/template': 7.27.2 + '@babel/types': 7.28.2 debug: 4.4.1 transitivePeerDependencies: - supports-color @@ -5281,24 +5257,24 @@ snapshots: dependencies: mime: 3.0.0 - '@cloudflare/unenv-preset@2.6.0(unenv@2.0.0-rc.19)(workerd@1.20250803.0)': + '@cloudflare/unenv-preset@2.6.1(unenv@2.0.0-rc.19)(workerd@1.20250813.0)': dependencies: unenv: 2.0.0-rc.19 optionalDependencies: - workerd: 1.20250803.0 + workerd: 1.20250813.0 - '@cloudflare/vite-plugin@1.11.2(rollup@4.44.1)(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(workerd@1.20250803.0)(wrangler@4.28.1)': + '@cloudflare/vite-plugin@1.11.5(rollup@4.44.1)(vite@7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1))(workerd@1.20250813.0)(wrangler@4.30.0)': dependencies: - '@cloudflare/unenv-preset': 2.6.0(unenv@2.0.0-rc.19)(workerd@1.20250803.0) + '@cloudflare/unenv-preset': 2.6.1(unenv@2.0.0-rc.19)(workerd@1.20250813.0) '@mjackson/node-fetch-server': 0.6.1 '@rollup/plugin-replace': 6.0.2(rollup@4.44.1) get-port: 7.1.0 - miniflare: 4.20250803.0 + miniflare: 4.20250813.1 picocolors: 1.1.1 tinyglobby: 0.2.14 unenv: 2.0.0-rc.19 - vite: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - wrangler: 4.28.1 + vite: 7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1) + wrangler: 4.30.0 ws: 8.18.0 transitivePeerDependencies: - bufferutil @@ -5306,19 +5282,19 @@ snapshots: - utf-8-validate - workerd - '@cloudflare/workerd-darwin-64@1.20250803.0': + '@cloudflare/workerd-darwin-64@1.20250813.0': optional: true - '@cloudflare/workerd-darwin-arm64@1.20250803.0': + '@cloudflare/workerd-darwin-arm64@1.20250813.0': optional: true - '@cloudflare/workerd-linux-64@1.20250803.0': + '@cloudflare/workerd-linux-64@1.20250813.0': optional: true - '@cloudflare/workerd-linux-arm64@1.20250803.0': + '@cloudflare/workerd-linux-arm64@1.20250813.0': optional: true - '@cloudflare/workerd-windows-64@1.20250803.0': + '@cloudflare/workerd-windows-64@1.20250813.0': optional: true '@conventional-changelog/git-client@2.5.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.0)': @@ -5388,7 +5364,7 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1)': + '@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1)': dependencies: '@babel/runtime': 7.23.5 '@emotion/babel-plugin': 11.13.5 @@ -5400,7 +5376,7 @@ snapshots: hoist-non-react-statics: 3.3.2 react: 19.1.1 optionalDependencies: - '@types/react': 19.1.9 + '@types/react': 19.1.10 transitivePeerDependencies: - supports-color @@ -5414,18 +5390,18 @@ snapshots: '@emotion/sheet@1.4.0': {} - '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1)': + '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1)': dependencies: '@babel/runtime': 7.23.5 '@emotion/babel-plugin': 11.13.5 '@emotion/is-prop-valid': 1.3.1 - '@emotion/react': 11.14.0(@types/react@19.1.9)(react@19.1.1) + '@emotion/react': 11.14.0(@types/react@19.1.10)(react@19.1.1) '@emotion/serialize': 1.3.3 '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.1) '@emotion/utils': 1.4.2 react: 19.1.1 optionalDependencies: - '@types/react': 19.1.9 + '@types/react': 19.1.10 transitivePeerDependencies: - supports-color @@ -5591,9 +5567,9 @@ snapshots: '@esbuild/win32-x64@0.25.5': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@9.33.0(jiti@2.4.2))': + '@eslint-community/eslint-utils@4.7.0(eslint@9.33.0(jiti@2.5.1))': dependencies: - eslint: 9.33.0(jiti@2.4.2) + eslint: 9.33.0(jiti@2.5.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -5743,6 +5719,11 @@ snapshots: '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.12 + '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/resolve-uri@3.1.1': {} '@jridgewell/sourcemap-codec@1.5.0': {} @@ -5806,13 +5787,6 @@ snapshots: '@tybys/wasm-util': 0.10.0 optional: true - '@napi-rs/wasm-runtime@1.0.1': - dependencies: - '@emnapi/core': 1.4.5 - '@emnapi/runtime': 1.4.5 - '@tybys/wasm-util': 0.10.0 - optional: true - '@napi-rs/wasm-runtime@1.0.3': dependencies: '@emnapi/core': 1.4.5 @@ -5861,12 +5835,8 @@ snapshots: dependencies: which: 3.0.1 - '@oxc-project/runtime@0.80.0': {} - '@oxc-project/runtime@0.81.0': {} - '@oxc-project/types@0.80.0': {} - '@oxc-project/types@0.81.0': {} '@pkgjs/parseargs@0.11.0': @@ -5896,13 +5866,13 @@ snapshots: dependencies: quansync: 0.2.10 - '@react-router/dev@7.7.0(@types/node@22.17.1)(babel-plugin-macros@3.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(react-router@7.7.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(tsx@4.20.3)(typescript@5.9.2)(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))(wrangler@4.28.1)(yaml@2.7.1)': + '@react-router/dev@7.7.0(@types/node@22.17.2)(babel-plugin-macros@3.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(react-router@7.7.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(tsx@4.20.4)(typescript@5.9.2)(vite@7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1))(wrangler@4.30.0)(yaml@2.7.1)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.3 '@babel/generator': 7.28.0 '@babel/parser': 7.28.0 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0) - '@babel/preset-typescript': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.3) + '@babel/preset-typescript': 7.27.1(@babel/core@7.28.3) '@babel/traverse': 7.28.0 '@babel/types': 7.28.1 '@npmcli/package-json': 4.0.1 @@ -5925,11 +5895,11 @@ snapshots: set-cookie-parser: 2.7.1 tinyglobby: 0.2.14 valibot: 0.41.0(typescript@5.9.2) - vite: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vite-node: 3.2.4(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1) + vite-node: 3.2.4(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1) optionalDependencies: typescript: 5.9.2 - wrangler: 4.28.1 + wrangler: 4.30.0 transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -5955,96 +5925,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.32': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-beta.31': - optional: true - '@rolldown/binding-darwin-arm64@1.0.0-beta.32': optional: true - '@rolldown/binding-darwin-x64@1.0.0-beta.31': - optional: true - '@rolldown/binding-darwin-x64@1.0.0-beta.32': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-beta.31': - optional: true - '@rolldown/binding-freebsd-x64@1.0.0-beta.32': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.31': - optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.32': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.31': - optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.32': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.31': - optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.32': 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.32': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-beta.31': - optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-beta.32': optional: true '@rolldown/binding-openharmony-arm64@1.0.0-beta.32': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-beta.31': - dependencies: - '@napi-rs/wasm-runtime': 1.0.1 - optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-beta.32': 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.32': optional: true - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.31': - optional: true - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.32': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.31': - optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.32': optional: true - '@rolldown/pluginutils@1.0.0-beta.31': {} - '@rolldown/pluginutils@1.0.0-beta.32': {} '@rollup/plugin-replace@6.0.2(rollup@4.44.1)': @@ -6125,11 +6049,11 @@ snapshots: '@simple-libs/child-process-utils@1.0.1': dependencies: '@simple-libs/stream-utils': 1.1.0 - '@types/node': 22.17.1 + '@types/node': 22.17.2 '@simple-libs/stream-utils@1.1.0': dependencies: - '@types/node': 22.17.1 + '@types/node': 22.17.2 '@sindresorhus/is@7.0.2': {} @@ -6195,84 +6119,84 @@ snapshots: dependencies: '@swc/counter': 0.1.3 - '@tailwindcss/node@4.1.11': + '@tailwindcss/node@4.1.12': dependencies: - '@ampproject/remapping': 2.3.0 - enhanced-resolve: 5.18.2 - jiti: 2.4.2 + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.18.3 + jiti: 2.5.1 lightningcss: 1.30.1 magic-string: 0.30.17 source-map-js: 1.2.1 - tailwindcss: 4.1.11 + tailwindcss: 4.1.12 - '@tailwindcss/oxide-android-arm64@4.1.11': + '@tailwindcss/oxide-android-arm64@4.1.12': optional: true - '@tailwindcss/oxide-darwin-arm64@4.1.11': + '@tailwindcss/oxide-darwin-arm64@4.1.12': optional: true - '@tailwindcss/oxide-darwin-x64@4.1.11': + '@tailwindcss/oxide-darwin-x64@4.1.12': optional: true - '@tailwindcss/oxide-freebsd-x64@4.1.11': + '@tailwindcss/oxide-freebsd-x64@4.1.12': optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.12': optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.1.11': + '@tailwindcss/oxide-linux-arm64-gnu@4.1.12': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.1.11': + '@tailwindcss/oxide-linux-arm64-musl@4.1.12': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.1.11': + '@tailwindcss/oxide-linux-x64-gnu@4.1.12': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.1.11': + '@tailwindcss/oxide-linux-x64-musl@4.1.12': optional: true - '@tailwindcss/oxide-wasm32-wasi@4.1.11': + '@tailwindcss/oxide-wasm32-wasi@4.1.12': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.1.11': + '@tailwindcss/oxide-win32-arm64-msvc@4.1.12': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.1.11': + '@tailwindcss/oxide-win32-x64-msvc@4.1.12': optional: true - '@tailwindcss/oxide@4.1.11': + '@tailwindcss/oxide@4.1.12': dependencies: detect-libc: 2.0.4 tar: 7.4.3 optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.1.11 - '@tailwindcss/oxide-darwin-arm64': 4.1.11 - '@tailwindcss/oxide-darwin-x64': 4.1.11 - '@tailwindcss/oxide-freebsd-x64': 4.1.11 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.11 - '@tailwindcss/oxide-linux-arm64-gnu': 4.1.11 - '@tailwindcss/oxide-linux-arm64-musl': 4.1.11 - '@tailwindcss/oxide-linux-x64-gnu': 4.1.11 - '@tailwindcss/oxide-linux-x64-musl': 4.1.11 - '@tailwindcss/oxide-wasm32-wasi': 4.1.11 - '@tailwindcss/oxide-win32-arm64-msvc': 4.1.11 - '@tailwindcss/oxide-win32-x64-msvc': 4.1.11 - - '@tailwindcss/typography@0.5.16(tailwindcss@4.1.11)': + '@tailwindcss/oxide-android-arm64': 4.1.12 + '@tailwindcss/oxide-darwin-arm64': 4.1.12 + '@tailwindcss/oxide-darwin-x64': 4.1.12 + '@tailwindcss/oxide-freebsd-x64': 4.1.12 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.12 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.12 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.12 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.12 + '@tailwindcss/oxide-linux-x64-musl': 4.1.12 + '@tailwindcss/oxide-wasm32-wasi': 4.1.12 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.12 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.12 + + '@tailwindcss/typography@0.5.16(tailwindcss@4.1.12)': dependencies: lodash.castarray: 4.4.0 lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 - tailwindcss: 4.1.11 + tailwindcss: 4.1.12 - '@tailwindcss/vite@4.1.11(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': + '@tailwindcss/vite@4.1.12(vite@7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1))': dependencies: - '@tailwindcss/node': 4.1.11 - '@tailwindcss/oxide': 4.1.11 - tailwindcss: 4.1.11 - vite: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + '@tailwindcss/node': 4.1.12 + '@tailwindcss/oxide': 4.1.12 + tailwindcss: 4.1.12 + vite: 7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1) '@tsconfig/strictest@2.0.5': {} @@ -6325,7 +6249,7 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 22.17.1 + '@types/node': 22.17.2 '@types/hast@3.0.3': dependencies: @@ -6340,7 +6264,7 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 22.17.1 + '@types/node': 22.17.2 '@types/mdast@4.0.3': dependencies: @@ -6350,7 +6274,7 @@ snapshots: '@types/ms@0.7.34': {} - '@types/node@22.17.1': + '@types/node@22.17.2': dependencies: undici-types: 6.21.0 @@ -6364,16 +6288,16 @@ snapshots: dependencies: '@types/react': 18.3.20 - '@types/react-dom@19.1.7(@types/react@19.1.9)': + '@types/react-dom@19.1.7(@types/react@19.1.10)': dependencies: - '@types/react': 19.1.9 + '@types/react': 19.1.10 '@types/react@18.3.20': dependencies: '@types/prop-types': 15.7.11 csstype: 3.1.3 - '@types/react@19.1.9': + '@types/react@19.1.10': dependencies: csstype: 3.1.3 @@ -6389,15 +6313,15 @@ snapshots: '@types/unist@3.0.2': {} - '@typescript-eslint/eslint-plugin@8.39.0(@typescript-eslint/parser@8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2))(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2)': + '@typescript-eslint/eslint-plugin@8.39.1(@typescript-eslint/parser@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2) - '@typescript-eslint/scope-manager': 8.39.0 - '@typescript-eslint/type-utils': 8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2) - '@typescript-eslint/utils': 8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.39.0 - eslint: 9.33.0(jiti@2.4.2) + '@typescript-eslint/parser': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.39.1 + '@typescript-eslint/type-utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.39.1 + eslint: 9.33.0(jiti@2.5.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -6406,43 +6330,43 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2)': + '@typescript-eslint/parser@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@typescript-eslint/scope-manager': 8.39.0 - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.39.0 + '@typescript-eslint/scope-manager': 8.39.1 + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/typescript-estree': 8.39.1(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.39.1 debug: 4.4.1 - eslint: 9.33.0(jiti@2.4.2) + eslint: 9.33.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.39.0(typescript@5.9.2)': + '@typescript-eslint/project-service@8.39.1(typescript@5.9.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.39.0(typescript@5.9.2) - '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/tsconfig-utils': 8.39.1(typescript@5.9.2) + '@typescript-eslint/types': 8.39.1 debug: 4.4.1 typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.39.0': + '@typescript-eslint/scope-manager@8.39.1': dependencies: - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/visitor-keys': 8.39.0 + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/visitor-keys': 8.39.1 - '@typescript-eslint/tsconfig-utils@8.39.0(typescript@5.9.2)': + '@typescript-eslint/tsconfig-utils@8.39.1(typescript@5.9.2)': dependencies: typescript: 5.9.2 - '@typescript-eslint/type-utils@8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2)': + '@typescript-eslint/type-utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2) + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/typescript-estree': 8.39.1(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) debug: 4.4.1 - eslint: 9.33.0(jiti@2.4.2) + eslint: 9.33.0(jiti@2.5.1) ts-api-utils: 2.1.0(typescript@5.9.2) typescript: 5.9.2 transitivePeerDependencies: @@ -6450,14 +6374,14 @@ snapshots: '@typescript-eslint/types@8.38.0': {} - '@typescript-eslint/types@8.39.0': {} + '@typescript-eslint/types@8.39.1': {} - '@typescript-eslint/typescript-estree@8.39.0(typescript@5.9.2)': + '@typescript-eslint/typescript-estree@8.39.1(typescript@5.9.2)': dependencies: - '@typescript-eslint/project-service': 8.39.0(typescript@5.9.2) - '@typescript-eslint/tsconfig-utils': 8.39.0(typescript@5.9.2) - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/visitor-keys': 8.39.0 + '@typescript-eslint/project-service': 8.39.1(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.39.1(typescript@5.9.2) + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/visitor-keys': 8.39.1 debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 @@ -6468,20 +6392,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2)': + '@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.39.0 - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) - eslint: 9.33.0(jiti@2.4.2) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1)) + '@typescript-eslint/scope-manager': 8.39.1 + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/typescript-estree': 8.39.1(typescript@5.9.2) + eslint: 9.33.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.39.0': + '@typescript-eslint/visitor-keys@8.39.1': dependencies: - '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/types': 8.39.1 eslint-visitor-keys: 4.2.1 '@ungap/structured-clone@1.2.0': {} @@ -6604,13 +6528,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@7.0.5(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1))': + '@vitest/mocker@3.2.4(vite@7.0.5(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 7.0.5(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.5(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1) '@vitest/pretty-format@3.2.4': dependencies: @@ -6692,10 +6616,10 @@ snapshots: babel-dead-code-elimination@1.0.10: dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.3 '@babel/parser': 7.28.0 '@babel/traverse': 7.28.0 - '@babel/types': 7.28.1 + '@babel/types': 7.28.2 transitivePeerDependencies: - supports-color @@ -6950,6 +6874,11 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.2.1 + enhanced-resolve@5.18.3: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + environment@1.1.0: {} err-code@2.0.3: {} @@ -7022,9 +6951,9 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-compat-utils@0.5.1(eslint@9.33.0(jiti@2.4.2)): + eslint-compat-utils@0.5.1(eslint@9.33.0(jiti@2.5.1)): dependencies: - eslint: 9.33.0(jiti@2.4.2) + eslint: 9.33.0(jiti@2.5.1) semver: 7.7.2 eslint-import-context@0.1.9(unrs-resolver@1.9.2): @@ -7034,19 +6963,19 @@ snapshots: optionalDependencies: unrs-resolver: 1.9.2 - eslint-plugin-es-x@7.8.0(eslint@9.33.0(jiti@2.4.2)): + eslint-plugin-es-x@7.8.0(eslint@9.33.0(jiti@2.5.1)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1)) '@eslint-community/regexpp': 4.12.1 - eslint: 9.33.0(jiti@2.4.2) - eslint-compat-utils: 0.5.1(eslint@9.33.0(jiti@2.4.2)) + eslint: 9.33.0(jiti@2.5.1) + eslint-compat-utils: 0.5.1(eslint@9.33.0(jiti@2.5.1)) - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2))(eslint@9.33.0(jiti@2.4.2)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1)): dependencies: '@typescript-eslint/types': 8.38.0 comment-parser: 1.4.1 debug: 4.4.1 - eslint: 9.33.0(jiti@2.4.2) + eslint: 9.33.0(jiti@2.5.1) eslint-import-context: 0.1.9(unrs-resolver@1.9.2) is-glob: 4.0.3 minimatch: 10.0.1 @@ -7054,16 +6983,16 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.9.2 optionalDependencies: - '@typescript-eslint/utils': 8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) transitivePeerDependencies: - supports-color - eslint-plugin-n@17.21.3(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2): + eslint-plugin-n@17.21.3(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1)) enhanced-resolve: 5.18.2 - eslint: 9.33.0(jiti@2.4.2) - eslint-plugin-es-x: 7.8.0(eslint@9.33.0(jiti@2.4.2)) + eslint: 9.33.0(jiti@2.5.1) + eslint-plugin-es-x: 7.8.0(eslint@9.33.0(jiti@2.5.1)) get-tsconfig: 4.10.1 globals: 15.12.0 globrex: 0.1.2 @@ -7073,12 +7002,12 @@ snapshots: transitivePeerDependencies: - typescript - eslint-plugin-regexp@2.10.0(eslint@9.33.0(jiti@2.4.2)): + eslint-plugin-regexp@2.10.0(eslint@9.33.0(jiti@2.5.1)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1)) '@eslint-community/regexpp': 4.12.1 comment-parser: 1.4.1 - eslint: 9.33.0(jiti@2.4.2) + eslint: 9.33.0(jiti@2.5.1) jsdoc-type-pratt-parser: 4.0.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 @@ -7093,9 +7022,9 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.33.0(jiti@2.4.2): + eslint@9.33.0(jiti@2.5.1): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.0 '@eslint/config-helpers': 0.3.1 @@ -7131,7 +7060,7 @@ snapshots: natural-compare: 1.4.0 optionator: 0.9.3 optionalDependencies: - jiti: 2.4.2 + jiti: 2.5.1 transitivePeerDependencies: - supports-color @@ -7227,10 +7156,6 @@ snapshots: dependencies: walk-up-path: 3.0.1 - fdir@6.4.6(picomatch@4.0.2): - optionalDependencies: - picomatch: 4.0.2 - fdir@6.4.6(picomatch@4.0.3): optionalDependencies: picomatch: 4.0.3 @@ -7488,6 +7413,8 @@ snapshots: jiti@2.4.2: {} + jiti@2.5.1: {} + js-tokens@4.0.0: {} js-tokens@9.0.1: {} @@ -7972,7 +7899,7 @@ snapshots: mimic-function@5.0.1: {} - miniflare@4.20250803.0: + miniflare@4.20250813.1: dependencies: '@cspotcode/source-map-support': 0.8.1 acorn: 8.14.0 @@ -7982,7 +7909,7 @@ snapshots: sharp: 0.33.5 stoppable: 1.1.0 undici: 7.12.0 - workerd: 1.20250803.0 + workerd: 1.20250813.0 ws: 8.18.0 youch: 4.1.0-beta.10 zod: 3.22.3 @@ -8380,44 +8307,22 @@ snapshots: - oxc-resolver - supports-color - rolldown-vite@7.1.0(@types/node@22.17.1)(esbuild@0.25.5)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.7.1): + rolldown-vite@7.1.2(@types/node@22.17.2)(esbuild@0.25.5)(jiti@2.5.1)(tsx@4.20.4)(yaml@2.7.1): dependencies: fdir: 6.4.6(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.32 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 22.17.1 + '@types/node': 22.17.2 esbuild: 0.25.5 fsevents: 2.3.3 - jiti: 2.4.2 - tsx: 4.20.3 + jiti: 2.5.1 + tsx: 4.20.4 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.32: dependencies: '@oxc-project/runtime': 0.81.0 @@ -8667,7 +8572,7 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - tailwindcss@4.1.11: {} + tailwindcss@4.1.12: {} tapable@2.2.1: {} @@ -8720,7 +8625,7 @@ snapshots: picomatch: 4.0.3 typescript: 5.9.2 - tsdown@0.14.0(publint@0.3.12)(typescript@5.9.2): + tsdown@0.14.1(publint@0.3.12)(typescript@5.9.2): dependencies: ansis: 4.1.0 cac: 6.7.14 @@ -8750,7 +8655,7 @@ snapshots: tslib@2.8.1: optional: true - tsx@4.20.3: + tsx@4.20.4: dependencies: esbuild: 0.25.5 get-tsconfig: 4.10.1 @@ -8763,13 +8668,13 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2): + typescript-eslint@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.39.0(@typescript-eslint/parser@8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2))(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2) - '@typescript-eslint/parser': 8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2) - '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.39.0(eslint@9.33.0(jiti@2.4.2))(typescript@5.9.2) - eslint: 9.33.0(jiti@2.4.2) + '@typescript-eslint/eslint-plugin': 8.39.1(@typescript-eslint/parser@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.39.1(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.33.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -8911,23 +8816,23 @@ snapshots: unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 - vite-dev-rpc@1.1.0(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + vite-dev-rpc@1.1.0(vite@7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1)): dependencies: birpc: 2.5.0 - vite: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vite-hot-client: 2.1.0(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + vite: 7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1) + vite-hot-client: 2.1.0(vite@7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1)) - vite-hot-client@2.1.0(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + vite-hot-client@2.1.0(vite@7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1)): dependencies: - vite: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1) - vite-node@3.2.4(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): + vite-node@3.2.4(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1): dependencies: cac: 6.7.14 debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1) transitivePeerDependencies: - '@types/node' - jiti @@ -8942,7 +8847,7 @@ snapshots: - tsx - yaml - vite-plugin-inspect@11.3.2(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + vite-plugin-inspect@11.3.2(vite@7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1)): dependencies: ansis: 4.1.0 debug: 4.4.1 @@ -8952,28 +8857,28 @@ snapshots: perfect-debounce: 1.0.0 sirv: 3.0.1 unplugin-utils: 0.2.4 - vite: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vite-dev-rpc: 1.1.0(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + vite: 7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1) + vite-dev-rpc: 1.1.0(vite@7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1)) transitivePeerDependencies: - supports-color - vite@7.0.5(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): + vite@7.0.5(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1): dependencies: esbuild: 0.25.5 - fdir: 6.4.6(picomatch@4.0.2) - picomatch: 4.0.2 + fdir: 6.4.6(picomatch@4.0.3) + picomatch: 4.0.3 postcss: 8.5.6 rollup: 4.44.1 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 22.17.1 + '@types/node': 22.17.2 fsevents: 2.3.3 - jiti: 2.4.2 + jiti: 2.5.1 lightningcss: 1.30.1 - tsx: 4.20.3 + tsx: 4.20.4 yaml: 2.7.1 - vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): + vite@7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1): dependencies: esbuild: 0.25.5 fdir: 6.4.6(picomatch@4.0.3) @@ -8982,22 +8887,22 @@ snapshots: rollup: 4.44.1 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 22.17.1 + '@types/node': 22.17.2 fsevents: 2.3.3 - jiti: 2.4.2 + jiti: 2.5.1 lightningcss: 1.30.1 - tsx: 4.20.3 + tsx: 4.20.4 yaml: 2.7.1 - vitefu@1.1.1(vite@7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)): + vitefu@1.1.1(vite@7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1)): optionalDependencies: - vite: 7.1.1(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.1.2(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1) - vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.0.5(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1)) + '@vitest/mocker': 3.2.4(vite@7.0.5(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -9015,12 +8920,12 @@ snapshots: tinyglobby: 0.2.14 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.0.5(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) - vite-node: 3.2.4(@types/node@22.17.1)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.20.3)(yaml@2.7.1) + vite: 7.0.5(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1) + vite-node: 3.2.4(@types/node@22.17.2)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.7.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.17.1 + '@types/node': 22.17.2 transitivePeerDependencies: - jiti - less @@ -9056,24 +8961,24 @@ snapshots: wordwrap@1.0.0: {} - workerd@1.20250803.0: + workerd@1.20250813.0: optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20250803.0 - '@cloudflare/workerd-darwin-arm64': 1.20250803.0 - '@cloudflare/workerd-linux-64': 1.20250803.0 - '@cloudflare/workerd-linux-arm64': 1.20250803.0 - '@cloudflare/workerd-windows-64': 1.20250803.0 + '@cloudflare/workerd-darwin-64': 1.20250813.0 + '@cloudflare/workerd-darwin-arm64': 1.20250813.0 + '@cloudflare/workerd-linux-64': 1.20250813.0 + '@cloudflare/workerd-linux-arm64': 1.20250813.0 + '@cloudflare/workerd-windows-64': 1.20250813.0 - wrangler@4.28.1: + wrangler@4.30.0: dependencies: '@cloudflare/kv-asset-handler': 0.4.0 - '@cloudflare/unenv-preset': 2.6.0(unenv@2.0.0-rc.19)(workerd@1.20250803.0) + '@cloudflare/unenv-preset': 2.6.1(unenv@2.0.0-rc.19)(workerd@1.20250813.0) blake3-wasm: 2.1.5 esbuild: 0.25.4 - miniflare: 4.20250803.0 + miniflare: 4.20250813.1 path-to-regexp: 6.3.0 unenv: 2.0.0-rc.19 - workerd: 1.20250803.0 + workerd: 1.20250813.0 optionalDependencies: fsevents: 2.3.3 transitivePeerDependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index b94b01a2c..4899ba5cf 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -6,7 +6,7 @@ packages: catalogs: rolldown-vite: - vite: npm:rolldown-vite@^7.1.0 + vite: npm:rolldown-vite@^7.1.2 overrides: '@types/estree': ^1.0.8 From fe15467c9420580ad81cb6c9e82b8f76ea29e3ac Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 18 Aug 2025 13:00:07 +0900 Subject: [PATCH 213/313] chore(deps): update amannn/action-semantic-pull-request action to v6 (#732) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/semantic-pull-request.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/semantic-pull-request.yml b/.github/workflows/semantic-pull-request.yml index 333597eae..1e47a211c 100644 --- a/.github/workflows/semantic-pull-request.yml +++ b/.github/workflows/semantic-pull-request.yml @@ -16,7 +16,7 @@ jobs: pull-requests: read steps: - name: Validate PR title - uses: amannn/action-semantic-pull-request@0723387faaf9b38adef4775cd42cfd5155ed6017 # v5 + uses: amannn/action-semantic-pull-request@fdd4d3ddf614fbcd8c29e4b106d3bbe0cb2c605d # v6 with: subjectPattern: ^(?![A-Z]).+$ subjectPatternError: | From fd96308a6cde57a132b3d9e434e711aac15c6486 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 18 Aug 2025 13:43:26 +0900 Subject: [PATCH 214/313] test(rsc): test assets (#733) --- packages/plugin-rsc/e2e/basic.test.ts | 24 +++++++++++++++++++ .../basic/src/routes/assets/client-css.svg | 1 + .../basic/src/routes/assets/client.css | 6 +++++ .../basic/src/routes/assets/client.svg | 1 + .../basic/src/routes/assets/client.tsx | 19 +++++++++++++++ .../basic/src/routes/assets/server-css.svg | 1 + .../basic/src/routes/assets/server.css | 6 +++++ .../basic/src/routes/assets/server.svg | 1 + .../basic/src/routes/assets/server.tsx | 21 ++++++++++++++++ .../examples/basic/src/routes/root.tsx | 2 ++ .../plugin-rsc/examples/basic/src/server.tsx | 1 + 11 files changed, 83 insertions(+) create mode 100644 packages/plugin-rsc/examples/basic/src/routes/assets/client-css.svg create mode 100644 packages/plugin-rsc/examples/basic/src/routes/assets/client.css create mode 100644 packages/plugin-rsc/examples/basic/src/routes/assets/client.svg create mode 100644 packages/plugin-rsc/examples/basic/src/routes/assets/client.tsx create mode 100644 packages/plugin-rsc/examples/basic/src/routes/assets/server-css.svg create mode 100644 packages/plugin-rsc/examples/basic/src/routes/assets/server.css create mode 100644 packages/plugin-rsc/examples/basic/src/routes/assets/server.svg create mode 100644 packages/plugin-rsc/examples/basic/src/routes/assets/server.tsx diff --git a/packages/plugin-rsc/e2e/basic.test.ts b/packages/plugin-rsc/e2e/basic.test.ts index 6a9bf957a..ec1372de8 100644 --- a/packages/plugin-rsc/e2e/basic.test.ts +++ b/packages/plugin-rsc/e2e/basic.test.ts @@ -1179,4 +1179,28 @@ function defineTest(f: Fixture) { await expect(page.locator(selector)).toHaveCSS('color', color) } }) + + test('assets', async ({ page }) => { + await page.goto(f.url()) + await waitForHydration(page) + await expect( + page.getByTestId('test-assets-server-import'), + ).not.toHaveJSProperty('naturalWidth', 0) + await expect( + page.getByTestId('test-assets-client-import'), + ).not.toHaveJSProperty('naturalWidth', 0) + + async function testBackgroundImage(selector: string) { + const url = await page + .locator(selector) + .evaluate((el) => getComputedStyle(el).backgroundImage) + expect(url).toMatch(/^url\(.*\)$/) + const response = await page.request.get(url.slice(5, -2)) + expect(response.ok()).toBeTruthy() + expect(response.headers()['content-type']).toBe('image/svg+xml') + } + + await testBackgroundImage('.test-assets-server-css') + await testBackgroundImage('.test-assets-client-css') + }) } diff --git a/packages/plugin-rsc/examples/basic/src/routes/assets/client-css.svg b/packages/plugin-rsc/examples/basic/src/routes/assets/client-css.svg new file mode 100644 index 000000000..6c87de9bb --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/assets/client-css.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/plugin-rsc/examples/basic/src/routes/assets/client.css b/packages/plugin-rsc/examples/basic/src/routes/assets/client.css new file mode 100644 index 000000000..b9fe5b89f --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/assets/client.css @@ -0,0 +1,6 @@ +.test-assets-client-css { + background: url(./client-css.svg) no-repeat; + background-size: contain; + width: 20px; + height: 20px; +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/assets/client.svg b/packages/plugin-rsc/examples/basic/src/routes/assets/client.svg new file mode 100644 index 000000000..e7b8dfb1b --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/assets/client.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/plugin-rsc/examples/basic/src/routes/assets/client.tsx b/packages/plugin-rsc/examples/basic/src/routes/assets/client.tsx new file mode 100644 index 000000000..14d14c63c --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/assets/client.tsx @@ -0,0 +1,19 @@ +'use client' + +import './client.css' +import svg from './client.svg?no-inline' + +export function TestAssetsClient() { + return ( +
+ test-assets-client + + +
+ ) +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/assets/server-css.svg b/packages/plugin-rsc/examples/basic/src/routes/assets/server-css.svg new file mode 100644 index 000000000..6c87de9bb --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/assets/server-css.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/plugin-rsc/examples/basic/src/routes/assets/server.css b/packages/plugin-rsc/examples/basic/src/routes/assets/server.css new file mode 100644 index 000000000..d7fef5877 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/assets/server.css @@ -0,0 +1,6 @@ +.test-assets-server-css { + background: url(./server-css.svg) no-repeat; + background-size: contain; + width: 20px; + height: 20px; +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/assets/server.svg b/packages/plugin-rsc/examples/basic/src/routes/assets/server.svg new file mode 100644 index 000000000..e7b8dfb1b --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/assets/server.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/plugin-rsc/examples/basic/src/routes/assets/server.tsx b/packages/plugin-rsc/examples/basic/src/routes/assets/server.tsx new file mode 100644 index 000000000..1feddf7be --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/assets/server.tsx @@ -0,0 +1,21 @@ +import { TestAssetsClient } from './client' +import './server.css' +import svg from './server.svg?no-inline' + +export function TestAssetsServer() { + return ( + <> +
+ test-assets-server + + +
+ + + ) +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/root.tsx b/packages/plugin-rsc/examples/basic/src/routes/root.tsx index 70e6e0112..fa2940011 100644 --- a/packages/plugin-rsc/examples/basic/src/routes/root.tsx +++ b/packages/plugin-rsc/examples/basic/src/routes/root.tsx @@ -37,6 +37,7 @@ import { TestHmrSharedClient } from './hmr-shared/client' import { TestHmrSharedAtomic } from './hmr-shared/atomic/server' import { TestCssQueries } from './css-queries/server' import { TestImportMetaGlob } from './import-meta-glob/server' +import { TestAssetsServer } from './assets/server' export function Root(props: { url: URL }) { return ( @@ -87,6 +88,7 @@ export function Root(props: { url: URL }) { + ) diff --git a/packages/plugin-rsc/examples/basic/src/server.tsx b/packages/plugin-rsc/examples/basic/src/server.tsx index 27808ff17..b845bfba2 100644 --- a/packages/plugin-rsc/examples/basic/src/server.tsx +++ b/packages/plugin-rsc/examples/basic/src/server.tsx @@ -27,6 +27,7 @@ export default async function handler(request: Request): Promise { // `unsafe-eval` is required during dev since React uses eval for findSourceMapURL feature `script-src 'self' 'nonce-${nonce}' ${import.meta.env.DEV ? `'unsafe-eval'` : ``};`, `style-src 'self' 'unsafe-inline';`, + `img-src 'self' data:;`, // allow blob: worker for Vite server ping shared worker import.meta.hot && `worker-src 'self' blob:;`, ] From e2f0c78a4ff06c7053fc43991a92de22812cdf78 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Tue, 19 Aug 2025 11:17:55 +0900 Subject: [PATCH 215/313] fix(react): respect tsconfig jsxImportSource by default (#726) Co-authored-by: Claude --- packages/plugin-react/CHANGELOG.md | 2 + packages/plugin-react/README.md | 2 +- packages/plugin-react/src/index.ts | 5 +- .../__tests__/tsconfig-jsx-preserve.spec.ts | 6 + playground/tsconfig-jsx-preserve/index.html | 2 + playground/tsconfig-jsx-preserve/package.json | 20 ++ playground/tsconfig-jsx-preserve/src/App.tsx | 3 + playground/tsconfig-jsx-preserve/src/main.tsx | 4 + .../tsconfig-jsx-preserve/tsconfig.json | 25 ++ .../tsconfig-jsx-preserve/vite.config.ts | 6 + .../tsconfig/__tests__/tsconfig.spec.ts | 10 + playground/tsconfig/index.html | 2 + playground/tsconfig/package.json | 21 ++ playground/tsconfig/src/App.tsx | 7 + playground/tsconfig/src/main.tsx | 4 + playground/tsconfig/tsconfig.json | 26 +++ playground/tsconfig/vite.config.ts | 6 + pnpm-lock.yaml | 221 +++++++++++++++++- pnpm-workspace.yaml | 2 +- 19 files changed, 358 insertions(+), 16 deletions(-) create mode 100644 playground/tsconfig-jsx-preserve/__tests__/tsconfig-jsx-preserve.spec.ts create mode 100644 playground/tsconfig-jsx-preserve/index.html create mode 100644 playground/tsconfig-jsx-preserve/package.json create mode 100644 playground/tsconfig-jsx-preserve/src/App.tsx create mode 100644 playground/tsconfig-jsx-preserve/src/main.tsx create mode 100644 playground/tsconfig-jsx-preserve/tsconfig.json create mode 100644 playground/tsconfig-jsx-preserve/vite.config.ts create mode 100644 playground/tsconfig/__tests__/tsconfig.spec.ts create mode 100644 playground/tsconfig/index.html create mode 100644 playground/tsconfig/package.json create mode 100644 playground/tsconfig/src/App.tsx create mode 100644 playground/tsconfig/src/main.tsx create mode 100644 playground/tsconfig/tsconfig.json create mode 100644 playground/tsconfig/vite.config.ts diff --git a/packages/plugin-react/CHANGELOG.md b/packages/plugin-react/CHANGELOG.md index c84ee713f..138dfe07b 100644 --- a/packages/plugin-react/CHANGELOG.md +++ b/packages/plugin-react/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +### Respect tsconfig `jsxImportSource` ([#726](https://github.com/vitejs/vite-plugin-react/pull/726)) + ### Fix `reactRefreshHost` option on rolldown-vite ([#716](https://github.com/vitejs/vite-plugin-react/pull/716)) ### Fix `RefreshRuntime` being injected twice for class components on rolldown-vite ([#708](https://github.com/vitejs/vite-plugin-react/pull/708)) diff --git a/packages/plugin-react/README.md b/packages/plugin-react/README.md index 3b66e4658..b7ee2f3f7 100644 --- a/packages/plugin-react/README.md +++ b/packages/plugin-react/README.md @@ -38,7 +38,7 @@ export default defineConfig({ ### jsxImportSource -Control where the JSX factory is imported from. Default to `'react'` +Control where the JSX factory is imported from. By default, this is inferred from `jsxImportSource` from corresponding a tsconfig file for a transformed file. ```js react({ jsxImportSource: '@emotion/react' }) diff --git a/packages/plugin-react/src/index.ts b/packages/plugin-react/src/index.ts index b111c5be1..bb2b224fa 100644 --- a/packages/plugin-react/src/index.ts +++ b/packages/plugin-react/src/index.ts @@ -153,7 +153,7 @@ export default function viteReact(opts: Options = {}): Plugin[] { oxc: { jsx: { runtime: 'automatic', - importSource: jsxImportSource, + importSource: opts.jsxImportSource, refresh: command === 'serve', }, jsxRefreshInclude: include, @@ -174,7 +174,8 @@ export default function viteReact(opts: Options = {}): Plugin[] { return { esbuild: { jsx: 'automatic', - jsxImportSource: jsxImportSource, + // keep undefined by default so that vite's esbuild transform can prioritize jsxImportSource from tsconfig + jsxImportSource: opts.jsxImportSource, }, optimizeDeps: { esbuildOptions: { jsx: 'automatic' } }, } diff --git a/playground/tsconfig-jsx-preserve/__tests__/tsconfig-jsx-preserve.spec.ts b/playground/tsconfig-jsx-preserve/__tests__/tsconfig-jsx-preserve.spec.ts new file mode 100644 index 000000000..3624bf898 --- /dev/null +++ b/playground/tsconfig-jsx-preserve/__tests__/tsconfig-jsx-preserve.spec.ts @@ -0,0 +1,6 @@ +import { expect, test } from 'vitest' +import { page } from '~utils' + +test('override tsconfig jsx preserve', async () => { + await expect.poll(() => page.textContent('#app')).toBe('ok') +}) diff --git a/playground/tsconfig-jsx-preserve/index.html b/playground/tsconfig-jsx-preserve/index.html new file mode 100644 index 000000000..fb1aeef55 --- /dev/null +++ b/playground/tsconfig-jsx-preserve/index.html @@ -0,0 +1,2 @@ +
+ diff --git a/playground/tsconfig-jsx-preserve/package.json b/playground/tsconfig-jsx-preserve/package.json new file mode 100644 index 000000000..631eeca92 --- /dev/null +++ b/playground/tsconfig-jsx-preserve/package.json @@ -0,0 +1,20 @@ +{ + "name": "@vitejs/test-react-tsconfig-jsx-preserve", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "debug": "node --inspect-brk vite", + "preview": "vite preview" + }, + "dependencies": { + "react": "^19.1.1", + "react-dom": "^19.1.1" + }, + "devDependencies": { + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", + "@vitejs/plugin-react": "workspace:*" + } +} diff --git a/playground/tsconfig-jsx-preserve/src/App.tsx b/playground/tsconfig-jsx-preserve/src/App.tsx new file mode 100644 index 000000000..911d75eed --- /dev/null +++ b/playground/tsconfig-jsx-preserve/src/App.tsx @@ -0,0 +1,3 @@ +export default function App() { + return
ok
+} diff --git a/playground/tsconfig-jsx-preserve/src/main.tsx b/playground/tsconfig-jsx-preserve/src/main.tsx new file mode 100644 index 000000000..056386a7d --- /dev/null +++ b/playground/tsconfig-jsx-preserve/src/main.tsx @@ -0,0 +1,4 @@ +import ReactDOM from 'react-dom/client' +import App from './App.jsx' + +ReactDOM.createRoot(document.getElementById('app')!).render() diff --git a/playground/tsconfig-jsx-preserve/tsconfig.json b/playground/tsconfig-jsx-preserve/tsconfig.json new file mode 100644 index 000000000..52a1eea02 --- /dev/null +++ b/playground/tsconfig-jsx-preserve/tsconfig.json @@ -0,0 +1,25 @@ +{ + "include": ["src"], + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "types": ["vite/client"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "preserve", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + } +} diff --git a/playground/tsconfig-jsx-preserve/vite.config.ts b/playground/tsconfig-jsx-preserve/vite.config.ts new file mode 100644 index 000000000..ae745180e --- /dev/null +++ b/playground/tsconfig-jsx-preserve/vite.config.ts @@ -0,0 +1,6 @@ +import react from '@vitejs/plugin-react' +import { defineConfig } from 'vite' + +export default defineConfig({ + plugins: [react()], +}) diff --git a/playground/tsconfig/__tests__/tsconfig.spec.ts b/playground/tsconfig/__tests__/tsconfig.spec.ts new file mode 100644 index 000000000..cabfa5b4d --- /dev/null +++ b/playground/tsconfig/__tests__/tsconfig.spec.ts @@ -0,0 +1,10 @@ +import { expect, test } from 'vitest' +import { page } from '~utils' + +test('respect tsconfig jsxImportSource', async () => { + await expect + .poll(() => + page.getByTestId('emotion').evaluate((el) => getComputedStyle(el).color), + ) + .toBe('rgb(255, 0, 0)') +}) diff --git a/playground/tsconfig/index.html b/playground/tsconfig/index.html new file mode 100644 index 000000000..fb1aeef55 --- /dev/null +++ b/playground/tsconfig/index.html @@ -0,0 +1,2 @@ +
+ diff --git a/playground/tsconfig/package.json b/playground/tsconfig/package.json new file mode 100644 index 000000000..9de9c768c --- /dev/null +++ b/playground/tsconfig/package.json @@ -0,0 +1,21 @@ +{ + "name": "@vitejs/test-react-tsconfig", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "debug": "node --inspect-brk vite", + "preview": "vite preview" + }, + "dependencies": { + "@emotion/react": "^11.14.0", + "react": "^19.1.1", + "react-dom": "^19.1.1" + }, + "devDependencies": { + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", + "@vitejs/plugin-react": "workspace:*" + } +} diff --git a/playground/tsconfig/src/App.tsx b/playground/tsconfig/src/App.tsx new file mode 100644 index 000000000..27b40fe02 --- /dev/null +++ b/playground/tsconfig/src/App.tsx @@ -0,0 +1,7 @@ +export default function App() { + return ( +
+ This should be red +
+ ) +} diff --git a/playground/tsconfig/src/main.tsx b/playground/tsconfig/src/main.tsx new file mode 100644 index 000000000..056386a7d --- /dev/null +++ b/playground/tsconfig/src/main.tsx @@ -0,0 +1,4 @@ +import ReactDOM from 'react-dom/client' +import App from './App.jsx' + +ReactDOM.createRoot(document.getElementById('app')!).render() diff --git a/playground/tsconfig/tsconfig.json b/playground/tsconfig/tsconfig.json new file mode 100644 index 000000000..3801cb87d --- /dev/null +++ b/playground/tsconfig/tsconfig.json @@ -0,0 +1,26 @@ +{ + "include": ["src"], + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "types": ["vite/client"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + "jsxImportSource": "@emotion/react", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + } +} diff --git a/playground/tsconfig/vite.config.ts b/playground/tsconfig/vite.config.ts new file mode 100644 index 000000000..ae745180e --- /dev/null +++ b/playground/tsconfig/vite.config.ts @@ -0,0 +1,6 @@ +import react from '@vitejs/plugin-react' +import { defineConfig } from 'vite' + +export default defineConfig({ + plugins: [react()], +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bdbf04429..f71f2162b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,8 +7,8 @@ settings: catalogs: rolldown-vite: vite: - specifier: npm:rolldown-vite@^7.1.2 - version: 7.1.2 + specifier: npm:rolldown-vite@^7.1.3 + version: 7.1.3 overrides: '@types/estree': ^1.0.8 @@ -140,7 +140,7 @@ importers: version: 0.14.1(publint@0.3.12)(typescript@5.9.2) vite: specifier: catalog:rolldown-vite - version: rolldown-vite@7.1.2(@types/node@22.17.2)(esbuild@0.25.5)(jiti@2.5.1)(tsx@4.20.4)(yaml@2.7.1) + version: rolldown-vite@7.1.3(@types/node@22.17.2)(esbuild@0.25.5)(jiti@2.5.1)(tsx@4.20.4)(yaml@2.7.1) packages/plugin-react-swc: dependencies: @@ -1028,6 +1028,47 @@ importers: specifier: workspace:* version: link:../../packages/plugin-react + playground/tsconfig: + dependencies: + '@emotion/react': + specifier: ^11.14.0 + version: 11.14.0(@types/react@19.1.10)(react@19.1.1) + react: + specifier: ^19.1.1 + version: 19.1.1 + react-dom: + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) + devDependencies: + '@types/react': + specifier: ^19.1.9 + version: 19.1.10 + '@types/react-dom': + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.10) + '@vitejs/plugin-react': + specifier: workspace:* + version: link:../../packages/plugin-react + + playground/tsconfig-jsx-preserve: + dependencies: + react: + specifier: ^19.1.1 + version: 19.1.1 + react-dom: + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) + devDependencies: + '@types/react': + specifier: ^19.1.9 + version: 19.1.10 + '@types/react-dom': + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.10) + '@vitejs/plugin-react': + specifier: workspace:* + version: link:../../packages/plugin-react + packages: '@aashutoshrathi/word-wrap@1.2.6': @@ -1908,9 +1949,16 @@ packages: resolution: {integrity: sha512-zm/LDVOq9FEmHiuM8zO4DWirv0VP2Tv2VsgaiHby9nvpq+FVrcqNYgv+TysLKOITQXWZj/roluTxFvpkHP0Iuw==} engines: {node: '>=6.9.0'} + '@oxc-project/runtime@0.82.2': + resolution: {integrity: sha512-cYxcj5CPn/vo5QSpCZcYzBiLidU5+GlFSqIeNaMgBDtcVRBsBJHZg3pHw999W6nHamFQ1EHuPPByB26tjaJiJw==} + engines: {node: '>=6.9.0'} + '@oxc-project/types@0.81.0': resolution: {integrity: sha512-CnOqkybZK8z6Gx7Wb1qF7AEnSzbol1WwcIzxYOr8e91LytGOjo0wCpgoYWZo8sdbpqX+X+TJayIzo4Pv0R/KjA==} + '@oxc-project/types@0.82.2': + resolution: {integrity: sha512-WMGSwd9FsNBs/WfqIOH0h3k1LBdjZJQGYjGnC+vla/fh6HUsu5HzGPerRljiq1hgMQ6gs031YJR12VyP57b/hQ==} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -1976,74 +2024,147 @@ packages: cpu: [arm64] os: [android] + '@rolldown/binding-android-arm64@1.0.0-beta.33': + resolution: {integrity: sha512-xhDQXKftRkEULIxCddrKMR8y0YO/Y+6BKk/XrQP2B29YjV2wr8DByoEz+AHX9BfLHb2srfpdN46UquBW2QXWpQ==} + cpu: [arm64] + os: [android] + '@rolldown/binding-darwin-arm64@1.0.0-beta.32': resolution: {integrity: sha512-W8oMqzGcI7wKPXUtS3WJNXzbghHfNiuM1UBAGpVb+XlUCgYRQJd2PRGP7D3WGql3rR3QEhUvSyAuCBAftPQw6Q==} cpu: [arm64] os: [darwin] + '@rolldown/binding-darwin-arm64@1.0.0-beta.33': + resolution: {integrity: sha512-7lhhY08v5ZtRq8JJQaJ49fnJombAPnqllKKCDLU/UvaqNAOEyTGC8J1WVOLC4EA4zbXO5U3CCRgVGyAFNH2VtQ==} + cpu: [arm64] + os: [darwin] + '@rolldown/binding-darwin-x64@1.0.0-beta.32': resolution: {integrity: sha512-pM4c4sKUk37noJrnnDkJknLhCsfZu7aWyfe67bD0GQHfzAPjV16wPeD9CmQg4/0vv+5IfHYaa4VE536xbA+W0Q==} cpu: [x64] os: [darwin] + '@rolldown/binding-darwin-x64@1.0.0-beta.33': + resolution: {integrity: sha512-U2iGjcDV7NWyYyhap8YuY0nwrLX6TvX/9i7gBtdEMPm9z3wIUVGNMVdGlA43uqg7xDpRGpEqGnxbeDgiEwYdnA==} + cpu: [x64] + os: [darwin] + '@rolldown/binding-freebsd-x64@1.0.0-beta.32': resolution: {integrity: sha512-M8SUgFlYb5kJJWcFC8gUMRiX4WLFxPKMed3SJ2YrxontgIrEcpizPU8nLNVsRYEStoSfKHKExpQw3OP6fm+5bw==} cpu: [x64] os: [freebsd] + '@rolldown/binding-freebsd-x64@1.0.0-beta.33': + resolution: {integrity: sha512-gd6ASromVHFLlzrjJWMG5CXHkS7/36DEZ8HhvGt2NN8eZALCIuyEx8HMMLqvKA7z4EAztVkdToVrdxpGMsKZxw==} + cpu: [x64] + os: [freebsd] + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.32': resolution: {integrity: sha512-FuQpbNC/hE//bvv29PFnk0AtpJzdPdYl5CMhlWPovd9g3Kc3lw9TrEPIbL7gRPUdhKAiq6rVaaGvOnXxsa0eww==} cpu: [arm] os: [linux] + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.33': + resolution: {integrity: sha512-xmeLfkfGthuynO1EpCdyTVr0r4G+wqvnKCuyR6rXOet+hLrq5HNAC2XtP/jU2TB4Bc6aiLYxl868B8CGtFDhcw==} + cpu: [arm] + os: [linux] + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.32': resolution: {integrity: sha512-hRZygRlaGCjcNTNY9GV7dDI18sG1dK3cc7ujHq72LoDad23zFDUGMQjiSxHWK+/r92iMV+j2MiHbvzayxqynsg==} cpu: [arm64] os: [linux] + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.33': + resolution: {integrity: sha512-cHGp8yfHL4pes6uaLbO5L58ceFkUK4efd8iE86jClD1QPPDLKiqEXJCFYeuK3OfODuF5EBOmf0SlcUZNEYGdmw==} + cpu: [arm64] + os: [linux] + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.32': resolution: {integrity: sha512-HzgT6h+CXLs+GKAU0Wvkt3rvcv0CmDBsDjlPhh4GHysOKbG9NjpKYX2zvjx671E9pGbTvcPpwy7gGsy7xpu+8g==} cpu: [arm64] os: [linux] + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.33': + resolution: {integrity: sha512-wZ1t7JAvVeFgskH1L9y7c47ITitPytpL0s8FmAT8pVfXcaTmS58ZyoXT+y6cz8uCkQnETjrX3YezTGI18u3ecg==} + cpu: [arm64] + os: [linux] + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.32': resolution: {integrity: sha512-Ab/wbf6gdzphDbsg51UaxsC93foQ7wxhtg0SVCXd25BrV4MAJ1HoDtKN/f4h0maFmJobkqYub2DlmoasUzkvBg==} cpu: [x64] os: [linux] + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.33': + resolution: {integrity: sha512-cDndWo3VEYbm7yeujOV6Ie2XHz0K8YX/R/vbNmMo03m1QwtBKKvbYNSyJb3B9+8igltDjd8zNM9mpiNNrq/ekQ==} + cpu: [x64] + os: [linux] + '@rolldown/binding-linux-x64-musl@1.0.0-beta.32': resolution: {integrity: sha512-VoxqGEfh5A1Yx+zBp/FR5QwAbtzbuvky2SVc+ii4g1gLD4zww6mt/hPi5zG+b88zYPFBKHpxMtsz9cWqXU5V5Q==} cpu: [x64] os: [linux] + '@rolldown/binding-linux-x64-musl@1.0.0-beta.33': + resolution: {integrity: sha512-bl7uzi6es/l6LT++NZcBpiX43ldLyKXCPwEZGY1rZJ99HQ7m1g3KxWwYCcGxtKjlb2ExVvDZicF6k+96vxOJKg==} + cpu: [x64] + os: [linux] + '@rolldown/binding-openharmony-arm64@1.0.0-beta.32': resolution: {integrity: sha512-qZ1ViyOUDGbiZrSAJ/FIAhYUElDfVxxFW6DLT/w4KeoZN3HsF4jmRP95mXtl51/oGrqzU9l9Q2f7/P4O/o2ZZA==} cpu: [arm64] os: [openharmony] + '@rolldown/binding-openharmony-arm64@1.0.0-beta.33': + resolution: {integrity: sha512-TrgzQanpLgcmmzolCbYA9BPZgF1gYxkIGZhU/HROnJPsq67gcyaYw/JBLioqQLjIwMipETkn25YY799D2OZzJA==} + cpu: [arm64] + os: [openharmony] + '@rolldown/binding-wasm32-wasi@1.0.0-beta.32': resolution: {integrity: sha512-hEkG3wD+f3wytV0lqwb/uCrXc4r4Ny/DWJFJPfQR3VeMWplhWGgSHNwZc2Q7k86Yi36f9NNzzWmrIuvHI9lCVw==} engines: {node: '>=14.0.0'} cpu: [wasm32] + '@rolldown/binding-wasm32-wasi@1.0.0-beta.33': + resolution: {integrity: sha512-z0LltdUfvoKak9SuaLz/M9AVSg+RTOZjFksbZXzC6Svl1odyW4ai21VHhZy3m2Faeeb/rl/9efVLayj+qYEGxw==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.32': resolution: {integrity: sha512-k3MvDf8SiA7uP2ikP0unNouJ2YCrnwi7xcVW+RDgMp5YXVr3Xu6svmT3HGn0tkCKUuPmf+uy8I5uiHt5qWQbew==} cpu: [arm64] os: [win32] + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.33': + resolution: {integrity: sha512-CpvOHyqDNOYx9riD4giyXQDIu72bWRU2Dwt1xFSPlBudk6NumK0OJl6Ch+LPnkp5podQHcQg0mMauAXPVKct7g==} + cpu: [arm64] + os: [win32] + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.32': resolution: {integrity: sha512-wAi/FxGh7arDOUG45UmnXE1sZUa0hY4cXAO2qWAjFa3f7bTgz/BqwJ7XN5SUezvAJPNkME4fEpInfnBvM25a0w==} cpu: [ia32] os: [win32] + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.33': + resolution: {integrity: sha512-/tNTvZTWHz6HiVuwpR3zR0kGIyCNb+/tFhnJmti+Aw2fAXs3l7Aj0DcXd0646eFKMX8L2w5hOW9H08FXTUkN0g==} + cpu: [ia32] + os: [win32] + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.32': resolution: {integrity: sha512-Ej0i4PZk8ltblZtzVK8ouaGUacUtxRmTm5S9794mdyU/tYxXjAJNseOfxrnHpMWKjMDrOKbqkPqJ52T9NR4LQQ==} cpu: [x64] os: [win32] + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.33': + resolution: {integrity: sha512-Bb2qK3z7g2mf4zaKRvkohHzweaP1lLbaoBmXZFkY6jJWMm0Z8Pfnh8cOoRlH1IVM1Ufbo8ZZ1WXp1LbOpRMtXw==} + cpu: [x64] + os: [win32] + '@rolldown/pluginutils@1.0.0-beta.32': resolution: {integrity: sha512-QReCdvxiUZAPkvp1xpAg62IeNzykOFA6syH2CnClif4YmALN1XKpB39XneL80008UbtMShthSVDKmrx05N1q/g==} + '@rolldown/pluginutils@1.0.0-beta.33': + resolution: {integrity: sha512-she25NCG6NoEPC/SEB4pHs5STcnfI4VBFOzjeI63maSPrWME5J2XC8ogrBgp8NaE/xzj28/kbpSaebiMvFRj+w==} + '@rollup/plugin-replace@6.0.2': resolution: {integrity: sha512-7QaYCf8bqF04dOy7w/eHmJeNExxTYwvKAmlSAH/EaWWUzbT0h5sbF6bktFoX/0F/0qwng5/dWFMyf3gzaM8DsQ==} engines: {node: '>=14.0.0'} @@ -4269,8 +4390,8 @@ packages: vue-tsc: optional: true - rolldown-vite@7.1.2: - resolution: {integrity: sha512-9VwY/BOirnPDJ8HXiXTdVdLXTSQkNGDVgpuhfmMxAH7HxSBb71VaTyQh/FHPtMk2psAyglQXWheYKXV53N27/Q==} + rolldown-vite@7.1.3: + resolution: {integrity: sha512-J22JlCJQbIRxR6KGwpf76Uq3R4wk6avQHCijXGPsXsbVpPt+Uavg5M5dvzP7XdlAKL8uZE5Xof9j4Y9yu+cxxg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -4313,6 +4434,10 @@ packages: resolution: {integrity: sha512-vxI2sPN07MMaoYKlFrVva5qZ1Y7DAZkgp7MQwTnyHt4FUMz9Sh+YeCzNFV9JYHI6ZNwoGWLCfCViE3XVsRC1cg==} hasBin: true + rolldown@1.0.0-beta.33: + resolution: {integrity: sha512-mgu118ZuRguC8unhPCbdZbyRbjQfEMiWqlojBA5aRIncBelRaBomnHNpGKYkYWeK7twRz5Cql30xgqqrA3Xelw==} + hasBin: true + rollup@4.44.1: resolution: {integrity: sha512-x8H8aPvD+xbl0Do8oez5f5o8eMS3trfCghc4HhLAnCkj7Vl0d1JWGs0UF/D886zLW2rOj2QymV/JcSSsw+XDNg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -5837,8 +5962,12 @@ snapshots: '@oxc-project/runtime@0.81.0': {} + '@oxc-project/runtime@0.82.2': {} + '@oxc-project/types@0.81.0': {} + '@oxc-project/types@0.82.2': {} + '@pkgjs/parseargs@0.11.0': optional: true @@ -5928,49 +6057,95 @@ snapshots: '@rolldown/binding-android-arm64@1.0.0-beta.32': optional: true + '@rolldown/binding-android-arm64@1.0.0-beta.33': + optional: true + '@rolldown/binding-darwin-arm64@1.0.0-beta.32': optional: true + '@rolldown/binding-darwin-arm64@1.0.0-beta.33': + optional: true + '@rolldown/binding-darwin-x64@1.0.0-beta.32': optional: true + '@rolldown/binding-darwin-x64@1.0.0-beta.33': + optional: true + '@rolldown/binding-freebsd-x64@1.0.0-beta.32': optional: true + '@rolldown/binding-freebsd-x64@1.0.0-beta.33': + optional: true + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.32': optional: true + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.33': + optional: true + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.32': optional: true + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.33': + optional: true + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.32': optional: true + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.33': + optional: true + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.32': optional: true + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.33': + optional: true + '@rolldown/binding-linux-x64-musl@1.0.0-beta.32': optional: true + '@rolldown/binding-linux-x64-musl@1.0.0-beta.33': + optional: true + '@rolldown/binding-openharmony-arm64@1.0.0-beta.32': optional: true + '@rolldown/binding-openharmony-arm64@1.0.0-beta.33': + optional: true + '@rolldown/binding-wasm32-wasi@1.0.0-beta.32': dependencies: '@napi-rs/wasm-runtime': 1.0.3 optional: true + '@rolldown/binding-wasm32-wasi@1.0.0-beta.33': + dependencies: + '@napi-rs/wasm-runtime': 1.0.3 + optional: true + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.32': optional: true + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.33': + optional: true + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.32': optional: true + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.33': + optional: true + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.32': optional: true + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.33': + optional: true + '@rolldown/pluginutils@1.0.0-beta.32': {} + '@rolldown/pluginutils@1.0.0-beta.33': {} + '@rollup/plugin-replace@6.0.2(rollup@4.44.1)': dependencies: '@rollup/pluginutils': 5.1.4(rollup@4.44.1) @@ -6257,7 +6432,7 @@ snapshots: '@types/hoist-non-react-statics@3.3.6': dependencies: - '@types/react': 18.3.20 + '@types/react': 19.1.10 hoist-non-react-statics: 3.3.2 '@types/json-schema@7.0.15': {} @@ -8290,7 +8465,7 @@ snapshots: rfdc@1.4.1: {} - rolldown-plugin-dts@0.15.6(rolldown@1.0.0-beta.32)(typescript@5.9.2): + rolldown-plugin-dts@0.15.6(rolldown@1.0.0-beta.33)(typescript@5.9.2): dependencies: '@babel/generator': 7.28.0 '@babel/parser': 7.28.0 @@ -8300,20 +8475,20 @@ snapshots: debug: 4.4.1 dts-resolver: 2.1.1 get-tsconfig: 4.10.1 - rolldown: 1.0.0-beta.32 + rolldown: 1.0.0-beta.33 optionalDependencies: typescript: 5.9.2 transitivePeerDependencies: - oxc-resolver - supports-color - rolldown-vite@7.1.2(@types/node@22.17.2)(esbuild@0.25.5)(jiti@2.5.1)(tsx@4.20.4)(yaml@2.7.1): + rolldown-vite@7.1.3(@types/node@22.17.2)(esbuild@0.25.5)(jiti@2.5.1)(tsx@4.20.4)(yaml@2.7.1): dependencies: fdir: 6.4.6(picomatch@4.0.3) lightningcss: 1.30.1 picomatch: 4.0.3 postcss: 8.5.6 - rolldown: 1.0.0-beta.32 + rolldown: 1.0.0-beta.33 tinyglobby: 0.2.14 optionalDependencies: '@types/node': 22.17.2 @@ -8345,6 +8520,28 @@ snapshots: '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.32 '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.32 + rolldown@1.0.0-beta.33: + dependencies: + '@oxc-project/runtime': 0.82.2 + '@oxc-project/types': 0.82.2 + '@rolldown/pluginutils': 1.0.0-beta.33 + ansis: 4.1.0 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.0-beta.33 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.33 + '@rolldown/binding-darwin-x64': 1.0.0-beta.33 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.33 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.33 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.33 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.33 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.33 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.33 + '@rolldown/binding-openharmony-arm64': 1.0.0-beta.33 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.33 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.33 + '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.33 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.33 + rollup@4.44.1: dependencies: '@types/estree': 1.0.8 @@ -8634,8 +8831,8 @@ snapshots: diff: 8.0.2 empathic: 2.0.0 hookable: 5.5.3 - rolldown: 1.0.0-beta.32 - rolldown-plugin-dts: 0.15.6(rolldown@1.0.0-beta.32)(typescript@5.9.2) + rolldown: 1.0.0-beta.33 + rolldown-plugin-dts: 0.15.6(rolldown@1.0.0-beta.33)(typescript@5.9.2) semver: 7.7.2 tinyexec: 1.0.1 tinyglobby: 0.2.14 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 4899ba5cf..ee8e18021 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -6,7 +6,7 @@ packages: catalogs: rolldown-vite: - vite: npm:rolldown-vite@^7.1.2 + vite: npm:rolldown-vite@^7.1.3 overrides: '@types/estree': ^1.0.8 From 268354a3186b461b52151d100221d81e9df47ab3 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Tue, 19 Aug 2025 11:39:07 +0900 Subject: [PATCH 216/313] test(react): update `playground/react-emotion` to tsx and remove `playground/tsconfig` (#737) --- .../react-emotion/__tests__/react.spec.ts | 6 +++--- playground/react-emotion/index.html | 10 +-------- playground/react-emotion/package.json | 2 ++ .../react-emotion/{App.jsx => src/App.tsx} | 5 +++-- .../{Counter.jsx => src/Counter.tsx} | 1 + .../{tsconfig => react-emotion}/src/main.tsx | 2 +- .../{tsconfig => react-emotion}/tsconfig.json | 0 playground/react-emotion/vite.config.ts | 4 +++- .../tsconfig/__tests__/tsconfig.spec.ts | 10 --------- playground/tsconfig/index.html | 2 -- playground/tsconfig/package.json | 21 ------------------- playground/tsconfig/src/App.tsx | 7 ------- playground/tsconfig/vite.config.ts | 6 ------ pnpm-lock.yaml | 8 ++++++- 14 files changed, 21 insertions(+), 63 deletions(-) rename playground/react-emotion/{App.jsx => src/App.tsx} (88%) rename playground/react-emotion/{Counter.jsx => src/Counter.tsx} (94%) rename playground/{tsconfig => react-emotion}/src/main.tsx (79%) rename playground/{tsconfig => react-emotion}/tsconfig.json (100%) delete mode 100644 playground/tsconfig/__tests__/tsconfig.spec.ts delete mode 100644 playground/tsconfig/index.html delete mode 100644 playground/tsconfig/package.json delete mode 100644 playground/tsconfig/src/App.tsx delete mode 100644 playground/tsconfig/vite.config.ts diff --git a/playground/react-emotion/__tests__/react.spec.ts b/playground/react-emotion/__tests__/react.spec.ts index ff4731ee3..943a1c89c 100644 --- a/playground/react-emotion/__tests__/react.spec.ts +++ b/playground/react-emotion/__tests__/react.spec.ts @@ -14,12 +14,12 @@ test('should update', async () => { }) test.runIf(isServe)('should hmr', async () => { - editFile('App.jsx', (code) => + editFile('src/App.tsx', (code) => code.replace('Vite + React + @emotion/react', 'Updated'), ) await expect.poll(() => page.textContent('h1')).toMatch('Hello Updated') - editFile('Counter.jsx', (code) => + editFile('src/Counter.tsx', (code) => code.replace('color: #646cff;', 'color: #d26ac2;'), ) @@ -43,7 +43,7 @@ test('should update button style', async () => { expect(await getButtonBorderStyle()).toMatch('2px solid rgb(0, 0, 0)') if (isServe) { - editFile('Counter.jsx', (code) => + editFile('src/Counter.tsx', (code) => code.replace('border: 2px solid #000', 'border: 4px solid red'), ) diff --git a/playground/react-emotion/index.html b/playground/react-emotion/index.html index 7417c442d..fb1aeef55 100644 --- a/playground/react-emotion/index.html +++ b/playground/react-emotion/index.html @@ -1,10 +1,2 @@
- + diff --git a/playground/react-emotion/package.json b/playground/react-emotion/package.json index fcad26419..6f096e6ca 100644 --- a/playground/react-emotion/package.json +++ b/playground/react-emotion/package.json @@ -18,6 +18,8 @@ "devDependencies": { "@babel/plugin-proposal-pipeline-operator": "^7.27.1", "@emotion/babel-plugin": "^11.13.5", + "@types/react": "^19.1.10", + "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "workspace:*" }, "babel": { diff --git a/playground/react-emotion/App.jsx b/playground/react-emotion/src/App.tsx similarity index 88% rename from playground/react-emotion/App.jsx rename to playground/react-emotion/src/App.tsx index b1d3f58e4..09300fd8d 100644 --- a/playground/react-emotion/App.jsx +++ b/playground/react-emotion/src/App.tsx @@ -1,7 +1,8 @@ import { useState } from 'react' import _Switch from 'react-switch' -import { Counter, StyledCode } from './Counter' -const Switch = _Switch.default || _Switch +import { Counter, StyledCode } from './Counter.tsx' + +const Switch = (_Switch as any).default || _Switch function FragmentTest() { const [checked, setChecked] = useState(false) diff --git a/playground/react-emotion/Counter.jsx b/playground/react-emotion/src/Counter.tsx similarity index 94% rename from playground/react-emotion/Counter.jsx rename to playground/react-emotion/src/Counter.tsx index 132b60f14..d7d88f2c4 100644 --- a/playground/react-emotion/Counter.jsx +++ b/playground/react-emotion/src/Counter.tsx @@ -14,6 +14,7 @@ export function Counter() {