@atlaskit/react-ufo 2.5.2 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/create-experimental-interaction-metrics-payload/package.json +15 -0
  3. package/dist/cjs/config/index.js +40 -18
  4. package/dist/cjs/create-experimental-interaction-metrics-payload/index.js +100 -0
  5. package/dist/cjs/create-payload/common/utils/index.js +65 -2
  6. package/dist/cjs/create-payload/index.js +55 -78
  7. package/dist/cjs/interaction-metrics/common/constants.js +8 -3
  8. package/dist/cjs/interaction-metrics/common/index.js +151 -0
  9. package/dist/cjs/interaction-metrics/index.js +166 -238
  10. package/dist/cjs/interaction-metrics-init/index.js +31 -9
  11. package/dist/cjs/load-hold/UFOLoadHold.js +5 -3
  12. package/dist/cjs/segment/segment.js +9 -8
  13. package/dist/cjs/vc/vc-observer/observers/ssr-placeholders/index.js +21 -4
  14. package/dist/es2019/config/index.js +22 -0
  15. package/dist/es2019/create-experimental-interaction-metrics-payload/index.js +71 -0
  16. package/dist/es2019/create-payload/common/utils/index.js +67 -1
  17. package/dist/es2019/create-payload/index.js +48 -77
  18. package/dist/es2019/interaction-metrics/common/constants.js +7 -2
  19. package/dist/es2019/interaction-metrics/common/index.js +103 -0
  20. package/dist/es2019/interaction-metrics/index.js +91 -131
  21. package/dist/es2019/interaction-metrics-init/index.js +28 -8
  22. package/dist/es2019/load-hold/UFOLoadHold.js +5 -3
  23. package/dist/es2019/segment/segment.js +8 -11
  24. package/dist/es2019/vc/vc-observer/observers/ssr-placeholders/index.js +21 -4
  25. package/dist/esm/config/index.js +39 -18
  26. package/dist/esm/create-experimental-interaction-metrics-payload/index.js +90 -0
  27. package/dist/esm/create-payload/common/utils/index.js +62 -1
  28. package/dist/esm/create-payload/index.js +53 -78
  29. package/dist/esm/interaction-metrics/common/constants.js +7 -2
  30. package/dist/esm/interaction-metrics/common/index.js +132 -0
  31. package/dist/esm/interaction-metrics/index.js +86 -158
  32. package/dist/esm/interaction-metrics-init/index.js +28 -8
  33. package/dist/esm/load-hold/UFOLoadHold.js +5 -3
  34. package/dist/esm/segment/segment.js +9 -8
  35. package/dist/esm/vc/vc-observer/observers/ssr-placeholders/index.js +21 -4
  36. package/dist/types/common/common/types.d.ts +6 -4
  37. package/dist/types/config/index.d.ts +6 -0
  38. package/dist/types/create-experimental-interaction-metrics-payload/index.d.ts +16 -0
  39. package/dist/types/create-payload/common/utils/index.d.ts +9 -0
  40. package/dist/types/create-payload/index.d.ts +13 -5660
  41. package/dist/types/interaction-context/index.d.ts +1 -0
  42. package/dist/types/interaction-metrics/common/constants.d.ts +32 -3
  43. package/dist/types/interaction-metrics/common/index.d.ts +16 -0
  44. package/dist/types/interaction-metrics/index.d.ts +1 -17
  45. package/dist/types/load-hold/UFOLoadHold.d.ts +1 -2
  46. package/dist/types-ts4.5/common/common/types.d.ts +6 -4
  47. package/dist/types-ts4.5/config/index.d.ts +6 -0
  48. package/dist/types-ts4.5/create-experimental-interaction-metrics-payload/index.d.ts +16 -0
  49. package/dist/types-ts4.5/create-payload/common/utils/index.d.ts +9 -0
  50. package/dist/types-ts4.5/create-payload/index.d.ts +13 -5660
  51. package/dist/types-ts4.5/interaction-context/index.d.ts +1 -0
  52. package/dist/types-ts4.5/interaction-metrics/common/constants.d.ts +32 -3
  53. package/dist/types-ts4.5/interaction-metrics/common/index.d.ts +16 -0
  54. package/dist/types-ts4.5/interaction-metrics/index.d.ts +1 -17
  55. package/dist/types-ts4.5/load-hold/UFOLoadHold.d.ts +1 -2
  56. package/package.json +6 -2
@@ -64,13 +64,34 @@ export function getInteractionRate(name, interactionKind) {
64
64
  return 0;
65
65
  }
66
66
  }
