@atlaskit/react-ufo 2.15.0 → 2.16.1

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 (51) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/cjs/assets/index.js +96 -0
  3. package/dist/cjs/assets/utils.js +32 -0
  4. package/dist/cjs/common/assets/types.js +5 -0
  5. package/dist/cjs/create-payload/index.js +32 -5
  6. package/dist/cjs/interaction-id-context/index.js +3 -19
  7. package/dist/cjs/vc/vc-observer/heatmap/heatmap.js +9 -20
  8. package/dist/cjs/vc/vc-observer/index.js +32 -28
  9. package/dist/cjs/vc/vc-observer/revisions/ViewportUpdateClassifier.js +8 -0
  10. package/dist/cjs/vc/vc-observer/revisions/fy24_01.js +34 -2
  11. package/dist/es2019/assets/index.js +82 -0
  12. package/dist/es2019/assets/utils.js +26 -0
  13. package/dist/es2019/common/assets/types.js +1 -0
  14. package/dist/es2019/create-payload/index.js +33 -3
  15. package/dist/es2019/interaction-id-context/index.js +3 -18
  16. package/dist/es2019/vc/vc-observer/heatmap/heatmap.js +10 -18
  17. package/dist/es2019/vc/vc-observer/index.js +3 -0
  18. package/dist/es2019/vc/vc-observer/revisions/ViewportUpdateClassifier.js +6 -0
  19. package/dist/es2019/vc/vc-observer/revisions/fy24_01.js +29 -0
  20. package/dist/esm/assets/index.js +89 -0
  21. package/dist/esm/assets/utils.js +26 -0
  22. package/dist/esm/common/assets/types.js +1 -0
  23. package/dist/esm/create-payload/index.js +32 -5
  24. package/dist/esm/interaction-id-context/index.js +3 -18
  25. package/dist/esm/vc/vc-observer/heatmap/heatmap.js +9 -20
  26. package/dist/esm/vc/vc-observer/index.js +32 -28
  27. package/dist/esm/vc/vc-observer/revisions/ViewportUpdateClassifier.js +8 -0
  28. package/dist/esm/vc/vc-observer/revisions/fy24_01.js +34 -2
  29. package/dist/types/assets/index.d.ts +25 -0
  30. package/dist/types/assets/utils.d.ts +6 -0
  31. package/dist/types/common/assets/types.d.ts +18 -0
  32. package/dist/types/common/index.d.ts +1 -0
  33. package/dist/types/config/index.d.ts +2 -1
  34. package/dist/types/create-payload/index.d.ts +11616 -0
  35. package/dist/types/resource-timing/index.d.ts +1 -1
  36. package/dist/types/vc/vc-observer/heatmap/heatmap.d.ts +5 -8
  37. package/dist/types/vc/vc-observer/revisions/ViewportUpdateClassifier.d.ts +5 -0
  38. package/dist/types/vc/vc-observer/revisions/fy24_01.d.ts +2 -0
  39. package/dist/types/vc/vc-observer/revisions/types.d.ts +18 -0
  40. package/dist/types-ts4.5/assets/index.d.ts +25 -0
  41. package/dist/types-ts4.5/assets/utils.d.ts +6 -0
  42. package/dist/types-ts4.5/common/assets/types.d.ts +18 -0
  43. package/dist/types-ts4.5/common/index.d.ts +1 -0
  44. package/dist/types-ts4.5/config/index.d.ts +2 -1
  45. package/dist/types-ts4.5/create-payload/index.d.ts +11616 -0
  46. package/dist/types-ts4.5/resource-timing/index.d.ts +1 -1
  47. package/dist/types-ts4.5/vc/vc-observer/heatmap/heatmap.d.ts +5 -8
  48. package/dist/types-ts4.5/vc/vc-observer/revisions/ViewportUpdateClassifier.d.ts +5 -0
  49. package/dist/types-ts4.5/vc/vc-observer/revisions/fy24_01.d.ts +2 -0
  50. package/dist/types-ts4.5/vc/vc-observer/revisions/types.d.ts +18 -0
  51. package/package.json +4 -4
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # @atlaskit/ufo-interaction-ignore
2
2
 
