@atlaskit/react-ufo 3.10.4 → 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.
Files changed (36) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/cjs/config/index.js +51 -5
  3. package/dist/cjs/create-experimental-interaction-metrics-payload/index.js +2 -1
  4. package/dist/cjs/create-payload/utils/get-vc-metrics.js +41 -20
  5. package/dist/cjs/interaction-metrics/index.js +2 -1
  6. package/dist/cjs/interaction-metrics/post-interaction-log.js +4 -2
  7. package/dist/cjs/vc/index.js +123 -35
  8. package/dist/cjs/vc/vc-observer/getVCRevisionsData.js +48 -23
  9. package/dist/cjs/vc/vc-observer/index.js +17 -6
  10. package/dist/es2019/config/index.js +49 -6
  11. package/dist/es2019/create-experimental-interaction-metrics-payload/index.js +2 -1
  12. package/dist/es2019/create-payload/utils/get-vc-metrics.js +36 -19
  13. package/dist/es2019/interaction-metrics/index.js +2 -1
  14. package/dist/es2019/interaction-metrics/post-interaction-log.js +2 -1
  15. package/dist/es2019/vc/index.js +98 -35
  16. package/dist/es2019/vc/vc-observer/getVCRevisionsData.js +52 -25
  17. package/dist/es2019/vc/vc-observer/index.js +18 -6
  18. package/dist/esm/config/index.js +49 -5
  19. package/dist/esm/create-experimental-interaction-metrics-payload/index.js +2 -1
  20. package/dist/esm/create-payload/utils/get-vc-metrics.js +42 -21
  21. package/dist/esm/interaction-metrics/index.js +2 -1
  22. package/dist/esm/interaction-metrics/post-interaction-log.js +4 -2
  23. package/dist/esm/vc/index.js +123 -35
  24. package/dist/esm/vc/vc-observer/getVCRevisionsData.js +48 -23
  25. package/dist/esm/vc/vc-observer/index.js +17 -6
  26. package/dist/types/config/index.d.ts +14 -3
  27. package/dist/types/create-post-interaction-log-payload/index.d.ts +2 -2
  28. package/dist/types/vc/types.d.ts +3 -1
  29. package/dist/types/vc/vc-observer/getVCRevisionsData.d.ts +5 -3
  30. package/dist/types/vc/vc-observer/index.d.ts +1 -1
  31. package/dist/types-ts4.5/config/index.d.ts +14 -3
  32. package/dist/types-ts4.5/create-post-interaction-log-payload/index.d.ts +2 -2
  33. package/dist/types-ts4.5/vc/types.d.ts +3 -1
  34. package/dist/types-ts4.5/vc/vc-observer/getVCRevisionsData.d.ts +5 -3
  35. package/dist/types-ts4.5/vc/vc-observer/index.d.ts +1 -1
  36. package/package.json +4 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # @atlaskit/ufo-interaction-ignore
2
2
 
3
+ ## 3.11.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#152178](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/152178)
8
+ [`b61bda55f25b4`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/b61bda55f25b4) -
9
+ Enable TTVC revision logic by experience
10
+
3
11
  ## 3.10.4
4
12
 
5
13
  ### Patch Changes
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
@@ -11,6 +12,7 @@ exports.getDoNotAbortActivePressInteractionOnTransition = getDoNotAbortActivePre
11
12
  exports.getEnabledVCRevisions = getEnabledVCRevisions;
12
13
  exports.getExperimentalInteractionRate = getExperimentalInteractionRate;
13
14
  exports.getInteractionRate = getInteractionRate;
15
+ exports.getMostRecentVCRevision = getMostRecentVCRevision;
14
16
  exports.getPostInteractionRate = getPostInteractionRate;
15
17
  exports.getRemoveInteractionsUFOPrefixes = getRemoveInteractionsUFOPrefixes;
16
18
  exports.getRemovePageSegmentsUFOPrefixes = getRemovePageSegmentsUFOPrefixes;
@@ -18,6 +20,12 @@ exports.getTypingPerformanceTracingMethod = getTypingPerformanceTracingMethod;
18
20
  exports.getUfoNameOverrides = getUfoNameOverrides;
19
21
  exports.isVCRevisionEnabled = isVCRevisionEnabled;
20
22
  exports.setUFOConfig = setUFOConfig;
23
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
24
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
25
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
26
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
27
+ 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; }
28
+ 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; }
21
29
  var config;
22
30
  var DEFAULT_TTVC_REVISION = 'fy25.02';
23
31
 
@@ -25,28 +33,66 @@ var DEFAULT_TTVC_REVISION = 'fy25.02';
25
33
  // and they could delete empty members
26
34
 
