@atlaskit/react-ufo 2.5.3 → 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 (53) hide show
  1. package/CHANGELOG.md +12 -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/es2019/config/index.js +22 -0
  14. package/dist/es2019/create-experimental-interaction-metrics-payload/index.js +71 -0
  15. package/dist/es2019/create-payload/common/utils/index.js +67 -1
  16. package/dist/es2019/create-payload/index.js +48 -77
  17. package/dist/es2019/interaction-metrics/common/constants.js +7 -2
  18. package/dist/es2019/interaction-metrics/common/index.js +103 -0
  19. package/dist/es2019/interaction-metrics/index.js +91 -131
  20. package/dist/es2019/interaction-metrics-init/index.js +28 -8
  21. package/dist/es2019/load-hold/UFOLoadHold.js +5 -3
  22. package/dist/es2019/segment/segment.js +8 -11
  23. package/dist/esm/config/index.js +39 -18
  24. package/dist/esm/create-experimental-interaction-metrics-payload/index.js +90 -0
  25. package/dist/esm/create-payload/common/utils/index.js +62 -1
  26. package/dist/esm/create-payload/index.js +53 -78
  27. package/dist/esm/interaction-metrics/common/constants.js +7 -2
  28. package/dist/esm/interaction-metrics/common/index.js +132 -0
  29. package/dist/esm/interaction-metrics/index.js +86 -158
  30. package/dist/esm/interaction-metrics-init/index.js +28 -8
  31. package/dist/esm/load-hold/UFOLoadHold.js +5 -3
  32. package/dist/esm/segment/segment.js +9 -8
  33. package/dist/types/common/common/types.d.ts +6 -4
  34. package/dist/types/config/index.d.ts +6 -0
  35. package/dist/types/create-experimental-interaction-metrics-payload/index.d.ts +16 -0
  36. package/dist/types/create-payload/common/utils/index.d.ts +9 -0
  37. package/dist/types/create-payload/index.d.ts +13 -5660
  38. package/dist/types/interaction-context/index.d.ts +1 -0
  39. package/dist/types/interaction-metrics/common/constants.d.ts +32 -3
  40. package/dist/types/interaction-metrics/common/index.d.ts +16 -0
  41. package/dist/types/interaction-metrics/index.d.ts +1 -17
  42. package/dist/types/load-hold/UFOLoadHold.d.ts +1 -2
  43. package/dist/types-ts4.5/common/common/types.d.ts +6 -4
  44. package/dist/types-ts4.5/config/index.d.ts +6 -0
  45. package/dist/types-ts4.5/create-experimental-interaction-metrics-payload/index.d.ts +16 -0
  46. package/dist/types-ts4.5/create-payload/common/utils/index.d.ts +9 -0
  47. package/dist/types-ts4.5/create-payload/index.d.ts +13 -5660
  48. package/dist/types-ts4.5/interaction-context/index.d.ts +1 -0
  49. package/dist/types-ts4.5/interaction-metrics/common/constants.d.ts +32 -3
  50. package/dist/types-ts4.5/interaction-metrics/common/index.d.ts +16 -0
  51. package/dist/types-ts4.5/interaction-metrics/index.d.ts +1 -17
  52. package/dist/types-ts4.5/load-hold/UFOLoadHold.d.ts +1 -2
  53. package/package.json +3 -2
@@ -34,7 +34,7 @@ exports.addSpanToAll = addSpanToAll;
34
34
  exports.extractModuleName = extractModuleName;
35
35
  exports.getActiveInteraction = getActiveInteraction;
36
36
  exports.getCurrentInteractionType = getCurrentInteractionType;
37
- exports.postInteractionLog = exports.interactionSpans = void 0;
37
+ exports.interactionSpans = void 0;
38
38
  exports.remove = remove;
39
39
  exports.removeHoldByID = removeHoldByID;
40
40
  exports.removeSegment = removeSegment;
@@ -43,85 +43,32 @@ exports.tryComplete = tryComplete;
43
43
  exports.updatePageLoadInteractionName = updatePageLoadInteractionName;
44
44
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
45
45
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
46
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
47
46
  var _uuid = require("uuid");
48
47
  var _coinflip = _interopRequireDefault(require("../coinflip"));
49
48
  var _config = require("../config");
49
+ var _createExperimentalInteractionMetricsPayload = require("../create-experimental-interaction-metrics-payload");
50
+ var _utils = require("../create-payload/common/utils");
50
51
  var _experienceTraceIdContext = require("../experience-trace-id-context");
51
52
  var _featureFlagsAccessed = require("../feature-flags-accessed");
52
53
  var _interactionIdContext = require("../interaction-id-context");
53
54
  var _vc = require("../vc");
54
- var _constants = _interopRequireDefault(require("./common/constants"));
55
- var _postInteractionLog = _interopRequireDefault(require("./post-interaction-log"));
55
+ var _common = require("./common");
56
+ var _constants = require("./common/constants");
56
57
  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; }
57
58
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
58
- 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; } } }; }
59
- 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; } }
60
- 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; }
61
59
  var PreviousInteractionLog = {
62
60
  name: undefined,
63
61
  isAborted: undefined
64
62
  };
