@atlaskit/react-ufo 2.5.2 → 2.6.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 (56) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/create-experimental-interaction-metrics-payload/package.json +15 -0
  3. package/dist/cjs/config/index.js +40 -18
  4. package/dist/cjs/create-experimental-interaction-metrics-payload/index.js +100 -0
  5. package/dist/cjs/create-payload/common/utils/index.js +65 -2
  6. package/dist/cjs/create-payload/index.js +55 -78
  7. package/dist/cjs/interaction-metrics/common/constants.js +8 -3
  8. package/dist/cjs/interaction-metrics/common/index.js +151 -0
  9. package/dist/cjs/interaction-metrics/index.js +166 -238
  10. package/dist/cjs/interaction-metrics-init/index.js +31 -9
  11. package/dist/cjs/load-hold/UFOLoadHold.js +5 -3
  12. package/dist/cjs/segment/segment.js +9 -8
  13. package/dist/cjs/vc/vc-observer/observers/ssr-placeholders/index.js +21 -4
  14. package/dist/es2019/config/index.js +22 -0
  15. package/dist/es2019/create-experimental-interaction-metrics-payload/index.js +71 -0
  16. package/dist/es2019/create-payload/common/utils/index.js +67 -1
  17. package/dist/es2019/create-payload/index.js +48 -77
  18. package/dist/es2019/interaction-metrics/common/constants.js +7 -2
  19. package/dist/es2019/interaction-metrics/common/index.js +103 -0
  20. package/dist/es2019/interaction-metrics/index.js +91 -131
  21. package/dist/es2019/interaction-metrics-init/index.js +28 -8
  22. package/dist/es2019/load-hold/UFOLoadHold.js +5 -3
  23. package/dist/es2019/segment/segment.js +8 -11
  24. package/dist/es2019/vc/vc-observer/observers/ssr-placeholders/index.js +21 -4
  25. package/dist/esm/config/index.js +39 -18
  26. package/dist/esm/create-experimental-interaction-metrics-payload/index.js +90 -0
  27. package/dist/esm/create-payload/common/utils/index.js +62 -1
  28. package/dist/esm/create-payload/index.js +53 -78
  29. package/dist/esm/interaction-metrics/common/constants.js +7 -2
  30. package/dist/esm/interaction-metrics/common/index.js +132 -0
  31. package/dist/esm/interaction-metrics/index.js +86 -158
  32. package/dist/esm/interaction-metrics-init/index.js +28 -8
  33. package/dist/esm/load-hold/UFOLoadHold.js +5 -3
  34. package/dist/esm/segment/segment.js +9 -8
  35. package/dist/esm/vc/vc-observer/observers/ssr-placeholders/index.js +21 -4
  36. package/dist/types/common/common/types.d.ts +6 -4
  37. package/dist/types/config/index.d.ts +6 -0
  38. package/dist/types/create-experimental-interaction-metrics-payload/index.d.ts +16 -0
  39. package/dist/types/create-payload/common/utils/index.d.ts +9 -0
  40. package/dist/types/create-payload/index.d.ts +13 -5660
  41. package/dist/types/interaction-context/index.d.ts +1 -0
  42. package/dist/types/interaction-metrics/common/constants.d.ts +32 -3
  43. package/dist/types/interaction-metrics/common/index.d.ts +16 -0
  44. package/dist/types/interaction-metrics/index.d.ts +1 -17
  45. package/dist/types/load-hold/UFOLoadHold.d.ts +1 -2
  46. package/dist/types-ts4.5/common/common/types.d.ts +6 -4
  47. package/dist/types-ts4.5/config/index.d.ts +6 -0
  48. package/dist/types-ts4.5/create-experimental-interaction-metrics-payload/index.d.ts +16 -0
  49. package/dist/types-ts4.5/create-payload/common/utils/index.d.ts +9 -0
  50. package/dist/types-ts4.5/create-payload/index.d.ts +13 -5660
  51. package/dist/types-ts4.5/interaction-context/index.d.ts +1 -0
  52. package/dist/types-ts4.5/interaction-metrics/common/constants.d.ts +32 -3
  53. package/dist/types-ts4.5/interaction-metrics/common/index.d.ts +16 -0
  54. package/dist/types-ts4.5/interaction-metrics/index.d.ts +1 -17
  55. package/dist/types-ts4.5/load-hold/UFOLoadHold.d.ts +1 -2
  56. package/package.json +6 -2