27
35
  function setUFOConfig(newConfig) {
28
- config = newConfig;
36
+ if ((0, _platformFeatureFlags.fg)('platform_ufo_vc_enable_revisions_by_experience')) {
37
+ var _newConfig$vc;
38
+ // Handle edge cases with `enabledVCRevisions`
39
+ var _ref = (_newConfig$vc = newConfig === null || newConfig === void 0 ? void 0 : newConfig.vc) !== null && _newConfig$vc !== void 0 ? _newConfig$vc : {},
40
+ enabledVCRevisions = _ref.enabledVCRevisions;
41
+ if ((0, _typeof2.default)(enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.byExperience) === 'object') {
42
+ config = _objectSpread(_objectSpread({}, newConfig), {}, {
43
+ vc: _objectSpread(_objectSpread({}, newConfig.vc), {}, {
44
+ enabledVCRevisions: {
45
+ // enforce axiom about `enabledVCRevisions.all` config
46
+ all: Array.from(new Set([DEFAULT_TTVC_REVISION].concat((0, _toConsumableArray2.default)(enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.all), (0, _toConsumableArray2.default)(Object.values(enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.byExperience).flat())))),
47
+ byExperience: _objectSpread({}, enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.byExperience)
48
+ }
49
+ })
50
+ });
51
+ } else {
52
+ config = newConfig;
53
+ }
54
+ } else {
55
+ config = newConfig;
56
+ }
29
57
  }
30
58
  function getConfig() {
31
59
  return config;
32
60
  }
61
+ var isValidConfigArray = function isValidConfigArray(array) {
62
+ return Array.isArray(array) && array.length > 0;
63
+ };
33
64
  function getEnabledVCRevisions() {
65
+ var experienceKey = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
34
66
  try {
35
67
  var _config$vc;
36
68
  if (!config) {
37
69
  return [];
38
70
  }
39
71
  if ((_config$vc = config.vc) !== null && _config$vc !== void 0 && _config$vc.enabled) {
40
- var _config$vc2, _config$vc3;
41
- return Array.isArray((_config$vc2 = config.vc) === null || _config$vc2 === void 0 ? void 0 : _config$vc2.enabledVCRevisions) && ((_config$vc3 = config.vc) === null || _config$vc3 === void 0 ? void 0 : _config$vc3.enabledVCRevisions.length) > 0 ? config.vc.enabledVCRevisions : [DEFAULT_TTVC_REVISION];
72
+ var _config$vc2, _enabledVCRevisions$b;
73
+ var _ref2 = (_config$vc2 = config.vc) !== null && _config$vc2 !== void 0 ? _config$vc2 : {},
74
+ enabledVCRevisions = _ref2.enabledVCRevisions;
75
+ if (isValidConfigArray(enabledVCRevisions === null || enabledVCRevisions === void 0 || (_enabledVCRevisions$b = enabledVCRevisions.byExperience) === null || _enabledVCRevisions$b === void 0 ? void 0 : _enabledVCRevisions$b[experienceKey]) && (0, _platformFeatureFlags.fg)('platform_ufo_vc_enable_revisions_by_experience')) {
76
+ var _enabledVCRevisions$b2;
77
+ return (_enabledVCRevisions$b2 = enabledVCRevisions.byExperience) === null || _enabledVCRevisions$b2 === void 0 ? void 0 : _enabledVCRevisions$b2[experienceKey];
78
+ }
79
+ if (isValidConfigArray(enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.all)) {
80
+ return enabledVCRevisions.all;
81
+ }
82
+ return [DEFAULT_TTVC_REVISION];
42
83
  }
43
84
  return [];
44
85
  } catch (_unused) {
45
86
  return [];
46
87
  }
47
88
  }
