/// <reference types="express" />
import 'reflect-metadata';
import { Request, Response, Application as ExpressApp } from 'express';
import { Injector } from '../core/injector';
import { RouterMetadata } from '../metadata/server/router';
import { Logger } from '../services/logger';
import { ErrorHandler } from '../services/error-handler';
import { RouterService } from '../services/router.service';
import './extend-req-res';
export declare type RouteInterceptorNextFunction = () => Promise<void>;
export declare type RouteInterceptor = (req: Request, res: Response, next: RouteInterceptorNextFunction) => Promise<void>;
export declare class RouterReflector {
    private injector;
    private logger;
    private errorHandler;
    private routerMeta;
    private _router;
    constructor(injector: Injector, logger: Logger, errorHandler: ErrorHandler, routerMeta: RouterMetadata, _router: RouterService);
    readonly router: RouterService;
    private controllersReflected;
    private routesReflected;
    reflectServerRoutes(app: ExpressApp): void;
    reflectRoutes(controllers: any[], parentControllers?: any[]): void;
    private controllers;
    reflectControllerRoutes(parentControllers: any[], controllerFn: any): void;
    private _interceptors;
    registerRouteInterceptor(interceptor: RouteInterceptor): void;
    private reflectRouteMeta(controllerProto);
    private addRoute(parentMeta, controller, routeFnName, controllerMeta, routeMeta);
    private getControllerName(controller);
    private getParentPolicyDescriptors(parentMeta);
    private flattenPolicies(descriptors);
    private flattenPolicies_recursive(descriptors, aggregate);
    private resolvePolicies(descriptors);
    private isPolicyCtor(desc);
    private isPolicyT(desc);
    unfinishedRoutes: number;
    requestIndex: number;
    private createFullRouterFn(policies, boundRoute, routeMethodName);
    private createPolicyResultsFn(policies, allResults);
}
