@atlaskit/react-ufo 2.7.0 → 2.8.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 (53) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/config/index.js +18 -40
  3. package/dist/cjs/create-payload/common/utils/index.js +2 -66
  4. package/dist/cjs/create-payload/index.js +78 -55
  5. package/dist/cjs/interaction-metrics/common/constants.js +3 -8
  6. package/dist/cjs/interaction-metrics/index.js +238 -166
  7. package/dist/cjs/interaction-metrics-init/index.js +9 -31
  8. package/dist/cjs/load-hold/UFOLoadHold.js +3 -5
  9. package/dist/cjs/segment/segment.js +8 -9
  10. package/dist/es2019/config/index.js +0 -22
  11. package/dist/es2019/create-payload/common/utils/index.js +1 -68
  12. package/dist/es2019/create-payload/index.js +77 -48
  13. package/dist/es2019/interaction-metrics/common/constants.js +2 -7
  14. package/dist/es2019/interaction-metrics/index.js +131 -91
  15. package/dist/es2019/interaction-metrics-init/index.js +8 -28
  16. package/dist/es2019/load-hold/UFOLoadHold.js +3 -5
  17. package/dist/es2019/segment/segment.js +11 -8
  18. package/dist/esm/config/index.js +18 -39
  19. package/dist/esm/create-payload/common/utils/index.js +1 -63
  20. package/dist/esm/create-payload/index.js +78 -53
  21. package/dist/esm/interaction-metrics/common/constants.js +2 -7
  22. package/dist/esm/interaction-metrics/index.js +158 -86
  23. package/dist/esm/interaction-metrics-init/index.js +8 -28
  24. package/dist/esm/load-hold/UFOLoadHold.js +3 -5
  25. package/dist/esm/segment/segment.js +8 -9
  26. package/dist/types/common/common/types.d.ts +4 -6
  27. package/dist/types/config/index.d.ts +0 -6
  28. package/dist/types/create-payload/common/utils/index.d.ts +0 -9
  29. package/dist/types/create-payload/index.d.ts +5660 -13
  30. package/dist/types/interaction-context/index.d.ts +0 -1
  31. package/dist/types/interaction-metrics/common/constants.d.ts +3 -32
  32. package/dist/types/interaction-metrics/index.d.ts +17 -1
  33. package/dist/types/load-hold/UFOLoadHold.d.ts +2 -1
  34. package/dist/types-ts4.5/common/common/types.d.ts +4 -6
  35. package/dist/types-ts4.5/config/index.d.ts +0 -6
  36. package/dist/types-ts4.5/create-payload/common/utils/index.d.ts +0 -9
  37. package/dist/types-ts4.5/create-payload/index.d.ts +5660 -13
  38. package/dist/types-ts4.5/interaction-context/index.d.ts +0 -1
  39. package/dist/types-ts4.5/interaction-metrics/common/constants.d.ts +3 -32
  40. package/dist/types-ts4.5/interaction-metrics/index.d.ts +17 -1
  41. package/dist/types-ts4.5/load-hold/UFOLoadHold.d.ts +2 -1
  42. package/package.json +2 -3
  43. package/create-experimental-interaction-metrics-payload/package.json +0 -15
  44. package/dist/cjs/create-experimental-interaction-metrics-payload/index.js +0 -100
  45. package/dist/cjs/interaction-metrics/common/index.js +0 -151
  46. package/dist/es2019/create-experimental-interaction-metrics-payload/index.js +0 -71
  47. package/dist/es2019/interaction-metrics/common/index.js +0 -103
  48. package/dist/esm/create-experimental-interaction-metrics-payload/index.js +0 -90
  49. package/dist/esm/interaction-metrics/common/index.js +0 -132
  50. package/dist/types/create-experimental-interaction-metrics-payload/index.d.ts +0 -16
  51. package/dist/types/interaction-metrics/common/index.d.ts +0 -16
  52. package/dist/types-ts4.5/create-experimental-interaction-metrics-payload/index.d.ts +0 -16
  53. package/dist/types-ts4.5/interaction-metrics/common/index.d.ts +0 -16
@@ -1,22 +1,30 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
2
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
3
4
  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; }
4
5
  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) { _defineProperty(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; }
6
+ 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; } } }; }
7
+ 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; } }
8
+ 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; }
5
9
  import { v4 as createUUID } from 'uuid';
6
10
  import coinflip from '../coinflip';
7
11
  import { getAwaitBM3TTIList, getCapabilityRate, getConfig } from '../config';
8
- import { experimentalVC, getExperimentalVCMetrics, onExperimentalInteractionComplete } from '../create-experimental-interaction-metrics-payload';
9
- import { getTTAI, postInteractionLog } from '../create-payload/common/utils';
10
12
  import { clearActiveTrace } from '../experience-trace-id-context';