3
+ ## 2.16.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [#116098](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/116098)
8
+ [`9650ffb0c42b2`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/9650ffb0c42b2) -
9
+ Revert: [AFO-3379] Make the DefaultInteractionID trully global across multiple bundles
10
+
11
+ # Impact
12
+
13
+ No impact since the flag was never rolled out
14
+
15
+ ## 2.16.0
16
+
17
+ ### Minor Changes
18
+
19
+ - [#109616](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/109616)
20
+ [`5feb3a695a6d9`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/5feb3a695a6d9) -
21
+ Add Assets API to rUFO
22
+
3
23
  ## 2.15.0
4
24
 
5
25
  ### Minor Changes
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.CHRSummary = exports.CHRReporter = void 0;
8
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
10
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
11
+ var _defineProperty4 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
+ var _utils = require("./utils");
13
+ var CHRSummary = exports.CHRSummary = /*#__PURE__*/function () {
14
+ function CHRSummary() {
15
+ (0, _classCallCheck2.default)(this, CHRSummary);
16
+ (0, _defineProperty4.default)(this, "bundles", (0, _defineProperty4.default)((0, _defineProperty4.default)((0, _defineProperty4.default)({}, _utils.MEMORY_KEY, 0), _utils.DISK_KEY, 0), _utils.NETWORK_KEY, 0));
17
+ (0, _defineProperty4.default)(this, "bundlesCount", 0);
18
+ (0, _defineProperty4.default)(this, "size", (0, _defineProperty4.default)((0, _defineProperty4.default)((0, _defineProperty4.default)({}, _utils.MEMORY_KEY, 0), _utils.DISK_KEY, 0), _utils.NETWORK_KEY, 0));
19
+ (0, _defineProperty4.default)(this, "sizeTotal", 0);
20
+ }
21
+ return (0, _createClass2.default)(CHRSummary, [{
22
+ key: "add",
23
+ value: function add(asset) {
24
+ var size = 'size' in asset ? asset.size : undefined;
25
+ var encodedSize = 'encodedSize' in asset ? Number(asset.encodedSize) : 0;
26
+ var type = (0, _utils.calculateTransferType)(asset.type, asset.duration, size);
27
+ if (type === null) {
28
+ return;
29
+ }
30
+ this.bundles[type] += 1;
31
+ this.bundlesCount += 1;
32
+ this.size[type] += encodedSize;
33
+ this.sizeTotal += encodedSize;
34
+ }
35
+ }], [{
36
+ key: "makePayload",
37
+ value: function makePayload(summary) {
38
+ var size = summary.size,
39
+ bundlesCount = summary.bundlesCount,
40
+ sizeTotal = summary.sizeTotal;
41
+ var cachedSize = size[_utils.MEMORY_KEY] + size[_utils.DISK_KEY];
42
+ var sizeRatio = (0, _utils.round)(cachedSize / summary.sizeTotal);
43
+ return {
44
+ size: sizeTotal,
45
+ chr: sizeRatio,
46
+ count: bundlesCount
47
+ };
48
+ }
49
+ }]);
50
+ }();
51
+ var CHRReporter = exports.CHRReporter = /*#__PURE__*/function () {
52
+ function CHRReporter() {
53
+ (0, _classCallCheck2.default)(this, CHRReporter);
54
+ (0, _defineProperty4.default)(this, "all", new CHRSummary());
55
+ (0, _defineProperty4.default)(this, "allAtlassian", new CHRSummary());
56
+ (0, _defineProperty4.default)(this, "preloaded", new CHRSummary());
57
+ }
58
+ return (0, _createClass2.default)(CHRReporter, [{
59
+ key: "get",
60
+ value: function get(resourceTimings, assetsClassification) {
61
+ var _this = this;
62
+ try {
63
+ Object.entries(resourceTimings).map(function (_ref) {
64
+ var _ref2 = (0, _slicedToArray2.default)(_ref, 2),
65
+ label = _ref2[0],
66
+ entry = _ref2[1];
67
+ if (assetsClassification.all) {
68
+ _this.all.add(entry);
69
+ }
70
+ if (assetsClassification.allAtlassian({
71
+ label: label,
72
+ entry: entry
73
+ })) {
74
+ _this.allAtlassian.add(entry);
75
+ }
76
+ if (assetsClassification.preloaded({
77
+ label: label,
78
+ entry: entry
79
+ })) {
80
+ _this.preloaded.add(entry);
81
+ }
82
+ });
83
+ if (this.all.bundlesCount === 0) {
84
+ return null;
85
+ }
86
+ return {
87
+ all: CHRSummary.makePayload(this.all),
88
+ allAtlassian: CHRSummary.makePayload(this.allAtlassian),
89
+ preloaded: CHRSummary.makePayload(this.preloaded)
90
+ };
91
+ } catch (error) {
92
+ return null;
93
+ }
94
+ }
95
+ }]);
96
+ }();
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.round = exports.calculateTransferType = exports.cacheableTypes = exports.NETWORK_KEY = exports.MEMORY_KEY = exports.DISK_KEY = void 0;
7
+ /* Borrowed from https://bitbucket.org/atlassian/atlassian-frontend/src/master/packages/performance/browser-metrics/src/plugins/timings/resource.ts */
8
+ var cacheableTypes = exports.cacheableTypes = ['script', 'link'];
9
+ var MEMORY_KEY = exports.MEMORY_KEY = 'mem';
10
+ var DISK_KEY = exports.DISK_KEY = 'disk';
11
+ var NETWORK_KEY = exports.NETWORK_KEY = 'net';
12
+ var calculateTransferType = exports.calculateTransferType = function calculateTransferType(type, duration, size) {
13
+ if (!cacheableTypes.includes(type)) {
14
+ return null;
15
+ }
16
+ if ((size === undefined || size === 0) && duration === 0) {
17
+ return MEMORY_KEY;
18
+ }
19
+ if (size === 0 && duration > 0) {
20
+ return DISK_KEY;
21
+ }
22
+ if (size === undefined) {
23
+ return null;
24
+ }
25
+ return NETWORK_KEY;
26
+ };
27
+ var round = exports.round = function round(n) {
28
+ if (isNaN(n)) {
29
+ return 0;
30
+ }
31
+ return Math.round(n * 10000) / 10000;
32
+ };
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -14,6 +14,7 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
14
14
  var _bowserUltralight = _interopRequireDefault(require("bowser-ultralight"));
15
15
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
16
16
  var _additionalPayload = require("../additional-payload");
17
+ var _assets = require("../assets");
17
18
  var bundleEvalTiming = _interopRequireWildcard(require("../bundle-eval-timing"));
18
19
  var _coinflip = _interopRequireDefault(require("../coinflip"));
19
20
  var _constants = require("../common/constants");
@@ -315,6 +316,31 @@ function getSSRProperties(type) {
315
316
  'ssr:featureFlags': getSSRFeatureFlags(type)
316
317
  };
317
318
  }