65
- var postInteractionLog = exports.postInteractionLog = new _postInteractionLog.default();
66
- var interactionQueue = [];
67
- var segmentCache = new Map();
68
- var CLEANUP_TIMEOUT = 60 * 1000;
69
- var CLEANUP_TIMEOUT_AFTER_APDEX = 15 * 1000;
70
- var segmentObservers = [];
71
63
  function getActiveInteraction() {
72
64
  var interactionId = (0, _interactionIdContext.getInteractionId)();
73
65
  if (!interactionId.current) {
74
66
  return;
75
67
  }
76
- return _constants.default.get(interactionId.current);
77
- }
78
- function isPerformanceTracingEnabled() {
79
- var _getConfig;
80
- return ((_getConfig = (0, _config.getConfig)()) === null || _getConfig === void 0 ? void 0 : _getConfig.enableAdditionalPerformanceMarks) || window.__REACT_UFO_ENABLE_PERF_TRACING || process.env.NODE_ENV !== 'production';
81
- }
82
- function labelStackToString(labelStack, name) {
83
- var _stack$map;
84
- var stack = (0, _toConsumableArray2.default)(labelStack !== null && labelStack !== void 0 ? labelStack : []);
85
- if (name) {
86
- stack.push({
87
- name: name
88
- });
89
- }
90
- return (_stack$map = stack.map(function (l) {
91
- return l.name;
92
- })) === null || _stack$map === void 0 ? void 0 : _stack$map.join('/');
93
- }
94
- function labelStackToIdString(labelStack) {
95
- var _labelStack$map;
96
- return labelStack === null || labelStack === void 0 || (_labelStack$map = labelStack.map(function (l) {
97
- return 'segmentId' in l ? "".concat(l.name, ":").concat(l.segmentId) : "".concat(l.name);
98
- })) === null || _labelStack$map === void 0 ? void 0 : _labelStack$map.join('/');
99
- }
100
- function addSegmentObserver(observer) {
101
- segmentObservers.push(observer);
102
- var _iterator = _createForOfIteratorHelper(segmentCache.values()),
103
- _step;
104
- try {
105
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
106
- var segmentInfo = _step.value;
107
- observer.onAdd(segmentInfo);
108
- }
109
- } catch (err) {
110
- _iterator.e(err);
111
- } finally {
112
- _iterator.f();
113
- }
114
- }
115
- function removeSegmentObserver(observer) {
116
- var index = segmentObservers.findIndex(function (obs) {
117
- return obs === observer;
118
- });
119
- if (index !== -1) {
120
- segmentObservers.splice(index, 1);
121
- }
68
+ return _constants.interactions.get(interactionId.current);
122
69
  }
123
70
  function remove(interactionId) {
124
- _constants.default.delete(interactionId);
71
+ _constants.interactions.delete(interactionId);
125
72
  }
