@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
@@ -1,3 +1,9 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
+ import _typeof from "@babel/runtime/helpers/typeof";
4
+ 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; }
5
+ 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; }
6
+ import { fg } from '@atlaskit/platform-feature-flags';
1
7
  var config;
2
8
  var DEFAULT_TTVC_REVISION = 'fy25.02';
3
9
 
@@ -5,28 +11,66 @@ var DEFAULT_TTVC_REVISION = 'fy25.02';
5
11
  // and they could delete empty members
6
12
 
7
13
  export function setUFOConfig(newConfig) {
8
- config = newConfig;
14
+ if (fg('platform_ufo_vc_enable_revisions_by_experience')) {
15
+ var _newConfig$vc;
16
+ // Handle edge cases with `enabledVCRevisions`
17
+ var _ref = (_newConfig$vc = newConfig === null || newConfig === void 0 ? void 0 : newConfig.vc) !== null && _newConfig$vc !== void 0 ? _newConfig$vc : {},
18
+ enabledVCRevisions = _ref.enabledVCRevisions;
19
+ if (_typeof(enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.byExperience) === 'object') {
20
+ config = _objectSpread(_objectSpread({}, newConfig), {}, {
21
+ vc: _objectSpread(_objectSpread({}, newConfig.vc), {}, {
22
+ enabledVCRevisions: {
23
+ // enforce axiom about `enabledVCRevisions.all` config
24
+ all: Array.from(new Set([DEFAULT_TTVC_REVISION].concat(_toConsumableArray(enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.all), _toConsumableArray(Object.values(enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.byExperience).flat())))),
25
+ byExperience: _objectSpread({}, enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.byExperience)
26
+ }
27
+ })
28
+ });
29
+ } else {
30
+ config = newConfig;
31
+ }
32
+ } else {
33
+ config = newConfig;
34
+ }
9
35
  }
10
36
  export function getConfig() {
11
37
  return config;
12
38
  }
39
+ var isValidConfigArray = function isValidConfigArray(array) {
40
+ return Array.isArray(array) && array.length > 0;
41
+ };
13
42
  export function getEnabledVCRevisions() {
43
+ var experienceKey = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
14
44
  try {
15
45
  var _config$vc;
16
46
  if (!config) {
17
47
  return [];
18
48
  }
19
49
  if ((_config$vc = config.vc) !== null && _config$vc !== void 0 && _config$vc.enabled) {
20
- var _config$vc2, _config$vc3;
21
- 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];
50
+ var _config$vc2, _enabledVCRevisions$b;
51
+ var _ref2 = (_config$vc2 = config.vc) !== null && _config$vc2 !== void 0 ? _config$vc2 : {},
52
+ enabledVCRevisions = _ref2.enabledVCRevisions;
53
+ if (isValidConfigArray(enabledVCRevisions === null || enabledVCRevisions === void 0 || (_enabledVCRevisions$b = enabledVCRevisions.byExperience) === null || _enabledVCRevisions$b === void 0 ? void 0 : _enabledVCRevisions$b[experienceKey]) && fg('platform_ufo_vc_enable_revisions_by_experience')) {
54
+ var _enabledVCRevisions$b2;
55
+ return (_enabledVCRevisions$b2 = enabledVCRevisions.byExperience) === null || _enabledVCRevisions$b2 === void 0 ? void 0 : _enabledVCRevisions$b2[experienceKey];
56
+ }
57
+ if (isValidConfigArray(enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.all)) {
58
+ return enabledVCRevisions.all;
59
+ }
60
+ return [DEFAULT_TTVC_REVISION];
22
61
  }
23
62
  return [];
24
63
  } catch (_unused) {
25
64
  return [];
26
65
  }
27
66
  }
28
- export function isVCRevisionEnabled(revision) {
29
- return getEnabledVCRevisions().includes(revision);
67
+ export function isVCRevisionEnabled(revision, experienceKey) {
68
+ return getEnabledVCRevisions(experienceKey).includes(revision);
69
+ }
70
+ export function getMostRecentVCRevision() {
71
+ var experienceKey = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
72
+ var enabledVCRevisions = getEnabledVCRevisions(experienceKey);
73
+ return enabledVCRevisions[enabledVCRevisions.length - 1];
30
74
  }
31
75
  export function getInteractionRate(name, interactionKind) {
32
76
  try {
@@ -100,7 +100,8 @@ function _getExperimentalVCMetrics() {
100
100
  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,
101
101
  isEventAborted: !!interaction.abortReason,
102
102
  prefix: prefix,
103
- vc: interaction.vc
103
+ vc: interaction.vc,
104
+ experienceKey: interaction.ufoName
104
105
  });
105
106
  case 4:
106
107
  result = _context.sent;
@@ -4,7 +4,7 @@ import _regeneratorRuntime from "@babel/runtime/regenerator";
4
4
  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; }
5
5
  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; }
