@tanstack/hotkeys
Version:
Type-safe, framework-agnostic keyboard hotkey management for the browser
43 lines (42 loc) • 1.02 kB
JavaScript
//#region src/_store.ts
const queue = /* @__PURE__ */ new Set();
function notify(listeners) {
for (const listener of listeners) queue.add(listener);
for (const listener of queue) {
queue.delete(listener);
listener();
}
}
/**
* Creates a store. Listeners run synchronously after each change, and an
* update to an equal value (by `Object.is`) notifies no one.
*/
function createStore(initialState) {
let state = initialState;
const listeners = /* @__PURE__ */ new Set();
return {
get state() {
return state;
},
get: () => state,
setState(updater) {
const next = updater(state);
if (Object.is(state, next)) return;
state = next;
notify(listeners);
},
subscribe(observerOrFn) {
const listener = () => {
if (typeof observerOrFn === "function") observerOrFn(state);
else observerOrFn.next?.(state);
};
listeners.add(listener);
return { unsubscribe() {
listeners.delete(listener);
queue.delete(listener);
} };
}
};
}
//#endregion
export { createStore };