@atlaskit/react-ufo 5.2.3 → 5.2.5

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 (27) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/create-payload/index.js +5 -3
  3. package/dist/cjs/create-payload/utils/trim-vc-debug-data.js +72 -0
  4. package/dist/cjs/set-terminal-error/index.js +8 -2
  5. package/dist/cjs/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.js +25 -28
  6. package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.js +6 -10
  7. package/dist/es2019/create-payload/index.js +4 -2
  8. package/dist/es2019/create-payload/utils/trim-vc-debug-data.js +48 -0
  9. package/dist/es2019/set-terminal-error/index.js +8 -2
  10. package/dist/es2019/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.js +2 -5
  11. package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.js +6 -10
  12. package/dist/esm/create-payload/index.js +5 -3
  13. package/dist/esm/create-payload/utils/trim-vc-debug-data.js +64 -0
  14. package/dist/esm/set-terminal-error/index.js +8 -2
  15. package/dist/esm/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.js +25 -28
  16. package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.js +6 -10
  17. package/dist/types/create-payload/utils/trim-vc-debug-data.d.ts +20 -0
  18. package/dist/types/create-terminal-error-payload/index.d.ts +1 -0
  19. package/dist/types/set-terminal-error/index.d.ts +2 -0
  20. package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.d.ts +2 -2
  21. package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/types.d.ts +0 -5
  22. package/dist/types-ts4.5/create-payload/utils/trim-vc-debug-data.d.ts +20 -0
  23. package/dist/types-ts4.5/create-terminal-error-payload/index.d.ts +1 -0
  24. package/dist/types-ts4.5/set-terminal-error/index.d.ts +2 -0
  25. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.d.ts +2 -2
  26. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/types.d.ts +0 -5
  27. package/package.json +2 -2
