From 7c024990562e66948f9382ebe5eb2d0f20c6d736 Mon Sep 17 00:00:00 2001 From: Matt Sykes Date: Tue, 7 Apr 2026 16:14:34 -0400 Subject: [PATCH] CASH-2521, CASH-2526 - Handle infinite loop and add logging --- jest.config.js | 1 + src/App.vue | 10 ++ src/constants/session-storage.js | 2 + .../heritage-integration/navigation-helper.js | 4 +- src/router/methods/before-each.js | 38 +++- src/router/methods/error.js | 11 +- src/router/methods/error.spec.js | 168 ++++++++++++++++++ src/router/methods/route-logic/heritage.js | 1 + 8 files changed, 227 insertions(+), 8 deletions(-) create mode 100644 src/router/methods/error.spec.js diff --git a/jest.config.js b/jest.config.js index 6c0addf5f..a8063f324 100644 --- a/jest.config.js +++ b/jest.config.js @@ -15,6 +15,7 @@ module.exports = { "!src/main.js", "!src/constants/*.js", "!src/router/**/*.js", + "src/router/methods/error.js", // Re-include after the exclusion above (Jest applies later positive globs as overrides). "!src/helpers/unit-test-helper.js", "!src/helpers/logger.js", "!src/layouts/vehicle-damage/windshield-options/windshield-options.vue", diff --git a/src/App.vue b/src/App.vue index cae31dd24..2b9bc5a33 100644 --- a/src/App.vue +++ b/src/App.vue @@ -64,6 +64,16 @@ window.onerror = (msg, url, line, col, error) => { var suppressErrorAlert = true; return suppressErrorAlert; }; + +// Log Promise rejections that are never handled (.catch / await try/catch), e.g. fire-and-forget async. +window.addEventListener("unhandledrejection", (event) => { + const reason = event.reason; + const message = reason instanceof Error ? reason.message : String(reason); + global.$logger.logError(`unhandledrejection: ${message}`, { + stack: reason instanceof Error ? reason.stack : undefined, + reason: reason instanceof Error ? undefined : reason, + }); +});