@wordpress/data
Version:
Data module for WordPress.
49 lines (48 loc) • 1.03 kB
JavaScript
// packages/data/src/utils/emitter.ts
function createEmitter() {
let isPaused = false;
let isPending = false;
const listeners = /* @__PURE__ */ new Set();
let clonedListeners = null;
const notifyListeners = () => {
clonedListeners ??= Array.from(listeners);
const currentListeners = clonedListeners;
for (let i = 0; i < currentListeners.length; i++) {
currentListeners[i]();
}
};
return {
get isPaused() {
return isPaused;
},
subscribe(listener) {
listeners.add(listener);
clonedListeners = null;
return () => {
listeners.delete(listener);
clonedListeners = null;
};
},
pause() {
isPaused = true;
},
resume() {
isPaused = false;
if (isPending) {
isPending = false;
notifyListeners();
}
},
emit() {
if (isPaused) {
isPending = true;
return;
}
notifyListeners();
}
};
}
export {
createEmitter
};
//# sourceMappingURL=emitter.mjs.map