6
6
  import { fg } from '@atlaskit/platform-feature-flags';
7
- import { getConfig, isVCRevisionEnabled } from '../../config';
7
+ import { getConfig, getMostRecentVCRevision, isVCRevisionEnabled } from '../../config';
8
8
  import { postInteractionLog } from '../../interaction-metrics';
9
9
  import { getVCObserver } from '../../vc';
10
10
  import getInteractionStatus from './get-interaction-status';
@@ -16,7 +16,7 @@ function getVCMetrics(_x) {
16
16
  function _getVCMetrics() {
17
17
  _getVCMetrics = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(interaction) {
18
18
  var _config$vc, _config$vc$ssrWhiteli, _interaction$apdex, _config$experimentalI;
19
- var config, interactionStatus, pageVisibilityUpToTTAI, isSSREnabled, ssr, tti, prefix, result, _result$ufoVcRev, ttvcV2Revision, VC;
19
+ var config, interactionStatus, pageVisibilityUpToTTAI, shouldReportVCMetrics, isSSREnabled, ssr, tti, prefix, result, _result$ufoVcRev, mostRecentVCRevision, mostRecentVCRevisionPayload, _result$ufoVcRev2, ttvcV2Revision, VC;
20
20
  return _regeneratorRuntime.wrap(function _callee$(_context) {
21
21
  while (1) switch (_context.prev = _context.next) {
22
22
  case 0:
@@ -35,13 +35,14 @@ function _getVCMetrics() {
35
35
  case 5:
36
36
  interactionStatus = getInteractionStatus(interaction);
37
37
  pageVisibilityUpToTTAI = getPageVisibilityUpToTTAI(interaction);
38
- if (!((interactionStatus.originalInteractionStatus !== 'SUCCEEDED' || pageVisibilityUpToTTAI !== 'visible') && fg('platform_ufo_no_vc_on_aborted'))) {
39
- _context.next = 10;
38
+ shouldReportVCMetrics = interactionStatus.originalInteractionStatus === 'SUCCEEDED' && pageVisibilityUpToTTAI === 'visible';
39
+ if (!(!shouldReportVCMetrics && fg('platform_ufo_no_vc_on_aborted'))) {
40
+ _context.next = 11;
40
41
  break;
41
42
  }
42
- getVCObserver().stop();
43
+ getVCObserver().stop(interaction.ufoName);
43
44
  return _context.abrupt("return", {});
44
- case 10:
45
+ case 11:
45
46
  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));
46
47
  ssr = interaction.type === 'page_load' && isSSREnabled ? {
47
48
  ssr: getSSRDoneTimeValue(config)
@@ -49,56 +50,76 @@ function _getVCMetrics() {
49
50
  postInteractionLog.setVCObserverSSRConfig(ssr);
50
51
  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;
51
52
  prefix = 'ufo';
52
- _context.next = 17;
53
+ _context.next = 18;
53
54
  return getVCObserver().getVCResult(_objectSpread({
54
55
  start: interaction.start,
55
56
  stop: interaction.end,
56
57
  tti: tti,
57
58
  prefix: prefix,
58
59
  vc: interaction.vc,
59
- isEventAborted: interactionStatus.originalInteractionStatus !== 'SUCCEEDED'
60
+ isEventAborted: interactionStatus.originalInteractionStatus !== 'SUCCEEDED',
61
+ experienceKey: interaction.ufoName
60
62
  }, ssr));
61
- case 17:
63
+ case 18:
62
64
  result = _context.sent;
63
65
  if ((_config$experimentalI = config.experimentalInteractionMetrics) !== null && _config$experimentalI !== void 0 && _config$experimentalI.enabled) {
64
- getVCObserver().stop();
66
+ getVCObserver().stop(interaction.ufoName);
65
67
  }
66
68
  postInteractionLog.setLastInteractionFinishVCResult(result);
67
- if (isVCRevisionEnabled('fy25.01')) {
68
- _context.next = 27;
69
+ if (!fg('platform_ufo_vc_enable_revisions_by_experience')) {
70
+ _context.next = 29;
69
71
  break;
70
72
  }
71
- ttvcV2Revision = result === null || result === void 0 || (_result$ufoVcRev = result['ufo:vc:rev']) === null || _result$ufoVcRev === void 0 ? void 0 : _result$ufoVcRev.find(function (_ref) {
73
+ mostRecentVCRevision = getMostRecentVCRevision(interaction.ufoName);
74
+ mostRecentVCRevisionPayload = result === null || result === void 0 || (_result$ufoVcRev = result['ufo:vc:rev']) === null || _result$ufoVcRev === void 0 ? void 0 : _result$ufoVcRev.find(function (_ref) {
72
75
  var revision = _ref.revision;
76
+ return revision === mostRecentVCRevision;
77
+ });
78
+ if (!(!shouldReportVCMetrics || !(mostRecentVCRevisionPayload !== null && mostRecentVCRevisionPayload !== void 0 && mostRecentVCRevisionPayload.clean))) {
79
+ _context.next = 26;
80
+ break;
81
+ }
82
+ return _context.abrupt("return", result);
83
+ case 26:
84
+ return _context.abrupt("return", _objectSpread(_objectSpread({}, result), {}, {
85
+ 'metric:vc90': mostRecentVCRevisionPayload['metric:vc90']
86
+ }));
87
+ case 29:
88
+ if (isVCRevisionEnabled('fy25.01')) {
89
+ _context.next = 36;
90
+ break;
91
+ }
92
+ ttvcV2Revision = result === null || result === void 0 || (_result$ufoVcRev2 = result['ufo:vc:rev']) === null || _result$ufoVcRev2 === void 0 ? void 0 : _result$ufoVcRev2.find(function (_ref2) {
93
+ var revision = _ref2.revision;
73
94
  return revision === 'fy25.02';
74
95
  });
75
96
  if (ttvcV2Revision !== null && ttvcV2Revision !== void 0 && ttvcV2Revision.clean) {
76
- _context.next = 24;
97
+ _context.next = 33;
77
98
  break;
78
99
  }
79
100
  return _context.abrupt("return", result);
80
- case 24:
101
+ case 33:
81
102
  return _context.abrupt("return", _objectSpread(_objectSpread({}, result), {}, {
82
103
  'metric:vc90': ttvcV2Revision['metric:vc90']
83
104
  }));
84
- case 27:
105
+ case 36:
85
106
  VC = result === null || result === void 0 ? void 0 : result['metrics:vc'];
86
107
  if (!(!VC || !(result !== null && result !== void 0 && result["".concat(prefix, ":vc:clean")]))) {
87
- _context.next = 30;
108
+ _context.next = 39;
88
109
  break;
89
110
  }
90
111
  return _context.abrupt("return", result);
91
- case 30:
112
+ case 39:
92
113
  if (!(interactionStatus.originalInteractionStatus !== 'SUCCEEDED' || pageVisibilityUpToTTAI !== 'visible')) {
93
- _context.next = 32;
114
+ _context.next = 41;
94
115
  break;
95
116
  }
96
117
  return _context.abrupt("return", result);
97
- case 32:
118
+ case 41:
98
119
  return _context.abrupt("return", _objectSpread(_objectSpread({}, result), {}, {
99
120
  'metric:vc90': VC['90']
100
121
  }));
101
- case 33:
122
+ case 42:
102
123
  case "end":
103
124
  return _context.stop();
104
125
  }
@@ -798,7 +798,8 @@ export function addNewInteraction(interactionId, ufoName, type, startTime, rate,
798
798
  if (type === 'transition') {
799
799
  var _getConfig14;
800
800
  getVCObserver().start({
801
- startTime: startTime
801
+ startTime: startTime,
802
+ experienceKey: ufoName
802
803
  });
803
804
  postInteractionLog.startVCObserver({
804
805
  startTime: startTime
@@ -125,14 +125,16 @@ var PostInteractionLog = /*#__PURE__*/function () {
125
125
  return _context.abrupt("return");
126
126
  case 4:
127
127
  _context.next = 6;
128
- return (_this$vcObserver3 = this.vcObserver) === null || _this$vcObserver3 === void 0 ? void 0 : _this$vcObserver3.getVCResult(_objectSpread({
128
+ return (_this$vcObserver3 = this.vcObserver) === null || _this$vcObserver3 === void 0 ? void 0 : _this$vcObserver3.getVCResult(_objectSpread(_objectSpread({
129
129
  start: this.lastInteractionFinish.start,
130
130
  stop: performance.now(),
131
131
  tti: -1,
132
132
  // no need for TTI value here
133
133
  isEventAborted: !!this.lastInteractionFinish.abortReason,
134
134
  prefix: 'ufo'
135
- }, this.vcObserverSSRConfig));
135
+ }, this.vcObserverSSRConfig), {}, {
136
+ experienceKey: this.lastInteractionFinish.ufoName
137
+ }));
136
138
  case 6:
137
139
  postInteractionFinishVCResult = _context.sent;
138
140
  if ((_getConfig2 = getConfig()) !== null && _getConfig2 !== void 0 && (_getConfig2 = _getConfig2.experimentalInteractionMetrics) !== null && _getConfig2 !== void 0 && _getConfig2.enabled) {
@@ -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 (isVCRevisionEnabled('fy25.03')) {
20
- this.newVCObserver = new VCObserverNew({
21
- selectorConfig: opts.selectorConfig
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(startArg) {
29
- var _this$oldVCObserver, _this$newVCObserver;
30
- (_this$oldVCObserver = this.oldVCObserver) === null || _this$oldVCObserver === void 0 || _this$oldVCObserver.start(startArg);
31
- (_this$newVCObserver = this.newVCObserver) === null || _this$newVCObserver === void 0 || _this$newVCObserver.start({
32
- startTime: startArg.startTime
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
- var _this$oldVCObserver2, _this$newVCObserver2;
39
- (_this$oldVCObserver2 = this.oldVCObserver) === null || _this$oldVCObserver2 === void 0 || _this$oldVCObserver2.stop();
40
- (_this$newVCObserver2 = this.newVCObserver) === null || _this$newVCObserver2 === void 0 || _this$newVCObserver2.stop();
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$oldVCObserver3;
46
- 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;
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$oldVCObserver4, _this$newVCObserver3, _ref;
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
- _context.next = 2;
58
- return (_this$oldVCObserver4 = this.oldVCObserver) === null || _this$oldVCObserver4 === void 0 ? void 0 : _this$oldVCObserver4.getVCResult(param);
59
- case 2:
60
- oldResult = _context.sent;
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$newVCObserver3 = this.newVCObserver) === null || _this$newVCObserver3 === void 0 ? void 0 : _this$newVCObserver3.getVCResult({
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 5:
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 = 8;
157
+ _context.next = 31;
70
158
  break;
71
159
  }
72
160
  return _context.abrupt("return", oldResult);
73
- case 8:
161
+ case 31:
74
162
  return _context.abrupt("return", _objectSpread(_objectSpread({}, oldResult !== null && oldResult !== void 0 ? oldResult : {}), {}, {
75
- 'ufo:vc:rev': [].concat(_toConsumableArray((_ref = oldResult === null || oldResult === void 0 ? void 0 : oldResult['ufo:vc:rev']) !== null && _ref !== void 0 ? _ref : []), _toConsumableArray(newResult !== null && newResult !== void 0 ? newResult : []))
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 9:
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$oldVCObserver5;
92
- (_this$oldVCObserver5 = this.oldVCObserver) === null || _this$oldVCObserver5 === void 0 || _this$oldVCObserver5.setSSRElement(element);
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$oldVCObserver6;
98
- (_this$oldVCObserver6 = this.oldVCObserver) === null || _this$oldVCObserver6 === void 0 || _this$oldVCObserver6.setReactRootRenderStart(startTime || performance.now());
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$oldVCObserver7;
104
- (_this$oldVCObserver7 = this.oldVCObserver) === null || _this$oldVCObserver7 === void 0 || _this$oldVCObserver7.setReactRootRenderStop(stopTime || performance.now());
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
- if (!isVCRevisionEnabled('fy25.03')) {
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
- // Create the V2 revision object which is always needed
79
- var ttvcV2Revision = {
80
- revision: 'fy25.02',
81
- clean: isVCClean,
82
- 'metric:vc90': shouldHaveVCmetric ? calculatedVCNext.VC['90'] : null,
83
- vcDetails: createVCDetails(calculatedVCNext, shouldHaveVCmetric)
84
- };
85
- if (!isVCRevisionEnabled('fy25.01')) {
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
  }