@atlaskit/react-ufo 3.14.3 → 3.14.4
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/create-payload/critical-metrics-payload/index.js +38 -0
- package/dist/cjs/create-payload/critical-metrics-payload/root-metrics.js +180 -0
- package/dist/cjs/create-payload/critical-metrics-payload/segment-metrics/create-segment-metrics.js +251 -0
- package/dist/cjs/create-payload/critical-metrics-payload/segment-metrics/get-is-root-segment.js +9 -0
- package/dist/cjs/create-payload/critical-metrics-payload/segment-metrics/get-segment-id.js +15 -0
- package/dist/cjs/create-payload/critical-metrics-payload/segment-metrics/get-segment-status.js +59 -0
- package/dist/cjs/create-payload/critical-metrics-payload/segment-metrics/has-segment-failed.js +17 -0
- package/dist/cjs/create-payload/critical-metrics-payload/segment-metrics/is-label-stack-under-segment.js +11 -0
- package/dist/cjs/create-payload/critical-metrics-payload/types.js +5 -0
- package/dist/cjs/create-payload/index.js +122 -214
- package/dist/cjs/create-payload/utils/find-matching-legacy-metric.js +15 -0
- package/dist/cjs/create-payload/utils/get-browser-metadata.js +87 -0
- package/dist/cjs/create-payload/utils/get-fmp.js +52 -0
- package/dist/cjs/create-payload/utils/get-navigation-metrics.js +66 -0
- package/dist/cjs/create-payload/utils/get-paint-metrics.js +124 -0
- package/dist/cjs/create-payload/utils/get-payload-size.js +17 -0
- package/dist/cjs/create-payload/utils/get-react-ufo-payload-version.js +3 -1
- package/dist/cjs/create-payload/utils/get-ssr-success.js +15 -0
- package/dist/cjs/create-payload/utils/get-ttai.js +14 -0
- package/dist/cjs/create-payload/utils/get-tti.js +38 -0
- package/dist/cjs/interaction-metrics/index.js +25 -0
- package/dist/es2019/create-payload/critical-metrics-payload/index.js +6 -0
- package/dist/es2019/create-payload/critical-metrics-payload/root-metrics.js +166 -0
- package/dist/es2019/create-payload/critical-metrics-payload/segment-metrics/create-segment-metrics.js +155 -0
- package/dist/es2019/create-payload/critical-metrics-payload/segment-metrics/get-is-root-segment.js +3 -0
- package/dist/es2019/create-payload/critical-metrics-payload/segment-metrics/get-segment-id.js +9 -0
- package/dist/es2019/create-payload/critical-metrics-payload/segment-metrics/get-segment-status.js +40 -0
- package/dist/es2019/create-payload/critical-metrics-payload/segment-metrics/has-segment-failed.js +10 -0
- package/dist/es2019/create-payload/critical-metrics-payload/segment-metrics/is-label-stack-under-segment.js +5 -0
- package/dist/es2019/create-payload/critical-metrics-payload/types.js +1 -0
- package/dist/es2019/create-payload/index.js +55 -151
- package/dist/es2019/create-payload/utils/find-matching-legacy-metric.js +7 -0
- package/dist/es2019/create-payload/utils/get-browser-metadata.js +79 -0
- package/dist/es2019/create-payload/utils/get-fmp.js +47 -0
- package/dist/es2019/create-payload/utils/get-navigation-metrics.js +59 -0
- package/dist/es2019/create-payload/utils/get-paint-metrics.js +78 -0
- package/dist/es2019/create-payload/utils/get-payload-size.js +11 -0
- package/dist/es2019/create-payload/utils/get-react-ufo-payload-version.js +2 -1
- package/dist/es2019/create-payload/utils/get-ssr-success.js +7 -0
- package/dist/es2019/create-payload/utils/get-ttai.js +9 -0
- package/dist/es2019/create-payload/utils/get-tti.js +35 -0
- package/dist/es2019/interaction-metrics/index.js +24 -0
- package/dist/esm/create-payload/critical-metrics-payload/index.js +31 -0
- package/dist/esm/create-payload/critical-metrics-payload/root-metrics.js +174 -0
- package/dist/esm/create-payload/critical-metrics-payload/segment-metrics/create-segment-metrics.js +244 -0
- package/dist/esm/create-payload/critical-metrics-payload/segment-metrics/get-is-root-segment.js +3 -0
- package/dist/esm/create-payload/critical-metrics-payload/segment-metrics/get-segment-id.js +9 -0
- package/dist/esm/create-payload/critical-metrics-payload/segment-metrics/get-segment-status.js +52 -0
- package/dist/esm/create-payload/critical-metrics-payload/segment-metrics/has-segment-failed.js +10 -0
- package/dist/esm/create-payload/critical-metrics-payload/segment-metrics/is-label-stack-under-segment.js +5 -0
- package/dist/esm/create-payload/critical-metrics-payload/types.js +1 -0
- package/dist/esm/create-payload/index.js +121 -210
- package/dist/esm/create-payload/utils/find-matching-legacy-metric.js +9 -0
- package/dist/esm/create-payload/utils/get-browser-metadata.js +79 -0
- package/dist/esm/create-payload/utils/get-fmp.js +47 -0
- package/dist/esm/create-payload/utils/get-navigation-metrics.js +59 -0
- package/dist/esm/create-payload/utils/get-paint-metrics.js +119 -0
- package/dist/esm/create-payload/utils/get-payload-size.js +11 -0
- package/dist/esm/create-payload/utils/get-react-ufo-payload-version.js +2 -1
- package/dist/esm/create-payload/utils/get-ssr-success.js +7 -0
- package/dist/esm/create-payload/utils/get-ttai.js +7 -0
- package/dist/esm/create-payload/utils/get-tti.js +33 -0
- package/dist/esm/interaction-metrics/index.js +24 -0
- package/dist/types/common/common/types.d.ts +1 -1
- package/dist/types/common/react-ufo-payload-schema.d.ts +23 -2
- package/dist/types/create-payload/critical-metrics-payload/index.d.ts +6 -0
- package/dist/types/create-payload/critical-metrics-payload/root-metrics.d.ts +7 -0
- package/dist/types/create-payload/critical-metrics-payload/segment-metrics/create-segment-metrics.d.ts +3 -0
- package/dist/types/create-payload/critical-metrics-payload/segment-metrics/get-is-root-segment.d.ts +2 -0
- package/dist/types/create-payload/critical-metrics-payload/segment-metrics/get-segment-id.d.ts +2 -0
- package/dist/types/create-payload/critical-metrics-payload/segment-metrics/get-segment-status.d.ts +7 -0
- package/dist/types/create-payload/critical-metrics-payload/segment-metrics/has-segment-failed.d.ts +2 -0
- package/dist/types/create-payload/critical-metrics-payload/segment-metrics/is-label-stack-under-segment.d.ts +2 -0
- package/dist/types/create-payload/critical-metrics-payload/types.d.ts +128 -0
- package/dist/types/create-payload/index.d.ts +339 -834
- package/dist/types/create-payload/utils/find-matching-legacy-metric.d.ts +5 -0
- package/dist/types/create-payload/utils/get-browser-metadata.d.ts +21 -0
- package/dist/types/create-payload/utils/get-fmp.d.ts +6 -0
- package/dist/types/create-payload/utils/get-navigation-metrics.d.ts +29 -0
- package/dist/types/create-payload/utils/get-paint-metrics.d.ts +13 -0
- package/dist/types/create-payload/utils/get-payload-size.d.ts +1 -0
- package/dist/types/create-payload/utils/get-react-ufo-payload-version.d.ts +2 -1
- package/dist/types/create-payload/utils/get-ssr-success.d.ts +2 -0
- package/dist/types/create-payload/utils/get-ttai.d.ts +2 -0
- package/dist/types/create-payload/utils/get-tti.d.ts +7 -0
- package/dist/types/interaction-metrics/index.d.ts +1 -0
- package/dist/types-ts4.5/common/common/types.d.ts +1 -1
- package/dist/types-ts4.5/common/react-ufo-payload-schema.d.ts +23 -2
- package/dist/types-ts4.5/create-payload/critical-metrics-payload/index.d.ts +6 -0
- package/dist/types-ts4.5/create-payload/critical-metrics-payload/root-metrics.d.ts +7 -0
- package/dist/types-ts4.5/create-payload/critical-metrics-payload/segment-metrics/create-segment-metrics.d.ts +3 -0
- package/dist/types-ts4.5/create-payload/critical-metrics-payload/segment-metrics/get-is-root-segment.d.ts +2 -0
- package/dist/types-ts4.5/create-payload/critical-metrics-payload/segment-metrics/get-segment-id.d.ts +2 -0
- package/dist/types-ts4.5/create-payload/critical-metrics-payload/segment-metrics/get-segment-status.d.ts +7 -0
- package/dist/types-ts4.5/create-payload/critical-metrics-payload/segment-metrics/has-segment-failed.d.ts +2 -0
- package/dist/types-ts4.5/create-payload/critical-metrics-payload/segment-metrics/is-label-stack-under-segment.d.ts +2 -0
- package/dist/types-ts4.5/create-payload/critical-metrics-payload/types.d.ts +130 -0
- package/dist/types-ts4.5/create-payload/index.d.ts +339 -834
- package/dist/types-ts4.5/create-payload/utils/find-matching-legacy-metric.d.ts +5 -0
- package/dist/types-ts4.5/create-payload/utils/get-browser-metadata.d.ts +21 -0
- package/dist/types-ts4.5/create-payload/utils/get-fmp.d.ts +6 -0
- package/dist/types-ts4.5/create-payload/utils/get-navigation-metrics.d.ts +29 -0
- package/dist/types-ts4.5/create-payload/utils/get-paint-metrics.d.ts +13 -0
- package/dist/types-ts4.5/create-payload/utils/get-payload-size.d.ts +1 -0
- package/dist/types-ts4.5/create-payload/utils/get-react-ufo-payload-version.d.ts +2 -1
- package/dist/types-ts4.5/create-payload/utils/get-ssr-success.d.ts +2 -0
- package/dist/types-ts4.5/create-payload/utils/get-ttai.d.ts +2 -0
- package/dist/types-ts4.5/create-payload/utils/get-tti.d.ts +7 -0
- package/dist/types-ts4.5/interaction-metrics/index.d.ts +1 -0
- package/package.json +5 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# @atlaskit/ufo-interaction-ignore
|
|
2
2
|
|
|
3
|
+
## 3.14.4
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#175348](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/175348)
|
|
8
|
+
[`1efcee7c6bc60`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/1efcee7c6bc60) -
|
|
9
|
+
AFO-4012 react ufo to produce ciritical metrics payload
|
|
10
|
+
|
|
3
11
|
## 3.14.3
|
|
4
12
|
|
|
5
13
|
### Patch Changes
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.createCriticalMetricsPayloads = createCriticalMetricsPayloads;
|
|
8
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
10
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
12
|
+
var _rootMetrics = require("./root-metrics");
|
|
13
|
+
var _createSegmentMetrics = require("./segment-metrics/create-segment-metrics");
|
|
14
|
+
function createCriticalMetricsPayloads(_x, _x2, _x3) {
|
|
15
|
+
return _createCriticalMetricsPayloads.apply(this, arguments);
|
|
16
|
+
}
|
|
17
|
+
function _createCriticalMetricsPayloads() {
|
|
18
|
+
_createCriticalMetricsPayloads = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(interactionId, interaction, vcMetrics) {
|
|
19
|
+
var _yield$Promise$all, _yield$Promise$all2, rootPayload, segmentPayloads;
|
|
20
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
21
|
+
while (1) switch (_context.prev = _context.next) {
|
|
22
|
+
case 0:
|
|
23
|
+
_context.next = 2;
|
|
24
|
+
return Promise.all([(0, _rootMetrics.createRootCriticalMetricsPayload)(interactionId, interaction, vcMetrics), (0, _createSegmentMetrics.createSegmentMetricsPayloads)(interactionId, interaction)]);
|
|
25
|
+
case 2:
|
|
26
|
+
_yield$Promise$all = _context.sent;
|
|
27
|
+
_yield$Promise$all2 = (0, _slicedToArray2.default)(_yield$Promise$all, 2);
|
|
28
|
+
rootPayload = _yield$Promise$all2[0];
|
|
29
|
+
segmentPayloads = _yield$Promise$all2[1];
|
|
30
|
+
return _context.abrupt("return", [rootPayload].concat((0, _toConsumableArray2.default)(segmentPayloads)));
|
|
31
|
+
case 7:
|
|
32
|
+
case "end":
|
|
33
|
+
return _context.stop();
|
|
34
|
+
}
|
|
35
|
+
}, _callee);
|
|
36
|
+
}));
|
|
37
|
+
return _createCriticalMetricsPayloads.apply(this, arguments);
|
|
38
|
+
}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.createRootCriticalMetricsPayload = createRootCriticalMetricsPayload;
|
|
8
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
11
|
+
var _additionalPayload = require("../../additional-payload");
|
|
12
|
+
var _config = require("../../config");
|
|
13
|
+
var _hiddenTiming = require("../../hidden-timing");
|
|
14
|
+
var _utils = require("../common/utils");
|
|
15
|
+
var _getBrowserMetadata = _interopRequireDefault(require("../utils/get-browser-metadata"));
|
|
16
|
+
var _getFmp = require("../utils/get-fmp");
|
|
17
|
+
var _getInteractionStatus = _interopRequireDefault(require("../utils/get-interaction-status"));
|
|
18
|
+
var _getNavigationMetrics = _interopRequireDefault(require("../utils/get-navigation-metrics"));
|
|
19
|
+
var _getPageVisibilityUpToTtai = _interopRequireDefault(require("../utils/get-page-visibility-up-to-ttai"));
|
|
20
|
+
var _getPaintMetrics = _interopRequireDefault(require("../utils/get-paint-metrics"));
|
|
21
|
+
var _getReactUfoPayloadVersion = require("../utils/get-react-ufo-payload-version");
|
|
22
|
+
var _getSsrSuccess = _interopRequireDefault(require("../utils/get-ssr-success"));
|
|
23
|
+
var _getTtai = _interopRequireDefault(require("../utils/get-ttai"));
|
|
24
|
+
var _getTti = require("../utils/get-tti");
|
|
25
|
+
var _getVcMetrics = _interopRequireDefault(require("../utils/get-vc-metrics"));
|
|
26
|
+
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; }
|
|
27
|
+
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; }
|
|
28
|
+
// Re-export types for convenience
|
|
29
|
+
|
|
30
|
+
// Local utility functions
|
|
31
|
+
function getPageVisibilityUpToTTI(interaction) {
|
|
32
|
+
var _interaction$apdex$0$, _interaction$apdex;
|
|
33
|
+
var start = interaction.start;
|
|
34
|
+
var bm3EndTimeOrInteractionEndTime = (_interaction$apdex$0$ = (_interaction$apdex = interaction.apdex) === null || _interaction$apdex === void 0 || (_interaction$apdex = _interaction$apdex[0]) === null || _interaction$apdex === void 0 ? void 0 : _interaction$apdex.stopTime) !== null && _interaction$apdex$0$ !== void 0 ? _interaction$apdex$0$ : interaction.end;
|
|
35
|
+
return (0, _hiddenTiming.getPageVisibilityState)(start, bm3EndTimeOrInteractionEndTime);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// TODO Write tests for this function
|
|
39
|
+
function createRootCriticalMetricsPayload(_x, _x2, _x3) {
|
|
40
|
+
return _createRootCriticalMetricsPayload.apply(this, arguments);
|
|
41
|
+
}
|
|
42
|
+
function _createRootCriticalMetricsPayload() {
|
|
43
|
+
_createRootCriticalMetricsPayload = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(interactionId, interaction, vcMetrics) {
|
|
44
|
+
var _finalVCMetrics$ufoV, _interaction$cohortin, _window$location;
|
|
45
|
+
var config, end, start, ufoName, rate, type, abortReason, routeName, previousInteractionName, isPreviousInteractionAborted, abortedByInteractionName, holdInfo, responsiveness, pageVisibilityAtTTI, pageVisibilityAtTTAI, interactionStatus, newUFOName, ttai, paintMetrics, navigationMetrics, ssrSuccess, tti, fmp, browserMetadata, lighthouseMetrics, finalVCMetrics, ttvc, earliestHold, cohortingCustomData, properties, payload;
|
|
46
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
47
|
+
while (1) switch (_context.prev = _context.next) {
|
|
48
|
+
case 0:
|
|
49
|
+
config = (0, _config.getConfig)();
|
|
50
|
+
if (config) {
|
|
51
|
+
_context.next = 3;
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
throw Error('UFO Configuration not provided');
|
|
55
|
+
case 3:
|
|
56
|
+
end = interaction.end, start = interaction.start, ufoName = interaction.ufoName, rate = interaction.rate, type = interaction.type, abortReason = interaction.abortReason, routeName = interaction.routeName, previousInteractionName = interaction.previousInteractionName, isPreviousInteractionAborted = interaction.isPreviousInteractionAborted, abortedByInteractionName = interaction.abortedByInteractionName, holdInfo = interaction.holdInfo, responsiveness = interaction.responsiveness;
|
|
57
|
+
pageVisibilityAtTTI = getPageVisibilityUpToTTI(interaction);
|
|
58
|
+
pageVisibilityAtTTAI = (0, _getPageVisibilityUpToTtai.default)(interaction);
|
|
59
|
+
interactionStatus = (0, _getInteractionStatus.default)(interaction);
|
|
60
|
+
newUFOName = (0, _utils.sanitizeUfoName)(ufoName); // Get performance metrics
|
|
61
|
+
ttai = (0, _getTtai.default)(interaction);
|
|
62
|
+
_context.next = 11;
|
|
63
|
+
return (0, _getPaintMetrics.default)(type, end);
|
|
64
|
+
case 11:
|
|
65
|
+
paintMetrics = _context.sent;
|
|
66
|
+
navigationMetrics = (0, _getNavigationMetrics.default)(type);
|
|
67
|
+
ssrSuccess = (0, _getSsrSuccess.default)(type); // Calculate BM3 metrics (TTI and FMP) directly
|
|
68
|
+
tti = (0, _getTti.getTTI)(interaction, newUFOName);
|
|
69
|
+
fmp = (0, _getFmp.getFMP)(interaction, newUFOName); // Get browser metadata (using compact nested format)
|
|
70
|
+
browserMetadata = (0, _getBrowserMetadata.default)();
|
|
71
|
+
lighthouseMetrics = (0, _additionalPayload.getLighthouseMetrics)({
|
|
72
|
+
start: start,
|
|
73
|
+
stop: end
|
|
74
|
+
}); // Use provided vcMetrics or calculate if not provided
|
|
75
|
+
_context.t0 = vcMetrics;
|
|
76
|
+
if (_context.t0) {
|
|
77
|
+
_context.next = 23;
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
_context.next = 22;
|
|
81
|
+
return (0, _getVcMetrics.default)(interaction);
|
|
82
|
+
case 22:
|
|
83
|
+
_context.t0 = _context.sent;
|
|
84
|
+
case 23:
|
|
85
|
+
finalVCMetrics = _context.t0;
|
|
86
|
+
ttvc = (_finalVCMetrics$ufoV = finalVCMetrics['ufo:vc:rev']) === null || _finalVCMetrics$ufoV === void 0 ? void 0 : _finalVCMetrics$ufoV.map(function (revision) {
|
|
87
|
+
if (revision['metric:vc90'] === null || revision.clean !== true) {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
revision: revision.revision,
|
|
92
|
+
vc90: revision['metric:vc90']
|
|
93
|
+
};
|
|
94
|
+
}).filter(function (revision) {
|
|
95
|
+
return revision != null;
|
|
96
|
+
}); // find earliest hold
|
|
97
|
+
earliestHold = holdInfo === null || holdInfo === void 0 ? void 0 : holdInfo.reduce(function (a, b) {
|
|
98
|
+
if (a && a.start < b.start) {
|
|
99
|
+
return a;
|
|
100
|
+
}
|
|
101
|
+
return b;
|
|
102
|
+
}, null); // Process cohorting custom data
|
|
103
|
+
cohortingCustomData = (_interaction$cohortin = interaction.cohortingCustomData) !== null && _interaction$cohortin !== void 0 && _interaction$cohortin.size ? Object.fromEntries(interaction.cohortingCustomData) : undefined;
|
|
104
|
+
properties = _objectSpread(_objectSpread({
|
|
105
|
+
// Basic metadata
|
|
106
|
+
'event:hostname': ((_window$location = window.location) === null || _window$location === void 0 ? void 0 : _window$location.hostname) || 'unknown',
|
|
107
|
+
'event:product': config.product,
|
|
108
|
+
'event:schema': '1.0.0',
|
|
109
|
+
'event:region': config.region || 'unknown',
|
|
110
|
+
'event:source': {
|
|
111
|
+
name: 'react-ufo/web',
|
|
112
|
+
version: _getReactUfoPayloadVersion.LATEST_REACT_UFO_PAYLOAD_VERSION
|
|
113
|
+
},
|
|
114
|
+
'experience:key': 'custom.ufo.critical-metrics',
|
|
115
|
+
'experience:name': newUFOName,
|
|
116
|
+
// Browser metadata (compact nested format)
|
|
117
|
+
browser: browserMetadata.browser,
|
|
118
|
+
device: browserMetadata.device,
|
|
119
|
+
network: browserMetadata.network,
|
|
120
|
+
time: browserMetadata.time,
|
|
121
|
+
metrics: _objectSpread({
|
|
122
|
+
fp: paintMetrics.fp,
|
|
123
|
+
fcp: paintMetrics.fcp,
|
|
124
|
+
lcp: paintMetrics.lcp,
|
|
125
|
+
ttai: ttai,
|
|
126
|
+
tti: tti,
|
|
127
|
+
fmp: fmp,
|
|
128
|
+
tbt: lighthouseMetrics['metric:tbt'],
|
|
129
|
+
tbtObserved: lighthouseMetrics['metric:tbt:observed'],
|
|
130
|
+
cls: lighthouseMetrics['metric:cls'],
|
|
131
|
+
ttvc: ttvc !== null && ttvc !== void 0 ? ttvc : undefined,
|
|
132
|
+
earliestHoldStart: earliestHold !== null && earliestHold !== void 0 && earliestHold.start ? Math.round(earliestHold.start - start) : undefined,
|
|
133
|
+
// for interaction response
|
|
134
|
+
inputDelay: responsiveness !== null && responsiveness !== void 0 && responsiveness.inputDelay ? Math.round(responsiveness.inputDelay) : undefined,
|
|
135
|
+
inp: responsiveness !== null && responsiveness !== void 0 && responsiveness.experimentalInputToNextPaint ? Math.round(responsiveness.experimentalInputToNextPaint) : undefined
|
|
136
|
+
}, navigationMetrics && {
|
|
137
|
+
navigation: navigationMetrics
|
|
138
|
+
})
|
|
139
|
+
}, ssrSuccess !== undefined && {
|
|
140
|
+
ssrSuccess: ssrSuccess
|
|
141
|
+
}), {}, {
|
|
142
|
+
interactionId: interactionId,
|
|
143
|
+
type: type,
|
|
144
|
+
rate: rate,
|
|
145
|
+
routeName: routeName !== null && routeName !== void 0 ? routeName : undefined,
|
|
146
|
+
// Performance timings
|
|
147
|
+
start: Math.round(start),
|
|
148
|
+
end: Math.round(end),
|
|
149
|
+
// Status and outcome
|
|
150
|
+
status: interactionStatus.originalInteractionStatus,
|
|
151
|
+
abortReason: abortReason,
|
|
152
|
+
previousInteractionName: previousInteractionName,
|
|
153
|
+
isPreviousInteractionAborted: isPreviousInteractionAborted,
|
|
154
|
+
abortedByInteractionName: abortedByInteractionName,
|
|
155
|
+
pageVisibilityAtTTI: pageVisibilityAtTTI !== null && pageVisibilityAtTTI !== void 0 ? pageVisibilityAtTTI : undefined,
|
|
156
|
+
pageVisibilityAtTTAI: pageVisibilityAtTTAI,
|
|
157
|
+
// Basic error count (not detailed error count)
|
|
158
|
+
errorCount: interaction.errors.length
|
|
159
|
+
}, Object.keys(cohortingCustomData || {}).length > 0 && {
|
|
160
|
+
cohortingCustomData: cohortingCustomData
|
|
161
|
+
});
|
|
162
|
+
payload = {
|
|
163
|
+
actionSubject: 'experience',
|
|
164
|
+
action: 'measured',
|
|
165
|
+
eventType: 'operational',
|
|
166
|
+
source: 'measured',
|
|
167
|
+
tags: ['observability'],
|
|
168
|
+
attributes: {
|
|
169
|
+
properties: properties
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
return _context.abrupt("return", payload);
|
|
173
|
+
case 30:
|
|
174
|
+
case "end":
|
|
175
|
+
return _context.stop();
|
|
176
|
+
}
|
|
177
|
+
}, _callee);
|
|
178
|
+
}));
|
|
179
|
+
return _createRootCriticalMetricsPayload.apply(this, arguments);
|
|
180
|
+
}
|
package/dist/cjs/create-payload/critical-metrics-payload/segment-metrics/create-segment-metrics.js
ADDED
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.createSegmentMetricsPayloads = createSegmentMetricsPayloads;
|
|
8
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
11
|
+
var _config = require("../../../config");
|
|
12
|
+
var _getBrowserMetadata = _interopRequireDefault(require("../../utils/get-browser-metadata"));
|
|
13
|
+
var _getPageVisibilityUpToTtai = _interopRequireDefault(require("../../utils/get-page-visibility-up-to-ttai"));
|
|
14
|
+
var _getReactUfoPayloadVersion = require("../../utils/get-react-ufo-payload-version");
|
|
15
|
+
var _getIsRootSegment = _interopRequireDefault(require("./get-is-root-segment"));
|
|
16
|
+
var _getSegmentId = _interopRequireDefault(require("./get-segment-id"));
|
|
17
|
+
var _getSegmentStatus2 = _interopRequireDefault(require("./get-segment-status"));
|
|
18
|
+
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; }
|
|
19
|
+
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; }
|
|
20
|
+
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; } } }; }
|
|
21
|
+
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; } }
|
|
22
|
+
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; }
|
|
23
|
+
function createSegmentMetricsPayloads(_x, _x2) {
|
|
24
|
+
return _createSegmentMetricsPayloads.apply(this, arguments);
|
|
25
|
+
}
|
|
26
|
+
function _createSegmentMetricsPayloads() {
|
|
27
|
+
_createSegmentMetricsPayloads = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(interactionId, interaction) {
|
|
28
|
+
var _interaction$cohortin;
|
|
29
|
+
var config, browserMetadata, cohortingCustomData, pageVisibilityAtTTAI, knownSegments, reactProfilerTimings, rate, routeName, previousInteractionName, isPreviousInteractionAborted, abortedByInteractionName, segmentsByName, _iterator, _step, _loop, _ret, payloads, _iterator2, _step2, _loop2;
|
|
30
|
+
return _regenerator.default.wrap(function _callee$(_context3) {
|
|
31
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
32
|
+
case 0:
|
|
33
|
+
config = (0, _config.getConfig)();
|
|
34
|
+
if (config) {
|
|
35
|
+
_context3.next = 3;
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
throw Error('UFO Configuration not provided');
|
|
39
|
+
case 3:
|
|
40
|
+
// Get browser metadata (using compact nested format)
|
|
41
|
+
browserMetadata = (0, _getBrowserMetadata.default)(); // Process cohorting custom data
|
|
42
|
+
cohortingCustomData = (_interaction$cohortin = interaction.cohortingCustomData) !== null && _interaction$cohortin !== void 0 && _interaction$cohortin.size ? Object.fromEntries(interaction.cohortingCustomData) : undefined;
|
|
43
|
+
pageVisibilityAtTTAI = (0, _getPageVisibilityUpToTtai.default)(interaction);
|
|
44
|
+
knownSegments = interaction.knownSegments, reactProfilerTimings = interaction.reactProfilerTimings, rate = interaction.rate, routeName = interaction.routeName, previousInteractionName = interaction.previousInteractionName, isPreviousInteractionAborted = interaction.isPreviousInteractionAborted, abortedByInteractionName = interaction.abortedByInteractionName; // Group segments by name and select the first segment for each name
|
|
45
|
+
segmentsByName = new Map();
|
|
46
|
+
_iterator = _createForOfIteratorHelper(knownSegments);
|
|
47
|
+
_context3.prev = 9;
|
|
48
|
+
_loop = /*#__PURE__*/_regenerator.default.mark(function _loop() {
|
|
49
|
+
var segment, segmentId, name, isRootSegment, segmentProfilerTimings, firstMountTiming, firstMountTime, existingEntry;
|
|
50
|
+
return _regenerator.default.wrap(function _loop$(_context) {
|
|
51
|
+
while (1) switch (_context.prev = _context.next) {
|
|
52
|
+
case 0:
|
|
53
|
+
segment = _step.value;
|
|
54
|
+
segmentId = (0, _getSegmentId.default)(segment.labelStack); // skip if no segmentId
|
|
55
|
+
if (segmentId) {
|
|
56
|
+
_context.next = 4;
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
return _context.abrupt("return", 0);
|
|
60
|
+
case 4:
|
|
61
|
+
name = segment.labelStack[segment.labelStack.length - 1].name;
|
|
62
|
+
isRootSegment = (0, _getIsRootSegment.default)(segment.labelStack);
|
|
63
|
+
segmentProfilerTimings = reactProfilerTimings.filter(function (timing) {
|
|
64
|
+
var timingSegmentId = (0, _getSegmentId.default)(timing.labelStack);
|
|
65
|
+
// check if labelStack matches exactly
|
|
66
|
+
return timingSegmentId === segmentId;
|
|
67
|
+
}).sort(function (a, b) {
|
|
68
|
+
return a.startTime - b.startTime;
|
|
69
|
+
});
|
|
70
|
+
firstMountTiming = segmentProfilerTimings.find(function (timing) {
|
|
71
|
+
return timing.type === 'mount';
|
|
72
|
+
});
|
|
73
|
+
if (firstMountTiming) {
|
|
74
|
+
_context.next = 10;
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
return _context.abrupt("return", 0);
|
|
78
|
+
case 10:
|
|
79
|
+
firstMountTime = isRootSegment ? interaction.start : firstMountTiming.startTime; // Check if we already have a segment with this name
|
|
80
|
+
existingEntry = segmentsByName.get(name);
|
|
81
|
+
if (!existingEntry || firstMountTime < existingEntry.firstMountTime) {
|
|
82
|
+
// Either first time seeing this name, or this segment mounted earlier
|
|
83
|
+
segmentsByName.set(name, {
|
|
84
|
+
segment: segment,
|
|
85
|
+
firstMountTime: firstMountTime
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
case 13:
|
|
89
|
+
case "end":
|
|
90
|
+
return _context.stop();
|
|
91
|
+
}
|
|
92
|
+
}, _loop);
|
|
93
|
+
});
|
|
94
|
+
_iterator.s();
|
|
95
|
+
case 12:
|
|
96
|
+
if ((_step = _iterator.n()).done) {
|
|
97
|
+
_context3.next = 19;
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
return _context3.delegateYield(_loop(), "t0", 14);
|
|
101
|
+
case 14:
|
|
102
|
+
_ret = _context3.t0;
|
|
103
|
+
if (!(_ret === 0)) {
|
|
104
|
+
_context3.next = 17;
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
return _context3.abrupt("continue", 17);
|
|
108
|
+
case 17:
|
|
109
|
+
_context3.next = 12;
|
|
110
|
+
break;
|
|
111
|
+
case 19:
|
|
112
|
+
_context3.next = 24;
|
|
113
|
+
break;
|
|
114
|
+
case 21:
|
|
115
|
+
_context3.prev = 21;
|
|
116
|
+
_context3.t1 = _context3["catch"](9);
|
|
117
|
+
_iterator.e(_context3.t1);
|
|
118
|
+
case 24:
|
|
119
|
+
_context3.prev = 24;
|
|
120
|
+
_iterator.f();
|
|
121
|
+
return _context3.finish(24);
|
|
122
|
+
case 27:
|
|
123
|
+
// Create payloads only for the selected segments (first one per name)
|
|
124
|
+
payloads = [];
|
|
125
|
+
_iterator2 = _createForOfIteratorHelper(segmentsByName.values());
|
|
126
|
+
_context3.prev = 29;
|
|
127
|
+
_loop2 = /*#__PURE__*/_regenerator.default.mark(function _loop2() {
|
|
128
|
+
var _window$location;
|
|
129
|
+
var segment, segmentId, name, isRootSegment, segmentProfilerTimings, firstMountTiming, lastTiming, startTime, endTime, ttai, _getSegmentStatus, status, segmentAbortReason, properties, payload;
|
|
130
|
+
return _regenerator.default.wrap(function _loop2$(_context2) {
|
|
131
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
132
|
+
case 0:
|
|
133
|
+
segment = _step2.value.segment;
|
|
134
|
+
segmentId = (0, _getSegmentId.default)(segment.labelStack);
|
|
135
|
+
name = segment.labelStack[segment.labelStack.length - 1].name;
|
|
136
|
+
isRootSegment = (0, _getIsRootSegment.default)(segment.labelStack);
|
|
137
|
+
segmentProfilerTimings = reactProfilerTimings.filter(function (timing) {
|
|
138
|
+
var timingSegmentId = (0, _getSegmentId.default)(timing.labelStack);
|
|
139
|
+
// check if labelStack matches exactly
|
|
140
|
+
return timingSegmentId === segmentId;
|
|
141
|
+
}).sort(function (a, b) {
|
|
142
|
+
return a.startTime - b.startTime;
|
|
143
|
+
});
|
|
144
|
+
firstMountTiming = segmentProfilerTimings.find(function (timing) {
|
|
145
|
+
return timing.type === 'mount';
|
|
146
|
+
}); // We already checked this exists in the grouping phase
|
|
147
|
+
if (firstMountTiming) {
|
|
148
|
+
_context2.next = 8;
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
return _context2.abrupt("return", 1);
|
|
152
|
+
case 8:
|
|
153
|
+
lastTiming = segmentProfilerTimings[segmentProfilerTimings.length - 1];
|
|
154
|
+
startTime = isRootSegment ? interaction.start : firstMountTiming.startTime;
|
|
155
|
+
endTime = lastTiming.commitTime;
|
|
156
|
+
ttai = Math.round(endTime - startTime);
|
|
157
|
+
_getSegmentStatus = (0, _getSegmentStatus2.default)(interaction, segment), status = _getSegmentStatus.status, segmentAbortReason = _getSegmentStatus.abortReason;
|
|
158
|
+
properties = _objectSpread({
|
|
159
|
+
// Basic metadata
|
|
160
|
+
'event:hostname': ((_window$location = window.location) === null || _window$location === void 0 ? void 0 : _window$location.hostname) || 'unknown',
|
|
161
|
+
'event:product': config.product,
|
|
162
|
+
'event:schema': '1.0.0',
|
|
163
|
+
'event:region': config.region || 'unknown',
|
|
164
|
+
'event:source': {
|
|
165
|
+
name: 'react-ufo/web',
|
|
166
|
+
version: _getReactUfoPayloadVersion.LATEST_REACT_UFO_PAYLOAD_VERSION
|
|
167
|
+
},
|
|
168
|
+
'experience:key': 'custom.ufo.critical-metrics',
|
|
169
|
+
'experience:name': name,
|
|
170
|
+
// Browser metadata (compact nested format)
|
|
171
|
+
browser: browserMetadata.browser,
|
|
172
|
+
device: browserMetadata.device,
|
|
173
|
+
network: browserMetadata.network,
|
|
174
|
+
time: browserMetadata.time,
|
|
175
|
+
metrics: {
|
|
176
|
+
ttai: ttai,
|
|
177
|
+
tti: ttai
|
|
178
|
+
},
|
|
179
|
+
interactionId: interactionId,
|
|
180
|
+
type: 'page_segment_load',
|
|
181
|
+
rate: rate,
|
|
182
|
+
routeName: routeName !== null && routeName !== void 0 ? routeName : undefined,
|
|
183
|
+
// Performance timings
|
|
184
|
+
start: Math.round(startTime),
|
|
185
|
+
end: Math.round(endTime),
|
|
186
|
+
// Status and outcome
|
|
187
|
+
status: status,
|
|
188
|
+
abortReason: segmentAbortReason,
|
|
189
|
+
previousInteractionName: previousInteractionName,
|
|
190
|
+
isPreviousInteractionAborted: isPreviousInteractionAborted,
|
|
191
|
+
abortedByInteractionName: abortedByInteractionName,
|
|
192
|
+
pageVisibilityAtTTAI: pageVisibilityAtTTAI,
|
|
193
|
+
// Basic error count (not detailed error count)
|
|
194
|
+
errorCount: interaction.errors.length
|
|
195
|
+
}, Object.keys(cohortingCustomData || {}).length > 0 && {
|
|
196
|
+
cohortingCustomData: cohortingCustomData
|
|
197
|
+
});
|
|
198
|
+
payload = {
|
|
199
|
+
actionSubject: 'experience',
|
|
200
|
+
action: 'measured',
|
|
201
|
+
eventType: 'operational',
|
|
202
|
+
source: 'measured',
|
|
203
|
+
tags: ['observability'],
|
|
204
|
+
attributes: {
|
|
205
|
+
properties: properties
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
payloads.push(payload);
|
|
209
|
+
case 16:
|
|
210
|
+
case "end":
|
|
211
|
+
return _context2.stop();
|
|
212
|
+
}
|
|
213
|
+
}, _loop2);
|
|
214
|
+
});
|
|
215
|
+
_iterator2.s();
|
|
216
|
+
case 32:
|
|
217
|
+
if ((_step2 = _iterator2.n()).done) {
|
|
218
|
+
_context3.next = 38;
|
|
219
|
+
break;
|
|
220
|
+
}
|
|
221
|
+
return _context3.delegateYield(_loop2(), "t2", 34);
|
|
222
|
+
case 34:
|
|
223
|
+
if (!_context3.t2) {
|
|
224
|
+
_context3.next = 36;
|
|
225
|
+
break;
|
|
226
|
+
}
|
|
227
|
+
return _context3.abrupt("continue", 36);
|
|
228
|
+
case 36:
|
|
229
|
+
_context3.next = 32;
|
|
230
|
+
break;
|
|
231
|
+
case 38:
|
|
232
|
+
_context3.next = 43;
|
|
233
|
+
break;
|
|
234
|
+
case 40:
|
|
235
|
+
_context3.prev = 40;
|
|
236
|
+
_context3.t3 = _context3["catch"](29);
|
|
237
|
+
_iterator2.e(_context3.t3);
|
|
238
|
+
case 43:
|
|
239
|
+
_context3.prev = 43;
|
|
240
|
+
_iterator2.f();
|
|
241
|
+
return _context3.finish(43);
|
|
242
|
+
case 46:
|
|
243
|
+
return _context3.abrupt("return", payloads);
|
|
244
|
+
case 47:
|
|
245
|
+
case "end":
|
|
246
|
+
return _context3.stop();
|
|
247
|
+
}
|
|
248
|
+
}, _callee, null, [[9, 21, 24, 27], [29, 40, 43, 46]]);
|
|
249
|
+
}));
|
|
250
|
+
return _createSegmentMetricsPayloads.apply(this, arguments);
|
|
251
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = getSegmentId;
|
|
7
|
+
function getSegmentId(labelStack) {
|
|
8
|
+
for (var i = labelStack.length - 1; i >= 0; i--) {
|
|
9
|
+
var label = labelStack[i];
|
|
10
|
+
if ('segmentId' in label) {
|
|
11
|
+
return label.segmentId;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
package/dist/cjs/create-payload/critical-metrics-payload/segment-metrics/get-segment-status.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = getSegmentStatus;
|
|
8
|
+
var _getInteractionStatus = _interopRequireDefault(require("../../utils/get-interaction-status"));
|
|
9
|
+
var _getSegmentId = _interopRequireDefault(require("./get-segment-id"));
|
|
10
|
+
var _hasSegmentFailed = _interopRequireDefault(require("./has-segment-failed"));
|
|
11
|
+
var _isLabelStackUnderSegment = _interopRequireDefault(require("./is-label-stack-under-segment"));
|
|
12
|
+
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; } } }; }
|
|
13
|
+
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; } }
|
|
14
|
+
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; }
|
|
15
|
+
function getSegmentStatus(interaction, segment) {
|
|
16
|
+
var segmentId = (0, _getSegmentId.default)(segment.labelStack);
|
|
17
|
+
|
|
18
|
+
// Get the root interaction status info
|
|
19
|
+
var rootInteractionStatus = (0, _getInteractionStatus.default)(interaction);
|
|
20
|
+
var rootStatus = rootInteractionStatus.originalInteractionStatus;
|
|
21
|
+
var rootAbortReason = interaction.abortReason;
|
|
22
|
+
var isInteractionsAbortedByNewInteraction = rootStatus === 'ABORTED' && rootAbortReason === 'new_interaction';
|
|
23
|
+
var isInteractionsAbortedByTransition = rootStatus === 'ABORTED' && rootAbortReason === 'transition';
|
|
24
|
+
var status = 'SUCCEEDED';
|
|
25
|
+
var abortReason;
|
|
26
|
+
|
|
27
|
+
// Check if this specific segment has failed
|
|
28
|
+
if (segmentId && (0, _hasSegmentFailed.default)(interaction.errors, segmentId)) {
|
|
29
|
+
status = 'FAILED';
|
|
30
|
+
} else if (isInteractionsAbortedByNewInteraction) {
|
|
31
|
+
status = 'ABORTED';
|
|
32
|
+
abortReason = 'new_interaction';
|
|
33
|
+
} else if (isInteractionsAbortedByTransition) {
|
|
34
|
+
status = 'ABORTED';
|
|
35
|
+
abortReason = 'transition';
|
|
36
|
+
} else if (segmentId) {
|
|
37
|
+
// Check for active holds that are under this segment
|
|
38
|
+
var _iterator = _createForOfIteratorHelper(interaction.holdActive.values()),
|
|
39
|
+
_step;
|
|
40
|
+
try {
|
|
41
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
42
|
+
var activeHold = _step.value;
|
|
43
|
+
if ((0, _isLabelStackUnderSegment.default)(activeHold.labelStack, segmentId)) {
|
|
44
|
+
status = 'ABORTED';
|
|
45
|
+
abortReason = 'timeout';
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
} catch (err) {
|
|
50
|
+
_iterator.e(err);
|
|
51
|
+
} finally {
|
|
52
|
+
_iterator.f();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
status: status,
|
|
57
|
+
abortReason: abortReason
|
|
58
|
+
};
|
|
59
|
+
}
|
package/dist/cjs/create-payload/critical-metrics-payload/segment-metrics/has-segment-failed.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = hasSegmentFailed;
|
|
8
|
+
var _getSegmentId = _interopRequireDefault(require("./get-segment-id"));
|
|
9
|
+
function hasSegmentFailed(errors, segmentId) {
|
|
10
|
+
return errors.some(function (error) {
|
|
11
|
+
if (!error.labelStack) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
var errorSegmentId = (0, _getSegmentId.default)(error.labelStack);
|
|
15
|
+
return errorSegmentId === segmentId;
|
|
16
|
+
});
|
|
17
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = isLabelStackUnderSegment;
|
|
7
|
+
function isLabelStackUnderSegment(labelStack, segmentId) {
|
|
8
|
+
return labelStack.some(function (label) {
|
|
9
|
+
return 'segmentId' in label && label.segmentId === segmentId;
|
|
10
|
+
});
|
|
11
|
+
}
|