@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.
- package/CHANGELOG.md +25 -0
- package/create-experimental-interaction-metrics-payload/package.json +15 -0
- package/dist/cjs/config/index.js +40 -18
- package/dist/cjs/create-experimental-interaction-metrics-payload/index.js +89 -0
- package/dist/cjs/create-payload/common/utils/index.js +85 -1
- package/dist/cjs/create-payload/index.js +49 -85
- package/dist/cjs/create-post-interaction-log-payload/index.js +1 -4
- package/dist/cjs/interaction-metrics/common/constants.js +7 -1
- package/dist/cjs/interaction-metrics/common/index.js +151 -0
- package/dist/cjs/interaction-metrics/index.js +139 -204
- package/dist/cjs/interaction-metrics/post-interaction-log.js +6 -2
- package/dist/cjs/interaction-metrics-init/index.js +27 -9
- package/dist/cjs/load-hold/UFOLoadHold.js +3 -4
- package/dist/cjs/segment/segment.js +7 -9
- package/dist/cjs/trace-pageload/index.js +2 -1
- package/dist/cjs/vc/vc-observer/observers/index.js +1 -40
- package/dist/es2019/config/index.js +22 -0
- package/dist/es2019/create-experimental-interaction-metrics-payload/index.js +67 -0
- package/dist/es2019/create-payload/common/utils/index.js +86 -1
- package/dist/es2019/create-payload/index.js +40 -81
- package/dist/es2019/create-post-interaction-log-payload/index.js +1 -4
- package/dist/es2019/interaction-metrics/common/constants.js +6 -0
- package/dist/es2019/interaction-metrics/common/index.js +103 -0
- package/dist/es2019/interaction-metrics/index.js +92 -129
- package/dist/es2019/interaction-metrics/post-interaction-log.js +6 -2
- package/dist/es2019/interaction-metrics-init/index.js +21 -8
- package/dist/es2019/load-hold/UFOLoadHold.js +3 -4
- package/dist/es2019/segment/segment.js +6 -12
- package/dist/es2019/trace-pageload/index.js +1 -1
- package/dist/es2019/vc/vc-observer/observers/index.js +1 -20
- package/dist/esm/config/index.js +39 -18
- package/dist/esm/create-experimental-interaction-metrics-payload/index.js +81 -0
- package/dist/esm/create-payload/common/utils/index.js +80 -1
- package/dist/esm/create-payload/index.js +45 -83
- package/dist/esm/create-post-interaction-log-payload/index.js +1 -4
- package/dist/esm/interaction-metrics/common/constants.js +6 -0
- package/dist/esm/interaction-metrics/common/index.js +132 -0
- package/dist/esm/interaction-metrics/index.js +87 -156
- package/dist/esm/interaction-metrics/post-interaction-log.js +6 -2
- package/dist/esm/interaction-metrics-init/index.js +24 -10
- package/dist/esm/load-hold/UFOLoadHold.js +3 -4
- package/dist/esm/segment/segment.js +7 -9
- package/dist/esm/trace-pageload/index.js +1 -1
- package/dist/esm/vc/vc-observer/observers/index.js +1 -40
- package/dist/types/common/common/types.d.ts +9 -5
- package/dist/types/config/index.d.ts +6 -0
- package/dist/types/create-experimental-interaction-metrics-payload/index.d.ts +31 -0
- package/dist/types/create-payload/common/utils/index.d.ts +12 -0
- package/dist/types/create-payload/index.d.ts +13 -5716
- package/dist/types/create-post-interaction-log-payload/index.d.ts +2 -0
- package/dist/types/interaction-metrics/common/constants.d.ts +31 -1
- package/dist/types/interaction-metrics/common/index.d.ts +16 -0
- package/dist/types/interaction-metrics/index.d.ts +4 -15
- package/dist/types/interaction-metrics/post-interaction-log.d.ts +1 -1
- package/dist/types/load-hold/UFOLoadHold.d.ts +1 -2
- package/dist/types/trace-pageload/index.d.ts +1 -0
- package/dist/types/vc/vc-observer/observers/index.d.ts +0 -1
- package/dist/types-ts4.5/common/common/types.d.ts +9 -5
- package/dist/types-ts4.5/config/index.d.ts +6 -0
- package/dist/types-ts4.5/create-experimental-interaction-metrics-payload/index.d.ts +31 -0
- package/dist/types-ts4.5/create-payload/common/utils/index.d.ts +12 -0
- package/dist/types-ts4.5/create-payload/index.d.ts +13 -5716
- package/dist/types-ts4.5/create-post-interaction-log-payload/index.d.ts +2 -0
- package/dist/types-ts4.5/interaction-metrics/common/constants.d.ts +31 -1
- package/dist/types-ts4.5/interaction-metrics/common/index.d.ts +16 -0
- package/dist/types-ts4.5/interaction-metrics/index.d.ts +4 -15
- package/dist/types-ts4.5/interaction-metrics/post-interaction-log.d.ts +1 -1
- package/dist/types-ts4.5/load-hold/UFOLoadHold.d.ts +1 -2
- package/dist/types-ts4.5/trace-pageload/index.d.ts +1 -0
- package/dist/types-ts4.5/vc/vc-observer/observers/index.d.ts +0 -1
- 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
|
|
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 {
|
|
16
|
-
|
|
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$
|
|
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$
|
|
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
|
-
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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
|
-
|
|
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
|
-
|
|
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
|
+
}
|