react19-global-store
Version:
A simple yet elegant, light weight, react18 global store to replace Zustand for better tree shaking.
2 lines (1 loc) • 866 B
JavaScript
var o=(e,t)=>{let s=document.cookie.split("; ").find(r=>r.startsWith(e));switch(t==null?void 0:t.storage){case"cookie":return s==null?void 0:s.split("=")[1];case"session":return sessionStorage.getItem(e);default:return localStorage.getItem(e)}},f=(e,t,s)=>{var r;switch(s==null?void 0:s.storage){case"cookie":document.cookie=`${e}=${t}; max-age=31536000; SameSite=Strict;`,((r=s.sync)==null||r)&&sessionStorage.setItem(e,t);return;case"session":sessionStorage.setItem(e,t);return;default:localStorage.setItem(e,t)}},l=e=>({init(t,s,r){var a;if(typeof window=="undefined")return;let g=o(t,e),i=JSON.parse(g||"{}").val;i&&r(i),((a=e==null?void 0:e.sync)==null||a)&&addEventListener("storage",n=>{if(n.key===t&&n.newValue){let c=JSON.parse(n.newValue).val;c!==void 0&&r(c)}})},onChange(t,s){typeof window!="undefined"&&f(t,JSON.stringify({val:s}),e)}});export{l as a};