@cloudcare/browser-core 3.1.18 → 3.1.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/cjs/browser/fetchObservable.js +62 -32
  2. package/cjs/browser/fetchObservable.js.map +1 -1
  3. package/cjs/browser/xhrObservable.js +31 -39
  4. package/cjs/browser/xhrObservable.js.map +1 -1
  5. package/cjs/dataMap.js +1 -0
  6. package/cjs/dataMap.js.map +1 -1
  7. package/cjs/helper/deviceInfo.js +1 -2
  8. package/cjs/helper/deviceInfo.js.map +1 -1
  9. package/cjs/helper/enums.js +6 -1
  10. package/cjs/helper/enums.js.map +1 -1
  11. package/cjs/helper/instrumentMethod.js +47 -44
  12. package/cjs/helper/instrumentMethod.js.map +1 -1
  13. package/cjs/helper/observable.js +2 -2
  14. package/cjs/helper/observable.js.map +1 -1
  15. package/cjs/helper/timer.js +2 -2
  16. package/cjs/helper/timer.js.map +1 -1
  17. package/cjs/helper/tools.js +15 -0
  18. package/cjs/helper/tools.js.map +1 -1
  19. package/cjs/helper/valueHistory.js +123 -0
  20. package/cjs/helper/valueHistory.js.map +1 -0
  21. package/cjs/index.js +4 -4
  22. package/cjs/index.js.map +1 -1
  23. package/cjs/session/sessionManagement.js +4 -2
  24. package/cjs/session/sessionManagement.js.map +1 -1
  25. package/cjs/tracekit/tracekit.js +29 -25
  26. package/cjs/tracekit/tracekit.js.map +1 -1
  27. package/esm/browser/fetchObservable.js +63 -34
  28. package/esm/browser/fetchObservable.js.map +1 -1
  29. package/esm/browser/xhrObservable.js +33 -41
  30. package/esm/browser/xhrObservable.js.map +1 -1
  31. package/esm/dataMap.js +1 -0
  32. package/esm/dataMap.js.map +1 -1
  33. package/esm/helper/deviceInfo.js +1 -2
  34. package/esm/helper/deviceInfo.js.map +1 -1
  35. package/esm/helper/enums.js +4 -0
  36. package/esm/helper/enums.js.map +1 -1
  37. package/esm/helper/instrumentMethod.js +48 -44
  38. package/esm/helper/instrumentMethod.js.map +1 -1
  39. package/esm/helper/observable.js +2 -2
  40. package/esm/helper/observable.js.map +1 -1
  41. package/esm/helper/timer.js +2 -2
  42. package/esm/helper/timer.js.map +1 -1
  43. package/esm/helper/tools.js +13 -0
  44. package/esm/helper/tools.js.map +1 -1
  45. package/esm/helper/valueHistory.js +115 -0
  46. package/esm/helper/valueHistory.js.map +1 -0
  47. package/esm/index.js +1 -1
  48. package/esm/index.js.map +1 -1
  49. package/esm/session/sessionManagement.js +4 -2
  50. package/esm/session/sessionManagement.js.map +1 -1
  51. package/esm/tracekit/tracekit.js +30 -26
  52. package/esm/tracekit/tracekit.js.map +1 -1
  53. package/package.json +2 -2
  54. package/src/browser/fetchObservable.js +71 -50
  55. package/src/browser/xhrObservable.js +39 -54
  56. package/src/dataMap.js +1 -0
  57. package/src/helper/deviceInfo.js +1 -2
  58. package/src/helper/enums.js +4 -1
  59. package/src/helper/instrumentMethod.js +61 -44
  60. package/src/helper/observable.js +2 -2
  61. package/src/helper/timer.js +5 -2
  62. package/src/helper/tools.js +13 -0
  63. package/src/helper/valueHistory.js +116 -0
  64. package/src/index.js +1 -1
  65. package/src/session/sessionManagement.js +4 -2
  66. package/src/tracekit/tracekit.js +29 -25
  67. package/cjs/helper/contextHistory.js +0 -117
  68. package/cjs/helper/contextHistory.js.map +0 -1
  69. package/esm/helper/contextHistory.js +0 -109
  70. package/esm/helper/contextHistory.js.map +0 -1
  71. package/src/helper/contextHistory.js +0 -101
