@atlaskit/react-ufo 2.4.5 → 2.4.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/create-experimental-interaction-metrics-payload/package.json +15 -0
- package/dist/cjs/config/index.js +40 -18
- package/dist/cjs/create-experimental-interaction-metrics-payload/index.js +89 -0
- package/dist/cjs/create-payload/common/utils/index.js +85 -1
- package/dist/cjs/create-payload/index.js +49 -85
- package/dist/cjs/create-post-interaction-log-payload/index.js +1 -4
- package/dist/cjs/interaction-metrics/common/constants.js +7 -1
- package/dist/cjs/interaction-metrics/common/index.js +151 -0
- package/dist/cjs/interaction-metrics/index.js +139 -204
- package/dist/cjs/interaction-metrics/post-interaction-log.js +6 -2
- package/dist/cjs/interaction-metrics-init/index.js +27 -9
- package/dist/cjs/load-hold/UFOLoadHold.js +3 -4
- package/dist/cjs/segment/segment.js +7 -9
- package/dist/cjs/trace-pageload/index.js +2 -1
- package/dist/cjs/vc/vc-observer/observers/index.js +1 -40
- package/dist/es2019/config/index.js +22 -0
- package/dist/es2019/create-experimental-interaction-metrics-payload/index.js +67 -0
- package/dist/es2019/create-payload/common/utils/index.js +86 -1
- package/dist/es2019/create-payload/index.js +40 -81
- package/dist/es2019/create-post-interaction-log-payload/index.js +1 -4
- package/dist/es2019/interaction-metrics/common/constants.js +6 -0
- package/dist/es2019/interaction-metrics/common/index.js +103 -0
- package/dist/es2019/interaction-metrics/index.js +92 -129
- package/dist/es2019/interaction-metrics/post-interaction-log.js +6 -2
- package/dist/es2019/interaction-metrics-init/index.js +21 -8
- package/dist/es2019/load-hold/UFOLoadHold.js +3 -4
- package/dist/es2019/segment/segment.js +6 -12
- package/dist/es2019/trace-pageload/index.js +1 -1
- package/dist/es2019/vc/vc-observer/observers/index.js +1 -20
- package/dist/esm/config/index.js +39 -18
- package/dist/esm/create-experimental-interaction-metrics-payload/index.js +81 -0
- package/dist/esm/create-payload/common/utils/index.js +80 -1
- package/dist/esm/create-payload/index.js +45 -83
- package/dist/esm/create-post-interaction-log-payload/index.js +1 -4
- package/dist/esm/interaction-metrics/common/constants.js +6 -0
- package/dist/esm/interaction-metrics/common/index.js +132 -0
- package/dist/esm/interaction-metrics/index.js +87 -156
- package/dist/esm/interaction-metrics/post-interaction-log.js +6 -2
- package/dist/esm/interaction-metrics-init/index.js +24 -10
- package/dist/esm/load-hold/UFOLoadHold.js +3 -4
- package/dist/esm/segment/segment.js +7 -9
- package/dist/esm/trace-pageload/index.js +1 -1
- package/dist/esm/vc/vc-observer/observers/index.js +1 -40
- package/dist/types/common/common/types.d.ts +9 -5
- package/dist/types/config/index.d.ts +6 -0
- package/dist/types/create-experimental-interaction-metrics-payload/index.d.ts +31 -0
- package/dist/types/create-payload/common/utils/index.d.ts +12 -0
- package/dist/types/create-payload/index.d.ts +13 -5716
- package/dist/types/create-post-interaction-log-payload/index.d.ts +2 -0
- package/dist/types/interaction-metrics/common/constants.d.ts +31 -1
- package/dist/types/interaction-metrics/common/index.d.ts +16 -0
- package/dist/types/interaction-metrics/index.d.ts +4 -15
- package/dist/types/interaction-metrics/post-interaction-log.d.ts +1 -1
- package/dist/types/load-hold/UFOLoadHold.d.ts +1 -2
- package/dist/types/trace-pageload/index.d.ts +1 -0
- package/dist/types/vc/vc-observer/observers/index.d.ts +0 -1
- package/dist/types-ts4.5/common/common/types.d.ts +9 -5
- package/dist/types-ts4.5/config/index.d.ts +6 -0
- package/dist/types-ts4.5/create-experimental-interaction-metrics-payload/index.d.ts +31 -0
- package/dist/types-ts4.5/create-payload/common/utils/index.d.ts +12 -0
- package/dist/types-ts4.5/create-payload/index.d.ts +13 -5716
- package/dist/types-ts4.5/create-post-interaction-log-payload/index.d.ts +2 -0
- package/dist/types-ts4.5/interaction-metrics/common/constants.d.ts +31 -1
- package/dist/types-ts4.5/interaction-metrics/common/index.d.ts +16 -0
- package/dist/types-ts4.5/interaction-metrics/index.d.ts +4 -15
- package/dist/types-ts4.5/interaction-metrics/post-interaction-log.d.ts +1 -1
- package/dist/types-ts4.5/load-hold/UFOLoadHold.d.ts +1 -2
- package/dist/types-ts4.5/trace-pageload/index.d.ts +1 -0
- package/dist/types-ts4.5/vc/vc-observer/observers/index.d.ts +0 -1
- package/package.json +2 -1
|
@@ -26,6 +26,14 @@ function sinkInteraction(instance, payloadPackage) {
|
|
|
26
26
|
});
|
|
27
27
|
});
|
|
28
28
|
}
|
|
29
|
+
function sinkExperimentalInteractionMetrics(instance, payloadPackage) {
|
|
30
|
+
(0, _interactionMetrics.sinkExperimentalHandler)(function (interactionId, interaction) {
|
|
31
|
+
(0, _scheduler.unstable_scheduleCallback)(_scheduler.unstable_IdlePriority, function () {
|
|
32
|
+
var payload = payloadPackage.createExperimentalInteractionMetricsPayload(interactionId, interaction);
|
|
33
|
+
instance.sendOperationalEvent(payload);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
}
|
|
29
37
|
function sinkPostInteractionLog(instance, createPostInteractionLogPayload) {
|
|
30
38
|
(0, _interactionMetrics.sinkPostInteractionLogHandler)(function (logOutput) {
|
|
31
39
|
(0, _scheduler.unstable_scheduleCallback)(_scheduler.unstable_IdlePriority, function () {
|
|
@@ -56,33 +64,43 @@ var init = exports.init = function init(analyticsWebClientAsync, config) {
|
|
|
56
64
|
_interactionMetrics.postInteractionLog.startVCObserver({
|
|
57
65
|
startTime: 0
|
|
58
66
|
});
|
|
67
|
+
_interactionMetrics.experimentalInteractionLog.initializeVCObserver(vcOptions).startVCObserver({
|
|
68
|
+
startTime: 0
|
|
69
|
+
});
|
|
59
70
|
}
|
|
60
71
|
(0, _hiddenTiming.setupHiddenTimingCapture)();
|
|
61
72
|
(0, _additionalPayload.startLighthouseObserver)();
|
|
62
73
|
initialized = true;
|
|
63
|
-
Promise.all([analyticsWebClientAsync,
|
|
64
|
-
Promise.resolve().then(function () {
|
|
74
|
+
Promise.all([analyticsWebClientAsync, Promise.resolve().then(function () {
|
|
65
75
|
return _interopRequireWildcard(require( /* webpackChunkName: "create-payloads" */'../create-payload'));
|
|
66
|
-
}),
|
|
67
|
-
|
|
68
|
-
|
|
76
|
+
}), Promise.resolve().then(function () {
|
|
77
|
+
return _interopRequireWildcard(require( /* webpackChunkName: "create-experimental-interaction-metrics-payload" */'../create-experimental-interaction-metrics-payload'));
|
|
78
|
+
}), Promise.resolve().then(function () {
|
|
79
|
+
return _interopRequireWildcard(require( /* webpackChunkName: "create-post-interaction-log-payload" */'../create-post-interaction-log-payload'));
|
|
69
80
|
})]).then(function (_ref) {
|
|
70
|
-
var _ref2 = (0, _slicedToArray2.default)(_ref,
|
|
81
|
+
var _ref2 = (0, _slicedToArray2.default)(_ref, 4),
|
|
71
82
|
awc = _ref2[0],
|
|
72
83
|
payloadPackage = _ref2[1],
|
|
73
|
-
|
|
84
|
+
createExperimentalInteractionMetricsPayload = _ref2[2],
|
|
85
|
+
createPostInteractionLogPayloadPackage = _ref2[3];
|
|
74
86
|
if (awc.getAnalyticsWebClientPromise) {
|
|
75
87
|
awc.getAnalyticsWebClientPromise().then(function (client) {
|
|
76
|
-
var _config$postInteracti;
|
|
88
|
+
var _config$experimentalI, _config$postInteracti;
|
|
77
89
|
var instance = client.getInstance();
|
|
78
90
|
sinkInteraction(instance, payloadPackage);
|
|
91
|
+
if (config !== null && config !== void 0 && (_config$experimentalI = config.experimentalInteractionMetrics) !== null && _config$experimentalI !== void 0 && _config$experimentalI.enabled) {
|
|
92
|
+
sinkExperimentalInteractionMetrics(instance, createExperimentalInteractionMetricsPayload);
|
|
93
|
+
}
|
|
79
94
|
if ((_config$postInteracti = config.postInteractionLog) !== null && _config$postInteracti !== void 0 && _config$postInteracti.enabled) {
|
|
80
95
|
sinkPostInteractionLog(instance, createPostInteractionLogPayloadPackage.default);
|
|
81
96
|
}
|
|
82
97
|
});
|
|
83
98
|
} else if (awc.sendOperationalEvent) {
|
|
84
|
-
var _config$postInteracti2;
|
|
99
|
+
var _config$experimentalI2, _config$postInteracti2;
|
|
85
100
|
sinkInteraction(awc, payloadPackage);
|
|
101
|
+
if (config !== null && config !== void 0 && (_config$experimentalI2 = config.experimentalInteractionMetrics) !== null && _config$experimentalI2 !== void 0 && _config$experimentalI2.enabled) {
|
|
102
|
+
sinkExperimentalInteractionMetrics(awc, createExperimentalInteractionMetricsPayload);
|
|
103
|
+
}
|
|
86
104
|
if ((_config$postInteracti2 = config.postInteractionLog) !== null && _config$postInteracti2 !== void 0 && _config$postInteracti2.enabled) {
|
|
87
105
|
sinkPostInteractionLog(awc, createPostInteractionLogPayloadPackage.default);
|
|
88
106
|
}
|
|
@@ -32,8 +32,7 @@ var useLayoutEffectSAFE = typeof window === 'undefined' ? _react.useEffect : _re
|
|
|
32
32
|
* return (
|
|
33
33
|
* <>
|
|
34
34
|
* <Skeleton />
|
|
35
|
-
* <UFOLoadHold name="card"
|
|
36
|
-
* </UFOLoadHold>
|
|
35
|
+
* <UFOLoadHold name="card" />
|
|
37
36
|
* )
|
|
38
37
|
* }
|
|
39
38
|
* ```
|
|
@@ -68,8 +67,8 @@ function UFOLoadHold(_ref) {
|
|
|
68
67
|
// react-18: useId instead
|
|
69
68
|
var context = (0, _react.useContext)(_interactionContext.default);
|
|
70
69
|
useLayoutEffectSAFE(function () {
|
|
71
|
-
if (hold &&
|
|
72
|
-
return context.hold(name);
|
|
70
|
+
if (hold && context != null) {
|
|
71
|
+
return context.hold(name, experimental);
|
|
73
72
|
}
|
|
74
73
|
}, [hold, context, name]);
|
|
75
74
|
|
|
@@ -91,15 +91,14 @@ function UFOSegment(_ref) {
|
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
|
-
function _internalHold(labelStack, name
|
|
95
|
-
|
|
96
|
-
) {
|
|
94
|
+
function _internalHold(labelStack, name) {
|
|
95
|
+
var experimental = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
97
96
|
if (interactionId.current != null) {
|
|
98
97
|
if (parentContext) {
|
|
99
|
-
return parentContext._internalHold(labelStack, name);
|
|
98
|
+
return parentContext._internalHold(labelStack, name, experimental);
|
|
100
99
|
} else {
|
|
101
100
|
var capturedInteractionId = interactionId.current;
|
|
102
|
-
var disposeHold = (0, _interactionMetrics.addHold)(interactionId.current, labelStack, name);
|
|
101
|
+
var disposeHold = (0, _interactionMetrics.addHold)(interactionId.current, labelStack, name, experimental);
|
|
103
102
|
return function () {
|
|
104
103
|
if (capturedInteractionId === interactionId.current) {
|
|
105
104
|
disposeHold();
|
|
@@ -108,9 +107,7 @@ function UFOSegment(_ref) {
|
|
|
108
107
|
}
|
|
109
108
|
}
|
|
110
109
|
}
|
|
111
|
-
function _internalHoldByID(labelStack, id, name, remove
|
|
112
|
-
// eslint-disable-next-line @typescript-eslint/no-invalid-void-type
|
|
113
|
-
) {
|
|
110
|
+
function _internalHoldByID(labelStack, id, name, remove) {
|
|
114
111
|
if (interactionId.current != null) {
|
|
115
112
|
if (parentContext) {
|
|
116
113
|
parentContext._internalHoldByID(labelStack, name, id, remove);
|
|
@@ -133,7 +130,8 @@ function UFOSegment(_ref) {
|
|
|
133
130
|
labelStack: labelStack,
|
|
134
131
|
hold: function hold() {
|
|
135
132
|
var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'unknown';
|
|
136
|
-
|
|
133
|
+
var experimental = arguments.length > 1 ? arguments[1] : undefined;
|
|
134
|
+
return this._internalHold(this.labelStack, name, experimental);
|
|
137
135
|
},
|
|
138
136
|
addHoldByID: function addHoldByID(labelStack, id) {
|
|
139
137
|
var name = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'unknown';
|
|
@@ -4,6 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
+
exports.AWAITING_PAGELOAD_NAME = void 0;
|
|
7
8
|
exports.default = traceUFOPageLoad;
|
|
8
9
|
exports.updatePageloadName = updatePageloadName;
|
|
9
10
|
var _uuid = require("uuid");
|
|
@@ -13,7 +14,7 @@ var _experienceTraceIdContext = require("../experience-trace-id-context");
|
|
|
13
14
|
var _interactionIdContext = require("../interaction-id-context");
|
|
14
15
|
var _interactionMetrics = require("../interaction-metrics");
|
|
15
16
|
var _routeNameContext = _interopRequireDefault(require("../route-name-context"));
|
|
16
|
-
var AWAITING_PAGELOAD_NAME = 'awaiting_pageload_name';
|
|
17
|
+
var AWAITING_PAGELOAD_NAME = exports.AWAITING_PAGELOAD_NAME = 'awaiting_pageload_name';
|
|
17
18
|
function traceUFOPageLoad(ufoName) {
|
|
18
19
|
var routeName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ufoName;
|
|
19
20
|
var activeInteraction = (0, _interactionMetrics.getActiveInteraction)();
|
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.Observers = void 0;
|
|
8
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
8
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
10
9
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
11
10
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
@@ -13,9 +12,6 @@ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
|
13
12
|
var _vcUtils = require("../media-wrapper/vc-utils");
|
|
14
13
|
var _editorLnv = require("./editor-lnv");
|
|
15
14
|
var _ssrPlaceholders = require("./ssr-placeholders");
|
|
16
|
-
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; } } }; }
|
|
17
|
-
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; } }
|
|
18
|
-
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; }
|
|
19
15
|
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; }
|
|
20
16
|
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; }
|
|
21
17
|
var state = {
|
|
@@ -202,8 +198,7 @@ var Observers = exports.Observers = /*#__PURE__*/function () {
|
|
|
202
198
|
});
|
|
203
199
|
} else if (mutation.type === 'attributes') {
|
|
204
200
|
if (mutation.target instanceof HTMLElement) {
|
|
205
|
-
|
|
206
|
-
if ((0, _platformFeatureFlags.fg)('platform-ufo-vc-observe-attributes') || isDisplayStyleAttributeMutation) {
|
|
201
|
+
if ((0, _platformFeatureFlags.fg)('platform-ufo-vc-observe-attributes')) {
|
|
207
202
|
_this2.observeElement(mutation.target, mutation, 'attr', ignoreReason);
|
|
208
203
|
}
|
|
209
204
|
}
|
|
@@ -212,40 +207,6 @@ var Observers = exports.Observers = /*#__PURE__*/function () {
|
|
|
212
207
|
_this2.measureStop();
|
|
213
208
|
}) : null;
|
|
214
209
|
}
|
|
215
|
-
}, {
|
|
216
|
-
key: "getStyleDisplay",
|
|
217
|
-
value: function getStyleDisplay(styleAttributeValue) {
|
|
218
|
-
if (!styleAttributeValue) {
|
|
219
|
-
return undefined;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
// Split the style string into individual declarations
|
|
223
|
-
var declarations = styleAttributeValue.split(';');
|
|
224
|
-
// Iterate over each declaration
|
|
225
|
-
var _iterator = _createForOfIteratorHelper(declarations),
|
|
226
|
-
_step;
|
|
227
|
-
try {
|
|
228
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
229
|
-
var declaration = _step.value;
|
|
230
|
-
// Trim whitespace and split into property and value
|
|
231
|
-
var _declaration$split$ma = declaration.split(':').map(function (part) {
|
|
232
|
-
return part.trim();
|
|
233
|
-
}),
|
|
234
|
-
_declaration$split$ma2 = (0, _slicedToArray2.default)(_declaration$split$ma, 2),
|
|
235
|
-
property = _declaration$split$ma2[0],
|
|
236
|
-
value = _declaration$split$ma2[1];
|
|
237
|
-
// Check if the property is 'display'
|
|
238
|
-
if (property && property.toLowerCase() === 'display') {
|
|
239
|
-
return value;
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
} catch (err) {
|
|
243
|
-
_iterator.e(err);
|
|
244
|
-
} finally {
|
|
245
|
-
_iterator.f();
|
|
246
|
-
}
|
|
247
|
-
return undefined;
|
|
248
|
-
}
|
|
249
210
|
}, {
|
|
250
211
|
key: "getElementName",
|
|
251
212
|
value: function getElementName(element) {
|
|
@@ -67,6 +67,28 @@ export function getInteractionRate(name, interactionKind) {
|
|
|
67
67
|
return 0;
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
|
+
export function getExperimentalInteractionRate(name, interactionType) {
|
|
71
|
+
try {
|
|
72
|
+
if (!config) {
|
|
73
|
+
return 0;
|
|
74
|
+
}
|
|
75
|
+
const {
|
|
76
|
+
experimentalInteractionMetrics
|
|
77
|
+
} = config;
|
|
78
|
+
if (!(experimentalInteractionMetrics !== null && experimentalInteractionMetrics !== void 0 && experimentalInteractionMetrics.enabled)) {
|
|
79
|
+
return 0;
|
|
80
|
+
}
|
|
81
|
+
if (experimentalInteractionMetrics.rates && typeof experimentalInteractionMetrics.rates[name] === 'number') {
|
|
82
|
+
return experimentalInteractionMetrics.rates[name];
|
|
83
|
+
}
|
|
84
|
+
if (experimentalInteractionMetrics.kind && typeof experimentalInteractionMetrics.kind[interactionType] === 'number') {
|
|
85
|
+
return experimentalInteractionMetrics.kind[interactionType];
|
|
86
|
+
}
|
|
87
|
+
return 0;
|
|
88
|
+
} catch (e) {
|
|
89
|
+
return 0;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
70
92
|
export function getPostInteractionRate(name, interactionType) {
|
|
71
93
|
try {
|
|
72
94
|
if (!config) {
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
import coinflip from '../coinflip';
|
|
3
|
+
import { getConfig, getExperimentalInteractionRate } from '../config';
|
|
4
|
+
import { createInteractionMetricsPayload, getUfoNameOverride } from '../create-payload';
|
|
5
|
+
import { getPageVisibilityState } from '../hidden-timing';
|
|
6
|
+
import { VCObserver } from '../vc/vc-observer';
|
|
7
|
+
export class ExperimentalInteractionMetrics {
|
|
8
|
+
constructor() {
|
|
9
|
+
/**
|
|
10
|
+
* Handler function to process / send the observation data
|
|
11
|
+
*/
|
|
12
|
+
_defineProperty(this, "sinkHandlerFn", () => {});
|
|
13
|
+
/**
|
|
14
|
+
* independent VC observer that observes until `custom.post-interaction-logs` event is sent
|
|
15
|
+
*/
|
|
16
|
+
_defineProperty(this, "vcObserver", null);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Set the fn that would be invoked to process / send the observation data
|
|
20
|
+
*/
|
|
21
|
+
sinkHandler(sinkHandlerFn) {
|
|
22
|
+
this.sinkHandlerFn = sinkHandlerFn;
|
|
23
|
+
}
|
|
24
|
+
onInteractionComplete(interactionId, data, endTime = performance.now()) {
|
|
25
|
+
if (data.ufoName) {
|
|
26
|
+
data.end = endTime;
|
|
27
|
+
this.sinkHandlerFn(interactionId, data);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
initializeVCObserver(options) {
|
|
31
|
+
if (this.vcObserver === null) {
|
|
32
|
+
this.vcObserver = new VCObserver({
|
|
33
|
+
...options,
|
|
34
|
+
isPostInteraction: true
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
return this;
|
|
38
|
+
}
|
|
39
|
+
startVCObserver({
|
|
40
|
+
startTime
|
|
41
|
+
}) {
|
|
42
|
+
var _this$vcObserver;
|
|
43
|
+
(_this$vcObserver = this.vcObserver) === null || _this$vcObserver === void 0 ? void 0 : _this$vcObserver.start({
|
|
44
|
+
startTime
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export function createExperimentalInteractionMetricsPayload(interactionId, interaction) {
|
|
49
|
+
const config = getConfig();
|
|
50
|
+
if (!config) {
|
|
51
|
+
throw Error('UFO Configuration not provided');
|
|
52
|
+
}
|
|
53
|
+
const ufoName = getUfoNameOverride(interaction);
|
|
54
|
+
const modifiedInteraction = {
|
|
55
|
+
...interaction,
|
|
56
|
+
ufoName
|
|
57
|
+
};
|
|
58
|
+
const rate = getExperimentalInteractionRate(ufoName, interaction.type);
|
|
59
|
+
if (!coinflip(rate)) {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
const pageVisibilityState = getPageVisibilityState(interaction.start, interaction.end);
|
|
63
|
+
if (pageVisibilityState !== 'visible') {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
return createInteractionMetricsPayload(modifiedInteraction, interactionId, true);
|
|
67
|
+
}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-non-null-asserted-optional-chain */
|
|
2
|
+
|
|
2
3
|
import { REACT_UFO_VERSION } from '../../../common/constants';
|
|
4
|
+
import { getConfig } from '../../../config';
|
|
5
|
+
import { getPageVisibilityState } from '../../../hidden-timing';
|
|
6
|
+
import { experimentalInteractionLog, postInteractionLog } from '../../../interaction-metrics';
|
|
7
|
+
import * as ssr from '../../../ssr';
|
|
8
|
+
import { getVCObserver } from '../../../vc';
|
|
3
9
|
export const sanitizeUfoName = name => {
|
|
4
10
|
return name.replace(/_/g, '-');
|
|
5
11
|
};
|
|
@@ -53,4 +59,83 @@ export function optimizeLabelStack(labelStack) {
|
|
|
53
59
|
s: ls.segmentId
|
|
54
60
|
} : {})
|
|
55
61
|
}));
|
|
56
|
-
}
|
|
62
|
+
}
|
|
63
|
+
export const getInteractionStatus = interaction => {
|
|
64
|
+
const originalInteractionStatus = interaction.abortReason ? 'ABORTED' : 'SUCCEEDED';
|
|
65
|
+
const hasBm3TTI = interaction.apdex.length > 0;
|
|
66
|
+
const overrideStatus = hasBm3TTI ? 'SUCCEEDED' : originalInteractionStatus;
|
|
67
|
+
return {
|
|
68
|
+
originalInteractionStatus,
|
|
69
|
+
overrideStatus
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
export const getPageVisibilityUpToTTAI = interaction => {
|
|
73
|
+
const {
|
|
74
|
+
start,
|
|
75
|
+
end
|
|
76
|
+
} = interaction;
|
|
77
|
+
return getPageVisibilityState(start, end);
|
|
78
|
+
};
|
|
79
|
+
export const calculateVCMetrics = (interaction, prefix, getVCResultFn) => {
|
|
80
|
+
var _interaction$apdex, _interaction$apdex$;
|
|
81
|
+
const result = getVCResultFn({
|
|
82
|
+
start: interaction.start,
|
|
83
|
+
stop: interaction.end,
|
|
84
|
+
tti: (_interaction$apdex = interaction.apdex) === null || _interaction$apdex === void 0 ? void 0 : (_interaction$apdex$ = _interaction$apdex[0]) === null || _interaction$apdex$ === void 0 ? void 0 : _interaction$apdex$.stopTime,
|
|
85
|
+
prefix,
|
|
86
|
+
vc: interaction.vc
|
|
87
|
+
});
|
|
88
|
+
const VC = result === null || result === void 0 ? void 0 : result['metrics:vc'];
|
|
89
|
+
if (!VC || !(result !== null && result !== void 0 && result[`${prefix}:vc:clean`])) {
|
|
90
|
+
return result;
|
|
91
|
+
}
|
|
92
|
+
const interactionStatus = getInteractionStatus(interaction);
|
|
93
|
+
const pageVisibilityUpToTTAI = getPageVisibilityUpToTTAI(interaction);
|
|
94
|
+
if (interactionStatus.originalInteractionStatus !== 'SUCCEEDED' || pageVisibilityUpToTTAI !== 'visible') {
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
return result;
|
|
98
|
+
};
|
|
99
|
+
export function getSSRDoneTimeValue(config) {
|
|
100
|
+
var _config$ssr, _config$ssr2;
|
|
101
|
+
return config !== null && config !== void 0 && (_config$ssr = config.ssr) !== null && _config$ssr !== void 0 && _config$ssr.getSSRDoneTime ? config === null || config === void 0 ? void 0 : (_config$ssr2 = config.ssr) === null || _config$ssr2 === void 0 ? void 0 : _config$ssr2.getSSRDoneTime() : ssr.getSSRDoneTime();
|
|
102
|
+
}
|
|
103
|
+
export const getVCMetrics = interaction => {
|
|
104
|
+
var _config$vc, _result$metricsVc;
|
|
105
|
+
const config = getConfig();
|
|
106
|
+
if (!(config !== null && config !== void 0 && (_config$vc = config.vc) !== null && _config$vc !== void 0 && _config$vc.enabled)) {
|
|
107
|
+
return {};
|
|
108
|
+
}
|
|
109
|
+
if (interaction.type !== 'page_load' && interaction.type !== 'transition') {
|
|
110
|
+
return {};
|
|
111
|
+
}
|
|
112
|
+
const ssr = interaction.type === 'page_load' && config !== null && config !== void 0 && config.ssr ? {
|
|
113
|
+
ssr: getSSRDoneTimeValue(config)
|
|
114
|
+
} : null;
|
|
115
|
+
postInteractionLog.setVCObserverSSRConfig(ssr);
|
|
116
|
+
const result = calculateVCMetrics(interaction, 'ufo', getVCObserver().getVCResult);
|
|
117
|
+
return {
|
|
118
|
+
...result,
|
|
119
|
+
'metric:vc90': result === null || result === void 0 ? void 0 : (_result$metricsVc = result['metrics:vc']) === null || _result$metricsVc === void 0 ? void 0 : _result$metricsVc['90']
|
|
120
|
+
};
|
|
121
|
+
};
|
|
122
|
+
export const getExperimentalVCMetrics = interaction => {
|
|
123
|
+
if (experimentalInteractionLog.vcObserver) {
|
|
124
|
+
var _result$metricsVc2;
|
|
125
|
+
const result = calculateVCMetrics(interaction, 'ufo-experimental', experimentalInteractionLog.vcObserver.getVCResult);
|
|
126
|
+
return {
|
|
127
|
+
...result,
|
|
128
|
+
'metric:experimental:vc90': result === null || result === void 0 ? void 0 : (_result$metricsVc2 = result['metrics:vc']) === null || _result$metricsVc2 === void 0 ? void 0 : _result$metricsVc2['90']
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
return null;
|
|
132
|
+
};
|
|
133
|
+
export const getTTAI = interaction => {
|
|
134
|
+
const {
|
|
135
|
+
start,
|
|
136
|
+
end
|
|
137
|
+
} = interaction;
|
|
138
|
+
const interactionStatus = getInteractionStatus(interaction);
|
|
139
|
+
const pageVisibilityUpToTTAI = getPageVisibilityUpToTTAI(interaction);
|
|
140
|
+
return interactionStatus.originalInteractionStatus === 'SUCCEEDED' && pageVisibilityUpToTTAI === 'visible' ? Math.round(end - start) : undefined;
|
|
141
|
+
};
|