From 33c05a7dc135a29b077b1577a79bc653f3ac23bf Mon Sep 17 00:00:00 2001 From: sylenien Date: Mon, 5 Sep 2022 12:36:12 +0200 Subject: [PATCH] feat(tracker): add tags --- tracker/tracker/src/main/index.ts | 10 ++++-- tracker/tracker/src/main/modules/exception.ts | 31 ++++++++++++------- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/tracker/tracker/src/main/index.ts b/tracker/tracker/src/main/index.ts index 8d2fa3c11..840334f54 100644 --- a/tracker/tracker/src/main/index.ts +++ b/tracker/tracker/src/main/index.ts @@ -276,17 +276,21 @@ export default class API { } } - handleError = (e: Error | ErrorEvent | PromiseRejectionEvent, metadata?: ErrorExtra) => { + handleError = ( + e: Error | ErrorEvent | PromiseRejectionEvent, + tags?: string[], + metadata?: Record, + ) => { if (this.app === null) { return } if (e instanceof Error) { - this.app.send(getExceptionMessage(e, [], metadata)) + this.app.send(getExceptionMessage(e, [], tags, metadata)) } else if ( e instanceof ErrorEvent || ('PromiseRejectionEvent' in window && e instanceof PromiseRejectionEvent) ) { - const msg = getExceptionMessageFromEvent(e, undefined, metadata) + const msg = getExceptionMessageFromEvent(e, undefined, tags, metadata) if (msg != null) { this.app.send(msg) } diff --git a/tracker/tracker/src/main/modules/exception.ts b/tracker/tracker/src/main/modules/exception.ts index e318fff2d..a1b9e08e8 100644 --- a/tracker/tracker/src/main/modules/exception.ts +++ b/tracker/tracker/src/main/modules/exception.ts @@ -15,11 +15,6 @@ interface StackFrame { source?: string } -interface ErrorMeta { - tags: string[] - meta: Record -} - function getDefaultStack(e: ErrorEvent): Array { return [ { @@ -35,24 +30,32 @@ function getDefaultStack(e: ErrorEvent): Array { export function getExceptionMessage( error: Error, fallbackStack: Array, - metadata?: ErrorMeta, + tags?: string[], + metadata?: Record, ): Message { let stack = fallbackStack try { stack = ErrorStackParser.parse(error) } catch (e) {} const method = metadata ? ExceptionWithMeta : JSException - return method(error.name, error.message, JSON.stringify(stack), JSON.stringify(metadata)) + return method( + error.name, + error.message, + JSON.stringify(stack), + JSON.stringify(tags), + JSON.stringify(metadata), + ) } export function getExceptionMessageFromEvent( e: ErrorEvent | PromiseRejectionEvent, context: typeof globalThis = window, - metadata?: ErrorMeta, + tags?: string[], + metadata?: Record, ): Message | null { if (e instanceof ErrorEvent) { if (e.error instanceof Error) { - return getExceptionMessage(e.error, getDefaultStack(e), metadata) + return getExceptionMessage(e.error, getDefaultStack(e), tags, metadata) } else { let [name, message] = e.message.split(':') if (!message) { @@ -63,7 +66,7 @@ export function getExceptionMessageFromEvent( } } else if ('PromiseRejectionEvent' in context && e instanceof context.PromiseRejectionEvent) { if (e.reason instanceof Error) { - return getExceptionMessage(e.reason, [], metadata) + return getExceptionMessage(e.reason, [], tags, metadata) } else { let message: string try { @@ -72,7 +75,13 @@ export function getExceptionMessageFromEvent( message = String(e.reason) } const method = metadata ? ExceptionWithMeta : JSException - return method('Unhandled Promise Rejection', message, '[]', JSON.stringify(metadata)) + return method( + 'Unhandled Promise Rejection', + message, + '[]', + JSON.stringify(tags), + JSON.stringify(metadata), + ) } } return null