@@ -5,7 +5,9 @@ var _typeof = require("@babel/runtime/helpers/typeof");
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
+ exports.createExperimentalMetricsPayload = createExperimentalMetricsPayload;
8
9
  exports.createPayloads = createPayloads;
10
+ exports.getUfoNameOverride = getUfoNameOverride;
9
11
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
10
12
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
13
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
@@ -14,8 +16,10 @@ var _bowserUltralight = _interopRequireDefault(require("bowser-ultralight"));
14
16
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
15
17
  var _additionalPayload = require("../additional-payload");
16
18
  var bundleEvalTiming = _interopRequireWildcard(require("../bundle-eval-timing"));
19
+ var _coinflip = _interopRequireDefault(require("../coinflip"));
17
20
  var _constants = require("../common/constants");
18
21
  var _config = require("../config");
22
+ var _createExperimentalInteractionMetricsPayload = require("../create-experimental-interaction-metrics-payload");
19
23
  var _customTimings = require("../custom-timings");
20
24
  var _globalErrorHandler = require("../global-error-handler");
21
25
  var _hiddenTiming = require("../hidden-timing");
@@ -24,7 +28,6 @@ var _interactionMetrics = require("../interaction-metrics");
24
28
  var resourceTiming = _interopRequireWildcard(require("../resource-timing"));
25
29
  var _roundNumber = require("../round-number");
26
30
  var ssr = _interopRequireWildcard(require("../ssr"));
27
- var _vc = require("../vc");
28
31
  var _utils = require("./common/utils");
29
32
  var _excluded = ["labelStack", "time"],
30
33
  _excluded2 = ["stopTime", "labelStack"],
@@ -46,7 +49,6 @@ function getUfoNameOverride(interaction) {
46
49
  }
47
50
  }
48
51
  return ufoName;
49
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
52
  } catch (e) {
51
53
  return ufoName;
52
54
  }
@@ -81,11 +83,6 @@ var getPageVisibilityUpToTTI = function getPageVisibilityUpToTTI(interaction) {
81
83
  var bm3EndTimeOrInteractionEndTime = getBm3EndTimeOrFallbackValue(interaction);
82
84
  return (0, _hiddenTiming.getPageVisibilityState)(start, bm3EndTimeOrInteractionEndTime);
83
85
  };
84
- var getPageVisibilityUpToTTAI = function getPageVisibilityUpToTTAI(interaction) {
85
- var start = interaction.start,
86
- end = interaction.end;
87
- return (0, _hiddenTiming.getPageVisibilityState)(start, end);
88
- };
89
86
  var getVisibilityStateFromPerformance = function getVisibilityStateFromPerformance(stop) {
90
87
  try {
91
88
  var results = performance.getEntriesByType('visibility-state');
@@ -131,7 +128,7 @@ var getMoreAccuratePageVisibilityUpToTTI = function getMoreAccuratePageVisibilit
131
128
  return old;
132
129
  };
133
130
  var getMoreAccuratePageVisibilityUpToTTAI = function getMoreAccuratePageVisibilityUpToTTAI(interaction) {
134
- var old = getPageVisibilityUpToTTAI(interaction);
131
+ var old = (0, _utils.getPageVisibilityUpToTTAI)(interaction);
135
132
  var buffered = getVisibilityStateFromPerformance(interaction.end);
136
133
  if (!buffered) {
137
134
  return old;
@@ -141,15 +138,6 @@ var getMoreAccuratePageVisibilityUpToTTAI = function getMoreAccuratePageVisibili
141
138
  }
142
139
  return old;
143
140
  };
144
- var getInteractionStatus = function getInteractionStatus(interaction) {
145
- var originalInteractionStatus = interaction.abortReason ? 'ABORTED' : 'SUCCEEDED';
146
- var hasBm3TTI = interaction.apdex.length > 0;
147
- var overrideStatus = hasBm3TTI ? 'SUCCEEDED' : originalInteractionStatus;
148
- return {
149
- originalInteractionStatus: originalInteractionStatus,
150
- overrideStatus: overrideStatus
151
- };
152
- };
153
141
  var getResourceTimings = function getResourceTimings(start, end) {
154
142
  var _resourceTiming$getRe;
155
143
  return (_resourceTiming$getRe = resourceTiming.getResourceTimings(start, end)) !== null && _resourceTiming$getRe !== void 0 ? _resourceTiming$getRe : undefined;
@@ -178,42 +166,6 @@ var getPaintMetrics = function getPaintMetrics(type) {
178
166
  });
179
167
  return metrics;
180
168
  };
