@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
package/dist/esm/config/index.js
CHANGED
|
@@ -64,13 +64,34 @@ export function getInteractionRate(name, interactionKind) {
|
|
|
64
64
|
return 0;
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
|
-
export function
|
|
67
|
+
export function getExperimentalInteractionRate(name, interactionType) {
|
|
68
68
|
try {
|
|
69
69
|
if (!config) {
|
|
70
70
|
return 0;
|
|
71
71
|
}
|
|
72
72
|
var _config2 = config,
|
|
73
|
-
|
|
73
|
+
experimentalInteractionMetrics = _config2.experimentalInteractionMetrics;
|
|
74
|
+
if (!(experimentalInteractionMetrics !== null && experimentalInteractionMetrics !== void 0 && experimentalInteractionMetrics.enabled)) {
|
|
75
|
+
return 0;
|
|
76
|
+
}
|
|
77
|
+
if (experimentalInteractionMetrics.rates && typeof experimentalInteractionMetrics.rates[name] === 'number') {
|
|
78
|
+
return experimentalInteractionMetrics.rates[name];
|
|
79
|
+
}
|
|
80
|
+
if (experimentalInteractionMetrics.kind && typeof experimentalInteractionMetrics.kind[interactionType] === 'number') {
|
|
81
|
+
return experimentalInteractionMetrics.kind[interactionType];
|
|
82
|
+
}
|
|
83
|
+
return 0;
|
|
84
|
+
} catch (e) {
|
|
85
|
+
return 0;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
export function getPostInteractionRate(name, interactionType) {
|
|
89
|
+
try {
|
|
90
|
+
if (!config) {
|
|
91
|
+
return 0;
|
|
92
|
+
}
|
|
93
|
+
var _config3 = config,
|
|
94
|
+
postInteractionLog = _config3.postInteractionLog;
|
|
74
95
|
if (!(postInteractionLog !== null && postInteractionLog !== void 0 && postInteractionLog.enabled)) {
|
|
75
96
|
return 0;
|
|
76
97
|
}
|
|
@@ -90,8 +111,8 @@ export function getCapabilityRate(capability) {
|
|
|
90
111
|
if (!config) {
|
|
91
112
|
return 0;
|
|
92
113
|
}
|
|
93
|
-
var
|
|
94
|
-
capabilityRate =
|
|
114
|
+
var _config4 = config,
|
|
115
|
+
capabilityRate = _config4.capability;
|
|
95
116
|
if (capabilityRate != null) {
|
|
96
117
|
var rate = capabilityRate[capability];
|
|
97
118
|
if (rate != null) {
|
|
@@ -110,8 +131,8 @@ export function getTypingPerformanceTracingMethod() {
|
|
|
110
131
|
if (!config) {
|
|
111
132
|
return defaultMethod;
|
|
112
133
|
}
|
|
113
|
-
var
|
|
114
|
-
typingMethod =
|
|
134
|
+
var _config5 = config,
|
|
135
|
+
typingMethod = _config5.typingMethod;
|
|
115
136
|
if (typingMethod != null && validTypingMethods.find(function (m) {
|
|
116
137
|
return m === typingMethod;
|
|
117
138
|
})) {
|
|
@@ -130,8 +151,8 @@ export function getAwaitBM3TTIList() {
|
|
|
130
151
|
if (!config) {
|
|
131
152
|
return [];
|
|
132
153
|
}
|
|
133
|
-
var
|
|
134
|
-
awaitBM3TTI =
|
|
154
|
+
var _config6 = config,
|
|
155
|
+
awaitBM3TTI = _config6.awaitBM3TTI;
|
|
135
156
|
if (awaitBM3TTI != null) {
|
|
136
157
|
return awaitBM3TTI;
|
|
137
158
|
} else {
|
|
@@ -148,8 +169,8 @@ export function getRemovePageSegmentsUFOPrefixes() {
|
|
|
148
169
|
if (!config) {
|
|
149
170
|
return false;
|
|
150
171
|
}
|
|
151
|
-
var
|
|
152
|
-
removePageSegmentsUFOPrefixes =
|
|
172
|
+
var _config7 = config,
|
|
173
|
+
removePageSegmentsUFOPrefixes = _config7.removePageSegmentsUFOPrefixes;
|
|
153
174
|
if (removePageSegmentsUFOPrefixes != null) {
|
|
154
175
|
return removePageSegmentsUFOPrefixes;
|
|
155
176
|
} else {
|
|
@@ -166,8 +187,8 @@ export function getRemoveInteractionsUFOPrefixes() {
|
|
|
166
187
|
if (!config) {
|
|
167
188
|
return false;
|
|
168
189
|
}
|
|
169
|
-
var
|
|
170
|
-
removeInteractionsUFOPrefixes =
|
|
190
|
+
var _config8 = config,
|
|
191
|
+
removeInteractionsUFOPrefixes = _config8.removeInteractionsUFOPrefixes;
|
|
171
192
|
if (removeInteractionsUFOPrefixes != null) {
|
|
172
193
|
return removeInteractionsUFOPrefixes;
|
|
173
194
|
} else {
|
|
@@ -187,8 +208,8 @@ export function getUfoNameOverrides() {
|
|
|
187
208
|
if (!config) {
|
|
188
209
|
return undefined;
|
|
189
210
|
}
|
|
190
|
-
var
|
|
191
|
-
ufoNameOverrides =
|
|
211
|
+
var _config9 = config,
|
|
212
|
+
ufoNameOverrides = _config9.ufoNameOverrides;
|
|
192
213
|
if (ufoNameOverrides != null) {
|
|
193
214
|
return ufoNameOverrides;
|
|
194
215
|
}
|
|
@@ -204,8 +225,8 @@ export function getDoNotAbortActivePressInteraction() {
|
|
|
204
225
|
if (!config) {
|
|
205
226
|
return undefined;
|
|
206
227
|
}
|
|
207
|
-
var
|
|
208
|
-
doNotAbortActivePressInteraction =
|
|
228
|
+
var _config10 = config,
|
|
229
|
+
doNotAbortActivePressInteraction = _config10.doNotAbortActivePressInteraction;
|
|
209
230
|
return doNotAbortActivePressInteraction;
|
|
210
231
|
} catch (e) {
|
|
211
232
|
return undefined;
|
|
@@ -218,8 +239,8 @@ export function getDoNotAbortActivePressInteractionOnTransition() {
|
|
|
218
239
|
if (!config) {
|
|
219
240
|
return undefined;
|
|
220
241
|
}
|
|
221
|
-
var
|
|
222
|
-
doNotAbortActivePressInteractionOnTransition =
|
|
242
|
+
var _config11 = config,
|
|
243
|
+
doNotAbortActivePressInteractionOnTransition = _config11.doNotAbortActivePressInteractionOnTransition;
|
|
223
244
|
return doNotAbortActivePressInteractionOnTransition;
|
|
224
245
|
} catch (e) {
|
|
225
246
|
return undefined;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
2
|
+
import _createClass from "@babel/runtime/helpers/createClass";
|
|
3
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
4
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
5
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
6
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
|
|
7
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
8
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
9
|
+
import { calculateVCMetrics } from '../create-payload/common/utils';
|
|
10
|
+
import { VCObserver } from '../vc/vc-observer';
|
|
11
|
+
var interactionBuffer = [];
|
|
12
|
+
var bufferInteractionData = function bufferInteractionData(interactionId, data) {
|
|
13
|
+
interactionBuffer.push({
|
|
14
|
+
interactionId: interactionId,
|
|
15
|
+
data: data
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
function clearInteractionBuffer() {
|
|
19
|
+
interactionBuffer.length = 0;
|
|
20
|
+
}
|
|
21
|
+
function appendInteractionData(interactionId, data) {
|
|
22
|
+
bufferInteractionData(interactionId, data);
|
|
23
|
+
}
|
|
24
|
+
export function installInteractionSink(handler) {
|
|
25
|
+
var _iterator = _createForOfIteratorHelper(interactionBuffer),
|
|
26
|
+
_step;
|
|
27
|
+
try {
|
|
28
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
29
|
+
var _step$value = _step.value,
|
|
30
|
+
_interactionId = _step$value.interactionId,
|
|
31
|
+
data = _step$value.data;
|
|
32
|
+
handler(_interactionId, data);
|
|
33
|
+
}
|
|
34
|
+
} catch (err) {
|
|
35
|
+
_iterator.e(err);
|
|
36
|
+
} finally {
|
|
37
|
+
_iterator.f();
|
|
38
|
+
}
|
|
39
|
+
clearInteractionBuffer();
|
|
40
|
+
bufferInteractionData = handler;
|
|
41
|
+
}
|
|
42
|
+
export function sinkExperimentalHandler(sinkFn) {
|
|
43
|
+
installInteractionSink(sinkFn);
|
|
44
|
+
}
|
|
45
|
+
export function onExperimentalInteractionComplete(interactionId, data) {
|
|
46
|
+
var endTime = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : performance.now();
|
|
47
|
+
if (data.ufoName) {
|
|
48
|
+
data.end = endTime;
|
|
49
|
+
appendInteractionData(interactionId, data);
|
|
50
|
+
clearInteractionBuffer();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export var ExperimentalVCMetrics = /*#__PURE__*/function () {
|
|
54
|
+
function ExperimentalVCMetrics() {
|
|
55
|
+
_classCallCheck(this, ExperimentalVCMetrics);
|
|
56
|
+
_defineProperty(this, "vcObserver", null);
|
|
57
|
+
}
|
|
58
|
+
return _createClass(ExperimentalVCMetrics, [{
|
|
59
|
+
key: "initialize",
|
|
60
|
+
value: function initialize(options) {
|
|
61
|
+
if (this.vcObserver === null) {
|
|
62
|
+
this.vcObserver = new VCObserver(_objectSpread(_objectSpread({}, options), {}, {
|
|
63
|
+
isPostInteraction: true
|
|
64
|
+
}));
|
|
65
|
+
}
|
|
66
|
+
return this;
|
|
67
|
+
}
|
|
68
|
+
}, {
|
|
69
|
+
key: "start",
|
|
70
|
+
value: function start(_ref) {
|
|
71
|
+
var _this$vcObserver;
|
|
72
|
+
var startTime = _ref.startTime;
|
|
73
|
+
(_this$vcObserver = this.vcObserver) === null || _this$vcObserver === void 0 || _this$vcObserver.start({
|
|
74
|
+
startTime: startTime
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}]);
|
|
78
|
+
}();
|
|
79
|
+
export var experimentalVC = new ExperimentalVCMetrics();
|
|
80
|
+
export var getExperimentalVCMetrics = function getExperimentalVCMetrics(interaction) {
|
|
81
|
+
if (experimentalVC.vcObserver) {
|
|
82
|
+
var _result$metricsVc;
|
|
83
|
+
var result = calculateVCMetrics(interaction, 'ufo-experimental', experimentalVC.vcObserver.getVCResult);
|
|
84
|
+
experimentalVC.vcObserver.stop();
|
|
85
|
+
return _objectSpread(_objectSpread({}, result), {}, {
|
|
86
|
+
'metric:experimental:vc90': result === null || result === void 0 || (_result$metricsVc = result['metrics:vc']) === null || _result$metricsVc === void 0 ? void 0 : _result$metricsVc['90']
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
return null;
|
|
90
|
+
};
|
|
@@ -2,7 +2,14 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
|
2
2
|
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; }
|
|
3
3
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
4
4
|
/* eslint-disable @typescript-eslint/no-non-null-asserted-optional-chain */
|
|
5
|
+
|
|
5
6
|
import { REACT_UFO_VERSION } from '../../../common/constants';
|
|
7
|
+
import { getConfig } from '../../../config';
|
|
8
|
+
import { getPageVisibilityState } from '../../../hidden-timing';
|
|
9
|
+
import PostInteractionLog from '../../../interaction-metrics/post-interaction-log';
|
|
10
|
+
import { getSSRDoneTime } from '../../../ssr';
|
|
11
|
+
import { getVCObserver } from '../../../vc';
|
|
12
|
+
export var postInteractionLog = new PostInteractionLog();
|
|
6
13
|
export var sanitizeUfoName = function sanitizeUfoName(name) {
|
|
7
14
|
return name.replace(/_/g, '-');
|
|
8
15
|
};
|
|
@@ -59,4 +66,58 @@ export function optimizeLabelStack(labelStack) {
|
|
|
59
66
|
s: ls.segmentId
|
|
60
67
|
} : {});
|
|
61
68
|
});
|
|
62
|
-
}
|
|
69
|
+
}
|
|
70
|
+
export var getPageVisibilityUpToTTAI = function getPageVisibilityUpToTTAI(interaction) {
|
|
71
|
+
var start = interaction.start,
|
|
72
|
+
end = interaction.end;
|
|
73
|
+
return getPageVisibilityState(start, end);
|
|
74
|
+
};
|
|
75
|
+
export var calculateVCMetrics = function calculateVCMetrics(interaction, prefix, getVCResultFn) {
|
|
76
|
+
var _interaction$apdex;
|
|
77
|
+
var result = getVCResultFn({
|
|
78
|
+
start: interaction.start,
|
|
79
|
+
stop: interaction.end,
|
|
80
|
+
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,
|
|
81
|
+
prefix: prefix,
|
|
82
|
+
vc: interaction.vc
|
|
83
|
+
});
|
|
84
|
+
var VC = result === null || result === void 0 ? void 0 : result['metrics:vc'];
|
|
85
|
+
if (!VC || !(result !== null && result !== void 0 && result["".concat(prefix, ":vc:clean")])) {
|
|
86
|
+
return result;
|
|
87
|
+
}
|
|
88
|
+
var pageVisibilityUpToTTAI = getPageVisibilityUpToTTAI(interaction);
|
|
89
|
+
if (interaction.abortReason || pageVisibilityUpToTTAI !== 'visible') {
|
|
90
|
+
return result;
|
|
91
|
+
}
|
|
92
|
+
return result;
|
|
93
|
+
};
|
|
94
|
+
export function getSSRDoneTimeValue(config) {
|
|
95
|
+
var _config$ssr, _config$ssr2;
|
|
96
|
+
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() : getSSRDoneTime();
|
|
97
|
+
}
|
|
98
|
+
export var getVCMetrics = function getVCMetrics(interaction) {
|
|
99
|
+
var _config$vc, _result$metricsVc;
|
|
100
|
+
var config = getConfig();
|
|
101
|
+
if (!(config !== null && config !== void 0 && (_config$vc = config.vc) !== null && _config$vc !== void 0 && _config$vc.enabled)) {
|
|
102
|
+
return {};
|
|
103
|
+
}
|
|
104
|
+
if (interaction.type !== 'page_load' && interaction.type !== 'transition') {
|
|
105
|
+
return {};
|
|
106
|
+
}
|
|
107
|
+
var ssr = interaction.type === 'page_load' && config !== null && config !== void 0 && config.ssr ? {
|
|
108
|
+
ssr: getSSRDoneTimeValue(config)
|
|
109
|
+
} : null;
|
|
110
|
+
postInteractionLog.setVCObserverSSRConfig(ssr);
|
|
111
|
+
var result = calculateVCMetrics(interaction, 'ufo', getVCObserver().getVCResult);
|
|
112
|
+
getVCObserver().stop();
|
|
113
|
+
postInteractionLog.setLastInteractionFinishVCResult(result);
|
|
114
|
+
return _objectSpread(_objectSpread({}, result), {}, {
|
|
115
|
+
'metric:vc90': result === null || result === void 0 || (_result$metricsVc = result['metrics:vc']) === null || _result$metricsVc === void 0 ? void 0 : _result$metricsVc['90']
|
|
116
|
+
});
|
|
117
|
+
};
|
|
118
|
+
export var getTTAI = function getTTAI(interaction) {
|
|
119
|
+
var start = interaction.start,
|
|
120
|
+
end = interaction.end;
|
|
121
|
+
var pageVisibilityUpToTTAI = getPageVisibilityUpToTTAI(interaction);
|
|
122
|
+
return !interaction.abortReason && pageVisibilityUpToTTAI === 'visible' ? Math.round(end - start) : undefined;
|
|
123
|
+
};
|
|
@@ -12,19 +12,20 @@ import Bowser from 'bowser-ultralight';
|
|
|
12
12
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
13
13
|
import { getLighthouseMetrics } from '../additional-payload';
|
|
14
14
|
import * as bundleEvalTiming from '../bundle-eval-timing';
|
|
15
|
+
import coinflip from '../coinflip';
|
|
15
16
|
import { REACT_UFO_VERSION } from '../common/constants';
|
|
16
|
-
import { getConfig, getUfoNameOverrides } from '../config';
|
|
17
|
+
import { getConfig, getExperimentalInteractionRate, getUfoNameOverrides } from '../config';
|
|
18
|
+
import { getExperimentalVCMetrics } from '../create-experimental-interaction-metrics-payload';
|
|
17
19
|
import { getBm3Timings } from '../custom-timings';
|
|
18
20
|
import { getGlobalErrorCount } from '../global-error-handler';
|
|
19
21
|
import { getPageVisibilityState } from '../hidden-timing';
|
|
20
22
|
import * as initialPageLoadExtraTiming from '../initial-page-load-extra-timing';
|
|
21
|
-
import { interactionSpans as atlaskitInteractionSpans
|
|
23
|
+
import { interactionSpans as atlaskitInteractionSpans } from '../interaction-metrics';
|
|
22
24
|
import * as resourceTiming from '../resource-timing';
|
|
23
25
|
import { roundEpsilon } from '../round-number';
|
|
24
26
|
import * as ssr from '../ssr';
|
|
25
|
-
import {
|
|
26
|
-
|
|
27
|
-
function getUfoNameOverride(interaction) {
|
|
27
|
+
import { buildSegmentTree, getPageVisibilityUpToTTAI, getSSRDoneTimeValue, getTTAI, getVCMetrics, labelStackStartWith, optimizeLabelStack, sanitizeUfoName, stringifyLabelStackFully } from './common/utils';
|
|
28
|
+
export function getUfoNameOverride(interaction) {
|
|
28
29
|
var ufoName = interaction.ufoName,
|
|
29
30
|
apdex = interaction.apdex;
|
|
30
31
|
try {
|
|
@@ -36,7 +37,6 @@ function getUfoNameOverride(interaction) {
|
|
|
36
37
|
}
|
|
37
38
|
}
|
|
38
39
|
return ufoName;
|
|
39
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
40
40
|
} catch (e) {
|
|
41
41
|
return ufoName;
|
|
42
42
|
}
|
|
@@ -71,11 +71,6 @@ var getPageVisibilityUpToTTI = function getPageVisibilityUpToTTI(interaction) {
|
|
|
71
71
|
var bm3EndTimeOrInteractionEndTime = getBm3EndTimeOrFallbackValue(interaction);
|
|
72
72
|
return getPageVisibilityState(start, bm3EndTimeOrInteractionEndTime);
|
|
73
73
|
};
|
|
74
|
-
var getPageVisibilityUpToTTAI = function getPageVisibilityUpToTTAI(interaction) {
|
|
75
|
-
var start = interaction.start,
|
|
76
|
-
end = interaction.end;
|
|
77
|
-
return getPageVisibilityState(start, end);
|
|
78
|
-
};
|
|
79
74
|
var getVisibilityStateFromPerformance = function getVisibilityStateFromPerformance(stop) {
|
|
80
75
|
try {
|
|
81
76
|
var results = performance.getEntriesByType('visibility-state');
|
|
@@ -131,15 +126,6 @@ var getMoreAccuratePageVisibilityUpToTTAI = function getMoreAccuratePageVisibili
|
|
|
131
126
|
}
|
|
132
127
|
return old;
|
|
133
128
|
};
|
|
134
|
-
var getInteractionStatus = function getInteractionStatus(interaction) {
|
|
135
|
-
var originalInteractionStatus = interaction.abortReason ? 'ABORTED' : 'SUCCEEDED';
|
|
136
|
-
var hasBm3TTI = interaction.apdex.length > 0;
|
|
137
|
-
var overrideStatus = hasBm3TTI ? 'SUCCEEDED' : originalInteractionStatus;
|
|
138
|
-
return {
|
|
139
|
-
originalInteractionStatus: originalInteractionStatus,
|
|
140
|
-
overrideStatus: overrideStatus
|
|
141
|
-
};
|
|
142
|
-
};
|
|
143
129
|
var getResourceTimings = function getResourceTimings(start, end) {
|
|
144
130
|
var _resourceTiming$getRe;
|
|
145
131
|
return (_resourceTiming$getRe = resourceTiming.getResourceTimings(start, end)) !== null && _resourceTiming$getRe !== void 0 ? _resourceTiming$getRe : undefined;
|
|
@@ -168,42 +154,6 @@ var getPaintMetrics = function getPaintMetrics(type) {
|
|
|
168
154
|
});
|
|
169
155
|
return metrics;
|
|
170
156
|
};
|
|
171
|
-
var getVCMetrics = function getVCMetrics(interaction) {
|
|
172
|
-
var _config$vc, _interaction$apdex;
|
|
173
|
-
var config = getConfig();
|
|
174
|
-
if (!(config !== null && config !== void 0 && (_config$vc = config.vc) !== null && _config$vc !== void 0 && _config$vc.enabled)) {
|
|
175
|
-
return {};
|
|
176
|
-
}
|
|
177
|
-
if (interaction.type !== 'page_load' && interaction.type !== 'transition') {
|
|
178
|
-
return {};
|
|
179
|
-
}
|
|
180
|
-
var ssr = interaction.type === 'page_load' && config !== null && config !== void 0 && config.ssr ? {
|
|
181
|
-
ssr: getSSRDoneTimeValue(config)
|
|
182
|
-
} : null;
|
|
183
|
-
postInteractionLog.setVCObserverSSRConfig(ssr);
|
|
184
|
-
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;
|
|
185
|
-
var prefix = 'ufo';
|
|
186
|
-
var result = getVCObserver().getVCResult(_objectSpread({
|
|
187
|
-
start: interaction.start,
|
|
188
|
-
stop: interaction.end,
|
|
189
|
-
tti: tti,
|
|
190
|
-
prefix: prefix,
|
|
191
|
-
vc: interaction.vc
|
|
192
|
-
}, ssr));
|
|
193
|
-
postInteractionLog.setLastInteractionFinishVCResult(result);
|
|
194
|
-
var VC = result === null || result === void 0 ? void 0 : result['metrics:vc'];
|
|
195
|
-
if (!VC || !(result !== null && result !== void 0 && result["".concat(prefix, ":vc:clean")])) {
|
|
196
|
-
return result;
|
|
197
|
-
}
|
|
198
|
-
var interactionStatus = getInteractionStatus(interaction);
|
|
199
|
-
var pageVisibilityUpToTTAI = getPageVisibilityUpToTTAI(interaction);
|
|
200
|
-
if (interactionStatus.originalInteractionStatus !== 'SUCCEEDED' || pageVisibilityUpToTTAI !== 'visible') {
|
|
201
|
-
return result;
|
|
202
|
-
}
|
|
203
|
-
return _objectSpread(_objectSpread({}, result), {}, {
|
|
204
|
-
'metric:vc90': VC['90']
|
|
205
|
-
});
|
|
206
|
-
};
|
|
207
157
|
var getNavigationMetrics = function getNavigationMetrics(type) {
|
|
208
158
|
if (type !== 'page_load') {
|
|
209
159
|
return {};
|
|
@@ -251,14 +201,13 @@ var getNavigationMetrics = function getNavigationMetrics(type) {
|
|
|
251
201
|
};
|
|
252
202
|
};
|
|
253
203
|
var getPPSMetrics = function getPPSMetrics(interaction) {
|
|
254
|
-
var _interaction$
|
|
204
|
+
var _interaction$apdex;
|
|
255
205
|
var start = interaction.start,
|
|
256
206
|
end = interaction.end;
|
|
257
207
|
var config = getConfig();
|
|
258
|
-
var interactionStatus = getInteractionStatus(interaction);
|
|
259
208
|
var pageVisibilityUpToTTAI = getPageVisibilityUpToTTAI(interaction);
|
|
260
|
-
var tti = (_interaction$
|
|
261
|
-
var ttai =
|
|
209
|
+
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;
|
|
210
|
+
var ttai = !interaction.abortReason && pageVisibilityUpToTTAI === 'visible' ? Math.round(end - start) : undefined;
|
|
262
211
|
var PPSMetricsAtTTI = tti !== undefined ? getLighthouseMetrics({
|
|
263
212
|
start: start,
|
|
264
213
|
stop: tti
|
|
@@ -348,13 +297,13 @@ function optimizeCustomData(interaction) {
|
|
|
348
297
|
for (var _i = 0, _Object$entries = Object.entries(currentValue.custom || {}); _i < _Object$entries.length; _i++) {
|
|
349
298
|
var _result$get$data2, _result$get2;
|
|
350
299
|
var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
|
|
351
|
-
|
|
300
|
+
key = _Object$entries$_i[0],
|
|
352
301
|
value = _Object$entries$_i[1];
|
|
353
302
|
var label = stringifyLabelStackFully([]);
|
|
354
303
|
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 : {};
|
|
355
304
|
result.set(label, {
|
|
356
305
|
labelStack: optimizeLabelStack([]),
|
|
357
|
-
data: Object.assign(labelValue, _defineProperty({},
|
|
306
|
+
data: Object.assign(labelValue, _defineProperty({}, key, value))
|
|
358
307
|
});
|
|
359
308
|
}
|
|
360
309
|
return result;
|
|
@@ -592,10 +541,6 @@ function getBm3TrackerTimings(interaction) {
|
|
|
592
541
|
legacyMetrics: legacyMetrics
|
|
593
542
|
};
|
|
594
543
|
}
|
|
595
|
-
function getSSRDoneTimeValue(config) {
|
|
596
|
-
var _config$ssr, _config$ssr2;
|
|
597
|
-
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();
|
|
598
|
-
}
|
|
599
544
|
function getPayloadSize(payload) {
|
|
600
545
|
return Math.round(new TextEncoder().encode(JSON.stringify(payload)).length / 1024);
|
|
601
546
|
}
|
|
@@ -638,13 +583,15 @@ function getStylesheetMetrics() {
|
|
|
638
583
|
return {};
|
|
639
584
|
}
|
|
640
585
|
}
|
|
586
|
+
var regularTTAI;
|
|
587
|
+
var expTTAI;
|
|
641
588
|
function getErrorCounts(interaction) {
|
|
642
589
|
return {
|
|
643
590
|
'ufo:errors:globalCount': getGlobalErrorCount(),
|
|
644
591
|
'ufo:errors:count': interaction.errors.length
|
|
645
592
|
};
|
|
646
593
|
}
|
|
647
|
-
function createInteractionMetricsPayload(interaction, interactionId) {
|
|
594
|
+
function createInteractionMetricsPayload(interaction, interactionId, experimental) {
|
|
648
595
|
var _window$location, _config$additionalPay;
|
|
649
596
|
var interactionPayloadStart = performance.now();
|
|
650
597
|
var config = getConfig();
|
|
@@ -679,7 +626,7 @@ function createInteractionMetricsPayload(interaction, interactionId) {
|
|
|
679
626
|
} : {};
|
|
680
627
|
// Page Load
|
|
681
628
|
var getPageLoadInteractionMetrics = function getPageLoadInteractionMetrics() {
|
|
682
|
-
var _config$
|
|
629
|
+
var _config$ssr;
|
|
683
630
|
if (!isPageLoad) {
|
|
684
631
|
return {};
|
|
685
632
|
}
|
|
@@ -690,12 +637,12 @@ function createInteractionMetricsPayload(interaction, interactionId) {
|
|
|
690
637
|
} : {};
|
|
691
638
|
return _objectSpread(_objectSpread({}, SSRDoneTime), {}, {
|
|
692
639
|
isBM3ConfigSSRDoneAsFmp: interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp,
|
|
693
|
-
isUFOConfigSSRDoneAsFmp: interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp || !!(config !== null && config !== void 0 && (_config$
|
|
640
|
+
isUFOConfigSSRDoneAsFmp: interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp || !!(config !== null && config !== void 0 && (_config$ssr = config.ssr) !== null && _config$ssr !== void 0 && _config$ssr.getSSRDoneTime)
|
|
694
641
|
});
|
|
695
642
|
};
|
|
696
643
|
// Detailed payload. Page visibility = visible
|
|
697
644
|
var getDetailedInteractionMetrics = function getDetailedInteractionMetrics() {
|
|
698
|
-
if (window.__UFO_COMPACT_PAYLOAD__ || !isDetailedPayload) {
|
|
645
|
+
if (experimental || window.__UFO_COMPACT_PAYLOAD__ || !isDetailedPayload) {
|
|
699
646
|
return {};
|
|
700
647
|
}
|
|
701
648
|
var spans = [].concat(_toConsumableArray(interaction.spans), _toConsumableArray(atlaskitInteractionSpans));
|
|
@@ -710,7 +657,7 @@ function createInteractionMetricsPayload(interaction, interactionId) {
|
|
|
710
657
|
}),
|
|
711
658
|
holdActive: _toConsumableArray(interaction.holdActive.values()),
|
|
712
659
|
redirects: optimizeRedirects(interaction.redirects, start),
|
|
713
|
-
holdInfo: optimizeHoldInfo(interaction.holdInfo, start),
|
|
660
|
+
holdInfo: optimizeHoldInfo(experimental ? interaction.holdExpInfo : interaction.holdInfo, start),
|
|
714
661
|
spans: optimizeSpans(spans, start),
|
|
715
662
|
requestInfo: optimizeRequestInfo(interaction.requestInfo, start),
|
|
716
663
|
customTimings: optimizeCustomTimings(interaction.customTimings, start),
|
|
@@ -720,16 +667,21 @@ function createInteractionMetricsPayload(interaction, interactionId) {
|
|
|
720
667
|
};
|
|
721
668
|
// Page load & detailed payload
|
|
722
669
|
var getPageLoadDetailedInteractionMetrics = function getPageLoadDetailedInteractionMetrics() {
|
|
723
|
-
var _config$
|
|
670
|
+
var _config$ssr2;
|
|
724
671
|
if (!isPageLoad || !isDetailedPayload) {
|
|
725
672
|
return {};
|
|
726
673
|
}
|
|
727
674
|
var config = getConfig();
|
|
728
675
|
return {
|
|
729
676
|
initialPageLoadExtraTimings: objectToArray(initialPageLoadExtraTiming.getTimings()),
|
|
730
|
-
SSRTimings: config !== null && config !== void 0 && (_config$
|
|
677
|
+
SSRTimings: config !== null && config !== void 0 && (_config$ssr2 = config.ssr) !== null && _config$ssr2 !== void 0 && _config$ssr2.getSSRTimings ? config.ssr.getSSRTimings() : objectToArray(ssr.getSSRTimings())
|
|
731
678
|
};
|
|
732
679
|
};
|
|
680
|
+
if (experimental) {
|
|
681
|
+
expTTAI = getTTAI(interaction);
|
|
682
|
+
} else {
|
|
683
|
+
regularTTAI = getTTAI(interaction);
|
|
684
|
+
}
|
|
733
685
|
var newUFOName = sanitizeUfoName(ufoName);
|
|
734
686
|
var payload = {
|
|
735
687
|
actionSubject: 'experience',
|
|
@@ -738,7 +690,7 @@ function createInteractionMetricsPayload(interaction, interactionId) {
|
|
|
738
690
|
source: 'measured',
|
|
739
691
|
tags: ['observability'],
|
|
740
692
|
attributes: {
|
|
741
|
-
properties: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
|
|
693
|
+
properties: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
|
|
742
694
|
// basic
|
|
743
695
|
'event:hostname': ((_window$location = window.location) === null || _window$location === void 0 ? void 0 : _window$location.hostname) || 'unknown',
|
|
744
696
|
'event:product': config.product,
|
|
@@ -750,10 +702,10 @@ function createInteractionMetricsPayload(interaction, interactionId) {
|
|
|
750
702
|
payloadSource: 'platform'
|
|
751
703
|
},
|
|
752
704
|
'event:region': config.region || 'unknown',
|
|
753
|
-
'experience:key': 'custom.interaction-metrics',
|
|
705
|
+
'experience:key': experimental ? 'custom.experimental-interaction-metrics' : 'custom.interaction-metrics',
|
|
754
706
|
'experience:name': newUFOName
|
|
755
|
-
}, 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)), {}, {
|
|
756
|
-
interactionMetrics: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
|
|
707
|
+
}, getBrowserMetadata()), getSSRProperties(type)), getPPSMetrics(interaction)), getPaintMetrics(type)), getNavigationMetrics(type)), getVCMetrics(interaction)), experimental ? getExperimentalVCMetrics(interaction) : undefined), (_config$additionalPay = config.additionalPayloadData) === null || _config$additionalPay === void 0 ? void 0 : _config$additionalPay.call(config, interaction)), getTracingContextData(interaction)), getStylesheetMetrics()), getErrorCounts(interaction)), {}, {
|
|
708
|
+
interactionMetrics: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
|
|
757
709
|
namePrefix: config.namePrefix || '',
|
|
758
710
|
segmentPrefix: config.segmentPrefix || '',
|
|
759
711
|
interactionId: interactionId,
|
|
@@ -784,11 +736,18 @@ function createInteractionMetricsPayload(interaction, interactionId) {
|
|
|
784
736
|
marks: optimizeMarks(interaction.marks),
|
|
785
737
|
customData: optimizeCustomData(interaction),
|
|
786
738
|
reactProfilerTimings: optimizeReactProfilerTimings(interaction.reactProfilerTimings, start)
|
|
787
|
-
}, labelStack), getPageLoadInteractionMetrics()), getDetailedInteractionMetrics()), getPageLoadDetailedInteractionMetrics()), getBm3TrackerTimings(interaction)),
|
|
739
|
+
}, labelStack), getPageLoadInteractionMetrics()), getDetailedInteractionMetrics()), getPageLoadDetailedInteractionMetrics()), getBm3TrackerTimings(interaction)), {}, {
|
|
740
|
+
'metric:ttai': experimental ? regularTTAI || expTTAI : undefined,
|
|
741
|
+
'metric:experimental:ttai': expTTAI
|
|
742
|
+
}),
|
|
788
743
|
'ufo:payloadTime': roundEpsilon(performance.now() - interactionPayloadStart)
|
|
789
744
|
})
|
|
790
745
|
}
|
|
791
746
|
};
|
|
747
|
+
if (experimental) {
|
|
748
|
+
regularTTAI = undefined;
|
|
749
|
+
expTTAI = undefined;
|
|
750
|
+
}
|
|
792
751
|
payload.attributes.properties['event:sizeInKb'] = getPayloadSize(payload.attributes.properties);
|
|
793
752
|
return payload;
|
|
794
753
|
}
|
|
@@ -799,4 +758,20 @@ export function createPayloads(interactionId, interaction) {
|
|
|
799
758
|
});
|
|
800
759
|
var interactionMetricsPayload = createInteractionMetricsPayload(modifiedInteraction, interactionId);
|
|
801
760
|
return [interactionMetricsPayload];
|
|
761
|
+
}
|
|
762
|
+
export function createExperimentalMetricsPayload(interactionId, interaction) {
|
|
763
|
+
var config = getConfig();
|
|
764
|
+
if (!config) {
|
|
765
|
+
throw Error('UFO Configuration not provided');
|
|
766
|
+
}
|
|
767
|
+
var ufoName = sanitizeUfoName(interaction.ufoName);
|
|
768
|
+
var rate = getExperimentalInteractionRate(ufoName, interaction.type);
|
|
769
|
+
if (!coinflip(rate)) {
|
|
770
|
+
return null;
|
|
771
|
+
}
|
|
772
|
+
var pageVisibilityState = getPageVisibilityState(interaction.start, interaction.end);
|
|
773
|
+
if (pageVisibilityState !== 'visible') {
|
|
774
|
+
return null;
|
|
775
|
+
}
|
|
776
|
+
return createInteractionMetricsPayload(interaction, interactionId, true);
|
|
802
777
|
}
|
|
@@ -1,2 +1,7 @@
|
|
|
1
|
-
var interactions = new Map();
|
|
2
|
-
export
|
|
1
|
+
export var interactions = new Map();
|
|
2
|
+
export var CLEANUP_TIMEOUT = 60 * 1000;
|
|
3
|
+
export var CLEANUP_TIMEOUT_AFTER_APDEX = 15 * 1000;
|
|
4
|
+
export var interactionQueue = [];
|
|
5
|
+
export var segmentCache = new Map();
|
|
6
|
+
export var segmentObservers = [];
|
|
7
|
+
export var moduleLoadingRequests = {};
|