@surface/core
Version:
Provides core functionality of many @surfaces modules.
18 lines (17 loc) • 473 B
JavaScript
export default class Event {
listeners = new Set();
subscribe(listener) {
this.listeners.add(listener);
return { unsubscribe: () => this.unsubscribe(listener) };
}
unsubscribe(listener) {
if (!this.listeners.delete(listener)) {
throw new Error("Listener not subscribed");
}
}
notify(value) {
for (const listener of this.listeners) {
listener(value);
}
}
}