@@ -5,27 +5,40 @@ export function serializeEvent(event) {
55 Object . assign ( data , eventTransforms [ event . type ] ( event ) ) ;
66 }
77
8- const target = event . target ;
9- if ( target . tagName in targetTransforms ) {
10- targetTransforms [ target . tagName ] . forEach ( ( trans ) =>
11- Object . assign ( data , trans ( target ) )
12- ) ;
13- }
8+ data . target = serializeDomElement ( event . target ) ;
9+ data . currentTarget =
10+ event . target === event . currentTarget
11+ ? data . target
12+ : serializeDomElement ( event . currentTarget ) ;
13+ data . relatedTarget = serializeDomElement ( event . relatedTarget ) ;
1414
1515 return data ;
1616}
1717
18- const targetTransformCategories = {
19- hasValue : ( target ) => ( {
20- value : target . value ,
18+ function serializeDomElement ( element ) {
19+ let elementData = null ;
20+ if ( element ) {
21+ elementData = defaultElementTransform ( element ) ;
22+ if ( element . tagName in elementTransforms ) {
23+ elementTransforms [ element . tagName ] . forEach ( ( trans ) =>
24+ Object . assign ( elementData , trans ( element ) )
25+ ) ;
26+ }
27+ }
28+ return elementData ;
29+ }
30+
31+ const elementTransformCategories = {
32+ hasValue : ( element ) => ( {
33+ value : element . value ,
2134 } ) ,
22- hasCurrentTime : ( target ) => ( {
23- currentTime : target . currentTime ,
35+ hasCurrentTime : ( element ) => ( {
36+ currentTime : element . currentTime ,
2437 } ) ,
25- hasFiles : ( target ) => {
26- if ( target ?. type === "file" ) {
38+ hasFiles : ( element ) => {
39+ if ( element ?. type === "file" ) {
2740 return {
28- files : Array . from ( target . files ) . map ( ( file ) => ( {
41+ files : Array . from ( element . files ) . map ( ( file ) => ( {
2942 lastModified : file . lastModified ,
3043 name : file . name ,
3144 size : file . size ,
@@ -38,7 +51,11 @@ const targetTransformCategories = {
3851 } ,
3952} ;
4053
41- const targetTagCategories = {
54+ function defaultElementTransform ( element ) {
55+ return { boundingClientRect : element . getBoundingClientRect ( ) } ;
56+ }
57+
58+ const elementTagCategories = {
4259 hasValue : [
4360 "BUTTON" ,
4461 "INPUT" ,
@@ -54,12 +71,13 @@ const targetTagCategories = {
5471 hasFiles : [ "INPUT" ] ,
5572} ;
5673
57- const targetTransforms = { } ;
74+ const elementTransforms = { } ;
5875
59- Object . keys ( targetTagCategories ) . forEach ( ( category ) => {
60- targetTagCategories [ category ] . forEach ( ( type ) => {
61- const transforms = targetTransforms [ type ] || ( targetTransforms [ type ] = [ ] ) ;
62- transforms . push ( targetTransformCategories [ category ] ) ;
76+ Object . keys ( elementTagCategories ) . forEach ( ( category ) => {
77+ elementTagCategories [ category ] . forEach ( ( type ) => {
78+ const transforms =
79+ elementTransforms [ type ] || ( elementTransforms [ type ] = [ ] ) ;
80+ transforms . push ( elementTransformCategories [ category ] ) ;
6381 } ) ;
6482} ) ;
6583
0 commit comments