rwsdk
Version:
Build fast, server-driven webapps on Cloudflare with SSR, RSC, and realtime
28 lines (27 loc) • 1.14 kB
JavaScript
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
import { renderToRscStream } from "./renderToRscStream";
import { transformRscToHtmlStream } from "./transformRscToHtmlStream";
import { requestInfo } from "../requestInfo/worker";
import { injectRSCPayload } from "rsc-html-stream/server";
export const IdentityDocument = ({ children }) => (_jsx(_Fragment, { children: children }));
export const renderToStream = async (element, { Document = IdentityDocument, injectRSCPayload: shouldInjectRSCPayload = false, onError = () => { }, } = {}) => {
let rscStream = renderToRscStream({
node: element,
actionResult: null,
onError,
});
if (shouldInjectRSCPayload) {
const [rscPayloadStream1, rscPayloadStream2] = rscStream.tee();
rscStream = rscPayloadStream1;
rscStream = rscStream.pipeThrough(injectRSCPayload(rscPayloadStream2, {
nonce: requestInfo.rw.nonce,
}));
}
const htmlStream = await transformRscToHtmlStream({
stream: rscStream,
Document,
requestInfo,
onError,
});
return htmlStream;
};