1
1
import invariant from 'invariant' ;
2
+ import isPlainObject from 'lodash/isPlainObject' ;
2
3
import { duration } from 'moment-timezone' ;
3
4
4
5
import { deviceNameMapper } from 'sentry/components/deviceName' ;
@@ -10,13 +11,23 @@ const defaultValues = {
10
11
has_viewed : false ,
11
12
} ;
12
13
13
- export function mapResponseToReplayRecord ( apiResponse : any ) : ReplayRecord {
14
- // Marshal special fields into tags
15
- const user = Object . fromEntries (
16
- Object . entries ( apiResponse . user )
14
+ function mapUser ( user : any ) : ReplayRecord [ 'tags' ] {
15
+ return Object . fromEntries (
16
+ Object . entries ( user )
17
17
. filter ( ( [ key , value ] ) => key !== 'display_name' && value )
18
- . map ( ( [ key , value ] ) => [ `user.${ key } ` , [ value ] ] )
18
+ . flatMap ( ( [ key , value ] ) => {
19
+ if ( isPlainObject ( value ) ) {
20
+ return Object . entries ( value as Record < PropertyKey , unknown > ) . map (
21
+ ( [ subKey , subValue ] ) => [ `user.${ key } .${ subKey } ` , [ String ( subValue ) ] ]
22
+ ) ;
23
+ }
24
+ return [ [ `user.${ key } ` , [ String ( value ) ] ] ] ;
25
+ } )
19
26
) ;
27
+ }
28
+
29
+ export function mapResponseToReplayRecord ( apiResponse : any ) : ReplayRecord {
30
+ // Marshal special fields into tags
20
31
const unorderedTags : ReplayRecord [ 'tags' ] = {
21
32
...apiResponse . tags ,
22
33
...( apiResponse . browser ?. name ? { 'browser.name' : [ apiResponse . browser . name ] } : { } ) ,
@@ -40,7 +51,7 @@ export function mapResponseToReplayRecord(apiResponse: any): ReplayRecord {
40
51
...( apiResponse . os ?. version ? { 'os.version' : [ apiResponse . os . version ] } : { } ) ,
41
52
...( apiResponse . sdk ?. name ? { 'sdk.name' : [ apiResponse . sdk . name ] } : { } ) ,
42
53
...( apiResponse . sdk ?. version ? { 'sdk.version' : [ apiResponse . sdk . version ] } : { } ) ,
43
- ...user ,
54
+ ...mapUser ( apiResponse . user ?? { } ) ,
44
55
} ;
45
56
46
57
// Stringify everything, so we don't try to render objects or something strange
0 commit comments