export function waitForMatchingEvent( et: EventTarget, eventName: string, test: (evt: TEvent) => Promise, timeout: number = -1 ): Promise{ return new Promise((resolved, rejected) => { const ac = new AbortController(); et.addEventListener(eventName, async e => { if(!(await test(e as TEvent))) return; ac.abort(); resolved(e as TEvent); }, {signal: ac.signal}); }) }