UNPKG

@gabliam/web-core

Version:
95 lines (94 loc) 4.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.WebPluginBase = void 0; const tslib_1 = require("tslib"); const core_1 = require("@gabliam/core"); const constants_1 = require("./constants"); const metadatas_1 = require("./metadatas"); const utils_1 = require("./utils"); const web_configuration_1 = require("./web-configuration"); /** * Build Webconfig before controller * * @param {Container} container * @param {Registry} registry */ const buildWebConfig = (container, registry) => { const middlewareConfig = container.get(web_configuration_1.WebConfiguration); const app = container.get(constants_1.APP); middlewareConfig.webConfigs .sort((a, b) => a.order - b.order) .forEach(({ instance }) => instance(app, container)); }; /** * Build Webconfig after controller * * @param {Container} container * @param {Registry} registry */ const buildWebConfigAfterCtrl = (container, registry) => { const middlewareConfig = container.get(web_configuration_1.WebConfiguration); const app = container.get(constants_1.APP); middlewareConfig.WebConfigAfterCtrls.sort((a, b) => a.order - b.order).forEach(({ instance }) => instance(app, container)); }; /** * Base class for web plugin. */ let WebPluginBase = class WebPluginBase { constructor(config) { this.webConfiguration = new web_configuration_1.WebConfiguration(config); } /** * binding phase * * @param {Container} container - The container. * @param {Registry} registry - The registry. */ async bind(container, registry) { const webConfiguration = this.webConfiguration; container.bind(web_configuration_1.WebConfiguration).toConstantValue(webConfiguration); await (0, core_1.toPromise)(this.bindApp(container, registry, webConfiguration)); } /** * Management of @WebConfig and @WebConfigAfterControllers decorator in config class * * @param {Container} container - The container * @param {Registry} registry - The registry * @param {any} confInstance - The current instance of confi class */ config(container, registry, confInstance) { const webConfig = container.get(web_configuration_1.WebConfiguration); const webConfigList = core_1.reflection.propMetadataOfDecorator(confInstance.constructor, metadatas_1.WebConfig); for (const [key, webConfigs] of Object.entries(webConfigList)) { const [{ order }] = webConfigs.slice(-1); webConfig.addwebConfig({ order, instance: confInstance[key].bind(confInstance[key]), }); } const webConfigAfterCtlsList = core_1.reflection.propMetadataOfDecorator(confInstance.constructor, metadatas_1.WebConfigAfterControllers); for (const [key, webConfigs] of Object.entries(webConfigAfterCtlsList)) { const [{ order }] = webConfigs.slice(-1); webConfig.addWebConfigAfterCtrl({ order, instance: confInstance[key].bind(confInstance[key]), }); } } async start(container, registry) { buildWebConfig(container, registry); await (0, core_1.toPromise)(this.buildControllers((0, utils_1.extractControllerMetadata)(container, registry), container)); buildWebConfigAfterCtrl(container, registry); const restConfig = container.get(constants_1.WEB_PLUGIN_CONFIG); const webConfiguration = container.get(web_configuration_1.WebConfiguration); const serverStarter = webConfiguration.serverStarter; const listenerCreator = container.get(constants_1.REQUEST_LISTENER_CREATOR); const server = await (0, core_1.toPromise)(serverStarter.start(restConfig, webConfiguration, listenerCreator)); container.bind(constants_1.SERVER).toConstantValue(server); } }; WebPluginBase = tslib_1.__decorate([ (0, core_1.Scan)(), tslib_1.__metadata("design:paramtypes", [Object]) ], WebPluginBase); exports.WebPluginBase = WebPluginBase;