Matches the given routes to a Request
and returns an RSC
Response
encoding an unstable_RSCPayload for consumption by an RSC
enabled client router.
Treat every React Server Function as a public endpoint. Server Functions are not inherently associated with a route. Any route middleware that runs is selected from the URL used to call a Server Function, but the client controls both the Server Function identifier and the URL. Perform all access control checks within each Server Function, or use a route action for middleware-driven access control.
import {
createTemporaryReferenceSet,
decodeAction,
decodeReply,
loadServerAction,
renderToReadableStream,
} from "@vitejs/plugin-rsc/rsc";
import { unstable_matchRSCServerRequest as matchRSCServerRequest } from "react-router";
matchRSCServerRequest({
createTemporaryReferenceSet,
decodeAction,
decodeFormState,
decodeReply,
loadServerAction,
request,
routes: routes(),
generateResponse(match) {
return new Response(
renderToReadableStream(match.payload),
{
status: match.statusCode,
headers: match.headers,
}
);
},
});
async function matchRSCServerRequest({
allowedActionOrigins,
createTemporaryReferenceSet,
basename,
decodeReply,
requestContext,
routeDiscovery,
loadServerAction,
decodeAction,
decodeFormState,
clientVersion,
onError,
request,
routes,
generateResponse,
}: {
allowedActionOrigins?: string[];
createTemporaryReferenceSet: () => unknown;
basename?: string;
decodeReply?: DecodeReplyFunction;
decodeAction?: DecodeActionFunction;
decodeFormState?: DecodeFormStateFunction;
requestContext?: RouterContextProvider;
loadServerAction?: LoadServerActionFunction;
clientVersion?: string;
onError?: (error: unknown) => void;
request: Request;
routes: RSCRouteConfigEntry[];
routeDiscovery?: RouteDiscovery;
generateResponse: (
match: RSCMatch,
{
onError,
temporaryReferences,
}: {
onError(error: unknown): string | undefined;
temporaryReferences: unknown;
},
) => Response;
}): Promise<Response>
Origin patterns that are allowed to execute actions.
The basename to use when matching the request.
A function that returns a temporary reference set for the request, used to track temporary references in the RSC stream.
Your react-server-dom-xyz/server's decodeAction function, responsible for loading a server action.
A function responsible for decoding form state for progressively enhanceable forms with React's useActionState
using your react-server-dom-xyz/server's decodeFormState.
Your react-server-dom-xyz/server's decodeReply function, used to decode the server function's arguments and bind them to the
implementation for invocation by the router.
A function responsible for using your renderToReadableStream to generate a Response
encoding the unstable_RSCPayload.
Your react-server-dom-xyz/server's loadServerAction function, used to load a server action by ID.
A version derived from the client build output used to detect stale clients during lazy route discovery.
An optional error handler that will be called with any errors that occur during the request processing.
The Request to match against.
An instance of RouterContextProvider that should be created per request, to be passed to actions,
loaders and middleware.
The route discovery configuration, used to determine how the router should discover new routes during navigations.
Your route definitions.