Files
agency/.pnpm-store/v3/files/6e/493952555e1bfe86a36189b091c84bdf1cc8e7ba53d1c3408bdf71dd69752a10385ec8a0a3dbd07cecb556c50e33b14016bc203a07b4987006a536e178d449
hanzo-agent 5af6960b87 run project
Run: sess_f37640604ae254cb4d11dc6217f7b721
2026-09-30 00:04:56 +00:00

31 lines
557 B
Plaintext

export class Subscribable<TListener extends Function> {
protected listeners = new Set<TListener>()
constructor() {
this.subscribe = this.subscribe.bind(this)
}
subscribe(listener: TListener): () => void {
this.listeners.add(listener)
this.onSubscribe()
return () => {
this.listeners.delete(listener)
this.onUnsubscribe()
}
}
hasListeners(): boolean {
return this.listeners.size > 0
}
protected onSubscribe(): void {
// Do nothing
}
protected onUnsubscribe(): void {
// Do nothing
}
}