@cloudcare/browser-core 1.1.3 → 1.2.1
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.
- package/cjs/{cookie.js → browser/cookie.js} +6 -37
- package/cjs/browser/fetchObservable.js +91 -0
- package/cjs/browser/xhrObservable.js +118 -0
- package/cjs/configuration/configuration.js +70 -0
- package/cjs/configuration/transportConfiguration.js +64 -0
- package/cjs/console/consoleObservable.js +84 -0
- package/cjs/dataMap.js +26 -21
- package/cjs/error/trackRuntimeError.js +27 -0
- package/cjs/helper/catchUserErrors.js +20 -0
- package/cjs/helper/contextHistory.js +134 -0
- package/cjs/helper/createEventRateLimiter.js +47 -0
- package/cjs/helper/deviceInfo.js +8 -25
- package/cjs/helper/display.js +31 -0
- package/cjs/helper/enums.js +28 -2
- package/cjs/helper/errorTools.js +63 -2
- package/cjs/helper/instrumentMethod.js +93 -0
- package/cjs/helper/lifeCycle.js +5 -3
- package/cjs/helper/observable.js +40 -2
- package/cjs/helper/tools.js +185 -9
- package/cjs/index.js +153 -23
- package/cjs/init.js +17 -27
- package/cjs/report/reportObservable.js +112 -0
- package/cjs/session/sessionConstants.js +13 -0
- package/cjs/session/sessionCookieStore.js +188 -0
- package/cjs/session/sessionManagement.js +96 -0
- package/cjs/session/sessionStore.js +150 -0
- package/cjs/synthetics/syntheticsWorkerValues.js +32 -0
- package/cjs/synthetics/usr.js +32 -0
- package/cjs/tracekit/computeStackTrace.js +73 -563
- package/cjs/tracekit/index.js +3 -15
- package/cjs/tracekit/tracekit.js +113 -0
- package/cjs/transport/batch.js +332 -0
- package/cjs/transport/httpRequest.js +112 -0
- package/cjs/transport/index.js +29 -0
- package/cjs/transport/sendWithRetryStrategy.js +177 -0
- package/cjs/transport/startBatchWithReplica.js +24 -0
- package/esm/{cookie.js → browser/cookie.js} +4 -35
- package/esm/browser/fetchObservable.js +77 -0
- package/esm/browser/xhrObservable.js +106 -0
- package/esm/configuration/configuration.js +55 -0
- package/esm/configuration/transportConfiguration.js +54 -0
- package/esm/console/consoleObservable.js +70 -0
- package/esm/dataMap.js +26 -21
- package/esm/error/trackRuntimeError.js +16 -0
- package/esm/helper/catchUserErrors.js +12 -0
- package/esm/helper/contextHistory.js +106 -0
- package/esm/helper/createEventRateLimiter.js +38 -0
- package/esm/helper/deviceInfo.js +6 -25
- package/esm/helper/display.js +21 -0
- package/esm/helper/enums.js +25 -1
- package/esm/helper/errorTools.js +58 -3
- package/esm/helper/instrumentMethod.js +81 -0
- package/esm/helper/lifeCycle.js +5 -3
- package/esm/helper/observable.js +39 -3
- package/esm/helper/tools.js +147 -1
- package/esm/index.js +17 -7
- package/esm/init.js +17 -22
- package/esm/report/reportObservable.js +98 -0
- package/esm/session/sessionConstants.js +3 -0
- package/esm/session/sessionCookieStore.js +168 -0
- package/esm/session/sessionManagement.js +78 -0
- package/esm/session/sessionStore.js +139 -0
- package/esm/synthetics/syntheticsWorkerValues.js +15 -0
- package/esm/synthetics/usr.js +18 -0
- package/esm/tracekit/computeStackTrace.js +73 -557
- package/esm/tracekit/index.js +1 -1
- package/esm/tracekit/tracekit.js +103 -0
- package/esm/transport/batch.js +316 -0
- package/esm/transport/httpRequest.js +104 -0
- package/esm/transport/index.js +3 -0
- package/esm/transport/sendWithRetryStrategy.js +165 -0
- package/esm/transport/startBatchWithReplica.js +15 -0
- package/package.json +2 -2
- package/src/.DS_Store +0 -0
- package/src/{cookie.js → browser/cookie.js} +6 -34
- package/src/browser/fetchObservable.js +86 -0
- package/src/browser/xhrObservable.js +102 -0
- package/src/configuration/configuration.js +61 -0
- package/src/configuration/transportConfiguration.js +42 -0
- package/src/console/consoleObservable.js +65 -0
- package/src/dataMap.js +26 -21
- package/src/error/trackRuntimeError.js +19 -0
- package/src/helper/catchUserErrors.js +12 -0
- package/src/helper/contextHistory.js +85 -0
- package/src/helper/createEventRateLimiter.js +37 -0
- package/src/helper/deviceInfo.js +5 -51
- package/src/helper/display.js +21 -0
- package/src/helper/enums.js +38 -14
- package/src/helper/errorTools.js +76 -12
- package/src/helper/instrumentMethod.js +97 -0
- package/src/helper/lifeCycle.js +5 -3
- package/src/helper/observable.js +33 -2
- package/src/helper/tools.js +135 -4
- package/src/index.js +18 -7
- package/src/init.js +17 -18
- package/src/report/reportObservable.js +113 -0
- package/src/session/sessionConstants.js +3 -0
- package/src/session/sessionCookieStore.js +159 -0
- package/src/session/sessionManagement.js +89 -0
- package/src/session/sessionStore.js +139 -0
- package/src/synthetics/syntheticsWorkerValues.js +22 -0
- package/src/synthetics/usr.js +18 -0
- package/src/tracekit/computeStackTrace.js +75 -551
- package/src/tracekit/index.js +1 -1
- package/src/tracekit/tracekit.js +100 -0
- package/src/transport/batch.js +289 -0
- package/src/transport/httpRequest.js +109 -0
- package/src/transport/index.js +3 -0
- package/src/transport/sendWithRetryStrategy.js +186 -0
- package/src/transport/startBatchWithReplica.js +26 -0
- package/cjs/configuration.js +0 -193
- package/cjs/errorCollection.js +0 -167
- package/cjs/fetchProxy.js +0 -161
- package/cjs/helper/errorFilter.js +0 -47
- package/cjs/sessionManagement.js +0 -221
- package/cjs/tracekit/report.js +0 -289
- package/cjs/transport.js +0 -373
- package/cjs/xhrProxy.js +0 -122
- package/esm/configuration.js +0 -176
- package/esm/errorCollection.js +0 -141
- package/esm/fetchProxy.js +0 -115
- package/esm/helper/errorFilter.js +0 -38
- package/esm/sessionManagement.js +0 -195
- package/esm/tracekit/report.js +0 -273
- package/esm/transport.js +0 -357
- package/esm/xhrProxy.js +0 -110
- package/src/configuration.js +0 -161
- package/src/errorCollection.js +0 -170
- package/src/fetchProxy.js +0 -108
- package/src/helper/errorFilter.js +0 -38
- package/src/sessionManagement.js +0 -224
- package/src/tracekit/report.js +0 -284
- package/src/transport.js +0 -380
- package/src/xhrProxy.js +0 -106
package/src/helper/deviceInfo.js
CHANGED
|
@@ -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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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)
|
package/src/helper/enums.js
CHANGED
|
@@ -1,19 +1,34 @@
|
|
|
1
1
|
export var DOM_EVENT = {
|
|
2
2
|
BEFORE_UNLOAD: 'beforeunload',
|
|
3
|
-
CLICK: 'click',
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
|
package/src/helper/errorTools.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { each ,
|
|
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
|
|
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 + '' +
|
|
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
|
-
|
|
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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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
|
-
|
|
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
|
|
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
|
+
}
|
package/src/helper/lifeCycle.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { each, filter } from './tools'
|
|
2
2
|
export var LifeCycleEventType = {
|
|
3
|
-
|
|
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() {
|
package/src/helper/observable.js
CHANGED
|
@@ -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
|
+
}
|