UNPKG

badman-core

Version:

badman-core is the layer what all the badman packages depended,or can be used as a tool kit.

173 lines • 6.98 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const process = __importStar(require("process")); const Logging_1 = __importDefault(require("../logging/Logging")); const BeanObject_1 = require("./BeanObject"); class Beans { static LoadBeans(...beans) { for (let bean of beans) { Beans.LoadBean(bean); } } static instance(beanObject) { //IOC beanObject.bean = Reflect.construct(beanObject.constructor, beanObject.args); Beans.logger.info(`${beanObject.beanName} Instantiation completed`); if (beanObject.initMethod) { beanObject.bean[beanObject.initMethod].apply(beanObject.bean); Beans.logger.info(`${beanObject.beanName}.${beanObject.initMethod}(initMethod) run completed`); } else if (beanObject.bean.afterInitialized) { beanObject.bean.afterInitialized(); Beans.logger.info(`${beanObject.beanName}.afterInitialized(Initializing) run completed,but maybe asynchronous`); } //DI if (beanObject.bean[beanObject.constructor.name]) { Beans.di(beanObject); } } static di(beanObject) { let dependOns = beanObject.bean[beanObject.constructor.name].apply(beanObject.bean); if (dependOns && dependOns.length >= 1) { for (let i = 0; i < dependOns.length; i++) { let beanName = dependOns[i]; let bean = Beans.Instance(beanName); if (bean) { //todo maybe not precise? if (bean[beanObject.constructor.name]) { this.logger.warn(`Bean[${beanName}] is circular,from Class ${beanObject.constructor.name}`); } beanObject.bean[beanName] = bean; } else { process.nextTick((dependBean) => { if (!dependBean) { dependBean = Beans.Instance(beanName); } if (dependBean) { beanObject.bean[beanName] = dependBean; } else { this.logger.warn(`Bean[${beanName}] is invalidate,from Class ${beanObject.constructor.name}`); } }, Beans.Instance(beanName)); } } } } static LoadBean(beanObject) { if (!beanObject) { throw new Error('beanObject can not be null'); } if (!beanObject.bean) { if (!beanObject.constructor) { throw new Error('beanObject‘constructor attribute value can not be null'); } if (!beanObject.beanName) { beanObject.beanName = beanObject.constructor.name; } beanObject.lazyInit = !!beanObject.lazyInit; if (!beanObject.type) { beanObject.type = BeanObject_1.BeanType.Singleton; } if (!beanObject.args) { beanObject.args = []; } if (BeanObject_1.BeanType.Singleton === beanObject.type && !beanObject.lazyInit) { Beans.instance(beanObject); } } Beans.beanObjectMap.set(beanObject.beanName, beanObject); return beanObject.bean; } static Instance(beanName) { if (Beans.beanObjectMap.has(beanName)) { let beanObject = Beans.beanObjectMap.get(beanName); if (beanObject) { if (beanObject.bean) { return beanObject.bean; } else { if (beanObject.type === BeanObject_1.BeanType.Prototype) { Beans.instance(beanObject); let bean = beanObject.bean; beanObject.bean = null; return bean; } if (beanObject.lazyInit && beanObject.type === BeanObject_1.BeanType.Singleton) { Beans.instance(beanObject); return beanObject.bean; } } } } return null; } static UnloadBeans() { Beans.beanObjectMap.forEach((beanObject) => { Beans.Unload(beanObject, beanObject.beanName); }); } static UnloadBean(beanName) { if (Beans.beanObjectMap.has(beanName)) { let beanObject = Beans.beanObjectMap.get(beanName); Beans.Unload(beanObject, beanName); } } static Unload(beanObject, beanName) { if (beanObject.destroyMethod) { beanObject.bean[beanObject.destroyMethod].apply(beanObject.bean); Beans.logger.info(`${beanObject.beanName}.${beanObject.destroyMethod}(destroyMethod) run completed`); } else if (beanObject.bean.destroy) { beanObject.bean.destroy(); Beans.logger.info(`${beanObject.beanName}.destroy(Disposable) run completed`); } beanObject.beanName = undefined; beanObject.type = undefined; beanObject.args = undefined; beanObject.lazyInit = undefined; beanObject.constructor = undefined; beanObject.initMethod = undefined; beanObject.destroyMethod = undefined; beanObject.bean = undefined; Beans.beanObjectMap.delete(beanName); } static getBeans() { return Beans.beanObjectMap; } } Beans.beanObjectMap = new Map(); (() => { let logging = new Logging_1.default(); logging.afterInitialized(); Beans.logger = logging.logger(); })(); exports.default = Beans; //# sourceMappingURL=Beans.js.map