/**
 * The Strategy interface declares operations common to all supported versions
 * of some algorithm.
 *
 * The Server uses this interface to call the algorithm defined by Concrete
 * Strategies.
 */
declare interface Strategy {
    init: any[];
    load: any[];
    prefix: any;
    name: any;
    app: any;
    compose: any;
    server: any;
    serverConfig: any;
    config: any;
    proxy?(): any;
}
declare class Plugable implements Strategy {
    init: any[];
    load: any[];
    name: any;
    app: any;
    server: any;
    serverConfig: any;
    prefix: any;
    compose: any;
    config: any;
    _prefix: any;
    constructor(cfg?: any);
    /**
     * move middleware to load stage, use template pattern & compose
     */
    getMiddleware(): any;
    pre(): (ctx: any, next: any) => Promise<void>;
    post(): (ctx: any, next: any) => Promise<void>;
    process(): (ctx: any, next: any) => Promise<void>;
    use(x: any): void;
    addInit(i: any): void;
    addLoad(i: any): void;
}

export { Plugable, type Strategy };
