@cloudcare/browser-core 1.1.0 → 1.1.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/helper/tools.js +18 -2
- package/cjs/transport.js +19 -13
- package/esm/helper/tools.js +12 -0
- package/esm/transport.js +20 -14
- package/package.json +2 -2
- package/src/helper/tools.js +14 -0
- package/src/transport.js +18 -19
package/cjs/helper/tools.js
CHANGED
|
@@ -21,8 +21,10 @@ exports.deepSnakeCase = deepSnakeCase;
|
|
|
21
21
|
exports.each = void 0;
|
|
22
22
|
exports.elapsed = elapsed;
|
|
23
23
|
exports.encodeDates = void 0;
|
|
24
|
+
exports.escapeFieldValueStr = escapeFieldValueStr;
|
|
24
25
|
exports.escapeJsonValue = escapeJsonValue;
|
|
25
26
|
exports.escapeRowData = escapeRowData;
|
|
27
|
+
exports.escapeRowField = escapeRowField;
|
|
26
28
|
exports.filter = exports.extend2Lev = exports.extend = void 0;
|
|
27
29
|
exports.find = find;
|
|
28
30
|
exports.findByPath = findByPath;
|
|
@@ -62,8 +64,8 @@ exports.safeJSONParse = void 0;
|
|
|
62
64
|
exports.safeTruncate = safeTruncate;
|
|
63
65
|
exports.sessionStorage = exports.searchObjString = exports.searchObjDate = exports.searchConfigData = void 0;
|
|
64
66
|
exports.shallowClone = shallowClone;
|
|
65
|
-
exports.
|
|
66
|
-
exports.throttle = exports.strip_sa_properties = void 0;
|
|
67
|
+
exports.strToUnicode = void 0;
|
|
68
|
+
exports.throttle = exports.strip_sa_properties = exports.strip_empty_properties = exports.stringSplice = void 0;
|
|
67
69
|
exports.timeStampNow = timeStampNow;
|
|
68
70
|
exports.toArray = exports.tirm = void 0;
|
|
69
71
|
exports.toServerDuration = toServerDuration;
|
|
@@ -2062,4 +2064,18 @@ function escapeJsonValue(value) {
|
|
|
2062
2064
|
} else {
|
|
2063
2065
|
return jsonStringify(value);
|
|
2064
2066
|
}
|
|
2067
|
+
}
|
|
2068
|
+
|
|
2069
|
+
function escapeFieldValueStr(str) {
|
|
2070
|
+
return '"' + str.replace(/[\\]*"/g, '"').replace(/"/g, '\\"') + '"';
|
|
2071
|
+
}
|
|
2072
|
+
|
|
2073
|
+
function escapeRowField(value) {
|
|
2074
|
+
if (_typeof(value) === 'object' && value) {
|
|
2075
|
+
return escapeFieldValueStr(jsonStringify(value));
|
|
2076
|
+
} else if (isString(value)) {
|
|
2077
|
+
return escapeFieldValueStr(value);
|
|
2078
|
+
} else {
|
|
2079
|
+
return value;
|
|
2080
|
+
}
|
|
2065
2081
|
}
|
package/cjs/transport.js
CHANGED
|
@@ -92,7 +92,7 @@ var processedMessageByDataMap = function processedMessageByDataMap(message) {
|
|
|
92
92
|
rowData.measurement = key;
|
|
93
93
|
var tagsStr = [];
|
|
94
94
|
var tags = (0, _tools.extend)({}, _dataMap.commonTags, value.tags);
|
|
95
|
-
var filterFileds = ['date', 'type']; // 已经在datamap中定义过的fields和tags
|
|
95
|
+
var filterFileds = ['date', 'type', CUSTOM_KEYS]; // 已经在datamap中定义过的fields和tags
|
|
96
96
|
|
|
97
97
|
(0, _tools.each)(tags, function (value_path, _key) {
|
|
98
98
|
var _value = (0, _tools.findByPath)(message, value_path);
|
|
@@ -116,9 +116,14 @@ var processedMessageByDataMap = function processedMessageByDataMap(message) {
|
|
|
116
116
|
|
|
117
117
|
if (_valueData || (0, _tools.isNumber)(_valueData)) {
|
|
118
118
|
rowData.fields[_key] = _valueData; // 这里不需要转译
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
119
|
+
// _valueData =
|
|
120
|
+
// type === 'string'
|
|
121
|
+
// ? '"' +
|
|
122
|
+
// _valueData.replace(/[\\]*"/g, '"').replace(/"/g, '\\"') +
|
|
123
|
+
// '"'
|
|
124
|
+
// : escapeRowData(_valueData)
|
|
125
|
+
|
|
126
|
+
fieldsStr.push((0, _tools.escapeRowData)(_key) + '=' + (0, _tools.escapeRowField)(_valueData));
|
|
122
127
|
}
|
|
123
128
|
} else if ((0, _tools.isString)(_value)) {
|
|
124
129
|
var _valueData = (0, _tools.findByPath)(message, _value);
|
|
@@ -128,14 +133,13 @@ var processedMessageByDataMap = function processedMessageByDataMap(message) {
|
|
|
128
133
|
if (_valueData || (0, _tools.isNumber)(_valueData)) {
|
|
129
134
|
rowData.fields[_key] = _valueData; // 这里不需要转译
|
|
130
135
|
|
|
131
|
-
|
|
132
|
-
fieldsStr.push((0, _tools.escapeRowData)(_key) + '=' + _valueData);
|
|
136
|
+
fieldsStr.push((0, _tools.escapeRowData)(_key) + '=' + (0, _tools.escapeRowField)(_valueData));
|
|
133
137
|
}
|
|
134
138
|
}
|
|
135
139
|
});
|
|
136
140
|
|
|
137
141
|
if (message.tags && (0, _tools.isObject)(message.tags) && !(0, _tools.isEmptyObject)(message.tags)) {
|
|
138
|
-
// 自定义tag
|
|
142
|
+
// 自定义tag, 存储成field
|
|
139
143
|
var _tagKeys = [];
|
|
140
144
|
(0, _tools.each)(message.tags, function (_value, _key) {
|
|
141
145
|
// 如果和之前tag重名,则舍弃
|
|
@@ -145,14 +149,15 @@ var processedMessageByDataMap = function processedMessageByDataMap(message) {
|
|
|
145
149
|
if (_value || (0, _tools.isNumber)(_value)) {
|
|
146
150
|
_tagKeys.push(_key);
|
|
147
151
|
|
|
148
|
-
rowData.
|
|
149
|
-
|
|
152
|
+
rowData.fields[_key] = _value; // 这里不需要转译
|
|
153
|
+
|
|
154
|
+
fieldsStr.push((0, _tools.escapeRowData)(_key) + '=' + (0, _tools.escapeRowField)(_value));
|
|
150
155
|
}
|
|
151
156
|
});
|
|
152
157
|
|
|
153
158
|
if (_tagKeys.length) {
|
|
154
|
-
rowData.
|
|
155
|
-
|
|
159
|
+
rowData.fields[CUSTOM_KEYS] = (0, _tools.escapeRowField)(_tagKeys);
|
|
160
|
+
fieldsStr.push((0, _tools.escapeRowData)(CUSTOM_KEYS) + '=' + (0, _tools.escapeRowField)(_tagKeys));
|
|
156
161
|
}
|
|
157
162
|
}
|
|
158
163
|
|
|
@@ -160,8 +165,9 @@ var processedMessageByDataMap = function processedMessageByDataMap(message) {
|
|
|
160
165
|
// 这里处理日志类型数据自定义字段
|
|
161
166
|
(0, _tools.each)(message, function (value, key) {
|
|
162
167
|
if (filterFileds.indexOf(key) === -1 && ((0, _tools.isNumber)(value) || (0, _tools.isString)(value) || (0, _tools.isBoolean)(value))) {
|
|
163
|
-
rowData.
|
|
164
|
-
|
|
168
|
+
rowData.fields[key] = value; // 这里不需要转译
|
|
169
|
+
|
|
170
|
+
fieldsStr.push((0, _tools.escapeRowData)(key) + '=' + (0, _tools.escapeRowField)(value));
|
|
165
171
|
}
|
|
166
172
|
});
|
|
167
173
|
}
|
package/esm/helper/tools.js
CHANGED
|
@@ -1746,4 +1746,16 @@ export function escapeJsonValue(value) {
|
|
|
1746
1746
|
} else {
|
|
1747
1747
|
return jsonStringify(value);
|
|
1748
1748
|
}
|
|
1749
|
+
}
|
|
1750
|
+
export function escapeFieldValueStr(str) {
|
|
1751
|
+
return '"' + str.replace(/[\\]*"/g, '"').replace(/"/g, '\\"') + '"';
|
|
1752
|
+
}
|
|
1753
|
+
export function escapeRowField(value) {
|
|
1754
|
+
if (typeof value === 'object' && value) {
|
|
1755
|
+
return escapeFieldValueStr(jsonStringify(value));
|
|
1756
|
+
} else if (isString(value)) {
|
|
1757
|
+
return escapeFieldValueStr(value);
|
|
1758
|
+
} else {
|
|
1759
|
+
return value;
|
|
1760
|
+
}
|
|
1749
1761
|
}
|
package/esm/transport.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { addEventListener, values, findByPath, escapeRowData, each, isNumber, isArray, extend, isString, toServerDuration, isBoolean, isEmptyObject, isObject, map, escapeJsonValue } from './helper/tools';
|
|
1
|
+
import { addEventListener, values, findByPath, escapeRowData, each, isNumber, isArray, extend, isString, toServerDuration, isBoolean, isEmptyObject, isObject, map, escapeJsonValue, escapeRowField } from './helper/tools';
|
|
2
2
|
import { DOM_EVENT, RumEventType } from './helper/enums';
|
|
3
3
|
import { commonTags, dataMap } from './dataMap';
|
|
4
4
|
import { getGlobalObject } from './init'; // https://en.wikipedia.org/wiki/UTF-8
|
|
@@ -79,7 +79,7 @@ export var processedMessageByDataMap = function processedMessageByDataMap(messag
|
|
|
79
79
|
rowData.measurement = key;
|
|
80
80
|
var tagsStr = [];
|
|
81
81
|
var tags = extend({}, commonTags, value.tags);
|
|
82
|
-
var filterFileds = ['date', 'type']; // 已经在datamap中定义过的fields和tags
|
|
82
|
+
var filterFileds = ['date', 'type', CUSTOM_KEYS]; // 已经在datamap中定义过的fields和tags
|
|
83
83
|
|
|
84
84
|
each(tags, function (value_path, _key) {
|
|
85
85
|
var _value = findByPath(message, value_path);
|
|
@@ -103,9 +103,14 @@ export var processedMessageByDataMap = function processedMessageByDataMap(messag
|
|
|
103
103
|
|
|
104
104
|
if (_valueData || isNumber(_valueData)) {
|
|
105
105
|
rowData.fields[_key] = _valueData; // 这里不需要转译
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
106
|
+
// _valueData =
|
|
107
|
+
// type === 'string'
|
|
108
|
+
// ? '"' +
|
|
109
|
+
// _valueData.replace(/[\\]*"/g, '"').replace(/"/g, '\\"') +
|
|
110
|
+
// '"'
|
|
111
|
+
// : escapeRowData(_valueData)
|
|
112
|
+
|
|
113
|
+
fieldsStr.push(escapeRowData(_key) + '=' + escapeRowField(_valueData));
|
|
109
114
|
}
|
|
110
115
|
} else if (isString(_value)) {
|
|
111
116
|
var _valueData = findByPath(message, _value);
|
|
@@ -115,14 +120,13 @@ export var processedMessageByDataMap = function processedMessageByDataMap(messag
|
|
|
115
120
|
if (_valueData || isNumber(_valueData)) {
|
|
116
121
|
rowData.fields[_key] = _valueData; // 这里不需要转译
|
|
117
122
|
|
|
118
|
-
|
|
119
|
-
fieldsStr.push(escapeRowData(_key) + '=' + _valueData);
|
|
123
|
+
fieldsStr.push(escapeRowData(_key) + '=' + escapeRowField(_valueData));
|
|
120
124
|
}
|
|
121
125
|
}
|
|
122
126
|
});
|
|
123
127
|
|
|
124
128
|
if (message.tags && isObject(message.tags) && !isEmptyObject(message.tags)) {
|
|
125
|
-
// 自定义tag
|
|
129
|
+
// 自定义tag, 存储成field
|
|
126
130
|
var _tagKeys = [];
|
|
127
131
|
each(message.tags, function (_value, _key) {
|
|
128
132
|
// 如果和之前tag重名,则舍弃
|
|
@@ -132,14 +136,15 @@ export var processedMessageByDataMap = function processedMessageByDataMap(messag
|
|
|
132
136
|
if (_value || isNumber(_value)) {
|
|
133
137
|
_tagKeys.push(_key);
|
|
134
138
|
|
|
135
|
-
rowData.
|
|
136
|
-
|
|
139
|
+
rowData.fields[_key] = _value; // 这里不需要转译
|
|
140
|
+
|
|
141
|
+
fieldsStr.push(escapeRowData(_key) + '=' + escapeRowField(_value));
|
|
137
142
|
}
|
|
138
143
|
});
|
|
139
144
|
|
|
140
145
|
if (_tagKeys.length) {
|
|
141
|
-
rowData.
|
|
142
|
-
|
|
146
|
+
rowData.fields[CUSTOM_KEYS] = escapeRowField(_tagKeys);
|
|
147
|
+
fieldsStr.push(escapeRowData(CUSTOM_KEYS) + '=' + escapeRowField(_tagKeys));
|
|
143
148
|
}
|
|
144
149
|
}
|
|
145
150
|
|
|
@@ -147,8 +152,9 @@ export var processedMessageByDataMap = function processedMessageByDataMap(messag
|
|
|
147
152
|
// 这里处理日志类型数据自定义字段
|
|
148
153
|
each(message, function (value, key) {
|
|
149
154
|
if (filterFileds.indexOf(key) === -1 && (isNumber(value) || isString(value) || isBoolean(value))) {
|
|
150
|
-
rowData.
|
|
151
|
-
|
|
155
|
+
rowData.fields[key] = value; // 这里不需要转译
|
|
156
|
+
|
|
157
|
+
fieldsStr.push(escapeRowData(key) + '=' + escapeRowField(value));
|
|
152
158
|
}
|
|
153
159
|
});
|
|
154
160
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudcare/browser-core",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.1",
|
|
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": "6637896a7d66c35f8b37da75b14d234d049c79d5"
|
|
24
24
|
}
|
package/src/helper/tools.js
CHANGED
|
@@ -1724,3 +1724,17 @@ export function escapeJsonValue(value) {
|
|
|
1724
1724
|
return jsonStringify(value)
|
|
1725
1725
|
}
|
|
1726
1726
|
}
|
|
1727
|
+
export function escapeFieldValueStr(str) {
|
|
1728
|
+
return '"' +
|
|
1729
|
+
str.replace(/[\\]*"/g, '"').replace(/"/g, '\\"') +
|
|
1730
|
+
'"'
|
|
1731
|
+
}
|
|
1732
|
+
export function escapeRowField(value) {
|
|
1733
|
+
if (typeof value === 'object' && value) {
|
|
1734
|
+
return escapeFieldValueStr(jsonStringify(value))
|
|
1735
|
+
} else if (isString(value)) {
|
|
1736
|
+
return escapeFieldValueStr(value)
|
|
1737
|
+
} else {
|
|
1738
|
+
return value
|
|
1739
|
+
}
|
|
1740
|
+
}
|
package/src/transport.js
CHANGED
|
@@ -13,7 +13,8 @@ import {
|
|
|
13
13
|
isEmptyObject,
|
|
14
14
|
isObject,
|
|
15
15
|
map,
|
|
16
|
-
escapeJsonValue
|
|
16
|
+
escapeJsonValue,
|
|
17
|
+
escapeRowField
|
|
17
18
|
} from './helper/tools'
|
|
18
19
|
import { DOM_EVENT, RumEventType } from './helper/enums'
|
|
19
20
|
import { commonTags, dataMap } from './dataMap'
|
|
@@ -93,7 +94,7 @@ export var processedMessageByDataMap = function (message) {
|
|
|
93
94
|
rowData.measurement = key
|
|
94
95
|
var tagsStr = []
|
|
95
96
|
var tags = extend({}, commonTags, value.tags)
|
|
96
|
-
var filterFileds = ['date', 'type'] // 已经在datamap中定义过的fields和tags
|
|
97
|
+
var filterFileds = ['date', 'type', CUSTOM_KEYS] // 已经在datamap中定义过的fields和tags
|
|
97
98
|
each(tags, function (value_path, _key) {
|
|
98
99
|
var _value = findByPath(message, value_path)
|
|
99
100
|
filterFileds.push(_key)
|
|
@@ -112,26 +113,25 @@ export var processedMessageByDataMap = function (message) {
|
|
|
112
113
|
filterFileds.push(_key)
|
|
113
114
|
if (_valueData || isNumber(_valueData)) {
|
|
114
115
|
rowData.fields[_key] = _valueData // 这里不需要转译
|
|
115
|
-
_valueData =
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
fieldsStr.push(escapeRowData(_key) + '=' + _valueData)
|
|
116
|
+
// _valueData =
|
|
117
|
+
// type === 'string'
|
|
118
|
+
// ? '"' +
|
|
119
|
+
// _valueData.replace(/[\\]*"/g, '"').replace(/"/g, '\\"') +
|
|
120
|
+
// '"'
|
|
121
|
+
// : escapeRowData(_valueData)
|
|
122
|
+
fieldsStr.push(escapeRowData(_key) + '=' + escapeRowField(_valueData))
|
|
122
123
|
}
|
|
123
124
|
} else if (isString(_value)) {
|
|
124
125
|
var _valueData = findByPath(message, _value)
|
|
125
126
|
filterFileds.push(_key)
|
|
126
127
|
if (_valueData || isNumber(_valueData)) {
|
|
127
128
|
rowData.fields[_key] = _valueData // 这里不需要转译
|
|
128
|
-
|
|
129
|
-
fieldsStr.push(escapeRowData(_key) + '=' + _valueData)
|
|
129
|
+
fieldsStr.push(escapeRowData(_key) + '=' + escapeRowField(_valueData))
|
|
130
130
|
}
|
|
131
131
|
}
|
|
132
132
|
})
|
|
133
133
|
if (message.tags && isObject(message.tags) && !isEmptyObject(message.tags)) {
|
|
134
|
-
// 自定义tag
|
|
134
|
+
// 自定义tag, 存储成field
|
|
135
135
|
const _tagKeys = []
|
|
136
136
|
each(message.tags, function (_value, _key) {
|
|
137
137
|
// 如果和之前tag重名,则舍弃
|
|
@@ -139,25 +139,24 @@ export var processedMessageByDataMap = function (message) {
|
|
|
139
139
|
filterFileds.push(_key)
|
|
140
140
|
if (_value || isNumber(_value)) {
|
|
141
141
|
_tagKeys.push(_key)
|
|
142
|
-
rowData.
|
|
143
|
-
|
|
142
|
+
rowData.fields[_key] = _value // 这里不需要转译
|
|
143
|
+
fieldsStr.push(escapeRowData(_key) + '=' + escapeRowField(_value))
|
|
144
144
|
}
|
|
145
145
|
})
|
|
146
146
|
if (_tagKeys.length) {
|
|
147
|
-
rowData.
|
|
148
|
-
|
|
147
|
+
rowData.fields[CUSTOM_KEYS] = escapeRowField(_tagKeys)
|
|
148
|
+
fieldsStr.push(escapeRowData(CUSTOM_KEYS) + '=' + escapeRowField(_tagKeys))
|
|
149
149
|
}
|
|
150
150
|
}
|
|
151
151
|
if (message.type === RumEventType.LOGGER) {
|
|
152
152
|
// 这里处理日志类型数据自定义字段
|
|
153
|
-
|
|
154
153
|
each(message, function (value, key) {
|
|
155
154
|
if (
|
|
156
155
|
filterFileds.indexOf(key) === -1 &&
|
|
157
156
|
(isNumber(value) || isString(value) || isBoolean(value))
|
|
158
157
|
) {
|
|
159
|
-
rowData.
|
|
160
|
-
|
|
158
|
+
rowData.fields[key] = value // 这里不需要转译
|
|
159
|
+
fieldsStr.push(escapeRowData(key) + '=' + escapeRowField(value))
|
|
161
160
|
}
|
|
162
161
|
})
|
|
163
162
|
}
|