@daimo/pay
Version:
Seamless crypto payments. Onboard users from any chain, any coin into your app with one click.
37 lines (35 loc) • 1.08 kB
JavaScript
function createStore(reducer, init) {
let state = init;
const listeners = /* @__PURE__ */ new Set();
return {
getState: () => state,
dispatch: (e) => {
const prev = state;
state = reducer(state, e);
listeners.forEach((l) => l({ prev, next: state, event: e }));
},
subscribe: (l) => {
listeners.add(l);
return () => listeners.delete(l);
}
};
}
function waitForState(store, predicates, isError, getErrorMessage) {
const guards = typeof predicates === "function" ? [predicates] : predicates;
const matches = (s) => guards.some((g) => g(s));
return new Promise((resolve, reject) => {
const first = store.getState();
if (matches(first)) return resolve(first);
const unsubscribe = store.subscribe(({ next }) => {
if (matches(next)) {
unsubscribe();
resolve(next);
} else if (isError?.(next)) {
unsubscribe();
reject(new Error(getErrorMessage?.(next) ?? "error"));
}
});
});
}
export { createStore, waitForState };
//# sourceMappingURL=stateStore.js.map