@@ -30,8 +30,7 @@ async function calculateTTVCPercentiles({
30
30
  async function calculateTTVCPercentilesWithDebugInfo({
31
31
  viewport,
32
32
  orderedEntries,
33
- startTime,
34
- calculateSpeedIndex = false
33
+ startTime
35
34
  }) {
36
35
  const canvas = new ViewportCanvas(viewport, fg('platform_ufo_canvas_heatmap_full_precision') ? 1 : 0.25);
37
36
  const elementMap = new Map();
@@ -51,7 +50,7 @@ async function calculateTTVCPercentilesWithDebugInfo({
51
50
  const timePixelCounts = await canvas.getPixelCounts();
52
51
  const canvasDimensions = canvas.getScaledDimensions();
53
52
  const totalPixels = canvasDimensions.width * canvasDimensions.height;
54
- return calculatePercentilesWithDebugInfo(timePixelCounts, elementMap, totalPixels, startTime, calculateSpeedIndex);
53
+ return calculatePercentilesWithDebugInfo(timePixelCounts, elementMap, totalPixels, startTime);
55
54
  }
56
55
  export default calculateTTVCPercentiles;
57
56
  export function calculatePercentiles(timePixelCounts, elementMap, unorderedPercentiles, totalPixels, startTime) {
@@ -97,7 +96,7 @@ export function calculatePercentiles(timePixelCounts, elementMap, unorderedPerce
97
96
  }
98
97
  return results;
99
98
  }
100
- export function calculatePercentilesWithDebugInfo(timePixelCounts, elementMap, totalPixels, startTime, calculateSpeedIndex = false) {
99
+ export function calculatePercentilesWithDebugInfo(timePixelCounts, elementMap, totalPixels, startTime) {
101
100
  const entries = new Array(elementMap.size);
102
101
  let cumulativePixels = 0;
103
102
  let speedIndex = 0;
@@ -116,12 +115,9 @@ export function calculatePercentilesWithDebugInfo(timePixelCounts, elementMap, t
116
115
  };
117
116
 
118
117
  // Speed index calculation: sum of (time × incremental viewport percentage)
119
- // Only calculate when feature flag is enabled
120
- if (calculateSpeedIndex) {
121
- const ratioDelta = (percentCovered - previousPercentCovered) / 100;
122
- speedIndex += relativeTime * ratioDelta;
123
- previousPercentCovered = percentCovered;
124
- }
118
+ const ratioDelta = (percentCovered - previousPercentCovered) / 100;
119
+ speedIndex += relativeTime * ratioDelta;
120
+ previousPercentCovered = percentCovered;
125
121
  }
126
122
  return {
127
123
  entries,
@@ -1,11 +1,11 @@
1
1
  import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";import _asyncToGenerator from"@babel/runtime/helpers/asyncToGenerator";import _toConsumableArray from"@babel/runtime/helpers/toConsumableArray";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import _defineProperty from"@babel/runtime/helpers/defineProperty";var _excluded=["labelStack"];import _regeneratorRuntime from"@babel/runtime/regenerator";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;}}};}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;}}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;}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;}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;}import{getDocument}from'@atlaskit/browser-apis';import{fg}from'@atlaskit/platform-feature-flags';// Import common utilities
2
- import{getLighthouseMetrics}from'../additional-payload';import{CHRReporter}from'../assets';import*as bundleEvalTiming from'../bundle-eval-timing';import coinflip from'../coinflip';import{getConfig,getExperimentalInteractionRate,getUfoNameOverrides,shouldUseRawDataThirdPartyBehavior}from'../config';import{getExperimentalVCMetrics}from'../create-experimental-interaction-metrics-payload';import{getBm3Timings}from'../custom-timings';import{getGlobalErrorCount}from'../global-error-handler';import{getEarliestHiddenTiming,getHasHiddenTimingBeforeSetup,getPageVisibilityState,isOpenedInBackground,isTabThrottled}from'../hidden-timing';import*as initialPageLoadExtraTiming from'../initial-page-load-extra-timing';import{interactionSpans as atlaskitInteractionSpans}from'../interaction-metrics';import{createMemoryStateReport,createPressureStateReport}from'../machine-utilisation';import*as resourceTiming from'../resource-timing';import{filterResourceTimings}from'../resource-timing/common/utils/resource-timing-buffer';import{roundEpsilon}from'../round-number';import*as ssr from'../ssr';import{getHasAbortingEventDuringSSR}from'../vc/vc-observer-new';import{buildSegmentTree,getOldSegmentsLabelStack,labelStackStartWith,optimizeLabelStack,sanitizeUfoName,stringifyLabelStackFully}from'./common/utils';import{createCriticalMetricsPayloads}from'./critical-metrics-payload';import{addPerformanceMeasures}from'./utils/add-performance-measures';import{getBatteryInfoToLegacyFormat}from'./utils/get-battery-info';import{getBrowserMetadataToLegacyFormat}from'./utils/get-browser-metadata';import getInteractionStatus from'./utils/get-interaction-status';import{getMoreAccuratePageVisibilityUpToTTAI}from'./utils/get-more-accurate-page-visibility-up-to-ttai';import{getNavigationMetricsToLegacyFormat}from'./utils/get-navigation-metrics';import getPageVisibilityUpToTTAI from'./utils/get-page-visibility-up-to-ttai';import{getPaintMetricsToLegacyFormat}from'./utils/get-paint-metrics';import getPayloadSize from'./utils/get-payload-size';import{getReactUFOPayloadVersion}from'./utils/get-react-ufo-payload-version';import getSSRDoneTimeValue from'./utils/get-ssr-done-time-value';import getSSRSuccessUtil from'./utils/get-ssr-success';import getTTAI from'./utils/get-ttai';import getVCMetrics from'./utils/get-vc-metrics';import{getVisibilityStateFromPerformance}from'./utils/get-visibility-state-from-performance';import{optimizeApdex}from'./utils/optimize-apdex';import{optimizeCustomTimings}from'./utils/optimize-custom-timings';import{optimizeHoldInfo}from'./utils/optimize-hold-info';import{optimizeMarks}from'./utils/optimize-marks';import{optimizeReactProfilerTimings}from'./utils/optimize-react-profiler-timings';import{optimizeRequestInfo}from'./utils/optimize-request-info';import{optimizeSpans}from'./utils/optimize-spans';var MAX_PAYLOAD_SIZE=230;function getUfoNameOverride(interaction){var ufoName=interaction.ufoName,apdex=interaction.apdex;try{var ufoNameOverrides=getUfoNameOverrides();if(ufoNameOverrides!=null){var metricKey=apdex.length>0?apdex[0].key:'';if(ufoNameOverrides[ufoName][metricKey]){return ufoNameOverrides[ufoName][metricKey];}}return ufoName;}catch(_unused){return ufoName;}}function getEarliestLegacyStopTime(interaction,labelStack){var earliestLegacyStopTime=null;interaction.apdex.forEach(function(a){var _a$labelStack;if(!(a!==null&&a!==void 0&&a.stopTime)){return;}if(!labelStackStartWith((_a$labelStack=a.labelStack)!==null&&_a$labelStack!==void 0?_a$labelStack:[],labelStack)){return;}if(a.stopTime>interaction.start&&(earliestLegacyStopTime!==null&&earliestLegacyStopTime!==void 0?earliestLegacyStopTime:a.stopTime)>=a.stopTime){earliestLegacyStopTime=a.stopTime;}});return earliestLegacyStopTime;}function getBm3EndTimeOrFallbackValue(interaction){var _getEarliestLegacySto;var labelStack=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[];var fallbackValue=arguments.length>2&&arguments[2]!==undefined?arguments[2]:interaction.end;if(interaction.type==='press'){return fallbackValue;}return(_getEarliestLegacySto=getEarliestLegacyStopTime(interaction,labelStack))!==null&&_getEarliestLegacySto!==void 0?_getEarliestLegacySto:fallbackValue;}function getPageVisibilityUpToTTI(interaction){var start=interaction.start;var bm3EndTimeOrInteractionEndTime=getBm3EndTimeOrFallbackValue(interaction);return getPageVisibilityState(start,bm3EndTimeOrInteractionEndTime);}function getMoreAccuratePageVisibilityUpToTTI(interaction){var old=getPageVisibilityUpToTTI(interaction);var tti=getEarliestLegacyStopTime(interaction,[]);if(!tti){return old;}var buffered=getVisibilityStateFromPerformance(tti);if(!buffered){return old;}if(buffered!==old){return'mixed';}return old;}function getResourceTimings(start,end){var _resourceTiming$getRe;return(_resourceTiming$getRe=resourceTiming.getResourceTimings(start,end))!==null&&_resourceTiming$getRe!==void 0?_resourceTiming$getRe:undefined;}function getBundleEvalTimings(start){return bundleEvalTiming.getBundleEvalTimings(start);}function getSSRPhaseSuccess(type){return type==='page_load'?ssr.getSSRPhaseSuccess():undefined;}function getSSRFeatureFlags(type){return type==='page_load'?ssr.getSSRFeatureFlags():undefined;}function getPPSMetrics(interaction){var _interaction$apdex;var start=interaction.start,end=interaction.end;var config=getConfig();var interactionStatus=getInteractionStatus(interaction);var pageVisibilityUpToTTAI=getPageVisibilityUpToTTAI(interaction);var 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;var ttai=interactionStatus.originalInteractionStatus==='SUCCEEDED'&&pageVisibilityUpToTTAI==='visible'?Math.round(end-start):undefined;var PPSMetricsAtTTI=tti!==undefined?getLighthouseMetrics({start:start,stop:tti}):null;var PPSMetricsAtTTAI=ttai!==undefined?getLighthouseMetrics({start:start,stop:interaction.end}):null;if(fg('platform_ufo_remove_deprecated_config_fields')){if(PPSMetricsAtTTAI!==null){return PPSMetricsAtTTAI;}}else{if(config!==null&&config!==void 0&&config.shouldCalculateLighthouseMetricsFromTTAI&&PPSMetricsAtTTAI!==null){return PPSMetricsAtTTAI;}if(PPSMetricsAtTTI!==null){return _objectSpread(_objectSpread({},PPSMetricsAtTTI),{},{'metrics@ttai':PPSMetricsAtTTAI});}}return{};}function getSSRProperties(type){var ssrPhases=getSSRPhaseSuccess(type);return _objectSpread(_objectSpread({'ssr:success':(ssrPhases===null||ssrPhases===void 0?void 0:ssrPhases.done)!=null?ssrPhases.done:getSSRSuccessUtil(type),'ssr:featureFlags':getSSRFeatureFlags(type)},(ssrPhases===null||ssrPhases===void 0?void 0:ssrPhases.earlyFlush)!=null?{'ssr:earlyflush:success':ssrPhases.earlyFlush}:null),(ssrPhases===null||ssrPhases===void 0?void 0:ssrPhases.prefetch)!=null?{'ssr:prefetch:success':ssrPhases.prefetch}:null);}function getAssetsMetrics(interaction,SSRDoneTime){try{var config=getConfig();var type=interaction.type;var allowedTypes=['page_load'];var assetsConfig=config===null||config===void 0?void 0:config.assetsConfig;if(!allowedTypes.includes(type)||!assetsConfig){// Skip if: type not allowed or assetsClassification isn't configured
2
+ import{getLighthouseMetrics}from'../additional-payload';import{CHRReporter}from'../assets';import*as bundleEvalTiming from'../bundle-eval-timing';import coinflip from'../coinflip';import{getConfig,getExperimentalInteractionRate,getUfoNameOverrides,shouldUseRawDataThirdPartyBehavior}from'../config';import{getExperimentalVCMetrics}from'../create-experimental-interaction-metrics-payload';import{getBm3Timings}from'../custom-timings';import{getGlobalErrorCount}from'../global-error-handler';import{getEarliestHiddenTiming,getHasHiddenTimingBeforeSetup,getPageVisibilityState,isOpenedInBackground,isTabThrottled}from'../hidden-timing';import*as initialPageLoadExtraTiming from'../initial-page-load-extra-timing';import{interactionSpans as atlaskitInteractionSpans}from'../interaction-metrics';import{createMemoryStateReport,createPressureStateReport}from'../machine-utilisation';import*as resourceTiming from'../resource-timing';import{filterResourceTimings}from'../resource-timing/common/utils/resource-timing-buffer';import{roundEpsilon}from'../round-number';import*as ssr from'../ssr';import{getHasAbortingEventDuringSSR}from'../vc/vc-observer-new';import{buildSegmentTree,getOldSegmentsLabelStack,labelStackStartWith,optimizeLabelStack,sanitizeUfoName,stringifyLabelStackFully}from'./common/utils';import{createCriticalMetricsPayloads}from'./critical-metrics-payload';import{addPerformanceMeasures}from'./utils/add-performance-measures';import{getBatteryInfoToLegacyFormat}from'./utils/get-battery-info';import{getBrowserMetadataToLegacyFormat}from'./utils/get-browser-metadata';import getInteractionStatus from'./utils/get-interaction-status';import{getMoreAccuratePageVisibilityUpToTTAI}from'./utils/get-more-accurate-page-visibility-up-to-ttai';import{getNavigationMetricsToLegacyFormat}from'./utils/get-navigation-metrics';import getPageVisibilityUpToTTAI from'./utils/get-page-visibility-up-to-ttai';import{getPaintMetricsToLegacyFormat}from'./utils/get-paint-metrics';import getPayloadSize from'./utils/get-payload-size';import{getReactUFOPayloadVersion}from'./utils/get-react-ufo-payload-version';import getSSRDoneTimeValue from'./utils/get-ssr-done-time-value';import getSSRSuccessUtil from'./utils/get-ssr-success';import getTTAI from'./utils/get-ttai';import getVCMetrics from'./utils/get-vc-metrics';import{getVisibilityStateFromPerformance}from'./utils/get-visibility-state-from-performance';import{optimizeApdex}from'./utils/optimize-apdex';import{optimizeCustomTimings}from'./utils/optimize-custom-timings';import{optimizeHoldInfo}from'./utils/optimize-hold-info';import{optimizeMarks}from'./utils/optimize-marks';import{optimizeReactProfilerTimings}from'./utils/optimize-react-profiler-timings';import{optimizeRequestInfo}from'./utils/optimize-request-info';import{optimizeSpans}from'./utils/optimize-spans';import{trimVcDebugData}from'./utils/trim-vc-debug-data';var MAX_PAYLOAD_SIZE=230;function getUfoNameOverride(interaction){var ufoName=interaction.ufoName,apdex=interaction.apdex;try{var ufoNameOverrides=getUfoNameOverrides();if(ufoNameOverrides!=null){var metricKey=apdex.length>0?apdex[0].key:'';if(ufoNameOverrides[ufoName][metricKey]){return ufoNameOverrides[ufoName][metricKey];}}return ufoName;}catch(_unused){return ufoName;}}function getEarliestLegacyStopTime(interaction,labelStack){var earliestLegacyStopTime=null;interaction.apdex.forEach(function(a){var _a$labelStack;if(!(a!==null&&a!==void 0&&a.stopTime)){return;}if(!labelStackStartWith((_a$labelStack=a.labelStack)!==null&&_a$labelStack!==void 0?_a$labelStack:[],labelStack)){return;}if(a.stopTime>interaction.start&&(earliestLegacyStopTime!==null&&earliestLegacyStopTime!==void 0?earliestLegacyStopTime:a.stopTime)>=a.stopTime){earliestLegacyStopTime=a.stopTime;}});return earliestLegacyStopTime;}function getBm3EndTimeOrFallbackValue(interaction){var _getEarliestLegacySto;var labelStack=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[];var fallbackValue=arguments.length>2&&arguments[2]!==undefined?arguments[2]:interaction.end;if(interaction.type==='press'){return fallbackValue;}return(_getEarliestLegacySto=getEarliestLegacyStopTime(interaction,labelStack))!==null&&_getEarliestLegacySto!==void 0?_getEarliestLegacySto:fallbackValue;}function getPageVisibilityUpToTTI(interaction){var start=interaction.start;var bm3EndTimeOrInteractionEndTime=getBm3EndTimeOrFallbackValue(interaction);return getPageVisibilityState(start,bm3EndTimeOrInteractionEndTime);}function getMoreAccuratePageVisibilityUpToTTI(interaction){var old=getPageVisibilityUpToTTI(interaction);var tti=getEarliestLegacyStopTime(interaction,[]);if(!tti){return old;}var buffered=getVisibilityStateFromPerformance(tti);if(!buffered){return old;}if(buffered!==old){return'mixed';}return old;}function getResourceTimings(start,end){var _resourceTiming$getRe;return(_resourceTiming$getRe=resourceTiming.getResourceTimings(start,end))!==null&&_resourceTiming$getRe!==void 0?_resourceTiming$getRe:undefined;}function getBundleEvalTimings(start){return bundleEvalTiming.getBundleEvalTimings(start);}function getSSRPhaseSuccess(type){return type==='page_load'?ssr.getSSRPhaseSuccess():undefined;}function getSSRFeatureFlags(type){return type==='page_load'?ssr.getSSRFeatureFlags():undefined;}function getPPSMetrics(interaction){var _interaction$apdex;var start=interaction.start,end=interaction.end;var config=getConfig();var interactionStatus=getInteractionStatus(interaction);var pageVisibilityUpToTTAI=getPageVisibilityUpToTTAI(interaction);var 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;var ttai=interactionStatus.originalInteractionStatus==='SUCCEEDED'&&pageVisibilityUpToTTAI==='visible'?Math.round(end-start):undefined;var PPSMetricsAtTTI=tti!==undefined?getLighthouseMetrics({start:start,stop:tti}):null;var PPSMetricsAtTTAI=ttai!==undefined?getLighthouseMetrics({start:start,stop:interaction.end}):null;if(fg('platform_ufo_remove_deprecated_config_fields')){if(PPSMetricsAtTTAI!==null){return PPSMetricsAtTTAI;}}else{if(config!==null&&config!==void 0&&config.shouldCalculateLighthouseMetricsFromTTAI&&PPSMetricsAtTTAI!==null){return PPSMetricsAtTTAI;}if(PPSMetricsAtTTI!==null){return _objectSpread(_objectSpread({},PPSMetricsAtTTI),{},{'metrics@ttai':PPSMetricsAtTTAI});}}return{};}function getSSRProperties(type){var ssrPhases=getSSRPhaseSuccess(type);return _objectSpread(_objectSpread({'ssr:success':(ssrPhases===null||ssrPhases===void 0?void 0:ssrPhases.done)!=null?ssrPhases.done:getSSRSuccessUtil(type),'ssr:featureFlags':getSSRFeatureFlags(type)},(ssrPhases===null||ssrPhases===void 0?void 0:ssrPhases.earlyFlush)!=null?{'ssr:earlyflush:success':ssrPhases.earlyFlush}:null),(ssrPhases===null||ssrPhases===void 0?void 0:ssrPhases.prefetch)!=null?{'ssr:prefetch:success':ssrPhases.prefetch}:null);}function getAssetsMetrics(interaction,SSRDoneTime){try{var config=getConfig();var type=interaction.type;var allowedTypes=['page_load'];var assetsConfig=config===null||config===void 0?void 0:config.assetsConfig;if(!allowedTypes.includes(type)||!assetsConfig){// Skip if: type not allowed or assetsClassification isn't configured
3
3
  return{};}var reporter=new CHRReporter();var resourceTimings=filterResourceTimings(interaction.start,interaction.end);var assets=reporter.get(resourceTimings,assetsConfig,SSRDoneTime);if(assets){// Only add assets in case it exists
4
4
  return{'event:assets':assets};}return{};}catch(_unused2){// Skip CHR in case of error
5
5
  return{};}}function getTracingContextData(interaction){var trace=interaction.trace,start=interaction.start;var tracingContextData={};if(trace){tracingContextData={'ufo:tracingContext':{'X-B3-TraceId':trace.traceId,'X-B3-SpanId':trace.spanId,// eslint-disable-next-line compat/compat
6
6
  browserTimeOrigin:+(performance.timeOrigin+start).toFixed(2)}};}return tracingContextData;}function optimizeCustomData(interaction){var customData=interaction.customData,cohortingCustomData=interaction.cohortingCustomData,legacyMetrics=interaction.legacyMetrics;var customDataMap=customData.reduce(function(result,_ref){var _result$get$data,_result$get;var labelStack=_ref.labelStack,data=_ref.data;var label=stringifyLabelStackFully(labelStack);var value=(_result$get$data=(_result$get=result.get(label))===null||_result$get===void 0?void 0:_result$get.data)!==null&&_result$get$data!==void 0?_result$get$data:{};result.set(label,{labelStack:optimizeLabelStack(labelStack,getReactUFOPayloadVersion(interaction.type)),data:Object.assign(value,data)});return result;},new Map());// Merge cohorting custom data into the same map
7
7
  if(cohortingCustomData&&cohortingCustomData.size>0){var _interaction$labelSta,_customDataMap$get$da,_customDataMap$get,_interaction$labelSta2;var label=stringifyLabelStackFully((_interaction$labelSta=interaction.labelStack)!==null&&_interaction$labelSta!==void 0?_interaction$labelSta:[]);var value=(_customDataMap$get$da=(_customDataMap$get=customDataMap.get(label))===null||_customDataMap$get===void 0?void 0:_customDataMap$get.data)!==null&&_customDataMap$get$da!==void 0?_customDataMap$get$da:{};customDataMap.set(label,{labelStack:optimizeLabelStack((_interaction$labelSta2=interaction.labelStack)!==null&&_interaction$labelSta2!==void 0?_interaction$labelSta2:[],getReactUFOPayloadVersion(interaction.type)),data:Object.assign(value,Object.fromEntries(cohortingCustomData))});}if(legacyMetrics){var legacyMetricsFiltered=legacyMetrics.filter(function(item){return item.type==='PAGE_LOAD';}).reduce(function(result,currentValue){for(var _i=0,_Object$entries=Object.entries(currentValue.custom||{});_i<_Object$entries.length;_i++){var _result$get$data2,_result$get2;var _Object$entries$_i=_slicedToArray(_Object$entries[_i],2),key=_Object$entries$_i[0],_value=_Object$entries$_i[1];var _label=stringifyLabelStackFully([]);var labelValue=(_result$get$data2=(_result$get2=result.get(_label))===null||_result$get2===void 0?void 0:_result$get2.data)!==null&&_result$get$data2!==void 0?_result$get$data2:{};result.set(_label,{labelStack:optimizeLabelStack([],getReactUFOPayloadVersion(interaction.type)),data:Object.assign(labelValue,_defineProperty({},key,_value))});}return result;},new Map());return[].concat(_toConsumableArray(customDataMap.values()),_toConsumableArray(legacyMetricsFiltered.values()));}return _toConsumableArray(customDataMap.values());}function optimizeRedirects(redirects,interactionStart){var lastRedirectTime=interactionStart;var updatedRedirects=redirects.sort(function(a,b){return a.time-b.time;}).reduce(function(result,redirect){var fromInteractionName=redirect.fromInteractionName,time=redirect.time;if(lastRedirectTime>=interactionStart){result.push({labelStack:[{n:fromInteractionName}],startTime:Math.round(lastRedirectTime),endTime:Math.round(time)});}lastRedirectTime=time;return result;},[]);return updatedRedirects;}function objectToArray(){var obj=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};return Object.keys(obj).reduce(function(result,key){result.push({label:key,data:obj[key]});return result;},[]);}function getBM3SubmetricsTimings(submetrics){if(!submetrics){return null;}var submetricsTimings=submetrics.filter(function(item){return typeof item.stop==='number'&&!!item.key&&typeof item.start==='number';}).map(function(item){var childSubmetrics;var newKey="include/".concat(item.key);if(item.submetrics){childSubmetrics=getBM3SubmetricsTimings(item.submetrics);}return _objectSpread(_defineProperty({},newKey,{endTime:item.stop-item.start,startTime:item.start}),childSubmetrics?childSubmetrics:{});});return submetricsTimings;}function getBm3TrackerTimings(interaction){var interactionLegacyMetrics=interaction.legacyMetrics;if(!interactionLegacyMetrics){return{};}var legacyMetrics=interactionLegacyMetrics.map(function(item){var _item$config,_item$config2,_item$marks;return{key:item.key,startTime:item.start,stopTime:item.stop,type:(_item$config=item.config)===null||_item$config===void 0?void 0:_item$config.type,reactUFOName:(_item$config2=item.config)===null||_item$config2===void 0?void 0:_item$config2.reactUFOName,fmp:((_item$marks=item.marks)===null||_item$marks===void 0?void 0:_item$marks['fmp'])||item.stop,source:'bm3',timings:getBm3Timings(item.marks,item.config.timings),submetrics:getBM3SubmetricsTimings(item.submetrics),pageVisibleState:item.pageVisibleState};}).filter(function(item){return!!item.type;});return{legacyMetrics:legacyMetrics};}function getStylesheetMetrics(){try{var doc=getDocument();if(!doc){return{};}var stylesheets=Array.from(doc.styleSheets);var stylesheetCount=stylesheets.length;var cssrules=Array.from(doc.styleSheets).reduce(function(acc,item){// Other domain stylesheets throw a SecurityError
8
- try{return acc+item.cssRules.length;}catch(_unused3){return acc;}},0);var styleElements=doc.querySelectorAll('style').length;var styleProps=doc.querySelectorAll('[style]');var styleDeclarations=Array.from(doc.querySelectorAll('[style]')).reduce(function(acc,item){try{if('style'in item){return acc+item.style.length;}else{return acc;}}catch(_unused4){return acc;}},0);return{'ufo:stylesheets':stylesheetCount,'ufo:styleElements':styleElements,'ufo:styleProps':styleProps.length,'ufo:styleDeclarations':styleDeclarations,'ufo:cssrules':cssrules};}catch(_unused5){return{};}}var regularTTAI;var expTTAI;function getErrorCounts(interaction){return{'ufo:errors:globalCount':getGlobalErrorCount(),'ufo:errors:count':interaction.errors.length};}function createInteractionMetricsPayload(_x,_x2,_x3,_x4,_x5){return _createInteractionMetricsPayload.apply(this,arguments);}function _createInteractionMetricsPayload(){_createInteractionMetricsPayload=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(interaction,interactionId,experimental,criticalPayloadCount,vcMetrics){var _config$enableBetterP,_window$location,_config$additionalPay;var interactionPayloadStart,config,end,start,ufoName,knownSegments,rate,type,abortReason,routeName,featureFlags,previousInteractionName,isPreviousInteractionAborted,abortedByInteractionName,responsiveness,unknownElementName,unknownElementHierarchy,hydration,pageVisibilityAtTTI,pageVisibilityAtTTAI,segments,segmentTree,isDetailedPayload,isPageLoadEvent,isPageLoad,calculatePageVisibilityFromTheStartOfPageLoad,moreAccuratePageVisibilityAtTTI,moreAccuratePageVisibilityAtTTAI,labelStack,getInitialPageLoadSSRMetrics,pageLoadInteractionMetrics,getDetailedInteractionMetrics,getPageLoadDetailedInteractionMetrics,newUFOName,resourceTimings,_yield$Promise$all,_yield$Promise$all2,finalVCMetrics,experimentalMetrics,paintMetrics,batteryInfo,getReactHydrationStats,payload,size,vcRev,rawData,rawDataSize,interactionMetricsFieldsToTrim,properties,interactionMetrics,_iterator,_step,field,trimmedFields;return _regeneratorRuntime.wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:interactionPayloadStart=performance.now();config=getConfig();if(config){_context.next=4;break;}throw Error('UFO Configuration not provided');case 4:end=interaction.end,start=interaction.start,ufoName=interaction.ufoName,knownSegments=interaction.knownSegments,rate=interaction.rate,type=interaction.type,abortReason=interaction.abortReason,routeName=interaction.routeName,featureFlags=interaction.featureFlags,previousInteractionName=interaction.previousInteractionName,isPreviousInteractionAborted=interaction.isPreviousInteractionAborted,abortedByInteractionName=interaction.abortedByInteractionName,responsiveness=interaction.responsiveness,unknownElementName=interaction.unknownElementName,unknownElementHierarchy=interaction.unknownElementHierarchy,hydration=interaction.hydration;pageVisibilityAtTTI=getPageVisibilityUpToTTI(interaction);pageVisibilityAtTTAI=getPageVisibilityUpToTTAI(interaction);segments=!fg('platform_ufo_remove_deprecated_config_fields')&&config.killswitchNestedSegments?[]:knownSegments;segmentTree=getReactUFOPayloadVersion(interaction.type)==='2.0.0'?buildSegmentTree(segments.map(function(segment){return segment.labelStack;})):{};isDetailedPayload=pageVisibilityAtTTAI==='visible';isPageLoadEvent=type==='page_load'||type==='transition';isPageLoad=type==='page_load';calculatePageVisibilityFromTheStartOfPageLoad=((_config$enableBetterP=config.enableBetterPageVisibilityApi)!==null&&_config$enableBetterP!==void 0?_config$enableBetterP:fg('platform_enable_better_page_visibility'))&&isPageLoadEvent;moreAccuratePageVisibilityAtTTI=calculatePageVisibilityFromTheStartOfPageLoad?getMoreAccuratePageVisibilityUpToTTI(interaction):null;moreAccuratePageVisibilityAtTTAI=calculatePageVisibilityFromTheStartOfPageLoad?getMoreAccuratePageVisibilityUpToTTAI(interaction):null;labelStack=interaction.labelStack?{labelStack:optimizeLabelStack(interaction.labelStack,getReactUFOPayloadVersion(interaction.type))}:{};// Page Load
8
+ try{return acc+item.cssRules.length;}catch(_unused3){return acc;}},0);var styleElements=doc.querySelectorAll('style').length;var styleProps=doc.querySelectorAll('[style]');var styleDeclarations=Array.from(doc.querySelectorAll('[style]')).reduce(function(acc,item){try{if('style'in item){return acc+item.style.length;}else{return acc;}}catch(_unused4){return acc;}},0);return{'ufo:stylesheets':stylesheetCount,'ufo:styleElements':styleElements,'ufo:styleProps':styleProps.length,'ufo:styleDeclarations':styleDeclarations,'ufo:cssrules':cssrules};}catch(_unused5){return{};}}var regularTTAI;var expTTAI;function getErrorCounts(interaction){return{'ufo:errors:globalCount':getGlobalErrorCount(),'ufo:errors:count':interaction.errors.length};}function createInteractionMetricsPayload(_x,_x2,_x3,_x4,_x5){return _createInteractionMetricsPayload.apply(this,arguments);}function _createInteractionMetricsPayload(){_createInteractionMetricsPayload=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(interaction,interactionId,experimental,criticalPayloadCount,vcMetrics){var _config$enableBetterP,_window$location,_config$additionalPay;var interactionPayloadStart,config,end,start,ufoName,knownSegments,rate,type,abortReason,routeName,featureFlags,previousInteractionName,isPreviousInteractionAborted,abortedByInteractionName,responsiveness,unknownElementName,unknownElementHierarchy,hydration,pageVisibilityAtTTI,pageVisibilityAtTTAI,segments,segmentTree,isDetailedPayload,isPageLoadEvent,isPageLoad,calculatePageVisibilityFromTheStartOfPageLoad,moreAccuratePageVisibilityAtTTI,moreAccuratePageVisibilityAtTTAI,labelStack,getInitialPageLoadSSRMetrics,pageLoadInteractionMetrics,getDetailedInteractionMetrics,getPageLoadDetailedInteractionMetrics,newUFOName,resourceTimings,_yield$Promise$all,_yield$Promise$all2,finalVCMetrics,experimentalMetrics,paintMetrics,batteryInfo,getReactHydrationStats,payload,size,vcRev,rawData,rawDataSize,interactionMetricsFieldsToTrim,properties,interactionMetrics,_iterator,_step,field,trimmedFields,isVCRevisionTrimEnabled;return _regeneratorRuntime.wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:interactionPayloadStart=performance.now();config=getConfig();if(config){_context.next=4;break;}throw Error('UFO Configuration not provided');case 4:end=interaction.end,start=interaction.start,ufoName=interaction.ufoName,knownSegments=interaction.knownSegments,rate=interaction.rate,type=interaction.type,abortReason=interaction.abortReason,routeName=interaction.routeName,featureFlags=interaction.featureFlags,previousInteractionName=interaction.previousInteractionName,isPreviousInteractionAborted=interaction.isPreviousInteractionAborted,abortedByInteractionName=interaction.abortedByInteractionName,responsiveness=interaction.responsiveness,unknownElementName=interaction.unknownElementName,unknownElementHierarchy=interaction.unknownElementHierarchy,hydration=interaction.hydration;pageVisibilityAtTTI=getPageVisibilityUpToTTI(interaction);pageVisibilityAtTTAI=getPageVisibilityUpToTTAI(interaction);segments=!fg('platform_ufo_remove_deprecated_config_fields')&&config.killswitchNestedSegments?[]:knownSegments;segmentTree=getReactUFOPayloadVersion(interaction.type)==='2.0.0'?buildSegmentTree(segments.map(function(segment){return segment.labelStack;})):{};isDetailedPayload=pageVisibilityAtTTAI==='visible';isPageLoadEvent=type==='page_load'||type==='transition';isPageLoad=type==='page_load';calculatePageVisibilityFromTheStartOfPageLoad=((_config$enableBetterP=config.enableBetterPageVisibilityApi)!==null&&_config$enableBetterP!==void 0?_config$enableBetterP:fg('platform_enable_better_page_visibility'))&&isPageLoadEvent;moreAccuratePageVisibilityAtTTI=calculatePageVisibilityFromTheStartOfPageLoad?getMoreAccuratePageVisibilityUpToTTI(interaction):null;moreAccuratePageVisibilityAtTTAI=calculatePageVisibilityFromTheStartOfPageLoad?getMoreAccuratePageVisibilityUpToTTAI(interaction):null;labelStack=interaction.labelStack?{labelStack:optimizeLabelStack(interaction.labelStack,getReactUFOPayloadVersion(interaction.type))}:{};// Page Load
9
9
  getInitialPageLoadSSRMetrics=function getInitialPageLoadSSRMetrics(){var _config$ssr;if(!isPageLoad){return{};}var config=getConfig();var SSRDoneTimeValue=getSSRDoneTimeValue(config);var SSRDoneTime=SSRDoneTimeValue!==undefined?{SSRDoneTime:Math.round(SSRDoneTimeValue)}:{};var isBM3ConfigSSRDoneAsFmp=interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp;var isUFOConfigSSRDoneAsFmp=interaction.metaData.__legacy__bm3ConfigSSRDoneAsFmp||!!(config!==null&&config!==void 0&&(_config$ssr=config.ssr)!==null&&_config$ssr!==void 0&&_config$ssr.getSSRDoneTime);if(!experimental&&(isBM3ConfigSSRDoneAsFmp||isUFOConfigSSRDoneAsFmp)&&SSRDoneTimeValue!==undefined){try{performance.mark("FMP",{startTime:SSRDoneTimeValue,detail:{devtools:{dataType:'marker'}}});}catch(_unused6){}}return _objectSpread(_objectSpread({},SSRDoneTime),{},{isBM3ConfigSSRDoneAsFmp:isBM3ConfigSSRDoneAsFmp,isUFOConfigSSRDoneAsFmp:isUFOConfigSSRDoneAsFmp});};pageLoadInteractionMetrics=getInitialPageLoadSSRMetrics();// Detailed payload. Page visibility = visible
10
10
  getDetailedInteractionMetrics=function getDetailedInteractionMetrics(resourceTimings){if(experimental||window.__UFO_COMPACT_PAYLOAD__||!isDetailedPayload){return{};}var spans=[].concat(_toConsumableArray(interaction.spans),_toConsumableArray(atlaskitInteractionSpans));atlaskitInteractionSpans.length=0;var shouldInclude3pHolds=shouldUseRawDataThirdPartyBehavior(ufoName,type);var basePayload={errors:interaction.errors.map(function(_ref2){var labelStack=_ref2.labelStack,others=_objectWithoutProperties(_ref2,_excluded);return _objectSpread(_objectSpread({},others),{},{labelStack:labelStack&&optimizeLabelStack(labelStack,getReactUFOPayloadVersion(interaction.type))});}),holdActive:_toConsumableArray(interaction.holdActive.values()),redirects:optimizeRedirects(interaction.redirects,start),holdInfo:optimizeHoldInfo(experimental?interaction.holdExpInfo:interaction.holdInfo,start,getReactUFOPayloadVersion(interaction.type)),spans:optimizeSpans(spans,start,getReactUFOPayloadVersion(interaction.type)),requestInfo:optimizeRequestInfo(interaction.requestInfo,start,getReactUFOPayloadVersion(interaction.type)),customTimings:optimizeCustomTimings(interaction.customTimings,start),bundleEvalTimings:objectToArray(getBundleEvalTimings(start)),resourceTimings:objectToArray(resourceTimings)};// Include third-party holds when feature flag is active
11
11
  if(shouldInclude3pHolds){var _interaction$hold3pIn;return _objectSpread(_objectSpread({},basePayload),{},{hold3pActive:interaction.hold3pActive?_toConsumableArray(interaction.hold3pActive.values()):[],hold3pInfo:optimizeHoldInfo((_interaction$hold3pIn=interaction.hold3pInfo)!==null&&_interaction$hold3pIn!==void 0?_interaction$hold3pIn:[],start,getReactUFOPayloadVersion(interaction.type))});}return basePayload;};// Page load & detailed payload
@@ -15,7 +15,9 @@ getPageLoadDetailedInteractionMetrics=function getPageLoadDetailedInteractionMet
15
15
  rate:rate,routeName:routeName,type:type,abortReason:abortReason,featureFlags:featureFlags,previousInteractionName:previousInteractionName,isPreviousInteractionAborted:isPreviousInteractionAborted,abortedByInteractionName:abortedByInteractionName,// performance
16
16
  apdex:optimizeApdex(interaction.apdex,getReactUFOPayloadVersion(interaction.type)),end:Math.round(end)},interaction.end3p?{end3p:Math.round(interaction.end3p)}:{}),{},{start:Math.round(start),segments:getReactUFOPayloadVersion(interaction.type)==='2.0.0'?segmentTree:getOldSegmentsLabelStack(segments,interaction.type),marks:optimizeMarks(interaction.marks,getReactUFOPayloadVersion(interaction.type)),customData:optimizeCustomData(interaction),reactProfilerTimings:optimizeReactProfilerTimings(interaction.reactProfilerTimings,start,getReactUFOPayloadVersion(interaction.type)),minorInteractions:interaction.minorInteractions},responsiveness?{responsiveness:responsiveness}:{}),labelStack),pageLoadInteractionMetrics),getDetailedInteractionMetrics(resourceTimings)),getPageLoadDetailedInteractionMetrics()),getBm3TrackerTimings(interaction)),{},{'metric:ttai':experimental?regularTTAI||expTTAI:undefined,'metric:experimental:ttai':expTTAI},unknownElementName?{unknownElementName:unknownElementName}:{}),unknownElementHierarchy?{unknownElementHierarchy:unknownElementHierarchy}:{}),'ufo:payloadTime':roundEpsilon(performance.now()-interactionPayloadStart)})}};if(experimental){regularTTAI=undefined;expTTAI=undefined;}if(fg('platform_ufo_enable_vc_raw_data')){size=getPayloadSize(payload.attributes.properties);vcRev=payload.attributes.properties['ufo:vc:rev'];rawData=vcRev.find(function(item){return item.revision==='raw-handler';});if(rawData){rawDataSize=getPayloadSize(rawData);payload.attributes.properties['ufo:vc:raw:size']=rawDataSize;if(size>MAX_PAYLOAD_SIZE&&Array.isArray(vcRev)&&vcRev.length>0){payload.attributes.properties['ufo:vc:rev']=vcRev.filter(function(item){return item.revision!=='raw-handler';});payload.attributes.properties['ufo:vc:raw:removed']=true;}}payload.attributes.properties['event:sizeInKb']=getPayloadSize(payload.attributes.properties);}else{payload.attributes.properties['event:sizeInKb']=getPayloadSize(payload.attributes.properties);}// in order of importance, first one being least important
