@directive-run/lit 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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/dev-true.ts","../src/index.ts"],"names":["dev_true_default","directiveContext","DirectiveController","host","system","DerivedController","key","result","id","FactController","factKey","InspectController","options","computeInspectState","update","throttled","cleanup","createThrottle","RequirementStatusController","statusPlugin","type","DirectiveSelectorController","selector","equalityFn","defaultEquality","initial","runTrackedSelector","unsub","onUpdate","depsChanged","WatchController","callback","ExplainController","requirementId","ConstraintStatusController","constraintId","inspection","c","OptimisticUpdateController","requirementType","updateFn","status","SystemController","createSystem","err","ModuleController","moduleDef","config","allPlugins","sp","createRequirementStatusPlugin","derivationKeys","getDerived","event","createDerived","createFact","createInspect","createRequirementStatus","createWatch","derivationId","createDirectiveSelector","createExplain","createConstraintStatus","createOptimisticUpdate","createModuleController","createModule","useDispatch","assertSystem","useEvents","HistoryController","_host","_system","buildHistoryState","getHistory","useHistory","getFact","createTypedHooks","NamespacedSelectorController","keys","createNamespacedSelector","QuerySystemController","factory","HydrationController","snapshot","mergedFacts","mergeHydrationFacts","AuditLedgerController","ledger","filter","opts","requestedPollMs","entryCount","next","moved"],"mappings":"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","file":"index.cjs","sourcesContent":["export default typeof process !== \"undefined\" &&\n process.env?.NODE_ENV !== \"production\";\n","/**\n * Lit Adapter - Consolidated Web Components integration for Directive\n *\n * Controllers: DerivedController, FactController,\n * InspectController (with throttle), RequirementStatusController,\n * DirectiveSelectorController,\n * WatchController (with fact mode), SystemController,\n * ExplainController, ConstraintStatusController, OptimisticUpdateController, ModuleController\n *\n * Factories: createDerived, createFact, createInspect,\n * createRequirementStatus, createWatch,\n * createDirectiveSelector, useDispatch, useEvents, useHistory,\n * getDerived, getFact, createTypedHooks, shallowEqual\n */\n\nimport type {\n CreateSystemOptionsSingle,\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 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 type TrackedSelectorResult,\n assertSystem,\n buildHistoryState,\n computeInspectState,\n createThrottle,\n defaultEquality,\n depsChanged,\n mergeHydrationFacts,\n runTrackedSelector,\n shallowEqual,\n} from \"@directive-run/core/adapter-utils\";\nimport type { ReactiveController, ReactiveControllerHost } from \"lit\";\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// Context\n// ============================================================================\n\n/**\n * Context key for Directive system.\n * Use with @lit/context for dependency injection across shadow DOM boundaries.\n */\nexport const directiveContext = Symbol(\"directive\");\n\n// ============================================================================\n// Base Controller\n// ============================================================================\n\n/**\n * Base controller that manages system subscription lifecycle.\n */\nabstract class DirectiveController implements ReactiveController {\n protected host: ReactiveControllerHost;\n protected system: SingleModuleSystem<any>;\n protected unsubscribe?: () => void;\n\n constructor(host: ReactiveControllerHost, system: SingleModuleSystem<any>) {\n this.host = host;\n this.system = system;\n host.addController(this);\n }\n\n hostConnected(): void {\n this.subscribe();\n }\n\n hostDisconnected(): void {\n this.unsubscribe?.();\n this.unsubscribe = undefined;\n }\n\n protected abstract subscribe(): void;\n\n protected requestUpdate(): void {\n this.host.requestUpdate();\n }\n}\n\n// ============================================================================\n// Core Controllers\n// ============================================================================\n\n/**\n * Reactive controller for derivations.\n * Accepts a single key (string) or an array of keys (string[]).\n * - Single key: `.value` returns `T`\n * - Array of keys: `.value` returns `Record<string, unknown>`\n */\nexport class DerivedController<T> extends DirectiveController {\n private keys: string[];\n private isMulti: boolean;\n value: T;\n\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n key: string | string[],\n ) {\n super(host, system);\n this.isMulti = Array.isArray(key);\n this.keys = this.isMulti ? (key as string[]) : [key as string];\n this.value = this.getValues();\n\n if (isDevelopment) {\n if (!this.isMulti && this.value === undefined) {\n console.warn(\n `[Directive] DerivedController(\"${this.keys[0]}\") returned undefined. ` +\n `Check that \"${this.keys[0]}\" is defined in your module's derive property.`,\n );\n }\n }\n }\n\n private getValues(): T {\n if (this.isMulti) {\n const result: Record<string, unknown> = {};\n for (const id of this.keys) {\n result[id] = this.system.read(id);\n }\n return result as T;\n }\n return this.system.read(this.keys[0]!) as T;\n }\n\n protected subscribe(): void {\n this.value = this.getValues();\n this.unsubscribe = this.system.subscribe(this.keys, () => {\n this.value = this.getValues();\n this.requestUpdate();\n });\n }\n}\n\n/**\n * Reactive controller for a single fact value.\n */\nexport class FactController<T> extends DirectiveController {\n private factKey: string;\n value: T | undefined;\n\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n factKey: string,\n ) {\n super(host, system);\n this.factKey = factKey;\n this.value = system.facts.$store.get(factKey) as T | undefined;\n\n if (isDevelopment) {\n if (!system.facts.$store.has(factKey)) {\n console.warn(\n `[Directive] FactController(\"${factKey}\") — fact not found in store. ` +\n `Check that \"${factKey}\" is defined in your module's schema.`,\n );\n }\n }\n }\n\n protected subscribe(): void {\n this.value = this.system.facts.$store.get(this.factKey) as T | undefined;\n this.unsubscribe = this.system.facts.$store.subscribe(\n [this.factKey],\n () => {\n this.value = this.system.facts.$store.get(this.factKey) as\n | T\n | undefined;\n this.requestUpdate();\n },\n );\n }\n}\n\n/**\n * Consolidated inspection controller.\n * Returns InspectState with optional throttling.\n */\nexport class InspectController extends DirectiveController {\n value: InspectState;\n private throttleMs: number;\n private throttleCleanup?: () => void;\n private unsubSettled?: () => void;\n\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n options?: { throttleMs?: number },\n ) {\n super(host, system);\n this.throttleMs = options?.throttleMs ?? 0;\n this.value = computeInspectState(system);\n }\n\n protected subscribe(): void {\n this.value = computeInspectState(this.system);\n\n const update = () => {\n this.value = computeInspectState(this.system);\n this.requestUpdate();\n };\n\n if (this.throttleMs > 0) {\n const { throttled, cleanup } = createThrottle(update, this.throttleMs);\n this.throttleCleanup = cleanup;\n this.unsubscribe = this.system.facts.$store.subscribeAll(throttled);\n this.unsubSettled = this.system.onSettledChange(throttled);\n } else {\n this.unsubscribe = this.system.facts.$store.subscribeAll(update);\n this.unsubSettled = this.system.onSettledChange(update);\n }\n }\n\n hostDisconnected(): void {\n this.throttleCleanup?.();\n this.unsubSettled?.();\n super.hostDisconnected();\n }\n}\n\n/**\n * Reactive controller for requirement status.\n */\nexport class RequirementStatusController implements ReactiveController {\n private host: ReactiveControllerHost;\n private statusPlugin: StatusPlugin;\n private type: string;\n private unsubscribe?: () => void;\n value: RequirementTypeStatus;\n\n constructor(\n host: ReactiveControllerHost,\n statusPlugin: StatusPlugin,\n type: string,\n ) {\n this.host = host;\n this.statusPlugin = statusPlugin;\n this.type = type;\n this.value = statusPlugin.getStatus(type);\n host.addController(this);\n }\n\n hostConnected(): void {\n this.value = this.statusPlugin.getStatus(this.type);\n this.unsubscribe = this.statusPlugin.subscribe(() => {\n this.value = this.statusPlugin.getStatus(this.type);\n this.host.requestUpdate();\n });\n }\n\n hostDisconnected(): void {\n this.unsubscribe?.();\n this.unsubscribe = undefined;\n }\n}\n\n// ============================================================================\n// Selector Controllers\n// ============================================================================\n\n/**\n * Reactive controller for selecting across all facts.\n * Uses `withTracking()` for auto-tracking when constructed with `autoTrack: true`.\n */\nexport class DirectiveSelectorController<\n S extends ModuleSchema = ModuleSchema,\n R = unknown,\n> extends DirectiveController {\n private selector: (state: InferSelectorState<S>) => R;\n private equalityFn: (a: R, b: R) => boolean;\n private autoTrack: boolean;\n private deriveKeySet: Set<string>;\n private trackedFactKeys: string[] = [];\n private trackedDeriveKeys: string[] = [];\n private unsubs: Array<() => void> = [];\n value: R;\n\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<S>,\n selector: (state: InferSelectorState<S>) => R,\n equalityFn: (a: R, b: R) => boolean = defaultEquality,\n options?: { autoTrack?: boolean },\n ) {\n super(host, system);\n this.selector = selector;\n this.equalityFn = equalityFn;\n this.autoTrack = options?.autoTrack ?? true;\n this.deriveKeySet = new Set(Object.keys(system.derive ?? {}));\n\n const initial = this.runWithTracking();\n this.value = initial.value;\n this.trackedFactKeys = initial.factKeys;\n this.trackedDeriveKeys = initial.deriveKeys;\n }\n\n private runWithTracking(): TrackedSelectorResult<R> {\n return runTrackedSelector(\n this.system,\n this.deriveKeySet,\n this.selector as (state: Record<string, unknown>) => R,\n );\n }\n\n private resubscribe(): void {\n for (const unsub of this.unsubs) unsub();\n this.unsubs = [];\n\n const onUpdate = () => {\n const result = this.runWithTracking();\n if (!this.equalityFn(this.value, result.value)) {\n this.value = result.value;\n this.requestUpdate();\n }\n if (this.autoTrack) {\n // Re-track: check if deps changed\n if (\n depsChanged(\n this.trackedFactKeys,\n result.factKeys,\n this.trackedDeriveKeys,\n result.deriveKeys,\n )\n ) {\n this.trackedFactKeys = result.factKeys;\n this.trackedDeriveKeys = result.deriveKeys;\n this.resubscribe();\n }\n }\n };\n\n if (this.autoTrack) {\n if (this.trackedFactKeys.length > 0) {\n this.unsubs.push(\n this.system.facts.$store.subscribe(this.trackedFactKeys, onUpdate),\n );\n } else if (this.trackedDeriveKeys.length === 0) {\n this.unsubs.push(this.system.facts.$store.subscribeAll(onUpdate));\n }\n if (this.trackedDeriveKeys.length > 0) {\n this.unsubs.push(\n this.system.subscribe(this.trackedDeriveKeys, onUpdate),\n );\n }\n } else {\n this.unsubs.push(this.system.facts.$store.subscribeAll(onUpdate));\n }\n }\n\n protected subscribe(): void {\n const result = this.runWithTracking();\n this.value = result.value;\n this.trackedFactKeys = result.factKeys;\n this.trackedDeriveKeys = result.deriveKeys;\n this.resubscribe();\n }\n\n hostDisconnected(): void {\n for (const unsub of this.unsubs) unsub();\n this.unsubs = [];\n super.hostDisconnected();\n }\n}\n\n/**\n * Reactive controller that watches a fact or derivation and calls a callback on change.\n * The key is auto-detected — works with both fact keys and derivation keys.\n */\nexport class WatchController<T> extends DirectiveController {\n private key: string;\n private callback: (newValue: T, previousValue: T | undefined) => void;\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. */\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n key: string,\n callback: (newValue: T, previousValue: T | undefined) => void,\n ) {\n super(host, system);\n this.key = key;\n this.callback = callback;\n }\n\n protected subscribe(): void {\n this.unsubscribe = this.system.watch<T>(this.key, this.callback);\n }\n}\n\n// ============================================================================\n// New Controllers\n// ============================================================================\n\n/**\n * Reactive controller for requirement explanations.\n */\nexport class ExplainController extends DirectiveController {\n private requirementId: string;\n value: string | null;\n private unsubSettled?: () => void;\n\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n requirementId: string,\n ) {\n super(host, system);\n this.requirementId = requirementId;\n this.value = system.explain(requirementId);\n }\n\n protected subscribe(): void {\n this.value = this.system.explain(this.requirementId);\n\n const update = () => {\n this.value = this.system.explain(this.requirementId);\n this.requestUpdate();\n };\n\n this.unsubscribe = this.system.facts.$store.subscribeAll(update);\n this.unsubSettled = this.system.onSettledChange(update);\n }\n\n hostDisconnected(): void {\n this.unsubSettled?.();\n super.hostDisconnected();\n }\n}\n\n/**\n * Reactive controller for constraint status.\n */\nexport class ConstraintStatusController extends DirectiveController {\n private constraintId?: string;\n value: ConstraintInfo[] | ConstraintInfo | null;\n private unsubSettled?: () => void;\n\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n constraintId?: string,\n ) {\n super(host, system);\n this.constraintId = constraintId;\n this.value = this.getVal();\n }\n\n private getVal(): ConstraintInfo[] | ConstraintInfo | null {\n const inspection = this.system.inspect();\n if (!this.constraintId) return inspection.constraints;\n return (\n inspection.constraints.find(\n (c: ConstraintInfo) => c.id === this.constraintId,\n ) ?? null\n );\n }\n\n protected subscribe(): void {\n this.value = this.getVal();\n\n const update = () => {\n this.value = this.getVal();\n this.requestUpdate();\n };\n\n this.unsubscribe = this.system.facts.$store.subscribeAll(update);\n this.unsubSettled = this.system.onSettledChange(update);\n }\n\n hostDisconnected(): void {\n this.unsubSettled?.();\n super.hostDisconnected();\n }\n}\n\n/**\n * Reactive controller for optimistic updates.\n */\nexport class OptimisticUpdateController implements ReactiveController {\n private host: ReactiveControllerHost;\n private system: SingleModuleSystem<any>;\n private statusPlugin?: StatusPlugin;\n private requirementType?: string;\n private snapshot: SystemSnapshot | null = null;\n private statusUnsub: (() => void) | null = null;\n\n isPending = false;\n error: Error | null = null;\n\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n statusPlugin?: StatusPlugin,\n requirementType?: string,\n ) {\n this.host = host;\n this.system = system;\n this.statusPlugin = statusPlugin;\n this.requirementType = requirementType;\n host.addController(this);\n }\n\n hostConnected(): void {}\n\n hostDisconnected(): void {\n this.statusUnsub?.();\n this.statusUnsub = null;\n }\n\n rollback(): void {\n if (this.snapshot) {\n this.system.restore(this.snapshot);\n this.snapshot = null;\n }\n this.isPending = false;\n this.error = null;\n this.statusUnsub?.();\n this.statusUnsub = null;\n this.host.requestUpdate();\n }\n\n mutate(updateFn: () => void): void {\n this.snapshot = this.system.getSnapshot();\n this.isPending = true;\n this.error = null;\n this.system.batch(updateFn);\n this.host.requestUpdate();\n\n if (this.statusPlugin && this.requirementType) {\n this.statusUnsub?.();\n this.statusUnsub = this.statusPlugin.subscribe(() => {\n const status = this.statusPlugin!.getStatus(this.requirementType!);\n if (!status.isLoading && !status.hasError) {\n this.snapshot = null;\n this.isPending = false;\n this.statusUnsub?.();\n this.statusUnsub = null;\n this.host.requestUpdate();\n } else if (status.hasError) {\n this.error = status.lastError;\n this.rollback();\n }\n });\n }\n }\n}\n\n/**\n * Reactive controller that creates and manages a Directive system.\n * The system is automatically started when the host connects and destroyed when it disconnects.\n */\nexport class SystemController<M extends ModuleSchema>\n implements ReactiveController\n{\n private options: ModuleDef<M> | CreateSystemOptionsSingle<M>;\n private _system: SingleModuleSystem<M> | null = null;\n\n constructor(\n host: ReactiveControllerHost,\n options: ModuleDef<M> | CreateSystemOptionsSingle<M>,\n ) {\n this.options = options;\n host.addController(this);\n }\n\n get system(): SingleModuleSystem<M> {\n if (!this._system) {\n throw new Error(\n \"[Directive] SystemController.system is not available. \" +\n \"This can happen if:\\n\" +\n \" 1. Accessed before hostConnected (e.g., in a class field initializer)\\n\" +\n \" 2. Accessed after hostDisconnected (system was destroyed)\\n\" +\n \"Solution: Access system only in lifecycle methods (connectedCallback, render) \" +\n \"or after the element is connected to the DOM.\",\n );\n }\n return this._system;\n }\n\n hostConnected(): void {\n const isModule = \"id\" in this.options && \"schema\" in this.options;\n const system = isModule\n ? createSystem({ module: this.options as ModuleDef<M> })\n : createSystem(this.options as CreateSystemOptionsSingle<M>);\n this._system = system as unknown as SingleModuleSystem<M>;\n this._system.start();\n }\n\n hostDisconnected(): void {\n // RFC 0009 follow-up (R18 Tier 2-B): destroyAsync so source\n // unsubscribes complete; fire-and-forget with swallow-catch\n // (Lit's hostDisconnected is sync).\n this._system?.destroyAsync().catch((err: unknown) => {\n if (isDevelopment)\n console.warn(\"[Directive] destroyAsync rejected during unmount:\", err);\n });\n this._system = null;\n }\n}\n\n/**\n * Module controller — zero-config all-in-one.\n * Creates system, starts it, subscribes to all facts/derivations.\n */\nexport class ModuleController<M extends ModuleSchema>\n implements ReactiveController\n{\n private host: ReactiveControllerHost;\n private moduleDef: ModuleDef<M>;\n private config?: {\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 };\n\n private _system: SingleModuleSystem<M> | null = null;\n private unsubFacts?: () => void;\n private unsubDerived?: () => void;\n\n facts: InferFacts<M> = {} as InferFacts<M>;\n derived: InferDerivations<M> = {} as InferDerivations<M>;\n statusPlugin?: StatusPlugin;\n\n get system(): SingleModuleSystem<M> {\n if (!this._system) {\n throw new Error(\n \"[Directive] ModuleController.system is not available before hostConnected.\",\n );\n }\n return this._system;\n }\n\n get events(): SingleModuleSystem<M>[\"events\"] {\n return this.system.events;\n }\n\n constructor(\n host: ReactiveControllerHost,\n moduleDef: ModuleDef<M>,\n config?: {\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 },\n ) {\n this.host = host;\n this.moduleDef = moduleDef;\n this.config = config;\n host.addController(this);\n }\n\n hostConnected(): void {\n const allPlugins = [...(this.config?.plugins ?? [])];\n\n if (this.config?.status) {\n const sp = createRequirementStatusPlugin();\n this.statusPlugin = sp;\n allPlugins.push(sp.plugin as Plugin<any>);\n }\n\n const system = createSystem({\n module: this.moduleDef,\n plugins: allPlugins.length > 0 ? allPlugins : undefined,\n trace: this.config?.trace,\n errorBoundary: this.config?.errorBoundary,\n tickMs: this.config?.tickMs,\n zeroConfig: this.config?.zeroConfig,\n initialFacts: this.config?.initialFacts,\n } as any) as unknown as SingleModuleSystem<M>;\n\n this._system = system;\n system.start();\n\n // Subscribe to all facts\n this.facts = system.facts.$store.toObject() as InferFacts<M>;\n this.unsubFacts = system.facts.$store.subscribeAll(() => {\n this.facts = system.facts.$store.toObject() as InferFacts<M>;\n this.host.requestUpdate();\n });\n\n // Subscribe to all derivations\n const derivationKeys = Object.keys(system.derive ?? {});\n const getDerived = (): InferDerivations<M> => {\n const result: Record<string, unknown> = {};\n for (const key of derivationKeys) {\n result[key] = system.read(key);\n }\n return result as InferDerivations<M>;\n };\n this.derived = getDerived();\n\n if (derivationKeys.length > 0) {\n this.unsubDerived = system.subscribe(derivationKeys, () => {\n this.derived = getDerived();\n this.host.requestUpdate();\n });\n }\n }\n\n hostDisconnected(): void {\n this.unsubFacts?.();\n this.unsubDerived?.();\n // follow-up — R18 Tier 2-B switched `SystemController` and\n // `DirectiveQueryController` to `destroyAsync` but missed the\n // zero-config `ModuleController` (this class). Same rationale:\n // source unsubscribes are async (Supabase, MCP); sync destroy\n // would drop those Promises on the floor and leave brokers\n // holding ghost subscriptions until heartbeat. Fire-and-forget\n // with a swallow-catch — Lit's hostDisconnected is sync.\n this._system?.destroyAsync().catch((err: unknown) => {\n if (isDevelopment)\n console.warn(\"[Directive] destroyAsync rejected during unmount:\", err);\n });\n this._system = null;\n }\n\n dispatch(event: InferEvents<M>): void {\n this.system.dispatch(event);\n }\n}\n\n// ============================================================================\n// Factory Functions (active)\n// ============================================================================\n\nexport function createDerived<T>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n key: string | string[],\n): DerivedController<T> {\n return new DerivedController<T>(host, system, key);\n}\n\nexport function createFact<T>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n factKey: string,\n): FactController<T> {\n return new FactController<T>(host, system, factKey);\n}\n\n/**\n * Create an inspect controller.\n * Returns InspectState; pass `{ throttleMs }` for throttled updates.\n */\nexport function createInspect(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n options?: { throttleMs?: number },\n): InspectController {\n return new InspectController(host, system, options);\n}\n\nexport function createRequirementStatus(\n host: ReactiveControllerHost,\n statusPlugin: StatusPlugin,\n type: string,\n): RequirementStatusController {\n return new RequirementStatusController(host, statusPlugin, type);\n}\n\nexport function createWatch<T>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n derivationId: string,\n callback: (newValue: T, previousValue: T | undefined) => void,\n): WatchController<T> {\n return new WatchController<T>(host, system, derivationId, callback);\n}\n\nexport function createDirectiveSelector<S extends ModuleSchema, R>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<S>,\n selector: (state: InferSelectorState<S>) => R,\n equalityFn: (a: R, b: R) => boolean = defaultEquality,\n options?: { autoTrack?: boolean },\n): DirectiveSelectorController<S, R> {\n return new DirectiveSelectorController<S, R>(\n host,\n system,\n selector,\n equalityFn,\n options,\n );\n}\n\nexport function createExplain(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n requirementId: string,\n): ExplainController {\n return new ExplainController(host, system, requirementId);\n}\n\nexport function createConstraintStatus(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n constraintId?: string,\n): ConstraintStatusController {\n return new ConstraintStatusController(host, system, constraintId);\n}\n\nexport function createOptimisticUpdate(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n statusPlugin?: StatusPlugin,\n requirementType?: string,\n): OptimisticUpdateController {\n return new OptimisticUpdateController(\n host,\n system,\n statusPlugin,\n requirementType,\n );\n}\n\n/**\n * Build a `ModuleController` from a Directive module definition.\n *\n * The function is exported as both `createModuleController` (preferred)\n * and `createModule` (legacy alias). The original `createModule` name\n * collides with `@directive-run/core`'s `createModule` — importing\n * both into the same scope shadows whichever lands last in editor\n * auto-import order. New code should use `createModuleController`;\n * the `createModule` alias remains so existing imports still resolve.\n */\nexport function createModuleController<M extends ModuleSchema>(\n host: ReactiveControllerHost,\n moduleDef: ModuleDef<M>,\n config?: {\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 },\n): ModuleController<M> {\n return new ModuleController<M>(host, moduleDef, config);\n}\n\n/**\n * Legacy alias for `createModuleController`. Collides by name with\n * `@directive-run/core`'s `createModule`. New code should prefer\n * `createModuleController`.\n *\n * @deprecated Renamed to `createModuleController` — same shape, no\n * import collision with `@directive-run/core`. The function-wrapper\n * shape (vs `export const x = y`) ensures the `@deprecated` JSDoc\n * tag renders the strikethrough in every TS-aware editor.\n */\nexport function createModule<M extends ModuleSchema>(\n host: ReactiveControllerHost,\n moduleDef: ModuleDef<M>,\n config?: Parameters<typeof createModuleController<M>>[2],\n): ModuleController<M> {\n return createModuleController<M>(host, moduleDef, config);\n}\n\n// ============================================================================\n// Functional Helpers\n// ============================================================================\n\nexport function useDispatch<M extends ModuleSchema = ModuleSchema>(\n system: SingleModuleSystem<M>,\n): (event: InferEvents<M>) => void {\n assertSystem(\"useDispatch\", system);\n return (event: InferEvents<M>) => {\n system.dispatch(event);\n };\n}\n\n/**\n * Returns the system's events dispatcher.\n */\nexport function useEvents<M extends ModuleSchema = ModuleSchema>(\n system: SingleModuleSystem<M>,\n): SingleModuleSystem<M>[\"events\"] {\n assertSystem(\"useEvents\", system);\n return system.events;\n}\n\n/**\n * Reactive controller for history state.\n * Triggers host updates when snapshots change or navigation occurs.\n *\n * @example\n * ```typescript\n * class MyElement extends LitElement {\n * private _history = new HistoryController(this, system);\n * render() {\n * const h = this._history.value;\n * return html`<button ?disabled=${!h?.canGoBack} @click=${() => h?.goBack()}>Undo</button>`;\n * }\n * }\n * ```\n */\nexport class HistoryController implements ReactiveController {\n value: HistoryState | null = null;\n private _unsub?: () => void;\n\n constructor(\n private _host: ReactiveControllerHost,\n private _system: SingleModuleSystem<any>,\n ) {\n this._host.addController(this);\n }\n\n hostConnected(): void {\n this.value = buildHistoryState(this._system);\n this._unsub = this._system.onHistoryChange(() => {\n this.value = buildHistoryState(this._system);\n this._host.requestUpdate();\n });\n }\n\n hostDisconnected(): void {\n this._unsub?.();\n this._unsub = undefined;\n }\n}\n\n/**\n * Snapshot-only history helper. Returns the current `HistoryState`\n * once and does not re-fire when history mutates.\n *\n * **Named `getHistory` to match the snapshot semantics.** The Lit\n * adapter intentionally provides a non-reactive variant alongside\n * the reactive `HistoryController` so callers reading history once\n * (e.g. logging the last snapshot before a destroy) don't have to\n * spin up a controller. The previous name `useHistory` collided\n * with the reactive `useHistory` semantics in\n * `@directive-run/{react,vue,svelte,solid}` where the hook IS\n * reactive — same name, opposite contract.\n *\n * For reactive history, use `HistoryController`.\n */\nexport function getHistory(\n system: SingleModuleSystem<any>,\n): HistoryState | null {\n assertSystem(\"getHistory\", system);\n return buildHistoryState(system);\n}\n\n/**\n * @deprecated Renamed to `getHistory`. The Lit functional helper is\n * snapshot-only; React/Vue/Svelte/Solid `useHistory` is reactive.\n * Use `HistoryController` for the reactive Lit equivalent. The\n * function-wrapper shape (vs `export const x = y`) ensures the\n * `@deprecated` JSDoc tag renders in every TS-aware editor.\n */\nexport function useHistory(\n system: SingleModuleSystem<any>,\n): HistoryState | null {\n return getHistory(system);\n}\n\nexport function getDerived<T>(\n system: SingleModuleSystem<any>,\n derivationId: string,\n): () => T {\n return () => system.read(derivationId) as T;\n}\n\nexport function getFact<T>(\n system: SingleModuleSystem<any>,\n factKey: string,\n): () => T | undefined {\n return () => system.facts.$store.get(factKey) as T | undefined;\n}\n\n// ============================================================================\n// Typed Hooks Factory\n// ============================================================================\n\nexport function createTypedHooks<M extends ModuleSchema>(): {\n createDerived: <K extends keyof InferDerivations<M>>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<M>,\n derivationId: K,\n ) => DerivedController<InferDerivations<M>[K]>;\n createFact: <K extends keyof InferFacts<M>>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<M>,\n factKey: K,\n ) => FactController<InferFacts<M>[K]>;\n useDispatch: (\n system: SingleModuleSystem<M>,\n ) => (event: InferEvents<M>) => void;\n useEvents: (system: SingleModuleSystem<M>) => SingleModuleSystem<M>[\"events\"];\n createWatch: <K extends string>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<M>,\n key: K,\n callback: (newValue: unknown, previousValue: unknown) => void,\n ) => WatchController<unknown>;\n} {\n return {\n createDerived: <K extends keyof InferDerivations<M>>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<M>,\n derivationId: K,\n ) =>\n createDerived<InferDerivations<M>[K]>(\n host,\n system,\n derivationId as string,\n ),\n createFact: <K extends keyof InferFacts<M>>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<M>,\n factKey: K,\n ) => createFact<InferFacts<M>[K]>(host, system, factKey as string),\n useDispatch: (system: SingleModuleSystem<M>) => {\n return (event: InferEvents<M>) => {\n system.dispatch(event);\n };\n },\n useEvents: (system: SingleModuleSystem<M>) => system.events,\n createWatch: <K extends string>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<M>,\n key: K,\n callback: (newValue: unknown, previousValue: unknown) => void,\n ) => createWatch<unknown>(host, system, key, callback),\n };\n}\n\n// ============================================================================\n// NamespacedSelectorController — select from a NamespacedSystem\n// ============================================================================\n\n/**\n * Reactive controller that selects from a NamespacedSystem.\n * Subscribes to specified keys and triggers host updates.\n *\n * @example\n * ```typescript\n * class MyElement extends LitElement {\n * private token = new NamespacedSelectorController(\n * this, system, [\"auth.token\"], (s) => s.facts.auth.token,\n * );\n * render() {\n * return html`<span>${this.token.value}</span>`;\n * }\n * }\n * ```\n */\nexport class NamespacedSelectorController<Modules extends ModulesMap, R>\n implements ReactiveController\n{\n private host: ReactiveControllerHost;\n private system: NamespacedSystem<Modules>;\n private keys: string[];\n private selector: (system: NamespacedSystem<Modules>) => R;\n private unsubscribe?: () => void;\n value: R;\n\n constructor(\n host: ReactiveControllerHost,\n system: NamespacedSystem<Modules>,\n keys: string[],\n selector: (system: NamespacedSystem<Modules>) => R,\n ) {\n this.host = host;\n this.system = system;\n this.keys = keys;\n this.selector = selector;\n this.value = selector(system);\n host.addController(this);\n }\n\n hostConnected(): void {\n this.value = this.selector(this.system);\n this.unsubscribe = this.system.subscribe(this.keys, () => {\n this.value = this.selector(this.system);\n this.host.requestUpdate();\n });\n }\n\n hostDisconnected(): void {\n this.unsubscribe?.();\n this.unsubscribe = undefined;\n }\n}\n\nexport function createNamespacedSelector<Modules extends ModulesMap, R>(\n host: ReactiveControllerHost,\n system: NamespacedSystem<Modules>,\n keys: string[],\n selector: (system: NamespacedSystem<Modules>) => R,\n): NamespacedSelectorController<Modules, R> {\n return new NamespacedSelectorController(host, system, keys, selector);\n}\n\n// ============================================================================\n// QuerySystemController — Stable query system with Lit lifecycle\n// ============================================================================\n\n/**\n * Lit reactive controller that creates and manages a query system.\n * Starts on connect, destroys on disconnect.\n *\n * @example\n * ```typescript\n * import { LitElement, html } from \"lit\";\n * import { QuerySystemController } from \"@directive-run/lit\";\n * import { createQuerySystem } from \"@directive-run/query\";\n *\n * class MyApp extends LitElement {\n * private app = new QuerySystemController(this, () =>\n * createQuerySystem({\n * facts: { userId: \"\" },\n * queries: { user: { key: ..., fetcher: ... } },\n * autoStart: false,\n * })\n * );\n *\n * render() {\n * const user = this.app.system.read(\"user\");\n * return html`<div>${user.data?.name}</div>`;\n * }\n * }\n * ```\n */\nexport class QuerySystemController<\n T extends {\n start: () => void;\n destroy: () => void;\n isRunning?: boolean;\n [key: string]: any;\n },\n> implements ReactiveController\n{\n private _system: T | null = null;\n private factory: () => T;\n\n constructor(host: ReactiveControllerHost, factory: () => T) {\n this.factory = factory;\n host.addController(this);\n }\n\n get system(): T {\n if (!this._system) {\n throw new Error(\n \"[Directive] QuerySystemController.system is not available. \" +\n \"Access it only in lifecycle methods or after the element is connected.\",\n );\n }\n return this._system;\n }\n\n hostConnected(): void {\n this._system = this.factory();\n if (!this._system.isRunning) {\n this._system.start();\n }\n }\n\n hostDisconnected(): void {\n // RFC 0009 follow-up (R18 Tier 2-B): destroyAsync so source\n // unsubscribes complete; fire-and-forget with swallow-catch\n // (Lit's hostDisconnected is sync).\n this._system?.destroyAsync().catch((err: unknown) => {\n if (isDevelopment)\n console.warn(\"[Directive] destroyAsync rejected during unmount:\", err);\n });\n this._system = null;\n }\n}\n\n// ============================================================================\n// SSR Hydration\n// ============================================================================\n\n/**\n * Lit reactive controller for SSR hydration.\n * Accepts a DistributableSnapshot and creates a hydrated system.\n *\n * @example\n * ```typescript\n * class MyElement extends LitElement {\n * private hydration = new HydrationController(this, serverSnapshot);\n * private system = this.hydration.createSystem(myModule);\n * }\n * ```\n */\nexport class HydrationController implements ReactiveController {\n private snapshot: Record<string, unknown> | undefined;\n private systems: SingleModuleSystem<any>[] = [];\n\n constructor(\n host: ReactiveControllerHost,\n snapshot?: Record<string, unknown>,\n ) {\n this.snapshot = snapshot;\n host.addController(this);\n }\n\n hostConnected(): void {}\n\n hostDisconnected(): void {\n // RFC 0009 follow-up (R18 Tier 2-B): destroyAsync per system so\n // source unsubscribes complete; fire-and-forget with swallow-catch\n // (Lit's hostDisconnected is sync).\n for (const system of this.systems) {\n system.destroyAsync().catch((err: unknown) => {\n if (isDevelopment)\n console.warn(\n \"[Directive] destroyAsync rejected during unmount:\",\n err,\n );\n });\n }\n this.systems = [];\n }\n\n createSystem<S extends ModuleSchema>(\n moduleDef: ModuleDef<S>,\n config?: {\n plugins?: Plugin<any>[];\n trace?: TraceOption;\n errorBoundary?: ErrorBoundaryConfig;\n tickMs?: number;\n zeroConfig?: boolean;\n initialFacts?: Record<string, any>;\n },\n ): SingleModuleSystem<S> {\n const mergedFacts = mergeHydrationFacts(\n this.snapshot,\n config?.initialFacts,\n );\n const system = createSystem({\n module: moduleDef,\n plugins: config?.plugins,\n trace: config?.trace,\n errorBoundary: config?.errorBoundary,\n tickMs: config?.tickMs,\n zeroConfig: config?.zeroConfig,\n initialFacts: mergedFacts,\n } as any) as unknown as SingleModuleSystem<S>;\n\n this.systems.push(system);\n\n if (typeof window !== \"undefined\") {\n system.start();\n }\n\n return system;\n }\n}\n\n// ============================================================================\n// AuditLedgerController — live ledger entries with filter (R4.I parity)\n// ============================================================================\n\nimport type { AuditEntry, AuditLedger, QueryFilter } from \"@directive-run/core\";\n\n/**\n * Reactive controller exposing the latest audit-ledger entries matching\n * `filter` as `.value`. Polls (default 250 ms — override with `pollMs`)\n * and re-renders the host on each tick that brings new matches.\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 * @example\n * ```ts\n * import { AuditLedgerController } from \"@directive-run/lit\";\n *\n * class AuditLog extends LitElement {\n * private ledgerCtrl = new AuditLedgerController(\n * this,\n * ledger,\n * { kind: \"constraint.evaluate\", limit: 20 },\n * );\n *\n * render() {\n * return html`<ul>\n * ${this.ledgerCtrl.value.map(e => html`<li>${e.kind} @ ${e.ts}</li>`)}\n * </ul>`;\n * }\n * }\n * ```\n */\nexport class AuditLedgerController implements ReactiveController {\n private host: ReactiveControllerHost;\n private ledger: AuditLedger;\n private filter: QueryFilter;\n private pollMs: number;\n private intervalId: ReturnType<typeof setInterval> | null = null;\n\n /**\n * Latest matching audit entries. Updates on each poll tick when the\n * seq-window (first/last entry seq) changes. Lit `requestUpdate()` is\n * only called when the window moves — in-place tombstone replacement\n * within the visible window does NOT trigger re-render (use the ledger's\n * onWrite hook for revision-level updates when added).\n */\n value: readonly AuditEntry[];\n\n constructor(\n host: ReactiveControllerHost,\n ledger: AuditLedger,\n filter: QueryFilter = {},\n opts: { pollMs?: number } = {},\n ) {\n this.host = host;\n this.ledger = ledger;\n this.filter = filter;\n const requestedPollMs = opts.pollMs ?? 250;\n this.pollMs = Math.max(50, requestedPollMs);\n\n if (isDevelopment) {\n if (opts.pollMs !== undefined && opts.pollMs < 50) {\n console.warn(\n `[Directive] AuditLedgerController pollMs=${opts.pollMs} is below the 50 ms floor; clamped to 50 ms.`,\n );\n }\n if (this.pollMs < 100) {\n const entryCount = ledger.toJSON().entries.length;\n if (entryCount > 1000) {\n console.warn(\n `[Directive] AuditLedgerController polling every ${this.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 this.value = ledger.query(filter);\n host.addController(this);\n }\n\n hostConnected(): void {\n this.intervalId = setInterval(() => {\n const next = this.ledger.query(this.filter);\n // Always replace the array reference so consumers reading\n // `.value` see the latest snapshot, but only request a render\n // when the seq-window actually moved. At steady-state capacity\n // (e.g. 10k entries rolling over) the length is constant — using\n // length-diff alone misses every change. Compare the first and\n // last seq instead. (R4.C7)\n const moved =\n next[0]?.seq !== this.value[0]?.seq ||\n next[next.length - 1]?.seq !== this.value[this.value.length - 1]?.seq;\n this.value = next;\n if (moved) {\n this.host.requestUpdate();\n }\n }, this.pollMs);\n }\n\n hostDisconnected(): void {\n if (this.intervalId !== null) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/dev-true.ts","../src/index.ts"],"names":["dev_true_default","directiveContext","DirectiveController","host","system","DerivedController","key","result","id","FactController","factKey","InspectController","options","computeInspectState","update","throttled","cleanup","createThrottle","RequirementStatusController","statusPlugin","type","DirectiveSelectorController","selector","equalityFn","defaultEquality","initial","runTrackedSelector","unsub","onUpdate","depsChanged","WatchController","callback","ExplainController","requirementId","ConstraintStatusController","constraintId","inspection","c","OptimisticUpdateController","requirementType","updateFn","status","SystemController","createSystem","err","ModuleController","moduleDef","config","allPlugins","sp","createRequirementStatusPlugin","derivationKeys","getDerived","event","createDerived","createFact","createInspect","createRequirementStatus","createWatch","derivationId","createDirectiveSelector","createExplain","createConstraintStatus","createOptimisticUpdate","createModuleController","createModule","useDispatch","assertSystem","useEvents","HistoryController","_host","_system","buildHistoryState","getHistory","useHistory","getFact","createTypedHooks","NamespacedSelectorController","keys","createNamespacedSelector","QuerySystemController","factory","HydrationController","snapshot","mergedFacts","mergeHydrationFacts","AuditLedgerController","ledger","filter","opts","requestedPollMs","entryCount","next","moved"],"mappings":"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","file":"index.cjs","sourcesContent":["export default typeof process !== \"undefined\" &&\n process.env?.NODE_ENV !== \"production\";\n","/**\n * Lit Adapter - Consolidated Web Components integration for Directive\n *\n * Controllers: DerivedController, FactController,\n * InspectController (with throttle), RequirementStatusController,\n * DirectiveSelectorController,\n * WatchController (with fact mode), SystemController,\n * ExplainController, ConstraintStatusController, OptimisticUpdateController, ModuleController\n *\n * Factories: createDerived, createFact, createInspect,\n * createRequirementStatus, createWatch,\n * createDirectiveSelector, useDispatch, useEvents, useHistory,\n * getDerived, getFact, createTypedHooks, shallowEqual\n */\n\nimport type {\n CreateSystemOptionsSingle,\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 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 type TrackedSelectorResult,\n assertSystem,\n buildHistoryState,\n computeInspectState,\n createThrottle,\n defaultEquality,\n depsChanged,\n mergeHydrationFacts,\n runTrackedSelector,\n shallowEqual,\n} from \"@directive-run/core/adapter-utils\";\nimport type { ReactiveController, ReactiveControllerHost } from \"lit\";\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// Context\n// ============================================================================\n\n/**\n * Context key for Directive system.\n * Use with @lit/context for dependency injection across shadow DOM boundaries.\n */\nexport const directiveContext = Symbol(\"directive\");\n\n// ============================================================================\n// Base Controller\n// ============================================================================\n\n/**\n * Base controller that manages system subscription lifecycle.\n */\nabstract class DirectiveController implements ReactiveController {\n protected host: ReactiveControllerHost;\n protected system: SingleModuleSystem<any>;\n protected unsubscribe?: () => void;\n\n constructor(host: ReactiveControllerHost, system: SingleModuleSystem<any>) {\n this.host = host;\n this.system = system;\n host.addController(this);\n }\n\n hostConnected(): void {\n this.subscribe();\n }\n\n hostDisconnected(): void {\n this.unsubscribe?.();\n this.unsubscribe = undefined;\n }\n\n protected abstract subscribe(): void;\n\n protected requestUpdate(): void {\n this.host.requestUpdate();\n }\n}\n\n// ============================================================================\n// Core Controllers\n// ============================================================================\n\n/**\n * Reactive controller for derivations.\n * Accepts a single key (string) or an array of keys (string[]).\n * - Single key: `.value` returns `T`\n * - Array of keys: `.value` returns `Record<string, unknown>`\n */\nexport class DerivedController<T> extends DirectiveController {\n private keys: string[];\n private isMulti: boolean;\n value: T;\n\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n key: string | string[],\n ) {\n super(host, system);\n this.isMulti = Array.isArray(key);\n this.keys = this.isMulti ? (key as string[]) : [key as string];\n this.value = this.getValues();\n\n if (isDevelopment) {\n if (!this.isMulti && this.value === undefined) {\n console.warn(\n `[Directive] DerivedController(\"${this.keys[0]}\") returned undefined. ` +\n `Check that \"${this.keys[0]}\" is defined in your module's derive property.`,\n );\n }\n }\n }\n\n private getValues(): T {\n if (this.isMulti) {\n const result: Record<string, unknown> = {};\n for (const id of this.keys) {\n result[id] = this.system.read(id);\n }\n return result as T;\n }\n return this.system.read(this.keys[0]!) as T;\n }\n\n protected subscribe(): void {\n this.value = this.getValues();\n this.unsubscribe = this.system.subscribe(this.keys, () => {\n this.value = this.getValues();\n this.requestUpdate();\n });\n }\n}\n\n/**\n * Reactive controller for a single fact value.\n */\nexport class FactController<T> extends DirectiveController {\n private factKey: string;\n value: T | undefined;\n\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n factKey: string,\n ) {\n super(host, system);\n this.factKey = factKey;\n this.value = system.facts.$store.get(factKey) as T | undefined;\n\n if (isDevelopment) {\n if (!system.facts.$store.has(factKey)) {\n console.warn(\n `[Directive] FactController(\"${factKey}\") — fact not found in store. ` +\n `Check that \"${factKey}\" is defined in your module's schema.`,\n );\n }\n }\n }\n\n protected subscribe(): void {\n this.value = this.system.facts.$store.get(this.factKey) as T | undefined;\n this.unsubscribe = this.system.facts.$store.subscribe(\n [this.factKey],\n () => {\n this.value = this.system.facts.$store.get(this.factKey) as\n | T\n | undefined;\n this.requestUpdate();\n },\n );\n }\n}\n\n/**\n * Consolidated inspection controller.\n * Returns InspectState with optional throttling.\n */\nexport class InspectController extends DirectiveController {\n value: InspectState;\n private throttleMs: number;\n private throttleCleanup?: () => void;\n private unsubSettled?: () => void;\n\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n options?: { throttleMs?: number },\n ) {\n super(host, system);\n this.throttleMs = options?.throttleMs ?? 0;\n this.value = computeInspectState(system);\n }\n\n protected subscribe(): void {\n this.value = computeInspectState(this.system);\n\n const update = () => {\n this.value = computeInspectState(this.system);\n this.requestUpdate();\n };\n\n if (this.throttleMs > 0) {\n const { throttled, cleanup } = createThrottle(update, this.throttleMs);\n this.throttleCleanup = cleanup;\n this.unsubscribe = this.system.facts.$store.subscribeAll(throttled);\n this.unsubSettled = this.system.onSettledChange(throttled);\n } else {\n this.unsubscribe = this.system.facts.$store.subscribeAll(update);\n this.unsubSettled = this.system.onSettledChange(update);\n }\n }\n\n hostDisconnected(): void {\n this.throttleCleanup?.();\n this.unsubSettled?.();\n super.hostDisconnected();\n }\n}\n\n/**\n * Reactive controller for requirement status.\n */\nexport class RequirementStatusController implements ReactiveController {\n private host: ReactiveControllerHost;\n private statusPlugin: StatusPlugin;\n private type: string;\n private unsubscribe?: () => void;\n value: RequirementTypeStatus;\n\n constructor(\n host: ReactiveControllerHost,\n statusPlugin: StatusPlugin,\n type: string,\n ) {\n this.host = host;\n this.statusPlugin = statusPlugin;\n this.type = type;\n this.value = statusPlugin.getStatus(type);\n host.addController(this);\n }\n\n hostConnected(): void {\n this.value = this.statusPlugin.getStatus(this.type);\n this.unsubscribe = this.statusPlugin.subscribe(() => {\n this.value = this.statusPlugin.getStatus(this.type);\n this.host.requestUpdate();\n });\n }\n\n hostDisconnected(): void {\n this.unsubscribe?.();\n this.unsubscribe = undefined;\n }\n}\n\n// ============================================================================\n// Selector Controllers\n// ============================================================================\n\n/**\n * Reactive controller for selecting across all facts.\n * Uses `withTracking()` for auto-tracking when constructed with `autoTrack: true`.\n */\nexport class DirectiveSelectorController<\n S extends ModuleSchema = ModuleSchema,\n R = unknown,\n> extends DirectiveController {\n private selector: (state: InferSelectorState<S>) => R;\n private equalityFn: (a: R, b: R) => boolean;\n private autoTrack: boolean;\n private deriveKeySet: Set<string>;\n private trackedFactKeys: string[] = [];\n private trackedDeriveKeys: string[] = [];\n private unsubs: Array<() => void> = [];\n value: R;\n\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<S>,\n selector: (state: InferSelectorState<S>) => R,\n equalityFn: (a: R, b: R) => boolean = defaultEquality,\n options?: { autoTrack?: boolean },\n ) {\n super(host, system);\n this.selector = selector;\n this.equalityFn = equalityFn;\n this.autoTrack = options?.autoTrack ?? true;\n this.deriveKeySet = new Set(Object.keys(system.derive ?? {}));\n\n const initial = this.runWithTracking();\n this.value = initial.value;\n this.trackedFactKeys = initial.factKeys;\n this.trackedDeriveKeys = initial.deriveKeys;\n }\n\n private runWithTracking(): TrackedSelectorResult<R> {\n return runTrackedSelector(\n this.system,\n this.deriveKeySet,\n this.selector as (state: Record<string, unknown>) => R,\n );\n }\n\n private resubscribe(): void {\n for (const unsub of this.unsubs) unsub();\n this.unsubs = [];\n\n const onUpdate = () => {\n const result = this.runWithTracking();\n if (!this.equalityFn(this.value, result.value)) {\n this.value = result.value;\n this.requestUpdate();\n }\n if (this.autoTrack) {\n // Re-track: check if deps changed\n if (\n depsChanged(\n this.trackedFactKeys,\n result.factKeys,\n this.trackedDeriveKeys,\n result.deriveKeys,\n )\n ) {\n this.trackedFactKeys = result.factKeys;\n this.trackedDeriveKeys = result.deriveKeys;\n this.resubscribe();\n }\n }\n };\n\n if (this.autoTrack) {\n if (this.trackedFactKeys.length > 0) {\n this.unsubs.push(\n this.system.facts.$store.subscribe(this.trackedFactKeys, onUpdate),\n );\n } else if (this.trackedDeriveKeys.length === 0) {\n this.unsubs.push(this.system.facts.$store.subscribeAll(onUpdate));\n }\n if (this.trackedDeriveKeys.length > 0) {\n this.unsubs.push(\n this.system.subscribe(this.trackedDeriveKeys, onUpdate),\n );\n }\n } else {\n this.unsubs.push(this.system.facts.$store.subscribeAll(onUpdate));\n }\n }\n\n protected subscribe(): void {\n const result = this.runWithTracking();\n this.value = result.value;\n this.trackedFactKeys = result.factKeys;\n this.trackedDeriveKeys = result.deriveKeys;\n this.resubscribe();\n }\n\n hostDisconnected(): void {\n for (const unsub of this.unsubs) unsub();\n this.unsubs = [];\n super.hostDisconnected();\n }\n}\n\n/**\n * Reactive controller that watches a fact or derivation and calls a callback on change.\n * The key is auto-detected — works with both fact keys and derivation keys.\n */\nexport class WatchController<T> extends DirectiveController {\n private key: string;\n private callback: (newValue: T, previousValue: T | undefined) => void;\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. */\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n key: string,\n callback: (newValue: T, previousValue: T | undefined) => void,\n ) {\n super(host, system);\n this.key = key;\n this.callback = callback;\n }\n\n protected subscribe(): void {\n this.unsubscribe = this.system.watch<T>(this.key, this.callback);\n }\n}\n\n// ============================================================================\n// New Controllers\n// ============================================================================\n\n/**\n * Reactive controller for requirement explanations.\n */\nexport class ExplainController extends DirectiveController {\n private requirementId: string;\n value: string | null;\n private unsubSettled?: () => void;\n\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n requirementId: string,\n ) {\n super(host, system);\n this.requirementId = requirementId;\n this.value = system.explain(requirementId);\n }\n\n protected subscribe(): void {\n this.value = this.system.explain(this.requirementId);\n\n const update = () => {\n this.value = this.system.explain(this.requirementId);\n this.requestUpdate();\n };\n\n this.unsubscribe = this.system.facts.$store.subscribeAll(update);\n this.unsubSettled = this.system.onSettledChange(update);\n }\n\n hostDisconnected(): void {\n this.unsubSettled?.();\n super.hostDisconnected();\n }\n}\n\n/**\n * Reactive controller for constraint status.\n */\nexport class ConstraintStatusController extends DirectiveController {\n private constraintId?: string;\n value: ConstraintInfo[] | ConstraintInfo | null;\n private unsubSettled?: () => void;\n\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n constraintId?: string,\n ) {\n super(host, system);\n this.constraintId = constraintId;\n this.value = this.getVal();\n }\n\n private getVal(): ConstraintInfo[] | ConstraintInfo | null {\n const inspection = this.system.inspect();\n if (!this.constraintId) return inspection.constraints;\n return (\n inspection.constraints.find(\n (c: ConstraintInfo) => c.id === this.constraintId,\n ) ?? null\n );\n }\n\n protected subscribe(): void {\n this.value = this.getVal();\n\n const update = () => {\n this.value = this.getVal();\n this.requestUpdate();\n };\n\n this.unsubscribe = this.system.facts.$store.subscribeAll(update);\n this.unsubSettled = this.system.onSettledChange(update);\n }\n\n hostDisconnected(): void {\n this.unsubSettled?.();\n super.hostDisconnected();\n }\n}\n\n/**\n * Reactive controller for optimistic updates.\n */\nexport class OptimisticUpdateController implements ReactiveController {\n private host: ReactiveControllerHost;\n private system: SingleModuleSystem<any>;\n private statusPlugin?: StatusPlugin;\n private requirementType?: string;\n private snapshot: SystemSnapshot | null = null;\n private statusUnsub: (() => void) | null = null;\n\n isPending = false;\n error: Error | null = null;\n\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n statusPlugin?: StatusPlugin,\n requirementType?: string,\n ) {\n this.host = host;\n this.system = system;\n this.statusPlugin = statusPlugin;\n this.requirementType = requirementType;\n host.addController(this);\n }\n\n hostConnected(): void {}\n\n hostDisconnected(): void {\n this.statusUnsub?.();\n this.statusUnsub = null;\n }\n\n rollback(): void {\n if (this.snapshot) {\n this.system.restore(this.snapshot);\n this.snapshot = null;\n }\n this.isPending = false;\n this.error = null;\n this.statusUnsub?.();\n this.statusUnsub = null;\n this.host.requestUpdate();\n }\n\n mutate(updateFn: () => void): void {\n this.snapshot = this.system.getSnapshot();\n this.isPending = true;\n this.error = null;\n this.system.batch(updateFn);\n this.host.requestUpdate();\n\n if (this.statusPlugin && this.requirementType) {\n this.statusUnsub?.();\n this.statusUnsub = this.statusPlugin.subscribe(() => {\n const status = this.statusPlugin!.getStatus(this.requirementType!);\n if (!status.isLoading && !status.hasError) {\n this.snapshot = null;\n this.isPending = false;\n this.statusUnsub?.();\n this.statusUnsub = null;\n this.host.requestUpdate();\n } else if (status.hasError) {\n this.error = status.lastError;\n this.rollback();\n }\n });\n }\n }\n}\n\n/**\n * Reactive controller that creates and manages a Directive system.\n * The system is automatically started when the host connects and destroyed when it disconnects.\n */\nexport class SystemController<M extends ModuleSchema>\n implements ReactiveController\n{\n private options: ModuleDef<M> | CreateSystemOptionsSingle<M>;\n private _system: SingleModuleSystem<M> | null = null;\n\n constructor(\n host: ReactiveControllerHost,\n options: ModuleDef<M> | CreateSystemOptionsSingle<M>,\n ) {\n this.options = options;\n host.addController(this);\n }\n\n get system(): SingleModuleSystem<M> {\n if (!this._system) {\n throw new Error(\n \"[Directive] SystemController.system is not available. \" +\n \"This can happen if:\\n\" +\n \" 1. Accessed before hostConnected (e.g., in a class field initializer)\\n\" +\n \" 2. Accessed after hostDisconnected (system was destroyed)\\n\" +\n \"Solution: Access system only in lifecycle methods (connectedCallback, render) \" +\n \"or after the element is connected to the DOM.\",\n );\n }\n return this._system;\n }\n\n hostConnected(): void {\n const isModule = \"id\" in this.options && \"schema\" in this.options;\n const system = isModule\n ? createSystem({ module: this.options as ModuleDef<M> })\n : createSystem(this.options as CreateSystemOptionsSingle<M>);\n this._system = system as unknown as SingleModuleSystem<M>;\n this._system.start();\n }\n\n hostDisconnected(): void {\n // RFC 0009 follow-up: destroyAsync so source\n // unsubscribes complete; fire-and-forget with swallow-catch\n // (Lit's hostDisconnected is sync).\n this._system?.destroyAsync().catch((err: unknown) => {\n if (isDevelopment)\n console.warn(\"[Directive] destroyAsync rejected during unmount:\", err);\n });\n this._system = null;\n }\n}\n\n/**\n * Module controller — zero-config all-in-one.\n * Creates system, starts it, subscribes to all facts/derivations.\n */\nexport class ModuleController<M extends ModuleSchema>\n implements ReactiveController\n{\n private host: ReactiveControllerHost;\n private moduleDef: ModuleDef<M>;\n private config?: {\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 };\n\n private _system: SingleModuleSystem<M> | null = null;\n private unsubFacts?: () => void;\n private unsubDerived?: () => void;\n\n facts: InferFacts<M> = {} as InferFacts<M>;\n derived: InferDerivations<M> = {} as InferDerivations<M>;\n statusPlugin?: StatusPlugin;\n\n get system(): SingleModuleSystem<M> {\n if (!this._system) {\n throw new Error(\n \"[Directive] ModuleController.system is not available before hostConnected.\",\n );\n }\n return this._system;\n }\n\n get events(): SingleModuleSystem<M>[\"events\"] {\n return this.system.events;\n }\n\n constructor(\n host: ReactiveControllerHost,\n moduleDef: ModuleDef<M>,\n config?: {\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 },\n ) {\n this.host = host;\n this.moduleDef = moduleDef;\n this.config = config;\n host.addController(this);\n }\n\n hostConnected(): void {\n const allPlugins = [...(this.config?.plugins ?? [])];\n\n if (this.config?.status) {\n const sp = createRequirementStatusPlugin();\n this.statusPlugin = sp;\n allPlugins.push(sp.plugin as Plugin<any>);\n }\n\n const system = createSystem({\n module: this.moduleDef,\n plugins: allPlugins.length > 0 ? allPlugins : undefined,\n trace: this.config?.trace,\n errorBoundary: this.config?.errorBoundary,\n tickMs: this.config?.tickMs,\n zeroConfig: this.config?.zeroConfig,\n initialFacts: this.config?.initialFacts,\n } as any) as unknown as SingleModuleSystem<M>;\n\n this._system = system;\n system.start();\n\n // Subscribe to all facts\n this.facts = system.facts.$store.toObject() as InferFacts<M>;\n this.unsubFacts = system.facts.$store.subscribeAll(() => {\n this.facts = system.facts.$store.toObject() as InferFacts<M>;\n this.host.requestUpdate();\n });\n\n // Subscribe to all derivations\n const derivationKeys = Object.keys(system.derive ?? {});\n const getDerived = (): InferDerivations<M> => {\n const result: Record<string, unknown> = {};\n for (const key of derivationKeys) {\n result[key] = system.read(key);\n }\n return result as InferDerivations<M>;\n };\n this.derived = getDerived();\n\n if (derivationKeys.length > 0) {\n this.unsubDerived = system.subscribe(derivationKeys, () => {\n this.derived = getDerived();\n this.host.requestUpdate();\n });\n }\n }\n\n hostDisconnected(): void {\n this.unsubFacts?.();\n this.unsubDerived?.();\n // follow-up — switched `SystemController` and\n // `DirectiveQueryController` to `destroyAsync` but missed the\n // zero-config `ModuleController` (this class). Same rationale:\n // source unsubscribes are async (Supabase, MCP); sync destroy\n // would drop those Promises on the floor and leave brokers\n // holding ghost subscriptions until heartbeat. Fire-and-forget\n // with a swallow-catch — Lit's hostDisconnected is sync.\n this._system?.destroyAsync().catch((err: unknown) => {\n if (isDevelopment)\n console.warn(\"[Directive] destroyAsync rejected during unmount:\", err);\n });\n this._system = null;\n }\n\n dispatch(event: InferEvents<M>): void {\n this.system.dispatch(event);\n }\n}\n\n// ============================================================================\n// Factory Functions (active)\n// ============================================================================\n\nexport function createDerived<T>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n key: string | string[],\n): DerivedController<T> {\n return new DerivedController<T>(host, system, key);\n}\n\nexport function createFact<T>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n factKey: string,\n): FactController<T> {\n return new FactController<T>(host, system, factKey);\n}\n\n/**\n * Create an inspect controller.\n * Returns InspectState; pass `{ throttleMs }` for throttled updates.\n */\nexport function createInspect(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n options?: { throttleMs?: number },\n): InspectController {\n return new InspectController(host, system, options);\n}\n\nexport function createRequirementStatus(\n host: ReactiveControllerHost,\n statusPlugin: StatusPlugin,\n type: string,\n): RequirementStatusController {\n return new RequirementStatusController(host, statusPlugin, type);\n}\n\nexport function createWatch<T>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n derivationId: string,\n callback: (newValue: T, previousValue: T | undefined) => void,\n): WatchController<T> {\n return new WatchController<T>(host, system, derivationId, callback);\n}\n\nexport function createDirectiveSelector<S extends ModuleSchema, R>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<S>,\n selector: (state: InferSelectorState<S>) => R,\n equalityFn: (a: R, b: R) => boolean = defaultEquality,\n options?: { autoTrack?: boolean },\n): DirectiveSelectorController<S, R> {\n return new DirectiveSelectorController<S, R>(\n host,\n system,\n selector,\n equalityFn,\n options,\n );\n}\n\nexport function createExplain(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n requirementId: string,\n): ExplainController {\n return new ExplainController(host, system, requirementId);\n}\n\nexport function createConstraintStatus(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n constraintId?: string,\n): ConstraintStatusController {\n return new ConstraintStatusController(host, system, constraintId);\n}\n\nexport function createOptimisticUpdate(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n statusPlugin?: StatusPlugin,\n requirementType?: string,\n): OptimisticUpdateController {\n return new OptimisticUpdateController(\n host,\n system,\n statusPlugin,\n requirementType,\n );\n}\n\n/**\n * Build a `ModuleController` from a Directive module definition.\n *\n * The function is exported as both `createModuleController` (preferred)\n * and `createModule` (legacy alias). The original `createModule` name\n * collides with `@directive-run/core`'s `createModule` — importing\n * both into the same scope shadows whichever lands last in editor\n * auto-import order. New code should use `createModuleController`;\n * the `createModule` alias remains so existing imports still resolve.\n */\nexport function createModuleController<M extends ModuleSchema>(\n host: ReactiveControllerHost,\n moduleDef: ModuleDef<M>,\n config?: {\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 },\n): ModuleController<M> {\n return new ModuleController<M>(host, moduleDef, config);\n}\n\n/**\n * Legacy alias for `createModuleController`. Collides by name with\n * `@directive-run/core`'s `createModule`. New code should prefer\n * `createModuleController`.\n *\n * @deprecated Renamed to `createModuleController` — same shape, no\n * import collision with `@directive-run/core`. The function-wrapper\n * shape (vs `export const x = y`) ensures the `@deprecated` JSDoc\n * tag renders the strikethrough in every TS-aware editor.\n */\nexport function createModule<M extends ModuleSchema>(\n host: ReactiveControllerHost,\n moduleDef: ModuleDef<M>,\n config?: Parameters<typeof createModuleController<M>>[2],\n): ModuleController<M> {\n return createModuleController<M>(host, moduleDef, config);\n}\n\n// ============================================================================\n// Functional Helpers\n// ============================================================================\n\nexport function useDispatch<M extends ModuleSchema = ModuleSchema>(\n system: SingleModuleSystem<M>,\n): (event: InferEvents<M>) => void {\n assertSystem(\"useDispatch\", system);\n return (event: InferEvents<M>) => {\n system.dispatch(event);\n };\n}\n\n/**\n * Returns the system's events dispatcher.\n */\nexport function useEvents<M extends ModuleSchema = ModuleSchema>(\n system: SingleModuleSystem<M>,\n): SingleModuleSystem<M>[\"events\"] {\n assertSystem(\"useEvents\", system);\n return system.events;\n}\n\n/**\n * Reactive controller for history state.\n * Triggers host updates when snapshots change or navigation occurs.\n *\n * @example\n * ```typescript\n * class MyElement extends LitElement {\n * private _history = new HistoryController(this, system);\n * render() {\n * const h = this._history.value;\n * return html`<button ?disabled=${!h?.canGoBack} @click=${() => h?.goBack()}>Undo</button>`;\n * }\n * }\n * ```\n */\nexport class HistoryController implements ReactiveController {\n value: HistoryState | null = null;\n private _unsub?: () => void;\n\n constructor(\n private _host: ReactiveControllerHost,\n private _system: SingleModuleSystem<any>,\n ) {\n this._host.addController(this);\n }\n\n hostConnected(): void {\n this.value = buildHistoryState(this._system);\n this._unsub = this._system.onHistoryChange(() => {\n this.value = buildHistoryState(this._system);\n this._host.requestUpdate();\n });\n }\n\n hostDisconnected(): void {\n this._unsub?.();\n this._unsub = undefined;\n }\n}\n\n/**\n * Snapshot-only history helper. Returns the current `HistoryState`\n * once and does not re-fire when history mutates.\n *\n * **Named `getHistory` to match the snapshot semantics.** The Lit\n * adapter intentionally provides a non-reactive variant alongside\n * the reactive `HistoryController` so callers reading history once\n * (e.g. logging the last snapshot before a destroy) don't have to\n * spin up a controller. The previous name `useHistory` collided\n * with the reactive `useHistory` semantics in\n * `@directive-run/{react,vue,svelte,solid}` where the hook IS\n * reactive — same name, opposite contract.\n *\n * For reactive history, use `HistoryController`.\n */\nexport function getHistory(\n system: SingleModuleSystem<any>,\n): HistoryState | null {\n assertSystem(\"getHistory\", system);\n return buildHistoryState(system);\n}\n\n/**\n * @deprecated Renamed to `getHistory`. The Lit functional helper is\n * snapshot-only; React/Vue/Svelte/Solid `useHistory` is reactive.\n * Use `HistoryController` for the reactive Lit equivalent. The\n * function-wrapper shape (vs `export const x = y`) ensures the\n * `@deprecated` JSDoc tag renders in every TS-aware editor.\n */\nexport function useHistory(\n system: SingleModuleSystem<any>,\n): HistoryState | null {\n return getHistory(system);\n}\n\nexport function getDerived<T>(\n system: SingleModuleSystem<any>,\n derivationId: string,\n): () => T {\n return () => system.read(derivationId) as T;\n}\n\nexport function getFact<T>(\n system: SingleModuleSystem<any>,\n factKey: string,\n): () => T | undefined {\n return () => system.facts.$store.get(factKey) as T | undefined;\n}\n\n// ============================================================================\n// Typed Hooks Factory\n// ============================================================================\n\nexport function createTypedHooks<M extends ModuleSchema>(): {\n createDerived: <K extends keyof InferDerivations<M>>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<M>,\n derivationId: K,\n ) => DerivedController<InferDerivations<M>[K]>;\n createFact: <K extends keyof InferFacts<M>>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<M>,\n factKey: K,\n ) => FactController<InferFacts<M>[K]>;\n useDispatch: (\n system: SingleModuleSystem<M>,\n ) => (event: InferEvents<M>) => void;\n useEvents: (system: SingleModuleSystem<M>) => SingleModuleSystem<M>[\"events\"];\n createWatch: <K extends string>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<M>,\n key: K,\n callback: (newValue: unknown, previousValue: unknown) => void,\n ) => WatchController<unknown>;\n} {\n return {\n createDerived: <K extends keyof InferDerivations<M>>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<M>,\n derivationId: K,\n ) =>\n createDerived<InferDerivations<M>[K]>(\n host,\n system,\n derivationId as string,\n ),\n createFact: <K extends keyof InferFacts<M>>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<M>,\n factKey: K,\n ) => createFact<InferFacts<M>[K]>(host, system, factKey as string),\n useDispatch: (system: SingleModuleSystem<M>) => {\n return (event: InferEvents<M>) => {\n system.dispatch(event);\n };\n },\n useEvents: (system: SingleModuleSystem<M>) => system.events,\n createWatch: <K extends string>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<M>,\n key: K,\n callback: (newValue: unknown, previousValue: unknown) => void,\n ) => createWatch<unknown>(host, system, key, callback),\n };\n}\n\n// ============================================================================\n// NamespacedSelectorController — select from a NamespacedSystem\n// ============================================================================\n\n/**\n * Reactive controller that selects from a NamespacedSystem.\n * Subscribes to specified keys and triggers host updates.\n *\n * @example\n * ```typescript\n * class MyElement extends LitElement {\n * private token = new NamespacedSelectorController(\n * this, system, [\"auth.token\"], (s) => s.facts.auth.token,\n * );\n * render() {\n * return html`<span>${this.token.value}</span>`;\n * }\n * }\n * ```\n */\nexport class NamespacedSelectorController<Modules extends ModulesMap, R>\n implements ReactiveController\n{\n private host: ReactiveControllerHost;\n private system: NamespacedSystem<Modules>;\n private keys: string[];\n private selector: (system: NamespacedSystem<Modules>) => R;\n private unsubscribe?: () => void;\n value: R;\n\n constructor(\n host: ReactiveControllerHost,\n system: NamespacedSystem<Modules>,\n keys: string[],\n selector: (system: NamespacedSystem<Modules>) => R,\n ) {\n this.host = host;\n this.system = system;\n this.keys = keys;\n this.selector = selector;\n this.value = selector(system);\n host.addController(this);\n }\n\n hostConnected(): void {\n this.value = this.selector(this.system);\n this.unsubscribe = this.system.subscribe(this.keys, () => {\n this.value = this.selector(this.system);\n this.host.requestUpdate();\n });\n }\n\n hostDisconnected(): void {\n this.unsubscribe?.();\n this.unsubscribe = undefined;\n }\n}\n\nexport function createNamespacedSelector<Modules extends ModulesMap, R>(\n host: ReactiveControllerHost,\n system: NamespacedSystem<Modules>,\n keys: string[],\n selector: (system: NamespacedSystem<Modules>) => R,\n): NamespacedSelectorController<Modules, R> {\n return new NamespacedSelectorController(host, system, keys, selector);\n}\n\n// ============================================================================\n// QuerySystemController — Stable query system with Lit lifecycle\n// ============================================================================\n\n/**\n * Lit reactive controller that creates and manages a query system.\n * Starts on connect, destroys on disconnect.\n *\n * @example\n * ```typescript\n * import { LitElement, html } from \"lit\";\n * import { QuerySystemController } from \"@directive-run/lit\";\n * import { createQuerySystem } from \"@directive-run/query\";\n *\n * class MyApp extends LitElement {\n * private app = new QuerySystemController(this, () =>\n * createQuerySystem({\n * facts: { userId: \"\" },\n * queries: { user: { key: ..., fetcher: ... } },\n * autoStart: false,\n * })\n * );\n *\n * render() {\n * const user = this.app.system.read(\"user\");\n * return html`<div>${user.data?.name}</div>`;\n * }\n * }\n * ```\n */\nexport class QuerySystemController<\n T extends {\n start: () => void;\n destroy: () => void;\n isRunning?: boolean;\n [key: string]: any;\n },\n> implements ReactiveController\n{\n private _system: T | null = null;\n private factory: () => T;\n\n constructor(host: ReactiveControllerHost, factory: () => T) {\n this.factory = factory;\n host.addController(this);\n }\n\n get system(): T {\n if (!this._system) {\n throw new Error(\n \"[Directive] QuerySystemController.system is not available. \" +\n \"Access it only in lifecycle methods or after the element is connected.\",\n );\n }\n return this._system;\n }\n\n hostConnected(): void {\n this._system = this.factory();\n if (!this._system.isRunning) {\n this._system.start();\n }\n }\n\n hostDisconnected(): void {\n // RFC 0009 follow-up: destroyAsync so source\n // unsubscribes complete; fire-and-forget with swallow-catch\n // (Lit's hostDisconnected is sync).\n this._system?.destroyAsync().catch((err: unknown) => {\n if (isDevelopment)\n console.warn(\"[Directive] destroyAsync rejected during unmount:\", err);\n });\n this._system = null;\n }\n}\n\n// ============================================================================\n// SSR Hydration\n// ============================================================================\n\n/**\n * Lit reactive controller for SSR hydration.\n * Accepts a DistributableSnapshot and creates a hydrated system.\n *\n * @example\n * ```typescript\n * class MyElement extends LitElement {\n * private hydration = new HydrationController(this, serverSnapshot);\n * private system = this.hydration.createSystem(myModule);\n * }\n * ```\n */\nexport class HydrationController implements ReactiveController {\n private snapshot: Record<string, unknown> | undefined;\n private systems: SingleModuleSystem<any>[] = [];\n\n constructor(\n host: ReactiveControllerHost,\n snapshot?: Record<string, unknown>,\n ) {\n this.snapshot = snapshot;\n host.addController(this);\n }\n\n hostConnected(): void {}\n\n hostDisconnected(): void {\n // RFC 0009 follow-up: destroyAsync per system so\n // source unsubscribes complete; fire-and-forget with swallow-catch\n // (Lit's hostDisconnected is sync).\n for (const system of this.systems) {\n system.destroyAsync().catch((err: unknown) => {\n if (isDevelopment)\n console.warn(\n \"[Directive] destroyAsync rejected during unmount:\",\n err,\n );\n });\n }\n this.systems = [];\n }\n\n createSystem<S extends ModuleSchema>(\n moduleDef: ModuleDef<S>,\n config?: {\n plugins?: Plugin<any>[];\n trace?: TraceOption;\n errorBoundary?: ErrorBoundaryConfig;\n tickMs?: number;\n zeroConfig?: boolean;\n initialFacts?: Record<string, any>;\n },\n ): SingleModuleSystem<S> {\n const mergedFacts = mergeHydrationFacts(\n this.snapshot,\n config?.initialFacts,\n );\n const system = createSystem({\n module: moduleDef,\n plugins: config?.plugins,\n trace: config?.trace,\n errorBoundary: config?.errorBoundary,\n tickMs: config?.tickMs,\n zeroConfig: config?.zeroConfig,\n initialFacts: mergedFacts,\n } as any) as unknown as SingleModuleSystem<S>;\n\n this.systems.push(system);\n\n if (typeof window !== \"undefined\") {\n system.start();\n }\n\n return system;\n }\n}\n\n// ============================================================================\n// AuditLedgerController — live ledger entries with filter (R4.I parity)\n// ============================================================================\n\nimport type { AuditEntry, AuditLedger, QueryFilter } from \"@directive-run/core\";\n\n/**\n * Reactive controller exposing the latest audit-ledger entries matching\n * `filter` as `.value`. Polls (default 250 ms — override with `pollMs`)\n * and re-renders the host on each tick that brings new matches.\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 * @example\n * ```ts\n * import { AuditLedgerController } from \"@directive-run/lit\";\n *\n * class AuditLog extends LitElement {\n * private ledgerCtrl = new AuditLedgerController(\n * this,\n * ledger,\n * { kind: \"constraint.evaluate\", limit: 20 },\n * );\n *\n * render() {\n * return html`<ul>\n * ${this.ledgerCtrl.value.map(e => html`<li>${e.kind} @ ${e.ts}</li>`)}\n * </ul>`;\n * }\n * }\n * ```\n */\nexport class AuditLedgerController implements ReactiveController {\n private host: ReactiveControllerHost;\n private ledger: AuditLedger;\n private filter: QueryFilter;\n private pollMs: number;\n private intervalId: ReturnType<typeof setInterval> | null = null;\n\n /**\n * Latest matching audit entries. Updates on each poll tick when the\n * seq-window (first/last entry seq) changes. Lit `requestUpdate()` is\n * only called when the window moves — in-place tombstone replacement\n * within the visible window does NOT trigger re-render (use the ledger's\n * onWrite hook for revision-level updates when added).\n */\n value: readonly AuditEntry[];\n\n constructor(\n host: ReactiveControllerHost,\n ledger: AuditLedger,\n filter: QueryFilter = {},\n opts: { pollMs?: number } = {},\n ) {\n this.host = host;\n this.ledger = ledger;\n this.filter = filter;\n const requestedPollMs = opts.pollMs ?? 250;\n this.pollMs = Math.max(50, requestedPollMs);\n\n if (isDevelopment) {\n if (opts.pollMs !== undefined && opts.pollMs < 50) {\n console.warn(\n `[Directive] AuditLedgerController pollMs=${opts.pollMs} is below the 50 ms floor; clamped to 50 ms.`,\n );\n }\n if (this.pollMs < 100) {\n const entryCount = ledger.toJSON().entries.length;\n if (entryCount > 1000) {\n console.warn(\n `[Directive] AuditLedgerController polling every ${this.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 this.value = ledger.query(filter);\n host.addController(this);\n }\n\n hostConnected(): void {\n this.intervalId = setInterval(() => {\n const next = this.ledger.query(this.filter);\n // Always replace the array reference so consumers reading\n // `.value` see the latest snapshot, but only request a render\n // when the seq-window actually moved. At steady-state capacity\n // (e.g. 10k entries rolling over) the length is constant — using\n // length-diff alone misses every change. Compare the first and\n // last seq instead. (R4.C7)\n const moved =\n next[0]?.seq !== this.value[0]?.seq ||\n next[next.length - 1]?.seq !== this.value[this.value.length - 1]?.seq;\n this.value = next;\n if (moved) {\n this.host.requestUpdate();\n }\n }, this.pollMs);\n }\n\n hostDisconnected(): void {\n if (this.intervalId !== null) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n }\n}\n"]}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/dev-true.ts","../src/index.ts"],"names":["dev_true_default","directiveContext","DirectiveController","host","system","DerivedController","key","result","id","FactController","factKey","InspectController","options","computeInspectState","update","throttled","cleanup","createThrottle","RequirementStatusController","statusPlugin","type","DirectiveSelectorController","selector","equalityFn","defaultEquality","initial","runTrackedSelector","unsub","onUpdate","depsChanged","WatchController","callback","ExplainController","requirementId","ConstraintStatusController","constraintId","inspection","c","OptimisticUpdateController","requirementType","updateFn","status","SystemController","createSystem","err","ModuleController","moduleDef","config","allPlugins","sp","createRequirementStatusPlugin","derivationKeys","getDerived","event","createDerived","createFact","createInspect","createRequirementStatus","createWatch","derivationId","createDirectiveSelector","createExplain","createConstraintStatus","createOptimisticUpdate","createModuleController","createModule","useDispatch","assertSystem","useEvents","HistoryController","_host","_system","buildHistoryState","getHistory","useHistory","getFact","createTypedHooks","NamespacedSelectorController","keys","createNamespacedSelector","QuerySystemController","factory","HydrationController","snapshot","mergedFacts","mergeHydrationFacts","AuditLedgerController","ledger","filter","opts","requestedPollMs","entryCount","next","moved"],"mappings":"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","file":"index.js","sourcesContent":["export default typeof process !== \"undefined\" &&\n process.env?.NODE_ENV !== \"production\";\n","/**\n * Lit Adapter - Consolidated Web Components integration for Directive\n *\n * Controllers: DerivedController, FactController,\n * InspectController (with throttle), RequirementStatusController,\n * DirectiveSelectorController,\n * WatchController (with fact mode), SystemController,\n * ExplainController, ConstraintStatusController, OptimisticUpdateController, ModuleController\n *\n * Factories: createDerived, createFact, createInspect,\n * createRequirementStatus, createWatch,\n * createDirectiveSelector, useDispatch, useEvents, useHistory,\n * getDerived, getFact, createTypedHooks, shallowEqual\n */\n\nimport type {\n CreateSystemOptionsSingle,\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 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 type TrackedSelectorResult,\n assertSystem,\n buildHistoryState,\n computeInspectState,\n createThrottle,\n defaultEquality,\n depsChanged,\n mergeHydrationFacts,\n runTrackedSelector,\n shallowEqual,\n} from \"@directive-run/core/adapter-utils\";\nimport type { ReactiveController, ReactiveControllerHost } from \"lit\";\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// Context\n// ============================================================================\n\n/**\n * Context key for Directive system.\n * Use with @lit/context for dependency injection across shadow DOM boundaries.\n */\nexport const directiveContext = Symbol(\"directive\");\n\n// ============================================================================\n// Base Controller\n// ============================================================================\n\n/**\n * Base controller that manages system subscription lifecycle.\n */\nabstract class DirectiveController implements ReactiveController {\n protected host: ReactiveControllerHost;\n protected system: SingleModuleSystem<any>;\n protected unsubscribe?: () => void;\n\n constructor(host: ReactiveControllerHost, system: SingleModuleSystem<any>) {\n this.host = host;\n this.system = system;\n host.addController(this);\n }\n\n hostConnected(): void {\n this.subscribe();\n }\n\n hostDisconnected(): void {\n this.unsubscribe?.();\n this.unsubscribe = undefined;\n }\n\n protected abstract subscribe(): void;\n\n protected requestUpdate(): void {\n this.host.requestUpdate();\n }\n}\n\n// ============================================================================\n// Core Controllers\n// ============================================================================\n\n/**\n * Reactive controller for derivations.\n * Accepts a single key (string) or an array of keys (string[]).\n * - Single key: `.value` returns `T`\n * - Array of keys: `.value` returns `Record<string, unknown>`\n */\nexport class DerivedController<T> extends DirectiveController {\n private keys: string[];\n private isMulti: boolean;\n value: T;\n\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n key: string | string[],\n ) {\n super(host, system);\n this.isMulti = Array.isArray(key);\n this.keys = this.isMulti ? (key as string[]) : [key as string];\n this.value = this.getValues();\n\n if (isDevelopment) {\n if (!this.isMulti && this.value === undefined) {\n console.warn(\n `[Directive] DerivedController(\"${this.keys[0]}\") returned undefined. ` +\n `Check that \"${this.keys[0]}\" is defined in your module's derive property.`,\n );\n }\n }\n }\n\n private getValues(): T {\n if (this.isMulti) {\n const result: Record<string, unknown> = {};\n for (const id of this.keys) {\n result[id] = this.system.read(id);\n }\n return result as T;\n }\n return this.system.read(this.keys[0]!) as T;\n }\n\n protected subscribe(): void {\n this.value = this.getValues();\n this.unsubscribe = this.system.subscribe(this.keys, () => {\n this.value = this.getValues();\n this.requestUpdate();\n });\n }\n}\n\n/**\n * Reactive controller for a single fact value.\n */\nexport class FactController<T> extends DirectiveController {\n private factKey: string;\n value: T | undefined;\n\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n factKey: string,\n ) {\n super(host, system);\n this.factKey = factKey;\n this.value = system.facts.$store.get(factKey) as T | undefined;\n\n if (isDevelopment) {\n if (!system.facts.$store.has(factKey)) {\n console.warn(\n `[Directive] FactController(\"${factKey}\") — fact not found in store. ` +\n `Check that \"${factKey}\" is defined in your module's schema.`,\n );\n }\n }\n }\n\n protected subscribe(): void {\n this.value = this.system.facts.$store.get(this.factKey) as T | undefined;\n this.unsubscribe = this.system.facts.$store.subscribe(\n [this.factKey],\n () => {\n this.value = this.system.facts.$store.get(this.factKey) as\n | T\n | undefined;\n this.requestUpdate();\n },\n );\n }\n}\n\n/**\n * Consolidated inspection controller.\n * Returns InspectState with optional throttling.\n */\nexport class InspectController extends DirectiveController {\n value: InspectState;\n private throttleMs: number;\n private throttleCleanup?: () => void;\n private unsubSettled?: () => void;\n\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n options?: { throttleMs?: number },\n ) {\n super(host, system);\n this.throttleMs = options?.throttleMs ?? 0;\n this.value = computeInspectState(system);\n }\n\n protected subscribe(): void {\n this.value = computeInspectState(this.system);\n\n const update = () => {\n this.value = computeInspectState(this.system);\n this.requestUpdate();\n };\n\n if (this.throttleMs > 0) {\n const { throttled, cleanup } = createThrottle(update, this.throttleMs);\n this.throttleCleanup = cleanup;\n this.unsubscribe = this.system.facts.$store.subscribeAll(throttled);\n this.unsubSettled = this.system.onSettledChange(throttled);\n } else {\n this.unsubscribe = this.system.facts.$store.subscribeAll(update);\n this.unsubSettled = this.system.onSettledChange(update);\n }\n }\n\n hostDisconnected(): void {\n this.throttleCleanup?.();\n this.unsubSettled?.();\n super.hostDisconnected();\n }\n}\n\n/**\n * Reactive controller for requirement status.\n */\nexport class RequirementStatusController implements ReactiveController {\n private host: ReactiveControllerHost;\n private statusPlugin: StatusPlugin;\n private type: string;\n private unsubscribe?: () => void;\n value: RequirementTypeStatus;\n\n constructor(\n host: ReactiveControllerHost,\n statusPlugin: StatusPlugin,\n type: string,\n ) {\n this.host = host;\n this.statusPlugin = statusPlugin;\n this.type = type;\n this.value = statusPlugin.getStatus(type);\n host.addController(this);\n }\n\n hostConnected(): void {\n this.value = this.statusPlugin.getStatus(this.type);\n this.unsubscribe = this.statusPlugin.subscribe(() => {\n this.value = this.statusPlugin.getStatus(this.type);\n this.host.requestUpdate();\n });\n }\n\n hostDisconnected(): void {\n this.unsubscribe?.();\n this.unsubscribe = undefined;\n }\n}\n\n// ============================================================================\n// Selector Controllers\n// ============================================================================\n\n/**\n * Reactive controller for selecting across all facts.\n * Uses `withTracking()` for auto-tracking when constructed with `autoTrack: true`.\n */\nexport class DirectiveSelectorController<\n S extends ModuleSchema = ModuleSchema,\n R = unknown,\n> extends DirectiveController {\n private selector: (state: InferSelectorState<S>) => R;\n private equalityFn: (a: R, b: R) => boolean;\n private autoTrack: boolean;\n private deriveKeySet: Set<string>;\n private trackedFactKeys: string[] = [];\n private trackedDeriveKeys: string[] = [];\n private unsubs: Array<() => void> = [];\n value: R;\n\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<S>,\n selector: (state: InferSelectorState<S>) => R,\n equalityFn: (a: R, b: R) => boolean = defaultEquality,\n options?: { autoTrack?: boolean },\n ) {\n super(host, system);\n this.selector = selector;\n this.equalityFn = equalityFn;\n this.autoTrack = options?.autoTrack ?? true;\n this.deriveKeySet = new Set(Object.keys(system.derive ?? {}));\n\n const initial = this.runWithTracking();\n this.value = initial.value;\n this.trackedFactKeys = initial.factKeys;\n this.trackedDeriveKeys = initial.deriveKeys;\n }\n\n private runWithTracking(): TrackedSelectorResult<R> {\n return runTrackedSelector(\n this.system,\n this.deriveKeySet,\n this.selector as (state: Record<string, unknown>) => R,\n );\n }\n\n private resubscribe(): void {\n for (const unsub of this.unsubs) unsub();\n this.unsubs = [];\n\n const onUpdate = () => {\n const result = this.runWithTracking();\n if (!this.equalityFn(this.value, result.value)) {\n this.value = result.value;\n this.requestUpdate();\n }\n if (this.autoTrack) {\n // Re-track: check if deps changed\n if (\n depsChanged(\n this.trackedFactKeys,\n result.factKeys,\n this.trackedDeriveKeys,\n result.deriveKeys,\n )\n ) {\n this.trackedFactKeys = result.factKeys;\n this.trackedDeriveKeys = result.deriveKeys;\n this.resubscribe();\n }\n }\n };\n\n if (this.autoTrack) {\n if (this.trackedFactKeys.length > 0) {\n this.unsubs.push(\n this.system.facts.$store.subscribe(this.trackedFactKeys, onUpdate),\n );\n } else if (this.trackedDeriveKeys.length === 0) {\n this.unsubs.push(this.system.facts.$store.subscribeAll(onUpdate));\n }\n if (this.trackedDeriveKeys.length > 0) {\n this.unsubs.push(\n this.system.subscribe(this.trackedDeriveKeys, onUpdate),\n );\n }\n } else {\n this.unsubs.push(this.system.facts.$store.subscribeAll(onUpdate));\n }\n }\n\n protected subscribe(): void {\n const result = this.runWithTracking();\n this.value = result.value;\n this.trackedFactKeys = result.factKeys;\n this.trackedDeriveKeys = result.deriveKeys;\n this.resubscribe();\n }\n\n hostDisconnected(): void {\n for (const unsub of this.unsubs) unsub();\n this.unsubs = [];\n super.hostDisconnected();\n }\n}\n\n/**\n * Reactive controller that watches a fact or derivation and calls a callback on change.\n * The key is auto-detected — works with both fact keys and derivation keys.\n */\nexport class WatchController<T> extends DirectiveController {\n private key: string;\n private callback: (newValue: T, previousValue: T | undefined) => void;\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. */\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n key: string,\n callback: (newValue: T, previousValue: T | undefined) => void,\n ) {\n super(host, system);\n this.key = key;\n this.callback = callback;\n }\n\n protected subscribe(): void {\n this.unsubscribe = this.system.watch<T>(this.key, this.callback);\n }\n}\n\n// ============================================================================\n// New Controllers\n// ============================================================================\n\n/**\n * Reactive controller for requirement explanations.\n */\nexport class ExplainController extends DirectiveController {\n private requirementId: string;\n value: string | null;\n private unsubSettled?: () => void;\n\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n requirementId: string,\n ) {\n super(host, system);\n this.requirementId = requirementId;\n this.value = system.explain(requirementId);\n }\n\n protected subscribe(): void {\n this.value = this.system.explain(this.requirementId);\n\n const update = () => {\n this.value = this.system.explain(this.requirementId);\n this.requestUpdate();\n };\n\n this.unsubscribe = this.system.facts.$store.subscribeAll(update);\n this.unsubSettled = this.system.onSettledChange(update);\n }\n\n hostDisconnected(): void {\n this.unsubSettled?.();\n super.hostDisconnected();\n }\n}\n\n/**\n * Reactive controller for constraint status.\n */\nexport class ConstraintStatusController extends DirectiveController {\n private constraintId?: string;\n value: ConstraintInfo[] | ConstraintInfo | null;\n private unsubSettled?: () => void;\n\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n constraintId?: string,\n ) {\n super(host, system);\n this.constraintId = constraintId;\n this.value = this.getVal();\n }\n\n private getVal(): ConstraintInfo[] | ConstraintInfo | null {\n const inspection = this.system.inspect();\n if (!this.constraintId) return inspection.constraints;\n return (\n inspection.constraints.find(\n (c: ConstraintInfo) => c.id === this.constraintId,\n ) ?? null\n );\n }\n\n protected subscribe(): void {\n this.value = this.getVal();\n\n const update = () => {\n this.value = this.getVal();\n this.requestUpdate();\n };\n\n this.unsubscribe = this.system.facts.$store.subscribeAll(update);\n this.unsubSettled = this.system.onSettledChange(update);\n }\n\n hostDisconnected(): void {\n this.unsubSettled?.();\n super.hostDisconnected();\n }\n}\n\n/**\n * Reactive controller for optimistic updates.\n */\nexport class OptimisticUpdateController implements ReactiveController {\n private host: ReactiveControllerHost;\n private system: SingleModuleSystem<any>;\n private statusPlugin?: StatusPlugin;\n private requirementType?: string;\n private snapshot: SystemSnapshot | null = null;\n private statusUnsub: (() => void) | null = null;\n\n isPending = false;\n error: Error | null = null;\n\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n statusPlugin?: StatusPlugin,\n requirementType?: string,\n ) {\n this.host = host;\n this.system = system;\n this.statusPlugin = statusPlugin;\n this.requirementType = requirementType;\n host.addController(this);\n }\n\n hostConnected(): void {}\n\n hostDisconnected(): void {\n this.statusUnsub?.();\n this.statusUnsub = null;\n }\n\n rollback(): void {\n if (this.snapshot) {\n this.system.restore(this.snapshot);\n this.snapshot = null;\n }\n this.isPending = false;\n this.error = null;\n this.statusUnsub?.();\n this.statusUnsub = null;\n this.host.requestUpdate();\n }\n\n mutate(updateFn: () => void): void {\n this.snapshot = this.system.getSnapshot();\n this.isPending = true;\n this.error = null;\n this.system.batch(updateFn);\n this.host.requestUpdate();\n\n if (this.statusPlugin && this.requirementType) {\n this.statusUnsub?.();\n this.statusUnsub = this.statusPlugin.subscribe(() => {\n const status = this.statusPlugin!.getStatus(this.requirementType!);\n if (!status.isLoading && !status.hasError) {\n this.snapshot = null;\n this.isPending = false;\n this.statusUnsub?.();\n this.statusUnsub = null;\n this.host.requestUpdate();\n } else if (status.hasError) {\n this.error = status.lastError;\n this.rollback();\n }\n });\n }\n }\n}\n\n/**\n * Reactive controller that creates and manages a Directive system.\n * The system is automatically started when the host connects and destroyed when it disconnects.\n */\nexport class SystemController<M extends ModuleSchema>\n implements ReactiveController\n{\n private options: ModuleDef<M> | CreateSystemOptionsSingle<M>;\n private _system: SingleModuleSystem<M> | null = null;\n\n constructor(\n host: ReactiveControllerHost,\n options: ModuleDef<M> | CreateSystemOptionsSingle<M>,\n ) {\n this.options = options;\n host.addController(this);\n }\n\n get system(): SingleModuleSystem<M> {\n if (!this._system) {\n throw new Error(\n \"[Directive] SystemController.system is not available. \" +\n \"This can happen if:\\n\" +\n \" 1. Accessed before hostConnected (e.g., in a class field initializer)\\n\" +\n \" 2. Accessed after hostDisconnected (system was destroyed)\\n\" +\n \"Solution: Access system only in lifecycle methods (connectedCallback, render) \" +\n \"or after the element is connected to the DOM.\",\n );\n }\n return this._system;\n }\n\n hostConnected(): void {\n const isModule = \"id\" in this.options && \"schema\" in this.options;\n const system = isModule\n ? createSystem({ module: this.options as ModuleDef<M> })\n : createSystem(this.options as CreateSystemOptionsSingle<M>);\n this._system = system as unknown as SingleModuleSystem<M>;\n this._system.start();\n }\n\n hostDisconnected(): void {\n // RFC 0009 follow-up (R18 Tier 2-B): destroyAsync so source\n // unsubscribes complete; fire-and-forget with swallow-catch\n // (Lit's hostDisconnected is sync).\n this._system?.destroyAsync().catch((err: unknown) => {\n if (isDevelopment)\n console.warn(\"[Directive] destroyAsync rejected during unmount:\", err);\n });\n this._system = null;\n }\n}\n\n/**\n * Module controller — zero-config all-in-one.\n * Creates system, starts it, subscribes to all facts/derivations.\n */\nexport class ModuleController<M extends ModuleSchema>\n implements ReactiveController\n{\n private host: ReactiveControllerHost;\n private moduleDef: ModuleDef<M>;\n private config?: {\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 };\n\n private _system: SingleModuleSystem<M> | null = null;\n private unsubFacts?: () => void;\n private unsubDerived?: () => void;\n\n facts: InferFacts<M> = {} as InferFacts<M>;\n derived: InferDerivations<M> = {} as InferDerivations<M>;\n statusPlugin?: StatusPlugin;\n\n get system(): SingleModuleSystem<M> {\n if (!this._system) {\n throw new Error(\n \"[Directive] ModuleController.system is not available before hostConnected.\",\n );\n }\n return this._system;\n }\n\n get events(): SingleModuleSystem<M>[\"events\"] {\n return this.system.events;\n }\n\n constructor(\n host: ReactiveControllerHost,\n moduleDef: ModuleDef<M>,\n config?: {\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 },\n ) {\n this.host = host;\n this.moduleDef = moduleDef;\n this.config = config;\n host.addController(this);\n }\n\n hostConnected(): void {\n const allPlugins = [...(this.config?.plugins ?? [])];\n\n if (this.config?.status) {\n const sp = createRequirementStatusPlugin();\n this.statusPlugin = sp;\n allPlugins.push(sp.plugin as Plugin<any>);\n }\n\n const system = createSystem({\n module: this.moduleDef,\n plugins: allPlugins.length > 0 ? allPlugins : undefined,\n trace: this.config?.trace,\n errorBoundary: this.config?.errorBoundary,\n tickMs: this.config?.tickMs,\n zeroConfig: this.config?.zeroConfig,\n initialFacts: this.config?.initialFacts,\n } as any) as unknown as SingleModuleSystem<M>;\n\n this._system = system;\n system.start();\n\n // Subscribe to all facts\n this.facts = system.facts.$store.toObject() as InferFacts<M>;\n this.unsubFacts = system.facts.$store.subscribeAll(() => {\n this.facts = system.facts.$store.toObject() as InferFacts<M>;\n this.host.requestUpdate();\n });\n\n // Subscribe to all derivations\n const derivationKeys = Object.keys(system.derive ?? {});\n const getDerived = (): InferDerivations<M> => {\n const result: Record<string, unknown> = {};\n for (const key of derivationKeys) {\n result[key] = system.read(key);\n }\n return result as InferDerivations<M>;\n };\n this.derived = getDerived();\n\n if (derivationKeys.length > 0) {\n this.unsubDerived = system.subscribe(derivationKeys, () => {\n this.derived = getDerived();\n this.host.requestUpdate();\n });\n }\n }\n\n hostDisconnected(): void {\n this.unsubFacts?.();\n this.unsubDerived?.();\n // follow-up — R18 Tier 2-B switched `SystemController` and\n // `DirectiveQueryController` to `destroyAsync` but missed the\n // zero-config `ModuleController` (this class). Same rationale:\n // source unsubscribes are async (Supabase, MCP); sync destroy\n // would drop those Promises on the floor and leave brokers\n // holding ghost subscriptions until heartbeat. Fire-and-forget\n // with a swallow-catch — Lit's hostDisconnected is sync.\n this._system?.destroyAsync().catch((err: unknown) => {\n if (isDevelopment)\n console.warn(\"[Directive] destroyAsync rejected during unmount:\", err);\n });\n this._system = null;\n }\n\n dispatch(event: InferEvents<M>): void {\n this.system.dispatch(event);\n }\n}\n\n// ============================================================================\n// Factory Functions (active)\n// ============================================================================\n\nexport function createDerived<T>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n key: string | string[],\n): DerivedController<T> {\n return new DerivedController<T>(host, system, key);\n}\n\nexport function createFact<T>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n factKey: string,\n): FactController<T> {\n return new FactController<T>(host, system, factKey);\n}\n\n/**\n * Create an inspect controller.\n * Returns InspectState; pass `{ throttleMs }` for throttled updates.\n */\nexport function createInspect(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n options?: { throttleMs?: number },\n): InspectController {\n return new InspectController(host, system, options);\n}\n\nexport function createRequirementStatus(\n host: ReactiveControllerHost,\n statusPlugin: StatusPlugin,\n type: string,\n): RequirementStatusController {\n return new RequirementStatusController(host, statusPlugin, type);\n}\n\nexport function createWatch<T>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n derivationId: string,\n callback: (newValue: T, previousValue: T | undefined) => void,\n): WatchController<T> {\n return new WatchController<T>(host, system, derivationId, callback);\n}\n\nexport function createDirectiveSelector<S extends ModuleSchema, R>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<S>,\n selector: (state: InferSelectorState<S>) => R,\n equalityFn: (a: R, b: R) => boolean = defaultEquality,\n options?: { autoTrack?: boolean },\n): DirectiveSelectorController<S, R> {\n return new DirectiveSelectorController<S, R>(\n host,\n system,\n selector,\n equalityFn,\n options,\n );\n}\n\nexport function createExplain(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n requirementId: string,\n): ExplainController {\n return new ExplainController(host, system, requirementId);\n}\n\nexport function createConstraintStatus(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n constraintId?: string,\n): ConstraintStatusController {\n return new ConstraintStatusController(host, system, constraintId);\n}\n\nexport function createOptimisticUpdate(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n statusPlugin?: StatusPlugin,\n requirementType?: string,\n): OptimisticUpdateController {\n return new OptimisticUpdateController(\n host,\n system,\n statusPlugin,\n requirementType,\n );\n}\n\n/**\n * Build a `ModuleController` from a Directive module definition.\n *\n * The function is exported as both `createModuleController` (preferred)\n * and `createModule` (legacy alias). The original `createModule` name\n * collides with `@directive-run/core`'s `createModule` — importing\n * both into the same scope shadows whichever lands last in editor\n * auto-import order. New code should use `createModuleController`;\n * the `createModule` alias remains so existing imports still resolve.\n */\nexport function createModuleController<M extends ModuleSchema>(\n host: ReactiveControllerHost,\n moduleDef: ModuleDef<M>,\n config?: {\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 },\n): ModuleController<M> {\n return new ModuleController<M>(host, moduleDef, config);\n}\n\n/**\n * Legacy alias for `createModuleController`. Collides by name with\n * `@directive-run/core`'s `createModule`. New code should prefer\n * `createModuleController`.\n *\n * @deprecated Renamed to `createModuleController` — same shape, no\n * import collision with `@directive-run/core`. The function-wrapper\n * shape (vs `export const x = y`) ensures the `@deprecated` JSDoc\n * tag renders the strikethrough in every TS-aware editor.\n */\nexport function createModule<M extends ModuleSchema>(\n host: ReactiveControllerHost,\n moduleDef: ModuleDef<M>,\n config?: Parameters<typeof createModuleController<M>>[2],\n): ModuleController<M> {\n return createModuleController<M>(host, moduleDef, config);\n}\n\n// ============================================================================\n// Functional Helpers\n// ============================================================================\n\nexport function useDispatch<M extends ModuleSchema = ModuleSchema>(\n system: SingleModuleSystem<M>,\n): (event: InferEvents<M>) => void {\n assertSystem(\"useDispatch\", system);\n return (event: InferEvents<M>) => {\n system.dispatch(event);\n };\n}\n\n/**\n * Returns the system's events dispatcher.\n */\nexport function useEvents<M extends ModuleSchema = ModuleSchema>(\n system: SingleModuleSystem<M>,\n): SingleModuleSystem<M>[\"events\"] {\n assertSystem(\"useEvents\", system);\n return system.events;\n}\n\n/**\n * Reactive controller for history state.\n * Triggers host updates when snapshots change or navigation occurs.\n *\n * @example\n * ```typescript\n * class MyElement extends LitElement {\n * private _history = new HistoryController(this, system);\n * render() {\n * const h = this._history.value;\n * return html`<button ?disabled=${!h?.canGoBack} @click=${() => h?.goBack()}>Undo</button>`;\n * }\n * }\n * ```\n */\nexport class HistoryController implements ReactiveController {\n value: HistoryState | null = null;\n private _unsub?: () => void;\n\n constructor(\n private _host: ReactiveControllerHost,\n private _system: SingleModuleSystem<any>,\n ) {\n this._host.addController(this);\n }\n\n hostConnected(): void {\n this.value = buildHistoryState(this._system);\n this._unsub = this._system.onHistoryChange(() => {\n this.value = buildHistoryState(this._system);\n this._host.requestUpdate();\n });\n }\n\n hostDisconnected(): void {\n this._unsub?.();\n this._unsub = undefined;\n }\n}\n\n/**\n * Snapshot-only history helper. Returns the current `HistoryState`\n * once and does not re-fire when history mutates.\n *\n * **Named `getHistory` to match the snapshot semantics.** The Lit\n * adapter intentionally provides a non-reactive variant alongside\n * the reactive `HistoryController` so callers reading history once\n * (e.g. logging the last snapshot before a destroy) don't have to\n * spin up a controller. The previous name `useHistory` collided\n * with the reactive `useHistory` semantics in\n * `@directive-run/{react,vue,svelte,solid}` where the hook IS\n * reactive — same name, opposite contract.\n *\n * For reactive history, use `HistoryController`.\n */\nexport function getHistory(\n system: SingleModuleSystem<any>,\n): HistoryState | null {\n assertSystem(\"getHistory\", system);\n return buildHistoryState(system);\n}\n\n/**\n * @deprecated Renamed to `getHistory`. The Lit functional helper is\n * snapshot-only; React/Vue/Svelte/Solid `useHistory` is reactive.\n * Use `HistoryController` for the reactive Lit equivalent. The\n * function-wrapper shape (vs `export const x = y`) ensures the\n * `@deprecated` JSDoc tag renders in every TS-aware editor.\n */\nexport function useHistory(\n system: SingleModuleSystem<any>,\n): HistoryState | null {\n return getHistory(system);\n}\n\nexport function getDerived<T>(\n system: SingleModuleSystem<any>,\n derivationId: string,\n): () => T {\n return () => system.read(derivationId) as T;\n}\n\nexport function getFact<T>(\n system: SingleModuleSystem<any>,\n factKey: string,\n): () => T | undefined {\n return () => system.facts.$store.get(factKey) as T | undefined;\n}\n\n// ============================================================================\n// Typed Hooks Factory\n// ============================================================================\n\nexport function createTypedHooks<M extends ModuleSchema>(): {\n createDerived: <K extends keyof InferDerivations<M>>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<M>,\n derivationId: K,\n ) => DerivedController<InferDerivations<M>[K]>;\n createFact: <K extends keyof InferFacts<M>>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<M>,\n factKey: K,\n ) => FactController<InferFacts<M>[K]>;\n useDispatch: (\n system: SingleModuleSystem<M>,\n ) => (event: InferEvents<M>) => void;\n useEvents: (system: SingleModuleSystem<M>) => SingleModuleSystem<M>[\"events\"];\n createWatch: <K extends string>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<M>,\n key: K,\n callback: (newValue: unknown, previousValue: unknown) => void,\n ) => WatchController<unknown>;\n} {\n return {\n createDerived: <K extends keyof InferDerivations<M>>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<M>,\n derivationId: K,\n ) =>\n createDerived<InferDerivations<M>[K]>(\n host,\n system,\n derivationId as string,\n ),\n createFact: <K extends keyof InferFacts<M>>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<M>,\n factKey: K,\n ) => createFact<InferFacts<M>[K]>(host, system, factKey as string),\n useDispatch: (system: SingleModuleSystem<M>) => {\n return (event: InferEvents<M>) => {\n system.dispatch(event);\n };\n },\n useEvents: (system: SingleModuleSystem<M>) => system.events,\n createWatch: <K extends string>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<M>,\n key: K,\n callback: (newValue: unknown, previousValue: unknown) => void,\n ) => createWatch<unknown>(host, system, key, callback),\n };\n}\n\n// ============================================================================\n// NamespacedSelectorController — select from a NamespacedSystem\n// ============================================================================\n\n/**\n * Reactive controller that selects from a NamespacedSystem.\n * Subscribes to specified keys and triggers host updates.\n *\n * @example\n * ```typescript\n * class MyElement extends LitElement {\n * private token = new NamespacedSelectorController(\n * this, system, [\"auth.token\"], (s) => s.facts.auth.token,\n * );\n * render() {\n * return html`<span>${this.token.value}</span>`;\n * }\n * }\n * ```\n */\nexport class NamespacedSelectorController<Modules extends ModulesMap, R>\n implements ReactiveController\n{\n private host: ReactiveControllerHost;\n private system: NamespacedSystem<Modules>;\n private keys: string[];\n private selector: (system: NamespacedSystem<Modules>) => R;\n private unsubscribe?: () => void;\n value: R;\n\n constructor(\n host: ReactiveControllerHost,\n system: NamespacedSystem<Modules>,\n keys: string[],\n selector: (system: NamespacedSystem<Modules>) => R,\n ) {\n this.host = host;\n this.system = system;\n this.keys = keys;\n this.selector = selector;\n this.value = selector(system);\n host.addController(this);\n }\n\n hostConnected(): void {\n this.value = this.selector(this.system);\n this.unsubscribe = this.system.subscribe(this.keys, () => {\n this.value = this.selector(this.system);\n this.host.requestUpdate();\n });\n }\n\n hostDisconnected(): void {\n this.unsubscribe?.();\n this.unsubscribe = undefined;\n }\n}\n\nexport function createNamespacedSelector<Modules extends ModulesMap, R>(\n host: ReactiveControllerHost,\n system: NamespacedSystem<Modules>,\n keys: string[],\n selector: (system: NamespacedSystem<Modules>) => R,\n): NamespacedSelectorController<Modules, R> {\n return new NamespacedSelectorController(host, system, keys, selector);\n}\n\n// ============================================================================\n// QuerySystemController — Stable query system with Lit lifecycle\n// ============================================================================\n\n/**\n * Lit reactive controller that creates and manages a query system.\n * Starts on connect, destroys on disconnect.\n *\n * @example\n * ```typescript\n * import { LitElement, html } from \"lit\";\n * import { QuerySystemController } from \"@directive-run/lit\";\n * import { createQuerySystem } from \"@directive-run/query\";\n *\n * class MyApp extends LitElement {\n * private app = new QuerySystemController(this, () =>\n * createQuerySystem({\n * facts: { userId: \"\" },\n * queries: { user: { key: ..., fetcher: ... } },\n * autoStart: false,\n * })\n * );\n *\n * render() {\n * const user = this.app.system.read(\"user\");\n * return html`<div>${user.data?.name}</div>`;\n * }\n * }\n * ```\n */\nexport class QuerySystemController<\n T extends {\n start: () => void;\n destroy: () => void;\n isRunning?: boolean;\n [key: string]: any;\n },\n> implements ReactiveController\n{\n private _system: T | null = null;\n private factory: () => T;\n\n constructor(host: ReactiveControllerHost, factory: () => T) {\n this.factory = factory;\n host.addController(this);\n }\n\n get system(): T {\n if (!this._system) {\n throw new Error(\n \"[Directive] QuerySystemController.system is not available. \" +\n \"Access it only in lifecycle methods or after the element is connected.\",\n );\n }\n return this._system;\n }\n\n hostConnected(): void {\n this._system = this.factory();\n if (!this._system.isRunning) {\n this._system.start();\n }\n }\n\n hostDisconnected(): void {\n // RFC 0009 follow-up (R18 Tier 2-B): destroyAsync so source\n // unsubscribes complete; fire-and-forget with swallow-catch\n // (Lit's hostDisconnected is sync).\n this._system?.destroyAsync().catch((err: unknown) => {\n if (isDevelopment)\n console.warn(\"[Directive] destroyAsync rejected during unmount:\", err);\n });\n this._system = null;\n }\n}\n\n// ============================================================================\n// SSR Hydration\n// ============================================================================\n\n/**\n * Lit reactive controller for SSR hydration.\n * Accepts a DistributableSnapshot and creates a hydrated system.\n *\n * @example\n * ```typescript\n * class MyElement extends LitElement {\n * private hydration = new HydrationController(this, serverSnapshot);\n * private system = this.hydration.createSystem(myModule);\n * }\n * ```\n */\nexport class HydrationController implements ReactiveController {\n private snapshot: Record<string, unknown> | undefined;\n private systems: SingleModuleSystem<any>[] = [];\n\n constructor(\n host: ReactiveControllerHost,\n snapshot?: Record<string, unknown>,\n ) {\n this.snapshot = snapshot;\n host.addController(this);\n }\n\n hostConnected(): void {}\n\n hostDisconnected(): void {\n // RFC 0009 follow-up (R18 Tier 2-B): destroyAsync per system so\n // source unsubscribes complete; fire-and-forget with swallow-catch\n // (Lit's hostDisconnected is sync).\n for (const system of this.systems) {\n system.destroyAsync().catch((err: unknown) => {\n if (isDevelopment)\n console.warn(\n \"[Directive] destroyAsync rejected during unmount:\",\n err,\n );\n });\n }\n this.systems = [];\n }\n\n createSystem<S extends ModuleSchema>(\n moduleDef: ModuleDef<S>,\n config?: {\n plugins?: Plugin<any>[];\n trace?: TraceOption;\n errorBoundary?: ErrorBoundaryConfig;\n tickMs?: number;\n zeroConfig?: boolean;\n initialFacts?: Record<string, any>;\n },\n ): SingleModuleSystem<S> {\n const mergedFacts = mergeHydrationFacts(\n this.snapshot,\n config?.initialFacts,\n );\n const system = createSystem({\n module: moduleDef,\n plugins: config?.plugins,\n trace: config?.trace,\n errorBoundary: config?.errorBoundary,\n tickMs: config?.tickMs,\n zeroConfig: config?.zeroConfig,\n initialFacts: mergedFacts,\n } as any) as unknown as SingleModuleSystem<S>;\n\n this.systems.push(system);\n\n if (typeof window !== \"undefined\") {\n system.start();\n }\n\n return system;\n }\n}\n\n// ============================================================================\n// AuditLedgerController — live ledger entries with filter (R4.I parity)\n// ============================================================================\n\nimport type { AuditEntry, AuditLedger, QueryFilter } from \"@directive-run/core\";\n\n/**\n * Reactive controller exposing the latest audit-ledger entries matching\n * `filter` as `.value`. Polls (default 250 ms — override with `pollMs`)\n * and re-renders the host on each tick that brings new matches.\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 * @example\n * ```ts\n * import { AuditLedgerController } from \"@directive-run/lit\";\n *\n * class AuditLog extends LitElement {\n * private ledgerCtrl = new AuditLedgerController(\n * this,\n * ledger,\n * { kind: \"constraint.evaluate\", limit: 20 },\n * );\n *\n * render() {\n * return html`<ul>\n * ${this.ledgerCtrl.value.map(e => html`<li>${e.kind} @ ${e.ts}</li>`)}\n * </ul>`;\n * }\n * }\n * ```\n */\nexport class AuditLedgerController implements ReactiveController {\n private host: ReactiveControllerHost;\n private ledger: AuditLedger;\n private filter: QueryFilter;\n private pollMs: number;\n private intervalId: ReturnType<typeof setInterval> | null = null;\n\n /**\n * Latest matching audit entries. Updates on each poll tick when the\n * seq-window (first/last entry seq) changes. Lit `requestUpdate()` is\n * only called when the window moves — in-place tombstone replacement\n * within the visible window does NOT trigger re-render (use the ledger's\n * onWrite hook for revision-level updates when added).\n */\n value: readonly AuditEntry[];\n\n constructor(\n host: ReactiveControllerHost,\n ledger: AuditLedger,\n filter: QueryFilter = {},\n opts: { pollMs?: number } = {},\n ) {\n this.host = host;\n this.ledger = ledger;\n this.filter = filter;\n const requestedPollMs = opts.pollMs ?? 250;\n this.pollMs = Math.max(50, requestedPollMs);\n\n if (isDevelopment) {\n if (opts.pollMs !== undefined && opts.pollMs < 50) {\n console.warn(\n `[Directive] AuditLedgerController pollMs=${opts.pollMs} is below the 50 ms floor; clamped to 50 ms.`,\n );\n }\n if (this.pollMs < 100) {\n const entryCount = ledger.toJSON().entries.length;\n if (entryCount > 1000) {\n console.warn(\n `[Directive] AuditLedgerController polling every ${this.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 this.value = ledger.query(filter);\n host.addController(this);\n }\n\n hostConnected(): void {\n this.intervalId = setInterval(() => {\n const next = this.ledger.query(this.filter);\n // Always replace the array reference so consumers reading\n // `.value` see the latest snapshot, but only request a render\n // when the seq-window actually moved. At steady-state capacity\n // (e.g. 10k entries rolling over) the length is constant — using\n // length-diff alone misses every change. Compare the first and\n // last seq instead. (R4.C7)\n const moved =\n next[0]?.seq !== this.value[0]?.seq ||\n next[next.length - 1]?.seq !== this.value[this.value.length - 1]?.seq;\n this.value = next;\n if (moved) {\n this.host.requestUpdate();\n }\n }, this.pollMs);\n }\n\n hostDisconnected(): void {\n if (this.intervalId !== null) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/dev-true.ts","../src/index.ts"],"names":["dev_true_default","directiveContext","DirectiveController","host","system","DerivedController","key","result","id","FactController","factKey","InspectController","options","computeInspectState","update","throttled","cleanup","createThrottle","RequirementStatusController","statusPlugin","type","DirectiveSelectorController","selector","equalityFn","defaultEquality","initial","runTrackedSelector","unsub","onUpdate","depsChanged","WatchController","callback","ExplainController","requirementId","ConstraintStatusController","constraintId","inspection","c","OptimisticUpdateController","requirementType","updateFn","status","SystemController","createSystem","err","ModuleController","moduleDef","config","allPlugins","sp","createRequirementStatusPlugin","derivationKeys","getDerived","event","createDerived","createFact","createInspect","createRequirementStatus","createWatch","derivationId","createDirectiveSelector","createExplain","createConstraintStatus","createOptimisticUpdate","createModuleController","createModule","useDispatch","assertSystem","useEvents","HistoryController","_host","_system","buildHistoryState","getHistory","useHistory","getFact","createTypedHooks","NamespacedSelectorController","keys","createNamespacedSelector","QuerySystemController","factory","HydrationController","snapshot","mergedFacts","mergeHydrationFacts","AuditLedgerController","ledger","filter","opts","requestedPollMs","entryCount","next","moved"],"mappings":"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","file":"index.js","sourcesContent":["export default typeof process !== \"undefined\" &&\n process.env?.NODE_ENV !== \"production\";\n","/**\n * Lit Adapter - Consolidated Web Components integration for Directive\n *\n * Controllers: DerivedController, FactController,\n * InspectController (with throttle), RequirementStatusController,\n * DirectiveSelectorController,\n * WatchController (with fact mode), SystemController,\n * ExplainController, ConstraintStatusController, OptimisticUpdateController, ModuleController\n *\n * Factories: createDerived, createFact, createInspect,\n * createRequirementStatus, createWatch,\n * createDirectiveSelector, useDispatch, useEvents, useHistory,\n * getDerived, getFact, createTypedHooks, shallowEqual\n */\n\nimport type {\n CreateSystemOptionsSingle,\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 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 type TrackedSelectorResult,\n assertSystem,\n buildHistoryState,\n computeInspectState,\n createThrottle,\n defaultEquality,\n depsChanged,\n mergeHydrationFacts,\n runTrackedSelector,\n shallowEqual,\n} from \"@directive-run/core/adapter-utils\";\nimport type { ReactiveController, ReactiveControllerHost } from \"lit\";\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// Context\n// ============================================================================\n\n/**\n * Context key for Directive system.\n * Use with @lit/context for dependency injection across shadow DOM boundaries.\n */\nexport const directiveContext = Symbol(\"directive\");\n\n// ============================================================================\n// Base Controller\n// ============================================================================\n\n/**\n * Base controller that manages system subscription lifecycle.\n */\nabstract class DirectiveController implements ReactiveController {\n protected host: ReactiveControllerHost;\n protected system: SingleModuleSystem<any>;\n protected unsubscribe?: () => void;\n\n constructor(host: ReactiveControllerHost, system: SingleModuleSystem<any>) {\n this.host = host;\n this.system = system;\n host.addController(this);\n }\n\n hostConnected(): void {\n this.subscribe();\n }\n\n hostDisconnected(): void {\n this.unsubscribe?.();\n this.unsubscribe = undefined;\n }\n\n protected abstract subscribe(): void;\n\n protected requestUpdate(): void {\n this.host.requestUpdate();\n }\n}\n\n// ============================================================================\n// Core Controllers\n// ============================================================================\n\n/**\n * Reactive controller for derivations.\n * Accepts a single key (string) or an array of keys (string[]).\n * - Single key: `.value` returns `T`\n * - Array of keys: `.value` returns `Record<string, unknown>`\n */\nexport class DerivedController<T> extends DirectiveController {\n private keys: string[];\n private isMulti: boolean;\n value: T;\n\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n key: string | string[],\n ) {\n super(host, system);\n this.isMulti = Array.isArray(key);\n this.keys = this.isMulti ? (key as string[]) : [key as string];\n this.value = this.getValues();\n\n if (isDevelopment) {\n if (!this.isMulti && this.value === undefined) {\n console.warn(\n `[Directive] DerivedController(\"${this.keys[0]}\") returned undefined. ` +\n `Check that \"${this.keys[0]}\" is defined in your module's derive property.`,\n );\n }\n }\n }\n\n private getValues(): T {\n if (this.isMulti) {\n const result: Record<string, unknown> = {};\n for (const id of this.keys) {\n result[id] = this.system.read(id);\n }\n return result as T;\n }\n return this.system.read(this.keys[0]!) as T;\n }\n\n protected subscribe(): void {\n this.value = this.getValues();\n this.unsubscribe = this.system.subscribe(this.keys, () => {\n this.value = this.getValues();\n this.requestUpdate();\n });\n }\n}\n\n/**\n * Reactive controller for a single fact value.\n */\nexport class FactController<T> extends DirectiveController {\n private factKey: string;\n value: T | undefined;\n\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n factKey: string,\n ) {\n super(host, system);\n this.factKey = factKey;\n this.value = system.facts.$store.get(factKey) as T | undefined;\n\n if (isDevelopment) {\n if (!system.facts.$store.has(factKey)) {\n console.warn(\n `[Directive] FactController(\"${factKey}\") — fact not found in store. ` +\n `Check that \"${factKey}\" is defined in your module's schema.`,\n );\n }\n }\n }\n\n protected subscribe(): void {\n this.value = this.system.facts.$store.get(this.factKey) as T | undefined;\n this.unsubscribe = this.system.facts.$store.subscribe(\n [this.factKey],\n () => {\n this.value = this.system.facts.$store.get(this.factKey) as\n | T\n | undefined;\n this.requestUpdate();\n },\n );\n }\n}\n\n/**\n * Consolidated inspection controller.\n * Returns InspectState with optional throttling.\n */\nexport class InspectController extends DirectiveController {\n value: InspectState;\n private throttleMs: number;\n private throttleCleanup?: () => void;\n private unsubSettled?: () => void;\n\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n options?: { throttleMs?: number },\n ) {\n super(host, system);\n this.throttleMs = options?.throttleMs ?? 0;\n this.value = computeInspectState(system);\n }\n\n protected subscribe(): void {\n this.value = computeInspectState(this.system);\n\n const update = () => {\n this.value = computeInspectState(this.system);\n this.requestUpdate();\n };\n\n if (this.throttleMs > 0) {\n const { throttled, cleanup } = createThrottle(update, this.throttleMs);\n this.throttleCleanup = cleanup;\n this.unsubscribe = this.system.facts.$store.subscribeAll(throttled);\n this.unsubSettled = this.system.onSettledChange(throttled);\n } else {\n this.unsubscribe = this.system.facts.$store.subscribeAll(update);\n this.unsubSettled = this.system.onSettledChange(update);\n }\n }\n\n hostDisconnected(): void {\n this.throttleCleanup?.();\n this.unsubSettled?.();\n super.hostDisconnected();\n }\n}\n\n/**\n * Reactive controller for requirement status.\n */\nexport class RequirementStatusController implements ReactiveController {\n private host: ReactiveControllerHost;\n private statusPlugin: StatusPlugin;\n private type: string;\n private unsubscribe?: () => void;\n value: RequirementTypeStatus;\n\n constructor(\n host: ReactiveControllerHost,\n statusPlugin: StatusPlugin,\n type: string,\n ) {\n this.host = host;\n this.statusPlugin = statusPlugin;\n this.type = type;\n this.value = statusPlugin.getStatus(type);\n host.addController(this);\n }\n\n hostConnected(): void {\n this.value = this.statusPlugin.getStatus(this.type);\n this.unsubscribe = this.statusPlugin.subscribe(() => {\n this.value = this.statusPlugin.getStatus(this.type);\n this.host.requestUpdate();\n });\n }\n\n hostDisconnected(): void {\n this.unsubscribe?.();\n this.unsubscribe = undefined;\n }\n}\n\n// ============================================================================\n// Selector Controllers\n// ============================================================================\n\n/**\n * Reactive controller for selecting across all facts.\n * Uses `withTracking()` for auto-tracking when constructed with `autoTrack: true`.\n */\nexport class DirectiveSelectorController<\n S extends ModuleSchema = ModuleSchema,\n R = unknown,\n> extends DirectiveController {\n private selector: (state: InferSelectorState<S>) => R;\n private equalityFn: (a: R, b: R) => boolean;\n private autoTrack: boolean;\n private deriveKeySet: Set<string>;\n private trackedFactKeys: string[] = [];\n private trackedDeriveKeys: string[] = [];\n private unsubs: Array<() => void> = [];\n value: R;\n\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<S>,\n selector: (state: InferSelectorState<S>) => R,\n equalityFn: (a: R, b: R) => boolean = defaultEquality,\n options?: { autoTrack?: boolean },\n ) {\n super(host, system);\n this.selector = selector;\n this.equalityFn = equalityFn;\n this.autoTrack = options?.autoTrack ?? true;\n this.deriveKeySet = new Set(Object.keys(system.derive ?? {}));\n\n const initial = this.runWithTracking();\n this.value = initial.value;\n this.trackedFactKeys = initial.factKeys;\n this.trackedDeriveKeys = initial.deriveKeys;\n }\n\n private runWithTracking(): TrackedSelectorResult<R> {\n return runTrackedSelector(\n this.system,\n this.deriveKeySet,\n this.selector as (state: Record<string, unknown>) => R,\n );\n }\n\n private resubscribe(): void {\n for (const unsub of this.unsubs) unsub();\n this.unsubs = [];\n\n const onUpdate = () => {\n const result = this.runWithTracking();\n if (!this.equalityFn(this.value, result.value)) {\n this.value = result.value;\n this.requestUpdate();\n }\n if (this.autoTrack) {\n // Re-track: check if deps changed\n if (\n depsChanged(\n this.trackedFactKeys,\n result.factKeys,\n this.trackedDeriveKeys,\n result.deriveKeys,\n )\n ) {\n this.trackedFactKeys = result.factKeys;\n this.trackedDeriveKeys = result.deriveKeys;\n this.resubscribe();\n }\n }\n };\n\n if (this.autoTrack) {\n if (this.trackedFactKeys.length > 0) {\n this.unsubs.push(\n this.system.facts.$store.subscribe(this.trackedFactKeys, onUpdate),\n );\n } else if (this.trackedDeriveKeys.length === 0) {\n this.unsubs.push(this.system.facts.$store.subscribeAll(onUpdate));\n }\n if (this.trackedDeriveKeys.length > 0) {\n this.unsubs.push(\n this.system.subscribe(this.trackedDeriveKeys, onUpdate),\n );\n }\n } else {\n this.unsubs.push(this.system.facts.$store.subscribeAll(onUpdate));\n }\n }\n\n protected subscribe(): void {\n const result = this.runWithTracking();\n this.value = result.value;\n this.trackedFactKeys = result.factKeys;\n this.trackedDeriveKeys = result.deriveKeys;\n this.resubscribe();\n }\n\n hostDisconnected(): void {\n for (const unsub of this.unsubs) unsub();\n this.unsubs = [];\n super.hostDisconnected();\n }\n}\n\n/**\n * Reactive controller that watches a fact or derivation and calls a callback on change.\n * The key is auto-detected — works with both fact keys and derivation keys.\n */\nexport class WatchController<T> extends DirectiveController {\n private key: string;\n private callback: (newValue: T, previousValue: T | undefined) => void;\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. */\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n key: string,\n callback: (newValue: T, previousValue: T | undefined) => void,\n ) {\n super(host, system);\n this.key = key;\n this.callback = callback;\n }\n\n protected subscribe(): void {\n this.unsubscribe = this.system.watch<T>(this.key, this.callback);\n }\n}\n\n// ============================================================================\n// New Controllers\n// ============================================================================\n\n/**\n * Reactive controller for requirement explanations.\n */\nexport class ExplainController extends DirectiveController {\n private requirementId: string;\n value: string | null;\n private unsubSettled?: () => void;\n\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n requirementId: string,\n ) {\n super(host, system);\n this.requirementId = requirementId;\n this.value = system.explain(requirementId);\n }\n\n protected subscribe(): void {\n this.value = this.system.explain(this.requirementId);\n\n const update = () => {\n this.value = this.system.explain(this.requirementId);\n this.requestUpdate();\n };\n\n this.unsubscribe = this.system.facts.$store.subscribeAll(update);\n this.unsubSettled = this.system.onSettledChange(update);\n }\n\n hostDisconnected(): void {\n this.unsubSettled?.();\n super.hostDisconnected();\n }\n}\n\n/**\n * Reactive controller for constraint status.\n */\nexport class ConstraintStatusController extends DirectiveController {\n private constraintId?: string;\n value: ConstraintInfo[] | ConstraintInfo | null;\n private unsubSettled?: () => void;\n\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n constraintId?: string,\n ) {\n super(host, system);\n this.constraintId = constraintId;\n this.value = this.getVal();\n }\n\n private getVal(): ConstraintInfo[] | ConstraintInfo | null {\n const inspection = this.system.inspect();\n if (!this.constraintId) return inspection.constraints;\n return (\n inspection.constraints.find(\n (c: ConstraintInfo) => c.id === this.constraintId,\n ) ?? null\n );\n }\n\n protected subscribe(): void {\n this.value = this.getVal();\n\n const update = () => {\n this.value = this.getVal();\n this.requestUpdate();\n };\n\n this.unsubscribe = this.system.facts.$store.subscribeAll(update);\n this.unsubSettled = this.system.onSettledChange(update);\n }\n\n hostDisconnected(): void {\n this.unsubSettled?.();\n super.hostDisconnected();\n }\n}\n\n/**\n * Reactive controller for optimistic updates.\n */\nexport class OptimisticUpdateController implements ReactiveController {\n private host: ReactiveControllerHost;\n private system: SingleModuleSystem<any>;\n private statusPlugin?: StatusPlugin;\n private requirementType?: string;\n private snapshot: SystemSnapshot | null = null;\n private statusUnsub: (() => void) | null = null;\n\n isPending = false;\n error: Error | null = null;\n\n constructor(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n statusPlugin?: StatusPlugin,\n requirementType?: string,\n ) {\n this.host = host;\n this.system = system;\n this.statusPlugin = statusPlugin;\n this.requirementType = requirementType;\n host.addController(this);\n }\n\n hostConnected(): void {}\n\n hostDisconnected(): void {\n this.statusUnsub?.();\n this.statusUnsub = null;\n }\n\n rollback(): void {\n if (this.snapshot) {\n this.system.restore(this.snapshot);\n this.snapshot = null;\n }\n this.isPending = false;\n this.error = null;\n this.statusUnsub?.();\n this.statusUnsub = null;\n this.host.requestUpdate();\n }\n\n mutate(updateFn: () => void): void {\n this.snapshot = this.system.getSnapshot();\n this.isPending = true;\n this.error = null;\n this.system.batch(updateFn);\n this.host.requestUpdate();\n\n if (this.statusPlugin && this.requirementType) {\n this.statusUnsub?.();\n this.statusUnsub = this.statusPlugin.subscribe(() => {\n const status = this.statusPlugin!.getStatus(this.requirementType!);\n if (!status.isLoading && !status.hasError) {\n this.snapshot = null;\n this.isPending = false;\n this.statusUnsub?.();\n this.statusUnsub = null;\n this.host.requestUpdate();\n } else if (status.hasError) {\n this.error = status.lastError;\n this.rollback();\n }\n });\n }\n }\n}\n\n/**\n * Reactive controller that creates and manages a Directive system.\n * The system is automatically started when the host connects and destroyed when it disconnects.\n */\nexport class SystemController<M extends ModuleSchema>\n implements ReactiveController\n{\n private options: ModuleDef<M> | CreateSystemOptionsSingle<M>;\n private _system: SingleModuleSystem<M> | null = null;\n\n constructor(\n host: ReactiveControllerHost,\n options: ModuleDef<M> | CreateSystemOptionsSingle<M>,\n ) {\n this.options = options;\n host.addController(this);\n }\n\n get system(): SingleModuleSystem<M> {\n if (!this._system) {\n throw new Error(\n \"[Directive] SystemController.system is not available. \" +\n \"This can happen if:\\n\" +\n \" 1. Accessed before hostConnected (e.g., in a class field initializer)\\n\" +\n \" 2. Accessed after hostDisconnected (system was destroyed)\\n\" +\n \"Solution: Access system only in lifecycle methods (connectedCallback, render) \" +\n \"or after the element is connected to the DOM.\",\n );\n }\n return this._system;\n }\n\n hostConnected(): void {\n const isModule = \"id\" in this.options && \"schema\" in this.options;\n const system = isModule\n ? createSystem({ module: this.options as ModuleDef<M> })\n : createSystem(this.options as CreateSystemOptionsSingle<M>);\n this._system = system as unknown as SingleModuleSystem<M>;\n this._system.start();\n }\n\n hostDisconnected(): void {\n // RFC 0009 follow-up: destroyAsync so source\n // unsubscribes complete; fire-and-forget with swallow-catch\n // (Lit's hostDisconnected is sync).\n this._system?.destroyAsync().catch((err: unknown) => {\n if (isDevelopment)\n console.warn(\"[Directive] destroyAsync rejected during unmount:\", err);\n });\n this._system = null;\n }\n}\n\n/**\n * Module controller — zero-config all-in-one.\n * Creates system, starts it, subscribes to all facts/derivations.\n */\nexport class ModuleController<M extends ModuleSchema>\n implements ReactiveController\n{\n private host: ReactiveControllerHost;\n private moduleDef: ModuleDef<M>;\n private config?: {\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 };\n\n private _system: SingleModuleSystem<M> | null = null;\n private unsubFacts?: () => void;\n private unsubDerived?: () => void;\n\n facts: InferFacts<M> = {} as InferFacts<M>;\n derived: InferDerivations<M> = {} as InferDerivations<M>;\n statusPlugin?: StatusPlugin;\n\n get system(): SingleModuleSystem<M> {\n if (!this._system) {\n throw new Error(\n \"[Directive] ModuleController.system is not available before hostConnected.\",\n );\n }\n return this._system;\n }\n\n get events(): SingleModuleSystem<M>[\"events\"] {\n return this.system.events;\n }\n\n constructor(\n host: ReactiveControllerHost,\n moduleDef: ModuleDef<M>,\n config?: {\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 },\n ) {\n this.host = host;\n this.moduleDef = moduleDef;\n this.config = config;\n host.addController(this);\n }\n\n hostConnected(): void {\n const allPlugins = [...(this.config?.plugins ?? [])];\n\n if (this.config?.status) {\n const sp = createRequirementStatusPlugin();\n this.statusPlugin = sp;\n allPlugins.push(sp.plugin as Plugin<any>);\n }\n\n const system = createSystem({\n module: this.moduleDef,\n plugins: allPlugins.length > 0 ? allPlugins : undefined,\n trace: this.config?.trace,\n errorBoundary: this.config?.errorBoundary,\n tickMs: this.config?.tickMs,\n zeroConfig: this.config?.zeroConfig,\n initialFacts: this.config?.initialFacts,\n } as any) as unknown as SingleModuleSystem<M>;\n\n this._system = system;\n system.start();\n\n // Subscribe to all facts\n this.facts = system.facts.$store.toObject() as InferFacts<M>;\n this.unsubFacts = system.facts.$store.subscribeAll(() => {\n this.facts = system.facts.$store.toObject() as InferFacts<M>;\n this.host.requestUpdate();\n });\n\n // Subscribe to all derivations\n const derivationKeys = Object.keys(system.derive ?? {});\n const getDerived = (): InferDerivations<M> => {\n const result: Record<string, unknown> = {};\n for (const key of derivationKeys) {\n result[key] = system.read(key);\n }\n return result as InferDerivations<M>;\n };\n this.derived = getDerived();\n\n if (derivationKeys.length > 0) {\n this.unsubDerived = system.subscribe(derivationKeys, () => {\n this.derived = getDerived();\n this.host.requestUpdate();\n });\n }\n }\n\n hostDisconnected(): void {\n this.unsubFacts?.();\n this.unsubDerived?.();\n // follow-up — switched `SystemController` and\n // `DirectiveQueryController` to `destroyAsync` but missed the\n // zero-config `ModuleController` (this class). Same rationale:\n // source unsubscribes are async (Supabase, MCP); sync destroy\n // would drop those Promises on the floor and leave brokers\n // holding ghost subscriptions until heartbeat. Fire-and-forget\n // with a swallow-catch — Lit's hostDisconnected is sync.\n this._system?.destroyAsync().catch((err: unknown) => {\n if (isDevelopment)\n console.warn(\"[Directive] destroyAsync rejected during unmount:\", err);\n });\n this._system = null;\n }\n\n dispatch(event: InferEvents<M>): void {\n this.system.dispatch(event);\n }\n}\n\n// ============================================================================\n// Factory Functions (active)\n// ============================================================================\n\nexport function createDerived<T>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n key: string | string[],\n): DerivedController<T> {\n return new DerivedController<T>(host, system, key);\n}\n\nexport function createFact<T>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n factKey: string,\n): FactController<T> {\n return new FactController<T>(host, system, factKey);\n}\n\n/**\n * Create an inspect controller.\n * Returns InspectState; pass `{ throttleMs }` for throttled updates.\n */\nexport function createInspect(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n options?: { throttleMs?: number },\n): InspectController {\n return new InspectController(host, system, options);\n}\n\nexport function createRequirementStatus(\n host: ReactiveControllerHost,\n statusPlugin: StatusPlugin,\n type: string,\n): RequirementStatusController {\n return new RequirementStatusController(host, statusPlugin, type);\n}\n\nexport function createWatch<T>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n derivationId: string,\n callback: (newValue: T, previousValue: T | undefined) => void,\n): WatchController<T> {\n return new WatchController<T>(host, system, derivationId, callback);\n}\n\nexport function createDirectiveSelector<S extends ModuleSchema, R>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<S>,\n selector: (state: InferSelectorState<S>) => R,\n equalityFn: (a: R, b: R) => boolean = defaultEquality,\n options?: { autoTrack?: boolean },\n): DirectiveSelectorController<S, R> {\n return new DirectiveSelectorController<S, R>(\n host,\n system,\n selector,\n equalityFn,\n options,\n );\n}\n\nexport function createExplain(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n requirementId: string,\n): ExplainController {\n return new ExplainController(host, system, requirementId);\n}\n\nexport function createConstraintStatus(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n constraintId?: string,\n): ConstraintStatusController {\n return new ConstraintStatusController(host, system, constraintId);\n}\n\nexport function createOptimisticUpdate(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<any>,\n statusPlugin?: StatusPlugin,\n requirementType?: string,\n): OptimisticUpdateController {\n return new OptimisticUpdateController(\n host,\n system,\n statusPlugin,\n requirementType,\n );\n}\n\n/**\n * Build a `ModuleController` from a Directive module definition.\n *\n * The function is exported as both `createModuleController` (preferred)\n * and `createModule` (legacy alias). The original `createModule` name\n * collides with `@directive-run/core`'s `createModule` — importing\n * both into the same scope shadows whichever lands last in editor\n * auto-import order. New code should use `createModuleController`;\n * the `createModule` alias remains so existing imports still resolve.\n */\nexport function createModuleController<M extends ModuleSchema>(\n host: ReactiveControllerHost,\n moduleDef: ModuleDef<M>,\n config?: {\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 },\n): ModuleController<M> {\n return new ModuleController<M>(host, moduleDef, config);\n}\n\n/**\n * Legacy alias for `createModuleController`. Collides by name with\n * `@directive-run/core`'s `createModule`. New code should prefer\n * `createModuleController`.\n *\n * @deprecated Renamed to `createModuleController` — same shape, no\n * import collision with `@directive-run/core`. The function-wrapper\n * shape (vs `export const x = y`) ensures the `@deprecated` JSDoc\n * tag renders the strikethrough in every TS-aware editor.\n */\nexport function createModule<M extends ModuleSchema>(\n host: ReactiveControllerHost,\n moduleDef: ModuleDef<M>,\n config?: Parameters<typeof createModuleController<M>>[2],\n): ModuleController<M> {\n return createModuleController<M>(host, moduleDef, config);\n}\n\n// ============================================================================\n// Functional Helpers\n// ============================================================================\n\nexport function useDispatch<M extends ModuleSchema = ModuleSchema>(\n system: SingleModuleSystem<M>,\n): (event: InferEvents<M>) => void {\n assertSystem(\"useDispatch\", system);\n return (event: InferEvents<M>) => {\n system.dispatch(event);\n };\n}\n\n/**\n * Returns the system's events dispatcher.\n */\nexport function useEvents<M extends ModuleSchema = ModuleSchema>(\n system: SingleModuleSystem<M>,\n): SingleModuleSystem<M>[\"events\"] {\n assertSystem(\"useEvents\", system);\n return system.events;\n}\n\n/**\n * Reactive controller for history state.\n * Triggers host updates when snapshots change or navigation occurs.\n *\n * @example\n * ```typescript\n * class MyElement extends LitElement {\n * private _history = new HistoryController(this, system);\n * render() {\n * const h = this._history.value;\n * return html`<button ?disabled=${!h?.canGoBack} @click=${() => h?.goBack()}>Undo</button>`;\n * }\n * }\n * ```\n */\nexport class HistoryController implements ReactiveController {\n value: HistoryState | null = null;\n private _unsub?: () => void;\n\n constructor(\n private _host: ReactiveControllerHost,\n private _system: SingleModuleSystem<any>,\n ) {\n this._host.addController(this);\n }\n\n hostConnected(): void {\n this.value = buildHistoryState(this._system);\n this._unsub = this._system.onHistoryChange(() => {\n this.value = buildHistoryState(this._system);\n this._host.requestUpdate();\n });\n }\n\n hostDisconnected(): void {\n this._unsub?.();\n this._unsub = undefined;\n }\n}\n\n/**\n * Snapshot-only history helper. Returns the current `HistoryState`\n * once and does not re-fire when history mutates.\n *\n * **Named `getHistory` to match the snapshot semantics.** The Lit\n * adapter intentionally provides a non-reactive variant alongside\n * the reactive `HistoryController` so callers reading history once\n * (e.g. logging the last snapshot before a destroy) don't have to\n * spin up a controller. The previous name `useHistory` collided\n * with the reactive `useHistory` semantics in\n * `@directive-run/{react,vue,svelte,solid}` where the hook IS\n * reactive — same name, opposite contract.\n *\n * For reactive history, use `HistoryController`.\n */\nexport function getHistory(\n system: SingleModuleSystem<any>,\n): HistoryState | null {\n assertSystem(\"getHistory\", system);\n return buildHistoryState(system);\n}\n\n/**\n * @deprecated Renamed to `getHistory`. The Lit functional helper is\n * snapshot-only; React/Vue/Svelte/Solid `useHistory` is reactive.\n * Use `HistoryController` for the reactive Lit equivalent. The\n * function-wrapper shape (vs `export const x = y`) ensures the\n * `@deprecated` JSDoc tag renders in every TS-aware editor.\n */\nexport function useHistory(\n system: SingleModuleSystem<any>,\n): HistoryState | null {\n return getHistory(system);\n}\n\nexport function getDerived<T>(\n system: SingleModuleSystem<any>,\n derivationId: string,\n): () => T {\n return () => system.read(derivationId) as T;\n}\n\nexport function getFact<T>(\n system: SingleModuleSystem<any>,\n factKey: string,\n): () => T | undefined {\n return () => system.facts.$store.get(factKey) as T | undefined;\n}\n\n// ============================================================================\n// Typed Hooks Factory\n// ============================================================================\n\nexport function createTypedHooks<M extends ModuleSchema>(): {\n createDerived: <K extends keyof InferDerivations<M>>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<M>,\n derivationId: K,\n ) => DerivedController<InferDerivations<M>[K]>;\n createFact: <K extends keyof InferFacts<M>>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<M>,\n factKey: K,\n ) => FactController<InferFacts<M>[K]>;\n useDispatch: (\n system: SingleModuleSystem<M>,\n ) => (event: InferEvents<M>) => void;\n useEvents: (system: SingleModuleSystem<M>) => SingleModuleSystem<M>[\"events\"];\n createWatch: <K extends string>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<M>,\n key: K,\n callback: (newValue: unknown, previousValue: unknown) => void,\n ) => WatchController<unknown>;\n} {\n return {\n createDerived: <K extends keyof InferDerivations<M>>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<M>,\n derivationId: K,\n ) =>\n createDerived<InferDerivations<M>[K]>(\n host,\n system,\n derivationId as string,\n ),\n createFact: <K extends keyof InferFacts<M>>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<M>,\n factKey: K,\n ) => createFact<InferFacts<M>[K]>(host, system, factKey as string),\n useDispatch: (system: SingleModuleSystem<M>) => {\n return (event: InferEvents<M>) => {\n system.dispatch(event);\n };\n },\n useEvents: (system: SingleModuleSystem<M>) => system.events,\n createWatch: <K extends string>(\n host: ReactiveControllerHost,\n system: SingleModuleSystem<M>,\n key: K,\n callback: (newValue: unknown, previousValue: unknown) => void,\n ) => createWatch<unknown>(host, system, key, callback),\n };\n}\n\n// ============================================================================\n// NamespacedSelectorController — select from a NamespacedSystem\n// ============================================================================\n\n/**\n * Reactive controller that selects from a NamespacedSystem.\n * Subscribes to specified keys and triggers host updates.\n *\n * @example\n * ```typescript\n * class MyElement extends LitElement {\n * private token = new NamespacedSelectorController(\n * this, system, [\"auth.token\"], (s) => s.facts.auth.token,\n * );\n * render() {\n * return html`<span>${this.token.value}</span>`;\n * }\n * }\n * ```\n */\nexport class NamespacedSelectorController<Modules extends ModulesMap, R>\n implements ReactiveController\n{\n private host: ReactiveControllerHost;\n private system: NamespacedSystem<Modules>;\n private keys: string[];\n private selector: (system: NamespacedSystem<Modules>) => R;\n private unsubscribe?: () => void;\n value: R;\n\n constructor(\n host: ReactiveControllerHost,\n system: NamespacedSystem<Modules>,\n keys: string[],\n selector: (system: NamespacedSystem<Modules>) => R,\n ) {\n this.host = host;\n this.system = system;\n this.keys = keys;\n this.selector = selector;\n this.value = selector(system);\n host.addController(this);\n }\n\n hostConnected(): void {\n this.value = this.selector(this.system);\n this.unsubscribe = this.system.subscribe(this.keys, () => {\n this.value = this.selector(this.system);\n this.host.requestUpdate();\n });\n }\n\n hostDisconnected(): void {\n this.unsubscribe?.();\n this.unsubscribe = undefined;\n }\n}\n\nexport function createNamespacedSelector<Modules extends ModulesMap, R>(\n host: ReactiveControllerHost,\n system: NamespacedSystem<Modules>,\n keys: string[],\n selector: (system: NamespacedSystem<Modules>) => R,\n): NamespacedSelectorController<Modules, R> {\n return new NamespacedSelectorController(host, system, keys, selector);\n}\n\n// ============================================================================\n// QuerySystemController — Stable query system with Lit lifecycle\n// ============================================================================\n\n/**\n * Lit reactive controller that creates and manages a query system.\n * Starts on connect, destroys on disconnect.\n *\n * @example\n * ```typescript\n * import { LitElement, html } from \"lit\";\n * import { QuerySystemController } from \"@directive-run/lit\";\n * import { createQuerySystem } from \"@directive-run/query\";\n *\n * class MyApp extends LitElement {\n * private app = new QuerySystemController(this, () =>\n * createQuerySystem({\n * facts: { userId: \"\" },\n * queries: { user: { key: ..., fetcher: ... } },\n * autoStart: false,\n * })\n * );\n *\n * render() {\n * const user = this.app.system.read(\"user\");\n * return html`<div>${user.data?.name}</div>`;\n * }\n * }\n * ```\n */\nexport class QuerySystemController<\n T extends {\n start: () => void;\n destroy: () => void;\n isRunning?: boolean;\n [key: string]: any;\n },\n> implements ReactiveController\n{\n private _system: T | null = null;\n private factory: () => T;\n\n constructor(host: ReactiveControllerHost, factory: () => T) {\n this.factory = factory;\n host.addController(this);\n }\n\n get system(): T {\n if (!this._system) {\n throw new Error(\n \"[Directive] QuerySystemController.system is not available. \" +\n \"Access it only in lifecycle methods or after the element is connected.\",\n );\n }\n return this._system;\n }\n\n hostConnected(): void {\n this._system = this.factory();\n if (!this._system.isRunning) {\n this._system.start();\n }\n }\n\n hostDisconnected(): void {\n // RFC 0009 follow-up: destroyAsync so source\n // unsubscribes complete; fire-and-forget with swallow-catch\n // (Lit's hostDisconnected is sync).\n this._system?.destroyAsync().catch((err: unknown) => {\n if (isDevelopment)\n console.warn(\"[Directive] destroyAsync rejected during unmount:\", err);\n });\n this._system = null;\n }\n}\n\n// ============================================================================\n// SSR Hydration\n// ============================================================================\n\n/**\n * Lit reactive controller for SSR hydration.\n * Accepts a DistributableSnapshot and creates a hydrated system.\n *\n * @example\n * ```typescript\n * class MyElement extends LitElement {\n * private hydration = new HydrationController(this, serverSnapshot);\n * private system = this.hydration.createSystem(myModule);\n * }\n * ```\n */\nexport class HydrationController implements ReactiveController {\n private snapshot: Record<string, unknown> | undefined;\n private systems: SingleModuleSystem<any>[] = [];\n\n constructor(\n host: ReactiveControllerHost,\n snapshot?: Record<string, unknown>,\n ) {\n this.snapshot = snapshot;\n host.addController(this);\n }\n\n hostConnected(): void {}\n\n hostDisconnected(): void {\n // RFC 0009 follow-up: destroyAsync per system so\n // source unsubscribes complete; fire-and-forget with swallow-catch\n // (Lit's hostDisconnected is sync).\n for (const system of this.systems) {\n system.destroyAsync().catch((err: unknown) => {\n if (isDevelopment)\n console.warn(\n \"[Directive] destroyAsync rejected during unmount:\",\n err,\n );\n });\n }\n this.systems = [];\n }\n\n createSystem<S extends ModuleSchema>(\n moduleDef: ModuleDef<S>,\n config?: {\n plugins?: Plugin<any>[];\n trace?: TraceOption;\n errorBoundary?: ErrorBoundaryConfig;\n tickMs?: number;\n zeroConfig?: boolean;\n initialFacts?: Record<string, any>;\n },\n ): SingleModuleSystem<S> {\n const mergedFacts = mergeHydrationFacts(\n this.snapshot,\n config?.initialFacts,\n );\n const system = createSystem({\n module: moduleDef,\n plugins: config?.plugins,\n trace: config?.trace,\n errorBoundary: config?.errorBoundary,\n tickMs: config?.tickMs,\n zeroConfig: config?.zeroConfig,\n initialFacts: mergedFacts,\n } as any) as unknown as SingleModuleSystem<S>;\n\n this.systems.push(system);\n\n if (typeof window !== \"undefined\") {\n system.start();\n }\n\n return system;\n }\n}\n\n// ============================================================================\n// AuditLedgerController — live ledger entries with filter (R4.I parity)\n// ============================================================================\n\nimport type { AuditEntry, AuditLedger, QueryFilter } from \"@directive-run/core\";\n\n/**\n * Reactive controller exposing the latest audit-ledger entries matching\n * `filter` as `.value`. Polls (default 250 ms — override with `pollMs`)\n * and re-renders the host on each tick that brings new matches.\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 * @example\n * ```ts\n * import { AuditLedgerController } from \"@directive-run/lit\";\n *\n * class AuditLog extends LitElement {\n * private ledgerCtrl = new AuditLedgerController(\n * this,\n * ledger,\n * { kind: \"constraint.evaluate\", limit: 20 },\n * );\n *\n * render() {\n * return html`<ul>\n * ${this.ledgerCtrl.value.map(e => html`<li>${e.kind} @ ${e.ts}</li>`)}\n * </ul>`;\n * }\n * }\n * ```\n */\nexport class AuditLedgerController implements ReactiveController {\n private host: ReactiveControllerHost;\n private ledger: AuditLedger;\n private filter: QueryFilter;\n private pollMs: number;\n private intervalId: ReturnType<typeof setInterval> | null = null;\n\n /**\n * Latest matching audit entries. Updates on each poll tick when the\n * seq-window (first/last entry seq) changes. Lit `requestUpdate()` is\n * only called when the window moves — in-place tombstone replacement\n * within the visible window does NOT trigger re-render (use the ledger's\n * onWrite hook for revision-level updates when added).\n */\n value: readonly AuditEntry[];\n\n constructor(\n host: ReactiveControllerHost,\n ledger: AuditLedger,\n filter: QueryFilter = {},\n opts: { pollMs?: number } = {},\n ) {\n this.host = host;\n this.ledger = ledger;\n this.filter = filter;\n const requestedPollMs = opts.pollMs ?? 250;\n this.pollMs = Math.max(50, requestedPollMs);\n\n if (isDevelopment) {\n if (opts.pollMs !== undefined && opts.pollMs < 50) {\n console.warn(\n `[Directive] AuditLedgerController pollMs=${opts.pollMs} is below the 50 ms floor; clamped to 50 ms.`,\n );\n }\n if (this.pollMs < 100) {\n const entryCount = ledger.toJSON().entries.length;\n if (entryCount > 1000) {\n console.warn(\n `[Directive] AuditLedgerController polling every ${this.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 this.value = ledger.query(filter);\n host.addController(this);\n }\n\n hostConnected(): void {\n this.intervalId = setInterval(() => {\n const next = this.ledger.query(this.filter);\n // Always replace the array reference so consumers reading\n // `.value` see the latest snapshot, but only request a render\n // when the seq-window actually moved. At steady-state capacity\n // (e.g. 10k entries rolling over) the length is constant — using\n // length-diff alone misses every change. Compare the first and\n // last seq instead. (R4.C7)\n const moved =\n next[0]?.seq !== this.value[0]?.seq ||\n next[next.length - 1]?.seq !== this.value[this.value.length - 1]?.seq;\n this.value = next;\n if (moved) {\n this.host.requestUpdate();\n }\n }, this.pollMs);\n }\n\n hostDisconnected(): void {\n if (this.intervalId !== null) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@directive-run/lit",
3
- "version": "1.23.0",
3
+ "version": "1.23.1",
4
4
  "imports": {
5
5
  "#is-development": {
6
6
  "production": "./src/dev-false.ts",
@@ -58,12 +58,12 @@
58
58
  "lit": "^3.1.0",
59
59
  "tsup": "^8.3.5",
60
60
  "typescript": "^5.7.2",
61
- "@directive-run/core": "1.23.0"
61
+ "@directive-run/core": "1.23.1"
62
62
  },
63
63
  "scripts": {
64
64
  "build": "tsup",
65
65
  "dev": "tsup --watch",
66
- "test": "vitest run",
66
+ "test": "cd ../.. && vitest run packages/lit/",
67
67
  "typecheck": "tsc --noEmit",
68
68
  "clean": "rm -rf dist"
69
69
  }