181
- var getVCMetrics = function getVCMetrics(interaction) {
182
- var _config$vc, _interaction$apdex;
183
- var config = (0, _config.getConfig)();
184
- if (!(config !== null && config !== void 0 && (_config$vc = config.vc) !== null && _config$vc !== void 0 && _config$vc.enabled)) {
185
- return {};
186
- }
187
- if (interaction.type !== 'page_load' && interaction.type !== 'transition') {
188
- return {};
189
- }
190
- var ssr = interaction.type === 'page_load' && config !== null && config !== void 0 && config.ssr ? {
191
- ssr: getSSRDoneTimeValue(config)
192
- } : null;
193
- _interactionMetrics.postInteractionLog.setVCObserverSSRConfig(ssr);
194
- var tti = (_interaction$apdex = interaction.apdex) === null || _interaction$apdex === void 0 || (_interaction$apdex = _interaction$apdex[0]) === null || _interaction$apdex === void 0 ? void 0 : _interaction$apdex.stopTime;
195
- var prefix = 'ufo';
196
- var result = (0, _vc.getVCObserver)().getVCResult(_objectSpread({
197
- start: interaction.start,
198
- stop: interaction.end,
199
- tti: tti,
200
- prefix: prefix,
201
- vc: interaction.vc
202
- }, ssr));
203
- _interactionMetrics.postInteractionLog.setLastInteractionFinishVCResult(result);
204
- var VC = result === null || result === void 0 ? void 0 : result['metrics:vc'];
205
- if (!VC || !(result !== null && result !== void 0 && result["".concat(prefix, ":vc:clean")])) {
206
- return result;
207
- }
208
- var interactionStatus = getInteractionStatus(interaction);
209
- var pageVisibilityUpToTTAI = getPageVisibilityUpToTTAI(interaction);
210
- if (interactionStatus.originalInteractionStatus !== 'SUCCEEDED' || pageVisibilityUpToTTAI !== 'visible') {
211
- return result;
212
- }
213
- return _objectSpread(_objectSpread({}, result), {}, {
214
- 'metric:vc90': VC['90']
215
- });
216
- };
217
169
  var getNavigationMetrics = function getNavigationMetrics(type) {
218
170
  if (type !== 'page_load') {
219
171
  return {};
@@ -261,14 +213,13 @@ var getNavigationMetrics = function getNavigationMetrics(type) {
261
213
  };
262
214
  };
263
215
  var getPPSMetrics = function getPPSMetrics(interaction) {
264
- var _interaction$apdex2;
216
+ var _interaction$apdex;
265
217
  var start = interaction.start,
266
218
  end = interaction.end;
267
219
  var config = (0, _config.getConfig)();
268
- var interactionStatus = getInteractionStatus(interaction);
269
- var pageVisibilityUpToTTAI = getPageVisibilityUpToTTAI(interaction);
270
- var tti = (_interaction$apdex2 = interaction.apdex) === null || _interaction$apdex2 === void 0 || (_interaction$apdex2 = _interaction$apdex2[0]) === null || _interaction$apdex2 === void 0 ? void 0 : _interaction$apdex2.stopTime;
271
- var ttai = interactionStatus.originalInteractionStatus === 'SUCCEEDED' && pageVisibilityUpToTTAI === 'visible' ? Math.round(end - start) : undefined;
220
+ var pageVisibilityUpToTTAI = (0, _utils.getPageVisibilityUpToTTAI)(interaction);
221
+ var tti = (_interaction$apdex = interaction.apdex) === null || _interaction$apdex === void 0 || (_interaction$apdex = _interaction$apdex[0]) === null || _interaction$apdex === void 0 ? void 0 : _interaction$apdex.stopTime;
222
+ var ttai = !interaction.abortReason && pageVisibilityUpToTTAI === 'visible' ? Math.round(end - start) : undefined;
272
223
  var PPSMetricsAtTTI = tti !== undefined ? (0, _additionalPayload.getLighthouseMetrics)({
273
224
  start: start,
274
225
  stop: tti
@@ -358,13 +309,13 @@ function optimizeCustomData(interaction) {
358
309
  for (var _i = 0, _Object$entries = Object.entries(currentValue.custom || {}); _i < _Object$entries.length; _i++) {
359
310
  var _result$get$data2, _result$get2;
360
311
  var _Object$entries$_i = (0, _slicedToArray2.default)(_Object$entries[_i], 2),
361
- _key = _Object$entries$_i[0],
312
+ key = _Object$entries$_i[0],
362
313
  value = _Object$entries$_i[1];
363
314
  var label = (0, _utils.stringifyLabelStackFully)([]);
364
315
  var labelValue = (_result$get$data2 = (_result$get2 = result.get(label)) === null || _result$get2 === void 0 ? void 0 : _result$get2.data) !== null && _result$get$data2 !== void 0 ? _result$get$data2 : {};
365
316
  result.set(label, {
366
317
  labelStack: (0, _utils.optimizeLabelStack)([]),
367
- data: Object.assign(labelValue, (0, _defineProperty2.default)({}, _key, value))
318
+ data: Object.assign(labelValue, (0, _defineProperty2.default)({}, key, value))
368
319
  });
369
320
  }
370
321
  return result;
@@ -602,10 +553,6 @@ function getBm3TrackerTimings(interaction) {
602
553
  legacyMetrics: legacyMetrics
603
554
  };
604
555
  }
605
- function getSSRDoneTimeValue(config) {
606
- var _config$ssr, _config$ssr2;
607
- return config !== null && config !== void 0 && (_config$ssr = config.ssr) !== null && _config$ssr !== void 0 && _config$ssr.getSSRDoneTime ? config === null || config === void 0 || (_config$ssr2 = config.ssr) === null || _config$ssr2 === void 0 ? void 0 : _config$ssr2.getSSRDoneTime() : ssr.getSSRDoneTime();
608
- }
609
556
  function getPayloadSize(payload) {
610
557
  return Math.round(new TextEncoder().encode(JSON.stringify(payload)).length / 1024);
611
558
  }
@@ -648,13 +595,15 @@ function getStylesheetMetrics() {
648
595
  return {};
649
596
  }
650
597
  }
598
+ var regularTTAI;
599
+ var expTTAI;
651
600
  function getErrorCounts(interaction) {
652
601
  return {
653
602
  'ufo:errors:globalCount': (0, _globalErrorHandler.getGlobalErrorCount)(),
654
603
  'ufo:errors:count': interaction.errors.length
655
604
  };
656
605
  }
657
- function createInteractionMetricsPayload(interaction, interactionId) {
606
+ function createInteractionMetricsPayload(interaction, interactionId, experimental) {
658
607
  var _window$location, _config$additionalPay;
659
608
  var interactionPayloadStart = performance.now();
660
609
  var config = (0, _config.getConfig)();
@@ -674,7 +623,7 @@ function createInteractionMetricsPayload(interaction, interactionId) {
674
623
  isPreviousInteractionAborted = interaction.isPreviousInteractionAborted,
675
624
  abortedByInteractionName = interaction.abortedByInteractionName;
676
625
  var pageVisibilityAtTTI = getPageVisibilityUpToTTI(interaction);
677
- var pageVisibilityAtTTAI = getPageVisibilityUpToTTAI(interaction);
626
+ var pageVisibilityAtTTAI = (0, _utils.getPageVisibilityUpToTTAI)(interaction);
678
627
  var segments = config.killswitchNestedSegments ? [] : knownSegments;
679
628
  var segmentTree = _constants.REACT_UFO_VERSION === '2.0.0' ? (0, _utils.buildSegmentTree)(segments.map(function (segment) {
680
629
  return segment.labelStack;
@@ -689,23 +638,23 @@ function createInteractionMetricsPayload(interaction, interactionId) {
689
638
  } : {};
690
639
  // Page Load
691
640
  var getPageLoadInteractionMetrics = function getPageLoadInteractionMetrics() {
692
- var _config$ssr3;
641
+ var _config$ssr;
693
642
  if (!isPageLoad) {
694
643
  return {};
695
644
  }
696
645
  var config = (0, _config.getConfig)();
697
- var SSRDoneTimeValue = getSSRDoneTimeValue(config);
646
+ var SSRDoneTimeValue = (0, _utils.getSSRDoneTimeValue)(config);
698
647
  var SSRDoneTime = SSRDoneTimeValue !== undefined ? {
699
648
  SSRDoneTime: Math.round(SSRDoneTimeValue)
700
649
  } : {};
701
650
  return _objectSpread(_objectSpread({}, SSRDoneTime), {}, {
702
651
  isBM3ConfigSSRDoneAsFmp: interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp,
703
- isUFOConfigSSRDoneAsFmp: interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp || !!(config !== null && config !== void 0 && (_config$ssr3 = config.ssr) !== null && _config$ssr3 !== void 0 && _config$ssr3.getSSRDoneTime)
652
+ isUFOConfigSSRDoneAsFmp: interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp || !!(config !== null && config !== void 0 && (_config$ssr = config.ssr) !== null && _config$ssr !== void 0 && _config$ssr.getSSRDoneTime)
704
653
  });
705
654
  };
706
655
  // Detailed payload. Page visibility = visible
707
656
  var getDetailedInteractionMetrics = function getDetailedInteractionMetrics() {
708
- if (window.__UFO_COMPACT_PAYLOAD__ || !isDetailedPayload) {
657
+ if (experimental || window.__UFO_COMPACT_PAYLOAD__ || !isDetailedPayload) {
709
658
  return {};
710
659
  }
711
660
  var spans = [].concat((0, _toConsumableArray2.default)(interaction.spans), (0, _toConsumableArray2.default)(_interactionMetrics.interactionSpans));
@@ -720,7 +669,7 @@ function createInteractionMetricsPayload(interaction, interactionId) {
720
669
  }),
721
670
  holdActive: (0, _toConsumableArray2.default)(interaction.holdActive.values()),
722
671
  redirects: optimizeRedirects(interaction.redirects, start),
723
- holdInfo: optimizeHoldInfo(interaction.holdInfo, start),
672
+ holdInfo: optimizeHoldInfo(experimental ? interaction.holdExpInfo : interaction.holdInfo, start),
724
673
  spans: optimizeSpans(spans, start),
725
674
  requestInfo: optimizeRequestInfo(interaction.requestInfo, start),
726
675
  customTimings: optimizeCustomTimings(interaction.customTimings, start),
@@ -730,16 +679,21 @@ function createInteractionMetricsPayload(interaction, interactionId) {
730
679
  };
731
680
  // Page load & detailed payload
732
681
  var getPageLoadDetailedInteractionMetrics = function getPageLoadDetailedInteractionMetrics() {
733
- var _config$ssr4;
682
+ var _config$ssr2;
734
683
  if (!isPageLoad || !isDetailedPayload) {
735
684
  return {};
736
685
  }
737
686
  var config = (0, _config.getConfig)();
738
687
  return {
739
688
  initialPageLoadExtraTimings: objectToArray(initialPageLoadExtraTiming.getTimings()),
740
- SSRTimings: config !== null && config !== void 0 && (_config$ssr4 = config.ssr) !== null && _config$ssr4 !== void 0 && _config$ssr4.getSSRTimings ? config.ssr.getSSRTimings() : objectToArray(ssr.getSSRTimings())
689
+ SSRTimings: config !== null && config !== void 0 && (_config$ssr2 = config.ssr) !== null && _config$ssr2 !== void 0 && _config$ssr2.getSSRTimings ? config.ssr.getSSRTimings() : objectToArray(ssr.getSSRTimings())
741
690
  };
742
691
  };
692
+ if (experimental) {
693
+ expTTAI = (0, _utils.getTTAI)(interaction);
694
+ } else {
695
+ regularTTAI = (0, _utils.getTTAI)(interaction);
696
+ }
743
697
  var newUFOName = (0, _utils.sanitizeUfoName)(ufoName);
744
698
  var payload = {
745
699
  actionSubject: 'experience',
@@ -748,7 +702,7 @@ function createInteractionMetricsPayload(interaction, interactionId) {
748
702
  source: 'measured',
749
703
  tags: ['observability'],
750
704
  attributes: {
751
- properties: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
705
+ properties: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
752
706
  // basic
753
707
  'event:hostname': ((_window$location = window.location) === null || _window$location === void 0 ? void 0 : _window$location.hostname) || 'unknown',
754
708
  'event:product': config.product,
@@ -760,10 +714,10 @@ function createInteractionMetricsPayload(interaction, interactionId) {
760
714
  payloadSource: 'platform'
761
715
  },
762
716
  'event:region': config.region || 'unknown',
763
- 'experience:key': 'custom.interaction-metrics',
717
+ 'experience:key': experimental ? 'custom.experimental-interaction-metrics' : 'custom.interaction-metrics',
764
718
  'experience:name': newUFOName
765
- }, getBrowserMetadata()), getSSRProperties(type)), getPPSMetrics(interaction)), getPaintMetrics(type)), getNavigationMetrics(type)), getVCMetrics(interaction)), (_config$additionalPay = config.additionalPayloadData) === null || _config$additionalPay === void 0 ? void 0 : _config$additionalPay.call(config, interaction)), getTracingContextData(interaction)), getStylesheetMetrics()), getErrorCounts(interaction)), {}, {
766
- interactionMetrics: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
719
+ }, getBrowserMetadata()), getSSRProperties(type)), getPPSMetrics(interaction)), getPaintMetrics(type)), getNavigationMetrics(type)), (0, _utils.getVCMetrics)(interaction)), experimental ? (0, _createExperimentalInteractionMetricsPayload.getExperimentalVCMetrics)(interaction) : undefined), (_config$additionalPay = config.additionalPayloadData) === null || _config$additionalPay === void 0 ? void 0 : _config$additionalPay.call(config, interaction)), getTracingContextData(interaction)), getStylesheetMetrics()), getErrorCounts(interaction)), {}, {
720
+ interactionMetrics: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
767
721
  namePrefix: config.namePrefix || '',
768
722
  segmentPrefix: config.segmentPrefix || '',
769
723
  interactionId: interactionId,
@@ -794,11 +748,18 @@ function createInteractionMetricsPayload(interaction, interactionId) {
794
748
  marks: optimizeMarks(interaction.marks),
795
749
  customData: optimizeCustomData(interaction),
796
750
  reactProfilerTimings: optimizeReactProfilerTimings(interaction.reactProfilerTimings, start)
797
- }, labelStack), getPageLoadInteractionMetrics()), getDetailedInteractionMetrics()), getPageLoadDetailedInteractionMetrics()), getBm3TrackerTimings(interaction)),
751
+ }, labelStack), getPageLoadInteractionMetrics()), getDetailedInteractionMetrics()), getPageLoadDetailedInteractionMetrics()), getBm3TrackerTimings(interaction)), {}, {
752
+ 'metric:ttai': experimental ? regularTTAI || expTTAI : undefined,
753
+ 'metric:experimental:ttai': expTTAI
754
+ }),
798
755
  'ufo:payloadTime': (0, _roundNumber.roundEpsilon)(performance.now() - interactionPayloadStart)
