@cloudcare/browser-core 1.2.5 → 1.2.7
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/dataMap.js +2 -0
- package/cjs/helper/contextHistory.js +7 -22
- package/cjs/helper/limitModification.js +7 -21
- package/esm/dataMap.js +2 -0
- package/esm/helper/contextHistory.js +4 -2
- package/esm/helper/limitModification.js +4 -1
- package/esm/helper/tools.js +2 -4
- package/esm/transport/sendWithRetryStrategy.js +4 -9
- package/package.json +2 -2
- package/src/.DS_Store +0 -0
- package/src/dataMap.js +1 -0
- package/src/helper/contextHistory.js +26 -19
- package/src/helper/limitModification.js +4 -1
- package/src/helper/tools.js +66 -56
- package/src/transport/sendWithRetryStrategy.js +81 -63
package/cjs/dataMap.js
CHANGED
|
@@ -36,6 +36,8 @@ var commonTags = {
|
|
|
36
36
|
view_url: 'view.url',
|
|
37
37
|
view_host: 'view.host',
|
|
38
38
|
view_path: 'view.path',
|
|
39
|
+
view_name: 'view.path',
|
|
40
|
+
// 冗余一个字段
|
|
39
41
|
view_path_group: 'view.path_group',
|
|
40
42
|
view_url_query: 'view.url_query'
|
|
41
43
|
}; // 需要用双引号将字符串类型的field value括起来, 这里有数组标示[string, path]
|
|
@@ -8,12 +8,6 @@ exports.ContextHistory = ContextHistory;
|
|
|
8
8
|
|
|
9
9
|
var _tools = require("./tools");
|
|
10
10
|
|
|
11
|
-
function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
12
|
-
|
|
13
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
14
|
-
|
|
15
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
16
|
-
|
|
17
11
|
var END_OF_TIMES = Infinity;
|
|
18
12
|
var CLEAR_OLD_CONTEXTS_INTERVAL = _tools.ONE_MINUTE;
|
|
19
13
|
exports.CLEAR_OLD_CONTEXTS_INTERVAL = CLEAR_OLD_CONTEXTS_INTERVAL;
|
|
@@ -56,25 +50,16 @@ ContextHistory.prototype.find = function (startTime) {
|
|
|
56
50
|
startTime = END_OF_TIMES;
|
|
57
51
|
}
|
|
58
52
|
|
|
59
|
-
var
|
|
60
|
-
|
|
53
|
+
for (var i = 0; i < this.entries.length; i++) {
|
|
54
|
+
var entry = this.entries[i];
|
|
61
55
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
if (entry.startTime <= startTime) {
|
|
67
|
-
if (startTime <= entry.endTime) {
|
|
68
|
-
return entry.context;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
break;
|
|
56
|
+
if (entry.startTime <= startTime) {
|
|
57
|
+
if (startTime <= entry.endTime) {
|
|
58
|
+
return entry.context;
|
|
72
59
|
}
|
|
60
|
+
|
|
61
|
+
break;
|
|
73
62
|
}
|
|
74
|
-
} catch (err) {
|
|
75
|
-
_iterator.e(err);
|
|
76
|
-
} finally {
|
|
77
|
-
_iterator.f();
|
|
78
63
|
}
|
|
79
64
|
};
|
|
80
65
|
/**
|
|
@@ -9,12 +9,6 @@ var _tools = require("./tools");
|
|
|
9
9
|
|
|
10
10
|
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
11
11
|
|
|
12
|
-
function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
13
|
-
|
|
14
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
15
|
-
|
|
16
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
17
|
-
|
|
18
12
|
/**
|
|
19
13
|
* Current limitations:
|
|
20
14
|
* - field path do not support array, 'a.b.c' only
|
|
@@ -36,24 +30,16 @@ function limitModification(object, modifiableFieldPaths, modifier) {
|
|
|
36
30
|
|
|
37
31
|
function get(object, path) {
|
|
38
32
|
var current = object;
|
|
33
|
+
var fields = path.split('.');
|
|
39
34
|
|
|
40
|
-
var
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
try {
|
|
44
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
45
|
-
var field = _step.value;
|
|
46
|
-
|
|
47
|
-
if (!isValidObjectContaining(current, field)) {
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
35
|
+
for (var i = 0; i < fields.length; i++) {
|
|
36
|
+
var field = fields[i];
|
|
50
37
|
|
|
51
|
-
|
|
38
|
+
if (!isValidObjectContaining(current, field)) {
|
|
39
|
+
return;
|
|
52
40
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
} finally {
|
|
56
|
-
_iterator.f();
|
|
41
|
+
|
|
42
|
+
current = current[field];
|
|
57
43
|
}
|
|
58
44
|
|
|
59
45
|
return current;
|
package/esm/dataMap.js
CHANGED
|
@@ -28,6 +28,8 @@ export var commonTags = {
|
|
|
28
28
|
view_url: 'view.url',
|
|
29
29
|
view_host: 'view.host',
|
|
30
30
|
view_path: 'view.path',
|
|
31
|
+
view_name: 'view.path',
|
|
32
|
+
// 冗余一个字段
|
|
31
33
|
view_path_group: 'view.path_group',
|
|
32
34
|
view_url_query: 'view.url_query'
|
|
33
35
|
}; // 需要用双引号将字符串类型的field value括起来, 这里有数组标示[string, path]
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { relativeNow, ONE_MINUTE, filter, map } from './tools';
|
|
1
|
+
import { relativeNow, ONE_MINUTE, filter, map, each } from './tools';
|
|
2
2
|
var END_OF_TIMES = Infinity;
|
|
3
3
|
export var CLEAR_OLD_CONTEXTS_INTERVAL = ONE_MINUTE;
|
|
4
4
|
export function ContextHistory(expireDelay) {
|
|
@@ -39,7 +39,9 @@ ContextHistory.prototype.find = function (startTime) {
|
|
|
39
39
|
startTime = END_OF_TIMES;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
for (var
|
|
42
|
+
for (var i = 0; i < this.entries.length; i++) {
|
|
43
|
+
var entry = this.entries[i];
|
|
44
|
+
|
|
43
45
|
if (entry.startTime <= startTime) {
|
|
44
46
|
if (startTime <= entry.endTime) {
|
|
45
47
|
return entry.context;
|
|
@@ -21,8 +21,11 @@ export function limitModification(object, modifiableFieldPaths, modifier) {
|
|
|
21
21
|
|
|
22
22
|
function get(object, path) {
|
|
23
23
|
var current = object;
|
|
24
|
+
var fields = path.split('.');
|
|
25
|
+
|
|
26
|
+
for (var i = 0; i < fields.length; i++) {
|
|
27
|
+
var field = fields[i];
|
|
24
28
|
|
|
25
|
-
for (var field of path.split('.')) {
|
|
26
29
|
if (!isValidObjectContaining(current, field)) {
|
|
27
30
|
return;
|
|
28
31
|
}
|
package/esm/helper/tools.js
CHANGED
|
@@ -1201,7 +1201,7 @@ function createCircularReferenceChecker() {
|
|
|
1201
1201
|
if (typeof WeakSet !== 'undefined') {
|
|
1202
1202
|
var set = new WeakSet();
|
|
1203
1203
|
return {
|
|
1204
|
-
hasAlreadyBeenSeen(value) {
|
|
1204
|
+
hasAlreadyBeenSeen: function hasAlreadyBeenSeen(value) {
|
|
1205
1205
|
var has = set.has(value);
|
|
1206
1206
|
|
|
1207
1207
|
if (!has) {
|
|
@@ -1210,13 +1210,12 @@ function createCircularReferenceChecker() {
|
|
|
1210
1210
|
|
|
1211
1211
|
return has;
|
|
1212
1212
|
}
|
|
1213
|
-
|
|
1214
1213
|
};
|
|
1215
1214
|
}
|
|
1216
1215
|
|
|
1217
1216
|
var array = [];
|
|
1218
1217
|
return {
|
|
1219
|
-
hasAlreadyBeenSeen(value) {
|
|
1218
|
+
hasAlreadyBeenSeen: function hasAlreadyBeenSeen(value) {
|
|
1220
1219
|
var has = array.indexOf(value) >= 0;
|
|
1221
1220
|
|
|
1222
1221
|
if (!has) {
|
|
@@ -1225,7 +1224,6 @@ function createCircularReferenceChecker() {
|
|
|
1225
1224
|
|
|
1226
1225
|
return has;
|
|
1227
1226
|
}
|
|
1228
|
-
|
|
1229
1227
|
};
|
|
1230
1228
|
}
|
|
1231
1229
|
/**
|
|
@@ -120,12 +120,10 @@ function newPayloadQueue() {
|
|
|
120
120
|
queue.push(payload);
|
|
121
121
|
this.bytesCount += payload.bytesCount;
|
|
122
122
|
},
|
|
123
|
-
|
|
124
|
-
first() {
|
|
123
|
+
first: function first() {
|
|
125
124
|
return queue[0];
|
|
126
125
|
},
|
|
127
|
-
|
|
128
|
-
dequeue() {
|
|
126
|
+
dequeue: function dequeue() {
|
|
129
127
|
var payload = queue.shift();
|
|
130
128
|
|
|
131
129
|
if (payload) {
|
|
@@ -134,15 +132,12 @@ function newPayloadQueue() {
|
|
|
134
132
|
|
|
135
133
|
return payload;
|
|
136
134
|
},
|
|
137
|
-
|
|
138
|
-
size() {
|
|
135
|
+
size: function size() {
|
|
139
136
|
return queue.length;
|
|
140
137
|
},
|
|
141
|
-
|
|
142
|
-
isFull() {
|
|
138
|
+
isFull: function isFull() {
|
|
143
139
|
return this.bytesCount >= MAX_QUEUE_BYTES_COUNT;
|
|
144
140
|
}
|
|
145
|
-
|
|
146
141
|
};
|
|
147
142
|
}
|
|
148
143
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudcare/browser-core",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.7",
|
|
4
4
|
"main": "cjs/index.js",
|
|
5
5
|
"module": "esm/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -20,5 +20,5 @@
|
|
|
20
20
|
"author": "dataflux",
|
|
21
21
|
"license": "MIT",
|
|
22
22
|
"description": "DataFlux RUM Web 端数据指标监控",
|
|
23
|
-
"gitHead": "
|
|
23
|
+
"gitHead": "c3f30b3b86c7e305e49c336bab286e37d6f9de10"
|
|
24
24
|
}
|
package/src/.DS_Store
CHANGED
|
Binary file
|
package/src/dataMap.js
CHANGED
|
@@ -1,40 +1,41 @@
|
|
|
1
|
-
import { relativeNow, ONE_MINUTE, filter, map} from './tools'
|
|
1
|
+
import { relativeNow, ONE_MINUTE, filter, map, each } from './tools'
|
|
2
2
|
|
|
3
3
|
var END_OF_TIMES = Infinity
|
|
4
4
|
|
|
5
5
|
export var CLEAR_OLD_CONTEXTS_INTERVAL = ONE_MINUTE
|
|
6
6
|
export function ContextHistory(expireDelay) {
|
|
7
|
-
this.expireDelay = expireDelay
|
|
7
|
+
this.expireDelay = expireDelay
|
|
8
8
|
this.entries = []
|
|
9
9
|
var _this = this
|
|
10
|
-
this.clearOldContextsInterval = setInterval(function(){
|
|
10
|
+
this.clearOldContextsInterval = setInterval(function () {
|
|
11
11
|
_this.clearOldContexts()
|
|
12
|
-
}, CLEAR_OLD_CONTEXTS_INTERVAL)
|
|
12
|
+
}, CLEAR_OLD_CONTEXTS_INTERVAL)
|
|
13
13
|
}
|
|
14
|
-
ContextHistory.prototype.add = function(context, startTime) {
|
|
14
|
+
ContextHistory.prototype.add = function (context, startTime) {
|
|
15
15
|
var _this = this
|
|
16
16
|
var entry = {
|
|
17
17
|
context: context,
|
|
18
18
|
startTime: startTime,
|
|
19
19
|
endTime: END_OF_TIMES,
|
|
20
|
-
remove: function() {
|
|
20
|
+
remove: function () {
|
|
21
21
|
var index = _this.entries.indexOf(entry)
|
|
22
22
|
if (index >= 0) {
|
|
23
23
|
_this.entries.splice(index, 1)
|
|
24
24
|
}
|
|
25
25
|
},
|
|
26
|
-
close: function(endTime){
|
|
26
|
+
close: function (endTime) {
|
|
27
27
|
entry.endTime = endTime
|
|
28
|
-
}
|
|
28
|
+
}
|
|
29
29
|
}
|
|
30
30
|
this.entries.unshift(entry)
|
|
31
31
|
return entry
|
|
32
32
|
}
|
|
33
|
-
ContextHistory.prototype.find = function(startTime) {
|
|
33
|
+
ContextHistory.prototype.find = function (startTime) {
|
|
34
34
|
if (typeof startTime === 'undefined') {
|
|
35
35
|
startTime = END_OF_TIMES
|
|
36
36
|
}
|
|
37
|
-
for (var
|
|
37
|
+
for (var i = 0; i < this.entries.length; i++) {
|
|
38
|
+
var entry = this.entries[i]
|
|
38
39
|
if (entry.startTime <= startTime) {
|
|
39
40
|
if (startTime <= entry.endTime) {
|
|
40
41
|
return entry.context
|
|
@@ -47,7 +48,7 @@ ContextHistory.prototype.find = function(startTime) {
|
|
|
47
48
|
* Helper function to close the currently active context, if any. This method assumes that entries
|
|
48
49
|
* are not overlapping.
|
|
49
50
|
*/
|
|
50
|
-
ContextHistory.prototype.closeActive = function(endTime) {
|
|
51
|
+
ContextHistory.prototype.closeActive = function (endTime) {
|
|
51
52
|
var latestEntry = this.entries[0]
|
|
52
53
|
if (latestEntry && latestEntry.endTime === END_OF_TIMES) {
|
|
53
54
|
latestEntry.close(endTime)
|
|
@@ -57,29 +58,35 @@ ContextHistory.prototype.closeActive = function(endTime) {
|
|
|
57
58
|
* Return all contexts that were active during `startTime`, or all currently active contexts if no
|
|
58
59
|
* `startTime` is provided.
|
|
59
60
|
*/
|
|
60
|
-
ContextHistory.prototype.findAll = function(startTime){
|
|
61
|
+
ContextHistory.prototype.findAll = function (startTime) {
|
|
61
62
|
if (typeof startTime === 'undefined') {
|
|
62
63
|
startTime = END_OF_TIMES
|
|
63
64
|
}
|
|
64
|
-
var result = filter(this.entries, function(entry) {
|
|
65
|
-
|
|
65
|
+
var result = filter(this.entries, function (entry) {
|
|
66
|
+
return entry.startTime <= startTime && startTime <= entry.endTime
|
|
67
|
+
})
|
|
68
|
+
return map(result, function (entry) {
|
|
69
|
+
return entry.context
|
|
70
|
+
})
|
|
66
71
|
}
|
|
67
72
|
/**
|
|
68
73
|
* Remove all entries from this collection.
|
|
69
74
|
*/
|
|
70
|
-
ContextHistory.prototype.reset = function
|
|
75
|
+
ContextHistory.prototype.reset = function () {
|
|
71
76
|
this.entries = []
|
|
72
77
|
}
|
|
73
78
|
/**
|
|
74
79
|
* Stop internal garbage collection of past entries.
|
|
75
80
|
*/
|
|
76
|
-
ContextHistory.prototype.stop = function() {
|
|
81
|
+
ContextHistory.prototype.stop = function () {
|
|
77
82
|
clearInterval(this.clearOldContextsInterval)
|
|
78
83
|
}
|
|
79
|
-
ContextHistory.prototype.clearOldContexts = function() {
|
|
84
|
+
ContextHistory.prototype.clearOldContexts = function () {
|
|
80
85
|
var oldTimeThreshold = relativeNow() - this.expireDelay
|
|
81
|
-
while (
|
|
86
|
+
while (
|
|
87
|
+
this.entries.length > 0 &&
|
|
88
|
+
this.entries[this.entries.length - 1].endTime < oldTimeThreshold
|
|
89
|
+
) {
|
|
82
90
|
this.entries.pop()
|
|
83
91
|
}
|
|
84
92
|
}
|
|
85
|
-
|
|
@@ -21,12 +21,15 @@ export function limitModification(object, modifiableFieldPaths, modifier) {
|
|
|
21
21
|
|
|
22
22
|
function get(object, path) {
|
|
23
23
|
var current = object
|
|
24
|
-
|
|
24
|
+
var fields = path.split('.')
|
|
25
|
+
for (var i = 0; i < fields.length; i++) {
|
|
26
|
+
var field = fields[i]
|
|
25
27
|
if (!isValidObjectContaining(current, field)) {
|
|
26
28
|
return
|
|
27
29
|
}
|
|
28
30
|
current = current[field]
|
|
29
31
|
}
|
|
32
|
+
|
|
30
33
|
return current
|
|
31
34
|
}
|
|
32
35
|
|
package/src/helper/tools.js
CHANGED
|
@@ -40,7 +40,7 @@ export function assign(target) {
|
|
|
40
40
|
return target
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
export function shallowClone(object){
|
|
43
|
+
export function shallowClone(object) {
|
|
44
44
|
return assign({}, object)
|
|
45
45
|
}
|
|
46
46
|
export var extend = function (obj) {
|
|
@@ -178,62 +178,72 @@ export var map = function (arr, fn, self) {
|
|
|
178
178
|
}
|
|
179
179
|
return ret
|
|
180
180
|
}
|
|
181
|
-
export var some = function(arr, fn, self) {
|
|
181
|
+
export var some = function (arr, fn, self) {
|
|
182
182
|
if (arr.some) {
|
|
183
183
|
return arr.some(fn)
|
|
184
184
|
}
|
|
185
185
|
var flag = false
|
|
186
|
-
for(var i = 0; i < arr.length; i++) {
|
|
186
|
+
for (var i = 0; i < arr.length; i++) {
|
|
187
187
|
if (!hasOwnProperty.call(arr, i)) {
|
|
188
188
|
continue
|
|
189
189
|
}
|
|
190
190
|
var val = arr[i]
|
|
191
191
|
if (fn.call(self, val, i, arr)) {
|
|
192
192
|
flag = true
|
|
193
|
-
break
|
|
193
|
+
break
|
|
194
194
|
}
|
|
195
195
|
}
|
|
196
196
|
return flag
|
|
197
197
|
}
|
|
198
|
-
export var every = function(arr, fn, self) {
|
|
198
|
+
export var every = function (arr, fn, self) {
|
|
199
199
|
if (arr.every) {
|
|
200
200
|
return arr.every(fn)
|
|
201
201
|
}
|
|
202
202
|
var flag = true
|
|
203
|
-
for(var i = 0; i < arr.length; i++) {
|
|
203
|
+
for (var i = 0; i < arr.length; i++) {
|
|
204
204
|
if (!hasOwnProperty.call(arr, i)) {
|
|
205
205
|
continue
|
|
206
206
|
}
|
|
207
207
|
var val = arr[i]
|
|
208
208
|
if (!fn.call(self, val, i, arr)) {
|
|
209
209
|
flag = false
|
|
210
|
-
break
|
|
210
|
+
break
|
|
211
211
|
}
|
|
212
212
|
}
|
|
213
213
|
return flag
|
|
214
214
|
}
|
|
215
|
-
export var matchList = function(list, value) {
|
|
216
|
-
return some(list, function(item) {
|
|
215
|
+
export var matchList = function (list, value) {
|
|
216
|
+
return some(list, function (item) {
|
|
217
|
+
return item === value || (item instanceof RegExp && item.test(value))
|
|
218
|
+
})
|
|
217
219
|
}
|
|
218
220
|
// https://github.com/jquery/jquery/blob/a684e6ba836f7c553968d7d026ed7941e1a612d8/src/selector/escapeSelector.js
|
|
219
|
-
export var cssEscape = function(str) {
|
|
221
|
+
export var cssEscape = function (str) {
|
|
220
222
|
if (window.CSS && window.CSS.escape) {
|
|
221
223
|
return window.CSS.escape(str)
|
|
222
224
|
}
|
|
223
225
|
|
|
224
226
|
// eslint-disable-next-line no-control-regex
|
|
225
|
-
return str.replace(
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
if (
|
|
229
|
-
|
|
227
|
+
return str.replace(
|
|
228
|
+
/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,
|
|
229
|
+
function (ch, asCodePoint) {
|
|
230
|
+
if (asCodePoint) {
|
|
231
|
+
// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
|
|
232
|
+
if (ch === '\0') {
|
|
233
|
+
return '\uFFFD'
|
|
234
|
+
}
|
|
235
|
+
// Control characters and (dependent upon position) numbers get escaped as code points
|
|
236
|
+
return (
|
|
237
|
+
ch.slice(0, -1) +
|
|
238
|
+
'\\' +
|
|
239
|
+
ch.charCodeAt(ch.length - 1).toString(16) +
|
|
240
|
+
' '
|
|
241
|
+
)
|
|
230
242
|
}
|
|
231
|
-
//
|
|
232
|
-
return
|
|
243
|
+
// Other potentially-special ASCII characters get backslash-escaped
|
|
244
|
+
return '\\' + ch
|
|
233
245
|
}
|
|
234
|
-
|
|
235
|
-
return '\\' + ch
|
|
236
|
-
})
|
|
246
|
+
)
|
|
237
247
|
}
|
|
238
248
|
export var inherit = function (subclass, superclass) {
|
|
239
249
|
var F = function () {}
|
|
@@ -611,7 +621,6 @@ export function replaceNumberCharByPath(path) {
|
|
|
611
621
|
pathGroup = path.replace(/\/([^\/]*)\d([^\/]*)/g, '/?').replace(/\/$/g, '')
|
|
612
622
|
}
|
|
613
623
|
return pathGroup || '/'
|
|
614
|
-
|
|
615
624
|
}
|
|
616
625
|
export var getQueryParam = function (url, param) {
|
|
617
626
|
param = param.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]')
|
|
@@ -643,7 +652,8 @@ export var urlParse = function (para) {
|
|
|
643
652
|
}
|
|
644
653
|
this._values = {}
|
|
645
654
|
this._regex = null
|
|
646
|
-
this._regex =
|
|
655
|
+
this._regex =
|
|
656
|
+
/^((\w+):\/\/)?((\w+):?(\w+)?@)?([^\/\?:]+):?(\d+)?(\/?[^\?#]+)?\??([^#]+)?#?(\w*)/
|
|
647
657
|
|
|
648
658
|
if (typeof a != 'undefined') {
|
|
649
659
|
this._parse(a)
|
|
@@ -702,9 +712,12 @@ export var urlParse = function (para) {
|
|
|
702
712
|
}
|
|
703
713
|
}
|
|
704
714
|
this._values['Path'] = this._values['Path'] || '/'
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
715
|
+
this._values['Hostname'] = this._values['Host'].replace(/:\d+$/, '')
|
|
716
|
+
this._values['Origin'] =
|
|
717
|
+
this._values['Protocol'] +
|
|
718
|
+
'://' +
|
|
719
|
+
this._values['Hostname'] +
|
|
720
|
+
(this._values.Port ? ':' + this._values.Port : '')
|
|
708
721
|
// this._values['Hostname'] = this._values['Host'].replace(/:\d+$/, '')
|
|
709
722
|
// this._values['Origin'] =
|
|
710
723
|
// this._values['Protocol'] + '://' + this._values['Hostname']
|
|
@@ -1150,30 +1163,30 @@ function createCircularReferenceChecker() {
|
|
|
1150
1163
|
if (typeof WeakSet !== 'undefined') {
|
|
1151
1164
|
var set = new WeakSet()
|
|
1152
1165
|
return {
|
|
1153
|
-
hasAlreadyBeenSeen(value) {
|
|
1166
|
+
hasAlreadyBeenSeen: function (value) {
|
|
1154
1167
|
var has = set.has(value)
|
|
1155
1168
|
if (!has) {
|
|
1156
1169
|
set.add(value)
|
|
1157
1170
|
}
|
|
1158
1171
|
return has
|
|
1159
|
-
}
|
|
1172
|
+
}
|
|
1160
1173
|
}
|
|
1161
1174
|
}
|
|
1162
1175
|
var array = []
|
|
1163
1176
|
return {
|
|
1164
|
-
hasAlreadyBeenSeen(value) {
|
|
1177
|
+
hasAlreadyBeenSeen: function (value) {
|
|
1165
1178
|
var has = array.indexOf(value) >= 0
|
|
1166
1179
|
if (!has) {
|
|
1167
1180
|
array.push(value)
|
|
1168
1181
|
}
|
|
1169
1182
|
return has
|
|
1170
|
-
}
|
|
1183
|
+
}
|
|
1171
1184
|
}
|
|
1172
1185
|
}
|
|
1173
1186
|
/**
|
|
1174
1187
|
* Similar to `typeof`, but distinguish plain objects from `null` and arrays
|
|
1175
1188
|
*/
|
|
1176
|
-
|
|
1189
|
+
export function getType(value) {
|
|
1177
1190
|
if (value === null) {
|
|
1178
1191
|
return 'null'
|
|
1179
1192
|
}
|
|
@@ -1186,11 +1199,7 @@ function createCircularReferenceChecker() {
|
|
|
1186
1199
|
* Iterate over source and affect its sub values into destination, recursively.
|
|
1187
1200
|
* If the source and destination can't be merged, return source.
|
|
1188
1201
|
*/
|
|
1189
|
-
|
|
1190
|
-
destination,
|
|
1191
|
-
source,
|
|
1192
|
-
circularReferenceChecker
|
|
1193
|
-
) {
|
|
1202
|
+
export function mergeInto(destination, source, circularReferenceChecker) {
|
|
1194
1203
|
// ignore the source if it is undefined
|
|
1195
1204
|
if (typeof circularReferenceChecker === 'undefined') {
|
|
1196
1205
|
circularReferenceChecker = createCircularReferenceChecker()
|
|
@@ -1213,7 +1222,7 @@ function createCircularReferenceChecker() {
|
|
|
1213
1222
|
source.ignoreCase ? 'i' : '',
|
|
1214
1223
|
source.multiline ? 'm' : '',
|
|
1215
1224
|
source.sticky ? 'y' : '',
|
|
1216
|
-
source.unicode ? 'u' : ''
|
|
1225
|
+
source.unicode ? 'u' : ''
|
|
1217
1226
|
].join('')
|
|
1218
1227
|
return new RegExp(source.source, flags)
|
|
1219
1228
|
}
|
|
@@ -1222,7 +1231,7 @@ function createCircularReferenceChecker() {
|
|
|
1222
1231
|
// remove circular references
|
|
1223
1232
|
return undefined
|
|
1224
1233
|
} else if (Array.isArray(source)) {
|
|
1225
|
-
var merged= Array.isArray(destination) ? destination : []
|
|
1234
|
+
var merged = Array.isArray(destination) ? destination : []
|
|
1226
1235
|
for (var i = 0; i < source.length; ++i) {
|
|
1227
1236
|
merged[i] = mergeInto(merged[i], source[i], circularReferenceChecker)
|
|
1228
1237
|
}
|
|
@@ -1232,7 +1241,11 @@ function createCircularReferenceChecker() {
|
|
|
1232
1241
|
var merged = getType(destination) === 'object' ? destination : {}
|
|
1233
1242
|
for (var key in source) {
|
|
1234
1243
|
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
1235
|
-
merged[key] = mergeInto(
|
|
1244
|
+
merged[key] = mergeInto(
|
|
1245
|
+
merged[key],
|
|
1246
|
+
source[key],
|
|
1247
|
+
circularReferenceChecker
|
|
1248
|
+
)
|
|
1236
1249
|
}
|
|
1237
1250
|
}
|
|
1238
1251
|
return merged
|
|
@@ -1244,7 +1257,7 @@ function createCircularReferenceChecker() {
|
|
|
1244
1257
|
* - It doesn't maintain prototype chains - don't use with instances of custom classes.
|
|
1245
1258
|
* - It doesn't handle Map and Set
|
|
1246
1259
|
*/
|
|
1247
|
-
export function deepClone(value){
|
|
1260
|
+
export function deepClone(value) {
|
|
1248
1261
|
return mergeInto(undefined, value)
|
|
1249
1262
|
}
|
|
1250
1263
|
export var _URL = function (url) {
|
|
@@ -1740,23 +1753,23 @@ export function createContextManager() {
|
|
|
1740
1753
|
console.error('content 需要传递对象类型数据')
|
|
1741
1754
|
}
|
|
1742
1755
|
},
|
|
1743
|
-
getContext: function() {
|
|
1756
|
+
getContext: function () {
|
|
1744
1757
|
return deepClone(context)
|
|
1745
1758
|
},
|
|
1746
1759
|
|
|
1747
|
-
setContext: function(newContext)
|
|
1760
|
+
setContext: function (newContext) {
|
|
1748
1761
|
context = deepClone(newContext)
|
|
1749
1762
|
},
|
|
1750
1763
|
|
|
1751
|
-
setContextProperty: function(key, property){
|
|
1764
|
+
setContextProperty: function (key, property) {
|
|
1752
1765
|
context[key] = deepClone(property)
|
|
1753
1766
|
},
|
|
1754
1767
|
|
|
1755
|
-
removeContextProperty: function(key){
|
|
1768
|
+
removeContextProperty: function (key) {
|
|
1756
1769
|
delete context[key]
|
|
1757
1770
|
},
|
|
1758
1771
|
|
|
1759
|
-
clearContext: function(){
|
|
1772
|
+
clearContext: function () {
|
|
1760
1773
|
context = {}
|
|
1761
1774
|
}
|
|
1762
1775
|
}
|
|
@@ -1776,7 +1789,9 @@ export function arrayFrom(arrayLike) {
|
|
|
1776
1789
|
}
|
|
1777
1790
|
var array = []
|
|
1778
1791
|
if (arrayLike instanceof Set) {
|
|
1779
|
-
arrayLike.forEach(function(item) {
|
|
1792
|
+
arrayLike.forEach(function (item) {
|
|
1793
|
+
array.push(item)
|
|
1794
|
+
})
|
|
1780
1795
|
} else {
|
|
1781
1796
|
for (var i = 0; i < arrayLike.length; i++) {
|
|
1782
1797
|
array.push(arrayLike[i])
|
|
@@ -1784,10 +1799,7 @@ export function arrayFrom(arrayLike) {
|
|
|
1784
1799
|
}
|
|
1785
1800
|
return array
|
|
1786
1801
|
}
|
|
1787
|
-
export function findLast(
|
|
1788
|
-
array,
|
|
1789
|
-
predicate
|
|
1790
|
-
) {
|
|
1802
|
+
export function findLast(array, predicate) {
|
|
1791
1803
|
for (var i = array.length - 1; i >= 0; i -= 1) {
|
|
1792
1804
|
var item = array[i]
|
|
1793
1805
|
if (predicate(item, i, array)) {
|
|
@@ -1854,10 +1866,10 @@ export function toSnakeCase(word) {
|
|
|
1854
1866
|
|
|
1855
1867
|
export function escapeRowData(str) {
|
|
1856
1868
|
if (typeof str === 'object' && str) {
|
|
1857
|
-
|
|
1869
|
+
str = jsonStringify(str)
|
|
1858
1870
|
} else if (!isString(str)) {
|
|
1859
1871
|
return str
|
|
1860
|
-
}
|
|
1872
|
+
}
|
|
1861
1873
|
var reg = /[\s=,"]/g
|
|
1862
1874
|
return String(str).replace(reg, function (word) {
|
|
1863
1875
|
return '\\' + word
|
|
@@ -1872,9 +1884,7 @@ export function escapeJsonValue(value) {
|
|
|
1872
1884
|
}
|
|
1873
1885
|
}
|
|
1874
1886
|
export function escapeFieldValueStr(str) {
|
|
1875
|
-
return '"' +
|
|
1876
|
-
str.replace(/[\\]*"/g, '"').replace(/"/g, '\\"') +
|
|
1877
|
-
'"'
|
|
1887
|
+
return '"' + str.replace(/[\\]*"/g, '"').replace(/"/g, '\\"') + '"'
|
|
1878
1888
|
}
|
|
1879
1889
|
export function escapeRowField(value) {
|
|
1880
1890
|
if (typeof value === 'object' && value) {
|
|
@@ -1885,10 +1895,10 @@ export function escapeRowField(value) {
|
|
|
1885
1895
|
return value
|
|
1886
1896
|
}
|
|
1887
1897
|
}
|
|
1888
|
-
export function isNullUndefinedDefaultValue(data,defaultValue) {
|
|
1898
|
+
export function isNullUndefinedDefaultValue(data, defaultValue) {
|
|
1889
1899
|
if (data !== null && data !== void 0) {
|
|
1890
1900
|
return data
|
|
1891
1901
|
} else {
|
|
1892
1902
|
return defaultValue
|
|
1893
1903
|
}
|
|
1894
|
-
}
|
|
1904
|
+
}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
clocksNow,
|
|
3
|
+
ONE_KIBI_BYTE,
|
|
4
|
+
ONE_MEBI_BYTE,
|
|
5
|
+
ONE_SECOND
|
|
6
|
+
} from '../helper/tools'
|
|
2
7
|
import { ErrorSource } from '../helper/errorTools'
|
|
3
8
|
|
|
4
9
|
export var MAX_ONGOING_BYTES_COUNT = 80 * ONE_KIBI_BYTE
|
|
@@ -10,12 +15,12 @@ export var INITIAL_BACKOFF_TIME = ONE_SECOND
|
|
|
10
15
|
var TransportStatus = {
|
|
11
16
|
UP: 'UP',
|
|
12
17
|
FAILURE_DETECTED: 'FAILURE_DETECTED',
|
|
13
|
-
DOWN: 'DOWN'
|
|
18
|
+
DOWN: 'DOWN'
|
|
14
19
|
}
|
|
15
20
|
|
|
16
21
|
var RetryReason = {
|
|
17
22
|
AFTER_SUCCESS: 'AFTER_SUCCESS',
|
|
18
|
-
AFTER_RESUME: 'AFTER_RESUME'
|
|
23
|
+
AFTER_RESUME: 'AFTER_RESUME'
|
|
19
24
|
}
|
|
20
25
|
|
|
21
26
|
export function sendWithRetryStrategy(
|
|
@@ -30,59 +35,62 @@ export function sendWithRetryStrategy(
|
|
|
30
35
|
state.bandwidthMonitor.canHandle(payload)
|
|
31
36
|
) {
|
|
32
37
|
send(payload, state, sendStrategy, {
|
|
33
|
-
onSuccess: function
|
|
34
|
-
|
|
38
|
+
onSuccess: function () {
|
|
39
|
+
return retryQueuedPayloads(
|
|
40
|
+
RetryReason.AFTER_SUCCESS,
|
|
41
|
+
state,
|
|
42
|
+
sendStrategy,
|
|
43
|
+
reportError
|
|
44
|
+
)
|
|
45
|
+
},
|
|
46
|
+
onFailure: function () {
|
|
35
47
|
state.queuedPayloads.enqueue(payload)
|
|
36
48
|
scheduleRetry(state, sendStrategy, reportError)
|
|
37
|
-
}
|
|
49
|
+
}
|
|
38
50
|
})
|
|
39
51
|
} else {
|
|
40
52
|
state.queuedPayloads.enqueue(payload)
|
|
41
53
|
}
|
|
42
54
|
}
|
|
43
55
|
|
|
44
|
-
function scheduleRetry(
|
|
45
|
-
state,
|
|
46
|
-
sendStrategy,
|
|
47
|
-
reportError
|
|
48
|
-
) {
|
|
56
|
+
function scheduleRetry(state, sendStrategy, reportError) {
|
|
49
57
|
if (state.transportStatus !== TransportStatus.DOWN) {
|
|
50
58
|
return
|
|
51
59
|
}
|
|
52
|
-
setTimeout(
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
60
|
+
setTimeout(function () {
|
|
61
|
+
var payload = state.queuedPayloads.first()
|
|
62
|
+
send(payload, state, sendStrategy, {
|
|
63
|
+
onSuccess: function () {
|
|
64
|
+
state.queuedPayloads.dequeue()
|
|
65
|
+
// if (state.lastFailureStatus !== 0) {
|
|
66
|
+
// addTelemetryDebug('resuming after transport down', {
|
|
67
|
+
// failureStatus: state.lastFailureStatus,
|
|
68
|
+
// })
|
|
69
|
+
// }
|
|
70
|
+
state.currentBackoffTime = INITIAL_BACKOFF_TIME
|
|
71
|
+
retryQueuedPayloads(
|
|
72
|
+
RetryReason.AFTER_RESUME,
|
|
73
|
+
state,
|
|
74
|
+
sendStrategy,
|
|
75
|
+
reportError
|
|
76
|
+
)
|
|
77
|
+
},
|
|
78
|
+
onFailure: function () {
|
|
79
|
+
state.currentBackoffTime = Math.min(
|
|
80
|
+
MAX_BACKOFF_TIME,
|
|
81
|
+
state.currentBackoffTime * 2
|
|
82
|
+
)
|
|
83
|
+
scheduleRetry(state, sendStrategy, reportError)
|
|
84
|
+
}
|
|
85
|
+
})
|
|
86
|
+
}, state.currentBackoffTime)
|
|
74
87
|
}
|
|
75
88
|
|
|
76
|
-
function send(
|
|
77
|
-
payload,
|
|
78
|
-
state,
|
|
79
|
-
sendStrategy,
|
|
80
|
-
responseData
|
|
81
|
-
) {
|
|
89
|
+
function send(payload, state, sendStrategy, responseData) {
|
|
82
90
|
var onSuccess = responseData.onSuccess
|
|
83
91
|
var onFailure = responseData.onFailure
|
|
84
92
|
state.bandwidthMonitor.add(payload)
|
|
85
|
-
sendStrategy(payload, function(response) {
|
|
93
|
+
sendStrategy(payload, function (response) {
|
|
86
94
|
state.bandwidthMonitor.remove(payload)
|
|
87
95
|
if (wasRequestSuccessful(response)) {
|
|
88
96
|
state.transportStatus = TransportStatus.UP
|
|
@@ -90,31 +98,40 @@ function send(
|
|
|
90
98
|
} else {
|
|
91
99
|
// do not consider transport down if another ongoing request could succeed
|
|
92
100
|
state.transportStatus =
|
|
93
|
-
state.bandwidthMonitor.ongoingRequestCount > 0
|
|
101
|
+
state.bandwidthMonitor.ongoingRequestCount > 0
|
|
102
|
+
? TransportStatus.FAILURE_DETECTED
|
|
103
|
+
: TransportStatus.DOWN
|
|
94
104
|
state.lastFailureStatus = response.status
|
|
95
105
|
onFailure()
|
|
96
106
|
}
|
|
97
107
|
})
|
|
98
108
|
}
|
|
99
109
|
|
|
100
|
-
function retryQueuedPayloads(
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
) {
|
|
106
|
-
if (reason === RetryReason.AFTER_SUCCESS && state.queuedPayloads.isFull() && !state.queueFullReported) {
|
|
110
|
+
function retryQueuedPayloads(reason, state, sendStrategy, reportError) {
|
|
111
|
+
if (
|
|
112
|
+
reason === RetryReason.AFTER_SUCCESS &&
|
|
113
|
+
state.queuedPayloads.isFull() &&
|
|
114
|
+
!state.queueFullReported
|
|
115
|
+
) {
|
|
107
116
|
reportError({
|
|
108
|
-
message:
|
|
117
|
+
message:
|
|
118
|
+
'Reached max events size queued for upload: ' +
|
|
119
|
+
MAX_QUEUE_BYTES_COUNT / ONE_MEBI_BYTE +
|
|
120
|
+
'MiB',
|
|
109
121
|
source: ErrorSource.AGENT,
|
|
110
|
-
startClocks: clocksNow()
|
|
122
|
+
startClocks: clocksNow()
|
|
111
123
|
})
|
|
112
124
|
state.queueFullReported = true
|
|
113
125
|
}
|
|
114
126
|
var previousQueue = state.queuedPayloads
|
|
115
127
|
state.queuedPayloads = newPayloadQueue()
|
|
116
128
|
while (previousQueue.size() > 0) {
|
|
117
|
-
sendWithRetryStrategy(
|
|
129
|
+
sendWithRetryStrategy(
|
|
130
|
+
previousQueue.dequeue(),
|
|
131
|
+
state,
|
|
132
|
+
sendStrategy,
|
|
133
|
+
reportError
|
|
134
|
+
)
|
|
118
135
|
}
|
|
119
136
|
}
|
|
120
137
|
|
|
@@ -129,7 +146,7 @@ export function newRetryState() {
|
|
|
129
146
|
currentBackoffTime: INITIAL_BACKOFF_TIME,
|
|
130
147
|
bandwidthMonitor: newBandwidthMonitor(),
|
|
131
148
|
queuedPayloads: newPayloadQueue(),
|
|
132
|
-
queueFullReported: false
|
|
149
|
+
queueFullReported: false
|
|
133
150
|
}
|
|
134
151
|
}
|
|
135
152
|
|
|
@@ -137,29 +154,29 @@ function newPayloadQueue() {
|
|
|
137
154
|
var queue = []
|
|
138
155
|
return {
|
|
139
156
|
bytesCount: 0,
|
|
140
|
-
enqueue: function(payload) {
|
|
157
|
+
enqueue: function (payload) {
|
|
141
158
|
if (this.isFull()) {
|
|
142
159
|
return
|
|
143
160
|
}
|
|
144
161
|
queue.push(payload)
|
|
145
162
|
this.bytesCount += payload.bytesCount
|
|
146
163
|
},
|
|
147
|
-
first() {
|
|
164
|
+
first: function () {
|
|
148
165
|
return queue[0]
|
|
149
166
|
},
|
|
150
|
-
dequeue() {
|
|
167
|
+
dequeue: function () {
|
|
151
168
|
var payload = queue.shift()
|
|
152
169
|
if (payload) {
|
|
153
170
|
this.bytesCount -= payload.bytesCount
|
|
154
171
|
}
|
|
155
172
|
return payload
|
|
156
173
|
},
|
|
157
|
-
size() {
|
|
174
|
+
size: function () {
|
|
158
175
|
return queue.length
|
|
159
176
|
},
|
|
160
|
-
isFull() {
|
|
177
|
+
isFull: function () {
|
|
161
178
|
return this.bytesCount >= MAX_QUEUE_BYTES_COUNT
|
|
162
|
-
}
|
|
179
|
+
}
|
|
163
180
|
}
|
|
164
181
|
}
|
|
165
182
|
|
|
@@ -167,20 +184,21 @@ function newBandwidthMonitor() {
|
|
|
167
184
|
return {
|
|
168
185
|
ongoingRequestCount: 0,
|
|
169
186
|
ongoingByteCount: 0,
|
|
170
|
-
canHandle: function(payload) {
|
|
187
|
+
canHandle: function (payload) {
|
|
171
188
|
return (
|
|
172
189
|
this.ongoingRequestCount === 0 ||
|
|
173
|
-
(this.ongoingByteCount + payload.bytesCount <=
|
|
190
|
+
(this.ongoingByteCount + payload.bytesCount <=
|
|
191
|
+
MAX_ONGOING_BYTES_COUNT &&
|
|
174
192
|
this.ongoingRequestCount < MAX_ONGOING_REQUESTS)
|
|
175
193
|
)
|
|
176
194
|
},
|
|
177
|
-
add: function(payload) {
|
|
195
|
+
add: function (payload) {
|
|
178
196
|
this.ongoingRequestCount += 1
|
|
179
197
|
this.ongoingByteCount += payload.bytesCount
|
|
180
198
|
},
|
|
181
|
-
remove:function(payload) {
|
|
199
|
+
remove: function (payload) {
|
|
182
200
|
this.ongoingRequestCount -= 1
|
|
183
201
|
this.ongoingByteCount -= payload.bytesCount
|
|
184
|
-
}
|
|
202
|
+
}
|
|
185
203
|
}
|
|
186
204
|
}
|