@atlaskit/react-ufo 2.4.5 → 2.4.7

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 (71) hide show
  1. package/CHANGELOG.md +25 -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 +89 -0
  5. package/dist/cjs/create-payload/common/utils/index.js +85 -1
  6. package/dist/cjs/create-payload/index.js +49 -85
  7. package/dist/cjs/create-post-interaction-log-payload/index.js +1 -4
  8. package/dist/cjs/interaction-metrics/common/constants.js +7 -1
  9. package/dist/cjs/interaction-metrics/common/index.js +151 -0
  10. package/dist/cjs/interaction-metrics/index.js +139 -204
  11. package/dist/cjs/interaction-metrics/post-interaction-log.js +6 -2
  12. package/dist/cjs/interaction-metrics-init/index.js +27 -9
  13. package/dist/cjs/load-hold/UFOLoadHold.js +3 -4
  14. package/dist/cjs/segment/segment.js +7 -9
  15. package/dist/cjs/trace-pageload/index.js +2 -1
  16. package/dist/cjs/vc/vc-observer/observers/index.js +1 -40
  17. package/dist/es2019/config/index.js +22 -0
  18. package/dist/es2019/create-experimental-interaction-metrics-payload/index.js +67 -0
  19. package/dist/es2019/create-payload/common/utils/index.js +86 -1
  20. package/dist/es2019/create-payload/index.js +40 -81
  21. package/dist/es2019/create-post-interaction-log-payload/index.js +1 -4
  22. package/dist/es2019/interaction-metrics/common/constants.js +6 -0
  23. package/dist/es2019/interaction-metrics/common/index.js +103 -0
  24. package/dist/es2019/interaction-metrics/index.js +92 -129
  25. package/dist/es2019/interaction-metrics/post-interaction-log.js +6 -2
  26. package/dist/es2019/interaction-metrics-init/index.js +21 -8
  27. package/dist/es2019/load-hold/UFOLoadHold.js +3 -4
  28. package/dist/es2019/segment/segment.js +6 -12
  29. package/dist/es2019/trace-pageload/index.js +1 -1
  30. package/dist/es2019/vc/vc-observer/observers/index.js +1 -20
  31. package/dist/esm/config/index.js +39 -18
  32. package/dist/esm/create-experimental-interaction-metrics-payload/index.js +81 -0
  33. package/dist/esm/create-payload/common/utils/index.js +80 -1
  34. package/dist/esm/create-payload/index.js +45 -83
  35. package/dist/esm/create-post-interaction-log-payload/index.js +1 -4
  36. package/dist/esm/interaction-metrics/common/constants.js +6 -0
  37. package/dist/esm/interaction-metrics/common/index.js +132 -0
  38. package/dist/esm/interaction-metrics/index.js +87 -156
  39. package/dist/esm/interaction-metrics/post-interaction-log.js +6 -2
  40. package/dist/esm/interaction-metrics-init/index.js +24 -10
  41. package/dist/esm/load-hold/UFOLoadHold.js +3 -4
  42. package/dist/esm/segment/segment.js +7 -9
  43. package/dist/esm/trace-pageload/index.js +1 -1
  44. package/dist/esm/vc/vc-observer/observers/index.js +1 -40
  45. package/dist/types/common/common/types.d.ts +9 -5
  46. package/dist/types/config/index.d.ts +6 -0
  47. package/dist/types/create-experimental-interaction-metrics-payload/index.d.ts +31 -0
  48. package/dist/types/create-payload/common/utils/index.d.ts +12 -0
  49. package/dist/types/create-payload/index.d.ts +13 -5716
  50. package/dist/types/create-post-interaction-log-payload/index.d.ts +2 -0
  51. package/dist/types/interaction-metrics/common/constants.d.ts +31 -1
  52. package/dist/types/interaction-metrics/common/index.d.ts +16 -0
  53. package/dist/types/interaction-metrics/index.d.ts +4 -15
  54. package/dist/types/interaction-metrics/post-interaction-log.d.ts +1 -1
  55. package/dist/types/load-hold/UFOLoadHold.d.ts +1 -2
  56. package/dist/types/trace-pageload/index.d.ts +1 -0
  57. package/dist/types/vc/vc-observer/observers/index.d.ts +0 -1
  58. package/dist/types-ts4.5/common/common/types.d.ts +9 -5
  59. package/dist/types-ts4.5/config/index.d.ts +6 -0
  60. package/dist/types-ts4.5/create-experimental-interaction-metrics-payload/index.d.ts +31 -0
  61. package/dist/types-ts4.5/create-payload/common/utils/index.d.ts +12 -0
  62. package/dist/types-ts4.5/create-payload/index.d.ts +13 -5716
  63. package/dist/types-ts4.5/create-post-interaction-log-payload/index.d.ts +2 -0
  64. package/dist/types-ts4.5/interaction-metrics/common/constants.d.ts +31 -1
  65. package/dist/types-ts4.5/interaction-metrics/common/index.d.ts +16 -0
  66. package/dist/types-ts4.5/interaction-metrics/index.d.ts +4 -15
  67. package/dist/types-ts4.5/interaction-metrics/post-interaction-log.d.ts +1 -1
  68. package/dist/types-ts4.5/load-hold/UFOLoadHold.d.ts +1 -2
  69. package/dist/types-ts4.5/trace-pageload/index.d.ts +1 -0
  70. package/dist/types-ts4.5/vc/vc-observer/observers/index.d.ts +0 -1
  71. package/package.json +2 -1
