import { RouterOptions } from 'express';
import { Middleware } from './middleware';
/**
 * All possible parameter decorator types
 *
 * @export
 * @enum {number}
 */
export declare enum ParameterType {
    REQUEST = 0,
    RESPONSE = 1,
    PARAMS = 2,
    QUERY = 3,
    BODY = 4,
    HEADERS = 5,
    COOKIES = 6,
    NEXT = 7
}
/**
 * Cached(meta) parameter configuration
 *
 * @export
 * @interface ParameterConfiguration
 */
export interface ParameterConfiguration {
    index: number;
    type: ParameterType;
    name?: string;
    data?: any;
}
/**
 * Cached(meta) route configuration
 *
 * @export
 * @interface Route
 */
export interface Route {
    method: string;
    url: string;
    middleware: Middleware[];
}
/**
 * Method metadata object
 */
export interface MethodMeta {
    routes: Route[];
    status?: number;
}
/**
 * Express decorators controller metadata
 *
 * @export
 * @interface ExpressMeta
 */
export interface ExpressMeta {
    url: string;
    routerOptions?: RouterOptions;
    routes: {
        [instanceMethodName: string]: MethodMeta;
    };
    middleware: Middleware[];
    params: {
        [key: string]: ParameterConfiguration[];
    };
}
/**
 * Express decorators controller
 *
 * @export
 * @interface ExpressMeta
 */
export interface ExpressClass {
    __express_meta__?: ExpressMeta;
}
/**
 * Get or initiate metadata on a target
 *
 * @param {ExpressClass} target
 * @returns {ExpressMeta}
 */
export declare function getMeta(target: ExpressClass): ExpressMeta;
