import { Request, Response } from 'express'; import { renderToString } from 'react-dom/server'; import { ChunkExtractor } from '@loadable/server'; import { HttpStatusCode, isProduction } from '@cutting/util'; import { StaticRouter, StaticRouterContext } from 'react-router'; import { Routes } from '../routes'; import path from 'path'; import { Helmet } from 'react-helmet'; import { GATagManager } from '../components/ga-tagmanager'; const gaId = 'UA-146837410-1'; export interface RendererOptions { req: Request; res: Response; } const statsFile = path.resolve(process.cwd(), 'dist/loadable-stats.json'); export async function render({ req, res }: RendererOptions): Promise { const extractor = new ChunkExtractor({ entrypoints: ['client'], statsFile, }); const context: StaticRouterContext = {}; const helmet = Helmet.renderStatic(); const app = ( {helmet.meta.toComponent()} {helmet.link.toComponent()} {helmet.title.toComponent()} {extractor.getStyleElements()} {isProduction && }
{extractor.getScriptElements()} ); const appString = renderToString(extractor.collectChunks(app)); res.status(HttpStatusCode.Ok).send(` ${appString} `); }