@atlaskit/react-ufo 2.4.5 → 2.4.7

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 (71) hide show
  1. package/CHANGELOG.md +25 -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 +89 -0
  5. package/dist/cjs/create-payload/common/utils/index.js +85 -1
  6. package/dist/cjs/create-payload/index.js +49 -85
  7. package/dist/cjs/create-post-interaction-log-payload/index.js +1 -4
  8. package/dist/cjs/interaction-metrics/common/constants.js +7 -1
  9. package/dist/cjs/interaction-metrics/common/index.js +151 -0
  10. package/dist/cjs/interaction-metrics/index.js +139 -204
  11. package/dist/cjs/interaction-metrics/post-interaction-log.js +6 -2
  12. package/dist/cjs/interaction-metrics-init/index.js +27 -9
  13. package/dist/cjs/load-hold/UFOLoadHold.js +3 -4
  14. package/dist/cjs/segment/segment.js +7 -9
  15. package/dist/cjs/trace-pageload/index.js +2 -1
  16. package/dist/cjs/vc/vc-observer/observers/index.js +1 -40
  17. package/dist/es2019/config/index.js +22 -0
  18. package/dist/es2019/create-experimental-interaction-metrics-payload/index.js +67 -0
  19. package/dist/es2019/create-payload/common/utils/index.js +86 -1
  20. package/dist/es2019/create-payload/index.js +40 -81
  21. package/dist/es2019/create-post-interaction-log-payload/index.js +1 -4
  22. package/dist/es2019/interaction-metrics/common/constants.js +6 -0
  23. package/dist/es2019/interaction-metrics/common/index.js +103 -0
  24. package/dist/es2019/interaction-metrics/index.js +92 -129
  25. package/dist/es2019/interaction-metrics/post-interaction-log.js +6 -2
  26. package/dist/es2019/interaction-metrics-init/index.js +21 -8
  27. package/dist/es2019/load-hold/UFOLoadHold.js +3 -4
  28. package/dist/es2019/segment/segment.js +6 -12
  29. package/dist/es2019/trace-pageload/index.js +1 -1
  30. package/dist/es2019/vc/vc-observer/observers/index.js +1 -20
  31. package/dist/esm/config/index.js +39 -18
  32. package/dist/esm/create-experimental-interaction-metrics-payload/index.js +81 -0
  33. package/dist/esm/create-payload/common/utils/index.js +80 -1
  34. package/dist/esm/create-payload/index.js +45 -83
  35. package/dist/esm/create-post-interaction-log-payload/index.js +1 -4
  36. package/dist/esm/interaction-metrics/common/constants.js +6 -0
  37. package/dist/esm/interaction-metrics/common/index.js +132 -0
  38. package/dist/esm/interaction-metrics/index.js +87 -156
  39. package/dist/esm/interaction-metrics/post-interaction-log.js +6 -2
  40. package/dist/esm/interaction-metrics-init/index.js +24 -10
  41. package/dist/esm/load-hold/UFOLoadHold.js +3 -4
  42. package/dist/esm/segment/segment.js +7 -9
  43. package/dist/esm/trace-pageload/index.js +1 -1
  44. package/dist/esm/vc/vc-observer/observers/index.js +1 -40
  45. package/dist/types/common/common/types.d.ts +9 -5
  46. package/dist/types/config/index.d.ts +6 -0
  47. package/dist/types/create-experimental-interaction-metrics-payload/index.d.ts +31 -0
  48. package/dist/types/create-payload/common/utils/index.d.ts +12 -0
  49. package/dist/types/create-payload/index.d.ts +13 -5716
  50. package/dist/types/create-post-interaction-log-payload/index.d.ts +2 -0
  51. package/dist/types/interaction-metrics/common/constants.d.ts +31 -1
  52. package/dist/types/interaction-metrics/common/index.d.ts +16 -0
  53. package/dist/types/interaction-metrics/index.d.ts +4 -15
  54. package/dist/types/interaction-metrics/post-interaction-log.d.ts +1 -1
  55. package/dist/types/load-hold/UFOLoadHold.d.ts +1 -2
  56. package/dist/types/trace-pageload/index.d.ts +1 -0
  57. package/dist/types/vc/vc-observer/observers/index.d.ts +0 -1
  58. package/dist/types-ts4.5/common/common/types.d.ts +9 -5
  59. package/dist/types-ts4.5/config/index.d.ts +6 -0
  60. package/dist/types-ts4.5/create-experimental-interaction-metrics-payload/index.d.ts +31 -0
  61. package/dist/types-ts4.5/create-payload/common/utils/index.d.ts +12 -0
  62. package/dist/types-ts4.5/create-payload/index.d.ts +13 -5716
  63. package/dist/types-ts4.5/create-post-interaction-log-payload/index.d.ts +2 -0
  64. package/dist/types-ts4.5/interaction-metrics/common/constants.d.ts +31 -1
  65. package/dist/types-ts4.5/interaction-metrics/common/index.d.ts +16 -0
  66. package/dist/types-ts4.5/interaction-metrics/index.d.ts +4 -15
  67. package/dist/types-ts4.5/interaction-metrics/post-interaction-log.d.ts +1 -1
  68. package/dist/types-ts4.5/load-hold/UFOLoadHold.d.ts +1 -2
  69. package/dist/types-ts4.5/trace-pageload/index.d.ts +1 -0
  70. package/dist/types-ts4.5/vc/vc-observer/observers/index.d.ts +0 -1
  71. package/package.json +2 -1
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
@@ -31,6 +32,7 @@ exports.addRequestInfo = addRequestInfo;
31
32
  exports.addSegment = addSegment;
