123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- 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;
|