126
73
  function updatePageLoadInteractionName(ufoName) {
127
74
  var routeName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ufoName;
@@ -133,7 +80,7 @@ function updatePageLoadInteractionName(ufoName) {
133
80
  interaction.routeName = routeName;
134
81
  }
135
82
  function addMetadata(interactionId, data) {
136
- var interaction = _constants.default.get(interactionId);
83
+ var interaction = _constants.interactions.get(interactionId);
137
84
  if (interaction != null) {
138
85
  Object.keys(data).forEach(function (key) {
139
86
  interaction.metaData[key] = data[key];
@@ -141,7 +88,7 @@ function addMetadata(interactionId, data) {
141
88
  }
142
89
  }
143
90
  function addCustomData(interactionId, labelStack, data) {
144
- var interaction = _constants.default.get(interactionId);
91
+ var interaction = _constants.interactions.get(interactionId);
145
92
  if (interaction != null) {
146
93
  Object.keys(data).forEach(function (i) {
147
94
  interaction.customData.push({
@@ -152,13 +99,13 @@ function addCustomData(interactionId, labelStack, data) {
152
99
  }
153
100
  }
154
101
  function addCustomTiming(interactionId, labelStack, data) {
155
- var interaction = _constants.default.get(interactionId);
102
+ var interaction = _constants.interactions.get(interactionId);
156
103
  if (interaction != null) {
157
104
  interaction.customTimings.push({
158
105
  labelStack: labelStack,
159
106
  data: data
160
107
  });
161
- if (isPerformanceTracingEnabled()) {
108
+ if ((0, _common.isPerformanceTracingEnabled)()) {
162
109
  for (var _i = 0, _Object$entries = Object.entries(data); _i < _Object$entries.length; _i++) {
163
110
  var _Object$entries$_i = (0, _slicedToArray2.default)(_Object$entries[_i], 2),
164
111
  key = _Object$entries$_i[0],
@@ -167,7 +114,7 @@ function addCustomTiming(interactionId, labelStack, data) {
167
114
  endTime = timingData.endTime;
168
115
  try {
169
116
  // for Firefox 102 and older
170
- performance.measure("\uD83D\uDEF8 ".concat(labelStackToString(labelStack, key), " [custom_timing]"), {
117
+ performance.measure("\uD83D\uDEF8 ".concat((0, _common.labelStackToString)(labelStack, key), " [custom_timing]"), {
171
118
  start: startTime,
172
119
  end: endTime
173
120
  });
@@ -180,7 +127,7 @@ function addCustomTiming(interactionId, labelStack, data) {
180
127
  }
181
128
  function addMark(interactionId, type, name, labelStack) {
182
129
  var time = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : performance.now();
183
- var interaction = _constants.default.get(interactionId);
130
+ var interaction = _constants.interactions.get(interactionId);
184
131
  if (interaction != null) {
185
132
  interaction.marks.push({
186
133
  type: type,
@@ -189,15 +136,15 @@ function addMark(interactionId, type, name, labelStack) {
189
136
  time: time
190
137
  });
191
138
  }
192
- if (isPerformanceTracingEnabled()) {
193
- performance.mark("\uD83D\uDEF8 ".concat(labelStackToString(labelStack, name), " [").concat(type, "]"), {
139
+ if ((0, _common.isPerformanceTracingEnabled)()) {
140
+ performance.mark("\uD83D\uDEF8 ".concat((0, _common.labelStackToString)(labelStack, name), " [").concat(type, "]"), {
194
141
  startTime: time
195
142
  });
196
143
  }
197
144
  }
198
145
  function addMarkToAll(type, name, labelStack) {
199
146
  var time = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : performance.now();
200
- _constants.default.forEach(function (interaction) {
147
+ _constants.interactions.forEach(function (interaction) {
201
148
  interaction.marks.push({
202
149
  type: type,
203
150
  name: name,
@@ -205,8 +152,8 @@ function addMarkToAll(type, name, labelStack) {
205
152
  time: time
206
153
  });
207
154
  });
208
- if (isPerformanceTracingEnabled()) {
209
- performance.mark("\uD83D\uDEF8 ".concat(labelStackToString(labelStack, name), " [").concat(type, "]"), {
155
+ if ((0, _common.isPerformanceTracingEnabled)()) {
156
+ performance.mark("\uD83D\uDEF8 ".concat((0, _common.labelStackToString)(labelStack, name), " [").concat(type, "]"), {
210
157
  startTime: time
211
158
  });
212
159
  }
@@ -214,7 +161,7 @@ function addMarkToAll(type, name, labelStack) {
214
161
  function addSpan(interactionId, type, name, labelStack, start) {
215
162
  var end = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : performance.now();
216
163
  var size = arguments.length > 6 ? arguments[6] : undefined;
217
- var interaction = _constants.default.get(interactionId);
164
+ var interaction = _constants.interactions.get(interactionId);
218
165
  if (interaction != null) {
219
166
  interaction.spans.push({
220
167
  type: type,
@@ -224,10 +171,10 @@ function addSpan(interactionId, type, name, labelStack, start) {
224
171
  end: end,
225
172
  size: size
226
173
  });
227
- if (isPerformanceTracingEnabled()) {
174
+ if ((0, _common.isPerformanceTracingEnabled)()) {
228
175
  try {
229
176
  // for Firefox 102 and older
230
- performance.measure("\uD83D\uDEF8 ".concat(labelStackToString(labelStack, name), " [").concat(type, "]"), {
177
+ performance.measure("\uD83D\uDEF8 ".concat((0, _common.labelStackToString)(labelStack, name), " [").concat(type, "]"), {
231
178
  start: start,
232
179
  end: end
233
180
  });
@@ -240,7 +187,7 @@ function addSpan(interactionId, type, name, labelStack, start) {
240
187
  function addSpanToAll(type, name, labelStack, start) {
241
188
  var end = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : performance.now();
242
189
  var size = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;
243
- _constants.default.forEach(function (interaction) {
190
+ _constants.interactions.forEach(function (interaction) {
244
191
  interaction.spans.push({
245
192
  type: type,
246
193
  name: name,
@@ -250,10 +197,10 @@ function addSpanToAll(type, name, labelStack, start) {
250
197
  size: size
251
198
  });
252
199
  });
253
- if (isPerformanceTracingEnabled()) {
200
+ if ((0, _common.isPerformanceTracingEnabled)()) {
254
201
  try {
255
202
  // for Firefox 102 and older
256
- performance.measure("\uD83D\uDEF8 ".concat(labelStackToString(labelStack, name), " [").concat(type, "]"), {
203
+ performance.measure("\uD83D\uDEF8 ".concat((0, _common.labelStackToString)(labelStack, name), " [").concat(type, "]"), {
257
204
  start: start,
258
205
  end: end
259
206
  });
@@ -268,7 +215,6 @@ function addPreload(moduleId, timestamp) {
268
215
  function addLoad(identifier, start, end) {
269
216
  addSpanToAll('bundle_load', identifier, null, start, end - start);
270
217
  }
271
- var moduleLoadingRequests = {};
272
218
  function extractModuleName(input) {
273
219
  var result = input !== null && input !== void 0 ? input : '';
274
220
  result = result.replace(/^\.\/src\/packages\//, '');
@@ -276,37 +222,34 @@ function extractModuleName(input) {
276
222
  result = result.replace(/(\/src)?\/(index|main)\.(tsx|ts|js|jsx)$/, '');
277
223
  return result;
278
224
  }
279
- function addHoldCriterion(id, labelStack, name, startTime) {
280
- var _window$__CRITERION__;
281
- if (!((_window$__CRITERION__ = window.__CRITERION__) !== null && _window$__CRITERION__ !== void 0 && _window$__CRITERION__.addUFOHold)) {
282
- return;
283
- }
284
- window.__CRITERION__.addUFOHold(id, labelStackToString(labelStack), name, startTime);
285
- }
286
- function removeHoldCriterion(id) {
287
- var _window$__CRITERION__2;
288
- if (!((_window$__CRITERION__2 = window.__CRITERION__) !== null && _window$__CRITERION__2 !== void 0 && _window$__CRITERION__2.removeUFOHold)) {
289
- return;
290
- }
291
- window.__CRITERION__.removeUFOHold(id);
292
- }
293
- function addHold(interactionId, labelStack, name) {
294
- var interaction = _constants.default.get(interactionId);
225
+ function addHold(interactionId, labelStack, name, experimental) {
226
+ var interaction = _constants.interactions.get(interactionId);
295
227
  var id = (0, _uuid.v4)();
296
228
  if (interaction != null) {
297
- var start = performance.now();
298
- interaction.holdActive.set(id, {
229
+ var _getConfig;
230
+ var holdActive = {
299
231
  labelStack: labelStack,
300
232
  name: name,
301
- start: start
302
- });
303
- addHoldCriterion(id, labelStack, name, start);
233
+ start: 0
234
+ };
235
+ var start = performance.now();
236
+ if ((_getConfig = (0, _config.getConfig)()) !== null && _getConfig !== void 0 && (_getConfig = _getConfig.experimentalInteractionMetrics) !== null && _getConfig !== void 0 && _getConfig.enabled && experimental) {
237
+ interaction.holdExpActive.set(id, _objectSpread(_objectSpread({}, holdActive), {}, {
238
+ start: start
239
+ }));
240
+ }
241
+ if (!experimental) {
242
+ interaction.holdActive.set(id, _objectSpread(_objectSpread({}, holdActive), {}, {
243
+ start: start
244
+ }));
245
+ }
246
+ (0, _common.addHoldCriterion)(id, labelStack, name, start);
304
247
  return function () {
305
248
  var end = performance.now();
306
- if (isPerformanceTracingEnabled()) {
249
+ if ((0, _common.isPerformanceTracingEnabled)()) {
307
250
  try {
308
251
  // for Firefox 102 and older
309
- performance.measure("\uD83D\uDEF8 ".concat(labelStackToString(labelStack, name), " [hold]"), {
252
+ performance.measure("\uD83D\uDEF8 ".concat((0, _common.labelStackToString)(labelStack, name), " [hold]"), {
310
253
  start: start,
311
254
  end: end
312
255
  });
@@ -314,21 +257,30 @@ function addHold(interactionId, labelStack, name) {
314
257
  // do nothing
315
258
  }
316
259
  }
317
- removeHoldCriterion(id);
318
- var currentInteraction = _constants.default.get(interactionId);
260
+ (0, _common.removeHoldCriterion)(id);
261
+ var currentInteraction = _constants.interactions.get(interactionId);
319
262
  var currentHold = interaction.holdActive.get(id);
320
- if (currentInteraction != null && currentHold != null) {
321
- currentInteraction.holdInfo.push(_objectSpread(_objectSpread({}, currentHold), {}, {
322
- end: end
323
- }));
324
- interaction.holdActive.delete(id);
263
+ var expHold = interaction.holdExpActive.get(id);
264
+ if (currentInteraction != null) {
265
+ if (currentHold != null) {
266
+ currentInteraction.holdInfo.push(_objectSpread(_objectSpread({}, currentHold), {}, {
267
+ end: end
268
+ }));
269
+ interaction.holdActive.delete(id);
270
+ }
271
+ if (expHold != null) {
272
+ currentInteraction.holdExpInfo.push(_objectSpread(_objectSpread({}, expHold), {}, {
273
+ end: end
274
+ }));
275
+ interaction.holdExpActive.delete(id);
276
+ }
325
277
  }
326
278
  };
327
279
  }
328
280
  return function () {};
329
281
  }
330
282
  function addHoldByID(interactionId, labelStack, name, id, ignoreOnSubmit) {
331
- var interaction = _constants.default.get(interactionId);
283
+ var interaction = _constants.interactions.get(interactionId);
332
284
  if (interaction != null) {
333
285
  var start = performance.now();
334
286
  interaction.holdActive.set(id, {
@@ -337,27 +289,27 @@ function addHoldByID(interactionId, labelStack, name, id, ignoreOnSubmit) {
337
289
  start: start,
338
290
  ignoreOnSubmit: ignoreOnSubmit
339
291
  });
340
- addHoldCriterion(id, labelStack, name, start);
292
+ (0, _common.addHoldCriterion)(id, labelStack, name, start);
341
293
  }
342
294
  return function () {};
343
295
  }
344
296
  function removeHoldByID(interactionId, id) {
345
- var interaction = _constants.default.get(interactionId);
297
+ var interaction = _constants.interactions.get(interactionId);
346
298
  if (interaction != null) {
347
299
  var end = performance.now();
348
- var currentInteraction = _constants.default.get(interactionId);
300
+ var currentInteraction = _constants.interactions.get(interactionId);
349
301
  var currentHold = interaction.holdActive.get(id);
350
302
  if (currentInteraction != null && currentHold != null) {
351
303
  currentInteraction.holdInfo.push(_objectSpread(_objectSpread({}, currentHold), {}, {
352
304
  end: end
353
305
  }));
354
306
  interaction.holdActive.delete(id);
355
- removeHoldCriterion(id);
307
+ (0, _common.removeHoldCriterion)(id);
356
308
  }
357
309
  }
358
310
  }
359
311
  function getCurrentInteractionType(interactionId) {
360
- var interaction = _constants.default.get(interactionId);
312
+ var interaction = _constants.interactions.get(interactionId);
361
313
  if (interaction) {
362
314
  return interaction.type;
363
315
  }
@@ -369,19 +321,19 @@ var ModuleLoadingProfiler = exports.ModuleLoadingProfiler = {
369
321
  },
370
322
  onLoadStart: function onLoadStart(info) {
371
323
  var timeoutId = setTimeout(function () {
372
- delete moduleLoadingRequests[info.identifier];
324
+ delete _constants.moduleLoadingRequests[info.identifier];
373
325
  }, 30000);
374
326
  var request = {
375
327
  start: performance.now(),
376
328
  timeoutId: timeoutId
377
329
  };
378
- moduleLoadingRequests[info.identifier] = request;
330
+ _constants.moduleLoadingRequests[info.identifier] = request;
379
331
  },
380
332
  onLoadComplete: function onLoadComplete(info) {
381
- var request = moduleLoadingRequests[info.identifier];
333
+ var request = _constants.moduleLoadingRequests[info.identifier];
382
334
  if (request) {
383
335
  clearTimeout(request.timeoutId);
384
- delete moduleLoadingRequests[info.identifier];
336
+ delete _constants.moduleLoadingRequests[info.identifier];
385
337
  addLoad(extractModuleName(info.identifier), request.start, performance.now());
386
338
  }
387
339
  },
@@ -399,7 +351,7 @@ var ModuleLoadingProfiler = exports.ModuleLoadingProfiler = {
399
351
  }
400
352
  };
401
353
  function addError(interactionId, name, labelStack, errorType, errorMessage, errorStack, forcedError) {
402
- var interaction = _constants.default.get(interactionId);
354
+ var interaction = _constants.interactions.get(interactionId);
403
355
  if (interaction != null) {
404
356
  interaction.errors.push({
405
357
  name: name,
@@ -412,7 +364,7 @@ function addError(interactionId, name, labelStack, errorType, errorMessage, erro
412
364
  }
413
365
  }
414
366
  function addErrorToAll(name, labelStack, errorType, errorMessage, errorStack) {
415
- _constants.default.forEach(function (interaction) {
367
+ _constants.interactions.forEach(function (interaction) {
416
368
  interaction.errors.push({
417
369
  name: name,
418
370
  labelStack: labelStack,
@@ -424,10 +376,10 @@ function addErrorToAll(name, labelStack, errorType, errorMessage, errorStack) {
424
376
  }
425
377
  var addProfilerTimings = exports.addProfilerTimings = function addProfilerTimings(interactionId, labelStack, type, actualDuration, baseDuration, startTime, commitTime) {
426
378
  var _getConfig2;
427
- if (isPerformanceTracingEnabled()) {
379
+ if ((0, _common.isPerformanceTracingEnabled)()) {
428
380
  try {
429
381
  // for Firefox 102 and older
430
- performance.measure("\uD83D\uDEF8 ".concat(labelStackToString(labelStack), " [react-profiler] ").concat(type), {
382
+ performance.measure("\uD83D\uDEF8 ".concat((0, _common.labelStackToString)(labelStack), " [react-profiler] ").concat(type), {
431
383
  start: startTime,
432
384
  duration: actualDuration
433
385
  });
@@ -435,7 +387,7 @@ var addProfilerTimings = exports.addProfilerTimings = function addProfilerTiming
435
387
  // do nothing
436
388
  }
437
389
  }
438
- var interaction = _constants.default.get(interactionId);
390
+ var interaction = _constants.interactions.get(interactionId);
439
391
  if (interaction != null) {
440
392
  interaction.reactProfilerTimings.push({
441
393
  labelStack: labelStack,
@@ -446,25 +398,13 @@ var addProfilerTimings = exports.addProfilerTimings = function addProfilerTiming
446
398
  commitTime: commitTime
447
399
  });
448
400
  } else if ((_getConfig2 = (0, _config.getConfig)()) !== null && _getConfig2 !== void 0 && (_getConfig2 = _getConfig2.postInteractionLog) !== null && _getConfig2 !== void 0 && _getConfig2.enabled) {
449
- postInteractionLog.addProfilerTimings(labelStack, type, actualDuration, baseDuration, startTime, commitTime);
401
+ _utils.postInteractionLog.addProfilerTimings(labelStack, type, actualDuration, baseDuration, startTime, commitTime);
450
402
  }
451
403
  };
452
- var pushToQueue = function pushToQueue(id, data) {
453
- interactionQueue.push({
454
- id: id,
455
- data: data
456
- });
457
- };
458
- var handleInteraction = pushToQueue;
459
- function callCleanUpCallbacks(interaction) {
460
- interaction.cleanupCallbacks.reverse().forEach(function (cleanUpCallback) {
461
- cleanUpCallback();
462
- });
463
- }
404
+ var handleInteraction = _common.pushToQueue;
464
405
  var finishInteraction = function finishInteraction(id, data) {
465
406
  var _getConfig3;
466
407
  var endTime = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : performance.now();
467
- // eslint-disable-next-line no-param-reassign
468
408
  data.end = endTime;
469
409
  try {
470
410
  // for Firefox 102 and older
@@ -476,58 +416,20 @@ var finishInteraction = function finishInteraction(id, data) {
476
416
  // do nothing
477
417
  }
478
418
  if (data.featureFlags) {
479
- // eslint-disable-next-line no-param-reassign
480
419
  data.featureFlags.during = Object.fromEntries(_featureFlagsAccessed.currentFeatureFlagsAccessed);
481
420
  }
482
421
  (0, _experienceTraceIdContext.clearActiveTrace)();
483
- callCleanUpCallbacks(data);
422
+ (0, _common.callCleanUpCallbacks)(data);
484
423
  if ((_getConfig3 = (0, _config.getConfig)()) !== null && _getConfig3 !== void 0 && (_getConfig3 = _getConfig3.vc) !== null && _getConfig3 !== void 0 && _getConfig3.stopVCAtInteractionFinish) {
485
424
  data.vc = (0, _vc.getVCObserver)().getVCRawData();
486
425
  }
487
- remove(id);
488
426
  PreviousInteractionLog.name = data.ufoName || 'unknown';
489
427
  PreviousInteractionLog.isAborted = data.abortReason != null;
490
428
  if (data.ufoName) {
491
429
  handleInteraction(id, data);
492
430
  }
493
- if (isPerformanceTracingEnabled()) {
494
- var profilerTimingMap = new Map();
495
- data.reactProfilerTimings.forEach(function (profilerTiming) {
496
- var labelStackId = labelStackToIdString(profilerTiming.labelStack);
497
- if (labelStackId) {
498
- var _profilerTimingMap$ge, _timing$start, _timing$end;
499
- var timing = (_profilerTimingMap$ge = profilerTimingMap.get(labelStackId)) !== null && _profilerTimingMap$ge !== void 0 ? _profilerTimingMap$ge : {
500
- labelStack: profilerTiming.labelStack
501
- };
502
- timing.start = profilerTiming.startTime < ((_timing$start = timing.start) !== null && _timing$start !== void 0 ? _timing$start : Number.MAX_SAFE_INTEGER) ? profilerTiming.startTime : timing.start;
503
- timing.end = profilerTiming.commitTime > ((_timing$end = timing.end) !== null && _timing$end !== void 0 ? _timing$end : Number.MIN_SAFE_INTEGER) ? profilerTiming.commitTime : timing.end;
504
- profilerTimingMap.set(labelStackId, timing);
505
- }
506
- });
507
- try {
508
- // for Firefox 102 and older
509
- var _iterator2 = _createForOfIteratorHelper(profilerTimingMap.entries()),
510
- _step2;
511
- try {
512
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
513
- var _step2$value = (0, _slicedToArray2.default)(_step2.value, 2),
514
- _step2$value$ = _step2$value[1],
515
- labelStack = _step2$value$.labelStack,
516
- start = _step2$value$.start,
517
- end = _step2$value$.end;
518
- performance.measure("\uD83D\uDEF8 ".concat(labelStackToString(labelStack), " [segment_ttai]"), {
519
- start: start,
520
- end: end
521
- });
522
- }
523
- } catch (err) {
524
- _iterator2.e(err);
525
- } finally {
526
- _iterator2.f();
527
- }
528
- } catch (e) {
529
- // do nothing
530
- }
431
+ if ((0, _common.isPerformanceTracingEnabled)()) {
432
+ (0, _common.reactProfilerTimingMap)(data);
531
433
  }
532
434
  try {
533
435
  // dispatch a global window event to notify the measure is completed
@@ -539,82 +441,113 @@ var finishInteraction = function finishInteraction(id, data) {
539
441
  }
540
442
  };
541
443
  var sinkInteractionHandler = exports.sinkInteractionHandler = function sinkInteractionHandler(sinkFn) {
542
- if (handleInteraction === pushToQueue) {
444
+ if (handleInteraction === _common.pushToQueue) {
543
445
  handleInteraction = sinkFn;
544
- interactionQueue.forEach(function (interaction) {
446
+ _constants.interactionQueue.forEach(function (interaction) {
545
447
  sinkFn(interaction.id, interaction.data);
546
448
  });
547
- interactionQueue.length = 0;
449
+ _constants.interactionQueue.length = 0;
548
450
  }
549
451
  };
550
452
  var sinkPostInteractionLogHandler = exports.sinkPostInteractionLogHandler = function sinkPostInteractionLogHandler(sinkFn) {
551
- postInteractionLog.sinkHandler(sinkFn);
453
+ _utils.postInteractionLog.sinkHandler(sinkFn);
552
454
  };
455
+
456
+ // a flag to prevent multiple submitting
457
+ var activeSubmitted = false;
553
458
  function tryComplete(interactionId, endTime) {
554
- var interaction = _constants.default.get(interactionId);
459
+ var interaction = _constants.interactions.get(interactionId);
555
460
  if (interaction != null) {
556
- var noMoreHolds = interaction.holdActive.size === 0;
557
- if (noMoreHolds) {
461
+ var noMoreActiveHolds = interaction.holdActive.size === 0;
462
+ var noMoreExpHolds = interaction.holdExpActive.size === 0;
463
+ var postInteraction = function postInteraction() {
558
464
  var _getConfig4;
559
- finishInteraction(interactionId, interaction, endTime);
560
465
  if ((_getConfig4 = (0, _config.getConfig)()) !== null && _getConfig4 !== void 0 && (_getConfig4 = _getConfig4.postInteractionLog) !== null && _getConfig4 !== void 0 && _getConfig4.enabled) {
561
- postInteractionLog.onInteractionComplete(interaction);
466
+ var _getExperimentalVCMet;
467
+ var experimentalVC90 = (_getExperimentalVCMet = (0, _createExperimentalInteractionMetricsPayload.getExperimentalVCMetrics)(interaction)) === null || _getExperimentalVCMet === void 0 ? void 0 : _getExperimentalVCMet['metric:experimental:vc90'];
468
+ var experimentalTTAI = (0, _utils.getTTAI)(interaction);
469
+ _utils.postInteractionLog.onInteractionComplete(_objectSpread(_objectSpread({}, interaction), {}, {
470
+ experimentalTTAI: experimentalTTAI,
471
+ experimentalVC90: experimentalVC90
472
+ }));
473
+ }
474
+ remove(interactionId);
475
+ };
476
+ if (noMoreActiveHolds) {
477
+ if (!activeSubmitted) {
478
+ finishInteraction(interactionId, interaction, endTime);
479
+ activeSubmitted = true;
480
+ }
481
+ if (noMoreExpHolds) {
482
+ var _getConfig5;
483
+ if ((_getConfig5 = (0, _config.getConfig)()) !== null && _getConfig5 !== void 0 && (_getConfig5 = _getConfig5.experimentalInteractionMetrics) !== null && _getConfig5 !== void 0 && _getConfig5.enabled) {
484
+ (0, _createExperimentalInteractionMetricsPayload.onExperimentalInteractionComplete)(interactionId, interaction, endTime);
485
+ }
486
+ postInteraction();
562
487
  }
563
488
  }
564
489
  }
565
490
  }
566
- function callCancelCallbacks(interaction) {
567
- interaction.cancelCallbacks.reverse().forEach(function (cancelCallback) {
568
- cancelCallback();
569
- });
570
- }
571
491
  function abort(interactionId, abortReason) {
572
- var interaction = _constants.default.get(interactionId);
492
+ var interaction = _constants.interactions.get(interactionId);
573
493
  if (interaction != null) {
574
- callCancelCallbacks(interaction);
494
+ var _getConfig6;
495
+ (0, _common.callCancelCallbacks)(interaction);
575
496
  interaction.abortReason = abortReason;
576
497
  finishInteraction(interactionId, interaction);
498
+ if ((_getConfig6 = (0, _config.getConfig)()) !== null && _getConfig6 !== void 0 && (_getConfig6 = _getConfig6.experimentalInteractionMetrics) !== null && _getConfig6 !== void 0 && _getConfig6.enabled) {
499
+ (0, _createExperimentalInteractionMetricsPayload.onExperimentalInteractionComplete)(interactionId, interaction);
500
+ }
501
+ remove(interactionId);
577
502
  }
578
503
  }
579
504
  function abortByNewInteraction(interactionId, interactionName) {
580
- var interaction = _constants.default.get(interactionId);
505
+ var interaction = _constants.interactions.get(interactionId);
581
506
  if (interaction != null) {
582
- callCancelCallbacks(interaction);
507
+ var _getConfig7;
508
+ (0, _common.callCancelCallbacks)(interaction);
583
509
  interaction.abortReason = 'new_interaction';
584
510
  interaction.abortedByInteractionName = interactionName;
585
511
  finishInteraction(interactionId, interaction);
512
+ if ((_getConfig7 = (0, _config.getConfig)()) !== null && _getConfig7 !== void 0 && (_getConfig7 = _getConfig7.experimentalInteractionMetrics) !== null && _getConfig7 !== void 0 && _getConfig7.enabled) {
513
+ (0, _createExperimentalInteractionMetricsPayload.onExperimentalInteractionComplete)(interactionId, interaction);
514
+ }
515
+ remove(interactionId);
586
516
  }
587
517
  }
588
518
  function abortAll(abortReason, abortedByInteractionName) {
589
- _constants.default.forEach(function (interaction, interactionId) {
519
+ _constants.interactions.forEach(function (interaction, interactionId) {
520
+ var _getConfig8;
590
521
  var noMoreHolds = interaction.holdActive.size === 0;
591
522
  if (!noMoreHolds) {
592
- callCancelCallbacks(interaction);
593
- // eslint-disable-next-line no-param-reassign
523
+ (0, _common.callCancelCallbacks)(interaction);
594
524
  interaction.abortReason = abortReason;
595
525
  if (abortedByInteractionName != null) {
596
- // eslint-disable-next-line no-param-reassign
597
526
  interaction.abortedByInteractionName = abortedByInteractionName;
598
527
  }
599
528
  }
600
529
  finishInteraction(interactionId, interaction);
530
+ if ((_getConfig8 = (0, _config.getConfig)()) !== null && _getConfig8 !== void 0 && (_getConfig8 = _getConfig8.experimentalInteractionMetrics) !== null && _getConfig8 !== void 0 && _getConfig8.enabled) {
531
+ (0, _createExperimentalInteractionMetricsPayload.onExperimentalInteractionComplete)(interactionId, interaction);
532
+ }
533
+ remove(interactionId);
601
534
  });
602
535
  }
603
536
  function addOnCancelCallback(id, cancelCallback) {
604
- var interaction = _constants.default.get(id);
537
+ var interaction = _constants.interactions.get(id);
605
538
  interaction === null || interaction === void 0 || interaction.cancelCallbacks.push(cancelCallback);
606
539
  }
607
540
  function addNewInteraction(interactionId, ufoName, type, startTime, rate, labelStack, routeName) {
608
- var _getConfig5;
541
+ var _getConfig9;
609
542
  var trace = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null;
610
- if ((_getConfig5 = (0, _config.getConfig)()) !== null && _getConfig5 !== void 0 && (_getConfig5 = _getConfig5.postInteractionLog) !== null && _getConfig5 !== void 0 && _getConfig5.enabled) {
611
- postInteractionLog.reset();
543
+ if ((_getConfig9 = (0, _config.getConfig)()) !== null && _getConfig9 !== void 0 && (_getConfig9 = _getConfig9.postInteractionLog) !== null && _getConfig9 !== void 0 && _getConfig9.enabled) {
544
+ _utils.postInteractionLog.reset();
612
545
  }
613
546
  var previousTime = startTime;
614
- var timeoutTime = CLEANUP_TIMEOUT;
547
+ var timeoutTime = _constants.CLEANUP_TIMEOUT;
615
548
  var timerID = setTimeout(function () {
616
549
  abort(interactionId, 'timeout');
617
- }, CLEANUP_TIMEOUT);
550
+ }, _constants.CLEANUP_TIMEOUT);
618
551
  function changeTimeout(newTime) {
619
552
  // we compare if the time left is lower than the new time to no
620
553
  // extend the timeout beyond the initial waiting time
@@ -647,9 +580,11 @@ function addNewInteraction(interactionId, ufoName, type, startTime, rate, labelS
647
580
  requestInfo: [],
648
581
  reactProfilerTimings: [],
649
582
  holdInfo: [],
583
+ holdExpInfo: [],
650
584
  holdActive: new Map(),
585
+ holdExpActive: new Map(),
651
586
  // measure when we execute this code
652
- // from this we can measure the input delay -
587
+ // from this, we can measure the input delay -
653
588
  // how long the browser took to hand execution back to JS)
654
589
  measureStart: performance.now(),
655
590
  rate: rate,
@@ -674,16 +609,16 @@ function addNewInteraction(interactionId, ufoName, type, startTime, rate, labelS
674
609
  if (addFeatureFlagsToInteraction) {
675
610
  _featureFlagsAccessed.currentFeatureFlagsAccessed.clear();
676
611
  }
677
- _constants.default.set(interactionId, metrics);
612
+ _constants.interactions.set(interactionId, metrics);
678
613
  var segmentObserver = {
679
614
  onAdd: function onAdd(segment) {
680
615
  metrics.knownSegments.push(segment);
681
616
  },
682
617
  onRemove: function onRemove() {}
683
618
  };
684
- addSegmentObserver(segmentObserver);
619
+ (0, _common.addSegmentObserver)(segmentObserver);
685
620
  metrics.cleanupCallbacks.push(function () {
686
- removeSegmentObserver(segmentObserver);
621
+ (0, _common.removeSegmentObserver)(segmentObserver);
687
622
  });
688
623
  metrics.cleanupCallbacks.push(function () {
689
624
  clearTimeout(metrics.timerID);
@@ -696,9 +631,13 @@ function addNewInteraction(interactionId, ufoName, type, startTime, rate, labelS
696
631
  (0, _vc.getVCObserver)().start({
697
632
  startTime: startTime
698
633
  });
699
- postInteractionLog.startVCObserver({
634
+ _utils.postInteractionLog.startVCObserver({
635
+ startTime: startTime
636
+ });
637
+ _createExperimentalInteractionMetricsPayload.experimentalVC.start({
700
638
  startTime: startTime
701
639
  });
640
+ activeSubmitted = false;
702
641
  }
703
642
  }
704
643
  function addBrowserMetricEvent(event) {
@@ -708,13 +647,13 @@ function addBrowserMetricEvent(event) {
708
647
  interaction.legacyMetrics = interaction.legacyMetrics || [];
709
648
  interaction.legacyMetrics.push(event);
710
649
  if ((interaction.type === 'page_load' || interaction.type === 'transition') && ((_event$config = event.config) === null || _event$config === void 0 ? void 0 : _event$config.type) === 'PAGE_LOAD') {
711
- interaction.changeTimeout(CLEANUP_TIMEOUT_AFTER_APDEX);
650
+ interaction.changeTimeout(_constants.CLEANUP_TIMEOUT_AFTER_APDEX);
712
651
  removeHoldByID(interaction.id, interaction.ufoName);
713
652
  }
714
653
  }
715
654
  }
716
655
  function addApdexToAll(apdex) {
717
- _constants.default.forEach(function (interaction, key) {
656
+ _constants.interactions.forEach(function (interaction, key) {
718
657
  interaction.apdex.push(apdex);
719
658
  try {
720
659
  var _apdex$startTime;
@@ -727,13 +666,13 @@ function addApdexToAll(apdex) {
727
666
  // do nothing
728
667
  }
729
668
  if (interaction.type === 'page_load' || interaction.type === 'transition') {
730
- interaction.changeTimeout(CLEANUP_TIMEOUT_AFTER_APDEX);
669
+ interaction.changeTimeout(_constants.CLEANUP_TIMEOUT_AFTER_APDEX);
731
670
  removeHoldByID(key, interaction.ufoName);
732
671
  }
733
672
  });
734
673
  }
735
674
  function addApdex(interactionId, apdexInfo) {
736
- var interaction = _constants.default.get(interactionId);
675
+ var interaction = _constants.interactions.get(interactionId);
737
676
  if (interaction != null) {
738
677
  interaction.apdex.push(apdexInfo);
739
678
  try {
@@ -747,55 +686,44 @@ function addApdex(interactionId, apdexInfo) {
747
686
  // do nothing
748
687
  }
749
688
  if (interaction.type === 'page_load' || interaction.type === 'transition') {
750
- interaction.changeTimeout(CLEANUP_TIMEOUT_AFTER_APDEX);
689
+ interaction.changeTimeout(_constants.CLEANUP_TIMEOUT_AFTER_APDEX);
751
690
  removeHoldByID(interactionId, interaction.ufoName);
752
691
  }
753
692
  }
754
693
  }
755
694
  function addRequestInfo(interactionId, labelStack, requestInfo) {
756
- var interaction = _constants.default.get(interactionId);
695
+ var interaction = _constants.interactions.get(interactionId);
757
696
  if (interaction != null) {
758
697
  interaction.requestInfo.push(_objectSpread({
759
698
  labelStack: labelStack
760
699
  }, requestInfo));
761
700
  }
762
701
  }
763
- function isSegmentLabel(obj) {
764
- return obj && typeof obj.name === 'string' && typeof obj.segmentId === 'string';
765
- }
766
- function getSegmentCacheKey(labelStack) {
767
- return labelStack.map(function (l) {
768
- if (isSegmentLabel(l)) {
769
- return "".concat(l.name, "_").concat(l.segmentId);
770
- }
771
- return l.name;
772
- }).join('|');
773
- }
774
702
  function addSegment(labelStack) {
775
- var key = getSegmentCacheKey(labelStack);
776
- var existingSegment = segmentCache.get(key);
703
+ var key = (0, _common.getSegmentCacheKey)(labelStack);
704
+ var existingSegment = _constants.segmentCache.get(key);
777
705
  if (!existingSegment) {
778
706
  var segmentInfo = {
779
707
  labelStack: labelStack
780
708
  };
781
- segmentCache.set(key, segmentInfo);
782
- segmentObservers.forEach(function (observer) {
709
+ _constants.segmentCache.set(key, segmentInfo);
710
+ _constants.segmentObservers.forEach(function (observer) {
783
711
  observer.onAdd(segmentInfo);
784
712
  });
785
713
  }
786
714
  }
787
715
  function removeSegment(labelStack) {
788
- var key = getSegmentCacheKey(labelStack);
789
- var segmentInfo = segmentCache.get(key);
716
+ var key = (0, _common.getSegmentCacheKey)(labelStack);
717
+ var segmentInfo = _constants.segmentCache.get(key);
790
718
  if (segmentInfo) {
791
- segmentCache.delete(JSON.stringify(labelStack));
792
- segmentObservers.forEach(function (observer) {
719
+ _constants.segmentCache.delete(JSON.stringify(labelStack));
720
+ _constants.segmentObservers.forEach(function (observer) {
793
721
  observer.onRemove(segmentInfo);
794
722
  });
795
723
  }
796
724
  }
797
725
  function addRedirect(interactionId, fromUfoName, nextUfoName, nextRouteName, time) {
798
- var interaction = _constants.default.get(interactionId);
726
+ var interaction = _constants.interactions.get(interactionId);
799
727
  if (interaction != null) {
800
728
  interaction.ufoName = nextUfoName;
801
729
  interaction.routeName = nextRouteName;
@@ -803,7 +731,7 @@ function addRedirect(interactionId, fromUfoName, nextUfoName, nextRouteName, tim
803
731
  fromInteractionName: fromUfoName,
804
732
  time: time
805
733
  });
806
- if (isPerformanceTracingEnabled()) {
734
+ if ((0, _common.isPerformanceTracingEnabled)()) {
807
735
  var prevRedirect = interaction.redirects.at(-2);
808
736
  try {
809
737
  var _prevRedirect$time;