///
import { Middleware, MiddlewareFn, FlowHandler } from "./flow";
import * as http from "http";
import Promise from "yaku";
export interface RoutesListen {
(): Promise;
(port: number, hostname?: string, backlog?: number): Promise;
(port: number, hostname?: string): Promise;
(path: string): Promise;
(handle: any): Promise;
}
export interface RoutesClose {
(): Promise;
}
export declare class Routes extends Array {
constructor();
server: http.Server;
address: () => {
port: number;
family: string;
address: string;
};
listen: RoutesListen;
close: RoutesClose;
}
export declare type Middleware = Middleware;
export interface MiddlewareFn extends MiddlewareFn {
}
export interface Flow {
(): Routes;
(...middlewares: Middleware[]): FlowHandler;
}
/**
* Create an array instance with some handy server helper methods.
* @param FlowArray middlewares Optional. If not provided, the return type will be
* a FlowArray, else a middleware Function.
* @return FlowArray | Function
* @example
* ```js
* import flow from "noflow"
* let app = flow();
* app.push("OK");
* app.listen(8123).then(() => console.log("started"));
* ```
*/
declare let flow: Flow;
export default flow;