32
33
  exports.addSpan = addSpan;
33
34
  exports.addSpanToAll = addSpanToAll;
35
+ exports.experimentalInteractionLog = void 0;
34
36
  exports.extractModuleName = extractModuleName;
35
37
  exports.getActiveInteraction = getActiveInteraction;
36
38
  exports.getCurrentInteractionType = getCurrentInteractionType;
@@ -38,36 +40,33 @@ exports.postInteractionLog = exports.interactionSpans = void 0;
38
40
  exports.remove = remove;
39
41
  exports.removeHoldByID = removeHoldByID;
40
42
  exports.removeSegment = removeSegment;
41
- exports.sinkPostInteractionLogHandler = exports.sinkInteractionHandler = void 0;
43
+ exports.sinkPostInteractionLogHandler = exports.sinkInteractionHandler = exports.sinkExperimentalHandler = void 0;
42
44
  exports.tryComplete = tryComplete;
43
45
  exports.updatePageLoadInteractionName = updatePageLoadInteractionName;
44
46
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
45
47
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
46
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
47
48
  var _uuid = require("uuid");
48
49
  var _coinflip = _interopRequireDefault(require("../coinflip"));
49
50
  var _config = require("../config");
51
+ var _createExperimentalInteractionMetricsPayload = require("../create-experimental-interaction-metrics-payload");
52
+ var _utils = require("../create-payload/common/utils");
50
53
  var _experienceTraceIdContext = require("../experience-trace-id-context");
51
54
  var _featureFlagsAccessed = require("../feature-flags-accessed");
52
55
  var _interactionIdContext = require("../interaction-id-context");
53
56
  var _vc = require("../vc");
54
- var _constants = _interopRequireDefault(require("./common/constants"));
57
+ var _common = require("./common");
58
+ var _constants = _interopRequireWildcard(require("./common/constants"));
55
59
  var _postInteractionLog = _interopRequireDefault(require("./post-interaction-log"));
60
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
61
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
56
62
  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
63
  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
64
  var PreviousInteractionLog = {
62
65
  name: undefined,
63
66
  isAborted: undefined
64
67
  };
65
68
  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 = [];
69
+ var experimentalInteractionLog = exports.experimentalInteractionLog = new _createExperimentalInteractionMetricsPayload.ExperimentalInteractionMetrics();
71
70
  function getActiveInteraction() {
72
71
  var interactionId = (0, _interactionIdContext.getInteractionId)();
73
72
  if (!interactionId.current) {
@@ -75,51 +74,6 @@ function getActiveInteraction() {
75
74
  }
76
75
  return _constants.default.get(interactionId.current);
77
76
  }
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
- }
122
- }
123
77
  function remove(interactionId) {
124
78
  _constants.default.delete(interactionId);
125
79
  }
@@ -158,7 +112,7 @@ function addCustomTiming(interactionId, labelStack, data) {
158
112
  labelStack: labelStack,
159
113
  data: data
160
114
  });
