@cloudcare/browser-core 3.1.1 → 3.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/cjs/browser/htmlDomUtils.js +13 -4
  2. package/cjs/browser/htmlDomUtils.js.map +1 -1
  3. package/cjs/configuration/configuration.js +3 -1
  4. package/cjs/configuration/configuration.js.map +1 -1
  5. package/cjs/dataMap.js +7 -3
  6. package/cjs/dataMap.js.map +1 -1
  7. package/cjs/helper/enums.js +2 -1
  8. package/cjs/helper/enums.js.map +1 -1
  9. package/cjs/helper/errorTools.js +2 -1
  10. package/cjs/helper/errorTools.js.map +1 -1
  11. package/cjs/helper/monitor.js +1 -0
  12. package/cjs/helper/monitor.js.map +1 -1
  13. package/cjs/helper/serialisation/contextManager.js +20 -5
  14. package/cjs/helper/serialisation/contextManager.js.map +1 -1
  15. package/cjs/helper/serialisation/rowData.js +7 -5
  16. package/cjs/helper/serialisation/rowData.js.map +1 -1
  17. package/cjs/helper/serialisation/storedContextManager.js +47 -0
  18. package/cjs/helper/serialisation/storedContextManager.js.map +1 -0
  19. package/cjs/helper/tools.js +19 -3
  20. package/cjs/helper/tools.js.map +1 -1
  21. package/cjs/index.js +11 -0
  22. package/cjs/index.js.map +1 -1
  23. package/cjs/transport/batch.js +23 -10
  24. package/cjs/transport/batch.js.map +1 -1
  25. package/cjs/transport/httpRequest.js +31 -12
  26. package/cjs/transport/httpRequest.js.map +1 -1
  27. package/cjs/transport/startBatchWithReplica.js +2 -2
  28. package/cjs/transport/startBatchWithReplica.js.map +1 -1
  29. package/esm/browser/htmlDomUtils.js +11 -3
  30. package/esm/browser/htmlDomUtils.js.map +1 -1
  31. package/esm/configuration/configuration.js +3 -1
  32. package/esm/configuration/configuration.js.map +1 -1
  33. package/esm/dataMap.js +7 -3
  34. package/esm/dataMap.js.map +1 -1
  35. package/esm/helper/enums.js +2 -1
  36. package/esm/helper/enums.js.map +1 -1
  37. package/esm/helper/errorTools.js +1 -0
  38. package/esm/helper/errorTools.js.map +1 -1
  39. package/esm/helper/monitor.js +1 -0
  40. package/esm/helper/monitor.js.map +1 -1
  41. package/esm/helper/serialisation/contextManager.js +21 -6
  42. package/esm/helper/serialisation/contextManager.js.map +1 -1
  43. package/esm/helper/serialisation/rowData.js +8 -6
  44. package/esm/helper/serialisation/rowData.js.map +1 -1
  45. package/esm/helper/serialisation/storedContextManager.js +39 -0
  46. package/esm/helper/serialisation/storedContextManager.js.map +1 -0
  47. package/esm/helper/tools.js +18 -3
  48. package/esm/helper/tools.js.map +1 -1
  49. package/esm/index.js +1 -0
  50. package/esm/index.js.map +1 -1
  51. package/esm/transport/batch.js +24 -11
  52. package/esm/transport/batch.js.map +1 -1
  53. package/esm/transport/httpRequest.js +31 -12
  54. package/esm/transport/httpRequest.js.map +1 -1
  55. package/esm/transport/startBatchWithReplica.js +2 -2
  56. package/esm/transport/startBatchWithReplica.js.map +1 -1
  57. package/package.json +2 -2
  58. package/src/browser/htmlDomUtils.js +11 -4
  59. package/src/configuration/configuration.js +3 -1
  60. package/src/dataMap.js +9 -3
  61. package/src/helper/enums.js +2 -1
  62. package/src/helper/errorTools.js +1 -0
  63. package/src/helper/monitor.js +1 -0
  64. package/src/helper/serialisation/contextManager.js +21 -6
  65. package/src/helper/serialisation/rowData.js +9 -6
  66. package/src/helper/serialisation/storedContextManager.js +56 -0
  67. package/src/helper/tools.js +19 -4
  68. package/src/index.js +1 -0
  69. package/src/transport/batch.js +28 -12
  70. package/src/transport/httpRequest.js +46 -11
  71. package/src/transport/startBatchWithReplica.js +3 -1
@@ -1,10 +1,11 @@
1
1
  import { display } from '../helper/display';
2
- import { values, findByPath, each, isNumber, isArray, extend, isString, toServerDuration, isBoolean, isEmptyObject, isObject } from '../helper/tools';
2
+ import { values, findByPath, each, isNumber, isArray, extend, isString, isEmptyObject, isObject } from '../helper/tools';
3
3
  import { escapeJsonValue, escapeRowField, escapeRowData } from '../helper/serialisation/rowData';
4
4
  import { commonTags, dataMap, commonFields } from '../dataMap';
5
5
  import { RumEventType } from '../helper/enums';
6
6
  import { computeBytesCount } from '../helper/byteUtils';
7
7
  import { isPageExitReason } from '../browser/pageExitObservable';
8
+ import { jsonStringify } from '../helper/serialisation/jsonStringify';
8
9
  // https://en.wikipedia.org/wiki/UTF-8
9
10
  // eslint-disable-next-line no-control-regex
10
11
  var HAS_MULTI_BYTES_CHARACTERS = /[^\u0000-\u007F]/;
@@ -31,7 +32,7 @@ export var processedMessageByDataMap = function processedMessageByDataMap(messag
31
32
  var _value = findByPath(message, value_path);
32
33
  filterFileds.push(_key);
33
34
  if (_value || isNumber(_value)) {
34
- rowData.tags[_key] = escapeJsonValue(_value);
35
+ rowData.tags[_key] = escapeJsonValue(_value, true);
35
36
  tagsStr.push(escapeRowData(_key) + '=' + escapeRowData(_value));
36
37
  }
37
38
  });
@@ -43,14 +44,14 @@ export var processedMessageByDataMap = function processedMessageByDataMap(messag
43
44
  var _valueData = findByPath(message, value_path);
44
45
  filterFileds.push(_key);
45
46
  if (_valueData !== undefined && _valueData !== null) {
46
- rowData.fields[_key] = _valueData; // 这里不需要转译
47
+ rowData.fields[_key] = escapeJsonValue(_valueData); // 这里不需要转译
47
48
  fieldsStr.push(escapeRowData(_key) + '=' + escapeRowField(_valueData));
48
49
  }
49
50
  } else if (isString(_value)) {
50
51
  var _valueData = findByPath(message, _value);
51
52
  filterFileds.push(_key);
52
53
  if (_valueData !== undefined && _valueData !== null) {
53
- rowData.fields[_key] = _valueData; // 这里不需要转译
54
+ rowData.fields[_key] = escapeJsonValue(_valueData); // 这里不需要转译
54
55
  fieldsStr.push(escapeRowData(_key) + '=' + escapeRowField(_valueData));
55
56
  }
56
57
  }
@@ -64,12 +65,12 @@ export var processedMessageByDataMap = function processedMessageByDataMap(messag
64
65
  filterFileds.push(_key);
65
66
  if (_value !== undefined && _value !== null) {
66
67
  _tagKeys.push(_key);
67
- rowData.fields[_key] = _value; // 这里不需要转译
68
+ rowData.fields[_key] = escapeJsonValue(_value); // 这里不需要转译
68
69
  fieldsStr.push(escapeRowData(_key) + '=' + escapeRowField(_value));
69
70
  }
70
71
  });
71
72
  if (_tagKeys.length) {
72
- rowData.fields[CUSTOM_KEYS] = escapeRowField(_tagKeys);
73
+ rowData.fields[CUSTOM_KEYS] = escapeJsonValue(_tagKeys);
73
74
  fieldsStr.push(escapeRowData(CUSTOM_KEYS) + '=' + escapeRowField(_tagKeys));
74
75
  }
75
76
  }
