///
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;