UNPKG

@mcastiello/simple-store

Version:

A simple state manager that can store data via a reducer function.

2 lines (1 loc) 743 B
import{CancellablePromise as e}from"@mcastiello/cancellable-promise";const r=(r,t)=>{let l=t;const n=new Map,o=new Map;return{subscribe:(r,t=[])=>{const o=crypto.randomUUID(),a=e.defer(r);return n.set(o,[a,t]),l&&0===t.length&&r(l),()=>{n.delete(o)}},intercept:(e,r)=>{const t=crypto.randomUUID();return o.set(t,[e,r]),()=>{o.delete(t)}},dispatch:(...e)=>{const[t,a]=e,c={type:t,payload:a},s=r(l,c),d=Array.from(n.values()).filter(([,e])=>0===(null==e?void 0:e.length)||(null==e?void 0:e.includes(t))).map(([e])=>e),i=Array.from(o.values()).filter(([,e])=>e.includes(t)).map(([e])=>e).reduce((e,r)=>r(l,e,c),s);l!==i&&(d.forEach(e=>e(i,c)),l=i)},state:new Proxy({},{get(e,r){var t;return null==(t=l)?void 0:t[r]}})}};export{r as createStore};