diff --git a/packages/vite/package.json b/packages/vite/package.json index ec13efdfa00d29..b6a2abe0f78b2b 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -88,7 +88,8 @@ "dependencies": { "esbuild": "^0.24.0", "postcss": "^8.4.48", - "rolldown": "https://pkg.pr.new/rolldown@3d47bd0", + "react-refresh": "^0.14.2", + "rolldown": "0.13.2-snapshot-a292401-20241105072341", "rollup": "^4.23.0" }, "devDependencies": { diff --git a/packages/vite/src/node/build.ts b/packages/vite/src/node/build.ts index e1baf4102f5292..f2c59104c6f9b6 100644 --- a/packages/vite/src/node/build.ts +++ b/packages/vite/src/node/build.ts @@ -1355,6 +1355,7 @@ const relativeUrlMechanisms: Record< `(typeof document === 'undefined' && typeof location === 'undefined' ? ${getFileUrlFromRelativePath( relativePath, )} : ${getRelativeUrlFromDocument(relativePath, true)})`, + app: () => 'todo', } /* end of copy */ diff --git a/packages/vite/src/node/config.ts b/packages/vite/src/node/config.ts index e1a80bd1278a51..0eee427f5f9c5d 100644 --- a/packages/vite/src/node/config.ts +++ b/packages/vite/src/node/config.ts @@ -99,6 +99,10 @@ import { resolveSSROptions, ssrConfigDefaults } from './ssr' import { PartialEnvironment } from './baseEnvironment' import { createIdResolver } from './idResolver' import { type OxcOptions, convertEsbuildConfigToOxcConfig } from './plugins/oxc' +import { + type RolldownDevOptions, + rolldownDevHandleConfig, +} from './server/environments/rolldown' const debug = createDebugger('vite:config', { depth: 10 }) const promisifiedRealpath = promisify(fs.realpath) @@ -518,6 +522,8 @@ export interface ExperimentalOptions { * @default true */ enableNativePlugin?: boolean + + rolldownDev?: RolldownDevOptions } export interface LegacyOptions { @@ -1160,6 +1166,7 @@ export async function resolveConfig( // run config hooks const userPlugins = [...prePlugins, ...normalPlugins, ...postPlugins] config = await runConfigHook(config, userPlugins, configEnv) + config = mergeConfig(config, rolldownDevHandleConfig(config, configEnv)) // Ensure default client and ssr environments // If there are present, ensure order { client, ssr, ...custom } diff --git a/packages/vite/src/node/plugins/asset.ts b/packages/vite/src/node/plugins/asset.ts index 92788acd5126c2..90b0d8c895a810 100644 --- a/packages/vite/src/node/plugins/asset.ts +++ b/packages/vite/src/node/plugins/asset.ts @@ -275,7 +275,10 @@ export async function fileToUrl( id: string, ): Promise { const { environment } = pluginContext - if (environment.config.command === 'serve') { + if ( + environment.config.command === 'serve' && + !environment.config.experimental.rolldownDev + ) { return fileToDevUrl(environment, id) } else { return fileToBuiltUrl(pluginContext, id) diff --git a/packages/vite/src/node/plugins/html.ts b/packages/vite/src/node/plugins/html.ts index 031755d9f4cbd8..e9f1af3aad1f9b 100644 --- a/packages/vite/src/node/plugins/html.ts +++ b/packages/vite/src/node/plugins/html.ts @@ -775,7 +775,13 @@ export function buildHtmlPlugin(config: ResolvedConfig): RolldownPlugin { tag: 'script', attrs: { ...(isAsync ? { async: true } : {}), - type: 'module', + ...(config.experimental.rolldownDev + ? { + defer: true, + } + : { + type: 'module', + }), // crossorigin must be set not only for serving assets in a different origin // but also to make it possible to preload the script using ``. // ` + + diff --git a/playground/rolldown-dev-react/package.json b/playground/rolldown-dev-react/package.json new file mode 100644 index 00000000000000..d1db9e7cc4b4fb --- /dev/null +++ b/playground/rolldown-dev-react/package.json @@ -0,0 +1,18 @@ +{ + "name": "@vitejs/test-rolldown-dev-react", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "devDependencies": { + "@types/react": "^18.3.11", + "@types/react-dom": "^18.3.1" + } +} diff --git a/playground/rolldown-dev-react/src/app.tsx b/playground/rolldown-dev-react/src/app.tsx new file mode 100644 index 00000000000000..b48bb82e87df62 --- /dev/null +++ b/playground/rolldown-dev-react/src/app.tsx @@ -0,0 +1,40 @@ +import React from 'react' +// @ts-expect-error no type +import virtualTest from 'virtual:test' +// @ts-expect-error no type +import testAlias from 'test-alias' +import { throwError } from './error' +import './test-style.css' +// TODO: hmr for assets? +import testStyleUrl from './test-style-url.css?url' +import testStyleInline from './test-style-inline.css?inline' + +export function App() { + const [count, setCount] = React.useState(0) + + return ( +
+

Vite + React

+
+ +
[virtual] {virtualTest}
+
[alias] {testAlias}
+ {/* TODO: source map is slightly broken probably due to patching rolldown:runtime during renderChunk */} + +
+          [css] orange
+        
+ +
+          [css?url] orange
+        
+ +
+          [css?inline] orange
+        
+
+
+ ) +} diff --git a/playground/rolldown-dev-react/src/error.ts b/playground/rolldown-dev-react/src/error.ts new file mode 100644 index 00000000000000..50141c04dfa7bb --- /dev/null +++ b/playground/rolldown-dev-react/src/error.ts @@ -0,0 +1,9 @@ +// +// random new lines +// +export function throwError() { + // + // and more + // + throw new Error('boom') +} diff --git a/playground/rolldown-dev-react/src/main.tsx b/playground/rolldown-dev-react/src/main.tsx new file mode 100644 index 00000000000000..954d0f3158a328 --- /dev/null +++ b/playground/rolldown-dev-react/src/main.tsx @@ -0,0 +1,9 @@ +import React from 'react' +import ReactDOMClient from 'react-dom/client' +import { App } from './app' + +ReactDOMClient.createRoot(document.getElementById('root')!).render( + + + , +) diff --git a/playground/rolldown-dev-react/src/test-alias-dest.tsx b/playground/rolldown-dev-react/src/test-alias-dest.tsx new file mode 100644 index 00000000000000..d11d8b5b18649a --- /dev/null +++ b/playground/rolldown-dev-react/src/test-alias-dest.tsx @@ -0,0 +1 @@ +export default 'test-alias-dest:ok' diff --git a/playground/rolldown-dev-react/src/test-style-inline.css b/playground/rolldown-dev-react/src/test-style-inline.css new file mode 100644 index 00000000000000..1e4583bd2a4582 --- /dev/null +++ b/playground/rolldown-dev-react/src/test-style-inline.css @@ -0,0 +1,3 @@ +.test-style-inline { + color: orange; +} diff --git a/playground/rolldown-dev-react/src/test-style-url.css b/playground/rolldown-dev-react/src/test-style-url.css new file mode 100644 index 00000000000000..49f17a93ad4c88 --- /dev/null +++ b/playground/rolldown-dev-react/src/test-style-url.css @@ -0,0 +1,3 @@ +.test-style-url { + color: orange; +} diff --git a/playground/rolldown-dev-react/src/test-style.css b/playground/rolldown-dev-react/src/test-style.css new file mode 100644 index 00000000000000..72c963d41acaad --- /dev/null +++ b/playground/rolldown-dev-react/src/test-style.css @@ -0,0 +1,3 @@ +.test-style { + color: orange; +} diff --git a/playground/rolldown-dev-react/tsconfig.json b/playground/rolldown-dev-react/tsconfig.json new file mode 100644 index 00000000000000..b2a411748b73b4 --- /dev/null +++ b/playground/rolldown-dev-react/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../tsconfig.json", + "include": ["src", "*.ts"], + "compilerOptions": { + "jsx": "react-jsx" + } +} diff --git a/playground/rolldown-dev-react/vite.config.ts b/playground/rolldown-dev-react/vite.config.ts new file mode 100644 index 00000000000000..b7f4140d98a9fe --- /dev/null +++ b/playground/rolldown-dev-react/vite.config.ts @@ -0,0 +1,56 @@ +import { join } from 'node:path' +import { debuglog } from 'node:util' +import { defineConfig } from 'vite' + +const debug = debuglog('dev') + +export default defineConfig({ + clearScreen: false, + experimental: { + rolldownDev: { + hmr: true, + reactRefresh: true, + }, + }, + resolve: { + alias: { + 'test-alias': join(import.meta.dirname, './src/test-alias-dest.tsx'), + }, + }, + plugins: [ + { + name: 'test', + options() { + debug('[options]', this.environment?.name) + }, + buildStart() { + debug('[buildStart]', this.environment?.name) + }, + buildEnd() { + debug('[buildEnd]', this.environment?.name) + }, + resolveId: { + handler(source, importer, _options) { + if (source === 'virtual:test') { + debug('[resolveId]', [this.environment?.name, source, importer]) + return `\0virtual:test` + } + }, + }, + load: { + handler(id, _options) { + if (id === '\0virtual:test') { + debug('[load]', this.environment?.name) + return `export default "test:virtual:ok, environment.name: ${this.environment.name}"` + } + }, + }, + renderChunk() { + debug('[renderChunk]', this.environment?.name) + }, + generateBundle() { + debug('[generateBundle]', this.environment?.name) + }, + }, + ], +}) diff --git a/playground/rolldown-dev-ssr/__tests__/basic.spec.ts b/playground/rolldown-dev-ssr/__tests__/basic.spec.ts new file mode 100644 index 00000000000000..63a4ec15023f89 --- /dev/null +++ b/playground/rolldown-dev-ssr/__tests__/basic.spec.ts @@ -0,0 +1,26 @@ +import { expect, test } from 'vitest' +import { editFile, isBuild, page, viteTestUrl } from '../../test-utils' + +test('basic', async () => { + await page.getByText('hydrated: true').click() + await page.getByRole('button', { name: 'Count: 0' }).click() + await page.getByRole('button', { name: 'Count: 1' }).click() + await page.getByText('[virtual] test:virtual:ok').click() + + const res = await page.request.get(viteTestUrl) + expect(await res.text()).toContain('hydrated: false') +}) + +test.runIf(!isBuild)('hmr', async () => { + await page.goto(viteTestUrl) + await page.getByRole('button', { name: 'Count: 0' }).click() + + editFile('./src/app.tsx', (s) => s.replace('Count:', 'Count-x:')) + await page.getByRole('button', { name: 'Count-x: 1' }).click() + + editFile('./src/app.tsx', (s) => s.replace('Count-x:', 'Count-x-y:')) + await page.getByRole('button', { name: 'Count-x-y: 2' }).click() + + const res = await page.request.get(viteTestUrl) + expect(await res.text()).toContain('Count-x-y') +}) diff --git a/playground/rolldown-dev-ssr/package.json b/playground/rolldown-dev-ssr/package.json new file mode 100644 index 00000000000000..c025fd73929df9 --- /dev/null +++ b/playground/rolldown-dev-ssr/package.json @@ -0,0 +1,18 @@ +{ + "name": "@vitejs/test-rolldown-dev-ssr", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "devDependencies": { + "@types/react": "^18.3.11", + "@types/react-dom": "^18.3.1" + } +} diff --git a/playground/rolldown-dev-ssr/src/app.tsx b/playground/rolldown-dev-ssr/src/app.tsx new file mode 100644 index 00000000000000..617619eff44d9f --- /dev/null +++ b/playground/rolldown-dev-ssr/src/app.tsx @@ -0,0 +1,24 @@ +import React from 'react' +// @ts-expect-error no type +import virtualTest from 'virtual:test' + +export function App() { + const [count, setCount] = React.useState(0) + return ( +
+

