mirror of
https://github.com/MichMich/MagicMirror.git
synced 2025-09-14 08:07:01 +00:00
refactor: use global.root_path instead relative paths (#3883)
This commit is contained in:
@@ -24,6 +24,7 @@ Thanks to: @dathbe.
|
|||||||
- [clock] Add CSS to prevent line breaking of sunset/sunrise time display (#3816)
|
- [clock] Add CSS to prevent line breaking of sunset/sunrise time display (#3816)
|
||||||
- [core] Enhance system information logging format and include additional env and RAM details (#3839, #3843)
|
- [core] Enhance system information logging format and include additional env and RAM details (#3839, #3843)
|
||||||
- [refactor] Add new file `js/module_functions.js` to move code used in several modules to one place (#3837)
|
- [refactor] Add new file `js/module_functions.js` to move code used in several modules to one place (#3837)
|
||||||
|
- [refactor] Use global.root_path where possible (#3883)
|
||||||
- [tests] refactor: simplify jest config file (#3844)
|
- [tests] refactor: simplify jest config file (#3844)
|
||||||
- [tests] refactor: extract constants for weather electron tests (#3845)
|
- [tests] refactor: extract constants for weather electron tests (#3845)
|
||||||
- [tests] refactor: add `setupDOMEnvironment` helper function to eliminate repetitive JSDOM setup code (#3860)
|
- [tests] refactor: add `setupDOMEnvironment` helper function to eliminate repetitive JSDOM setup code (#3860)
|
||||||
|
15
js/app.js
15
js/app.js
@@ -6,9 +6,13 @@ const path = require("node:path");
|
|||||||
const envsub = require("envsub");
|
const envsub = require("envsub");
|
||||||
const Log = require("logger");
|
const Log = require("logger");
|
||||||
|
|
||||||
|
// global absolute root path
|
||||||
|
global.root_path = path.resolve(`${__dirname}/../`);
|
||||||
|
|
||||||
const Server = require(`${__dirname}/server`);
|
const Server = require(`${__dirname}/server`);
|
||||||
const Utils = require(`${__dirname}/utils`);
|
const Utils = require(`${__dirname}/utils`);
|
||||||
const defaultModules = require(`${__dirname}/../modules/default/defaultmodules`);
|
|
||||||
|
const defaultModules = require(`${global.root_path}/modules/default/defaultmodules`);
|
||||||
// used to control fetch timeout for node_helpers
|
// used to control fetch timeout for node_helpers
|
||||||
const { setGlobalDispatcher, Agent } = require("undici");
|
const { setGlobalDispatcher, Agent } = require("undici");
|
||||||
const { getEnvVarsAsObj } = require("#server_functions");
|
const { getEnvVarsAsObj } = require("#server_functions");
|
||||||
@@ -16,16 +20,13 @@ const { getEnvVarsAsObj } = require("#server_functions");
|
|||||||
const fetch_timeout = process.env.mmFetchTimeout !== undefined ? process.env.mmFetchTimeout : 30000;
|
const fetch_timeout = process.env.mmFetchTimeout !== undefined ? process.env.mmFetchTimeout : 30000;
|
||||||
|
|
||||||
// Get version number.
|
// Get version number.
|
||||||
global.version = require(`${__dirname}/../package.json`).version;
|
global.version = require(`${global.root_path}/package.json`).version;
|
||||||
global.mmTestMode = process.env.mmTestMode === "true";
|
global.mmTestMode = process.env.mmTestMode === "true";
|
||||||
Log.log(`Starting MagicMirror: v${global.version}`);
|
Log.log(`Starting MagicMirror: v${global.version}`);
|
||||||
|
|
||||||
// Log system information.
|
// Log system information.
|
||||||
Utils.logSystemInformation(global.version);
|
Utils.logSystemInformation(global.version);
|
||||||
|
|
||||||
// global absolute root path
|
|
||||||
global.root_path = path.resolve(`${__dirname}/../`);
|
|
||||||
|
|
||||||
if (process.env.MM_CONFIG_FILE) {
|
if (process.env.MM_CONFIG_FILE) {
|
||||||
global.configuration_file = process.env.MM_CONFIG_FILE.replace(`${global.root_path}/`, "");
|
global.configuration_file = process.env.MM_CONFIG_FILE.replace(`${global.root_path}/`, "");
|
||||||
}
|
}
|
||||||
@@ -180,10 +181,10 @@ function App () {
|
|||||||
const elements = module.split("/");
|
const elements = module.split("/");
|
||||||
const moduleName = elements[elements.length - 1];
|
const moduleName = elements[elements.length - 1];
|
||||||
const env = getEnvVarsAsObj();
|
const env = getEnvVarsAsObj();
|
||||||
let moduleFolder = path.resolve(`${__dirname}/../${env.modulesDir}`, module);
|
let moduleFolder = path.resolve(`${global.root_path}/${env.modulesDir}`, module);
|
||||||
|
|
||||||
if (defaultModules.includes(moduleName)) {
|
if (defaultModules.includes(moduleName)) {
|
||||||
const defaultModuleFolder = path.resolve(`${__dirname}/../modules/default/`, module);
|
const defaultModuleFolder = path.resolve(`${global.root_path}/modules/default/`, module);
|
||||||
if (process.env.JEST_WORKER_ID === undefined) {
|
if (process.env.JEST_WORKER_ID === undefined) {
|
||||||
moduleFolder = defaultModuleFolder;
|
moduleFolder = defaultModuleFolder;
|
||||||
} else {
|
} else {
|
||||||
|
@@ -5,9 +5,8 @@ const Ajv = require("ajv");
|
|||||||
const globals = require("globals");
|
const globals = require("globals");
|
||||||
const { Linter } = require("eslint");
|
const { Linter } = require("eslint");
|
||||||
|
|
||||||
const rootPath = path.resolve(`${__dirname}/../`);
|
const Log = require(`${global.root_path}/js/logger.js`);
|
||||||
const Log = require(`${rootPath}/js/logger.js`);
|
const Utils = require(`${global.root_path}/js/utils.js`);
|
||||||
const Utils = require(`${rootPath}/js/utils.js`);
|
|
||||||
|
|
||||||
const linter = new Linter({ configType: "flat" });
|
const linter = new Linter({ configType: "flat" });
|
||||||
const ajv = new Ajv();
|
const ajv = new Ajv();
|
||||||
@@ -19,7 +18,7 @@ const ajv = new Ajv();
|
|||||||
*/
|
*/
|
||||||
function getConfigFile () {
|
function getConfigFile () {
|
||||||
// FIXME: This function should be in core. Do you want refactor me ;) ?, be good!
|
// FIXME: This function should be in core. Do you want refactor me ;) ?, be good!
|
||||||
return path.resolve(process.env.MM_CONFIG_FILE || `${rootPath}/config/config.js`);
|
return path.resolve(process.env.MM_CONFIG_FILE || `${global.root_path}/config/config.js`);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -1,7 +1,4 @@
|
|||||||
const path = require("node:path");
|
const Log = require(`${global.root_path}/js/logger.js`);
|
||||||
|
|
||||||
const rootPath = path.resolve(`${__dirname}/../`);
|
|
||||||
const Log = require(`${rootPath}/js/logger.js`);
|
|
||||||
const os = require("node:os");
|
const os = require("node:os");
|
||||||
const fs = require("node:fs");
|
const fs = require("node:fs");
|
||||||
const si = require("systeminformation");
|
const si = require("systeminformation");
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
*/
|
*/
|
||||||
const moment = require("moment-timezone");
|
const moment = require("moment-timezone");
|
||||||
|
|
||||||
const Log = require("../../../js/logger");
|
const Log = require("logger");
|
||||||
|
|
||||||
const CalendarFetcherUtils = {
|
const CalendarFetcherUtils = {
|
||||||
|
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
// Alias modules mentioned in package.js under _moduleAliases.
|
// Alias modules mentioned in package.js under _moduleAliases.
|
||||||
require("module-alias/register");
|
require("module-alias/register");
|
||||||
const Log = require("../../../js/logger");
|
const Log = require("logger");
|
||||||
|
|
||||||
const CalendarFetcher = require("./calendarfetcher");
|
const CalendarFetcher = require("./calendarfetcher");
|
||||||
|
|
||||||
|
@@ -4,8 +4,6 @@ const fs = require("node:fs");
|
|||||||
const path = require("node:path");
|
const path = require("node:path");
|
||||||
const Log = require("logger");
|
const Log = require("logger");
|
||||||
|
|
||||||
const BASE_DIR = path.normalize(`${__dirname}/../../../`);
|
|
||||||
|
|
||||||
class GitHelper {
|
class GitHelper {
|
||||||
constructor () {
|
constructor () {
|
||||||
this.gitRepos = [];
|
this.gitRepos = [];
|
||||||
@@ -35,10 +33,10 @@ class GitHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async add (moduleName) {
|
async add (moduleName) {
|
||||||
let moduleFolder = BASE_DIR;
|
let moduleFolder = `${global.root_path}`;
|
||||||
|
|
||||||
if (moduleName !== "MagicMirror") {
|
if (moduleName !== "MagicMirror") {
|
||||||
moduleFolder = `${moduleFolder}modules/${moduleName}`;
|
moduleFolder = `${moduleFolder}/modules/${moduleName}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@@ -1,7 +1,8 @@
|
|||||||
const fs = require("node:fs");
|
const fs = require("node:fs");
|
||||||
const path = require("node:path");
|
const path = require("node:path");
|
||||||
const NodeHelper = require("node_helper");
|
const NodeHelper = require("node_helper");
|
||||||
const defaultModules = require("../defaultmodules");
|
|
||||||
|
const defaultModules = require(`${global.root_path}/modules/default/defaultmodules`);
|
||||||
const GitHelper = require("./git_helper");
|
const GitHelper = require("./git_helper");
|
||||||
const UpdateHelper = require("./update_helper");
|
const UpdateHelper = require("./update_helper");
|
||||||
|
|
||||||
@@ -21,7 +22,7 @@ module.exports = NodeHelper.create({
|
|||||||
return modules;
|
return modules;
|
||||||
} else {
|
} else {
|
||||||
// get modules from modules-directory
|
// get modules from modules-directory
|
||||||
const moduleDir = path.normalize(`${__dirname}/../../`);
|
const moduleDir = path.normalize(`${global.root_path}/modules`);
|
||||||
const getDirectories = (source) => {
|
const getDirectories = (source) => {
|
||||||
return fs.readdirSync(source, { withFileTypes: true })
|
return fs.readdirSync(source, { withFileTypes: true })
|
||||||
.filter((dirent) => dirent.isDirectory() && dirent.name !== "default")
|
.filter((dirent) => dirent.isDirectory() && dirent.name !== "default")
|
||||||
|
@@ -3,7 +3,7 @@ const helpers = require("./helpers/global-setup");
|
|||||||
describe("All font files from roboto.css should be downloadable", () => {
|
describe("All font files from roboto.css should be downloadable", () => {
|
||||||
const fontFiles = [];
|
const fontFiles = [];
|
||||||
// Statements below filters out all 'url' lines in the CSS file
|
// Statements below filters out all 'url' lines in the CSS file
|
||||||
const fileContent = require("node:fs").readFileSync(`${__dirname}/../../css/roboto.css`, "utf8");
|
const fileContent = require("node:fs").readFileSync(`${global.root_path}/css/roboto.css`, "utf8");
|
||||||
const regex = /\burl\(['"]([^'"]+)['"]\)/g;
|
const regex = /\burl\(['"]([^'"]+)['"]\)/g;
|
||||||
let match = regex.exec(fileContent);
|
let match = regex.exec(fileContent);
|
||||||
while (match !== null) {
|
while (match !== null) {
|
||||||
|
@@ -13,10 +13,9 @@ app.use(basicAuth);
|
|||||||
|
|
||||||
// Set available directories
|
// Set available directories
|
||||||
const directories = ["/tests/configs", "/tests/mocks"];
|
const directories = ["/tests/configs", "/tests/mocks"];
|
||||||
const rootPath = path.resolve(`${__dirname}/../../../`);
|
|
||||||
|
|
||||||
for (let directory of directories) {
|
for (let directory of directories) {
|
||||||
app.use(directory, express.static(path.resolve(rootPath + directory)));
|
app.use(directory, express.static(path.resolve(`${global.root_path}/${directory}`)));
|
||||||
}
|
}
|
||||||
|
|
||||||
let server;
|
let server;
|
||||||
|
@@ -1,9 +1,13 @@
|
|||||||
|
const path = require("node:path");
|
||||||
const os = require("node:os");
|
const os = require("node:os");
|
||||||
const fs = require("node:fs");
|
const fs = require("node:fs");
|
||||||
const jsdom = require("jsdom");
|
const jsdom = require("jsdom");
|
||||||
|
|
||||||
const indexFile = `${__dirname}/../../../index.html`;
|
// global absolute root path
|
||||||
const cssFile = `${__dirname}/../../../css/custom.css`;
|
global.root_path = path.resolve(`${__dirname}/../../../`);
|
||||||
|
|
||||||
|
const indexFile = `${global.root_path}/index.html`;
|
||||||
|
const cssFile = `${global.root_path}/css/custom.css`;
|
||||||
const sampleCss = [
|
const sampleCss = [
|
||||||
".region.row3 {",
|
".region.row3 {",
|
||||||
" top: 0;",
|
" top: 0;",
|
||||||
@@ -29,7 +33,7 @@ exports.startApplication = async (configFilename, exec) => {
|
|||||||
process.env.mmTestMode = "true";
|
process.env.mmTestMode = "true";
|
||||||
process.setMaxListeners(0);
|
process.setMaxListeners(0);
|
||||||
if (exec) exec;
|
if (exec) exec;
|
||||||
global.app = require("../../../js/app");
|
global.app = require(`${global.root_path}/js/app`);
|
||||||
|
|
||||||
return global.app.start();
|
return global.app.start();
|
||||||
};
|
};
|
||||||
|
@@ -83,8 +83,7 @@ describe("Newsfeed module", () => {
|
|||||||
|
|
||||||
describe("Newsfeed module located in config directory", () => {
|
describe("Newsfeed module located in config directory", () => {
|
||||||
beforeAll(() => {
|
beforeAll(() => {
|
||||||
const baseDir = `${__dirname}/../../..`;
|
fs.cpSync(`${global.root_path}/modules/default/newsfeed`, `${global.root_path}/config/newsfeed`, { recursive: true });
|
||||||
fs.cpSync(`${baseDir}/modules/default/newsfeed`, `${baseDir}/config/newsfeed`, { recursive: true });
|
|
||||||
process.env.MM_MODULES_DIR = "config";
|
process.env.MM_MODULES_DIR = "config";
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -6,7 +6,7 @@ describe("App environment", () => {
|
|||||||
let serverProcess;
|
let serverProcess;
|
||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
process.env.MM_CONFIG_FILE = "tests/configs/default.js";
|
process.env.MM_CONFIG_FILE = "tests/configs/default.js";
|
||||||
serverProcess = await require("node:child_process").spawn("npm", ["run", "server"], { env: process.env, detached: true });
|
serverProcess = await require("node:child_process").spawn("node", ["--run", "server"], { env: process.env, detached: true });
|
||||||
// we have to wait until the server is started
|
// we have to wait until the server is started
|
||||||
await delay(2000);
|
await delay(2000);
|
||||||
});
|
});
|
||||||
|
@@ -9,7 +9,7 @@ describe("Vendors", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe("Get list vendors", () => {
|
describe("Get list vendors", () => {
|
||||||
const vendors = require(`${__dirname}/../../js/vendor.js`);
|
const vendors = require(`${global.root_path}/js/vendor.js`);
|
||||||
|
|
||||||
Object.keys(vendors).forEach((vendor) => {
|
Object.keys(vendors).forEach((vendor) => {
|
||||||
it(`should return 200 HTTP code for vendor "${vendor}"`, async () => {
|
it(`should return 200 HTTP code for vendor "${vendor}"`, async () => {
|
||||||
|
@@ -4,7 +4,7 @@ const path = require("node:path");
|
|||||||
const root_path = path.join(__dirname, "../../..");
|
const root_path = path.join(__dirname, "../../..");
|
||||||
|
|
||||||
describe("Default modules set in modules/default/defaultmodules.js", () => {
|
describe("Default modules set in modules/default/defaultmodules.js", () => {
|
||||||
const expectedDefaultModules = require("../../../modules/default/defaultmodules");
|
const expectedDefaultModules = require(`${root_path}/modules/default/defaultmodules`);
|
||||||
|
|
||||||
for (const defaultModule of expectedDefaultModules) {
|
for (const defaultModule of expectedDefaultModules) {
|
||||||
it(`contains a folder for modules/default/${defaultModule}"`, () => {
|
it(`contains a folder for modules/default/${defaultModule}"`, () => {
|
||||||
|
@@ -2,7 +2,7 @@ const fs = require("node:fs");
|
|||||||
const path = require("node:path");
|
const path = require("node:path");
|
||||||
|
|
||||||
const root_path = path.join(__dirname, "../../..");
|
const root_path = path.join(__dirname, "../../..");
|
||||||
const version = require(`${__dirname}/../../../package.json`).version;
|
const version = require(`${root_path}/package.json`).version;
|
||||||
|
|
||||||
describe("'global.root_path' set in js/app.js", () => {
|
describe("'global.root_path' set in js/app.js", () => {
|
||||||
const expectedSubPaths = ["modules", "serveronly", "js", "js/app.js", "js/main.js", "js/electron.js", "config"];
|
const expectedSubPaths = ["modules", "serveronly", "js", "js/app.js", "js/main.js", "js/electron.js", "config"];
|
||||||
|
Reference in New Issue
Block a user