@@ -19,6 +19,7 @@ import { clearGlobalScope } from '../testutils';
1919describe ( 'applyDebugIds' , ( ) => {
2020 afterEach ( ( ) => {
2121 GLOBAL_OBJ . _sentryDebugIds = undefined ;
22+ GLOBAL_OBJ . _debugIds = undefined ;
2223 } ) ;
2324
2425 it ( "should put debug IDs into an event's stack frames" , ( ) => {
@@ -114,6 +115,139 @@ describe('applyDebugIds', () => {
114115 debug_id : 'bbbbbbbb-bbbb-4bbb-bbbb-bbbbbbbbbb' ,
115116 } ) ;
116117 } ) ;
118+
119+ it ( 'should support native _debugIds format' , ( ) => {
120+ GLOBAL_OBJ . _debugIds = {
121+ 'filename1.js\nfilename1.js' : 'aaaaaaaa-aaaa-4aaa-aaaa-aaaaaaaaaa' ,
122+ 'filename2.js\nfilename2.js' : 'bbbbbbbb-bbbb-4bbb-bbbb-bbbbbbbbbb' ,
123+ 'filename4.js\nfilename4.js' : 'cccccccc-cccc-4ccc-cccc-cccccccccc' ,
124+ } ;
125+
126+ const stackParser = createStackParser ( [ 0 , line => ( { filename : line } ) ] ) ;
127+
128+ const event : Event = {
129+ exception : {
130+ values : [
131+ {
132+ stacktrace : {
133+ frames : [
134+ { filename : 'filename1.js' } ,
135+ { filename : 'filename2.js' } ,
136+ { filename : 'filename1.js' } ,
137+ { filename : 'filename3.js' } ,
138+ ] ,
139+ } ,
140+ } ,
141+ ] ,
142+ } ,
143+ } ;
144+
145+ applyDebugIds ( event , stackParser ) ;
146+
147+ expect ( event . exception ?. values ?. [ 0 ] ?. stacktrace ?. frames ) . toContainEqual ( {
148+ filename : 'filename1.js' ,
149+ debug_id : 'aaaaaaaa-aaaa-4aaa-aaaa-aaaaaaaaaa' ,
150+ } ) ;
151+
152+ expect ( event . exception ?. values ?. [ 0 ] ?. stacktrace ?. frames ) . toContainEqual ( {
153+ filename : 'filename2.js' ,
154+ debug_id : 'bbbbbbbb-bbbb-4bbb-bbbb-bbbbbbbbbb' ,
155+ } ) ;
156+
157+ // expect not to contain an image for the stack frame that doesn't have a corresponding debug id
158+ expect ( event . exception ?. values ?. [ 0 ] ?. stacktrace ?. frames ) . not . toContainEqual (
159+ expect . objectContaining ( {
160+ filename3 : 'filename3.js' ,
161+ debug_id : expect . any ( String ) ,
162+ } ) ,
163+ ) ;
164+ } ) ;
165+
166+ it ( 'should merge both _sentryDebugIds and _debugIds when both exist' , ( ) => {
167+ GLOBAL_OBJ . _sentryDebugIds = {
168+ 'filename1.js\nfilename1.js' : 'aaaaaaaa-aaaa-4aaa-aaaa-aaaaaaaaaa' ,
169+ 'filename2.js\nfilename2.js' : 'bbbbbbbb-bbbb-4bbb-bbbb-bbbbbbbbbb' ,
170+ } ;
171+
172+ GLOBAL_OBJ . _debugIds = {
173+ 'filename3.js\nfilename3.js' : 'cccccccc-cccc-4ccc-cccc-cccccccccc' ,
174+ 'filename4.js\nfilename4.js' : 'dddddddd-dddd-4ddd-dddd-dddddddddd' ,
175+ } ;
176+
177+ const stackParser = createStackParser ( [ 0 , line => ( { filename : line } ) ] ) ;
178+
179+ const event : Event = {
180+ exception : {
181+ values : [
182+ {
183+ stacktrace : {
184+ frames : [
185+ { filename : 'filename1.js' } ,
186+ { filename : 'filename2.js' } ,
187+ { filename : 'filename3.js' } ,
188+ { filename : 'filename4.js' } ,
189+ ] ,
190+ } ,
191+ } ,
192+ ] ,
193+ } ,
194+ } ;
195+
196+ applyDebugIds ( event , stackParser ) ;
197+
198+ // Should have debug IDs from both sources
199+ expect ( event . exception ?. values ?. [ 0 ] ?. stacktrace ?. frames ) . toContainEqual ( {
200+ filename : 'filename1.js' ,
201+ debug_id : 'aaaaaaaa-aaaa-4aaa-aaaa-aaaaaaaaaa' ,
202+ } ) ;
203+
204+ expect ( event . exception ?. values ?. [ 0 ] ?. stacktrace ?. frames ) . toContainEqual ( {
205+ filename : 'filename2.js' ,
206+ debug_id : 'bbbbbbbb-bbbb-4bbb-bbbb-bbbbbbbbbb' ,
207+ } ) ;
208+
209+ expect ( event . exception ?. values ?. [ 0 ] ?. stacktrace ?. frames ) . toContainEqual ( {
210+ filename : 'filename3.js' ,
211+ debug_id : 'cccccccc-cccc-4ccc-cccc-cccccccccc' ,
212+ } ) ;
213+
214+ expect ( event . exception ?. values ?. [ 0 ] ?. stacktrace ?. frames ) . toContainEqual ( {
215+ filename : 'filename4.js' ,
216+ debug_id : 'dddddddd-dddd-4ddd-dddd-dddddddddd' ,
217+ } ) ;
218+ } ) ;
219+
220+ it ( 'should prioritize _debugIds over _sentryDebugIds for the same file' , ( ) => {
221+ GLOBAL_OBJ . _sentryDebugIds = {
222+ 'filename1.js\nfilename1.js' : 'old-debug-id-aaaa-aaaa-aaaa-aaaaaaaaaa' ,
223+ } ;
224+
225+ GLOBAL_OBJ . _debugIds = {
226+ 'filename1.js\nfilename1.js' : 'new-debug-id-bbbb-bbbb-bbbb-bbbbbbbbbb' ,
227+ } ;
228+
229+ const stackParser = createStackParser ( [ 0 , line => ( { filename : line } ) ] ) ;
230+
231+ const event : Event = {
232+ exception : {
233+ values : [
234+ {
235+ stacktrace : {
236+ frames : [ { filename : 'filename1.js' } ] ,
237+ } ,
238+ } ,
239+ ] ,
240+ } ,
241+ } ;
242+
243+ applyDebugIds ( event , stackParser ) ;
244+
245+ // Should use the newer native _debugIds format
246+ expect ( event . exception ?. values ?. [ 0 ] ?. stacktrace ?. frames ) . toContainEqual ( {
247+ filename : 'filename1.js' ,
248+ debug_id : 'new-debug-id-bbbb-bbbb-bbbb-bbbbbbbbbb' ,
249+ } ) ;
250+ } ) ;
117251} ) ;
118252
119253describe ( 'applyDebugMeta' , ( ) => {
0 commit comments