@@ -3,13 +3,50 @@ import { fill, getFunctionName, getGlobalObject } from '@sentry/utils';
3
3
4
4
import { wrap } from '../helpers' ;
5
5
6
+ const DEFAULT_EVENT_TARGET = [
7
+ 'EventTarget' ,
8
+ 'Window' ,
9
+ 'Node' ,
10
+ 'ApplicationCache' ,
11
+ 'AudioTrackList' ,
12
+ 'ChannelMergerNode' ,
13
+ 'CryptoOperation' ,
14
+ 'EventSource' ,
15
+ 'FileReader' ,
16
+ 'HTMLUnknownElement' ,
17
+ 'IDBDatabase' ,
18
+ 'IDBRequest' ,
19
+ 'IDBTransaction' ,
20
+ 'KeyOperation' ,
21
+ 'MediaController' ,
22
+ 'MessagePort' ,
23
+ 'ModalWindow' ,
24
+ 'Notification' ,
25
+ 'SVGElementInstance' ,
26
+ 'Screen' ,
27
+ 'TextTrack' ,
28
+ 'TextTrackCue' ,
29
+ 'TextTrackList' ,
30
+ 'WebSocket' ,
31
+ 'WebSocketWorker' ,
32
+ 'Worker' ,
33
+ 'XMLHttpRequest' ,
34
+ 'XMLHttpRequestEventTarget' ,
35
+ 'XMLHttpRequestUpload' ,
36
+ ] ;
37
+
6
38
type XMLHttpRequestProp = 'onload' | 'onerror' | 'onprogress' | 'onreadystatechange' ;
7
39
40
+ interface TryCatchOptions {
41
+ setTimeout ?: boolean ;
42
+ setInterval ?: boolean ;
43
+ requestAnimationFrame ?: boolean ;
44
+ XMLHttpRequest ?: boolean ;
45
+ eventTarget : boolean | string [ ] ;
46
+ }
47
+
8
48
/** Wrap timer functions and event targets to catch errors and provide better meta data */
9
49
export class TryCatch implements Integration {
10
- /** JSDoc */
11
- private _ignoreOnError : number = 0 ;
12
-
13
50
/**
14
51
* @inheritDoc
15
52
*/
@@ -20,6 +57,23 @@ export class TryCatch implements Integration {
20
57
*/
21
58
public static id : string = 'TryCatch' ;
22
59
60
+ /** JSDoc */
61
+ private readonly _options : TryCatchOptions ;
62
+
63
+ /**
64
+ * @inheritDoc
65
+ */
66
+ public constructor ( options ?: TryCatchOptions ) {
67
+ this . _options = {
68
+ setTimeout : true ,
69
+ setInterval : true ,
70
+ requestAnimationFrame : true ,
71
+ XMLHttpRequest : true ,
72
+ eventTarget : true ,
73
+ ...options ,
74
+ } ;
75
+ }
76
+
23
77
/** JSDoc */
24
78
private _wrapTimeFunction ( original : ( ) => void ) : ( ) => number {
25
79
return function ( this : any , ...args : any [ ] ) : number {
@@ -170,48 +224,25 @@ export class TryCatch implements Integration {
170
224
* and provide better metadata.
171
225
*/
172
226
public setupOnce ( ) : void {
173
- this . _ignoreOnError = this . _ignoreOnError ;
174
-
175
227
const global = getGlobalObject ( ) ;
176
228
177
- fill ( global , 'setTimeout' , this . _wrapTimeFunction . bind ( this ) ) ;
178
- fill ( global , 'setInterval' , this . _wrapTimeFunction . bind ( this ) ) ;
179
- fill ( global , 'requestAnimationFrame' , this . _wrapRAF . bind ( this ) ) ;
229
+ if ( this . _options . setTimeout ) {
230
+ fill ( global , 'setTimeout' , this . _wrapTimeFunction . bind ( this ) ) ;
231
+ }
232
+ if ( this . _options . setInterval ) {
233
+ fill ( global , 'setInterval' , this . _wrapTimeFunction . bind ( this ) ) ;
234
+ }
235
+ if ( this . _options . requestAnimationFrame ) {
236
+ fill ( global , 'requestAnimationFrame' , this . _wrapRAF . bind ( this ) ) ;
237
+ }
180
238
181
- if ( 'XMLHttpRequest' in global ) {
239
+ if ( this . _options . XMLHttpRequest && 'XMLHttpRequest' in global ) {
182
240
fill ( XMLHttpRequest . prototype , 'send' , this . _wrapXHR . bind ( this ) ) ;
183
241
}
184
242
185
- [
186
- 'EventTarget' ,
187
- 'Window' ,
188
- 'Node' ,
189
- 'ApplicationCache' ,
190
- 'AudioTrackList' ,
191
- 'ChannelMergerNode' ,
192
- 'CryptoOperation' ,
193
- 'EventSource' ,
194
- 'FileReader' ,
195
- 'HTMLUnknownElement' ,
196
- 'IDBDatabase' ,
197
- 'IDBRequest' ,
198
- 'IDBTransaction' ,
199
- 'KeyOperation' ,
200
- 'MediaController' ,
201
- 'MessagePort' ,
202
- 'ModalWindow' ,
203
- 'Notification' ,
204
- 'SVGElementInstance' ,
205
- 'Screen' ,
206
- 'TextTrack' ,
207
- 'TextTrackCue' ,
208
- 'TextTrackList' ,
209
- 'WebSocket' ,
210
- 'WebSocketWorker' ,
211
- 'Worker' ,
212
- 'XMLHttpRequest' ,
213
- 'XMLHttpRequestEventTarget' ,
214
- 'XMLHttpRequestUpload' ,
215
- ] . forEach ( this . _wrapEventTarget . bind ( this ) ) ;
243
+ if ( this . _options . eventTarget ) {
244
+ const eventTarget = Array . isArray ( this . _options . eventTarget ) ? this . _options . eventTarget : DEFAULT_EVENT_TARGET ;
245
+ eventTarget . forEach ( this . _wrapEventTarget . bind ( this ) ) ;
246
+ }
216
247
}
217
248
}
0 commit comments