UNPKG

@zedux/machines

Version:

Simple native state machine implementation for Zedux atoms

3 lines (2 loc) 2.5 kB
(function(l,r){typeof exports=="object"&&typeof module<"u"?r(exports,require("@zedux/atoms")):typeof define=="function"&&define.amd?define(["exports","@zedux/atoms"],r):(l=typeof globalThis<"u"?globalThis:l||self,r(l.ZeduxMachines={},l.ZeduxAtoms))})(this,function(l,r){"use strict";class j extends r.Store{constructor(f,e,v,x){super(null,{context:v,value:f}),this.states=e,this.guard=x,this.getContext=()=>this.getState().context,this.getValue=()=>this.getState().value,this.is=t=>this.getState().value===t,this.send=(t,s)=>this.setState(u=>{const a=this.states[u.value][t];return!a||a.guard&&!a.guard(u.context)||this.guard&&!this.guard(u,a.name)?u:{context:u.context,value:a.name}},s),this.setContext=(t,s)=>this.setState(u=>({context:typeof t=="function"?t(u.context):t,value:u.value}),s),this.setContextDeep=(t,s)=>this.setStateDeep(u=>({context:typeof t=="function"?t(u.context):t}),s)}}const k=(...[T,f,e])=>{const v=r.injectSelf(),{enterHooks:x,leaveHooks:t,store:s}=r.injectMemo(()=>{var M;const d={},h={},n={},p=c=>{const S={on:(y,b,z)=>(n[c]||(n[c]={}),n[b]||(n[b]={}),n[c][y]={name:b,guard:z},S),onEnter:y=>(d[c]||(d[c]=[]),d[c].push(y),S),onLeave:y=>(h[c]||(h[c]=[]),h[c].push(y),S),stateName:c};return S},[o]=T(p),i=(e==null?void 0:e.hydrate)&&((M=v.ecosystem.hydration)==null?void 0:M[v.id]),H=new j((i==null?void 0:i.value)??o.stateName,n,(i==null?void 0:i.context)??f,e==null?void 0:e.guard);return{enterHooks:d,leaveHooks:h,store:H}},[]),u=r.injectRef();u.current=e==null?void 0:e.subscribe,r.injectEffect(()=>{const d=s.subscribe({effects:h=>{const{action:n,newState:p,oldState:o}=h;p.value!==(o==null?void 0:o.value)&&(o&&t[o.value]&&t[o.value].forEach(i=>i(s,h)),x[p.value]&&x[p.value].forEach(i=>i(s,h)),e!=null&&e.onTransition&&e.onTransition(s,h),!(!u.current||p===o||v._isEvaluating||(n==null?void 0:n.meta)===r.zeduxTypes.ignore)&&(v._scheduleEvaluation({newState:p,oldState:o,operation:"injectMachineStore",reasons:[{action:n,newState:p,oldState:o,operation:"dispatch",sourceType:"Store",type:"state changed"}],sourceType:"Injector",type:"state changed"},!1),(n==null?void 0:n.meta)!==r.zeduxTypes.batch&&v.ecosystem._scheduler.flush()))}});return()=>d.unsubscribe()},[],{synchronous:!0});const a=s.getState();return x[a.value]&&x[a.value].forEach(d=>d(s,{action:{type:r.zeduxTypes.prime},newState:a,store:s})),s};l.MachineStore=j,l.injectMachineStore=k,Object.defineProperty(l,Symbol.toStringTag,{value:"Module"})}); //# sourceMappingURL=zedux-machines.umd.min.js.map