Rolldown SSR

+ + +
[virtual] {virtualTest}
+
+ ) +} + +function Hydrated() { + const hydrated = React.useSyncExternalStore( + React.useCallback(() => () => {}, []), + () => true, + () => false, + ) + return

hydrated: {String(hydrated)}

+} diff --git a/playground/rolldown-dev-ssr/src/entry-client.tsx b/playground/rolldown-dev-ssr/src/entry-client.tsx new file mode 100644 index 00000000000000..1eacb6c40e3aed --- /dev/null +++ b/playground/rolldown-dev-ssr/src/entry-client.tsx @@ -0,0 +1,7 @@ +import React from 'react' +import ReactDOMClient from 'react-dom/client' +import { App } from './app' + +React.startTransition(() => { + ReactDOMClient.hydrateRoot(document.getElementById('root')!, ) +}) diff --git a/playground/rolldown-dev-ssr/src/entry-server.tsx b/playground/rolldown-dev-ssr/src/entry-server.tsx new file mode 100644 index 00000000000000..b30b3975169f5e --- /dev/null +++ b/playground/rolldown-dev-ssr/src/entry-server.tsx @@ -0,0 +1,25 @@ +import ReactDOMServer from 'react-dom/server' +import type { Connect } from 'vite' +import { App } from './app' + +const handler: Connect.SimpleHandleFunction = (req, res) => { + const url = new URL(req.url ?? '/', 'https://vite.dev') + console.log(`[SSR] ${req.method} ${url.pathname}`) + const ssrHtml = ReactDOMServer.renderToString() + res.setHeader('content-type', 'text/html') + // TODO: transformIndexHtml? + res.end(`\ + + + + + + +
${ssrHtml}
+ + + +`) +} + +export default handler diff --git a/playground/rolldown-dev-ssr/tsconfig.json b/playground/rolldown-dev-ssr/tsconfig.json new file mode 100644 index 00000000000000..b2a411748b73b4 --- /dev/null +++ b/playground/rolldown-dev-ssr/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../tsconfig.json", + "include": ["src", "*.ts"], + "compilerOptions": { + "jsx": "react-jsx" + } +} diff --git a/playground/rolldown-dev-ssr/vite.config.ts b/playground/rolldown-dev-ssr/vite.config.ts new file mode 100644 index 00000000000000..13096d1eac4c48 --- /dev/null +++ b/playground/rolldown-dev-ssr/vite.config.ts @@ -0,0 +1,71 @@ +import { debuglog } from 'node:util' +import { defineConfig } from 'vite' + +process.setSourceMapsEnabled(true) + +const debug = debuglog('dev') + +export default defineConfig({ + environments: { + client: { + build: { + outDir: 'dist/client', + rollupOptions: { + input: './src/entry-client', + }, + }, + }, + ssr: { + build: { + outDir: 'dist/server', + rollupOptions: { + input: { + index: './src/entry-server', + }, + }, + }, + }, + }, + experimental: { + rolldownDev: { + hmr: true, + reactRefresh: true, + }, + }, + plugins: [ + { + name: 'ssr-middleware', + configureServer(server) { + return () => { + server.middlewares.use(async (req, res, next) => { + try { + const mod = await (server.environments.ssr as any).import('index') + await mod.default(req, res) + } catch (e) { + next(e) + } + }) + } + }, + }, + { + name: 'test', + resolveId: { + handler(source, importer, _options) { + if (source === 'virtual:test') { + debug('[resolveId]', [this.environment?.name, source, importer]) + return `\0virtual:test` + } + }, + }, + load: { + handler(id, _options) { + if (id === '\0virtual:test') { + debug('[load]', this.environment?.name) + return `export default "test:virtual:ok"` + } + }, + }, + }, + ], +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 30a22089cf6dbf..84cdc1410b0425 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -226,9 +226,12 @@ importers: postcss: specifier: ^8.4.48 version: 8.4.48 + react-refresh: + specifier: ^0.14.2 + version: 0.14.2 rolldown: - specifier: https://pkg.pr.new/rolldown@3d47bd0 - version: https://pkg.pr.new/rolldown@3d47bd0 + specifier: 0.13.2-snapshot-a292401-20241105072341 + version: 0.13.2-snapshot-a292401-20241105072341 rollup: specifier: ^4.23.0 version: 4.24.4 @@ -1310,6 +1313,38 @@ importers: specifier: 0.10.64 version: 0.10.64 + playground/rolldown-dev-react: + dependencies: + react: + specifier: ^18.3.1 + version: 18.3.1 + react-dom: + specifier: ^18.3.1 + version: 18.3.1(react@18.3.1) + devDependencies: + '@types/react': + specifier: ^18.3.11 + version: 18.3.12 + '@types/react-dom': + specifier: ^18.3.1 + version: 18.3.1 + + playground/rolldown-dev-ssr: + dependencies: + react: + specifier: ^18.3.1 + version: 18.3.1 + react-dom: + specifier: ^18.3.1 + version: 18.3.1(react@18.3.1) + devDependencies: + '@types/react': + specifier: ^18.3.11 + version: 18.3.12 + '@types/react-dom': + specifier: ^18.3.1 + version: 18.3.1 + playground/self-referencing: {} playground/ssr: @@ -2712,30 +2747,60 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@parcel/watcher-android-arm64@2.4.1': + resolution: {integrity: sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + '@parcel/watcher-android-arm64@2.5.0': resolution: {integrity: sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [android] + '@parcel/watcher-darwin-arm64@2.4.1': + resolution: {integrity: sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + '@parcel/watcher-darwin-arm64@2.5.0': resolution: {integrity: sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [darwin] + '@parcel/watcher-darwin-x64@2.4.1': + resolution: {integrity: sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + '@parcel/watcher-darwin-x64@2.5.0': resolution: {integrity: sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [darwin] + '@parcel/watcher-freebsd-x64@2.4.1': + resolution: {integrity: sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + '@parcel/watcher-freebsd-x64@2.5.0': resolution: {integrity: sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [freebsd] + '@parcel/watcher-linux-arm-glibc@2.4.1': + resolution: {integrity: sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + '@parcel/watcher-linux-arm-glibc@2.5.0': resolution: {integrity: sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA==} engines: {node: '>= 10.0.0'} @@ -2748,48 +2813,94 @@ packages: cpu: [arm] os: [linux] + '@parcel/watcher-linux-arm64-glibc@2.4.1': + resolution: {integrity: sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + '@parcel/watcher-linux-arm64-glibc@2.5.0': resolution: {integrity: sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + '@parcel/watcher-linux-arm64-musl@2.4.1': + resolution: {integrity: sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + '@parcel/watcher-linux-arm64-musl@2.5.0': resolution: {integrity: sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + '@parcel/watcher-linux-x64-glibc@2.4.1': + resolution: {integrity: sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + '@parcel/watcher-linux-x64-glibc@2.5.0': resolution: {integrity: sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + '@parcel/watcher-linux-x64-musl@2.4.1': + resolution: {integrity: sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + '@parcel/watcher-linux-x64-musl@2.5.0': resolution: {integrity: sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + '@parcel/watcher-win32-arm64@2.4.1': + resolution: {integrity: sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + '@parcel/watcher-win32-arm64@2.5.0': resolution: {integrity: sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [win32] + '@parcel/watcher-win32-ia32@2.4.1': + resolution: {integrity: sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + '@parcel/watcher-win32-ia32@2.5.0': resolution: {integrity: sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA==} engines: {node: '>= 10.0.0'} cpu: [ia32] os: [win32] + '@parcel/watcher-win32-x64@2.4.1': + resolution: {integrity: sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + '@parcel/watcher-win32-x64@2.5.0': resolution: {integrity: sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [win32] + '@parcel/watcher@2.4.1': + resolution: {integrity: sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==} + engines: {node: '>= 10.0.0'} + '@parcel/watcher@2.5.0': resolution: {integrity: sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==} engines: {node: '>= 10.0.0'} @@ -2805,64 +2916,64 @@ packages: '@polka/url@1.0.0-next.28': resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} - '@rolldown/binding-darwin-arm64@https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-darwin-arm64@3d47bd0': - resolution: {tarball: https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-darwin-arm64@3d47bd0} - version: 0.14.0 + '@rolldown/binding-darwin-arm64@0.13.2-snapshot-a292401-20241105072341': + resolution: {integrity: sha512-IvGCR1JGF55EM8t1HYgNyF7RNpf/lC5++WAWPmsdWcM6aDnc2ayWLVeEq/F5UCxJGGBnXDsPH8+FBMxBf/Ieag==} + cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-darwin-x64@3d47bd0': - resolution: {tarball: https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-darwin-x64@3d47bd0} - version: 0.14.0 + '@rolldown/binding-darwin-x64@0.13.2-snapshot-a292401-20241105072341': + resolution: {integrity: sha512-OUbQy963o7pCdy1KnumyJUDY86dBQSdiektSpsOZOgyEB7tMTsd69EOAbqqyrxz2euQgDVveGJyD1GDgw2/ypg==} + cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-freebsd-x64@3d47bd0': - resolution: {tarball: https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-freebsd-x64@3d47bd0} - version: 0.14.0 + '@rolldown/binding-freebsd-x64@0.13.2-snapshot-a292401-20241105072341': + resolution: {integrity: sha512-KWvitRouQ2J9ZRd+ioaJ4Aa+iXjqh8Ugf90RfwsSHTgX5P3b75lJbw19ObH4cranWAHyu1Z3Oz3m8Q5TfTIqpw==} + cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-linux-arm-gnueabihf@3d47bd0': - resolution: {tarball: https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-linux-arm-gnueabihf@3d47bd0} - version: 0.14.0 + '@rolldown/binding-linux-arm-gnueabihf@0.13.2-snapshot-a292401-20241105072341': + resolution: {integrity: sha512-fPgIOpmARKshz/ZWzTkfX/a1tUbU+3gedEUA9+Ry2d0yeKF8unnEvpvfw8FRh0Ht2Uq8X+cs54ZpQS37nlimfA==} + cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-linux-arm64-gnu@3d47bd0': - resolution: {tarball: https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-linux-arm64-gnu@3d47bd0} - version: 0.14.0 + '@rolldown/binding-linux-arm64-gnu@0.13.2-snapshot-a292401-20241105072341': + resolution: {integrity: sha512-oTgB9dXnFNNC1qxzbYwHLfnRViBxsQt7pPdCdpmbxZdcsQBQpSyqvf8IFU6VJn3GnBtJU0ysQ1s3BQ5TSSeNVQ==} + cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-musl@https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-linux-arm64-musl@3d47bd0': - resolution: {tarball: https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-linux-arm64-musl@3d47bd0} - version: 0.14.0 + '@rolldown/binding-linux-arm64-musl@0.13.2-snapshot-a292401-20241105072341': + resolution: {integrity: sha512-Q/F+iS43K6KXEB3LXwHoqxDbpude+vhC0P6Qp6HLctIksJf/2QreGTQ+aB0QVRwws2007MKJ4kYFi9ZpkfjG5A==} + cpu: [arm64] os: [linux] - '@rolldown/binding-linux-x64-gnu@https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-linux-x64-gnu@3d47bd0': - resolution: {tarball: https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-linux-x64-gnu@3d47bd0} - version: 0.14.0 + '@rolldown/binding-linux-x64-gnu@0.13.2-snapshot-a292401-20241105072341': + resolution: {integrity: sha512-SFSK2LkhuRJ6YDUHuSapZcuf7cp0tyQoO+1F3B+5Obu0s5CHv6HkkyJ/96GBvGCGEVXdtUNPKam32U+5Af4A9g==} + cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-musl@https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-linux-x64-musl@3d47bd0': - resolution: {tarball: https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-linux-x64-musl@3d47bd0} - version: 0.14.0 + '@rolldown/binding-linux-x64-musl@0.13.2-snapshot-a292401-20241105072341': + resolution: {integrity: sha512-OR6lEBRvFgXO2Zcr+WCWwhw9tl7S3ByVKBTEGV9ebeo0ScS4UtkChrsx13xJVOz5/o8dv0pYSV8c8OVatk/4jA==} + cpu: [x64] os: [linux] - '@rolldown/binding-wasm32-wasi@https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-wasm32-wasi@3d47bd0': - resolution: {tarball: https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-wasm32-wasi@3d47bd0} - version: 0.14.0 + '@rolldown/binding-wasm32-wasi@0.13.2-snapshot-a292401-20241105072341': + resolution: {integrity: sha512-OHewT4F6WjdFrbg56p/qByEU45ed5n+m4/NBHMwldQf7uxRS03urCI7WYRQcZe0H4Bl95cIQsPbjAQxBRzwlCw==} engines: {node: '>=14.21.3'} + cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-win32-arm64-msvc@3d47bd0': - resolution: {tarball: https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-win32-arm64-msvc@3d47bd0} - version: 0.14.0 + '@rolldown/binding-win32-arm64-msvc@0.13.2-snapshot-a292401-20241105072341': + resolution: {integrity: sha512-C09eFp4vjwzbfTwRBgScLIMNcey8dT1evcgb7dllkaurSONMRPweUrA8w+AjLoNLxmYtjo/8UXzy/WNAA9/9GA==} + cpu: [arm64] os: [win32] - '@rolldown/binding-win32-ia32-msvc@https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-win32-ia32-msvc@3d47bd0': - resolution: {tarball: https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-win32-ia32-msvc@3d47bd0} - version: 0.14.0 + '@rolldown/binding-win32-ia32-msvc@0.13.2-snapshot-a292401-20241105072341': + resolution: {integrity: sha512-nm9AH+s4LN/gUb2jNdr1E1nUCMFs/Cz2wcRn492LQHahDVBALDaY/VZGftqSp339tsMjaEZea+FzxmlTECGxCQ==} + cpu: [ia32] os: [win32] - '@rolldown/binding-win32-x64-msvc@https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-win32-x64-msvc@3d47bd0': - resolution: {tarball: https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-win32-x64-msvc@3d47bd0} - version: 0.14.0 + '@rolldown/binding-win32-x64-msvc@0.13.2-snapshot-a292401-20241105072341': + resolution: {integrity: sha512-2YEn48I1RlOR4ATbVNqCjGvTPUbKbeUhtLT/+l++pJ5o6LwO3/RZMEB6J5mN5ZXQ2mXqpmbBOR06fY8tFThLSw==} + cpu: [x64] os: [win32] '@rollup/plugin-alias@5.1.1': @@ -6207,6 +6318,10 @@ packages: peerDependencies: react: ^18.3.1 + react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + engines: {node: '>=0.10.0'} + react@18.3.1: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} @@ -6303,9 +6418,8 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rolldown@https://pkg.pr.new/rolldown@3d47bd0: - resolution: {tarball: https://pkg.pr.new/rolldown@3d47bd0} - version: 0.14.0 + rolldown@0.13.2-snapshot-a292401-20241105072341: + resolution: {integrity: sha512-WA2U4g9E+d/J1u/nAldwnxmE7KOOGxdnjg6GX/qsPekVqQ0e+dPV7qrGYWIBj3twjPFxdp+9bzsXrFW3LUhakQ==} hasBin: true rollup-plugin-dts@6.1.1: @@ -7120,6 +7234,10 @@ packages: peerDependencies: vue: ^3.2.0 + watchpack@2.4.2: + resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} + engines: {node: '>=10.13.0'} + web-streams-polyfill@3.3.3: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} @@ -8384,45 +8502,101 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 + '@parcel/watcher-android-arm64@2.4.1': + optional: true + '@parcel/watcher-android-arm64@2.5.0': optional: true + '@parcel/watcher-darwin-arm64@2.4.1': + optional: true + '@parcel/watcher-darwin-arm64@2.5.0': optional: true + '@parcel/watcher-darwin-x64@2.4.1': + optional: true + '@parcel/watcher-darwin-x64@2.5.0': optional: true + '@parcel/watcher-freebsd-x64@2.4.1': + optional: true + '@parcel/watcher-freebsd-x64@2.5.0': optional: true + '@parcel/watcher-linux-arm-glibc@2.4.1': + optional: true + '@parcel/watcher-linux-arm-glibc@2.5.0': optional: true '@parcel/watcher-linux-arm-musl@2.5.0': optional: true + '@parcel/watcher-linux-arm64-glibc@2.4.1': + optional: true + '@parcel/watcher-linux-arm64-glibc@2.5.0': optional: true + '@parcel/watcher-linux-arm64-musl@2.4.1': + optional: true + '@parcel/watcher-linux-arm64-musl@2.5.0': optional: true + '@parcel/watcher-linux-x64-glibc@2.4.1': + optional: true + '@parcel/watcher-linux-x64-glibc@2.5.0': optional: true + '@parcel/watcher-linux-x64-musl@2.4.1': + optional: true + '@parcel/watcher-linux-x64-musl@2.5.0': optional: true + '@parcel/watcher-win32-arm64@2.4.1': + optional: true + '@parcel/watcher-win32-arm64@2.5.0': optional: true + '@parcel/watcher-win32-ia32@2.4.1': + optional: true + '@parcel/watcher-win32-ia32@2.5.0': optional: true + '@parcel/watcher-win32-x64@2.4.1': + optional: true + '@parcel/watcher-win32-x64@2.5.0': optional: true + '@parcel/watcher@2.4.1': + dependencies: + detect-libc: 1.0.3 + is-glob: 4.0.3 + micromatch: 4.0.8 + node-addon-api: 7.1.1 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.4.1 + '@parcel/watcher-darwin-arm64': 2.4.1 + '@parcel/watcher-darwin-x64': 2.4.1 + '@parcel/watcher-freebsd-x64': 2.4.1 + '@parcel/watcher-linux-arm-glibc': 2.4.1 + '@parcel/watcher-linux-arm64-glibc': 2.4.1 + '@parcel/watcher-linux-arm64-musl': 2.4.1 + '@parcel/watcher-linux-x64-glibc': 2.4.1 + '@parcel/watcher-linux-x64-musl': 2.4.1 + '@parcel/watcher-win32-arm64': 2.4.1 + '@parcel/watcher-win32-ia32': 2.4.1 + '@parcel/watcher-win32-x64': 2.4.1 + '@parcel/watcher@2.5.0': dependencies: detect-libc: 1.0.3 @@ -8452,42 +8626,42 @@ snapshots: '@polka/url@1.0.0-next.28': {} - '@rolldown/binding-darwin-arm64@https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-darwin-arm64@3d47bd0': + '@rolldown/binding-darwin-arm64@0.13.2-snapshot-a292401-20241105072341': optional: true - '@rolldown/binding-darwin-x64@https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-darwin-x64@3d47bd0': + '@rolldown/binding-darwin-x64@0.13.2-snapshot-a292401-20241105072341': optional: true - '@rolldown/binding-freebsd-x64@https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-freebsd-x64@3d47bd0': + '@rolldown/binding-freebsd-x64@0.13.2-snapshot-a292401-20241105072341': optional: true - '@rolldown/binding-linux-arm-gnueabihf@https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-linux-arm-gnueabihf@3d47bd0': + '@rolldown/binding-linux-arm-gnueabihf@0.13.2-snapshot-a292401-20241105072341': optional: true - '@rolldown/binding-linux-arm64-gnu@https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-linux-arm64-gnu@3d47bd0': + '@rolldown/binding-linux-arm64-gnu@0.13.2-snapshot-a292401-20241105072341': optional: true - '@rolldown/binding-linux-arm64-musl@https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-linux-arm64-musl@3d47bd0': + '@rolldown/binding-linux-arm64-musl@0.13.2-snapshot-a292401-20241105072341': optional: true - '@rolldown/binding-linux-x64-gnu@https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-linux-x64-gnu@3d47bd0': + '@rolldown/binding-linux-x64-gnu@0.13.2-snapshot-a292401-20241105072341': optional: true - '@rolldown/binding-linux-x64-musl@https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-linux-x64-musl@3d47bd0': + '@rolldown/binding-linux-x64-musl@0.13.2-snapshot-a292401-20241105072341': optional: true - '@rolldown/binding-wasm32-wasi@https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-wasm32-wasi@3d47bd0': + '@rolldown/binding-wasm32-wasi@0.13.2-snapshot-a292401-20241105072341': dependencies: '@napi-rs/wasm-runtime': 0.2.5 optional: true - '@rolldown/binding-win32-arm64-msvc@https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-win32-arm64-msvc@3d47bd0': + '@rolldown/binding-win32-arm64-msvc@0.13.2-snapshot-a292401-20241105072341': optional: true - '@rolldown/binding-win32-ia32-msvc@https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-win32-ia32-msvc@3d47bd0': + '@rolldown/binding-win32-ia32-msvc@0.13.2-snapshot-a292401-20241105072341': optional: true - '@rolldown/binding-win32-x64-msvc@https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-win32-x64-msvc@3d47bd0': + '@rolldown/binding-win32-x64-msvc@0.13.2-snapshot-a292401-20241105072341': optional: true '@rollup/plugin-alias@5.1.1(rollup@4.24.4)': @@ -11474,8 +11648,7 @@ snapshots: node-addon-api@5.1.0: {} - node-addon-api@7.1.1: - optional: true + node-addon-api@7.1.1: {} node-domexception@1.0.0: {} @@ -12060,6 +12233,8 @@ snapshots: react: 18.3.1 scheduler: 0.23.2 + react-refresh@0.14.2: {} + react@18.3.1: dependencies: loose-envify: 1.4.0 @@ -12159,22 +12334,31 @@ snapshots: dependencies: glob: 7.2.3 - rolldown@https://pkg.pr.new/rolldown@3d47bd0: + rolldown@0.13.2-snapshot-a292401-20241105072341: dependencies: + '@parcel/watcher': 2.4.1 + chokidar: 3.6.0 + connect: 3.7.0 + watchpack: 2.4.2 + ws: 8.18.0 zod: 3.23.8 optionalDependencies: - '@rolldown/binding-darwin-arm64': https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-darwin-arm64@3d47bd0 - '@rolldown/binding-darwin-x64': https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-darwin-x64@3d47bd0 - '@rolldown/binding-freebsd-x64': https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-freebsd-x64@3d47bd0 - '@rolldown/binding-linux-arm-gnueabihf': https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-linux-arm-gnueabihf@3d47bd0 - '@rolldown/binding-linux-arm64-gnu': https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-linux-arm64-gnu@3d47bd0 - '@rolldown/binding-linux-arm64-musl': https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-linux-arm64-musl@3d47bd0 - '@rolldown/binding-linux-x64-gnu': https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-linux-x64-gnu@3d47bd0 - '@rolldown/binding-linux-x64-musl': https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-linux-x64-musl@3d47bd0 - '@rolldown/binding-wasm32-wasi': https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-wasm32-wasi@3d47bd0 - '@rolldown/binding-win32-arm64-msvc': https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-win32-arm64-msvc@3d47bd0 - '@rolldown/binding-win32-ia32-msvc': https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-win32-ia32-msvc@3d47bd0 - '@rolldown/binding-win32-x64-msvc': https://pkg.pr.new/rolldown/rolldown/@rolldown/binding-win32-x64-msvc@3d47bd0 + '@rolldown/binding-darwin-arm64': 0.13.2-snapshot-a292401-20241105072341 + '@rolldown/binding-darwin-x64': 0.13.2-snapshot-a292401-20241105072341 + '@rolldown/binding-freebsd-x64': 0.13.2-snapshot-a292401-20241105072341 + '@rolldown/binding-linux-arm-gnueabihf': 0.13.2-snapshot-a292401-20241105072341 + '@rolldown/binding-linux-arm64-gnu': 0.13.2-snapshot-a292401-20241105072341 + '@rolldown/binding-linux-arm64-musl': 0.13.2-snapshot-a292401-20241105072341 + '@rolldown/binding-linux-x64-gnu': 0.13.2-snapshot-a292401-20241105072341 + '@rolldown/binding-linux-x64-musl': 0.13.2-snapshot-a292401-20241105072341 + '@rolldown/binding-wasm32-wasi': 0.13.2-snapshot-a292401-20241105072341 + '@rolldown/binding-win32-arm64-msvc': 0.13.2-snapshot-a292401-20241105072341 + '@rolldown/binding-win32-ia32-msvc': 0.13.2-snapshot-a292401-20241105072341 + '@rolldown/binding-win32-x64-msvc': 0.13.2-snapshot-a292401-20241105072341 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate rollup-plugin-dts@6.1.1(rollup@4.24.4)(typescript@5.6.3): dependencies: @@ -13075,6 +13259,11 @@ snapshots: '@vue/devtools-api': 6.6.4 vue: 3.5.12(typescript@5.6.3) + watchpack@2.4.2: + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + web-streams-polyfill@3.3.3: {} webidl-conversions@3.0.1: {} diff --git a/vitest.config.e2e.ts b/vitest.config.e2e.ts index a3a9f292fc1116..a8442032c0e174 100644 --- a/vitest.config.e2e.ts +++ b/vitest.config.e2e.ts @@ -23,6 +23,7 @@ export default defineConfig({ './playground/object-hooks/**/*.spec.[tj]s', // object hook sequential './playground/optimize-deps/**/*.spec.[tj]s', // https://github.com/rolldown/rolldown/issues/2031 './playground/tsconfig-json/__tests__/**/*.spec.[tj]s', // decorators is not supported by oxc + './playground/rolldown-dev-ssr/**/*', // todo ] : []), ...defaultExclude,