rwsdk
Version:
Build fast, server-driven webapps on Cloudflare with SSR, RSC, and realtime
32 lines (31 loc) • 1.21 kB
JavaScript
import { renderToReadableStream } from "react-dom/server.edge";
export const renderHtmlStream = async ({ node, identifierPrefix, requestInfo, onError, }) => {
return await renderToReadableStream(node, {
nonce: requestInfo.rw.nonce,
identifierPrefix,
onError(error, { componentStack }) {
try {
if (!error) {
error = new Error(`A falsy value was thrown during rendering: ${String(error)}.`);
}
const message = error
? (error.stack ?? error.message ?? error)
: error;
const wrappedMessage = `${message}\n\nComponent stack:${componentStack}`;
if (error instanceof Error) {
const wrappedError = new Error(wrappedMessage);
wrappedError.stack = error.stack;
error = wrappedError;
}
else {
error = new Error(wrappedMessage);
error.stack = componentStack;
}
onError(error);
}
catch {
onError(error);
}
},
});
};