@atlaskit/react-ufo 3.3.1 → 3.3.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 (73) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/create-payload/index.js +106 -163
  3. package/dist/cjs/create-payload/utils/get-interaction-status.js +37 -0
  4. package/dist/cjs/create-payload/utils/get-page-visibility-up-to-ttai.js +12 -0
  5. package/dist/cjs/create-payload/utils/get-ssr-done-time-value.js +14 -0
  6. package/dist/cjs/create-payload/utils/get-vc-metrics.js +96 -0
  7. package/dist/cjs/interaction-metrics-init/index.js +11 -9
  8. package/dist/cjs/vc/index.js +6 -2
  9. package/dist/cjs/vc/vc-observer-new/get-element-name.js +19 -6
  10. package/dist/cjs/vc/vc-observer-new/index.js +6 -3
  11. package/dist/cjs/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.js +4 -2
  12. package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/canvas-pixel.js +10 -11
  13. package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.js +23 -30
  14. package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.js +7 -7
  15. package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.js +3 -3
  16. package/dist/cjs/vc/vc-observer-new/window-event-observer/index.js +5 -1
  17. package/dist/es2019/create-payload/index.js +14 -73
  18. package/dist/es2019/create-payload/utils/get-interaction-status.js +31 -0
  19. package/dist/es2019/create-payload/utils/get-page-visibility-up-to-ttai.js +8 -0
  20. package/dist/es2019/create-payload/utils/get-ssr-done-time-value.js +5 -0
  21. package/dist/es2019/create-payload/utils/get-vc-metrics.js +53 -0
  22. package/dist/es2019/interaction-metrics-init/index.js +11 -9
  23. package/dist/es2019/vc/index.js +6 -2
  24. package/dist/es2019/vc/vc-observer-new/get-element-name.js +19 -6
  25. package/dist/es2019/vc/vc-observer-new/index.js +7 -3
  26. package/dist/es2019/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.js +4 -0
  27. package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/canvas-pixel.js +1 -2
  28. package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.js +15 -12
  29. package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.js +5 -4
  30. package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.js +3 -2
  31. package/dist/es2019/vc/vc-observer-new/window-event-observer/index.js +5 -1
  32. package/dist/esm/create-payload/index.js +99 -156
  33. package/dist/esm/create-payload/utils/get-interaction-status.js +31 -0
  34. package/dist/esm/create-payload/utils/get-page-visibility-up-to-ttai.js +6 -0
  35. package/dist/esm/create-payload/utils/get-ssr-done-time-value.js +5 -0
  36. package/dist/esm/create-payload/utils/get-vc-metrics.js +89 -0
  37. package/dist/esm/interaction-metrics-init/index.js +11 -9
  38. package/dist/esm/vc/index.js +6 -2
  39. package/dist/esm/vc/vc-observer-new/get-element-name.js +19 -6
  40. package/dist/esm/vc/vc-observer-new/index.js +6 -3
  41. package/dist/esm/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.js +4 -2
  42. package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/canvas-pixel.js +10 -11
  43. package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.js +23 -30
  44. package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.js +7 -7
  45. package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.js +3 -3
  46. package/dist/esm/vc/vc-observer-new/window-event-observer/index.js +5 -1
  47. package/dist/types/config/index.d.ts +1 -0
  48. package/dist/types/create-payload/index.d.ts +1 -1
  49. package/dist/types/create-payload/utils/get-interaction-status.d.ts +27 -0
  50. package/dist/types/create-payload/utils/get-page-visibility-up-to-ttai.d.ts +2 -0
  51. package/dist/types/create-payload/utils/get-ssr-done-time-value.d.ts +2 -0
  52. package/dist/types/create-payload/utils/get-vc-metrics.d.ts +5 -0
  53. package/dist/types/vc/vc-observer-new/index.d.ts +3 -2
  54. package/dist/types/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.d.ts +1 -1
  55. package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.d.ts +2 -2
  56. package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.d.ts +2 -1
  57. package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.d.ts +2 -1
  58. package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/types.d.ts +2 -0
  59. package/dist/types/vc/vc-observer-new/metric-calculator/types.d.ts +2 -0
  60. package/dist/types-ts4.5/config/index.d.ts +1 -0
  61. package/dist/types-ts4.5/create-payload/index.d.ts +1 -1
  62. package/dist/types-ts4.5/create-payload/utils/get-interaction-status.d.ts +27 -0
  63. package/dist/types-ts4.5/create-payload/utils/get-page-visibility-up-to-ttai.d.ts +2 -0
  64. package/dist/types-ts4.5/create-payload/utils/get-ssr-done-time-value.d.ts +2 -0
  65. package/dist/types-ts4.5/create-payload/utils/get-vc-metrics.d.ts +5 -0
  66. package/dist/types-ts4.5/vc/vc-observer-new/index.d.ts +3 -2
  67. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.d.ts +1 -1
  68. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.d.ts +2 -2
  69. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.d.ts +2 -1
  70. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.d.ts +2 -1
  71. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/types.d.ts +2 -0
  72. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/types.d.ts +2 -0
  73. package/package.json +5 -2