11
13
  import { allFeatureFlagsAccessed, currentFeatureFlagsAccessed } from '../feature-flags-accessed';
12
14
  import { getInteractionId } from '../interaction-id-context';
13
15
  import { getVCObserver } from '../vc';
14
- import { addHoldCriterion, addSegmentObserver, callCancelCallbacks, callCleanUpCallbacks, getSegmentCacheKey, isPerformanceTracingEnabled, labelStackToString, pushToQueue, reactProfilerTimingMap, removeHoldCriterion, removeSegmentObserver } from './common';
15
- import { CLEANUP_TIMEOUT, CLEANUP_TIMEOUT_AFTER_APDEX, interactionQueue, interactions, moduleLoadingRequests, segmentCache, segmentObservers } from './common/constants';
16
+ import interactions from './common/constants';
17
+ import PostInteractionLog from './post-interaction-log';
16
18
  var PreviousInteractionLog = {
17
19
  name: undefined,
18
20
  isAborted: undefined
19
21
  };
22
+ export var postInteractionLog = new PostInteractionLog();
23
+ var interactionQueue = [];
24
+ var segmentCache = new Map();
25
+ var CLEANUP_TIMEOUT = 60 * 1000;
26
+ var CLEANUP_TIMEOUT_AFTER_APDEX = 15 * 1000;
27
+ var segmentObservers = [];
20
28
  export function getActiveInteraction() {
21
29
  var interactionId = getInteractionId();
22
30
  if (!interactionId.current) {
@@ -24,6 +32,51 @@ export function getActiveInteraction() {
24
32
  }
25
33
  return interactions.get(interactionId.current);
26
34
  }
35
+ function isPerformanceTracingEnabled() {
36
+ var _getConfig;
37
+ return ((_getConfig = getConfig()) === null || _getConfig === void 0 ? void 0 : _getConfig.enableAdditionalPerformanceMarks) || window.__REACT_UFO_ENABLE_PERF_TRACING || process.env.NODE_ENV !== 'production';
38
+ }
39
+ function labelStackToString(labelStack, name) {
40
+ var _stack$map;
41
+ var stack = _toConsumableArray(labelStack !== null && labelStack !== void 0 ? labelStack : []);
42
+ if (name) {
43
+ stack.push({
44
+ name: name
45
+ });
46
+ }
47
+ return (_stack$map = stack.map(function (l) {
48
+ return l.name;
49
+ })) === null || _stack$map === void 0 ? void 0 : _stack$map.join('/');
50
+ }
51
+ function labelStackToIdString(labelStack) {
52
+ var _labelStack$map;
53
+ return labelStack === null || labelStack === void 0 || (_labelStack$map = labelStack.map(function (l) {
54
+ return 'segmentId' in l ? "".concat(l.name, ":").concat(l.segmentId) : "".concat(l.name);
55
+ })) === null || _labelStack$map === void 0 ? void 0 : _labelStack$map.join('/');
56
+ }
57
+ function addSegmentObserver(observer) {
58
+ segmentObservers.push(observer);
59
+ var _iterator = _createForOfIteratorHelper(segmentCache.values()),
60
+ _step;
61
+ try {
62
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
63
+ var segmentInfo = _step.value;
64
+ observer.onAdd(segmentInfo);
65
+ }
66
+ } catch (err) {
67
+ _iterator.e(err);
68
+ } finally {
69
+ _iterator.f();
70
+ }
71
+ }
72
+ function removeSegmentObserver(observer) {
73
+ var index = segmentObservers.findIndex(function (obs) {
74
+ return obs === observer;
75
+ });
76
+ if (index !== -1) {
77
+ segmentObservers.splice(index, 1);
78
+ }
79
+ }
27
80
  export function remove(interactionId) {
28
81
  interactions.delete(interactionId);
29
82
  }
