dinoloop-es8
Version:
A lightweight REST API Library for building scalable Node.js server-side applications powered by Typescript
121 lines • 7.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
// tslint:disable-next-line:no-implicit-dependencies no-require-imports no-var-requires
require('source-map-support').install();
const utility_1 = require("../modules/utility");
const constants_1 = require("../modules/constants");
const middlewares_1 = require("../modules/builtin/middlewares");
const core_1 = require("../modules/core");
/**
* Creates dino instance
*/
class Dino {
/**
* app - ExpressApp
* , baseUri - application mounted path
*/
constructor(app, baseUri) {
this.isBinded = false;
this.appContainer = core_1.AppContainer.create(app);
this.appContainer.baseUri = baseUri;
this.appContainer.routeNotFoundMiddleware = middlewares_1.RouteNotFoundMiddleware;
}
/**
* Register API controller
*/
registerController(controller) {
this.appContainer.controllers.push(controller);
}
/**
* Register RequestStart middleware
*/
requestStart(middleware) {
this.appContainer.startMiddleware.push(middleware);
}
/**
* Register RequestEnd middleware
*/
requestEnd(middleware) {
this.appContainer.endMiddleware.push(middleware);
}
/**
* Register ServerError middleware
*/
serverError(middleware) {
this.appContainer.errorMiddleware.push(middleware);
}
/**
* Register ApplicationStart middleware
*/
applicationStart(middleware) {
this.appContainer.appStartMiddleware.push(middleware);
}
// Unlike others, We support only one application error controller
/**
* Register ApplicationError controller
*/
registerApplicationError(type) {
this.appContainer.errorController = type;
}
/**
* Register express Router handler
*/
useRouter(cb) {
this.appContainer.useRouter = cb;
}
// Why this property required?
// express fires the middlewares based on the mounted path, even though
// the end route (controller route) is not matched.
// To fix this, dino introduces RouteNotFoundMiddleware just to make sure,
// middlewares are fired only when valid route is found at controller level.
// However, on triggering this method RouteNotFoundMiddleware is disabled.
// Highly suggested not to invoke this unless you have a reason to.
/**
* RouteNotFoundMiddleware is unregistered
*/
disableRouteNotFoundException() {
this.appContainer.routeNotFoundMiddleware = undefined;
}
// This property enables orchestration of task/user contextual data for the entire request.
// It guarantees to retain task/user context data across all services/middlewares for entire request.
// Note: Inject IUserPrincipal in constructor dependencies and it maintains data for the entire request.
/**
* Reserved for future use
*/
enableUserIdentity() {
this.appContainer.enableTaskContext = true;
}
// This method lets us choose between different di containers,
// We can use angular di or inversify which are popular di containers for typescript.
// the consumer has to pass di container and resolver callback to resolve dependency from container.
/**
* Configures Dino to use DIFramework
*/
dependencyResolver(injector, cb) {
this.appContainer.diContainer = injector;
this.appContainer.diResolveCallback = cb;
}
// Once the dino instance is bounded, user is not allowed to invoke .bind() again
// since container is already created and bound to express instance
/**
* Binds the dino instance to express app
* @Throws Error(Errors.routerNotRegistered)
* @Throws Error(Errors.dinoAlreadyBinded)
* @Throws Error(Errors.baseUriInvalid)
*/
bind() {
if (this.isBinded) {
throw new Error(constants_1.Errors.dinoAlreadyBinded);
}
if (utility_1.DataUtility.isUndefinedOrNull(this.appContainer.baseUri)) {
throw new Error(constants_1.Errors.baseUriInvalid);
}
if (utility_1.DataUtility.isUndefinedOrNull(this.appContainer.useRouter)) {
throw new Error(constants_1.Errors.routerNotRegistered);
}
this.isBinded = true;
this.appContainer.build();
}
}
exports.Dino = Dino;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGluby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvZGluby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHVGQUF1RjtBQUN2RixPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUV4QyxnREFBaUQ7QUFDakQsb0RBQThDO0FBQzlDLGdFQUF5RTtBQUN6RSwwQ0FBK0M7QUFFL0M7O0dBRUc7QUFDSDtJQUlJOzs7T0FHRztJQUNILFlBQVksR0FBUSxFQUFFLE9BQWU7UUFON0IsYUFBUSxHQUFHLEtBQUssQ0FBQztRQU9yQixJQUFJLENBQUMsWUFBWSxHQUFHLG1CQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUNwQyxJQUFJLENBQUMsWUFBWSxDQUFDLHVCQUF1QixHQUFHLHFDQUF1QixDQUFDO0lBQ3hFLENBQUM7SUFFRDs7T0FFRztJQUNILGtCQUFrQixDQUFJLFVBQXVDO1FBQ3pELElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZLENBQUksVUFBdUM7UUFDbkQsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7T0FFRztJQUNILFVBQVUsQ0FBSSxVQUF1QztRQUNqRCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVyxDQUFJLFVBQXVDO1FBQ2xELElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0IsQ0FBSSxVQUF1QztRQUN2RCxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsa0VBQWtFO0lBQ2xFOztPQUVHO0lBQ0gsd0JBQXdCLENBQUksSUFBaUM7UUFDekQsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO0lBQzdDLENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVMsQ0FBQyxFQUFhO1FBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsOEJBQThCO0lBQzlCLHVFQUF1RTtJQUN2RSxtREFBbUQ7SUFDbkQsMEVBQTBFO0lBQzFFLDRFQUE0RTtJQUM1RSwwRUFBMEU7SUFDMUUsbUVBQW1FO0lBQ25FOztPQUVHO0lBQ0gsNkJBQTZCO1FBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsdUJBQXVCLEdBQUcsU0FBUyxDQUFDO0lBQzFELENBQUM7SUFFRCwyRkFBMkY7SUFDM0YscUdBQXFHO0lBQ3JHLHdHQUF3RztJQUN4Rzs7T0FFRztJQUNILGtCQUFrQjtRQUNkLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0lBQy9DLENBQUM7SUFFRCw4REFBOEQ7SUFDOUQscUZBQXFGO0lBQ3JGLG9HQUFvRztJQUNwRzs7T0FFRztJQUNILGtCQUFrQixDQUFJLFFBQVcsRUFDN0IsRUFBbUM7UUFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFRCxpRkFBaUY7SUFDakYsbUVBQW1FO0lBQ25FOzs7OztPQUtHO0lBQ0gsSUFBSTtRQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsSUFBSSxxQkFBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDMUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQzFDO1FBQ0QsSUFBSSxxQkFBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDNUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7U0FDL0M7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzlCLENBQUM7Q0FDSjtBQTFIRCxvQkEwSEMifQ==