48
- function isVCRevisionEnabled(revision) {
49
- return getEnabledVCRevisions().includes(revision);
89
+ function isVCRevisionEnabled(revision, experienceKey) {
90
+ return getEnabledVCRevisions(experienceKey).includes(revision);
91
+ }
92
+ function getMostRecentVCRevision() {
93
+ var experienceKey = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
94
+ var enabledVCRevisions = getEnabledVCRevisions(experienceKey);
95
+ return enabledVCRevisions[enabledVCRevisions.length - 1];
50
96
  }
51
97
  function getInteractionRate(name, interactionKind) {
52
98
  try {
@@ -111,7 +111,8 @@ function _getExperimentalVCMetrics() {
111
111
  tti: (_interaction$apdex = interaction.apdex) === null || _interaction$apdex === void 0 || (_interaction$apdex = _interaction$apdex[0]) === null || _interaction$apdex === void 0 ? void 0 : _interaction$apdex.stopTime,
112
112
  isEventAborted: !!interaction.abortReason,
113
113
  prefix: prefix,
114
- vc: interaction.vc
114
+ vc: interaction.vc,
115
+ experienceKey: interaction.ufoName
115
116
  });
116
117
  case 4:
117
118
  result = _context.sent;
@@ -23,7 +23,7 @@ function getVCMetrics(_x) {
23
23
  function _getVCMetrics() {
24
24
  _getVCMetrics = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(interaction) {
25
25
  var _config$vc, _config$vc$ssrWhiteli, _interaction$apdex, _config$experimentalI;
26
- var config, interactionStatus, pageVisibilityUpToTTAI, isSSREnabled, ssr, tti, prefix, result, _result$ufoVcRev, ttvcV2Revision, VC;
26
+ var config, interactionStatus, pageVisibilityUpToTTAI, shouldReportVCMetrics, isSSREnabled, ssr, tti, prefix, result, _result$ufoVcRev, mostRecentVCRevision, mostRecentVCRevisionPayload, _result$ufoVcRev2, ttvcV2Revision, VC;
27
27
  return _regenerator.default.wrap(function _callee$(_context) {
28
28
  while (1) switch (_context.prev = _context.next) {
29
29
  case 0:
@@ -42,13 +42,14 @@ function _getVCMetrics() {
42
42
  case 5:
43
43
  interactionStatus = (0, _getInteractionStatus.default)(interaction);
44
44
  pageVisibilityUpToTTAI = (0, _getPageVisibilityUpToTtai.default)(interaction);
45
- if (!((interactionStatus.originalInteractionStatus !== 'SUCCEEDED' || pageVisibilityUpToTTAI !== 'visible') && (0, _platformFeatureFlags.fg)('platform_ufo_no_vc_on_aborted'))) {
46
- _context.next = 10;
45
+ shouldReportVCMetrics = interactionStatus.originalInteractionStatus === 'SUCCEEDED' && pageVisibilityUpToTTAI === 'visible';
46
+ if (!(!shouldReportVCMetrics && (0, _platformFeatureFlags.fg)('platform_ufo_no_vc_on_aborted'))) {
47
+ _context.next = 11;
47
48
  break;
48
49
  }
49
- (0, _vc.getVCObserver)().stop();
50
+ (0, _vc.getVCObserver)().stop(interaction.ufoName);
50
51
  return _context.abrupt("return", {});
51
- case 10:
52
+ case 11:
52
53
  isSSREnabled = (config === null || config === void 0 ? void 0 : config.ssr) || (config === null || config === void 0 || (_config$vc$ssrWhiteli = config.vc.ssrWhitelist) === null || _config$vc$ssrWhiteli === void 0 ? void 0 : _config$vc$ssrWhiteli.includes(interaction.ufoName));
53
54
  ssr = interaction.type === 'page_load' && isSSREnabled ? {
54
55
  ssr: (0, _getSsrDoneTimeValue.default)(config)
@@ -56,56 +57,76 @@ function _getVCMetrics() {
56
57
  _interactionMetrics.postInteractionLog.setVCObserverSSRConfig(ssr);
57
58
  tti = (_interaction$apdex = interaction.apdex) === null || _interaction$apdex === void 0 || (_interaction$apdex = _interaction$apdex[0]) === null || _interaction$apdex === void 0 ? void 0 : _interaction$apdex.stopTime;
58
59
  prefix = 'ufo';
59
- _context.next = 17;
60
+ _context.next = 18;
60
61
  return (0, _vc.getVCObserver)().getVCResult(_objectSpread({
61
62
  start: interaction.start,
62
63
  stop: interaction.end,
63
64
  tti: tti,
64
65
  prefix: prefix,
65
66
  vc: interaction.vc,
66
- isEventAborted: interactionStatus.originalInteractionStatus !== 'SUCCEEDED'
67
+ isEventAborted: interactionStatus.originalInteractionStatus !== 'SUCCEEDED',
68
+ experienceKey: interaction.ufoName
67
69
  }, ssr));
68
- case 17:
70
+ case 18:
69
71
  result = _context.sent;
70
72
  if ((_config$experimentalI = config.experimentalInteractionMetrics) !== null && _config$experimentalI !== void 0 && _config$experimentalI.enabled) {
71
- (0, _vc.getVCObserver)().stop();
73
+ (0, _vc.getVCObserver)().stop(interaction.ufoName);
72
74
  }
73
75
  _interactionMetrics.postInteractionLog.setLastInteractionFinishVCResult(result);
74
- if ((0, _config.isVCRevisionEnabled)('fy25.01')) {
75
- _context.next = 27;
76
+ if (!(0, _platformFeatureFlags.fg)('platform_ufo_vc_enable_revisions_by_experience')) {
77
+ _context.next = 29;
76
78
  break;
77
79
  }
78
- ttvcV2Revision = result === null || result === void 0 || (_result$ufoVcRev = result['ufo:vc:rev']) === null || _result$ufoVcRev === void 0 ? void 0 : _result$ufoVcRev.find(function (_ref) {
80
+ mostRecentVCRevision = (0, _config.getMostRecentVCRevision)(interaction.ufoName);
81
+ mostRecentVCRevisionPayload = result === null || result === void 0 || (_result$ufoVcRev = result['ufo:vc:rev']) === null || _result$ufoVcRev === void 0 ? void 0 : _result$ufoVcRev.find(function (_ref) {
79
82
  var revision = _ref.revision;
83
+ return revision === mostRecentVCRevision;
84
+ });
85
+ if (!(!shouldReportVCMetrics || !(mostRecentVCRevisionPayload !== null && mostRecentVCRevisionPayload !== void 0 && mostRecentVCRevisionPayload.clean))) {
86
+ _context.next = 26;
87
+ break;
88
+ }
89
+ return _context.abrupt("return", result);
90
+ case 26:
91
+ return _context.abrupt("return", _objectSpread(_objectSpread({}, result), {}, {
92
+ 'metric:vc90': mostRecentVCRevisionPayload['metric:vc90']
93
+ }));
94
+ case 29:
95
+ if ((0, _config.isVCRevisionEnabled)('fy25.01')) {
96
+ _context.next = 36;
97
+ break;
98
+ }
99
+ ttvcV2Revision = result === null || result === void 0 || (_result$ufoVcRev2 = result['ufo:vc:rev']) === null || _result$ufoVcRev2 === void 0 ? void 0 : _result$ufoVcRev2.find(function (_ref2) {
100
+ var revision = _ref2.revision;
80
101
  return revision === 'fy25.02';
81
102
  });
82
103
  if (ttvcV2Revision !== null && ttvcV2Revision !== void 0 && ttvcV2Revision.clean) {
83
- _context.next = 24;
104
+ _context.next = 33;
84
105
  break;
85
106
  }
86
107
  return _context.abrupt("return", result);
87
- case 24:
108
+ case 33:
88
109
  return _context.abrupt("return", _objectSpread(_objectSpread({}, result), {}, {
89
110
  'metric:vc90': ttvcV2Revision['metric:vc90']
90
111
  }));
91
- case 27:
112
+ case 36:
92
113
  VC = result === null || result === void 0 ? void 0 : result['metrics:vc'];
93
114
  if (!(!VC || !(result !== null && result !== void 0 && result["".concat(prefix, ":vc:clean")]))) {
94
- _context.next = 30;
115
+ _context.next = 39;
95
116
  break;
96
117
  }
97
118
  return _context.abrupt("return", result);
98
- case 30:
119
+ case 39:
99
120
  if (!(interactionStatus.originalInteractionStatus !== 'SUCCEEDED' || pageVisibilityUpToTTAI !== 'visible')) {
100
- _context.next = 32;
121
+ _context.next = 41;
101
122
  break;
102
123
  }
103
124
  return _context.abrupt("return", result);
104
- case 32:
125
+ case 41:
105
126
  return _context.abrupt("return", _objectSpread(_objectSpread({}, result), {}, {
106
127
  'metric:vc90': VC['90']
107
128
  }));
108
- case 33:
129
+ case 42:
109
130
  case "end":
110
131
  return _context.stop();
111
132
  }
@@ -843,7 +843,8 @@ function addNewInteraction(interactionId, ufoName, type, startTime, rate, labelS
843
843
  if (type === 'transition') {
844
844
  var _getConfig14;
845
845
  (0, _vc.getVCObserver)().start({
846
- startTime: startTime
846
+ startTime: startTime,
847
+ experienceKey: ufoName
847
848
  });
848
849
  postInteractionLog.startVCObserver({
849
850
  startTime: startTime
@@ -132,14 +132,16 @@ var PostInteractionLog = exports.default = /*#__PURE__*/function () {
132
132
  return _context.abrupt("return");
133
133
  case 4:
134
134
  _context.next = 6;
135
- return (_this$vcObserver3 = this.vcObserver) === null || _this$vcObserver3 === void 0 ? void 0 : _this$vcObserver3.getVCResult(_objectSpread({
135
+ return (_this$vcObserver3 = this.vcObserver) === null || _this$vcObserver3 === void 0 ? void 0 : _this$vcObserver3.getVCResult(_objectSpread(_objectSpread({
136
136
  start: this.lastInteractionFinish.start,
137
137
  stop: performance.now(),
138
138
  tti: -1,
139
139
  // no need for TTI value here
140
140
  isEventAborted: !!this.lastInteractionFinish.abortReason,
141
141
  prefix: 'ufo'
142
- }, this.vcObserverSSRConfig));
142
+ }, this.vcObserverSSRConfig), {}, {
143
+ experienceKey: this.lastInteractionFinish.ufoName
144
+ }));
143
145
  case 6:
144
146
  postInteractionFinishVCResult = _context.sent;
145
147
  if ((_getConfig2 = (0, _config.getConfig)()) !== null && _getConfig2 !== void 0 && (_getConfig2 = _getConfig2.experimentalInteractionMetrics) !== null && _getConfig2 !== void 0 && _getConfig2.enabled) {
@@ -12,6 +12,7 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
12
12
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
13
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
14
14
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
15
16
  var _config = require("../config");
16
17
  var _noOpVcObserver = require("./no-op-vc-observer");
17
18
  var _vcObserver = require("./vc-observer");
@@ -24,65 +25,152 @@ var VCObserverWrapper = /*#__PURE__*/function () {
24
25
  var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
25
26
  (0, _classCallCheck2.default)(this, VCObserverWrapper);
26
27
  this.newVCObserver = null;
27
- if ((0, _config.isVCRevisionEnabled)('fy25.03')) {
28
- this.newVCObserver = new _vcObserverNew.default({
29
- selectorConfig: opts.selectorConfig
30
- });
28
+ if ((0, _platformFeatureFlags.fg)('platform_ufo_vc_enable_revisions_by_experience')) {
29
+ this.oldVCObserver = null;
30
+ if ((0, _config.isVCRevisionEnabled)('fy25.03')) {
31
+ this.newVCObserver = new _vcObserverNew.default({
32
+ selectorConfig: opts.selectorConfig
33
+ });
34
+ }
35
+ if ((0, _config.isVCRevisionEnabled)('fy25.01') || (0, _config.isVCRevisionEnabled)('fy25.02')) {
36
+ this.oldVCObserver = new _vcObserver.VCObserver(opts);
37
+ }
38
+ } else {
39
+ if ((0, _config.isVCRevisionEnabled)('fy25.03')) {
40
+ this.newVCObserver = new _vcObserverNew.default({
41
+ selectorConfig: opts.selectorConfig
42
+ });
43
+ }
44
+ this.oldVCObserver = new _vcObserver.VCObserver(opts);
31
45
  }
32
- this.oldVCObserver = new _vcObserver.VCObserver(opts);
33
46
  }
34
47
  return (0, _createClass2.default)(VCObserverWrapper, [{
35
48
  key: "start",
36
- value: function start(startArg) {
37
- var _this$oldVCObserver, _this$newVCObserver;
38
- (_this$oldVCObserver = this.oldVCObserver) === null || _this$oldVCObserver === void 0 || _this$oldVCObserver.start(startArg);
39
- (_this$newVCObserver = this.newVCObserver) === null || _this$newVCObserver === void 0 || _this$newVCObserver.start({
40
- startTime: startArg.startTime
41
- });
49
+ value: function start(_ref) {
50
+ var startTime = _ref.startTime,
51
+ experienceKey = _ref.experienceKey;
52
+ if ((0, _platformFeatureFlags.fg)('platform_ufo_vc_enable_revisions_by_experience')) {
53
+ if ((0, _config.isVCRevisionEnabled)('fy25.01', experienceKey) || (0, _config.isVCRevisionEnabled)('fy25.02', experienceKey)) {
54
+ var _this$oldVCObserver;
55
+ (_this$oldVCObserver = this.oldVCObserver) === null || _this$oldVCObserver === void 0 || _this$oldVCObserver.start({
56
+ startTime: startTime
57
+ });
58
+ }
59
+ if ((0, _config.isVCRevisionEnabled)('fy25.03', experienceKey)) {
60
+ var _this$newVCObserver;
61
+ (_this$newVCObserver = this.newVCObserver) === null || _this$newVCObserver === void 0 || _this$newVCObserver.start({
62
+ startTime: startTime
63
+ });
64
+ }
65
+ } else {
66
+ var _this$oldVCObserver2, _this$newVCObserver2;
67
+ (_this$oldVCObserver2 = this.oldVCObserver) === null || _this$oldVCObserver2 === void 0 || _this$oldVCObserver2.start({
68
+ startTime: startTime
69
+ });
70
+ (_this$newVCObserver2 = this.newVCObserver) === null || _this$newVCObserver2 === void 0 || _this$newVCObserver2.start({
71
+ startTime: startTime
72
+ });
73
+ }
42
74
  }
43
75
  }, {
44
76
  key: "stop",
45
- value: function stop() {
46
- var _this$oldVCObserver2, _this$newVCObserver2;
47
- (_this$oldVCObserver2 = this.oldVCObserver) === null || _this$oldVCObserver2 === void 0 || _this$oldVCObserver2.stop();
48
- (_this$newVCObserver2 = this.newVCObserver) === null || _this$newVCObserver2 === void 0 || _this$newVCObserver2.stop();
77
+ value: function stop(experienceKey) {
78
+ if ((0, _platformFeatureFlags.fg)('platform_ufo_vc_enable_revisions_by_experience')) {
79
+ if ((0, _config.isVCRevisionEnabled)('fy25.01', experienceKey) || (0, _config.isVCRevisionEnabled)('fy25.02', experienceKey)) {
80
+ var _this$oldVCObserver3;
81
+ (_this$oldVCObserver3 = this.oldVCObserver) === null || _this$oldVCObserver3 === void 0 || _this$oldVCObserver3.stop();
82
+ }
83
+ if ((0, _config.isVCRevisionEnabled)('fy25.03', experienceKey)) {
84
+ var _this$newVCObserver3;
85
+ (_this$newVCObserver3 = this.newVCObserver) === null || _this$newVCObserver3 === void 0 || _this$newVCObserver3.stop();
86
+ }
87
+ } else {
88
+ var _this$oldVCObserver4, _this$newVCObserver4;
89
+ (_this$oldVCObserver4 = this.oldVCObserver) === null || _this$oldVCObserver4 === void 0 || _this$oldVCObserver4.stop();
90
+ (_this$newVCObserver4 = this.newVCObserver) === null || _this$newVCObserver4 === void 0 || _this$newVCObserver4.stop();
91
+ }
49
92
  }
50
93
  }, {
51
94
  key: "getVCRawData",
52
95
  value: function getVCRawData() {
53
- var _this$oldVCObserver$g, _this$oldVCObserver3;
54
- return (_this$oldVCObserver$g = (_this$oldVCObserver3 = this.oldVCObserver) === null || _this$oldVCObserver3 === void 0 ? void 0 : _this$oldVCObserver3.getVCRawData()) !== null && _this$oldVCObserver$g !== void 0 ? _this$oldVCObserver$g : null;
96
+ var _this$oldVCObserver$g, _this$oldVCObserver5;
97
+ 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;
55
98
  }
56
99
  }, {
57
100
  key: "getVCResult",
58
101
  value: function () {
59
102
  var _getVCResult = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(param) {
60
- var _this$oldVCObserver4, _this$newVCObserver3, _ref;
61
- var oldResult, newResult;
103
+ var _this$oldVCObserver6, _this$newVCObserver5, _ref2, experienceKey, v1v2Result, v3Result, _this$oldVCObserver7, _this$newVCObserver6, _ref3, oldResult, newResult;
62
104
  return _regenerator.default.wrap(function _callee$(_context) {
63
105
  while (1) switch (_context.prev = _context.next) {
64
106
  case 0:
65
- _context.next = 2;
66
- return (_this$oldVCObserver4 = this.oldVCObserver) === null || _this$oldVCObserver4 === void 0 ? void 0 : _this$oldVCObserver4.getVCResult(param);
67
- case 2:
68
- oldResult = _context.sent;
107
+ if (!(0, _platformFeatureFlags.fg)('platform_ufo_vc_enable_revisions_by_experience')) {
108
+ _context.next = 23;
109
+ break;
110
+ }
111
+ experienceKey = param.experienceKey;
112
+ if (!((0, _config.isVCRevisionEnabled)('fy25.01', experienceKey) || (0, _config.isVCRevisionEnabled)('fy25.02', experienceKey))) {
113
+ _context.next = 8;
114
+ break;
115
+ }
69
116
  _context.next = 5;
70
- return (_this$newVCObserver3 = this.newVCObserver) === null || _this$newVCObserver3 === void 0 ? void 0 : _this$newVCObserver3.getVCResult({
117
+ return (_this$oldVCObserver6 = this.oldVCObserver) === null || _this$oldVCObserver6 === void 0 ? void 0 : _this$oldVCObserver6.getVCResult(param);
118
+ case 5:
119
+ _context.t0 = _context.sent;
120
+ _context.next = 9;
121
+ break;
122
+ case 8:
123
+ _context.t0 = {};
124
+ case 9:
125
+ v1v2Result = _context.t0;
126
+ if (!(0, _config.isVCRevisionEnabled)('fy25.03', experienceKey)) {
127
+ _context.next = 16;
128
+ break;
129
+ }
130
+ _context.next = 13;
131
+ return (_this$newVCObserver5 = this.newVCObserver) === null || _this$newVCObserver5 === void 0 ? void 0 : _this$newVCObserver5.getVCResult({
71
132
  start: param.start,
72
133
  stop: param.stop
73
134
  });
74
- case 5:
135
+ case 13:
136
+ _context.t1 = _context.sent;
137
+ _context.next = 17;
138
+ break;
139
+ case 16:
140
+ _context.t1 = [];
141
+ case 17:
142
+ v3Result = _context.t1;
143
+ if (v3Result) {
144
+ _context.next = 20;
145
+ break;
146
+ }
147
+ return _context.abrupt("return", v1v2Result !== null && v1v2Result !== void 0 ? v1v2Result : {});
148
+ case 20:
149
+ return _context.abrupt("return", _objectSpread(_objectSpread({}, v1v2Result), {}, {
150
+ 'ufo:vc:rev': [].concat((0, _toConsumableArray2.default)((_ref2 = v1v2Result === null || v1v2Result === void 0 ? void 0 : v1v2Result['ufo:vc:rev']) !== null && _ref2 !== void 0 ? _ref2 : []), (0, _toConsumableArray2.default)(v3Result !== null && v3Result !== void 0 ? v3Result : []))
151
+ }));
152
+ case 23:
153
+ _context.next = 25;
154
+ return (_this$oldVCObserver7 = this.oldVCObserver) === null || _this$oldVCObserver7 === void 0 ? void 0 : _this$oldVCObserver7.getVCResult(param);
155
+ case 25:
156
+ oldResult = _context.sent;
157
+ _context.next = 28;
158
+ return (_this$newVCObserver6 = this.newVCObserver) === null || _this$newVCObserver6 === void 0 ? void 0 : _this$newVCObserver6.getVCResult({
159
+ start: param.start,
160
+ stop: param.stop
161
+ });
162
+ case 28:
75
163
  newResult = _context.sent;
76
164
  if (!(oldResult && !newResult)) {
77
- _context.next = 8;
165
+ _context.next = 31;
78
166
  break;
79
167
  }
80
168
  return _context.abrupt("return", oldResult);
81
- case 8:
169
+ case 31:
82
170
  return _context.abrupt("return", _objectSpread(_objectSpread({}, oldResult !== null && oldResult !== void 0 ? oldResult : {}), {}, {
83
- 'ufo:vc:rev': [].concat((0, _toConsumableArray2.default)((_ref = oldResult === null || oldResult === void 0 ? void 0 : oldResult['ufo:vc:rev']) !== null && _ref !== void 0 ? _ref : []), (0, _toConsumableArray2.default)(newResult !== null && newResult !== void 0 ? newResult : []))
171
+ 'ufo:vc:rev': [].concat((0, _toConsumableArray2.default)((_ref3 = oldResult === null || oldResult === void 0 ? void 0 : oldResult['ufo:vc:rev']) !== null && _ref3 !== void 0 ? _ref3 : []), (0, _toConsumableArray2.default)(newResult !== null && newResult !== void 0 ? newResult : []))
84
172
  }));
85
- case 9:
173
+ case 32:
86
174
  case "end":
87
175
  return _context.stop();
88
176
  }
@@ -96,20 +184,20 @@ var VCObserverWrapper = /*#__PURE__*/function () {
96
184
  }, {
97
185
  key: "setSSRElement",
98
186
  value: function setSSRElement(element) {
99
- var _this$oldVCObserver5;
100
- (_this$oldVCObserver5 = this.oldVCObserver) === null || _this$oldVCObserver5 === void 0 || _this$oldVCObserver5.setSSRElement(element);
187
+ var _this$oldVCObserver8;
188
+ (_this$oldVCObserver8 = this.oldVCObserver) === null || _this$oldVCObserver8 === void 0 || _this$oldVCObserver8.setSSRElement(element);
101
189
  }
102
190
  }, {
103
191
  key: "setReactRootRenderStart",
104
192
  value: function setReactRootRenderStart(startTime) {
105
- var _this$oldVCObserver6;
106
- (_this$oldVCObserver6 = this.oldVCObserver) === null || _this$oldVCObserver6 === void 0 || _this$oldVCObserver6.setReactRootRenderStart(startTime || performance.now());
193
+ var _this$oldVCObserver9;
194
+ (_this$oldVCObserver9 = this.oldVCObserver) === null || _this$oldVCObserver9 === void 0 || _this$oldVCObserver9.setReactRootRenderStart(startTime || performance.now());
107
195
  }
108
196
  }, {
109
197
  key: "setReactRootRenderStop",
110
198
  value: function setReactRootRenderStop(stopTime) {
111
- var _this$oldVCObserver7;
112
- (_this$oldVCObserver7 = this.oldVCObserver) === null || _this$oldVCObserver7 === void 0 || _this$oldVCObserver7.setReactRootRenderStop(stopTime || performance.now());
199
+ var _this$oldVCObserver10;
200
+ (_this$oldVCObserver10 = this.oldVCObserver) === null || _this$oldVCObserver10 === void 0 || _this$oldVCObserver10.setReactRootRenderStop(stopTime || performance.now());
113
201
  }
114
202
  }]);
115
203
  }(); // Some products set this variable to indicate it is running in SSR
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.getVCRevisionsData = getVCRevisionsData;
8
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
9
10
  var _config = require("../../config");
10
11
  var _hiddenTiming = require("../../hidden-timing");
11
12
  var _revisions = require("./revisions/revisions");
@@ -31,7 +32,7 @@ function createVCDetails(calculatedVC, shouldHaveVCmetric) {
31
32
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
32
33
  var key = _step.value;
33
34
  details[key] = {
34
- t: VC[key],
35
+ t: VC[key] || -1,
35
36
  e: VCBox[key] || READONLY_EMPTY_ARRAY
36
37
  };
37
38
  }
@@ -52,8 +53,13 @@ function getVCRevisionsData(_ref) {
52
53
  multiHeatmap = _ref.multiHeatmap,
53
54
  ssr = _ref.ssr,
54
55
  calculatedVC = _ref.calculatedVC,
55
- calculatedVCNext = _ref.calculatedVCNext;
56
- if (!(0, _config.isVCRevisionEnabled)('fy25.03')) {
56
+ calculatedVCNext = _ref.calculatedVCNext,
57
+ experienceKey = _ref.experienceKey;
58
+ var isTTVCv3Enabled = (0, _platformFeatureFlags.fg)('platform_ufo_vc_enable_revisions_by_experience') ? (0, _config.isVCRevisionEnabled)('fy25.03', experienceKey) : (0, _config.isVCRevisionEnabled)('fy25.03');
59
+
60
+ // As part of `platform_ufo_vc_enable_revisions_by_experience`, we are looking to turn off the `multiHeatmap` branch of code
61
+ // for calculating TTVC, and instead rely on existing values already available, e.g. `calculatedVC` and `calculatedVCNext`
62
+ if (!isTTVCv3Enabled && !(0, _platformFeatureFlags.fg)('platform_ufo_vc_enable_revisions_by_experience')) {
57
63
  if (!multiHeatmap) {
58
64
  return null;
59
65
  }
@@ -76,29 +82,48 @@ function getVCRevisionsData(_ref) {
76
82
  clean: isVCClean
77
83
  }));
78
84
  }
79
-
80
- // Calculate these conditions once
81
85
  var pageVisibilityUpToTTAI = (0, _hiddenTiming.getPageVisibilityState)(interaction.start, interaction.end);
82
86
  var isVisiblePageVisibleUpToTTAI = pageVisibilityUpToTTAI === 'visible';
83
87
  var shouldHaveVCmetric = isVCClean && !isEventAborted && isVisiblePageVisibleUpToTTAI;
88
+ if ((0, _platformFeatureFlags.fg)('platform_ufo_vc_enable_revisions_by_experience')) {
89
+ var availableVCRevisionPayloads = [];
90
+ if ((0, _config.isVCRevisionEnabled)('fy25.01', experienceKey)) {
91
+ availableVCRevisionPayloads.push({
92
+ revision: 'fy25.01',
93
+ clean: isVCClean,
94
+ 'metric:vc90': shouldHaveVCmetric ? calculatedVC.VC['90'] : null,
95
+ vcDetails: createVCDetails(calculatedVC, shouldHaveVCmetric)
96
+ });
97
+ }
98
+ if ((0, _config.isVCRevisionEnabled)('fy25.02', experienceKey)) {
99
+ availableVCRevisionPayloads.push({
100
+ revision: 'fy25.02',
101
+ clean: isVCClean,
102
+ 'metric:vc90': shouldHaveVCmetric ? calculatedVCNext.VC['90'] : null,
103
+ vcDetails: createVCDetails(calculatedVCNext, shouldHaveVCmetric)
104
+ });
105
+ }
106
+ return (0, _defineProperty2.default)({}, "".concat(fullPrefix, "vc:rev"), availableVCRevisionPayloads);
107
+ } else {
108
+ // Create the V2 revision object which is always needed
109
+ var ttvcV2Revision = {
110
+ revision: 'fy25.02',
111
+ clean: isVCClean,
112
+ 'metric:vc90': shouldHaveVCmetric ? calculatedVCNext.VC['90'] : null,
113
+ vcDetails: createVCDetails(calculatedVCNext, shouldHaveVCmetric)
114
+ };
115
+ var isTTVCv1Disabled = !(0, _config.isVCRevisionEnabled)('fy25.01');
116
+ if (isTTVCv1Disabled) {
117
+ return (0, _defineProperty2.default)({}, "".concat(fullPrefix, "vc:rev"), [ttvcV2Revision]);
118
+ }
84
119
 
85
- // Create the V2 revision object which is always needed
86
- var ttvcV2Revision = {
87
- revision: 'fy25.02',
88
- clean: isVCClean,
89
- 'metric:vc90': shouldHaveVCmetric ? calculatedVCNext.VC['90'] : null,
90
- vcDetails: createVCDetails(calculatedVCNext, shouldHaveVCmetric)
91
- };
92
- if (!(0, _config.isVCRevisionEnabled)('fy25.01')) {
93
- return (0, _defineProperty2.default)({}, "".concat(fullPrefix, "vc:rev"), [ttvcV2Revision]);
120
+ // Only create ttvcV1Revision when we're actually going to use it
121
+ var ttvcV1Revision = {
122
+ revision: 'fy25.01',
123
+ clean: isVCClean,
124
+ 'metric:vc90': shouldHaveVCmetric ? calculatedVC.VC['90'] : null,
125
+ vcDetails: createVCDetails(calculatedVC, shouldHaveVCmetric)
126
+ };
127
+ return (0, _defineProperty2.default)({}, "".concat(fullPrefix, "vc:rev"), [ttvcV1Revision, ttvcV2Revision]);
94
128
  }
95
-
96
- // Only create ttvcV1Revision when we're actually going to use it
97
- var ttvcV1Revision = {
98
- revision: 'fy25.01',
99
- clean: isVCClean,
100
- 'metric:vc90': shouldHaveVCmetric ? calculatedVC.VC['90'] : null,
101
- vcDetails: createVCDetails(calculatedVC, shouldHaveVCmetric)
102
- };
103
- return (0, _defineProperty2.default)({}, "".concat(fullPrefix, "vc:rev"), [ttvcV1Revision, ttvcV2Revision]);
104
129
  }