@directive-run/svelte 1.23.0 → 1.23.1
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.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/dev-true.ts","../src/index.ts"],"names":["dev_true_default","createDerivedStore","system","derivationId","readable","set","createDerivedsStore","derivationIds","getValues","result","id","createFactStore","factKey","createInspectStore","update","unsubFacts","unsubSettled","useFact","keyOrKeys","assertSystem","_useFactMulti","factKeys","key","useDerived","idOrIds","useSelector","selector","equalityFn","defaultEquality","deriveKeySet","runWithTracking","runTrackedSelector","initial","currentSelected","trackedFactKeys","trackedDeriveKeys","unsubs","resubscribe","unsub","onUpdate","depsChanged","useDispatch","event","useEvents","useWatch","callback","unsubscribe","onDestroy","useInspect","options","computeInspectState","throttled","cleanup","createThrottle","useRequirementStatus","statusPlugin","typeOrTypes","type","useExplain","requirementId","useConstraintStatus","constraintId","_getConstraintValue","inspection","c","useOptimisticUpdate","requirementType","isPendingValue","errorValue","snapshot","statusUnsub","pendingSubscribers","errorSubscribers","isPending","fn","error","setPending","v","setError","rollback","mutate","updateFn","status","useHistory","buildHistoryState","useDirective","moduleDef","config","allPlugins","sp","createRequirementStatusPlugin","createSystem","err","derivedKeys","subscribeAll","factsStore","pickFacts","allDerivationKeys","getDerived","derivedStore","events","createTypedHooks","useNamespacedSelector","keys","_createQuerySystem","getCreateQuerySystem","useQuerySystem","HYDRATION_KEY","setHydrationSnapshot","setContext","useHydratedSystem","getContext","mergedFacts","mergeHydrationFacts","createAuditLedgerStore","ledger","filter","opts","requestedPollMs","pollMs","entryCount","useAuditLedger"],"mappings":"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","file":"index.cjs","sourcesContent":["export default typeof process !== \"undefined\" &&\n process.env?.NODE_ENV !== \"production\";\n","/**\n * Svelte Adapter - Consolidated Svelte stores for Directive\n *\n * 15 active exports: useFact, useDerived, useDispatch, useSelector,\n * useWatch, useInspect, useRequirementStatus, useEvents, useExplain,\n * useConstraintStatus, useOptimisticUpdate, useDirective, useHistory,\n * createTypedHooks, shallowEqual\n *\n * Store factories: createDerivedStore, createDerivedsStore, createFactStore, createInspectStore\n */\n\nimport type {\n ErrorBoundaryConfig,\n HistoryState,\n InferDerivations,\n InferEvents,\n InferFacts,\n InferSelectorState,\n ModuleDef,\n ModuleSchema,\n ModulesMap,\n NamespacedSystem,\n Plugin,\n SingleModuleSystem,\n SystemInspection,\n SystemSnapshot,\n TraceOption,\n} from \"@directive-run/core\";\nimport {\n createRequirementStatusPlugin,\n createSystem,\n} from \"@directive-run/core\";\nimport type { RequirementTypeStatus } from \"@directive-run/core\";\nimport {\n type ConstraintInfo,\n type InspectState,\n assertSystem,\n buildHistoryState,\n computeInspectState,\n createThrottle,\n defaultEquality,\n depsChanged,\n mergeHydrationFacts,\n pickFacts,\n runTrackedSelector,\n shallowEqual,\n} from \"@directive-run/core/adapter-utils\";\nimport { getContext, onDestroy, setContext } from \"svelte\";\nimport { type Readable, readable } from \"svelte/store\";\nimport isDevelopment from \"#is-development\";\n\n// Re-export for convenience\nexport type { RequirementTypeStatus, InspectState, ConstraintInfo };\nexport { shallowEqual };\n\n/** Type for the requirement status plugin return value */\nexport type StatusPlugin = ReturnType<typeof createRequirementStatusPlugin>;\n\n// ============================================================================\n// Store Factories\n// ============================================================================\n\n/**\n * Create a Svelte store for a derived value.\n */\nexport function createDerivedStore<T>(\n system: SingleModuleSystem<any>,\n derivationId: string,\n): Readable<T> {\n if (isDevelopment) {\n const initialValue = system.read(derivationId);\n if (initialValue === undefined) {\n console.warn(\n `[Directive] createDerivedStore(\"${derivationId}\") returned undefined. ` +\n `Check that \"${derivationId}\" is defined in your module's derive property.`,\n );\n }\n }\n\n return readable<T>(system.read(derivationId) as T, (set) => {\n const unsubscribe = system.subscribe([derivationId], () => {\n set(system.read(derivationId) as T);\n });\n return unsubscribe;\n });\n}\n\n/**\n * Create a Svelte store for multiple derived values.\n */\nexport function createDerivedsStore<T extends Record<string, unknown>>(\n system: SingleModuleSystem<any>,\n derivationIds: string[],\n): Readable<T> {\n const getValues = (): T => {\n const result: Record<string, unknown> = {};\n for (const id of derivationIds) {\n result[id] = system.read(id);\n }\n return result as T;\n };\n\n return readable<T>(getValues(), (set) => {\n const unsubscribe = system.subscribe(derivationIds, () => {\n set(getValues());\n });\n return unsubscribe;\n });\n}\n\n/**\n * Create a Svelte store for a single fact value.\n */\nexport function createFactStore<T>(\n system: SingleModuleSystem<any>,\n factKey: string,\n): Readable<T | undefined> {\n if (isDevelopment) {\n if (!system.facts.$store.has(factKey)) {\n console.warn(\n `[Directive] createFactStore(\"${factKey}\") — fact not found in store. ` +\n `Check that \"${factKey}\" is defined in your module's schema.`,\n );\n }\n }\n\n return readable<T | undefined>(\n system.facts.$store.get(factKey) as T | undefined,\n (set) => {\n const unsubscribe = system.facts.$store.subscribe([factKey], () => {\n set(system.facts.$store.get(factKey) as T | undefined);\n });\n return unsubscribe;\n },\n );\n}\n\n/**\n * Create a Svelte store for system inspection data.\n * NOTE: This updates on every fact change. Use sparingly in production.\n */\nexport function createInspectStore(\n system: SingleModuleSystem<any>,\n): Readable<SystemInspection> {\n return readable<SystemInspection>(system.inspect(), (set) => {\n const update = () => set(system.inspect());\n const unsubFacts = system.facts.$store.subscribeAll(update);\n const unsubSettled = system.onSettledChange(update);\n return () => {\n unsubFacts();\n unsubSettled();\n };\n });\n}\n\n// ============================================================================\n// useFact — single key or multi key\n// ============================================================================\n\n/** Single key overload */\nexport function useFact<\n S extends ModuleSchema,\n K extends keyof InferFacts<S> & string,\n>(\n system: SingleModuleSystem<S>,\n factKey: K,\n): Readable<InferFacts<S>[K] | undefined>;\n/** Multi-key overload */\nexport function useFact<\n S extends ModuleSchema,\n K extends keyof InferFacts<S> & string,\n>(\n system: SingleModuleSystem<S>,\n factKeys: K[],\n): Readable<Pick<InferFacts<S>, K>>;\n/** Implementation */\nexport function useFact(\n system: SingleModuleSystem<any>,\n keyOrKeys: string | string[],\n): Readable<unknown> {\n assertSystem(\"useFact\", system);\n if (isDevelopment && typeof keyOrKeys === \"function\") {\n console.error(\n \"[Directive] useFact() received a function. Did you mean useSelector()? \" +\n \"useFact() takes a string key or array of keys, not a selector function.\",\n );\n }\n\n // Multi-key path: useFact(system, [keys])\n if (Array.isArray(keyOrKeys)) {\n return _useFactMulti(system, keyOrKeys);\n }\n\n // Single key path: useFact(system, key)\n return createFactStore(system, keyOrKeys);\n}\n\nfunction _useFactMulti(\n system: SingleModuleSystem<any>,\n factKeys: string[],\n): Readable<Record<string, unknown>> {\n const getValues = (): Record<string, unknown> => {\n const result: Record<string, unknown> = {};\n for (const key of factKeys) {\n result[key] = system.facts.$store.get(key);\n }\n return result;\n };\n\n return readable(getValues(), (set) => {\n const unsubscribe = system.facts.$store.subscribe(factKeys, () => {\n set(getValues());\n });\n return unsubscribe;\n });\n}\n\n// ============================================================================\n// useDerived — single key or multi key\n// ============================================================================\n\n/** Single key overload */\nexport function useDerived<\n S extends ModuleSchema,\n K extends keyof InferDerivations<S> & string,\n>(\n system: SingleModuleSystem<S>,\n derivationId: K,\n): Readable<InferDerivations<S>[K]>;\n/** Multi-key overload */\nexport function useDerived<\n S extends ModuleSchema,\n K extends keyof InferDerivations<S> & string,\n>(\n system: SingleModuleSystem<S>,\n derivationIds: K[],\n): Readable<Pick<InferDerivations<S>, K>>;\n/** Implementation */\nexport function useDerived(\n system: SingleModuleSystem<any>,\n idOrIds: string | string[],\n): Readable<unknown> {\n assertSystem(\"useDerived\", system);\n if (isDevelopment && typeof idOrIds === \"function\") {\n console.error(\n \"[Directive] useDerived() received a function. Did you mean useSelector()? \" +\n \"useDerived() takes a string key or array of keys, not a selector function.\",\n );\n }\n\n // Multi-key path\n if (Array.isArray(idOrIds)) {\n return createDerivedsStore(system, idOrIds);\n }\n\n // Single key path\n return createDerivedStore(system, idOrIds);\n}\n\n// ============================================================================\n// useSelector — auto-tracking selector over facts and derivations\n// ============================================================================\n\n/**\n * Auto-tracking selector over facts and derivations.\n * Uses `withTracking()` to detect which facts the selector accesses,\n * then subscribes only to those keys.\n */\nexport function useSelector<S extends ModuleSchema, R>(\n system: SingleModuleSystem<S>,\n selector: (state: InferSelectorState<S>) => R,\n equalityFn?: (a: R, b: R) => boolean,\n): Readable<R>;\nexport function useSelector(\n system: SingleModuleSystem<any>,\n selector: (state: any) => unknown,\n equalityFn: (a: unknown, b: unknown) => boolean = defaultEquality,\n): Readable<unknown> {\n assertSystem(\"useSelector\", system);\n const deriveKeySet = new Set(Object.keys(system.derive ?? {}));\n\n // Build a tracking-aware state proxy that exposes both facts and derivations\n const runWithTracking = () =>\n runTrackedSelector(system, deriveKeySet, selector);\n\n const initial = runWithTracking();\n\n return readable(initial.value, (set) => {\n let currentSelected = initial.value;\n let trackedFactKeys = initial.factKeys;\n let trackedDeriveKeys = initial.deriveKeys;\n const unsubs: Array<() => void> = [];\n\n const resubscribe = () => {\n for (const unsub of unsubs) unsub();\n unsubs.length = 0;\n\n const onUpdate = () => {\n const result = runWithTracking();\n if (!equalityFn(currentSelected, result.value)) {\n currentSelected = result.value;\n set(result.value);\n }\n // Re-track: check if deps changed\n if (\n depsChanged(\n trackedFactKeys,\n result.factKeys,\n trackedDeriveKeys,\n result.deriveKeys,\n )\n ) {\n trackedFactKeys = result.factKeys;\n trackedDeriveKeys = result.deriveKeys;\n resubscribe();\n }\n };\n\n if (trackedFactKeys.length > 0) {\n unsubs.push(system.facts.$store.subscribe(trackedFactKeys, onUpdate));\n } else if (trackedDeriveKeys.length === 0) {\n unsubs.push(system.facts.$store.subscribeAll(onUpdate));\n }\n if (trackedDeriveKeys.length > 0) {\n unsubs.push(system.subscribe(trackedDeriveKeys, onUpdate));\n }\n };\n\n resubscribe();\n\n return () => {\n for (const unsub of unsubs) unsub();\n };\n });\n}\n\n// ============================================================================\n// useDispatch\n// ============================================================================\n\nexport function useDispatch<S extends ModuleSchema>(\n system: SingleModuleSystem<S>,\n): (event: InferEvents<S>) => void {\n assertSystem(\"useDispatch\", system);\n return (event: InferEvents<S>) => {\n system.dispatch(event);\n };\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 system: SingleModuleSystem<S>,\n): SingleModuleSystem<S>[\"events\"] {\n assertSystem(\"useEvents\", system);\n return 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<\n S extends ModuleSchema,\n K extends keyof InferDerivations<S> & string,\n>(\n system: SingleModuleSystem<S>,\n key: K,\n callback: (\n newValue: InferDerivations<S>[K],\n previousValue: InferDerivations<S>[K] | undefined,\n ) => void,\n): void;\n/** Watch a fact key with auto-detection. */\nexport function useWatch<\n S extends ModuleSchema,\n K extends keyof InferFacts<S> & string,\n>(\n system: SingleModuleSystem<S>,\n key: K,\n callback: (\n newValue: InferFacts<S>[K] | undefined,\n previousValue: InferFacts<S>[K] | undefined,\n ) => void,\n): void;\n/** Implementation */\nexport function useWatch(\n system: SingleModuleSystem<any>,\n key: string,\n callback: (newValue: unknown, prevValue: unknown) => void,\n): void {\n assertSystem(\"useWatch\", system);\n\n const unsubscribe = system.watch(key, callback);\n onDestroy(unsubscribe);\n}\n\n// ============================================================================\n// useInspect — consolidated inspection hook\n// ============================================================================\n\n/** Options for useInspect */\nexport interface UseInspectOptions {\n throttleMs?: number;\n}\n\n/**\n * Consolidated system inspection hook.\n * Returns Readable<InspectState> with optional throttling.\n */\nexport function useInspect(\n system: SingleModuleSystem<any>,\n options?: UseInspectOptions,\n): Readable<InspectState> {\n assertSystem(\"useInspect\", system);\n if (options?.throttleMs && options.throttleMs > 0) {\n return readable<InspectState>(computeInspectState(system), (set) => {\n const { throttled, cleanup } = createThrottle(() => {\n set(computeInspectState(system));\n }, options.throttleMs!);\n\n const unsubFacts = system.facts.$store.subscribeAll(throttled);\n const unsubSettled = system.onSettledChange(throttled);\n\n return () => {\n cleanup();\n unsubFacts();\n unsubSettled();\n };\n });\n }\n\n return readable<InspectState>(computeInspectState(system), (set) => {\n const update = () => set(computeInspectState(system));\n const unsubFacts = system.facts.$store.subscribeAll(update);\n const unsubSettled = system.onSettledChange(update);\n\n return () => {\n unsubFacts();\n unsubSettled();\n };\n });\n}\n\n// ============================================================================\n// useRequirementStatus — single or multi\n// ============================================================================\n\n/** Single type overload */\nexport function useRequirementStatus(\n statusPlugin: StatusPlugin,\n type: string,\n): Readable<RequirementTypeStatus>;\n/** Multi-type overload */\nexport function useRequirementStatus(\n statusPlugin: StatusPlugin,\n types: string[],\n): Readable<Record<string, RequirementTypeStatus>>;\n/** Implementation */\nexport function useRequirementStatus(\n statusPlugin: StatusPlugin,\n typeOrTypes: string | string[],\n):\n | Readable<RequirementTypeStatus>\n | Readable<Record<string, RequirementTypeStatus>> {\n if (Array.isArray(typeOrTypes)) {\n const getValues = (): Record<string, RequirementTypeStatus> => {\n const result: Record<string, RequirementTypeStatus> = {};\n for (const type of typeOrTypes) {\n result[type] = statusPlugin.getStatus(type);\n }\n return result;\n };\n\n return readable(getValues(), (set) => {\n const unsubscribe = statusPlugin.subscribe(() => {\n set(getValues());\n });\n return unsubscribe;\n });\n }\n\n return readable<RequirementTypeStatus>(\n statusPlugin.getStatus(typeOrTypes),\n (set) => {\n const unsubscribe = statusPlugin.subscribe(() => {\n set(statusPlugin.getStatus(typeOrTypes));\n });\n return unsubscribe;\n },\n );\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 system: SingleModuleSystem<any>,\n requirementId: string,\n): Readable<string | null> {\n assertSystem(\"useExplain\", system);\n return readable<string | null>(system.explain(requirementId), (set) => {\n const update = () => set(system.explain(requirementId));\n const unsubFacts = system.facts.$store.subscribeAll(update);\n const unsubSettled = system.onSettledChange(update);\n\n return () => {\n unsubFacts();\n unsubSettled();\n };\n });\n}\n\n// ============================================================================\n// useConstraintStatus — reactive constraint inspection\n// ============================================================================\n\n/** Get all constraints */\nexport function useConstraintStatus(\n system: SingleModuleSystem<any>,\n): Readable<ConstraintInfo[]>;\n/** Get a single constraint by ID */\nexport function useConstraintStatus(\n system: SingleModuleSystem<any>,\n constraintId: string,\n): Readable<ConstraintInfo | null>;\n/** Implementation */\nexport function useConstraintStatus(\n system: SingleModuleSystem<any>,\n constraintId?: string,\n): Readable<ConstraintInfo[] | ConstraintInfo | null> {\n assertSystem(\"useConstraintStatus\", system);\n return readable<ConstraintInfo[] | ConstraintInfo | null>(\n _getConstraintValue(system, constraintId),\n (set) => {\n const update = () => set(_getConstraintValue(system, constraintId));\n const unsubFacts = system.facts.$store.subscribeAll(update);\n const unsubSettled = system.onSettledChange(update);\n\n return () => {\n unsubFacts();\n unsubSettled();\n };\n },\n );\n}\n\nfunction _getConstraintValue(\n system: SingleModuleSystem<any>,\n constraintId?: string,\n): ConstraintInfo[] | ConstraintInfo | null {\n const inspection = system.inspect();\n if (!constraintId) return inspection.constraints;\n return (\n inspection.constraints.find((c: ConstraintInfo) => c.id === constraintId) ??\n null\n );\n}\n\n// ============================================================================\n// useOptimisticUpdate — batch with rollback on failure\n// ============================================================================\n\nexport interface OptimisticUpdateResult {\n mutate: (updateFn: () => void) => void;\n isPending: Readable<boolean>;\n error: Readable<Error | null>;\n rollback: () => 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 system: SingleModuleSystem<any>,\n statusPlugin?: StatusPlugin,\n requirementType?: string,\n): OptimisticUpdateResult {\n assertSystem(\"useOptimisticUpdate\", system);\n let isPendingValue = false;\n let errorValue: Error | null = null;\n let snapshot: SystemSnapshot | null = null;\n let statusUnsub: (() => void) | null = null;\n\n // We track subscribers manually since we need imperative push\n const pendingSubscribers = new Set<(v: boolean) => void>();\n const errorSubscribers = new Set<(v: Error | null) => void>();\n\n const isPending: Readable<boolean> = {\n subscribe(fn) {\n fn(isPendingValue);\n pendingSubscribers.add(fn);\n return () => pendingSubscribers.delete(fn);\n },\n };\n\n const error: Readable<Error | null> = {\n subscribe(fn) {\n fn(errorValue);\n errorSubscribers.add(fn);\n return () => errorSubscribers.delete(fn);\n },\n };\n\n const setPending = (v: boolean) => {\n isPendingValue = v;\n for (const fn of pendingSubscribers) fn(v);\n };\n\n const setError = (v: Error | null) => {\n errorValue = v;\n for (const fn of errorSubscribers) fn(v);\n };\n\n const rollback = () => {\n if (snapshot) {\n system.restore(snapshot);\n snapshot = null;\n }\n setPending(false);\n setError(null);\n statusUnsub?.();\n statusUnsub = null;\n };\n\n const mutate = (updateFn: () => void) => {\n snapshot = system.getSnapshot();\n setPending(true);\n setError(null);\n system.batch(updateFn);\n\n if (statusPlugin && requirementType) {\n statusUnsub?.();\n statusUnsub = statusPlugin.subscribe(() => {\n const status = statusPlugin.getStatus(requirementType);\n if (!status.isLoading && !status.hasError) {\n snapshot = null;\n setPending(false);\n statusUnsub?.();\n statusUnsub = null;\n } else if (status.hasError) {\n setError(status.lastError);\n rollback();\n }\n });\n }\n };\n\n onDestroy(() => {\n statusUnsub?.();\n });\n\n return { mutate, isPending, error, rollback };\n}\n\n// ============================================================================\n// useHistory — reactive history store\n// ============================================================================\n\n/**\n * Reactive history Svelte store. Returns a Readable that updates\n * when snapshots are taken or navigation occurs.\n *\n * @example\n * ```svelte\n * const history = useHistory(system);\n * <button disabled={!$history?.canGoBack} on:click={() => $history?.goBack()}>Undo</button>\n * ```\n */\nexport function useHistory(\n system: SingleModuleSystem<any>,\n): Readable<HistoryState | null> {\n assertSystem(\"useHistory\", system);\n return readable<HistoryState | null>(buildHistoryState(system), (set) => {\n return system.onHistoryChange(() => set(buildHistoryState(system)));\n });\n}\n\n// ============================================================================\n// Scoped System\n// ============================================================================\n\n/** Configuration for useDirective */\nexport interface UseDirectiveConfig {\n plugins?: Plugin<any>[];\n trace?: TraceOption;\n errorBoundary?: ErrorBoundaryConfig;\n tickMs?: number;\n zeroConfig?: boolean;\n initialFacts?: Record<string, any>;\n status?: boolean;\n /** Fact keys to subscribe to (omit for all) */\n facts?: string[];\n /** Derivation keys to subscribe to (omit for all) */\n derived?: string[];\n}\n\n/**\n * Create a scoped Directive system with automatic lifecycle management.\n * When no `facts` or `derived` keys are specified, subscribes to ALL\n * facts and derivations and returns Svelte readable stores.\n *\n * @example\n * ```svelte\n * // Subscribe to everything\n * const { facts, derived, events, dispatch } = useDirective(counterModule);\n *\n * // Selective keys\n * const { facts, derived } = useDirective(counterModule, { facts: [\"count\"], derived: [\"doubled\"] });\n * ```\n */\nexport function useDirective<M extends ModuleSchema>(\n moduleDef: ModuleDef<M>,\n config?: UseDirectiveConfig,\n): {\n system: SingleModuleSystem<M>;\n facts: Readable<InferFacts<M>>;\n derived: Readable<InferDerivations<M>>;\n events: SingleModuleSystem<M>[\"events\"];\n dispatch: (event: InferEvents<M>) => void;\n statusPlugin: StatusPlugin | undefined;\n} {\n const allPlugins = [...(config?.plugins ?? [])];\n let statusPlugin: StatusPlugin | undefined;\n\n if (config?.status) {\n const sp = createRequirementStatusPlugin();\n statusPlugin = sp;\n allPlugins.push(sp.plugin as Plugin<any>);\n }\n\n const system = createSystem({\n module: moduleDef,\n plugins: allPlugins.length > 0 ? allPlugins : undefined,\n trace: config?.trace,\n errorBoundary: config?.errorBoundary,\n tickMs: config?.tickMs,\n zeroConfig: config?.zeroConfig,\n initialFacts: config?.initialFacts,\n } as any) as unknown as SingleModuleSystem<M>;\n\n // SSR guard: initialize facts for SSR rendering, start reconciliation only in the browser\n if (typeof window !== \"undefined\") {\n system.start();\n } else {\n system.initialize();\n }\n\n onDestroy(() => {\n // RFC 0009 follow-up (R18 Tier 2-B): destroyAsync so source\n // unsubscribes complete; fire-and-forget with swallow-catch\n // (the framework's onDestroy is sync).\n system.destroyAsync().catch((err: unknown) => {\n if (isDevelopment)\n console.warn(\"[Directive] destroyAsync rejected during unmount:\", err);\n });\n });\n\n const factKeys = config?.facts;\n const derivedKeys = config?.derived;\n const subscribeAll = !factKeys && !derivedKeys;\n\n // Subscribe to facts\n const factsStore: Readable<InferFacts<M>> = subscribeAll\n ? readable(system.facts.$store.toObject() as InferFacts<M>, (set) => {\n return system.facts.$store.subscribeAll(() => {\n set(system.facts.$store.toObject() as InferFacts<M>);\n });\n })\n : readable(pickFacts(system, factKeys ?? []) as InferFacts<M>, (set) => {\n if (!factKeys || factKeys.length === 0) return () => {};\n return system.facts.$store.subscribe(factKeys, () => {\n set(pickFacts(system, factKeys) as InferFacts<M>);\n });\n });\n\n // Subscribe to derivations\n const allDerivationKeys = subscribeAll\n ? Object.keys(system.derive ?? {})\n : (derivedKeys ?? []);\n const getDerived = (): InferDerivations<M> => {\n const result: Record<string, unknown> = {};\n for (const key of allDerivationKeys) {\n result[key] = system.read(key);\n }\n return result as InferDerivations<M>;\n };\n const derivedStore: Readable<InferDerivations<M>> =\n allDerivationKeys.length > 0\n ? readable(getDerived(), (set) => {\n return system.subscribe(allDerivationKeys, () => {\n set(getDerived());\n });\n })\n : readable(getDerived(), () => () => {});\n\n const events = system.events;\n const dispatch = (event: InferEvents<M>) => system.dispatch(event);\n\n return {\n system,\n facts: factsStore,\n derived: derivedStore,\n events,\n dispatch,\n statusPlugin,\n };\n}\n\n// ============================================================================\n// Typed Hooks Factory\n// ============================================================================\n\nexport function createTypedHooks<M extends ModuleSchema>(): {\n useFact: <K extends keyof InferFacts<M> & string>(\n system: SingleModuleSystem<M>,\n factKey: K,\n ) => Readable<InferFacts<M>[K] | undefined>;\n useDerived: <K extends keyof InferDerivations<M> & string>(\n system: SingleModuleSystem<M>,\n derivationId: K,\n ) => Readable<InferDerivations<M>[K]>;\n useDispatch: (\n system: SingleModuleSystem<M>,\n ) => (event: InferEvents<M>) => void;\n useEvents: (system: SingleModuleSystem<M>) => SingleModuleSystem<M>[\"events\"];\n useWatch: <K extends string>(\n system: SingleModuleSystem<M>,\n key: K,\n callback: (newValue: unknown, previousValue: unknown) => void,\n ) => void;\n} {\n return {\n useFact: <K extends keyof InferFacts<M> & string>(\n system: SingleModuleSystem<M>,\n factKey: K,\n ) =>\n useFact(system as SingleModuleSystem<any>, factKey) as Readable<\n InferFacts<M>[K] | undefined\n >,\n useDerived: <K extends keyof InferDerivations<M> & string>(\n system: SingleModuleSystem<M>,\n derivationId: K,\n ) =>\n useDerived(system as SingleModuleSystem<any>, derivationId) as Readable<\n InferDerivations<M>[K]\n >,\n useDispatch: (system: SingleModuleSystem<M>) => {\n return (event: InferEvents<M>) => {\n system.dispatch(event);\n };\n },\n useEvents: (system: SingleModuleSystem<M>) => useEvents<M>(system),\n useWatch: <K extends string>(\n system: SingleModuleSystem<M>,\n key: K,\n callback: (newValue: unknown, previousValue: unknown) => void,\n ) => useWatch(system as SingleModuleSystem<any>, key, callback),\n };\n}\n\n// ============================================================================\n// useNamespacedSelector — select from a NamespacedSystem\n// ============================================================================\n\n/**\n * Svelte readable store 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 * ```svelte\n * const token$ = useNamespacedSelector(system, [\"auth.token\"], (s) => s.facts.auth.token);\n * ```\n */\nexport function useNamespacedSelector<Modules extends ModulesMap, R>(\n system: NamespacedSystem<Modules>,\n keys: string[],\n selector: (system: NamespacedSystem<Modules>) => R,\n): Readable<R> {\n return readable<R>(selector(system), (set) => {\n const unsubscribe = system.subscribe(keys, () => {\n set(selector(system));\n });\n\n return unsubscribe;\n });\n}\n\n// ============================================================================\n// useQuerySystem — Stable query system with lifecycle management\n// ============================================================================\n\nlet _createQuerySystem: ((config: Record<string, unknown>) => any) | null =\n null;\n\nfunction getCreateQuerySystem() {\n if (!_createQuerySystem) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const mod = require(\"@directive-run/query\");\n _createQuerySystem = mod.createQuerySystem;\n } catch {\n throw new Error(\n \"[Directive] @directive-run/query is not installed. \" +\n \"Install it with: pnpm add @directive-run/query\",\n );\n }\n }\n\n return _createQuerySystem!;\n}\n\n/**\n * Svelte composable to create and manage a query system with proper lifecycle.\n *\n * Accepts a config object or a factory function that creates the system.\n * Handles cleanup on component destroy.\n *\n * @example\n * ```svelte\n * <script>\n * import { useQuerySystem, useDerived } from \"@directive-run/svelte\";\n *\n * const app = useQuerySystem({\n * facts: { userId: \"\" },\n * queries: { user: { key: ..., fetcher: ... } },\n * });\n *\n * const user = useDerived(app, \"user\");\n * </script>\n * ```\n */\nexport function useQuerySystem<\n T extends {\n start: () => void;\n destroy: () => void;\n isRunning?: boolean;\n [key: string]: any;\n },\n>(config: Record<string, unknown>): T {\n const createQuerySystem = getCreateQuerySystem();\n const system = createQuerySystem(config) as T;\n\n if (typeof window !== \"undefined\" && !system.isRunning) {\n system.start();\n }\n\n onDestroy(() => {\n // RFC 0009 follow-up (R18 Tier 2-B): destroyAsync so source\n // unsubscribes complete; fire-and-forget with swallow-catch\n // (the framework's onDestroy is sync).\n system.destroyAsync().catch((err: unknown) => {\n if (isDevelopment)\n console.warn(\"[Directive] destroyAsync rejected during unmount:\", err);\n });\n });\n\n return system;\n}\n\n// ============================================================================\n// SSR Hydration\n// ============================================================================\n\n/** @internal Context key for SSR hydration snapshot */\nconst HYDRATION_KEY = Symbol(\"directive-hydration\");\n\n/**\n * Provide a DistributableSnapshot for child components to hydrate from.\n * Call this in your layout or parent component (e.g., SvelteKit +layout.svelte).\n *\n * @example\n * ```svelte\n * <script>\n * import { setHydrationSnapshot } from \"@directive-run/svelte\";\n * export let data; // from SvelteKit load()\n * setHydrationSnapshot(data.snapshot);\n * </script>\n * <slot />\n * ```\n */\nexport function setHydrationSnapshot(snapshot: Record<string, unknown>): void {\n setContext(HYDRATION_KEY, snapshot);\n}\n\n/**\n * Create a system hydrated from a server snapshot.\n * Must be called in a component that is a descendant of one that called `setHydrationSnapshot`.\n *\n * @example\n * ```svelte\n * <script>\n * import { useHydratedSystem, useDerived } from \"@directive-run/svelte\";\n * const system = useHydratedSystem(myModule);\n * const count = useDerived(system, \"count\");\n * </script>\n * ```\n */\nexport function useHydratedSystem<S extends ModuleSchema>(\n moduleDef: ModuleDef<S>,\n config?: UseDirectiveConfig,\n): SingleModuleSystem<S> {\n const snapshot = getContext<Record<string, unknown> | undefined>(\n HYDRATION_KEY,\n );\n const mergedFacts = mergeHydrationFacts(\n snapshot,\n config?.initialFacts as Record<string, unknown>,\n );\n\n return useDirective(moduleDef, { ...config, initialFacts: mergedFacts })\n .system;\n}\n\n// ============================================================================\n// createAuditLedgerStore — live ledger entries with filter (R4.I parity)\n// ============================================================================\n\nimport type { AuditEntry, AuditLedger, QueryFilter } from \"@directive-run/core\";\n\n/**\n * Create a Svelte readable store that holds the latest audit-ledger\n * entries matching `filter`. Re-emits on each poll tick (default\n * 250 ms — override with `pollMs`).\n *\n * **Polling floor:** `pollMs` is clamped to a minimum of 50 ms to prevent\n * accidental DoS from typos like `pollMs: 5`. Values below the floor are\n * silently clamped in production; dev mode logs a warning.\n *\n * **First-paint freshness:** the store re-queries the ledger inside the\n * `readable` start function (before the first interval tick lands) so\n * the first subscriber sees fresh entries even if the ledger has been\n * appended-to between store construction and first subscription.\n *\n * @example\n * ```svelte\n * <script>\n * import { createAuditLedgerStore } from \"@directive-run/svelte\";\n * const entries = createAuditLedgerStore(ledger, { kind: \"constraint.evaluate\", limit: 20 });\n * </script>\n *\n * <ul>\n * {#each $entries as e (e.seq)}\n * <li>{e.kind} @ {new Date(e.ts).toISOString()}</li>\n * {/each}\n * </ul>\n * ```\n */\nexport function createAuditLedgerStore(\n ledger: AuditLedger,\n filter: QueryFilter = {},\n opts: { pollMs?: number } = {},\n): Readable<readonly AuditEntry[]> {\n const requestedPollMs = opts.pollMs ?? 250;\n const pollMs = Math.max(50, requestedPollMs);\n\n if (isDevelopment) {\n if (opts.pollMs !== undefined && opts.pollMs < 50) {\n console.warn(\n `[Directive] createAuditLedgerStore() pollMs=${opts.pollMs} is below the 50 ms floor; clamped to 50 ms.`,\n );\n }\n if (pollMs < 100) {\n const entryCount = ledger.toJSON().entries.length;\n if (entryCount > 1000) {\n console.warn(\n `[Directive] createAuditLedgerStore() polling every ${pollMs} ms against a ${entryCount}-entry ledger — that's a lot of CPU per tick. Consider raising pollMs or tightening the filter.`,\n );\n }\n }\n }\n\n return readable<readonly AuditEntry[]>(ledger.query(filter), (set) => {\n // Re-query immediately on subscription so the first paint sees any\n // entries that landed between store construction and the first sub.\n set(ledger.query(filter));\n const id = setInterval(() => set(ledger.query(filter)), pollMs);\n return () => clearInterval(id);\n });\n}\n\n/**\n * Alias for {@link createAuditLedgerStore} that mirrors the\n * cross-framework `useAuditLedger` naming. Functionally identical;\n * use whichever reads more naturally in your codebase.\n */\nexport const useAuditLedger = createAuditLedgerStore;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/dev-true.ts","../src/index.ts"],"names":["dev_true_default","createDerivedStore","system","derivationId","readable","set","createDerivedsStore","derivationIds","getValues","result","id","createFactStore","factKey","createInspectStore","update","unsubFacts","unsubSettled","useFact","keyOrKeys","assertSystem","_useFactMulti","factKeys","key","useDerived","idOrIds","useSelector","selector","equalityFn","defaultEquality","deriveKeySet","runWithTracking","runTrackedSelector","initial","currentSelected","trackedFactKeys","trackedDeriveKeys","unsubs","resubscribe","unsub","onUpdate","depsChanged","useDispatch","event","useEvents","useWatch","callback","unsubscribe","onDestroy","useInspect","options","computeInspectState","throttled","cleanup","createThrottle","useRequirementStatus","statusPlugin","typeOrTypes","type","useExplain","requirementId","useConstraintStatus","constraintId","_getConstraintValue","inspection","c","useOptimisticUpdate","requirementType","isPendingValue","errorValue","snapshot","statusUnsub","pendingSubscribers","errorSubscribers","isPending","fn","error","setPending","v","setError","rollback","mutate","updateFn","status","useHistory","buildHistoryState","useDirective","moduleDef","config","allPlugins","sp","createRequirementStatusPlugin","createSystem","err","derivedKeys","subscribeAll","factsStore","pickFacts","allDerivationKeys","getDerived","derivedStore","events","createTypedHooks","useNamespacedSelector","keys","_createQuerySystem","getCreateQuerySystem","useQuerySystem","HYDRATION_KEY","setHydrationSnapshot","setContext","useHydratedSystem","getContext","mergedFacts","mergeHydrationFacts","createAuditLedgerStore","ledger","filter","opts","requestedPollMs","pollMs","entryCount","useAuditLedger"],"mappings":"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","file":"index.cjs","sourcesContent":["export default typeof process !== \"undefined\" &&\n process.env?.NODE_ENV !== \"production\";\n","/**\n * Svelte Adapter - Consolidated Svelte stores for Directive\n *\n * 15 active exports: useFact, useDerived, useDispatch, useSelector,\n * useWatch, useInspect, useRequirementStatus, useEvents, useExplain,\n * useConstraintStatus, useOptimisticUpdate, useDirective, useHistory,\n * createTypedHooks, shallowEqual\n *\n * Store factories: createDerivedStore, createDerivedsStore, createFactStore, createInspectStore\n */\n\nimport type {\n ErrorBoundaryConfig,\n HistoryState,\n InferDerivations,\n InferEvents,\n InferFacts,\n InferSelectorState,\n ModuleDef,\n ModuleSchema,\n ModulesMap,\n NamespacedSystem,\n Plugin,\n SingleModuleSystem,\n SystemInspection,\n SystemSnapshot,\n TraceOption,\n} from \"@directive-run/core\";\nimport {\n createRequirementStatusPlugin,\n createSystem,\n} from \"@directive-run/core\";\nimport type { RequirementTypeStatus } from \"@directive-run/core\";\nimport {\n type ConstraintInfo,\n type InspectState,\n assertSystem,\n buildHistoryState,\n computeInspectState,\n createThrottle,\n defaultEquality,\n depsChanged,\n mergeHydrationFacts,\n pickFacts,\n runTrackedSelector,\n shallowEqual,\n} from \"@directive-run/core/adapter-utils\";\nimport { getContext, onDestroy, setContext } from \"svelte\";\nimport { type Readable, readable } from \"svelte/store\";\nimport isDevelopment from \"#is-development\";\n\n// Re-export for convenience\nexport type { RequirementTypeStatus, InspectState, ConstraintInfo };\nexport { shallowEqual };\n\n/** Type for the requirement status plugin return value */\nexport type StatusPlugin = ReturnType<typeof createRequirementStatusPlugin>;\n\n// ============================================================================\n// Store Factories\n// ============================================================================\n\n/**\n * Create a Svelte store for a derived value.\n */\nexport function createDerivedStore<T>(\n system: SingleModuleSystem<any>,\n derivationId: string,\n): Readable<T> {\n if (isDevelopment) {\n const initialValue = system.read(derivationId);\n if (initialValue === undefined) {\n console.warn(\n `[Directive] createDerivedStore(\"${derivationId}\") returned undefined. ` +\n `Check that \"${derivationId}\" is defined in your module's derive property.`,\n );\n }\n }\n\n return readable<T>(system.read(derivationId) as T, (set) => {\n const unsubscribe = system.subscribe([derivationId], () => {\n set(system.read(derivationId) as T);\n });\n return unsubscribe;\n });\n}\n\n/**\n * Create a Svelte store for multiple derived values.\n */\nexport function createDerivedsStore<T extends Record<string, unknown>>(\n system: SingleModuleSystem<any>,\n derivationIds: string[],\n): Readable<T> {\n const getValues = (): T => {\n const result: Record<string, unknown> = {};\n for (const id of derivationIds) {\n result[id] = system.read(id);\n }\n return result as T;\n };\n\n return readable<T>(getValues(), (set) => {\n const unsubscribe = system.subscribe(derivationIds, () => {\n set(getValues());\n });\n return unsubscribe;\n });\n}\n\n/**\n * Create a Svelte store for a single fact value.\n */\nexport function createFactStore<T>(\n system: SingleModuleSystem<any>,\n factKey: string,\n): Readable<T | undefined> {\n if (isDevelopment) {\n if (!system.facts.$store.has(factKey)) {\n console.warn(\n `[Directive] createFactStore(\"${factKey}\") — fact not found in store. ` +\n `Check that \"${factKey}\" is defined in your module's schema.`,\n );\n }\n }\n\n return readable<T | undefined>(\n system.facts.$store.get(factKey) as T | undefined,\n (set) => {\n const unsubscribe = system.facts.$store.subscribe([factKey], () => {\n set(system.facts.$store.get(factKey) as T | undefined);\n });\n return unsubscribe;\n },\n );\n}\n\n/**\n * Create a Svelte store for system inspection data.\n * NOTE: This updates on every fact change. Use sparingly in production.\n */\nexport function createInspectStore(\n system: SingleModuleSystem<any>,\n): Readable<SystemInspection> {\n return readable<SystemInspection>(system.inspect(), (set) => {\n const update = () => set(system.inspect());\n const unsubFacts = system.facts.$store.subscribeAll(update);\n const unsubSettled = system.onSettledChange(update);\n return () => {\n unsubFacts();\n unsubSettled();\n };\n });\n}\n\n// ============================================================================\n// useFact — single key or multi key\n// ============================================================================\n\n/** Single key overload */\nexport function useFact<\n S extends ModuleSchema,\n K extends keyof InferFacts<S> & string,\n>(\n system: SingleModuleSystem<S>,\n factKey: K,\n): Readable<InferFacts<S>[K] | undefined>;\n/** Multi-key overload */\nexport function useFact<\n S extends ModuleSchema,\n K extends keyof InferFacts<S> & string,\n>(\n system: SingleModuleSystem<S>,\n factKeys: K[],\n): Readable<Pick<InferFacts<S>, K>>;\n/** Implementation */\nexport function useFact(\n system: SingleModuleSystem<any>,\n keyOrKeys: string | string[],\n): Readable<unknown> {\n assertSystem(\"useFact\", system);\n if (isDevelopment && typeof keyOrKeys === \"function\") {\n console.error(\n \"[Directive] useFact() received a function. Did you mean useSelector()? \" +\n \"useFact() takes a string key or array of keys, not a selector function.\",\n );\n }\n\n // Multi-key path: useFact(system, [keys])\n if (Array.isArray(keyOrKeys)) {\n return _useFactMulti(system, keyOrKeys);\n }\n\n // Single key path: useFact(system, key)\n return createFactStore(system, keyOrKeys);\n}\n\nfunction _useFactMulti(\n system: SingleModuleSystem<any>,\n factKeys: string[],\n): Readable<Record<string, unknown>> {\n const getValues = (): Record<string, unknown> => {\n const result: Record<string, unknown> = {};\n for (const key of factKeys) {\n result[key] = system.facts.$store.get(key);\n }\n return result;\n };\n\n return readable(getValues(), (set) => {\n const unsubscribe = system.facts.$store.subscribe(factKeys, () => {\n set(getValues());\n });\n return unsubscribe;\n });\n}\n\n// ============================================================================\n// useDerived — single key or multi key\n// ============================================================================\n\n/** Single key overload */\nexport function useDerived<\n S extends ModuleSchema,\n K extends keyof InferDerivations<S> & string,\n>(\n system: SingleModuleSystem<S>,\n derivationId: K,\n): Readable<InferDerivations<S>[K]>;\n/** Multi-key overload */\nexport function useDerived<\n S extends ModuleSchema,\n K extends keyof InferDerivations<S> & string,\n>(\n system: SingleModuleSystem<S>,\n derivationIds: K[],\n): Readable<Pick<InferDerivations<S>, K>>;\n/** Implementation */\nexport function useDerived(\n system: SingleModuleSystem<any>,\n idOrIds: string | string[],\n): Readable<unknown> {\n assertSystem(\"useDerived\", system);\n if (isDevelopment && typeof idOrIds === \"function\") {\n console.error(\n \"[Directive] useDerived() received a function. Did you mean useSelector()? \" +\n \"useDerived() takes a string key or array of keys, not a selector function.\",\n );\n }\n\n // Multi-key path\n if (Array.isArray(idOrIds)) {\n return createDerivedsStore(system, idOrIds);\n }\n\n // Single key path\n return createDerivedStore(system, idOrIds);\n}\n\n// ============================================================================\n// useSelector — auto-tracking selector over facts and derivations\n// ============================================================================\n\n/**\n * Auto-tracking selector over facts and derivations.\n * Uses `withTracking()` to detect which facts the selector accesses,\n * then subscribes only to those keys.\n */\nexport function useSelector<S extends ModuleSchema, R>(\n system: SingleModuleSystem<S>,\n selector: (state: InferSelectorState<S>) => R,\n equalityFn?: (a: R, b: R) => boolean,\n): Readable<R>;\nexport function useSelector(\n system: SingleModuleSystem<any>,\n selector: (state: any) => unknown,\n equalityFn: (a: unknown, b: unknown) => boolean = defaultEquality,\n): Readable<unknown> {\n assertSystem(\"useSelector\", system);\n const deriveKeySet = new Set(Object.keys(system.derive ?? {}));\n\n // Build a tracking-aware state proxy that exposes both facts and derivations\n const runWithTracking = () =>\n runTrackedSelector(system, deriveKeySet, selector);\n\n const initial = runWithTracking();\n\n return readable(initial.value, (set) => {\n let currentSelected = initial.value;\n let trackedFactKeys = initial.factKeys;\n let trackedDeriveKeys = initial.deriveKeys;\n const unsubs: Array<() => void> = [];\n\n const resubscribe = () => {\n for (const unsub of unsubs) unsub();\n unsubs.length = 0;\n\n const onUpdate = () => {\n const result = runWithTracking();\n if (!equalityFn(currentSelected, result.value)) {\n currentSelected = result.value;\n set(result.value);\n }\n // Re-track: check if deps changed\n if (\n depsChanged(\n trackedFactKeys,\n result.factKeys,\n trackedDeriveKeys,\n result.deriveKeys,\n )\n ) {\n trackedFactKeys = result.factKeys;\n trackedDeriveKeys = result.deriveKeys;\n resubscribe();\n }\n };\n\n if (trackedFactKeys.length > 0) {\n unsubs.push(system.facts.$store.subscribe(trackedFactKeys, onUpdate));\n } else if (trackedDeriveKeys.length === 0) {\n unsubs.push(system.facts.$store.subscribeAll(onUpdate));\n }\n if (trackedDeriveKeys.length > 0) {\n unsubs.push(system.subscribe(trackedDeriveKeys, onUpdate));\n }\n };\n\n resubscribe();\n\n return () => {\n for (const unsub of unsubs) unsub();\n };\n });\n}\n\n// ============================================================================\n// useDispatch\n// ============================================================================\n\nexport function useDispatch<S extends ModuleSchema>(\n system: SingleModuleSystem<S>,\n): (event: InferEvents<S>) => void {\n assertSystem(\"useDispatch\", system);\n return (event: InferEvents<S>) => {\n system.dispatch(event);\n };\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 system: SingleModuleSystem<S>,\n): SingleModuleSystem<S>[\"events\"] {\n assertSystem(\"useEvents\", system);\n return 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<\n S extends ModuleSchema,\n K extends keyof InferDerivations<S> & string,\n>(\n system: SingleModuleSystem<S>,\n key: K,\n callback: (\n newValue: InferDerivations<S>[K],\n previousValue: InferDerivations<S>[K] | undefined,\n ) => void,\n): void;\n/** Watch a fact key with auto-detection. */\nexport function useWatch<\n S extends ModuleSchema,\n K extends keyof InferFacts<S> & string,\n>(\n system: SingleModuleSystem<S>,\n key: K,\n callback: (\n newValue: InferFacts<S>[K] | undefined,\n previousValue: InferFacts<S>[K] | undefined,\n ) => void,\n): void;\n/** Implementation */\nexport function useWatch(\n system: SingleModuleSystem<any>,\n key: string,\n callback: (newValue: unknown, prevValue: unknown) => void,\n): void {\n assertSystem(\"useWatch\", system);\n\n const unsubscribe = system.watch(key, callback);\n onDestroy(unsubscribe);\n}\n\n// ============================================================================\n// useInspect — consolidated inspection hook\n// ============================================================================\n\n/** Options for useInspect */\nexport interface UseInspectOptions {\n throttleMs?: number;\n}\n\n/**\n * Consolidated system inspection hook.\n * Returns Readable<InspectState> with optional throttling.\n */\nexport function useInspect(\n system: SingleModuleSystem<any>,\n options?: UseInspectOptions,\n): Readable<InspectState> {\n assertSystem(\"useInspect\", system);\n if (options?.throttleMs && options.throttleMs > 0) {\n return readable<InspectState>(computeInspectState(system), (set) => {\n const { throttled, cleanup } = createThrottle(() => {\n set(computeInspectState(system));\n }, options.throttleMs!);\n\n const unsubFacts = system.facts.$store.subscribeAll(throttled);\n const unsubSettled = system.onSettledChange(throttled);\n\n return () => {\n cleanup();\n unsubFacts();\n unsubSettled();\n };\n });\n }\n\n return readable<InspectState>(computeInspectState(system), (set) => {\n const update = () => set(computeInspectState(system));\n const unsubFacts = system.facts.$store.subscribeAll(update);\n const unsubSettled = system.onSettledChange(update);\n\n return () => {\n unsubFacts();\n unsubSettled();\n };\n });\n}\n\n// ============================================================================\n// useRequirementStatus — single or multi\n// ============================================================================\n\n/** Single type overload */\nexport function useRequirementStatus(\n statusPlugin: StatusPlugin,\n type: string,\n): Readable<RequirementTypeStatus>;\n/** Multi-type overload */\nexport function useRequirementStatus(\n statusPlugin: StatusPlugin,\n types: string[],\n): Readable<Record<string, RequirementTypeStatus>>;\n/** Implementation */\nexport function useRequirementStatus(\n statusPlugin: StatusPlugin,\n typeOrTypes: string | string[],\n):\n | Readable<RequirementTypeStatus>\n | Readable<Record<string, RequirementTypeStatus>> {\n if (Array.isArray(typeOrTypes)) {\n const getValues = (): Record<string, RequirementTypeStatus> => {\n const result: Record<string, RequirementTypeStatus> = {};\n for (const type of typeOrTypes) {\n result[type] = statusPlugin.getStatus(type);\n }\n return result;\n };\n\n return readable(getValues(), (set) => {\n const unsubscribe = statusPlugin.subscribe(() => {\n set(getValues());\n });\n return unsubscribe;\n });\n }\n\n return readable<RequirementTypeStatus>(\n statusPlugin.getStatus(typeOrTypes),\n (set) => {\n const unsubscribe = statusPlugin.subscribe(() => {\n set(statusPlugin.getStatus(typeOrTypes));\n });\n return unsubscribe;\n },\n );\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 system: SingleModuleSystem<any>,\n requirementId: string,\n): Readable<string | null> {\n assertSystem(\"useExplain\", system);\n return readable<string | null>(system.explain(requirementId), (set) => {\n const update = () => set(system.explain(requirementId));\n const unsubFacts = system.facts.$store.subscribeAll(update);\n const unsubSettled = system.onSettledChange(update);\n\n return () => {\n unsubFacts();\n unsubSettled();\n };\n });\n}\n\n// ============================================================================\n// useConstraintStatus — reactive constraint inspection\n// ============================================================================\n\n/** Get all constraints */\nexport function useConstraintStatus(\n system: SingleModuleSystem<any>,\n): Readable<ConstraintInfo[]>;\n/** Get a single constraint by ID */\nexport function useConstraintStatus(\n system: SingleModuleSystem<any>,\n constraintId: string,\n): Readable<ConstraintInfo | null>;\n/** Implementation */\nexport function useConstraintStatus(\n system: SingleModuleSystem<any>,\n constraintId?: string,\n): Readable<ConstraintInfo[] | ConstraintInfo | null> {\n assertSystem(\"useConstraintStatus\", system);\n return readable<ConstraintInfo[] | ConstraintInfo | null>(\n _getConstraintValue(system, constraintId),\n (set) => {\n const update = () => set(_getConstraintValue(system, constraintId));\n const unsubFacts = system.facts.$store.subscribeAll(update);\n const unsubSettled = system.onSettledChange(update);\n\n return () => {\n unsubFacts();\n unsubSettled();\n };\n },\n );\n}\n\nfunction _getConstraintValue(\n system: SingleModuleSystem<any>,\n constraintId?: string,\n): ConstraintInfo[] | ConstraintInfo | null {\n const inspection = system.inspect();\n if (!constraintId) return inspection.constraints;\n return (\n inspection.constraints.find((c: ConstraintInfo) => c.id === constraintId) ??\n null\n );\n}\n\n// ============================================================================\n// useOptimisticUpdate — batch with rollback on failure\n// ============================================================================\n\nexport interface OptimisticUpdateResult {\n mutate: (updateFn: () => void) => void;\n isPending: Readable<boolean>;\n error: Readable<Error | null>;\n rollback: () => 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 system: SingleModuleSystem<any>,\n statusPlugin?: StatusPlugin,\n requirementType?: string,\n): OptimisticUpdateResult {\n assertSystem(\"useOptimisticUpdate\", system);\n let isPendingValue = false;\n let errorValue: Error | null = null;\n let snapshot: SystemSnapshot | null = null;\n let statusUnsub: (() => void) | null = null;\n\n // We track subscribers manually since we need imperative push\n const pendingSubscribers = new Set<(v: boolean) => void>();\n const errorSubscribers = new Set<(v: Error | null) => void>();\n\n const isPending: Readable<boolean> = {\n subscribe(fn) {\n fn(isPendingValue);\n pendingSubscribers.add(fn);\n return () => pendingSubscribers.delete(fn);\n },\n };\n\n const error: Readable<Error | null> = {\n subscribe(fn) {\n fn(errorValue);\n errorSubscribers.add(fn);\n return () => errorSubscribers.delete(fn);\n },\n };\n\n const setPending = (v: boolean) => {\n isPendingValue = v;\n for (const fn of pendingSubscribers) fn(v);\n };\n\n const setError = (v: Error | null) => {\n errorValue = v;\n for (const fn of errorSubscribers) fn(v);\n };\n\n const rollback = () => {\n if (snapshot) {\n system.restore(snapshot);\n snapshot = null;\n }\n setPending(false);\n setError(null);\n statusUnsub?.();\n statusUnsub = null;\n };\n\n const mutate = (updateFn: () => void) => {\n snapshot = system.getSnapshot();\n setPending(true);\n setError(null);\n system.batch(updateFn);\n\n if (statusPlugin && requirementType) {\n statusUnsub?.();\n statusUnsub = statusPlugin.subscribe(() => {\n const status = statusPlugin.getStatus(requirementType);\n if (!status.isLoading && !status.hasError) {\n snapshot = null;\n setPending(false);\n statusUnsub?.();\n statusUnsub = null;\n } else if (status.hasError) {\n setError(status.lastError);\n rollback();\n }\n });\n }\n };\n\n onDestroy(() => {\n statusUnsub?.();\n });\n\n return { mutate, isPending, error, rollback };\n}\n\n// ============================================================================\n// useHistory — reactive history store\n// ============================================================================\n\n/**\n * Reactive history Svelte store. Returns a Readable that updates\n * when snapshots are taken or navigation occurs.\n *\n * @example\n * ```svelte\n * const history = useHistory(system);\n * <button disabled={!$history?.canGoBack} on:click={() => $history?.goBack()}>Undo</button>\n * ```\n */\nexport function useHistory(\n system: SingleModuleSystem<any>,\n): Readable<HistoryState | null> {\n assertSystem(\"useHistory\", system);\n return readable<HistoryState | null>(buildHistoryState(system), (set) => {\n return system.onHistoryChange(() => set(buildHistoryState(system)));\n });\n}\n\n// ============================================================================\n// Scoped System\n// ============================================================================\n\n/** Configuration for useDirective */\nexport interface UseDirectiveConfig {\n plugins?: Plugin<any>[];\n trace?: TraceOption;\n errorBoundary?: ErrorBoundaryConfig;\n tickMs?: number;\n zeroConfig?: boolean;\n initialFacts?: Record<string, any>;\n status?: boolean;\n /** Fact keys to subscribe to (omit for all) */\n facts?: string[];\n /** Derivation keys to subscribe to (omit for all) */\n derived?: string[];\n}\n\n/**\n * Create a scoped Directive system with automatic lifecycle management.\n * When no `facts` or `derived` keys are specified, subscribes to ALL\n * facts and derivations and returns Svelte readable stores.\n *\n * @example\n * ```svelte\n * // Subscribe to everything\n * const { facts, derived, events, dispatch } = useDirective(counterModule);\n *\n * // Selective keys\n * const { facts, derived } = useDirective(counterModule, { facts: [\"count\"], derived: [\"doubled\"] });\n * ```\n */\nexport function useDirective<M extends ModuleSchema>(\n moduleDef: ModuleDef<M>,\n config?: UseDirectiveConfig,\n): {\n system: SingleModuleSystem<M>;\n facts: Readable<InferFacts<M>>;\n derived: Readable<InferDerivations<M>>;\n events: SingleModuleSystem<M>[\"events\"];\n dispatch: (event: InferEvents<M>) => void;\n statusPlugin: StatusPlugin | undefined;\n} {\n const allPlugins = [...(config?.plugins ?? [])];\n let statusPlugin: StatusPlugin | undefined;\n\n if (config?.status) {\n const sp = createRequirementStatusPlugin();\n statusPlugin = sp;\n allPlugins.push(sp.plugin as Plugin<any>);\n }\n\n const system = createSystem({\n module: moduleDef,\n plugins: allPlugins.length > 0 ? allPlugins : undefined,\n trace: config?.trace,\n errorBoundary: config?.errorBoundary,\n tickMs: config?.tickMs,\n zeroConfig: config?.zeroConfig,\n initialFacts: config?.initialFacts,\n } as any) as unknown as SingleModuleSystem<M>;\n\n // SSR guard: initialize facts for SSR rendering, start reconciliation only in the browser\n if (typeof window !== \"undefined\") {\n system.start();\n } else {\n system.initialize();\n }\n\n onDestroy(() => {\n // RFC 0009 follow-up: destroyAsync so source\n // unsubscribes complete; fire-and-forget with swallow-catch\n // (the framework's onDestroy is sync).\n system.destroyAsync().catch((err: unknown) => {\n if (isDevelopment)\n console.warn(\"[Directive] destroyAsync rejected during unmount:\", err);\n });\n });\n\n const factKeys = config?.facts;\n const derivedKeys = config?.derived;\n const subscribeAll = !factKeys && !derivedKeys;\n\n // Subscribe to facts\n const factsStore: Readable<InferFacts<M>> = subscribeAll\n ? readable(system.facts.$store.toObject() as InferFacts<M>, (set) => {\n return system.facts.$store.subscribeAll(() => {\n set(system.facts.$store.toObject() as InferFacts<M>);\n });\n })\n : readable(pickFacts(system, factKeys ?? []) as InferFacts<M>, (set) => {\n if (!factKeys || factKeys.length === 0) return () => {};\n return system.facts.$store.subscribe(factKeys, () => {\n set(pickFacts(system, factKeys) as InferFacts<M>);\n });\n });\n\n // Subscribe to derivations\n const allDerivationKeys = subscribeAll\n ? Object.keys(system.derive ?? {})\n : (derivedKeys ?? []);\n const getDerived = (): InferDerivations<M> => {\n const result: Record<string, unknown> = {};\n for (const key of allDerivationKeys) {\n result[key] = system.read(key);\n }\n return result as InferDerivations<M>;\n };\n const derivedStore: Readable<InferDerivations<M>> =\n allDerivationKeys.length > 0\n ? readable(getDerived(), (set) => {\n return system.subscribe(allDerivationKeys, () => {\n set(getDerived());\n });\n })\n : readable(getDerived(), () => () => {});\n\n const events = system.events;\n const dispatch = (event: InferEvents<M>) => system.dispatch(event);\n\n return {\n system,\n facts: factsStore,\n derived: derivedStore,\n events,\n dispatch,\n statusPlugin,\n };\n}\n\n// ============================================================================\n// Typed Hooks Factory\n// ============================================================================\n\nexport function createTypedHooks<M extends ModuleSchema>(): {\n useFact: <K extends keyof InferFacts<M> & string>(\n system: SingleModuleSystem<M>,\n factKey: K,\n ) => Readable<InferFacts<M>[K] | undefined>;\n useDerived: <K extends keyof InferDerivations<M> & string>(\n system: SingleModuleSystem<M>,\n derivationId: K,\n ) => Readable<InferDerivations<M>[K]>;\n useDispatch: (\n system: SingleModuleSystem<M>,\n ) => (event: InferEvents<M>) => void;\n useEvents: (system: SingleModuleSystem<M>) => SingleModuleSystem<M>[\"events\"];\n useWatch: <K extends string>(\n system: SingleModuleSystem<M>,\n key: K,\n callback: (newValue: unknown, previousValue: unknown) => void,\n ) => void;\n} {\n return {\n useFact: <K extends keyof InferFacts<M> & string>(\n system: SingleModuleSystem<M>,\n factKey: K,\n ) =>\n useFact(system as SingleModuleSystem<any>, factKey) as Readable<\n InferFacts<M>[K] | undefined\n >,\n useDerived: <K extends keyof InferDerivations<M> & string>(\n system: SingleModuleSystem<M>,\n derivationId: K,\n ) =>\n useDerived(system as SingleModuleSystem<any>, derivationId) as Readable<\n InferDerivations<M>[K]\n >,\n useDispatch: (system: SingleModuleSystem<M>) => {\n return (event: InferEvents<M>) => {\n system.dispatch(event);\n };\n },\n useEvents: (system: SingleModuleSystem<M>) => useEvents<M>(system),\n useWatch: <K extends string>(\n system: SingleModuleSystem<M>,\n key: K,\n callback: (newValue: unknown, previousValue: unknown) => void,\n ) => useWatch(system as SingleModuleSystem<any>, key, callback),\n };\n}\n\n// ============================================================================\n// useNamespacedSelector — select from a NamespacedSystem\n// ============================================================================\n\n/**\n * Svelte readable store 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 * ```svelte\n * const token$ = useNamespacedSelector(system, [\"auth.token\"], (s) => s.facts.auth.token);\n * ```\n */\nexport function useNamespacedSelector<Modules extends ModulesMap, R>(\n system: NamespacedSystem<Modules>,\n keys: string[],\n selector: (system: NamespacedSystem<Modules>) => R,\n): Readable<R> {\n return readable<R>(selector(system), (set) => {\n const unsubscribe = system.subscribe(keys, () => {\n set(selector(system));\n });\n\n return unsubscribe;\n });\n}\n\n// ============================================================================\n// useQuerySystem — Stable query system with lifecycle management\n// ============================================================================\n\nlet _createQuerySystem: ((config: Record<string, unknown>) => any) | null =\n null;\n\nfunction getCreateQuerySystem() {\n if (!_createQuerySystem) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const mod = require(\"@directive-run/query\");\n _createQuerySystem = mod.createQuerySystem;\n } catch {\n throw new Error(\n \"[Directive] @directive-run/query is not installed. \" +\n \"Install it with: pnpm add @directive-run/query\",\n );\n }\n }\n\n return _createQuerySystem!;\n}\n\n/**\n * Svelte composable to create and manage a query system with proper lifecycle.\n *\n * Accepts a config object or a factory function that creates the system.\n * Handles cleanup on component destroy.\n *\n * @example\n * ```svelte\n * <script>\n * import { useQuerySystem, useDerived } from \"@directive-run/svelte\";\n *\n * const app = useQuerySystem({\n * facts: { userId: \"\" },\n * queries: { user: { key: ..., fetcher: ... } },\n * });\n *\n * const user = useDerived(app, \"user\");\n * </script>\n * ```\n */\nexport function useQuerySystem<\n T extends {\n start: () => void;\n destroy: () => void;\n isRunning?: boolean;\n [key: string]: any;\n },\n>(config: Record<string, unknown>): T {\n const createQuerySystem = getCreateQuerySystem();\n const system = createQuerySystem(config) as T;\n\n if (typeof window !== \"undefined\" && !system.isRunning) {\n system.start();\n }\n\n onDestroy(() => {\n // RFC 0009 follow-up: destroyAsync so source\n // unsubscribes complete; fire-and-forget with swallow-catch\n // (the framework's onDestroy is sync).\n system.destroyAsync().catch((err: unknown) => {\n if (isDevelopment)\n console.warn(\"[Directive] destroyAsync rejected during unmount:\", err);\n });\n });\n\n return system;\n}\n\n// ============================================================================\n// SSR Hydration\n// ============================================================================\n\n/** @internal Context key for SSR hydration snapshot */\nconst HYDRATION_KEY = Symbol(\"directive-hydration\");\n\n/**\n * Provide a DistributableSnapshot for child components to hydrate from.\n * Call this in your layout or parent component (e.g., SvelteKit +layout.svelte).\n *\n * @example\n * ```svelte\n * <script>\n * import { setHydrationSnapshot } from \"@directive-run/svelte\";\n * export let data; // from SvelteKit load()\n * setHydrationSnapshot(data.snapshot);\n * </script>\n * <slot />\n * ```\n */\nexport function setHydrationSnapshot(snapshot: Record<string, unknown>): void {\n setContext(HYDRATION_KEY, snapshot);\n}\n\n/**\n * Create a system hydrated from a server snapshot.\n * Must be called in a component that is a descendant of one that called `setHydrationSnapshot`.\n *\n * @example\n * ```svelte\n * <script>\n * import { useHydratedSystem, useDerived } from \"@directive-run/svelte\";\n * const system = useHydratedSystem(myModule);\n * const count = useDerived(system, \"count\");\n * </script>\n * ```\n */\nexport function useHydratedSystem<S extends ModuleSchema>(\n moduleDef: ModuleDef<S>,\n config?: UseDirectiveConfig,\n): SingleModuleSystem<S> {\n const snapshot = getContext<Record<string, unknown> | undefined>(\n HYDRATION_KEY,\n );\n const mergedFacts = mergeHydrationFacts(\n snapshot,\n config?.initialFacts as Record<string, unknown>,\n );\n\n return useDirective(moduleDef, { ...config, initialFacts: mergedFacts })\n .system;\n}\n\n// ============================================================================\n// createAuditLedgerStore — live ledger entries with filter (R4.I parity)\n// ============================================================================\n\nimport type { AuditEntry, AuditLedger, QueryFilter } from \"@directive-run/core\";\n\n/**\n * Create a Svelte readable store that holds the latest audit-ledger\n * entries matching `filter`. Re-emits on each poll tick (default\n * 250 ms — override with `pollMs`).\n *\n * **Polling floor:** `pollMs` is clamped to a minimum of 50 ms to prevent\n * accidental DoS from typos like `pollMs: 5`. Values below the floor are\n * silently clamped in production; dev mode logs a warning.\n *\n * **First-paint freshness:** the store re-queries the ledger inside the\n * `readable` start function (before the first interval tick lands) so\n * the first subscriber sees fresh entries even if the ledger has been\n * appended-to between store construction and first subscription.\n *\n * @example\n * ```svelte\n * <script>\n * import { createAuditLedgerStore } from \"@directive-run/svelte\";\n * const entries = createAuditLedgerStore(ledger, { kind: \"constraint.evaluate\", limit: 20 });\n * </script>\n *\n * <ul>\n * {#each $entries as e (e.seq)}\n * <li>{e.kind} @ {new Date(e.ts).toISOString()}</li>\n * {/each}\n * </ul>\n * ```\n */\nexport function createAuditLedgerStore(\n ledger: AuditLedger,\n filter: QueryFilter = {},\n opts: { pollMs?: number } = {},\n): Readable<readonly AuditEntry[]> {\n const requestedPollMs = opts.pollMs ?? 250;\n const pollMs = Math.max(50, requestedPollMs);\n\n if (isDevelopment) {\n if (opts.pollMs !== undefined && opts.pollMs < 50) {\n console.warn(\n `[Directive] createAuditLedgerStore() pollMs=${opts.pollMs} is below the 50 ms floor; clamped to 50 ms.`,\n );\n }\n if (pollMs < 100) {\n const entryCount = ledger.toJSON().entries.length;\n if (entryCount > 1000) {\n console.warn(\n `[Directive] createAuditLedgerStore() polling every ${pollMs} ms against a ${entryCount}-entry ledger — that's a lot of CPU per tick. Consider raising pollMs or tightening the filter.`,\n );\n }\n }\n }\n\n return readable<readonly AuditEntry[]>(ledger.query(filter), (set) => {\n // Re-query immediately on subscription so the first paint sees any\n // entries that landed between store construction and the first sub.\n set(ledger.query(filter));\n const id = setInterval(() => set(ledger.query(filter)), pollMs);\n return () => clearInterval(id);\n });\n}\n\n/**\n * Alias for {@link createAuditLedgerStore} that mirrors the\n * cross-framework `useAuditLedger` naming. Functionally identical;\n * use whichever reads more naturally in your codebase.\n */\nexport const useAuditLedger = createAuditLedgerStore;\n"]}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/dev-true.ts","../src/index.ts"],"names":["dev_true_default","createDerivedStore","system","derivationId","readable","set","createDerivedsStore","derivationIds","getValues","result","id","createFactStore","factKey","createInspectStore","update","unsubFacts","unsubSettled","useFact","keyOrKeys","assertSystem","_useFactMulti","factKeys","key","useDerived","idOrIds","useSelector","selector","equalityFn","defaultEquality","deriveKeySet","runWithTracking","runTrackedSelector","initial","currentSelected","trackedFactKeys","trackedDeriveKeys","unsubs","resubscribe","unsub","onUpdate","depsChanged","useDispatch","event","useEvents","useWatch","callback","unsubscribe","onDestroy","useInspect","options","computeInspectState","throttled","cleanup","createThrottle","useRequirementStatus","statusPlugin","typeOrTypes","type","useExplain","requirementId","useConstraintStatus","constraintId","_getConstraintValue","inspection","c","useOptimisticUpdate","requirementType","isPendingValue","errorValue","snapshot","statusUnsub","pendingSubscribers","errorSubscribers","isPending","fn","error","setPending","v","setError","rollback","mutate","updateFn","status","useHistory","buildHistoryState","useDirective","moduleDef","config","allPlugins","sp","createRequirementStatusPlugin","createSystem","err","derivedKeys","subscribeAll","factsStore","pickFacts","allDerivationKeys","getDerived","derivedStore","events","createTypedHooks","useNamespacedSelector","keys","_createQuerySystem","getCreateQuerySystem","useQuerySystem","HYDRATION_KEY","setHydrationSnapshot","setContext","useHydratedSystem","getContext","mergedFacts","mergeHydrationFacts","createAuditLedgerStore","ledger","filter","opts","requestedPollMs","pollMs","entryCount","useAuditLedger"],"mappings":"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","file":"index.js","sourcesContent":["export default typeof process !== \"undefined\" &&\n process.env?.NODE_ENV !== \"production\";\n","/**\n * Svelte Adapter - Consolidated Svelte stores for Directive\n *\n * 15 active exports: useFact, useDerived, useDispatch, useSelector,\n * useWatch, useInspect, useRequirementStatus, useEvents, useExplain,\n * useConstraintStatus, useOptimisticUpdate, useDirective, useHistory,\n * createTypedHooks, shallowEqual\n *\n * Store factories: createDerivedStore, createDerivedsStore, createFactStore, createInspectStore\n */\n\nimport type {\n ErrorBoundaryConfig,\n HistoryState,\n InferDerivations,\n InferEvents,\n InferFacts,\n InferSelectorState,\n ModuleDef,\n ModuleSchema,\n ModulesMap,\n NamespacedSystem,\n Plugin,\n SingleModuleSystem,\n SystemInspection,\n SystemSnapshot,\n TraceOption,\n} from \"@directive-run/core\";\nimport {\n createRequirementStatusPlugin,\n createSystem,\n} from \"@directive-run/core\";\nimport type { RequirementTypeStatus } from \"@directive-run/core\";\nimport {\n type ConstraintInfo,\n type InspectState,\n assertSystem,\n buildHistoryState,\n computeInspectState,\n createThrottle,\n defaultEquality,\n depsChanged,\n mergeHydrationFacts,\n pickFacts,\n runTrackedSelector,\n shallowEqual,\n} from \"@directive-run/core/adapter-utils\";\nimport { getContext, onDestroy, setContext } from \"svelte\";\nimport { type Readable, readable } from \"svelte/store\";\nimport isDevelopment from \"#is-development\";\n\n// Re-export for convenience\nexport type { RequirementTypeStatus, InspectState, ConstraintInfo };\nexport { shallowEqual };\n\n/** Type for the requirement status plugin return value */\nexport type StatusPlugin = ReturnType<typeof createRequirementStatusPlugin>;\n\n// ============================================================================\n// Store Factories\n// ============================================================================\n\n/**\n * Create a Svelte store for a derived value.\n */\nexport function createDerivedStore<T>(\n system: SingleModuleSystem<any>,\n derivationId: string,\n): Readable<T> {\n if (isDevelopment) {\n const initialValue = system.read(derivationId);\n if (initialValue === undefined) {\n console.warn(\n `[Directive] createDerivedStore(\"${derivationId}\") returned undefined. ` +\n `Check that \"${derivationId}\" is defined in your module's derive property.`,\n );\n }\n }\n\n return readable<T>(system.read(derivationId) as T, (set) => {\n const unsubscribe = system.subscribe([derivationId], () => {\n set(system.read(derivationId) as T);\n });\n return unsubscribe;\n });\n}\n\n/**\n * Create a Svelte store for multiple derived values.\n */\nexport function createDerivedsStore<T extends Record<string, unknown>>(\n system: SingleModuleSystem<any>,\n derivationIds: string[],\n): Readable<T> {\n const getValues = (): T => {\n const result: Record<string, unknown> = {};\n for (const id of derivationIds) {\n result[id] = system.read(id);\n }\n return result as T;\n };\n\n return readable<T>(getValues(), (set) => {\n const unsubscribe = system.subscribe(derivationIds, () => {\n set(getValues());\n });\n return unsubscribe;\n });\n}\n\n/**\n * Create a Svelte store for a single fact value.\n */\nexport function createFactStore<T>(\n system: SingleModuleSystem<any>,\n factKey: string,\n): Readable<T | undefined> {\n if (isDevelopment) {\n if (!system.facts.$store.has(factKey)) {\n console.warn(\n `[Directive] createFactStore(\"${factKey}\") — fact not found in store. ` +\n `Check that \"${factKey}\" is defined in your module's schema.`,\n );\n }\n }\n\n return readable<T | undefined>(\n system.facts.$store.get(factKey) as T | undefined,\n (set) => {\n const unsubscribe = system.facts.$store.subscribe([factKey], () => {\n set(system.facts.$store.get(factKey) as T | undefined);\n });\n return unsubscribe;\n },\n );\n}\n\n/**\n * Create a Svelte store for system inspection data.\n * NOTE: This updates on every fact change. Use sparingly in production.\n */\nexport function createInspectStore(\n system: SingleModuleSystem<any>,\n): Readable<SystemInspection> {\n return readable<SystemInspection>(system.inspect(), (set) => {\n const update = () => set(system.inspect());\n const unsubFacts = system.facts.$store.subscribeAll(update);\n const unsubSettled = system.onSettledChange(update);\n return () => {\n unsubFacts();\n unsubSettled();\n };\n });\n}\n\n// ============================================================================\n// useFact — single key or multi key\n// ============================================================================\n\n/** Single key overload */\nexport function useFact<\n S extends ModuleSchema,\n K extends keyof InferFacts<S> & string,\n>(\n system: SingleModuleSystem<S>,\n factKey: K,\n): Readable<InferFacts<S>[K] | undefined>;\n/** Multi-key overload */\nexport function useFact<\n S extends ModuleSchema,\n K extends keyof InferFacts<S> & string,\n>(\n system: SingleModuleSystem<S>,\n factKeys: K[],\n): Readable<Pick<InferFacts<S>, K>>;\n/** Implementation */\nexport function useFact(\n system: SingleModuleSystem<any>,\n keyOrKeys: string | string[],\n): Readable<unknown> {\n assertSystem(\"useFact\", system);\n if (isDevelopment && typeof keyOrKeys === \"function\") {\n console.error(\n \"[Directive] useFact() received a function. Did you mean useSelector()? \" +\n \"useFact() takes a string key or array of keys, not a selector function.\",\n );\n }\n\n // Multi-key path: useFact(system, [keys])\n if (Array.isArray(keyOrKeys)) {\n return _useFactMulti(system, keyOrKeys);\n }\n\n // Single key path: useFact(system, key)\n return createFactStore(system, keyOrKeys);\n}\n\nfunction _useFactMulti(\n system: SingleModuleSystem<any>,\n factKeys: string[],\n): Readable<Record<string, unknown>> {\n const getValues = (): Record<string, unknown> => {\n const result: Record<string, unknown> = {};\n for (const key of factKeys) {\n result[key] = system.facts.$store.get(key);\n }\n return result;\n };\n\n return readable(getValues(), (set) => {\n const unsubscribe = system.facts.$store.subscribe(factKeys, () => {\n set(getValues());\n });\n return unsubscribe;\n });\n}\n\n// ============================================================================\n// useDerived — single key or multi key\n// ============================================================================\n\n/** Single key overload */\nexport function useDerived<\n S extends ModuleSchema,\n K extends keyof InferDerivations<S> & string,\n>(\n system: SingleModuleSystem<S>,\n derivationId: K,\n): Readable<InferDerivations<S>[K]>;\n/** Multi-key overload */\nexport function useDerived<\n S extends ModuleSchema,\n K extends keyof InferDerivations<S> & string,\n>(\n system: SingleModuleSystem<S>,\n derivationIds: K[],\n): Readable<Pick<InferDerivations<S>, K>>;\n/** Implementation */\nexport function useDerived(\n system: SingleModuleSystem<any>,\n idOrIds: string | string[],\n): Readable<unknown> {\n assertSystem(\"useDerived\", system);\n if (isDevelopment && typeof idOrIds === \"function\") {\n console.error(\n \"[Directive] useDerived() received a function. Did you mean useSelector()? \" +\n \"useDerived() takes a string key or array of keys, not a selector function.\",\n );\n }\n\n // Multi-key path\n if (Array.isArray(idOrIds)) {\n return createDerivedsStore(system, idOrIds);\n }\n\n // Single key path\n return createDerivedStore(system, idOrIds);\n}\n\n// ============================================================================\n// useSelector — auto-tracking selector over facts and derivations\n// ============================================================================\n\n/**\n * Auto-tracking selector over facts and derivations.\n * Uses `withTracking()` to detect which facts the selector accesses,\n * then subscribes only to those keys.\n */\nexport function useSelector<S extends ModuleSchema, R>(\n system: SingleModuleSystem<S>,\n selector: (state: InferSelectorState<S>) => R,\n equalityFn?: (a: R, b: R) => boolean,\n): Readable<R>;\nexport function useSelector(\n system: SingleModuleSystem<any>,\n selector: (state: any) => unknown,\n equalityFn: (a: unknown, b: unknown) => boolean = defaultEquality,\n): Readable<unknown> {\n assertSystem(\"useSelector\", system);\n const deriveKeySet = new Set(Object.keys(system.derive ?? {}));\n\n // Build a tracking-aware state proxy that exposes both facts and derivations\n const runWithTracking = () =>\n runTrackedSelector(system, deriveKeySet, selector);\n\n const initial = runWithTracking();\n\n return readable(initial.value, (set) => {\n let currentSelected = initial.value;\n let trackedFactKeys = initial.factKeys;\n let trackedDeriveKeys = initial.deriveKeys;\n const unsubs: Array<() => void> = [];\n\n const resubscribe = () => {\n for (const unsub of unsubs) unsub();\n unsubs.length = 0;\n\n const onUpdate = () => {\n const result = runWithTracking();\n if (!equalityFn(currentSelected, result.value)) {\n currentSelected = result.value;\n set(result.value);\n }\n // Re-track: check if deps changed\n if (\n depsChanged(\n trackedFactKeys,\n result.factKeys,\n trackedDeriveKeys,\n result.deriveKeys,\n )\n ) {\n trackedFactKeys = result.factKeys;\n trackedDeriveKeys = result.deriveKeys;\n resubscribe();\n }\n };\n\n if (trackedFactKeys.length > 0) {\n unsubs.push(system.facts.$store.subscribe(trackedFactKeys, onUpdate));\n } else if (trackedDeriveKeys.length === 0) {\n unsubs.push(system.facts.$store.subscribeAll(onUpdate));\n }\n if (trackedDeriveKeys.length > 0) {\n unsubs.push(system.subscribe(trackedDeriveKeys, onUpdate));\n }\n };\n\n resubscribe();\n\n return () => {\n for (const unsub of unsubs) unsub();\n };\n });\n}\n\n// ============================================================================\n// useDispatch\n// ============================================================================\n\nexport function useDispatch<S extends ModuleSchema>(\n system: SingleModuleSystem<S>,\n): (event: InferEvents<S>) => void {\n assertSystem(\"useDispatch\", system);\n return (event: InferEvents<S>) => {\n system.dispatch(event);\n };\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 system: SingleModuleSystem<S>,\n): SingleModuleSystem<S>[\"events\"] {\n assertSystem(\"useEvents\", system);\n return 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<\n S extends ModuleSchema,\n K extends keyof InferDerivations<S> & string,\n>(\n system: SingleModuleSystem<S>,\n key: K,\n callback: (\n newValue: InferDerivations<S>[K],\n previousValue: InferDerivations<S>[K] | undefined,\n ) => void,\n): void;\n/** Watch a fact key with auto-detection. */\nexport function useWatch<\n S extends ModuleSchema,\n K extends keyof InferFacts<S> & string,\n>(\n system: SingleModuleSystem<S>,\n key: K,\n callback: (\n newValue: InferFacts<S>[K] | undefined,\n previousValue: InferFacts<S>[K] | undefined,\n ) => void,\n): void;\n/** Implementation */\nexport function useWatch(\n system: SingleModuleSystem<any>,\n key: string,\n callback: (newValue: unknown, prevValue: unknown) => void,\n): void {\n assertSystem(\"useWatch\", system);\n\n const unsubscribe = system.watch(key, callback);\n onDestroy(unsubscribe);\n}\n\n// ============================================================================\n// useInspect — consolidated inspection hook\n// ============================================================================\n\n/** Options for useInspect */\nexport interface UseInspectOptions {\n throttleMs?: number;\n}\n\n/**\n * Consolidated system inspection hook.\n * Returns Readable<InspectState> with optional throttling.\n */\nexport function useInspect(\n system: SingleModuleSystem<any>,\n options?: UseInspectOptions,\n): Readable<InspectState> {\n assertSystem(\"useInspect\", system);\n if (options?.throttleMs && options.throttleMs > 0) {\n return readable<InspectState>(computeInspectState(system), (set) => {\n const { throttled, cleanup } = createThrottle(() => {\n set(computeInspectState(system));\n }, options.throttleMs!);\n\n const unsubFacts = system.facts.$store.subscribeAll(throttled);\n const unsubSettled = system.onSettledChange(throttled);\n\n return () => {\n cleanup();\n unsubFacts();\n unsubSettled();\n };\n });\n }\n\n return readable<InspectState>(computeInspectState(system), (set) => {\n const update = () => set(computeInspectState(system));\n const unsubFacts = system.facts.$store.subscribeAll(update);\n const unsubSettled = system.onSettledChange(update);\n\n return () => {\n unsubFacts();\n unsubSettled();\n };\n });\n}\n\n// ============================================================================\n// useRequirementStatus — single or multi\n// ============================================================================\n\n/** Single type overload */\nexport function useRequirementStatus(\n statusPlugin: StatusPlugin,\n type: string,\n): Readable<RequirementTypeStatus>;\n/** Multi-type overload */\nexport function useRequirementStatus(\n statusPlugin: StatusPlugin,\n types: string[],\n): Readable<Record<string, RequirementTypeStatus>>;\n/** Implementation */\nexport function useRequirementStatus(\n statusPlugin: StatusPlugin,\n typeOrTypes: string | string[],\n):\n | Readable<RequirementTypeStatus>\n | Readable<Record<string, RequirementTypeStatus>> {\n if (Array.isArray(typeOrTypes)) {\n const getValues = (): Record<string, RequirementTypeStatus> => {\n const result: Record<string, RequirementTypeStatus> = {};\n for (const type of typeOrTypes) {\n result[type] = statusPlugin.getStatus(type);\n }\n return result;\n };\n\n return readable(getValues(), (set) => {\n const unsubscribe = statusPlugin.subscribe(() => {\n set(getValues());\n });\n return unsubscribe;\n });\n }\n\n return readable<RequirementTypeStatus>(\n statusPlugin.getStatus(typeOrTypes),\n (set) => {\n const unsubscribe = statusPlugin.subscribe(() => {\n set(statusPlugin.getStatus(typeOrTypes));\n });\n return unsubscribe;\n },\n );\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 system: SingleModuleSystem<any>,\n requirementId: string,\n): Readable<string | null> {\n assertSystem(\"useExplain\", system);\n return readable<string | null>(system.explain(requirementId), (set) => {\n const update = () => set(system.explain(requirementId));\n const unsubFacts = system.facts.$store.subscribeAll(update);\n const unsubSettled = system.onSettledChange(update);\n\n return () => {\n unsubFacts();\n unsubSettled();\n };\n });\n}\n\n// ============================================================================\n// useConstraintStatus — reactive constraint inspection\n// ============================================================================\n\n/** Get all constraints */\nexport function useConstraintStatus(\n system: SingleModuleSystem<any>,\n): Readable<ConstraintInfo[]>;\n/** Get a single constraint by ID */\nexport function useConstraintStatus(\n system: SingleModuleSystem<any>,\n constraintId: string,\n): Readable<ConstraintInfo | null>;\n/** Implementation */\nexport function useConstraintStatus(\n system: SingleModuleSystem<any>,\n constraintId?: string,\n): Readable<ConstraintInfo[] | ConstraintInfo | null> {\n assertSystem(\"useConstraintStatus\", system);\n return readable<ConstraintInfo[] | ConstraintInfo | null>(\n _getConstraintValue(system, constraintId),\n (set) => {\n const update = () => set(_getConstraintValue(system, constraintId));\n const unsubFacts = system.facts.$store.subscribeAll(update);\n const unsubSettled = system.onSettledChange(update);\n\n return () => {\n unsubFacts();\n unsubSettled();\n };\n },\n );\n}\n\nfunction _getConstraintValue(\n system: SingleModuleSystem<any>,\n constraintId?: string,\n): ConstraintInfo[] | ConstraintInfo | null {\n const inspection = system.inspect();\n if (!constraintId) return inspection.constraints;\n return (\n inspection.constraints.find((c: ConstraintInfo) => c.id === constraintId) ??\n null\n );\n}\n\n// ============================================================================\n// useOptimisticUpdate — batch with rollback on failure\n// ============================================================================\n\nexport interface OptimisticUpdateResult {\n mutate: (updateFn: () => void) => void;\n isPending: Readable<boolean>;\n error: Readable<Error | null>;\n rollback: () => 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 system: SingleModuleSystem<any>,\n statusPlugin?: StatusPlugin,\n requirementType?: string,\n): OptimisticUpdateResult {\n assertSystem(\"useOptimisticUpdate\", system);\n let isPendingValue = false;\n let errorValue: Error | null = null;\n let snapshot: SystemSnapshot | null = null;\n let statusUnsub: (() => void) | null = null;\n\n // We track subscribers manually since we need imperative push\n const pendingSubscribers = new Set<(v: boolean) => void>();\n const errorSubscribers = new Set<(v: Error | null) => void>();\n\n const isPending: Readable<boolean> = {\n subscribe(fn) {\n fn(isPendingValue);\n pendingSubscribers.add(fn);\n return () => pendingSubscribers.delete(fn);\n },\n };\n\n const error: Readable<Error | null> = {\n subscribe(fn) {\n fn(errorValue);\n errorSubscribers.add(fn);\n return () => errorSubscribers.delete(fn);\n },\n };\n\n const setPending = (v: boolean) => {\n isPendingValue = v;\n for (const fn of pendingSubscribers) fn(v);\n };\n\n const setError = (v: Error | null) => {\n errorValue = v;\n for (const fn of errorSubscribers) fn(v);\n };\n\n const rollback = () => {\n if (snapshot) {\n system.restore(snapshot);\n snapshot = null;\n }\n setPending(false);\n setError(null);\n statusUnsub?.();\n statusUnsub = null;\n };\n\n const mutate = (updateFn: () => void) => {\n snapshot = system.getSnapshot();\n setPending(true);\n setError(null);\n system.batch(updateFn);\n\n if (statusPlugin && requirementType) {\n statusUnsub?.();\n statusUnsub = statusPlugin.subscribe(() => {\n const status = statusPlugin.getStatus(requirementType);\n if (!status.isLoading && !status.hasError) {\n snapshot = null;\n setPending(false);\n statusUnsub?.();\n statusUnsub = null;\n } else if (status.hasError) {\n setError(status.lastError);\n rollback();\n }\n });\n }\n };\n\n onDestroy(() => {\n statusUnsub?.();\n });\n\n return { mutate, isPending, error, rollback };\n}\n\n// ============================================================================\n// useHistory — reactive history store\n// ============================================================================\n\n/**\n * Reactive history Svelte store. Returns a Readable that updates\n * when snapshots are taken or navigation occurs.\n *\n * @example\n * ```svelte\n * const history = useHistory(system);\n * <button disabled={!$history?.canGoBack} on:click={() => $history?.goBack()}>Undo</button>\n * ```\n */\nexport function useHistory(\n system: SingleModuleSystem<any>,\n): Readable<HistoryState | null> {\n assertSystem(\"useHistory\", system);\n return readable<HistoryState | null>(buildHistoryState(system), (set) => {\n return system.onHistoryChange(() => set(buildHistoryState(system)));\n });\n}\n\n// ============================================================================\n// Scoped System\n// ============================================================================\n\n/** Configuration for useDirective */\nexport interface UseDirectiveConfig {\n plugins?: Plugin<any>[];\n trace?: TraceOption;\n errorBoundary?: ErrorBoundaryConfig;\n tickMs?: number;\n zeroConfig?: boolean;\n initialFacts?: Record<string, any>;\n status?: boolean;\n /** Fact keys to subscribe to (omit for all) */\n facts?: string[];\n /** Derivation keys to subscribe to (omit for all) */\n derived?: string[];\n}\n\n/**\n * Create a scoped Directive system with automatic lifecycle management.\n * When no `facts` or `derived` keys are specified, subscribes to ALL\n * facts and derivations and returns Svelte readable stores.\n *\n * @example\n * ```svelte\n * // Subscribe to everything\n * const { facts, derived, events, dispatch } = useDirective(counterModule);\n *\n * // Selective keys\n * const { facts, derived } = useDirective(counterModule, { facts: [\"count\"], derived: [\"doubled\"] });\n * ```\n */\nexport function useDirective<M extends ModuleSchema>(\n moduleDef: ModuleDef<M>,\n config?: UseDirectiveConfig,\n): {\n system: SingleModuleSystem<M>;\n facts: Readable<InferFacts<M>>;\n derived: Readable<InferDerivations<M>>;\n events: SingleModuleSystem<M>[\"events\"];\n dispatch: (event: InferEvents<M>) => void;\n statusPlugin: StatusPlugin | undefined;\n} {\n const allPlugins = [...(config?.plugins ?? [])];\n let statusPlugin: StatusPlugin | undefined;\n\n if (config?.status) {\n const sp = createRequirementStatusPlugin();\n statusPlugin = sp;\n allPlugins.push(sp.plugin as Plugin<any>);\n }\n\n const system = createSystem({\n module: moduleDef,\n plugins: allPlugins.length > 0 ? allPlugins : undefined,\n trace: config?.trace,\n errorBoundary: config?.errorBoundary,\n tickMs: config?.tickMs,\n zeroConfig: config?.zeroConfig,\n initialFacts: config?.initialFacts,\n } as any) as unknown as SingleModuleSystem<M>;\n\n // SSR guard: initialize facts for SSR rendering, start reconciliation only in the browser\n if (typeof window !== \"undefined\") {\n system.start();\n } else {\n system.initialize();\n }\n\n onDestroy(() => {\n // RFC 0009 follow-up (R18 Tier 2-B): destroyAsync so source\n // unsubscribes complete; fire-and-forget with swallow-catch\n // (the framework's onDestroy is sync).\n system.destroyAsync().catch((err: unknown) => {\n if (isDevelopment)\n console.warn(\"[Directive] destroyAsync rejected during unmount:\", err);\n });\n });\n\n const factKeys = config?.facts;\n const derivedKeys = config?.derived;\n const subscribeAll = !factKeys && !derivedKeys;\n\n // Subscribe to facts\n const factsStore: Readable<InferFacts<M>> = subscribeAll\n ? readable(system.facts.$store.toObject() as InferFacts<M>, (set) => {\n return system.facts.$store.subscribeAll(() => {\n set(system.facts.$store.toObject() as InferFacts<M>);\n });\n })\n : readable(pickFacts(system, factKeys ?? []) as InferFacts<M>, (set) => {\n if (!factKeys || factKeys.length === 0) return () => {};\n return system.facts.$store.subscribe(factKeys, () => {\n set(pickFacts(system, factKeys) as InferFacts<M>);\n });\n });\n\n // Subscribe to derivations\n const allDerivationKeys = subscribeAll\n ? Object.keys(system.derive ?? {})\n : (derivedKeys ?? []);\n const getDerived = (): InferDerivations<M> => {\n const result: Record<string, unknown> = {};\n for (const key of allDerivationKeys) {\n result[key] = system.read(key);\n }\n return result as InferDerivations<M>;\n };\n const derivedStore: Readable<InferDerivations<M>> =\n allDerivationKeys.length > 0\n ? readable(getDerived(), (set) => {\n return system.subscribe(allDerivationKeys, () => {\n set(getDerived());\n });\n })\n : readable(getDerived(), () => () => {});\n\n const events = system.events;\n const dispatch = (event: InferEvents<M>) => system.dispatch(event);\n\n return {\n system,\n facts: factsStore,\n derived: derivedStore,\n events,\n dispatch,\n statusPlugin,\n };\n}\n\n// ============================================================================\n// Typed Hooks Factory\n// ============================================================================\n\nexport function createTypedHooks<M extends ModuleSchema>(): {\n useFact: <K extends keyof InferFacts<M> & string>(\n system: SingleModuleSystem<M>,\n factKey: K,\n ) => Readable<InferFacts<M>[K] | undefined>;\n useDerived: <K extends keyof InferDerivations<M> & string>(\n system: SingleModuleSystem<M>,\n derivationId: K,\n ) => Readable<InferDerivations<M>[K]>;\n useDispatch: (\n system: SingleModuleSystem<M>,\n ) => (event: InferEvents<M>) => void;\n useEvents: (system: SingleModuleSystem<M>) => SingleModuleSystem<M>[\"events\"];\n useWatch: <K extends string>(\n system: SingleModuleSystem<M>,\n key: K,\n callback: (newValue: unknown, previousValue: unknown) => void,\n ) => void;\n} {\n return {\n useFact: <K extends keyof InferFacts<M> & string>(\n system: SingleModuleSystem<M>,\n factKey: K,\n ) =>\n useFact(system as SingleModuleSystem<any>, factKey) as Readable<\n InferFacts<M>[K] | undefined\n >,\n useDerived: <K extends keyof InferDerivations<M> & string>(\n system: SingleModuleSystem<M>,\n derivationId: K,\n ) =>\n useDerived(system as SingleModuleSystem<any>, derivationId) as Readable<\n InferDerivations<M>[K]\n >,\n useDispatch: (system: SingleModuleSystem<M>) => {\n return (event: InferEvents<M>) => {\n system.dispatch(event);\n };\n },\n useEvents: (system: SingleModuleSystem<M>) => useEvents<M>(system),\n useWatch: <K extends string>(\n system: SingleModuleSystem<M>,\n key: K,\n callback: (newValue: unknown, previousValue: unknown) => void,\n ) => useWatch(system as SingleModuleSystem<any>, key, callback),\n };\n}\n\n// ============================================================================\n// useNamespacedSelector — select from a NamespacedSystem\n// ============================================================================\n\n/**\n * Svelte readable store 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 * ```svelte\n * const token$ = useNamespacedSelector(system, [\"auth.token\"], (s) => s.facts.auth.token);\n * ```\n */\nexport function useNamespacedSelector<Modules extends ModulesMap, R>(\n system: NamespacedSystem<Modules>,\n keys: string[],\n selector: (system: NamespacedSystem<Modules>) => R,\n): Readable<R> {\n return readable<R>(selector(system), (set) => {\n const unsubscribe = system.subscribe(keys, () => {\n set(selector(system));\n });\n\n return unsubscribe;\n });\n}\n\n// ============================================================================\n// useQuerySystem — Stable query system with lifecycle management\n// ============================================================================\n\nlet _createQuerySystem: ((config: Record<string, unknown>) => any) | null =\n null;\n\nfunction getCreateQuerySystem() {\n if (!_createQuerySystem) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const mod = require(\"@directive-run/query\");\n _createQuerySystem = mod.createQuerySystem;\n } catch {\n throw new Error(\n \"[Directive] @directive-run/query is not installed. \" +\n \"Install it with: pnpm add @directive-run/query\",\n );\n }\n }\n\n return _createQuerySystem!;\n}\n\n/**\n * Svelte composable to create and manage a query system with proper lifecycle.\n *\n * Accepts a config object or a factory function that creates the system.\n * Handles cleanup on component destroy.\n *\n * @example\n * ```svelte\n * <script>\n * import { useQuerySystem, useDerived } from \"@directive-run/svelte\";\n *\n * const app = useQuerySystem({\n * facts: { userId: \"\" },\n * queries: { user: { key: ..., fetcher: ... } },\n * });\n *\n * const user = useDerived(app, \"user\");\n * </script>\n * ```\n */\nexport function useQuerySystem<\n T extends {\n start: () => void;\n destroy: () => void;\n isRunning?: boolean;\n [key: string]: any;\n },\n>(config: Record<string, unknown>): T {\n const createQuerySystem = getCreateQuerySystem();\n const system = createQuerySystem(config) as T;\n\n if (typeof window !== \"undefined\" && !system.isRunning) {\n system.start();\n }\n\n onDestroy(() => {\n // RFC 0009 follow-up (R18 Tier 2-B): destroyAsync so source\n // unsubscribes complete; fire-and-forget with swallow-catch\n // (the framework's onDestroy is sync).\n system.destroyAsync().catch((err: unknown) => {\n if (isDevelopment)\n console.warn(\"[Directive] destroyAsync rejected during unmount:\", err);\n });\n });\n\n return system;\n}\n\n// ============================================================================\n// SSR Hydration\n// ============================================================================\n\n/** @internal Context key for SSR hydration snapshot */\nconst HYDRATION_KEY = Symbol(\"directive-hydration\");\n\n/**\n * Provide a DistributableSnapshot for child components to hydrate from.\n * Call this in your layout or parent component (e.g., SvelteKit +layout.svelte).\n *\n * @example\n * ```svelte\n * <script>\n * import { setHydrationSnapshot } from \"@directive-run/svelte\";\n * export let data; // from SvelteKit load()\n * setHydrationSnapshot(data.snapshot);\n * </script>\n * <slot />\n * ```\n */\nexport function setHydrationSnapshot(snapshot: Record<string, unknown>): void {\n setContext(HYDRATION_KEY, snapshot);\n}\n\n/**\n * Create a system hydrated from a server snapshot.\n * Must be called in a component that is a descendant of one that called `setHydrationSnapshot`.\n *\n * @example\n * ```svelte\n * <script>\n * import { useHydratedSystem, useDerived } from \"@directive-run/svelte\";\n * const system = useHydratedSystem(myModule);\n * const count = useDerived(system, \"count\");\n * </script>\n * ```\n */\nexport function useHydratedSystem<S extends ModuleSchema>(\n moduleDef: ModuleDef<S>,\n config?: UseDirectiveConfig,\n): SingleModuleSystem<S> {\n const snapshot = getContext<Record<string, unknown> | undefined>(\n HYDRATION_KEY,\n );\n const mergedFacts = mergeHydrationFacts(\n snapshot,\n config?.initialFacts as Record<string, unknown>,\n );\n\n return useDirective(moduleDef, { ...config, initialFacts: mergedFacts })\n .system;\n}\n\n// ============================================================================\n// createAuditLedgerStore — live ledger entries with filter (R4.I parity)\n// ============================================================================\n\nimport type { AuditEntry, AuditLedger, QueryFilter } from \"@directive-run/core\";\n\n/**\n * Create a Svelte readable store that holds the latest audit-ledger\n * entries matching `filter`. Re-emits on each poll tick (default\n * 250 ms — override with `pollMs`).\n *\n * **Polling floor:** `pollMs` is clamped to a minimum of 50 ms to prevent\n * accidental DoS from typos like `pollMs: 5`. Values below the floor are\n * silently clamped in production; dev mode logs a warning.\n *\n * **First-paint freshness:** the store re-queries the ledger inside the\n * `readable` start function (before the first interval tick lands) so\n * the first subscriber sees fresh entries even if the ledger has been\n * appended-to between store construction and first subscription.\n *\n * @example\n * ```svelte\n * <script>\n * import { createAuditLedgerStore } from \"@directive-run/svelte\";\n * const entries = createAuditLedgerStore(ledger, { kind: \"constraint.evaluate\", limit: 20 });\n * </script>\n *\n * <ul>\n * {#each $entries as e (e.seq)}\n * <li>{e.kind} @ {new Date(e.ts).toISOString()}</li>\n * {/each}\n * </ul>\n * ```\n */\nexport function createAuditLedgerStore(\n ledger: AuditLedger,\n filter: QueryFilter = {},\n opts: { pollMs?: number } = {},\n): Readable<readonly AuditEntry[]> {\n const requestedPollMs = opts.pollMs ?? 250;\n const pollMs = Math.max(50, requestedPollMs);\n\n if (isDevelopment) {\n if (opts.pollMs !== undefined && opts.pollMs < 50) {\n console.warn(\n `[Directive] createAuditLedgerStore() pollMs=${opts.pollMs} is below the 50 ms floor; clamped to 50 ms.`,\n );\n }\n if (pollMs < 100) {\n const entryCount = ledger.toJSON().entries.length;\n if (entryCount > 1000) {\n console.warn(\n `[Directive] createAuditLedgerStore() polling every ${pollMs} ms against a ${entryCount}-entry ledger — that's a lot of CPU per tick. Consider raising pollMs or tightening the filter.`,\n );\n }\n }\n }\n\n return readable<readonly AuditEntry[]>(ledger.query(filter), (set) => {\n // Re-query immediately on subscription so the first paint sees any\n // entries that landed between store construction and the first sub.\n set(ledger.query(filter));\n const id = setInterval(() => set(ledger.query(filter)), pollMs);\n return () => clearInterval(id);\n });\n}\n\n/**\n * Alias for {@link createAuditLedgerStore} that mirrors the\n * cross-framework `useAuditLedger` naming. Functionally identical;\n * use whichever reads more naturally in your codebase.\n */\nexport const useAuditLedger = createAuditLedgerStore;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/dev-true.ts","../src/index.ts"],"names":["dev_true_default","createDerivedStore","system","derivationId","readable","set","createDerivedsStore","derivationIds","getValues","result","id","createFactStore","factKey","createInspectStore","update","unsubFacts","unsubSettled","useFact","keyOrKeys","assertSystem","_useFactMulti","factKeys","key","useDerived","idOrIds","useSelector","selector","equalityFn","defaultEquality","deriveKeySet","runWithTracking","runTrackedSelector","initial","currentSelected","trackedFactKeys","trackedDeriveKeys","unsubs","resubscribe","unsub","onUpdate","depsChanged","useDispatch","event","useEvents","useWatch","callback","unsubscribe","onDestroy","useInspect","options","computeInspectState","throttled","cleanup","createThrottle","useRequirementStatus","statusPlugin","typeOrTypes","type","useExplain","requirementId","useConstraintStatus","constraintId","_getConstraintValue","inspection","c","useOptimisticUpdate","requirementType","isPendingValue","errorValue","snapshot","statusUnsub","pendingSubscribers","errorSubscribers","isPending","fn","error","setPending","v","setError","rollback","mutate","updateFn","status","useHistory","buildHistoryState","useDirective","moduleDef","config","allPlugins","sp","createRequirementStatusPlugin","createSystem","err","derivedKeys","subscribeAll","factsStore","pickFacts","allDerivationKeys","getDerived","derivedStore","events","createTypedHooks","useNamespacedSelector","keys","_createQuerySystem","getCreateQuerySystem","useQuerySystem","HYDRATION_KEY","setHydrationSnapshot","setContext","useHydratedSystem","getContext","mergedFacts","mergeHydrationFacts","createAuditLedgerStore","ledger","filter","opts","requestedPollMs","pollMs","entryCount","useAuditLedger"],"mappings":"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","file":"index.js","sourcesContent":["export default typeof process !== \"undefined\" &&\n process.env?.NODE_ENV !== \"production\";\n","/**\n * Svelte Adapter - Consolidated Svelte stores for Directive\n *\n * 15 active exports: useFact, useDerived, useDispatch, useSelector,\n * useWatch, useInspect, useRequirementStatus, useEvents, useExplain,\n * useConstraintStatus, useOptimisticUpdate, useDirective, useHistory,\n * createTypedHooks, shallowEqual\n *\n * Store factories: createDerivedStore, createDerivedsStore, createFactStore, createInspectStore\n */\n\nimport type {\n ErrorBoundaryConfig,\n HistoryState,\n InferDerivations,\n InferEvents,\n InferFacts,\n InferSelectorState,\n ModuleDef,\n ModuleSchema,\n ModulesMap,\n NamespacedSystem,\n Plugin,\n SingleModuleSystem,\n SystemInspection,\n SystemSnapshot,\n TraceOption,\n} from \"@directive-run/core\";\nimport {\n createRequirementStatusPlugin,\n createSystem,\n} from \"@directive-run/core\";\nimport type { RequirementTypeStatus } from \"@directive-run/core\";\nimport {\n type ConstraintInfo,\n type InspectState,\n assertSystem,\n buildHistoryState,\n computeInspectState,\n createThrottle,\n defaultEquality,\n depsChanged,\n mergeHydrationFacts,\n pickFacts,\n runTrackedSelector,\n shallowEqual,\n} from \"@directive-run/core/adapter-utils\";\nimport { getContext, onDestroy, setContext } from \"svelte\";\nimport { type Readable, readable } from \"svelte/store\";\nimport isDevelopment from \"#is-development\";\n\n// Re-export for convenience\nexport type { RequirementTypeStatus, InspectState, ConstraintInfo };\nexport { shallowEqual };\n\n/** Type for the requirement status plugin return value */\nexport type StatusPlugin = ReturnType<typeof createRequirementStatusPlugin>;\n\n// ============================================================================\n// Store Factories\n// ============================================================================\n\n/**\n * Create a Svelte store for a derived value.\n */\nexport function createDerivedStore<T>(\n system: SingleModuleSystem<any>,\n derivationId: string,\n): Readable<T> {\n if (isDevelopment) {\n const initialValue = system.read(derivationId);\n if (initialValue === undefined) {\n console.warn(\n `[Directive] createDerivedStore(\"${derivationId}\") returned undefined. ` +\n `Check that \"${derivationId}\" is defined in your module's derive property.`,\n );\n }\n }\n\n return readable<T>(system.read(derivationId) as T, (set) => {\n const unsubscribe = system.subscribe([derivationId], () => {\n set(system.read(derivationId) as T);\n });\n return unsubscribe;\n });\n}\n\n/**\n * Create a Svelte store for multiple derived values.\n */\nexport function createDerivedsStore<T extends Record<string, unknown>>(\n system: SingleModuleSystem<any>,\n derivationIds: string[],\n): Readable<T> {\n const getValues = (): T => {\n const result: Record<string, unknown> = {};\n for (const id of derivationIds) {\n result[id] = system.read(id);\n }\n return result as T;\n };\n\n return readable<T>(getValues(), (set) => {\n const unsubscribe = system.subscribe(derivationIds, () => {\n set(getValues());\n });\n return unsubscribe;\n });\n}\n\n/**\n * Create a Svelte store for a single fact value.\n */\nexport function createFactStore<T>(\n system: SingleModuleSystem<any>,\n factKey: string,\n): Readable<T | undefined> {\n if (isDevelopment) {\n if (!system.facts.$store.has(factKey)) {\n console.warn(\n `[Directive] createFactStore(\"${factKey}\") — fact not found in store. ` +\n `Check that \"${factKey}\" is defined in your module's schema.`,\n );\n }\n }\n\n return readable<T | undefined>(\n system.facts.$store.get(factKey) as T | undefined,\n (set) => {\n const unsubscribe = system.facts.$store.subscribe([factKey], () => {\n set(system.facts.$store.get(factKey) as T | undefined);\n });\n return unsubscribe;\n },\n );\n}\n\n/**\n * Create a Svelte store for system inspection data.\n * NOTE: This updates on every fact change. Use sparingly in production.\n */\nexport function createInspectStore(\n system: SingleModuleSystem<any>,\n): Readable<SystemInspection> {\n return readable<SystemInspection>(system.inspect(), (set) => {\n const update = () => set(system.inspect());\n const unsubFacts = system.facts.$store.subscribeAll(update);\n const unsubSettled = system.onSettledChange(update);\n return () => {\n unsubFacts();\n unsubSettled();\n };\n });\n}\n\n// ============================================================================\n// useFact — single key or multi key\n// ============================================================================\n\n/** Single key overload */\nexport function useFact<\n S extends ModuleSchema,\n K extends keyof InferFacts<S> & string,\n>(\n system: SingleModuleSystem<S>,\n factKey: K,\n): Readable<InferFacts<S>[K] | undefined>;\n/** Multi-key overload */\nexport function useFact<\n S extends ModuleSchema,\n K extends keyof InferFacts<S> & string,\n>(\n system: SingleModuleSystem<S>,\n factKeys: K[],\n): Readable<Pick<InferFacts<S>, K>>;\n/** Implementation */\nexport function useFact(\n system: SingleModuleSystem<any>,\n keyOrKeys: string | string[],\n): Readable<unknown> {\n assertSystem(\"useFact\", system);\n if (isDevelopment && typeof keyOrKeys === \"function\") {\n console.error(\n \"[Directive] useFact() received a function. Did you mean useSelector()? \" +\n \"useFact() takes a string key or array of keys, not a selector function.\",\n );\n }\n\n // Multi-key path: useFact(system, [keys])\n if (Array.isArray(keyOrKeys)) {\n return _useFactMulti(system, keyOrKeys);\n }\n\n // Single key path: useFact(system, key)\n return createFactStore(system, keyOrKeys);\n}\n\nfunction _useFactMulti(\n system: SingleModuleSystem<any>,\n factKeys: string[],\n): Readable<Record<string, unknown>> {\n const getValues = (): Record<string, unknown> => {\n const result: Record<string, unknown> = {};\n for (const key of factKeys) {\n result[key] = system.facts.$store.get(key);\n }\n return result;\n };\n\n return readable(getValues(), (set) => {\n const unsubscribe = system.facts.$store.subscribe(factKeys, () => {\n set(getValues());\n });\n return unsubscribe;\n });\n}\n\n// ============================================================================\n// useDerived — single key or multi key\n// ============================================================================\n\n/** Single key overload */\nexport function useDerived<\n S extends ModuleSchema,\n K extends keyof InferDerivations<S> & string,\n>(\n system: SingleModuleSystem<S>,\n derivationId: K,\n): Readable<InferDerivations<S>[K]>;\n/** Multi-key overload */\nexport function useDerived<\n S extends ModuleSchema,\n K extends keyof InferDerivations<S> & string,\n>(\n system: SingleModuleSystem<S>,\n derivationIds: K[],\n): Readable<Pick<InferDerivations<S>, K>>;\n/** Implementation */\nexport function useDerived(\n system: SingleModuleSystem<any>,\n idOrIds: string | string[],\n): Readable<unknown> {\n assertSystem(\"useDerived\", system);\n if (isDevelopment && typeof idOrIds === \"function\") {\n console.error(\n \"[Directive] useDerived() received a function. Did you mean useSelector()? \" +\n \"useDerived() takes a string key or array of keys, not a selector function.\",\n );\n }\n\n // Multi-key path\n if (Array.isArray(idOrIds)) {\n return createDerivedsStore(system, idOrIds);\n }\n\n // Single key path\n return createDerivedStore(system, idOrIds);\n}\n\n// ============================================================================\n// useSelector — auto-tracking selector over facts and derivations\n// ============================================================================\n\n/**\n * Auto-tracking selector over facts and derivations.\n * Uses `withTracking()` to detect which facts the selector accesses,\n * then subscribes only to those keys.\n */\nexport function useSelector<S extends ModuleSchema, R>(\n system: SingleModuleSystem<S>,\n selector: (state: InferSelectorState<S>) => R,\n equalityFn?: (a: R, b: R) => boolean,\n): Readable<R>;\nexport function useSelector(\n system: SingleModuleSystem<any>,\n selector: (state: any) => unknown,\n equalityFn: (a: unknown, b: unknown) => boolean = defaultEquality,\n): Readable<unknown> {\n assertSystem(\"useSelector\", system);\n const deriveKeySet = new Set(Object.keys(system.derive ?? {}));\n\n // Build a tracking-aware state proxy that exposes both facts and derivations\n const runWithTracking = () =>\n runTrackedSelector(system, deriveKeySet, selector);\n\n const initial = runWithTracking();\n\n return readable(initial.value, (set) => {\n let currentSelected = initial.value;\n let trackedFactKeys = initial.factKeys;\n let trackedDeriveKeys = initial.deriveKeys;\n const unsubs: Array<() => void> = [];\n\n const resubscribe = () => {\n for (const unsub of unsubs) unsub();\n unsubs.length = 0;\n\n const onUpdate = () => {\n const result = runWithTracking();\n if (!equalityFn(currentSelected, result.value)) {\n currentSelected = result.value;\n set(result.value);\n }\n // Re-track: check if deps changed\n if (\n depsChanged(\n trackedFactKeys,\n result.factKeys,\n trackedDeriveKeys,\n result.deriveKeys,\n )\n ) {\n trackedFactKeys = result.factKeys;\n trackedDeriveKeys = result.deriveKeys;\n resubscribe();\n }\n };\n\n if (trackedFactKeys.length > 0) {\n unsubs.push(system.facts.$store.subscribe(trackedFactKeys, onUpdate));\n } else if (trackedDeriveKeys.length === 0) {\n unsubs.push(system.facts.$store.subscribeAll(onUpdate));\n }\n if (trackedDeriveKeys.length > 0) {\n unsubs.push(system.subscribe(trackedDeriveKeys, onUpdate));\n }\n };\n\n resubscribe();\n\n return () => {\n for (const unsub of unsubs) unsub();\n };\n });\n}\n\n// ============================================================================\n// useDispatch\n// ============================================================================\n\nexport function useDispatch<S extends ModuleSchema>(\n system: SingleModuleSystem<S>,\n): (event: InferEvents<S>) => void {\n assertSystem(\"useDispatch\", system);\n return (event: InferEvents<S>) => {\n system.dispatch(event);\n };\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 system: SingleModuleSystem<S>,\n): SingleModuleSystem<S>[\"events\"] {\n assertSystem(\"useEvents\", system);\n return 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<\n S extends ModuleSchema,\n K extends keyof InferDerivations<S> & string,\n>(\n system: SingleModuleSystem<S>,\n key: K,\n callback: (\n newValue: InferDerivations<S>[K],\n previousValue: InferDerivations<S>[K] | undefined,\n ) => void,\n): void;\n/** Watch a fact key with auto-detection. */\nexport function useWatch<\n S extends ModuleSchema,\n K extends keyof InferFacts<S> & string,\n>(\n system: SingleModuleSystem<S>,\n key: K,\n callback: (\n newValue: InferFacts<S>[K] | undefined,\n previousValue: InferFacts<S>[K] | undefined,\n ) => void,\n): void;\n/** Implementation */\nexport function useWatch(\n system: SingleModuleSystem<any>,\n key: string,\n callback: (newValue: unknown, prevValue: unknown) => void,\n): void {\n assertSystem(\"useWatch\", system);\n\n const unsubscribe = system.watch(key, callback);\n onDestroy(unsubscribe);\n}\n\n// ============================================================================\n// useInspect — consolidated inspection hook\n// ============================================================================\n\n/** Options for useInspect */\nexport interface UseInspectOptions {\n throttleMs?: number;\n}\n\n/**\n * Consolidated system inspection hook.\n * Returns Readable<InspectState> with optional throttling.\n */\nexport function useInspect(\n system: SingleModuleSystem<any>,\n options?: UseInspectOptions,\n): Readable<InspectState> {\n assertSystem(\"useInspect\", system);\n if (options?.throttleMs && options.throttleMs > 0) {\n return readable<InspectState>(computeInspectState(system), (set) => {\n const { throttled, cleanup } = createThrottle(() => {\n set(computeInspectState(system));\n }, options.throttleMs!);\n\n const unsubFacts = system.facts.$store.subscribeAll(throttled);\n const unsubSettled = system.onSettledChange(throttled);\n\n return () => {\n cleanup();\n unsubFacts();\n unsubSettled();\n };\n });\n }\n\n return readable<InspectState>(computeInspectState(system), (set) => {\n const update = () => set(computeInspectState(system));\n const unsubFacts = system.facts.$store.subscribeAll(update);\n const unsubSettled = system.onSettledChange(update);\n\n return () => {\n unsubFacts();\n unsubSettled();\n };\n });\n}\n\n// ============================================================================\n// useRequirementStatus — single or multi\n// ============================================================================\n\n/** Single type overload */\nexport function useRequirementStatus(\n statusPlugin: StatusPlugin,\n type: string,\n): Readable<RequirementTypeStatus>;\n/** Multi-type overload */\nexport function useRequirementStatus(\n statusPlugin: StatusPlugin,\n types: string[],\n): Readable<Record<string, RequirementTypeStatus>>;\n/** Implementation */\nexport function useRequirementStatus(\n statusPlugin: StatusPlugin,\n typeOrTypes: string | string[],\n):\n | Readable<RequirementTypeStatus>\n | Readable<Record<string, RequirementTypeStatus>> {\n if (Array.isArray(typeOrTypes)) {\n const getValues = (): Record<string, RequirementTypeStatus> => {\n const result: Record<string, RequirementTypeStatus> = {};\n for (const type of typeOrTypes) {\n result[type] = statusPlugin.getStatus(type);\n }\n return result;\n };\n\n return readable(getValues(), (set) => {\n const unsubscribe = statusPlugin.subscribe(() => {\n set(getValues());\n });\n return unsubscribe;\n });\n }\n\n return readable<RequirementTypeStatus>(\n statusPlugin.getStatus(typeOrTypes),\n (set) => {\n const unsubscribe = statusPlugin.subscribe(() => {\n set(statusPlugin.getStatus(typeOrTypes));\n });\n return unsubscribe;\n },\n );\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 system: SingleModuleSystem<any>,\n requirementId: string,\n): Readable<string | null> {\n assertSystem(\"useExplain\", system);\n return readable<string | null>(system.explain(requirementId), (set) => {\n const update = () => set(system.explain(requirementId));\n const unsubFacts = system.facts.$store.subscribeAll(update);\n const unsubSettled = system.onSettledChange(update);\n\n return () => {\n unsubFacts();\n unsubSettled();\n };\n });\n}\n\n// ============================================================================\n// useConstraintStatus — reactive constraint inspection\n// ============================================================================\n\n/** Get all constraints */\nexport function useConstraintStatus(\n system: SingleModuleSystem<any>,\n): Readable<ConstraintInfo[]>;\n/** Get a single constraint by ID */\nexport function useConstraintStatus(\n system: SingleModuleSystem<any>,\n constraintId: string,\n): Readable<ConstraintInfo | null>;\n/** Implementation */\nexport function useConstraintStatus(\n system: SingleModuleSystem<any>,\n constraintId?: string,\n): Readable<ConstraintInfo[] | ConstraintInfo | null> {\n assertSystem(\"useConstraintStatus\", system);\n return readable<ConstraintInfo[] | ConstraintInfo | null>(\n _getConstraintValue(system, constraintId),\n (set) => {\n const update = () => set(_getConstraintValue(system, constraintId));\n const unsubFacts = system.facts.$store.subscribeAll(update);\n const unsubSettled = system.onSettledChange(update);\n\n return () => {\n unsubFacts();\n unsubSettled();\n };\n },\n );\n}\n\nfunction _getConstraintValue(\n system: SingleModuleSystem<any>,\n constraintId?: string,\n): ConstraintInfo[] | ConstraintInfo | null {\n const inspection = system.inspect();\n if (!constraintId) return inspection.constraints;\n return (\n inspection.constraints.find((c: ConstraintInfo) => c.id === constraintId) ??\n null\n );\n}\n\n// ============================================================================\n// useOptimisticUpdate — batch with rollback on failure\n// ============================================================================\n\nexport interface OptimisticUpdateResult {\n mutate: (updateFn: () => void) => void;\n isPending: Readable<boolean>;\n error: Readable<Error | null>;\n rollback: () => 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 system: SingleModuleSystem<any>,\n statusPlugin?: StatusPlugin,\n requirementType?: string,\n): OptimisticUpdateResult {\n assertSystem(\"useOptimisticUpdate\", system);\n let isPendingValue = false;\n let errorValue: Error | null = null;\n let snapshot: SystemSnapshot | null = null;\n let statusUnsub: (() => void) | null = null;\n\n // We track subscribers manually since we need imperative push\n const pendingSubscribers = new Set<(v: boolean) => void>();\n const errorSubscribers = new Set<(v: Error | null) => void>();\n\n const isPending: Readable<boolean> = {\n subscribe(fn) {\n fn(isPendingValue);\n pendingSubscribers.add(fn);\n return () => pendingSubscribers.delete(fn);\n },\n };\n\n const error: Readable<Error | null> = {\n subscribe(fn) {\n fn(errorValue);\n errorSubscribers.add(fn);\n return () => errorSubscribers.delete(fn);\n },\n };\n\n const setPending = (v: boolean) => {\n isPendingValue = v;\n for (const fn of pendingSubscribers) fn(v);\n };\n\n const setError = (v: Error | null) => {\n errorValue = v;\n for (const fn of errorSubscribers) fn(v);\n };\n\n const rollback = () => {\n if (snapshot) {\n system.restore(snapshot);\n snapshot = null;\n }\n setPending(false);\n setError(null);\n statusUnsub?.();\n statusUnsub = null;\n };\n\n const mutate = (updateFn: () => void) => {\n snapshot = system.getSnapshot();\n setPending(true);\n setError(null);\n system.batch(updateFn);\n\n if (statusPlugin && requirementType) {\n statusUnsub?.();\n statusUnsub = statusPlugin.subscribe(() => {\n const status = statusPlugin.getStatus(requirementType);\n if (!status.isLoading && !status.hasError) {\n snapshot = null;\n setPending(false);\n statusUnsub?.();\n statusUnsub = null;\n } else if (status.hasError) {\n setError(status.lastError);\n rollback();\n }\n });\n }\n };\n\n onDestroy(() => {\n statusUnsub?.();\n });\n\n return { mutate, isPending, error, rollback };\n}\n\n// ============================================================================\n// useHistory — reactive history store\n// ============================================================================\n\n/**\n * Reactive history Svelte store. Returns a Readable that updates\n * when snapshots are taken or navigation occurs.\n *\n * @example\n * ```svelte\n * const history = useHistory(system);\n * <button disabled={!$history?.canGoBack} on:click={() => $history?.goBack()}>Undo</button>\n * ```\n */\nexport function useHistory(\n system: SingleModuleSystem<any>,\n): Readable<HistoryState | null> {\n assertSystem(\"useHistory\", system);\n return readable<HistoryState | null>(buildHistoryState(system), (set) => {\n return system.onHistoryChange(() => set(buildHistoryState(system)));\n });\n}\n\n// ============================================================================\n// Scoped System\n// ============================================================================\n\n/** Configuration for useDirective */\nexport interface UseDirectiveConfig {\n plugins?: Plugin<any>[];\n trace?: TraceOption;\n errorBoundary?: ErrorBoundaryConfig;\n tickMs?: number;\n zeroConfig?: boolean;\n initialFacts?: Record<string, any>;\n status?: boolean;\n /** Fact keys to subscribe to (omit for all) */\n facts?: string[];\n /** Derivation keys to subscribe to (omit for all) */\n derived?: string[];\n}\n\n/**\n * Create a scoped Directive system with automatic lifecycle management.\n * When no `facts` or `derived` keys are specified, subscribes to ALL\n * facts and derivations and returns Svelte readable stores.\n *\n * @example\n * ```svelte\n * // Subscribe to everything\n * const { facts, derived, events, dispatch } = useDirective(counterModule);\n *\n * // Selective keys\n * const { facts, derived } = useDirective(counterModule, { facts: [\"count\"], derived: [\"doubled\"] });\n * ```\n */\nexport function useDirective<M extends ModuleSchema>(\n moduleDef: ModuleDef<M>,\n config?: UseDirectiveConfig,\n): {\n system: SingleModuleSystem<M>;\n facts: Readable<InferFacts<M>>;\n derived: Readable<InferDerivations<M>>;\n events: SingleModuleSystem<M>[\"events\"];\n dispatch: (event: InferEvents<M>) => void;\n statusPlugin: StatusPlugin | undefined;\n} {\n const allPlugins = [...(config?.plugins ?? [])];\n let statusPlugin: StatusPlugin | undefined;\n\n if (config?.status) {\n const sp = createRequirementStatusPlugin();\n statusPlugin = sp;\n allPlugins.push(sp.plugin as Plugin<any>);\n }\n\n const system = createSystem({\n module: moduleDef,\n plugins: allPlugins.length > 0 ? allPlugins : undefined,\n trace: config?.trace,\n errorBoundary: config?.errorBoundary,\n tickMs: config?.tickMs,\n zeroConfig: config?.zeroConfig,\n initialFacts: config?.initialFacts,\n } as any) as unknown as SingleModuleSystem<M>;\n\n // SSR guard: initialize facts for SSR rendering, start reconciliation only in the browser\n if (typeof window !== \"undefined\") {\n system.start();\n } else {\n system.initialize();\n }\n\n onDestroy(() => {\n // RFC 0009 follow-up: destroyAsync so source\n // unsubscribes complete; fire-and-forget with swallow-catch\n // (the framework's onDestroy is sync).\n system.destroyAsync().catch((err: unknown) => {\n if (isDevelopment)\n console.warn(\"[Directive] destroyAsync rejected during unmount:\", err);\n });\n });\n\n const factKeys = config?.facts;\n const derivedKeys = config?.derived;\n const subscribeAll = !factKeys && !derivedKeys;\n\n // Subscribe to facts\n const factsStore: Readable<InferFacts<M>> = subscribeAll\n ? readable(system.facts.$store.toObject() as InferFacts<M>, (set) => {\n return system.facts.$store.subscribeAll(() => {\n set(system.facts.$store.toObject() as InferFacts<M>);\n });\n })\n : readable(pickFacts(system, factKeys ?? []) as InferFacts<M>, (set) => {\n if (!factKeys || factKeys.length === 0) return () => {};\n return system.facts.$store.subscribe(factKeys, () => {\n set(pickFacts(system, factKeys) as InferFacts<M>);\n });\n });\n\n // Subscribe to derivations\n const allDerivationKeys = subscribeAll\n ? Object.keys(system.derive ?? {})\n : (derivedKeys ?? []);\n const getDerived = (): InferDerivations<M> => {\n const result: Record<string, unknown> = {};\n for (const key of allDerivationKeys) {\n result[key] = system.read(key);\n }\n return result as InferDerivations<M>;\n };\n const derivedStore: Readable<InferDerivations<M>> =\n allDerivationKeys.length > 0\n ? readable(getDerived(), (set) => {\n return system.subscribe(allDerivationKeys, () => {\n set(getDerived());\n });\n })\n : readable(getDerived(), () => () => {});\n\n const events = system.events;\n const dispatch = (event: InferEvents<M>) => system.dispatch(event);\n\n return {\n system,\n facts: factsStore,\n derived: derivedStore,\n events,\n dispatch,\n statusPlugin,\n };\n}\n\n// ============================================================================\n// Typed Hooks Factory\n// ============================================================================\n\nexport function createTypedHooks<M extends ModuleSchema>(): {\n useFact: <K extends keyof InferFacts<M> & string>(\n system: SingleModuleSystem<M>,\n factKey: K,\n ) => Readable<InferFacts<M>[K] | undefined>;\n useDerived: <K extends keyof InferDerivations<M> & string>(\n system: SingleModuleSystem<M>,\n derivationId: K,\n ) => Readable<InferDerivations<M>[K]>;\n useDispatch: (\n system: SingleModuleSystem<M>,\n ) => (event: InferEvents<M>) => void;\n useEvents: (system: SingleModuleSystem<M>) => SingleModuleSystem<M>[\"events\"];\n useWatch: <K extends string>(\n system: SingleModuleSystem<M>,\n key: K,\n callback: (newValue: unknown, previousValue: unknown) => void,\n ) => void;\n} {\n return {\n useFact: <K extends keyof InferFacts<M> & string>(\n system: SingleModuleSystem<M>,\n factKey: K,\n ) =>\n useFact(system as SingleModuleSystem<any>, factKey) as Readable<\n InferFacts<M>[K] | undefined\n >,\n useDerived: <K extends keyof InferDerivations<M> & string>(\n system: SingleModuleSystem<M>,\n derivationId: K,\n ) =>\n useDerived(system as SingleModuleSystem<any>, derivationId) as Readable<\n InferDerivations<M>[K]\n >,\n useDispatch: (system: SingleModuleSystem<M>) => {\n return (event: InferEvents<M>) => {\n system.dispatch(event);\n };\n },\n useEvents: (system: SingleModuleSystem<M>) => useEvents<M>(system),\n useWatch: <K extends string>(\n system: SingleModuleSystem<M>,\n key: K,\n callback: (newValue: unknown, previousValue: unknown) => void,\n ) => useWatch(system as SingleModuleSystem<any>, key, callback),\n };\n}\n\n// ============================================================================\n// useNamespacedSelector — select from a NamespacedSystem\n// ============================================================================\n\n/**\n * Svelte readable store 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 * ```svelte\n * const token$ = useNamespacedSelector(system, [\"auth.token\"], (s) => s.facts.auth.token);\n * ```\n */\nexport function useNamespacedSelector<Modules extends ModulesMap, R>(\n system: NamespacedSystem<Modules>,\n keys: string[],\n selector: (system: NamespacedSystem<Modules>) => R,\n): Readable<R> {\n return readable<R>(selector(system), (set) => {\n const unsubscribe = system.subscribe(keys, () => {\n set(selector(system));\n });\n\n return unsubscribe;\n });\n}\n\n// ============================================================================\n// useQuerySystem — Stable query system with lifecycle management\n// ============================================================================\n\nlet _createQuerySystem: ((config: Record<string, unknown>) => any) | null =\n null;\n\nfunction getCreateQuerySystem() {\n if (!_createQuerySystem) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const mod = require(\"@directive-run/query\");\n _createQuerySystem = mod.createQuerySystem;\n } catch {\n throw new Error(\n \"[Directive] @directive-run/query is not installed. \" +\n \"Install it with: pnpm add @directive-run/query\",\n );\n }\n }\n\n return _createQuerySystem!;\n}\n\n/**\n * Svelte composable to create and manage a query system with proper lifecycle.\n *\n * Accepts a config object or a factory function that creates the system.\n * Handles cleanup on component destroy.\n *\n * @example\n * ```svelte\n * <script>\n * import { useQuerySystem, useDerived } from \"@directive-run/svelte\";\n *\n * const app = useQuerySystem({\n * facts: { userId: \"\" },\n * queries: { user: { key: ..., fetcher: ... } },\n * });\n *\n * const user = useDerived(app, \"user\");\n * </script>\n * ```\n */\nexport function useQuerySystem<\n T extends {\n start: () => void;\n destroy: () => void;\n isRunning?: boolean;\n [key: string]: any;\n },\n>(config: Record<string, unknown>): T {\n const createQuerySystem = getCreateQuerySystem();\n const system = createQuerySystem(config) as T;\n\n if (typeof window !== \"undefined\" && !system.isRunning) {\n system.start();\n }\n\n onDestroy(() => {\n // RFC 0009 follow-up: destroyAsync so source\n // unsubscribes complete; fire-and-forget with swallow-catch\n // (the framework's onDestroy is sync).\n system.destroyAsync().catch((err: unknown) => {\n if (isDevelopment)\n console.warn(\"[Directive] destroyAsync rejected during unmount:\", err);\n });\n });\n\n return system;\n}\n\n// ============================================================================\n// SSR Hydration\n// ============================================================================\n\n/** @internal Context key for SSR hydration snapshot */\nconst HYDRATION_KEY = Symbol(\"directive-hydration\");\n\n/**\n * Provide a DistributableSnapshot for child components to hydrate from.\n * Call this in your layout or parent component (e.g., SvelteKit +layout.svelte).\n *\n * @example\n * ```svelte\n * <script>\n * import { setHydrationSnapshot } from \"@directive-run/svelte\";\n * export let data; // from SvelteKit load()\n * setHydrationSnapshot(data.snapshot);\n * </script>\n * <slot />\n * ```\n */\nexport function setHydrationSnapshot(snapshot: Record<string, unknown>): void {\n setContext(HYDRATION_KEY, snapshot);\n}\n\n/**\n * Create a system hydrated from a server snapshot.\n * Must be called in a component that is a descendant of one that called `setHydrationSnapshot`.\n *\n * @example\n * ```svelte\n * <script>\n * import { useHydratedSystem, useDerived } from \"@directive-run/svelte\";\n * const system = useHydratedSystem(myModule);\n * const count = useDerived(system, \"count\");\n * </script>\n * ```\n */\nexport function useHydratedSystem<S extends ModuleSchema>(\n moduleDef: ModuleDef<S>,\n config?: UseDirectiveConfig,\n): SingleModuleSystem<S> {\n const snapshot = getContext<Record<string, unknown> | undefined>(\n HYDRATION_KEY,\n );\n const mergedFacts = mergeHydrationFacts(\n snapshot,\n config?.initialFacts as Record<string, unknown>,\n );\n\n return useDirective(moduleDef, { ...config, initialFacts: mergedFacts })\n .system;\n}\n\n// ============================================================================\n// createAuditLedgerStore — live ledger entries with filter (R4.I parity)\n// ============================================================================\n\nimport type { AuditEntry, AuditLedger, QueryFilter } from \"@directive-run/core\";\n\n/**\n * Create a Svelte readable store that holds the latest audit-ledger\n * entries matching `filter`. Re-emits on each poll tick (default\n * 250 ms — override with `pollMs`).\n *\n * **Polling floor:** `pollMs` is clamped to a minimum of 50 ms to prevent\n * accidental DoS from typos like `pollMs: 5`. Values below the floor are\n * silently clamped in production; dev mode logs a warning.\n *\n * **First-paint freshness:** the store re-queries the ledger inside the\n * `readable` start function (before the first interval tick lands) so\n * the first subscriber sees fresh entries even if the ledger has been\n * appended-to between store construction and first subscription.\n *\n * @example\n * ```svelte\n * <script>\n * import { createAuditLedgerStore } from \"@directive-run/svelte\";\n * const entries = createAuditLedgerStore(ledger, { kind: \"constraint.evaluate\", limit: 20 });\n * </script>\n *\n * <ul>\n * {#each $entries as e (e.seq)}\n * <li>{e.kind} @ {new Date(e.ts).toISOString()}</li>\n * {/each}\n * </ul>\n * ```\n */\nexport function createAuditLedgerStore(\n ledger: AuditLedger,\n filter: QueryFilter = {},\n opts: { pollMs?: number } = {},\n): Readable<readonly AuditEntry[]> {\n const requestedPollMs = opts.pollMs ?? 250;\n const pollMs = Math.max(50, requestedPollMs);\n\n if (isDevelopment) {\n if (opts.pollMs !== undefined && opts.pollMs < 50) {\n console.warn(\n `[Directive] createAuditLedgerStore() pollMs=${opts.pollMs} is below the 50 ms floor; clamped to 50 ms.`,\n );\n }\n if (pollMs < 100) {\n const entryCount = ledger.toJSON().entries.length;\n if (entryCount > 1000) {\n console.warn(\n `[Directive] createAuditLedgerStore() polling every ${pollMs} ms against a ${entryCount}-entry ledger — that's a lot of CPU per tick. Consider raising pollMs or tightening the filter.`,\n );\n }\n }\n }\n\n return readable<readonly AuditEntry[]>(ledger.query(filter), (set) => {\n // Re-query immediately on subscription so the first paint sees any\n // entries that landed between store construction and the first sub.\n set(ledger.query(filter));\n const id = setInterval(() => set(ledger.query(filter)), pollMs);\n return () => clearInterval(id);\n });\n}\n\n/**\n * Alias for {@link createAuditLedgerStore} that mirrors the\n * cross-framework `useAuditLedger` naming. Functionally identical;\n * use whichever reads more naturally in your codebase.\n */\nexport const useAuditLedger = createAuditLedgerStore;\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@directive-run/svelte",
|
|
3
|
-
"version": "1.23.
|
|
3
|
+
"version": "1.23.1",
|
|
4
4
|
"imports": {
|
|
5
5
|
"#is-development": {
|
|
6
6
|
"production": "./src/dev-false.ts",
|
|
@@ -64,13 +64,13 @@
|
|
|
64
64
|
"svelte": "^5.54.0",
|
|
65
65
|
"tsup": "^8.3.5",
|
|
66
66
|
"typescript": "^5.7.2",
|
|
67
|
-
"@directive-run/core": "1.23.
|
|
68
|
-
"@directive-run/query": "1.2.
|
|
67
|
+
"@directive-run/core": "1.23.1",
|
|
68
|
+
"@directive-run/query": "1.2.1"
|
|
69
69
|
},
|
|
70
70
|
"scripts": {
|
|
71
71
|
"build": "tsup",
|
|
72
72
|
"dev": "tsup --watch",
|
|
73
|
-
"test": "vitest run",
|
|
73
|
+
"test": "cd ../.. && vitest run packages/svelte/",
|
|
74
74
|
"typecheck": "tsc --noEmit",
|
|
75
75
|
"clean": "rm -rf dist"
|
|
76
76
|
}
|