@atlaskit/react-ufo 2.2.0 → 2.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/interaction-metrics/index.js +21 -17
  3. package/dist/cjs/interaction-metrics-init/index.js +3 -0
  4. package/dist/cjs/vc/vc-observer/observers/editor-lnv/index.js +187 -0
  5. package/dist/cjs/vc/vc-observer/observers/editor-lnv/test-utils.js +69 -0
  6. package/dist/cjs/vc/vc-observer/observers/index.js +17 -4
  7. package/dist/cjs/vc/vc-observer/observers/ssr-placeholders/index.js +0 -1
  8. package/dist/es2019/interaction-metrics/index.js +21 -17
  9. package/dist/es2019/interaction-metrics-init/index.js +3 -0
  10. package/dist/es2019/vc/vc-observer/observers/editor-lnv/index.js +140 -0
  11. package/dist/es2019/vc/vc-observer/observers/editor-lnv/test-utils.js +41 -0
  12. package/dist/es2019/vc/vc-observer/observers/index.js +14 -0
  13. package/dist/es2019/vc/vc-observer/observers/ssr-placeholders/index.js +0 -1
  14. package/dist/esm/interaction-metrics/index.js +21 -17
  15. package/dist/esm/interaction-metrics-init/index.js +3 -0
  16. package/dist/esm/vc/vc-observer/observers/editor-lnv/index.js +181 -0
  17. package/dist/esm/vc/vc-observer/observers/editor-lnv/test-utils.js +59 -0
  18. package/dist/esm/vc/vc-observer/observers/index.js +17 -4
  19. package/dist/esm/vc/vc-observer/observers/ssr-placeholders/index.js +0 -1
  20. package/dist/types/common/vc/types.d.ts +1 -1
  21. package/dist/types/config/index.d.ts +2 -1
  22. package/dist/types/vc/vc-observer/observers/editor-lnv/index.d.ts +24 -0
  23. package/dist/types/vc/vc-observer/observers/editor-lnv/test-utils.d.ts +35 -0
  24. package/dist/types/vc/vc-observer/observers/index.d.ts +1 -0
  25. package/dist/types/vc/vc-observer/observers/ssr-placeholders/index.d.ts +9 -7
  26. package/dist/types-ts4.5/common/vc/types.d.ts +1 -1
  27. package/dist/types-ts4.5/config/index.d.ts +2 -1
  28. package/dist/types-ts4.5/vc/vc-observer/observers/editor-lnv/index.d.ts +24 -0
  29. package/dist/types-ts4.5/vc/vc-observer/observers/editor-lnv/test-utils.d.ts +35 -0
  30. package/dist/types-ts4.5/vc/vc-observer/observers/index.d.ts +1 -0
  31. package/dist/types-ts4.5/vc/vc-observer/observers/ssr-placeholders/index.d.ts +9 -7
  32. package/package.json +6 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @atlaskit/ufo-interaction-ignore
2
2
 
