28 lines
1.3 KiB
JavaScript
28 lines
1.3 KiB
JavaScript
import React, { use } from "react";
|
|
import { useFlightResponse } from "./use-flight-response";
|
|
/**
|
|
* Create a component that renders the Flight stream.
|
|
* This is only used for renderToHTML, the Flight response does not need additional wrappers.
|
|
*/ export function createServerComponentRenderer(ComponentToRender, ComponentMod, { transformStream, clientReferenceManifest, serverContexts, rscChunks }, serverComponentsErrorHandler, nonce) {
|
|
let RSCStream;
|
|
const createRSCStream = (props)=>{
|
|
if (!RSCStream) {
|
|
RSCStream = ComponentMod.renderToReadableStream(/*#__PURE__*/ React.createElement(ComponentToRender, props), clientReferenceManifest.clientModules, {
|
|
context: serverContexts,
|
|
onError: serverComponentsErrorHandler
|
|
});
|
|
}
|
|
return RSCStream;
|
|
};
|
|
const flightResponseRef = {
|
|
current: null
|
|
};
|
|
const writable = transformStream.writable;
|
|
return function ServerComponentWrapper(props) {
|
|
const reqStream = createRSCStream(props);
|
|
const response = useFlightResponse(writable, reqStream, clientReferenceManifest, rscChunks, flightResponseRef, nonce);
|
|
return use(response);
|
|
};
|
|
}
|
|
|
|
//# sourceMappingURL=create-server-components-renderer.js.map
|