@cloudcare/browser-core 1.1.3 → 1.2.0

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 (134) hide show
  1. package/cjs/{cookie.js → browser/cookie.js} +6 -37
  2. package/cjs/browser/fetchObservable.js +91 -0
  3. package/cjs/browser/xhrObservable.js +118 -0
  4. package/cjs/configuration/configuration.js +70 -0
  5. package/cjs/configuration/transportConfiguration.js +64 -0
  6. package/cjs/console/consoleObservable.js +84 -0
  7. package/cjs/dataMap.js +26 -21
  8. package/cjs/error/trackRuntimeError.js +27 -0
  9. package/cjs/helper/catchUserErrors.js +20 -0
  10. package/cjs/helper/contextHistory.js +134 -0
  11. package/cjs/helper/createEventRateLimiter.js +47 -0
  12. package/cjs/helper/deviceInfo.js +8 -25
  13. package/cjs/helper/display.js +31 -0
  14. package/cjs/helper/enums.js +28 -2
  15. package/cjs/helper/errorTools.js +63 -2
  16. package/cjs/helper/instrumentMethod.js +93 -0
  17. package/cjs/helper/lifeCycle.js +5 -3
  18. package/cjs/helper/observable.js +40 -2
  19. package/cjs/helper/tools.js +185 -9
  20. package/cjs/index.js +153 -23
  21. package/cjs/init.js +17 -27
  22. package/cjs/report/reportObservable.js +112 -0
  23. package/cjs/session/sessionConstants.js +13 -0
  24. package/cjs/session/sessionCookieStore.js +188 -0
  25. package/cjs/session/sessionManagement.js +96 -0
  26. package/cjs/session/sessionStore.js +150 -0
  27. package/cjs/synthetics/syntheticsWorkerValues.js +32 -0
  28. package/cjs/synthetics/usr.js +32 -0
  29. package/cjs/tracekit/computeStackTrace.js +73 -563
  30. package/cjs/tracekit/index.js +3 -15
  31. package/cjs/tracekit/tracekit.js +113 -0
  32. package/cjs/transport/batch.js +332 -0
  33. package/cjs/transport/httpRequest.js +112 -0
  34. package/cjs/transport/index.js +29 -0
  35. package/cjs/transport/sendWithRetryStrategy.js +177 -0
  36. package/cjs/transport/startBatchWithReplica.js +24 -0
  37. package/esm/{cookie.js → browser/cookie.js} +4 -35
  38. package/esm/browser/fetchObservable.js +77 -0
  39. package/esm/browser/xhrObservable.js +106 -0
  40. package/esm/configuration/configuration.js +55 -0
  41. package/esm/configuration/transportConfiguration.js +54 -0
  42. package/esm/console/consoleObservable.js +70 -0
  43. package/esm/dataMap.js +26 -21
  44. package/esm/error/trackRuntimeError.js +16 -0
  45. package/esm/helper/catchUserErrors.js +12 -0
  46. package/esm/helper/contextHistory.js +106 -0
  47. package/esm/helper/createEventRateLimiter.js +38 -0
  48. package/esm/helper/deviceInfo.js +6 -25
  49. package/esm/helper/display.js +21 -0
  50. package/esm/helper/enums.js +25 -1
  51. package/esm/helper/errorTools.js +58 -3
  52. package/esm/helper/instrumentMethod.js +81 -0
  53. package/esm/helper/lifeCycle.js +5 -3
  54. package/esm/helper/observable.js +39 -3
  55. package/esm/helper/tools.js +147 -1
  56. package/esm/index.js +17 -7
  57. package/esm/init.js +17 -22
  58. package/esm/report/reportObservable.js +98 -0
  59. package/esm/session/sessionConstants.js +3 -0
  60. package/esm/session/sessionCookieStore.js +168 -0
  61. package/esm/session/sessionManagement.js +78 -0
  62. package/esm/session/sessionStore.js +139 -0
  63. package/esm/synthetics/syntheticsWorkerValues.js +15 -0
  64. package/esm/synthetics/usr.js +18 -0
  65. package/esm/tracekit/computeStackTrace.js +73 -557
  66. package/esm/tracekit/index.js +1 -1
  67. package/esm/tracekit/tracekit.js +103 -0
  68. package/esm/transport/batch.js +316 -0
  69. package/esm/transport/httpRequest.js +104 -0
  70. package/esm/transport/index.js +3 -0
  71. package/esm/transport/sendWithRetryStrategy.js +165 -0
  72. package/esm/transport/startBatchWithReplica.js +15 -0
  73. package/package.json +2 -2
  74. package/src/.DS_Store +0 -0
  75. package/src/{cookie.js → browser/cookie.js} +6 -34
  76. package/src/browser/fetchObservable.js +86 -0
  77. package/src/browser/xhrObservable.js +102 -0
  78. package/src/configuration/configuration.js +61 -0
  79. package/src/configuration/transportConfiguration.js +42 -0
  80. package/src/console/consoleObservable.js +65 -0
  81. package/src/dataMap.js +26 -21
  82. package/src/error/trackRuntimeError.js +19 -0
  83. package/src/helper/catchUserErrors.js +12 -0
  84. package/src/helper/contextHistory.js +85 -0
  85. package/src/helper/createEventRateLimiter.js +37 -0
  86. package/src/helper/deviceInfo.js +5 -51
  87. package/src/helper/display.js +21 -0
  88. package/src/helper/enums.js +38 -14
  89. package/src/helper/errorTools.js +76 -12
  90. package/src/helper/instrumentMethod.js +97 -0
  91. package/src/helper/lifeCycle.js +5 -3
  92. package/src/helper/observable.js +33 -2
  93. package/src/helper/tools.js +135 -4
  94. package/src/index.js +18 -7
  95. package/src/init.js +17 -18
  96. package/src/report/reportObservable.js +113 -0
  97. package/src/session/sessionConstants.js +3 -0
  98. package/src/session/sessionCookieStore.js +159 -0
  99. package/src/session/sessionManagement.js +89 -0
  100. package/src/session/sessionStore.js +139 -0
  101. package/src/synthetics/syntheticsWorkerValues.js +22 -0
  102. package/src/synthetics/usr.js +18 -0
  103. package/src/tracekit/computeStackTrace.js +75 -551
  104. package/src/tracekit/index.js +1 -1
  105. package/src/tracekit/tracekit.js +100 -0
  106. package/src/transport/batch.js +289 -0
  107. package/src/transport/httpRequest.js +109 -0
  108. package/src/transport/index.js +3 -0
  109. package/src/transport/sendWithRetryStrategy.js +186 -0
  110. package/src/transport/startBatchWithReplica.js +26 -0
  111. package/cjs/configuration.js +0 -193
  112. package/cjs/errorCollection.js +0 -167
  113. package/cjs/fetchProxy.js +0 -161
  114. package/cjs/helper/errorFilter.js +0 -47
  115. package/cjs/sessionManagement.js +0 -221
  116. package/cjs/tracekit/report.js +0 -289
  117. package/cjs/transport.js +0 -373
  118. package/cjs/xhrProxy.js +0 -122
  119. package/esm/configuration.js +0 -176
  120. package/esm/errorCollection.js +0 -141
  121. package/esm/fetchProxy.js +0 -115
  122. package/esm/helper/errorFilter.js +0 -38
  123. package/esm/sessionManagement.js +0 -195
  124. package/esm/tracekit/report.js +0 -273
  125. package/esm/transport.js +0 -357
  126. package/esm/xhrProxy.js +0 -110
  127. package/src/configuration.js +0 -161
  128. package/src/errorCollection.js +0 -170
  129. package/src/fetchProxy.js +0 -108
  130. package/src/helper/errorFilter.js +0 -38
  131. package/src/sessionManagement.js +0 -224
  132. package/src/tracekit/report.js +0 -284
  133. package/src/transport.js +0 -380
  134. package/src/xhrProxy.js +0 -106
