From d905ec23a3715aaf5b37dda2d7342923e58ce2d0 Mon Sep 17 00:00:00 2001 From: xunguangzlj-cloud <293371022+xunguangzlj-cloud@users.noreply.github.com> Date: Sun, 8 Nov 2026 19:24:24 +0800 Subject: [PATCH] fix(logger): recognize callers on Windows --- js/logger.js | 3 ++- tests/unit/functions/logger_spec.js | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/js/logger.js b/js/logger.js index 30a423e378..7bb5ebabe3 100644 --- a/js/logger.js +++ b/js/logger.js @@ -74,7 +74,8 @@ if (typeof module !== "undefined") { const getCallerPrefix = () => { try { const lines = new Error().stack.split("\n"); - for (const line of lines) { + for (const frame of lines) { + const line = frame.replaceAll("\\", "/"); if (line.includes("node:") || line.includes("js/logger.js") || line.includes("node_modules")) continue; const match = line.match(/\((.+?\.[cm]?js):\d+:\d+\)/) || line.match(/at\s+(.+?\.[cm]?js):\d+:\d+/); if (match) { diff --git a/tests/unit/functions/logger_spec.js b/tests/unit/functions/logger_spec.js index cbbc969d41..cb743d538a 100644 --- a/tests/unit/functions/logger_spec.js +++ b/tests/unit/functions/logger_spec.js @@ -5,12 +5,16 @@ describe("logger caller prefixes", () => { const loggerPath = path.resolve(__dirname, "../../../js/logger.js"); it.each(["js", "mjs", "cjs"])("recognizes .%s callers", (extension) => { + const windowsScript = `C:\\MagicMirror\\js\\probe.${extension}`; + const windowsModule = `C:\\MagicMirror\\modules\\MMM-test\\node_helper.${extension}`; const script = ` require(${JSON.stringify(loggerPath)}); const vm = require("node:vm"); vm.runInThisContext('console.log("top-level");', {filename: "file:///MagicMirror/js/probe.${extension}"}); vm.runInThisContext('(() => console.log("function"))();', {filename: "file:///MagicMirror/js/probe.${extension}"}); vm.runInThisContext('console.log("module");', {filename: "file:///MagicMirror/modules/MMM-test/node_helper.${extension}"}); + vm.runInThisContext('console.log("windows script");', {filename: ${JSON.stringify(windowsScript)}}); + vm.runInThisContext('console.log("windows module");', {filename: ${JSON.stringify(windowsModule)}}); `; const output = execFileSync(process.execPath, ["-e", script], { env: { ...process.env, mmTestMode: "false", FORCE_COLOR: "0" }, @@ -20,5 +24,7 @@ describe("logger caller prefixes", () => { expect(output).toContain("[probe] top-level"); expect(output).toContain("[probe] function"); expect(output).toContain("[MMM-test] module"); + expect(output).toContain("[probe] windows script"); + expect(output).toContain("[MMM-test] windows module"); }); });