UNPKG

@zerooneit/expressive-tea

Version:
49 lines (48 loc) 1.9 kB
"use strict"; 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;