import { Type } from '@neoskop/annotation-factory'; import { Injector, Provider } from '@neoskop/injector'; import { ErrorRequestHandler, RequestHandler, Router } from 'express'; import { AbstractController, AbstractMethod, ApplicableAnnotation } from '../metadata/controller'; import { Use } from '../metadata/middleware'; import { AbstractParam } from '../metadata/params'; import { NemRootZone } from '../zone'; import { ParamFactory } from './param'; declare module "express" { interface Request { injector?: Injector; } } export interface MethodAnnotationMap extends Map, any> { get(key: typeof AbstractMethod): AbstractMethod[]; get(key: typeof ApplicableAnnotation): ApplicableAnnotation[]; get(key: typeof Use): Use[]; } export interface IControllerContext { /** * The controller type class */ controllerType: Type; /** * The controller metadata */ metadata: AbstractController; /** * The controller injector */ injector: Injector; /** * The controller instance */ instance: T; /** * The controller methods and annotations */ methods: Map; /** * The express router instance */ router: Router; } export declare class ControllerRouterFactory { protected injector: Injector; protected zone: NemRootZone; protected paramFactory: ParamFactory; constructor(injector: Injector, zone: NemRootZone, paramFactory: ParamFactory); createRouterFromController(controllerType: Type, { providers }?: { providers?: Provider[]; }): Router; protected initContext(controllerType: Type, providers: Provider[]): IControllerContext; protected assertControllerAnnotation(controllerType: Type): AbstractController; protected createMethodAnnotationMap(controllerType: Type): Map; protected getParamsForMethod(controllerType: Type, method: string): AbstractParam[]; protected createHandler(ctx: IControllerContext, method: string, params: AbstractParam[], annotations: MethodAnnotationMap): (ErrorRequestHandler | RequestHandler)[]; }