vite-plugin-react-server
Version:
Vite plugin for React Server Components (RSC)
36 lines (32 loc) • 1.26 kB
text/typescript
import type { CreateFromNodeStreamFn } from "./createFromNodeStream.types.js";
// note: static.node is used here because we need to use the unstable_prerenderToNodeStream function
import { React, ReactDOMServer } from "../vendor/vendor.static.js";
import { DEFAULT_CONFIG } from "../config/defaults.js";
/**
* Server version of createNodeStream.
*
* Strategy: In server environment, we convert React elements to RSC streams
* using ReactDOMServer.unstable_prerenderToNodeStream.
*/
export const createFromNodeStream: CreateFromNodeStreamFn<"server"> =
function _createFromNodeStreamServer(options) {
const { model, moduleBasePath = DEFAULT_CONFIG.MODULE_BASE_PATH } = options;
if (!model) {
throw new Error(
"[createFromNodeStream.server] model is required for server version"
);
}
return {
type: "server" as const,
children: React.createElement(() =>
React.use(
// Stable React exposes `prerenderToNodeStream`; the experimental
// channel still uses the `unstable_` name. Support both.
(
ReactDOMServer.prerenderToNodeStream ??
ReactDOMServer.unstable_prerenderToNodeStream
)(model, moduleBasePath)
)
),
};
};