@@ -46,7 +46,8 @@ export function mergeScopeData(data: ScopeData, mergeData: ScopeData): void {
4646 mergeAndOverwriteScopeData ( data , 'tags' , tags ) ;
4747 mergeAndOverwriteScopeData ( data , 'user' , user ) ;
4848 mergeAndOverwriteScopeData ( data , 'contexts' , contexts ) ;
49- mergeAndOverwriteScopeData ( data , 'sdkProcessingMetadata' , sdkProcessingMetadata ) ;
49+
50+ data . sdkProcessingMetadata = mergeSdkProcessingMetadata ( data . sdkProcessingMetadata , sdkProcessingMetadata ) ;
5051
5152 if ( level ) {
5253 data . level = level ;
@@ -115,6 +116,35 @@ export function mergeArray<Prop extends 'breadcrumbs' | 'fingerprint'>(
115116 event [ prop ] = merged . length ? merged : undefined ;
116117}
117118
119+ /**
120+ * Merge new SDK processing metadata into existing data.
121+ * New data will overwrite existing data.
122+ * `normalizedRequest` is special handled and will also be merged.
123+ */
124+ export function mergeSdkProcessingMetadata (
125+ sdkProcessingMetadata : ScopeData [ 'sdkProcessingMetadata' ] ,
126+ newSdkProcessingMetadata : ScopeData [ 'sdkProcessingMetadata' ] ,
127+ ) : ScopeData [ 'sdkProcessingMetadata' ] {
128+ // We want to merge `normalizedRequest` to avoid some partial entry on the scope
129+ // overwriting potentially more complete data on the isolation scope
130+ const normalizedRequestBefore = sdkProcessingMetadata [ 'normalizedRequest' ] ;
131+ const normalizedRequest = newSdkProcessingMetadata [ 'normalizedRequest' ] ;
132+
133+ const newData = {
134+ ...sdkProcessingMetadata ,
135+ ...newSdkProcessingMetadata ,
136+ } ;
137+
138+ if ( normalizedRequestBefore || normalizedRequest ) {
139+ newData [ 'normalizedRequest' ] = {
140+ ...( normalizedRequestBefore || { } ) ,
141+ ...( normalizedRequest || { } ) ,
142+ } ;
143+ }
144+
145+ return newData ;
146+ }
147+
118148function applyDataToEvent ( event : Event , data : ScopeData ) : void {
119149 const { extra, tags, user, contexts, level, transactionName } = data ;
120150
0 commit comments