UNPKG

routing-controllers

Version:

Create structured, declarative and beautifully organized class-based controllers with heavy decorators usage for Express / Koa using TypeScript.

218 lines 9.05 kB
import { ExpressDriver } from './driver/express/ExpressDriver'; import { KoaDriver } from './driver/koa/KoaDriver'; import { MetadataArgsStorage } from './metadata-builder/MetadataArgsStorage'; import { RoutingControllers } from './RoutingControllers'; import { importClassesFromDirectories } from './util/importClassesFromDirectories'; // ------------------------------------------------------------------------- // Main exports // ------------------------------------------------------------------------- export * from './container'; export * from './decorator/All'; export * from './decorator/Authorized'; export * from './decorator/Body'; export * from './decorator/BodyParam'; export * from './decorator/ContentType'; export * from './decorator/Controller'; export * from './decorator/CookieParam'; export * from './decorator/CookieParams'; export * from './decorator/Ctx'; export * from './decorator/CurrentUser'; export * from './decorator/Delete'; export * from './decorator/Get'; export * from './decorator/Head'; export * from './decorator/Header'; export * from './decorator/HeaderParam'; export * from './decorator/HeaderParams'; export * from './decorator/HttpCode'; export * from './decorator/Interceptor'; export * from './decorator/JsonController'; export * from './decorator/Location'; export * from './decorator/Method'; export * from './decorator/Middleware'; export * from './decorator/OnNull'; export * from './decorator/OnUndefined'; export * from './decorator/Param'; export * from './decorator/Params'; export * from './decorator/Patch'; export * from './decorator/Post'; export * from './decorator/Put'; export * from './decorator/QueryParam'; export * from './decorator/QueryParams'; export * from './decorator/Redirect'; export * from './decorator/Render'; export * from './decorator/Req'; export * from './decorator/Res'; export * from './decorator/ResponseClassTransformOptions'; export * from './decorator/Session'; export * from './decorator/SessionParam'; export * from './decorator/State'; export * from './decorator/UploadedFile'; export * from './decorator/UploadedFiles'; export * from './decorator/UseAfter'; export * from './decorator/UseBefore'; export * from './decorator/UseInterceptor'; export * from './decorator-options/BodyOptions'; export * from './decorator-options/ParamOptions'; export * from './decorator-options/UploadOptions'; export * from './http-error/HttpError'; export * from './http-error/InternalServerError'; export * from './http-error/BadRequestError'; export * from './http-error/ForbiddenError'; export * from './http-error/NotAcceptableError'; export * from './http-error/MethodNotAllowedError'; export * from './http-error/NotFoundError'; export * from './http-error/UnauthorizedError'; export * from './http-error/UnprocessableEntityError'; export * from './driver/express/ExpressMiddlewareInterface'; export * from './driver/express/ExpressErrorMiddlewareInterface'; export * from './driver/koa/KoaMiddlewareInterface'; export * from './metadata-builder/MetadataArgsStorage'; export * from './metadata/ActionMetadata'; export * from './metadata/ControllerMetadata'; export * from './metadata/InterceptorMetadata'; export * from './metadata/MiddlewareMetadata'; export * from './metadata/ParamMetadata'; export * from './metadata/ResponseHandleMetadata'; export * from './metadata/UseMetadata'; export * from './RoutingControllersOptions'; export * from './CustomParameterDecorator'; export * from './RoleChecker'; export * from './Action'; export * from './InterceptorInterface'; export * from './CurrentUserChecker'; export * from './AuthorizationChecker'; export * from './driver/BaseDriver'; export * from './driver/express/ExpressDriver'; export * from './driver/koa/KoaDriver'; // ------------------------------------------------------------------------- // Main Functions // ------------------------------------------------------------------------- /** * Gets metadata args storage. * Metadata args storage follows the best practices and stores metadata in a global variable. */ export function getMetadataArgsStorage() { if (!global.routingControllersMetadataArgsStorage) global.routingControllersMetadataArgsStorage = new MetadataArgsStorage(); return global.routingControllersMetadataArgsStorage; } /** * Registers all loaded actions in your express application. */ export function useExpressServer(expressServer, options) { const driver = new ExpressDriver(expressServer); return createServer(driver, options); } /** * Registers all loaded actions in your express application. */ export function createExpressServer(options) { const driver = new ExpressDriver(); return createServer(driver, options); } /** * Registers all loaded actions in your koa application. */ export function useKoaServer(koaApp, options) { const driver = new KoaDriver(koaApp); return createServer(driver, options); } /** * Registers all loaded actions in your koa application. */ export function createKoaServer(options) { const driver = new KoaDriver(); return createServer(driver, options); } /** * Registers all loaded actions in your application using selected driver. */ export function createServer(driver, options) { createExecutor(driver, options); return driver.app; } /** * Registers all loaded actions in your express application. */ export function createExecutor(driver, options = {}) { // import all controllers and middlewares and error handlers (new way) let controllerClasses; if (options && options.controllers && options.controllers.length) { controllerClasses = options.controllers.filter(controller => controller instanceof Function); const controllerDirs = options.controllers.filter(controller => typeof controller === 'string'); controllerClasses.push(...importClassesFromDirectories(controllerDirs)); } let middlewareClasses; if (options && options.middlewares && options.middlewares.length) { middlewareClasses = options.middlewares.filter(controller => controller instanceof Function); const middlewareDirs = options.middlewares.filter(controller => typeof controller === 'string'); middlewareClasses.push(...importClassesFromDirectories(middlewareDirs)); } let interceptorClasses; if (options && options.interceptors && options.interceptors.length) { interceptorClasses = options.interceptors.filter(controller => controller instanceof Function); const interceptorDirs = options.interceptors.filter(controller => typeof controller === 'string'); interceptorClasses.push(...importClassesFromDirectories(interceptorDirs)); } if (options && options.development !== undefined) { driver.developmentMode = options.development; } else { driver.developmentMode = process.env.NODE_ENV !== 'production'; } if (options.defaultErrorHandler !== undefined) { driver.isDefaultErrorHandlingEnabled = options.defaultErrorHandler; } else { driver.isDefaultErrorHandlingEnabled = true; } if (options.classTransformer !== undefined) { driver.useClassTransformer = options.classTransformer; } else { driver.useClassTransformer = true; } if (options.validation !== undefined) { driver.enableValidation = !!options.validation; if (options.validation instanceof Object) driver.validationOptions = options.validation; } else { driver.enableValidation = true; } driver.classToPlainTransformOptions = options.classToPlainTransformOptions; driver.plainToClassTransformOptions = options.plainToClassTransformOptions; if (options.errorOverridingMap !== undefined) driver.errorOverridingMap = options.errorOverridingMap; if (options.routePrefix !== undefined) driver.routePrefix = options.routePrefix; if (options.currentUserChecker !== undefined) driver.currentUserChecker = options.currentUserChecker; if (options.authorizationChecker !== undefined) driver.authorizationChecker = options.authorizationChecker; driver.cors = options.cors; // next create a controller executor new RoutingControllers(driver, options) .initialize() .registerInterceptors(interceptorClasses) .registerMiddlewares('before', middlewareClasses) .registerControllers(controllerClasses) .registerMiddlewares('after', middlewareClasses); // todo: register only for loaded controllers? } /** * Registers custom parameter decorator used in the controller actions. */ export function createParamDecorator(options) { return function (object, method, index) { getMetadataArgsStorage().params.push({ type: 'custom-converter', object: object, method: method, index: index, parse: false, required: options.required, transform: options.value, }); }; } //# sourceMappingURL=index.js.map