export interface Disposable { dispose: () => Promise | void; } export type BaseListener = Record any) | undefined>; export interface BaseObserverInterface { registerListener(listener: Partial): () => void; } export class BaseObserver implements BaseObserverInterface { protected listeners = new Set>(); constructor() {} dispose(): void { this.listeners.clear(); } /** * Register a listener for updates to the PowerSync client. */ registerListener(listener: Partial): () => void { this.listeners.add(listener); return () => { this.listeners.delete(listener); }; } iterateListeners(cb: (listener: Partial) => any) { for (const listener of this.listeners) { cb(listener); } } async iterateAsyncListeners(cb: (listener: Partial) => Promise) { for (let i of Array.from(this.listeners.values())) { await cb(i); } } }