react-on-rails-rsc
Version:
React Server Components support for react_on_rails Ruby gem
39 lines • 1.89 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildClientRenderer = void 0;
const client_node_1 = require("./react-server-dom-webpack/client.node");
const createSSRManifest = (clientManifest, serverManifest) => {
const { filePathToModuleMetadata: clientFilePathToModuleMetadata, moduleLoading: clientModuleLoading } = clientManifest;
const { filePathToModuleMetadata: serverFilePathToModuleMetadata } = serverManifest;
const moduleMap = {};
Object.entries(clientFilePathToModuleMetadata).forEach(([aboluteFileUrl, clientFileBundlingInfo]) => {
const serverModuleMetadata = serverFilePathToModuleMetadata[aboluteFileUrl];
if (!serverModuleMetadata) {
throw new Error(`Server module metadata not found for ${aboluteFileUrl}`);
}
const { id, chunks } = serverModuleMetadata;
moduleMap[clientFileBundlingInfo.id] = {
'*': {
id,
chunks,
name: '*',
},
};
});
return {
// The `moduleLoading` property is utilized by the React runtime to load JavaScript modules on the browser.
// It can accept options such as `prefix` and `crossOrigin` to specify the path and crossorigin attribute for the modules.
// In our case, we set it to the client module loading options as it contains the prefix and crossOrigin of the client bundle.
moduleLoading: clientModuleLoading,
moduleMap,
};
};
const buildClientRenderer = (clientManifest, serverManifest) => {
const ssrManifest = createSSRManifest(clientManifest, serverManifest);
return {
createFromNodeStream: (stream) => (0, client_node_1.createFromNodeStream)(stream, ssrManifest),
ssrManifest,
};
};
exports.buildClientRenderer = buildClientRenderer;
//# sourceMappingURL=client.node.js.map