/// <reference types="koa-router" />
/// <reference types="koa" />
import 'reflect-metadata';
import * as Koa from 'koa';
import * as Router from 'koa-router';
import { Constructor } from './injection';
export declare const MIDDLEWARE = "MIDDLEWARE";
export declare const MIDDLEWARE_TARGET_APP = "app";
export declare const MIDDLEWARE_TARGET_ROUTER = "router";
/**
 * MiddlewareProvider class decorator will register the middlewares declared in
 * the provider to Koa and KoaRouter.
 */
export declare function MiddlewareProvider(options?: {
    tags?: string[];
    meta?: object;
}): (constructor: Constructor) => void;
export declare function AppMiddleware(options?: {
    later?: boolean;
}): (target: any, propertyName: string) => void;
export declare function RouterMiddleware(options?: {
    later?: boolean;
}): (target: any, propertyName: string) => void;
export interface MiddlewareMetadata {
    target: string;
    provider: string;
    name: string;
    later: boolean;
}
export interface Middleware extends MiddlewareMetadata {
    fn: Router.IMiddleware | Koa.Middleware;
}
export interface MiddlewareProvider {
    $getMiddlewares(): Middleware[];
}
