Routes the incoming request to the RSC server and appropriately proxies the server response for data / resource requests, or renders to HTML for a document request.
import { createFromReadableStream } from "@vitejs/plugin-rsc/ssr";
import * as ReactDomServer from "react-dom/server.edge";
import {
unstable_RSCStaticRouter as RSCStaticRouter,
unstable_routeRSCServerRequest as routeRSCServerRequest,
} from "react-router";
routeRSCServerRequest({
request,
fetchServer,
createFromReadableStream,
async renderHTML(getPayload) {
const payload = await getPayload();
return await renderHTMLToReadableStream(
<RSCStaticRouter getPayload={getPayload} />,
{
bootstrapScriptContent,
formState: await getFormState(payload),
}
);
},
});
async function routeRSCServerRequest({
request,
fetchServer,
createFromReadableStream,
renderHTML,
hydrate = true,
}: {
request: Request;
fetchServer: (request: Request) => Promise<Response>;
createFromReadableStream: SSRCreateFromReadableStreamFunction;
renderHTML: (
getPayload: () => Promise<RSCPayload>,
) => ReadableStream<Uint8Array> | Promise<ReadableStream<Uint8Array>>;
hydrate?: boolean;
}): Promise<Response>
Your react-server-dom-xyz/client
's createFromReadableStream
function, used to decode payloads from the server.
A function that forwards a Request
to the RSC handler and returns a Promise<Response>
containing a serialized RSCPayload
.
A function that renders the RSCPayload
to HTML, usually using a <RSCStaticRouter>
.
The request to route.
Whether to hydrate the server response with the RSC payload. Defaults to true
.
A Response
that either contains the RSC payload for data requests, or
renders the HTML for document requests.