@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.
- package/CHANGELOG.md +21 -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 +100 -0
- package/dist/cjs/create-payload/common/utils/index.js +65 -2
- package/dist/cjs/create-payload/index.js +55 -78
- package/dist/cjs/interaction-metrics/common/constants.js +8 -3
- package/dist/cjs/interaction-metrics/common/index.js +151 -0
- package/dist/cjs/interaction-metrics/index.js +166 -238
- package/dist/cjs/interaction-metrics-init/index.js +31 -9
- package/dist/cjs/load-hold/UFOLoadHold.js +5 -3
- package/dist/cjs/segment/segment.js +9 -8
- package/dist/cjs/vc/vc-observer/observers/ssr-placeholders/index.js +21 -4
- package/dist/es2019/config/index.js +22 -0
- package/dist/es2019/create-experimental-interaction-metrics-payload/index.js +71 -0
- package/dist/es2019/create-payload/common/utils/index.js +67 -1
- package/dist/es2019/create-payload/index.js +48 -77
- package/dist/es2019/interaction-metrics/common/constants.js +7 -2
- package/dist/es2019/interaction-metrics/common/index.js +103 -0
- package/dist/es2019/interaction-metrics/index.js +91 -131
- package/dist/es2019/interaction-metrics-init/index.js +28 -8
- package/dist/es2019/load-hold/UFOLoadHold.js +5 -3
- package/dist/es2019/segment/segment.js +8 -11
- package/dist/es2019/vc/vc-observer/observers/ssr-placeholders/index.js +21 -4
- package/dist/esm/config/index.js +39 -18
- package/dist/esm/create-experimental-interaction-metrics-payload/index.js +90 -0
- package/dist/esm/create-payload/common/utils/index.js +62 -1
- package/dist/esm/create-payload/index.js +53 -78
- package/dist/esm/interaction-metrics/common/constants.js +7 -2
- package/dist/esm/interaction-metrics/common/index.js +132 -0
- package/dist/esm/interaction-metrics/index.js +86 -158
- package/dist/esm/interaction-metrics-init/index.js +28 -8
- package/dist/esm/load-hold/UFOLoadHold.js +5 -3
- package/dist/esm/segment/segment.js +9 -8
- package/dist/esm/vc/vc-observer/observers/ssr-placeholders/index.js +21 -4
- package/dist/types/common/common/types.d.ts +6 -4
- package/dist/types/config/index.d.ts +6 -0
- package/dist/types/create-experimental-interaction-metrics-payload/index.d.ts +16 -0
- package/dist/types/create-payload/common/utils/index.d.ts +9 -0
- package/dist/types/create-payload/index.d.ts +13 -5660
- package/dist/types/interaction-context/index.d.ts +1 -0
- package/dist/types/interaction-metrics/common/constants.d.ts +32 -3
- package/dist/types/interaction-metrics/common/index.d.ts +16 -0
- package/dist/types/interaction-metrics/index.d.ts +1 -17
- package/dist/types/load-hold/UFOLoadHold.d.ts +1 -2
- package/dist/types-ts4.5/common/common/types.d.ts +6 -4
- package/dist/types-ts4.5/config/index.d.ts +6 -0
- package/dist/types-ts4.5/create-experimental-interaction-metrics-payload/index.d.ts +16 -0
- package/dist/types-ts4.5/create-payload/common/utils/index.d.ts +9 -0
- package/dist/types-ts4.5/create-payload/index.d.ts +13 -5660
- package/dist/types-ts4.5/interaction-context/index.d.ts +1 -0
- package/dist/types-ts4.5/interaction-metrics/common/constants.d.ts +32 -3
- package/dist/types-ts4.5/interaction-metrics/common/index.d.ts +16 -0
- package/dist/types-ts4.5/interaction-metrics/index.d.ts +1 -17
- package/dist/types-ts4.5/load-hold/UFOLoadHold.d.ts +1 -2
- 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$
|
|
216
|
+
var _interaction$apdex;
|
|
265
217
|
var start = interaction.start,
|
|
266
218
|
end = interaction.end;
|
|
267
219
|
var config = (0, _config.getConfig)();
|
|
268
|
-
var
|
|
269
|
-
var
|
|
270
|
-
var
|
|
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
|
-
|
|
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)({},
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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.
|
|
7
|
-
var interactions = new Map();
|
|
8
|
-
var
|
|
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
|
+
}
|