* The core app. * @class
()
| 65 | * @class |
| 66 | */ |
| 67 | function App () { |
| 68 | let nodeHelpers = []; |
| 69 | let httpServer; |
| 70 | let defaultModules; |
| 71 | let env; |
| 72 | |
| 73 | /** |
| 74 | * Loads a specific module. |
| 75 | * @param {string} module The name of the module (including subpath). |
| 76 | */ |
| 77 | function loadModule (module) { |
| 78 | const elements = module.split("/"); |
| 79 | const moduleName = elements[elements.length - 1]; |
| 80 | let moduleFolder = path.resolve(`${global.root_path}/${env.modulesDir}`, module); |
| 81 | |
| 82 | if (defaultModules.includes(moduleName)) { |
| 83 | const defaultModuleFolder = path.resolve(`${global.root_path}/${global.defaultModulesDir}/`, module); |
| 84 | if (!global.mmTestMode) { |
| 85 | moduleFolder = defaultModuleFolder; |
| 86 | } else { |
| 87 | // running in test mode, allow defaultModules placed under moduleDir for testing |
| 88 | if (env.modulesDir === "modules" || env.modulesDir === "tests/mocks") { |
| 89 | moduleFolder = defaultModuleFolder; |
| 90 | } |
| 91 | } |
| 92 | } |
| 93 | |
| 94 | const moduleFile = `${moduleFolder}/${moduleName}.js`; |
| 95 | |
| 96 | try { |
| 97 | fs.accessSync(moduleFile, fs.constants.R_OK); |
| 98 | } catch { |
| 99 | Log.warn(`No ${moduleFile} found for module: ${moduleName}.`); |
| 100 | } |
| 101 | |
| 102 | const helperPath = `${moduleFolder}/node_helper.js`; |
| 103 | |
| 104 | let loadHelper = true; |
| 105 | try { |
| 106 | fs.accessSync(helperPath, fs.constants.R_OK); |
| 107 | } catch { |
| 108 | loadHelper = false; |
| 109 | Log.log(`No helper found for module: ${moduleName}.`); |
| 110 | } |
| 111 | |
| 112 | // if the helper was found |
| 113 | if (loadHelper) { |
| 114 | let Module; |
| 115 | try { |
| 116 | Module = require(helperPath); |
| 117 | } catch (e) { |
| 118 | Log.error(`Error when loading ${moduleName}:`, e.message); |
| 119 | return; |
| 120 | } |
| 121 | let m = new Module(); |
| 122 | |
| 123 | if (m.requiresVersion) { |
| 124 | Log.log(`Check MagicMirror² version for node helper '${moduleName}' - Minimum version: ${m.requiresVersion} - Current version: ${global.version}`); |
nothing calls this directly
no test coverage detected