@atlaskit/react-ufo 3.3.2 → 3.4.0

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 (69) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/assets/index.js +26 -16
  3. package/dist/cjs/assets/utils.js +47 -4
  4. package/dist/cjs/create-payload/index.js +58 -27
  5. package/dist/cjs/interaction-metrics-init/index.js +11 -9
  6. package/dist/cjs/vc/index.js +6 -2
  7. package/dist/cjs/vc/vc-observer-new/get-element-name.js +19 -6
  8. package/dist/cjs/vc/vc-observer-new/index.js +6 -3
  9. package/dist/cjs/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.js +4 -2
  10. package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/canvas-pixel.js +10 -11
  11. package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.js +23 -30
  12. package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.js +7 -7
  13. package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.js +3 -3
  14. package/dist/cjs/vc/vc-observer-new/window-event-observer/index.js +5 -1
  15. package/dist/es2019/assets/index.js +27 -13
  16. package/dist/es2019/assets/utils.js +47 -3
  17. package/dist/es2019/create-payload/index.js +14 -9
  18. package/dist/es2019/interaction-metrics-init/index.js +11 -9
  19. package/dist/es2019/vc/index.js +6 -2
  20. package/dist/es2019/vc/vc-observer-new/get-element-name.js +19 -6
  21. package/dist/es2019/vc/vc-observer-new/index.js +7 -3
  22. package/dist/es2019/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.js +4 -0
  23. package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/canvas-pixel.js +1 -2
  24. package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.js +15 -12
  25. package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.js +5 -4
  26. package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.js +3 -2
  27. package/dist/es2019/vc/vc-observer-new/window-event-observer/index.js +5 -1
  28. package/dist/esm/assets/index.js +27 -17
  29. package/dist/esm/assets/utils.js +46 -3
  30. package/dist/esm/create-payload/index.js +58 -27
  31. package/dist/esm/interaction-metrics-init/index.js +11 -9
  32. package/dist/esm/vc/index.js +6 -2
  33. package/dist/esm/vc/vc-observer-new/get-element-name.js +19 -6
  34. package/dist/esm/vc/vc-observer-new/index.js +6 -3
  35. package/dist/esm/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.js +4 -2
  36. package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/canvas-pixel.js +10 -11
  37. package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.js +23 -30
  38. package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.js +7 -7
  39. package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.js +3 -3
  40. package/dist/esm/vc/vc-observer-new/window-event-observer/index.js +5 -1
  41. package/dist/types/assets/index.d.ts +5 -5
  42. package/dist/types/assets/utils.d.ts +4 -1
  43. package/dist/types/common/assets/types.d.ts +14 -8
  44. package/dist/types/common/index.d.ts +11 -1
  45. package/dist/types/config/index.d.ts +6 -0
  46. package/dist/types/create-payload/index.d.ts +769 -1
  47. package/dist/types/resource-timing/common/types.d.ts +1 -1
  48. package/dist/types/vc/vc-observer-new/index.d.ts +3 -2
  49. package/dist/types/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.d.ts +1 -1
  50. package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.d.ts +2 -2
  51. package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.d.ts +2 -1
  52. package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.d.ts +2 -1
  53. package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/types.d.ts +2 -0
  54. package/dist/types/vc/vc-observer-new/metric-calculator/types.d.ts +2 -0
  55. package/dist/types-ts4.5/assets/index.d.ts +5 -5
  56. package/dist/types-ts4.5/assets/utils.d.ts +4 -1
  57. package/dist/types-ts4.5/common/assets/types.d.ts +14 -8
  58. package/dist/types-ts4.5/common/index.d.ts +11 -1
  59. package/dist/types-ts4.5/config/index.d.ts +6 -0
  60. package/dist/types-ts4.5/create-payload/index.d.ts +769 -1
  61. package/dist/types-ts4.5/resource-timing/common/types.d.ts +1 -1
  62. package/dist/types-ts4.5/vc/vc-observer-new/index.d.ts +3 -2
  63. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.d.ts +1 -1
  64. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.d.ts +2 -2
  65. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.d.ts +2 -1
  66. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.d.ts +2 -1
  67. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/types.d.ts +2 -0
  68. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/types.d.ts +2 -0
  69. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @atlaskit/ufo-interaction-ignore
2
2
 
