@sandstack/neuron
Version:
Neuron is a lightweight framework agnostic global state manager for Javascript apps, with React support
3 lines (2 loc) • 3.02 kB
JavaScript
var J=Object.defineProperty;var L=(d,h,m)=>h in d?J(d,h,{enumerable:!0,configurable:!0,writable:!0,value:m}):d[h]=m;var S=(d,h,m)=>(L(d,typeof h!="symbol"?h+"":h,m),m);System.register("react",["../core","react","react/jsx-runtime"],function(d,h){"use strict";var m,U,A,x,D,I,_;return{setters:[f=>{m=f.Neuron,U=f.NeuronClient},f=>{A=f.useState,x=f.useEffect,D=f.createContext,I=f.useContext},f=>{_=f.jsx}],execute:function(){function f(s,t){const[e,r]=A(t?t(s.getRef()):s.getRef()),n=u=>s.set(u),c=u=>{var a;if(t){const g=(a=t==null?void 0:t.toString().match(/\(\w+\) =>\s*(\S+)/))==null?void 0:a[1],v=typeof g=="string"?g==null?void 0:g.split(".").slice(1):[],R=s.getRef(),j=v.reduce((N,o)=>N[o],R);let C;typeof u=="function"?C=u==null?void 0:u(j):C=u;const B=((N,o,l)=>{const p=o.pop(),E=o.reduce((P,b)=>P[b]=P[b]||{},N);return E[p]=l,N})(R,v,C);s.set({...B})}},i=t?{...s.getActions(),set:n,setSlice:c}:{...s.getActions(),set:n};return x(()=>{s.effect(u=>{r(t?t(u.state):u.state)})},[]),[e,i]}const $=d("neuron",(s,t,e)=>{const r=(e==null?void 0:e(s,t))??new m(s,t);return n=>f(r,n)}),G=(s,t)=>{const[e,r]=A(t.getRef(s)),n=c=>{t.dispatch(s,i=>{i.state=typeof c=="function"?c==null?void 0:c(i.prevState):c})};return x(()=>{r(t.getRef(s))},[s]),x(()=>{t.listen(c=>{c.key===s&&r(c.state)})},[s]),[e,n]};class q{constructor(t){S(this,"neuron");S(this,"useNeuron",t=>G(t,this.client));S(this,"name");S(this,"client");const e=new U(t);this.name=t==null?void 0:t.name;const r=t==null?void 0:t.modules;this.neuron=(n,c)=>$(n,{modules:r,...c},e.neuron),this.client={name:e.name,has:e.has,getRef:e.getRef,getSnapshot:e.getSnapshot,listen:e.listen,dispatch:e.dispatch,neuron:e.neuron,getActions:e.getActions,remove:e.remove}}}d("NeuronClient",q);function H(s,t,e){const[r,n]=A(e?e(s.getRef(t)):s.getRef(t)),c=a=>s.dispatch(t,g=>g.state=a),i=a=>{var g;if(e){const v=(g=e==null?void 0:e.toString().match(/\(\w+\) =>\s*(\S+)/))==null?void 0:g[1],R=typeof v=="string"?v==null?void 0:v.split(".").slice(1):[],j=s.getRef(t),C=R.reduce((o,l)=>o[l],j);let O;typeof a=="function"?O=a==null?void 0:a(C):O=a;const N=((o,l,p)=>{const E=l.pop(),P=l.reduce((b,F)=>b[F]=b[F]||{},o);return P[E]=p,o})(j,R,O);s.dispatch(t,o=>o.state={...N})}},u=e?{...s.getActions(t),set:c,setSlice:i}:{...s.getActions(t),set:c};return x(()=>{s.listen(a=>{a.key===t&&n(e?e(a.state):a.state)})},[]),[r,u]}class z{constructor(t){S(this,"clientContext");S(this,"modules");S(this,"privateNeuron",(t,e)=>{const r=(e==null?void 0:e.key)??crypto.randomUUID();return[i=>{i.neuron(t,{...e,key:r})},i=>{const u=I(this.clientContext);return H(u,r,i)}]});S(this,"useNeuronClient",t=>{const e=new U({name:t==null?void 0:t.name,modules:this.modules});return{client:e,Private:({children:n})=>{const c=this.clientContext;return _(c.Provider,{value:e,children:n})}}});this.modules=(t==null?void 0:t.modules)??[],this.clientContext=D(null)}}d("PrivateNeuronClient",z),globalThis.ReactNeuron={neuron:$,NeuronClient:q,PrivateNeuronClient:z}}}});
//# sourceMappingURL=react.js.map