67
- export function getPostInteractionRate(name, interactionType) {
67
+ export function getExperimentalInteractionRate(name, interactionType) {
68
68
  try {
69
69
  if (!config) {
70
70
  return 0;
71
71
  }
72
72
  var _config2 = config,
73
- postInteractionLog = _config2.postInteractionLog;
73
+ experimentalInteractionMetrics = _config2.experimentalInteractionMetrics;
74
+ if (!(experimentalInteractionMetrics !== null && experimentalInteractionMetrics !== void 0 && experimentalInteractionMetrics.enabled)) {
75
+ return 0;
76
+ }
77
+ if (experimentalInteractionMetrics.rates && typeof experimentalInteractionMetrics.rates[name] === 'number') {
78
+ return experimentalInteractionMetrics.rates[name];
79
+ }
80
+ if (experimentalInteractionMetrics.kind && typeof experimentalInteractionMetrics.kind[interactionType] === 'number') {
81
+ return experimentalInteractionMetrics.kind[interactionType];
82
+ }
83
+ return 0;
84
+ } catch (e) {
85
+ return 0;
86
+ }
87
+ }
88
+ export function getPostInteractionRate(name, interactionType) {
89
+ try {
90
+ if (!config) {
91
+ return 0;
92
+ }
93
+ var _config3 = config,
94
+ postInteractionLog = _config3.postInteractionLog;
74
95
  if (!(postInteractionLog !== null && postInteractionLog !== void 0 && postInteractionLog.enabled)) {
75
96
  return 0;
76
97
  }
@@ -90,8 +111,8 @@ export function getCapabilityRate(capability) {
90
111
  if (!config) {
91
112
  return 0;
92
113
  }
93
- var _config3 = config,
94
- capabilityRate = _config3.capability;
114
+ var _config4 = config,
115
+ capabilityRate = _config4.capability;
95
116
  if (capabilityRate != null) {
96
117
  var rate = capabilityRate[capability];
97
118
  if (rate != null) {
@@ -110,8 +131,8 @@ export function getTypingPerformanceTracingMethod() {
110
131
  if (!config) {
111
132
  return defaultMethod;
112
133
  }
113
- var _config4 = config,
114
- typingMethod = _config4.typingMethod;
134
+ var _config5 = config,
135
+ typingMethod = _config5.typingMethod;
115
136
  if (typingMethod != null && validTypingMethods.find(function (m) {
116
137
  return m === typingMethod;
117
138
  })) {
@@ -130,8 +151,8 @@ export function getAwaitBM3TTIList() {
130
151
  if (!config) {
131
152
  return [];
132
153
  }
133
- var _config5 = config,
134
- awaitBM3TTI = _config5.awaitBM3TTI;
154
+ var _config6 = config,
155
+ awaitBM3TTI = _config6.awaitBM3TTI;
135
156
  if (awaitBM3TTI != null) {
136
157
  return awaitBM3TTI;
137
158
  } else {
@@ -148,8 +169,8 @@ export function getRemovePageSegmentsUFOPrefixes() {
148
169
  if (!config) {
149
170
  return false;
150
171
  }
151
- var _config6 = config,
152
- removePageSegmentsUFOPrefixes = _config6.removePageSegmentsUFOPrefixes;
172
+ var _config7 = config,
173
+ removePageSegmentsUFOPrefixes = _config7.removePageSegmentsUFOPrefixes;
153
174
  if (removePageSegmentsUFOPrefixes != null) {
154
175
  return removePageSegmentsUFOPrefixes;
155
176
  } else {
@@ -166,8 +187,8 @@ export function getRemoveInteractionsUFOPrefixes() {
166
187
  if (!config) {
167
188
  return false;
168
189
  }
169
- var _config7 = config,
170
- removeInteractionsUFOPrefixes = _config7.removeInteractionsUFOPrefixes;
190
+ var _config8 = config,
191
+ removeInteractionsUFOPrefixes = _config8.removeInteractionsUFOPrefixes;
171
192
  if (removeInteractionsUFOPrefixes != null) {
172
193
  return removeInteractionsUFOPrefixes;
173
194
  } else {
@@ -187,8 +208,8 @@ export function getUfoNameOverrides() {
187
208
  if (!config) {
188
209
  return undefined;
189
210
  }
190
- var _config8 = config,
191
- ufoNameOverrides = _config8.ufoNameOverrides;
211
+ var _config9 = config,
212
+ ufoNameOverrides = _config9.ufoNameOverrides;
192
213
  if (ufoNameOverrides != null) {
193
214
  return ufoNameOverrides;
194
215
  }
@@ -204,8 +225,8 @@ export function getDoNotAbortActivePressInteraction() {
204
225
  if (!config) {
205
226
  return undefined;
206
227
  }
207
- var _config9 = config,
208
- doNotAbortActivePressInteraction = _config9.doNotAbortActivePressInteraction;
228
+ var _config10 = config,
229
+ doNotAbortActivePressInteraction = _config10.doNotAbortActivePressInteraction;
209
230
  return doNotAbortActivePressInteraction;
210
231
  } catch (e) {
211
232
  return undefined;
@@ -218,8 +239,8 @@ export function getDoNotAbortActivePressInteractionOnTransition() {
218
239
  if (!config) {
219
240
  return undefined;
220
241
  }
221
- var _config10 = config,
222
- doNotAbortActivePressInteractionOnTransition = _config10.doNotAbortActivePressInteractionOnTransition;
242
+ var _config11 = config,
243
+ doNotAbortActivePressInteractionOnTransition = _config11.doNotAbortActivePressInteractionOnTransition;
223
244
  return doNotAbortActivePressInteractionOnTransition;
224
245
  } catch (e) {
225
246
  return undefined;
@@ -0,0 +1,90 @@
1
+ import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
2
+ import _createClass from "@babel/runtime/helpers/createClass";
3
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
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
+ 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 { calculateVCMetrics } from '../create-payload/common/utils';
10
+ import { VCObserver } from '../vc/vc-observer';
11
+ var interactionBuffer = [];
12
+ var bufferInteractionData = function bufferInteractionData(interactionId, data) {
13
+ interactionBuffer.push({
14
+ interactionId: interactionId,
15
+ data: data
16
+ });
17
+ };
18
+ function clearInteractionBuffer() {
19
+ interactionBuffer.length = 0;
20
+ }
21
+ function appendInteractionData(interactionId, data) {
22
+ bufferInteractionData(interactionId, data);
23
+ }
24
+ export function installInteractionSink(handler) {
25
+ var _iterator = _createForOfIteratorHelper(interactionBuffer),
26
+ _step;
27
+ try {
28
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
29
+ var _step$value = _step.value,
30
+ _interactionId = _step$value.interactionId,
31
+ data = _step$value.data;
32
+ handler(_interactionId, data);
33
+ }
34
+ } catch (err) {
35
+ _iterator.e(err);
36
+ } finally {
37
+ _iterator.f();
38
+ }
39
+ clearInteractionBuffer();
40
+ bufferInteractionData = handler;
41
+ }
42
+ export function sinkExperimentalHandler(sinkFn) {
43
+ installInteractionSink(sinkFn);
44
+ }
45
+ export function onExperimentalInteractionComplete(interactionId, data) {
46
+ var endTime = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : performance.now();
47
+ if (data.ufoName) {
48
+ data.end = endTime;
49
+ appendInteractionData(interactionId, data);
50
+ clearInteractionBuffer();
51
+ }
52
+ }
53
+ export var ExperimentalVCMetrics = /*#__PURE__*/function () {
54
+ function ExperimentalVCMetrics() {
55
+ _classCallCheck(this, ExperimentalVCMetrics);
56
+ _defineProperty(this, "vcObserver", null);
57
+ }
58
+ return _createClass(ExperimentalVCMetrics, [{
59
+ key: "initialize",
60
+ value: function initialize(options) {
61
+ if (this.vcObserver === null) {
62
+ this.vcObserver = new VCObserver(_objectSpread(_objectSpread({}, options), {}, {
63
+ isPostInteraction: true
64
+ }));
65
+ }
66
+ return this;
67
+ }
68
+ }, {
69
+ key: "start",
70
+ value: function start(_ref) {
71
+ var _this$vcObserver;
72
+ var startTime = _ref.startTime;
73
+ (_this$vcObserver = this.vcObserver) === null || _this$vcObserver === void 0 || _this$vcObserver.start({
74
+ startTime: startTime
75
+ });
76
+ }
77
+ }]);
78
+ }();
79
+ export var experimentalVC = new ExperimentalVCMetrics();
80
+ export var getExperimentalVCMetrics = function getExperimentalVCMetrics(interaction) {
81
+ if (experimentalVC.vcObserver) {
82
+ var _result$metricsVc;
83
+ var result = calculateVCMetrics(interaction, 'ufo-experimental', experimentalVC.vcObserver.getVCResult);
84
+ experimentalVC.vcObserver.stop();
85
+ return _objectSpread(_objectSpread({}, result), {}, {
86
+ 'metric:experimental:vc90': result === null || result === void 0 || (_result$metricsVc = result['metrics:vc']) === null || _result$metricsVc === void 0 ? void 0 : _result$metricsVc['90']
87
+ });
88
+ }
89
+ return null;
90
+ };
@@ -2,7 +2,14 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
2
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
3
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
4
  /* eslint-disable @typescript-eslint/no-non-null-asserted-optional-chain */
5
+
5
6
  import { REACT_UFO_VERSION } from '../../../common/constants';
7
+ import { getConfig } from '../../../config';
8
+ import { getPageVisibilityState } from '../../../hidden-timing';
9
+ import PostInteractionLog from '../../../interaction-metrics/post-interaction-log';
10
+ import { getSSRDoneTime } from '../../../ssr';
11
+ import { getVCObserver } from '../../../vc';
12
+ export var postInteractionLog = new PostInteractionLog();
6
13
  export var sanitizeUfoName = function sanitizeUfoName(name) {
7
14
  return name.replace(/_/g, '-');
8
15
  };
@@ -59,4 +66,58 @@ export function optimizeLabelStack(labelStack) {
59
66
  s: ls.segmentId
60
67
  } : {});
61
68
  });
62
- }
69
+ }
70
+ export var getPageVisibilityUpToTTAI = function getPageVisibilityUpToTTAI(interaction) {
71
+ var start = interaction.start,
72
+ end = interaction.end;
73
+ return getPageVisibilityState(start, end);
74
+ };
75
+ export var calculateVCMetrics = function calculateVCMetrics(interaction, prefix, getVCResultFn) {
76
+ var _interaction$apdex;
77
+ var result = getVCResultFn({
78
+ start: interaction.start,
79
+ stop: interaction.end,
80
+ tti: (_interaction$apdex = interaction.apdex) === null || _interaction$apdex === void 0 || (_interaction$apdex = _interaction$apdex[0]) === null || _interaction$apdex === void 0 ? void 0 : _interaction$apdex.stopTime,
81
+ prefix: prefix,
82
+ vc: interaction.vc
83
+ });
84
+ var VC = result === null || result === void 0 ? void 0 : result['metrics:vc'];
85
+ if (!VC || !(result !== null && result !== void 0 && result["".concat(prefix, ":vc:clean")])) {
86
+ return result;
87
+ }
88
+ var pageVisibilityUpToTTAI = getPageVisibilityUpToTTAI(interaction);
89
+ if (interaction.abortReason || pageVisibilityUpToTTAI !== 'visible') {
90
+ return result;
91
+ }
92
+ return result;
93
+ };
94
+ export function getSSRDoneTimeValue(config) {
95
+ var _config$ssr, _config$ssr2;
96
+ return config !== null && config !== void 0 && (_config$ssr = config.ssr) !== null && _config$ssr !== void 0 && _config$ssr.getSSRDoneTime ? config === null || config === void 0 || (_config$ssr2 = config.ssr) === null || _config$ssr2 === void 0 ? void 0 : _config$ssr2.getSSRDoneTime() : getSSRDoneTime();
97
+ }
98
+ export var getVCMetrics = function getVCMetrics(interaction) {
99
+ var _config$vc, _result$metricsVc;
100
+ var config = getConfig();
101
+ if (!(config !== null && config !== void 0 && (_config$vc = config.vc) !== null && _config$vc !== void 0 && _config$vc.enabled)) {
102
+ return {};
103
+ }
104
+ if (interaction.type !== 'page_load' && interaction.type !== 'transition') {
105
+ return {};
106
+ }
107
+ var ssr = interaction.type === 'page_load' && config !== null && config !== void 0 && config.ssr ? {
108
+ ssr: getSSRDoneTimeValue(config)
109
+ } : null;
110
+ postInteractionLog.setVCObserverSSRConfig(ssr);
111
+ var result = calculateVCMetrics(interaction, 'ufo', getVCObserver().getVCResult);
112
+ getVCObserver().stop();
113
+ postInteractionLog.setLastInteractionFinishVCResult(result);
114
+ return _objectSpread(_objectSpread({}, result), {}, {
115
+ 'metric:vc90': result === null || result === void 0 || (_result$metricsVc = result['metrics:vc']) === null || _result$metricsVc === void 0 ? void 0 : _result$metricsVc['90']
116
+ });
117
+ };
118
+ export var getTTAI = function getTTAI(interaction) {
119
+ var start = interaction.start,
120
+ end = interaction.end;
121
+ var pageVisibilityUpToTTAI = getPageVisibilityUpToTTAI(interaction);
122
+ return !interaction.abortReason && pageVisibilityUpToTTAI === 'visible' ? Math.round(end - start) : undefined;
123
+ };
@@ -12,19 +12,20 @@ import Bowser from 'bowser-ultralight';
12
12
  import { fg } from '@atlaskit/platform-feature-flags';
13
13
  import { getLighthouseMetrics } from '../additional-payload';
14
14
  import * as bundleEvalTiming from '../bundle-eval-timing';
15
+ import coinflip from '../coinflip';
15
16
  import { REACT_UFO_VERSION } from '../common/constants';
16
- import { getConfig, getUfoNameOverrides } from '../config';
17
+ import { getConfig, getExperimentalInteractionRate, getUfoNameOverrides } from '../config';
18
+ import { getExperimentalVCMetrics } from '../create-experimental-interaction-metrics-payload';
17
19
  import { getBm3Timings } from '../custom-timings';
18
20
  import { getGlobalErrorCount } from '../global-error-handler';
19
21
  import { getPageVisibilityState } from '../hidden-timing';
20
22
  import * as initialPageLoadExtraTiming from '../initial-page-load-extra-timing';
21
- import { interactionSpans as atlaskitInteractionSpans, postInteractionLog } from '../interaction-metrics';
23
+ import { interactionSpans as atlaskitInteractionSpans } from '../interaction-metrics';
22
24
  import * as resourceTiming from '../resource-timing';
23
25
  import { roundEpsilon } from '../round-number';
24
26
  import * as ssr from '../ssr';
25
- import { getVCObserver } from '../vc';
26
- import { buildSegmentTree, labelStackStartWith, optimizeLabelStack, sanitizeUfoName, stringifyLabelStackFully } from './common/utils';
27
- function getUfoNameOverride(interaction) {
27
+ import { buildSegmentTree, getPageVisibilityUpToTTAI, getSSRDoneTimeValue, getTTAI, getVCMetrics, labelStackStartWith, optimizeLabelStack, sanitizeUfoName, stringifyLabelStackFully } from './common/utils';
28
+ export function getUfoNameOverride(interaction) {
28
29
  var ufoName = interaction.ufoName,
29
30
  apdex = interaction.apdex;
30
31
  try {
@@ -36,7 +37,6 @@ function getUfoNameOverride(interaction) {
36
37
  }
37
38
  }
38
39
  return ufoName;
39
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
40
40
  } catch (e) {
41
41
  return ufoName;
42
42
  }
@@ -71,11 +71,6 @@ var getPageVisibilityUpToTTI = function getPageVisibilityUpToTTI(interaction) {
71
71
  var bm3EndTimeOrInteractionEndTime = getBm3EndTimeOrFallbackValue(interaction);
72
72
  return getPageVisibilityState(start, bm3EndTimeOrInteractionEndTime);
73
73
  };
74
- var getPageVisibilityUpToTTAI = function getPageVisibilityUpToTTAI(interaction) {
75
- var start = interaction.start,
76
- end = interaction.end;
77
- return getPageVisibilityState(start, end);
78
- };
79
74
  var getVisibilityStateFromPerformance = function getVisibilityStateFromPerformance(stop) {
80
75
  try {
81
76
  var results = performance.getEntriesByType('visibility-state');
@@ -131,15 +126,6 @@ var getMoreAccuratePageVisibilityUpToTTAI = function getMoreAccuratePageVisibili
131
126
  }
132
127
  return old;
133
128
  };
134
- var getInteractionStatus = function getInteractionStatus(interaction) {
135
- var originalInteractionStatus = interaction.abortReason ? 'ABORTED' : 'SUCCEEDED';
136
- var hasBm3TTI = interaction.apdex.length > 0;
137
- var overrideStatus = hasBm3TTI ? 'SUCCEEDED' : originalInteractionStatus;
138
- return {
139
- originalInteractionStatus: originalInteractionStatus,
140
- overrideStatus: overrideStatus
141
- };
142
- };
143
129
  var getResourceTimings = function getResourceTimings(start, end) {
144
130
  var _resourceTiming$getRe;
145
131
  return (_resourceTiming$getRe = resourceTiming.getResourceTimings(start, end)) !== null && _resourceTiming$getRe !== void 0 ? _resourceTiming$getRe : undefined;
@@ -168,42 +154,6 @@ var getPaintMetrics = function getPaintMetrics(type) {
168
154
  });
169
155
  return metrics;
170
156
  };
171
- var getVCMetrics = function getVCMetrics(interaction) {
172
- var _config$vc, _interaction$apdex;
173
- var config = getConfig();
174
- if (!(config !== null && config !== void 0 && (_config$vc = config.vc) !== null && _config$vc !== void 0 && _config$vc.enabled)) {
175
- return {};
176
- }
177
- if (interaction.type !== 'page_load' && interaction.type !== 'transition') {
178
- return {};
179
- }
180
- var ssr = interaction.type === 'page_load' && config !== null && config !== void 0 && config.ssr ? {
181
- ssr: getSSRDoneTimeValue(config)
182
- } : null;
183
- postInteractionLog.setVCObserverSSRConfig(ssr);
184
- var tti = (_interaction$apdex = interaction.apdex) === null || _interaction$apdex === void 0 || (_interaction$apdex = _interaction$apdex[0]) === null || _interaction$apdex === void 0 ? void 0 : _interaction$apdex.stopTime;
185
- var prefix = 'ufo';
186
- var result = getVCObserver().getVCResult(_objectSpread({
187
- start: interaction.start,
188
- stop: interaction.end,
189
- tti: tti,
190
- prefix: prefix,
191
- vc: interaction.vc
192
- }, ssr));
193
- postInteractionLog.setLastInteractionFinishVCResult(result);
194
- var VC = result === null || result === void 0 ? void 0 : result['metrics:vc'];
195
- if (!VC || !(result !== null && result !== void 0 && result["".concat(prefix, ":vc:clean")])) {
196
- return result;
197
- }
198
- var interactionStatus = getInteractionStatus(interaction);
199
- var pageVisibilityUpToTTAI = getPageVisibilityUpToTTAI(interaction);
200
- if (interactionStatus.originalInteractionStatus !== 'SUCCEEDED' || pageVisibilityUpToTTAI !== 'visible') {
201
- return result;
202
- }
203
- return _objectSpread(_objectSpread({}, result), {}, {
204
- 'metric:vc90': VC['90']
205
- });
206
- };
207
157
  var getNavigationMetrics = function getNavigationMetrics(type) {
208
158
  if (type !== 'page_load') {
209
159
  return {};
@@ -251,14 +201,13 @@ var getNavigationMetrics = function getNavigationMetrics(type) {
251
201
  };
252
202
  };
253
203
  var getPPSMetrics = function getPPSMetrics(interaction) {
254
- var _interaction$apdex2;
204
+ var _interaction$apdex;
255
205
  var start = interaction.start,
256
206
  end = interaction.end;
257
207
  var config = getConfig();
258
- var interactionStatus = getInteractionStatus(interaction);
259
208
  var pageVisibilityUpToTTAI = getPageVisibilityUpToTTAI(interaction);
260
- var tti = (_interaction$apdex2 = interaction.apdex) === null || _interaction$apdex2 === void 0 || (_interaction$apdex2 = _interaction$apdex2[0]) === null || _interaction$apdex2 === void 0 ? void 0 : _interaction$apdex2.stopTime;
261
- var ttai = interactionStatus.originalInteractionStatus === 'SUCCEEDED' && pageVisibilityUpToTTAI === 'visible' ? Math.round(end - start) : undefined;
209
+ var tti = (_interaction$apdex = interaction.apdex) === null || _interaction$apdex === void 0 || (_interaction$apdex = _interaction$apdex[0]) === null || _interaction$apdex === void 0 ? void 0 : _interaction$apdex.stopTime;
210
+ var ttai = !interaction.abortReason && pageVisibilityUpToTTAI === 'visible' ? Math.round(end - start) : undefined;
262
211
  var PPSMetricsAtTTI = tti !== undefined ? getLighthouseMetrics({
263
212
  start: start,
264
213
  stop: tti
@@ -348,13 +297,13 @@ function optimizeCustomData(interaction) {
348
297
  for (var _i = 0, _Object$entries = Object.entries(currentValue.custom || {}); _i < _Object$entries.length; _i++) {
349
298
  var _result$get$data2, _result$get2;
350
299
  var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
351
- _key = _Object$entries$_i[0],
300
+ key = _Object$entries$_i[0],
352
301
  value = _Object$entries$_i[1];
353
302
  var label = stringifyLabelStackFully([]);
354
303
  var labelValue = (_result$get$data2 = (_result$get2 = result.get(label)) === null || _result$get2 === void 0 ? void 0 : _result$get2.data) !== null && _result$get$data2 !== void 0 ? _result$get$data2 : {};
355
304
  result.set(label, {
356
305
  labelStack: optimizeLabelStack([]),
357
- data: Object.assign(labelValue, _defineProperty({}, _key, value))
306
+ data: Object.assign(labelValue, _defineProperty({}, key, value))
358
307
  });
359
308
  }
360
309
  return result;
@@ -592,10 +541,6 @@ function getBm3TrackerTimings(interaction) {
592
541
  legacyMetrics: legacyMetrics
593
542
  };
594
543
  }
595
- function getSSRDoneTimeValue(config) {
596
- var _config$ssr, _config$ssr2;
597
- return config !== null && config !== void 0 && (_config$ssr = config.ssr) !== null && _config$ssr !== void 0 && _config$ssr.getSSRDoneTime ? config === null || config === void 0 || (_config$ssr2 = config.ssr) === null || _config$ssr2 === void 0 ? void 0 : _config$ssr2.getSSRDoneTime() : ssr.getSSRDoneTime();
598
- }
599
544
  function getPayloadSize(payload) {
600
545
  return Math.round(new TextEncoder().encode(JSON.stringify(payload)).length / 1024);
601
546
  }
@@ -638,13 +583,15 @@ function getStylesheetMetrics() {
638
583
  return {};
639
584
  }
640
585
  }
586
+ var regularTTAI;
587
+ var expTTAI;
641
588
  function getErrorCounts(interaction) {
642
589
  return {
643
590
  'ufo:errors:globalCount': getGlobalErrorCount(),
644
591
  'ufo:errors:count': interaction.errors.length
645
592
  };
646
593
  }
647
- function createInteractionMetricsPayload(interaction, interactionId) {
594
+ function createInteractionMetricsPayload(interaction, interactionId, experimental) {
648
595
  var _window$location, _config$additionalPay;
649
596
  var interactionPayloadStart = performance.now();
650
597
  var config = getConfig();
@@ -679,7 +626,7 @@ function createInteractionMetricsPayload(interaction, interactionId) {
679
626
  } : {};
680
627
  // Page Load
681
628
  var getPageLoadInteractionMetrics = function getPageLoadInteractionMetrics() {
682
- var _config$ssr3;
629
+ var _config$ssr;
683
630
  if (!isPageLoad) {
684
631
  return {};
685
632
  }
@@ -690,12 +637,12 @@ function createInteractionMetricsPayload(interaction, interactionId) {
690
637
  } : {};
691
638
  return _objectSpread(_objectSpread({}, SSRDoneTime), {}, {
692
639
  isBM3ConfigSSRDoneAsFmp: interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp,
693
- isUFOConfigSSRDoneAsFmp: interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp || !!(config !== null && config !== void 0 && (_config$ssr3 = config.ssr) !== null && _config$ssr3 !== void 0 && _config$ssr3.getSSRDoneTime)
640
+ isUFOConfigSSRDoneAsFmp: interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp || !!(config !== null && config !== void 0 && (_config$ssr = config.ssr) !== null && _config$ssr !== void 0 && _config$ssr.getSSRDoneTime)
694
641
  });
695
642
  };
696
643
  // Detailed payload. Page visibility = visible
697
644
  var getDetailedInteractionMetrics = function getDetailedInteractionMetrics() {
698
- if (window.__UFO_COMPACT_PAYLOAD__ || !isDetailedPayload) {
645
+ if (experimental || window.__UFO_COMPACT_PAYLOAD__ || !isDetailedPayload) {
699
646
  return {};
700
647
  }
701
648
  var spans = [].concat(_toConsumableArray(interaction.spans), _toConsumableArray(atlaskitInteractionSpans));
@@ -710,7 +657,7 @@ function createInteractionMetricsPayload(interaction, interactionId) {
710
657
  }),
711
658
  holdActive: _toConsumableArray(interaction.holdActive.values()),
712
659
  redirects: optimizeRedirects(interaction.redirects, start),
713
- holdInfo: optimizeHoldInfo(interaction.holdInfo, start),
660
+ holdInfo: optimizeHoldInfo(experimental ? interaction.holdExpInfo : interaction.holdInfo, start),
714
661
  spans: optimizeSpans(spans, start),
715
662
  requestInfo: optimizeRequestInfo(interaction.requestInfo, start),
716
663
  customTimings: optimizeCustomTimings(interaction.customTimings, start),
@@ -720,16 +667,21 @@ function createInteractionMetricsPayload(interaction, interactionId) {
720
667
  };
721
668
  // Page load & detailed payload
722
669
  var getPageLoadDetailedInteractionMetrics = function getPageLoadDetailedInteractionMetrics() {
723
- var _config$ssr4;
670
+ var _config$ssr2;
724
671
  if (!isPageLoad || !isDetailedPayload) {
725
672
  return {};
726
673
  }
727
674
  var config = getConfig();
728
675
  return {
729
676
  initialPageLoadExtraTimings: objectToArray(initialPageLoadExtraTiming.getTimings()),
730
- SSRTimings: config !== null && config !== void 0 && (_config$ssr4 = config.ssr) !== null && _config$ssr4 !== void 0 && _config$ssr4.getSSRTimings ? config.ssr.getSSRTimings() : objectToArray(ssr.getSSRTimings())
677
+ SSRTimings: config !== null && config !== void 0 && (_config$ssr2 = config.ssr) !== null && _config$ssr2 !== void 0 && _config$ssr2.getSSRTimings ? config.ssr.getSSRTimings() : objectToArray(ssr.getSSRTimings())
731
678
  };
732
679
  };
680
+ if (experimental) {
681
+ expTTAI = getTTAI(interaction);
682
+ } else {
683
+ regularTTAI = getTTAI(interaction);
684
+ }
733
685
  var newUFOName = sanitizeUfoName(ufoName);
734
686
  var payload = {
735
687
  actionSubject: 'experience',
@@ -738,7 +690,7 @@ function createInteractionMetricsPayload(interaction, interactionId) {
738
690
  source: 'measured',
739
691
  tags: ['observability'],
740
692
  attributes: {
741
- properties: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
693
+ properties: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
742
694
  // basic
743
695
  'event:hostname': ((_window$location = window.location) === null || _window$location === void 0 ? void 0 : _window$location.hostname) || 'unknown',
744
696
  'event:product': config.product,
@@ -750,10 +702,10 @@ function createInteractionMetricsPayload(interaction, interactionId) {
750
702
  payloadSource: 'platform'
751
703
  },
752
704
  'event:region': config.region || 'unknown',
753
- 'experience:key': 'custom.interaction-metrics',
705
+ 'experience:key': experimental ? 'custom.experimental-interaction-metrics' : 'custom.interaction-metrics',
754
706
  'experience:name': newUFOName
755
- }, getBrowserMetadata()), getSSRProperties(type)), getPPSMetrics(interaction)), getPaintMetrics(type)), getNavigationMetrics(type)), getVCMetrics(interaction)), (_config$additionalPay = config.additionalPayloadData) === null || _config$additionalPay === void 0 ? void 0 : _config$additionalPay.call(config, interaction)), getTracingContextData(interaction)), getStylesheetMetrics()), getErrorCounts(interaction)), {}, {
756
- interactionMetrics: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
707
+ }, getBrowserMetadata()), getSSRProperties(type)), getPPSMetrics(interaction)), getPaintMetrics(type)), getNavigationMetrics(type)), getVCMetrics(interaction)), experimental ? getExperimentalVCMetrics(interaction) : undefined), (_config$additionalPay = config.additionalPayloadData) === null || _config$additionalPay === void 0 ? void 0 : _config$additionalPay.call(config, interaction)), getTracingContextData(interaction)), getStylesheetMetrics()), getErrorCounts(interaction)), {}, {
708
+ interactionMetrics: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
757
709
  namePrefix: config.namePrefix || '',
758
710
  segmentPrefix: config.segmentPrefix || '',
759
711
  interactionId: interactionId,
@@ -784,11 +736,18 @@ function createInteractionMetricsPayload(interaction, interactionId) {
784
736
  marks: optimizeMarks(interaction.marks),
785
737
  customData: optimizeCustomData(interaction),
786
738
  reactProfilerTimings: optimizeReactProfilerTimings(interaction.reactProfilerTimings, start)
787
- }, labelStack), getPageLoadInteractionMetrics()), getDetailedInteractionMetrics()), getPageLoadDetailedInteractionMetrics()), getBm3TrackerTimings(interaction)),
739
+ }, labelStack), getPageLoadInteractionMetrics()), getDetailedInteractionMetrics()), getPageLoadDetailedInteractionMetrics()), getBm3TrackerTimings(interaction)), {}, {
740
+ 'metric:ttai': experimental ? regularTTAI || expTTAI : undefined,
741
+ 'metric:experimental:ttai': expTTAI
742
+ }),
788
743
  'ufo:payloadTime': roundEpsilon(performance.now() - interactionPayloadStart)
