@@ -26,6 +26,25 @@ var _window = typeof window !== 'undefined' ? window
26
26
var _document = _window . document ;
27
27
var _navigator = _window . navigator ;
28
28
29
+
30
+ function keepOriginalCallback ( original , callback ) {
31
+ return isFunction ( callback ) ?
32
+ function ( data ) { return callback ( data , original ) } :
33
+ callback ;
34
+ }
35
+
36
+ function wrappedCallback ( callback ) {
37
+ function dataCallback ( data , original ) {
38
+ var normalizedData = callback ( data ) || data ;
39
+ if ( original ) {
40
+ return original ( normalizedData ) || normalizedData ;
41
+ }
42
+ return normalizedData ;
43
+ }
44
+
45
+ return dataCallback ;
46
+ }
47
+
29
48
// First, check for JSON support
30
49
// If there is no JSON, we no-op the core features of Raven
31
50
// since JSON is required to encode the payload
@@ -550,13 +569,15 @@ Raven.prototype = {
550
569
*/
551
570
setDataCallback : function ( callback ) {
552
571
var original = this . _globalOptions . dataCallback ;
553
- this . _globalOptions . dataCallback = isFunction ( callback )
554
- ? function ( data ) { return callback ( data , original ) ; }
555
- : callback ;
556
-
572
+ this . _globalOptions . dataCallback =
573
+ keepOriginalCallback ( original , callback ) ;
557
574
return this ;
558
575
} ,
559
576
577
+ wrapDataCallback : function ( callback ) {
578
+ return this . setDataCallback ( wrappedCallback ( callback ) ) ;
579
+ } ,
580
+
560
581
/*
561
582
* Set the breadcrumbCallback option
562
583
*
@@ -566,13 +587,15 @@ Raven.prototype = {
566
587
*/
567
588
setBreadcrumbCallback : function ( callback ) {
568
589
var original = this . _globalOptions . breadcrumbCallback ;
569
- this . _globalOptions . breadcrumbCallback = isFunction ( callback )
570
- ? function ( data ) { return callback ( data , original ) ; }
571
- : callback ;
572
-
590
+ this . _globalOptions . breadcrumbCallback =
591
+ keepOriginalCallback ( original , callback ) ;
573
592
return this ;
574
593
} ,
575
594
595
+ wrapBreadcrumbCallback : function ( callback ) {
596
+ return this . setBreadcrumbCallback ( wrappedCallback ( callback ) ) ;
597
+ } ,
598
+
576
599
/*
577
600
* Set the shouldSendCallback option
578
601
*
@@ -582,13 +605,15 @@ Raven.prototype = {
582
605
*/
583
606
setShouldSendCallback : function ( callback ) {
584
607
var original = this . _globalOptions . shouldSendCallback ;
585
- this . _globalOptions . shouldSendCallback = isFunction ( callback )
586
- ? function ( data ) { return callback ( data , original ) ; }
587
- : callback ;
588
-
608
+ this . _globalOptions . shouldSendCallback =
609
+ keepOriginalCallback ( original , callback ) ;
589
610
return this ;
590
611
} ,
591
612
613
+ wrapShouldSendCallback : function ( callback ) {
614
+ return this . setShouldSendCallback ( wrappedCallback ( callback ) ) ;
615
+ } ,
616
+
592
617
/**
593
618
* Override the default HTTP transport mechanism that transmits data
594
619
* to the Sentry server.
0 commit comments