@@ -168,11 +168,34 @@ function initPerformanceObserver(
168
168
} ;
169
169
}
170
170
171
- function getContentType ( headers : Headers ) {
172
- const contentTypeHeader = Object . keys ( headers ) . find (
173
- ( key ) => key . toLowerCase ( ) === 'content-type' ,
171
+ function shouldRecordHeaders (
172
+ type : 'request' | 'response' ,
173
+ recordHeaders : NetworkRecordOptions [ 'recordHeaders' ] ,
174
+ ) {
175
+ return (
176
+ ! ! recordHeaders &&
177
+ ( typeof recordHeaders === 'boolean' || recordHeaders [ type ] )
174
178
) ;
175
- return contentTypeHeader && headers [ contentTypeHeader ] ;
179
+ }
180
+
181
+ function shouldRecordBody (
182
+ type : 'request' | 'response' ,
183
+ recordBody : NetworkRecordOptions [ 'recordBody' ] ,
184
+ headers : Headers ,
185
+ ) {
186
+ function matchesContentType ( contentTypes : string [ ] ) {
187
+ const contentTypeHeader = Object . keys ( headers ) . find (
188
+ ( key ) => key . toLowerCase ( ) === 'content-type' ,
189
+ ) ;
190
+ const contentType = contentTypeHeader && headers [ contentTypeHeader ] ;
191
+ return contentTypes . some ( ( ct ) => contentType ?. includes ( ct ) ) ;
192
+ }
193
+ if ( ! recordBody ) return false ;
194
+ if ( typeof recordBody === 'boolean' ) return true ;
195
+ if ( Array . isArray ( recordBody ) ) return matchesContentType ( recordBody ) ;
196
+ const recordBodyType = recordBody [ type ] ;
197
+ if ( typeof recordBodyType === 'boolean' ) return recordBodyType ;
198
+ return matchesContentType ( recordBodyType ) ;
176
199
}
177
200
178
201
async function getRequestPerformanceEntry (
@@ -221,27 +244,14 @@ function initXhrObserver(
221
244
//
222
245
} ;
223
246
}
224
- const recordRequestHeaders =
225
- ! ! options . recordHeaders &&
226
- ( typeof options . recordHeaders === 'boolean' ||
227
- ! ( 'request' in options . recordHeaders ) ||
228
- options . recordHeaders . request ) ;
229
- const recordRequestBody =
230
- ! ! options . recordBody &&
231
- ( typeof options . recordBody === 'boolean' ||
232
- ! ( 'request' in options . recordBody ) ||
233
- options . recordBody . request ) ;
234
- const recordResponseHeaders =
235
- ! ! options . recordHeaders &&
236
- ( typeof options . recordHeaders === 'boolean' ||
237
- ! ( 'response' in options . recordHeaders ) ||
238
- options . recordHeaders . response ) ;
239
- const recordResponseBody =
240
- ! ! options . recordBody &&
241
- ( typeof options . recordBody === 'boolean' ||
242
- ! ( 'response' in options . recordBody ) ||
243
- options . recordBody . response ) ;
244
-
247
+ const recordRequestHeaders = shouldRecordHeaders (
248
+ 'request' ,
249
+ options . recordHeaders ,
250
+ ) ;
251
+ const recordResponseHeaders = shouldRecordHeaders (
252
+ 'response' ,
253
+ options . recordHeaders ,
254
+ ) ;
245
255
const restorePatch = patch (
246
256
win . XMLHttpRequest . prototype ,
247
257
'open' ,
@@ -269,17 +279,11 @@ function initXhrObserver(
269
279
}
270
280
const originalSend = xhr . send . bind ( xhr ) ;
271
281
xhr . send = ( body ) => {
272
- if ( recordRequestBody ) {
273
- const contentType = getContentType ( requestHeaders ) ;
274
- if (
275
- recordRequestBody === true ||
276
- ( contentType && recordRequestBody . includes ( contentType ) )
277
- ) {
278
- if ( body === undefined || body === null ) {
279
- networkRequest . requestBody = null ;
280
- } else {
281
- networkRequest . requestBody = body ;
282
- }
282
+ if ( shouldRecordBody ( 'request' , options . recordBody , requestHeaders ) ) {
283
+ if ( body === undefined || body === null ) {
284
+ networkRequest . requestBody = null ;
285
+ } else {
286
+ networkRequest . requestBody = body ;
283
287
}
284
288
}
285
289
after = win . performance . now ( ) ;
@@ -304,18 +308,14 @@ function initXhrObserver(
304
308
if ( recordResponseHeaders ) {
305
309
networkRequest . responseHeaders = responseHeaders ;
306
310
}
307
- if ( recordResponseBody ) {
308
- const contentType = getContentType ( responseHeaders ) ;
309
- if (
310
- recordResponseBody === true ||
311
- ( contentType && recordResponseBody . includes ( contentType ) )
312
- ) {
313
- if ( xhr . response === undefined || xhr . response === null ) {
314
- networkRequest . responseBody = null ;
315
- } else {
316
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
317
- networkRequest . responseBody = xhr . response ;
318
- }
311
+ if (
312
+ shouldRecordBody ( 'response' , options . recordBody , responseHeaders )
313
+ ) {
314
+ if ( xhr . response === undefined || xhr . response === null ) {
315
+ networkRequest . responseBody = null ;
316
+ } else {
317
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
318
+ networkRequest . responseBody = xhr . response ;
319
319
}
320
320
}
321
321
getRequestPerformanceEntry (
@@ -363,27 +363,14 @@ function initFetchObserver(
363
363
//
364
364
} ;
365
365
}
366
- const recordRequestHeaders =
367
- ! ! options . recordHeaders &&
368
- ( typeof options . recordHeaders === 'boolean' ||
369
- ! ( 'request' in options . recordHeaders ) ||
370
- options . recordHeaders . request ) ;
371
- const recordRequestBody =
372
- ! ! options . recordBody &&
373
- ( typeof options . recordBody === 'boolean' ||
374
- ! ( 'request' in options . recordBody ) ||
375
- options . recordBody . request ) ;
376
- const recordResponseHeaders =
377
- ! ! options . recordHeaders &&
378
- ( typeof options . recordHeaders === 'boolean' ||
379
- ! ( 'response' in options . recordHeaders ) ||
380
- options . recordHeaders . response ) ;
381
- const recordResponseBody =
382
- ! ! options . recordBody &&
383
- ( typeof options . recordBody === 'boolean' ||
384
- ! ( 'response' in options . recordBody ) ||
385
- options . recordBody . response ) ;
386
-
366
+ const recordRequestHeaders = shouldRecordHeaders (
367
+ 'request' ,
368
+ options . recordHeaders ,
369
+ ) ;
370
+ const recordResponseHeaders = shouldRecordHeaders (
371
+ 'response' ,
372
+ options . recordHeaders ,
373
+ ) ;
387
374
const restorePatch = patch ( win , 'fetch' , ( originalFetch : typeof fetch ) => {
388
375
return async function (
389
376
url : URL | RequestInfo ,
@@ -402,17 +389,11 @@ function initFetchObserver(
402
389
if ( recordRequestHeaders ) {
403
390
networkRequest . requestHeaders = requestHeaders ;
404
391
}
405
- if ( recordRequestBody ) {
406
- const contentType = getContentType ( requestHeaders ) ;
407
- if (
408
- recordRequestBody === true ||
409
- ( contentType && recordRequestBody . includes ( contentType ) )
410
- ) {
411
- if ( req . body === undefined || req . body === null ) {
412
- networkRequest . requestBody = null ;
413
- } else {
414
- networkRequest . requestBody = req . body ;
415
- }
392
+ if ( shouldRecordBody ( 'request' , options . recordBody , requestHeaders ) ) {
393
+ if ( req . body === undefined || req . body === null ) {
394
+ networkRequest . requestBody = null ;
395
+ } else {
396
+ networkRequest . requestBody = req . body ;
416
397
}
417
398
}
418
399
after = win . performance . now ( ) ;
@@ -425,23 +406,17 @@ function initFetchObserver(
425
406
if ( recordResponseHeaders ) {
426
407
networkRequest . responseHeaders = responseHeaders ;
427
408
}
428
- if ( recordResponseBody ) {
429
- const contentType = getContentType ( responseHeaders ) ;
430
- if (
431
- recordResponseBody === true ||
432
- ( contentType && recordResponseBody . includes ( contentType ) )
433
- ) {
434
- let body : string | undefined ;
435
- try {
436
- body = await res . clone ( ) . text ( ) ;
437
- } catch {
438
- //
439
- }
440
- if ( res . body === undefined || res . body === null ) {
441
- networkRequest . responseBody = null ;
442
- } else {
443
- networkRequest . responseBody = body ;
444
- }
409
+ if ( shouldRecordBody ( 'response' , options . recordBody , responseHeaders ) ) {
410
+ let body : string | undefined ;
411
+ try {
412
+ body = await res . clone ( ) . text ( ) ;
413
+ } catch {
414
+ //
415
+ }
416
+ if ( res . body === undefined || res . body === null ) {
417
+ networkRequest . responseBody = null ;
418
+ } else {
419
+ networkRequest . responseBody = body ;
445
420
}
446
421
}
447
422
return res ;
0 commit comments