@directive-run/svelte 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/README.md CHANGED
@@ -1,6 +1,10 @@
1
1
  # @directive-run/svelte
2
2
 
3
- Svelte stores adapter for Directive. Provides `Readable` store-based hooks and store factories for reading facts, derivations, and dispatching events.
3
+ [![npm](https://img.shields.io/npm/v/@directive-run/svelte?color=%236366f1)](https://www.npmjs.com/package/@directive-run/svelte)
4
+ [![downloads](https://img.shields.io/npm/dm/@directive-run/svelte)](https://www.npmjs.com/package/@directive-run/svelte)
5
+ [![bundle size](https://img.shields.io/bundlephobia/minzip/@directive-run/svelte)](https://bundlephobia.com/package/@directive-run/svelte)
6
+
7
+ Svelte stores for [Directive](https://www.npmjs.com/package/@directive-run/core). Returns `Readable` stores that work with Svelte's `$` auto-subscription syntax.
4
8
 
5
9
  ## Install
6
10
 
@@ -8,11 +12,42 @@ Svelte stores adapter for Directive. Provides `Readable` store-based hooks and s
8
12
  npm install @directive-run/core @directive-run/svelte
9
13
  ```
10
14
 
11
- ## Usage
15
+ ## Quick Start
16
+
17
+ Define a module in a shared file, then use it in any component:
18
+
19
+ ```typescript
20
+ // system.ts
21
+ import { createModule, createSystem, t } from "@directive-run/core";
22
+
23
+ const counter = createModule("counter", {
24
+ schema: {
25
+ facts: { count: t.number() },
26
+ derivations: { doubled: t.number() },
27
+ events: { increment: {}, decrement: {} },
28
+ requirements: {},
29
+ },
30
+ init: (facts) => {
31
+ facts.count = 0;
32
+ },
33
+ derive: {
34
+ doubled: (facts) => facts.count * 2,
35
+ },
36
+ events: {
37
+ increment: (facts) => { facts.count += 1; },
38
+ decrement: (facts) => { facts.count -= 1; },
39
+ },
40
+ });
41
+
42
+ export const system = createSystem({ module: counter });
43
+ system.start();
44
+ ```
12
45
 
13
46
  ```svelte
47
+ <!-- Counter.svelte -->
14
48
  <script>
15
49
  import { useFact, useDerived, useEvents } from "@directive-run/svelte";
50
+ import { system } from "./system";
16
51
 
17
52
  const count = useFact(system, "count");
18
53
  const doubled = useDerived(system, "doubled");
@@ -21,19 +56,74 @@ npm install @directive-run/core @directive-run/svelte
21
56
 
22
57
  <p>Count: {$count} (doubled: {$doubled})</p>
23
58
  <button on:click={() => events.increment()}>+</button>
59
+ <button on:click={() => events.decrement()}>&minus;</button>
24
60
  ```
25
61
 
26
- ## Exports
62
+ ## useSelector
27
63
 
28
- `useFact`, `useDerived`, `useSelector`, `useDispatch`, `useEvents`, `useWatch`, `useInspect`, `useRequirementStatus`, `useExplain`, `useConstraintStatus`, `useOptimisticUpdate`, `useTimeTravel`, `useDirective`, `createTypedHooks`, `createFactStore`, `createDerivedStore`, `createDerivedsStore`, `createInspectStore`, `shallowEqual`
64
+ Auto-tracking selector over facts and derivations. Returns a `Readable` store:
65
+
66
+ ```svelte
67
+ <script>
68
+ import { useSelector } from "@directive-run/svelte";
69
+ import { system } from "./system";
70
+
71
+ const label = useSelector(system, (state) => {
72
+ return state.count > 10 ? "High" : "Low";
73
+ });
74
+ </script>
75
+
76
+ <span>{$label}</span>
77
+ ```
78
+
79
+ ## API Reference
80
+
81
+ ### Core Hooks
82
+
83
+ | Hook | Return Type | Description |
84
+ |------|------------|-------------|
85
+ | `useFact(system, key)` | `Readable<T>` | Subscribe to a single fact value |
86
+ | `useFact(system, [keys])` | `Readable<Pick<Facts, K>>` | Subscribe to multiple facts |
87
+ | `useDerived(system, key)` | `Readable<T>` | Subscribe to a single derivation |
88
+ | `useDerived(system, [keys])` | `Readable<Pick<Derivations, K>>` | Subscribe to multiple derivations |
89
+ | `useSelector(system, fn)` | `Readable<R>` | Auto-tracking selector with optional equality function |
90
+ | `useEvents(system)` | `Events` | Events dispatcher |
91
+ | `useDispatch(system)` | `(event) => void` | Low-level dispatch function |
92
+
93
+ ### Advanced Hooks
94
+
95
+ | Hook | Return Type | Description |
96
+ |------|------------|-------------|
97
+ | `useWatch(system, key, cb)` | `void` | Side-effect on fact or derivation change |
98
+ | `useInspect(system)` | `Readable<InspectState>` | Consolidated system state (isSettled, unmet, inflight) |
99
+ | `useRequirementStatus(plugin, type)` | `Readable<RequirementTypeStatus>` | Requirement loading/error state |
100
+ | `useExplain(system, reqId)` | `Readable<string \| null>` | Human-readable requirement explanation |
101
+ | `useConstraintStatus(system)` | `Readable<ConstraintInfo[]>` | All constraint states |
102
+ | `useOptimisticUpdate(system)` | `{ mutate, isPending: Readable, error: Readable, rollback }` | Optimistic mutation with auto-rollback |
103
+ | `useTimeTravel(system)` | `Readable<TimeTravelState \| null>` | Undo/redo navigation |
104
+
105
+ ### Svelte-Specific
106
+
107
+ | Export | Description |
108
+ |--------|-------------|
109
+ | `useDirective(module, config?)` | Scoped system with lifecycle (auto-start/destroy) |
110
+ | `createFactStore(system, key)` | `Readable` store factory for a single fact |
111
+ | `createDerivedStore(system, key)` | `Readable` store factory for a single derivation |
112
+ | `createDerivedsStore(system, [keys])` | `Readable` store factory for multiple derivations |
113
+ | `createInspectStore(system)` | `Readable` store factory for system inspection |
114
+ | `createTypedHooks()` | Factory for pre-typed hooks |
115
+ | `shallowEqual` | Shallow equality helper for selectors |
29
116
 
30
117
  ## Peer Dependencies
31
118
 
32
119
  - `svelte >= 4`
33
120
  - `@directive-run/core`
34
121
 
122
+ ## Documentation
123
+
124
+ - [Svelte Adapter Guide](https://directive.run/docs/adapters/svelte)
125
+ - [API Reference](https://directive.run/docs/api)
126
+
35
127
  ## License
36
128
 
37
129
  MIT
38
-
39
- [Full documentation](https://directive.run/docs)
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var svelte=require('svelte'),store=require('svelte/store'),core=require('@directive-run/core'),adapterUtils=require('@directive-run/core/adapter-utils');function w(e,t){return process.env.NODE_ENV!=="production"&&e.read(t)===void 0&&console.warn(`[Directive] createDerivedStore("${t}") returned undefined. Check that "${t}" is defined in your module's derive property.`),store.readable(e.read(t),s=>e.subscribe([t],()=>{s(e.read(t));}))}function C(e,t){let s=()=>{let r={};for(let n of t)r[n]=e.read(n);return r};return store.readable(s(),r=>e.subscribe(t,()=>{r(s());}))}function E(e,t){return process.env.NODE_ENV!=="production"&&(e.facts.$store.has(t)||console.warn(`[Directive] createFactStore("${t}") \u2014 fact not found in store. Check that "${t}" is defined in your module's schema.`)),store.readable(e.facts.$store.get(t),s=>e.facts.$store.subscribe([t],()=>{s(e.facts.$store.get(t));}))}function j(e){return store.readable(e.inspect(),t=>{let s=()=>t(e.inspect()),r=e.facts.$store.subscribeAll(s),n=e.onSettledChange(s);return ()=>{r(),n();}})}function V(e,t){return adapterUtils.assertSystem("useFact",e),process.env.NODE_ENV!=="production"&&typeof t=="function"&&console.error("[Directive] useFact() received a function. Did you mean useSelector()? useFact() takes a string key or array of keys, not a selector function."),Array.isArray(t)?$(e,t):E(e,t)}function $(e,t){let s=()=>{let r={};for(let n of t)r[n]=e.facts.$store.get(n);return r};return store.readable(s(),r=>e.facts.$store.subscribe(t,()=>{r(s());}))}function q(e,t){return adapterUtils.assertSystem("useDerived",e),process.env.NODE_ENV!=="production"&&typeof t=="function"&&console.error("[Directive] useDerived() received a function. Did you mean useSelector()? useDerived() takes a string key or array of keys, not a selector function."),Array.isArray(t)?C(e,t):w(e,t)}function z(e,t,s=adapterUtils.defaultEquality){adapterUtils.assertSystem("useSelector",e);let r=new Set(Object.keys(e.derive??{})),n=()=>adapterUtils.runTrackedSelector(e,r,t),o=n();return store.readable(o.value,a=>{let S=o.value,p=o.factKeys,f=o.deriveKeys,d=[],y=()=>{for(let c of d)c();d.length=0;let b=()=>{let c=n();s(S,c.value)||(S=c.value,a(c.value)),adapterUtils.depsChanged(p,c.factKeys,f,c.deriveKeys)&&(p=c.factKeys,f=c.deriveKeys,y());};p.length>0?d.push(e.facts.$store.subscribe(p,b)):f.length===0&&d.push(e.facts.$store.subscribeAll(b)),f.length>0&&d.push(e.subscribe(f,b));};return y(),()=>{for(let b of d)b();}})}function O(e){return adapterUtils.assertSystem("useDispatch",e),t=>{e.dispatch(t);}}function A(e){return adapterUtils.assertSystem("useEvents",e),e.events}function P(e,t,s,r){adapterUtils.assertSystem("useWatch",e);let n=t==="fact"&&typeof s=="string"&&typeof r=="function",o=n?s:t,a=n?r:s,S=e.watch(o,a);svelte.onDestroy(S);}function H(e,t){return adapterUtils.assertSystem("useInspect",e),t?.throttleMs&&t.throttleMs>0?store.readable(adapterUtils.computeInspectState(e),s=>{let{throttled:r,cleanup:n}=adapterUtils.createThrottle(()=>{s(adapterUtils.computeInspectState(e));},t.throttleMs),o=e.facts.$store.subscribeAll(r),a=e.onSettledChange(r);return ()=>{n(),o(),a();}}):store.readable(adapterUtils.computeInspectState(e),s=>{let r=()=>s(adapterUtils.computeInspectState(e)),n=e.facts.$store.subscribeAll(r),o=e.onSettledChange(r);return ()=>{n(),o();}})}function L(e,t){if(Array.isArray(t)){let s=()=>{let r={};for(let n of t)r[n]=e.getStatus(n);return r};return store.readable(s(),r=>e.subscribe(()=>{r(s());}))}return store.readable(e.getStatus(t),s=>e.subscribe(()=>{s(e.getStatus(t));}))}function G(e,t){return adapterUtils.assertSystem("useExplain",e),store.readable(e.explain(t),s=>{let r=()=>s(e.explain(t)),n=e.facts.$store.subscribeAll(r),o=e.onSettledChange(r);return ()=>{n(),o();}})}function J(e,t){return adapterUtils.assertSystem("useConstraintStatus",e),store.readable(x(e,t),s=>{let r=()=>s(x(e,t)),n=e.facts.$store.subscribeAll(r),o=e.onSettledChange(r);return ()=>{n(),o();}})}function x(e,t){let s=e.inspect();return t?s.constraints.find(r=>r.id===t)??null:s.constraints}function Q(e,t,s){adapterUtils.assertSystem("useOptimisticUpdate",e);let r=false,n=null,o=null,a=null,S=new Set,p=new Set,f={subscribe(u){return u(r),S.add(u),()=>S.delete(u)}},d={subscribe(u){return u(n),p.add(u),()=>p.delete(u)}},y=u=>{r=u;for(let v of S)v(u);},b=u=>{n=u;for(let v of p)v(u);},c=()=>{o&&(e.restore(o),o=null),y(false),b(null),a?.(),a=null;},l=u=>{o=e.getSnapshot(),y(true),b(null),e.batch(u),t&&s&&(a?.(),a=t.subscribe(()=>{let v=t.getStatus(s);!v.isLoading&&!v.hasError?(o=null,y(false),a?.(),a=null):v.hasError&&(b(v.lastError),c());}));};return svelte.onDestroy(()=>{a?.();}),{mutate:l,isPending:f,error:d,rollback:c}}function X(e){return adapterUtils.assertSystem("useTimeTravel",e),store.readable(adapterUtils.buildTimeTravelState(e),t=>e.onTimeTravelChange(()=>t(adapterUtils.buildTimeTravelState(e))))}function Y(e,t){let s=[...t?.plugins??[]],r;if(t?.status){let l=core.createRequirementStatusPlugin();r=l,s.push(l.plugin);}let n=core.createSystem({module:e,plugins:s.length>0?s:void 0,debug:t?.debug,errorBoundary:t?.errorBoundary,tickMs:t?.tickMs,zeroConfig:t?.zeroConfig,initialFacts:t?.initialFacts});n.start(),svelte.onDestroy(()=>{n.destroy();});let o=t?.facts,a=t?.derived,S=!o&&!a,p=S?store.readable(n.facts.$store.toObject(),l=>n.facts.$store.subscribeAll(()=>{l(n.facts.$store.toObject());})):store.readable(adapterUtils.pickFacts(n,o??[]),l=>!o||o.length===0?()=>{}:n.facts.$store.subscribe(o,()=>{l(adapterUtils.pickFacts(n,o));})),f=S?Object.keys(n.derive??{}):a??[],d=()=>{let l={};for(let u of f)l[u]=n.read(u);return l},y=f.length>0?store.readable(d(),l=>n.subscribe(f,()=>{l(d());})):store.readable(d(),()=>()=>{}),b=n.events;return {system:n,facts:p,derived:y,events:b,dispatch:l=>n.dispatch(l),statusPlugin:r}}function Z(){return {useFact:(e,t)=>V(e,t),useDerived:(e,t)=>q(e,t),useDispatch:e=>t=>{e.dispatch(t);},useEvents:e=>A(e),useWatch:(e,t,s)=>P(e,t,s)}}Object.defineProperty(exports,"shallowEqual",{enumerable:true,get:function(){return adapterUtils.shallowEqual}});exports.createDerivedStore=w;exports.createDerivedsStore=C;exports.createFactStore=E;exports.createInspectStore=j;exports.createTypedHooks=Z;exports.useConstraintStatus=J;exports.useDerived=q;exports.useDirective=Y;exports.useDispatch=O;exports.useEvents=A;exports.useExplain=G;exports.useFact=V;exports.useInspect=H;exports.useOptimisticUpdate=Q;exports.useRequirementStatus=L;exports.useSelector=z;exports.useTimeTravel=X;exports.useWatch=P;//# sourceMappingURL=index.cjs.map
1
+ 'use strict';var svelte=require('svelte'),store=require('svelte/store'),core=require('@directive-run/core'),adapterUtils=require('@directive-run/core/adapter-utils');function C(e,t){return process.env.NODE_ENV!=="production"&&e.read(t)===void 0&&console.warn(`[Directive] createDerivedStore("${t}") returned undefined. Check that "${t}" is defined in your module's derive property.`),store.readable(e.read(t),r=>e.subscribe([t],()=>{r(e.read(t));}))}function E(e,t){let r=()=>{let n={};for(let s of t)n[s]=e.read(s);return n};return store.readable(r(),n=>e.subscribe(t,()=>{n(r());}))}function w(e,t){return process.env.NODE_ENV!=="production"&&(e.facts.$store.has(t)||console.warn(`[Directive] createFactStore("${t}") \u2014 fact not found in store. Check that "${t}" is defined in your module's schema.`)),store.readable(e.facts.$store.get(t),r=>e.facts.$store.subscribe([t],()=>{r(e.facts.$store.get(t));}))}function O(e){return store.readable(e.inspect(),t=>{let r=()=>t(e.inspect()),n=e.facts.$store.subscribeAll(r),s=e.onSettledChange(r);return ()=>{n(),s();}})}function V(e,t){return adapterUtils.assertSystem("useFact",e),process.env.NODE_ENV!=="production"&&typeof t=="function"&&console.error("[Directive] useFact() received a function. Did you mean useSelector()? useFact() takes a string key or array of keys, not a selector function."),Array.isArray(t)?$(e,t):w(e,t)}function $(e,t){let r=()=>{let n={};for(let s of t)n[s]=e.facts.$store.get(s);return n};return store.readable(r(),n=>e.facts.$store.subscribe(t,()=>{n(r());}))}function q(e,t){return adapterUtils.assertSystem("useDerived",e),process.env.NODE_ENV!=="production"&&typeof t=="function"&&console.error("[Directive] useDerived() received a function. Did you mean useSelector()? useDerived() takes a string key or array of keys, not a selector function."),Array.isArray(t)?E(e,t):C(e,t)}function j(e,t,r=adapterUtils.defaultEquality){adapterUtils.assertSystem("useSelector",e);let n=new Set(Object.keys(e.derive??{})),s=()=>adapterUtils.runTrackedSelector(e,n,t),o=s();return store.readable(o.value,l=>{let p=o.value,g=o.factKeys,S=o.deriveKeys,d=[],y=()=>{for(let c of d)c();d.length=0;let f=()=>{let c=s();r(p,c.value)||(p=c.value,l(c.value)),adapterUtils.depsChanged(g,c.factKeys,S,c.deriveKeys)&&(g=c.factKeys,S=c.deriveKeys,y());};g.length>0?d.push(e.facts.$store.subscribe(g,f)):S.length===0&&d.push(e.facts.$store.subscribeAll(f)),S.length>0&&d.push(e.subscribe(S,f));};return y(),()=>{for(let f of d)f();}})}function z(e){return adapterUtils.assertSystem("useDispatch",e),t=>{e.dispatch(t);}}function A(e){return adapterUtils.assertSystem("useEvents",e),e.events}function P(e,t,r){adapterUtils.assertSystem("useWatch",e);let n=e.watch(t,r);svelte.onDestroy(n);}function H(e,t){return adapterUtils.assertSystem("useInspect",e),t?.throttleMs&&t.throttleMs>0?store.readable(adapterUtils.computeInspectState(e),r=>{let{throttled:n,cleanup:s}=adapterUtils.createThrottle(()=>{r(adapterUtils.computeInspectState(e));},t.throttleMs),o=e.facts.$store.subscribeAll(n),l=e.onSettledChange(n);return ()=>{s(),o(),l();}}):store.readable(adapterUtils.computeInspectState(e),r=>{let n=()=>r(adapterUtils.computeInspectState(e)),s=e.facts.$store.subscribeAll(n),o=e.onSettledChange(n);return ()=>{s(),o();}})}function L(e,t){if(Array.isArray(t)){let r=()=>{let n={};for(let s of t)n[s]=e.getStatus(s);return n};return store.readable(r(),n=>e.subscribe(()=>{n(r());}))}return store.readable(e.getStatus(t),r=>e.subscribe(()=>{r(e.getStatus(t));}))}function G(e,t){return adapterUtils.assertSystem("useExplain",e),store.readable(e.explain(t),r=>{let n=()=>r(e.explain(t)),s=e.facts.$store.subscribeAll(n),o=e.onSettledChange(n);return ()=>{s(),o();}})}function J(e,t){return adapterUtils.assertSystem("useConstraintStatus",e),store.readable(x(e,t),r=>{let n=()=>r(x(e,t)),s=e.facts.$store.subscribeAll(n),o=e.onSettledChange(n);return ()=>{s(),o();}})}function x(e,t){let r=e.inspect();return t?r.constraints.find(n=>n.id===t)??null:r.constraints}function Q(e,t,r){adapterUtils.assertSystem("useOptimisticUpdate",e);let n=false,s=null,o=null,l=null,p=new Set,g=new Set,S={subscribe(u){return u(n),p.add(u),()=>p.delete(u)}},d={subscribe(u){return u(s),g.add(u),()=>g.delete(u)}},y=u=>{n=u;for(let v of p)v(u);},f=u=>{s=u;for(let v of g)v(u);},c=()=>{o&&(e.restore(o),o=null),y(false),f(null),l?.(),l=null;},a=u=>{o=e.getSnapshot(),y(true),f(null),e.batch(u),t&&r&&(l?.(),l=t.subscribe(()=>{let v=t.getStatus(r);!v.isLoading&&!v.hasError?(o=null,y(false),l?.(),l=null):v.hasError&&(f(v.lastError),c());}));};return svelte.onDestroy(()=>{l?.();}),{mutate:a,isPending:S,error:d,rollback:c}}function X(e){return adapterUtils.assertSystem("useTimeTravel",e),store.readable(adapterUtils.buildTimeTravelState(e),t=>e.onTimeTravelChange(()=>t(adapterUtils.buildTimeTravelState(e))))}function Y(e,t){let r=[...t?.plugins??[]],n;if(t?.status){let a=core.createRequirementStatusPlugin();n=a,r.push(a.plugin);}let s=core.createSystem({module:e,plugins:r.length>0?r:void 0,debug:t?.debug,errorBoundary:t?.errorBoundary,tickMs:t?.tickMs,zeroConfig:t?.zeroConfig,initialFacts:t?.initialFacts});s.start(),svelte.onDestroy(()=>{s.destroy();});let o=t?.facts,l=t?.derived,p=!o&&!l,g=p?store.readable(s.facts.$store.toObject(),a=>s.facts.$store.subscribeAll(()=>{a(s.facts.$store.toObject());})):store.readable(adapterUtils.pickFacts(s,o??[]),a=>!o||o.length===0?()=>{}:s.facts.$store.subscribe(o,()=>{a(adapterUtils.pickFacts(s,o));})),S=p?Object.keys(s.derive??{}):l??[],d=()=>{let a={};for(let u of S)a[u]=s.read(u);return a},y=S.length>0?store.readable(d(),a=>s.subscribe(S,()=>{a(d());})):store.readable(d(),()=>()=>{}),f=s.events;return {system:s,facts:g,derived:y,events:f,dispatch:a=>s.dispatch(a),statusPlugin:n}}function Z(){return {useFact:(e,t)=>V(e,t),useDerived:(e,t)=>q(e,t),useDispatch:e=>t=>{e.dispatch(t);},useEvents:e=>A(e),useWatch:(e,t,r)=>P(e,t,r)}}Object.defineProperty(exports,"shallowEqual",{enumerable:true,get:function(){return adapterUtils.shallowEqual}});exports.createDerivedStore=C;exports.createDerivedsStore=E;exports.createFactStore=w;exports.createInspectStore=O;exports.createTypedHooks=Z;exports.useConstraintStatus=J;exports.useDerived=q;exports.useDirective=Y;exports.useDispatch=z;exports.useEvents=A;exports.useExplain=G;exports.useFact=V;exports.useInspect=H;exports.useOptimisticUpdate=Q;exports.useRequirementStatus=L;exports.useSelector=j;exports.useTimeTravel=X;exports.useWatch=P;//# sourceMappingURL=index.cjs.map
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["createDerivedStore","system","derivationId","readable","set","createDerivedsStore","derivationIds","getValues","result","id","createFactStore","factKey","createInspectStore","update","unsubFacts","unsubSettled","useFact","keyOrKeys","assertSystem","_useFactMulti","factKeys","key","useDerived","idOrIds","useSelector","selector","equalityFn","defaultEquality","deriveKeySet","runWithTracking","runTrackedSelector","initial","currentSelected","trackedFactKeys","trackedDeriveKeys","unsubs","resubscribe","unsub","onUpdate","depsChanged","useDispatch","event","useEvents","useWatch","derivationIdOrKind","callbackOrFactKey","maybeCallback","isFact","callback","unsubscribe","onDestroy","useInspect","options","computeInspectState","throttled","cleanup","createThrottle","useRequirementStatus","statusPlugin","typeOrTypes","type","useExplain","requirementId","useConstraintStatus","constraintId","_getConstraintValue","inspection","c","useOptimisticUpdate","requirementType","isPendingValue","errorValue","snapshot","statusUnsub","pendingSubscribers","errorSubscribers","isPending","fn","error","setPending","v","setError","rollback","mutate","updateFn","status","useTimeTravel","buildTimeTravelState","useDirective","moduleDef","config","allPlugins","sp","createRequirementStatusPlugin","createSystem","derivedKeys","subscribeAll","factsStore","pickFacts","allDerivationKeys","getDerived","derivedStore","events","createTypedHooks"],"mappings":"sKA6DO,SAASA,CAAAA,CAEfC,CAAAA,CACAC,EACc,CACd,OAAI,OAAA,CAAQ,GAAA,CAAI,WAAa,YAAA,EACPD,CAAAA,CAAO,IAAA,CAAKC,CAAY,IACxB,MAAA,EACpB,OAAA,CAAQ,IAAA,CACP,CAAA,gCAAA,EAAmCA,CAAY,CAAA,mCAAA,EAChCA,CAAY,gDAC5B,CAAA,CAIKC,cAAAA,CAAYF,EAAO,IAAA,CAAKC,CAAY,CAAA,CAASE,CAAAA,EAC/BH,EAAO,SAAA,CAAU,CAACC,CAAY,CAAA,CAAG,IAAM,CAC1DE,CAAAA,CAAIH,CAAAA,CAAO,IAAA,CAAKC,CAAY,CAAM,EACnC,CAAC,CAED,CACF,CAKO,SAASG,CAAAA,CAEfJ,CAAAA,CACAK,CAAAA,CACc,CACd,IAAMC,CAAAA,CAAY,IAAS,CAC1B,IAAMC,CAAAA,CAAkC,EAAC,CACzC,IAAA,IAAWC,KAAMH,CAAAA,CAChBE,CAAAA,CAAOC,CAAE,CAAA,CAAIR,EAAO,IAAA,CAAKQ,CAAE,CAAA,CAE5B,OAAOD,CACR,CAAA,CAEA,OAAOL,cAAAA,CAAYI,CAAAA,GAAcH,CAAAA,EACZH,CAAAA,CAAO,SAAA,CAAUK,CAAAA,CAAe,IAAM,CACzDF,CAAAA,CAAIG,GAAW,EAChB,CAAC,CAED,CACF,CAKO,SAASG,EAEfT,CAAAA,CACAU,CAAAA,CAC0B,CAC1B,OAAI,QAAQ,GAAA,CAAI,QAAA,GAAa,YAAA,GACvBV,CAAAA,CAAO,MAAM,MAAA,CAAO,GAAA,CAAIU,CAAO,CAAA,EACnC,OAAA,CAAQ,KACP,CAAA,6BAAA,EAAgCA,CAAO,CAAA,+CAAA,EACxBA,CAAO,uCACvB,CAAA,CAAA,CAIKR,cAAAA,CACNF,CAAAA,CAAO,KAAA,CAAM,OAAO,GAAA,CAAIU,CAAO,CAAA,CAC9BP,CAAAA,EACoBH,EAAO,KAAA,CAAM,MAAA,CAAO,UAAU,CAACU,CAAO,EAAG,IAAM,CAClEP,CAAAA,CAAIH,CAAAA,CAAO,MAAM,MAAA,CAAO,GAAA,CAAIU,CAAO,CAAkB,EACtD,CAAC,CAGH,CACD,CAMO,SAASC,CAAAA,CAEfX,CAAAA,CAC6B,CAC7B,OAAOE,eAA2BF,CAAAA,CAAO,OAAA,EAAQ,CAAIG,CAAAA,EAAQ,CAC5D,IAAMS,CAAAA,CAAS,IAAMT,CAAAA,CAAIH,EAAO,OAAA,EAAS,CAAA,CACnCa,CAAAA,CAAab,EAAO,KAAA,CAAM,MAAA,CAAO,aAAaY,CAAM,CAAA,CACpDE,EAAed,CAAAA,CAAO,eAAA,CAAgBY,CAAM,CAAA,CAClD,OAAO,IAAM,CACZC,CAAAA,EAAW,CACXC,IACD,CACD,CAAC,CACF,CAWO,SAASC,CAAAA,CAEff,EACAgB,CAAAA,CACoB,CAUpB,OATAC,yBAAAA,CAAa,SAAA,CAAWjB,CAAM,CAAA,CAC1B,QAAQ,GAAA,CAAI,QAAA,GAAa,YAAA,EAAgB,OAAOgB,GAAc,UAAA,EACjE,OAAA,CAAQ,KAAA,CACP,gJAED,EAIG,KAAA,CAAM,OAAA,CAAQA,CAAS,CAAA,CACnBE,CAAAA,CAAclB,EAAQgB,CAAS,CAAA,CAIhCP,CAAAA,CAAgBT,CAAAA,CAAQgB,CAAS,CACzC,CAGA,SAASE,CAAAA,CAAclB,EAAiCmB,CAAAA,CAAuD,CAC9G,IAAMb,CAAAA,CAAY,IAA+B,CAChD,IAAMC,CAAAA,CAAkC,GACxC,IAAA,IAAWa,CAAAA,IAAOD,CAAAA,CACjBZ,CAAAA,CAAOa,CAAG,CAAA,CAAIpB,CAAAA,CAAO,KAAA,CAAM,MAAA,CAAO,IAAIoB,CAAG,CAAA,CAE1C,OAAOb,CACR,EAEA,OAAOL,cAAAA,CAASI,GAAU,CAAIH,CAAAA,EACTH,EAAO,KAAA,CAAM,MAAA,CAAO,SAAA,CAAUmB,CAAAA,CAAU,IAAM,CACjEhB,CAAAA,CAAIG,CAAAA,EAAW,EAChB,CAAC,CAED,CACF,CAWO,SAASe,CAAAA,CAEfrB,CAAAA,CACAsB,EACoB,CAUpB,OATAL,0BAAa,YAAA,CAAcjB,CAAM,CAAA,CAC7B,OAAA,CAAQ,IAAI,QAAA,GAAa,YAAA,EAAgB,OAAOsB,CAAAA,EAAY,YAC/D,OAAA,CAAQ,KAAA,CACP,sJAED,CAAA,CAIG,MAAM,OAAA,CAAQA,CAAO,EACjBlB,CAAAA,CAAoBJ,CAAAA,CAAQsB,CAAO,CAAA,CAIpCvB,CAAAA,CAAmBC,CAAAA,CAAQsB,CAAO,CAC1C,CAmBO,SAASC,CAAAA,CAEfvB,CAAAA,CAEAwB,EACAC,CAAAA,CAAkDC,4BAAAA,CAC9B,CACpBT,yBAAAA,CAAa,cAAejB,CAAM,CAAA,CAClC,IAAM2B,CAAAA,CAAe,IAAI,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK3B,CAAAA,CAAO,QAAU,EAAE,CAAC,CAAA,CAGvD4B,EAAkB,IAAMC,+BAAAA,CAAmB7B,CAAAA,CAAQ2B,CAAAA,CAAcH,CAAQ,CAAA,CAEzEM,CAAAA,CAAUF,GAAgB,CAEhC,OAAO1B,eAAS4B,CAAAA,CAAQ,KAAA,CAAQ3B,CAAAA,EAAQ,CACvC,IAAI4B,CAAAA,CAAkBD,CAAAA,CAAQ,KAAA,CAC1BE,CAAAA,CAAkBF,EAAQ,QAAA,CAC1BG,CAAAA,CAAoBH,CAAAA,CAAQ,UAAA,CAC1BI,EAA4B,EAAC,CAE7BC,EAAc,IAAM,CACzB,QAAWC,CAAAA,IAASF,CAAAA,CAAQE,CAAAA,EAAM,CAClCF,EAAO,MAAA,CAAS,CAAA,CAEhB,IAAMG,CAAAA,CAAW,IAAM,CACtB,IAAM9B,CAAAA,CAASqB,CAAAA,GACVH,CAAAA,CAAWM,CAAAA,CAAiBxB,EAAO,KAAK,CAAA,GAC5CwB,EAAkBxB,CAAAA,CAAO,KAAA,CACzBJ,CAAAA,CAAII,CAAAA,CAAO,KAAK,CAAA,CAAA,CAGb+B,wBAAAA,CAAYN,CAAAA,CAAiBzB,CAAAA,CAAO,SAAU0B,CAAAA,CAAmB1B,CAAAA,CAAO,UAAU,CAAA,GACrFyB,EAAkBzB,CAAAA,CAAO,QAAA,CACzB0B,CAAAA,CAAoB1B,CAAAA,CAAO,WAC3B4B,CAAAA,EAAY,EAEd,CAAA,CAEIH,CAAAA,CAAgB,OAAS,CAAA,CAC5BE,CAAAA,CAAO,IAAA,CAAKlC,CAAAA,CAAO,MAAM,MAAA,CAAO,SAAA,CAAUgC,CAAAA,CAAiBK,CAAQ,CAAC,CAAA,CAC1DJ,CAAAA,CAAkB,SAAW,CAAA,EACvCC,CAAAA,CAAO,KAAKlC,CAAAA,CAAO,KAAA,CAAM,MAAA,CAAO,YAAA,CAAaqC,CAAQ,CAAC,CAAA,CAEnDJ,CAAAA,CAAkB,MAAA,CAAS,GAC9BC,CAAAA,CAAO,IAAA,CAAKlC,CAAAA,CAAO,SAAA,CAAUiC,EAAmBI,CAAQ,CAAC,EAE3D,CAAA,CAEA,OAAAF,GAAY,CAEL,IAAM,CACZ,IAAA,IAAWC,KAASF,CAAAA,CAAQE,CAAAA,GAC7B,CACD,CAAC,CACF,CAMO,SAASG,CAAAA,CACfvC,EACkC,CAClC,OAAAiB,0BAAa,aAAA,CAAejB,CAAM,EAC1BwC,CAAAA,EAA0B,CACjCxC,CAAAA,CAAO,QAAA,CAASwC,CAAK,EACtB,CACD,CASO,SAASC,EACfzC,CAAAA,CACkC,CAClC,OAAAiB,yBAAAA,CAAa,YAAajB,CAAM,CAAA,CACzBA,CAAAA,CAAO,MACf,CAoCO,SAAS0C,CAAAA,CAEf1C,CAAAA,CACA2C,CAAAA,CACAC,EACAC,CAAAA,CACO,CACP5B,yBAAAA,CAAa,UAAA,CAAYjB,CAAM,CAAA,CAE/B,IAAM8C,CAAAA,CACLH,CAAAA,GAAuB,QACvB,OAAOC,CAAAA,EAAsB,UAC7B,OAAOC,CAAAA,EAAkB,WAEpBzB,CAAAA,CAAM0B,CAAAA,CAAUF,CAAAA,CAA+BD,CAAAA,CAC/CI,EAAWD,CAAAA,CACdD,CAAAA,CACCD,CAAAA,CAEEI,CAAAA,CAAchD,EAAO,KAAA,CAAMoB,CAAAA,CAAK2B,CAAQ,CAAA,CAC9CE,iBAAUD,CAAW,EACtB,CAeO,SAASE,CAAAA,CAEflD,EACAmD,CAAAA,CACyB,CAEzB,OADAlC,yBAAAA,CAAa,aAAcjB,CAAM,CAAA,CAC7BmD,CAAAA,EAAS,UAAA,EAAcA,EAAQ,UAAA,CAAa,CAAA,CACxCjD,cAAAA,CAAuBkD,gCAAAA,CAAoBpD,CAAM,CAAA,CAAIG,CAAAA,EAAQ,CACnE,GAAM,CAAE,UAAAkD,CAAAA,CAAW,OAAA,CAAAC,CAAQ,CAAA,CAAIC,4BAAe,IAAM,CACnDpD,CAAAA,CAAIiD,gCAAAA,CAAoBpD,CAAM,CAAC,EAChC,CAAA,CAAGmD,CAAAA,CAAQ,UAAW,CAAA,CAEhBtC,CAAAA,CAAab,EAAO,KAAA,CAAM,MAAA,CAAO,aAAaqD,CAAS,CAAA,CACvDvC,CAAAA,CAAed,CAAAA,CAAO,gBAAgBqD,CAAS,CAAA,CAErD,OAAO,IAAM,CACZC,CAAAA,EAAQ,CACRzC,CAAAA,EAAW,CACXC,IACD,CACD,CAAC,CAAA,CAGKZ,cAAAA,CAAuBkD,iCAAoBpD,CAAM,CAAA,CAAIG,CAAAA,EAAQ,CACnE,IAAMS,CAAAA,CAAS,IAAMT,CAAAA,CAAIiD,gCAAAA,CAAoBpD,CAAM,CAAC,CAAA,CAC9Ca,CAAAA,CAAab,CAAAA,CAAO,MAAM,MAAA,CAAO,YAAA,CAAaY,CAAM,CAAA,CACpDE,CAAAA,CAAed,EAAO,eAAA,CAAgBY,CAAM,CAAA,CAElD,OAAO,IAAM,CACZC,CAAAA,EAAW,CACXC,CAAAA,GACD,CACD,CAAC,CACF,CAWO,SAAS0C,CAAAA,CACfC,CAAAA,CACAC,EACoF,CACpF,GAAI,MAAM,OAAA,CAAQA,CAAW,CAAA,CAAG,CAC/B,IAAMpD,CAAAA,CAAY,IAA6C,CAC9D,IAAMC,EAAgD,EAAC,CACvD,IAAA,IAAWoD,CAAAA,IAAQD,EAClBnD,CAAAA,CAAOoD,CAAI,CAAA,CAAIF,CAAAA,CAAa,UAAUE,CAAI,CAAA,CAE3C,OAAOpD,CACR,EAEA,OAAOL,cAAAA,CAASI,CAAAA,EAAU,CAAIH,GACTsD,CAAAA,CAAa,SAAA,CAAU,IAAM,CAChDtD,EAAIG,CAAAA,EAAW,EAChB,CAAC,CAED,CACF,CAEA,OAAOJ,cAAAA,CAAgCuD,CAAAA,CAAa,UAAUC,CAAW,CAAA,CAAIvD,CAAAA,EACxDsD,CAAAA,CAAa,UAAU,IAAM,CAChDtD,CAAAA,CAAIsD,CAAAA,CAAa,UAAUC,CAAW,CAAC,EACxC,CAAC,CAED,CACF,CASO,SAASE,CAAAA,CAEf5D,CAAAA,CACA6D,EAC0B,CAC1B,OAAA5C,yBAAAA,CAAa,YAAA,CAAcjB,CAAM,CAAA,CAC1BE,cAAAA,CAAwBF,CAAAA,CAAO,OAAA,CAAQ6D,CAAa,CAAA,CAAI1D,CAAAA,EAAQ,CACtE,IAAMS,CAAAA,CAAS,IAAMT,CAAAA,CAAIH,CAAAA,CAAO,OAAA,CAAQ6D,CAAa,CAAC,CAAA,CAChDhD,CAAAA,CAAab,CAAAA,CAAO,KAAA,CAAM,OAAO,YAAA,CAAaY,CAAM,CAAA,CACpDE,CAAAA,CAAed,EAAO,eAAA,CAAgBY,CAAM,CAAA,CAElD,OAAO,IAAM,CACZC,CAAAA,EAAW,CACXC,CAAAA,GACD,CACD,CAAC,CACF,CAgBO,SAASgD,CAAAA,CAEf9D,CAAAA,CACA+D,CAAAA,CACqD,CACrD,OAAA9C,yBAAAA,CAAa,qBAAA,CAAuBjB,CAAM,CAAA,CACnCE,cAAAA,CACN8D,EAAoBhE,CAAAA,CAAQ+D,CAAY,CAAA,CACvC5D,CAAAA,EAAQ,CACR,IAAMS,CAAAA,CAAS,IAAMT,CAAAA,CAAI6D,EAAoBhE,CAAAA,CAAQ+D,CAAY,CAAC,CAAA,CAC5DlD,EAAab,CAAAA,CAAO,KAAA,CAAM,OAAO,YAAA,CAAaY,CAAM,EACpDE,CAAAA,CAAed,CAAAA,CAAO,eAAA,CAAgBY,CAAM,EAElD,OAAO,IAAM,CACZC,CAAAA,GACAC,CAAAA,GACD,CACD,CACD,CACD,CAEA,SAASkD,EAERhE,CAAAA,CACA+D,CAAAA,CAC2C,CAC3C,IAAME,CAAAA,CAAajE,CAAAA,CAAO,OAAA,GAC1B,OAAK+D,CAAAA,CACEE,CAAAA,CAAW,WAAA,CAAY,KAAMC,CAAAA,EAAsBA,CAAAA,CAAE,EAAA,GAAOH,CAAY,GAAK,IAAA,CAD1DE,CAAAA,CAAW,WAEtC,CAiBO,SAASE,CAAAA,CAEfnE,CAAAA,CACAyD,CAAAA,CACAW,CAAAA,CACyB,CACzBnD,yBAAAA,CAAa,qBAAA,CAAuBjB,CAAM,CAAA,CAC1C,IAAIqE,CAAAA,CAAiB,KAAA,CACjBC,CAAAA,CAA2B,IAAA,CAC3BC,EAAkC,IAAA,CAClCC,CAAAA,CAAmC,KAGjCC,CAAAA,CAAqB,IAAI,IACzBC,CAAAA,CAAmB,IAAI,GAAA,CAEvBC,CAAAA,CAA+B,CACpC,SAAA,CAAUC,CAAAA,CAAI,CACb,OAAAA,EAAGP,CAAc,CAAA,CACjBI,CAAAA,CAAmB,GAAA,CAAIG,CAAE,CAAA,CAClB,IAAMH,EAAmB,MAAA,CAAOG,CAAE,CAC1C,CACD,CAAA,CAEMC,CAAAA,CAAgC,CACrC,UAAUD,CAAAA,CAAI,CACb,OAAAA,CAAAA,CAAGN,CAAU,CAAA,CACbI,CAAAA,CAAiB,GAAA,CAAIE,CAAE,EAChB,IAAMF,CAAAA,CAAiB,OAAOE,CAAE,CACxC,CACD,CAAA,CAEME,CAAAA,CAAcC,CAAAA,EAAe,CAClCV,EAAiBU,CAAAA,CACjB,IAAA,IAAWH,CAAAA,IAAMH,CAAAA,CAAoBG,EAAGG,CAAC,EAC1C,CAAA,CAEMC,CAAAA,CAAYD,GAAoB,CACrCT,CAAAA,CAAaS,CAAAA,CACb,IAAA,IAAWH,KAAMF,CAAAA,CAAkBE,CAAAA,CAAGG,CAAC,EACxC,EAEME,CAAAA,CAAW,IAAM,CAClBV,CAAAA,GACHvE,EAAO,OAAA,CAAQuE,CAAQ,CAAA,CACvBA,CAAAA,CAAW,MAEZO,CAAAA,CAAW,KAAK,EAChBE,CAAAA,CAAS,IAAI,EACbR,CAAAA,IAAc,CACdA,CAAAA,CAAc,KACf,EAEMU,CAAAA,CAAUC,CAAAA,EAAyB,CACxCZ,CAAAA,CAAWvE,EAAO,WAAA,EAAY,CAC9B8E,CAAAA,CAAW,IAAI,EACfE,CAAAA,CAAS,IAAI,EACbhF,CAAAA,CAAO,KAAA,CAAMmF,CAAQ,CAAA,CAEjB1B,CAAAA,EAAgBW,CAAAA,GACnBI,CAAAA,KACAA,CAAAA,CAAcf,CAAAA,CAAa,SAAA,CAAU,IAAM,CAC1C,IAAM2B,CAAAA,CAAS3B,CAAAA,CAAa,SAAA,CAAUW,CAAe,CAAA,CACjD,CAACgB,EAAO,SAAA,EAAa,CAACA,EAAO,QAAA,EAChCb,CAAAA,CAAW,IAAA,CACXO,CAAAA,CAAW,KAAK,CAAA,CAChBN,CAAAA,IAAc,CACdA,CAAAA,CAAc,MACJY,CAAAA,CAAO,QAAA,GACjBJ,CAAAA,CAASI,CAAAA,CAAO,SAAS,CAAA,CACzBH,CAAAA,EAAS,EAEX,CAAC,GAEH,CAAA,CAEA,OAAAhC,gBAAAA,CAAU,IAAM,CACfuB,CAAAA,KACD,CAAC,CAAA,CAEM,CAAE,MAAA,CAAAU,CAAAA,CAAQ,SAAA,CAAAP,CAAAA,CAAW,MAAAE,CAAAA,CAAO,QAAA,CAAAI,CAAS,CAC7C,CAgBO,SAASI,CAAAA,CAEfrF,CAAAA,CACmC,CACnC,OAAAiB,0BAAa,eAAA,CAAiBjB,CAAM,CAAA,CAC7BE,cAAAA,CAAiCoF,kCAAqBtF,CAAM,CAAA,CAAIG,CAAAA,EAC/DH,CAAAA,CAAO,mBAAmB,IAAMG,CAAAA,CAAImF,kCAAqBtF,CAAM,CAAC,CAAC,CACxE,CACF,CAqCO,SAASuF,EACfC,CAAAA,CACAC,CAAAA,CACC,CACD,IAAMC,EAAa,CAAC,GAAID,CAAAA,EAAQ,OAAA,EAAW,EAAG,CAAA,CAC1ChC,EAEJ,GAAIgC,CAAAA,EAAQ,OAAQ,CACnB,IAAME,CAAAA,CAAKC,kCAAAA,GACXnC,CAAAA,CAAekC,CAAAA,CAEfD,CAAAA,CAAW,IAAA,CAAKC,EAAG,MAAqB,EACzC,CAGA,IAAM3F,EAAS6F,iBAAAA,CAAa,CAC3B,MAAA,CAAQL,CAAAA,CACR,QAASE,CAAAA,CAAW,MAAA,CAAS,CAAA,CAAIA,CAAAA,CAAa,OAC9C,KAAA,CAAOD,CAAAA,EAAQ,KAAA,CACf,aAAA,CAAeA,GAAQ,aAAA,CACvB,MAAA,CAAQA,CAAAA,EAAQ,MAAA,CAChB,WAAYA,CAAAA,EAAQ,UAAA,CACpB,aAAcA,CAAAA,EAAQ,YACvB,CAAQ,CAAA,CAERzF,CAAAA,CAAO,KAAA,EAAM,CAEbiD,iBAAU,IAAM,CACfjD,CAAAA,CAAO,OAAA,GACR,CAAC,CAAA,CAED,IAAMmB,CAAAA,CAAWsE,GAAQ,KAAA,CACnBK,CAAAA,CAAcL,GAAQ,OAAA,CACtBM,CAAAA,CAAe,CAAC5E,CAAAA,EAAY,CAAC2E,CAAAA,CAG7BE,CAAAA,CAAsCD,EACzC7F,cAAAA,CAASF,CAAAA,CAAO,KAAA,CAAM,MAAA,CAAO,UAAS,CAAqBG,CAAAA,EACrDH,CAAAA,CAAO,KAAA,CAAM,OAAO,YAAA,CAAa,IAAM,CAC7CG,CAAAA,CAAIH,CAAAA,CAAO,MAAM,MAAA,CAAO,QAAA,EAA2B,EACpD,CAAC,CACD,CAAA,CACCE,cAAAA,CAAS+F,sBAAAA,CAAUjG,EAAQmB,CAAAA,EAAY,EAAE,CAAA,CAAqBhB,GAC3D,CAACgB,CAAAA,EAAYA,CAAAA,CAAS,MAAA,GAAW,EAAU,IAAM,CAAC,CAAA,CAC/CnB,CAAAA,CAAO,MAAM,MAAA,CAAO,SAAA,CAAUmB,CAAAA,CAAU,IAAM,CACpDhB,CAAAA,CAAI8F,sBAAAA,CAAUjG,CAAAA,CAAQmB,CAAQ,CAAkB,EACjD,CAAC,CACD,CAAA,CAGI+E,CAAAA,CAAoBH,EAAe,MAAA,CAAO,IAAA,CAAK/F,CAAAA,CAAO,MAAA,EAAU,EAAE,CAAA,CAAK8F,CAAAA,EAAe,GACtFK,CAAAA,CAAa,IAA2B,CAC7C,IAAM5F,EAAkC,EAAC,CACzC,QAAWa,CAAAA,IAAO8E,CAAAA,CACjB3F,EAAOa,CAAG,CAAA,CAAIpB,CAAAA,CAAO,IAAA,CAAKoB,CAAG,CAAA,CAE9B,OAAOb,CACR,CAAA,CACM6F,EAA8CF,CAAAA,CAAkB,MAAA,CAAS,CAAA,CAC5EhG,cAAAA,CAASiG,GAAW,CAAIhG,CAAAA,EAClBH,EAAO,SAAA,CAAUkG,CAAAA,CAAmB,IAAM,CAChD/F,CAAAA,CAAIgG,CAAAA,EAAY,EACjB,CAAC,CACD,CAAA,CACCjG,cAAAA,CAASiG,GAAW,CAAG,IAAM,IAAM,CAAC,CAAC,CAAA,CAElCE,CAAAA,CAASrG,EAAO,MAAA,CAGtB,OAAO,CACN,MAAA,CAAAA,CAAAA,CACA,KAAA,CAAOgG,CAAAA,CACP,QAASI,CAAAA,CACT,MAAA,CAAAC,CAAAA,CACA,QAAA,CAPiB7D,GAA0BxC,CAAAA,CAAO,QAAA,CAASwC,CAAK,CAAA,CAQhE,aAAAiB,CACD,CACD,CAMO,SAAS6C,CAAAA,EAgBd,CACD,OAAO,CACN,OAAA,CAAS,CAAyCtG,EAA+BU,CAAAA,GAEhFK,CAAAA,CAAQf,CAAAA,CAAmCU,CAAO,EACnD,UAAA,CAAY,CAA+CV,CAAAA,CAA+BC,CAAAA,GAEzFoB,EAAWrB,CAAAA,CAAmCC,CAAY,EAC3D,WAAA,CAAcD,CAAAA,EACLwC,GAA0B,CACjCxC,CAAAA,CAAO,QAAA,CAASwC,CAAK,EACtB,CAAA,CAED,SAAA,CAAYxC,CAAAA,EAAkCyC,CAAAA,CAAazC,CAAM,CAAA,CACjE,QAAA,CAAU,CACTA,CAAAA,CACAoB,EACA2B,CAAAA,GAGAL,CAAAA,CAAS1C,EAAmCoB,CAAAA,CAAK2B,CAAQ,CAC3D,CACD","file":"index.cjs","sourcesContent":["/**\n * Svelte Adapter - Consolidated Svelte stores for Directive\n *\n * 15 active exports: useFact, useDerived, useDispatch, useSelector,\n * useWatch, useInspect, useRequirementStatus, useEvents, useExplain,\n * useConstraintStatus, useOptimisticUpdate, useDirective, useTimeTravel,\n * createTypedHooks, shallowEqual\n *\n * Store factories: createDerivedStore, createDerivedsStore, createFactStore, createInspectStore\n */\n\nimport { onDestroy } from \"svelte\";\nimport { readable, type Readable } from \"svelte/store\";\nimport type {\n\tModuleSchema,\n\tModuleDef,\n\tPlugin,\n\tDebugConfig,\n\tErrorBoundaryConfig,\n\tInferFacts,\n\tInferDerivations,\n\tInferSelectorState,\n\tInferEvents,\n\tSingleModuleSystem,\n\tSystemInspection,\n\tSystemSnapshot,\n\tTimeTravelState,\n} from \"@directive-run/core\";\nimport {\n\tcreateSystem,\n\tcreateRequirementStatusPlugin,\n} from \"@directive-run/core\";\nimport type { RequirementTypeStatus } from \"@directive-run/core\";\nimport {\n\ttype InspectState,\n\ttype ConstraintInfo,\n\tcomputeInspectState,\n\tcreateThrottle,\n\tassertSystem,\n\tdefaultEquality,\n\tbuildTimeTravelState,\n\tpickFacts,\n\trunTrackedSelector,\n\tdepsChanged,\n\tshallowEqual,\n} from \"@directive-run/core/adapter-utils\";\n\n// Re-export for convenience\nexport type { RequirementTypeStatus, InspectState, ConstraintInfo };\nexport { shallowEqual };\n\n/** Type for the requirement status plugin return value */\nexport type StatusPlugin = ReturnType<typeof createRequirementStatusPlugin>;\n\n// ============================================================================\n// Store Factories\n// ============================================================================\n\n/**\n * Create a Svelte store for a derived value.\n */\nexport function createDerivedStore<T>(\n\t// biome-ignore lint/suspicious/noExplicitAny: System type varies\n\tsystem: SingleModuleSystem<any>,\n\tderivationId: string,\n): Readable<T> {\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\tconst initialValue = system.read(derivationId);\n\t\tif (initialValue === undefined) {\n\t\t\tconsole.warn(\n\t\t\t\t`[Directive] createDerivedStore(\"${derivationId}\") returned undefined. ` +\n\t\t\t\t`Check that \"${derivationId}\" is defined in your module's derive property.`,\n\t\t\t);\n\t\t}\n\t}\n\n\treturn readable<T>(system.read(derivationId) as T, (set) => {\n\t\tconst unsubscribe = system.subscribe([derivationId], () => {\n\t\t\tset(system.read(derivationId) as T);\n\t\t});\n\t\treturn unsubscribe;\n\t});\n}\n\n/**\n * Create a Svelte store for multiple derived values.\n */\nexport function createDerivedsStore<T extends Record<string, unknown>>(\n\t// biome-ignore lint/suspicious/noExplicitAny: System type varies\n\tsystem: SingleModuleSystem<any>,\n\tderivationIds: string[],\n): Readable<T> {\n\tconst getValues = (): T => {\n\t\tconst result: Record<string, unknown> = {};\n\t\tfor (const id of derivationIds) {\n\t\t\tresult[id] = system.read(id);\n\t\t}\n\t\treturn result as T;\n\t};\n\n\treturn readable<T>(getValues(), (set) => {\n\t\tconst unsubscribe = system.subscribe(derivationIds, () => {\n\t\t\tset(getValues());\n\t\t});\n\t\treturn unsubscribe;\n\t});\n}\n\n/**\n * Create a Svelte store for a single fact value.\n */\nexport function createFactStore<T>(\n\t// biome-ignore lint/suspicious/noExplicitAny: System type varies\n\tsystem: SingleModuleSystem<any>,\n\tfactKey: string,\n): Readable<T | undefined> {\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\tif (!system.facts.$store.has(factKey)) {\n\t\t\tconsole.warn(\n\t\t\t\t`[Directive] createFactStore(\"${factKey}\") — fact not found in store. ` +\n\t\t\t\t`Check that \"${factKey}\" is defined in your module's schema.`,\n\t\t\t);\n\t\t}\n\t}\n\n\treturn readable<T | undefined>(\n\t\tsystem.facts.$store.get(factKey) as T | undefined,\n\t\t(set) => {\n\t\t\tconst unsubscribe = system.facts.$store.subscribe([factKey], () => {\n\t\t\t\tset(system.facts.$store.get(factKey) as T | undefined);\n\t\t\t});\n\t\t\treturn unsubscribe;\n\t\t},\n\t);\n}\n\n/**\n * Create a Svelte store for system inspection data.\n * NOTE: This updates on every fact change. Use sparingly in production.\n */\nexport function createInspectStore(\n\t// biome-ignore lint/suspicious/noExplicitAny: System type varies\n\tsystem: SingleModuleSystem<any>,\n): Readable<SystemInspection> {\n\treturn readable<SystemInspection>(system.inspect(), (set) => {\n\t\tconst update = () => set(system.inspect());\n\t\tconst unsubFacts = system.facts.$store.subscribeAll(update);\n\t\tconst unsubSettled = system.onSettledChange(update);\n\t\treturn () => {\n\t\t\tunsubFacts();\n\t\t\tunsubSettled();\n\t\t};\n\t});\n}\n\n// ============================================================================\n// useFact — single key or multi key\n// ============================================================================\n\n/** Single key overload */\nexport function useFact<S extends ModuleSchema, K extends keyof InferFacts<S> & string>(system: SingleModuleSystem<S>, factKey: K): Readable<InferFacts<S>[K] | undefined>;\n/** Multi-key overload */\nexport function useFact<S extends ModuleSchema, K extends keyof InferFacts<S> & string>(system: SingleModuleSystem<S>, factKeys: K[]): Readable<Pick<InferFacts<S>, K>>;\n/** Implementation */\nexport function useFact(\n\t// biome-ignore lint/suspicious/noExplicitAny: Implementation signature\n\tsystem: SingleModuleSystem<any>,\n\tkeyOrKeys: string | string[],\n): Readable<unknown> {\n\tassertSystem(\"useFact\", system);\n\tif (process.env.NODE_ENV !== \"production\" && typeof keyOrKeys === \"function\") {\n\t\tconsole.error(\n\t\t\t\"[Directive] useFact() received a function. Did you mean useSelector()? \" +\n\t\t\t\t\"useFact() takes a string key or array of keys, not a selector function.\",\n\t\t);\n\t}\n\n\t// Multi-key path: useFact(system, [keys])\n\tif (Array.isArray(keyOrKeys)) {\n\t\treturn _useFactMulti(system, keyOrKeys);\n\t}\n\n\t// Single key path: useFact(system, key)\n\treturn createFactStore(system, keyOrKeys);\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: Internal\nfunction _useFactMulti(system: SingleModuleSystem<any>, factKeys: string[]): Readable<Record<string, unknown>> {\n\tconst getValues = (): Record<string, unknown> => {\n\t\tconst result: Record<string, unknown> = {};\n\t\tfor (const key of factKeys) {\n\t\t\tresult[key] = system.facts.$store.get(key);\n\t\t}\n\t\treturn result;\n\t};\n\n\treturn readable(getValues(), (set) => {\n\t\tconst unsubscribe = system.facts.$store.subscribe(factKeys, () => {\n\t\t\tset(getValues());\n\t\t});\n\t\treturn unsubscribe;\n\t});\n}\n\n// ============================================================================\n// useDerived — single key or multi key\n// ============================================================================\n\n/** Single key overload */\nexport function useDerived<S extends ModuleSchema, K extends keyof InferDerivations<S> & string>(system: SingleModuleSystem<S>, derivationId: K): Readable<InferDerivations<S>[K]>;\n/** Multi-key overload */\nexport function useDerived<S extends ModuleSchema, K extends keyof InferDerivations<S> & string>(system: SingleModuleSystem<S>, derivationIds: K[]): Readable<Pick<InferDerivations<S>, K>>;\n/** Implementation */\nexport function useDerived(\n\t// biome-ignore lint/suspicious/noExplicitAny: Implementation signature\n\tsystem: SingleModuleSystem<any>,\n\tidOrIds: string | string[],\n): Readable<unknown> {\n\tassertSystem(\"useDerived\", system);\n\tif (process.env.NODE_ENV !== \"production\" && typeof idOrIds === \"function\") {\n\t\tconsole.error(\n\t\t\t\"[Directive] useDerived() received a function. Did you mean useSelector()? \" +\n\t\t\t\t\"useDerived() takes a string key or array of keys, not a selector function.\",\n\t\t);\n\t}\n\n\t// Multi-key path\n\tif (Array.isArray(idOrIds)) {\n\t\treturn createDerivedsStore(system, idOrIds);\n\t}\n\n\t// Single key path\n\treturn createDerivedStore(system, idOrIds);\n}\n\n// ============================================================================\n// useSelector — auto-tracking selector over facts and derivations\n// ============================================================================\n\n/**\n * Auto-tracking selector over facts and derivations.\n * Uses `withTracking()` to detect which facts the selector accesses,\n * then subscribes only to those keys.\n */\nexport function useSelector<S extends ModuleSchema, R>(system: SingleModuleSystem<S>, selector: (state: InferSelectorState<S>) => R, equalityFn?: (a: R, b: R) => boolean): Readable<R>;\nexport function useSelector<R>(\n\t// biome-ignore lint/suspicious/noExplicitAny: Backward-compatible fallback\n\tsystem: SingleModuleSystem<any>,\n\t// biome-ignore lint/suspicious/noExplicitAny: Selector receives dynamic state\n\tselector: (state: Record<string, any>) => R,\n\tequalityFn?: (a: R, b: R) => boolean,\n): Readable<R>;\nexport function useSelector(\n\t// biome-ignore lint/suspicious/noExplicitAny: Implementation signature\n\tsystem: SingleModuleSystem<any>,\n\t// biome-ignore lint/suspicious/noExplicitAny: Implementation signature\n\tselector: (state: any) => unknown,\n\tequalityFn: (a: unknown, b: unknown) => boolean = defaultEquality,\n): Readable<unknown> {\n\tassertSystem(\"useSelector\", system);\n\tconst deriveKeySet = new Set(Object.keys(system.derive ?? {}));\n\n\t// Build a tracking-aware state proxy that exposes both facts and derivations\n\tconst runWithTracking = () => runTrackedSelector(system, deriveKeySet, selector);\n\n\tconst initial = runWithTracking();\n\n\treturn readable(initial.value, (set) => {\n\t\tlet currentSelected = initial.value;\n\t\tlet trackedFactKeys = initial.factKeys;\n\t\tlet trackedDeriveKeys = initial.deriveKeys;\n\t\tconst unsubs: Array<() => void> = [];\n\n\t\tconst resubscribe = () => {\n\t\t\tfor (const unsub of unsubs) unsub();\n\t\t\tunsubs.length = 0;\n\n\t\t\tconst onUpdate = () => {\n\t\t\t\tconst result = runWithTracking();\n\t\t\t\tif (!equalityFn(currentSelected, result.value)) {\n\t\t\t\t\tcurrentSelected = result.value;\n\t\t\t\t\tset(result.value);\n\t\t\t\t}\n\t\t\t\t// Re-track: check if deps changed\n\t\t\t\tif (depsChanged(trackedFactKeys, result.factKeys, trackedDeriveKeys, result.deriveKeys)) {\n\t\t\t\t\ttrackedFactKeys = result.factKeys;\n\t\t\t\t\ttrackedDeriveKeys = result.deriveKeys;\n\t\t\t\t\tresubscribe();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tif (trackedFactKeys.length > 0) {\n\t\t\t\tunsubs.push(system.facts.$store.subscribe(trackedFactKeys, onUpdate));\n\t\t\t} else if (trackedDeriveKeys.length === 0) {\n\t\t\t\tunsubs.push(system.facts.$store.subscribeAll(onUpdate));\n\t\t\t}\n\t\t\tif (trackedDeriveKeys.length > 0) {\n\t\t\t\tunsubs.push(system.subscribe(trackedDeriveKeys, onUpdate));\n\t\t\t}\n\t\t};\n\n\t\tresubscribe();\n\n\t\treturn () => {\n\t\t\tfor (const unsub of unsubs) unsub();\n\t\t};\n\t});\n}\n\n// ============================================================================\n// useDispatch\n// ============================================================================\n\nexport function useDispatch<S extends ModuleSchema>(\n\tsystem: SingleModuleSystem<S>,\n): (event: InferEvents<S>) => void {\n\tassertSystem(\"useDispatch\", system);\n\treturn (event: InferEvents<S>) => {\n\t\tsystem.dispatch(event);\n\t};\n}\n\n// ============================================================================\n// useEvents — memoized events reference\n// ============================================================================\n\n/**\n * Returns the system's events dispatcher.\n */\nexport function useEvents<S extends ModuleSchema>(\n\tsystem: SingleModuleSystem<S>,\n): SingleModuleSystem<S>[\"events\"] {\n\tassertSystem(\"useEvents\", system);\n\treturn system.events;\n}\n\n// ============================================================================\n// useWatch — derivation or fact side-effect\n// ============================================================================\n\n/** Watch a derivation or fact by key (auto-detected). When a key exists in both facts and derivations, the derivation overload takes priority. */\nexport function useWatch<S extends ModuleSchema, K extends keyof InferDerivations<S> & string>(\n\tsystem: SingleModuleSystem<S>,\n\tkey: K,\n\tcallback: (newValue: InferDerivations<S>[K], previousValue: InferDerivations<S>[K] | undefined) => void,\n): void;\n/** Watch a fact key with auto-detection. */\nexport function useWatch<S extends ModuleSchema, K extends keyof InferFacts<S> & string>(\n\tsystem: SingleModuleSystem<S>,\n\tkey: K,\n\tcallback: (newValue: InferFacts<S>[K] | undefined, previousValue: InferFacts<S>[K] | undefined) => void,\n): void;\n/**\n * Watch a fact by explicit \"fact\" discriminator.\n * @deprecated Use `useWatch(system, key, callback)` instead — facts are now auto-detected.\n */\nexport function useWatch<S extends ModuleSchema, K extends keyof InferFacts<S> & string>(\n\tsystem: SingleModuleSystem<S>,\n\tkind: \"fact\",\n\tfactKey: K,\n\tcallback: (newValue: InferFacts<S>[K] | undefined, previousValue: InferFacts<S>[K] | undefined) => void,\n): void;\n/** Watch a fact or derivation (generic fallback) */\nexport function useWatch<T>(\n\t// biome-ignore lint/suspicious/noExplicitAny: Backward-compatible fallback\n\tsystem: SingleModuleSystem<any>,\n\tkey: string,\n\tcallback: (newValue: T, previousValue: T | undefined) => void,\n): void;\n/** Implementation */\nexport function useWatch(\n\t// biome-ignore lint/suspicious/noExplicitAny: Implementation signature\n\tsystem: SingleModuleSystem<any>,\n\tderivationIdOrKind: string,\n\tcallbackOrFactKey: string | ((newValue: unknown, prevValue: unknown) => void),\n\tmaybeCallback?: (newValue: unknown, prevValue: unknown) => void,\n): void {\n\tassertSystem(\"useWatch\", system);\n\t// Backward compat: useWatch(system, \"fact\", factKey, callback)\n\tconst isFact =\n\t\tderivationIdOrKind === \"fact\" &&\n\t\ttypeof callbackOrFactKey === \"string\" &&\n\t\ttypeof maybeCallback === \"function\";\n\n\tconst key = isFact ? (callbackOrFactKey as string) : derivationIdOrKind;\n\tconst callback = isFact\n\t\t? maybeCallback!\n\t\t: (callbackOrFactKey as (newValue: unknown, prevValue: unknown) => void);\n\n\tconst unsubscribe = system.watch(key, callback);\n\tonDestroy(unsubscribe);\n}\n\n// ============================================================================\n// useInspect — consolidated inspection hook\n// ============================================================================\n\n/** Options for useInspect */\nexport interface UseInspectOptions {\n\tthrottleMs?: number;\n}\n\n/**\n * Consolidated system inspection hook.\n * Returns Readable<InspectState> with optional throttling.\n */\nexport function useInspect(\n\t// biome-ignore lint/suspicious/noExplicitAny: Must work with any schema\n\tsystem: SingleModuleSystem<any>,\n\toptions?: UseInspectOptions,\n): Readable<InspectState> {\n\tassertSystem(\"useInspect\", system);\n\tif (options?.throttleMs && options.throttleMs > 0) {\n\t\treturn readable<InspectState>(computeInspectState(system), (set) => {\n\t\t\tconst { throttled, cleanup } = createThrottle(() => {\n\t\t\t\tset(computeInspectState(system));\n\t\t\t}, options.throttleMs!);\n\n\t\t\tconst unsubFacts = system.facts.$store.subscribeAll(throttled);\n\t\t\tconst unsubSettled = system.onSettledChange(throttled);\n\n\t\t\treturn () => {\n\t\t\t\tcleanup();\n\t\t\t\tunsubFacts();\n\t\t\t\tunsubSettled();\n\t\t\t};\n\t\t});\n\t}\n\n\treturn readable<InspectState>(computeInspectState(system), (set) => {\n\t\tconst update = () => set(computeInspectState(system));\n\t\tconst unsubFacts = system.facts.$store.subscribeAll(update);\n\t\tconst unsubSettled = system.onSettledChange(update);\n\n\t\treturn () => {\n\t\t\tunsubFacts();\n\t\t\tunsubSettled();\n\t\t};\n\t});\n}\n\n// ============================================================================\n// useRequirementStatus — single or multi\n// ============================================================================\n\n/** Single type overload */\nexport function useRequirementStatus(statusPlugin: StatusPlugin, type: string): Readable<RequirementTypeStatus>;\n/** Multi-type overload */\nexport function useRequirementStatus(statusPlugin: StatusPlugin, types: string[]): Readable<Record<string, RequirementTypeStatus>>;\n/** Implementation */\nexport function useRequirementStatus(\n\tstatusPlugin: StatusPlugin,\n\ttypeOrTypes: string | string[],\n): Readable<RequirementTypeStatus> | Readable<Record<string, RequirementTypeStatus>> {\n\tif (Array.isArray(typeOrTypes)) {\n\t\tconst getValues = (): Record<string, RequirementTypeStatus> => {\n\t\t\tconst result: Record<string, RequirementTypeStatus> = {};\n\t\t\tfor (const type of typeOrTypes) {\n\t\t\t\tresult[type] = statusPlugin.getStatus(type);\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\n\t\treturn readable(getValues(), (set) => {\n\t\t\tconst unsubscribe = statusPlugin.subscribe(() => {\n\t\t\t\tset(getValues());\n\t\t\t});\n\t\t\treturn unsubscribe;\n\t\t});\n\t}\n\n\treturn readable<RequirementTypeStatus>(statusPlugin.getStatus(typeOrTypes), (set) => {\n\t\tconst unsubscribe = statusPlugin.subscribe(() => {\n\t\t\tset(statusPlugin.getStatus(typeOrTypes));\n\t\t});\n\t\treturn unsubscribe;\n\t});\n}\n\n// ============================================================================\n// useExplain — reactive requirement explanation\n// ============================================================================\n\n/**\n * Reactively returns the explanation string for a requirement.\n */\nexport function useExplain(\n\t// biome-ignore lint/suspicious/noExplicitAny: Must work with any schema\n\tsystem: SingleModuleSystem<any>,\n\trequirementId: string,\n): Readable<string | null> {\n\tassertSystem(\"useExplain\", system);\n\treturn readable<string | null>(system.explain(requirementId), (set) => {\n\t\tconst update = () => set(system.explain(requirementId));\n\t\tconst unsubFacts = system.facts.$store.subscribeAll(update);\n\t\tconst unsubSettled = system.onSettledChange(update);\n\n\t\treturn () => {\n\t\t\tunsubFacts();\n\t\t\tunsubSettled();\n\t\t};\n\t});\n}\n\n// ============================================================================\n// useConstraintStatus — reactive constraint inspection\n// ============================================================================\n\n/** Get all constraints */\nexport function useConstraintStatus(\n\tsystem: SingleModuleSystem<any>,\n): Readable<ConstraintInfo[]>;\n/** Get a single constraint by ID */\nexport function useConstraintStatus(\n\tsystem: SingleModuleSystem<any>,\n\tconstraintId: string,\n): Readable<ConstraintInfo | null>;\n/** Implementation */\nexport function useConstraintStatus(\n\t// biome-ignore lint/suspicious/noExplicitAny: Must work with any schema\n\tsystem: SingleModuleSystem<any>,\n\tconstraintId?: string,\n): Readable<ConstraintInfo[] | ConstraintInfo | null> {\n\tassertSystem(\"useConstraintStatus\", system);\n\treturn readable<ConstraintInfo[] | ConstraintInfo | null>(\n\t\t_getConstraintValue(system, constraintId),\n\t\t(set) => {\n\t\t\tconst update = () => set(_getConstraintValue(system, constraintId));\n\t\t\tconst unsubFacts = system.facts.$store.subscribeAll(update);\n\t\t\tconst unsubSettled = system.onSettledChange(update);\n\n\t\t\treturn () => {\n\t\t\t\tunsubFacts();\n\t\t\t\tunsubSettled();\n\t\t\t};\n\t\t},\n\t);\n}\n\nfunction _getConstraintValue(\n\t// biome-ignore lint/suspicious/noExplicitAny: Internal\n\tsystem: SingleModuleSystem<any>,\n\tconstraintId?: string,\n): ConstraintInfo[] | ConstraintInfo | null {\n\tconst inspection = system.inspect();\n\tif (!constraintId) return inspection.constraints;\n\treturn inspection.constraints.find((c: ConstraintInfo) => c.id === constraintId) ?? null;\n}\n\n// ============================================================================\n// useOptimisticUpdate — batch with rollback on failure\n// ============================================================================\n\nexport interface OptimisticUpdateResult {\n\tmutate: (updateFn: () => void) => void;\n\tisPending: Readable<boolean>;\n\terror: Readable<Error | null>;\n\trollback: () => void;\n}\n\n/**\n * Optimistic update hook. Saves a snapshot before mutating, monitors\n * a requirement type via statusPlugin, and rolls back on failure.\n */\nexport function useOptimisticUpdate(\n\t// biome-ignore lint/suspicious/noExplicitAny: Must work with any schema\n\tsystem: SingleModuleSystem<any>,\n\tstatusPlugin?: StatusPlugin,\n\trequirementType?: string,\n): OptimisticUpdateResult {\n\tassertSystem(\"useOptimisticUpdate\", system);\n\tlet isPendingValue = false;\n\tlet errorValue: Error | null = null;\n\tlet snapshot: SystemSnapshot | null = null;\n\tlet statusUnsub: (() => void) | null = null;\n\n\t// We track subscribers manually since we need imperative push\n\tconst pendingSubscribers = new Set<(v: boolean) => void>();\n\tconst errorSubscribers = new Set<(v: Error | null) => void>();\n\n\tconst isPending: Readable<boolean> = {\n\t\tsubscribe(fn) {\n\t\t\tfn(isPendingValue);\n\t\t\tpendingSubscribers.add(fn);\n\t\t\treturn () => pendingSubscribers.delete(fn);\n\t\t},\n\t};\n\n\tconst error: Readable<Error | null> = {\n\t\tsubscribe(fn) {\n\t\t\tfn(errorValue);\n\t\t\terrorSubscribers.add(fn);\n\t\t\treturn () => errorSubscribers.delete(fn);\n\t\t},\n\t};\n\n\tconst setPending = (v: boolean) => {\n\t\tisPendingValue = v;\n\t\tfor (const fn of pendingSubscribers) fn(v);\n\t};\n\n\tconst setError = (v: Error | null) => {\n\t\terrorValue = v;\n\t\tfor (const fn of errorSubscribers) fn(v);\n\t};\n\n\tconst rollback = () => {\n\t\tif (snapshot) {\n\t\t\tsystem.restore(snapshot);\n\t\t\tsnapshot = null;\n\t\t}\n\t\tsetPending(false);\n\t\tsetError(null);\n\t\tstatusUnsub?.();\n\t\tstatusUnsub = null;\n\t};\n\n\tconst mutate = (updateFn: () => void) => {\n\t\tsnapshot = system.getSnapshot();\n\t\tsetPending(true);\n\t\tsetError(null);\n\t\tsystem.batch(updateFn);\n\n\t\tif (statusPlugin && requirementType) {\n\t\t\tstatusUnsub?.();\n\t\t\tstatusUnsub = statusPlugin.subscribe(() => {\n\t\t\t\tconst status = statusPlugin.getStatus(requirementType);\n\t\t\t\tif (!status.isLoading && !status.hasError) {\n\t\t\t\t\tsnapshot = null;\n\t\t\t\t\tsetPending(false);\n\t\t\t\t\tstatusUnsub?.();\n\t\t\t\t\tstatusUnsub = null;\n\t\t\t\t} else if (status.hasError) {\n\t\t\t\t\tsetError(status.lastError);\n\t\t\t\t\trollback();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\tonDestroy(() => {\n\t\tstatusUnsub?.();\n\t});\n\n\treturn { mutate, isPending, error, rollback };\n}\n\n// ============================================================================\n// useTimeTravel — reactive time-travel store\n// ============================================================================\n\n/**\n * Reactive time-travel Svelte store. Returns a Readable that updates\n * when snapshots are taken or navigation occurs.\n *\n * @example\n * ```svelte\n * const tt = useTimeTravel(system);\n * <button disabled={!$tt?.canUndo} on:click={() => $tt?.undo()}>Undo</button>\n * ```\n */\nexport function useTimeTravel(\n\t// biome-ignore lint/suspicious/noExplicitAny: Must work with any schema\n\tsystem: SingleModuleSystem<any>,\n): Readable<TimeTravelState | null> {\n\tassertSystem(\"useTimeTravel\", system);\n\treturn readable<TimeTravelState | null>(buildTimeTravelState(system), (set) => {\n\t\treturn system.onTimeTravelChange(() => set(buildTimeTravelState(system)));\n\t});\n}\n\n// ============================================================================\n// Scoped System\n// ============================================================================\n\n/** Configuration for useDirective */\ninterface UseDirectiveConfig {\n\t// biome-ignore lint/suspicious/noExplicitAny: Plugin types vary\n\tplugins?: Plugin<any>[];\n\tdebug?: DebugConfig;\n\terrorBoundary?: ErrorBoundaryConfig;\n\ttickMs?: number;\n\tzeroConfig?: boolean;\n\t// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\n\tinitialFacts?: Record<string, any>;\n\tstatus?: boolean;\n\t/** Fact keys to subscribe to (omit for all) */\n\tfacts?: string[];\n\t/** Derivation keys to subscribe to (omit for all) */\n\tderived?: string[];\n}\n\n/**\n * Create a scoped Directive system with automatic lifecycle management.\n * When no `facts` or `derived` keys are specified, subscribes to ALL\n * facts and derivations and returns Svelte readable stores.\n *\n * @example\n * ```svelte\n * // Subscribe to everything\n * const { facts, derived, events, dispatch } = useDirective(counterModule);\n *\n * // Selective keys\n * const { facts, derived } = useDirective(counterModule, { facts: [\"count\"], derived: [\"doubled\"] });\n * ```\n */\nexport function useDirective<M extends ModuleSchema>(\n\tmoduleDef: ModuleDef<M>,\n\tconfig?: UseDirectiveConfig,\n) {\n\tconst allPlugins = [...(config?.plugins ?? [])];\n\tlet statusPlugin: StatusPlugin | undefined;\n\n\tif (config?.status) {\n\t\tconst sp = createRequirementStatusPlugin();\n\t\tstatusPlugin = sp;\n\t\t// biome-ignore lint/suspicious/noExplicitAny: Plugin generic issues\n\t\tallPlugins.push(sp.plugin as Plugin<any>);\n\t}\n\n\t// biome-ignore lint/suspicious/noExplicitAny: Required for overload compatibility\n\tconst system = createSystem({\n\t\tmodule: moduleDef,\n\t\tplugins: allPlugins.length > 0 ? allPlugins : undefined,\n\t\tdebug: config?.debug,\n\t\terrorBoundary: config?.errorBoundary,\n\t\ttickMs: config?.tickMs,\n\t\tzeroConfig: config?.zeroConfig,\n\t\tinitialFacts: config?.initialFacts,\n\t} as any) as unknown as SingleModuleSystem<M>;\n\n\tsystem.start();\n\n\tonDestroy(() => {\n\t\tsystem.destroy();\n\t});\n\n\tconst factKeys = config?.facts;\n\tconst derivedKeys = config?.derived;\n\tconst subscribeAll = !factKeys && !derivedKeys;\n\n\t// Subscribe to facts\n\tconst factsStore: Readable<InferFacts<M>> = subscribeAll\n\t\t? readable(system.facts.$store.toObject() as InferFacts<M>, (set) => {\n\t\t\treturn system.facts.$store.subscribeAll(() => {\n\t\t\t\tset(system.facts.$store.toObject() as InferFacts<M>);\n\t\t\t});\n\t\t})\n\t\t: readable(pickFacts(system, factKeys ?? []) as InferFacts<M>, (set) => {\n\t\t\tif (!factKeys || factKeys.length === 0) return () => {};\n\t\t\treturn system.facts.$store.subscribe(factKeys, () => {\n\t\t\t\tset(pickFacts(system, factKeys) as InferFacts<M>);\n\t\t\t});\n\t\t});\n\n\t// Subscribe to derivations\n\tconst allDerivationKeys = subscribeAll ? Object.keys(system.derive ?? {}) : (derivedKeys ?? []);\n\tconst getDerived = (): InferDerivations<M> => {\n\t\tconst result: Record<string, unknown> = {};\n\t\tfor (const key of allDerivationKeys) {\n\t\t\tresult[key] = system.read(key);\n\t\t}\n\t\treturn result as InferDerivations<M>;\n\t};\n\tconst derivedStore: Readable<InferDerivations<M>> = allDerivationKeys.length > 0\n\t\t? readable(getDerived(), (set) => {\n\t\t\treturn system.subscribe(allDerivationKeys, () => {\n\t\t\t\tset(getDerived());\n\t\t\t});\n\t\t})\n\t\t: readable(getDerived(), () => () => {});\n\n\tconst events = system.events;\n\tconst dispatch = (event: InferEvents<M>) => system.dispatch(event);\n\n\treturn {\n\t\tsystem,\n\t\tfacts: factsStore,\n\t\tderived: derivedStore,\n\t\tevents,\n\t\tdispatch,\n\t\tstatusPlugin,\n\t};\n}\n\n// ============================================================================\n// Typed Hooks Factory\n// ============================================================================\n\nexport function createTypedHooks<M extends ModuleSchema>(): {\n\tuseFact: <K extends keyof InferFacts<M> & string>(\n\t\tsystem: SingleModuleSystem<M>,\n\t\tfactKey: K,\n\t) => Readable<InferFacts<M>[K] | undefined>;\n\tuseDerived: <K extends keyof InferDerivations<M> & string>(\n\t\tsystem: SingleModuleSystem<M>,\n\t\tderivationId: K,\n\t) => Readable<InferDerivations<M>[K]>;\n\tuseDispatch: (system: SingleModuleSystem<M>) => (event: InferEvents<M>) => void;\n\tuseEvents: (system: SingleModuleSystem<M>) => SingleModuleSystem<M>[\"events\"];\n\tuseWatch: <K extends string>(\n\t\tsystem: SingleModuleSystem<M>,\n\t\tkey: K,\n\t\tcallback: (newValue: unknown, previousValue: unknown) => void,\n\t) => void;\n} {\n\treturn {\n\t\tuseFact: <K extends keyof InferFacts<M> & string>(system: SingleModuleSystem<M>, factKey: K) =>\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: Cast for overload compatibility\n\t\t\tuseFact(system as SingleModuleSystem<any>, factKey) as Readable<InferFacts<M>[K] | undefined>,\n\t\tuseDerived: <K extends keyof InferDerivations<M> & string>(system: SingleModuleSystem<M>, derivationId: K) =>\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: Cast for overload compatibility\n\t\t\tuseDerived(system as SingleModuleSystem<any>, derivationId) as Readable<InferDerivations<M>[K]>,\n\t\tuseDispatch: (system: SingleModuleSystem<M>) => {\n\t\t\treturn (event: InferEvents<M>) => {\n\t\t\t\tsystem.dispatch(event);\n\t\t\t};\n\t\t},\n\t\tuseEvents: (system: SingleModuleSystem<M>) => useEvents<M>(system),\n\t\tuseWatch: <K extends string>(\n\t\t\tsystem: SingleModuleSystem<M>,\n\t\t\tkey: K,\n\t\t\tcallback: (newValue: unknown, previousValue: unknown) => void,\n\t\t) =>\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: Cast for overload compatibility\n\t\t\tuseWatch(system as SingleModuleSystem<any>, key, callback),\n\t};\n}\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":["createDerivedStore","system","derivationId","readable","set","createDerivedsStore","derivationIds","getValues","result","id","createFactStore","factKey","createInspectStore","update","unsubFacts","unsubSettled","useFact","keyOrKeys","assertSystem","_useFactMulti","factKeys","key","useDerived","idOrIds","useSelector","selector","equalityFn","defaultEquality","deriveKeySet","runWithTracking","runTrackedSelector","initial","currentSelected","trackedFactKeys","trackedDeriveKeys","unsubs","resubscribe","unsub","onUpdate","depsChanged","useDispatch","event","useEvents","useWatch","callback","unsubscribe","onDestroy","useInspect","options","computeInspectState","throttled","cleanup","createThrottle","useRequirementStatus","statusPlugin","typeOrTypes","type","useExplain","requirementId","useConstraintStatus","constraintId","_getConstraintValue","inspection","c","useOptimisticUpdate","requirementType","isPendingValue","errorValue","snapshot","statusUnsub","pendingSubscribers","errorSubscribers","isPending","fn","error","setPending","v","setError","rollback","mutate","updateFn","status","useTimeTravel","buildTimeTravelState","useDirective","moduleDef","config","allPlugins","sp","createRequirementStatusPlugin","createSystem","derivedKeys","subscribeAll","factsStore","pickFacts","allDerivationKeys","getDerived","derivedStore","events","createTypedHooks"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Svelte Adapter - Consolidated Svelte stores for Directive\n *\n * 15 active exports: useFact, useDerived, useDispatch, useSelector,\n * useWatch, useInspect, useRequirementStatus, useEvents, useExplain,\n * useConstraintStatus, useOptimisticUpdate, useDirective, useTimeTravel,\n * createTypedHooks, shallowEqual\n *\n * Store factories: createDerivedStore, createDerivedsStore, createFactStore, createInspectStore\n */\n\nimport { onDestroy } from \"svelte\";\nimport { readable, type Readable } from \"svelte/store\";\nimport type {\n\tModuleSchema,\n\tModuleDef,\n\tPlugin,\n\tDebugConfig,\n\tErrorBoundaryConfig,\n\tInferFacts,\n\tInferDerivations,\n\tInferSelectorState,\n\tInferEvents,\n\tSingleModuleSystem,\n\tSystemInspection,\n\tSystemSnapshot,\n\tTimeTravelState,\n} from \"@directive-run/core\";\nimport {\n\tcreateSystem,\n\tcreateRequirementStatusPlugin,\n} from \"@directive-run/core\";\nimport type { RequirementTypeStatus } from \"@directive-run/core\";\nimport {\n\ttype InspectState,\n\ttype ConstraintInfo,\n\tcomputeInspectState,\n\tcreateThrottle,\n\tassertSystem,\n\tdefaultEquality,\n\tbuildTimeTravelState,\n\tpickFacts,\n\trunTrackedSelector,\n\tdepsChanged,\n\tshallowEqual,\n} from \"@directive-run/core/adapter-utils\";\n\n// Re-export for convenience\nexport type { RequirementTypeStatus, InspectState, ConstraintInfo };\nexport { shallowEqual };\n\n/** Type for the requirement status plugin return value */\nexport type StatusPlugin = ReturnType<typeof createRequirementStatusPlugin>;\n\n// ============================================================================\n// Store Factories\n// ============================================================================\n\n/**\n * Create a Svelte store for a derived value.\n */\nexport function createDerivedStore<T>(\n\t// biome-ignore lint/suspicious/noExplicitAny: System type varies\n\tsystem: SingleModuleSystem<any>,\n\tderivationId: string,\n): Readable<T> {\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\tconst initialValue = system.read(derivationId);\n\t\tif (initialValue === undefined) {\n\t\t\tconsole.warn(\n\t\t\t\t`[Directive] createDerivedStore(\"${derivationId}\") returned undefined. ` +\n\t\t\t\t`Check that \"${derivationId}\" is defined in your module's derive property.`,\n\t\t\t);\n\t\t}\n\t}\n\n\treturn readable<T>(system.read(derivationId) as T, (set) => {\n\t\tconst unsubscribe = system.subscribe([derivationId], () => {\n\t\t\tset(system.read(derivationId) as T);\n\t\t});\n\t\treturn unsubscribe;\n\t});\n}\n\n/**\n * Create a Svelte store for multiple derived values.\n */\nexport function createDerivedsStore<T extends Record<string, unknown>>(\n\t// biome-ignore lint/suspicious/noExplicitAny: System type varies\n\tsystem: SingleModuleSystem<any>,\n\tderivationIds: string[],\n): Readable<T> {\n\tconst getValues = (): T => {\n\t\tconst result: Record<string, unknown> = {};\n\t\tfor (const id of derivationIds) {\n\t\t\tresult[id] = system.read(id);\n\t\t}\n\t\treturn result as T;\n\t};\n\n\treturn readable<T>(getValues(), (set) => {\n\t\tconst unsubscribe = system.subscribe(derivationIds, () => {\n\t\t\tset(getValues());\n\t\t});\n\t\treturn unsubscribe;\n\t});\n}\n\n/**\n * Create a Svelte store for a single fact value.\n */\nexport function createFactStore<T>(\n\t// biome-ignore lint/suspicious/noExplicitAny: System type varies\n\tsystem: SingleModuleSystem<any>,\n\tfactKey: string,\n): Readable<T | undefined> {\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\tif (!system.facts.$store.has(factKey)) {\n\t\t\tconsole.warn(\n\t\t\t\t`[Directive] createFactStore(\"${factKey}\") — fact not found in store. ` +\n\t\t\t\t`Check that \"${factKey}\" is defined in your module's schema.`,\n\t\t\t);\n\t\t}\n\t}\n\n\treturn readable<T | undefined>(\n\t\tsystem.facts.$store.get(factKey) as T | undefined,\n\t\t(set) => {\n\t\t\tconst unsubscribe = system.facts.$store.subscribe([factKey], () => {\n\t\t\t\tset(system.facts.$store.get(factKey) as T | undefined);\n\t\t\t});\n\t\t\treturn unsubscribe;\n\t\t},\n\t);\n}\n\n/**\n * Create a Svelte store for system inspection data.\n * NOTE: This updates on every fact change. Use sparingly in production.\n */\nexport function createInspectStore(\n\t// biome-ignore lint/suspicious/noExplicitAny: System type varies\n\tsystem: SingleModuleSystem<any>,\n): Readable<SystemInspection> {\n\treturn readable<SystemInspection>(system.inspect(), (set) => {\n\t\tconst update = () => set(system.inspect());\n\t\tconst unsubFacts = system.facts.$store.subscribeAll(update);\n\t\tconst unsubSettled = system.onSettledChange(update);\n\t\treturn () => {\n\t\t\tunsubFacts();\n\t\t\tunsubSettled();\n\t\t};\n\t});\n}\n\n// ============================================================================\n// useFact — single key or multi key\n// ============================================================================\n\n/** Single key overload */\nexport function useFact<S extends ModuleSchema, K extends keyof InferFacts<S> & string>(system: SingleModuleSystem<S>, factKey: K): Readable<InferFacts<S>[K] | undefined>;\n/** Multi-key overload */\nexport function useFact<S extends ModuleSchema, K extends keyof InferFacts<S> & string>(system: SingleModuleSystem<S>, factKeys: K[]): Readable<Pick<InferFacts<S>, K>>;\n/** Implementation */\nexport function useFact(\n\t// biome-ignore lint/suspicious/noExplicitAny: Implementation signature\n\tsystem: SingleModuleSystem<any>,\n\tkeyOrKeys: string | string[],\n): Readable<unknown> {\n\tassertSystem(\"useFact\", system);\n\tif (process.env.NODE_ENV !== \"production\" && typeof keyOrKeys === \"function\") {\n\t\tconsole.error(\n\t\t\t\"[Directive] useFact() received a function. Did you mean useSelector()? \" +\n\t\t\t\t\"useFact() takes a string key or array of keys, not a selector function.\",\n\t\t);\n\t}\n\n\t// Multi-key path: useFact(system, [keys])\n\tif (Array.isArray(keyOrKeys)) {\n\t\treturn _useFactMulti(system, keyOrKeys);\n\t}\n\n\t// Single key path: useFact(system, key)\n\treturn createFactStore(system, keyOrKeys);\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: Internal\nfunction _useFactMulti(system: SingleModuleSystem<any>, factKeys: string[]): Readable<Record<string, unknown>> {\n\tconst getValues = (): Record<string, unknown> => {\n\t\tconst result: Record<string, unknown> = {};\n\t\tfor (const key of factKeys) {\n\t\t\tresult[key] = system.facts.$store.get(key);\n\t\t}\n\t\treturn result;\n\t};\n\n\treturn readable(getValues(), (set) => {\n\t\tconst unsubscribe = system.facts.$store.subscribe(factKeys, () => {\n\t\t\tset(getValues());\n\t\t});\n\t\treturn unsubscribe;\n\t});\n}\n\n// ============================================================================\n// useDerived — single key or multi key\n// ============================================================================\n\n/** Single key overload */\nexport function useDerived<S extends ModuleSchema, K extends keyof InferDerivations<S> & string>(system: SingleModuleSystem<S>, derivationId: K): Readable<InferDerivations<S>[K]>;\n/** Multi-key overload */\nexport function useDerived<S extends ModuleSchema, K extends keyof InferDerivations<S> & string>(system: SingleModuleSystem<S>, derivationIds: K[]): Readable<Pick<InferDerivations<S>, K>>;\n/** Implementation */\nexport function useDerived(\n\t// biome-ignore lint/suspicious/noExplicitAny: Implementation signature\n\tsystem: SingleModuleSystem<any>,\n\tidOrIds: string | string[],\n): Readable<unknown> {\n\tassertSystem(\"useDerived\", system);\n\tif (process.env.NODE_ENV !== \"production\" && typeof idOrIds === \"function\") {\n\t\tconsole.error(\n\t\t\t\"[Directive] useDerived() received a function. Did you mean useSelector()? \" +\n\t\t\t\t\"useDerived() takes a string key or array of keys, not a selector function.\",\n\t\t);\n\t}\n\n\t// Multi-key path\n\tif (Array.isArray(idOrIds)) {\n\t\treturn createDerivedsStore(system, idOrIds);\n\t}\n\n\t// Single key path\n\treturn createDerivedStore(system, idOrIds);\n}\n\n// ============================================================================\n// useSelector — auto-tracking selector over facts and derivations\n// ============================================================================\n\n/**\n * Auto-tracking selector over facts and derivations.\n * Uses `withTracking()` to detect which facts the selector accesses,\n * then subscribes only to those keys.\n */\nexport function useSelector<S extends ModuleSchema, R>(system: SingleModuleSystem<S>, selector: (state: InferSelectorState<S>) => R, equalityFn?: (a: R, b: R) => boolean): Readable<R>;\nexport function useSelector(\n\t// biome-ignore lint/suspicious/noExplicitAny: Implementation signature\n\tsystem: SingleModuleSystem<any>,\n\t// biome-ignore lint/suspicious/noExplicitAny: Implementation signature\n\tselector: (state: any) => unknown,\n\tequalityFn: (a: unknown, b: unknown) => boolean = defaultEquality,\n): Readable<unknown> {\n\tassertSystem(\"useSelector\", system);\n\tconst deriveKeySet = new Set(Object.keys(system.derive ?? {}));\n\n\t// Build a tracking-aware state proxy that exposes both facts and derivations\n\tconst runWithTracking = () => runTrackedSelector(system, deriveKeySet, selector);\n\n\tconst initial = runWithTracking();\n\n\treturn readable(initial.value, (set) => {\n\t\tlet currentSelected = initial.value;\n\t\tlet trackedFactKeys = initial.factKeys;\n\t\tlet trackedDeriveKeys = initial.deriveKeys;\n\t\tconst unsubs: Array<() => void> = [];\n\n\t\tconst resubscribe = () => {\n\t\t\tfor (const unsub of unsubs) unsub();\n\t\t\tunsubs.length = 0;\n\n\t\t\tconst onUpdate = () => {\n\t\t\t\tconst result = runWithTracking();\n\t\t\t\tif (!equalityFn(currentSelected, result.value)) {\n\t\t\t\t\tcurrentSelected = result.value;\n\t\t\t\t\tset(result.value);\n\t\t\t\t}\n\t\t\t\t// Re-track: check if deps changed\n\t\t\t\tif (depsChanged(trackedFactKeys, result.factKeys, trackedDeriveKeys, result.deriveKeys)) {\n\t\t\t\t\ttrackedFactKeys = result.factKeys;\n\t\t\t\t\ttrackedDeriveKeys = result.deriveKeys;\n\t\t\t\t\tresubscribe();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tif (trackedFactKeys.length > 0) {\n\t\t\t\tunsubs.push(system.facts.$store.subscribe(trackedFactKeys, onUpdate));\n\t\t\t} else if (trackedDeriveKeys.length === 0) {\n\t\t\t\tunsubs.push(system.facts.$store.subscribeAll(onUpdate));\n\t\t\t}\n\t\t\tif (trackedDeriveKeys.length > 0) {\n\t\t\t\tunsubs.push(system.subscribe(trackedDeriveKeys, onUpdate));\n\t\t\t}\n\t\t};\n\n\t\tresubscribe();\n\n\t\treturn () => {\n\t\t\tfor (const unsub of unsubs) unsub();\n\t\t};\n\t});\n}\n\n// ============================================================================\n// useDispatch\n// ============================================================================\n\nexport function useDispatch<S extends ModuleSchema>(\n\tsystem: SingleModuleSystem<S>,\n): (event: InferEvents<S>) => void {\n\tassertSystem(\"useDispatch\", system);\n\treturn (event: InferEvents<S>) => {\n\t\tsystem.dispatch(event);\n\t};\n}\n\n// ============================================================================\n// useEvents — memoized events reference\n// ============================================================================\n\n/**\n * Returns the system's events dispatcher.\n */\nexport function useEvents<S extends ModuleSchema>(\n\tsystem: SingleModuleSystem<S>,\n): SingleModuleSystem<S>[\"events\"] {\n\tassertSystem(\"useEvents\", system);\n\treturn system.events;\n}\n\n// ============================================================================\n// useWatch — derivation or fact side-effect\n// ============================================================================\n\n/** Watch a derivation or fact by key (auto-detected). When a key exists in both facts and derivations, the derivation overload takes priority. */\nexport function useWatch<S extends ModuleSchema, K extends keyof InferDerivations<S> & string>(\n\tsystem: SingleModuleSystem<S>,\n\tkey: K,\n\tcallback: (newValue: InferDerivations<S>[K], previousValue: InferDerivations<S>[K] | undefined) => void,\n): void;\n/** Watch a fact key with auto-detection. */\nexport function useWatch<S extends ModuleSchema, K extends keyof InferFacts<S> & string>(\n\tsystem: SingleModuleSystem<S>,\n\tkey: K,\n\tcallback: (newValue: InferFacts<S>[K] | undefined, previousValue: InferFacts<S>[K] | undefined) => void,\n): void;\n/** Implementation */\nexport function useWatch(\n\t// biome-ignore lint/suspicious/noExplicitAny: Implementation signature\n\tsystem: SingleModuleSystem<any>,\n\tkey: string,\n\tcallback: (newValue: unknown, prevValue: unknown) => void,\n): void {\n\tassertSystem(\"useWatch\", system);\n\n\tconst unsubscribe = system.watch(key, callback);\n\tonDestroy(unsubscribe);\n}\n\n// ============================================================================\n// useInspect — consolidated inspection hook\n// ============================================================================\n\n/** Options for useInspect */\nexport interface UseInspectOptions {\n\tthrottleMs?: number;\n}\n\n/**\n * Consolidated system inspection hook.\n * Returns Readable<InspectState> with optional throttling.\n */\nexport function useInspect(\n\t// biome-ignore lint/suspicious/noExplicitAny: Must work with any schema\n\tsystem: SingleModuleSystem<any>,\n\toptions?: UseInspectOptions,\n): Readable<InspectState> {\n\tassertSystem(\"useInspect\", system);\n\tif (options?.throttleMs && options.throttleMs > 0) {\n\t\treturn readable<InspectState>(computeInspectState(system), (set) => {\n\t\t\tconst { throttled, cleanup } = createThrottle(() => {\n\t\t\t\tset(computeInspectState(system));\n\t\t\t}, options.throttleMs!);\n\n\t\t\tconst unsubFacts = system.facts.$store.subscribeAll(throttled);\n\t\t\tconst unsubSettled = system.onSettledChange(throttled);\n\n\t\t\treturn () => {\n\t\t\t\tcleanup();\n\t\t\t\tunsubFacts();\n\t\t\t\tunsubSettled();\n\t\t\t};\n\t\t});\n\t}\n\n\treturn readable<InspectState>(computeInspectState(system), (set) => {\n\t\tconst update = () => set(computeInspectState(system));\n\t\tconst unsubFacts = system.facts.$store.subscribeAll(update);\n\t\tconst unsubSettled = system.onSettledChange(update);\n\n\t\treturn () => {\n\t\t\tunsubFacts();\n\t\t\tunsubSettled();\n\t\t};\n\t});\n}\n\n// ============================================================================\n// useRequirementStatus — single or multi\n// ============================================================================\n\n/** Single type overload */\nexport function useRequirementStatus(statusPlugin: StatusPlugin, type: string): Readable<RequirementTypeStatus>;\n/** Multi-type overload */\nexport function useRequirementStatus(statusPlugin: StatusPlugin, types: string[]): Readable<Record<string, RequirementTypeStatus>>;\n/** Implementation */\nexport function useRequirementStatus(\n\tstatusPlugin: StatusPlugin,\n\ttypeOrTypes: string | string[],\n): Readable<RequirementTypeStatus> | Readable<Record<string, RequirementTypeStatus>> {\n\tif (Array.isArray(typeOrTypes)) {\n\t\tconst getValues = (): Record<string, RequirementTypeStatus> => {\n\t\t\tconst result: Record<string, RequirementTypeStatus> = {};\n\t\t\tfor (const type of typeOrTypes) {\n\t\t\t\tresult[type] = statusPlugin.getStatus(type);\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\n\t\treturn readable(getValues(), (set) => {\n\t\t\tconst unsubscribe = statusPlugin.subscribe(() => {\n\t\t\t\tset(getValues());\n\t\t\t});\n\t\t\treturn unsubscribe;\n\t\t});\n\t}\n\n\treturn readable<RequirementTypeStatus>(statusPlugin.getStatus(typeOrTypes), (set) => {\n\t\tconst unsubscribe = statusPlugin.subscribe(() => {\n\t\t\tset(statusPlugin.getStatus(typeOrTypes));\n\t\t});\n\t\treturn unsubscribe;\n\t});\n}\n\n// ============================================================================\n// useExplain — reactive requirement explanation\n// ============================================================================\n\n/**\n * Reactively returns the explanation string for a requirement.\n */\nexport function useExplain(\n\t// biome-ignore lint/suspicious/noExplicitAny: Must work with any schema\n\tsystem: SingleModuleSystem<any>,\n\trequirementId: string,\n): Readable<string | null> {\n\tassertSystem(\"useExplain\", system);\n\treturn readable<string | null>(system.explain(requirementId), (set) => {\n\t\tconst update = () => set(system.explain(requirementId));\n\t\tconst unsubFacts = system.facts.$store.subscribeAll(update);\n\t\tconst unsubSettled = system.onSettledChange(update);\n\n\t\treturn () => {\n\t\t\tunsubFacts();\n\t\t\tunsubSettled();\n\t\t};\n\t});\n}\n\n// ============================================================================\n// useConstraintStatus — reactive constraint inspection\n// ============================================================================\n\n/** Get all constraints */\nexport function useConstraintStatus(\n\tsystem: SingleModuleSystem<any>,\n): Readable<ConstraintInfo[]>;\n/** Get a single constraint by ID */\nexport function useConstraintStatus(\n\tsystem: SingleModuleSystem<any>,\n\tconstraintId: string,\n): Readable<ConstraintInfo | null>;\n/** Implementation */\nexport function useConstraintStatus(\n\t// biome-ignore lint/suspicious/noExplicitAny: Must work with any schema\n\tsystem: SingleModuleSystem<any>,\n\tconstraintId?: string,\n): Readable<ConstraintInfo[] | ConstraintInfo | null> {\n\tassertSystem(\"useConstraintStatus\", system);\n\treturn readable<ConstraintInfo[] | ConstraintInfo | null>(\n\t\t_getConstraintValue(system, constraintId),\n\t\t(set) => {\n\t\t\tconst update = () => set(_getConstraintValue(system, constraintId));\n\t\t\tconst unsubFacts = system.facts.$store.subscribeAll(update);\n\t\t\tconst unsubSettled = system.onSettledChange(update);\n\n\t\t\treturn () => {\n\t\t\t\tunsubFacts();\n\t\t\t\tunsubSettled();\n\t\t\t};\n\t\t},\n\t);\n}\n\nfunction _getConstraintValue(\n\t// biome-ignore lint/suspicious/noExplicitAny: Internal\n\tsystem: SingleModuleSystem<any>,\n\tconstraintId?: string,\n): ConstraintInfo[] | ConstraintInfo | null {\n\tconst inspection = system.inspect();\n\tif (!constraintId) return inspection.constraints;\n\treturn inspection.constraints.find((c: ConstraintInfo) => c.id === constraintId) ?? null;\n}\n\n// ============================================================================\n// useOptimisticUpdate — batch with rollback on failure\n// ============================================================================\n\nexport interface OptimisticUpdateResult {\n\tmutate: (updateFn: () => void) => void;\n\tisPending: Readable<boolean>;\n\terror: Readable<Error | null>;\n\trollback: () => void;\n}\n\n/**\n * Optimistic update hook. Saves a snapshot before mutating, monitors\n * a requirement type via statusPlugin, and rolls back on failure.\n */\nexport function useOptimisticUpdate(\n\t// biome-ignore lint/suspicious/noExplicitAny: Must work with any schema\n\tsystem: SingleModuleSystem<any>,\n\tstatusPlugin?: StatusPlugin,\n\trequirementType?: string,\n): OptimisticUpdateResult {\n\tassertSystem(\"useOptimisticUpdate\", system);\n\tlet isPendingValue = false;\n\tlet errorValue: Error | null = null;\n\tlet snapshot: SystemSnapshot | null = null;\n\tlet statusUnsub: (() => void) | null = null;\n\n\t// We track subscribers manually since we need imperative push\n\tconst pendingSubscribers = new Set<(v: boolean) => void>();\n\tconst errorSubscribers = new Set<(v: Error | null) => void>();\n\n\tconst isPending: Readable<boolean> = {\n\t\tsubscribe(fn) {\n\t\t\tfn(isPendingValue);\n\t\t\tpendingSubscribers.add(fn);\n\t\t\treturn () => pendingSubscribers.delete(fn);\n\t\t},\n\t};\n\n\tconst error: Readable<Error | null> = {\n\t\tsubscribe(fn) {\n\t\t\tfn(errorValue);\n\t\t\terrorSubscribers.add(fn);\n\t\t\treturn () => errorSubscribers.delete(fn);\n\t\t},\n\t};\n\n\tconst setPending = (v: boolean) => {\n\t\tisPendingValue = v;\n\t\tfor (const fn of pendingSubscribers) fn(v);\n\t};\n\n\tconst setError = (v: Error | null) => {\n\t\terrorValue = v;\n\t\tfor (const fn of errorSubscribers) fn(v);\n\t};\n\n\tconst rollback = () => {\n\t\tif (snapshot) {\n\t\t\tsystem.restore(snapshot);\n\t\t\tsnapshot = null;\n\t\t}\n\t\tsetPending(false);\n\t\tsetError(null);\n\t\tstatusUnsub?.();\n\t\tstatusUnsub = null;\n\t};\n\n\tconst mutate = (updateFn: () => void) => {\n\t\tsnapshot = system.getSnapshot();\n\t\tsetPending(true);\n\t\tsetError(null);\n\t\tsystem.batch(updateFn);\n\n\t\tif (statusPlugin && requirementType) {\n\t\t\tstatusUnsub?.();\n\t\t\tstatusUnsub = statusPlugin.subscribe(() => {\n\t\t\t\tconst status = statusPlugin.getStatus(requirementType);\n\t\t\t\tif (!status.isLoading && !status.hasError) {\n\t\t\t\t\tsnapshot = null;\n\t\t\t\t\tsetPending(false);\n\t\t\t\t\tstatusUnsub?.();\n\t\t\t\t\tstatusUnsub = null;\n\t\t\t\t} else if (status.hasError) {\n\t\t\t\t\tsetError(status.lastError);\n\t\t\t\t\trollback();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\tonDestroy(() => {\n\t\tstatusUnsub?.();\n\t});\n\n\treturn { mutate, isPending, error, rollback };\n}\n\n// ============================================================================\n// useTimeTravel — reactive time-travel store\n// ============================================================================\n\n/**\n * Reactive time-travel Svelte store. Returns a Readable that updates\n * when snapshots are taken or navigation occurs.\n *\n * @example\n * ```svelte\n * const tt = useTimeTravel(system);\n * <button disabled={!$tt?.canUndo} on:click={() => $tt?.undo()}>Undo</button>\n * ```\n */\nexport function useTimeTravel(\n\t// biome-ignore lint/suspicious/noExplicitAny: Must work with any schema\n\tsystem: SingleModuleSystem<any>,\n): Readable<TimeTravelState | null> {\n\tassertSystem(\"useTimeTravel\", system);\n\treturn readable<TimeTravelState | null>(buildTimeTravelState(system), (set) => {\n\t\treturn system.onTimeTravelChange(() => set(buildTimeTravelState(system)));\n\t});\n}\n\n// ============================================================================\n// Scoped System\n// ============================================================================\n\n/** Configuration for useDirective */\ninterface UseDirectiveConfig {\n\t// biome-ignore lint/suspicious/noExplicitAny: Plugin types vary\n\tplugins?: Plugin<any>[];\n\tdebug?: DebugConfig;\n\terrorBoundary?: ErrorBoundaryConfig;\n\ttickMs?: number;\n\tzeroConfig?: boolean;\n\t// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\n\tinitialFacts?: Record<string, any>;\n\tstatus?: boolean;\n\t/** Fact keys to subscribe to (omit for all) */\n\tfacts?: string[];\n\t/** Derivation keys to subscribe to (omit for all) */\n\tderived?: string[];\n}\n\n/**\n * Create a scoped Directive system with automatic lifecycle management.\n * When no `facts` or `derived` keys are specified, subscribes to ALL\n * facts and derivations and returns Svelte readable stores.\n *\n * @example\n * ```svelte\n * // Subscribe to everything\n * const { facts, derived, events, dispatch } = useDirective(counterModule);\n *\n * // Selective keys\n * const { facts, derived } = useDirective(counterModule, { facts: [\"count\"], derived: [\"doubled\"] });\n * ```\n */\nexport function useDirective<M extends ModuleSchema>(\n\tmoduleDef: ModuleDef<M>,\n\tconfig?: UseDirectiveConfig,\n) {\n\tconst allPlugins = [...(config?.plugins ?? [])];\n\tlet statusPlugin: StatusPlugin | undefined;\n\n\tif (config?.status) {\n\t\tconst sp = createRequirementStatusPlugin();\n\t\tstatusPlugin = sp;\n\t\t// biome-ignore lint/suspicious/noExplicitAny: Plugin generic issues\n\t\tallPlugins.push(sp.plugin as Plugin<any>);\n\t}\n\n\t// biome-ignore lint/suspicious/noExplicitAny: Required for overload compatibility\n\tconst system = createSystem({\n\t\tmodule: moduleDef,\n\t\tplugins: allPlugins.length > 0 ? allPlugins : undefined,\n\t\tdebug: config?.debug,\n\t\terrorBoundary: config?.errorBoundary,\n\t\ttickMs: config?.tickMs,\n\t\tzeroConfig: config?.zeroConfig,\n\t\tinitialFacts: config?.initialFacts,\n\t} as any) as unknown as SingleModuleSystem<M>;\n\n\tsystem.start();\n\n\tonDestroy(() => {\n\t\tsystem.destroy();\n\t});\n\n\tconst factKeys = config?.facts;\n\tconst derivedKeys = config?.derived;\n\tconst subscribeAll = !factKeys && !derivedKeys;\n\n\t// Subscribe to facts\n\tconst factsStore: Readable<InferFacts<M>> = subscribeAll\n\t\t? readable(system.facts.$store.toObject() as InferFacts<M>, (set) => {\n\t\t\treturn system.facts.$store.subscribeAll(() => {\n\t\t\t\tset(system.facts.$store.toObject() as InferFacts<M>);\n\t\t\t});\n\t\t})\n\t\t: readable(pickFacts(system, factKeys ?? []) as InferFacts<M>, (set) => {\n\t\t\tif (!factKeys || factKeys.length === 0) return () => {};\n\t\t\treturn system.facts.$store.subscribe(factKeys, () => {\n\t\t\t\tset(pickFacts(system, factKeys) as InferFacts<M>);\n\t\t\t});\n\t\t});\n\n\t// Subscribe to derivations\n\tconst allDerivationKeys = subscribeAll ? Object.keys(system.derive ?? {}) : (derivedKeys ?? []);\n\tconst getDerived = (): InferDerivations<M> => {\n\t\tconst result: Record<string, unknown> = {};\n\t\tfor (const key of allDerivationKeys) {\n\t\t\tresult[key] = system.read(key);\n\t\t}\n\t\treturn result as InferDerivations<M>;\n\t};\n\tconst derivedStore: Readable<InferDerivations<M>> = allDerivationKeys.length > 0\n\t\t? readable(getDerived(), (set) => {\n\t\t\treturn system.subscribe(allDerivationKeys, () => {\n\t\t\t\tset(getDerived());\n\t\t\t});\n\t\t})\n\t\t: readable(getDerived(), () => () => {});\n\n\tconst events = system.events;\n\tconst dispatch = (event: InferEvents<M>) => system.dispatch(event);\n\n\treturn {\n\t\tsystem,\n\t\tfacts: factsStore,\n\t\tderived: derivedStore,\n\t\tevents,\n\t\tdispatch,\n\t\tstatusPlugin,\n\t};\n}\n\n// ============================================================================\n// Typed Hooks Factory\n// ============================================================================\n\nexport function createTypedHooks<M extends ModuleSchema>(): {\n\tuseFact: <K extends keyof InferFacts<M> & string>(\n\t\tsystem: SingleModuleSystem<M>,\n\t\tfactKey: K,\n\t) => Readable<InferFacts<M>[K] | undefined>;\n\tuseDerived: <K extends keyof InferDerivations<M> & string>(\n\t\tsystem: SingleModuleSystem<M>,\n\t\tderivationId: K,\n\t) => Readable<InferDerivations<M>[K]>;\n\tuseDispatch: (system: SingleModuleSystem<M>) => (event: InferEvents<M>) => void;\n\tuseEvents: (system: SingleModuleSystem<M>) => SingleModuleSystem<M>[\"events\"];\n\tuseWatch: <K extends string>(\n\t\tsystem: SingleModuleSystem<M>,\n\t\tkey: K,\n\t\tcallback: (newValue: unknown, previousValue: unknown) => void,\n\t) => void;\n} {\n\treturn {\n\t\tuseFact: <K extends keyof InferFacts<M> & string>(system: SingleModuleSystem<M>, factKey: K) =>\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: Cast for overload compatibility\n\t\t\tuseFact(system as SingleModuleSystem<any>, factKey) as Readable<InferFacts<M>[K] | undefined>,\n\t\tuseDerived: <K extends keyof InferDerivations<M> & string>(system: SingleModuleSystem<M>, derivationId: K) =>\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: Cast for overload compatibility\n\t\t\tuseDerived(system as SingleModuleSystem<any>, derivationId) as Readable<InferDerivations<M>[K]>,\n\t\tuseDispatch: (system: SingleModuleSystem<M>) => {\n\t\t\treturn (event: InferEvents<M>) => {\n\t\t\t\tsystem.dispatch(event);\n\t\t\t};\n\t\t},\n\t\tuseEvents: (system: SingleModuleSystem<M>) => useEvents<M>(system),\n\t\tuseWatch: <K extends string>(\n\t\t\tsystem: SingleModuleSystem<M>,\n\t\t\tkey: K,\n\t\t\tcallback: (newValue: unknown, previousValue: unknown) => void,\n\t\t) =>\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: Cast for overload compatibility\n\t\t\tuseWatch(system as SingleModuleSystem<any>, key, callback),\n\t};\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -38,7 +38,6 @@ declare function useDerived<S extends ModuleSchema, K extends keyof InferDerivat
38
38
  * then subscribes only to those keys.
39
39
  */
40
40
  declare function useSelector<S extends ModuleSchema, R>(system: SingleModuleSystem<S>, selector: (state: InferSelectorState<S>) => R, equalityFn?: (a: R, b: R) => boolean): Readable<R>;
41
- declare function useSelector<R>(system: SingleModuleSystem<any>, selector: (state: Record<string, any>) => R, equalityFn?: (a: R, b: R) => boolean): Readable<R>;
42
41
  declare function useDispatch<S extends ModuleSchema>(system: SingleModuleSystem<S>): (event: InferEvents<S>) => void;
43
42
  /**
44
43
  * Returns the system's events dispatcher.
@@ -48,13 +47,6 @@ declare function useEvents<S extends ModuleSchema>(system: SingleModuleSystem<S>
48
47
  declare function useWatch<S extends ModuleSchema, K extends keyof InferDerivations<S> & string>(system: SingleModuleSystem<S>, key: K, callback: (newValue: InferDerivations<S>[K], previousValue: InferDerivations<S>[K] | undefined) => void): void;
49
48
  /** Watch a fact key with auto-detection. */
50
49
  declare function useWatch<S extends ModuleSchema, K extends keyof InferFacts<S> & string>(system: SingleModuleSystem<S>, key: K, callback: (newValue: InferFacts<S>[K] | undefined, previousValue: InferFacts<S>[K] | undefined) => void): void;
51
- /**
52
- * Watch a fact by explicit "fact" discriminator.
53
- * @deprecated Use `useWatch(system, key, callback)` instead — facts are now auto-detected.
54
- */
55
- declare function useWatch<S extends ModuleSchema, K extends keyof InferFacts<S> & string>(system: SingleModuleSystem<S>, kind: "fact", factKey: K, callback: (newValue: InferFacts<S>[K] | undefined, previousValue: InferFacts<S>[K] | undefined) => void): void;
56
- /** Watch a fact or derivation (generic fallback) */
57
- declare function useWatch<T>(system: SingleModuleSystem<any>, key: string, callback: (newValue: T, previousValue: T | undefined) => void): void;
58
50
  /** Options for useInspect */
59
51
  interface UseInspectOptions {
60
52
  throttleMs?: number;
package/dist/index.d.ts CHANGED
@@ -38,7 +38,6 @@ declare function useDerived<S extends ModuleSchema, K extends keyof InferDerivat
38
38
  * then subscribes only to those keys.
39
39
  */
40
40
  declare function useSelector<S extends ModuleSchema, R>(system: SingleModuleSystem<S>, selector: (state: InferSelectorState<S>) => R, equalityFn?: (a: R, b: R) => boolean): Readable<R>;
41
- declare function useSelector<R>(system: SingleModuleSystem<any>, selector: (state: Record<string, any>) => R, equalityFn?: (a: R, b: R) => boolean): Readable<R>;
42
41
  declare function useDispatch<S extends ModuleSchema>(system: SingleModuleSystem<S>): (event: InferEvents<S>) => void;
43
42
  /**
44
43
  * Returns the system's events dispatcher.
@@ -48,13 +47,6 @@ declare function useEvents<S extends ModuleSchema>(system: SingleModuleSystem<S>
48
47
  declare function useWatch<S extends ModuleSchema, K extends keyof InferDerivations<S> & string>(system: SingleModuleSystem<S>, key: K, callback: (newValue: InferDerivations<S>[K], previousValue: InferDerivations<S>[K] | undefined) => void): void;
49
48
  /** Watch a fact key with auto-detection. */
50
49
  declare function useWatch<S extends ModuleSchema, K extends keyof InferFacts<S> & string>(system: SingleModuleSystem<S>, key: K, callback: (newValue: InferFacts<S>[K] | undefined, previousValue: InferFacts<S>[K] | undefined) => void): void;
51
- /**
52
- * Watch a fact by explicit "fact" discriminator.
53
- * @deprecated Use `useWatch(system, key, callback)` instead — facts are now auto-detected.
54
- */
55
- declare function useWatch<S extends ModuleSchema, K extends keyof InferFacts<S> & string>(system: SingleModuleSystem<S>, kind: "fact", factKey: K, callback: (newValue: InferFacts<S>[K] | undefined, previousValue: InferFacts<S>[K] | undefined) => void): void;
56
- /** Watch a fact or derivation (generic fallback) */
57
- declare function useWatch<T>(system: SingleModuleSystem<any>, key: string, callback: (newValue: T, previousValue: T | undefined) => void): void;
58
50
  /** Options for useInspect */
59
51
  interface UseInspectOptions {
60
52
  throttleMs?: number;
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import {onDestroy}from'svelte';import {readable}from'svelte/store';import {createRequirementStatusPlugin,createSystem}from'@directive-run/core';import {defaultEquality,assertSystem,computeInspectState,createThrottle,buildTimeTravelState,pickFacts,runTrackedSelector,depsChanged}from'@directive-run/core/adapter-utils';export{shallowEqual}from'@directive-run/core/adapter-utils';function w(e,t){return process.env.NODE_ENV!=="production"&&e.read(t)===void 0&&console.warn(`[Directive] createDerivedStore("${t}") returned undefined. Check that "${t}" is defined in your module's derive property.`),readable(e.read(t),s=>e.subscribe([t],()=>{s(e.read(t));}))}function C(e,t){let s=()=>{let r={};for(let n of t)r[n]=e.read(n);return r};return readable(s(),r=>e.subscribe(t,()=>{r(s());}))}function E(e,t){return process.env.NODE_ENV!=="production"&&(e.facts.$store.has(t)||console.warn(`[Directive] createFactStore("${t}") \u2014 fact not found in store. Check that "${t}" is defined in your module's schema.`)),readable(e.facts.$store.get(t),s=>e.facts.$store.subscribe([t],()=>{s(e.facts.$store.get(t));}))}function j(e){return readable(e.inspect(),t=>{let s=()=>t(e.inspect()),r=e.facts.$store.subscribeAll(s),n=e.onSettledChange(s);return ()=>{r(),n();}})}function V(e,t){return assertSystem("useFact",e),process.env.NODE_ENV!=="production"&&typeof t=="function"&&console.error("[Directive] useFact() received a function. Did you mean useSelector()? useFact() takes a string key or array of keys, not a selector function."),Array.isArray(t)?$(e,t):E(e,t)}function $(e,t){let s=()=>{let r={};for(let n of t)r[n]=e.facts.$store.get(n);return r};return readable(s(),r=>e.facts.$store.subscribe(t,()=>{r(s());}))}function q(e,t){return assertSystem("useDerived",e),process.env.NODE_ENV!=="production"&&typeof t=="function"&&console.error("[Directive] useDerived() received a function. Did you mean useSelector()? useDerived() takes a string key or array of keys, not a selector function."),Array.isArray(t)?C(e,t):w(e,t)}function z(e,t,s=defaultEquality){assertSystem("useSelector",e);let r=new Set(Object.keys(e.derive??{})),n=()=>runTrackedSelector(e,r,t),o=n();return readable(o.value,a=>{let S=o.value,p=o.factKeys,f=o.deriveKeys,d=[],y=()=>{for(let c of d)c();d.length=0;let b=()=>{let c=n();s(S,c.value)||(S=c.value,a(c.value)),depsChanged(p,c.factKeys,f,c.deriveKeys)&&(p=c.factKeys,f=c.deriveKeys,y());};p.length>0?d.push(e.facts.$store.subscribe(p,b)):f.length===0&&d.push(e.facts.$store.subscribeAll(b)),f.length>0&&d.push(e.subscribe(f,b));};return y(),()=>{for(let b of d)b();}})}function O(e){return assertSystem("useDispatch",e),t=>{e.dispatch(t);}}function A(e){return assertSystem("useEvents",e),e.events}function P(e,t,s,r){assertSystem("useWatch",e);let n=t==="fact"&&typeof s=="string"&&typeof r=="function",o=n?s:t,a=n?r:s,S=e.watch(o,a);onDestroy(S);}function H(e,t){return assertSystem("useInspect",e),t?.throttleMs&&t.throttleMs>0?readable(computeInspectState(e),s=>{let{throttled:r,cleanup:n}=createThrottle(()=>{s(computeInspectState(e));},t.throttleMs),o=e.facts.$store.subscribeAll(r),a=e.onSettledChange(r);return ()=>{n(),o(),a();}}):readable(computeInspectState(e),s=>{let r=()=>s(computeInspectState(e)),n=e.facts.$store.subscribeAll(r),o=e.onSettledChange(r);return ()=>{n(),o();}})}function L(e,t){if(Array.isArray(t)){let s=()=>{let r={};for(let n of t)r[n]=e.getStatus(n);return r};return readable(s(),r=>e.subscribe(()=>{r(s());}))}return readable(e.getStatus(t),s=>e.subscribe(()=>{s(e.getStatus(t));}))}function G(e,t){return assertSystem("useExplain",e),readable(e.explain(t),s=>{let r=()=>s(e.explain(t)),n=e.facts.$store.subscribeAll(r),o=e.onSettledChange(r);return ()=>{n(),o();}})}function J(e,t){return assertSystem("useConstraintStatus",e),readable(x(e,t),s=>{let r=()=>s(x(e,t)),n=e.facts.$store.subscribeAll(r),o=e.onSettledChange(r);return ()=>{n(),o();}})}function x(e,t){let s=e.inspect();return t?s.constraints.find(r=>r.id===t)??null:s.constraints}function Q(e,t,s){assertSystem("useOptimisticUpdate",e);let r=false,n=null,o=null,a=null,S=new Set,p=new Set,f={subscribe(u){return u(r),S.add(u),()=>S.delete(u)}},d={subscribe(u){return u(n),p.add(u),()=>p.delete(u)}},y=u=>{r=u;for(let v of S)v(u);},b=u=>{n=u;for(let v of p)v(u);},c=()=>{o&&(e.restore(o),o=null),y(false),b(null),a?.(),a=null;},l=u=>{o=e.getSnapshot(),y(true),b(null),e.batch(u),t&&s&&(a?.(),a=t.subscribe(()=>{let v=t.getStatus(s);!v.isLoading&&!v.hasError?(o=null,y(false),a?.(),a=null):v.hasError&&(b(v.lastError),c());}));};return onDestroy(()=>{a?.();}),{mutate:l,isPending:f,error:d,rollback:c}}function X(e){return assertSystem("useTimeTravel",e),readable(buildTimeTravelState(e),t=>e.onTimeTravelChange(()=>t(buildTimeTravelState(e))))}function Y(e,t){let s=[...t?.plugins??[]],r;if(t?.status){let l=createRequirementStatusPlugin();r=l,s.push(l.plugin);}let n=createSystem({module:e,plugins:s.length>0?s:void 0,debug:t?.debug,errorBoundary:t?.errorBoundary,tickMs:t?.tickMs,zeroConfig:t?.zeroConfig,initialFacts:t?.initialFacts});n.start(),onDestroy(()=>{n.destroy();});let o=t?.facts,a=t?.derived,S=!o&&!a,p=S?readable(n.facts.$store.toObject(),l=>n.facts.$store.subscribeAll(()=>{l(n.facts.$store.toObject());})):readable(pickFacts(n,o??[]),l=>!o||o.length===0?()=>{}:n.facts.$store.subscribe(o,()=>{l(pickFacts(n,o));})),f=S?Object.keys(n.derive??{}):a??[],d=()=>{let l={};for(let u of f)l[u]=n.read(u);return l},y=f.length>0?readable(d(),l=>n.subscribe(f,()=>{l(d());})):readable(d(),()=>()=>{}),b=n.events;return {system:n,facts:p,derived:y,events:b,dispatch:l=>n.dispatch(l),statusPlugin:r}}function Z(){return {useFact:(e,t)=>V(e,t),useDerived:(e,t)=>q(e,t),useDispatch:e=>t=>{e.dispatch(t);},useEvents:e=>A(e),useWatch:(e,t,s)=>P(e,t,s)}}export{w as createDerivedStore,C as createDerivedsStore,E as createFactStore,j as createInspectStore,Z as createTypedHooks,J as useConstraintStatus,q as useDerived,Y as useDirective,O as useDispatch,A as useEvents,G as useExplain,V as useFact,H as useInspect,Q as useOptimisticUpdate,L as useRequirementStatus,z as useSelector,X as useTimeTravel,P as useWatch};//# sourceMappingURL=index.js.map
1
+ import {onDestroy}from'svelte';import {readable}from'svelte/store';import {createRequirementStatusPlugin,createSystem}from'@directive-run/core';import {defaultEquality,assertSystem,computeInspectState,createThrottle,buildTimeTravelState,pickFacts,runTrackedSelector,depsChanged}from'@directive-run/core/adapter-utils';export{shallowEqual}from'@directive-run/core/adapter-utils';function C(e,t){return process.env.NODE_ENV!=="production"&&e.read(t)===void 0&&console.warn(`[Directive] createDerivedStore("${t}") returned undefined. Check that "${t}" is defined in your module's derive property.`),readable(e.read(t),r=>e.subscribe([t],()=>{r(e.read(t));}))}function E(e,t){let r=()=>{let n={};for(let s of t)n[s]=e.read(s);return n};return readable(r(),n=>e.subscribe(t,()=>{n(r());}))}function w(e,t){return process.env.NODE_ENV!=="production"&&(e.facts.$store.has(t)||console.warn(`[Directive] createFactStore("${t}") \u2014 fact not found in store. Check that "${t}" is defined in your module's schema.`)),readable(e.facts.$store.get(t),r=>e.facts.$store.subscribe([t],()=>{r(e.facts.$store.get(t));}))}function O(e){return readable(e.inspect(),t=>{let r=()=>t(e.inspect()),n=e.facts.$store.subscribeAll(r),s=e.onSettledChange(r);return ()=>{n(),s();}})}function V(e,t){return assertSystem("useFact",e),process.env.NODE_ENV!=="production"&&typeof t=="function"&&console.error("[Directive] useFact() received a function. Did you mean useSelector()? useFact() takes a string key or array of keys, not a selector function."),Array.isArray(t)?$(e,t):w(e,t)}function $(e,t){let r=()=>{let n={};for(let s of t)n[s]=e.facts.$store.get(s);return n};return readable(r(),n=>e.facts.$store.subscribe(t,()=>{n(r());}))}function q(e,t){return assertSystem("useDerived",e),process.env.NODE_ENV!=="production"&&typeof t=="function"&&console.error("[Directive] useDerived() received a function. Did you mean useSelector()? useDerived() takes a string key or array of keys, not a selector function."),Array.isArray(t)?E(e,t):C(e,t)}function j(e,t,r=defaultEquality){assertSystem("useSelector",e);let n=new Set(Object.keys(e.derive??{})),s=()=>runTrackedSelector(e,n,t),o=s();return readable(o.value,l=>{let p=o.value,g=o.factKeys,S=o.deriveKeys,d=[],y=()=>{for(let c of d)c();d.length=0;let f=()=>{let c=s();r(p,c.value)||(p=c.value,l(c.value)),depsChanged(g,c.factKeys,S,c.deriveKeys)&&(g=c.factKeys,S=c.deriveKeys,y());};g.length>0?d.push(e.facts.$store.subscribe(g,f)):S.length===0&&d.push(e.facts.$store.subscribeAll(f)),S.length>0&&d.push(e.subscribe(S,f));};return y(),()=>{for(let f of d)f();}})}function z(e){return assertSystem("useDispatch",e),t=>{e.dispatch(t);}}function A(e){return assertSystem("useEvents",e),e.events}function P(e,t,r){assertSystem("useWatch",e);let n=e.watch(t,r);onDestroy(n);}function H(e,t){return assertSystem("useInspect",e),t?.throttleMs&&t.throttleMs>0?readable(computeInspectState(e),r=>{let{throttled:n,cleanup:s}=createThrottle(()=>{r(computeInspectState(e));},t.throttleMs),o=e.facts.$store.subscribeAll(n),l=e.onSettledChange(n);return ()=>{s(),o(),l();}}):readable(computeInspectState(e),r=>{let n=()=>r(computeInspectState(e)),s=e.facts.$store.subscribeAll(n),o=e.onSettledChange(n);return ()=>{s(),o();}})}function L(e,t){if(Array.isArray(t)){let r=()=>{let n={};for(let s of t)n[s]=e.getStatus(s);return n};return readable(r(),n=>e.subscribe(()=>{n(r());}))}return readable(e.getStatus(t),r=>e.subscribe(()=>{r(e.getStatus(t));}))}function G(e,t){return assertSystem("useExplain",e),readable(e.explain(t),r=>{let n=()=>r(e.explain(t)),s=e.facts.$store.subscribeAll(n),o=e.onSettledChange(n);return ()=>{s(),o();}})}function J(e,t){return assertSystem("useConstraintStatus",e),readable(x(e,t),r=>{let n=()=>r(x(e,t)),s=e.facts.$store.subscribeAll(n),o=e.onSettledChange(n);return ()=>{s(),o();}})}function x(e,t){let r=e.inspect();return t?r.constraints.find(n=>n.id===t)??null:r.constraints}function Q(e,t,r){assertSystem("useOptimisticUpdate",e);let n=false,s=null,o=null,l=null,p=new Set,g=new Set,S={subscribe(u){return u(n),p.add(u),()=>p.delete(u)}},d={subscribe(u){return u(s),g.add(u),()=>g.delete(u)}},y=u=>{n=u;for(let v of p)v(u);},f=u=>{s=u;for(let v of g)v(u);},c=()=>{o&&(e.restore(o),o=null),y(false),f(null),l?.(),l=null;},a=u=>{o=e.getSnapshot(),y(true),f(null),e.batch(u),t&&r&&(l?.(),l=t.subscribe(()=>{let v=t.getStatus(r);!v.isLoading&&!v.hasError?(o=null,y(false),l?.(),l=null):v.hasError&&(f(v.lastError),c());}));};return onDestroy(()=>{l?.();}),{mutate:a,isPending:S,error:d,rollback:c}}function X(e){return assertSystem("useTimeTravel",e),readable(buildTimeTravelState(e),t=>e.onTimeTravelChange(()=>t(buildTimeTravelState(e))))}function Y(e,t){let r=[...t?.plugins??[]],n;if(t?.status){let a=createRequirementStatusPlugin();n=a,r.push(a.plugin);}let s=createSystem({module:e,plugins:r.length>0?r:void 0,debug:t?.debug,errorBoundary:t?.errorBoundary,tickMs:t?.tickMs,zeroConfig:t?.zeroConfig,initialFacts:t?.initialFacts});s.start(),onDestroy(()=>{s.destroy();});let o=t?.facts,l=t?.derived,p=!o&&!l,g=p?readable(s.facts.$store.toObject(),a=>s.facts.$store.subscribeAll(()=>{a(s.facts.$store.toObject());})):readable(pickFacts(s,o??[]),a=>!o||o.length===0?()=>{}:s.facts.$store.subscribe(o,()=>{a(pickFacts(s,o));})),S=p?Object.keys(s.derive??{}):l??[],d=()=>{let a={};for(let u of S)a[u]=s.read(u);return a},y=S.length>0?readable(d(),a=>s.subscribe(S,()=>{a(d());})):readable(d(),()=>()=>{}),f=s.events;return {system:s,facts:g,derived:y,events:f,dispatch:a=>s.dispatch(a),statusPlugin:n}}function Z(){return {useFact:(e,t)=>V(e,t),useDerived:(e,t)=>q(e,t),useDispatch:e=>t=>{e.dispatch(t);},useEvents:e=>A(e),useWatch:(e,t,r)=>P(e,t,r)}}export{C as createDerivedStore,E as createDerivedsStore,w as createFactStore,O as createInspectStore,Z as createTypedHooks,J as useConstraintStatus,q as useDerived,Y as useDirective,z as useDispatch,A as useEvents,G as useExplain,V as useFact,H as useInspect,Q as useOptimisticUpdate,L as useRequirementStatus,j as useSelector,X as useTimeTravel,P as useWatch};//# sourceMappingURL=index.js.map
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["createDerivedStore","system","derivationId","readable","set","createDerivedsStore","derivationIds","getValues","result","id","createFactStore","factKey","createInspectStore","update","unsubFacts","unsubSettled","useFact","keyOrKeys","assertSystem","_useFactMulti","factKeys","key","useDerived","idOrIds","useSelector","selector","equalityFn","defaultEquality","deriveKeySet","runWithTracking","runTrackedSelector","initial","currentSelected","trackedFactKeys","trackedDeriveKeys","unsubs","resubscribe","unsub","onUpdate","depsChanged","useDispatch","event","useEvents","useWatch","derivationIdOrKind","callbackOrFactKey","maybeCallback","isFact","callback","unsubscribe","onDestroy","useInspect","options","computeInspectState","throttled","cleanup","createThrottle","useRequirementStatus","statusPlugin","typeOrTypes","type","useExplain","requirementId","useConstraintStatus","constraintId","_getConstraintValue","inspection","c","useOptimisticUpdate","requirementType","isPendingValue","errorValue","snapshot","statusUnsub","pendingSubscribers","errorSubscribers","isPending","fn","error","setPending","v","setError","rollback","mutate","updateFn","status","useTimeTravel","buildTimeTravelState","useDirective","moduleDef","config","allPlugins","sp","createRequirementStatusPlugin","createSystem","derivedKeys","subscribeAll","factsStore","pickFacts","allDerivationKeys","getDerived","derivedStore","events","createTypedHooks"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Svelte Adapter - Consolidated Svelte stores for Directive\n *\n * 15 active exports: useFact, useDerived, useDispatch, useSelector,\n * useWatch, useInspect, useRequirementStatus, useEvents, useExplain,\n * useConstraintStatus, useOptimisticUpdate, useDirective, useTimeTravel,\n * createTypedHooks, shallowEqual\n *\n * Store factories: createDerivedStore, createDerivedsStore, createFactStore, createInspectStore\n */\n\nimport { onDestroy } from \"svelte\";\nimport { readable, type Readable } from \"svelte/store\";\nimport type {\n\tModuleSchema,\n\tModuleDef,\n\tPlugin,\n\tDebugConfig,\n\tErrorBoundaryConfig,\n\tInferFacts,\n\tInferDerivations,\n\tInferSelectorState,\n\tInferEvents,\n\tSingleModuleSystem,\n\tSystemInspection,\n\tSystemSnapshot,\n\tTimeTravelState,\n} from \"@directive-run/core\";\nimport {\n\tcreateSystem,\n\tcreateRequirementStatusPlugin,\n} from \"@directive-run/core\";\nimport type { RequirementTypeStatus } from \"@directive-run/core\";\nimport {\n\ttype InspectState,\n\ttype ConstraintInfo,\n\tcomputeInspectState,\n\tcreateThrottle,\n\tassertSystem,\n\tdefaultEquality,\n\tbuildTimeTravelState,\n\tpickFacts,\n\trunTrackedSelector,\n\tdepsChanged,\n\tshallowEqual,\n} from \"@directive-run/core/adapter-utils\";\n\n// Re-export for convenience\nexport type { RequirementTypeStatus, InspectState, ConstraintInfo };\nexport { shallowEqual };\n\n/** Type for the requirement status plugin return value */\nexport type StatusPlugin = ReturnType<typeof createRequirementStatusPlugin>;\n\n// ============================================================================\n// Store Factories\n// ============================================================================\n\n/**\n * Create a Svelte store for a derived value.\n */\nexport function createDerivedStore<T>(\n\t// biome-ignore lint/suspicious/noExplicitAny: System type varies\n\tsystem: SingleModuleSystem<any>,\n\tderivationId: string,\n): Readable<T> {\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\tconst initialValue = system.read(derivationId);\n\t\tif (initialValue === undefined) {\n\t\t\tconsole.warn(\n\t\t\t\t`[Directive] createDerivedStore(\"${derivationId}\") returned undefined. ` +\n\t\t\t\t`Check that \"${derivationId}\" is defined in your module's derive property.`,\n\t\t\t);\n\t\t}\n\t}\n\n\treturn readable<T>(system.read(derivationId) as T, (set) => {\n\t\tconst unsubscribe = system.subscribe([derivationId], () => {\n\t\t\tset(system.read(derivationId) as T);\n\t\t});\n\t\treturn unsubscribe;\n\t});\n}\n\n/**\n * Create a Svelte store for multiple derived values.\n */\nexport function createDerivedsStore<T extends Record<string, unknown>>(\n\t// biome-ignore lint/suspicious/noExplicitAny: System type varies\n\tsystem: SingleModuleSystem<any>,\n\tderivationIds: string[],\n): Readable<T> {\n\tconst getValues = (): T => {\n\t\tconst result: Record<string, unknown> = {};\n\t\tfor (const id of derivationIds) {\n\t\t\tresult[id] = system.read(id);\n\t\t}\n\t\treturn result as T;\n\t};\n\n\treturn readable<T>(getValues(), (set) => {\n\t\tconst unsubscribe = system.subscribe(derivationIds, () => {\n\t\t\tset(getValues());\n\t\t});\n\t\treturn unsubscribe;\n\t});\n}\n\n/**\n * Create a Svelte store for a single fact value.\n */\nexport function createFactStore<T>(\n\t// biome-ignore lint/suspicious/noExplicitAny: System type varies\n\tsystem: SingleModuleSystem<any>,\n\tfactKey: string,\n): Readable<T | undefined> {\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\tif (!system.facts.$store.has(factKey)) {\n\t\t\tconsole.warn(\n\t\t\t\t`[Directive] createFactStore(\"${factKey}\") — fact not found in store. ` +\n\t\t\t\t`Check that \"${factKey}\" is defined in your module's schema.`,\n\t\t\t);\n\t\t}\n\t}\n\n\treturn readable<T | undefined>(\n\t\tsystem.facts.$store.get(factKey) as T | undefined,\n\t\t(set) => {\n\t\t\tconst unsubscribe = system.facts.$store.subscribe([factKey], () => {\n\t\t\t\tset(system.facts.$store.get(factKey) as T | undefined);\n\t\t\t});\n\t\t\treturn unsubscribe;\n\t\t},\n\t);\n}\n\n/**\n * Create a Svelte store for system inspection data.\n * NOTE: This updates on every fact change. Use sparingly in production.\n */\nexport function createInspectStore(\n\t// biome-ignore lint/suspicious/noExplicitAny: System type varies\n\tsystem: SingleModuleSystem<any>,\n): Readable<SystemInspection> {\n\treturn readable<SystemInspection>(system.inspect(), (set) => {\n\t\tconst update = () => set(system.inspect());\n\t\tconst unsubFacts = system.facts.$store.subscribeAll(update);\n\t\tconst unsubSettled = system.onSettledChange(update);\n\t\treturn () => {\n\t\t\tunsubFacts();\n\t\t\tunsubSettled();\n\t\t};\n\t});\n}\n\n// ============================================================================\n// useFact — single key or multi key\n// ============================================================================\n\n/** Single key overload */\nexport function useFact<S extends ModuleSchema, K extends keyof InferFacts<S> & string>(system: SingleModuleSystem<S>, factKey: K): Readable<InferFacts<S>[K] | undefined>;\n/** Multi-key overload */\nexport function useFact<S extends ModuleSchema, K extends keyof InferFacts<S> & string>(system: SingleModuleSystem<S>, factKeys: K[]): Readable<Pick<InferFacts<S>, K>>;\n/** Implementation */\nexport function useFact(\n\t// biome-ignore lint/suspicious/noExplicitAny: Implementation signature\n\tsystem: SingleModuleSystem<any>,\n\tkeyOrKeys: string | string[],\n): Readable<unknown> {\n\tassertSystem(\"useFact\", system);\n\tif (process.env.NODE_ENV !== \"production\" && typeof keyOrKeys === \"function\") {\n\t\tconsole.error(\n\t\t\t\"[Directive] useFact() received a function. Did you mean useSelector()? \" +\n\t\t\t\t\"useFact() takes a string key or array of keys, not a selector function.\",\n\t\t);\n\t}\n\n\t// Multi-key path: useFact(system, [keys])\n\tif (Array.isArray(keyOrKeys)) {\n\t\treturn _useFactMulti(system, keyOrKeys);\n\t}\n\n\t// Single key path: useFact(system, key)\n\treturn createFactStore(system, keyOrKeys);\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: Internal\nfunction _useFactMulti(system: SingleModuleSystem<any>, factKeys: string[]): Readable<Record<string, unknown>> {\n\tconst getValues = (): Record<string, unknown> => {\n\t\tconst result: Record<string, unknown> = {};\n\t\tfor (const key of factKeys) {\n\t\t\tresult[key] = system.facts.$store.get(key);\n\t\t}\n\t\treturn result;\n\t};\n\n\treturn readable(getValues(), (set) => {\n\t\tconst unsubscribe = system.facts.$store.subscribe(factKeys, () => {\n\t\t\tset(getValues());\n\t\t});\n\t\treturn unsubscribe;\n\t});\n}\n\n// ============================================================================\n// useDerived — single key or multi key\n// ============================================================================\n\n/** Single key overload */\nexport function useDerived<S extends ModuleSchema, K extends keyof InferDerivations<S> & string>(system: SingleModuleSystem<S>, derivationId: K): Readable<InferDerivations<S>[K]>;\n/** Multi-key overload */\nexport function useDerived<S extends ModuleSchema, K extends keyof InferDerivations<S> & string>(system: SingleModuleSystem<S>, derivationIds: K[]): Readable<Pick<InferDerivations<S>, K>>;\n/** Implementation */\nexport function useDerived(\n\t// biome-ignore lint/suspicious/noExplicitAny: Implementation signature\n\tsystem: SingleModuleSystem<any>,\n\tidOrIds: string | string[],\n): Readable<unknown> {\n\tassertSystem(\"useDerived\", system);\n\tif (process.env.NODE_ENV !== \"production\" && typeof idOrIds === \"function\") {\n\t\tconsole.error(\n\t\t\t\"[Directive] useDerived() received a function. Did you mean useSelector()? \" +\n\t\t\t\t\"useDerived() takes a string key or array of keys, not a selector function.\",\n\t\t);\n\t}\n\n\t// Multi-key path\n\tif (Array.isArray(idOrIds)) {\n\t\treturn createDerivedsStore(system, idOrIds);\n\t}\n\n\t// Single key path\n\treturn createDerivedStore(system, idOrIds);\n}\n\n// ============================================================================\n// useSelector — auto-tracking selector over facts and derivations\n// ============================================================================\n\n/**\n * Auto-tracking selector over facts and derivations.\n * Uses `withTracking()` to detect which facts the selector accesses,\n * then subscribes only to those keys.\n */\nexport function useSelector<S extends ModuleSchema, R>(system: SingleModuleSystem<S>, selector: (state: InferSelectorState<S>) => R, equalityFn?: (a: R, b: R) => boolean): Readable<R>;\nexport function useSelector<R>(\n\t// biome-ignore lint/suspicious/noExplicitAny: Backward-compatible fallback\n\tsystem: SingleModuleSystem<any>,\n\t// biome-ignore lint/suspicious/noExplicitAny: Selector receives dynamic state\n\tselector: (state: Record<string, any>) => R,\n\tequalityFn?: (a: R, b: R) => boolean,\n): Readable<R>;\nexport function useSelector(\n\t// biome-ignore lint/suspicious/noExplicitAny: Implementation signature\n\tsystem: SingleModuleSystem<any>,\n\t// biome-ignore lint/suspicious/noExplicitAny: Implementation signature\n\tselector: (state: any) => unknown,\n\tequalityFn: (a: unknown, b: unknown) => boolean = defaultEquality,\n): Readable<unknown> {\n\tassertSystem(\"useSelector\", system);\n\tconst deriveKeySet = new Set(Object.keys(system.derive ?? {}));\n\n\t// Build a tracking-aware state proxy that exposes both facts and derivations\n\tconst runWithTracking = () => runTrackedSelector(system, deriveKeySet, selector);\n\n\tconst initial = runWithTracking();\n\n\treturn readable(initial.value, (set) => {\n\t\tlet currentSelected = initial.value;\n\t\tlet trackedFactKeys = initial.factKeys;\n\t\tlet trackedDeriveKeys = initial.deriveKeys;\n\t\tconst unsubs: Array<() => void> = [];\n\n\t\tconst resubscribe = () => {\n\t\t\tfor (const unsub of unsubs) unsub();\n\t\t\tunsubs.length = 0;\n\n\t\t\tconst onUpdate = () => {\n\t\t\t\tconst result = runWithTracking();\n\t\t\t\tif (!equalityFn(currentSelected, result.value)) {\n\t\t\t\t\tcurrentSelected = result.value;\n\t\t\t\t\tset(result.value);\n\t\t\t\t}\n\t\t\t\t// Re-track: check if deps changed\n\t\t\t\tif (depsChanged(trackedFactKeys, result.factKeys, trackedDeriveKeys, result.deriveKeys)) {\n\t\t\t\t\ttrackedFactKeys = result.factKeys;\n\t\t\t\t\ttrackedDeriveKeys = result.deriveKeys;\n\t\t\t\t\tresubscribe();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tif (trackedFactKeys.length > 0) {\n\t\t\t\tunsubs.push(system.facts.$store.subscribe(trackedFactKeys, onUpdate));\n\t\t\t} else if (trackedDeriveKeys.length === 0) {\n\t\t\t\tunsubs.push(system.facts.$store.subscribeAll(onUpdate));\n\t\t\t}\n\t\t\tif (trackedDeriveKeys.length > 0) {\n\t\t\t\tunsubs.push(system.subscribe(trackedDeriveKeys, onUpdate));\n\t\t\t}\n\t\t};\n\n\t\tresubscribe();\n\n\t\treturn () => {\n\t\t\tfor (const unsub of unsubs) unsub();\n\t\t};\n\t});\n}\n\n// ============================================================================\n// useDispatch\n// ============================================================================\n\nexport function useDispatch<S extends ModuleSchema>(\n\tsystem: SingleModuleSystem<S>,\n): (event: InferEvents<S>) => void {\n\tassertSystem(\"useDispatch\", system);\n\treturn (event: InferEvents<S>) => {\n\t\tsystem.dispatch(event);\n\t};\n}\n\n// ============================================================================\n// useEvents — memoized events reference\n// ============================================================================\n\n/**\n * Returns the system's events dispatcher.\n */\nexport function useEvents<S extends ModuleSchema>(\n\tsystem: SingleModuleSystem<S>,\n): SingleModuleSystem<S>[\"events\"] {\n\tassertSystem(\"useEvents\", system);\n\treturn system.events;\n}\n\n// ============================================================================\n// useWatch — derivation or fact side-effect\n// ============================================================================\n\n/** Watch a derivation or fact by key (auto-detected). When a key exists in both facts and derivations, the derivation overload takes priority. */\nexport function useWatch<S extends ModuleSchema, K extends keyof InferDerivations<S> & string>(\n\tsystem: SingleModuleSystem<S>,\n\tkey: K,\n\tcallback: (newValue: InferDerivations<S>[K], previousValue: InferDerivations<S>[K] | undefined) => void,\n): void;\n/** Watch a fact key with auto-detection. */\nexport function useWatch<S extends ModuleSchema, K extends keyof InferFacts<S> & string>(\n\tsystem: SingleModuleSystem<S>,\n\tkey: K,\n\tcallback: (newValue: InferFacts<S>[K] | undefined, previousValue: InferFacts<S>[K] | undefined) => void,\n): void;\n/**\n * Watch a fact by explicit \"fact\" discriminator.\n * @deprecated Use `useWatch(system, key, callback)` instead — facts are now auto-detected.\n */\nexport function useWatch<S extends ModuleSchema, K extends keyof InferFacts<S> & string>(\n\tsystem: SingleModuleSystem<S>,\n\tkind: \"fact\",\n\tfactKey: K,\n\tcallback: (newValue: InferFacts<S>[K] | undefined, previousValue: InferFacts<S>[K] | undefined) => void,\n): void;\n/** Watch a fact or derivation (generic fallback) */\nexport function useWatch<T>(\n\t// biome-ignore lint/suspicious/noExplicitAny: Backward-compatible fallback\n\tsystem: SingleModuleSystem<any>,\n\tkey: string,\n\tcallback: (newValue: T, previousValue: T | undefined) => void,\n): void;\n/** Implementation */\nexport function useWatch(\n\t// biome-ignore lint/suspicious/noExplicitAny: Implementation signature\n\tsystem: SingleModuleSystem<any>,\n\tderivationIdOrKind: string,\n\tcallbackOrFactKey: string | ((newValue: unknown, prevValue: unknown) => void),\n\tmaybeCallback?: (newValue: unknown, prevValue: unknown) => void,\n): void {\n\tassertSystem(\"useWatch\", system);\n\t// Backward compat: useWatch(system, \"fact\", factKey, callback)\n\tconst isFact =\n\t\tderivationIdOrKind === \"fact\" &&\n\t\ttypeof callbackOrFactKey === \"string\" &&\n\t\ttypeof maybeCallback === \"function\";\n\n\tconst key = isFact ? (callbackOrFactKey as string) : derivationIdOrKind;\n\tconst callback = isFact\n\t\t? maybeCallback!\n\t\t: (callbackOrFactKey as (newValue: unknown, prevValue: unknown) => void);\n\n\tconst unsubscribe = system.watch(key, callback);\n\tonDestroy(unsubscribe);\n}\n\n// ============================================================================\n// useInspect — consolidated inspection hook\n// ============================================================================\n\n/** Options for useInspect */\nexport interface UseInspectOptions {\n\tthrottleMs?: number;\n}\n\n/**\n * Consolidated system inspection hook.\n * Returns Readable<InspectState> with optional throttling.\n */\nexport function useInspect(\n\t// biome-ignore lint/suspicious/noExplicitAny: Must work with any schema\n\tsystem: SingleModuleSystem<any>,\n\toptions?: UseInspectOptions,\n): Readable<InspectState> {\n\tassertSystem(\"useInspect\", system);\n\tif (options?.throttleMs && options.throttleMs > 0) {\n\t\treturn readable<InspectState>(computeInspectState(system), (set) => {\n\t\t\tconst { throttled, cleanup } = createThrottle(() => {\n\t\t\t\tset(computeInspectState(system));\n\t\t\t}, options.throttleMs!);\n\n\t\t\tconst unsubFacts = system.facts.$store.subscribeAll(throttled);\n\t\t\tconst unsubSettled = system.onSettledChange(throttled);\n\n\t\t\treturn () => {\n\t\t\t\tcleanup();\n\t\t\t\tunsubFacts();\n\t\t\t\tunsubSettled();\n\t\t\t};\n\t\t});\n\t}\n\n\treturn readable<InspectState>(computeInspectState(system), (set) => {\n\t\tconst update = () => set(computeInspectState(system));\n\t\tconst unsubFacts = system.facts.$store.subscribeAll(update);\n\t\tconst unsubSettled = system.onSettledChange(update);\n\n\t\treturn () => {\n\t\t\tunsubFacts();\n\t\t\tunsubSettled();\n\t\t};\n\t});\n}\n\n// ============================================================================\n// useRequirementStatus — single or multi\n// ============================================================================\n\n/** Single type overload */\nexport function useRequirementStatus(statusPlugin: StatusPlugin, type: string): Readable<RequirementTypeStatus>;\n/** Multi-type overload */\nexport function useRequirementStatus(statusPlugin: StatusPlugin, types: string[]): Readable<Record<string, RequirementTypeStatus>>;\n/** Implementation */\nexport function useRequirementStatus(\n\tstatusPlugin: StatusPlugin,\n\ttypeOrTypes: string | string[],\n): Readable<RequirementTypeStatus> | Readable<Record<string, RequirementTypeStatus>> {\n\tif (Array.isArray(typeOrTypes)) {\n\t\tconst getValues = (): Record<string, RequirementTypeStatus> => {\n\t\t\tconst result: Record<string, RequirementTypeStatus> = {};\n\t\t\tfor (const type of typeOrTypes) {\n\t\t\t\tresult[type] = statusPlugin.getStatus(type);\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\n\t\treturn readable(getValues(), (set) => {\n\t\t\tconst unsubscribe = statusPlugin.subscribe(() => {\n\t\t\t\tset(getValues());\n\t\t\t});\n\t\t\treturn unsubscribe;\n\t\t});\n\t}\n\n\treturn readable<RequirementTypeStatus>(statusPlugin.getStatus(typeOrTypes), (set) => {\n\t\tconst unsubscribe = statusPlugin.subscribe(() => {\n\t\t\tset(statusPlugin.getStatus(typeOrTypes));\n\t\t});\n\t\treturn unsubscribe;\n\t});\n}\n\n// ============================================================================\n// useExplain — reactive requirement explanation\n// ============================================================================\n\n/**\n * Reactively returns the explanation string for a requirement.\n */\nexport function useExplain(\n\t// biome-ignore lint/suspicious/noExplicitAny: Must work with any schema\n\tsystem: SingleModuleSystem<any>,\n\trequirementId: string,\n): Readable<string | null> {\n\tassertSystem(\"useExplain\", system);\n\treturn readable<string | null>(system.explain(requirementId), (set) => {\n\t\tconst update = () => set(system.explain(requirementId));\n\t\tconst unsubFacts = system.facts.$store.subscribeAll(update);\n\t\tconst unsubSettled = system.onSettledChange(update);\n\n\t\treturn () => {\n\t\t\tunsubFacts();\n\t\t\tunsubSettled();\n\t\t};\n\t});\n}\n\n// ============================================================================\n// useConstraintStatus — reactive constraint inspection\n// ============================================================================\n\n/** Get all constraints */\nexport function useConstraintStatus(\n\tsystem: SingleModuleSystem<any>,\n): Readable<ConstraintInfo[]>;\n/** Get a single constraint by ID */\nexport function useConstraintStatus(\n\tsystem: SingleModuleSystem<any>,\n\tconstraintId: string,\n): Readable<ConstraintInfo | null>;\n/** Implementation */\nexport function useConstraintStatus(\n\t// biome-ignore lint/suspicious/noExplicitAny: Must work with any schema\n\tsystem: SingleModuleSystem<any>,\n\tconstraintId?: string,\n): Readable<ConstraintInfo[] | ConstraintInfo | null> {\n\tassertSystem(\"useConstraintStatus\", system);\n\treturn readable<ConstraintInfo[] | ConstraintInfo | null>(\n\t\t_getConstraintValue(system, constraintId),\n\t\t(set) => {\n\t\t\tconst update = () => set(_getConstraintValue(system, constraintId));\n\t\t\tconst unsubFacts = system.facts.$store.subscribeAll(update);\n\t\t\tconst unsubSettled = system.onSettledChange(update);\n\n\t\t\treturn () => {\n\t\t\t\tunsubFacts();\n\t\t\t\tunsubSettled();\n\t\t\t};\n\t\t},\n\t);\n}\n\nfunction _getConstraintValue(\n\t// biome-ignore lint/suspicious/noExplicitAny: Internal\n\tsystem: SingleModuleSystem<any>,\n\tconstraintId?: string,\n): ConstraintInfo[] | ConstraintInfo | null {\n\tconst inspection = system.inspect();\n\tif (!constraintId) return inspection.constraints;\n\treturn inspection.constraints.find((c: ConstraintInfo) => c.id === constraintId) ?? null;\n}\n\n// ============================================================================\n// useOptimisticUpdate — batch with rollback on failure\n// ============================================================================\n\nexport interface OptimisticUpdateResult {\n\tmutate: (updateFn: () => void) => void;\n\tisPending: Readable<boolean>;\n\terror: Readable<Error | null>;\n\trollback: () => void;\n}\n\n/**\n * Optimistic update hook. Saves a snapshot before mutating, monitors\n * a requirement type via statusPlugin, and rolls back on failure.\n */\nexport function useOptimisticUpdate(\n\t// biome-ignore lint/suspicious/noExplicitAny: Must work with any schema\n\tsystem: SingleModuleSystem<any>,\n\tstatusPlugin?: StatusPlugin,\n\trequirementType?: string,\n): OptimisticUpdateResult {\n\tassertSystem(\"useOptimisticUpdate\", system);\n\tlet isPendingValue = false;\n\tlet errorValue: Error | null = null;\n\tlet snapshot: SystemSnapshot | null = null;\n\tlet statusUnsub: (() => void) | null = null;\n\n\t// We track subscribers manually since we need imperative push\n\tconst pendingSubscribers = new Set<(v: boolean) => void>();\n\tconst errorSubscribers = new Set<(v: Error | null) => void>();\n\n\tconst isPending: Readable<boolean> = {\n\t\tsubscribe(fn) {\n\t\t\tfn(isPendingValue);\n\t\t\tpendingSubscribers.add(fn);\n\t\t\treturn () => pendingSubscribers.delete(fn);\n\t\t},\n\t};\n\n\tconst error: Readable<Error | null> = {\n\t\tsubscribe(fn) {\n\t\t\tfn(errorValue);\n\t\t\terrorSubscribers.add(fn);\n\t\t\treturn () => errorSubscribers.delete(fn);\n\t\t},\n\t};\n\n\tconst setPending = (v: boolean) => {\n\t\tisPendingValue = v;\n\t\tfor (const fn of pendingSubscribers) fn(v);\n\t};\n\n\tconst setError = (v: Error | null) => {\n\t\terrorValue = v;\n\t\tfor (const fn of errorSubscribers) fn(v);\n\t};\n\n\tconst rollback = () => {\n\t\tif (snapshot) {\n\t\t\tsystem.restore(snapshot);\n\t\t\tsnapshot = null;\n\t\t}\n\t\tsetPending(false);\n\t\tsetError(null);\n\t\tstatusUnsub?.();\n\t\tstatusUnsub = null;\n\t};\n\n\tconst mutate = (updateFn: () => void) => {\n\t\tsnapshot = system.getSnapshot();\n\t\tsetPending(true);\n\t\tsetError(null);\n\t\tsystem.batch(updateFn);\n\n\t\tif (statusPlugin && requirementType) {\n\t\t\tstatusUnsub?.();\n\t\t\tstatusUnsub = statusPlugin.subscribe(() => {\n\t\t\t\tconst status = statusPlugin.getStatus(requirementType);\n\t\t\t\tif (!status.isLoading && !status.hasError) {\n\t\t\t\t\tsnapshot = null;\n\t\t\t\t\tsetPending(false);\n\t\t\t\t\tstatusUnsub?.();\n\t\t\t\t\tstatusUnsub = null;\n\t\t\t\t} else if (status.hasError) {\n\t\t\t\t\tsetError(status.lastError);\n\t\t\t\t\trollback();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\tonDestroy(() => {\n\t\tstatusUnsub?.();\n\t});\n\n\treturn { mutate, isPending, error, rollback };\n}\n\n// ============================================================================\n// useTimeTravel — reactive time-travel store\n// ============================================================================\n\n/**\n * Reactive time-travel Svelte store. Returns a Readable that updates\n * when snapshots are taken or navigation occurs.\n *\n * @example\n * ```svelte\n * const tt = useTimeTravel(system);\n * <button disabled={!$tt?.canUndo} on:click={() => $tt?.undo()}>Undo</button>\n * ```\n */\nexport function useTimeTravel(\n\t// biome-ignore lint/suspicious/noExplicitAny: Must work with any schema\n\tsystem: SingleModuleSystem<any>,\n): Readable<TimeTravelState | null> {\n\tassertSystem(\"useTimeTravel\", system);\n\treturn readable<TimeTravelState | null>(buildTimeTravelState(system), (set) => {\n\t\treturn system.onTimeTravelChange(() => set(buildTimeTravelState(system)));\n\t});\n}\n\n// ============================================================================\n// Scoped System\n// ============================================================================\n\n/** Configuration for useDirective */\ninterface UseDirectiveConfig {\n\t// biome-ignore lint/suspicious/noExplicitAny: Plugin types vary\n\tplugins?: Plugin<any>[];\n\tdebug?: DebugConfig;\n\terrorBoundary?: ErrorBoundaryConfig;\n\ttickMs?: number;\n\tzeroConfig?: boolean;\n\t// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\n\tinitialFacts?: Record<string, any>;\n\tstatus?: boolean;\n\t/** Fact keys to subscribe to (omit for all) */\n\tfacts?: string[];\n\t/** Derivation keys to subscribe to (omit for all) */\n\tderived?: string[];\n}\n\n/**\n * Create a scoped Directive system with automatic lifecycle management.\n * When no `facts` or `derived` keys are specified, subscribes to ALL\n * facts and derivations and returns Svelte readable stores.\n *\n * @example\n * ```svelte\n * // Subscribe to everything\n * const { facts, derived, events, dispatch } = useDirective(counterModule);\n *\n * // Selective keys\n * const { facts, derived } = useDirective(counterModule, { facts: [\"count\"], derived: [\"doubled\"] });\n * ```\n */\nexport function useDirective<M extends ModuleSchema>(\n\tmoduleDef: ModuleDef<M>,\n\tconfig?: UseDirectiveConfig,\n) {\n\tconst allPlugins = [...(config?.plugins ?? [])];\n\tlet statusPlugin: StatusPlugin | undefined;\n\n\tif (config?.status) {\n\t\tconst sp = createRequirementStatusPlugin();\n\t\tstatusPlugin = sp;\n\t\t// biome-ignore lint/suspicious/noExplicitAny: Plugin generic issues\n\t\tallPlugins.push(sp.plugin as Plugin<any>);\n\t}\n\n\t// biome-ignore lint/suspicious/noExplicitAny: Required for overload compatibility\n\tconst system = createSystem({\n\t\tmodule: moduleDef,\n\t\tplugins: allPlugins.length > 0 ? allPlugins : undefined,\n\t\tdebug: config?.debug,\n\t\terrorBoundary: config?.errorBoundary,\n\t\ttickMs: config?.tickMs,\n\t\tzeroConfig: config?.zeroConfig,\n\t\tinitialFacts: config?.initialFacts,\n\t} as any) as unknown as SingleModuleSystem<M>;\n\n\tsystem.start();\n\n\tonDestroy(() => {\n\t\tsystem.destroy();\n\t});\n\n\tconst factKeys = config?.facts;\n\tconst derivedKeys = config?.derived;\n\tconst subscribeAll = !factKeys && !derivedKeys;\n\n\t// Subscribe to facts\n\tconst factsStore: Readable<InferFacts<M>> = subscribeAll\n\t\t? readable(system.facts.$store.toObject() as InferFacts<M>, (set) => {\n\t\t\treturn system.facts.$store.subscribeAll(() => {\n\t\t\t\tset(system.facts.$store.toObject() as InferFacts<M>);\n\t\t\t});\n\t\t})\n\t\t: readable(pickFacts(system, factKeys ?? []) as InferFacts<M>, (set) => {\n\t\t\tif (!factKeys || factKeys.length === 0) return () => {};\n\t\t\treturn system.facts.$store.subscribe(factKeys, () => {\n\t\t\t\tset(pickFacts(system, factKeys) as InferFacts<M>);\n\t\t\t});\n\t\t});\n\n\t// Subscribe to derivations\n\tconst allDerivationKeys = subscribeAll ? Object.keys(system.derive ?? {}) : (derivedKeys ?? []);\n\tconst getDerived = (): InferDerivations<M> => {\n\t\tconst result: Record<string, unknown> = {};\n\t\tfor (const key of allDerivationKeys) {\n\t\t\tresult[key] = system.read(key);\n\t\t}\n\t\treturn result as InferDerivations<M>;\n\t};\n\tconst derivedStore: Readable<InferDerivations<M>> = allDerivationKeys.length > 0\n\t\t? readable(getDerived(), (set) => {\n\t\t\treturn system.subscribe(allDerivationKeys, () => {\n\t\t\t\tset(getDerived());\n\t\t\t});\n\t\t})\n\t\t: readable(getDerived(), () => () => {});\n\n\tconst events = system.events;\n\tconst dispatch = (event: InferEvents<M>) => system.dispatch(event);\n\n\treturn {\n\t\tsystem,\n\t\tfacts: factsStore,\n\t\tderived: derivedStore,\n\t\tevents,\n\t\tdispatch,\n\t\tstatusPlugin,\n\t};\n}\n\n// ============================================================================\n// Typed Hooks Factory\n// ============================================================================\n\nexport function createTypedHooks<M extends ModuleSchema>(): {\n\tuseFact: <K extends keyof InferFacts<M> & string>(\n\t\tsystem: SingleModuleSystem<M>,\n\t\tfactKey: K,\n\t) => Readable<InferFacts<M>[K] | undefined>;\n\tuseDerived: <K extends keyof InferDerivations<M> & string>(\n\t\tsystem: SingleModuleSystem<M>,\n\t\tderivationId: K,\n\t) => Readable<InferDerivations<M>[K]>;\n\tuseDispatch: (system: SingleModuleSystem<M>) => (event: InferEvents<M>) => void;\n\tuseEvents: (system: SingleModuleSystem<M>) => SingleModuleSystem<M>[\"events\"];\n\tuseWatch: <K extends string>(\n\t\tsystem: SingleModuleSystem<M>,\n\t\tkey: K,\n\t\tcallback: (newValue: unknown, previousValue: unknown) => void,\n\t) => void;\n} {\n\treturn {\n\t\tuseFact: <K extends keyof InferFacts<M> & string>(system: SingleModuleSystem<M>, factKey: K) =>\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: Cast for overload compatibility\n\t\t\tuseFact(system as SingleModuleSystem<any>, factKey) as Readable<InferFacts<M>[K] | undefined>,\n\t\tuseDerived: <K extends keyof InferDerivations<M> & string>(system: SingleModuleSystem<M>, derivationId: K) =>\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: Cast for overload compatibility\n\t\t\tuseDerived(system as SingleModuleSystem<any>, derivationId) as Readable<InferDerivations<M>[K]>,\n\t\tuseDispatch: (system: SingleModuleSystem<M>) => {\n\t\t\treturn (event: InferEvents<M>) => {\n\t\t\t\tsystem.dispatch(event);\n\t\t\t};\n\t\t},\n\t\tuseEvents: (system: SingleModuleSystem<M>) => useEvents<M>(system),\n\t\tuseWatch: <K extends string>(\n\t\t\tsystem: SingleModuleSystem<M>,\n\t\t\tkey: K,\n\t\t\tcallback: (newValue: unknown, previousValue: unknown) => void,\n\t\t) =>\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: Cast for overload compatibility\n\t\t\tuseWatch(system as SingleModuleSystem<any>, key, callback),\n\t};\n}\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":["createDerivedStore","system","derivationId","readable","set","createDerivedsStore","derivationIds","getValues","result","id","createFactStore","factKey","createInspectStore","update","unsubFacts","unsubSettled","useFact","keyOrKeys","assertSystem","_useFactMulti","factKeys","key","useDerived","idOrIds","useSelector","selector","equalityFn","defaultEquality","deriveKeySet","runWithTracking","runTrackedSelector","initial","currentSelected","trackedFactKeys","trackedDeriveKeys","unsubs","resubscribe","unsub","onUpdate","depsChanged","useDispatch","event","useEvents","useWatch","callback","unsubscribe","onDestroy","useInspect","options","computeInspectState","throttled","cleanup","createThrottle","useRequirementStatus","statusPlugin","typeOrTypes","type","useExplain","requirementId","useConstraintStatus","constraintId","_getConstraintValue","inspection","c","useOptimisticUpdate","requirementType","isPendingValue","errorValue","snapshot","statusUnsub","pendingSubscribers","errorSubscribers","isPending","fn","error","setPending","v","setError","rollback","mutate","updateFn","status","useTimeTravel","buildTimeTravelState","useDirective","moduleDef","config","allPlugins","sp","createRequirementStatusPlugin","createSystem","derivedKeys","subscribeAll","factsStore","pickFacts","allDerivationKeys","getDerived","derivedStore","events","createTypedHooks"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Svelte Adapter - Consolidated Svelte stores for Directive\n *\n * 15 active exports: useFact, useDerived, useDispatch, useSelector,\n * useWatch, useInspect, useRequirementStatus, useEvents, useExplain,\n * useConstraintStatus, useOptimisticUpdate, useDirective, useTimeTravel,\n * createTypedHooks, shallowEqual\n *\n * Store factories: createDerivedStore, createDerivedsStore, createFactStore, createInspectStore\n */\n\nimport { onDestroy } from \"svelte\";\nimport { readable, type Readable } from \"svelte/store\";\nimport type {\n\tModuleSchema,\n\tModuleDef,\n\tPlugin,\n\tDebugConfig,\n\tErrorBoundaryConfig,\n\tInferFacts,\n\tInferDerivations,\n\tInferSelectorState,\n\tInferEvents,\n\tSingleModuleSystem,\n\tSystemInspection,\n\tSystemSnapshot,\n\tTimeTravelState,\n} from \"@directive-run/core\";\nimport {\n\tcreateSystem,\n\tcreateRequirementStatusPlugin,\n} from \"@directive-run/core\";\nimport type { RequirementTypeStatus } from \"@directive-run/core\";\nimport {\n\ttype InspectState,\n\ttype ConstraintInfo,\n\tcomputeInspectState,\n\tcreateThrottle,\n\tassertSystem,\n\tdefaultEquality,\n\tbuildTimeTravelState,\n\tpickFacts,\n\trunTrackedSelector,\n\tdepsChanged,\n\tshallowEqual,\n} from \"@directive-run/core/adapter-utils\";\n\n// Re-export for convenience\nexport type { RequirementTypeStatus, InspectState, ConstraintInfo };\nexport { shallowEqual };\n\n/** Type for the requirement status plugin return value */\nexport type StatusPlugin = ReturnType<typeof createRequirementStatusPlugin>;\n\n// ============================================================================\n// Store Factories\n// ============================================================================\n\n/**\n * Create a Svelte store for a derived value.\n */\nexport function createDerivedStore<T>(\n\t// biome-ignore lint/suspicious/noExplicitAny: System type varies\n\tsystem: SingleModuleSystem<any>,\n\tderivationId: string,\n): Readable<T> {\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\tconst initialValue = system.read(derivationId);\n\t\tif (initialValue === undefined) {\n\t\t\tconsole.warn(\n\t\t\t\t`[Directive] createDerivedStore(\"${derivationId}\") returned undefined. ` +\n\t\t\t\t`Check that \"${derivationId}\" is defined in your module's derive property.`,\n\t\t\t);\n\t\t}\n\t}\n\n\treturn readable<T>(system.read(derivationId) as T, (set) => {\n\t\tconst unsubscribe = system.subscribe([derivationId], () => {\n\t\t\tset(system.read(derivationId) as T);\n\t\t});\n\t\treturn unsubscribe;\n\t});\n}\n\n/**\n * Create a Svelte store for multiple derived values.\n */\nexport function createDerivedsStore<T extends Record<string, unknown>>(\n\t// biome-ignore lint/suspicious/noExplicitAny: System type varies\n\tsystem: SingleModuleSystem<any>,\n\tderivationIds: string[],\n): Readable<T> {\n\tconst getValues = (): T => {\n\t\tconst result: Record<string, unknown> = {};\n\t\tfor (const id of derivationIds) {\n\t\t\tresult[id] = system.read(id);\n\t\t}\n\t\treturn result as T;\n\t};\n\n\treturn readable<T>(getValues(), (set) => {\n\t\tconst unsubscribe = system.subscribe(derivationIds, () => {\n\t\t\tset(getValues());\n\t\t});\n\t\treturn unsubscribe;\n\t});\n}\n\n/**\n * Create a Svelte store for a single fact value.\n */\nexport function createFactStore<T>(\n\t// biome-ignore lint/suspicious/noExplicitAny: System type varies\n\tsystem: SingleModuleSystem<any>,\n\tfactKey: string,\n): Readable<T | undefined> {\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\tif (!system.facts.$store.has(factKey)) {\n\t\t\tconsole.warn(\n\t\t\t\t`[Directive] createFactStore(\"${factKey}\") — fact not found in store. ` +\n\t\t\t\t`Check that \"${factKey}\" is defined in your module's schema.`,\n\t\t\t);\n\t\t}\n\t}\n\n\treturn readable<T | undefined>(\n\t\tsystem.facts.$store.get(factKey) as T | undefined,\n\t\t(set) => {\n\t\t\tconst unsubscribe = system.facts.$store.subscribe([factKey], () => {\n\t\t\t\tset(system.facts.$store.get(factKey) as T | undefined);\n\t\t\t});\n\t\t\treturn unsubscribe;\n\t\t},\n\t);\n}\n\n/**\n * Create a Svelte store for system inspection data.\n * NOTE: This updates on every fact change. Use sparingly in production.\n */\nexport function createInspectStore(\n\t// biome-ignore lint/suspicious/noExplicitAny: System type varies\n\tsystem: SingleModuleSystem<any>,\n): Readable<SystemInspection> {\n\treturn readable<SystemInspection>(system.inspect(), (set) => {\n\t\tconst update = () => set(system.inspect());\n\t\tconst unsubFacts = system.facts.$store.subscribeAll(update);\n\t\tconst unsubSettled = system.onSettledChange(update);\n\t\treturn () => {\n\t\t\tunsubFacts();\n\t\t\tunsubSettled();\n\t\t};\n\t});\n}\n\n// ============================================================================\n// useFact — single key or multi key\n// ============================================================================\n\n/** Single key overload */\nexport function useFact<S extends ModuleSchema, K extends keyof InferFacts<S> & string>(system: SingleModuleSystem<S>, factKey: K): Readable<InferFacts<S>[K] | undefined>;\n/** Multi-key overload */\nexport function useFact<S extends ModuleSchema, K extends keyof InferFacts<S> & string>(system: SingleModuleSystem<S>, factKeys: K[]): Readable<Pick<InferFacts<S>, K>>;\n/** Implementation */\nexport function useFact(\n\t// biome-ignore lint/suspicious/noExplicitAny: Implementation signature\n\tsystem: SingleModuleSystem<any>,\n\tkeyOrKeys: string | string[],\n): Readable<unknown> {\n\tassertSystem(\"useFact\", system);\n\tif (process.env.NODE_ENV !== \"production\" && typeof keyOrKeys === \"function\") {\n\t\tconsole.error(\n\t\t\t\"[Directive] useFact() received a function. Did you mean useSelector()? \" +\n\t\t\t\t\"useFact() takes a string key or array of keys, not a selector function.\",\n\t\t);\n\t}\n\n\t// Multi-key path: useFact(system, [keys])\n\tif (Array.isArray(keyOrKeys)) {\n\t\treturn _useFactMulti(system, keyOrKeys);\n\t}\n\n\t// Single key path: useFact(system, key)\n\treturn createFactStore(system, keyOrKeys);\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: Internal\nfunction _useFactMulti(system: SingleModuleSystem<any>, factKeys: string[]): Readable<Record<string, unknown>> {\n\tconst getValues = (): Record<string, unknown> => {\n\t\tconst result: Record<string, unknown> = {};\n\t\tfor (const key of factKeys) {\n\t\t\tresult[key] = system.facts.$store.get(key);\n\t\t}\n\t\treturn result;\n\t};\n\n\treturn readable(getValues(), (set) => {\n\t\tconst unsubscribe = system.facts.$store.subscribe(factKeys, () => {\n\t\t\tset(getValues());\n\t\t});\n\t\treturn unsubscribe;\n\t});\n}\n\n// ============================================================================\n// useDerived — single key or multi key\n// ============================================================================\n\n/** Single key overload */\nexport function useDerived<S extends ModuleSchema, K extends keyof InferDerivations<S> & string>(system: SingleModuleSystem<S>, derivationId: K): Readable<InferDerivations<S>[K]>;\n/** Multi-key overload */\nexport function useDerived<S extends ModuleSchema, K extends keyof InferDerivations<S> & string>(system: SingleModuleSystem<S>, derivationIds: K[]): Readable<Pick<InferDerivations<S>, K>>;\n/** Implementation */\nexport function useDerived(\n\t// biome-ignore lint/suspicious/noExplicitAny: Implementation signature\n\tsystem: SingleModuleSystem<any>,\n\tidOrIds: string | string[],\n): Readable<unknown> {\n\tassertSystem(\"useDerived\", system);\n\tif (process.env.NODE_ENV !== \"production\" && typeof idOrIds === \"function\") {\n\t\tconsole.error(\n\t\t\t\"[Directive] useDerived() received a function. Did you mean useSelector()? \" +\n\t\t\t\t\"useDerived() takes a string key or array of keys, not a selector function.\",\n\t\t);\n\t}\n\n\t// Multi-key path\n\tif (Array.isArray(idOrIds)) {\n\t\treturn createDerivedsStore(system, idOrIds);\n\t}\n\n\t// Single key path\n\treturn createDerivedStore(system, idOrIds);\n}\n\n// ============================================================================\n// useSelector — auto-tracking selector over facts and derivations\n// ============================================================================\n\n/**\n * Auto-tracking selector over facts and derivations.\n * Uses `withTracking()` to detect which facts the selector accesses,\n * then subscribes only to those keys.\n */\nexport function useSelector<S extends ModuleSchema, R>(system: SingleModuleSystem<S>, selector: (state: InferSelectorState<S>) => R, equalityFn?: (a: R, b: R) => boolean): Readable<R>;\nexport function useSelector(\n\t// biome-ignore lint/suspicious/noExplicitAny: Implementation signature\n\tsystem: SingleModuleSystem<any>,\n\t// biome-ignore lint/suspicious/noExplicitAny: Implementation signature\n\tselector: (state: any) => unknown,\n\tequalityFn: (a: unknown, b: unknown) => boolean = defaultEquality,\n): Readable<unknown> {\n\tassertSystem(\"useSelector\", system);\n\tconst deriveKeySet = new Set(Object.keys(system.derive ?? {}));\n\n\t// Build a tracking-aware state proxy that exposes both facts and derivations\n\tconst runWithTracking = () => runTrackedSelector(system, deriveKeySet, selector);\n\n\tconst initial = runWithTracking();\n\n\treturn readable(initial.value, (set) => {\n\t\tlet currentSelected = initial.value;\n\t\tlet trackedFactKeys = initial.factKeys;\n\t\tlet trackedDeriveKeys = initial.deriveKeys;\n\t\tconst unsubs: Array<() => void> = [];\n\n\t\tconst resubscribe = () => {\n\t\t\tfor (const unsub of unsubs) unsub();\n\t\t\tunsubs.length = 0;\n\n\t\t\tconst onUpdate = () => {\n\t\t\t\tconst result = runWithTracking();\n\t\t\t\tif (!equalityFn(currentSelected, result.value)) {\n\t\t\t\t\tcurrentSelected = result.value;\n\t\t\t\t\tset(result.value);\n\t\t\t\t}\n\t\t\t\t// Re-track: check if deps changed\n\t\t\t\tif (depsChanged(trackedFactKeys, result.factKeys, trackedDeriveKeys, result.deriveKeys)) {\n\t\t\t\t\ttrackedFactKeys = result.factKeys;\n\t\t\t\t\ttrackedDeriveKeys = result.deriveKeys;\n\t\t\t\t\tresubscribe();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tif (trackedFactKeys.length > 0) {\n\t\t\t\tunsubs.push(system.facts.$store.subscribe(trackedFactKeys, onUpdate));\n\t\t\t} else if (trackedDeriveKeys.length === 0) {\n\t\t\t\tunsubs.push(system.facts.$store.subscribeAll(onUpdate));\n\t\t\t}\n\t\t\tif (trackedDeriveKeys.length > 0) {\n\t\t\t\tunsubs.push(system.subscribe(trackedDeriveKeys, onUpdate));\n\t\t\t}\n\t\t};\n\n\t\tresubscribe();\n\n\t\treturn () => {\n\t\t\tfor (const unsub of unsubs) unsub();\n\t\t};\n\t});\n}\n\n// ============================================================================\n// useDispatch\n// ============================================================================\n\nexport function useDispatch<S extends ModuleSchema>(\n\tsystem: SingleModuleSystem<S>,\n): (event: InferEvents<S>) => void {\n\tassertSystem(\"useDispatch\", system);\n\treturn (event: InferEvents<S>) => {\n\t\tsystem.dispatch(event);\n\t};\n}\n\n// ============================================================================\n// useEvents — memoized events reference\n// ============================================================================\n\n/**\n * Returns the system's events dispatcher.\n */\nexport function useEvents<S extends ModuleSchema>(\n\tsystem: SingleModuleSystem<S>,\n): SingleModuleSystem<S>[\"events\"] {\n\tassertSystem(\"useEvents\", system);\n\treturn system.events;\n}\n\n// ============================================================================\n// useWatch — derivation or fact side-effect\n// ============================================================================\n\n/** Watch a derivation or fact by key (auto-detected). When a key exists in both facts and derivations, the derivation overload takes priority. */\nexport function useWatch<S extends ModuleSchema, K extends keyof InferDerivations<S> & string>(\n\tsystem: SingleModuleSystem<S>,\n\tkey: K,\n\tcallback: (newValue: InferDerivations<S>[K], previousValue: InferDerivations<S>[K] | undefined) => void,\n): void;\n/** Watch a fact key with auto-detection. */\nexport function useWatch<S extends ModuleSchema, K extends keyof InferFacts<S> & string>(\n\tsystem: SingleModuleSystem<S>,\n\tkey: K,\n\tcallback: (newValue: InferFacts<S>[K] | undefined, previousValue: InferFacts<S>[K] | undefined) => void,\n): void;\n/** Implementation */\nexport function useWatch(\n\t// biome-ignore lint/suspicious/noExplicitAny: Implementation signature\n\tsystem: SingleModuleSystem<any>,\n\tkey: string,\n\tcallback: (newValue: unknown, prevValue: unknown) => void,\n): void {\n\tassertSystem(\"useWatch\", system);\n\n\tconst unsubscribe = system.watch(key, callback);\n\tonDestroy(unsubscribe);\n}\n\n// ============================================================================\n// useInspect — consolidated inspection hook\n// ============================================================================\n\n/** Options for useInspect */\nexport interface UseInspectOptions {\n\tthrottleMs?: number;\n}\n\n/**\n * Consolidated system inspection hook.\n * Returns Readable<InspectState> with optional throttling.\n */\nexport function useInspect(\n\t// biome-ignore lint/suspicious/noExplicitAny: Must work with any schema\n\tsystem: SingleModuleSystem<any>,\n\toptions?: UseInspectOptions,\n): Readable<InspectState> {\n\tassertSystem(\"useInspect\", system);\n\tif (options?.throttleMs && options.throttleMs > 0) {\n\t\treturn readable<InspectState>(computeInspectState(system), (set) => {\n\t\t\tconst { throttled, cleanup } = createThrottle(() => {\n\t\t\t\tset(computeInspectState(system));\n\t\t\t}, options.throttleMs!);\n\n\t\t\tconst unsubFacts = system.facts.$store.subscribeAll(throttled);\n\t\t\tconst unsubSettled = system.onSettledChange(throttled);\n\n\t\t\treturn () => {\n\t\t\t\tcleanup();\n\t\t\t\tunsubFacts();\n\t\t\t\tunsubSettled();\n\t\t\t};\n\t\t});\n\t}\n\n\treturn readable<InspectState>(computeInspectState(system), (set) => {\n\t\tconst update = () => set(computeInspectState(system));\n\t\tconst unsubFacts = system.facts.$store.subscribeAll(update);\n\t\tconst unsubSettled = system.onSettledChange(update);\n\n\t\treturn () => {\n\t\t\tunsubFacts();\n\t\t\tunsubSettled();\n\t\t};\n\t});\n}\n\n// ============================================================================\n// useRequirementStatus — single or multi\n// ============================================================================\n\n/** Single type overload */\nexport function useRequirementStatus(statusPlugin: StatusPlugin, type: string): Readable<RequirementTypeStatus>;\n/** Multi-type overload */\nexport function useRequirementStatus(statusPlugin: StatusPlugin, types: string[]): Readable<Record<string, RequirementTypeStatus>>;\n/** Implementation */\nexport function useRequirementStatus(\n\tstatusPlugin: StatusPlugin,\n\ttypeOrTypes: string | string[],\n): Readable<RequirementTypeStatus> | Readable<Record<string, RequirementTypeStatus>> {\n\tif (Array.isArray(typeOrTypes)) {\n\t\tconst getValues = (): Record<string, RequirementTypeStatus> => {\n\t\t\tconst result: Record<string, RequirementTypeStatus> = {};\n\t\t\tfor (const type of typeOrTypes) {\n\t\t\t\tresult[type] = statusPlugin.getStatus(type);\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\n\t\treturn readable(getValues(), (set) => {\n\t\t\tconst unsubscribe = statusPlugin.subscribe(() => {\n\t\t\t\tset(getValues());\n\t\t\t});\n\t\t\treturn unsubscribe;\n\t\t});\n\t}\n\n\treturn readable<RequirementTypeStatus>(statusPlugin.getStatus(typeOrTypes), (set) => {\n\t\tconst unsubscribe = statusPlugin.subscribe(() => {\n\t\t\tset(statusPlugin.getStatus(typeOrTypes));\n\t\t});\n\t\treturn unsubscribe;\n\t});\n}\n\n// ============================================================================\n// useExplain — reactive requirement explanation\n// ============================================================================\n\n/**\n * Reactively returns the explanation string for a requirement.\n */\nexport function useExplain(\n\t// biome-ignore lint/suspicious/noExplicitAny: Must work with any schema\n\tsystem: SingleModuleSystem<any>,\n\trequirementId: string,\n): Readable<string | null> {\n\tassertSystem(\"useExplain\", system);\n\treturn readable<string | null>(system.explain(requirementId), (set) => {\n\t\tconst update = () => set(system.explain(requirementId));\n\t\tconst unsubFacts = system.facts.$store.subscribeAll(update);\n\t\tconst unsubSettled = system.onSettledChange(update);\n\n\t\treturn () => {\n\t\t\tunsubFacts();\n\t\t\tunsubSettled();\n\t\t};\n\t});\n}\n\n// ============================================================================\n// useConstraintStatus — reactive constraint inspection\n// ============================================================================\n\n/** Get all constraints */\nexport function useConstraintStatus(\n\tsystem: SingleModuleSystem<any>,\n): Readable<ConstraintInfo[]>;\n/** Get a single constraint by ID */\nexport function useConstraintStatus(\n\tsystem: SingleModuleSystem<any>,\n\tconstraintId: string,\n): Readable<ConstraintInfo | null>;\n/** Implementation */\nexport function useConstraintStatus(\n\t// biome-ignore lint/suspicious/noExplicitAny: Must work with any schema\n\tsystem: SingleModuleSystem<any>,\n\tconstraintId?: string,\n): Readable<ConstraintInfo[] | ConstraintInfo | null> {\n\tassertSystem(\"useConstraintStatus\", system);\n\treturn readable<ConstraintInfo[] | ConstraintInfo | null>(\n\t\t_getConstraintValue(system, constraintId),\n\t\t(set) => {\n\t\t\tconst update = () => set(_getConstraintValue(system, constraintId));\n\t\t\tconst unsubFacts = system.facts.$store.subscribeAll(update);\n\t\t\tconst unsubSettled = system.onSettledChange(update);\n\n\t\t\treturn () => {\n\t\t\t\tunsubFacts();\n\t\t\t\tunsubSettled();\n\t\t\t};\n\t\t},\n\t);\n}\n\nfunction _getConstraintValue(\n\t// biome-ignore lint/suspicious/noExplicitAny: Internal\n\tsystem: SingleModuleSystem<any>,\n\tconstraintId?: string,\n): ConstraintInfo[] | ConstraintInfo | null {\n\tconst inspection = system.inspect();\n\tif (!constraintId) return inspection.constraints;\n\treturn inspection.constraints.find((c: ConstraintInfo) => c.id === constraintId) ?? null;\n}\n\n// ============================================================================\n// useOptimisticUpdate — batch with rollback on failure\n// ============================================================================\n\nexport interface OptimisticUpdateResult {\n\tmutate: (updateFn: () => void) => void;\n\tisPending: Readable<boolean>;\n\terror: Readable<Error | null>;\n\trollback: () => void;\n}\n\n/**\n * Optimistic update hook. Saves a snapshot before mutating, monitors\n * a requirement type via statusPlugin, and rolls back on failure.\n */\nexport function useOptimisticUpdate(\n\t// biome-ignore lint/suspicious/noExplicitAny: Must work with any schema\n\tsystem: SingleModuleSystem<any>,\n\tstatusPlugin?: StatusPlugin,\n\trequirementType?: string,\n): OptimisticUpdateResult {\n\tassertSystem(\"useOptimisticUpdate\", system);\n\tlet isPendingValue = false;\n\tlet errorValue: Error | null = null;\n\tlet snapshot: SystemSnapshot | null = null;\n\tlet statusUnsub: (() => void) | null = null;\n\n\t// We track subscribers manually since we need imperative push\n\tconst pendingSubscribers = new Set<(v: boolean) => void>();\n\tconst errorSubscribers = new Set<(v: Error | null) => void>();\n\n\tconst isPending: Readable<boolean> = {\n\t\tsubscribe(fn) {\n\t\t\tfn(isPendingValue);\n\t\t\tpendingSubscribers.add(fn);\n\t\t\treturn () => pendingSubscribers.delete(fn);\n\t\t},\n\t};\n\n\tconst error: Readable<Error | null> = {\n\t\tsubscribe(fn) {\n\t\t\tfn(errorValue);\n\t\t\terrorSubscribers.add(fn);\n\t\t\treturn () => errorSubscribers.delete(fn);\n\t\t},\n\t};\n\n\tconst setPending = (v: boolean) => {\n\t\tisPendingValue = v;\n\t\tfor (const fn of pendingSubscribers) fn(v);\n\t};\n\n\tconst setError = (v: Error | null) => {\n\t\terrorValue = v;\n\t\tfor (const fn of errorSubscribers) fn(v);\n\t};\n\n\tconst rollback = () => {\n\t\tif (snapshot) {\n\t\t\tsystem.restore(snapshot);\n\t\t\tsnapshot = null;\n\t\t}\n\t\tsetPending(false);\n\t\tsetError(null);\n\t\tstatusUnsub?.();\n\t\tstatusUnsub = null;\n\t};\n\n\tconst mutate = (updateFn: () => void) => {\n\t\tsnapshot = system.getSnapshot();\n\t\tsetPending(true);\n\t\tsetError(null);\n\t\tsystem.batch(updateFn);\n\n\t\tif (statusPlugin && requirementType) {\n\t\t\tstatusUnsub?.();\n\t\t\tstatusUnsub = statusPlugin.subscribe(() => {\n\t\t\t\tconst status = statusPlugin.getStatus(requirementType);\n\t\t\t\tif (!status.isLoading && !status.hasError) {\n\t\t\t\t\tsnapshot = null;\n\t\t\t\t\tsetPending(false);\n\t\t\t\t\tstatusUnsub?.();\n\t\t\t\t\tstatusUnsub = null;\n\t\t\t\t} else if (status.hasError) {\n\t\t\t\t\tsetError(status.lastError);\n\t\t\t\t\trollback();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\tonDestroy(() => {\n\t\tstatusUnsub?.();\n\t});\n\n\treturn { mutate, isPending, error, rollback };\n}\n\n// ============================================================================\n// useTimeTravel — reactive time-travel store\n// ============================================================================\n\n/**\n * Reactive time-travel Svelte store. Returns a Readable that updates\n * when snapshots are taken or navigation occurs.\n *\n * @example\n * ```svelte\n * const tt = useTimeTravel(system);\n * <button disabled={!$tt?.canUndo} on:click={() => $tt?.undo()}>Undo</button>\n * ```\n */\nexport function useTimeTravel(\n\t// biome-ignore lint/suspicious/noExplicitAny: Must work with any schema\n\tsystem: SingleModuleSystem<any>,\n): Readable<TimeTravelState | null> {\n\tassertSystem(\"useTimeTravel\", system);\n\treturn readable<TimeTravelState | null>(buildTimeTravelState(system), (set) => {\n\t\treturn system.onTimeTravelChange(() => set(buildTimeTravelState(system)));\n\t});\n}\n\n// ============================================================================\n// Scoped System\n// ============================================================================\n\n/** Configuration for useDirective */\ninterface UseDirectiveConfig {\n\t// biome-ignore lint/suspicious/noExplicitAny: Plugin types vary\n\tplugins?: Plugin<any>[];\n\tdebug?: DebugConfig;\n\terrorBoundary?: ErrorBoundaryConfig;\n\ttickMs?: number;\n\tzeroConfig?: boolean;\n\t// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\n\tinitialFacts?: Record<string, any>;\n\tstatus?: boolean;\n\t/** Fact keys to subscribe to (omit for all) */\n\tfacts?: string[];\n\t/** Derivation keys to subscribe to (omit for all) */\n\tderived?: string[];\n}\n\n/**\n * Create a scoped Directive system with automatic lifecycle management.\n * When no `facts` or `derived` keys are specified, subscribes to ALL\n * facts and derivations and returns Svelte readable stores.\n *\n * @example\n * ```svelte\n * // Subscribe to everything\n * const { facts, derived, events, dispatch } = useDirective(counterModule);\n *\n * // Selective keys\n * const { facts, derived } = useDirective(counterModule, { facts: [\"count\"], derived: [\"doubled\"] });\n * ```\n */\nexport function useDirective<M extends ModuleSchema>(\n\tmoduleDef: ModuleDef<M>,\n\tconfig?: UseDirectiveConfig,\n) {\n\tconst allPlugins = [...(config?.plugins ?? [])];\n\tlet statusPlugin: StatusPlugin | undefined;\n\n\tif (config?.status) {\n\t\tconst sp = createRequirementStatusPlugin();\n\t\tstatusPlugin = sp;\n\t\t// biome-ignore lint/suspicious/noExplicitAny: Plugin generic issues\n\t\tallPlugins.push(sp.plugin as Plugin<any>);\n\t}\n\n\t// biome-ignore lint/suspicious/noExplicitAny: Required for overload compatibility\n\tconst system = createSystem({\n\t\tmodule: moduleDef,\n\t\tplugins: allPlugins.length > 0 ? allPlugins : undefined,\n\t\tdebug: config?.debug,\n\t\terrorBoundary: config?.errorBoundary,\n\t\ttickMs: config?.tickMs,\n\t\tzeroConfig: config?.zeroConfig,\n\t\tinitialFacts: config?.initialFacts,\n\t} as any) as unknown as SingleModuleSystem<M>;\n\n\tsystem.start();\n\n\tonDestroy(() => {\n\t\tsystem.destroy();\n\t});\n\n\tconst factKeys = config?.facts;\n\tconst derivedKeys = config?.derived;\n\tconst subscribeAll = !factKeys && !derivedKeys;\n\n\t// Subscribe to facts\n\tconst factsStore: Readable<InferFacts<M>> = subscribeAll\n\t\t? readable(system.facts.$store.toObject() as InferFacts<M>, (set) => {\n\t\t\treturn system.facts.$store.subscribeAll(() => {\n\t\t\t\tset(system.facts.$store.toObject() as InferFacts<M>);\n\t\t\t});\n\t\t})\n\t\t: readable(pickFacts(system, factKeys ?? []) as InferFacts<M>, (set) => {\n\t\t\tif (!factKeys || factKeys.length === 0) return () => {};\n\t\t\treturn system.facts.$store.subscribe(factKeys, () => {\n\t\t\t\tset(pickFacts(system, factKeys) as InferFacts<M>);\n\t\t\t});\n\t\t});\n\n\t// Subscribe to derivations\n\tconst allDerivationKeys = subscribeAll ? Object.keys(system.derive ?? {}) : (derivedKeys ?? []);\n\tconst getDerived = (): InferDerivations<M> => {\n\t\tconst result: Record<string, unknown> = {};\n\t\tfor (const key of allDerivationKeys) {\n\t\t\tresult[key] = system.read(key);\n\t\t}\n\t\treturn result as InferDerivations<M>;\n\t};\n\tconst derivedStore: Readable<InferDerivations<M>> = allDerivationKeys.length > 0\n\t\t? readable(getDerived(), (set) => {\n\t\t\treturn system.subscribe(allDerivationKeys, () => {\n\t\t\t\tset(getDerived());\n\t\t\t});\n\t\t})\n\t\t: readable(getDerived(), () => () => {});\n\n\tconst events = system.events;\n\tconst dispatch = (event: InferEvents<M>) => system.dispatch(event);\n\n\treturn {\n\t\tsystem,\n\t\tfacts: factsStore,\n\t\tderived: derivedStore,\n\t\tevents,\n\t\tdispatch,\n\t\tstatusPlugin,\n\t};\n}\n\n// ============================================================================\n// Typed Hooks Factory\n// ============================================================================\n\nexport function createTypedHooks<M extends ModuleSchema>(): {\n\tuseFact: <K extends keyof InferFacts<M> & string>(\n\t\tsystem: SingleModuleSystem<M>,\n\t\tfactKey: K,\n\t) => Readable<InferFacts<M>[K] | undefined>;\n\tuseDerived: <K extends keyof InferDerivations<M> & string>(\n\t\tsystem: SingleModuleSystem<M>,\n\t\tderivationId: K,\n\t) => Readable<InferDerivations<M>[K]>;\n\tuseDispatch: (system: SingleModuleSystem<M>) => (event: InferEvents<M>) => void;\n\tuseEvents: (system: SingleModuleSystem<M>) => SingleModuleSystem<M>[\"events\"];\n\tuseWatch: <K extends string>(\n\t\tsystem: SingleModuleSystem<M>,\n\t\tkey: K,\n\t\tcallback: (newValue: unknown, previousValue: unknown) => void,\n\t) => void;\n} {\n\treturn {\n\t\tuseFact: <K extends keyof InferFacts<M> & string>(system: SingleModuleSystem<M>, factKey: K) =>\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: Cast for overload compatibility\n\t\t\tuseFact(system as SingleModuleSystem<any>, factKey) as Readable<InferFacts<M>[K] | undefined>,\n\t\tuseDerived: <K extends keyof InferDerivations<M> & string>(system: SingleModuleSystem<M>, derivationId: K) =>\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: Cast for overload compatibility\n\t\t\tuseDerived(system as SingleModuleSystem<any>, derivationId) as Readable<InferDerivations<M>[K]>,\n\t\tuseDispatch: (system: SingleModuleSystem<M>) => {\n\t\t\treturn (event: InferEvents<M>) => {\n\t\t\t\tsystem.dispatch(event);\n\t\t\t};\n\t\t},\n\t\tuseEvents: (system: SingleModuleSystem<M>) => useEvents<M>(system),\n\t\tuseWatch: <K extends string>(\n\t\t\tsystem: SingleModuleSystem<M>,\n\t\t\tkey: K,\n\t\t\tcallback: (newValue: unknown, previousValue: unknown) => void,\n\t\t) =>\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: Cast for overload compatibility\n\t\t\tuseWatch(system as SingleModuleSystem<any>, key, callback),\n\t};\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@directive-run/svelte",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "Svelte stores adapter for Directive.",
5
5
  "license": "MIT",
6
6
  "author": "Jason Comes",
@@ -44,15 +44,15 @@
44
44
  "dist"
45
45
  ],
46
46
  "peerDependencies": {
47
- "svelte": ">=4",
48
- "@directive-run/core": "0.1.1"
47
+ "@directive-run/core": "*",
48
+ "svelte": ">=4"
49
49
  },
50
50
  "devDependencies": {
51
51
  "@types/node": "^25.2.0",
52
52
  "svelte": "^4.2.0",
53
53
  "tsup": "^8.3.5",
54
54
  "typescript": "^5.7.2",
55
- "@directive-run/core": "0.1.1"
55
+ "@directive-run/core": "0.2.0"
56
56
  },
57
57
  "scripts": {
58
58
  "build": "tsup",