161
- if (isPerformanceTracingEnabled()) {
115
+ if ((0, _common.isPerformanceTracingEnabled)()) {
162
116
  for (var _i = 0, _Object$entries = Object.entries(data); _i < _Object$entries.length; _i++) {
163
117
  var _Object$entries$_i = (0, _slicedToArray2.default)(_Object$entries[_i], 2),
164
118
  key = _Object$entries$_i[0],
@@ -167,7 +121,7 @@ function addCustomTiming(interactionId, labelStack, data) {
167
121
  endTime = timingData.endTime;
168
122
  try {
169
123
  // for Firefox 102 and older
170
- performance.measure("\uD83D\uDEF8 ".concat(labelStackToString(labelStack, key), " [custom_timing]"), {
124
+ performance.measure("\uD83D\uDEF8 ".concat((0, _common.labelStackToString)(labelStack, key), " [custom_timing]"), {
171
125
  start: startTime,
172
126
  end: endTime
173
127
  });
@@ -189,8 +143,8 @@ function addMark(interactionId, type, name, labelStack) {
189
143
  time: time
190
144
  });
191
145
  }
192
- if (isPerformanceTracingEnabled()) {
193
- performance.mark("\uD83D\uDEF8 ".concat(labelStackToString(labelStack, name), " [").concat(type, "]"), {
146
+ if ((0, _common.isPerformanceTracingEnabled)()) {
147
+ performance.mark("\uD83D\uDEF8 ".concat((0, _common.labelStackToString)(labelStack, name), " [").concat(type, "]"), {
194
148
  startTime: time
195
149
  });
196
150
  }
@@ -205,8 +159,8 @@ function addMarkToAll(type, name, labelStack) {
205
159
  time: time
206
160
  });
207
161
  });
208
- if (isPerformanceTracingEnabled()) {
209
- performance.mark("\uD83D\uDEF8 ".concat(labelStackToString(labelStack, name), " [").concat(type, "]"), {
162
+ if ((0, _common.isPerformanceTracingEnabled)()) {
163
+ performance.mark("\uD83D\uDEF8 ".concat((0, _common.labelStackToString)(labelStack, name), " [").concat(type, "]"), {
210
164
  startTime: time
211
165
  });
212
166
  }
@@ -224,10 +178,10 @@ function addSpan(interactionId, type, name, labelStack, start) {
224
178
  end: end,
225
179
  size: size
226
180
  });
227
- if (isPerformanceTracingEnabled()) {
181
+ if ((0, _common.isPerformanceTracingEnabled)()) {
228
182
  try {
229
183
  // for Firefox 102 and older
230
- performance.measure("\uD83D\uDEF8 ".concat(labelStackToString(labelStack, name), " [").concat(type, "]"), {
184
+ performance.measure("\uD83D\uDEF8 ".concat((0, _common.labelStackToString)(labelStack, name), " [").concat(type, "]"), {
231
185
  start: start,
232
186
  end: end
233
187
  });
@@ -250,10 +204,10 @@ function addSpanToAll(type, name, labelStack, start) {
250
204
  size: size
251
205
  });
252
206
  });
253
- if (isPerformanceTracingEnabled()) {
207
+ if ((0, _common.isPerformanceTracingEnabled)()) {
254
208
  try {
255
209
  // for Firefox 102 and older
256
- performance.measure("\uD83D\uDEF8 ".concat(labelStackToString(labelStack, name), " [").concat(type, "]"), {
210
+ performance.measure("\uD83D\uDEF8 ".concat((0, _common.labelStackToString)(labelStack, name), " [").concat(type, "]"), {
257
211
  start: start,
258
212
  end: end
259
213
  });
@@ -268,7 +222,6 @@ function addPreload(moduleId, timestamp) {
268
222
  function addLoad(identifier, start, end) {
269
223
  addSpanToAll('bundle_load', identifier, null, start, end - start);
270
224
  }
271
- var moduleLoadingRequests = {};
272
225
  function extractModuleName(input) {
273
226
  var result = input !== null && input !== void 0 ? input : '';
274
227
  result = result.replace(/^\.\/src\/packages\//, '');
@@ -276,37 +229,34 @@ function extractModuleName(input) {
276
229
  result = result.replace(/(\/src)?\/(index|main)\.(tsx|ts|js|jsx)$/, '');
277
230
  return result;
278
231
  }
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) {
232
+ function addHold(interactionId, labelStack, name, experimental) {
294
233
  var interaction = _constants.default.get(interactionId);
295
234
  var id = (0, _uuid.v4)();
296
235
  if (interaction != null) {
297
- var start = performance.now();
298
- interaction.holdActive.set(id, {
236
+ var _getConfig;
237
+ var holdActive = {
299
238
  labelStack: labelStack,
300
239
  name: name,
301
- start: start
302
- });
303
- addHoldCriterion(id, labelStack, name, start);
240
+ start: 0
241
+ };
242
+ var start = performance.now();
243
+ if ((_getConfig = (0, _config.getConfig)()) !== null && _getConfig !== void 0 && (_getConfig = _getConfig.experimentalInteractionMetrics) !== null && _getConfig !== void 0 && _getConfig.enabled && experimental) {
244
+ interaction.holdExpActive.set(id, _objectSpread(_objectSpread({}, holdActive), {}, {
245
+ start: start
246
+ }));
247
+ }
248
+ if (!experimental) {
249
+ interaction.holdActive.set(id, _objectSpread(_objectSpread({}, holdActive), {}, {
250
+ start: start
251
+ }));
252
+ }
253
+ (0, _common.addHoldCriterion)(id, labelStack, name, start);
304
254
  return function () {
305
255
  var end = performance.now();
306
- if (isPerformanceTracingEnabled()) {
256
+ if ((0, _common.isPerformanceTracingEnabled)()) {
307
257
  try {
308
258
  // for Firefox 102 and older
309
- performance.measure("\uD83D\uDEF8 ".concat(labelStackToString(labelStack, name), " [hold]"), {
259
+ performance.measure("\uD83D\uDEF8 ".concat((0, _common.labelStackToString)(labelStack, name), " [hold]"), {
310
260
  start: start,
311
261
  end: end
312
262
  });
@@ -314,14 +264,23 @@ function addHold(interactionId, labelStack, name) {
314
264
  // do nothing
315
265
  }
316
266
  }
317
- removeHoldCriterion(id);
267
+ (0, _common.removeHoldCriterion)(id);
318
268
  var currentInteraction = _constants.default.get(interactionId);
319
269
  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);
270
+ var expHold = interaction.holdExpActive.get(id);
271
+ if (currentInteraction != null) {
272
+ if (currentHold != null) {
273
+ currentInteraction.holdInfo.push(_objectSpread(_objectSpread({}, currentHold), {}, {
274
+ end: end
275
+ }));
276
+ interaction.holdActive.delete(id);
277
+ }
278
+ if (expHold != null) {
279
+ currentInteraction.holdExpInfo.push(_objectSpread(_objectSpread({}, expHold), {}, {
280
+ end: end
281
+ }));
282
+ interaction.holdExpActive.delete(id);
283
+ }
325
284
  }
326
285
  };
327
286
  }
@@ -337,7 +296,7 @@ function addHoldByID(interactionId, labelStack, name, id, ignoreOnSubmit) {
337
296
  start: start,
338
297
  ignoreOnSubmit: ignoreOnSubmit
339
298
  });
340
- addHoldCriterion(id, labelStack, name, start);
299
+ (0, _common.addHoldCriterion)(id, labelStack, name, start);
341
300
  }
342
301
  return function () {};
343
302
  }
@@ -352,7 +311,7 @@ function removeHoldByID(interactionId, id) {
352
311
  end: end
353
312
  }));
354
313
  interaction.holdActive.delete(id);
355
- removeHoldCriterion(id);
314
+ (0, _common.removeHoldCriterion)(id);
356
315
  }
357
316
  }
358
317
  }
@@ -369,19 +328,19 @@ var ModuleLoadingProfiler = exports.ModuleLoadingProfiler = {
369
328
  },
370
329
  onLoadStart: function onLoadStart(info) {
371
330
  var timeoutId = setTimeout(function () {
372
- delete moduleLoadingRequests[info.identifier];
331
+ delete _constants.moduleLoadingRequests[info.identifier];
373
332
  }, 30000);
374
333
  var request = {
375
334
  start: performance.now(),
376
335
  timeoutId: timeoutId
377
336
  };
378
- moduleLoadingRequests[info.identifier] = request;
337
+ _constants.moduleLoadingRequests[info.identifier] = request;
379
338
  },
380
339
  onLoadComplete: function onLoadComplete(info) {
381
- var request = moduleLoadingRequests[info.identifier];
340
+ var request = _constants.moduleLoadingRequests[info.identifier];
382
341
  if (request) {
383
342
  clearTimeout(request.timeoutId);
384
- delete moduleLoadingRequests[info.identifier];
343
+ delete _constants.moduleLoadingRequests[info.identifier];
385
344
  addLoad(extractModuleName(info.identifier), request.start, performance.now());
386
345
  }
387
346
  },
@@ -424,10 +383,10 @@ function addErrorToAll(name, labelStack, errorType, errorMessage, errorStack) {
424
383
  }
425
384
  var addProfilerTimings = exports.addProfilerTimings = function addProfilerTimings(interactionId, labelStack, type, actualDuration, baseDuration, startTime, commitTime) {
426
385
  var _getConfig2;
427
- if (isPerformanceTracingEnabled()) {
386
+ if ((0, _common.isPerformanceTracingEnabled)()) {
428
387
  try {
429
388
  // for Firefox 102 and older
430
- performance.measure("\uD83D\uDEF8 ".concat(labelStackToString(labelStack), " [react-profiler] ").concat(type), {
389
+ performance.measure("\uD83D\uDEF8 ".concat((0, _common.labelStackToString)(labelStack), " [react-profiler] ").concat(type), {
431
390
  start: startTime,
432
391
  duration: actualDuration
433
392
  });
@@ -449,22 +408,10 @@ var addProfilerTimings = exports.addProfilerTimings = function addProfilerTiming
449
408
  postInteractionLog.addProfilerTimings(labelStack, type, actualDuration, baseDuration, startTime, commitTime);
450
409
  }
451
410
  };
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
- }
411
+ var handleInteraction = _common.pushToQueue;
464
412
  var finishInteraction = function finishInteraction(id, data) {
465
413
  var _getConfig3;
466
414
  var endTime = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : performance.now();
467
- // eslint-disable-next-line no-param-reassign
468
415
  data.end = endTime;
469
416
  try {
470
417
  // for Firefox 102 and older
@@ -476,58 +423,20 @@ var finishInteraction = function finishInteraction(id, data) {
476
423
  // do nothing
477
424
  }
478
425
  if (data.featureFlags) {
479
- // eslint-disable-next-line no-param-reassign
480
426
  data.featureFlags.during = Object.fromEntries(_featureFlagsAccessed.currentFeatureFlagsAccessed);
481
427
  }
482
428
  (0, _experienceTraceIdContext.clearActiveTrace)();
483
- callCleanUpCallbacks(data);
429
+ (0, _common.callCleanUpCallbacks)(data);
484
430
  if ((_getConfig3 = (0, _config.getConfig)()) !== null && _getConfig3 !== void 0 && (_getConfig3 = _getConfig3.vc) !== null && _getConfig3 !== void 0 && _getConfig3.stopVCAtInteractionFinish) {
485
431
  data.vc = (0, _vc.getVCObserver)().getVCRawData();
486
432
  }
487
- remove(id);
488
433
  PreviousInteractionLog.name = data.ufoName || 'unknown';
489
434
  PreviousInteractionLog.isAborted = data.abortReason != null;
490
435
  if (data.ufoName) {
491
436
  handleInteraction(id, data);
492
437
  }
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
- }
438
+ if ((0, _common.isPerformanceTracingEnabled)()) {
439
+ (0, _common.reactProfilerTimingMap)(data);
531
440
  }
532
441
  try {
533
442
  // dispatch a global window event to notify the measure is completed
@@ -539,65 +448,100 @@ var finishInteraction = function finishInteraction(id, data) {
539
448
  }
540
449
  };
541
450
  var sinkInteractionHandler = exports.sinkInteractionHandler = function sinkInteractionHandler(sinkFn) {
542
- if (handleInteraction === pushToQueue) {
451
+ if (handleInteraction === _common.pushToQueue) {
543
452
  handleInteraction = sinkFn;
544
- interactionQueue.forEach(function (interaction) {
453
+ _constants.interactionQueue.forEach(function (interaction) {
545
454
  sinkFn(interaction.id, interaction.data);
546
455
  });
547
- interactionQueue.length = 0;
456
+ _constants.interactionQueue.length = 0;
548
457
  }
549
458
  };
459
+ var sinkExperimentalHandler = exports.sinkExperimentalHandler = function sinkExperimentalHandler(sinkFn) {
460
+ experimentalInteractionLog.sinkHandler(sinkFn);
461
+ };
550
462
  var sinkPostInteractionLogHandler = exports.sinkPostInteractionLogHandler = function sinkPostInteractionLogHandler(sinkFn) {
551
463
  postInteractionLog.sinkHandler(sinkFn);
552
464
  };
465
+
466
+ // a flag to prevent mutliple submittions
467
+ var activeSubmitted = false;
553
468
  function tryComplete(interactionId, endTime) {
554
469
  var interaction = _constants.default.get(interactionId);
555
470
  if (interaction != null) {
556
- var noMoreHolds = interaction.holdActive.size === 0;
557
- if (noMoreHolds) {
471
+ var noMoreActiveHolds = interaction.holdActive.size === 0;
472
+ var noMoreExpHolds = interaction.holdExpActive.size === 0;
473
+ var postInteraction = function postInteraction() {
558
474
  var _getConfig4;
559
- finishInteraction(interactionId, interaction, endTime);
560
475
  if ((_getConfig4 = (0, _config.getConfig)()) !== null && _getConfig4 !== void 0 && (_getConfig4 = _getConfig4.postInteractionLog) !== null && _getConfig4 !== void 0 && _getConfig4.enabled) {
561
- postInteractionLog.onInteractionComplete(interaction);
476
+ var _getExperimentalVCMet;
477
+ var experimentalVC90 = (_getExperimentalVCMet = (0, _utils.getExperimentalVCMetrics)(interaction)) === null || _getExperimentalVCMet === void 0 ? void 0 : _getExperimentalVCMet['metric:experimental:vc90'];
478
+ var experimentalTTAI = (0, _utils.getTTAI)(interaction);
479
+ postInteractionLog.onInteractionComplete(_objectSpread(_objectSpread({}, interaction), {}, {
480
+ experimentalTTAI: experimentalTTAI,
481
+ experimentalVC90: experimentalVC90
482
+ }));
483
+ }
484
+ remove(interactionId);
485
+ activeSubmitted = false;
486
+ };
487
+ if (noMoreActiveHolds) {
488
+ if (!activeSubmitted) {
489
+ finishInteraction(interactionId, interaction, endTime);
490
+ activeSubmitted = true;
491
+ }
492
+ if (noMoreExpHolds) {
493
+ var _getConfig5;
494
+ if ((_getConfig5 = (0, _config.getConfig)()) !== null && _getConfig5 !== void 0 && (_getConfig5 = _getConfig5.experimentalInteractionMetrics) !== null && _getConfig5 !== void 0 && _getConfig5.enabled) {
495
+ experimentalInteractionLog.onInteractionComplete(interactionId, interaction, endTime);
496
+ }
497
+ postInteraction();
562
498
  }
563
499
  }
564
500
  }
565
501
  }
566
- function callCancelCallbacks(interaction) {
567
- interaction.cancelCallbacks.reverse().forEach(function (cancelCallback) {
568
- cancelCallback();
569
- });
570
- }
571
502
  function abort(interactionId, abortReason) {
572
503
  var interaction = _constants.default.get(interactionId);
573
504
  if (interaction != null) {
574
- callCancelCallbacks(interaction);
505
+ var _getConfig6;
506
+ (0, _common.callCancelCallbacks)(interaction);
575
507
  interaction.abortReason = abortReason;
576
508
  finishInteraction(interactionId, interaction);
509
+ if ((_getConfig6 = (0, _config.getConfig)()) !== null && _getConfig6 !== void 0 && (_getConfig6 = _getConfig6.experimentalInteractionMetrics) !== null && _getConfig6 !== void 0 && _getConfig6.enabled) {
510
+ experimentalInteractionLog.onInteractionComplete(interactionId, interaction);
511
+ }
512
+ remove(interactionId);
577
513
  }
578
514
  }
579
515
  function abortByNewInteraction(interactionId, interactionName) {
580
516
  var interaction = _constants.default.get(interactionId);
581
517
  if (interaction != null) {
582
- callCancelCallbacks(interaction);
518
+ var _getConfig7;
519
+ (0, _common.callCancelCallbacks)(interaction);
583
520
  interaction.abortReason = 'new_interaction';
584
521
  interaction.abortedByInteractionName = interactionName;
585
522
  finishInteraction(interactionId, interaction);
523
+ if ((_getConfig7 = (0, _config.getConfig)()) !== null && _getConfig7 !== void 0 && (_getConfig7 = _getConfig7.experimentalInteractionMetrics) !== null && _getConfig7 !== void 0 && _getConfig7.enabled) {
524
+ experimentalInteractionLog.onInteractionComplete(interactionId, interaction);
525
+ }
526
+ remove(interactionId);
586
527
  }
587
528
  }
588
529
  function abortAll(abortReason, abortedByInteractionName) {
589
530
  _constants.default.forEach(function (interaction, interactionId) {
531
+ var _getConfig8;
590
532
  var noMoreHolds = interaction.holdActive.size === 0;
591
533
  if (!noMoreHolds) {
592
- callCancelCallbacks(interaction);
593
- // eslint-disable-next-line no-param-reassign
534
+ (0, _common.callCancelCallbacks)(interaction);
594
535
  interaction.abortReason = abortReason;
595
536
  if (abortedByInteractionName != null) {
596
- // eslint-disable-next-line no-param-reassign
597
537
  interaction.abortedByInteractionName = abortedByInteractionName;
598
538
  }
599
539
  }
600
540
  finishInteraction(interactionId, interaction);
541
+ if ((_getConfig8 = (0, _config.getConfig)()) !== null && _getConfig8 !== void 0 && (_getConfig8 = _getConfig8.experimentalInteractionMetrics) !== null && _getConfig8 !== void 0 && _getConfig8.enabled) {
542
+ experimentalInteractionLog.onInteractionComplete(interactionId, interaction);
543
+ }
544
+ remove(interactionId);
601
545
  });
602
546
  }
603
547
  function addOnCancelCallback(id, cancelCallback) {
@@ -605,16 +549,16 @@ function addOnCancelCallback(id, cancelCallback) {
605
549
  interaction === null || interaction === void 0 || interaction.cancelCallbacks.push(cancelCallback);
606
550
  }
607
551
  function addNewInteraction(interactionId, ufoName, type, startTime, rate, labelStack, routeName) {
608
- var _getConfig5;
552
+ var _getConfig9;
609
553
  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) {
554
+ if ((_getConfig9 = (0, _config.getConfig)()) !== null && _getConfig9 !== void 0 && (_getConfig9 = _getConfig9.postInteractionLog) !== null && _getConfig9 !== void 0 && _getConfig9.enabled) {
611
555
  postInteractionLog.reset();
612
556
  }
613
557
  var previousTime = startTime;
614
- var timeoutTime = CLEANUP_TIMEOUT;
558
+ var timeoutTime = _constants.CLEANUP_TIMEOUT;
615
559
  var timerID = setTimeout(function () {
616
560
  abort(interactionId, 'timeout');
617
- }, CLEANUP_TIMEOUT);
561
+ }, _constants.CLEANUP_TIMEOUT);
618
562
  function changeTimeout(newTime) {
619
563
  // we compare if the time left is lower than the new time to no
620
564
  // extend the timeout beyond the initial waiting time
@@ -647,9 +591,11 @@ function addNewInteraction(interactionId, ufoName, type, startTime, rate, labelS
647
591
  requestInfo: [],
648
592
  reactProfilerTimings: [],
649
593
  holdInfo: [],
594
+ holdExpInfo: [],
650
595
  holdActive: new Map(),
596
+ holdExpActive: new Map(),
651
597
  // measure when we execute this code
652
- // from this we can measure the input delay -
598
+ // from this, we can measure the input delay -
653
599
  // how long the browser took to hand execution back to JS)
654
600
  measureStart: performance.now(),
655
601
  rate: rate,
@@ -681,9 +627,9 @@ function addNewInteraction(interactionId, ufoName, type, startTime, rate, labelS
681
627
  },
682
628
  onRemove: function onRemove() {}
683
629
  };
684
- addSegmentObserver(segmentObserver);
630
+ (0, _common.addSegmentObserver)(segmentObserver);
685
631
  metrics.cleanupCallbacks.push(function () {
686
- removeSegmentObserver(segmentObserver);
632
+ (0, _common.removeSegmentObserver)(segmentObserver);
687
633
  });
688
634
  metrics.cleanupCallbacks.push(function () {
689
635
  clearTimeout(metrics.timerID);
@@ -708,7 +654,7 @@ function addBrowserMetricEvent(event) {
708
654
  interaction.legacyMetrics = interaction.legacyMetrics || [];
709
655
  interaction.legacyMetrics.push(event);
710
656
  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);
657
+ interaction.changeTimeout(_constants.CLEANUP_TIMEOUT_AFTER_APDEX);
712
658
  removeHoldByID(interaction.id, interaction.ufoName);
713
659
  }
714
660
  }
@@ -727,7 +673,7 @@ function addApdexToAll(apdex) {
727
673
  // do nothing
728
674
  }
729
675
  if (interaction.type === 'page_load' || interaction.type === 'transition') {
730
- interaction.changeTimeout(CLEANUP_TIMEOUT_AFTER_APDEX);
676
+ interaction.changeTimeout(_constants.CLEANUP_TIMEOUT_AFTER_APDEX);
731
677
  removeHoldByID(key, interaction.ufoName);
732
678
  }
733
679
  });
@@ -747,7 +693,7 @@ function addApdex(interactionId, apdexInfo) {
747
693
  // do nothing
748
694
  }
749
695
  if (interaction.type === 'page_load' || interaction.type === 'transition') {
750
- interaction.changeTimeout(CLEANUP_TIMEOUT_AFTER_APDEX);
696
+ interaction.changeTimeout(_constants.CLEANUP_TIMEOUT_AFTER_APDEX);
751
697
  removeHoldByID(interactionId, interaction.ufoName);
752
698
  }
753
699
  }
@@ -760,36 +706,25 @@ function addRequestInfo(interactionId, labelStack, requestInfo) {
760
706
  }, requestInfo));
761
707
  }
762
708
  }
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
709
  function addSegment(labelStack) {
775
- var key = getSegmentCacheKey(labelStack);
776
- var existingSegment = segmentCache.get(key);
710
+ var key = (0, _common.getSegmentCacheKey)(labelStack);
711
+ var existingSegment = _constants.segmentCache.get(key);
777
712
  if (!existingSegment) {
778
713
  var segmentInfo = {
779
714
  labelStack: labelStack
780
715
  };
781
- segmentCache.set(key, segmentInfo);
782
- segmentObservers.forEach(function (observer) {
716
+ _constants.segmentCache.set(key, segmentInfo);
717
+ _constants.segmentObservers.forEach(function (observer) {
783
718
  observer.onAdd(segmentInfo);
784
719
  });
785
720
  }
786
721
  }
787
722
  function removeSegment(labelStack) {
788
- var key = getSegmentCacheKey(labelStack);
789
- var segmentInfo = segmentCache.get(key);
723
+ var key = (0, _common.getSegmentCacheKey)(labelStack);
724
+ var segmentInfo = _constants.segmentCache.get(key);
790
725
  if (segmentInfo) {
791
- segmentCache.delete(JSON.stringify(labelStack));
792
- segmentObservers.forEach(function (observer) {
726
+ _constants.segmentCache.delete(JSON.stringify(labelStack));
727
+ _constants.segmentObservers.forEach(function (observer) {
793
728
  observer.onRemove(segmentInfo);
794
729
  });
795
730
  }
@@ -803,7 +738,7 @@ function addRedirect(interactionId, fromUfoName, nextUfoName, nextRouteName, tim
803
738
  fromInteractionName: fromUfoName,
804
739
  time: time
805
740
  });
806
- if (isPerformanceTracingEnabled()) {
741
+ if ((0, _common.isPerformanceTracingEnabled)()) {
807
742
  var prevRedirect = interaction.redirects.at(-2);
808
743
  try {
809
744
  var _prevRedirect$time;
@@ -151,7 +151,9 @@ var PostInteractionLog = exports.default = /*#__PURE__*/function () {
151
151
  abortReason = _ref2.abortReason,
152
152
  abortedByInteractionName = _ref2.abortedByInteractionName,
153
153
  routeName = _ref2.routeName,
154
- type = _ref2.type;
154
+ type = _ref2.type,
155
+ experimentalTTAI = _ref2.experimentalTTAI,
156
+ experimentalVC90 = _ref2.experimentalVC90;
155
157
  this.lastInteractionFinish = {
156
158
  ufoName: ufoName,
157
159
  start: start,
@@ -160,7 +162,9 @@ var PostInteractionLog = exports.default = /*#__PURE__*/function () {
160
162
  abortReason: abortReason,
161
163
  abortedByInteractionName: abortedByInteractionName,
162
164
  routeName: routeName,
163
- type: type
165
+ type: type,
166
+ experimentalTTAI: experimentalTTAI,
167
+ experimentalVC90: experimentalVC90
164
168
  };
165
169
  var timeout = ((_getConfig = (0, _config.getConfig)()) === null || _getConfig === void 0 ? void 0 : _getConfig.timeWindowForLateMutationsInMilliseconds) || POST_INTERACTION_LOG_SEND_DEFAULT_TIMEOUT;
166
170
  this.sinkTimeoutId = window.setTimeout(function () {