@@ -1,3 +1,4 @@
1
+ import { display } from '../helper/display'
1
2
  var VariableLibrary = {
2
3
  navigator: typeof window.navigator != 'undefined' ? window.navigator : {},
3
4
  // 信息map
@@ -56,20 +57,6 @@ var VariableLibrary = {
56
57
  ],
57
58
  os: [
58
59
  'Windows',
59
- 'Windows 2000',
60
- 'Windows XP',
61
- 'Windows Vista',
62
- 'Windows 7',
63
- 'Windows 8',
64
- 'Windows 8.1',
65
- 'Windows Server 2003',
66
- 'Windows ME',
67
- 'Windows 10',
68
- 'Windows 98',
69
- 'Windows 95',
70
- 'Windows NT 4.0',
71
- 'Windows CE',
72
- 'Windows 3.11',
73
60
  'Linux',
74
61
  'Mac OS',
75
62
  'Android',
@@ -101,12 +88,7 @@ var MethodLibrary = {
101
88
  Safari: u.indexOf('Safari') > -1,
102
89
  Chrome: u.indexOf('Chrome') > -1 || u.indexOf('CriOS') > -1,
103
90
  IE: u.indexOf('MSIE') > -1 || u.indexOf('Trident') > -1,
104
- 'IE 11': u.indexOf('Trident') > -1 && u.indexOf('rv:11.0') > -1,
105
- 'IE 10': u.indexOf('MSIE 10.0') > -1 && u.indexOf('Trident') > -1,
106
- 'IE 9': u.indexOf('MSIE 9.0') > -1 && u.indexOf('Trident') > -1,
107
- 'IE 8': u.indexOf('MSIE 9.0') > -1 && u.indexOf('Trident') > -1,
108
- 'IE 7': u.indexOf('MSIE 7.0') > -1 && u.indexOf('Trident') > -1,
109
- Edge: u.indexOf('Edg') > -1 || u.indexOf('Edge') > -1,
91
+ Edge: u.indexOf('Edge') > -1,
110
92
  Firefox: u.indexOf('Firefox') > -1 || u.indexOf('FxiOS') > -1,
111
93
  'Firefox Focus': u.indexOf('Focus') > -1,
112
94
  Chromium: u.indexOf('Chromium') > -1,
@@ -132,14 +114,13 @@ var MethodLibrary = {
132
114
  Baidu: u.indexOf('Baidu') > -1 || u.indexOf('BIDUBrowser') > -1,
133
115
  Maxthon: u.indexOf('Maxthon') > -1,
134
116
  Sogou: u.indexOf('MetaSr') > -1 || u.indexOf('Sogou') > -1,
135
- LBBROWSER: u.indexOf('LBBROWSER') > -1 || u.indexOf('LieBaoFast') > -1,
117
+ LBBROWSER: u.indexOf('LBBROWSER') > -1,
136
118
  '2345Explorer': u.indexOf('2345Explorer') > -1,
137
119
  TheWorld: u.indexOf('TheWorld') > -1,
138
120
  XiaoMi: u.indexOf('MiuiBrowser') > -1,
139
121
  Quark: u.indexOf('Quark') > -1,
140
122
  Qiyu: u.indexOf('Qiyu') > -1,
141
123
  Wechat: u.indexOf('MicroMessenger') > -1,
142
- WechatWork: u.indexOf('wxwork/') > -1,
143
124
  Taobao: u.indexOf('AliApp(TB') > -1,
144
125
  Alipay: u.indexOf('AliApp(AP') > -1,
145
126
  Weibo: u.indexOf('Weibo') > -1,
@@ -148,33 +129,6 @@ var MethodLibrary = {
148
129
  iQiYi: u.indexOf('IqiyiApp') > -1,
149
130
  // 系统或平台
150
131
  Windows: u.indexOf('Windows') > -1,
151
- 'Windows 2000':
152
- u.indexOf('Windows NT 5.0') > -1 || u.indexOf('Windows 2000') > -1,
153
- 'Windows XP':
154
- u.indexOf('Windows NT 5.1') > -1 || u.indexOf('Windows XP') > -1,
155
- 'Windows Server 2003': u.indexOf('Windows NT 5.2') > -1,
156
- 'Windows Vista': u.indexOf('Windows NT 6.0') > -1,
157
- 'Windows 7':
158
- u.indexOf('Windows 7') > -1 || u.indexOf('Windows NT 6.1') > -1,
159
- 'Windows 8':
160
- u.indexOf('Windows 8') > -1 || u.indexOf('Windows NT 6.2') > -1,
161
- 'Windows 8.1':
162
- u.indexOf('Windows 8.1') > -1 || u.indexOf('Windows NT 6.3') > -1,
163
- 'Windows ME':
164
- u.indexOf('Win 9x 4.90') > -1 || u.indexOf('Windows ME') > -1,
165
- 'Windows 10':
166
- u.indexOf('Windows 10.0') > -1 || u.indexOf('Windows NT 10.0') > -1,
167
- 'Windows 98': u.indexOf('Windows 98') > -1 || u.indexOf('Win98') > -1,
168
- 'Windows 95':
169
- u.indexOf('Windows 95') > -1 ||
170
- u.indexOf('Win95') > -1 ||
171
- u.indexOf('Windows_95') > -1,
172
- 'Windows NT 4.0':
173
- u.indexOf('Windows NT 4.0') > -1 ||
174
- u.indexOf('WinNT4.0') > -1 ||
175
- u.indexOf('WinNT') > -1,
176
- 'Windows CE': u.indexOf('Windows CE') > -1,
177
- 'Windows 3.11': u.indexOf('Win16') > -1,
178
132
  Linux: u.indexOf('Linux') > -1 || u.indexOf('X11') > -1,
179
133
  'Mac OS': u.indexOf('Macintosh') > -1,
180
134
  Android: u.indexOf('Android') > -1 || u.indexOf('Adr') > -1,
@@ -260,7 +214,7 @@ var MethodLibrary = {
260
214
  }
261
215
  if (osVersion[_this.os]) {
262
216
  _this.osVersion = osVersion[_this.os]()
263
- if (_this.osVersion == u) {
217
+ if (_this.osVersion === u) {
264
218
  _this.osVersion = ''
265
219
  }
266
220
  }
@@ -607,7 +561,7 @@ var MethodLibrary = {
607
561
  },
608
562
  // 位置获取失败
609
563
  function (error) {
610
- console.log(error)
564
+ display.warn(error)
611
565
  }
612
566
  )
613
567
  }
@@ -0,0 +1,21 @@
1
+
2
+ export var ConsoleApiName = {
3
+ log: 'log',
4
+ debug: 'debug',
5
+ info: 'info',
6
+ warn: 'warn',
7
+ error: 'error',
8
+ }
9
+ export var display = function(api) {
10
+ var args = [].slice.call(arguments, 1)
11
+ if (!Object.prototype.hasOwnProperty.call(ConsoleApiName, api)) {
12
+ api = ConsoleApiName.log
13
+ }
14
+ display[api].apply(display,args)
15
+ }
16
+
17
+ display.debug = console.debug.bind(console)
18
+ display.log = console.log.bind(console)
19
+ display.info = console.info.bind(console)
20
+ display.warn = console.warn.bind(console)
21
+ display.error = console.error.bind(console)
@@ -1,19 +1,34 @@
1
1
  export var DOM_EVENT = {
2
2
  BEFORE_UNLOAD: 'beforeunload',
3
- CLICK: 'click',
4
- KEY_DOWN: 'keydown',
5
- LOAD: 'load',
6
- POP_STATE: 'popstate',
7
- SCROLL: 'scroll',
8
- TOUCH_START: 'touchstart',
9
- VISIBILITY_CHANGE: 'visibilitychange',
10
- DOM_CONTENT_LOADED: 'DOMContentLoaded',
11
- POINTER_DOWN: 'pointerdown',
12
- POINTER_UP: 'pointerup',
13
- POINTER_CANCEL: 'pointercancel',
14
- HASH_CHANGE: 'hashchange',
15
- PAGE_HIDE: 'pagehide',
16
- MOUSE_DOWN: 'mousedown'
3
+ CLICK : 'click',
4
+ DBL_CLICK : 'dblclick',
5
+ KEY_DOWN : 'keydown',
6
+ LOAD : 'load',
7
+ POP_STATE : 'popstate',
8
+ SCROLL : 'scroll',
9
+ TOUCH_START : 'touchstart',
10
+ TOUCH_END : 'touchend',
11
+ TOUCH_MOVE : 'touchmove',
12
+ VISIBILITY_CHANGE : 'visibilitychange',
13
+ DOM_CONTENT_LOADED : 'DOMContentLoaded',
14
+ POINTER_DOWN : 'pointerdown',
15
+ POINTER_UP : 'pointerup',
16
+ POINTER_CANCEL : 'pointercancel',
17
+ HASH_CHANGE : 'hashchange',
18
+ PAGE_HIDE : 'pagehide',
19
+ MOUSE_DOWN : 'mousedown',
20
+ MOUSE_UP : 'mouseup',
21
+ MOUSE_MOVE : 'mousemove',
22
+ FOCUS : 'focus',
23
+ BLUR : 'blur',
24
+ CONTEXT_MENU : 'contextmenu',
25
+ RESIZE : 'resize',
26
+ CHANGE : 'change',
27
+ INPUT : 'input',
28
+ PLAY : 'play',
29
+ PAUSE : 'pause',
30
+ SECURITY_POLICY_VIOLATION : 'securitypolicyviolation',
31
+ SELECTION_CHANGE : 'selectionchange',
17
32
  }
18
33
  export var ResourceType = {
19
34
  DOCUMENT: 'document',
@@ -32,6 +47,11 @@ export var ActionType = {
32
47
  CLICK: 'click',
33
48
  CUSTOM: 'custom'
34
49
  }
50
+ export var FrustrationType = {
51
+ RAGE_CLICK :'rage_click',
52
+ ERROR_CLICK :'error_click',
53
+ DEAD_CLICK :'dead_click',
54
+ }
35
55
  export var RumEventType = {
36
56
  ACTION: 'action',
37
57
  ERROR: 'error',
@@ -41,6 +61,10 @@ export var RumEventType = {
41
61
  LOGGER: 'logger'
42
62
  }
43
63
 
64
+ export var ViewLoadingType = {
65
+ INITIAL_LOAD: 'initial_load',
66
+ ROUTE_CHANGE: 'route_change',
67
+ }
44
68
  export var RequestType = {
45
69
  FETCH: ResourceType.FETCH,
46
70
  XHR: ResourceType.XHR
@@ -1,5 +1,5 @@
1
- import { each , noop} from './tools'
2
- import { computeStackTrace} from '../tracekit'
1
+ import { each, noop, jsonStringify } from './tools'
2
+ import { computeStackTrace } from '../tracekit'
3
3
 
4
4
  export var ErrorSource = {
5
5
  AGENT: 'agent',
@@ -10,22 +10,63 @@ export var ErrorSource = {
10
10
  CUSTOM: 'custom'
11
11
  }
12
12
 
13
- export function formatUnknownError(stackTrace, errorObject, nonErrorPrefix,handlingStack) {
13
+ export function computeRawError(data) {
14
+ var stackTrace = data.stackTrace
15
+ var originalError = data.originalError
16
+ var handlingStack = data.handlingStack
17
+ var startClocks = data.startClocks
18
+ var nonErrorPrefix = data.nonErrorPrefix
19
+ var source = data.source
20
+ var handling = data.handling
21
+ if (
22
+ !stackTrace ||
23
+ (stackTrace.message === undefined && !(originalError instanceof Error))
24
+ ) {
25
+ return {
26
+ startClocks: startClocks,
27
+ source: source,
28
+ handling: handling,
29
+ originalError: originalError,
30
+ message: nonErrorPrefix + ' ' + jsonStringify(originalError),
31
+ stack: 'No stack, consider using an instance of Error',
32
+ handlingStack: handlingStack,
33
+ type: stackTrace && stackTrace.name
34
+ }
35
+ }
36
+
37
+ return {
38
+ startClocks: startClocks,
39
+ source: source,
40
+ handling: handling,
41
+ originalError: originalError,
42
+ message: stackTrace.message || 'Empty message',
43
+ stack: toStackTraceString(stackTrace),
44
+ handlingStack: handlingStack,
45
+ type: stackTrace.name,
46
+ causes: flattenErrorCauses(originalError, source)
47
+ }
48
+ }
49
+ export function formatUnknownError(
50
+ stackTrace,
51
+ errorObject,
52
+ nonErrorPrefix,
53
+ handlingStack
54
+ ) {
14
55
  if (
15
56
  !stackTrace ||
16
57
  (stackTrace.message === undefined && !(errorObject instanceof Error))
17
58
  ) {
18
59
  return {
19
- message: nonErrorPrefix + '' + JSON.stringify(errorObject),
60
+ message: nonErrorPrefix + '' + jsonStringify(errorObject),
20
61
  stack: 'No stack, consider using an instance of Error',
21
- handlingStack:handlingStack,
62
+ handlingStack: handlingStack,
22
63
  type: stackTrace && stackTrace.name
23
64
  }
24
65
  }
25
66
  return {
26
67
  message: stackTrace.message || 'Empty message',
27
68
  stack: toStackTraceString(stackTrace),
28
- handlingStack:handlingStack,
69
+ handlingStack: handlingStack,
29
70
  type: stackTrace.name
30
71
  }
31
72
  }
@@ -36,16 +77,16 @@ export function formatUnknownError(stackTrace, errorObject, nonErrorPrefix,handl
36
77
  - Has to be called at the utmost position of the call stack.
37
78
  - No internal monitoring should encapsulate the function, that is why we need to use callMonitored inside of it.
38
79
  */
39
- export function createHandlingStack() {
80
+ export function createHandlingStack() {
40
81
  /**
41
82
  * Skip the two internal frames:
42
83
  * - SDK API (console.error, ...)
43
84
  * - this function
44
85
  * in order to keep only the user calls
45
86
  */
46
- const internalFramesToSkip = 2
47
- const error = new Error()
48
- let formattedStack
87
+ var internalFramesToSkip = 2
88
+ var error = new Error()
89
+ var formattedStack
49
90
 
50
91
  // IE needs to throw the error to fill in the stack trace
51
92
  if (!error.stack) {
@@ -56,14 +97,14 @@ export function formatUnknownError(stackTrace, errorObject, nonErrorPrefix,handl
56
97
  }
57
98
  }
58
99
 
59
- const stackTrace = computeStackTrace(error)
100
+ var stackTrace = computeStackTrace(error)
60
101
  stackTrace.stack = stackTrace.stack.slice(internalFramesToSkip)
61
102
  formattedStack = toStackTraceString(stackTrace)
62
103
 
63
104
  return formattedStack
64
105
  }
65
106
  export function toStackTraceString(stack) {
66
- var result = stack.name || 'Error' + ': ' + stack.message
107
+ var result = formatErrorMessage(stack)
67
108
  each(stack.stack, function (frame) {
68
109
  var func = frame.func === '?' ? '<anonymous>' : frame.func
69
110
  var args =
@@ -79,3 +120,26 @@ export function toStackTraceString(stack) {
79
120
  export function formatErrorMessage(stack) {
80
121
  return (stack.name || 'Error') + ': ' + stack.message
81
122
  }
123
+ export function getFileFromStackTraceString(stack) {
124
+ var execResult = /@ (.+)/.exec(stack)
125
+ return execResult && execResult[1]
126
+ }
127
+ export function flattenErrorCauses(error, parentSource) {
128
+ var currentError = error
129
+ var causes = []
130
+ while (
131
+ currentError &&
132
+ currentError.cause instanceof Error &&
133
+ causes.length < 10
134
+ ) {
135
+ var stackTrace = computeStackTrace(currentError.cause)
136
+ causes.push({
137
+ message: currentError.cause.message,
138
+ source: parentSource,
139
+ type: stackTrace && stackTrace.name,
140
+ stack: stackTrace && toStackTraceString(stackTrace)
141
+ })
142
+ currentError = currentError.cause
143
+ }
144
+ return causes.length ? causes : undefined
145
+ }
@@ -0,0 +1,97 @@
1
+ import { noop } from './tools'
2
+
3
+ export function instrumentMethod(
4
+ object,
5
+ method,
6
+ instrumentationFactory
7
+ ) {
8
+ var original = object[method]
9
+
10
+ var instrumentation = instrumentationFactory(original)
11
+
12
+ var instrumentationWrapper = function () {
13
+ if (typeof instrumentation !== 'function') {
14
+ return undefined
15
+ }
16
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
17
+ return instrumentation.apply(this, arguments)
18
+ }
19
+ object[method] = instrumentationWrapper
20
+ return {
21
+ stop: function() {
22
+ if (object[method] === instrumentationWrapper) {
23
+ object[method] = original
24
+ } else {
25
+ instrumentation = original
26
+ }
27
+ },
28
+ }
29
+ }
30
+
31
+ export function instrumentMethodAndCallOriginal(
32
+ object,
33
+ method,
34
+ aliasOption
35
+ ) {
36
+ return instrumentMethod(
37
+ object,
38
+ method,
39
+ function(original) {
40
+ return function () {
41
+ var result
42
+ if (aliasOption && aliasOption.before) {
43
+ aliasOption.before.apply(this, arguments)
44
+ }
45
+ if (typeof original === 'function') {
46
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
47
+ result = original.apply(this, arguments)
48
+ }
49
+ if (aliasOption && aliasOption.after) {
50
+ aliasOption.after.apply(this, arguments)
51
+ }
52
+ return result
53
+ }
54
+ }
55
+
56
+ )
57
+ }
58
+
59
+ export function instrumentSetter(
60
+ object,
61
+ property,
62
+ after
63
+ ) {
64
+ var originalDescriptor = Object.getOwnPropertyDescriptor(object, property)
65
+ if (!originalDescriptor || !originalDescriptor.set || !originalDescriptor.configurable) {
66
+ return { stop: noop }
67
+ }
68
+
69
+ var instrumentation = function(thisObject, value) {
70
+ // put hooked setter into event loop to avoid of set latency
71
+ setTimeout(
72
+ function() {
73
+ after(thisObject, value)
74
+ },
75
+ 0
76
+ )
77
+ }
78
+
79
+ var instrumentationWrapper = function (value) {
80
+ originalDescriptor.set.call(this, value)
81
+ instrumentation(this, value)
82
+ }
83
+
84
+ Object.defineProperty(object, property, {
85
+ set: instrumentationWrapper,
86
+ })
87
+
88
+ return {
89
+ stop: function() {
90
+ if (Object.getOwnPropertyDescriptor(object, property) && Object.getOwnPropertyDescriptor(object, property).set === instrumentationWrapper) {
91
+ Object.defineProperty(object, property, originalDescriptor)
92
+ } else {
93
+ instrumentation = noop
94
+ }
95
+ },
96
+ }
97
+ }
@@ -1,13 +1,13 @@
1
1
  import { each, filter } from './tools'
2
2
  export var LifeCycleEventType = {
3
- PERFORMANCE_ENTRY_COLLECTED: 'PERFORMANCE_ENTRY_COLLECTED',
3
+ PERFORMANCE_ENTRIES_COLLECTED: 'PERFORMANCE_ENTRIES_COLLECTED',
4
4
  AUTO_ACTION_CREATED: 'AUTO_ACTION_CREATED',
5
5
  AUTO_ACTION_COMPLETED: 'AUTO_ACTION_COMPLETED',
6
- AUTO_ACTION_DISCARDED: 'AUTO_ACTION_DISCARDED',
7
6
  VIEW_CREATED: 'VIEW_CREATED',
8
7
  VIEW_UPDATED: 'VIEW_UPDATED',
9
8
  VIEW_ENDED: 'VIEW_ENDED',
10
9
  SESSION_RENEWED: 'SESSION_RENEWED',
10
+ SESSION_EXPIRED: 'SESSION_EXPIRED',
11
11
  DOM_MUTATED: 'DOM_MUTATED',
12
12
  BEFORE_UNLOAD: 'BEFORE_UNLOAD',
13
13
  REQUEST_STARTED: 'REQUEST_STARTED',
@@ -16,7 +16,9 @@ export var LifeCycleEventType = {
16
16
  RUM_EVENT_COLLECTED: 'RUM_EVENT_COLLECTED',
17
17
  RAW_ERROR_COLLECTED: 'RAW_ERROR_COLLECTED',
18
18
  RECORD_STARTED: 'RECORD_STARTED',
19
- RECORD_STOPPED: 'RECORD_STOPPED'
19
+ RECORD_STOPPED: 'RECORD_STOPPED',
20
+ RAW_LOG_COLLECTED: 'RAW_LOG_COLLECTED',
21
+ LOG_COLLECTED: 'LOG_COLLECTED'
20
22
  }
21
23
 
22
24
  export function LifeCycle() {
@@ -1,10 +1,26 @@
1
- import { each } from './tools'
2
- var _Observable = function () {
1
+ import { each, filter, map } from './tools'
2
+ var _Observable = function (onFirstSubscribe) {
3
3
  this.observers = []
4
+ this.onLastUnsubscribe = undefined
5
+ this.onFirstSubscribe = onFirstSubscribe
4
6
  }
5
7
  _Observable.prototype = {
6
8
  subscribe: function (f) {
9
+ if (!this.observers.length && this.onFirstSubscribe) {
10
+ this.onLastUnsubscribe = this.onFirstSubscribe() || undefined
11
+ }
7
12
  this.observers.push(f)
13
+ var _this = this
14
+ return {
15
+ unsubscribe: function() {
16
+ _this.observers = filter(_this.observers, function(other) {
17
+ return f !== other
18
+ })
19
+ if (!_this.observers.length && _this.onLastUnsubscribe) {
20
+ _this.onLastUnsubscribe()
21
+ }
22
+ },
23
+ }
8
24
  },
9
25
  notify: function (data) {
10
26
  each(this.observers, function (observer) {
@@ -13,3 +29,18 @@ _Observable.prototype = {
13
29
  }
14
30
  }
15
31
  export var Observable = _Observable
32
+
33
+ export function mergeObservables() {
34
+ var observables = [].slice.call(arguments)
35
+ var globalObservable = new Observable(function(){
36
+ var subscriptions = map(observables, function(observable) {
37
+ return observable.subscribe(function(data) { return globalObservable.notify(data) })
38
+ })
39
+ return function() {
40
+ return each(subscriptions, function(subscription) {
41
+ return subscription.unsubscribe()
42
+ })
43
+ }
44
+ })
45
+ return globalObservable
46
+ }