17
17
  // we can add more fields as necessary
18
- interactionMetricsFieldsToTrim=fg('ufo_remove_featureflags_from_trimmed_fields')?['requestInfo','resourceTimings']:['requestInfo','featureFlags','resourceTimings'];properties=payload.attributes.properties;interactionMetrics=properties.interactionMetrics;if(!interactionMetrics){_context.next=74;break;}_iterator=_createForOfIteratorHelper(interactionMetricsFieldsToTrim);_context.prev=52;_iterator.s();case 54:if((_step=_iterator.n()).done){_context.next=66;break;}field=_step.value;if(!(getPayloadSize(properties)<=MAX_PAYLOAD_SIZE)){_context.next=58;break;}return _context.abrupt("continue",64);case 58:interactionMetrics[field]=undefined;properties['event:isTrimmed']=true;trimmedFields=properties['event:trimmedFields'];if(!Array.isArray(trimmedFields)){trimmedFields=[];}trimmedFields.push("interactionMetrics.".concat(field));properties['event:trimmedFields']=trimmedFields;case 64:_context.next=54;break;case 66:_context.next=71;break;case 68:_context.prev=68;_context.t7=_context["catch"](52);_iterator.e(_context.t7);case 71:_context.prev=71;_iterator.f();return _context.finish(71);case 74:return _context.abrupt("return",payload);case 75:case"end":return _context.stop();}},_callee,null,[[52,68,71,74]]);}));return _createInteractionMetricsPayload.apply(this,arguments);}export function createPayloads(_x6,_x7){return _createPayloads.apply(this,arguments);}function _createPayloads(){_createPayloads=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(interactionId,interaction){var ufoNameOverride,modifiedInteraction,payloads,isCriticalMetricsEnabled,vcMetrics,criticalMetricsPayloads,criticalPayloadCount,interactionMetricsPayload;return _regeneratorRuntime.wrap(function _callee2$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:ufoNameOverride=getUfoNameOverride(interaction);modifiedInteraction=_objectSpread(_objectSpread({},interaction),{},{ufoName:ufoNameOverride});payloads=[];isCriticalMetricsEnabled=fg('platform_ufo_critical_metrics_payload');// Calculate VC metrics once to avoid duplicate expensive calculations
18
+ interactionMetricsFieldsToTrim=fg('ufo_remove_featureflags_from_trimmed_fields')?['requestInfo','resourceTimings']:['requestInfo','featureFlags','resourceTimings'];properties=payload.attributes.properties;interactionMetrics=properties.interactionMetrics;if(!interactionMetrics){_context.next=74;break;}_iterator=_createForOfIteratorHelper(interactionMetricsFieldsToTrim);_context.prev=52;_iterator.s();case 54:if((_step=_iterator.n()).done){_context.next=66;break;}field=_step.value;if(!(getPayloadSize(properties)<=MAX_PAYLOAD_SIZE)){_context.next=58;break;}return _context.abrupt("continue",64);case 58:interactionMetrics[field]=undefined;properties['event:isTrimmed']=true;trimmedFields=properties['event:trimmedFields'];if(!Array.isArray(trimmedFields)){trimmedFields=[];}trimmedFields.push("interactionMetrics.".concat(field));properties['event:trimmedFields']=trimmedFields;case 64:_context.next=54;break;case 66:_context.next=71;break;case 68:_context.prev=68;_context.t7=_context["catch"](52);_iterator.e(_context.t7);case 71:_context.prev=71;_iterator.f();return _context.finish(71);case 74:// If the payload size continues to exceed the limit and interactionMetrics is already trimmed,
19
+ // trim VC debug data (early viewport checkpoints). PIR-30543 - AFO-5033
20
+ isVCRevisionTrimEnabled=fg('ufo_vc_revision_trim_enabled');trimVcDebugData(properties,getPayloadSize(properties),MAX_PAYLOAD_SIZE,isVCRevisionTrimEnabled);return _context.abrupt("return",payload);case 77:case"end":return _context.stop();}},_callee,null,[[52,68,71,74]]);}));return _createInteractionMetricsPayload.apply(this,arguments);}export function createPayloads(_x6,_x7){return _createPayloads.apply(this,arguments);}function _createPayloads(){_createPayloads=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(interactionId,interaction){var ufoNameOverride,modifiedInteraction,payloads,isCriticalMetricsEnabled,vcMetrics,criticalMetricsPayloads,criticalPayloadCount,interactionMetricsPayload;return _regeneratorRuntime.wrap(function _callee2$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:ufoNameOverride=getUfoNameOverride(interaction);modifiedInteraction=_objectSpread(_objectSpread({},interaction),{},{ufoName:ufoNameOverride});payloads=[];isCriticalMetricsEnabled=fg('platform_ufo_critical_metrics_payload');// Calculate VC metrics once to avoid duplicate expensive calculations
19
21
  _context2.next=6;return getVCMetrics(interaction);case 6:vcMetrics=_context2.sent;if(!isCriticalMetricsEnabled){_context2.next=13;break;}_context2.next=10;return createCriticalMetricsPayloads(interactionId,interaction,vcMetrics);case 10:_context2.t0=_context2.sent;_context2.next=14;break;case 13:_context2.t0=[];case 14:criticalMetricsPayloads=_context2.t0;payloads.push.apply(payloads,_toConsumableArray(criticalMetricsPayloads));criticalPayloadCount=isCriticalMetricsEnabled?criticalMetricsPayloads.length:undefined;_context2.next=19;return createInteractionMetricsPayload(modifiedInteraction,interactionId,undefined,criticalPayloadCount,vcMetrics);case 19:interactionMetricsPayload=_context2.sent;payloads.push(interactionMetricsPayload);return _context2.abrupt("return",payloads.filter(Boolean));case 22:case"end":return _context2.stop();}},_callee2);}));return _createPayloads.apply(this,arguments);}export function createExperimentalMetricsPayload(_x8,_x9){return _createExperimentalMetricsPayload.apply(this,arguments);}function _createExperimentalMetricsPayload(){_createExperimentalMetricsPayload=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(interactionId,interaction){var config,ufoName,rate,pageVisibilityState,result;return _regeneratorRuntime.wrap(function _callee3$(_context3){while(1)switch(_context3.prev=_context3.next){case 0:config=getConfig();if(config){_context3.next=3;break;}throw Error('UFO Configuration not provided');case 3:ufoName=sanitizeUfoName(interaction.ufoName);rate=getExperimentalInteractionRate(ufoName,interaction.type);if(coinflip(rate)){_context3.next=7;break;}return _context3.abrupt("return",null);case 7:pageVisibilityState=getPageVisibilityState(interaction.start,interaction.end);if(!(pageVisibilityState!=='visible')){_context3.next=10;break;}return _context3.abrupt("return",null);case 10:_context3.next=12;return createInteractionMetricsPayload(interaction,interactionId,true);case 12:result=_context3.sent;return _context3.abrupt("return",result);case 14:case"end":return _context3.stop();}},_callee3);}));return _createExperimentalMetricsPayload.apply(this,arguments);}export function createExtraSearchPageInteractionPayload(_x0,_x1){return _createExtraSearchPageInteractionPayload.apply(this,arguments);}function _createExtraSearchPageInteractionPayload(){_createExtraSearchPageInteractionPayload=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(interactionId,interaction){var SAIN_HOLD_NAMES,NAME_OVERRIDE,SEARCH_PAGE_SMART_ANSWERS_SEGMENT_LABEL,newInteractionId,newEnd,holdInfo,reactProfilerTimings,lastHold,isLastHoldSAIN,lastFilteredTime,filteredReactProfilerTimings,lastTiming,modifiedInteraction,payloads,vcMetrics,interactionMetricsPayload;return _regeneratorRuntime.wrap(function _callee4$(_context4){while(1)switch(_context4.prev=_context4.next){case 0:SAIN_HOLD_NAMES=['search-ai-dialog-visible-text-loading','search-ai-dialog-all-text-loading'];NAME_OVERRIDE='search-page-ignoring-smart-answers';SEARCH_PAGE_SMART_ANSWERS_SEGMENT_LABEL='search-page-smart-answers';newInteractionId="".concat(interactionId,"-ignoring-smart-answers");// Calculate a new end time which excludes SAIN holds
20
22
  holdInfo=interaction.holdInfo,reactProfilerTimings=interaction.reactProfilerTimings;lastHold=holdInfo.at(-1);isLastHoldSAIN=Boolean(lastHold&&SAIN_HOLD_NAMES.includes(lastHold.name));// A new end time is only calculated if the last hold is a SAIN hold
21
23
  if(isLastHoldSAIN){lastFilteredTime=null;filteredReactProfilerTimings=reactProfilerTimings.filter(function(timing){if(timing.commitTime===lastFilteredTime){return false;}var isTimingSmartAnswersInSearch=timing.labelStack.some(function(label){return label.name===SEARCH_PAGE_SMART_ANSWERS_SEGMENT_LABEL;});if(isTimingSmartAnswersInSearch){lastFilteredTime=timing.commitTime;return false;}return true;});lastTiming=filteredReactProfilerTimings.at(-1);if(lastTiming){newEnd=lastTiming.commitTime;}}modifiedInteraction=_objectSpread(_objectSpread({},interaction),{},{end:newEnd!==null&&newEnd!==void 0?newEnd:interaction.end,holdInfo:[],knownSegments:[],reactProfilerTimings:[],ufoName:NAME_OVERRIDE});payloads=[];_context4.next=12;return getVCMetrics(interaction,false,true);case 12:vcMetrics=_context4.sent;_context4.next=15;return createInteractionMetricsPayload(modifiedInteraction,newInteractionId,undefined,undefined,vcMetrics);case 15:interactionMetricsPayload=_context4.sent;payloads.push(interactionMetricsPayload);return _context4.abrupt("return",payloads.filter(Boolean));case 18:case"end":return _context4.stop();}},_callee4);}));return _createExtraSearchPageInteractionPayload.apply(this,arguments);}
