dinoloop-es8
Version:
A lightweight REST API Library for building scalable Node.js server-side applications powered by Typescript
159 lines • 14.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const utility_1 = require("../utility");
const providers_1 = require("../providers");
// Each controller gets an instance of router
// Register middlewares on the router level
// so that the middlewares are available for all routes at router level
class DinoRouter {
constructor(config) {
this.diContainer = config.diContainer;
// Gets the new instance of express.router
this.router = config.routerCb();
this.enableTaskContext = config.enableTaskContext;
}
// made public for unit test and not available on interface contract
resolve(middleware, dino) {
let o = this.diContainer.resolve(middleware);
return this.enableTaskContext ?
utility_1.ObjectUtility.replaceObjectReferences(o, dino.context, providers_1.IUserIdentity) : o;
}
// made public for unit test and not available on interface contract
registerMiddleware(middleware) {
let provider = utility_1.DinoParser.parseMiddlewareProvider(middleware);
if (utility_1.DinoUtility.isSyncMiddleWare(provider.useClass)) {
this.router.use((req, res, next) => {
let mware = this.resolve(provider.useClass, res.locals.dino);
mware.invoke(req, res, next, provider.data);
});
}
else if (utility_1.DinoUtility.isAsyncMiddleWare(provider.useClass)) {
this.router.use(async (req, res, next) => {
let mware = this.resolve(provider.useClass, res.locals.dino);
try {
await mware.invoke(req, res, next, provider.data);
}
catch (err) {
next(err);
}
});
}
}
// made public for unit test and not available on interface contract
registerBeginActionFilter(filter) {
let provider = utility_1.DinoParser.parseMiddlewareProvider(filter);
if (utility_1.DinoUtility.isSyncActionFilter(provider.useClass)) {
this.router.use((req, res, next) => {
let mware = this.resolve(provider.useClass, res.locals.dino);
mware.beforeExecution(req, res, next, provider.data);
});
}
else if (utility_1.DinoUtility.isAsyncActionFilter(provider.useClass)) {
this.router.use(async (req, res, next) => {
let mware = this.resolve(provider.useClass, res.locals.dino);
try {
await mware.beforeExecution(req, res, next, provider.data);
}
catch (err) {
next(err);
}
});
}
}
// made public for unit test and not available on interface contract
registerAfterActionFilter(filter) {
let provider = utility_1.DinoParser.parseMiddlewareProvider(filter);
if (utility_1.DinoUtility.isSyncActionFilter(provider.useClass)) {
this.router.use((req, res, next) => {
let mware = this.resolve(provider.useClass, res.locals.dino);
mware.afterExecution(req, res, next, res.locals.dino.result, provider.data);
});
}
else if (utility_1.DinoUtility.isAsyncActionFilter(provider.useClass)) {
this.router.use(async (req, res, next) => {
let mware = this.resolve(provider.useClass, res.locals.dino);
try {
await mware.afterExecution(req, res, next, res.locals.dino.result, provider.data);
}
catch (err) {
next(err);
}
});
}
}
// made public for unit test and not available on interface contract
registerResultFilter(filter) {
let provider = utility_1.DinoParser.parseMiddlewareProvider(filter);
if (utility_1.DinoUtility.isSyncResultFilter(provider.useClass)) {
this.router.use((req, res, next) => {
let mware = this.resolve(provider.useClass, res.locals.dino);
mware.invoke(req, res, next, res.locals.dino.result, provider.data);
});
}
else if (utility_1.DinoUtility.isAsyncResultFilter(provider.useClass)) {
this.router.use(async (req, res, next) => {
let mware = this.resolve(provider.useClass, res.locals.dino);
try {
await mware.invoke(req, res, next, res.locals.dino.result, provider.data);
}
catch (err) {
next(err);
}
});
}
}
// made public for unit test and not available on interface contract
registerExceptionFilter(app, uri, middleware) {
let provider = utility_1.DinoParser.parseMiddlewareProvider(middleware);
if (utility_1.DinoUtility.isSyncExceptionFilter(provider.useClass)) {
app.use(uri, (err, req, res, next) => {
let mware = this.resolve(provider.useClass, res.locals.dino);
mware.invoke(err, req, res, next);
});
}
else if (utility_1.DinoUtility.isAsyncExceptionFilter(provider.useClass)) {
app.use(uri, async (err, req, res, next) => {
let mware = this.resolve(provider.useClass, res.locals.dino);
try {
await mware.invoke(err, req, res, next);
}
catch (err) {
next(err);
}
});
}
}
expressRouter() {
return this.router;
}
registerExceptionFilters(app, uri, filters) {
for (const filter of filters) {
this.registerExceptionFilter(app, uri, filter);
}
}
registerMiddlewares(middlewares) {
for (const middleware of middlewares) {
this.registerMiddleware(middleware);
}
}
registerBeginActionFilters(actionFilters) {
for (const filter of actionFilters) {
this.registerBeginActionFilter(filter);
}
}
registerAfterActionFilters(actionFilters) {
for (const filter of actionFilters) {
this.registerAfterActionFilter(filter);
}
}
registerResultFilters(resultFilters) {
for (const filter of resultFilters) {
this.registerResultFilter(filter);
}
}
static create(config) {
return new DinoRouter(config);
}
}
exports.DinoRouter = DinoRouter;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGluby5yb3V0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbW9kdWxlcy9yb3V0ZXIvZGluby5yb3V0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFPQSx3Q0FJb0I7QUFLcEIsNENBQTZDO0FBWTdDLDZDQUE2QztBQUM3QywyQ0FBMkM7QUFDM0MsdUVBQXVFO0FBQ3ZFO0lBS0ksWUFBWSxNQUFxQjtRQUM3QixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDdEMsMENBQTBDO1FBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUM7SUFDdEQsQ0FBQztJQUVELG9FQUFvRTtJQUNwRSxPQUFPLENBQUksVUFBb0IsRUFBRSxJQUFxQjtRQUNsRCxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBSSxVQUFVLENBQUMsQ0FBQztRQUVoRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQzNCLHVCQUFhLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUseUJBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVELG9FQUFvRTtJQUNwRSxrQkFBa0IsQ0FBQyxVQUErQjtRQUM5QyxJQUFJLFFBQVEsR0FBRyxvQkFBVSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTlELElBQUkscUJBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDakQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO2dCQUMvQixJQUFJLEtBQUssR0FBRyxJ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