From ff95f12d66a1a8b4ba7658c56564f50e3bdc78ee Mon Sep 17 00:00:00 2001 From: forehalo Date: Tue, 22 Oct 2024 07:49:48 +0000 Subject: [PATCH] fix(core): handle global script error (#8576) --- tools/cli/src/webpack/error-handler.js | 44 +++++++++++++++++--------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/tools/cli/src/webpack/error-handler.js b/tools/cli/src/webpack/error-handler.js index 2acd7a46d1..c1635eb79e 100644 --- a/tools/cli/src/webpack/error-handler.js +++ b/tools/cli/src/webpack/error-handler.js @@ -33,23 +33,37 @@ document.body.append(errorEl); } - function registerGlobalErrorHandler() { - function handler(e) { - var error = - 'error' in e ? e.error : e.reason instanceof Error ? e.reason : null; - console.error('unhandled unrecoverable error', error); + /** + * @param event {PromiseRejectionEvent|ErrorEvent} + */ + function handler(event) { + var error; - const shouldCache = - // syntax error - error && error instanceof SyntaxError; - - if (!shouldCache) { - return; - } - - e.stopImmediatePropagation(); - showGlobalErrorPage(); + if ('error' in event) { + error = + event.error || + (event.message === 'Script error.' + ? new SyntaxError(event.message) + : new Error(event.message)); + } else { + error = event.reason; } + + console.error('unhandled unrecoverable error', error); + + var shouldCache = + // syntax error + error && error instanceof SyntaxError; + + if (!shouldCache) { + return; + } + + event.stopImmediatePropagation(); + showGlobalErrorPage(); + } + + function registerGlobalErrorHandler() { if (typeof document !== 'undefined') { globalThis.addEventListener('unhandledrejection', handler); globalThis.addEventListener('error', handler);