import 'reflect-metadata';
import * as Router from 'koa-router';
import { A7Controller } from './controller';
export declare enum Method {
    GET = "get",
    POST = "post",
    PUT = "put",
    DELETE = "delete"
}
export declare function injectHandler(handler: string): (ctx: any, next: any) => Promise<void>;
/**
 * Metadata injected to the A7Controller class.
 */
export declare class A7ControllerMetadata {
    private className;
    /** Global middlewares applied to all the handlers. */
    private middlewares;
    /** Subsidiaries under the current controller. */
    private subsidiaries;
    /** Koa router options. */
    private routerOptions;
    constructor(className: string, 
    /** Global middlewares applied to all the handlers. */
    middlewares?: Router.IMiddleware[], 
    /** Subsidiaries under the current controller. */
    subsidiaries?: A7ControllerSubsidiary[], 
    /** Koa router options. */
    routerOptions?: Router.IRouterOptions);
    static getMetadata(cls: any): A7ControllerMetadata;
    koaRouter(controller: A7Controller): Router;
    extendOptions(options: Router.IRouterOptions): this;
    defineMetadata(cls: any): this;
    pushMiddlewaresInFront(middlewares: Router.IMiddleware[]): this;
    clone(): A7ControllerMetadata;
    getSubsidiaryByName(name: string): A7ControllerSubsidiary;
    getOrCreateSubsidiary(name: string, path?: string): A7ControllerSubsidiary;
}
export declare enum A7ControllerSubsidiaryType {
    HANDLER = "HANDLER",
    SUB_CONTROLLER = "SUB_CONTROLLER"
}
export declare class A7ControllerSubsidiary {
    name: string;
    type?: A7ControllerSubsidiaryType;
    path?: string;
    middlewares: Router.IMiddleware[];
    method?: Method;
    cls?: typeof A7Controller;
    constructor(name: string);
    get composedMiddleware(): Router.IMiddleware;
    pushMiddlewaresInFront(middlewares: Router.IMiddleware[]): this;
    pushMiddlewaresBack(middlewares: Router.IMiddleware[]): this;
}
export declare const METADATA_KEY = "ark7:router:metadata";
