MCPcopy Create free account
hub / github.com/ParallelTask/dinoloop / DinoRouter

Class DinoRouter

src/modules/router/dino.router.ts:32–208  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

30// Register middlewares on the router level
31// so that the middlewares are available for all routes at router level
32export class DinoRouter implements IDinoRouter {
33 private router: Router;
34 private diContainer: IDIContainer;
35 private enableTaskContext: boolean;
36
37 constructor(config: IRouterConfig) {
38 this.diContainer = config.diContainer;
39 // Gets the new instance of express.router
40 this.router = config.routerCb();
41 this.enableTaskContext = config.enableTaskContext;
42 }
43
44 // made public for unit test and not available on interface contract
45 resolve<T>(middleware: Function, dino: IDinoProperties): T {
46 let o = this.diContainer.resolve<T>(middleware);
47
48 return this.enableTaskContext ?
49 ObjectUtility.replaceObjectReferences(o, dino.context, IUserIdentity) : o;
50 }
51
52 // made public for unit test and not available on interface contract
53 registerMiddleware(middleware: IMiddlewareProvider): void {
54 let provider = DinoParser.parseMiddlewareProvider(middleware);
55
56 if (DinoUtility.isSyncMiddleWare(provider.useClass)) {
57 this.router.use((req, res, next) => {
58 let mware = this.resolve<Middleware>(
59 provider.useClass, res.locals.dino);
60 mware.invoke(req, res, next, provider.data);
61 });
62 } else if (DinoUtility.isAsyncMiddleWare(provider.useClass)) {
63 this.router.use(async (req, res, next) => {
64 let mware = this.resolve<MiddlewareAsync>(
65 provider.useClass, res.locals.dino);
66 try {
67 await mware.invoke(req, res, next, provider.data);
68 } catch (err) {
69 next(err);
70 }
71 });
72 }
73 }
74
75 // made public for unit test and not available on interface contract
76 registerBeginActionFilter(filter: IMiddlewareProvider): void {
77 let provider = DinoParser.parseMiddlewareProvider(filter);
78
79 if (DinoUtility.isSyncActionFilter(provider.useClass)) {
80 this.router.use((req, res, next) => {
81 let mware = this.resolve<ActionFilter>(
82 provider.useClass, res.locals.dino);
83 mware.beforeExecution(req, res, next, provider.data);
84 });
85 } else if (DinoUtility.isAsyncActionFilter(provider.useClass)) {
86 this.router.use(async (req, res, next) => {
87 let mware = this.resolve<ActionFilterAsync>(
88 provider.useClass, res.locals.dino);
89 try {

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected