@atlaskit/react-ufo 2.3.3 → 2.4.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 +8 -0
- package/dist/cjs/common/constants.js +2 -1
- package/dist/cjs/create-payload/common/utils/index.js +61 -2
- package/dist/cjs/create-payload/index.js +22 -47
- package/dist/es2019/common/constants.js +2 -1
- package/dist/es2019/create-payload/common/utils/index.js +53 -2
- package/dist/es2019/create-payload/index.js +5 -31
- package/dist/esm/common/constants.js +2 -1
- package/dist/esm/create-payload/common/utils/index.js +57 -2
- package/dist/esm/create-payload/index.js +7 -32
- package/dist/types/common/constants.d.ts +1 -1
- package/dist/types/create-payload/common/types.d.ts +1 -1
- package/dist/types/create-payload/common/utils/index.d.ts +15 -1
- package/dist/types/create-payload/index.d.ts +144 -144
- package/dist/types/interaction-context/index.d.ts +1 -1
- package/dist/types-ts4.5/common/constants.d.ts +1 -1
- package/dist/types-ts4.5/create-payload/common/types.d.ts +1 -1
- package/dist/types-ts4.5/create-payload/common/utils/index.d.ts +15 -1
- package/dist/types-ts4.5/create-payload/index.d.ts +144 -144
- package/dist/types-ts4.5/interaction-context/index.d.ts +1 -1
- package/package.json +4 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# @atlaskit/ufo-interaction-ignore
|
|
2
2
|
|
|
3
|
+
## 2.4.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#169410](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/169410)
|
|
8
|
+
[`70969d8e13353`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/70969d8e13353) -
|
|
9
|
+
Optimising React UFO payload size by referncing segments tree
|
|
10
|
+
|
|
3
11
|
## 2.3.3
|
|
4
12
|
|
|
5
13
|
### Patch Changes
|
|
@@ -4,4 +4,5 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.REACT_UFO_VERSION = void 0;
|
|
7
|
-
var
|
|
7
|
+
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
8
|
+
var REACT_UFO_VERSION = exports.REACT_UFO_VERSION = (0, _platformFeatureFlags.fg)('react-ufo-payload-segment-compressed') ? '2.0.0' : '1.0.1';
|
|
@@ -1,15 +1,74 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
7
|
+
exports.buildSegmentTree = buildSegmentTree;
|
|
6
8
|
exports.isSegmentLabel = isSegmentLabel;
|
|
9
|
+
exports.labelStackStartWith = labelStackStartWith;
|
|
10
|
+
exports.optimizeLabelStack = optimizeLabelStack;
|
|
7
11
|
exports.sanitizeUfoName = void 0;
|
|
12
|
+
exports.stringifyLabelStackFully = stringifyLabelStackFully;
|
|
13
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
14
|
+
var _constants = require("../../../common/constants");
|
|
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; }
|
|
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; } /* eslint-disable @typescript-eslint/no-non-null-asserted-optional-chain */
|
|
8
17
|
var sanitizeUfoName = exports.sanitizeUfoName = function sanitizeUfoName(name) {
|
|
9
18
|
return name.replace(/_/g, '-');
|
|
10
19
|
};
|
|
11
|
-
|
|
12
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
13
20
|
function isSegmentLabel(obj) {
|
|
14
21
|
return obj && typeof obj.name === 'string' && typeof obj.segmentId === 'string';
|
|
22
|
+
}
|
|
23
|
+
function buildSegmentTree(labelStacks) {
|
|
24
|
+
var r = {
|
|
25
|
+
n: 'segment-tree-root',
|
|
26
|
+
c: {}
|
|
27
|
+
};
|
|
28
|
+
labelStacks.forEach(function (labelStack) {
|
|
29
|
+
var currentNode = r;
|
|
30
|
+
labelStack.forEach(function (label, index) {
|
|
31
|
+
var _currentNode$c;
|
|
32
|
+
var name = label.name;
|
|
33
|
+
var id = isSegmentLabel(label) ? label.segmentId : undefined;
|
|
34
|
+
var key = id !== undefined ? id.toString() : name;
|
|
35
|
+
if (currentNode.c && !currentNode.c[key]) {
|
|
36
|
+
currentNode.c[key] = {
|
|
37
|
+
n: name
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
currentNode = (_currentNode$c = currentNode.c) === null || _currentNode$c === void 0 ? void 0 : _currentNode$c[key];
|
|
41
|
+
if (index < labelStack.length - 1) {
|
|
42
|
+
currentNode.c = _objectSpread({}, currentNode.c || {});
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
return {
|
|
47
|
+
r: r
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function stringifyLabelStackFully(labelStack) {
|
|
51
|
+
return labelStack.map(function (l) {
|
|
52
|
+
if (isSegmentLabel(l)) {
|
|
53
|
+
return "".concat(l.name, ":").concat(l.segmentId);
|
|
54
|
+
}
|
|
55
|
+
return l.name;
|
|
56
|
+
}).join('/');
|
|
57
|
+
}
|
|
58
|
+
function getLabelStackReference(labelStack) {
|
|
59
|
+
return labelStack.map(function (l) {
|
|
60
|
+
return isSegmentLabel(l) ? l.segmentId : l.name;
|
|
61
|
+
}).join('/');
|
|
62
|
+
}
|
|
63
|
+
function labelStackStartWith(labelStack, startWith) {
|
|
64
|
+
return stringifyLabelStackFully(labelStack).startsWith(stringifyLabelStackFully(startWith));
|
|
65
|
+
}
|
|
66
|
+
function optimizeLabelStack(labelStack) {
|
|
67
|
+
return _constants.REACT_UFO_VERSION === '2.0.0' ? getLabelStackReference(labelStack) : labelStack.map(function (ls) {
|
|
68
|
+
return _objectSpread({
|
|
69
|
+
n: ls.name
|
|
70
|
+
}, ls.segmentId ? {
|
|
71
|
+
s: ls.segmentId
|
|
72
|
+
} : {});
|
|
73
|
+
});
|
|
15
74
|
}
|
|
@@ -49,17 +49,6 @@ function getUfoNameOverride(interaction) {
|
|
|
49
49
|
return ufoName;
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
|
-
function stringifyLabelStackFully(labelStack) {
|
|
53
|
-
return labelStack.map(function (l) {
|
|
54
|
-
if ((0, _utils.isSegmentLabel)(l)) {
|
|
55
|
-
return "".concat(l.name, ":").concat(l.segmentId);
|
|
56
|
-
}
|
|
57
|
-
return l.name;
|
|
58
|
-
}).join('/');
|
|
59
|
-
}
|
|
60
|
-
function labelStackStartWith(labelStack, startWith) {
|
|
61
|
-
return stringifyLabelStackFully(labelStack).startsWith(stringifyLabelStackFully(startWith));
|
|
62
|
-
}
|
|
63
52
|
function getEarliestLegacyStopTime(interaction, labelStack) {
|
|
64
53
|
var earliestLegacyStopTime = null;
|
|
65
54
|
interaction.apdex.forEach(function (a) {
|
|
@@ -67,7 +56,7 @@ function getEarliestLegacyStopTime(interaction, labelStack) {
|
|
|
67
56
|
if (!(a !== null && a !== void 0 && a.stopTime)) {
|
|
68
57
|
return;
|
|
69
58
|
}
|
|
70
|
-
if (!labelStackStartWith((_a$labelStack = a.labelStack) !== null && _a$labelStack !== void 0 ? _a$labelStack : [], labelStack)) {
|
|
59
|
+
if (!(0, _utils.labelStackStartWith)((_a$labelStack = a.labelStack) !== null && _a$labelStack !== void 0 ? _a$labelStack : [], labelStack)) {
|
|
71
60
|
return;
|
|
72
61
|
}
|
|
73
62
|
if (a.stopTime > interaction.start && ((_earliestLegacyStopTi = earliestLegacyStopTime) !== null && _earliestLegacyStopTi !== void 0 ? _earliestLegacyStopTi : a.stopTime) >= a.stopTime) {
|
|
@@ -345,18 +334,6 @@ var getTracingContextData = function getTracingContextData(interaction) {
|
|
|
345
334
|
}
|
|
346
335
|
return tracingContextData;
|
|
347
336
|
};
|
|
348
|
-
|
|
349
|
-
// interaction metric
|
|
350
|
-
|
|
351
|
-
function optimizeLabelStack(labelStack) {
|
|
352
|
-
return labelStack.map(function (ls) {
|
|
353
|
-
return _objectSpread({
|
|
354
|
-
n: ls.name
|
|
355
|
-
}, ls.segmentId ? {
|
|
356
|
-
s: ls.segmentId
|
|
357
|
-
} : {});
|
|
358
|
-
});
|
|
359
|
-
}
|
|
360
337
|
function optimizeCustomData(interaction) {
|
|
361
338
|
var customData = interaction.customData,
|
|
362
339
|
legacyMetrics = interaction.legacyMetrics;
|
|
@@ -364,10 +341,10 @@ function optimizeCustomData(interaction) {
|
|
|
364
341
|
var _result$get$data, _result$get;
|
|
365
342
|
var labelStack = _ref2.labelStack,
|
|
366
343
|
data = _ref2.data;
|
|
367
|
-
var label = stringifyLabelStackFully(labelStack);
|
|
344
|
+
var label = (0, _utils.stringifyLabelStackFully)(labelStack);
|
|
368
345
|
var value = (_result$get$data = (_result$get = result.get(label)) === null || _result$get === void 0 ? void 0 : _result$get.data) !== null && _result$get$data !== void 0 ? _result$get$data : {};
|
|
369
346
|
result.set(label, {
|
|
370
|
-
labelStack: optimizeLabelStack(labelStack),
|
|
347
|
+
labelStack: (0, _utils.optimizeLabelStack)(labelStack),
|
|
371
348
|
data: Object.assign(value, data)
|
|
372
349
|
});
|
|
373
350
|
return result;
|
|
@@ -381,10 +358,10 @@ function optimizeCustomData(interaction) {
|
|
|
381
358
|
var _Object$entries$_i = (0, _slicedToArray2.default)(_Object$entries[_i], 2),
|
|
382
359
|
_key = _Object$entries$_i[0],
|
|
383
360
|
value = _Object$entries$_i[1];
|
|
384
|
-
var label = stringifyLabelStackFully([]);
|
|
361
|
+
var label = (0, _utils.stringifyLabelStackFully)([]);
|
|
385
362
|
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 : {};
|
|
386
363
|
result.set(label, {
|
|
387
|
-
labelStack: optimizeLabelStack([]),
|
|
364
|
+
labelStack: (0, _utils.optimizeLabelStack)([]),
|
|
388
365
|
data: Object.assign(labelValue, (0, _defineProperty2.default)({}, _key, value))
|
|
389
366
|
});
|
|
390
367
|
}
|
|
@@ -402,11 +379,11 @@ function optimizeReactProfilerTimings(reactProfilerTimings, interactionStart) {
|
|
|
402
379
|
actualDuration = _ref3.actualDuration,
|
|
403
380
|
type = _ref3.type;
|
|
404
381
|
if (labelStack && startTime >= interactionStart) {
|
|
405
|
-
var label = stringifyLabelStackFully(labelStack);
|
|
382
|
+
var label = (0, _utils.stringifyLabelStackFully)(labelStack);
|
|
406
383
|
var start = Math.round(startTime);
|
|
407
384
|
var end = Math.round(commitTime);
|
|
408
385
|
var timing = result.get(label) || {
|
|
409
|
-
labelStack: optimizeLabelStack(labelStack),
|
|
386
|
+
labelStack: (0, _utils.optimizeLabelStack)(labelStack),
|
|
410
387
|
startTime: start,
|
|
411
388
|
endTime: end,
|
|
412
389
|
mountCount: 0,
|
|
@@ -461,13 +438,13 @@ function optimizeHoldInfo(holdInfo, interactionStart) {
|
|
|
461
438
|
end = hold.end,
|
|
462
439
|
ignoreOnSubmit = hold.ignoreOnSubmit;
|
|
463
440
|
if (labelStack && !ignoreOnSubmit && start >= interactionStart) {
|
|
464
|
-
var label = stringifyLabelStackFully([].concat((0, _toConsumableArray2.default)(labelStack), [{
|
|
441
|
+
var label = (0, _utils.stringifyLabelStackFully)([].concat((0, _toConsumableArray2.default)(labelStack), [{
|
|
465
442
|
name: name
|
|
466
443
|
}]));
|
|
467
444
|
var startTime = Math.round(start);
|
|
468
445
|
var endTime = Math.round(end);
|
|
469
446
|
var timing = result.get(label) || {
|
|
470
|
-
labelStack: optimizeLabelStack([].concat((0, _toConsumableArray2.default)(labelStack), [{
|
|
447
|
+
labelStack: (0, _utils.optimizeLabelStack)([].concat((0, _toConsumableArray2.default)(labelStack), [{
|
|
471
448
|
name: name
|
|
472
449
|
}])),
|
|
473
450
|
startTime: startTime,
|
|
@@ -494,7 +471,7 @@ function optimizeSpans(spans, interactionStart) {
|
|
|
494
471
|
end = span.end;
|
|
495
472
|
if (labelStack && start >= interactionStart) {
|
|
496
473
|
result.push({
|
|
497
|
-
labelStack: optimizeLabelStack([].concat((0, _toConsumableArray2.default)(labelStack), [{
|
|
474
|
+
labelStack: (0, _utils.optimizeLabelStack)([].concat((0, _toConsumableArray2.default)(labelStack), [{
|
|
498
475
|
name: name
|
|
499
476
|
}])),
|
|
500
477
|
startTime: Math.round(start),
|
|
@@ -518,7 +495,7 @@ function optimizeRequestInfo(requestInfo, interactionStart) {
|
|
|
518
495
|
var endTime = networkComplete !== null && networkComplete !== void 0 ? networkComplete : end;
|
|
519
496
|
if (labelStack && start >= interactionStart && endTime) {
|
|
520
497
|
result.push({
|
|
521
|
-
labelStack: optimizeLabelStack([].concat((0, _toConsumableArray2.default)(labelStack), [{
|
|
498
|
+
labelStack: (0, _utils.optimizeLabelStack)([].concat((0, _toConsumableArray2.default)(labelStack), [{
|
|
522
499
|
name: name
|
|
523
500
|
}])),
|
|
524
501
|
startTime: Math.round(startTime),
|
|
@@ -530,7 +507,7 @@ function optimizeRequestInfo(requestInfo, interactionStart) {
|
|
|
530
507
|
return updatedRequestInfo;
|
|
531
508
|
}
|
|
532
509
|
function optimizeCustomTimings(customTimings, interactionStart) {
|
|
533
|
-
|
|
510
|
+
return customTimings.reduce(function (result, item) {
|
|
534
511
|
Object.keys(item.data).forEach(function (key) {
|
|
535
512
|
if (item.data[key].startTime >= interactionStart) {
|
|
536
513
|
result.push({
|
|
@@ -544,7 +521,6 @@ function optimizeCustomTimings(customTimings, interactionStart) {
|
|
|
544
521
|
});
|
|
545
522
|
return result;
|
|
546
523
|
}, []);
|
|
547
|
-
return updatedCustomTimings;
|
|
548
524
|
}
|
|
549
525
|
function optimizeMarks(marks) {
|
|
550
526
|
return marks.map(function (_ref4) {
|
|
@@ -552,7 +528,7 @@ function optimizeMarks(marks) {
|
|
|
552
528
|
time = _ref4.time,
|
|
553
529
|
others = (0, _objectWithoutProperties2.default)(_ref4, _excluded);
|
|
554
530
|
return _objectSpread(_objectSpread({}, others), {}, {
|
|
555
|
-
labelStack: labelStack && optimizeLabelStack(labelStack),
|
|
531
|
+
labelStack: labelStack && (0, _utils.optimizeLabelStack)(labelStack),
|
|
556
532
|
time: Math.round(time)
|
|
557
533
|
});
|
|
558
534
|
});
|
|
@@ -565,12 +541,10 @@ function optimizeApdex(apdex) {
|
|
|
565
541
|
return _objectSpread(_objectSpread({}, others), {}, {
|
|
566
542
|
stopTime: Math.round(stopTime)
|
|
567
543
|
}, labelStack ? {
|
|
568
|
-
labelStack: optimizeLabelStack(labelStack)
|
|
544
|
+
labelStack: (0, _utils.optimizeLabelStack)(labelStack)
|
|
569
545
|
} : {});
|
|
570
546
|
});
|
|
571
547
|
}
|
|
572
|
-
|
|
573
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
574
548
|
function objectToArray() {
|
|
575
549
|
var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
576
550
|
return Object.keys(obj).reduce(function (result, key) {
|
|
@@ -579,9 +553,7 @@ function objectToArray() {
|
|
|
579
553
|
data: obj[key]
|
|
580
554
|
});
|
|
581
555
|
return result;
|
|
582
|
-
},
|
|
583
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
584
|
-
[]);
|
|
556
|
+
}, []);
|
|
585
557
|
}
|
|
586
558
|
function getBM3SubmetricsTimings(submetrics) {
|
|
587
559
|
if (!submetrics) {
|
|
@@ -657,13 +629,16 @@ function createInteractionMetricsPayload(interaction, interactionId) {
|
|
|
657
629
|
var pageVisibilityAtTTI = getPageVisibilityUpToTTI(interaction);
|
|
658
630
|
var pageVisibilityAtTTAI = getPageVisibilityUpToTTAI(interaction);
|
|
659
631
|
var segments = config.killswitchNestedSegments ? [] : knownSegments;
|
|
632
|
+
var segmentTree = (0, _utils.buildSegmentTree)(segments.map(function (segment) {
|
|
633
|
+
return segment.labelStack;
|
|
634
|
+
}));
|
|
660
635
|
var isDetailedPayload = pageVisibilityAtTTAI === 'visible';
|
|
661
636
|
var isPageLoad = type === 'page_load';
|
|
662
637
|
var calculatePageVisibilityFromTheStartOfPageLoad = config.enableBetterPageVisibilityApi && isPageLoad;
|
|
663
638
|
var moreAccuratePageVisibilityAtTTI = calculatePageVisibilityFromTheStartOfPageLoad ? getMoreAccuratePageVisibilityUpToTTI(interaction) : null;
|
|
664
639
|
var moreAccuratePageVisibilityAtTTAI = calculatePageVisibilityFromTheStartOfPageLoad ? getMoreAccuratePageVisibilityUpToTTAI(interaction) : null;
|
|
665
640
|
var labelStack = interaction.labelStack ? {
|
|
666
|
-
labelStack: optimizeLabelStack(interaction.labelStack)
|
|
641
|
+
labelStack: (0, _utils.optimizeLabelStack)(interaction.labelStack)
|
|
667
642
|
} : {};
|
|
668
643
|
// Page Load
|
|
669
644
|
var getPageLoadInteractionMetrics = function getPageLoadInteractionMetrics() {
|
|
@@ -693,7 +668,7 @@ function createInteractionMetricsPayload(interaction, interactionId) {
|
|
|
693
668
|
var labelStack = _ref6.labelStack,
|
|
694
669
|
others = (0, _objectWithoutProperties2.default)(_ref6, _excluded3);
|
|
695
670
|
return _objectSpread(_objectSpread({}, others), {}, {
|
|
696
|
-
labelStack: labelStack && optimizeLabelStack(labelStack)
|
|
671
|
+
labelStack: labelStack && (0, _utils.optimizeLabelStack)(labelStack)
|
|
697
672
|
});
|
|
698
673
|
}),
|
|
699
674
|
holdActive: (0, _toConsumableArray2.default)(interaction.holdActive.values()),
|
|
@@ -762,11 +737,11 @@ function createInteractionMetricsPayload(interaction, interactionId) {
|
|
|
762
737
|
apdex: optimizeApdex(interaction.apdex),
|
|
763
738
|
end: Math.round(end),
|
|
764
739
|
start: Math.round(start),
|
|
765
|
-
segments: segments.map(function (_ref7) {
|
|
740
|
+
segments: _constants.REACT_UFO_VERSION === '2.0.0' ? segmentTree : segments.map(function (_ref7) {
|
|
766
741
|
var labelStack = _ref7.labelStack,
|
|
767
742
|
others = (0, _objectWithoutProperties2.default)(_ref7, _excluded4);
|
|
768
743
|
return _objectSpread(_objectSpread({}, others), {}, {
|
|
769
|
-
labelStack: optimizeLabelStack(labelStack)
|
|
744
|
+
labelStack: (0, _utils.optimizeLabelStack)(labelStack)
|
|
770
745
|
});
|
|
771
746
|
}),
|
|
772
747
|
marks: optimizeMarks(interaction.marks),
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
2
|
+
export const REACT_UFO_VERSION = fg('react-ufo-payload-segment-compressed') ? '2.0.0' : '1.0.1';
|
|
@@ -1,8 +1,59 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-non-null-asserted-optional-chain */
|
|
2
|
+
import { REACT_UFO_VERSION } from '../../../common/constants';
|
|
1
3
|
export const sanitizeUfoName = name => {
|
|
2
4
|
return name.replace(/_/g, '-');
|
|
3
5
|
};
|
|
4
|
-
|
|
5
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
6
6
|
export function isSegmentLabel(obj) {
|
|
7
7
|
return obj && typeof obj.name === 'string' && typeof obj.segmentId === 'string';
|
|
8
|
+
}
|
|
9
|
+
export function buildSegmentTree(labelStacks) {
|
|
10
|
+
const r = {
|
|
11
|
+
n: 'segment-tree-root',
|
|
12
|
+
c: {}
|
|
13
|
+
};
|
|
14
|
+
labelStacks.forEach(labelStack => {
|
|
15
|
+
let currentNode = r;
|
|
16
|
+
labelStack.forEach((label, index) => {
|
|
17
|
+
var _currentNode$c;
|
|
18
|
+
const name = label.name;
|
|
19
|
+
const id = isSegmentLabel(label) ? label.segmentId : undefined;
|
|
20
|
+
const key = id !== undefined ? id.toString() : name;
|
|
21
|
+
if (currentNode.c && !currentNode.c[key]) {
|
|
22
|
+
currentNode.c[key] = {
|
|
23
|
+
n: name
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
currentNode = (_currentNode$c = currentNode.c) === null || _currentNode$c === void 0 ? void 0 : _currentNode$c[key];
|
|
27
|
+
if (index < labelStack.length - 1) {
|
|
28
|
+
currentNode.c = {
|
|
29
|
+
...(currentNode.c || {})
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
return {
|
|
35
|
+
r
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export function stringifyLabelStackFully(labelStack) {
|
|
39
|
+
return labelStack.map(l => {
|
|
40
|
+
if (isSegmentLabel(l)) {
|
|
41
|
+
return `${l.name}:${l.segmentId}`;
|
|
42
|
+
}
|
|
43
|
+
return l.name;
|
|
44
|
+
}).join('/');
|
|
45
|
+
}
|
|
46
|
+
function getLabelStackReference(labelStack) {
|
|
47
|
+
return labelStack.map(l => isSegmentLabel(l) ? l.segmentId : l.name).join('/');
|
|
48
|
+
}
|
|
49
|
+
export function labelStackStartWith(labelStack, startWith) {
|
|
50
|
+
return stringifyLabelStackFully(labelStack).startsWith(stringifyLabelStackFully(startWith));
|
|
51
|
+
}
|
|
52
|
+
export function optimizeLabelStack(labelStack) {
|
|
53
|
+
return REACT_UFO_VERSION === '2.0.0' ? getLabelStackReference(labelStack) : labelStack.map(ls => ({
|
|
54
|
+
n: ls.name,
|
|
55
|
+
...(ls.segmentId ? {
|
|
56
|
+
s: ls.segmentId
|
|
57
|
+
} : {})
|
|
58
|
+
}));
|
|
8
59
|
}
|
|
@@ -11,7 +11,7 @@ import * as resourceTiming from '../resource-timing';
|
|
|
11
11
|
import { roundEpsilon } from '../round-number';
|
|
12
12
|
import * as ssr from '../ssr';
|
|
13
13
|
import { getVCObserver } from '../vc';
|
|
14
|
-
import {
|
|
14
|
+
import { buildSegmentTree, labelStackStartWith, optimizeLabelStack, sanitizeUfoName, stringifyLabelStackFully } from './common/utils';
|
|
15
15
|
function getUfoNameOverride(interaction) {
|
|
16
16
|
const {
|
|
17
17
|
ufoName,
|
|
@@ -31,17 +31,6 @@ function getUfoNameOverride(interaction) {
|
|
|
31
31
|
return ufoName;
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
|
-
function stringifyLabelStackFully(labelStack) {
|
|
35
|
-
return labelStack.map(l => {
|
|
36
|
-
if (isSegmentLabel(l)) {
|
|
37
|
-
return `${l.name}:${l.segmentId}`;
|
|
38
|
-
}
|
|
39
|
-
return l.name;
|
|
40
|
-
}).join('/');
|
|
41
|
-
}
|
|
42
|
-
function labelStackStartWith(labelStack, startWith) {
|
|
43
|
-
return stringifyLabelStackFully(labelStack).startsWith(stringifyLabelStackFully(startWith));
|
|
44
|
-
}
|
|
45
34
|
function getEarliestLegacyStopTime(interaction, labelStack) {
|
|
46
35
|
let earliestLegacyStopTime = null;
|
|
47
36
|
interaction.apdex.forEach(a => {
|
|
@@ -329,17 +318,6 @@ const getTracingContextData = interaction => {
|
|
|
329
318
|
}
|
|
330
319
|
return tracingContextData;
|
|
331
320
|
};
|
|
332
|
-
|
|
333
|
-
// interaction metric
|
|
334
|
-
|
|
335
|
-
function optimizeLabelStack(labelStack) {
|
|
336
|
-
return labelStack.map(ls => ({
|
|
337
|
-
n: ls.name,
|
|
338
|
-
...(ls.segmentId ? {
|
|
339
|
-
s: ls.segmentId
|
|
340
|
-
} : {})
|
|
341
|
-
}));
|
|
342
|
-
}
|
|
343
321
|
function optimizeCustomData(interaction) {
|
|
344
322
|
const {
|
|
345
323
|
customData,
|
|
@@ -520,7 +498,7 @@ function optimizeRequestInfo(requestInfo, interactionStart) {
|
|
|
520
498
|
return updatedRequestInfo;
|
|
521
499
|
}
|
|
522
500
|
function optimizeCustomTimings(customTimings, interactionStart) {
|
|
523
|
-
|
|
501
|
+
return customTimings.reduce((result, item) => {
|
|
524
502
|
Object.keys(item.data).forEach(key => {
|
|
525
503
|
if (item.data[key].startTime >= interactionStart) {
|
|
526
504
|
result.push({
|
|
@@ -534,7 +512,6 @@ function optimizeCustomTimings(customTimings, interactionStart) {
|
|
|
534
512
|
});
|
|
535
513
|
return result;
|
|
536
514
|
}, []);
|
|
537
|
-
return updatedCustomTimings;
|
|
538
515
|
}
|
|
539
516
|
function optimizeMarks(marks) {
|
|
540
517
|
return marks.map(({
|
|
@@ -560,8 +537,6 @@ function optimizeApdex(apdex) {
|
|
|
560
537
|
} : {})
|
|
561
538
|
}));
|
|
562
539
|
}
|
|
563
|
-
|
|
564
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
565
540
|
function objectToArray(obj = {}) {
|
|
566
541
|
return Object.keys(obj).reduce((result, key) => {
|
|
567
542
|
result.push({
|
|
@@ -569,9 +544,7 @@ function objectToArray(obj = {}) {
|
|
|
569
544
|
data: obj[key]
|
|
570
545
|
});
|
|
571
546
|
return result;
|
|
572
|
-
},
|
|
573
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
574
|
-
[]);
|
|
547
|
+
}, []);
|
|
575
548
|
}
|
|
576
549
|
function getBM3SubmetricsTimings(submetrics) {
|
|
577
550
|
if (!submetrics) {
|
|
@@ -650,6 +623,7 @@ function createInteractionMetricsPayload(interaction, interactionId) {
|
|
|
650
623
|
const pageVisibilityAtTTI = getPageVisibilityUpToTTI(interaction);
|
|
651
624
|
const pageVisibilityAtTTAI = getPageVisibilityUpToTTAI(interaction);
|
|
652
625
|
const segments = config.killswitchNestedSegments ? [] : knownSegments;
|
|
626
|
+
const segmentTree = buildSegmentTree(segments.map(segment => segment.labelStack));
|
|
653
627
|
const isDetailedPayload = pageVisibilityAtTTAI === 'visible';
|
|
654
628
|
const isPageLoad = type === 'page_load';
|
|
655
629
|
const calculatePageVisibilityFromTheStartOfPageLoad = config.enableBetterPageVisibilityApi && isPageLoad;
|
|
@@ -764,7 +738,7 @@ function createInteractionMetricsPayload(interaction, interactionId) {
|
|
|
764
738
|
apdex: optimizeApdex(interaction.apdex),
|
|
765
739
|
end: Math.round(end),
|
|
766
740
|
start: Math.round(start),
|
|
767
|
-
segments: segments.map(({
|
|
741
|
+
segments: REACT_UFO_VERSION === '2.0.0' ? segmentTree : segments.map(({
|
|
768
742
|
labelStack,
|
|
769
743
|
...others
|
|
770
744
|
}) => ({
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
2
|
+
export var REACT_UFO_VERSION = fg('react-ufo-payload-segment-compressed') ? '2.0.0' : '1.0.1';
|
|
@@ -1,8 +1,63 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
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
|
+
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
|
+
/* eslint-disable @typescript-eslint/no-non-null-asserted-optional-chain */
|
|
5
|
+
import { REACT_UFO_VERSION } from '../../../common/constants';
|
|
1
6
|
export var sanitizeUfoName = function sanitizeUfoName(name) {
|
|
2
7
|
return name.replace(/_/g, '-');
|
|
3
8
|
};
|
|
4
|
-
|
|
5
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
6
9
|
export function isSegmentLabel(obj) {
|
|
7
10
|
return obj && typeof obj.name === 'string' && typeof obj.segmentId === 'string';
|
|
11
|
+
}
|
|
12
|
+
export function buildSegmentTree(labelStacks) {
|
|
13
|
+
var r = {
|
|
14
|
+
n: 'segment-tree-root',
|
|
15
|
+
c: {}
|
|
16
|
+
};
|
|
17
|
+
labelStacks.forEach(function (labelStack) {
|
|
18
|
+
var currentNode = r;
|
|
19
|
+
labelStack.forEach(function (label, index) {
|
|
20
|
+
var _currentNode$c;
|
|
21
|
+
var name = label.name;
|
|
22
|
+
var id = isSegmentLabel(label) ? label.segmentId : undefined;
|
|
23
|
+
var key = id !== undefined ? id.toString() : name;
|
|
24
|
+
if (currentNode.c && !currentNode.c[key]) {
|
|
25
|
+
currentNode.c[key] = {
|
|
26
|
+
n: name
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
currentNode = (_currentNode$c = currentNode.c) === null || _currentNode$c === void 0 ? void 0 : _currentNode$c[key];
|
|
30
|
+
if (index < labelStack.length - 1) {
|
|
31
|
+
currentNode.c = _objectSpread({}, currentNode.c || {});
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
return {
|
|
36
|
+
r: r
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export function stringifyLabelStackFully(labelStack) {
|
|
40
|
+
return labelStack.map(function (l) {
|
|
41
|
+
if (isSegmentLabel(l)) {
|
|
42
|
+
return "".concat(l.name, ":").concat(l.segmentId);
|
|
43
|
+
}
|
|
44
|
+
return l.name;
|
|
45
|
+
}).join('/');
|
|
46
|
+
}
|
|
47
|
+
function getLabelStackReference(labelStack) {
|
|
48
|
+
return labelStack.map(function (l) {
|
|
49
|
+
return isSegmentLabel(l) ? l.segmentId : l.name;
|
|
50
|
+
}).join('/');
|
|
51
|
+
}
|
|
52
|
+
export function labelStackStartWith(labelStack, startWith) {
|
|
53
|
+
return stringifyLabelStackFully(labelStack).startsWith(stringifyLabelStackFully(startWith));
|
|
54
|
+
}
|
|
55
|
+
export function optimizeLabelStack(labelStack) {
|
|
56
|
+
return REACT_UFO_VERSION === '2.0.0' ? getLabelStackReference(labelStack) : labelStack.map(function (ls) {
|
|
57
|
+
return _objectSpread({
|
|
58
|
+
n: ls.name
|
|
59
|
+
}, ls.segmentId ? {
|
|
60
|
+
s: ls.segmentId
|
|
61
|
+
} : {});
|
|
62
|
+
});
|
|
8
63
|
}
|
|
@@ -21,7 +21,7 @@ import * as resourceTiming from '../resource-timing';
|
|
|
21
21
|
import { roundEpsilon } from '../round-number';
|
|
22
22
|
import * as ssr from '../ssr';
|
|
23
23
|
import { getVCObserver } from '../vc';
|
|
24
|
-
import {
|
|
24
|
+
import { buildSegmentTree, labelStackStartWith, optimizeLabelStack, sanitizeUfoName, stringifyLabelStackFully } from './common/utils';
|
|
25
25
|
function getUfoNameOverride(interaction) {
|
|
26
26
|
var ufoName = interaction.ufoName,
|
|
27
27
|
apdex = interaction.apdex;
|
|
@@ -39,17 +39,6 @@ function getUfoNameOverride(interaction) {
|
|
|
39
39
|
return ufoName;
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
|
-
function stringifyLabelStackFully(labelStack) {
|
|
43
|
-
return labelStack.map(function (l) {
|
|
44
|
-
if (isSegmentLabel(l)) {
|
|
45
|
-
return "".concat(l.name, ":").concat(l.segmentId);
|
|
46
|
-
}
|
|
47
|
-
return l.name;
|
|
48
|
-
}).join('/');
|
|
49
|
-
}
|
|
50
|
-
function labelStackStartWith(labelStack, startWith) {
|
|
51
|
-
return stringifyLabelStackFully(labelStack).startsWith(stringifyLabelStackFully(startWith));
|
|
52
|
-
}
|
|
53
42
|
function getEarliestLegacyStopTime(interaction, labelStack) {
|
|
54
43
|
var earliestLegacyStopTime = null;
|
|
55
44
|
interaction.apdex.forEach(function (a) {
|
|
@@ -335,18 +324,6 @@ var getTracingContextData = function getTracingContextData(interaction) {
|
|
|
335
324
|
}
|
|
336
325
|
return tracingContextData;
|
|
337
326
|
};
|
|
338
|
-
|
|
339
|
-
// interaction metric
|
|
340
|
-
|
|
341
|
-
function optimizeLabelStack(labelStack) {
|
|
342
|
-
return labelStack.map(function (ls) {
|
|
343
|
-
return _objectSpread({
|
|
344
|
-
n: ls.name
|
|
345
|
-
}, ls.segmentId ? {
|
|
346
|
-
s: ls.segmentId
|
|
347
|
-
} : {});
|
|
348
|
-
});
|
|
349
|
-
}
|
|
350
327
|
function optimizeCustomData(interaction) {
|
|
351
328
|
var customData = interaction.customData,
|
|
352
329
|
legacyMetrics = interaction.legacyMetrics;
|
|
@@ -520,7 +497,7 @@ function optimizeRequestInfo(requestInfo, interactionStart) {
|
|
|
520
497
|
return updatedRequestInfo;
|
|
521
498
|
}
|
|
522
499
|
function optimizeCustomTimings(customTimings, interactionStart) {
|
|
523
|
-
|
|
500
|
+
return customTimings.reduce(function (result, item) {
|
|
524
501
|
Object.keys(item.data).forEach(function (key) {
|
|
525
502
|
if (item.data[key].startTime >= interactionStart) {
|
|
526
503
|
result.push({
|
|
@@ -534,7 +511,6 @@ function optimizeCustomTimings(customTimings, interactionStart) {
|
|
|
534
511
|
});
|
|
535
512
|
return result;
|
|
536
513
|
}, []);
|
|
537
|
-
return updatedCustomTimings;
|
|
538
514
|
}
|
|
539
515
|
function optimizeMarks(marks) {
|
|
540
516
|
return marks.map(function (_ref4) {
|
|
@@ -559,8 +535,6 @@ function optimizeApdex(apdex) {
|
|
|
559
535
|
} : {});
|
|
560
536
|
});
|
|
561
537
|
}
|
|
562
|
-
|
|
563
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
564
538
|
function objectToArray() {
|
|
565
539
|
var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
566
540
|
return Object.keys(obj).reduce(function (result, key) {
|
|
@@ -569,9 +543,7 @@ function objectToArray() {
|
|
|
569
543
|
data: obj[key]
|
|
570
544
|
});
|
|
571
545
|
return result;
|
|
572
|
-
},
|
|
573
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
574
|
-
[]);
|
|
546
|
+
}, []);
|
|
575
547
|
}
|
|
576
548
|
function getBM3SubmetricsTimings(submetrics) {
|
|
577
549
|
if (!submetrics) {
|
|
@@ -647,6 +619,9 @@ function createInteractionMetricsPayload(interaction, interactionId) {
|
|
|
647
619
|
var pageVisibilityAtTTI = getPageVisibilityUpToTTI(interaction);
|
|
648
620
|
var pageVisibilityAtTTAI = getPageVisibilityUpToTTAI(interaction);
|
|
649
621
|
var segments = config.killswitchNestedSegments ? [] : knownSegments;
|
|
622
|
+
var segmentTree = buildSegmentTree(segments.map(function (segment) {
|
|
623
|
+
return segment.labelStack;
|
|
624
|
+
}));
|
|
650
625
|
var isDetailedPayload = pageVisibilityAtTTAI === 'visible';
|
|
651
626
|
var isPageLoad = type === 'page_load';
|
|
652
627
|
var calculatePageVisibilityFromTheStartOfPageLoad = config.enableBetterPageVisibilityApi && isPageLoad;
|
|
@@ -752,7 +727,7 @@ function createInteractionMetricsPayload(interaction, interactionId) {
|
|
|
752
727
|
apdex: optimizeApdex(interaction.apdex),
|
|
753
728
|
end: Math.round(end),
|
|
754
729
|
start: Math.round(start),
|
|
755
|
-
segments: segments.map(function (_ref7) {
|
|
730
|
+
segments: REACT_UFO_VERSION === '2.0.0' ? segmentTree : segments.map(function (_ref7) {
|
|
756
731
|
var labelStack = _ref7.labelStack,
|
|
757
732
|
others = _objectWithoutProperties(_ref7, _excluded4);
|
|
758
733
|
return _objectSpread(_objectSpread({}, others), {}, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const REACT_UFO_VERSION
|
|
1
|
+
export declare const REACT_UFO_VERSION: string;
|
|
@@ -1,3 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { LabelStack, SegmentLabel } from '../../../interaction-context';
|
|
2
|
+
export type SegmentItem = {
|
|
3
|
+
n: string;
|
|
4
|
+
c?: Record<string, SegmentItem>;
|
|
5
|
+
};
|
|
6
|
+
export type SegmentTree = {
|
|
7
|
+
r: SegmentItem;
|
|
8
|
+
};
|
|
2
9
|
export declare const sanitizeUfoName: (name: string) => string;
|
|
3
10
|
export declare function isSegmentLabel(obj: any): obj is SegmentLabel;
|
|
11
|
+
export declare function buildSegmentTree(labelStacks: LabelStack[]): SegmentTree;
|
|
12
|
+
export declare function stringifyLabelStackFully(labelStack: LabelStack): string;
|
|
13
|
+
export declare function labelStackStartWith(labelStack: LabelStack, startWith: LabelStack): boolean;
|
|
14
|
+
export declare function optimizeLabelStack(labelStack: LabelStack): string | {
|
|
15
|
+
s?: string | undefined;
|
|
16
|
+
n: string;
|
|
17
|
+
}[];
|