From cdc743d834a33932e6ca07f2f63b85646eb1cb30 Mon Sep 17 00:00:00 2001 From: Jamie Kyle <113370520+jamiebuilds-signal@users.noreply.github.com> Date: Thu, 16 Mar 2023 17:03:38 -0700 Subject: [PATCH] Add source location to top-level unhandled error if available --- ts/logging/set_up_renderer_logging.ts | 35 +++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/ts/logging/set_up_renderer_logging.ts b/ts/logging/set_up_renderer_logging.ts index e9eb09897bfe..b72676f1e9b3 100644 --- a/ts/logging/set_up_renderer_logging.ts +++ b/ts/logging/set_up_renderer_logging.ts @@ -114,9 +114,40 @@ window.SignalContext.log = { trace: log.trace, }; -window.onerror = (_message, _script, _line, _col, error) => { +function toLocation( + event: string | Event, + sourceArg?: string, + lineArg?: number, + columnArg?: number +) { + let source = sourceArg; + let line = lineArg; + let column = columnArg; + + if (event instanceof ErrorEvent) { + source ??= event.filename; + line ??= event.lineno; + column ??= event.colno; + } + + if (source == null) { + return '(@ unknown)'; + } + if (line != null && column != null) { + return `(@ ${source}:${line}:${column})`; + } + if (line != null) { + return `(@ ${source}:${line})`; + } + return `(@ ${source})`; +} + +window.onerror = (event, source, line, column, error) => { const errorInfo = Errors.toLogFormat(error); - log.error(`Top-level unhandled error: ${errorInfo}`); + log.error( + `Top-level unhandled error: ${errorInfo}`, + toLocation(event, source, line, column) + ); }; window.addEventListener('unhandledrejection', rejectionEvent => {