@@ -0,0 +1,64 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
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
+ 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
+ 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
+ /**
6
+ * Path recorded in event:trimmedFields when VC debug data (early checkpoint `e` arrays) is trimmed.
7
+ * Matches the location of the trimmed data in the payload: properties['ufo:vc:rev'][].vcDetails[].e
8
+ */
9
+ export var VC_DEBUG_TRIM_TRIMMED_FIELD_PATH = 'ufo:vc:rev.vcDetails.e';
10
+
11
+ /** VC viewport checkpoints to trim; we keep `e` arrays for the rest. */
12
+ var VC_CHECKPOINTS_TO_TRIM = ['25', '50', '75'];
13
+
14
+ /**
15
+ * Trims VC debug data by clearing the `e` (element selector) arrays for early viewport checkpoints
16
+ * (25, 50, 75), keeping the rest 80, 85, 90, 95, 98, 99, 100. Reduces payload size when it still
17
+ * exceeds the limit after interactionMetrics trimming.
18
+ * Mutates `properties` in place and updates event:isTrimmed and event:trimmedFields.
19
+ */
20
+ export function trimVcDebugData( /** Properties object to trim VC debug data from. */
21
+ properties, /** Current payload size in KB (e.g. from getPayloadSize(properties)). */
22
+ currentPayloadSizeKb, /** Maximum allowed payload size in KB. Trim runs only when currentPayloadSizeKb > maxPayloadSizeKb. */
23
+ maxPayloadSizeKb, /** Whether VC revision trim is enabled (e.g. from feature flag). */
24
+ isEnabled) {
25
+ var isTrimmed = false;
26
+ var isPayloadSizeExceeded = currentPayloadSizeKb > maxPayloadSizeKb;
27
+ if (!isEnabled || !isPayloadSizeExceeded) {
28
+ return;
29
+ }
30
+ var vcRev = properties['ufo:vc:rev'];
31
+ if (!Array.isArray(vcRev) || vcRev.length === 0) {
32
+ return;
33
+ }
34
+ var _iterator = _createForOfIteratorHelper(vcRev),
35
+ _step;
36
+ try {
37
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
38
+ var rev = _step.value;
39
+ for (var _i = 0, _Object$entries = Object.entries((_rev$vcDetails = rev.vcDetails) !== null && _rev$vcDetails !== void 0 ? _rev$vcDetails : {}); _i < _Object$entries.length; _i++) {
40
+ var _rev$vcDetails;
41
+ var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
42
+ key = _Object$entries$_i[0],
43
+ detail = _Object$entries$_i[1];
44
+ if (VC_CHECKPOINTS_TO_TRIM.includes(key)) {
45
+ detail.e = [];
46
+ isTrimmed = true;
47
+ }
48
+ }
49
+ }
50
+ } catch (err) {
51
+ _iterator.e(err);
52
+ } finally {
53
+ _iterator.f();
54
+ }
55
+ if (isTrimmed) {
56
+ properties['event:isTrimmed'] = isTrimmed;
57
+ var trimmedFields = properties['event:trimmedFields'];
58
+ if (!Array.isArray(trimmedFields)) {
59
+ trimmedFields = [];
60
+ }
61
+ trimmedFields.push(VC_DEBUG_TRIM_TRIMMED_FIELD_PATH);
62
+ properties['event:trimmedFields'] = trimmedFields;
63
+ }
64
+ }
@@ -4,12 +4,17 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
4
4
  import { useEffect, useRef } from 'react';
