stunk
Version:
Stunk is a lightweight, framework-agnostic state management library for JavaScript and TypeScript. It uses chunk-based state units for efficient updates, reactivity, and performance optimization in React, Vue(WIP), Svelte(Coming soon), and Vanilla JS/TS a
1 lines • 1.03 kB
JavaScript
import {a as a$1}from'./chunk-PZ7A72TA.js';var a=null;function N(r){let c=new Set,s=a;a=c;try{return [r(),Array.from(c)]}finally{a=s;}}function V(r){a&&a.add(r);}var m=new Set,f=new Map,M=0;function O(r,c={}){let s=M++,d=`chunk_${s}`,h=c.middleware||[];c.strict??false;if(r===void 0)throw new Error(`[${d}] Initial value cannot be undefined.`);let D=h.length>0,_=false,n=r,u=new Set,k=()=>{u.forEach(e=>e(n));};f.set(s,{notify:k});let T=()=>{if(u.size===0){f.delete(s);return}k();},g=()=>(V(p),n),S=()=>n,x=e=>{let t;if(typeof e=="function"?t=e(n):t=e,_);let o=D?a$1(t,h):t;o!==n&&(n=o,T());},b=e=>{if(typeof e!="function")throw new Error("Callback must be a function.");return u.add(e),()=>u.delete(e)},p={get:g,peek:S,set:x,subscribe:b,derive:e=>{if(typeof e!="function")throw new Error("Derive function must be a function.");let t=e(n),o=O(t),l=b(()=>{let E=e(n);o.set(E);}),i=o.destroy;return o.destroy=()=>{l(),i();},o},reset:()=>{n=r,T();},destroy:()=>{u.clear(),n=r,m.delete(s),f.delete(s);}};return p}export{N as a,O as b};