@directive-run/solid 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +16 -2
- package/dist/index.d.ts +16 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var solidJs=require('solid-js'),core=require('@directive-run/core'),adapterUtils=require('@directive-run/core/adapter-utils');function C(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)?
|
|
1
|
+
'use strict';var solidJs=require('solid-js'),core=require('@directive-run/core'),adapterUtils=require('@directive-run/core/adapter-utils');function C(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)?V(e,t):E(e,t)}function E(e,t){process.env.NODE_ENV!=="production"&&(e.facts.$store.has(t)||console.warn(`[Directive] useFact("${t}") \u2014 fact not found in store. Check that "${t}" is defined in your module's schema.`));let[s,r]=solidJs.createSignal(e.facts.$store.get(t)),n=e.facts.$store.subscribe([t],()=>{r(()=>e.facts.$store.get(t));});return solidJs.onCleanup(n),s}function V(e,t){let s=()=>{let u={};for(let i of t)u[i]=e.facts.$store.get(i);return u},[r,n]=solidJs.createSignal(s()),o=e.facts.$store.subscribe(t,()=>{n(s);});return solidJs.onCleanup(o),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)?P(e,t):$(e,t)}function $(e,t){process.env.NODE_ENV!=="production"&&e.read(t)===void 0&&console.warn(`[Directive] useDerived("${t}") returned undefined. Check that "${t}" is defined in your module's derive property.`);let[s,r]=solidJs.createSignal(e.read(t)),n=e.subscribe([t],()=>{r(()=>e.read(t));});return solidJs.onCleanup(n),s}function P(e,t){let s=()=>{let u={};for(let i of t)u[i]=e.read(i);return u},[r,n]=solidJs.createSignal(s()),o=e.subscribe(t,()=>{n(s);});return solidJs.onCleanup(o),r}function L(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(),u=o.factKeys,i=o.deriveKeys,[c,f]=solidJs.createSignal(o.value),d=[],y=()=>{for(let p of d)p();d.length=0;let S=()=>{let p=n();f(v=>s(v,p.value)?v:p.value),adapterUtils.depsChanged(u,p.factKeys,i,p.deriveKeys)&&(u=p.factKeys,i=p.deriveKeys,y());};u.length>0?d.push(e.facts.$store.subscribe(u,S)):i.length===0&&d.push(e.facts.$store.subscribeAll(S)),i.length>0&&d.push(e.subscribe(i,S));};return y(),solidJs.onCleanup(()=>{for(let S of d)S();}),c}function H(e){return adapterUtils.assertSystem("useDispatch",e),t=>{e.dispatch(t);}}function N(e){return adapterUtils.assertSystem("useEvents",e),e.events}function U(e,t,s){adapterUtils.assertSystem("useWatch",e);let r=e.watch(t,s);solidJs.onCleanup(r);}function G(e,t){adapterUtils.assertSystem("useInspect",e);let[s,r]=solidJs.createSignal(adapterUtils.computeInspectState(e)),n=()=>{r(adapterUtils.computeInspectState(e));};if(t?.throttleMs&&t.throttleMs>0){let{throttled:o,cleanup:u}=adapterUtils.createThrottle(n,t.throttleMs),i=e.facts.$store.subscribeAll(o),c=e.onSettledChange(o);solidJs.onCleanup(()=>{u(),i(),c();});}else {let o=e.facts.$store.subscribeAll(n),u=e.onSettledChange(n);solidJs.onCleanup(()=>{o(),u();});}return s}function k(e,t){if(Array.isArray(t)){let o=()=>{let f={};for(let d of t)f[d]=e.getStatus(d);return f},[u,i]=solidJs.createSignal(o()),c=e.subscribe(()=>{i(o);});return solidJs.onCleanup(c),u}let[s,r]=solidJs.createSignal(e.getStatus(t)),n=e.subscribe(()=>{r(e.getStatus(t));});return solidJs.onCleanup(n),s}function J(e,t){adapterUtils.assertSystem("useExplain",e);let[s,r]=solidJs.createSignal(e.explain(t)),n=()=>r(e.explain(t)),o=e.facts.$store.subscribeAll(n),u=e.onSettledChange(n);return solidJs.onCleanup(()=>{o(),u();}),s}function O(e,t){adapterUtils.assertSystem("useConstraintStatus",e);let s=()=>{let c=e.inspect();return t?c.constraints.find(f=>f.id===t)??null:c.constraints},[r,n]=solidJs.createSignal(s()),o=()=>n(s),u=e.facts.$store.subscribeAll(o),i=e.onSettledChange(o);return solidJs.onCleanup(()=>{u(),i();}),r}function Q(e,t,s){adapterUtils.assertSystem("useOptimisticUpdate",e);let[r,n]=solidJs.createSignal(false),[o,u]=solidJs.createSignal(null),i=null,c=null,f=()=>{i&&(e.restore(i),i=null),n(false),u(null),c?.(),c=null;},d=y=>{i=e.getSnapshot(),n(true),u(null),e.batch(y),t&&s&&(c?.(),c=t.subscribe(()=>{let S=t.getStatus(s);!S.isLoading&&!S.hasError?(i=null,n(false),c?.(),c=null):S.hasError&&(u(()=>S.lastError),f());}));};return solidJs.onCleanup(()=>{c?.();}),{mutate:d,isPending:r,error:o,rollback:f}}function X(e,t){let s=Array.isArray(t)?t:[t],r=()=>s.some(n=>e.getStatus(n).isLoading);if(r())throw new Promise(n=>{let o=e.subscribe(()=>{r()||(o(),n());});});return k(e,t)}function Y(e){adapterUtils.assertSystem("useTimeTravel",e);let[t,s]=solidJs.createSignal(adapterUtils.buildTimeTravelState(e)),r=e.onTimeTravelChange(()=>s(adapterUtils.buildTimeTravelState(e)));return solidJs.onCleanup(r),t}function Z(e,t){let s=[...t?.plugins??[]],r;if(t?.status){let b=core.createRequirementStatusPlugin();r=b,s.push(b.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(),solidJs.onCleanup(()=>{n.destroy();});let o=t?.facts,u=t?.derived,i=!o&&!u,[c,f]=solidJs.createSignal(i?n.facts.$store.toObject():adapterUtils.pickFacts(n,o??[])),d=i?n.facts.$store.subscribeAll(()=>{f(()=>n.facts.$store.toObject());}):o&&o.length>0?n.facts.$store.subscribe(o,()=>{f(()=>adapterUtils.pickFacts(n,o));}):null,y=i?Object.keys(n.derive??{}):u??[],S=()=>{let b={};for(let M of y)b[M]=n.read(M);return b},[p,v]=solidJs.createSignal(S()),A=y.length>0?n.subscribe(y,()=>{v(S);}):null;solidJs.onCleanup(()=>{d?.(),A?.();});let D=n.events;return {system:n,facts:c,derived:p,events:D,dispatch:b=>n.dispatch(b),statusPlugin:r}}function ee(e,t){let[s,r]=solidJs.createSignal(e.read(t)),n=e.subscribe([t],()=>{r(()=>e.read(t));});return [s,n]}function te(e,t){let[s,r]=solidJs.createSignal(e.facts.$store.get(t)),n=e.facts.$store.subscribe([t],()=>{r(()=>e.facts.$store.get(t));});return [s,n]}function ne(){return {useFact:(e,t)=>C(e,t),useDerived:(e,t)=>q(e,t),useDispatch:e=>t=>{e.dispatch(t);},useEvents:e=>N(e),useWatch:(e,t,s)=>U(e,t,s)}}function se(e,t,s){let[r,n]=solidJs.createSignal(s(e)),o=e.subscribe(t,()=>{n(()=>s(e));});return solidJs.onCleanup(o),r}Object.defineProperty(exports,"shallowEqual",{enumerable:true,get:function(){return adapterUtils.shallowEqual}});exports.createDerivedSignal=ee;exports.createFactSignal=te;exports.createTypedHooks=ne;exports.useConstraintStatus=O;exports.useDerived=q;exports.useDirective=Z;exports.useDispatch=H;exports.useEvents=N;exports.useExplain=J;exports.useFact=C;exports.useInspect=G;exports.useNamespacedSelector=se;exports.useOptimisticUpdate=Q;exports.useRequirementStatus=k;exports.useSelector=L;exports.useSuspenseRequirement=X;exports.useTimeTravel=Y;exports.useWatch=U;//# sourceMappingURL=index.cjs.map
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":["useFact","system","keyOrKeys","assertSystem","_useFactMulti","_useFactSingle","factKey","value","setValue","createSignal","unsubscribe","onCleanup","factKeys","getValues","result","key","state","setState","useDerived","idOrIds","_useDerivedMulti","_useDerivedSingle","derivationId","derivationIds","id","useSelector","selector","equalityFn","defaultEquality","deriveKeySet","runWithTracking","runTrackedSelector","initial","trackedFactKeys","trackedDeriveKeys","selected","setSelected","unsubs","resubscribe","unsub","onUpdate","prev","depsChanged","useDispatch","event","useEvents","useWatch","callback","useInspect","options","computeInspectState","update","throttled","cleanup","createThrottle","unsubFacts","unsubSettled","useRequirementStatus","statusPlugin","typeOrTypes","type","status","setStatus","useExplain","requirementId","explanation","setExplanation","useConstraintStatus","constraintId","getVal","inspection","c","useOptimisticUpdate","requirementType","isPending","setIsPending","error","setError","snapshot","statusUnsub","rollback","mutate","updateFn","useSuspenseRequirement","types","anyLoading","t","resolve","useTimeTravel","buildTimeTravelState","useDirective","moduleDef","config","allPlugins","sp","createRequirementStatusPlugin","createSystem","derivedKeys","subscribeAll","factsState","setFactsState","pickFacts","allDerivationKeys","getDerived","derivedState","setDerivedState","unsubDerived","events","createDerivedSignal","createFactSignal","createTypedHooks"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Solid Adapter - Consolidated SolidJS primitives for Directive\n *\n * 16 active exports: useFact, useDerived, useDispatch, useSelector,\n * useWatch, useInspect, useRequirementStatus, useEvents, useExplain,\n * useConstraintStatus, useOptimisticUpdate, useDirective, useTimeTravel,\n * createTypedHooks, useSuspenseRequirement, shallowEqual\n *\n * Signal factories: createDerivedSignal, createFactSignal\n */\n\nimport {\n\tcreateSignal,\n\tonCleanup,\n\ttype Accessor,\n} from \"solid-js\";\nimport type {\n\tModuleSchema,\n\tModuleDef,\n\tPlugin,\n\tDebugConfig,\n\tErrorBoundaryConfig,\n\tInferFacts,\n\tInferDerivations,\n\tInferSelectorState,\n\tInferEvents,\n\tSingleModuleSystem,\n\tSystemSnapshot,\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// 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): Accessor<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[]): Accessor<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): Accessor<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\n\tif (Array.isArray(keyOrKeys)) {\n\t\treturn _useFactMulti(system, keyOrKeys);\n\t}\n\n\t// Single key path\n\treturn _useFactSingle(system, keyOrKeys);\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: Internal\nfunction _useFactSingle(system: SingleModuleSystem<any>, factKey: string): Accessor<unknown> {\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] useFact(\"${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\tconst [value, setValue] = createSignal(system.facts.$store.get(factKey));\n\tconst unsubscribe = system.facts.$store.subscribe([factKey], () => {\n\t\tsetValue(() => system.facts.$store.get(factKey));\n\t});\n\tonCleanup(unsubscribe);\n\treturn value;\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: Internal\nfunction _useFactMulti(system: SingleModuleSystem<any>, factKeys: string[]): Accessor<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\tconst [state, setState] = createSignal(getValues());\n\tconst unsubscribe = system.facts.$store.subscribe(factKeys, () => {\n\t\tsetState(getValues);\n\t});\n\tonCleanup(unsubscribe);\n\treturn state;\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): Accessor<InferDerivations<S>[K]>;\n/** Multi-key overload */\nexport function useDerived<S extends ModuleSchema, K extends keyof InferDerivations<S> & string>(system: SingleModuleSystem<S>, derivationIds: K[]): Accessor<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): Accessor<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 _useDerivedMulti(system, idOrIds);\n\t}\n\n\t// Single key path\n\treturn _useDerivedSingle(system, idOrIds);\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: Internal\nfunction _useDerivedSingle(system: SingleModuleSystem<any>, derivationId: string): Accessor<unknown> {\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] useDerived(\"${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\tconst [value, setValue] = createSignal(system.read(derivationId));\n\tconst unsubscribe = system.subscribe([derivationId], () => {\n\t\tsetValue(() => system.read(derivationId));\n\t});\n\tonCleanup(unsubscribe);\n\treturn value;\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: Internal\nfunction _useDerivedMulti(system: SingleModuleSystem<any>, derivationIds: string[]): Accessor<Record<string, unknown>> {\n\tconst getValues = (): Record<string, unknown> => {\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;\n\t};\n\tconst [state, setState] = createSignal(getValues());\n\tconst unsubscribe = system.subscribe(derivationIds, () => {\n\t\tsetState(getValues);\n\t});\n\tonCleanup(unsubscribe);\n\treturn state;\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>(\n\tsystem: SingleModuleSystem<S>,\n\tselector: (state: InferSelectorState<S>) => R,\n\tequalityFn?: (a: R, b: R) => boolean,\n): Accessor<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): Accessor<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\tlet trackedFactKeys = initial.factKeys;\n\tlet trackedDeriveKeys = initial.deriveKeys;\n\tconst [selected, setSelected] = createSignal(initial.value);\n\n\tconst unsubs: Array<() => void> = [];\n\n\tconst resubscribe = () => {\n\t\tfor (const unsub of unsubs) unsub();\n\t\tunsubs.length = 0;\n\n\t\tconst onUpdate = () => {\n\t\t\tconst result = runWithTracking();\n\t\t\tsetSelected((prev) => {\n\t\t\t\tif (!equalityFn(prev, result.value)) return result.value;\n\t\t\t\treturn prev;\n\t\t\t});\n\t\t\t// Re-track: check if deps changed\n\t\t\tif (depsChanged(trackedFactKeys, result.factKeys, trackedDeriveKeys, result.deriveKeys)) {\n\t\t\t\ttrackedFactKeys = result.factKeys;\n\t\t\t\ttrackedDeriveKeys = result.deriveKeys;\n\t\t\t\tresubscribe();\n\t\t\t}\n\t\t};\n\n\t\tif (trackedFactKeys.length > 0) {\n\t\t\tunsubs.push(system.facts.$store.subscribe(trackedFactKeys, onUpdate));\n\t\t} else if (trackedDeriveKeys.length === 0) {\n\t\t\tunsubs.push(system.facts.$store.subscribeAll(onUpdate));\n\t\t}\n\t\tif (trackedDeriveKeys.length > 0) {\n\t\t\tunsubs.push(system.subscribe(trackedDeriveKeys, onUpdate));\n\t\t}\n\t};\n\n\tresubscribe();\n\n\tonCleanup(() => {\n\t\tfor (const unsub of unsubs) unsub();\n\t});\n\n\treturn selected;\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\tonCleanup(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 Accessor<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): Accessor<InspectState> {\n\tassertSystem(\"useInspect\", system);\n\tconst [state, setState] = createSignal<InspectState>(computeInspectState(system));\n\n\tconst update = () => {\n\t\tsetState(computeInspectState(system));\n\t};\n\n\tif (options?.throttleMs && options.throttleMs > 0) {\n\t\tconst { throttled, cleanup } = createThrottle(update, options.throttleMs);\n\t\tconst unsubFacts = system.facts.$store.subscribeAll(throttled);\n\t\tconst unsubSettled = system.onSettledChange(throttled);\n\t\tonCleanup(() => {\n\t\t\tcleanup();\n\t\t\tunsubFacts();\n\t\t\tunsubSettled();\n\t\t});\n\t} else {\n\t\tconst unsubFacts = system.facts.$store.subscribeAll(update);\n\t\tconst unsubSettled = system.onSettledChange(update);\n\t\tonCleanup(() => {\n\t\t\tunsubFacts();\n\t\t\tunsubSettled();\n\t\t});\n\t}\n\n\treturn state;\n}\n\n// ============================================================================\n// useRequirementStatus — single or multi\n// ============================================================================\n\n/** Single type overload */\nexport function useRequirementStatus(statusPlugin: StatusPlugin, type: string): Accessor<RequirementTypeStatus>;\n/** Multi-type overload */\nexport function useRequirementStatus(statusPlugin: StatusPlugin, types: string[]): Accessor<Record<string, RequirementTypeStatus>>;\n/** Implementation */\nexport function useRequirementStatus(\n\tstatusPlugin: StatusPlugin,\n\ttypeOrTypes: string | string[],\n): Accessor<RequirementTypeStatus> | Accessor<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\t\tconst [state, setState] = createSignal(getValues());\n\t\tconst unsubscribe = statusPlugin.subscribe(() => {\n\t\t\tsetState(getValues);\n\t\t});\n\t\tonCleanup(unsubscribe);\n\t\treturn state;\n\t}\n\n\tconst [status, setStatus] = createSignal<RequirementTypeStatus>(statusPlugin.getStatus(typeOrTypes));\n\tconst unsubscribe = statusPlugin.subscribe(() => {\n\t\tsetStatus(statusPlugin.getStatus(typeOrTypes));\n\t});\n\tonCleanup(unsubscribe);\n\treturn status;\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): Accessor<string | null> {\n\tassertSystem(\"useExplain\", system);\n\tconst [explanation, setExplanation] = createSignal<string | null>(system.explain(requirementId));\n\n\tconst update = () => setExplanation(system.explain(requirementId));\n\tconst unsubFacts = system.facts.$store.subscribeAll(update);\n\tconst unsubSettled = system.onSettledChange(update);\n\tonCleanup(() => {\n\t\tunsubFacts();\n\t\tunsubSettled();\n\t});\n\n\treturn explanation;\n}\n\n// ============================================================================\n// useConstraintStatus — reactive constraint inspection\n// ============================================================================\n\n/** Get all constraints */\nexport function useConstraintStatus(\n\tsystem: SingleModuleSystem<any>,\n): Accessor<ConstraintInfo[]>;\n/** Get a single constraint by ID */\nexport function useConstraintStatus(\n\tsystem: SingleModuleSystem<any>,\n\tconstraintId: string,\n): Accessor<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): Accessor<ConstraintInfo[] | ConstraintInfo | null> {\n\tassertSystem(\"useConstraintStatus\", system);\n\tconst getVal = () => {\n\t\tconst inspection = system.inspect();\n\t\tif (!constraintId) return inspection.constraints;\n\t\treturn inspection.constraints.find((c: ConstraintInfo) => c.id === constraintId) ?? null;\n\t};\n\n\tconst [state, setState] = createSignal<ConstraintInfo[] | ConstraintInfo | null>(getVal());\n\n\tconst update = () => setState(getVal);\n\tconst unsubFacts = system.facts.$store.subscribeAll(update);\n\tconst unsubSettled = system.onSettledChange(update);\n\tonCleanup(() => {\n\t\tunsubFacts();\n\t\tunsubSettled();\n\t});\n\n\treturn state;\n}\n\n// ============================================================================\n// useOptimisticUpdate — batch with rollback on failure\n// ============================================================================\n\nexport interface OptimisticUpdateResult {\n\tmutate: (updateFn: () => void) => void;\n\tisPending: Accessor<boolean>;\n\terror: Accessor<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\tconst [isPending, setIsPending] = createSignal(false);\n\tconst [error, setError] = createSignal<Error | null>(null);\n\tlet snapshot: SystemSnapshot | null = null;\n\tlet statusUnsub: (() => void) | null = null;\n\n\tconst rollback = () => {\n\t\tif (snapshot) {\n\t\t\tsystem.restore(snapshot);\n\t\t\tsnapshot = null;\n\t\t}\n\t\tsetIsPending(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\tsetIsPending(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\tsetIsPending(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\tonCleanup(() => {\n\t\tstatusUnsub?.();\n\t});\n\n\treturn { mutate, isPending, error, rollback };\n}\n\n// ============================================================================\n// useSuspenseRequirement — Solid-specific Suspense integration\n// ============================================================================\n\n/**\n * Single type: throws a promise while the requirement is pending (Suspense).\n */\nexport function useSuspenseRequirement(statusPlugin: StatusPlugin, type: string): Accessor<RequirementTypeStatus>;\n/**\n * Multi-type: throws a promise while any of the requirements are pending.\n */\nexport function useSuspenseRequirement(statusPlugin: StatusPlugin, types: string[]): Accessor<Record<string, RequirementTypeStatus>>;\n/** Implementation */\nexport function useSuspenseRequirement(\n\tstatusPlugin: StatusPlugin,\n\ttypeOrTypes: string | string[],\n): Accessor<RequirementTypeStatus> | Accessor<Record<string, RequirementTypeStatus>> {\n\tconst types = Array.isArray(typeOrTypes) ? typeOrTypes : [typeOrTypes];\n\n\t// Check if any are still loading — if so, throw a promise\n\tconst anyLoading = () => types.some((t) => statusPlugin.getStatus(t).isLoading);\n\n\tif (anyLoading()) {\n\t\tthrow new Promise<void>((resolve) => {\n\t\t\tconst unsub = statusPlugin.subscribe(() => {\n\t\t\t\tif (!anyLoading()) {\n\t\t\t\t\tunsub();\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t// Once resolved, return normal accessor\n\tif (Array.isArray(typeOrTypes)) {\n\t\treturn useRequirementStatus(statusPlugin, typeOrTypes) as Accessor<Record<string, RequirementTypeStatus>>;\n\t}\n\treturn useRequirementStatus(statusPlugin, typeOrTypes) as Accessor<RequirementTypeStatus>;\n}\n\n// ============================================================================\n// useTimeTravel — reactive time-travel signal\n// ============================================================================\n\n/**\n * Reactive time-travel signal. Returns an Accessor that updates\n * when snapshots are taken or navigation occurs.\n *\n * @example\n * ```tsx\n * const tt = useTimeTravel(system);\n * <button disabled={!tt()?.canUndo} onClick={() => 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): Accessor<ReturnType<typeof buildTimeTravelState>> {\n\tassertSystem(\"useTimeTravel\", system);\n\tconst [state, setState] = createSignal<ReturnType<typeof buildTimeTravelState>>(buildTimeTravelState(system));\n\tconst unsub = system.onTimeTravelChange(() => setState(buildTimeTravelState(system)));\n\tonCleanup(unsub);\n\treturn state;\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 reactive signals.\n *\n * @example\n * ```tsx\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\tonCleanup(() => {\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 [factsState, setFactsState] = createSignal(\n\t\tsubscribeAll\n\t\t\t? (system.facts.$store.toObject() as InferFacts<M>)\n\t\t\t: (pickFacts(system, factKeys ?? []) as InferFacts<M>),\n\t);\n\tconst unsubFacts = subscribeAll\n\t\t? system.facts.$store.subscribeAll(() => {\n\t\t\tsetFactsState(() => system.facts.$store.toObject() as InferFacts<M>);\n\t\t})\n\t\t: factKeys && factKeys.length > 0\n\t\t\t? system.facts.$store.subscribe(factKeys, () => {\n\t\t\t\tsetFactsState(() => pickFacts(system, factKeys) as InferFacts<M>);\n\t\t\t})\n\t\t\t: null;\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 [derivedState, setDerivedState] = createSignal(getDerived());\n\tconst unsubDerived = allDerivationKeys.length > 0\n\t\t? system.subscribe(allDerivationKeys, () => { setDerivedState(getDerived); })\n\t\t: null;\n\n\tonCleanup(() => {\n\t\tunsubFacts?.();\n\t\tunsubDerived?.();\n\t});\n\n\tconst events = system.events;\n\tconst dispatch = (event: InferEvents<M>) => system.dispatch(event);\n\n\treturn {\n\t\tsystem,\n\t\tfacts: factsState as Accessor<InferFacts<M>>,\n\t\tderived: derivedState as Accessor<InferDerivations<M>>,\n\t\tevents,\n\t\tdispatch,\n\t\tstatusPlugin,\n\t};\n}\n\n// ============================================================================\n// Signal Factories (for use outside components)\n// ============================================================================\n\n/**\n * Create a derivation signal outside of a component.\n */\nexport function createDerivedSignal<T>(\n\t// biome-ignore lint/suspicious/noExplicitAny: Must work with any schema\n\tsystem: SingleModuleSystem<any>,\n\tderivationId: string,\n): [Accessor<T>, () => void] {\n\tconst [value, setValue] = createSignal<T>(system.read(derivationId) as T);\n\tconst unsubscribe = system.subscribe([derivationId], () => {\n\t\tsetValue(() => system.read(derivationId) as T);\n\t});\n\treturn [value, unsubscribe];\n}\n\n/**\n * Create a fact signal outside of a component.\n */\nexport function createFactSignal<T>(\n\t// biome-ignore lint/suspicious/noExplicitAny: Must work with any schema\n\tsystem: SingleModuleSystem<any>,\n\tfactKey: string,\n): [Accessor<T | undefined>, () => void] {\n\tconst [value, setValue] = createSignal<T | undefined>(\n\t\tsystem.facts.$store.get(factKey) as T | undefined,\n\t);\n\tconst unsubscribe = system.facts.$store.subscribe([factKey], () => {\n\t\tsetValue(() => system.facts.$store.get(factKey) as T | undefined);\n\t});\n\treturn [value, unsubscribe];\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) => Accessor<InferFacts<M>[K] | undefined>;\n\tuseDerived: <K extends keyof InferDerivations<M> & string>(\n\t\tsystem: SingleModuleSystem<M>,\n\t\tderivationId: K,\n\t) => Accessor<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: Required for overload compatibility\n\t\t\tuseFact(system as SingleModuleSystem<any>, factKey as string) as Accessor<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: Required for overload compatibility\n\t\t\tuseDerived(system as SingleModuleSystem<any>, derivationId as string) as Accessor<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: Required 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":["useFact","system","keyOrKeys","assertSystem","_useFactMulti","_useFactSingle","factKey","value","setValue","createSignal","unsubscribe","onCleanup","factKeys","getValues","result","key","state","setState","useDerived","idOrIds","_useDerivedMulti","_useDerivedSingle","derivationId","derivationIds","id","useSelector","selector","equalityFn","defaultEquality","deriveKeySet","runWithTracking","runTrackedSelector","initial","trackedFactKeys","trackedDeriveKeys","selected","setSelected","unsubs","resubscribe","unsub","onUpdate","prev","depsChanged","useDispatch","event","useEvents","useWatch","callback","useInspect","options","computeInspectState","update","throttled","cleanup","createThrottle","unsubFacts","unsubSettled","useRequirementStatus","statusPlugin","typeOrTypes","type","status","setStatus","useExplain","requirementId","explanation","setExplanation","useConstraintStatus","constraintId","getVal","inspection","c","useOptimisticUpdate","requirementType","isPending","setIsPending","error","setError","snapshot","statusUnsub","rollback","mutate","updateFn","useSuspenseRequirement","types","anyLoading","t","resolve","useTimeTravel","buildTimeTravelState","useDirective","moduleDef","config","allPlugins","sp","createRequirementStatusPlugin","createSystem","derivedKeys","subscribeAll","factsState","setFactsState","pickFacts","allDerivationKeys","getDerived","derivedState","setDerivedState","unsubDerived","events","createDerivedSignal","createFactSignal","createTypedHooks","useNamespacedSelector","keys"],"mappings":"2IAkEO,SAASA,CAAAA,CAEfC,CAAAA,CACAC,EACoB,CAUpB,OATAC,0BAAa,SAAA,CAAWF,CAAM,EAC1B,OAAA,CAAQ,GAAA,CAAI,QAAA,GAAa,YAAA,EAAgB,OAAOC,CAAAA,EAAc,UAAA,EACjE,QAAQ,KAAA,CACP,gJAED,EAIG,KAAA,CAAM,OAAA,CAAQA,CAAS,CAAA,CACnBE,EAAcH,CAAAA,CAAQC,CAAS,EAIhCG,CAAAA,CAAeJ,CAAAA,CAAQC,CAAS,CACxC,CAGA,SAASG,CAAAA,CAAeJ,EAAiCK,CAAAA,CAAoC,CACxF,QAAQ,GAAA,CAAI,QAAA,GAAa,eACvBL,CAAAA,CAAO,KAAA,CAAM,OAAO,GAAA,CAAIK,CAAO,GACnC,OAAA,CAAQ,IAAA,CACP,wBAAwBA,CAAO,CAAA,+CAAA,EAChBA,CAAO,CAAA,qCAAA,CACvB,CAAA,CAAA,CAIF,GAAM,CAACC,EAAOC,CAAQ,CAAA,CAAIC,qBAAaR,CAAAA,CAAO,KAAA,CAAM,OAAO,GAAA,CAAIK,CAAO,CAAC,CAAA,CACjEI,EAAcT,CAAAA,CAAO,KAAA,CAAM,OAAO,SAAA,CAAU,CAACK,CAAO,CAAA,CAAG,IAAM,CAClEE,CAAAA,CAAS,IAAMP,CAAAA,CAAO,KAAA,CAAM,OAAO,GAAA,CAAIK,CAAO,CAAC,EAChD,CAAC,EACD,OAAAK,iBAAAA,CAAUD,CAAW,CAAA,CACdH,CACR,CAGA,SAASH,CAAAA,CAAcH,EAAiCW,CAAAA,CAAuD,CAC9G,IAAMC,CAAAA,CAAY,IAA+B,CAChD,IAAMC,EAAkC,EAAC,CACzC,QAAWC,CAAAA,IAAOH,CAAAA,CACjBE,CAAAA,CAAOC,CAAG,EAAId,CAAAA,CAAO,KAAA,CAAM,OAAO,GAAA,CAAIc,CAAG,EAE1C,OAAOD,CACR,CAAA,CACM,CAACE,EAAOC,CAAQ,CAAA,CAAIR,qBAAaI,CAAAA,EAAW,EAC5CH,CAAAA,CAAcT,CAAAA,CAAO,MAAM,MAAA,CAAO,SAAA,CAAUW,EAAU,IAAM,CACjEK,EAASJ,CAAS,EACnB,CAAC,CAAA,CACD,OAAAF,iBAAAA,CAAUD,CAAW,EACdM,CACR,CAWO,SAASE,CAAAA,CAEfjB,CAAAA,CACAkB,EACoB,CAUpB,OATAhB,yBAAAA,CAAa,YAAA,CAAcF,CAAM,CAAA,CAC7B,OAAA,CAAQ,IAAI,QAAA,GAAa,YAAA,EAAgB,OAAOkB,CAAAA,EAAY,UAAA,EAC/D,OAAA,CAAQ,KAAA,CACP,sJAED,CAAA,CAIG,KAAA,CAAM,QAAQA,CAAO,CAAA,CACjBC,EAAiBnB,CAAAA,CAAQkB,CAAO,EAIjCE,CAAAA,CAAkBpB,CAAAA,CAAQkB,CAAO,CACzC,CAGA,SAASE,CAAAA,CAAkBpB,CAAAA,CAAiCqB,EAAyC,CAChG,OAAA,CAAQ,GAAA,CAAI,QAAA,GAAa,cACPrB,CAAAA,CAAO,IAAA,CAAKqB,CAAY,CAAA,GACxB,MAAA,EACpB,QAAQ,IAAA,CACP,CAAA,wBAAA,EAA2BA,CAAY,CAAA,mCAAA,EACxBA,CAAY,CAAA,8CAAA,CAC5B,CAAA,CAGF,GAAM,CAACf,CAAAA,CAAOC,CAAQ,CAAA,CAAIC,oBAAAA,CAAaR,CAAAA,CAAO,IAAA,CAAKqB,CAAY,CAAC,CAAA,CAC1DZ,EAAcT,CAAAA,CAAO,SAAA,CAAU,CAACqB,CAAY,CAAA,CAAG,IAAM,CAC1Dd,CAAAA,CAAS,IAAMP,CAAAA,CAAO,IAAA,CAAKqB,CAAY,CAAC,EACzC,CAAC,CAAA,CACD,OAAAX,iBAAAA,CAAUD,CAAW,EACdH,CACR,CAGA,SAASa,CAAAA,CAAiBnB,CAAAA,CAAiCsB,EAA4D,CACtH,IAAMV,CAAAA,CAAY,IAA+B,CAChD,IAAMC,CAAAA,CAAkC,EAAC,CACzC,IAAA,IAAWU,KAAMD,CAAAA,CAChBT,CAAAA,CAAOU,CAAE,CAAA,CAAIvB,EAAO,IAAA,CAAKuB,CAAE,EAE5B,OAAOV,CACR,EACM,CAACE,CAAAA,CAAOC,CAAQ,CAAA,CAAIR,oBAAAA,CAAaI,GAAW,CAAA,CAC5CH,EAAcT,CAAAA,CAAO,SAAA,CAAUsB,EAAe,IAAM,CACzDN,CAAAA,CAASJ,CAAS,EACnB,CAAC,CAAA,CACD,OAAAF,iBAAAA,CAAUD,CAAW,EACdM,CACR,CAgBO,SAASS,CAAAA,CAEfxB,CAAAA,CAEAyB,EACAC,CAAAA,CAAkDC,4BAAAA,CAC9B,CACpBzB,yBAAAA,CAAa,aAAA,CAAeF,CAAM,CAAA,CAClC,IAAM4B,CAAAA,CAAe,IAAI,IAAI,MAAA,CAAO,IAAA,CAAK5B,EAAO,MAAA,EAAU,EAAE,CAAC,CAAA,CAGvD6B,EAAkB,IAAMC,+BAAAA,CAAmB9B,EAAQ4B,CAAAA,CAAcH,CAAQ,EAEzEM,CAAAA,CAAUF,CAAAA,GACZG,CAAAA,CAAkBD,CAAAA,CAAQ,QAAA,CAC1BE,CAAAA,CAAoBF,EAAQ,UAAA,CAC1B,CAACG,EAAUC,CAAW,CAAA,CAAI3B,qBAAauB,CAAAA,CAAQ,KAAK,CAAA,CAEpDK,CAAAA,CAA4B,EAAC,CAE7BC,CAAAA,CAAc,IAAM,CACzB,IAAA,IAAWC,KAASF,CAAAA,CAAQE,CAAAA,EAAM,CAClCF,CAAAA,CAAO,OAAS,CAAA,CAEhB,IAAMG,EAAW,IAAM,CACtB,IAAM1B,CAAAA,CAASgB,CAAAA,GACfM,CAAAA,CAAaK,CAAAA,EACPd,EAAWc,CAAAA,CAAM3B,CAAAA,CAAO,KAAK,CAAA,CAC3B2B,CAAAA,CADqC3B,EAAO,KAEnD,CAAA,CAEG4B,wBAAAA,CAAYT,CAAAA,CAAiBnB,EAAO,QAAA,CAAUoB,CAAAA,CAAmBpB,EAAO,UAAU,CAAA,GACrFmB,EAAkBnB,CAAAA,CAAO,QAAA,CACzBoB,CAAAA,CAAoBpB,CAAAA,CAAO,WAC3BwB,CAAAA,EAAY,EAEd,EAEIL,CAAAA,CAAgB,MAAA,CAAS,EAC5BI,CAAAA,CAAO,IAAA,CAAKpC,CAAAA,CAAO,KAAA,CAAM,OAAO,SAAA,CAAUgC,CAAAA,CAAiBO,CAAQ,CAAC,CAAA,CAC1DN,EAAkB,MAAA,GAAW,CAAA,EACvCG,EAAO,IAAA,CAAKpC,CAAAA,CAAO,MAAM,MAAA,CAAO,YAAA,CAAauC,CAAQ,CAAC,CAAA,CAEnDN,EAAkB,MAAA,CAAS,CAAA,EAC9BG,CAAAA,CAAO,IAAA,CAAKpC,EAAO,SAAA,CAAUiC,CAAAA,CAAmBM,CAAQ,CAAC,EAE3D,EAEA,OAAAF,CAAAA,EAAY,CAEZ3B,iBAAAA,CAAU,IAAM,CACf,IAAA,IAAW4B,KAASF,CAAAA,CAAQE,CAAAA,GAC7B,CAAC,CAAA,CAEMJ,CACR,CAMO,SAASQ,CAAAA,CACf1C,CAAAA,CACkC,CAClC,OAAAE,yBAAAA,CAAa,cAAeF,CAAM,CAAA,CAC1B2C,GAA0B,CACjC3C,CAAAA,CAAO,SAAS2C,CAAK,EACtB,CACD,CASO,SAASC,EACf5C,CAAAA,CACkC,CAClC,OAAAE,yBAAAA,CAAa,YAAaF,CAAM,CAAA,CACzBA,EAAO,MACf,CAmBO,SAAS6C,CAAAA,CAEf7C,CAAAA,CACAc,EACAgC,CAAAA,CACO,CACP5C,0BAAa,UAAA,CAAYF,CAAM,EAE/B,IAAMS,CAAAA,CAAcT,EAAO,KAAA,CAAMc,CAAAA,CAAKgC,CAAQ,CAAA,CAC9CpC,kBAAUD,CAAW,EACtB,CAeO,SAASsC,CAAAA,CAEf/C,EACAgD,CAAAA,CACyB,CACzB9C,0BAAa,YAAA,CAAcF,CAAM,EACjC,GAAM,CAACe,EAAOC,CAAQ,CAAA,CAAIR,qBAA2ByC,gCAAAA,CAAoBjD,CAAM,CAAC,CAAA,CAE1EkD,EAAS,IAAM,CACpBlC,EAASiC,gCAAAA,CAAoBjD,CAAM,CAAC,EACrC,CAAA,CAEA,GAAIgD,CAAAA,EAAS,YAAcA,CAAAA,CAAQ,UAAA,CAAa,EAAG,CAClD,GAAM,CAAE,SAAA,CAAAG,CAAAA,CAAW,OAAA,CAAAC,CAAQ,EAAIC,2BAAAA,CAAeH,CAAAA,CAAQF,EAAQ,UAAU,CAAA,CAClEM,EAAatD,CAAAA,CAAO,KAAA,CAAM,OAAO,YAAA,CAAamD,CAAS,EACvDI,CAAAA,CAAevD,CAAAA,CAAO,gBAAgBmD,CAAS,CAAA,CACrDzC,kBAAU,IAAM,CACf0C,CAAAA,EAAQ,CACRE,GAAW,CACXC,CAAAA,GACD,CAAC,EACF,MAAO,CACN,IAAMD,CAAAA,CAAatD,CAAAA,CAAO,MAAM,MAAA,CAAO,YAAA,CAAakD,CAAM,CAAA,CACpDK,CAAAA,CAAevD,EAAO,eAAA,CAAgBkD,CAAM,CAAA,CAClDxC,iBAAAA,CAAU,IAAM,CACf4C,CAAAA,GACAC,CAAAA,GACD,CAAC,EACF,CAEA,OAAOxC,CACR,CAWO,SAASyC,CAAAA,CACfC,CAAAA,CACAC,EACoF,CACpF,GAAI,MAAM,OAAA,CAAQA,CAAW,CAAA,CAAG,CAC/B,IAAM9C,CAAAA,CAAY,IAA6C,CAC9D,IAAMC,CAAAA,CAAgD,EAAC,CACvD,IAAA,IAAW8C,CAAAA,IAAQD,CAAAA,CAClB7C,EAAO8C,CAAI,CAAA,CAAIF,EAAa,SAAA,CAAUE,CAAI,EAE3C,OAAO9C,CACR,CAAA,CACM,CAACE,EAAOC,CAAQ,CAAA,CAAIR,qBAAaI,CAAAA,EAAW,EAC5CH,CAAAA,CAAcgD,CAAAA,CAAa,UAAU,IAAM,CAChDzC,EAASJ,CAAS,EACnB,CAAC,CAAA,CACD,OAAAF,kBAAUD,CAAW,CAAA,CACdM,CACR,CAEA,GAAM,CAAC6C,CAAAA,CAAQC,CAAS,CAAA,CAAIrD,oBAAAA,CAAoCiD,EAAa,SAAA,CAAUC,CAAW,CAAC,CAAA,CAC7FjD,CAAAA,CAAcgD,EAAa,SAAA,CAAU,IAAM,CAChDI,CAAAA,CAAUJ,CAAAA,CAAa,UAAUC,CAAW,CAAC,EAC9C,CAAC,EACD,OAAAhD,iBAAAA,CAAUD,CAAW,CAAA,CACdmD,CACR,CASO,SAASE,CAAAA,CAEf9D,EACA+D,CAAAA,CAC0B,CAC1B7D,0BAAa,YAAA,CAAcF,CAAM,EACjC,GAAM,CAACgE,EAAaC,CAAc,CAAA,CAAIzD,oBAAAA,CAA4BR,CAAAA,CAAO,QAAQ+D,CAAa,CAAC,EAEzFb,CAAAA,CAAS,IAAMe,EAAejE,CAAAA,CAAO,OAAA,CAAQ+D,CAAa,CAAC,EAC3DT,CAAAA,CAAatD,CAAAA,CAAO,MAAM,MAAA,CAAO,YAAA,CAAakD,CAAM,CAAA,CACpDK,CAAAA,CAAevD,CAAAA,CAAO,eAAA,CAAgBkD,CAAM,CAAA,CAClD,OAAAxC,kBAAU,IAAM,CACf4C,GAAW,CACXC,CAAAA,GACD,CAAC,CAAA,CAEMS,CACR,CAgBO,SAASE,EAEflE,CAAAA,CACAmE,CAAAA,CACqD,CACrDjE,yBAAAA,CAAa,qBAAA,CAAuBF,CAAM,CAAA,CAC1C,IAAMoE,CAAAA,CAAS,IAAM,CACpB,IAAMC,CAAAA,CAAarE,EAAO,OAAA,EAAQ,CAClC,OAAKmE,CAAAA,CACEE,EAAW,WAAA,CAAY,IAAA,CAAMC,GAAsBA,CAAAA,CAAE,EAAA,GAAOH,CAAY,CAAA,EAAK,IAAA,CAD1DE,CAAAA,CAAW,WAEtC,EAEM,CAACtD,CAAAA,CAAOC,CAAQ,CAAA,CAAIR,oBAAAA,CAAuD4D,GAAQ,CAAA,CAEnFlB,EAAS,IAAMlC,CAAAA,CAASoD,CAAM,CAAA,CAC9Bd,CAAAA,CAAatD,EAAO,KAAA,CAAM,MAAA,CAAO,aAAakD,CAAM,CAAA,CACpDK,CAAAA,CAAevD,CAAAA,CAAO,gBAAgBkD,CAAM,CAAA,CAClD,OAAAxC,iBAAAA,CAAU,IAAM,CACf4C,CAAAA,EAAW,CACXC,CAAAA,GACD,CAAC,CAAA,CAEMxC,CACR,CAiBO,SAASwD,CAAAA,CAEfvE,EACAyD,CAAAA,CACAe,CAAAA,CACyB,CACzBtE,yBAAAA,CAAa,sBAAuBF,CAAM,CAAA,CAC1C,GAAM,CAACyE,CAAAA,CAAWC,CAAY,CAAA,CAAIlE,oBAAAA,CAAa,KAAK,CAAA,CAC9C,CAACmE,EAAOC,CAAQ,CAAA,CAAIpE,qBAA2B,IAAI,CAAA,CACrDqE,EAAkC,IAAA,CAClCC,CAAAA,CAAmC,IAAA,CAEjCC,CAAAA,CAAW,IAAM,CAClBF,CAAAA,GACH7E,EAAO,OAAA,CAAQ6E,CAAQ,EACvBA,CAAAA,CAAW,IAAA,CAAA,CAEZH,EAAa,KAAK,CAAA,CAClBE,EAAS,IAAI,CAAA,CACbE,KAAc,CACdA,CAAAA,CAAc,KACf,CAAA,CAEME,CAAAA,CAAUC,CAAAA,EAAyB,CACxCJ,EAAW7E,CAAAA,CAAO,WAAA,GAClB0E,CAAAA,CAAa,IAAI,EACjBE,CAAAA,CAAS,IAAI,EACb5E,CAAAA,CAAO,KAAA,CAAMiF,CAAQ,CAAA,CAEjBxB,CAAAA,EAAgBe,IACnBM,CAAAA,IAAc,CACdA,EAAcrB,CAAAA,CAAa,SAAA,CAAU,IAAM,CAC1C,IAAMG,CAAAA,CAASH,CAAAA,CAAa,UAAUe,CAAe,CAAA,CACjD,CAACZ,CAAAA,CAAO,SAAA,EAAa,CAACA,CAAAA,CAAO,UAChCiB,CAAAA,CAAW,IAAA,CACXH,EAAa,KAAK,CAAA,CAClBI,KAAc,CACdA,CAAAA,CAAc,IAAA,EACJlB,CAAAA,CAAO,WACjBgB,CAAAA,CAAS,IAAMhB,EAAO,SAAS,CAAA,CAC/BmB,GAAS,EAEX,CAAC,GAEH,CAAA,CAEA,OAAArE,kBAAU,IAAM,CACfoE,MACD,CAAC,EAEM,CAAE,MAAA,CAAAE,CAAAA,CAAQ,SAAA,CAAAP,EAAW,KAAA,CAAAE,CAAAA,CAAO,SAAAI,CAAS,CAC7C,CAeO,SAASG,CAAAA,CACfzB,CAAAA,CACAC,CAAAA,CACoF,CACpF,IAAMyB,CAAAA,CAAQ,MAAM,OAAA,CAAQzB,CAAW,EAAIA,CAAAA,CAAc,CAACA,CAAW,CAAA,CAG/D0B,EAAa,IAAMD,CAAAA,CAAM,KAAME,CAAAA,EAAM5B,CAAAA,CAAa,UAAU4B,CAAC,CAAA,CAAE,SAAS,CAAA,CAE9E,GAAID,GAAW,CACd,MAAM,IAAI,OAAA,CAAeE,CAAAA,EAAY,CACpC,IAAMhD,CAAAA,CAAQmB,CAAAA,CAAa,SAAA,CAAU,IAAM,CACrC2B,CAAAA,KACJ9C,CAAAA,EAAM,CACNgD,GAAQ,EAEV,CAAC,EACF,CAAC,EAIF,OACQ9B,EAAqBC,CAAAA,CAAcC,CAAW,CAGvD,CAgBO,SAAS6B,CAAAA,CAEfvF,CAAAA,CACoD,CACpDE,yBAAAA,CAAa,eAAA,CAAiBF,CAAM,CAAA,CACpC,GAAM,CAACe,CAAAA,CAAOC,CAAQ,EAAIR,oBAAAA,CAAsDgF,iCAAAA,CAAqBxF,CAAM,CAAC,CAAA,CACtGsC,EAAQtC,CAAAA,CAAO,kBAAA,CAAmB,IAAMgB,CAAAA,CAASwE,kCAAqBxF,CAAM,CAAC,CAAC,CAAA,CACpF,OAAAU,kBAAU4B,CAAK,CAAA,CACRvB,CACR,CAqCO,SAAS0E,EACfC,CAAAA,CACAC,CAAAA,CACC,CACD,IAAMC,CAAAA,CAAa,CAAC,GAAID,CAAAA,EAAQ,OAAA,EAAW,EAAG,CAAA,CAC1ClC,CAAAA,CAEJ,GAAIkC,CAAAA,EAAQ,MAAA,CAAQ,CACnB,IAAME,CAAAA,CAAKC,oCAA8B,CACzCrC,CAAAA,CAAeoC,EAEfD,CAAAA,CAAW,IAAA,CAAKC,EAAG,MAAqB,EACzC,CAGA,IAAM7F,CAAAA,CAAS+F,iBAAAA,CAAa,CAC3B,OAAQL,CAAAA,CACR,OAAA,CAASE,EAAW,MAAA,CAAS,CAAA,CAAIA,EAAa,MAAA,CAC9C,KAAA,CAAOD,CAAAA,EAAQ,KAAA,CACf,cAAeA,CAAAA,EAAQ,aAAA,CACvB,OAAQA,CAAAA,EAAQ,MAAA,CAChB,WAAYA,CAAAA,EAAQ,UAAA,CACpB,YAAA,CAAcA,CAAAA,EAAQ,YACvB,CAAQ,CAAA,CAER3F,EAAO,KAAA,EAAM,CAEbU,kBAAU,IAAM,CACfV,EAAO,OAAA,GACR,CAAC,CAAA,CAED,IAAMW,EAAWgF,CAAAA,EAAQ,KAAA,CACnBK,EAAcL,CAAAA,EAAQ,OAAA,CACtBM,CAAAA,CAAe,CAACtF,GAAY,CAACqF,CAAAA,CAG7B,CAACE,CAAAA,CAAYC,CAAa,EAAI3F,oBAAAA,CACnCyF,CAAAA,CACIjG,CAAAA,CAAO,KAAA,CAAM,OAAO,QAAA,EAAS,CAC7BoG,uBAAUpG,CAAAA,CAAQW,CAAAA,EAAY,EAAE,CACrC,CAAA,CACM2C,CAAAA,CAAa2C,EAChBjG,CAAAA,CAAO,KAAA,CAAM,OAAO,YAAA,CAAa,IAAM,CACxCmG,CAAAA,CAAc,IAAMnG,EAAO,KAAA,CAAM,MAAA,CAAO,UAA2B,EACpE,CAAC,CAAA,CACCW,CAAAA,EAAYA,EAAS,MAAA,CAAS,CAAA,CAC7BX,CAAAA,CAAO,KAAA,CAAM,OAAO,SAAA,CAAUW,CAAAA,CAAU,IAAM,CAC/CwF,CAAAA,CAAc,IAAMC,sBAAAA,CAAUpG,CAAAA,CAAQW,CAAQ,CAAkB,EACjE,CAAC,CAAA,CACC,KAGE0F,CAAAA,CAAoBJ,CAAAA,CAAe,OAAO,IAAA,CAAKjG,CAAAA,CAAO,MAAA,EAAU,EAAE,CAAA,CAAKgG,CAAAA,EAAe,EAAC,CACvFM,CAAAA,CAAa,IAA2B,CAC7C,IAAMzF,EAAkC,EAAC,CACzC,QAAWC,CAAAA,IAAOuF,CAAAA,CACjBxF,EAAOC,CAAG,CAAA,CAAId,EAAO,IAAA,CAAKc,CAAG,CAAA,CAE9B,OAAOD,CACR,CAAA,CACM,CAAC0F,EAAcC,CAAe,CAAA,CAAIhG,qBAAa8F,CAAAA,EAAY,EAC3DG,CAAAA,CAAeJ,CAAAA,CAAkB,OAAS,CAAA,CAC7CrG,CAAAA,CAAO,UAAUqG,CAAAA,CAAmB,IAAM,CAAEG,CAAAA,CAAgBF,CAAU,EAAG,CAAC,EAC1E,IAAA,CAEH5F,iBAAAA,CAAU,IAAM,CACf4C,CAAAA,KACAmD,CAAAA,KACD,CAAC,CAAA,CAED,IAAMC,EAAS1G,CAAAA,CAAO,MAAA,CAGtB,OAAO,CACN,MAAA,CAAAA,EACA,KAAA,CAAOkG,CAAAA,CACP,OAAA,CAASK,CAAAA,CACT,OAAAG,CAAAA,CACA,QAAA,CAPiB/D,GAA0B3C,CAAAA,CAAO,QAAA,CAAS2C,CAAK,CAAA,CAQhE,YAAA,CAAAc,CACD,CACD,CASO,SAASkD,EAAAA,CAEf3G,EACAqB,CAAAA,CAC4B,CAC5B,GAAM,CAACf,CAAAA,CAAOC,CAAQ,CAAA,CAAIC,qBAAgBR,CAAAA,CAAO,IAAA,CAAKqB,CAAY,CAAM,CAAA,CAClEZ,EAAcT,CAAAA,CAAO,SAAA,CAAU,CAACqB,CAAY,CAAA,CAAG,IAAM,CAC1Dd,CAAAA,CAAS,IAAMP,CAAAA,CAAO,IAAA,CAAKqB,CAAY,CAAM,EAC9C,CAAC,CAAA,CACD,OAAO,CAACf,CAAAA,CAAOG,CAAW,CAC3B,CAKO,SAASmG,EAAAA,CAEf5G,CAAAA,CACAK,CAAAA,CACwC,CACxC,GAAM,CAACC,CAAAA,CAAOC,CAAQ,CAAA,CAAIC,oBAAAA,CACzBR,EAAO,KAAA,CAAM,MAAA,CAAO,GAAA,CAAIK,CAAO,CAChC,CAAA,CACMI,CAAAA,CAAcT,EAAO,KAAA,CAAM,MAAA,CAAO,UAAU,CAACK,CAAO,EAAG,IAAM,CAClEE,EAAS,IAAMP,CAAAA,CAAO,MAAM,MAAA,CAAO,GAAA,CAAIK,CAAO,CAAkB,EACjE,CAAC,CAAA,CACD,OAAO,CAACC,CAAAA,CAAOG,CAAW,CAC3B,CAMO,SAASoG,EAAAA,EAgBd,CACD,OAAO,CACN,QAAS,CAAyC7G,CAAAA,CAA+BK,IAEhFN,CAAAA,CAAQC,CAAAA,CAAmCK,CAAiB,CAAA,CAC7D,UAAA,CAAY,CAA+CL,CAAAA,CAA+BqB,IAEzFJ,CAAAA,CAAWjB,CAAAA,CAAmCqB,CAAsB,CAAA,CACrE,WAAA,CAAcrB,GACL2C,CAAAA,EAA0B,CACjC3C,EAAO,QAAA,CAAS2C,CAAK,EACtB,CAAA,CAED,SAAA,CAAY3C,GAAkC4C,CAAAA,CAAa5C,CAAM,EACjE,QAAA,CAAU,CACTA,CAAAA,CACAc,CAAAA,CACAgC,IAGAD,CAAAA,CAAS7C,CAAAA,CAAmCc,EAAKgC,CAAQ,CAC3D,CACD,CAmBO,SAASgE,GACf9G,CAAAA,CACA+G,CAAAA,CACAtF,EACc,CACd,GAAM,CAACnB,CAAAA,CAAOC,CAAQ,EAAIC,oBAAAA,CAAgBiB,CAAAA,CAASzB,CAAM,CAAC,EACpDS,CAAAA,CAAcT,CAAAA,CAAO,UAAU+G,CAAAA,CAAM,IAAM,CAChDxG,CAAAA,CAAS,IAAMkB,EAASzB,CAAM,CAAC,EAChC,CAAC,CAAA,CACD,OAAAU,iBAAAA,CAAUD,CAAW,EAEdH,CACR","file":"index.cjs","sourcesContent":["/**\n * Solid Adapter - Consolidated SolidJS primitives for Directive\n *\n * 16 active exports: useFact, useDerived, useDispatch, useSelector,\n * useWatch, useInspect, useRequirementStatus, useEvents, useExplain,\n * useConstraintStatus, useOptimisticUpdate, useDirective, useTimeTravel,\n * createTypedHooks, useSuspenseRequirement, shallowEqual\n *\n * Signal factories: createDerivedSignal, createFactSignal\n */\n\nimport {\n\tcreateSignal,\n\tonCleanup,\n\ttype Accessor,\n} from \"solid-js\";\nimport type {\n\tModuleSchema,\n\tModuleDef,\n\tModulesMap,\n\tPlugin,\n\tDebugConfig,\n\tErrorBoundaryConfig,\n\tInferFacts,\n\tInferDerivations,\n\tInferSelectorState,\n\tInferEvents,\n\tSingleModuleSystem,\n\tNamespacedSystem,\n\tSystemSnapshot,\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// 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): Accessor<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[]): Accessor<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): Accessor<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\n\tif (Array.isArray(keyOrKeys)) {\n\t\treturn _useFactMulti(system, keyOrKeys);\n\t}\n\n\t// Single key path\n\treturn _useFactSingle(system, keyOrKeys);\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: Internal\nfunction _useFactSingle(system: SingleModuleSystem<any>, factKey: string): Accessor<unknown> {\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] useFact(\"${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\tconst [value, setValue] = createSignal(system.facts.$store.get(factKey));\n\tconst unsubscribe = system.facts.$store.subscribe([factKey], () => {\n\t\tsetValue(() => system.facts.$store.get(factKey));\n\t});\n\tonCleanup(unsubscribe);\n\treturn value;\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: Internal\nfunction _useFactMulti(system: SingleModuleSystem<any>, factKeys: string[]): Accessor<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\tconst [state, setState] = createSignal(getValues());\n\tconst unsubscribe = system.facts.$store.subscribe(factKeys, () => {\n\t\tsetState(getValues);\n\t});\n\tonCleanup(unsubscribe);\n\treturn state;\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): Accessor<InferDerivations<S>[K]>;\n/** Multi-key overload */\nexport function useDerived<S extends ModuleSchema, K extends keyof InferDerivations<S> & string>(system: SingleModuleSystem<S>, derivationIds: K[]): Accessor<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): Accessor<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 _useDerivedMulti(system, idOrIds);\n\t}\n\n\t// Single key path\n\treturn _useDerivedSingle(system, idOrIds);\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: Internal\nfunction _useDerivedSingle(system: SingleModuleSystem<any>, derivationId: string): Accessor<unknown> {\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] useDerived(\"${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\tconst [value, setValue] = createSignal(system.read(derivationId));\n\tconst unsubscribe = system.subscribe([derivationId], () => {\n\t\tsetValue(() => system.read(derivationId));\n\t});\n\tonCleanup(unsubscribe);\n\treturn value;\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: Internal\nfunction _useDerivedMulti(system: SingleModuleSystem<any>, derivationIds: string[]): Accessor<Record<string, unknown>> {\n\tconst getValues = (): Record<string, unknown> => {\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;\n\t};\n\tconst [state, setState] = createSignal(getValues());\n\tconst unsubscribe = system.subscribe(derivationIds, () => {\n\t\tsetState(getValues);\n\t});\n\tonCleanup(unsubscribe);\n\treturn state;\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>(\n\tsystem: SingleModuleSystem<S>,\n\tselector: (state: InferSelectorState<S>) => R,\n\tequalityFn?: (a: R, b: R) => boolean,\n): Accessor<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): Accessor<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\tlet trackedFactKeys = initial.factKeys;\n\tlet trackedDeriveKeys = initial.deriveKeys;\n\tconst [selected, setSelected] = createSignal(initial.value);\n\n\tconst unsubs: Array<() => void> = [];\n\n\tconst resubscribe = () => {\n\t\tfor (const unsub of unsubs) unsub();\n\t\tunsubs.length = 0;\n\n\t\tconst onUpdate = () => {\n\t\t\tconst result = runWithTracking();\n\t\t\tsetSelected((prev) => {\n\t\t\t\tif (!equalityFn(prev, result.value)) return result.value;\n\t\t\t\treturn prev;\n\t\t\t});\n\t\t\t// Re-track: check if deps changed\n\t\t\tif (depsChanged(trackedFactKeys, result.factKeys, trackedDeriveKeys, result.deriveKeys)) {\n\t\t\t\ttrackedFactKeys = result.factKeys;\n\t\t\t\ttrackedDeriveKeys = result.deriveKeys;\n\t\t\t\tresubscribe();\n\t\t\t}\n\t\t};\n\n\t\tif (trackedFactKeys.length > 0) {\n\t\t\tunsubs.push(system.facts.$store.subscribe(trackedFactKeys, onUpdate));\n\t\t} else if (trackedDeriveKeys.length === 0) {\n\t\t\tunsubs.push(system.facts.$store.subscribeAll(onUpdate));\n\t\t}\n\t\tif (trackedDeriveKeys.length > 0) {\n\t\t\tunsubs.push(system.subscribe(trackedDeriveKeys, onUpdate));\n\t\t}\n\t};\n\n\tresubscribe();\n\n\tonCleanup(() => {\n\t\tfor (const unsub of unsubs) unsub();\n\t});\n\n\treturn selected;\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\tonCleanup(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 Accessor<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): Accessor<InspectState> {\n\tassertSystem(\"useInspect\", system);\n\tconst [state, setState] = createSignal<InspectState>(computeInspectState(system));\n\n\tconst update = () => {\n\t\tsetState(computeInspectState(system));\n\t};\n\n\tif (options?.throttleMs && options.throttleMs > 0) {\n\t\tconst { throttled, cleanup } = createThrottle(update, options.throttleMs);\n\t\tconst unsubFacts = system.facts.$store.subscribeAll(throttled);\n\t\tconst unsubSettled = system.onSettledChange(throttled);\n\t\tonCleanup(() => {\n\t\t\tcleanup();\n\t\t\tunsubFacts();\n\t\t\tunsubSettled();\n\t\t});\n\t} else {\n\t\tconst unsubFacts = system.facts.$store.subscribeAll(update);\n\t\tconst unsubSettled = system.onSettledChange(update);\n\t\tonCleanup(() => {\n\t\t\tunsubFacts();\n\t\t\tunsubSettled();\n\t\t});\n\t}\n\n\treturn state;\n}\n\n// ============================================================================\n// useRequirementStatus — single or multi\n// ============================================================================\n\n/** Single type overload */\nexport function useRequirementStatus(statusPlugin: StatusPlugin, type: string): Accessor<RequirementTypeStatus>;\n/** Multi-type overload */\nexport function useRequirementStatus(statusPlugin: StatusPlugin, types: string[]): Accessor<Record<string, RequirementTypeStatus>>;\n/** Implementation */\nexport function useRequirementStatus(\n\tstatusPlugin: StatusPlugin,\n\ttypeOrTypes: string | string[],\n): Accessor<RequirementTypeStatus> | Accessor<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\t\tconst [state, setState] = createSignal(getValues());\n\t\tconst unsubscribe = statusPlugin.subscribe(() => {\n\t\t\tsetState(getValues);\n\t\t});\n\t\tonCleanup(unsubscribe);\n\t\treturn state;\n\t}\n\n\tconst [status, setStatus] = createSignal<RequirementTypeStatus>(statusPlugin.getStatus(typeOrTypes));\n\tconst unsubscribe = statusPlugin.subscribe(() => {\n\t\tsetStatus(statusPlugin.getStatus(typeOrTypes));\n\t});\n\tonCleanup(unsubscribe);\n\treturn status;\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): Accessor<string | null> {\n\tassertSystem(\"useExplain\", system);\n\tconst [explanation, setExplanation] = createSignal<string | null>(system.explain(requirementId));\n\n\tconst update = () => setExplanation(system.explain(requirementId));\n\tconst unsubFacts = system.facts.$store.subscribeAll(update);\n\tconst unsubSettled = system.onSettledChange(update);\n\tonCleanup(() => {\n\t\tunsubFacts();\n\t\tunsubSettled();\n\t});\n\n\treturn explanation;\n}\n\n// ============================================================================\n// useConstraintStatus — reactive constraint inspection\n// ============================================================================\n\n/** Get all constraints */\nexport function useConstraintStatus(\n\tsystem: SingleModuleSystem<any>,\n): Accessor<ConstraintInfo[]>;\n/** Get a single constraint by ID */\nexport function useConstraintStatus(\n\tsystem: SingleModuleSystem<any>,\n\tconstraintId: string,\n): Accessor<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): Accessor<ConstraintInfo[] | ConstraintInfo | null> {\n\tassertSystem(\"useConstraintStatus\", system);\n\tconst getVal = () => {\n\t\tconst inspection = system.inspect();\n\t\tif (!constraintId) return inspection.constraints;\n\t\treturn inspection.constraints.find((c: ConstraintInfo) => c.id === constraintId) ?? null;\n\t};\n\n\tconst [state, setState] = createSignal<ConstraintInfo[] | ConstraintInfo | null>(getVal());\n\n\tconst update = () => setState(getVal);\n\tconst unsubFacts = system.facts.$store.subscribeAll(update);\n\tconst unsubSettled = system.onSettledChange(update);\n\tonCleanup(() => {\n\t\tunsubFacts();\n\t\tunsubSettled();\n\t});\n\n\treturn state;\n}\n\n// ============================================================================\n// useOptimisticUpdate — batch with rollback on failure\n// ============================================================================\n\nexport interface OptimisticUpdateResult {\n\tmutate: (updateFn: () => void) => void;\n\tisPending: Accessor<boolean>;\n\terror: Accessor<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\tconst [isPending, setIsPending] = createSignal(false);\n\tconst [error, setError] = createSignal<Error | null>(null);\n\tlet snapshot: SystemSnapshot | null = null;\n\tlet statusUnsub: (() => void) | null = null;\n\n\tconst rollback = () => {\n\t\tif (snapshot) {\n\t\t\tsystem.restore(snapshot);\n\t\t\tsnapshot = null;\n\t\t}\n\t\tsetIsPending(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\tsetIsPending(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\tsetIsPending(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\tonCleanup(() => {\n\t\tstatusUnsub?.();\n\t});\n\n\treturn { mutate, isPending, error, rollback };\n}\n\n// ============================================================================\n// useSuspenseRequirement — Solid-specific Suspense integration\n// ============================================================================\n\n/**\n * Single type: throws a promise while the requirement is pending (Suspense).\n */\nexport function useSuspenseRequirement(statusPlugin: StatusPlugin, type: string): Accessor<RequirementTypeStatus>;\n/**\n * Multi-type: throws a promise while any of the requirements are pending.\n */\nexport function useSuspenseRequirement(statusPlugin: StatusPlugin, types: string[]): Accessor<Record<string, RequirementTypeStatus>>;\n/** Implementation */\nexport function useSuspenseRequirement(\n\tstatusPlugin: StatusPlugin,\n\ttypeOrTypes: string | string[],\n): Accessor<RequirementTypeStatus> | Accessor<Record<string, RequirementTypeStatus>> {\n\tconst types = Array.isArray(typeOrTypes) ? typeOrTypes : [typeOrTypes];\n\n\t// Check if any are still loading — if so, throw a promise\n\tconst anyLoading = () => types.some((t) => statusPlugin.getStatus(t).isLoading);\n\n\tif (anyLoading()) {\n\t\tthrow new Promise<void>((resolve) => {\n\t\t\tconst unsub = statusPlugin.subscribe(() => {\n\t\t\t\tif (!anyLoading()) {\n\t\t\t\t\tunsub();\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t// Once resolved, return normal accessor\n\tif (Array.isArray(typeOrTypes)) {\n\t\treturn useRequirementStatus(statusPlugin, typeOrTypes) as Accessor<Record<string, RequirementTypeStatus>>;\n\t}\n\treturn useRequirementStatus(statusPlugin, typeOrTypes) as Accessor<RequirementTypeStatus>;\n}\n\n// ============================================================================\n// useTimeTravel — reactive time-travel signal\n// ============================================================================\n\n/**\n * Reactive time-travel signal. Returns an Accessor that updates\n * when snapshots are taken or navigation occurs.\n *\n * @example\n * ```tsx\n * const tt = useTimeTravel(system);\n * <button disabled={!tt()?.canUndo} onClick={() => 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): Accessor<ReturnType<typeof buildTimeTravelState>> {\n\tassertSystem(\"useTimeTravel\", system);\n\tconst [state, setState] = createSignal<ReturnType<typeof buildTimeTravelState>>(buildTimeTravelState(system));\n\tconst unsub = system.onTimeTravelChange(() => setState(buildTimeTravelState(system)));\n\tonCleanup(unsub);\n\treturn state;\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 reactive signals.\n *\n * @example\n * ```tsx\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\tonCleanup(() => {\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 [factsState, setFactsState] = createSignal(\n\t\tsubscribeAll\n\t\t\t? (system.facts.$store.toObject() as InferFacts<M>)\n\t\t\t: (pickFacts(system, factKeys ?? []) as InferFacts<M>),\n\t);\n\tconst unsubFacts = subscribeAll\n\t\t? system.facts.$store.subscribeAll(() => {\n\t\t\tsetFactsState(() => system.facts.$store.toObject() as InferFacts<M>);\n\t\t})\n\t\t: factKeys && factKeys.length > 0\n\t\t\t? system.facts.$store.subscribe(factKeys, () => {\n\t\t\t\tsetFactsState(() => pickFacts(system, factKeys) as InferFacts<M>);\n\t\t\t})\n\t\t\t: null;\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 [derivedState, setDerivedState] = createSignal(getDerived());\n\tconst unsubDerived = allDerivationKeys.length > 0\n\t\t? system.subscribe(allDerivationKeys, () => { setDerivedState(getDerived); })\n\t\t: null;\n\n\tonCleanup(() => {\n\t\tunsubFacts?.();\n\t\tunsubDerived?.();\n\t});\n\n\tconst events = system.events;\n\tconst dispatch = (event: InferEvents<M>) => system.dispatch(event);\n\n\treturn {\n\t\tsystem,\n\t\tfacts: factsState as Accessor<InferFacts<M>>,\n\t\tderived: derivedState as Accessor<InferDerivations<M>>,\n\t\tevents,\n\t\tdispatch,\n\t\tstatusPlugin,\n\t};\n}\n\n// ============================================================================\n// Signal Factories (for use outside components)\n// ============================================================================\n\n/**\n * Create a derivation signal outside of a component.\n */\nexport function createDerivedSignal<T>(\n\t// biome-ignore lint/suspicious/noExplicitAny: Must work with any schema\n\tsystem: SingleModuleSystem<any>,\n\tderivationId: string,\n): [Accessor<T>, () => void] {\n\tconst [value, setValue] = createSignal<T>(system.read(derivationId) as T);\n\tconst unsubscribe = system.subscribe([derivationId], () => {\n\t\tsetValue(() => system.read(derivationId) as T);\n\t});\n\treturn [value, unsubscribe];\n}\n\n/**\n * Create a fact signal outside of a component.\n */\nexport function createFactSignal<T>(\n\t// biome-ignore lint/suspicious/noExplicitAny: Must work with any schema\n\tsystem: SingleModuleSystem<any>,\n\tfactKey: string,\n): [Accessor<T | undefined>, () => void] {\n\tconst [value, setValue] = createSignal<T | undefined>(\n\t\tsystem.facts.$store.get(factKey) as T | undefined,\n\t);\n\tconst unsubscribe = system.facts.$store.subscribe([factKey], () => {\n\t\tsetValue(() => system.facts.$store.get(factKey) as T | undefined);\n\t});\n\treturn [value, unsubscribe];\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) => Accessor<InferFacts<M>[K] | undefined>;\n\tuseDerived: <K extends keyof InferDerivations<M> & string>(\n\t\tsystem: SingleModuleSystem<M>,\n\t\tderivationId: K,\n\t) => Accessor<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: Required for overload compatibility\n\t\t\tuseFact(system as SingleModuleSystem<any>, factKey as string) as Accessor<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: Required for overload compatibility\n\t\t\tuseDerived(system as SingleModuleSystem<any>, derivationId as string) as Accessor<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: Required for overload compatibility\n\t\t\tuseWatch(system as SingleModuleSystem<any>, key, callback),\n\t};\n}\n\n// ============================================================================\n// useNamespacedSelector — select from a NamespacedSystem\n// ============================================================================\n\n/**\n * SolidJS accessor that selects from a NamespacedSystem.\n * Subscribes to specified keys and provides reactive updates.\n *\n * @param system - The namespaced system\n * @param keys - Namespaced keys to subscribe to (e.g., [\"auth.token\", \"data.count\"])\n * @param selector - Function that reads from system.facts / system.derive\n *\n * @example\n * ```tsx\n * const token = useNamespacedSelector(system, [\"auth.token\"], (s) => s.facts.auth.token);\n * ```\n */\nexport function useNamespacedSelector<Modules extends ModulesMap, R>(\n\tsystem: NamespacedSystem<Modules>,\n\tkeys: string[],\n\tselector: (system: NamespacedSystem<Modules>) => R,\n): Accessor<R> {\n\tconst [value, setValue] = createSignal<R>(selector(system));\n\tconst unsubscribe = system.subscribe(keys, () => {\n\t\tsetValue(() => selector(system));\n\t});\n\tonCleanup(unsubscribe);\n\n\treturn value as Accessor<R>;\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Accessor } from 'solid-js';
|
|
2
|
-
import { createRequirementStatusPlugin, SingleModuleSystem, ModuleSchema, InferFacts, InferDerivations, InferEvents, ModuleDef, Plugin, DebugConfig, ErrorBoundaryConfig, RequirementTypeStatus, InferSelectorState } from '@directive-run/core';
|
|
2
|
+
import { createRequirementStatusPlugin, SingleModuleSystem, ModuleSchema, InferFacts, InferDerivations, InferEvents, ModuleDef, Plugin, DebugConfig, ErrorBoundaryConfig, RequirementTypeStatus, ModulesMap, NamespacedSystem, InferSelectorState } from '@directive-run/core';
|
|
3
3
|
export { RequirementTypeStatus } from '@directive-run/core';
|
|
4
4
|
import { ConstraintInfo, InspectState, buildTimeTravelState } from '@directive-run/core/adapter-utils';
|
|
5
5
|
export { ConstraintInfo, InspectState, shallowEqual } from '@directive-run/core/adapter-utils';
|
|
@@ -150,5 +150,19 @@ declare function createTypedHooks<M extends ModuleSchema>(): {
|
|
|
150
150
|
useEvents: (system: SingleModuleSystem<M>) => SingleModuleSystem<M>["events"];
|
|
151
151
|
useWatch: <K extends string>(system: SingleModuleSystem<M>, key: K, callback: (newValue: unknown, previousValue: unknown) => void) => void;
|
|
152
152
|
};
|
|
153
|
+
/**
|
|
154
|
+
* SolidJS accessor that selects from a NamespacedSystem.
|
|
155
|
+
* Subscribes to specified keys and provides reactive updates.
|
|
156
|
+
*
|
|
157
|
+
* @param system - The namespaced system
|
|
158
|
+
* @param keys - Namespaced keys to subscribe to (e.g., ["auth.token", "data.count"])
|
|
159
|
+
* @param selector - Function that reads from system.facts / system.derive
|
|
160
|
+
*
|
|
161
|
+
* @example
|
|
162
|
+
* ```tsx
|
|
163
|
+
* const token = useNamespacedSelector(system, ["auth.token"], (s) => s.facts.auth.token);
|
|
164
|
+
* ```
|
|
165
|
+
*/
|
|
166
|
+
declare function useNamespacedSelector<Modules extends ModulesMap, R>(system: NamespacedSystem<Modules>, keys: string[], selector: (system: NamespacedSystem<Modules>) => R): Accessor<R>;
|
|
153
167
|
|
|
154
|
-
export { type OptimisticUpdateResult, type StatusPlugin, type UseInspectOptions, createDerivedSignal, createFactSignal, createTypedHooks, useConstraintStatus, useDerived, useDirective, useDispatch, useEvents, useExplain, useFact, useInspect, useOptimisticUpdate, useRequirementStatus, useSelector, useSuspenseRequirement, useTimeTravel, useWatch };
|
|
168
|
+
export { type OptimisticUpdateResult, type StatusPlugin, type UseInspectOptions, createDerivedSignal, createFactSignal, createTypedHooks, useConstraintStatus, useDerived, useDirective, useDispatch, useEvents, useExplain, useFact, useInspect, useNamespacedSelector, useOptimisticUpdate, useRequirementStatus, useSelector, useSuspenseRequirement, useTimeTravel, useWatch };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Accessor } from 'solid-js';
|
|
2
|
-
import { createRequirementStatusPlugin, SingleModuleSystem, ModuleSchema, InferFacts, InferDerivations, InferEvents, ModuleDef, Plugin, DebugConfig, ErrorBoundaryConfig, RequirementTypeStatus, InferSelectorState } from '@directive-run/core';
|
|
2
|
+
import { createRequirementStatusPlugin, SingleModuleSystem, ModuleSchema, InferFacts, InferDerivations, InferEvents, ModuleDef, Plugin, DebugConfig, ErrorBoundaryConfig, RequirementTypeStatus, ModulesMap, NamespacedSystem, InferSelectorState } from '@directive-run/core';
|
|
3
3
|
export { RequirementTypeStatus } from '@directive-run/core';
|
|
4
4
|
import { ConstraintInfo, InspectState, buildTimeTravelState } from '@directive-run/core/adapter-utils';
|
|
5
5
|
export { ConstraintInfo, InspectState, shallowEqual } from '@directive-run/core/adapter-utils';
|
|
@@ -150,5 +150,19 @@ declare function createTypedHooks<M extends ModuleSchema>(): {
|
|
|
150
150
|
useEvents: (system: SingleModuleSystem<M>) => SingleModuleSystem<M>["events"];
|
|
151
151
|
useWatch: <K extends string>(system: SingleModuleSystem<M>, key: K, callback: (newValue: unknown, previousValue: unknown) => void) => void;
|
|
152
152
|
};
|
|
153
|
+
/**
|
|
154
|
+
* SolidJS accessor that selects from a NamespacedSystem.
|
|
155
|
+
* Subscribes to specified keys and provides reactive updates.
|
|
156
|
+
*
|
|
157
|
+
* @param system - The namespaced system
|
|
158
|
+
* @param keys - Namespaced keys to subscribe to (e.g., ["auth.token", "data.count"])
|
|
159
|
+
* @param selector - Function that reads from system.facts / system.derive
|
|
160
|
+
*
|
|
161
|
+
* @example
|
|
162
|
+
* ```tsx
|
|
163
|
+
* const token = useNamespacedSelector(system, ["auth.token"], (s) => s.facts.auth.token);
|
|
164
|
+
* ```
|
|
165
|
+
*/
|
|
166
|
+
declare function useNamespacedSelector<Modules extends ModulesMap, R>(system: NamespacedSystem<Modules>, keys: string[], selector: (system: NamespacedSystem<Modules>) => R): Accessor<R>;
|
|
153
167
|
|
|
154
|
-
export { type OptimisticUpdateResult, type StatusPlugin, type UseInspectOptions, createDerivedSignal, createFactSignal, createTypedHooks, useConstraintStatus, useDerived, useDirective, useDispatch, useEvents, useExplain, useFact, useInspect, useOptimisticUpdate, useRequirementStatus, useSelector, useSuspenseRequirement, useTimeTravel, useWatch };
|
|
168
|
+
export { type OptimisticUpdateResult, type StatusPlugin, type UseInspectOptions, createDerivedSignal, createFactSignal, createTypedHooks, useConstraintStatus, useDerived, useDirective, useDispatch, useEvents, useExplain, useFact, useInspect, useNamespacedSelector, useOptimisticUpdate, useRequirementStatus, useSelector, useSuspenseRequirement, useTimeTravel, useWatch };
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {createSignal,onCleanup}from'solid-js';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 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)?
|
|
1
|
+
import {createSignal,onCleanup}from'solid-js';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 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)?V(e,t):E(e,t)}function E(e,t){process.env.NODE_ENV!=="production"&&(e.facts.$store.has(t)||console.warn(`[Directive] useFact("${t}") \u2014 fact not found in store. Check that "${t}" is defined in your module's schema.`));let[s,r]=createSignal(e.facts.$store.get(t)),n=e.facts.$store.subscribe([t],()=>{r(()=>e.facts.$store.get(t));});return onCleanup(n),s}function V(e,t){let s=()=>{let u={};for(let i of t)u[i]=e.facts.$store.get(i);return u},[r,n]=createSignal(s()),o=e.facts.$store.subscribe(t,()=>{n(s);});return onCleanup(o),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)?P(e,t):$(e,t)}function $(e,t){process.env.NODE_ENV!=="production"&&e.read(t)===void 0&&console.warn(`[Directive] useDerived("${t}") returned undefined. Check that "${t}" is defined in your module's derive property.`);let[s,r]=createSignal(e.read(t)),n=e.subscribe([t],()=>{r(()=>e.read(t));});return onCleanup(n),s}function P(e,t){let s=()=>{let u={};for(let i of t)u[i]=e.read(i);return u},[r,n]=createSignal(s()),o=e.subscribe(t,()=>{n(s);});return onCleanup(o),r}function L(e,t,s=defaultEquality){assertSystem("useSelector",e);let r=new Set(Object.keys(e.derive??{})),n=()=>runTrackedSelector(e,r,t),o=n(),u=o.factKeys,i=o.deriveKeys,[c,f]=createSignal(o.value),d=[],y=()=>{for(let p of d)p();d.length=0;let S=()=>{let p=n();f(v=>s(v,p.value)?v:p.value),depsChanged(u,p.factKeys,i,p.deriveKeys)&&(u=p.factKeys,i=p.deriveKeys,y());};u.length>0?d.push(e.facts.$store.subscribe(u,S)):i.length===0&&d.push(e.facts.$store.subscribeAll(S)),i.length>0&&d.push(e.subscribe(i,S));};return y(),onCleanup(()=>{for(let S of d)S();}),c}function H(e){return assertSystem("useDispatch",e),t=>{e.dispatch(t);}}function N(e){return assertSystem("useEvents",e),e.events}function U(e,t,s){assertSystem("useWatch",e);let r=e.watch(t,s);onCleanup(r);}function G(e,t){assertSystem("useInspect",e);let[s,r]=createSignal(computeInspectState(e)),n=()=>{r(computeInspectState(e));};if(t?.throttleMs&&t.throttleMs>0){let{throttled:o,cleanup:u}=createThrottle(n,t.throttleMs),i=e.facts.$store.subscribeAll(o),c=e.onSettledChange(o);onCleanup(()=>{u(),i(),c();});}else {let o=e.facts.$store.subscribeAll(n),u=e.onSettledChange(n);onCleanup(()=>{o(),u();});}return s}function k(e,t){if(Array.isArray(t)){let o=()=>{let f={};for(let d of t)f[d]=e.getStatus(d);return f},[u,i]=createSignal(o()),c=e.subscribe(()=>{i(o);});return onCleanup(c),u}let[s,r]=createSignal(e.getStatus(t)),n=e.subscribe(()=>{r(e.getStatus(t));});return onCleanup(n),s}function J(e,t){assertSystem("useExplain",e);let[s,r]=createSignal(e.explain(t)),n=()=>r(e.explain(t)),o=e.facts.$store.subscribeAll(n),u=e.onSettledChange(n);return onCleanup(()=>{o(),u();}),s}function O(e,t){assertSystem("useConstraintStatus",e);let s=()=>{let c=e.inspect();return t?c.constraints.find(f=>f.id===t)??null:c.constraints},[r,n]=createSignal(s()),o=()=>n(s),u=e.facts.$store.subscribeAll(o),i=e.onSettledChange(o);return onCleanup(()=>{u(),i();}),r}function Q(e,t,s){assertSystem("useOptimisticUpdate",e);let[r,n]=createSignal(false),[o,u]=createSignal(null),i=null,c=null,f=()=>{i&&(e.restore(i),i=null),n(false),u(null),c?.(),c=null;},d=y=>{i=e.getSnapshot(),n(true),u(null),e.batch(y),t&&s&&(c?.(),c=t.subscribe(()=>{let S=t.getStatus(s);!S.isLoading&&!S.hasError?(i=null,n(false),c?.(),c=null):S.hasError&&(u(()=>S.lastError),f());}));};return onCleanup(()=>{c?.();}),{mutate:d,isPending:r,error:o,rollback:f}}function X(e,t){let s=Array.isArray(t)?t:[t],r=()=>s.some(n=>e.getStatus(n).isLoading);if(r())throw new Promise(n=>{let o=e.subscribe(()=>{r()||(o(),n());});});return k(e,t)}function Y(e){assertSystem("useTimeTravel",e);let[t,s]=createSignal(buildTimeTravelState(e)),r=e.onTimeTravelChange(()=>s(buildTimeTravelState(e)));return onCleanup(r),t}function Z(e,t){let s=[...t?.plugins??[]],r;if(t?.status){let b=createRequirementStatusPlugin();r=b,s.push(b.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(),onCleanup(()=>{n.destroy();});let o=t?.facts,u=t?.derived,i=!o&&!u,[c,f]=createSignal(i?n.facts.$store.toObject():pickFacts(n,o??[])),d=i?n.facts.$store.subscribeAll(()=>{f(()=>n.facts.$store.toObject());}):o&&o.length>0?n.facts.$store.subscribe(o,()=>{f(()=>pickFacts(n,o));}):null,y=i?Object.keys(n.derive??{}):u??[],S=()=>{let b={};for(let M of y)b[M]=n.read(M);return b},[p,v]=createSignal(S()),A=y.length>0?n.subscribe(y,()=>{v(S);}):null;onCleanup(()=>{d?.(),A?.();});let D=n.events;return {system:n,facts:c,derived:p,events:D,dispatch:b=>n.dispatch(b),statusPlugin:r}}function ee(e,t){let[s,r]=createSignal(e.read(t)),n=e.subscribe([t],()=>{r(()=>e.read(t));});return [s,n]}function te(e,t){let[s,r]=createSignal(e.facts.$store.get(t)),n=e.facts.$store.subscribe([t],()=>{r(()=>e.facts.$store.get(t));});return [s,n]}function ne(){return {useFact:(e,t)=>C(e,t),useDerived:(e,t)=>q(e,t),useDispatch:e=>t=>{e.dispatch(t);},useEvents:e=>N(e),useWatch:(e,t,s)=>U(e,t,s)}}function se(e,t,s){let[r,n]=createSignal(s(e)),o=e.subscribe(t,()=>{n(()=>s(e));});return onCleanup(o),r}export{ee as createDerivedSignal,te as createFactSignal,ne as createTypedHooks,O as useConstraintStatus,q as useDerived,Z as useDirective,H as useDispatch,N as useEvents,J as useExplain,C as useFact,G as useInspect,se as useNamespacedSelector,Q as useOptimisticUpdate,k as useRequirementStatus,L as useSelector,X as useSuspenseRequirement,Y as useTimeTravel,U 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":["useFact","system","keyOrKeys","assertSystem","_useFactMulti","_useFactSingle","factKey","value","setValue","createSignal","unsubscribe","onCleanup","factKeys","getValues","result","key","state","setState","useDerived","idOrIds","_useDerivedMulti","_useDerivedSingle","derivationId","derivationIds","id","useSelector","selector","equalityFn","defaultEquality","deriveKeySet","runWithTracking","runTrackedSelector","initial","trackedFactKeys","trackedDeriveKeys","selected","setSelected","unsubs","resubscribe","unsub","onUpdate","prev","depsChanged","useDispatch","event","useEvents","useWatch","callback","useInspect","options","computeInspectState","update","throttled","cleanup","createThrottle","unsubFacts","unsubSettled","useRequirementStatus","statusPlugin","typeOrTypes","type","status","setStatus","useExplain","requirementId","explanation","setExplanation","useConstraintStatus","constraintId","getVal","inspection","c","useOptimisticUpdate","requirementType","isPending","setIsPending","error","setError","snapshot","statusUnsub","rollback","mutate","updateFn","useSuspenseRequirement","types","anyLoading","t","resolve","useTimeTravel","buildTimeTravelState","useDirective","moduleDef","config","allPlugins","sp","createRequirementStatusPlugin","createSystem","derivedKeys","subscribeAll","factsState","setFactsState","pickFacts","allDerivationKeys","getDerived","derivedState","setDerivedState","unsubDerived","events","createDerivedSignal","createFactSignal","createTypedHooks"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Solid Adapter - Consolidated SolidJS primitives for Directive\n *\n * 16 active exports: useFact, useDerived, useDispatch, useSelector,\n * useWatch, useInspect, useRequirementStatus, useEvents, useExplain,\n * useConstraintStatus, useOptimisticUpdate, useDirective, useTimeTravel,\n * createTypedHooks, useSuspenseRequirement, shallowEqual\n *\n * Signal factories: createDerivedSignal, createFactSignal\n */\n\nimport {\n\tcreateSignal,\n\tonCleanup,\n\ttype Accessor,\n} from \"solid-js\";\nimport type {\n\tModuleSchema,\n\tModuleDef,\n\tPlugin,\n\tDebugConfig,\n\tErrorBoundaryConfig,\n\tInferFacts,\n\tInferDerivations,\n\tInferSelectorState,\n\tInferEvents,\n\tSingleModuleSystem,\n\tSystemSnapshot,\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// 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): Accessor<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[]): Accessor<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): Accessor<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\n\tif (Array.isArray(keyOrKeys)) {\n\t\treturn _useFactMulti(system, keyOrKeys);\n\t}\n\n\t// Single key path\n\treturn _useFactSingle(system, keyOrKeys);\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: Internal\nfunction _useFactSingle(system: SingleModuleSystem<any>, factKey: string): Accessor<unknown> {\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] useFact(\"${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\tconst [value, setValue] = createSignal(system.facts.$store.get(factKey));\n\tconst unsubscribe = system.facts.$store.subscribe([factKey], () => {\n\t\tsetValue(() => system.facts.$store.get(factKey));\n\t});\n\tonCleanup(unsubscribe);\n\treturn value;\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: Internal\nfunction _useFactMulti(system: SingleModuleSystem<any>, factKeys: string[]): Accessor<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\tconst [state, setState] = createSignal(getValues());\n\tconst unsubscribe = system.facts.$store.subscribe(factKeys, () => {\n\t\tsetState(getValues);\n\t});\n\tonCleanup(unsubscribe);\n\treturn state;\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): Accessor<InferDerivations<S>[K]>;\n/** Multi-key overload */\nexport function useDerived<S extends ModuleSchema, K extends keyof InferDerivations<S> & string>(system: SingleModuleSystem<S>, derivationIds: K[]): Accessor<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): Accessor<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 _useDerivedMulti(system, idOrIds);\n\t}\n\n\t// Single key path\n\treturn _useDerivedSingle(system, idOrIds);\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: Internal\nfunction _useDerivedSingle(system: SingleModuleSystem<any>, derivationId: string): Accessor<unknown> {\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] useDerived(\"${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\tconst [value, setValue] = createSignal(system.read(derivationId));\n\tconst unsubscribe = system.subscribe([derivationId], () => {\n\t\tsetValue(() => system.read(derivationId));\n\t});\n\tonCleanup(unsubscribe);\n\treturn value;\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: Internal\nfunction _useDerivedMulti(system: SingleModuleSystem<any>, derivationIds: string[]): Accessor<Record<string, unknown>> {\n\tconst getValues = (): Record<string, unknown> => {\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;\n\t};\n\tconst [state, setState] = createSignal(getValues());\n\tconst unsubscribe = system.subscribe(derivationIds, () => {\n\t\tsetState(getValues);\n\t});\n\tonCleanup(unsubscribe);\n\treturn state;\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>(\n\tsystem: SingleModuleSystem<S>,\n\tselector: (state: InferSelectorState<S>) => R,\n\tequalityFn?: (a: R, b: R) => boolean,\n): Accessor<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): Accessor<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\tlet trackedFactKeys = initial.factKeys;\n\tlet trackedDeriveKeys = initial.deriveKeys;\n\tconst [selected, setSelected] = createSignal(initial.value);\n\n\tconst unsubs: Array<() => void> = [];\n\n\tconst resubscribe = () => {\n\t\tfor (const unsub of unsubs) unsub();\n\t\tunsubs.length = 0;\n\n\t\tconst onUpdate = () => {\n\t\t\tconst result = runWithTracking();\n\t\t\tsetSelected((prev) => {\n\t\t\t\tif (!equalityFn(prev, result.value)) return result.value;\n\t\t\t\treturn prev;\n\t\t\t});\n\t\t\t// Re-track: check if deps changed\n\t\t\tif (depsChanged(trackedFactKeys, result.factKeys, trackedDeriveKeys, result.deriveKeys)) {\n\t\t\t\ttrackedFactKeys = result.factKeys;\n\t\t\t\ttrackedDeriveKeys = result.deriveKeys;\n\t\t\t\tresubscribe();\n\t\t\t}\n\t\t};\n\n\t\tif (trackedFactKeys.length > 0) {\n\t\t\tunsubs.push(system.facts.$store.subscribe(trackedFactKeys, onUpdate));\n\t\t} else if (trackedDeriveKeys.length === 0) {\n\t\t\tunsubs.push(system.facts.$store.subscribeAll(onUpdate));\n\t\t}\n\t\tif (trackedDeriveKeys.length > 0) {\n\t\t\tunsubs.push(system.subscribe(trackedDeriveKeys, onUpdate));\n\t\t}\n\t};\n\n\tresubscribe();\n\n\tonCleanup(() => {\n\t\tfor (const unsub of unsubs) unsub();\n\t});\n\n\treturn selected;\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\tonCleanup(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 Accessor<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): Accessor<InspectState> {\n\tassertSystem(\"useInspect\", system);\n\tconst [state, setState] = createSignal<InspectState>(computeInspectState(system));\n\n\tconst update = () => {\n\t\tsetState(computeInspectState(system));\n\t};\n\n\tif (options?.throttleMs && options.throttleMs > 0) {\n\t\tconst { throttled, cleanup } = createThrottle(update, options.throttleMs);\n\t\tconst unsubFacts = system.facts.$store.subscribeAll(throttled);\n\t\tconst unsubSettled = system.onSettledChange(throttled);\n\t\tonCleanup(() => {\n\t\t\tcleanup();\n\t\t\tunsubFacts();\n\t\t\tunsubSettled();\n\t\t});\n\t} else {\n\t\tconst unsubFacts = system.facts.$store.subscribeAll(update);\n\t\tconst unsubSettled = system.onSettledChange(update);\n\t\tonCleanup(() => {\n\t\t\tunsubFacts();\n\t\t\tunsubSettled();\n\t\t});\n\t}\n\n\treturn state;\n}\n\n// ============================================================================\n// useRequirementStatus — single or multi\n// ============================================================================\n\n/** Single type overload */\nexport function useRequirementStatus(statusPlugin: StatusPlugin, type: string): Accessor<RequirementTypeStatus>;\n/** Multi-type overload */\nexport function useRequirementStatus(statusPlugin: StatusPlugin, types: string[]): Accessor<Record<string, RequirementTypeStatus>>;\n/** Implementation */\nexport function useRequirementStatus(\n\tstatusPlugin: StatusPlugin,\n\ttypeOrTypes: string | string[],\n): Accessor<RequirementTypeStatus> | Accessor<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\t\tconst [state, setState] = createSignal(getValues());\n\t\tconst unsubscribe = statusPlugin.subscribe(() => {\n\t\t\tsetState(getValues);\n\t\t});\n\t\tonCleanup(unsubscribe);\n\t\treturn state;\n\t}\n\n\tconst [status, setStatus] = createSignal<RequirementTypeStatus>(statusPlugin.getStatus(typeOrTypes));\n\tconst unsubscribe = statusPlugin.subscribe(() => {\n\t\tsetStatus(statusPlugin.getStatus(typeOrTypes));\n\t});\n\tonCleanup(unsubscribe);\n\treturn status;\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): Accessor<string | null> {\n\tassertSystem(\"useExplain\", system);\n\tconst [explanation, setExplanation] = createSignal<string | null>(system.explain(requirementId));\n\n\tconst update = () => setExplanation(system.explain(requirementId));\n\tconst unsubFacts = system.facts.$store.subscribeAll(update);\n\tconst unsubSettled = system.onSettledChange(update);\n\tonCleanup(() => {\n\t\tunsubFacts();\n\t\tunsubSettled();\n\t});\n\n\treturn explanation;\n}\n\n// ============================================================================\n// useConstraintStatus — reactive constraint inspection\n// ============================================================================\n\n/** Get all constraints */\nexport function useConstraintStatus(\n\tsystem: SingleModuleSystem<any>,\n): Accessor<ConstraintInfo[]>;\n/** Get a single constraint by ID */\nexport function useConstraintStatus(\n\tsystem: SingleModuleSystem<any>,\n\tconstraintId: string,\n): Accessor<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): Accessor<ConstraintInfo[] | ConstraintInfo | null> {\n\tassertSystem(\"useConstraintStatus\", system);\n\tconst getVal = () => {\n\t\tconst inspection = system.inspect();\n\t\tif (!constraintId) return inspection.constraints;\n\t\treturn inspection.constraints.find((c: ConstraintInfo) => c.id === constraintId) ?? null;\n\t};\n\n\tconst [state, setState] = createSignal<ConstraintInfo[] | ConstraintInfo | null>(getVal());\n\n\tconst update = () => setState(getVal);\n\tconst unsubFacts = system.facts.$store.subscribeAll(update);\n\tconst unsubSettled = system.onSettledChange(update);\n\tonCleanup(() => {\n\t\tunsubFacts();\n\t\tunsubSettled();\n\t});\n\n\treturn state;\n}\n\n// ============================================================================\n// useOptimisticUpdate — batch with rollback on failure\n// ============================================================================\n\nexport interface OptimisticUpdateResult {\n\tmutate: (updateFn: () => void) => void;\n\tisPending: Accessor<boolean>;\n\terror: Accessor<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\tconst [isPending, setIsPending] = createSignal(false);\n\tconst [error, setError] = createSignal<Error | null>(null);\n\tlet snapshot: SystemSnapshot | null = null;\n\tlet statusUnsub: (() => void) | null = null;\n\n\tconst rollback = () => {\n\t\tif (snapshot) {\n\t\t\tsystem.restore(snapshot);\n\t\t\tsnapshot = null;\n\t\t}\n\t\tsetIsPending(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\tsetIsPending(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\tsetIsPending(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\tonCleanup(() => {\n\t\tstatusUnsub?.();\n\t});\n\n\treturn { mutate, isPending, error, rollback };\n}\n\n// ============================================================================\n// useSuspenseRequirement — Solid-specific Suspense integration\n// ============================================================================\n\n/**\n * Single type: throws a promise while the requirement is pending (Suspense).\n */\nexport function useSuspenseRequirement(statusPlugin: StatusPlugin, type: string): Accessor<RequirementTypeStatus>;\n/**\n * Multi-type: throws a promise while any of the requirements are pending.\n */\nexport function useSuspenseRequirement(statusPlugin: StatusPlugin, types: string[]): Accessor<Record<string, RequirementTypeStatus>>;\n/** Implementation */\nexport function useSuspenseRequirement(\n\tstatusPlugin: StatusPlugin,\n\ttypeOrTypes: string | string[],\n): Accessor<RequirementTypeStatus> | Accessor<Record<string, RequirementTypeStatus>> {\n\tconst types = Array.isArray(typeOrTypes) ? typeOrTypes : [typeOrTypes];\n\n\t// Check if any are still loading — if so, throw a promise\n\tconst anyLoading = () => types.some((t) => statusPlugin.getStatus(t).isLoading);\n\n\tif (anyLoading()) {\n\t\tthrow new Promise<void>((resolve) => {\n\t\t\tconst unsub = statusPlugin.subscribe(() => {\n\t\t\t\tif (!anyLoading()) {\n\t\t\t\t\tunsub();\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t// Once resolved, return normal accessor\n\tif (Array.isArray(typeOrTypes)) {\n\t\treturn useRequirementStatus(statusPlugin, typeOrTypes) as Accessor<Record<string, RequirementTypeStatus>>;\n\t}\n\treturn useRequirementStatus(statusPlugin, typeOrTypes) as Accessor<RequirementTypeStatus>;\n}\n\n// ============================================================================\n// useTimeTravel — reactive time-travel signal\n// ============================================================================\n\n/**\n * Reactive time-travel signal. Returns an Accessor that updates\n * when snapshots are taken or navigation occurs.\n *\n * @example\n * ```tsx\n * const tt = useTimeTravel(system);\n * <button disabled={!tt()?.canUndo} onClick={() => 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): Accessor<ReturnType<typeof buildTimeTravelState>> {\n\tassertSystem(\"useTimeTravel\", system);\n\tconst [state, setState] = createSignal<ReturnType<typeof buildTimeTravelState>>(buildTimeTravelState(system));\n\tconst unsub = system.onTimeTravelChange(() => setState(buildTimeTravelState(system)));\n\tonCleanup(unsub);\n\treturn state;\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 reactive signals.\n *\n * @example\n * ```tsx\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\tonCleanup(() => {\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 [factsState, setFactsState] = createSignal(\n\t\tsubscribeAll\n\t\t\t? (system.facts.$store.toObject() as InferFacts<M>)\n\t\t\t: (pickFacts(system, factKeys ?? []) as InferFacts<M>),\n\t);\n\tconst unsubFacts = subscribeAll\n\t\t? system.facts.$store.subscribeAll(() => {\n\t\t\tsetFactsState(() => system.facts.$store.toObject() as InferFacts<M>);\n\t\t})\n\t\t: factKeys && factKeys.length > 0\n\t\t\t? system.facts.$store.subscribe(factKeys, () => {\n\t\t\t\tsetFactsState(() => pickFacts(system, factKeys) as InferFacts<M>);\n\t\t\t})\n\t\t\t: null;\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 [derivedState, setDerivedState] = createSignal(getDerived());\n\tconst unsubDerived = allDerivationKeys.length > 0\n\t\t? system.subscribe(allDerivationKeys, () => { setDerivedState(getDerived); })\n\t\t: null;\n\n\tonCleanup(() => {\n\t\tunsubFacts?.();\n\t\tunsubDerived?.();\n\t});\n\n\tconst events = system.events;\n\tconst dispatch = (event: InferEvents<M>) => system.dispatch(event);\n\n\treturn {\n\t\tsystem,\n\t\tfacts: factsState as Accessor<InferFacts<M>>,\n\t\tderived: derivedState as Accessor<InferDerivations<M>>,\n\t\tevents,\n\t\tdispatch,\n\t\tstatusPlugin,\n\t};\n}\n\n// ============================================================================\n// Signal Factories (for use outside components)\n// ============================================================================\n\n/**\n * Create a derivation signal outside of a component.\n */\nexport function createDerivedSignal<T>(\n\t// biome-ignore lint/suspicious/noExplicitAny: Must work with any schema\n\tsystem: SingleModuleSystem<any>,\n\tderivationId: string,\n): [Accessor<T>, () => void] {\n\tconst [value, setValue] = createSignal<T>(system.read(derivationId) as T);\n\tconst unsubscribe = system.subscribe([derivationId], () => {\n\t\tsetValue(() => system.read(derivationId) as T);\n\t});\n\treturn [value, unsubscribe];\n}\n\n/**\n * Create a fact signal outside of a component.\n */\nexport function createFactSignal<T>(\n\t// biome-ignore lint/suspicious/noExplicitAny: Must work with any schema\n\tsystem: SingleModuleSystem<any>,\n\tfactKey: string,\n): [Accessor<T | undefined>, () => void] {\n\tconst [value, setValue] = createSignal<T | undefined>(\n\t\tsystem.facts.$store.get(factKey) as T | undefined,\n\t);\n\tconst unsubscribe = system.facts.$store.subscribe([factKey], () => {\n\t\tsetValue(() => system.facts.$store.get(factKey) as T | undefined);\n\t});\n\treturn [value, unsubscribe];\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) => Accessor<InferFacts<M>[K] | undefined>;\n\tuseDerived: <K extends keyof InferDerivations<M> & string>(\n\t\tsystem: SingleModuleSystem<M>,\n\t\tderivationId: K,\n\t) => Accessor<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: Required for overload compatibility\n\t\t\tuseFact(system as SingleModuleSystem<any>, factKey as string) as Accessor<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: Required for overload compatibility\n\t\t\tuseDerived(system as SingleModuleSystem<any>, derivationId as string) as Accessor<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: Required 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":["useFact","system","keyOrKeys","assertSystem","_useFactMulti","_useFactSingle","factKey","value","setValue","createSignal","unsubscribe","onCleanup","factKeys","getValues","result","key","state","setState","useDerived","idOrIds","_useDerivedMulti","_useDerivedSingle","derivationId","derivationIds","id","useSelector","selector","equalityFn","defaultEquality","deriveKeySet","runWithTracking","runTrackedSelector","initial","trackedFactKeys","trackedDeriveKeys","selected","setSelected","unsubs","resubscribe","unsub","onUpdate","prev","depsChanged","useDispatch","event","useEvents","useWatch","callback","useInspect","options","computeInspectState","update","throttled","cleanup","createThrottle","unsubFacts","unsubSettled","useRequirementStatus","statusPlugin","typeOrTypes","type","status","setStatus","useExplain","requirementId","explanation","setExplanation","useConstraintStatus","constraintId","getVal","inspection","c","useOptimisticUpdate","requirementType","isPending","setIsPending","error","setError","snapshot","statusUnsub","rollback","mutate","updateFn","useSuspenseRequirement","types","anyLoading","t","resolve","useTimeTravel","buildTimeTravelState","useDirective","moduleDef","config","allPlugins","sp","createRequirementStatusPlugin","createSystem","derivedKeys","subscribeAll","factsState","setFactsState","pickFacts","allDerivationKeys","getDerived","derivedState","setDerivedState","unsubDerived","events","createDerivedSignal","createFactSignal","createTypedHooks","useNamespacedSelector","keys"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Solid Adapter - Consolidated SolidJS primitives for Directive\n *\n * 16 active exports: useFact, useDerived, useDispatch, useSelector,\n * useWatch, useInspect, useRequirementStatus, useEvents, useExplain,\n * useConstraintStatus, useOptimisticUpdate, useDirective, useTimeTravel,\n * createTypedHooks, useSuspenseRequirement, shallowEqual\n *\n * Signal factories: createDerivedSignal, createFactSignal\n */\n\nimport {\n\tcreateSignal,\n\tonCleanup,\n\ttype Accessor,\n} from \"solid-js\";\nimport type {\n\tModuleSchema,\n\tModuleDef,\n\tModulesMap,\n\tPlugin,\n\tDebugConfig,\n\tErrorBoundaryConfig,\n\tInferFacts,\n\tInferDerivations,\n\tInferSelectorState,\n\tInferEvents,\n\tSingleModuleSystem,\n\tNamespacedSystem,\n\tSystemSnapshot,\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// 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): Accessor<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[]): Accessor<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): Accessor<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\n\tif (Array.isArray(keyOrKeys)) {\n\t\treturn _useFactMulti(system, keyOrKeys);\n\t}\n\n\t// Single key path\n\treturn _useFactSingle(system, keyOrKeys);\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: Internal\nfunction _useFactSingle(system: SingleModuleSystem<any>, factKey: string): Accessor<unknown> {\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] useFact(\"${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\tconst [value, setValue] = createSignal(system.facts.$store.get(factKey));\n\tconst unsubscribe = system.facts.$store.subscribe([factKey], () => {\n\t\tsetValue(() => system.facts.$store.get(factKey));\n\t});\n\tonCleanup(unsubscribe);\n\treturn value;\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: Internal\nfunction _useFactMulti(system: SingleModuleSystem<any>, factKeys: string[]): Accessor<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\tconst [state, setState] = createSignal(getValues());\n\tconst unsubscribe = system.facts.$store.subscribe(factKeys, () => {\n\t\tsetState(getValues);\n\t});\n\tonCleanup(unsubscribe);\n\treturn state;\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): Accessor<InferDerivations<S>[K]>;\n/** Multi-key overload */\nexport function useDerived<S extends ModuleSchema, K extends keyof InferDerivations<S> & string>(system: SingleModuleSystem<S>, derivationIds: K[]): Accessor<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): Accessor<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 _useDerivedMulti(system, idOrIds);\n\t}\n\n\t// Single key path\n\treturn _useDerivedSingle(system, idOrIds);\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: Internal\nfunction _useDerivedSingle(system: SingleModuleSystem<any>, derivationId: string): Accessor<unknown> {\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] useDerived(\"${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\tconst [value, setValue] = createSignal(system.read(derivationId));\n\tconst unsubscribe = system.subscribe([derivationId], () => {\n\t\tsetValue(() => system.read(derivationId));\n\t});\n\tonCleanup(unsubscribe);\n\treturn value;\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: Internal\nfunction _useDerivedMulti(system: SingleModuleSystem<any>, derivationIds: string[]): Accessor<Record<string, unknown>> {\n\tconst getValues = (): Record<string, unknown> => {\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;\n\t};\n\tconst [state, setState] = createSignal(getValues());\n\tconst unsubscribe = system.subscribe(derivationIds, () => {\n\t\tsetState(getValues);\n\t});\n\tonCleanup(unsubscribe);\n\treturn state;\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>(\n\tsystem: SingleModuleSystem<S>,\n\tselector: (state: InferSelectorState<S>) => R,\n\tequalityFn?: (a: R, b: R) => boolean,\n): Accessor<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): Accessor<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\tlet trackedFactKeys = initial.factKeys;\n\tlet trackedDeriveKeys = initial.deriveKeys;\n\tconst [selected, setSelected] = createSignal(initial.value);\n\n\tconst unsubs: Array<() => void> = [];\n\n\tconst resubscribe = () => {\n\t\tfor (const unsub of unsubs) unsub();\n\t\tunsubs.length = 0;\n\n\t\tconst onUpdate = () => {\n\t\t\tconst result = runWithTracking();\n\t\t\tsetSelected((prev) => {\n\t\t\t\tif (!equalityFn(prev, result.value)) return result.value;\n\t\t\t\treturn prev;\n\t\t\t});\n\t\t\t// Re-track: check if deps changed\n\t\t\tif (depsChanged(trackedFactKeys, result.factKeys, trackedDeriveKeys, result.deriveKeys)) {\n\t\t\t\ttrackedFactKeys = result.factKeys;\n\t\t\t\ttrackedDeriveKeys = result.deriveKeys;\n\t\t\t\tresubscribe();\n\t\t\t}\n\t\t};\n\n\t\tif (trackedFactKeys.length > 0) {\n\t\t\tunsubs.push(system.facts.$store.subscribe(trackedFactKeys, onUpdate));\n\t\t} else if (trackedDeriveKeys.length === 0) {\n\t\t\tunsubs.push(system.facts.$store.subscribeAll(onUpdate));\n\t\t}\n\t\tif (trackedDeriveKeys.length > 0) {\n\t\t\tunsubs.push(system.subscribe(trackedDeriveKeys, onUpdate));\n\t\t}\n\t};\n\n\tresubscribe();\n\n\tonCleanup(() => {\n\t\tfor (const unsub of unsubs) unsub();\n\t});\n\n\treturn selected;\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\tonCleanup(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 Accessor<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): Accessor<InspectState> {\n\tassertSystem(\"useInspect\", system);\n\tconst [state, setState] = createSignal<InspectState>(computeInspectState(system));\n\n\tconst update = () => {\n\t\tsetState(computeInspectState(system));\n\t};\n\n\tif (options?.throttleMs && options.throttleMs > 0) {\n\t\tconst { throttled, cleanup } = createThrottle(update, options.throttleMs);\n\t\tconst unsubFacts = system.facts.$store.subscribeAll(throttled);\n\t\tconst unsubSettled = system.onSettledChange(throttled);\n\t\tonCleanup(() => {\n\t\t\tcleanup();\n\t\t\tunsubFacts();\n\t\t\tunsubSettled();\n\t\t});\n\t} else {\n\t\tconst unsubFacts = system.facts.$store.subscribeAll(update);\n\t\tconst unsubSettled = system.onSettledChange(update);\n\t\tonCleanup(() => {\n\t\t\tunsubFacts();\n\t\t\tunsubSettled();\n\t\t});\n\t}\n\n\treturn state;\n}\n\n// ============================================================================\n// useRequirementStatus — single or multi\n// ============================================================================\n\n/** Single type overload */\nexport function useRequirementStatus(statusPlugin: StatusPlugin, type: string): Accessor<RequirementTypeStatus>;\n/** Multi-type overload */\nexport function useRequirementStatus(statusPlugin: StatusPlugin, types: string[]): Accessor<Record<string, RequirementTypeStatus>>;\n/** Implementation */\nexport function useRequirementStatus(\n\tstatusPlugin: StatusPlugin,\n\ttypeOrTypes: string | string[],\n): Accessor<RequirementTypeStatus> | Accessor<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\t\tconst [state, setState] = createSignal(getValues());\n\t\tconst unsubscribe = statusPlugin.subscribe(() => {\n\t\t\tsetState(getValues);\n\t\t});\n\t\tonCleanup(unsubscribe);\n\t\treturn state;\n\t}\n\n\tconst [status, setStatus] = createSignal<RequirementTypeStatus>(statusPlugin.getStatus(typeOrTypes));\n\tconst unsubscribe = statusPlugin.subscribe(() => {\n\t\tsetStatus(statusPlugin.getStatus(typeOrTypes));\n\t});\n\tonCleanup(unsubscribe);\n\treturn status;\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): Accessor<string | null> {\n\tassertSystem(\"useExplain\", system);\n\tconst [explanation, setExplanation] = createSignal<string | null>(system.explain(requirementId));\n\n\tconst update = () => setExplanation(system.explain(requirementId));\n\tconst unsubFacts = system.facts.$store.subscribeAll(update);\n\tconst unsubSettled = system.onSettledChange(update);\n\tonCleanup(() => {\n\t\tunsubFacts();\n\t\tunsubSettled();\n\t});\n\n\treturn explanation;\n}\n\n// ============================================================================\n// useConstraintStatus — reactive constraint inspection\n// ============================================================================\n\n/** Get all constraints */\nexport function useConstraintStatus(\n\tsystem: SingleModuleSystem<any>,\n): Accessor<ConstraintInfo[]>;\n/** Get a single constraint by ID */\nexport function useConstraintStatus(\n\tsystem: SingleModuleSystem<any>,\n\tconstraintId: string,\n): Accessor<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): Accessor<ConstraintInfo[] | ConstraintInfo | null> {\n\tassertSystem(\"useConstraintStatus\", system);\n\tconst getVal = () => {\n\t\tconst inspection = system.inspect();\n\t\tif (!constraintId) return inspection.constraints;\n\t\treturn inspection.constraints.find((c: ConstraintInfo) => c.id === constraintId) ?? null;\n\t};\n\n\tconst [state, setState] = createSignal<ConstraintInfo[] | ConstraintInfo | null>(getVal());\n\n\tconst update = () => setState(getVal);\n\tconst unsubFacts = system.facts.$store.subscribeAll(update);\n\tconst unsubSettled = system.onSettledChange(update);\n\tonCleanup(() => {\n\t\tunsubFacts();\n\t\tunsubSettled();\n\t});\n\n\treturn state;\n}\n\n// ============================================================================\n// useOptimisticUpdate — batch with rollback on failure\n// ============================================================================\n\nexport interface OptimisticUpdateResult {\n\tmutate: (updateFn: () => void) => void;\n\tisPending: Accessor<boolean>;\n\terror: Accessor<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\tconst [isPending, setIsPending] = createSignal(false);\n\tconst [error, setError] = createSignal<Error | null>(null);\n\tlet snapshot: SystemSnapshot | null = null;\n\tlet statusUnsub: (() => void) | null = null;\n\n\tconst rollback = () => {\n\t\tif (snapshot) {\n\t\t\tsystem.restore(snapshot);\n\t\t\tsnapshot = null;\n\t\t}\n\t\tsetIsPending(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\tsetIsPending(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\tsetIsPending(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\tonCleanup(() => {\n\t\tstatusUnsub?.();\n\t});\n\n\treturn { mutate, isPending, error, rollback };\n}\n\n// ============================================================================\n// useSuspenseRequirement — Solid-specific Suspense integration\n// ============================================================================\n\n/**\n * Single type: throws a promise while the requirement is pending (Suspense).\n */\nexport function useSuspenseRequirement(statusPlugin: StatusPlugin, type: string): Accessor<RequirementTypeStatus>;\n/**\n * Multi-type: throws a promise while any of the requirements are pending.\n */\nexport function useSuspenseRequirement(statusPlugin: StatusPlugin, types: string[]): Accessor<Record<string, RequirementTypeStatus>>;\n/** Implementation */\nexport function useSuspenseRequirement(\n\tstatusPlugin: StatusPlugin,\n\ttypeOrTypes: string | string[],\n): Accessor<RequirementTypeStatus> | Accessor<Record<string, RequirementTypeStatus>> {\n\tconst types = Array.isArray(typeOrTypes) ? typeOrTypes : [typeOrTypes];\n\n\t// Check if any are still loading — if so, throw a promise\n\tconst anyLoading = () => types.some((t) => statusPlugin.getStatus(t).isLoading);\n\n\tif (anyLoading()) {\n\t\tthrow new Promise<void>((resolve) => {\n\t\t\tconst unsub = statusPlugin.subscribe(() => {\n\t\t\t\tif (!anyLoading()) {\n\t\t\t\t\tunsub();\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t// Once resolved, return normal accessor\n\tif (Array.isArray(typeOrTypes)) {\n\t\treturn useRequirementStatus(statusPlugin, typeOrTypes) as Accessor<Record<string, RequirementTypeStatus>>;\n\t}\n\treturn useRequirementStatus(statusPlugin, typeOrTypes) as Accessor<RequirementTypeStatus>;\n}\n\n// ============================================================================\n// useTimeTravel — reactive time-travel signal\n// ============================================================================\n\n/**\n * Reactive time-travel signal. Returns an Accessor that updates\n * when snapshots are taken or navigation occurs.\n *\n * @example\n * ```tsx\n * const tt = useTimeTravel(system);\n * <button disabled={!tt()?.canUndo} onClick={() => 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): Accessor<ReturnType<typeof buildTimeTravelState>> {\n\tassertSystem(\"useTimeTravel\", system);\n\tconst [state, setState] = createSignal<ReturnType<typeof buildTimeTravelState>>(buildTimeTravelState(system));\n\tconst unsub = system.onTimeTravelChange(() => setState(buildTimeTravelState(system)));\n\tonCleanup(unsub);\n\treturn state;\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 reactive signals.\n *\n * @example\n * ```tsx\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\tonCleanup(() => {\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 [factsState, setFactsState] = createSignal(\n\t\tsubscribeAll\n\t\t\t? (system.facts.$store.toObject() as InferFacts<M>)\n\t\t\t: (pickFacts(system, factKeys ?? []) as InferFacts<M>),\n\t);\n\tconst unsubFacts = subscribeAll\n\t\t? system.facts.$store.subscribeAll(() => {\n\t\t\tsetFactsState(() => system.facts.$store.toObject() as InferFacts<M>);\n\t\t})\n\t\t: factKeys && factKeys.length > 0\n\t\t\t? system.facts.$store.subscribe(factKeys, () => {\n\t\t\t\tsetFactsState(() => pickFacts(system, factKeys) as InferFacts<M>);\n\t\t\t})\n\t\t\t: null;\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 [derivedState, setDerivedState] = createSignal(getDerived());\n\tconst unsubDerived = allDerivationKeys.length > 0\n\t\t? system.subscribe(allDerivationKeys, () => { setDerivedState(getDerived); })\n\t\t: null;\n\n\tonCleanup(() => {\n\t\tunsubFacts?.();\n\t\tunsubDerived?.();\n\t});\n\n\tconst events = system.events;\n\tconst dispatch = (event: InferEvents<M>) => system.dispatch(event);\n\n\treturn {\n\t\tsystem,\n\t\tfacts: factsState as Accessor<InferFacts<M>>,\n\t\tderived: derivedState as Accessor<InferDerivations<M>>,\n\t\tevents,\n\t\tdispatch,\n\t\tstatusPlugin,\n\t};\n}\n\n// ============================================================================\n// Signal Factories (for use outside components)\n// ============================================================================\n\n/**\n * Create a derivation signal outside of a component.\n */\nexport function createDerivedSignal<T>(\n\t// biome-ignore lint/suspicious/noExplicitAny: Must work with any schema\n\tsystem: SingleModuleSystem<any>,\n\tderivationId: string,\n): [Accessor<T>, () => void] {\n\tconst [value, setValue] = createSignal<T>(system.read(derivationId) as T);\n\tconst unsubscribe = system.subscribe([derivationId], () => {\n\t\tsetValue(() => system.read(derivationId) as T);\n\t});\n\treturn [value, unsubscribe];\n}\n\n/**\n * Create a fact signal outside of a component.\n */\nexport function createFactSignal<T>(\n\t// biome-ignore lint/suspicious/noExplicitAny: Must work with any schema\n\tsystem: SingleModuleSystem<any>,\n\tfactKey: string,\n): [Accessor<T | undefined>, () => void] {\n\tconst [value, setValue] = createSignal<T | undefined>(\n\t\tsystem.facts.$store.get(factKey) as T | undefined,\n\t);\n\tconst unsubscribe = system.facts.$store.subscribe([factKey], () => {\n\t\tsetValue(() => system.facts.$store.get(factKey) as T | undefined);\n\t});\n\treturn [value, unsubscribe];\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) => Accessor<InferFacts<M>[K] | undefined>;\n\tuseDerived: <K extends keyof InferDerivations<M> & string>(\n\t\tsystem: SingleModuleSystem<M>,\n\t\tderivationId: K,\n\t) => Accessor<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: Required for overload compatibility\n\t\t\tuseFact(system as SingleModuleSystem<any>, factKey as string) as Accessor<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: Required for overload compatibility\n\t\t\tuseDerived(system as SingleModuleSystem<any>, derivationId as string) as Accessor<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: Required for overload compatibility\n\t\t\tuseWatch(system as SingleModuleSystem<any>, key, callback),\n\t};\n}\n\n// ============================================================================\n// useNamespacedSelector — select from a NamespacedSystem\n// ============================================================================\n\n/**\n * SolidJS accessor that selects from a NamespacedSystem.\n * Subscribes to specified keys and provides reactive updates.\n *\n * @param system - The namespaced system\n * @param keys - Namespaced keys to subscribe to (e.g., [\"auth.token\", \"data.count\"])\n * @param selector - Function that reads from system.facts / system.derive\n *\n * @example\n * ```tsx\n * const token = useNamespacedSelector(system, [\"auth.token\"], (s) => s.facts.auth.token);\n * ```\n */\nexport function useNamespacedSelector<Modules extends ModulesMap, R>(\n\tsystem: NamespacedSystem<Modules>,\n\tkeys: string[],\n\tselector: (system: NamespacedSystem<Modules>) => R,\n): Accessor<R> {\n\tconst [value, setValue] = createSignal<R>(selector(system));\n\tconst unsubscribe = system.subscribe(keys, () => {\n\t\tsetValue(() => selector(system));\n\t});\n\tonCleanup(unsubscribe);\n\n\treturn value as Accessor<R>;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@directive-run/solid",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Solid.js signals adapter for Directive.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Jason Comes",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"solid-js": "^1.8.0",
|
|
54
54
|
"tsup": "^8.3.5",
|
|
55
55
|
"typescript": "^5.7.2",
|
|
56
|
-
"@directive-run/core": "0.
|
|
56
|
+
"@directive-run/core": "0.3.0"
|
|
57
57
|
},
|
|
58
58
|
"scripts": {
|
|
59
59
|
"build": "tsup",
|