Skip to content

Commit

Permalink
Discard changes to source/one-event.ts
Browse files Browse the repository at this point in the history
  • Loading branch information
fregante authored Nov 15, 2024
1 parent 5e46840 commit 1334ccd
Showing 1 changed file with 16 additions and 18 deletions.
34 changes: 16 additions & 18 deletions source/one-event.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import {addListener} from './add-listener.js';

type AnyFunction = (...parameters: any[]) => void;

type RemovableEvent<T = (...arguments_: unknown[]) => unknown> = {
Expand All @@ -25,21 +23,21 @@ export async function oneEvent<Event extends RemovableEvent<AnyFunction>>(
return;
}

const controller = new AbortController();
const complete = controller.abort.bind(controller);
signal?.addEventListener('abort', complete, {once: true});

const listener = filter ? (...parameters: EventParameters<Event>) => {
if (filter(...parameters)) {
complete();
}
} : complete;

addListener(event, listener, {
signal: controller.signal,
});

await new Promise(resolve => {
controller.signal.addEventListener('abort', resolve, {once: true});
await new Promise<void>(resolve => {
// TODO: VoidFunction should not be necessary, it's equivalent to using "any"
const listener: VoidFunction = (...parameters: EventParameters<Event>) => {
if (!filter || filter(...parameters)) {
resolve();
event.removeListener(listener);
}
};

event.addListener(listener);

// TODO: The abort listener is left behind if never aborted
signal?.addEventListener('abort', () => {
resolve();
event.removeListener(listener);
});
});
}

0 comments on commit 1334ccd

Please sign in to comment.