Skip to content

refactor: use Map<wrapperId, EventListener> instead of document expando properties #65

@adnaan

Description

@adnaan

Context

Discovered during PR #58 review.

Problem

EventDelegator and LinkInterceptor store listener references as expando properties on document:

(document as any)[`__lvt_delegated_${eventType}_${wrapperId}`] = listener;
(document as any)[`__lvt_link_intercept_${wrapperId}`] = listener;

Issues:

  • Non-standard — expando properties on DOM nodes
  • Invisible to TypeScript (requires as any casts)
  • Risks collisions with external scripts that iterate document properties
  • Harder to introspect during debugging

Proposed Fix

Use a private Map<string, EventListener> on each class.

Scope

Deferred from PR #58 to keep that PR focused. All locations using expando properties should migrate:

  • dom/event-delegation.ts__lvt_delegated_${eventType}_${wrapperId}
  • dom/event-delegation.ts__lvt_window_${eventType}_${wrapperId}
  • dom/event-delegation.ts__lvt_focus_trap_${wrapperId}
  • dom/event-delegation.ts__lvt_autofocus_observer_${wrapperId}
  • dom/link-interceptor.ts__lvt_link_intercept_${wrapperId}

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions