@atlaskit/react-ufo 4.15.1 → 4.15.3

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 (63) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/cjs/create-payload/index.js +18 -791
  3. package/dist/cjs/create-payload/utils/get-visibility-state-from-performance.js +1 -0
  4. package/dist/cjs/interaction-id-context/index.js +2 -1
  5. package/dist/cjs/ssr/index.js +103 -8
  6. package/dist/cjs/vc/vc-observer-new/metric-calculator/fy25_03/index.js +1 -1
  7. package/dist/es2019/create-payload/index.js +20 -712
  8. package/dist/es2019/create-payload/utils/get-visibility-state-from-performance.js +1 -0
  9. package/dist/es2019/interaction-id-context/index.js +2 -1
  10. package/dist/es2019/ssr/index.js +103 -8
  11. package/dist/es2019/vc/vc-observer-new/metric-calculator/fy25_03/index.js +1 -1
  12. package/dist/esm/create-payload/index.js +18 -783
  13. package/dist/esm/create-payload/utils/get-visibility-state-from-performance.js +1 -0
  14. package/dist/esm/interaction-id-context/index.js +2 -1
  15. package/dist/esm/ssr/index.js +102 -8
  16. package/dist/esm/vc/vc-observer-new/metric-calculator/fy25_03/index.js +1 -1
  17. package/dist/types/assets/utils.d.ts +1 -1
  18. package/dist/types/create-experimental-interaction-metrics-payload/index.d.ts +2 -1
  19. package/dist/types/create-interaction-extra-metrics-payload/index.d.ts +17 -14
  20. package/dist/types/create-payload/index.d.ts +8598 -8594
  21. package/dist/types/create-payload/utils/get-more-accurate-page-visibility-up-to-ttai.d.ts +2 -1
  22. package/dist/types/create-payload/utils/get-page-visibility-up-to-ttai.d.ts +2 -1
  23. package/dist/types/create-payload/utils/get-react-ufo-payload-version.d.ts +1 -1
  24. package/dist/types/create-payload/utils/optimize-apdex.d.ts +2 -1
  25. package/dist/types/create-payload/utils/optimize-marks.d.ts +4 -3
  26. package/dist/types/create-post-interaction-log-payload/index.d.ts +5 -4
  27. package/dist/types/experience-trace-id-context/index.d.ts +2 -1
  28. package/dist/types/ignore-holds/index.d.ts +1 -1
  29. package/dist/types/interaction-id-context/index.d.ts +3 -2
  30. package/dist/types/label/UFOLabel.d.ts +1 -1
  31. package/dist/types/load-hold/UFOLoadHold.d.ts +1 -1
  32. package/dist/types/placeholder/loosely-lazy/wait-context.d.ts +2 -1
  33. package/dist/types/report-error/index.d.ts +1 -1
  34. package/dist/types/ssr/index.d.ts +1 -0
  35. package/dist/types/trace-interaction/internal/map-to-interaction-type.d.ts +1 -1
  36. package/dist/types/typing-performance-tracing/index.d.ts +2 -1
  37. package/dist/types/vc/vc-observer/media-wrapper/MediaWrapper.d.ts +1 -1
  38. package/dist/types/vc/vc-observer/observers/ssr-placeholders/index.d.ts +3 -3
  39. package/dist/types/vc/vc-observer-new/viewport-observer/performance-observer/index.d.ts +1 -1
  40. package/dist/types-ts4.5/assets/utils.d.ts +1 -1
  41. package/dist/types-ts4.5/create-experimental-interaction-metrics-payload/index.d.ts +2 -1
  42. package/dist/types-ts4.5/create-interaction-extra-metrics-payload/index.d.ts +17 -14
  43. package/dist/types-ts4.5/create-payload/index.d.ts +8598 -8594
  44. package/dist/types-ts4.5/create-payload/utils/get-more-accurate-page-visibility-up-to-ttai.d.ts +2 -1
  45. package/dist/types-ts4.5/create-payload/utils/get-page-visibility-up-to-ttai.d.ts +2 -1
  46. package/dist/types-ts4.5/create-payload/utils/get-react-ufo-payload-version.d.ts +1 -1
  47. package/dist/types-ts4.5/create-payload/utils/optimize-apdex.d.ts +2 -1
  48. package/dist/types-ts4.5/create-payload/utils/optimize-marks.d.ts +4 -3
  49. package/dist/types-ts4.5/create-post-interaction-log-payload/index.d.ts +5 -4
  50. package/dist/types-ts4.5/experience-trace-id-context/index.d.ts +2 -1
  51. package/dist/types-ts4.5/ignore-holds/index.d.ts +1 -1
  52. package/dist/types-ts4.5/interaction-id-context/index.d.ts +3 -2
  53. package/dist/types-ts4.5/label/UFOLabel.d.ts +1 -1
  54. package/dist/types-ts4.5/load-hold/UFOLoadHold.d.ts +1 -1
  55. package/dist/types-ts4.5/placeholder/loosely-lazy/wait-context.d.ts +2 -1
  56. package/dist/types-ts4.5/report-error/index.d.ts +1 -1
  57. package/dist/types-ts4.5/ssr/index.d.ts +1 -0
  58. package/dist/types-ts4.5/trace-interaction/internal/map-to-interaction-type.d.ts +1 -1
  59. package/dist/types-ts4.5/typing-performance-tracing/index.d.ts +2 -1
  60. package/dist/types-ts4.5/vc/vc-observer/media-wrapper/MediaWrapper.d.ts +1 -1
  61. package/dist/types-ts4.5/vc/vc-observer/observers/ssr-placeholders/index.d.ts +3 -3
  62. package/dist/types-ts4.5/vc/vc-observer-new/viewport-observer/performance-observer/index.d.ts +1 -1
  63. package/package.json +4 -1