789
744
  })
790
745
  }
791
746
  };
747
+ if (experimental) {
748
+ regularTTAI = undefined;
749
+ expTTAI = undefined;
750
+ }
792
751
  payload.attributes.properties['event:sizeInKb'] = getPayloadSize(payload.attributes.properties);
793
752
  return payload;
794
753
  }
@@ -799,4 +758,20 @@ export function createPayloads(interactionId, interaction) {
799
758
  });
800
759
  var interactionMetricsPayload = createInteractionMetricsPayload(modifiedInteraction, interactionId);
801
760
  return [interactionMetricsPayload];
761
+ }
762
+ export function createExperimentalMetricsPayload(interactionId, interaction) {
763
+ var config = getConfig();
764
+ if (!config) {
765
+ throw Error('UFO Configuration not provided');
766
+ }
767
+ var ufoName = sanitizeUfoName(interaction.ufoName);
768
+ var rate = getExperimentalInteractionRate(ufoName, interaction.type);
769
+ if (!coinflip(rate)) {
770
+ return null;
771
+ }
772
+ var pageVisibilityState = getPageVisibilityState(interaction.start, interaction.end);
773
+ if (pageVisibilityState !== 'visible') {
774
+ return null;
775
+ }
776
+ return createInteractionMetricsPayload(interaction, interactionId, true);
802
777
  }
@@ -1,2 +1,7 @@
1
- var interactions = new Map();
2
- export default interactions;
1
+ export var interactions = new Map();
2
+ export var CLEANUP_TIMEOUT = 60 * 1000;
3
+ export var CLEANUP_TIMEOUT_AFTER_APDEX = 15 * 1000;
4
+ export var interactionQueue = [];
5
+ export var segmentCache = new Map();
6
+ export var segmentObservers = [];
7
+ export var moduleLoadingRequests = {};