@@ -172,6 +225,7 @@ export function addPreload(moduleId, timestamp) {
172
225
  export function addLoad(identifier, start, end) {
173
226
  addSpanToAll('bundle_load', identifier, null, start, end - start);
174
227
  }
228
+ var moduleLoadingRequests = {};
175
229
  export function extractModuleName(input) {
176
230
  var result = input !== null && input !== void 0 ? input : '';
177
231
  result = result.replace(/^\.\/src\/packages\//, '');
@@ -179,27 +233,30 @@ export function extractModuleName(input) {
179
233
  result = result.replace(/(\/src)?\/(index|main)\.(tsx|ts|js|jsx)$/, '');
180
234
  return result;
181
235
  }
182
- export function addHold(interactionId, labelStack, name, experimental) {
236
+ function addHoldCriterion(id, labelStack, name, startTime) {
237
+ var _window$__CRITERION__;
238
+ if (!((_window$__CRITERION__ = window.__CRITERION__) !== null && _window$__CRITERION__ !== void 0 && _window$__CRITERION__.addUFOHold)) {
239
+ return;
240
+ }
241
+ window.__CRITERION__.addUFOHold(id, labelStackToString(labelStack), name, startTime);
242
+ }
243
+ function removeHoldCriterion(id) {
244
+ var _window$__CRITERION__2;
245
+ if (!((_window$__CRITERION__2 = window.__CRITERION__) !== null && _window$__CRITERION__2 !== void 0 && _window$__CRITERION__2.removeUFOHold)) {
246
+ return;
247
+ }
248
+ window.__CRITERION__.removeUFOHold(id);
249
+ }
250
+ export function addHold(interactionId, labelStack, name) {
183
251
  var interaction = interactions.get(interactionId);
184
252
  var id = createUUID();
185
253
  if (interaction != null) {
186
- var _getConfig;
187
- var holdActive = {
254
+ var start = performance.now();
255
+ interaction.holdActive.set(id, {
188
256
  labelStack: labelStack,
189
257
  name: name,
190
- start: 0
191
- };
192
- var start = performance.now();
193
- if ((_getConfig = getConfig()) !== null && _getConfig !== void 0 && (_getConfig = _getConfig.experimentalInteractionMetrics) !== null && _getConfig !== void 0 && _getConfig.enabled && experimental) {
194
- interaction.holdExpActive.set(id, _objectSpread(_objectSpread({}, holdActive), {}, {
195
- start: start
196
- }));
197
- }
198
- if (!experimental) {
199
- interaction.holdActive.set(id, _objectSpread(_objectSpread({}, holdActive), {}, {
200
- start: start
201
- }));
202
- }
258
+ start: start
259
+ });
203
260
  addHoldCriterion(id, labelStack, name, start);
204
261
  return function () {
205
262
  var end = performance.now();
@@ -217,20 +274,11 @@ export function addHold(interactionId, labelStack, name, experimental) {
217
274
  removeHoldCriterion(id);
218
275
  var currentInteraction = interactions.get(interactionId);
219
276
  var currentHold = interaction.holdActive.get(id);
220
- var expHold = interaction.holdExpActive.get(id);
221
- if (currentInteraction != null) {
222
- if (currentHold != null) {
223
- currentInteraction.holdInfo.push(_objectSpread(_objectSpread({}, currentHold), {}, {
224
- end: end
225
- }));
226
- interaction.holdActive.delete(id);
227
- }
228
- if (expHold != null) {
229
- currentInteraction.holdExpInfo.push(_objectSpread(_objectSpread({}, expHold), {}, {
230
- end: end
231
- }));
232
- interaction.holdExpActive.delete(id);
233
- }
277
+ if (currentInteraction != null && currentHold != null) {
278
+ currentInteraction.holdInfo.push(_objectSpread(_objectSpread({}, currentHold), {}, {
279
+ end: end
280
+ }));
281
+ interaction.holdActive.delete(id);
234
282
  }
235
283
  };
236
284
  }
@@ -358,10 +406,22 @@ export var addProfilerTimings = function addProfilerTimings(interactionId, label
358
406
  postInteractionLog.addProfilerTimings(labelStack, type, actualDuration, baseDuration, startTime, commitTime);
359
407
  }
360
408
  };
409
+ var pushToQueue = function pushToQueue(id, data) {
410
+ interactionQueue.push({
411
+ id: id,
412
+ data: data
413
+ });
414
+ };
361
415
  var handleInteraction = pushToQueue;
416
+ function callCleanUpCallbacks(interaction) {
417
+ interaction.cleanupCallbacks.reverse().forEach(function (cleanUpCallback) {
418
+ cleanUpCallback();
419
+ });
420
+ }
362
421
  var finishInteraction = function finishInteraction(id, data) {
363
422
  var _getConfig3;
364
423
  var endTime = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : performance.now();
424
+ // eslint-disable-next-line no-param-reassign
365
425
  data.end = endTime;
366
426
  try {
367
427
  // for Firefox 102 and older
@@ -373,6 +433,7 @@ var finishInteraction = function finishInteraction(id, data) {
373
433
  // do nothing
374
434
  }
375
435
  if (data.featureFlags) {
436
+ // eslint-disable-next-line no-param-reassign
376
437
  data.featureFlags.during = Object.fromEntries(currentFeatureFlagsAccessed);
377
438
  }
378
439
  clearActiveTrace();
@@ -380,13 +441,50 @@ var finishInteraction = function finishInteraction(id, data) {
380
441
  if ((_getConfig3 = getConfig()) !== null && _getConfig3 !== void 0 && (_getConfig3 = _getConfig3.vc) !== null && _getConfig3 !== void 0 && _getConfig3.stopVCAtInteractionFinish) {
381
442
  data.vc = getVCObserver().getVCRawData();
382
443
  }
444
+ remove(id);
383
445
  PreviousInteractionLog.name = data.ufoName || 'unknown';
384
446
  PreviousInteractionLog.isAborted = data.abortReason != null;
385
447
  if (data.ufoName) {
386
448
  handleInteraction(id, data);
387
449
  }
388
450
  if (isPerformanceTracingEnabled()) {
389
- reactProfilerTimingMap(data);
451
+ var profilerTimingMap = new Map();
452
+ data.reactProfilerTimings.forEach(function (profilerTiming) {
453
+ var labelStackId = labelStackToIdString(profilerTiming.labelStack);
454
+ if (labelStackId) {
455
+ var _profilerTimingMap$ge, _timing$start, _timing$end;
456
+ var timing = (_profilerTimingMap$ge = profilerTimingMap.get(labelStackId)) !== null && _profilerTimingMap$ge !== void 0 ? _profilerTimingMap$ge : {
457
+ labelStack: profilerTiming.labelStack
458
+ };
459
+ timing.start = profilerTiming.startTime < ((_timing$start = timing.start) !== null && _timing$start !== void 0 ? _timing$start : Number.MAX_SAFE_INTEGER) ? profilerTiming.startTime : timing.start;
460
+ timing.end = profilerTiming.commitTime > ((_timing$end = timing.end) !== null && _timing$end !== void 0 ? _timing$end : Number.MIN_SAFE_INTEGER) ? profilerTiming.commitTime : timing.end;
461
+ profilerTimingMap.set(labelStackId, timing);
462
+ }
463
+ });
464
+ try {
465
+ // for Firefox 102 and older
466
+ var _iterator2 = _createForOfIteratorHelper(profilerTimingMap.entries()),
467
+ _step2;
468
+ try {
469
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
470
+ var _step2$value = _slicedToArray(_step2.value, 2),
471
+ _step2$value$ = _step2$value[1],
472
+ labelStack = _step2$value$.labelStack,
473
+ start = _step2$value$.start,
474
+ end = _step2$value$.end;
475
+ performance.measure("\uD83D\uDEF8 ".concat(labelStackToString(labelStack), " [segment_ttai]"), {
476
+ start: start,
477
+ end: end
478
+ });
479
+ }
480
+ } catch (err) {
481
+ _iterator2.e(err);
482
+ } finally {
483
+ _iterator2.f();
484
+ }
485
+ } catch (e) {
486
+ // do nothing
487
+ }
390
488
  }
391
489
  try {
392
490
  // dispatch a global window event to notify the measure is completed
@@ -409,85 +507,54 @@ export var sinkInteractionHandler = function sinkInteractionHandler(sinkFn) {
409
507
  export var sinkPostInteractionLogHandler = function sinkPostInteractionLogHandler(sinkFn) {
410
508
  postInteractionLog.sinkHandler(sinkFn);
411
509
  };
412
-
413
- // a flag to prevent multiple submitting
414
- var activeSubmitted = false;
415
510
  export function tryComplete(interactionId, endTime) {
416
511
  var interaction = interactions.get(interactionId);
417
512
  if (interaction != null) {
418
- var noMoreActiveHolds = interaction.holdActive.size === 0;
419
- var noMoreExpHolds = interaction.holdExpActive.size === 0;
420
- var postInteraction = function postInteraction() {
513
+ var noMoreHolds = interaction.holdActive.size === 0;
514
+ if (noMoreHolds) {
421
515
  var _getConfig4;
516
+ finishInteraction(interactionId, interaction, endTime);
422
517
  if ((_getConfig4 = getConfig()) !== null && _getConfig4 !== void 0 && (_getConfig4 = _getConfig4.postInteractionLog) !== null && _getConfig4 !== void 0 && _getConfig4.enabled) {
423
- var _getExperimentalVCMet;
424
- var experimentalVC90 = (_getExperimentalVCMet = getExperimentalVCMetrics(interaction)) === null || _getExperimentalVCMet === void 0 ? void 0 : _getExperimentalVCMet['metric:experimental:vc90'];
425
- var experimentalTTAI = getTTAI(interaction);
426
- postInteractionLog.onInteractionComplete(_objectSpread(_objectSpread({}, interaction), {}, {
427
- experimentalTTAI: experimentalTTAI,
428
- experimentalVC90: experimentalVC90
429
- }));
430
- }
431
- remove(interactionId);
432
- };
433
- if (noMoreActiveHolds) {
434
- if (!activeSubmitted) {
435
- finishInteraction(interactionId, interaction, endTime);
436
- activeSubmitted = true;
437
- }
438
- if (noMoreExpHolds) {
439
- var _getConfig5;
440
- if ((_getConfig5 = getConfig()) !== null && _getConfig5 !== void 0 && (_getConfig5 = _getConfig5.experimentalInteractionMetrics) !== null && _getConfig5 !== void 0 && _getConfig5.enabled) {
441
- onExperimentalInteractionComplete(interactionId, interaction, endTime);
442
- }
443
- postInteraction();
518
+ postInteractionLog.onInteractionComplete(interaction);
444
519
  }
445
520
  }
446
521
  }
447
522
  }
523
+ function callCancelCallbacks(interaction) {
524
+ interaction.cancelCallbacks.reverse().forEach(function (cancelCallback) {
525
+ cancelCallback();
526
+ });
527
+ }
448
528
  export function abort(interactionId, abortReason) {
449
529
  var interaction = interactions.get(interactionId);
450
530
  if (interaction != null) {
451
- var _getConfig6;
452
531
  callCancelCallbacks(interaction);
453
532
  interaction.abortReason = abortReason;
454
533
  finishInteraction(interactionId, interaction);
455
- if ((_getConfig6 = getConfig()) !== null && _getConfig6 !== void 0 && (_getConfig6 = _getConfig6.experimentalInteractionMetrics) !== null && _getConfig6 !== void 0 && _getConfig6.enabled) {
456
- onExperimentalInteractionComplete(interactionId, interaction);
457
- }
458
- remove(interactionId);
459
534
  }
460
535
  }
461
536
  export function abortByNewInteraction(interactionId, interactionName) {
462
537
  var interaction = interactions.get(interactionId);
463
538
  if (interaction != null) {
464
- var _getConfig7;
465
539
  callCancelCallbacks(interaction);
466
540
  interaction.abortReason = 'new_interaction';
467
541
  interaction.abortedByInteractionName = interactionName;
468
542
  finishInteraction(interactionId, interaction);
469
- if ((_getConfig7 = getConfig()) !== null && _getConfig7 !== void 0 && (_getConfig7 = _getConfig7.experimentalInteractionMetrics) !== null && _getConfig7 !== void 0 && _getConfig7.enabled) {
470
- onExperimentalInteractionComplete(interactionId, interaction);
471
- }
472
- remove(interactionId);
473
543
  }
474
544
  }
475
545
  export function abortAll(abortReason, abortedByInteractionName) {
476
546
  interactions.forEach(function (interaction, interactionId) {
477
- var _getConfig8;
478
547
  var noMoreHolds = interaction.holdActive.size === 0;
479
548
  if (!noMoreHolds) {
480
549
  callCancelCallbacks(interaction);
550
+ // eslint-disable-next-line no-param-reassign
481
551
  interaction.abortReason = abortReason;
482
552
  if (abortedByInteractionName != null) {
553
+ // eslint-disable-next-line no-param-reassign
483
554
  interaction.abortedByInteractionName = abortedByInteractionName;
484
555
  }
485
556
  }
486
557
  finishInteraction(interactionId, interaction);
487
- if ((_getConfig8 = getConfig()) !== null && _getConfig8 !== void 0 && (_getConfig8 = _getConfig8.experimentalInteractionMetrics) !== null && _getConfig8 !== void 0 && _getConfig8.enabled) {
488
- onExperimentalInteractionComplete(interactionId, interaction);
489
- }
490
- remove(interactionId);
491
558
  });
492
559
  }
493
560
  export function addOnCancelCallback(id, cancelCallback) {
@@ -495,9 +562,9 @@ export function addOnCancelCallback(id, cancelCallback) {
495
562
  interaction === null || interaction === void 0 || interaction.cancelCallbacks.push(cancelCallback);
496
563
  }
497
564
  export function addNewInteraction(interactionId, ufoName, type, startTime, rate, labelStack, routeName) {
498
- var _getConfig9;
565
+ var _getConfig5;
499
566
  var trace = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null;
500
- if ((_getConfig9 = getConfig()) !== null && _getConfig9 !== void 0 && (_getConfig9 = _getConfig9.postInteractionLog) !== null && _getConfig9 !== void 0 && _getConfig9.enabled) {
567
+ if ((_getConfig5 = getConfig()) !== null && _getConfig5 !== void 0 && (_getConfig5 = _getConfig5.postInteractionLog) !== null && _getConfig5 !== void 0 && _getConfig5.enabled) {
501
568
  postInteractionLog.reset();
502
569
  }
503
570
  var previousTime = startTime;
@@ -537,11 +604,9 @@ export function addNewInteraction(interactionId, ufoName, type, startTime, rate,
537
604
  requestInfo: [],
538
605
  reactProfilerTimings: [],
539
606
  holdInfo: [],
540
- holdExpInfo: [],
541
607
  holdActive: new Map(),
542
- holdExpActive: new Map(),
543
608
  // measure when we execute this code
544
- // from this, we can measure the input delay -
609
+ // from this we can measure the input delay -
545
610
  // how long the browser took to hand execution back to JS)
546
611
  measureStart: performance.now(),
547
612
  rate: rate,
@@ -591,10 +656,6 @@ export function addNewInteraction(interactionId, ufoName, type, startTime, rate,
591
656
  postInteractionLog.startVCObserver({
592
657
  startTime: startTime
593
658
  });
594
- experimentalVC.start({
595
- startTime: startTime
596
- });
597
- activeSubmitted = false;
598
659
  }
599
660
  }
600
661
  export function addBrowserMetricEvent(event) {
@@ -656,6 +717,17 @@ export function addRequestInfo(interactionId, labelStack, requestInfo) {
656
717
  }, requestInfo));
657
718
  }
658
719
  }
720
+ function isSegmentLabel(obj) {
721
+ return obj && typeof obj.name === 'string' && typeof obj.segmentId === 'string';
722
+ }
723
+ function getSegmentCacheKey(labelStack) {
724
+ return labelStack.map(function (l) {
725
+ if (isSegmentLabel(l)) {
726
+ return "".concat(l.name, "_").concat(l.segmentId);
727
+ }
728
+ return l.name;
729
+ }).join('|');
730
+ }
659
731
  export function addSegment(labelStack) {
660
732
  var key = getSegmentCacheKey(labelStack);
661
733
  var existingSegment = segmentCache.get(key);
@@ -2,10 +2,8 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
2
  import { unstable_IdlePriority as idlePriority, unstable_scheduleCallback as scheduleCallback } from 'scheduler';
3
3
  import { startLighthouseObserver } from '../additional-payload';
4
4
  import { setUFOConfig } from '../config';
5
- import { experimentalVC, sinkExperimentalHandler } from '../create-experimental-interaction-metrics-payload';
6
- import { postInteractionLog } from '../create-payload/common/utils';
7
5
  import { setupHiddenTimingCapture } from '../hidden-timing';
8
- import { sinkInteractionHandler, sinkPostInteractionLogHandler } from '../interaction-metrics';
6
+ import { postInteractionLog, sinkInteractionHandler, sinkPostInteractionLogHandler } from '../interaction-metrics';
9
7
  import { getVCObserver } from '../vc';
10
8
  var initialized = false;
11
9
  function sinkInteraction(instance, payloadPackage) {
@@ -18,16 +16,6 @@ function sinkInteraction(instance, payloadPackage) {
18
16
  });
19
17
  });
20
18
  }
21
- function sinkExperimentalInteractionMetrics(instance, payloadPackage) {
22
- sinkExperimentalHandler(function (interactionId, interaction) {
23
- scheduleCallback(idlePriority, function () {
24
- var payload = payloadPackage.createExperimentalMetricsPayload(interactionId, interaction);
25
- if (payload) {
26
- instance.sendOperationalEvent(payload);
27
- }
28
- });
29
- });
30
- }
31
19
  function sinkPostInteractionLog(instance, createPostInteractionLogPayload) {
32
20
  sinkPostInteractionLogHandler(function (logOutput) {
33
21
  scheduleCallback(idlePriority, function () {
@@ -45,7 +33,6 @@ export var init = function init(analyticsWebClientAsync, config) {
45
33
  }
46
34
  setUFOConfig(config);
47
35
  if ((_config$vc = config.vc) !== null && _config$vc !== void 0 && _config$vc.enabled) {
48
- var _config$experimentalI;
49
36
  var vcOptions = {
50
37
  heatmapSize: config.vc.heatmapSize,
51
38
  oldDomUpdates: config.vc.oldDomUpdates,
@@ -59,38 +46,31 @@ export var init = function init(analyticsWebClientAsync, config) {
59
46
  postInteractionLog.startVCObserver({
60
47
  startTime: 0
61
48
  });
62
- if (config !== null && config !== void 0 && (_config$experimentalI = config.experimentalInteractionMetrics) !== null && _config$experimentalI !== void 0 && _config$experimentalI.enabled) {
63
- experimentalVC.initialize(vcOptions).start({
64
- startTime: 0
65
- });
66
- }
67
49
  }
68
50
  setupHiddenTimingCapture();
69
51
  startLighthouseObserver();
70
52
  initialized = true;
71
- Promise.all([analyticsWebClientAsync, import( /* webpackChunkName: "create-payloads" */'../create-payload'), import( /* webpackChunkName: "create-post-interaction-log-payload" */'../create-post-interaction-log-payload')]).then(function (_ref) {
53
+ Promise.all([analyticsWebClientAsync,
54
+ // eslint-disable-next-line import/dynamic-import-chunkname
55
+ import( /* webpackChunkName: "create-payloads" */'../create-payload'),
56
+ // eslint-disable-next-line import/dynamic-import-chunkname
57
+ import( /* webpackChunkName: "create-post-intreaction-log-payload" */'../create-post-interaction-log-payload')]).then(function (_ref) {
72
58
  var _ref2 = _slicedToArray(_ref, 3),
73
59
  awc = _ref2[0],
74
60
  payloadPackage = _ref2[1],
75
61
  createPostInteractionLogPayloadPackage = _ref2[2];
76
62
  if (awc.getAnalyticsWebClientPromise) {
77
63
  awc.getAnalyticsWebClientPromise().then(function (client) {
78
- var _config$experimentalI2, _config$postInteracti;
64
+ var _config$postInteracti;
79
65
  var instance = client.getInstance();
80
66
  sinkInteraction(instance, payloadPackage);
81
- if (config !== null && config !== void 0 && (_config$experimentalI2 = config.experimentalInteractionMetrics) !== null && _config$experimentalI2 !== void 0 && _config$experimentalI2.enabled) {
82
- sinkExperimentalInteractionMetrics(instance, payloadPackage);
83
- }
84
67
  if ((_config$postInteracti = config.postInteractionLog) !== null && _config$postInteracti !== void 0 && _config$postInteracti.enabled) {
85
68
  sinkPostInteractionLog(instance, createPostInteractionLogPayloadPackage.default);
86
69
  }
87
70
  });
88
71
  } else if (awc.sendOperationalEvent) {
89
- var _config$experimentalI3, _config$postInteracti2;
72
+ var _config$postInteracti2;
90
73
  sinkInteraction(awc, payloadPackage);
91
- if (config !== null && config !== void 0 && (_config$experimentalI3 = config.experimentalInteractionMetrics) !== null && _config$experimentalI3 !== void 0 && _config$experimentalI3.enabled) {
92
- sinkExperimentalInteractionMetrics(awc, payloadPackage);
93
- }
94
74
  if ((_config$postInteracti2 = config.postInteractionLog) !== null && _config$postInteracti2 !== void 0 && _config$postInteracti2.enabled) {
95
75
  sinkPostInteractionLog(awc, createPostInteractionLogPayloadPackage.default);
96
76
  }
@@ -22,7 +22,8 @@ var useLayoutEffectSAFE = typeof window === 'undefined' ? useEffect : useLayoutE
22
22
  * return (
23
23
  * <>
24
24
  * <Skeleton />
25
- * <UFOLoadHold name="card" />
25
+ * <UFOLoadHold name="card">
26
+ * </UFOLoadHold>
26
27
  * )
27
28
  * }
28
29
  * ```
@@ -57,10 +58,7 @@ export default function UFOLoadHold(_ref) {
57
58
  // react-18: useId instead
58
59
  var context = useContext(UFOInteractionContext);
59
60
  useLayoutEffectSAFE(function () {
60
- if (hold && context != null) {
61
- if (experimental && context.holdExperimental) {
62
- return context.holdExperimental(name);
63
- }
61
+ if (hold && !experimental && context != null) {
64
62
  return context.hold(name);
65
63
  }
66
64
  }, [hold, context, name]);
@@ -79,14 +79,15 @@ export default function UFOSegment(_ref) {
79
79
  }
80
80
  }
81
81
  }
82
- function _internalHold(labelStack, name) {
83
- var experimental = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
82
+ function _internalHold(labelStack, name
83
+ // eslint-disable-next-line @typescript-eslint/no-invalid-void-type
84
+ ) {
84
85
  if (interactionId.current != null) {
85
86
  if (parentContext) {
86
- return parentContext._internalHold(labelStack, name, experimental);
87
+ return parentContext._internalHold(labelStack, name);
87
88
  } else {
88
89
  var capturedInteractionId = interactionId.current;
89
- var disposeHold = addHold(interactionId.current, labelStack, name, experimental);
90
+ var disposeHold = addHold(interactionId.current, labelStack, name);
90
91
  return function () {
91
92
  if (capturedInteractionId === interactionId.current) {
92
93
  disposeHold();
@@ -95,7 +96,9 @@ export default function UFOSegment(_ref) {
95
96
  }
96
97
  }
97
98
  }
98
- function _internalHoldByID(labelStack, id, name, remove) {
99
+ function _internalHoldByID(labelStack, id, name, remove
100
+ // eslint-disable-next-line @typescript-eslint/no-invalid-void-type
101
+ ) {
99
102
  if (interactionId.current != null) {
100
103
  if (parentContext) {
101
104
  parentContext._internalHoldByID(labelStack, name, id, remove);
@@ -120,10 +123,6 @@ export default function UFOSegment(_ref) {
120
123
  var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'unknown';
121
124
  return this._internalHold(this.labelStack, name);
122
125
  },
123
- holdExperimental: function holdExperimental() {
124
- var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'unknown';
125
- return this._internalHold(this.labelStack, name, true);
126
- },
127
126
  addHoldByID: function addHoldByID(labelStack, id) {
128
127
  var name = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'unknown';
129
128
  this._internalHoldByID(labelStack, id, name, false);
@@ -63,7 +63,7 @@ export interface SegmentInfo {
63
63
  labelStack: LabelStack;
64
64
  }
65
65
  export interface CustomData {
66
- [key: string]: null | string | number | boolean | undefined | CustomData | Record<string, CustomData>;
66
+ [key: string]: null | undefined | string | number | boolean | undefined | CustomData | Record<string, CustomData>;
67
67
  }
68
68
  export type CustomTiming = Record<string, {
69
69
  startTime: number;
@@ -104,9 +104,7 @@ export interface InteractionMetrics {
104
104
  labelStack: LabelStack;
105
105
  })[];
106
106
  holdInfo: HoldInfo[];
107
- holdExpInfo: HoldInfo[];
108
107
  holdActive: Map<string, HoldActive>;
109
- holdExpActive: Map<string, HoldActive>;
110
108
  reactProfilerTimings: ReactProfilerTiming[];
111
109
  measureStart: number;
112
110
  rate: number;
@@ -117,11 +115,11 @@ export interface InteractionMetrics {
117
115
  abortReason?: AbortReasonType;
118
116
  abortedByInteractionName?: string;
119
117
  /**
120
- * Apdex is a legacy performance measurement where it is
118
+ * Apdex is legacy performance measurement where it is
121
119
  * capturing TTI at arbitrary point in the code (bm3/UFOv1)
122
120
  *
123
121
  * We are intercepting its values now just so we can use it for
124
- * topline metric, but should encourage teams to adopt TTAI
122
+ * topline metric, but should encourage teams adopt TTAI
125
123
  *
126
124
  * This field might be ignored/dropped in the future.
127
125
  */
@@ -166,7 +164,7 @@ export interface LazyLoadProfilerContext {
166
164
  addLoad(identifier: string, start: number, end: number): void;
167
165
  }
168
166
  export interface EnhancedUFOInteractionContextType extends UFOInteractionContextType, RelayMetricsRecorder, LazyLoadProfilerContext {
169
- _internalHold(labelStack: LabelStack, name: string, experimental?: boolean): void | (() => void);
167
+ _internalHold(labelStack: LabelStack, name: string): void | (() => void);
170
168
  _internalHoldByID(labelStack: LabelStack, id: string, name: string, remove: boolean): void | (() => void);
171
169
  addHoldByID(labelStack: LabelStack, id: string, name?: string): void;
172
170
  removeHoldByID(labelStack: LabelStack, id: string, name?: string): void;
@@ -73,11 +73,6 @@ export type Config = {
73
73
  readonly rates?: Rates;
74
74
  readonly kind?: Record<InteractionType, number>;
75
75
  };
76
- readonly experimentalInteractionMetrics?: {
77
- readonly enabled?: boolean;
78
- readonly rates?: Rates;
79
- readonly kind?: Record<InteractionType, number>;
80
- };
81
76
  readonly enableSegmentHighlighting?: boolean;
82
77
  readonly enableAdditionalPerformanceMarks?: boolean;
83
78
  readonly shouldCalculateLighthouseMetricsFromTTAI?: boolean;
@@ -91,7 +86,6 @@ export type Config = {
91
86
  export declare function setUFOConfig(newConfig: Config): void;
92
87
  export declare function getConfig(): Config | undefined;
93
88
  export declare function getInteractionRate(name: string, interactionKind: InteractionKind): number;
94
- export declare function getExperimentalInteractionRate(name: string, interactionType: InteractionType): number;
95
89
  export declare function getPostInteractionRate(name: string, interactionType: InteractionType): number;
96
90
  export declare function getCapabilityRate(capability: Capability): number;
97
91
  declare const validTypingMethods: readonly ["timeout", "timeoutNoAlloc", "mutationObserver"];
@@ -1,8 +1,4 @@
1
- import type { InteractionMetrics } from '../../../common';
2
- import { type Config } from '../../../config';
3
1
  import type { LabelStack, SegmentLabel } from '../../../interaction-context';
4
- import PostInteractionLog from '../../../interaction-metrics/post-interaction-log';
5
- export declare const postInteractionLog: PostInteractionLog;
6
2
  export type SegmentItem = {
7
3
  n: string;
8
4
  c?: Record<string, SegmentItem>;
@@ -19,8 +15,3 @@ export declare function optimizeLabelStack(labelStack: LabelStack): string | {
19
15
  s?: string | undefined;
20
16
  n: string;
21
17
  }[];
22
- export declare const getPageVisibilityUpToTTAI: (interaction: InteractionMetrics) => import("../../../hidden-timing").PageVisibility;
23
- export declare const calculateVCMetrics: (interaction: InteractionMetrics, prefix: string, getVCResultFn: (props: any) => any) => any;
24
- export declare function getSSRDoneTimeValue(config: Config | undefined): number | undefined;
25
- export declare const getVCMetrics: (interaction: InteractionMetrics) => any;
26
- export declare const getTTAI: (interaction: InteractionMetrics) => number | undefined;