@@ -61,121 +61,111 @@ export class GlobalHandlers implements Integration {
61
61
const client = hub . getClient ( ) ;
62
62
const attachStacktrace = client && client . getOptions ( ) . attachStacktrace ;
63
63
64
- if ( this . _options . onerror ) {
64
+ if ( this . _options . onerror && ! this . _onErrorHandlerInstalled ) {
65
65
globalHandlerLog ( 'onerror' ) ;
66
- this . _installGlobalOnErrorHandler ( hub , attachStacktrace ) ;
66
+ _installGlobalOnErrorHandler ( hub , attachStacktrace ) ;
67
+ this . _onErrorHandlerInstalled = true ;
67
68
}
68
69
69
- if ( this . _options . onunhandledrejection ) {
70
+ if ( this . _options . onunhandledrejection && ! this . _onUnhandledRejectionHandlerInstalled ) {
70
71
globalHandlerLog ( 'onunhandledrejection' ) ;
71
- this . _installGlobalOnUnhandledRejectionHandler ( hub , attachStacktrace ) ;
72
+ _installGlobalOnUnhandledRejectionHandler ( hub , attachStacktrace ) ;
73
+ this . _onUnhandledRejectionHandlerInstalled = true ;
72
74
}
73
75
}
76
+ }
74
77
75
- /** JSDoc */
76
- private _installGlobalOnErrorHandler ( hub : Hub , attachStacktrace : boolean | undefined ) : void {
77
- if ( this . _onErrorHandlerInstalled ) {
78
- return ;
79
- }
80
-
81
- addInstrumentationHandler ( {
82
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
83
- callback : ( data : { msg : any ; url : any ; line : any ; column : any ; error : any } ) => {
84
- const error = data . error ;
85
- const isFailedOwnDelivery = error && error . __sentry_own_request__ === true ;
86
-
87
- if ( shouldIgnoreOnError ( ) || isFailedOwnDelivery ) {
88
- return ;
89
- }
90
-
91
- const event =
92
- error === undefined && isString ( data . msg )
93
- ? _eventFromIncompleteOnError ( data . msg , data . url , data . line , data . column )
94
- : _enhanceEventWithInitialFrame (
95
- eventFromUnknownInput ( error || data . msg , undefined , {
96
- attachStacktrace,
97
- rejection : false ,
98
- } ) ,
99
- data . url ,
100
- data . line ,
101
- data . column ,
102
- ) ;
103
-
104
- addExceptionMechanism ( event , {
105
- handled : false ,
106
- type : 'onerror' ,
107
- } ) ;
108
-
109
- hub . captureEvent ( event , {
110
- originalException : error ,
111
- } ) ;
112
- } ,
113
- type : 'error' ,
114
- } ) ;
115
-
116
- this . _onErrorHandlerInstalled = true ;
117
- }
118
-
119
- /** JSDoc */
120
- private _installGlobalOnUnhandledRejectionHandler ( hub : Hub , attachStacktrace : boolean | undefined ) : void {
121
- if ( this . _onUnhandledRejectionHandlerInstalled ) {
122
- return ;
123
- }
78
+ /** JSDoc */
79
+ function _installGlobalOnErrorHandler ( hub : Hub , attachStacktrace : boolean | undefined ) : void {
80
+ addInstrumentationHandler ( {
81
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
82
+ callback : ( data : { msg : any ; url : any ; line : any ; column : any ; error : any } ) => {
83
+ const error = data . error ;
84
+ const isFailedOwnDelivery = error && error . __sentry_own_request__ === true ;
85
+
86
+ if ( shouldIgnoreOnError ( ) || isFailedOwnDelivery ) {
87
+ return ;
88
+ }
89
+
90
+ const event =
91
+ error === undefined && isString ( data . msg )
92
+ ? _eventFromIncompleteOnError ( data . msg , data . url , data . line , data . column )
93
+ : _enhanceEventWithInitialFrame (
94
+ eventFromUnknownInput ( error || data . msg , undefined , {
95
+ attachStacktrace,
96
+ rejection : false ,
97
+ } ) ,
98
+ data . url ,
99
+ data . line ,
100
+ data . column ,
101
+ ) ;
102
+
103
+ addExceptionMechanism ( event , {
104
+ handled : false ,
105
+ type : 'onerror' ,
106
+ } ) ;
107
+
108
+ hub . captureEvent ( event , {
109
+ originalException : error ,
110
+ } ) ;
111
+ } ,
112
+ type : 'error' ,
113
+ } ) ;
114
+ }
124
115
125
- addInstrumentationHandler ( {
126
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
127
- callback : ( e : any ) => {
128
- let error = e ;
129
-
130
- // dig the object of the rejection out of known event types
131
- try {
132
- // PromiseRejectionEvents store the object of the rejection under 'reason'
133
- // see https://developer.mozilla.org/en-US/docs/Web/API/PromiseRejectionEvent
134
- if ( 'reason' in e ) {
135
- error = e . reason ;
136
- }
137
- // something, somewhere, (likely a browser extension) effectively casts PromiseRejectionEvents
138
- // to CustomEvents, moving the `promise` and `reason` attributes of the PRE into
139
- // the CustomEvent's `detail` attribute, since they're not part of CustomEvent's spec
140
- // see https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent and
141
- // https://github.com/getsentry/sentry-javascript/issues/2380
142
- else if ( 'detail' in e && 'reason' in e . detail ) {
143
- error = e . detail . reason ;
144
- }
145
- } catch ( _oO ) {
146
- // no-empty
116
+ /** JSDoc */
117
+ function _installGlobalOnUnhandledRejectionHandler ( hub : Hub , attachStacktrace : boolean | undefined ) : void {
118
+ addInstrumentationHandler ( {
119
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
120
+ callback : ( e : any ) => {
121
+ let error = e ;
122
+
123
+ // dig the object of the rejection out of known event types
124
+ try {
125
+ // PromiseRejectionEvents store the object of the rejection under 'reason'
126
+ // see https://developer.mozilla.org/en-US/docs/Web/API/PromiseRejectionEvent
127
+ if ( 'reason' in e ) {
128
+ error = e . reason ;
147
129
}
148
-
149
- const isFailedOwnDelivery = error && error . __sentry_own_request__ === true ;
150
- if ( shouldIgnoreOnError ( ) || isFailedOwnDelivery ) {
151
- return true ;
130
+ // something, somewhere, (likely a browser extension) effectively casts PromiseRejectionEvents
131
+ // to CustomEvents, moving the `promise` and `reason` attributes of the PRE into
132
+ // the CustomEvent's `detail` attribute, since they're not part of CustomEvent's spec
133
+ // see https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent and
134
+ // https://github.com/getsentry/sentry-javascript/issues/2380
135
+ else if ( 'detail' in e && 'reason' in e . detail ) {
136
+ error = e . detail . reason ;
152
137
}
138
+ } catch ( _oO ) {
139
+ // no-empty
140
+ }
153
141
154
- const event = isPrimitive ( error )
155
- ? _eventFromRejectionWithPrimitive ( error )
156
- : eventFromUnknownInput ( error , undefined , {
157
- attachStacktrace,
158
- rejection : true ,
159
- } ) ;
142
+ const isFailedOwnDelivery = error && error . __sentry_own_request__ === true ;
143
+ if ( shouldIgnoreOnError ( ) || isFailedOwnDelivery ) {
144
+ return true ;
145
+ }
160
146
161
- event . level = Severity . Error ;
147
+ const event = isPrimitive ( error )
148
+ ? _eventFromRejectionWithPrimitive ( error )
149
+ : eventFromUnknownInput ( error , undefined , {
150
+ attachStacktrace,
151
+ rejection : true ,
152
+ } ) ;
162
153
163
- addExceptionMechanism ( event , {
164
- handled : false ,
165
- type : 'onunhandledrejection' ,
166
- } ) ;
154
+ event . level = Severity . Error ;
167
155
168
- hub . captureEvent ( event , {
169
- originalException : error ,
170
- } ) ;
156
+ addExceptionMechanism ( event , {
157
+ handled : false ,
158
+ type : 'onunhandledrejection' ,
159
+ } ) ;
171
160
172
- return ;
173
- } ,
174
- type : 'unhandledrejection' ,
175
- } ) ;
161
+ hub . captureEvent ( event , {
162
+ originalException : error ,
163
+ } ) ;
176
164
177
- this . _onUnhandledRejectionHandlerInstalled = true ;
178
- }
165
+ return ;
166
+ } ,
167
+ type : 'unhandledrejection' ,
168
+ } ) ;
179
169
}
180
170
181
171
/**
0 commit comments