319
+ var getAssetsMetrics = function getAssetsMetrics(interaction, resourceTimings) {
320
+ try {
321
+ var config = (0, _config.getConfig)();
322
+ var type = interaction.type;
323
+ var isCHREnabled = (0, _platformFeatureFlags.fg)('ufo_chr_config');
324
+ var allowedTypes = ['page_load', 'transition'];
325
+ var assetsClassification = config === null || config === void 0 ? void 0 : config.assetsClassification;
326
+ if (!isCHREnabled || !allowedTypes.includes(type) || !assetsClassification) {
327
+ // Skip if: FG disabled, not allowed type or assetsClassification isn't configured
328
+ return {};
329
+ }
330
+ var reporter = new _assets.CHRReporter();
331
+ var assets = reporter.get(resourceTimings, assetsClassification);
332
+ if (assets) {
333
+ // Only add assets in case it exists
334
+ return {
335
+ 'event:assets': assets
336
+ };
337
+ }
338
+ return {};
339
+ } catch (error) {
340
+ // Skip CHR in case of error
341
+ return {};
342
+ }
343
+ };
318
344
  var getBrowserMetadata = function getBrowserMetadata() {
319
345
  var data = {};
320
346
  var now = new Date();
@@ -729,7 +755,7 @@ function createInteractionMetricsPayload(interaction, interactionId, experimenta
729
755
  });
730
756
  };
731
757
  // Detailed payload. Page visibility = visible
