@atlaskit/react-ufo 4.7.0 → 4.7.2

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 (69) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/create-interaction-extra-metrics-payload/index.js +82 -15
  3. package/dist/cjs/create-payload/index.js +26 -218
  4. package/dist/cjs/create-payload/utils/get-more-accurate-page-visibility-up-to-ttai.js +20 -0
  5. package/dist/cjs/create-payload/utils/get-visibility-state-from-performance.js +35 -0
  6. package/dist/cjs/create-payload/utils/optimize-apdex.js +25 -0
  7. package/dist/cjs/create-payload/utils/optimize-custom-timings.js +22 -0
  8. package/dist/cjs/create-payload/utils/optimize-hold-info.js +41 -0
  9. package/dist/cjs/create-payload/utils/optimize-marks.js +24 -0
  10. package/dist/cjs/create-payload/utils/optimize-react-profiler-timings.js +53 -0
  11. package/dist/cjs/create-payload/utils/optimize-request-info.js +32 -0
  12. package/dist/cjs/create-payload/utils/optimize-spans.js +30 -0
  13. package/dist/cjs/interaction-metrics-init/index.js +1 -1
  14. package/dist/cjs/vc/vc-observer/observers/ssr-placeholders/index.js +2 -2
  15. package/dist/cjs/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.js +4 -6
  16. package/dist/cjs/vc/vc-observer-new/viewport-observer/index.js +30 -48
  17. package/dist/es2019/create-interaction-extra-metrics-payload/index.js +62 -9
  18. package/dist/es2019/create-payload/index.js +10 -205
  19. package/dist/es2019/create-payload/utils/get-more-accurate-page-visibility-up-to-ttai.js +13 -0
  20. package/dist/es2019/create-payload/utils/get-visibility-state-from-performance.js +28 -0
  21. package/dist/es2019/create-payload/utils/optimize-apdex.js +14 -0
  22. package/dist/es2019/create-payload/utils/optimize-custom-timings.js +16 -0
  23. package/dist/es2019/create-payload/utils/optimize-hold-info.js +35 -0
  24. package/dist/es2019/create-payload/utils/optimize-marks.js +12 -0
  25. package/dist/es2019/create-payload/utils/optimize-react-profiler-timings.js +46 -0
  26. package/dist/es2019/create-payload/utils/optimize-request-info.js +26 -0
  27. package/dist/es2019/create-payload/utils/optimize-spans.js +24 -0
  28. package/dist/es2019/interaction-metrics-init/index.js +1 -1
  29. package/dist/es2019/vc/vc-observer/observers/ssr-placeholders/index.js +2 -2
  30. package/dist/es2019/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.js +9 -13
  31. package/dist/es2019/vc/vc-observer-new/viewport-observer/index.js +20 -29
  32. package/dist/esm/create-interaction-extra-metrics-payload/index.js +83 -16
  33. package/dist/esm/create-payload/index.js +18 -208
  34. package/dist/esm/create-payload/utils/get-more-accurate-page-visibility-up-to-ttai.js +13 -0
  35. package/dist/esm/create-payload/utils/get-visibility-state-from-performance.js +29 -0
  36. package/dist/esm/create-payload/utils/optimize-apdex.js +18 -0
  37. package/dist/esm/create-payload/utils/optimize-custom-timings.js +16 -0
  38. package/dist/esm/create-payload/utils/optimize-hold-info.js +34 -0
  39. package/dist/esm/create-payload/utils/optimize-marks.js +17 -0
  40. package/dist/esm/create-payload/utils/optimize-react-profiler-timings.js +46 -0
  41. package/dist/esm/create-payload/utils/optimize-request-info.js +25 -0
  42. package/dist/esm/create-payload/utils/optimize-spans.js +23 -0
  43. package/dist/esm/interaction-metrics-init/index.js +1 -1
  44. package/dist/esm/vc/vc-observer/observers/ssr-placeholders/index.js +2 -2
  45. package/dist/esm/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.js +4 -6
  46. package/dist/esm/vc/vc-observer-new/viewport-observer/index.js +30 -48
  47. package/dist/types/create-interaction-extra-metrics-payload/index.d.ts +56 -0
  48. package/dist/types/create-payload/index.d.ts +0 -3
  49. package/dist/types/create-payload/utils/get-more-accurate-page-visibility-up-to-ttai.d.ts +2 -0
  50. package/dist/types/create-payload/utils/get-visibility-state-from-performance.d.ts +1 -0
  51. package/dist/types/create-payload/utils/optimize-apdex.d.ts +12 -0
  52. package/dist/types/create-payload/utils/optimize-custom-timings.d.ts +7 -0
  53. package/dist/types/create-payload/utils/optimize-hold-info.d.ts +3 -0
  54. package/dist/types/create-payload/utils/optimize-marks.d.ts +12 -0
  55. package/dist/types/create-payload/utils/optimize-react-profiler-timings.d.ts +3 -0
  56. package/dist/types/create-payload/utils/optimize-request-info.d.ts +8 -0
  57. package/dist/types/create-payload/utils/optimize-spans.d.ts +9 -0
  58. package/dist/types-ts4.5/create-interaction-extra-metrics-payload/index.d.ts +56 -0
  59. package/dist/types-ts4.5/create-payload/index.d.ts +0 -3
  60. package/dist/types-ts4.5/create-payload/utils/get-more-accurate-page-visibility-up-to-ttai.d.ts +2 -0
  61. package/dist/types-ts4.5/create-payload/utils/get-visibility-state-from-performance.d.ts +1 -0
  62. package/dist/types-ts4.5/create-payload/utils/optimize-apdex.d.ts +12 -0
  63. package/dist/types-ts4.5/create-payload/utils/optimize-custom-timings.d.ts +7 -0
  64. package/dist/types-ts4.5/create-payload/utils/optimize-hold-info.d.ts +3 -0
  65. package/dist/types-ts4.5/create-payload/utils/optimize-marks.d.ts +12 -0
  66. package/dist/types-ts4.5/create-payload/utils/optimize-react-profiler-timings.d.ts +3 -0
  67. package/dist/types-ts4.5/create-payload/utils/optimize-request-info.d.ts +8 -0
  68. package/dist/types-ts4.5/create-payload/utils/optimize-spans.d.ts +9 -0
  69. package/package.json +1 -7
