@cloudcare/browser-core 3.1.18 → 3.1.20

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 (61) hide show
  1. package/cjs/browser/fetchObservable.js +62 -32
  2. package/cjs/browser/fetchObservable.js.map +1 -1
  3. package/cjs/browser/xhrObservable.js +31 -39
  4. package/cjs/browser/xhrObservable.js.map +1 -1
  5. package/cjs/dataMap.js +1 -0
  6. package/cjs/dataMap.js.map +1 -1
  7. package/cjs/helper/deviceInfo.js +1 -2
  8. package/cjs/helper/deviceInfo.js.map +1 -1
  9. package/cjs/helper/enums.js +6 -1
  10. package/cjs/helper/enums.js.map +1 -1
  11. package/cjs/helper/instrumentMethod.js +47 -44
  12. package/cjs/helper/instrumentMethod.js.map +1 -1
  13. package/cjs/helper/tools.js +15 -0
  14. package/cjs/helper/tools.js.map +1 -1
  15. package/cjs/helper/valueHistory.js +123 -0
  16. package/cjs/helper/valueHistory.js.map +1 -0
  17. package/cjs/index.js +4 -4
  18. package/cjs/index.js.map +1 -1
  19. package/cjs/session/sessionManagement.js +4 -2
  20. package/cjs/session/sessionManagement.js.map +1 -1
  21. package/cjs/tracekit/tracekit.js +29 -25
  22. package/cjs/tracekit/tracekit.js.map +1 -1
  23. package/esm/browser/fetchObservable.js +63 -34
  24. package/esm/browser/fetchObservable.js.map +1 -1
  25. package/esm/browser/xhrObservable.js +33 -41
  26. package/esm/browser/xhrObservable.js.map +1 -1
  27. package/esm/dataMap.js +1 -0
  28. package/esm/dataMap.js.map +1 -1
  29. package/esm/helper/deviceInfo.js +1 -2
  30. package/esm/helper/deviceInfo.js.map +1 -1
  31. package/esm/helper/enums.js +4 -0
  32. package/esm/helper/enums.js.map +1 -1
  33. package/esm/helper/instrumentMethod.js +48 -44
  34. package/esm/helper/instrumentMethod.js.map +1 -1
  35. package/esm/helper/tools.js +13 -0
  36. package/esm/helper/tools.js.map +1 -1
  37. package/esm/helper/valueHistory.js +115 -0
  38. package/esm/helper/valueHistory.js.map +1 -0
  39. package/esm/index.js +1 -1
  40. package/esm/index.js.map +1 -1
  41. package/esm/session/sessionManagement.js +4 -2
  42. package/esm/session/sessionManagement.js.map +1 -1
  43. package/esm/tracekit/tracekit.js +30 -26
  44. package/esm/tracekit/tracekit.js.map +1 -1
  45. package/package.json +2 -2
  46. package/src/browser/fetchObservable.js +71 -50
  47. package/src/browser/xhrObservable.js +39 -54
  48. package/src/dataMap.js +1 -0
  49. package/src/helper/deviceInfo.js +1 -2
  50. package/src/helper/enums.js +4 -1
  51. package/src/helper/instrumentMethod.js +61 -44
  52. package/src/helper/tools.js +13 -0
  53. package/src/helper/valueHistory.js +116 -0
  54. package/src/index.js +1 -1
  55. package/src/session/sessionManagement.js +4 -2
  56. package/src/tracekit/tracekit.js +29 -25
  57. package/cjs/helper/contextHistory.js +0 -117
  58. package/cjs/helper/contextHistory.js.map +0 -1
  59. package/esm/helper/contextHistory.js +0 -109
  60. package/esm/helper/contextHistory.js.map +0 -1
  61. package/src/helper/contextHistory.js +0 -101
@@ -1,62 +1,67 @@
1
- import { noop } from './tools';
1
+ import { noop, arrayFrom, startsWith } from './tools';
2
2
  import { setTimeout } from './timer';
3
3
  import { callMonitored } from './monitor';