732
- var getDetailedInteractionMetrics = function getDetailedInteractionMetrics() {
758
+ var getDetailedInteractionMetrics = function getDetailedInteractionMetrics(resourceTimings) {
733
759
  if (experimental || window.__UFO_COMPACT_PAYLOAD__ || !isDetailedPayload) {
734
760
  return {};
735
761
  }
@@ -750,7 +776,7 @@ function createInteractionMetricsPayload(interaction, interactionId, experimenta
750
776
  requestInfo: optimizeRequestInfo(interaction.requestInfo, start),
751
777
  customTimings: optimizeCustomTimings(interaction.customTimings, start),
752
778
  bundleEvalTimings: objectToArray(getBundleEvalTimings(start)),
753
- resourceTimings: objectToArray(getResourceTimings(start, end))
779
+ resourceTimings: objectToArray(resourceTimings)
754
780
  };
755
781
  };
756
782
  // Page load & detailed payload
@@ -771,6 +797,7 @@ function createInteractionMetricsPayload(interaction, interactionId, experimenta
771
797
  regularTTAI = getTTAI(interaction);
772
798
  }
773
799
  var newUFOName = (0, _utils.sanitizeUfoName)(ufoName);
800
+ var resourceTimings = getResourceTimings(start, end);
774
801
  var payload = {
775
802
  actionSubject: 'experience',
776
803
  action: 'measured',
@@ -778,7 +805,7 @@ function createInteractionMetricsPayload(interaction, interactionId, experimenta
778
805
  source: 'measured',
779
806
  tags: ['observability'],
780
807
  attributes: {
781
- properties: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
808
+ properties: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
782
809
  // basic
783
810
  'event:hostname': ((_window$location = window.location) === null || _window$location === void 0 ? void 0 : _window$location.hostname) || 'unknown',
784
811
  'event:product': config.product,
@@ -792,7 +819,7 @@ function createInteractionMetricsPayload(interaction, interactionId, experimenta
792
819
  'event:region': config.region || 'unknown',
793
820
  'experience:key': experimental ? 'custom.experimental-interaction-metrics' : 'custom.interaction-metrics',
794
821
  'experience:name': newUFOName
795
- }, getBrowserMetadata()), getSSRProperties(type)), getPPSMetrics(interaction)), getPaintMetrics(type)), getNavigationMetrics(type)), getVCMetrics(interaction)), experimental ? (0, _createExperimentalInteractionMetricsPayload.getExperimentalVCMetrics)(interaction) : undefined), (_config$additionalPay = config.additionalPayloadData) === null || _config$additionalPay === void 0 ? void 0 : _config$additionalPay.call(config, interaction)), getTracingContextData(interaction)), getStylesheetMetrics()), getErrorCounts(interaction)), {}, {
822
+ }, getBrowserMetadata()), getSSRProperties(type)), getAssetsMetrics(interaction, resourceTimings)), getPPSMetrics(interaction)), getPaintMetrics(type)), getNavigationMetrics(type)), getVCMetrics(interaction)), experimental ? (0, _createExperimentalInteractionMetricsPayload.getExperimentalVCMetrics)(interaction) : undefined), (_config$additionalPay = config.additionalPayloadData) === null || _config$additionalPay === void 0 ? void 0 : _config$additionalPay.call(config, interaction)), getTracingContextData(interaction)), getStylesheetMetrics()), getErrorCounts(interaction)), {}, {
796
823
  interactionMetrics: _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
797
824
  namePrefix: config.namePrefix || '',
798
825
  segmentPrefix: config.segmentPrefix || '',
@@ -824,7 +851,7 @@ function createInteractionMetricsPayload(interaction, interactionId, experimenta
824
851
  marks: optimizeMarks(interaction.marks),
825
852
  customData: optimizeCustomData(interaction),
826
853
  reactProfilerTimings: optimizeReactProfilerTimings(interaction.reactProfilerTimings, start)
827
- }, labelStack), getPageLoadInteractionMetrics()), getDetailedInteractionMetrics()), getPageLoadDetailedInteractionMetrics()), getBm3TrackerTimings(interaction)), {}, {
854
+ }, labelStack), getPageLoadInteractionMetrics()), getDetailedInteractionMetrics(resourceTimings)), getPageLoadDetailedInteractionMetrics()), getBm3TrackerTimings(interaction)), {}, {
828
855
  'metric:ttai': experimental ? regularTTAI || expTTAI : undefined,
829
856
  'metric:experimental:ttai': expTTAI
830
857
  }),
