Line data Source code
1 795 : /*
2 : * Copyright (C) 2024 Red Hat, Inc.
3 : * SPDX-License-Identifier: GPL-3.0-or-later
4 : */
5 :
6 740 : export class EventEmitter<EM extends { [E in keyof EM]: (...args: never[]) => void }> {
7 740 : #listeners: { [E in keyof EM]?: EM[E][] } = {};
8 :
9 740 : public on<E extends keyof EM>(event: E, listener: EM[E]) {
10 740 : const listeners = this.#listeners[event] ||= [];
11 740 : listeners.push(listener);
12 4 : return () => {
13 4 : listeners.splice(listeners.indexOf(listener), 1);
14 4 : };
15 740 : }
16 :
17 767 : protected emit<E extends keyof EM>(event: E, ...args: Parameters<EM[E]>) {
18 294 : for (const listener of this.#listeners[event] || []) {
19 767 : listener(...args);
20 767 : }
21 767 : }
22 795 : }
|