@@ -4,6 +4,7 @@ export function getVisibilityStateFromPerformance(stop) {
4
4
  if (!results || results.length === 0) {
5
5
  return null;
6
6
  }
7
+ // @ts-ignore
7
8
  return results.reduce(function () {
8
9
  var acc = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
9
10
  var _ref = arguments.length > 1 ? arguments[1] : undefined,
@@ -63,7 +63,8 @@ export var subscribeToInteractionIdChanges = function subscribeToInteractionIdCh
63
63
  };
64
64
 
65
65
  // We use a context to allow modals to have their own lifecycle
66
- export default /*#__PURE__*/createContext(DefaultInteractionID);
66
+ var _default_1 = /*#__PURE__*/createContext(DefaultInteractionID);
67
+ export default _default_1;
67
68
  export var getInteractionId = function getInteractionId() {
68
69
  return DefaultInteractionID;
69
70
  };
@@ -2,8 +2,7 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
2
  import _typeof from "@babel/runtime/helpers/typeof";
3
3
  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; }
4
4
  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; }
5
- //
6
-
5
+ import { fg } from '@atlaskit/platform-feature-flags';
7
6
  var NESTED_METRIC_SEPARATOR = '/';
8
7
  function filterEntry(entry) {
9
8
  return !(!entry || _typeof(entry) !== 'object' || entry.startTime < 0 || entry.duration < 0);
@@ -27,16 +26,111 @@ var config;
27
26
  export function configure(ssrConfig) {
28
27
  config = ssrConfig;
29
28
  }
29
+ function getPerformanceNavigationTiming() {
30
+ var _performance$getEntri;
31
+ // getEntriesByType doesn't change the returned type based on the given type key
32
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
33
+ return (_performance$getEntri = performance.getEntriesByType('navigation')) === null || _performance$getEntri === void 0 ? void 0 : _performance$getEntri[0];
34
+ }
35
+ function getServerTimingsByName() {
36
+ var _getPerformanceNaviga, _getPerformanceNaviga2;
37
+ var serverTimingsByName = Object.fromEntries((_getPerformanceNaviga = (_getPerformanceNaviga2 = getPerformanceNavigationTiming()) === null || _getPerformanceNaviga2 === void 0 || (_getPerformanceNaviga2 = _getPerformanceNaviga2.serverTiming) === null || _getPerformanceNaviga2 === void 0 ? void 0 : _getPerformanceNaviga2.map(function (timing) {
38
+ return [timing.name, timing];
39
+ })) !== null && _getPerformanceNaviga !== void 0 ? _getPerformanceNaviga : []);
40
+ return serverTimingsByName;
41
+ }
42
+
43
+ /**
44
+ * If we have the edge's view of ttfb and the clients view as well, then we should take the gap between them as
45
+ * the offset to use foe edge start time.
46
+ * This will simulate the network delays between the client and the edge as an edge startTime increase
47
+ */
48
+ function getEdgeOffset(edgeTtfb) {
49
+ var _getPerformanceNaviga3;
50
+ var clientTtfb = (_getPerformanceNaviga3 = getPerformanceNavigationTiming()) === null || _getPerformanceNaviga3 === void 0 ? void 0 : _getPerformanceNaviga3.responseStart;
51
+ if (edgeTtfb == null || clientTtfb == null) {
52
+ return 0;
53
+ }
54
+ return clientTtfb - edgeTtfb;
55
+ }
56
+ export function getEdgeTimingsIncludingCloudfront() {
57
+ var _serverTimingsByName$, _serverTimingsByName$2, _serverTimingsByName$3, _serverTimingsByName$4, _serverTimingsByName$5, _serverTimingsByName$6, _serverTimingsByName$7, _serverTimingsByName$8, _serverTimingsByName$9;
58
+ var serverTimingsByName = getServerTimingsByName();
59
+ var edgeTotalDuration = (_serverTimingsByName$ = (_serverTimingsByName$2 = serverTimingsByName['cdn-downstream-fbl']) === null || _serverTimingsByName$2 === void 0 ? void 0 : _serverTimingsByName$2.duration) !== null && _serverTimingsByName$ !== void 0 ? _serverTimingsByName$ : (_serverTimingsByName$3 = serverTimingsByName['atl-edge']) === null || _serverTimingsByName$3 === void 0 ? void 0 : _serverTimingsByName$3.duration;
60
+ if (!edgeTotalDuration) {
61
+ return null;
62
+ }
63
+ var edgeOffset = getEdgeOffset(edgeTotalDuration);
64
+ var cfInternalDuration = (((_serverTimingsByName$4 = serverTimingsByName['cdn-upstream-dns']) === null || _serverTimingsByName$4 === void 0 ? void 0 : _serverTimingsByName$4.duration) || 0) + (((_serverTimingsByName$5 = serverTimingsByName['cdn-upstream-connect']) === null || _serverTimingsByName$5 === void 0 ? void 0 : _serverTimingsByName$5.duration) || 0);
65
+ var cfUpstreamDuration = (((_serverTimingsByName$6 = serverTimingsByName['cdn-upstream-fbl']) === null || _serverTimingsByName$6 === void 0 ? void 0 : _serverTimingsByName$6.duration) || 0) - cfInternalDuration;
66
+ var cfDownstreamDuration = (((_serverTimingsByName$7 = serverTimingsByName['cdn-downstream-fbl']) === null || _serverTimingsByName$7 === void 0 ? void 0 : _serverTimingsByName$7.duration) || 0) - (((_serverTimingsByName$8 = serverTimingsByName['cdn-upstream-fbl']) === null || _serverTimingsByName$8 === void 0 ? void 0 : _serverTimingsByName$8.duration) || 0);
67
+ var atlEdgeDuration = (_serverTimingsByName$9 = serverTimingsByName['atl-edge']) === null || _serverTimingsByName$9 === void 0 ? void 0 : _serverTimingsByName$9.duration;
68
+ var cfToAtlEdgeNetworkDuration = cfUpstreamDuration - atlEdgeDuration;
69
+ var edgeTimings = {
70
+ edge: {
71
+ startTime: edgeOffset,
72
+ duration: edgeTotalDuration
73
+ }
74
+ };
75
+ if (typeof serverTimingsByName['cdn-downstream-fbl'] !== 'undefined') {
76
+ var _serverTimingsByName$0;
77
+ edgeTimings['edge/cf'] = {
78
+ startTime: edgeOffset,
79
+ duration: (_serverTimingsByName$0 = serverTimingsByName['cdn-downstream-fbl']) === null || _serverTimingsByName$0 === void 0 ? void 0 : _serverTimingsByName$0.duration
80
+ };
81
+ edgeTimings['edge/cf/internal'] = {
82
+ startTime: edgeOffset,
83
+ duration: cfInternalDuration
84
+ };
85
+ edgeTimings['edge/cf/upstream'] = {
86
+ startTime: edgeOffset + cfInternalDuration,
87
+ duration: cfUpstreamDuration
88
+ };
89
+ edgeTimings['edge/cf/downstream'] = {
90
+ startTime: edgeOffset + cfInternalDuration + cfUpstreamDuration,
91
+ duration: cfDownstreamDuration
92
+ };
93
+ }
94
+ if (typeof serverTimingsByName['atl-edge'] !== 'undefined') {
95
+ var _serverTimingsByName$1;
96
+ edgeTimings['edge/atl-edge'] = {
97
+ startTime: edgeOffset + cfInternalDuration + cfToAtlEdgeNetworkDuration,
98
+ duration: atlEdgeDuration
99
+ };
100
+ edgeTimings['edge/atl-edge/internal'] = {
101
+ startTime: edgeOffset + cfInternalDuration + cfToAtlEdgeNetworkDuration,
102
+ duration: (_serverTimingsByName$1 = serverTimingsByName['atl-edge-internal']) === null || _serverTimingsByName$1 === void 0 ? void 0 : _serverTimingsByName$1.duration
103
+ };
104
+ edgeTimings['edge/atl-edge/ttfb'] = {
105
+ startTime: edgeOffset + cfInternalDuration + cfToAtlEdgeNetworkDuration,
106
+ duration: atlEdgeDuration
107
+ };
108
+ edgeTimings['edge/cf/upstream/network'] = {
109
+ startTime: edgeOffset + cfInternalDuration,
110
+ duration: cfToAtlEdgeNetworkDuration
111
+ };
112
+ }
113
+
114
+ // we need a timer here to prevent UFO pipeline from shifting SSR timers to start at 0
115
+ (edgeTimings === null || edgeTimings === void 0 ? void 0 : edgeTimings.edge) && edgeOffset && Object.assign(edgeTimings, {
116
+ 'client-network': {
117
+ startTime: 0,
118
+ duration: edgeOffset
119
+ }
120
+ });
121
+ return edgeTimings;
122
+ }
30
123
  export function getSSRTimings() {
31
124
  var _config;
32
- if (!((_config = config) !== null && _config !== void 0 && _config.getTimings)) {
33
- return {};
125
+ var defaultSSRTimings = {};
126
+ if (fg('platform_ufo_default_ssr_edge_timings')) {
127
+ defaultSSRTimings = getEdgeTimingsIncludingCloudfront();
34
128
  }
35
- var timings = config.getTimings();
36
- if (!timings) {
37
- return {};
129
+ var configTimings = {};
130
+ if (typeof ((_config = config) === null || _config === void 0 ? void 0 : _config.getTimings) === 'function') {
131
+ configTimings = config.getTimings();
38
132
  }
39
- var ssrTimings = Object.entries(timings).reduce(function (acc, entry) {
133
+ var ssrTimings = Object.entries(_objectSpread(_objectSpread({}, configTimings), defaultSSRTimings)).reduce(function (acc, entry) {
40
134
  if (filterEntry(entry[1])) {
41
135
  acc[mapKey(entry[0])] = mapEntry(entry[1]);
42
136
  }
@@ -58,7 +58,7 @@ var VCCalculator_FY25_03 = /*#__PURE__*/function (_AbstractVCCalculator) {
58
58
  if (entry.data.type === 'mutation:media' && fg('media-perf-uplift-mutation-fix')) {
59
59
  var entryData = entry.data;
60
60
  var attributeName = entryData.attributeName;
61
- if (attributeName && (/data-(test|file|context|cursor)-\S+/g.test(attributeName) || attributeName === 'alt' || (attributeName === 'localid' || attributeName === 'contenteditable' || attributeName === 'anchor-name') && expVal('platform_editor_media_vc_fixes', 'isEnabled', false))) {
61
+ if (attributeName && (/data-(test|file|context)-\S+/g.test(attributeName) || attributeName === 'data-cursor' || attributeName === 'alt' || (attributeName === 'localid' || attributeName === 'contenteditable' || attributeName === 'anchor-name') && expVal('platform_editor_media_vc_fixes', 'isEnabled', false))) {
62
62
  return false;
63
63
  }
64
64
 
@@ -3,7 +3,7 @@ export declare const cacheableTypes: string[];
3
3
  export declare const MEMORY_KEY = "mem";
4
4
  export declare const DISK_KEY = "disk";
5
5
  export declare const NETWORK_KEY = "net";
6
- export declare function calculateTransferType(name: string, type: string, duration: number, size: number | undefined): "disk" | "mem" | "net" | null;
6
+ export declare function calculateTransferType(name: string, type: string, duration: number, size: number | undefined): 'mem' | 'disk' | 'net' | null;
7
7
  export declare function getTypeOfRequest({ name, initiatorType: type }: ResourceEntry): string;
8
8
  export declare function checkIfTimingsAvailable(entry: ResourceEntry): boolean;
9
9
  export declare function round(n: number): number;
@@ -1,4 +1,5 @@
1
1
  import type { InteractionMetrics } from '../common';
2
+ import type { VCResult } from '../common/vc/types';
2
3
  import type { VCObserverOptions } from '../vc/types';
3
4
  import { VCObserver } from '../vc/vc-observer';
4
5
  type InteractionMetricsHandler = (interactionId: string, interaction: InteractionMetrics) => void | Promise<void>;
@@ -13,5 +14,5 @@ export declare class ExperimentalVCMetrics {
13
14
  }): void;
14
15
  }
15
16
  export declare const experimentalVC: ExperimentalVCMetrics;
16
- export declare function getExperimentalVCMetrics(interaction: InteractionMetrics): Promise<import("../common/vc/types").VCResult | null>;
17
+ export declare function getExperimentalVCMetrics(interaction: InteractionMetrics): Promise<VCResult | null>;
17
18
  export {};
@@ -1,6 +1,9 @@
1
- import type { InteractionMetrics } from '../common';
1
+ import type { AbortReasonType, CustomData, HoldActive, InteractionMetrics, MarkType } from '../common';
2
+ import type { PageVisibility } from '../common/react-ufo-payload-schema';
2
3
  import type { VCResult } from '../common/vc/types';
4
+ import type { OptimizedLabelStack } from '../create-payload/common/types';
3
5
  import type { LabelStack } from '../interaction-context';
6
+ import type { UFOSegmentType } from '../segment/segment';
4
7
  declare function createInteractionExtraLogPayload(interactionId: string, interaction: InteractionMetrics, lastInteractionFinish: InteractionMetrics | null, lastInteractionFinishVCResult?: VCResult): Promise<{
5
8
  actionSubject: string;
6
9
  action: string;
@@ -23,7 +26,7 @@ declare function createInteractionExtraLogPayload(interactionId: string, interac
23
26
  interactionMetrics: {
24
27
  errors: {
25
28
  labelStack: string | {
26
- t?: import("../segment/segment").UFOSegmentType | undefined;
29
+ t?: UFOSegmentType | undefined;
27
30
  s?: string | undefined;
28
31
  n: string;
29
32
  }[] | null;
@@ -35,38 +38,38 @@ declare function createInteractionExtraLogPayload(interactionId: string, interac
35
38
  errorHash?: string;
36
39
  errorStatusCode?: number;
37
40
  }[];
38
- holdActive: import("../common").HoldActive[];
41
+ holdActive: HoldActive[];
39
42
  holdInfo: any[];
40
43
  spans: {
41
- labelStack: import("../create-payload/common/types").OptimizedLabelStack;
44
+ labelStack: OptimizedLabelStack;
42
45
  startTime: number;
43
46
  endTime: number;
44
47
  type: string;
45
48
  }[];
46
49
  requestInfo: {
47
- labelStack: import("../create-payload/common/types").OptimizedLabelStack;
50
+ labelStack: OptimizedLabelStack;
48
51
  startTime: number;
49
52
  endTime: number;
50
53
  }[];
51
54
  customTimings: {
52
- labelStack: import("../create-payload/common/types").OptimizedLabelStack;
55
+ labelStack: OptimizedLabelStack;
53
56
  startTime: number;
54
57
  endTime: number;
55
58
  }[];
56
59
  segments: {};
57
60
  marks: {
58
61
  labelStack: string | {
59
- t?: import("../segment/segment").UFOSegmentType | undefined;
62
+ t?: UFOSegmentType | undefined;
60
63
  s?: string | undefined;
61
64
  n: string;
62
65
  }[] | null;
63
66
  time: number;
64
- type: import("../common").MarkType;
67
+ type: MarkType;
65
68
  name: string;
66
69
  }[];
67
70
  apdex: {
68
71
  labelStack?: string | {
69
- t?: import("../segment/segment").UFOSegmentType | undefined;
72
+ t?: UFOSegmentType | undefined;
70
73
  s?: string | undefined;
71
74
  n: string;
72
75
  }[] | undefined;
@@ -77,18 +80,18 @@ declare function createInteractionExtraLogPayload(interactionId: string, interac
77
80
  reactProfilerTimings: any[];
78
81
  customData: {
79
82
  labelStack: LabelStack;
80
- data: import("../common").CustomData;
83
+ data: CustomData;
81
84
  }[];
82
85
  'metric:vc90'?: number | null;
83
86
  namePrefix: string;
84
87
  segmentPrefix: string;
85
88
  interactionId: string;
86
- pageVisibilityAtTTAI: import("../common/react-ufo-payload-schema").PageVisibility;
87
- experimental__pageVisibilityAtTTAI: import("../common/react-ufo-payload-schema").PageVisibility | null;
89
+ pageVisibilityAtTTAI: PageVisibility;
90
+ experimental__pageVisibilityAtTTAI: PageVisibility | null;
88
91
  rate: number;
89
92
  routeName: string | null;
90
- type: "page_load" | "transition";
91
- abortReason: import("../common").AbortReasonType | undefined;
93
+ type: 'page_load' | 'transition';
94
+ abortReason: AbortReasonType | undefined;
92
95
  previousInteractionName: string | undefined;
93
96
  isPreviousInteractionAborted: boolean;
94
97
  abortedByInteractionName: string | undefined;