@@ -1,18 +1,10 @@
1
- import { instrumentMethodAndCallOriginal } from '../helper/instrumentMethod'
1
+ import { instrumentMethod } from '../helper/instrumentMethod'
2
2
  import { Observable } from '../helper/observable'
3
3
  import { normalizeUrl } from '../helper/urlPolyfill'
4
- import {
5
- shallowClone,
6
- elapsed,
7
- relativeNow,
8
- clocksNow,
9
- timeStampNow,
10
- UUID
11
- } from '../helper/tools'
4
+ import { shallowClone, elapsed, clocksNow, timeStampNow } from '../helper/tools'
12
5
  import { addEventListener } from '../browser/addEventListener'
13
6
  var xhrObservable
14
- var xhrContexts = {}
15
- var DATA_FLUX_REQUEST_ID_KEY = '_DATAFLUX_REQUEST_UUID'
7
+ var xhrContexts = new WeakMap()
16
8
  export function initXhrObservable() {
17
9
  if (!xhrObservable) {
18
10
  xhrObservable = createXhrObservable()
@@ -22,30 +14,25 @@ export function initXhrObservable() {
22
14
 
23
15
  function createXhrObservable() {
24
16
  return new Observable(function (observable) {
25
- var openInstrumentMethod = instrumentMethodAndCallOriginal(
17
+ var openInstrumentMethod = instrumentMethod(
26
18
  XMLHttpRequest.prototype,
27
19
  'open',
28
- {
29
- before: openXhr
30
- }
20
+ openXhr
31
21
  )
32
22
 
33
- var sendInstrumentMethod = instrumentMethodAndCallOriginal(
23
+ var sendInstrumentMethod = instrumentMethod(
34
24
  XMLHttpRequest.prototype,
35
25
  'send',
36
- {
37
- before: function () {
38
- sendXhr.call(this, observable)
39
- }
40
- }
26
+ function (call) {
27
+ sendXhr(call, observable)
28
+ },
29
+ { computeHandlingStack: true }
41
30
  )
42
31
 
43
- var abortInstrumentMethod = instrumentMethodAndCallOriginal(
32
+ var abortInstrumentMethod = instrumentMethod(
44
33
  XMLHttpRequest.prototype,
45
34
  'abort',
46
- {
47
- before: abortXhr
48
- }
35
+ abortXhr
49
36
  )
50
37
 
51
38
  return function () {
@@ -56,40 +43,41 @@ function createXhrObservable() {
56
43
  })
57
44
  }
58
45
 
59
- function openXhr(method, url) {
60
- var requestUUID = this[DATA_FLUX_REQUEST_ID_KEY] || UUID()
61
- this[DATA_FLUX_REQUEST_ID_KEY] = requestUUID
62
- xhrContexts[requestUUID] = {
46
+ function openXhr(params) {
47
+ var xhr = params.target
48
+ var method = params.parameters[0]
49
+ var url = params.parameters[1]
50
+ xhrContexts.set(xhr, {
63
51
  state: 'open',
64
52
  method: String(method).toUpperCase(),
65
53
  url: normalizeUrl(String(url))
66
- }
54
+ })
67
55
  }
68
56
 
69
- function sendXhr(observable) {
70
- var context = xhrContexts[this[DATA_FLUX_REQUEST_ID_KEY]]
57
+ function sendXhr(params, observable) {
58
+ var xhr = params.target
59
+ var handlingStack = params.handlingStack
60
+ var context = xhrContexts.get(xhr)
71
61
  if (!context) {
72
62
  return
73
63
  }
74
64
  var startContext = context
75
65
  startContext.state = 'start'
76
- startContext.startTime = relativeNow()
77
66
  startContext.startClocks = clocksNow()
78
67
  startContext.isAborted = false
79
- startContext.xhr = this
68
+ startContext.xhr = xhr
69
+ startContext.handlingStack = handlingStack
80
70
  var hasBeenReported = false
81
- var stopInstrumentingOnReadyStateChange = instrumentMethodAndCallOriginal(
82
- this,
71
+ var stopInstrumentingOnReadyStateChange = instrumentMethod(
72
+ xhr,
83
73
  'onreadystatechange',
84
- {
85
- before: function () {
86
- if (this.readyState === XMLHttpRequest.DONE) {
87
- // Try to report the XHR as soon as possible, because the XHR may be mutated by the
88
- // application during a future event. For example, Angular is calling .abort() on
89
- // completed requests during a onreadystatechange event, so the status becomes '0'
90
- // before the request is collected.
91
- onEnd.call(this)
92
- }
74
+ function () {
75
+ if (xhr.readyState === XMLHttpRequest.DONE) {
76
+ // Try to report the XHR as soon as possible, because the XHR may be mutated by the
77
+ // application during a future event. For example, Angular is calling .abort() on
78
+ // completed requests during a onreadystatechange event, so the status becomes '0'
79
+ // before the request is collected.
80
+ onEnd()
93
81
  }
94
82
  }
95
83
  ).stop
@@ -107,19 +95,16 @@ function sendXhr(observable) {
107
95
  startContext.startClocks.timeStamp,
108
96
  timeStampNow()
109
97
  )
110
- completeContext.status = this.status
98
+ completeContext.status = xhr.status
111
99
  observable.notify(shallowClone(completeContext))
112
- clearRequestId.call(this)
113
100
  }
114
- var unsubscribeLoadEndListener = addEventListener(this, 'loadend', onEnd).stop
101
+ var unsubscribeLoadEndListener = addEventListener(xhr, 'loadend', onEnd).stop
115
102
  observable.notify(startContext)
116
103
  }
117
- function clearRequestId() {
118
- delete xhrContexts[this[DATA_FLUX_REQUEST_ID_KEY]]
119
- delete this[DATA_FLUX_REQUEST_ID_KEY]
120
- }
121
- function abortXhr() {
122
- var context = xhrContexts[this[DATA_FLUX_REQUEST_ID_KEY]]
104
+
105
+ function abortXhr(params) {
106
+ var xhr = params.target
107
+ var context = xhrContexts.get(xhr)
123
108
  if (context) {
124
109
  context.isAborted = true
125
110
  }
package/src/dataMap.js CHANGED
@@ -67,6 +67,7 @@ export var dataMap = {
67
67
  largest_contentful_paint_element_selector:
68
68
  'view.largest_contentful_paint_element_selector',
69
69
  cumulative_layout_shift: 'view.cumulative_layout_shift',
70
+ cumulative_layout_shift_time: 'view.cumulative_layout_shift_time',
70
71
  cumulative_layout_shift_target_selector:
71
72
  'view.cumulative_layout_shift_target_selector',
72
73
  first_input_delay: 'view.first_input_delay',
@@ -612,7 +612,6 @@ var _deviceInfo = {}
612
612
  if (typeof window !== 'undefined') {
613
613
  _deviceInfo = {
614
614
  os: MethodLibrary.getOS(),
615
- MethodLibrary,
616
615
  osVersion: MethodLibrary.getOSVersion().version,
617
616
  osVersionMajor: MethodLibrary.getOSVersion().osMajor,
618
617
  browser: MethodLibrary.getBrowserInfo().browser,
@@ -620,7 +619,7 @@ if (typeof window !== 'undefined') {
620
619
  browserVersionMajor: MethodLibrary.getBrowserInfo().browserMajor,
621
620
  screenSize: window.screen.width + '*' + window.screen.height,
622
621
  networkType: MethodLibrary.getNetwork(),
623
- divice: MethodLibrary.getDeviceType()
622
+ device: MethodLibrary.getDeviceType()
624
623
  }
625
624
  }
626
625
  export var deviceInfo = _deviceInfo
@@ -64,7 +64,10 @@ export var RumEventType = {
64
64
  RESOURCE: 'resource',
65
65
  LOGGER: 'logger'
66
66
  }
67
-
67
+ export var RumLongTaskEntryType = {
68
+ LONG_TASK: 'long-task',
69
+ LONG_ANIMATION_FRAME: 'long-animation-frame'
70
+ }
68
71
  export var ViewLoadingType = {
69
72
  INITIAL_LOAD: 'initial_load',
70
73
  ROUTE_CHANGE: 'route_change'
@@ -1,53 +1,70 @@
1
- import { noop } from './tools'
1
+ import { noop, arrayFrom, startsWith } from './tools'
2
2
  import { setTimeout } from './timer'
3
3
  import { callMonitored } from './monitor'
4
- export function instrumentMethod(object, method, instrumentationFactory) {
5
- var original = object[method]
4
+ import { createHandlingStack } from './errorTools'
5
+ export function instrumentMethod(targetPrototype, method, onPreCall, opts) {
6
+ var computeHandlingStack = opts && opts.computeHandlingStack
7
+ var original = targetPrototype[method]
6
8
 
7
- var instrumentation = instrumentationFactory(original)
9
+ if (typeof original !== 'function') {
10
+ if (startsWith(method, 'on')) {
11
+ original = noop
12
+ } else {
13
+ return { stop: noop }
14
+ }
15
+ }
16
+
17
+ var stopped = false
8
18
 
9
- var instrumentationWrapper = function () {
10
- if (typeof instrumentation !== 'function') {
11
- return undefined
19
+ var instrumentation = function () {
20
+ if (stopped) {
21
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call
22
+ return original.apply(this, arguments)
12
23
  }
24
+
25
+ var parameters = arrayFrom(arguments)
26
+
27
+ var postCallCallback
28
+
29
+ callMonitored(onPreCall, null, [
30
+ {
31
+ target: this,
32
+ parameters: parameters,
33
+ onPostCall: function (callback) {
34
+ postCallCallback = callback
35
+ },
36
+ handlingStack: computeHandlingStack ? createHandlingStack() : undefined
37
+ }
38
+ ])
39
+
40
+ var result = original.apply(this, parameters)
41
+
42
+ if (postCallCallback) {
43
+ callMonitored(postCallCallback, null, [result])
44
+ }
45
+
13
46
  // eslint-disable-next-line @typescript-eslint/no-unsafe-return
14
- return instrumentation.apply(this, arguments)
47
+ return result
15
48
  }
16
- object[method] = instrumentationWrapper
49
+
50
+ targetPrototype[method] = instrumentation
51
+
17
52
  return {
18
53
  stop: function () {
19
- if (object[method] === instrumentationWrapper) {
20
- object[method] = original
21
- } else {
22
- instrumentation = original
54
+ stopped = true
55
+ // If the instrumentation has been removed by a third party, keep the last one
56
+ if (targetPrototype[method] === instrumentation) {
57
+ targetPrototype[method] = original
23
58
  }
24
59
  }
25
60
  }
26
61
  }
27
62
 
28
- export function instrumentMethodAndCallOriginal(object, method, aliasOption) {
29
- return instrumentMethod(object, method, function (original) {
30
- return function () {
31
- var result
32
- if (aliasOption && aliasOption.before) {
33
- callMonitored(aliasOption.before, this, arguments)
34
- // aliasOption.before.apply(this, arguments)
35
- }
36
- if (typeof original === 'function') {
37
- // eslint-disable-next-line @typescript-eslint/no-unsafe-call
38
- result = original.apply(this, arguments)
39
- }
40
- if (aliasOption && aliasOption.after) {
41
- callMonitored(aliasOption.after, this, arguments)
42
- // aliasOption.after.apply(this, arguments)
43
- }
44
- return result
45
- }
46
- })
47
- }
48
-
49
- export function instrumentSetter(object, property, after) {
50
- var originalDescriptor = Object.getOwnPropertyDescriptor(object, property)
63
+ export function instrumentSetter(targetPrototype, property, after) {
64
+ var originalDescriptor = Object.getOwnPropertyDescriptor(
65
+ targetPrototype,
66
+ property
67
+ )
51
68
  if (
52
69
  !originalDescriptor ||
53
70
  !originalDescriptor.set ||
@@ -55,12 +72,13 @@ export function instrumentSetter(object, property, after) {
55
72
  ) {
56
73
  return { stop: noop }
57
74
  }
75
+
58
76
  var stoppedInstrumentation = noop
59
- var instrumentation = function (thisObject, value) {
77
+ var instrumentation = function (target, value) {
60
78
  // put hooked setter into event loop to avoid of set latency
61
79
  setTimeout(function () {
62
80
  if (instrumentation !== stoppedInstrumentation) {
63
- after(thisObject, value)
81
+ after(target, value)
64
82
  }
65
83
  }, 0)
66
84
  }
@@ -70,21 +88,20 @@ export function instrumentSetter(object, property, after) {
70
88
  instrumentation(this, value)
71
89
  }
72
90
 
73
- Object.defineProperty(object, property, {
91
+ Object.defineProperty(targetPrototype, property, {
74
92
  set: instrumentationWrapper
75
93
  })
76
94
 
77
95
  return {
78
96
  stop: function () {
79
97
  if (
80
- Object.getOwnPropertyDescriptor(object, property) &&
81
- Object.getOwnPropertyDescriptor(object, property).set ===
98
+ Object.getOwnPropertyDescriptor(targetPrototype, property) &&
99
+ Object.getOwnPropertyDescriptor(targetPrototype, property).set ===
82
100
  instrumentationWrapper
83
101
  ) {
84
- Object.defineProperty(object, property, originalDescriptor)
85
- } else {
86
- instrumentation = stoppedInstrumentation
102
+ Object.defineProperty(targetPrototype, property, originalDescriptor)
87
103
  }
104
+ instrumentation = stoppedInstrumentation
88
105
  }
89
106
  }
90
107
  }
@@ -6,10 +6,10 @@ var _Observable = function (onFirstSubscribe) {
6
6
  }
7
7
  _Observable.prototype = {
8
8
  subscribe: function (f) {
9
- if (!this.observers.length && this.onFirstSubscribe) {
9
+ this.observers.push(f)
10
+ if (!this.observers.length === 1 && this.onFirstSubscribe) {
10
11
  this.onLastUnsubscribe = this.onFirstSubscribe(this) || undefined
11
12
  }
12
- this.observers.push(f)
13
13
  var _this = this
14
14
  return {
15
15
  unsubscribe: function () {
@@ -13,9 +13,12 @@ export function clearTimeout(timeoutId) {
13
13
  }
14
14
 
15
15
  export function setInterval(callback, delay) {
16
- return getZoneJsOriginalValue(window, 'setInterval')(monitor(callback), delay)
16
+ return getZoneJsOriginalValue(getGlobalObject(), 'setInterval')(
17
+ monitor(callback),
18
+ delay
19
+ )
17
20
  }
18
21
 
19
22
  export function clearInterval(timeoutId) {
20
- getZoneJsOriginalValue(window, 'clearInterval')(timeoutId)
23
+ getZoneJsOriginalValue(getGlobalObject(), 'clearInterval')(timeoutId)
21
24
  }
@@ -1729,7 +1729,20 @@ export function startsWith(candidate, search) {
1729
1729
  export function endsWith(candidate, search) {
1730
1730
  return candidate.slice(-search.length) === search
1731
1731
  }
1732
+ export function removeDuplicates(array) {
1733
+ var set = new Set()
1734
+ array.forEach(function (item) {
1735
+ set.add(item)
1736
+ })
1737
+ return arrayFrom(set)
1738
+ }
1732
1739
 
1740
+ export function removeItem(array, item) {
1741
+ var index = array.indexOf(item)
1742
+ if (index >= 0) {
1743
+ array.splice(index, 1)
1744
+ }
1745
+ }
1733
1746
  export function tryToClone(response) {
1734
1747
  try {
1735
1748
  return response.clone()
@@ -0,0 +1,116 @@
1
+ import { relativeNow, ONE_MINUTE, removeItem, addDuration } from './tools'
2
+ import { setInterval, clearInterval } from './timer'
3
+ var END_OF_TIMES = Infinity
4
+
5
+ export var CLEAR_OLD_VALUES_INTERVAL = ONE_MINUTE
6
+
7
+ /**
8
+ *
9
+ * @param {expireDelay,maxEntries } params
10
+ * @returns
11
+ */
12
+ export function createValueHistory(params) {
13
+ var expireDelay = params.expireDelay
14
+ var maxEntries = params.maxEntries
15
+
16
+ var entries = []
17
+ var clearOldValuesInterval = setInterval(function () {
18
+ return clearOldValues()
19
+ }, CLEAR_OLD_VALUES_INTERVAL)
20
+
21
+ function clearOldValues() {
22
+ var oldTimeThreshold = relativeNow() - expireDelay
23
+ while (
24
+ entries.length > 0 &&
25
+ entries[entries.length - 1].endTime < oldTimeThreshold
26
+ ) {
27
+ entries.pop()
28
+ }
29
+ }
30
+
31
+ function add(value, startTime) {
32
+ var entry = {
33
+ value: value,
34
+ startTime: startTime,
35
+ endTime: END_OF_TIMES,
36
+ remove: function () {
37
+ removeItem(entries, entry)
38
+ },
39
+ close: function (endTime) {
40
+ entry.endTime = endTime
41
+ }
42
+ }
43
+
44
+ if (maxEntries && entries.length >= maxEntries) {
45
+ entries.pop()
46
+ }
47
+
48
+ entries.unshift(entry)
49
+
50
+ return entry
51
+ }
52
+
53
+ function find(startTime, options) {
54
+ if (typeof startTime === 'undefined') {
55
+ startTime = END_OF_TIMES
56
+ }
57
+ if (typeof options === 'undefined') {
58
+ options = { returnInactive: false }
59
+ }
60
+ for (var entry of entries) {
61
+ if (entry.startTime <= startTime) {
62
+ if (options.returnInactive || startTime <= entry.endTime) {
63
+ return entry.value
64
+ }
65
+ break
66
+ }
67
+ }
68
+ }
69
+
70
+ function closeActive(endTime) {
71
+ var latestEntry = entries[0]
72
+ if (latestEntry && latestEntry.endTime === END_OF_TIMES) {
73
+ latestEntry.close(endTime)
74
+ }
75
+ }
76
+
77
+ function findAll(startTime, duration) {
78
+ if (startTime === undefined) {
79
+ startTime = END_OF_TIMES
80
+ }
81
+ if (duration === undefined) {
82
+ duration = 0
83
+ }
84
+ var endTime = addDuration(startTime, duration)
85
+ return entries
86
+ .filter(function (entry) {
87
+ return entry.startTime <= endTime && startTime <= entry.endTime
88
+ })
89
+ .map(function (entry) {
90
+ return entry.value
91
+ })
92
+ }
93
+
94
+ /**
95
+ * Remove all entries from this collection.
96
+ */
97
+ function reset() {
98
+ entries = []
99
+ }
100
+
101
+ /**
102
+ * Stop internal garbage collection of past entries.
103
+ */
104
+ function stop() {
105
+ clearInterval(clearOldValuesInterval)
106
+ }
107
+
108
+ return {
109
+ add: add,
110
+ find: find,
111
+ closeActive: closeActive,
112
+ findAll: findAll,
113
+ reset: reset,
114
+ stop: stop
115
+ }
116
+ }
package/src/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export * from './helper/boundedBuffer'
2
- export * from './helper/contextHistory'
2
+ export * from './helper/valueHistory'
3
3
  export * from './helper/deviceInfo'
4
4
  export * from './helper/enums'
5
5
  export * from './helper/instrumentMethod'
@@ -3,7 +3,7 @@ import {
3
3
  addEventListeners,
4
4
  addEventListener
5
5
  } from '../browser/addEventListener'
6
- import { ContextHistory } from '../helper/contextHistory'
6
+ import { createValueHistory } from '../helper/valueHistory'
7
7
  import { startSessionStore } from './sessionStore'
8
8
  import { SESSION_TIME_OUT_DELAY } from './sessionConstants'
9
9
  import { DOM_EVENT } from '../helper/enums'
@@ -25,7 +25,9 @@ export var startSessionManager = function (
25
25
  return sessionStore.stop()
26
26
  })
27
27
 
28
- var sessionContextHistory = new ContextHistory(SESSION_CONTEXT_TIMEOUT_DELAY)
28
+ var sessionContextHistory = createValueHistory({
29
+ expireDelay: SESSION_CONTEXT_TIMEOUT_DELAY
30
+ })
29
31
  stopCallbacks.push(function () {
30
32
  return sessionContextHistory.stop()
31
33
  })
@@ -1,4 +1,4 @@
1
- import { instrumentMethodAndCallOriginal } from '../helper/instrumentMethod'
1
+ import { instrumentMethod } from '../helper/instrumentMethod'
2
2
  import { isNullUndefinedDefaultValue } from '../helper/tools'
3
3
  import { computeStackTrace } from './computeStackTrace'
4
4
 
@@ -52,27 +52,31 @@ export function startUnhandledErrorCollection(callback) {
52
52
  * Install a global onerror handler
53
53
  */
54
54
  function instrumentOnError(callback) {
55
- return instrumentMethodAndCallOriginal(window, 'onerror', {
56
- before: function (messageObj, url, line, column, errorObj) {
57
- var stackTrace
58
- if (errorObj instanceof Error) {
59
- stackTrace = computeStackTrace(errorObj)
60
- } else {
61
- var location = {
62
- url: url,
63
- column: column,
64
- line: line
65
- }
66
- var parse = tryToParseMessage(messageObj)
55
+ return instrumentMethod(window, 'onerror', function (params) {
56
+ var parameters = params.parameters
57
+ var messageObj = parameters[0]
58
+ var url = parameters[1]
59
+ var line = parameters[2]
60
+ var column = parameters[3]
61
+ var errorObj = parameters[4]
62
+ var stackTrace
63
+ if (errorObj instanceof Error) {
64
+ stackTrace = computeStackTrace(errorObj)
65
+ } else {
66
+ var location = {
67
+ url: url,
68
+ column: column,
69
+ line: line
70
+ }
71
+ var parse = tryToParseMessage(messageObj)
67
72
 
68
- stackTrace = {
69
- name: parse.name,
70
- message: parse.message,
71
- stack: [location]
72
- }
73
+ stackTrace = {
74
+ name: parse.name,
75
+ message: parse.message,
76
+ stack: [location]
73
77
  }
74
- callback(stackTrace, isNullUndefinedDefaultValue(errorObj, messageObj))
75
78
  }
79
+ callback(stackTrace, isNullUndefinedDefaultValue(errorObj, messageObj))
76
80
  })
77
81
  }
78
82
  function tryToParseMessage(messageObj) {
@@ -91,11 +95,11 @@ function tryToParseMessage(messageObj) {
91
95
  * Install a global onunhandledrejection handler
92
96
  */
93
97
  function instrumentUnhandledRejection(callback) {
94
- return instrumentMethodAndCallOriginal(window, 'onunhandledrejection', {
95
- before: function (e) {
96
- var reason = e.reason || 'Empty reason'
97
- var stack = computeStackTrace(reason)
98
- callback(stack, reason)
99
- }
98
+ return instrumentMethod(window, 'onunhandledrejection', function (params) {
99
+ var parameters = params.parameters
100
+ var e = parameters[0]
101
+ var reason = e.reason || 'Empty reason'
102
+ var stack = computeStackTrace(reason)
103
+ callback(stack, reason)
100
104
  })
101
105
  }