@quazardous/quarkernel 2.2.4 → 2.3.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/index.umd.js CHANGED
@@ -1,3 +1,3 @@
1
- "use strict";var QuarKernel=(()=>{var P=Object.defineProperty;var oe=Object.getOwnPropertyDescriptor;var ie=Object.getOwnPropertyNames;var se=Object.prototype.hasOwnProperty;var ae=(a,e)=>{for(var t in e)P(a,t,{get:e[t],enumerable:!0})},ce=(a,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of ie(e))!se.call(a,r)&&r!==t&&P(a,r,{get:()=>e[r],enumerable:!(n=oe(e,r))||n.enumerable});return a};var fe=a=>ce(P({},"__esModule",{value:!0}),a);var he={};ae(he,{CircularDependencyError:()=>I,Composition:()=>T,CyclicDependencyError:()=>N,Kernel:()=>C,KernelEvent:()=>S,ListenerContext:()=>w,MaxListenersExceededError:()=>j,MissingDependencyError:()=>D,VERSION:()=>ve,createComposition:()=>X,createKernel:()=>J,createMachine:()=>H,createNamespacedMerger:()=>K,createOverrideMerger:()=>$,defineMachine:()=>_,formatStateCentricCode:()=>G,fromXState:()=>Q,isContextMerger:()=>Y,isContextMergerFunction:()=>ee,isEventName:()=>U,isKernelEvent:()=>ne,isListenerFunction:()=>V,isListenerOptions:()=>te,isPredicateFunction:()=>Z,toXStateFormat:()=>W,toposort:()=>A,useMachine:()=>R});var S=class{name;data;context;timestamp;_propagationStopped=!1;constructor(e,t,n={}){this.name=e,this.data=t,this.context=n,this.timestamp=Date.now()}stopPropagation=()=>{this._propagationStopped=!0};get isPropagationStopped(){return this._propagationStopped}};var w=class{id;eventName;priority;dependencies;signal;kernel;listenerFn;currentEvent;constructor(e,t,n,r,i,o,s){this.id=e,this.eventName=t,this.priority=n,this.dependencies=r,this.kernel=i,this.listenerFn=o,this.signal=s}setCurrentEvent=e=>{this.currentEvent=e};clearCurrentEvent=()=>{this.currentEvent=void 0};cancel=()=>{this.kernel.off(this.eventName,this.listenerFn)};off=()=>{this.cancel()};emit=async(e,t)=>this.kernel.emit(e,t);stopPropagation=()=>{if(!this.currentEvent)throw new Error("stopPropagation() can only be called during event processing");this.currentEvent.stopPropagation()}};var k=new Map,le=100,ue=(a,e=":")=>{let t=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");if(a==="*")return new RegExp(`^[^${t}]+$`);if(a==="**")return new RegExp("^.*$");let n=a.replace(/\*\*/g,"___DOUBLE_WILDCARD___").replace(/\*/g,`[^${t}]+`).replace(/___DOUBLE_WILDCARD___/g,".*");return new RegExp(`^${n}$`)},pe=a=>a.includes("*"),de=(a,e=":")=>{let t=`${a}::${e}`,n=k.get(t);if(!n){if(n=ue(a,e),k.size>=le){let r=k.keys().next().value;r!==void 0&&k.delete(r)}k.set(t,n)}return n},ge=(a,e,t=":")=>pe(e)?de(e,t).test(a):a===e,B=(a,e,t=":")=>e.filter(n=>ge(a,n,t));var N=class extends Error{constructor(t){super(`Cyclic dependency detected: ${t.join(" -> ")}`);this.cycle=t;this.name="CyclicDependencyError"}},A=a=>{let e=new Map,t=new Map,n=new Set;a.forEach(o=>{n.add(o.id),e.has(o.id)||e.set(o.id,[]),t.has(o.id)||t.set(o.id,0)}),a.forEach(o=>{o.after.forEach(s=>{n.has(s)||(n.add(s),e.set(s,[]),t.set(s,0)),e.get(s).push(o.id),t.set(o.id,(t.get(o.id)||0)+1)})});let r=[],i=[];for(n.forEach(o=>{t.get(o)===0&&r.push(o)});r.length>0;){let o=r.shift();i.push(o),(e.get(o)||[]).forEach(c=>{let u=t.get(c)-1;t.set(c,u),u===0&&r.push(c)})}if(i.length!==n.size){let o=Array.from(n).filter(c=>!i.includes(c)),s=me(o,e);throw new N(s)}return i.filter(o=>a.some(s=>s.id===o))},me=(a,e)=>{let t=new Set,n=new Set,r=[],i=o=>{t.add(o),n.add(o),r.push(o);let s=e.get(o)||[];for(let c of s)if(a.includes(c)){if(t.has(c)){if(n.has(c))return!0}else if(i(c))return!0}return n.delete(o),r.pop(),!1};for(let o of a)if(!t.has(o)&&i(o))return[...r];return a};var K=()=>({merge:(a,e)=>{let t={};for(let[n,r]of a)for(let[i,o]of Object.entries(r))t[`${n}:${i}`]=o;return t},mergeWithConflicts:(a,e)=>{let t={};for(let[n,r]of a)for(let[i,o]of Object.entries(r))t[`${n}:${i}`]=o;return{context:t,conflicts:[]}}});var $=()=>({merge:(a,e)=>{let t={};for(let n of e){let r=a.get(n);if(r)for(let[i,o]of Object.entries(r))t[i]=o}return t},mergeWithConflicts:(a,e)=>{let t={},n=[],r=new Map;for(let i of e){let o=a.get(i);if(o)for(let[s,c]of Object.entries(o))r.has(s)||r.set(s,[]),r.get(s).push({source:i,value:c})}for(let[i,o]of r)o.length>1&&n.push({key:i,sources:o.map(s=>s.source),values:o.map(s=>s.value)}),t[i]=o[o.length-1].value;return{context:t,conflicts:n}}});var F="__qk:composed__",T=class{kernel;subscriptions=[];buffers=new Map;merger;bufferLimit;reset;eventTTL;eventTTLs;sourceEvents=new Set;firedSinceLastComposite=new Set;lastConflicts=[];expirationTimers=new Map;constructor(e,t={}){if(e.length===0)throw new Error("Composition requires at least one kernel");this.merger=t.merger??K(),this.bufferLimit=t.bufferLimit??100,this.reset=t.reset??!0,this.eventTTL=t.eventTTL??0,this.eventTTLs=t.eventTTLs??{},this.kernel=new C({debug:!1,errorBoundary:!0,onContextConflict:t.onConflict?(n,r)=>{t.onConflict({key:n,sources:[],values:r})}:void 0});for(let[n,r]of e)this.subscribeToKernel(n,r),this.sourceEvents.add(r)}subscribeToKernel(e,t){this.buffers.set(t,[]);let n=e.on(t,async r=>{await this.handleSourceEvent(t,r)},{priority:-1/0});this.subscriptions.push({kernel:e,eventName:t,unbind:n})}getEffectiveTTL(e){let t=this.eventTTLs[e];return t!==void 0?t:this.eventTTL>0?this.eventTTL:"permanent"}async handleSourceEvent(e,t){let n=this.buffers.get(e);if(!n)return;let r=this.getEffectiveTTL(e),i=`${e}:${t.timestamp}:${Math.random().toString(36).slice(2,8)}`;n.push({name:t.name,data:t.data,context:{...t.context},timestamp:t.timestamp}),n.length>this.bufferLimit&&n.shift(),this.firedSinceLastComposite.add(e);let o=await this.checkAndEmitComposite();if(r==="instant"&&!o){n.pop(),this.firedSinceLastComposite.delete(e);return}if(typeof r=="number"&&r>0){let s=setTimeout(()=>{this.expireEvent(e,t.timestamp),this.expirationTimers.delete(i)},r);this.expirationTimers.set(i,s)}}expireEvent(e,t){let n=this.buffers.get(e);if(!n)return;let r=n.filter(i=>i.timestamp>t);this.buffers.set(e,r),r.length===0&&this.firedSinceLastComposite.delete(e)}async checkAndEmitComposite(){for(let r of this.sourceEvents){let i=this.buffers.get(r);if(!i||i.length===0)return!1}for(let r of this.sourceEvents)if(!this.firedSinceLastComposite.has(r))return!1;if(this.kernel.listenerCount(F)===0)return!1;let e=new Map,t=Array.from(this.sourceEvents);for(let r of t){let i=this.buffers.get(r);if(!i||i.length===0)continue;let o=i[i.length-1],c={...o.data&&typeof o.data=="object"?o.data:{},...o.context};e.set(r,c)}let n=this.merger.mergeWithConflicts(e,t);if(this.lastConflicts=n.conflicts,await this.kernel.emit(F,{sources:t,contexts:Object.fromEntries(e),merged:n.context}),this.firedSinceLastComposite.clear(),this.reset)for(let r of this.sourceEvents){let i=this.buffers.get(r);if(i&&i.length>0){let o=i[i.length-1];this.buffers.set(r,[o])}}return!0}onComposed(e,t){return this.kernel.on(F,e,t)}offComposed(e){this.kernel.off(F,e)}composedListenerCount(){return this.kernel.listenerCount(F)}on(e,t,n){return this.kernel.on(e,t,n)}off(e,t){this.kernel.off(e,t)}async emit(e,t){if(String(e).startsWith("__qk:"))throw new Error(`Cannot emit reserved event: ${String(e)}`);return this.kernel.emit(e,t)}getContext(){for(let r of this.sourceEvents){let i=this.buffers.get(r);if(!i||i.length===0)return null}let e=new Map,t=Array.from(this.sourceEvents);for(let r of t){let i=this.buffers.get(r);if(!i||i.length===0)continue;let o=i[i.length-1],c={...o.data&&typeof o.data=="object"?o.data:{},...o.context};e.set(r,c)}let n=this.merger.mergeWithConflicts(e,t);return this.lastConflicts=n.conflicts,n.context}listenerCount(e){return this.kernel.listenerCount(e)}eventNames(){return this.kernel.eventNames()}offAll(e){this.kernel.offAll(e)}debug(e){this.kernel.debug(e)}getBuffer(e){return this.buffers.get(e)}clearBuffers(){for(let e of this.sourceEvents)this.buffers.set(e,[]);this.firedSinceLastComposite.clear()}getConflicts(){return this.lastConflicts}dispose(){for(let e of this.subscriptions)e.unbind();this.subscriptions=[];for(let e of this.expirationTimers.values())clearTimeout(e);this.expirationTimers.clear(),this.kernel.offAll(),this.buffers.clear(),this.sourceEvents.clear(),this.firedSinceLastComposite.clear(),this.lastConflicts=[]}getEventTTL(){return this.eventTTL}setEventTTL(e){this.eventTTL=e}getEventTTLs(){return this.eventTTLs}setEventTTLFor(e,t){this.eventTTLs[e]=t}clearEventTTLFor(e){delete this.eventTTLs[e]}},X=(a,e)=>new T(a,e);var C=class a{listeners=new Map;options;listenerIdCounter=0;executionErrors=[];constructor(e={}){this.options={delimiter:e.delimiter??":",wildcard:e.wildcard??!0,maxListeners:e.maxListeners??1/0,debug:e.debug??!1,errorBoundary:e.errorBoundary??!0,onError:e.onError??(t=>{console.error("Kernel error:",t)}),contextMerger:e.contextMerger??void 0,onContextConflict:e.onContextConflict??void 0},this.options.debug&&console.debug("[QuarKernel] Kernel initialized",{delimiter:this.options.delimiter,wildcard:this.options.wildcard,maxListeners:this.options.maxListeners,errorBoundary:this.options.errorBoundary})}on(e,t,n={}){let r=String(e);if(n.signal?.aborted)return this.options.debug&&console.debug("[QuarKernel] Listener not added (signal already aborted)",{event:r}),()=>{};let i=n.priority??0,o=n.id??`listener_${++this.listenerIdCounter}`,s=Array.isArray(n.after)?n.after:n.after?[n.after]:[],c;n.signal&&(c=()=>this.off(r,t));let u={id:o,callback:t,after:s,priority:i,once:n.once??!1,original:t,signal:n.signal,abortListener:c},f=this.listeners.get(r)??[];return f.push(u),f.sort((p,g)=>g.priority-p.priority),this.listeners.set(r,f),this.options.debug&&console.debug("[QuarKernel] Listener added",{event:r,listenerId:o,priority:i,after:s,once:u.once,totalListeners:f.length}),this.options.maxListeners>0&&f.length>this.options.maxListeners&&console.warn(`MaxListenersExceeded: Event "${r}" has ${f.length} listeners (limit: ${this.options.maxListeners})`),n.signal&&c&&n.signal.addEventListener("abort",c,{once:!0}),()=>this.off(r,t)}off(e,t){let n=this.listeners.get(e);if(!n)return;if(!t){this.options.debug&&console.debug("[QuarKernel] All listeners removed",{event:e,count:n.length});for(let s of n)s.signal&&s.abortListener&&s.signal.removeEventListener("abort",s.abortListener);this.listeners.delete(e);return}let r=n.find(s=>s.original===t);r?.signal&&r.abortListener&&r.signal.removeEventListener("abort",r.abortListener);let i=n.filter(s=>s.original!==t),o=n.length-i.length;this.options.debug&&o>0&&console.debug("[QuarKernel] Listener removed",{event:e,removed:o,remaining:i.length}),i.length===0?this.listeners.delete(e):this.listeners.set(e,i)}async emit(e,t){let n=String(e),r=Array.from(this.listeners.keys()),i=this.options.wildcard?B(n,r,this.options.delimiter):r.filter(p=>p===n),o=[];for(let p of i){let g=this.listeners.get(p);g&&o.push(...g)}if(o.length===0){this.options.debug&&console.debug("[QuarKernel] Event emitted (no listeners)",{event:n});return}this.options.debug&&console.debug("[QuarKernel] Event emitted",{event:n,listenerCount:o.length,data:t!==void 0?JSON.stringify(t).substring(0,100):void 0}),this.executionErrors=[];let s=new S(n,t,{}),c=this.sortListenersByDependencies(o),u=c.map(p=>this.executeListener(p,s,n)),f=await Promise.allSettled(u);if(this.removeOnceListeners(n,c,s),!this.options.errorBoundary){let p=f.filter(g=>g.status==="rejected").map(g=>g.reason);if(p.length>0)throw new AggregateError(p,`${p.length} listener(s) failed for event "${n}"`)}this.options.debug&&console.debug("[QuarKernel] Event completed",{event:n})}async emitSerial(e,t){let n=String(e),r=Array.from(this.listeners.keys()),i=this.options.wildcard?B(n,r,this.options.delimiter):r.filter(f=>f===n),o=[];for(let f of i){let p=this.listeners.get(f);p&&o.push(...p)}if(o.length===0){this.options.debug&&console.debug("[QuarKernel] Event emitted serially (no listeners)",{event:n});return}this.options.debug&&console.debug("[QuarKernel] Event emitted serially",{event:n,listenerCount:o.length,data:t!==void 0?JSON.stringify(t).substring(0,100):void 0}),this.executionErrors=[];let s=new S(n,t,{}),c=this.sortListenersByDependencies(o),u=[];for(let f of c)try{await this.executeListener(f,s,n)}catch(p){if(!this.options.errorBoundary)throw this.removeOnceListeners(n,c,s),p;u.push(p)}if(this.removeOnceListeners(n,c,s),!this.options.errorBoundary&&u.length>0)throw new AggregateError(u,`${u.length} listener(s) failed for event "${n}"`);this.options.debug&&console.debug("[QuarKernel] Event completed serially",{event:n})}sortListenersByDependencies(e){if(!e.some(s=>s.after.length>0))return[...e].sort((s,c)=>c.priority-s.priority);let n=new Set(e.map(s=>s.id));for(let s of e)for(let c of s.after)if(!n.has(c))throw new Error(`Listener "${s.id}" depends on missing listener "${c}"`);let r=e.map(s=>({id:s.id,after:s.after}));A(r);let i=new Map,o=(s,c=new Set)=>{if(i.has(s))return i.get(s);if(c.has(s))return 0;c.add(s);let u=e.find(g=>g.id===s);if(!u||u.after.length===0)return i.set(s,0),0;let p=Math.max(...u.after.map(g=>o(g,c)))+1;return i.set(s,p),p};return e.forEach(s=>o(s.id)),[...e].sort((s,c)=>{let u=i.get(s.id)??0,f=i.get(c.id)??0;return u!==f?u-f:c.priority-s.priority})}async executeListener(e,t,n){if(t.isPropagationStopped){this.options.debug&&console.debug("[QuarKernel] Listener skipped (propagation stopped)",{listenerId:e.id});return}let r=Date.now();this.options.debug&&console.debug("[QuarKernel] Listener executing",{listenerId:e.id,event:n,priority:e.priority});try{let i=new w(e.id,n,e.priority,e.after,this,e.original,e.signal);i.setCurrentEvent(t);try{if(await e.callback(t,i),this.options.debug){let o=Date.now()-r;console.debug("[QuarKernel] Listener completed",{listenerId:e.id,duration:`${o}ms`})}}finally{i.clearCurrentEvent()}}catch(i){let o={listenerId:e.id,error:i,timestamp:Date.now(),eventName:n};if(this.executionErrors.push(o),this.options.debug&&console.debug("[QuarKernel] Listener error",{listenerId:e.id,error:i.message}),this.options.errorBoundary)this.options.onError(i,t);else throw i}}removeOnceListeners(e,t,n){let r=t.filter(i=>i.once?i.once===!0?!0:typeof i.once=="function"?i.once(n):!1:!1);if(r.length!==0){this.options.debug&&console.debug("[QuarKernel] Removing once listeners",{event:e,count:r.length});for(let i of r)for(let[o,s]of this.listeners.entries())if(s.includes(i)){this.off(o,i.original);break}}}listenerCount(e){if(!e){let r=0;for(let i of this.listeners.values())r+=i.length;return r}let t=String(e);return this.listeners.get(t)?.length??0}eventNames(){return Array.from(this.listeners.keys())}offAll(e){if(!e){for(let r of this.listeners.values())for(let i of r)i.signal&&i.abortListener&&i.signal.removeEventListener("abort",i.abortListener);this.listeners.clear();return}let t=String(e),n=this.listeners.get(t);if(n)for(let r of n)r.signal&&r.abortListener&&r.signal.removeEventListener("abort",r.abortListener);this.listeners.delete(t)}debug(e){this.options.debug=e,console.debug(e?"[QuarKernel] Debug mode enabled":"[QuarKernel] Debug mode disabled")}getExecutionErrors(){return this.executionErrors}clearExecutionErrors(){this.executionErrors=[]}static compose(...e){let t=[],n;for(let r of e)Array.isArray(r)&&r.length===2&&r[0]instanceof a?t.push(r):typeof r=="object"&&!Array.isArray(r)&&(n=r);return new T(t,n)}},J=a=>new C(a);function U(a){return typeof a=="string"&&a.length>0}function V(a){return typeof a=="function"}function Z(a){return typeof a=="function"}function Y(a){return a!==null&&typeof a=="object"&&"merge"in a&&typeof a.merge=="function"}function ee(a){return typeof a=="function"}function te(a){if(a===null||typeof a!="object")return!1;let e=a;return!("id"in e&&typeof e.id!="string"||"after"in e&&typeof e.after!="string"&&!Array.isArray(e.after)||"priority"in e&&typeof e.priority!="number"||"once"in e&&typeof e.once!="boolean"&&typeof e.once!="function"||"signal"in e&&!(e.signal instanceof AbortSignal))}function ne(a){if(a===null||typeof a!="object")return!1;let e=a;return typeof e.name=="string"&&"data"in e&&typeof e.context=="object"&&e.context!==null&&typeof e.timestamp=="number"&&typeof e.stopPropagation=="function"&&typeof e.isPropagationStopped=="boolean"}var I=class extends Error{constructor(e){super(`Circular dependency detected: ${e.join(" -> ")}`),this.name="CircularDependencyError"}},D=class extends Error{constructor(e,t){super(`Listener "${e}" depends on missing listener "${t}"`),this.name="MissingDependencyError"}},j=class extends Error{constructor(e,t){super(`Max listeners (${t}) exceeded for event "${e}"`),this.name="MaxListenersExceededError"}};function R(a,e){let{prefix:t,initial:n,states:r,allowForce:i=!0,snapshot:o,trackHistory:s=!1,maxHistory:c=100}=e,u=o?.state??n,f=o?.context??e.context??{},p=o?.history?[...o.history]:[];if(!r[u])throw new Error(`Invalid initial state "${u}" - not defined in states`);let g=[],d=async(l,h)=>{let x={machine:t,...h};await a.emit(`${t}:${l}`,x)},m=l=>{let h=r[u];if(!h?.on)return null;let x=h.on[l];return x?typeof x=="string"?{target:x}:x:null},v=async(l,h,x,L=!1)=>{let E=u,O=r[E],b=r[h];if(!b)throw new Error(`Invalid target state "${h}" - not defined in states`);O?.exit&&await O.exit(f,l,x),await d(`exit:${E}`,{state:E,from:E,to:h,event:l,payload:x,forced:L}),u=h,s&&(p.push({from:E,to:h,event:l,timestamp:Date.now()}),p.length>c&&(p=p.slice(-c))),await d("transition",{state:h,from:E,to:h,event:l,payload:x,forced:L}),await d(`transition:${l}`,{state:h,from:E,to:h,event:l,payload:x,forced:L}),await d(`enter:${h}`,{state:h,from:E,to:h,event:l,payload:x,forced:L}),b.entry&&await b.entry(f,l,x)},y={prefix:t,getState(){return u},getContext(){return f},setContext(l){typeof l=="function"?f=l(f):f={...f,...l}},async send(l,h,x={}){let{force:L=!1,target:E,guard:O,fallback:b}=x;if(L&&i)return await v(l,E??n,h,!0),!0;let M=m(l);if(!M){if(L&&!i)throw new Error(`Force transitions not allowed on machine "${t}"`);return!1}let q=O??M.guard;if(q&&!q(f,l,h)){if(await d("guard:rejected",{state:u,event:l,payload:h}),b){if(!r[b])throw new Error(`Invalid fallback state "${b}" - not defined in states`);return await v(l,b,h,!1),!0}return!1}if(M.actions){let z=Array.isArray(M.actions)?M.actions:[M.actions];for(let re of z)await re(f,l,h)}return await v(l,M.target,h,!1),!0},can(l){return m(l)!==null},transitions(){let l=r[u];return l?.on?Object.keys(l.on):[]},toJSON(){return{state:u,context:structuredClone(f),history:s?[...p]:void 0}},restore(l){if(!r[l.state])throw new Error(`Invalid snapshot state "${l.state}" - not defined in states`);u=l.state,f=l.context,l.history&&(p=[...l.history])},destroy(){for(let l of g)l();g.length=0}};return o||setTimeout(async()=>{let l=r[n];await d(`enter:${n}`,{state:n}),l?.entry&&await l.entry(f,"__INIT__",void 0)},0),y}function _(a){return a}function H(a){let{id:e,initial:t,context:n,states:r,on:i={},helpers:o={}}=a,s=new C,c=new Map,u={prefix:e,initial:t,context:n,states:{},trackHistory:!0};for(let[d,m]of Object.entries(r))u.states[d]={on:m.on?{...m.on}:void 0};let f=R(s,u),p=()=>({set:d=>f.setContext(d),send:(d,m)=>f.send(d,m),log:console.log,...o});return s.on(`${e}:enter:*`,async d=>{let m=d.data?.state;if(!m)return;c.forEach((y,l)=>{l.startsWith(m+":")||(clearTimeout(y),c.delete(l))});let v=r[m];if(v&&(v.entry&&await v.entry(f.getContext(),p()),v.after)){let y=setTimeout(()=>{f.send(v.after.send),c.delete(m+":timer")},v.after.delay);c.set(m+":timer",y)}}),s.on(`${e}:exit:*`,async d=>{let m=d.data?.state;if(!m)return;let v=c.get(m+":timer");v&&(clearTimeout(v),c.delete(m+":timer"));let y=r[m];y&&y.exit&&await y.exit(f.getContext(),p())}),s.on(`${e}:transition`,async d=>{let m=d.data?.event;if(!m)return;let v=i[m];v&&await v(f.getContext(),p())}),{...f,id:e,get state(){return f.getState()},get context(){return f.getContext()},destroy(){c.forEach(d=>clearTimeout(d)),c.clear(),f.destroy()}}}function Q(a,e){let{prefix:t,guards:n={},actions:r={},allowForce:i,trackHistory:o}=e,s={};for(let[c,u]of Object.entries(a.states)){let f={};if(u.on){f.on={};for(let[p,g]of Object.entries(u.on))if(typeof g=="string")f.on[p]=g;else{let d={target:g.target||c},m=g.cond||g.guard;if(m){let v=typeof m=="string"?m:m.type,y=n[v];y?d.guard=y:console.warn(`Guard "${v}" not provided in options.guards`)}if(g.actions){let v=Array.isArray(g.actions)?g.actions:[g.actions],y=[];for(let l of v){let h=typeof l=="string"?l:l.type,x=r[h];x?y.push(x):console.warn(`Action "${h}" not provided in options.actions`)}y.length>0&&(d.actions=y.length===1?y[0]:y)}f.on[p]=d}}if(u.entry){let p=Array.isArray(u.entry)?u.entry:[u.entry],g=[];for(let d of p){let m=typeof d=="string"?d:d.type,v=r[m];v&&g.push(v)}g.length>0&&(f.entry=async(d,m,v)=>{for(let y of g)await y(d,m,v)})}if(u.exit){let p=Array.isArray(u.exit)?u.exit:[u.exit],g=[];for(let d of p){let m=typeof d=="string"?d:d.type,v=r[m];v&&g.push(v)}g.length>0&&(f.exit=async(d,m,v)=>{for(let y of g)await y(d,m,v)})}s[c]=f}return{prefix:t,initial:a.initial,context:a.context,states:s,allowForce:i,trackHistory:o}}function W(a){let e={};for(let[t,n]of Object.entries(a.states)){let r={};if(n.on){r.on={};for(let[i,o]of Object.entries(n.on))if(typeof o=="string")r.on[i]=o;else{let s={target:o.target};o.guard&&(s.guard={type:"guard"}),o.actions&&(s.actions={type:"action"}),r.on[i]=s}}n.entry&&(r.entry={type:"entry"}),n.exit&&(r.exit={type:"exit"}),e[t]=r}return{id:a.prefix,initial:a.initial,context:a.context,states:e}}function G(a){let{id:e,initial:t,context:n,states:r,on:i}=a,o=[`// FSM Definition for "${e}"`,"// Helpers: ctx, set(obj), send(event), log(msg)","","export default {",` id: '${e}',`,` initial: '${t}',`];n&&Object.keys(n).length>0&&o.push(` context: ${JSON.stringify(n)},`),o.push(" states: {");for(let[s,c]of Object.entries(r)){if(o.push(` ${s}: {`),c.entry&&o.push(` entry: ${c.entry.toString()},`),c.exit&&o.push(` exit: ${c.exit.toString()},`),c.after&&o.push(` after: { delay: ${c.after.delay}, send: '${c.after.send}' },`),c.on&&Object.keys(c.on).length>0){o.push(" on: {");for(let[u,f]of Object.entries(c.on))typeof f=="string"?o.push(` ${u}: '${f}',`):o.push(` ${u}: { target: '${f.target}'${f.cond?`, cond: '${f.cond}'`:""} },`);o.push(" },")}o.push(" },")}if(o.push(" },"),i&&Object.keys(i).length>0){o.push(" on: {");for(let[s,c]of Object.entries(i))o.push(` ${s}: ${c.toString()},`);o.push(" },")}return o.push("};"),o.join(`
1
+ "use strict";var QuarKernel=(()=>{var j=Object.defineProperty;var oe=Object.getOwnPropertyDescriptor;var ie=Object.getOwnPropertyNames;var se=Object.prototype.hasOwnProperty;var ae=(a,e)=>{for(var t in e)j(a,t,{get:e[t],enumerable:!0})},ce=(a,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of ie(e))!se.call(a,r)&&r!==t&&j(a,r,{get:()=>e[r],enumerable:!(n=oe(e,r))||n.enumerable});return a};var fe=a=>ce(j({},"__esModule",{value:!0}),a);var he={};ae(he,{CircularDependencyError:()=>I,Composition:()=>M,CyclicDependencyError:()=>F,Kernel:()=>T,KernelEvent:()=>K,ListenerContext:()=>S,MaxListenersExceededError:()=>P,MissingDependencyError:()=>D,VERSION:()=>ve,createComposition:()=>X,createKernel:()=>J,createMachine:()=>H,createNamespacedMerger:()=>k,createOverrideMerger:()=>O,defineMachine:()=>_,formatStateCentricCode:()=>G,fromXState:()=>Q,isContextMerger:()=>Y,isContextMergerFunction:()=>ee,isEventName:()=>U,isKernelEvent:()=>ne,isListenerFunction:()=>V,isListenerOptions:()=>te,isPredicateFunction:()=>Z,toXStateFormat:()=>W,toposort:()=>$,useMachine:()=>A});var K=class{name;data;context;timestamp;_propagationStopped=!1;constructor(e,t,n={}){this.name=e,this.data=t,this.context=n,this.timestamp=Date.now()}stopPropagation=()=>{this._propagationStopped=!0};get isPropagationStopped(){return this._propagationStopped}};var S=class{id;eventName;priority;dependencies;signal;kernel;listenerFn;currentEvent;constructor(e,t,n,r,i,o,s){this.id=e,this.eventName=t,this.priority=n,this.dependencies=r,this.kernel=i,this.listenerFn=o,this.signal=s}setCurrentEvent=e=>{this.currentEvent=e};clearCurrentEvent=()=>{this.currentEvent=void 0};cancel=()=>{this.kernel.off(this.eventName,this.listenerFn)};off=()=>{this.cancel()};emit=async(e,t)=>this.kernel.emit(e,t);stopPropagation=()=>{if(!this.currentEvent)throw new Error("stopPropagation() can only be called during event processing");this.currentEvent.stopPropagation()}};var R=new Map,le=100,ue=(a,e=":")=>{let t=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");if(a==="*")return new RegExp(`^[^${t}]+$`);if(a==="**")return new RegExp("^.*$");let n=a.replace(/\*\*/g,"___DOUBLE_WILDCARD___").replace(/\*/g,`[^${t}]+`).replace(/___DOUBLE_WILDCARD___/g,".*");return new RegExp(`^${n}$`)},de=a=>a.includes("*"),pe=(a,e=":")=>{let t=`${a}::${e}`,n=R.get(t);if(!n){if(n=ue(a,e),R.size>=le){let r=R.keys().next().value;r!==void 0&&R.delete(r)}R.set(t,n)}return n},ge=(a,e,t=":")=>de(e)?pe(e,t).test(a):a===e,B=(a,e,t=":")=>e.filter(n=>ge(a,n,t));var F=class extends Error{constructor(t){super(`Cyclic dependency detected: ${t.join(" -> ")}`);this.cycle=t;this.name="CyclicDependencyError"}},$=a=>{let e=new Map,t=new Map,n=new Set;a.forEach(o=>{n.add(o.id),e.has(o.id)||e.set(o.id,[]),t.has(o.id)||t.set(o.id,0)}),a.forEach(o=>{o.after.forEach(s=>{n.has(s)||(n.add(s),e.set(s,[]),t.set(s,0)),e.get(s).push(o.id),t.set(o.id,(t.get(o.id)||0)+1)})});let r=[],i=[];for(n.forEach(o=>{t.get(o)===0&&r.push(o)});r.length>0;){let o=r.shift();i.push(o),(e.get(o)||[]).forEach(c=>{let u=t.get(c)-1;t.set(c,u),u===0&&r.push(c)})}if(i.length!==n.size){let o=Array.from(n).filter(c=>!i.includes(c)),s=me(o,e);throw new F(s)}return i.filter(o=>a.some(s=>s.id===o))},me=(a,e)=>{let t=new Set,n=new Set,r=[],i=o=>{t.add(o),n.add(o),r.push(o);let s=e.get(o)||[];for(let c of s)if(a.includes(c)){if(t.has(c)){if(n.has(c))return!0}else if(i(c))return!0}return n.delete(o),r.pop(),!1};for(let o of a)if(!t.has(o)&&i(o))return[...r];return a};var k=()=>({merge:(a,e)=>{let t={};for(let[n,r]of a)for(let[i,o]of Object.entries(r))t[`${n}:${i}`]=o;return t},mergeWithConflicts:(a,e)=>{let t={};for(let[n,r]of a)for(let[i,o]of Object.entries(r))t[`${n}:${i}`]=o;return{context:t,conflicts:[]}}});var O=()=>({merge:(a,e)=>{let t={};for(let n of e){let r=a.get(n);if(r)for(let[i,o]of Object.entries(r))t[i]=o}return t},mergeWithConflicts:(a,e)=>{let t={},n=[],r=new Map;for(let i of e){let o=a.get(i);if(o)for(let[s,c]of Object.entries(o))r.has(s)||r.set(s,[]),r.get(s).push({source:i,value:c})}for(let[i,o]of r)o.length>1&&n.push({key:i,sources:o.map(s=>s.source),values:o.map(s=>s.value)}),t[i]=o[o.length-1].value;return{context:t,conflicts:n}}});var N="__qk:composed__",M=class{kernel;subscriptions=[];buffers=new Map;merger;bufferLimit;reset;eventTTL;eventTTLs;sourceEvents=new Set;firedSinceLastComposite=new Set;lastConflicts=[];expirationTimers=new Map;constructor(e,t={}){if(e.length===0)throw new Error("Composition requires at least one kernel");this.merger=t.merger??k(),this.bufferLimit=t.bufferLimit??100,this.reset=t.reset??!0,this.eventTTL=t.eventTTL??0,this.eventTTLs=t.eventTTLs??{},this.kernel=new T({debug:!1,errorBoundary:!0,onContextConflict:t.onConflict?(n,r)=>{t.onConflict({key:n,sources:[],values:r})}:void 0});for(let[n,r]of e)this.subscribeToKernel(n,r),this.sourceEvents.add(r)}subscribeToKernel(e,t){this.buffers.set(t,[]);let n=e.on(t,async r=>{await this.handleSourceEvent(t,r)},{priority:-1/0});this.subscriptions.push({kernel:e,eventName:t,unbind:n})}getEffectiveTTL(e){let t=this.eventTTLs[e];return t!==void 0?t:this.eventTTL>0?this.eventTTL:"permanent"}async handleSourceEvent(e,t){let n=this.buffers.get(e);if(!n)return;let r=this.getEffectiveTTL(e),i=`${e}:${t.timestamp}:${Math.random().toString(36).slice(2,8)}`;n.push({name:t.name,data:t.data,context:{...t.context},timestamp:t.timestamp}),n.length>this.bufferLimit&&n.shift(),this.firedSinceLastComposite.add(e);let o=await this.checkAndEmitComposite();if(r==="instant"&&!o){n.pop(),this.firedSinceLastComposite.delete(e);return}if(typeof r=="number"&&r>0){let s=setTimeout(()=>{this.expireEvent(e,t.timestamp),this.expirationTimers.delete(i)},r);this.expirationTimers.set(i,s)}}expireEvent(e,t){let n=this.buffers.get(e);if(!n)return;let r=n.filter(i=>i.timestamp>t);this.buffers.set(e,r),r.length===0&&this.firedSinceLastComposite.delete(e)}async checkAndEmitComposite(){for(let r of this.sourceEvents){let i=this.buffers.get(r);if(!i||i.length===0)return!1}for(let r of this.sourceEvents)if(!this.firedSinceLastComposite.has(r))return!1;if(this.kernel.listenerCount(N)===0)return!1;let e=new Map,t=Array.from(this.sourceEvents);for(let r of t){let i=this.buffers.get(r);if(!i||i.length===0)continue;let o=i[i.length-1],c={...o.data&&typeof o.data=="object"?o.data:{},...o.context};e.set(r,c)}let n=this.merger.mergeWithConflicts(e,t);if(this.lastConflicts=n.conflicts,await this.kernel.emit(N,{sources:t,contexts:Object.fromEntries(e),merged:n.context}),this.firedSinceLastComposite.clear(),this.reset)for(let r of this.sourceEvents){let i=this.buffers.get(r);if(i&&i.length>0){let o=i[i.length-1];this.buffers.set(r,[o])}}return!0}onComposed(e,t){return this.kernel.on(N,e,t)}once(e){return new Promise((t,n)=>{let r,i=s=>{r&&clearTimeout(r),t(s)},o=this.kernel.on(N,i,{once:!0});e?.timeout&&(r=setTimeout(()=>{o(),n(new Error(`composition.once() timed out after ${e.timeout}ms`))},e.timeout))})}offComposed(e){this.kernel.off(N,e)}composedListenerCount(){return this.kernel.listenerCount(N)}on(e,t,n){return this.kernel.on(e,t,n)}off(e,t){this.kernel.off(e,t)}async emit(e,t){if(String(e).startsWith("__qk:"))throw new Error(`Cannot emit reserved event: ${String(e)}`);return this.kernel.emit(e,t)}getContext(){for(let r of this.sourceEvents){let i=this.buffers.get(r);if(!i||i.length===0)return null}let e=new Map,t=Array.from(this.sourceEvents);for(let r of t){let i=this.buffers.get(r);if(!i||i.length===0)continue;let o=i[i.length-1],c={...o.data&&typeof o.data=="object"?o.data:{},...o.context};e.set(r,c)}let n=this.merger.mergeWithConflicts(e,t);return this.lastConflicts=n.conflicts,n.context}listenerCount(e){return this.kernel.listenerCount(e)}eventNames(){return this.kernel.eventNames()}offAll(e){this.kernel.offAll(e)}debug(e){this.kernel.debug(e)}getBuffer(e){return this.buffers.get(e)}clearBuffers(){for(let e of this.sourceEvents)this.buffers.set(e,[]);this.firedSinceLastComposite.clear()}getConflicts(){return this.lastConflicts}dispose(){for(let e of this.subscriptions)e.unbind();this.subscriptions=[];for(let e of this.expirationTimers.values())clearTimeout(e);this.expirationTimers.clear(),this.kernel.offAll(),this.buffers.clear(),this.sourceEvents.clear(),this.firedSinceLastComposite.clear(),this.lastConflicts=[]}getEventTTL(){return this.eventTTL}setEventTTL(e){this.eventTTL=e}getEventTTLs(){return this.eventTTLs}setEventTTLFor(e,t){this.eventTTLs[e]=t}clearEventTTLFor(e){delete this.eventTTLs[e]}},X=(a,e)=>new M(a,e);var T=class a{listeners=new Map;options;listenerIdCounter=0;executionErrors=[];constructor(e={}){this.options={delimiter:e.delimiter??":",wildcard:e.wildcard??!0,maxListeners:e.maxListeners??1/0,debug:e.debug??!1,errorBoundary:e.errorBoundary??!0,onError:e.onError??(t=>{console.error("Kernel error:",t)}),contextMerger:e.contextMerger??void 0,onContextConflict:e.onContextConflict??void 0},this.options.debug&&console.debug("[QuarKernel] Kernel initialized",{delimiter:this.options.delimiter,wildcard:this.options.wildcard,maxListeners:this.options.maxListeners,errorBoundary:this.options.errorBoundary})}on(e,t,n={}){let r=String(e);if(n.signal?.aborted)return this.options.debug&&console.debug("[QuarKernel] Listener not added (signal already aborted)",{event:r}),()=>{};let i=n.priority??0,o=n.id??`listener_${++this.listenerIdCounter}`,s=Array.isArray(n.after)?n.after:n.after?[n.after]:[],c;n.signal&&(c=()=>this.off(r,t));let u={id:o,callback:t,after:s,priority:i,once:n.once??!1,original:t,signal:n.signal,abortListener:c},f=this.listeners.get(r)??[];return f.push(u),f.sort((d,g)=>g.priority-d.priority),this.listeners.set(r,f),this.options.debug&&console.debug("[QuarKernel] Listener added",{event:r,listenerId:o,priority:i,after:s,once:u.once,totalListeners:f.length}),this.options.maxListeners>0&&f.length>this.options.maxListeners&&console.warn(`MaxListenersExceeded: Event "${r}" has ${f.length} listeners (limit: ${this.options.maxListeners})`),n.signal&&c&&n.signal.addEventListener("abort",c,{once:!0}),()=>this.off(r,t)}once(e,t){return new Promise((n,r)=>{let i,o=c=>{i&&clearTimeout(i),n(c)},s=this.on(e,o,{once:!0});t?.timeout&&(i=setTimeout(()=>{s(),r(new Error(`once('${String(e)}') timed out after ${t.timeout}ms`))},t.timeout))})}off(e,t){let n=this.listeners.get(e);if(!n)return;if(!t){this.options.debug&&console.debug("[QuarKernel] All listeners removed",{event:e,count:n.length});for(let s of n)s.signal&&s.abortListener&&s.signal.removeEventListener("abort",s.abortListener);this.listeners.delete(e);return}let r=n.find(s=>s.original===t);r?.signal&&r.abortListener&&r.signal.removeEventListener("abort",r.abortListener);let i=n.filter(s=>s.original!==t),o=n.length-i.length;this.options.debug&&o>0&&console.debug("[QuarKernel] Listener removed",{event:e,removed:o,remaining:i.length}),i.length===0?this.listeners.delete(e):this.listeners.set(e,i)}async emit(e,t){let n=String(e),r=Array.from(this.listeners.keys()),i=this.options.wildcard?B(n,r,this.options.delimiter):r.filter(d=>d===n),o=[];for(let d of i){let g=this.listeners.get(d);g&&o.push(...g)}if(o.length===0){this.options.debug&&console.debug("[QuarKernel] Event emitted (no listeners)",{event:n});return}this.options.debug&&console.debug("[QuarKernel] Event emitted",{event:n,listenerCount:o.length,data:t!==void 0?JSON.stringify(t).substring(0,100):void 0}),this.executionErrors=[];let s=new K(n,t,{}),c=this.sortListenersByDependencies(o),u=c.map(d=>this.executeListener(d,s,n)),f=await Promise.allSettled(u);if(this.removeOnceListeners(n,c,s),!this.options.errorBoundary){let d=f.filter(g=>g.status==="rejected").map(g=>g.reason);if(d.length>0)throw new AggregateError(d,`${d.length} listener(s) failed for event "${n}"`)}this.options.debug&&console.debug("[QuarKernel] Event completed",{event:n})}async emitSerial(e,t){let n=String(e),r=Array.from(this.listeners.keys()),i=this.options.wildcard?B(n,r,this.options.delimiter):r.filter(f=>f===n),o=[];for(let f of i){let d=this.listeners.get(f);d&&o.push(...d)}if(o.length===0){this.options.debug&&console.debug("[QuarKernel] Event emitted serially (no listeners)",{event:n});return}this.options.debug&&console.debug("[QuarKernel] Event emitted serially",{event:n,listenerCount:o.length,data:t!==void 0?JSON.stringify(t).substring(0,100):void 0}),this.executionErrors=[];let s=new K(n,t,{}),c=this.sortListenersByDependencies(o),u=[];for(let f of c)try{await this.executeListener(f,s,n)}catch(d){if(!this.options.errorBoundary)throw this.removeOnceListeners(n,c,s),d;u.push(d)}if(this.removeOnceListeners(n,c,s),!this.options.errorBoundary&&u.length>0)throw new AggregateError(u,`${u.length} listener(s) failed for event "${n}"`);this.options.debug&&console.debug("[QuarKernel] Event completed serially",{event:n})}sortListenersByDependencies(e){if(!e.some(s=>s.after.length>0))return[...e].sort((s,c)=>c.priority-s.priority);let n=new Set(e.map(s=>s.id));for(let s of e)for(let c of s.after)if(!n.has(c))throw new Error(`Listener "${s.id}" depends on missing listener "${c}"`);let r=e.map(s=>({id:s.id,after:s.after}));$(r);let i=new Map,o=(s,c=new Set)=>{if(i.has(s))return i.get(s);if(c.has(s))return 0;c.add(s);let u=e.find(g=>g.id===s);if(!u||u.after.length===0)return i.set(s,0),0;let d=Math.max(...u.after.map(g=>o(g,c)))+1;return i.set(s,d),d};return e.forEach(s=>o(s.id)),[...e].sort((s,c)=>{let u=i.get(s.id)??0,f=i.get(c.id)??0;return u!==f?u-f:c.priority-s.priority})}async executeListener(e,t,n){if(t.isPropagationStopped){this.options.debug&&console.debug("[QuarKernel] Listener skipped (propagation stopped)",{listenerId:e.id});return}let r=Date.now();this.options.debug&&console.debug("[QuarKernel] Listener executing",{listenerId:e.id,event:n,priority:e.priority});try{let i=new S(e.id,n,e.priority,e.after,this,e.original,e.signal);i.setCurrentEvent(t);try{if(await e.callback(t,i),this.options.debug){let o=Date.now()-r;console.debug("[QuarKernel] Listener completed",{listenerId:e.id,duration:`${o}ms`})}}finally{i.clearCurrentEvent()}}catch(i){let o={listenerId:e.id,error:i,timestamp:Date.now(),eventName:n};if(this.executionErrors.push(o),this.options.debug&&console.debug("[QuarKernel] Listener error",{listenerId:e.id,error:i.message}),this.options.errorBoundary)this.options.onError(i,t);else throw i}}removeOnceListeners(e,t,n){let r=t.filter(i=>i.once?i.once===!0?!0:typeof i.once=="function"?i.once(n):!1:!1);if(r.length!==0){this.options.debug&&console.debug("[QuarKernel] Removing once listeners",{event:e,count:r.length});for(let i of r)for(let[o,s]of this.listeners.entries())if(s.includes(i)){this.off(o,i.original);break}}}listenerCount(e){if(!e){let r=0;for(let i of this.listeners.values())r+=i.length;return r}let t=String(e);return this.listeners.get(t)?.length??0}eventNames(){return Array.from(this.listeners.keys())}offAll(e){if(!e){for(let r of this.listeners.values())for(let i of r)i.signal&&i.abortListener&&i.signal.removeEventListener("abort",i.abortListener);this.listeners.clear();return}let t=String(e),n=this.listeners.get(t);if(n)for(let r of n)r.signal&&r.abortListener&&r.signal.removeEventListener("abort",r.abortListener);this.listeners.delete(t)}debug(e){this.options.debug=e,console.debug(e?"[QuarKernel] Debug mode enabled":"[QuarKernel] Debug mode disabled")}getExecutionErrors(){return this.executionErrors}clearExecutionErrors(){this.executionErrors=[]}static compose(...e){let t=[],n;for(let r of e)Array.isArray(r)&&r.length===2&&r[0]instanceof a?t.push(r):typeof r=="object"&&!Array.isArray(r)&&(n=r);return new M(t,n)}},J=a=>new T(a);function U(a){return typeof a=="string"&&a.length>0}function V(a){return typeof a=="function"}function Z(a){return typeof a=="function"}function Y(a){return a!==null&&typeof a=="object"&&"merge"in a&&typeof a.merge=="function"}function ee(a){return typeof a=="function"}function te(a){if(a===null||typeof a!="object")return!1;let e=a;return!("id"in e&&typeof e.id!="string"||"after"in e&&typeof e.after!="string"&&!Array.isArray(e.after)||"priority"in e&&typeof e.priority!="number"||"once"in e&&typeof e.once!="boolean"&&typeof e.once!="function"||"signal"in e&&!(e.signal instanceof AbortSignal))}function ne(a){if(a===null||typeof a!="object")return!1;let e=a;return typeof e.name=="string"&&"data"in e&&typeof e.context=="object"&&e.context!==null&&typeof e.timestamp=="number"&&typeof e.stopPropagation=="function"&&typeof e.isPropagationStopped=="boolean"}var I=class extends Error{constructor(e){super(`Circular dependency detected: ${e.join(" -> ")}`),this.name="CircularDependencyError"}},D=class extends Error{constructor(e,t){super(`Listener "${e}" depends on missing listener "${t}"`),this.name="MissingDependencyError"}},P=class extends Error{constructor(e,t){super(`Max listeners (${t}) exceeded for event "${e}"`),this.name="MaxListenersExceededError"}};function A(a,e){let{prefix:t,initial:n,states:r,allowForce:i=!0,snapshot:o,trackHistory:s=!1,maxHistory:c=100}=e,u=o?.state??n,f=o?.context??e.context??{},d=o?.history?[...o.history]:[];if(!r[u])throw new Error(`Invalid initial state "${u}" - not defined in states`);let g=[],p=async(l,h)=>{let x={machine:t,...h};await a.emit(`${t}:${l}`,x)},m=l=>{let h=r[u];if(!h?.on)return null;let x=h.on[l];return x?typeof x=="string"?{target:x}:x:null},v=async(l,h,x,b=!1)=>{let E=u,L=r[E],C=r[h];if(!C)throw new Error(`Invalid target state "${h}" - not defined in states`);L?.exit&&await L.exit(f,l,x),await p(`exit:${E}`,{state:E,from:E,to:h,event:l,payload:x,forced:b}),u=h,s&&(d.push({from:E,to:h,event:l,timestamp:Date.now()}),d.length>c&&(d=d.slice(-c))),await p("transition",{state:h,from:E,to:h,event:l,payload:x,forced:b}),await p(`transition:${l}`,{state:h,from:E,to:h,event:l,payload:x,forced:b}),await p(`enter:${h}`,{state:h,from:E,to:h,event:l,payload:x,forced:b}),C.entry&&await C.entry(f,l,x)},y={prefix:t,getState(){return u},getContext(){return f},setContext(l){typeof l=="function"?f=l(f):f={...f,...l}},async send(l,h,x={}){let{force:b=!1,target:E,guard:L,fallback:C}=x;if(b&&i)return await v(l,E??n,h,!0),!0;let w=m(l);if(!w){if(b&&!i)throw new Error(`Force transitions not allowed on machine "${t}"`);return!1}let q=L??w.guard;if(q&&!q(f,l,h)){if(await p("guard:rejected",{state:u,event:l,payload:h}),C){if(!r[C])throw new Error(`Invalid fallback state "${C}" - not defined in states`);return await v(l,C,h,!1),!0}return!1}if(w.actions){let z=Array.isArray(w.actions)?w.actions:[w.actions];for(let re of z)await re(f,l,h)}return await v(l,w.target,h,!1),!0},can(l){return m(l)!==null},transitions(){let l=r[u];return l?.on?Object.keys(l.on):[]},toJSON(){return{state:u,context:structuredClone(f),history:s?[...d]:void 0}},restore(l){if(!r[l.state])throw new Error(`Invalid snapshot state "${l.state}" - not defined in states`);u=l.state,f=l.context,l.history&&(d=[...l.history])},waitFor(l,h){return u===l?Promise.resolve({state:u,context:structuredClone(f)}):new Promise((x,b)=>{let E,L=a.on(`${t}:enter:${l}`,C=>{E&&clearTimeout(E),L(),x({state:l,from:C.data?.from,event:C.data?.event,context:structuredClone(f)})});g.push(L),h?.timeout&&(E=setTimeout(()=>{L(),b(new Error(`waitFor('${l}') timed out after ${h.timeout}ms`))},h.timeout))})},destroy(){for(let l of g)l();g.length=0}};return o||setTimeout(async()=>{let l=r[n];await p(`enter:${n}`,{state:n}),l?.entry&&await l.entry(f,"__INIT__",void 0)},0),y}function _(a){return a}function H(a){let{id:e,initial:t,context:n,states:r,on:i={},helpers:o={}}=a,s=new T,c=new Map,u={prefix:e,initial:t,context:n,states:{},trackHistory:!0};for(let[p,m]of Object.entries(r))u.states[p]={on:m.on?{...m.on}:void 0};let f=A(s,u),d=()=>({set:p=>f.setContext(p),send:(p,m)=>f.send(p,m),log:console.log,...o});return s.on(`${e}:enter:*`,async p=>{let m=p.data?.state;if(!m)return;c.forEach((y,l)=>{l.startsWith(m+":")||(clearTimeout(y),c.delete(l))});let v=r[m];if(v&&(v.entry&&await v.entry(f.getContext(),d()),v.after)){let y=setTimeout(()=>{f.send(v.after.send),c.delete(m+":timer")},v.after.delay);c.set(m+":timer",y)}}),s.on(`${e}:exit:*`,async p=>{let m=p.data?.state;if(!m)return;let v=c.get(m+":timer");v&&(clearTimeout(v),c.delete(m+":timer"));let y=r[m];y&&y.exit&&await y.exit(f.getContext(),d())}),s.on(`${e}:transition`,async p=>{let m=p.data?.event;if(!m)return;let v=i[m];v&&await v(f.getContext(),d())}),{...f,id:e,get state(){return f.getState()},get context(){return f.getContext()},destroy(){c.forEach(p=>clearTimeout(p)),c.clear(),f.destroy()}}}function Q(a,e){let{prefix:t,guards:n={},actions:r={},allowForce:i,trackHistory:o}=e,s={};for(let[c,u]of Object.entries(a.states)){let f={};if(u.on){f.on={};for(let[d,g]of Object.entries(u.on))if(typeof g=="string")f.on[d]=g;else{let p={target:g.target||c},m=g.cond||g.guard;if(m){let v=typeof m=="string"?m:m.type,y=n[v];y?p.guard=y:console.warn(`Guard "${v}" not provided in options.guards`)}if(g.actions){let v=Array.isArray(g.actions)?g.actions:[g.actions],y=[];for(let l of v){let h=typeof l=="string"?l:l.type,x=r[h];x?y.push(x):console.warn(`Action "${h}" not provided in options.actions`)}y.length>0&&(p.actions=y.length===1?y[0]:y)}f.on[d]=p}}if(u.entry){let d=Array.isArray(u.entry)?u.entry:[u.entry],g=[];for(let p of d){let m=typeof p=="string"?p:p.type,v=r[m];v&&g.push(v)}g.length>0&&(f.entry=async(p,m,v)=>{for(let y of g)await y(p,m,v)})}if(u.exit){let d=Array.isArray(u.exit)?u.exit:[u.exit],g=[];for(let p of d){let m=typeof p=="string"?p:p.type,v=r[m];v&&g.push(v)}g.length>0&&(f.exit=async(p,m,v)=>{for(let y of g)await y(p,m,v)})}s[c]=f}return{prefix:t,initial:a.initial,context:a.context,states:s,allowForce:i,trackHistory:o}}function W(a){let e={};for(let[t,n]of Object.entries(a.states)){let r={};if(n.on){r.on={};for(let[i,o]of Object.entries(n.on))if(typeof o=="string")r.on[i]=o;else{let s={target:o.target};o.guard&&(s.guard={type:"guard"}),o.actions&&(s.actions={type:"action"}),r.on[i]=s}}n.entry&&(r.entry={type:"entry"}),n.exit&&(r.exit={type:"exit"}),e[t]=r}return{id:a.prefix,initial:a.initial,context:a.context,states:e}}function G(a){let{id:e,initial:t,context:n,states:r,on:i}=a,o=[`// FSM Definition for "${e}"`,"// Helpers: ctx, set(obj), send(event), log(msg)","","export default {",` id: '${e}',`,` initial: '${t}',`];n&&Object.keys(n).length>0&&o.push(` context: ${JSON.stringify(n)},`),o.push(" states: {");for(let[s,c]of Object.entries(r)){if(o.push(` ${s}: {`),c.entry&&o.push(` entry: ${c.entry.toString()},`),c.exit&&o.push(` exit: ${c.exit.toString()},`),c.after&&o.push(` after: { delay: ${c.after.delay}, send: '${c.after.send}' },`),c.on&&Object.keys(c.on).length>0){o.push(" on: {");for(let[u,f]of Object.entries(c.on))typeof f=="string"?o.push(` ${u}: '${f}',`):o.push(` ${u}: { target: '${f.target}'${f.cond?`, cond: '${f.cond}'`:""} },`);o.push(" },")}o.push(" },")}if(o.push(" },"),i&&Object.keys(i).length>0){o.push(" on: {");for(let[s,c]of Object.entries(i))o.push(` ${s}: ${c.toString()},`);o.push(" },")}return o.push("};"),o.join(`
2
2
  `)}var ve="2.2.0";return fe(he);})();
3
3
  //# sourceMappingURL=index.umd.js.map