@ghostry/finity-core
Version:
Finite state management with exhaustiveness and transition enforcement for TypeScript.
1 lines • 759 B
JavaScript
import{InvalidTransitionError as r}from"./InvalidTransitionError.js";import n from"./useClock.js";let t=(t,e)=>(a,u)=>{let i=e(u),l=n(e),o=function(){for(var r=arguments.length,n=Array(r),t=0;t<r;t++)n[t]=arguments[t];return l.advance(),i.set(...n)};return{set:o,update:function(){for(var r=arguments.length,n=Array(r),t=0;t<r;t++)n[t]=arguments[t];return l.advance(),i.update(...n)},value:()=>{let n=l.current(),e=(e,u)=>{var o;null==(o=t.onInvalidTransition)||o.call(t,new r({reason:e,state:{name:a.name,from:i.value(),to:u},tick:{current:l.current(),bound:n}}))};return{...i.value(),transition:r=>{if(l.current()!==n)return e("stale",r);let t=i.value().kind,u=r.kind;if(!a.transitions[t].includes(u))return e("disallowed",r);o(r)}}}}};export{t as default};