@@ -1,25 +1,36 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
3
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
4
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
5
+ var _excluded = ["labelStack"];
3
6
  import _regeneratorRuntime from "@babel/runtime/regenerator";
4
7
  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; }
5
8
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
6
9
  import { fg } from '@atlaskit/platform-feature-flags';
7
10
  import coinflip from '../coinflip';
8
- import { getConfig, getExtraInteractionRate } from '../config';
9
- import { getMoreAccuratePageVisibilityUpToTTAI, optimizeHoldInfo } from '../create-payload';
10
- import { buildSegmentTree, getOldSegmentsLabelStack, sanitizeUfoName } from '../create-payload/common/utils';
11
+ import { DEFAULT_TTVC_REVISION, getConfig, getExtraInteractionRate, getMostRecentVCRevision } from '../config';
12
+ import { buildSegmentTree, getOldSegmentsLabelStack, optimizeLabelStack, sanitizeUfoName } from '../create-payload/common/utils';
13
+ import { getMoreAccuratePageVisibilityUpToTTAI } from '../create-payload/utils/get-more-accurate-page-visibility-up-to-ttai';
11
14
  import getPageVisibilityUpToTTAI from '../create-payload/utils/get-page-visibility-up-to-ttai';
12
15
  import getPayloadSize from '../create-payload/utils/get-payload-size';
13
16
  import { getReactUFOPayloadVersion } from '../create-payload/utils/get-react-ufo-payload-version';
14
17
  import getTTAI from '../create-payload/utils/get-ttai';
15
18
  import getVCMetrics from '../create-payload/utils/get-vc-metrics';
19
+ import { optimizeApdex } from '../create-payload/utils/optimize-apdex';
20
+ import { optimizeCustomTimings } from '../create-payload/utils/optimize-custom-timings';
21
+ import { optimizeHoldInfo } from '../create-payload/utils/optimize-hold-info';
22
+ import { optimizeMarks } from '../create-payload/utils/optimize-marks';
23
+ import { optimizeReactProfilerTimings } from '../create-payload/utils/optimize-react-profiler-timings';
24
+ import { optimizeRequestInfo } from '../create-payload/utils/optimize-request-info';
25
+ import { optimizeSpans } from '../create-payload/utils/optimize-spans';
26
+ import { interactionSpans as atlaskitInteractionSpans } from '../interaction-metrics';
16
27
  function createInteractionExtraLogPayload(_x, _x2) {
17
28
  return _createInteractionExtraLogPayload.apply(this, arguments);
18
29
  }