4
- export function instrumentMethod(object, method, instrumentationFactory) {
5
- var original = object[method];
6
- var instrumentation = instrumentationFactory(original);
7
- var instrumentationWrapper = function instrumentationWrapper() {
8
- if (typeof instrumentation !== 'function') {
9
- return undefined;
4
+ import { createHandlingStack } from './errorTools';
5
+ export function instrumentMethod(targetPrototype, method, onPreCall, opts) {
6
+ var computeHandlingStack = opts && opts.computeHandlingStack;
7
+ var original = targetPrototype[method];
8
+ if (typeof original !== 'function') {
9
+ if (startsWith(method, 'on')) {
10
+ original = noop;
11
+ } else {
12
+ return {
13
+ stop: noop
14
+ };
10
15
  }
16
+ }
17
+ var stopped = false;
18
+ var instrumentation = function instrumentation() {
19
+ if (stopped) {
20
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call
21
+ return original.apply(this, arguments);
22
+ }
23
+ var parameters = arrayFrom(arguments);
24
+ var postCallCallback;
25
+ callMonitored(onPreCall, null, [{
26
+ target: this,
27
+ parameters: parameters,
28
+ onPostCall: function onPostCall(callback) {
29
+ postCallCallback = callback;
30
+ },
31
+ handlingStack: computeHandlingStack ? createHandlingStack() : undefined
32
+ }]);
33
+ var result = original.apply(this, parameters);
34
+ if (postCallCallback) {
35
+ callMonitored(postCallCallback, null, [result]);
36
+ }
37
+
11
38
  // eslint-disable-next-line @typescript-eslint/no-unsafe-return
12
- return instrumentation.apply(this, arguments);
39
+ return result;
13
40
  };
14
- object[method] = instrumentationWrapper;
41
+ targetPrototype[method] = instrumentation;
15
42
  return {
16
43
  stop: function stop() {
17
- if (object[method] === instrumentationWrapper) {
18
- object[method] = original;
19
- } else {
20
- instrumentation = original;
44
+ stopped = true;
45
+ // If the instrumentation has been removed by a third party, keep the last one
46
+ if (targetPrototype[method] === instrumentation) {
47
+ targetPrototype[method] = original;
21
48
  }
22
49
  }
23
50
  };
24
51
  }
25
- export function instrumentMethodAndCallOriginal(object, method, aliasOption) {
26
- return instrumentMethod(object, method, function (original) {
27
- return function () {
28
- var result;
29
- if (aliasOption && aliasOption.before) {
30
- callMonitored(aliasOption.before, this, arguments);
31
- // aliasOption.before.apply(this, arguments)
32
- }
33
-
34
- if (typeof original === 'function') {
35
- // eslint-disable-next-line @typescript-eslint/no-unsafe-call
36
- result = original.apply(this, arguments);
37
- }
38
- if (aliasOption && aliasOption.after) {
39
- callMonitored(aliasOption.after, this, arguments);
40
- // aliasOption.after.apply(this, arguments)
41
- }
42
-
43
- return result;
44
- };
45
- });
46
- }
47
- export function instrumentSetter(object, property, after) {
48
- var originalDescriptor = Object.getOwnPropertyDescriptor(object, property);
52
+ export function instrumentSetter(targetPrototype, property, after) {
53
+ var originalDescriptor = Object.getOwnPropertyDescriptor(targetPrototype, property);
49
54
  if (!originalDescriptor || !originalDescriptor.set || !originalDescriptor.configurable) {
50
55
  return {
51
56
  stop: noop
52
57
  };
53
58
  }
54
59
  var stoppedInstrumentation = noop;
55
- var _instrumentation = function instrumentation(thisObject, value) {
60
+ var _instrumentation = function instrumentation(target, value) {
56
61
  // put hooked setter into event loop to avoid of set latency
57
62
  setTimeout(function () {
58
63
  if (_instrumentation !== stoppedInstrumentation) {
59
- after(thisObject, value);
64
+ after(target, value);
60
65
  }
61
66
  }, 0);
62
67
  };
@@ -64,16 +69,15 @@ export function instrumentSetter(object, property, after) {
64
69
  originalDescriptor.set.call(this, value);
65
70
  _instrumentation(this, value);
66
71
  };
67
- Object.defineProperty(object, property, {
72
+ Object.defineProperty(targetPrototype, property, {
68
73
  set: instrumentationWrapper
69
74
  });
70
75
  return {
71
76
  stop: function stop() {
72
- if (Object.getOwnPropertyDescriptor(object, property) && Object.getOwnPropertyDescriptor(object, property).set === instrumentationWrapper) {
73
- Object.defineProperty(object, property, originalDescriptor);
74
- } else {
75
- _instrumentation = stoppedInstrumentation;
77
+ if (Object.getOwnPropertyDescriptor(targetPrototype, property) && Object.getOwnPropertyDescriptor(targetPrototype, property).set === instrumentationWrapper) {
78
+ Object.defineProperty(targetPrototype, property, originalDescriptor);
76
79
  }
80
+ _instrumentation = stoppedInstrumentation;
77
81
  }
78
82
  };
79
83
  }
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentMethod.js","names":["noop","setTimeout","callMonitored","instrumentMethod","object","method","instrumentationFactory","original","instrumentation","instrumentationWrapper","undefined","apply","arguments","stop","instrumentMethodAndCallOriginal","aliasOption","result","before","after","instrumentSetter","property","originalDescriptor","Object","getOwnPropertyDescriptor","set","configurable","stoppedInstrumentation","thisObject","value","call","defineProperty"],"sources":["../../src/helper/instrumentMethod.js"],"sourcesContent":["import { noop } from './tools'\nimport { setTimeout } from './timer'\nimport { callMonitored } from './monitor'\nexport function instrumentMethod(object, method, instrumentationFactory) {\n var original = object[method]\n\n var instrumentation = instrumentationFactory(original)\n\n var instrumentationWrapper = function () {\n if (typeof instrumentation !== 'function') {\n return undefined\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return instrumentation.apply(this, arguments)\n }\n object[method] = instrumentationWrapper\n return {\n stop: function () {\n if (object[method] === instrumentationWrapper) {\n object[method] = original\n } else {\n instrumentation = original\n }\n }\n }\n}\n\nexport function instrumentMethodAndCallOriginal(object, method, aliasOption) {\n return instrumentMethod(object, method, function (original) {\n return function () {\n var result\n if (aliasOption && aliasOption.before) {\n callMonitored(aliasOption.before, this, arguments)\n // aliasOption.before.apply(this, arguments)\n }\n if (typeof original === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n result = original.apply(this, arguments)\n }\n if (aliasOption && aliasOption.after) {\n callMonitored(aliasOption.after, this, arguments)\n // aliasOption.after.apply(this, arguments)\n }\n return result\n }\n })\n}\n\nexport function instrumentSetter(object, property, after) {\n var originalDescriptor = Object.getOwnPropertyDescriptor(object, property)\n if (\n !originalDescriptor ||\n !originalDescriptor.set ||\n !originalDescriptor.configurable\n ) {\n return { stop: noop }\n }\n var stoppedInstrumentation = noop\n var instrumentation = function (thisObject, value) {\n // put hooked setter into event loop to avoid of set latency\n setTimeout(function () {\n if (instrumentation !== stoppedInstrumentation) {\n after(thisObject, value)\n }\n }, 0)\n }\n\n var instrumentationWrapper = function (value) {\n originalDescriptor.set.call(this, value)\n instrumentation(this, value)\n }\n\n Object.defineProperty(object, property, {\n set: instrumentationWrapper\n })\n\n return {\n stop: function () {\n if (\n Object.getOwnPropertyDescriptor(object, property) &&\n Object.getOwnPropertyDescriptor(object, property).set ===\n instrumentationWrapper\n ) {\n Object.defineProperty(object, property, originalDescriptor)\n } else {\n instrumentation = stoppedInstrumentation\n }\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"instrumentMethod.js","names":["noop","arrayFrom","startsWith","setTimeout","callMonitored","createHandlingStack","instrumentMethod","targetPrototype","method","onPreCall","opts","computeHandlingStack","original","stop","stopped","instrumentation","apply","arguments","parameters","postCallCallback","target","onPostCall","callback","handlingStack","undefined","result","instrumentSetter","property","after","originalDescriptor","Object","getOwnPropertyDescriptor","set","configurable","stoppedInstrumentation","value","instrumentationWrapper","call","defineProperty"],"sources":["../../src/helper/instrumentMethod.js"],"sourcesContent":["import { noop, arrayFrom, startsWith } from './tools'\nimport { setTimeout } from './timer'\nimport { callMonitored } from './monitor'\nimport { createHandlingStack } from './errorTools'\nexport function instrumentMethod(targetPrototype, method, onPreCall, opts) {\n var computeHandlingStack = opts && opts.computeHandlingStack\n var original = targetPrototype[method]\n\n if (typeof original !== 'function') {\n if (startsWith(method, 'on')) {\n original = noop\n } else {\n return { stop: noop }\n }\n }\n\n var stopped = false\n\n var instrumentation = function () {\n if (stopped) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call\n return original.apply(this, arguments)\n }\n\n var parameters = arrayFrom(arguments)\n\n var postCallCallback\n\n callMonitored(onPreCall, null, [\n {\n target: this,\n parameters: parameters,\n onPostCall: function (callback) {\n postCallCallback = callback\n },\n handlingStack: computeHandlingStack ? createHandlingStack() : undefined\n }\n ])\n\n var result = original.apply(this, parameters)\n\n if (postCallCallback) {\n callMonitored(postCallCallback, null, [result])\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return result\n }\n\n targetPrototype[method] = instrumentation\n\n return {\n stop: function () {\n stopped = true\n // If the instrumentation has been removed by a third party, keep the last one\n if (targetPrototype[method] === instrumentation) {\n targetPrototype[method] = original\n }\n }\n }\n}\n\nexport function instrumentSetter(targetPrototype, property, after) {\n var originalDescriptor = Object.getOwnPropertyDescriptor(\n targetPrototype,\n property\n )\n if (\n !originalDescriptor ||\n !originalDescriptor.set ||\n !originalDescriptor.configurable\n ) {\n return { stop: noop }\n }\n\n var stoppedInstrumentation = noop\n var instrumentation = function (target, value) {\n // put hooked setter into event loop to avoid of set latency\n setTimeout(function () {\n if (instrumentation !== stoppedInstrumentation) {\n after(target, value)\n }\n }, 0)\n }\n\n var instrumentationWrapper = function (value) {\n originalDescriptor.set.call(this, value)\n instrumentation(this, value)\n }\n\n Object.defineProperty(targetPrototype, property, {\n set: instrumentationWrapper\n })\n\n return {\n stop: function () {\n if (\n Object.getOwnPropertyDescriptor(targetPrototype, property) &&\n Object.getOwnPropertyDescriptor(targetPrototype, property).set ===\n instrumentationWrapper\n ) {\n Object.defineProperty(targetPrototype, property, originalDescriptor)\n }\n instrumentation = stoppedInstrumentation\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1536,6 +1536,19 @@ export function startsWith(candidate, search) {
1536
1536
  export function endsWith(candidate, search) {
1537
1537
  return candidate.slice(-search.length) === search;
1538
1538
  }
1539
+ export function removeDuplicates(array) {
1540
+ var set = new Set();
1541
+ array.forEach(function (item) {
1542
+ set.add(item);
1543
+ });
1544
+ return arrayFrom(set);
1545
+ }
1546
+ export function removeItem(array, item) {
1547
+ var index = array.indexOf(item);
1548
+ if (index >= 0) {
1549
+ array.splice(index, 1);
1550
+ }
1551
+ }
1539
1552
  export function tryToClone(response) {
1540
1553
  try {
1541
1554
  return response.clone();