///
///
import { AsyncLocalStorage } from 'node:async_hooks';
import { Server } from 'node:http';
import { IHttpContext } from './context.js';
import { HttpRouter } from './index.js';
import { IViewEngine } from './view.js';
export declare class HttpApp {
protected opts: IHttpAppOpts;
protected asyncLocalStorage?: AsyncLocalStorage;
protected middlewares: HttpAppMiddleware[];
protected composedMiddleware: any;
protected _router: HttpRouter;
protected viewProvider: IViewEngine | null;
protected correlationIdCount: number;
protected correlationIdGenerator: HttpCorrelationIdGenerator;
protected errorListeners: never[];
constructor(opts: IHttpAppOpts);
getAsyncLocalStorage(): AsyncLocalStorage;
/**
* application middleware
* @param fn
*/
use(fn: HttpAppMiddleware): void;
/**
* set view engine
* @param provider
*/
viewEngine(provider: IViewEngine): void;
getRouter(): HttpRouter;
router(router: HttpRouter): void;
router(prefix: string, router: HttpRouter): void;
correlationIdProvider(provider: HttpCorrelationIdGenerator): void;
handler(): (ctx: IHttpContext, next: any) => Promise;
listen(cb?: Function): Server;
port(): string;
host(): string;
address(): string;
}
export interface IHttpAppOptUse {
handler(fn: any): void;
use(...args: any): any;
listen(...args: any): Server;
}
export interface IHttpAppOptConf {
get(key: any): T | null;
var(key: any): string | undefined;
set(key: any, value: T): T;
}
export interface IHttpAppOpts {
use: IHttpAppOptUse;
conf: IHttpAppOptConf;
asyncLocalStorage?: boolean | AsyncLocalStorage;
host?: string;
port?: number;
defaultErrorMessage?: string;
/**
* set true, when you want to handle exception with framework instead of http app
*/
dontHandleException?: boolean;
}
export interface IHttpMiddleware {
handle(ctx: IHttpContext, next: any): Promise;
}
export type HttpMiddlewareCallback = (ctx: IHttpContext, next: any) => Promise;
export type HttpAppMiddleware = HttpMiddlewareCallback | IHttpMiddleware;
export type HttpCorrelationIdGenerator = () => {
toString(): string;
};