3
+ ## 3.4.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#124334](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/124334)
8
+ [`419c4451a0c0f`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/419c4451a0c0f) -
9
+ Updated assets config to include different types of requests
10
+
11
+ ## 3.3.3
12
+
13
+ ### Patch Changes
14
+
15
+ - [#123538](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/123538)
16
+ [`2dd75c16ca0c4`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/2dd75c16ca0c4) -
17
+ fix handling of potentially invalid selectors in TTVC v3
18
+
3
19
  ## 3.3.2
4
20
 
5
21
  ### Patch Changes
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.CHRSummary = exports.CHRReporter = void 0;
8
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
8
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
10
9
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
11
10
  var _defineProperty4 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
@@ -21,9 +20,8 @@ var CHRSummary = exports.CHRSummary = /*#__PURE__*/function () {
21
20
  return (0, _createClass2.default)(CHRSummary, [{
22
21
  key: "add",
23
22
  value: function add(asset) {
24
- var size = 'size' in asset ? asset.size : undefined;
25
- var encodedSize = 'encodedSize' in asset ? Number(asset.encodedSize) : 0;
26
- var type = (0, _utils.calculateTransferType)(asset.type, asset.duration, size);
23
+ var encodedSize = asset.encodedSize || 0;
24
+ var type = (0, _utils.calculateTransferType)(asset.name, asset.initiatorType, asset.duration, asset.transferSize);
27
25
  if (type === null) {
28
26
  return;
29
27
  }
@@ -54,28 +52,39 @@ var CHRReporter = exports.CHRReporter = /*#__PURE__*/function () {
54
52
  (0, _defineProperty4.default)(this, "all", new CHRSummary());
55
53
  (0, _defineProperty4.default)(this, "allAtlassian", new CHRSummary());
56
54
  (0, _defineProperty4.default)(this, "preloaded", new CHRSummary());
55
+ (0, _defineProperty4.default)(this, "defaultAllowedTypes", ['js']);
57
56
  }
58
57
  return (0, _createClass2.default)(CHRReporter, [{
59
58
  key: "get",
60
- value: function get(resourceTimings, assetsClassification) {
59
+ value: function get(resourceTimings, assetsConfig, SSRDoneTime) {
61
60
  var _this = this;
62
61
  try {
63
- Object.entries(resourceTimings).map(function (_ref) {
64
- var _ref2 = (0, _slicedToArray2.default)(_ref, 2),
65
- label = _ref2[0],
66
- entry = _ref2[1];
67
- if (assetsClassification.all) {
62
+ if (resourceTimings === null) {
63
+ return null;
64
+ }
65
+ resourceTimings.forEach(function (entry) {
66
+ if (!(0, _utils.checkIfTimingsAvailable)(entry)) {
67
+ return;
68
+ }
69
+ if (entry.encodedSize === entry.decodedSize) {
70
+ // incorrectly reported size
71
+ return;
72
+ }
73
+ var type = (0, _utils.getTypeOfRequest)(entry);
74
+ if (!(assetsConfig.allowedTypes || _this.defaultAllowedTypes).includes(type)) {
75
+ return;
76
+ }
77
+ if (assetsConfig.classification.all) {
68
78
  _this.all.add(entry);
69
79
  }
70
- if (assetsClassification.allAtlassian({
71
- label: label,
80
+ if (assetsConfig.classification.allAtlassian({
72
81
  entry: entry
73
82
  })) {
74
83
  _this.allAtlassian.add(entry);
75
84
  }
76
- if (assetsClassification.preloaded({
77
- label: label,
78
- entry: entry
85
+ if (assetsConfig.classification.preloaded({
86
+ entry: entry,
87
+ SSRDoneTime: SSRDoneTime
79
88
  })) {
80
89
  _this.preloaded.add(entry);
81
90
  }
@@ -83,11 +92,12 @@ var CHRReporter = exports.CHRReporter = /*#__PURE__*/function () {
83
92
  if (this.all.bundlesCount === 0) {
84
93
  return null;
85
94
  }
86
- return {
95
+ var CHRData = {
87
96
  all: CHRSummary.makePayload(this.all),
88
97
  allAtlassian: CHRSummary.makePayload(this.allAtlassian),
89
98
  preloaded: CHRSummary.makePayload(this.preloaded)
90
99
  };
100
+ return CHRData;
91
101
  } catch (error) {
92
102
  return null;
93
103
  }
@@ -3,14 +3,14 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.round = exports.calculateTransferType = exports.cacheableTypes = exports.NETWORK_KEY = exports.MEMORY_KEY = exports.DISK_KEY = void 0;
6
+ exports.round = exports.getTypeOfRequest = exports.checkIfTimingsAvailable = exports.calculateTransferType = exports.cacheableTypes = exports.NETWORK_KEY = exports.MEMORY_KEY = exports.DISK_KEY = void 0;
7
7
  /* Borrowed from https://bitbucket.org/atlassian/atlassian-frontend/src/master/packages/performance/browser-metrics/src/plugins/timings/resource.ts */
8
- var cacheableTypes = exports.cacheableTypes = ['script', 'link'];
8
+ var cacheableTypes = exports.cacheableTypes = ['script', 'link', 'other'];
9
9
  var MEMORY_KEY = exports.MEMORY_KEY = 'mem';
10
10
  var DISK_KEY = exports.DISK_KEY = 'disk';
11
11
  var NETWORK_KEY = exports.NETWORK_KEY = 'net';
12
- var calculateTransferType = exports.calculateTransferType = function calculateTransferType(type, duration, size) {
13
- if (!cacheableTypes.includes(type)) {
12
+ var calculateTransferType = exports.calculateTransferType = function calculateTransferType(name, type, duration, size) {
13
+ if (!cacheableTypes.includes(type) && !(type === 'other' && name.includes('.js'))) {
14
14
  return null;
15
15
  }
16
16
  if ((size === undefined || size === 0) && duration === 0) {
@@ -24,6 +24,49 @@ var calculateTransferType = exports.calculateTransferType = function calculateTr
24
24
  }
25
25
  return NETWORK_KEY;
26
26
  };
27
+ var getTypeOfRequest = exports.getTypeOfRequest = function getTypeOfRequest(_ref) {
28
+ var name = _ref.name,
29
+ type = _ref.initiatorType;
30
+ var category = 'other';
31
+ var urlWithoutQuery = name.split('?')[0];
32
+ switch (type) {
33
+ case 'script':
34
+ category = 'js';
35
+ break;
36
+ case 'link':
37
+ if (urlWithoutQuery.endsWith('.css')) {
38
+ category = 'css';
39
+ }
40
+ if (urlWithoutQuery.endsWith('.js')) {
41
+ category = 'js';
42
+ }
43
+ break;
44
+ case 'img':
45
+ category = 'image';
46
+ break;
47
+ case 'font':
48
+ category = 'font';
49
+ break;
50
+ default:
51
+ if (urlWithoutQuery.endsWith('.js')) {
52
+ category = 'js';
53
+ } else if (urlWithoutQuery.endsWith('.css')) {
54
+ category = 'css';
55
+ } else if (urlWithoutQuery.match(/\.(woff|woff2|ttf|otf)$/)) {
56
+ category = 'font';
57
+ } else if (urlWithoutQuery.match(/\.(png|jpg|jpeg|gif|svg)$/)) {
58
+ category = 'image';
59
+ }
60
+ break;
61
+ }
62
+ return category;
63
+ };
64
+ var checkIfTimingsAvailable = exports.checkIfTimingsAvailable = function checkIfTimingsAvailable(entry) {
65
+ if (entry.decodedSize === 0 && entry.encodedSize === 0 && entry.requestStart === 0 && entry.responseStart === 0) {
66
+ return false;
67
+ }
68
+ return true;
69
+ };
27
70
  var round = exports.round = function round(n) {
28
71
  if (isNaN(n)) {
29
72
  return 0;
@@ -28,6 +28,7 @@ var _hiddenTiming = require("../hidden-timing");
28
28
  var initialPageLoadExtraTiming = _interopRequireWildcard(require("../initial-page-load-extra-timing"));
29
29
  var _interactionMetrics = require("../interaction-metrics");
30
30
  var resourceTiming = _interopRequireWildcard(require("../resource-timing"));
31
+ var _resourceTimingBuffer = require("../resource-timing/common/utils/resource-timing-buffer");
31
32
  var _roundNumber = require("../round-number");
32
33
  var ssr = _interopRequireWildcard(require("../ssr"));
33
34
  var _utils = require("./common/utils");
@@ -257,18 +258,19 @@ function getSSRProperties(type) {
257
258
  'ssr:featureFlags': getSSRFeatureFlags(type)
258
259
  };
259
260
  }
260
- var getAssetsMetrics = function getAssetsMetrics(interaction, resourceTimings) {
261
+ var getAssetsMetrics = function getAssetsMetrics(interaction, SSRDoneTime) {
261
262
  try {
262
263
  var config = (0, _config.getConfig)();
263
264
  var type = interaction.type;
264
265
  var allowedTypes = ['page_load', 'transition'];
265
- var assetsClassification = config === null || config === void 0 ? void 0 : config.assetsClassification;
266
- if (!allowedTypes.includes(type) || !assetsClassification) {
266
+ var assetsConfig = config === null || config === void 0 ? void 0 : config.assetsConfig;
267
+ if (!allowedTypes.includes(type) || !assetsConfig) {
267
268
  // Skip if: type not allowed or assetsClassification isn't configured
268
269
  return {};
269
270
  }
270
271
  var reporter = new _assets.CHRReporter();
271
- var assets = reporter.get(resourceTimings, assetsClassification);
272
+ var resourceTimings = (0, _resourceTimingBuffer.filterResourceTimings)(interaction.start, interaction.end);
273
+ var assets = reporter.get(resourceTimings, assetsConfig, SSRDoneTime);
272
274
  if (assets) {
273
275
  // Only add assets in case it exists
274
276
  return {
@@ -647,7 +649,7 @@ function createInteractionMetricsPayload(_x, _x2, _x3) {
647
649
  function _createInteractionMetricsPayload() {
648
650
  _createInteractionMetricsPayload = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(interaction, interactionId, experimental) {
649
651
  var _window$location, _config$additionalPay;
650
- var interactionPayloadStart, config, end, start, ufoName, knownSegments, rate, type, abortReason, routeName, featureFlags, previousInteractionName, isPreviousInteractionAborted, abortedByInteractionName, pageVisibilityAtTTI, pageVisibilityAtTTAI, segments, segmentTree, isDetailedPayload, isPageLoad, calculatePageVisibilityFromTheStartOfPageLoad, moreAccuratePageVisibilityAtTTI, moreAccuratePageVisibilityAtTTAI, labelStack, getPageLoadInteractionMetrics, getDetailedInteractionMetrics, getPageLoadDetailedInteractionMetrics, newUFOName, resourceTimings, _yield$Promise$all, _yield$Promise$all2, vcMetrics, experimentalMetrics, payload;
652
+ var interactionPayloadStart, config, end, start, ufoName, knownSegments, rate, type, abortReason, routeName, featureFlags, previousInteractionName, isPreviousInteractionAborted, abortedByInteractionName, pageVisibilityAtTTI, pageVisibilityAtTTAI, segments, segmentTree, isDetailedPayload, isPageLoad, calculatePageVisibilityFromTheStartOfPageLoad, moreAccuratePageVisibilityAtTTI, moreAccuratePageVisibilityAtTTAI, labelStack, getInitialPageLoadSSRMetrics, pageLoadInteractionMetrics, getDetailedInteractionMetrics, getPageLoadDetailedInteractionMetrics, newUFOName, resourceTimings, _yield$Promise$all, _yield$Promise$all2, vcMetrics, experimentalMetrics, payload;
651
653
  return _regenerator.default.wrap(function _callee$(_context) {
652
654
  while (1) switch (_context.prev = _context.next) {
653
655
  case 0:
@@ -674,7 +676,7 @@ function _createInteractionMetricsPayload() {
674
676
  labelStack = interaction.labelStack ? {
675
677
  labelStack: (0, _utils.optimizeLabelStack)(interaction.labelStack, (0, _constants.getReactUFOVersion)(interaction.type))
676
678
  } : {}; // Page Load
677
- getPageLoadInteractionMetrics = function getPageLoadInteractionMetrics() {
679
+ getInitialPageLoadSSRMetrics = function getInitialPageLoadSSRMetrics() {
678
680
  var _config$ssr;
679
681
  if (!isPageLoad) {
680
682
  return {};
@@ -688,7 +690,8 @@ function _createInteractionMetricsPayload() {
688
690
  isBM3ConfigSSRDoneAsFmp: interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp,
689
691
  isUFOConfigSSRDoneAsFmp: interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp || !!(config !== null && config !== void 0 && (_config$ssr = config.ssr) !== null && _config$ssr !== void 0 && _config$ssr.getSSRDoneTime)
690
692
  });
691
- }; // Detailed payload. Page visibility = visible
693
+ };
694
+ pageLoadInteractionMetrics = getInitialPageLoadSSRMetrics(); // Detailed payload. Page visibility = visible
692
695
  getDetailedInteractionMetrics = function getDetailedInteractionMetrics(resourceTimings) {
693
696
  if (experimental || window.__UFO_COMPACT_PAYLOAD__ || !isDetailedPayload) {
694
697
  return {};
@@ -731,9 +734,9 @@ function _createInteractionMetricsPayload() {
731
734
  }
732
735
  newUFOName = (0, _utils.sanitizeUfoName)(ufoName);
733
736
  resourceTimings = getResourceTimings(start, end);
734
- _context.next = 23;
737
+ _context.next = 24;
735
738
  return Promise.all([(0, _getVcMetrics.default)(interaction), experimental ? (0, _createExperimentalInteractionMetricsPayload.getExperimentalVCMetrics)(interaction) : Promise.resolve(undefined)]);
736
- case 23:
739
+ case 24:
737
740
  _yield$Promise$all = _context.sent;
738
741
  _yield$Promise$all2 = (0, _slicedToArray2.default)(_yield$Promise$all, 2);
739
742
  vcMetrics = _yield$Promise$all2[0];
@@ -758,7 +761,7 @@ function _createInteractionMetricsPayload() {
758
761
  'event:region': config.region || 'unknown',
759
762
  'experience:key': experimental ? 'custom.experimental-interaction-metrics' : 'custom.interaction-metrics',
760
763
  'experience:name': newUFOName
761
- }, getBrowserMetadata()), getSSRProperties(type)), getAssetsMetrics(interaction, resourceTimings)), getPPSMetrics(interaction)), getPaintMetrics(type)), getNavigationMetrics(type)), vcMetrics), experimentalMetrics), (_config$additionalPay = config.additionalPayloadData) === null || _config$additionalPay === void 0 ? void 0 : _config$additionalPay.call(config, interaction)), getTracingContextData(interaction)), getStylesheetMetrics()), getErrorCounts(interaction)), {}, {
764
+ }, getBrowserMetadata()), getSSRProperties(type)), getAssetsMetrics(interaction, pageLoadInteractionMetrics === null || pageLoadInteractionMetrics === void 0 ? void 0 : pageLoadInteractionMetrics.SSRDoneTime)), getPPSMetrics(interaction)), getPaintMetrics(type)), getNavigationMetrics(type)), vcMetrics), experimentalMetrics), (_config$additionalPay = config.additionalPayloadData) === null || _config$additionalPay === void 0 ? void 0 : _config$additionalPay.call(config, interaction)), getTracingContextData(interaction)), getStylesheetMetrics()), getErrorCounts(interaction)), {}, {
762
765
  interactionMetrics: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
763
766
  namePrefix: config.namePrefix || '',
764
767
  segmentPrefix: config.segmentPrefix || '',
@@ -790,7 +793,7 @@ function _createInteractionMetricsPayload() {
790
793
  marks: optimizeMarks(interaction.marks, (0, _constants.getReactUFOVersion)(interaction.type)),
791
794
  customData: optimizeCustomData(interaction),
792
795
  reactProfilerTimings: optimizeReactProfilerTimings(interaction.reactProfilerTimings, start, (0, _constants.getReactUFOVersion)(interaction.type))
793
- }, labelStack), getPageLoadInteractionMetrics()), getDetailedInteractionMetrics(resourceTimings)), getPageLoadDetailedInteractionMetrics()), getBm3TrackerTimings(interaction)), {}, {
796
+ }, labelStack), pageLoadInteractionMetrics), getDetailedInteractionMetrics(resourceTimings)), getPageLoadDetailedInteractionMetrics()), getBm3TrackerTimings(interaction)), {}, {
794
797
  'metric:ttai': experimental ? regularTTAI || expTTAI : undefined,
795
798
  'metric:experimental:ttai': expTTAI
796
799
  }),
@@ -804,7 +807,7 @@ function _createInteractionMetricsPayload() {
804
807
  }
805
808
  payload.attributes.properties['event:sizeInKb'] = getPayloadSize(payload.attributes.properties);
806
809
  return _context.abrupt("return", payload);
807
- case 31:
810
+ case 32:
808
811
  case "end":
809
812
  return _context.stop();
810
813
  }
@@ -838,19 +841,47 @@ function _createPayloads() {
838
841
  }));
839
842
  return _createPayloads.apply(this, arguments);
840
843
  }
841
- function createExperimentalMetricsPayload(interactionId, interaction) {
842
- var config = (0, _config.getConfig)();
843
- if (!config) {
844
- throw Error('UFO Configuration not provided');
845
- }
846
- var ufoName = (0, _utils.sanitizeUfoName)(interaction.ufoName);
847
- var rate = (0, _config.getExperimentalInteractionRate)(ufoName, interaction.type);
848
- if (!(0, _coinflip.default)(rate)) {
849
- return null;
850
- }
851
- var pageVisibilityState = (0, _hiddenTiming.getPageVisibilityState)(interaction.start, interaction.end);
852
- if (pageVisibilityState !== 'visible') {
853
- return null;
854
- }
855
- return createInteractionMetricsPayload(interaction, interactionId, true);
844
+ function createExperimentalMetricsPayload(_x6, _x7) {
845
+ return _createExperimentalMetricsPayload.apply(this, arguments);
846
+ }
847
+ function _createExperimentalMetricsPayload() {
848
+ _createExperimentalMetricsPayload = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(interactionId, interaction) {
849
+ var config, ufoName, rate, pageVisibilityState, result;
850
+ return _regenerator.default.wrap(function _callee3$(_context3) {
851
+ while (1) switch (_context3.prev = _context3.next) {
852
+ case 0:
853
+ config = (0, _config.getConfig)();
854
+ if (config) {
855
+ _context3.next = 3;
856
+ break;
857
+ }
858
+ throw Error('UFO Configuration not provided');
859
+ case 3:
860
+ ufoName = (0, _utils.sanitizeUfoName)(interaction.ufoName);
861
+ rate = (0, _config.getExperimentalInteractionRate)(ufoName, interaction.type);
862
+ if ((0, _coinflip.default)(rate)) {
863
+ _context3.next = 7;
864
+ break;
865
+ }
866
+ return _context3.abrupt("return", null);
867
+ case 7:
868
+ pageVisibilityState = (0, _hiddenTiming.getPageVisibilityState)(interaction.start, interaction.end);
869
+ if (!(pageVisibilityState !== 'visible')) {
870
+ _context3.next = 10;
871
+ break;
872
+ }
873
+ return _context3.abrupt("return", null);
874
+ case 10:
875
+ _context3.next = 12;
876
+ return createInteractionMetricsPayload(interaction, interactionId, true);
877
+ case 12:
878
+ result = _context3.sent;
879
+ return _context3.abrupt("return", result);
880
+ case 14:
881
+ case "end":
882
+ return _context3.stop();
883
+ }
884
+ }, _callee3);
885
+ }));
886
+ return _createExperimentalMetricsPayload.apply(this, arguments);
856
887
  }
@@ -39,17 +39,19 @@ function sinkInteraction(instance, payloadPackage) {
39
39
  function sinkExperimentalInteractionMetrics(instance, payloadPackage) {
40
40
  (0, _createExperimentalInteractionMetricsPayload.sinkExperimentalHandler)(function (interactionId, interaction) {
41
41
  (0, _scheduler.unstable_scheduleCallback)(_scheduler.unstable_IdlePriority, function () {
42
- var payload = payloadPackage.createExperimentalMetricsPayload(interactionId, interaction);
43
- if (payload) {
44
- if ((0, _platformFeatureFlags.fg)('enable_ufo_devtools_api_for_extra_events')) {
45
- // NOTE: This API is used by the UFO DevTool Chrome Extension and Criterion
46
- var devToolObserver = globalThis.__ufo_devtool_onUfoPayload;
47
- if (typeof devToolObserver === 'function') {
48
- devToolObserver === null || devToolObserver === void 0 || devToolObserver(payload);
42
+ var payloadPromise = payloadPackage.createExperimentalMetricsPayload(interactionId, interaction);
43
+ payloadPromise.then(function (payload) {
44
+ if (payload) {
45
+ if ((0, _platformFeatureFlags.fg)('enable_ufo_devtools_api_for_extra_events')) {
46
+ // NOTE: This API is used by the UFO DevTool Chrome Extension and Criterion
47
+ var devToolObserver = globalThis.__ufo_devtool_onUfoPayload;
48
+ if (typeof devToolObserver === 'function') {
49
+ devToolObserver === null || devToolObserver === void 0 || devToolObserver(payload);
50
+ }
49
51
  }
52
+ instance.sendOperationalEvent(payload);
50
53
  }
51
- instance.sendOperationalEvent(payload);
52
- }
54
+ });
53
55
  });
54
56
  });
55
57
  }
@@ -12,17 +12,19 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/
12
12
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
13
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
14
14
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
15
+ var _config = require("../config");
15
16
  var _vcObserver = require("./vc-observer");
16
17
  var _vcObserverNew = _interopRequireDefault(require("./vc-observer-new"));
17
18
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
18
19
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
19
20
  var VCObserverWrapper = /*#__PURE__*/function () {
20
21
  function VCObserverWrapper() {
22
+ var _getConfig;
21
23
  var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
22
24
  (0, _classCallCheck2.default)(this, VCObserverWrapper);
23
25
  this.oldVCObserver = new _vcObserver.VCObserver(opts);
24
26
  this.newVCObserver = null;
25
- var isNewVCObserverEnabled = (0, _platformFeatureFlags.fg)('platform_ufo_vc_observer_new');
27
+ var isNewVCObserverEnabled = (0, _platformFeatureFlags.fg)('platform_ufo_vc_observer_new') || ((_getConfig = (0, _config.getConfig)()) === null || _getConfig === void 0 || (_getConfig = _getConfig.vc) === null || _getConfig === void 0 ? void 0 : _getConfig.enableVCObserverNew);
26
28
  if (isNewVCObserverEnabled) {
27
29
  this.newVCObserver = new _vcObserverNew.default({
28
30
  selectorConfig: opts.selectorConfig
@@ -34,7 +36,9 @@ var VCObserverWrapper = /*#__PURE__*/function () {
34
36
  value: function start(startArg) {
35
37
  var _this$oldVCObserver, _this$newVCObserver;
36
38
  (_this$oldVCObserver = this.oldVCObserver) === null || _this$oldVCObserver === void 0 || _this$oldVCObserver.start(startArg);
37
- (_this$newVCObserver = this.newVCObserver) === null || _this$newVCObserver === void 0 || _this$newVCObserver.start();
39
+ (_this$newVCObserver = this.newVCObserver) === null || _this$newVCObserver === void 0 || _this$newVCObserver.start({
40
+ startTime: startArg.startTime
41
+ });
38
42
  }
39
43
  }, {
40
44
  key: "stop",
@@ -10,7 +10,15 @@ function getAttributeSelector(element, attributeName) {
10
10
  if (!attrValue) {
11
11
  return '';
12
12
  }
13
- return "[".concat(attributeName, "=\"").concat(encodeURIComponent(attrValue), "\"]");
13
+ return "[".concat(attributeName, "=\"").concat(attrValue, "\"]");
14
+ }
15
+ function isValidSelector(selector) {
16
+ try {
17
+ document.querySelector(selector);
18
+ return true;
19
+ } catch (err) {
20
+ return false;
21
+ }
14
22
  }
15
23
  function isSelectorUnique(selector) {
16
24
  return document.querySelectorAll(selector).length === 1;
@@ -18,11 +26,13 @@ function isSelectorUnique(selector) {
18
26
  function getUniqueSelector(selectorConfig, element) {
19
27
  var currentElement = element;
20
28
  var parts = [];
21
- while (currentElement && currentElement.localName !== 'body') {
29
+ var MAX_DEPTH = 3;
30
+ var currentDepth = 0;
31
+ while (currentElement && currentElement.localName !== 'body' && currentDepth <= MAX_DEPTH) {
22
32
  var tagName = currentElement.localName;
23
33
  var selectorPart = tagName;
24
- if (selectorConfig.id && currentElement.id) {
25
- selectorPart += "#".concat(encodeURIComponent(currentElement.id));
34
+ if (selectorConfig.id && currentElement.id && isValidSelector("#".concat(currentElement.id))) {
35
+ selectorPart += "#".concat(currentElement.id);
26
36
  } else if (selectorConfig.dataVC) {
27
37
  selectorPart += getAttributeSelector(currentElement, 'data-vc');
28
38
  } else if (selectorConfig.testId) {
@@ -30,9 +40,11 @@ function getUniqueSelector(selectorConfig, element) {
30
40
  } else if (selectorConfig.role) {
31
41
  selectorPart += getAttributeSelector(currentElement, 'role');
32
42
  } else if (selectorConfig.className && currentElement.className) {
33
- var classNames = Array.from(currentElement.classList).map(encodeURIComponent).join('.');
43
+ var classNames = Array.from(currentElement.classList).join('.');
34
44
  if (classNames) {
35
- selectorPart += ".".concat(classNames);
45
+ if (isValidSelector(".".concat(classNames))) {
46
+ selectorPart += ".".concat(classNames);
47
+ }
36
48
  }
37
49
  }
38
50
  parts.unshift(selectorPart);
@@ -41,6 +53,7 @@ function getUniqueSelector(selectorConfig, element) {
41
53
  return _potentialSelector;
42
54
  }
43
55
  currentElement = currentElement.parentElement;
56
+ currentDepth++;
44
57
  }
45
58
  var potentialSelector = parts.join(' > ').trim();
46
59
  if (!potentialSelector) {
@@ -27,7 +27,6 @@ var VCObserverNew = exports.default = /*#__PURE__*/function () {
27
27
  var _config$selectorConfi,
28
28
  _this = this;
29
29
  (0, _classCallCheck2.default)(this, VCObserverNew);
30
- (0, _defineProperty2.default)(this, "startTime", 0);
31
30
  (0, _defineProperty2.default)(this, "viewportObserver", null);
32
31
  (0, _defineProperty2.default)(this, "windowEventObserver", null);
33
32
  this.entriesTimeline = new _entriesTimeline.default();
@@ -75,10 +74,12 @@ var VCObserverNew = exports.default = /*#__PURE__*/function () {
75
74
  }
76
75
  return (0, _createClass2.default)(VCObserverNew, [{
77
76
  key: "start",
78
- value: function start() {
77
+ value: function start(_ref2) {
79
78
  var _this$viewportObserve, _this$windowEventObse;
79
+ var startTime = _ref2.startTime;
80
80
  (_this$viewportObserve = this.viewportObserver) === null || _this$viewportObserve === void 0 || _this$viewportObserve.start();
81
81
  (_this$windowEventObse = this.windowEventObserver) === null || _this$windowEventObse === void 0 || _this$windowEventObse.start();
82
+ this.entriesTimeline.clear();
82
83
  }
83
84
  }, {
84
85
  key: "stop",
@@ -104,7 +105,9 @@ var VCObserverNew = exports.default = /*#__PURE__*/function () {
104
105
  });
105
106
  _context.next = 6;
106
107
  return calculator_fy25_03.calculate({
107
- orderedEntries: orderedEntries
108
+ orderedEntries: orderedEntries,
109
+ startTime: start,
110
+ stopTime: stop
108
111
  });
109
112
  case 6:
110
113
  fy25_03 = _context.sent;
@@ -24,11 +24,11 @@ var AbstractVCCalculatorBase = exports.default = /*#__PURE__*/function () {
24
24
  var _this = this,
25
25
  _vcDetails$90$t,
26
26
  _vcDetails$;
27
- var orderedEntries, filteredEntries, isVCClean, vcDetails;
27
+ var startTime, stopTime, orderedEntries, filteredEntries, isVCClean, vcDetails;
28
28
  return _regenerator.default.wrap(function _callee$(_context) {
29
29
  while (1) switch (_context.prev = _context.next) {
30
30
  case 0:
31
- orderedEntries = _ref.orderedEntries;
31
+ startTime = _ref.startTime, stopTime = _ref.stopTime, orderedEntries = _ref.orderedEntries;
32
32
  filteredEntries = orderedEntries.filter(function (entry) {
33
33
  return _this.isEntryIncluded(entry);
34
34
  });
@@ -49,6 +49,8 @@ var AbstractVCCalculatorBase = exports.default = /*#__PURE__*/function () {
49
49
  width: (0, _getViewportWidth.default)(),
50
50
  height: (0, _getViewportHeight.default)()
51
51
  },
52
+ startTime: startTime,
53
+ stopTime: stopTime,
52
54
  orderedEntries: filteredEntries,
53
55
  percentiles: [25, 50, 75, 80, 85, 90, 95, 98, 99]
54
56
  });
@@ -228,17 +228,16 @@ function calculateDrawnPixelsRaw(_x, _x2, _x3) {
228
228
  }
229
229
  function _calculateDrawnPixelsRaw() {
230
230
  _calculateDrawnPixelsRaw = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(imageData, scaleFactor, arraySize) {
231
- var data, scaleCompensation, arr, i, color, colorIndex;
231
+ var data, arr, i, color, colorIndex;
232
232
  return _regenerator.default.wrap(function _callee2$(_context2) {
233
233
  while (1) switch (_context2.prev = _context2.next) {
234
234
  case 0:
235
235
  data = imageData.data;
236
- scaleCompensation = Math.round(1 / (scaleFactor * scaleFactor));
237
236
  arr = new Uint32Array(arraySize);
238
237
  i = 0;
239
- case 4:
238
+ case 3:
240
239
  if (!(i < data.length)) {
241
- _context2.next = 12;
240
+ _context2.next = 11;
242
241
  break;
243
242
  }
244
243
  // Check alpha
@@ -250,21 +249,21 @@ function _calculateDrawnPixelsRaw() {
250
249
  // The | operator combines all bits together
251
250
  color = data[i] << 16 | data[i + 1] << 8 | data[i + 2];
252
251
  colorIndex = color - 1;
253
- arr[colorIndex] = (arr[colorIndex] || 0) + scaleCompensation;
252
+ arr[colorIndex] = (arr[colorIndex] || 0) + 1;
254
253
  }
255
254
  if (!(i % 10000 === 0)) {
256
- _context2.next = 9;
255
+ _context2.next = 8;
257
256
  break;
258
257
  }
259
- _context2.next = 9;
258
+ _context2.next = 8;
260
259
  return (0, _taskYield.default)();
261
- case 9:
260
+ case 8:
262
261
  i += 4;
263
- _context2.next = 4;
262
+ _context2.next = 3;
264
263
  break;
265
- case 12:
264
+ case 11:
266
265
  return _context2.abrupt("return", arr);
267
- case 13:
266
+ case 12:
268
267
  case "end":
269
268
  return _context2.stop();
270
269
  }