@zerooneit/expressive-tea
Version:
A REST API over Express and Typescript
49 lines (48 loc) • 1.9 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.Module = void 0;
const express_1 = require("express");
const lodash_1 = require("lodash");
const DependencyInjection_1 = require("../services/DependencyInjection");
/**
* @typedef {Object} ExpressiveTeaModuleProps
* @property {Object[]} controllers Controllers Assigned to Module
* @property {Object[]} providers Dependency Injection Providers
* @property {string} mountpoint Endpoint part which Module it will use as root.
*/
/**
* @module Decorators/Module
*/
/**
* Module Decorator is a Class Decorator which is help to register a Module into Expressive Tea. A module is a
* placeholder over a mountpoint. We can considerate a module like a container which provide isolation and modularity
* for our project. This module can be mounted in different applications and will move all the controller routes too.
* @decorator {ClassDecorator} Module - Module Class Register Decorator
* @param {ExpressiveTeaModuleProps} options
* @summary Module Decorator
* @example
* {REPLACE-AT}Module({
* controllers: [],
* providers: [],
* mountpoint: '/'
* })
* class Example {}
*/
function Module(options) {
return (Module) => {
return class extends Module {
constructor(...args) {
super(...args);
this.router = (0, express_1.Router)();
this.settings = options;
(0, lodash_1.each)(this.settings.providers, P => DependencyInjection_1.default.setProvider(P));
this.controllers = (0, lodash_1.map)(this.settings.controllers, C => new C());
}
__register(server) {
(0, lodash_1.each)(this.controllers, c => c.__mount(this.router));
server.use(this.settings.mountpoint, this.router);
}
};
};
}
exports.Module = Module;
;