/// import { Assets } from 'assets-webpack-plugin'; import { Express, Request, RequestHandler } from 'express'; import { HelmetData } from 'react-helmet'; import { Logger } from 'typescript-log'; import { PromiseTracker } from '../../util/promise-tracker'; import { PageTags } from './'; import { PageTag } from './full-render'; export interface RenderContext { /** This holds the app state which needs to be kept between SSR * passes. It is essentially a state bag, it could include a redux store, * or any other state store which needs to persist between render passes */ ssrRequestProps: SSRRequestProps; promiseTracker: PromiseTracker; } export declare type RenderApp = (params: { log: Logger; context: RenderContext; req: Request; }) => JSX.Element; export interface RenderHtmlParams { head: HelmetData | undefined; renderResult: RenderResult; pageTags: PageTags; context: RenderContext; req: Request; } export declare type RenderHtml = (params: RenderHtmlParams) => string; export declare type CreatePageTags = (options: { buildAssets: Assets; helmetTags: string[]; stateTransfers: PageTag[]; renderContext: RenderContext; }) => PageTags; export interface ServerSideRenderMiddlewareOptions { app: Express & { log: Logger; }; ssrTimeoutMs: number; setupRequest: (req: Request, promiseTracker: PromiseTracker) => Promise; renderApp: RenderApp; renderHtml: RenderHtml; errorLocation: string; createPageTags?: CreatePageTags; pageNotFoundLocation: string; renderFn?: (element: React.ReactElement) => RenderResult; } export declare const createSsrMiddleware: (options: ServerSideRenderMiddlewareOptions) => RequestHandler;