@@ -10,12 +10,13 @@ import type {
1010 EventContext ,
1111 JavaScriptAddons ,
1212 Json ,
13- VueIntegrationAddons
13+ VueIntegrationAddons ,
1414} from '@hawk.so/types' ;
1515import type { JavaScriptCatcherIntegrations } from './types/integrations' ;
1616import { EventRejectedError } from './errors' ;
1717import { isErrorProcessed , markErrorAsProcessed } from './utils/event' ;
18- import { getErrorFromErrorEvent } from './utils/error' ;
18+ import type { CapturedError } from './utils/error' ;
19+ import { fillCapturedError , getErrorFromErrorEvent } from './utils/error' ;
1920import { BrowserRandomGenerator } from './utils/random' ;
2021import { ConsoleCatcher } from './addons/consoleCatcher' ;
2122import { BreadcrumbManager } from './addons/breadcrumbs' ;
@@ -222,7 +223,7 @@ export default class Catcher {
222223 * @param [context] - any additional data to send
223224 */
224225 public send ( message : Error | string , context ?: EventContext ) : void {
225- void this . formatAndSend ( message , undefined , context ) ;
226+ void this . formatAndSend ( fillCapturedError ( message ) , undefined , context ) ;
226227 }
227228
228229 /**
@@ -234,7 +235,7 @@ export default class Catcher {
234235 */
235236 // eslint-disable-next-line @typescript-eslint/no-explicit-any
236237 public captureError ( error : Error | string , addons ?: JavaScriptCatcherIntegrations ) : void {
237- void this . formatAndSend ( error , addons ) ;
238+ void this . formatAndSend ( fillCapturedError ( error ) , addons ) ;
238239 }
239240
240241 /**
@@ -247,7 +248,7 @@ export default class Catcher {
247248 this . vue = new VueIntegration (
248249 vue ,
249250 ( error : Error , addons : VueIntegrationAddons ) => {
250- void this . formatAndSend ( error , {
251+ void this . formatAndSend ( fillCapturedError ( error ) , {
251252 vue : addons ,
252253 } ) ;
253254 } ,
@@ -345,21 +346,21 @@ export default class Catcher {
345346 * @param context - any additional data passed by user
346347 */
347348 private async formatAndSend (
348- error : Error | string ,
349+ error : CapturedError ,
349350 // eslint-disable-next-line @typescript-eslint/no-explicit-any
350351 integrationAddons ?: JavaScriptCatcherIntegrations ,
351352 context ?: EventContext
352353 ) : Promise < void > {
353354 try {
354- const isAlreadySentError = isErrorProcessed ( error ) ;
355+ const isAlreadySentError = isErrorProcessed ( error . rawError ) ;
355356
356357 if ( isAlreadySentError ) {
357358 /**
358359 * @todo add debug build and log this case
359360 */
360361 return ;
361362 } else {
362- markErrorAsProcessed ( error ) ;
363+ markErrorAsProcessed ( error . rawError ) ;
363364 }
364365
365366 const errorFormatted = await this . prepareErrorFormatted ( error , context ) ;
@@ -402,16 +403,17 @@ export default class Catcher {
402403 * @param error - error to format
403404 * @param context - any additional data passed by user
404405 */
405- private async prepareErrorFormatted ( error : Error | string , context ?: EventContext ) : Promise < CatcherMessage > {
406+ private async prepareErrorFormatted ( error : CapturedError , context ?: EventContext ) : Promise < CatcherMessage > {
407+ const { title, type, rawError } = error ;
406408 let payload : HawkJavaScriptEvent = {
407- title : this . getTitle ( error ) ,
408- type : this . getType ( error ) ,
409+ title,
410+ type,
409411 release : this . getRelease ( ) ,
410412 breadcrumbs : this . getBreadcrumbsForEvent ( ) ,
411413 context : this . getContext ( context ) ,
412414 user : this . getUser ( ) ,
413- addons : this . getAddons ( error ) ,
414- backtrace : await this . getBacktrace ( error ) ,
415+ addons : this . getAddons ( rawError ) ,
416+ backtrace : await this . getBacktrace ( rawError ) ,
415417 catcherVersion : this . version ,
416418 } ;
417419
@@ -463,44 +465,6 @@ export default class Catcher {
463465 } ;
464466 }
465467
466- /**
467- * Return event title
468- *
469- * @param error - event from which to get the title
470- */
471- private getTitle ( error : Error | string ) : string {
472- const notAnError = ! ( error instanceof Error ) ;
473-
474- /**
475- * Case when error is 'reason' of PromiseRejectionEvent
476- * and reject() provided with text reason instead of Error()
477- */
478- if ( notAnError ) {
479- return error . toString ( ) as string ;
480- }
481-
482- return ( error as Error ) . message ;
483- }
484-
485- /**
486- * Return event type: TypeError, ReferenceError etc
487- *
488- * @param error - caught error
489- */
490- private getType ( error : Error | string ) : HawkJavaScriptEvent [ 'type' ] {
491- const notAnError = ! ( error instanceof Error ) ;
492-
493- /**
494- * Case when error is 'reason' of PromiseRejectionEvent
495- * and reject() provided with text reason instead of Error()
496- */
497- if ( notAnError ) {
498- return null ;
499- }
500-
501- return ( error as Error ) . name ;
502- }
503-
504468 /**
505469 * Release version
506470 */
@@ -590,7 +554,7 @@ export default class Catcher {
590554 *
591555 * @param error - event from which to get backtrace
592556 */
593- private async getBacktrace ( error : Error | string ) : Promise < HawkJavaScriptEvent [ 'backtrace' ] > {
557+ private async getBacktrace ( error : unknown ) : Promise < HawkJavaScriptEvent [ 'backtrace' ] > {
594558 const notAnError = ! ( error instanceof Error ) ;
595559
596560 /**
@@ -613,9 +577,9 @@ export default class Catcher {
613577 /**
614578 * Return some details
615579 *
616- * @param {Error|string } error — caught error
580+ * @param {Error } error — caught error
617581 */
618- private getAddons ( error : Error | string ) : HawkJavaScriptEvent [ 'addons' ] {
582+ private getAddons ( error : unknown ) : HawkJavaScriptEvent [ 'addons' ] {
619583 const { innerWidth, innerHeight } = window ;
620584 const userAgent = window . navigator . userAgent ;
621585 const location = window . location . href ;
@@ -649,9 +613,9 @@ export default class Catcher {
649613 /**
650614 * Compose raw data object
651615 *
652- * @param {Error|string } error — caught error
616+ * @param {Error } error — caught error
653617 */
654- private getRawData ( error : Error | string ) : Json | undefined {
618+ private getRawData ( error : unknown ) : Json | undefined {
655619 if ( ! ( error instanceof Error ) ) {
656620 return ;
657621 }
@@ -672,7 +636,10 @@ export default class Catcher {
672636 * @param errorFormatted - Hawk event prepared for sending
673637 * @param integrationAddons - extra addons
674638 */
675- private appendIntegrationAddons ( errorFormatted : CatcherMessage , integrationAddons : JavaScriptCatcherIntegrations ) : void {
639+ private appendIntegrationAddons (
640+ errorFormatted : CatcherMessage ,
641+ integrationAddons : JavaScriptCatcherIntegrations
642+ ) : void {
676643 Object . assign ( errorFormatted . payload . addons , integrationAddons ) ;
677644 }
678645}
0 commit comments