@atlaskit/react-ufo 5.4.0 → 5.4.2
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/AGENTS.md +20 -9
- package/CHANGELOG.md +16 -0
- package/api-reference.md +899 -456
- package/dist/cjs/config/index.js +13 -6
- package/dist/cjs/create-interaction-extra-metrics-payload/index.js +19 -18
- package/dist/cjs/create-payload/index.js +2 -2
- package/dist/cjs/ignore-holds/index.js +5 -3
- package/dist/cjs/segment/segment.js +5 -3
- package/dist/cjs/segment/third-party-segment.js +4 -3
- package/dist/cjs/vc/vc-observer-new/viewport-observer/index.js +23 -18
- package/dist/es2019/config/index.js +12 -8
- package/dist/es2019/create-interaction-extra-metrics-payload/index.js +6 -5
- package/dist/es2019/create-payload/index.js +1 -1
- package/dist/es2019/ignore-holds/index.js +5 -3
- package/dist/es2019/segment/segment.js +5 -3
- package/dist/es2019/segment/third-party-segment.js +3 -2
- package/dist/es2019/vc/vc-observer-new/viewport-observer/index.js +7 -2
- package/dist/esm/config/index.js +12 -6
- package/dist/esm/create-interaction-extra-metrics-payload/index.js +20 -19
- package/dist/esm/create-payload/index.js +2 -2
- package/dist/esm/ignore-holds/index.js +4 -2
- package/dist/esm/segment/segment.js +4 -2
- package/dist/esm/segment/third-party-segment.js +3 -2
- package/dist/esm/vc/vc-observer-new/viewport-observer/index.js +21 -16
- package/dist/types/common/react-ufo-payload-schema.d.ts +1 -1
- package/dist/types/config/index.d.ts +2 -1
- package/dist/types/ignore-holds/index.d.ts +5 -1
- package/dist/types/segment/segment.d.ts +5 -1
- package/dist/types/segment/third-party-segment.d.ts +4 -1
- package/dist/types/vc/vc-observer-new/viewport-observer/index.d.ts +1 -0
- package/dist/types-ts4.5/common/react-ufo-payload-schema.d.ts +1 -1
- package/dist/types-ts4.5/config/index.d.ts +2 -1
- package/dist/types-ts4.5/ignore-holds/index.d.ts +5 -1
- package/dist/types-ts4.5/segment/segment.d.ts +5 -1
- package/dist/types-ts4.5/segment/third-party-segment.d.ts +4 -1
- package/dist/types-ts4.5/vc/vc-observer-new/viewport-observer/index.d.ts +1 -0
- package/package.json +7 -1
package/dist/cjs/config/index.js
CHANGED
|
@@ -8,6 +8,7 @@ exports.UNKNOWN_INTERACTION_RATE = exports.DEFAULT_TTVC_REVISION = exports.CLEAN
|
|
|
8
8
|
exports.getAwaitBM3TTIList = getAwaitBM3TTIList;
|
|
9
9
|
exports.getCapabilityRate = getCapabilityRate;
|
|
10
10
|
exports.getConfig = getConfig;
|
|
11
|
+
exports.getDefaultTTVCRevision = getDefaultTTVCRevision;
|
|
11
12
|
exports.getDoNotAbortActivePressInteraction = getDoNotAbortActivePressInteraction;
|
|
12
13
|
exports.getDoNotAbortActivePressInteractionOnTransition = getDoNotAbortActivePressInteractionOnTransition;
|
|
13
14
|
exports.getEnabledVCRevisions = getEnabledVCRevisions;
|
|
@@ -34,7 +35,10 @@ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
|
34
35
|
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; }
|
|
35
36
|
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) { (0, _defineProperty2.default)(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; }
|
|
36
37
|
var config;
|
|
37
|
-
var DEFAULT_TTVC_REVISION = exports.DEFAULT_TTVC_REVISION = '
|
|
38
|
+
var DEFAULT_TTVC_REVISION = exports.DEFAULT_TTVC_REVISION = 'fy26.04';
|
|
39
|
+
function getDefaultTTVCRevision() {
|
|
40
|
+
return (0, _platformFeatureFlags.fg)('ufo_update_and_enforce_ttvc_v4_default_version') ? DEFAULT_TTVC_REVISION : 'fy25.03';
|
|
41
|
+
}
|
|
38
42
|
var UNKNOWN_INTERACTION_RATE = exports.UNKNOWN_INTERACTION_RATE = 1000;
|
|
39
43
|
|
|
40
44
|
// Defensively typed, since this is directly user-editable
|
|
@@ -45,13 +49,16 @@ function setUFOConfig(newConfig) {
|
|
|
45
49
|
// Handle edge cases with `enabledVCRevisions`
|
|
46
50
|
var _ref = (_newConfig$vc = newConfig === null || newConfig === void 0 ? void 0 : newConfig.vc) !== null && _newConfig$vc !== void 0 ? _newConfig$vc : {},
|
|
47
51
|
enabledVCRevisions = _ref.enabledVCRevisions;
|
|
48
|
-
if ((0, _typeof2.default)(enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.byExperience) === 'object') {
|
|
52
|
+
if ((0, _platformFeatureFlags.fg)('ufo_update_and_enforce_ttvc_v4_default_version') ? enabledVCRevisions : (0, _typeof2.default)(enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.byExperience) === 'object') {
|
|
53
|
+
var _enabledVCRevisions$a;
|
|
54
|
+
var byExperience = (0, _typeof2.default)(enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.byExperience) === 'object' ? enabledVCRevisions.byExperience : {};
|
|
49
55
|
config = _objectSpread(_objectSpread({}, newConfig), {}, {
|
|
50
56
|
vc: _objectSpread(_objectSpread({}, newConfig.vc), {}, {
|
|
51
57
|
enabledVCRevisions: {
|
|
52
|
-
// enforce axiom about `enabledVCRevisions.all` config
|
|
53
|
-
|
|
54
|
-
|
|
58
|
+
// enforce axiom about `enabledVCRevisions.all` config:
|
|
59
|
+
// DEFAULT_TTVC_REVISION must always be present in `all`
|
|
60
|
+
all: Array.from(new Set([getDefaultTTVCRevision()].concat((0, _toConsumableArray2.default)((_enabledVCRevisions$a = enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.all) !== null && _enabledVCRevisions$a !== void 0 ? _enabledVCRevisions$a : []), (0, _toConsumableArray2.default)(Object.values(byExperience).flat())))),
|
|
61
|
+
byExperience: byExperience
|
|
55
62
|
}
|
|
56
63
|
})
|
|
57
64
|
});
|
|
@@ -102,7 +109,7 @@ function getEnabledVCRevisions() {
|
|
|
102
109
|
if (isValidConfigArray(enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.all)) {
|
|
103
110
|
return enabledVCRevisions.all;
|
|
104
111
|
}
|
|
105
|
-
return [
|
|
112
|
+
return [getDefaultTTVCRevision()];
|
|
106
113
|
}
|
|
107
114
|
return [];
|
|
108
115
|
} catch (_unused) {
|
|
@@ -36,8 +36,8 @@ function createInteractionExtraLogPayload(_x, _x2, _x3, _x4) {
|
|
|
36
36
|
}
|
|
37
37
|
function _createInteractionExtraLogPayload() {
|
|
38
38
|
_createInteractionExtraLogPayload = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(interactionId, interaction, lastInteractionFinish, lastInteractionFinishVCResult) {
|
|
39
|
-
var _getTTAI, _lastInteractionFinis, _getTTAI2, _window$location;
|
|
40
|
-
var config, end, start, ufoName, rate, type, abortReason, routeName, previousInteractionName, isPreviousInteractionAborted, abortedByInteractionName, knownSegments, minorInteractions, sanitisedUfoName, configRate, pageVisibilityAtTTAI, isPageLoad, calculatePageVisibilityFromTheStartOfPageLoad, moreAccuratePageVisibilityAtTTAI, extraTTAI, newUFOName, finalVCMetrics, vcRevisionPayload, effectiveVCRevisionPayload, normalTTAI, lastInteractionFinishStart, lastInteractionFinishEnd, lastInteractionFinishVC90, lastInteractionFinishVCClean, lastInteractionFinishVCRev, lastInteractionFinishRevision, isThirdParty, filteredData, getDetailedInteractionMetrics, segments3p, segmentTree, payload;
|
|
39
|
+
var _getTTAI, _getMostRecentVCRevis, _lastInteractionFinis, _getTTAI2, _window$location;
|
|
40
|
+
var config, end, start, ufoName, rate, type, abortReason, routeName, previousInteractionName, isPreviousInteractionAborted, abortedByInteractionName, knownSegments, minorInteractions, sanitisedUfoName, configRate, pageVisibilityAtTTAI, isPageLoad, calculatePageVisibilityFromTheStartOfPageLoad, moreAccuratePageVisibilityAtTTAI, extraTTAI, newUFOName, finalVCMetrics, vcRevisionPayload, effectiveRevision, effectiveVCRevisionPayload, normalTTAI, lastInteractionFinishStart, lastInteractionFinishEnd, lastInteractionFinishVC90, lastInteractionFinishVCClean, lastInteractionFinishVCRev, lastInteractionFinishRevision, isThirdParty, filteredData, getDetailedInteractionMetrics, segments3p, segmentTree, payload;
|
|
41
41
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
42
42
|
while (1) switch (_context.prev = _context.next) {
|
|
43
43
|
case 0:
|
|
@@ -75,56 +75,57 @@ function _createInteractionExtraLogPayload() {
|
|
|
75
75
|
finalVCMetrics = _context.sent;
|
|
76
76
|
// Check if VC is clean and has valid metric
|
|
77
77
|
vcRevisionPayload = finalVCMetrics === null || finalVCMetrics === void 0 ? void 0 : finalVCMetrics['ufo:vc:rev'];
|
|
78
|
+
effectiveRevision = (0, _platformFeatureFlags.fg)('ufo_update_and_enforce_ttvc_v4_default_version') ? (_getMostRecentVCRevis = (0, _config.getMostRecentVCRevision)(ufoName)) !== null && _getMostRecentVCRevis !== void 0 ? _getMostRecentVCRevis : _config.DEFAULT_TTVC_REVISION : (0, _config.getDefaultTTVCRevision)();
|
|
78
79
|
effectiveVCRevisionPayload = vcRevisionPayload === null || vcRevisionPayload === void 0 ? void 0 : vcRevisionPayload.find(function (_ref) {
|
|
79
80
|
var revision = _ref.revision;
|
|
80
|
-
return revision ===
|
|
81
|
+
return revision === effectiveRevision;
|
|
81
82
|
});
|
|
82
83
|
if (!(!(effectiveVCRevisionPayload !== null && effectiveVCRevisionPayload !== void 0 && effectiveVCRevisionPayload.clean) || (effectiveVCRevisionPayload === null || effectiveVCRevisionPayload === void 0 ? void 0 : effectiveVCRevisionPayload['metric:vc90']) === undefined || typeof (effectiveVCRevisionPayload === null || effectiveVCRevisionPayload === void 0 ? void 0 : effectiveVCRevisionPayload['metric:vc90']) !== 'number' || extraTTAI === undefined || typeof extraTTAI !== 'number' || interaction.errors.length > 0)) {
|
|
83
|
-
_context.next =
|
|
84
|
+
_context.next = 24;
|
|
84
85
|
break;
|
|
85
86
|
}
|
|
86
87
|
return _context.abrupt("return", null);
|
|
87
|
-
case
|
|
88
|
+
case 24:
|
|
88
89
|
if (!(!lastInteractionFinish || lastInteractionFinish !== null && lastInteractionFinish !== void 0 && lastInteractionFinish.abortReason || lastInteractionFinish !== null && lastInteractionFinish !== void 0 && (_lastInteractionFinis = lastInteractionFinish.errors) !== null && _lastInteractionFinis !== void 0 && _lastInteractionFinis.length)) {
|
|
89
|
-
_context.next =
|
|
90
|
+
_context.next = 26;
|
|
90
91
|
break;
|
|
91
92
|
}
|
|
92
93
|
return _context.abrupt("return", null);
|
|
93
|
-
case
|
|
94
|
+
case 26:
|
|
94
95
|
normalTTAI = (_getTTAI2 = (0, _getTtai.default)(lastInteractionFinish)) !== null && _getTTAI2 !== void 0 ? _getTTAI2 : undefined;
|
|
95
96
|
lastInteractionFinishStart = typeof lastInteractionFinish.start === 'number' ? Math.round(lastInteractionFinish.start) : undefined;
|
|
96
97
|
lastInteractionFinishEnd = typeof lastInteractionFinish.end === 'number' ? Math.round(lastInteractionFinish.end) : undefined;
|
|
97
98
|
lastInteractionFinishVC90 = null;
|
|
98
99
|
lastInteractionFinishVCClean = false;
|
|
99
100
|
if (!lastInteractionFinishVCResult) {
|
|
100
|
-
_context.next =
|
|
101
|
+
_context.next = 42;
|
|
101
102
|
break;
|
|
102
103
|
}
|
|
103
104
|
lastInteractionFinishVCRev = lastInteractionFinishVCResult['ufo:vc:rev'];
|
|
104
105
|
lastInteractionFinishRevision = lastInteractionFinishVCRev === null || lastInteractionFinishVCRev === void 0 ? void 0 : lastInteractionFinishVCRev.find(function (_ref2) {
|
|
105
106
|
var revision = _ref2.revision;
|
|
106
|
-
return revision ===
|
|
107
|
+
return revision === effectiveRevision;
|
|
107
108
|
});
|
|
108
109
|
if (!(lastInteractionFinishRevision !== null && lastInteractionFinishRevision !== void 0 && lastInteractionFinishRevision.clean)) {
|
|
109
|
-
_context.next =
|
|
110
|
+
_context.next = 39;
|
|
110
111
|
break;
|
|
111
112
|
}
|
|
112
113
|
lastInteractionFinishVCClean = true;
|
|
113
114
|
lastInteractionFinishVC90 = lastInteractionFinishRevision['metric:vc90'];
|
|
114
|
-
_context.next =
|
|
115
|
+
_context.next = 40;
|
|
115
116
|
break;
|
|
116
|
-
case 38:
|
|
117
|
-
return _context.abrupt("return", null);
|
|
118
117
|
case 39:
|
|
119
|
-
_context.
|
|
118
|
+
return _context.abrupt("return", null);
|
|
119
|
+
case 40:
|
|
120
|
+
_context.next = 43;
|
|
120
121
|
break;
|
|
121
|
-
case
|
|
122
|
+
case 42:
|
|
122
123
|
if (normalTTAI !== undefined && typeof normalTTAI === 'number' && normalTTAI === extraTTAI) {
|
|
123
124
|
// Because TTAI is equal between with and without 3p, we can assume VC90 is also equal
|
|
124
125
|
lastInteractionFinishVC90 = effectiveVCRevisionPayload === null || effectiveVCRevisionPayload === void 0 ? void 0 : effectiveVCRevisionPayload['metric:vc90'];
|
|
125
126
|
lastInteractionFinishVCClean = effectiveVCRevisionPayload === null || effectiveVCRevisionPayload === void 0 ? void 0 : effectiveVCRevisionPayload.clean;
|
|
126
127
|
}
|
|
127
|
-
case
|
|
128
|
+
case 43:
|
|
128
129
|
// Helper function to check if labelStack contains third-party type
|
|
129
130
|
isThirdParty = function isThirdParty(labelStack) {
|
|
130
131
|
var _labelStack$some;
|
|
@@ -230,7 +231,7 @@ function _createInteractionExtraLogPayload() {
|
|
|
230
231
|
reactProfilerTimings: (0, _optimizeReactProfilerTimings.optimizeReactProfilerTimings)(filteredData.reactProfilerTimings, start, (0, _getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),
|
|
231
232
|
customData: filteredData.customData
|
|
232
233
|
}, getDetailedInteractionMetrics()),
|
|
233
|
-
'vc:effective:revision':
|
|
234
|
+
'vc:effective:revision': effectiveRevision,
|
|
234
235
|
lastInteractionFinish: {
|
|
235
236
|
start: lastInteractionFinishStart,
|
|
236
237
|
end: lastInteractionFinishEnd,
|
|
@@ -243,7 +244,7 @@ function _createInteractionExtraLogPayload() {
|
|
|
243
244
|
};
|
|
244
245
|
payload.attributes.properties['event:sizeInKb'] = (0, _getPayloadSize.default)(payload.attributes.properties);
|
|
245
246
|
return _context.abrupt("return", payload);
|
|
246
|
-
case
|
|
247
|
+
case 52:
|
|
247
248
|
case "end":
|
|
248
249
|
return _context.stop();
|
|
249
250
|
}
|
|
@@ -9,9 +9,9 @@ try{return acc+item.cssRules.length;}catch(_unused3){return acc;}},0);var styleE
|
|
|
9
9
|
getInitialPageLoadSSRMetrics=function getInitialPageLoadSSRMetrics(){var _config$ssr;if(!isPageLoad){return{};}var config=(0,_config.getConfig)();var SSRDoneTimeValue=(0,_getSsrDoneTimeValue.default)(config);var SSRDoneTime=SSRDoneTimeValue!==undefined?{SSRDoneTime:Math.round(SSRDoneTimeValue)}:{};var isBM3ConfigSSRDoneAsFmp=interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp;var isUFOConfigSSRDoneAsFmp=interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp||!!(config!==null&&config!==void 0&&(_config$ssr=config.ssr)!==null&&_config$ssr!==void 0&&_config$ssr.getSSRDoneTime);if(!experimental&&(isBM3ConfigSSRDoneAsFmp||isUFOConfigSSRDoneAsFmp)&&SSRDoneTimeValue!==undefined){try{performance.mark("FMP",{startTime:SSRDoneTimeValue,detail:{devtools:{dataType:'marker'}}});}catch(_unused6){}}return _objectSpread(_objectSpread({},SSRDoneTime),{},{isBM3ConfigSSRDoneAsFmp:isBM3ConfigSSRDoneAsFmp,isUFOConfigSSRDoneAsFmp:isUFOConfigSSRDoneAsFmp});};pageLoadInteractionMetrics=getInitialPageLoadSSRMetrics();// Detailed payload. Page visibility = visible
|
|
10
10
|
getDetailedInteractionMetrics=function getDetailedInteractionMetrics(resourceTimings){if(experimental||window.__UFO_COMPACT_PAYLOAD__||!isDetailedPayload){return{};}var spans=[].concat((0,_toConsumableArray2.default)(interaction.spans),(0,_toConsumableArray2.default)(_interactionMetrics.interactionSpans));_interactionMetrics.interactionSpans.length=0;var shouldInclude3pHolds=(0,_config.shouldUseRawDataThirdPartyBehavior)(ufoName,type);var basePayload={errors:interaction.errors.map(function(_ref2){var labelStack=_ref2.labelStack,others=(0,_objectWithoutProperties2.default)(_ref2,_excluded);return _objectSpread(_objectSpread({},others),{},{labelStack:labelStack&&(0,_utils.optimizeLabelStack)(labelStack,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type))});}),holdActive:(0,_toConsumableArray2.default)(interaction.holdActive.values()),redirects:optimizeRedirects(interaction.redirects,start),holdInfo:(0,_optimizeHoldInfo.optimizeHoldInfo)(experimental?interaction.holdExpInfo:interaction.holdInfo,start,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),spans:(0,_optimizeSpans.optimizeSpans)(spans,start,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),requestInfo:(0,_optimizeRequestInfo.optimizeRequestInfo)(interaction.requestInfo,start,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),customTimings:(0,_optimizeCustomTimings.optimizeCustomTimings)(interaction.customTimings,start),bundleEvalTimings:objectToArray(getBundleEvalTimings(start)),resourceTimings:objectToArray(resourceTimings)};// Include third-party holds when feature flag is active
|
|
11
11
|
if(shouldInclude3pHolds){var _interaction$hold3pIn;return _objectSpread(_objectSpread({},basePayload),{},{hold3pActive:interaction.hold3pActive?(0,_toConsumableArray2.default)(interaction.hold3pActive.values()):[],hold3pInfo:(0,_optimizeHoldInfo.optimizeHoldInfo)((_interaction$hold3pIn=interaction.hold3pInfo)!==null&&_interaction$hold3pIn!==void 0?_interaction$hold3pIn:[],start,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type))});}return basePayload;};// Page load & detailed payload
|
|
12
|
-
getPageLoadDetailedInteractionMetrics=function getPageLoadDetailedInteractionMetrics(){var _config$ssr2,_config$ssr2$getSSRTi;if(!isPageLoad||!isDetailedPayload){return{};}var initialPageLoadExtraTimings=objectToArray(initialPageLoadExtraTiming.getTimings());var config=(0,_config.getConfig)();var defaultSSRTimings=objectToArray(ssr.getSSRTimings());var ssrTimingsFromConfig=config===null||config===void 0||(_config$ssr2=config.ssr)===null||_config$ssr2===void 0||(_config$ssr2$getSSRTi=_config$ssr2.getSSRTimings)===null||_config$ssr2$getSSRTi===void 0?void 0:_config$ssr2$getSSRTi.call(_config$ssr2);return{initialPageLoadExtraTimings:initialPageLoadExtraTimings,SSRTimings:ssrTimingsFromConfig?[].concat((0,_toConsumableArray2.default)(ssrTimingsFromConfig),(0,_toConsumableArray2.default)(defaultSSRTimings)):defaultSSRTimings};};if(experimental){expTTAI=(0,_getTtai.default)(interaction);}else{regularTTAI=(0,_getTtai.default)(interaction);}newUFOName=(0,_utils.sanitizeUfoName)(ufoName);resourceTimings=getResourceTimings(start,end);_context.t0=Promise;_context.t1=vcMetrics;if(_context.t1){_context.next=29;break;}_context.next=28;return(0,_getVcMetrics.default)(interaction);case 28:_context.t1=_context.sent;case 29:_context.t2=_context.t1;_context.t3=experimental?(0,_createExperimentalInteractionMetricsPayload.getExperimentalVCMetrics)(interaction):Promise.resolve(undefined);_context.t4=(0,_getPaintMetrics.getPaintMetricsToLegacyFormat)(type,end);_context.t5=(0,_getBatteryInfo.getBatteryInfoToLegacyFormat)();_context.t6=[_context.t2,_context.t3,_context.t4,_context.t5];_context.next=36;return _context.t0.all.call(_context.t0,_context.t6);case 36:_yield$Promise$all=_context.sent;_yield$Promise$all2=(0,_slicedToArray2.default)(_yield$Promise$all,4);finalVCMetrics=_yield$Promise$all2[0];experimentalMetrics=_yield$Promise$all2[1];paintMetrics=_yield$Promise$all2[2];batteryInfo=_yield$Promise$all2[3];if(!experimental){(0,_addPerformanceMeasures.addPerformanceMeasures)(interaction.start,(0,_toConsumableArray2.default)((finalVCMetrics===null||finalVCMetrics===void 0?void 0:finalVCMetrics['ufo:vc:rev'])||[]));}getReactHydrationStats=function getReactHydrationStats(){if(!hydration){return{};}return{hydration:hydration};};payload={actionSubject:'experience',action:'measured',eventType:'operational',source:'measured',tags:['observability'],attributes:{properties:_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(
|
|
12
|
+
getPageLoadDetailedInteractionMetrics=function getPageLoadDetailedInteractionMetrics(){var _config$ssr2,_config$ssr2$getSSRTi;if(!isPageLoad||!isDetailedPayload){return{};}var initialPageLoadExtraTimings=objectToArray(initialPageLoadExtraTiming.getTimings());var config=(0,_config.getConfig)();var defaultSSRTimings=objectToArray(ssr.getSSRTimings());var ssrTimingsFromConfig=config===null||config===void 0||(_config$ssr2=config.ssr)===null||_config$ssr2===void 0||(_config$ssr2$getSSRTi=_config$ssr2.getSSRTimings)===null||_config$ssr2$getSSRTi===void 0?void 0:_config$ssr2$getSSRTi.call(_config$ssr2);return{initialPageLoadExtraTimings:initialPageLoadExtraTimings,SSRTimings:ssrTimingsFromConfig?[].concat((0,_toConsumableArray2.default)(ssrTimingsFromConfig),(0,_toConsumableArray2.default)(defaultSSRTimings)):defaultSSRTimings};};if(experimental){expTTAI=(0,_getTtai.default)(interaction);}else{regularTTAI=(0,_getTtai.default)(interaction);}newUFOName=(0,_utils.sanitizeUfoName)(ufoName);resourceTimings=getResourceTimings(start,end);_context.t0=Promise;_context.t1=vcMetrics;if(_context.t1){_context.next=29;break;}_context.next=28;return(0,_getVcMetrics.default)(interaction);case 28:_context.t1=_context.sent;case 29:_context.t2=_context.t1;_context.t3=experimental?(0,_createExperimentalInteractionMetricsPayload.getExperimentalVCMetrics)(interaction):Promise.resolve(undefined);_context.t4=(0,_getPaintMetrics.getPaintMetricsToLegacyFormat)(type,end);_context.t5=(0,_getBatteryInfo.getBatteryInfoToLegacyFormat)();_context.t6=[_context.t2,_context.t3,_context.t4,_context.t5];_context.next=36;return _context.t0.all.call(_context.t0,_context.t6);case 36:_yield$Promise$all=_context.sent;_yield$Promise$all2=(0,_slicedToArray2.default)(_yield$Promise$all,4);finalVCMetrics=_yield$Promise$all2[0];experimentalMetrics=_yield$Promise$all2[1];paintMetrics=_yield$Promise$all2[2];batteryInfo=_yield$Promise$all2[3];if(!experimental){(0,_addPerformanceMeasures.addPerformanceMeasures)(interaction.start,(0,_toConsumableArray2.default)((finalVCMetrics===null||finalVCMetrics===void 0?void 0:finalVCMetrics['ufo:vc:rev'])||[]));}getReactHydrationStats=function getReactHydrationStats(){if(!hydration){return{};}return{hydration:hydration};};payload={actionSubject:'experience',action:'measured',eventType:'operational',source:'measured',tags:['observability'],attributes:{properties:_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({// basic
|
|
13
13
|
'event:hostname':((_window$location=window.location)===null||_window$location===void 0?void 0:_window$location.hostname)||'unknown','event:product':config.product,'event:population':config.population,'event:schema':'1.0.0','event:sizeInKb':0,'event:source':{name:'react-ufo/web',version:(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)},'event:region':config.region||'unknown','experience:key':experimental?'custom.experimental-interaction-metrics':'custom.interaction-metrics','experience:name':newUFOName,// Include CPU usage monitoring data
|
|
14
|
-
'event:cpu:usage':(0,_machineUtilisation.createPressureStateReport)(interaction.start,interaction.end),'event:memory:usage':(0,_machineUtilisation.createMemoryStateReport)(interaction.start,interaction.end)},criticalPayloadCount!==undefined?{'ufo:multipayload':true,'ufo:criticalPayloadCount':criticalPayloadCount}:{}),{},{'ufo:pageVisibilityHiddenTimestamp':(0,_hiddenTiming.getEarliestHiddenTiming)(interaction.start,interaction.end),'ufo:wasPageHiddenBeforeInit':(0,_hiddenTiming.getHasHiddenTimingBeforeSetup)(),'ufo:isOpenedInBackground':(0,_hiddenTiming.isOpenedInBackground)(interaction.type),'ufo:isTabThrottled':(0,_hiddenTiming.isTabThrottled)(start,end)
|
|
14
|
+
'event:cpu:usage':(0,_machineUtilisation.createPressureStateReport)(interaction.start,interaction.end),'event:memory:usage':(0,_machineUtilisation.createMemoryStateReport)(interaction.start,interaction.end)},criticalPayloadCount!==undefined?{'ufo:multipayload':true,'ufo:criticalPayloadCount':criticalPayloadCount}:{}),{},{'ufo:pageVisibilityHiddenTimestamp':(0,_hiddenTiming.getEarliestHiddenTiming)(interaction.start,interaction.end),'ufo:wasPageHiddenBeforeInit':(0,_hiddenTiming.getHasHiddenTimingBeforeSetup)(),'ufo:isOpenedInBackground':(0,_hiddenTiming.isOpenedInBackground)(interaction.type),'ufo:isTabThrottled':(0,_hiddenTiming.isTabThrottled)(start,end),'ufo:pageVisibilityTimeline':(0,_hiddenTiming.getPageVisibilityTimeline)(start,end)},(0,_platformFeatureFlags.fg)('ufo_detect_aborting_interaction_during_ssr')?{'ufo:hasAbortingInteractionDuringSSR':(0,_vcObserverNew.getHasAbortingEventDuringSSR)()}:{}),(0,_getBrowserMetadata.getBrowserMetadataToLegacyFormat)()),batteryInfo),getSSRProperties(type)),getAssetsMetrics(interaction,pageLoadInteractionMetrics===null||pageLoadInteractionMetrics===void 0?void 0:pageLoadInteractionMetrics.SSRDoneTime)),getPPSMetrics(interaction)),paintMetrics),(0,_getNavigationMetrics.getNavigationMetricsToLegacyFormat)(type)),finalVCMetrics),experimentalMetrics),(_config$additionalPay=config.additionalPayloadData)===null||_config$additionalPay===void 0?void 0:_config$additionalPay.call(config,interaction)),getTracingContextData(interaction)),getStylesheetMetrics()),getErrorCounts(interaction)),getReactHydrationStats()),{},{interactionMetrics:_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({namePrefix:config.namePrefix||'',segmentPrefix:config.segmentPrefix||'',interactionId:interactionId,pageVisibilityAtTTI:pageVisibilityAtTTI,pageVisibilityAtTTAI:pageVisibilityAtTTAI,experimental__pageVisibilityAtTTI:moreAccuratePageVisibilityAtTTI,experimental__pageVisibilityAtTTAI:moreAccuratePageVisibilityAtTTAI,// raw interaction metrics
|
|
15
15
|
rate:rate,routeName:routeName,type:type,abortReason:abortReason,featureFlags:featureFlags,previousInteractionName:previousInteractionName,isPreviousInteractionAborted:isPreviousInteractionAborted,abortedByInteractionName:abortedByInteractionName,// performance
|
|
16
16
|
apdex:(0,_optimizeApdex.optimizeApdex)(interaction.apdex,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),end:Math.round(end)},interaction.end3p?{end3p:Math.round(interaction.end3p)}:{}),{},{start:Math.round(start),segments:(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)==='2.0.0'?segmentTree:(0,_utils.getOldSegmentsLabelStack)(segments,interaction.type),marks:(0,_optimizeMarks.optimizeMarks)(interaction.marks,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),customData:optimizeCustomData(interaction),reactProfilerTimings:(0,_optimizeReactProfilerTimings.optimizeReactProfilerTimings)(interaction.reactProfilerTimings,start,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),minorInteractions:interaction.minorInteractions},responsiveness?{responsiveness:responsiveness}:{}),labelStack),pageLoadInteractionMetrics),getDetailedInteractionMetrics(resourceTimings)),getPageLoadDetailedInteractionMetrics()),getBm3TrackerTimings(interaction)),{},{'metric:ttai':experimental?regularTTAI||expTTAI:undefined,'metric:experimental:ttai':expTTAI},unknownElementName?{unknownElementName:unknownElementName}:{}),unknownElementHierarchy?{unknownElementHierarchy:unknownElementHierarchy}:{}),'ufo:payloadTime':(0,_roundNumber.roundEpsilon)(performance.now()-interactionPayloadStart)})}};if(experimental){regularTTAI=undefined;expTTAI=undefined;}if((0,_platformFeatureFlags.fg)('platform_ufo_enable_vc_raw_data')){size=(0,_getPayloadSize.default)(payload.attributes.properties);vcRev=payload.attributes.properties['ufo:vc:rev'];rawData=vcRev.find(function(item){return item.revision==='raw-handler';});if(rawData){rawDataSize=(0,_getPayloadSize.default)(rawData);payload.attributes.properties['ufo:vc:raw:size']=rawDataSize;if(size>MAX_PAYLOAD_SIZE&&Array.isArray(vcRev)&&vcRev.length>0){payload.attributes.properties['ufo:vc:rev']=vcRev.filter(function(item){return item.revision!=='raw-handler';});payload.attributes.properties['ufo:vc:raw:removed']=true;}}payload.attributes.properties['event:sizeInKb']=(0,_getPayloadSize.default)(payload.attributes.properties);}else{payload.attributes.properties['event:sizeInKb']=(0,_getPayloadSize.default)(payload.attributes.properties);}// in order of importance, first one being least important
|
|
17
17
|
// we can add more fields as necessary
|
|
@@ -5,7 +5,7 @@ var _typeof = require("@babel/runtime/helpers/typeof");
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.default =
|
|
8
|
+
exports.default = void 0;
|
|
9
9
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
11
11
|
var _interactionContext = _interopRequireDefault(require("@atlaskit/interaction-context"));
|
|
@@ -31,7 +31,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
31
31
|
* Has an `ignore` prop, to allow you to use it conditionally
|
|
32
32
|
* Has a `reason` prop, to specify why the hold is being ignored
|
|
33
33
|
*/
|
|
34
|
-
function UFOIgnoreHolds(_ref) {
|
|
34
|
+
var UFOIgnoreHolds = function UFOIgnoreHolds(_ref) {
|
|
35
35
|
var children = _ref.children,
|
|
36
36
|
_ref$ignore = _ref.ignore,
|
|
37
37
|
ignore = _ref$ignore === void 0 ? true : _ref$ignore;
|
|
@@ -57,4 +57,6 @@ function UFOIgnoreHolds(_ref) {
|
|
|
57
57
|
return /*#__PURE__*/_react.default.createElement(_interactionContext.default.Provider, {
|
|
58
58
|
value: ignoredInteractionContext
|
|
59
59
|
}, kids);
|
|
60
|
-
}
|
|
60
|
+
};
|
|
61
|
+
UFOIgnoreHolds.displayName = 'UFOIgnoreHolds';
|
|
62
|
+
var _default = exports.default = UFOIgnoreHolds;
|
|
@@ -5,7 +5,7 @@ var _typeof = require("@babel/runtime/helpers/typeof");
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.default =
|
|
8
|
+
exports.default = void 0;
|
|
9
9
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
10
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
11
11
|
var _react = _interopRequireWildcard(require("react"));
|
|
@@ -29,7 +29,7 @@ var tryCompleteHandle;
|
|
|
29
29
|
var hasMarkedFirstSegmentLoad = false;
|
|
30
30
|
|
|
31
31
|
/** A portion of the page we apply measurement to */
|
|
32
|
-
function UFOSegment(_ref) {
|
|
32
|
+
var UFOSegment = function UFOSegment(_ref) {
|
|
33
33
|
var segmentName = _ref.name,
|
|
34
34
|
children = _ref.children,
|
|
35
35
|
_ref$mode = _ref.mode,
|
|
@@ -301,4 +301,6 @@ function UFOSegment(_ref) {
|
|
|
301
301
|
}, ufoSegment);
|
|
302
302
|
}
|
|
303
303
|
return ufoSegment;
|
|
304
|
-
}
|
|
304
|
+
};
|
|
305
|
+
UFOSegment.displayName = 'UFOSegment';
|
|
306
|
+
var _default = exports.default = UFOSegment;
|
|
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.UFOThirdPartySegment =
|
|
7
|
+
exports.UFOThirdPartySegment = void 0;
|
|
8
8
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
9
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
10
10
|
var _react = _interopRequireDefault(require("react"));
|
|
@@ -12,7 +12,7 @@ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
|
12
12
|
var _ignoreHolds = _interopRequireDefault(require("../ignore-holds"));
|
|
13
13
|
var _segment = _interopRequireDefault(require("./segment"));
|
|
14
14
|
var _excluded = ["children"];
|
|
15
|
-
function UFOThirdPartySegment(props) {
|
|
15
|
+
var UFOThirdPartySegment = exports.UFOThirdPartySegment = function UFOThirdPartySegment(props) {
|
|
16
16
|
var children = props.children,
|
|
17
17
|
otherProps = (0, _objectWithoutProperties2.default)(props, _excluded);
|
|
18
18
|
return (0, _platformFeatureFlags.fg)('platform_ufo_enable_ttai_with_3p') ? /*#__PURE__*/_react.default.createElement(_segment.default, (0, _extends2.default)({
|
|
@@ -23,4 +23,5 @@ function UFOThirdPartySegment(props) {
|
|
|
23
23
|
ignore: (0, _platformFeatureFlags.fg)('platform_ufo_exclude_3p_elements_from_ttai'),
|
|
24
24
|
reason: "third-party-element"
|
|
25
25
|
}, children));
|
|
26
|
-
}
|
|
26
|
+
};
|
|
27
|
+
UFOThirdPartySegment.displayName = 'UFOThirdPartySegment';
|
|
@@ -19,7 +19,7 @@ var _rllPlaceholders = require("../../vc-observer/observers/rll-placeholders");
|
|
|
19
19
|
var _intersectionObserver = require("./intersection-observer");
|
|
20
20
|
var _mutationObserver = _interopRequireDefault(require("./mutation-observer"));
|
|
21
21
|
var _performanceObserver = _interopRequireDefault(require("./performance-observer"));
|
|
22
|
-
var
|
|
22
|
+
var _checkWithinComponent = _interopRequireWildcard(require("./utils/check-within-component"));
|
|
23
23
|
var _isContainedWithinSmartAnswers = require("./utils/is-contained-within-smart-answers");
|
|
24
24
|
var _isElementVisible = require("./utils/is-element-visible");
|
|
25
25
|
var _isInVcIgnoreIfNoLayoutShiftMarker = _interopRequireDefault(require("./utils/is-in-vc-ignore-if-no-layout-shift-marker"));
|
|
@@ -277,7 +277,7 @@ var ViewportObserver = exports.default = /*#__PURE__*/function () {
|
|
|
277
277
|
_context2.prev = 4;
|
|
278
278
|
_loop = /*#__PURE__*/_regenerator.default.mark(function _loop() {
|
|
279
279
|
var _this$getSSRState, _this$intersectionObs;
|
|
280
|
-
var addedNodeRef, addedNode, hasSameDeletedNode,
|
|
280
|
+
var addedNodeRef, addedNode, hasSameDeletedNode, _ref7, isWithinThirdPartySegment, isWithinSmartAnswersSegment, isTargetReactRoot;
|
|
281
281
|
return _regenerator.default.wrap(function _loop$(_context) {
|
|
282
282
|
while (1) switch (_context.prev = _context.next) {
|
|
283
283
|
case 0:
|
|
@@ -296,7 +296,9 @@ var ViewportObserver = exports.default = /*#__PURE__*/function () {
|
|
|
296
296
|
}
|
|
297
297
|
return n.isEqualNode(addedNode);
|
|
298
298
|
});
|
|
299
|
-
|
|
299
|
+
_ref7 = _this.enableThirdPartyTracking ? (0, _checkWithinComponent.default)(addedNode, 'UFOThirdPartySegment', _this.mapIs3pResult) : {
|
|
300
|
+
isWithin: false
|
|
301
|
+
}, isWithinThirdPartySegment = _ref7.isWithin;
|
|
300
302
|
isWithinSmartAnswersSegment = Boolean(_this.shouldCheckSmartAnswersMutations() && (0, _isContainedWithinSmartAnswers.isContainedWithinSmartAnswers)(addedNode));
|
|
301
303
|
isTargetReactRoot = targetNode === ((_this$getSSRState = _this.getSSRState) === null || _this$getSSRState === void 0 || (_this$getSSRState = _this$getSSRState.call(_this)) === null || _this$getSSRState === void 0 ? void 0 : _this$getSSRState.reactRootElement);
|
|
302
304
|
(_this$intersectionObs = _this.intersectionObserver) === null || _this$intersectionObs === void 0 || _this$intersectionObs.watchAndTag(addedNode, (_this.trackLayoutShiftOffenders ? createElementMutationsWatcherNew : createElementMutationsWatcher)(removedNodeRects, isWithinThirdPartySegment, isWithinSmartAnswersSegment, !!hasSameDeletedNode, timestamp, isTargetReactRoot, _this.getSSRState, _this.getSSRPlaceholderHandler));
|
|
@@ -343,16 +345,16 @@ var ViewportObserver = exports.default = /*#__PURE__*/function () {
|
|
|
343
345
|
return _ref6.apply(this, arguments);
|
|
344
346
|
};
|
|
345
347
|
}());
|
|
346
|
-
(0, _defineProperty2.default)(this, "handleAttributeMutation", function (
|
|
348
|
+
(0, _defineProperty2.default)(this, "handleAttributeMutation", function (_ref8) {
|
|
347
349
|
var _this$intersectionObs2;
|
|
348
|
-
var target =
|
|
349
|
-
attributeName =
|
|
350
|
-
oldValue =
|
|
351
|
-
newValue =
|
|
352
|
-
timestamp =
|
|
353
|
-
(_this$intersectionObs2 = _this.intersectionObserver) === null || _this$intersectionObs2 === void 0 || _this$intersectionObs2.watchAndTag(target, function (
|
|
354
|
-
var target =
|
|
355
|
-
rect =
|
|
350
|
+
var target = _ref8.target,
|
|
351
|
+
attributeName = _ref8.attributeName,
|
|
352
|
+
oldValue = _ref8.oldValue,
|
|
353
|
+
newValue = _ref8.newValue,
|
|
354
|
+
timestamp = _ref8.timestamp;
|
|
355
|
+
(_this$intersectionObs2 = _this.intersectionObserver) === null || _this$intersectionObs2 === void 0 || _this$intersectionObs2.watchAndTag(target, function (_ref9) {
|
|
356
|
+
var target = _ref9.target,
|
|
357
|
+
rect = _ref9.rect;
|
|
356
358
|
if ((0, _vcUtils.isContainedWithinMediaWrapper)(target)) {
|
|
357
359
|
return {
|
|
358
360
|
type: 'mutation:media',
|
|
@@ -365,8 +367,10 @@ var ViewportObserver = exports.default = /*#__PURE__*/function () {
|
|
|
365
367
|
};
|
|
366
368
|
}
|
|
367
369
|
if ((0, _platformFeatureFlags.fg)('platform_ufo_exclude_3p_attribute_changes')) {
|
|
368
|
-
var
|
|
369
|
-
|
|
370
|
+
var _ref0 = _this.enableThirdPartyTracking ? (0, _checkWithinComponent.default)(target, 'UFOThirdPartySegment', _this.mapIs3pResult) : {
|
|
371
|
+
isWithin: false
|
|
372
|
+
},
|
|
373
|
+
isWithinThirdPartySegment = _ref0.isWithin;
|
|
370
374
|
if (isWithinThirdPartySegment) {
|
|
371
375
|
return {
|
|
372
376
|
type: 'mutation:third-party-attribute',
|
|
@@ -471,9 +475,9 @@ var ViewportObserver = exports.default = /*#__PURE__*/function () {
|
|
|
471
475
|
};
|
|
472
476
|
});
|
|
473
477
|
});
|
|
474
|
-
(0, _defineProperty2.default)(this, "handleLayoutShift", function (
|
|
475
|
-
var time =
|
|
476
|
-
changedRects =
|
|
478
|
+
(0, _defineProperty2.default)(this, "handleLayoutShift", function (_ref1) {
|
|
479
|
+
var time = _ref1.time,
|
|
480
|
+
changedRects = _ref1.changedRects;
|
|
477
481
|
var _iterator2 = _createForOfIteratorHelper(changedRects),
|
|
478
482
|
_step2;
|
|
479
483
|
try {
|
|
@@ -515,6 +519,7 @@ var ViewportObserver = exports.default = /*#__PURE__*/function () {
|
|
|
515
519
|
this.getSSRState = getSSRState;
|
|
516
520
|
this.getSSRPlaceholderHandler = getSSRPlaceholderHandler;
|
|
517
521
|
this.searchPageConfig = searchPageConfig;
|
|
522
|
+
this.enableThirdPartyTracking = (0, _platformFeatureFlags.fg)('platform_ufo_reenable_3p_tracking');
|
|
518
523
|
}
|
|
519
524
|
return (0, _createClass2.default)(ViewportObserver, [{
|
|
520
525
|
key: "initializeObservers",
|
|
@@ -567,7 +572,7 @@ var ViewportObserver = exports.default = /*#__PURE__*/function () {
|
|
|
567
572
|
(_this$performanceObse2 = this.performanceObserver) === null || _this$performanceObse2 === void 0 || _this$performanceObse2.disconnect();
|
|
568
573
|
this.isStarted = false;
|
|
569
574
|
// Clean up caches when stopping
|
|
570
|
-
(0,
|
|
575
|
+
(0, _checkWithinComponent.cleanupCaches)(this.mapIs3pResult);
|
|
571
576
|
}
|
|
572
577
|
}]);
|
|
573
578
|
}();
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
2
2
|
let config;
|
|
3
|
-
export const DEFAULT_TTVC_REVISION = '
|
|
3
|
+
export const DEFAULT_TTVC_REVISION = 'fy26.04';
|
|
4
|
+
export function getDefaultTTVCRevision() {
|
|
5
|
+
return fg('ufo_update_and_enforce_ttvc_v4_default_version') ? DEFAULT_TTVC_REVISION : 'fy25.03';
|
|
6
|
+
}
|
|
4
7
|
export const UNKNOWN_INTERACTION_RATE = 1000;
|
|
5
8
|
|
|
6
9
|
// Defensively typed, since this is directly user-editable
|
|
@@ -12,17 +15,18 @@ export function setUFOConfig(newConfig) {
|
|
|
12
15
|
const {
|
|
13
16
|
enabledVCRevisions
|
|
14
17
|
} = (_newConfig$vc = newConfig === null || newConfig === void 0 ? void 0 : newConfig.vc) !== null && _newConfig$vc !== void 0 ? _newConfig$vc : {};
|
|
15
|
-
if (typeof (enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.byExperience) === 'object') {
|
|
18
|
+
if (fg('ufo_update_and_enforce_ttvc_v4_default_version') ? enabledVCRevisions : typeof (enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.byExperience) === 'object') {
|
|
19
|
+
var _enabledVCRevisions$a;
|
|
20
|
+
const byExperience = typeof (enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.byExperience) === 'object' ? enabledVCRevisions.byExperience : {};
|
|
16
21
|
config = {
|
|
17
22
|
...newConfig,
|
|
18
23
|
vc: {
|
|
19
24
|
...newConfig.vc,
|
|
20
25
|
enabledVCRevisions: {
|
|
21
|
-
// enforce axiom about `enabledVCRevisions.all` config
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
+
// enforce axiom about `enabledVCRevisions.all` config:
|
|
27
|
+
// DEFAULT_TTVC_REVISION must always be present in `all`
|
|
28
|
+
all: Array.from(new Set([getDefaultTTVCRevision(), ...((_enabledVCRevisions$a = enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.all) !== null && _enabledVCRevisions$a !== void 0 ? _enabledVCRevisions$a : []), ...Object.values(byExperience).flat()])),
|
|
29
|
+
byExperience
|
|
26
30
|
}
|
|
27
31
|
}
|
|
28
32
|
};
|
|
@@ -73,7 +77,7 @@ export function getEnabledVCRevisions(experienceKey = '') {
|
|
|
73
77
|
if (isValidConfigArray(enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.all)) {
|
|
74
78
|
return enabledVCRevisions.all;
|
|
75
79
|
}
|
|
76
|
-
return [
|
|
80
|
+
return [getDefaultTTVCRevision()];
|
|
77
81
|
}
|
|
78
82
|
return [];
|
|
79
83
|
} catch {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
2
2
|
import coinflip from '../coinflip';
|
|
3
|
-
import { DEFAULT_TTVC_REVISION, getConfig, getExtraInteractionRate } from '../config';
|
|
3
|
+
import { DEFAULT_TTVC_REVISION, getConfig, getDefaultTTVCRevision, getExtraInteractionRate, getMostRecentVCRevision } from '../config';
|
|
4
4
|
import { buildSegmentTree, getOldSegmentsLabelStack, optimizeLabelStack, sanitizeUfoName } from '../create-payload/common/utils';
|
|
5
5
|
import { getMoreAccuratePageVisibilityUpToTTAI } from '../create-payload/utils/get-more-accurate-page-visibility-up-to-ttai';
|
|
6
6
|
import getPageVisibilityUpToTTAI from '../create-payload/utils/get-page-visibility-up-to-ttai';
|
|
@@ -17,7 +17,7 @@ import { optimizeRequestInfo } from '../create-payload/utils/optimize-request-in
|
|
|
17
17
|
import { optimizeSpans } from '../create-payload/utils/optimize-spans';
|
|
18
18
|
import { interactionSpans as atlaskitInteractionSpans } from '../interaction-metrics';
|
|
19
19
|
async function createInteractionExtraLogPayload(interactionId, interaction, lastInteractionFinish, lastInteractionFinishVCResult) {
|
|
20
|
-
var _getTTAI, _lastInteractionFinis, _getTTAI2, _window$location;
|
|
20
|
+
var _getTTAI, _getMostRecentVCRevis, _lastInteractionFinis, _getTTAI2, _window$location;
|
|
21
21
|
const config = getConfig();
|
|
22
22
|
if (!config) {
|
|
23
23
|
throw Error('UFO Configuration not provided');
|
|
@@ -56,9 +56,10 @@ async function createInteractionExtraLogPayload(interactionId, interaction, last
|
|
|
56
56
|
|
|
57
57
|
// Check if VC is clean and has valid metric
|
|
58
58
|
const vcRevisionPayload = finalVCMetrics === null || finalVCMetrics === void 0 ? void 0 : finalVCMetrics['ufo:vc:rev'];
|
|
59
|
+
const effectiveRevision = fg('ufo_update_and_enforce_ttvc_v4_default_version') ? (_getMostRecentVCRevis = getMostRecentVCRevision(ufoName)) !== null && _getMostRecentVCRevis !== void 0 ? _getMostRecentVCRevis : DEFAULT_TTVC_REVISION : getDefaultTTVCRevision();
|
|
59
60
|
const effectiveVCRevisionPayload = vcRevisionPayload === null || vcRevisionPayload === void 0 ? void 0 : vcRevisionPayload.find(({
|
|
60
61
|
revision
|
|
61
|
-
}) => revision ===
|
|
62
|
+
}) => revision === effectiveRevision);
|
|
62
63
|
if (!(effectiveVCRevisionPayload !== null && effectiveVCRevisionPayload !== void 0 && effectiveVCRevisionPayload.clean) || (effectiveVCRevisionPayload === null || effectiveVCRevisionPayload === void 0 ? void 0 : effectiveVCRevisionPayload['metric:vc90']) === undefined || typeof (effectiveVCRevisionPayload === null || effectiveVCRevisionPayload === void 0 ? void 0 : effectiveVCRevisionPayload['metric:vc90']) !== 'number' || extraTTAI === undefined || typeof extraTTAI !== 'number' || interaction.errors.length > 0) {
|
|
63
64
|
return null;
|
|
64
65
|
}
|
|
@@ -76,7 +77,7 @@ async function createInteractionExtraLogPayload(interactionId, interaction, last
|
|
|
76
77
|
const lastInteractionFinishVCRev = lastInteractionFinishVCResult['ufo:vc:rev'];
|
|
77
78
|
const lastInteractionFinishRevision = lastInteractionFinishVCRev === null || lastInteractionFinishVCRev === void 0 ? void 0 : lastInteractionFinishVCRev.find(({
|
|
78
79
|
revision
|
|
79
|
-
}) => revision ===
|
|
80
|
+
}) => revision === effectiveRevision);
|
|
80
81
|
if (lastInteractionFinishRevision !== null && lastInteractionFinishRevision !== void 0 && lastInteractionFinishRevision.clean) {
|
|
81
82
|
lastInteractionFinishVCClean = true;
|
|
82
83
|
lastInteractionFinishVC90 = lastInteractionFinishRevision['metric:vc90'];
|
|
@@ -176,7 +177,7 @@ async function createInteractionExtraLogPayload(interactionId, interaction, last
|
|
|
176
177
|
customData: filteredData.customData,
|
|
177
178
|
...getDetailedInteractionMetrics()
|
|
178
179
|
},
|
|
179
|
-
'vc:effective:revision':
|
|
180
|
+
'vc:effective:revision': effectiveRevision,
|
|
180
181
|
lastInteractionFinish: {
|
|
181
182
|
start: lastInteractionFinishStart,
|
|
182
183
|
end: lastInteractionFinishEnd,
|
|
@@ -11,7 +11,7 @@ const getDetailedInteractionMetrics=resourceTimings=>{if(experimental||window.__
|
|
|
11
11
|
if(shouldInclude3pHolds){var _interaction$hold3pIn;return{...basePayload,hold3pActive:interaction.hold3pActive?[...interaction.hold3pActive.values()]:[],hold3pInfo:optimizeHoldInfo((_interaction$hold3pIn=interaction.hold3pInfo)!==null&&_interaction$hold3pIn!==void 0?_interaction$hold3pIn:[],start,getReactUFOPayloadVersion(interaction.type))};}return basePayload;};// Page load & detailed payload
|
|
12
12
|
const getPageLoadDetailedInteractionMetrics=()=>{var _config$ssr2,_config$ssr2$getSSRTi;if(!isPageLoad||!isDetailedPayload){return{};}const initialPageLoadExtraTimings=objectToArray(initialPageLoadExtraTiming.getTimings());const config=getConfig();const defaultSSRTimings=objectToArray(ssr.getSSRTimings());const ssrTimingsFromConfig=config===null||config===void 0?void 0:(_config$ssr2=config.ssr)===null||_config$ssr2===void 0?void 0:(_config$ssr2$getSSRTi=_config$ssr2.getSSRTimings)===null||_config$ssr2$getSSRTi===void 0?void 0:_config$ssr2$getSSRTi.call(_config$ssr2);return{initialPageLoadExtraTimings,SSRTimings:ssrTimingsFromConfig?[...ssrTimingsFromConfig,...defaultSSRTimings]:defaultSSRTimings};};if(experimental){expTTAI=getTTAI(interaction);}else{regularTTAI=getTTAI(interaction);}const newUFOName=sanitizeUfoName(ufoName);const resourceTimings=getResourceTimings(start,end);const[finalVCMetrics,experimentalMetrics,paintMetrics,batteryInfo]=await Promise.all([vcMetrics||(await getVCMetrics(interaction)),experimental?getExperimentalVCMetrics(interaction):Promise.resolve(undefined),getPaintMetricsToLegacyFormat(type,end),getBatteryInfoToLegacyFormat()]);if(!experimental){addPerformanceMeasures(interaction.start,[...((finalVCMetrics===null||finalVCMetrics===void 0?void 0:finalVCMetrics['ufo:vc:rev'])||[])]);}const getReactHydrationStats=()=>{if(!hydration){return{};}return{hydration};};const payload={actionSubject:'experience',action:'measured',eventType:'operational',source:'measured',tags:['observability'],attributes:{properties:{// basic
|
|
13
13
|
'event:hostname':((_window$location=window.location)===null||_window$location===void 0?void 0:_window$location.hostname)||'unknown','event:product':config.product,'event:population':config.population,'event:schema':'1.0.0','event:sizeInKb':0,'event:source':{name:'react-ufo/web',version:getReactUFOPayloadVersion(interaction.type)},'event:region':config.region||'unknown','experience:key':experimental?'custom.experimental-interaction-metrics':'custom.interaction-metrics','experience:name':newUFOName,// Include CPU usage monitoring data
|
|
14
|
-
'event:cpu:usage':createPressureStateReport(interaction.start,interaction.end),'event:memory:usage':createMemoryStateReport(interaction.start,interaction.end),...(criticalPayloadCount!==undefined?{'ufo:multipayload':true,'ufo:criticalPayloadCount':criticalPayloadCount}:{}),'ufo:pageVisibilityHiddenTimestamp':getEarliestHiddenTiming(interaction.start,interaction.end),'ufo:wasPageHiddenBeforeInit':getHasHiddenTimingBeforeSetup(),'ufo:isOpenedInBackground':isOpenedInBackground(interaction.type),'ufo:isTabThrottled':isTabThrottled(start,end)
|
|
14
|
+
'event:cpu:usage':createPressureStateReport(interaction.start,interaction.end),'event:memory:usage':createMemoryStateReport(interaction.start,interaction.end),...(criticalPayloadCount!==undefined?{'ufo:multipayload':true,'ufo:criticalPayloadCount':criticalPayloadCount}:{}),'ufo:pageVisibilityHiddenTimestamp':getEarliestHiddenTiming(interaction.start,interaction.end),'ufo:wasPageHiddenBeforeInit':getHasHiddenTimingBeforeSetup(),'ufo:isOpenedInBackground':isOpenedInBackground(interaction.type),'ufo:isTabThrottled':isTabThrottled(start,end),'ufo:pageVisibilityTimeline':getPageVisibilityTimeline(start,end),...(fg('ufo_detect_aborting_interaction_during_ssr')?{'ufo:hasAbortingInteractionDuringSSR':getHasAbortingEventDuringSSR()}:{}),// root
|
|
15
15
|
...getBrowserMetadataToLegacyFormat(),...batteryInfo,...getSSRProperties(type),...getAssetsMetrics(interaction,pageLoadInteractionMetrics===null||pageLoadInteractionMetrics===void 0?void 0:pageLoadInteractionMetrics.SSRDoneTime),...getPPSMetrics(interaction),...paintMetrics,...getNavigationMetricsToLegacyFormat(type),...finalVCMetrics,...experimentalMetrics,...((_config$additionalPay=config.additionalPayloadData)===null||_config$additionalPay===void 0?void 0:_config$additionalPay.call(config,interaction)),...getTracingContextData(interaction),...getStylesheetMetrics(),...getErrorCounts(interaction),...getReactHydrationStats(),interactionMetrics:{namePrefix:config.namePrefix||'',segmentPrefix:config.segmentPrefix||'',interactionId,pageVisibilityAtTTI,pageVisibilityAtTTAI,experimental__pageVisibilityAtTTI:moreAccuratePageVisibilityAtTTI,experimental__pageVisibilityAtTTAI:moreAccuratePageVisibilityAtTTAI,// raw interaction metrics
|
|
16
16
|
rate,routeName,type,abortReason,featureFlags,previousInteractionName,isPreviousInteractionAborted,abortedByInteractionName,// performance
|
|
17
17
|
apdex:optimizeApdex(interaction.apdex,getReactUFOPayloadVersion(interaction.type)),end:Math.round(end),...(interaction.end3p?{end3p:Math.round(interaction.end3p)}:{}),start:Math.round(start),segments:getReactUFOPayloadVersion(interaction.type)==='2.0.0'?segmentTree:getOldSegmentsLabelStack(segments,interaction.type),marks:optimizeMarks(interaction.marks,getReactUFOPayloadVersion(interaction.type)),customData:optimizeCustomData(interaction),reactProfilerTimings:optimizeReactProfilerTimings(interaction.reactProfilerTimings,start,getReactUFOPayloadVersion(interaction.type)),minorInteractions:interaction.minorInteractions,...(responsiveness?{responsiveness}:{}),...labelStack,...pageLoadInteractionMetrics,...getDetailedInteractionMetrics(resourceTimings),...getPageLoadDetailedInteractionMetrics(),...getBm3TrackerTimings(interaction),'metric:ttai':experimental?regularTTAI||expTTAI:undefined,'metric:experimental:ttai':expTTAI,...(unknownElementName?{unknownElementName}:{}),...(unknownElementHierarchy?{unknownElementHierarchy}:{})},'ufo:payloadTime':roundEpsilon(performance.now()-interactionPayloadStart)}}};if(experimental){regularTTAI=undefined;expTTAI=undefined;}if(fg('platform_ufo_enable_vc_raw_data')){const size=getPayloadSize(payload.attributes.properties);const vcRev=payload.attributes.properties['ufo:vc:rev'];const rawData=vcRev.find(item=>item.revision==='raw-handler');if(rawData){const rawDataSize=getPayloadSize(rawData);payload.attributes.properties['ufo:vc:raw:size']=rawDataSize;if(size>MAX_PAYLOAD_SIZE&&Array.isArray(vcRev)&&vcRev.length>0){payload.attributes.properties['ufo:vc:rev']=vcRev.filter(item=>item.revision!=='raw-handler');payload.attributes.properties['ufo:vc:raw:removed']=true;}}payload.attributes.properties['event:sizeInKb']=getPayloadSize(payload.attributes.properties);}else{payload.attributes.properties['event:sizeInKb']=getPayloadSize(payload.attributes.properties);}// in order of importance, first one being least important
|
|
@@ -19,10 +19,10 @@ import InteractionContext from '@atlaskit/interaction-context';
|
|
|
19
19
|
* Has an `ignore` prop, to allow you to use it conditionally
|
|
20
20
|
* Has a `reason` prop, to specify why the hold is being ignored
|
|
21
21
|
*/
|
|
22
|
-
|
|
22
|
+
const UFOIgnoreHolds = ({
|
|
23
23
|
children,
|
|
24
24
|
ignore = true
|
|
25
|
-
}) {
|
|
25
|
+
}) => {
|
|
26
26
|
const parentContext = useContext(InteractionContext);
|
|
27
27
|
const ignoredInteractionContext = useMemo(() => {
|
|
28
28
|
if (!parentContext) {
|
|
@@ -46,4 +46,6 @@ export default function UFOIgnoreHolds({
|
|
|
46
46
|
return /*#__PURE__*/React.createElement(InteractionContext.Provider, {
|
|
47
47
|
value: ignoredInteractionContext
|
|
48
48
|
}, kids);
|
|
49
|
-
}
|
|
49
|
+
};
|
|
50
|
+
UFOIgnoreHolds.displayName = 'UFOIgnoreHolds';
|
|
51
|
+
export default UFOIgnoreHolds;
|
|
@@ -17,12 +17,12 @@ let tryCompleteHandle;
|
|
|
17
17
|
let hasMarkedFirstSegmentLoad = false;
|
|
18
18
|
|
|
19
19
|
/** A portion of the page we apply measurement to */
|
|
20
|
-
|
|
20
|
+
const UFOSegment = ({
|
|
21
21
|
name: segmentName,
|
|
22
22
|
children,
|
|
23
23
|
mode = 'single',
|
|
24
24
|
type = 'first-party'
|
|
25
|
-
}) {
|
|
25
|
+
}) => {
|
|
26
26
|
// If UFO is disabled, render children without any tracking overhead
|
|
27
27
|
// This is gated behind platform_ufo_enable_killswitch_config feature flag
|
|
28
28
|
// Note: isUFOEnabled() returns a stable value based on config, so it's safe to call before hooks
|
|
@@ -279,4 +279,6 @@ export default function UFOSegment({
|
|
|
279
279
|
}, ufoSegment);
|
|
280
280
|
}
|
|
281
281
|
return ufoSegment;
|
|
282
|
-
}
|
|
282
|
+
};
|
|
283
|
+
UFOSegment.displayName = 'UFOSegment';
|
|
284
|
+
export default UFOSegment;
|
|
@@ -3,7 +3,7 @@ import React from 'react';
|
|
|
3
3
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
4
4
|
import UFOIgnoreHolds from '../ignore-holds';
|
|
5
5
|
import UFOSegment from './segment';
|
|
6
|
-
export
|
|
6
|
+
export const UFOThirdPartySegment = props => {
|
|
7
7
|
const {
|
|
8
8
|
children,
|
|
9
9
|
...otherProps
|
|
@@ -16,4 +16,5 @@ export function UFOThirdPartySegment(props) {
|
|
|
16
16
|
ignore: fg('platform_ufo_exclude_3p_elements_from_ttai'),
|
|
17
17
|
reason: "third-party-element"
|
|
18
18
|
}, children));
|
|
19
|
-
}
|
|
19
|
+
};
|
|
20
|
+
UFOThirdPartySegment.displayName = 'UFOThirdPartySegment';
|
|
@@ -264,7 +264,9 @@ export default class ViewportObserver {
|
|
|
264
264
|
});
|
|
265
265
|
const {
|
|
266
266
|
isWithin: isWithinThirdPartySegment
|
|
267
|
-
} = checkWithinComponent(addedNode, 'UFOThirdPartySegment', this.mapIs3pResult)
|
|
267
|
+
} = this.enableThirdPartyTracking ? checkWithinComponent(addedNode, 'UFOThirdPartySegment', this.mapIs3pResult) : {
|
|
268
|
+
isWithin: false
|
|
269
|
+
};
|
|
268
270
|
const isWithinSmartAnswersSegment = Boolean(this.shouldCheckSmartAnswersMutations() && isContainedWithinSmartAnswers(addedNode));
|
|
269
271
|
const isTargetReactRoot = targetNode === ((_this$getSSRState = this.getSSRState) === null || _this$getSSRState === void 0 ? void 0 : (_this$getSSRState$cal = _this$getSSRState.call(this)) === null || _this$getSSRState$cal === void 0 ? void 0 : _this$getSSRState$cal.reactRootElement);
|
|
270
272
|
(_this$intersectionObs = this.intersectionObserver) === null || _this$intersectionObs === void 0 ? void 0 : _this$intersectionObs.watchAndTag(addedNode, (this.trackLayoutShiftOffenders ? createElementMutationsWatcherNew : createElementMutationsWatcher)(removedNodeRects, isWithinThirdPartySegment, isWithinSmartAnswersSegment, !!hasSameDeletedNode, timestamp, isTargetReactRoot, this.getSSRState, this.getSSRPlaceholderHandler));
|
|
@@ -296,7 +298,9 @@ export default class ViewportObserver {
|
|
|
296
298
|
if (fg('platform_ufo_exclude_3p_attribute_changes')) {
|
|
297
299
|
const {
|
|
298
300
|
isWithin: isWithinThirdPartySegment
|
|
299
|
-
} = checkWithinComponent(target, 'UFOThirdPartySegment', this.mapIs3pResult)
|
|
301
|
+
} = this.enableThirdPartyTracking ? checkWithinComponent(target, 'UFOThirdPartySegment', this.mapIs3pResult) : {
|
|
302
|
+
isWithin: false
|
|
303
|
+
};
|
|
300
304
|
if (isWithinThirdPartySegment) {
|
|
301
305
|
return {
|
|
302
306
|
type: 'mutation:third-party-attribute',
|
|
@@ -437,6 +441,7 @@ export default class ViewportObserver {
|
|
|
437
441
|
this.getSSRState = getSSRState;
|
|
438
442
|
this.getSSRPlaceholderHandler = getSSRPlaceholderHandler;
|
|
439
443
|
this.searchPageConfig = searchPageConfig;
|
|
444
|
+
this.enableThirdPartyTracking = fg('platform_ufo_reenable_3p_tracking');
|
|
440
445
|
}
|
|
441
446
|
initializeObservers() {
|
|
442
447
|
if (this.isStarted) {
|