///
import { Server } from 'node:net';
import { CompressionOptions } from 'compression';
import { Express, Request } from 'express';
import { Response as ExpressResponse } from "express";
import { FC, PropsWithChildren } from 'react';
import { createStaticHandler } from 'react-router';
import { ServeStaticOptions } from 'serve-static';
import { Logger } from 'vite';
import { TRouteObject } from "../interfaces/route-object.js";
import { IRenderOptions, TRender } from "./render.js";
import ServerApi from "../services/server-api.js";
import ServerConfig from "../services/server-config.js";
interface IInitServerRequestOut> {
appProps?: T;
hasEarlyHints?: boolean;
shouldSkip?: boolean;
shouldCancel?: boolean;
}
interface IEntrypointOptions> {
onServerCreated?: (app: Express, serverApi: ServerApi) => Promise | void;
onServerStarted?: (app: Express, serverApi: ServerApi, server: Server) => Promise | void;
onRequest?: (req: Request, res: ExpressResponse) => Promise> | IInitServerRequestOut;
onRouterReady?: IRenderOptions['onRouterReady'];
onShellReady?: IRenderOptions['onShellReady'];
onShellError?: IRenderOptions['onShellError'];
onResponse?: IRenderOptions['onResponse'];
onError?: IRenderOptions['onError'];
getState?: IRenderOptions['getState'];
}
interface IPrepareRenderOut> {
render: TRender;
init: IEntryServerOptions['init'];
routes: TRouteObject[];
abortDelay?: number;
loggerProd?: Logger;
loggerDev?: Logger;
middlewares?: {
compression?: CompressionOptions | false;
expressStatic?: (ServeStaticOptions & {
basename?: string;
}) | false;
};
}
interface IAppServerProps> {
server: T;
}
type TApp = FC & IAppServerProps>>;
interface IEntryServerOptions> {
abortDelay?: number;
init?: (params: {
config: ServerConfig;
}) => IEntrypointOptions | Promise>;
loggerProd?: IPrepareRenderOut['loggerProd'];
loggerDev?: IPrepareRenderOut['loggerDev'];
middlewares?: IPrepareRenderOut['middlewares'];
routerOptions?: Parameters[1];
}
/**
* Render server side application
*/
declare function entry(App: TApp, routes: TRouteObject[], { init, routerOptions, ...rest }?: IEntryServerOptions): IPrepareRenderOut;
export { entry as default, IInitServerRequestOut, IEntrypointOptions, IPrepareRenderOut, IAppServerProps, TApp, IEntryServerOptions };