@atlaskit/react-ufo 3.14.2 → 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 +16 -0
- package/dist/cjs/create-payload/common/utils/index.js +9 -3
- 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/cjs/segment/segment.js +10 -4
- package/dist/es2019/create-payload/common/utils/index.js +9 -1
- 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/es2019/segment/segment.js +12 -4
- package/dist/esm/create-payload/common/utils/index.js +9 -3
- 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/esm/segment/segment.js +10 -4
- 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/common/utils/index.d.ts +3 -0
- 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 +979 -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/create-post-interaction-log-payload/get-late-mutations.d.ts +1 -1
- package/dist/types/create-post-interaction-log-payload/index.d.ts +4 -4
- package/dist/types/interaction-context/index.d.ts +2 -0
- package/dist/types/interaction-ignore/ufo-interaction-ignore.d.ts +1 -1
- package/dist/types/interaction-metrics/index.d.ts +1 -0
- package/dist/types/segment/third-party-segment.d.ts +1 -1
- package/dist/types/vc/vc-observer-new/viewport-observer/utils/get-component-name-and-child-props.d.ts +2 -2
- 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/common/utils/index.d.ts +3 -0
- 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 +979 -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/create-post-interaction-log-payload/get-late-mutations.d.ts +1 -1
- package/dist/types-ts4.5/create-post-interaction-log-payload/index.d.ts +4 -4
- package/dist/types-ts4.5/interaction-context/index.d.ts +2 -0
- package/dist/types-ts4.5/interaction-ignore/ufo-interaction-ignore.d.ts +1 -1
- package/dist/types-ts4.5/interaction-metrics/index.d.ts +1 -0
- package/dist/types-ts4.5/segment/third-party-segment.d.ts +1 -1
- package/dist/types-ts4.5/vc/vc-observer-new/viewport-observer/utils/get-component-name-and-child-props.d.ts +2 -2
- package/package.json +8 -1
package/dist/esm/create-payload/critical-metrics-payload/segment-metrics/create-segment-metrics.js
ADDED
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
3
|
+
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
|
+
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; }
|
|
5
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
6
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
|
|
7
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
8
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
9
|
+
import { getConfig } from '../../../config';
|
|
10
|
+
import getBrowserMetadata from '../../utils/get-browser-metadata';
|
|
11
|
+
import getPageVisibilityUpToTTAI from '../../utils/get-page-visibility-up-to-ttai';
|
|
12
|
+
import { LATEST_REACT_UFO_PAYLOAD_VERSION } from '../../utils/get-react-ufo-payload-version';
|
|
13
|
+
import getIsRootSegment from './get-is-root-segment';
|
|
14
|
+
import getSegmentId from './get-segment-id';
|
|
15
|
+
import getSegmentStatus from './get-segment-status';
|
|
16
|
+
export function createSegmentMetricsPayloads(_x, _x2) {
|
|
17
|
+
return _createSegmentMetricsPayloads.apply(this, arguments);
|
|
18
|
+
}
|
|
19
|
+
function _createSegmentMetricsPayloads() {
|
|
20
|
+
_createSegmentMetricsPayloads = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(interactionId, interaction) {
|
|
21
|
+
var _interaction$cohortin;
|
|
22
|
+
var config, browserMetadata, cohortingCustomData, pageVisibilityAtTTAI, knownSegments, reactProfilerTimings, rate, routeName, previousInteractionName, isPreviousInteractionAborted, abortedByInteractionName, segmentsByName, _iterator, _step, _loop, _ret, payloads, _iterator2, _step2, _loop2;
|
|
23
|
+
return _regeneratorRuntime.wrap(function _callee$(_context3) {
|
|
24
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
25
|
+
case 0:
|
|
26
|
+
config = getConfig();
|
|
27
|
+
if (config) {
|
|
28
|
+
_context3.next = 3;
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
throw Error('UFO Configuration not provided');
|
|
32
|
+
case 3:
|
|
33
|
+
// Get browser metadata (using compact nested format)
|
|
34
|
+
browserMetadata = getBrowserMetadata(); // Process cohorting custom data
|
|
35
|
+
cohortingCustomData = (_interaction$cohortin = interaction.cohortingCustomData) !== null && _interaction$cohortin !== void 0 && _interaction$cohortin.size ? Object.fromEntries(interaction.cohortingCustomData) : undefined;
|
|
36
|
+
pageVisibilityAtTTAI = getPageVisibilityUpToTTAI(interaction);
|
|
37
|
+
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
|
|
38
|
+
segmentsByName = new Map();
|
|
39
|
+
_iterator = _createForOfIteratorHelper(knownSegments);
|
|
40
|
+
_context3.prev = 9;
|
|
41
|
+
_loop = /*#__PURE__*/_regeneratorRuntime.mark(function _loop() {
|
|
42
|
+
var segment, segmentId, name, isRootSegment, segmentProfilerTimings, firstMountTiming, firstMountTime, existingEntry;
|
|
43
|
+
return _regeneratorRuntime.wrap(function _loop$(_context) {
|
|
44
|
+
while (1) switch (_context.prev = _context.next) {
|
|
45
|
+
case 0:
|
|
46
|
+
segment = _step.value;
|
|
47
|
+
segmentId = getSegmentId(segment.labelStack); // skip if no segmentId
|
|
48
|
+
if (segmentId) {
|
|
49
|
+
_context.next = 4;
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
return _context.abrupt("return", 0);
|
|
53
|
+
case 4:
|
|
54
|
+
name = segment.labelStack[segment.labelStack.length - 1].name;
|
|
55
|
+
isRootSegment = getIsRootSegment(segment.labelStack);
|
|
56
|
+
segmentProfilerTimings = reactProfilerTimings.filter(function (timing) {
|
|
57
|
+
var timingSegmentId = getSegmentId(timing.labelStack);
|
|
58
|
+
// check if labelStack matches exactly
|
|
59
|
+
return timingSegmentId === segmentId;
|
|
60
|
+
}).sort(function (a, b) {
|
|
61
|
+
return a.startTime - b.startTime;
|
|
62
|
+
});
|
|
63
|
+
firstMountTiming = segmentProfilerTimings.find(function (timing) {
|
|
64
|
+
return timing.type === 'mount';
|
|
65
|
+
});
|
|
66
|
+
if (firstMountTiming) {
|
|
67
|
+
_context.next = 10;
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
return _context.abrupt("return", 0);
|
|
71
|
+
case 10:
|
|
72
|
+
firstMountTime = isRootSegment ? interaction.start : firstMountTiming.startTime; // Check if we already have a segment with this name
|
|
73
|
+
existingEntry = segmentsByName.get(name);
|
|
74
|
+
if (!existingEntry || firstMountTime < existingEntry.firstMountTime) {
|
|
75
|
+
// Either first time seeing this name, or this segment mounted earlier
|
|
76
|
+
segmentsByName.set(name, {
|
|
77
|
+
segment: segment,
|
|
78
|
+
firstMountTime: firstMountTime
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
case 13:
|
|
82
|
+
case "end":
|
|
83
|
+
return _context.stop();
|
|
84
|
+
}
|
|
85
|
+
}, _loop);
|
|
86
|
+
});
|
|
87
|
+
_iterator.s();
|
|
88
|
+
case 12:
|
|
89
|
+
if ((_step = _iterator.n()).done) {
|
|
90
|
+
_context3.next = 19;
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
return _context3.delegateYield(_loop(), "t0", 14);
|
|
94
|
+
case 14:
|
|
95
|
+
_ret = _context3.t0;
|
|
96
|
+
if (!(_ret === 0)) {
|
|
97
|
+
_context3.next = 17;
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
return _context3.abrupt("continue", 17);
|
|
101
|
+
case 17:
|
|
102
|
+
_context3.next = 12;
|
|
103
|
+
break;
|
|
104
|
+
case 19:
|
|
105
|
+
_context3.next = 24;
|
|
106
|
+
break;
|
|
107
|
+
case 21:
|
|
108
|
+
_context3.prev = 21;
|
|
109
|
+
_context3.t1 = _context3["catch"](9);
|
|
110
|
+
_iterator.e(_context3.t1);
|
|
111
|
+
case 24:
|
|
112
|
+
_context3.prev = 24;
|
|
113
|
+
_iterator.f();
|
|
114
|
+
return _context3.finish(24);
|
|
115
|
+
case 27:
|
|
116
|
+
// Create payloads only for the selected segments (first one per name)
|
|
117
|
+
payloads = [];
|
|
118
|
+
_iterator2 = _createForOfIteratorHelper(segmentsByName.values());
|
|
119
|
+
_context3.prev = 29;
|
|
120
|
+
_loop2 = /*#__PURE__*/_regeneratorRuntime.mark(function _loop2() {
|
|
121
|
+
var _window$location;
|
|
122
|
+
var segment, segmentId, name, isRootSegment, segmentProfilerTimings, firstMountTiming, lastTiming, startTime, endTime, ttai, _getSegmentStatus, status, segmentAbortReason, properties, payload;
|
|
123
|
+
return _regeneratorRuntime.wrap(function _loop2$(_context2) {
|
|
124
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
125
|
+
case 0:
|
|
126
|
+
segment = _step2.value.segment;
|
|
127
|
+
segmentId = getSegmentId(segment.labelStack);
|
|
128
|
+
name = segment.labelStack[segment.labelStack.length - 1].name;
|
|
129
|
+
isRootSegment = getIsRootSegment(segment.labelStack);
|
|
130
|
+
segmentProfilerTimings = reactProfilerTimings.filter(function (timing) {
|
|
131
|
+
var timingSegmentId = getSegmentId(timing.labelStack);
|
|
132
|
+
// check if labelStack matches exactly
|
|
133
|
+
return timingSegmentId === segmentId;
|
|
134
|
+
}).sort(function (a, b) {
|
|
135
|
+
return a.startTime - b.startTime;
|
|
136
|
+
});
|
|
137
|
+
firstMountTiming = segmentProfilerTimings.find(function (timing) {
|
|
138
|
+
return timing.type === 'mount';
|
|
139
|
+
}); // We already checked this exists in the grouping phase
|
|
140
|
+
if (firstMountTiming) {
|
|
141
|
+
_context2.next = 8;
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
return _context2.abrupt("return", 1);
|
|
145
|
+
case 8:
|
|
146
|
+
lastTiming = segmentProfilerTimings[segmentProfilerTimings.length - 1];
|
|
147
|
+
startTime = isRootSegment ? interaction.start : firstMountTiming.startTime;
|
|
148
|
+
endTime = lastTiming.commitTime;
|
|
149
|
+
ttai = Math.round(endTime - startTime);
|
|
150
|
+
_getSegmentStatus = getSegmentStatus(interaction, segment), status = _getSegmentStatus.status, segmentAbortReason = _getSegmentStatus.abortReason;
|
|
151
|
+
properties = _objectSpread({
|
|
152
|
+
// Basic metadata
|
|
153
|
+
'event:hostname': ((_window$location = window.location) === null || _window$location === void 0 ? void 0 : _window$location.hostname) || 'unknown',
|
|
154
|
+
'event:product': config.product,
|
|
155
|
+
'event:schema': '1.0.0',
|
|
156
|
+
'event:region': config.region || 'unknown',
|
|
157
|
+
'event:source': {
|
|
158
|
+
name: 'react-ufo/web',
|
|
159
|
+
version: LATEST_REACT_UFO_PAYLOAD_VERSION
|
|
160
|
+
},
|
|
161
|
+
'experience:key': 'custom.ufo.critical-metrics',
|
|
162
|
+
'experience:name': name,
|
|
163
|
+
// Browser metadata (compact nested format)
|
|
164
|
+
browser: browserMetadata.browser,
|
|
165
|
+
device: browserMetadata.device,
|
|
166
|
+
network: browserMetadata.network,
|
|
167
|
+
time: browserMetadata.time,
|
|
168
|
+
metrics: {
|
|
169
|
+
ttai: ttai,
|
|
170
|
+
tti: ttai
|
|
171
|
+
},
|
|
172
|
+
interactionId: interactionId,
|
|
173
|
+
type: 'page_segment_load',
|
|
174
|
+
rate: rate,
|
|
175
|
+
routeName: routeName !== null && routeName !== void 0 ? routeName : undefined,
|
|
176
|
+
// Performance timings
|
|
177
|
+
start: Math.round(startTime),
|
|
178
|
+
end: Math.round(endTime),
|
|
179
|
+
// Status and outcome
|
|
180
|
+
status: status,
|
|
181
|
+
abortReason: segmentAbortReason,
|
|
182
|
+
previousInteractionName: previousInteractionName,
|
|
183
|
+
isPreviousInteractionAborted: isPreviousInteractionAborted,
|
|
184
|
+
abortedByInteractionName: abortedByInteractionName,
|
|
185
|
+
pageVisibilityAtTTAI: pageVisibilityAtTTAI,
|
|
186
|
+
// Basic error count (not detailed error count)
|
|
187
|
+
errorCount: interaction.errors.length
|
|
188
|
+
}, Object.keys(cohortingCustomData || {}).length > 0 && {
|
|
189
|
+
cohortingCustomData: cohortingCustomData
|
|
190
|
+
});
|
|
191
|
+
payload = {
|
|
192
|
+
actionSubject: 'experience',
|
|
193
|
+
action: 'measured',
|
|
194
|
+
eventType: 'operational',
|
|
195
|
+
source: 'measured',
|
|
196
|
+
tags: ['observability'],
|
|
197
|
+
attributes: {
|
|
198
|
+
properties: properties
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
payloads.push(payload);
|
|
202
|
+
case 16:
|
|
203
|
+
case "end":
|
|
204
|
+
return _context2.stop();
|
|
205
|
+
}
|
|
206
|
+
}, _loop2);
|
|
207
|
+
});
|
|
208
|
+
_iterator2.s();
|
|
209
|
+
case 32:
|
|
210
|
+
if ((_step2 = _iterator2.n()).done) {
|
|
211
|
+
_context3.next = 38;
|
|
212
|
+
break;
|
|
213
|
+
}
|
|
214
|
+
return _context3.delegateYield(_loop2(), "t2", 34);
|
|
215
|
+
case 34:
|
|
216
|
+
if (!_context3.t2) {
|
|
217
|
+
_context3.next = 36;
|
|
218
|
+
break;
|
|
219
|
+
}
|
|
220
|
+
return _context3.abrupt("continue", 36);
|
|
221
|
+
case 36:
|
|
222
|
+
_context3.next = 32;
|
|
223
|
+
break;
|
|
224
|
+
case 38:
|
|
225
|
+
_context3.next = 43;
|
|
226
|
+
break;
|
|
227
|
+
case 40:
|
|
228
|
+
_context3.prev = 40;
|
|
229
|
+
_context3.t3 = _context3["catch"](29);
|
|
230
|
+
_iterator2.e(_context3.t3);
|
|
231
|
+
case 43:
|
|
232
|
+
_context3.prev = 43;
|
|
233
|
+
_iterator2.f();
|
|
234
|
+
return _context3.finish(43);
|
|
235
|
+
case 46:
|
|
236
|
+
return _context3.abrupt("return", payloads);
|
|
237
|
+
case 47:
|
|
238
|
+
case "end":
|
|
239
|
+
return _context3.stop();
|
|
240
|
+
}
|
|
241
|
+
}, _callee, null, [[9, 21, 24, 27], [29, 40, 43, 46]]);
|
|
242
|
+
}));
|
|
243
|
+
return _createSegmentMetricsPayloads.apply(this, arguments);
|
|
244
|
+
}
|
package/dist/esm/create-payload/critical-metrics-payload/segment-metrics/get-segment-status.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
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; } } }; }
|
|
2
|
+
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; } }
|
|
3
|
+
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; }
|
|
4
|
+
import getInteractionStatus from '../../utils/get-interaction-status';
|
|
5
|
+
import getSegmentId from './get-segment-id';
|
|
6
|
+
import hasSegmentFailed from './has-segment-failed';
|
|
7
|
+
import isLabelStackUnderSegment from './is-label-stack-under-segment';
|
|
8
|
+
export default function getSegmentStatus(interaction, segment) {
|
|
9
|
+
var segmentId = getSegmentId(segment.labelStack);
|
|
10
|
+
|
|
11
|
+
// Get the root interaction status info
|
|
12
|
+
var rootInteractionStatus = getInteractionStatus(interaction);
|
|
13
|
+
var rootStatus = rootInteractionStatus.originalInteractionStatus;
|
|
14
|
+
var rootAbortReason = interaction.abortReason;
|
|
15
|
+
var isInteractionsAbortedByNewInteraction = rootStatus === 'ABORTED' && rootAbortReason === 'new_interaction';
|
|
16
|
+
var isInteractionsAbortedByTransition = rootStatus === 'ABORTED' && rootAbortReason === 'transition';
|
|
17
|
+
var status = 'SUCCEEDED';
|
|
18
|
+
var abortReason;
|
|
19
|
+
|
|
20
|
+
// Check if this specific segment has failed
|
|
21
|
+
if (segmentId && hasSegmentFailed(interaction.errors, segmentId)) {
|
|
22
|
+
status = 'FAILED';
|
|
23
|
+
} else if (isInteractionsAbortedByNewInteraction) {
|
|
24
|
+
status = 'ABORTED';
|
|
25
|
+
abortReason = 'new_interaction';
|
|
26
|
+
} else if (isInteractionsAbortedByTransition) {
|
|
27
|
+
status = 'ABORTED';
|
|
28
|
+
abortReason = 'transition';
|
|
29
|
+
} else if (segmentId) {
|
|
30
|
+
// Check for active holds that are under this segment
|
|
31
|
+
var _iterator = _createForOfIteratorHelper(interaction.holdActive.values()),
|
|
32
|
+
_step;
|
|
33
|
+
try {
|
|
34
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
35
|
+
var activeHold = _step.value;
|
|
36
|
+
if (isLabelStackUnderSegment(activeHold.labelStack, segmentId)) {
|
|
37
|
+
status = 'ABORTED';
|
|
38
|
+
abortReason = 'timeout';
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
} catch (err) {
|
|
43
|
+
_iterator.e(err);
|
|
44
|
+
} finally {
|
|
45
|
+
_iterator.f();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
status: status,
|
|
50
|
+
abortReason: abortReason
|
|
51
|
+
};
|
|
52
|
+
}
|
package/dist/esm/create-payload/critical-metrics-payload/segment-metrics/has-segment-failed.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import getSegmentId from './get-segment-id';
|
|
2
|
+
export default function hasSegmentFailed(errors, segmentId) {
|
|
3
|
+
return errors.some(function (error) {
|
|
4
|
+
if (!error.labelStack) {
|
|
5
|
+
return false;
|
|
6
|
+
}
|
|
7
|
+
var errorSegmentId = getSegmentId(error.labelStack);
|
|
8
|
+
return errorSegmentId === segmentId;
|
|
9
|
+
});
|
|
10
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|