@atlaskit/react-ufo 3.10.3 → 3.11.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.
- package/CHANGELOG.md +16 -0
- package/dist/cjs/config/index.js +51 -5
- package/dist/cjs/create-experimental-interaction-metrics-payload/index.js +2 -1
- package/dist/cjs/create-payload/utils/get-vc-metrics.js +41 -20
- package/dist/cjs/interaction-metrics/index.js +2 -1
- package/dist/cjs/interaction-metrics/post-interaction-log.js +4 -2
- package/dist/cjs/vc/index.js +123 -35
- package/dist/cjs/vc/vc-observer/getVCRevisionsData.js +48 -23
- package/dist/cjs/vc/vc-observer/index.js +17 -6
- package/dist/cjs/vc/vc-observer-new/entries-timeline/index.js +1 -3
- package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/canvas-pixel.js +25 -7
- package/dist/cjs/vc/vc-observer-new/viewport-observer/index.js +136 -115
- package/dist/es2019/config/index.js +49 -6
- package/dist/es2019/create-experimental-interaction-metrics-payload/index.js +2 -1
- package/dist/es2019/create-payload/utils/get-vc-metrics.js +36 -19
- package/dist/es2019/interaction-metrics/index.js +2 -1
- package/dist/es2019/interaction-metrics/post-interaction-log.js +2 -1
- package/dist/es2019/vc/index.js +98 -35
- package/dist/es2019/vc/vc-observer/getVCRevisionsData.js +52 -25
- package/dist/es2019/vc/vc-observer/index.js +18 -6
- package/dist/es2019/vc/vc-observer-new/entries-timeline/index.js +1 -3
- package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/canvas-pixel.js +23 -7
- package/dist/es2019/vc/vc-observer-new/viewport-observer/index.js +122 -103
- package/dist/esm/config/index.js +49 -5
- package/dist/esm/create-experimental-interaction-metrics-payload/index.js +2 -1
- package/dist/esm/create-payload/utils/get-vc-metrics.js +42 -21
- package/dist/esm/interaction-metrics/index.js +2 -1
- package/dist/esm/interaction-metrics/post-interaction-log.js +4 -2
- package/dist/esm/vc/index.js +123 -35
- package/dist/esm/vc/vc-observer/getVCRevisionsData.js +48 -23
- package/dist/esm/vc/vc-observer/index.js +17 -6
- package/dist/esm/vc/vc-observer-new/entries-timeline/index.js +1 -3
- package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/canvas-pixel.js +25 -7
- package/dist/esm/vc/vc-observer-new/viewport-observer/index.js +136 -115
- package/dist/types/config/index.d.ts +14 -3
- package/dist/types/create-post-interaction-log-payload/index.d.ts +2 -2
- package/dist/types/vc/types.d.ts +3 -1
- package/dist/types/vc/vc-observer/getVCRevisionsData.d.ts +5 -3
- package/dist/types/vc/vc-observer/index.d.ts +1 -1
- package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/canvas-pixel.d.ts +8 -3
- package/dist/types/vc/vc-observer-new/viewport-observer/index.d.ts +8 -1
- package/dist/types-ts4.5/config/index.d.ts +14 -3
- package/dist/types-ts4.5/create-post-interaction-log-payload/index.d.ts +2 -2
- package/dist/types-ts4.5/vc/types.d.ts +3 -1
- package/dist/types-ts4.5/vc/vc-observer/getVCRevisionsData.d.ts +5 -3
- package/dist/types-ts4.5/vc/vc-observer/index.d.ts +1 -1
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/canvas-pixel.d.ts +8 -3
- package/dist/types-ts4.5/vc/vc-observer-new/viewport-observer/index.d.ts +8 -1
- package/package.json +7 -1
package/dist/esm/vc/index.js
CHANGED
|
@@ -7,6 +7,7 @@ var _process;
|
|
|
7
7
|
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
8
8
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
9
9
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
10
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
10
11
|
import { isVCRevisionEnabled } from '../config';
|
|
11
12
|
import { VCObserverNOOP } from './no-op-vc-observer';
|
|
12
13
|
import { VCObserver } from './vc-observer';
|
|
@@ -16,65 +17,152 @@ var VCObserverWrapper = /*#__PURE__*/function () {
|
|
|
16
17
|
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
17
18
|
_classCallCheck(this, VCObserverWrapper);
|
|
18
19
|
this.newVCObserver = null;
|
|
19
|
-
if (
|
|
20
|
-
this.
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
if (fg('platform_ufo_vc_enable_revisions_by_experience')) {
|
|
21
|
+
this.oldVCObserver = null;
|
|
22
|
+
if (isVCRevisionEnabled('fy25.03')) {
|
|
23
|
+
this.newVCObserver = new VCObserverNew({
|
|
24
|
+
selectorConfig: opts.selectorConfig
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
if (isVCRevisionEnabled('fy25.01') || isVCRevisionEnabled('fy25.02')) {
|
|
28
|
+
this.oldVCObserver = new VCObserver(opts);
|
|
29
|
+
}
|
|
30
|
+
} else {
|
|
31
|
+
if (isVCRevisionEnabled('fy25.03')) {
|
|
32
|
+
this.newVCObserver = new VCObserverNew({
|
|
33
|
+
selectorConfig: opts.selectorConfig
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
this.oldVCObserver = new VCObserver(opts);
|
|
23
37
|
}
|
|
24
|
-
this.oldVCObserver = new VCObserver(opts);
|
|
25
38
|
}
|
|
26
39
|
return _createClass(VCObserverWrapper, [{
|
|
27
40
|
key: "start",
|
|
28
|
-
value: function start(
|
|
29
|
-
var
|
|
30
|
-
|
|
31
|
-
(
|
|
32
|
-
|
|
33
|
-
|
|
41
|
+
value: function start(_ref) {
|
|
42
|
+
var startTime = _ref.startTime,
|
|
43
|
+
experienceKey = _ref.experienceKey;
|
|
44
|
+
if (fg('platform_ufo_vc_enable_revisions_by_experience')) {
|
|
45
|
+
if (isVCRevisionEnabled('fy25.01', experienceKey) || isVCRevisionEnabled('fy25.02', experienceKey)) {
|
|
46
|
+
var _this$oldVCObserver;
|
|
47
|
+
(_this$oldVCObserver = this.oldVCObserver) === null || _this$oldVCObserver === void 0 || _this$oldVCObserver.start({
|
|
48
|
+
startTime: startTime
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
if (isVCRevisionEnabled('fy25.03', experienceKey)) {
|
|
52
|
+
var _this$newVCObserver;
|
|
53
|
+
(_this$newVCObserver = this.newVCObserver) === null || _this$newVCObserver === void 0 || _this$newVCObserver.start({
|
|
54
|
+
startTime: startTime
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
} else {
|
|
58
|
+
var _this$oldVCObserver2, _this$newVCObserver2;
|
|
59
|
+
(_this$oldVCObserver2 = this.oldVCObserver) === null || _this$oldVCObserver2 === void 0 || _this$oldVCObserver2.start({
|
|
60
|
+
startTime: startTime
|
|
61
|
+
});
|
|
62
|
+
(_this$newVCObserver2 = this.newVCObserver) === null || _this$newVCObserver2 === void 0 || _this$newVCObserver2.start({
|
|
63
|
+
startTime: startTime
|
|
64
|
+
});
|
|
65
|
+
}
|
|
34
66
|
}
|
|
35
67
|
}, {
|
|
36
68
|
key: "stop",
|
|
37
|
-
value: function stop() {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
69
|
+
value: function stop(experienceKey) {
|
|
70
|
+
if (fg('platform_ufo_vc_enable_revisions_by_experience')) {
|
|
71
|
+
if (isVCRevisionEnabled('fy25.01', experienceKey) || isVCRevisionEnabled('fy25.02', experienceKey)) {
|
|
72
|
+
var _this$oldVCObserver3;
|
|
73
|
+
(_this$oldVCObserver3 = this.oldVCObserver) === null || _this$oldVCObserver3 === void 0 || _this$oldVCObserver3.stop();
|
|
74
|
+
}
|
|
75
|
+
if (isVCRevisionEnabled('fy25.03', experienceKey)) {
|
|
76
|
+
var _this$newVCObserver3;
|
|
77
|
+
(_this$newVCObserver3 = this.newVCObserver) === null || _this$newVCObserver3 === void 0 || _this$newVCObserver3.stop();
|
|
78
|
+
}
|
|
79
|
+
} else {
|
|
80
|
+
var _this$oldVCObserver4, _this$newVCObserver4;
|
|
81
|
+
(_this$oldVCObserver4 = this.oldVCObserver) === null || _this$oldVCObserver4 === void 0 || _this$oldVCObserver4.stop();
|
|
82
|
+
(_this$newVCObserver4 = this.newVCObserver) === null || _this$newVCObserver4 === void 0 || _this$newVCObserver4.stop();
|
|
83
|
+
}
|
|
41
84
|
}
|
|
42
85
|
}, {
|
|
43
86
|
key: "getVCRawData",
|
|
44
87
|
value: function getVCRawData() {
|
|
45
|
-
var _this$oldVCObserver$g, _this$
|
|
46
|
-
return (_this$oldVCObserver$g = (_this$
|
|
88
|
+
var _this$oldVCObserver$g, _this$oldVCObserver5;
|
|
89
|
+
return (_this$oldVCObserver$g = (_this$oldVCObserver5 = this.oldVCObserver) === null || _this$oldVCObserver5 === void 0 ? void 0 : _this$oldVCObserver5.getVCRawData()) !== null && _this$oldVCObserver$g !== void 0 ? _this$oldVCObserver$g : null;
|
|
47
90
|
}
|
|
48
91
|
}, {
|
|
49
92
|
key: "getVCResult",
|
|
50
93
|
value: function () {
|
|
51
94
|
var _getVCResult = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(param) {
|
|
52
|
-
var _this$
|
|
53
|
-
var oldResult, newResult;
|
|
95
|
+
var _this$oldVCObserver6, _this$newVCObserver5, _ref2, experienceKey, v1v2Result, v3Result, _this$oldVCObserver7, _this$newVCObserver6, _ref3, oldResult, newResult;
|
|
54
96
|
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
55
97
|
while (1) switch (_context.prev = _context.next) {
|
|
56
98
|
case 0:
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
99
|
+
if (!fg('platform_ufo_vc_enable_revisions_by_experience')) {
|
|
100
|
+
_context.next = 23;
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
experienceKey = param.experienceKey;
|
|
104
|
+
if (!(isVCRevisionEnabled('fy25.01', experienceKey) || isVCRevisionEnabled('fy25.02', experienceKey))) {
|
|
105
|
+
_context.next = 8;
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
61
108
|
_context.next = 5;
|
|
62
|
-
return (_this$
|
|
109
|
+
return (_this$oldVCObserver6 = this.oldVCObserver) === null || _this$oldVCObserver6 === void 0 ? void 0 : _this$oldVCObserver6.getVCResult(param);
|
|
110
|
+
case 5:
|
|
111
|
+
_context.t0 = _context.sent;
|
|
112
|
+
_context.next = 9;
|
|
113
|
+
break;
|
|
114
|
+
case 8:
|
|
115
|
+
_context.t0 = {};
|
|
116
|
+
case 9:
|
|
117
|
+
v1v2Result = _context.t0;
|
|
118
|
+
if (!isVCRevisionEnabled('fy25.03', experienceKey)) {
|
|
119
|
+
_context.next = 16;
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
_context.next = 13;
|
|
123
|
+
return (_this$newVCObserver5 = this.newVCObserver) === null || _this$newVCObserver5 === void 0 ? void 0 : _this$newVCObserver5.getVCResult({
|
|
63
124
|
start: param.start,
|
|
64
125
|
stop: param.stop
|
|
65
126
|
});
|
|
66
|
-
case
|
|
127
|
+
case 13:
|
|
128
|
+
_context.t1 = _context.sent;
|
|
129
|
+
_context.next = 17;
|
|
130
|
+
break;
|
|
131
|
+
case 16:
|
|
132
|
+
_context.t1 = [];
|
|
133
|
+
case 17:
|
|
134
|
+
v3Result = _context.t1;
|
|
135
|
+
if (v3Result) {
|
|
136
|
+
_context.next = 20;
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
return _context.abrupt("return", v1v2Result !== null && v1v2Result !== void 0 ? v1v2Result : {});
|
|
140
|
+
case 20:
|
|
141
|
+
return _context.abrupt("return", _objectSpread(_objectSpread({}, v1v2Result), {}, {
|
|
142
|
+
'ufo:vc:rev': [].concat(_toConsumableArray((_ref2 = v1v2Result === null || v1v2Result === void 0 ? void 0 : v1v2Result['ufo:vc:rev']) !== null && _ref2 !== void 0 ? _ref2 : []), _toConsumableArray(v3Result !== null && v3Result !== void 0 ? v3Result : []))
|
|
143
|
+
}));
|
|
144
|
+
case 23:
|
|
145
|
+
_context.next = 25;
|
|
146
|
+
return (_this$oldVCObserver7 = this.oldVCObserver) === null || _this$oldVCObserver7 === void 0 ? void 0 : _this$oldVCObserver7.getVCResult(param);
|
|
147
|
+
case 25:
|
|
148
|
+
oldResult = _context.sent;
|
|
149
|
+
_context.next = 28;
|
|
150
|
+
return (_this$newVCObserver6 = this.newVCObserver) === null || _this$newVCObserver6 === void 0 ? void 0 : _this$newVCObserver6.getVCResult({
|
|
151
|
+
start: param.start,
|
|
152
|
+
stop: param.stop
|
|
153
|
+
});
|
|
154
|
+
case 28:
|
|
67
155
|
newResult = _context.sent;
|
|
68
156
|
if (!(oldResult && !newResult)) {
|
|
69
|
-
_context.next =
|
|
157
|
+
_context.next = 31;
|
|
70
158
|
break;
|
|
71
159
|
}
|
|
72
160
|
return _context.abrupt("return", oldResult);
|
|
73
|
-
case
|
|
161
|
+
case 31:
|
|
74
162
|
return _context.abrupt("return", _objectSpread(_objectSpread({}, oldResult !== null && oldResult !== void 0 ? oldResult : {}), {}, {
|
|
75
|
-
'ufo:vc:rev': [].concat(_toConsumableArray((
|
|
163
|
+
'ufo:vc:rev': [].concat(_toConsumableArray((_ref3 = oldResult === null || oldResult === void 0 ? void 0 : oldResult['ufo:vc:rev']) !== null && _ref3 !== void 0 ? _ref3 : []), _toConsumableArray(newResult !== null && newResult !== void 0 ? newResult : []))
|
|
76
164
|
}));
|
|
77
|
-
case
|
|
165
|
+
case 32:
|
|
78
166
|
case "end":
|
|
79
167
|
return _context.stop();
|
|
80
168
|
}
|
|
@@ -88,20 +176,20 @@ var VCObserverWrapper = /*#__PURE__*/function () {
|
|
|
88
176
|
}, {
|
|
89
177
|
key: "setSSRElement",
|
|
90
178
|
value: function setSSRElement(element) {
|
|
91
|
-
var _this$
|
|
92
|
-
(_this$
|
|
179
|
+
var _this$oldVCObserver8;
|
|
180
|
+
(_this$oldVCObserver8 = this.oldVCObserver) === null || _this$oldVCObserver8 === void 0 || _this$oldVCObserver8.setSSRElement(element);
|
|
93
181
|
}
|
|
94
182
|
}, {
|
|
95
183
|
key: "setReactRootRenderStart",
|
|
96
184
|
value: function setReactRootRenderStart(startTime) {
|
|
97
|
-
var _this$
|
|
98
|
-
(_this$
|
|
185
|
+
var _this$oldVCObserver9;
|
|
186
|
+
(_this$oldVCObserver9 = this.oldVCObserver) === null || _this$oldVCObserver9 === void 0 || _this$oldVCObserver9.setReactRootRenderStart(startTime || performance.now());
|
|
99
187
|
}
|
|
100
188
|
}, {
|
|
101
189
|
key: "setReactRootRenderStop",
|
|
102
190
|
value: function setReactRootRenderStop(stopTime) {
|
|
103
|
-
var _this$
|
|
104
|
-
(_this$
|
|
191
|
+
var _this$oldVCObserver10;
|
|
192
|
+
(_this$oldVCObserver10 = this.oldVCObserver) === null || _this$oldVCObserver10 === void 0 || _this$oldVCObserver10.setReactRootRenderStop(stopTime || performance.now());
|
|
105
193
|
}
|
|
106
194
|
}]);
|
|
107
195
|
}(); // Some products set this variable to indicate it is running in SSR
|
|
@@ -2,6 +2,7 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
|
2
2
|
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; } } }; }
|
|
3
3
|
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; } }
|
|
4
4
|
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; }
|
|
5
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
5
6
|
import { isVCRevisionEnabled } from '../../config';
|
|
6
7
|
import { getPageVisibilityState } from '../../hidden-timing';
|
|
7
8
|
import { getRevisions } from './revisions/revisions';
|
|
@@ -24,7 +25,7 @@ function createVCDetails(calculatedVC, shouldHaveVCmetric) {
|
|
|
24
25
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
25
26
|
var key = _step.value;
|
|
26
27
|
details[key] = {
|
|
27
|
-
t: VC[key],
|
|
28
|
+
t: VC[key] || -1,
|
|
28
29
|
e: VCBox[key] || READONLY_EMPTY_ARRAY
|
|
29
30
|
};
|
|
30
31
|
}
|
|
@@ -45,8 +46,13 @@ export function getVCRevisionsData(_ref) {
|
|
|
45
46
|
multiHeatmap = _ref.multiHeatmap,
|
|
46
47
|
ssr = _ref.ssr,
|
|
47
48
|
calculatedVC = _ref.calculatedVC,
|
|
48
|
-
calculatedVCNext = _ref.calculatedVCNext
|
|
49
|
-
|
|
49
|
+
calculatedVCNext = _ref.calculatedVCNext,
|
|
50
|
+
experienceKey = _ref.experienceKey;
|
|
51
|
+
var isTTVCv3Enabled = fg('platform_ufo_vc_enable_revisions_by_experience') ? isVCRevisionEnabled('fy25.03', experienceKey) : isVCRevisionEnabled('fy25.03');
|
|
52
|
+
|
|
53
|
+
// As part of `platform_ufo_vc_enable_revisions_by_experience`, we are looking to turn off the `multiHeatmap` branch of code
|
|
54
|
+
// for calculating TTVC, and instead rely on existing values already available, e.g. `calculatedVC` and `calculatedVCNext`
|
|
55
|
+
if (!isTTVCv3Enabled && !fg('platform_ufo_vc_enable_revisions_by_experience')) {
|
|
50
56
|
if (!multiHeatmap) {
|
|
51
57
|
return null;
|
|
52
58
|
}
|
|
@@ -69,29 +75,48 @@ export function getVCRevisionsData(_ref) {
|
|
|
69
75
|
clean: isVCClean
|
|
70
76
|
}));
|
|
71
77
|
}
|
|
72
|
-
|
|
73
|
-
// Calculate these conditions once
|
|
74
78
|
var pageVisibilityUpToTTAI = getPageVisibilityState(interaction.start, interaction.end);
|
|
75
79
|
var isVisiblePageVisibleUpToTTAI = pageVisibilityUpToTTAI === 'visible';
|
|
76
80
|
var shouldHaveVCmetric = isVCClean && !isEventAborted && isVisiblePageVisibleUpToTTAI;
|
|
81
|
+
if (fg('platform_ufo_vc_enable_revisions_by_experience')) {
|
|
82
|
+
var availableVCRevisionPayloads = [];
|
|
83
|
+
if (isVCRevisionEnabled('fy25.01', experienceKey)) {
|
|
84
|
+
availableVCRevisionPayloads.push({
|
|
85
|
+
revision: 'fy25.01',
|
|
86
|
+
clean: isVCClean,
|
|
87
|
+
'metric:vc90': shouldHaveVCmetric ? calculatedVC.VC['90'] : null,
|
|
88
|
+
vcDetails: createVCDetails(calculatedVC, shouldHaveVCmetric)
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
if (isVCRevisionEnabled('fy25.02', experienceKey)) {
|
|
92
|
+
availableVCRevisionPayloads.push({
|
|
93
|
+
revision: 'fy25.02',
|
|
94
|
+
clean: isVCClean,
|
|
95
|
+
'metric:vc90': shouldHaveVCmetric ? calculatedVCNext.VC['90'] : null,
|
|
96
|
+
vcDetails: createVCDetails(calculatedVCNext, shouldHaveVCmetric)
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
return _defineProperty({}, "".concat(fullPrefix, "vc:rev"), availableVCRevisionPayloads);
|
|
100
|
+
} else {
|
|
101
|
+
// Create the V2 revision object which is always needed
|
|
102
|
+
var ttvcV2Revision = {
|
|
103
|
+
revision: 'fy25.02',
|
|
104
|
+
clean: isVCClean,
|
|
105
|
+
'metric:vc90': shouldHaveVCmetric ? calculatedVCNext.VC['90'] : null,
|
|
106
|
+
vcDetails: createVCDetails(calculatedVCNext, shouldHaveVCmetric)
|
|
107
|
+
};
|
|
108
|
+
var isTTVCv1Disabled = !isVCRevisionEnabled('fy25.01');
|
|
109
|
+
if (isTTVCv1Disabled) {
|
|
110
|
+
return _defineProperty({}, "".concat(fullPrefix, "vc:rev"), [ttvcV2Revision]);
|
|
111
|
+
}
|
|
77
112
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
return _defineProperty({}, "".concat(fullPrefix, "vc:rev"), [ttvcV2Revision]);
|
|
113
|
+
// Only create ttvcV1Revision when we're actually going to use it
|
|
114
|
+
var ttvcV1Revision = {
|
|
115
|
+
revision: 'fy25.01',
|
|
116
|
+
clean: isVCClean,
|
|
117
|
+
'metric:vc90': shouldHaveVCmetric ? calculatedVC.VC['90'] : null,
|
|
118
|
+
vcDetails: createVCDetails(calculatedVC, shouldHaveVCmetric)
|
|
119
|
+
};
|
|
120
|
+
return _defineProperty({}, "".concat(fullPrefix, "vc:rev"), [ttvcV1Revision, ttvcV2Revision]);
|
|
87
121
|
}
|
|
88
|
-
|
|
89
|
-
// Only create ttvcV1Revision when we're actually going to use it
|
|
90
|
-
var ttvcV1Revision = {
|
|
91
|
-
revision: 'fy25.01',
|
|
92
|
-
clean: isVCClean,
|
|
93
|
-
'metric:vc90': shouldHaveVCmetric ? calculatedVC.VC['90'] : null,
|
|
94
|
-
vcDetails: createVCDetails(calculatedVC, shouldHaveVCmetric)
|
|
95
|
-
};
|
|
96
|
-
return _defineProperty({}, "".concat(fullPrefix, "vc:rev"), [ttvcV1Revision, ttvcV2Revision]);
|
|
97
122
|
}
|
|
@@ -11,6 +11,7 @@ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbol
|
|
|
11
11
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
12
12
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
13
13
|
import { isVCRevisionEnabled } from '../../config';
|
|
14
|
+
import { getActiveInteraction } from '../../interaction-metrics';
|
|
14
15
|
import { attachAbortListeners } from './attachAbortListeners';
|
|
15
16
|
import { getVCRevisionsData } from './getVCRevisionsData';
|
|
16
17
|
import { getViewportHeight, getViewportWidth } from './getViewport';
|
|
@@ -98,11 +99,11 @@ export var VCObserver = /*#__PURE__*/function () {
|
|
|
98
99
|
});
|
|
99
100
|
_defineProperty(this, "getVCResult", /*#__PURE__*/function () {
|
|
100
101
|
var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref3) {
|
|
101
|
-
var start, stop, tti, prefix, ssr, vc, isEventAborted, startTime, fullPrefix, rawData, abortReason, abortReasonInfo, heatmap, heatmapNext, outOfBoundaryInfo, totalTime, componentsLog, viewport, devToolsEnabled, ratios, multiHeatmap, isTTVCv1Disabled, vcAbortedResultWithRevisions, ttvcV1Result, VC, VCBox, VCEntries, totalPainted, _componentsLog, vcNext, outOfBoundary, stopTime, ttvcV1DevToolInfo, ttvcV2DevToolInfo, isVCClean, revisionsData, speedIndex, isTTVCv3Enabled;
|
|
102
|
+
var start, stop, tti, prefix, ssr, vc, isEventAborted, experienceKey, startTime, fullPrefix, rawData, abortReason, abortReasonInfo, heatmap, heatmapNext, outOfBoundaryInfo, totalTime, componentsLog, viewport, devToolsEnabled, ratios, multiHeatmap, isTTVCv1Disabled, vcAbortedResultWithRevisions, ttvcV1Result, VC, VCBox, VCEntries, totalPainted, _componentsLog, vcNext, outOfBoundary, stopTime, ttvcV1DevToolInfo, ttvcV2DevToolInfo, isVCClean, revisionsData, speedIndex, isTTVCv3Enabled;
|
|
102
103
|
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
103
104
|
while (1) switch (_context.prev = _context.next) {
|
|
104
105
|
case 0:
|
|
105
|
-
start = _ref3.start, stop = _ref3.stop, tti = _ref3.tti, prefix = _ref3.prefix, ssr = _ref3.ssr, vc = _ref3.vc, isEventAborted = _ref3.isEventAborted;
|
|
106
|
+
start = _ref3.start, stop = _ref3.stop, tti = _ref3.tti, prefix = _ref3.prefix, ssr = _ref3.ssr, vc = _ref3.vc, isEventAborted = _ref3.isEventAborted, experienceKey = _ref3.experienceKey;
|
|
106
107
|
startTime = performance.now(); // add local measurement
|
|
107
108
|
fullPrefix = prefix !== undefined && prefix !== '' ? "".concat(prefix, ":") : '';
|
|
108
109
|
rawData = vc !== undefined ? vc : _this.getVCRawData();
|
|
@@ -113,7 +114,7 @@ export var VCObserver = /*#__PURE__*/function () {
|
|
|
113
114
|
return _context.abrupt("return", {});
|
|
114
115
|
case 6:
|
|
115
116
|
abortReason = rawData.abortReason, abortReasonInfo = rawData.abortReasonInfo, heatmap = rawData.heatmap, heatmapNext = rawData.heatmapNext, outOfBoundaryInfo = rawData.outOfBoundaryInfo, totalTime = rawData.totalTime, componentsLog = rawData.componentsLog, viewport = rawData.viewport, devToolsEnabled = rawData.devToolsEnabled, ratios = rawData.ratios, multiHeatmap = rawData.multiHeatmap;
|
|
116
|
-
isTTVCv1Disabled = !isVCRevisionEnabled('fy25.01'); // NOTE: as part of platform_ufo_add_vc_abort_reason_by_revisions feature,
|
|
117
|
+
isTTVCv1Disabled = fg('platform_ufo_vc_enable_revisions_by_experience') ? !isVCRevisionEnabled('fy25.01', experienceKey) : !isVCRevisionEnabled('fy25.01'); // NOTE: as part of platform_ufo_add_vc_abort_reason_by_revisions feature,
|
|
117
118
|
// we want to report abort by scroll events the same way as other abort reasons
|
|
118
119
|
// i.e. not have the concept of `abortReason.blocking` anymore
|
|
119
120
|
if (!(abortReasonInfo !== null && fg('platform_ufo_add_vc_abort_reason_by_revisions'))) {
|
|
@@ -301,7 +302,8 @@ export var VCObserver = /*#__PURE__*/function () {
|
|
|
301
302
|
VC: vcNext.VC,
|
|
302
303
|
VCBox: vcNext.VCBox
|
|
303
304
|
},
|
|
304
|
-
isEventAborted: isEventAborted
|
|
305
|
+
isEventAborted: isEventAborted,
|
|
306
|
+
experienceKey: experienceKey
|
|
305
307
|
});
|
|
306
308
|
speedIndex = _defineProperty(_defineProperty({}, "ufo:speedIndex", isTTVCv1Disabled ? vcNext.VCEntries.speedIndex : VCEntries.speedIndex), "ufo:next:speedIndex", vcNext.VCEntries.speedIndex);
|
|
307
309
|
if (!isTTVCv1Disabled) {
|
|
@@ -310,7 +312,7 @@ export var VCObserver = /*#__PURE__*/function () {
|
|
|
310
312
|
}
|
|
311
313
|
return _context.abrupt("return", _objectSpread(_objectSpread(_objectSpread(_defineProperty(_defineProperty(_defineProperty({}, "".concat(fullPrefix, "vc:size"), viewport), "".concat(fullPrefix, "vc:time"), Math.round(totalTime + (stopTime - startTime))), "".concat(fullPrefix, "vc:ratios"), ratios), outOfBoundary), {}, _defineProperty({}, "".concat(fullPrefix, "vc:ignored"), _this.getIgnoredElements(componentsLog)), revisionsData), speedIndex));
|
|
312
314
|
case 32:
|
|
313
|
-
isTTVCv3Enabled = isVCRevisionEnabled('fy25.03');
|
|
315
|
+
isTTVCv3Enabled = fg('platform_ufo_vc_enable_revisions_by_experience') ? isVCRevisionEnabled('fy25.03', experienceKey) : isVCRevisionEnabled('fy25.03');
|
|
314
316
|
return _context.abrupt("return", _objectSpread(_objectSpread(_objectSpread(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({
|
|
315
317
|
'metrics:vc': VC
|
|
316
318
|
}, "".concat(fullPrefix, "vc:state"), true), "".concat(fullPrefix, "vc:clean"), isVCClean), "".concat(fullPrefix, "vc:dom"), VCBox), "".concat(fullPrefix, "vc:updates"), isTTVCv3Enabled ? undefined : VCEntries.rel.slice(0, 50)), "".concat(fullPrefix, "vc:size"), viewport), "".concat(fullPrefix, "vc:time"), Math.round(totalTime + (stopTime - startTime))), "".concat(fullPrefix, "vc:total"), totalPainted), "".concat(fullPrefix, "vc:ratios"), ratios), outOfBoundary), {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty({}, "".concat(fullPrefix, "vc:next"), vcNext.VC), "".concat(fullPrefix, "vc:next:updates"), isTTVCv3Enabled ? undefined : vcNext.VCEntries.rel.slice(0, 50)), "".concat(fullPrefix, "vc:next:dom"), vcNext.VCBox), "".concat(fullPrefix, "vc:ignored"), _this.getIgnoredElements(componentsLog)), revisionsData), speedIndex));
|
|
@@ -327,7 +329,12 @@ export var VCObserver = /*#__PURE__*/function () {
|
|
|
327
329
|
_defineProperty(this, "handleUpdate", function (rawTime, intersectionRect, targetName, element, type, ignoreReason, attributeName, oldValue, newValue) {
|
|
328
330
|
_this.measureStart();
|
|
329
331
|
_this.legacyHandleUpdate(rawTime, intersectionRect, targetName, element, type, ignoreReason, attributeName, oldValue, newValue);
|
|
330
|
-
|
|
332
|
+
var isTTVCv3Disabled = !isVCRevisionEnabled('fy25.03');
|
|
333
|
+
if (fg('platform_ufo_vc_enable_revisions_by_experience')) {
|
|
334
|
+
var interaction = getActiveInteraction();
|
|
335
|
+
isTTVCv3Disabled = !isVCRevisionEnabled('fy25.03', interaction === null || interaction === void 0 ? void 0 : interaction.ufoName);
|
|
336
|
+
}
|
|
337
|
+
if (isTTVCv3Disabled) {
|
|
331
338
|
_this.onViewportChangeDetected({
|
|
332
339
|
timestamp: rawTime,
|
|
333
340
|
intersectionRect: intersectionRect,
|
|
@@ -351,6 +358,10 @@ export var VCObserver = /*#__PURE__*/function () {
|
|
|
351
358
|
_this.applyChangesToHeatMap(mappedValues, time, _this.heatmapNext);
|
|
352
359
|
}
|
|
353
360
|
var isTTVCv1Disabled = !isVCRevisionEnabled('fy25.01');
|
|
361
|
+
if (fg('platform_ufo_vc_enable_revisions_by_experience')) {
|
|
362
|
+
var interaction = getActiveInteraction();
|
|
363
|
+
isTTVCv1Disabled = !isVCRevisionEnabled('fy25.01', interaction === null || interaction === void 0 ? void 0 : interaction.ufoName);
|
|
364
|
+
}
|
|
354
365
|
if (!isTTVCv1Disabled && (!ignoreReason || ignoreReason === 'not-visible') && type !== 'attr') {
|
|
355
366
|
_this.applyChangesToHeatMap(mappedValues, time, _this.heatmap);
|
|
356
367
|
}
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
2
2
|
import _createClass from "@babel/runtime/helpers/createClass";
|
|
3
|
-
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
4
3
|
var EntriesTimeline = /*#__PURE__*/function () {
|
|
5
4
|
function EntriesTimeline() {
|
|
6
5
|
_classCallCheck(this, EntriesTimeline);
|
|
7
|
-
_defineProperty(this, "unorderedEntries", []);
|
|
8
|
-
_defineProperty(this, "sortedEntriesCache", new Map());
|
|
9
6
|
this.unorderedEntries = [];
|
|
7
|
+
this.sortedEntriesCache = new Map();
|
|
10
8
|
}
|
|
11
9
|
return _createClass(EntriesTimeline, [{
|
|
12
10
|
key: "push",
|
package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/canvas-pixel.js
CHANGED
|
@@ -2,17 +2,18 @@ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
|
2
2
|
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
3
3
|
import _createClass from "@babel/runtime/helpers/createClass";
|
|
4
4
|
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
5
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
5
6
|
import taskYield from '../../utils/task-yield';
|
|
6
7
|
|
|
7
8
|
// 24-bit color value
|
|
8
9
|
|
|
9
10
|
/**
|
|
10
11
|
* Class responsible for managing a scaled canvas and tracking pixel drawing operations.
|
|
11
|
-
* It uses an OffscreenCanvas
|
|
12
|
-
* colors and timestamps for pixel counting purposes.
|
|
12
|
+
* It uses either an OffscreenCanvas (if available) or a regular HTML Canvas for better performance
|
|
13
|
+
* and maintains a mapping between colors and timestamps for pixel counting purposes.
|
|
13
14
|
*/
|
|
14
15
|
export var ViewportCanvas = /*#__PURE__*/function () {
|
|
15
|
-
/** The underlying
|
|
16
|
+
/** The underlying Canvas instance (either OffscreenCanvas or HTMLCanvasElement) */
|
|
16
17
|
|
|
17
18
|
/** The 2D rendering context of the canvas */
|
|
18
19
|
|
|
@@ -43,10 +44,8 @@ export var ViewportCanvas = /*#__PURE__*/function () {
|
|
|
43
44
|
this.scaleX = this.scaledWidth / safeViewportWidth;
|
|
44
45
|
this.scaleY = this.scaledHeight / safeViewportHeight;
|
|
45
46
|
|
|
46
|
-
// Initialize
|
|
47
|
-
this.canvas =
|
|
48
|
-
this.canvas.width = this.scaledWidth;
|
|
49
|
-
this.canvas.height = this.scaledHeight;
|
|
47
|
+
// Initialize canvas with scaled dimensions
|
|
48
|
+
this.canvas = this.createCanvas(this.scaledWidth, this.scaledHeight);
|
|
50
49
|
var ctx = this.canvas.getContext('2d', {
|
|
51
50
|
alpha: false,
|
|
52
51
|
// Disable alpha channel for better performance
|
|
@@ -59,9 +58,28 @@ export var ViewportCanvas = /*#__PURE__*/function () {
|
|
|
59
58
|
}
|
|
60
59
|
this.ctx = ctx;
|
|
61
60
|
this.ctx.globalCompositeOperation = 'source-over';
|
|
61
|
+
if (fg('platform_ufo_use_offscreen_canvas')) {
|
|
62
|
+
this.ctx.imageSmoothingEnabled = false; // Disable image smoothing for better performance
|
|
63
|
+
}
|
|
62
64
|
this.clear();
|
|
63
65
|
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Creates a canvas instance, falling back to HTMLCanvasElement if OffscreenCanvas is not available
|
|
69
|
+
* or if the feature flag is disabled
|
|
70
|
+
*/
|
|
64
71
|
return _createClass(ViewportCanvas, [{
|
|
72
|
+
key: "createCanvas",
|
|
73
|
+
value: function createCanvas(width, height) {
|
|
74
|
+
if (typeof OffscreenCanvas !== 'undefined' && fg('platform_ufo_use_offscreen_canvas')) {
|
|
75
|
+
return new OffscreenCanvas(width, height);
|
|
76
|
+
}
|
|
77
|
+
var canvas = document.createElement('canvas');
|
|
78
|
+
canvas.width = width;
|
|
79
|
+
canvas.height = height;
|
|
80
|
+
return canvas;
|
|
81
|
+
}
|
|
82
|
+
}, {
|
|
65
83
|
key: "getScaledDimensions",
|
|
66
84
|
value: function getScaledDimensions() {
|
|
67
85
|
return {
|