UNPKG

rasengan

Version:

The modern React Framework

38 lines (37 loc) 1.73 kB
import { jsx as _jsx } from "react/jsx-runtime"; import { loadModuleSSR } from '../../core/config/utils/load-modules.js'; import { TemplateLayout } from './index.js'; import { join, posix } from 'path/posix'; import { renderToStream, renderToString } from '../../server/node/rendering.js'; /** * Render the app to a stream * @param StaticRouterComponent * @param helmetContext * @param res * @returns */ export const render = async (StaticRouterComponent, res, options, stream = true) => { const { metadata, assets, buildOptions } = options; // Root path const rootPath = process.cwd(); let App; let Template; // If build options are provided, that means we are in production mode if (buildOptions) { App = (await loadModuleSSR(posix.join(buildOptions.buildDirectory, buildOptions.serverPathDirectory, 'main.js'))).default; Template = (await loadModuleSSR(join(buildOptions.buildDirectory, buildOptions.serverPathDirectory, 'template.js'))).default; } else { // Import Main App Component App = (await loadModuleSSR(`${rootPath}/src/main`)).default; // Import Template Template = (await loadModuleSSR(`${rootPath}/src/template`)).default; } if (stream) { await renderToStream(_jsx(TemplateLayout, { StaticRouterComponent: StaticRouterComponent, metadata: metadata, assets: assets, App: App, Template: Template }), res, { statusCode: options.statusCode, responseHeaders: options.responseHeaders }); } else { const html = renderToString(_jsx(TemplateLayout, { StaticRouterComponent: StaticRouterComponent, metadata: metadata, assets: assets, App: App, Template: Template })); return html; } };