@@ -4,7 +4,15 @@ function getAttributeSelector(element, attributeName) {
4
4
  if (!attrValue) {
5
5
  return '';
6
6
  }
7
- return "[".concat(attributeName, "=\"").concat(encodeURIComponent(attrValue), "\"]");
7
+ return "[".concat(attributeName, "=\"").concat(attrValue, "\"]");
8
+ }
9
+ function isValidSelector(selector) {
10
+ try {
11
+ document.querySelector(selector);
12
+ return true;
13
+ } catch (err) {
14
+ return false;
15
+ }
8
16
  }
9
17
  function isSelectorUnique(selector) {
10
18
  return document.querySelectorAll(selector).length === 1;
@@ -12,11 +20,13 @@ function isSelectorUnique(selector) {
12
20
  function getUniqueSelector(selectorConfig, element) {
13
21
  var currentElement = element;
14
22
  var parts = [];
15
- while (currentElement && currentElement.localName !== 'body') {
23
+ var MAX_DEPTH = 3;
24
+ var currentDepth = 0;
25
+ while (currentElement && currentElement.localName !== 'body' && currentDepth <= MAX_DEPTH) {
16
26
  var tagName = currentElement.localName;
17
27
  var selectorPart = tagName;
18
- if (selectorConfig.id && currentElement.id) {
19
- selectorPart += "#".concat(encodeURIComponent(currentElement.id));
28
+ if (selectorConfig.id && currentElement.id && isValidSelector("#".concat(currentElement.id))) {
29
+ selectorPart += "#".concat(currentElement.id);
20
30
  } else if (selectorConfig.dataVC) {
21
31
  selectorPart += getAttributeSelector(currentElement, 'data-vc');
22
32
  } else if (selectorConfig.testId) {
@@ -24,9 +34,11 @@ function getUniqueSelector(selectorConfig, element) {
24
34
  } else if (selectorConfig.role) {
25
35
  selectorPart += getAttributeSelector(currentElement, 'role');
26
36
  } else if (selectorConfig.className && currentElement.className) {
27
- var classNames = Array.from(currentElement.classList).map(encodeURIComponent).join('.');
37
+ var classNames = Array.from(currentElement.classList).join('.');
28
38
  if (classNames) {
29
- selectorPart += ".".concat(classNames);
39
+ if (isValidSelector(".".concat(classNames))) {
40
+ selectorPart += ".".concat(classNames);
41
+ }
30
42
  }
31
43
  }
32
44
  parts.unshift(selectorPart);
@@ -35,6 +47,7 @@ function getUniqueSelector(selectorConfig, element) {
35
47
  return _potentialSelector;
36
48
  }
37
49
  currentElement = currentElement.parentElement;
50
+ currentDepth++;
38
51
  }
39
52
  var potentialSelector = parts.join(' > ').trim();
40
53
  if (!potentialSelector) {
@@ -20,7 +20,6 @@ var VCObserverNew = /*#__PURE__*/function () {
20
20
  var _config$selectorConfi,
21
21
  _this = this;
22
22
  _classCallCheck(this, VCObserverNew);
23
- _defineProperty(this, "startTime", 0);
24
23
  _defineProperty(this, "viewportObserver", null);
25
24
  _defineProperty(this, "windowEventObserver", null);
26
25
  this.entriesTimeline = new EntriesTimeline();
@@ -68,10 +67,12 @@ var VCObserverNew = /*#__PURE__*/function () {
68
67
  }
69
68
  return _createClass(VCObserverNew, [{
70
69
  key: "start",
71
- value: function start() {
70
+ value: function start(_ref2) {
72
71
  var _this$viewportObserve, _this$windowEventObse;
72
+ var startTime = _ref2.startTime;
73
73
  (_this$viewportObserve = this.viewportObserver) === null || _this$viewportObserve === void 0 || _this$viewportObserve.start();
74
74
  (_this$windowEventObse = this.windowEventObserver) === null || _this$windowEventObse === void 0 || _this$windowEventObse.start();
75
+ this.entriesTimeline.clear();
75
76
  }
76
77
  }, {
77
78
  key: "stop",
@@ -97,7 +98,9 @@ var VCObserverNew = /*#__PURE__*/function () {
97
98
  });
98
99
  _context.next = 6;
99
100
  return calculator_fy25_03.calculate({
100
- orderedEntries: orderedEntries
101
+ orderedEntries: orderedEntries,
102
+ startTime: start,
103
+ stopTime: stop
101
104
  });
102
105
  case 6:
103
106
  fy25_03 = _context.sent;
@@ -17,11 +17,11 @@ var AbstractVCCalculatorBase = /*#__PURE__*/function () {
17
17
  var _this = this,
18
18
  _vcDetails$90$t,
19
19
  _vcDetails$;
20
- var orderedEntries, filteredEntries, isVCClean, vcDetails;
20
+ var startTime, stopTime, orderedEntries, filteredEntries, isVCClean, vcDetails;
21
21
  return _regeneratorRuntime.wrap(function _callee$(_context) {
22
22
  while (1) switch (_context.prev = _context.next) {
23
23
  case 0:
24
- orderedEntries = _ref.orderedEntries;
24
+ startTime = _ref.startTime, stopTime = _ref.stopTime, orderedEntries = _ref.orderedEntries;
25
25
  filteredEntries = orderedEntries.filter(function (entry) {
26
26
  return _this.isEntryIncluded(entry);
27
27
  });
@@ -42,6 +42,8 @@ var AbstractVCCalculatorBase = /*#__PURE__*/function () {
42
42
  width: getViewportWidth(),
43
43
  height: getViewportHeight()
44
44
  },
45
+ startTime: startTime,
46
+ stopTime: stopTime,
45
47
  orderedEntries: filteredEntries,
46
48
  percentiles: [25, 50, 75, 80, 85, 90, 95, 98, 99]
47
49
  });
@@ -222,17 +222,16 @@ export function calculateDrawnPixelsRaw(_x, _x2, _x3) {
222
222
  }
223
223
  function _calculateDrawnPixelsRaw() {
224
224
  _calculateDrawnPixelsRaw = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(imageData, scaleFactor, arraySize) {
225
- var data, scaleCompensation, arr, i, color, colorIndex;
225
+ var data, arr, i, color, colorIndex;
226
226
  return _regeneratorRuntime.wrap(function _callee2$(_context2) {
227
227
  while (1) switch (_context2.prev = _context2.next) {
228
228
  case 0:
229
229
  data = imageData.data;
230
- scaleCompensation = Math.round(1 / (scaleFactor * scaleFactor));
231
230
  arr = new Uint32Array(arraySize);
232
231
  i = 0;
233
- case 4:
232
+ case 3:
234
233
  if (!(i < data.length)) {
235
- _context2.next = 12;
234
+ _context2.next = 11;
236
235
  break;
237
236
  }
238
237
  // Check alpha
@@ -244,21 +243,21 @@ function _calculateDrawnPixelsRaw() {
244
243
  // The | operator combines all bits together
245
244
  color = data[i] << 16 | data[i + 1] << 8 | data[i + 2];
246
245
  colorIndex = color - 1;
247
- arr[colorIndex] = (arr[colorIndex] || 0) + scaleCompensation;
246
+ arr[colorIndex] = (arr[colorIndex] || 0) + 1;
248
247
  }
249
248
  if (!(i % 10000 === 0)) {
250
- _context2.next = 9;
249
+ _context2.next = 8;
251
250
  break;
252
251
  }
253
- _context2.next = 9;
252
+ _context2.next = 8;
254
253
  return taskYield();
255
- case 9:
254
+ case 8:
256
255
  i += 4;
257
- _context2.next = 4;
256
+ _context2.next = 3;
258
257
  break;
259
- case 12:
258
+ case 11:
260
259
  return _context2.abrupt("return", arr);
261
- case 13:
260
+ case 12:
262
261
  case "end":
263
262
  return _context2.stop();
264
263
  }
@@ -11,22 +11,22 @@ export default function calculateTTVCPercentiles(_x) {
11
11
  }
12
12
  function _calculateTTVCPercentiles() {
13
13
  _calculateTTVCPercentiles = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref) {
14
- var viewport, orderedEntries, percentiles, canvas, elementMap, _iterator3, _step3, entry, rect, elementName, timePixelCounts, viewportTotalPixels;
14
+ var viewport, orderedEntries, percentiles, startTime, canvas, elementMap, _iterator2, _step2, entry, rect, elementName, timePixelCounts, canvasDimenstions, totalPixels;
15
15
  return _regeneratorRuntime.wrap(function _callee$(_context) {
16
16
  while (1) switch (_context.prev = _context.next) {
17
17
  case 0:
18
- viewport = _ref.viewport, orderedEntries = _ref.orderedEntries, percentiles = _ref.percentiles;
18
+ viewport = _ref.viewport, orderedEntries = _ref.orderedEntries, percentiles = _ref.percentiles, startTime = _ref.startTime;
19
19
  canvas = new ViewportCanvas(viewport, fg('platform_ufo_canvas_heatmap_full_precision') ? 1 : 0.25);
20
20
  elementMap = new Map();
21
- _iterator3 = _createForOfIteratorHelper(orderedEntries);
21
+ _iterator2 = _createForOfIteratorHelper(orderedEntries);
22
22
  _context.prev = 4;
23
- _iterator3.s();
23
+ _iterator2.s();
24
24
  case 6:
25
- if ((_step3 = _iterator3.n()).done) {
25
+ if ((_step2 = _iterator2.n()).done) {
26
26
  _context.next = 17;
27
27
  break;
28
28
  }
29
- entry = _step3.value;
29
+ entry = _step2.value;
30
30
  if ('rect' in entry.data) {
31
31
  _context.next = 10;
32
32
  break;
@@ -49,19 +49,20 @@ function _calculateTTVCPercentiles() {
49
49
  case 19:
50
50
  _context.prev = 19;
51
51
  _context.t0 = _context["catch"](4);
52
- _iterator3.e(_context.t0);
52
+ _iterator2.e(_context.t0);
53
53
  case 22:
54
54
  _context.prev = 22;
55
- _iterator3.f();
55
+ _iterator2.f();
56
56
  return _context.finish(22);
57
57
  case 25:
58
58
  _context.next = 27;
59
59
  return canvas.getPixelCounts();
60
60
  case 27:
61
61
  timePixelCounts = _context.sent;
62
- viewportTotalPixels = viewport.width * viewport.height;
63
- return _context.abrupt("return", calculatePercentiles(timePixelCounts, elementMap, percentiles, viewportTotalPixels));
64
- case 30:
62
+ canvasDimenstions = canvas.getScaledDimensions();
63
+ totalPixels = canvasDimenstions.width * canvasDimenstions.height;
64
+ return _context.abrupt("return", calculatePercentiles(timePixelCounts, elementMap, percentiles, totalPixels, startTime));
65
+ case 31:
65
66
  case "end":
66
67
  return _context.stop();
67
68
  }
@@ -69,7 +70,7 @@ function _calculateTTVCPercentiles() {
69
70
  }));
70
71
  return _calculateTTVCPercentiles.apply(this, arguments);
71
72
  }
72
- export function calculatePercentiles(timePixelCounts, elementMap, unorderedPercentiles, totalPixels) {
73
+ export function calculatePercentiles(timePixelCounts, elementMap, unorderedPercentiles, totalPixels, startTime) {
73
74
  var results = {};
74
75
  var cumulativePixels = 0;
75
76
  var percentiles = unorderedPercentiles.sort(function (a, b) {
@@ -102,7 +103,7 @@ export function calculatePercentiles(timePixelCounts, elementMap, unorderedPerce
102
103
  var matchesAnyCheckpoints = false;
103
104
  while (percentileIndex < percentiles.length && percentCovered >= percentiles[percentileIndex]) {
104
105
  results["".concat(percentiles[percentileIndex])] = {
105
- t: Number(time),
106
+ t: Math.round(Number(time - startTime)),
106
107
  e: Array.from(domElementsBuffer)
107
108
  };
108
109
  percentileIndex++;
@@ -115,29 +116,21 @@ export function calculatePercentiles(timePixelCounts, elementMap, unorderedPerce
115
116
  break;
116
117
  }
117
118
  }
118
-
119
- // Fill in any missing percentiles
120
119
  } catch (err) {
121
120
  _iterator.e(err);
122
121
  } finally {
123
122
  _iterator.f();
124
123
  }
125
- var _iterator2 = _createForOfIteratorHelper(percentiles),
126
- _step2;
127
- try {
128
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
129
- var percentile = _step2.value;
130
- if (!(percentile in results)) {
131
- results["".concat(percentile)] = {
132
- t: 0,
133
- e: []
134
- };
135
- }
124
+ var previousResult = {
125
+ t: 0,
126
+ e: []
127
+ };
128
+ for (var i = 0; i < percentiles.length; i++) {
129
+ var percentile = percentiles[i];
130
+ if (!(percentile in results)) {
131
+ results["".concat(percentile)] = previousResult;
136
132
  }
137
- } catch (err) {
138
- _iterator2.e(err);
139
- } finally {
140
- _iterator2.f();
133
+ previousResult = results["".concat(percentile)];
141
134
  }
142
135
  return results;
143
136
  }
@@ -236,7 +236,7 @@ var Heatmap = /*#__PURE__*/function () {
236
236
  }, {
237
237
  key: "getVCPercentMetrics",
238
238
  value: function () {
239
- var _getVCPercentMetrics = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(vcPercentCheckpoint) {
239
+ var _getVCPercentMetrics = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(vcPercentCheckpoint, startTime) {
240
240
  var sortedCheckpoints, flattenHeatmap, totalCells, timestampMap, i, _cellHead$time, _timestampMap$get, cell, cellHead, timestamp, elementName, curr, sortedTimings, totalCellPainted, result, domElementsBuffer, _i, _timestamp, timestampInfo, cellCount, domElements, currVCRatio, currVCPercent, matchesAnyCheckpoints, checkpoint, _domElements;
241
241
  return _regeneratorRuntime.wrap(function _callee2$(_context2) {
242
242
  while (1) switch (_context2.prev = _context2.next) {
@@ -324,7 +324,7 @@ var Heatmap = /*#__PURE__*/function () {
324
324
  case 41:
325
325
  matchesAnyCheckpoints = true;
326
326
  result[checkpoint.toString()] = {
327
- t: _timestamp,
327
+ t: Math.round(_timestamp - startTime),
328
328
  e: _domElements
329
329
  };
330
330
  _context2.next = 36;
@@ -351,23 +351,23 @@ var Heatmap = /*#__PURE__*/function () {
351
351
  }
352
352
  }, _callee2, this);
353
353
  }));
354
- function getVCPercentMetrics(_x2) {
354
+ function getVCPercentMetrics(_x2, _x3) {
355
355
  return _getVCPercentMetrics.apply(this, arguments);
356
356
  }
357
357
  return getVCPercentMetrics;
358
358
  }()
359
359
  }]);
360
360
  }();
361
- export default function calculateTTVCPercentiles(_x3) {
361
+ export default function calculateTTVCPercentiles(_x4) {
362
362
  return _calculateTTVCPercentiles.apply(this, arguments);
363
363
  }
364
364
  function _calculateTTVCPercentiles() {
365
365
  _calculateTTVCPercentiles = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(_ref2) {
366
- var orderedEntries, viewport, percentiles, heatmap, vcDetails;
366
+ var orderedEntries, viewport, percentiles, startTime, heatmap, vcDetails;
367
367
  return _regeneratorRuntime.wrap(function _callee3$(_context3) {
368
368
  while (1) switch (_context3.prev = _context3.next) {
369
369
  case 0:
370
- orderedEntries = _ref2.orderedEntries, viewport = _ref2.viewport, percentiles = _ref2.percentiles;
370
+ orderedEntries = _ref2.orderedEntries, viewport = _ref2.viewport, percentiles = _ref2.percentiles, startTime = _ref2.startTime;
371
371
  heatmap = new Heatmap({
372
372
  viewport: viewport,
373
373
  heatmapSize: 200
@@ -376,7 +376,7 @@ function _calculateTTVCPercentiles() {
376
376
  return heatmap.applyEntriesToHeatmap(orderedEntries);
377
377
  case 4:
378
378
  _context3.next = 6;
379
- return heatmap.getVCPercentMetrics(percentiles);
379
+ return heatmap.getVCPercentMetrics(percentiles, startTime);
380
380
  case 6:
381
381
  vcDetails = _context3.sent;
382
382
  return _context3.abrupt("return", vcDetails);
@@ -9,11 +9,11 @@ export default function calculateTTVCPercentiles(_x) {
9
9
  }
10
10
  function _calculateTTVCPercentiles() {
11
11
  _calculateTTVCPercentiles = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref) {
12
- var orderedEntries, viewport, percentiles, sortedPercentiles, viewportArea, checkpoints, activeRects, removeActiveRect, domElementsBuffer, i, iEntry, iEntryData, rect, elementName, exclusionArea, currentArea, currVCPercent, matchesAnyCheckpoints, _checkpoint, domElements;
12
+ var orderedEntries, viewport, percentiles, startTime, sortedPercentiles, viewportArea, checkpoints, activeRects, removeActiveRect, domElementsBuffer, i, iEntry, iEntryData, rect, elementName, exclusionArea, currentArea, currVCPercent, matchesAnyCheckpoints, _checkpoint, domElements;
13
13
  return _regeneratorRuntime.wrap(function _callee$(_context) {
14
14
  while (1) switch (_context.prev = _context.next) {
15
15
  case 0:
16
- orderedEntries = _ref.orderedEntries, viewport = _ref.viewport, percentiles = _ref.percentiles;
16
+ orderedEntries = _ref.orderedEntries, viewport = _ref.viewport, percentiles = _ref.percentiles, startTime = _ref.startTime;
17
17
  sortedPercentiles = _toConsumableArray(percentiles).sort(function (a, b) {
18
18
  return a - b;
19
19
  });
@@ -69,7 +69,7 @@ function _calculateTTVCPercentiles() {
69
69
  case 25:
70
70
  matchesAnyCheckpoints = true;
71
71
  checkpoints[_checkpoint.toString()] = {
72
- t: iEntry.time,
72
+ t: Math.round(iEntry.time - startTime),
73
73
  e: domElements
74
74
  };
75
75
  _context.next = 20;
@@ -15,6 +15,9 @@ var WindowEventObserver = /*#__PURE__*/function () {
15
15
  var unbindCallback = bind(window, {
16
16
  type: type,
17
17
  listener: function listener(event) {
18
+ if (!event.isTrusted) {
19
+ return;
20
+ }
18
21
  _this.onEvent({
19
22
  time: event.timeStamp,
20
23
  type: type,
@@ -22,7 +25,8 @@ var WindowEventObserver = /*#__PURE__*/function () {
22
25
  });
23
26
  },
24
27
  options: {
25
- passive: true
28
+ passive: true,
29
+ once: true
26
30
  }
27
31
  });
28
32
  this.unbindFns.push(unbindCallback);
@@ -68,6 +68,7 @@ export type Config = {
68
68
  readonly ssr?: boolean;
69
69
  readonly ssrWhitelist?: string[];
70
70
  readonly stopVCAtInteractionFinish?: boolean;
71
+ readonly enableVCObserverNew?: boolean;
71
72
  };
72
73
  readonly postInteractionLog?: {
73
74
  readonly enabled?: boolean;
@@ -23188,4 +23188,4 @@ export declare function createExperimentalMetricsPayload(interactionId: string,
23188
23188
  'experience:name': string;
23189
23189
  };
23190
23190
  };
23191
- }> | null;
23191
+ } | null>;
@@ -0,0 +1,27 @@
1
+ import type { InteractionMetrics } from '../../common';
2
+ /**
3
+ * Determines the interaction status based on abort reason and BM3 TTI presence.
4
+ *
5
+ * @param {InteractionMetrics} interaction - The interaction metrics object containing abort reason and apdex data
6
+ * @returns {{
7
+ * originalInteractionStatus: 'ABORTED' | 'SUCCEEDED',
8
+ * overrideStatus: 'ABORTED' | 'SUCCEEDED'
9
+ * }} An object containing both the original and override status
10
+ *
11
+ * @description
12
+ * This function evaluates the interaction status in two ways:
13
+ * 1. originalInteractionStatus: Based on whether there's an abort reason
14
+ * 2. overrideStatus: Based on the presence of BM3 TTI (apdex data)
15
+ *
16
+ * @example
17
+ * const interaction = {
18
+ * abortReason: null,
19
+ * apdex: [1, 2, 3]
20
+ * };
21
+ * const result = getInteractionStatus(interaction);
22
+ * // Returns: { originalInteractionStatus: 'SUCCEEDED', overrideStatus: 'SUCCEEDED' }
23
+ */
24
+ export default function getInteractionStatus(interaction: InteractionMetrics): {
25
+ readonly originalInteractionStatus: "ABORTED" | "SUCCEEDED";
26
+ readonly overrideStatus: "ABORTED" | "SUCCEEDED";
27
+ };
@@ -0,0 +1,2 @@
1
+ import type { InteractionMetrics } from '../../common';
2
+ export default function getPageVisibilityUpToTTAI(interaction: InteractionMetrics): import("../../hidden-timing").PageVisibility;
@@ -0,0 +1,2 @@
1
+ import { type Config } from '../../config';
2
+ export default function getSSRDoneTimeValue(config: Config | undefined): number | undefined;
@@ -0,0 +1,5 @@
1
+ import { type InteractionMetrics } from '../../common';
2
+ import type { VCResult } from '../../common/vc/types';
3
+ export default function getVCMetrics(interaction: InteractionMetrics): Promise<VCResult & {
4
+ 'metric:vc90'?: number | null;
5
+ }>;
@@ -5,13 +5,14 @@ export type VCObserverNewConfig = {
5
5
  selectorConfig?: SelectorConfig;
6
6
  };
7
7
  export default class VCObserverNew {
8
- startTime: number;
9
8
  private selectorConfig;
10
9
  private viewportObserver;
11
10
  private windowEventObserver;
12
11
  private entriesTimeline;
13
12
  constructor(config: VCObserverNewConfig);
14
- start(): void;
13
+ start({ startTime }: {
14
+ startTime: DOMHighResTimeStamp;
15
+ }): void;
15
16
  stop(): void;
16
17
  getVCResult(param: VCObserverGetVCResultParam): Promise<RevisionPayloadEntry[]>;
17
18
  private getElementName;
@@ -5,5 +5,5 @@ export default abstract class AbstractVCCalculatorBase implements VCCalculator {
5
5
  constructor(revisionNo: string);
6
6
  protected abstract isEntryIncluded(entry: VCObserverEntry): boolean;
7
7
  protected abstract isVCClean(filteredEntries: ReadonlyArray<VCObserverEntry>): boolean;
8
- calculate({ orderedEntries, }: VCCalculatorParam): Promise<RevisionPayloadEntry | undefined>;
8
+ calculate({ startTime, stopTime, orderedEntries, }: VCCalculatorParam): Promise<RevisionPayloadEntry | undefined>;
9
9
  }
@@ -1,4 +1,4 @@
1
1
  import type { RevisionPayloadVCDetails } from '../../types';
2
2
  import type { CalcTTVCPercentilesArg } from '../types';
3
- export default function calculateTTVCPercentiles({ viewport, orderedEntries, percentiles, }: CalcTTVCPercentilesArg): Promise<RevisionPayloadVCDetails>;
4
- export declare function calculatePercentiles(timePixelCounts: Map<DOMHighResTimeStamp, number>, elementMap: ReadonlyMap<DOMHighResTimeStamp, Set<string>>, unorderedPercentiles: number[], totalPixels: number): RevisionPayloadVCDetails;
3
+ export default function calculateTTVCPercentiles({ viewport, orderedEntries, percentiles, startTime, }: CalcTTVCPercentilesArg): Promise<RevisionPayloadVCDetails>;
4
+ export declare function calculatePercentiles(timePixelCounts: Map<DOMHighResTimeStamp, number>, elementMap: ReadonlyMap<DOMHighResTimeStamp, Set<string>>, unorderedPercentiles: number[], totalPixels: number, startTime: DOMHighResTimeStamp): RevisionPayloadVCDetails;
@@ -1,8 +1,9 @@
1
1
  import type { VCObserverEntry } from '../../../types';
2
2
  import type { RevisionPayloadVCDetails } from '../../types';
3
3
  import type { Viewport } from './types';
4
- export default function calculateTTVCPercentiles({ orderedEntries, viewport, percentiles, }: {
4
+ export default function calculateTTVCPercentiles({ orderedEntries, viewport, percentiles, startTime, }: {
5
5
  orderedEntries: ReadonlyArray<VCObserverEntry>;
6
6
  viewport: Viewport;
7
7
  percentiles: number[];
8
+ startTime: DOMHighResTimeStamp;
8
9
  }): Promise<RevisionPayloadVCDetails>;
@@ -16,8 +16,9 @@ export type CheckpointMetrics = {
16
16
  e: DOMSelector[];
17
17
  };
18
18
  };
19
- export default function calculateTTVCPercentiles({ orderedEntries, viewport, percentiles, }: {
19
+ export default function calculateTTVCPercentiles({ orderedEntries, viewport, percentiles, startTime, }: {
20
20
  orderedEntries: ReadonlyArray<VCObserverEntry>;
21
21
  viewport: Viewport;
22
22
  percentiles: number[];
23
+ startTime: DOMHighResTimeStamp;
23
24
  }): Promise<CheckpointMetrics>;
@@ -4,6 +4,8 @@ export type CalcTTVCPercentilesArg = {
4
4
  width: number;
5
5
  height: number;
6
6
  };
7
+ startTime: DOMHighResTimeStamp;
8
+ stopTime: DOMHighResTimeStamp;
7
9
  orderedEntries: ReadonlyArray<VCObserverEntry>;
8
10
  percentiles: number[];
9
11
  };
@@ -13,6 +13,8 @@ export type RevisionPayloadEntry = {
13
13
  };
14
14
  export type RevisionPayload = RevisionPayloadEntry[];
15
15
  export type VCCalculatorParam = {
16
+ startTime: DOMHighResTimeStamp;
17
+ stopTime: DOMHighResTimeStamp;
16
18
  orderedEntries: ReadonlyArray<VCObserverEntry>;
17
19
  };
18
20
  export interface VCCalculator {
@@ -68,6 +68,7 @@ export type Config = {
68
68
  readonly ssr?: boolean;
69
69
  readonly ssrWhitelist?: string[];
70
70
  readonly stopVCAtInteractionFinish?: boolean;
71
+ readonly enableVCObserverNew?: boolean;
71
72
  };
72
73
  readonly postInteractionLog?: {
73
74
  readonly enabled?: boolean;
@@ -23188,4 +23188,4 @@ export declare function createExperimentalMetricsPayload(interactionId: string,
23188
23188
  'experience:name': string;
23189
23189
  };
23190
23190
  };
23191
- }> | null;
23191
+ } | null>;
@@ -0,0 +1,27 @@
1
+ import type { InteractionMetrics } from '../../common';
2
+ /**
3
+ * Determines the interaction status based on abort reason and BM3 TTI presence.
4
+ *
5
+ * @param {InteractionMetrics} interaction - The interaction metrics object containing abort reason and apdex data
6
+ * @returns {{
7
+ * originalInteractionStatus: 'ABORTED' | 'SUCCEEDED',
8
+ * overrideStatus: 'ABORTED' | 'SUCCEEDED'
9
+ * }} An object containing both the original and override status
10
+ *
11
+ * @description
12
+ * This function evaluates the interaction status in two ways:
13
+ * 1. originalInteractionStatus: Based on whether there's an abort reason
14
+ * 2. overrideStatus: Based on the presence of BM3 TTI (apdex data)
15
+ *
16
+ * @example
17
+ * const interaction = {
18
+ * abortReason: null,
19
+ * apdex: [1, 2, 3]
20
+ * };
21
+ * const result = getInteractionStatus(interaction);
22
+ * // Returns: { originalInteractionStatus: 'SUCCEEDED', overrideStatus: 'SUCCEEDED' }
23
+ */
24
+ export default function getInteractionStatus(interaction: InteractionMetrics): {
25
+ readonly originalInteractionStatus: "ABORTED" | "SUCCEEDED";
26
+ readonly overrideStatus: "ABORTED" | "SUCCEEDED";
27
+ };
@@ -0,0 +1,2 @@
1
+ import type { InteractionMetrics } from '../../common';
2
+ export default function getPageVisibilityUpToTTAI(interaction: InteractionMetrics): import("../../hidden-timing").PageVisibility;
@@ -0,0 +1,2 @@
1
+ import { type Config } from '../../config';
2
+ export default function getSSRDoneTimeValue(config: Config | undefined): number | undefined;
@@ -0,0 +1,5 @@
1
+ import { type InteractionMetrics } from '../../common';
2
+ import type { VCResult } from '../../common/vc/types';
3
+ export default function getVCMetrics(interaction: InteractionMetrics): Promise<VCResult & {
4
+ 'metric:vc90'?: number | null;
5
+ }>;
@@ -5,13 +5,14 @@ export type VCObserverNewConfig = {
5
5
  selectorConfig?: SelectorConfig;
6
6
  };
7
7
  export default class VCObserverNew {
8
- startTime: number;
9
8
  private selectorConfig;
10
9
  private viewportObserver;
11
10
  private windowEventObserver;
12
11
  private entriesTimeline;
13
12
  constructor(config: VCObserverNewConfig);
14
- start(): void;
13
+ start({ startTime }: {
14
+ startTime: DOMHighResTimeStamp;
15
+ }): void;
15
16
  stop(): void;
16
17
  getVCResult(param: VCObserverGetVCResultParam): Promise<RevisionPayloadEntry[]>;
17
18
  private getElementName;
@@ -5,5 +5,5 @@ export default abstract class AbstractVCCalculatorBase implements VCCalculator {
5
5
  constructor(revisionNo: string);
6
6
  protected abstract isEntryIncluded(entry: VCObserverEntry): boolean;
7
7
  protected abstract isVCClean(filteredEntries: ReadonlyArray<VCObserverEntry>): boolean;
8
- calculate({ orderedEntries, }: VCCalculatorParam): Promise<RevisionPayloadEntry | undefined>;
8
+ calculate({ startTime, stopTime, orderedEntries, }: VCCalculatorParam): Promise<RevisionPayloadEntry | undefined>;
9
9
  }
@@ -1,4 +1,4 @@
1
1
  import type { RevisionPayloadVCDetails } from '../../types';
2
2
  import type { CalcTTVCPercentilesArg } from '../types';
3
- export default function calculateTTVCPercentiles({ viewport, orderedEntries, percentiles, }: CalcTTVCPercentilesArg): Promise<RevisionPayloadVCDetails>;
4
- export declare function calculatePercentiles(timePixelCounts: Map<DOMHighResTimeStamp, number>, elementMap: ReadonlyMap<DOMHighResTimeStamp, Set<string>>, unorderedPercentiles: number[], totalPixels: number): RevisionPayloadVCDetails;
3
+ export default function calculateTTVCPercentiles({ viewport, orderedEntries, percentiles, startTime, }: CalcTTVCPercentilesArg): Promise<RevisionPayloadVCDetails>;
4
+ export declare function calculatePercentiles(timePixelCounts: Map<DOMHighResTimeStamp, number>, elementMap: ReadonlyMap<DOMHighResTimeStamp, Set<string>>, unorderedPercentiles: number[], totalPixels: number, startTime: DOMHighResTimeStamp): RevisionPayloadVCDetails;
@@ -1,8 +1,9 @@
1
1
  import type { VCObserverEntry } from '../../../types';
2
2
  import type { RevisionPayloadVCDetails } from '../../types';
3
3
  import type { Viewport } from './types';
4
- export default function calculateTTVCPercentiles({ orderedEntries, viewport, percentiles, }: {
4
+ export default function calculateTTVCPercentiles({ orderedEntries, viewport, percentiles, startTime, }: {
5
5
  orderedEntries: ReadonlyArray<VCObserverEntry>;
6
6
  viewport: Viewport;
7
7
  percentiles: number[];
8
+ startTime: DOMHighResTimeStamp;
8
9
  }): Promise<RevisionPayloadVCDetails>;
@@ -16,8 +16,9 @@ export type CheckpointMetrics = {
16
16
  e: DOMSelector[];
17
17
  };
18
18
  };
19
- export default function calculateTTVCPercentiles({ orderedEntries, viewport, percentiles, }: {
19
+ export default function calculateTTVCPercentiles({ orderedEntries, viewport, percentiles, startTime, }: {
20
20
  orderedEntries: ReadonlyArray<VCObserverEntry>;
21
21
  viewport: Viewport;
22
22
  percentiles: number[];
23
+ startTime: DOMHighResTimeStamp;
23
24
  }): Promise<CheckpointMetrics>;
@@ -4,6 +4,8 @@ export type CalcTTVCPercentilesArg = {
4
4
  width: number;
5
5
  height: number;
6
6
  };
7
+ startTime: DOMHighResTimeStamp;
8
+ stopTime: DOMHighResTimeStamp;
7
9
  orderedEntries: ReadonlyArray<VCObserverEntry>;
8
10
  percentiles: number[];
9
11
  };