signalforge
Version:
Fine-grained reactive state management with automatic dependency tracking - Ultra-optimized, zero dependencies
2 lines (1 loc) • 812 B
JavaScript
var r=null;function a(i){let e=i,t;function o(){if(r){t||(t=new Set);let n=r.values().next().value;n&&t.add(n)}return e}function u(n){let l=typeof n=="function"?n(e):n;Object.is(l,e)||(e=l,t&&t.forEach(T=>T()))}function d(n){return arguments.length===0?o():u(n)}return d.peek=()=>e,d.subscribe=n=>{t||(t=new Set);let l=()=>n(e);return t.add(l),()=>t?.delete(l)},d}function c(i){let e=a(void 0),t=!0,o=()=>{t=!0;let d=new Set;d.add(o);let n=r;r=d;try{e(i()),t=!1}finally{r=n}};o();function u(){return t&&o(),e()}return u.peek=e.peek,u}function f(i){let e,t,o=()=>{e&&e(),t=new Set,t.add(o);let u=r;r=t;try{e=i()}finally{r=u}};return o(),()=>{e&&e(),t.clear()}}function s(i){return i()}function p(i){let e=r;r=null;try{return i()}finally{r=e}}export{s as batch,c as computed,f as effect,a as signal,p as untrack};