react-router
Version:
Declarative routing for React
129 lines (127 loc) • 4.57 kB
TypeScript
import { RSCPayload } from "./server.rsc.js";
import * as React$1 from "react";
//#region lib/rsc/server.ssr.d.ts
type DecodedPayload = Promise<RSCPayload> & {
_deepestRenderedBoundaryId?: string | null;
formState: Promise<any>;
};
type SSRCreateFromReadableStreamFunction = (body: ReadableStream<Uint8Array>) => Promise<unknown>;
/**
* Routes the incoming [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request)
* to the [RSC](https://react.dev/reference/rsc/server-components) server and
* appropriately proxies the server response for data / resource requests, or
* renders to HTML for a document request.
*
* @example
* 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,
* serverResponse,
* createFromReadableStream,
* async renderHTML(getPayload) {
* const payload = getPayload();
*
* return await renderHTMLToReadableStream(
* <RSCStaticRouter getPayload={getPayload} />,
* {
* bootstrapScriptContent,
* formState: await payload.formState,
* }
* );
* },
* });
*
* @name unstable_routeRSCServerRequest
* @public
* @category RSC
* @mode data
* @param opts Options
* @param opts.createFromReadableStream Your `react-server-dom-xyz/client`'s
* `createFromReadableStream` function, used to decode payloads from the server.
* @param opts.serverResponse A Response or partial response generated by the [RSC](https://react.dev/reference/rsc/server-components) handler containing a serialized {@link unstable_RSCPayload}.
* @param opts.hydrate Whether to hydrate the server response with the RSC payload.
* Defaults to `true`.
* @param opts.renderHTML A function that renders the {@link unstable_RSCPayload} to
* HTML, usually using a {@link unstable_RSCStaticRouter | `<RSCStaticRouter>`}.
* @param opts.request The request to route.
* @returns A [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response)
* that either contains the [RSC](https://react.dev/reference/rsc/server-components)
* payload for data requests, or renders the HTML for document requests.
*/
declare function routeRSCServerRequest({
request,
serverResponse,
createFromReadableStream,
renderHTML,
hydrate
}: {
request: Request;
serverResponse: Response;
createFromReadableStream: SSRCreateFromReadableStreamFunction;
renderHTML: (getPayload: () => DecodedPayload, options: {
onError(error: unknown): string | undefined;
onHeaders(headers: Headers): void;
}) => ReadableStream<Uint8Array> | Promise<ReadableStream<Uint8Array>>;
hydrate?: boolean;
}): Promise<Response>;
/**
* Props for the {@link unstable_RSCStaticRouter} component.
*
* @name unstable_RSCStaticRouterProps
* @category Types
*/
interface RSCStaticRouterProps {
/**
* A function that starts decoding of the {@link unstable_RSCPayload}. Usually passed
* through from {@link unstable_routeRSCServerRequest}'s `renderHTML`.
*/
getPayload: () => DecodedPayload;
}
/**
* Pre-renders an {@link unstable_RSCPayload} to HTML. Usually used in
* {@link unstable_routeRSCServerRequest}'s `renderHTML` callback.
*
* @example
* 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,
* serverResponse,
* createFromReadableStream,
* async renderHTML(getPayload) {
* const payload = getPayload();
*
* return await renderHTMLToReadableStream(
* <RSCStaticRouter getPayload={getPayload} />,
* {
* bootstrapScriptContent,
* formState: await payload.formState,
* }
* );
* },
* });
*
* @name unstable_RSCStaticRouter
* @public
* @category RSC
* @mode data
* @param props Props
* @param {unstable_RSCStaticRouterProps.getPayload} props.getPayload n/a
* @returns A React component that renders the {@link unstable_RSCPayload} as HTML.
*/
declare function RSCStaticRouter({
getPayload
}: RSCStaticRouterProps): React$1.JSX.Element | null;
//#endregion
export { RSCStaticRouter, RSCStaticRouterProps, SSRCreateFromReadableStreamFunction, routeRSCServerRequest };