diff --git a/integration/helpers/rsc-vite/.gitignore b/integration/helpers/rsc-vite/.gitignore new file mode 100644 index 0000000000..de4d1f007d --- /dev/null +++ b/integration/helpers/rsc-vite/.gitignore @@ -0,0 +1,2 @@ +dist +node_modules diff --git a/integration/helpers/rsc-vite/.wrangler/deploy/config.json b/integration/helpers/rsc-vite/.wrangler/deploy/config.json deleted file mode 100644 index bde383d850..0000000000 --- a/integration/helpers/rsc-vite/.wrangler/deploy/config.json +++ /dev/null @@ -1 +0,0 @@ -{"configPath":"../../dist/ssr/wrangler.json","auxiliaryWorkers":[{"configPath":"../../dist/server/wrangler.json"}]} \ No newline at end of file diff --git a/integration/helpers/rsc-vite/framework/references.browser.ts b/integration/helpers/rsc-vite/framework/references.browser.ts deleted file mode 100644 index 06bf756022..0000000000 --- a/integration/helpers/rsc-vite/framework/references.browser.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { - createServerReference as createServerReferenceImp, - createFromReadableStream, - encodeReply, - // @ts-expect-error - no types yet -} from "@jacob-ebey/react-server-dom-vite/client"; -import { unstable_createCallServer as createCallServer } from "react-router"; - -export const callServer = createCallServer({ - decode: (body) => createFromReadableStream(body, { callServer }), - encodeAction: (args) => encodeReply(args), -}); - -export function createServerReference(imp: unknown, id: string, name: string) { - return createServerReferenceImp(`${id}#${name}`, callServer); -} diff --git a/integration/helpers/rsc-vite/framework/references.rsc.ts b/integration/helpers/rsc-vite/framework/references.rsc.ts deleted file mode 100644 index be086b8a0a..0000000000 --- a/integration/helpers/rsc-vite/framework/references.rsc.ts +++ /dev/null @@ -1,5 +0,0 @@ -// @ts-expect-error - no types yet -import RSD from "@jacob-ebey/react-server-dom-vite/server"; - -export const registerServerReference = RSD.registerServerReference; -export const registerClientReference = RSD.registerClientReference; diff --git a/integration/helpers/rsc-vite/framework/references.ssr.ts b/integration/helpers/rsc-vite/framework/references.ssr.ts deleted file mode 100644 index 071d2d68e4..0000000000 --- a/integration/helpers/rsc-vite/framework/references.ssr.ts +++ /dev/null @@ -1,4 +0,0 @@ -// @ts-expect-error - no types yet -import RSD from "@jacob-ebey/react-server-dom-vite/client"; - -export const createServerReference = RSD.createServerReference; diff --git a/integration/helpers/rsc-vite/framework/server.ts b/integration/helpers/rsc-vite/framework/server.ts deleted file mode 100644 index f1dad8db46..0000000000 --- a/integration/helpers/rsc-vite/framework/server.ts +++ /dev/null @@ -1,19 +0,0 @@ -import * as stream from "node:stream"; -// @ts-expect-error - no types yet -import RSD from "@jacob-ebey/react-server-dom-vite/server"; -// @ts-expect-error - no types yet -import { manifest } from "virtual:react-manifest"; - -export function renderToReadableStream(payload: any) { - const { pipe } = RSD.renderToPipeableStream(payload, manifest); - return stream.Readable.toWeb( - pipe(new stream.PassThrough()) - ) as ReadableStream; -} - -export function decodeReply( - reply: FormData | string, - options?: any -): unknown[] { - return RSD.decodeReply(reply, manifest, options); -} diff --git a/integration/helpers/rsc-vite/package.json b/integration/helpers/rsc-vite/package.json index 883cbcedc0..43b3e09d18 100644 --- a/integration/helpers/rsc-vite/package.json +++ b/integration/helpers/rsc-vite/package.json @@ -1,29 +1,24 @@ { - "name": "@playground/rsc-vite", + "name": "integration-rsc-vite", "private": true, "type": "module", "scripts": { "dev": "vite", - "build": "vite build", - "start": "node server.js", + "build": "vite build --app", + "start": "cross-env NODE_ENV=production node server.js", "typecheck": "tsc" }, "devDependencies": { - "@biomejs/biome": "^1.9.4", - "@cloudflare/vite-plugin": "0.1.7", - "@cloudflare/workers-types": "^4.20250224.0", - "@jacob-ebey/vite-react-server-dom": "0.0.12", + "@hiogawa/vite-rsc": "0.4.1", "@types/express": "^5.0.0", "@types/node": "^22.13.1", - "@types/react": "^19.0.8", - "@types/react-dom": "^19.0.3", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", + "@vitejs/plugin-react": "^4.5.2", "typescript": "^5.1.6", - "vite": "^6.2.0", - "vite-tsconfig-paths": "^5.1.4", - "wrangler": "^3.111.0" + "vite": "^6.2.0" }, "dependencies": { - "@jacob-ebey/react-server-dom-vite": "19.0.0-experimental.14", "@mjackson/node-fetch-server": "0.6.1", "compression": "^1.8.0", "express": "^4.21.2", diff --git a/integration/helpers/rsc-vite/server.js b/integration/helpers/rsc-vite/server.js index fff9015d39..c897acd7ad 100644 --- a/integration/helpers/rsc-vite/server.js +++ b/integration/helpers/rsc-vite/server.js @@ -3,8 +3,7 @@ import { createRequestListener } from "@mjackson/node-fetch-server"; import compression from "compression"; import express from "express"; -import ssr from "./dist/ssr/entry.ssr.js"; -import server from "./dist/server/entry.rsc.js"; +import rscRequestHandler from "./dist/rsc/index.js"; const app = express(); @@ -16,17 +15,7 @@ app.get("/.well-known/appspecific/com.chrome.devtools.json", (req, res) => { res.end(); }); -app.use( - createRequestListener((request) => { - return ssr.fetch(request, { - SERVER: { - fetch(request) { - return server.fetch(request); - }, - }, - }); - }) -); +app.use(createRequestListener(rscRequestHandler)); const { values } = parseArgs({ options: { p: { type: "string", default: "3000" } }, diff --git a/integration/helpers/rsc-vite/src/entry.browser.tsx b/integration/helpers/rsc-vite/src/entry.browser.tsx index b48deb805c..d952ef68ae 100644 --- a/integration/helpers/rsc-vite/src/entry.browser.tsx +++ b/integration/helpers/rsc-vite/src/entry.browser.tsx @@ -3,37 +3,34 @@ import { hydrateRoot } from "react-dom/client"; import { createFromReadableStream, encodeReply, - // @ts-expect-error - no types -} from "@jacob-ebey/react-server-dom-vite/client"; -// @ts-expect-error - no types yet -import { manifest } from "virtual:react-manifest"; - + setServerCallback, +} from "@hiogawa/vite-rsc/browser"; +import type { unstable_DecodeServerResponseFunction as DecodeServerResponseFunction } from "react-router"; import { - type unstable_DecodeServerResponseFunction as DecodeServerResponseFunction, - type unstable_EncodeActionFunction as EncodeActionFunction, unstable_createCallServer as createCallServer, unstable_getServerStream as getServerStream, unstable_RSCHydratedRouter as RSCHydratedRouter, } from "react-router"; -import { type unstable_ServerPayload as ServerPayload } from "react-router/rsc"; - -const encodeAction: EncodeActionFunction = (args: unknown[]) => - encodeReply(args); +import type { unstable_ServerPayload as ServerPayload } from "react-router/rsc"; -const decode: DecodeServerResponseFunction = (body) => - createFromReadableStream(body, manifest, { callServer }); +const decode: DecodeServerResponseFunction = ( + body: ReadableStream +) => createFromReadableStream(body); -const callServer = createCallServer({ decode, encodeAction }); - -createFromReadableStream(getServerStream(), manifest, { callServer }).then( - (payload: ServerPayload) => { - startTransition(() => { - hydrateRoot( - document, - - - - ); - }); - } +setServerCallback( + createCallServer({ + decode, + encodeAction: (args) => encodeReply(args), + }) ); + +createFromReadableStream(getServerStream()).then((payload) => { + startTransition(() => { + hydrateRoot( + document, + + + + ); + }); +}); diff --git a/integration/helpers/rsc-vite/src/entry.rsc.tsx b/integration/helpers/rsc-vite/src/entry.rsc.tsx index 41945dd987..ebd05d15de 100644 --- a/integration/helpers/rsc-vite/src/entry.rsc.tsx +++ b/integration/helpers/rsc-vite/src/entry.rsc.tsx @@ -1,38 +1,46 @@ -/// +import { + decodeAction, + decodeReply, + loadServerAction, + renderToReadableStream, +} from "@hiogawa/vite-rsc/rsc"; import { type unstable_DecodeCallServerFunction as DecodeCallServerFunction, + type unstable_DecodeFormActionFunction as DecodeFormActionFunction, unstable_matchRSCServerRequest as matchRSCServerRequest, } from "react-router/rsc"; -// @ts-expect-error - no types yet -import { manifest } from "virtual:react-manifest"; -import { decodeReply, renderToReadableStream } from "../framework/server"; import { routes } from "./routes"; const decodeCallServer: DecodeCallServerFunction = async (actionId, reply) => { const args = await decodeReply(reply); - const reference = manifest.resolveServerReference(actionId); - await reference.preload(); - const action = reference.get() as (...args: unknown[]) => Promise; + const action = await loadServerAction(actionId); return action.bind(null, ...args); }; -export default { - fetch(request, env) { - return matchRSCServerRequest({ - decodeCallServer, - request, - routes, - generateResponse(match) { - if (match instanceof Response) { - return match; - } +const decodeFormAction: DecodeFormActionFunction = async (formData) => { + return await decodeAction(formData); +}; + +export async function callServer(request: Request) { + return await matchRSCServerRequest({ + decodeCallServer, + decodeFormAction, + request, + routes, + generateResponse(match) { + return new Response(renderToReadableStream(match.payload), { + status: match.statusCode, + headers: match.headers, + }); + }, + }); +} - return new Response(renderToReadableStream(match.payload), { - status: match.statusCode, - headers: match.headers, - }); - }, - }); - }, -} satisfies ExportedHandler; +export default async function handler(request: Request) { + const ssr = await import.meta.viteRsc.loadSsrModule< + // eslint-disable-next-line @typescript-eslint/consistent-type-imports + typeof import("./entry.ssr") + >("index"); + return ssr.default(request, callServer); +} diff --git a/integration/helpers/rsc-vite/src/entry.ssr.tsx b/integration/helpers/rsc-vite/src/entry.ssr.tsx index 9d65d7a6ad..e7d58cad43 100644 --- a/integration/helpers/rsc-vite/src/entry.ssr.tsx +++ b/integration/helpers/rsc-vite/src/entry.ssr.tsx @@ -1,43 +1,28 @@ -/// - -// @ts-expect-error -import RSD from "@jacob-ebey/react-server-dom-vite/client"; +import bootstrapScriptContent from "virtual:vite-rsc/bootstrap-script-content"; +import { createFromReadableStream } from "@hiogawa/vite-rsc/ssr"; // @ts-expect-error -import RDS from "react-dom/server.edge"; -// @ts-expect-error -import { bootstrapModules, manifest } from "virtual:react-manifest"; - +import * as ReactDomServer from "react-dom/server.edge"; import { - unstable_routeRSCServerRequest as routeRSCServerRequest, unstable_RSCStaticRouter as RSCStaticRouter, + unstable_routeRSCServerRequest as routeRSCServerRequest, } from "react-router"; -type CloudflareEnv = { - ASSETS: Fetcher; - SERVER: Fetcher; -}; - -export default { - async fetch(request, { SERVER }) { - const callServer = async (request: Request) => await SERVER.fetch(request); - try { - return await routeRSCServerRequest({ - request, - callServer, - decode: (body) => RSD.createFromReadableStream(body, manifest), - async renderHTML(getPayload) { - return await RDS.renderToReadableStream( - , - { - bootstrapModules, - signal: request.signal, - } - ); - }, - }); - } catch (reason) { - console.error(reason); - return new Response("Internal Server Error", { status: 500 }); - } - }, -} satisfies ExportedHandler; +export default async function handler( + request: Request, + callServer: (request: Request) => Promise +) { + return routeRSCServerRequest({ + request, + callServer, + decode: (body) => createFromReadableStream(body), + renderHTML(getPayload) { + return ReactDomServer.renderToReadableStream( + , + { + bootstrapScriptContent, + signal: request.signal, + } + ); + }, + }); +} diff --git a/integration/helpers/rsc-vite/src/routes/home.tsx b/integration/helpers/rsc-vite/src/routes/home.tsx index fa44740c12..b5e522802e 100644 --- a/integration/helpers/rsc-vite/src/routes/home.tsx +++ b/integration/helpers/rsc-vite/src/routes/home.tsx @@ -1,3 +1,3 @@ -export default function ServerComponent() { +export default function HomeRoute() { return

Home

; } diff --git a/integration/helpers/rsc-vite/src/routes/root.tsx b/integration/helpers/rsc-vite/src/routes/root.tsx index 778a4858d6..d498b32ffa 100644 --- a/integration/helpers/rsc-vite/src/routes/root.tsx +++ b/integration/helpers/rsc-vite/src/routes/root.tsx @@ -17,6 +17,6 @@ export function Layout({ children }: { children: React.ReactNode }) { ); } -export default function ServerComponent() { +export default function RootRoute() { return ; } diff --git a/integration/helpers/rsc-vite/src/wrangler.rsc.toml b/integration/helpers/rsc-vite/src/wrangler.rsc.toml deleted file mode 100644 index 6d22f08fed..0000000000 --- a/integration/helpers/rsc-vite/src/wrangler.rsc.toml +++ /dev/null @@ -1,4 +0,0 @@ -name = "server" -main = "./entry.rsc.tsx" -compatibility_date = "2024-12-05" -compatibility_flags = ["nodejs_compat"] diff --git a/integration/helpers/rsc-vite/src/wrangler.ssr.toml b/integration/helpers/rsc-vite/src/wrangler.ssr.toml deleted file mode 100644 index f8c534067b..0000000000 --- a/integration/helpers/rsc-vite/src/wrangler.ssr.toml +++ /dev/null @@ -1,6 +0,0 @@ -name = "ssr" -main = "./entry.ssr.tsx" -compatibility_date = "2024-09-23" -compatibility_flags = ["nodejs_compat"] -assets = { binding = "ASSETS" } -services = [{ binding = "SERVER", service = "server" }] diff --git a/integration/helpers/rsc-vite/tsconfig.client.json b/integration/helpers/rsc-vite/tsconfig.client.json deleted file mode 100644 index b44285bcb1..0000000000 --- a/integration/helpers/rsc-vite/tsconfig.client.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "include": ["framework", "src"], - "compilerOptions": { - "lib": ["ES2022", "DOM", "DOM.Iterable"], - "types": ["@cloudflare/workers-types", "@types/node", "vite/client"], - "rootDir": ".", - "paths": { - "~/*": ["./src/app/*"] - }, - "allowImportingTsExtensions": true, - "jsx": "react-jsx", - "esModuleInterop": false, - "skipLibCheck": true, - "target": "ES2022", - "resolveJsonModule": true, - "moduleDetection": "force", - "isolatedModules": true, - "verbatimModuleSyntax": true, - "strict": true, - "noUncheckedIndexedAccess": true, - "noImplicitOverride": true, - "module": "Preserve", - "noEmit": true - } -} diff --git a/integration/helpers/rsc-vite/tsconfig.json b/integration/helpers/rsc-vite/tsconfig.json index e748ae2236..b795eea593 100644 --- a/integration/helpers/rsc-vite/tsconfig.json +++ b/integration/helpers/rsc-vite/tsconfig.json @@ -1,7 +1,17 @@ { - "files": [], - "references": [ - { "path": "./tsconfig.node.json" }, - { "path": "./tsconfig.client.json" } - ] + "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", "@hiogawa/vite-rsc/types"], + "jsx": "react-jsx" + } } diff --git a/integration/helpers/rsc-vite/tsconfig.node.json b/integration/helpers/rsc-vite/tsconfig.node.json deleted file mode 100644 index 70add5e01e..0000000000 --- a/integration/helpers/rsc-vite/tsconfig.node.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "include": ["vite.config.ts", "__tests__"], - "compilerOptions": { - "esModuleInterop": false, - "skipLibCheck": true, - "target": "ES2022", - "resolveJsonModule": true, - "moduleDetection": "force", - "isolatedModules": true, - "verbatimModuleSyntax": true, - "strict": true, - "noUncheckedIndexedAccess": true, - "noImplicitOverride": true, - "module": "Preserve", - "lib": ["ES2022"], - "noEmit": true - } -} diff --git a/integration/helpers/rsc-vite/vite.config.ts b/integration/helpers/rsc-vite/vite.config.ts index 499dd6312d..274649c19c 100644 --- a/integration/helpers/rsc-vite/vite.config.ts +++ b/integration/helpers/rsc-vite/vite.config.ts @@ -1,85 +1,16 @@ -import * as path from "node:path"; - -import { cloudflare } from "@cloudflare/vite-plugin"; -import reactServerDOM from "@jacob-ebey/vite-react-server-dom"; -import { defineConfig, type ViteDevServer } from "vite"; -import tsconfigPaths from "vite-tsconfig-paths"; +import rsc from "@hiogawa/vite-rsc/plugin"; +import react from "@vitejs/plugin-react"; +import { defineConfig } from "vite"; export default defineConfig({ - resolve: { - external: ["cloudflare:workers"], - }, - environments: { - client: { - build: { - rollupOptions: { - input: "src/entry.browser.tsx", - treeshake: { - moduleSideEffects: () => { - return false; - }, - }, - }, - }, - resolve: { - conditions: ["module-sync"], - }, - }, - ssr: { - resolve: { - noExternal: true, - conditions: ["module-sync"], - }, - }, - server: { - resolve: { - noExternal: true, - conditions: ["module-sync"], - }, - }, - }, plugins: [ - stupidChromeDevtoolsRequest(), - tsconfigPaths({ configNames: ["tsconfig.client.json"] }), - reactServerDOM({ - browserEnvironment: "client", - serverEnvironments: ["server"], - ssrEnvironments: ["ssr"], - runtime: { - browser: { - importFrom: path.resolve("./framework/references.browser.ts"), - }, - server: { - importFrom: path.resolve("./framework/references.rsc.ts"), - }, - ssr: { - importFrom: path.resolve("./framework/references.ssr.ts"), - }, + react(), + rsc({ + entries: { + client: "src/entry.browser.tsx", + rsc: "src/entry.rsc.tsx", + ssr: "src/entry.ssr.tsx", }, }), - cloudflare({ - persistState: true, - configPath: "src/wrangler.ssr.toml", - auxiliaryWorkers: [ - { - configPath: "src/wrangler.rsc.toml", - }, - ], - }), ], }); - -function stupidChromeDevtoolsRequest() { - return { - name: "stupid-chrome-devtools-request", - configureServer(server: ViteDevServer) { - server.middlewares.use( - "/.well-known/appspecific/com.chrome.devtools.json", - (_, res) => { - res.statusCode = 404; - res.end("Not Found"); - } - ); - }, - }; -} diff --git a/integration/rsc/rsc-test.ts b/integration/rsc/rsc-test.ts index bede94ff57..00bf680d79 100644 --- a/integration/rsc/rsc-test.ts +++ b/integration/rsc/rsc-test.ts @@ -1,4 +1,3 @@ -import * as os from "node:os"; import { test, expect } from "@playwright/test"; import { sync as spawnSync } from "cross-spawn"; import getPort from "get-port"; @@ -34,6 +33,9 @@ const implementations: Implementation[] = ( createDev(["server.js", "-p", String(port)])({ cwd, port, + env: { + NODE_ENV: "production", + }, }), dev: ({ cwd, port }) => createDev(["node_modules/vite/bin/vite.js", "--port", String(port)])({ @@ -61,12 +63,7 @@ const implementations: Implementation[] = ( }), }, ] as Implementation[] -).filter((imp) => { - if (imp.name === "vite" && os.platform() === "win32") { - return false; - } - return true; -}); +); async function setupRscTest({ implementation, @@ -594,7 +591,7 @@ implementations.forEach((implementation) => { "src/routes/home.actions.ts": js` "use server"; - export function incrementCounter(count: number, formData: FormData) { + export async function incrementCounter(count: number, formData: FormData) { return count + parseInt(formData.get("by") as string || "1", 10); } `, @@ -729,7 +726,7 @@ implementations.forEach((implementation) => { "use server"; import { redirect } from "react-router/rsc"; - export function redirectAction(formData: FormData) { + export async function redirectAction(formData: FormData) { throw redirect("/?redirected=true"); } `, @@ -800,14 +797,6 @@ implementations.forEach((implementation) => { test("Handles errors in server components correctly", async ({ page, }) => { - // TODO: There is a mis-match in React versions between the Vite and - // Parcel builds here causing one to strip errors, and the other allow - // through the development error message. - test.skip( - implementation.name === "vite", - "Bug in vite somewhere, needs investigation" - ); - let port = await getPort(); stop = await setupRscTest({ dev: true, diff --git a/playground/rsc-vite/.gitignore b/playground/rsc-vite/.gitignore index ef718b97ff..de4d1f007d 100644 --- a/playground/rsc-vite/.gitignore +++ b/playground/rsc-vite/.gitignore @@ -1,3 +1,2 @@ -.parcel-cache dist node_modules diff --git a/playground/rsc-vite/.wrangler/deploy/config.json b/playground/rsc-vite/.wrangler/deploy/config.json deleted file mode 100644 index bde383d850..0000000000 --- a/playground/rsc-vite/.wrangler/deploy/config.json +++ /dev/null @@ -1 +0,0 @@ -{"configPath":"../../dist/ssr/wrangler.json","auxiliaryWorkers":[{"configPath":"../../dist/server/wrangler.json"}]} \ No newline at end of file diff --git a/playground/rsc-vite/framework/references.browser.ts b/playground/rsc-vite/framework/references.browser.ts deleted file mode 100644 index cbf0af69e3..0000000000 --- a/playground/rsc-vite/framework/references.browser.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { - createServerReference as createServerReferenceImp, - // @ts-expect-error - no types yet -} from "@jacob-ebey/react-server-dom-vite/client"; - -export async function callServer(id: string, args: unknown) { - throw new Error("callServer not implemented"); -} - -export function createServerReference(imp: unknown, id: string, name: string) { - return createServerReferenceImp(`${id}#${name}`, callServer); -} diff --git a/playground/rsc-vite/framework/references.rsc.ts b/playground/rsc-vite/framework/references.rsc.ts deleted file mode 100644 index be086b8a0a..0000000000 --- a/playground/rsc-vite/framework/references.rsc.ts +++ /dev/null @@ -1,5 +0,0 @@ -// @ts-expect-error - no types yet -import RSD from "@jacob-ebey/react-server-dom-vite/server"; - -export const registerServerReference = RSD.registerServerReference; -export const registerClientReference = RSD.registerClientReference; diff --git a/playground/rsc-vite/framework/references.ssr.ts b/playground/rsc-vite/framework/references.ssr.ts deleted file mode 100644 index 071d2d68e4..0000000000 --- a/playground/rsc-vite/framework/references.ssr.ts +++ /dev/null @@ -1,4 +0,0 @@ -// @ts-expect-error - no types yet -import RSD from "@jacob-ebey/react-server-dom-vite/client"; - -export const createServerReference = RSD.createServerReference; diff --git a/playground/rsc-vite/framework/server.ts b/playground/rsc-vite/framework/server.ts deleted file mode 100644 index f1dad8db46..0000000000 --- a/playground/rsc-vite/framework/server.ts +++ /dev/null @@ -1,19 +0,0 @@ -import * as stream from "node:stream"; -// @ts-expect-error - no types yet -import RSD from "@jacob-ebey/react-server-dom-vite/server"; -// @ts-expect-error - no types yet -import { manifest } from "virtual:react-manifest"; - -export function renderToReadableStream(payload: any) { - const { pipe } = RSD.renderToPipeableStream(payload, manifest); - return stream.Readable.toWeb( - pipe(new stream.PassThrough()) - ) as ReadableStream; -} - -export function decodeReply( - reply: FormData | string, - options?: any -): unknown[] { - return RSD.decodeReply(reply, manifest, options); -} diff --git a/playground/rsc-vite/package.json b/playground/rsc-vite/package.json index 784ee1e525..f8aeca055c 100644 --- a/playground/rsc-vite/package.json +++ b/playground/rsc-vite/package.json @@ -4,24 +4,22 @@ "type": "module", "scripts": { "dev": "vite", - "build": "vite build", - "start": "node server.js" + "build": "vite build --app", + "start": "cross-env NODE_ENV=production node server.js", + "typecheck": "tsc" }, "devDependencies": { - "@biomejs/biome": "^1.9.4", - "@cloudflare/vite-plugin": "0.1.7", - "@cloudflare/workers-types": "^4.20250224.0", - "@jacob-ebey/vite-react-server-dom": "0.0.12", + "@hiogawa/vite-rsc": "0.4.1", "@types/express": "^5.0.0", "@types/node": "^22.13.1", - "@types/react": "^19.0.8", - "@types/react-dom": "^19.0.3", - "vite": "^6.2.0", - "vite-tsconfig-paths": "^5.1.4", - "wrangler": "^3.111.0" + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", + "@vitejs/plugin-react": "^4.5.2", + "cross-env": "^7.0.3", + "typescript": "^5.1.6", + "vite": "^6.2.0" }, "dependencies": { - "@jacob-ebey/react-server-dom-vite": "19.0.0-experimental.14", "@mjackson/node-fetch-server": "0.6.1", "compression": "^1.8.0", "express": "^4.21.2", diff --git a/playground/rsc-vite/server.js b/playground/rsc-vite/server.js index 3fdbde058a..c897acd7ad 100644 --- a/playground/rsc-vite/server.js +++ b/playground/rsc-vite/server.js @@ -1,9 +1,9 @@ +import { parseArgs } from "node:util"; import { createRequestListener } from "@mjackson/node-fetch-server"; import compression from "compression"; import express from "express"; -import ssr from "./dist/ssr/entry.ssr.js"; -import server from "./dist/server/entry.rsc.js"; +import rscRequestHandler from "./dist/rsc/index.js"; const app = express(); @@ -15,18 +15,14 @@ app.get("/.well-known/appspecific/com.chrome.devtools.json", (req, res) => { res.end(); }); -app.use( - createRequestListener((request) => { - return ssr.fetch(request, { - SERVER: { - fetch(request) { - return server.fetch(request); - }, - }, - }); - }) -); +app.use(createRequestListener(rscRequestHandler)); -app.listen(3000, () => { - console.log("Server started on http://localhost:3000"); +const { values } = parseArgs({ + options: { p: { type: "string", default: "3000" } }, + allowPositionals: true, +}); + +const port = parseInt(values.p, 10); +app.listen(port, () => { + console.log(`Server started on http://localhost:${port}`); }); diff --git a/playground/rsc-vite/src/browser/entry.browser.tsx b/playground/rsc-vite/src/browser/entry.browser.tsx deleted file mode 100644 index 9d2d0f6055..0000000000 --- a/playground/rsc-vite/src/browser/entry.browser.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { startTransition, StrictMode } from "react"; -import { hydrateRoot } from "react-dom/client"; -import { - createFromReadableStream, - encodeReply, - // @ts-expect-error - no types -} from "@jacob-ebey/react-server-dom-vite/client"; -// @ts-expect-error - no types yet -import { manifest } from "virtual:react-manifest"; - -import { - type unstable_DecodeServerResponseFunction as DecodeServerResponseFunction, - type unstable_EncodeActionFunction as EncodeActionFunction, - unstable_createCallServer as createCallServer, - unstable_getServerStream as getServerStream, - unstable_RSCHydratedRouter as RSCHydratedRouter, -} from "react-router"; -import type { unstable_ServerPayload as ServerPayload } from "react-router/rsc"; - -const encodeAction: EncodeActionFunction = (args: unknown[]) => - encodeReply(args); - -const decode: DecodeServerResponseFunction = (body) => - createFromReadableStream(body, manifest, { callServer }); - -const callServer = createCallServer({ decode, encodeAction }); - -createFromReadableStream(getServerStream(), manifest, { callServer }).then( - (payload: ServerPayload) => { - startTransition(() => { - hydrateRoot( - document, - - - - ); - }); - } -); diff --git a/playground/rsc-vite/src/counter.tsx b/playground/rsc-vite/src/counter.tsx index a7ecda6819..7a5b69a098 100644 --- a/playground/rsc-vite/src/counter.tsx +++ b/playground/rsc-vite/src/counter.tsx @@ -7,12 +7,11 @@ export function Counter() { return (
-

- Counter: {count}{" "} - -

+

Counter

+

Current count: {count}

+
); } diff --git a/playground/rsc-vite/src/entry.browser.tsx b/playground/rsc-vite/src/entry.browser.tsx new file mode 100644 index 0000000000..d952ef68ae --- /dev/null +++ b/playground/rsc-vite/src/entry.browser.tsx @@ -0,0 +1,36 @@ +import { startTransition, StrictMode } from "react"; +import { hydrateRoot } from "react-dom/client"; +import { + createFromReadableStream, + encodeReply, + setServerCallback, +} from "@hiogawa/vite-rsc/browser"; +import type { unstable_DecodeServerResponseFunction as DecodeServerResponseFunction } from "react-router"; +import { + unstable_createCallServer as createCallServer, + unstable_getServerStream as getServerStream, + unstable_RSCHydratedRouter as RSCHydratedRouter, +} from "react-router"; +import type { unstable_ServerPayload as ServerPayload } from "react-router/rsc"; + +const decode: DecodeServerResponseFunction = ( + body: ReadableStream +) => createFromReadableStream(body); + +setServerCallback( + createCallServer({ + decode, + encodeAction: (args) => encodeReply(args), + }) +); + +createFromReadableStream(getServerStream()).then((payload) => { + startTransition(() => { + hydrateRoot( + document, + + + + ); + }); +}); diff --git a/playground/rsc-vite/src/entry.rsc.tsx b/playground/rsc-vite/src/entry.rsc.tsx new file mode 100644 index 0000000000..81ccd57670 --- /dev/null +++ b/playground/rsc-vite/src/entry.rsc.tsx @@ -0,0 +1,46 @@ +import { + decodeAction, + decodeReply, + loadServerAction, + renderToReadableStream, +} from "@hiogawa/vite-rsc/rsc"; +import { + type unstable_DecodeCallServerFunction as DecodeCallServerFunction, + type unstable_DecodeFormActionFunction as DecodeFormActionFunction, + unstable_matchRSCServerRequest as matchRSCServerRequest, +} from "react-router/rsc"; + +import { routes } from "./routes"; + +const decodeCallServer: DecodeCallServerFunction = async (actionId, reply) => { + const args = await decodeReply(reply); + const action = await loadServerAction(actionId); + return action.bind(null, ...args); +}; + +const decodeFormAction: DecodeFormActionFunction = async (formData) => { + return await decodeAction(formData); +}; + +export async function callServer(request: Request) { + return await matchRSCServerRequest({ + decodeCallServer, + decodeFormAction, + request, + // @ts-expect-error + routes, + generateResponse(match) { + return new Response(renderToReadableStream(match.payload), { + status: match.statusCode, + headers: match.headers, + }); + }, + }); +} + +export default async function handler(request: Request) { + const ssr = await import.meta.viteRsc.loadSsrModule< + typeof import("./entry.ssr") + >("index"); + return ssr.default(request, callServer); +} diff --git a/playground/rsc-vite/src/entry.ssr.tsx b/playground/rsc-vite/src/entry.ssr.tsx new file mode 100644 index 0000000000..e7d58cad43 --- /dev/null +++ b/playground/rsc-vite/src/entry.ssr.tsx @@ -0,0 +1,28 @@ +import bootstrapScriptContent from "virtual:vite-rsc/bootstrap-script-content"; +import { createFromReadableStream } from "@hiogawa/vite-rsc/ssr"; +// @ts-expect-error +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, + callServer: (request: Request) => Promise +) { + return routeRSCServerRequest({ + request, + callServer, + decode: (body) => createFromReadableStream(body), + renderHTML(getPayload) { + return ReactDomServer.renderToReadableStream( + , + { + bootstrapScriptContent, + signal: request.signal, + } + ); + }, + }); +} diff --git a/playground/rsc-vite/src/routes.ts b/playground/rsc-vite/src/routes.ts index d491f8749b..822b676180 100644 --- a/playground/rsc-vite/src/routes.ts +++ b/playground/rsc-vite/src/routes.ts @@ -10,11 +10,13 @@ export const routes = [ { id: "home", index: true, + // @ts-expect-error lazy: () => import("./routes/home/home"), }, { id: "about", path: "about", + // @ts-expect-error lazy: () => import("./routes/about/about"), }, { @@ -30,6 +32,7 @@ export const routes = [ { id: "child", path: "child", + // @ts-expect-error lazy: () => import("./routes/child/child"), }, ], diff --git a/playground/rsc-vite/src/routes/about/about.tsx b/playground/rsc-vite/src/routes/about/about.tsx index 01baa19a68..6f5efddeef 100644 --- a/playground/rsc-vite/src/routes/about/about.tsx +++ b/playground/rsc-vite/src/routes/about/about.tsx @@ -5,7 +5,7 @@ export { // clientLazy, clientLoader, clientAction, - Component, + default, } from "./about.client"; export function headers({ diff --git a/playground/rsc-vite/src/routes/home/home.client.tsx b/playground/rsc-vite/src/routes/home/home.client.tsx index d11ff00f78..308982b883 100644 --- a/playground/rsc-vite/src/routes/home/home.client.tsx +++ b/playground/rsc-vite/src/routes/home/home.client.tsx @@ -30,6 +30,7 @@ export default function Home() { } export function HomeForm({ fn }: { fn: () => unknown }) { + // @ts-expect-error React types for the repo are set to v18 const [state, formAction, isPending] = React.useActionState(fn, null); return ( @@ -43,13 +44,12 @@ export function HomeForm({ fn }: { fn: () => unknown }) { } export function RedirectForm({ fn }: { fn: () => unknown }) { + // @ts-expect-error React types for the repo are set to v18 const [state, formAction, isPending] = React.useActionState(fn, null); return (
- + {state ?

Action state: {state}

: null}
); diff --git a/playground/rsc-vite/src/routes/redirect.ts b/playground/rsc-vite/src/routes/redirect.ts index 8967cec561..bd8913f812 100644 --- a/playground/rsc-vite/src/routes/redirect.ts +++ b/playground/rsc-vite/src/routes/redirect.ts @@ -1,4 +1,4 @@ -import { redirect, redirectDocument, replace } from "react-router/rsc"; +import { redirectDocument } from "react-router/rsc"; export function loader() { throw redirectDocument("/about?redirected"); diff --git a/playground/rsc-vite/src/routes/root/root.tsx b/playground/rsc-vite/src/routes/root/root.tsx index cfe865d0fe..2387832d3e 100644 --- a/playground/rsc-vite/src/routes/root/root.tsx +++ b/playground/rsc-vite/src/routes/root/root.tsx @@ -22,7 +22,7 @@ export const unstable_middleware: unstable_MiddlewareFunction[] = [ export async function loader() { await new Promise((r) => setTimeout(r, 500)); return { - counter: , + counter: , message: `Root route loader ran at ${new Date().toISOString()}`, }; } diff --git a/playground/rsc-vite/src/rsc/entry.rsc.tsx b/playground/rsc-vite/src/rsc/entry.rsc.tsx deleted file mode 100644 index 6946382d1b..0000000000 --- a/playground/rsc-vite/src/rsc/entry.rsc.tsx +++ /dev/null @@ -1,40 +0,0 @@ -/// - -import { decodeReply, renderToReadableStream } from "../../framework/server"; -// @ts-expect-error - no types yet -import { manifest } from "virtual:react-manifest"; - -import { - type unstable_DecodeCallServerFunction as DecodeCallServerFunction, - unstable_matchRSCServerRequest as matchRSCServerRequest, -} from "react-router/rsc"; - -import { routes } from "../routes"; - -const decodeCallServer: DecodeCallServerFunction = async (actionId, reply) => { - const args = await decodeReply(reply); - const reference = manifest.resolveServerReference(actionId); - await reference.preload(); - const action = reference.get() as (...args: unknown[]) => Promise; - return action.bind(null, ...args); -}; - -export default { - fetch(request, env) { - return matchRSCServerRequest({ - decodeCallServer, - request, - routes, - generateResponse(match) { - if (match instanceof Response) { - return match; - } - - return new Response(renderToReadableStream(match.payload), { - status: match.statusCode, - headers: match.headers, - }); - }, - }); - }, -} satisfies ExportedHandler; diff --git a/playground/rsc-vite/src/rsc/wrangler.toml b/playground/rsc-vite/src/rsc/wrangler.toml deleted file mode 100644 index 6d22f08fed..0000000000 --- a/playground/rsc-vite/src/rsc/wrangler.toml +++ /dev/null @@ -1,4 +0,0 @@ -name = "server" -main = "./entry.rsc.tsx" -compatibility_date = "2024-12-05" -compatibility_flags = ["nodejs_compat"] diff --git a/playground/rsc-vite/src/ssr/entry.ssr.tsx b/playground/rsc-vite/src/ssr/entry.ssr.tsx deleted file mode 100644 index 9d65d7a6ad..0000000000 --- a/playground/rsc-vite/src/ssr/entry.ssr.tsx +++ /dev/null @@ -1,43 +0,0 @@ -/// - -// @ts-expect-error -import RSD from "@jacob-ebey/react-server-dom-vite/client"; -// @ts-expect-error -import RDS from "react-dom/server.edge"; -// @ts-expect-error -import { bootstrapModules, manifest } from "virtual:react-manifest"; - -import { - unstable_routeRSCServerRequest as routeRSCServerRequest, - unstable_RSCStaticRouter as RSCStaticRouter, -} from "react-router"; - -type CloudflareEnv = { - ASSETS: Fetcher; - SERVER: Fetcher; -}; - -export default { - async fetch(request, { SERVER }) { - const callServer = async (request: Request) => await SERVER.fetch(request); - try { - return await routeRSCServerRequest({ - request, - callServer, - decode: (body) => RSD.createFromReadableStream(body, manifest), - async renderHTML(getPayload) { - return await RDS.renderToReadableStream( - , - { - bootstrapModules, - signal: request.signal, - } - ); - }, - }); - } catch (reason) { - console.error(reason); - return new Response("Internal Server Error", { status: 500 }); - } - }, -} satisfies ExportedHandler; diff --git a/playground/rsc-vite/src/ssr/wrangler.toml b/playground/rsc-vite/src/ssr/wrangler.toml deleted file mode 100644 index f8c534067b..0000000000 --- a/playground/rsc-vite/src/ssr/wrangler.toml +++ /dev/null @@ -1,6 +0,0 @@ -name = "ssr" -main = "./entry.ssr.tsx" -compatibility_date = "2024-09-23" -compatibility_flags = ["nodejs_compat"] -assets = { binding = "ASSETS" } -services = [{ binding = "SERVER", service = "server" }] diff --git a/playground/rsc-vite/tsconfig.client.json b/playground/rsc-vite/tsconfig.client.json deleted file mode 100644 index 8faea30be1..0000000000 --- a/playground/rsc-vite/tsconfig.client.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "include": ["framework", "src"], - "compilerOptions": { - "lib": ["ES2022", "DOM", "DOM.Iterable"], - "types": ["@cloudflare/workers-types", "@types/node", "vite/client"], - "rootDir": ".", - "paths": { - "~/*": ["./src/app/*"], - }, - "allowImportingTsExtensions": true, - "jsx": "react-jsx", - "esModuleInterop": false, - "skipLibCheck": true, - "target": "ES2022", - "resolveJsonModule": true, - "moduleDetection": "force", - "isolatedModules": true, - "verbatimModuleSyntax": true, - "strict": true, - "noUncheckedIndexedAccess": true, - "noImplicitOverride": true, - "module": "Preserve", - "noEmit": true - } -} diff --git a/playground/rsc-vite/tsconfig.json b/playground/rsc-vite/tsconfig.json index e748ae2236..b795eea593 100644 --- a/playground/rsc-vite/tsconfig.json +++ b/playground/rsc-vite/tsconfig.json @@ -1,7 +1,17 @@ { - "files": [], - "references": [ - { "path": "./tsconfig.node.json" }, - { "path": "./tsconfig.client.json" } - ] + "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", "@hiogawa/vite-rsc/types"], + "jsx": "react-jsx" + } } diff --git a/playground/rsc-vite/tsconfig.node.json b/playground/rsc-vite/tsconfig.node.json deleted file mode 100644 index 70add5e01e..0000000000 --- a/playground/rsc-vite/tsconfig.node.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "include": ["vite.config.ts", "__tests__"], - "compilerOptions": { - "esModuleInterop": false, - "skipLibCheck": true, - "target": "ES2022", - "resolveJsonModule": true, - "moduleDetection": "force", - "isolatedModules": true, - "verbatimModuleSyntax": true, - "strict": true, - "noUncheckedIndexedAccess": true, - "noImplicitOverride": true, - "module": "Preserve", - "lib": ["ES2022"], - "noEmit": true - } -} diff --git a/playground/rsc-vite/vite.config.ts b/playground/rsc-vite/vite.config.ts index 9781133fa0..274649c19c 100644 --- a/playground/rsc-vite/vite.config.ts +++ b/playground/rsc-vite/vite.config.ts @@ -1,85 +1,16 @@ -import * as path from "node:path"; - -import { cloudflare } from "@cloudflare/vite-plugin"; -import reactServerDOM from "@jacob-ebey/vite-react-server-dom"; -import { defineConfig, type ViteDevServer } from "vite"; -import tsconfigPaths from "vite-tsconfig-paths"; +import rsc from "@hiogawa/vite-rsc/plugin"; +import react from "@vitejs/plugin-react"; +import { defineConfig } from "vite"; export default defineConfig({ - resolve: { - external: ["cloudflare:workers"], - }, - environments: { - client: { - build: { - rollupOptions: { - input: "src/browser/entry.browser.tsx", - treeshake: { - moduleSideEffects: () => { - return false; - }, - }, - }, - }, - resolve: { - conditions: ["module-sync"], - }, - }, - ssr: { - resolve: { - noExternal: true, - conditions: ["module-sync"], - }, - }, - server: { - resolve: { - noExternal: true, - conditions: ["module-sync"], - }, - }, - }, plugins: [ - stupidChromeDevtoolsRequest(), - tsconfigPaths({ configNames: ["tsconfig.client.json"] }), - reactServerDOM({ - browserEnvironment: "client", - serverEnvironments: ["server"], - ssrEnvironments: ["ssr"], - runtime: { - browser: { - importFrom: path.resolve("./framework/references.browser.ts"), - }, - server: { - importFrom: path.resolve("./framework/references.rsc.ts"), - }, - ssr: { - importFrom: path.resolve("./framework/references.ssr.ts"), - }, + react(), + rsc({ + entries: { + client: "src/entry.browser.tsx", + rsc: "src/entry.rsc.tsx", + ssr: "src/entry.ssr.tsx", }, }), - cloudflare({ - persistState: true, - configPath: "src/ssr/wrangler.toml", - auxiliaryWorkers: [ - { - configPath: "src/rsc/wrangler.toml", - }, - ], - }), ], }); - -function stupidChromeDevtoolsRequest() { - return { - name: "stupid-chrome-devtools-request", - configureServer(server: ViteDevServer) { - server.middlewares.use( - "/.well-known/appspecific/com.chrome.devtools.json", - (_, res) => { - res.statusCode = 404; - res.end("Not Found"); - } - ); - }, - }; -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bd941d8d05..d636988dfa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -527,9 +527,6 @@ importers: integration/helpers/rsc-vite: dependencies: - '@jacob-ebey/react-server-dom-vite': - specifier: 19.0.0-experimental.14 - version: 19.0.0-experimental.14(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mjackson/node-fetch-server': specifier: 0.6.1 version: 0.6.1 @@ -549,18 +546,9 @@ importers: specifier: workspace:* version: link:../../../packages/react-router devDependencies: - '@biomejs/biome': - specifier: ^1.9.4 - version: 1.9.4 - '@cloudflare/vite-plugin': - specifier: 0.1.7 - version: 0.1.7(vite@6.2.5(@types/node@22.14.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.6.0))(workerd@1.20250224.0)(wrangler@3.114.5(@cloudflare/workers-types@4.20250317.0)) - '@cloudflare/workers-types': - specifier: ^4.20250224.0 - version: 4.20250317.0 - '@jacob-ebey/vite-react-server-dom': - specifier: 0.0.12 - version: 0.0.12(@jacob-ebey/react-server-dom-vite@19.0.0-experimental.14(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(rollup@4.43.0)(vite@6.2.5(@types/node@22.14.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.6.0)) + '@hiogawa/vite-rsc': + specifier: 0.4.1 + version: 0.4.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(vite@6.2.5(@types/node@22.14.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.6.0)) '@types/express': specifier: ^5.0.0 version: 5.0.1 @@ -573,18 +561,15 @@ importers: '@types/react-dom': specifier: ^18.2.7 version: 18.2.7 + '@vitejs/plugin-react': + specifier: ^4.5.2 + version: 4.5.2(vite@6.2.5(@types/node@22.14.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.6.0)) typescript: specifier: ^5.1.6 version: 5.4.5 vite: specifier: ^6.2.0 version: 6.2.5(@types/node@22.14.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.6.0) - vite-tsconfig-paths: - specifier: ^5.1.4 - version: 5.1.4(typescript@5.4.5)(vite@6.2.5(@types/node@22.14.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.6.0)) - wrangler: - specifier: ^3.111.0 - version: 3.114.5(@cloudflare/workers-types@4.20250317.0) integration/helpers/vite-5-template: dependencies: @@ -1847,9 +1832,6 @@ importers: playground/rsc-vite: dependencies: - '@jacob-ebey/react-server-dom-vite': - specifier: 19.0.0-experimental.14 - version: 19.0.0-experimental.14(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mjackson/node-fetch-server': specifier: 0.6.1 version: 0.6.1 @@ -1869,18 +1851,9 @@ importers: specifier: workspace:* version: link:../../packages/react-router devDependencies: - '@biomejs/biome': - specifier: ^1.9.4 - version: 1.9.4 - '@cloudflare/vite-plugin': - specifier: 0.1.7 - version: 0.1.7(vite@6.2.5(@types/node@22.14.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.6.0))(workerd@1.20250224.0)(wrangler@3.114.5(@cloudflare/workers-types@4.20250317.0)) - '@cloudflare/workers-types': - specifier: ^4.20250224.0 - version: 4.20250317.0 - '@jacob-ebey/vite-react-server-dom': - specifier: 0.0.12 - version: 0.0.12(@jacob-ebey/react-server-dom-vite@19.0.0-experimental.14(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(rollup@4.43.0)(vite@6.2.5(@types/node@22.14.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.6.0)) + '@hiogawa/vite-rsc': + specifier: 0.4.1 + version: 0.4.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(vite@6.2.5(@types/node@22.14.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.6.0)) '@types/express': specifier: ^5.0.0 version: 5.0.1 @@ -1893,15 +1866,18 @@ importers: '@types/react-dom': specifier: ^18.2.7 version: 18.2.7 + '@vitejs/plugin-react': + specifier: ^4.5.2 + version: 4.5.2(vite@6.2.5(@types/node@22.14.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.6.0)) + cross-env: + specifier: ^7.0.3 + version: 7.0.3 + typescript: + specifier: ^5.1.6 + version: 5.4.5 vite: specifier: ^6.2.0 version: 6.2.5(@types/node@22.14.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.6.0) - vite-tsconfig-paths: - specifier: ^5.1.4 - version: 5.1.4(typescript@5.4.5)(vite@6.2.5(@types/node@22.14.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.6.0)) - wrangler: - specifier: ^3.111.0 - version: 3.114.5(@cloudflare/workers-types@4.20250317.0) playground/split-route-modules: dependencies: @@ -2064,10 +2040,6 @@ packages: resolution: {integrity: sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==} engines: {node: '>=6.9.0'} - '@babel/core@7.24.4': - resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==} - engines: {node: '>=6.9.0'} - '@babel/core@7.27.4': resolution: {integrity: sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==} engines: {node: '>=6.9.0'} @@ -2133,10 +2105,6 @@ packages: resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.24.3': - resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} - engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.27.1': resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} engines: {node: '>=6.9.0'} @@ -2151,14 +2119,14 @@ packages: resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.24.0': - resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==} - engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.26.5': resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} 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-remap-async-to-generator@7.22.9': resolution: {integrity: sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==} engines: {node: '>=6.9.0'} @@ -2653,14 +2621,14 @@ packages: 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 @@ -2789,10 +2757,6 @@ packages: resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.24.1': - resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} - engines: {node: '>=6.9.0'} - '@babel/traverse@7.27.4': resolution: {integrity: sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==} engines: {node: '>=6.9.0'} @@ -2921,10 +2885,6 @@ packages: '@changesets/write@0.2.3': resolution: {integrity: sha512-Dbamr7AIMvslKnNYsLFafaVORx4H0pvCA2MHqgtNCySMe1blImEyAEOzDmcgKAkgz4+uwoLz7demIrX+JBr/Xw==} - '@cloudflare/kv-asset-handler@0.3.4': - resolution: {integrity: sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==} - engines: {node: '>=16.13'} - '@cloudflare/kv-asset-handler@0.4.0': resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==} engines: {node: '>=18.0.0'} @@ -2953,12 +2913,6 @@ packages: vite: ^6.1.0 wrangler: ^3.101.0 || ^4.0.0 - '@cloudflare/vite-plugin@0.1.7': - resolution: {integrity: sha512-s3j4eHvGsz2eTv78na1YZ0HvTgj78SZ9iq10p1SbgiEE4SXLOlqYCifJiNP32nUQga9678OUeHqdV39thkD9vQ==} - peerDependencies: - vite: ^6.1.0 - wrangler: ^3.101.0 - '@cloudflare/workerd-darwin-64@1.20250224.0': resolution: {integrity: sha512-sBbaAF2vgQ9+T50ik1ihekdepStBp0w4fvNghBfXIw1iWqfNWnypcjDMmi/7JhXJt2uBxBrSlXCvE5H7Gz+kbw==} engines: {node: '>=16'} @@ -3008,16 +2962,6 @@ packages: '@emotion/hash@0.9.1': resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} - '@esbuild-plugins/node-globals-polyfill@0.2.3': - resolution: {integrity: sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==} - peerDependencies: - esbuild: '*' - - '@esbuild-plugins/node-modules-polyfill@0.2.2': - resolution: {integrity: sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==} - peerDependencies: - esbuild: '*' - '@esbuild/aix-ppc64@0.19.12': resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} engines: {node: '>=12'} @@ -3036,12 +2980,6 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.17.19': - resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.19.12': resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} engines: {node: '>=12'} @@ -3060,12 +2998,6 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm@0.17.19': - resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.19.12': resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} engines: {node: '>=12'} @@ -3084,12 +3016,6 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-x64@0.17.19': - resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.19.12': resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} engines: {node: '>=12'} @@ -3108,12 +3034,6 @@ packages: cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.17.19': - resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.19.12': resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} engines: {node: '>=12'} @@ -3132,12 +3052,6 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.17.19': - resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.19.12': resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} engines: {node: '>=12'} @@ -3156,12 +3070,6 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.17.19': - resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.19.12': resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} engines: {node: '>=12'} @@ -3180,12 +3088,6 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.17.19': - resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.19.12': resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} engines: {node: '>=12'} @@ -3204,12 +3106,6 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.17.19': - resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.19.12': resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} engines: {node: '>=12'} @@ -3228,12 +3124,6 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.17.19': - resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.19.12': resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} engines: {node: '>=12'} @@ -3252,12 +3142,6 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.17.19': - resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.19.12': resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} engines: {node: '>=12'} @@ -3276,12 +3160,6 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.17.19': - resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.19.12': resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} engines: {node: '>=12'} @@ -3300,12 +3178,6 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.17.19': - resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.19.12': resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} engines: {node: '>=12'} @@ -3324,12 +3196,6 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.17.19': - resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.19.12': resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} engines: {node: '>=12'} @@ -3348,12 +3214,6 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.17.19': - resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.19.12': resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} engines: {node: '>=12'} @@ -3372,12 +3232,6 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.17.19': - resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.19.12': resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} engines: {node: '>=12'} @@ -3396,12 +3250,6 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.17.19': - resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.19.12': resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} engines: {node: '>=12'} @@ -3432,12 +3280,6 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.17.19': - resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.19.12': resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} engines: {node: '>=12'} @@ -3468,12 +3310,6 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.17.19': - resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.19.12': resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} engines: {node: '>=12'} @@ -3492,12 +3328,6 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.17.19': - resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.19.12': resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} engines: {node: '>=12'} @@ -3516,12 +3346,6 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.17.19': - resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.19.12': resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} engines: {node: '>=12'} @@ -3540,12 +3364,6 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.17.19': - resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.19.12': resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} engines: {node: '>=12'} @@ -3564,12 +3382,6 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.17.19': - resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.19.12': resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} engines: {node: '>=12'} @@ -3636,6 +3448,16 @@ packages: resolution: {integrity: sha512-AgJgKLooZyQnzMfoFg5Mo/aHM+HGBC9ExpXIjNqGimYTRgNbL/K7X5EM1kR2JY90BNKk9lo6Usq1T/nWFdT7TQ==} hasBin: true + '@hiogawa/transforms@0.1.1': + resolution: {integrity: sha512-NAJ38s8lMMSDv7HOupWt1w5EJ8poMOWPd+JCmmfHg8sdWgFCjCGHnaDi5pTGEBxYLzso9K2urfyK2rW6HORsHw==} + + '@hiogawa/vite-rsc@0.4.1': + resolution: {integrity: sha512-GQ19F8q004E7wjCL/RARhblPXx6W2SC+hdVc8xw85xPy22iU0Ft67jJtY1gI7k3jqoPWrBNaUjgmemJIZRoazw==} + peerDependencies: + react: '*' + react-dom: '*' + vite: '*' + '@humanwhocodes/config-array@0.11.14': resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} @@ -3797,19 +3619,6 @@ packages: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - '@jacob-ebey/react-server-dom-vite@19.0.0-experimental.14': - resolution: {integrity: sha512-4bBG0uLS/XuddOi1KjJb6j/A49rdEe62yzcFjd7jghQmPXT8jNinyIislylz9xupJB3TvHB8JGv5/PB+LPASHg==} - engines: {node: '>=0.10.0'} - peerDependencies: - react: ^19.0.0 - react-dom: ^19.0.0 - - '@jacob-ebey/vite-react-server-dom@0.0.12': - resolution: {integrity: sha512-XzaqcFlnXgRv2ZVyHJEhJGLvTsx0XCpnGqlHywzrp6XjUMujyRvEdNp4EGt8VGpGtH0o+TlS6YxLTc8MVH3jGQ==} - peerDependencies: - '@jacob-ebey/react-server-dom-vite': '*' - vite: ^6.0.0 - '@jest/console@29.7.0': resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3960,9 +3769,6 @@ packages: '@mjackson/node-fetch-server@0.2.0': resolution: {integrity: sha512-EMlH1e30yzmTpGLQjlFmaDAjyOeZhng1/XCd7DExR8PNAnG/G1tyruZxEoUe11ClnwGhGrtsdnyyUx1frSzjng==} - '@mjackson/node-fetch-server@0.5.0': - resolution: {integrity: sha512-GZrkGuP3N7he0GdK9CCqpjabqsXjJa4tp0yKw973FoGAAOGE6WTcp3kcosRdeGYqtoFn7IEu84g3pItk4wRBFg==} - '@mjackson/node-fetch-server@0.6.1': resolution: {integrity: sha512-9ZJnk/DJjt805uv5PPv11haJIW+HHf3YEEyVXv+8iLQxLD/iXA68FH220XoiTPBC4gCg5q+IMadDw8qPqlA5wg==} @@ -4767,6 +4573,9 @@ packages: cpu: [x64] os: [win32] + '@rolldown/pluginutils@1.0.0-beta.11': + resolution: {integrity: sha512-L/gAA/hyCSuzTF1ftlzUSI/IKr2POHsv1Dd78GfqkR83KMNuswWD61JxGV2L7nRwBBBSDr6R1gCkdTmoN7W4ag==} + '@rollup/pluginutils@5.1.0': resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} engines: {node: '>=14.0.0'} @@ -5523,11 +5332,11 @@ packages: peerDependencies: vite: ^2.2.3 || ^3.0.0 || ^4.0.3 || ^5.0.0 - '@vitejs/plugin-react@4.3.4': - resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==} + '@vitejs/plugin-react@4.5.2': + resolution: {integrity: sha512-QNVT3/Lxx99nMQWJWF7K4N6apUEuT0KlZA3mx/mVaoGj3smm/8rc8ezz15J1pcbcjDK0V15rpHetVfya08r76Q==} engines: {node: ^14.18.0 || >=16.0.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 '@web3-storage/multipart-parser@1.0.0': resolution: {integrity: sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==} @@ -6538,11 +6347,6 @@ packages: peerDependencies: esbuild: '>=0.12 <1' - esbuild@0.17.19: - resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} - engines: {node: '>=12'} - hasBin: true - esbuild@0.19.12: resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} engines: {node: '>=12'} @@ -6756,9 +6560,6 @@ packages: estree-util-visit@2.0.0: resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} - estree-walker@0.6.1: - resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} - estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} @@ -7938,9 +7739,6 @@ packages: resolution: {integrity: sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==} hasBin: true - magic-string@0.25.9: - resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} - magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} @@ -8281,11 +8079,6 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} - miniflare@3.20250214.1: - resolution: {integrity: sha512-NE66QV+2n9ZndaP5jgPlcVref3Arvizb+l2QqhgeXtKM5Orhi8UU2mijoiN3mHEUexKaBES2S1VubT4LDPqkxQ==} - engines: {node: '>=16.13'} - hasBin: true - miniflare@3.20250408.0: resolution: {integrity: sha512-URXD7+b0tLbBtchPM/MfWYujymHUrmPtd3EDQbe51qrPPF1zQCdSeNbA4f/GRQMoQIEE6EIhvEYjVjL+hiN+Og==} engines: {node: '>=16.13'} @@ -8742,6 +8535,9 @@ packages: 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==} @@ -8998,6 +8794,10 @@ packages: resolution: {integrity: sha512-FPvF2XxTSikpJxcr+bHut2H4gJ17+18Uy20D5/F+SKzFap62R3cM5wH6b8WN3LyGSYeQilLEcJcR1fjBSI2S1A==} engines: {node: '>=0.10.0'} + react-refresh@0.17.0: + resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} + engines: {node: '>=0.10.0'} + react-server-dom-parcel@19.1.0: resolution: {integrity: sha512-JkfPt/yV1ru8J1CTM0PD74HZZRQTjdoTU5eg2r6Xjn/TmFRS2J/4QsKdwu2X8NsA+ADnPHI8wKCgBh1HCmRr/A==} engines: {node: '>=0.10.0'} @@ -9301,16 +9101,6 @@ packages: '@oxc-project/runtime': optional: true - rollup-plugin-inject@3.0.2: - resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==} - deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject. - - rollup-plugin-node-polyfills@0.2.1: - resolution: {integrity: sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==} - - rollup-pluginutils@2.8.2: - resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} - rollup@4.34.8: resolution: {integrity: sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -9532,10 +9322,6 @@ packages: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} - sourcemap-codec@1.4.8: - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} - deprecated: Please use @jridgewell/sourcemap-codec instead - space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} @@ -10042,13 +9828,6 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - unplugin-rsc@0.0.11: - resolution: {integrity: sha512-Sr/WGXBJ7Ur0lo7r/AqLWVufpcJ8DbtXl+zzzdJorEyp8uB2eRawYRIEmB6nqVIdEIJ9i6Iaysw3n+ng91IWFA==} - - unplugin@1.10.1: - resolution: {integrity: sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg==} - engines: {node: '>=14.0.0'} - update-browserslist-db@1.1.3: resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} hasBin: true @@ -10165,14 +9944,6 @@ packages: vite: optional: true - vite-tsconfig-paths@5.1.4: - resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==} - peerDependencies: - vite: '*' - peerDependenciesMeta: - vite: - optional: true - vite@5.1.3: resolution: {integrity: sha512-UfmUD36DKkqhi/F75RrxvPpry+9+tTkrXfMNZD+SboZqBCMsxKtO52XeGzzuh7ioz+Eo/SYDBbdb0Z7vgcDJew==} engines: {node: ^18.0.0 || >=20.0.0} @@ -10281,6 +10052,14 @@ packages: yaml: optional: true + vitefu@1.0.6: + resolution: {integrity: sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 + peerDependenciesMeta: + vite: + optional: true + w3c-xmlserializer@4.0.0: resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} engines: {node: '>=14'} @@ -10316,13 +10095,6 @@ packages: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} - webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - - webpack-virtual-modules@0.6.2: - resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} - whatwg-encoding@2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} engines: {node: '>=12'} @@ -10395,16 +10167,6 @@ packages: engines: {node: '>=16'} hasBin: true - wrangler@3.114.5: - resolution: {integrity: sha512-iMYC+d0ssbUQDhwRXmcRwidbuvY/dFV8bmTMdVJ1tLTLcmpWrr7bmQZwLawOvjaKBzwQwj7Qp3TKPg6IyRslnQ==} - engines: {node: '>=16.17.0'} - hasBin: true - peerDependencies: - '@cloudflare/workers-types': ^4.20250408.0 - peerDependenciesMeta: - '@cloudflare/workers-types': - optional: true - wrangler@4.2.0: resolution: {integrity: sha512-wY+jq6tsaBVrxCesJ9NF9R63T+96W6Ht9xEkAdw9JnkstUWM6lGywMOeupYP8Ji8x4roNa98XrT0Gw8qu+QRNQ==} engines: {node: '>=18.0.0'} @@ -10509,6 +10271,9 @@ packages: youch@3.3.4: resolution: {integrity: sha512-UeVBXie8cA35DS6+nBkls68xaBBXCye0CNznrhszZjTbRVnJKQuNsyLKBTTL4ln1o1rh2PKtv35twV7irj5SEg==} + zimmerframe@1.1.2: + resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==} + zod-validation-error@3.4.0: resolution: {integrity: sha512-ZOPR9SVY6Pb2qqO5XHt+MkkTRxGXb4EVtnjc9JpXUOtUB1T9Ru7mZOT361AN3MsetVe7R0a1KZshJDZdgp9miQ==} engines: {node: '>=18.0.0'} @@ -10555,26 +10320,6 @@ snapshots: '@babel/compat-data@7.27.5': {} - '@babel/core@7.24.4': - dependencies: - '@ampproject/remapping': 2.2.1 - '@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.24.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 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - '@babel/core@7.27.4': dependencies: '@ampproject/remapping': 2.2.1 @@ -10651,7 +10396,7 @@ snapshots: dependencies: '@babel/core': 7.27.4 '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 debug: 4.4.0 lodash.debounce: 4.0.8 resolve: 1.22.8 @@ -10688,10 +10433,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-imports@7.24.3': - dependencies: - '@babel/types': 7.27.6 - '@babel/helper-module-imports@7.27.1': dependencies: '@babel/traverse': 7.27.4 @@ -10699,15 +10440,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.27.3(@babel/core@7.24.4)': - dependencies: - '@babel/core': 7.24.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-module-transforms@7.27.3(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -10721,10 +10453,10 @@ snapshots: dependencies: '@babel/types': 7.27.6 - '@babel/helper-plugin-utils@7.24.0': {} - '@babel/helper-plugin-utils@7.26.5': {} + '@babel/helper-plugin-utils@7.27.1': {} + '@babel/helper-remap-async-to-generator@7.22.9(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -10901,7 +10633,7 @@ snapshots: '@babel/plugin-syntax-flow@7.18.6(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.27.4)': dependencies: @@ -11253,15 +10985,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.27.4)': + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.27.4)': + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-react-jsx@7.22.5(@babel/core@7.27.4)': dependencies: @@ -11494,21 +11226,6 @@ snapshots: '@babel/parser': 7.27.5 '@babel/types': 7.27.6 - '@babel/traverse@7.24.1': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.27.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.27.5 - '@babel/types': 7.27.6 - debug: 4.4.0 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - '@babel/traverse@7.27.4': dependencies: '@babel/code-frame': 7.27.1 @@ -11732,10 +11449,6 @@ snapshots: human-id: 1.0.2 prettier: 2.8.8 - '@cloudflare/kv-asset-handler@0.3.4': - dependencies: - mime: 3.0.0 - '@cloudflare/kv-asset-handler@0.4.0': dependencies: mime: 3.0.0 @@ -11767,20 +11480,6 @@ snapshots: - utf-8-validate - workerd - '@cloudflare/vite-plugin@0.1.7(vite@6.2.5(@types/node@22.14.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.6.0))(workerd@1.20250224.0)(wrangler@3.114.5(@cloudflare/workers-types@4.20250317.0))': - dependencies: - '@cloudflare/unenv-preset': 1.1.1(unenv@2.0.0-rc.1)(workerd@1.20250224.0) - '@hattip/adapter-node': 0.0.49 - miniflare: 3.20250214.1 - unenv: 2.0.0-rc.1 - vite: 6.2.5(@types/node@22.14.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.6.0) - wrangler: 3.114.5(@cloudflare/workers-types@4.20250317.0) - ws: 8.18.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - workerd - '@cloudflare/workerd-darwin-64@1.20250224.0': optional: true @@ -11820,16 +11519,6 @@ snapshots: '@emotion/hash@0.9.1': {} - '@esbuild-plugins/node-globals-polyfill@0.2.3(esbuild@0.17.19)': - dependencies: - esbuild: 0.17.19 - - '@esbuild-plugins/node-modules-polyfill@0.2.2(esbuild@0.17.19)': - dependencies: - esbuild: 0.17.19 - escape-string-regexp: 4.0.0 - rollup-plugin-node-polyfills: 0.2.1 - '@esbuild/aix-ppc64@0.19.12': optional: true @@ -11839,9 +11528,6 @@ snapshots: '@esbuild/aix-ppc64@0.25.0': optional: true - '@esbuild/android-arm64@0.17.19': - optional: true - '@esbuild/android-arm64@0.19.12': optional: true @@ -11851,9 +11537,6 @@ snapshots: '@esbuild/android-arm64@0.25.0': optional: true - '@esbuild/android-arm@0.17.19': - optional: true - '@esbuild/android-arm@0.19.12': optional: true @@ -11863,9 +11546,6 @@ snapshots: '@esbuild/android-arm@0.25.0': optional: true - '@esbuild/android-x64@0.17.19': - optional: true - '@esbuild/android-x64@0.19.12': optional: true @@ -11875,9 +11555,6 @@ snapshots: '@esbuild/android-x64@0.25.0': optional: true - '@esbuild/darwin-arm64@0.17.19': - optional: true - '@esbuild/darwin-arm64@0.19.12': optional: true @@ -11887,9 +11564,6 @@ snapshots: '@esbuild/darwin-arm64@0.25.0': optional: true - '@esbuild/darwin-x64@0.17.19': - optional: true - '@esbuild/darwin-x64@0.19.12': optional: true @@ -11899,9 +11573,6 @@ snapshots: '@esbuild/darwin-x64@0.25.0': optional: true - '@esbuild/freebsd-arm64@0.17.19': - optional: true - '@esbuild/freebsd-arm64@0.19.12': optional: true @@ -11911,9 +11582,6 @@ snapshots: '@esbuild/freebsd-arm64@0.25.0': optional: true - '@esbuild/freebsd-x64@0.17.19': - optional: true - '@esbuild/freebsd-x64@0.19.12': optional: true @@ -11923,9 +11591,6 @@ snapshots: '@esbuild/freebsd-x64@0.25.0': optional: true - '@esbuild/linux-arm64@0.17.19': - optional: true - '@esbuild/linux-arm64@0.19.12': optional: true @@ -11935,9 +11600,6 @@ snapshots: '@esbuild/linux-arm64@0.25.0': optional: true - '@esbuild/linux-arm@0.17.19': - optional: true - '@esbuild/linux-arm@0.19.12': optional: true @@ -11947,9 +11609,6 @@ snapshots: '@esbuild/linux-arm@0.25.0': optional: true - '@esbuild/linux-ia32@0.17.19': - optional: true - '@esbuild/linux-ia32@0.19.12': optional: true @@ -11959,9 +11618,6 @@ snapshots: '@esbuild/linux-ia32@0.25.0': optional: true - '@esbuild/linux-loong64@0.17.19': - optional: true - '@esbuild/linux-loong64@0.19.12': optional: true @@ -11971,9 +11627,6 @@ snapshots: '@esbuild/linux-loong64@0.25.0': optional: true - '@esbuild/linux-mips64el@0.17.19': - optional: true - '@esbuild/linux-mips64el@0.19.12': optional: true @@ -11983,9 +11636,6 @@ snapshots: '@esbuild/linux-mips64el@0.25.0': optional: true - '@esbuild/linux-ppc64@0.17.19': - optional: true - '@esbuild/linux-ppc64@0.19.12': optional: true @@ -11995,9 +11645,6 @@ snapshots: '@esbuild/linux-ppc64@0.25.0': optional: true - '@esbuild/linux-riscv64@0.17.19': - optional: true - '@esbuild/linux-riscv64@0.19.12': optional: true @@ -12007,9 +11654,6 @@ snapshots: '@esbuild/linux-riscv64@0.25.0': optional: true - '@esbuild/linux-s390x@0.17.19': - optional: true - '@esbuild/linux-s390x@0.19.12': optional: true @@ -12019,9 +11663,6 @@ snapshots: '@esbuild/linux-s390x@0.25.0': optional: true - '@esbuild/linux-x64@0.17.19': - optional: true - '@esbuild/linux-x64@0.19.12': optional: true @@ -12037,9 +11678,6 @@ snapshots: '@esbuild/netbsd-arm64@0.25.0': optional: true - '@esbuild/netbsd-x64@0.17.19': - optional: true - '@esbuild/netbsd-x64@0.19.12': optional: true @@ -12055,9 +11693,6 @@ snapshots: '@esbuild/openbsd-arm64@0.25.0': optional: true - '@esbuild/openbsd-x64@0.17.19': - optional: true - '@esbuild/openbsd-x64@0.19.12': optional: true @@ -12067,9 +11702,6 @@ snapshots: '@esbuild/openbsd-x64@0.25.0': optional: true - '@esbuild/sunos-x64@0.17.19': - optional: true - '@esbuild/sunos-x64@0.19.12': optional: true @@ -12079,9 +11711,6 @@ snapshots: '@esbuild/sunos-x64@0.25.0': optional: true - '@esbuild/win32-arm64@0.17.19': - optional: true - '@esbuild/win32-arm64@0.19.12': optional: true @@ -12091,9 +11720,6 @@ snapshots: '@esbuild/win32-arm64@0.25.0': optional: true - '@esbuild/win32-ia32@0.17.19': - optional: true - '@esbuild/win32-ia32@0.19.12': optional: true @@ -12103,9 +11729,6 @@ snapshots: '@esbuild/win32-ia32@0.25.0': optional: true - '@esbuild/win32-x64@0.17.19': - optional: true - '@esbuild/win32-x64@0.19.12': optional: true @@ -12172,6 +11795,22 @@ snapshots: cac: 6.7.14 mime-types: 2.1.35 + '@hiogawa/transforms@0.1.1': + dependencies: + estree-walker: 3.0.3 + magic-string: 0.30.17 + periscopic: 4.0.2 + + '@hiogawa/vite-rsc@0.4.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(vite@6.2.5(@types/node@22.14.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.6.0))': + dependencies: + '@hiogawa/transforms': 0.1.1 + '@mjackson/node-fetch-server': 0.6.1 + magic-string: 0.30.17 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + vite: 6.2.5(@types/node@22.14.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.6.0) + vitefu: 1.0.6(vite@6.2.5(@types/node@22.14.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.6.0)) + '@humanwhocodes/config-array@0.11.14': dependencies: '@humanwhocodes/object-schema': 2.0.3 @@ -12304,22 +11943,6 @@ snapshots: '@istanbuljs/schema@0.1.3': {} - '@jacob-ebey/react-server-dom-vite@19.0.0-experimental.14(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) - - '@jacob-ebey/vite-react-server-dom@0.0.12(@jacob-ebey/react-server-dom-vite@19.0.0-experimental.14(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(rollup@4.43.0)(vite@6.2.5(@types/node@22.14.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.6.0))': - dependencies: - '@jacob-ebey/react-server-dom-vite': 19.0.0-experimental.14(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@mjackson/node-fetch-server': 0.5.0 - '@vitejs/plugin-react': 4.3.4(vite@6.2.5(@types/node@22.14.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.6.0)) - unplugin-rsc: 0.0.11(rollup@4.43.0) - vite: 6.2.5(@types/node@22.14.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.6.0) - transitivePeerDependencies: - - rollup - - supports-color - '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 @@ -12598,8 +12221,6 @@ snapshots: '@mjackson/node-fetch-server@0.2.0': {} - '@mjackson/node-fetch-server@0.5.0': {} - '@mjackson/node-fetch-server@0.6.1': {} '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': @@ -13681,6 +13302,8 @@ snapshots: '@rolldown/binding-win32-x64-msvc@1.0.0-beta.7-commit.e117288': optional: true + '@rolldown/pluginutils@1.0.0-beta.11': {} + '@rollup/pluginutils@5.1.0(rollup@4.43.0)': dependencies: '@types/estree': 1.0.6 @@ -14550,13 +14173,14 @@ snapshots: - terser - ts-node - '@vitejs/plugin-react@4.3.4(vite@6.2.5(@types/node@22.14.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.6.0))': + '@vitejs/plugin-react@4.5.2(vite@6.2.5(@types/node@22.14.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.6.0))': dependencies: '@babel/core': 7.27.4 - '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.27.4) - '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.27.4) + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.27.4) + '@rolldown/pluginutils': 1.0.0-beta.11 '@types/babel__core': 7.20.5 - react-refresh: 0.14.2 + react-refresh: 0.17.0 vite: 6.2.5(@types/node@22.14.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.6.0) transitivePeerDependencies: - supports-color @@ -15709,31 +15333,6 @@ snapshots: transitivePeerDependencies: - supports-color - esbuild@0.17.19: - optionalDependencies: - '@esbuild/android-arm': 0.17.19 - '@esbuild/android-arm64': 0.17.19 - '@esbuild/android-x64': 0.17.19 - '@esbuild/darwin-arm64': 0.17.19 - '@esbuild/darwin-x64': 0.17.19 - '@esbuild/freebsd-arm64': 0.17.19 - '@esbuild/freebsd-x64': 0.17.19 - '@esbuild/linux-arm': 0.17.19 - '@esbuild/linux-arm64': 0.17.19 - '@esbuild/linux-ia32': 0.17.19 - '@esbuild/linux-loong64': 0.17.19 - '@esbuild/linux-mips64el': 0.17.19 - '@esbuild/linux-ppc64': 0.17.19 - '@esbuild/linux-riscv64': 0.17.19 - '@esbuild/linux-s390x': 0.17.19 - '@esbuild/linux-x64': 0.17.19 - '@esbuild/netbsd-x64': 0.17.19 - '@esbuild/openbsd-x64': 0.17.19 - '@esbuild/sunos-x64': 0.17.19 - '@esbuild/win32-arm64': 0.17.19 - '@esbuild/win32-ia32': 0.17.19 - '@esbuild/win32-x64': 0.17.19 - esbuild@0.19.12: optionalDependencies: '@esbuild/aix-ppc64': 0.19.12 @@ -16142,8 +15741,6 @@ snapshots: '@types/estree-jsx': 1.0.5 '@types/unist': 3.0.2 - estree-walker@0.6.1: {} - estree-walker@2.0.2: {} estree-walker@3.0.3: @@ -17625,10 +17222,6 @@ snapshots: lz-string@1.4.4: {} - magic-string@0.25.9: - dependencies: - sourcemap-codec: 1.4.8 - magic-string@0.30.17: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -18305,23 +17898,6 @@ snapshots: min-indent@1.0.1: {} - miniflare@3.20250214.1: - 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 - stoppable: 1.1.0 - undici: 5.28.5 - workerd: 1.20250224.0 - ws: 8.18.0 - youch: 3.2.3 - zod: 3.22.3 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - miniflare@3.20250408.0: dependencies: '@cspotcode/source-map-support': 0.8.1 @@ -18899,6 +18475,12 @@ snapshots: estree-walker: 3.0.3 is-reference: 3.0.2 + periscopic@4.0.2: + dependencies: + '@types/estree': 1.0.7 + is-reference: 3.0.2 + zimmerframe: 1.1.2 + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -19129,6 +18711,8 @@ snapshots: react-refresh@0.16.0: {} + react-refresh@0.17.0: {} + react-server-dom-parcel@19.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: react: 19.1.0 @@ -19428,20 +19012,6 @@ snapshots: transitivePeerDependencies: - typescript - rollup-plugin-inject@3.0.2: - dependencies: - estree-walker: 0.6.1 - magic-string: 0.25.9 - rollup-pluginutils: 2.8.2 - - rollup-plugin-node-polyfills@0.2.1: - dependencies: - rollup-plugin-inject: 3.0.2 - - rollup-pluginutils@2.8.2: - dependencies: - estree-walker: 0.6.1 - rollup@4.34.8: dependencies: '@types/estree': 1.0.6 @@ -19789,8 +19359,6 @@ snapshots: dependencies: whatwg-url: 7.1.0 - sourcemap-codec@1.4.8: {} - space-separated-tokens@2.0.2: {} spawndamnit@2.0.0: @@ -20397,25 +19965,6 @@ snapshots: unpipe@1.0.0: {} - unplugin-rsc@0.0.11(rollup@4.43.0): - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/traverse': 7.24.1 - '@rollup/pluginutils': 5.1.0(rollup@4.43.0) - unplugin: 1.10.1 - transitivePeerDependencies: - - rollup - - supports-color - - unplugin@1.10.1: - dependencies: - acorn: 8.14.1 - chokidar: 3.6.0 - webpack-sources: 3.2.3 - webpack-virtual-modules: 0.6.2 - update-browserslist-db@1.1.3(browserslist@4.24.5): dependencies: browserslist: 4.24.5 @@ -20669,17 +20218,6 @@ snapshots: - supports-color - typescript - vite-tsconfig-paths@5.1.4(typescript@5.4.5)(vite@6.2.5(@types/node@22.14.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.6.0)): - dependencies: - debug: 4.4.0 - globrex: 0.1.2 - tsconfck: 3.0.3(typescript@5.4.5) - optionalDependencies: - vite: 6.2.5(@types/node@22.14.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.6.0) - transitivePeerDependencies: - - supports-color - - typescript - vite@5.1.3(@types/node@22.14.0)(lightningcss@1.30.1)(terser@5.15.0): dependencies: esbuild: 0.19.12 @@ -20733,6 +20271,10 @@ snapshots: tsx: 4.19.3 yaml: 2.6.0 + vitefu@1.0.6(vite@6.2.5(@types/node@22.14.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.6.0)): + optionalDependencies: + vite: 6.2.5(@types/node@22.14.0)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.3)(yaml@2.6.0) + w3c-xmlserializer@4.0.0: dependencies: xml-name-validator: 4.0.0 @@ -20771,10 +20313,6 @@ snapshots: webidl-conversions@7.0.0: {} - webpack-sources@3.2.3: {} - - webpack-virtual-modules@0.6.2: {} - whatwg-encoding@2.0.0: dependencies: iconv-lite: 0.6.3 @@ -20876,26 +20414,6 @@ snapshots: '@cloudflare/workerd-linux-arm64': 1.20250224.0 '@cloudflare/workerd-windows-64': 1.20250224.0 - wrangler@3.114.5(@cloudflare/workers-types@4.20250317.0): - dependencies: - '@cloudflare/kv-asset-handler': 0.3.4 - '@cloudflare/unenv-preset': 2.0.2(unenv@2.0.0-rc.14)(workerd@1.20250224.0) - '@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19) - '@esbuild-plugins/node-modules-polyfill': 0.2.2(esbuild@0.17.19) - blake3-wasm: 2.1.5 - esbuild: 0.17.19 - miniflare: 3.20250408.0 - path-to-regexp: 6.3.0 - unenv: 2.0.0-rc.14 - workerd: 1.20250224.0 - optionalDependencies: - '@cloudflare/workers-types': 4.20250317.0 - fsevents: 2.3.3 - sharp: 0.33.5 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - wrangler@4.2.0(@cloudflare/workers-types@4.20250317.0): dependencies: '@cloudflare/kv-asset-handler': 0.4.0 @@ -21006,6 +20524,8 @@ snapshots: mustache: 4.2.0 stacktracey: 2.1.8 + zimmerframe@1.1.2: {} + zod-validation-error@3.4.0(zod@3.24.2): dependencies: zod: 3.24.2