3
+ ## 2.2.2
4
+
5
+ ### Patch Changes
6
+
7
+ - [#160261](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/160261)
8
+ [`f147e45fb1a5a`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/f147e45fb1a5a) -
9
+ Extends VC90 detector to include editor lazy node view accomodations
10
+
11
+ ## 2.2.1
12
+
13
+ ### Patch Changes
14
+
15
+ - [#162445](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/162445)
16
+ [`19a11c825b2fe`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/19a11c825b2fe) -
17
+ enable additional performance marks in performance tab
18
+
3
19
  ## 2.2.0
4
20
 
5
21
  ### Minor Changes
@@ -75,6 +75,10 @@ function getActiveInteraction() {
75
75
  }
76
76
  return _constants.default.get(interactionId.current);
77
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
+ }
78
82
  function labelStackToString(labelStack, name) {
79
83
  var _stack$map;
80
84
  var stack = (0, _toConsumableArray2.default)(labelStack !== null && labelStack !== void 0 ? labelStack : []);
@@ -154,7 +158,7 @@ function addCustomTiming(interactionId, labelStack, data) {
154
158
  labelStack: labelStack,
155
159
  data: data
156
160
  });
157
- if (window.__REACT_UFO_ENABLE_PERF_TRACING || process.env.NODE_ENV !== 'production') {
161
+ if (isPerformanceTracingEnabled()) {
158
162
  for (var _i = 0, _Object$entries = Object.entries(data); _i < _Object$entries.length; _i++) {
159
163
  var _Object$entries$_i = (0, _slicedToArray2.default)(_Object$entries[_i], 2),
160
164
  key = _Object$entries$_i[0],
@@ -185,7 +189,7 @@ function addMark(interactionId, type, name, labelStack) {
185
189
  time: time
186
190
  });
187
191
  }
188
- if (window.__REACT_UFO_ENABLE_PERF_TRACING || process.env.NODE_ENV !== 'production') {
192
+ if (isPerformanceTracingEnabled()) {
189
193
  performance.mark("\uD83D\uDEF8 ".concat(labelStackToString(labelStack, name), " [").concat(type, "]"), {
190
194
  startTime: time
191
195
  });
@@ -201,7 +205,7 @@ function addMarkToAll(type, name, labelStack) {
201
205
  time: time
202
206
  });
203
207
  });
204
- if (window.__REACT_UFO_ENABLE_PERF_TRACING || process.env.NODE_ENV !== 'production') {
208
+ if (isPerformanceTracingEnabled()) {
205
209
  performance.mark("\uD83D\uDEF8 ".concat(labelStackToString(labelStack, name), " [").concat(type, "]"), {
206
210
  startTime: time
207
211
  });
@@ -220,7 +224,7 @@ function addSpan(interactionId, type, name, labelStack, start) {
220
224
  end: end,
221
225
  size: size
222
226
  });
223
- if (window.__REACT_UFO_ENABLE_PERF_TRACING || process.env.NODE_ENV !== 'production') {
227
+ if (isPerformanceTracingEnabled()) {
224
228
  try {
225
229
  // for Firefox 102 and older
226
230
  performance.measure("\uD83D\uDEF8 ".concat(labelStackToString(labelStack, name), " [").concat(type, "]"), {
@@ -246,7 +250,7 @@ function addSpanToAll(type, name, labelStack, start) {
246
250
  size: size
247
251
  });
248
252
  });
249
- if (window.__REACT_UFO_ENABLE_PERF_TRACING || process.env.NODE_ENV !== 'production') {
253
+ if (isPerformanceTracingEnabled()) {
250
254
  try {
251
255
  // for Firefox 102 and older
252
256
  performance.measure("\uD83D\uDEF8 ".concat(labelStackToString(labelStack, name), " [").concat(type, "]"), {
@@ -299,7 +303,7 @@ function addHold(interactionId, labelStack, name) {
299
303
  addHoldCriterion(id, labelStack, name, start);
300
304
  return function () {
301
305
  var end = performance.now();
302
- if (window.__REACT_UFO_ENABLE_PERF_TRACING || process.env.NODE_ENV !== 'production') {
306
+ if (isPerformanceTracingEnabled()) {
303
307
  try {
304
308
  // for Firefox 102 and older
305
309
  performance.measure("\uD83D\uDEF8 ".concat(labelStackToString(labelStack, name), " [hold]"), {
@@ -419,8 +423,8 @@ function addErrorToAll(name, labelStack, errorType, errorMessage, errorStack) {
419
423
  });
420
424
  }
421
425
  var addProfilerTimings = exports.addProfilerTimings = function addProfilerTimings(interactionId, labelStack, type, actualDuration, baseDuration, startTime, commitTime) {
422
- var _getConfig;
423
- if (window.__REACT_UFO_ENABLE_PERF_TRACING || process.env.NODE_ENV !== 'production') {
426
+ var _getConfig2;
427
+ if (isPerformanceTracingEnabled()) {
424
428
  try {
425
429
  // for Firefox 102 and older
426
430
  performance.measure("\uD83D\uDEF8 ".concat(labelStackToString(labelStack), " [react-profiler] ").concat(type), {
@@ -441,7 +445,7 @@ var addProfilerTimings = exports.addProfilerTimings = function addProfilerTiming
441
445
  startTime: startTime,
442
446
  commitTime: commitTime
443
447
  });
444
- } else if ((_getConfig = (0, _config.getConfig)()) !== null && _getConfig !== void 0 && (_getConfig = _getConfig.postInteractionLog) !== null && _getConfig !== void 0 && _getConfig.enabled) {
448
+ } else if ((_getConfig2 = (0, _config.getConfig)()) !== null && _getConfig2 !== void 0 && (_getConfig2 = _getConfig2.postInteractionLog) !== null && _getConfig2 !== void 0 && _getConfig2.enabled) {
445
449
  postInteractionLog.addProfilerTimings(labelStack, type, actualDuration, baseDuration, startTime, commitTime);
446
450
  }
447
451
  };
@@ -458,7 +462,7 @@ function callCleanUpCallbacks(interaction) {
458
462
  });
459
463
  }
460
464
  var finishInteraction = function finishInteraction(id, data) {
461
- var _getConfig2;
465
+ var _getConfig3;
462
466
  var endTime = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : performance.now();
463
467
  // eslint-disable-next-line no-param-reassign
464
468
  data.end = endTime;
@@ -477,7 +481,7 @@ var finishInteraction = function finishInteraction(id, data) {
477
481
  }
478
482
  (0, _experienceTraceIdContext.clearActiveTrace)();
479
483
  callCleanUpCallbacks(data);
480
- if ((_getConfig2 = (0, _config.getConfig)()) !== null && _getConfig2 !== void 0 && (_getConfig2 = _getConfig2.vc) !== null && _getConfig2 !== void 0 && _getConfig2.stopVCAtInteractionFinish) {
484
+ if ((_getConfig3 = (0, _config.getConfig)()) !== null && _getConfig3 !== void 0 && (_getConfig3 = _getConfig3.vc) !== null && _getConfig3 !== void 0 && _getConfig3.stopVCAtInteractionFinish) {
481
485
  data.vc = (0, _vc.getVCObserver)().getVCRawData();
482
486
  }
483
487
  remove(id);
@@ -486,7 +490,7 @@ var finishInteraction = function finishInteraction(id, data) {
486
490
  if (data.ufoName) {
487
491
  handleInteraction(id, data);
488
492
  }
489
- if (window.__REACT_UFO_ENABLE_PERF_TRACING || process.env.NODE_ENV !== 'production') {
493
+ if (isPerformanceTracingEnabled()) {
490
494
  var profilerTimingMap = new Map();
491
495
  data.reactProfilerTimings.forEach(function (profilerTiming) {
492
496
  var labelStackId = labelStackToIdString(profilerTiming.labelStack);
@@ -551,9 +555,9 @@ function tryComplete(interactionId, endTime) {
551
555
  if (interaction != null) {
552
556
  var noMoreHolds = interaction.holdActive.size === 0;
553
557
  if (noMoreHolds) {
554
- var _getConfig3;
558
+ var _getConfig4;
555
559
  finishInteraction(interactionId, interaction, endTime);
556
- if ((_getConfig3 = (0, _config.getConfig)()) !== null && _getConfig3 !== void 0 && (_getConfig3 = _getConfig3.postInteractionLog) !== null && _getConfig3 !== void 0 && _getConfig3.enabled) {
560
+ if ((_getConfig4 = (0, _config.getConfig)()) !== null && _getConfig4 !== void 0 && (_getConfig4 = _getConfig4.postInteractionLog) !== null && _getConfig4 !== void 0 && _getConfig4.enabled) {
557
561
  postInteractionLog.onInteractionComplete(interaction);
558
562
  }
559
563
  }
@@ -601,9 +605,9 @@ function addOnCancelCallback(id, cancelCallback) {
601
605
  interaction === null || interaction === void 0 || interaction.cancelCallbacks.push(cancelCallback);
602
606
  }
603
607
  function addNewInteraction(interactionId, ufoName, type, startTime, rate, labelStack, routeName) {
604
- var _getConfig4;
608
+ var _getConfig5;
605
609
  var trace = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null;
606
- if ((_getConfig4 = (0, _config.getConfig)()) !== null && _getConfig4 !== void 0 && (_getConfig4 = _getConfig4.postInteractionLog) !== null && _getConfig4 !== void 0 && _getConfig4.enabled) {
610
+ if ((_getConfig5 = (0, _config.getConfig)()) !== null && _getConfig5 !== void 0 && (_getConfig5 = _getConfig5.postInteractionLog) !== null && _getConfig5 !== void 0 && _getConfig5.enabled) {
607
611
  postInteractionLog.reset();
608
612
  }
609
613
  var previousTime = startTime;
@@ -799,7 +803,7 @@ function addRedirect(interactionId, fromUfoName, nextUfoName, nextRouteName, tim
799
803
  fromInteractionName: fromUfoName,
800
804
  time: time
801
805
  });
802
- if (window.__REACT_UFO_ENABLE_PERF_TRACING || process.env.NODE_ENV !== 'production') {
806
+ if (isPerformanceTracingEnabled()) {
803
807
  var prevRedirect = interaction.redirects.at(-2);
804
808
  try {
805
809
  var _prevRedirect$time;
@@ -41,6 +41,9 @@ var init = exports.init = function init(analyticsWebClientAsync, config) {
41
41
  if (initialized) {
42
42
  return;
43
43
  }
44
+ if (window !== undefined) {
45
+ window.__REACT_UFO_ENABLE_PERF_TRACING = Boolean(sessionStorage.getItem('additionalPerfMarks') === 'true');
46
+ }
44
47
  (0, _config.setUFOConfig)(config);
45
48
  if ((_config$vc = config.vc) !== null && _config$vc !== void 0 && _config$vc.enabled) {
46
49
  var vcOptions = {
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.EditorLnvHandler = void 0;
8
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
9
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+ var placeholderDataKey = 'editorLnvPlaceholder'; // data-editor-lnv-placeholder
12
+ var replaceDataKey = 'editorLnvPlaceholderReplace'; // data-editor-lnv-placeholder-replace
13
+ var EditorLnvHandler = exports.EditorLnvHandler = /*#__PURE__*/function () {
14
+ function EditorLnvHandler() {
15
+ var _this = this;
16
+ (0, _classCallCheck2.default)(this, EditorLnvHandler);
17
+ (0, _defineProperty2.default)(this, "placeholders", new Map());
18
+ (0, _defineProperty2.default)(this, "getSizeCallbacks", new Map());
19
+ (0, _defineProperty2.default)(this, "isAddedPlaceholderMatchingSizeCallbacks", new Map());
20
+ (0, _defineProperty2.default)(this, "isAddedReplaceMatchingSizeCallbacks", new Map());
21
+ (0, _defineProperty2.default)(this, "intersectionObserverCallback", function (_ref) {
22
+ var _target$dataset, _target$dataset2;
23
+ var target = _ref.target,
24
+ boundingClientRect = _ref.boundingClientRect;
25
+ _this.intersectionObserver.unobserve(target);
26
+ if (!(target instanceof HTMLElement)) {
27
+ return;
28
+ }
29
+ var placeholderId = (_target$dataset = target.dataset) === null || _target$dataset === void 0 ? void 0 : _target$dataset[placeholderDataKey];
30
+ if (placeholderId && _this.getSizeCallbacks.has(placeholderId)) {
31
+ var _resolve = _this.getSizeCallbacks.get(placeholderId);
32
+ _this.getSizeCallbacks.delete(placeholderId);
33
+ if (!_resolve) {
34
+ return;
35
+ }
36
+ _resolve({
37
+ x: boundingClientRect.x,
38
+ y: boundingClientRect.y,
39
+ width: boundingClientRect.width,
40
+ height: boundingClientRect.height
41
+ });
42
+ return;
43
+ }
44
+ if (placeholderId && _this.isAddedPlaceholderMatchingSizeCallbacks.has(placeholderId)) {
45
+ var _resolve2 = _this.isAddedPlaceholderMatchingSizeCallbacks.get(placeholderId);
46
+ _this.isAddedPlaceholderMatchingSizeCallbacks.delete(placeholderId);
47
+ if (!_resolve2) {
48
+ return;
49
+ }
50
+ var placeholder = _this.placeholders.get(placeholderId);
51
+ if (!placeholder) {
52
+ _resolve2(false);
53
+ return;
54
+ }
55
+ _resolve2(_this.areRectsSameSize(placeholder, boundingClientRect));
56
+ return;
57
+ }
58
+ var replaceId = (_target$dataset2 = target.dataset) === null || _target$dataset2 === void 0 ? void 0 : _target$dataset2[replaceDataKey];
59
+ if (replaceId && _this.isAddedReplaceMatchingSizeCallbacks.has(replaceId)) {
60
+ var _resolve3 = _this.isAddedReplaceMatchingSizeCallbacks.get(replaceId);
61
+ _this.isAddedReplaceMatchingSizeCallbacks.delete(replaceId);
62
+ if (!_resolve3) {
63
+ return;
64
+ }
65
+ var _placeholder = _this.placeholders.get(replaceId);
66
+ if (!_placeholder) {
67
+ _resolve3(false);
68
+ return;
69
+ }
70
+ _this.placeholders.delete(replaceId);
71
+ _resolve3(_this.areRectsSameSize(_placeholder, boundingClientRect));
72
+ return;
73
+ }
74
+ });
75
+ this.intersectionObserver = new IntersectionObserver(function (entries) {
76
+ return entries.filter(function (entry) {
77
+ return entry.intersectionRatio > 0;
78
+ }).forEach(_this.intersectionObserverCallback);
79
+ });
80
+ }
81
+ (0, _createClass2.default)(EditorLnvHandler, [{
82
+ key: "shouldHandleAddedNode",
83
+ value: function shouldHandleAddedNode(el) {
84
+ var _el$dataset, _el$dataset2;
85
+ return ((_el$dataset = el.dataset) === null || _el$dataset === void 0 ? void 0 : _el$dataset[placeholderDataKey]) || ((_el$dataset2 = el.dataset) === null || _el$dataset2 === void 0 ? void 0 : _el$dataset2[replaceDataKey]);
86
+ }
87
+ }, {
88
+ key: "handleAddedNode",
89
+ value: function handleAddedNode(el) {
90
+ var _el$dataset3, _el$dataset4;
91
+ // If it placeholder does not already exist, add it to the map
92
+ var placeholderId = (_el$dataset3 = el.dataset) === null || _el$dataset3 === void 0 ? void 0 : _el$dataset3[placeholderDataKey];
93
+ if (placeholderId) {
94
+ return this.handleAddedPlaceholderNode(el, placeholderId);
95
+ }
96
+ var replaceId = (_el$dataset4 = el.dataset) === null || _el$dataset4 === void 0 ? void 0 : _el$dataset4[replaceDataKey];
97
+ if (replaceId) {
98
+ return this.handleAddedReplaceNode(el, replaceId);
99
+ }
100
+ return Promise.resolve({
101
+ shouldIgnore: false
102
+ });
103
+ }
104
+ }, {
105
+ key: "clear",
106
+ value: function clear() {
107
+ this.placeholders.clear();
108
+ this.intersectionObserver.disconnect();
109
+ }
110
+ }, {
111
+ key: "handleAddedPlaceholderNode",
112
+ value: function handleAddedPlaceholderNode(el, placeholderId) {
113
+ if (this.isExistingPlaceholder(placeholderId)) {
114
+ return this.isAddedPlaceholderMatchingSize(el, placeholderId).then(function (isMatching) {
115
+ return {
116
+ shouldIgnore: isMatching
117
+ };
118
+ });
119
+ }
120
+ return this.registerPlaceholder(el, placeholderId).then(function () {
121
+ return {
122
+ shouldIgnore: false
123
+ };
124
+ });
125
+ }
126
+ }, {
127
+ key: "handleAddedReplaceNode",
128
+ value: function handleAddedReplaceNode(el, placeholderId) {
129
+ if (this.isExistingPlaceholder(placeholderId)) {
130
+ return this.isAddedReplaceMatchingSize(el, placeholderId).then(function (isMatching) {
131
+ return {
132
+ shouldIgnore: isMatching
133
+ };
134
+ });
135
+ }
136
+ return Promise.resolve({
137
+ shouldIgnore: false
138
+ });
139
+ }
140
+ }, {
141
+ key: "isExistingPlaceholder",
142
+ value: function isExistingPlaceholder(placeholderId) {
143
+ return this.placeholders.has(placeholderId);
144
+ }
145
+ }, {
146
+ key: "registerPlaceholder",
147
+ value: function registerPlaceholder(el, placeholderId) {
148
+ var _this2 = this;
149
+ return this.getSize(el, placeholderId).then(function (size) {
150
+ _this2.placeholders.set(placeholderId, size);
151
+ });
152
+ }
153
+ }, {
154
+ key: "getSize",
155
+ value: function getSize(el, placeholderId) {
156
+ var _this3 = this;
157
+ return new Promise(function (resolve) {
158
+ _this3.getSizeCallbacks.set(placeholderId, resolve);
159
+ _this3.intersectionObserver.observe(el);
160
+ });
161
+ }
162
+ }, {
163
+ key: "isAddedPlaceholderMatchingSize",
164
+ value: function isAddedPlaceholderMatchingSize(el, placeholderId) {
165
+ var _this4 = this;
166
+ return new Promise(function (resolve) {
167
+ _this4.isAddedPlaceholderMatchingSizeCallbacks.set(placeholderId, resolve);
168
+ _this4.intersectionObserver.observe(el);
169
+ });
170
+ }
171
+ }, {
172
+ key: "isAddedReplaceMatchingSize",
173
+ value: function isAddedReplaceMatchingSize(el, placeholderId) {
174
+ var _this5 = this;
175
+ return new Promise(function (resolve) {
176
+ _this5.isAddedReplaceMatchingSizeCallbacks.set(placeholderId, resolve);
177
+ _this5.intersectionObserver.observe(el);
178
+ });
179
+ }
180
+ }, {
181
+ key: "areRectsSameSize",
182
+ value: function areRectsSameSize(a, b) {
183
+ return Math.abs(a.width - b.width) < 1 && Math.abs(a.height - b.height) < 1;
184
+ }
185
+ }]);
186
+ return EditorLnvHandler;
187
+ }();
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.createMockIntersectionObserver = createMockIntersectionObserver;
8
+ exports.createPlaceholderElement = createPlaceholderElement;
9
+ exports.createReplaceElement = createReplaceElement;
10
+ exports.handleElements = handleElements;
11
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
14
+ var _toArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toArray"));
15
+ 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; }
16
+ 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; }
17
+ function createPlaceholderElement(id) {
18
+ var el = document.createElement('div');
19
+ el.dataset.editorLnvPlaceholder = id;
20
+ return el;
21
+ }
22
+ function createReplaceElement(id) {
23
+ var el = document.createElement('div');
24
+ el.dataset.editorLnvPlaceholderReplace = id;
25
+ return el;
26
+ }
27
+ function handleElements(elements, handler, observerCallback, callback) {
28
+ var _elements = (0, _toArray2.default)(elements),
29
+ first = _elements[0],
30
+ rest = _elements.slice(1);
31
+ handler.handleAddedNode(first.element).then(function (result) {
32
+ if (!rest.length) {
33
+ // Recursion terminating condition
34
+ callback(result);
35
+ } else {
36
+ // Recursively handle the rest of the elements
37
+ handleElements(rest, handler, observerCallback, callback);
38
+ }
39
+ });
40
+ observerCallback([{
41
+ target: first.element,
42
+ boundingClientRect: first.rect
43
+ }]);
44
+ }
45
+ function createMockIntersectionObserver(cbRef) {
46
+ return /*#__PURE__*/function () {
47
+ function _class(fn) {
48
+ (0, _classCallCheck2.default)(this, _class);
49
+ cbRef.current = function (entries) {
50
+ return fn(entries.map(function (entry) {
51
+ return _objectSpread(_objectSpread({}, entry), {}, {
52
+ intersectionRatio: 1
53
+ });
54
+ }));
55
+ };
56
+ }
57
+ (0, _createClass2.default)(_class, [{
58
+ key: "observe",
59
+ value: function observe() {}
60
+ }, {
61
+ key: "unobserve",
62
+ value: function unobserve() {}
63
+ }, {
64
+ key: "disconnect",
65
+ value: function disconnect() {}
66
+ }]);
67
+ return _class;
68
+ }();
69
+ }
@@ -9,7 +9,9 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
9
9
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
10
10
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
11
11
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
12
13
  var _vcUtils = require("../media-wrapper/vc-utils");
14
+ var _editorLnv = require("./editor-lnv");
13
15
  var _ssrPlaceholders = require("./ssr-placeholders");
14
16
  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; } } }; }
15
17
  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; } }
@@ -59,6 +61,7 @@ var Observers = exports.Observers = /*#__PURE__*/function () {
59
61
  this.intersectionObserver = this.getIntersectionObserver();
60
62
  this.mutationObserver = this.getMutationObserver();
61
63
  this.ssrPlaceholderHandler = new _ssrPlaceholders.SSRPlaceholderHandlers();
64
+ this.editorLnvHandler = new _editorLnv.EditorLnvHandler();
62
65
  }
63
66
  (0, _createClass2.default)(Observers, [{
64
67
  key: "isBrowserSupported",
@@ -95,6 +98,7 @@ var Observers = exports.Observers = /*#__PURE__*/function () {
95
98
  this.callbacks = new Set();
96
99
  this.ssr.reactRootElement = null;
97
100
  this.ssrPlaceholderHandler.clear();
101
+ this.editorLnvHandler.clear();
98
102
  }
99
103
  }, {
100
104
  key: "getTotalTime",
@@ -168,6 +172,15 @@ var Observers = exports.Observers = /*#__PURE__*/function () {
168
172
  });
169
173
  return;
170
174
  }
175
+ if ((0, _platformFeatureFlags.fg)('platform_editor_ed-25557_lnv_add_ssr_placeholder')) {
176
+ if (_this2.editorLnvHandler.shouldHandleAddedNode(node)) {
177
+ _this2.editorLnvHandler.handleAddedNode(node).then(function (_ref) {
178
+ var shouldIgnore = _ref.shouldIgnore;
179
+ _this2.observeElement(node, mutation, 'html', shouldIgnore ? 'editor-lazy-node-view' : ignoreReason);
180
+ });
181
+ return;
182
+ }
183
+ }
171
184
  _this2.observeElement(node, mutation, 'html', ignoreReason);
172
185
  }
173
186
  if (node instanceof Text && node.parentElement != null) {
@@ -264,10 +277,10 @@ var Observers = exports.Observers = /*#__PURE__*/function () {
264
277
  var _this3 = this;
265
278
  return this.isBrowserSupported() ? new IntersectionObserver(function (entries) {
266
279
  _this3.measureStart();
267
- entries.forEach(function (_ref) {
268
- var isIntersecting = _ref.isIntersecting,
269
- ir = _ref.intersectionRect,
270
- target = _ref.target;
280
+ entries.forEach(function (_ref2) {
281
+ var isIntersecting = _ref2.isIntersecting,
282
+ ir = _ref2.intersectionRect,
283
+ target = _ref2.target;
271
284
  var data = _this3.observedMutations.get(target);
272
285
  _this3.observedMutations.delete(target);
273
286
  if (isIntersecting && ir.width > 0 && ir.height > 0) {
@@ -40,7 +40,6 @@ var SSRPlaceholderHandlers = exports.SSRPlaceholderHandlers = /*#__PURE__*/funct
40
40
  _this.callbacks.delete(staticKey);
41
41
  }
42
42
  } else {
43
- // react component check
44
43
  var key = target.dataset.ssrPlaceholderReplace || '';
45
44
  var _resolve2 = _this.reactValidateCallbacks.get(key);
46
45
  if (!_resolve2) {
@@ -24,6 +24,10 @@ export function getActiveInteraction() {
24
24
  }
25
25
  return interactions.get(interactionId.current);
26
26
  }
27
+ function isPerformanceTracingEnabled() {
28
+ var _getConfig;
29
+ return ((_getConfig = getConfig()) === null || _getConfig === void 0 ? void 0 : _getConfig.enableAdditionalPerformanceMarks) || window.__REACT_UFO_ENABLE_PERF_TRACING || process.env.NODE_ENV !== 'production';
30
+ }
27
31
  function labelStackToString(labelStack, name) {
28
32
  var _stack$map;
29
33
  const stack = [...(labelStack !== null && labelStack !== void 0 ? labelStack : [])];
@@ -89,7 +93,7 @@ export function addCustomTiming(interactionId, labelStack, data) {
89
93
  labelStack,
90
94
  data
91
95
  });
92
- if (window.__REACT_UFO_ENABLE_PERF_TRACING || process.env.NODE_ENV !== 'production') {
96
+ if (isPerformanceTracingEnabled()) {
93
97
  for (const [key, timingData] of Object.entries(data)) {
94
98
  const {
95
99
  startTime,
@@ -118,7 +122,7 @@ export function addMark(interactionId, type, name, labelStack, time = performanc
118
122
  time
119
123
  });
120
124
  }
121
- if (window.__REACT_UFO_ENABLE_PERF_TRACING || process.env.NODE_ENV !== 'production') {
125
+ if (isPerformanceTracingEnabled()) {
122
126
  performance.mark(`🛸 ${labelStackToString(labelStack, name)} [${type}]`, {
123
127
  startTime: time
124
128
  });
@@ -133,7 +137,7 @@ export function addMarkToAll(type, name, labelStack, time = performance.now()) {
133
137
  time
134
138
  });
135
139
  });
136
- if (window.__REACT_UFO_ENABLE_PERF_TRACING || process.env.NODE_ENV !== 'production') {
140
+ if (isPerformanceTracingEnabled()) {
137
141
  performance.mark(`🛸 ${labelStackToString(labelStack, name)} [${type}]`, {
138
142
  startTime: time
139
143
  });
@@ -150,7 +154,7 @@ export function addSpan(interactionId, type, name, labelStack, start, end = perf
150
154
  end,
151
155
  size
152
156
  });
153
- if (window.__REACT_UFO_ENABLE_PERF_TRACING || process.env.NODE_ENV !== 'production') {
157
+ if (isPerformanceTracingEnabled()) {
154
158
  try {
155
159
  // for Firefox 102 and older
156
160
  performance.measure(`🛸 ${labelStackToString(labelStack, name)} [${type}]`, {
@@ -174,7 +178,7 @@ export function addSpanToAll(type, name, labelStack, start, end = performance.no
174
178
  size
175
179
  });
176
180
  });
177
- if (window.__REACT_UFO_ENABLE_PERF_TRACING || process.env.NODE_ENV !== 'production') {
181
+ if (isPerformanceTracingEnabled()) {
178
182
  try {
179
183
  // for Firefox 102 and older
180
184
  performance.measure(`🛸 ${labelStackToString(labelStack, name)} [${type}]`, {
@@ -227,7 +231,7 @@ export function addHold(interactionId, labelStack, name) {
227
231
  addHoldCriterion(id, labelStack, name, start);
228
232
  return () => {
229
233
  const end = performance.now();
230
- if (window.__REACT_UFO_ENABLE_PERF_TRACING || process.env.NODE_ENV !== 'production') {
234
+ if (isPerformanceTracingEnabled()) {
231
235
  try {
232
236
  // for Firefox 102 and older
233
237
  performance.measure(`🛸 ${labelStackToString(labelStack, name)} [hold]`, {
@@ -349,8 +353,8 @@ export function addErrorToAll(name, labelStack, errorType, errorMessage, errorSt
349
353
  });
350
354
  }
351
355
  export const addProfilerTimings = (interactionId, labelStack, type, actualDuration, baseDuration, startTime, commitTime) => {
352
- var _getConfig, _getConfig$postIntera;
353
- if (window.__REACT_UFO_ENABLE_PERF_TRACING || process.env.NODE_ENV !== 'production') {
356
+ var _getConfig2, _getConfig2$postInter;
357
+ if (isPerformanceTracingEnabled()) {
354
358
  try {
355
359
  // for Firefox 102 and older
356
360
  performance.measure(`🛸 ${labelStackToString(labelStack)} [react-profiler] ${type}`, {
@@ -371,7 +375,7 @@ export const addProfilerTimings = (interactionId, labelStack, type, actualDurati
371
375
  startTime,
372
376
  commitTime
373
377
  });
374
- } else if ((_getConfig = getConfig()) !== null && _getConfig !== void 0 && (_getConfig$postIntera = _getConfig.postInteractionLog) !== null && _getConfig$postIntera !== void 0 && _getConfig$postIntera.enabled) {
378
+ } else if ((_getConfig2 = getConfig()) !== null && _getConfig2 !== void 0 && (_getConfig2$postInter = _getConfig2.postInteractionLog) !== null && _getConfig2$postInter !== void 0 && _getConfig2$postInter.enabled) {
375
379
  postInteractionLog.addProfilerTimings(labelStack, type, actualDuration, baseDuration, startTime, commitTime);
376
380
  }
377
381
  };
@@ -388,7 +392,7 @@ function callCleanUpCallbacks(interaction) {
388
392
  });
389
393
  }
390
394
  const finishInteraction = (id, data, endTime = performance.now()) => {
391
- var _getConfig2, _getConfig2$vc;
395
+ var _getConfig3, _getConfig3$vc;
392
396
  // eslint-disable-next-line no-param-reassign
393
397
  data.end = endTime;
394
398
  try {
@@ -406,7 +410,7 @@ const finishInteraction = (id, data, endTime = performance.now()) => {
406
410
  }
407
411
  clearActiveTrace();
408
412
  callCleanUpCallbacks(data);
409
- if ((_getConfig2 = getConfig()) !== null && _getConfig2 !== void 0 && (_getConfig2$vc = _getConfig2.vc) !== null && _getConfig2$vc !== void 0 && _getConfig2$vc.stopVCAtInteractionFinish) {
413
+ if ((_getConfig3 = getConfig()) !== null && _getConfig3 !== void 0 && (_getConfig3$vc = _getConfig3.vc) !== null && _getConfig3$vc !== void 0 && _getConfig3$vc.stopVCAtInteractionFinish) {
410
414
  data.vc = getVCObserver().getVCRawData();
411
415
  }
412
416
  remove(id);
@@ -415,7 +419,7 @@ const finishInteraction = (id, data, endTime = performance.now()) => {
415
419
  if (data.ufoName) {
416
420
  handleInteraction(id, data);
417
421
  }
418
- if (window.__REACT_UFO_ENABLE_PERF_TRACING || process.env.NODE_ENV !== 'production') {
422
+ if (isPerformanceTracingEnabled()) {
419
423
  const profilerTimingMap = new Map();
420
424
  data.reactProfilerTimings.forEach(profilerTiming => {
421
425
  const labelStackId = labelStackToIdString(profilerTiming.labelStack);
@@ -471,9 +475,9 @@ export function tryComplete(interactionId, endTime) {
471
475
  if (interaction != null) {
472
476
  const noMoreHolds = interaction.holdActive.size === 0;
473
477
  if (noMoreHolds) {
474
- var _getConfig3, _getConfig3$postInter;
478
+ var _getConfig4, _getConfig4$postInter;
475
479
  finishInteraction(interactionId, interaction, endTime);
476
- if ((_getConfig3 = getConfig()) !== null && _getConfig3 !== void 0 && (_getConfig3$postInter = _getConfig3.postInteractionLog) !== null && _getConfig3$postInter !== void 0 && _getConfig3$postInter.enabled) {
480
+ if ((_getConfig4 = getConfig()) !== null && _getConfig4 !== void 0 && (_getConfig4$postInter = _getConfig4.postInteractionLog) !== null && _getConfig4$postInter !== void 0 && _getConfig4$postInter.enabled) {
477
481
  postInteractionLog.onInteractionComplete(interaction);
478
482
  }
479
483
  }
@@ -521,8 +525,8 @@ export function addOnCancelCallback(id, cancelCallback) {
521
525
  interaction === null || interaction === void 0 ? void 0 : interaction.cancelCallbacks.push(cancelCallback);
522
526
  }
523
527
  export function addNewInteraction(interactionId, ufoName, type, startTime, rate, labelStack, routeName, trace = null) {
524
- var _getConfig4, _getConfig4$postInter;
525
- if ((_getConfig4 = getConfig()) !== null && _getConfig4 !== void 0 && (_getConfig4$postInter = _getConfig4.postInteractionLog) !== null && _getConfig4$postInter !== void 0 && _getConfig4$postInter.enabled) {
528
+ var _getConfig5, _getConfig5$postInter;
529
+ if ((_getConfig5 = getConfig()) !== null && _getConfig5 !== void 0 && (_getConfig5$postInter = _getConfig5.postInteractionLog) !== null && _getConfig5$postInter !== void 0 && _getConfig5$postInter.enabled) {
526
530
  postInteractionLog.reset();
527
531
  }
528
532
  let previousTime = startTime;
@@ -719,7 +723,7 @@ export function addRedirect(interactionId, fromUfoName, nextUfoName, nextRouteNa
719
723
  fromInteractionName: fromUfoName,
720
724
  time
721
725
  });
722
- if (window.__REACT_UFO_ENABLE_PERF_TRACING || process.env.NODE_ENV !== 'production') {
726
+ if (isPerformanceTracingEnabled()) {
723
727
  const prevRedirect = interaction.redirects.at(-2);
724
728
  try {
725
729
  var _prevRedirect$time;
@@ -30,6 +30,9 @@ export const init = (analyticsWebClientAsync, config) => {
30
30
  if (initialized) {
31
31
  return;
32
32
  }
33
+ if (window !== undefined) {
34
+ window.__REACT_UFO_ENABLE_PERF_TRACING = Boolean(sessionStorage.getItem('additionalPerfMarks') === 'true');
35
+ }
33
36
  setUFOConfig(config);
34
37
  if ((_config$vc = config.vc) !== null && _config$vc !== void 0 && _config$vc.enabled) {
35
38
  const vcOptions = {