import {UnitOfWork, EventListenerAction, ITransformer} from '../ts-refs/trans-render/types.js'; import {MountObserver} from 'mount-observer/MountObserver.js'; export class AddEventListener{ #abortController = new AbortController(); constructor( mountObserver: MountObserver | undefined, transformer: ITransformer, uow: UnitOfWork, matchingElement: Element, type: string, action: EventListenerAction, options?: boolean | AddEventListenerOptions, ){ let transpiledOptions: AddEventListenerOptions = { signal: this.#abortController.signal, } switch(typeof options){ case 'boolean': transpiledOptions.capture = options; break; case 'object': Object.assign(transpiledOptions, options); break; } const transpiledAction = typeof action === 'string' ? transformer.model[action] : action; matchingElement.addEventListener(type, e => { (transpiledAction)(e, transformer, uow, matchingElement); }, options); mountObserver?.addEventListener('disconnect', e => { this.#abortController.abort(); }); } }