19
30
  function _createInteractionExtraLogPayload() {
20
31
  _createInteractionExtraLogPayload = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(interactionId, interaction) {
21
- var _getTTAI, _interaction$hold3pIn, _window$location;
22
- var config, end, start, ufoName, rate, type, abortReason, routeName, previousInteractionName, isPreviousInteractionAborted, abortedByInteractionName, knownSegments, sanitisedUfoName, configRate, pageVisibilityAtTTAI, isPageLoad, calculatePageVisibilityFromTheStartOfPageLoad, moreAccuratePageVisibilityAtTTAI, extraTTAI, newUFOName, finalVCMetrics, holdInfo, segments3p, segmentTree, payload;
32
+ var _getTTAI, _getMostRecentVCRevis, _window$location;
33
+ var config, end, start, ufoName, rate, type, abortReason, routeName, previousInteractionName, isPreviousInteractionAborted, abortedByInteractionName, knownSegments, sanitisedUfoName, configRate, pageVisibilityAtTTAI, isPageLoad, calculatePageVisibilityFromTheStartOfPageLoad, moreAccuratePageVisibilityAtTTAI, extraTTAI, newUFOName, mostRecentVCRevision, finalVCMetrics, isThirdParty, filteredData, getDetailedInteractionMetrics, segments3p, segmentTree, payload;
23
34
  return _regeneratorRuntime.wrap(function _callee$(_context) {
24
35
  while (1) switch (_context.prev = _context.next) {
25
36
  case 0:
@@ -51,16 +62,68 @@ function _createInteractionExtraLogPayload() {
51
62
  moreAccuratePageVisibilityAtTTAI = calculatePageVisibilityFromTheStartOfPageLoad ? getMoreAccuratePageVisibilityUpToTTAI(interaction) : null;
52
63
  extraTTAI = (_getTTAI = getTTAI(interaction)) !== null && _getTTAI !== void 0 ? _getTTAI : undefined;
53
64
  newUFOName = sanitizeUfoName(ufoName);
54
- _context.next = 18;
65
+ mostRecentVCRevision = (_getMostRecentVCRevis = getMostRecentVCRevision(newUFOName)) !== null && _getMostRecentVCRevis !== void 0 ? _getMostRecentVCRevis : DEFAULT_TTVC_REVISION;
66
+ _context.next = 19;
55
67
  return getVCMetrics(interaction, true);
56
- case 18:
68
+ case 19:
57
69
  finalVCMetrics = _context.sent;
58
- holdInfo = optimizeHoldInfo((_interaction$hold3pIn = interaction.hold3pInfo) !== null && _interaction$hold3pIn !== void 0 ? _interaction$hold3pIn : [], start, getReactUFOPayloadVersion(interaction.type));
59
- segments3p = !fg('platform_ufo_remove_deprecated_config_fields') && config.killswitchNestedSegments ? [] : knownSegments.filter(function (knownSegment) {
60
- return knownSegment.labelStack.some(function (entry) {
70
+ // Helper function to check if labelStack contains third-party type
71
+ isThirdParty = function isThirdParty(labelStack) {
72
+ var _labelStack$some;
73
+ return (_labelStack$some = labelStack === null || labelStack === void 0 ? void 0 : labelStack.some(function (entry) {
61
74
  return 'type' in entry && entry.type === 'third-party';
62
- });
63
- });
75
+ })) !== null && _labelStack$some !== void 0 ? _labelStack$some : false;
76
+ }; // Pre-filter 3p data
77
+ filteredData = {
78
+ errors: interaction.errors.filter(function (error) {
79
+ return isThirdParty(error.labelStack);
80
+ }),
81
+ spans: [].concat(_toConsumableArray(interaction.spans), _toConsumableArray(atlaskitInteractionSpans)).filter(function (span) {
82
+ return isThirdParty(span.labelStack);
83
+ }),
84
+ requestInfo: interaction.requestInfo.filter(function (req) {
85
+ return isThirdParty(req.labelStack);
86
+ }),
87
+ customTimings: interaction.customTimings.filter(function (timing) {
88
+ return isThirdParty(timing.labelStack);
89
+ }),
90
+ apdex: interaction.apdex.filter(function (apdex) {
91
+ return isThirdParty(apdex.labelStack);
92
+ }),
93
+ reactProfilerTimings: interaction.reactProfilerTimings.filter(function (timing) {
94
+ return isThirdParty(timing.labelStack);
95
+ }),
96
+ customData: interaction.customData.filter(function (data) {
97
+ return isThirdParty(data.labelStack);
98
+ }),
99
+ segments: knownSegments.filter(function (segment) {
100
+ return isThirdParty(segment.labelStack);
101
+ }),
102
+ marks: interaction.marks.filter(function (mark) {
103
+ return isThirdParty(mark.labelStack);
104
+ })
105
+ }; // Clear atlaskit spans after filtering
106
+ atlaskitInteractionSpans.length = 0;
107
+
108
+ // Detailed payload
109
+ getDetailedInteractionMetrics = function getDetailedInteractionMetrics() {
110
+ var _interaction$hold3pIn;
111
+ return {
112
+ errors: filteredData.errors.map(function (_ref) {
113
+ var labelStack = _ref.labelStack,
114
+ others = _objectWithoutProperties(_ref, _excluded);
115
+ return _objectSpread(_objectSpread({}, others), {}, {
116
+ labelStack: labelStack && optimizeLabelStack(labelStack, getReactUFOPayloadVersion(interaction.type))
117
+ });
118
+ }),
119
+ holdActive: interaction.hold3pActive ? _toConsumableArray(interaction.hold3pActive.values()) : [],
120
+ holdInfo: optimizeHoldInfo((_interaction$hold3pIn = interaction.hold3pInfo) !== null && _interaction$hold3pIn !== void 0 ? _interaction$hold3pIn : [], start, getReactUFOPayloadVersion(interaction.type)),
121
+ spans: optimizeSpans(filteredData.spans, start, getReactUFOPayloadVersion(interaction.type)),
122
+ requestInfo: optimizeRequestInfo(filteredData.requestInfo, start, getReactUFOPayloadVersion(interaction.type)),
123
+ customTimings: optimizeCustomTimings(filteredData.customTimings, start)
124
+ };
125
+ };
126
+ segments3p = !fg('platform_ufo_remove_deprecated_config_fields') && config.killswitchNestedSegments ? [] : filteredData.segments;
64
127
  segmentTree = getReactUFOPayloadVersion(interaction.type) === '2.0.0' ? buildSegmentTree(segments3p.map(function (segment) {
65
128
  return segment.labelStack;
66
129
  })) : {};
@@ -103,15 +166,19 @@ function _createInteractionExtraLogPayload() {
103
166
  start: Math.round(start),
104
167
  'metric:ttai:3p': extraTTAI
105
168
  }, finalVCMetrics), {}, {
106
- holdInfo: holdInfo,
107
- segments: getReactUFOPayloadVersion(interaction.type) === '2.0.0' ? segmentTree : getOldSegmentsLabelStack(segments3p, interaction.type)
108
- })
169
+ segments: getReactUFOPayloadVersion(interaction.type) === '2.0.0' ? segmentTree : getOldSegmentsLabelStack(segments3p, interaction.type),
170
+ marks: optimizeMarks(filteredData.marks, getReactUFOPayloadVersion(interaction.type)),
171
+ apdex: optimizeApdex(filteredData.apdex, getReactUFOPayloadVersion(interaction.type)),
172
+ reactProfilerTimings: optimizeReactProfilerTimings(filteredData.reactProfilerTimings, start, getReactUFOPayloadVersion(interaction.type)),
173
+ customData: filteredData.customData
174
+ }, getDetailedInteractionMetrics()),
175
+ 'vc:effective:revision': mostRecentVCRevision
109
176
  }
110
177
  }
111
178
  };
112
179
  payload.attributes.properties['event:sizeInKb'] = getPayloadSize(payload.attributes.properties);
113
180
  return _context.abrupt("return", payload);
114
- case 25:
181
+ case 29:
115
182
  case "end":
116
183
  return _context.stop();
117
184
  }
@@ -1,11 +1,9 @@
1
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
1
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
2
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
3
  import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
4
4
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
5
5
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
6
- var _excluded = ["labelStack", "time"],
7
- _excluded2 = ["stopTime", "labelStack"],
8
- _excluded3 = ["labelStack"];
6
+ var _excluded = ["labelStack"];
9
7
  import _regeneratorRuntime from "@babel/runtime/regenerator";
10
8
  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; }
11
9
  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; }
@@ -24,7 +22,7 @@ import { getBm3Timings } from '../custom-timings';
24
22
  import { getGlobalErrorCount } from '../global-error-handler';
25
23
  import { getPageVisibilityState } from '../hidden-timing';
26
24
  import * as initialPageLoadExtraTiming from '../initial-page-load-extra-timing';
27
- import { interactionSpans as atlaskitInteractionSpans, segmentUnmountCache } from '../interaction-metrics';
25
+ import { interactionSpans as atlaskitInteractionSpans } from '../interaction-metrics';
28
26
  import { createMemoryStateReport, createPressureStateReport } from '../machine-utilisation';
29
27
  import * as resourceTiming from '../resource-timing';
30
28
  import { filterResourceTimings } from '../resource-timing/common/utils/resource-timing-buffer';
@@ -35,6 +33,7 @@ import { createCriticalMetricsPayloads } from './critical-metrics-payload';
35
33
  import { addPerformanceMeasures } from './utils/add-performance-measures';
36
34
  import { getBrowserMetadataToLegacyFormat } from './utils/get-browser-metadata';
37
35
  import getInteractionStatus from './utils/get-interaction-status';
36
+ import { getMoreAccuratePageVisibilityUpToTTAI } from './utils/get-more-accurate-page-visibility-up-to-ttai';
38
37
  import { getNavigationMetricsToLegacyFormat } from './utils/get-navigation-metrics';
39
38
  import getPageVisibilityUpToTTAI from './utils/get-page-visibility-up-to-ttai';
40
39
  import { getPaintMetricsToLegacyFormat } from './utils/get-paint-metrics';
@@ -44,6 +43,14 @@ import getSSRDoneTimeValue from './utils/get-ssr-done-time-value';
44
43
  import getSSRSuccessUtil from './utils/get-ssr-success';
45
44
  import getTTAI from './utils/get-ttai';
46
45
  import getVCMetrics from './utils/get-vc-metrics';