@@ -8,13 +8,12 @@ import { getBm3Timings } from '../custom-timings';
8
8
  import { getGlobalErrorCount } from '../global-error-handler';
9
9
  import { getPageVisibilityState } from '../hidden-timing';
10
10
  import * as initialPageLoadExtraTiming from '../initial-page-load-extra-timing';
11
- import { interactionSpans as atlaskitInteractionSpans, postInteractionLog } from '../interaction-metrics';
11
+ import { interactionSpans as atlaskitInteractionSpans } from '../interaction-metrics';
12
12
  import * as resourceTiming from '../resource-timing';
13
13
  import { roundEpsilon } from '../round-number';
14
14
  import * as ssr from '../ssr';
15
- import { getVCObserver } from '../vc';
16
- import { buildSegmentTree, labelStackStartWith, optimizeLabelStack, sanitizeUfoName, stringifyLabelStackFully } from './common/utils';
17
- function getUfoNameOverride(interaction) {
15
+ import { buildSegmentTree, getExperimentalVCMetrics, getInteractionStatus, getPageVisibilityUpToTTAI, getSSRDoneTimeValue, getTTAI, getVCMetrics, labelStackStartWith, optimizeLabelStack, sanitizeUfoName, stringifyLabelStackFully } from './common/utils';
16
+ export function getUfoNameOverride(interaction) {
18
17
  const {
19
18
  ufoName,
20
19
  apdex
@@ -28,7 +27,6 @@ function getUfoNameOverride(interaction) {
28
27
  }
29
28
  }
30
29
  return ufoName;
31
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
32
30
  } catch (e) {
33
31
  return ufoName;
34
32
  }
@@ -63,13 +61,6 @@ const getPageVisibilityUpToTTI = interaction => {
63
61
  const bm3EndTimeOrInteractionEndTime = getBm3EndTimeOrFallbackValue(interaction);
64
62
  return getPageVisibilityState(start, bm3EndTimeOrInteractionEndTime);
65
63
  };
66
- const getPageVisibilityUpToTTAI = interaction => {
67
- const {
68
- start,
69
- end
70
- } = interaction;
71
- return getPageVisibilityState(start, end);
72
- };
73
64
  const getVisibilityStateFromPerformance = stop => {
74
65
  try {
75
66
  const results = performance.getEntriesByType('visibility-state');
@@ -124,15 +115,6 @@ const getMoreAccuratePageVisibilityUpToTTAI = interaction => {
124
115
  }
125
116
  return old;
126
117
  };
127
- const getInteractionStatus = interaction => {
128
- const originalInteractionStatus = interaction.abortReason ? 'ABORTED' : 'SUCCEEDED';
129
- const hasBm3TTI = interaction.apdex.length > 0;
130
- const overrideStatus = hasBm3TTI ? 'SUCCEEDED' : originalInteractionStatus;
131
- return {
132
- originalInteractionStatus,
133
- overrideStatus
134
- };
135
- };
136
118
  const getResourceTimings = (start, end) => {
137
119
  var _resourceTiming$getRe;
138
120
  return (_resourceTiming$getRe = resourceTiming.getResourceTimings(start, end)) !== null && _resourceTiming$getRe !== void 0 ? _resourceTiming$getRe : undefined;
@@ -155,44 +137,6 @@ const getPaintMetrics = type => {
155
137
  });
156
138
  return metrics;
157
139
  };
158
- const getVCMetrics = interaction => {
159
- var _config$vc, _interaction$apdex, _interaction$apdex$;
160
- const config = getConfig();
161
- if (!(config !== null && config !== void 0 && (_config$vc = config.vc) !== null && _config$vc !== void 0 && _config$vc.enabled)) {
162
- return {};
163
- }
164
- if (interaction.type !== 'page_load' && interaction.type !== 'transition') {
165
- return {};
166
- }
167
- const ssr = interaction.type === 'page_load' && config !== null && config !== void 0 && config.ssr ? {
168
- ssr: getSSRDoneTimeValue(config)
169
- } : null;
170
- postInteractionLog.setVCObserverSSRConfig(ssr);
171
- const tti = (_interaction$apdex = interaction.apdex) === null || _interaction$apdex === void 0 ? void 0 : (_interaction$apdex$ = _interaction$apdex[0]) === null || _interaction$apdex$ === void 0 ? void 0 : _interaction$apdex$.stopTime;
172
- const prefix = 'ufo';
173
- const result = getVCObserver().getVCResult({
174
- start: interaction.start,
175
- stop: interaction.end,
176
- tti,
177
- prefix,
178
- vc: interaction.vc,
179
- ...ssr
180
- });
181
- postInteractionLog.setLastInteractionFinishVCResult(result);
182
- const VC = result === null || result === void 0 ? void 0 : result['metrics:vc'];
183
- if (!VC || !(result !== null && result !== void 0 && result[`${prefix}:vc:clean`])) {
184
- return result;
185
- }
186
- const interactionStatus = getInteractionStatus(interaction);
187
- const pageVisibilityUpToTTAI = getPageVisibilityUpToTTAI(interaction);
188
- if (interactionStatus.originalInteractionStatus !== 'SUCCEEDED' || pageVisibilityUpToTTAI !== 'visible') {
189
- return result;
190
- }
191
- return {
192
- ...result,
193
- 'metric:vc90': VC['90']
194
- };
195
- };
196
140
  const getNavigationMetrics = type => {
197
141
  if (type !== 'page_load') {
198
142
  return {};
@@ -240,7 +184,7 @@ const getNavigationMetrics = type => {
240
184
  };
241
185
  };
242
186
  const getPPSMetrics = interaction => {
243
- var _interaction$apdex2, _interaction$apdex2$;
187
+ var _interaction$apdex, _interaction$apdex$;
244
188
  const {
245
189
  start,
246
190
  end
@@ -248,7 +192,7 @@ const getPPSMetrics = interaction => {
248
192
  const config = getConfig();
249
193
  const interactionStatus = getInteractionStatus(interaction);
250
194
  const pageVisibilityUpToTTAI = getPageVisibilityUpToTTAI(interaction);
251
- const tti = (_interaction$apdex2 = interaction.apdex) === null || _interaction$apdex2 === void 0 ? void 0 : (_interaction$apdex2$ = _interaction$apdex2[0]) === null || _interaction$apdex2$ === void 0 ? void 0 : _interaction$apdex2$.stopTime;
195
+ const tti = (_interaction$apdex = interaction.apdex) === null || _interaction$apdex === void 0 ? void 0 : (_interaction$apdex$ = _interaction$apdex[0]) === null || _interaction$apdex$ === void 0 ? void 0 : _interaction$apdex$.stopTime;
252
196
  const ttai = interactionStatus.originalInteractionStatus === 'SUCCEEDED' && pageVisibilityUpToTTAI === 'visible' ? Math.round(end - start) : undefined;
253
197
  const PPSMetricsAtTTI = tti !== undefined ? getLighthouseMetrics({
254
198
  start,
@@ -594,10 +538,6 @@ function getBm3TrackerTimings(interaction) {
594
538
  legacyMetrics
595
539
  };
596
540
  }
597
- function getSSRDoneTimeValue(config) {
598
- var _config$ssr, _config$ssr2;
599
- return config !== null && config !== void 0 && (_config$ssr = config.ssr) !== null && _config$ssr !== void 0 && _config$ssr.getSSRDoneTime ? config === null || config === void 0 ? void 0 : (_config$ssr2 = config.ssr) === null || _config$ssr2 === void 0 ? void 0 : _config$ssr2.getSSRDoneTime() : ssr.getSSRDoneTime();
600
- }
601
541
  function getPayloadSize(payload) {
602
542
  return Math.round(new TextEncoder().encode(JSON.stringify(payload)).length / 1024);
603
543
  }
@@ -630,17 +570,25 @@ function getStylesheetMetrics() {
630
570
  }
631
571
  }, 0);
632
572
  return {
633
- stylesheets: stylesheetCount,
634
- styleElements,
635
- styleProps: styleProps.length,
636
- styleDeclarations,
637
- cssrules: cssrules
573
+ 'ufo:stylesheets': stylesheetCount,
574
+ 'ufo:styleElements': styleElements,
575
+ 'ufo:styleProps': styleProps.length,
576
+ 'ufo:styleDeclarations': styleDeclarations,
577
+ 'ufo:cssrules': cssrules
638
578
  };
639
579
  } catch (e) {
640
580
  return {};
641
581
  }
642
582
  }
643
- function createInteractionMetricsPayload(interaction, interactionId) {
583
+ let regularTTAI;
584
+ let expTTAI;
585
+ function getErrorCounts(interaction) {
586
+ return {
587
+ 'ufo:errors:globalCount': getGlobalErrorCount(),
588
+ 'ufo:errors:count': interaction.errors.length
589
+ };
590
+ }
591
+ export function createInteractionMetricsPayload(interaction, interactionId, experimental) {
644
592
  var _window$location, _config$additionalPay;
645
593
  const interactionPayloadStart = performance.now();
646
594
  const config = getConfig();
@@ -675,7 +623,7 @@ function createInteractionMetricsPayload(interaction, interactionId) {
675
623
  } : {};
676
624
  // Page Load
677
625
  const getPageLoadInteractionMetrics = () => {
678
- var _config$ssr3;
626
+ var _config$ssr;
679
627
  if (!isPageLoad) {
680
628
  return {};
681
629
  }
@@ -687,12 +635,12 @@ function createInteractionMetricsPayload(interaction, interactionId) {
687
635
  return {
688
636
  ...SSRDoneTime,
689
637
  isBM3ConfigSSRDoneAsFmp: interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp,
690
- isUFOConfigSSRDoneAsFmp: interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp || !!(config !== null && config !== void 0 && (_config$ssr3 = config.ssr) !== null && _config$ssr3 !== void 0 && _config$ssr3.getSSRDoneTime)
638
+ isUFOConfigSSRDoneAsFmp: interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp || !!(config !== null && config !== void 0 && (_config$ssr = config.ssr) !== null && _config$ssr !== void 0 && _config$ssr.getSSRDoneTime)
691
639
  };
692
640
  };
693
641
  // Detailed payload. Page visibility = visible
694
642
  const getDetailedInteractionMetrics = () => {
695
- if (window.__UFO_COMPACT_PAYLOAD__ || !isDetailedPayload) {
643
+ if (experimental || window.__UFO_COMPACT_PAYLOAD__ || !isDetailedPayload) {
696
644
  return {};
697
645
  }
698
646
  const spans = [...interaction.spans, ...atlaskitInteractionSpans];
@@ -707,7 +655,7 @@ function createInteractionMetricsPayload(interaction, interactionId) {
707
655
  })),
708
656
  holdActive: [...interaction.holdActive.values()],
709
657
  redirects: optimizeRedirects(interaction.redirects, start),
710
- holdInfo: optimizeHoldInfo(interaction.holdInfo, start),
658
+ holdInfo: optimizeHoldInfo(experimental ? interaction.holdExpInfo : interaction.holdInfo, start),
711
659
  spans: optimizeSpans(spans, start),
712
660
  requestInfo: optimizeRequestInfo(interaction.requestInfo, start),
713
661
  customTimings: optimizeCustomTimings(interaction.customTimings, start),
@@ -717,16 +665,21 @@ function createInteractionMetricsPayload(interaction, interactionId) {
717
665
  };
718
666
  // Page load & detailed payload
719
667
  const getPageLoadDetailedInteractionMetrics = () => {
720
- var _config$ssr4;
668
+ var _config$ssr2;
721
669
  if (!isPageLoad || !isDetailedPayload) {
722
670
  return {};
723
671
  }
724
672
  const config = getConfig();
725
673
  return {
726
674
  initialPageLoadExtraTimings: objectToArray(initialPageLoadExtraTiming.getTimings()),
727
- SSRTimings: config !== null && config !== void 0 && (_config$ssr4 = config.ssr) !== null && _config$ssr4 !== void 0 && _config$ssr4.getSSRTimings ? config.ssr.getSSRTimings() : objectToArray(ssr.getSSRTimings())
675
+ SSRTimings: config !== null && config !== void 0 && (_config$ssr2 = config.ssr) !== null && _config$ssr2 !== void 0 && _config$ssr2.getSSRTimings ? config.ssr.getSSRTimings() : objectToArray(ssr.getSSRTimings())
728
676
  };
729
677
  };
678
+ if (experimental) {
679
+ expTTAI = getTTAI(interaction);
680
+ } else {
681
+ regularTTAI = getTTAI(interaction);
682
+ }
730
683
  const newUFOName = sanitizeUfoName(ufoName);
731
684
  const payload = {
732
685
  actionSubject: 'experience',
@@ -747,7 +700,7 @@ function createInteractionMetricsPayload(interaction, interactionId) {
747
700
  payloadSource: 'platform'
748
701
  },
749
702
  'event:region': config.region || 'unknown',
750
- 'experience:key': 'custom.interaction-metrics',
703
+ 'experience:key': experimental ? 'custom.experimental-interaction-metrics' : 'custom.interaction-metrics',
751
704
  'experience:name': newUFOName,
752
705
  // root
753
706
  ...getBrowserMetadata(),
@@ -756,10 +709,11 @@ function createInteractionMetricsPayload(interaction, interactionId) {
756
709
  ...getPaintMetrics(type),
757
710
  ...getNavigationMetrics(type),
758
711
  ...getVCMetrics(interaction),
712
+ ...(experimental ? getExperimentalVCMetrics(interaction) : undefined),
759
713
  ...((_config$additionalPay = config.additionalPayloadData) === null || _config$additionalPay === void 0 ? void 0 : _config$additionalPay.call(config, interaction)),
760
714
  ...getTracingContextData(interaction),
761
715
  ...getStylesheetMetrics(),
762
- errorCount: getGlobalErrorCount(),
716
+ ...getErrorCounts(interaction),
763
717
  interactionMetrics: {
764
718
  namePrefix: config.namePrefix || '',
765
719
  segmentPrefix: config.segmentPrefix || '',
@@ -791,17 +745,22 @@ function createInteractionMetricsPayload(interaction, interactionId) {
791
745
  marks: optimizeMarks(interaction.marks),
792
746
  customData: optimizeCustomData(interaction),
793
747
  reactProfilerTimings: optimizeReactProfilerTimings(interaction.reactProfilerTimings, start),
794
- errorCount: interaction.errors.length,
795
748
  ...labelStack,
796
749
  ...getPageLoadInteractionMetrics(),
797
750
  ...getDetailedInteractionMetrics(),
798
751
  ...getPageLoadDetailedInteractionMetrics(),
799
- ...getBm3TrackerTimings(interaction)
752
+ ...getBm3TrackerTimings(interaction),
753
+ 'metric:ttai': experimental ? regularTTAI || expTTAI : undefined,
754
+ 'metric:experimental:ttai': experimental ? expTTAI : undefined
800
755
  },
801
756
  'ufo:payloadTime': roundEpsilon(performance.now() - interactionPayloadStart)
802
757
  }
803
758
  }
804
759
  };
760
+ if (experimental) {
761
+ regularTTAI = undefined;
762
+ expTTAI = undefined;
763
+ }
805
764
  payload.attributes.properties['event:sizeInKb'] = getPayloadSize(payload.attributes.properties);
806
765
  return payload;
807
766
  }
@@ -47,10 +47,7 @@ function removeCascadingParentTimingReport(reactProfilerTimings) {
47
47
  if (parentSegmentId) {
48
48
  const parentTimings = timingIndex.get(parentSegmentId);
49
49
  const filteredParentTimings = parentTimings === null || parentTimings === void 0 ? void 0 : parentTimings.filter(parentTiming => {
50
- if (parentTiming.startTime === timing.startTime && parentTiming.actualDuration === timing.actualDuration) {
51
- return false;
52
- }
53
- return true;
50
+ return !(parentTiming.startTime === timing.startTime && parentTiming.actualDuration === timing.actualDuration);
54
51
  });
55
52
  if (filteredParentTimings) {
56
53
  timingIndex.set(parentSegmentId, filteredParentTimings);
@@ -1,2 +1,8 @@
1
1
  const interactions = new Map();
2
+ export const CLEANUP_TIMEOUT = 60 * 1000;
3
+ export const CLEANUP_TIMEOUT_AFTER_APDEX = 15 * 1000;
4
+ export const interactionQueue = [];
5
+ export const segmentCache = new Map();
6
+ export const segmentObservers = [];
7
+ export const moduleLoadingRequests = {};
2
8
  export default interactions;
@@ -0,0 +1,103 @@
1
+ import { getConfig } from '../../config';
2
+ import { interactionQueue, segmentCache, segmentObservers } from './constants';
3
+ export function isPerformanceTracingEnabled() {
4
+ var _getConfig;
5
+ return ((_getConfig = getConfig()) === null || _getConfig === void 0 ? void 0 : _getConfig.enableAdditionalPerformanceMarks) || window.__REACT_UFO_ENABLE_PERF_TRACING || process.env.NODE_ENV !== 'production';
6
+ }
7
+ export function labelStackToString(labelStack, name) {
8
+ var _stack$map;
9
+ const stack = [...(labelStack !== null && labelStack !== void 0 ? labelStack : [])];
10
+ if (name) {
11
+ stack.push({
12
+ name
13
+ });
14
+ }
15
+ return (_stack$map = stack.map(l => l.name)) === null || _stack$map === void 0 ? void 0 : _stack$map.join('/');
16
+ }
17
+ export function labelStackToIdString(labelStack) {
18
+ var _labelStack$map;
19
+ return labelStack === null || labelStack === void 0 ? void 0 : (_labelStack$map = labelStack.map(l => 'segmentId' in l ? `${l.name}:${l.segmentId}` : `${l.name}`)) === null || _labelStack$map === void 0 ? void 0 : _labelStack$map.join('/');
20
+ }
21
+ export function addSegmentObserver(observer) {
22
+ segmentObservers.push(observer);
23
+ for (const segmentInfo of segmentCache.values()) {
24
+ observer.onAdd(segmentInfo);
25
+ }
26
+ }
27
+ export function removeSegmentObserver(observer) {
28
+ const index = segmentObservers.findIndex(obs => obs === observer);
29
+ if (index !== -1) {
30
+ segmentObservers.splice(index, 1);
31
+ }
32
+ }
33
+ export function addHoldCriterion(id, labelStack, name, startTime) {
34
+ var _window$__CRITERION__;
35
+ if (!((_window$__CRITERION__ = window.__CRITERION__) !== null && _window$__CRITERION__ !== void 0 && _window$__CRITERION__.addUFOHold)) {
36
+ return;
37
+ }
38
+ window.__CRITERION__.addUFOHold(id, labelStackToString(labelStack), name, startTime);
39
+ }
40
+ export function removeHoldCriterion(id) {
41
+ var _window$__CRITERION__2;
42
+ if (!((_window$__CRITERION__2 = window.__CRITERION__) !== null && _window$__CRITERION__2 !== void 0 && _window$__CRITERION__2.removeUFOHold)) {
43
+ return;
44
+ }
45
+ window.__CRITERION__.removeUFOHold(id);
46
+ }
47
+ export const pushToQueue = (id, data) => {
48
+ interactionQueue.push({
49
+ id,
50
+ data
51
+ });
52
+ };
53
+ export function callCleanUpCallbacks(interaction) {
54
+ interaction.cleanupCallbacks.reverse().forEach(cleanUpCallback => {
55
+ cleanUpCallback();
56
+ });
57
+ }
58
+ export function reactProfilerTimingMap(data) {
59
+ const profilerTimingMap = new Map();
60
+ data.reactProfilerTimings.forEach(profilerTiming => {
61
+ const labelStackId = labelStackToIdString(profilerTiming.labelStack);
62
+ if (labelStackId) {
63
+ var _profilerTimingMap$ge, _timing$start, _timing$end;
64
+ const timing = (_profilerTimingMap$ge = profilerTimingMap.get(labelStackId)) !== null && _profilerTimingMap$ge !== void 0 ? _profilerTimingMap$ge : {
65
+ labelStack: profilerTiming.labelStack
66
+ };
67
+ timing.start = profilerTiming.startTime < ((_timing$start = timing.start) !== null && _timing$start !== void 0 ? _timing$start : Number.MAX_SAFE_INTEGER) ? profilerTiming.startTime : timing.start;
68
+ timing.end = profilerTiming.commitTime > ((_timing$end = timing.end) !== null && _timing$end !== void 0 ? _timing$end : Number.MIN_SAFE_INTEGER) ? profilerTiming.commitTime : timing.end;
69
+ profilerTimingMap.set(labelStackId, timing);
70
+ }
71
+ });
72
+ try {
73
+ // for Firefox 102 and older
74
+ for (const [, {
75
+ labelStack,
76
+ start,
77
+ end
78
+ }] of profilerTimingMap.entries()) {
79
+ performance.measure(`🛸 ${labelStackToString(labelStack)} [segment_ttai]`, {
80
+ start,
81
+ end
82
+ });
83
+ }
84
+ } catch (e) {
85
+ // do nothing
86
+ }
87
+ }
88
+ export function callCancelCallbacks(interaction) {
89
+ interaction.cancelCallbacks.reverse().forEach(cancelCallback => {
90
+ cancelCallback();
91
+ });
92
+ }
93
+ export function isSegmentLabel(obj) {
94
+ return obj && typeof obj.name === 'string' && typeof obj.segmentId === 'string';
95
+ }
96
+ export function getSegmentCacheKey(labelStack) {
97
+ return labelStack.map(l => {
98
+ if (isSegmentLabel(l)) {
99
+ return `${l.name}_${l.segmentId}`;
100
+ }
101
+ return l.name;
102
+ }).join('|');
103
+ }