@effuse/store 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/state.ts","../src/config/constants.ts","../src/middleware/manager.ts","../src/errors.ts","../src/registry/index.ts","../src/persistence/adapters.ts","../src/actions/cancellation.ts","../src/core/store.ts","../src/context/scope.ts","../src/actions/async.ts","../src/validation/schema.ts","../src/composition/compose.ts","../src/reactivity/derived.ts","../src/reactivity/streams.ts","../src/reactivity/selectors.ts","../src/devtools/connector.ts"],"names":["Effect","Arr","signal","Option","currentState","Duration","Predicate","stores","pipe"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Effect, SubscriptionRef } from 'effect';\n\n// Atomic state management with synchronous accessors\nexport interface AtomicState<T extends Record<string, unknown>> {\n\tget: () => T;\n\tset: (value: T) => void;\n\tupdate: (fn: (state: T) => T) => void;\n}\n\n// Build atomic state container\nexport const createAtomicState = <T extends Record<string, unknown>>(\n\tinitial: T\n): AtomicState<T> => {\n\tconst ref = Effect.runSync(SubscriptionRef.make(initial));\n\treturn {\n\t\tget: () => Effect.runSync(SubscriptionRef.get(ref)),\n\t\tset: (value: T) => {\n\t\t\tEffect.runSync(SubscriptionRef.set(ref, value));\n\t\t},\n\t\tupdate: (fn: (state: T) => T) => {\n\t\t\tEffect.runSync(SubscriptionRef.update(ref, fn));\n\t\t},\n\t};\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Config, Duration, Effect } from 'effect';\n\n// Storage key prefix\nexport const STORAGE_PREFIX = 'effuse-store:';\n// Root scope identifier\nexport const ROOT_SCOPE_ID = '__root__';\n// Scope identifier prefix\nexport const SCOPE_PREFIX = 'scope_';\n\n// Default timeout milliseconds\nexport const DEFAULT_TIMEOUT_MS = 5000;\n\n// Default timeout duration\nexport const DEFAULT_TIMEOUT = Duration.millis(DEFAULT_TIMEOUT_MS);\n\n// Initial retry delay\nexport const DEFAULT_RETRY_INITIAL_DELAY_MS = 100;\n// Maximum retry delay\nexport const DEFAULT_RETRY_MAX_DELAY_MS = 5000;\n// Retry backoff factor\nexport const DEFAULT_RETRY_BACKOFF_FACTOR = 2;\n\n// Internal constants collection\nexport const StoreConstants = {\n\tSTORAGE_PREFIX,\n\tROOT_SCOPE_ID,\n\tSCOPE_PREFIX,\n\tDEBUG_PREFIX: '[store]',\n\tDEVTOOLS_PREFIX: 'Effuse:',\n\tDEFAULT_TIMEOUT_MS,\n} as const;\n\n// Store configuration parameters\nexport const StoreConfigOptions = {\n\tpersistByDefault: Config.boolean('EFFUSE_STORE_PERSIST').pipe(\n\t\tConfig.withDefault(false)\n\t),\n\tstoragePrefix: Config.string('EFFUSE_STORE_PREFIX').pipe(\n\t\tConfig.withDefault(STORAGE_PREFIX)\n\t),\n\tdebug: Config.boolean('EFFUSE_STORE_DEBUG').pipe(Config.withDefault(false)),\n\tdevtools: Config.boolean('EFFUSE_STORE_DEVTOOLS').pipe(\n\t\tConfig.withDefault(false)\n\t),\n};\n\n// Store configuration values\nexport interface StoreConfigValues {\n\tpersistByDefault: boolean;\n\tstoragePrefix: string;\n\tdebug: boolean;\n\tdevtools: boolean;\n}\n\n// Load configuration values\nexport const loadStoreConfigValues: Effect.Effect<StoreConfigValues> =\n\tEffect.all({\n\t\tpersistByDefault: StoreConfigOptions.persistByDefault,\n\t\tstoragePrefix: StoreConfigOptions.storagePrefix,\n\t\tdebug: StoreConfigOptions.debug,\n\t\tdevtools: StoreConfigOptions.devtools,\n\t}).pipe(\n\t\tEffect.catchAll(() =>\n\t\t\tEffect.succeed({\n\t\t\t\tpersistByDefault: false,\n\t\t\t\tstoragePrefix: STORAGE_PREFIX,\n\t\t\t\tdebug: false,\n\t\t\t\tdevtools: false,\n\t\t\t})\n\t\t)\n\t);\n\nlet cachedConfig: StoreConfigValues | null = null;\n\n// Access store configuration\nexport const getStoreConfig = (): StoreConfigValues => {\n\tif (!cachedConfig) {\n\t\tcachedConfig = Effect.runSync(loadStoreConfigValues);\n\t}\n\treturn cachedConfig;\n};\n\n// Reset configuration cache\nexport const resetStoreConfigCache = (): void => {\n\tcachedConfig = null;\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Array as Arr } from 'effect';\nimport type { Middleware } from '../core/types.js';\n\n// Middleware pipeline manager\nexport interface MiddlewareManager<T extends Record<string, unknown>> {\n\tadd: (middleware: Middleware<T>) => () => void;\n\tremove: (middleware: Middleware<T>) => void;\n\texecute: (state: T, action: string, args: unknown[]) => T;\n\tgetAll: () => readonly Middleware<T>[];\n}\n\n// Initialize middleware manager\nexport const createMiddlewareManager = <\n\tT extends Record<string, unknown>,\n>(): MiddlewareManager<T> => {\n\tconst middlewares: Middleware<T>[] = [];\n\n\treturn {\n\t\tadd: (middleware: Middleware<T>) => {\n\t\t\tmiddlewares.push(middleware);\n\t\t\treturn () => {\n\t\t\t\tconst idx = middlewares.indexOf(middleware);\n\t\t\t\tif (idx > -1) middlewares.splice(idx, 1);\n\t\t\t};\n\t\t},\n\n\t\tremove: (middleware: Middleware<T>) => {\n\t\t\tconst idx = middlewares.indexOf(middleware);\n\t\t\tif (idx > -1) middlewares.splice(idx, 1);\n\t\t},\n\n\t\texecute: (state: T, action: string, args: unknown[]): T =>\n\t\t\tArr.reduce(middlewares, state, (acc, mw) => mw(acc, action, args) ?? acc),\n\n\t\tgetAll: () => [...middlewares],\n\t};\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Data } from 'effect';\n\nexport class StoreNotFoundError extends Data.TaggedError('StoreNotFoundError')<{\n\treadonly name: string;\n}> {\n\tget message(): string {\n\t\treturn `Store \"${this.name}\" not found`;\n\t}\n}\n\nexport class StoreAlreadyExistsError extends Data.TaggedError(\n\t'StoreAlreadyExistsError'\n)<{\n\treadonly name: string;\n}> {\n\tget message(): string {\n\t\treturn `Store \"${this.name}\" already exists`;\n\t}\n}\n\nexport class ActionNotFoundError extends Data.TaggedError(\n\t'ActionNotFoundError'\n)<{\n\treadonly actionName: string;\n}> {}\n\nexport class TimeoutError extends Data.TaggedError('TimeoutError')<{\n\treadonly ms: number;\n}> {\n\tget message(): string {\n\t\treturn `Operation timed out after ${String(this.ms)}ms`;\n\t}\n}\n\nexport class CancellationError extends Data.TaggedError('CancellationError')<{\n\treadonly message: string;\n}> {}\n\nexport class ValidationError extends Data.TaggedError('ValidationError')<{\n\treadonly errors: string[];\n}> {\n\tget message(): string {\n\t\treturn `Validation failed: ${this.errors.join(', ')}`;\n\t}\n}\n\nexport class RaceEmptyError extends Data.TaggedError('RaceEmptyError')<object> {\n\tget message(): string {\n\t\treturn 'raceAll requires at least one effect';\n\t}\n}\n\nexport class HydrationError extends Data.TaggedError('HydrationError')<object> {\n\tget message(): string {\n\t\treturn 'Failed to hydrate stores';\n\t}\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nimport type { Store } from '../core/types.js';\nimport { getStoreConfig } from '../config/index.js';\nimport { StoreNotFoundError } from '../errors.js';\n\nconst stores = new Map<string, Store<unknown>>();\n\n// Register store instance\nexport const registerStore = <T>(name: string, store: Store<T>): void => {\n\tif (stores.has(name) && getStoreConfig().debug) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.warn(`[store] Overwriting existing store: ${name}`);\n\t}\n\tstores.set(name, store as Store<unknown>);\n};\n\n// Access registered store\nexport const getStore = <T>(name: string): Store<T> => {\n\tconst store = stores.get(name);\n\tif (!store) {\n\t\tthrow new StoreNotFoundError({ name });\n\t}\n\treturn store as Store<T>;\n};\n\n// Detect registered store\nexport const hasStore = (name: string): boolean => stores.has(name);\n\n// Remove registered store\nexport const removeStore = (name: string): boolean => stores.delete(name);\n\n// Reset store registry\nexport const clearStores = (): void => {\n\tstores.clear();\n};\n\n// Access store names\nexport const getStoreNames = (): string[] => Array.from(stores.keys());\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Effect, Option } from 'effect';\n\n// Storage engine interface\nexport interface StorageAdapter {\n\tgetItem: (key: string) => Effect.Effect<Option.Option<string>>;\n\tsetItem: (key: string, value: string) => Effect.Effect<void>;\n\tremoveItem: (key: string) => Effect.Effect<void>;\n}\n\n// Browser local storage adapter\nexport const localStorageAdapter: StorageAdapter = {\n\tgetItem: (key) =>\n\t\tEffect.try({\n\t\t\ttry: () => Option.fromNullable(localStorage.getItem(key)),\n\t\t\tcatch: () => Option.none<string>(),\n\t\t}).pipe(Effect.catchAll(() => Effect.succeed(Option.none<string>()))),\n\tsetItem: (key, value) =>\n\t\tEffect.try(() => {\n\t\t\tlocalStorage.setItem(key, value);\n\t\t}).pipe(Effect.catchAll(() => Effect.void)),\n\tremoveItem: (key) =>\n\t\tEffect.try(() => {\n\t\t\tlocalStorage.removeItem(key);\n\t\t}).pipe(Effect.catchAll(() => Effect.void)),\n};\n\n// Browser session storage adapter\nexport const sessionStorageAdapter: StorageAdapter = {\n\tgetItem: (key) =>\n\t\tEffect.try({\n\t\t\ttry: () => Option.fromNullable(sessionStorage.getItem(key)),\n\t\t\tcatch: () => Option.none<string>(),\n\t\t}).pipe(Effect.catchAll(() => Effect.succeed(Option.none<string>()))),\n\tsetItem: (key, value) =>\n\t\tEffect.try(() => {\n\t\t\tsessionStorage.setItem(key, value);\n\t\t}).pipe(Effect.catchAll(() => Effect.void)),\n\tremoveItem: (key) =>\n\t\tEffect.try(() => {\n\t\t\tsessionStorage.removeItem(key);\n\t\t}).pipe(Effect.catchAll(() => Effect.void)),\n};\n\n// Build in memory storage adapter\nexport const createMemoryAdapter = (): StorageAdapter => {\n\tconst storage = new Map<string, string>();\n\treturn {\n\t\tgetItem: (key) => Effect.succeed(Option.fromNullable(storage.get(key))),\n\t\tsetItem: (key, value) =>\n\t\t\tEffect.sync(() => {\n\t\t\t\tstorage.set(key, value);\n\t\t\t}),\n\t\tremoveItem: (key) =>\n\t\t\tEffect.sync(() => {\n\t\t\t\tstorage.delete(key);\n\t\t\t}),\n\t};\n};\n\n// Synchronous storage adapter bridge\nexport const runAdapter = {\n\tgetItem: (adapter: StorageAdapter, key: string): string | null =>\n\t\tEffect.runSync(\n\t\t\tadapter.getItem(key).pipe(Effect.map((opt) => Option.getOrNull(opt)))\n\t\t),\n\tsetItem: (adapter: StorageAdapter, key: string, value: string): void => {\n\t\tEffect.runSync(adapter.setItem(key, value));\n\t},\n\tremoveItem: (adapter: StorageAdapter, key: string): void => {\n\t\tEffect.runSync(adapter.removeItem(key));\n\t},\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Effect } from 'effect';\nimport { CancellationError } from '../errors.js';\n\n// Cancellation tracking token\nexport interface CancellationToken {\n\treadonly isCancelled: boolean;\n\tcancel: () => void;\n\tthrowIfCancelled: () => void;\n\tonCancel: (callback: () => void) => () => void;\n}\n\n// Build cancellation token\nexport const createCancellationToken = (): CancellationToken => {\n\tlet cancelled = false;\n\tconst callbacks = new Set<() => void>();\n\n\treturn {\n\t\tget isCancelled() {\n\t\t\treturn cancelled;\n\t\t},\n\t\tcancel: () => {\n\t\t\tif (!cancelled) {\n\t\t\t\tcancelled = true;\n\t\t\t\tfor (const cb of callbacks) cb();\n\t\t\t\tcallbacks.clear();\n\t\t\t}\n\t\t},\n\t\tthrowIfCancelled: () => {\n\t\t\tif (cancelled)\n\t\t\t\tthrow new CancellationError({ message: 'Operation was cancelled' });\n\t\t},\n\t\tonCancel: (callback: () => void) => {\n\t\t\tif (cancelled) {\n\t\t\t\tcallback();\n\t\t\t\treturn () => {};\n\t\t\t}\n\t\t\tcallbacks.add(callback);\n\t\t\treturn () => callbacks.delete(callback);\n\t\t},\n\t};\n};\n\n// Nested cancellation scope\nexport interface CancellationScope {\n\treadonly token: CancellationToken;\n\tcreateChild: () => CancellationToken;\n\tdispose: () => void;\n}\n\n// Build cancellation scope\nexport const createCancellationScope = (): CancellationScope => {\n\tconst children = new Set<CancellationToken>();\n\tconst token = createCancellationToken();\n\n\treturn {\n\t\ttoken,\n\t\tcreateChild: () => {\n\t\t\tconst child = createCancellationToken();\n\t\t\tchildren.add(child);\n\t\t\ttoken.onCancel(() => {\n\t\t\t\tchild.cancel();\n\t\t\t});\n\t\t\treturn child;\n\t\t},\n\t\tdispose: () => {\n\t\t\ttoken.cancel();\n\t\t\tfor (const child of children) child.cancel();\n\t\t\tchildren.clear();\n\t\t},\n\t};\n};\n\n// Connect external abort signal\nexport const runWithAbortSignal = <A, E>(\n\teffect: Effect.Effect<A, E>,\n\tsignal: AbortSignal\n): Effect.Effect<A, E | CancellationError> => {\n\tif (signal.aborted) {\n\t\treturn Effect.fail(\n\t\t\tnew CancellationError({ message: 'Operation was cancelled' }) as\n\t\t\t\t| E\n\t\t\t\t| CancellationError\n\t\t);\n\t}\n\n\treturn Effect.async<A, E | CancellationError>((resume) => {\n\t\tconst onAbort = () => {\n\t\t\tresume(\n\t\t\t\tEffect.fail(\n\t\t\t\t\tnew CancellationError({ message: 'Operation was cancelled' })\n\t\t\t\t)\n\t\t\t);\n\t\t};\n\n\t\tsignal.addEventListener('abort', onAbort, { once: true });\n\n\t\tEffect.runPromise(effect)\n\t\t\t.then((result) => {\n\t\t\t\tsignal.removeEventListener('abort', onAbort);\n\t\t\t\tresume(Effect.succeed(result));\n\t\t\t})\n\t\t\t.catch((error: unknown) => {\n\t\t\t\tsignal.removeEventListener('abort', onAbort);\n\t\t\t\tresume(Effect.fail(error as E));\n\t\t\t});\n\t});\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Effect, Option, pipe, Predicate } from 'effect';\nimport { signal, type Signal } from '@effuse/core';\nimport type {\n\tStore,\n\tStoreState,\n\tStoreDefinition,\n\tStoreOptions,\n\tMiddleware,\n} from './types.js';\nimport { createAtomicState } from './state.js';\nimport { getStoreConfig } from '../config/index.js';\nimport { createMiddlewareManager } from '../middleware/index.js';\nimport { registerStore } from '../registry/index.js';\nimport {\n\ttype StorageAdapter,\n\trunAdapter,\n\tlocalStorageAdapter,\n} from '../persistence/index.js';\nimport {\n\tcreateCancellationScope,\n\tcreateCancellationToken,\n\ttype CancellationScope,\n\ttype CancellationToken,\n} from '../actions/cancellation.js';\n\ninterface StoreInternals {\n\tsignalMap: Map<string, Signal<unknown>>;\n\tinitialState: Record<string, unknown>;\n\tactions: Record<string, (...args: unknown[]) => unknown>;\n\tsubscribers: Set<() => void>;\n\tkeySubscribers: Map<string, Set<(value: unknown) => void>>;\n\tcomputedSelectors: Map<\n\t\t(s: Record<string, unknown>) => unknown,\n\t\tSignal<unknown>\n\t>;\n\tisBatching: boolean;\n\tcancellationScope: CancellationScope;\n\tpendingActions: Map<string, CancellationToken>;\n}\n\nconst getSnapshot = (\n\tsignalMap: Map<string, Signal<unknown>>\n): Record<string, unknown> => {\n\tconst snapshot: Record<string, unknown> = {};\n\tfor (const [key, sig] of signalMap) {\n\t\tsnapshot[key] = sig.value;\n\t}\n\treturn snapshot;\n};\n\n// Store configuration options\nexport interface CreateStoreOptions extends StoreOptions {\n\tstorage?: StorageAdapter;\n}\n\n// Initialize reactive store\nexport const createStore = <T extends object>(\n\tname: string,\n\tdefinition: StoreDefinition<T>,\n\toptions?: CreateStoreOptions\n): Store<T> & StoreState<T> => {\n\tconst config = getStoreConfig();\n\tconst shouldPersist = pipe(\n\t\tOption.fromNullable(options),\n\t\tOption.flatMap((o) => Option.fromNullable(o.persist)),\n\t\tOption.getOrElse(() => config.persistByDefault)\n\t);\n\tconst storageKey = pipe(\n\t\tOption.fromNullable(options),\n\t\tOption.flatMap((o) => Option.fromNullable(o.storageKey)),\n\t\tOption.getOrElse(() => `${config.storagePrefix}${name}`)\n\t);\n\tconst enableDevtools = pipe(\n\t\tOption.fromNullable(options),\n\t\tOption.flatMap((o) => Option.fromNullable(o.devtools)),\n\t\tOption.getOrElse(() => config.debug)\n\t);\n\tconst adapter = pipe(\n\t\tOption.fromNullable(options),\n\t\tOption.flatMap((o) => Option.fromNullable(o.storage)),\n\t\tOption.getOrElse(() => localStorageAdapter)\n\t);\n\n\tif (config.debug) {\n\t\tconsole.log(`[store] Creating: ${name}`);\n\t}\n\n\tconst internals: StoreInternals = {\n\t\tsignalMap: new Map(),\n\t\tinitialState: {},\n\t\tactions: {},\n\t\tsubscribers: new Set(),\n\t\tkeySubscribers: new Map(),\n\t\tcomputedSelectors: new Map(),\n\t\tisBatching: false,\n\t\tcancellationScope: createCancellationScope(),\n\t\tpendingActions: new Map(),\n\t};\n\n\tconst middlewareManager = createMiddlewareManager<Record<string, unknown>>();\n\n\tfor (const [key, value] of Object.entries(definition)) {\n\t\tif (typeof value === 'function') {\n\t\t\tinternals.actions[key] = value as (...args: unknown[]) => unknown;\n\t\t} else {\n\t\t\tinternals.initialState[key] = value;\n\t\t\tinternals.signalMap.set(key, signal(value));\n\t\t}\n\t}\n\n\tconst atomicState = createAtomicState({ ...internals.initialState });\n\n\tif (shouldPersist) {\n\t\tpipe(\n\t\t\trunAdapter.getItem(adapter, storageKey),\n\t\t\tOption.fromNullable,\n\t\t\tOption.flatMap((saved) =>\n\t\t\t\tEffect.runSync(\n\t\t\t\t\tEffect.try(() => JSON.parse(saved) as Record<string, unknown>).pipe(\n\t\t\t\t\t\tEffect.map(Option.some),\n\t\t\t\t\t\tEffect.catchAll(() =>\n\t\t\t\t\t\t\tEffect.succeed(Option.none<Record<string, unknown>>())\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\tOption.map((parsed) => {\n\t\t\t\tfor (const [key, value] of Object.entries(parsed)) {\n\t\t\t\t\tconst sig = internals.signalMap.get(key);\n\t\t\t\t\tif (sig) sig.value = value;\n\t\t\t\t}\n\t\t\t\tatomicState.set({ ...atomicState.get(), ...parsed });\n\t\t\t})\n\t\t);\n\t}\n\n\tconst notifySubscribers = (): void => {\n\t\tif (internals.isBatching) return;\n\t\tfor (const callback of internals.subscribers) callback();\n\t};\n\n\tconst notifyKeySubscribers = (key: string, value: unknown): void => {\n\t\tif (internals.isBatching) return;\n\t\tconst subs = internals.keySubscribers.get(key);\n\t\tif (subs) for (const cb of subs) cb(value);\n\t};\n\n\tconst persistState = (): void => {\n\t\tif (!shouldPersist) return;\n\t\tconst snapshot = getSnapshot(internals.signalMap);\n\t\trunAdapter.setItem(adapter, storageKey, JSON.stringify(snapshot));\n\t};\n\n\tconst updateComputed = (): void => {\n\t\tconst snapshot = getSnapshot(internals.signalMap);\n\t\tfor (const [selector, sig] of internals.computedSelectors) {\n\t\t\tconst newValue = selector(snapshot);\n\t\t\tif (sig.value !== newValue) sig.value = newValue;\n\t\t}\n\t};\n\n\tconst stateProxy = new Proxy({} as Record<string, unknown>, {\n\t\tget(_, prop: string) {\n\t\t\tconst sig = internals.signalMap.get(prop);\n\t\t\tif (sig) return sig;\n\t\t\tconst action = internals.actions[prop];\n\t\t\tif (action) return action.bind(stateProxy);\n\t\t\treturn undefined;\n\t\t},\n\t\tset(_, prop: string, value: unknown) {\n\t\t\tif (!internals.signalMap.has(prop)) return false;\n\n\t\t\tconst sig = internals.signalMap.get(prop);\n\t\t\tif (!sig) return false;\n\t\t\tconst newState = middlewareManager.execute(\n\t\t\t\t{ ...atomicState.get(), [prop]: value },\n\t\t\t\t`set:${prop}`,\n\t\t\t\t[value]\n\t\t\t);\n\n\t\t\tsig.value = newState[prop];\n\t\t\tatomicState.update((s) => ({ ...s, [prop]: newState[prop] }));\n\n\t\t\tif (enableDevtools) {\n\t\t\t\tconst time = new Date().toLocaleTimeString();\n\t\t\t\tconsole.groupCollapsed(\n\t\t\t\t\t`%caction %c${name}/set:${prop} %c@ ${time}`,\n\t\t\t\t\t'color: gray; font-weight: lighter;',\n\t\t\t\t\t'color: inherit; font-weight: bold;',\n\t\t\t\t\t'color: gray; font-weight: lighter;'\n\t\t\t\t);\n\t\t\t\tconsole.log(\n\t\t\t\t\t'%cprev state',\n\t\t\t\t\t'color: #9E9E9E; font-weight: bold;',\n\t\t\t\t\tatomicState.get()\n\t\t\t\t);\n\t\t\t\tconsole.log('%caction', 'color: #03A9F4; font-weight: bold;', {\n\t\t\t\t\ttype: `set:${prop}`,\n\t\t\t\t\tpayload: value,\n\t\t\t\t});\n\t\t\t\tconsole.log('%cnext state', 'color: #4CAF50; font-weight: bold;', {\n\t\t\t\t\t...atomicState.get(),\n\t\t\t\t\t[prop]: newState[prop],\n\t\t\t\t});\n\t\t\t\tconsole.groupEnd();\n\t\t\t}\n\n\t\t\tnotifySubscribers();\n\t\t\tnotifyKeySubscribers(prop, newState[prop]);\n\t\t\tpersistState();\n\t\t\tupdateComputed();\n\t\t\treturn true;\n\t\t},\n\t});\n\n\tconst boundActions: Record<string, (...args: unknown[]) => unknown> = {};\n\tfor (const [key, action] of Object.entries(internals.actions)) {\n\t\tboundActions[key] = (...args: unknown[]) => {\n\t\t\tconst prevState = enableDevtools\n\t\t\t\t? getSnapshot(internals.signalMap)\n\t\t\t\t: undefined;\n\n\t\t\tconst existingToken = internals.pendingActions.get(key);\n\t\t\tif (existingToken) {\n\t\t\t\texistingToken.cancel();\n\t\t\t}\n\n\t\t\tconst result = action.apply(stateProxy, args);\n\n\t\t\tif (result instanceof Promise) {\n\t\t\t\tconst token = createCancellationToken();\n\t\t\t\tinternals.pendingActions.set(key, token);\n\n\t\t\t\treturn result\n\t\t\t\t\t.then((value: unknown) => {\n\t\t\t\t\t\tif (!token.isCancelled) {\n\t\t\t\t\t\t\tinternals.pendingActions.delete(key);\n\t\t\t\t\t\t\tconst currentState = getSnapshot(internals.signalMap);\n\t\t\t\t\t\t\tmiddlewareManager.execute(currentState, key, args);\n\n\t\t\t\t\t\t\tif (enableDevtools) {\n\t\t\t\t\t\t\t\tconst time = new Date().toLocaleTimeString();\n\t\t\t\t\t\t\t\tconsole.groupCollapsed(\n\t\t\t\t\t\t\t\t\t`%caction %c${name}/${key} (async) %c@ ${time}`,\n\t\t\t\t\t\t\t\t\t'color: gray; font-weight: lighter;',\n\t\t\t\t\t\t\t\t\t'color: inherit; font-weight: bold;',\n\t\t\t\t\t\t\t\t\t'color: gray; font-weight: lighter;'\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t\t'%cprev state',\n\t\t\t\t\t\t\t\t\t'color: #9E9E9E; font-weight: bold;',\n\t\t\t\t\t\t\t\t\tprevState\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tconsole.log('%caction', 'color: #03A9F4; font-weight: bold;', {\n\t\t\t\t\t\t\t\t\ttype: `${name}/${key}`,\n\t\t\t\t\t\t\t\t\tpayload: args,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t\t'%cnext state',\n\t\t\t\t\t\t\t\t\t'color: #4CAF50; font-weight: bold;',\n\t\t\t\t\t\t\t\t\tcurrentState\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tconsole.groupEnd();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tnotifySubscribers();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t})\n\t\t\t\t\t.catch((error: unknown) => {\n\t\t\t\t\t\tinternals.pendingActions.delete(key);\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst currentState = getSnapshot(internals.signalMap);\n\t\t\tmiddlewareManager.execute(currentState, key, args);\n\n\t\t\tif (enableDevtools) {\n\t\t\t\tconst time = new Date().toLocaleTimeString();\n\t\t\t\tconsole.groupCollapsed(\n\t\t\t\t\t`%caction %c${name}/${key} %c@ ${time}`,\n\t\t\t\t\t'color: gray; font-weight: lighter;',\n\t\t\t\t\t'color: inherit; font-weight: bold;',\n\t\t\t\t\t'color: gray; font-weight: lighter;'\n\t\t\t\t);\n\t\t\t\tconsole.log(\n\t\t\t\t\t'%cprev state',\n\t\t\t\t\t'color: #9E9E9E; font-weight: bold;',\n\t\t\t\t\tprevState\n\t\t\t\t);\n\t\t\t\tconsole.log('%caction', 'color: #03A9F4; font-weight: bold;', {\n\t\t\t\t\ttype: `${name}/${key}`,\n\t\t\t\t\tpayload: args,\n\t\t\t\t});\n\t\t\t\tconsole.log(\n\t\t\t\t\t'%cnext state',\n\t\t\t\t\t'color: #4CAF50; font-weight: bold;',\n\t\t\t\t\tcurrentState\n\t\t\t\t);\n\t\t\t\tconsole.groupEnd();\n\t\t\t}\n\n\t\t\tnotifySubscribers();\n\n\t\t\treturn result;\n\t\t};\n\t}\n\n\tconst storeState: Record<string, unknown> = {};\n\tfor (const [key, sig] of internals.signalMap) storeState[key] = sig;\n\tfor (const [key, action] of Object.entries(boundActions))\n\t\tstoreState[key] = action;\n\n\tconst store: Store<T> = {\n\t\tname,\n\t\tstate: storeState as StoreState<T>,\n\n\t\tsubscribe: (callback) => {\n\t\t\tinternals.subscribers.add(callback);\n\t\t\treturn () => {\n\t\t\t\tinternals.subscribers.delete(callback);\n\t\t\t};\n\t\t},\n\n\t\tsubscribeToKey: (key, callback) => {\n\t\t\tconst keyStr = String(key);\n\t\t\tlet subs = internals.keySubscribers.get(keyStr);\n\t\t\tif (!subs) {\n\t\t\t\tsubs = new Set();\n\t\t\t\tinternals.keySubscribers.set(keyStr, subs);\n\t\t\t}\n\t\t\tconst typedCallback = callback as (value: unknown) => void;\n\t\t\tsubs.add(typedCallback);\n\t\t\treturn () => {\n\t\t\t\tconst subsSet = internals.keySubscribers.get(keyStr);\n\t\t\t\tif (Predicate.isNotNullable(subsSet)) {\n\t\t\t\t\tsubsSet.delete(typedCallback);\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\tgetSnapshot: () =>\n\t\t\tgetSnapshot(internals.signalMap) as ReturnType<Store<T>['getSnapshot']>,\n\n\t\tcomputed: <R>(\n\t\t\tselector: (snapshot: Record<string, unknown>) => R\n\t\t): Signal<R> => {\n\t\t\tconst selectorKey = selector as (s: Record<string, unknown>) => unknown;\n\t\t\tconst existing = internals.computedSelectors.get(selectorKey);\n\t\t\tif (existing) return existing as Signal<R>;\n\n\t\t\tconst initial = selector(getSnapshot(internals.signalMap));\n\t\t\tconst sig = signal<R>(initial);\n\t\t\tinternals.computedSelectors.set(selectorKey, sig as Signal<unknown>);\n\t\t\treturn sig;\n\t\t},\n\n\t\tbatch: (updates) => {\n\t\t\tinternals.isBatching = true;\n\t\t\tupdates();\n\t\t\tinternals.isBatching = false;\n\t\t\tnotifySubscribers();\n\t\t\tpersistState();\n\t\t\tupdateComputed();\n\t\t},\n\n\t\treset: () => {\n\t\t\tfor (const [key, value] of Object.entries(internals.initialState)) {\n\t\t\t\tconst sig = internals.signalMap.get(key);\n\t\t\t\tif (sig) sig.value = value;\n\t\t\t}\n\t\t\tatomicState.set({ ...internals.initialState });\n\t\t\tnotifySubscribers();\n\t\t\tpersistState();\n\t\t\tupdateComputed();\n\t\t},\n\n\t\tuse: (middleware: Middleware<Record<string, unknown>>) =>\n\t\t\tmiddlewareManager.add(middleware),\n\n\t\ttoJSON: () =>\n\t\t\tgetSnapshot(internals.signalMap) as ReturnType<Store<T>['getSnapshot']>,\n\n\t\tupdate: (updater) => {\n\t\t\tconst draft = { ...getSnapshot(internals.signalMap) } as {\n\t\t\t\t[K in keyof T]: T[K] extends (...args: unknown[]) => unknown\n\t\t\t\t\t? never\n\t\t\t\t\t: T[K];\n\t\t\t};\n\n\t\t\tupdater(draft);\n\n\t\t\tinternals.isBatching = true;\n\t\t\tfor (const [key, val] of Object.entries(draft)) {\n\t\t\t\tconst sig = internals.signalMap.get(key);\n\t\t\t\tif (sig && sig.value !== val) {\n\t\t\t\t\tsig.value = val;\n\t\t\t\t\tatomicState.update((s) => ({ ...s, [key]: val }));\n\t\t\t\t}\n\t\t\t}\n\t\t\tinternals.isBatching = false;\n\n\t\t\tnotifySubscribers();\n\t\t\tpersistState();\n\t\t\tupdateComputed();\n\t\t},\n\n\t\tselect: <R>(\n\t\t\tselector: (snapshot: Record<string, unknown>) => R\n\t\t): Signal<R> => {\n\t\t\tconst selectorKey = selector as (s: Record<string, unknown>) => unknown;\n\t\t\tconst existing = internals.computedSelectors.get(selectorKey);\n\t\t\tif (existing) return existing as Signal<R>;\n\n\t\t\tconst initial = selector(getSnapshot(internals.signalMap));\n\t\t\tconst sig = signal<R>(initial);\n\t\t\tinternals.computedSelectors.set(selectorKey, sig as Signal<unknown>);\n\n\t\t\tinternals.subscribers.add(() => {\n\t\t\t\tconst newValue = selector(getSnapshot(internals.signalMap));\n\t\t\t\tif (sig.value !== newValue) sig.value = newValue;\n\t\t\t});\n\n\t\t\treturn sig;\n\t\t},\n\t};\n\n\tconst storeProxy = new Proxy(store as unknown as Record<string, unknown>, {\n\t\tget(target, prop: string | symbol): unknown {\n\t\t\tconst propStr = String(prop);\n\t\t\tif (propStr === 'toJSON') return () => getSnapshot(internals.signalMap);\n\t\t\tif (propStr in target) return target[propStr];\n\t\t\tconst sig = internals.signalMap.get(propStr);\n\t\t\tif (sig) return sig;\n\t\t\tif (propStr in boundActions) return boundActions[propStr];\n\t\t\treturn undefined;\n\t\t},\n\t}) as Store<T> & StoreState<T>;\n\n\tregisterStore(name, storeProxy);\n\treturn storeProxy;\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type { Store } from '../core/types.js';\n\n// Scope identifier\nexport type ScopeId = string;\n\n// Scope tree node\nexport interface ScopeNode {\n\tid: ScopeId;\n\tparent: ScopeNode | null;\n\tstores: Map<string, Store<unknown>>;\n}\n\nconst ROOT_SCOPE: ScopeNode = {\n\tid: '__root__',\n\tparent: null,\n\tstores: new Map(),\n};\n\nlet currentScope: ScopeNode = ROOT_SCOPE;\nconst scopeRegistry = new Map<ScopeId, ScopeNode>([\n\t[ROOT_SCOPE.id, ROOT_SCOPE],\n]);\nlet scopeCounter = 0;\n\n// Initialize child scope\nexport const createScope = (parentScope?: ScopeNode): ScopeNode => {\n\tscopeCounter++;\n\tconst id = `scope_${String(scopeCounter)}`;\n\tconst node: ScopeNode = {\n\t\tid,\n\t\tparent: parentScope ?? currentScope,\n\t\tstores: new Map(),\n\t};\n\tscopeRegistry.set(id, node);\n\treturn node;\n};\n\n// Dispose scope\nexport const disposeScope = (scope: ScopeNode): void => {\n\tscope.stores.clear();\n\tscopeRegistry.delete(scope.id);\n};\n\n// Activate scope\nexport const enterScope = (scope: ScopeNode): void => {\n\tcurrentScope = scope;\n};\n\n// Exit active scope\nexport const exitScope = (): void => {\n\tif (currentScope.parent) {\n\t\tcurrentScope = currentScope.parent;\n\t}\n};\n\n// Current scope access\nexport const getCurrentScope = (): ScopeNode => currentScope;\n\n// Root scope access\nexport const getRootScope = (): ScopeNode => ROOT_SCOPE;\n\n// Register store in scope\nexport const registerScopedStore = <T>(\n\tname: string,\n\tstore: Store<T>,\n\tscope: ScopeNode = currentScope\n): void => {\n\tscope.stores.set(name, store as Store<unknown>);\n};\n\n// Find store in scope hierarchy\nexport const getScopedStore = <T>(\n\tname: string,\n\tscope: ScopeNode = currentScope\n): Store<T> | null => {\n\tlet current: ScopeNode | null = scope;\n\twhile (current) {\n\t\tconst store = current.stores.get(name);\n\t\tif (store) return store as Store<T>;\n\t\tcurrent = current.parent;\n\t}\n\treturn null;\n};\n\n// Scope store detection\nexport const hasScopedStore = (\n\tname: string,\n\tscope: ScopeNode = currentScope\n): boolean => {\n\treturn getScopedStore(name, scope) !== null;\n};\n\n// Execute in scope\nexport const runInScope = <R>(scope: ScopeNode, fn: () => R): R => {\n\tconst prev = currentScope;\n\tcurrentScope = scope;\n\ttry {\n\t\treturn fn();\n\t} finally {\n\t\tcurrentScope = prev;\n\t}\n};\n\n// Execute in transient scope\nexport const withScope = <R>(fn: (scope: ScopeNode) => R): R => {\n\tconst scope = createScope();\n\ttry {\n\t\treturn runInScope(scope, () => fn(scope));\n\t} finally {\n\t\tdisposeScope(scope);\n\t}\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Effect, Duration, Schedule } from 'effect';\nimport type { Store } from '../core/types.js';\nimport { createCancellationToken } from './cancellation.js';\nimport { runWithAbortSignal } from './cancellation.js';\nimport {\n\tDEFAULT_RETRY_INITIAL_DELAY_MS,\n\tDEFAULT_RETRY_MAX_DELAY_MS,\n\tDEFAULT_RETRY_BACKOFF_FACTOR,\n} from '../config/constants.js';\nimport {\n\tActionNotFoundError,\n\tCancellationError,\n\tTimeoutError,\n} from '../errors.js';\n\n// Asynchronous operation outcome\nexport interface ActionResult<T> {\n\tdata: T | null;\n\terror: Error | null;\n\tloading: boolean;\n}\n\n// Asynchronous action with pending state\nexport interface AsyncAction<A extends unknown[], R> {\n\t(...args: A): Promise<R>;\n\tpending: boolean;\n}\n\n// Cancellable asynchronous action\nexport interface CancellableAction<A extends unknown[], R> {\n\t(...args: A): Promise<R>;\n\tpending: boolean;\n\tcancel: () => void;\n}\n\ntype ActionFn<A extends unknown[], R> = (...args: A) => Promise<R> | R;\n\n// Build asynchronous action\nexport const createAsyncAction = <A extends unknown[], R>(\n\tfn: ActionFn<A, R>\n): AsyncAction<A, R> => {\n\tlet pending = false;\n\n\tconst action = async (...args: A): Promise<R> => {\n\t\tpending = true;\n\t\tconst result = await Effect.runPromise(\n\t\t\tEffect.tryPromise({\n\t\t\t\ttry: async () => fn(...args),\n\t\t\t\tcatch: (error) => error as Error,\n\t\t\t}).pipe(\n\t\t\t\tEffect.tapBoth({\n\t\t\t\t\tonSuccess: () =>\n\t\t\t\t\t\tEffect.sync(() => {\n\t\t\t\t\t\t\tpending = false;\n\t\t\t\t\t\t}),\n\t\t\t\t\tonFailure: () =>\n\t\t\t\t\t\tEffect.sync(() => {\n\t\t\t\t\t\t\tpending = false;\n\t\t\t\t\t\t}),\n\t\t\t\t})\n\t\t\t)\n\t\t);\n\t\treturn result;\n\t};\n\n\tObject.defineProperty(action, 'pending', {\n\t\tget: () => pending,\n\t\tenumerable: true,\n\t});\n\n\treturn action as AsyncAction<A, R>;\n};\n\n// Build cancellable asynchronous action\nexport const createCancellableAction = <A extends unknown[], R>(\n\tfn: ActionFn<A, R>\n): CancellableAction<A, R> => {\n\tlet pending = false;\n\tlet currentController: AbortController | null = null;\n\n\tconst action = async (...args: A): Promise<R> => {\n\t\tif (currentController) {\n\t\t\tcurrentController.abort();\n\t\t}\n\n\t\tcurrentController = new AbortController();\n\t\tconst signal = currentController.signal;\n\t\tpending = true;\n\n\t\ttry {\n\t\t\tconst effect = Effect.tryPromise({\n\t\t\t\ttry: async () => fn(...args),\n\t\t\t\tcatch: (error) => error as Error,\n\t\t\t});\n\t\t\tconst result = await Effect.runPromise(\n\t\t\t\trunWithAbortSignal(effect, signal)\n\t\t\t);\n\t\t\treturn result;\n\t\t} finally {\n\t\t\tpending = false;\n\t\t\tcurrentController = null;\n\t\t}\n\t};\n\n\tObject.defineProperty(action, 'pending', {\n\t\tget: () => pending,\n\t\tenumerable: true,\n\t});\n\n\tObject.defineProperty(action, 'cancel', {\n\t\tvalue: () => {\n\t\t\tif (currentController) {\n\t\t\t\tcurrentController.abort();\n\t\t\t\tcurrentController = null;\n\t\t\t\tpending = false;\n\t\t\t}\n\t\t},\n\t\tenumerable: true,\n\t});\n\n\treturn action as CancellableAction<A, R>;\n};\n\n// Enforce operation timeout\nexport const withTimeout = <A extends unknown[], R>(\n\tfn: ActionFn<A, R>,\n\ttimeoutMs: number\n): ((...args: A) => Promise<R>) => {\n\treturn async (...args: A): Promise<R> => {\n\t\tconst effect = Effect.tryPromise({\n\t\t\ttry: async () => fn(...args),\n\t\t\tcatch: (error) => error as Error,\n\t\t}).pipe(\n\t\t\tEffect.timeoutFail({\n\t\t\t\tduration: Duration.millis(timeoutMs),\n\t\t\t\tonTimeout: () => new TimeoutError({ ms: timeoutMs }),\n\t\t\t})\n\t\t);\n\n\t\treturn Effect.runPromise(effect);\n\t};\n};\n\n// Retry configuration\nexport interface RetryConfig {\n\tmaxRetries: number;\n\tinitialDelayMs?: number;\n\tmaxDelayMs?: number;\n\tbackoffFactor?: number;\n}\n\n// Retry on failure\nexport const withRetry = <A extends unknown[], R>(\n\tfn: ActionFn<A, R>,\n\tconfig: RetryConfig\n): ((...args: A) => Promise<R>) => {\n\tconst {\n\t\tmaxRetries,\n\t\tinitialDelayMs = DEFAULT_RETRY_INITIAL_DELAY_MS,\n\t\tmaxDelayMs = DEFAULT_RETRY_MAX_DELAY_MS,\n\t\tbackoffFactor = DEFAULT_RETRY_BACKOFF_FACTOR,\n\t} = config;\n\n\treturn async (...args: A): Promise<R> => {\n\t\tconst schedule = Schedule.exponential(\n\t\t\tDuration.millis(initialDelayMs),\n\t\t\tbackoffFactor\n\t\t).pipe(\n\t\t\tSchedule.either(Schedule.recurs(maxRetries)),\n\t\t\tSchedule.upTo(Duration.millis(maxDelayMs))\n\t\t);\n\n\t\tconst effect = Effect.tryPromise({\n\t\t\ttry: async () => fn(...args),\n\t\t\tcatch: (error) => error as Error,\n\t\t}).pipe(Effect.retry(schedule));\n\n\t\treturn Effect.runPromise(effect);\n\t};\n};\n\n// Execute only latest call\nexport const takeLatest = <A extends unknown[], R>(\n\tfn: ActionFn<A, R>\n): CancellableAction<A, R> => {\n\tlet pending = false;\n\tlet currentToken = createCancellationToken();\n\tlet callId = 0;\n\n\tconst action = async (...args: A): Promise<R> => {\n\t\tcurrentToken.cancel();\n\t\tcurrentToken = createCancellationToken();\n\t\tconst myToken = currentToken;\n\t\tconst myCallId = ++callId;\n\n\t\tpending = true;\n\n\t\ttry {\n\t\t\tconst result = await fn(...args);\n\n\t\t\tif (myToken.isCancelled || myCallId !== callId) {\n\t\t\t\tthrow new CancellationError({ message: 'Superseded by newer call' });\n\t\t\t}\n\n\t\t\treturn result;\n\t\t} finally {\n\t\t\tif (myCallId === callId) {\n\t\t\t\tpending = false;\n\t\t\t}\n\t\t}\n\t};\n\n\tObject.defineProperty(action, 'pending', {\n\t\tget: () => pending,\n\t\tenumerable: true,\n\t});\n\n\tObject.defineProperty(action, 'cancel', {\n\t\tvalue: () => {\n\t\t\tcurrentToken.cancel();\n\t\t\tpending = false;\n\t\t},\n\t\tenumerable: true,\n\t});\n\n\treturn action as CancellableAction<A, R>;\n};\n\n// Execute only first call\nexport const takeFirst = <A extends unknown[], R>(\n\tfn: ActionFn<A, R>\n): AsyncAction<A, R | undefined> => {\n\tlet pending = false;\n\n\tconst action = async (...args: A): Promise<R | undefined> => {\n\t\tif (pending) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tpending = true;\n\t\ttry {\n\t\t\treturn await fn(...args);\n\t\t} finally {\n\t\t\tpending = false;\n\t\t}\n\t};\n\n\tObject.defineProperty(action, 'pending', {\n\t\tget: () => pending,\n\t\tenumerable: true,\n\t});\n\n\treturn action as AsyncAction<A, R | undefined>;\n};\n\n// Debounce action execution\nexport const debounceAction = <A extends unknown[], R>(\n\tfn: ActionFn<A, R>,\n\tdelayMs: number\n): ((...args: A) => Promise<R>) => {\n\tlet timeout: ReturnType<typeof setTimeout> | null = null;\n\tlet currentToken = createCancellationToken();\n\n\treturn (...args: A): Promise<R> => {\n\t\tif (timeout) {\n\t\t\tclearTimeout(timeout);\n\t\t\tcurrentToken.cancel();\n\t\t}\n\n\t\tcurrentToken = createCancellationToken();\n\t\tconst myToken = currentToken;\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\ttimeout = setTimeout(() => {\n\t\t\t\tif (myToken.isCancelled) return;\n\n\t\t\t\tPromise.resolve(fn(...args))\n\t\t\t\t\t.then((result) => {\n\t\t\t\t\t\tif (!myToken.isCancelled) resolve(result);\n\t\t\t\t\t})\n\t\t\t\t\t.catch((error: unknown) => {\n\t\t\t\t\t\tif (!myToken.isCancelled) reject(error as Error);\n\t\t\t\t\t});\n\t\t\t}, delayMs);\n\t\t});\n\t};\n};\n\n// Throttle action execution\nexport const throttleAction = <A extends unknown[], R>(\n\tfn: ActionFn<A, R>,\n\tintervalMs: number\n): ((...args: A) => Promise<R | undefined>) => {\n\tlet lastCallTime = 0;\n\tlet pending = false;\n\n\treturn async (...args: A): Promise<R | undefined> => {\n\t\tconst now = Date.now();\n\t\tif (now - lastCallTime < intervalMs || pending) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tlastCallTime = now;\n\t\tpending = true;\n\n\t\ttry {\n\t\t\treturn await fn(...args);\n\t\t} finally {\n\t\t\tpending = false;\n\t\t}\n\t};\n};\n\n// Dispatch store action asynchronously\nexport const dispatch = <T>(\n\tstore: Store<T>,\n\tactionName: keyof T,\n\t...args: unknown[]\n): Promise<unknown> => {\n\tconst storeRecord = store as unknown as Record<string, unknown>;\n\tconst action = storeRecord[actionName as string];\n\tif (typeof action !== 'function') {\n\t\treturn Promise.reject(\n\t\t\tnew ActionNotFoundError({ actionName: String(actionName) })\n\t\t);\n\t}\n\tconst actionFn = action as (...a: unknown[]) => unknown;\n\treturn Effect.runPromise(\n\t\tEffect.tryPromise({\n\t\t\ttry: () => Promise.resolve(actionFn(...args)),\n\t\t\tcatch: (error) => error as Error,\n\t\t})\n\t);\n};\n\n// Dispatch store action synchronously\nexport const dispatchSync = <T>(\n\tstore: Store<T>,\n\tactionName: keyof T,\n\t...args: unknown[]\n): unknown => {\n\tconst storeRecord = store as unknown as Record<string, unknown>;\n\tconst action = storeRecord[actionName as string];\n\tif (typeof action !== 'function') {\n\t\tthrow new ActionNotFoundError({ actionName: String(actionName) });\n\t}\n\tconst actionFn = action as (...a: unknown[]) => unknown;\n\treturn actionFn(...args);\n};\n\n// Attach external abort signal\nexport const withAbortSignal = <A extends unknown[], R>(\n\tfn: ActionFn<A, R>\n): ((signal: AbortSignal, ...args: A) => Promise<R>) => {\n\treturn (signal: AbortSignal, ...args: A): Promise<R> => {\n\t\tconst effect = Effect.tryPromise({\n\t\t\ttry: async () => fn(...args),\n\t\t\tcatch: (error) => error as Error,\n\t\t});\n\t\treturn Effect.runPromise(runWithAbortSignal(effect, signal));\n\t};\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Effect, Schema, Duration, Predicate } from 'effect';\nimport { TimeoutError } from '../errors.js';\nimport { DEFAULT_TIMEOUT_MS } from '../config/constants.js';\n\n// State validation schema type\nexport type StateSchema<T> = Schema.Schema<T, T>;\n\n// Validation check result\nexport interface ValidationResult<T> {\n\tsuccess: boolean;\n\tdata: T | null;\n\terrors: string[];\n}\n\n// Validate state synchronously\nexport const validateState = <T>(\n\tschema: StateSchema<T>,\n\tstate: unknown\n): ValidationResult<T> => {\n\tconst result = Effect.runSync(\n\t\tSchema.decodeUnknown(schema)(state).pipe(\n\t\t\tEffect.map((data) => ({\n\t\t\t\tsuccess: true as const,\n\t\t\t\tdata,\n\t\t\t\terrors: [] as string[],\n\t\t\t})),\n\t\t\tEffect.catchAll((error) =>\n\t\t\t\tEffect.succeed({\n\t\t\t\t\tsuccess: false as const,\n\t\t\t\t\tdata: null,\n\t\t\t\t\terrors: [String(error)],\n\t\t\t\t})\n\t\t\t)\n\t\t)\n\t);\n\treturn result;\n};\n\n// Validate state asynchronously\nexport const validateStateAsync = <T>(\n\tschema: StateSchema<T>,\n\tstate: unknown,\n\ttimeoutMs = DEFAULT_TIMEOUT_MS\n): Promise<ValidationResult<T>> => {\n\treturn Effect.runPromise(\n\t\tSchema.decodeUnknown(schema)(state).pipe(\n\t\t\tEffect.map((data) => ({\n\t\t\t\tsuccess: true as const,\n\t\t\t\tdata,\n\t\t\t\terrors: [] as string[],\n\t\t\t})),\n\t\t\tEffect.timeoutFail({\n\t\t\t\tduration: Duration.millis(timeoutMs),\n\t\t\t\tonTimeout: () => new TimeoutError({ ms: timeoutMs }),\n\t\t\t}),\n\t\t\tEffect.catchAll((error) =>\n\t\t\t\tEffect.succeed({\n\t\t\t\t\tsuccess: false as const,\n\t\t\t\t\tdata: null,\n\t\t\t\t\terrors: [\n\t\t\t\t\t\terror instanceof TimeoutError\n\t\t\t\t\t\t\t? `Validation timed out after ${String(timeoutMs)}ms`\n\t\t\t\t\t\t\t: String(error),\n\t\t\t\t\t],\n\t\t\t\t})\n\t\t\t)\n\t\t)\n\t);\n};\n\n// Build validated state setter\nexport const createValidatedSetter = <T extends Record<string, unknown>>(\n\tschema: StateSchema<T>,\n\tonValid: (state: T) => void,\n\tonInvalid?: (errors: string[]) => void\n): ((state: unknown) => boolean) => {\n\treturn (state: unknown): boolean => {\n\t\tconst result = validateState(schema, state);\n\t\tif (result.success && result.data) {\n\t\t\tonValid(result.data);\n\t\t\treturn true;\n\t\t}\n\t\tif (Predicate.isNotNullable(onInvalid)) {\n\t\t\tonInvalid(result.errors);\n\t\t}\n\t\treturn false;\n\t};\n};\n\n// Build field validator\nexport const createFieldValidator = <T>(\n\tschema: Schema.Schema<T, T>\n): ((value: unknown) => T) => {\n\treturn (value: unknown): T => {\n\t\treturn Effect.runSync(Schema.decodeUnknown(schema)(value));\n\t};\n};\n\n// Build safe field setter\nexport const createSafeFieldSetter = <T>(\n\tschema: Schema.Schema<T, T>,\n\tsetter: (value: T) => void\n): ((value: unknown) => boolean) => {\n\treturn (value: unknown): boolean => {\n\t\tconst result = Effect.runSync(\n\t\t\tSchema.decodeUnknown(schema)(value).pipe(\n\t\t\t\tEffect.map((decoded) => {\n\t\t\t\t\tsetter(decoded);\n\t\t\t\t\treturn true;\n\t\t\t\t}),\n\t\t\t\tEffect.catchAll(() => Effect.succeed(false))\n\t\t\t)\n\t\t);\n\t\treturn result;\n\t};\n};\n\nexport { Schema };\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { signal, type Signal } from '@effuse/core';\nimport type { Store, StoreDefinition } from '../core/types.js';\nimport { createStore as createStoreImpl } from '../core/store.js';\nimport {\n\tcreateCancellationToken,\n\ttype CancellationToken,\n} from '../actions/cancellation.js';\n\n// Composed store container\nexport interface ComposedStore<T, D extends readonly Store<unknown>[]> {\n\tstore: Store<T>;\n\tdependencies: D;\n\tcomputed: <R>(\n\t\tselector: (\n\t\t\tstate: T,\n\t\t\tdeps: { [K in keyof D]: ReturnType<D[K]['getSnapshot']> }\n\t\t) => R\n\t) => Signal<R>;\n\tcomputedAsync: <R>(\n\t\tasyncSelector: (\n\t\t\tstate: T,\n\t\t\tdeps: { [K in keyof D]: ReturnType<D[K]['getSnapshot']> },\n\t\t\ttoken: CancellationToken\n\t\t) => Promise<R>,\n\t\tinitialValue: R\n\t) => Signal<R> & { pending: Signal<boolean>; cleanup: () => void };\n}\n\n// Compose stores with dependencies\nexport const composeStores = <T, D extends readonly Store<unknown>[]>(\n\tmainStore: Store<T>,\n\tdependencies: D\n): ComposedStore<T, D> => {\n\tconst getDependencySnapshots = (): {\n\t\t[K in keyof D]: ReturnType<D[K]['getSnapshot']>;\n\t} => {\n\t\treturn dependencies.map((dep) => dep.getSnapshot()) as {\n\t\t\t[K in keyof D]: ReturnType<D[K]['getSnapshot']>;\n\t\t};\n\t};\n\n\treturn {\n\t\tstore: mainStore,\n\t\tdependencies,\n\t\tcomputed: <R>(\n\t\t\tselector: (\n\t\t\t\tstate: T,\n\t\t\t\tdeps: { [K in keyof D]: ReturnType<D[K]['getSnapshot']> }\n\t\t\t) => R\n\t\t): Signal<R> => {\n\t\t\tconst mainSnapshot = mainStore.getSnapshot() as T;\n\t\t\tconst depSnapshots = getDependencySnapshots();\n\t\t\tconst initialValue = selector(mainSnapshot, depSnapshots);\n\t\t\tconst derived = signal<R>(initialValue);\n\n\t\t\tconst update = () => {\n\t\t\t\tconst mainState = mainStore.getSnapshot() as T;\n\t\t\t\tconst depStates = getDependencySnapshots();\n\t\t\t\tconst newValue = selector(mainState, depStates);\n\t\t\t\tif (derived.value !== newValue) {\n\t\t\t\t\tderived.value = newValue;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tmainStore.subscribe(update);\n\t\t\tfor (const dep of dependencies) {\n\t\t\t\tdep.subscribe(update);\n\t\t\t}\n\n\t\t\treturn derived;\n\t\t},\n\t\tcomputedAsync: <R>(\n\t\t\tasyncSelector: (\n\t\t\t\tstate: T,\n\t\t\t\tdeps: { [K in keyof D]: ReturnType<D[K]['getSnapshot']> },\n\t\t\t\ttoken: CancellationToken\n\t\t\t) => Promise<R>,\n\t\t\tinitialValue: R\n\t\t): Signal<R> & { pending: Signal<boolean>; cleanup: () => void } => {\n\t\t\tconst derived = signal<R>(initialValue);\n\t\t\tconst pending = signal<boolean>(false);\n\t\t\tlet currentToken = createCancellationToken();\n\t\t\tconst unsubscribers: (() => void)[] = [];\n\n\t\t\tconst update = () => {\n\t\t\t\tcurrentToken.cancel();\n\t\t\t\tcurrentToken = createCancellationToken();\n\t\t\t\tconst myToken = currentToken;\n\t\t\t\tpending.value = true;\n\n\t\t\t\tconst mainState = mainStore.getSnapshot() as T;\n\t\t\t\tconst depStates = getDependencySnapshots();\n\n\t\t\t\tasyncSelector(mainState, depStates, myToken)\n\t\t\t\t\t.then((newValue) => {\n\t\t\t\t\t\tif (!myToken.isCancelled && derived.value !== newValue) {\n\t\t\t\t\t\t\tderived.value = newValue;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch(() => {})\n\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\tif (!myToken.isCancelled) {\n\t\t\t\t\t\t\tpending.value = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t};\n\n\t\t\tunsubscribers.push(mainStore.subscribe(update));\n\t\t\tfor (const dep of dependencies) {\n\t\t\t\tunsubscribers.push(dep.subscribe(update));\n\t\t\t}\n\t\t\tupdate();\n\n\t\t\tconst result = derived as Signal<R> & {\n\t\t\t\tpending: Signal<boolean>;\n\t\t\t\tcleanup: () => void;\n\t\t\t};\n\t\t\tresult.pending = pending;\n\t\t\tresult.cleanup = () => {\n\t\t\t\tcurrentToken.cancel();\n\t\t\t\tfor (const unsub of unsubscribers) unsub();\n\t\t\t};\n\n\t\t\treturn result;\n\t\t},\n\t};\n};\n\n// Store slice definition\nexport interface StoreSlice<T extends object, P extends object> {\n\tcreate: (parent: Store<P>) => Store<T>;\n}\n\n// Define reusable store slice\nexport const defineSlice = <T extends object, P extends object>(\n\tname: string,\n\tfactory: (parent: Store<P>) => StoreDefinition<T>\n): StoreSlice<T, P> => {\n\treturn {\n\t\tcreate: (parent: Store<P>): Store<T> => {\n\t\t\tconst definition = factory(parent);\n\t\t\treturn createStoreImpl<T>(name, definition);\n\t\t},\n\t};\n};\n\n// Merge multiple stores\nexport const mergeStores = <A, B>(\n\tstoreA: Store<A>,\n\tstoreB: Store<B>\n): {\n\tgetSnapshot: () => ReturnType<Store<A>['getSnapshot']> &\n\t\tReturnType<Store<B>['getSnapshot']>;\n\tsubscribe: (callback: () => void) => () => void;\n} => {\n\treturn {\n\t\tgetSnapshot: () => ({\n\t\t\t...storeA.getSnapshot(),\n\t\t\t...storeB.getSnapshot(),\n\t\t}),\n\t\tsubscribe: (callback: () => void) => {\n\t\t\tconst unsubA = storeA.subscribe(callback);\n\t\t\tconst unsubB = storeB.subscribe(callback);\n\t\t\treturn () => {\n\t\t\t\tunsubA();\n\t\t\t\tunsubB();\n\t\t\t};\n\t\t},\n\t};\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Effect, Option } from 'effect';\nimport { signal, type Signal } from '@effuse/core';\nimport type { Store } from '../core/types.js';\nimport { getStoreNames, getStore } from '../registry/index.js';\nimport {\n\tcreateCancellationToken,\n\ttype CancellationToken,\n} from '../actions/cancellation.js';\nimport { HydrationError } from '../errors.js';\n\n// Build derived reactive signal\nexport const deriveFrom = <S extends Store<unknown>[], R>(\n\tstores: [...S],\n\tselector: (\n\t\t...snapshots: { [K in keyof S]: ReturnType<S[K]['getSnapshot']> }\n\t) => R\n): Signal<R> & { cleanup: () => void } => {\n\tconst getSnapshots = () =>\n\t\tstores.map((s) => s.getSnapshot()) as {\n\t\t\t[K in keyof S]: ReturnType<S[K]['getSnapshot']>;\n\t\t};\n\n\tconst initialValue = selector(...getSnapshots());\n\tconst derivedSignal = signal<R>(initialValue);\n\n\tconst update = () => {\n\t\tconst newValue = selector(...getSnapshots());\n\t\tif (derivedSignal.value !== newValue) {\n\t\t\tderivedSignal.value = newValue;\n\t\t}\n\t};\n\n\tconst unsubscribers = stores.map((store) => store.subscribe(update));\n\n\tconst signalWithCleanup = derivedSignal as Signal<R> & {\n\t\tcleanup: () => void;\n\t};\n\tsignalWithCleanup.cleanup = () => {\n\t\tfor (const unsub of unsubscribers) {\n\t\t\tunsub();\n\t\t}\n\t};\n\n\treturn signalWithCleanup;\n};\n\n// Build asynchronous derived signal\nexport const deriveFromAsync = <S extends Store<unknown>[], R>(\n\tstores: [...S],\n\tasyncSelector: (\n\t\tsnapshots: { [K in keyof S]: ReturnType<S[K]['getSnapshot']> },\n\t\ttoken: CancellationToken\n\t) => Promise<R>,\n\tinitialValue: R\n): Signal<R> & { cleanup: () => void; pending: Signal<boolean> } => {\n\tconst getSnapshots = () =>\n\t\tstores.map((s) => s.getSnapshot()) as {\n\t\t\t[K in keyof S]: ReturnType<S[K]['getSnapshot']>;\n\t\t};\n\n\tconst derivedSignal = signal<R>(initialValue);\n\tconst pendingSignal = signal<boolean>(false);\n\tlet currentToken = createCancellationToken();\n\n\tconst update = () => {\n\t\tcurrentToken.cancel();\n\t\tcurrentToken = createCancellationToken();\n\t\tconst myToken = currentToken;\n\t\tpendingSignal.value = true;\n\n\t\tasyncSelector(getSnapshots(), myToken)\n\t\t\t.then((newValue) => {\n\t\t\t\tif (!myToken.isCancelled && derivedSignal.value !== newValue) {\n\t\t\t\t\tderivedSignal.value = newValue;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(() => {})\n\t\t\t.finally(() => {\n\t\t\t\tif (!myToken.isCancelled) {\n\t\t\t\t\tpendingSignal.value = false;\n\t\t\t\t}\n\t\t\t});\n\t};\n\n\tconst unsubscribers = stores.map((store) => store.subscribe(update));\n\tupdate();\n\n\tconst signalWithCleanup = derivedSignal as Signal<R> & {\n\t\tcleanup: () => void;\n\t\tpending: Signal<boolean>;\n\t};\n\tsignalWithCleanup.cleanup = () => {\n\t\tcurrentToken.cancel();\n\t\tfor (const unsub of unsubscribers) {\n\t\t\tunsub();\n\t\t}\n\t};\n\tsignalWithCleanup.pending = pendingSignal;\n\n\treturn signalWithCleanup;\n};\n\n// Serialize registered stores\nexport const serializeStores = (): string => {\n\tconst storeNames = getStoreNames();\n\tconst allSnapshots: Record<string, unknown> = {};\n\tfor (const name of storeNames) {\n\t\tconst store = getStore(name);\n\t\tallSnapshots[name] = store.getSnapshot();\n\t}\n\treturn JSON.stringify(allSnapshots);\n};\n\n// Hydrate stores with Effect\nexport const hydrateStores = (serialized: string): Effect.Effect<void> =>\n\tEffect.try({\n\t\ttry: () => {\n\t\t\tconst allSnapshots = JSON.parse(serialized) as Record<\n\t\t\t\tstring,\n\t\t\t\tRecord<string, unknown>\n\t\t\t>;\n\t\t\tfor (const [name, snapshot] of Object.entries(allSnapshots)) {\n\t\t\t\tEffect.runSync(\n\t\t\t\t\tEffect.try(() => {\n\t\t\t\t\t\tconst store = getStore<Record<string, unknown>>(name);\n\t\t\t\t\t\tstore.update((draft: Record<string, unknown>) => {\n\t\t\t\t\t\t\tObject.assign(draft, snapshot);\n\t\t\t\t\t\t});\n\t\t\t\t\t}).pipe(Effect.catchAll(() => Effect.void))\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tcatch: () => new HydrationError({}),\n\t}).pipe(Effect.catchAll(() => Effect.void));\n\n// Hydrate stores synchronously\nexport const hydrateStoresSync = (serialized: string): void => {\n\tEffect.runSync(\n\t\thydrateStores(serialized).pipe(\n\t\t\tEffect.match({\n\t\t\t\tonSuccess: () => Option.some(undefined),\n\t\t\t\tonFailure: () => Option.none(),\n\t\t\t})\n\t\t)\n\t);\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type { Store } from '../core/types.js';\nimport {\n\tcreateCancellationToken,\n\ttype CancellationToken,\n} from '../actions/cancellation.js';\n\n// Store state change stream\nexport interface StoreStream<T> {\n\tsubscribe: (handler: (value: T) => void) => () => void;\n\tmap: <R>(fn: (value: T) => R) => StoreStream<R>;\n\tfilter: (predicate: (value: T) => boolean) => StoreStream<T>;\n\tdebounce: (ms: number) => StoreStream<T>;\n\tthrottle: (ms: number) => StoreStream<T>;\n\ttakeLatest: <R>(\n\t\tasyncHandler: (value: T, token: CancellationToken) => Promise<R>\n\t) => StoreStream<R>;\n}\n\nconst createBaseStream = <T>(\n\taddListener: (handler: (value: T) => void) => () => void\n): StoreStream<T> => {\n\treturn {\n\t\tsubscribe: addListener,\n\n\t\tmap: <R>(fn: (value: T) => R): StoreStream<R> => {\n\t\t\tconst mappedListeners = new Set<(value: R) => void>();\n\t\t\taddListener((value) => {\n\t\t\t\tconst mapped = fn(value);\n\t\t\t\tfor (const h of mappedListeners) h(mapped);\n\t\t\t});\n\t\t\treturn createBaseStream((h) => {\n\t\t\t\tmappedListeners.add(h);\n\t\t\t\treturn () => mappedListeners.delete(h);\n\t\t\t});\n\t\t},\n\n\t\tfilter: (predicate): StoreStream<T> => {\n\t\t\tconst filteredListeners = new Set<(value: T) => void>();\n\t\t\taddListener((value) => {\n\t\t\t\tif (predicate(value)) {\n\t\t\t\t\tfor (const h of filteredListeners) h(value);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn createBaseStream((h) => {\n\t\t\t\tfilteredListeners.add(h);\n\t\t\t\treturn () => filteredListeners.delete(h);\n\t\t\t});\n\t\t},\n\n\t\tdebounce: (ms): StoreStream<T> => {\n\t\t\tconst debouncedListeners = new Set<(value: T) => void>();\n\t\t\tlet timeout: ReturnType<typeof setTimeout> | null = null;\n\t\t\tlet latestValue: T | undefined;\n\t\t\tlet currentToken = createCancellationToken();\n\n\t\t\taddListener((value) => {\n\t\t\t\tlatestValue = value;\n\t\t\t\tif (timeout) {\n\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\tcurrentToken.cancel();\n\t\t\t\t}\n\t\t\t\tcurrentToken = createCancellationToken();\n\t\t\t\tconst myToken = currentToken;\n\n\t\t\t\ttimeout = setTimeout(() => {\n\t\t\t\t\tif (!myToken.isCancelled && latestValue !== undefined) {\n\t\t\t\t\t\tfor (const h of debouncedListeners) h(latestValue);\n\t\t\t\t\t}\n\t\t\t\t}, ms);\n\t\t\t});\n\n\t\t\treturn createBaseStream((h) => {\n\t\t\t\tdebouncedListeners.add(h);\n\t\t\t\treturn () => debouncedListeners.delete(h);\n\t\t\t});\n\t\t},\n\n\t\tthrottle: (ms): StoreStream<T> => {\n\t\t\tconst throttledListeners = new Set<(value: T) => void>();\n\t\t\tlet lastEmitTime = 0;\n\n\t\t\taddListener((value) => {\n\t\t\t\tconst now = Date.now();\n\t\t\t\tif (now - lastEmitTime >= ms) {\n\t\t\t\t\tlastEmitTime = now;\n\t\t\t\t\tfor (const h of throttledListeners) h(value);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn createBaseStream((h) => {\n\t\t\t\tthrottledListeners.add(h);\n\t\t\t\treturn () => throttledListeners.delete(h);\n\t\t\t});\n\t\t},\n\n\t\ttakeLatest: <R>(\n\t\t\tasyncHandler: (value: T, token: CancellationToken) => Promise<R>\n\t\t): StoreStream<R> => {\n\t\t\tconst latestListeners = new Set<(value: R) => void>();\n\t\t\tlet currentToken = createCancellationToken();\n\n\t\t\taddListener((value) => {\n\t\t\t\tcurrentToken.cancel();\n\t\t\t\tcurrentToken = createCancellationToken();\n\t\t\t\tconst myToken = currentToken;\n\n\t\t\t\tasyncHandler(value, myToken)\n\t\t\t\t\t.then((result) => {\n\t\t\t\t\t\tif (!myToken.isCancelled) {\n\t\t\t\t\t\t\tfor (const h of latestListeners) h(result);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch(() => {});\n\t\t\t});\n\n\t\t\treturn createBaseStream((h) => {\n\t\t\t\tlatestListeners.add(h);\n\t\t\t\treturn () => latestListeners.delete(h);\n\t\t\t});\n\t\t},\n\t};\n};\n\n// Build store property stream\nexport const createStoreStream = <T, K extends keyof T>(\n\tstore: Store<T>,\n\tkey: K\n): StoreStream<T[K]> => {\n\tconst listeners = new Set<(value: T[K]) => void>();\n\tlet lastValue: T[K] = (store.getSnapshot() as Record<string, unknown>)[\n\t\tkey as string\n\t] as T[K];\n\n\tstore.subscribe(() => {\n\t\tconst snapshot = store.getSnapshot() as Record<string, unknown>;\n\t\tconst newValue = snapshot[key as string] as T[K];\n\t\tif (newValue !== lastValue) {\n\t\t\tlastValue = newValue;\n\t\t\tfor (const listener of listeners) {\n\t\t\t\tlistener(newValue);\n\t\t\t}\n\t\t}\n\t});\n\n\treturn createBaseStream((handler) => {\n\t\tlisteners.add(handler);\n\t\treturn () => listeners.delete(handler);\n\t});\n};\n\n// Observe entire store stream\nexport const streamAll = <T>(\n\tstore: Store<T>\n): StoreStream<ReturnType<Store<T>['getSnapshot']>> => {\n\tconst listeners = new Set<\n\t\t(value: ReturnType<Store<T>['getSnapshot']>) => void\n\t>();\n\n\tstore.subscribe(() => {\n\t\tconst snapshot = store.getSnapshot();\n\t\tfor (const listener of listeners) {\n\t\t\tlistener(snapshot);\n\t\t}\n\t});\n\n\treturn createBaseStream((handler) => {\n\t\tlisteners.add(handler);\n\t\treturn () => listeners.delete(handler);\n\t});\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { signal, type Signal } from '@effuse/core';\nimport type { Store } from '../core/types.js';\nimport {\n\tcreateCancellationToken,\n\ttype CancellationToken,\n} from '../actions/cancellation.js';\n\n// Shallow value comparison\nexport const shallowEqual = <T>(a: T, b: T): boolean => {\n\tif (Object.is(a, b)) return true;\n\tif (\n\t\ttypeof a !== 'object' ||\n\t\ta === null ||\n\t\ttypeof b !== 'object' ||\n\t\tb === null\n\t) {\n\t\treturn false;\n\t}\n\n\tif (Array.isArray(a) && Array.isArray(b)) {\n\t\tif (a.length !== b.length) return false;\n\t\tfor (let i = 0; i < a.length; i++) {\n\t\t\tif (!Object.is(a[i], b[i])) return false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tconst keysA = Object.keys(a);\n\tconst keysB = Object.keys(b);\n\tif (keysA.length !== keysB.length) return false;\n\n\tfor (const key of keysA) {\n\t\tif (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n\t\tif (\n\t\t\t!Object.is(\n\t\t\t\t(a as Record<string, unknown>)[key],\n\t\t\t\t(b as Record<string, unknown>)[key]\n\t\t\t)\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n};\n\n// State extraction selector\nexport type Selector<T, R> = (state: T) => R;\n\n// State equality check\nexport type EqualityFn<T> = (a: T, b: T) => boolean;\n\n// Build memoized selector signal\nexport const createSelector = <T, R>(\n\tstore: Store<T>,\n\tselector: Selector<ReturnType<Store<T>['getSnapshot']>, R>,\n\tequalityFn: EqualityFn<R> = shallowEqual\n): Signal<R> => {\n\tconst snapshot = store.getSnapshot();\n\tconst initialValue = selector(snapshot);\n\tconst derived = signal(initialValue);\n\n\tstore.subscribe(() => {\n\t\tconst currentSnapshot = store.getSnapshot();\n\t\tconst newValue = selector(currentSnapshot);\n\t\tif (!equalityFn(derived.value, newValue)) {\n\t\t\tderived.value = newValue;\n\t\t}\n\t});\n\n\treturn derived;\n};\n\n// Asynchronous state selector\nexport type AsyncSelector<T, R> = (\n\tstate: T,\n\ttoken: CancellationToken\n) => Promise<R>;\n\n// Build asynchronous selector signal\nexport const createSelectorAsync = <T, R>(\n\tstore: Store<T>,\n\tasyncSelector: AsyncSelector<ReturnType<Store<T>['getSnapshot']>, R>,\n\tinitialValue: R\n): Signal<R> & { pending: Signal<boolean>; cleanup: () => void } => {\n\tconst derived = signal<R>(initialValue);\n\tconst pending = signal<boolean>(false);\n\tlet currentToken = createCancellationToken();\n\n\tconst update = () => {\n\t\tcurrentToken.cancel();\n\t\tcurrentToken = createCancellationToken();\n\t\tconst myToken = currentToken;\n\t\tpending.value = true;\n\n\t\tconst snapshot = store.getSnapshot();\n\t\tasyncSelector(snapshot, myToken)\n\t\t\t.then((newValue) => {\n\t\t\t\tif (!myToken.isCancelled && derived.value !== newValue) {\n\t\t\t\t\tderived.value = newValue;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(() => {})\n\t\t\t.finally(() => {\n\t\t\t\tif (!myToken.isCancelled) {\n\t\t\t\t\tpending.value = false;\n\t\t\t\t}\n\t\t\t});\n\t};\n\n\tconst unsub = store.subscribe(update);\n\tupdate();\n\n\tconst result = derived as Signal<R> & {\n\t\tpending: Signal<boolean>;\n\t\tcleanup: () => void;\n\t};\n\tresult.pending = pending;\n\tresult.cleanup = () => {\n\t\tcurrentToken.cancel();\n\t\tunsub();\n\t};\n\n\treturn result;\n};\n\n// Build property pick selector\nexport const pick = <T, K extends keyof T>(\n\tstore: Store<T>,\n\tkeys: K[]\n): Signal<Pick<T, K>> => {\n\treturn createSelector(store, (state) => {\n\t\tconst picked = {} as Pick<T, K>;\n\t\tfor (const key of keys) {\n\t\t\tif (key in (state as object)) {\n\t\t\t\tpicked[key] = (state as T)[key];\n\t\t\t}\n\t\t}\n\t\treturn picked;\n\t});\n};\n\n// Build combined selector signal\nexport const combineSelectors = <T, R extends Record<string, unknown>>(\n\tstore: Store<T>,\n\tselectors: {\n\t\t[K in keyof R]: Selector<ReturnType<Store<T>['getSnapshot']>, R[K]>;\n\t}\n): Signal<R> => {\n\treturn createSelector(store, (state) => {\n\t\tconst result = {} as R;\n\t\tfor (const key of Object.keys(selectors) as (keyof R)[]) {\n\t\t\tresult[key] = selectors[key](state);\n\t\t}\n\t\treturn result;\n\t});\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Option, pipe } from 'effect';\nimport type { Store } from '../core/types.js';\n\ninterface DevToolsExtension {\n\tconnect: (options?: { name?: string }) => DevToolsConnection;\n}\n\ninterface DevToolsConnection {\n\tinit: (state: unknown) => void;\n\tsend: (action: { type: string; payload?: unknown }, state: unknown) => void;\n\tsubscribe: (listener: (message: { type: string }) => void) => () => void;\n}\n\n// Detect Redux DevTools extension\nexport const hasDevTools = (): boolean => {\n\tif (typeof globalThis === 'undefined') return false;\n\tconst w = globalThis as unknown as {\n\t\t__REDUX_DEVTOOLS_EXTENSION__?: DevToolsExtension;\n\t};\n\treturn w.__REDUX_DEVTOOLS_EXTENSION__ !== undefined;\n};\n\nconst connections = new Map<string, DevToolsConnection>();\n\n// Connect store to DevTools\nexport const connectDevTools = <T>(\n\tstore: Store<T>,\n\toptions?: { name?: string }\n): (() => void) => {\n\tif (!hasDevTools()) {\n\t\treturn () => {};\n\t}\n\n\tconst w = globalThis as unknown as {\n\t\t__REDUX_DEVTOOLS_EXTENSION__?: DevToolsExtension;\n\t};\n\tconst extension = w.__REDUX_DEVTOOLS_EXTENSION__;\n\tif (!extension) return () => {};\n\n\tconst storeName = pipe(\n\t\tOption.fromNullable(options),\n\t\tOption.flatMap((o) => Option.fromNullable(o.name)),\n\t\tOption.getOrElse(() => store.name)\n\t);\n\n\tif (connections.has(storeName)) {\n\t\treturn () => {};\n\t}\n\n\tconst devTools = extension.connect({ name: `Effuse: ${storeName}` });\n\tconnections.set(storeName, devTools);\n\n\tdevTools.init(store.getSnapshot());\n\n\tconst unsubscribe = store.subscribe(() => {\n\t\tdevTools.send({ type: `${storeName}/update` }, store.getSnapshot());\n\t});\n\n\treturn () => {\n\t\tunsubscribe();\n\t\tconnections.delete(storeName);\n\t};\n};\n\n// DevTools reporting middleware\nexport const devToolsMiddleware = <T>(storeName: string) => {\n\treturn (state: T, action: string, args: unknown[]): T | undefined => {\n\t\tconst connection = connections.get(storeName);\n\t\tif (connection) {\n\t\t\tconnection.send(\n\t\t\t\t{ type: action, payload: args.length === 1 ? args[0] : args },\n\t\t\t\tstate\n\t\t\t);\n\t\t}\n\t\treturn undefined;\n\t};\n};\n\n// Build DevTools middleware\nexport const createDevToolsMiddleware = <T>(storeName: string) =>\n\tdevToolsMiddleware<T>(storeName);\n\n// Disconnect store from DevTools\nexport const disconnectDevTools = (storeName: string): void => {\n\tconnections.delete(storeName);\n};\n\n// Disconnect all DevTools connections\nexport const disconnectAllDevTools = (): void => {\n\tconnections.clear();\n};\n"]}
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "@effuse/store",
3
+ "version": "1.0.0",
4
+ "description": "A functional state management system built on Effect-ts. It offers typed, robust global state handling designed to scale with your application's logic.",
5
+ "author": "Chris M. Pérez",
6
+ "license": "MIT",
7
+ "publishConfig": {
8
+ "access": "public"
9
+ },
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "https://github.com/chrismichaelps/effuse.git"
13
+ },
14
+ "bugs": {
15
+ "url": "https://github.com/chrismichaelps/effuse/issues"
16
+ },
17
+ "homepage": "https://github.com/chrismichaelps/effuse#readme",
18
+ "type": "module",
19
+ "main": "./dist/index.cjs",
20
+ "module": "./dist/index.js",
21
+ "types": "./dist/index.d.ts",
22
+ "exports": {
23
+ ".": {
24
+ "types": "./dist/index.d.ts",
25
+ "import": "./dist/index.js",
26
+ "require": "./dist/index.cjs"
27
+ }
28
+ },
29
+ "files": [
30
+ "dist",
31
+ "src"
32
+ ],
33
+ "scripts": {
34
+ "build": "tsup",
35
+ "dev": "tsup --watch",
36
+ "lint": "eslint src",
37
+ "typecheck": "tsc --noEmit"
38
+ },
39
+ "keywords": [
40
+ "state-management",
41
+ "functional",
42
+ "effect-ts",
43
+ "store",
44
+ "effuse",
45
+ "typescript"
46
+ ],
47
+ "engines": {
48
+ "node": ">=22.14.0"
49
+ },
50
+ "peerDependencies": {
51
+ "@effuse/core": "1.0.1"
52
+ },
53
+ "dependencies": {
54
+ "effect": "^3.19.14"
55
+ },
56
+ "devDependencies": {
57
+ "@effect/eslint-plugin": "^0.3.2",
58
+ "@types/node": "^25.0.3",
59
+ "@effuse/core": "1.0.1",
60
+ "eslint": "^9.39.2",
61
+ "tsup": "^8.5.1",
62
+ "typescript": "^5.9.3",
63
+ "vitest": "^4.0.16"
64
+ }
65
+ }