799
756
  })
800
757
  }
801
758
  };
759
+ if (experimental) {
760
+ regularTTAI = undefined;
761
+ expTTAI = undefined;
762
+ }
802
763
  payload.attributes.properties['event:sizeInKb'] = getPayloadSize(payload.attributes.properties);
803
764
  return payload;
804
765
  }
@@ -809,4 +770,20 @@ function createPayloads(interactionId, interaction) {
809
770
  });
810
771
  var interactionMetricsPayload = createInteractionMetricsPayload(modifiedInteraction, interactionId);
811
772
  return [interactionMetricsPayload];
773
+ }
774
+ function createExperimentalMetricsPayload(interactionId, interaction) {
775
+ var config = (0, _config.getConfig)();
776
+ if (!config) {
777
+ throw Error('UFO Configuration not provided');
778
+ }
779
+ var ufoName = (0, _utils.sanitizeUfoName)(interaction.ufoName);
780
+ var rate = (0, _config.getExperimentalInteractionRate)(ufoName, interaction.type);
781
+ if (!(0, _coinflip.default)(rate)) {
782
+ return null;
783
+ }
784
+ var pageVisibilityState = (0, _hiddenTiming.getPageVisibilityState)(interaction.start, interaction.end);
785
+ if (pageVisibilityState !== 'visible') {
786
+ return null;
787
+ }
788
+ return createInteractionMetricsPayload(interaction, interactionId, true);
812
789
  }
