const chalk = require('chalk'); const fs = require('fs'); const path = require('path'); var load_all = function(system) { return new Promise((resolve, reject) => { let rawdata = fs.readFileSync('package.json'); system.package = JSON.parse(rawdata); var length = Object.keys(system.package.dependencies).length; system.log(`Checking for MWS modules in ${chalk.bold(length)} package${length > 1 ? 's':''}:`); for (let index = 0; index < length; index++) { const element = Object.keys(system.package.dependencies)[index]; instantiate_module(system, element); } system.modules.forEach(module => { module.setup(system); }); system.modules.forEach(module => { module.start(system); }); console.log(`Initialization complete. Loaded ${system.modules.length} module${system.modules.length > 1 ? 's':''}.`); resolve(); }); }; var initialize_module = function(system, module_name) { var mws_module = system.require(module_name)(); if (typeof mws_module.initialize === "function") { mws_module.initialize(system); } return mws_module; } var install_module = function(system, module_name) { let component = find_module_by_name(system, module_name); if(component == undefined) { system.log(chalk.red(` ❗️ Error: Could not find module ${module_name}`)); return undefined; } if (typeof component.install === "function") { component.install(); return component; } else { system.log(chalk.red(` ❗️ Error: Could not install ${module_name} because it does not have an install function.`)); return undefined; } } var find_module_by_name = function(system, module_name) { for (let index = 0; index < system.modules.length; index++) { const element = system.modules[index]; if(element.name == module_name) { return element; } } } var instantiate_module = function(system, module_name) { let dep = system.package.dependencies[module_name]; if(dep.includes('file:')) dep = dep.replace('file:',''); else dep = require.resolve(module_name); let filePath = dep + 'package.json' let packagePath = path.dirname(filePath); let rawdata = fs.readFileSync(packagePath + '/package.json'); let package = JSON.parse(rawdata); if ('mws_module' in package && package.mws_module == true){ var mws_module = initialize_module(system, module_name); let desc = `${chalk.bold(module_name)} ${chalk.gray('v' + package.version)} from ${chalk.green('\'' + packagePath + '\'')}` if(mws_module == undefined) { system.log(chalk.red(`❗️ Error instantiating module ${desc}`)); return undefined; } mws_module.version = package.version; mws_module.packagePath = packagePath; if(mws_module.auto_load == false) return mws_module; system.log(`🔹 Loaded ${desc}`); system.modules.push(mws_module); if(mws_module.auto_load == true) install_module(system, module_name); return mws_module; } } module.exports.load_all = load_all; module.exports.initialize_module = initialize_module; module.exports.install_module = install_module; module.exports.find_module_by_name = find_module_by_name; module.exports.instantiate_module = instantiate_module;