@atlaskit/react-ufo 2.7.0 → 2.8.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 +12 -0
- package/dist/cjs/config/index.js +18 -40
- package/dist/cjs/create-payload/common/utils/index.js +2 -66
- package/dist/cjs/create-payload/index.js +78 -55
- package/dist/cjs/interaction-metrics/common/constants.js +3 -8
- package/dist/cjs/interaction-metrics/index.js +238 -166
- package/dist/cjs/interaction-metrics-init/index.js +9 -31
- package/dist/cjs/load-hold/UFOLoadHold.js +3 -5
- package/dist/cjs/segment/segment.js +8 -9
- package/dist/es2019/config/index.js +0 -22
- package/dist/es2019/create-payload/common/utils/index.js +1 -68
- package/dist/es2019/create-payload/index.js +77 -48
- package/dist/es2019/interaction-metrics/common/constants.js +2 -7
- package/dist/es2019/interaction-metrics/index.js +131 -91
- package/dist/es2019/interaction-metrics-init/index.js +8 -28
- package/dist/es2019/load-hold/UFOLoadHold.js +3 -5
- package/dist/es2019/segment/segment.js +11 -8
- package/dist/esm/config/index.js +18 -39
- package/dist/esm/create-payload/common/utils/index.js +1 -63
- package/dist/esm/create-payload/index.js +78 -53
- package/dist/esm/interaction-metrics/common/constants.js +2 -7
- package/dist/esm/interaction-metrics/index.js +158 -86
- package/dist/esm/interaction-metrics-init/index.js +8 -28
- package/dist/esm/load-hold/UFOLoadHold.js +3 -5
- package/dist/esm/segment/segment.js +8 -9
- package/dist/types/common/common/types.d.ts +4 -6
- package/dist/types/config/index.d.ts +0 -6
- package/dist/types/create-payload/common/utils/index.d.ts +0 -9
- package/dist/types/create-payload/index.d.ts +5660 -13
- package/dist/types/interaction-context/index.d.ts +0 -1
- package/dist/types/interaction-metrics/common/constants.d.ts +3 -32
- package/dist/types/interaction-metrics/index.d.ts +17 -1
- package/dist/types/load-hold/UFOLoadHold.d.ts +2 -1
- package/dist/types-ts4.5/common/common/types.d.ts +4 -6
- package/dist/types-ts4.5/config/index.d.ts +0 -6
- package/dist/types-ts4.5/create-payload/common/utils/index.d.ts +0 -9
- package/dist/types-ts4.5/create-payload/index.d.ts +5660 -13
- package/dist/types-ts4.5/interaction-context/index.d.ts +0 -1
- package/dist/types-ts4.5/interaction-metrics/common/constants.d.ts +3 -32
- package/dist/types-ts4.5/interaction-metrics/index.d.ts +17 -1
- package/dist/types-ts4.5/load-hold/UFOLoadHold.d.ts +2 -1
- package/package.json +2 -3
- package/create-experimental-interaction-metrics-payload/package.json +0 -15
- package/dist/cjs/create-experimental-interaction-metrics-payload/index.js +0 -100
- package/dist/cjs/interaction-metrics/common/index.js +0 -151
- package/dist/es2019/create-experimental-interaction-metrics-payload/index.js +0 -71
- package/dist/es2019/interaction-metrics/common/index.js +0 -103
- package/dist/esm/create-experimental-interaction-metrics-payload/index.js +0 -90
- package/dist/esm/interaction-metrics/common/index.js +0 -132
- package/dist/types/create-experimental-interaction-metrics-payload/index.d.ts +0 -16
- package/dist/types/interaction-metrics/common/index.d.ts +0 -16
- package/dist/types-ts4.5/create-experimental-interaction-metrics-payload/index.d.ts +0 -16
- package/dist/types-ts4.5/interaction-metrics/common/index.d.ts +0 -16
|
@@ -1,22 +1,30 @@
|
|
|
1
1
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
2
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
|
+
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
3
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; }
|
|
4
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; }
|
|
5
9
|
import { v4 as createUUID } from 'uuid';
|
|
6
10
|
import coinflip from '../coinflip';
|
|
7
11
|
import { getAwaitBM3TTIList, getCapabilityRate, getConfig } from '../config';
|
|
8
|
-
import { experimentalVC, getExperimentalVCMetrics, onExperimentalInteractionComplete } from '../create-experimental-interaction-metrics-payload';
|
|
9
|
-
import { getTTAI, postInteractionLog } from '../create-payload/common/utils';
|
|
10
12
|
import { clearActiveTrace } from '../experience-trace-id-context';
|
|
11
13
|
import { allFeatureFlagsAccessed, currentFeatureFlagsAccessed } from '../feature-flags-accessed';
|
|
12
14
|
import { getInteractionId } from '../interaction-id-context';
|
|
13
15
|
import { getVCObserver } from '../vc';
|
|
14
|
-
import
|
|
15
|
-
import
|
|
16
|
+
import interactions from './common/constants';
|
|
17
|
+
import PostInteractionLog from './post-interaction-log';
|
|
16
18
|
var PreviousInteractionLog = {
|
|
17
19
|
name: undefined,
|
|
18
20
|
isAborted: undefined
|
|
19
21
|
};
|
|
22
|
+
export var postInteractionLog = new PostInteractionLog();
|
|
23
|
+
var interactionQueue = [];
|
|
24
|
+
var segmentCache = new Map();
|
|
25
|
+
var CLEANUP_TIMEOUT = 60 * 1000;
|
|
26
|
+
var CLEANUP_TIMEOUT_AFTER_APDEX = 15 * 1000;
|
|
27
|
+
var segmentObservers = [];
|
|
20
28
|
export function getActiveInteraction() {
|
|
21
29
|
var interactionId = getInteractionId();
|
|
22
30
|
if (!interactionId.current) {
|
|
@@ -24,6 +32,51 @@ export function getActiveInteraction() {
|
|
|
24
32
|
}
|
|
25
33
|
return interactions.get(interactionId.current);
|
|
26
34
|
}
|
|
35
|
+
function isPerformanceTracingEnabled() {
|
|
36
|
+
var _getConfig;
|
|
37
|
+
return ((_getConfig = getConfig()) === null || _getConfig === void 0 ? void 0 : _getConfig.enableAdditionalPerformanceMarks) || window.__REACT_UFO_ENABLE_PERF_TRACING || process.env.NODE_ENV !== 'production';
|
|
38
|
+
}
|
|
39
|
+
function labelStackToString(labelStack, name) {
|
|
40
|
+
var _stack$map;
|
|
41
|
+
var stack = _toConsumableArray(labelStack !== null && labelStack !== void 0 ? labelStack : []);
|
|
42
|
+
if (name) {
|
|
43
|
+
stack.push({
|
|
44
|
+
name: name
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
return (_stack$map = stack.map(function (l) {
|
|
48
|
+
return l.name;
|
|
49
|
+
})) === null || _stack$map === void 0 ? void 0 : _stack$map.join('/');
|
|
50
|
+
}
|
|
51
|
+
function labelStackToIdString(labelStack) {
|
|
52
|
+
var _labelStack$map;
|
|
53
|
+
return labelStack === null || labelStack === void 0 || (_labelStack$map = labelStack.map(function (l) {
|
|
54
|
+
return 'segmentId' in l ? "".concat(l.name, ":").concat(l.segmentId) : "".concat(l.name);
|
|
55
|
+
})) === null || _labelStack$map === void 0 ? void 0 : _labelStack$map.join('/');
|
|
56
|
+
}
|
|
57
|
+
function addSegmentObserver(observer) {
|
|
58
|
+
segmentObservers.push(observer);
|
|
59
|
+
var _iterator = _createForOfIteratorHelper(segmentCache.values()),
|
|
60
|
+
_step;
|
|
61
|
+
try {
|
|
62
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
63
|
+
var segmentInfo = _step.value;
|
|
64
|
+
observer.onAdd(segmentInfo);
|
|
65
|
+
}
|
|
66
|
+
} catch (err) {
|
|
67
|
+
_iterator.e(err);
|
|
68
|
+
} finally {
|
|
69
|
+
_iterator.f();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function removeSegmentObserver(observer) {
|
|
73
|
+
var index = segmentObservers.findIndex(function (obs) {
|
|
74
|
+
return obs === observer;
|
|
75
|
+
});
|
|
76
|
+
if (index !== -1) {
|
|
77
|
+
segmentObservers.splice(index, 1);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
27
80
|
export function remove(interactionId) {
|
|
28
81
|
interactions.delete(interactionId);
|
|
29
82
|
}
|
|
@@ -172,6 +225,7 @@ export function addPreload(moduleId, timestamp) {
|
|
|
172
225
|
export function addLoad(identifier, start, end) {
|
|
173
226
|
addSpanToAll('bundle_load', identifier, null, start, end - start);
|
|
174
227
|
}
|
|
228
|
+
var moduleLoadingRequests = {};
|
|
175
229
|
export function extractModuleName(input) {
|
|
176
230
|
var result = input !== null && input !== void 0 ? input : '';
|
|
177
231
|
result = result.replace(/^\.\/src\/packages\//, '');
|
|
@@ -179,27 +233,30 @@ export function extractModuleName(input) {
|
|
|
179
233
|
result = result.replace(/(\/src)?\/(index|main)\.(tsx|ts|js|jsx)$/, '');
|
|
180
234
|
return result;
|
|
181
235
|
}
|
|
182
|
-
|
|
236
|
+
function addHoldCriterion(id, labelStack, name, startTime) {
|
|
237
|
+
var _window$__CRITERION__;
|
|
238
|
+
if (!((_window$__CRITERION__ = window.__CRITERION__) !== null && _window$__CRITERION__ !== void 0 && _window$__CRITERION__.addUFOHold)) {
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
window.__CRITERION__.addUFOHold(id, labelStackToString(labelStack), name, startTime);
|
|
242
|
+
}
|
|
243
|
+
function removeHoldCriterion(id) {
|
|
244
|
+
var _window$__CRITERION__2;
|
|
245
|
+
if (!((_window$__CRITERION__2 = window.__CRITERION__) !== null && _window$__CRITERION__2 !== void 0 && _window$__CRITERION__2.removeUFOHold)) {
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
window.__CRITERION__.removeUFOHold(id);
|
|
249
|
+
}
|
|
250
|
+
export function addHold(interactionId, labelStack, name) {
|
|
183
251
|
var interaction = interactions.get(interactionId);
|
|
184
252
|
var id = createUUID();
|
|
185
253
|
if (interaction != null) {
|
|
186
|
-
var
|
|
187
|
-
|
|
254
|
+
var start = performance.now();
|
|
255
|
+
interaction.holdActive.set(id, {
|
|
188
256
|
labelStack: labelStack,
|
|
189
257
|
name: name,
|
|
190
|
-
start:
|
|
191
|
-
};
|
|
192
|
-
var start = performance.now();
|
|
193
|
-
if ((_getConfig = getConfig()) !== null && _getConfig !== void 0 && (_getConfig = _getConfig.experimentalInteractionMetrics) !== null && _getConfig !== void 0 && _getConfig.enabled && experimental) {
|
|
194
|
-
interaction.holdExpActive.set(id, _objectSpread(_objectSpread({}, holdActive), {}, {
|
|
195
|
-
start: start
|
|
196
|
-
}));
|
|
197
|
-
}
|
|
198
|
-
if (!experimental) {
|
|
199
|
-
interaction.holdActive.set(id, _objectSpread(_objectSpread({}, holdActive), {}, {
|
|
200
|
-
start: start
|
|
201
|
-
}));
|
|
202
|
-
}
|
|
258
|
+
start: start
|
|
259
|
+
});
|
|
203
260
|
addHoldCriterion(id, labelStack, name, start);
|
|
204
261
|
return function () {
|
|
205
262
|
var end = performance.now();
|
|
@@ -217,20 +274,11 @@ export function addHold(interactionId, labelStack, name, experimental) {
|
|
|
217
274
|
removeHoldCriterion(id);
|
|
218
275
|
var currentInteraction = interactions.get(interactionId);
|
|
219
276
|
var currentHold = interaction.holdActive.get(id);
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
}));
|
|
226
|
-
interaction.holdActive.delete(id);
|
|
227
|
-
}
|
|
228
|
-
if (expHold != null) {
|
|
229
|
-
currentInteraction.holdExpInfo.push(_objectSpread(_objectSpread({}, expHold), {}, {
|
|
230
|
-
end: end
|
|
231
|
-
}));
|
|
232
|
-
interaction.holdExpActive.delete(id);
|
|
233
|
-
}
|
|
277
|
+
if (currentInteraction != null && currentHold != null) {
|
|
278
|
+
currentInteraction.holdInfo.push(_objectSpread(_objectSpread({}, currentHold), {}, {
|
|
279
|
+
end: end
|
|
280
|
+
}));
|
|
281
|
+
interaction.holdActive.delete(id);
|
|
234
282
|
}
|
|
235
283
|
};
|
|
236
284
|
}
|
|
@@ -358,10 +406,22 @@ export var addProfilerTimings = function addProfilerTimings(interactionId, label
|
|
|
358
406
|
postInteractionLog.addProfilerTimings(labelStack, type, actualDuration, baseDuration, startTime, commitTime);
|
|
359
407
|
}
|
|
360
408
|
};
|
|
409
|
+
var pushToQueue = function pushToQueue(id, data) {
|
|
410
|
+
interactionQueue.push({
|
|
411
|
+
id: id,
|
|
412
|
+
data: data
|
|
413
|
+
});
|
|
414
|
+
};
|
|
361
415
|
var handleInteraction = pushToQueue;
|
|
416
|
+
function callCleanUpCallbacks(interaction) {
|
|
417
|
+
interaction.cleanupCallbacks.reverse().forEach(function (cleanUpCallback) {
|
|
418
|
+
cleanUpCallback();
|
|
419
|
+
});
|
|
420
|
+
}
|
|
362
421
|
var finishInteraction = function finishInteraction(id, data) {
|
|
363
422
|
var _getConfig3;
|
|
364
423
|
var endTime = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : performance.now();
|
|
424
|
+
// eslint-disable-next-line no-param-reassign
|
|
365
425
|
data.end = endTime;
|
|
366
426
|
try {
|
|
367
427
|
// for Firefox 102 and older
|
|
@@ -373,6 +433,7 @@ var finishInteraction = function finishInteraction(id, data) {
|
|
|
373
433
|
// do nothing
|
|
374
434
|
}
|
|
375
435
|
if (data.featureFlags) {
|
|
436
|
+
// eslint-disable-next-line no-param-reassign
|
|
376
437
|
data.featureFlags.during = Object.fromEntries(currentFeatureFlagsAccessed);
|
|
377
438
|
}
|
|
378
439
|
clearActiveTrace();
|
|
@@ -380,13 +441,50 @@ var finishInteraction = function finishInteraction(id, data) {
|
|
|
380
441
|
if ((_getConfig3 = getConfig()) !== null && _getConfig3 !== void 0 && (_getConfig3 = _getConfig3.vc) !== null && _getConfig3 !== void 0 && _getConfig3.stopVCAtInteractionFinish) {
|
|
381
442
|
data.vc = getVCObserver().getVCRawData();
|
|
382
443
|
}
|
|
444
|
+
remove(id);
|
|
383
445
|
PreviousInteractionLog.name = data.ufoName || 'unknown';
|
|
384
446
|
PreviousInteractionLog.isAborted = data.abortReason != null;
|
|
385
447
|
if (data.ufoName) {
|
|
386
448
|
handleInteraction(id, data);
|
|
387
449
|
}
|
|
388
450
|
if (isPerformanceTracingEnabled()) {
|
|
389
|
-
|
|
451
|
+
var profilerTimingMap = new Map();
|
|
452
|
+
data.reactProfilerTimings.forEach(function (profilerTiming) {
|
|
453
|
+
var labelStackId = labelStackToIdString(profilerTiming.labelStack);
|
|
454
|
+
if (labelStackId) {
|
|
455
|
+
var _profilerTimingMap$ge, _timing$start, _timing$end;
|
|
456
|
+
var timing = (_profilerTimingMap$ge = profilerTimingMap.get(labelStackId)) !== null && _profilerTimingMap$ge !== void 0 ? _profilerTimingMap$ge : {
|
|
457
|
+
labelStack: profilerTiming.labelStack
|
|
458
|
+
};
|
|
459
|
+
timing.start = profilerTiming.startTime < ((_timing$start = timing.start) !== null && _timing$start !== void 0 ? _timing$start : Number.MAX_SAFE_INTEGER) ? profilerTiming.startTime : timing.start;
|
|
460
|
+
timing.end = profilerTiming.commitTime > ((_timing$end = timing.end) !== null && _timing$end !== void 0 ? _timing$end : Number.MIN_SAFE_INTEGER) ? profilerTiming.commitTime : timing.end;
|
|
461
|
+
profilerTimingMap.set(labelStackId, timing);
|
|
462
|
+
}
|
|
463
|
+
});
|
|
464
|
+
try {
|
|
465
|
+
// for Firefox 102 and older
|
|
466
|
+
var _iterator2 = _createForOfIteratorHelper(profilerTimingMap.entries()),
|
|
467
|
+
_step2;
|
|
468
|
+
try {
|
|
469
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
470
|
+
var _step2$value = _slicedToArray(_step2.value, 2),
|
|
471
|
+
_step2$value$ = _step2$value[1],
|
|
472
|
+
labelStack = _step2$value$.labelStack,
|
|
473
|
+
start = _step2$value$.start,
|
|
474
|
+
end = _step2$value$.end;
|
|
475
|
+
performance.measure("\uD83D\uDEF8 ".concat(labelStackToString(labelStack), " [segment_ttai]"), {
|
|
476
|
+
start: start,
|
|
477
|
+
end: end
|
|
478
|
+
});
|
|
479
|
+
}
|
|
480
|
+
} catch (err) {
|
|
481
|
+
_iterator2.e(err);
|
|
482
|
+
} finally {
|
|
483
|
+
_iterator2.f();
|
|
484
|
+
}
|
|
485
|
+
} catch (e) {
|
|
486
|
+
// do nothing
|
|
487
|
+
}
|
|
390
488
|
}
|
|
391
489
|
try {
|
|
392
490
|
// dispatch a global window event to notify the measure is completed
|
|
@@ -409,85 +507,54 @@ export var sinkInteractionHandler = function sinkInteractionHandler(sinkFn) {
|
|
|
409
507
|
export var sinkPostInteractionLogHandler = function sinkPostInteractionLogHandler(sinkFn) {
|
|
410
508
|
postInteractionLog.sinkHandler(sinkFn);
|
|
411
509
|
};
|
|
412
|
-
|
|
413
|
-
// a flag to prevent multiple submitting
|
|
414
|
-
var activeSubmitted = false;
|
|
415
510
|
export function tryComplete(interactionId, endTime) {
|
|
416
511
|
var interaction = interactions.get(interactionId);
|
|
417
512
|
if (interaction != null) {
|
|
418
|
-
var
|
|
419
|
-
|
|
420
|
-
var postInteraction = function postInteraction() {
|
|
513
|
+
var noMoreHolds = interaction.holdActive.size === 0;
|
|
514
|
+
if (noMoreHolds) {
|
|
421
515
|
var _getConfig4;
|
|
516
|
+
finishInteraction(interactionId, interaction, endTime);
|
|
422
517
|
if ((_getConfig4 = getConfig()) !== null && _getConfig4 !== void 0 && (_getConfig4 = _getConfig4.postInteractionLog) !== null && _getConfig4 !== void 0 && _getConfig4.enabled) {
|
|
423
|
-
|
|
424
|
-
var experimentalVC90 = (_getExperimentalVCMet = getExperimentalVCMetrics(interaction)) === null || _getExperimentalVCMet === void 0 ? void 0 : _getExperimentalVCMet['metric:experimental:vc90'];
|
|
425
|
-
var experimentalTTAI = getTTAI(interaction);
|
|
426
|
-
postInteractionLog.onInteractionComplete(_objectSpread(_objectSpread({}, interaction), {}, {
|
|
427
|
-
experimentalTTAI: experimentalTTAI,
|
|
428
|
-
experimentalVC90: experimentalVC90
|
|
429
|
-
}));
|
|
430
|
-
}
|
|
431
|
-
remove(interactionId);
|
|
432
|
-
};
|
|
433
|
-
if (noMoreActiveHolds) {
|
|
434
|
-
if (!activeSubmitted) {
|
|
435
|
-
finishInteraction(interactionId, interaction, endTime);
|
|
436
|
-
activeSubmitted = true;
|
|
437
|
-
}
|
|
438
|
-
if (noMoreExpHolds) {
|
|
439
|
-
var _getConfig5;
|
|
440
|
-
if ((_getConfig5 = getConfig()) !== null && _getConfig5 !== void 0 && (_getConfig5 = _getConfig5.experimentalInteractionMetrics) !== null && _getConfig5 !== void 0 && _getConfig5.enabled) {
|
|
441
|
-
onExperimentalInteractionComplete(interactionId, interaction, endTime);
|
|
442
|
-
}
|
|
443
|
-
postInteraction();
|
|
518
|
+
postInteractionLog.onInteractionComplete(interaction);
|
|
444
519
|
}
|
|
445
520
|
}
|
|
446
521
|
}
|
|
447
522
|
}
|
|
523
|
+
function callCancelCallbacks(interaction) {
|
|
524
|
+
interaction.cancelCallbacks.reverse().forEach(function (cancelCallback) {
|
|
525
|
+
cancelCallback();
|
|
526
|
+
});
|
|
527
|
+
}
|
|
448
528
|
export function abort(interactionId, abortReason) {
|
|
449
529
|
var interaction = interactions.get(interactionId);
|
|
450
530
|
if (interaction != null) {
|
|
451
|
-
var _getConfig6;
|
|
452
531
|
callCancelCallbacks(interaction);
|
|
453
532
|
interaction.abortReason = abortReason;
|
|
454
533
|
finishInteraction(interactionId, interaction);
|
|
455
|
-
if ((_getConfig6 = getConfig()) !== null && _getConfig6 !== void 0 && (_getConfig6 = _getConfig6.experimentalInteractionMetrics) !== null && _getConfig6 !== void 0 && _getConfig6.enabled) {
|
|
456
|
-
onExperimentalInteractionComplete(interactionId, interaction);
|
|
457
|
-
}
|
|
458
|
-
remove(interactionId);
|
|
459
534
|
}
|
|
460
535
|
}
|
|
461
536
|
export function abortByNewInteraction(interactionId, interactionName) {
|
|
462
537
|
var interaction = interactions.get(interactionId);
|
|
463
538
|
if (interaction != null) {
|
|
464
|
-
var _getConfig7;
|
|
465
539
|
callCancelCallbacks(interaction);
|
|
466
540
|
interaction.abortReason = 'new_interaction';
|
|
467
541
|
interaction.abortedByInteractionName = interactionName;
|
|
468
542
|
finishInteraction(interactionId, interaction);
|
|
469
|
-
if ((_getConfig7 = getConfig()) !== null && _getConfig7 !== void 0 && (_getConfig7 = _getConfig7.experimentalInteractionMetrics) !== null && _getConfig7 !== void 0 && _getConfig7.enabled) {
|
|
470
|
-
onExperimentalInteractionComplete(interactionId, interaction);
|
|
471
|
-
}
|
|
472
|
-
remove(interactionId);
|
|
473
543
|
}
|
|
474
544
|
}
|
|
475
545
|
export function abortAll(abortReason, abortedByInteractionName) {
|
|
476
546
|
interactions.forEach(function (interaction, interactionId) {
|
|
477
|
-
var _getConfig8;
|
|
478
547
|
var noMoreHolds = interaction.holdActive.size === 0;
|
|
479
548
|
if (!noMoreHolds) {
|
|
480
549
|
callCancelCallbacks(interaction);
|
|
550
|
+
// eslint-disable-next-line no-param-reassign
|
|
481
551
|
interaction.abortReason = abortReason;
|
|
482
552
|
if (abortedByInteractionName != null) {
|
|
553
|
+
// eslint-disable-next-line no-param-reassign
|
|
483
554
|
interaction.abortedByInteractionName = abortedByInteractionName;
|
|
484
555
|
}
|
|
485
556
|
}
|
|
486
557
|
finishInteraction(interactionId, interaction);
|
|
487
|
-
if ((_getConfig8 = getConfig()) !== null && _getConfig8 !== void 0 && (_getConfig8 = _getConfig8.experimentalInteractionMetrics) !== null && _getConfig8 !== void 0 && _getConfig8.enabled) {
|
|
488
|
-
onExperimentalInteractionComplete(interactionId, interaction);
|
|
489
|
-
}
|
|
490
|
-
remove(interactionId);
|
|
491
558
|
});
|
|
492
559
|
}
|
|
493
560
|
export function addOnCancelCallback(id, cancelCallback) {
|
|
@@ -495,9 +562,9 @@ export function addOnCancelCallback(id, cancelCallback) {
|
|
|
495
562
|
interaction === null || interaction === void 0 || interaction.cancelCallbacks.push(cancelCallback);
|
|
496
563
|
}
|
|
497
564
|
export function addNewInteraction(interactionId, ufoName, type, startTime, rate, labelStack, routeName) {
|
|
498
|
-
var
|
|
565
|
+
var _getConfig5;
|
|
499
566
|
var trace = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null;
|
|
500
|
-
if ((
|
|
567
|
+
if ((_getConfig5 = getConfig()) !== null && _getConfig5 !== void 0 && (_getConfig5 = _getConfig5.postInteractionLog) !== null && _getConfig5 !== void 0 && _getConfig5.enabled) {
|
|
501
568
|
postInteractionLog.reset();
|
|
502
569
|
}
|
|
503
570
|
var previousTime = startTime;
|
|
@@ -537,11 +604,9 @@ export function addNewInteraction(interactionId, ufoName, type, startTime, rate,
|
|
|
537
604
|
requestInfo: [],
|
|
538
605
|
reactProfilerTimings: [],
|
|
539
606
|
holdInfo: [],
|
|
540
|
-
holdExpInfo: [],
|
|
541
607
|
holdActive: new Map(),
|
|
542
|
-
holdExpActive: new Map(),
|
|
543
608
|
// measure when we execute this code
|
|
544
|
-
// from this
|
|
609
|
+
// from this we can measure the input delay -
|
|
545
610
|
// how long the browser took to hand execution back to JS)
|
|
546
611
|
measureStart: performance.now(),
|
|
547
612
|
rate: rate,
|
|
@@ -591,10 +656,6 @@ export function addNewInteraction(interactionId, ufoName, type, startTime, rate,
|
|
|
591
656
|
postInteractionLog.startVCObserver({
|
|
592
657
|
startTime: startTime
|
|
593
658
|
});
|
|
594
|
-
experimentalVC.start({
|
|
595
|
-
startTime: startTime
|
|
596
|
-
});
|
|
597
|
-
activeSubmitted = false;
|
|
598
659
|
}
|
|
599
660
|
}
|
|
600
661
|
export function addBrowserMetricEvent(event) {
|
|
@@ -656,6 +717,17 @@ export function addRequestInfo(interactionId, labelStack, requestInfo) {
|
|
|
656
717
|
}, requestInfo));
|
|
657
718
|
}
|
|
658
719
|
}
|
|
720
|
+
function isSegmentLabel(obj) {
|
|
721
|
+
return obj && typeof obj.name === 'string' && typeof obj.segmentId === 'string';
|
|
722
|
+
}
|
|
723
|
+
function getSegmentCacheKey(labelStack) {
|
|
724
|
+
return labelStack.map(function (l) {
|
|
725
|
+
if (isSegmentLabel(l)) {
|
|
726
|
+
return "".concat(l.name, "_").concat(l.segmentId);
|
|
727
|
+
}
|
|
728
|
+
return l.name;
|
|
729
|
+
}).join('|');
|
|
730
|
+
}
|
|
659
731
|
export function addSegment(labelStack) {
|
|
660
732
|
var key = getSegmentCacheKey(labelStack);
|
|
661
733
|
var existingSegment = segmentCache.get(key);
|
|
@@ -2,10 +2,8 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
|
2
2
|
import { unstable_IdlePriority as idlePriority, unstable_scheduleCallback as scheduleCallback } from 'scheduler';
|
|
3
3
|
import { startLighthouseObserver } from '../additional-payload';
|
|
4
4
|
import { setUFOConfig } from '../config';
|
|
5
|
-
import { experimentalVC, sinkExperimentalHandler } from '../create-experimental-interaction-metrics-payload';
|
|
6
|
-
import { postInteractionLog } from '../create-payload/common/utils';
|
|
7
5
|
import { setupHiddenTimingCapture } from '../hidden-timing';
|
|
8
|
-
import { sinkInteractionHandler, sinkPostInteractionLogHandler } from '../interaction-metrics';
|
|
6
|
+
import { postInteractionLog, sinkInteractionHandler, sinkPostInteractionLogHandler } from '../interaction-metrics';
|
|
9
7
|
import { getVCObserver } from '../vc';
|
|
10
8
|
var initialized = false;
|
|
11
9
|
function sinkInteraction(instance, payloadPackage) {
|
|
@@ -18,16 +16,6 @@ function sinkInteraction(instance, payloadPackage) {
|
|
|
18
16
|
});
|
|
19
17
|
});
|
|
20
18
|
}
|
|
21
|
-
function sinkExperimentalInteractionMetrics(instance, payloadPackage) {
|
|
22
|
-
sinkExperimentalHandler(function (interactionId, interaction) {
|
|
23
|
-
scheduleCallback(idlePriority, function () {
|
|
24
|
-
var payload = payloadPackage.createExperimentalMetricsPayload(interactionId, interaction);
|
|
25
|
-
if (payload) {
|
|
26
|
-
instance.sendOperationalEvent(payload);
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
19
|
function sinkPostInteractionLog(instance, createPostInteractionLogPayload) {
|
|
32
20
|
sinkPostInteractionLogHandler(function (logOutput) {
|
|
33
21
|
scheduleCallback(idlePriority, function () {
|
|
@@ -45,7 +33,6 @@ export var init = function init(analyticsWebClientAsync, config) {
|
|
|
45
33
|
}
|
|
46
34
|
setUFOConfig(config);
|
|
47
35
|
if ((_config$vc = config.vc) !== null && _config$vc !== void 0 && _config$vc.enabled) {
|
|
48
|
-
var _config$experimentalI;
|
|
49
36
|
var vcOptions = {
|
|
50
37
|
heatmapSize: config.vc.heatmapSize,
|
|
51
38
|
oldDomUpdates: config.vc.oldDomUpdates,
|
|
@@ -59,38 +46,31 @@ export var init = function init(analyticsWebClientAsync, config) {
|
|
|
59
46
|
postInteractionLog.startVCObserver({
|
|
60
47
|
startTime: 0
|
|
61
48
|
});
|
|
62
|
-
if (config !== null && config !== void 0 && (_config$experimentalI = config.experimentalInteractionMetrics) !== null && _config$experimentalI !== void 0 && _config$experimentalI.enabled) {
|
|
63
|
-
experimentalVC.initialize(vcOptions).start({
|
|
64
|
-
startTime: 0
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
49
|
}
|
|
68
50
|
setupHiddenTimingCapture();
|
|
69
51
|
startLighthouseObserver();
|
|
70
52
|
initialized = true;
|
|
71
|
-
Promise.all([analyticsWebClientAsync,
|
|
53
|
+
Promise.all([analyticsWebClientAsync,
|
|
54
|
+
// eslint-disable-next-line import/dynamic-import-chunkname
|
|
55
|
+
import( /* webpackChunkName: "create-payloads" */'../create-payload'),
|
|
56
|
+
// eslint-disable-next-line import/dynamic-import-chunkname
|
|
57
|
+
import( /* webpackChunkName: "create-post-intreaction-log-payload" */'../create-post-interaction-log-payload')]).then(function (_ref) {
|
|
72
58
|
var _ref2 = _slicedToArray(_ref, 3),
|
|
73
59
|
awc = _ref2[0],
|
|
74
60
|
payloadPackage = _ref2[1],
|
|
75
61
|
createPostInteractionLogPayloadPackage = _ref2[2];
|
|
76
62
|
if (awc.getAnalyticsWebClientPromise) {
|
|
77
63
|
awc.getAnalyticsWebClientPromise().then(function (client) {
|
|
78
|
-
var _config$
|
|
64
|
+
var _config$postInteracti;
|
|
79
65
|
var instance = client.getInstance();
|
|
80
66
|
sinkInteraction(instance, payloadPackage);
|
|
81
|
-
if (config !== null && config !== void 0 && (_config$experimentalI2 = config.experimentalInteractionMetrics) !== null && _config$experimentalI2 !== void 0 && _config$experimentalI2.enabled) {
|
|
82
|
-
sinkExperimentalInteractionMetrics(instance, payloadPackage);
|
|
83
|
-
}
|
|
84
67
|
if ((_config$postInteracti = config.postInteractionLog) !== null && _config$postInteracti !== void 0 && _config$postInteracti.enabled) {
|
|
85
68
|
sinkPostInteractionLog(instance, createPostInteractionLogPayloadPackage.default);
|
|
86
69
|
}
|
|
87
70
|
});
|
|
88
71
|
} else if (awc.sendOperationalEvent) {
|
|
89
|
-
var _config$
|
|
72
|
+
var _config$postInteracti2;
|
|
90
73
|
sinkInteraction(awc, payloadPackage);
|
|
91
|
-
if (config !== null && config !== void 0 && (_config$experimentalI3 = config.experimentalInteractionMetrics) !== null && _config$experimentalI3 !== void 0 && _config$experimentalI3.enabled) {
|
|
92
|
-
sinkExperimentalInteractionMetrics(awc, payloadPackage);
|
|
93
|
-
}
|
|
94
74
|
if ((_config$postInteracti2 = config.postInteractionLog) !== null && _config$postInteracti2 !== void 0 && _config$postInteracti2.enabled) {
|
|
95
75
|
sinkPostInteractionLog(awc, createPostInteractionLogPayloadPackage.default);
|
|
96
76
|
}
|
|
@@ -22,7 +22,8 @@ var useLayoutEffectSAFE = typeof window === 'undefined' ? useEffect : useLayoutE
|
|
|
22
22
|
* return (
|
|
23
23
|
* <>
|
|
24
24
|
* <Skeleton />
|
|
25
|
-
* <UFOLoadHold name="card"
|
|
25
|
+
* <UFOLoadHold name="card">
|
|
26
|
+
* </UFOLoadHold>
|
|
26
27
|
* )
|
|
27
28
|
* }
|
|
28
29
|
* ```
|
|
@@ -57,10 +58,7 @@ export default function UFOLoadHold(_ref) {
|
|
|
57
58
|
// react-18: useId instead
|
|
58
59
|
var context = useContext(UFOInteractionContext);
|
|
59
60
|
useLayoutEffectSAFE(function () {
|
|
60
|
-
if (hold && context != null) {
|
|
61
|
-
if (experimental && context.holdExperimental) {
|
|
62
|
-
return context.holdExperimental(name);
|
|
63
|
-
}
|
|
61
|
+
if (hold && !experimental && context != null) {
|
|
64
62
|
return context.hold(name);
|
|
65
63
|
}
|
|
66
64
|
}, [hold, context, name]);
|
|
@@ -79,14 +79,15 @@ export default function UFOSegment(_ref) {
|
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
|
-
function _internalHold(labelStack, name
|
|
83
|
-
|
|
82
|
+
function _internalHold(labelStack, name
|
|
83
|
+
// eslint-disable-next-line @typescript-eslint/no-invalid-void-type
|
|
84
|
+
) {
|
|
84
85
|
if (interactionId.current != null) {
|
|
85
86
|
if (parentContext) {
|
|
86
|
-
return parentContext._internalHold(labelStack, name
|
|
87
|
+
return parentContext._internalHold(labelStack, name);
|
|
87
88
|
} else {
|
|
88
89
|
var capturedInteractionId = interactionId.current;
|
|
89
|
-
var disposeHold = addHold(interactionId.current, labelStack, name
|
|
90
|
+
var disposeHold = addHold(interactionId.current, labelStack, name);
|
|
90
91
|
return function () {
|
|
91
92
|
if (capturedInteractionId === interactionId.current) {
|
|
92
93
|
disposeHold();
|
|
@@ -95,7 +96,9 @@ export default function UFOSegment(_ref) {
|
|
|
95
96
|
}
|
|
96
97
|
}
|
|
97
98
|
}
|
|
98
|
-
function _internalHoldByID(labelStack, id, name, remove
|
|
99
|
+
function _internalHoldByID(labelStack, id, name, remove
|
|
100
|
+
// eslint-disable-next-line @typescript-eslint/no-invalid-void-type
|
|
101
|
+
) {
|
|
99
102
|
if (interactionId.current != null) {
|
|
100
103
|
if (parentContext) {
|
|
101
104
|
parentContext._internalHoldByID(labelStack, name, id, remove);
|
|
@@ -120,10 +123,6 @@ export default function UFOSegment(_ref) {
|
|
|
120
123
|
var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'unknown';
|
|
121
124
|
return this._internalHold(this.labelStack, name);
|
|
122
125
|
},
|
|
123
|
-
holdExperimental: function holdExperimental() {
|
|
124
|
-
var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'unknown';
|
|
125
|
-
return this._internalHold(this.labelStack, name, true);
|
|
126
|
-
},
|
|
127
126
|
addHoldByID: function addHoldByID(labelStack, id) {
|
|
128
127
|
var name = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'unknown';
|
|
129
128
|
this._internalHoldByID(labelStack, id, name, false);
|
|
@@ -63,7 +63,7 @@ export interface SegmentInfo {
|
|
|
63
63
|
labelStack: LabelStack;
|
|
64
64
|
}
|
|
65
65
|
export interface CustomData {
|
|
66
|
-
[key: string]: null | string | number | boolean | undefined | CustomData | Record<string, CustomData>;
|
|
66
|
+
[key: string]: null | undefined | string | number | boolean | undefined | CustomData | Record<string, CustomData>;
|
|
67
67
|
}
|
|
68
68
|
export type CustomTiming = Record<string, {
|
|
69
69
|
startTime: number;
|
|
@@ -104,9 +104,7 @@ export interface InteractionMetrics {
|
|
|
104
104
|
labelStack: LabelStack;
|
|
105
105
|
})[];
|
|
106
106
|
holdInfo: HoldInfo[];
|
|
107
|
-
holdExpInfo: HoldInfo[];
|
|
108
107
|
holdActive: Map<string, HoldActive>;
|
|
109
|
-
holdExpActive: Map<string, HoldActive>;
|
|
110
108
|
reactProfilerTimings: ReactProfilerTiming[];
|
|
111
109
|
measureStart: number;
|
|
112
110
|
rate: number;
|
|
@@ -117,11 +115,11 @@ export interface InteractionMetrics {
|
|
|
117
115
|
abortReason?: AbortReasonType;
|
|
118
116
|
abortedByInteractionName?: string;
|
|
119
117
|
/**
|
|
120
|
-
* Apdex is
|
|
118
|
+
* Apdex is legacy performance measurement where it is
|
|
121
119
|
* capturing TTI at arbitrary point in the code (bm3/UFOv1)
|
|
122
120
|
*
|
|
123
121
|
* We are intercepting its values now just so we can use it for
|
|
124
|
-
* topline metric, but should encourage teams
|
|
122
|
+
* topline metric, but should encourage teams adopt TTAI
|
|
125
123
|
*
|
|
126
124
|
* This field might be ignored/dropped in the future.
|
|
127
125
|
*/
|
|
@@ -166,7 +164,7 @@ export interface LazyLoadProfilerContext {
|
|
|
166
164
|
addLoad(identifier: string, start: number, end: number): void;
|
|
167
165
|
}
|
|
168
166
|
export interface EnhancedUFOInteractionContextType extends UFOInteractionContextType, RelayMetricsRecorder, LazyLoadProfilerContext {
|
|
169
|
-
_internalHold(labelStack: LabelStack, name: string
|
|
167
|
+
_internalHold(labelStack: LabelStack, name: string): void | (() => void);
|
|
170
168
|
_internalHoldByID(labelStack: LabelStack, id: string, name: string, remove: boolean): void | (() => void);
|
|
171
169
|
addHoldByID(labelStack: LabelStack, id: string, name?: string): void;
|
|
172
170
|
removeHoldByID(labelStack: LabelStack, id: string, name?: string): void;
|
|
@@ -73,11 +73,6 @@ export type Config = {
|
|
|
73
73
|
readonly rates?: Rates;
|
|
74
74
|
readonly kind?: Record<InteractionType, number>;
|
|
75
75
|
};
|
|
76
|
-
readonly experimentalInteractionMetrics?: {
|
|
77
|
-
readonly enabled?: boolean;
|
|
78
|
-
readonly rates?: Rates;
|
|
79
|
-
readonly kind?: Record<InteractionType, number>;
|
|
80
|
-
};
|
|
81
76
|
readonly enableSegmentHighlighting?: boolean;
|
|
82
77
|
readonly enableAdditionalPerformanceMarks?: boolean;
|
|
83
78
|
readonly shouldCalculateLighthouseMetricsFromTTAI?: boolean;
|
|
@@ -91,7 +86,6 @@ export type Config = {
|
|
|
91
86
|
export declare function setUFOConfig(newConfig: Config): void;
|
|
92
87
|
export declare function getConfig(): Config | undefined;
|
|
93
88
|
export declare function getInteractionRate(name: string, interactionKind: InteractionKind): number;
|
|
94
|
-
export declare function getExperimentalInteractionRate(name: string, interactionType: InteractionType): number;
|
|
95
89
|
export declare function getPostInteractionRate(name: string, interactionType: InteractionType): number;
|
|
96
90
|
export declare function getCapabilityRate(capability: Capability): number;
|
|
97
91
|
declare const validTypingMethods: readonly ["timeout", "timeoutNoAlloc", "mutationObserver"];
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import type { InteractionMetrics } from '../../../common';
|
|
2
|
-
import { type Config } from '../../../config';
|
|
3
1
|
import type { LabelStack, SegmentLabel } from '../../../interaction-context';
|
|
4
|
-
import PostInteractionLog from '../../../interaction-metrics/post-interaction-log';
|
|
5
|
-
export declare const postInteractionLog: PostInteractionLog;
|
|
6
2
|
export type SegmentItem = {
|
|
7
3
|
n: string;
|
|
8
4
|
c?: Record<string, SegmentItem>;
|
|
@@ -19,8 +15,3 @@ export declare function optimizeLabelStack(labelStack: LabelStack): string | {
|
|
|
19
15
|
s?: string | undefined;
|
|
20
16
|
n: string;
|
|
21
17
|
}[];
|
|
22
|
-
export declare const getPageVisibilityUpToTTAI: (interaction: InteractionMetrics) => import("../../../hidden-timing").PageVisibility;
|
|
23
|
-
export declare const calculateVCMetrics: (interaction: InteractionMetrics, prefix: string, getVCResultFn: (props: any) => any) => any;
|
|
24
|
-
export declare function getSSRDoneTimeValue(config: Config | undefined): number | undefined;
|
|
25
|
-
export declare const getVCMetrics: (interaction: InteractionMetrics) => any;
|
|
26
|
-
export declare const getTTAI: (interaction: InteractionMetrics) => number | undefined;
|