UNPKG

@syncfusion/ej2-base

Version:

A common package of Essential JS 2 base libraries, methods and class definitions

122 lines (121 loc) 4.53 kB
/* eslint-disable @typescript-eslint/no-explicit-any */ /** * Module loading operations */ import { createInstance, setValue, getValue, deleteObject } from './util'; var MODULE_SUFFIX = 'Module'; var ModuleLoader = /** @class */ (function () { function ModuleLoader(parent) { this.loadedModules = []; this.parent = parent; } /** * Inject required modules in component library * * @returns {void} ? * @param {ModuleDeclaration[]} requiredModules - Array of modules to be required * @param {Function[]} moduleList - Array of modules to be injected from sample side */ ModuleLoader.prototype.inject = function (requiredModules, moduleList) { var reqLength = requiredModules.length; if (reqLength === 0) { this.clean(); return; } if (this.loadedModules.length) { this.clearUnusedModule(requiredModules); } for (var i = 0; i < reqLength; i++) { var modl = requiredModules[parseInt(i.toString(), 10)]; for (var _i = 0, moduleList_1 = moduleList; _i < moduleList_1.length; _i++) { var module = moduleList_1[_i]; var modName = modl.member; if (module && module.prototype.getModuleName() === modl.member && !this.isModuleLoaded(modName)) { var moduleObject = createInstance(module, modl.args); var memberName = this.getMemberName(modName); if (modl.isProperty) { setValue(memberName, module, this.parent); } else { setValue(memberName, moduleObject, this.parent); } var loadedModule = modl; loadedModule.member = memberName; this.loadedModules.push(loadedModule); } } } }; /** * To remove the created object while destroying the control * * @returns {void} */ ModuleLoader.prototype.clean = function () { for (var _i = 0, _a = this.loadedModules; _i < _a.length; _i++) { var modules = _a[_i]; if (!modules.isProperty) { getValue(modules.member, this.parent).destroy(); } } this.loadedModules = []; }; /** * Returns the array of modules that are not loaded in the component library. * * @param {ModuleDeclaration[]} requiredModules - Array of modules to be required * @returns {ModuleDeclaration[]} ? * @private */ ModuleLoader.prototype.getNonInjectedModules = function (requiredModules) { var _this = this; return requiredModules.filter(function (module) { return !_this.isModuleLoaded(module.member); }); }; /** * Removes all unused modules * * @param {ModuleDeclaration[]} moduleList ? * @returns {void} ? */ ModuleLoader.prototype.clearUnusedModule = function (moduleList) { var _this = this; var usedModules = moduleList.map(function (arg) { return _this.getMemberName(arg.member); }); var removableModule = this.loadedModules.filter(function (module) { return usedModules.indexOf(module.member) === -1; }); for (var _i = 0, removableModule_1 = removableModule; _i < removableModule_1.length; _i++) { var mod = removableModule_1[_i]; if (!mod.isProperty) { getValue(mod.member, this.parent).destroy(); } this.loadedModules.splice(this.loadedModules.indexOf(mod), 1); deleteObject(this.parent, mod.member); } }; /** * To get the name of the member. * * @param {string} name ? * @returns {string} ? */ ModuleLoader.prototype.getMemberName = function (name) { return name[0].toLowerCase() + name.substring(1) + MODULE_SUFFIX; }; /** * Returns boolean based on whether the module specified is loaded or not * * @param {string} modName ? * @returns {boolean} ? */ ModuleLoader.prototype.isModuleLoaded = function (modName) { for (var _i = 0, _a = this.loadedModules; _i < _a.length; _i++) { var mod = _a[_i]; if (mod.member === this.getMemberName(modName)) { return true; } } return false; }; return ModuleLoader; }()); export { ModuleLoader };