@@ -3,6 +3,11 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = void 0;
7
- var interactions = new Map();
8
- var _default = exports.default = interactions;
6
+ exports.segmentObservers = exports.segmentCache = exports.moduleLoadingRequests = exports.interactions = exports.interactionQueue = exports.CLEANUP_TIMEOUT_AFTER_APDEX = exports.CLEANUP_TIMEOUT = void 0;
7
+ var interactions = exports.interactions = new Map();
8
+ var CLEANUP_TIMEOUT = exports.CLEANUP_TIMEOUT = 60 * 1000;
9
+ var CLEANUP_TIMEOUT_AFTER_APDEX = exports.CLEANUP_TIMEOUT_AFTER_APDEX = 15 * 1000;
10
+ var interactionQueue = exports.interactionQueue = [];
11
+ var segmentCache = exports.segmentCache = new Map();
12
+ var segmentObservers = exports.segmentObservers = [];
13
+ var moduleLoadingRequests = exports.moduleLoadingRequests = {};
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.addHoldCriterion = addHoldCriterion;
8
+ exports.addSegmentObserver = addSegmentObserver;
9
+ exports.callCancelCallbacks = callCancelCallbacks;
10
+ exports.callCleanUpCallbacks = callCleanUpCallbacks;
11
+ exports.getSegmentCacheKey = getSegmentCacheKey;
12
+ exports.isPerformanceTracingEnabled = isPerformanceTracingEnabled;
13
+ exports.isSegmentLabel = isSegmentLabel;
14
+ exports.labelStackToIdString = labelStackToIdString;
15
+ exports.labelStackToString = labelStackToString;
16
+ exports.pushToQueue = void 0;
17
+ exports.reactProfilerTimingMap = reactProfilerTimingMap;
18
+ exports.removeHoldCriterion = removeHoldCriterion;
19
+ exports.removeSegmentObserver = removeSegmentObserver;
20
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
21
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
22
+ var _config = require("../../config");
23
+ var _constants = require("./constants");
24
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
25
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
26
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
27
+ function isPerformanceTracingEnabled() {
28
+ var _getConfig;
29
+ return ((_getConfig = (0, _config.getConfig)()) === null || _getConfig === void 0 ? void 0 : _getConfig.enableAdditionalPerformanceMarks) || window.__REACT_UFO_ENABLE_PERF_TRACING || process.env.NODE_ENV !== 'production';
30
+ }
31
+ function labelStackToString(labelStack, name) {
32
+ var _stack$map;
33
+ var stack = (0, _toConsumableArray2.default)(labelStack !== null && labelStack !== void 0 ? labelStack : []);
34
+ if (name) {
35
+ stack.push({
36
+ name: name
37
+ });
38
+ }
39
+ return (_stack$map = stack.map(function (l) {
40
+ return l.name;
41
+ })) === null || _stack$map === void 0 ? void 0 : _stack$map.join('/');
42
+ }
43
+ function labelStackToIdString(labelStack) {
44
+ var _labelStack$map;
45
+ return labelStack === null || labelStack === void 0 || (_labelStack$map = labelStack.map(function (l) {
46
+ return 'segmentId' in l ? "".concat(l.name, ":").concat(l.segmentId) : "".concat(l.name);
47
+ })) === null || _labelStack$map === void 0 ? void 0 : _labelStack$map.join('/');
48
+ }
49
+ function addSegmentObserver(observer) {
50
+ _constants.segmentObservers.push(observer);
51
+ var _iterator = _createForOfIteratorHelper(_constants.segmentCache.values()),
52
+ _step;
53
+ try {
54
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
55
+ var segmentInfo = _step.value;
56
+ observer.onAdd(segmentInfo);
57
+ }
58
+ } catch (err) {
59
+ _iterator.e(err);
60
+ } finally {
61
+ _iterator.f();
62
+ }
63
+ }
64
+ function removeSegmentObserver(observer) {
65
+ var index = _constants.segmentObservers.findIndex(function (obs) {
66
+ return obs === observer;
67
+ });
68
+ if (index !== -1) {
69
+ _constants.segmentObservers.splice(index, 1);
70
+ }
71
+ }
72
+ function addHoldCriterion(id, labelStack, name, startTime) {
73
+ var _window$__CRITERION__;
74
+ if (!((_window$__CRITERION__ = window.__CRITERION__) !== null && _window$__CRITERION__ !== void 0 && _window$__CRITERION__.addUFOHold)) {
75
+ return;
76
+ }
77
+ window.__CRITERION__.addUFOHold(id, labelStackToString(labelStack), name, startTime);
78
+ }
79
+ function removeHoldCriterion(id) {
80
+ var _window$__CRITERION__2;
81
+ if (!((_window$__CRITERION__2 = window.__CRITERION__) !== null && _window$__CRITERION__2 !== void 0 && _window$__CRITERION__2.removeUFOHold)) {
82
+ return;
83
+ }
84
+ window.__CRITERION__.removeUFOHold(id);
85
+ }
86
+ var pushToQueue = exports.pushToQueue = function pushToQueue(id, data) {
87
+ _constants.interactionQueue.push({
88
+ id: id,
89
+ data: data
90
+ });
91
+ };
92
+ function callCleanUpCallbacks(interaction) {
93
+ interaction.cleanupCallbacks.reverse().forEach(function (cleanUpCallback) {
94
+ cleanUpCallback();
95
+ });
96
+ }
97
+ function reactProfilerTimingMap(data) {
98
+ var profilerTimingMap = new Map();
99
+ data.reactProfilerTimings.forEach(function (profilerTiming) {
100
+ var labelStackId = labelStackToIdString(profilerTiming.labelStack);
101
+ if (labelStackId) {
102
+ var _profilerTimingMap$ge, _timing$start, _timing$end;
103
+ var timing = (_profilerTimingMap$ge = profilerTimingMap.get(labelStackId)) !== null && _profilerTimingMap$ge !== void 0 ? _profilerTimingMap$ge : {
104
+ labelStack: profilerTiming.labelStack
105
+ };
106
+ timing.start = profilerTiming.startTime < ((_timing$start = timing.start) !== null && _timing$start !== void 0 ? _timing$start : Number.MAX_SAFE_INTEGER) ? profilerTiming.startTime : timing.start;
107
+ timing.end = profilerTiming.commitTime > ((_timing$end = timing.end) !== null && _timing$end !== void 0 ? _timing$end : Number.MIN_SAFE_INTEGER) ? profilerTiming.commitTime : timing.end;
108
+ profilerTimingMap.set(labelStackId, timing);
109
+ }
110
+ });
111
+ try {
112
+ // for Firefox 102 and older
113
+ var _iterator2 = _createForOfIteratorHelper(profilerTimingMap.entries()),
114
+ _step2;
115
+ try {
116
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
117
+ var _step2$value = (0, _slicedToArray2.default)(_step2.value, 2),
118
+ _step2$value$ = _step2$value[1],
119
+ labelStack = _step2$value$.labelStack,
120
+ start = _step2$value$.start,
121
+ end = _step2$value$.end;
122
+ performance.measure("\uD83D\uDEF8 ".concat(labelStackToString(labelStack), " [segment_ttai]"), {
123
+ start: start,
124
+ end: end
125
+ });
126
+ }
127
+ } catch (err) {
128
+ _iterator2.e(err);
129
+ } finally {
130
+ _iterator2.f();
131
+ }
132
+ } catch (e) {
133
+ // do nothing
134
+ }
135
+ }
136
+ function callCancelCallbacks(interaction) {
137
+ interaction.cancelCallbacks.reverse().forEach(function (cancelCallback) {
138
+ cancelCallback();
139
+ });
140
+ }
141
+ function isSegmentLabel(obj) {
142
+ return obj && typeof obj.name === 'string' && typeof obj.segmentId === 'string';
143
+ }
144
+ function getSegmentCacheKey(labelStack) {
145
+ return labelStack.map(function (l) {
146
+ if (isSegmentLabel(l)) {
147
+ return "".concat(l.name, "_").concat(l.segmentId);
148
+ }
149
+ return l.name;
150
+ }).join('|');
151
+ }