5
5
  import { useInteractionContext } from '../interaction-context';
6
6
  import { getActiveInteraction, PreviousInteractionLog } from '../interaction-metrics';
7
+ import UFORouteName from '../route-name-context';
7
8
  var sinkHandlerFn = function sinkHandlerFn() {};
8
9
  export function sinkTerminalErrorHandler(fn) {
9
10
  sinkHandlerFn = fn;
10
11
  }
11
12
  export function setTerminalError(error, additionalAttributes, labelStack) {
12
- var _activeInteraction$uf, _activeInteraction$id, _activeInteraction$ty, _PreviousInteractionL, _PreviousInteractionL2, _PreviousInteractionL3;
13
+ var _activeInteraction$uf, _activeInteraction$id, _activeInteraction$ty, _PreviousInteractionL, _PreviousInteractionL2, _PreviousInteractionL3, _UFORouteName$current;
14
+ if (additionalAttributes !== null && additionalAttributes !== void 0 && additionalAttributes.isClientNetworkError) {
15
+ // Exclude client network errors from being reported to UFO
16
+ return;
17
+ }
13
18
  var activeInteraction = getActiveInteraction();
14
19
  var currentTime = performance.now();
15
20
  var errorData = _objectSpread({
@@ -28,7 +33,8 @@ export function setTerminalError(error, additionalAttributes, labelStack) {
28
33
  previousInteractionId: (_PreviousInteractionL = PreviousInteractionLog.id) !== null && _PreviousInteractionL !== void 0 ? _PreviousInteractionL : null,
29
34
  previousInteractionName: (_PreviousInteractionL2 = PreviousInteractionLog.name) !== null && _PreviousInteractionL2 !== void 0 ? _PreviousInteractionL2 : null,
30
35
  previousInteractionType: (_PreviousInteractionL3 = PreviousInteractionLog.type) !== null && _PreviousInteractionL3 !== void 0 ? _PreviousInteractionL3 : null,
31
- timeSincePreviousInteraction: timeSincePreviousInteraction
36
+ timeSincePreviousInteraction: timeSincePreviousInteraction,
37
+ routeName: (_UFORouteName$current = UFORouteName.current) !== null && _UFORouteName$current !== void 0 ? _UFORouteName$current : null
32
38
  };
33
39
  sinkHandlerFn(errorData, context);
34
40
  }
@@ -114,14 +114,13 @@ var AbstractVCCalculatorBase = /*#__PURE__*/function () {
114
114
  value: function () {
115
115
  var _calculateWithDebugInfo = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(filteredEntries, startTime, stopTime, isPostInteraction, isVCClean, interactionType, isPageVisible, interactionId, dirtyReason, allEntries, include3p, excludeSmartAnswersInSearch, interactionAbortReason, includeSSRRatio) {
116
116
  var _window, _window2, _window3, _window4, _window6;
117
- var percentiles, viewportEntries, shouldCalculateSpeedIndex, _yield$calculateTTVCP, vcLogs, speedIndex, vcDetails, percentileIndex, entryDataBuffer, ssrRatio, _iterator4, _step4, _entry3, time, viewportPercentage, entries, elementNames, previousResult, i, percentile, enhancedVcLogs, shouldCalculate3p, shouldCalculateDebugDetails, sortedVcLogs, maxViewportPercentageAtTime, maxSoFar, _iterator5, _step5, log, getBiggestPreviousViewportPercentage, ignoredEntriesByTime, _iterator6, _step6, _entry4, _ignoredEntriesByTime, _viewportData$rect, _viewportData$previou, viewportData, timestamp, additionalVcLogs, _iterator7, _step7, _step7$value, _timestamp, ignoredEntries, _viewportPercentage, v3RevisionDebugDetails, _window5, _window5$__ufo_devtoo, _window7, _window7$__on_ufo_vc_;
117
+ var percentiles, viewportEntries, _yield$calculateTTVCP, vcLogs, speedIndex, vcDetails, percentileIndex, entryDataBuffer, ssrRatio, _iterator4, _step4, _entry3, time, viewportPercentage, entries, elementNames, previousResult, i, percentile, enhancedVcLogs, shouldCalculate3p, shouldCalculateDebugDetails, sortedVcLogs, maxViewportPercentageAtTime, maxSoFar, _iterator5, _step5, log, getBiggestPreviousViewportPercentage, ignoredEntriesByTime, _iterator6, _step6, _entry4, _ignoredEntriesByTime, _viewportData$rect, _viewportData$previou, viewportData, timestamp, additionalVcLogs, _iterator7, _step7, _step7$value, _timestamp, ignoredEntries, _viewportPercentage, v3RevisionDebugDetails, _window5, _window5$__ufo_devtoo, _window7, _window7$__on_ufo_vc_;
118
118
  return _regeneratorRuntime.wrap(function _callee$(_context) {
119
119
  while (1) switch (_context.prev = _context.next) {
120
120
  case 0:
121
121
  percentiles = [25, 50, 75, 80, 85, 90, 95, 98, 99, 100];
122
122
  viewportEntries = this.filterViewportEntries(filteredEntries);
123
- shouldCalculateSpeedIndex = fg('platform_ufo_ttvc_v4_speed_index');
124
- _context.next = 5;
123
+ _context.next = 4;
125
124
  return calculateTTVCPercentilesWithDebugInfo({
126
125
  viewport: {
127
126
  width: getViewportWidth(),
@@ -129,10 +128,9 @@ var AbstractVCCalculatorBase = /*#__PURE__*/function () {
129
128
  },
130
129
  startTime: startTime,
131
130
  stopTime: stopTime,
132
- orderedEntries: viewportEntries,
133
- calculateSpeedIndex: shouldCalculateSpeedIndex
131
+ orderedEntries: viewportEntries
134
132
  });
135
- case 5:
133
+ case 4:
136
134
  _yield$calculateTTVCP = _context.sent;
137
135
  vcLogs = _yield$calculateTTVCP.entries;
138
136
  speedIndex = _yield$calculateTTVCP.speedIndex;
@@ -141,15 +139,15 @@ var AbstractVCCalculatorBase = /*#__PURE__*/function () {
141
139
  entryDataBuffer = new Set();
142
140
  ssrRatio = -1;
143
141
  if (!vcLogs) {
144
- _context.next = 33;
142
+ _context.next = 32;
145
143
  break;
146
144
  }
147
145
  _iterator4 = _createForOfIteratorHelper(vcLogs);
148
- _context.prev = 14;
146
+ _context.prev = 13;
149
147
  _iterator4.s();
150
- case 16:
148
+ case 15:
151
149
  if ((_step4 = _iterator4.n()).done) {
152
- _context.next = 25;
150
+ _context.next = 24;
153
151
  break;
154
152
  }
155
153
  _entry3 = _step4.value;
@@ -162,11 +160,11 @@ var AbstractVCCalculatorBase = /*#__PURE__*/function () {
162
160
 
163
161
  // Only process entries if we haven't reached all percentiles
164
162
  if (!(percentileIndex >= percentiles.length)) {
165
- _context.next = 22;
163
+ _context.next = 21;
166
164
  break;
167
165
  }
168
- return _context.abrupt("break", 25);
169
- case 22:
166
+ return _context.abrupt("break", 24);
167
+ case 21:
170
168
  // Check if this entry matches any checkpoint percentiles
171
169
  if (viewportPercentage >= percentiles[percentileIndex]) {
172
170
  elementNames = _toConsumableArray(new Set(entries.map(function (e) {
@@ -188,21 +186,21 @@ var AbstractVCCalculatorBase = /*#__PURE__*/function () {
188
186
  return entryDataBuffer.add(e);
189
187
  });
190
188
  }
191
- case 23:
192
- _context.next = 16;
189
+ case 22:
190
+ _context.next = 15;
193
191
  break;
194
- case 25:
195
- _context.next = 30;
192
+ case 24:
193
+ _context.next = 29;
196
194
  break;
197
- case 27:
198
- _context.prev = 27;
199
- _context.t0 = _context["catch"](14);
195
+ case 26:
196
+ _context.prev = 26;
197
+ _context.t0 = _context["catch"](13);
200
198
  _iterator4.e(_context.t0);
201
- case 30:
202
- _context.prev = 30;
199
+ case 29:
200
+ _context.prev = 29;
203
201
  _iterator4.f();
204
- return _context.finish(30);
205
- case 33:
202
+ return _context.finish(29);
203
+ case 32:
206
204
  // Fill in any missing percentiles with the last known values
207
205
  previousResult = {
208
206
  t: 0,
@@ -365,11 +363,11 @@ var AbstractVCCalculatorBase = /*#__PURE__*/function () {
365
363
  ssrRatio: ssrRatio,
366
364
  speedIndex: speedIndex
367
365
  });
368
- case 45:
366
+ case 44:
369
367
  case "end":
370
368
  return _context.stop();
371
369
  }
372
- }, _callee, this, [[14, 27, 30, 33]]);
370
+ }, _callee, this, [[13, 26, 29, 32]]);
373
371
  }));
374
372
  function calculateWithDebugInfo(_x, _x2, _x3, _x4, _x5, _x6, _x7, _x8, _x9, _x0, _x1, _x10, _x11, _x12) {
375
373
  return _calculateWithDebugInfo.apply(this, arguments);
@@ -424,8 +422,7 @@ var AbstractVCCalculatorBase = /*#__PURE__*/function () {
424
422
  result.ssrRatio = ssrRatio;
425
423
  }
426
424
 
427
- // speedIndex is only calculated when platform_ufo_ttvc_v4_speed_index is enabled,
428
- // so we only include it in the result when it has a meaningful value (> 0)
425
+ // speedIndex is only included in the result when it has a meaningful value (> 0)
429
426
  if (speedIndex > 0) {
430
427
  result.speedIndex = speedIndex;
431
428
  }
@@ -75,11 +75,11 @@ function calculateTTVCPercentilesWithDebugInfo(_x2) {
75
75
  }
76
76
  function _calculateTTVCPercentilesWithDebugInfo() {
77
77
  _calculateTTVCPercentilesWithDebugInfo = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(_ref2) {
78
- var viewport, orderedEntries, startTime, _ref2$calculateSpeedI, calculateSpeedIndex, canvas, elementMap, _iterator3, _step3, entry, rect, timePixelCounts, canvasDimensions, totalPixels;
78
+ var viewport, orderedEntries, startTime, canvas, elementMap, _iterator3, _step3, entry, rect, timePixelCounts, canvasDimensions, totalPixels;
79
79
  return _regeneratorRuntime.wrap(function _callee2$(_context2) {
80
80
  while (1) switch (_context2.prev = _context2.next) {
81
81
  case 0:
82
- viewport = _ref2.viewport, orderedEntries = _ref2.orderedEntries, startTime = _ref2.startTime, _ref2$calculateSpeedI = _ref2.calculateSpeedIndex, calculateSpeedIndex = _ref2$calculateSpeedI === void 0 ? false : _ref2$calculateSpeedI;
82
+ viewport = _ref2.viewport, orderedEntries = _ref2.orderedEntries, startTime = _ref2.startTime;
83
83
  canvas = new ViewportCanvas(viewport, fg('platform_ufo_canvas_heatmap_full_precision') ? 1 : 0.25);
84
84
  elementMap = new Map();
85
85
  _iterator3 = _createForOfIteratorHelper(orderedEntries);
@@ -124,7 +124,7 @@ function _calculateTTVCPercentilesWithDebugInfo() {
124
124
  timePixelCounts = _context2.sent;
125
125
  canvasDimensions = canvas.getScaledDimensions();
126
126
  totalPixels = canvasDimensions.width * canvasDimensions.height;
127
- return _context2.abrupt("return", calculatePercentilesWithDebugInfo(timePixelCounts, elementMap, totalPixels, startTime, calculateSpeedIndex));
127
+ return _context2.abrupt("return", calculatePercentilesWithDebugInfo(timePixelCounts, elementMap, totalPixels, startTime));
128
128
  case 30:
129
129
  case "end":
130
130
  return _context2.stop();
@@ -199,7 +199,6 @@ export function calculatePercentiles(timePixelCounts, elementMap, unorderedPerce
199
199
  return results;
200
200
  }
201
201
  export function calculatePercentilesWithDebugInfo(timePixelCounts, elementMap, totalPixels, startTime) {
202
- var calculateSpeedIndex = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
203
202
  var entries = new Array(elementMap.size);
204
203
  var cumulativePixels = 0;
205
204
  var speedIndex = 0;
@@ -226,12 +225,9 @@ export function calculatePercentilesWithDebugInfo(timePixelCounts, elementMap, t
226
225
  };
227
226
 
228
227
  // Speed index calculation: sum of (time × incremental viewport percentage)
229
- // Only calculate when feature flag is enabled
230
- if (calculateSpeedIndex) {
231
- var ratioDelta = (percentCovered - previousPercentCovered) / 100;
232
- speedIndex += relativeTime * ratioDelta;
233
- previousPercentCovered = percentCovered;
234
- }
228
+ var ratioDelta = (percentCovered - previousPercentCovered) / 100;
229
+ speedIndex += relativeTime * ratioDelta;
230
+ previousPercentCovered = percentCovered;
235
231
  }
236
232
  return {
237
233
  entries: entries,
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Path recorded in event:trimmedFields when VC debug data (early checkpoint `e` arrays) is trimmed.
3
+ * Matches the location of the trimmed data in the payload: properties['ufo:vc:rev'][].vcDetails[].e
4
+ */
5
+ export declare const VC_DEBUG_TRIM_TRIMMED_FIELD_PATH = "ufo:vc:rev.vcDetails.e";
6
+ /**
7
+ * Trims VC debug data by clearing the `e` (element selector) arrays for early viewport checkpoints
8
+ * (25, 50, 75), keeping the rest 80, 85, 90, 95, 98, 99, 100. Reduces payload size when it still
9
+ * exceeds the limit after interactionMetrics trimming.
10
+ * Mutates `properties` in place and updates event:isTrimmed and event:trimmedFields.
11
+ */
12
+ export declare function trimVcDebugData(
13
+ /** Properties object to trim VC debug data from. */
14
+ properties: Record<string, unknown>,
15
+ /** Current payload size in KB (e.g. from getPayloadSize(properties)). */
16
+ currentPayloadSizeKb: number,
17
+ /** Maximum allowed payload size in KB. Trim runs only when currentPayloadSizeKb > maxPayloadSizeKb. */
18
+ maxPayloadSizeKb: number,
19
+ /** Whether VC revision trim is enabled (e.g. from feature flag). */
20
+ isEnabled: boolean): void;
@@ -26,6 +26,7 @@ export interface TerminalErrorPayload {
26
26
  previousInteractionType: string | null;
27
27
  timeSincePreviousInteraction: number | null;
28
28
  labelStack: LabelStack | null;
29
+ routeName: string | null;
29
30
  };
30
31
  };
31
32
  }
@@ -7,6 +7,7 @@ export interface TerminalErrorAdditionalAttributes {
7
7
  traceId?: string;
8
8
  fallbackType?: 'page' | 'flag' | 'custom';
9
9
  statusCode?: number;
10
+ isClientNetworkError?: boolean;
10
11
  }
11
12
  export interface TerminalErrorData extends TerminalErrorAdditionalAttributes {
12
13
  errorType: string;
@@ -22,6 +23,7 @@ export interface TerminalErrorContext {
22
23
  previousInteractionName: string | null;
23
24
  previousInteractionType: string | null;
24
25
  timeSincePreviousInteraction: number | null;
26
+ routeName: string | null;
25
27
  }
26
28
  export declare function sinkTerminalErrorHandler(fn: (errorData: TerminalErrorData, context: TerminalErrorContext) => void | Promise<void>): void;
27
29
  export declare function setTerminalError(error: Error, additionalAttributes?: TerminalErrorAdditionalAttributes, labelStack?: LabelStack): void;
@@ -2,8 +2,8 @@ import type { RevisionPayloadVCDetails } from '../../../../../common/vc/types';
2
2
  import type { ViewportEntryData } from '../../../types';
3
3
  import type { CalcTTVCPercentilesArg, CalcTTVCPercentilesArgWithDebugInfo, PercentileCalcResultWithSpeedIndex } from '../types';
4
4
  declare function calculateTTVCPercentiles({ viewport, orderedEntries, percentiles, startTime, }: CalcTTVCPercentilesArg): Promise<RevisionPayloadVCDetails>;
5
- declare function calculateTTVCPercentilesWithDebugInfo({ viewport, orderedEntries, startTime, calculateSpeedIndex, }: CalcTTVCPercentilesArgWithDebugInfo): Promise<PercentileCalcResultWithSpeedIndex>;
5
+ declare function calculateTTVCPercentilesWithDebugInfo({ viewport, orderedEntries, startTime, }: CalcTTVCPercentilesArgWithDebugInfo): Promise<PercentileCalcResultWithSpeedIndex>;
6
6
  export default calculateTTVCPercentiles;
7
7
  export declare function calculatePercentiles(timePixelCounts: Map<DOMHighResTimeStamp, number>, elementMap: ReadonlyMap<DOMHighResTimeStamp, Set<string>>, unorderedPercentiles: number[], totalPixels: number, startTime: DOMHighResTimeStamp): RevisionPayloadVCDetails;
8
- export declare function calculatePercentilesWithDebugInfo(timePixelCounts: Map<DOMHighResTimeStamp, number>, elementMap: ReadonlyMap<DOMHighResTimeStamp, ViewportEntryData[]>, totalPixels: number, startTime: DOMHighResTimeStamp, calculateSpeedIndex?: boolean): PercentileCalcResultWithSpeedIndex;
8
+ export declare function calculatePercentilesWithDebugInfo(timePixelCounts: Map<DOMHighResTimeStamp, number>, elementMap: ReadonlyMap<DOMHighResTimeStamp, ViewportEntryData[]>, totalPixels: number, startTime: DOMHighResTimeStamp): PercentileCalcResultWithSpeedIndex;
9
9
  export { calculateTTVCPercentilesWithDebugInfo };
@@ -17,11 +17,6 @@ export type CalcTTVCPercentilesArgWithDebugInfo = {
17
17
  orderedEntries: ReadonlyArray<VCObserverEntry>;
18
18
  startTime: DOMHighResTimeStamp;
19
19
  stopTime: DOMHighResTimeStamp;
20
- /**
21
- * Whether to calculate speed index metric.
22
- * Controlled by platform_ufo_ttvc_v4_speed_index feature flag.
23
- */
24
- calculateSpeedIndex?: boolean;
25
20
  };
26
21
  export interface PercentileCalcResultItem {
27
22
  time: number;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Path recorded in event:trimmedFields when VC debug data (early checkpoint `e` arrays) is trimmed.
3
+ * Matches the location of the trimmed data in the payload: properties['ufo:vc:rev'][].vcDetails[].e
4
+ */
5
+ export declare const VC_DEBUG_TRIM_TRIMMED_FIELD_PATH = "ufo:vc:rev.vcDetails.e";
6
+ /**
7
+ * Trims VC debug data by clearing the `e` (element selector) arrays for early viewport checkpoints
8
+ * (25, 50, 75), keeping the rest 80, 85, 90, 95, 98, 99, 100. Reduces payload size when it still
9
+ * exceeds the limit after interactionMetrics trimming.
10
+ * Mutates `properties` in place and updates event:isTrimmed and event:trimmedFields.
11
+ */
12
+ export declare function trimVcDebugData(
13
+ /** Properties object to trim VC debug data from. */
14
+ properties: Record<string, unknown>,
15
+ /** Current payload size in KB (e.g. from getPayloadSize(properties)). */
16
+ currentPayloadSizeKb: number,
17
+ /** Maximum allowed payload size in KB. Trim runs only when currentPayloadSizeKb > maxPayloadSizeKb. */
18
+ maxPayloadSizeKb: number,
19
+ /** Whether VC revision trim is enabled (e.g. from feature flag). */
20
+ isEnabled: boolean): void;
@@ -26,6 +26,7 @@ export interface TerminalErrorPayload {
26
26
  previousInteractionType: string | null;
27
27
  timeSincePreviousInteraction: number | null;
28
28
  labelStack: LabelStack | null;
29
+ routeName: string | null;
29
30
  };
30
31
  };
31
32
  }
@@ -7,6 +7,7 @@ export interface TerminalErrorAdditionalAttributes {
7
7
  traceId?: string;
8
8
  fallbackType?: 'page' | 'flag' | 'custom';
9
9
  statusCode?: number;
10
+ isClientNetworkError?: boolean;
10
11
  }
11
12
  export interface TerminalErrorData extends TerminalErrorAdditionalAttributes {
12
13
  errorType: string;
@@ -22,6 +23,7 @@ export interface TerminalErrorContext {
22
23
  previousInteractionName: string | null;
23
24
  previousInteractionType: string | null;
24
25
  timeSincePreviousInteraction: number | null;
26
+ routeName: string | null;
25
27
  }
26
28
  export declare function sinkTerminalErrorHandler(fn: (errorData: TerminalErrorData, context: TerminalErrorContext) => void | Promise<void>): void;
27
29
  export declare function setTerminalError(error: Error, additionalAttributes?: TerminalErrorAdditionalAttributes, labelStack?: LabelStack): void;
@@ -2,8 +2,8 @@ import type { RevisionPayloadVCDetails } from '../../../../../common/vc/types';
2
2
  import type { ViewportEntryData } from '../../../types';
3
3
  import type { CalcTTVCPercentilesArg, CalcTTVCPercentilesArgWithDebugInfo, PercentileCalcResultWithSpeedIndex } from '../types';
4
4
  declare function calculateTTVCPercentiles({ viewport, orderedEntries, percentiles, startTime, }: CalcTTVCPercentilesArg): Promise<RevisionPayloadVCDetails>;
5
- declare function calculateTTVCPercentilesWithDebugInfo({ viewport, orderedEntries, startTime, calculateSpeedIndex, }: CalcTTVCPercentilesArgWithDebugInfo): Promise<PercentileCalcResultWithSpeedIndex>;
5
+ declare function calculateTTVCPercentilesWithDebugInfo({ viewport, orderedEntries, startTime, }: CalcTTVCPercentilesArgWithDebugInfo): Promise<PercentileCalcResultWithSpeedIndex>;
6
6
  export default calculateTTVCPercentiles;
7
7
  export declare function calculatePercentiles(timePixelCounts: Map<DOMHighResTimeStamp, number>, elementMap: ReadonlyMap<DOMHighResTimeStamp, Set<string>>, unorderedPercentiles: number[], totalPixels: number, startTime: DOMHighResTimeStamp): RevisionPayloadVCDetails;
8
- export declare function calculatePercentilesWithDebugInfo(timePixelCounts: Map<DOMHighResTimeStamp, number>, elementMap: ReadonlyMap<DOMHighResTimeStamp, ViewportEntryData[]>, totalPixels: number, startTime: DOMHighResTimeStamp, calculateSpeedIndex?: boolean): PercentileCalcResultWithSpeedIndex;
8
+ export declare function calculatePercentilesWithDebugInfo(timePixelCounts: Map<DOMHighResTimeStamp, number>, elementMap: ReadonlyMap<DOMHighResTimeStamp, ViewportEntryData[]>, totalPixels: number, startTime: DOMHighResTimeStamp): PercentileCalcResultWithSpeedIndex;
9
9
  export { calculateTTVCPercentilesWithDebugInfo };
@@ -17,11 +17,6 @@ export type CalcTTVCPercentilesArgWithDebugInfo = {
17
17
  orderedEntries: ReadonlyArray<VCObserverEntry>;
18
18
  startTime: DOMHighResTimeStamp;
19
19
  stopTime: DOMHighResTimeStamp;
20
- /**
21
- * Whether to calculate speed index metric.
22
- * Controlled by platform_ufo_ttvc_v4_speed_index feature flag.
23
- */
24
- calculateSpeedIndex?: boolean;
25
20
  };
26
21
  export interface PercentileCalcResultItem {
27
22
  time: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/react-ufo",
3
- "version": "5.2.3",
3
+ "version": "5.2.5",
4
4
  "description": "Parts of React UFO that are publicly available",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -209,7 +209,7 @@
209
209
  "platform_ufo_enable_terminal_errors": {
210
210
  "type": "boolean"
211
211
  },
212
- "platform_ufo_ttvc_v4_speed_index": {
212
+ "ufo_vc_revision_trim_enabled": {
213
213
  "type": "boolean"
214
214
  }
215
215
  }