MCPcopy
hub / github.com/MagicMirrorOrg/MagicMirror / App

Function App

js/app.js:67–346  ·  view source on GitHub ↗

* The core app. * @class

()

Source from the content-addressed store, hash-verified

65 * @class
66 */
67function 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}`);

Callers

nothing calls this directly

Calls 6

getEnvVarsAsObjFunction · 0.85
setExpressAppMethod · 0.80
setSocketIOMethod · 0.80
loadModulesFunction · 0.70
startMethod · 0.45
stopMethod · 0.45

Tested by

no test coverage detected