@@ -77,7 +78,7 @@ export var processedMessageByDataMap = function processedMessageByDataMap(messag
77
78
  // 这里处理日志类型数据自定义字段
78
79
  each(message, function (value, key) {
79
80
  if (filterFileds.indexOf(key) === -1 && value !== undefined && value !== null) {
80
- rowData.fields[key] = value; // 这里不需要转译
81
+ rowData.fields[key] = escapeJsonValue(value); // 这里不需要转译
81
82
  fieldsStr.push(escapeRowData(key) + '=' + escapeRowField(value));
82
83
  }
83
84
  });
@@ -91,7 +92,7 @@ export var processedMessageByDataMap = function processedMessageByDataMap(messag
91
92
  hasFileds = true;
92
93
  }
93
94
  rowStr = rowStr + ' ' + message.date;
94
- rowData.time = toServerDuration(message.date); // 这里不需要转译
95
+ rowData.time = message.date; // 这里不需要转译
95
96
  }
96
97
  });
97
98
 
@@ -100,12 +101,13 @@ export var processedMessageByDataMap = function processedMessageByDataMap(messag
100
101
  rowData: hasFileds ? rowData : undefined
101
102
  };
102
103
  };
103
- var batch = function batch(request, flushController, messageBytesLimit) {
104
+ var batch = function batch(request, flushController, messageBytesLimit, sendContentTypeByJson) {
104
105
  this.pushOnlyBuffer = [];
105
106
  this.upsertBuffer = {};
106
107
  this.request = request;
107
108
  this.flushController = flushController;
108
109
  this.messageBytesLimit = messageBytesLimit;
110
+ this.sendContentTypeByJson = sendContentTypeByJson;
109
111
  var _this = this;
110
112
  this.flushController.flushObservable.subscribe(function (event) {
111
113
  _this.flush(event);
@@ -122,8 +124,14 @@ batch.prototype.flush = function (event) {
122
124
  this.pushOnlyBuffer = [];
123
125
  this.upsertBuffer = {};
124
126
  if (messages.length > 0) {
127
+ var payloadData = '';
128
+ if (this.sendContentTypeByJson) {
129
+ payloadData = '[' + messages.join(',') + ']';
130
+ } else {
131
+ payloadData = messages.join('\n');
132
+ }
125
133
  var payload = {
126
- data: messages.join('\n'),
134
+ data: payloadData,
127
135
  bytesCount: event.bytesCount,
128
136
  flushReason: event.reason
129
137
  };
@@ -148,7 +156,12 @@ batch.prototype.addOrUpdate = function (message, key) {
148
156
  this.push(processedMessage, messageBytesCount, key);
149
157
  };
150
158
  batch.prototype.process = function (message) {
151
- var processedMessage = processedMessageByDataMap(message).rowStr;
159
+ var processedMessage = '';
160
+ if (this.sendContentTypeByJson) {
161
+ processedMessage = jsonStringify(processedMessageByDataMap(message).rowData);
162
+ } else {
163
+ processedMessage = processedMessageByDataMap(message).rowStr;
164
+ }
152
165
  var messageBytesCount = computeBytesCount(processedMessage);
153
166
  return {
154
167
  processedMessage: processedMessage,
@@ -1 +1 @@
1
- {"version":3,"file":"batch.js","names":["display","values","findByPath","each","isNumber","isArray","extend","isString","toServerDuration","isBoolean","isEmptyObject","isObject","escapeJsonValue","escapeRowField","escapeRowData","commonTags","dataMap","commonFields","RumEventType","computeBytesCount","isPageExitReason","HAS_MULTI_BYTES_CHARACTERS","CUSTOM_KEYS","processedMessageByDataMap","message","type","rowStr","rowData","undefined","tags","fields","hasFileds","value","key","measurement","tagsStr","filterFileds","value_path","_key","_value","push","fieldsStr","length","_valueData","context","_tagKeys","indexOf","LOGGER","join","date","time","batch","request","flushController","messageBytesLimit","pushOnlyBuffer","upsertBuffer","_this","flushObservable","subscribe","event","flush","prototype","add","addOrUpdate","upsert","messages","concat","payload","data","bytesCount","flushReason","reason","sendOnExit","send","_process","process","processedMessage","messageBytesCount","warn","hasMessageFor","remove","separatorBytesCount","getMessagesCount","notifyBeforeAddMessage","notifyAfterAddMessage","removedMessage","notifyAfterRemoveMessage","Batch"],"sources":["../../src/transport/batch.js"],"sourcesContent":["import { display } from '../helper/display'\nimport {\n values,\n findByPath,\n each,\n isNumber,\n isArray,\n extend,\n isString,\n toServerDuration,\n isBoolean,\n isEmptyObject,\n isObject\n} from '../helper/tools'\nimport {\n escapeJsonValue,\n escapeRowField,\n escapeRowData\n} from '../helper/serialisation/rowData'\nimport { commonTags, dataMap, commonFields } from '../dataMap'\nimport { RumEventType } from '../helper/enums'\nimport { computeBytesCount } from '../helper/byteUtils'\nimport { isPageExitReason } from '../browser/pageExitObservable'\n// https://en.wikipedia.org/wiki/UTF-8\n// eslint-disable-next-line no-control-regex\nvar HAS_MULTI_BYTES_CHARACTERS = /[^\\u0000-\\u007F]/\nvar CUSTOM_KEYS = 'custom_keys'\nexport var processedMessageByDataMap = function (message) {\n if (!message || !message.type)\n return {\n rowStr: '',\n rowData: undefined\n }\n\n var rowData = { tags: {}, fields: {} }\n var hasFileds = false\n var rowStr = ''\n each(dataMap, function (value, key) {\n if (value.type === message.type) {\n rowStr += key + ','\n rowData.measurement = key\n var tagsStr = []\n var tags = extend({}, commonTags, value.tags)\n var filterFileds = ['date', 'type', CUSTOM_KEYS] // 已经在datamap中定义过的fields和tags\n each(tags, function (value_path, _key) {\n var _value = findByPath(message, value_path)\n filterFileds.push(_key)\n if (_value || isNumber(_value)) {\n rowData.tags[_key] = escapeJsonValue(_value)\n tagsStr.push(escapeRowData(_key) + '=' + escapeRowData(_value))\n }\n })\n\n var fieldsStr = []\n var fields = extend({}, commonFields, value.fields)\n each(fields, function (_value, _key) {\n if (isArray(_value) && _value.length === 2) {\n var value_path = _value[1]\n var _valueData = findByPath(message, value_path)\n filterFileds.push(_key)\n if (_valueData !== undefined && _valueData !== null) {\n rowData.fields[_key] = _valueData // 这里不需要转译\n fieldsStr.push(\n escapeRowData(_key) + '=' + escapeRowField(_valueData)\n )\n }\n } else if (isString(_value)) {\n var _valueData = findByPath(message, _value)\n filterFileds.push(_key)\n if (_valueData !== undefined && _valueData !== null) {\n rowData.fields[_key] = _valueData // 这里不需要转译\n fieldsStr.push(\n escapeRowData(_key) + '=' + escapeRowField(_valueData)\n )\n }\n }\n })\n if (\n message.context &&\n isObject(message.context) &&\n !isEmptyObject(message.context)\n ) {\n // 自定义tag, 存储成field\n var _tagKeys = []\n each(message.context, function (_value, _key) {\n // 如果和之前tag重名,则舍弃\n if (filterFileds.indexOf(_key) > -1) return\n filterFileds.push(_key)\n if (_value !== undefined && _value !== null) {\n _tagKeys.push(_key)\n rowData.fields[_key] = _value // 这里不需要转译\n fieldsStr.push(escapeRowData(_key) + '=' + escapeRowField(_value))\n }\n })\n if (_tagKeys.length) {\n rowData.fields[CUSTOM_KEYS] = escapeRowField(_tagKeys)\n fieldsStr.push(\n escapeRowData(CUSTOM_KEYS) + '=' + escapeRowField(_tagKeys)\n )\n }\n }\n if (message.type === RumEventType.LOGGER) {\n // 这里处理日志类型数据自定义字段\n each(message, function (value, key) {\n if (\n filterFileds.indexOf(key) === -1 &&\n value !== undefined &&\n value !== null\n ) {\n rowData.fields[key] = value // 这里不需要转译\n fieldsStr.push(escapeRowData(key) + '=' + escapeRowField(value))\n }\n })\n }\n if (tagsStr.length) {\n rowStr += tagsStr.join(',')\n }\n if (fieldsStr.length) {\n rowStr += ' '\n rowStr += fieldsStr.join(',')\n hasFileds = true\n }\n rowStr = rowStr + ' ' + message.date\n rowData.time = toServerDuration(message.date) // 这里不需要转译\n }\n })\n return {\n rowStr: hasFileds ? rowStr : '',\n rowData: hasFileds ? rowData : undefined\n }\n}\nvar batch = function (request, flushController, messageBytesLimit) {\n this.pushOnlyBuffer = []\n this.upsertBuffer = {}\n this.request = request\n this.flushController = flushController\n this.messageBytesLimit = messageBytesLimit\n var _this = this\n this.flushController.flushObservable.subscribe(function (event) {\n _this.flush(event)\n })\n}\nbatch.prototype.add = function (message) {\n this.addOrUpdate(message)\n}\nbatch.prototype.upsert = function (message, key) {\n this.addOrUpdate(message, key)\n}\nbatch.prototype.flush = function (event) {\n var messages = this.pushOnlyBuffer.concat(values(this.upsertBuffer))\n this.pushOnlyBuffer = []\n this.upsertBuffer = {}\n if (messages.length > 0) {\n var payload = {\n data: messages.join('\\n'),\n bytesCount: event.bytesCount,\n flushReason: event.reason\n }\n if (isPageExitReason(event.reason)) {\n this.request.sendOnExit(payload)\n } else {\n this.request.send(payload)\n }\n }\n}\n\nbatch.prototype.addOrUpdate = function (message, key) {\n var _process = this.process(message)\n var processedMessage = _process.processedMessage\n var messageBytesCount = _process.messageBytesCount\n if (messageBytesCount >= this.messageBytesLimit) {\n display.warn(\n 'Discarded a message whose size was bigger than the maximum allowed size ' +\n this.messageBytesLimit +\n 'KB.'\n )\n return\n }\n if (this.hasMessageFor(key)) {\n this.remove(key)\n }\n this.push(processedMessage, messageBytesCount, key)\n}\nbatch.prototype.process = function (message) {\n var processedMessage = processedMessageByDataMap(message).rowStr\n var messageBytesCount = computeBytesCount(processedMessage)\n return {\n processedMessage: processedMessage,\n messageBytesCount: messageBytesCount\n }\n}\n\nbatch.prototype.push = function (processedMessage, messageBytesCount, key) {\n var separatorBytesCount = this.flushController.getMessagesCount() > 0 ? 1 : 0\n this.flushController.notifyBeforeAddMessage(\n messageBytesCount + separatorBytesCount\n )\n if (key !== undefined) {\n this.upsertBuffer[key] = processedMessage\n } else {\n this.pushOnlyBuffer.push(processedMessage)\n }\n this.flushController.notifyAfterAddMessage()\n}\n\nbatch.prototype.remove = function (key) {\n var removedMessage = this.upsertBuffer[key]\n delete this.upsertBuffer[key]\n var messageBytesCount = computeBytesCount(removedMessage)\n // If there are other messages, a '\\n' will be added at serialization\n var separatorBytesCount = this.flushController.getMessagesCount() > 1 ? 1 : 0\n this.flushController.notifyAfterRemoveMessage(\n messageBytesCount + separatorBytesCount\n )\n}\n\nbatch.prototype.hasMessageFor = function (key) {\n return key !== undefined && this.upsertBuffer[key] !== undefined\n}\nexport var Batch = batch\n"],"mappings":"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"}
1
+ {"version":3,"file":"batch.js","names":["display","values","findByPath","each","isNumber","isArray","extend","isString","isEmptyObject","isObject","escapeJsonValue","escapeRowField","escapeRowData","commonTags","dataMap","commonFields","RumEventType","computeBytesCount","isPageExitReason","jsonStringify","HAS_MULTI_BYTES_CHARACTERS","CUSTOM_KEYS","processedMessageByDataMap","message","type","rowStr","rowData","undefined","tags","fields","hasFileds","value","key","measurement","tagsStr","filterFileds","value_path","_key","_value","push","fieldsStr","length","_valueData","context","_tagKeys","indexOf","LOGGER","join","date","time","batch","request","flushController","messageBytesLimit","sendContentTypeByJson","pushOnlyBuffer","upsertBuffer","_this","flushObservable","subscribe","event","flush","prototype","add","addOrUpdate","upsert","messages","concat","payloadData","payload","data","bytesCount","flushReason","reason","sendOnExit","send","_process","process","processedMessage","messageBytesCount","warn","hasMessageFor","remove","separatorBytesCount","getMessagesCount","notifyBeforeAddMessage","notifyAfterAddMessage","removedMessage","notifyAfterRemoveMessage","Batch"],"sources":["../../src/transport/batch.js"],"sourcesContent":["import { display } from '../helper/display'\nimport {\n values,\n findByPath,\n each,\n isNumber,\n isArray,\n extend,\n isString,\n isEmptyObject,\n isObject\n} from '../helper/tools'\nimport {\n escapeJsonValue,\n escapeRowField,\n escapeRowData\n} from '../helper/serialisation/rowData'\nimport { commonTags, dataMap, commonFields } from '../dataMap'\nimport { RumEventType } from '../helper/enums'\nimport { computeBytesCount } from '../helper/byteUtils'\nimport { isPageExitReason } from '../browser/pageExitObservable'\nimport { jsonStringify } from '../helper/serialisation/jsonStringify'\n// https://en.wikipedia.org/wiki/UTF-8\n// eslint-disable-next-line no-control-regex\nvar HAS_MULTI_BYTES_CHARACTERS = /[^\\u0000-\\u007F]/\nvar CUSTOM_KEYS = 'custom_keys'\nexport var processedMessageByDataMap = function (message) {\n if (!message || !message.type)\n return {\n rowStr: '',\n rowData: undefined\n }\n\n var rowData = { tags: {}, fields: {} }\n var hasFileds = false\n var rowStr = ''\n each(dataMap, function (value, key) {\n if (value.type === message.type) {\n rowStr += key + ','\n rowData.measurement = key\n var tagsStr = []\n var tags = extend({}, commonTags, value.tags)\n var filterFileds = ['date', 'type', CUSTOM_KEYS] // 已经在datamap中定义过的fields和tags\n each(tags, function (value_path, _key) {\n var _value = findByPath(message, value_path)\n filterFileds.push(_key)\n if (_value || isNumber(_value)) {\n rowData.tags[_key] = escapeJsonValue(_value, true)\n tagsStr.push(escapeRowData(_key) + '=' + escapeRowData(_value))\n }\n })\n\n var fieldsStr = []\n var fields = extend({}, commonFields, value.fields)\n each(fields, function (_value, _key) {\n if (isArray(_value) && _value.length === 2) {\n var value_path = _value[1]\n var _valueData = findByPath(message, value_path)\n filterFileds.push(_key)\n if (_valueData !== undefined && _valueData !== null) {\n rowData.fields[_key] = escapeJsonValue(_valueData) // 这里不需要转译\n fieldsStr.push(\n escapeRowData(_key) + '=' + escapeRowField(_valueData)\n )\n }\n } else if (isString(_value)) {\n var _valueData = findByPath(message, _value)\n filterFileds.push(_key)\n if (_valueData !== undefined && _valueData !== null) {\n rowData.fields[_key] = escapeJsonValue(_valueData) // 这里不需要转译\n fieldsStr.push(\n escapeRowData(_key) + '=' + escapeRowField(_valueData)\n )\n }\n }\n })\n if (\n message.context &&\n isObject(message.context) &&\n !isEmptyObject(message.context)\n ) {\n // 自定义tag, 存储成field\n var _tagKeys = []\n each(message.context, function (_value, _key) {\n // 如果和之前tag重名,则舍弃\n if (filterFileds.indexOf(_key) > -1) return\n filterFileds.push(_key)\n if (_value !== undefined && _value !== null) {\n _tagKeys.push(_key)\n rowData.fields[_key] = escapeJsonValue(_value) // 这里不需要转译\n fieldsStr.push(escapeRowData(_key) + '=' + escapeRowField(_value))\n }\n })\n if (_tagKeys.length) {\n rowData.fields[CUSTOM_KEYS] = escapeJsonValue(_tagKeys)\n fieldsStr.push(\n escapeRowData(CUSTOM_KEYS) + '=' + escapeRowField(_tagKeys)\n )\n }\n }\n if (message.type === RumEventType.LOGGER) {\n // 这里处理日志类型数据自定义字段\n each(message, function (value, key) {\n if (\n filterFileds.indexOf(key) === -1 &&\n value !== undefined &&\n value !== null\n ) {\n rowData.fields[key] = escapeJsonValue(value) // 这里不需要转译\n fieldsStr.push(escapeRowData(key) + '=' + escapeRowField(value))\n }\n })\n }\n if (tagsStr.length) {\n rowStr += tagsStr.join(',')\n }\n if (fieldsStr.length) {\n rowStr += ' '\n rowStr += fieldsStr.join(',')\n hasFileds = true\n }\n rowStr = rowStr + ' ' + message.date\n rowData.time = message.date // 这里不需要转译\n }\n })\n return {\n rowStr: hasFileds ? rowStr : '',\n rowData: hasFileds ? rowData : undefined\n }\n}\nvar batch = function (\n request,\n flushController,\n messageBytesLimit,\n sendContentTypeByJson\n) {\n this.pushOnlyBuffer = []\n this.upsertBuffer = {}\n this.request = request\n this.flushController = flushController\n this.messageBytesLimit = messageBytesLimit\n this.sendContentTypeByJson = sendContentTypeByJson\n var _this = this\n this.flushController.flushObservable.subscribe(function (event) {\n _this.flush(event)\n })\n}\nbatch.prototype.add = function (message) {\n this.addOrUpdate(message)\n}\nbatch.prototype.upsert = function (message, key) {\n this.addOrUpdate(message, key)\n}\nbatch.prototype.flush = function (event) {\n var messages = this.pushOnlyBuffer.concat(values(this.upsertBuffer))\n this.pushOnlyBuffer = []\n this.upsertBuffer = {}\n if (messages.length > 0) {\n var payloadData = ''\n if (this.sendContentTypeByJson) {\n payloadData = '[' + messages.join(',') + ']'\n } else {\n payloadData = messages.join('\\n')\n }\n var payload = {\n data: payloadData,\n bytesCount: event.bytesCount,\n flushReason: event.reason\n }\n if (isPageExitReason(event.reason)) {\n this.request.sendOnExit(payload)\n } else {\n this.request.send(payload)\n }\n }\n}\n\nbatch.prototype.addOrUpdate = function (message, key) {\n var _process = this.process(message)\n var processedMessage = _process.processedMessage\n var messageBytesCount = _process.messageBytesCount\n if (messageBytesCount >= this.messageBytesLimit) {\n display.warn(\n 'Discarded a message whose size was bigger than the maximum allowed size ' +\n this.messageBytesLimit +\n 'KB.'\n )\n return\n }\n if (this.hasMessageFor(key)) {\n this.remove(key)\n }\n this.push(processedMessage, messageBytesCount, key)\n}\nbatch.prototype.process = function (message) {\n var processedMessage = ''\n if (this.sendContentTypeByJson) {\n processedMessage = jsonStringify(processedMessageByDataMap(message).rowData)\n } else {\n processedMessage = processedMessageByDataMap(message).rowStr\n }\n var messageBytesCount = computeBytesCount(processedMessage)\n return {\n processedMessage: processedMessage,\n messageBytesCount: messageBytesCount\n }\n}\n\nbatch.prototype.push = function (processedMessage, messageBytesCount, key) {\n var separatorBytesCount = this.flushController.getMessagesCount() > 0 ? 1 : 0\n this.flushController.notifyBeforeAddMessage(\n messageBytesCount + separatorBytesCount\n )\n if (key !== undefined) {\n this.upsertBuffer[key] = processedMessage\n } else {\n this.pushOnlyBuffer.push(processedMessage)\n }\n this.flushController.notifyAfterAddMessage()\n}\n\nbatch.prototype.remove = function (key) {\n var removedMessage = this.upsertBuffer[key]\n delete this.upsertBuffer[key]\n var messageBytesCount = computeBytesCount(removedMessage)\n // If there are other messages, a '\\n' will be added at serialization\n var separatorBytesCount = this.flushController.getMessagesCount() > 1 ? 1 : 0\n this.flushController.notifyAfterRemoveMessage(\n messageBytesCount + separatorBytesCount\n )\n}\n\nbatch.prototype.hasMessageFor = function (key) {\n return key !== undefined && this.upsertBuffer[key] !== undefined\n}\nexport var Batch = batch\n"],"mappings":"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"}
@@ -13,10 +13,11 @@ function addBatchPrecision(url) {
13
13
  if (!url) return url;
14
14
  return url + (url.indexOf('?') === -1 ? '?' : '&') + 'precision=ms';
15
15
  }
16
- export function createHttpRequest(endpointUrl, bytesLimit, reportError) {
16
+ export function createHttpRequest(endpointUrl, bytesLimit, sendContentTypeByJson, reportError) {
17
+ var contentType = sendContentTypeByJson ? 'application/json; charset=UTF-8' : undefined;
17
18
  var retryState = newRetryState();
18
19
  var sendStrategyForRetry = function sendStrategyForRetry(payload, onResponse) {
19
- return fetchKeepAliveStrategy(endpointUrl, bytesLimit, payload, onResponse);
20
+ return fetchKeepAliveStrategy(endpointUrl, bytesLimit, contentType, payload, onResponse);
20
21
  };
21
22
  return {
22
23
  send: function send(payload) {
@@ -27,18 +28,26 @@ export function createHttpRequest(endpointUrl, bytesLimit, reportError) {
27
28
  * keep using sendBeaconStrategy on exit
28
29
  */
29
30
  sendOnExit: function sendOnExit(payload) {
30
- sendBeaconStrategy(endpointUrl, bytesLimit, payload);
31
+ sendBeaconStrategy(endpointUrl, bytesLimit, contentType, payload);
31
32
  }
32
33
  };
33
34
  }
34
- function sendBeaconStrategy(endpointUrl, bytesLimit, payload) {
35
+ function sendBeaconStrategy(endpointUrl, bytesLimit, contentType, payload) {
35
36
  var data = payload.data;
36
37
  var bytesCount = payload.bytesCount;
37
38
  var url = addBatchPrecision(endpointUrl);
38
39
  var canUseBeacon = !!navigator.sendBeacon && bytesCount < bytesLimit;
39
40
  if (canUseBeacon) {
40
41
  try {
41
- var isQueued = navigator.sendBeacon(url, data);
42
+ var beaconData;
43
+ if (contentType) {
44
+ beaconData = new Blob([data], {
45
+ type: contentType
46
+ });
47
+ } else {
48
+ beaconData = data;
49
+ }
50
+ var isQueued = navigator.sendBeacon(url, beaconData);
42
51
  if (isQueued) {
43
52
  return;
44
53
  }
@@ -46,20 +55,26 @@ function sendBeaconStrategy(endpointUrl, bytesLimit, payload) {
46
55
  // reportBeaconError(e)
47
56
  }
48
57
  }
49
- sendXHR(url, data);
58
+ sendXHR(url, contentType, data);
50
59
  }
51
- export function fetchKeepAliveStrategy(endpointUrl, bytesLimit, payload, onResponse) {
60
+ export function fetchKeepAliveStrategy(endpointUrl, bytesLimit, contentType, payload, onResponse) {
52
61
  var data = payload.data;
53
62
  var bytesCount = payload.bytesCount;
54
63
  var url = addBatchPrecision(endpointUrl);
55
64
  var canUseKeepAlive = isKeepAliveSupported() && bytesCount < bytesLimit;
56
65
  if (canUseKeepAlive) {
57
- fetch(url, {
66
+ var fetchOption = {
58
67
  method: 'POST',
59
68
  body: data,
60
69
  keepalive: true,
61
70
  mode: 'cors'
62
- }).then(monitor(function (response) {
71
+ };
72
+ if (contentType) {
73
+ fetchOption.headers = {
74
+ 'Content-Type': contentType
75
+ };
76
+ }
77
+ fetch(url, fetchOption).then(monitor(function (response) {
63
78
  if (typeof onResponse === 'function') {
64
79
  onResponse({
65
80
  status: response.status,
@@ -68,10 +83,10 @@ export function fetchKeepAliveStrategy(endpointUrl, bytesLimit, payload, onRespo
68
83
  }
69
84
  }), monitor(function () {
70
85
  // failed to queue the request
71
- sendXHR(url, data, onResponse);
86
+ sendXHR(url, contentType, data, onResponse);
72
87
  }));
73
88
  } else {
74
- sendXHR(url, data, onResponse);
89
+ sendXHR(url, contentType, data, onResponse);
75
90
  }
76
91
  }
77
92
  function isKeepAliveSupported() {
@@ -82,9 +97,13 @@ function isKeepAliveSupported() {
82
97
  return false;
83
98
  }
84
99
  }
85
- function sendXHR(url, data, onResponse) {
100
+ function sendXHR(url, contentType, data, onResponse) {
86
101
  var request = new XMLHttpRequest();
87
102
  request.open('POST', url, true);
103
+ if (contentType) {
104
+ //application/json; charset=UTF-8
105
+ request.setRequestHeader('Content-Type', contentType);
106
+ }
88
107
  addEventListener(request, 'loadend', function () {
89
108
  if (typeof onResponse === 'function') {
90
109
  onResponse({
@@ -1 +1 @@
1
- {"version":3,"file":"httpRequest.js","names":["newRetryState","sendWithRetryStrategy","addEventListener","monitor","addBatchPrecision","url","indexOf","createHttpRequest","endpointUrl","bytesLimit","reportError","retryState","sendStrategyForRetry","payload","onResponse","fetchKeepAliveStrategy","send","sendOnExit","sendBeaconStrategy","data","bytesCount","canUseBeacon","navigator","sendBeacon","isQueued","e","sendXHR","canUseKeepAlive","isKeepAliveSupported","fetch","method","body","keepalive","mode","then","response","status","type","window","Request","_unused","request","XMLHttpRequest","open","once"],"sources":["../../src/transport/httpRequest.js"],"sourcesContent":["import { newRetryState, sendWithRetryStrategy } from './sendWithRetryStrategy'\nimport { addEventListener } from '../browser/addEventListener'\nimport { monitor } from '../helper/monitor'\n/**\n * Use POST request without content type to:\n * - avoid CORS preflight requests\n * - allow usage of sendBeacon\n *\n * multiple elements are sent separated by \\n in order\n * to be parsed correctly without content type header\n */\nfunction addBatchPrecision(url) {\n if (!url) return url\n return url + (url.indexOf('?') === -1 ? '?' : '&') + 'precision=ms'\n}\nexport function createHttpRequest(endpointUrl, bytesLimit, reportError) {\n var retryState = newRetryState()\n var sendStrategyForRetry = function (payload, onResponse) {\n return fetchKeepAliveStrategy(endpointUrl, bytesLimit, payload, onResponse)\n }\n\n return {\n send: function (payload) {\n sendWithRetryStrategy(\n payload,\n retryState,\n sendStrategyForRetry,\n endpointUrl,\n reportError\n )\n },\n /**\n * Since fetch keepalive behaves like regular fetch on Firefox,\n * keep using sendBeaconStrategy on exit\n */\n sendOnExit: function (payload) {\n sendBeaconStrategy(endpointUrl, bytesLimit, payload)\n }\n }\n}\n\nfunction sendBeaconStrategy(endpointUrl, bytesLimit, payload) {\n var data = payload.data\n var bytesCount = payload.bytesCount\n var url = addBatchPrecision(endpointUrl)\n var canUseBeacon = !!navigator.sendBeacon && bytesCount < bytesLimit\n if (canUseBeacon) {\n try {\n var isQueued = navigator.sendBeacon(url, data)\n\n if (isQueued) {\n return\n }\n } catch (e) {\n // reportBeaconError(e)\n }\n }\n sendXHR(url, data)\n}\n\nexport function fetchKeepAliveStrategy(\n endpointUrl,\n bytesLimit,\n payload,\n onResponse\n) {\n var data = payload.data\n var bytesCount = payload.bytesCount\n var url = addBatchPrecision(endpointUrl)\n var canUseKeepAlive = isKeepAliveSupported() && bytesCount < bytesLimit\n if (canUseKeepAlive) {\n fetch(url, {\n method: 'POST',\n body: data,\n keepalive: true,\n mode: 'cors'\n }).then(\n monitor(function (response) {\n if (typeof onResponse === 'function') {\n onResponse({ status: response.status, type: response.type })\n }\n }),\n monitor(function () {\n // failed to queue the request\n sendXHR(url, data, onResponse)\n })\n )\n } else {\n sendXHR(url, data, onResponse)\n }\n}\n\nfunction isKeepAliveSupported() {\n // Request can throw, cf https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#errors\n try {\n return window.Request && 'keepalive' in new Request('http://a')\n } catch {\n return false\n }\n}\n\nfunction sendXHR(url, data, onResponse) {\n const request = new XMLHttpRequest()\n request.open('POST', url, true)\n addEventListener(\n request,\n 'loadend',\n function () {\n if (typeof onResponse === 'function') {\n onResponse({ status: request.status })\n }\n },\n {\n once: true\n }\n )\n request.send(data)\n}\n"],"mappings":"AAAA,SAASA,aAAa,EAAEC,qBAAqB,QAAQ,yBAAyB;AAC9E,SAASC,gBAAgB,QAAQ,6BAA6B;AAC9D,SAASC,OAAO,QAAQ,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,iBAAiBA,CAACC,GAAG,EAAE;EAC9B,IAAI,CAACA,GAAG,EAAE,OAAOA,GAAG;EACpB,OAAOA,GAAG,IAAIA,GAAG,CAACC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,cAAc;AACrE;AACA,OAAO,SAASC,iBAAiBA,CAACC,WAAW,EAAEC,UAAU,EAAEC,WAAW,EAAE;EACtE,IAAIC,UAAU,GAAGX,aAAa,CAAC,CAAC;EAChC,IAAIY,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAaC,OAAO,EAAEC,UAAU,EAAE;IACxD,OAAOC,sBAAsB,CAACP,WAAW,EAAEC,UAAU,EAAEI,OAAO,EAAEC,UAAU,CAAC;EAC7E,CAAC;EAED,OAAO;IACLE,IAAI,EAAE,SAAAA,KAAUH,OAAO,EAAE;MACvBZ,qBAAqB,CACnBY,OAAO,EACPF,UAAU,EACVC,oBAAoB,EACpBJ,WAAW,EACXE,WACF,CAAC;IACH,CAAC;IACD;AACJ;AACA;AACA;IACIO,UAAU,EAAE,SAAAA,WAAUJ,OAAO,EAAE;MAC7BK,kBAAkB,CAACV,WAAW,EAAEC,UAAU,EAAEI,OAAO,CAAC;IACtD;EACF,CAAC;AACH;AAEA,SAASK,kBAAkBA,CAACV,WAAW,EAAEC,UAAU,EAAEI,OAAO,EAAE;EAC5D,IAAIM,IAAI,GAAGN,OAAO,CAACM,IAAI;EACvB,IAAIC,UAAU,GAAGP,OAAO,CAACO,UAAU;EACnC,IAAIf,GAAG,GAAGD,iBAAiB,CAACI,WAAW,CAAC;EACxC,IAAIa,YAAY,GAAG,CAAC,CAACC,SAAS,CAACC,UAAU,IAAIH,UAAU,GAAGX,UAAU;EACpE,IAAIY,YAAY,EAAE;IAChB,IAAI;MACF,IAAIG,QAAQ,GAAGF,SAAS,CAACC,UAAU,CAAClB,GAAG,EAAEc,IAAI,CAAC;MAE9C,IAAIK,QAAQ,EAAE;QACZ;MACF;IACF,CAAC,CAAC,OAAOC,CAAC,EAAE;MACV;IAAA;EAEJ;EACAC,OAAO,CAACrB,GAAG,EAAEc,IAAI,CAAC;AACpB;AAEA,OAAO,SAASJ,sBAAsBA,CACpCP,WAAW,EACXC,UAAU,EACVI,OAAO,EACPC,UAAU,EACV;EACA,IAAIK,IAAI,GAAGN,OAAO,CAACM,IAAI;EACvB,IAAIC,UAAU,GAAGP,OAAO,CAACO,UAAU;EACnC,IAAIf,GAAG,GAAGD,iBAAiB,CAACI,WAAW,CAAC;EACxC,IAAImB,eAAe,GAAGC,oBAAoB,CAAC,CAAC,IAAIR,UAAU,GAAGX,UAAU;EACvE,IAAIkB,eAAe,EAAE;IACnBE,KAAK,CAACxB,GAAG,EAAE;MACTyB,MAAM,EAAE,MAAM;MACdC,IAAI,EAAEZ,IAAI;MACVa,SAAS,EAAE,IAAI;MACfC,IAAI,EAAE;IACR,CAAC,CAAC,CAACC,IAAI,CACL/B,OAAO,CAAC,UAAUgC,QAAQ,EAAE;MAC1B,IAAI,OAAOrB,UAAU,KAAK,UAAU,EAAE;QACpCA,UAAU,CAAC;UAAEsB,MAAM,EAAED,QAAQ,CAACC,MAAM;UAAEC,IAAI,EAAEF,QAAQ,CAACE;QAAK,CAAC,CAAC;MAC9D;IACF,CAAC,CAAC,EACFlC,OAAO,CAAC,YAAY;MAClB;MACAuB,OAAO,CAACrB,GAAG,EAAEc,IAAI,EAAEL,UAAU,CAAC;IAChC,CAAC,CACH,CAAC;EACH,CAAC,MAAM;IACLY,OAAO,CAACrB,GAAG,EAAEc,IAAI,EAAEL,UAAU,CAAC;EAChC;AACF;AAEA,SAASc,oBAAoBA,CAAA,EAAG;EAC9B;EACA,IAAI;IACF,OAAOU,MAAM,CAACC,OAAO,IAAI,WAAW,IAAI,IAAIA,OAAO,CAAC,UAAU,CAAC;EACjE,CAAC,CAAC,OAAAC,OAAA,EAAM;IACN,OAAO,KAAK;EACd;AACF;AAEA,SAASd,OAAOA,CAACrB,GAAG,EAAEc,IAAI,EAAEL,UAAU,EAAE;EACtC,IAAM2B,OAAO,GAAG,IAAIC,cAAc,CAAC,CAAC;EACpCD,OAAO,CAACE,IAAI,CAAC,MAAM,EAAEtC,GAAG,EAAE,IAAI,CAAC;EAC/BH,gBAAgB,CACduC,OAAO,EACP,SAAS,EACT,YAAY;IACV,IAAI,OAAO3B,UAAU,KAAK,UAAU,EAAE;MACpCA,UAAU,CAAC;QAAEsB,MAAM,EAAEK,OAAO,CAACL;MAAO,CAAC,CAAC;IACxC;EACF,CAAC,EACD;IACEQ,IAAI,EAAE;EACR,CACF,CAAC;EACDH,OAAO,CAACzB,IAAI,CAACG,IAAI,CAAC;AACpB"}
1
+ {"version":3,"file":"httpRequest.js","names":["newRetryState","sendWithRetryStrategy","addEventListener","monitor","addBatchPrecision","url","indexOf","createHttpRequest","endpointUrl","bytesLimit","sendContentTypeByJson","reportError","contentType","undefined","retryState","sendStrategyForRetry","payload","onResponse","fetchKeepAliveStrategy","send","sendOnExit","sendBeaconStrategy","data","bytesCount","canUseBeacon","navigator","sendBeacon","beaconData","Blob","type","isQueued","e","sendXHR","canUseKeepAlive","isKeepAliveSupported","fetchOption","method","body","keepalive","mode","headers","fetch","then","response","status","window","Request","_unused","request","XMLHttpRequest","open","setRequestHeader","once"],"sources":["../../src/transport/httpRequest.js"],"sourcesContent":["import { newRetryState, sendWithRetryStrategy } from './sendWithRetryStrategy'\nimport { addEventListener } from '../browser/addEventListener'\nimport { monitor } from '../helper/monitor'\n/**\n * Use POST request without content type to:\n * - avoid CORS preflight requests\n * - allow usage of sendBeacon\n *\n * multiple elements are sent separated by \\n in order\n * to be parsed correctly without content type header\n */\nfunction addBatchPrecision(url) {\n if (!url) return url\n return url + (url.indexOf('?') === -1 ? '?' : '&') + 'precision=ms'\n}\nexport function createHttpRequest(\n endpointUrl,\n bytesLimit,\n sendContentTypeByJson,\n reportError\n) {\n var contentType = sendContentTypeByJson\n ? 'application/json; charset=UTF-8'\n : undefined\n var retryState = newRetryState()\n var sendStrategyForRetry = function (payload, onResponse) {\n return fetchKeepAliveStrategy(\n endpointUrl,\n bytesLimit,\n contentType,\n payload,\n onResponse\n )\n }\n\n return {\n send: function (payload) {\n sendWithRetryStrategy(\n payload,\n retryState,\n sendStrategyForRetry,\n endpointUrl,\n reportError\n )\n },\n /**\n * Since fetch keepalive behaves like regular fetch on Firefox,\n * keep using sendBeaconStrategy on exit\n */\n sendOnExit: function (payload) {\n sendBeaconStrategy(endpointUrl, bytesLimit, contentType, payload)\n }\n }\n}\n\nfunction sendBeaconStrategy(endpointUrl, bytesLimit, contentType, payload) {\n var data = payload.data\n var bytesCount = payload.bytesCount\n var url = addBatchPrecision(endpointUrl)\n var canUseBeacon = !!navigator.sendBeacon && bytesCount < bytesLimit\n if (canUseBeacon) {\n try {\n var beaconData\n if (contentType) {\n beaconData = new Blob([data], {\n type: contentType\n })\n } else {\n beaconData = data\n }\n\n var isQueued = navigator.sendBeacon(url, beaconData)\n\n if (isQueued) {\n return\n }\n } catch (e) {\n // reportBeaconError(e)\n }\n }\n sendXHR(url, contentType, data)\n}\n\nexport function fetchKeepAliveStrategy(\n endpointUrl,\n bytesLimit,\n contentType,\n payload,\n onResponse\n) {\n var data = payload.data\n var bytesCount = payload.bytesCount\n var url = addBatchPrecision(endpointUrl)\n var canUseKeepAlive = isKeepAliveSupported() && bytesCount < bytesLimit\n if (canUseKeepAlive) {\n var fetchOption = {\n method: 'POST',\n body: data,\n keepalive: true,\n mode: 'cors'\n }\n if (contentType) {\n fetchOption.headers = {\n 'Content-Type': contentType\n }\n }\n fetch(url, fetchOption).then(\n monitor(function (response) {\n if (typeof onResponse === 'function') {\n onResponse({ status: response.status, type: response.type })\n }\n }),\n monitor(function () {\n // failed to queue the request\n sendXHR(url, contentType, data, onResponse)\n })\n )\n } else {\n sendXHR(url, contentType, data, onResponse)\n }\n}\n\nfunction isKeepAliveSupported() {\n // Request can throw, cf https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#errors\n try {\n return window.Request && 'keepalive' in new Request('http://a')\n } catch {\n return false\n }\n}\n\nfunction sendXHR(url, contentType, data, onResponse) {\n const request = new XMLHttpRequest()\n request.open('POST', url, true)\n if (contentType) {\n //application/json; charset=UTF-8\n request.setRequestHeader('Content-Type', contentType)\n }\n\n addEventListener(\n request,\n 'loadend',\n function () {\n if (typeof onResponse === 'function') {\n onResponse({ status: request.status })\n }\n },\n {\n once: true\n }\n )\n request.send(data)\n}\n"],"mappings":"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"}
@@ -4,13 +4,13 @@ import { createFlushController } from './flushController';
4
4
  export function startBatchWithReplica(configuration, endpointUrl, reportError, pageExitObservable, sessionExpireObservable) {
5
5
  var primaryBatch = createBatch(endpointUrl);
6
6
  function createBatch(endpointUrl) {
7
- return new Batch(createHttpRequest(endpointUrl, configuration.batchBytesLimit, reportError), createFlushController({
7
+ return new Batch(createHttpRequest(endpointUrl, configuration.batchBytesLimit, configuration.sendContentTypeByJson, reportError), createFlushController({
8
8
  messagesLimit: configuration.batchMessagesLimit,
9
9
  bytesLimit: configuration.batchBytesLimit,
10
10
  durationLimit: configuration.flushTimeout,
11
11
  pageExitObservable: pageExitObservable,
12
12
  sessionExpireObservable: sessionExpireObservable
13
- }), configuration.messageBytesLimit);
13
+ }), configuration.messageBytesLimit, configuration.sendContentTypeByJson);
14
14
  }
15
15
  return {
16
16
  add: function add(message) {
@@ -1 +1 @@
1
- {"version":3,"file":"startBatchWithReplica.js","names":["Batch","createHttpRequest","createFlushController","startBatchWithReplica","configuration","endpointUrl","reportError","pageExitObservable","sessionExpireObservable","primaryBatch","createBatch","batchBytesLimit","messagesLimit","batchMessagesLimit","bytesLimit","durationLimit","flushTimeout","messageBytesLimit","add","message"],"sources":["../../src/transport/startBatchWithReplica.js"],"sourcesContent":["import { Batch } from './batch'\nimport { createHttpRequest } from './httpRequest'\nimport { createFlushController } from './flushController'\nexport function startBatchWithReplica(\n configuration,\n endpointUrl,\n reportError,\n pageExitObservable,\n sessionExpireObservable\n) {\n var primaryBatch = createBatch(endpointUrl)\n\n function createBatch(endpointUrl) {\n return new Batch(\n createHttpRequest(\n endpointUrl,\n configuration.batchBytesLimit,\n reportError\n ),\n createFlushController({\n messagesLimit: configuration.batchMessagesLimit,\n bytesLimit: configuration.batchBytesLimit,\n durationLimit: configuration.flushTimeout,\n pageExitObservable: pageExitObservable,\n sessionExpireObservable: sessionExpireObservable\n }),\n configuration.messageBytesLimit\n )\n }\n\n return {\n add: function (message) {\n primaryBatch.add(message)\n }\n }\n}\n"],"mappings":"AAAA,SAASA,KAAK,QAAQ,SAAS;AAC/B,SAASC,iBAAiB,QAAQ,eAAe;AACjD,SAASC,qBAAqB,QAAQ,mBAAmB;AACzD,OAAO,SAASC,qBAAqBA,CACnCC,aAAa,EACbC,WAAW,EACXC,WAAW,EACXC,kBAAkB,EAClBC,uBAAuB,EACvB;EACA,IAAIC,YAAY,GAAGC,WAAW,CAACL,WAAW,CAAC;EAE3C,SAASK,WAAWA,CAACL,WAAW,EAAE;IAChC,OAAO,IAAIL,KAAK,CACdC,iBAAiB,CACfI,WAAW,EACXD,aAAa,CAACO,eAAe,EAC7BL,WACF,CAAC,EACDJ,qBAAqB,CAAC;MACpBU,aAAa,EAAER,aAAa,CAACS,kBAAkB;MAC/CC,UAAU,EAAEV,aAAa,CAACO,eAAe;MACzCI,aAAa,EAAEX,aAAa,CAACY,YAAY;MACzCT,kBAAkB,EAAEA,kBAAkB;MACtCC,uBAAuB,EAAEA;IAC3B,CAAC,CAAC,EACFJ,aAAa,CAACa,iBAChB,CAAC;EACH;EAEA,OAAO;IACLC,GAAG,EAAE,SAAAA,IAAUC,OAAO,EAAE;MACtBV,YAAY,CAACS,GAAG,CAACC,OAAO,CAAC;IAC3B;EACF,CAAC;AACH"}
1
+ {"version":3,"file":"startBatchWithReplica.js","names":["Batch","createHttpRequest","createFlushController","startBatchWithReplica","configuration","endpointUrl","reportError","pageExitObservable","sessionExpireObservable","primaryBatch","createBatch","batchBytesLimit","sendContentTypeByJson","messagesLimit","batchMessagesLimit","bytesLimit","durationLimit","flushTimeout","messageBytesLimit","add","message"],"sources":["../../src/transport/startBatchWithReplica.js"],"sourcesContent":["import { Batch } from './batch'\nimport { createHttpRequest } from './httpRequest'\nimport { createFlushController } from './flushController'\nexport function startBatchWithReplica(\n configuration,\n endpointUrl,\n reportError,\n pageExitObservable,\n sessionExpireObservable\n) {\n var primaryBatch = createBatch(endpointUrl)\n\n function createBatch(endpointUrl) {\n return new Batch(\n createHttpRequest(\n endpointUrl,\n configuration.batchBytesLimit,\n configuration.sendContentTypeByJson,\n reportError\n ),\n createFlushController({\n messagesLimit: configuration.batchMessagesLimit,\n bytesLimit: configuration.batchBytesLimit,\n durationLimit: configuration.flushTimeout,\n pageExitObservable: pageExitObservable,\n sessionExpireObservable: sessionExpireObservable\n }),\n configuration.messageBytesLimit,\n configuration.sendContentTypeByJson\n )\n }\n\n return {\n add: function (message) {\n primaryBatch.add(message)\n }\n }\n}\n"],"mappings":"AAAA,SAASA,KAAK,QAAQ,SAAS;AAC/B,SAASC,iBAAiB,QAAQ,eAAe;AACjD,SAASC,qBAAqB,QAAQ,mBAAmB;AACzD,OAAO,SAASC,qBAAqBA,CACnCC,aAAa,EACbC,WAAW,EACXC,WAAW,EACXC,kBAAkB,EAClBC,uBAAuB,EACvB;EACA,IAAIC,YAAY,GAAGC,WAAW,CAACL,WAAW,CAAC;EAE3C,SAASK,WAAWA,CAACL,WAAW,EAAE;IAChC,OAAO,IAAIL,KAAK,CACdC,iBAAiB,CACfI,WAAW,EACXD,aAAa,CAACO,eAAe,EAC7BP,aAAa,CAACQ,qBAAqB,EACnCN,WACF,CAAC,EACDJ,qBAAqB,CAAC;MACpBW,aAAa,EAAET,aAAa,CAACU,kBAAkB;MAC/CC,UAAU,EAAEX,aAAa,CAACO,eAAe;MACzCK,aAAa,EAAEZ,aAAa,CAACa,YAAY;MACzCV,kBAAkB,EAAEA,kBAAkB;MACtCC,uBAAuB,EAAEA;IAC3B,CAAC,CAAC,EACFJ,aAAa,CAACc,iBAAiB,EAC/Bd,aAAa,CAACQ,qBAChB,CAAC;EACH;EAEA,OAAO;IACLO,GAAG,EAAE,SAAAA,IAAUC,OAAO,EAAE;MACtBX,YAAY,CAACU,GAAG,CAACC,OAAO,CAAC;IAC3B;EACF,CAAC;AACH"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudcare/browser-core",
3
- "version": "3.1.1",
3
+ "version": "3.1.3",
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": "7216e7579806f7c9992938c41c7e383aebc9e045"
23
+ "gitHead": "356ac0934fe39cf44c4cf7943452fd3a222bccaf"
24
24
  }
@@ -22,11 +22,18 @@ export function isNodeShadowRoot(node) {
22
22
  isElementNode(shadowRoot.host)
23
23
  )
24
24
  }
25
-
26
- export function getChildNodes(node) {
27
- return isNodeShadowHost(node) ? node.shadowRoot.childNodes : node.childNodes
25
+ export function hasChildNodes(node) {
26
+ return node.childNodes.length > 0 || isNodeShadowHost(node)
27
+ }
28
+ // export function getChildNodes(node) {
29
+ // return isNodeShadowHost(node) ? node.shadowRoot.childNodes : node.childNodes
30
+ // }
31
+ export function forEachChildNodes(node, callback) {
32
+ node.childNodes.forEach(callback)
33
+ if (isNodeShadowHost(node)) {
34
+ callback(node.shadowRoot)
35
+ }
28
36
  }
29
-
30
37
  /**
31
38
  * Return `host` in case if the current node is a shadow root otherwise will return the `parentNode`
32
39
  */
@@ -82,7 +82,9 @@ export function validateAndBuildConfiguration(initConfiguration) {
82
82
  */
83
83
  batchMessagesLimit: 50,
84
84
  messageBytesLimit: 256 * ONE_KIBI_BYTE,
85
- resourceUrlLimit: 5 * ONE_KIBI_BYTE
85
+ resourceUrlLimit: 5 * ONE_KIBI_BYTE,
86
+ storeContextsToLocal: !!initConfiguration.storeContextsToLocal,
87
+ sendContentTypeByJson: !!initConfiguration.sendContentTypeByJson
86
88
  },
87
89
  computeTransportConfiguration(initConfiguration)
88
90
  )
package/src/dataMap.js CHANGED
@@ -12,7 +12,6 @@ export var commonTags = {
12
12
  session_id: 'session.id',
13
13
  session_type: 'session.type',
14
14
  session_sampling: 'session.is_sampling',
15
- session_has_replay: 'session.has_replay',
16
15
  is_signin: 'user.is_signin',
17
16
  os: 'device.os',
18
17
  os_version: 'device.os_version',
@@ -36,7 +35,10 @@ export var commonFields = {
36
35
  action_id: 'action.id',
37
36
  action_ids: 'action.ids',
38
37
  view_in_foreground: 'view.in_foreground',
39
- display: 'display'
38
+ display: 'display',
39
+ session_has_replay: 'session.has_replay',
40
+ is_login: 'user.is_login',
41
+ page_states: '_gc.page_states'
40
42
  }
41
43
  // 需要用双引号将字符串类型的field value括起来, 这里有数组标示[string, path]
42
44
  export var dataMap = {
@@ -60,6 +62,8 @@ export var dataMap = {
60
62
  largest_contentful_paint_element_selector:
61
63
  'view.largest_contentful_paint_element_selector',
62
64
  cumulative_layout_shift: 'view.cumulative_layout_shift',
65
+ cumulative_layout_shift_target_selector:
66
+ 'view.cumulative_layout_shift_target_selector',
63
67
  first_input_delay: 'view.first_input_delay',
64
68
  loading_time: 'view.loading_time',
65
69
  dom_interactive: 'view.dom_interactive',
@@ -67,15 +71,17 @@ export var dataMap = {
67
71
  dom_complete: 'view.dom_complete',
68
72
  load_event: 'view.load_event',
69
73
  first_input_time: 'view.first_input_time',
74
+ first_input_target_selector: 'view.first_input_target_selector',
70
75
  first_paint_time: 'view.fpt',
71
76
  interaction_to_next_paint: 'view.interaction_to_next_paint',
77
+ interaction_to_next_paint_target_selector:
78
+ 'view.interaction_to_next_paint_target_selector',
72
79
  resource_load_time: 'view.resource_load_time',
73
80
  time_to_interactive: 'view.tti',
74
81
  dom: 'view.dom',
75
82
  dom_ready: 'view.dom_ready',
76
83
  time_spent: 'view.time_spent',
77
84
  first_byte: 'view.first_byte',
78
- page_states: '_gc.page_states',
79
85
  frustration_count: 'view.frustration.count',
80
86
  custom_timings: 'view.custom_timings'
81
87
  }
@@ -31,7 +31,8 @@ export var DOM_EVENT = {
31
31
  PLAY: 'play',
32
32
  PAUSE: 'pause',
33
33
  SECURITY_POLICY_VIOLATION: 'securitypolicyviolation',
34
- SELECTION_CHANGE: 'selectionchange'
34
+ SELECTION_CHANGE: 'selectionchange',
35
+ STORAGE: 'storage'
35
36
  }
36
37
  export var ResourceType = {
37
38
  DOCUMENT: 'document',
@@ -2,6 +2,7 @@ import { each, noop } from './tools'
2
2
  import { jsonStringify } from '../helper/serialisation/jsonStringify'
3
3
  import { computeStackTrace } from '../tracekit'
4
4
  import { callMonitored } from '../helper/monitor'
5
+ import { sanitize } from '../helper/sanitize'
5
6
  export var NO_ERROR_STACK_PRESENT_MESSAGE =
6
7
  'No stack, consider using an instance of Error'
7
8
  export var ErrorSource = {
@@ -38,6 +38,7 @@ export function callMonitored(fn, context, args) {
38
38
 
39
39
  export function displayIfDebugEnabled(api) {
40
40
  var args = [].slice.call(arguments, 1)
41
+ // display.apply(null, [api, '[MONITOR]'].concat(args))
41
42
  if (debugMode) {
42
43
  display.apply(null, [api, '[MONITOR]'].concat(args))
43
44
  }
@@ -1,6 +1,8 @@
1
1
  import { computeBytesCount } from '../byteUtils'
2
- import { deepClone, throttle } from '../tools'
2
+ import { deepClone, throttle, getType } from '../tools'
3
+ import { sanitize } from '../sanitize'
3
4
  import { jsonStringify } from './jsonStringify'
5
+ import { Observable } from '../observable'
4
6
  import { warnIfCustomerDataLimitReached } from './heavyCustomerDataWarning'
5
7
 
6
8
  export var BYTES_COMPUTATION_THROTTLING_DELAY = 200
@@ -12,7 +14,7 @@ export function createContextManager(customerDataType, computeBytesCountImpl) {
12
14
  var context = {}
13
15
  var bytesCountCache
14
16
  var alreadyWarned = false
15
-
17
+ var changeObservable = new Observable()
16
18
  // Throttle the bytes computation to minimize the impact on performance.
17
19
  // Especially useful if the user call context APIs synchronously multiple times in a row
18
20
  var computeBytesCountThrottled = throttle(function (context) {
@@ -25,7 +27,7 @@ export function createContextManager(customerDataType, computeBytesCountImpl) {
25
27
  }
26
28
  }, BYTES_COMPUTATION_THROTTLING_DELAY).throttled
27
29
 
28
- return {
30
+ var contextManager = {
29
31
  getBytesCount: function () {
30
32
  return bytesCountCache
31
33
  },
@@ -38,18 +40,21 @@ export function createContextManager(customerDataType, computeBytesCountImpl) {
38
40
  add: function (key, value) {
39
41
  context[key] = value
40
42
  computeBytesCountThrottled(context)
43
+ changeObservable.notify()
41
44
  },
42
45
 
43
46
  /** @deprecated renamed to removeContextProperty */
44
47
  remove: function (key) {
45
48
  delete context[key]
46
49
  computeBytesCountThrottled(context)
50
+ changeObservable.notify()
47
51
  },
48
52
 
49
53
  /** @deprecated use setContext instead */
50
54
  set: function (newContext) {
51
55
  context = newContext
52
56
  computeBytesCountThrottled(context)
57
+ changeObservable.notify()
53
58
  },
54
59
 
55
60
  getContext: function () {
@@ -57,23 +62,33 @@ export function createContextManager(customerDataType, computeBytesCountImpl) {
57
62
  },
58
63
 
59
64
  setContext: function (newContext) {
60
- context = deepClone(newContext)
61
- computeBytesCountThrottled(context)
65
+ if (getType(newContext) === 'object') {
66
+ context = sanitize(newContext)
67
+ computeBytesCountThrottled(context)
68
+ } else {
69
+ contextManager.clearContext()
70
+ }
71
+ changeObservable.notify()
62
72
  },
63
73
 
64
74
  setContextProperty: function (key, property) {
65
75
  context[key] = deepClone(property)
66
76
  computeBytesCountThrottled(context)
77
+ changeObservable.notify()
67
78
  },
68
79
 
69
80
  removeContextProperty: function (key) {
70
81
  delete context[key]
71
82
  computeBytesCountThrottled(context)
83
+ changeObservable.notify()
72
84
  },
73
85
 
74
86
  clearContext: function () {
75
87
  context = {}
76
88
  bytesCountCache = 0
77
- }
89
+ changeObservable.notify()
90
+ },
91
+ changeObservable: changeObservable
78
92
  }
93
+ return contextManager
79
94
  }
@@ -1,5 +1,5 @@
1
1
  import { jsonStringify } from './jsonStringify'
2
- import { isString } from '../tools'
2
+ import { isString, isNumber } from '../tools'
3
3
  export function escapeRowData(str) {
4
4
  if (typeof str === 'object' && str) {
5
5
  str = jsonStringify(str)
@@ -12,12 +12,15 @@ export function escapeRowData(str) {
12
12
  })
13
13
  }
14
14
 
15
- export function escapeJsonValue(value) {
16
- if (isString(value)) {
17
- return value
18
- } else {
19
- return jsonStringify(value)
15
+ export function escapeJsonValue(value, isTag) {
16
+ if (typeof value === 'object' && value) {
17
+ value = jsonStringify(value)
18
+ } else if (isTag) {
19
+ // tag json 只能是字符串
20
+ value = '' + value
20
21
  }
22
+
23
+ return value
21
24
  }
22
25
 
23
26
  export function escapeFieldValueStr(str) {