in packages/runtime/src/renderDocument.tsx [31:100]
export function renderDocument(options: RenderDocumentOptions): Response {
const {
matches,
renderOptions,
routePath = '',
downgrade,
routes,
documentData,
}: RenderDocumentOptions = options;
const {
assetsManifest,
app,
Document,
basename,
routesConfig = {},
serverData,
} = renderOptions;
const appData = null;
const appConfig = getAppConfig(app);
const loaderData = {};
matches.forEach(async (match) => {
const { id } = match.route;
const pageConfig = routesConfig[id];
loaderData[id] = {
pageConfig: pageConfig ? pageConfig({}) : {},
};
});
const appContext: AppContext = {
assetsManifest,
appConfig,
appData,
loaderData,
matches,
routes,
documentOnly: true,
renderMode: 'CSR',
routePath,
basename,
downgrade,
serverData,
documentData,
};
const documentContext = {
main: null,
};
const htmlStr = ReactDOMServer.renderToString(
<AppContextProvider value={appContext}>
<DocumentContextProvider value={documentContext}>
{
Document && <Document pagePath={routePath} />
}
</DocumentContextProvider>
</AppContextProvider>,
);
return {
value: `<!DOCTYPE html>${htmlStr}`,
headers: {
'Content-Type': 'text/html; charset=utf-8',
},
statusCode: 200,
};
}