@@ -5,24 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.useInteractionId = exports.getInteractionId = exports.default = exports.DefaultInteractionID = void 0;
7
7
  var _react = require("react");
8
- var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
9
- function getGlobalDefaultInteractionID() {
10
- if (!(0, _platformFeatureFlags.fg)('platform_ufo_AFO-3379_fix_default_interaction')) {
11
- return {
12
- current: null
13
- };
14
- }
15
- var ref = globalThis.__react_ufo__DefaultInteractionID;
16
- if (ref) {
17
- return ref;
18
- }
19
- var nextRef = {
20
- current: null
21
- };
22
- globalThis.__react_ufo__DefaultInteractionID = nextRef;
23
- return nextRef;
24
- }
25
-
26
8
  // Same structure as react's useRef.
27
9
  // This allows modals to use a ref to scope their value
28
10
  // const id = useRef(null);
@@ -31,7 +13,9 @@ function getGlobalDefaultInteractionID() {
31
13
  // The default InteractionID object is a global singleton
32
14
  // It's the one that holds the root value used in routing,
33
15
  // and is overwritten when we have new interactions start.
34
- var DefaultInteractionID = exports.DefaultInteractionID = getGlobalDefaultInteractionID();
16
+ var DefaultInteractionID = exports.DefaultInteractionID = {
17
+ current: null
18
+ };
35
19
 
36
20
  // We use a context to allow modals to have their own lifecycle
37
21
  var _default = exports.default = /*#__PURE__*/(0, _react.createContext)(DefaultInteractionID);
@@ -130,6 +130,7 @@ var MultiRevisionHeatmap = exports.MultiRevisionHeatmap = /*#__PURE__*/function
130
130
  value: function processData(_ref4) {
131
131
  var _this3 = this;
132
132
  var VCParts = _ref4.VCParts,
133
+ VCCalculationMethods = _ref4.VCCalculationMethods,
133
134
  _ref4$ssr = _ref4.ssr,
134
135
  ssr = _ref4$ssr === void 0 ? UNUSED_SECTOR : _ref4$ssr;
135
136
  return this.heatmaps.map(function (heatmap, i) {
@@ -172,26 +173,14 @@ var MultiRevisionHeatmap = exports.MultiRevisionHeatmap = /*#__PURE__*/function
172
173
  }).sort(function (a, b) {
173
174
  return a[0] > b[0] ? 1 : -1;
174
175
  });
175
- var VC = MultiRevisionHeatmap.makeVCReturnObj(VCParts);
176
- var VCBox = MultiRevisionHeatmap.makeVCReturnObj(VCParts);
177
- entries.reduce(function () {
178
- var acc = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
179
- var v = arguments.length > 1 ? arguments[1] : undefined;
180
- var VCRatio = v[1] / totalPainted + acc;
181
- var time = v[0];
182
- VCParts.forEach(function (value) {
183
- if ((VC[value] === null || VC[value] === undefined) && VCRatio >= value / 100) {
184
- var _componentsLog$time;
185
- VC[value] = time;
186
- VCBox[value] = new Set();
187
- (_componentsLog$time = componentsLog[time]) === null || _componentsLog$time === void 0 || _componentsLog$time.forEach(function (v) {
188
- var _VCBox$value;
189
- return (_VCBox$value = VCBox[value]) === null || _VCBox$value === void 0 ? void 0 : _VCBox$value.add(v.targetName);
190
- });
191
- }
192
- });
193
- return VCRatio;
194
- }, 0);
176
+ var _VCCalculationMethods = VCCalculationMethods[i]({
177
+ VCParts: VCParts,
178
+ componentsLog: componentsLog,
179
+ entries: entries,
180
+ totalPainted: totalPainted
181
+ }),
182
+ VC = _VCCalculationMethods.VC,
183
+ VCBox = _VCCalculationMethods.VCBox;
195
184
  var VCEntries = entries.reduce(function (acc, _ref5, i) {
196
185
  var _acc$abs, _componentsLog$timest;
197
186
  var _ref6 = (0, _slicedToArray2.default)(_ref5, 2),
@@ -256,6 +256,10 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
256
256
  VCParts: VCObserver.VCParts.map(function (v) {
257
257
  return parseInt(v);
258
258
  }),
259
+ VCCalculationMethods: (0, _revisions.getRevisions)().map(function (_ref8) {
260
+ var classifier = _ref8.classifier;
261
+ return classifier.VCCalculationMethod;
262
+ }),
259
263
  ssr: ssr,
260
264
  clean: !abortReasonInfo
261
265
  })) : null;
@@ -302,13 +306,13 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
302
306
  });
