export function createCallbackManager() { const callbacks = new Set(); function addCallback(cb: T) { callbacks.add(cb); return () => { removeCallback(cb); }; } function removeCallback(cb: T) { callbacks.delete(cb); } function runCallbacks(...args: Parameters) { callbacks.forEach((callback) => { callback(...args); }); } function hasCallbacks() { return Boolean(callbacks.size); } return { runCallbacks, addCallback, removeCallback, hasCallbacks, }; } export type CallbackManager = ReturnType>;