///
import * as http from 'http';
import Layer from './layer';
import { IRequest, IResponse, ILayer, ContextResolver, Middleware, IController } from './types';
export default class Server implements ILayer, IResponse, TContext> {
private readonly _router;
private readonly _currentContext;
private readonly _defaultLayer;
private readonly _server;
constructor(context?: TContext);
listen(port: number): Promise;
context(resolver: ContextResolver): Layer, IResponse, TNewContext>;
middleware = IRequest, MResponse extends IResponse = IResponse>(middleware: Middleware, IResponse, MRequest, MResponse>): Layer;
route, LResponse extends IResponse>(template: string, method?: 'GET' | 'POST' | 'PATCH' | 'PUT' | 'DELETE'): IController;
get server(): http.Server;
close(): Promise;
}