@directive-run/core 0.1.1 → 0.2.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.js CHANGED
@@ -1,5 +1,5 @@
1
- var le=class extends Error{constructor(o,c,i,n,u=true){super(o);this.source=c;this.sourceId=i;this.context=n;this.recoverable=u;this.name="DirectiveError";}};function Pe(){return {create(e){return e}}}function Ae(){return {create(e){return e}}}function je(e){return e}function Fe(e){return e}function st(e){return e._mode==="single"}function ot(e){return e._mode==="namespaced"}var oe=[];function it(){let e=new Set;return {get isTracking(){return true},track(t){e.add(t);},getDependencies(){return e}}}var at={isTracking:false,track(){},getDependencies(){return new Set}};function _e(){return oe[oe.length-1]??at}function ct(){return oe.length>0}function ie(e){let t=it();oe.push(t);try{return {value:e(),deps:t.getDependencies()}}finally{oe.pop();}}function Se(e){let t=oe.splice(0,oe.length);try{return e()}finally{oe.push(...t);}}function fe(e){_e().track(e);}function ut(e,t=100){try{return JSON.stringify(e)?.slice(0,t)??String(e)}catch{return "[circular or non-serializable]"}}var Be=new Set;function he(e=[],t,o,c,i,n){return {_type:void 0,_validators:e,_typeName:t,_default:o,_transform:c,_description:i,_refinements:n,validate(u){return he([...e,u],t,o,c,i,n)}}}function X(e,t,o,c,i,n){return {...he(e,t,o,c,i,n),default(d){return X(e,t,d,c,i,n)},transform(d){return X([],t,void 0,s=>{let m=c?c(s):s;return d(m)},i)},brand(){return X(e,`Branded<${t}>`,o,c,i,n)},describe(d){return X(e,t,o,c,d,n)},refine(d,a){let s=[...n??[],{predicate:d,message:a}];return X([...e,d],t,o,c,i,s)},nullable(){return X([d=>d===null||e.every(a=>a(d))],`${t} | null`,o,c,i)},optional(){return X([d=>d===void 0||e.every(a=>a(d))],`${t} | undefined`,o,c,i)}}}var dt={string(){return X([e=>typeof e=="string"],"string")},number(){let e=(t,o,c,i,n)=>({...X(t,"number",o,c,i,n),min(d){return e([...t,a=>a>=d],o,c,i,n)},max(d){return e([...t,a=>a<=d],o,c,i,n)},default(d){return e(t,d,c,i,n)},describe(d){return e(t,o,c,d,n)},refine(d,a){let s=[...n??[],{predicate:d,message:a}];return e([...t,d],o,c,i,s)}});return e([t=>typeof t=="number"])},boolean(){return X([e=>typeof e=="boolean"],"boolean")},array(){let e=(t,o,c,i,n)=>{let u=X(t,"array",c,void 0,i),d=n??{value:-1};return {...u,get _lastFailedIndex(){return d.value},set _lastFailedIndex(s){d.value=s;},of(s){let m={value:-1};return e([...t,p=>{for(let q=0;q<p.length;q++){let T=p[q];if(!s._validators.every(A=>A(T)))return m.value=q,false}return true}],s,c,i,m)},nonEmpty(){return e([...t,s=>s.length>0],o,c,i,d)},maxLength(s){return e([...t,m=>m.length<=s],o,c,i,d)},minLength(s){return e([...t,m=>m.length>=s],o,c,i,d)},default(s){return e(t,o,s,i,d)},describe(s){return e(t,o,c,s,d)}}};return e([t=>Array.isArray(t)])},object(){let e=(t,o,c)=>({...X(t,"object",o,void 0,c),shape(n){return e([...t,u=>{for(let[d,a]of Object.entries(n)){let s=u[d],m=a;if(m&&!m._validators.every(p=>p(s)))return false}return true}],o,c)},nonNull(){return e([...t,n=>n!=null],o,c)},hasKeys(...n){return e([...t,u=>n.every(d=>d in u)],o,c)},default(n){return e(t,n,c)},describe(n){return e(t,o,n)}});return e([t=>typeof t=="object"&&t!==null&&!Array.isArray(t)])},any(){return process.env.NODE_ENV!=="production"&&!Be.has("any")&&(Be.add("any"),console.warn("[Directive] t.any() bypasses runtime validation. Consider using t.object<T>(), t.union(), or a Zod schema for type safety.")),he([],"any")},enum(...e){process.env.NODE_ENV!=="production"&&e.length===0&&console.warn("[Directive] t.enum() called with no values - this will reject all strings");let t=new Set(e);return X([o=>typeof o=="string"&&t.has(o)],`enum(${e.join("|")})`)},literal(e){return X([t=>t===e],`literal(${String(e)})`)},nullable(e){let t=e._typeName??"unknown";return he([o=>o===null?true:e._validators.every(c=>c(o))],`${t} | null`)},optional(e){let t=e._typeName??"unknown";return he([o=>o===void 0?true:e._validators.every(c=>c(o))],`${t} | undefined`)},union(...e){process.env.NODE_ENV!=="production"&&e.length===0&&console.warn("[Directive] t.union() called with no types - this will reject all values");let t=e.map(o=>o._typeName??"unknown");return X([o=>e.some(c=>c._validators.every(i=>i(o)))],t.join(" | "))},record(e){let t=e._typeName??"unknown";return X([o=>typeof o!="object"||o===null||Array.isArray(o)?false:Object.values(o).every(c=>e._validators.every(i=>i(c)))],`Record<string, ${t}>`)},tuple(...e){process.env.NODE_ENV!=="production"&&e.length===0&&console.warn("[Directive] t.tuple() called with no types - this will only accept empty arrays");let t=e.map(o=>o._typeName??"unknown");return X([o=>!Array.isArray(o)||o.length!==e.length?false:e.every((c,i)=>c._validators.every(n=>n(o[i])))],`[${t.join(", ")}]`)},date(){return X([e=>e instanceof Date&&!isNaN(e.getTime())],"Date")},uuid(){let e=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;return X([t=>typeof t=="string"&&e.test(t)],"uuid")},email(){let e=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;return X([t=>typeof t=="string"&&e.test(t)],"email")},url(){return X([e=>{if(typeof e!="string")return false;try{return new URL(e),!0}catch{return false}}],"url")},bigint(){return X([e=>typeof e=="bigint"],"bigint")}};function Ne(e){let{schema:t,onChange:o,onBatch:c}=e,n=Object.keys(t).length===0,u=e.validate??process.env.NODE_ENV!=="production",d=e.strictKeys??(process.env.NODE_ENV!=="production"&&!n),a=e.redactErrors??false,s=new Map,m=new Set,p=new Map,q=new Set,T=0,A=[],B=new Set,K=false,C=[],P=100;function W(g){return g!==null&&typeof g=="object"&&"safeParse"in g&&typeof g.safeParse=="function"&&"_def"in g&&"parse"in g&&typeof g.parse=="function"}function f(g){let D=g;if(D._typeName)return D._typeName;if(W(g)){let j=g._def;if(j?.typeName)return j.typeName.replace(/^Zod/,"").toLowerCase()}return "unknown"}function b(g){return a?"[redacted]":ut(g)}function k(g,D){if(!u)return;let j=t[g];if(!j){if(d)throw new Error(`[Directive] Unknown fact key: "${g}". Key not defined in schema.`);console.warn(`[Directive] Unknown fact key: "${g}"`);return}if(W(j)){let y=j.safeParse(D);if(!y.success){let S=D===null?"null":Array.isArray(D)?"array":typeof D,x=b(D),l=y.error?.message??y.error?.issues?.[0]?.message??"Validation failed",h=f(j);throw new Error(`[Directive] Validation failed for "${g}": expected ${h}, got ${S} ${x}. ${l}`)}return}let F=j,V=F._validators;if(!V||!Array.isArray(V)||V.length===0)return;let r=F._typeName??"unknown";for(let y=0;y<V.length;y++){let S=V[y];if(typeof S=="function"&&!S(D)){let x=D===null?"null":Array.isArray(D)?"array":typeof D,l=b(D),h="";typeof F._lastFailedIndex=="number"&&F._lastFailedIndex>=0&&(h=` (element at index ${F._lastFailedIndex} failed)`,F._lastFailedIndex=-1);let w=y===0?"":` (validator ${y+1} failed)`;throw new Error(`[Directive] Validation failed for "${g}": expected ${r}, got ${x} ${l}${w}${h}`)}}}function O(g){p.get(g)?.forEach(D=>D());}function M(){q.forEach(g=>g());}function I(g,D,j){if(K){C.push({key:g,value:D,prev:j});return}K=true;try{o?.(g,D,j),O(g),M();let F=0;for(;C.length>0;){if(++F>P)throw C.length=0,new Error(`[Directive] Infinite notification loop detected after ${P} iterations. A listener is repeatedly mutating facts that re-trigger notifications.`);let V=[...C];C.length=0;for(let r of V)o?.(r.key,r.value,r.prev),O(r.key);M();}}finally{K=false;}}function R(){if(!(T>0)){if(c&&A.length>0&&c([...A]),B.size>0){K=true;try{for(let D of B)O(D);M();let g=0;for(;C.length>0;){if(++g>P)throw C.length=0,new Error(`[Directive] Infinite notification loop detected during flush after ${P} iterations.`);let D=[...C];C.length=0;for(let j of D)o?.(j.key,j.value,j.prev),O(j.key);M();}}finally{K=false;}}A.length=0,B.clear();}}let v={get(g){return fe(g),s.get(g)},has(g){return fe(g),s.has(g)},set(g,D){k(g,D);let j=s.get(g);Object.is(j,D)||(s.set(g,D),m.add(g),T>0?(A.push({key:g,value:D,prev:j,type:"set"}),B.add(g)):I(g,D,j));},delete(g){let D=s.get(g);s.delete(g),m.delete(g),T>0?(A.push({key:g,value:void 0,prev:D,type:"delete"}),B.add(g)):I(g,void 0,D);},batch(g){T++;try{g();}finally{T--,R();}},subscribe(g,D){for(let j of g){let F=j;p.has(F)||p.set(F,new Set),p.get(F).add(D);}return ()=>{for(let j of g){let F=p.get(j);F&&(F.delete(D),F.size===0&&p.delete(j));}}},subscribeAll(g){return q.add(g),()=>q.delete(g)},toObject(){let g={};for(let D of m)s.has(D)&&(g[D]=s.get(D));return g}};return v.registerKeys=g=>{for(let D of Object.keys(g))pe.has(D)||(t[D]=g[D],m.add(D));},v}var pe=Object.freeze(new Set(["__proto__","constructor","prototype"]));function Ke(e,t){let o=()=>({get:i=>Se(()=>e.get(i)),has:i=>Se(()=>e.has(i))});return new Proxy({},{get(i,n){if(n==="$store")return e;if(n==="$snapshot")return o;if(typeof n!="symbol"&&!pe.has(n))return e.get(n)},set(i,n,u){return typeof n=="symbol"||n==="$store"||n==="$snapshot"||pe.has(n)?false:(e.set(n,u),true)},deleteProperty(i,n){return typeof n=="symbol"||n==="$store"||n==="$snapshot"||pe.has(n)?false:(e.delete(n),true)},has(i,n){return n==="$store"||n==="$snapshot"?true:typeof n=="symbol"||pe.has(n)?false:e.has(n)},ownKeys(){return Object.keys(t)},getOwnPropertyDescriptor(i,n){return n==="$store"||n==="$snapshot"?{configurable:true,enumerable:false,writable:false}:{configurable:true,enumerable:true,writable:true}}})}function we(e){let t=Ne(e),o=Ke(t,e.schema);return {store:t,facts:o}}function We(e,t){if(process.env.NODE_ENV!=="production"){!e||typeof e!="string"?console.warn("[Directive] Module ID must be a non-empty string"):/^[a-z][a-z0-9-]*$/i.test(e)||console.warn(`[Directive] Module ID "${e}" should follow kebab-case convention (e.g., "my-module")`),t.schema?t.schema.facts||console.warn("[Directive] Module schema.facts is required"):console.warn("[Directive] Module schema is required");let c=t.schema?.derivations??{},i=t.derive??{},n=new Set(Object.keys(c)),u=new Set(Object.keys(i));for(let p of u)n.has(p)||console.warn(`[Directive] Derivation "${p}" not declared in schema.derivations`);for(let p of n)u.has(p)||console.warn(`[Directive] schema.derivations["${p}"] has no matching implementation in derive`);let d=t.schema?.events??{},a=t.events??{},s=new Set(Object.keys(d)),m=new Set(Object.keys(a));for(let p of m)s.has(p)||console.warn(`[Directive] Event "${p}" not declared in schema.events`);for(let p of s)m.has(p)||console.warn(`[Directive] schema.events["${p}"] has no matching handler in events`);if(t.resolvers&&t.schema?.requirements){let p=new Set(Object.keys(t.schema.requirements));for(let[q,T]of Object.entries(t.resolvers)){let A=T;typeof A.requirement=="string"&&!p.has(A.requirement)&&console.warn(`[Directive] Resolver "${q}" references unknown requirement type "${A.requirement}". Available types: ${[...p].join(", ")||"(none)"}`);}}}let o="crossModuleDeps"in t?t.crossModuleDeps:void 0;return {id:e,schema:t.schema,init:t.init,derive:t.derive??{},events:t.events??{},effects:t.effects,constraints:t.constraints,resolvers:t.resolvers,hooks:t.hooks,crossModuleDeps:o}}function lt(e){return t=>We(t,e)}async function ge(e,t,o){let c,i=new Promise((n,u)=>{c=setTimeout(()=>u(new Error(o)),t);});try{return await Promise.race([e,i])}finally{clearTimeout(c);}}function ve(e,t=50){let o=new WeakSet;function c(i,n){if(n>t)return '"[max depth exceeded]"';if(i===null)return "null";if(i===void 0)return "undefined";let u=typeof i;if(u==="string")return JSON.stringify(i);if(u==="number"||u==="boolean")return String(i);if(u==="function")return '"[function]"';if(u==="symbol")return '"[symbol]"';if(Array.isArray(i)){if(o.has(i))return '"[circular]"';o.add(i);let d=`[${i.map(a=>c(a,n+1)).join(",")}]`;return o.delete(i),d}if(u==="object"){let d=i;if(o.has(d))return '"[circular]"';o.add(d);let m=`{${Object.keys(d).sort().map(p=>`${JSON.stringify(p)}:${c(d[p],n+1)}`).join(",")}}`;return o.delete(d),m}return '"[unknown]"'}return c(e,0)}function ae(e,t=50){let o=new Set(["__proto__","constructor","prototype"]),c=new WeakSet;function i(n,u){if(u>t)return false;if(n==null||typeof n!="object")return true;let d=n;if(c.has(d))return true;if(c.add(d),Array.isArray(d)){for(let a of d)if(!i(a,u+1))return c.delete(d),false;return c.delete(d),true}for(let a of Object.keys(d))if(o.has(a)||!i(d[a],u+1))return c.delete(d),false;return c.delete(d),true}return i(e,0)}function ft(e,t){if(e===t)return true;if(!e||!t)return false;let o=Object.keys(e),c=Object.keys(t);if(o.length!==c.length)return false;for(let i of o)if(e[i]!==t[i])return false;return true}function Ve(e){let t=ve(e),o=5381;for(let c=0;c<t.length;c++)o=(o<<5)+o^t.charCodeAt(c);return (o>>>0).toString(16)}function ze(e,t=Date.now()){return e.expiresAt!==void 0&&t>e.expiresAt}function gt(e,t=Date.now()){if(!e||typeof e!="object")throw new Error("[Directive] Invalid snapshot: expected an object with 'data' and 'createdAt' properties.");if(!("data"in e))throw new Error("[Directive] Invalid snapshot: missing required 'data' property.");if(!("createdAt"in e)||typeof e.createdAt!="number")throw new Error("[Directive] Invalid snapshot: missing or invalid 'createdAt' property (expected number).");if(ze(e,t)){let o=new Date(e.expiresAt).toISOString();throw new Error(`[Directive] Snapshot expired at ${o}. Obtain a fresh snapshot from the source.`)}return e.data}function mt(e,t){let o=[];function c(n,u,d){if(n==null){u!=null&&o.push({path:d,oldValue:n,newValue:u,type:"added"});return}if(u==null){o.push({path:d,oldValue:n,newValue:u,type:"removed"});return}if(typeof n!="object"||typeof u!="object"){Object.is(n,u)||o.push({path:d,oldValue:n,newValue:u,type:"changed"});return}if(Array.isArray(n)&&Array.isArray(u)){if(n.length!==u.length){o.push({path:d,oldValue:n,newValue:u,type:"changed"});return}for(let p=0;p<n.length;p++)c(n[p],u[p],`${d}[${p}]`);return}let a=n,s=u,m=new Set([...Object.keys(a),...Object.keys(s)]);for(let p of m){let q=d?`${d}.${p}`:p;p in a?p in s?c(a[p],s[p],q):o.push({path:q,oldValue:a[p],newValue:void 0,type:"removed"}):o.push({path:q,oldValue:void 0,newValue:s[p],type:"added"});}}c(e.data,t.data,"");let i=e.version!==t.version&&(e.version!==void 0||t.version!==void 0);return {identical:o.length===0,changes:o,versionChanged:i,oldVersion:e.version,newVersion:t.version}}function yt(e){return "signature"in e&&typeof e.signature=="string"}async function pt(e,t){let o=ve({data:e.data,createdAt:e.createdAt,expiresAt:e.expiresAt,version:e.version,metadata:e.metadata}),c=await Le(o,t);return {...e,signature:c,algorithm:"hmac-sha256"}}async function ht(e,t){if(!e.signature||e.algorithm!=="hmac-sha256")return false;let o=ve({data:e.data,createdAt:e.createdAt,expiresAt:e.expiresAt,version:e.version,metadata:e.metadata}),c=await Le(o,t);return vt(e.signature,c)}async function Le(e,t){let o=typeof t=="string"?new TextEncoder().encode(t):t,c={name:"HMAC",hash:{name:"SHA-256"}},i=await crypto.subtle.importKey("raw",o,c,false,["sign"]),n=new TextEncoder().encode(e),u=await crypto.subtle.sign("HMAC",i,n);return Array.from(new Uint8Array(u)).map(d=>d.toString(16).padStart(2,"0")).join("")}function vt(e,t){if(e.length!==t.length)return false;let o=0;for(let c=0;c<e.length;c++)o|=e.charCodeAt(c)^t.charCodeAt(c);return o===0}function Ue(e,t){if(t)return t(e);let{type:o,...c}=e,i=ve(c);return `${o}:${i}`}function He(e,t,o){return {requirement:e,id:Ue(e,o),fromConstraint:t}}function St(e){return t=>({type:e,...t})}function bt(e,t){return e.type===t}function wt(e){return t=>t.type===e}var ce=class e{map=new Map;add(t){this.map.has(t.id)||this.map.set(t.id,t);}remove(t){return this.map.delete(t)}has(t){return this.map.has(t)}get(t){return this.map.get(t)}all(){return [...this.map.values()]}ids(){return [...this.map.keys()]}get size(){return this.map.size}clear(){this.map.clear();}clone(){let t=new e;for(let o of this.map.values())t.add(o);return t}diff(t){let o=[],c=[],i=[];for(let n of this.map.values())t.has(n.id)?i.push(n):o.push(n);for(let n of t.map.values())this.map.has(n.id)||c.push(n);return {added:o,removed:c,unchanged:i}}};var Rt=5e3;function Re(e){let{definitions:t,facts:o,requirementKeys:c={},defaultTimeout:i=Rt,onEvaluate:n,onError:u}=e,d=new Map,a=new Set,s=new Set,m=new Map,p=new Map,q=new Set,T=new Map,A=new Map,B=false,K=new Set,C=new Set,P=new Map,W=[],f=new Map;function b(){for(let[l,h]of Object.entries(t))if(h.after)for(let w of h.after)t[w]&&(P.has(w)||P.set(w,new Set),P.get(w).add(l));}function k(){let l=new Set,h=new Set,w=[];function $(E,z){if(l.has(E))return;if(h.has(E)){let U=z.indexOf(E),_=[...z.slice(U),E].join(" \u2192 ");throw new Error(`[Directive] Constraint cycle detected: ${_}. Remove one of the \`after\` dependencies to break the cycle.`)}h.add(E),z.push(E);let L=t[E];if(L?.after)for(let U of L.after)t[U]&&$(U,z);z.pop(),h.delete(E),l.add(E),w.push(E);}for(let E of Object.keys(t))$(E,[]);W=w,f=new Map(W.map((E,z)=>[E,z]));}if(k(),b(),process.env.NODE_ENV!=="production"){for(let[l,h]of Object.entries(t))if(h.after)for(let w of h.after)t[w]||console.warn(`[Directive] Constraint "${l}" references unknown constraint "${w}" in \`after\`. This dependency will be ignored. Check for typos or ensure the constraint exists.`);}function O(l,h){return h.async!==void 0?h.async:!!s.has(l)}function M(l){let h=t[l];if(!h)throw new Error(`[Directive] Unknown constraint: ${l}`);let w=O(l,h);w&&s.add(l);let $={id:l,priority:h.priority??0,isAsync:w,lastResult:null,isEvaluating:false,error:null,lastResolvedAt:null,after:h.after??[]};return d.set(l,$),$}function I(l){return d.get(l)??M(l)}function R(l,h){let w=m.get(l)??new Set;for(let $ of w){let E=p.get($);E?.delete(l),E&&E.size===0&&p.delete($);}for(let $ of h)p.has($)||p.set($,new Set),p.get($).add(l);m.set(l,h);}function v(l){let h=t[l];if(!h)return false;let w=I(l);w.isEvaluating=true,w.error=null;try{let $;if(h.deps)$=h.when(o),T.set(l,new Set(h.deps));else {let E=ie(()=>h.when(o));$=E.value,T.set(l,E.deps);}return $ instanceof Promise?(s.add(l),w.isAsync=!0,process.env.NODE_ENV!=="production"&&console.warn(`[Directive] Constraint "${l}" returned a Promise but was not marked as async. Add \`async: true\` to the constraint definition to avoid this warning and improve performance.`),$.then(E=>(w.lastResult=E,w.isEvaluating=!1,n?.(l,E),E)).catch(E=>(w.error=E instanceof Error?E:new Error(String(E)),w.lastResult=!1,w.isEvaluating=!1,u?.(l,E),!1))):(w.lastResult=$,w.isEvaluating=!1,n?.(l,$),$)}catch($){return w.error=$ instanceof Error?$:new Error(String($)),w.lastResult=false,w.isEvaluating=false,u?.(l,$),false}}async function g(l){let h=t[l];if(!h)return false;let w=I(l),$=h.timeout??i;if(w.isEvaluating=true,w.error=null,h.deps?.length){let E=new Set(h.deps);R(l,E),T.set(l,E);}try{let E=h.when(o),z=await ge(E,$,`Constraint "${l}" timed out after ${$}ms`);return w.lastResult=z,w.isEvaluating=!1,n?.(l,z),z}catch(E){return w.error=E instanceof Error?E:new Error(String(E)),w.lastResult=false,w.isEvaluating=false,u?.(l,E),false}}let D=10;function j(l,h){if(l==null)return [];if(Array.isArray(l)){let w=l.filter($=>$!=null);return process.env.NODE_ENV!=="production"&&w.length>D&&h&&console.warn(`[Directive] Constraint "${h}" produced ${w.length} requirements. Consider splitting into multiple constraints for better performance.`),w}return [l]}function F(l){let h=t[l];if(!h)return {requirements:[],deps:new Set};let w=h.require;if(typeof w=="function"){let{value:E,deps:z}=ie(()=>w(o));return {requirements:j(E,l),deps:z}}return {requirements:j(w,l),deps:new Set}}function V(l,h){if(h.size===0)return;let w=m.get(l)??new Set;for(let $ of h)w.add($),p.has($)||p.set($,new Set),p.get($).add(l);m.set(l,w);}let r=null;function y(){return r||(r=Object.keys(t).sort((l,h)=>{let w=I(l),E=I(h).priority-w.priority;if(E!==0)return E;let z=f.get(l)??0,L=f.get(h)??0;return z-L})),r}for(let l of Object.keys(t))M(l);if(process.env.NODE_ENV!=="production")for(let[l,h]of Object.entries(t))h.async&&!h.deps&&console.warn(`[Directive] Async constraint "${l}" has no \`deps\` declared. Auto-tracking cannot work across async boundaries. Add \`deps: ["key1", "key2"]\` to enable dependency tracking.`);function S(l){let h=d.get(l);if(!h||h.after.length===0)return true;for(let w of h.after)if(t[w]&&!a.has(w)&&!C.has(w)&&!K.has(w))return false;return true}return {async evaluate(l){let h=new ce;C.clear();let w=y().filter(_=>!a.has(_)),$;if(!B||!l||l.size===0)$=w,B=true;else {let _=new Set;for(let H of l){let J=p.get(H);if(J)for(let ee of J)a.has(ee)||_.add(ee);}for(let H of q)a.has(H)||_.add(H);q.clear(),$=[..._];for(let H of w)if(!_.has(H)){let J=A.get(H);if(J)for(let ee of J)h.add(ee);}}function E(_,H){if(a.has(_))return;let J=T.get(_);if(!H){J!==void 0&&R(_,J),C.add(_),A.set(_,[]);return}C.delete(_);let ee,ue;try{let te=F(_);ee=te.requirements,ue=te.deps;}catch(te){u?.(_,te),J!==void 0&&R(_,J),A.set(_,[]);return}if(J!==void 0){let te=new Set(J);for(let Z of ue)te.add(Z);R(_,te);}else V(_,ue);if(ee.length>0){let te=c[_],Z=ee.map(Y=>He(Y,_,te));for(let Y of Z)h.add(Y);A.set(_,Z);}else A.set(_,[]);}async function z(_){let H=[],J=[];for(let Z of _)if(S(Z))J.push(Z);else {H.push(Z);let Y=A.get(Z);if(Y)for(let de of Y)h.add(de);}if(J.length===0)return H;let ee=[],ue=[];for(let Z of J)I(Z).isAsync?ue.push(Z):ee.push(Z);let te=[];for(let Z of ee){let Y=v(Z);if(Y instanceof Promise){te.push({id:Z,promise:Y});continue}E(Z,Y);}if(te.length>0){let Z=await Promise.all(te.map(async({id:Y,promise:de})=>({id:Y,active:await de})));for(let{id:Y,active:de}of Z)E(Y,de);}if(ue.length>0){let Z=await Promise.all(ue.map(async Y=>({id:Y,active:await g(Y)})));for(let{id:Y,active:de}of Z)E(Y,de);}return H}let L=$,U=$.length+1;for(;L.length>0&&U>0;){let _=L.length;if(L=await z(L),L.length===_)break;U--;}return h.all()},getState(l){return d.get(l)},getAllStates(){return [...d.values()]},disable(l){a.add(l),r=null,A.delete(l);let h=m.get(l);if(h){for(let w of h){let $=p.get(w);$&&($.delete(l),$.size===0&&p.delete(w));}m.delete(l);}T.delete(l);},enable(l){a.delete(l),r=null,q.add(l);},invalidate(l){let h=p.get(l);if(h)for(let w of h)q.add(w);},markResolved(l){K.add(l);let h=d.get(l);h&&(h.lastResolvedAt=Date.now());let w=P.get(l);if(w)for(let $ of w)q.add($);},isResolved(l){return K.has(l)},registerDefinitions(l){for(let[h,w]of Object.entries(l))t[h]=w,M(h),q.add(h);r=null,k(),b();}}}function ke(e){let{definitions:t,facts:o,store:c,onCompute:i,onInvalidate:n,onError:u}=e,d=new Map,a=new Map,s=new Map,m=new Map,p=new Set(["__proto__","constructor","prototype"]),q=0,T=new Set,A=false,B=100,K;function C(M){if(!t[M])throw new Error(`[Directive] Unknown derivation: ${M}`);let R={id:M,compute:()=>W(M),cachedValue:void 0,dependencies:new Set,isStale:true,isComputing:false};return d.set(M,R),R}function P(M){return d.get(M)??C(M)}function W(M){let I=P(M),R=t[M];if(!R)throw new Error(`[Directive] Unknown derivation: ${M}`);if(I.isComputing)throw new Error(`[Directive] Circular dependency detected in derivation: ${M}`);I.isComputing=true;try{let{value:v,deps:g}=ie(()=>R(o,K));return I.cachedValue=v,I.isStale=!1,f(M,g),i?.(M,v,[...g]),v}catch(v){throw u?.(M,v),v}finally{I.isComputing=false;}}function f(M,I){let R=P(M),v=R.dependencies;for(let g of v)if(d.has(g)){let D=m.get(g);D?.delete(M),D&&D.size===0&&m.delete(g);}else {let D=s.get(g);D?.delete(M),D&&D.size===0&&s.delete(g);}for(let g of I)t[g]?(m.has(g)||m.set(g,new Set),m.get(g).add(M)):(s.has(g)||s.set(g,new Set),s.get(g).add(M));R.dependencies=I;}function b(){if(!(q>0||A)){A=true;try{let M=0;for(;T.size>0;){if(++M>B){let R=[...T];throw T.clear(),new Error(`[Directive] Infinite derivation notification loop detected after ${B} iterations. Remaining: ${R.join(", ")}. This usually means a derivation listener is mutating facts that re-trigger the same derivation.`)}let I=[...T];T.clear();for(let R of I)a.get(R)?.forEach(v=>v());}}finally{A=false;}}}function k(M,I=new Set){if(I.has(M))return;I.add(M);let R=d.get(M);if(!R||R.isStale)return;R.isStale=true,n?.(M),T.add(M);let v=m.get(M);if(v)for(let g of v)k(g,I);}return K=new Proxy({},{get(M,I){if(typeof I=="symbol"||p.has(I))return;fe(I);let R=P(I);return R.isStale&&W(I),R.cachedValue}}),{get(M){let I=P(M);return I.isStale&&W(M),I.cachedValue},isStale(M){return d.get(M)?.isStale??true},invalidate(M){let I=s.get(M);if(I){q++;try{for(let R of I)k(R);}finally{q--,b();}}},invalidateMany(M){q++;try{for(let I of M){let R=s.get(I);if(R)for(let v of R)k(v);}}finally{q--,b();}},invalidateAll(){q++;try{for(let M of d.values())M.isStale||(M.isStale=!0,T.add(M.id));}finally{q--,b();}},subscribe(M,I){for(let R of M){let v=R;a.has(v)||a.set(v,new Set),a.get(v).add(I);}return ()=>{for(let R of M){let v=R,g=a.get(v);g?.delete(I),g&&g.size===0&&a.delete(v);}}},getProxy(){return K},getDependencies(M){return P(M).dependencies},registerDefinitions(M){for(let[I,R]of Object.entries(M))t[I]=R,C(I);}}}function Me(e){let{definitions:t,facts:o,store:c,onRun:i,onError:n}=e,u=new Map,d=null,a=false;function s(C){let P=t[C];if(!P)throw new Error(`[Directive] Unknown effect: ${C}`);let W={id:C,enabled:true,hasExplicitDeps:!!P.deps,dependencies:P.deps?new Set(P.deps):null,lastSnapshot:null,cleanup:null};return u.set(C,W),W}function m(C){return u.get(C)??s(C)}function p(){return o.$snapshot()}function q(C,P){let W=m(C);if(!W.enabled)return false;if(W.dependencies){for(let f of W.dependencies)if(P.has(f))return true;return false}return true}function T(C){if(C.cleanup){try{C.cleanup();}catch(P){n?.(C.id,P),console.error(`[Directive] Effect "${C.id}" cleanup threw an error:`,P);}C.cleanup=null;}}function A(C,P){if(typeof P=="function")if(a)try{P();}catch(W){n?.(C.id,W),console.error(`[Directive] Effect "${C.id}" cleanup threw an error:`,W);}else C.cleanup=P;}async function B(C){let P=m(C),W=t[C];if(!(!P.enabled||!W)){T(P),i?.(C);try{if(P.hasExplicitDeps){let f;if(c.batch(()=>{f=W.run(o,d);}),f instanceof Promise){let b=await f;A(P,b);}else A(P,f);}else {let f=null,b,k=ie(()=>(c.batch(()=>{b=W.run(o,d);}),b));f=k.deps;let O=k.value;O instanceof Promise&&(O=await O),A(P,O),P.dependencies=f.size>0?f:null;}}catch(f){n?.(C,f),console.error(`[Directive] Effect "${C}" threw an error:`,f);}}}for(let C of Object.keys(t))s(C);return {async runEffects(C){let P=[];for(let W of Object.keys(t))q(W,C)&&P.push(W);await Promise.all(P.map(B)),d=p();},async runAll(){let C=Object.keys(t);await Promise.all(C.map(P=>m(P).enabled?B(P):Promise.resolve())),d=p();},disable(C){let P=m(C);P.enabled=false;},enable(C){let P=m(C);P.enabled=true;},isEnabled(C){return m(C).enabled},cleanupAll(){a=true;for(let C of u.values())T(C);},registerDefinitions(C){for(let[P,W]of Object.entries(C))t[P]=W,s(P);}}}function Je(e={}){let{delayMs:t=1e3,maxRetries:o=3,backoffMultiplier:c=2,maxDelayMs:i=3e4}=e,n=new Map;function u(d){let a=t*Math.pow(c,d-1);return Math.min(a,i)}return {scheduleRetry(d,a,s,m,p){if(m>o)return null;let q=u(m),T={source:d,sourceId:a,context:s,attempt:m,nextRetryTime:Date.now()+q,callback:p};return n.set(a,T),T},getPendingRetries(){return Array.from(n.values())},processDueRetries(){let d=Date.now(),a=[];for(let[s,m]of n)m.nextRetryTime<=d&&(a.push(m),n.delete(s));return a},cancelRetry(d){n.delete(d);},clearAll(){n.clear();}}}var kt={constraint:"skip",resolver:"skip",effect:"skip",derivation:"skip",system:"throw"};function De(e={}){let{config:t={},onError:o,onRecovery:c}=e,i=[],n=100,u=Je(t.retryLater),d=new Map;function a(p,q,T,A){if(T instanceof le)return T;let B=T instanceof Error?T.message:String(T),K=p!=="system";return new le(B,p,q,A,K)}function s(p,q,T){let A=(()=>{switch(p){case "constraint":return t.onConstraintError;case "resolver":return t.onResolverError;case "effect":return t.onEffectError;case "derivation":return t.onDerivationError;default:return}})();if(typeof A=="function"){try{A(T,q);}catch(B){console.error("[Directive] Error in error handler callback:",B);}return "skip"}return typeof A=="string"?A:kt[p]}return {handleError(p,q,T,A){let B=a(p,q,T,A);i.push(B),i.length>n&&i.shift();try{o?.(B);}catch(C){console.error("[Directive] Error in onError callback:",C);}try{t.onError?.(B);}catch(C){console.error("[Directive] Error in config.onError callback:",C);}let K=s(p,q,T instanceof Error?T:new Error(String(T)));if(K==="retry-later"){let C=(d.get(q)??0)+1;d.set(q,C),u.scheduleRetry(p,q,A,C)||(K="skip",d.delete(q),typeof process<"u"&&process.env?.NODE_ENV!=="production"&&console.warn(`[Directive] ${p} "${q}" exceeded max retry-later attempts. Skipping.`));}try{c?.(B,K);}catch(C){console.error("[Directive] Error in onRecovery callback:",C);}if(K==="throw")throw B;return K},getLastError(){return i[i.length-1]??null},getAllErrors(){return [...i]},clearErrors(){i.length=0;},getRetryLaterManager(){return u},processDueRetries(){return u.processDueRetries()},clearRetryAttempts(p){d.delete(p),u.cancelRetry(p);}}}function xe(){let e=[];function t(i){if(i)try{return i()}catch(n){console.error("[Directive] Plugin error:",n);return}}async function o(i){if(i)try{return await i()}catch(n){console.error("[Directive] Plugin error:",n);return}}return {register(i){e.some(n=>n.name===i.name)&&(console.warn(`[Directive] Plugin "${i.name}" is already registered, replacing...`),this.unregister(i.name)),e.push(i);},unregister(i){let n=e.findIndex(u=>u.name===i);n!==-1&&e.splice(n,1);},getPlugins(){return [...e]},async emitInit(i){for(let n of e)await o(()=>n.onInit?.(i));},emitStart(i){for(let n of e)t(()=>n.onStart?.(i));},emitStop(i){for(let n of e)t(()=>n.onStop?.(i));},emitDestroy(i){for(let n of e)t(()=>n.onDestroy?.(i));},emitFactSet(i,n,u){for(let d of e)t(()=>d.onFactSet?.(i,n,u));},emitFactDelete(i,n){for(let u of e)t(()=>u.onFactDelete?.(i,n));},emitFactsBatch(i){for(let n of e)t(()=>n.onFactsBatch?.(i));},emitDerivationCompute(i,n,u){for(let d of e)t(()=>d.onDerivationCompute?.(i,n,u));},emitDerivationInvalidate(i){for(let n of e)t(()=>n.onDerivationInvalidate?.(i));},emitReconcileStart(i){for(let n of e)t(()=>n.onReconcileStart?.(i));},emitReconcileEnd(i){for(let n of e)t(()=>n.onReconcileEnd?.(i));},emitConstraintEvaluate(i,n){for(let u of e)t(()=>u.onConstraintEvaluate?.(i,n));},emitConstraintError(i,n){for(let u of e)t(()=>u.onConstraintError?.(i,n));},emitRequirementCreated(i){for(let n of e)t(()=>n.onRequirementCreated?.(i));},emitRequirementMet(i,n){for(let u of e)t(()=>u.onRequirementMet?.(i,n));},emitRequirementCanceled(i){for(let n of e)t(()=>n.onRequirementCanceled?.(i));},emitResolverStart(i,n){for(let u of e)t(()=>u.onResolverStart?.(i,n));},emitResolverComplete(i,n,u){for(let d of e)t(()=>d.onResolverComplete?.(i,n,u));},emitResolverError(i,n,u){for(let d of e)t(()=>d.onResolverError?.(i,n,u));},emitResolverRetry(i,n,u){for(let d of e)t(()=>d.onResolverRetry?.(i,n,u));},emitResolverCancel(i,n){for(let u of e)t(()=>u.onResolverCancel?.(i,n));},emitEffectRun(i){for(let n of e)t(()=>n.onEffectRun?.(i));},emitEffectError(i,n){for(let u of e)t(()=>u.onEffectError?.(i,n));},emitSnapshot(i){for(let n of e)t(()=>n.onSnapshot?.(i));},emitTimeTravel(i,n){for(let u of e)t(()=>u.onTimeTravel?.(i,n));},emitError(i){for(let n of e)t(()=>n.onError?.(i));},emitErrorRecovery(i,n){for(let u of e)t(()=>u.onErrorRecovery?.(i,n));}}}var Xe={attempts:1,backoff:"none",initialDelay:100,maxDelay:3e4},Ze={enabled:false,windowMs:50};function Ge(e,t){let{backoff:o,initialDelay:c=100,maxDelay:i=3e4}=e,n;switch(o){case "none":n=c;break;case "linear":n=c*t;break;case "exponential":n=c*Math.pow(2,t-1);break;default:n=c;}return Math.max(1,Math.min(n,i))}function Te(e){let{definitions:t,facts:o,store:c,onStart:i,onComplete:n,onError:u,onRetry:d,onCancel:a,onResolutionComplete:s}=e;if(process.env.NODE_ENV!=="production")for(let[v,g]of Object.entries(t)){if(!g.resolve&&!g.resolveBatch)throw new Error(`[Directive] Resolver "${v}" must define either resolve() or resolveBatch(). Add one of these methods to handle requirements.`);if(g.batch?.enabled&&!g.resolveBatch)throw new Error(`[Directive] Resolver "${v}" has batch.enabled=true but no resolveBatch() method. Add resolveBatch() to handle batched requirements.`)}let m=new Map,p=new Map,q=1e3,T=new Map,A=new Map,B=1e3;function K(){if(p.size>q){let v=p.size-q,g=p.keys();for(let D=0;D<v;D++){let j=g.next().value;j&&p.delete(j);}}}function C(v){return typeof v=="object"&&v!==null&&"requirement"in v&&typeof v.requirement=="string"}function P(v){return typeof v=="object"&&v!==null&&"requirement"in v&&typeof v.requirement=="function"}function W(v,g){return C(v)?g.type===v.requirement:P(v)?v.requirement(g):false}function f(v){let g=v.type,D=A.get(g);if(D)for(let j of D){let F=t[j];if(F&&W(F,v))return j}for(let[j,F]of Object.entries(t))if(W(F,v)){if(!A.has(g)){if(A.size>=B){let r=A.keys().next().value;r!==void 0&&A.delete(r);}A.set(g,[]);}let V=A.get(g);return V.includes(j)||V.push(j),j}return null}function b(v){return {facts:o,signal:v,snapshot:()=>o.$snapshot()}}async function k(v,g,D){let j=t[v];if(!j)return;let F={...Xe,...j.retry},V=null;for(let r=1;r<=F.attempts;r++){if(D.signal.aborted)return;let y=m.get(g.id);y&&(y.attempt=r,y.status={state:"running",requirementId:g.id,startedAt:y.startedAt,attempt:r});try{let S=b(D.signal);if(j.resolve){let l;c.batch(()=>{l=j.resolve(g.requirement,S);});let h=j.timeout;h&&h>0?await ge(l,h,`Resolver "${v}" timed out after ${h}ms`):await l;}let x=Date.now()-(y?.startedAt??Date.now());p.set(g.id,{state:"success",requirementId:g.id,completedAt:Date.now(),duration:x}),K(),n?.(v,g,x);return}catch(S){if(V=S instanceof Error?S:new Error(String(S)),D.signal.aborted)return;if(F.shouldRetry&&!F.shouldRetry(V,r))break;if(r<F.attempts){if(D.signal.aborted)return;let x=Ge(F,r);if(d?.(v,g,r+1),await new Promise(l=>{let h=setTimeout(l,x),w=()=>{clearTimeout(h),l();};D.signal.addEventListener("abort",w,{once:true});}),D.signal.aborted)return}}}p.set(g.id,{state:"error",requirementId:g.id,error:V,failedAt:Date.now(),attempts:F.attempts}),K(),u?.(v,g,V);}async function O(v,g){let D=t[v];if(!D)return;if(!D.resolveBatch&&!D.resolveBatchWithResults){await Promise.all(g.map(x=>{let l=new AbortController;return k(v,x,l)}));return}let j={...Xe,...D.retry},F={...Ze,...D.batch},V=new AbortController,r=Date.now(),y=null,S=F.timeoutMs??D.timeout;for(let x=1;x<=j.attempts;x++){if(V.signal.aborted)return;try{let l=b(V.signal),h=g.map(w=>w.requirement);if(D.resolveBatchWithResults){let w,$;if(c.batch(()=>{$=D.resolveBatchWithResults(h,l);}),S&&S>0?w=await ge($,S,`Batch resolver "${v}" timed out after ${S}ms`):w=await $,w.length!==g.length)throw new Error(`[Directive] Batch resolver "${v}" returned ${w.length} results but expected ${g.length}. Results array must match input order.`);let E=Date.now()-r,z=!1;for(let L=0;L<g.length;L++){let U=g[L],_=w[L];if(_.success)p.set(U.id,{state:"success",requirementId:U.id,completedAt:Date.now(),duration:E}),n?.(v,U,E);else {z=!0;let H=_.error??new Error("Batch item failed");p.set(U.id,{state:"error",requirementId:U.id,error:H,failedAt:Date.now(),attempts:x}),u?.(v,U,H);}}if(!z||g.some((L,U)=>w[U]?.success))return}else {let w;c.batch(()=>{w=D.resolveBatch(h,l);}),S&&S>0?await ge(w,S,`Batch resolver "${v}" timed out after ${S}ms`):await w;let $=Date.now()-r;for(let E of g)p.set(E.id,{state:"success",requirementId:E.id,completedAt:Date.now(),duration:$}),n?.(v,E,$);return}}catch(l){if(y=l instanceof Error?l:new Error(String(l)),V.signal.aborted)return;if(j.shouldRetry&&!j.shouldRetry(y,x))break;if(x<j.attempts){let h=Ge(j,x);for(let w of g)d?.(v,w,x+1);if(await new Promise(w=>{let $=setTimeout(w,h),E=()=>{clearTimeout($),w();};V.signal.addEventListener("abort",E,{once:true});}),V.signal.aborted)return}}}for(let x of g)p.set(x.id,{state:"error",requirementId:x.id,error:y,failedAt:Date.now(),attempts:j.attempts}),u?.(v,x,y);K();}function M(v,g){let D=t[v];if(!D)return;let j={...Ze,...D.batch};T.has(v)||T.set(v,{resolverId:v,requirements:[],timer:null});let F=T.get(v);F.requirements.push(g),F.timer&&clearTimeout(F.timer),F.timer=setTimeout(()=>{I(v);},j.windowMs);}function I(v){let g=T.get(v);if(!g||g.requirements.length===0)return;let D=[...g.requirements];g.requirements=[],g.timer=null,O(v,D).then(()=>{s?.();});}return {resolve(v){if(m.has(v.id))return;let g=f(v.requirement);if(!g){console.warn(`[Directive] No resolver found for requirement: ${v.id}`);return}let D=t[g];if(!D)return;if(D.batch?.enabled){M(g,v);return}let j=new AbortController,F=Date.now(),V={requirementId:v.id,resolverId:g,controller:j,startedAt:F,attempt:1,status:{state:"pending",requirementId:v.id,startedAt:F},originalRequirement:v};m.set(v.id,V),i?.(g,v),k(g,v,j).finally(()=>{m.delete(v.id)&&s?.();});},cancel(v){let g=m.get(v);g&&(g.controller.abort(),m.delete(v),p.set(v,{state:"canceled",requirementId:v,canceledAt:Date.now()}),K(),a?.(g.resolverId,g.originalRequirement));},cancelAll(){for(let[v]of m)this.cancel(v);for(let v of T.values())v.timer&&clearTimeout(v.timer);T.clear();},getStatus(v){let g=m.get(v);if(g)return g.status;let D=p.get(v);return D||{state:"idle"}},getInflight(){return [...m.keys()]},getInflightInfo(){return [...m.values()].map(v=>({id:v.requirementId,resolverId:v.resolverId,startedAt:v.startedAt}))},isResolving(v){return m.has(v)},processBatches(){for(let v of T.keys())I(v);},registerDefinitions(v){for(let[g,D]of Object.entries(v))t[g]=D;A.clear();}}}function Ee(e){let{config:t,facts:o,store:c,onSnapshot:i,onTimeTravel:n}=e,u=t.timeTravel??false,d=t.maxSnapshots??100,a=[],s=-1,m=1,p=false,q=false,T=[],A=null,B=-1;function K(){return c.toObject()}function C(){let f=K();return structuredClone(f)}function P(f){if(!ae(f)){console.error("[Directive] Potential prototype pollution detected in snapshot data, skipping restore");return}c.batch(()=>{for(let[b,k]of Object.entries(f)){if(b==="__proto__"||b==="constructor"||b==="prototype"){console.warn(`[Directive] Skipping dangerous key "${b}" during fact restoration`);continue}o[b]=k;}});}return {get isEnabled(){return u},get isRestoring(){return q},get isPaused(){return p},get snapshots(){return [...a]},get currentIndex(){return s},takeSnapshot(f){if(!u||p)return {id:-1,timestamp:Date.now(),facts:{},trigger:f};let b={id:m++,timestamp:Date.now(),facts:C(),trigger:f};for(s<a.length-1&&a.splice(s+1),a.push(b),s=a.length-1;a.length>d;)a.shift(),s--;return i?.(b),b},restore(f){if(u){p=true,q=true;try{P(f.facts);}finally{p=false,q=false;}}},goBack(f=1){if(!u||a.length===0)return;let b=s,k=s,O=T.find(I=>s>I.startIndex&&s<=I.endIndex);if(O)k=O.startIndex;else if(T.find(R=>s===R.startIndex)){let R=T.find(v=>v.endIndex<s&&s-v.endIndex<=f);k=R?R.startIndex:Math.max(0,s-f);}else k=Math.max(0,s-f);if(b===k)return;s=k;let M=a[s];M&&(this.restore(M),n?.(b,k));},goForward(f=1){if(!u||a.length===0)return;let b=s,k=s,O=T.find(I=>s>=I.startIndex&&s<I.endIndex);if(O?k=O.endIndex:k=Math.min(a.length-1,s+f),b===k)return;s=k;let M=a[s];M&&(this.restore(M),n?.(b,k));},goTo(f){if(!u)return;let b=a.findIndex(M=>M.id===f);if(b===-1){console.warn(`[Directive] Snapshot ${f} not found`);return}let k=s;s=b;let O=a[s];O&&(this.restore(O),n?.(k,b));},replay(){if(!u||a.length===0)return;s=0;let f=a[0];f&&this.restore(f);},export(){return JSON.stringify({version:1,snapshots:a,currentIndex:s})},import(f){if(u)try{let b=JSON.parse(f);if(typeof b!="object"||b===null)throw new Error("Invalid time-travel data: expected object");if(b.version!==1)throw new Error(`Unsupported time-travel export version: ${b.version}`);if(!Array.isArray(b.snapshots))throw new Error("Invalid time-travel data: snapshots must be an array");if(typeof b.currentIndex!="number")throw new Error("Invalid time-travel data: currentIndex must be a number");for(let O of b.snapshots){if(typeof O!="object"||O===null)throw new Error("Invalid snapshot: expected object");if(typeof O.id!="number"||typeof O.timestamp!="number"||typeof O.trigger!="string"||typeof O.facts!="object")throw new Error("Invalid snapshot structure");if(!ae(O.facts))throw new Error("Invalid fact data: potential prototype pollution detected in nested objects")}a.length=0,a.push(...b.snapshots),s=b.currentIndex;let k=a[s];k&&this.restore(k);}catch(b){console.error("[Directive] Failed to import time-travel data:",b);}},beginChangeset(f){u&&(A=f,B=s);},endChangeset(){!u||A===null||(s>B&&T.push({label:A,startIndex:B,endIndex:s}),A=null,B=-1);},pause(){p=true;},resume(){p=false;}}}function Ce(){let e={id:-1,timestamp:0,facts:{},trigger:""};return {isEnabled:false,isRestoring:false,isPaused:false,snapshots:[],currentIndex:-1,takeSnapshot:()=>e,restore:()=>{},goBack:()=>{},goForward:()=>{},goTo:()=>{},replay:()=>{},export:()=>"{}",import:()=>{},beginChangeset:()=>{},endChangeset:()=>{},pause:()=>{},resume:()=>{}}}var ne=new Set(["__proto__","constructor","prototype"]);function be(e){let t=Object.create(null),o=Object.create(null),c=Object.create(null),i=Object.create(null),n=Object.create(null),u=Object.create(null),d=new Map;for(let r of e.modules){let y=(S,x)=>{if(S){for(let l of Object.keys(S))if(ne.has(l))throw new Error(`[Directive] Security: Module "${r.id}" has dangerous key "${l}" in ${x}. This could indicate a prototype pollution attempt.`)}};if(y(r.schema,"schema"),y(r.events,"events"),y(r.derive,"derive"),y(r.effects,"effects"),y(r.constraints,"constraints"),y(r.resolvers,"resolvers"),process.env.NODE_ENV!=="production")for(let S of Object.keys(r.schema)){let x=d.get(S);if(x)throw new Error(`[Directive] Schema collision: Fact "${S}" is defined in both module "${x}" and "${r.id}". Use namespacing (e.g., "${r.id}::${S}") or merge into one module.`);d.set(S,r.id);}Object.assign(t,r.schema),r.events&&Object.assign(o,r.events),r.derive&&Object.assign(c,r.derive),r.effects&&Object.assign(i,r.effects),r.constraints&&Object.assign(n,r.constraints),r.resolvers&&Object.assign(u,r.resolvers);}if(process.env.NODE_ENV!=="production"){let r=new Set(Object.keys(c));for(let y of Object.keys(t))r.has(y)&&console.warn(`[Directive] "${y}" exists as both a fact and a derivation. This may cause unexpected dependency tracking behavior.`);}let a=xe();for(let r of e.plugins??[])a.register(r);let s=De({config:e.errorBoundary,onError:r=>a.emitError(r),onRecovery:(r,y)=>a.emitErrorRecovery(r,y)}),m=()=>{},p=()=>{},q=null,{store:T,facts:A}=we({schema:t,onChange:(r,y,S)=>{a.emitFactSet(r,y,S),m(r),!q?.isRestoring&&(R.changedKeys.add(r),v());},onBatch:r=>{a.emitFactsBatch(r);let y=[];for(let S of r)y.push(S.key);if(p(y),!q?.isRestoring){for(let S of r)R.changedKeys.add(S.key);v();}}}),B=ke({definitions:c,facts:A,store:T,onCompute:(r,y,S)=>a.emitDerivationCompute(r,y,S),onInvalidate:r=>a.emitDerivationInvalidate(r),onError:(r,y)=>{s.handleError("derivation",r,y);}});m=r=>B.invalidate(r),p=r=>B.invalidateMany(r);let K=Me({definitions:i,facts:A,store:T,onRun:r=>a.emitEffectRun(r),onError:(r,y)=>{s.handleError("effect",r,y),a.emitEffectError(r,y);}}),C=Re({definitions:n,facts:A,onEvaluate:(r,y)=>a.emitConstraintEvaluate(r,y),onError:(r,y)=>{s.handleError("constraint",r,y),a.emitConstraintError(r,y);}}),P=Te({definitions:u,facts:A,store:T,onStart:(r,y)=>a.emitResolverStart(r,y),onComplete:(r,y,S)=>{a.emitResolverComplete(r,y,S),a.emitRequirementMet(y,r),C.markResolved(y.fromConstraint);},onError:(r,y,S)=>{s.handleError("resolver",r,S,y),a.emitResolverError(r,y,S);},onRetry:(r,y,S)=>a.emitResolverRetry(r,y,S),onCancel:(r,y)=>{a.emitResolverCancel(r,y),a.emitRequirementCanceled(y);},onResolutionComplete:()=>{O(),v();}}),W=new Set;function f(){for(let r of W)r();}let b=e.debug?.timeTravel?Ee({config:e.debug,facts:A,store:T,onSnapshot:r=>{a.emitSnapshot(r),f();},onTimeTravel:(r,y)=>{a.emitTimeTravel(r,y),f();}}):Ce();q=b;let k=new Set;function O(){for(let r of k)r();}let M=50,I=0,R={isRunning:false,isReconciling:false,reconcileScheduled:false,isInitializing:false,isInitialized:false,isReady:false,isDestroyed:false,changedKeys:new Set,previousRequirements:new ce,readyPromise:null,readyResolve:null};function v(){!R.isRunning||R.reconcileScheduled||R.isInitializing||(R.reconcileScheduled=true,O(),queueMicrotask(()=>{R.reconcileScheduled=false,R.isRunning&&!R.isInitializing&&g().catch(r=>{process.env.NODE_ENV!=="production"&&console.error("[Directive] Unexpected error in reconcile:",r);});}));}async function g(){if(!R.isReconciling){if(I++,I>M){process.env.NODE_ENV!=="production"&&console.warn(`[Directive] Reconcile loop exceeded ${M} iterations. This usually means resolvers are creating circular requirement chains. Check that resolvers aren't mutating facts that re-trigger their own constraints.`),I=0;return}R.isReconciling=true,O();try{R.changedKeys.size>0&&b.takeSnapshot(`facts-changed:${[...R.changedKeys].join(",")}`);let r=A.$snapshot();a.emitReconcileStart(r),await K.runEffects(R.changedKeys);let y=new Set(R.changedKeys);R.changedKeys.clear();let S=await C.evaluate(y),x=new ce;for(let E of S)x.add(E),a.emitRequirementCreated(E);let{added:l,removed:h}=x.diff(R.previousRequirements);for(let E of h)P.cancel(E.id);for(let E of l)P.resolve(E);R.previousRequirements=x;let w=P.getInflightInfo(),$={unmet:S.filter(E=>!P.isResolving(E.id)),inflight:w,completed:[],canceled:h.map(E=>({id:E.id,resolverId:w.find(z=>z.id===E.id)?.resolverId??"unknown"}))};a.emitReconcileEnd($),R.isReady||(R.isReady=!0,R.readyResolve&&(R.readyResolve(),R.readyResolve=null));}finally{R.isReconciling=false,R.changedKeys.size>0?v():R.reconcileScheduled||(I=0),O();}}}let D=new Proxy({},{get(r,y){if(typeof y!="symbol"&&!ne.has(y))return B.get(y)},has(r,y){return typeof y=="symbol"||ne.has(y)?false:y in c},ownKeys(){return Object.keys(c)},getOwnPropertyDescriptor(r,y){if(typeof y!="symbol"&&!ne.has(y)&&y in c)return {configurable:true,enumerable:true}}}),j=new Proxy({},{get(r,y){if(typeof y!="symbol"&&!ne.has(y))return S=>{let x=o[y];x?T.batch(()=>{x(A,{type:y,...S});}):process.env.NODE_ENV!=="production"&&console.warn(`[Directive] Unknown event type "${y}". No handler is registered for this event. Available events: ${Object.keys(o).join(", ")||"(none)"}`);}},has(r,y){return typeof y=="symbol"||ne.has(y)?false:y in o},ownKeys(){return Object.keys(o)},getOwnPropertyDescriptor(r,y){if(typeof y!="symbol"&&!ne.has(y)&&y in o)return {configurable:true,enumerable:true}}}),F={facts:A,debug:b.isEnabled?b:null,derive:D,events:j,constraints:{disable:r=>C.disable(r),enable:r=>C.enable(r)},effects:{disable:r=>K.disable(r),enable:r=>K.enable(r),isEnabled:r=>K.isEnabled(r)},start(){if(!R.isRunning){R.isRunning=true,R.isInitializing=true;for(let r of e.modules)r.init&&T.batch(()=>{r.init(A);}),r.hooks?.onStart?.(F);e.onAfterModuleInit&&T.batch(()=>{e.onAfterModuleInit();}),R.isInitializing=false,R.isInitialized=true,a.emitStart(F),v();}},stop(){if(R.isRunning){R.isRunning=false,P.cancelAll(),K.cleanupAll();for(let r of e.modules)r.hooks?.onStop?.(F);a.emitStop(F);}},destroy(){this.stop(),R.isDestroyed=true,k.clear(),W.clear(),a.emitDestroy(F);},dispatch(r){if(ne.has(r.type))return;let y=o[r.type];y?T.batch(()=>{y(A,r);}):process.env.NODE_ENV!=="production"&&console.warn(`[Directive] Unknown event type "${r.type}". No handler is registered for this event. Available events: ${Object.keys(o).join(", ")||"(none)"}`);},read(r){return B.get(r)},subscribe(r,y){let S=[],x=[];for(let h of r)h in c?S.push(h):h in t?x.push(h):process.env.NODE_ENV!=="production"&&console.warn(`[Directive] subscribe: unknown key "${h}"`);let l=[];return S.length>0&&l.push(B.subscribe(S,y)),x.length>0&&l.push(T.subscribe(x,y)),()=>{for(let h of l)h();}},watch(r,y,S){let x=S?.equalityFn?(h,w)=>S.equalityFn(h,w):(h,w)=>Object.is(h,w);if(r in c){let h=B.get(r);return B.subscribe([r],()=>{let w=B.get(r);if(!x(w,h)){let $=h;h=w,y(w,$);}})}process.env.NODE_ENV!=="production"&&(r in t||console.warn(`[Directive] watch: unknown key "${r}"`));let l=T.get(r);return T.subscribe([r],()=>{let h=T.get(r);if(!x(h,l)){let w=l;l=h,y(h,w);}})},when(r,y){return new Promise((S,x)=>{let l=T.toObject();if(r(l)){S();return}let h,w,$=()=>{h?.(),w!==void 0&&clearTimeout(w);};h=T.subscribeAll(()=>{let E=T.toObject();r(E)&&($(),S());}),y?.timeout!==void 0&&y.timeout>0&&(w=setTimeout(()=>{$(),x(new Error(`[Directive] when: timed out after ${y.timeout}ms`));},y.timeout));})},inspect(){return {unmet:R.previousRequirements.all(),inflight:P.getInflightInfo(),constraints:C.getAllStates().map(r=>({id:r.id,active:r.lastResult??false,priority:r.priority})),resolvers:Object.fromEntries(P.getInflight().map(r=>[r,P.getStatus(r)]))}},explain(r){let S=R.previousRequirements.all().find(L=>L.id===r);if(!S)return null;let x=C.getState(S.fromConstraint),l=P.getStatus(r),h={},w=T.toObject();for(let[L,U]of Object.entries(w))h[L]=U;let $=[`Requirement "${S.requirement.type}" (id: ${S.id})`,`\u251C\u2500 Produced by constraint: ${S.fromConstraint}`,`\u251C\u2500 Constraint priority: ${x?.priority??0}`,`\u251C\u2500 Constraint active: ${x?.lastResult??"unknown"}`,`\u251C\u2500 Resolver status: ${l.state}`],E=Object.entries(S.requirement).filter(([L])=>L!=="type").map(([L,U])=>`${L}=${JSON.stringify(U)}`).join(", ");E&&$.push(`\u251C\u2500 Requirement payload: { ${E} }`);let z=Object.entries(h).slice(0,10);return z.length>0&&($.push("\u2514\u2500 Relevant facts:"),z.forEach(([L,U],_)=>{let H=_===z.length-1?" \u2514\u2500":" \u251C\u2500",J=typeof U=="object"?JSON.stringify(U):String(U);$.push(`${H} ${L} = ${J.slice(0,50)}${J.length>50?"...":""}`);})),$.join(`
2
- `)},async settle(r=5e3){let y=Date.now();for(;;){await new Promise(l=>setTimeout(l,0));let S=this.inspect();if(S.inflight.length===0&&!R.isReconciling&&!R.reconcileScheduled)return;if(Date.now()-y>r){let l=[];S.inflight.length>0&&l.push(`${S.inflight.length} resolvers inflight: ${S.inflight.map(w=>w.resolverId).join(", ")}`),R.isReconciling&&l.push("reconciliation in progress"),R.reconcileScheduled&&l.push("reconcile scheduled");let h=R.previousRequirements.all();throw h.length>0&&l.push(`${h.length} unmet requirements: ${h.map(w=>w.requirement.type).join(", ")}`),new Error(`[Directive] settle() timed out after ${r}ms. ${l.join("; ")}`)}await new Promise(l=>setTimeout(l,10));}},getSnapshot(){return {facts:T.toObject(),version:1}},getDistributableSnapshot(r={}){let{includeDerivations:y,excludeDerivations:S,includeFacts:x,ttlSeconds:l,metadata:h,includeVersion:w}=r,$={},E=Object.keys(c),z;if(y){if(z=y.filter(_=>E.includes(_)),process.env.NODE_ENV!=="production"){let _=y.filter(H=>!E.includes(H));_.length>0&&console.warn(`[Directive] getDistributableSnapshot: Unknown derivation keys ignored: ${_.join(", ")}. Available: ${E.join(", ")||"(none)"}`);}}else z=E;if(S){let _=new Set(S);z=z.filter(H=>!_.has(H));}for(let _ of z)try{$[_]=B.get(_);}catch(H){process.env.NODE_ENV!=="production"&&console.warn(`[Directive] getDistributableSnapshot: Skipping derivation "${_}" due to error:`,H);}if(x&&x.length>0){let _=T.toObject(),H=Object.keys(_);if(process.env.NODE_ENV!=="production"){let J=x.filter(ee=>!(ee in _));J.length>0&&console.warn(`[Directive] getDistributableSnapshot: Unknown fact keys ignored: ${J.join(", ")}. Available: ${H.join(", ")||"(none)"}`);}for(let J of x)J in _&&($[J]=_[J]);}let L=Date.now(),U={data:$,createdAt:L};return l!==void 0&&l>0&&(U.expiresAt=L+l*1e3),w&&(U.version=Ve($)),h&&(U.metadata=h),U},watchDistributableSnapshot(r,y){let{includeDerivations:S,excludeDerivations:x}=r,l=Object.keys(c),h;if(S?h=S.filter(E=>l.includes(E)):h=l,x){let E=new Set(x);h=h.filter(z=>!E.has(z));}if(h.length===0)return process.env.NODE_ENV!=="production"&&console.warn("[Directive] watchDistributableSnapshot: No derivations to watch. Callback will never be called."),()=>{};let $=this.getDistributableSnapshot({...r,includeVersion:true}).version;return B.subscribe(h,()=>{let E=this.getDistributableSnapshot({...r,includeVersion:true});E.version!==$&&($=E.version,y(E));})},restore(r){if(!r||typeof r!="object")throw new Error("[Directive] restore() requires a valid snapshot object");if(!r.facts||typeof r.facts!="object")throw new Error("[Directive] restore() snapshot must have a facts object");if(!ae(r))throw new Error("[Directive] restore() rejected: snapshot contains potentially dangerous keys (__proto__, constructor, or prototype). This may indicate a prototype pollution attack.");T.batch(()=>{for(let[y,S]of Object.entries(r.facts))ne.has(y)||T.set(y,S);});},onSettledChange(r){return k.add(r),()=>{k.delete(r);}},onTimeTravelChange(r){return W.add(r),()=>{W.delete(r);}},batch(r){T.batch(r);},get isSettled(){return this.inspect().inflight.length===0&&!R.isReconciling&&!R.reconcileScheduled},get isRunning(){return R.isRunning},get isInitialized(){return R.isInitialized},get isReady(){return R.isReady},whenReady(){return R.isReady?Promise.resolve():R.isRunning?(R.readyPromise||(R.readyPromise=new Promise(r=>{R.readyResolve=r;})),R.readyPromise):Promise.reject(new Error("[Directive] whenReady() called before start(). Call system.start() first, then await system.whenReady()."))}};function V(r){if(R.isReconciling)throw new Error(`[Directive] Cannot register module "${r.id}" during reconciliation. Wait for the current reconciliation cycle to complete.`);if(R.isDestroyed)throw new Error(`[Directive] Cannot register module "${r.id}" on a destroyed system.`);let y=(S,x)=>{if(S){for(let l of Object.keys(S))if(ne.has(l))throw new Error(`[Directive] Security: Module "${r.id}" has dangerous key "${l}" in ${x}.`)}};y(r.schema,"schema"),y(r.events,"events"),y(r.derive,"derive"),y(r.effects,"effects"),y(r.constraints,"constraints"),y(r.resolvers,"resolvers");for(let S of Object.keys(r.schema))if(S in t)throw new Error(`[Directive] Schema collision: Fact "${S}" already exists. Cannot register module "${r.id}".`);if(process.env.NODE_ENV!=="production"&&r.derive){let S=new Set(Object.keys(t));for(let x of Object.keys(r.derive))S.has(x)&&console.warn(`[Directive] "${x}" exists as both a fact and a derivation after registering module "${r.id}".`);}Object.assign(t,r.schema),r.events&&Object.assign(o,r.events),r.derive&&(Object.assign(c,r.derive),B.registerDefinitions(r.derive)),r.effects&&(Object.assign(i,r.effects),K.registerDefinitions(r.effects)),r.constraints&&(Object.assign(n,r.constraints),C.registerDefinitions(r.constraints)),r.resolvers&&(Object.assign(u,r.resolvers),P.registerDefinitions(r.resolvers)),T.registerKeys(r.schema),e.modules.push(r),r.init&&T.batch(()=>{r.init(A);}),r.hooks?.onInit?.(F),R.isRunning&&(r.hooks?.onStart?.(F),v());}F.registerModule=V,a.emitInit(F);for(let r of e.modules)r.hooks?.onInit?.(F);return F}var G=Object.freeze(new Set(["__proto__","constructor","prototype"])),N="::";function Mt(e){let t=Object.keys(e),o=new Set,c=new Set,i=[],n=[];function u(d){if(o.has(d))return;if(c.has(d)){let s=n.indexOf(d),m=[...n.slice(s),d].join(" \u2192 ");throw new Error(`[Directive] Circular dependency detected: ${m}. Modules cannot have circular crossModuleDeps. Break the cycle by removing one of the cross-module references.`)}c.add(d),n.push(d);let a=e[d];if(a?.crossModuleDeps)for(let s of Object.keys(a.crossModuleDeps))t.includes(s)&&u(s);n.pop(),c.delete(d),o.add(d),i.push(d);}for(let d of t)u(d);return i}var Ye=new WeakMap,Qe=new WeakMap,et=new WeakMap,tt=new WeakMap;function me(e){if("module"in e){if(!e.module)throw new Error("[Directive] createSystem requires a module. Got: "+typeof e.module);return Et(e)}let t=e;if(Array.isArray(t.modules))throw new Error(`[Directive] createSystem expects modules as an object, not an array.
1
+ var le=class extends Error{constructor(s,u,o,r,d=true){super(s);this.source=u;this.sourceId=o;this.context=r;this.recoverable=d;this.name="DirectiveError";}};function Pe(){return {create(e){return e}}}function Ae(){return {create(e){return e}}}function je(e){return e}function Fe(e){return e}function rt(e){return e._mode==="single"}function st(e){return e._mode==="namespaced"}var ie=[];function ot(){let e=new Set;return {get isTracking(){return true},track(t){e.add(t);},getDependencies(){return e}}}var it={isTracking:false,track(){},getDependencies(){return new Set}};function _e(){return ie[ie.length-1]??it}function at(){return ie.length>0}function ae(e){let t=ot();ie.push(t);try{return {value:e(),deps:t.getDependencies()}}finally{ie.pop();}}function ve(e){let t=ie.splice(0,ie.length);try{return e()}finally{ie.push(...t);}}function fe(e){_e().track(e);}function ct(e,t=100){try{return JSON.stringify(e)?.slice(0,t)??String(e)}catch{return "[circular or non-serializable]"}}function Se(e=[],t,s,u,o,r){return {_type:void 0,_validators:e,_typeName:t,_default:s,_transform:u,_description:o,_refinements:r,validate(d){return Se([...e,d],t,s,u,o,r)}}}function ee(e,t,s,u,o,r){return {...Se(e,t,s,u,o,r),default(g){return ee(e,t,g,u,o,r)},transform(g){return ee([],t,void 0,c=>{let a=u?u(c):c;return g(a)},o)},brand(){return ee(e,`Branded<${t}>`,s,u,o,r)},describe(g){return ee(e,t,s,u,g,r)},refine(g,l){let c=[...r??[],{predicate:g,message:l}];return ee([...e,g],t,s,u,o,c)},nullable(){return ee([g=>g===null||e.every(l=>l(g))],`${t} | null`,s,u,o)},optional(){return ee([g=>g===void 0||e.every(l=>l(g))],`${t} | undefined`,s,u,o)}}}var ut={string(){return ee([e=>typeof e=="string"],"string")},number(){let e=(t,s,u,o,r)=>({...ee(t,"number",s,u,o,r),min(g){return e([...t,l=>l>=g],s,u,o,r)},max(g){return e([...t,l=>l<=g],s,u,o,r)},default(g){return e(t,g,u,o,r)},describe(g){return e(t,s,u,g,r)},refine(g,l){let c=[...r??[],{predicate:g,message:l}];return e([...t,g],s,u,o,c)}});return e([t=>typeof t=="number"])},boolean(){return ee([e=>typeof e=="boolean"],"boolean")},array(){let e=(t,s,u,o,r)=>{let d=ee(t,"array",u,void 0,o),g=r??{value:-1};return {...d,get _lastFailedIndex(){return g.value},set _lastFailedIndex(c){g.value=c;},of(c){let a={value:-1};return e([...t,p=>{for(let k=0;k<p.length;k++){let T=p[k];if(!c._validators.every(j=>j(T)))return a.value=k,false}return true}],c,u,o,a)},nonEmpty(){return e([...t,c=>c.length>0],s,u,o,g)},maxLength(c){return e([...t,a=>a.length<=c],s,u,o,g)},minLength(c){return e([...t,a=>a.length>=c],s,u,o,g)},default(c){return e(t,s,c,o,g)},describe(c){return e(t,s,u,c,g)}}};return e([t=>Array.isArray(t)])},object(){let e=(t,s,u)=>({...ee(t,"object",s,void 0,u),shape(r){return e([...t,d=>{for(let[g,l]of Object.entries(r)){let c=d[g],a=l;if(a&&!a._validators.every(p=>p(c)))return false}return true}],s,u)},nonNull(){return e([...t,r=>r!=null],s,u)},hasKeys(...r){return e([...t,d=>r.every(g=>g in d)],s,u)},default(r){return e(t,r,u)},describe(r){return e(t,s,r)}});return e([t=>typeof t=="object"&&t!==null&&!Array.isArray(t)])},enum(...e){process.env.NODE_ENV!=="production"&&e.length===0&&console.warn("[Directive] t.enum() called with no values - this will reject all strings");let t=new Set(e);return ee([s=>typeof s=="string"&&t.has(s)],`enum(${e.join("|")})`)},literal(e){return ee([t=>t===e],`literal(${String(e)})`)},nullable(e){let t=e._typeName??"unknown";return Se([s=>s===null?true:e._validators.every(u=>u(s))],`${t} | null`)},optional(e){let t=e._typeName??"unknown";return Se([s=>s===void 0?true:e._validators.every(u=>u(s))],`${t} | undefined`)},union(...e){process.env.NODE_ENV!=="production"&&e.length===0&&console.warn("[Directive] t.union() called with no types - this will reject all values");let t=e.map(s=>s._typeName??"unknown");return ee([s=>e.some(u=>u._validators.every(o=>o(s)))],t.join(" | "))},record(e){let t=e._typeName??"unknown";return ee([s=>typeof s!="object"||s===null||Array.isArray(s)?false:Object.values(s).every(u=>e._validators.every(o=>o(u)))],`Record<string, ${t}>`)},tuple(...e){process.env.NODE_ENV!=="production"&&e.length===0&&console.warn("[Directive] t.tuple() called with no types - this will only accept empty arrays");let t=e.map(s=>s._typeName??"unknown");return ee([s=>!Array.isArray(s)||s.length!==e.length?false:e.every((u,o)=>u._validators.every(r=>r(s[o])))],`[${t.join(", ")}]`)},date(){return ee([e=>e instanceof Date&&!isNaN(e.getTime())],"Date")},uuid(){let e=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;return ee([t=>typeof t=="string"&&e.test(t)],"uuid")},email(){let e=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;return ee([t=>typeof t=="string"&&e.test(t)],"email")},url(){return ee([e=>{if(typeof e!="string")return false;try{return new URL(e),!0}catch{return false}}],"url")},bigint(){return ee([e=>typeof e=="bigint"],"bigint")}};function Be(e){let{schema:t,onChange:s,onBatch:u}=e,r=Object.keys(t).length===0,d=e.validate??process.env.NODE_ENV!=="production",g=e.strictKeys??(process.env.NODE_ENV!=="production"&&!r),l=e.redactErrors??false,c=new Map,a=new Set,p=new Map,k=new Set,T=0,j=[],W=new Set,V=false,D=[],C=100;function N(y){return y!==null&&typeof y=="object"&&"safeParse"in y&&typeof y.safeParse=="function"&&"_def"in y&&"parse"in y&&typeof y.parse=="function"}function F(y){let w=y;if(w._typeName)return w._typeName;if(N(y)){let v=y._def;if(v?.typeName)return v.typeName.replace(/^Zod/,"").toLowerCase()}return "unknown"}function f(y){return l?"[redacted]":ct(y)}function S(y,w){if(!d)return;let v=t[y];if(!v){if(g)throw new Error(`[Directive] Unknown fact key: "${y}". Key not defined in schema.`);console.warn(`[Directive] Unknown fact key: "${y}"`);return}if(N(v)){let q=v.safeParse(w);if(!q.success){let O=w===null?"null":Array.isArray(w)?"array":typeof w,I=f(w),n=q.error?.message??q.error?.issues?.[0]?.message??"Validation failed",i=F(v);throw new Error(`[Directive] Validation failed for "${y}": expected ${i}, got ${O} ${I}. ${n}`)}return}let _=v,U=_._validators;if(!U||!Array.isArray(U)||U.length===0)return;let z=_._typeName??"unknown";for(let q=0;q<U.length;q++){let O=U[q];if(typeof O=="function"&&!O(w)){let I=w===null?"null":Array.isArray(w)?"array":typeof w,n=f(w),i="";typeof _._lastFailedIndex=="number"&&_._lastFailedIndex>=0&&(i=` (element at index ${_._lastFailedIndex} failed)`,_._lastFailedIndex=-1);let m=q===0?"":` (validator ${q+1} failed)`;throw new Error(`[Directive] Validation failed for "${y}": expected ${z}, got ${I} ${n}${m}${i}`)}}}function R(y){p.get(y)?.forEach(w=>w());}function b(){k.forEach(y=>y());}function E(y,w,v){if(V){D.push({key:y,value:w,prev:v});return}V=true;try{s?.(y,w,v),R(y),b();let _=0;for(;D.length>0;){if(++_>C)throw D.length=0,new Error(`[Directive] Infinite notification loop detected after ${C} iterations. A listener is repeatedly mutating facts that re-trigger notifications.`);let U=[...D];D.length=0;for(let z of U)s?.(z.key,z.value,z.prev),R(z.key);b();}}finally{V=false;}}function $(){if(!(T>0)){if(u&&j.length>0&&u([...j]),W.size>0){V=true;try{for(let w of W)R(w);b();let y=0;for(;D.length>0;){if(++y>C)throw D.length=0,new Error(`[Directive] Infinite notification loop detected during flush after ${C} iterations.`);let w=[...D];D.length=0;for(let v of w)s?.(v.key,v.value,v.prev),R(v.key);b();}}finally{V=false;}}j.length=0,W.clear();}}let h={get(y){return fe(y),c.get(y)},has(y){return fe(y),c.has(y)},set(y,w){S(y,w);let v=c.get(y);Object.is(v,w)||(c.set(y,w),a.add(y),T>0?(j.push({key:y,value:w,prev:v,type:"set"}),W.add(y)):E(y,w,v));},delete(y){let w=c.get(y);c.delete(y),a.delete(y),T>0?(j.push({key:y,value:void 0,prev:w,type:"delete"}),W.add(y)):E(y,void 0,w);},batch(y){T++;try{y();}finally{T--,$();}},subscribe(y,w){for(let v of y){let _=v;p.has(_)||p.set(_,new Set),p.get(_).add(w);}return ()=>{for(let v of y){let _=p.get(v);_&&(_.delete(w),_.size===0&&p.delete(v));}}},subscribeAll(y){return k.add(y),()=>k.delete(y)},toObject(){let y={};for(let w of a)c.has(w)&&(y[w]=c.get(w));return y}};return h.registerKeys=y=>{for(let w of Object.keys(y))pe.has(w)||(t[w]=y[w],a.add(w));},h}var pe=Object.freeze(new Set(["__proto__","constructor","prototype"]));function Ne(e,t){let s=()=>({get:o=>ve(()=>e.get(o)),has:o=>ve(()=>e.has(o))});return new Proxy({},{get(o,r){if(r==="$store")return e;if(r==="$snapshot")return s;if(typeof r!="symbol"&&!pe.has(r))return e.get(r)},set(o,r,d){return typeof r=="symbol"||r==="$store"||r==="$snapshot"||pe.has(r)?false:(e.set(r,d),true)},deleteProperty(o,r){return typeof r=="symbol"||r==="$store"||r==="$snapshot"||pe.has(r)?false:(e.delete(r),true)},has(o,r){return r==="$store"||r==="$snapshot"?true:typeof r=="symbol"||pe.has(r)?false:e.has(r)},ownKeys(){return Object.keys(t)},getOwnPropertyDescriptor(o,r){return r==="$store"||r==="$snapshot"?{configurable:true,enumerable:false,writable:false}:{configurable:true,enumerable:true,writable:true}}})}function we(e){let t=Be(e),s=Ne(t,e.schema);return {store:t,facts:s}}function Ke(e,t){if(process.env.NODE_ENV!=="production"){!e||typeof e!="string"?console.warn("[Directive] Module ID must be a non-empty string"):/^[a-z][a-z0-9-]*$/i.test(e)||console.warn(`[Directive] Module ID "${e}" should follow kebab-case convention (e.g., "my-module")`),t.schema?t.schema.facts||console.warn("[Directive] Module schema.facts is required"):console.warn("[Directive] Module schema is required");let u=t.schema?.derivations??{},o=t.derive??{},r=new Set(Object.keys(u)),d=new Set(Object.keys(o));for(let p of d)r.has(p)||console.warn(`[Directive] Derivation "${p}" not declared in schema.derivations`);for(let p of r)d.has(p)||console.warn(`[Directive] schema.derivations["${p}"] has no matching implementation in derive`);let g=t.schema?.events??{},l=t.events??{},c=new Set(Object.keys(g)),a=new Set(Object.keys(l));for(let p of a)c.has(p)||console.warn(`[Directive] Event "${p}" not declared in schema.events`);for(let p of c)a.has(p)||console.warn(`[Directive] schema.events["${p}"] has no matching handler in events`);if(t.snapshotEvents){t.snapshotEvents.length===0&&console.warn("[Directive] snapshotEvents is an empty array \u2014 no events will create time-travel snapshots. Omit snapshotEvents entirely to snapshot all events, or list specific events.");let p=new Set(Object.keys(t.schema?.events??{}));for(let k of t.snapshotEvents)p.has(k)||console.warn(`[Directive] snapshotEvents entry "${k}" not declared in schema.events. Available events: ${[...p].join(", ")||"(none)"}`);}if(t.resolvers&&t.schema?.requirements){let p=new Set(Object.keys(t.schema.requirements));for(let[k,T]of Object.entries(t.resolvers)){let j=T;typeof j.requirement=="string"&&!p.has(j.requirement)&&console.warn(`[Directive] Resolver "${k}" references unknown requirement type "${j.requirement}". Available types: ${[...p].join(", ")||"(none)"}`);}}}let s="crossModuleDeps"in t?t.crossModuleDeps:void 0;return {id:e,schema:t.schema,init:t.init,derive:t.derive??{},events:t.events??{},effects:t.effects,constraints:t.constraints,resolvers:t.resolvers,hooks:t.hooks,snapshotEvents:t.snapshotEvents,crossModuleDeps:s}}function dt(e){return t=>Ke(t,e)}async function ge(e,t,s){let u,o=new Promise((r,d)=>{u=setTimeout(()=>d(new Error(s)),t);});try{return await Promise.race([e,o])}finally{clearTimeout(u);}}function he(e,t=50){let s=new WeakSet;function u(o,r){if(r>t)return '"[max depth exceeded]"';if(o===null)return "null";if(o===void 0)return "undefined";let d=typeof o;if(d==="string")return JSON.stringify(o);if(d==="number"||d==="boolean")return String(o);if(d==="function")return '"[function]"';if(d==="symbol")return '"[symbol]"';if(Array.isArray(o)){if(s.has(o))return '"[circular]"';s.add(o);let g=`[${o.map(l=>u(l,r+1)).join(",")}]`;return s.delete(o),g}if(d==="object"){let g=o;if(s.has(g))return '"[circular]"';s.add(g);let a=`{${Object.keys(g).sort().map(p=>`${JSON.stringify(p)}:${u(g[p],r+1)}`).join(",")}}`;return s.delete(g),a}return '"[unknown]"'}return u(e,0)}function ce(e,t=50){let s=new Set(["__proto__","constructor","prototype"]),u=new WeakSet;function o(r,d){if(d>t)return false;if(r==null||typeof r!="object")return true;let g=r;if(u.has(g))return true;if(u.add(g),Array.isArray(g)){for(let l of g)if(!o(l,d+1))return u.delete(g),false;return u.delete(g),true}for(let l of Object.keys(g))if(s.has(l)||!o(g[l],d+1))return u.delete(g),false;return u.delete(g),true}return o(e,0)}function lt(e,t){if(e===t)return true;if(!e||!t)return false;let s=Object.keys(e),u=Object.keys(t);if(s.length!==u.length)return false;for(let o of s)if(e[o]!==t[o])return false;return true}function We(e){let t=he(e),s=5381;for(let u=0;u<t.length;u++)s=(s<<5)+s^t.charCodeAt(u);return (s>>>0).toString(16)}function Ve(e,t=Date.now()){return e.expiresAt!==void 0&&t>e.expiresAt}function ft(e,t=Date.now()){if(!e||typeof e!="object")throw new Error("[Directive] Invalid snapshot: expected an object with 'data' and 'createdAt' properties.");if(!("data"in e))throw new Error("[Directive] Invalid snapshot: missing required 'data' property.");if(!("createdAt"in e)||typeof e.createdAt!="number")throw new Error("[Directive] Invalid snapshot: missing or invalid 'createdAt' property (expected number).");if(Ve(e,t)){let s=new Date(e.expiresAt).toISOString();throw new Error(`[Directive] Snapshot expired at ${s}. Obtain a fresh snapshot from the source.`)}return e.data}function gt(e,t){let s=[];function u(r,d,g){if(r==null){d!=null&&s.push({path:g,oldValue:r,newValue:d,type:"added"});return}if(d==null){s.push({path:g,oldValue:r,newValue:d,type:"removed"});return}if(typeof r!="object"||typeof d!="object"){Object.is(r,d)||s.push({path:g,oldValue:r,newValue:d,type:"changed"});return}if(Array.isArray(r)&&Array.isArray(d)){if(r.length!==d.length){s.push({path:g,oldValue:r,newValue:d,type:"changed"});return}for(let p=0;p<r.length;p++)u(r[p],d[p],`${g}[${p}]`);return}let l=r,c=d,a=new Set([...Object.keys(l),...Object.keys(c)]);for(let p of a){let k=g?`${g}.${p}`:p;p in l?p in c?u(l[p],c[p],k):s.push({path:k,oldValue:l[p],newValue:void 0,type:"removed"}):s.push({path:k,oldValue:void 0,newValue:c[p],type:"added"});}}u(e.data,t.data,"");let o=e.version!==t.version&&(e.version!==void 0||t.version!==void 0);return {identical:s.length===0,changes:s,versionChanged:o,oldVersion:e.version,newVersion:t.version}}function mt(e){return "signature"in e&&typeof e.signature=="string"}async function yt(e,t){let s=he({data:e.data,createdAt:e.createdAt,expiresAt:e.expiresAt,version:e.version,metadata:e.metadata}),u=await ze(s,t);return {...e,signature:u,algorithm:"hmac-sha256"}}async function pt(e,t){if(!e.signature||e.algorithm!=="hmac-sha256")return false;let s=he({data:e.data,createdAt:e.createdAt,expiresAt:e.expiresAt,version:e.version,metadata:e.metadata}),u=await ze(s,t);return ht(e.signature,u)}async function ze(e,t){let s=typeof t=="string"?new TextEncoder().encode(t):t,u={name:"HMAC",hash:{name:"SHA-256"}},o=await crypto.subtle.importKey("raw",s,u,false,["sign"]),r=new TextEncoder().encode(e),d=await crypto.subtle.sign("HMAC",o,r);return Array.from(new Uint8Array(d)).map(g=>g.toString(16).padStart(2,"0")).join("")}function ht(e,t){if(e.length!==t.length)return false;let s=0;for(let u=0;u<e.length;u++)s|=e.charCodeAt(u)^t.charCodeAt(u);return s===0}function Le(e,t){if(t)return t(e);let{type:s,...u}=e,o=he(u);return `${s}:${o}`}function Ue(e,t,s){return {requirement:e,id:Le(e,s),fromConstraint:t}}function vt(e){return t=>({type:e,...t})}function St(e,t){return e.type===t}function bt(e){return t=>t.type===e}var ue=class e{map=new Map;add(t){this.map.has(t.id)||this.map.set(t.id,t);}remove(t){return this.map.delete(t)}has(t){return this.map.has(t)}get(t){return this.map.get(t)}all(){return [...this.map.values()]}ids(){return [...this.map.keys()]}get size(){return this.map.size}clear(){this.map.clear();}clone(){let t=new e;for(let s of this.map.values())t.add(s);return t}diff(t){let s=[],u=[],o=[];for(let r of this.map.values())t.has(r.id)?o.push(r):s.push(r);for(let r of t.map.values())this.map.has(r.id)||u.push(r);return {added:s,removed:u,unchanged:o}}};var wt=5e3;function ke(e){let{definitions:t,facts:s,requirementKeys:u={},defaultTimeout:o=wt,onEvaluate:r,onError:d}=e,g=new Map,l=new Set,c=new Set,a=new Map,p=new Map,k=new Set,T=new Map,j=new Map,W=false,V=new Set,D=new Set,C=new Map,N=[],F=new Map;function f(){for(let[n,i]of Object.entries(t))if(i.after)for(let m of i.after)t[m]&&(C.has(m)||C.set(m,new Set),C.get(m).add(n));}function S(){let n=new Set,i=new Set,m=[];function M(x,P){if(n.has(x))return;if(i.has(x)){let L=P.indexOf(x),A=[...P.slice(L),x].join(" \u2192 ");throw new Error(`[Directive] Constraint cycle detected: ${A}. Remove one of the \`after\` dependencies to break the cycle.`)}i.add(x),P.push(x);let K=t[x];if(K?.after)for(let L of K.after)t[L]&&M(L,P);P.pop(),i.delete(x),n.add(x),m.push(x);}for(let x of Object.keys(t))M(x,[]);N=m,F=new Map(N.map((x,P)=>[x,P]));}if(S(),f(),process.env.NODE_ENV!=="production"){for(let[n,i]of Object.entries(t))if(i.after)for(let m of i.after)t[m]||console.warn(`[Directive] Constraint "${n}" references unknown constraint "${m}" in \`after\`. This dependency will be ignored. Check for typos or ensure the constraint exists.`);}function R(n,i){return i.async!==void 0?i.async:!!c.has(n)}function b(n){let i=t[n];if(!i)throw new Error(`[Directive] Unknown constraint: ${n}`);let m=R(n,i);m&&c.add(n);let M={id:n,priority:i.priority??0,isAsync:m,lastResult:null,isEvaluating:false,error:null,lastResolvedAt:null,after:i.after??[]};return g.set(n,M),M}function E(n){return g.get(n)??b(n)}function $(n,i){let m=a.get(n)??new Set;for(let M of m){let x=p.get(M);x?.delete(n),x&&x.size===0&&p.delete(M);}for(let M of i)p.has(M)||p.set(M,new Set),p.get(M).add(n);a.set(n,i);}function h(n){let i=t[n];if(!i)return false;let m=E(n);m.isEvaluating=true,m.error=null;try{let M;if(i.deps)M=i.when(s),T.set(n,new Set(i.deps));else {let x=ae(()=>i.when(s));M=x.value,T.set(n,x.deps);}return M instanceof Promise?(c.add(n),m.isAsync=!0,process.env.NODE_ENV!=="production"&&console.warn(`[Directive] Constraint "${n}" returned a Promise but was not marked as async. Add \`async: true\` to the constraint definition to avoid this warning and improve performance.`),M.then(x=>(m.lastResult=x,m.isEvaluating=!1,r?.(n,x),x)).catch(x=>(m.error=x instanceof Error?x:new Error(String(x)),m.lastResult=!1,m.isEvaluating=!1,d?.(n,x),!1))):(m.lastResult=M,m.isEvaluating=!1,r?.(n,M),M)}catch(M){return m.error=M instanceof Error?M:new Error(String(M)),m.lastResult=false,m.isEvaluating=false,d?.(n,M),false}}async function y(n){let i=t[n];if(!i)return false;let m=E(n),M=i.timeout??o;if(m.isEvaluating=true,m.error=null,i.deps?.length){let x=new Set(i.deps);$(n,x),T.set(n,x);}try{let x=i.when(s),P=await ge(x,M,`Constraint "${n}" timed out after ${M}ms`);return m.lastResult=P,m.isEvaluating=!1,r?.(n,P),P}catch(x){return m.error=x instanceof Error?x:new Error(String(x)),m.lastResult=false,m.isEvaluating=false,d?.(n,x),false}}let w=10;function v(n,i){if(n==null)return [];if(Array.isArray(n)){let m=n.filter(M=>M!=null);return process.env.NODE_ENV!=="production"&&m.length>w&&i&&console.warn(`[Directive] Constraint "${i}" produced ${m.length} requirements. Consider splitting into multiple constraints for better performance.`),m}return [n]}function _(n){let i=t[n];if(!i)return {requirements:[],deps:new Set};let m=i.require;if(typeof m=="function"){let{value:x,deps:P}=ae(()=>m(s));return {requirements:v(x,n),deps:P}}return {requirements:v(m,n),deps:new Set}}function U(n,i){if(i.size===0)return;let m=a.get(n)??new Set;for(let M of i)m.add(M),p.has(M)||p.set(M,new Set),p.get(M).add(n);a.set(n,m);}let z=null;function q(){return z||(z=Object.keys(t).sort((n,i)=>{let m=E(n),x=E(i).priority-m.priority;if(x!==0)return x;let P=F.get(n)??0,K=F.get(i)??0;return P-K})),z}for(let n of Object.keys(t))b(n);if(process.env.NODE_ENV!=="production")for(let[n,i]of Object.entries(t))i.async&&!i.deps&&console.warn(`[Directive] Async constraint "${n}" has no \`deps\` declared. Auto-tracking cannot work across async boundaries. Add \`deps: ["key1", "key2"]\` to enable dependency tracking.`);function O(n){let i=g.get(n);if(!i||i.after.length===0)return true;for(let m of i.after)if(t[m]&&!l.has(m)&&!D.has(m)&&!V.has(m))return false;return true}return {async evaluate(n){let i=new ue;D.clear();let m=q().filter(A=>!l.has(A)),M;if(!W||!n||n.size===0)M=m,W=true;else {let A=new Set;for(let J of n){let X=p.get(J);if(X)for(let G of X)l.has(G)||A.add(G);}for(let J of k)l.has(J)||A.add(J);k.clear(),M=[...A];for(let J of m)if(!A.has(J)){let X=j.get(J);if(X)for(let G of X)i.add(G);}}function x(A,J){if(l.has(A))return;let X=T.get(A);if(!J){X!==void 0&&$(A,X),D.add(A),j.set(A,[]);return}D.delete(A);let G,Z;try{let Y=_(A);G=Y.requirements,Z=Y.deps;}catch(Y){d?.(A,Y),X!==void 0&&$(A,X),j.set(A,[]);return}if(X!==void 0){let Y=new Set(X);for(let H of Z)Y.add(H);$(A,Y);}else U(A,Z);if(G.length>0){let Y=u[A],H=G.map(Q=>Ue(Q,A,Y));for(let Q of H)i.add(Q);j.set(A,H);}else j.set(A,[]);}async function P(A){let J=[],X=[];for(let H of A)if(O(H))X.push(H);else {J.push(H);let Q=j.get(H);if(Q)for(let de of Q)i.add(de);}if(X.length===0)return J;let G=[],Z=[];for(let H of X)E(H).isAsync?Z.push(H):G.push(H);let Y=[];for(let H of G){let Q=h(H);if(Q instanceof Promise){Y.push({id:H,promise:Q});continue}x(H,Q);}if(Y.length>0){let H=await Promise.all(Y.map(async({id:Q,promise:de})=>({id:Q,active:await de})));for(let{id:Q,active:de}of H)x(Q,de);}if(Z.length>0){let H=await Promise.all(Z.map(async Q=>({id:Q,active:await y(Q)})));for(let{id:Q,active:de}of H)x(Q,de);}return J}let K=M,L=M.length+1;for(;K.length>0&&L>0;){let A=K.length;if(K=await P(K),K.length===A)break;L--;}return i.all()},getState(n){return g.get(n)},getAllStates(){return [...g.values()]},disable(n){l.add(n),z=null,j.delete(n);let i=a.get(n);if(i){for(let m of i){let M=p.get(m);M&&(M.delete(n),M.size===0&&p.delete(m));}a.delete(n);}T.delete(n);},enable(n){l.delete(n),z=null,k.add(n);},invalidate(n){let i=p.get(n);if(i)for(let m of i)k.add(m);},markResolved(n){V.add(n);let i=g.get(n);i&&(i.lastResolvedAt=Date.now());let m=C.get(n);if(m)for(let M of m)k.add(M);},isResolved(n){return V.has(n)},registerDefinitions(n){for(let[i,m]of Object.entries(n))t[i]=m,b(i),k.add(i);z=null,S(),f();}}}function Re(e){let{definitions:t,facts:s,store:u,onCompute:o,onInvalidate:r,onError:d}=e,g=new Map,l=new Map,c=new Map,a=new Map,p=new Set(["__proto__","constructor","prototype"]),k=0,T=new Set,j=false,W=100,V;function D(b){if(!t[b])throw new Error(`[Directive] Unknown derivation: ${b}`);let $={id:b,compute:()=>N(b),cachedValue:void 0,dependencies:new Set,isStale:true,isComputing:false};return g.set(b,$),$}function C(b){return g.get(b)??D(b)}function N(b){let E=C(b),$=t[b];if(!$)throw new Error(`[Directive] Unknown derivation: ${b}`);if(E.isComputing)throw new Error(`[Directive] Circular dependency detected in derivation: ${b}`);E.isComputing=true;try{let{value:h,deps:y}=ae(()=>$(s,V));return E.cachedValue=h,E.isStale=!1,F(b,y),o?.(b,h,[...y]),h}catch(h){throw d?.(b,h),h}finally{E.isComputing=false;}}function F(b,E){let $=C(b),h=$.dependencies;for(let y of h)if(g.has(y)){let w=a.get(y);w?.delete(b),w&&w.size===0&&a.delete(y);}else {let w=c.get(y);w?.delete(b),w&&w.size===0&&c.delete(y);}for(let y of E)t[y]?(a.has(y)||a.set(y,new Set),a.get(y).add(b)):(c.has(y)||c.set(y,new Set),c.get(y).add(b));$.dependencies=E;}function f(){if(!(k>0||j)){j=true;try{let b=0;for(;T.size>0;){if(++b>W){let $=[...T];throw T.clear(),new Error(`[Directive] Infinite derivation notification loop detected after ${W} iterations. Remaining: ${$.join(", ")}. This usually means a derivation listener is mutating facts that re-trigger the same derivation.`)}let E=[...T];T.clear();for(let $ of E)l.get($)?.forEach(h=>h());}}finally{j=false;}}}function S(b,E=new Set){if(E.has(b))return;E.add(b);let $=g.get(b);if(!$||$.isStale)return;$.isStale=true,r?.(b),T.add(b);let h=a.get(b);if(h)for(let y of h)S(y,E);}return V=new Proxy({},{get(b,E){if(typeof E=="symbol"||p.has(E))return;fe(E);let $=C(E);return $.isStale&&N(E),$.cachedValue}}),{get(b){let E=C(b);return E.isStale&&N(b),E.cachedValue},isStale(b){return g.get(b)?.isStale??true},invalidate(b){let E=c.get(b);if(E){k++;try{for(let $ of E)S($);}finally{k--,f();}}},invalidateMany(b){k++;try{for(let E of b){let $=c.get(E);if($)for(let h of $)S(h);}}finally{k--,f();}},invalidateAll(){k++;try{for(let b of g.values())b.isStale||(b.isStale=!0,T.add(b.id));}finally{k--,f();}},subscribe(b,E){for(let $ of b){let h=$;l.has(h)||l.set(h,new Set),l.get(h).add(E);}return ()=>{for(let $ of b){let h=$,y=l.get(h);y?.delete(E),y&&y.size===0&&l.delete(h);}}},getProxy(){return V},getDependencies(b){return C(b).dependencies},registerDefinitions(b){for(let[E,$]of Object.entries(b))t[E]=$,D(E);}}}function Me(e){let{definitions:t,facts:s,store:u,onRun:o,onError:r}=e,d=new Map,g=null,l=false;function c(D){let C=t[D];if(!C)throw new Error(`[Directive] Unknown effect: ${D}`);let N={id:D,enabled:true,hasExplicitDeps:!!C.deps,dependencies:C.deps?new Set(C.deps):null,lastSnapshot:null,cleanup:null};return d.set(D,N),N}function a(D){return d.get(D)??c(D)}function p(){return s.$snapshot()}function k(D,C){let N=a(D);if(!N.enabled)return false;if(N.dependencies){for(let F of N.dependencies)if(C.has(F))return true;return false}return true}function T(D){if(D.cleanup){try{D.cleanup();}catch(C){r?.(D.id,C),console.error(`[Directive] Effect "${D.id}" cleanup threw an error:`,C);}D.cleanup=null;}}function j(D,C){if(typeof C=="function")if(l)try{C();}catch(N){r?.(D.id,N),console.error(`[Directive] Effect "${D.id}" cleanup threw an error:`,N);}else D.cleanup=C;}async function W(D){let C=a(D),N=t[D];if(!(!C.enabled||!N)){T(C),o?.(D);try{if(C.hasExplicitDeps){let F;if(u.batch(()=>{F=N.run(s,g);}),F instanceof Promise){let f=await F;j(C,f);}else j(C,F);}else {let F=null,f,S=ae(()=>(u.batch(()=>{f=N.run(s,g);}),f));F=S.deps;let R=S.value;R instanceof Promise&&(R=await R),j(C,R),C.dependencies=F.size>0?F:null;}}catch(F){r?.(D,F),console.error(`[Directive] Effect "${D}" threw an error:`,F);}}}for(let D of Object.keys(t))c(D);return {async runEffects(D){let C=[];for(let N of Object.keys(t))k(N,D)&&C.push(N);await Promise.all(C.map(W)),g=p();},async runAll(){let D=Object.keys(t);await Promise.all(D.map(C=>a(C).enabled?W(C):Promise.resolve())),g=p();},disable(D){let C=a(D);C.enabled=false;},enable(D){let C=a(D);C.enabled=true;},isEnabled(D){return a(D).enabled},cleanupAll(){l=true;for(let D of d.values())T(D);},registerDefinitions(D){for(let[C,N]of Object.entries(D))t[C]=N,c(C);}}}function He(e={}){let{delayMs:t=1e3,maxRetries:s=3,backoffMultiplier:u=2,maxDelayMs:o=3e4}=e,r=new Map;function d(g){let l=t*Math.pow(u,g-1);return Math.min(l,o)}return {scheduleRetry(g,l,c,a,p){if(a>s)return null;let k=d(a),T={source:g,sourceId:l,context:c,attempt:a,nextRetryTime:Date.now()+k,callback:p};return r.set(l,T),T},getPendingRetries(){return Array.from(r.values())},processDueRetries(){let g=Date.now(),l=[];for(let[c,a]of r)a.nextRetryTime<=g&&(l.push(a),r.delete(c));return l},cancelRetry(g){r.delete(g);},clearAll(){r.clear();}}}var kt={constraint:"skip",resolver:"skip",effect:"skip",derivation:"skip",system:"throw"};function De(e={}){let{config:t={},onError:s,onRecovery:u}=e,o=[],r=100,d=He(t.retryLater),g=new Map;function l(p,k,T,j){if(T instanceof le)return T;let W=T instanceof Error?T.message:String(T),V=p!=="system";return new le(W,p,k,j,V)}function c(p,k,T){let j=(()=>{switch(p){case "constraint":return t.onConstraintError;case "resolver":return t.onResolverError;case "effect":return t.onEffectError;case "derivation":return t.onDerivationError;default:return}})();if(typeof j=="function"){try{j(T,k);}catch(W){console.error("[Directive] Error in error handler callback:",W);}return "skip"}return typeof j=="string"?j:kt[p]}return {handleError(p,k,T,j){let W=l(p,k,T,j);o.push(W),o.length>r&&o.shift();try{s?.(W);}catch(D){console.error("[Directive] Error in onError callback:",D);}try{t.onError?.(W);}catch(D){console.error("[Directive] Error in config.onError callback:",D);}let V=c(p,k,T instanceof Error?T:new Error(String(T)));if(V==="retry-later"){let D=(g.get(k)??0)+1;g.set(k,D),d.scheduleRetry(p,k,j,D)||(V="skip",g.delete(k),typeof process<"u"&&process.env?.NODE_ENV!=="production"&&console.warn(`[Directive] ${p} "${k}" exceeded max retry-later attempts. Skipping.`));}try{u?.(W,V);}catch(D){console.error("[Directive] Error in onRecovery callback:",D);}if(V==="throw")throw W;return V},getLastError(){return o[o.length-1]??null},getAllErrors(){return [...o]},clearErrors(){o.length=0;},getRetryLaterManager(){return d},processDueRetries(){return d.processDueRetries()},clearRetryAttempts(p){g.delete(p),d.cancelRetry(p);}}}function xe(){let e=[];function t(o){if(o)try{return o()}catch(r){console.error("[Directive] Plugin error:",r);return}}async function s(o){if(o)try{return await o()}catch(r){console.error("[Directive] Plugin error:",r);return}}return {register(o){e.some(r=>r.name===o.name)&&(console.warn(`[Directive] Plugin "${o.name}" is already registered, replacing...`),this.unregister(o.name)),e.push(o);},unregister(o){let r=e.findIndex(d=>d.name===o);r!==-1&&e.splice(r,1);},getPlugins(){return [...e]},async emitInit(o){for(let r of e)await s(()=>r.onInit?.(o));},emitStart(o){for(let r of e)t(()=>r.onStart?.(o));},emitStop(o){for(let r of e)t(()=>r.onStop?.(o));},emitDestroy(o){for(let r of e)t(()=>r.onDestroy?.(o));},emitFactSet(o,r,d){for(let g of e)t(()=>g.onFactSet?.(o,r,d));},emitFactDelete(o,r){for(let d of e)t(()=>d.onFactDelete?.(o,r));},emitFactsBatch(o){for(let r of e)t(()=>r.onFactsBatch?.(o));},emitDerivationCompute(o,r,d){for(let g of e)t(()=>g.onDerivationCompute?.(o,r,d));},emitDerivationInvalidate(o){for(let r of e)t(()=>r.onDerivationInvalidate?.(o));},emitReconcileStart(o){for(let r of e)t(()=>r.onReconcileStart?.(o));},emitReconcileEnd(o){for(let r of e)t(()=>r.onReconcileEnd?.(o));},emitConstraintEvaluate(o,r){for(let d of e)t(()=>d.onConstraintEvaluate?.(o,r));},emitConstraintError(o,r){for(let d of e)t(()=>d.onConstraintError?.(o,r));},emitRequirementCreated(o){for(let r of e)t(()=>r.onRequirementCreated?.(o));},emitRequirementMet(o,r){for(let d of e)t(()=>d.onRequirementMet?.(o,r));},emitRequirementCanceled(o){for(let r of e)t(()=>r.onRequirementCanceled?.(o));},emitResolverStart(o,r){for(let d of e)t(()=>d.onResolverStart?.(o,r));},emitResolverComplete(o,r,d){for(let g of e)t(()=>g.onResolverComplete?.(o,r,d));},emitResolverError(o,r,d){for(let g of e)t(()=>g.onResolverError?.(o,r,d));},emitResolverRetry(o,r,d){for(let g of e)t(()=>g.onResolverRetry?.(o,r,d));},emitResolverCancel(o,r){for(let d of e)t(()=>d.onResolverCancel?.(o,r));},emitEffectRun(o){for(let r of e)t(()=>r.onEffectRun?.(o));},emitEffectError(o,r){for(let d of e)t(()=>d.onEffectError?.(o,r));},emitSnapshot(o){for(let r of e)t(()=>r.onSnapshot?.(o));},emitTimeTravel(o,r){for(let d of e)t(()=>d.onTimeTravel?.(o,r));},emitError(o){for(let r of e)t(()=>r.onError?.(o));},emitErrorRecovery(o,r){for(let d of e)t(()=>d.onErrorRecovery?.(o,r));}}}var Je={attempts:1,backoff:"none",initialDelay:100,maxDelay:3e4},Xe={enabled:false,windowMs:50};function Ze(e,t){let{backoff:s,initialDelay:u=100,maxDelay:o=3e4}=e,r;switch(s){case "none":r=u;break;case "linear":r=u*t;break;case "exponential":r=u*Math.pow(2,t-1);break;default:r=u;}return Math.max(1,Math.min(r,o))}function Ee(e){let{definitions:t,facts:s,store:u,onStart:o,onComplete:r,onError:d,onRetry:g,onCancel:l,onResolutionComplete:c}=e;if(process.env.NODE_ENV!=="production")for(let[h,y]of Object.entries(t)){if(!y.resolve&&!y.resolveBatch)throw new Error(`[Directive] Resolver "${h}" must define either resolve() or resolveBatch(). Add one of these methods to handle requirements.`);if(y.batch?.enabled&&!y.resolveBatch)throw new Error(`[Directive] Resolver "${h}" has batch.enabled=true but no resolveBatch() method. Add resolveBatch() to handle batched requirements.`)}let a=new Map,p=new Map,k=1e3,T=new Map,j=new Map,W=1e3;function V(){if(p.size>k){let h=p.size-k,y=p.keys();for(let w=0;w<h;w++){let v=y.next().value;v&&p.delete(v);}}}function D(h){return typeof h=="object"&&h!==null&&"requirement"in h&&typeof h.requirement=="string"}function C(h){return typeof h=="object"&&h!==null&&"requirement"in h&&typeof h.requirement=="function"}function N(h,y){return D(h)?y.type===h.requirement:C(h)?h.requirement(y):false}function F(h){let y=h.type,w=j.get(y);if(w)for(let v of w){let _=t[v];if(_&&N(_,h))return v}for(let[v,_]of Object.entries(t))if(N(_,h)){if(!j.has(y)){if(j.size>=W){let z=j.keys().next().value;z!==void 0&&j.delete(z);}j.set(y,[]);}let U=j.get(y);return U.includes(v)||U.push(v),v}return null}function f(h){return {facts:s,signal:h,snapshot:()=>s.$snapshot()}}async function S(h,y,w){let v=t[h];if(!v)return;let _={...Je,...v.retry},U=null;for(let z=1;z<=_.attempts;z++){if(w.signal.aborted)return;let q=a.get(y.id);q&&(q.attempt=z,q.status={state:"running",requirementId:y.id,startedAt:q.startedAt,attempt:z});try{let O=f(w.signal);if(v.resolve){let n;u.batch(()=>{n=v.resolve(y.requirement,O);});let i=v.timeout;i&&i>0?await ge(n,i,`Resolver "${h}" timed out after ${i}ms`):await n;}let I=Date.now()-(q?.startedAt??Date.now());p.set(y.id,{state:"success",requirementId:y.id,completedAt:Date.now(),duration:I}),V(),r?.(h,y,I);return}catch(O){if(U=O instanceof Error?O:new Error(String(O)),w.signal.aborted)return;if(_.shouldRetry&&!_.shouldRetry(U,z))break;if(z<_.attempts){if(w.signal.aborted)return;let I=Ze(_,z);if(g?.(h,y,z+1),await new Promise(n=>{let i=setTimeout(n,I),m=()=>{clearTimeout(i),n();};w.signal.addEventListener("abort",m,{once:true});}),w.signal.aborted)return}}}p.set(y.id,{state:"error",requirementId:y.id,error:U,failedAt:Date.now(),attempts:_.attempts}),V(),d?.(h,y,U);}async function R(h,y){let w=t[h];if(!w)return;if(!w.resolveBatch&&!w.resolveBatchWithResults){await Promise.all(y.map(I=>{let n=new AbortController;return S(h,I,n)}));return}let v={...Je,...w.retry},_={...Xe,...w.batch},U=new AbortController,z=Date.now(),q=null,O=_.timeoutMs??w.timeout;for(let I=1;I<=v.attempts;I++){if(U.signal.aborted)return;try{let n=f(U.signal),i=y.map(m=>m.requirement);if(w.resolveBatchWithResults){let m,M;if(u.batch(()=>{M=w.resolveBatchWithResults(i,n);}),O&&O>0?m=await ge(M,O,`Batch resolver "${h}" timed out after ${O}ms`):m=await M,m.length!==y.length)throw new Error(`[Directive] Batch resolver "${h}" returned ${m.length} results but expected ${y.length}. Results array must match input order.`);let x=Date.now()-z,P=!1;for(let K=0;K<y.length;K++){let L=y[K],A=m[K];if(A.success)p.set(L.id,{state:"success",requirementId:L.id,completedAt:Date.now(),duration:x}),r?.(h,L,x);else {P=!0;let J=A.error??new Error("Batch item failed");p.set(L.id,{state:"error",requirementId:L.id,error:J,failedAt:Date.now(),attempts:I}),d?.(h,L,J);}}if(!P||y.some((K,L)=>m[L]?.success))return}else {let m;u.batch(()=>{m=w.resolveBatch(i,n);}),O&&O>0?await ge(m,O,`Batch resolver "${h}" timed out after ${O}ms`):await m;let M=Date.now()-z;for(let x of y)p.set(x.id,{state:"success",requirementId:x.id,completedAt:Date.now(),duration:M}),r?.(h,x,M);return}}catch(n){if(q=n instanceof Error?n:new Error(String(n)),U.signal.aborted)return;if(v.shouldRetry&&!v.shouldRetry(q,I))break;if(I<v.attempts){let i=Ze(v,I);for(let m of y)g?.(h,m,I+1);if(await new Promise(m=>{let M=setTimeout(m,i),x=()=>{clearTimeout(M),m();};U.signal.addEventListener("abort",x,{once:true});}),U.signal.aborted)return}}}for(let I of y)p.set(I.id,{state:"error",requirementId:I.id,error:q,failedAt:Date.now(),attempts:v.attempts}),d?.(h,I,q);V();}function b(h,y){let w=t[h];if(!w)return;let v={...Xe,...w.batch};T.has(h)||T.set(h,{resolverId:h,requirements:[],timer:null});let _=T.get(h);_.requirements.push(y),_.timer&&clearTimeout(_.timer),_.timer=setTimeout(()=>{E(h);},v.windowMs);}function E(h){let y=T.get(h);if(!y||y.requirements.length===0)return;let w=[...y.requirements];y.requirements=[],y.timer=null,R(h,w).then(()=>{c?.();});}return {resolve(h){if(a.has(h.id))return;let y=F(h.requirement);if(!y){console.warn(`[Directive] No resolver found for requirement: ${h.id}`);return}let w=t[y];if(!w)return;if(w.batch?.enabled){b(y,h);return}let v=new AbortController,_=Date.now(),U={requirementId:h.id,resolverId:y,controller:v,startedAt:_,attempt:1,status:{state:"pending",requirementId:h.id,startedAt:_},originalRequirement:h};a.set(h.id,U),o?.(y,h),S(y,h,v).finally(()=>{a.delete(h.id)&&c?.();});},cancel(h){let y=a.get(h);y&&(y.controller.abort(),a.delete(h),p.set(h,{state:"canceled",requirementId:h,canceledAt:Date.now()}),V(),l?.(y.resolverId,y.originalRequirement));},cancelAll(){for(let[h]of a)this.cancel(h);for(let h of T.values())h.timer&&clearTimeout(h.timer);T.clear();},getStatus(h){let y=a.get(h);if(y)return y.status;let w=p.get(h);return w||{state:"idle"}},getInflight(){return [...a.keys()]},getInflightInfo(){return [...a.values()].map(h=>({id:h.requirementId,resolverId:h.resolverId,startedAt:h.startedAt}))},isResolving(h){return a.has(h)},processBatches(){for(let h of T.keys())E(h);},registerDefinitions(h){for(let[y,w]of Object.entries(h))t[y]=w;j.clear();}}}function Te(e){let{config:t,facts:s,store:u,onSnapshot:o,onTimeTravel:r}=e,d=t.timeTravel??false,g=t.maxSnapshots??100,l=[],c=-1,a=1,p=false,k=false,T=[],j=null,W=-1;function V(){return u.toObject()}function D(){let F=V();return structuredClone(F)}function C(F){if(!ce(F)){console.error("[Directive] Potential prototype pollution detected in snapshot data, skipping restore");return}u.batch(()=>{for(let[f,S]of Object.entries(F)){if(f==="__proto__"||f==="constructor"||f==="prototype"){console.warn(`[Directive] Skipping dangerous key "${f}" during fact restoration`);continue}s[f]=S;}});}return {get isEnabled(){return d},get isRestoring(){return k},get isPaused(){return p},get snapshots(){return [...l]},get currentIndex(){return c},takeSnapshot(F){if(!d||p)return {id:-1,timestamp:Date.now(),facts:{},trigger:F};let f={id:a++,timestamp:Date.now(),facts:D(),trigger:F};for(c<l.length-1&&l.splice(c+1),l.push(f),c=l.length-1;l.length>g;)l.shift(),c--;return o?.(f),f},restore(F){if(d){p=true,k=true;try{C(F.facts);}finally{p=false,k=false;}}},goBack(F=1){if(!d||l.length===0)return;let f=c,S=c,R=T.find(E=>c>E.startIndex&&c<=E.endIndex);if(R)S=R.startIndex;else if(T.find($=>c===$.startIndex)){let $=T.find(h=>h.endIndex<c&&c-h.endIndex<=F);S=$?$.startIndex:Math.max(0,c-F);}else S=Math.max(0,c-F);if(f===S)return;c=S;let b=l[c];b&&(this.restore(b),r?.(f,S));},goForward(F=1){if(!d||l.length===0)return;let f=c,S=c,R=T.find(E=>c>=E.startIndex&&c<E.endIndex);if(R?S=R.endIndex:S=Math.min(l.length-1,c+F),f===S)return;c=S;let b=l[c];b&&(this.restore(b),r?.(f,S));},goTo(F){if(!d)return;let f=l.findIndex(b=>b.id===F);if(f===-1){console.warn(`[Directive] Snapshot ${F} not found`);return}let S=c;c=f;let R=l[c];R&&(this.restore(R),r?.(S,f));},replay(){if(!d||l.length===0)return;c=0;let F=l[0];F&&this.restore(F);},export(){return JSON.stringify({version:1,snapshots:l,currentIndex:c})},import(F){if(d)try{let f=JSON.parse(F);if(typeof f!="object"||f===null)throw new Error("Invalid time-travel data: expected object");if(f.version!==1)throw new Error(`Unsupported time-travel export version: ${f.version}`);if(!Array.isArray(f.snapshots))throw new Error("Invalid time-travel data: snapshots must be an array");if(typeof f.currentIndex!="number")throw new Error("Invalid time-travel data: currentIndex must be a number");for(let R of f.snapshots){if(typeof R!="object"||R===null)throw new Error("Invalid snapshot: expected object");if(typeof R.id!="number"||typeof R.timestamp!="number"||typeof R.trigger!="string"||typeof R.facts!="object")throw new Error("Invalid snapshot structure");if(!ce(R.facts))throw new Error("Invalid fact data: potential prototype pollution detected in nested objects")}l.length=0,l.push(...f.snapshots),c=f.currentIndex;let S=l[c];S&&this.restore(S);}catch(f){console.error("[Directive] Failed to import time-travel data:",f);}},beginChangeset(F){d&&(j=F,W=c);},endChangeset(){!d||j===null||(c>W&&T.push({label:j,startIndex:W,endIndex:c}),j=null,W=-1);},pause(){p=true;},resume(){p=false;}}}function Ce(){let e={id:-1,timestamp:0,facts:{},trigger:""};return {isEnabled:false,isRestoring:false,isPaused:false,snapshots:[],currentIndex:-1,takeSnapshot:()=>e,restore:()=>{},goBack:()=>{},goForward:()=>{},goTo:()=>{},replay:()=>{},export:()=>"{}",import:()=>{},beginChangeset:()=>{},endChangeset:()=>{},pause:()=>{},resume:()=>{}}}var re=new Set(["__proto__","constructor","prototype"]);function be(e){let t=Object.create(null),s=Object.create(null),u=Object.create(null),o=Object.create(null),r=Object.create(null),d=Object.create(null),g=new Map;for(let n of e.modules){let i=(m,M)=>{if(m){for(let x of Object.keys(m))if(re.has(x))throw new Error(`[Directive] Security: Module "${n.id}" has dangerous key "${x}" in ${M}. This could indicate a prototype pollution attempt.`)}};if(i(n.schema,"schema"),i(n.events,"events"),i(n.derive,"derive"),i(n.effects,"effects"),i(n.constraints,"constraints"),i(n.resolvers,"resolvers"),process.env.NODE_ENV!=="production")for(let m of Object.keys(n.schema)){let M=g.get(m);if(M)throw new Error(`[Directive] Schema collision: Fact "${m}" is defined in both module "${M}" and "${n.id}". Use namespacing (e.g., "${n.id}::${m}") or merge into one module.`);g.set(m,n.id);}Object.assign(t,n.schema),n.events&&Object.assign(s,n.events),n.derive&&Object.assign(u,n.derive),n.effects&&Object.assign(o,n.effects),n.constraints&&Object.assign(r,n.constraints),n.resolvers&&Object.assign(d,n.resolvers);}let l=null;if(e.modules.some(n=>n.snapshotEvents)){l=new Set;for(let n of e.modules){let i=n;if(i.snapshotEvents)for(let m of i.snapshotEvents)l.add(m);else if(i.events)for(let m of Object.keys(i.events))l.add(m);}}let a=0,p=false;if(process.env.NODE_ENV!=="production"){let n=new Set(Object.keys(u));for(let i of Object.keys(t))n.has(i)&&console.warn(`[Directive] "${i}" exists as both a fact and a derivation. This may cause unexpected dependency tracking behavior.`);}let k=xe();for(let n of e.plugins??[])k.register(n);let T=De({config:e.errorBoundary,onError:n=>k.emitError(n),onRecovery:(n,i)=>k.emitErrorRecovery(n,i)}),j=()=>{},W=()=>{},V=null,{store:D,facts:C}=we({schema:t,onChange:(n,i,m)=>{k.emitFactSet(n,i,m),j(n),!V?.isRestoring&&(a===0&&(p=true),v.changedKeys.add(n),_());},onBatch:n=>{k.emitFactsBatch(n);let i=[];for(let m of n)i.push(m.key);if(W(i),!V?.isRestoring){a===0&&(p=true);for(let m of n)v.changedKeys.add(m.key);_();}}}),N=Re({definitions:u,facts:C,store:D,onCompute:(n,i,m)=>k.emitDerivationCompute(n,i,m),onInvalidate:n=>k.emitDerivationInvalidate(n),onError:(n,i)=>{T.handleError("derivation",n,i);}});j=n=>N.invalidate(n),W=n=>N.invalidateMany(n);let F=Me({definitions:o,facts:C,store:D,onRun:n=>k.emitEffectRun(n),onError:(n,i)=>{T.handleError("effect",n,i),k.emitEffectError(n,i);}}),f=ke({definitions:r,facts:C,onEvaluate:(n,i)=>k.emitConstraintEvaluate(n,i),onError:(n,i)=>{T.handleError("constraint",n,i),k.emitConstraintError(n,i);}}),S=Ee({definitions:d,facts:C,store:D,onStart:(n,i)=>k.emitResolverStart(n,i),onComplete:(n,i,m)=>{k.emitResolverComplete(n,i,m),k.emitRequirementMet(i,n),f.markResolved(i.fromConstraint);},onError:(n,i,m)=>{T.handleError("resolver",n,m,i),k.emitResolverError(n,i,m);},onRetry:(n,i,m)=>k.emitResolverRetry(n,i,m),onCancel:(n,i)=>{k.emitResolverCancel(n,i),k.emitRequirementCanceled(i);},onResolutionComplete:()=>{h(),_();}}),R=new Set;function b(){for(let n of R)n();}let E=e.debug?.timeTravel?Te({config:e.debug,facts:C,store:D,onSnapshot:n=>{k.emitSnapshot(n),b();},onTimeTravel:(n,i)=>{k.emitTimeTravel(n,i),b();}}):Ce();V=E;let $=new Set;function h(){for(let n of $)n();}let y=50,w=0,v={isRunning:false,isReconciling:false,reconcileScheduled:false,isInitializing:false,isInitialized:false,isReady:false,isDestroyed:false,changedKeys:new Set,previousRequirements:new ue,readyPromise:null,readyResolve:null};function _(){!v.isRunning||v.reconcileScheduled||v.isInitializing||(v.reconcileScheduled=true,h(),queueMicrotask(()=>{v.reconcileScheduled=false,v.isRunning&&!v.isInitializing&&U().catch(n=>{process.env.NODE_ENV!=="production"&&console.error("[Directive] Unexpected error in reconcile:",n);});}));}async function U(){if(!v.isReconciling){if(w++,w>y){process.env.NODE_ENV!=="production"&&console.warn(`[Directive] Reconcile loop exceeded ${y} iterations. This usually means resolvers are creating circular requirement chains. Check that resolvers aren't mutating facts that re-trigger their own constraints.`),w=0;return}v.isReconciling=true,h();try{v.changedKeys.size>0&&((l===null||p)&&E.takeSnapshot(`facts-changed:${[...v.changedKeys].join(",")}`),p=!1);let n=C.$snapshot();k.emitReconcileStart(n),await F.runEffects(v.changedKeys);let i=new Set(v.changedKeys);v.changedKeys.clear();let m=await f.evaluate(i),M=new ue;for(let A of m)M.add(A),k.emitRequirementCreated(A);let{added:x,removed:P}=M.diff(v.previousRequirements);for(let A of P)S.cancel(A.id);for(let A of x)S.resolve(A);v.previousRequirements=M;let K=S.getInflightInfo(),L={unmet:m.filter(A=>!S.isResolving(A.id)),inflight:K,completed:[],canceled:P.map(A=>({id:A.id,resolverId:K.find(J=>J.id===A.id)?.resolverId??"unknown"}))};k.emitReconcileEnd(L),v.isReady||(v.isReady=!0,v.readyResolve&&(v.readyResolve(),v.readyResolve=null));}finally{v.isReconciling=false,v.changedKeys.size>0?_():v.reconcileScheduled||(w=0),h();}}}let z=new Proxy({},{get(n,i){if(typeof i!="symbol"&&!re.has(i))return N.get(i)},has(n,i){return typeof i=="symbol"||re.has(i)?false:i in u},ownKeys(){return Object.keys(u)},getOwnPropertyDescriptor(n,i){if(typeof i!="symbol"&&!re.has(i)&&i in u)return {configurable:true,enumerable:true}}}),q=new Proxy({},{get(n,i){if(typeof i!="symbol"&&!re.has(i))return m=>{let M=s[i];if(M){a++,(l===null||l.has(i))&&(p=true);try{D.batch(()=>{M(C,{type:i,...m});});}finally{a--;}}else process.env.NODE_ENV!=="production"&&console.warn(`[Directive] Unknown event type "${i}". No handler is registered for this event. Available events: ${Object.keys(s).join(", ")||"(none)"}`);}},has(n,i){return typeof i=="symbol"||re.has(i)?false:i in s},ownKeys(){return Object.keys(s)},getOwnPropertyDescriptor(n,i){if(typeof i!="symbol"&&!re.has(i)&&i in s)return {configurable:true,enumerable:true}}}),O={facts:C,debug:E.isEnabled?E:null,derive:z,events:q,constraints:{disable:n=>f.disable(n),enable:n=>f.enable(n)},effects:{disable:n=>F.disable(n),enable:n=>F.enable(n),isEnabled:n=>F.isEnabled(n)},start(){if(!v.isRunning){v.isRunning=true,v.isInitializing=true;for(let n of e.modules)n.init&&D.batch(()=>{n.init(C);}),n.hooks?.onStart?.(O);e.onAfterModuleInit&&D.batch(()=>{e.onAfterModuleInit();}),v.isInitializing=false,v.isInitialized=true,k.emitStart(O),_();}},stop(){if(v.isRunning){v.isRunning=false,S.cancelAll(),F.cleanupAll();for(let n of e.modules)n.hooks?.onStop?.(O);k.emitStop(O);}},destroy(){this.stop(),v.isDestroyed=true,$.clear(),R.clear(),k.emitDestroy(O);},dispatch(n){if(re.has(n.type))return;let i=s[n.type];if(i){a++,(l===null||l.has(n.type))&&(p=true);try{D.batch(()=>{i(C,n);});}finally{a--;}}else process.env.NODE_ENV!=="production"&&console.warn(`[Directive] Unknown event type "${n.type}". No handler is registered for this event. Available events: ${Object.keys(s).join(", ")||"(none)"}`);},read(n){return N.get(n)},subscribe(n,i){let m=[],M=[];for(let P of n)P in u?m.push(P):P in t?M.push(P):process.env.NODE_ENV!=="production"&&console.warn(`[Directive] subscribe: unknown key "${P}"`);let x=[];return m.length>0&&x.push(N.subscribe(m,i)),M.length>0&&x.push(D.subscribe(M,i)),()=>{for(let P of x)P();}},watch(n,i,m){let M=m?.equalityFn?(P,K)=>m.equalityFn(P,K):(P,K)=>Object.is(P,K);if(n in u){let P=N.get(n);return N.subscribe([n],()=>{let K=N.get(n);if(!M(K,P)){let L=P;P=K,i(K,L);}})}process.env.NODE_ENV!=="production"&&(n in t||console.warn(`[Directive] watch: unknown key "${n}"`));let x=D.get(n);return D.subscribe([n],()=>{let P=D.get(n);if(!M(P,x)){let K=x;x=P,i(P,K);}})},when(n,i){return new Promise((m,M)=>{let x=D.toObject();if(n(x)){m();return}let P,K,L=()=>{P?.(),K!==void 0&&clearTimeout(K);};P=D.subscribeAll(()=>{let A=D.toObject();n(A)&&(L(),m());}),i?.timeout!==void 0&&i.timeout>0&&(K=setTimeout(()=>{L(),M(new Error(`[Directive] when: timed out after ${i.timeout}ms`));},i.timeout));})},inspect(){return {unmet:v.previousRequirements.all(),inflight:S.getInflightInfo(),constraints:f.getAllStates().map(n=>({id:n.id,active:n.lastResult??false,priority:n.priority})),resolvers:Object.fromEntries(S.getInflight().map(n=>[n,S.getStatus(n)]))}},explain(n){let m=v.previousRequirements.all().find(X=>X.id===n);if(!m)return null;let M=f.getState(m.fromConstraint),x=S.getStatus(n),P={},K=D.toObject();for(let[X,G]of Object.entries(K))P[X]=G;let L=[`Requirement "${m.requirement.type}" (id: ${m.id})`,`\u251C\u2500 Produced by constraint: ${m.fromConstraint}`,`\u251C\u2500 Constraint priority: ${M?.priority??0}`,`\u251C\u2500 Constraint active: ${M?.lastResult??"unknown"}`,`\u251C\u2500 Resolver status: ${x.state}`],A=Object.entries(m.requirement).filter(([X])=>X!=="type").map(([X,G])=>`${X}=${JSON.stringify(G)}`).join(", ");A&&L.push(`\u251C\u2500 Requirement payload: { ${A} }`);let J=Object.entries(P).slice(0,10);return J.length>0&&(L.push("\u2514\u2500 Relevant facts:"),J.forEach(([X,G],Z)=>{let Y=Z===J.length-1?" \u2514\u2500":" \u251C\u2500",H=typeof G=="object"?JSON.stringify(G):String(G);L.push(`${Y} ${X} = ${H.slice(0,50)}${H.length>50?"...":""}`);})),L.join(`
2
+ `)},async settle(n=5e3){let i=Date.now();for(;;){await new Promise(x=>setTimeout(x,0));let m=this.inspect();if(m.inflight.length===0&&!v.isReconciling&&!v.reconcileScheduled)return;if(Date.now()-i>n){let x=[];m.inflight.length>0&&x.push(`${m.inflight.length} resolvers inflight: ${m.inflight.map(K=>K.resolverId).join(", ")}`),v.isReconciling&&x.push("reconciliation in progress"),v.reconcileScheduled&&x.push("reconcile scheduled");let P=v.previousRequirements.all();throw P.length>0&&x.push(`${P.length} unmet requirements: ${P.map(K=>K.requirement.type).join(", ")}`),new Error(`[Directive] settle() timed out after ${n}ms. ${x.join("; ")}`)}await new Promise(x=>setTimeout(x,10));}},getSnapshot(){return {facts:D.toObject(),version:1}},getDistributableSnapshot(n={}){let{includeDerivations:i,excludeDerivations:m,includeFacts:M,ttlSeconds:x,metadata:P,includeVersion:K}=n,L={},A=Object.keys(u),J;if(i){if(J=i.filter(Z=>A.includes(Z)),process.env.NODE_ENV!=="production"){let Z=i.filter(Y=>!A.includes(Y));Z.length>0&&console.warn(`[Directive] getDistributableSnapshot: Unknown derivation keys ignored: ${Z.join(", ")}. Available: ${A.join(", ")||"(none)"}`);}}else J=A;if(m){let Z=new Set(m);J=J.filter(Y=>!Z.has(Y));}for(let Z of J)try{L[Z]=N.get(Z);}catch(Y){process.env.NODE_ENV!=="production"&&console.warn(`[Directive] getDistributableSnapshot: Skipping derivation "${Z}" due to error:`,Y);}if(M&&M.length>0){let Z=D.toObject(),Y=Object.keys(Z);if(process.env.NODE_ENV!=="production"){let H=M.filter(Q=>!(Q in Z));H.length>0&&console.warn(`[Directive] getDistributableSnapshot: Unknown fact keys ignored: ${H.join(", ")}. Available: ${Y.join(", ")||"(none)"}`);}for(let H of M)H in Z&&(L[H]=Z[H]);}let X=Date.now(),G={data:L,createdAt:X};return x!==void 0&&x>0&&(G.expiresAt=X+x*1e3),K&&(G.version=We(L)),P&&(G.metadata=P),G},watchDistributableSnapshot(n,i){let{includeDerivations:m,excludeDerivations:M}=n,x=Object.keys(u),P;if(m?P=m.filter(A=>x.includes(A)):P=x,M){let A=new Set(M);P=P.filter(J=>!A.has(J));}if(P.length===0)return process.env.NODE_ENV!=="production"&&console.warn("[Directive] watchDistributableSnapshot: No derivations to watch. Callback will never be called."),()=>{};let L=this.getDistributableSnapshot({...n,includeVersion:true}).version;return N.subscribe(P,()=>{let A=this.getDistributableSnapshot({...n,includeVersion:true});A.version!==L&&(L=A.version,i(A));})},restore(n){if(!n||typeof n!="object")throw new Error("[Directive] restore() requires a valid snapshot object");if(!n.facts||typeof n.facts!="object")throw new Error("[Directive] restore() snapshot must have a facts object");if(!ce(n))throw new Error("[Directive] restore() rejected: snapshot contains potentially dangerous keys (__proto__, constructor, or prototype). This may indicate a prototype pollution attack.");D.batch(()=>{for(let[i,m]of Object.entries(n.facts))re.has(i)||D.set(i,m);});},onSettledChange(n){return $.add(n),()=>{$.delete(n);}},onTimeTravelChange(n){return R.add(n),()=>{R.delete(n);}},batch(n){D.batch(n);},get isSettled(){return this.inspect().inflight.length===0&&!v.isReconciling&&!v.reconcileScheduled},get isRunning(){return v.isRunning},get isInitialized(){return v.isInitialized},get isReady(){return v.isReady},whenReady(){return v.isReady?Promise.resolve():v.isRunning?(v.readyPromise||(v.readyPromise=new Promise(n=>{v.readyResolve=n;})),v.readyPromise):Promise.reject(new Error("[Directive] whenReady() called before start(). Call system.start() first, then await system.whenReady()."))}};function I(n){if(v.isReconciling)throw new Error(`[Directive] Cannot register module "${n.id}" during reconciliation. Wait for the current reconciliation cycle to complete.`);if(v.isDestroyed)throw new Error(`[Directive] Cannot register module "${n.id}" on a destroyed system.`);let i=(m,M)=>{if(m){for(let x of Object.keys(m))if(re.has(x))throw new Error(`[Directive] Security: Module "${n.id}" has dangerous key "${x}" in ${M}.`)}};i(n.schema,"schema"),i(n.events,"events"),i(n.derive,"derive"),i(n.effects,"effects"),i(n.constraints,"constraints"),i(n.resolvers,"resolvers");for(let m of Object.keys(n.schema))if(m in t)throw new Error(`[Directive] Schema collision: Fact "${m}" already exists. Cannot register module "${n.id}".`);if(process.env.NODE_ENV!=="production"&&n.derive){let m=new Set(Object.keys(t));for(let M of Object.keys(n.derive))m.has(M)&&console.warn(`[Directive] "${M}" exists as both a fact and a derivation after registering module "${n.id}".`);}if(n.snapshotEvents){l===null&&(l=new Set(Object.keys(s)));for(let m of n.snapshotEvents)l.add(m);}else if(l!==null&&n.events)for(let m of Object.keys(n.events))l.add(m);Object.assign(t,n.schema),n.events&&Object.assign(s,n.events),n.derive&&(Object.assign(u,n.derive),N.registerDefinitions(n.derive)),n.effects&&(Object.assign(o,n.effects),F.registerDefinitions(n.effects)),n.constraints&&(Object.assign(r,n.constraints),f.registerDefinitions(n.constraints)),n.resolvers&&(Object.assign(d,n.resolvers),S.registerDefinitions(n.resolvers)),D.registerKeys(n.schema),e.modules.push(n),n.init&&D.batch(()=>{n.init(C);}),n.hooks?.onInit?.(O),v.isRunning&&(n.hooks?.onStart?.(O),_());}O.registerModule=I,k.emitInit(O);for(let n of e.modules)n.hooks?.onInit?.(O);return O}var te=Object.freeze(new Set(["__proto__","constructor","prototype"])),B="::";function Rt(e){let t=Object.keys(e),s=new Set,u=new Set,o=[],r=[];function d(g){if(s.has(g))return;if(u.has(g)){let c=r.indexOf(g),a=[...r.slice(c),g].join(" \u2192 ");throw new Error(`[Directive] Circular dependency detected: ${a}. Modules cannot have circular crossModuleDeps. Break the cycle by removing one of the cross-module references.`)}u.add(g),r.push(g);let l=e[g];if(l?.crossModuleDeps)for(let c of Object.keys(l.crossModuleDeps))t.includes(c)&&d(c);r.pop(),u.delete(g),s.add(g),o.push(g);}for(let g of t)d(g);return o}var Ge=new WeakMap,Ye=new WeakMap,Qe=new WeakMap,et=new WeakMap;function me(e){if("module"in e){if(!e.module)throw new Error("[Directive] createSystem requires a module. Got: "+typeof e.module);return Et(e)}let t=e;if(Array.isArray(t.modules))throw new Error(`[Directive] createSystem expects modules as an object, not an array.
3
3
 
4
4
  Instead of:
5
5
  createSystem({ modules: [authModule, dataModule] })
@@ -8,28 +8,28 @@ Use:
8
8
  createSystem({ modules: { auth: authModule, data: dataModule } })
9
9
 
10
10
  Or for a single module:
11
- createSystem({ module: counterModule })`);return Dt(t)}function Dt(e){let t=e.modules,o=new Set(Object.keys(t));if(e.tickMs!==void 0&&e.tickMs<=0)throw new Error("[Directive] tickMs must be a positive number");if(process.env.NODE_ENV!=="production"){for(let[f,b]of Object.entries(t))if(b.crossModuleDeps)for(let k of Object.keys(b.crossModuleDeps))k===f?console.warn(`[Directive] Module "${f}" references itself in crossModuleDeps. Use "facts.self" to access own module's facts instead.`):o.has(k)||console.warn(`[Directive] Module "${f}" declares crossModuleDeps.${k}, but no module with namespace "${k}" exists in the system. Available modules: ${[...o].join(", ")}`);}let c,i=e.initOrder??"auto";if(Array.isArray(i)){let f=i,b=Object.keys(t).filter(k=>!f.includes(k));if(b.length>0)throw new Error(`[Directive] initOrder is missing modules: ${b.join(", ")}. All modules must be included in the explicit order.`);c=f;}else i==="declaration"?c=Object.keys(t):c=Mt(t);let n=e.debug,u=e.errorBoundary;e.zeroConfig&&(n={timeTravel:process.env.NODE_ENV!=="production",maxSnapshots:100,...e.debug},u={onConstraintError:"skip",onResolverError:"skip",onEffectError:"skip",onDerivationError:"skip",...e.errorBoundary});for(let f of Object.keys(t)){if(f.includes(N))throw new Error(`[Directive] Module name "${f}" contains the reserved separator "${N}". Module names cannot contain "${N}".`);let b=t[f];if(b){for(let k of Object.keys(b.schema.facts))if(k.includes(N))throw new Error(`[Directive] Schema key "${k}" in module "${f}" contains the reserved separator "${N}". Schema keys cannot contain "${N}".`)}}let d=[];for(let f of c){let b=t[f];if(!b)continue;let k=b.crossModuleDeps&&Object.keys(b.crossModuleDeps).length>0,O=k?Object.keys(b.crossModuleDeps):[],M={};for(let[r,y]of Object.entries(b.schema.facts))M[`${f}${N}${r}`]=y;let I={};if(b.schema.derivations)for(let[r,y]of Object.entries(b.schema.derivations))I[`${f}${N}${r}`]=y;let R={};if(b.schema.events)for(let[r,y]of Object.entries(b.schema.events))R[`${f}${N}${r}`]=y;let v=b.init?r=>{let y=Q(r,f);b.init(y);}:void 0,g={};if(b.derive)for(let[r,y]of Object.entries(b.derive))g[`${f}${N}${r}`]=(S,x)=>{let l=k?re(S,f,O):Q(S,f),h=$e(x,f);return y(l,h)};let D={};if(b.events)for(let[r,y]of Object.entries(b.events))D[`${f}${N}${r}`]=(S,x)=>{let l=Q(S,f);y(l,x);};let j={};if(b.constraints)for(let[r,y]of Object.entries(b.constraints)){let S=y;j[`${f}${N}${r}`]={...S,deps:S.deps?.map(x=>`${f}${N}${x}`),when:x=>{let l=k?re(x,f,O):Q(x,f);return S.when(l)},require:typeof S.require=="function"?x=>{let l=k?re(x,f,O):Q(x,f);return S.require(l)}:S.require};}let F={};if(b.resolvers)for(let[r,y]of Object.entries(b.resolvers)){let S=y;F[`${f}${N}${r}`]={...S,resolve:async(x,l)=>{let h=qe(l.facts,t,()=>Object.keys(t));await S.resolve(x,{facts:h[f],signal:l.signal});}};}let V={};if(b.effects)for(let[r,y]of Object.entries(b.effects)){let S=y;V[`${f}${N}${r}`]={...S,run:(x,l)=>{let h=k?re(x,f,O):Q(x,f),w=l?k?re(l,f,O):Q(l,f):void 0;return S.run(h,w)},deps:S.deps?.map(x=>`${f}${N}${x}`)};}d.push({id:b.id,schema:{facts:M,derivations:I,events:R,requirements:b.schema.requirements??{}},init:v,derive:g,events:D,effects:V,constraints:j,resolvers:F,hooks:b.hooks});}process.env.NODE_ENV!=="production"&&e.tickMs&&e.tickMs>0&&(d.some(b=>b.events&&Object.keys(b.events).some(k=>k.endsWith(`${N}tick`)))||console.warn(`[Directive] tickMs is set to ${e.tickMs}ms but no module defines a "tick" event handler.`));let a=null,s=null;function m(f){for(let[b,k]of Object.entries(f)){if(G.has(b)){process.env.NODE_ENV!=="production"&&console.warn(`[Directive] initialFacts/hydrate contains blocked namespace "${b}". Skipping.`);continue}if(!o.has(b)){process.env.NODE_ENV!=="production"&&console.warn(`[Directive] initialFacts/hydrate contains unknown namespace "${b}". Available modules: ${[...o].join(", ")}`);continue}if(k&&typeof k=="object"&&!ae(k))throw new Error(`[Directive] initialFacts/hydrate for namespace "${b}" contains potentially dangerous keys (__proto__, constructor, or prototype). This may indicate a prototype pollution attack.`);for(let[O,M]of Object.entries(k))G.has(O)||(s.facts[`${b}${N}${O}`]=M);}}s=be({modules:d.map(f=>({id:f.id,schema:f.schema.facts,requirements:f.schema.requirements,init:f.init,derive:f.derive,events:f.events,effects:f.effects,constraints:f.constraints,resolvers:f.resolvers,hooks:f.hooks})),plugins:e.plugins,debug:n,errorBoundary:u,tickMs:e.tickMs,onAfterModuleInit:()=>{e.initialFacts&&m(e.initialFacts),a&&(m(a),a=null);}});let p=new Map;for(let f of Object.keys(t)){let b=t[f];if(!b)continue;let k=[];for(let O of Object.keys(b.schema.facts))k.push(`${f}${N}${O}`);if(b.schema.derivations)for(let O of Object.keys(b.schema.derivations))k.push(`${f}${N}${O}`);p.set(f,k);}let q={names:null};function T(){return q.names===null&&(q.names=Object.keys(t)),q.names}let A=qe(s.facts,t,T),B=xt(s.derive,t,T),K=Tt(s,t,T),C=null,P=e.tickMs;return {_mode:"namespaced",facts:A,debug:s.debug,derive:B,events:K,constraints:s.constraints,effects:s.effects,get isRunning(){return s.isRunning},get isSettled(){return s.isSettled},get isInitialized(){return s.isInitialized},get isReady(){return s.isReady},whenReady:s.whenReady.bind(s),async hydrate(f){if(s.isRunning)throw new Error("[Directive] hydrate() must be called before start(). The system is already running.");let b=await f();b&&typeof b=="object"&&(a=b);},start(){if(s.start(),P&&P>0){let f=Object.keys(d[0]?.events??{}).find(b=>b.endsWith(`${N}tick`));f&&(C=setInterval(()=>{s.dispatch({type:f});},P));}},stop(){C&&(clearInterval(C),C=null),s.stop();},destroy(){this.stop(),s.destroy();},dispatch(f){s.dispatch(f);},batch:s.batch.bind(s),read(f){return s.read(se(f))},subscribe(f,b){let k=[];for(let O of f)if(O.endsWith(".*")){let M=O.slice(0,-2),I=p.get(M);I?k.push(...I):process.env.NODE_ENV!=="production"&&console.warn(`[Directive] subscribe wildcard "${O}" \u2014 namespace "${M}" not found.`);}else k.push(se(O));return s.subscribe(k,b)},subscribeModule(f,b){let k=p.get(f);return !k||k.length===0?(process.env.NODE_ENV!=="production"&&console.warn(`[Directive] subscribeModule("${f}") \u2014 namespace not found. Available: ${[...p.keys()].join(", ")}`),()=>{}):s.subscribe(k,b)},watch(f,b,k){return s.watch(se(f),b,k)},when(f,b){return s.when(()=>f(A),b)},onSettledChange:s.onSettledChange.bind(s),onTimeTravelChange:s.onTimeTravelChange.bind(s),inspect:s.inspect.bind(s),settle:s.settle.bind(s),explain:s.explain.bind(s),getSnapshot:s.getSnapshot.bind(s),restore:s.restore.bind(s),getDistributableSnapshot(f){let b={...f,includeDerivations:f?.includeDerivations?.map(se),excludeDerivations:f?.excludeDerivations?.map(se),includeFacts:f?.includeFacts?.map(se)},k=s.getDistributableSnapshot(b),O={};for(let[M,I]of Object.entries(k.data)){let R=M.indexOf(N);if(R>0){let v=M.slice(0,R),g=M.slice(R+N.length);O[v]||(O[v]={}),O[v][g]=I;}else O._root||(O._root={}),O._root[M]=I;}return {...k,data:O}},watchDistributableSnapshot(f,b){let k={...f,includeDerivations:f?.includeDerivations?.map(se),excludeDerivations:f?.excludeDerivations?.map(se),includeFacts:f?.includeFacts?.map(se)};return s.watchDistributableSnapshot(k,O=>{let M={};for(let[I,R]of Object.entries(O.data)){let v=I.indexOf(N);if(v>0){let g=I.slice(0,v),D=I.slice(v+N.length);M[g]||(M[g]={}),M[g][D]=R;}else M._root||(M._root={}),M._root[I]=R;}b({...O,data:M});})},registerModule(f,b){if(o.has(f))throw new Error(`[Directive] Module namespace "${f}" already exists. Cannot register a duplicate namespace.`);if(f.includes(N))throw new Error(`[Directive] Module name "${f}" contains the reserved separator "${N}".`);if(G.has(f))throw new Error(`[Directive] Module name "${f}" is a blocked property.`);for(let r of Object.keys(b.schema.facts))if(r.includes(N))throw new Error(`[Directive] Schema key "${r}" in module "${f}" contains the reserved separator "${N}".`);let k=b,O=k.crossModuleDeps&&Object.keys(k.crossModuleDeps).length>0,M=O?Object.keys(k.crossModuleDeps):[],I={};for(let[r,y]of Object.entries(k.schema.facts))I[`${f}${N}${r}`]=y;let R=k.init?r=>{let y=Q(r,f);k.init(y);}:void 0,v={};if(k.derive)for(let[r,y]of Object.entries(k.derive))v[`${f}${N}${r}`]=(S,x)=>{let l=O?re(S,f,M):Q(S,f),h=$e(x,f);return y(l,h)};let g={};if(k.events)for(let[r,y]of Object.entries(k.events))g[`${f}${N}${r}`]=(S,x)=>{let l=Q(S,f);y(l,x);};let D={};if(k.constraints)for(let[r,y]of Object.entries(k.constraints)){let S=y;D[`${f}${N}${r}`]={...S,deps:S.deps?.map(x=>`${f}${N}${x}`),when:x=>{let l=O?re(x,f,M):Q(x,f);return S.when(l)},require:typeof S.require=="function"?x=>{let l=O?re(x,f,M):Q(x,f);return S.require(l)}:S.require};}let j={};if(k.resolvers)for(let[r,y]of Object.entries(k.resolvers)){let S=y;j[`${f}${N}${r}`]={...S,resolve:async(x,l)=>{let h=qe(l.facts,t,T);await S.resolve(x,{facts:h[f],signal:l.signal});}};}let F={};if(k.effects)for(let[r,y]of Object.entries(k.effects)){let S=y;F[`${f}${N}${r}`]={...S,run:(x,l)=>{let h=O?re(x,f,M):Q(x,f),w=l?O?re(l,f,M):Q(l,f):void 0;return S.run(h,w)},deps:S.deps?.map(x=>`${f}${N}${x}`)};}o.add(f),t[f]=k,q.names=null;let V=[];for(let r of Object.keys(k.schema.facts))V.push(`${f}${N}${r}`);if(k.schema.derivations)for(let r of Object.keys(k.schema.derivations))V.push(`${f}${N}${r}`);p.set(f,V),s.registerModule({id:k.id,schema:I,requirements:k.schema.requirements??{},init:R,derive:Object.keys(v).length>0?v:void 0,events:Object.keys(g).length>0?g:void 0,effects:Object.keys(F).length>0?F:void 0,constraints:Object.keys(D).length>0?D:void 0,resolvers:Object.keys(j).length>0?j:void 0,hooks:k.hooks});}}}function se(e){if(e.includes(".")){let[t,...o]=e.split(".");return `${t}${N}${o.join(N)}`}return e}function Q(e,t){let o=Ye.get(e);if(o){let i=o.get(t);if(i)return i}else o=new Map,Ye.set(e,o);let c=new Proxy({},{get(i,n){if(typeof n!="symbol"&&!G.has(n))return n==="$store"||n==="$snapshot"?e[n]:e[`${t}${N}${n}`]},set(i,n,u){return typeof n=="symbol"||G.has(n)?false:(e[`${t}${N}${n}`]=u,true)},has(i,n){return typeof n=="symbol"||G.has(n)?false:`${t}${N}${n}`in e},deleteProperty(i,n){return typeof n=="symbol"||G.has(n)?false:(delete e[`${t}${N}${n}`],true)}});return o.set(t,c),c}function qe(e,t,o){let c=Qe.get(e);if(c)return c;let i=new Proxy({},{get(n,u){if(typeof u!="symbol"&&!G.has(u)&&Object.hasOwn(t,u))return Q(e,u)},has(n,u){return typeof u=="symbol"||G.has(u)?false:Object.hasOwn(t,u)},ownKeys(){return o()},getOwnPropertyDescriptor(n,u){if(typeof u!="symbol"&&Object.hasOwn(t,u))return {configurable:true,enumerable:true}}});return Qe.set(e,i),i}var nt=new WeakMap;function re(e,t,o){let c=`${t}:${JSON.stringify([...o].sort())}`,i=nt.get(e);if(i){let a=i.get(c);if(a)return a}else i=new Map,nt.set(e,i);let n=new Set(o),u=["self",...o],d=new Proxy({},{get(a,s){if(typeof s!="symbol"&&!G.has(s)){if(s==="self")return Q(e,t);if(n.has(s))return Q(e,s);process.env.NODE_ENV!=="production"&&typeof s=="string"&&console.warn(`[Directive] Module "${t}" accessed undeclared cross-module property "${s}". Add it to crossModuleDeps or use "facts.self.${s}" for own module facts.`);}},has(a,s){return typeof s=="symbol"||G.has(s)?false:s==="self"||n.has(s)},ownKeys(){return u},getOwnPropertyDescriptor(a,s){if(typeof s!="symbol"&&(s==="self"||n.has(s)))return {configurable:true,enumerable:true}}});return i.set(c,d),d}function $e(e,t){let o=tt.get(e);if(o){let i=o.get(t);if(i)return i}else o=new Map,tt.set(e,o);let c=new Proxy({},{get(i,n){if(typeof n!="symbol"&&!G.has(n))return e[`${t}${N}${n}`]},has(i,n){return typeof n=="symbol"||G.has(n)?false:`${t}${N}${n}`in e}});return o.set(t,c),c}function xt(e,t,o){let c=et.get(e);if(c)return c;let i=new Proxy({},{get(n,u){if(typeof u!="symbol"&&!G.has(u)&&Object.hasOwn(t,u))return $e(e,u)},has(n,u){return typeof u=="symbol"||G.has(u)?false:Object.hasOwn(t,u)},ownKeys(){return o()},getOwnPropertyDescriptor(n,u){if(typeof u!="symbol"&&Object.hasOwn(t,u))return {configurable:true,enumerable:true}}});return et.set(e,i),i}var rt=new WeakMap;function Tt(e,t,o){let c=rt.get(e);return c||(c=new Map,rt.set(e,c)),new Proxy({},{get(i,n){if(typeof n=="symbol"||G.has(n)||!Object.hasOwn(t,n))return;let u=c.get(n);if(u)return u;let d=new Proxy({},{get(a,s){if(typeof s!="symbol"&&!G.has(s))return m=>{e.dispatch({type:`${n}${N}${s}`,...m});}}});return c.set(n,d),d},has(i,n){return typeof n=="symbol"||G.has(n)?false:Object.hasOwn(t,n)},ownKeys(){return o()},getOwnPropertyDescriptor(i,n){if(typeof n!="symbol"&&Object.hasOwn(t,n))return {configurable:true,enumerable:true}}})}function Et(e){let t=e.module;if(!t)throw new Error("[Directive] createSystem requires a module. Got: "+typeof t);if(e.tickMs!==void 0&&e.tickMs<=0)throw new Error("[Directive] tickMs must be a positive number");if(e.initialFacts&&!ae(e.initialFacts))throw new Error("[Directive] initialFacts contains potentially dangerous keys (__proto__, constructor, or prototype). This may indicate a prototype pollution attack.");process.env.NODE_ENV!=="production"&&(t.crossModuleDeps&&Object.keys(t.crossModuleDeps).length>0&&console.warn("[Directive] Single module mode ignores crossModuleDeps. Use multiple modules if cross-module access is needed: createSystem({ modules: { ... } })"),e.tickMs&&e.tickMs>0&&(t.events&&"tick"in t.events||console.warn(`[Directive] tickMs is set to ${e.tickMs}ms but module has no "tick" event handler.`)));let o=e.debug,c=e.errorBoundary;e.zeroConfig&&(o={timeTravel:process.env.NODE_ENV!=="production",maxSnapshots:100,...e.debug},c={onConstraintError:"skip",onResolverError:"skip",onEffectError:"skip",onDerivationError:"skip",...e.errorBoundary});let i=null,n=null;n=be({modules:[{id:t.id,schema:t.schema.facts,requirements:t.schema.requirements,init:t.init,derive:t.derive,events:t.events,effects:t.effects,constraints:t.constraints,resolvers:t.resolvers,hooks:t.hooks}],plugins:e.plugins,debug:o,errorBoundary:c,tickMs:e.tickMs,onAfterModuleInit:()=>{if(e.initialFacts)for(let[m,p]of Object.entries(e.initialFacts))G.has(m)||(n.facts[m]=p);if(i){for(let[m,p]of Object.entries(i))G.has(m)||(n.facts[m]=p);i=null;}}});let u=new Proxy({},{get(m,p){if(typeof p!="symbol"&&!G.has(p))return q=>{n.dispatch({type:p,...q});}}}),d=null,a=e.tickMs;return {_mode:"single",facts:n.facts,debug:n.debug,derive:n.derive,events:u,constraints:n.constraints,effects:n.effects,get isRunning(){return n.isRunning},get isSettled(){return n.isSettled},get isInitialized(){return n.isInitialized},get isReady(){return n.isReady},whenReady:n.whenReady.bind(n),async hydrate(m){if(n.isRunning)throw new Error("[Directive] hydrate() must be called before start(). The system is already running.");let p=await m();p&&typeof p=="object"&&(i=p);},start(){n.start(),a&&a>0&&t.events&&"tick"in t.events&&(d=setInterval(()=>{n.dispatch({type:"tick"});},a));},stop(){d&&(clearInterval(d),d=null),n.stop();},destroy(){this.stop(),n.destroy();},dispatch(m){n.dispatch(m);},batch:n.batch.bind(n),read(m){return n.read(m)},subscribe(m,p){return n.subscribe(m,p)},watch(m,p,q){return n.watch(m,p,q)},when(m,p){return n.when(m,p)},onSettledChange:n.onSettledChange.bind(n),onTimeTravelChange:n.onTimeTravelChange.bind(n),inspect:n.inspect.bind(n),settle:n.settle.bind(n),explain:n.explain.bind(n),getSnapshot:n.getSnapshot.bind(n),restore:n.restore.bind(n),getDistributableSnapshot:n.getDistributableSnapshot.bind(n),watchDistributableSnapshot:n.watchDistributableSnapshot.bind(n),registerModule(m){n.registerModule({id:m.id,schema:m.schema.facts,requirements:m.schema.requirements,init:m.init,derive:m.derive,events:m.events,effects:m.effects,constraints:m.constraints,resolvers:m.resolvers,hooks:m.hooks});}}}function Ct(e){let t={facts:{},derivations:{},events:{},requirements:{}},o,c,i,n,u,d,a,s={schema(m){return t=m,s},init(m){return o=m,s},derive(m){return i=m,s},events(m){return c=m,s},effects(m){return n=m,s},constraints(m){return u=m,s},resolvers(m){return d=m,s},hooks(m){return a=m,s},build(){if(!t||!t.facts)throw new Error(`[Directive] Module "${e}" requires a schema with at least facts defined. Call .schema({ facts: { ... } }) before .build().`);let m=Object.keys(t.derivations??{}),p=Object.keys(i??{}),q=m.filter(K=>!p.includes(K));if(q.length>0)throw new Error(`[Directive] Module "${e}" is missing derivation implementations: ${q.join(", ")}. All derivations declared in schema.derivations must have implementations in .derive().`);let T=Object.keys(t.events??{}),A=Object.keys(c??{}),B=T.filter(K=>!A.includes(K));if(B.length>0)throw new Error(`[Directive] Module "${e}" is missing event handler implementations: ${B.join(", ")}. All events declared in schema.events must have implementations in .events().`);return {id:e,schema:t,init:o,events:c,derive:i,effects:n,constraints:u,resolvers:d,hooks:a}}};return s}function qt(){return {when(e){return {require(t){let o,c,i,n,u,d={priority(a){return o=a,d},after(...a){return c=c?[...c,...a]:[...a],d},deps(...a){return i=i?[...i,...a]:[...a],d},timeout(a){return n=a,d},async(a){return u=a,d},build(){let a={when:e,require:t};return o!==void 0&&(a.priority=o),c!==void 0&&(a.after=c),i!==void 0&&(a.deps=i),n!==void 0&&(a.timeout=n),u!==void 0&&(a.async=u),a}};return d}}}}}function ye(e){let t={...e};return t.withPriority=o=>ye({...e,priority:o}),t.withAfter=(...o)=>ye({...e,after:e.after?[...e.after,...o]:[...o]}),t.withDeps=(...o)=>ye({...e,deps:e.deps?[...e.deps,...o]:[...o]}),t.withTimeout=o=>ye({...e,timeout:o}),t.withAsync=o=>ye({...e,async:o}),t}function $t(e){return {require(t){return ye({when:e,require:t})}}}function It(){return {module(e){return Ot(e)},modules(e){return Pt(e)}}}function Ot(e){let t,o,c,i,n,u,d={plugins(a){return t=a,d},debug(a){return o=a,d},errorBoundary(a){return c=a,d},tickMs(a){return i=a,d},zeroConfig(a=true){return n=a,d},initialFacts(a){return u=a,d},build(){return me({module:e,plugins:t,debug:o,errorBoundary:c,tickMs:i,zeroConfig:n,initialFacts:u})}};return d}function Pt(e){let t,o,c,i,n,u,d,a={plugins(s){return t=s,a},debug(s){return o=s,a},errorBoundary(s){return c=s,a},tickMs(s){return i=s,a},zeroConfig(s=true){return n=s,a},initialFacts(s){return u=s,a},initOrder(s){return d=s,a},build(){return me({modules:e,plugins:t,debug:o,errorBoundary:c,tickMs:i,zeroConfig:n,initialFacts:u,initOrder:d})}};return a}function Ie(){let e={pending:new Map,inflight:new Map,failed:new Map,errors:new Map,listeners:new Set};function t(){for(let a of e.listeners)a();}function o(a,s){let m=a.get(s);return m||(m=new Set,a.set(s,m)),m}function c(a){let s=e.pending.get(a)??new Set,m=e.inflight.get(a)??new Set,p=e.failed.get(a)??new Set,q=e.errors.get(a)??null;return {pending:s.size,inflight:m.size,failed:p.size,isLoading:s.size>0||m.size>0,hasError:p.size>0,lastError:q}}function i(){let a=new Set([...e.pending.keys(),...e.inflight.keys(),...e.failed.keys()]),s=new Map;for(let m of a)s.set(m,c(m));return s}function n(a){return e.listeners.add(a),()=>e.listeners.delete(a)}function u(){e.pending.clear(),e.inflight.clear(),e.failed.clear(),e.errors.clear(),t();}return {plugin:{name:"requirement-status",onRequirementCreated(a){let s=a.requirement.type;o(e.pending,s).add(a.id),e.failed.get(s)?.delete(a.id),t();},onResolverStart(a,s){let m=s.requirement.type;e.pending.get(m)?.delete(s.id),o(e.inflight,m).add(s.id),t();},onResolverComplete(a,s){let m=s.requirement.type;e.inflight.get(m)?.delete(s.id),e.pending.get(m)?.delete(s.id),t();},onResolverError(a,s,m){let p=s.requirement.type;e.inflight.get(p)?.delete(s.id),o(e.failed,p).add(s.id),e.errors.set(p,m instanceof Error?m:new Error(String(m))),t();},onResolverCancel(a,s){let m=s.requirement.type;e.pending.get(m)?.delete(s.id),e.inflight.get(m)?.delete(s.id),t();},onRequirementMet(a){let s=a.requirement.type;e.pending.get(s)?.delete(a.id),e.inflight.get(s)?.delete(a.id),t();}},getStatus:c,getAllStatus:i,subscribe:n,reset:u}}function At(e){return t=>e.getStatus(t)}function jt(e){let t=Ie(),c=[...e.plugins??[],t.plugin];return {system:me({module:e.module,plugins:c,debug:e.debug,errorBoundary:e.errorBoundary,tickMs:e.tickMs,zeroConfig:e.zeroConfig,initialFacts:e.initialFacts}),statusPlugin:t}}function Ft(e){let t={},o={},c={};for(let[u,d]of Object.entries(e.initialState))t[u]=Oe(d);for(let u of Object.keys(e.reducers))u.includes("By")||u.includes("Set")||u.includes("With")?(o[u]={payload:"t.any()"},c[u]=`(facts, { payload }) => {
12
- // TODO: Implement ${u}
13
- }`):(o[u]={},c[u]=`(facts) => {
14
- // TODO: Implement ${u}
15
- }`);let n=`(facts) => {
16
- ${Object.entries(e.initialState).map(([u,d])=>` facts.${u} = ${JSON.stringify(d)};`).join(`
11
+ createSystem({ module: counterModule })`);return Mt(t)}function Mt(e){let t=e.modules,s=new Set(Object.keys(t)),u=e.debug?.snapshotModules?new Set(e.debug.snapshotModules):null;if(e.tickMs!==void 0&&e.tickMs<=0)throw new Error("[Directive] tickMs must be a positive number");if(process.env.NODE_ENV!=="production"){for(let[f,S]of Object.entries(t))if(S.crossModuleDeps)for(let R of Object.keys(S.crossModuleDeps))R===f?console.warn(`[Directive] Module "${f}" references itself in crossModuleDeps. Use "facts.self" to access own module's facts instead.`):s.has(R)||console.warn(`[Directive] Module "${f}" declares crossModuleDeps.${R}, but no module with namespace "${R}" exists in the system. Available modules: ${[...s].join(", ")}`);}if(process.env.NODE_ENV!=="production"&&e.debug?.snapshotModules)for(let f of e.debug.snapshotModules)s.has(f)||console.warn(`[Directive] debug.snapshotModules entry "${f}" doesn't match any module. Available modules: ${[...s].join(", ")}`);let o,r=e.initOrder??"auto";if(Array.isArray(r)){let f=r,S=Object.keys(t).filter(R=>!f.includes(R));if(S.length>0)throw new Error(`[Directive] initOrder is missing modules: ${S.join(", ")}. All modules must be included in the explicit order.`);o=f;}else r==="declaration"?o=Object.keys(t):o=Rt(t);let d=e.debug,g=e.errorBoundary;e.zeroConfig&&(d={timeTravel:process.env.NODE_ENV!=="production",maxSnapshots:100,...e.debug},g={onConstraintError:"skip",onResolverError:"skip",onEffectError:"skip",onDerivationError:"skip",...e.errorBoundary});for(let f of Object.keys(t)){if(f.includes(B))throw new Error(`[Directive] Module name "${f}" contains the reserved separator "${B}". Module names cannot contain "${B}".`);let S=t[f];if(S){for(let R of Object.keys(S.schema.facts))if(R.includes(B))throw new Error(`[Directive] Schema key "${R}" in module "${f}" contains the reserved separator "${B}". Schema keys cannot contain "${B}".`)}}let l=[];for(let f of o){let S=t[f];if(!S)continue;let R=S.crossModuleDeps&&Object.keys(S.crossModuleDeps).length>0,b=R?Object.keys(S.crossModuleDeps):[],E={};for(let[q,O]of Object.entries(S.schema.facts))E[`${f}${B}${q}`]=O;let $={};if(S.schema.derivations)for(let[q,O]of Object.entries(S.schema.derivations))$[`${f}${B}${q}`]=O;let h={};if(S.schema.events)for(let[q,O]of Object.entries(S.schema.events))h[`${f}${B}${q}`]=O;let y=S.init?q=>{let O=ne(q,f);S.init(O);}:void 0,w={};if(S.derive)for(let[q,O]of Object.entries(S.derive))w[`${f}${B}${q}`]=(I,n)=>{let i=R?se(I,f,b):ne(I,f),m=$e(n,f);return O(i,m)};let v={};if(S.events)for(let[q,O]of Object.entries(S.events))v[`${f}${B}${q}`]=(I,n)=>{let i=ne(I,f);O(i,n);};let _={};if(S.constraints)for(let[q,O]of Object.entries(S.constraints)){let I=O;_[`${f}${B}${q}`]={...I,deps:I.deps?.map(n=>`${f}${B}${n}`),when:n=>{let i=R?se(n,f,b):ne(n,f);return I.when(i)},require:typeof I.require=="function"?n=>{let i=R?se(n,f,b):ne(n,f);return I.require(i)}:I.require};}let U={};if(S.resolvers)for(let[q,O]of Object.entries(S.resolvers)){let I=O;U[`${f}${B}${q}`]={...I,resolve:async(n,i)=>{let m=qe(i.facts,t,()=>Object.keys(t));await I.resolve(n,{facts:m[f],signal:i.signal});}};}let z={};if(S.effects)for(let[q,O]of Object.entries(S.effects)){let I=O;z[`${f}${B}${q}`]={...I,run:(n,i)=>{let m=R?se(n,f,b):ne(n,f),M=i?R?se(i,f,b):ne(i,f):void 0;return I.run(m,M)},deps:I.deps?.map(n=>`${f}${B}${n}`)};}l.push({id:S.id,schema:{facts:E,derivations:$,events:h,requirements:S.schema.requirements??{}},init:y,derive:w,events:v,effects:z,constraints:_,resolvers:U,hooks:S.hooks,snapshotEvents:u&&!u.has(f)?[]:S.snapshotEvents?.map(q=>`${f}${B}${q}`)});}process.env.NODE_ENV!=="production"&&e.tickMs&&e.tickMs>0&&(l.some(S=>S.events&&Object.keys(S.events).some(R=>R.endsWith(`${B}tick`)))||console.warn(`[Directive] tickMs is set to ${e.tickMs}ms but no module defines a "tick" event handler.`));let c=null,a=null;function p(f){for(let[S,R]of Object.entries(f)){if(te.has(S)){process.env.NODE_ENV!=="production"&&console.warn(`[Directive] initialFacts/hydrate contains blocked namespace "${S}". Skipping.`);continue}if(!s.has(S)){process.env.NODE_ENV!=="production"&&console.warn(`[Directive] initialFacts/hydrate contains unknown namespace "${S}". Available modules: ${[...s].join(", ")}`);continue}if(R&&typeof R=="object"&&!ce(R))throw new Error(`[Directive] initialFacts/hydrate for namespace "${S}" contains potentially dangerous keys (__proto__, constructor, or prototype). This may indicate a prototype pollution attack.`);for(let[b,E]of Object.entries(R))te.has(b)||(a.facts[`${S}${B}${b}`]=E);}}a=be({modules:l.map(f=>({id:f.id,schema:f.schema.facts,requirements:f.schema.requirements,init:f.init,derive:f.derive,events:f.events,effects:f.effects,constraints:f.constraints,resolvers:f.resolvers,hooks:f.hooks,snapshotEvents:f.snapshotEvents})),plugins:e.plugins,debug:d,errorBoundary:g,tickMs:e.tickMs,onAfterModuleInit:()=>{e.initialFacts&&p(e.initialFacts),c&&(p(c),c=null);}});let k=new Map;for(let f of Object.keys(t)){let S=t[f];if(!S)continue;let R=[];for(let b of Object.keys(S.schema.facts))R.push(`${f}${B}${b}`);if(S.schema.derivations)for(let b of Object.keys(S.schema.derivations))R.push(`${f}${B}${b}`);k.set(f,R);}let T={names:null};function j(){return T.names===null&&(T.names=Object.keys(t)),T.names}let W=qe(a.facts,t,j),V=Dt(a.derive,t,j),D=xt(a,t,j),C=null,N=e.tickMs;return {_mode:"namespaced",facts:W,debug:a.debug,derive:V,events:D,constraints:a.constraints,effects:a.effects,get isRunning(){return a.isRunning},get isSettled(){return a.isSettled},get isInitialized(){return a.isInitialized},get isReady(){return a.isReady},whenReady:a.whenReady.bind(a),async hydrate(f){if(a.isRunning)throw new Error("[Directive] hydrate() must be called before start(). The system is already running.");let S=await f();S&&typeof S=="object"&&(c=S);},start(){if(a.start(),N&&N>0){let f=Object.keys(l[0]?.events??{}).find(S=>S.endsWith(`${B}tick`));f&&(C=setInterval(()=>{a.dispatch({type:f});},N));}},stop(){C&&(clearInterval(C),C=null),a.stop();},destroy(){this.stop(),a.destroy();},dispatch(f){a.dispatch(f);},batch:a.batch.bind(a),read(f){return a.read(oe(f))},subscribe(f,S){let R=[];for(let b of f)if(b.endsWith(".*")){let E=b.slice(0,-2),$=k.get(E);$?R.push(...$):process.env.NODE_ENV!=="production"&&console.warn(`[Directive] subscribe wildcard "${b}" \u2014 namespace "${E}" not found.`);}else R.push(oe(b));return a.subscribe(R,S)},subscribeModule(f,S){let R=k.get(f);return !R||R.length===0?(process.env.NODE_ENV!=="production"&&console.warn(`[Directive] subscribeModule("${f}") \u2014 namespace not found. Available: ${[...k.keys()].join(", ")}`),()=>{}):a.subscribe(R,S)},watch(f,S,R){return a.watch(oe(f),S,R)},when(f,S){return a.when(()=>f(W),S)},onSettledChange:a.onSettledChange.bind(a),onTimeTravelChange:a.onTimeTravelChange.bind(a),inspect:a.inspect.bind(a),settle:a.settle.bind(a),explain:a.explain.bind(a),getSnapshot:a.getSnapshot.bind(a),restore:a.restore.bind(a),getDistributableSnapshot(f){let S={...f,includeDerivations:f?.includeDerivations?.map(oe),excludeDerivations:f?.excludeDerivations?.map(oe),includeFacts:f?.includeFacts?.map(oe)},R=a.getDistributableSnapshot(S),b={};for(let[E,$]of Object.entries(R.data)){let h=E.indexOf(B);if(h>0){let y=E.slice(0,h),w=E.slice(h+B.length);b[y]||(b[y]={}),b[y][w]=$;}else b._root||(b._root={}),b._root[E]=$;}return {...R,data:b}},watchDistributableSnapshot(f,S){let R={...f,includeDerivations:f?.includeDerivations?.map(oe),excludeDerivations:f?.excludeDerivations?.map(oe),includeFacts:f?.includeFacts?.map(oe)};return a.watchDistributableSnapshot(R,b=>{let E={};for(let[$,h]of Object.entries(b.data)){let y=$.indexOf(B);if(y>0){let w=$.slice(0,y),v=$.slice(y+B.length);E[w]||(E[w]={}),E[w][v]=h;}else E._root||(E._root={}),E._root[$]=h;}S({...b,data:E});})},registerModule(f,S){if(s.has(f))throw new Error(`[Directive] Module namespace "${f}" already exists. Cannot register a duplicate namespace.`);if(f.includes(B))throw new Error(`[Directive] Module name "${f}" contains the reserved separator "${B}".`);if(te.has(f))throw new Error(`[Directive] Module name "${f}" is a blocked property.`);for(let q of Object.keys(S.schema.facts))if(q.includes(B))throw new Error(`[Directive] Schema key "${q}" in module "${f}" contains the reserved separator "${B}".`);let R=S,b=R.crossModuleDeps&&Object.keys(R.crossModuleDeps).length>0,E=b?Object.keys(R.crossModuleDeps):[],$={};for(let[q,O]of Object.entries(R.schema.facts))$[`${f}${B}${q}`]=O;let h=R.init?q=>{let O=ne(q,f);R.init(O);}:void 0,y={};if(R.derive)for(let[q,O]of Object.entries(R.derive))y[`${f}${B}${q}`]=(I,n)=>{let i=b?se(I,f,E):ne(I,f),m=$e(n,f);return O(i,m)};let w={};if(R.events)for(let[q,O]of Object.entries(R.events))w[`${f}${B}${q}`]=(I,n)=>{let i=ne(I,f);O(i,n);};let v={};if(R.constraints)for(let[q,O]of Object.entries(R.constraints)){let I=O;v[`${f}${B}${q}`]={...I,deps:I.deps?.map(n=>`${f}${B}${n}`),when:n=>{let i=b?se(n,f,E):ne(n,f);return I.when(i)},require:typeof I.require=="function"?n=>{let i=b?se(n,f,E):ne(n,f);return I.require(i)}:I.require};}let _={};if(R.resolvers)for(let[q,O]of Object.entries(R.resolvers)){let I=O;_[`${f}${B}${q}`]={...I,resolve:async(n,i)=>{let m=qe(i.facts,t,j);await I.resolve(n,{facts:m[f],signal:i.signal});}};}let U={};if(R.effects)for(let[q,O]of Object.entries(R.effects)){let I=O;U[`${f}${B}${q}`]={...I,run:(n,i)=>{let m=b?se(n,f,E):ne(n,f),M=i?b?se(i,f,E):ne(i,f):void 0;return I.run(m,M)},deps:I.deps?.map(n=>`${f}${B}${n}`)};}s.add(f),t[f]=R,T.names=null;let z=[];for(let q of Object.keys(R.schema.facts))z.push(`${f}${B}${q}`);if(R.schema.derivations)for(let q of Object.keys(R.schema.derivations))z.push(`${f}${B}${q}`);k.set(f,z),a.registerModule({id:R.id,schema:$,requirements:R.schema.requirements??{},init:h,derive:Object.keys(y).length>0?y:void 0,events:Object.keys(w).length>0?w:void 0,effects:Object.keys(U).length>0?U:void 0,constraints:Object.keys(v).length>0?v:void 0,resolvers:Object.keys(_).length>0?_:void 0,hooks:R.hooks,snapshotEvents:u&&!u.has(f)?[]:R.snapshotEvents?.map(q=>`${f}${B}${q}`)});}}}function oe(e){if(e.includes(".")){let[t,...s]=e.split(".");return `${t}${B}${s.join(B)}`}return e}function ne(e,t){let s=Ge.get(e);if(s){let o=s.get(t);if(o)return o}else s=new Map,Ge.set(e,s);let u=new Proxy({},{get(o,r){if(typeof r!="symbol"&&!te.has(r))return r==="$store"||r==="$snapshot"?e[r]:e[`${t}${B}${r}`]},set(o,r,d){return typeof r=="symbol"||te.has(r)?false:(e[`${t}${B}${r}`]=d,true)},has(o,r){return typeof r=="symbol"||te.has(r)?false:`${t}${B}${r}`in e},deleteProperty(o,r){return typeof r=="symbol"||te.has(r)?false:(delete e[`${t}${B}${r}`],true)}});return s.set(t,u),u}function qe(e,t,s){let u=Ye.get(e);if(u)return u;let o=new Proxy({},{get(r,d){if(typeof d!="symbol"&&!te.has(d)&&Object.hasOwn(t,d))return ne(e,d)},has(r,d){return typeof d=="symbol"||te.has(d)?false:Object.hasOwn(t,d)},ownKeys(){return s()},getOwnPropertyDescriptor(r,d){if(typeof d!="symbol"&&Object.hasOwn(t,d))return {configurable:true,enumerable:true}}});return Ye.set(e,o),o}var tt=new WeakMap;function se(e,t,s){let u=`${t}:${JSON.stringify([...s].sort())}`,o=tt.get(e);if(o){let l=o.get(u);if(l)return l}else o=new Map,tt.set(e,o);let r=new Set(s),d=["self",...s],g=new Proxy({},{get(l,c){if(typeof c!="symbol"&&!te.has(c)){if(c==="self")return ne(e,t);if(r.has(c))return ne(e,c);process.env.NODE_ENV!=="production"&&typeof c=="string"&&console.warn(`[Directive] Module "${t}" accessed undeclared cross-module property "${c}". Add it to crossModuleDeps or use "facts.self.${c}" for own module facts.`);}},has(l,c){return typeof c=="symbol"||te.has(c)?false:c==="self"||r.has(c)},ownKeys(){return d},getOwnPropertyDescriptor(l,c){if(typeof c!="symbol"&&(c==="self"||r.has(c)))return {configurable:true,enumerable:true}}});return o.set(u,g),g}function $e(e,t){let s=et.get(e);if(s){let o=s.get(t);if(o)return o}else s=new Map,et.set(e,s);let u=new Proxy({},{get(o,r){if(typeof r!="symbol"&&!te.has(r))return e[`${t}${B}${r}`]},has(o,r){return typeof r=="symbol"||te.has(r)?false:`${t}${B}${r}`in e}});return s.set(t,u),u}function Dt(e,t,s){let u=Qe.get(e);if(u)return u;let o=new Proxy({},{get(r,d){if(typeof d!="symbol"&&!te.has(d)&&Object.hasOwn(t,d))return $e(e,d)},has(r,d){return typeof d=="symbol"||te.has(d)?false:Object.hasOwn(t,d)},ownKeys(){return s()},getOwnPropertyDescriptor(r,d){if(typeof d!="symbol"&&Object.hasOwn(t,d))return {configurable:true,enumerable:true}}});return Qe.set(e,o),o}var nt=new WeakMap;function xt(e,t,s){let u=nt.get(e);return u||(u=new Map,nt.set(e,u)),new Proxy({},{get(o,r){if(typeof r=="symbol"||te.has(r)||!Object.hasOwn(t,r))return;let d=u.get(r);if(d)return d;let g=new Proxy({},{get(l,c){if(typeof c!="symbol"&&!te.has(c))return a=>{e.dispatch({type:`${r}${B}${c}`,...a});}}});return u.set(r,g),g},has(o,r){return typeof r=="symbol"||te.has(r)?false:Object.hasOwn(t,r)},ownKeys(){return s()},getOwnPropertyDescriptor(o,r){if(typeof r!="symbol"&&Object.hasOwn(t,r))return {configurable:true,enumerable:true}}})}function Et(e){let t=e.module;if(!t)throw new Error("[Directive] createSystem requires a module. Got: "+typeof t);if(e.tickMs!==void 0&&e.tickMs<=0)throw new Error("[Directive] tickMs must be a positive number");if(e.initialFacts&&!ce(e.initialFacts))throw new Error("[Directive] initialFacts contains potentially dangerous keys (__proto__, constructor, or prototype). This may indicate a prototype pollution attack.");process.env.NODE_ENV!=="production"&&(t.crossModuleDeps&&Object.keys(t.crossModuleDeps).length>0&&console.warn("[Directive] Single module mode ignores crossModuleDeps. Use multiple modules if cross-module access is needed: createSystem({ modules: { ... } })"),e.tickMs&&e.tickMs>0&&(t.events&&"tick"in t.events||console.warn(`[Directive] tickMs is set to ${e.tickMs}ms but module has no "tick" event handler.`)),e.debug?.snapshotModules&&console.warn("[Directive] debug.snapshotModules has no effect in single-module mode. Use snapshotEvents on the module definition instead, or switch to createSystem({ modules: { ... } }) for multi-module filtering."));let s=e.debug,u=e.errorBoundary;e.zeroConfig&&(s={timeTravel:process.env.NODE_ENV!=="production",maxSnapshots:100,...e.debug},u={onConstraintError:"skip",onResolverError:"skip",onEffectError:"skip",onDerivationError:"skip",...e.errorBoundary});let o=null,r=null;r=be({modules:[{id:t.id,schema:t.schema.facts,requirements:t.schema.requirements,init:t.init,derive:t.derive,events:t.events,effects:t.effects,constraints:t.constraints,resolvers:t.resolvers,hooks:t.hooks,snapshotEvents:t.snapshotEvents}],plugins:e.plugins,debug:s,errorBoundary:u,tickMs:e.tickMs,onAfterModuleInit:()=>{if(e.initialFacts)for(let[a,p]of Object.entries(e.initialFacts))te.has(a)||(r.facts[a]=p);if(o){for(let[a,p]of Object.entries(o))te.has(a)||(r.facts[a]=p);o=null;}}});let d=new Proxy({},{get(a,p){if(typeof p!="symbol"&&!te.has(p))return k=>{r.dispatch({type:p,...k});}}}),g=null,l=e.tickMs;return {_mode:"single",facts:r.facts,debug:r.debug,derive:r.derive,events:d,constraints:r.constraints,effects:r.effects,get isRunning(){return r.isRunning},get isSettled(){return r.isSettled},get isInitialized(){return r.isInitialized},get isReady(){return r.isReady},whenReady:r.whenReady.bind(r),async hydrate(a){if(r.isRunning)throw new Error("[Directive] hydrate() must be called before start(). The system is already running.");let p=await a();p&&typeof p=="object"&&(o=p);},start(){r.start(),l&&l>0&&t.events&&"tick"in t.events&&(g=setInterval(()=>{r.dispatch({type:"tick"});},l));},stop(){g&&(clearInterval(g),g=null),r.stop();},destroy(){this.stop(),r.destroy();},dispatch(a){r.dispatch(a);},batch:r.batch.bind(r),read(a){return r.read(a)},subscribe(a,p){return r.subscribe(a,p)},watch(a,p,k){return r.watch(a,p,k)},when(a,p){return r.when(a,p)},onSettledChange:r.onSettledChange.bind(r),onTimeTravelChange:r.onTimeTravelChange.bind(r),inspect:r.inspect.bind(r),settle:r.settle.bind(r),explain:r.explain.bind(r),getSnapshot:r.getSnapshot.bind(r),restore:r.restore.bind(r),getDistributableSnapshot:r.getDistributableSnapshot.bind(r),watchDistributableSnapshot:r.watchDistributableSnapshot.bind(r),registerModule(a){r.registerModule({id:a.id,schema:a.schema.facts,requirements:a.schema.requirements,init:a.init,derive:a.derive,events:a.events,effects:a.effects,constraints:a.constraints,resolvers:a.resolvers,hooks:a.hooks,snapshotEvents:a.snapshotEvents});}}}function Tt(e){let t={facts:{},derivations:{},events:{},requirements:{}},s,u,o,r,d,g,l,c={schema(a){return t=a,c},init(a){return s=a,c},derive(a){return o=a,c},events(a){return u=a,c},effects(a){return r=a,c},constraints(a){return d=a,c},resolvers(a){return g=a,c},hooks(a){return l=a,c},build(){if(!t||!t.facts)throw new Error(`[Directive] Module "${e}" requires a schema with at least facts defined. Call .schema({ facts: { ... } }) before .build().`);let a=Object.keys(t.derivations??{}),p=Object.keys(o??{}),k=a.filter(V=>!p.includes(V));if(k.length>0)throw new Error(`[Directive] Module "${e}" is missing derivation implementations: ${k.join(", ")}. All derivations declared in schema.derivations must have implementations in .derive().`);let T=Object.keys(t.events??{}),j=Object.keys(u??{}),W=T.filter(V=>!j.includes(V));if(W.length>0)throw new Error(`[Directive] Module "${e}" is missing event handler implementations: ${W.join(", ")}. All events declared in schema.events must have implementations in .events().`);return {id:e,schema:t,init:s,events:u,derive:o,effects:r,constraints:d,resolvers:g,hooks:l}}};return c}function Ct(){return {when(e){return {require(t){let s,u,o,r,d,g={priority(l){return s=l,g},after(...l){return u=u?[...u,...l]:[...l],g},deps(...l){return o=o?[...o,...l]:[...l],g},timeout(l){return r=l,g},async(l){return d=l,g},build(){let l={when:e,require:t};return s!==void 0&&(l.priority=s),u!==void 0&&(l.after=u),o!==void 0&&(l.deps=o),r!==void 0&&(l.timeout=r),d!==void 0&&(l.async=d),l}};return g}}}}}function ye(e){let t={...e};return t.withPriority=s=>ye({...e,priority:s}),t.withAfter=(...s)=>ye({...e,after:e.after?[...e.after,...s]:[...s]}),t.withDeps=(...s)=>ye({...e,deps:e.deps?[...e.deps,...s]:[...s]}),t.withTimeout=s=>ye({...e,timeout:s}),t.withAsync=s=>ye({...e,async:s}),t}function qt(e){return {require(t){return ye({when:e,require:t})}}}function $t(){return {module(e){return Ot(e)},modules(e){return It(e)}}}function Ot(e){let t,s,u,o,r,d,g={plugins(l){return t=l,g},debug(l){return s=l,g},errorBoundary(l){return u=l,g},tickMs(l){return o=l,g},zeroConfig(l=true){return r=l,g},initialFacts(l){return d=l,g},build(){return me({module:e,plugins:t,debug:s,errorBoundary:u,tickMs:o,zeroConfig:r,initialFacts:d})}};return g}function It(e){let t,s,u,o,r,d,g,l={plugins(c){return t=c,l},debug(c){return s=c,l},errorBoundary(c){return u=c,l},tickMs(c){return o=c,l},zeroConfig(c=true){return r=c,l},initialFacts(c){return d=c,l},initOrder(c){return g=c,l},build(){return me({modules:e,plugins:t,debug:s,errorBoundary:u,tickMs:o,zeroConfig:r,initialFacts:d,initOrder:g})}};return l}function Oe(){let e={pending:new Map,inflight:new Map,failed:new Map,errors:new Map,listeners:new Set};function t(){for(let l of e.listeners)l();}function s(l,c){let a=l.get(c);return a||(a=new Set,l.set(c,a)),a}function u(l){let c=e.pending.get(l)??new Set,a=e.inflight.get(l)??new Set,p=e.failed.get(l)??new Set,k=e.errors.get(l)??null;return {pending:c.size,inflight:a.size,failed:p.size,isLoading:c.size>0||a.size>0,hasError:p.size>0,lastError:k}}function o(){let l=new Set([...e.pending.keys(),...e.inflight.keys(),...e.failed.keys()]),c=new Map;for(let a of l)c.set(a,u(a));return c}function r(l){return e.listeners.add(l),()=>e.listeners.delete(l)}function d(){e.pending.clear(),e.inflight.clear(),e.failed.clear(),e.errors.clear(),t();}return {plugin:{name:"requirement-status",onRequirementCreated(l){let c=l.requirement.type;s(e.pending,c).add(l.id),e.failed.get(c)?.delete(l.id),t();},onResolverStart(l,c){let a=c.requirement.type;e.pending.get(a)?.delete(c.id),s(e.inflight,a).add(c.id),t();},onResolverComplete(l,c){let a=c.requirement.type;e.inflight.get(a)?.delete(c.id),e.pending.get(a)?.delete(c.id),t();},onResolverError(l,c,a){let p=c.requirement.type;e.inflight.get(p)?.delete(c.id),s(e.failed,p).add(c.id),e.errors.set(p,a instanceof Error?a:new Error(String(a))),t();},onResolverCancel(l,c){let a=c.requirement.type;e.pending.get(a)?.delete(c.id),e.inflight.get(a)?.delete(c.id),t();},onRequirementMet(l){let c=l.requirement.type;e.pending.get(c)?.delete(l.id),e.inflight.get(c)?.delete(l.id),t();}},getStatus:u,getAllStatus:o,subscribe:r,reset:d}}function Pt(e){return t=>e.getStatus(t)}function At(e){let t=Oe(),u=[...e.plugins??[],t.plugin];return {system:me({module:e.module,plugins:u,debug:e.debug,errorBoundary:e.errorBoundary,tickMs:e.tickMs,zeroConfig:e.zeroConfig,initialFacts:e.initialFacts}),statusPlugin:t}}function jt(e){let t={},s={},u={};for(let[d,g]of Object.entries(e.initialState))t[d]=Ie(g);for(let d of Object.keys(e.reducers))d.includes("By")||d.includes("Set")||d.includes("With")?(s[d]={payload:"t.object()"},u[d]=`(facts, { payload }) => {
12
+ // TODO: Implement ${d}
13
+ }`):(s[d]={},u[d]=`(facts) => {
14
+ // TODO: Implement ${d}
15
+ }`);let r=`(facts) => {
16
+ ${Object.entries(e.initialState).map(([d,g])=>` facts.${d} = ${JSON.stringify(g)};`).join(`
17
17
  `)}
18
- }`;return {name:e.name,facts:t,derivations:{},events:o,requirements:{},initCode:n,deriveCode:{},eventsCode:c}}function _t(e){let t={},o={},c={};for(let[u,d]of Object.entries(e.state))t[u]=Oe(d);for(let u of Object.keys(e.actions))o[u]={},c[u]=`(facts) => {
19
- // TODO: Implement ${u}
20
- }`;let n=`(facts) => {
21
- ${Object.entries(e.state).map(([u,d])=>` facts.${u} = ${JSON.stringify(d)};`).join(`
18
+ }`;return {name:e.name,facts:t,derivations:{},events:s,requirements:{},initCode:r,deriveCode:{},eventsCode:u}}function Ft(e){let t={},s={},u={};for(let[d,g]of Object.entries(e.state))t[d]=Ie(g);for(let d of Object.keys(e.actions))s[d]={},u[d]=`(facts) => {
19
+ // TODO: Implement ${d}
20
+ }`;let r=`(facts) => {
21
+ ${Object.entries(e.state).map(([d,g])=>` facts.${d} = ${JSON.stringify(g)};`).join(`
22
22
  `)}
23
- }`;return {name:"store",facts:t,derivations:{},events:o,requirements:{},initCode:n,deriveCode:{},eventsCode:c}}function Bt(e){let t={state:`t.string<${Object.keys(e.states).map(s=>`'${s}'`).join(" | ")}>()`},o={},c={},i={},n={};if(e.context)for(let[s,m]of Object.entries(e.context))t[s]=Oe(m);for(let s of Object.keys(e.states)){let m=`is${Kt(s)}`;o[m]="t.boolean()",c[m]=`(facts) => facts.state === '${s}'`;}let u=new Map;for(let[s,m]of Object.entries(e.states))if(m.on)for(let[p,q]of Object.entries(m.on)){u.has(p)||u.set(p,new Map);let T=typeof q=="string"?q:q.target;u.get(p).set(s,T);}for(let[s,m]of u)if(i[s]={},m.size===1){let p=[...m.entries()][0],q=p?p[1]:"unknown";n[s]=`(facts) => {
24
- facts.state = '${q}';
25
- }`;}else {let p=[...m.entries()].map(([q,T])=>` case '${q}': facts.state = '${T}'; break;`).join(`
26
- `);n[s]=`(facts) => {
23
+ }`;return {name:"store",facts:t,derivations:{},events:s,requirements:{},initCode:r,deriveCode:{},eventsCode:u}}function _t(e){let t={state:`t.string<${Object.keys(e.states).map(c=>`'${c}'`).join(" | ")}>()`},s={},u={},o={},r={};if(e.context)for(let[c,a]of Object.entries(e.context))t[c]=Ie(a);for(let c of Object.keys(e.states)){let a=`is${Nt(c)}`;s[a]="t.boolean()",u[a]=`(facts) => facts.state === '${c}'`;}let d=new Map;for(let[c,a]of Object.entries(e.states))if(a.on)for(let[p,k]of Object.entries(a.on)){d.has(p)||d.set(p,new Map);let T=typeof k=="string"?k:k.target;d.get(p).set(c,T);}for(let[c,a]of d)if(o[c]={},a.size===1){let p=[...a.entries()][0],k=p?p[1]:"unknown";r[c]=`(facts) => {
24
+ facts.state = '${k}';
25
+ }`;}else {let p=[...a.entries()].map(([k,T])=>` case '${k}': facts.state = '${T}'; break;`).join(`
26
+ `);r[c]=`(facts) => {
27
27
  switch (facts.state) {
28
28
  ${p}
29
29
  }
30
- }`;}let d=[` facts.state = '${e.initial}';`];if(e.context)for(let[s,m]of Object.entries(e.context))d.push(` facts.${s} = ${JSON.stringify(m)};`);let a=`(facts) => {
31
- ${d.join(`
30
+ }`;}let g=[` facts.state = '${e.initial}';`];if(e.context)for(let[c,a]of Object.entries(e.context))g.push(` facts.${c} = ${JSON.stringify(a)};`);let l=`(facts) => {
31
+ ${g.join(`
32
32
  `)}
33
- }`;return {name:e.id,facts:t,derivations:o,events:i,requirements:{},initCode:a,deriveCode:c,eventsCode:n}}function Nt(e){let t=["import { createModule, t } from '@directive-run/core';","",`const ${e.name}Module = createModule('${e.name}', {`," schema: {"," facts: {"];for(let[o,c]of Object.entries(e.facts))t.push(` ${o}: ${c},`);t.push(" },"),t.push(" derivations: {");for(let[o,c]of Object.entries(e.derivations))t.push(` ${o}: ${c},`);t.push(" },"),t.push(" events: {");for(let[o,c]of Object.entries(e.events)){let i=Object.entries(c).map(([n,u])=>`${n}: ${u}`).join(", ");t.push(` ${o}: { ${i} },`);}if(t.push(" },"),t.push(" requirements: {},"),t.push(" },"),t.push(` init: ${e.initCode},`),Object.keys(e.deriveCode).length>0){t.push(" derive: {");for(let[o,c]of Object.entries(e.deriveCode))t.push(` ${o}: ${c},`);t.push(" },");}t.push(" events: {");for(let[o,c]of Object.entries(e.eventsCode))t.push(` ${o}: ${c},`);return t.push(" },"),t.push("});"),t.push(""),t.push(`export { ${e.name}Module };`),t.join(`
34
- `)}function Oe(e){if(e===null)return "t.any().nullable()";if(e===void 0)return "t.any().optional()";switch(typeof e){case "number":return "t.number()";case "string":return "t.string()";case "boolean":return "t.boolean()";case "object":return Array.isArray(e)?"t.array(t.any())":"t.object()";default:return "t.any()"}}function Kt(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Wt(e){let t=["[ ] Install directive: pnpm add directive","[ ] Create module file(s) for your state","[ ] Define schema with facts, derivations, events","[ ] Implement init function for initial state","[ ] Implement event handlers","[ ] Update imports in consuming code","[ ] Test the new implementation","[ ] Remove old state management code"];return [...{redux:["[ ] Convert reducers to event handlers","[ ] Convert selectors to derivations","[ ] Convert thunks to constraints + resolvers","[ ] Update useSelector to useDerived","[ ] Update useDispatch to system.dispatch"],zustand:["[ ] Convert store state to facts","[ ] Convert store actions to events","[ ] Convert computed getters to derivations","[ ] Update useStore hooks to useDirective hooks"],xstate:["[ ] Convert machine states to a 'state' fact","[ ] Convert state checks to derivations (isActive, etc.)","[ ] Convert events to Directive events","[ ] Convert guards to constraint 'when' conditions","[ ] Convert services/actors to constraints + resolvers","[ ] Update useMachine to useDirective hooks"]}[e]??[],...t]}var Kn={None:"none",Linear:"linear",Exponential:"exponential"};export{Kn as Backoff,le as DirectiveError,ce as RequirementSet,Ft as analyzeReduxSlice,Bt as analyzeXStateMachine,_t as analyzeZustandStore,qt as constraint,Pe as constraintFactory,Re as createConstraintsManager,ke as createDerivationsManager,Ce as createDisabledTimeTravel,Me as createEffectsManager,be as createEngine,De as createErrorBoundaryManager,we as createFacts,Ke as createFactsProxy,Ne as createFactsStore,We as createModule,lt as createModuleFactory,xe as createPluginManager,Ie as createRequirementStatusPlugin,Te as createResolversManager,Je as createRetryLaterManager,At as createStatusHook,me as createSystem,jt as createSystemWithStatus,Ee as createTimeTravelManager,mt as diffSnapshots,wt as forType,Wt as generateMigrationChecklist,Nt as generateModuleCode,Ue as generateRequirementId,_e as getCurrentTracker,ot as isNamespacedSystem,bt as isRequirementType,yt as isSignedSnapshot,st as isSingleModuleSystem,ze as isSnapshotExpired,ct as isTracking,Ct as module,St as req,Ae as resolverFactory,ft as shallowEqual,pt as signSnapshot,It as system,dt as t,fe as trackAccess,je as typedConstraint,Fe as typedResolver,gt as validateSnapshot,ht as verifySnapshotSignature,$t as when,ie as withTracking,Se as withoutTracking};//# sourceMappingURL=index.js.map
33
+ }`;return {name:e.id,facts:t,derivations:s,events:o,requirements:{},initCode:l,deriveCode:u,eventsCode:r}}function Bt(e){let t=["import { createModule, t } from '@directive-run/core';","",`const ${e.name}Module = createModule('${e.name}', {`," schema: {"," facts: {"];for(let[s,u]of Object.entries(e.facts))t.push(` ${s}: ${u},`);t.push(" },"),t.push(" derivations: {");for(let[s,u]of Object.entries(e.derivations))t.push(` ${s}: ${u},`);t.push(" },"),t.push(" events: {");for(let[s,u]of Object.entries(e.events)){let o=Object.entries(u).map(([r,d])=>`${r}: ${d}`).join(", ");t.push(` ${s}: { ${o} },`);}if(t.push(" },"),t.push(" requirements: {},"),t.push(" },"),t.push(` init: ${e.initCode},`),Object.keys(e.deriveCode).length>0){t.push(" derive: {");for(let[s,u]of Object.entries(e.deriveCode))t.push(` ${s}: ${u},`);t.push(" },");}t.push(" events: {");for(let[s,u]of Object.entries(e.eventsCode))t.push(` ${s}: ${u},`);return t.push(" },"),t.push("});"),t.push(""),t.push(`export { ${e.name}Module };`),t.join(`
34
+ `)}function Ie(e){if(e===null)return "t.object().nullable()";if(e===void 0)return "t.object().optional()";switch(typeof e){case "number":return "t.number()";case "string":return "t.string()";case "boolean":return "t.boolean()";case "object":return Array.isArray(e)?"t.array(t.object())":"t.object()";default:return "t.object()"}}function Nt(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Kt(e){let t=["[ ] Install directive: pnpm add directive","[ ] Create module file(s) for your state","[ ] Define schema with facts, derivations, events","[ ] Implement init function for initial state","[ ] Implement event handlers","[ ] Update imports in consuming code","[ ] Test the new implementation","[ ] Remove old state management code"];return [...{redux:["[ ] Convert reducers to event handlers","[ ] Convert selectors to derivations","[ ] Convert thunks to constraints + resolvers","[ ] Update useSelector to useDerived","[ ] Update useDispatch to system.dispatch"],zustand:["[ ] Convert store state to facts","[ ] Convert store actions to events","[ ] Convert computed getters to derivations","[ ] Update useStore hooks to useDirective hooks"],xstate:["[ ] Convert machine states to a 'state' fact","[ ] Convert state checks to derivations (isActive, etc.)","[ ] Convert events to Directive events","[ ] Convert guards to constraint 'when' conditions","[ ] Convert services/actors to constraints + resolvers","[ ] Update useMachine to useDirective hooks"]}[e]??[],...t]}var Nn={None:"none",Linear:"linear",Exponential:"exponential"};export{Nn as Backoff,le as DirectiveError,ue as RequirementSet,jt as analyzeReduxSlice,_t as analyzeXStateMachine,Ft as analyzeZustandStore,Ct as constraint,Pe as constraintFactory,ke as createConstraintsManager,Re as createDerivationsManager,Ce as createDisabledTimeTravel,Me as createEffectsManager,be as createEngine,De as createErrorBoundaryManager,we as createFacts,Ne as createFactsProxy,Be as createFactsStore,Ke as createModule,dt as createModuleFactory,xe as createPluginManager,Oe as createRequirementStatusPlugin,Ee as createResolversManager,He as createRetryLaterManager,Pt as createStatusHook,me as createSystem,At as createSystemWithStatus,Te as createTimeTravelManager,gt as diffSnapshots,bt as forType,Kt as generateMigrationChecklist,Bt as generateModuleCode,Le as generateRequirementId,_e as getCurrentTracker,st as isNamespacedSystem,St as isRequirementType,mt as isSignedSnapshot,rt as isSingleModuleSystem,Ve as isSnapshotExpired,at as isTracking,Tt as module,vt as req,Ae as resolverFactory,lt as shallowEqual,yt as signSnapshot,$t as system,ut as t,fe as trackAccess,je as typedConstraint,Fe as typedResolver,ft as validateSnapshot,pt as verifySnapshotSignature,qt as when,ae as withTracking,ve as withoutTracking};//# sourceMappingURL=index.js.map
35
35
  //# sourceMappingURL=index.js.map