@lite-fsm/core 2.0.5 → 2.1.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/MachineManager.d.cts +1 -3
- package/dist/MachineManager.d.ts +1 -3
- package/dist/actor.d.cts +0 -6
- package/dist/actor.d.ts +0 -6
- package/dist/actorEffects.d.cts +2 -0
- package/dist/actorEffects.d.ts +2 -0
- package/dist/createMachine.d.cts +3 -34
- package/dist/createMachine.d.ts +3 -34
- package/dist/createMachine.types.d.cts +166 -0
- package/dist/createMachine.types.d.ts +166 -0
- package/dist/hydration.d.cts +2 -1
- package/dist/hydration.d.ts +2 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +5 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +1 -1
- package/dist/interfaces.d.cts +40 -19
- package/dist/interfaces.d.ts +40 -19
- package/dist/managerNormalize.d.cts +9 -2
- package/dist/managerNormalize.d.ts +9 -2
- package/dist/plugin.d.cts +81 -0
- package/dist/plugin.d.ts +81 -0
- package/dist/pluginHelpers.d.cts +68 -0
- package/dist/pluginHelpers.d.ts +68 -0
- package/dist/pluginNormalize.d.cts +16 -0
- package/dist/pluginNormalize.d.ts +16 -0
- package/dist/pluginStorage.d.cts +20 -0
- package/dist/pluginStorage.d.ts +20 -0
- package/dist/pluginStorageNormalize.d.cts +3 -0
- package/dist/pluginStorageNormalize.d.ts +3 -0
- package/dist/pluginStorageTypes.d.cts +326 -0
- package/dist/pluginStorageTypes.d.ts +326 -0
- package/dist/pluginTypes.d.cts +102 -0
- package/dist/pluginTypes.d.ts +102 -0
- package/dist/runtime/defaultPreset.d.cts +2 -0
- package/dist/runtime/defaultPreset.d.ts +2 -0
- package/dist/runtime/instance/manager.d.cts +37 -0
- package/dist/runtime/instance/manager.d.ts +37 -0
- package/dist/runtime/instance/plugin.d.cts +3 -0
- package/dist/runtime/instance/plugin.d.ts +3 -0
- package/dist/runtime/instance/storage.d.cts +3 -0
- package/dist/runtime/instance/storage.d.ts +3 -0
- package/dist/runtime/kernel/actionView.d.cts +2 -0
- package/dist/runtime/kernel/actionView.d.ts +2 -0
- package/dist/runtime/kernel/bucketRuntime.d.cts +34 -0
- package/dist/runtime/kernel/bucketRuntime.d.ts +34 -0
- package/dist/runtime/kernel/callbackValidation.d.cts +11 -0
- package/dist/runtime/kernel/callbackValidation.d.ts +11 -0
- package/dist/runtime/kernel/createMachineManagerFactory.d.cts +13 -0
- package/dist/runtime/kernel/createMachineManagerFactory.d.ts +13 -0
- package/dist/runtime/kernel/registry.d.cts +23 -0
- package/dist/runtime/kernel/registry.d.ts +23 -0
- package/dist/runtime/kernel/routing.d.cts +33 -0
- package/dist/runtime/kernel/routing.d.ts +33 -0
- package/dist/runtime/kernel/snapshot.d.cts +26 -0
- package/dist/runtime/kernel/snapshot.d.ts +26 -0
- package/dist/runtime/kernel/storage.d.cts +226 -0
- package/dist/runtime/kernel/storage.d.ts +226 -0
- package/dist/runtime/kernel/transitionGuard.d.cts +4 -0
- package/dist/runtime/kernel/transitionGuard.d.ts +4 -0
- package/dist/runtime/kernel/transitionTrace.d.cts +40 -0
- package/dist/runtime/kernel/transitionTrace.d.ts +40 -0
- package/dist/types.d.cts +35 -10
- package/dist/types.d.ts +35 -10
- package/dist/utils.d.cts +1 -1
- package/dist/utils.d.ts +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var J=Object.defineProperty;var Lt=Object.getOwnPropertyDescriptor;var Bt=Object.getOwnPropertyNames;var Ft=Object.prototype.hasOwnProperty;var Vt=(e,t,n)=>t in e?J(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Gt=(e,t)=>{for(var n in t)J(e,n,{get:t[n],enumerable:!0})},Kt=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Bt(t))!Ft.call(e,o)&&o!==n&&J(e,o,{get:()=>t[o],enumerable:!(r=Lt(t,o))||r.enumerable});return e};var Ht=e=>Kt(J({},"__esModule",{value:!0}),e);var _e=(e,t,n)=>Vt(e,typeof t!="symbol"?t+"":t,n);var fn={};Gt(fn,{HYDRATE_ACTION_TYPE:()=>te,LiteFsmError:()=>I,Machine:()=>q,MachineManager:()=>ft,VOID_REDUCER_MIDDLEWARE_MARKER:()=>le,createActorMeta:()=>z,createConfig:()=>dn,createEffect:()=>gn,createMachine:()=>yt,createReducer:()=>cn,defineMachine:()=>He});module.exports=Ht(fn);var Q=Symbol.for("lite-fsm.registerBagDispose");function ee(...e){return e.length===0?t=>t:e.reduce((t,n)=>(...r)=>t(n(...r)))}var Pe="*",jt="@@lite-fsm/",te="@@lite-fsm/HYDRATE",le="__liteFsmAllowVoidReducer",Z="Reducer returned undefined. Return the next state, or use immerMiddleware to mutate draft state without return.",ne=e=>typeof e=="function"&&le in e,I=class extends Error{constructor(n,r){super(r);_e(this,"code",n);this.name="LiteFsmError"}},Se=(e,t)=>{if(typeof e!="string"||e.length===0)throw new I("LITE_FSM_INVALID_GENERATED_ID",`[lite-fsm] generate${t==="actor"?"Actor":"Group"}Id must return a non-empty string.`);return e},oe=e=>typeof e.type=="string"&&e.type.startsWith(jt),L=globalThis.process?.env?.NODE_ENV!=="production",K=e=>{if(e===null||typeof e!="object"||Object.isFrozen(e))return e;Object.freeze(e);for(let t of Object.keys(e))K(Reflect.get(e,t));return e};var j=Object.freeze({}),$t=new Set(["__RESOLVED","__REJECTED","__CANCELLED"]),zt=["senderActorId","senderGroupId","senderGroupTag"],Wt=["actorId","groupId","groupTag"],V=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),N=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),H=e=>typeof e=="string"&&$t.has(e),ke=e=>N(e)&&typeof e.state=="string"&&N(e.context),z=e=>Object.freeze({actorId:e.actorId,groupId:e.groupId,groupTag:e.groupTag}),re=e=>V(e.config,"__INIT"),ae=(e,t,n,r)=>{let o=e[t]?.[n];if(o!==void 0)return o;if(!(r&&t==="__INIT"))return e["*"]?.[n]},Ne=(e,t,n,r)=>{if(n==="__INIT")throw new I("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor '${e}' remained in __INIT after spawn.`);if(!H(n)&&!r(t,n))throw new I("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor '${e}' has invalid state.`)},Oe=(e,t)=>{if(t.initialState!=="__INIT")throw new I("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor template '${e}' must use __INIT as initialState.`);if(t.persistence!==void 0&&t.persistence!=="runtime"&&t.persistence!=="snapshot")throw new I("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor template '${e}' has invalid persistence mode.`);if(t.persistence!=="snapshot"&&(t.hydrate||t.dehydrate))throw new I("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor template '${e}' cannot define hydrate/dehydrate hooks without snapshot persistence.`);let n=t.config;for(let r of Object.keys(n)){if(H(r)||r.startsWith("__")&&r!=="__INIT")throw new I("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor template '${e}' has reserved state '${r}'.`);for(let o of Object.values(n[r])){if(r==="__INIT"&&o===null)throw new I("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor template '${e}' cannot spawn with a null __INIT target.`);if(o==="__INIT"||typeof o=="string"&&o.startsWith("__")&&!H(o))throw new I("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor template '${e}' has invalid target '${String(o)}'.`)}}},Le=e=>{let t={};return e&&(e.actorId!==void 0&&(t.actorId=e.actorId),e.groupId!==void 0&&(t.groupId=e.groupId),e.groupTag!==void 0&&(t.groupTag=e.groupTag),e.senderActorId!==void 0&&(t.senderActorId=e.senderActorId),e.senderGroupId!==void 0&&(t.senderGroupId=e.senderGroupId),e.senderGroupTag!==void 0&&(t.senderGroupTag=e.senderGroupTag)),t},Be=e=>{let t=Le(e);for(let n of zt)delete t[n];return t},Fe=e=>{let t=Le(e);for(let n of Wt)delete t[n];return t},Ie=(e,t)=>{if(Object.keys(t).length===0){let{meta:n,...r}=e;return r}return{...e,meta:t}},me=e=>Array.isArray(e)?e:[e],Ae=e=>[...new Set(e)],Ve=e=>e?e.actorId!==void 0?{scope:"actor",targetSet:Ae(me(e.actorId))}:e.groupId!==void 0?{scope:"group",targetSet:Ae(me(e.groupId))}:e.groupTag!==void 0?{scope:"tag",targetSet:Ae(me(e.groupTag))}:{scope:"unscoped",targetSet:[]}:{scope:"unscoped",targetSet:[]},W="#",he=e=>{let t=e.indexOf(W);return t===-1?{owner:null,tail:e}:{owner:e.slice(0,t),tail:e.slice(t+1)}},be=(e,t)=>{let{owner:n}=he(e);return t===void 0?n===null:n===t},X=e=>({actor:e.actor,groupByTag:new Map(e.groupByTag)}),Ge=(e,t)=>{let n=X(e);n.actor=Math.max(n.actor,t.actor);for(let[r,o]of t.groupByTag)n.groupByTag.set(r,Math.max(n.groupByTag.get(r)??0,o));return n},ve=e=>{let t=e.lastIndexOf("/");if(t<0)return null;let n=Number(e.slice(t+1));return Number.isInteger(n)&&n>=0?n:null},Ke=(e,t,n,r)=>{if(be(t,r)){let o=ve(he(t).tail);o!==null&&(e.actor=Math.max(e.actor,o+1))}if(be(n,r)){let o=he(n).tail,a=ve(o);if(a===null)return;let s=o.slice(0,o.lastIndexOf("/"));e.groupByTag.set(s,Math.max(e.groupByTag.get(s)??0,a+1))}};var q=(e,t={})=>{let n=re(e);return{config:e.config,transition:(r,o)=>{if(n&&!t.allowActorTemplate)throw new I("LITE_FSM_STANDALONE_ACTOR_TEMPLATE","[lite-fsm] actor templates can only be used inside MachineManager.");let a=e.config,s=ae(a,r.state,o.type,n);if(s===void 0)return r;if(e.reducer){let d=s||r.state,S=e.reducer(r,o,{nextState:d,config:e.config});if(S===void 0){if(t.allowVoidReducer?.())return r;throw new Error(Z)}return S}let c="payload"in o?o.payload:{};return{state:s||r.state,context:{...r.context,...c}}},invokeEffect:async(r,o,a)=>{if(!e.effects)return;let s=e.effects,c=r!==o&&s[o]||s[Pe];c&&await c(a)}}},Yt=(e,t={})=>{let n,r=[],o=!1,a=y=>{o=!!y?.some(ne)},s=q(e,{allowVoidReducer:()=>o}),c=[],d={context:e.initialContext,state:e.initialState};L&&K(d);let S=(y,M)=>s.transition(y,M),m=y=>{S=y(S)},R=y=>new Promise((M,w)=>{let D=A((G,b,v)=>{try{y(v)&&(D(),M(!0))}catch(O){D(),w(O)}})}),u=(y,M,w)=>{s.invokeEffect(y.state,M.state,{...t.dependencies,transition:n,action:w,condition:R}).catch(D=>{t?.onError?.(D)})},A=y=>(c.push(y),()=>{c=c.filter(M=>M!==y)}),P=(y,M,w)=>{c.forEach(D=>D(y,M,w))},g=y=>{let M=d,w=S(M,y);if(w===void 0)throw new Error(Z);return d=w,L&&K(d),P(M,d,y),y},l=y=>{if(a(y),!y?.length)return g;let M=y.map(w=>w({getState:E,transition:D=>n(D),replaceReducer:m,onTransition:A,condition:R}));return ee(...M)(g)},h=l(r);n=y=>{let M=d,w=h(y);return u(M,d,w),w};let E=()=>d;return{transition:n,getState:E,onTransition:A,addMiddleware:(...y)=>{r=[...r,...y],h=l(r)}}},He=(e={})=>({create:t=>Yt(t,e)});var je=e=>{let{sidecar:t,machines:n,domainKeys:r,refs:o,onTransition:a,onError:s}=e,c=(g,l,h)=>{t.actorById.get(g)?.bag.set(l,h)},d=(g,l)=>{t.actorById.get(g)?.bag.delete(l)},S=(g,l)=>new Promise((h,E)=>{let x=()=>l!==void 0&&!t.actorById.has(l.actorId),y=()=>new I("LITE_FSM_ACTOR_DISPOSED","Actor was disposed before condition resolved.");if(x())return E(y());let M,w=()=>{D(),l&&M&&d(l.actorId,M)},D=a((G,b,v)=>{if(!oe(v)){if(x())return D();try{if(!g(v))return;if(x())return D();w(),h(!0)}catch(O){w(),E(O)}}});l&&(M=Symbol("condition"),c(l.actorId,M,()=>{D(),E(y())}))}),m=g=>S(g),R=g=>{let l=(h=>o.transition(h,{sender:g}));return l.unscoped=h=>o.transition(h,{sender:g,routingMode:"unscoped"}),l.actor=(h,E)=>o.transition({...E,meta:{actorId:h}},{sender:g}),l.group=(h,E)=>o.transition({...E,meta:{groupId:h}},{sender:g}),l.tag=(h,E)=>o.transition({...E,meta:{groupTag:h}},{sender:g}),l},u=(g,l,h)=>{let E=x=>o.transition(x);for(let x of r){let y=n[x],M=g[x],w=l[x];y.invokeEffect(M.state,w.state,{...o.userDeps,transition:E,action:h,condition:m}).catch(D=>s?.(D))}},A=(g,l,h,E)=>{for(let x of E){let{actorId:y,groupId:M,groupTag:w}=x.meta,D=n[x.templateKey],G=g[x.templateKey],b=l[x.templateKey],v=G?.[y],O=b?.[y];if(!O)continue;let Y={actorId:y,groupId:M,groupTag:w};D.invokeEffect(v?.state??"__INIT",O.state,{...o.userDeps,transition:R(Y),action:h,condition:U=>S(U,Y),self:Y,[Q]:c}).catch(U=>s?.(U))}};return{condition:m,invokeEffects:(g,l,h,E)=>{u(g,l,h),A(g,l,h,E)}}};var $e=(e,t)=>({normalizeOpts:e,countersBase:t,pendingSpawned:[],pendingDelivered:[],pendingDeleted:[],touchedActorRecords:new Map,effectsTargets:[]}),ze=e=>(e.countersDraft||(e.countersDraft=X(e.countersBase)),e.countersDraft),We=(e,t,n)=>e?`${e}${W}${t}/${n}`:`${t}/${n}`,Ye=(e,t,n,r,o)=>{let a=ze(e),s=a.groupByTag.get(t)??0;a.groupByTag.set(t,s+1);let c=r.generateGroupId?Se(r.generateGroupId({templateKey:t,groupTag:t,counter:s,originId:r.originId,action:n}),"group"):We(r.originId,t,s);if(o(c))throw new I("LITE_FSM_INVALID_GENERATED_ID",`[lite-fsm] groupId '${c}' is already in use.`);return c},Ue=(e,t,n,r,o,a)=>{let s=ze(e),c=s.actor;s.actor=c+1;let d=o.generateActorId?Se(o.generateActorId({templateKey:t,groupTag:n,counter:c,originId:o.originId,action:r}),"actor"):We(o.originId,t,c);if(a(d))throw new I("LITE_FSM_INVALID_GENERATED_ID",`[lite-fsm] actorId '${d}' is already in use.`);return d},se=(e,t,n)=>{let r=e.touchedActorRecords.get(n);if(r)return{root:t,record:r};let o=t[n],a=o===j?{}:{...o},s={...t,[n]:a};return e.touchedActorRecords.set(n,a),{root:s,record:a}};var Ut=e=>{if(!N(e))throw new I("LITE_FSM_INVALID_HYDRATION_ENVELOPE","[lite-fsm] hydrate: snapshot must be an object envelope.");if(!N(e.machines))throw new I("LITE_FSM_INVALID_HYDRATION_ENVELOPE","[lite-fsm] hydrate: snapshot.machines must be an object.");return{schemaVersion:typeof e.schemaVersion=="number"?e.schemaVersion:void 0,machines:e.machines}},Re=e=>({state:e.state,context:e.context}),Zt=e=>N(e)&&V(e,"snapshot")?{snapshot:e.snapshot,meta:e.meta}:{snapshot:e},Ze=(e,t)=>N(e)?{...e,meta:t}:e,Xt=(e,t,n)=>e&&N(t)&&t.state===e.state&&t.context===e.context?e:Ze(t,n),qt=(e,t,n,r,o)=>{if(!N(n))throw new I("LITE_FSM_INVALID_ACTOR_SLICE",`Invalid actor record '${t}'.`);let a=e[t],c=o.config[t].hydrate,d=r==="replace"?{}:{...a},S=!1;for(let[m,R]of Object.entries(n)){let u=a[m],A=Zt(R),P=c?c(u?Re(u):void 0,A.snapshot,{strategy:r}):A.snapshot,g=Xt(u,P,u?.meta??A.meta);a[m]!==g&&(S=!0),d[m]=g}if(r==="replace"&&!S){for(let m of Object.keys(a))if(!(m in d)){S=!0;break}}return{record:S?d:a,changed:S}},ie=(e,t,n,r,o,a="commit")=>{let s=Ut(t);a==="commit"&&s.schemaVersion!==o.schemaVersion&&o.onSchemaVersionMismatch?.(s.schemaVersion,o.schemaVersion);let c,d=[];for(let S of Object.keys(s.machines)){if(!V(o.config,S)){a==="commit"&&(L&&console.warn(`[lite-fsm] hydrate: unknown machine key '${S}', skipped.`),o.onUnknownMachineKey?.(S,r));continue}let m=S;if(o.runtimeActorTemplateKeys.includes(m)){L&&console.warn(`[lite-fsm] hydrate: runtime actor template '${m}' was skipped \u2014 runtime actor templates do not participate in hydrate/dehydrate.`);continue}if(o.snapshotActorTemplateKeys.includes(m)){let g=qt(e,m,s.machines[S],n,o);if(!g.changed)continue;c=c??{...e},c[m]=g.record,d.push(m);continue}let R=e[m],u=s.machines[S],A=o.config[m].hydrate,P=A?A(R,u,{strategy:n}):u;P!==R&&(c=c??{...e},c[m]=P)}return{nextState:c??e,changedActorTemplateKeys:d}},Xe=(e,t,n,r,o,a,s,c)=>{let d=c?.machines;if(d)for(let u of d){if(!V(t,u))throw new I("LITE_FSM_INVALID_HYDRATION_ENVELOPE",`[lite-fsm] dehydrate: unknown machine key '${u}'.`);if(o.includes(u))throw new I("LITE_FSM_INVALID_HYDRATION_ENVELOPE",`[lite-fsm] dehydrate: runtime actor template '${u}' cannot be dehydrated.`)}let S=u=>{let A=e[u];if(!N(A))throw new I("LITE_FSM_INVALID_ACTOR_SLICE",`Invalid actor record '${u}'.`);let g=t[u].dehydrate,l={};for(let[h,E]of Object.entries(A)){let x=n.actorById.get(h);if(!x)throw new I("LITE_FSM_INVALID_ACTOR_SLICE",`Actor '${h}' has no runtime identity.`);l[h]={snapshot:g?g(Re(E)):Re(E),meta:x.meta}}return l},m=d??[...a,...r],R={};for(let u of m){if(r.includes(u)){R[u]=S(u);continue}let P=t[u].dehydrate;R[u]=P?P(e[u]):e[u]}return{schemaVersion:s,machines:R}};var qe=(e,t,n)=>{let r=new Map,o=[];for(let s of e){let c=!1;for(let[d,S]of Object.entries(t(s)))if(!(!S||!n(d)))for(let m of Object.keys(S)){c=!0;let R=r.get(m);R||r.set(m,R=new Set),R.add(s)}c||o.push(s)}let a=new Map;for(let[s,c]of r)a.set(s,[...c]);return{index:a,keysWithoutEdges:o}},Jt=(e,t,n)=>{let r=new Map;for(let o of e){let a=n(o);for(let s of Object.keys(t(o).__INIT??{})){let c=r.get(s);c||r.set(s,c=new Map);let d=c.get(a);d||c.set(a,d=[]),d.push(o)}}return r},Je=(e,t,n,r)=>{let o=d=>e[d].config,a=qe(n,o,()=>!0),s=qe(t,o,d=>d!=="__INIT"),c=Jt(t,o,r);return{domainReduceIndex:a.index,domainAlwaysReduce:a.keysWithoutEdges,actorReduceIndex:s.index,actorSpawnIndex:c}},Qe=e=>{let t=s=>e[s],n=s=>t(s).config;return{groupTagForTemplate:s=>t(s).groupTag??s,hasActorTransition:(s,c,d)=>ae(n(s),c,d.type,!0)!==void 0,isPublicActorState:(s,c)=>c==="__INIT"||H(c)?!1:V(t(s).config,c)}};var ce=Symbol.for("lite-fsm.normalize-drop"),et=e=>{if(oe(e))throw new Error(`[lite-fsm] reserved system action '${e.type}' cannot be dispatched.`)},tt=e=>{let{sidecar:t}=e,n=(o,{sender:a,routingMode:s="default"}={})=>{if(!a&&s==="default"&&!("meta"in o))return o;if(a&&!t.actorById.has(a.actorId))return ce;let c=Be(o.meta);return a&&(c.senderActorId=a.actorId,c.senderGroupId=a.groupId,c.senderGroupTag=a.groupTag),s==="unscoped"?Ie(o,Fe(c)):(a&&c.actorId===void 0&&c.groupId===void 0&&c.groupTag===void 0&&(c.groupId=a.groupId,c.groupTag=a.groupTag),Ie(o,c))};return{normalizeAction:n,applyPostNormalize:(o,a)=>{let s=n(a,o.normalizeOpts);s!==ce&&(o.committed=s)}}};var Qt=(e,t)=>{let n=[];for(let r of t){let o=e.groupIdsByTag.get(r);if(o)for(let a of o)n.push(a)}return n},en=e=>{let t=new Map;for(let n of e){let r=t.get(n.templateKey);r?r.push(n):t.set(n.templateKey,[n])}return t},nt=(e,t,n,r)=>{if(n===null){for(let o of e.actorIdsByTemplate.get(t)??[])r(o);return}for(let o of n){let a=e.groupById.get(o)?.actorIdsByTemplate.get(t);if(a)for(let s of a)r(s)}},ot=e=>{let{sidecar:t,actorTemplateKeys:n,actorSpawnIndex:r,actorReduceIndex:o,spawnIdConfig:a}=e;return{resolveSpawnGroups:(d,S,m,R)=>{if(d==="group"){let g=[];for(let l of S){let h=t.groupById.get(l);h&&g.push({groupId:l,groupTag:h.groupTag})}return g}if(d==="tag"){let g=[];for(let l of S)for(let h of t.groupIdsByTag.get(l)??[])g.push({groupId:h,groupTag:l});return g}let u=[],A=new Set,P=g=>t.groupById.has(g)||A.has(g);for(let g of r.get(R.type)?.keys()??[]){let l=Ye(m,g,R,a,P);A.add(l),u.push({groupId:l,groupTag:g})}return u},forEachRoutedIdentity:(d,S,m,R,u)=>{if(d==="actor"){for(let x of S){let y=t.actorById.get(x);y&&u(y)}return}let A=d==="group"?S:d==="tag"?Qt(t,S):null;if(m.length===0){for(let x of o.get(R.type)??[])nt(t,x,A,y=>{let M=t.actorById.get(y);M&&u(M)});return}let P=new Set(o.get(R.type)??[]),g=en(m),l=new Set(S),h=x=>d==="unscoped"?!0:d==="group"?l.has(x.meta.groupId):l.has(x.meta.groupTag),E=new Set;for(let x of n){P.has(x)&&nt(t,x,A,y=>{if(E.has(y))return;let M=t.actorById.get(y);M&&(E.add(y),u(M))});for(let y of g.get(x)??[]){let M=y.meta.actorId;E.has(M)||h(y)&&(E.add(M),u(y))}}}}};var st=()=>({actorById:new Map,groupById:new Map,groupIdsByTag:new Map,actorIdsByTemplate:new Map,counters:{actor:0,groupByTag:new Map}}),tn=()=>({groupById:new Map,groupIdsByTag:new Map,actorIdsByTemplate:new Map}),rt=(e,t,n)=>{let r=e.get(t);r||(r=new Set,e.set(t,r)),r.add(n)},at=(e,t,n)=>{let r=e.get(t);r?.delete(n),r?.size===0&&e.delete(t)},it=(e,t)=>{let{actorId:n,groupId:r,groupTag:o}=t.meta,a=e.groupById.get(r);a||(a={groupTag:o,actorIds:new Set,actorIdsByTemplate:new Map},e.groupById.set(r,a)),a.actorIds.add(n),rt(a.actorIdsByTemplate,t.templateKey,n),rt(e.actorIdsByTemplate,t.templateKey,n);let s=e.groupIdsByTag.get(o);s||(s=new Set,e.groupIdsByTag.set(o,s)),s.add(r)},nn=(e,t)=>{let{actorId:n,groupId:r,groupTag:o}=t.meta;at(e.actorIdsByTemplate,t.templateKey,n);let a=e.groupById.get(r);if(!a||(a.actorIds.delete(n),at(a.actorIdsByTemplate,t.templateKey,n),a.actorIds.size>0))return;e.groupById.delete(r);let s=e.groupIdsByTag.get(o);s?.delete(r),s?.size===0&&e.groupIdsByTag.delete(o)},ct=e=>{for(let t of e.bag.values())t();e.bag.clear()},on=(e,t,n,r,o)=>{if(r.length===0)throw new I("LITE_FSM_INVALID_ACTOR_SLICE",`Actor id for template '${n}' must be non-empty.`);if(!ke(o)||!t.isPublicActorState(n,o.state))throw new I("LITE_FSM_INVALID_ACTOR_SLICE",`Invalid actor slice '${n}.${r}'.`);let a=e.actorById.get(r);if(a){if(a.templateKey!==n)throw new I("LITE_FSM_INVALID_ACTOR_SLICE",`Actor '${r}' cannot move between actor template records.`);return{identity:a,isNew:!1}}let s=o.meta;if(!N(s))throw new I("LITE_FSM_INVALID_ACTOR_SLICE",`Actor '${r}' cannot be created by state replacement without actor meta.`);let{groupId:c,groupTag:d}=s;if(s.actorId!==r||typeof d!="string"||d!==t.groupTagForTemplate(n)||typeof c!="string"||c.length===0)throw new I("LITE_FSM_INVALID_ACTOR_SLICE",`Actor '${r}' has invalid actor meta.`);return{identity:{templateKey:n,meta:z({actorId:r,groupId:c,groupTag:d})},isNew:!0}},rn=e=>{let t=tn();for(let n of e.values())it(t,n);return t},dt=(e,t,n,r)=>{let o=new Set,a=new Map,s=new Map(e.actorById),c=new Map,d=[];for(let u of n){let A=r[u];if(!N(A))throw new I("LITE_FSM_INVALID_ACTOR_SLICE",`Invalid actor record '${u}'.`);let P={};for(let[g,l]of Object.entries(A)){if(o.has(g))throw new I("LITE_FSM_INVALID_ACTOR_SLICE",`Duplicate actorId '${g}'.`);o.add(g);let{identity:h,isNew:E}=on(e,t,u,g,l);P[g]={...l,meta:h.meta},E&&a.set(g,h)}c.set(u,P)}for(let[u,A]of a)s.set(u,{...A,bag:new Map});let S=new Set(n);for(let[u,A]of s)S.has(A.templateKey)&&(o.has(u)||(d.push(A),s.delete(u)));let m=rn(s),R=X(e.counters);for(let[u,A]of a)Ke(R,u,A.meta.groupId,t.originId);return{nextActorById:s,nextGroupById:m.groupById,nextGroupIdsByTag:m.groupIdsByTag,nextActorIdsByTemplate:m.actorIdsByTemplate,nextCounters:R,canonicalActorRecords:c,actorsToCleanup:d,touchedTemplateKeys:n}},an=(e,t)=>{e.actorById=t.nextActorById,e.groupById=t.nextGroupById,e.groupIdsByTag=t.nextGroupIdsByTag,e.actorIdsByTemplate=t.nextActorIdsByTemplate,e.counters=t.nextCounters;for(let n of t.actorsToCleanup)ct(n)},sn=(e,t)=>{let n=new Set(t.pendingDeleted.map(r=>r.meta.actorId));for(let r of t.pendingSpawned){if(n.has(r.meta.actorId))continue;let o={...r,bag:new Map};e.actorById.set(r.meta.actorId,o),it(e,o)}for(let r of t.pendingDeleted){let o=e.actorById.get(r.meta.actorId);o&&(e.actorById.delete(r.meta.actorId),nn(e,o),ct(o))}},pt=(e,t)=>{let n=e;for(let r of t){let o=n[r];o&&o!==j&&Object.keys(o).length===0&&(n={...n,[r]:j})}return n},ut=(e,t,n)=>(t.countersDraft&&(e.counters=Ge(e.counters,t.countersDraft)),sn(e,t),pt(n,t.touchedActorRecords.keys())),gt=(e,t,n)=>{for(let[r,o]of t.canonicalActorRecords)n={...n,[r]:o};return an(e,t),pt(n,t.touchedTemplateKeys)},Te=(e,t)=>{let n=[];for(let r of t){let o=e.actorById.get(r.meta.actorId);o&&n.push(o)}return n};var ft=(e,t)=>{let n=t?.originId;if(n!==void 0&&(n.length===0||n.includes(W)))throw new I("LITE_FSM_INVALID_OPTIONS",`[lite-fsm] originId must be a non-empty string without '${W}'.`);let r={originId:n,generateActorId:t?.generateActorId,generateGroupId:t?.generateGroupId},o=Object.keys(e),a=[],s=[];for(let i of o)re(e[i])?a.push(i):s.push(i);for(let i of a)Oe(i,e[i]);for(let i of s)if(V(e[i],"persistence"))throw new I("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] domain machine '${i}' cannot define actor persistence.`);let c=[],d=[];for(let i of a)e[i].persistence==="snapshot"?c.push(i):d.push(i);let S=!!t?.middleware?.some(ne),m=t?.schemaVersion,{groupTagForTemplate:R,hasActorTransition:u,isPublicActorState:A}=Qe(e),{domainReduceIndex:P,domainAlwaysReduce:g,actorReduceIndex:l,actorSpawnIndex:h}=Je(e,a,s,R),E=i=>!!e[i].effects,x=s.filter(E),y=a.some(E),M=x.length>0||y;if(L)for(let i of s)e[i].groupTag&&console.warn(`[lite-fsm] groupTag on domain machine '${i}' is ignored.`);let w=Object.fromEntries(o.map(i=>[i,q(e[i],{allowActorTemplate:!0,allowVoidReducer:()=>S})])),D={transition:void 0,userDeps:{}},G=[],b=Object.fromEntries(o.map(i=>[i,a.includes(i)?j:{state:e[i].initialState,context:e[i].initialContext}])),v=st(),O=null,{normalizeAction:Y,applyPostNormalize:U}=tt({sidecar:v}),{resolveSpawnGroups:lt,forEachRoutedIdentity:St}=ot({sidecar:v,actorTemplateKeys:a,actorSpawnIndex:h,actorReduceIndex:l,spawnIdConfig:r}),mt=(i,f)=>{let p=i,T=C=>{let _=w[C],k=i[C],B=_.transition(k,f);B!==k&&(p=p===i?{...i}:p,p[C]=B)};for(let C of g)T(C);for(let C of P.get(f.type)??[])T(C);return p},At=(i,f,p,T,C)=>{let _=f,k=h.get(p.type);if(!k)return _;let B=F=>v.actorById.has(F)||i.pendingSpawned.some($=>$.meta.actorId===F);for(let F of lt(T,C,i,p))for(let $ of k.get(F.groupTag)??[]){let kt=e[$],Nt=z({actorId:Ue(i,$,F.groupTag,p,r,B),groupId:F.groupId,groupTag:F.groupTag}),ye={templateKey:$,meta:Nt},Ot={state:"__INIT",context:{...kt.initialContext},meta:ye.meta},De=se(i,_,$);De.record[ye.meta.actorId]=Ot,_=De.root,i.pendingSpawned.push(ye)}return _},ht=(i,f,p,T)=>{let _=f[p.templateKey]?.[p.meta.actorId];if(!_||!u(p.templateKey,_.state,T))return{root:f,delivered:!1};let k=se(i,f,p.templateKey),F=w[p.templateKey].transition(_,T);return L&&Ne(p.meta.actorId,p.templateKey,F.state,A),k.record[p.meta.actorId]={...F,meta:p.meta},{root:k.root,delivered:!0}},It=(i,f)=>{let p=f,T=new Set;for(let C of[...i.pendingSpawned,...i.pendingDelivered]){if(T.has(C.meta.actorId))continue;T.add(C.meta.actorId);let k=p[C.templateKey]?.[C.meta.actorId];if(!k||!H(k.state))continue;let B=se(i,p,C.templateKey);delete B.record[C.meta.actorId],p=B.root,i.pendingDeleted.push(C)}return p},de=(i,f)=>{let p=O,{scope:T,targetSet:C}=Ve(f.meta),_=mt(i,f);return T!=="actor"&&(_=At(p,_,f,T,C)),St(T,C,p.pendingSpawned,f,k=>{let B=ht(p,_,k,f);_=B.root,B.delivered&&p.pendingDelivered.push(k)}),It(p,_)},Me=i=>{de=i(de)},Rt={actorTemplateKeys:a,groupTagForTemplate:R,isPublicActorState:A,originId:n},Tt=i=>{let f=[],p=new Set,T=C=>{for(let _ of C){let k=_.meta.actorId;p.has(k)||(p.add(k),f.push(_))}};T(Te(v,i.pendingSpawned)),T(Te(v,i.pendingDelivered)),i.effectsTargets=f},Mt=(i,f,p)=>a.filter(T=>i[T]===f[T]?!1:p.touchedActorRecords.get(T)!==f[T]),pe=(i,f)=>{if(f.length===0)return i;let p=dt(v,Rt,f,i);return gt(v,p,i)},Ct=(i,f,p)=>{let T=Mt(f,p,i),C=pe(p,T);return ut(v,i,C)},ue=i=>(G.push(i),()=>{G=G.filter(f=>f!==i)}),Ce=(i,f,p)=>{for(let T of G)T(i,f,p)},{condition:xt,invokeEffects:Et}=je({sidecar:v,machines:w,domainKeys:x,refs:D,onTransition:ue,onError:t?.onError}),xe=()=>b,wt=()=>({schemaVersion:m,machines:{...b}}),ge={config:e,snapshotActorTemplateKeys:c,runtimeActorTemplateKeys:d,schemaVersion:m,groupTagForTemplate:R,onSchemaVersionMismatch:t?.onSchemaVersionMismatch,onUnknownMachineKey:t?.onUnknownMachineKey},Dt=(i,{strategy:f="merge",baseState:p=b}={})=>ie(p,i,f,"hydrate",ge,"preview").nextState,Ee=t?.snapshot;if(Ee){let i=ie(b,Ee,"replace","opts.snapshot",ge);b=pe(i.nextState,i.changedActorTemplateKeys)}L&&K(b);let _t=(i,{strategy:f="merge"}={})=>{let p=b,T=ie(p,i,f,"hydrate",ge),C=T.nextState;C!==p&&(b=pe(C,T.changedActorTemplateKeys),L&&K(b),Ce(p,b,{type:te,payload:{strategy:f,snapshot:i}}))},Pt=(i=>Xe(b,e,v,c,d,s,m,i)),we=i=>{let f=O;if(f.committed)throw new Error("[lite-fsm] middleware called next() more than once for a single transition.");let p=b;if(U(f,i),!f.committed)return i;f.committedPrevState=p;let T=de(p,f.committed);if(T===void 0)throw new Error(Z);return b=Ct(f,p,T),y&&Tt(f),L&&K(b),Ce(p,b,f.committed),f.committed},bt=(()=>{let i=t?.middleware;if(!i?.length)return we;let f={getState:xe,transition:T=>fe(T),replaceReducer:Me,onTransition:ue,condition:xt},p=i.map(T=>T(f));return ee(...p)(we)})();function fe(i,f={}){et(i);let p=Y(i,f);if(p===ce)return i;let T=O,C=$e(f,v.counters);O=C;let _;try{_=bt(p)}finally{O=T}return C.committed?(M&&Et(C.committedPrevState,b,C.committed,C.effectsTargets),C.committed):_}let vt=i=>{let f=D.userDeps,p=typeof i=="function"?i(f):i;D.userDeps=p};return D.transition=fe,{getState:xe,getSnapshot:wt,getHydratedState:Dt,hydrate:_t,dehydrate:Pt,transition:fe,setDependencies:vt,onTransition:ue,replaceReducer:Me}};function yt(e){return e}var cn=e=>e,dn=e=>e,pn=Symbol.for("lite-fsm.owner.domain"),un=({type:e,effect:t,cancelFn:n})=>{let r=new Map;return o=>{let a=o,s=a.self?.actorId??pn,c=r.get(s)??{lastId:0};c.lastId+=1,c.cancel=n?.(o),r.set(s,c);let d=c.lastId;a.self&&!c.dispose&&(c.dispose=()=>r.delete(s),a[Q]?.(a.self.actorId,Symbol("createEffect"),c.dispose));let S=()=>e==="latest"&&d!==r.get(s)?.lastId?!1:!c.cancel?.(),m=Object.assign(R=>S()?o.transition(R):R,o.transition);if(a.self){let R=o.transition;m.unscoped=u=>S()?R.unscoped(u):u,m.actor=(u,A)=>S()?R.actor(u,A):A,m.group=(u,A)=>S()?R.group(u,A):A,m.tag=(u,A)=>S()?R.tag(u,A):A}return t({...o,transition:m})}},gn=e=>un(e);0&&(module.exports={HYDRATE_ACTION_TYPE,LiteFsmError,Machine,MachineManager,VOID_REDUCER_MIDDLEWARE_MARKER,createActorMeta,createConfig,createEffect,createMachine,createReducer,defineMachine});
|
|
1
|
+
"use strict";var ke=Object.defineProperty;var Zn=Object.getOwnPropertyDescriptor;var eo=Object.getOwnPropertyNames;var to=Object.prototype.hasOwnProperty;var no=(e,t,n)=>t in e?ke(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var oo=(e,t)=>{for(var n in t)ke(e,n,{get:t[n],enumerable:!0})},ro=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of eo(t))!to.call(e,r)&&r!==n&&ke(e,r,{get:()=>t[r],enumerable:!(o=Zn(t,r))||o.enumerable});return e};var ao=e=>ro(ke({},"__esModule",{value:!0}),e);var lt=(e,t,n)=>no(e,typeof t!="symbol"?t+"":t,n);var dr={};oo(dr,{HYDRATE_ACTION_TYPE:()=>De,LiteFsmError:()=>f,Machine:()=>xe,MachineManager:()=>Yn,VOID_REDUCER_MIDDLEWARE_MARKER:()=>je,createActorMeta:()=>me,createConfig:()=>ar,createEffect:()=>cr,createMachine:()=>Wn,createReducer:()=>rr,defineMachine:()=>At,definePlugin:()=>Pn,defineStorageRuntime:()=>An});module.exports=ao(dr);var Pe=Symbol.for("lite-fsm.registerBagDispose");function Ce(...e){return e.length===0?t=>t:e.reduce((t,n)=>(...o)=>t(n(...o)))}var gt="*",io="@@lite-fsm/",De="@@lite-fsm/HYDRATE",je="__liteFsmAllowVoidReducer",he="Reducer returned undefined. Return the next state, or use immerMiddleware to mutate draft state without return.",we=e=>typeof e=="function"&&je in e,f=class extends Error{constructor(n,o){super(o);lt(this,"code",n);this.name="LiteFsmError"}},Ue=(e,t)=>{if(typeof e!="string"||e.length===0)throw new f("LITE_FSM_INVALID_GENERATED_ID",`[lite-fsm] generate${t==="actor"?"Actor":"Group"}Id must return a non-empty string.`);return e},ye=e=>typeof e.type=="string"&&e.type.startsWith(io),G=globalThis.process?.env?.NODE_ENV!=="production",Q=e=>{if(e===null||typeof e!="object"||Object.isFrozen(e))return e;Object.freeze(e);for(let t of Object.keys(e))Q(Reflect.get(e,t));return e};var ue=Object.freeze({}),so=new Set(["__RESOLVED","__REJECTED","__CANCELLED"]);var Z=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),j=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),de=e=>typeof e=="string"&&so.has(e),St=e=>j(e)&&typeof e.state=="string"&&j(e.context),me=e=>Object.freeze({actorId:e.actorId,groupId:e.groupId,groupTag:e.groupTag}),Ee=e=>Z(e.config,"__INIT"),_e=(e,t,n,o)=>{let r=e[t]?.[n];if(r!==void 0)return r;if(!(o&&t==="__INIT"))return e["*"]?.[n]},ft=(e,t,n,o)=>{if(n==="__INIT")throw new f("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor '${e}' remained in __INIT after spawn.`);if(!de(n)&&!o(t,n))throw new f("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor '${e}' has invalid state.`)},Rt=(e,t)=>{if(t.initialState!=="__INIT")throw new f("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor template '${e}' must use __INIT as initialState.`);if(t.persistence!==void 0&&t.persistence!=="runtime"&&t.persistence!=="snapshot")throw new f("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor template '${e}' has invalid persistence mode.`);if(t.persistence!=="snapshot"&&(t.hydrate||t.dehydrate))throw new f("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor template '${e}' cannot define hydrate/dehydrate hooks without snapshot persistence.`);let n=t.config;for(let o of Object.keys(n)){if(de(o)||o.startsWith("__")&&o!=="__INIT")throw new f("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor template '${e}' has reserved state '${o}'.`);for(let r of Object.values(n[o])){if(o==="__INIT"&&r===null)throw new f("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor template '${e}' cannot spawn with a null __INIT target.`);if(r==="__INIT"||typeof r=="string"&&r.startsWith("__")&&!de(r))throw new f("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor template '${e}' has invalid target '${String(r)}'.`)}}};var Ye=(e,t)=>{if(Object.keys(t).length===0){let{meta:n,...o}=e;return o}return{...e,meta:t}},Se="#",qe=e=>{let t=e.indexOf(Se);return t===-1?{owner:null,tail:e}:{owner:e.slice(0,t),tail:e.slice(t+1)}},yt=(e,t)=>{let{owner:n}=qe(e);return t===void 0?n===null:n===t},Ae=e=>({actor:e.actor,groupByTag:new Map(e.groupByTag)}),ht=(e,t)=>{let n=Ae(e);n.actor=Math.max(n.actor,t.actor);for(let[o,r]of t.groupByTag)n.groupByTag.set(o,Math.max(n.groupByTag.get(o)??0,r));return n},mt=e=>{let t=e.lastIndexOf("/");if(t<0)return null;let n=Number(e.slice(t+1));return Number.isInteger(n)&&n>=0?n:null},Et=(e,t,n,o)=>{if(yt(t,o)){let r=mt(qe(t).tail);r!==null&&(e.actor=Math.max(e.actor,r+1))}if(yt(n,o)){let r=qe(n).tail,s=mt(r);if(s===null)return;let a=r.slice(0,r.lastIndexOf("/"));e.groupByTag.set(a,Math.max(e.groupByTag.get(a)??0,s+1))}};var xe=(e,t={})=>{if(e.storage!==void 0&&e.storage!=="instance")throw new f("LITE_FSM_UNKNOWN_STORAGE_KIND","[lite-fsm] standalone Machine supports only storage kind 'instance'.");let n=Ee(e);return{config:e.config,transition:(o,r)=>{if(n&&!t.allowActorTemplate)throw new f("LITE_FSM_STANDALONE_ACTOR_TEMPLATE","[lite-fsm] actor templates can only be used inside MachineManager.");let s=e.config,a=_e(s,o.state,r.type,n);if(a===void 0)return o;if(e.reducer){let i=a||o.state,u=e.reducer(o,r,{nextState:i,config:e.config});if(u===void 0){if(t.allowVoidReducer?.())return o;throw new Error(he)}return u}let c="payload"in r?r.payload:{};return{state:a||o.state,context:{...o.context,...c}}},invokeEffect:async(o,r,s)=>{if(!e.effects)return;let a=e.effects,c=o!==r&&a[r]||a[gt];c&&await c(s)}}},co=(e,t={})=>{let n,o=[],r=!1,s=m=>{r=!!m?.some(we)},a=xe(e,{allowVoidReducer:()=>r}),c=[],i={context:e.initialContext,state:e.initialState};G&&Q(i);let u=(m,I)=>a.transition(m,I),l=m=>{u=m(u)},p=m=>new Promise((I,P)=>{let C=y((F,N,H)=>{try{m(H)&&(C(),I(!0))}catch(b){C(),P(b)}})}),d=(m,I,P)=>{a.invokeEffect(m.state,I.state,{...t.dependencies,transition:n,action:P,condition:p}).catch(C=>{t?.onError?.(C)})},y=m=>(c.push(m),()=>{c=c.filter(I=>I!==m)}),k=(m,I,P)=>{c.forEach(C=>C(m,I,P))},v=m=>{let I=i,P=u(I,m);if(P===void 0)throw new Error(he);return i=P,G&&Q(i),k(I,i,m),m},S=m=>{if(s(m),!m?.length)return v;let I=m.map(P=>P({getState:A,transition:C=>n(C),replaceReducer:l,onTransition:y,condition:p}));return Ce(...I)(v)},h=S(o);n=m=>{let I=i,P=h(m);return d(I,i,P),P};let A=()=>i;return{transition:n,getState:A,onTransition:y,addMiddleware:(...m)=>{o=[...o,...m],h=S(o)}}},At=(e={})=>({create:t=>co(t,e)});var xt=e=>{let{sidecar:t,machines:n,domainKeys:o,refs:r,onTransition:s,createScopedDeps:a,onError:c}=e,i=(S,h,A)=>{t.actorById.get(S)?.bag.set(h,A)},u=(S,h)=>{t.actorById.get(S)?.bag.delete(h)},l=(S,h)=>new Promise((A,M)=>{let m=()=>h!==void 0&&!t.actorById.has(h.actorId),I=()=>new f("LITE_FSM_ACTOR_DISPOSED","Actor was disposed before condition resolved.");if(m())return M(I());let P,C=()=>{F(),h&&P&&u(h.actorId,P)},F=s((N,H,b)=>{if(!ye(b)){if(m())return F();try{if(!S(b))return;if(m())return F();C(),A(!0)}catch(ae){C(),M(ae)}}});h&&(P=Symbol("condition"),i(h.actorId,P,()=>{F(),M(I())}))}),p=S=>l(S),d=S=>{let h=(A=>r.transition(A,{sender:S}));return h.unscoped=A=>r.transition(A,{sender:S,routingMode:"unscoped"}),h.actor=(A,M)=>r.transition({...M,meta:{actorId:A}},{sender:S}),h.group=(A,M)=>r.transition({...M,meta:{groupId:A}},{sender:S}),h.tag=(A,M)=>r.transition({...M,meta:{groupTag:A}},{sender:S}),h},y=(S,h,A)=>{let M=m=>r.transition(m);for(let m of o){let I=n[m],P=S[m],C=h[m],F={...r.userDeps,transition:M,action:A,condition:p};I.invokeEffect(P.state,C.state,a(F,{source:{storage:"instance",template:m},event:A,indices:{},phase:"effect",transition:M})).catch(N=>c?.(N))}},k=(S,h,A,M)=>{for(let m of M){let{actorId:I,groupId:P,groupTag:C}=m.meta,F=n[m.templateKey],N=S[m.templateKey],H=h[m.templateKey],b=N?.[I],ae=H?.[I];if(!ae)continue;let U={actorId:I,groupId:P,groupTag:C},ie=d(U),pe={...r.userDeps,transition:ie,action:A,condition:ce=>l(ce,U),self:U,[Pe]:i};F.invokeEffect(b?.state??"__INIT",ae.state,a(pe,{source:{storage:"instance",template:m.templateKey},event:A,indices:{actorId:I,groupId:P,groupTag:C},phase:"effect",transition:ie})).catch(ce=>c?.(ce))}};return{condition:p,invokeEffects:(S,h,A,M)=>{y(S,h,A),k(S,h,A,M)}}};var We=(e,t)=>({normalizeOpts:e,countersBase:t,pendingSpawned:[],pendingDelivered:[],pendingDeleted:[],touchedActorRecords:new Map,effectsTargets:[]}),Mt=e=>(e.countersDraft||(e.countersDraft=Ae(e.countersBase)),e.countersDraft),It=(e,t,n)=>e?`${e}${Se}${t}/${n}`:`${t}/${n}`,Tt=(e,t,n,o,r)=>{let s=Mt(e),a=s.groupByTag.get(t)??0;s.groupByTag.set(t,a+1);let c=o.generateGroupId?Ue(o.generateGroupId({templateKey:t,groupTag:t,counter:a,originId:o.originId,action:n}),"group"):It(o.originId,t,a);if(r(c))throw new f("LITE_FSM_INVALID_GENERATED_ID",`[lite-fsm] groupId '${c}' is already in use.`);return c},vt=(e,t,n,o,r,s)=>{let a=Mt(e),c=a.actor;a.actor=c+1;let i=r.generateActorId?Ue(r.generateActorId({templateKey:t,groupTag:n,counter:c,originId:r.originId,action:o}),"actor"):It(r.originId,t,c);if(s(i))throw new f("LITE_FSM_INVALID_GENERATED_ID",`[lite-fsm] actorId '${i}' is already in use.`);return i},be=(e,t,n)=>{let o=e.touchedActorRecords.get(n);if(o)return{root:t,record:o};let r=t[n],s=r===ue?{}:{...r},a={...t,[n]:s};return e.touchedActorRecords.set(n,s),{root:a,record:s}};var Je=e=>{if(!j(e))throw new f("LITE_FSM_INVALID_HYDRATION_ENVELOPE","[lite-fsm] hydrate: snapshot must be an object envelope.");if(!j(e.machines))throw new f("LITE_FSM_INVALID_HYDRATION_ENVELOPE","[lite-fsm] hydrate: snapshot.machines must be an object.");if(Z(e,"storage")&&e.storage!==void 0&&!j(e.storage))throw new f("LITE_FSM_INVALID_HYDRATION_ENVELOPE","[lite-fsm] hydrate: snapshot.storage must be an object.");return{schemaVersion:typeof e.schemaVersion=="number"?e.schemaVersion:void 0,machines:e.machines,storage:e.storage}},Xe=e=>({state:e.state,context:e.context}),uo=e=>j(e)&&Z(e,"snapshot")?{snapshot:e.snapshot,meta:e.meta}:{snapshot:e},kt=(e,t)=>j(e)?{...e,meta:t}:e,po=(e,t,n)=>e&&j(t)&&t.state===e.state&&t.context===e.context?e:kt(t,n),lo=(e,t,n,o,r)=>{if(!j(n))throw new f("LITE_FSM_INVALID_ACTOR_SLICE",`Invalid actor record '${t}'.`);let s=e[t],c=r.config[t].hydrate,i=o==="replace"?{}:{...s},u=!1;for(let[l,p]of Object.entries(n)){let d=s[l],y=uo(p),k=c?c(d?Xe(d):void 0,y.snapshot,{strategy:o}):y.snapshot,v=po(d,k,d?.meta??y.meta);s[l]!==v&&(u=!0),i[l]=v}if(o==="replace"&&!u){for(let l of Object.keys(s))if(!(l in i)){u=!0;break}}return{record:u?i:s,changed:u}},Pt=(e,t,n,o,r,s="commit")=>{let a=Je(t);s==="commit"&&a.schemaVersion!==r.schemaVersion&&r.onSchemaVersionMismatch?.(a.schemaVersion,r.schemaVersion);let c,i=[];for(let u of Object.keys(a.machines)){if(!Z(r.config,u)){s==="commit"&&(G&&console.warn(`[lite-fsm] hydrate: unknown machine key '${u}', skipped.`),r.onUnknownMachineKey?.(u,o));continue}let l=u;if(r.runtimeActorTemplateKeys.includes(l)){G&&console.warn(`[lite-fsm] hydrate: runtime actor template '${l}' was skipped \u2014 runtime actor templates do not participate in hydrate/dehydrate.`);continue}if(r.snapshotActorTemplateKeys.includes(l)){let v=lo(e,l,a.machines[u],n,r);if(!v.changed)continue;c=c??{...e},c[l]=v.record,i.push(l);continue}let p=e[l],d=a.machines[u],y=r.config[l].hydrate,k=y?y(p,d,{strategy:n}):d;k!==p&&(c=c??{...e},c[l]=k)}return{nextState:c??e,changedActorTemplateKeys:i}},Ct=(e,t,n,o,r,s,a,c)=>{let i=c?.machines;if(i)for(let d of i){if(!Z(t,d))throw new f("LITE_FSM_INVALID_HYDRATION_ENVELOPE",`[lite-fsm] dehydrate: unknown machine key '${d}'.`);if(r.includes(d))throw new f("LITE_FSM_INVALID_HYDRATION_ENVELOPE",`[lite-fsm] dehydrate: runtime actor template '${d}' cannot be dehydrated.`)}let u=d=>{let y=e[d];if(!j(y))throw new f("LITE_FSM_INVALID_ACTOR_SLICE",`Invalid actor record '${d}'.`);let v=t[d].dehydrate,S={};for(let[h,A]of Object.entries(y)){let M=n.actorById.get(h);if(!M)throw new f("LITE_FSM_INVALID_ACTOR_SLICE",`Actor '${h}' has no runtime identity.`);S[h]={snapshot:v?v(Xe(A)):Xe(A),meta:M.meta}}return S},l=i??[...s,...o],p={};for(let d of l){if(o.includes(d)){p[d]=u(d);continue}let k=t[d].dehydrate;p[d]=k?k(e[d]):e[d]}return{schemaVersion:a,machines:p}};var Dt=(e,t,n)=>{let o=new Map,r=[];for(let a of e){let c=!1;for(let[i,u]of Object.entries(t(a)))if(!(!u||!n(i)))for(let l of Object.keys(u)){c=!0;let p=o.get(l);p||o.set(l,p=new Set),p.add(a)}c||r.push(a)}let s=new Map;for(let[a,c]of o)s.set(a,[...c]);return{index:s,keysWithoutEdges:r}},go=(e,t,n)=>{let o=new Map;for(let r of e){let s=n(r);for(let a of Object.keys(t(r).__INIT??{})){let c=o.get(a);c||o.set(a,c=new Map);let i=c.get(s);i||c.set(s,i=[]),i.push(r)}}return o},wt=(e,t,n,o)=>{let r=i=>e[i].config,s=Dt(n,r,()=>!0),a=Dt(t,r,i=>i!=="__INIT"),c=go(t,r,o);return{domainReduceIndex:s.index,domainAlwaysReduce:s.keysWithoutEdges,actorReduceIndex:a.index,actorSpawnIndex:c}},_t=e=>{let t=a=>e[a],n=a=>t(a).config;return{groupTagForTemplate:a=>t(a).groupTag??a,hasActorTransition:(a,c,i)=>_e(n(a),c,i.type,!0)!==void 0,isPublicActorState:(a,c)=>c==="__INIT"||de(c)?!1:Z(t(a).config,c)}};var bt=e=>{if(ye(e))throw new Error(`[lite-fsm] reserved system action '${e.type}' cannot be dispatched.`)},Nt=e=>{let{routing:t,sidecar:n}=e,o=(s,{sender:a,routingMode:c="default"}={})=>{if(!a&&c==="default"&&!("meta"in s))return{type:"continue",action:s};if(a&&!n.actorById.has(a.actorId))return{type:"drop"};let i=t.stripSenderFields(s.meta);if(a&&(i.senderActorId=a.actorId,i.senderGroupId=a.groupId,i.senderGroupTag=a.groupTag),c==="unscoped"){let l=Ye(s,t.stripRouting(i));return t.resolveRoute(l),{type:"continue",action:l}}a&&!t.hasRoute(i)&&(i.groupId=a.groupId);let u=Ye(s,i);return t.resolveRoute(u),{type:"continue",action:u}};return{normalizeAction:o,applyPostNormalize:(s,a)=>{let c=o(a,s.normalizeOpts);c.type==="continue"&&(s.committed=c.action)}}};var yo=(e,t)=>{let n=[];for(let o of t){let r=e.groupIdsByTag.get(o);if(r)for(let s of r)n.push(s)}return n},mo=e=>{let t=new Map;for(let n of e){let o=t.get(n.templateKey);o?o.push(n):t.set(n.templateKey,[n])}return t},Ot=(e,t,n,o)=>{if(n===null){for(let r of e.actorIdsByTemplate.get(t)??[])o(r);return}for(let r of n){let s=e.groupById.get(r)?.actorIdsByTemplate.get(t);if(s)for(let a of s)o(a)}},Lt=e=>{let{sidecar:t,actorTemplateKeys:n,actorSpawnIndex:o,actorReduceIndex:r,spawnIdConfig:s}=e;return{resolveSpawnGroups:(i,u,l,p)=>{if(i==="group"){let v=[];for(let S of u){let h=t.groupById.get(S);h&&v.push({groupId:S,groupTag:h.groupTag})}return v}if(i==="tag"){let v=[];for(let S of u)for(let h of t.groupIdsByTag.get(S)??[])v.push({groupId:h,groupTag:S});return v}let d=[],y=new Set,k=v=>t.groupById.has(v)||y.has(v);for(let v of o.get(p.type)?.keys()??[]){let S=Tt(l,v,p,s,k);y.add(S),d.push({groupId:S,groupTag:v})}return d},forEachRoutedIdentity:(i,u,l,p,d)=>{if(i==="actor"){for(let M of u){let m=t.actorById.get(M);m&&d(m)}return}let y=i==="group"?u:i==="tag"?yo(t,u):null;if(l.length===0){for(let M of r.get(p.type)??[])Ot(t,M,y,m=>{let I=t.actorById.get(m);I&&d(I)});return}let k=new Set(r.get(p.type)??[]),v=mo(l),S=new Set(u),h=M=>i==="unscoped"?!0:i==="group"?S.has(M.meta.groupId):S.has(M.meta.groupTag),A=new Set;for(let M of n){k.has(M)&&Ot(t,M,y,m=>{if(A.has(m))return;let I=t.actorById.get(m);I&&(A.add(m),d(I))});for(let m of v.get(M)??[]){let I=m.meta.actorId;A.has(I)||h(m)&&(A.add(I),d(m))}}}}};var Kt=()=>({actorById:new Map,groupById:new Map,groupIdsByTag:new Map,actorIdsByTemplate:new Map,counters:{actor:0,groupByTag:new Map}}),So=()=>({groupById:new Map,groupIdsByTag:new Map,actorIdsByTemplate:new Map}),Ft=(e,t,n)=>{let o=e.get(t);o||(o=new Set,e.set(t,o)),o.add(n)},Bt=(e,t,n)=>{let o=e.get(t);o?.delete(n),o?.size===0&&e.delete(t)},Vt=(e,t)=>{let{actorId:n,groupId:o,groupTag:r}=t.meta,s=e.groupById.get(o);s||(s={groupTag:r,actorIds:new Set,actorIdsByTemplate:new Map},e.groupById.set(o,s)),s.actorIds.add(n),Ft(s.actorIdsByTemplate,t.templateKey,n),Ft(e.actorIdsByTemplate,t.templateKey,n);let a=e.groupIdsByTag.get(r);a||(a=new Set,e.groupIdsByTag.set(r,a)),a.add(o)},fo=(e,t)=>{let{actorId:n,groupId:o,groupTag:r}=t.meta;Bt(e.actorIdsByTemplate,t.templateKey,n);let s=e.groupById.get(o);if(!s||(s.actorIds.delete(n),Bt(s.actorIdsByTemplate,t.templateKey,n),s.actorIds.size>0))return;e.groupById.delete(o);let a=e.groupIdsByTag.get(r);a?.delete(o),a?.size===0&&e.groupIdsByTag.delete(r)},Ht=e=>{for(let t of e.bag.values())t();e.bag.clear()},Ro=(e,t,n,o,r)=>{if(o.length===0)throw new f("LITE_FSM_INVALID_ACTOR_SLICE",`Actor id for template '${n}' must be non-empty.`);if(!St(r)||!t.isPublicActorState(n,r.state))throw new f("LITE_FSM_INVALID_ACTOR_SLICE",`Invalid actor slice '${n}.${o}'.`);let s=e.actorById.get(o);if(s){if(s.templateKey!==n)throw new f("LITE_FSM_INVALID_ACTOR_SLICE",`Actor '${o}' cannot move between actor template records.`);return{identity:s,isNew:!1}}let a=r.meta;if(!j(a))throw new f("LITE_FSM_INVALID_ACTOR_SLICE",`Actor '${o}' cannot be created by state replacement without actor meta.`);let{groupId:c,groupTag:i}=a;if(a.actorId!==o||typeof i!="string"||i!==t.groupTagForTemplate(n)||typeof c!="string"||c.length===0)throw new f("LITE_FSM_INVALID_ACTOR_SLICE",`Actor '${o}' has invalid actor meta.`);return{identity:{templateKey:n,meta:me({actorId:o,groupId:c,groupTag:i})},isNew:!0}},ho=e=>{let t=So();for(let n of e.values())Vt(t,n);return t},Gt=(e,t,n,o)=>{let r=new Set,s=new Map,a=new Map(e.actorById),c=new Map,i=[];for(let d of n){let y=o[d];if(!j(y))throw new f("LITE_FSM_INVALID_ACTOR_SLICE",`Invalid actor record '${d}'.`);let k={};for(let[v,S]of Object.entries(y)){if(r.has(v))throw new f("LITE_FSM_INVALID_ACTOR_SLICE",`Duplicate actorId '${v}'.`);r.add(v);let{identity:h,isNew:A}=Ro(e,t,d,v,S);k[v]={...S,meta:h.meta},A&&s.set(v,h)}c.set(d,k)}for(let[d,y]of s)a.set(d,{...y,bag:new Map});let u=new Set(n);for(let[d,y]of a)u.has(y.templateKey)&&(r.has(d)||(i.push(y),a.delete(d)));let l=ho(a),p=Ae(e.counters);for(let[d,y]of s)Et(p,d,y.meta.groupId,t.originId);return{nextActorById:a,nextGroupById:l.groupById,nextGroupIdsByTag:l.groupIdsByTag,nextActorIdsByTemplate:l.actorIdsByTemplate,nextCounters:p,canonicalActorRecords:c,actorsToCleanup:i,touchedTemplateKeys:n}},Eo=(e,t)=>{e.actorById=t.nextActorById,e.groupById=t.nextGroupById,e.groupIdsByTag=t.nextGroupIdsByTag,e.actorIdsByTemplate=t.nextActorIdsByTemplate,e.counters=t.nextCounters;for(let n of t.actorsToCleanup)Ht(n)},Ao=(e,t)=>{let n=new Set(t.pendingDeleted.map(o=>o.meta.actorId));for(let o of t.pendingSpawned){if(n.has(o.meta.actorId))continue;let r={...o,bag:new Map};e.actorById.set(o.meta.actorId,r),Vt(e,r)}for(let o of t.pendingDeleted){let r=e.actorById.get(o.meta.actorId);r&&(e.actorById.delete(o.meta.actorId),fo(e,r),Ht(r))}},zt=(e,t)=>{let n=e;for(let o of t){let r=n[o];r&&r!==ue&&Object.keys(r).length===0&&(n={...n,[o]:ue})}return n},$t=(e,t,n)=>(t.countersDraft&&(e.counters=ht(e.counters,t.countersDraft)),Ao(e,t),zt(n,t.touchedActorRecords.keys())),jt=(e,t,n)=>{for(let[o,r]of t.canonicalActorRecords)n={...n,[o]:r};return Eo(e,t),zt(n,t.touchedTemplateKeys)},Qe=(e,t)=>{let n=[];for(let o of t){let r=e.actorById.get(o.meta.actorId);r&&n.push(r)}return n};var Ut=e=>({key:e,get(t){return t.runtime.get(e)},set(t,n){t.runtime.set(e,n)}}),qt=(e,t,n,o)=>{let r=[];for(let s of t){let a=e[s],c=a.storage===void 0?o:String(a.storage),i=n.get(c);if(!i)throw new f("LITE_FSM_UNKNOWN_STORAGE_KIND",`[lite-fsm] machine '${s}' uses unknown storage kind '${c}'.`);let u={key:s,machine:a,storageKind:c};i.validateTemplate(u);let l=i.compileTemplate(u);if(l.kind!==c)throw new f("LITE_FSM_INVALID_STORAGE_RUNTIME",`[lite-fsm] storage runtime '${c}' compiled machine '${s}' with kind '${l.kind}'.`);r.push(l)}return r};var xo="instance",Xt=e=>e&&typeof e=="object"?e:{},Yt=(e,t,n)=>{let o=e.get(t);if(o)return o;let r={ctx:We(Xt(t.options),n)};return e.set(t,r),r},Wt=(e,t,n)=>{t.committed=n,t.committedPrevState=e.prevState},Mo=e=>!!(e&&typeof e=="object"&&"prepareAction"in e&&"reduceBucket"in e),Jt=({key:e,machine:t})=>{if(Ee(t)){Rt(e,t);return}if(Z(t,"persistence"))throw new f("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] domain machine '${e}' cannot define actor persistence.`)},Qt=({key:e,storageKind:t})=>({key:e,kind:t}),Zt=({manager:e,templates:t})=>{let n=e,o=n.config,r=n.options,s=r?.originId;if(s!==void 0&&(s.length===0||s.includes(Se)))throw new f("LITE_FSM_INVALID_OPTIONS",`[lite-fsm] originId must be a non-empty string without '${Se}'.`);let a={originId:s,generateActorId:r?.generateActorId,generateGroupId:r?.generateGroupId},c=t.map(g=>g.key),i=[],u=[];for(let g of c)Ee(o[g])?i.push(g):u.push(g);let l=[],p=[];for(let g of i)o[g].persistence==="snapshot"?l.push(g):p.push(g);let d=!!r?.middleware?.some(we),y=n.schemaVersion,{groupTagForTemplate:k,hasActorTransition:v,isPublicActorState:S}=_t(o),{domainReduceIndex:h,domainAlwaysReduce:A,actorReduceIndex:M,actorSpawnIndex:m}=wt(o,i,u,k),I=g=>!!o[g].effects,P=u.filter(I),C=i.some(I),F=P.length>0||C;if(G)for(let g of u)o[g].groupTag&&console.warn(`[lite-fsm] groupTag on domain machine '${g}' is ignored.`);let N=Object.fromEntries(c.map(g=>[g,xe(o[g],{allowActorTemplate:!0,allowVoidReducer:()=>d})])),H=Object.fromEntries(c.map(g=>[g,i.includes(g)?ue:{state:o[g].initialState,context:o[g].initialContext}])),b=Kt(),{normalizeAction:ae,applyPostNormalize:U}=Nt({routing:n.routing,sidecar:b}),{resolveSpawnGroups:ie,forEachRoutedIdentity:pe}=Lt({sidecar:b,actorTemplateKeys:i,actorSpawnIndex:m,actorReduceIndex:M,spawnIdConfig:a}),ce=(g,T)=>{let x=g,O=_=>{let L=N[_],K=g[_],X=L.transition(K,T);X!==K&&(x=x===g?{...g}:x,x[_]=X)};for(let _ of A)O(_);for(let _ of h.get(T.type)??[])O(_);return x},Ie=(g,T,x,O,_)=>{let L=T,K=m.get(x.type);if(!K)return L;let X=q=>b.actorById.has(q)||g.pendingSpawned.some(ge=>ge.meta.actorId===q);for(let q of ie(O,_,g,x))for(let ge of K.get(q.groupTag)??[]){let Xn=o[ge],Jn=me({actorId:vt(g,ge,q.groupTag,x,a,X),groupId:q.groupId,groupTag:q.groupTag}),$e={templateKey:ge,meta:Jn},Qn={state:"__INIT",context:{...Xn.initialContext},meta:$e.meta},pt=be(g,L,ge);pt.record[$e.meta.actorId]=Qn,L=pt.root,g.pendingSpawned.push($e)}return L},Te=(g,T,x,O)=>{let L=T[x.templateKey]?.[x.meta.actorId];if(!L||!v(x.templateKey,L.state,O))return{root:T,delivered:!1};let K=be(g,T,x.templateKey),q=N[x.templateKey].transition(L,O);return G&&ft(x.meta.actorId,x.templateKey,q.state,S),K.record[x.meta.actorId]={...q,meta:x.meta},{root:K.root,delivered:!0}},Ge=(g,T)=>{let x=T,O=new Set;for(let _ of[...g.pendingSpawned,...g.pendingDelivered]){if(O.has(_.meta.actorId))continue;O.add(_.meta.actorId);let K=x[_.templateKey]?.[_.meta.actorId];if(!K||!de(K.state))continue;let X=be(g,x,_.templateKey);delete X.record[_.meta.actorId],x=X.root,g.pendingDeleted.push(_)}return x},Re=g=>{if(g.scope==="plugin")throw new f("LITE_FSM_UNROUTABLE_PLUGIN_ROUTE",`[lite-fsm] instance storage cannot deliver action routed via plugin meta key '${g.key}'.`);return g},ze=(g,T,x,O)=>{let _=ce(T,x);if(O.scope==="plugin")return _;let{scope:L,targetSet:K}=Re(O);return L!=="actor"&&(_=Ie(g,_,x,L,K)),pe(L,K,g.pendingSpawned,x,X=>{let q=Te(g,_,X,x);_=q.root,q.delivered&&g.pendingDelivered.push(X)}),Ge(g,_)},R={actorTemplateKeys:i,groupTagForTemplate:k,isPublicActorState:S,originId:s},E=g=>{let T=[],x=new Set,O=_=>{for(let L of _){let K=L.meta.actorId;x.has(K)||(x.add(K),T.push(L))}};O(Qe(b,g.pendingSpawned)),O(Qe(b,g.pendingDelivered)),g.effectsTargets=T},D=(g,T,x)=>i.filter(O=>g[O]===T[O]?!1:x.touchedActorRecords.get(O)!==T[O]),w=(g,T)=>{if(T.length===0)return g;let x=Gt(b,R,T,g);return jt(b,x,g)},V=(g,T,x)=>{let O=D(T,x,g),_=w(x,O);return $t(b,g,_)},$={transition:n.transition,userDeps:{}},{condition:ve,invokeEffects:le}=xt({sidecar:b,machines:N,domainKeys:P,refs:$,onTransition:n.onTransition,createScopedDeps:n.createScopedDeps,onError:r?.onError}),Y={config:o,snapshotActorTemplateKeys:l,runtimeActorTemplateKeys:p,schemaVersion:y,groupTagForTemplate:k,onSchemaVersionMismatch:r?.onSchemaVersionMismatch,onUnknownMachineKey:r?.onUnknownMachineKey},te=Ut(xo);return{initialState:H,prepareAction({action:g,options:T,dispatch:x}){let O=Xt(T),_=We(O,b.counters);te.set(x,{ctx:_});let L=ae(g,O);return L.type==="drop"?{type:"drop"}:{type:"replace",action:L.action}},beforeReduce({action:g,dispatch:T}){let x=Yt(te,T,b.counters);return x.ctx.committed||U(x.ctx,g),x.ctx.committed?(Wt(T,x.ctx,x.ctx.committed),{type:"replace",action:x.ctx.committed}):{type:"drop"}},reduceBucket(g){let{dispatch:T}=g,x=Yt(te,T,b.counters);if(x.ctx.committed||U(x.ctx,g.action),!x.ctx.committed)return{type:"skip"};Wt(T,x.ctx,g.action),T.nextState=ze(x.ctx,T.nextState,g.action,T.route)},commit({dispatch:g}){let T=te.get(g);T?.ctx.committed&&(g.nextState=V(T.ctx,g.prevState,g.nextState),C&&E(T.ctx))},condition(g){return ve(g)},resolveEffectInvocations({manager:g,dispatch:T}){let x=te.get(T);return!F||T.skipDelivery||!x?.ctx.committed?[]:[{prevState:x.ctx.committedPrevState,currentState:g.getState(),action:x.ctx.committed,targets:x.ctx.effectsTargets}]},invokeEffect({invocation:g,manager:T}){let x=g;$.userDeps=T.getDependencies(),le(x.prevState,x.currentState,x.action,x.targets)},dehydrate({rootState:g,options:T}){return Ct(g,o,b,l,p,u,y,T)},hydrate({machines:g,baseState:T,strategy:x,source:O,mode:_}){let L=Pt(T,{schemaVersion:y,machines:g},x,O,Y,_==="preview"?"preview":"commit");if(_==="preview")return{nextState:L.nextState,changed:L.nextState!==T};if(L.nextState===T)return{nextState:T,changed:!1};let K=w(L.nextState,L.changedActorTemplateKeys);return G&&Q(K),{nextState:K,changed:!0}},resolveIdentity({action:g}){let T=g.meta?.actorId;return typeof T=="string"?b.actorById.get(T):void 0}}},W=e=>{if(!Mo(e))throw new Error("[lite-fsm] invalid instance storage runtime state.");return e};var Ze="instance",en={kind:Ze,reduceScope:"bucket",validateTemplate(e){Jt(e)},compileTemplate(e){return Qt(e)},createRuntimeState(e){return Zt(e)},createPublicInitialState({template:e,state:t}){return W(t).initialState[e.key]},prepareAction(e){return W(e.state).prepareAction(e)},beforeReduce(e){return W(e.state).beforeReduce(e)},reduceBucket(e){return W(e.state).reduceBucket(e)},commit(e){W(e.state).commit(e)},effects:{condition(e){return W(e.state).condition(e.predicate)},resolveInvocations(e){return W(e.state).resolveEffectInvocations(e)},invoke(e){W(e.state).invokeEffect(e)}},snapshot:{dehydrate(e){return{machines:W(e.state).dehydrate(e).machines}},hydrate(e){return W(e.state).hydrate(e)}},identity:{resolve(e){return W(e.state).resolveIdentity(e)}}};var tn="@lite-fsm/core/instance-runtime",nn={name:tn,storage:[{owner:tn,kind:Ze,value:en}],routeMeta:[],scopedDeps:[],scopedTransition:[],manager:[],hooks:{}};var on={name:"@lite-fsm/core/default-runtime",defaultStorageKind:"instance",plugins:[nn]};var Le=e=>{if(e===null||typeof e!="object"||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null},Io=e=>e.map(t=>`'${t}'`).join(", "),J=(e,t)=>{throw new f("LITE_FSM_INVALID_STORAGE_CALLBACK_RESULT",`[lite-fsm] ${e} returned invalid callback result; expected ${t}.`)},Ne=(e,t)=>{throw new f("LITE_FSM_INVALID_PLUGIN_CALLBACK_RESULT",`[lite-fsm] ${e} returned invalid callback result; expected ${t}.`)},Fe=(e,t,n,o,r)=>{for(let s of Object.keys(t))n.has(s)||o(e,r)},an=(e,t)=>{if(t===null||typeof t!="object"||Array.isArray(t))throw new f("LITE_FSM_INVALID_REPLACEMENT_ACTION",`[lite-fsm] ${e} returned invalid replacement action; expected an object with string 'type'.`);if(typeof t.type!="string")throw new f("LITE_FSM_INVALID_REPLACEMENT_ACTION",`[lite-fsm] ${e} returned invalid replacement action; expected an object with string 'type'.`);if(ye(t))throw new f("LITE_FSM_INVALID_REPLACEMENT_ACTION",`[lite-fsm] ${e} returned reserved system replacement action '${t.type}'.`);return t},To=new Set(["type","action"]),Me="undefined, { type: 'drop' }, or { type: 'replace', action }",sn=(e,t)=>{if(t!==void 0)return Le(t)?(Fe(e,t,To,J,Me),t.type==="drop"?"action"in t?J(e,Me):{type:"drop"}:t.type==="replace"&&"action"in t?{type:"replace",action:an(e,t.action)}:J(e,Me)):J(e,Me)},vo=new Set(["type"]),et="undefined or { type: 'skip' }",tt=(e,t)=>{if(t!==void 0)return Le(t)?(Fe(e,t,vo,J,et),t.type==="skip"?{type:"skip"}:J(e,et)):J(e,et)},cn=(e,t)=>typeof t=="boolean"?t:J(e,"a boolean"),ko=new Set(["action","skipDelivery","stopInterceptors"]),Oe=`undefined or a plain object with known fields ${Io(["action","skipDelivery","stopInterceptors"])}`,dn=(e,t)=>{if(t!==void 0)return!Le(t)||(Fe(e,t,ko,Ne,Oe),"skipDelivery"in t&&typeof t.skipDelivery!="boolean")||"stopInterceptors"in t&&typeof t.stopInterceptors!="boolean"?Ne(e,Oe):{..."action"in t&&t.action!==void 0?{action:an(e,t.action)}:{},..."skipDelivery"in t?{skipDelivery:t.skipDelivery}:{},..."stopInterceptors"in t?{stopInterceptors:t.stopInterceptors}:{}}},Po=new Set(["data"]),rn="undefined or a plain object with the only public field 'data'",un=(e,t)=>{if(t!==void 0)return Le(t)?(Fe(e,t,Po,J,rn),t):J(e,rn)};var pn=["validateTemplate","compileTemplate","createRuntimeState","createPublicInitialState","commit"],ln=["prepareAction","beforeReduce"],Co=["acceptsEvent","reduce"],Do=["reduceBucket"],gn={effects:{required:["resolveInvocations","invoke"],optional:["condition"]},snapshot:{required:["dehydrate","hydrate"]},identity:{required:["resolve"]},reactions:{required:["run"]}},wo=new Set(["kind","reduceScope","routeMetaKeys",...pn,...ln,...Co,...Do,...Object.keys(gn)]),yn=(e,t,n)=>{!z(e,t)||e[t]===void 0||ne(e[t],`${n} must be a function.`)},_o=e=>{if(!z(e,"routeMetaKeys")||e.routeMetaKeys===void 0)return;let t=e.routeMetaKeys;Array.isArray(t)&&t.every(n=>typeof n=="string")||B("storage runtime 'routeMetaKeys' must be an array of strings.")},bo=e=>!z(e,"reduceScope")||e.reduceScope===void 0?"template":e.reduceScope==="template"||e.reduceScope==="bucket"?e.reduceScope:B("storage runtime 'reduceScope' must be 'template' or 'bucket'."),No=e=>{if(bo(e)==="bucket"){ne(e.reduceBucket,"storage runtime 'reduceBucket' must be a function."),z(e,"acceptsEvent")&&e.acceptsEvent!==void 0&&B("storage runtime 'acceptsEvent' is not allowed with reduceScope 'bucket'."),z(e,"reduce")&&e.reduce!==void 0&&B("storage runtime 'reduce' is not allowed with reduceScope 'bucket'.");return}ne(e.acceptsEvent,"storage runtime 'acceptsEvent' must be a function."),ne(e.reduce,"storage runtime 'reduce' must be a function."),z(e,"reduceBucket")&&e.reduceBucket!==void 0&&B("storage runtime 'reduceBucket' is not allowed with reduceScope 'template'.")},Oo=(e,t,n)=>{if(!z(e,t)||e[t]===void 0)return;oe(e[t])||B(`storage runtime '${t}' must be a plain object.`);let o=e[t],r=new Set([...n.required,...n.optional??[]]);for(let s of Object.keys(o))r.has(s)||B(`unknown storage runtime '${t}' method '${s}'.`);for(let s of n.required)ne(o[s],`storage runtime '${t}.${s}' must be a function.`);for(let s of n.optional??[])yn(o,s,`storage runtime '${t}.${s}'`)},mn=e=>{if(!oe(e))return B("storage runtime definition must be a plain object.");for(let t of Object.keys(e))wo.has(t)||B(`unknown storage runtime field '${t}'.`);nt(e.kind,"storage runtime kind must be a non-empty string."),_o(e);for(let t of pn)ne(e[t],`storage runtime '${t}' must be a function.`);for(let t of ln)yn(e,t,`storage runtime '${t}'`);No(e);for(let[t,n]of Object.entries(gn))Oo(e,t,n);return e},Sn=(e,t)=>({...t,...t.routeMetaKeys===void 0?{}:{routeMetaKeys:[...t.routeMetaKeys]},kind:e,compileTemplate(n){let o=t.compileTemplate,r=un(`storage runtime '${e}' compileTemplate`,o(n));return r===void 0?{key:n.key,kind:e}:Object.assign({},r,{key:n.key,kind:e})}});var fn=Symbol.for("lite-fsm.storage-runtime.value"),Rn=Symbol.for("lite-fsm.storage-runtime.payload"),Lo=e=>{let t=mn(e),n=t.kind,o=Sn(n,t),r={kind:n};return Object.defineProperties(r,{[fn]:{value:!0},[Rn]:{value:o}}),Object.freeze(r)},hn=e=>oe(e)&&Reflect.get(e,fn)===!0,En=e=>Reflect.get(e,Rn);function An(){return arguments.length>0&&B("defineStorageRuntime must be called without arguments; use defineStorageRuntime().create(...)."),{create(e){return Lo(e)}}}var Be=["beforeReduce","afterReduce","beforeCommit","beforeSubscribers","beforeEffects","afterEffects"];var z=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),oe=e=>{if(e===null||typeof e!="object"||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null},Mn=e=>e?.plugins??[],B=e=>{throw new f("LITE_FSM_INVALID_PLUGIN_DEFINITION",`[lite-fsm] invalid plugin definition: ${e}`)},nt=(e,t)=>typeof e=="string"&&e.length>0?e:B(t),ne=(e,t)=>typeof e=="function"?e:B(t),Fo=new Set(["name","routeMeta","manager","storage","scopedDeps","scopedTransition","intercept","hooks"]),Bo=new Set(Be),Ko=e=>{for(let t of Object.keys(e))Fo.has(t)||B(`unknown top-level section '${t}'.`)},Ke=(e,t)=>{if(!oe(t))return B(`section '${e}' must be a plain object.`);let n=Object.entries(t);return n.length===0&&B(`section '${e}' must not be empty.`),n},Ve=(e,t,n)=>ne(n,`section '${e}' entry '${t}' must be a function.`),Vo=e=>Bo.has(e)?e:B(`unknown dispatch hook phase '${e}'.`),Ho=e=>Array.isArray(e)?e.length===0?B("section 'storage' must not be empty."):e.map(t=>hn(t)?t:B("storage definitions require defineStorageRuntime().create(...).")):B("section 'storage' must be an array of storage definitions."),Go=(e,t)=>{let n=new Set;return Ho(t).map(o=>(n.has(o.kind)&&B(`plugin '${e}' defines duplicate storage kind '${o.kind}'.`),n.add(o.kind),{owner:e,kind:o.kind,value:En(o)}))},In=e=>e.storage,zo=(e,t)=>Ke("routeMeta",t).map(([n,o])=>({owner:e,key:n,resolver:Ve("routeMeta",n,o)})),$o=(e,t)=>Ke("manager",t).map(([n,o])=>({owner:e,key:n,factory:Ve("manager",n,o)})),xn=(e,t,n)=>Ke(e,n).map(([o,r])=>({owner:t,key:o,factory:Ve(e,o,r)})),jo=(e,t)=>{let n={};for(let[o,r]of Ke("hooks",t)){let s=Vo(o);n[s]={owner:e,phase:s,hook:Ve("hooks",o,r)}}return n},Tn=e=>{if(!oe(e))return B("definition must be a plain object.");Ko(e);let t=nt(e.name,"name must be a non-empty string."),n={name:t,storage:z(e,"storage")?Go(t,e.storage):[],routeMeta:z(e,"routeMeta")?zo(t,e.routeMeta):[],scopedDeps:z(e,"scopedDeps")?xn("scopedDeps",t,e.scopedDeps):[],scopedTransition:z(e,"scopedTransition")?xn("scopedTransition",t,e.scopedTransition):[],manager:z(e,"manager")?$o(t,e.manager):[],hooks:z(e,"hooks")?jo(t,e.hooks):{}};return z(e,"intercept")?{...n,intercept:ne(e.intercept,"section 'intercept' must be a function.")}:n};var vn=Symbol.for("lite-fsm.plugin.value"),kn=Symbol.for("lite-fsm.plugin.payload"),Uo=e=>{let t=Tn(e),n={name:t.name};return Object.defineProperties(n,{[vn]:{value:!0},[kn]:{value:t}}),Object.freeze(n)};function Pn(){return arguments.length>0&&B("definePlugin must be called without arguments; use definePlugin().create(...)."),{create(e){return Uo(e)}}}var Cn=e=>oe(e)&&Reflect.get(e,vn)===!0,Dn=e=>Reflect.get(e,kn);var ee=e=>{if(!G)return e;let t={...e};return e.meta!==void 0&&(t.meta=Object.freeze({...e.meta})),Object.freeze(t)};var qo=Symbol.for("@lite-fsm/performance-trace"),wn="@lite-fsm/core/transition-trace",ot=0,Yo=()=>{let e=globalThis[qo];if(!e||typeof e!="object")return;let t=e.records;if(Array.isArray(t))return e},_n=e=>{let t=Yo();if(!t)return;let n=ot;ot+=1;let o=[],r=[],s=!1;return{depth:n,now(){return performance.now()},record(a,c,i){if(s)return;let u=performance.now()-c;if(i?.runtimeKind!==void 0){o.push({key:a,durationMs:u,runtimeKind:i.runtimeKind});return}o.push({key:a,durationMs:u})},count(a,c=1){s||r.push({key:a,value:c})},finish(a){s||(s=!0,ot-=1,t.records.push({actionType:e,depth:n,status:a,phases:o,counters:r}))}}},rt=e=>e?(t,n)=>{let o=e.now();try{return n()}finally{e.record(t,o)}}:(t,n)=>n(),fe=e=>e?(t,n,o)=>{let r=e.now();try{return o()}finally{e.record(`core.bucket.${t}.${n}`,r,{runtimeKind:n})}}:(t,n,o)=>o(),bn=(e,t)=>{t&&e.runtime.set(wn,t)},se=e=>{let t=e.runtime.get(wn);if(!t||typeof t!="object")return;let n=t;if(!(typeof n.depth!="number"||typeof n.now!="function"||typeof n.record!="function"||typeof n.count!="function"||typeof n.finish!="function"))return n};var re=(e,t)=>({action:ee(e),originalAction:ee(t.originalAction)}),Nn=(e,t,n,o,r)=>{let s=(i,u,l,p,d)=>{let y=fe(se(l.dispatch)),k=u;for(let v of e){let S=p(v.runtime);if(!S)continue;let h=v.runtime.kind,A=y(i,h,()=>sn(`storage runtime '${h}' ${i}`,r(`storage.${i}`,()=>S(d(v,k)))));if(A?.type==="drop")return{type:"drop"};A?.type==="replace"&&(k=A.action,l.route=n(k))}return{type:"continue",action:k}},a=(i,u,l,p)=>{tt(`storage runtime '${i.kind}' reduceBucket`,r("storage.reduceBucket",()=>i.reduceBucket({templates:u.templates,...re(l,p),state:u.state,manager:t,dispatch:p.dispatch})))?.type!=="skip"&&p.touched.add(i.kind)},c=(i,u,l,p)=>{for(let d of u.templates){if(!cn(`storage runtime '${i.kind}' acceptsEvent`,r("storage.acceptsEvent",()=>i.acceptsEvent({template:d,...re(l,p),state:u.state,dispatch:p.dispatch}))))continue;tt(`storage runtime '${i.kind}' reduce`,r("storage.reduce",()=>i.reduce({template:d,...re(l,p),state:u.state,manager:t,dispatch:p.dispatch})))?.type!=="skip"&&p.touched.add(i.kind)}};return{prepareAction(i,u,l){return s("prepareAction",i,l,p=>p.prepareAction,(p,d)=>({...re(d,l),options:u,state:p.state,manager:t,dispatch:l.dispatch}))},beforeReduce(i,u){return s("beforeReduce",i,u,l=>l.beforeReduce,(l,p)=>({...re(p,u),state:l.state,manager:t,dispatch:u.dispatch}))},reduce(i,u){let l=fe(se(u.dispatch));for(let p of e){let d=p.runtime;l("reduce",d.kind,()=>d.reduceScope==="bucket"?a(d,p,i,u):c(d,p,i,u))}return u.nextState},markExternallyChangedBuckets(i,u,l){for(let p of e)if(!l.touched.has(p.runtime.kind)){for(let d of p.templates)if(i[d.key]!==u[d.key]){l.touched.add(p.runtime.kind);break}}},commit(i){let u=fe(se(i.dispatch));for(let l of e)i.touched.has(l.runtime.kind)&&u("commit",l.runtime.kind,()=>{r("storage.commit",()=>{l.runtime.commit({...re(i.action,i),state:l.state,manager:t,dispatch:i.dispatch})})})},runReactions(i,u){let l=fe(se(u.dispatch));for(let p of e){let d=p.runtime.reactions;!u.touched.has(p.runtime.kind)||!d||l("reactions",p.runtime.kind,()=>{r("storage.reactions",()=>{d.run({...re(i,u),state:p.state,manager:t,dispatch:u.dispatch})})})}},runEffects(i){let u=fe(se(i.dispatch));for(let l of e){let p=l.runtime.effects;if(!i.touched.has(l.runtime.kind)||!p)continue;let d=l.runtime.kind,y=u("effects.resolve",d,()=>p.resolveInvocations({...re(i.action,i),state:l.state,manager:t,dispatch:i.dispatch}));u("effects.invoke",d,()=>{for(let k of y)p.invoke({invocation:k,...re(i.action,i),state:l.state,manager:t,dispatch:i.dispatch})})}},condition(i){let u=e.find(l=>l.runtime.kind===o);return u?.runtime.effects?.condition?u.runtime.effects.condition({predicate:l=>i(ee(l)),state:u.state,manager:t}):Promise.resolve(!1)}}},On=(e,t,n,o)=>{for(let r of e)r.state=r.runtime.createRuntimeState({templates:r.templates,manager:o});return Object.fromEntries(n.map(r=>{let s=t.get(r.kind);return[r.key,s?.runtime.createPublicInitialState({template:r,state:s.state})]}))},Ln=(e,t)=>{let n=new Map;for(let{kind:o,runtime:r}of t)n.set(o,{runtime:r,templates:[],state:void 0});for(let o of e)n.get(o.kind)?.templates.push(o);return[...n.values()]};var Fn=["actorId","groupId","groupTag"],Bn=["senderActorId","senderGroupId","senderGroupTag"],Wo=new Set([...Fn,...Bn]),at={scope:"unscoped",key:void 0,targetSet:[]},it=e=>{let t=Array.isArray(e)?e:[e];return[...new Set(t)]},Xo=(e,t)=>{if(typeof t=="string")return[t];if(Array.isArray(t)&&t.every(n=>typeof n=="string"))return[...new Set(t)];throw new f("LITE_FSM_INVALID_ROUTE_RESOLVER_RESULT",`[lite-fsm] route resolver for meta key '${e}' must return a string or an array of strings.`)},st=e=>e===void 0?"unowned registration":`plugin '${e}'`,Kn=()=>{let e=new Map,t=a=>{let c=[];a.actorId!==void 0&&c.push("actorId");for(let i of e.keys())a[i]!==void 0&&c.push(i);return a.groupId!==void 0&&c.push("groupId"),a.groupTag!==void 0&&c.push("groupTag"),c},n=(a,c,i)=>{for(let u of i)a[u]!==void 0&&(c[u]=a[u])},o=(a,c)=>{let i=a,u={};return i&&(n(i,u,c),n(i,u,[...e.keys()])),u},r=a=>{let c=a.meta;if(!c)return at;let i=t(c);if(i.length===0)return at;if(i.length>1)throw new f("LITE_FSM_AMBIGUOUS_ROUTE_META",`[lite-fsm] action meta contains multiple route keys: ${i.join(", ")}. Use one route key per transition or dispatch separate actions.`);if(c.actorId!==void 0)return{scope:"actor",key:"actorId",targetSet:it(c.actorId)};for(let[u,l]of e){let p=c[u];if(p!==void 0)return{scope:"plugin",key:u,targetSet:Xo(u,l.resolver(p,{key:u,action:ee(a),meta:c}))}}return c.groupId!==void 0?{scope:"group",key:"groupId",targetSet:it(c.groupId)}:c.groupTag!==void 0?{scope:"tag",key:"groupTag",targetSet:it(c.groupTag)}:at};return{registry:Object.freeze({registerRouteMeta(a,c,i){if(Wo.has(a))throw new f("LITE_FSM_DUPLICATE_ROUTE_META_KEY",`[lite-fsm] duplicate routeMeta key '${a}': ${st(i)} conflicts with core reserved routeMeta key '${a}'.`);let u=e.get(a);if(u)throw new f("LITE_FSM_DUPLICATE_ROUTE_META_KEY",`[lite-fsm] duplicate routeMeta key '${a}': ${st(u.owner)} conflicts with ${st(i)}.`);e.set(a,{owner:i,resolver:c})}}),get registeredMetaKeys(){return[...e.keys()]},hasMetaKey(a){return e.has(a)},stripSenderFields(a){return o(a,Fn)},stripRouting(a){return o(a,Bn)},hasRoute(a){let c=a;return c?t(c).length>0:!1},resolveRoute:r}};var Jo=new Set(["getState","getSnapshot","getHydratedState","hydrate","dehydrate","transition","setDependencies","onTransition","replaceReducer"]),Qo=new Set(["action","condition","self","transition"]),Zo=new Set(["actor","group","tag","transition","unscoped"]),Hn=(e,t,n,o)=>`[lite-fsm] duplicate ${e} key '${t}': plugin '${n}' conflicts with plugin '${o}'.`,Vn=(e,t)=>{let n=[],o=new Map;return{add:a=>{if(a.key.length===0)throw new f("LITE_FSM_INVALID_SCOPED_EXTENSION",`[lite-fsm] plugin '${a.owner}' registered invalid ${e.label} extension key.`);let c=o.get(a.key);if(c!==void 0)throw new f("LITE_FSM_DUPLICATE_SCOPED_EXTENSION_KEY",Hn(e.section,a.key,c,a.owner));if(t.has(a.key))throw new f("LITE_FSM_SCOPED_EXTENSION_CORE_KEY",`[lite-fsm] plugin '${a.owner}' cannot override core scoped ${e.label} key '${a.key}'.`);o.set(a.key,a.owner),n.push(a)},assertNoOverride:(a,c)=>{if(a.key in c)throw new f("LITE_FSM_SCOPED_EXTENSION_OVERRIDE",`[lite-fsm] plugin '${a.owner}' cannot override existing scoped ${e.label} key '${a.key}'.`)},entries:n}},er=()=>{let e=new Map;return{registry:Object.freeze({register(n,o,r){let s=e.get(n);if(s)throw new f("LITE_FSM_DUPLICATE_STORAGE_KIND",`[lite-fsm] duplicate storage kind '${n}': plugin '${s.owner}' conflicts with plugin '${r}'.`);if(o.kind!==n)throw new f("LITE_FSM_INVALID_STORAGE_RUNTIME",`[lite-fsm] storage runtime registered for kind '${n}' declared kind '${o.kind}'.`);e.set(n,{owner:r,runtime:o})},get(n){return e.get(n)?.runtime}}),list:()=>[...e].map(([n,o])=>({kind:n,runtime:o.runtime})),values:()=>[...e.values()].map(n=>n.runtime)}},Gn=({defaultStorageKind:e})=>{let t=new Set,n=er(),o=Vn({section:"scopedDeps",label:"dep"},Qo),r=Vn({section:"scopedTransition",label:"transition"},Zo),s=[],a=[],c=new Map,i=Object.fromEntries(Be.map(d=>[d,[]])),u=Kn(),l=d=>{if(Jo.has(d.key))throw new f("LITE_FSM_MANAGER_EXTENSION_CORE_KEY",`[lite-fsm] plugin '${d.owner}' cannot register manager extension '${d.key}' because it is a core manager key.`);let y=c.get(d.key);if(y!==void 0)throw new f("LITE_FSM_DUPLICATE_MANAGER_EXTENSION_KEY",Hn("manager",d.key,y,d.owner));c.set(d.key,d.owner),a.push(d)},p=(d,y)=>{if(r.entries.length===0)return d;let k=Object.assign((S=>y.transition(S)),d),v={...y,transition:k};for(let S of r.entries)r.assertNoOverride(S,k),k[S.key]=S.factory(v);return k};return{defaultStorageKind:e,storage:n.registry,routing:u,listStorageRuntimes:n.list,listActionInterceptors:()=>s,listDispatchHooks:d=>i[d],createScopedDeps(d,y){if(o.entries.length===0&&r.entries.length===0)return d;let k=p(y.transition,y),v={...d,transition:k},S={...y,transition:k};for(let h of o.entries)o.assertNoOverride(h,v),v[h.key]=h.factory(S);return v},attachManagerExtensions(d,y){for(let{key:k,factory:v}of a)Object.defineProperty(d,k,{value:v(y),enumerable:!0,configurable:!0,writable:!0});return d},addPlugin(d){if(t.has(d.name))throw new f("LITE_FSM_DUPLICATE_PLUGIN",`[lite-fsm] duplicate plugin name '${d.name}'.`);t.add(d.name);for(let y of In(d))n.registry.register(y.kind,y.value,y.owner);for(let y of d.routeMeta)u.registry.registerRouteMeta(y.key,y.resolver,y.owner);for(let y of d.scopedDeps)o.add(y);for(let y of d.scopedTransition)r.add(y);for(let y of d.manager)l(y);d.intercept&&s.push({owner:d.name,intercept:d.intercept});for(let y of Object.values(d.hooks))i[y.phase].push(y.hook)},assertDefaultStorageRegistered(){if(!n.registry.get(e))throw new f("LITE_FSM_MISSING_DEFAULT_STORAGE_KIND",`[lite-fsm] default storage kind '${e}' is not registered.`)},assertStorageRouteResolversRegistered(){for(let d of n.values())for(let y of d.routeMetaKeys??[])if(!u.hasMetaKey(y))throw new f("LITE_FSM_MISSING_ROUTE_META_RESOLVER",`[lite-fsm] storage runtime '${d.kind}' requires route resolver for meta key '${y}'.`)}}};var dt=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),zn=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),ct=()=>{throw new Error("[lite-fsm] snapshot is not supported by the configured storage runtimes.")},$n=(e,t,n)=>{let o=t.get(e);if(o)return o;throw new f("LITE_FSM_UNKNOWN_STORAGE_KIND",`[lite-fsm] ${n}: unknown storage kind '${e}'.`)},He=(e,t,n)=>{if(t.runtime.snapshot)return t.runtime.snapshot;throw new f("LITE_FSM_UNSUPPORTED_STORAGE_SNAPSHOT",`[lite-fsm] ${n}: storage runtime '${e}' does not support snapshots.`)},tr=(e,t)=>{if(!zn(t))throw new f("LITE_FSM_INVALID_STORAGE_RUNTIME",`[lite-fsm] dehydrate: storage runtime '${e}' snapshot.dehydrate() must return an object.`);for(let n of Object.keys(t))if(!(n==="machines"||n==="snapshot"))throw new f("LITE_FSM_INVALID_STORAGE_RUNTIME",`[lite-fsm] dehydrate: storage runtime '${e}' returned unknown snapshot field '${n}'.`);if(dt(t,"machines")&&t.machines!==void 0&&!zn(t.machines))throw new f("LITE_FSM_INVALID_STORAGE_RUNTIME",`[lite-fsm] dehydrate: storage runtime '${e}' returned invalid machines snapshot.`);return t},jn=e=>{let{buckets:t,bucketsByKind:n,templateKindByKey:o,defaultStorageKind:r,managerContext:s,getState:a,getSchemaVersion:c}=e,i=(S,h)=>{if(S)return S.machines===void 0?S:{...S,machines:h??[]}},u=S=>{let h=S?.storage;if(h===void 0)return new Set(t.filter(M=>M.runtime.snapshot).map(M=>M.runtime.kind));let A=new Set;for(let M of h){let m=$n(M,n,"dehydrate");He(M,m,"dehydrate"),A.add(M)}return A},l=(S,h)=>{let A=S?.machines;if(!A)return new Set(t.filter(m=>m.runtime.snapshot&&m.templates.length>0).map(m=>m.runtime.kind));let M=new Set;for(let m of A){if(!dt(e.config,m))throw new f("LITE_FSM_INVALID_HYDRATION_ENVELOPE",`[lite-fsm] dehydrate: unknown machine key '${m}'.`);let I=o.get(m),P=n.get(I);He(I,P,"dehydrate"),M.add(I);let C=h.get(I)??[];C.push(m),h.set(I,C)}return M},p=S=>{let h=new Map,A=l(S,h),M=u(S),m=new Set([...A,...M]);if(m.size===0&&!t.some(F=>F.runtime.snapshot))return ct();let I={},P={};for(let F of t){let N=F.runtime.kind;if(!m.has(N))continue;let H=He(N,F,"dehydrate"),b=tr(N,H.dehydrate({state:F.state,manager:s,rootState:a(),options:i(S,h.get(N))}));b.machines!==void 0&&Object.assign(I,b.machines),M.has(N)&&dt(b,"snapshot")&&b.snapshot!==void 0&&(P[N]=b.snapshot)}let C={schemaVersion:c(),machines:I};return Object.keys(P).length>0&&(C.storage=P),C},d=(S,h)=>{let A=S.get(h);if(A)return A;let M=$n(h,n,"hydrate");He(h,M,"hydrate");let m={bucket:M,machines:{},hasStorageSnapshot:!1};return S.set(h,m),m},y=()=>{let S=n.get(r);if(S?.runtime.snapshot)return S;let h=t.find(A=>A.runtime.snapshot);return h||ct()},k=S=>{let h=new Map,A;for(let[M,m]of Object.entries(S.machines)){let I=o.get(M);if(!I){let P=A?.bucket??y();A=d(h,P.runtime.kind),A.machines[M]=m;continue}d(h,I).machines[M]=m}for(let[M,m]of Object.entries(S.storage??{})){let I=d(h,M);I.storageSnapshot=m,I.hasStorageSnapshot=!0}return t.map(M=>h.get(M.runtime.kind)).filter(M=>!!M)};return{dehydrate:p,hydrate:(S,h,A,M,m)=>{let I=Je(S),P=k(I);if(P.length===0&&!t.some(N=>N.runtime.snapshot))return ct();if(A!=="preview"&&Object.keys(I.machines).length>0){let N=c();I.schemaVersion!==N&&s.options?.onSchemaVersionMismatch?.(I.schemaVersion,N)}let C=M,F=!1;for(let N of P){let H=N.bucket.runtime.snapshot.hydrate({state:N.bucket.state,manager:s,machines:N.machines,snapshot:N.hasStorageSnapshot?N.storageSnapshot:void 0,baseState:C,strategy:h,source:m,mode:A});H.changed&&(C=H.nextState,F=!0)}return{nextState:C,changed:F}}}};var Un=e=>{throw new f("LITE_FSM_REENTRANT_TRANSITION_FORBIDDEN",`[lite-fsm] transition cannot be called during dispatch phase '${e}'.`)};var nr=e=>{if(Cn(e))return e;throw new f("LITE_FSM_INVALID_PLUGIN_DEFINITION","[lite-fsm] invalid plugin definition: MachineManager plugins must be values returned by definePlugin().create(...).")},qn=e=>function(n,o){let r=R=>R,s=R=>R,a=Gn({defaultStorageKind:e.defaultStorageKind});for(let R of e.plugins)a.addPlugin(R);for(let R of Mn(o))a.addPlugin(Dn(nr(R)));a.assertDefaultStorageRegistered(),a.assertStorageRouteResolversRegistered();let c=qt(n,Object.keys(n),a.storage,a.defaultStorageKind),i=Ln(c,a.listStorageRuntimes()),u=new Map(i.map(R=>[R.runtime.kind,R])),l=new Map(c.map(R=>[R.key,R.kind])),p={},d=[],y={},k=null,v=null,S=(R,E)=>{let D=v;v=R;try{return E()}finally{v=D}},h=()=>{if(!k)throw new f("LITE_FSM_NO_ACTIVE_DISPATCH","[lite-fsm] no active dispatch context; transition() must be called via MachineManager API.");return k},A=()=>p,M=(R,E,D)=>{for(let w of d)w(R,E,D)},m=R=>(d.push(R),()=>{d=d.filter(E=>E!==R)}),I={config:n,options:o,schemaVersion:o?.schemaVersion,routing:a.routing,getState:A,transition:(R,E)=>Re(s(R),E),onTransition:R=>m(R),getDependencies:()=>y,createScopedDeps:(R,E)=>a.createScopedDeps(R,{...E,event:ee(E.event)})},P=I,C=Nn(i,P,a.routing.resolveRoute,a.defaultStorageKind,S);p=On(i,u,c,P);let F=jn({config:n,buckets:i,bucketsByKind:u,templateKindByKey:l,defaultStorageKind:a.defaultStorageKind,managerContext:P,getState:A,getSchemaVersion:()=>o?.schemaVersion}),N=(R,E)=>{let D=new Map,w,V={get options(){return E},get runtime(){return D},get route(){return w.route},get prevState(){return w.prevState},get nextState(){return w.nextState},set nextState($){w.nextState=$},get skipDelivery(){return w.skipDelivery},reportError($){o?.onError?.($)}};return w={originalAction:R,action:R,skipDelivery:!1,route:a.routing.resolveRoute(R),prevState:p,nextState:p,nextCalled:!1,outcome:{type:"active"},touched:new Set,dispatch:V},w},H=(R,E)=>{R.action=E,R.route=a.routing.resolveRoute(E)},b=R=>{let E=ee(R.originalAction),D=ee(R.action);return{get options(){return R.dispatch.options},get runtime(){return R.dispatch.runtime},originalAction:E,action:D,get skipDelivery(){return R.skipDelivery},reportError(w){R.dispatch.reportError(w)}}},ae=R=>{for(let{owner:E,intercept:D}of a.listActionInterceptors()){let w=`plugin '${E}' intercept`,V=b(R),$=dn(w,S("plugin.intercept",()=>D(V)));if($?.action!==void 0&&H(R,$.action),$?.skipDelivery===!0&&(R.skipDelivery=!0),$?.stopInterceptors===!0)return}},U=(R,E)=>{let D=`hook.${R}`;for(let w of a.listDispatchHooks(R))S(D,()=>{w(b(E))})},ie=(R,E)=>{p=R;let D=h();return D.nextState=R,C.reduce(r(E),D)},pe=R=>{ie=R(ie)},ce=(R,E,D)=>{if(R.skipDelivery){D("core.rootReducer",()=>{R.nextState=E});return}let w=D("core.rootReducer",()=>{let V=ie(E,s(R.action));if(V===void 0)throw new Error(he);return V});D("core.markExternallyChangedBuckets",()=>{w!==E&&C.markExternallyChangedBuckets(E,w,R)}),R.nextState=w},Ie=R=>{let E=h(),D=rt(se(E.dispatch));if(E.nextCalled)throw new Error("[lite-fsm] middleware called next() more than once for a single transition.");E.nextCalled=!0;let w=p;E.prevState=w,E.nextState=w,H(E,r(R));let V=D("core.beforeReduce.total",()=>C.beforeReduce(r(R),E));return V.type==="drop"?(E.outcome={type:"drop",action:E.originalAction},s(E.originalAction)):(H(E,V.action),D("core.interceptors",()=>ae(E)),D("core.hooks.beforeReduce",()=>U("beforeReduce",E)),ce(E,w,D),D("core.hooks.afterReduce",()=>U("afterReduce",E)),D("core.hooks.beforeCommit",()=>U("beforeCommit",E)),D("core.commit.total",()=>C.commit(E)),p=E.nextState,G&&Q(p),D("core.hooks.beforeSubscribers",()=>U("beforeSubscribers",E)),D("core.reactions.total",()=>C.runReactions(E.action,E)),D("core.subscribers",()=>M(w,p,s(E.action))),s(E.action))},Te=o?.middleware,Ge=(()=>{if(!Te?.length)return Ie;let R={getState:A,transition:E=>Re(E),replaceReducer:pe,onTransition:m,condition:E=>C.condition(E)};return Ce(...Te.map(E=>E(R)))(Ie)})();o?.snapshot&&(p=F.hydrate(o.snapshot,"replace","init",p,"opts.snapshot").nextState),G&&Q(p);function Re(R,E){v&&Un(v);let D=R,w=_n(typeof D?.type=="string"?D.type:void 0),V=rt(w),$=w?.now(),ve="ok";try{V("core.assertUserAction",()=>bt(R));let le=r(R),Y=V("core.createDispatch",()=>{let T=N(le,E);return bn(T.dispatch,w),T}),te=V("core.prepareAction.total",()=>C.prepareAction(le,E,Y));if(te.type==="drop")return R;H(Y,te.action);let ut=k;k=Y;let g;try{g=Ge(s(te.action))}finally{k=ut}return Y.outcome.type==="drop"?s(Y.outcome.action):Y.nextCalled?(V("core.hooks.beforeEffects",()=>U("beforeEffects",Y)),V("core.effects.total",()=>C.runEffects(Y)),V("core.hooks.afterEffects",()=>U("afterEffects",Y)),s(Y.action)):g}catch(le){throw ve="error",le}finally{w&&$!==void 0&&w.record("core.transition.total",$),w?.finish(ve)}}let ze={getState:A,getSnapshot:()=>({schemaVersion:o?.schemaVersion,machines:{...p}}),getHydratedState:(R,{strategy:E="merge",baseState:D=p}={})=>F.hydrate(R,E,"preview",D,"hydrate").nextState,hydrate(R,{strategy:E="merge"}={}){let D=p,w=F.hydrate(R,E,"commit",D,"hydrate");w.changed&&(p=w.nextState,G&&Q(p),M(D,p,{type:De,payload:{strategy:E,snapshot:R}}))},dehydrate:(R=>F.dehydrate(R)),transition:Re,setDependencies(R){y=typeof R=="function"?R(y):R},onTransition:m,replaceReducer:pe};return a.attachManagerExtensions(ze,I)};var Yn=qn(on);var or=e=>e,Wn=or;var rr=e=>e,ar=e=>e,ir=Symbol.for("lite-fsm.owner.domain"),sr=({type:e,effect:t,cancelFn:n})=>{let o=new Map;return r=>{let s=r,a=s.self?.actorId??ir,c=o.get(a)??{lastId:0};c.lastId+=1,c.cancel=n?.(r),o.set(a,c);let i=c.lastId;s.self&&!c.dispose&&(c.dispose=()=>o.delete(a),s[Pe]?.(s.self.actorId,Symbol("createEffect"),c.dispose));let u=()=>e==="latest"&&i!==o.get(a)?.lastId?!1:!c.cancel?.(),l=Object.assign(p=>u()?r.transition(p):p,r.transition);if(s.self){let p=r.transition;l.unscoped=d=>u()?p.unscoped(d):d,l.actor=(d,y)=>u()?p.actor(d,y):y,l.group=(d,y)=>u()?p.group(d,y):y,l.tag=(d,y)=>u()?p.tag(d,y):y}return t({...r,transition:l})}},cr=e=>sr(e);0&&(module.exports={HYDRATE_ACTION_TYPE,LiteFsmError,Machine,MachineManager,VOID_REDUCER_MIDDLEWARE_MARKER,createActorMeta,createConfig,createEffect,createMachine,createReducer,defineMachine,definePlugin,defineStorageRuntime});
|
package/dist/index.d.cts
CHANGED
|
@@ -3,6 +3,11 @@ export type * from "./interfaces";
|
|
|
3
3
|
export { createActorMeta } from "./actor";
|
|
4
4
|
export { CreateMachine as Machine, defineMachine } from "./Machine";
|
|
5
5
|
export { MachineManager } from "./MachineManager";
|
|
6
|
+
export { definePlugin } from "./plugin";
|
|
7
|
+
export { defineStorageRuntime } from "./pluginStorage";
|
|
8
|
+
export type { DispatchContext, EffectDeps, LiteFsmPlugin, ManagerExtensionFactory, ManagerExtensionType, ManagerExtensionTypeLambda, ManagerRuntimeContext, PluginManagerEvents, PluginManagerExtensions, PluginRouteMeta, PluginScopedInvocationContext, PluginScopedDeps, PluginScopedTransition, } from "./plugin";
|
|
9
|
+
export type { LiteFsmStorageRuntimeDefinition } from "./pluginStorage";
|
|
10
|
+
export type { StorageAcceptsEventContext, StorageBeforeReduceContext, StorageCommitContext, StorageCompileTemplateContext, StorageConditionContext, StorageCreatePublicInitialStateContext, StorageCreateRuntimeStateContext, StorageDehydrateContext, StorageDependentField, StorageDependentTypeLambda, StorageEffectInvocationContext, StorageHydrateContext, StorageIdentityContext, StorageManagerContext, StoragePrepareActionContext, StorageReactionContext, StorageReduceBucketContext, StorageReduceContext, StorageResolveEffectInvocationsContext, StorageRuntimeExtension, StorageTemplate, StorageValidateTemplateContext, } from "./pluginStorageTypes";
|
|
6
11
|
export * from "./types";
|
|
7
12
|
export { createMachine, type TypedCreateMachineFn } from "./createMachine";
|
|
8
13
|
export { HYDRATE_ACTION_TYPE, LiteFsmError, VOID_REDUCER_MIDDLEWARE_MARKER } from "./utils";
|
package/dist/index.d.ts
CHANGED
|
@@ -3,6 +3,11 @@ export type * from "./interfaces";
|
|
|
3
3
|
export { createActorMeta } from "./actor";
|
|
4
4
|
export { CreateMachine as Machine, defineMachine } from "./Machine";
|
|
5
5
|
export { MachineManager } from "./MachineManager";
|
|
6
|
+
export { definePlugin } from "./plugin";
|
|
7
|
+
export { defineStorageRuntime } from "./pluginStorage";
|
|
8
|
+
export type { DispatchContext, EffectDeps, LiteFsmPlugin, ManagerExtensionFactory, ManagerExtensionType, ManagerExtensionTypeLambda, ManagerRuntimeContext, PluginManagerEvents, PluginManagerExtensions, PluginRouteMeta, PluginScopedInvocationContext, PluginScopedDeps, PluginScopedTransition, } from "./plugin";
|
|
9
|
+
export type { LiteFsmStorageRuntimeDefinition } from "./pluginStorage";
|
|
10
|
+
export type { StorageAcceptsEventContext, StorageBeforeReduceContext, StorageCommitContext, StorageCompileTemplateContext, StorageConditionContext, StorageCreatePublicInitialStateContext, StorageCreateRuntimeStateContext, StorageDehydrateContext, StorageDependentField, StorageDependentTypeLambda, StorageEffectInvocationContext, StorageHydrateContext, StorageIdentityContext, StorageManagerContext, StoragePrepareActionContext, StorageReactionContext, StorageReduceBucketContext, StorageReduceContext, StorageResolveEffectInvocationsContext, StorageRuntimeExtension, StorageTemplate, StorageValidateTemplateContext, } from "./pluginStorageTypes";
|
|
6
11
|
export * from "./types";
|
|
7
12
|
export { createMachine, type TypedCreateMachineFn } from "./createMachine";
|
|
8
13
|
export { HYDRATE_ACTION_TYPE, LiteFsmError, VOID_REDUCER_MIDDLEWARE_MARKER } from "./utils";
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var vt=Object.defineProperty;var kt=(e,t,n)=>t in e?vt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var we=(e,t,n)=>kt(e,typeof t!="symbol"?t+"":t,n);var q=Symbol.for("lite-fsm.registerBagDispose");function J(...e){return e.length===0?t=>t:e.reduce((t,n)=>(...r)=>t(n(...r)))}var De="*",Nt="@@lite-fsm/",fe="@@lite-fsm/HYDRATE",_e="__liteFsmAllowVoidReducer",U="Reducer returned undefined. Return the next state, or use immerMiddleware to mutate draft state without return.",Q=e=>typeof e=="function"&&_e in e,I=class extends Error{constructor(n,r){super(r);we(this,"code",n);this.name="LiteFsmError"}},ye=(e,t)=>{if(typeof e!="string"||e.length===0)throw new I("LITE_FSM_INVALID_GENERATED_ID",`[lite-fsm] generate${t==="actor"?"Actor":"Group"}Id must return a non-empty string.`);return e},ee=e=>typeof e.type=="string"&&e.type.startsWith(Nt),L=globalThis.process?.env?.NODE_ENV!=="production",K=e=>{if(e===null||typeof e!="object"||Object.isFrozen(e))return e;Object.freeze(e);for(let t of Object.keys(e))K(Reflect.get(e,t));return e};var j=Object.freeze({}),Ot=new Set(["__RESOLVED","__REJECTED","__CANCELLED"]),Lt=["senderActorId","senderGroupId","senderGroupTag"],Bt=["actorId","groupId","groupTag"],V=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),N=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),H=e=>typeof e=="string"&&Ot.has(e),ve=e=>N(e)&&typeof e.state=="string"&&N(e.context),Z=e=>Object.freeze({actorId:e.actorId,groupId:e.groupId,groupTag:e.groupTag}),te=e=>V(e.config,"__INIT"),ne=(e,t,n,r)=>{let o=e[t]?.[n];if(o!==void 0)return o;if(!(r&&t==="__INIT"))return e["*"]?.[n]},ke=(e,t,n,r)=>{if(n==="__INIT")throw new I("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor '${e}' remained in __INIT after spawn.`);if(!H(n)&&!r(t,n))throw new I("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor '${e}' has invalid state.`)},Ne=(e,t)=>{if(t.initialState!=="__INIT")throw new I("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor template '${e}' must use __INIT as initialState.`);if(t.persistence!==void 0&&t.persistence!=="runtime"&&t.persistence!=="snapshot")throw new I("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor template '${e}' has invalid persistence mode.`);if(t.persistence!=="snapshot"&&(t.hydrate||t.dehydrate))throw new I("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor template '${e}' cannot define hydrate/dehydrate hooks without snapshot persistence.`);let n=t.config;for(let r of Object.keys(n)){if(H(r)||r.startsWith("__")&&r!=="__INIT")throw new I("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor template '${e}' has reserved state '${r}'.`);for(let o of Object.values(n[r])){if(r==="__INIT"&&o===null)throw new I("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor template '${e}' cannot spawn with a null __INIT target.`);if(o==="__INIT"||typeof o=="string"&&o.startsWith("__")&&!H(o))throw new I("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor template '${e}' has invalid target '${String(o)}'.`)}}},Oe=e=>{let t={};return e&&(e.actorId!==void 0&&(t.actorId=e.actorId),e.groupId!==void 0&&(t.groupId=e.groupId),e.groupTag!==void 0&&(t.groupTag=e.groupTag),e.senderActorId!==void 0&&(t.senderActorId=e.senderActorId),e.senderGroupId!==void 0&&(t.senderGroupId=e.senderGroupId),e.senderGroupTag!==void 0&&(t.senderGroupTag=e.senderGroupTag)),t},Le=e=>{let t=Oe(e);for(let n of Lt)delete t[n];return t},Be=e=>{let t=Oe(e);for(let n of Bt)delete t[n];return t},Ae=(e,t)=>{if(Object.keys(t).length===0){let{meta:n,...r}=e;return r}return{...e,meta:t}},le=e=>Array.isArray(e)?e:[e],Se=e=>[...new Set(e)],Fe=e=>e?e.actorId!==void 0?{scope:"actor",targetSet:Se(le(e.actorId))}:e.groupId!==void 0?{scope:"group",targetSet:Se(le(e.groupId))}:e.groupTag!==void 0?{scope:"tag",targetSet:Se(le(e.groupTag))}:{scope:"unscoped",targetSet:[]}:{scope:"unscoped",targetSet:[]},z="#",me=e=>{let t=e.indexOf(z);return t===-1?{owner:null,tail:e}:{owner:e.slice(0,t),tail:e.slice(t+1)}},Pe=(e,t)=>{let{owner:n}=me(e);return t===void 0?n===null:n===t},X=e=>({actor:e.actor,groupByTag:new Map(e.groupByTag)}),Ve=(e,t)=>{let n=X(e);n.actor=Math.max(n.actor,t.actor);for(let[r,o]of t.groupByTag)n.groupByTag.set(r,Math.max(n.groupByTag.get(r)??0,o));return n},be=e=>{let t=e.lastIndexOf("/");if(t<0)return null;let n=Number(e.slice(t+1));return Number.isInteger(n)&&n>=0?n:null},Ge=(e,t,n,r)=>{if(Pe(t,r)){let o=be(me(t).tail);o!==null&&(e.actor=Math.max(e.actor,o+1))}if(Pe(n,r)){let o=me(n).tail,a=be(o);if(a===null)return;let s=o.slice(0,o.lastIndexOf("/"));e.groupByTag.set(s,Math.max(e.groupByTag.get(s)??0,a+1))}};var oe=(e,t={})=>{let n=te(e);return{config:e.config,transition:(r,o)=>{if(n&&!t.allowActorTemplate)throw new I("LITE_FSM_STANDALONE_ACTOR_TEMPLATE","[lite-fsm] actor templates can only be used inside MachineManager.");let a=e.config,s=ne(a,r.state,o.type,n);if(s===void 0)return r;if(e.reducer){let d=s||r.state,S=e.reducer(r,o,{nextState:d,config:e.config});if(S===void 0){if(t.allowVoidReducer?.())return r;throw new Error(U)}return S}let c="payload"in o?o.payload:{};return{state:s||r.state,context:{...r.context,...c}}},invokeEffect:async(r,o,a)=>{if(!e.effects)return;let s=e.effects,c=r!==o&&s[o]||s[De];c&&await c(a)}}},Ft=(e,t={})=>{let n,r=[],o=!1,a=y=>{o=!!y?.some(Q)},s=oe(e,{allowVoidReducer:()=>o}),c=[],d={context:e.initialContext,state:e.initialState};L&&K(d);let S=(y,M)=>s.transition(y,M),m=y=>{S=y(S)},R=y=>new Promise((M,w)=>{let D=A((G,b,v)=>{try{y(v)&&(D(),M(!0))}catch(O){D(),w(O)}})}),u=(y,M,w)=>{s.invokeEffect(y.state,M.state,{...t.dependencies,transition:n,action:w,condition:R}).catch(D=>{t?.onError?.(D)})},A=y=>(c.push(y),()=>{c=c.filter(M=>M!==y)}),P=(y,M,w)=>{c.forEach(D=>D(y,M,w))},g=y=>{let M=d,w=S(M,y);if(w===void 0)throw new Error(U);return d=w,L&&K(d),P(M,d,y),y},l=y=>{if(a(y),!y?.length)return g;let M=y.map(w=>w({getState:E,transition:D=>n(D),replaceReducer:m,onTransition:A,condition:R}));return J(...M)(g)},h=l(r);n=y=>{let M=d,w=h(y);return u(M,d,w),w};let E=()=>d;return{transition:n,getState:E,onTransition:A,addMiddleware:(...y)=>{r=[...r,...y],h=l(r)}}},Vt=(e={})=>({create:t=>Ft(t,e)});var Ke=e=>{let{sidecar:t,machines:n,domainKeys:r,refs:o,onTransition:a,onError:s}=e,c=(g,l,h)=>{t.actorById.get(g)?.bag.set(l,h)},d=(g,l)=>{t.actorById.get(g)?.bag.delete(l)},S=(g,l)=>new Promise((h,E)=>{let x=()=>l!==void 0&&!t.actorById.has(l.actorId),y=()=>new I("LITE_FSM_ACTOR_DISPOSED","Actor was disposed before condition resolved.");if(x())return E(y());let M,w=()=>{D(),l&&M&&d(l.actorId,M)},D=a((G,b,v)=>{if(!ee(v)){if(x())return D();try{if(!g(v))return;if(x())return D();w(),h(!0)}catch(O){w(),E(O)}}});l&&(M=Symbol("condition"),c(l.actorId,M,()=>{D(),E(y())}))}),m=g=>S(g),R=g=>{let l=(h=>o.transition(h,{sender:g}));return l.unscoped=h=>o.transition(h,{sender:g,routingMode:"unscoped"}),l.actor=(h,E)=>o.transition({...E,meta:{actorId:h}},{sender:g}),l.group=(h,E)=>o.transition({...E,meta:{groupId:h}},{sender:g}),l.tag=(h,E)=>o.transition({...E,meta:{groupTag:h}},{sender:g}),l},u=(g,l,h)=>{let E=x=>o.transition(x);for(let x of r){let y=n[x],M=g[x],w=l[x];y.invokeEffect(M.state,w.state,{...o.userDeps,transition:E,action:h,condition:m}).catch(D=>s?.(D))}},A=(g,l,h,E)=>{for(let x of E){let{actorId:y,groupId:M,groupTag:w}=x.meta,D=n[x.templateKey],G=g[x.templateKey],b=l[x.templateKey],v=G?.[y],O=b?.[y];if(!O)continue;let W={actorId:y,groupId:M,groupTag:w};D.invokeEffect(v?.state??"__INIT",O.state,{...o.userDeps,transition:R(W),action:h,condition:Y=>S(Y,W),self:W,[q]:c}).catch(Y=>s?.(Y))}};return{condition:m,invokeEffects:(g,l,h,E)=>{u(g,l,h),A(g,l,h,E)}}};var He=(e,t)=>({normalizeOpts:e,countersBase:t,pendingSpawned:[],pendingDelivered:[],pendingDeleted:[],touchedActorRecords:new Map,effectsTargets:[]}),je=e=>(e.countersDraft||(e.countersDraft=X(e.countersBase)),e.countersDraft),$e=(e,t,n)=>e?`${e}${z}${t}/${n}`:`${t}/${n}`,ze=(e,t,n,r,o)=>{let a=je(e),s=a.groupByTag.get(t)??0;a.groupByTag.set(t,s+1);let c=r.generateGroupId?ye(r.generateGroupId({templateKey:t,groupTag:t,counter:s,originId:r.originId,action:n}),"group"):$e(r.originId,t,s);if(o(c))throw new I("LITE_FSM_INVALID_GENERATED_ID",`[lite-fsm] groupId '${c}' is already in use.`);return c},We=(e,t,n,r,o,a)=>{let s=je(e),c=s.actor;s.actor=c+1;let d=o.generateActorId?ye(o.generateActorId({templateKey:t,groupTag:n,counter:c,originId:o.originId,action:r}),"actor"):$e(o.originId,t,c);if(a(d))throw new I("LITE_FSM_INVALID_GENERATED_ID",`[lite-fsm] actorId '${d}' is already in use.`);return d},re=(e,t,n)=>{let r=e.touchedActorRecords.get(n);if(r)return{root:t,record:r};let o=t[n],a=o===j?{}:{...o},s={...t,[n]:a};return e.touchedActorRecords.set(n,a),{root:s,record:a}};var Gt=e=>{if(!N(e))throw new I("LITE_FSM_INVALID_HYDRATION_ENVELOPE","[lite-fsm] hydrate: snapshot must be an object envelope.");if(!N(e.machines))throw new I("LITE_FSM_INVALID_HYDRATION_ENVELOPE","[lite-fsm] hydrate: snapshot.machines must be an object.");return{schemaVersion:typeof e.schemaVersion=="number"?e.schemaVersion:void 0,machines:e.machines}},he=e=>({state:e.state,context:e.context}),Kt=e=>N(e)&&V(e,"snapshot")?{snapshot:e.snapshot,meta:e.meta}:{snapshot:e},Ye=(e,t)=>N(e)?{...e,meta:t}:e,Ht=(e,t,n)=>e&&N(t)&&t.state===e.state&&t.context===e.context?e:Ye(t,n),jt=(e,t,n,r,o)=>{if(!N(n))throw new I("LITE_FSM_INVALID_ACTOR_SLICE",`Invalid actor record '${t}'.`);let a=e[t],c=o.config[t].hydrate,d=r==="replace"?{}:{...a},S=!1;for(let[m,R]of Object.entries(n)){let u=a[m],A=Kt(R),P=c?c(u?he(u):void 0,A.snapshot,{strategy:r}):A.snapshot,g=Ht(u,P,u?.meta??A.meta);a[m]!==g&&(S=!0),d[m]=g}if(r==="replace"&&!S){for(let m of Object.keys(a))if(!(m in d)){S=!0;break}}return{record:S?d:a,changed:S}},ae=(e,t,n,r,o,a="commit")=>{let s=Gt(t);a==="commit"&&s.schemaVersion!==o.schemaVersion&&o.onSchemaVersionMismatch?.(s.schemaVersion,o.schemaVersion);let c,d=[];for(let S of Object.keys(s.machines)){if(!V(o.config,S)){a==="commit"&&(L&&console.warn(`[lite-fsm] hydrate: unknown machine key '${S}', skipped.`),o.onUnknownMachineKey?.(S,r));continue}let m=S;if(o.runtimeActorTemplateKeys.includes(m)){L&&console.warn(`[lite-fsm] hydrate: runtime actor template '${m}' was skipped \u2014 runtime actor templates do not participate in hydrate/dehydrate.`);continue}if(o.snapshotActorTemplateKeys.includes(m)){let g=jt(e,m,s.machines[S],n,o);if(!g.changed)continue;c=c??{...e},c[m]=g.record,d.push(m);continue}let R=e[m],u=s.machines[S],A=o.config[m].hydrate,P=A?A(R,u,{strategy:n}):u;P!==R&&(c=c??{...e},c[m]=P)}return{nextState:c??e,changedActorTemplateKeys:d}},Ue=(e,t,n,r,o,a,s,c)=>{let d=c?.machines;if(d)for(let u of d){if(!V(t,u))throw new I("LITE_FSM_INVALID_HYDRATION_ENVELOPE",`[lite-fsm] dehydrate: unknown machine key '${u}'.`);if(o.includes(u))throw new I("LITE_FSM_INVALID_HYDRATION_ENVELOPE",`[lite-fsm] dehydrate: runtime actor template '${u}' cannot be dehydrated.`)}let S=u=>{let A=e[u];if(!N(A))throw new I("LITE_FSM_INVALID_ACTOR_SLICE",`Invalid actor record '${u}'.`);let g=t[u].dehydrate,l={};for(let[h,E]of Object.entries(A)){let x=n.actorById.get(h);if(!x)throw new I("LITE_FSM_INVALID_ACTOR_SLICE",`Actor '${h}' has no runtime identity.`);l[h]={snapshot:g?g(he(E)):he(E),meta:x.meta}}return l},m=d??[...a,...r],R={};for(let u of m){if(r.includes(u)){R[u]=S(u);continue}let P=t[u].dehydrate;R[u]=P?P(e[u]):e[u]}return{schemaVersion:s,machines:R}};var Ze=(e,t,n)=>{let r=new Map,o=[];for(let s of e){let c=!1;for(let[d,S]of Object.entries(t(s)))if(!(!S||!n(d)))for(let m of Object.keys(S)){c=!0;let R=r.get(m);R||r.set(m,R=new Set),R.add(s)}c||o.push(s)}let a=new Map;for(let[s,c]of r)a.set(s,[...c]);return{index:a,keysWithoutEdges:o}},$t=(e,t,n)=>{let r=new Map;for(let o of e){let a=n(o);for(let s of Object.keys(t(o).__INIT??{})){let c=r.get(s);c||r.set(s,c=new Map);let d=c.get(a);d||c.set(a,d=[]),d.push(o)}}return r},Xe=(e,t,n,r)=>{let o=d=>e[d].config,a=Ze(n,o,()=>!0),s=Ze(t,o,d=>d!=="__INIT"),c=$t(t,o,r);return{domainReduceIndex:a.index,domainAlwaysReduce:a.keysWithoutEdges,actorReduceIndex:s.index,actorSpawnIndex:c}},qe=e=>{let t=s=>e[s],n=s=>t(s).config;return{groupTagForTemplate:s=>t(s).groupTag??s,hasActorTransition:(s,c,d)=>ne(n(s),c,d.type,!0)!==void 0,isPublicActorState:(s,c)=>c==="__INIT"||H(c)?!1:V(t(s).config,c)}};var se=Symbol.for("lite-fsm.normalize-drop"),Je=e=>{if(ee(e))throw new Error(`[lite-fsm] reserved system action '${e.type}' cannot be dispatched.`)},Qe=e=>{let{sidecar:t}=e,n=(o,{sender:a,routingMode:s="default"}={})=>{if(!a&&s==="default"&&!("meta"in o))return o;if(a&&!t.actorById.has(a.actorId))return se;let c=Le(o.meta);return a&&(c.senderActorId=a.actorId,c.senderGroupId=a.groupId,c.senderGroupTag=a.groupTag),s==="unscoped"?Ae(o,Be(c)):(a&&c.actorId===void 0&&c.groupId===void 0&&c.groupTag===void 0&&(c.groupId=a.groupId,c.groupTag=a.groupTag),Ae(o,c))};return{normalizeAction:n,applyPostNormalize:(o,a)=>{let s=n(a,o.normalizeOpts);s!==se&&(o.committed=s)}}};var zt=(e,t)=>{let n=[];for(let r of t){let o=e.groupIdsByTag.get(r);if(o)for(let a of o)n.push(a)}return n},Wt=e=>{let t=new Map;for(let n of e){let r=t.get(n.templateKey);r?r.push(n):t.set(n.templateKey,[n])}return t},et=(e,t,n,r)=>{if(n===null){for(let o of e.actorIdsByTemplate.get(t)??[])r(o);return}for(let o of n){let a=e.groupById.get(o)?.actorIdsByTemplate.get(t);if(a)for(let s of a)r(s)}},tt=e=>{let{sidecar:t,actorTemplateKeys:n,actorSpawnIndex:r,actorReduceIndex:o,spawnIdConfig:a}=e;return{resolveSpawnGroups:(d,S,m,R)=>{if(d==="group"){let g=[];for(let l of S){let h=t.groupById.get(l);h&&g.push({groupId:l,groupTag:h.groupTag})}return g}if(d==="tag"){let g=[];for(let l of S)for(let h of t.groupIdsByTag.get(l)??[])g.push({groupId:h,groupTag:l});return g}let u=[],A=new Set,P=g=>t.groupById.has(g)||A.has(g);for(let g of r.get(R.type)?.keys()??[]){let l=ze(m,g,R,a,P);A.add(l),u.push({groupId:l,groupTag:g})}return u},forEachRoutedIdentity:(d,S,m,R,u)=>{if(d==="actor"){for(let x of S){let y=t.actorById.get(x);y&&u(y)}return}let A=d==="group"?S:d==="tag"?zt(t,S):null;if(m.length===0){for(let x of o.get(R.type)??[])et(t,x,A,y=>{let M=t.actorById.get(y);M&&u(M)});return}let P=new Set(o.get(R.type)??[]),g=Wt(m),l=new Set(S),h=x=>d==="unscoped"?!0:d==="group"?l.has(x.meta.groupId):l.has(x.meta.groupTag),E=new Set;for(let x of n){P.has(x)&&et(t,x,A,y=>{if(E.has(y))return;let M=t.actorById.get(y);M&&(E.add(y),u(M))});for(let y of g.get(x)??[]){let M=y.meta.actorId;E.has(M)||h(y)&&(E.add(M),u(y))}}}}};var rt=()=>({actorById:new Map,groupById:new Map,groupIdsByTag:new Map,actorIdsByTemplate:new Map,counters:{actor:0,groupByTag:new Map}}),Yt=()=>({groupById:new Map,groupIdsByTag:new Map,actorIdsByTemplate:new Map}),nt=(e,t,n)=>{let r=e.get(t);r||(r=new Set,e.set(t,r)),r.add(n)},ot=(e,t,n)=>{let r=e.get(t);r?.delete(n),r?.size===0&&e.delete(t)},at=(e,t)=>{let{actorId:n,groupId:r,groupTag:o}=t.meta,a=e.groupById.get(r);a||(a={groupTag:o,actorIds:new Set,actorIdsByTemplate:new Map},e.groupById.set(r,a)),a.actorIds.add(n),nt(a.actorIdsByTemplate,t.templateKey,n),nt(e.actorIdsByTemplate,t.templateKey,n);let s=e.groupIdsByTag.get(o);s||(s=new Set,e.groupIdsByTag.set(o,s)),s.add(r)},Ut=(e,t)=>{let{actorId:n,groupId:r,groupTag:o}=t.meta;ot(e.actorIdsByTemplate,t.templateKey,n);let a=e.groupById.get(r);if(!a||(a.actorIds.delete(n),ot(a.actorIdsByTemplate,t.templateKey,n),a.actorIds.size>0))return;e.groupById.delete(r);let s=e.groupIdsByTag.get(o);s?.delete(r),s?.size===0&&e.groupIdsByTag.delete(o)},st=e=>{for(let t of e.bag.values())t();e.bag.clear()},Zt=(e,t,n,r,o)=>{if(r.length===0)throw new I("LITE_FSM_INVALID_ACTOR_SLICE",`Actor id for template '${n}' must be non-empty.`);if(!ve(o)||!t.isPublicActorState(n,o.state))throw new I("LITE_FSM_INVALID_ACTOR_SLICE",`Invalid actor slice '${n}.${r}'.`);let a=e.actorById.get(r);if(a){if(a.templateKey!==n)throw new I("LITE_FSM_INVALID_ACTOR_SLICE",`Actor '${r}' cannot move between actor template records.`);return{identity:a,isNew:!1}}let s=o.meta;if(!N(s))throw new I("LITE_FSM_INVALID_ACTOR_SLICE",`Actor '${r}' cannot be created by state replacement without actor meta.`);let{groupId:c,groupTag:d}=s;if(s.actorId!==r||typeof d!="string"||d!==t.groupTagForTemplate(n)||typeof c!="string"||c.length===0)throw new I("LITE_FSM_INVALID_ACTOR_SLICE",`Actor '${r}' has invalid actor meta.`);return{identity:{templateKey:n,meta:Z({actorId:r,groupId:c,groupTag:d})},isNew:!0}},Xt=e=>{let t=Yt();for(let n of e.values())at(t,n);return t},it=(e,t,n,r)=>{let o=new Set,a=new Map,s=new Map(e.actorById),c=new Map,d=[];for(let u of n){let A=r[u];if(!N(A))throw new I("LITE_FSM_INVALID_ACTOR_SLICE",`Invalid actor record '${u}'.`);let P={};for(let[g,l]of Object.entries(A)){if(o.has(g))throw new I("LITE_FSM_INVALID_ACTOR_SLICE",`Duplicate actorId '${g}'.`);o.add(g);let{identity:h,isNew:E}=Zt(e,t,u,g,l);P[g]={...l,meta:h.meta},E&&a.set(g,h)}c.set(u,P)}for(let[u,A]of a)s.set(u,{...A,bag:new Map});let S=new Set(n);for(let[u,A]of s)S.has(A.templateKey)&&(o.has(u)||(d.push(A),s.delete(u)));let m=Xt(s),R=X(e.counters);for(let[u,A]of a)Ge(R,u,A.meta.groupId,t.originId);return{nextActorById:s,nextGroupById:m.groupById,nextGroupIdsByTag:m.groupIdsByTag,nextActorIdsByTemplate:m.actorIdsByTemplate,nextCounters:R,canonicalActorRecords:c,actorsToCleanup:d,touchedTemplateKeys:n}},qt=(e,t)=>{e.actorById=t.nextActorById,e.groupById=t.nextGroupById,e.groupIdsByTag=t.nextGroupIdsByTag,e.actorIdsByTemplate=t.nextActorIdsByTemplate,e.counters=t.nextCounters;for(let n of t.actorsToCleanup)st(n)},Jt=(e,t)=>{let n=new Set(t.pendingDeleted.map(r=>r.meta.actorId));for(let r of t.pendingSpawned){if(n.has(r.meta.actorId))continue;let o={...r,bag:new Map};e.actorById.set(r.meta.actorId,o),at(e,o)}for(let r of t.pendingDeleted){let o=e.actorById.get(r.meta.actorId);o&&(e.actorById.delete(r.meta.actorId),Ut(e,o),st(o))}},ct=(e,t)=>{let n=e;for(let r of t){let o=n[r];o&&o!==j&&Object.keys(o).length===0&&(n={...n,[r]:j})}return n},dt=(e,t,n)=>(t.countersDraft&&(e.counters=Ve(e.counters,t.countersDraft)),Jt(e,t),ct(n,t.touchedActorRecords.keys())),pt=(e,t,n)=>{for(let[r,o]of t.canonicalActorRecords)n={...n,[r]:o};return qt(e,t),ct(n,t.touchedTemplateKeys)},Ie=(e,t)=>{let n=[];for(let r of t){let o=e.actorById.get(r.meta.actorId);o&&n.push(o)}return n};var Qt=(e,t)=>{let n=t?.originId;if(n!==void 0&&(n.length===0||n.includes(z)))throw new I("LITE_FSM_INVALID_OPTIONS",`[lite-fsm] originId must be a non-empty string without '${z}'.`);let r={originId:n,generateActorId:t?.generateActorId,generateGroupId:t?.generateGroupId},o=Object.keys(e),a=[],s=[];for(let i of o)te(e[i])?a.push(i):s.push(i);for(let i of a)Ne(i,e[i]);for(let i of s)if(V(e[i],"persistence"))throw new I("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] domain machine '${i}' cannot define actor persistence.`);let c=[],d=[];for(let i of a)e[i].persistence==="snapshot"?c.push(i):d.push(i);let S=!!t?.middleware?.some(Q),m=t?.schemaVersion,{groupTagForTemplate:R,hasActorTransition:u,isPublicActorState:A}=qe(e),{domainReduceIndex:P,domainAlwaysReduce:g,actorReduceIndex:l,actorSpawnIndex:h}=Xe(e,a,s,R),E=i=>!!e[i].effects,x=s.filter(E),y=a.some(E),M=x.length>0||y;if(L)for(let i of s)e[i].groupTag&&console.warn(`[lite-fsm] groupTag on domain machine '${i}' is ignored.`);let w=Object.fromEntries(o.map(i=>[i,oe(e[i],{allowActorTemplate:!0,allowVoidReducer:()=>S})])),D={transition:void 0,userDeps:{}},G=[],b=Object.fromEntries(o.map(i=>[i,a.includes(i)?j:{state:e[i].initialState,context:e[i].initialContext}])),v=rt(),O=null,{normalizeAction:W,applyPostNormalize:Y}=Qe({sidecar:v}),{resolveSpawnGroups:ut,forEachRoutedIdentity:gt}=tt({sidecar:v,actorTemplateKeys:a,actorSpawnIndex:h,actorReduceIndex:l,spawnIdConfig:r}),ft=(i,f)=>{let p=i,T=C=>{let _=w[C],k=i[C],B=_.transition(k,f);B!==k&&(p=p===i?{...i}:p,p[C]=B)};for(let C of g)T(C);for(let C of P.get(f.type)??[])T(C);return p},yt=(i,f,p,T,C)=>{let _=f,k=h.get(p.type);if(!k)return _;let B=F=>v.actorById.has(F)||i.pendingSpawned.some($=>$.meta.actorId===F);for(let F of ut(T,C,i,p))for(let $ of k.get(F.groupTag)??[]){let _t=e[$],Pt=Z({actorId:We(i,$,F.groupTag,p,r,B),groupId:F.groupId,groupTag:F.groupTag}),ge={templateKey:$,meta:Pt},bt={state:"__INIT",context:{..._t.initialContext},meta:ge.meta},Ee=re(i,_,$);Ee.record[ge.meta.actorId]=bt,_=Ee.root,i.pendingSpawned.push(ge)}return _},lt=(i,f,p,T)=>{let _=f[p.templateKey]?.[p.meta.actorId];if(!_||!u(p.templateKey,_.state,T))return{root:f,delivered:!1};let k=re(i,f,p.templateKey),F=w[p.templateKey].transition(_,T);return L&&ke(p.meta.actorId,p.templateKey,F.state,A),k.record[p.meta.actorId]={...F,meta:p.meta},{root:k.root,delivered:!0}},St=(i,f)=>{let p=f,T=new Set;for(let C of[...i.pendingSpawned,...i.pendingDelivered]){if(T.has(C.meta.actorId))continue;T.add(C.meta.actorId);let k=p[C.templateKey]?.[C.meta.actorId];if(!k||!H(k.state))continue;let B=re(i,p,C.templateKey);delete B.record[C.meta.actorId],p=B.root,i.pendingDeleted.push(C)}return p},ie=(i,f)=>{let p=O,{scope:T,targetSet:C}=Fe(f.meta),_=ft(i,f);return T!=="actor"&&(_=yt(p,_,f,T,C)),gt(T,C,p.pendingSpawned,f,k=>{let B=lt(p,_,k,f);_=B.root,B.delivered&&p.pendingDelivered.push(k)}),St(p,_)},Re=i=>{ie=i(ie)},mt={actorTemplateKeys:a,groupTagForTemplate:R,isPublicActorState:A,originId:n},At=i=>{let f=[],p=new Set,T=C=>{for(let _ of C){let k=_.meta.actorId;p.has(k)||(p.add(k),f.push(_))}};T(Ie(v,i.pendingSpawned)),T(Ie(v,i.pendingDelivered)),i.effectsTargets=f},ht=(i,f,p)=>a.filter(T=>i[T]===f[T]?!1:p.touchedActorRecords.get(T)!==f[T]),ce=(i,f)=>{if(f.length===0)return i;let p=it(v,mt,f,i);return pt(v,p,i)},It=(i,f,p)=>{let T=ht(f,p,i),C=ce(p,T);return dt(v,i,C)},de=i=>(G.push(i),()=>{G=G.filter(f=>f!==i)}),Te=(i,f,p)=>{for(let T of G)T(i,f,p)},{condition:Rt,invokeEffects:Tt}=Ke({sidecar:v,machines:w,domainKeys:x,refs:D,onTransition:de,onError:t?.onError}),Me=()=>b,Mt=()=>({schemaVersion:m,machines:{...b}}),pe={config:e,snapshotActorTemplateKeys:c,runtimeActorTemplateKeys:d,schemaVersion:m,groupTagForTemplate:R,onSchemaVersionMismatch:t?.onSchemaVersionMismatch,onUnknownMachineKey:t?.onUnknownMachineKey},Ct=(i,{strategy:f="merge",baseState:p=b}={})=>ae(p,i,f,"hydrate",pe,"preview").nextState,Ce=t?.snapshot;if(Ce){let i=ae(b,Ce,"replace","opts.snapshot",pe);b=ce(i.nextState,i.changedActorTemplateKeys)}L&&K(b);let xt=(i,{strategy:f="merge"}={})=>{let p=b,T=ae(p,i,f,"hydrate",pe),C=T.nextState;C!==p&&(b=ce(C,T.changedActorTemplateKeys),L&&K(b),Te(p,b,{type:fe,payload:{strategy:f,snapshot:i}}))},Et=(i=>Ue(b,e,v,c,d,s,m,i)),xe=i=>{let f=O;if(f.committed)throw new Error("[lite-fsm] middleware called next() more than once for a single transition.");let p=b;if(Y(f,i),!f.committed)return i;f.committedPrevState=p;let T=ie(p,f.committed);if(T===void 0)throw new Error(U);return b=It(f,p,T),y&&At(f),L&&K(b),Te(p,b,f.committed),f.committed},wt=(()=>{let i=t?.middleware;if(!i?.length)return xe;let f={getState:Me,transition:T=>ue(T),replaceReducer:Re,onTransition:de,condition:Rt},p=i.map(T=>T(f));return J(...p)(xe)})();function ue(i,f={}){Je(i);let p=W(i,f);if(p===se)return i;let T=O,C=He(f,v.counters);O=C;let _;try{_=wt(p)}finally{O=T}return C.committed?(M&&Tt(C.committedPrevState,b,C.committed,C.effectsTargets),C.committed):_}let Dt=i=>{let f=D.userDeps,p=typeof i=="function"?i(f):i;D.userDeps=p};return D.transition=ue,{getState:Me,getSnapshot:Mt,getHydratedState:Ct,hydrate:xt,dehydrate:Et,transition:ue,setDependencies:Dt,onTransition:de,replaceReducer:Re}};function en(e){return e}var to=e=>e,no=e=>e,tn=Symbol.for("lite-fsm.owner.domain"),nn=({type:e,effect:t,cancelFn:n})=>{let r=new Map;return o=>{let a=o,s=a.self?.actorId??tn,c=r.get(s)??{lastId:0};c.lastId+=1,c.cancel=n?.(o),r.set(s,c);let d=c.lastId;a.self&&!c.dispose&&(c.dispose=()=>r.delete(s),a[q]?.(a.self.actorId,Symbol("createEffect"),c.dispose));let S=()=>e==="latest"&&d!==r.get(s)?.lastId?!1:!c.cancel?.(),m=Object.assign(R=>S()?o.transition(R):R,o.transition);if(a.self){let R=o.transition;m.unscoped=u=>S()?R.unscoped(u):u,m.actor=(u,A)=>S()?R.actor(u,A):A,m.group=(u,A)=>S()?R.group(u,A):A,m.tag=(u,A)=>S()?R.tag(u,A):A}return t({...o,transition:m})}},oo=e=>nn(e);export{fe as HYDRATE_ACTION_TYPE,I as LiteFsmError,oe as Machine,Qt as MachineManager,_e as VOID_REDUCER_MIDDLEWARE_MARKER,Z as createActorMeta,no as createConfig,oo as createEffect,en as createMachine,to as createReducer,Vt as defineMachine};
|
|
1
|
+
var qn=Object.defineProperty;var Yn=(e,t,n)=>t in e?qn(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var ut=(e,t,n)=>Yn(e,typeof t!="symbol"?t+"":t,n);var ve=Symbol.for("lite-fsm.registerBagDispose");function ke(...e){return e.length===0?t=>t:e.reduce((t,n)=>(...o)=>t(n(...o)))}var pt="*",Wn="@@lite-fsm/",ze="@@lite-fsm/HYDRATE",lt="__liteFsmAllowVoidReducer",Re="Reducer returned undefined. Return the next state, or use immerMiddleware to mutate draft state without return.",Pe=e=>typeof e=="function"&< in e,f=class extends Error{constructor(n,o){super(o);ut(this,"code",n);this.name="LiteFsmError"}},$e=(e,t)=>{if(typeof e!="string"||e.length===0)throw new f("LITE_FSM_INVALID_GENERATED_ID",`[lite-fsm] generate${t==="actor"?"Actor":"Group"}Id must return a non-empty string.`);return e},ye=e=>typeof e.type=="string"&&e.type.startsWith(Wn),G=globalThis.process?.env?.NODE_ENV!=="production",Q=e=>{if(e===null||typeof e!="object"||Object.isFrozen(e))return e;Object.freeze(e);for(let t of Object.keys(e))Q(Reflect.get(e,t));return e};var ue=Object.freeze({}),Xn=new Set(["__RESOLVED","__REJECTED","__CANCELLED"]);var Z=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),j=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),de=e=>typeof e=="string"&&Xn.has(e),mt=e=>j(e)&&typeof e.state=="string"&&j(e.context),he=e=>Object.freeze({actorId:e.actorId,groupId:e.groupId,groupTag:e.groupTag}),Ee=e=>Z(e.config,"__INIT"),Ce=(e,t,n,o)=>{let r=e[t]?.[n];if(r!==void 0)return r;if(!(o&&t==="__INIT"))return e["*"]?.[n]},St=(e,t,n,o)=>{if(n==="__INIT")throw new f("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor '${e}' remained in __INIT after spawn.`);if(!de(n)&&!o(t,n))throw new f("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor '${e}' has invalid state.`)},ft=(e,t)=>{if(t.initialState!=="__INIT")throw new f("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor template '${e}' must use __INIT as initialState.`);if(t.persistence!==void 0&&t.persistence!=="runtime"&&t.persistence!=="snapshot")throw new f("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor template '${e}' has invalid persistence mode.`);if(t.persistence!=="snapshot"&&(t.hydrate||t.dehydrate))throw new f("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor template '${e}' cannot define hydrate/dehydrate hooks without snapshot persistence.`);let n=t.config;for(let o of Object.keys(n)){if(de(o)||o.startsWith("__")&&o!=="__INIT")throw new f("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor template '${e}' has reserved state '${o}'.`);for(let r of Object.values(n[o])){if(o==="__INIT"&&r===null)throw new f("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor template '${e}' cannot spawn with a null __INIT target.`);if(r==="__INIT"||typeof r=="string"&&r.startsWith("__")&&!de(r))throw new f("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] actor template '${e}' has invalid target '${String(r)}'.`)}}};var Ue=(e,t)=>{if(Object.keys(t).length===0){let{meta:n,...o}=e;return o}return{...e,meta:t}},me="#",je=e=>{let t=e.indexOf(me);return t===-1?{owner:null,tail:e}:{owner:e.slice(0,t),tail:e.slice(t+1)}},gt=(e,t)=>{let{owner:n}=je(e);return t===void 0?n===null:n===t},Ae=e=>({actor:e.actor,groupByTag:new Map(e.groupByTag)}),Rt=(e,t)=>{let n=Ae(e);n.actor=Math.max(n.actor,t.actor);for(let[o,r]of t.groupByTag)n.groupByTag.set(o,Math.max(n.groupByTag.get(o)??0,r));return n},yt=e=>{let t=e.lastIndexOf("/");if(t<0)return null;let n=Number(e.slice(t+1));return Number.isInteger(n)&&n>=0?n:null},ht=(e,t,n,o)=>{if(gt(t,o)){let r=yt(je(t).tail);r!==null&&(e.actor=Math.max(e.actor,r+1))}if(gt(n,o)){let r=je(n).tail,s=yt(r);if(s===null)return;let a=r.slice(0,r.lastIndexOf("/"));e.groupByTag.set(a,Math.max(e.groupByTag.get(a)??0,s+1))}};var De=(e,t={})=>{if(e.storage!==void 0&&e.storage!=="instance")throw new f("LITE_FSM_UNKNOWN_STORAGE_KIND","[lite-fsm] standalone Machine supports only storage kind 'instance'.");let n=Ee(e);return{config:e.config,transition:(o,r)=>{if(n&&!t.allowActorTemplate)throw new f("LITE_FSM_STANDALONE_ACTOR_TEMPLATE","[lite-fsm] actor templates can only be used inside MachineManager.");let s=e.config,a=Ce(s,o.state,r.type,n);if(a===void 0)return o;if(e.reducer){let i=a||o.state,u=e.reducer(o,r,{nextState:i,config:e.config});if(u===void 0){if(t.allowVoidReducer?.())return o;throw new Error(Re)}return u}let c="payload"in r?r.payload:{};return{state:a||o.state,context:{...o.context,...c}}},invokeEffect:async(o,r,s)=>{if(!e.effects)return;let a=e.effects,c=o!==r&&a[r]||a[pt];c&&await c(s)}}},Jn=(e,t={})=>{let n,o=[],r=!1,s=m=>{r=!!m?.some(Pe)},a=De(e,{allowVoidReducer:()=>r}),c=[],i={context:e.initialContext,state:e.initialState};G&&Q(i);let u=(m,I)=>a.transition(m,I),l=m=>{u=m(u)},p=m=>new Promise((I,P)=>{let C=y((F,N,H)=>{try{m(H)&&(C(),I(!0))}catch(b){C(),P(b)}})}),d=(m,I,P)=>{a.invokeEffect(m.state,I.state,{...t.dependencies,transition:n,action:P,condition:p}).catch(C=>{t?.onError?.(C)})},y=m=>(c.push(m),()=>{c=c.filter(I=>I!==m)}),k=(m,I,P)=>{c.forEach(C=>C(m,I,P))},v=m=>{let I=i,P=u(I,m);if(P===void 0)throw new Error(Re);return i=P,G&&Q(i),k(I,i,m),m},S=m=>{if(s(m),!m?.length)return v;let I=m.map(P=>P({getState:A,transition:C=>n(C),replaceReducer:l,onTransition:y,condition:p}));return ke(...I)(v)},h=S(o);n=m=>{let I=i,P=h(m);return d(I,i,P),P};let A=()=>i;return{transition:n,getState:A,onTransition:y,addMiddleware:(...m)=>{o=[...o,...m],h=S(o)}}},Qn=(e={})=>({create:t=>Jn(t,e)});var Et=e=>{let{sidecar:t,machines:n,domainKeys:o,refs:r,onTransition:s,createScopedDeps:a,onError:c}=e,i=(S,h,A)=>{t.actorById.get(S)?.bag.set(h,A)},u=(S,h)=>{t.actorById.get(S)?.bag.delete(h)},l=(S,h)=>new Promise((A,M)=>{let m=()=>h!==void 0&&!t.actorById.has(h.actorId),I=()=>new f("LITE_FSM_ACTOR_DISPOSED","Actor was disposed before condition resolved.");if(m())return M(I());let P,C=()=>{F(),h&&P&&u(h.actorId,P)},F=s((N,H,b)=>{if(!ye(b)){if(m())return F();try{if(!S(b))return;if(m())return F();C(),A(!0)}catch(ae){C(),M(ae)}}});h&&(P=Symbol("condition"),i(h.actorId,P,()=>{F(),M(I())}))}),p=S=>l(S),d=S=>{let h=(A=>r.transition(A,{sender:S}));return h.unscoped=A=>r.transition(A,{sender:S,routingMode:"unscoped"}),h.actor=(A,M)=>r.transition({...M,meta:{actorId:A}},{sender:S}),h.group=(A,M)=>r.transition({...M,meta:{groupId:A}},{sender:S}),h.tag=(A,M)=>r.transition({...M,meta:{groupTag:A}},{sender:S}),h},y=(S,h,A)=>{let M=m=>r.transition(m);for(let m of o){let I=n[m],P=S[m],C=h[m],F={...r.userDeps,transition:M,action:A,condition:p};I.invokeEffect(P.state,C.state,a(F,{source:{storage:"instance",template:m},event:A,indices:{},phase:"effect",transition:M})).catch(N=>c?.(N))}},k=(S,h,A,M)=>{for(let m of M){let{actorId:I,groupId:P,groupTag:C}=m.meta,F=n[m.templateKey],N=S[m.templateKey],H=h[m.templateKey],b=N?.[I],ae=H?.[I];if(!ae)continue;let U={actorId:I,groupId:P,groupTag:C},ie=d(U),pe={...r.userDeps,transition:ie,action:A,condition:ce=>l(ce,U),self:U,[ve]:i};F.invokeEffect(b?.state??"__INIT",ae.state,a(pe,{source:{storage:"instance",template:m.templateKey},event:A,indices:{actorId:I,groupId:P,groupTag:C},phase:"effect",transition:ie})).catch(ce=>c?.(ce))}};return{condition:p,invokeEffects:(S,h,A,M)=>{y(S,h,A),k(S,h,A,M)}}};var qe=(e,t)=>({normalizeOpts:e,countersBase:t,pendingSpawned:[],pendingDelivered:[],pendingDeleted:[],touchedActorRecords:new Map,effectsTargets:[]}),At=e=>(e.countersDraft||(e.countersDraft=Ae(e.countersBase)),e.countersDraft),xt=(e,t,n)=>e?`${e}${me}${t}/${n}`:`${t}/${n}`,Mt=(e,t,n,o,r)=>{let s=At(e),a=s.groupByTag.get(t)??0;s.groupByTag.set(t,a+1);let c=o.generateGroupId?$e(o.generateGroupId({templateKey:t,groupTag:t,counter:a,originId:o.originId,action:n}),"group"):xt(o.originId,t,a);if(r(c))throw new f("LITE_FSM_INVALID_GENERATED_ID",`[lite-fsm] groupId '${c}' is already in use.`);return c},It=(e,t,n,o,r,s)=>{let a=At(e),c=a.actor;a.actor=c+1;let i=r.generateActorId?$e(r.generateActorId({templateKey:t,groupTag:n,counter:c,originId:r.originId,action:o}),"actor"):xt(r.originId,t,c);if(s(i))throw new f("LITE_FSM_INVALID_GENERATED_ID",`[lite-fsm] actorId '${i}' is already in use.`);return i},we=(e,t,n)=>{let o=e.touchedActorRecords.get(n);if(o)return{root:t,record:o};let r=t[n],s=r===ue?{}:{...r},a={...t,[n]:s};return e.touchedActorRecords.set(n,s),{root:a,record:s}};var We=e=>{if(!j(e))throw new f("LITE_FSM_INVALID_HYDRATION_ENVELOPE","[lite-fsm] hydrate: snapshot must be an object envelope.");if(!j(e.machines))throw new f("LITE_FSM_INVALID_HYDRATION_ENVELOPE","[lite-fsm] hydrate: snapshot.machines must be an object.");if(Z(e,"storage")&&e.storage!==void 0&&!j(e.storage))throw new f("LITE_FSM_INVALID_HYDRATION_ENVELOPE","[lite-fsm] hydrate: snapshot.storage must be an object.");return{schemaVersion:typeof e.schemaVersion=="number"?e.schemaVersion:void 0,machines:e.machines,storage:e.storage}},Ye=e=>({state:e.state,context:e.context}),Zn=e=>j(e)&&Z(e,"snapshot")?{snapshot:e.snapshot,meta:e.meta}:{snapshot:e},Tt=(e,t)=>j(e)?{...e,meta:t}:e,eo=(e,t,n)=>e&&j(t)&&t.state===e.state&&t.context===e.context?e:Tt(t,n),to=(e,t,n,o,r)=>{if(!j(n))throw new f("LITE_FSM_INVALID_ACTOR_SLICE",`Invalid actor record '${t}'.`);let s=e[t],c=r.config[t].hydrate,i=o==="replace"?{}:{...s},u=!1;for(let[l,p]of Object.entries(n)){let d=s[l],y=Zn(p),k=c?c(d?Ye(d):void 0,y.snapshot,{strategy:o}):y.snapshot,v=eo(d,k,d?.meta??y.meta);s[l]!==v&&(u=!0),i[l]=v}if(o==="replace"&&!u){for(let l of Object.keys(s))if(!(l in i)){u=!0;break}}return{record:u?i:s,changed:u}},vt=(e,t,n,o,r,s="commit")=>{let a=We(t);s==="commit"&&a.schemaVersion!==r.schemaVersion&&r.onSchemaVersionMismatch?.(a.schemaVersion,r.schemaVersion);let c,i=[];for(let u of Object.keys(a.machines)){if(!Z(r.config,u)){s==="commit"&&(G&&console.warn(`[lite-fsm] hydrate: unknown machine key '${u}', skipped.`),r.onUnknownMachineKey?.(u,o));continue}let l=u;if(r.runtimeActorTemplateKeys.includes(l)){G&&console.warn(`[lite-fsm] hydrate: runtime actor template '${l}' was skipped \u2014 runtime actor templates do not participate in hydrate/dehydrate.`);continue}if(r.snapshotActorTemplateKeys.includes(l)){let v=to(e,l,a.machines[u],n,r);if(!v.changed)continue;c=c??{...e},c[l]=v.record,i.push(l);continue}let p=e[l],d=a.machines[u],y=r.config[l].hydrate,k=y?y(p,d,{strategy:n}):d;k!==p&&(c=c??{...e},c[l]=k)}return{nextState:c??e,changedActorTemplateKeys:i}},kt=(e,t,n,o,r,s,a,c)=>{let i=c?.machines;if(i)for(let d of i){if(!Z(t,d))throw new f("LITE_FSM_INVALID_HYDRATION_ENVELOPE",`[lite-fsm] dehydrate: unknown machine key '${d}'.`);if(r.includes(d))throw new f("LITE_FSM_INVALID_HYDRATION_ENVELOPE",`[lite-fsm] dehydrate: runtime actor template '${d}' cannot be dehydrated.`)}let u=d=>{let y=e[d];if(!j(y))throw new f("LITE_FSM_INVALID_ACTOR_SLICE",`Invalid actor record '${d}'.`);let v=t[d].dehydrate,S={};for(let[h,A]of Object.entries(y)){let M=n.actorById.get(h);if(!M)throw new f("LITE_FSM_INVALID_ACTOR_SLICE",`Actor '${h}' has no runtime identity.`);S[h]={snapshot:v?v(Ye(A)):Ye(A),meta:M.meta}}return S},l=i??[...s,...o],p={};for(let d of l){if(o.includes(d)){p[d]=u(d);continue}let k=t[d].dehydrate;p[d]=k?k(e[d]):e[d]}return{schemaVersion:a,machines:p}};var Pt=(e,t,n)=>{let o=new Map,r=[];for(let a of e){let c=!1;for(let[i,u]of Object.entries(t(a)))if(!(!u||!n(i)))for(let l of Object.keys(u)){c=!0;let p=o.get(l);p||o.set(l,p=new Set),p.add(a)}c||r.push(a)}let s=new Map;for(let[a,c]of o)s.set(a,[...c]);return{index:s,keysWithoutEdges:r}},no=(e,t,n)=>{let o=new Map;for(let r of e){let s=n(r);for(let a of Object.keys(t(r).__INIT??{})){let c=o.get(a);c||o.set(a,c=new Map);let i=c.get(s);i||c.set(s,i=[]),i.push(r)}}return o},Ct=(e,t,n,o)=>{let r=i=>e[i].config,s=Pt(n,r,()=>!0),a=Pt(t,r,i=>i!=="__INIT"),c=no(t,r,o);return{domainReduceIndex:s.index,domainAlwaysReduce:s.keysWithoutEdges,actorReduceIndex:a.index,actorSpawnIndex:c}},Dt=e=>{let t=a=>e[a],n=a=>t(a).config;return{groupTagForTemplate:a=>t(a).groupTag??a,hasActorTransition:(a,c,i)=>Ce(n(a),c,i.type,!0)!==void 0,isPublicActorState:(a,c)=>c==="__INIT"||de(c)?!1:Z(t(a).config,c)}};var wt=e=>{if(ye(e))throw new Error(`[lite-fsm] reserved system action '${e.type}' cannot be dispatched.`)},_t=e=>{let{routing:t,sidecar:n}=e,o=(s,{sender:a,routingMode:c="default"}={})=>{if(!a&&c==="default"&&!("meta"in s))return{type:"continue",action:s};if(a&&!n.actorById.has(a.actorId))return{type:"drop"};let i=t.stripSenderFields(s.meta);if(a&&(i.senderActorId=a.actorId,i.senderGroupId=a.groupId,i.senderGroupTag=a.groupTag),c==="unscoped"){let l=Ue(s,t.stripRouting(i));return t.resolveRoute(l),{type:"continue",action:l}}a&&!t.hasRoute(i)&&(i.groupId=a.groupId);let u=Ue(s,i);return t.resolveRoute(u),{type:"continue",action:u}};return{normalizeAction:o,applyPostNormalize:(s,a)=>{let c=o(a,s.normalizeOpts);c.type==="continue"&&(s.committed=c.action)}}};var oo=(e,t)=>{let n=[];for(let o of t){let r=e.groupIdsByTag.get(o);if(r)for(let s of r)n.push(s)}return n},ro=e=>{let t=new Map;for(let n of e){let o=t.get(n.templateKey);o?o.push(n):t.set(n.templateKey,[n])}return t},bt=(e,t,n,o)=>{if(n===null){for(let r of e.actorIdsByTemplate.get(t)??[])o(r);return}for(let r of n){let s=e.groupById.get(r)?.actorIdsByTemplate.get(t);if(s)for(let a of s)o(a)}},Nt=e=>{let{sidecar:t,actorTemplateKeys:n,actorSpawnIndex:o,actorReduceIndex:r,spawnIdConfig:s}=e;return{resolveSpawnGroups:(i,u,l,p)=>{if(i==="group"){let v=[];for(let S of u){let h=t.groupById.get(S);h&&v.push({groupId:S,groupTag:h.groupTag})}return v}if(i==="tag"){let v=[];for(let S of u)for(let h of t.groupIdsByTag.get(S)??[])v.push({groupId:h,groupTag:S});return v}let d=[],y=new Set,k=v=>t.groupById.has(v)||y.has(v);for(let v of o.get(p.type)?.keys()??[]){let S=Mt(l,v,p,s,k);y.add(S),d.push({groupId:S,groupTag:v})}return d},forEachRoutedIdentity:(i,u,l,p,d)=>{if(i==="actor"){for(let M of u){let m=t.actorById.get(M);m&&d(m)}return}let y=i==="group"?u:i==="tag"?oo(t,u):null;if(l.length===0){for(let M of r.get(p.type)??[])bt(t,M,y,m=>{let I=t.actorById.get(m);I&&d(I)});return}let k=new Set(r.get(p.type)??[]),v=ro(l),S=new Set(u),h=M=>i==="unscoped"?!0:i==="group"?S.has(M.meta.groupId):S.has(M.meta.groupTag),A=new Set;for(let M of n){k.has(M)&&bt(t,M,y,m=>{if(A.has(m))return;let I=t.actorById.get(m);I&&(A.add(m),d(I))});for(let m of v.get(M)??[]){let I=m.meta.actorId;A.has(I)||h(m)&&(A.add(I),d(m))}}}}};var Ft=()=>({actorById:new Map,groupById:new Map,groupIdsByTag:new Map,actorIdsByTemplate:new Map,counters:{actor:0,groupByTag:new Map}}),ao=()=>({groupById:new Map,groupIdsByTag:new Map,actorIdsByTemplate:new Map}),Ot=(e,t,n)=>{let o=e.get(t);o||(o=new Set,e.set(t,o)),o.add(n)},Lt=(e,t,n)=>{let o=e.get(t);o?.delete(n),o?.size===0&&e.delete(t)},Bt=(e,t)=>{let{actorId:n,groupId:o,groupTag:r}=t.meta,s=e.groupById.get(o);s||(s={groupTag:r,actorIds:new Set,actorIdsByTemplate:new Map},e.groupById.set(o,s)),s.actorIds.add(n),Ot(s.actorIdsByTemplate,t.templateKey,n),Ot(e.actorIdsByTemplate,t.templateKey,n);let a=e.groupIdsByTag.get(r);a||(a=new Set,e.groupIdsByTag.set(r,a)),a.add(o)},io=(e,t)=>{let{actorId:n,groupId:o,groupTag:r}=t.meta;Lt(e.actorIdsByTemplate,t.templateKey,n);let s=e.groupById.get(o);if(!s||(s.actorIds.delete(n),Lt(s.actorIdsByTemplate,t.templateKey,n),s.actorIds.size>0))return;e.groupById.delete(o);let a=e.groupIdsByTag.get(r);a?.delete(o),a?.size===0&&e.groupIdsByTag.delete(r)},Kt=e=>{for(let t of e.bag.values())t();e.bag.clear()},so=(e,t,n,o,r)=>{if(o.length===0)throw new f("LITE_FSM_INVALID_ACTOR_SLICE",`Actor id for template '${n}' must be non-empty.`);if(!mt(r)||!t.isPublicActorState(n,r.state))throw new f("LITE_FSM_INVALID_ACTOR_SLICE",`Invalid actor slice '${n}.${o}'.`);let s=e.actorById.get(o);if(s){if(s.templateKey!==n)throw new f("LITE_FSM_INVALID_ACTOR_SLICE",`Actor '${o}' cannot move between actor template records.`);return{identity:s,isNew:!1}}let a=r.meta;if(!j(a))throw new f("LITE_FSM_INVALID_ACTOR_SLICE",`Actor '${o}' cannot be created by state replacement without actor meta.`);let{groupId:c,groupTag:i}=a;if(a.actorId!==o||typeof i!="string"||i!==t.groupTagForTemplate(n)||typeof c!="string"||c.length===0)throw new f("LITE_FSM_INVALID_ACTOR_SLICE",`Actor '${o}' has invalid actor meta.`);return{identity:{templateKey:n,meta:he({actorId:o,groupId:c,groupTag:i})},isNew:!0}},co=e=>{let t=ao();for(let n of e.values())Bt(t,n);return t},Vt=(e,t,n,o)=>{let r=new Set,s=new Map,a=new Map(e.actorById),c=new Map,i=[];for(let d of n){let y=o[d];if(!j(y))throw new f("LITE_FSM_INVALID_ACTOR_SLICE",`Invalid actor record '${d}'.`);let k={};for(let[v,S]of Object.entries(y)){if(r.has(v))throw new f("LITE_FSM_INVALID_ACTOR_SLICE",`Duplicate actorId '${v}'.`);r.add(v);let{identity:h,isNew:A}=so(e,t,d,v,S);k[v]={...S,meta:h.meta},A&&s.set(v,h)}c.set(d,k)}for(let[d,y]of s)a.set(d,{...y,bag:new Map});let u=new Set(n);for(let[d,y]of a)u.has(y.templateKey)&&(r.has(d)||(i.push(y),a.delete(d)));let l=co(a),p=Ae(e.counters);for(let[d,y]of s)ht(p,d,y.meta.groupId,t.originId);return{nextActorById:a,nextGroupById:l.groupById,nextGroupIdsByTag:l.groupIdsByTag,nextActorIdsByTemplate:l.actorIdsByTemplate,nextCounters:p,canonicalActorRecords:c,actorsToCleanup:i,touchedTemplateKeys:n}},uo=(e,t)=>{e.actorById=t.nextActorById,e.groupById=t.nextGroupById,e.groupIdsByTag=t.nextGroupIdsByTag,e.actorIdsByTemplate=t.nextActorIdsByTemplate,e.counters=t.nextCounters;for(let n of t.actorsToCleanup)Kt(n)},po=(e,t)=>{let n=new Set(t.pendingDeleted.map(o=>o.meta.actorId));for(let o of t.pendingSpawned){if(n.has(o.meta.actorId))continue;let r={...o,bag:new Map};e.actorById.set(o.meta.actorId,r),Bt(e,r)}for(let o of t.pendingDeleted){let r=e.actorById.get(o.meta.actorId);r&&(e.actorById.delete(o.meta.actorId),io(e,r),Kt(r))}},Ht=(e,t)=>{let n=e;for(let o of t){let r=n[o];r&&r!==ue&&Object.keys(r).length===0&&(n={...n,[o]:ue})}return n},Gt=(e,t,n)=>(t.countersDraft&&(e.counters=Rt(e.counters,t.countersDraft)),po(e,t),Ht(n,t.touchedActorRecords.keys())),zt=(e,t,n)=>{for(let[o,r]of t.canonicalActorRecords)n={...n,[o]:r};return uo(e,t),Ht(n,t.touchedTemplateKeys)},Xe=(e,t)=>{let n=[];for(let o of t){let r=e.actorById.get(o.meta.actorId);r&&n.push(r)}return n};var $t=e=>({key:e,get(t){return t.runtime.get(e)},set(t,n){t.runtime.set(e,n)}}),jt=(e,t,n,o)=>{let r=[];for(let s of t){let a=e[s],c=a.storage===void 0?o:String(a.storage),i=n.get(c);if(!i)throw new f("LITE_FSM_UNKNOWN_STORAGE_KIND",`[lite-fsm] machine '${s}' uses unknown storage kind '${c}'.`);let u={key:s,machine:a,storageKind:c};i.validateTemplate(u);let l=i.compileTemplate(u);if(l.kind!==c)throw new f("LITE_FSM_INVALID_STORAGE_RUNTIME",`[lite-fsm] storage runtime '${c}' compiled machine '${s}' with kind '${l.kind}'.`);r.push(l)}return r};var lo="instance",Yt=e=>e&&typeof e=="object"?e:{},Ut=(e,t,n)=>{let o=e.get(t);if(o)return o;let r={ctx:qe(Yt(t.options),n)};return e.set(t,r),r},qt=(e,t,n)=>{t.committed=n,t.committedPrevState=e.prevState},go=e=>!!(e&&typeof e=="object"&&"prepareAction"in e&&"reduceBucket"in e),Wt=({key:e,machine:t})=>{if(Ee(t)){ft(e,t);return}if(Z(t,"persistence"))throw new f("LITE_FSM_INVALID_ACTOR_CONFIG",`[lite-fsm] domain machine '${e}' cannot define actor persistence.`)},Xt=({key:e,storageKind:t})=>({key:e,kind:t}),Jt=({manager:e,templates:t})=>{let n=e,o=n.config,r=n.options,s=r?.originId;if(s!==void 0&&(s.length===0||s.includes(me)))throw new f("LITE_FSM_INVALID_OPTIONS",`[lite-fsm] originId must be a non-empty string without '${me}'.`);let a={originId:s,generateActorId:r?.generateActorId,generateGroupId:r?.generateGroupId},c=t.map(g=>g.key),i=[],u=[];for(let g of c)Ee(o[g])?i.push(g):u.push(g);let l=[],p=[];for(let g of i)o[g].persistence==="snapshot"?l.push(g):p.push(g);let d=!!r?.middleware?.some(Pe),y=n.schemaVersion,{groupTagForTemplate:k,hasActorTransition:v,isPublicActorState:S}=Dt(o),{domainReduceIndex:h,domainAlwaysReduce:A,actorReduceIndex:M,actorSpawnIndex:m}=Ct(o,i,u,k),I=g=>!!o[g].effects,P=u.filter(I),C=i.some(I),F=P.length>0||C;if(G)for(let g of u)o[g].groupTag&&console.warn(`[lite-fsm] groupTag on domain machine '${g}' is ignored.`);let N=Object.fromEntries(c.map(g=>[g,De(o[g],{allowActorTemplate:!0,allowVoidReducer:()=>d})])),H=Object.fromEntries(c.map(g=>[g,i.includes(g)?ue:{state:o[g].initialState,context:o[g].initialContext}])),b=Ft(),{normalizeAction:ae,applyPostNormalize:U}=_t({routing:n.routing,sidecar:b}),{resolveSpawnGroups:ie,forEachRoutedIdentity:pe}=Nt({sidecar:b,actorTemplateKeys:i,actorSpawnIndex:m,actorReduceIndex:M,spawnIdConfig:a}),ce=(g,T)=>{let x=g,O=_=>{let L=N[_],K=g[_],X=L.transition(K,T);X!==K&&(x=x===g?{...g}:x,x[_]=X)};for(let _ of A)O(_);for(let _ of h.get(T.type)??[])O(_);return x},Me=(g,T,x,O,_)=>{let L=T,K=m.get(x.type);if(!K)return L;let X=q=>b.actorById.has(q)||g.pendingSpawned.some(ge=>ge.meta.actorId===q);for(let q of ie(O,_,g,x))for(let ge of K.get(q.groupTag)??[]){let $n=o[ge],jn=he({actorId:It(g,ge,q.groupTag,x,a,X),groupId:q.groupId,groupTag:q.groupTag}),Ge={templateKey:ge,meta:jn},Un={state:"__INIT",context:{...$n.initialContext},meta:Ge.meta},dt=we(g,L,ge);dt.record[Ge.meta.actorId]=Un,L=dt.root,g.pendingSpawned.push(Ge)}return L},Ie=(g,T,x,O)=>{let L=T[x.templateKey]?.[x.meta.actorId];if(!L||!v(x.templateKey,L.state,O))return{root:T,delivered:!1};let K=we(g,T,x.templateKey),q=N[x.templateKey].transition(L,O);return G&&St(x.meta.actorId,x.templateKey,q.state,S),K.record[x.meta.actorId]={...q,meta:x.meta},{root:K.root,delivered:!0}},Ve=(g,T)=>{let x=T,O=new Set;for(let _ of[...g.pendingSpawned,...g.pendingDelivered]){if(O.has(_.meta.actorId))continue;O.add(_.meta.actorId);let K=x[_.templateKey]?.[_.meta.actorId];if(!K||!de(K.state))continue;let X=we(g,x,_.templateKey);delete X.record[_.meta.actorId],x=X.root,g.pendingDeleted.push(_)}return x},fe=g=>{if(g.scope==="plugin")throw new f("LITE_FSM_UNROUTABLE_PLUGIN_ROUTE",`[lite-fsm] instance storage cannot deliver action routed via plugin meta key '${g.key}'.`);return g},He=(g,T,x,O)=>{let _=ce(T,x);if(O.scope==="plugin")return _;let{scope:L,targetSet:K}=fe(O);return L!=="actor"&&(_=Me(g,_,x,L,K)),pe(L,K,g.pendingSpawned,x,X=>{let q=Ie(g,_,X,x);_=q.root,q.delivered&&g.pendingDelivered.push(X)}),Ve(g,_)},R={actorTemplateKeys:i,groupTagForTemplate:k,isPublicActorState:S,originId:s},E=g=>{let T=[],x=new Set,O=_=>{for(let L of _){let K=L.meta.actorId;x.has(K)||(x.add(K),T.push(L))}};O(Xe(b,g.pendingSpawned)),O(Xe(b,g.pendingDelivered)),g.effectsTargets=T},D=(g,T,x)=>i.filter(O=>g[O]===T[O]?!1:x.touchedActorRecords.get(O)!==T[O]),w=(g,T)=>{if(T.length===0)return g;let x=Vt(b,R,T,g);return zt(b,x,g)},V=(g,T,x)=>{let O=D(T,x,g),_=w(x,O);return Gt(b,g,_)},$={transition:n.transition,userDeps:{}},{condition:Te,invokeEffects:le}=Et({sidecar:b,machines:N,domainKeys:P,refs:$,onTransition:n.onTransition,createScopedDeps:n.createScopedDeps,onError:r?.onError}),Y={config:o,snapshotActorTemplateKeys:l,runtimeActorTemplateKeys:p,schemaVersion:y,groupTagForTemplate:k,onSchemaVersionMismatch:r?.onSchemaVersionMismatch,onUnknownMachineKey:r?.onUnknownMachineKey},te=$t(lo);return{initialState:H,prepareAction({action:g,options:T,dispatch:x}){let O=Yt(T),_=qe(O,b.counters);te.set(x,{ctx:_});let L=ae(g,O);return L.type==="drop"?{type:"drop"}:{type:"replace",action:L.action}},beforeReduce({action:g,dispatch:T}){let x=Ut(te,T,b.counters);return x.ctx.committed||U(x.ctx,g),x.ctx.committed?(qt(T,x.ctx,x.ctx.committed),{type:"replace",action:x.ctx.committed}):{type:"drop"}},reduceBucket(g){let{dispatch:T}=g,x=Ut(te,T,b.counters);if(x.ctx.committed||U(x.ctx,g.action),!x.ctx.committed)return{type:"skip"};qt(T,x.ctx,g.action),T.nextState=He(x.ctx,T.nextState,g.action,T.route)},commit({dispatch:g}){let T=te.get(g);T?.ctx.committed&&(g.nextState=V(T.ctx,g.prevState,g.nextState),C&&E(T.ctx))},condition(g){return Te(g)},resolveEffectInvocations({manager:g,dispatch:T}){let x=te.get(T);return!F||T.skipDelivery||!x?.ctx.committed?[]:[{prevState:x.ctx.committedPrevState,currentState:g.getState(),action:x.ctx.committed,targets:x.ctx.effectsTargets}]},invokeEffect({invocation:g,manager:T}){let x=g;$.userDeps=T.getDependencies(),le(x.prevState,x.currentState,x.action,x.targets)},dehydrate({rootState:g,options:T}){return kt(g,o,b,l,p,u,y,T)},hydrate({machines:g,baseState:T,strategy:x,source:O,mode:_}){let L=vt(T,{schemaVersion:y,machines:g},x,O,Y,_==="preview"?"preview":"commit");if(_==="preview")return{nextState:L.nextState,changed:L.nextState!==T};if(L.nextState===T)return{nextState:T,changed:!1};let K=w(L.nextState,L.changedActorTemplateKeys);return G&&Q(K),{nextState:K,changed:!0}},resolveIdentity({action:g}){let T=g.meta?.actorId;return typeof T=="string"?b.actorById.get(T):void 0}}},W=e=>{if(!go(e))throw new Error("[lite-fsm] invalid instance storage runtime state.");return e};var Je="instance",Qt={kind:Je,reduceScope:"bucket",validateTemplate(e){Wt(e)},compileTemplate(e){return Xt(e)},createRuntimeState(e){return Jt(e)},createPublicInitialState({template:e,state:t}){return W(t).initialState[e.key]},prepareAction(e){return W(e.state).prepareAction(e)},beforeReduce(e){return W(e.state).beforeReduce(e)},reduceBucket(e){return W(e.state).reduceBucket(e)},commit(e){W(e.state).commit(e)},effects:{condition(e){return W(e.state).condition(e.predicate)},resolveInvocations(e){return W(e.state).resolveEffectInvocations(e)},invoke(e){W(e.state).invokeEffect(e)}},snapshot:{dehydrate(e){return{machines:W(e.state).dehydrate(e).machines}},hydrate(e){return W(e.state).hydrate(e)}},identity:{resolve(e){return W(e.state).resolveIdentity(e)}}};var Zt="@lite-fsm/core/instance-runtime",en={name:Zt,storage:[{owner:Zt,kind:Je,value:Qt}],routeMeta:[],scopedDeps:[],scopedTransition:[],manager:[],hooks:{}};var tn={name:"@lite-fsm/core/default-runtime",defaultStorageKind:"instance",plugins:[en]};var Ne=e=>{if(e===null||typeof e!="object"||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null},yo=e=>e.map(t=>`'${t}'`).join(", "),J=(e,t)=>{throw new f("LITE_FSM_INVALID_STORAGE_CALLBACK_RESULT",`[lite-fsm] ${e} returned invalid callback result; expected ${t}.`)},_e=(e,t)=>{throw new f("LITE_FSM_INVALID_PLUGIN_CALLBACK_RESULT",`[lite-fsm] ${e} returned invalid callback result; expected ${t}.`)},Oe=(e,t,n,o,r)=>{for(let s of Object.keys(t))n.has(s)||o(e,r)},on=(e,t)=>{if(t===null||typeof t!="object"||Array.isArray(t))throw new f("LITE_FSM_INVALID_REPLACEMENT_ACTION",`[lite-fsm] ${e} returned invalid replacement action; expected an object with string 'type'.`);if(typeof t.type!="string")throw new f("LITE_FSM_INVALID_REPLACEMENT_ACTION",`[lite-fsm] ${e} returned invalid replacement action; expected an object with string 'type'.`);if(ye(t))throw new f("LITE_FSM_INVALID_REPLACEMENT_ACTION",`[lite-fsm] ${e} returned reserved system replacement action '${t.type}'.`);return t},mo=new Set(["type","action"]),xe="undefined, { type: 'drop' }, or { type: 'replace', action }",rn=(e,t)=>{if(t!==void 0)return Ne(t)?(Oe(e,t,mo,J,xe),t.type==="drop"?"action"in t?J(e,xe):{type:"drop"}:t.type==="replace"&&"action"in t?{type:"replace",action:on(e,t.action)}:J(e,xe)):J(e,xe)},So=new Set(["type"]),Qe="undefined or { type: 'skip' }",Ze=(e,t)=>{if(t!==void 0)return Ne(t)?(Oe(e,t,So,J,Qe),t.type==="skip"?{type:"skip"}:J(e,Qe)):J(e,Qe)},an=(e,t)=>typeof t=="boolean"?t:J(e,"a boolean"),fo=new Set(["action","skipDelivery","stopInterceptors"]),be=`undefined or a plain object with known fields ${yo(["action","skipDelivery","stopInterceptors"])}`,sn=(e,t)=>{if(t!==void 0)return!Ne(t)||(Oe(e,t,fo,_e,be),"skipDelivery"in t&&typeof t.skipDelivery!="boolean")||"stopInterceptors"in t&&typeof t.stopInterceptors!="boolean"?_e(e,be):{..."action"in t&&t.action!==void 0?{action:on(e,t.action)}:{},..."skipDelivery"in t?{skipDelivery:t.skipDelivery}:{},..."stopInterceptors"in t?{stopInterceptors:t.stopInterceptors}:{}}},Ro=new Set(["data"]),nn="undefined or a plain object with the only public field 'data'",cn=(e,t)=>{if(t!==void 0)return Ne(t)?(Oe(e,t,Ro,J,nn),t):J(e,nn)};var dn=["validateTemplate","compileTemplate","createRuntimeState","createPublicInitialState","commit"],un=["prepareAction","beforeReduce"],ho=["acceptsEvent","reduce"],Eo=["reduceBucket"],pn={effects:{required:["resolveInvocations","invoke"],optional:["condition"]},snapshot:{required:["dehydrate","hydrate"]},identity:{required:["resolve"]},reactions:{required:["run"]}},Ao=new Set(["kind","reduceScope","routeMetaKeys",...dn,...un,...ho,...Eo,...Object.keys(pn)]),ln=(e,t,n)=>{!z(e,t)||e[t]===void 0||ne(e[t],`${n} must be a function.`)},xo=e=>{if(!z(e,"routeMetaKeys")||e.routeMetaKeys===void 0)return;let t=e.routeMetaKeys;Array.isArray(t)&&t.every(n=>typeof n=="string")||B("storage runtime 'routeMetaKeys' must be an array of strings.")},Mo=e=>!z(e,"reduceScope")||e.reduceScope===void 0?"template":e.reduceScope==="template"||e.reduceScope==="bucket"?e.reduceScope:B("storage runtime 'reduceScope' must be 'template' or 'bucket'."),Io=e=>{if(Mo(e)==="bucket"){ne(e.reduceBucket,"storage runtime 'reduceBucket' must be a function."),z(e,"acceptsEvent")&&e.acceptsEvent!==void 0&&B("storage runtime 'acceptsEvent' is not allowed with reduceScope 'bucket'."),z(e,"reduce")&&e.reduce!==void 0&&B("storage runtime 'reduce' is not allowed with reduceScope 'bucket'.");return}ne(e.acceptsEvent,"storage runtime 'acceptsEvent' must be a function."),ne(e.reduce,"storage runtime 'reduce' must be a function."),z(e,"reduceBucket")&&e.reduceBucket!==void 0&&B("storage runtime 'reduceBucket' is not allowed with reduceScope 'template'.")},To=(e,t,n)=>{if(!z(e,t)||e[t]===void 0)return;oe(e[t])||B(`storage runtime '${t}' must be a plain object.`);let o=e[t],r=new Set([...n.required,...n.optional??[]]);for(let s of Object.keys(o))r.has(s)||B(`unknown storage runtime '${t}' method '${s}'.`);for(let s of n.required)ne(o[s],`storage runtime '${t}.${s}' must be a function.`);for(let s of n.optional??[])ln(o,s,`storage runtime '${t}.${s}'`)},gn=e=>{if(!oe(e))return B("storage runtime definition must be a plain object.");for(let t of Object.keys(e))Ao.has(t)||B(`unknown storage runtime field '${t}'.`);et(e.kind,"storage runtime kind must be a non-empty string."),xo(e);for(let t of dn)ne(e[t],`storage runtime '${t}' must be a function.`);for(let t of un)ln(e,t,`storage runtime '${t}'`);Io(e);for(let[t,n]of Object.entries(pn))To(e,t,n);return e},yn=(e,t)=>({...t,...t.routeMetaKeys===void 0?{}:{routeMetaKeys:[...t.routeMetaKeys]},kind:e,compileTemplate(n){let o=t.compileTemplate,r=cn(`storage runtime '${e}' compileTemplate`,o(n));return r===void 0?{key:n.key,kind:e}:Object.assign({},r,{key:n.key,kind:e})}});var mn=Symbol.for("lite-fsm.storage-runtime.value"),Sn=Symbol.for("lite-fsm.storage-runtime.payload"),vo=e=>{let t=gn(e),n=t.kind,o=yn(n,t),r={kind:n};return Object.defineProperties(r,{[mn]:{value:!0},[Sn]:{value:o}}),Object.freeze(r)},fn=e=>oe(e)&&Reflect.get(e,mn)===!0,Rn=e=>Reflect.get(e,Sn);function ko(){return arguments.length>0&&B("defineStorageRuntime must be called without arguments; use defineStorageRuntime().create(...)."),{create(e){return vo(e)}}}var Le=["beforeReduce","afterReduce","beforeCommit","beforeSubscribers","beforeEffects","afterEffects"];var z=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),oe=e=>{if(e===null||typeof e!="object"||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null},En=e=>e?.plugins??[],B=e=>{throw new f("LITE_FSM_INVALID_PLUGIN_DEFINITION",`[lite-fsm] invalid plugin definition: ${e}`)},et=(e,t)=>typeof e=="string"&&e.length>0?e:B(t),ne=(e,t)=>typeof e=="function"?e:B(t),Po=new Set(["name","routeMeta","manager","storage","scopedDeps","scopedTransition","intercept","hooks"]),Co=new Set(Le),Do=e=>{for(let t of Object.keys(e))Po.has(t)||B(`unknown top-level section '${t}'.`)},Fe=(e,t)=>{if(!oe(t))return B(`section '${e}' must be a plain object.`);let n=Object.entries(t);return n.length===0&&B(`section '${e}' must not be empty.`),n},Be=(e,t,n)=>ne(n,`section '${e}' entry '${t}' must be a function.`),wo=e=>Co.has(e)?e:B(`unknown dispatch hook phase '${e}'.`),_o=e=>Array.isArray(e)?e.length===0?B("section 'storage' must not be empty."):e.map(t=>fn(t)?t:B("storage definitions require defineStorageRuntime().create(...).")):B("section 'storage' must be an array of storage definitions."),bo=(e,t)=>{let n=new Set;return _o(t).map(o=>(n.has(o.kind)&&B(`plugin '${e}' defines duplicate storage kind '${o.kind}'.`),n.add(o.kind),{owner:e,kind:o.kind,value:Rn(o)}))},An=e=>e.storage,No=(e,t)=>Fe("routeMeta",t).map(([n,o])=>({owner:e,key:n,resolver:Be("routeMeta",n,o)})),Oo=(e,t)=>Fe("manager",t).map(([n,o])=>({owner:e,key:n,factory:Be("manager",n,o)})),hn=(e,t,n)=>Fe(e,n).map(([o,r])=>({owner:t,key:o,factory:Be(e,o,r)})),Lo=(e,t)=>{let n={};for(let[o,r]of Fe("hooks",t)){let s=wo(o);n[s]={owner:e,phase:s,hook:Be("hooks",o,r)}}return n},xn=e=>{if(!oe(e))return B("definition must be a plain object.");Do(e);let t=et(e.name,"name must be a non-empty string."),n={name:t,storage:z(e,"storage")?bo(t,e.storage):[],routeMeta:z(e,"routeMeta")?No(t,e.routeMeta):[],scopedDeps:z(e,"scopedDeps")?hn("scopedDeps",t,e.scopedDeps):[],scopedTransition:z(e,"scopedTransition")?hn("scopedTransition",t,e.scopedTransition):[],manager:z(e,"manager")?Oo(t,e.manager):[],hooks:z(e,"hooks")?Lo(t,e.hooks):{}};return z(e,"intercept")?{...n,intercept:ne(e.intercept,"section 'intercept' must be a function.")}:n};var Mn=Symbol.for("lite-fsm.plugin.value"),In=Symbol.for("lite-fsm.plugin.payload"),Fo=e=>{let t=xn(e),n={name:t.name};return Object.defineProperties(n,{[Mn]:{value:!0},[In]:{value:t}}),Object.freeze(n)};function Bo(){return arguments.length>0&&B("definePlugin must be called without arguments; use definePlugin().create(...)."),{create(e){return Fo(e)}}}var Tn=e=>oe(e)&&Reflect.get(e,Mn)===!0,vn=e=>Reflect.get(e,In);var ee=e=>{if(!G)return e;let t={...e};return e.meta!==void 0&&(t.meta=Object.freeze({...e.meta})),Object.freeze(t)};var Ko=Symbol.for("@lite-fsm/performance-trace"),kn="@lite-fsm/core/transition-trace",tt=0,Vo=()=>{let e=globalThis[Ko];if(!e||typeof e!="object")return;let t=e.records;if(Array.isArray(t))return e},Pn=e=>{let t=Vo();if(!t)return;let n=tt;tt+=1;let o=[],r=[],s=!1;return{depth:n,now(){return performance.now()},record(a,c,i){if(s)return;let u=performance.now()-c;if(i?.runtimeKind!==void 0){o.push({key:a,durationMs:u,runtimeKind:i.runtimeKind});return}o.push({key:a,durationMs:u})},count(a,c=1){s||r.push({key:a,value:c})},finish(a){s||(s=!0,tt-=1,t.records.push({actionType:e,depth:n,status:a,phases:o,counters:r}))}}},nt=e=>e?(t,n)=>{let o=e.now();try{return n()}finally{e.record(t,o)}}:(t,n)=>n(),Se=e=>e?(t,n,o)=>{let r=e.now();try{return o()}finally{e.record(`core.bucket.${t}.${n}`,r,{runtimeKind:n})}}:(t,n,o)=>o(),Cn=(e,t)=>{t&&e.runtime.set(kn,t)},se=e=>{let t=e.runtime.get(kn);if(!t||typeof t!="object")return;let n=t;if(!(typeof n.depth!="number"||typeof n.now!="function"||typeof n.record!="function"||typeof n.count!="function"||typeof n.finish!="function"))return n};var re=(e,t)=>({action:ee(e),originalAction:ee(t.originalAction)}),Dn=(e,t,n,o,r)=>{let s=(i,u,l,p,d)=>{let y=Se(se(l.dispatch)),k=u;for(let v of e){let S=p(v.runtime);if(!S)continue;let h=v.runtime.kind,A=y(i,h,()=>rn(`storage runtime '${h}' ${i}`,r(`storage.${i}`,()=>S(d(v,k)))));if(A?.type==="drop")return{type:"drop"};A?.type==="replace"&&(k=A.action,l.route=n(k))}return{type:"continue",action:k}},a=(i,u,l,p)=>{Ze(`storage runtime '${i.kind}' reduceBucket`,r("storage.reduceBucket",()=>i.reduceBucket({templates:u.templates,...re(l,p),state:u.state,manager:t,dispatch:p.dispatch})))?.type!=="skip"&&p.touched.add(i.kind)},c=(i,u,l,p)=>{for(let d of u.templates){if(!an(`storage runtime '${i.kind}' acceptsEvent`,r("storage.acceptsEvent",()=>i.acceptsEvent({template:d,...re(l,p),state:u.state,dispatch:p.dispatch}))))continue;Ze(`storage runtime '${i.kind}' reduce`,r("storage.reduce",()=>i.reduce({template:d,...re(l,p),state:u.state,manager:t,dispatch:p.dispatch})))?.type!=="skip"&&p.touched.add(i.kind)}};return{prepareAction(i,u,l){return s("prepareAction",i,l,p=>p.prepareAction,(p,d)=>({...re(d,l),options:u,state:p.state,manager:t,dispatch:l.dispatch}))},beforeReduce(i,u){return s("beforeReduce",i,u,l=>l.beforeReduce,(l,p)=>({...re(p,u),state:l.state,manager:t,dispatch:u.dispatch}))},reduce(i,u){let l=Se(se(u.dispatch));for(let p of e){let d=p.runtime;l("reduce",d.kind,()=>d.reduceScope==="bucket"?a(d,p,i,u):c(d,p,i,u))}return u.nextState},markExternallyChangedBuckets(i,u,l){for(let p of e)if(!l.touched.has(p.runtime.kind)){for(let d of p.templates)if(i[d.key]!==u[d.key]){l.touched.add(p.runtime.kind);break}}},commit(i){let u=Se(se(i.dispatch));for(let l of e)i.touched.has(l.runtime.kind)&&u("commit",l.runtime.kind,()=>{r("storage.commit",()=>{l.runtime.commit({...re(i.action,i),state:l.state,manager:t,dispatch:i.dispatch})})})},runReactions(i,u){let l=Se(se(u.dispatch));for(let p of e){let d=p.runtime.reactions;!u.touched.has(p.runtime.kind)||!d||l("reactions",p.runtime.kind,()=>{r("storage.reactions",()=>{d.run({...re(i,u),state:p.state,manager:t,dispatch:u.dispatch})})})}},runEffects(i){let u=Se(se(i.dispatch));for(let l of e){let p=l.runtime.effects;if(!i.touched.has(l.runtime.kind)||!p)continue;let d=l.runtime.kind,y=u("effects.resolve",d,()=>p.resolveInvocations({...re(i.action,i),state:l.state,manager:t,dispatch:i.dispatch}));u("effects.invoke",d,()=>{for(let k of y)p.invoke({invocation:k,...re(i.action,i),state:l.state,manager:t,dispatch:i.dispatch})})}},condition(i){let u=e.find(l=>l.runtime.kind===o);return u?.runtime.effects?.condition?u.runtime.effects.condition({predicate:l=>i(ee(l)),state:u.state,manager:t}):Promise.resolve(!1)}}},wn=(e,t,n,o)=>{for(let r of e)r.state=r.runtime.createRuntimeState({templates:r.templates,manager:o});return Object.fromEntries(n.map(r=>{let s=t.get(r.kind);return[r.key,s?.runtime.createPublicInitialState({template:r,state:s.state})]}))},_n=(e,t)=>{let n=new Map;for(let{kind:o,runtime:r}of t)n.set(o,{runtime:r,templates:[],state:void 0});for(let o of e)n.get(o.kind)?.templates.push(o);return[...n.values()]};var bn=["actorId","groupId","groupTag"],Nn=["senderActorId","senderGroupId","senderGroupTag"],Ho=new Set([...bn,...Nn]),ot={scope:"unscoped",key:void 0,targetSet:[]},rt=e=>{let t=Array.isArray(e)?e:[e];return[...new Set(t)]},Go=(e,t)=>{if(typeof t=="string")return[t];if(Array.isArray(t)&&t.every(n=>typeof n=="string"))return[...new Set(t)];throw new f("LITE_FSM_INVALID_ROUTE_RESOLVER_RESULT",`[lite-fsm] route resolver for meta key '${e}' must return a string or an array of strings.`)},at=e=>e===void 0?"unowned registration":`plugin '${e}'`,On=()=>{let e=new Map,t=a=>{let c=[];a.actorId!==void 0&&c.push("actorId");for(let i of e.keys())a[i]!==void 0&&c.push(i);return a.groupId!==void 0&&c.push("groupId"),a.groupTag!==void 0&&c.push("groupTag"),c},n=(a,c,i)=>{for(let u of i)a[u]!==void 0&&(c[u]=a[u])},o=(a,c)=>{let i=a,u={};return i&&(n(i,u,c),n(i,u,[...e.keys()])),u},r=a=>{let c=a.meta;if(!c)return ot;let i=t(c);if(i.length===0)return ot;if(i.length>1)throw new f("LITE_FSM_AMBIGUOUS_ROUTE_META",`[lite-fsm] action meta contains multiple route keys: ${i.join(", ")}. Use one route key per transition or dispatch separate actions.`);if(c.actorId!==void 0)return{scope:"actor",key:"actorId",targetSet:rt(c.actorId)};for(let[u,l]of e){let p=c[u];if(p!==void 0)return{scope:"plugin",key:u,targetSet:Go(u,l.resolver(p,{key:u,action:ee(a),meta:c}))}}return c.groupId!==void 0?{scope:"group",key:"groupId",targetSet:rt(c.groupId)}:c.groupTag!==void 0?{scope:"tag",key:"groupTag",targetSet:rt(c.groupTag)}:ot};return{registry:Object.freeze({registerRouteMeta(a,c,i){if(Ho.has(a))throw new f("LITE_FSM_DUPLICATE_ROUTE_META_KEY",`[lite-fsm] duplicate routeMeta key '${a}': ${at(i)} conflicts with core reserved routeMeta key '${a}'.`);let u=e.get(a);if(u)throw new f("LITE_FSM_DUPLICATE_ROUTE_META_KEY",`[lite-fsm] duplicate routeMeta key '${a}': ${at(u.owner)} conflicts with ${at(i)}.`);e.set(a,{owner:i,resolver:c})}}),get registeredMetaKeys(){return[...e.keys()]},hasMetaKey(a){return e.has(a)},stripSenderFields(a){return o(a,bn)},stripRouting(a){return o(a,Nn)},hasRoute(a){let c=a;return c?t(c).length>0:!1},resolveRoute:r}};var zo=new Set(["getState","getSnapshot","getHydratedState","hydrate","dehydrate","transition","setDependencies","onTransition","replaceReducer"]),$o=new Set(["action","condition","self","transition"]),jo=new Set(["actor","group","tag","transition","unscoped"]),Fn=(e,t,n,o)=>`[lite-fsm] duplicate ${e} key '${t}': plugin '${n}' conflicts with plugin '${o}'.`,Ln=(e,t)=>{let n=[],o=new Map;return{add:a=>{if(a.key.length===0)throw new f("LITE_FSM_INVALID_SCOPED_EXTENSION",`[lite-fsm] plugin '${a.owner}' registered invalid ${e.label} extension key.`);let c=o.get(a.key);if(c!==void 0)throw new f("LITE_FSM_DUPLICATE_SCOPED_EXTENSION_KEY",Fn(e.section,a.key,c,a.owner));if(t.has(a.key))throw new f("LITE_FSM_SCOPED_EXTENSION_CORE_KEY",`[lite-fsm] plugin '${a.owner}' cannot override core scoped ${e.label} key '${a.key}'.`);o.set(a.key,a.owner),n.push(a)},assertNoOverride:(a,c)=>{if(a.key in c)throw new f("LITE_FSM_SCOPED_EXTENSION_OVERRIDE",`[lite-fsm] plugin '${a.owner}' cannot override existing scoped ${e.label} key '${a.key}'.`)},entries:n}},Uo=()=>{let e=new Map;return{registry:Object.freeze({register(n,o,r){let s=e.get(n);if(s)throw new f("LITE_FSM_DUPLICATE_STORAGE_KIND",`[lite-fsm] duplicate storage kind '${n}': plugin '${s.owner}' conflicts with plugin '${r}'.`);if(o.kind!==n)throw new f("LITE_FSM_INVALID_STORAGE_RUNTIME",`[lite-fsm] storage runtime registered for kind '${n}' declared kind '${o.kind}'.`);e.set(n,{owner:r,runtime:o})},get(n){return e.get(n)?.runtime}}),list:()=>[...e].map(([n,o])=>({kind:n,runtime:o.runtime})),values:()=>[...e.values()].map(n=>n.runtime)}},Bn=({defaultStorageKind:e})=>{let t=new Set,n=Uo(),o=Ln({section:"scopedDeps",label:"dep"},$o),r=Ln({section:"scopedTransition",label:"transition"},jo),s=[],a=[],c=new Map,i=Object.fromEntries(Le.map(d=>[d,[]])),u=On(),l=d=>{if(zo.has(d.key))throw new f("LITE_FSM_MANAGER_EXTENSION_CORE_KEY",`[lite-fsm] plugin '${d.owner}' cannot register manager extension '${d.key}' because it is a core manager key.`);let y=c.get(d.key);if(y!==void 0)throw new f("LITE_FSM_DUPLICATE_MANAGER_EXTENSION_KEY",Fn("manager",d.key,y,d.owner));c.set(d.key,d.owner),a.push(d)},p=(d,y)=>{if(r.entries.length===0)return d;let k=Object.assign((S=>y.transition(S)),d),v={...y,transition:k};for(let S of r.entries)r.assertNoOverride(S,k),k[S.key]=S.factory(v);return k};return{defaultStorageKind:e,storage:n.registry,routing:u,listStorageRuntimes:n.list,listActionInterceptors:()=>s,listDispatchHooks:d=>i[d],createScopedDeps(d,y){if(o.entries.length===0&&r.entries.length===0)return d;let k=p(y.transition,y),v={...d,transition:k},S={...y,transition:k};for(let h of o.entries)o.assertNoOverride(h,v),v[h.key]=h.factory(S);return v},attachManagerExtensions(d,y){for(let{key:k,factory:v}of a)Object.defineProperty(d,k,{value:v(y),enumerable:!0,configurable:!0,writable:!0});return d},addPlugin(d){if(t.has(d.name))throw new f("LITE_FSM_DUPLICATE_PLUGIN",`[lite-fsm] duplicate plugin name '${d.name}'.`);t.add(d.name);for(let y of An(d))n.registry.register(y.kind,y.value,y.owner);for(let y of d.routeMeta)u.registry.registerRouteMeta(y.key,y.resolver,y.owner);for(let y of d.scopedDeps)o.add(y);for(let y of d.scopedTransition)r.add(y);for(let y of d.manager)l(y);d.intercept&&s.push({owner:d.name,intercept:d.intercept});for(let y of Object.values(d.hooks))i[y.phase].push(y.hook)},assertDefaultStorageRegistered(){if(!n.registry.get(e))throw new f("LITE_FSM_MISSING_DEFAULT_STORAGE_KIND",`[lite-fsm] default storage kind '${e}' is not registered.`)},assertStorageRouteResolversRegistered(){for(let d of n.values())for(let y of d.routeMetaKeys??[])if(!u.hasMetaKey(y))throw new f("LITE_FSM_MISSING_ROUTE_META_RESOLVER",`[lite-fsm] storage runtime '${d.kind}' requires route resolver for meta key '${y}'.`)}}};var st=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),Kn=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),it=()=>{throw new Error("[lite-fsm] snapshot is not supported by the configured storage runtimes.")},Vn=(e,t,n)=>{let o=t.get(e);if(o)return o;throw new f("LITE_FSM_UNKNOWN_STORAGE_KIND",`[lite-fsm] ${n}: unknown storage kind '${e}'.`)},Ke=(e,t,n)=>{if(t.runtime.snapshot)return t.runtime.snapshot;throw new f("LITE_FSM_UNSUPPORTED_STORAGE_SNAPSHOT",`[lite-fsm] ${n}: storage runtime '${e}' does not support snapshots.`)},qo=(e,t)=>{if(!Kn(t))throw new f("LITE_FSM_INVALID_STORAGE_RUNTIME",`[lite-fsm] dehydrate: storage runtime '${e}' snapshot.dehydrate() must return an object.`);for(let n of Object.keys(t))if(!(n==="machines"||n==="snapshot"))throw new f("LITE_FSM_INVALID_STORAGE_RUNTIME",`[lite-fsm] dehydrate: storage runtime '${e}' returned unknown snapshot field '${n}'.`);if(st(t,"machines")&&t.machines!==void 0&&!Kn(t.machines))throw new f("LITE_FSM_INVALID_STORAGE_RUNTIME",`[lite-fsm] dehydrate: storage runtime '${e}' returned invalid machines snapshot.`);return t},Hn=e=>{let{buckets:t,bucketsByKind:n,templateKindByKey:o,defaultStorageKind:r,managerContext:s,getState:a,getSchemaVersion:c}=e,i=(S,h)=>{if(S)return S.machines===void 0?S:{...S,machines:h??[]}},u=S=>{let h=S?.storage;if(h===void 0)return new Set(t.filter(M=>M.runtime.snapshot).map(M=>M.runtime.kind));let A=new Set;for(let M of h){let m=Vn(M,n,"dehydrate");Ke(M,m,"dehydrate"),A.add(M)}return A},l=(S,h)=>{let A=S?.machines;if(!A)return new Set(t.filter(m=>m.runtime.snapshot&&m.templates.length>0).map(m=>m.runtime.kind));let M=new Set;for(let m of A){if(!st(e.config,m))throw new f("LITE_FSM_INVALID_HYDRATION_ENVELOPE",`[lite-fsm] dehydrate: unknown machine key '${m}'.`);let I=o.get(m),P=n.get(I);Ke(I,P,"dehydrate"),M.add(I);let C=h.get(I)??[];C.push(m),h.set(I,C)}return M},p=S=>{let h=new Map,A=l(S,h),M=u(S),m=new Set([...A,...M]);if(m.size===0&&!t.some(F=>F.runtime.snapshot))return it();let I={},P={};for(let F of t){let N=F.runtime.kind;if(!m.has(N))continue;let H=Ke(N,F,"dehydrate"),b=qo(N,H.dehydrate({state:F.state,manager:s,rootState:a(),options:i(S,h.get(N))}));b.machines!==void 0&&Object.assign(I,b.machines),M.has(N)&&st(b,"snapshot")&&b.snapshot!==void 0&&(P[N]=b.snapshot)}let C={schemaVersion:c(),machines:I};return Object.keys(P).length>0&&(C.storage=P),C},d=(S,h)=>{let A=S.get(h);if(A)return A;let M=Vn(h,n,"hydrate");Ke(h,M,"hydrate");let m={bucket:M,machines:{},hasStorageSnapshot:!1};return S.set(h,m),m},y=()=>{let S=n.get(r);if(S?.runtime.snapshot)return S;let h=t.find(A=>A.runtime.snapshot);return h||it()},k=S=>{let h=new Map,A;for(let[M,m]of Object.entries(S.machines)){let I=o.get(M);if(!I){let P=A?.bucket??y();A=d(h,P.runtime.kind),A.machines[M]=m;continue}d(h,I).machines[M]=m}for(let[M,m]of Object.entries(S.storage??{})){let I=d(h,M);I.storageSnapshot=m,I.hasStorageSnapshot=!0}return t.map(M=>h.get(M.runtime.kind)).filter(M=>!!M)};return{dehydrate:p,hydrate:(S,h,A,M,m)=>{let I=We(S),P=k(I);if(P.length===0&&!t.some(N=>N.runtime.snapshot))return it();if(A!=="preview"&&Object.keys(I.machines).length>0){let N=c();I.schemaVersion!==N&&s.options?.onSchemaVersionMismatch?.(I.schemaVersion,N)}let C=M,F=!1;for(let N of P){let H=N.bucket.runtime.snapshot.hydrate({state:N.bucket.state,manager:s,machines:N.machines,snapshot:N.hasStorageSnapshot?N.storageSnapshot:void 0,baseState:C,strategy:h,source:m,mode:A});H.changed&&(C=H.nextState,F=!0)}return{nextState:C,changed:F}}}};var Gn=e=>{throw new f("LITE_FSM_REENTRANT_TRANSITION_FORBIDDEN",`[lite-fsm] transition cannot be called during dispatch phase '${e}'.`)};var Yo=e=>{if(Tn(e))return e;throw new f("LITE_FSM_INVALID_PLUGIN_DEFINITION","[lite-fsm] invalid plugin definition: MachineManager plugins must be values returned by definePlugin().create(...).")},zn=e=>function(n,o){let r=R=>R,s=R=>R,a=Bn({defaultStorageKind:e.defaultStorageKind});for(let R of e.plugins)a.addPlugin(R);for(let R of En(o))a.addPlugin(vn(Yo(R)));a.assertDefaultStorageRegistered(),a.assertStorageRouteResolversRegistered();let c=jt(n,Object.keys(n),a.storage,a.defaultStorageKind),i=_n(c,a.listStorageRuntimes()),u=new Map(i.map(R=>[R.runtime.kind,R])),l=new Map(c.map(R=>[R.key,R.kind])),p={},d=[],y={},k=null,v=null,S=(R,E)=>{let D=v;v=R;try{return E()}finally{v=D}},h=()=>{if(!k)throw new f("LITE_FSM_NO_ACTIVE_DISPATCH","[lite-fsm] no active dispatch context; transition() must be called via MachineManager API.");return k},A=()=>p,M=(R,E,D)=>{for(let w of d)w(R,E,D)},m=R=>(d.push(R),()=>{d=d.filter(E=>E!==R)}),I={config:n,options:o,schemaVersion:o?.schemaVersion,routing:a.routing,getState:A,transition:(R,E)=>fe(s(R),E),onTransition:R=>m(R),getDependencies:()=>y,createScopedDeps:(R,E)=>a.createScopedDeps(R,{...E,event:ee(E.event)})},P=I,C=Dn(i,P,a.routing.resolveRoute,a.defaultStorageKind,S);p=wn(i,u,c,P);let F=Hn({config:n,buckets:i,bucketsByKind:u,templateKindByKey:l,defaultStorageKind:a.defaultStorageKind,managerContext:P,getState:A,getSchemaVersion:()=>o?.schemaVersion}),N=(R,E)=>{let D=new Map,w,V={get options(){return E},get runtime(){return D},get route(){return w.route},get prevState(){return w.prevState},get nextState(){return w.nextState},set nextState($){w.nextState=$},get skipDelivery(){return w.skipDelivery},reportError($){o?.onError?.($)}};return w={originalAction:R,action:R,skipDelivery:!1,route:a.routing.resolveRoute(R),prevState:p,nextState:p,nextCalled:!1,outcome:{type:"active"},touched:new Set,dispatch:V},w},H=(R,E)=>{R.action=E,R.route=a.routing.resolveRoute(E)},b=R=>{let E=ee(R.originalAction),D=ee(R.action);return{get options(){return R.dispatch.options},get runtime(){return R.dispatch.runtime},originalAction:E,action:D,get skipDelivery(){return R.skipDelivery},reportError(w){R.dispatch.reportError(w)}}},ae=R=>{for(let{owner:E,intercept:D}of a.listActionInterceptors()){let w=`plugin '${E}' intercept`,V=b(R),$=sn(w,S("plugin.intercept",()=>D(V)));if($?.action!==void 0&&H(R,$.action),$?.skipDelivery===!0&&(R.skipDelivery=!0),$?.stopInterceptors===!0)return}},U=(R,E)=>{let D=`hook.${R}`;for(let w of a.listDispatchHooks(R))S(D,()=>{w(b(E))})},ie=(R,E)=>{p=R;let D=h();return D.nextState=R,C.reduce(r(E),D)},pe=R=>{ie=R(ie)},ce=(R,E,D)=>{if(R.skipDelivery){D("core.rootReducer",()=>{R.nextState=E});return}let w=D("core.rootReducer",()=>{let V=ie(E,s(R.action));if(V===void 0)throw new Error(Re);return V});D("core.markExternallyChangedBuckets",()=>{w!==E&&C.markExternallyChangedBuckets(E,w,R)}),R.nextState=w},Me=R=>{let E=h(),D=nt(se(E.dispatch));if(E.nextCalled)throw new Error("[lite-fsm] middleware called next() more than once for a single transition.");E.nextCalled=!0;let w=p;E.prevState=w,E.nextState=w,H(E,r(R));let V=D("core.beforeReduce.total",()=>C.beforeReduce(r(R),E));return V.type==="drop"?(E.outcome={type:"drop",action:E.originalAction},s(E.originalAction)):(H(E,V.action),D("core.interceptors",()=>ae(E)),D("core.hooks.beforeReduce",()=>U("beforeReduce",E)),ce(E,w,D),D("core.hooks.afterReduce",()=>U("afterReduce",E)),D("core.hooks.beforeCommit",()=>U("beforeCommit",E)),D("core.commit.total",()=>C.commit(E)),p=E.nextState,G&&Q(p),D("core.hooks.beforeSubscribers",()=>U("beforeSubscribers",E)),D("core.reactions.total",()=>C.runReactions(E.action,E)),D("core.subscribers",()=>M(w,p,s(E.action))),s(E.action))},Ie=o?.middleware,Ve=(()=>{if(!Ie?.length)return Me;let R={getState:A,transition:E=>fe(E),replaceReducer:pe,onTransition:m,condition:E=>C.condition(E)};return ke(...Ie.map(E=>E(R)))(Me)})();o?.snapshot&&(p=F.hydrate(o.snapshot,"replace","init",p,"opts.snapshot").nextState),G&&Q(p);function fe(R,E){v&&Gn(v);let D=R,w=Pn(typeof D?.type=="string"?D.type:void 0),V=nt(w),$=w?.now(),Te="ok";try{V("core.assertUserAction",()=>wt(R));let le=r(R),Y=V("core.createDispatch",()=>{let T=N(le,E);return Cn(T.dispatch,w),T}),te=V("core.prepareAction.total",()=>C.prepareAction(le,E,Y));if(te.type==="drop")return R;H(Y,te.action);let ct=k;k=Y;let g;try{g=Ve(s(te.action))}finally{k=ct}return Y.outcome.type==="drop"?s(Y.outcome.action):Y.nextCalled?(V("core.hooks.beforeEffects",()=>U("beforeEffects",Y)),V("core.effects.total",()=>C.runEffects(Y)),V("core.hooks.afterEffects",()=>U("afterEffects",Y)),s(Y.action)):g}catch(le){throw Te="error",le}finally{w&&$!==void 0&&w.record("core.transition.total",$),w?.finish(Te)}}let He={getState:A,getSnapshot:()=>({schemaVersion:o?.schemaVersion,machines:{...p}}),getHydratedState:(R,{strategy:E="merge",baseState:D=p}={})=>F.hydrate(R,E,"preview",D,"hydrate").nextState,hydrate(R,{strategy:E="merge"}={}){let D=p,w=F.hydrate(R,E,"commit",D,"hydrate");w.changed&&(p=w.nextState,G&&Q(p),M(D,p,{type:ze,payload:{strategy:E,snapshot:R}}))},dehydrate:(R=>F.dehydrate(R)),transition:fe,setDependencies(R){y=typeof R=="function"?R(y):R},onTransition:m,replaceReducer:pe};return a.attachManagerExtensions(He,I)};var Wo=zn(tn);var Xo=e=>e,Jo=Xo;var Qa=e=>e,Za=e=>e,Qo=Symbol.for("lite-fsm.owner.domain"),Zo=({type:e,effect:t,cancelFn:n})=>{let o=new Map;return r=>{let s=r,a=s.self?.actorId??Qo,c=o.get(a)??{lastId:0};c.lastId+=1,c.cancel=n?.(r),o.set(a,c);let i=c.lastId;s.self&&!c.dispose&&(c.dispose=()=>o.delete(a),s[ve]?.(s.self.actorId,Symbol("createEffect"),c.dispose));let u=()=>e==="latest"&&i!==o.get(a)?.lastId?!1:!c.cancel?.(),l=Object.assign(p=>u()?r.transition(p):p,r.transition);if(s.self){let p=r.transition;l.unscoped=d=>u()?p.unscoped(d):d,l.actor=(d,y)=>u()?p.actor(d,y):y,l.group=(d,y)=>u()?p.group(d,y):y,l.tag=(d,y)=>u()?p.tag(d,y):y}return t({...r,transition:l})}},ei=e=>Zo(e);export{ze as HYDRATE_ACTION_TYPE,f as LiteFsmError,De as Machine,Wo as MachineManager,lt as VOID_REDUCER_MIDDLEWARE_MARKER,he as createActorMeta,Za as createConfig,ei as createEffect,Jo as createMachine,Qa as createReducer,Qn as defineMachine,Bo as definePlugin,ko as defineStorageRuntime};
|
package/dist/interfaces.d.cts
CHANGED
|
@@ -1,45 +1,66 @@
|
|
|
1
|
-
import { AnyEvent, AnyRecord, DefaultDeps, GenerateSpawnIdFn, MachineConfig, MachineManagerDehydrateFn, MachineManagerRuntimeSnapshot, MachineManagerSnapshot, MachineStore, MachinesState, Reducer, StateName, StateType, TransitionSubscriber, HydrateOptions, HydratePreviewOptions, UnknownMachineKeyContext, Middleware, WILDCARD, ManagerAction } from "./types";
|
|
1
|
+
import { AnyEvent, AnyRecord, CoreActionMeta, DefaultDeps, GenerateSpawnIdFn, MachineConfig, MachineManagerDehydrateFn, MachineManagerRuntimeSnapshot, MachineManagerSnapshot, MachineRuntimeMetadata, MachineStore, MachinesState, Reducer, StateName, StateType, TransitionSubscriber, HydrateOptions, HydratePreviewOptions, UnknownMachineKeyContext, Middleware, WILDCARD, ManagerAction } from "./types";
|
|
2
|
+
import type { LiteFsmPlugin, ManagerActionMeta, ManagerTransitionEvents, PluginManagerExtensions, PluginScopedDeps, ScopedPluginDepsOf } from "./plugin";
|
|
2
3
|
type UnionToIntersection<U> = (U extends unknown ? (value: U) => void : never) extends (value: infer I) => void ? I : never;
|
|
3
|
-
type
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
4
|
+
type Prettify<T> = {
|
|
5
|
+
[K in keyof T]: T[K];
|
|
6
|
+
};
|
|
7
|
+
type MachineRuntimeOwnedDependencyKeys<E> = (MachineRuntimeMetadata<E> extends {
|
|
8
|
+
readonly effectDeps: infer Deps extends object;
|
|
9
|
+
} ? keyof Deps : never) | (MachineRuntimeMetadata<E> extends {
|
|
10
|
+
readonly reactionDeps: infer Deps extends object;
|
|
11
|
+
} ? keyof Deps : never);
|
|
12
|
+
type MachineDeclaredDependencies<E> = E extends {
|
|
13
|
+
readonly __liteFsmDependencies?: infer D extends AnyRecord;
|
|
14
|
+
} ? D : never;
|
|
15
|
+
type ConfigDependencies<E> = MachineDeclaredDependencies<E> extends never ? E extends MachineConfig<infer C, infer T, infer P, infer D, infer Snapshot> ? [C, T, P, D, Snapshot] extends [object, AnyRecord, AnyEvent, AnyRecord, unknown] ? D : never : Omit<E, "storage"> extends MachineConfig<infer C, infer T, infer P, infer D, infer Snapshot> ? [C, T, P, D, Snapshot] extends [object, AnyRecord, AnyEvent, AnyRecord, unknown] ? D : never : never : MachineDeclaredDependencies<E>;
|
|
16
|
+
type StripScopedDependencies<D, Plugins extends readonly LiteFsmPlugin<any, any, any>[], E> = Prettify<Omit<D, keyof DefaultDeps | "self" | keyof ScopedPluginDepsOf<D> | keyof PluginScopedDeps<Plugins> | MachineRuntimeOwnedDependencyKeys<E>>>;
|
|
17
|
+
type EffectFunctionDependencies<F, Plugins extends readonly LiteFsmPlugin<any, any, any>[], E> = NonNullable<F> extends (deps: infer D) => unknown ? StripScopedDependencies<D, Plugins, E> : {};
|
|
18
|
+
type EffectDependencies<E, Plugins extends readonly LiteFsmPlugin<any, any, any>[]> = "effects" extends keyof E ? keyof NonNullable<E["effects"]> extends never ? {} : [ConfigDependencies<E>] extends [never] ? UnionToIntersection<{
|
|
19
|
+
[key in keyof NonNullable<E["effects"]>]: EffectFunctionDependencies<NonNullable<E["effects"]>[key], Plugins, E>;
|
|
20
|
+
}[keyof NonNullable<E["effects"]>]> : StripScopedDependencies<ConfigDependencies<E>, Plugins, E> : {};
|
|
21
|
+
export type MachineDependencies<S extends MachineStore, Plugins extends readonly LiteFsmPlugin<any, any, any>[] = readonly []> = keyof S extends never ? {} : Prettify<Omit<UnionToIntersection<{
|
|
22
|
+
[key in keyof S]: EffectDependencies<S[key], Plugins>;
|
|
23
|
+
}[keyof S]>, keyof PluginScopedDeps<Plugins>>>;
|
|
11
24
|
type EventFromReducer<M> = M extends {
|
|
12
25
|
reducer: MachineConfig<infer C, infer T, infer P, infer D>["reducer"];
|
|
13
26
|
} ? [C, T, D] extends [object, AnyRecord, AnyRecord] ? P : never : never;
|
|
14
27
|
type EventFromMachineConfig<M> = M extends MachineConfig<infer C, infer T, infer P, infer D> ? [C, T, D] extends [object, AnyRecord, AnyRecord] ? P : never : never;
|
|
28
|
+
type EventFromRuntimeMetadata<M> = MachineRuntimeMetadata<M> extends {
|
|
29
|
+
readonly publicEvents: infer P extends AnyEvent;
|
|
30
|
+
} ? P : never;
|
|
15
31
|
export type MachineEvents<S extends MachineStore> = {
|
|
16
|
-
[key in keyof S]: EventFromReducer<S[key]> extends never ? EventFromMachineConfig<S[key]> extends never ? AnyEvent : EventFromMachineConfig<S[key]> : EventFromReducer<S[key]>;
|
|
32
|
+
[key in keyof S]: EventFromRuntimeMetadata<S[key]> extends never ? EventFromReducer<S[key]> extends never ? EventFromMachineConfig<S[key]> extends never ? AnyEvent : EventFromMachineConfig<S[key]> : EventFromReducer<S[key]> : EventFromRuntimeMetadata<S[key]>;
|
|
17
33
|
}[keyof S];
|
|
18
|
-
export type MachineManagerOptions<S extends MachineStore, P extends AnyEvent = MachineEvents<S
|
|
34
|
+
export type MachineManagerOptions<S extends MachineStore, P extends AnyEvent = MachineEvents<S>, Plugins extends readonly LiteFsmPlugin<any, any, any>[] = readonly []> = {
|
|
19
35
|
onError?: (err: unknown) => void;
|
|
20
|
-
middleware?: Middleware<MachinesState<S>, P
|
|
36
|
+
middleware?: Middleware<MachinesState<S>, ManagerTransitionEvents<P, Plugins>, ManagerActionMeta<Plugins>>[];
|
|
21
37
|
snapshot?: MachineManagerSnapshot<S>;
|
|
22
38
|
schemaVersion?: number;
|
|
23
39
|
onUnknownMachineKey?: (key: string, context: UnknownMachineKeyContext) => void;
|
|
24
40
|
onSchemaVersionMismatch?: (incoming: number | undefined, current: number | undefined) => void;
|
|
25
41
|
originId?: string;
|
|
26
|
-
generateActorId?: GenerateSpawnIdFn<P
|
|
27
|
-
generateGroupId?: GenerateSpawnIdFn<P
|
|
42
|
+
generateActorId?: GenerateSpawnIdFn<ManagerTransitionEvents<P, Plugins>>;
|
|
43
|
+
generateGroupId?: GenerateSpawnIdFn<ManagerTransitionEvents<P, Plugins>>;
|
|
44
|
+
plugins?: Plugins;
|
|
28
45
|
};
|
|
29
46
|
export type IMachine<C extends object, T extends AnyRecord = {}, P extends AnyEvent = AnyEvent, D extends AnyRecord = {}> = {
|
|
30
47
|
transition: (state: StateType<C, T>, action: P) => StateType<C, T>;
|
|
31
48
|
invokeEffect: (prevState: StateName<C>, currentState: StateName<C>, deps: D & DefaultDeps<StateName<C> | WILDCARD, C, P>) => Promise<void>;
|
|
32
49
|
config: C;
|
|
33
50
|
};
|
|
34
|
-
export type IMachineManager<S extends MachineStore, P extends AnyEvent = MachineEvents<S
|
|
35
|
-
transition: (payload: ManagerAction<P>) => ManagerAction<P>;
|
|
51
|
+
export type IMachineManager<S extends MachineStore, P extends AnyEvent = MachineEvents<S>, Meta extends object = CoreActionMeta, Plugins extends readonly LiteFsmPlugin<any, any, any>[] = readonly []> = {
|
|
52
|
+
transition: (payload: ManagerAction<P, Meta>) => ManagerAction<P, Meta>;
|
|
36
53
|
getState: () => MachinesState<S>;
|
|
37
54
|
getSnapshot: () => MachineManagerRuntimeSnapshot<S>;
|
|
38
55
|
getHydratedState: (snapshot: MachineManagerSnapshot<S>, opts?: HydratePreviewOptions<S>) => MachinesState<S>;
|
|
39
56
|
hydrate: (snapshot: MachineManagerSnapshot<S>, opts?: HydrateOptions) => void;
|
|
40
57
|
dehydrate: MachineManagerDehydrateFn<S>;
|
|
41
|
-
onTransition: (cb: TransitionSubscriber<S, P>) => () => void;
|
|
42
|
-
replaceReducer: (cb: (reducer: Reducer<MachinesState<S>, ManagerAction<P>>) => Reducer<MachinesState<S>, ManagerAction<P>>) => void;
|
|
43
|
-
setDependencies:
|
|
58
|
+
onTransition: (cb: TransitionSubscriber<S, P, Meta>) => () => void;
|
|
59
|
+
replaceReducer: (cb: (reducer: Reducer<MachinesState<S>, ManagerAction<P, Meta>>) => Reducer<MachinesState<S>, ManagerAction<P, Meta>>) => void;
|
|
60
|
+
setDependencies: {
|
|
61
|
+
(deps: MachineDependencies<S, Plugins>): void;
|
|
62
|
+
(updater: (deps: MachineDependencies<S, Plugins>) => MachineDependencies<S, Plugins>): void;
|
|
63
|
+
};
|
|
44
64
|
};
|
|
65
|
+
export type ManagerFromPlugins<S extends MachineStore, AppEvents extends AnyEvent, Plugins extends readonly LiteFsmPlugin<any, any, any>[]> = IMachineManager<S, ManagerTransitionEvents<AppEvents, Plugins>, ManagerActionMeta<Plugins>, Plugins> & PluginManagerExtensions<Plugins, S, ManagerTransitionEvents<AppEvents, Plugins>>;
|
|
45
66
|
export {};
|