303
307
  }
304
308
  });
305
- (0, _defineProperty2.default)(this, "onViewportChangeDetected", function (_ref9) {
306
- var element = _ref9.element,
307
- type = _ref9.type,
308
- ignoreReason = _ref9.ignoreReason,
309
- timestamp = _ref9.timestamp,
310
- targetName = _ref9.targetName,
311
- intersectionRect = _ref9.intersectionRect;
309
+ (0, _defineProperty2.default)(this, "onViewportChangeDetected", function (_ref10) {
310
+ var element = _ref10.element,
311
+ type = _ref10.type,
312
+ ignoreReason = _ref10.ignoreReason,
313
+ timestamp = _ref10.timestamp,
314
+ targetName = _ref10.targetName,
315
+ intersectionRect = _ref10.intersectionRect;
312
316
  if (_this.multiHeatmap === null) {
313
317
  return;
314
318
  }
@@ -390,10 +394,10 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
390
394
  var unbinds = (0, _attachAbortListeners.attachAbortListeners)(window, _this.viewport, _this.abortReasonCallback);
391
395
  if ((_window = window) !== null && _window !== void 0 && _window.__SSR_ABORT_LISTENERS__) {
392
396
  var _window2;
393
- Object.entries(window.__SSR_ABORT_LISTENERS__.aborts).forEach(function (_ref10) {
394
- var _ref11 = (0, _slicedToArray2.default)(_ref10, 2),
395
- key = _ref11[0],
396
- time = _ref11[1];
397
+ Object.entries(window.__SSR_ABORT_LISTENERS__.aborts).forEach(function (_ref11) {
398
+ var _ref12 = (0, _slicedToArray2.default)(_ref11, 2),
399
+ key = _ref12[0],
400
+ time = _ref12[1];
397
401
  if (time) {
398
402
  _this.abortReasonCallback(key, time);
399
403
  }
@@ -428,8 +432,8 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
428
432
  }
429
433
  return (0, _createClass2.default)(VCObserver, [{
430
434
  key: "start",
431
- value: function start(_ref12) {
432
- var startTime = _ref12.startTime;
435
+ value: function start(_ref13) {
436
+ var startTime = _ref13.startTime;
433
437
  this.active = true;
434
438
  if (this.observers.isBrowserSupported()) {
435
439
  this.setViewportSize();
@@ -451,12 +455,12 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
451
455
  }, {
452
456
  key: "getIgnoredElements",
453
457
  value: function getIgnoredElements(componentsLog) {
454
- return Object.values(componentsLog).flat().filter(function (_ref13) {
455
- var ignoreReason = _ref13.ignoreReason;
458
+ return Object.values(componentsLog).flat().filter(function (_ref14) {
459
+ var ignoreReason = _ref14.ignoreReason;
456
460
  return Boolean(ignoreReason);
457
- }).map(function (_ref14) {
458
- var targetName = _ref14.targetName,
459
- ignoreReason = _ref14.ignoreReason;
461
+ }).map(function (_ref15) {
462
+ var targetName = _ref15.targetName,
463
+ ignoreReason = _ref15.ignoreReason;
460
464
  return {
461
465
  targetName: targetName,
462
466
  ignoreReason: ignoreReason
@@ -577,12 +581,12 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
577
581
  }
578
582
  }], [{
579
583
  key: "calculateVC",
580
- value: function calculateVC(_ref15) {
581
- var heatmap = _ref15.heatmap,
582
- _ref15$ssr = _ref15.ssr,
583
- ssr = _ref15$ssr === void 0 ? UNUSED_SECTOR : _ref15$ssr,
584
- componentsLog = _ref15.componentsLog,
585
- viewport = _ref15.viewport;
584
+ value: function calculateVC(_ref16) {
585
+ var heatmap = _ref16.heatmap,
586
+ _ref16$ssr = _ref16.ssr,
587
+ ssr = _ref16$ssr === void 0 ? UNUSED_SECTOR : _ref16$ssr,
588
+ componentsLog = _ref16.componentsLog,
589
+ viewport = _ref16.viewport;
586
590
  var lastUpdate = {};
587
591
  var totalPainted = 0;
588
592
  if (ssr !== UNUSED_SECTOR) {
@@ -651,11 +655,11 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
651
655
  });
652
656
  return VCRatio;
653
657
  }, 0);
654
- var VCEntries = entries.reduce(function (acc, _ref16, i) {
658
+ var VCEntries = entries.reduce(function (acc, _ref17, i) {
655
659
  var _acc$abs, _componentsLog$timest, _acc$rel$vc, _acc$rel;
656
- var _ref17 = (0, _slicedToArray2.default)(_ref16, 2),
657
- timestamp = _ref17[0],
658
- entryPainted = _ref17[1];
660
+ var _ref18 = (0, _slicedToArray2.default)(_ref17, 2),
661
+ timestamp = _ref18[0],
662
+ entryPainted = _ref18[1];
659
663
  var currentlyPainted = entryPainted + (((_acc$abs = acc.abs[i - 1]) === null || _acc$abs === void 0 ? void 0 : _acc$abs[1]) || 0);
660
664
  var currentlyPaintedRatio = Math.round(currentlyPainted / totalPainted * 1000) / 10;
661
665
  var logEntry = (_componentsLog$timest = componentsLog[timestamp]) === null || _componentsLog$timest === void 0 ? void 0 : _componentsLog$timest.map(function (v) {
@@ -19,6 +19,14 @@ var ViewportUpdateClassifier = exports.ViewportUpdateClassifier = /*#__PURE__*/f
19
19
  (0, _defineProperty2.default)(this, "__combinedFilters", []);
20
20
  }
21
21
  return (0, _createClass2.default)(ViewportUpdateClassifier, [{
22
+ key: "VCCalculationMethod",
23
+ value: function VCCalculationMethod(_) {
24
+ return {
25
+ VC: {},
26
+ VCBox: {}
27
+ };
28
+ }
29
+ }, {
22
30
  key: "mergeConfig",
23
31
  value: function mergeConfig() {
24
32
  var _this = this;
@@ -5,8 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.revFY24_01Classifier = exports.FY24_01Classifier = void 0;
8
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
9
8
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
9
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
10
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
11
11
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
12
12
  var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
@@ -34,6 +34,38 @@ var FY24_01Classifier = exports.FY24_01Classifier = /*#__PURE__*/function (_View
34
34
  return _this;
35
35
  }
36
36
  (0, _inherits2.default)(FY24_01Classifier, _ViewportUpdateClassi);
37
- return (0, _createClass2.default)(FY24_01Classifier);
37
+ return (0, _createClass2.default)(FY24_01Classifier, [{
38
+ key: "VCCalculationMethod",
39
+ value: function VCCalculationMethod(_ref2) {
40
+ var VCParts = _ref2.VCParts,
41
+ entries = _ref2.entries,
42
+ totalPainted = _ref2.totalPainted,
43
+ componentsLog = _ref2.componentsLog;
44
+ var VC = {};
45
+ var VCBox = {};
46
+ entries.reduce(function () {
47
+ var acc = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
48
+ var v = arguments.length > 1 ? arguments[1] : undefined;
49
+ var VCRatio = v[1] / totalPainted + acc;
50
+ var time = v[0];
51
+ VCParts.forEach(function (value) {
52
+ if ((VC[value] === null || VC[value] === undefined) && VCRatio >= value / 100) {
53
+ var _componentsLog$time;
54
+ VC[value] = time;
55
+ VCBox[value] = new Set();
56
+ (_componentsLog$time = componentsLog[time]) === null || _componentsLog$time === void 0 || _componentsLog$time.forEach(function (v) {
57
+ var _VCBox$value;
58
+ return (_VCBox$value = VCBox[value]) === null || _VCBox$value === void 0 ? void 0 : _VCBox$value.add(v.targetName);
59
+ });
60
+ }
61
+ });
62
+ return VCRatio;
63
+ }, 0);
64
+ return {
65
+ VC: VC,
66
+ VCBox: VCBox
67
+ };
68
+ }
69
+ }]);
38
70
  }(_ViewportUpdateClassifier.ViewportUpdateClassifier);
39
71
  var revFY24_01Classifier = exports.revFY24_01Classifier = new FY24_01Classifier();
@@ -0,0 +1,82 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import { calculateTransferType, DISK_KEY, MEMORY_KEY, NETWORK_KEY, round } from './utils';
3
+ export class CHRSummary {
4
+ constructor() {
5
+ _defineProperty(this, "bundles", {
6
+ [MEMORY_KEY]: 0,
7
+ [DISK_KEY]: 0,
8
+ [NETWORK_KEY]: 0
9
+ });
10
+ _defineProperty(this, "bundlesCount", 0);
11
+ _defineProperty(this, "size", {
12
+ [MEMORY_KEY]: 0,
13
+ [DISK_KEY]: 0,
14
+ [NETWORK_KEY]: 0
15
+ });
16
+ _defineProperty(this, "sizeTotal", 0);
17
+ }
18
+ add(asset) {
19
+ const size = 'size' in asset ? asset.size : undefined;
20
+ const encodedSize = 'encodedSize' in asset ? Number(asset.encodedSize) : 0;
21
+ const type = calculateTransferType(asset.type, asset.duration, size);
22
+ if (type === null) {
23
+ return;
24
+ }
25
+ this.bundles[type] += 1;
26
+ this.bundlesCount += 1;
27
+ this.size[type] += encodedSize;
28
+ this.sizeTotal += encodedSize;
29
+ }
30
+ static makePayload(summary) {
31
+ const {
32
+ size,
33
+ bundlesCount,
34
+ sizeTotal
35
+ } = summary;
36
+ const cachedSize = size[MEMORY_KEY] + size[DISK_KEY];
37
+ const sizeRatio = round(cachedSize / summary.sizeTotal);
38
+ return {
39
+ size: sizeTotal,
40
+ chr: sizeRatio,
41
+ count: bundlesCount
42
+ };
43
+ }
44
+ }
45
+ export class CHRReporter {
46
+ constructor() {
47
+ _defineProperty(this, "all", new CHRSummary());
48
+ _defineProperty(this, "allAtlassian", new CHRSummary());
49
+ _defineProperty(this, "preloaded", new CHRSummary());
50
+ }
51
+ get(resourceTimings, assetsClassification) {
52
+ try {
53
+ Object.entries(resourceTimings).map(([label, entry]) => {
54
+ if (assetsClassification.all) {
55
+ this.all.add(entry);
56
+ }
57
+ if (assetsClassification.allAtlassian({
58
+ label,
59
+ entry
60
+ })) {
61
+ this.allAtlassian.add(entry);
62
+ }
63
+ if (assetsClassification.preloaded({
64
+ label,
65
+ entry
66
+ })) {
67
+ this.preloaded.add(entry);
68
+ }
69
+ });
70
+ if (this.all.bundlesCount === 0) {
71
+ return null;
72
+ }
73
+ return {
74
+ all: CHRSummary.makePayload(this.all),
75
+ allAtlassian: CHRSummary.makePayload(this.allAtlassian),
76
+ preloaded: CHRSummary.makePayload(this.preloaded)
77
+ };
78
+ } catch (error) {
79
+ return null;
80
+ }
81
+ }
82
+ }
@@ -0,0 +1,26 @@
1
+ /* Borrowed from https://bitbucket.org/atlassian/atlassian-frontend/src/master/packages/performance/browser-metrics/src/plugins/timings/resource.ts */
2
+ export const cacheableTypes = ['script', 'link'];
3
+ export const MEMORY_KEY = 'mem';
4
+ export const DISK_KEY = 'disk';
5
+ export const NETWORK_KEY = 'net';
6
+ export const calculateTransferType = (type, duration, size) => {
7
+ if (!cacheableTypes.includes(type)) {
8
+ return null;
9
+ }
10
+ if ((size === undefined || size === 0) && duration === 0) {
11
+ return MEMORY_KEY;
12
+ }
13
+ if (size === 0 && duration > 0) {
14
+ return DISK_KEY;
15
+ }
16
+ if (size === undefined) {
17
+ return null;
18
+ }
19
+ return NETWORK_KEY;
20
+ };
21
+ export const round = n => {
22
+ if (isNaN(n)) {
23
+ return 0;
24
+ }
25
+ return Math.round(n * 10000) / 10000;
26
+ };
@@ -0,0 +1 @@
1
+ export {};