UNPKG

@wordpress/data

Version:
43 lines (42 loc) 953 B
// packages/data/src/utils/emitter.ts function createEmitter() { let isPaused = false; let isPending = false; const listeners = /* @__PURE__ */ new Set(); const notifyListeners = () => ( // We use Array.from to clone the listeners Set // This ensures that we don't run a listener // that was added as a response to another listener. Array.from(listeners).forEach((listener) => listener()) ); return { get isPaused() { return isPaused; }, subscribe(listener) { listeners.add(listener); return () => listeners.delete(listener); }, pause() { isPaused = true; }, resume() { isPaused = false; if (isPending) { isPending = false; notifyListeners(); } }, emit() { if (isPaused) { isPending = true; return; } notifyListeners(); } }; } export { createEmitter }; //# sourceMappingURL=emitter.js.map