@@ -4,15 +4,19 @@ import { record } from 'rrweb';
44
55import { createBreadcrumb } from '../util/createBreadcrumb' ;
66
7- export function handleDom ( handlerData : any ) : Breadcrumb | null {
7+ export interface DomHandlerData {
8+ name : string ;
9+ event : Node | { target : Node } ;
10+ }
11+
12+ export function handleDom ( handlerData : DomHandlerData ) : Breadcrumb | null {
813 // Taken from https://github.com/getsentry/sentry-javascript/blob/master/packages/browser/src/integrations/breadcrumbs.ts#L112
914 let target ;
1015 let targetNode ;
1116
1217 // Accessing event.target can throw (see getsentry/raven-js#838, #768)
1318 try {
14- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
15- targetNode = ( handlerData . event . target as Node ) || ( handlerData . event as unknown as Node ) ;
19+ targetNode = getTargetNode ( handlerData ) ;
1620 target = htmlTreeAsString ( targetNode ) ;
1721 } catch ( e ) {
1822 target = '<unknown>' ;
@@ -23,12 +27,24 @@ export function handleDom(handlerData: any): Breadcrumb | null {
2327 }
2428
2529 return createBreadcrumb ( {
26- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
2730 category : `ui.${ handlerData . name } ` ,
2831 message : target ,
2932 data : {
3033 // Not sure why this errors, Node should be correct (Argument of type 'Node' is not assignable to parameter of type 'INode')
34+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
3135 ...( targetNode ? { nodeId : record . mirror . getId ( targetNode as any ) } : { } ) ,
3236 } ,
3337 } ) ;
3438}
39+
40+ function getTargetNode ( handlerData : DomHandlerData ) : Node {
41+ if ( isEventWithTarget ( handlerData . event ) ) {
42+ return handlerData . event . target ;
43+ }
44+
45+ return handlerData . event ;
46+ }
47+
48+ function isEventWithTarget ( event : unknown ) : event is { target : Node } {
49+ return ! ! ( event as { target ?: Node } ) . target ;
50+ }
0 commit comments