46
+ import { getVisibilityStateFromPerformance } from './utils/get-visibility-state-from-performance';
47
+ import { optimizeApdex } from './utils/optimize-apdex';
48
+ import { optimizeCustomTimings } from './utils/optimize-custom-timings';
49
+ import { optimizeHoldInfo } from './utils/optimize-hold-info';
50
+ import { optimizeMarks } from './utils/optimize-marks';
51
+ import { optimizeReactProfilerTimings } from './utils/optimize-react-profiler-timings';
52
+ import { optimizeRequestInfo } from './utils/optimize-request-info';
53
+ import { optimizeSpans } from './utils/optimize-spans';
47
54
  function getUfoNameOverride(interaction) {
48
55
  var ufoName = interaction.ufoName,
49
56
  apdex = interaction.apdex;
@@ -90,35 +97,6 @@ function getPageVisibilityUpToTTI(interaction) {
90
97
  var bm3EndTimeOrInteractionEndTime = getBm3EndTimeOrFallbackValue(interaction);
91
98
  return getPageVisibilityState(start, bm3EndTimeOrInteractionEndTime);
92
99
  }
93
- function getVisibilityStateFromPerformance(stop) {
94
- try {
95
- var results = performance.getEntriesByType('visibility-state');
96
- if (!results || results.length === 0) {
97
- return null;
98
- }
99
- return results.reduce(function () {
100
- var acc = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
101
- var _ref = arguments.length > 1 ? arguments[1] : undefined,
102
- name = _ref.name,
103
- startTime = _ref.startTime;
104
- if (startTime > stop) {
105
- return acc;
106
- }
107
- if (acc === null && name === null) {
108
- return null;
109
- }
110
- if (acc === null) {
111
- return name;
112
- }
113
- if (acc !== name) {
114
- return 'mixed';
115
- }
116
- return acc;
117
- }, null);
118
- } catch (e) {
119
- return null;
120
- }
121
- }
122
100
  function getMoreAccuratePageVisibilityUpToTTI(interaction) {
123
101
  var old = getPageVisibilityUpToTTI(interaction);
124
102
  var tti = getEarliestLegacyStopTime(interaction, []);
@@ -134,17 +112,6 @@ function getMoreAccuratePageVisibilityUpToTTI(interaction) {
134
112
  }
135
113
  return old;
136
114
  }
137
- export function getMoreAccuratePageVisibilityUpToTTAI(interaction) {
138
- var old = getPageVisibilityUpToTTAI(interaction);
139
- var buffered = getVisibilityStateFromPerformance(interaction.end);
140
- if (!buffered) {
141
- return old;
142
- }
143
- if (buffered !== old) {
144
- return 'mixed';
145
- }
146
- return old;
147
- }
148
115
  function getResourceTimings(start, end) {
149
116
  var _resourceTiming$getRe;
150
117
  return (_resourceTiming$getRe = resourceTiming.getResourceTimings(start, end)) !== null && _resourceTiming$getRe !== void 0 ? _resourceTiming$getRe : undefined;
@@ -247,10 +214,10 @@ function optimizeCustomData(interaction) {
247
214
  var customData = interaction.customData,
248
215
  cohortingCustomData = interaction.cohortingCustomData,
249
216
  legacyMetrics = interaction.legacyMetrics;
250
- var customDataMap = customData.reduce(function (result, _ref2) {
217
+ var customDataMap = customData.reduce(function (result, _ref) {
251
218
  var _result$get$data, _result$get;
252
- var labelStack = _ref2.labelStack,
253
- data = _ref2.data;
219
+ var labelStack = _ref.labelStack,
220
+ data = _ref.data;
254
221
  var label = stringifyLabelStackFully(labelStack);
255
222
  var value = (_result$get$data = (_result$get = result.get(label)) === null || _result$get === void 0 ? void 0 : _result$get.data) !== null && _result$get$data !== void 0 ? _result$get$data : {};
256
223
  result.set(label, {
@@ -292,48 +259,6 @@ function optimizeCustomData(interaction) {
292
259
  }
293
260
  return _toConsumableArray(customDataMap.values());
294
261
  }
295
- function optimizeReactProfilerTimings(reactProfilerTimings, interactionStart, reactUFOVersion) {
296
- var reactProfilerTimingsMap = reactProfilerTimings.reduce(function (result, _ref3) {
297
- var labelStack = _ref3.labelStack,
298
- startTime = _ref3.startTime,
299
- commitTime = _ref3.commitTime,
300
- actualDuration = _ref3.actualDuration,
301
- type = _ref3.type;
302
- if (labelStack && startTime >= interactionStart) {
303
- var label = stringifyLabelStackFully(labelStack);
304
- var start = Math.round(startTime);
305
- var end = Math.round(commitTime);
306
- var timing = result.get(label) || {
307
- labelStack: optimizeLabelStack(labelStack, reactUFOVersion),
308
- startTime: start,
309
- endTime: end,
310
- mountCount: 0,
311
- rerenderCount: 0,
312
- renderDuration: 0
313
- };
314
- if (start < timing.startTime) {
315
- timing.startTime = start;
316
- }
317
- if (end > timing.endTime) {
318
- timing.endTime = end;
319
- }
320
- if (type === 'mount') {
321
- timing.mountCount += 1;
322
- }
323
- if (type === 'update') {
324
- timing.rerenderCount += 1;
325
- }
326
- if (segmentUnmountCache.has(label) && fg('platform_ufo_segment_unmount_count')) {
327
- timing.unmountCount = segmentUnmountCache.get(label) || 0;
328
- segmentUnmountCache.delete(label);
329
- }
330
- timing.renderDuration += Math.round(actualDuration);
331
- result.set(label, timing);
332
- }
333
- return result;
334
- }, new Map());
335
- return _toConsumableArray(reactProfilerTimingsMap.values());
336
- }
337
262
  function optimizeRedirects(redirects, interactionStart) {
338
263
  var lastRedirectTime = interactionStart;
339
264
  var updatedRedirects = redirects.sort(function (a, b) {
@@ -355,121 +280,6 @@ function optimizeRedirects(redirects, interactionStart) {
355
280
  }, []);
356
281
  return updatedRedirects;
357
282
  }
358
- export function optimizeHoldInfo(holdInfo, interactionStart, reactUFOVersion) {
359
- var holdInfoMap = holdInfo.reduce(function (result, hold) {
360
- var labelStack = hold.labelStack,
361
- name = hold.name,
362
- start = hold.start,
363
- end = hold.end,
364
- ignoreOnSubmit = hold.ignoreOnSubmit;
365
- if (labelStack && !ignoreOnSubmit && start >= interactionStart) {
366
- var label = stringifyLabelStackFully([].concat(_toConsumableArray(labelStack), [{
367
- name: name
368
- }]));
369
- var startTime = Math.round(start);
370
- var endTime = Math.round(end);
371
- var timing = result.get(label) || {
372
- labelStack: optimizeLabelStack([].concat(_toConsumableArray(labelStack), [{
373
- name: name
374
- }]), reactUFOVersion),
375
- startTime: startTime,
376
- endTime: endTime
377
- };
378
- if (startTime < timing.startTime) {
379
- timing.startTime = startTime;
380
- }
381
- if (endTime > timing.endTime) {
382
- timing.endTime = endTime;
383
- }
384
- result.set(label, timing);
385
- }
386
- return result;
387
- }, new Map());
388
- return _toConsumableArray(holdInfoMap.values());
389
- }
390
- function optimizeSpans(spans, interactionStart, reactUFOVersion) {
391
- var updatedSpans = spans.reduce(function (result, span) {
392
- var labelStack = span.labelStack,
393
- type = span.type,
394
- name = span.name,
395
- start = span.start,
396
- end = span.end;
397
- if (labelStack && start >= interactionStart) {
398
- result.push({
399
- labelStack: optimizeLabelStack([].concat(_toConsumableArray(labelStack), [{
400
- name: name
401
- }]), reactUFOVersion),
402
- startTime: Math.round(start),
403
- endTime: Math.round(end),
404
- type: type
405
- });
406
- }
407
- return result;
408
- }, []);
409
- return updatedSpans;
410
- }
411
- function optimizeRequestInfo(requestInfo, interactionStart, reactUFOVersion) {
412
- var updatedRequestInfo = requestInfo.reduce(function (result, reqInfo) {
413
- var labelStack = reqInfo.labelStack,
414
- name = reqInfo.name,
415
- start = reqInfo.start,
416
- end = reqInfo.end,
417
- networkStart = reqInfo.networkStart,
418
- networkComplete = reqInfo.networkComplete;
419
- var startTime = networkStart !== null && networkStart !== void 0 ? networkStart : start;
420
- var endTime = networkComplete !== null && networkComplete !== void 0 ? networkComplete : end;
421
- if (labelStack && start >= interactionStart && endTime) {
422
- result.push({
423
- labelStack: optimizeLabelStack([].concat(_toConsumableArray(labelStack), [{
424
- name: name
425
- }]), reactUFOVersion),
426
- startTime: Math.round(startTime),
427
- endTime: Math.round(endTime)
428
- });
429
- }
430
- return result;
431
- }, []);
432
- return updatedRequestInfo;
433
- }
434
- function optimizeCustomTimings(customTimings, interactionStart) {
435
- return customTimings.reduce(function (result, item) {
436
- Object.keys(item.data).forEach(function (key) {
437
- if (item.data[key].startTime >= interactionStart) {
438
- result.push({
439
- labelStack: [{
440
- n: key
441
- }],
442
- startTime: Math.round(item.data[key].startTime),
443
- endTime: Math.round(item.data[key].endTime)
444
- });
445
- }
446
- });
447
- return result;
448
- }, []);
449
- }
450
- function optimizeMarks(marks, reactUFOVersion) {
451
- return marks.map(function (_ref4) {
452
- var labelStack = _ref4.labelStack,
453
- time = _ref4.time,
454
- others = _objectWithoutProperties(_ref4, _excluded);
455
- return _objectSpread(_objectSpread({}, others), {}, {
456
- labelStack: labelStack && optimizeLabelStack(labelStack, reactUFOVersion),
457
- time: Math.round(time)
458
- });
459
- });
460
- }
461
- function optimizeApdex(apdex, reactUFOVersion) {
462
- return apdex.map(function (_ref5) {
463
- var stopTime = _ref5.stopTime,
464
- labelStack = _ref5.labelStack,
465
- others = _objectWithoutProperties(_ref5, _excluded2);
466
- return _objectSpread(_objectSpread({}, others), {}, {
467
- stopTime: Math.round(stopTime)
468
- }, labelStack ? {
469
- labelStack: optimizeLabelStack(labelStack, reactUFOVersion)
470
- } : {});
471
- });
472
- }
473
283
  function objectToArray() {
474
284
  var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
475
285
  return Object.keys(obj).reduce(function (result, key) {
@@ -643,9 +453,9 @@ function _createInteractionMetricsPayload() {
643
453
  var spans = [].concat(_toConsumableArray(interaction.spans), _toConsumableArray(atlaskitInteractionSpans));
644
454
  atlaskitInteractionSpans.length = 0;
645
455
  return {
646
- errors: interaction.errors.map(function (_ref6) {
647
- var labelStack = _ref6.labelStack,
648
- others = _objectWithoutProperties(_ref6, _excluded3);
456
+ errors: interaction.errors.map(function (_ref2) {
457
+ var labelStack = _ref2.labelStack,
458
+ others = _objectWithoutProperties(_ref2, _excluded);
649
459
  return _objectSpread(_objectSpread({}, others), {}, {
650
460
  labelStack: labelStack && optimizeLabelStack(labelStack, getReactUFOPayloadVersion(interaction.type))
651
461
  });
@@ -0,0 +1,13 @@
1
+ import getPageVisibilityUpToTTAI from './get-page-visibility-up-to-ttai';
2
+ import { getVisibilityStateFromPerformance } from './get-visibility-state-from-performance';
3
+ export function getMoreAccuratePageVisibilityUpToTTAI(interaction) {
4
+ var old = getPageVisibilityUpToTTAI(interaction);
5
+ var buffered = getVisibilityStateFromPerformance(interaction.end);
6
+ if (!buffered) {
7
+ return old;
8
+ }
9
+ if (buffered !== old) {
10
+ return 'mixed';
11
+ }
12
+ return old;
13
+ }
@@ -0,0 +1,29 @@
1
+ export function getVisibilityStateFromPerformance(stop) {
2
+ try {
3
+ var results = performance.getEntriesByType('visibility-state');
4
+ if (!results || results.length === 0) {
5
+ return null;
6
+ }
7
+ return results.reduce(function () {
8
+ var acc = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
9
+ var _ref = arguments.length > 1 ? arguments[1] : undefined,
10
+ name = _ref.name,
11
+ startTime = _ref.startTime;
12
+ if (startTime > stop) {
13
+ return acc;
14
+ }
15
+ if (acc === null && name === null) {
16
+ return null;
17
+ }
18
+ if (acc === null) {
19
+ return name;
20
+ }
21
+ if (acc !== name) {
22
+ return 'mixed';
23
+ }
24
+ return acc;
25
+ }, null);
26
+ } catch (e) {
27
+ return null;
28
+ }
29
+ }
@@ -0,0 +1,18 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
3
+ var _excluded = ["stopTime", "labelStack"];
4
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
5
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
6
+ import { optimizeLabelStack } from '../common/utils';
7
+ export function optimizeApdex(apdex, reactUFOVersion) {
8
+ return apdex.map(function (_ref) {
9
+ var stopTime = _ref.stopTime,
10
+ labelStack = _ref.labelStack,
11
+ others = _objectWithoutProperties(_ref, _excluded);
12
+ return _objectSpread(_objectSpread({}, others), {}, {
13
+ stopTime: Math.round(stopTime)
14
+ }, labelStack ? {
15
+ labelStack: optimizeLabelStack(labelStack, reactUFOVersion)
16
+ } : {});
17
+ });
18
+ }
@@ -0,0 +1,16 @@
1
+ export function optimizeCustomTimings(customTimings, interactionStart) {
2
+ return customTimings.reduce(function (result, item) {
3
+ Object.keys(item.data).forEach(function (key) {
4
+ if (item.data[key].startTime >= interactionStart) {
5
+ result.push({
6
+ labelStack: [{
7
+ n: key
8
+ }],
9
+ startTime: Math.round(item.data[key].startTime),
10
+ endTime: Math.round(item.data[key].endTime)
11
+ });
12
+ }
13
+ });
14
+ return result;
15
+ }, []);
16
+ }
@@ -0,0 +1,34 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
+ import { optimizeLabelStack, stringifyLabelStackFully } from '../common/utils';
3
+ export function optimizeHoldInfo(holdInfo, interactionStart, reactUFOVersion) {
4
+ var holdInfoMap = holdInfo.reduce(function (result, hold) {
5
+ var labelStack = hold.labelStack,
6
+ name = hold.name,
7
+ start = hold.start,
8
+ end = hold.end,
9
+ ignoreOnSubmit = hold.ignoreOnSubmit;
10
+ if (labelStack && !ignoreOnSubmit && start >= interactionStart) {
11
+ var label = stringifyLabelStackFully([].concat(_toConsumableArray(labelStack), [{
12
+ name: name
13
+ }]));
14
+ var startTime = Math.round(start);
15
+ var endTime = Math.round(end);
16
+ var timing = result.get(label) || {
17
+ labelStack: optimizeLabelStack([].concat(_toConsumableArray(labelStack), [{
18
+ name: name
19
+ }]), reactUFOVersion),
20
+ startTime: startTime,
21
+ endTime: endTime
22
+ };
23
+ if (startTime < timing.startTime) {
24
+ timing.startTime = startTime;
25
+ }
26
+ if (endTime > timing.endTime) {
27
+ timing.endTime = endTime;
28
+ }
29
+ result.set(label, timing);
30
+ }
31
+ return result;
32
+ }, new Map());
33
+ return _toConsumableArray(holdInfoMap.values());
34
+ }
@@ -0,0 +1,17 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
3
+ var _excluded = ["labelStack", "time"];
4
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
5
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
6
+ import { optimizeLabelStack } from '../common/utils';
7
+ export function optimizeMarks(marks, reactUFOVersion) {
8
+ return marks.map(function (_ref) {
9
+ var labelStack = _ref.labelStack,
10
+ time = _ref.time,
11
+ others = _objectWithoutProperties(_ref, _excluded);
12
+ return _objectSpread(_objectSpread({}, others), {}, {
13
+ labelStack: labelStack && optimizeLabelStack(labelStack, reactUFOVersion),
14
+ time: Math.round(time)
15
+ });
16
+ });
17
+ }
@@ -0,0 +1,46 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
+ import { fg } from '@atlaskit/platform-feature-flags';
3
+ import { segmentUnmountCache } from '../../interaction-metrics';
4
+ import { optimizeLabelStack, stringifyLabelStackFully } from '../common/utils';
5
+ export function optimizeReactProfilerTimings(reactProfilerTimings, interactionStart, reactUFOVersion) {
6
+ var reactProfilerTimingsMap = reactProfilerTimings.reduce(function (result, _ref) {
7
+ var labelStack = _ref.labelStack,
8
+ startTime = _ref.startTime,
9
+ commitTime = _ref.commitTime,
10
+ actualDuration = _ref.actualDuration,
11
+ type = _ref.type;
12
+ if (labelStack && startTime >= interactionStart) {
13
+ var label = stringifyLabelStackFully(labelStack);
14
+ var start = Math.round(startTime);
15
+ var end = Math.round(commitTime);
16
+ var timing = result.get(label) || {
17
+ labelStack: optimizeLabelStack(labelStack, reactUFOVersion),
18
+ startTime: start,
19
+ endTime: end,
20
+ mountCount: 0,
21
+ rerenderCount: 0,
22
+ renderDuration: 0
23
+ };
24
+ if (start < timing.startTime) {
25
+ timing.startTime = start;
26
+ }
27
+ if (end > timing.endTime) {
28
+ timing.endTime = end;
29
+ }
30
+ if (type === 'mount') {
31
+ timing.mountCount += 1;
32
+ }
33
+ if (type === 'update') {
34
+ timing.rerenderCount += 1;
35
+ }
36
+ if (segmentUnmountCache.has(label) && fg('platform_ufo_segment_unmount_count')) {
37
+ timing.unmountCount = segmentUnmountCache.get(label) || 0;
38
+ segmentUnmountCache.delete(label);
39
+ }
40
+ timing.renderDuration += Math.round(actualDuration);
41
+ result.set(label, timing);
42
+ }
43
+ return result;
44
+ }, new Map());
45
+ return _toConsumableArray(reactProfilerTimingsMap.values());
46
+ }
@@ -0,0 +1,25 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
+ import { optimizeLabelStack } from '../common/utils';
3
+ export function optimizeRequestInfo(requestInfo, interactionStart, reactUFOVersion) {
4
+ var updatedRequestInfo = requestInfo.reduce(function (result, reqInfo) {
5
+ var labelStack = reqInfo.labelStack,
6
+ name = reqInfo.name,
7
+ start = reqInfo.start,
8
+ end = reqInfo.end,
9
+ networkStart = reqInfo.networkStart,
10
+ networkComplete = reqInfo.networkComplete;
11
+ var startTime = networkStart !== null && networkStart !== void 0 ? networkStart : start;
12
+ var endTime = networkComplete !== null && networkComplete !== void 0 ? networkComplete : end;
13
+ if (labelStack && start >= interactionStart && endTime) {
14
+ result.push({
15
+ labelStack: optimizeLabelStack([].concat(_toConsumableArray(labelStack), [{
16
+ name: name
17
+ }]), reactUFOVersion),
18
+ startTime: Math.round(startTime),
19
+ endTime: Math.round(endTime)
20
+ });
21
+ }
22
+ return result;
23
+ }, []);
24
+ return updatedRequestInfo;
25
+ }