@atlaskit/react-ufo 5.0.13 → 5.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/dist/cjs/create-payload/index.js +2 -2
- package/dist/cjs/experience-trace-id-context/context-manager.js +180 -0
- package/dist/cjs/experience-trace-id-context/index.js +67 -11
- package/dist/cjs/interaction-metrics-init/index.js +15 -6
- package/dist/cjs/typing-performance-tracing/index.js +7 -14
- package/dist/cjs/vc/index.js +6 -6
- package/dist/cjs/vc/vc-observer/observers/ssr-placeholders/index.js +1 -3
- package/dist/es2019/create-payload/index.js +1 -1
- package/dist/es2019/experience-trace-id-context/context-manager.js +142 -0
- package/dist/es2019/experience-trace-id-context/index.js +65 -9
- package/dist/es2019/interaction-metrics-init/index.js +15 -6
- package/dist/es2019/typing-performance-tracing/index.js +7 -14
- package/dist/es2019/vc/index.js +6 -6
- package/dist/es2019/vc/vc-observer/observers/ssr-placeholders/index.js +1 -3
- package/dist/esm/create-payload/index.js +2 -2
- package/dist/esm/experience-trace-id-context/context-manager.js +172 -0
- package/dist/esm/experience-trace-id-context/index.js +67 -11
- package/dist/esm/interaction-metrics-init/index.js +15 -6
- package/dist/esm/typing-performance-tracing/index.js +7 -14
- package/dist/esm/vc/index.js +6 -6
- package/dist/esm/vc/vc-observer/observers/ssr-placeholders/index.js +1 -3
- package/dist/types/common/react-ufo-payload-schema.d.ts +5 -0
- package/dist/types/config/index.d.ts +6 -0
- package/dist/types/experience-trace-id-context/context-manager.d.ts +65 -0
- package/dist/types-ts4.5/common/react-ufo-payload-schema.d.ts +5 -0
- package/dist/types-ts4.5/config/index.d.ts +6 -0
- package/dist/types-ts4.5/experience-trace-id-context/context-manager.d.ts +65 -0
- package/package.json +6 -8
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# @atlaskit/ufo-interaction-ignore
|
|
2
2
|
|
|
3
|
+
## 5.1.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`4ebbeaeb5454b`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/4ebbeaeb5454b) -
|
|
8
|
+
FG cleanup - platform_ufo_is_opened_in_background
|
|
9
|
+
|
|
10
|
+
## 5.1.0
|
|
11
|
+
|
|
12
|
+
### Minor Changes
|
|
13
|
+
|
|
14
|
+
- [`c4ed6da74c937`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/c4ed6da74c937) -
|
|
15
|
+
OBSRVE-2971 Adding the OTel Context Manager to handle trace context for React UFO tracing
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- [`cd27ffb264a01`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/cd27ffb264a01) -
|
|
20
|
+
Added config option for sending the terminal error metric
|
|
21
|
+
- [`ac82093b2419b`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/ac82093b2419b) -
|
|
22
|
+
bugfixes with disabling TTVC v3
|
|
23
|
+
|
|
3
24
|
## 5.0.13
|
|
4
25
|
|
|
5
26
|
### Patch Changes
|
|
@@ -9,9 +9,9 @@ try{return acc+item.cssRules.length;}catch(_unused3){return acc;}},0);var styleE
|
|
|
9
9
|
getInitialPageLoadSSRMetrics=function getInitialPageLoadSSRMetrics(){var _config$ssr;if(!isPageLoad){return{};}var config=(0,_config.getConfig)();var SSRDoneTimeValue=(0,_getSsrDoneTimeValue.default)(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((0,_toConsumableArray2.default)(interaction.spans),(0,_toConsumableArray2.default)(_interactionMetrics.interactionSpans));_interactionMetrics.interactionSpans.length=0;var shouldInclude3pHolds=(0,_config.shouldUseRawDataThirdPartyBehavior)(ufoName,type);var basePayload={errors:interaction.errors.map(function(_ref2){var labelStack=_ref2.labelStack,others=(0,_objectWithoutProperties2.default)(_ref2,_excluded);return _objectSpread(_objectSpread({},others),{},{labelStack:labelStack&&(0,_utils.optimizeLabelStack)(labelStack,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type))});}),holdActive:(0,_toConsumableArray2.default)(interaction.holdActive.values()),redirects:optimizeRedirects(interaction.redirects,start),holdInfo:(0,_optimizeHoldInfo.optimizeHoldInfo)(experimental?interaction.holdExpInfo:interaction.holdInfo,start,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),spans:(0,_optimizeSpans.optimizeSpans)(spans,start,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),requestInfo:(0,_optimizeRequestInfo.optimizeRequestInfo)(interaction.requestInfo,start,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),customTimings:(0,_optimizeCustomTimings.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?(0,_toConsumableArray2.default)(interaction.hold3pActive.values()):[],hold3pInfo:(0,_optimizeHoldInfo.optimizeHoldInfo)((_interaction$hold3pIn=interaction.hold3pInfo)!==null&&_interaction$hold3pIn!==void 0?_interaction$hold3pIn:[],start,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type))});}return basePayload;};// Page load & detailed payload
|
|
12
|
-
getPageLoadDetailedInteractionMetrics=function getPageLoadDetailedInteractionMetrics(){var _config$ssr2,_config$ssr2$getSSRTi;if(!isPageLoad||!isDetailedPayload){return{};}var initialPageLoadExtraTimings=objectToArray(initialPageLoadExtraTiming.getTimings());var config=(0,_config.getConfig)();var defaultSSRTimings=objectToArray(ssr.getSSRTimings());var ssrTimingsFromConfig=config===null||config===void 0||(_config$ssr2=config.ssr)===null||_config$ssr2===void 0||(_config$ssr2$getSSRTi=_config$ssr2.getSSRTimings)===null||_config$ssr2$getSSRTi===void 0?void 0:_config$ssr2$getSSRTi.call(_config$ssr2);return{initialPageLoadExtraTimings:initialPageLoadExtraTimings,SSRTimings:ssrTimingsFromConfig?[].concat((0,_toConsumableArray2.default)(ssrTimingsFromConfig),(0,_toConsumableArray2.default)(defaultSSRTimings)):defaultSSRTimings};};if(experimental){expTTAI=(0,_getTtai.default)(interaction);}else{regularTTAI=(0,_getTtai.default)(interaction);}newUFOName=(0,_utils.sanitizeUfoName)(ufoName);resourceTimings=getResourceTimings(start,end);_context.t0=Promise;_context.t1=vcMetrics;if(_context.t1){_context.next=29;break;}_context.next=28;return(0,_getVcMetrics.default)(interaction);case 28:_context.t1=_context.sent;case 29:_context.t2=_context.t1;_context.t3=experimental?(0,_createExperimentalInteractionMetricsPayload.getExperimentalVCMetrics)(interaction):Promise.resolve(undefined);_context.t4=(0,_getPaintMetrics.getPaintMetricsToLegacyFormat)(type,end);_context.t5=(0,_getBatteryInfo.getBatteryInfoToLegacyFormat)();_context.t6=[_context.t2,_context.t3,_context.t4,_context.t5];_context.next=36;return _context.t0.all.call(_context.t0,_context.t6);case 36:_yield$Promise$all=_context.sent;_yield$Promise$all2=(0,_slicedToArray2.default)(_yield$Promise$all,4);finalVCMetrics=_yield$Promise$all2[0];experimentalMetrics=_yield$Promise$all2[1];paintMetrics=_yield$Promise$all2[2];batteryInfo=_yield$Promise$all2[3];if(!experimental){(0,_addPerformanceMeasures.addPerformanceMeasures)(interaction.start,(0,_toConsumableArray2.default)((finalVCMetrics===null||finalVCMetrics===void 0?void 0:finalVCMetrics['ufo:vc:rev'])||[]));}getReactHydrationStats=function getReactHydrationStats(){if(!hydration){return{};}return{hydration:hydration};};payload={actionSubject:'experience',action:'measured',eventType:'operational',source:'measured',tags:['observability'],attributes:{properties:_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(
|
|
12
|
+
getPageLoadDetailedInteractionMetrics=function getPageLoadDetailedInteractionMetrics(){var _config$ssr2,_config$ssr2$getSSRTi;if(!isPageLoad||!isDetailedPayload){return{};}var initialPageLoadExtraTimings=objectToArray(initialPageLoadExtraTiming.getTimings());var config=(0,_config.getConfig)();var defaultSSRTimings=objectToArray(ssr.getSSRTimings());var ssrTimingsFromConfig=config===null||config===void 0||(_config$ssr2=config.ssr)===null||_config$ssr2===void 0||(_config$ssr2$getSSRTi=_config$ssr2.getSSRTimings)===null||_config$ssr2$getSSRTi===void 0?void 0:_config$ssr2$getSSRTi.call(_config$ssr2);return{initialPageLoadExtraTimings:initialPageLoadExtraTimings,SSRTimings:ssrTimingsFromConfig?[].concat((0,_toConsumableArray2.default)(ssrTimingsFromConfig),(0,_toConsumableArray2.default)(defaultSSRTimings)):defaultSSRTimings};};if(experimental){expTTAI=(0,_getTtai.default)(interaction);}else{regularTTAI=(0,_getTtai.default)(interaction);}newUFOName=(0,_utils.sanitizeUfoName)(ufoName);resourceTimings=getResourceTimings(start,end);_context.t0=Promise;_context.t1=vcMetrics;if(_context.t1){_context.next=29;break;}_context.next=28;return(0,_getVcMetrics.default)(interaction);case 28:_context.t1=_context.sent;case 29:_context.t2=_context.t1;_context.t3=experimental?(0,_createExperimentalInteractionMetricsPayload.getExperimentalVCMetrics)(interaction):Promise.resolve(undefined);_context.t4=(0,_getPaintMetrics.getPaintMetricsToLegacyFormat)(type,end);_context.t5=(0,_getBatteryInfo.getBatteryInfoToLegacyFormat)();_context.t6=[_context.t2,_context.t3,_context.t4,_context.t5];_context.next=36;return _context.t0.all.call(_context.t0,_context.t6);case 36:_yield$Promise$all=_context.sent;_yield$Promise$all2=(0,_slicedToArray2.default)(_yield$Promise$all,4);finalVCMetrics=_yield$Promise$all2[0];experimentalMetrics=_yield$Promise$all2[1];paintMetrics=_yield$Promise$all2[2];batteryInfo=_yield$Promise$all2[3];if(!experimental){(0,_addPerformanceMeasures.addPerformanceMeasures)(interaction.start,(0,_toConsumableArray2.default)((finalVCMetrics===null||finalVCMetrics===void 0?void 0:finalVCMetrics['ufo:vc:rev'])||[]));}getReactHydrationStats=function getReactHydrationStats(){if(!hydration){return{};}return{hydration:hydration};};payload={actionSubject:'experience',action:'measured',eventType:'operational',source:'measured',tags:['observability'],attributes:{properties:_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({// basic
|
|
13
13
|
'event:hostname':((_window$location=window.location)===null||_window$location===void 0?void 0:_window$location.hostname)||'unknown','event:product':config.product,'event:population':config.population,'event:schema':'1.0.0','event:sizeInKb':0,'event:source':{name:'react-ufo/web',version:(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)},'event:region':config.region||'unknown','experience:key':experimental?'custom.experimental-interaction-metrics':'custom.interaction-metrics','experience:name':newUFOName,// Include CPU usage monitoring data
|
|
14
|
-
'event:cpu:usage':(0,_machineUtilisation.createPressureStateReport)(interaction.start,interaction.end),'event:memory:usage':(0,_machineUtilisation.createMemoryStateReport)(interaction.start,interaction.end)},criticalPayloadCount!==undefined?{'ufo:multipayload':true,'ufo:criticalPayloadCount':criticalPayloadCount}:{}),(0,_platformFeatureFlags.fg)('platform_ufo_browser_backgrounded_abort_timestamp')?{'ufo:pageVisibilityHiddenTimestamp':(0,_hiddenTiming.getEarliestHiddenTiming)(interaction.start,interaction.end)}:{}),(0,_platformFeatureFlags.fg)('platform_ufo_native_pagevisibility_monitoring')?{'ufo:wasPageHiddenBeforeInit':(0,_hiddenTiming.getHasHiddenTimingBeforeSetup)()}:{}),
|
|
14
|
+
'event:cpu:usage':(0,_machineUtilisation.createPressureStateReport)(interaction.start,interaction.end),'event:memory:usage':(0,_machineUtilisation.createMemoryStateReport)(interaction.start,interaction.end)},criticalPayloadCount!==undefined?{'ufo:multipayload':true,'ufo:criticalPayloadCount':criticalPayloadCount}:{}),(0,_platformFeatureFlags.fg)('platform_ufo_browser_backgrounded_abort_timestamp')?{'ufo:pageVisibilityHiddenTimestamp':(0,_hiddenTiming.getEarliestHiddenTiming)(interaction.start,interaction.end)}:{}),(0,_platformFeatureFlags.fg)('platform_ufo_native_pagevisibility_monitoring')?{'ufo:wasPageHiddenBeforeInit':(0,_hiddenTiming.getHasHiddenTimingBeforeSetup)()}:{}),{},{'ufo:isOpenedInBackground':(0,_hiddenTiming.isOpenedInBackground)(interaction.type)},(0,_getBrowserMetadata.getBrowserMetadataToLegacyFormat)()),batteryInfo),getSSRProperties(type)),getAssetsMetrics(interaction,pageLoadInteractionMetrics===null||pageLoadInteractionMetrics===void 0?void 0:pageLoadInteractionMetrics.SSRDoneTime)),getPPSMetrics(interaction)),paintMetrics),(0,_getNavigationMetrics.getNavigationMetricsToLegacyFormat)(type)),finalVCMetrics),experimentalMetrics),(_config$additionalPay=config.additionalPayloadData)===null||_config$additionalPay===void 0?void 0:_config$additionalPay.call(config,interaction)),getTracingContextData(interaction)),getStylesheetMetrics()),getErrorCounts(interaction)),getReactHydrationStats()),{},{interactionMetrics:_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({namePrefix:config.namePrefix||'',segmentPrefix:config.segmentPrefix||'',interactionId:interactionId,pageVisibilityAtTTI:pageVisibilityAtTTI,pageVisibilityAtTTAI:pageVisibilityAtTTAI,experimental__pageVisibilityAtTTI:moreAccuratePageVisibilityAtTTI,experimental__pageVisibilityAtTTAI:moreAccuratePageVisibilityAtTTAI,// raw interaction metrics
|
|
15
15
|
rate:rate,routeName:routeName,type:type,abortReason:abortReason,featureFlags:featureFlags,previousInteractionName:previousInteractionName,isPreviousInteractionAborted:isPreviousInteractionAborted,abortedByInteractionName:abortedByInteractionName,// performance
|
|
16
16
|
apdex:(0,_optimizeApdex.optimizeApdex)(interaction.apdex,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),end:Math.round(end)},interaction.end3p?{end3p:Math.round(interaction.end3p)}:{}),{},{start:Math.round(start),segments:(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)==='2.0.0'?segmentTree:(0,_utils.getOldSegmentsLabelStack)(segments,interaction.type),marks:(0,_optimizeMarks.optimizeMarks)(interaction.marks,(0,_getReactUfoPayloadVersion.getReactUFOPayloadVersion)(interaction.type)),customData:optimizeCustomData(interaction),reactProfilerTimings:(0,_optimizeReactProfilerTimings.optimizeReactProfilerTimings)(interaction.reactProfilerTimings,start,(0,_getReactUfoPayloadVersion.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':(0,_roundNumber.roundEpsilon)(performance.now()-interactionPayloadStart)})}};if(experimental){regularTTAI=undefined;expTTAI=undefined;}if((0,_platformFeatureFlags.fg)('platform_ufo_enable_vc_raw_data')){size=(0,_getPayloadSize.default)(payload.attributes.properties);vcRev=payload.attributes.properties['ufo:vc:rev'];rawData=vcRev.find(function(item){return item.revision==='raw-handler';});if(rawData){rawDataSize=(0,_getPayloadSize.default)(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']=(0,_getPayloadSize.default)(payload.attributes.properties);}else{payload.attributes.properties['event:sizeInKb']=(0,_getPayloadSize.default)(payload.attributes.properties);}// in order of importance, first one being least important
|
|
17
17
|
// we can add more fields as necessary
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.UFOContextManager = void 0;
|
|
8
|
+
exports.getContextManager = getContextManager;
|
|
9
|
+
exports.setContextManager = setContextManager;
|
|
10
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
12
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
|
+
var _api = require("@opentelemetry/api");
|
|
14
|
+
/**
|
|
15
|
+
* We need to store a reference to the Context manager so that we can get it later.
|
|
16
|
+
* This is because the OTel JS API doesn't allow us to get the registered context manager,
|
|
17
|
+
* and we need to get it because we need to call a function that's not available in the OTel API:
|
|
18
|
+
* `setActive`. The OTel JS API design doesn't allow us to manually set the active context
|
|
19
|
+
* despite the spec allowing for the capability. Sigh.
|
|
20
|
+
*
|
|
21
|
+
* I imagine this situation might not be permanent if we can move to a system were we can rely
|
|
22
|
+
* solely on the API, but for the purposes of the first change being React UFO API compatible,
|
|
23
|
+
* we'll need to do this.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
var contextManager;
|
|
27
|
+
function setContextManager(ctxMgr) {
|
|
28
|
+
contextManager = ctxMgr;
|
|
29
|
+
}
|
|
30
|
+
function getContextManager() {
|
|
31
|
+
return contextManager;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* The below is shamelessly borrowed from StackContextManager from @opentelemetry/sdk-trace-web
|
|
36
|
+
* Using this rather than importing the entire package because this is all we need for now
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* UFO Context Manager for managing the state in web
|
|
41
|
+
* it doesn't fully support the async calls though
|
|
42
|
+
*/
|
|
43
|
+
var UFOContextManager = exports.UFOContextManager = /*#__PURE__*/function () {
|
|
44
|
+
function UFOContextManager() {
|
|
45
|
+
(0, _classCallCheck2.default)(this, UFOContextManager);
|
|
46
|
+
/**
|
|
47
|
+
* whether the context manager is enabled or not
|
|
48
|
+
*/
|
|
49
|
+
(0, _defineProperty2.default)(this, "_enabled", false);
|
|
50
|
+
/**
|
|
51
|
+
* Keeps the reference to current context
|
|
52
|
+
*/
|
|
53
|
+
(0, _defineProperty2.default)(this, "_currentContext", _api.ROOT_CONTEXT);
|
|
54
|
+
}
|
|
55
|
+
return (0, _createClass2.default)(UFOContextManager, [{
|
|
56
|
+
key: "_bindFunction",
|
|
57
|
+
value:
|
|
58
|
+
/**
|
|
59
|
+
*
|
|
60
|
+
* @param context
|
|
61
|
+
* @param target Function to be executed within the context
|
|
62
|
+
*/
|
|
63
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
|
|
64
|
+
function _bindFunction() {
|
|
65
|
+
var context = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _api.ROOT_CONTEXT;
|
|
66
|
+
var target = arguments.length > 1 ? arguments[1] : undefined;
|
|
67
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
68
|
+
var manager = this;
|
|
69
|
+
var contextWrapper = function contextWrapper() {
|
|
70
|
+
var _this = this;
|
|
71
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
72
|
+
args[_key] = arguments[_key];
|
|
73
|
+
}
|
|
74
|
+
return manager.with(context, function () {
|
|
75
|
+
return target.apply(_this, args);
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
Object.defineProperty(contextWrapper, 'length', {
|
|
79
|
+
enumerable: false,
|
|
80
|
+
configurable: true,
|
|
81
|
+
writable: false,
|
|
82
|
+
value: target.length
|
|
83
|
+
});
|
|
84
|
+
return contextWrapper;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Returns the active context
|
|
89
|
+
*/
|
|
90
|
+
}, {
|
|
91
|
+
key: "active",
|
|
92
|
+
value: function active() {
|
|
93
|
+
return this._currentContext;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Binds a the certain context or the active one to the target function and then returns the target
|
|
98
|
+
* @param context A context (span) to be bind to target
|
|
99
|
+
* @param target a function or event emitter. When target or one of its callbacks is called,
|
|
100
|
+
* the provided context will be used as the active context for the duration of the call.
|
|
101
|
+
*/
|
|
102
|
+
}, {
|
|
103
|
+
key: "bind",
|
|
104
|
+
value: function bind(context, target) {
|
|
105
|
+
// if no specific context to propagate is given, we use the current one
|
|
106
|
+
if (context === undefined) {
|
|
107
|
+
context = this.active();
|
|
108
|
+
}
|
|
109
|
+
if (typeof target === 'function') {
|
|
110
|
+
return this._bindFunction(context, target);
|
|
111
|
+
}
|
|
112
|
+
return target;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Disable the context manager (clears the current context)
|
|
117
|
+
*/
|
|
118
|
+
}, {
|
|
119
|
+
key: "disable",
|
|
120
|
+
value: function disable() {
|
|
121
|
+
this._currentContext = _api.ROOT_CONTEXT;
|
|
122
|
+
this._enabled = false;
|
|
123
|
+
return this;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Enables the context manager and creates a default(root) context
|
|
128
|
+
*/
|
|
129
|
+
}, {
|
|
130
|
+
key: "enable",
|
|
131
|
+
value: function enable() {
|
|
132
|
+
if (this._enabled) {
|
|
133
|
+
return this;
|
|
134
|
+
}
|
|
135
|
+
this._enabled = true;
|
|
136
|
+
this._currentContext = _api.ROOT_CONTEXT;
|
|
137
|
+
return this;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Calls the callback function [fn] with the provided [context]. If [context] is undefined then it will use the window.
|
|
142
|
+
* The context will be set as active
|
|
143
|
+
* @param context
|
|
144
|
+
* @param fn Callback function
|
|
145
|
+
* @param thisArg optional receiver to be used for calling fn
|
|
146
|
+
* @param args optional arguments forwarded to fn
|
|
147
|
+
*/
|
|
148
|
+
}, {
|
|
149
|
+
key: "with",
|
|
150
|
+
value: function _with(context, fn, thisArg) {
|
|
151
|
+
var previousContext = this._currentContext;
|
|
152
|
+
this._currentContext = context || _api.ROOT_CONTEXT;
|
|
153
|
+
try {
|
|
154
|
+
for (var _len2 = arguments.length, args = new Array(_len2 > 3 ? _len2 - 3 : 0), _key2 = 3; _key2 < _len2; _key2++) {
|
|
155
|
+
args[_key2 - 3] = arguments[_key2];
|
|
156
|
+
}
|
|
157
|
+
return fn.call.apply(fn, [thisArg].concat(args));
|
|
158
|
+
} finally {
|
|
159
|
+
this._currentContext = previousContext;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Sets the active context.
|
|
165
|
+
* This function is an extension of the OTel spec, in order to facilitate the current API of React UFO trace context handling.
|
|
166
|
+
* It doesn't keep track of any previously set active contexts, because it's assumed (for now) that only one trace context
|
|
167
|
+
* will ever exist at a time.
|
|
168
|
+
* The next step in the work to improve tracing in the FE will likely remove this function as we need to track the
|
|
169
|
+
* hierarchy of contexts (likely using the `with()` function above).
|
|
170
|
+
* @param context The context to be made the globally active one
|
|
171
|
+
*/
|
|
172
|
+
}, {
|
|
173
|
+
key: "setActive",
|
|
174
|
+
value: function setActive(context) {
|
|
175
|
+
if (this._enabled) {
|
|
176
|
+
this._currentContext = context;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}]);
|
|
180
|
+
}();
|
|
@@ -10,38 +10,94 @@ exports.getActiveTraceAsQueryParams = getActiveTraceAsQueryParams;
|
|
|
10
10
|
exports.getActiveTraceHttpRequestHeaders = getActiveTraceHttpRequestHeaders;
|
|
11
11
|
exports.setActiveTrace = setActiveTrace;
|
|
12
12
|
exports.setInteractionActiveTrace = setInteractionActiveTrace;
|
|
13
|
+
var _api = require("@opentelemetry/api");
|
|
14
|
+
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
15
|
+
var _contextManager = require("./context-manager");
|
|
13
16
|
var _makeTraceHttpRequestHeaders = require("./utils/make-trace-http-request-headers");
|
|
14
17
|
var state = {
|
|
15
18
|
context: null
|
|
16
19
|
};
|
|
20
|
+
var traceIdKey = (0, _api.createContextKey)("traceId");
|
|
21
|
+
var spanIdKey = (0, _api.createContextKey)("spanId");
|
|
22
|
+
var experienceTypeKey = (0, _api.createContextKey)("type");
|
|
23
|
+
|
|
24
|
+
// DO NOT CALL THIS FUNCTION DIRECTLY!!!!
|
|
25
|
+
// It is only to be called by React UFO libraries for the automatic handling of trace context for experiences.
|
|
26
|
+
// Calling this may cause trace context to be broken
|
|
17
27
|
function generateSpanId() {
|
|
18
28
|
return Array.from(new Array(16), function () {
|
|
19
29
|
return Math.floor(Math.random() * 16).toString(16);
|
|
20
30
|
}).join('');
|
|
21
31
|
}
|
|
32
|
+
|
|
33
|
+
// DO NOT CALL THIS FUNCTION DIRECTLY!!!!
|
|
34
|
+
// It is only to be called by React UFO libraries for the automatic handling of trace context for experiences.
|
|
35
|
+
// Calling this may cause trace context to be broken
|
|
22
36
|
function setInteractionActiveTrace(interactionId, experienceType) {
|
|
23
37
|
setActiveTrace(interactionId.replace(/-/g, ''), generateSpanId(), experienceType);
|
|
24
38
|
}
|
|
39
|
+
|
|
40
|
+
// DO NOT CALL THIS FUNCTION DIRECTLY!!!!
|
|
41
|
+
// It is only to be called by React UFO libraries for the automatic handling of trace context for experiences.
|
|
42
|
+
// Calling this may cause trace context to be broken
|
|
25
43
|
function setActiveTrace(traceId, spanId, type) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
44
|
+
if ((0, _platformFeatureFlags.fg)('platform_ufo_enable_otel_context_manager')) {
|
|
45
|
+
var activeTraceContext = _api.ROOT_CONTEXT.setValue(traceIdKey, traceId).setValue(spanIdKey, spanId).setValue(experienceTypeKey, type);
|
|
46
|
+
|
|
47
|
+
// Now we need to get the global Context Manager and set the active context
|
|
48
|
+
// Using type assertion because we've "extended" the ContextManager type
|
|
49
|
+
if ((0, _contextManager.getContextManager)() instanceof _contextManager.UFOContextManager) {
|
|
50
|
+
var contextManager = (0, _contextManager.getContextManager)();
|
|
51
|
+
contextManager.setActive(activeTraceContext);
|
|
52
|
+
}
|
|
53
|
+
} else {
|
|
54
|
+
state.context = {
|
|
55
|
+
traceId: traceId,
|
|
56
|
+
spanId: spanId,
|
|
57
|
+
type: type
|
|
58
|
+
};
|
|
59
|
+
}
|
|
31
60
|
}
|
|
32
61
|
function getActiveTrace() {
|
|
33
|
-
|
|
62
|
+
if ((0, _platformFeatureFlags.fg)('platform_ufo_enable_otel_context_manager')) {
|
|
63
|
+
// Get trace context from active context
|
|
64
|
+
var activeTraceContext = {
|
|
65
|
+
traceId: String(_api.context.active().getValue(traceIdKey)),
|
|
66
|
+
spanId: String(_api.context.active().getValue(spanIdKey)),
|
|
67
|
+
type: String(_api.context.active().getValue(experienceTypeKey))
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
// Return activeTraceContext if traceId and spanId are not "undefined"
|
|
71
|
+
return activeTraceContext.traceId !== 'undefined' && activeTraceContext.spanId !== 'undefined' ? activeTraceContext : undefined;
|
|
72
|
+
} else {
|
|
73
|
+
return state.context || undefined;
|
|
74
|
+
}
|
|
34
75
|
}
|
|
76
|
+
|
|
77
|
+
// DO NOT CALL THIS FUNCTION DIRECTLY!!!!
|
|
78
|
+
// It is only to be called by React UFO libraries for the automatic handling of trace context for experiences.
|
|
79
|
+
// Calling this may cause trace context to be broken
|
|
35
80
|
function clearActiveTrace() {
|
|
36
|
-
|
|
81
|
+
if ((0, _platformFeatureFlags.fg)('platform_ufo_enable_otel_context_manager')) {
|
|
82
|
+
// Now we need to get the global Context Manager and set the active context
|
|
83
|
+
// Using type assertion because we've "extended" the ContextManager type
|
|
84
|
+
if ((0, _contextManager.getContextManager)() instanceof _contextManager.UFOContextManager) {
|
|
85
|
+
var contextManager = (0, _contextManager.getContextManager)();
|
|
86
|
+
|
|
87
|
+
// ROOT_CONTEXT is an empty context used to initialise ContextManagers
|
|
88
|
+
contextManager.setActive(_api.ROOT_CONTEXT);
|
|
89
|
+
}
|
|
90
|
+
} else {
|
|
91
|
+
state.context = null;
|
|
92
|
+
}
|
|
37
93
|
}
|
|
38
94
|
function getActiveTraceHttpRequestHeaders(_url) {
|
|
39
|
-
if (
|
|
95
|
+
if (getActiveTrace() === undefined) {
|
|
40
96
|
return null;
|
|
41
97
|
}
|
|
42
|
-
var
|
|
43
|
-
traceId =
|
|
44
|
-
spanId =
|
|
98
|
+
var _ref = getActiveTrace(),
|
|
99
|
+
traceId = _ref.traceId,
|
|
100
|
+
spanId = _ref.spanId;
|
|
45
101
|
return (0, _makeTraceHttpRequestHeaders.makeTraceHttpRequestHeaders)(traceId, spanId);
|
|
46
102
|
}
|
|
47
103
|
function getActiveTraceAsQueryParams(_url) {
|
|
@@ -9,11 +9,13 @@ exports.init = init;
|
|
|
9
9
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
10
10
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
11
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
12
|
+
var _api = require("@opentelemetry/api");
|
|
12
13
|
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
13
14
|
var _additionalPayload = require("../additional-payload");
|
|
14
15
|
var _config = require("../config");
|
|
15
16
|
var _createExperimentalInteractionMetricsPayload = require("../create-experimental-interaction-metrics-payload");
|
|
16
17
|
var _createExtraSearchPageInteractionPayload = require("../create-extra-search-page-interaction-payload");
|
|
18
|
+
var _contextManager = require("../experience-trace-id-context/context-manager");
|
|
17
19
|
var _hiddenTiming = require("../hidden-timing");
|
|
18
20
|
var _interactionMetrics = require("../interaction-metrics");
|
|
19
21
|
var _interactionsPerformanceObserver = require("../interactions-performance-observer");
|
|
@@ -155,6 +157,15 @@ function init(analyticsWebClientAsync, config) {
|
|
|
155
157
|
(0, _machineUtilisation.initialisePressureObserver)();
|
|
156
158
|
(0, _machineUtilisation.initialiseMemoryObserver)();
|
|
157
159
|
(0, _config.setUFOConfig)(config);
|
|
160
|
+
if ((0, _platformFeatureFlags.fg)('platform_ufo_enable_otel_context_manager')) {
|
|
161
|
+
// Configure global OTel context manager
|
|
162
|
+
var contextManager = new _contextManager.UFOContextManager();
|
|
163
|
+
// set the contextmanager somewhere we can reference it later
|
|
164
|
+
(0, _contextManager.setContextManager)(contextManager);
|
|
165
|
+
// Register the context manager with the global OTel API
|
|
166
|
+
contextManager.enable();
|
|
167
|
+
_api.context.setGlobalContextManager(contextManager);
|
|
168
|
+
}
|
|
158
169
|
if ((_config$vc = config.vc) !== null && _config$vc !== void 0 && _config$vc.enabled) {
|
|
159
170
|
var _config$experimentalI, _config$extraInteract;
|
|
160
171
|
var vcOptions = {
|
|
@@ -202,11 +213,10 @@ function init(analyticsWebClientAsync, config) {
|
|
|
202
213
|
createTerminalErrorPayloadPackage = _ref3[4];
|
|
203
214
|
if (awc.getAnalyticsWebClientPromise) {
|
|
204
215
|
awc.getAnalyticsWebClientPromise().then(function (client) {
|
|
205
|
-
var _config$experimentalI2, _config$postInteracti, _config$extraInteract2, _config$extraSearchPa;
|
|
216
|
+
var _config$terminalError, _config$experimentalI2, _config$postInteracti, _config$extraInteract2, _config$extraSearchPa;
|
|
206
217
|
var instance = client.getInstance();
|
|
207
218
|
sinkInteraction(instance, payloadPackage);
|
|
208
|
-
|
|
209
|
-
if ((0, _platformFeatureFlags.fg)('platform_ufo_enable_terminal_errors')) {
|
|
219
|
+
if (config !== null && config !== void 0 && (_config$terminalError = config.terminalErrors) !== null && _config$terminalError !== void 0 && _config$terminalError.enabled && (0, _platformFeatureFlags.fg)('platform_ufo_enable_terminal_errors')) {
|
|
210
220
|
sinkTerminalErrors(instance, createTerminalErrorPayloadPackage.default);
|
|
211
221
|
}
|
|
212
222
|
if (config !== null && config !== void 0 && (_config$experimentalI2 = config.experimentalInteractionMetrics) !== null && _config$experimentalI2 !== void 0 && _config$experimentalI2.enabled) {
|
|
@@ -223,10 +233,9 @@ function init(analyticsWebClientAsync, config) {
|
|
|
223
233
|
}
|
|
224
234
|
});
|
|
225
235
|
} else if (awc.sendOperationalEvent) {
|
|
226
|
-
var _config$experimentalI3, _config$postInteracti2, _config$extraInteract3, _config$extraSearchPa2;
|
|
236
|
+
var _config$terminalError2, _config$experimentalI3, _config$postInteracti2, _config$extraInteract3, _config$extraSearchPa2;
|
|
227
237
|
sinkInteraction(awc, payloadPackage);
|
|
228
|
-
|
|
229
|
-
if ((0, _platformFeatureFlags.fg)('platform_ufo_enable_terminal_errors')) {
|
|
238
|
+
if (config !== null && config !== void 0 && (_config$terminalError2 = config.terminalErrors) !== null && _config$terminalError2 !== void 0 && _config$terminalError2.enabled && (0, _platformFeatureFlags.fg)('platform_ufo_enable_terminal_errors')) {
|
|
230
239
|
sinkTerminalErrors(awc, createTerminalErrorPayloadPackage.default);
|
|
231
240
|
}
|
|
232
241
|
if (config !== null && config !== void 0 && (_config$experimentalI3 = config.experimentalInteractionMetrics) !== null && _config$experimentalI3 !== void 0 && _config$experimentalI3.enabled) {
|
|
@@ -8,7 +8,6 @@ exports.default = useUFOTypingPerformanceTracing;
|
|
|
8
8
|
var _react = require("react");
|
|
9
9
|
var _scheduler = require("scheduler");
|
|
10
10
|
var _uuid = require("uuid");
|
|
11
|
-
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
12
11
|
var _coinflip = _interopRequireDefault(require("../coinflip"));
|
|
13
12
|
var _config = require("../config");
|
|
14
13
|
var _interactionMetrics = require("../interaction-metrics");
|
|
@@ -81,13 +80,13 @@ function typingPerformanceTracingTimeout(element, name, rate) {
|
|
|
81
80
|
tsubmit = setTimeout(end, 2000); // debounce
|
|
82
81
|
}, 0);
|
|
83
82
|
};
|
|
84
|
-
if (typeof (element === null || element === void 0 ? void 0 : element.addEventListener) !== 'function'
|
|
83
|
+
if (typeof (element === null || element === void 0 ? void 0 : element.addEventListener) !== 'function') {
|
|
85
84
|
return;
|
|
86
85
|
}
|
|
87
86
|
// eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
|
|
88
87
|
element.addEventListener('keypress', onKeyPressHandler);
|
|
89
88
|
return function () {
|
|
90
|
-
if (typeof (element === null || element === void 0 ? void 0 : element.removeEventListener) !== 'function'
|
|
89
|
+
if (typeof (element === null || element === void 0 ? void 0 : element.removeEventListener) !== 'function') {
|
|
91
90
|
return;
|
|
92
91
|
}
|
|
93
92
|
// eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
|
|
@@ -158,13 +157,13 @@ function typingPerformanceTracingTimeoutNoAlloc(element, name, rate) {
|
|
|
158
157
|
tsubmit = setTimeout(end, 2000); // debounce
|
|
159
158
|
}, 0);
|
|
160
159
|
};
|
|
161
|
-
if (typeof (element === null || element === void 0 ? void 0 : element.addEventListener) !== 'function'
|
|
160
|
+
if (typeof (element === null || element === void 0 ? void 0 : element.addEventListener) !== 'function') {
|
|
162
161
|
return;
|
|
163
162
|
}
|
|
164
163
|
// eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
|
|
165
164
|
element.addEventListener('keypress', onKeyPressHandler);
|
|
166
165
|
return function () {
|
|
167
|
-
if (typeof (element === null || element === void 0 ? void 0 : element.removeEventListener) !== 'function'
|
|
166
|
+
if (typeof (element === null || element === void 0 ? void 0 : element.removeEventListener) !== 'function') {
|
|
168
167
|
return;
|
|
169
168
|
}
|
|
170
169
|
// eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
|
|
@@ -251,7 +250,7 @@ function typingPerformanceTracingMutationObserver(element, name, rate) {
|
|
|
251
250
|
childList: true,
|
|
252
251
|
subtree: true
|
|
253
252
|
});
|
|
254
|
-
if (typeof (element === null || element === void 0 ? void 0 : element.addEventListener) !== 'function'
|
|
253
|
+
if (typeof (element === null || element === void 0 ? void 0 : element.addEventListener) !== 'function') {
|
|
255
254
|
return function () {
|
|
256
255
|
return mo.disconnect();
|
|
257
256
|
};
|
|
@@ -259,17 +258,11 @@ function typingPerformanceTracingMutationObserver(element, name, rate) {
|
|
|
259
258
|
// eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
|
|
260
259
|
element.addEventListener('keypress', onKeyPressHandler);
|
|
261
260
|
return function () {
|
|
262
|
-
if ((0
|
|
263
|
-
if (typeof (element === null || element === void 0 ? void 0 : element.removeEventListener) === 'function') {
|
|
264
|
-
// eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
|
|
265
|
-
element.removeEventListener('keypress', onKeyPressHandler);
|
|
266
|
-
}
|
|
267
|
-
mo.disconnect();
|
|
268
|
-
} else {
|
|
261
|
+
if (typeof (element === null || element === void 0 ? void 0 : element.removeEventListener) === 'function') {
|
|
269
262
|
// eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
|
|
270
263
|
element.removeEventListener('keypress', onKeyPressHandler);
|
|
271
|
-
mo.disconnect();
|
|
272
264
|
}
|
|
265
|
+
mo.disconnect();
|
|
273
266
|
};
|
|
274
267
|
}
|
|
275
268
|
var typingPerformanceTracingMethods = {
|
package/dist/cjs/vc/index.js
CHANGED
|
@@ -87,7 +87,7 @@ var VCObserverWrapper = exports.VCObserverWrapper = /*#__PURE__*/function () {
|
|
|
87
87
|
startTime: startTime
|
|
88
88
|
});
|
|
89
89
|
}
|
|
90
|
-
if ((0, _config.isVCRevisionEnabled)('fy25.03', experienceKey)) {
|
|
90
|
+
if ((0, _config.isVCRevisionEnabled)('fy25.03', experienceKey) || (0, _config.isVCRevisionEnabled)('fy26.04', experienceKey)) {
|
|
91
91
|
var _this$newVCObserver;
|
|
92
92
|
(_this$newVCObserver = this.newVCObserver) === null || _this$newVCObserver === void 0 || _this$newVCObserver.start({
|
|
93
93
|
startTime: startTime
|
|
@@ -104,7 +104,7 @@ var VCObserverWrapper = exports.VCObserverWrapper = /*#__PURE__*/function () {
|
|
|
104
104
|
var _this$oldVCObserver2;
|
|
105
105
|
(_this$oldVCObserver2 = this.oldVCObserver) === null || _this$oldVCObserver2 === void 0 || _this$oldVCObserver2.stop();
|
|
106
106
|
}
|
|
107
|
-
if ((0, _config.isVCRevisionEnabled)('fy25.03', experienceKey)) {
|
|
107
|
+
if ((0, _config.isVCRevisionEnabled)('fy25.03', experienceKey) || (0, _config.isVCRevisionEnabled)('fy26.04', experienceKey)) {
|
|
108
108
|
var _this$newVCObserver2;
|
|
109
109
|
(_this$newVCObserver2 = this.newVCObserver) === null || _this$newVCObserver2 === void 0 || _this$newVCObserver2.stop();
|
|
110
110
|
}
|
|
@@ -122,7 +122,7 @@ var VCObserverWrapper = exports.VCObserverWrapper = /*#__PURE__*/function () {
|
|
|
122
122
|
key: "getVCResult",
|
|
123
123
|
value: function () {
|
|
124
124
|
var _getVCResult = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(param) {
|
|
125
|
-
var _this$oldVCObserver4, _this$newVCObserver3, _ref2;
|
|
125
|
+
var _this$oldVCObserver4, _this$newVCObserver3, _v3v4Result$, _ref2;
|
|
126
126
|
var experienceKey, include3p, excludeSmartAnswersInSearch, includeSSRRatio, includeRawData, v1v2Result, v3v4Result, ssrRatio;
|
|
127
127
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
128
128
|
while (1) switch (_context.prev = _context.next) {
|
|
@@ -142,7 +142,7 @@ var VCObserverWrapper = exports.VCObserverWrapper = /*#__PURE__*/function () {
|
|
|
142
142
|
_context.t0 = {};
|
|
143
143
|
case 8:
|
|
144
144
|
v1v2Result = _context.t0;
|
|
145
|
-
if (!(0, _config.isVCRevisionEnabled)('fy25.03', experienceKey)) {
|
|
145
|
+
if (!((0, _config.isVCRevisionEnabled)('fy25.03', experienceKey) || (0, _config.isVCRevisionEnabled)('fy26.04', experienceKey))) {
|
|
146
146
|
_context.next = 15;
|
|
147
147
|
break;
|
|
148
148
|
}
|
|
@@ -170,13 +170,13 @@ var VCObserverWrapper = exports.VCObserverWrapper = /*#__PURE__*/function () {
|
|
|
170
170
|
_context.t1 = [];
|
|
171
171
|
case 16:
|
|
172
172
|
v3v4Result = _context.t1;
|
|
173
|
-
if (v3v4Result) {
|
|
173
|
+
if (!(!v3v4Result || v3v4Result.length === 0)) {
|
|
174
174
|
_context.next = 19;
|
|
175
175
|
break;
|
|
176
176
|
}
|
|
177
177
|
return _context.abrupt("return", v1v2Result !== null && v1v2Result !== void 0 ? v1v2Result : {});
|
|
178
178
|
case 19:
|
|
179
|
-
ssrRatio = v3v4Result[0]
|
|
179
|
+
ssrRatio = v3v4Result === null || v3v4Result === void 0 || (_v3v4Result$ = v3v4Result[0]) === null || _v3v4Result$ === void 0 ? void 0 : _v3v4Result$.ssrRatio;
|
|
180
180
|
return _context.abrupt("return", _objectSpread(_objectSpread(_objectSpread({}, includeSSRRatio && ssrRatio !== undefined ? {
|
|
181
181
|
'ufo:vc:ssrRatio': ssrRatio
|
|
182
182
|
} : {}), v1v2Result), {}, {
|
|
@@ -8,7 +8,6 @@ exports.SSRPlaceholderHandlers = void 0;
|
|
|
8
8
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
9
9
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
10
10
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
-
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
12
11
|
var ANCESTOR_LOOKUP_LIMIT = 10;
|
|
13
12
|
var PAGE_LAYOUT_ID = 'page-layout.root';
|
|
14
13
|
var SSRPlaceholderHandlers = exports.SSRPlaceholderHandlers = /*#__PURE__*/function () {
|
|
@@ -326,8 +325,7 @@ var SSRPlaceholderHandlers = exports.SSRPlaceholderHandlers = /*#__PURE__*/funct
|
|
|
326
325
|
}, {
|
|
327
326
|
key: "validateReactComponentMatchToPlaceholderV4",
|
|
328
327
|
value: function validateReactComponentMatchToPlaceholderV4(el) {
|
|
329
|
-
el =
|
|
330
|
-
: this.findNearestPlaceholderContainerIfIgnored(el);
|
|
328
|
+
el = this.findNearestPlaceholderOrContainer(el, 2); // We are using 2 due to over-eagerness of the default, only check itself and 1 ancestor
|
|
331
329
|
var id = this.getPlaceholderReplacementId(el);
|
|
332
330
|
return this.staticPlaceholders.has(id);
|
|
333
331
|
}
|
|
@@ -11,7 +11,7 @@ const getDetailedInteractionMetrics=resourceTimings=>{if(experimental||window.__
|
|
|
11
11
|
if(shouldInclude3pHolds){var _interaction$hold3pIn;return{...basePayload,hold3pActive:interaction.hold3pActive?[...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
|
|
12
12
|
const getPageLoadDetailedInteractionMetrics=()=>{var _config$ssr2,_config$ssr2$getSSRTi;if(!isPageLoad||!isDetailedPayload){return{};}const initialPageLoadExtraTimings=objectToArray(initialPageLoadExtraTiming.getTimings());const config=getConfig();const defaultSSRTimings=objectToArray(ssr.getSSRTimings());const ssrTimingsFromConfig=config===null||config===void 0?void 0:(_config$ssr2=config.ssr)===null||_config$ssr2===void 0?void 0:(_config$ssr2$getSSRTi=_config$ssr2.getSSRTimings)===null||_config$ssr2$getSSRTi===void 0?void 0:_config$ssr2$getSSRTi.call(_config$ssr2);return{initialPageLoadExtraTimings,SSRTimings:ssrTimingsFromConfig?[...ssrTimingsFromConfig,...defaultSSRTimings]:defaultSSRTimings};};if(experimental){expTTAI=getTTAI(interaction);}else{regularTTAI=getTTAI(interaction);}const newUFOName=sanitizeUfoName(ufoName);const resourceTimings=getResourceTimings(start,end);const[finalVCMetrics,experimentalMetrics,paintMetrics,batteryInfo]=await Promise.all([vcMetrics||(await getVCMetrics(interaction)),experimental?getExperimentalVCMetrics(interaction):Promise.resolve(undefined),getPaintMetricsToLegacyFormat(type,end),getBatteryInfoToLegacyFormat()]);if(!experimental){addPerformanceMeasures(interaction.start,[...((finalVCMetrics===null||finalVCMetrics===void 0?void 0:finalVCMetrics['ufo:vc:rev'])||[])]);}const getReactHydrationStats=()=>{if(!hydration){return{};}return{hydration};};const payload={actionSubject:'experience',action:'measured',eventType:'operational',source:'measured',tags:['observability'],attributes:{properties:{// basic
|
|
13
13
|
'event:hostname':((_window$location=window.location)===null||_window$location===void 0?void 0:_window$location.hostname)||'unknown','event:product':config.product,'event:population':config.population,'event:schema':'1.0.0','event:sizeInKb':0,'event:source':{name:'react-ufo/web',version:getReactUFOPayloadVersion(interaction.type)},'event:region':config.region||'unknown','experience:key':experimental?'custom.experimental-interaction-metrics':'custom.interaction-metrics','experience:name':newUFOName,// Include CPU usage monitoring data
|
|
14
|
-
'event:cpu:usage':createPressureStateReport(interaction.start,interaction.end),'event:memory:usage':createMemoryStateReport(interaction.start,interaction.end),...(criticalPayloadCount!==undefined?{'ufo:multipayload':true,'ufo:criticalPayloadCount':criticalPayloadCount}:{}),...(fg('platform_ufo_browser_backgrounded_abort_timestamp')?{'ufo:pageVisibilityHiddenTimestamp':getEarliestHiddenTiming(interaction.start,interaction.end)}:{}),...(fg('platform_ufo_native_pagevisibility_monitoring')?{'ufo:wasPageHiddenBeforeInit':getHasHiddenTimingBeforeSetup()}:{})
|
|
14
|
+
'event:cpu:usage':createPressureStateReport(interaction.start,interaction.end),'event:memory:usage':createMemoryStateReport(interaction.start,interaction.end),...(criticalPayloadCount!==undefined?{'ufo:multipayload':true,'ufo:criticalPayloadCount':criticalPayloadCount}:{}),...(fg('platform_ufo_browser_backgrounded_abort_timestamp')?{'ufo:pageVisibilityHiddenTimestamp':getEarliestHiddenTiming(interaction.start,interaction.end)}:{}),...(fg('platform_ufo_native_pagevisibility_monitoring')?{'ufo:wasPageHiddenBeforeInit':getHasHiddenTimingBeforeSetup()}:{}),'ufo:isOpenedInBackground':isOpenedInBackground(interaction.type),// root
|
|
15
15
|
...getBrowserMetadataToLegacyFormat(),...batteryInfo,...getSSRProperties(type),...getAssetsMetrics(interaction,pageLoadInteractionMetrics===null||pageLoadInteractionMetrics===void 0?void 0:pageLoadInteractionMetrics.SSRDoneTime),...getPPSMetrics(interaction),...paintMetrics,...getNavigationMetricsToLegacyFormat(type),...finalVCMetrics,...experimentalMetrics,...((_config$additionalPay=config.additionalPayloadData)===null||_config$additionalPay===void 0?void 0:_config$additionalPay.call(config,interaction)),...getTracingContextData(interaction),...getStylesheetMetrics(),...getErrorCounts(interaction),...getReactHydrationStats(),interactionMetrics:{namePrefix:config.namePrefix||'',segmentPrefix:config.segmentPrefix||'',interactionId,pageVisibilityAtTTI,pageVisibilityAtTTAI,experimental__pageVisibilityAtTTI:moreAccuratePageVisibilityAtTTI,experimental__pageVisibilityAtTTAI:moreAccuratePageVisibilityAtTTAI,// raw interaction metrics
|
|
16
16
|
rate,routeName,type,abortReason,featureFlags,previousInteractionName,isPreviousInteractionAborted,abortedByInteractionName,// performance
|
|
17
17
|
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}:{}),...labelStack,...pageLoadInteractionMetrics,...getDetailedInteractionMetrics(resourceTimings),...getPageLoadDetailedInteractionMetrics(),...getBm3TrackerTimings(interaction),'metric:ttai':experimental?regularTTAI||expTTAI:undefined,'metric:experimental:ttai':expTTAI,...(unknownElementName?{unknownElementName}:{}),...(unknownElementHierarchy?{unknownElementHierarchy}:{})},'ufo:payloadTime':roundEpsilon(performance.now()-interactionPayloadStart)}}};if(experimental){regularTTAI=undefined;expTTAI=undefined;}if(fg('platform_ufo_enable_vc_raw_data')){const size=getPayloadSize(payload.attributes.properties);const vcRev=payload.attributes.properties['ufo:vc:rev'];const rawData=vcRev.find(item=>item.revision==='raw-handler');if(rawData){const 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(item=>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
|