@hurum/core 0.0.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/events.ts","../src/command-executor.ts","../src/intent.ts","../src/computed.ts","../src/nested.ts","../src/selector.ts","../src/store.ts","../src/middleware/logger.ts","../src/middleware/persist.ts","../src/middleware/devtools.ts","../src/middleware/undo-redo.ts"],"names":["map"],"mappings":"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","file":"index.cjs","sourcesContent":["// @hurum/core — Events + Event\n\n// Symbol used to brand event creators\nconst EVENT_CREATOR_BRAND = Symbol('hurum/event-creator')\n\n/** Marker type for event payload definition */\nexport interface EventDefinition<T> {\n readonly __payload?: T\n}\n\n/** An event instance: has a `type` string and payload properties */\nexport type EventInstance<TType extends string = string, TPayload = unknown> = {\n readonly type: TType\n} & TPayload\n\n/** An event creator function that produces typed event instances */\nexport interface EventCreator<TType extends string = string, TPayload = unknown> {\n (payload: TPayload): EventInstance<TType, TPayload>\n readonly type: TType\n readonly [EVENT_CREATOR_BRAND]: true\n}\n\n/**\n * Define an event payload type. Used within `Events()` to declare event shapes.\n *\n * @example\n * ```ts\n * const MyEvent = Events('My', {\n * happened: Event<{ value: number }>(),\n * })\n * ```\n */\nexport function Event<T = {}>(): EventDefinition<T> {\n return {} as EventDefinition<T>\n}\n\n// Type-level helper: Extract event creators from definition map\ntype EventCreatorMap<TPrefix extends string, TDefs extends Record<string, EventDefinition<unknown>>> = {\n readonly [K in keyof TDefs & string]: TDefs[K] extends EventDefinition<infer P>\n ? EventCreator<`${TPrefix}/${K}`, P>\n : never\n}\n\n/**\n * Create a namespaced group of event creators.\n *\n * @example\n * ```ts\n * const PurchaseEvent = Events('Purchase', {\n * saved: Event<{ purchase: Purchase }>(),\n * saveFailed: Event<{ error: Error }>(),\n * })\n *\n * PurchaseEvent.saved({ purchase }) // { type: 'Purchase/saved', purchase: ... }\n * PurchaseEvent.saved.type // 'Purchase/saved' (string literal type)\n * ```\n */\nexport function Events<\n TPrefix extends string,\n TDefs extends Record<string, EventDefinition<unknown>>,\n>(prefix: TPrefix, events: TDefs): EventCreatorMap<TPrefix, TDefs> {\n const result = {} as Record<string, unknown>\n\n for (const key of Object.keys(events)) {\n const type = `${prefix}/${key}` as const\n const creator = function (payload: unknown) {\n return { ...payload as object, type }\n } as EventCreator\n Object.defineProperty(creator, 'type', {\n value: type,\n writable: false,\n enumerable: true,\n configurable: false,\n })\n Object.defineProperty(creator, EVENT_CREATOR_BRAND, {\n value: true,\n writable: false,\n enumerable: false,\n configurable: false,\n })\n result[key] = creator\n }\n\n return result as EventCreatorMap<TPrefix, TDefs>\n}\n\n/** Check if a value is an event creator */\nexport function isEventCreator(value: unknown): value is EventCreator {\n return typeof value === 'function'\n && EVENT_CREATOR_BRAND in value\n && (value as Record<symbol, unknown>)[EVENT_CREATOR_BRAND] === true\n}\n","// @hurum/core — CommandExecutor\n\nimport type { EventCreator, EventInstance } from './events'\n\n// Branding symbols\nconst COMMAND_BRAND = Symbol('hurum/command')\nconst EXECUTOR_BRAND = Symbol('hurum/executor')\n\n/** A branded command type. Commands are identified by their unique symbol. */\nexport interface Command<TInput = unknown> {\n readonly [COMMAND_BRAND]: symbol\n readonly name?: string\n readonly __inputType?: TInput\n}\n\n/** Context provided to executor functions */\nexport interface ExecutorContext<TDeps = unknown, TState = unknown> {\n readonly deps: TDeps\n readonly emit: (event: EventInstance) => void\n readonly getState: () => TState\n readonly signal: AbortSignal\n /** Access nested child store instances. Available when the store has Nested fields. */\n readonly scope: Record<string, unknown>\n}\n\n/** The executor function type */\nexport type ExecutorFn<TInput, TDeps, TState> = (\n command: TInput,\n context: ExecutorContext<TDeps, TState>,\n) => void | Promise<void>\n\n/** An executor registered with a Store.\n * __fn is type-erased (never params) to keep Executor covariant in TInput/TDeps/TState. */\nexport interface Executor<TInput = unknown, TDeps = unknown, TState = unknown> {\n readonly [EXECUTOR_BRAND]: true\n readonly __command: Command<TInput>\n readonly __fn: (command: never, context: never) => void | Promise<void>\n readonly __inputType?: TInput\n readonly __depsType?: TDeps\n readonly __stateType?: TState\n}\n\n/**\n * Create a CommandExecutor pair: [Command, Executor].\n *\n * Optionally provide a name as the first argument for devtools visibility.\n *\n * @example\n * ```ts\n * // With explicit name\n * const [SaveCmd, SaveExec] = CommandExecutor<\n * { purchase: Purchase },\n * { repo: PurchaseRepo },\n * >('SavePurchase', async (command, { deps, emit }) => {\n * const result = await deps.repo.save(command.purchase)\n * result.match(\n * (saved) => emit(PurchaseEvent.saved({ purchase: saved })),\n * (error) => emit(PurchaseEvent.saveFailed({ error })),\n * )\n * })\n *\n * // Without name (fn.name used as fallback for named functions)\n * const [SaveCmd, SaveExec] = CommandExecutor<{ purchase: Purchase }>(\n * async function SavePurchase(command, { emit }) => { ... }\n * )\n * ```\n */\nexport function CommandExecutor<\n TInput,\n TDeps = Record<string, never>,\n TState = unknown,\n>(\n nameOrFn: string | ExecutorFn<TInput, TDeps, TState>,\n maybeFn?: ExecutorFn<TInput, TDeps, TState>,\n): [Command<TInput>, Executor<TInput, TDeps, TState>] {\n const name = typeof nameOrFn === 'string' ? nameOrFn : (nameOrFn.name || undefined)\n const fn = typeof nameOrFn === 'string' ? maybeFn! : nameOrFn\n\n const commandId = Symbol('hurum/command-id')\n const command: Command<TInput> = {\n [COMMAND_BRAND]: commandId,\n ...(name ? { name } : {}),\n }\n const executor: Executor<TInput, TDeps, TState> = {\n [EXECUTOR_BRAND]: true,\n __command: command,\n __fn: fn as Executor['__fn'],\n }\n return [command, executor]\n}\n\n/**\n * Create a passthrough CommandExecutor that simply emits an event with\n * the command payload (optionally transformed).\n *\n * Optionally provide a name as the first argument for devtools visibility.\n *\n * @example\n * ```ts\n * // With name\n * const [IncrCmd, IncrExec] = CommandExecutor.passthrough('Increment', CounterEvent.incremented)\n *\n * // Without name\n * const [IncrCmd, IncrExec] = CommandExecutor.passthrough(CounterEvent.incremented)\n *\n * // With name + transform\n * const [SetCmd, SetExec] = CommandExecutor.passthrough(\n * 'SetUserName',\n * UserEvent.nameChanged,\n * (cmd: { name: string }) => ({ name: cmd.name.trim(), changedAt: Date.now() })\n * )\n * ```\n */\nCommandExecutor.passthrough = function passthrough<\n TType extends string,\n TPayload,\n TInput = TPayload,\n>(\n nameOrEventCreator: string | EventCreator<TType, TPayload>,\n eventCreatorOrTransform?: EventCreator<TType, TPayload> | ((input: TInput) => TPayload),\n maybeTransform?: (input: TInput) => TPayload,\n): [Command<TInput>, Executor<TInput, Record<string, never>, unknown>] {\n let name: string | undefined\n let eventCreator: EventCreator<TType, TPayload>\n let transform: ((input: TInput) => TPayload) | undefined\n\n if (typeof nameOrEventCreator === 'string') {\n name = nameOrEventCreator\n eventCreator = eventCreatorOrTransform as EventCreator<TType, TPayload>\n transform = maybeTransform\n } else {\n eventCreator = nameOrEventCreator\n transform = eventCreatorOrTransform as ((input: TInput) => TPayload) | undefined\n }\n\n const commandId = Symbol('hurum/command-id')\n const command: Command<TInput> = {\n [COMMAND_BRAND]: commandId,\n ...(name ? { name } : {}),\n }\n const executorFn: ExecutorFn<TInput, Record<string, never>, unknown> = (input, { emit }) => {\n const payload = transform ? transform(input) : input as unknown as TPayload\n emit(eventCreator(payload))\n }\n const executor: Executor<TInput, Record<string, never>, unknown> = {\n [EXECUTOR_BRAND]: true,\n __command: command,\n __fn: executorFn as Executor['__fn'],\n }\n return [command, executor]\n} as {\n <TType extends string, TPayload>(\n eventCreator: EventCreator<TType, TPayload>,\n ): [Command<TPayload>, Executor<TPayload, Record<string, never>, unknown>]\n\n <TType extends string, TPayload, TInput>(\n eventCreator: EventCreator<TType, TPayload>,\n transform: (input: TInput) => TPayload,\n ): [Command<TInput>, Executor<TInput, Record<string, never>, unknown>]\n\n <TType extends string, TPayload>(\n name: string,\n eventCreator: EventCreator<TType, TPayload>,\n ): [Command<TPayload>, Executor<TPayload, Record<string, never>, unknown>]\n\n <TType extends string, TPayload, TInput>(\n name: string,\n eventCreator: EventCreator<TType, TPayload>,\n transform: (input: TInput) => TPayload,\n ): [Command<TInput>, Executor<TInput, Record<string, never>, unknown>]\n}\n\n/** Check if a value is a Command */\nexport function isCommand(value: unknown): value is Command {\n return typeof value === 'object' && value !== null && COMMAND_BRAND in value\n}\n\n/** Check if a value is an Executor */\nexport function isExecutor(value: unknown): value is Executor {\n return typeof value === 'object' && value !== null && EXECUTOR_BRAND in value\n}\n\n/** Get the internal command symbol from a Command (for Store matching) */\nexport function getCommandId(command: Command): symbol {\n return command[COMMAND_BRAND]\n}\n\n/** Get the command from an executor */\nexport function getExecutorCommand(executor: Executor): Command {\n return executor.__command\n}\n\n/** Get the executor function (type-erased; callers cast as needed) */\nexport function getExecutorFn(executor: Executor): Executor['__fn'] {\n return executor.__fn\n}\n","// @hurum/core — Intent + Intents\n\nimport type { Command } from './command-executor'\n\n// Branding symbols\nconst INTENT_BRAND = Symbol('hurum/intent')\nconst INTENTS_BRAND = Symbol('hurum/intents')\nconst PREPARED_INTENT_BRAND = Symbol('hurum/prepared-intent')\n\n/** Execution mode for an intent */\nexport type IntentMode = 'sequential' | 'all' | 'allSettled'\n\n/** An intent descriptor: references commands and their execution mode */\nexport interface IntentDescriptor<TInput = unknown> {\n readonly [INTENT_BRAND]: true\n readonly commands: ReadonlyArray<Command<TInput>>\n readonly mode: IntentMode\n readonly name?: string\n readonly __inputType?: TInput\n}\n\n/** A callable intent descriptor. Calling with payload produces a PreparedIntent. */\nexport interface IntentAction<TInput = unknown> extends IntentDescriptor<TInput> {\n (payload: TInput): PreparedIntent<TInput>\n}\n\n/** An intent paired with its payload, ready to dispatch via store.send(). */\nexport interface PreparedIntent<TInput = unknown> {\n readonly [PREPARED_INTENT_BRAND]: true\n readonly intent: IntentDescriptor<TInput>\n readonly payload: TInput\n}\n\n/** An intents container: a namespaced group of intent descriptors */\nexport interface IntentsContainer {\n readonly [INTENTS_BRAND]: true\n readonly __prefix: string\n}\n\n/** @internal Helper to create an IntentAction from descriptor properties */\nfunction createIntentAction<TInput>(mode: IntentMode, commands: Command<TInput>[]): IntentAction<TInput> {\n const action = function (payload: TInput): PreparedIntent<TInput> {\n return {\n [PREPARED_INTENT_BRAND]: true,\n intent: action as IntentDescriptor<TInput>,\n payload,\n }\n } as IntentAction<TInput>\n\n Object.defineProperty(action, INTENT_BRAND, {\n value: true,\n writable: false,\n enumerable: false,\n configurable: false,\n })\n Object.defineProperty(action, 'commands', {\n value: commands,\n writable: false,\n enumerable: true,\n configurable: false,\n })\n Object.defineProperty(action, 'mode', {\n value: mode,\n writable: false,\n enumerable: true,\n configurable: false,\n })\n // Override Function.name — will be set by Intents() builder\n Object.defineProperty(action, 'name', {\n value: undefined,\n writable: false,\n enumerable: true,\n configurable: true,\n })\n\n return action\n}\n\n/**\n * Create a callable intent with sequential execution (default).\n * If any executor throws, subsequent commands are skipped.\n *\n * @example\n * ```ts\n * const MyIntents = Intents('Purchase', {\n * submitClicked: Intent(ValidateCommand, SaveCommand),\n * pageOpened: Intent(LoadCommand),\n * })\n *\n * // Call to create a PreparedIntent\n * store.send(MyIntents.submitClicked({ formData }))\n *\n * // Or use shorthand\n * store.send.submitClicked({ formData })\n * ```\n */\nexport function Intent<TInput>(...commands: Command<TInput>[]): IntentAction<TInput> {\n return createIntentAction('sequential', commands)\n}\n\n/**\n * Create a parallel fail-fast intent. All commands run in parallel.\n * If one fails, the rest are aborted via signal.\n */\nIntent.all = function all<TInput>(...commands: Command<TInput>[]): IntentAction<TInput> {\n return createIntentAction('all', commands)\n}\n\n/**\n * Create a parallel independent intent. All commands run in parallel.\n * Each runs independently; failures don't affect others.\n */\nIntent.allSettled = function allSettled<TInput>(...commands: Command<TInput>[]): IntentAction<TInput> {\n return createIntentAction('allSettled', commands)\n}\n\n/**\n * Create a namespaced group of intents.\n *\n * @example\n * ```ts\n * const PurchaseIntents = Intents('Purchase', {\n * submitClicked: Intent(ValidateCommand, SaveCommand),\n * pageOpened: Intent(LoadCommand),\n * })\n * ```\n */\nexport function Intents<\n TPrefix extends string,\n TDefs extends Record<string, IntentDescriptor>,\n>(prefix: TPrefix, intents: TDefs): TDefs & IntentsContainer {\n const container = { ...intents } as TDefs & IntentsContainer\n\n // Set name on each IntentDescriptor: `${prefix}/${key}`\n for (const [key, descriptor] of Object.entries(container)) {\n if (isIntentDescriptor(descriptor)) {\n Object.defineProperty(descriptor, 'name', {\n value: `${prefix}/${key}`,\n writable: false,\n enumerable: true,\n configurable: false,\n })\n }\n }\n\n Object.defineProperty(container, INTENTS_BRAND, {\n value: true,\n writable: false,\n enumerable: false,\n configurable: false,\n })\n Object.defineProperty(container, '__prefix', {\n value: prefix,\n writable: false,\n enumerable: false,\n configurable: false,\n })\n return container\n}\n\n/** Check if a value is an IntentDescriptor (plain object or callable IntentAction) */\nexport function isIntentDescriptor(value: unknown): value is IntentDescriptor {\n return (typeof value === 'object' || typeof value === 'function') && value !== null && INTENT_BRAND in value\n}\n\n/** Check if a value is an IntentsContainer */\nexport function isIntentsContainer(value: unknown): value is IntentsContainer {\n return typeof value === 'object' && value !== null && INTENTS_BRAND in value\n}\n\n/** Check if a value is a PreparedIntent (intent + payload pair) */\nexport function isPreparedIntent(value: unknown): value is PreparedIntent {\n return typeof value === 'object' && value !== null && PREPARED_INTENT_BRAND in value\n}\n","// @hurum/core — Computed\n\n/** Internal representation of a resolved computed field */\nexport interface ComputedNode<T = unknown> {\n readonly name: string\n fn: (state: Record<string, unknown>) => T\n deps: Set<string>\n value: T\n prevValue: T\n}\n\n/**\n * Create a dependency-tracking proxy for the raw state.\n * Records which properties are accessed during computed evaluation.\n */\nexport function createTrackingProxy<T extends Record<string, unknown>>(\n state: T,\n accessed: Set<string>,\n): T {\n return new Proxy(state, {\n get(target, prop, receiver) {\n if (typeof prop === 'string') {\n accessed.add(prop)\n }\n return Reflect.get(target, prop, receiver)\n },\n })\n}\n\n/**\n * Initialize computed nodes from a computed definition map.\n * Returns nodes in topological order for evaluation.\n */\nexport function initializeComputedNodes(\n rawState: Record<string, unknown>,\n computedDef: Record<string, (state: Record<string, unknown>) => unknown> | undefined,\n): ComputedNode[] {\n if (!computedDef) return []\n\n const nodes: ComputedNode[] = []\n const nodesByName = new Map<string, ComputedNode>()\n\n // Evaluate each computed and track dependencies\n for (const [name, fn] of Object.entries(computedDef)) {\n const accessed = new Set<string>()\n const trackingProxy = createTrackingProxy(rawState, accessed)\n const value = fn(trackingProxy)\n\n const node: ComputedNode = {\n name,\n fn,\n deps: accessed,\n value,\n prevValue: value,\n }\n nodes.push(node)\n nodesByName.set(name, node)\n }\n\n // Check for cycles via topological sort\n const sorted = topologicalSort(nodes, nodesByName)\n\n return sorted\n}\n\n/**\n * Topological sort of computed nodes. Throws on cycle detection.\n */\nfunction topologicalSort(\n nodes: ComputedNode[],\n nodesByName: Map<string, ComputedNode>,\n): ComputedNode[] {\n const visited = new Set<string>()\n const visiting = new Set<string>()\n const sorted: ComputedNode[] = []\n\n function visit(node: ComputedNode): void {\n if (visited.has(node.name)) return\n if (visiting.has(node.name)) {\n throw new Error(\n `Circular dependency detected in computed fields: ${node.name}`,\n )\n }\n\n visiting.add(node.name)\n\n // Visit dependencies that are also computed nodes\n for (const dep of node.deps) {\n const depNode = nodesByName.get(dep)\n if (depNode) {\n visit(depNode)\n }\n }\n\n visiting.delete(node.name)\n visited.add(node.name)\n sorted.push(node)\n }\n\n for (const node of nodes) {\n visit(node)\n }\n\n return sorted\n}\n\n/**\n * Re-evaluate computed nodes based on state changes.\n * Returns the new computed values and whether any changed.\n */\nexport function evaluateComputedNodes(\n nodes: ComputedNode[],\n rawState: Record<string, unknown>,\n changedKeys: Set<string>,\n): { values: Record<string, unknown>; changed: boolean } {\n const values: Record<string, unknown> = {}\n let anyChanged = false\n\n for (const node of nodes) {\n // Check if any dependency changed\n let needsReeval = false\n for (const dep of node.deps) {\n if (changedKeys.has(dep)) {\n needsReeval = true\n break\n }\n }\n\n if (needsReeval) {\n // Re-evaluate with fresh tracking\n const accessed = new Set<string>()\n const trackingProxy = createTrackingProxy(rawState, accessed)\n const newValue = node.fn(trackingProxy)\n\n // Update deps\n node.deps = accessed\n\n // Structural equality check\n if (!structuralEqual(node.value, newValue)) {\n node.prevValue = node.value\n node.value = newValue\n anyChanged = true\n changedKeys.add(node.name) // Propagate to dependent computed nodes\n }\n }\n\n values[node.name] = node.value\n }\n\n return { values, changed: anyChanged }\n}\n\n/**\n * Simple structural equality check.\n * Handles primitives, arrays, and plain objects.\n */\nexport function structuralEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true\n if (a === null || b === null) return false\n if (typeof a !== typeof b) return false\n if (typeof a !== 'object') return false\n\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false\n for (let i = 0; i < a.length; i++) {\n if (!structuralEqual(a[i], b[i])) return false\n }\n return true\n }\n\n if (Array.isArray(a) !== Array.isArray(b)) return false\n\n const keysA = Object.keys(a as object)\n const keysB = Object.keys(b as object)\n if (keysA.length !== keysB.length) return false\n\n for (const key of keysA) {\n if (!structuralEqual((a as Record<string, unknown>)[key], (b as Record<string, unknown>)[key])) return false\n }\n\n return true\n}\n","// @hurum/core — Nested, Nested.array, Nested.map\n\nconst NESTED_BRAND = Symbol('hurum/nested')\n\nexport type NestedKind = 'single' | 'array' | 'map'\n\nexport interface NestedMarker<TStore = unknown, TKind extends NestedKind = NestedKind> {\n readonly [NESTED_BRAND]: true\n readonly kind: TKind\n readonly store: TStore\n}\n\n/**\n * Declare a single nested child store.\n *\n * @example\n * ```ts\n * Store({ state: { transaction: Nested(TransactionStore) } })\n * ```\n */\nexport function Nested<TStore>(store: TStore): NestedMarker<TStore, 'single'> {\n return {\n [NESTED_BRAND]: true,\n kind: 'single',\n store,\n }\n}\n\n/**\n * Declare an array of nested child stores.\n * Array items are identified by their `id` field for diffing.\n *\n * @example\n * ```ts\n * Store({ state: { items: Nested.array(ItemStore) } })\n * ```\n */\nNested.array = function array<TStore>(store: TStore): NestedMarker<TStore, 'array'> {\n return {\n [NESTED_BRAND]: true,\n kind: 'array',\n store,\n }\n}\n\n/**\n * Declare a keyed map of nested child stores.\n *\n * @example\n * ```ts\n * Store({ state: { currencies: Nested.map(CurrencyStore) } })\n * ```\n */\nNested.map = function map<TStore>(store: TStore): NestedMarker<TStore, 'map'> {\n return {\n [NESTED_BRAND]: true,\n kind: 'map',\n store,\n }\n}\n\n/** Check if a value is a NestedMarker */\nexport function isNestedMarker(value: unknown): value is NestedMarker {\n return typeof value === 'object' && value !== null && NESTED_BRAND in value\n}\n","// @hurum/core — Selector\n\nimport { structuralEqual } from './computed'\n\n/** A memoized derived state accessor with structural equality. */\nexport interface Selector<T> {\n /** Get the current derived value (memoized). */\n get(): T\n /** Subscribe to changes. Only fires when derived value actually changes. Returns unsubscribe. */\n subscribe(cb: (value: T) => void): () => void\n /** @internal brand for type discrimination */\n readonly __selectorBrand: true\n}\n\n/** Type guard for Selector objects. */\nexport function isSelector(value: unknown): value is Selector<unknown> {\n return (\n typeof value === 'object' &&\n value !== null &&\n '__selectorBrand' in value &&\n (value as Selector<unknown>).__selectorBrand === true\n )\n}\n\n/**\n * Create a memoized Selector from store primitives.\n *\n * - State identity check: same state object → skip re-computation\n * - Structural equality: new object with same values → keep previous reference\n * - Subscribe filter: only fires callback when derived value actually changes\n */\nexport function createSelector<TState, T>(\n getState: () => TState,\n storeSubscribe: (cb: (state: TState) => void) => () => void,\n selectorFn: (state: TState) => T,\n): Selector<T> {\n let lastState: TState | undefined\n let lastResult: T\n let initialized = false\n\n function compute(): T {\n const currentState = getState()\n\n // State identity: same object → same result\n if (initialized && currentState === (lastState as unknown)) {\n return lastResult\n }\n\n const newResult = selectorFn(currentState)\n\n // Structural equality: keep previous reference if values match\n if (initialized && structuralEqual(lastResult, newResult)) {\n lastState = currentState\n return lastResult\n }\n\n lastState = currentState\n lastResult = newResult\n initialized = true\n return newResult\n }\n\n // Initialize eagerly\n compute()\n\n return {\n get: compute,\n\n subscribe(cb: (value: T) => void): () => void {\n return storeSubscribe(() => {\n const prev = lastResult\n const next = compute()\n if (prev !== next) {\n cb(next)\n }\n })\n },\n\n __selectorBrand: true as const,\n }\n}\n","// @hurum/core — Store\n\nimport type { EventCreator, EventInstance } from './events'\nimport { isEventCreator } from './events'\nimport type { Command, Executor } from './command-executor'\nimport { getCommandId, getExecutorCommand, getExecutorFn } from './command-executor'\nimport type { IntentDescriptor, IntentsContainer, PreparedIntent } from './intent'\nimport { isIntentDescriptor, isPreparedIntent } from './intent'\nimport type { ComputedNode } from './computed'\nimport { initializeComputedNodes, evaluateComputedNodes } from './computed'\nimport type { NestedMarker, NestedKind } from './nested'\nimport { isNestedMarker } from './nested'\nimport type { Middleware, MiddlewareFactory } from './middleware'\nimport type { Selector } from './selector'\nimport { createSelector } from './selector'\n\n// ── Constants ───────────────────────────────────────────────────────\n\nconst STORE_DEF_BRAND = Symbol('hurum/store-def')\nconst STORE_INSTANCE_BRAND = Symbol('hurum/store-instance')\nconst IS_DEV = typeof globalThis !== 'undefined'\n && typeof (globalThis as { process?: { env?: Record<string, string> } }).process !== 'undefined'\n && (globalThis as { process?: { env?: Record<string, string> } }).process?.env?.['NODE_ENV'] !== 'production'\nconst MAX_RELAY_DEPTH = 5\n\n// ── Type Utilities ────────────────────────────────────────────────\n\n/** Resolve nested markers in raw state to their runtime types (includes child computed) */\nexport type ResolvedState<T> = {\n [K in keyof T]:\n T[K] extends NestedMarker<infer S, 'single'> ? ResolvedStateOf<S> :\n T[K] extends NestedMarker<infer S, 'array'> ? ResolvedStateOf<S>[] :\n T[K] extends NestedMarker<infer S, 'map'> ? Record<string, ResolvedStateOf<S>> :\n T[K]\n}\n\n/** Extract resolved state (raw + computed) from a store definition */\nexport type ResolvedStateOf<S> =\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n S extends StoreDefinition<any, infer R, infer C>\n ? C extends Record<string, never>\n ? ResolvedState<R>\n : ResolvedState<R> & C\n : never\n\n/** Resolve nested markers to raw state only (no child computed). Used for on() handlers. */\nexport type ReducerState<T> = {\n [K in keyof T]:\n T[K] extends NestedMarker<infer S, 'single'> ? ReducerStateOf<S> :\n T[K] extends NestedMarker<infer S, 'array'> ? ReducerStateOf<S>[] :\n T[K] extends NestedMarker<infer S, 'map'> ? Record<string, ReducerStateOf<S>> :\n T[K]\n}\n\n/** Extract raw state (without computed) from a store definition */\nexport type ReducerStateOf<S> =\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n S extends StoreDefinition<any, infer R, any>\n ? ReducerState<R>\n : never\n\n/** Extract typed scope from raw state: maps nested keys to their store instance types */\nexport type ScopeOf<T> = {\n [K in keyof T as T[K] extends NestedMarker ? K : never]:\n T[K] extends NestedMarker<infer S, 'single'> ? StoreInstanceOf<S> :\n T[K] extends NestedMarker<infer S, 'array'> ? NestedArrayScope<StoreInstanceOf<S>> :\n T[K] extends NestedMarker<infer S, 'map'> ? Map<string, StoreInstanceOf<S>> :\n never\n}\n\n/** Scope type for Nested.array — supports ID-based O(1) lookup */\nexport interface NestedArrayScope<T extends StoreInstance = StoreInstance> {\n /** O(1) lookup by the child's state.id */\n get(id: string): T | undefined\n /** Returns all child instances as an array */\n values(): T[]\n /** Number of child instances */\n readonly size: number\n [Symbol.iterator](): Iterator<T>\n}\n\n/** Extract store instance type from a store definition */\ntype StoreInstanceOf<S> =\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n S extends StoreDefinition<infer D, infer R, infer C, infer I>\n ? StoreInstance<D, R, C, I>\n : never\n\n/** Extract intent key → input type mapping from an IntentsContainer */\nexport type IntentMap<T> = {\n [K in keyof T as T[K] extends IntentDescriptor ? K : never]:\n T[K] extends IntentDescriptor<infer TInput> ? TInput : never\n}\n\n/** The send function type: callable (2 overloads) + named intent shorthand properties */\nexport type SendFn<TIntents extends Record<string, unknown> = Record<string, never>> = {\n /** Send a PreparedIntent (from calling an IntentAction) */\n <TInput>(prepared: PreparedIntent<TInput>): IntentRef\n /** Send an IntentDescriptor with explicit payload (legacy) */\n <TInput>(intent: IntentDescriptor<TInput>, payload: TInput): IntentRef\n} & {\n /** Named intent shortcuts: store.send.intentName(payload) */\n readonly [K in keyof TIntents]: (payload: TIntents[K]) => IntentRef\n}\n\n/** Extract child store deps type from a nested marker */\nexport type ChildDepsOf<T> =\n T extends NestedMarker<infer S, NestedKind>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ? S extends StoreDefinition<infer D, any, any> ? D : Record<string, never>\n : Record<string, never>\n\n/** Handler map for namespace-style .on() */\nexport type EventHandlerMap<TNamespace, TState> = {\n [K in keyof TNamespace]?: TNamespace[K] extends EventCreator<string, infer P>\n ? (state: TState, payload: P) => TState\n : never\n}\n\n/** Handler map for namespace-style .on() — state input includes computed, return is raw only */\ntype ReducerEventHandlerMap<TNamespace, TStateIn, TStateOut> = {\n [K in keyof TNamespace]?: TNamespace[K] extends EventCreator<string, infer P>\n ? (state: TStateIn, payload: P) => TStateOut\n : never\n}\n\n// ── Public Types ────────────────────────────────────────────────────\n\n/** Opaque reference returned by `store.send()` for cancellation via `store.cancel(ref)`. */\nexport interface IntentRef {\n readonly __intentRefBrand: symbol\n}\n\nexport interface NestedMeta {\n source: {\n instanceId: string\n index: number\n parentKey: string\n }\n}\n\n// ── Internal handler types (for runtime storage) ──\n\ntype InternalOnHandler = (state: Record<string, unknown>, payload: Record<string, unknown>, meta?: NestedMeta) => Record<string, unknown>\ntype InternalOnHandlerMap = Record<string, InternalOnHandler>\ntype InternalRelayHandler = (event: EventInstance, state: Record<string, unknown>) => EventInstance[]\ntype InternalRelayMap = Record<string, InternalRelayHandler>\n\n/** Internal configuration accumulated by StoreBuilder. */\nexport interface StoreConfig<TDeps = unknown, TState = unknown, TComputed = unknown> {\n intents?: IntentsContainer\n executors?: Executor[]\n state: TState\n computed?: Record<string, (state: Record<string, unknown>) => unknown>\n on?: InternalOnHandlerMap\n relay?: InternalRelayMap\n middleware?: Middleware[]\n childDepsMap?: Record<string, (parentDeps: Record<string, unknown>) => Record<string, unknown>>\n /** @internal phantom type for computed inference */\n readonly __computedPhantom?: TComputed\n /** @internal phantom type for deps inference */\n readonly __depsPhantom?: TDeps\n}\n\n/** Options for `StoreDefinition.create()`. Supports initial state override and deps injection. */\nexport interface StoreCreateOptions<TRawState = unknown, TDeps = unknown> {\n initialState?: Partial<ResolvedState<TRawState>>\n deps?: Partial<TDeps>\n}\n\n/** A store definition (blueprint). Call `.create()` to instantiate. */\nexport interface StoreDefinition<TDeps = unknown, TRawState = unknown, TComputed = unknown, TIntents extends Record<string, unknown> = Record<string, never>> {\n readonly [STORE_DEF_BRAND]: true\n readonly __config: StoreConfig<TDeps, TRawState, TComputed>\n readonly __stateType?: ResolvedState<TRawState> & TComputed\n readonly __rawStateType?: TRawState\n readonly __depsType?: TDeps\n readonly __intentsType?: TIntents\n create(options?: StoreCreateOptions<TRawState, TDeps>): StoreInstance<TDeps, TRawState, TComputed, TIntents>\n}\n\n/** A live store instance. Created by `StoreDefinition.create()`. */\nexport interface StoreInstance<TDeps = unknown, TRawState = unknown, TComputed = unknown, TIntents extends Record<string, unknown> = Record<string, never>> {\n /** Dispatch intents. Callable with PreparedIntent or (descriptor, payload). Also supports store.send.intentName(payload) shorthand. */\n send: SendFn<TIntents>\n /** Cancel a specific running intent by its ref. */\n cancel(ref: IntentRef): void\n /** Cancel all running intents. */\n cancelAll(): void\n /** Get the current combined state (raw + computed). */\n getState(): ResolvedState<TRawState> & TComputed\n /** Subscribe to state changes. Returns an unsubscribe function. */\n subscribe(cb: (state: ResolvedState<TRawState> & TComputed) => void): () => void\n /** Subscribe to raw event emissions. Returns an unsubscribe function. */\n subscribe(type: 'events', cb: (event: EventInstance) => void): () => void\n /** Dispose the store, cancelling all intents and clearing listeners. */\n dispose(): void\n /** Create a memoized derived state selector. */\n selector<T>(fn: (state: ResolvedState<TRawState> & TComputed) => T): Selector<T>\n /** Nested store scope for accessing child store instances. */\n readonly scope: ScopeOf<TRawState>\n /** @internal phantom type for deps inference */\n readonly __depsPhantom?: TDeps\n}\n\n// ── Internal types for testing ──────────────────────────────────────\n\nexport interface StoreInternalFields {\n __eventLog: EventInstance[]\n __stateSnapshots: Array<{ event: EventInstance; state: Record<string, unknown> }>\n __runningCount: () => number\n __rawState: () => Record<string, unknown>\n /** Apply event to this store (for event forwarding from parent to children). */\n __applyEvent: (event: EventInstance, options?: { skipEventLog?: boolean }) => void\n /** Execute a single command (for parent → child delegation). */\n __executeCommand: (command: Command, payload: unknown, signal: AbortSignal) => Promise<void>\n /** Returns the nestedExecutorIndex for recursive delegation (root → child → grandchild). */\n __getHandleableCommands: () => Map<symbol, StoreInstance & StoreInternalFields>\n}\n\n/** @deprecated Use StoreInstance & StoreInternalFields instead */\nexport type StoreInstanceInternal = StoreInstance & StoreInternalFields\n\n// ── Deep Merge ──────────────────────────────────────────────────────\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== 'object' || value === null) return false\n const proto = Object.getPrototypeOf(value)\n return proto === Object.prototype || proto === null\n}\n\nfunction deepMerge<T extends Record<string, unknown>>(base: T, override: Partial<T>): T {\n const result = { ...base }\n for (const key of Object.keys(override) as Array<keyof T & string>) {\n const baseVal = base[key]\n const overVal = override[key]\n if (isPlainObject(baseVal) && isPlainObject(overVal)) {\n result[key] = deepMerge(baseVal, overVal as Partial<typeof baseVal>) as T[typeof key]\n } else if (overVal !== undefined) {\n result[key] = overVal as T[keyof T & string]\n }\n }\n return result\n}\n\n// ── StoreBuilder ────────────────────────────────────────────────────\n\ninterface BuilderConfig {\n state: Record<string, unknown>\n on?: InternalOnHandlerMap\n computed?: Record<string, (state: Record<string, unknown>) => unknown>\n intents?: IntentsContainer\n executors?: Executor[]\n relay?: InternalRelayMap\n middleware?: Middleware[]\n childDepsMap?: Record<string, (parentDeps: Record<string, unknown>) => Record<string, unknown>>\n}\n\n/** The return type of Store() — a builder that is also a StoreDefinition. */\nexport type StoreBuilder<\n TDeps extends Record<string, unknown>,\n TRawState extends Record<string, unknown>,\n TComputed extends Record<string, unknown>,\n TIntents extends Record<string, unknown> = Record<string, never>,\n> = {\n // ── on() overloads ──\n\n /** Per-event handler: full payload type inference from EventCreator */\n on<TType extends string, TPayload>(\n event: EventCreator<TType, TPayload>,\n handler: (state: ResolvedState<TRawState>, payload: TPayload) => ReducerState<TRawState>,\n ): StoreBuilder<TDeps, TRawState, TComputed, TIntents>\n\n /** Namespace handler: grouped handlers with per-key payload type inference */\n on<TNamespace extends object>(\n events: TNamespace,\n handlers: ReducerEventHandlerMap<TNamespace, ResolvedState<TRawState>, ReducerState<TRawState>>,\n ): StoreBuilder<TDeps, TRawState, TComputed, TIntents>\n\n // ── computed() ──\n computed<C extends Record<string, (state: ResolvedState<TRawState>) => unknown>>(\n def: C,\n ): StoreBuilder<TDeps, TRawState, { [K in keyof C]: ReturnType<C[K]> }, TIntents>\n\n // ── intents / executors ──\n intents<TContainer extends IntentsContainer>(\n container: TContainer,\n ): StoreBuilder<TDeps, TRawState, TComputed, TIntents & IntentMap<TContainer>>\n executors(...execs: Executor[]): StoreBuilder<TDeps, TRawState, TComputed, TIntents>\n\n // ── deps ──\n deps<D extends Record<string, unknown>>(): StoreBuilder<D, TRawState, TComputed, TIntents>\n\n // ── childDeps ──\n childDeps<K extends keyof TRawState & string>(\n key: K,\n mapper: (deps: TDeps) => ChildDepsOf<TRawState[K]>,\n ): StoreBuilder<TDeps, TRawState, TComputed, TIntents>\n\n // ── relay() overloads ──\n\n /** Per-event relay: transform one event type into other events */\n relay<TType extends string, TPayload>(\n event: EventCreator<TType, TPayload>,\n handler: (event: EventInstance<TType, TPayload>, state: ResolvedState<TRawState>) => EventInstance[],\n ): StoreBuilder<TDeps, TRawState, TComputed, TIntents>\n\n // ── middleware ──\n middleware(...mws: (Middleware | MiddlewareFactory)[]): StoreBuilder<TDeps, TRawState, TComputed, TIntents>\n\n // ── create ──\n create(options?: StoreCreateOptions<TRawState, TDeps>): StoreInstance<TDeps, TRawState, TComputed, TIntents>\n} & StoreDefinition<TDeps, TRawState, TComputed, TIntents>\n\nfunction createBuilder<\n TDeps extends Record<string, unknown>,\n TRawState extends Record<string, unknown>,\n TComputed extends Record<string, unknown>,\n TIntents extends Record<string, unknown> = Record<string, never>,\n>(cfg: BuilderConfig): StoreBuilder<TDeps, TRawState, TComputed, TIntents> {\n function buildConfig(): StoreConfig<TDeps, TRawState, TComputed> {\n return {\n state: cfg.state as TRawState,\n on: cfg.on,\n computed: cfg.computed,\n intents: cfg.intents,\n executors: cfg.executors,\n relay: cfg.relay,\n middleware: cfg.middleware,\n childDepsMap: cfg.childDepsMap,\n }\n }\n\n function doCreate(options?: StoreCreateOptions<TRawState, TDeps>): StoreInstance<TDeps, TRawState, TComputed, TIntents> {\n const config = buildConfig()\n const rawStateTemplate: Record<string, unknown> = {}\n const nestedFields: Record<string, NestedMarker> = {}\n\n for (const [key, value] of Object.entries(config.state as Record<string, unknown>)) {\n if (isNestedMarker(value)) {\n nestedFields[key] = value\n } else {\n rawStateTemplate[key] = value\n }\n }\n\n return createStoreInstance(config, rawStateTemplate, nestedFields, options)\n }\n\n const builder = {\n on(eventOrNamespace: EventCreator | Record<string, EventCreator>, handlerOrMap: Function | Record<string, Function>) {\n const newHandlers: InternalOnHandlerMap = {}\n\n if (isEventCreator(eventOrNamespace)) {\n // Per-event overload\n const event = eventOrNamespace\n newHandlers[event.type] = handlerOrMap as InternalOnHandler\n } else {\n // Namespace overload\n const namespace = eventOrNamespace as Record<string, EventCreator>\n const handlers = handlerOrMap as Record<string, Function>\n for (const key of Object.keys(handlers)) {\n const eventCreator = namespace[key]\n if (eventCreator && typeof eventCreator === 'function' && 'type' in eventCreator) {\n newHandlers[(eventCreator as EventCreator).type] = handlers[key] as InternalOnHandler\n }\n }\n }\n\n return createBuilder<TDeps, TRawState, TComputed>({\n ...cfg,\n on: { ...cfg.on, ...newHandlers },\n })\n },\n\n computed<C extends Record<string, (state: ResolvedState<TRawState>) => unknown>>(def: C) {\n return createBuilder<TDeps, TRawState, { [K in keyof C]: ReturnType<C[K]> }>({\n ...cfg,\n computed: { ...cfg.computed, ...def as Record<string, (state: Record<string, unknown>) => unknown> },\n })\n },\n\n intents(container: IntentsContainer) {\n return createBuilder({\n ...cfg,\n intents: container,\n })\n },\n\n executors(...execs: Executor[]) {\n return createBuilder<TDeps, TRawState, TComputed>({\n ...cfg,\n executors: [...(cfg.executors ?? []), ...execs],\n })\n },\n\n deps<D extends Record<string, unknown>>() {\n return createBuilder<D, TRawState, TComputed>({ ...cfg })\n },\n\n childDeps<K extends keyof TRawState & string>(\n key: K,\n mapper: (deps: TDeps) => ChildDepsOf<TRawState[K]>,\n ) {\n return createBuilder<TDeps, TRawState, TComputed>({\n ...cfg,\n childDepsMap: {\n ...cfg.childDepsMap,\n [key]: mapper as (parentDeps: Record<string, unknown>) => Record<string, unknown>,\n },\n })\n },\n\n relay(event: EventCreator, handler: (event: EventInstance, state: Record<string, unknown>) => EventInstance[]) {\n return createBuilder<TDeps, TRawState, TComputed>({\n ...cfg,\n relay: { ...cfg.relay, [event.type]: handler as InternalRelayHandler },\n })\n },\n\n middleware(...mws: (Middleware | MiddlewareFactory)[]) {\n const resolvedMws: Middleware[] = mws.map((mw) => {\n if ('create' in mw && typeof mw.create === 'function') {\n return (mw as MiddlewareFactory).create()\n }\n return mw as Middleware\n })\n return createBuilder<TDeps, TRawState, TComputed>({\n ...cfg,\n middleware: [...(cfg.middleware ?? []), ...resolvedMws],\n })\n },\n\n create: doCreate,\n }\n\n // Brand the builder as a StoreDefinition\n Object.defineProperty(builder, STORE_DEF_BRAND, {\n value: true,\n writable: false,\n enumerable: false,\n configurable: false,\n })\n Object.defineProperty(builder, '__config', {\n get: buildConfig,\n enumerable: false,\n configurable: false,\n })\n\n return builder as StoreBuilder<TDeps, TRawState, TComputed, TIntents>\n}\n\n// ── Store Factory ───────────────────────────────────────────────────\n\n/**\n * Create a store builder from an initial state.\n * Returns a chainable builder with `.on()`, `.computed()`, `.intents()`,\n * `.executors()`, `.deps()`, `.childDeps()`, `.relay()`, `.middleware()`, and `.create()`.\n *\n * The builder is also a `StoreDefinition` — you can call `.create()` directly\n * or pass it to testing APIs like `TestStore()`, `TestReducer()`, etc.\n *\n * @example\n * ```ts\n * const CounterStore = Store({ state: { count: 0, multiplier: 2 } })\n * .on(CounterEvent.incremented, (state, { amount }) => ({\n * ...state, count: state.count + amount,\n * }))\n * .computed({\n * doubled: (state) => state.count * 2,\n * product: (state) => state.count * state.multiplier,\n * })\n * .intents(CounterIntents)\n * .executors(IncrementExecutor, DecrementExecutor)\n * .middleware(logger())\n *\n * const store = CounterStore.create()\n * store.send(CounterIntents.increment, {})\n * ```\n */\nexport function Store<\n TState extends Record<string, unknown>,\n>(config: { state: TState }): StoreBuilder<Record<string, never>, TState, Record<string, never>> {\n return createBuilder<Record<string, never>, TState, Record<string, never>>({\n state: config.state as Record<string, unknown>,\n })\n}\n\nexport function isStoreDefinition(value: unknown): value is StoreDefinition {\n return typeof value === 'object' && value !== null && STORE_DEF_BRAND in value\n}\n\nexport function isStoreInstance(value: unknown): value is StoreInstance {\n return typeof value === 'object' && value !== null && STORE_INSTANCE_BRAND in value\n}\n\n// ── Nested Store Management ─────────────────────────────────────────\n\ninterface NestedSingleManager {\n kind: 'single'\n key: string\n marker: NestedMarker\n instance: StoreInstance | null\n unsub: (() => void) | null\n}\n\ninterface NestedArrayManager {\n kind: 'array'\n key: string\n marker: NestedMarker\n instances: Map<string, { instance: StoreInstance; unsub: () => void }>\n}\n\ninterface NestedMapManager {\n kind: 'map'\n key: string\n marker: NestedMarker\n instances: Map<string, { instance: StoreInstance; unsub: () => void }>\n}\n\ntype NestedManager = NestedSingleManager | NestedArrayManager | NestedMapManager\n\nlet instanceIdCounter = 0\nfunction nextInstanceId(): string {\n return `nested-${++instanceIdCounter}`\n}\n\n// ── Send Proxy Factory ──────────────────────────────────────────────\n\nfunction createSendProxy(\n send: (intentOrPrepared: IntentDescriptor | PreparedIntent, payload?: unknown) => IntentRef,\n intentsContainer?: IntentsContainer,\n): SendFn {\n // Build intent name → descriptor lookup from the container\n const intentLookup = new Map<string, IntentDescriptor>()\n if (intentsContainer) {\n for (const [key, value] of Object.entries(intentsContainer)) {\n if (isIntentDescriptor(value)) {\n intentLookup.set(key, value)\n }\n }\n }\n\n const boundIntents = new Map<string, (payload: unknown) => IntentRef>()\n\n return new Proxy(send as SendFn, {\n get(_target, prop) {\n if (typeof prop !== 'string') return undefined\n\n // Preserve standard function properties\n if (prop === 'bind' || prop === 'call' || prop === 'apply' || prop === 'length' || prop === 'name' || prop === 'prototype') {\n return (send as unknown as Record<string, unknown>)[prop]\n }\n\n let bound = boundIntents.get(prop)\n if (!bound) {\n const descriptor = intentLookup.get(prop)\n if (!descriptor) {\n if (IS_DEV) {\n console.warn(`[hurum] No intent named \"${prop}\" registered on this store.`)\n }\n return undefined\n }\n bound = (payload: unknown) => send(descriptor, payload)\n boundIntents.set(prop, bound)\n }\n return bound\n },\n apply(_target, _thisArg, args) {\n return send(args[0] as IntentDescriptor | PreparedIntent, args[1])\n },\n })\n}\n\n// ── Nested single safe default ──────────────────────────────────────\n\n/**\n * Recursively resolve initial state for a Nested(single) store definition.\n * Used to provide safe defaults during computed initialization so that\n * computed functions can access nested state properties without null errors.\n */\nfunction resolveNestedSingleDefaults(marker: NestedMarker): Record<string, unknown> {\n const childDef = marker.store as StoreDefinition\n const childState = (childDef.__config as StoreConfig).state as Record<string, unknown>\n const safe: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(childState)) {\n if (isNestedMarker(v)) {\n if (v.kind === 'array') safe[k] = []\n else if (v.kind === 'map') safe[k] = {}\n else safe[k] = resolveNestedSingleDefaults(v)\n } else {\n safe[k] = v\n }\n }\n return safe\n}\n\n// ── Store Instance Creation ─────────────────────────────────────────\n\nfunction createStoreInstance<TDeps, TRawState, TComputed, TIntents extends Record<string, unknown> = Record<string, never>>(\n config: StoreConfig<TDeps, TRawState, TComputed>,\n rawStateTemplate: Record<string, unknown>,\n nestedFields: Record<string, NestedMarker>,\n options?: StoreCreateOptions<TRawState, TDeps>,\n): StoreInstance<TDeps, TRawState, TComputed, TIntents> {\n\n // ── State ──\n let rawState: Record<string, unknown> = { ...rawStateTemplate }\n if (options?.initialState) {\n rawState = deepMerge(rawState, options.initialState as Record<string, unknown>)\n }\n\n // ── Deps ──\n let deps = {} as TDeps\n if (options?.deps) {\n deps = { ...deps, ...options.deps } as TDeps\n }\n\n // ── Executor registry ──\n const executorMap = new Map<symbol, Executor['__fn']>()\n if (config.executors) {\n for (const executor of config.executors) {\n const command = getExecutorCommand(executor)\n const commandId = getCommandId(command)\n executorMap.set(commandId, getExecutorFn(executor))\n }\n }\n\n // ── Computed ──\n // When nested fields exist, inject safe defaults so computed functions can run\n // before nested stores are initialized. Computed is re-evaluated after nested\n // initialization at line ~1217.\n let stateForInitialComputed: Record<string, unknown> = rawState\n if (Object.keys(nestedFields).length > 0) {\n const nestedDefaults: Record<string, unknown> = {}\n for (const [key, marker] of Object.entries(nestedFields)) {\n if (marker.kind === 'array') nestedDefaults[key] = []\n else if (marker.kind === 'map') nestedDefaults[key] = {}\n else nestedDefaults[key] = resolveNestedSingleDefaults(marker)\n }\n stateForInitialComputed = { ...rawState, ...nestedDefaults }\n }\n const computedNodes: ComputedNode[] = initializeComputedNodes(\n stateForInitialComputed,\n config.computed,\n )\n let computedValues: Record<string, unknown> = {}\n for (const node of computedNodes) {\n computedValues[node.name] = node.value\n }\n\n // ── Snapshot cache ──\n // getCombinedState() must return the same reference when called multiple times\n // without state changes in between. This is required by React's useSyncExternalStore\n // which calls getSnapshot() twice and compares with Object.is().\n let cachedCombinedState: Record<string, unknown> | null = null\n\n function invalidateCache(): void {\n cachedCombinedState = null\n }\n\n // ── Listeners ──\n const stateListeners = new Set<(state: Record<string, unknown>) => void>()\n const eventListeners = new Set<(event: EventInstance) => void>()\n\n // ── Running executors ──\n const runningControllers = new Map<symbol, AbortController>()\n let runningCount = 0\n\n // ── Lifecycle ──\n let disposed = false\n\n // ── Relay tracking ──\n let relayDepth = 0\n const relayProcessing = new Set<string>()\n\n // ── Event log (for testing) ──\n const eventLog: EventInstance[] = []\n const stateSnapshots: Array<{ event: EventInstance; state: Record<string, unknown> }> = []\n\n // ── Nested store management ──\n const nestedManagers: NestedManager[] = []\n const scope: Record<string, unknown> = {}\n\n // ── Helpers ──\n\n function getNestedStates(): Record<string, unknown> {\n const nestedState: Record<string, unknown> = {}\n for (const mgr of nestedManagers) {\n if (mgr.kind === 'single') {\n nestedState[mgr.key] = mgr.instance ? mgr.instance.getState() : null\n } else if (mgr.kind === 'array') {\n const arr: unknown[] = []\n for (const [, entry] of mgr.instances) {\n arr.push(entry.instance.getState())\n }\n nestedState[mgr.key] = arr\n } else if (mgr.kind === 'map') {\n const rec: Record<string, unknown> = {}\n for (const [key, entry] of mgr.instances) {\n rec[key] = entry.instance.getState()\n }\n nestedState[mgr.key] = rec\n }\n }\n return nestedState\n }\n\n function getCombinedState(): Record<string, unknown> {\n if (cachedCombinedState !== null) return cachedCombinedState\n cachedCombinedState = { ...rawState, ...computedValues, ...getNestedStates() }\n return cachedCombinedState\n }\n\n function recomputeFromNestedChange(): void {\n // Nested state changed — always invalidate cache\n invalidateCache()\n if (computedNodes.length === 0) return\n const nestedKeys = new Set<string>(nestedManagers.map((m) => m.key))\n if (nestedKeys.size === 0) return\n const stateForComputed = { ...rawState, ...getNestedStates() }\n const { values, changed } = evaluateComputedNodes(computedNodes, stateForComputed, nestedKeys)\n if (changed) {\n computedValues = values\n }\n }\n\n function notifyStateListeners(): void {\n const state = getCombinedState()\n for (const listener of stateListeners) {\n listener(state)\n }\n }\n\n function notifyEventListeners(event: EventInstance): void {\n for (const listener of eventListeners) {\n listener(event)\n }\n }\n\n // ── Forward events to nested children ──\n\n const forwardingEvents = new Set<string>()\n let isForwardingToChildren = false\n\n function forwardEventToNestedChildren(event: EventInstance): void {\n if (nestedManagers.length === 0) return\n if (forwardingEvents.has(event.type)) return\n\n forwardingEvents.add(event.type)\n isForwardingToChildren = true\n try {\n for (const mgr of nestedManagers) {\n if (mgr.kind === 'single') {\n const singleMgr = mgr as NestedSingleManager\n if (singleMgr.instance) {\n const childInternal = singleMgr.instance as StoreInstance & StoreInternalFields\n childInternal.__applyEvent(event, { skipEventLog: true })\n }\n } else if (mgr.kind === 'array') {\n const arrayMgr = mgr as NestedArrayManager\n for (const [, entry] of arrayMgr.instances) {\n const childInternal = entry.instance as StoreInstance & StoreInternalFields\n childInternal.__applyEvent(event, { skipEventLog: true })\n }\n } else if (mgr.kind === 'map') {\n const mapMgr = mgr as NestedMapManager\n for (const [, entry] of mapMgr.instances) {\n const childInternal = entry.instance as StoreInstance & StoreInternalFields\n childInternal.__applyEvent(event, { skipEventLog: true })\n }\n }\n }\n } finally {\n isForwardingToChildren = false\n forwardingEvents.delete(event.type)\n }\n }\n\n // ── Middleware helpers ──\n\n function mwEvent(event: EventInstance, state: Record<string, unknown>): void {\n if (!config.middleware) return\n for (const mw of config.middleware) { mw.onEvent?.(event, state) }\n }\n\n function mwStateChange(prev: Record<string, unknown>, next: Record<string, unknown>): void {\n if (!config.middleware) return\n for (const mw of config.middleware) { mw.onStateChange?.(prev, next) }\n }\n\n function mwIntentStart(intent: IntentDescriptor, payload: unknown): void {\n if (!config.middleware) return\n for (const mw of config.middleware) { mw.onIntentStart?.(intent, payload) }\n }\n\n function mwIntentEnd(intent: IntentDescriptor, payload: unknown): void {\n if (!config.middleware) return\n for (const mw of config.middleware) { mw.onIntentEnd?.(intent, payload) }\n }\n\n function mwError(error: Error, context: { intent: IntentDescriptor; payload?: unknown; command?: Command }): void {\n if (!config.middleware) return\n for (const mw of config.middleware) { mw.onError?.(error, context) }\n }\n\n // ── Core: apply event ──\n\n function applyEvent(event: EventInstance, metaOrOptions?: NestedMeta | { skipEventLog?: boolean }): void {\n if (disposed) return\n const meta = metaOrOptions && 'source' in metaOrOptions ? metaOrOptions as NestedMeta : undefined\n const eventOptions = metaOrOptions && 'skipEventLog' in metaOrOptions ? metaOrOptions as { skipEventLog?: boolean } : undefined\n // Log event (unless forwarded from parent — parent already logged it)\n if (!eventOptions?.skipEventLog) {\n eventLog.push(event)\n }\n\n const handler = config.on?.[event.type]\n if (handler) {\n const prevState = getCombinedState()\n // Merge nested child states into input so on handlers can read nested collections\n const inputState = nestedManagers.length > 0\n ? { ...rawState, ...getNestedStates() }\n : { ...rawState }\n if (IS_DEV) Object.freeze(inputState)\n const { type: _type, ...payload } = event\n const newState = meta\n ? handler(inputState, payload as Record<string, unknown>, meta)\n : handler(inputState, payload as Record<string, unknown>)\n\n // Track changed keys\n const changedKeys = new Set<string>()\n for (const key of Object.keys(newState)) {\n if (rawState[key] !== newState[key]) {\n changedKeys.add(key)\n }\n }\n rawState = newState\n invalidateCache()\n\n // Sync nested array/map children BEFORE computing\n if (nestedManagers.length > 0 && changedKeys.size > 0) {\n syncNestedFromRawState(changedKeys)\n }\n\n // Re-evaluate computed\n if (config.computed && computedNodes.length > 0 && changedKeys.size > 0) {\n const stateForComputed = nestedManagers.length > 0\n ? { ...rawState, ...getNestedStates() }\n : rawState\n const { values } = evaluateComputedNodes(\n computedNodes,\n stateForComputed,\n changedKeys,\n )\n computedValues = values\n invalidateCache()\n }\n\n const nextState = getCombinedState()\n\n // Record snapshot for testing\n stateSnapshots.push({ event, state: nextState })\n\n mwEvent(event, nextState)\n mwStateChange(prevState, nextState)\n notifyEventListeners(event)\n notifyStateListeners()\n } else {\n // No handler but still record and notify\n stateSnapshots.push({ event, state: getCombinedState() })\n mwEvent(event, getCombinedState())\n notifyEventListeners(event)\n }\n\n processRelay(event)\n\n // Forward event down to nested children\n forwardEventToNestedChildren(event)\n }\n\n // ── Relay ──\n\n function processRelay(event: EventInstance): void {\n if (!config.relay || disposed) return\n\n const relayHandler = config.relay[event.type]\n if (!relayHandler) return\n\n if (relayProcessing.has(event.type)) return\n\n relayDepth++\n\n if (relayDepth > MAX_RELAY_DEPTH) {\n if (IS_DEV) {\n console.error(\n `[hurum] Relay depth limit exceeded (${MAX_RELAY_DEPTH}). Event: ${event.type}.`,\n )\n }\n relayDepth--\n return\n }\n\n if (IS_DEV && relayDepth > 3) {\n console.warn(`[hurum] Relay depth ${relayDepth} for event \"${event.type}\".`)\n }\n\n relayProcessing.add(event.type)\n try {\n const relayedEvents = relayHandler(event, rawState)\n for (const relayedEvent of relayedEvents) {\n applyEvent(relayedEvent)\n }\n } finally {\n relayProcessing.delete(event.type)\n relayDepth--\n }\n }\n\n // ── Emit (for executors) ──\n\n function emit(event: EventInstance): void {\n if (disposed) return\n applyEvent(event)\n }\n\n // ── Execute command ──\n\n // Index: command ID → nested child instance that can execute it.\n // Built after initNestedStores() for Nested(single) children.\n const nestedExecutorIndex = new Map<symbol, StoreInstance & StoreInternalFields>()\n\n function buildNestedExecutorIndex(): void {\n for (const mgr of nestedManagers) {\n if (mgr.kind === 'single' && mgr.instance) {\n const childDef = mgr.marker.store as StoreDefinition\n const childConfig = childDef.__config as StoreConfig\n const childInternal = mgr.instance as StoreInstance & StoreInternalFields\n // Index direct child executors\n if (childConfig.executors) {\n for (const executor of childConfig.executors) {\n const command = getExecutorCommand(executor)\n const cid = getCommandId(command)\n nestedExecutorIndex.set(cid, childInternal)\n }\n }\n // Recursively index grandchild+ executors from Nested(single) descendants\n const descendantCommands = childInternal.__getHandleableCommands()\n for (const [cid, descendantStore] of descendantCommands) {\n nestedExecutorIndex.set(cid, descendantStore)\n }\n }\n }\n }\n\n function executeCommand(command: Command, payload: unknown, signal: AbortSignal): Promise<void> {\n const commandId = getCommandId(command)\n const executorFn = executorMap.get(commandId)\n\n if (!executorFn) {\n // Delegate to nested child store if it owns the executor\n const childInstance = nestedExecutorIndex.get(commandId)\n if (childInstance) {\n return childInstance.__executeCommand(command, payload, signal)\n }\n return Promise.reject(new Error('[hurum] No executor registered for command'))\n }\n\n const context = {\n deps,\n emit,\n getState: () => getCombinedState(),\n signal,\n scope,\n }\n\n try {\n const result = (executorFn as (payload: unknown, ctx: typeof context) => void | Promise<void>)(payload, context)\n return result instanceof Promise ? result : Promise.resolve()\n } catch (error) {\n return Promise.reject(error)\n }\n }\n\n // ── Send ──\n\n function baseSend(intentOrPrepared: IntentDescriptor | PreparedIntent, payload?: unknown): IntentRef {\n if (disposed) {\n throw new Error('[hurum] Cannot send intent to a disposed store')\n }\n\n let intent: IntentDescriptor\n let resolvedPayload: unknown\n\n if (isPreparedIntent(intentOrPrepared)) {\n intent = intentOrPrepared.intent\n resolvedPayload = intentOrPrepared.payload\n } else {\n intent = intentOrPrepared\n resolvedPayload = payload\n }\n\n const refSymbol = Symbol('hurum/intent-ref')\n const ref: IntentRef = { __intentRefBrand: refSymbol }\n\n const controller = new AbortController()\n runningControllers.set(refSymbol, controller)\n runningCount++\n\n mwIntentStart(intent, resolvedPayload)\n\n const execute = async () => {\n try {\n if (intent.mode === 'sequential') {\n for (const command of intent.commands) {\n if (controller.signal.aborted) break\n await executeCommand(command, resolvedPayload, controller.signal)\n }\n } else if (intent.mode === 'all') {\n const promises = intent.commands.map((command) => {\n const childCtrl = new AbortController()\n controller.signal.addEventListener('abort', () => childCtrl.abort(), { once: true })\n return executeCommand(command, resolvedPayload, childCtrl.signal)\n })\n try {\n await Promise.all(promises)\n } catch (error) {\n controller.abort()\n throw error\n }\n } else if (intent.mode === 'allSettled') {\n const promises = intent.commands.map((command) => {\n const childCtrl = new AbortController()\n controller.signal.addEventListener('abort', () => childCtrl.abort(), { once: true })\n return executeCommand(command, resolvedPayload, childCtrl.signal).catch((err) => {\n mwError(err instanceof Error ? err : new Error(String(err)), { intent, command, payload: resolvedPayload })\n })\n })\n await Promise.allSettled(promises)\n }\n } catch (error) {\n mwError(error instanceof Error ? error : new Error(String(error)), { intent, payload: resolvedPayload })\n } finally {\n runningControllers.delete(refSymbol)\n runningCount--\n mwIntentEnd(intent, resolvedPayload)\n }\n }\n\n execute()\n return ref\n }\n\n // ── Cancel ──\n\n function cancel(ref: IntentRef): void {\n const refSymbol = ref.__intentRefBrand\n const controller = runningControllers.get(refSymbol)\n if (controller) {\n controller.abort()\n runningControllers.delete(refSymbol)\n runningCount--\n }\n }\n\n function cancelAll(): void {\n for (const [_sym, controller] of runningControllers) {\n controller.abort()\n }\n runningControllers.clear()\n runningCount = 0\n }\n\n // ── Root Delegation ──\n // For Nested(single) children: send goes through root store's baseSend → root middleware always runs.\n // Top-level store: rootBaseSend = own baseSend.\n // Nested child: rootBaseSend = inherited from parent (ultimately the root ancestor).\n const __parentRootSend = (options as Record<string, unknown> | undefined)?.['__rootBaseSend'] as typeof baseSend | undefined\n const __parentRootCancel = (options as Record<string, unknown> | undefined)?.['__rootCancel'] as typeof cancel | undefined\n const __parentRootCancelAll = (options as Record<string, unknown> | undefined)?.['__rootCancelAll'] as typeof cancelAll | undefined\n const rootBaseSend = __parentRootSend ?? baseSend\n const rootCancel = __parentRootCancel ?? cancel\n const rootCancelAll = __parentRootCancelAll ?? cancelAll\n\n // ── Subscribe ──\n\n function subscribe(\n cbOrType: ((state: Record<string, unknown>) => void) | 'events',\n cb?: (event: EventInstance) => void,\n ): () => void {\n if (cbOrType === 'events' && cb) {\n eventListeners.add(cb)\n return () => { eventListeners.delete(cb) }\n }\n if (typeof cbOrType === 'function') {\n stateListeners.add(cbOrType)\n return () => { stateListeners.delete(cbOrType) }\n }\n throw new Error('[hurum] Invalid subscribe arguments')\n }\n\n // ── Dispose ──\n\n function dispose(): void {\n if (disposed) return\n disposed = true\n cancelAll()\n\n // Dispose all nested child stores\n for (const mgr of nestedManagers) {\n if (mgr.kind === 'single') {\n if (mgr.unsub) mgr.unsub()\n if (mgr.instance) mgr.instance.dispose()\n } else {\n for (const [, entry] of mgr.instances) {\n entry.unsub()\n entry.instance.dispose()\n }\n mgr.instances.clear()\n }\n }\n\n stateListeners.clear()\n eventListeners.clear()\n }\n\n // ── Nested Store Initialization ──\n\n /** Subscribe to a nested child store and wire up event/state bubbling + middleware. */\n function subscribeToNestedChild(childInstance: StoreInstance, logToEventLog: boolean): () => void {\n const unsub = childInstance.subscribe(() => {\n if (!disposed) {\n const prev = getCombinedState()\n recomputeFromNestedChange()\n const next = getCombinedState()\n mwStateChange(prev, next)\n notifyStateListeners()\n }\n })\n const unsubEvents = childInstance.subscribe('events', (event: EventInstance) => {\n if (!disposed && !isForwardingToChildren) {\n if (logToEventLog) eventLog.push(event)\n mwEvent(event, getCombinedState())\n notifyEventListeners(event)\n processRelay(event)\n }\n })\n return () => { unsub(); unsubEvents() }\n }\n\n function initNestedStores(): void {\n for (const [key, marker] of Object.entries(nestedFields)) {\n const storeDef = marker.store as StoreDefinition\n const childDepsFactory = config.childDepsMap?.[key]\n\n if (marker.kind === 'single') {\n const mgr: NestedSingleManager = {\n kind: 'single',\n key,\n marker,\n instance: null,\n unsub: null,\n }\n\n // Create child instance — pass root delegation context for recursive propagation\n const childDeps = childDepsFactory ? childDepsFactory(deps as Record<string, unknown>) : undefined\n const childCreateOpts: Record<string, unknown> = { deps: childDeps }\n childCreateOpts['__rootBaseSend'] = rootBaseSend\n childCreateOpts['__rootCancel'] = rootCancel\n childCreateOpts['__rootCancelAll'] = rootCancelAll\n const childInstance = storeDef.create(childCreateOpts as StoreCreateOptions<unknown, unknown>)\n\n // Replace child's send/cancel/cancelAll with root delegation\n const childConfig = (storeDef as StoreDefinition).__config as StoreConfig\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ;(childInstance as any).send = createSendProxy(rootBaseSend, childConfig.intents)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ;(childInstance as any).cancel = rootCancel\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ;(childInstance as any).cancelAll = rootCancelAll\n\n // Subscribe to child state/event changes — bubble up + notify middleware\n const unsubChild = subscribeToNestedChild(childInstance, false)\n\n mgr.instance = childInstance\n mgr.unsub = unsubChild\n nestedManagers.push(mgr)\n scope[key] = childInstance\n\n } else if (marker.kind === 'array') {\n const mgr: NestedArrayManager = {\n kind: 'array',\n key,\n marker,\n instances: new Map(),\n }\n nestedManagers.push(mgr)\n\n // Initialize from initialState if provided\n const initialArray = (options?.initialState as Record<string, unknown> | undefined)?.[key]\n if (Array.isArray(initialArray)) {\n for (let i = 0; i < initialArray.length; i++) {\n const item = initialArray[i] as Record<string, unknown> | undefined\n const id = item?.id\n if (id == null) {\n if (IS_DEV) {\n console.warn(`[hurum] Nested.array item at index ${i} in \"${key}\" has no 'id' field. Skipping.`)\n }\n continue\n }\n const instanceId = nextInstanceId()\n const childDeps = childDepsFactory ? childDepsFactory(deps as Record<string, unknown>) : undefined\n const childInstance = storeDef.create({\n initialState: item,\n deps: childDeps,\n })\n\n const meta: NestedMeta = {\n source: { instanceId, index: i, parentKey: key },\n }\n\n const unsubChild = subscribeToNestedChild(childInstance, true)\n\n mgr.instances.set(String(id), {\n instance: childInstance,\n unsub: unsubChild,\n })\n\n // Store meta on instance for retrieval\n ;(childInstance as StoreInstance & { __nestedMeta?: NestedMeta }).__nestedMeta = meta\n }\n }\n\n // Expose scope as NestedArrayScope with ID-based O(1) access\n const arrayScope: NestedArrayScope = {\n get(id: string) {\n return mgr.instances.get(id)?.instance\n },\n values() {\n const arr: StoreInstance[] = []\n for (const [, entry] of mgr.instances) {\n arr.push(entry.instance)\n }\n return arr\n },\n get size() {\n return mgr.instances.size\n },\n [Symbol.iterator]() {\n const entries = mgr.instances.values()\n return {\n next(): IteratorResult<StoreInstance> {\n const result = entries.next()\n if (result.done) return { done: true, value: undefined }\n return { done: false, value: result.value.instance }\n },\n }\n },\n }\n scope[key] = arrayScope\n\n } else if (marker.kind === 'map') {\n const mgr: NestedMapManager = {\n kind: 'map',\n key,\n marker,\n instances: new Map(),\n }\n nestedManagers.push(mgr)\n\n // Initialize from initialState if provided\n const initialMap = (options?.initialState as Record<string, unknown> | undefined)?.[key]\n if (initialMap && typeof initialMap === 'object' && !Array.isArray(initialMap)) {\n for (const [mapKey, mapValue] of Object.entries(initialMap as Record<string, unknown>)) {\n const childDeps = childDepsFactory ? childDepsFactory(deps as Record<string, unknown>) : undefined\n const childInstance = storeDef.create({\n initialState: mapValue as Record<string, unknown>,\n deps: childDeps,\n })\n\n const unsubChild = subscribeToNestedChild(childInstance, true)\n\n mgr.instances.set(mapKey, {\n instance: childInstance,\n unsub: unsubChild,\n })\n }\n }\n\n // Expose scope as getter that returns a Map\n Object.defineProperty(scope, key, {\n get: () => {\n const map = new Map<string, StoreInstance>()\n for (const [k, entry] of mgr.instances) {\n map.set(k, entry.instance)\n }\n return map\n },\n enumerable: true,\n configurable: true,\n })\n }\n }\n }\n\n // ── Nested Sync: Reconcile child stores from parent state ──\n\n function syncNestedArray(mgr: NestedArrayManager, nextArray: unknown[]): void {\n if (!Array.isArray(nextArray)) return\n\n const storeDef = mgr.marker.store as StoreDefinition\n const childDepsFactory = config.childDepsMap?.[mgr.key]\n const existingIds = new Set(mgr.instances.keys())\n const nextIds = new Set<string>()\n\n for (let i = 0; i < nextArray.length; i++) {\n const item = nextArray[i] as Record<string, unknown> | undefined\n const id = item?.id\n if (id == null) continue\n const idStr = String(id)\n nextIds.add(idStr)\n\n if (!existingIds.has(idStr)) {\n // New child — create instance\n const instanceId = nextInstanceId()\n const childDeps = childDepsFactory ? childDepsFactory(deps as Record<string, unknown>) : undefined\n const childInstance = storeDef.create({\n initialState: item,\n deps: childDeps,\n })\n\n const meta: NestedMeta = {\n source: { instanceId, index: i, parentKey: mgr.key },\n }\n ;(childInstance as StoreInstance & { __nestedMeta?: NestedMeta }).__nestedMeta = meta\n\n const unsubChild = subscribeToNestedChild(childInstance, true)\n\n mgr.instances.set(idStr, {\n instance: childInstance,\n unsub: unsubChild,\n })\n }\n }\n\n // Remove children no longer in the array\n for (const id of existingIds) {\n if (!nextIds.has(id)) {\n const entry = mgr.instances.get(id)!\n entry.unsub()\n entry.instance.dispose()\n mgr.instances.delete(id)\n }\n }\n }\n\n function syncNestedMap(mgr: NestedMapManager, nextMap: Record<string, unknown>): void {\n if (!nextMap || typeof nextMap !== 'object' || Array.isArray(nextMap)) return\n\n const storeDef = mgr.marker.store as StoreDefinition\n const childDepsFactory = config.childDepsMap?.[mgr.key]\n const existingKeys = new Set(mgr.instances.keys())\n const nextKeys = new Set(Object.keys(nextMap))\n\n for (const key of nextKeys) {\n if (!existingKeys.has(key)) {\n // New child — create instance\n const childDeps = childDepsFactory ? childDepsFactory(deps as Record<string, unknown>) : undefined\n const childInstance = storeDef.create({\n initialState: nextMap[key] as Record<string, unknown>,\n deps: childDeps,\n })\n\n const unsubChild = subscribeToNestedChild(childInstance, true)\n\n mgr.instances.set(key, {\n instance: childInstance,\n unsub: unsubChild,\n })\n }\n }\n\n // Remove children no longer in the map\n for (const key of existingKeys) {\n if (!nextKeys.has(key)) {\n const entry = mgr.instances.get(key)!\n entry.unsub()\n entry.instance.dispose()\n mgr.instances.delete(key)\n }\n }\n }\n\n // ── Sync nested array/map from rawState ──\n let syncingNested = false\n\n function syncNestedFromRawState(changedKeys?: Set<string>): void {\n if (syncingNested) return\n syncingNested = true\n try {\n for (const mgr of nestedManagers) {\n if (mgr.kind !== 'array' && mgr.kind !== 'map') continue\n if (changedKeys && !changedKeys.has(mgr.key)) continue\n const currentRawValue = rawState[mgr.key]\n if (currentRawValue !== undefined) {\n if (mgr.kind === 'array') {\n syncNestedArray(mgr as NestedArrayManager, currentRawValue as unknown[])\n } else if (mgr.kind === 'map') {\n syncNestedMap(mgr as NestedMapManager, currentRawValue as Record<string, unknown>)\n }\n }\n }\n } finally {\n syncingNested = false\n }\n }\n\n function setupNestedSync(): void {\n // No-op: sync is now handled inline in applyEvent().\n }\n\n // Initialize nested stores\n initNestedStores()\n setupNestedSync()\n buildNestedExecutorIndex()\n\n // Re-initialize computed nodes now that nested stores exist,\n // so dependency tracking captures access to nested child state fields.\n if (nestedManagers.length > 0 && config.computed && computedNodes.length > 0) {\n const combinedForInit = { ...rawState, ...getNestedStates() }\n const freshNodes = initializeComputedNodes(\n combinedForInit,\n config.computed,\n )\n computedNodes.length = 0\n computedNodes.push(...freshNodes)\n computedValues = {}\n for (const node of computedNodes) {\n computedValues[node.name] = node.value\n }\n }\n\n // ── Send Proxy ──\n\n const sendProxy = createSendProxy(baseSend, config.intents)\n\n // ── Instance ──\n\n const instance: StoreInstance<TDeps, TRawState, TComputed, TIntents> & StoreInternalFields = {\n send: sendProxy as SendFn<TIntents>,\n cancel,\n cancelAll,\n getState: getCombinedState as StoreInstance<TDeps, TRawState, TComputed, Record<string, never>>['getState'],\n subscribe: subscribe as StoreInstance<TDeps, TRawState, TComputed, Record<string, never>>['subscribe'],\n dispose,\n selector<T>(fn: (state: ResolvedState<TRawState> & TComputed) => T): Selector<T> {\n return createSelector(\n getCombinedState as () => ResolvedState<TRawState> & TComputed,\n subscribe as (cb: (state: ResolvedState<TRawState> & TComputed) => void) => () => void,\n fn,\n )\n },\n scope: scope as ScopeOf<TRawState>,\n // Internal — used by testing API and event forwarding\n __eventLog: eventLog,\n __stateSnapshots: stateSnapshots,\n __runningCount: () => runningCount,\n __rawState: () => rawState,\n __applyEvent: (event: EventInstance, opts?: { skipEventLog?: boolean }) => applyEvent(event, opts),\n __executeCommand: executeCommand,\n __getHandleableCommands: () => nestedExecutorIndex,\n }\n\n // Brand for runtime type guard (isStoreInstance)\n Object.defineProperty(instance, STORE_INSTANCE_BRAND, {\n value: true,\n writable: false,\n enumerable: false,\n configurable: false,\n })\n\n // Notify middleware that the store is ready\n if (config.middleware) {\n const storeRef = {\n getState: () => getCombinedState() as Record<string, unknown>,\n meta: {\n computedKeys: computedNodes.map((n) => n.name),\n nestedKeys: nestedManagers.map((m) => ({ key: m.key, kind: m.kind })),\n },\n }\n for (const mw of config.middleware) { mw.onAttach?.(storeRef) }\n }\n\n return instance\n}\n","// @hurum/core — Logger Middleware\n\nimport type { EventInstance } from '../events'\nimport type { Middleware } from '../middleware'\n\nexport interface LoggerOptions {\n filter?: (event: EventInstance) => boolean\n}\n\n/**\n * Console logging middleware. Logs events, state changes, intents, and errors.\n *\n * @example\n * ```ts\n * Store({ ..., middleware: [logger({ filter: (e) => !e.type.startsWith('Timer/') })] })\n * ```\n */\nexport function logger(options?: LoggerOptions): Middleware {\n const filter = options?.filter\n\n return {\n name: 'logger',\n onEvent: (event, state) => {\n if (filter && !filter(event)) return\n console.group(`[Event] ${event.type}`)\n console.log(event)\n console.log('State:', state)\n console.groupEnd()\n },\n onStateChange: (prev, next) => {\n console.log('[State Change]', { prev, next })\n },\n onIntentStart: (intent, payload) => {\n console.log('[Intent Start]', intent, payload)\n },\n onIntentEnd: (intent, payload) => {\n console.log('[Intent End]', intent, payload)\n },\n onError: (error, context) => {\n console.error('[Error]', error, context)\n },\n }\n}\n","// @hurum/core — Persist Middleware\n\nimport type { Middleware } from '../middleware'\n\nexport interface PersistOptions {\n key: string\n storage?: Pick<Storage, 'getItem' | 'setItem'>\n serialize?: (state: Record<string, unknown>) => string\n deserialize?: (raw: string) => Record<string, unknown>\n pick?: string[]\n}\n\nexport interface PersistHandle {\n middleware: Middleware\n getPersistedState: () => Record<string, unknown> | null\n}\n\nfunction pickKeys(state: Record<string, unknown>, keys: string[]): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n for (const key of keys) {\n if (key in state) {\n result[key] = state[key]\n }\n }\n return result\n}\n\n/**\n * Persistence middleware. Saves state to storage on every state change.\n * Use `getPersistedState()` to hydrate on startup via `Store.create({ initialState })`.\n *\n * @example\n * ```ts\n * const persistHandle = persist({ key: 'my-store', pick: ['todos', 'settings'] })\n *\n * const MyStore = Store({ ..., middleware: [persistHandle.middleware] })\n * const store = MyStore.create({ initialState: persistHandle.getPersistedState() ?? undefined })\n * ```\n */\nexport function persist(options: PersistOptions): PersistHandle {\n const {\n key,\n storage = typeof globalThis !== 'undefined' && 'localStorage' in globalThis\n ? globalThis.localStorage\n : undefined,\n serialize = JSON.stringify,\n deserialize = JSON.parse as (raw: string) => Record<string, unknown>,\n pick,\n } = options\n\n const middleware: Middleware = {\n name: 'persist',\n onStateChange: (_prev, next) => {\n if (!storage) return\n try {\n const toPersist = pick ? pickKeys(next, pick) : next\n storage.setItem(key, serialize(toPersist))\n } catch {\n // Silent fail — storage may be full or unavailable\n }\n },\n }\n\n function getPersistedState(): Record<string, unknown> | null {\n if (!storage) return null\n try {\n const raw = storage.getItem(key)\n if (raw === null) return null\n return deserialize(raw)\n } catch {\n return null\n }\n }\n\n return { middleware, getPersistedState }\n}\n","// @hurum/core — DevTools Middleware\n\nimport type { Middleware } from '../middleware'\n\nexport interface DevToolsOptions {\n name?: string\n}\n\ninterface DevToolsExtensionInstance {\n init(state: Record<string, unknown>): void\n send(action: { type: string; payload?: unknown }, state: Record<string, unknown>): void\n subscribe(listener: (message: { type?: string; state?: unknown }) => void): (() => void) | void\n}\n\ninterface DevToolsExtension {\n connect(options?: { name?: string }): DevToolsExtensionInstance\n}\n\n/** Shape of globalThis when Redux DevTools extension is present */\ninterface GlobalWithDevTools {\n __REDUX_DEVTOOLS_EXTENSION__?: DevToolsExtension\n}\n\nexport interface DevToolsHandle {\n middleware: Middleware\n connect: (store: { getState: () => Record<string, unknown> }) => void\n}\n\n/**\n * Redux DevTools Extension integration. Sends events and state to the browser extension.\n * Call `handle.connect(store)` after creating the store instance.\n *\n * @example\n * ```ts\n * const dtHandle = devtools({ name: 'MyApp' })\n * const MyStore = Store({ ..., middleware: [dtHandle.middleware] })\n * const store = MyStore.create()\n * dtHandle.connect(store)\n * ```\n */\nexport function devtools(options?: DevToolsOptions): DevToolsHandle {\n const name = options?.name ?? 'Hurum Store'\n let devToolsInstance: DevToolsExtensionInstance | null = null\n let storeRef: { getState: () => Record<string, unknown> } | null = null\n\n const middleware: Middleware = {\n name: 'devtools',\n onEvent: (event, state) => {\n devToolsInstance?.send({ type: event.type, payload: event }, state)\n },\n onIntentStart: (_intent, payload) => {\n devToolsInstance?.send(\n { type: `[Intent] ${_intent.mode}`, payload },\n storeRef?.getState() ?? {},\n )\n },\n onError: (error, context) => {\n devToolsInstance?.send(\n { type: `[Error] ${error.message}`, payload: context },\n storeRef?.getState() ?? {},\n )\n },\n }\n\n function connect(store: { getState: () => Record<string, unknown> }): void {\n storeRef = store\n const extension = typeof globalThis !== 'undefined'\n ? (globalThis as unknown as GlobalWithDevTools).__REDUX_DEVTOOLS_EXTENSION__\n : undefined\n\n if (!extension) return\n\n devToolsInstance = extension.connect({ name })\n devToolsInstance.init(store.getState())\n\n // Support time-travel by subscribing to devtools messages\n devToolsInstance.subscribe((message) => {\n if (message.type === 'DISPATCH' && message.state) {\n // Time-travel: devtools sends a new state\n // Middleware is read-only, so we cannot set state here.\n // Time-travel support requires the store to expose a setState mechanism,\n // which violates the pure observer principle. We log the jump for observability.\n }\n })\n }\n\n return { middleware, connect }\n}\n","// @hurum/core — Undo/Redo Middleware\n\nimport type { Middleware } from '../middleware'\n\nexport interface UndoRedoOptions {\n maxHistory?: number\n}\n\nexport interface UndoRedoHandle {\n middleware: Middleware\n undo: () => Record<string, unknown> | null\n redo: () => Record<string, unknown> | null\n canUndo: () => boolean\n canRedo: () => boolean\n getHistory: () => readonly Record<string, unknown>[]\n getPosition: () => number\n}\n\n/**\n * Undo/Redo middleware. Tracks state history for time-travel within the app.\n * Returns `undo()` and `redo()` functions that return the restored state.\n *\n * @example\n * ```ts\n * const history = undoRedo({ maxHistory: 30 })\n * const MyStore = Store({ ..., middleware: [history.middleware] })\n * // Later: const prevState = history.undo()\n * ```\n */\nexport function undoRedo(options?: UndoRedoOptions): UndoRedoHandle {\n const maxHistory = options?.maxHistory ?? 50\n\n const history: Record<string, unknown>[] = []\n let position = -1\n let tracking = true\n\n const middleware: Middleware = {\n name: 'undo-redo',\n onStateChange: (_prev, next) => {\n if (!tracking) return\n\n // Discard any future states after current position\n if (position < history.length - 1) {\n history.splice(position + 1)\n }\n\n // Add new state\n history.push(structuredClone(next))\n position = history.length - 1\n\n // Trim to max history\n if (history.length > maxHistory) {\n const excess = history.length - maxHistory\n history.splice(0, excess)\n position -= excess\n }\n },\n }\n\n function undo(): Record<string, unknown> | null {\n if (position <= 0) return null\n tracking = false\n position--\n const state = structuredClone(history[position]!)\n tracking = true\n return state\n }\n\n function redo(): Record<string, unknown> | null {\n if (position >= history.length - 1) return null\n tracking = false\n position++\n const state = structuredClone(history[position]!)\n tracking = true\n return state\n }\n\n function canUndo(): boolean {\n return position > 0\n }\n\n function canRedo(): boolean {\n return position < history.length - 1\n }\n\n function getHistory(): readonly Record<string, unknown>[] {\n return history\n }\n\n function getPosition(): number {\n return position\n }\n\n return { middleware, undo, redo, canUndo, canRedo, getHistory, getPosition }\n}\n"]}
@@ -0,0 +1,114 @@
1
+ import { E as EventInstance, M as Middleware, S as StoreDefinition, R as ResolvedState, a as StoreInstance } from './store-BrPM22fc.cjs';
2
+ export { C as ChildDepsOf, b as Command, c as CommandExecutor, d as Event, e as EventCreator, f as EventDefinition, g as EventHandlerMap, h as Events, i as Executor, j as ExecutorContext, I as Intent, k as IntentAction, l as IntentDescriptor, m as IntentMap, n as IntentMode, o as IntentRef, p as Intents, q as MiddlewareFactory, N as Nested, r as NestedArrayScope, s as NestedKind, t as NestedMarker, P as PreparedIntent, u as ResolvedStateOf, v as ScopeOf, w as Selector, x as SendFn, y as Store, z as StoreBuilder, A as StoreCreateOptions, B as StoreInstanceInternal, D as StoreInternalFields, F as isPreparedIntent, G as isSelector, H as isStoreDefinition, J as isStoreInstance } from './store-BrPM22fc.cjs';
3
+
4
+ interface LoggerOptions {
5
+ filter?: (event: EventInstance) => boolean;
6
+ }
7
+ /**
8
+ * Console logging middleware. Logs events, state changes, intents, and errors.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * Store({ ..., middleware: [logger({ filter: (e) => !e.type.startsWith('Timer/') })] })
13
+ * ```
14
+ */
15
+ declare function logger(options?: LoggerOptions): Middleware;
16
+
17
+ interface PersistOptions {
18
+ key: string;
19
+ storage?: Pick<Storage, 'getItem' | 'setItem'>;
20
+ serialize?: (state: Record<string, unknown>) => string;
21
+ deserialize?: (raw: string) => Record<string, unknown>;
22
+ pick?: string[];
23
+ }
24
+ interface PersistHandle {
25
+ middleware: Middleware;
26
+ getPersistedState: () => Record<string, unknown> | null;
27
+ }
28
+ /**
29
+ * Persistence middleware. Saves state to storage on every state change.
30
+ * Use `getPersistedState()` to hydrate on startup via `Store.create({ initialState })`.
31
+ *
32
+ * @example
33
+ * ```ts
34
+ * const persistHandle = persist({ key: 'my-store', pick: ['todos', 'settings'] })
35
+ *
36
+ * const MyStore = Store({ ..., middleware: [persistHandle.middleware] })
37
+ * const store = MyStore.create({ initialState: persistHandle.getPersistedState() ?? undefined })
38
+ * ```
39
+ */
40
+ declare function persist(options: PersistOptions): PersistHandle;
41
+
42
+ interface DevToolsOptions {
43
+ name?: string;
44
+ }
45
+ interface DevToolsHandle {
46
+ middleware: Middleware;
47
+ connect: (store: {
48
+ getState: () => Record<string, unknown>;
49
+ }) => void;
50
+ }
51
+ /**
52
+ * Redux DevTools Extension integration. Sends events and state to the browser extension.
53
+ * Call `handle.connect(store)` after creating the store instance.
54
+ *
55
+ * @example
56
+ * ```ts
57
+ * const dtHandle = devtools({ name: 'MyApp' })
58
+ * const MyStore = Store({ ..., middleware: [dtHandle.middleware] })
59
+ * const store = MyStore.create()
60
+ * dtHandle.connect(store)
61
+ * ```
62
+ */
63
+ declare function devtools(options?: DevToolsOptions): DevToolsHandle;
64
+
65
+ interface UndoRedoOptions {
66
+ maxHistory?: number;
67
+ }
68
+ interface UndoRedoHandle {
69
+ middleware: Middleware;
70
+ undo: () => Record<string, unknown> | null;
71
+ redo: () => Record<string, unknown> | null;
72
+ canUndo: () => boolean;
73
+ canRedo: () => boolean;
74
+ getHistory: () => readonly Record<string, unknown>[];
75
+ getPosition: () => number;
76
+ }
77
+ /**
78
+ * Undo/Redo middleware. Tracks state history for time-travel within the app.
79
+ * Returns `undo()` and `redo()` functions that return the restored state.
80
+ *
81
+ * @example
82
+ * ```ts
83
+ * const history = undoRedo({ maxHistory: 30 })
84
+ * const MyStore = Store({ ..., middleware: [history.middleware] })
85
+ * // Later: const prevState = history.undo()
86
+ * ```
87
+ */
88
+ declare function undoRedo(options?: UndoRedoOptions): UndoRedoHandle;
89
+
90
+ /**
91
+ * Simple structural equality check.
92
+ * Handles primitives, arrays, and plain objects.
93
+ */
94
+ declare function structuralEqual(a: unknown, b: unknown): boolean;
95
+
96
+ /** Extract the store instance type from a store definition */
97
+ type StoreOf<T> = T extends StoreDefinition<infer D, infer R, infer C, infer I> ? StoreInstance<D, R, C, I> : never;
98
+ /** Extract the combined state type (resolved raw + computed) from a store definition */
99
+ type StateOf<T> = T extends StoreDefinition<unknown, infer R, infer C> ? ResolvedState<R> & C : never;
100
+ /** Extract the raw state type (without computed) from a store definition */
101
+ type RawStateOf<T> = T extends StoreDefinition<unknown, infer R, unknown> ? R : never;
102
+ /** Extract the deps type from a store definition */
103
+ type DepsOf<T> = T extends StoreDefinition<infer D, unknown, unknown> ? D : never;
104
+ /**
105
+ * Detect conflicting keys between two deps types.
106
+ * If the same key exists in both A and B with different types,
107
+ * the intersection A & B makes that key's type `TypeA & TypeB`
108
+ * which may be unassignable.
109
+ */
110
+ type DetectConflicts<A, B> = {
111
+ [K in keyof A & keyof B]: A[K] extends B[K] ? B[K] extends A[K] ? never : K : K;
112
+ }[keyof A & keyof B];
113
+
114
+ export { type DepsOf, type DetectConflicts, type DevToolsHandle, type DevToolsOptions, EventInstance, type LoggerOptions, Middleware, type PersistHandle, type PersistOptions, type RawStateOf, ResolvedState, type StateOf, StoreDefinition, StoreInstance, type StoreOf, type UndoRedoHandle, type UndoRedoOptions, devtools, logger, persist, structuralEqual, undoRedo };
@@ -0,0 +1,114 @@
1
+ import { E as EventInstance, M as Middleware, S as StoreDefinition, R as ResolvedState, a as StoreInstance } from './store-BrPM22fc.js';
2
+ export { C as ChildDepsOf, b as Command, c as CommandExecutor, d as Event, e as EventCreator, f as EventDefinition, g as EventHandlerMap, h as Events, i as Executor, j as ExecutorContext, I as Intent, k as IntentAction, l as IntentDescriptor, m as IntentMap, n as IntentMode, o as IntentRef, p as Intents, q as MiddlewareFactory, N as Nested, r as NestedArrayScope, s as NestedKind, t as NestedMarker, P as PreparedIntent, u as ResolvedStateOf, v as ScopeOf, w as Selector, x as SendFn, y as Store, z as StoreBuilder, A as StoreCreateOptions, B as StoreInstanceInternal, D as StoreInternalFields, F as isPreparedIntent, G as isSelector, H as isStoreDefinition, J as isStoreInstance } from './store-BrPM22fc.js';
3
+
4
+ interface LoggerOptions {
5
+ filter?: (event: EventInstance) => boolean;
6
+ }
7
+ /**
8
+ * Console logging middleware. Logs events, state changes, intents, and errors.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * Store({ ..., middleware: [logger({ filter: (e) => !e.type.startsWith('Timer/') })] })
13
+ * ```
14
+ */
15
+ declare function logger(options?: LoggerOptions): Middleware;
16
+
17
+ interface PersistOptions {
18
+ key: string;
19
+ storage?: Pick<Storage, 'getItem' | 'setItem'>;
20
+ serialize?: (state: Record<string, unknown>) => string;
21
+ deserialize?: (raw: string) => Record<string, unknown>;
22
+ pick?: string[];
23
+ }
24
+ interface PersistHandle {
25
+ middleware: Middleware;
26
+ getPersistedState: () => Record<string, unknown> | null;
27
+ }
28
+ /**
29
+ * Persistence middleware. Saves state to storage on every state change.
30
+ * Use `getPersistedState()` to hydrate on startup via `Store.create({ initialState })`.
31
+ *
32
+ * @example
33
+ * ```ts
34
+ * const persistHandle = persist({ key: 'my-store', pick: ['todos', 'settings'] })
35
+ *
36
+ * const MyStore = Store({ ..., middleware: [persistHandle.middleware] })
37
+ * const store = MyStore.create({ initialState: persistHandle.getPersistedState() ?? undefined })
38
+ * ```
39
+ */
40
+ declare function persist(options: PersistOptions): PersistHandle;
41
+
42
+ interface DevToolsOptions {
43
+ name?: string;
44
+ }
45
+ interface DevToolsHandle {
46
+ middleware: Middleware;
47
+ connect: (store: {
48
+ getState: () => Record<string, unknown>;
49
+ }) => void;
50
+ }
51
+ /**
52
+ * Redux DevTools Extension integration. Sends events and state to the browser extension.
53
+ * Call `handle.connect(store)` after creating the store instance.
54
+ *
55
+ * @example
56
+ * ```ts
57
+ * const dtHandle = devtools({ name: 'MyApp' })
58
+ * const MyStore = Store({ ..., middleware: [dtHandle.middleware] })
59
+ * const store = MyStore.create()
60
+ * dtHandle.connect(store)
61
+ * ```
62
+ */
63
+ declare function devtools(options?: DevToolsOptions): DevToolsHandle;
64
+
65
+ interface UndoRedoOptions {
66
+ maxHistory?: number;
67
+ }
68
+ interface UndoRedoHandle {
69
+ middleware: Middleware;
70
+ undo: () => Record<string, unknown> | null;
71
+ redo: () => Record<string, unknown> | null;
72
+ canUndo: () => boolean;
73
+ canRedo: () => boolean;
74
+ getHistory: () => readonly Record<string, unknown>[];
75
+ getPosition: () => number;
76
+ }
77
+ /**
78
+ * Undo/Redo middleware. Tracks state history for time-travel within the app.
79
+ * Returns `undo()` and `redo()` functions that return the restored state.
80
+ *
81
+ * @example
82
+ * ```ts
83
+ * const history = undoRedo({ maxHistory: 30 })
84
+ * const MyStore = Store({ ..., middleware: [history.middleware] })
85
+ * // Later: const prevState = history.undo()
86
+ * ```
87
+ */
88
+ declare function undoRedo(options?: UndoRedoOptions): UndoRedoHandle;
89
+
90
+ /**
91
+ * Simple structural equality check.
92
+ * Handles primitives, arrays, and plain objects.
93
+ */
94
+ declare function structuralEqual(a: unknown, b: unknown): boolean;
95
+
96
+ /** Extract the store instance type from a store definition */
97
+ type StoreOf<T> = T extends StoreDefinition<infer D, infer R, infer C, infer I> ? StoreInstance<D, R, C, I> : never;
98
+ /** Extract the combined state type (resolved raw + computed) from a store definition */
99
+ type StateOf<T> = T extends StoreDefinition<unknown, infer R, infer C> ? ResolvedState<R> & C : never;
100
+ /** Extract the raw state type (without computed) from a store definition */
101
+ type RawStateOf<T> = T extends StoreDefinition<unknown, infer R, unknown> ? R : never;
102
+ /** Extract the deps type from a store definition */
103
+ type DepsOf<T> = T extends StoreDefinition<infer D, unknown, unknown> ? D : never;
104
+ /**
105
+ * Detect conflicting keys between two deps types.
106
+ * If the same key exists in both A and B with different types,
107
+ * the intersection A & B makes that key's type `TypeA & TypeB`
108
+ * which may be unassignable.
109
+ */
110
+ type DetectConflicts<A, B> = {
111
+ [K in keyof A & keyof B]: A[K] extends B[K] ? B[K] extends A[K] ? never : K : K;
112
+ }[keyof A & keyof B];
113
+
114
+ export { type DepsOf, type DetectConflicts, type DevToolsHandle, type DevToolsOptions, EventInstance, type LoggerOptions, Middleware, type PersistHandle, type PersistOptions, type RawStateOf, ResolvedState, type StateOf, StoreDefinition, StoreInstance, type StoreOf, type UndoRedoHandle, type UndoRedoOptions, devtools, logger, persist, structuralEqual, undoRedo };