@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.
Files changed (131) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/create-payload/common/utils/index.js +9 -3
  3. package/dist/cjs/create-payload/critical-metrics-payload/index.js +38 -0
  4. package/dist/cjs/create-payload/critical-metrics-payload/root-metrics.js +180 -0
  5. package/dist/cjs/create-payload/critical-metrics-payload/segment-metrics/create-segment-metrics.js +251 -0
  6. package/dist/cjs/create-payload/critical-metrics-payload/segment-metrics/get-is-root-segment.js +9 -0
  7. package/dist/cjs/create-payload/critical-metrics-payload/segment-metrics/get-segment-id.js +15 -0
  8. package/dist/cjs/create-payload/critical-metrics-payload/segment-metrics/get-segment-status.js +59 -0
  9. package/dist/cjs/create-payload/critical-metrics-payload/segment-metrics/has-segment-failed.js +17 -0
  10. package/dist/cjs/create-payload/critical-metrics-payload/segment-metrics/is-label-stack-under-segment.js +11 -0
  11. package/dist/cjs/create-payload/critical-metrics-payload/types.js +5 -0
  12. package/dist/cjs/create-payload/index.js +122 -214
  13. package/dist/cjs/create-payload/utils/find-matching-legacy-metric.js +15 -0
  14. package/dist/cjs/create-payload/utils/get-browser-metadata.js +87 -0
  15. package/dist/cjs/create-payload/utils/get-fmp.js +52 -0
  16. package/dist/cjs/create-payload/utils/get-navigation-metrics.js +66 -0
  17. package/dist/cjs/create-payload/utils/get-paint-metrics.js +124 -0
  18. package/dist/cjs/create-payload/utils/get-payload-size.js +17 -0
  19. package/dist/cjs/create-payload/utils/get-react-ufo-payload-version.js +3 -1
  20. package/dist/cjs/create-payload/utils/get-ssr-success.js +15 -0
  21. package/dist/cjs/create-payload/utils/get-ttai.js +14 -0
  22. package/dist/cjs/create-payload/utils/get-tti.js +38 -0
  23. package/dist/cjs/interaction-metrics/index.js +25 -0
  24. package/dist/cjs/segment/segment.js +10 -4
  25. package/dist/es2019/create-payload/common/utils/index.js +9 -1
  26. package/dist/es2019/create-payload/critical-metrics-payload/index.js +6 -0
  27. package/dist/es2019/create-payload/critical-metrics-payload/root-metrics.js +166 -0
  28. package/dist/es2019/create-payload/critical-metrics-payload/segment-metrics/create-segment-metrics.js +155 -0
  29. package/dist/es2019/create-payload/critical-metrics-payload/segment-metrics/get-is-root-segment.js +3 -0
  30. package/dist/es2019/create-payload/critical-metrics-payload/segment-metrics/get-segment-id.js +9 -0
  31. package/dist/es2019/create-payload/critical-metrics-payload/segment-metrics/get-segment-status.js +40 -0
  32. package/dist/es2019/create-payload/critical-metrics-payload/segment-metrics/has-segment-failed.js +10 -0
  33. package/dist/es2019/create-payload/critical-metrics-payload/segment-metrics/is-label-stack-under-segment.js +5 -0
  34. package/dist/es2019/create-payload/critical-metrics-payload/types.js +1 -0
  35. package/dist/es2019/create-payload/index.js +55 -151
  36. package/dist/es2019/create-payload/utils/find-matching-legacy-metric.js +7 -0
  37. package/dist/es2019/create-payload/utils/get-browser-metadata.js +79 -0
  38. package/dist/es2019/create-payload/utils/get-fmp.js +47 -0
  39. package/dist/es2019/create-payload/utils/get-navigation-metrics.js +59 -0
  40. package/dist/es2019/create-payload/utils/get-paint-metrics.js +78 -0
  41. package/dist/es2019/create-payload/utils/get-payload-size.js +11 -0
  42. package/dist/es2019/create-payload/utils/get-react-ufo-payload-version.js +2 -1
  43. package/dist/es2019/create-payload/utils/get-ssr-success.js +7 -0
  44. package/dist/es2019/create-payload/utils/get-ttai.js +9 -0
  45. package/dist/es2019/create-payload/utils/get-tti.js +35 -0
  46. package/dist/es2019/interaction-metrics/index.js +24 -0
  47. package/dist/es2019/segment/segment.js +12 -4
  48. package/dist/esm/create-payload/common/utils/index.js +9 -3
  49. package/dist/esm/create-payload/critical-metrics-payload/index.js +31 -0
  50. package/dist/esm/create-payload/critical-metrics-payload/root-metrics.js +174 -0
  51. package/dist/esm/create-payload/critical-metrics-payload/segment-metrics/create-segment-metrics.js +244 -0
  52. package/dist/esm/create-payload/critical-metrics-payload/segment-metrics/get-is-root-segment.js +3 -0
  53. package/dist/esm/create-payload/critical-metrics-payload/segment-metrics/get-segment-id.js +9 -0
  54. package/dist/esm/create-payload/critical-metrics-payload/segment-metrics/get-segment-status.js +52 -0
  55. package/dist/esm/create-payload/critical-metrics-payload/segment-metrics/has-segment-failed.js +10 -0
  56. package/dist/esm/create-payload/critical-metrics-payload/segment-metrics/is-label-stack-under-segment.js +5 -0
  57. package/dist/esm/create-payload/critical-metrics-payload/types.js +1 -0
  58. package/dist/esm/create-payload/index.js +121 -210
  59. package/dist/esm/create-payload/utils/find-matching-legacy-metric.js +9 -0
  60. package/dist/esm/create-payload/utils/get-browser-metadata.js +79 -0
  61. package/dist/esm/create-payload/utils/get-fmp.js +47 -0
  62. package/dist/esm/create-payload/utils/get-navigation-metrics.js +59 -0
  63. package/dist/esm/create-payload/utils/get-paint-metrics.js +119 -0
  64. package/dist/esm/create-payload/utils/get-payload-size.js +11 -0
  65. package/dist/esm/create-payload/utils/get-react-ufo-payload-version.js +2 -1
  66. package/dist/esm/create-payload/utils/get-ssr-success.js +7 -0
  67. package/dist/esm/create-payload/utils/get-ttai.js +7 -0
  68. package/dist/esm/create-payload/utils/get-tti.js +33 -0
  69. package/dist/esm/interaction-metrics/index.js +24 -0
  70. package/dist/esm/segment/segment.js +10 -4
  71. package/dist/types/common/common/types.d.ts +1 -1
  72. package/dist/types/common/react-ufo-payload-schema.d.ts +23 -2
  73. package/dist/types/create-payload/common/utils/index.d.ts +3 -0
  74. package/dist/types/create-payload/critical-metrics-payload/index.d.ts +6 -0
  75. package/dist/types/create-payload/critical-metrics-payload/root-metrics.d.ts +7 -0
  76. package/dist/types/create-payload/critical-metrics-payload/segment-metrics/create-segment-metrics.d.ts +3 -0
  77. package/dist/types/create-payload/critical-metrics-payload/segment-metrics/get-is-root-segment.d.ts +2 -0
  78. package/dist/types/create-payload/critical-metrics-payload/segment-metrics/get-segment-id.d.ts +2 -0
  79. package/dist/types/create-payload/critical-metrics-payload/segment-metrics/get-segment-status.d.ts +7 -0
  80. package/dist/types/create-payload/critical-metrics-payload/segment-metrics/has-segment-failed.d.ts +2 -0
  81. package/dist/types/create-payload/critical-metrics-payload/segment-metrics/is-label-stack-under-segment.d.ts +2 -0
  82. package/dist/types/create-payload/critical-metrics-payload/types.d.ts +128 -0
  83. package/dist/types/create-payload/index.d.ts +979 -834
  84. package/dist/types/create-payload/utils/find-matching-legacy-metric.d.ts +5 -0
  85. package/dist/types/create-payload/utils/get-browser-metadata.d.ts +21 -0
  86. package/dist/types/create-payload/utils/get-fmp.d.ts +6 -0
  87. package/dist/types/create-payload/utils/get-navigation-metrics.d.ts +29 -0
  88. package/dist/types/create-payload/utils/get-paint-metrics.d.ts +13 -0
  89. package/dist/types/create-payload/utils/get-payload-size.d.ts +1 -0
  90. package/dist/types/create-payload/utils/get-react-ufo-payload-version.d.ts +2 -1
  91. package/dist/types/create-payload/utils/get-ssr-success.d.ts +2 -0
  92. package/dist/types/create-payload/utils/get-ttai.d.ts +2 -0
  93. package/dist/types/create-payload/utils/get-tti.d.ts +7 -0
  94. package/dist/types/create-post-interaction-log-payload/get-late-mutations.d.ts +1 -1
  95. package/dist/types/create-post-interaction-log-payload/index.d.ts +4 -4
  96. package/dist/types/interaction-context/index.d.ts +2 -0
  97. package/dist/types/interaction-ignore/ufo-interaction-ignore.d.ts +1 -1
  98. package/dist/types/interaction-metrics/index.d.ts +1 -0
  99. package/dist/types/segment/third-party-segment.d.ts +1 -1
  100. package/dist/types/vc/vc-observer-new/viewport-observer/utils/get-component-name-and-child-props.d.ts +2 -2
  101. package/dist/types-ts4.5/common/common/types.d.ts +1 -1
  102. package/dist/types-ts4.5/common/react-ufo-payload-schema.d.ts +23 -2
  103. package/dist/types-ts4.5/create-payload/common/utils/index.d.ts +3 -0
  104. package/dist/types-ts4.5/create-payload/critical-metrics-payload/index.d.ts +6 -0
  105. package/dist/types-ts4.5/create-payload/critical-metrics-payload/root-metrics.d.ts +7 -0
  106. package/dist/types-ts4.5/create-payload/critical-metrics-payload/segment-metrics/create-segment-metrics.d.ts +3 -0
  107. package/dist/types-ts4.5/create-payload/critical-metrics-payload/segment-metrics/get-is-root-segment.d.ts +2 -0
  108. package/dist/types-ts4.5/create-payload/critical-metrics-payload/segment-metrics/get-segment-id.d.ts +2 -0
  109. package/dist/types-ts4.5/create-payload/critical-metrics-payload/segment-metrics/get-segment-status.d.ts +7 -0
  110. package/dist/types-ts4.5/create-payload/critical-metrics-payload/segment-metrics/has-segment-failed.d.ts +2 -0
  111. package/dist/types-ts4.5/create-payload/critical-metrics-payload/segment-metrics/is-label-stack-under-segment.d.ts +2 -0
  112. package/dist/types-ts4.5/create-payload/critical-metrics-payload/types.d.ts +130 -0
  113. package/dist/types-ts4.5/create-payload/index.d.ts +979 -834
  114. package/dist/types-ts4.5/create-payload/utils/find-matching-legacy-metric.d.ts +5 -0
  115. package/dist/types-ts4.5/create-payload/utils/get-browser-metadata.d.ts +21 -0
  116. package/dist/types-ts4.5/create-payload/utils/get-fmp.d.ts +6 -0
  117. package/dist/types-ts4.5/create-payload/utils/get-navigation-metrics.d.ts +29 -0
  118. package/dist/types-ts4.5/create-payload/utils/get-paint-metrics.d.ts +13 -0
  119. package/dist/types-ts4.5/create-payload/utils/get-payload-size.d.ts +1 -0
  120. package/dist/types-ts4.5/create-payload/utils/get-react-ufo-payload-version.d.ts +2 -1
  121. package/dist/types-ts4.5/create-payload/utils/get-ssr-success.d.ts +2 -0
  122. package/dist/types-ts4.5/create-payload/utils/get-ttai.d.ts +2 -0
  123. package/dist/types-ts4.5/create-payload/utils/get-tti.d.ts +7 -0
  124. package/dist/types-ts4.5/create-post-interaction-log-payload/get-late-mutations.d.ts +1 -1
  125. package/dist/types-ts4.5/create-post-interaction-log-payload/index.d.ts +4 -4
  126. package/dist/types-ts4.5/interaction-context/index.d.ts +2 -0
  127. package/dist/types-ts4.5/interaction-ignore/ufo-interaction-ignore.d.ts +1 -1
  128. package/dist/types-ts4.5/interaction-metrics/index.d.ts +1 -0
  129. package/dist/types-ts4.5/segment/third-party-segment.d.ts +1 -1
  130. package/dist/types-ts4.5/vc/vc-observer-new/viewport-observer/utils/get-component-name-and-child-props.d.ts +2 -2
  131. package/package.json +8 -1
@@ -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
+ }
@@ -0,0 +1,3 @@
1
+ export default function getIsRootSegment(labelStack) {
2
+ return labelStack.length === 1;
3
+ }
@@ -0,0 +1,9 @@
1
+ export default function getSegmentId(labelStack) {
2
+ for (var i = labelStack.length - 1; i >= 0; i--) {
3
+ var label = labelStack[i];
4
+ if ('segmentId' in label) {
5
+ return label.segmentId;
6
+ }
7
+ }
8
+ return undefined;
9
+ }
@@ -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
+ }
@@ -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,5 @@
1
+ export default function isLabelStackUnderSegment(labelStack, segmentId) {
2
+ return labelStack.some(function (label) {
3
+ return 'segmentId' in label && label.segmentId === segmentId;
4
+ });
5
+ }