1/** @jsxImportSource react */
2/// <reference types="@vitejs/plugin-rsc/types" />
3import { createFromReadableStream } from "@vitejs/plugin-rsc/ssr";
4import { renderToReadableStream as renderHTMLToReadableStream } from "react-dom/server.edge";
5import {
6 unstable_routeRSCServerRequest as routeRSCServerRequest,
7 unstable_RSCStaticRouter as RSCStaticRouter,
8} from "react-router";
9
10export default async function handler(
11 request: Request,
12 serverResponse: Response,
13): Promise<Response> {
14 const bootstrapScriptContent =
15 await import.meta.viteRsc.loadBootstrapScriptContent("index");
16
17 return await routeRSCServerRequest({
18 request,
19 serverResponse,
20 createFromReadableStream,
21 async renderHTML(getPayload, options) {
22 const payload = getPayload();
23
24 return await renderHTMLToReadableStream(
25 <RSCStaticRouter getPayload={getPayload} />,
26 {
27 ...options,
28 bootstrapScriptContent,
29 signal: request.signal,
30 formState: await payload.formState,
31 },
32 );
33 },
34 });
35}