react-mnemonic 1.2.0-beta1 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/core.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/Mnemonic/runtime.ts","../src/Mnemonic/provider.tsx","../src/Mnemonic/provider-core.tsx","../src/Mnemonic/codecs.ts","../src/Mnemonic/schema.ts","../src/Mnemonic/use-shared.ts","../src/Mnemonic/use-core.ts","../src/Mnemonic/recovery.ts","../src/Mnemonic/key.ts"],"names":["createContext","useContext","useMemo","store","useEffect","MnemonicProvider","jsx","useState","useCallback","useSyncExternalStore","useRef","warnOnce","isDevelopmentRuntime"],"mappings":"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","file":"core.cjs","sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\nimport type { StorageLike } from \"./types\";\n\ntype RuntimeProcess = { env?: { NODE_ENV?: string } };\n\nfunction getGlobalProcess(): RuntimeProcess | undefined {\n return (globalThis as { process?: RuntimeProcess }).process;\n}\n\nexport function getRuntimeNodeEnv(): string | undefined {\n const runtimeProcess = getGlobalProcess();\n if (runtimeProcess?.env?.NODE_ENV !== undefined) {\n return runtimeProcess.env.NODE_ENV;\n }\n return undefined;\n}\n\nexport function getNativeBrowserStorages(): StorageLike[] {\n const globalWindow = (globalThis as { window?: Window }).window;\n if (!globalWindow) return [];\n\n const storages: StorageLike[] = [];\n const addStorage = (getter: () => StorageLike) => {\n try {\n storages.push(getter());\n } catch {\n // Ignore blocked browser storage access and continue probing others.\n }\n };\n\n addStorage(() => globalWindow.localStorage);\n addStorage(() => globalWindow.sessionStorage);\n return storages;\n}\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\n/**\n * @fileoverview React Context provider for persistent state management.\n *\n * This module exports the MnemonicProvider component and useMnemonic hook,\n * which together provide a namespace-scoped storage API to child components.\n * The provider creates an in-memory cache with read-through behavior to localStorage\n * (or a synchronous custom storage backend) and implements the React external\n * store contract.\n */\n\nimport { createContext, useContext, useMemo, useEffect, ReactNode } from \"react\";\nimport { getNativeBrowserStorages, getRuntimeNodeEnv } from \"./runtime\";\nimport type { Mnemonic, MnemonicProviderOptions, StorageLike, Listener, Unsubscribe } from \"./types\";\n\n/**\n * React Context for the Mnemonic store.\n *\n * Provides access to the low-level storage API. Consumer code should use\n * `useMnemonicKey` instead of accessing this context directly.\n *\n * @internal\n */\nconst MnemonicContext = createContext<Mnemonic | null>(null);\n\n/**\n * Hook to access the Mnemonic store from context.\n *\n * This is a low-level hook used internally by `useMnemonicKey`. Most applications\n * should use `useMnemonicKey` instead, which provides a higher-level, type-safe API.\n *\n * @returns The Mnemonic store instance\n *\n * @throws {Error} If called outside of a MnemonicProvider\n *\n * @example\n * ```tsx\n * // Internal usage (prefer useMnemonicKey for application code)\n * function MyComponent() {\n * const store = useMnemonic();\n * const raw = store.getRawSnapshot('myKey');\n * // ...\n * }\n * ```\n *\n * @see {@link useMnemonicKey} - Higher-level hook for application code\n * @see {@link MnemonicProvider} - Required provider component\n */\nexport function useMnemonic(): Mnemonic {\n const context = useContext(MnemonicContext);\n if (!context) {\n throw new Error(\"useMnemonic must be used within a MnemonicProvider\");\n }\n return context;\n}\n\n/**\n * Props for the MnemonicProvider component.\n *\n * Extends MnemonicProviderOptions with required children prop.\n *\n * @see {@link MnemonicProviderOptions} - Configuration options\n * @see {@link MnemonicProvider} - Provider component\n */\nexport interface MnemonicProviderProps extends Readonly<MnemonicProviderOptions> {\n /**\n * React children to render within the provider.\n */\n readonly children: ReactNode;\n}\n\n/**\n * Helper function to safely access window.localStorage in browser environments.\n *\n * Returns undefined in non-browser environments (SSR) or when localStorage\n * is unavailable (e.g., in private browsing mode with strict settings).\n *\n * @returns localStorage if available, undefined otherwise\n *\n * @internal\n */\nfunction defaultBrowserStorage(): StorageLike | undefined {\n const globalWindow = (globalThis as { window?: Window }).window;\n if (globalWindow === undefined) return undefined;\n try {\n return globalWindow.localStorage;\n } catch {\n return undefined;\n }\n}\n\n/** Internal store type with reload capability, not exposed to consumers. */\ntype MnemonicInternal = Mnemonic & {\n reloadFromStorage: (changedKeys?: string[]) => void;\n};\n\n/** Internal store extension to retain a strong provider API reference while mounted. */\ntype MnemonicInternalWithDevToolsHold = MnemonicInternal & {\n __devToolsProviderApiHold?: DevToolsProviderApi;\n};\n\n/** Minimal WeakRef shape so we can compile against ES2020 libs. */\ntype WeakRefLike<T extends object> = {\n deref: () => T | undefined;\n};\n\ntype WeakRefConstructorLike = new <T extends object>(target: T) => WeakRefLike<T>;\n\ntype DevToolsProviderApi = {\n getStore: () => MnemonicInternal;\n dump: () => Record<string, string>;\n get: (key: string) => unknown;\n set: (key: string, value: unknown) => void;\n remove: (key: string) => void;\n clear: () => void;\n keys: () => string[];\n};\n\ntype DevToolsProviderEntry = {\n namespace: string;\n weakRef: WeakRefLike<DevToolsProviderApi>;\n registeredAt: number;\n lastSeenAt: number;\n staleSince: number | null;\n};\n\ntype DevToolsProviderDescriptor = {\n namespace: string;\n available: boolean;\n registeredAt: number;\n lastSeenAt: number;\n staleSince: number | null;\n};\n\ntype DevToolsRegistryRoot = {\n providers: Record<string, DevToolsProviderEntry>;\n resolve: (namespace: string) => DevToolsProviderApi | null;\n list: () => DevToolsProviderDescriptor[];\n capabilities: {\n weakRef: boolean;\n finalizationRegistry: boolean;\n };\n __meta: {\n version: number;\n lastUpdated: number;\n lastChange: string;\n };\n};\n\ntype DevToolsGlobalWindow = Window & {\n __REACT_MNEMONIC_DEVTOOLS__?: unknown;\n};\n\ntype StorageAccessCallbacks = {\n onAccessError: (error: unknown) => void;\n onAccessSuccess: () => void;\n onAsyncViolation: (method: \"getItem\" | \"setItem\" | \"removeItem\", thenable: PromiseLike<unknown>) => void;\n};\n\nfunction detectEnumerableStorage(storage: StorageLike | undefined): boolean {\n if (!storage) return false;\n try {\n return typeof storage.length === \"number\" && typeof storage.key === \"function\";\n } catch {\n return false;\n }\n}\n\nfunction isProductionRuntime(): boolean {\n const env = getRuntimeNodeEnv();\n if (env === undefined) {\n return true;\n }\n return env === \"production\";\n}\n\nfunction weakRefConstructor(): WeakRefConstructorLike | null {\n const ctor = (globalThis as { WeakRef?: unknown }).WeakRef;\n return typeof ctor === \"function\" ? (ctor as WeakRefConstructorLike) : null;\n}\n\nfunction hasFinalizationRegistry(): boolean {\n return typeof (globalThis as { FinalizationRegistry?: unknown }).FinalizationRegistry === \"function\";\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n if (value == null) return false;\n if (typeof value !== \"object\" && typeof value !== \"function\") return false;\n return typeof (value as { then?: unknown }).then === \"function\";\n}\n\nfunction getCrossTabSyncMode(\n requestedStorage: StorageLike | undefined,\n activeStorage: StorageLike | undefined,\n): NonNullable<Mnemonic[\"crossTabSyncMode\"]> {\n const isExplicitNativeBrowserStorage =\n activeStorage !== undefined &&\n requestedStorage !== undefined &&\n getNativeBrowserStorages().includes(activeStorage);\n if ((requestedStorage === undefined && activeStorage !== undefined) || isExplicitNativeBrowserStorage) {\n return \"browser-storage-event\";\n }\n if (typeof activeStorage?.onExternalChange === \"function\") {\n return \"custom-external-change\";\n }\n return \"none\";\n}\n\nfunction getDevToolsWindow(): DevToolsGlobalWindow | undefined {\n return (globalThis as { window?: DevToolsGlobalWindow }).window;\n}\n\nfunction sanitizeDevToolsRoot(root: Record<string, unknown>): void {\n const reserved = new Set([\"providers\", \"resolve\", \"list\", \"capabilities\", \"__meta\"]);\n for (const key of Object.keys(root)) {\n if (reserved.has(key)) continue;\n const descriptor = Object.getOwnPropertyDescriptor(root, key);\n if (descriptor && !descriptor.configurable) continue;\n try {\n delete root[key];\n } catch {\n // Ignore hostile legacy properties so devtools init stays fail-safe.\n }\n }\n}\n\nfunction ensureDevToolsRoot(enableDevTools: boolean): DevToolsRegistryRoot | null {\n if (!enableDevTools) return null;\n\n const globalWindow = getDevToolsWindow();\n if (!globalWindow) return null;\n\n const weakRefSupported = weakRefConstructor() !== null;\n const finalizationRegistrySupported = hasFinalizationRegistry();\n const existing = globalWindow.__REACT_MNEMONIC_DEVTOOLS__;\n const root: Record<string, unknown> =\n existing && typeof existing === \"object\" ? (existing as Record<string, unknown>) : {};\n\n sanitizeDevToolsRoot(root);\n\n if (!root.providers || typeof root.providers !== \"object\") {\n root.providers = {};\n }\n\n if (!root.capabilities || typeof root.capabilities !== \"object\") {\n root.capabilities = {};\n }\n\n const capabilities = root.capabilities as DevToolsRegistryRoot[\"capabilities\"];\n capabilities.weakRef = weakRefSupported;\n capabilities.finalizationRegistry = finalizationRegistrySupported;\n\n if (!root.__meta || typeof root.__meta !== \"object\") {\n root.__meta = {\n version: 0,\n lastUpdated: Date.now(),\n lastChange: \"\",\n };\n }\n\n const meta = root.__meta as DevToolsRegistryRoot[\"__meta\"];\n if (typeof meta.version !== \"number\" || !Number.isFinite(meta.version)) {\n meta.version = 0;\n }\n if (typeof meta.lastUpdated !== \"number\" || !Number.isFinite(meta.lastUpdated)) {\n meta.lastUpdated = Date.now();\n }\n if (typeof meta.lastChange !== \"string\") {\n meta.lastChange = \"\";\n }\n\n const providers = root.providers as Record<string, DevToolsProviderEntry>;\n if (typeof root.resolve !== \"function\") {\n root.resolve = (namespace: string): DevToolsProviderApi | null => {\n const entry = providers[namespace];\n if (!entry || typeof entry.weakRef?.deref !== \"function\") return null;\n\n const live = entry.weakRef.deref();\n if (live) {\n entry.lastSeenAt = Date.now();\n entry.staleSince = null;\n return live;\n }\n\n entry.staleSince ??= Date.now();\n return null;\n };\n }\n\n if (typeof root.list !== \"function\") {\n root.list = (): DevToolsProviderDescriptor[] =>\n Object.entries(providers)\n .map(([namespace, entry]) => {\n const live = typeof entry.weakRef?.deref === \"function\" ? entry.weakRef.deref() : undefined;\n const available = Boolean(live);\n if (available) {\n entry.lastSeenAt = Date.now();\n entry.staleSince = null;\n } else {\n entry.staleSince ??= Date.now();\n }\n return {\n namespace,\n available,\n registeredAt: entry.registeredAt,\n lastSeenAt: entry.lastSeenAt,\n staleSince: entry.staleSince,\n };\n })\n .sort((left, right) => left.namespace.localeCompare(right.namespace));\n }\n\n globalWindow.__REACT_MNEMONIC_DEVTOOLS__ = root;\n return root as DevToolsRegistryRoot;\n}\n\nfunction bumpDevToolsVersion(root: DevToolsRegistryRoot | null, namespace: string, reason: string): void {\n if (!root) return;\n root.__meta.version += 1;\n root.__meta.lastUpdated = Date.now();\n root.__meta.lastChange = `${namespace}.${reason}`;\n}\n\nfunction decodeDevToolsValue(raw: string): unknown {\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n}\n\nfunction readStorageRaw(\n storage: StorageLike | undefined,\n storageKey: string,\n callbacks: StorageAccessCallbacks,\n): string | null {\n if (!storage) return null;\n\n try {\n const raw = storage.getItem(storageKey);\n if (isPromiseLike(raw)) {\n callbacks.onAsyncViolation(\"getItem\", raw);\n return null;\n }\n callbacks.onAccessSuccess();\n return raw;\n } catch (error) {\n callbacks.onAccessError(error);\n return null;\n }\n}\n\nfunction enumerateNamespaceKeys(\n storage: StorageLike | undefined,\n prefix: string,\n callbacks: Pick<StorageAccessCallbacks, \"onAccessError\" | \"onAccessSuccess\">,\n): string[] {\n if (!storage) {\n return [];\n }\n\n const keys: string[] = [];\n try {\n const storageLength = storage.length;\n const getStorageKey = storage.key;\n if (typeof storageLength !== \"number\" || typeof getStorageKey !== \"function\") {\n return [];\n }\n for (let index = 0; index < storageLength; index++) {\n const fullKey = getStorageKey.call(storage, index);\n if (!fullKey?.startsWith(prefix)) continue;\n keys.push(fullKey.slice(prefix.length));\n }\n callbacks.onAccessSuccess();\n } catch (error) {\n callbacks.onAccessError(error);\n }\n return keys;\n}\n\nfunction syncCacheEntryFromStorage({\n key,\n storageKey,\n storage,\n cache,\n emit,\n callbacks,\n}: {\n key: string;\n storageKey: string;\n storage: StorageLike | undefined;\n cache: Map<string, string | null>;\n emit: (key: string) => void;\n callbacks: StorageAccessCallbacks;\n}): boolean {\n const fresh = readStorageRaw(storage, storageKey, callbacks);\n const cached = cache.get(key) ?? null;\n if (fresh === cached) {\n return false;\n }\n cache.set(key, fresh);\n emit(key);\n return true;\n}\n\nfunction reloadNamedKeysFromStorage({\n changedKeys,\n prefix,\n storage,\n listeners,\n cache,\n emit,\n callbacks,\n}: {\n changedKeys: string[];\n prefix: string;\n storage: StorageLike | undefined;\n listeners: Map<string, Set<Listener>>;\n cache: Map<string, string | null>;\n emit: (key: string) => void;\n callbacks: StorageAccessCallbacks;\n}): boolean {\n let changed = false;\n\n for (const fullStorageKey of changedKeys) {\n if (!fullStorageKey.startsWith(prefix)) continue;\n const key = fullStorageKey.slice(prefix.length);\n const listenerSet = listeners.get(key);\n if (listenerSet && listenerSet.size > 0) {\n changed =\n syncCacheEntryFromStorage({\n key,\n storageKey: fullStorageKey,\n storage,\n cache,\n emit,\n callbacks,\n }) || changed;\n continue;\n }\n if (cache.has(key)) {\n cache.delete(key);\n }\n }\n\n return changed;\n}\n\nfunction reloadSubscribedKeysFromStorage({\n prefix,\n storage,\n listeners,\n cache,\n emit,\n callbacks,\n}: {\n prefix: string;\n storage: StorageLike | undefined;\n listeners: Map<string, Set<Listener>>;\n cache: Map<string, string | null>;\n emit: (key: string) => void;\n callbacks: StorageAccessCallbacks;\n}): boolean {\n let changed = false;\n\n for (const [key, listenerSet] of listeners) {\n if (listenerSet.size === 0) continue;\n changed =\n syncCacheEntryFromStorage({\n key,\n storageKey: `${prefix}${key}`,\n storage,\n cache,\n emit,\n callbacks,\n }) || changed;\n }\n\n for (const key of cache.keys()) {\n const listenerSet = listeners.get(key);\n if (listenerSet && listenerSet.size > 0) continue;\n cache.delete(key);\n }\n\n return changed;\n}\n\nfunction createDevToolsProviderApi({\n store,\n dump,\n keys,\n readThrough,\n writeRaw,\n removeRaw,\n}: {\n store: MnemonicInternal;\n dump: () => Record<string, string>;\n keys: () => string[];\n readThrough: (key: string) => string | null;\n writeRaw: (key: string, raw: string) => void;\n removeRaw: (key: string) => void;\n}): DevToolsProviderApi {\n return {\n getStore: () => store,\n dump: () => {\n const data = dump();\n console.table(\n Object.entries(data).map(([key, value]) => ({\n key,\n value,\n decoded: decodeDevToolsValue(value),\n })),\n );\n return data;\n },\n get: (key: string) => {\n const raw = readThrough(key);\n if (raw == null) return undefined;\n return decodeDevToolsValue(raw);\n },\n set: (key: string, value: unknown) => {\n writeRaw(key, JSON.stringify(value));\n },\n remove: (key: string) => removeRaw(key),\n clear: () => {\n for (const key of keys()) {\n removeRaw(key);\n }\n },\n keys,\n };\n}\n\nfunction createReloadFromStorage({\n storage,\n hasAsyncContractViolation,\n prefix,\n listeners,\n cache,\n emit,\n callbacks,\n devToolsRoot,\n namespace,\n}: {\n storage: StorageLike | undefined;\n hasAsyncContractViolation: () => boolean;\n prefix: string;\n listeners: Map<string, Set<Listener>>;\n cache: Map<string, string | null>;\n emit: (key: string) => void;\n callbacks: StorageAccessCallbacks;\n devToolsRoot: DevToolsRegistryRoot | null;\n namespace: string;\n}): (changedKeys?: string[]) => void {\n return (changedKeys?: string[]) => {\n if (!storage || hasAsyncContractViolation()) return;\n if (changedKeys?.length === 0) return;\n\n const isFullReload = changedKeys === undefined;\n const changed = isFullReload\n ? reloadSubscribedKeysFromStorage({\n prefix,\n storage,\n listeners,\n cache,\n emit,\n callbacks,\n })\n : reloadNamedKeysFromStorage({\n changedKeys,\n prefix,\n storage,\n listeners,\n cache,\n emit,\n callbacks,\n });\n\n if (changed) {\n bumpDevToolsVersion(devToolsRoot, namespace, isFullReload ? \"reload:full\" : \"reload:granular\");\n }\n };\n}\n\nfunction registerDevToolsProvider({\n devToolsRoot,\n namespace,\n store,\n dump,\n keys,\n readThrough,\n writeRaw,\n removeRaw,\n}: {\n devToolsRoot: DevToolsRegistryRoot;\n namespace: string;\n store: MnemonicInternalWithDevToolsHold;\n dump: () => Record<string, string>;\n keys: () => string[];\n readThrough: (key: string) => string | null;\n writeRaw: (key: string, raw: string) => void;\n removeRaw: (key: string) => void;\n}): void {\n let infoMessage = `[Mnemonic DevTools] Namespace \"${namespace}\" available via window.__REACT_MNEMONIC_DEVTOOLS__.resolve(\"${namespace}\")`;\n\n if (!devToolsRoot.capabilities.weakRef) {\n console.info(\n `[Mnemonic DevTools] WeakRef is not available; registry provider \"${namespace}\" was not registered.`,\n );\n return;\n }\n\n const existingLive = devToolsRoot.resolve(namespace);\n if (existingLive) {\n const duplicateMessage = `[Mnemonic DevTools] Duplicate provider namespace \"${namespace}\" detected. Each window must have at most one live MnemonicProvider per namespace.`;\n if (!isProductionRuntime()) {\n throw new Error(duplicateMessage);\n }\n console.warn(`${duplicateMessage} Keeping the first provider and ignoring the duplicate.`);\n console.info(\n `[Mnemonic DevTools] Namespace \"${namespace}\" already registered. Keeping existing provider reference.`,\n );\n return;\n }\n\n const providerApi = createDevToolsProviderApi({\n store,\n dump,\n keys,\n readThrough,\n writeRaw,\n removeRaw,\n });\n const WeakRefCtor = weakRefConstructor();\n if (!WeakRefCtor) {\n console.info(`[Mnemonic DevTools] WeakRef became unavailable while registering \"${namespace}\".`);\n return;\n }\n\n // Keep a strong reference for the mounted provider lifetime.\n // The global registry still only exposes a WeakRef, but this\n // prevents premature collection while the provider is active.\n store.__devToolsProviderApiHold = providerApi;\n\n const now = Date.now();\n devToolsRoot.providers[namespace] = {\n namespace,\n weakRef: new WeakRefCtor(providerApi),\n registeredAt: now,\n lastSeenAt: now,\n staleSince: null,\n };\n bumpDevToolsVersion(devToolsRoot, namespace, \"registry:namespace-registered\");\n console.info(infoMessage);\n}\n\n/**\n * React Context provider for namespace-isolated persistent state.\n *\n * Creates a scoped storage environment where all keys are automatically prefixed\n * with the namespace to prevent collisions. Implements an in-memory cache with\n * read-through behavior to the underlying storage backend (localStorage by default).\n *\n * This provider must wrap any components that use `useMnemonicKey`. Multiple\n * providers with different namespaces can coexist in the same application.\n *\n * @param props - Provider configuration and children\n * @param props.children - React children to render within the provider\n * @param props.namespace - Unique namespace for isolating storage keys\n * @param props.storage - Optional synchronous custom storage backend (defaults to localStorage)\n * @param props.enableDevTools - Enable DevTools debugging interface (defaults to false)\n * @param props.schemaMode - Schema enforcement mode (default: \"default\")\n * @param props.schemaRegistry - Optional schema registry for storing schemas and migrations\n * @param props.ssr - Optional SSR defaults for descendant hooks\n *\n * @example\n * ```tsx\n * // Basic usage with default settings\n * function App() {\n * return (\n * <MnemonicProvider namespace=\"myApp\">\n * <MyComponents />\n * </MnemonicProvider>\n * );\n * }\n * ```\n *\n * @example\n * ```tsx\n * // With a synchronous custom storage backend\n * function App() {\n * return (\n * <MnemonicProvider\n * namespace=\"myApp\"\n * storage={window.sessionStorage}\n * >\n * <MyComponents />\n * </MnemonicProvider>\n * );\n * }\n * ```\n *\n * @example\n * ```tsx\n * // With DevTools enabled (development only)\n * function App() {\n * return (\n * <MnemonicProvider\n * namespace=\"myApp\"\n * enableDevTools={process.env.NODE_ENV === 'development'}\n * >\n * <MyComponents />\n * </MnemonicProvider>\n * );\n * }\n *\n * // Then in browser console:\n * const dt = window.__REACT_MNEMONIC_DEVTOOLS__.resolve('myApp')\n * dt?.dump()\n * dt?.get('user')\n * dt?.set('theme', 'dark')\n * ```\n *\n * @example\n * ```tsx\n * // Multiple providers with different namespaces\n * function App() {\n * return (\n * <MnemonicProvider namespace=\"user-prefs\">\n * <UserSettings />\n * <MnemonicProvider namespace=\"app-state\">\n * <Dashboard />\n * </MnemonicProvider>\n * </MnemonicProvider>\n * );\n * }\n * ```\n *\n * @example\n * ```tsx\n * // Delay persisted storage reads until after client mount\n * function App() {\n * return (\n * <MnemonicProvider\n * namespace=\"myApp\"\n * ssr={{ hydration: \"client-only\" }}\n * >\n * <MyComponents />\n * </MnemonicProvider>\n * );\n * }\n * ```\n *\n * @remarks\n * - Creates a stable store instance that only recreates when namespace, storage, or enableDevTools change\n * - All storage operations are cached in memory for fast reads\n * - Storage failures are handled gracefully (logged but not thrown)\n * - `StorageLike` is intentionally synchronous for v1; async persistence must sit behind a sync facade\n * - In SSR environments, the provider is safe by default: hooks render\n * `defaultValue` unless configured with an explicit `ssr.serverValue`\n * - The store implements React's useSyncExternalStore contract for efficient updates\n *\n * @see {@link useMnemonicKey} - Hook for using persistent state\n * @see {@link MnemonicProviderOptions} - Configuration options\n */\nexport function MnemonicProvider({\n children,\n namespace,\n storage,\n enableDevTools = false,\n schemaMode = \"default\",\n schemaRegistry,\n ssr,\n}: MnemonicProviderProps) {\n if (schemaMode === \"strict\" && !schemaRegistry) {\n throw new Error(\"MnemonicProvider strict mode requires schemaRegistry\");\n }\n if (schemaMode === \"autoschema\" && typeof schemaRegistry?.registerSchema !== \"function\") {\n throw new Error(\"MnemonicProvider autoschema mode requires schemaRegistry.registerSchema\");\n }\n\n const store = useMemo<MnemonicInternal>(() => {\n const prefix = `${namespace}.`;\n const st = storage ?? defaultBrowserStorage();\n const ssrHydration = ssr?.hydration ?? \"immediate\";\n const devToolsRoot = ensureDevToolsRoot(enableDevTools);\n const canEnumerateKeys = detectEnumerableStorage(st);\n const crossTabSyncMode = getCrossTabSyncMode(storage, st);\n\n /**\n * In-memory cache of raw string values.\n * Maps unprefixed keys to their raw string values (or null if not present).\n * Provides fast reads without hitting storage on every access.\n */\n const cache = new Map<string, string | null>();\n\n /**\n * Per-key listener registry.\n * Maps unprefixed keys to sets of listener functions.\n * Used to notify React components when values change.\n */\n const listeners = new Map<string, Set<Listener>>();\n\n /** Whether a QuotaExceededError has already been logged since the last successful write. */\n let quotaErrorLogged = false;\n\n /** Whether a non-quota DOMException has already been logged since the last successful storage access. */\n let accessErrorLogged = false;\n\n /** Whether the storage backend has violated the synchronous StorageLike contract. */\n let asyncContractViolationDetected = false;\n const storageAccessCallbacks: StorageAccessCallbacks = {\n onAccessError: (err) => logAccessError(err),\n onAccessSuccess: () => {\n accessErrorLogged = false;\n },\n onAsyncViolation: (method, thenable) => handleAsyncStorageContractViolation(method, thenable),\n };\n\n /**\n * Converts an unprefixed key to a fully-qualified storage key.\n *\n * @param key - Unprefixed key\n * @returns Prefixed key with namespace\n */\n const fullKey = (key: string) => prefix + key;\n\n /**\n * Notifies all listeners subscribed to a specific key.\n * Called after mutations (set/remove) to trigger React re-renders.\n *\n * @param key - Unprefixed key that changed\n */\n const emit = (key: string) => {\n const set = listeners.get(key);\n if (!set) return;\n for (const fn of set) fn();\n };\n\n /**\n * Logs a storage-access DOMException once, squelching repeats until\n * a successful storage operation resets the flag. Ignores\n * QuotaExceededError (handled separately in writeRaw) and silently\n * swallows all non-DOMException errors.\n */\n const logAccessError = (err: unknown): void => {\n if (!accessErrorLogged && err instanceof DOMException && err.name !== \"QuotaExceededError\") {\n console.error(\n `[Mnemonic] Storage access error (${err.name}): ${err.message}. ` +\n \"Data is cached in memory but may not persist.\",\n );\n accessErrorLogged = true;\n }\n };\n\n /**\n * Marks the storage backend as incompatible with the synchronous\n * StorageLike contract, consumes the offending thenable to avoid\n * unhandled rejections, and logs the problem once.\n */\n const handleAsyncStorageContractViolation = (\n method: \"getItem\" | \"setItem\" | \"removeItem\",\n thenable: PromiseLike<unknown>,\n ): void => {\n asyncContractViolationDetected = true;\n void Promise.resolve(thenable).catch(() => undefined);\n if (accessErrorLogged) return;\n console.error(\n `[Mnemonic] StorageLike.${method} returned a Promise. ` +\n \"StorageLike must remain synchronous for react-mnemonic v1. \" +\n \"Wrap async persistence behind a synchronous cache facade instead.\",\n );\n accessErrorLogged = true;\n };\n\n /**\n * Read-through cache accessor.\n * Returns cached value if available, otherwise reads from storage and caches.\n *\n * @param key - Unprefixed key to read\n * @returns Raw string value, or null if not present\n */\n const readThrough = (key: string): string | null => {\n if (cache.has(key)) return cache.get(key) ?? null;\n if (!st || asyncContractViolationDetected) {\n cache.set(key, null);\n return null;\n }\n const raw = readStorageRaw(st, fullKey(key), storageAccessCallbacks);\n cache.set(key, raw);\n return raw;\n };\n\n /**\n * Writes a raw string value to both cache and storage.\n * Notifies listeners after the write completes.\n *\n * @param key - Unprefixed key to write\n * @param raw - Raw string value to store\n */\n const writeRaw = (key: string, raw: string) => {\n cache.set(key, raw);\n if (st && !asyncContractViolationDetected) {\n try {\n const result = st.setItem(fullKey(key), raw);\n if (isPromiseLike(result)) {\n handleAsyncStorageContractViolation(\"setItem\", result);\n } else {\n quotaErrorLogged = false;\n accessErrorLogged = false;\n }\n } catch (err) {\n if (!quotaErrorLogged && err instanceof DOMException && err.name === \"QuotaExceededError\") {\n console.error(\n `[Mnemonic] Storage quota exceeded writing key \"${key}\". ` +\n \"Data is cached in memory but will not persist.\",\n );\n quotaErrorLogged = true;\n }\n logAccessError(err);\n }\n }\n emit(key);\n bumpDevToolsVersion(devToolsRoot, namespace, `set:${key}`);\n };\n\n /**\n * Removes a key from both cache and storage.\n * Notifies listeners after the removal completes.\n *\n * @param key - Unprefixed key to remove\n */\n const removeRaw = (key: string) => {\n cache.set(key, null);\n if (st && !asyncContractViolationDetected) {\n try {\n const result = st.removeItem(fullKey(key));\n if (isPromiseLike(result)) {\n handleAsyncStorageContractViolation(\"removeItem\", result);\n } else {\n accessErrorLogged = false;\n }\n } catch (err) {\n logAccessError(err);\n }\n }\n emit(key);\n bumpDevToolsVersion(devToolsRoot, namespace, `remove:${key}`);\n };\n\n /**\n * Subscribes a listener to changes for a specific key.\n * Implements the React external store subscription contract.\n *\n * @param key - Unprefixed key to subscribe to\n * @param listener - Callback invoked when the value changes\n * @returns Unsubscribe function\n */\n const subscribeRaw = (key: string, listener: Listener): Unsubscribe => {\n let set = listeners.get(key);\n if (!set) {\n set = new Set();\n listeners.set(key, set);\n }\n set.add(listener);\n\n // Ensure cache is primed so snapshots are stable.\n readThrough(key);\n\n return () => {\n const s = listeners.get(key);\n if (!s) return;\n s.delete(listener);\n if (s.size === 0) listeners.delete(key);\n };\n };\n\n /**\n * Gets the current snapshot of a key's raw value.\n * Implements the React external store snapshot contract.\n *\n * @param key - Unprefixed key to read\n * @returns Raw string value, or null if not present\n */\n const getRawSnapshot = (key: string) => readThrough(key);\n\n /**\n * Enumerates all keys in this namespace.\n * Iterates through storage and filters keys by namespace prefix.\n *\n * @returns Array of unprefixed key names\n */\n const keys = () => {\n if (asyncContractViolationDetected) {\n return Array.from(cache.entries())\n .filter(([, value]) => value != null)\n .map(([key]) => key);\n }\n if (!canEnumerateKeys) return [];\n return enumerateNamespaceKeys(st, prefix, storageAccessCallbacks);\n };\n\n /**\n * Dumps all key-value pairs in this namespace.\n * Useful for debugging and DevTools integration.\n *\n * @returns Object mapping unprefixed keys to raw string values\n */\n const dump = () => {\n const out: Record<string, string> = {};\n for (const k of keys()) {\n const raw = readThrough(k);\n if (raw != null) out[k] = raw;\n }\n return out;\n };\n\n /**\n * Re-reads keys from the underlying storage, updating the cache and\n * emitting change notifications for any keys whose values differ.\n *\n * @param changedKeys - Optional array of fully-qualified storage keys\n * that changed. When undefined, performs a blanket reload of all\n * actively subscribed keys. When an empty array, does nothing.\n *\n * Called by the onExternalChange subscription when the storage adapter\n * signals that data has changed externally (e.g., from another tab).\n */\n const reloadFromStorage = createReloadFromStorage({\n storage: st,\n hasAsyncContractViolation: () => asyncContractViolationDetected,\n prefix,\n listeners,\n cache,\n emit,\n callbacks: storageAccessCallbacks,\n devToolsRoot,\n namespace,\n });\n\n /**\n * The Mnemonic store API object.\n * Implements the contract expected by useSyncExternalStore.\n */\n const store: MnemonicInternalWithDevToolsHold = {\n prefix,\n canEnumerateKeys,\n subscribeRaw,\n getRawSnapshot,\n setRaw: writeRaw,\n removeRaw,\n keys,\n dump,\n reloadFromStorage,\n schemaMode,\n ssrHydration,\n crossTabSyncMode,\n ...(schemaRegistry ? { schemaRegistry } : {}),\n };\n\n /**\n * DevTools integration.\n * Exposes a weak-provider registry on the window object when enabled.\n */\n if (devToolsRoot) {\n registerDevToolsProvider({\n devToolsRoot,\n namespace,\n store,\n dump,\n keys,\n readThrough,\n writeRaw,\n removeRaw,\n });\n }\n\n return store;\n }, [namespace, storage, enableDevTools, schemaMode, schemaRegistry, ssr?.hydration]);\n\n // Subscribe to external storage changes (e.g., cross-tab BroadcastChannel)\n useEffect(() => {\n if (!storage?.onExternalChange) return;\n return storage.onExternalChange((changedKeys) => store.reloadFromStorage(changedKeys));\n }, [storage, store]);\n\n return <MnemonicContext.Provider value={store}>{children}</MnemonicContext.Provider>;\n}\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\nimport type { ReactNode } from \"react\";\nimport { MnemonicProvider as SchemaMnemonicProvider } from \"./provider\";\nimport type { MnemonicProviderOptions, SchemaRegistry, SchemaMode } from \"./types\";\n\ntype CoreMnemonicProviderOptions = Omit<MnemonicProviderOptions, \"schemaMode\" | \"schemaRegistry\">;\nexport type { CoreMnemonicProviderOptions as MnemonicProviderOptions };\n\nfunction throwCoreProviderSchemaImportError(propName: \"schemaMode\" | \"schemaRegistry\"): never {\n throw new Error(\n `[Mnemonic] MnemonicProvider from react-mnemonic/core does not support ${propName}. Import MnemonicProvider from \"react-mnemonic/schema\" or \"react-mnemonic\" for schema validation, autoschema, and migration support.`,\n );\n}\n\nfunction assertNoSchemaProps(props: { schemaMode?: SchemaMode; schemaRegistry?: SchemaRegistry }): void {\n if (props.schemaMode !== undefined) {\n throwCoreProviderSchemaImportError(\"schemaMode\");\n }\n if (props.schemaRegistry !== undefined) {\n throwCoreProviderSchemaImportError(\"schemaRegistry\");\n }\n}\n\nexport interface MnemonicProviderProps extends Readonly<CoreMnemonicProviderOptions> {\n readonly children: ReactNode;\n}\n\nexport function MnemonicProvider(props: Readonly<MnemonicProviderProps>): ReactNode {\n assertNoSchemaProps(props as MnemonicProviderProps & { schemaMode?: SchemaMode; schemaRegistry?: SchemaRegistry });\n return <SchemaMnemonicProvider {...props} />;\n}\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\n/**\n * @fileoverview Codec implementations for encoding and decoding values to/from storage.\n *\n * This module provides the built-in JSON codec and a factory for creating custom\n * codecs. Codecs handle the bidirectional transformation between typed JavaScript\n * values and their string representations for storage.\n *\n * Codecs are a low-level mechanism for keys that opt out of the JSON Schema\n * validation system. When a schema is registered for a key, the schema's\n * JSON Schema is used for validation and the payload is stored as a JSON value\n * directly (no codec encoding needed).\n */\n\nimport type { Codec } from \"./types\";\n\n/**\n * Custom error class for codec encoding and decoding failures.\n *\n * Thrown when a codec cannot successfully encode a value to a string or\n * decode a string back to its typed representation. This allows callers\n * to distinguish codec errors from other types of errors.\n *\n * @example\n * ```typescript\n * try {\n * const value = JSONCodec.decode('not-valid-json');\n * } catch (error) {\n * if (error instanceof CodecError) {\n * console.error('Failed to decode:', error.message);\n * }\n * }\n * ```\n */\nexport class CodecError extends Error {\n /**\n * The underlying error that caused the codec failure, if any.\n *\n * Useful for debugging when wrapping errors from JSON.parse or\n * other parsing operations.\n */\n readonly cause?: unknown;\n\n /**\n * Creates a new CodecError.\n *\n * @param message - Human-readable error description\n * @param cause - Optional underlying error that caused this failure\n */\n constructor(message: string, cause?: unknown) {\n super(message);\n this.name = \"CodecError\";\n this.cause = cause;\n\n // Required for proper instanceof behavior when targeting ES5\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/**\n * JSON codec for encoding and decoding JSON-serializable values.\n *\n * This is the default codec used by `useMnemonicKey` when no codec is specified.\n * It uses `JSON.stringify` for encoding and `JSON.parse` for decoding, making it\n * suitable for objects, arrays, and primitive values.\n *\n * @remarks\n * - Supports any JSON-serializable type: objects, arrays, strings, numbers, booleans, null\n * - Does not preserve JavaScript-specific types like Date, Map, Set, or undefined\n * - Throws standard JSON parsing errors for malformed JSON strings\n *\n * @example\n * ```typescript\n * // Used automatically as the default\n * const { value, set } = useMnemonicKey('userProfile', {\n * defaultValue: { name: 'Guest', preferences: { theme: 'dark' } }\n * // codec: JSONCodec is implicit\n * });\n *\n * // Can be specified explicitly\n * const { value, set } = useMnemonicKey('settings', {\n * defaultValue: { notifications: true },\n * codec: JSONCodec\n * });\n * ```\n *\n * @see {@link createCodec} - For custom encoding schemes\n */\nexport const JSONCodec: Codec<any> = {\n encode: (value) => JSON.stringify(value),\n decode: (encoded) => JSON.parse(encoded),\n};\n\n/**\n * Factory function for creating custom codecs.\n *\n * Creates a `Codec<T>` from separate encode and decode functions. This is\n * useful for implementing custom serialization strategies for types that\n * aren't supported by JSONCodec. Using a custom codec on a key opts out\n * of JSON Schema validation for that key.\n *\n * @template T - The TypeScript type of values to encode/decode\n *\n * @param encode - Function that converts a typed value to a string\n * @param decode - Function that converts a string back to a typed value\n * @returns A `Codec<T>` object compatible with useMnemonicKey\n *\n * @example\n * ```typescript\n * // Codec for Date objects\n * const DateCodec = createCodec<Date>(\n * (date) => date.toISOString(),\n * (str) => new Date(str)\n * );\n *\n * const { value, set } = useMnemonicKey('lastLogin', {\n * defaultValue: new Date(),\n * codec: DateCodec\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Codec for Set<string>\n * const StringSetCodec = createCodec<Set<string>>(\n * (set) => JSON.stringify(Array.from(set)),\n * (str) => new Set(JSON.parse(str))\n * );\n *\n * const { value, set } = useMnemonicKey('tags', {\n * defaultValue: new Set<string>(),\n * codec: StringSetCodec\n * });\n * ```\n *\n * @see {@link Codec} - The codec interface\n * @see {@link CodecError} - Error to throw when encoding/decoding fails\n * @see {@link JSONCodec} - Built-in codec for JSON values\n */\nexport function createCodec<T>(encode: (value: T) => string, decode: (encoded: string) => T): Codec<T> {\n return { encode, decode };\n}\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\n/**\n * @fileoverview Schema versioning primitives for Mnemonic.\n *\n * This module defines the envelope format used to wrap every persisted value\n * and the error class thrown when schema-related operations fail.\n */\n\n/**\n * Error thrown for schema registry, versioning, and migration failures.\n *\n * Each instance carries a machine-readable {@link code} that categorises\n * the failure. When a `defaultValue` factory is provided to\n * `useMnemonicKey`, the `SchemaError` is passed as the `error` argument\n * so the factory can inspect the failure reason.\n *\n * Error codes:\n *\n * | Code | Meaning |\n * | ------------------------------- | --------------------------------------------------------------- |\n * | `INVALID_ENVELOPE` | The raw stored value is not a valid `MnemonicEnvelope`. |\n * | `SCHEMA_NOT_FOUND` | No schema registered for the stored key + version. |\n * | `WRITE_SCHEMA_REQUIRED` | Strict mode requires a schema to write, but none was found. |\n * | `MIGRATION_PATH_NOT_FOUND` | No contiguous migration path between the stored and latest version. |\n * | `MIGRATION_FAILED` | A migration step threw during execution. |\n * | `MIGRATION_GRAPH_INVALID` | The schema registry helper received an ambiguous or cyclic migration graph. |\n * | `RECONCILE_FAILED` | A read-time reconciliation hook threw or returned an unpersistable value. |\n * | `SCHEMA_REGISTRATION_CONFLICT` | `registerSchema` was called with a conflicting definition. |\n * | `TYPE_MISMATCH` | The decoded value failed JSON Schema validation. |\n * | `MODE_CONFIGURATION_INVALID` | The schema mode requires a capability the registry doesn't provide. |\n *\n * @example\n * ```typescript\n * defaultValue: (error) => {\n * if (error instanceof SchemaError) {\n * console.warn(`Schema issue [${error.code}]:`, error.message);\n * }\n * return { name: \"Guest\" };\n * }\n * ```\n *\n * @see {@link SchemaMode} - How the provider uses schemas\n * @see {@link SchemaRegistry} - Where schemas and migrations are registered\n */\nexport class SchemaError extends Error {\n /**\n * Machine-readable code identifying the category of schema failure.\n */\n readonly code:\n | \"INVALID_ENVELOPE\"\n | \"SCHEMA_NOT_FOUND\"\n | \"WRITE_SCHEMA_REQUIRED\"\n | \"MIGRATION_PATH_NOT_FOUND\"\n | \"MIGRATION_FAILED\"\n | \"MIGRATION_GRAPH_INVALID\"\n | \"RECONCILE_FAILED\"\n | \"SCHEMA_REGISTRATION_CONFLICT\"\n | \"TYPE_MISMATCH\"\n | \"MODE_CONFIGURATION_INVALID\";\n\n /**\n * The underlying error that caused this failure, if any.\n */\n readonly cause?: unknown;\n\n /**\n * Creates a new SchemaError.\n *\n * @param code - Machine-readable failure category\n * @param message - Human-readable error description\n * @param cause - Optional underlying error\n */\n constructor(code: SchemaError[\"code\"], message: string, cause?: unknown) {\n super(message);\n this.name = \"SchemaError\";\n this.code = code;\n this.cause = cause;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/**\n * The JSON envelope that wraps every value persisted by the library.\n *\n * All values are stored as `JSON.stringify({ version, payload })`. The\n * `version` field tells the read path which schema to use for validating\n * the `payload`.\n *\n * - When no schema is active (codec-only mode), `version` is `0` and\n * `payload` is a codec-encoded string.\n * - When a schema is active, `version` corresponds to the schema version\n * and `payload` is the JSON value directly (not string-encoded).\n *\n * @internal\n */\nexport type MnemonicEnvelope = {\n /**\n * Schema version number.\n *\n * Non-negative integer. Any version (including `0`) may have a\n * registered {@link KeySchema}.\n */\n version: number;\n\n /**\n * The stored value.\n *\n * For schema-managed keys, this is a JSON value (object, array,\n * string, number, boolean, or null). For codec-managed keys, this\n * is a string produced by `Codec.encode`.\n */\n payload: unknown;\n};\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\nimport { useSyncExternalStore, useMemo, useEffect, useRef, useCallback, useState } from \"react\";\nimport { useMnemonic } from \"./provider\";\nimport { JSONCodec, CodecError } from \"./codecs\";\nimport { SchemaError, type MnemonicEnvelope } from \"./schema\";\nimport { getRuntimeNodeEnv } from \"./runtime\";\nimport type { Mnemonic, MnemonicKeyDescriptor, MnemonicKeyState, UseMnemonicKeyOptions } from \"./types\";\n\nexport type ReadResult<T, Extra extends object = {}> = {\n value: T;\n rewriteRaw?: string;\n} & Extra;\n\ntype SharedMnemonicKeyContext<T> = {\n api: Mnemonic;\n key: string;\n codec: NonNullable<UseMnemonicKeyOptions<T>[\"codec\"]>;\n codecOpt: UseMnemonicKeyOptions<T>[\"codec\"];\n schema: UseMnemonicKeyOptions<T>[\"schema\"];\n reconcile: UseMnemonicKeyOptions<T>[\"reconcile\"];\n onMount: UseMnemonicKeyOptions<T>[\"onMount\"];\n onChange: UseMnemonicKeyOptions<T>[\"onChange\"];\n listenCrossTab: UseMnemonicKeyOptions<T>[\"listenCrossTab\"];\n getFallback: (error?: CodecError | SchemaError) => T;\n getServerValue: () => T;\n parseEnvelope: (rawText: string) =>\n | {\n ok: true;\n envelope: MnemonicEnvelope;\n }\n | {\n ok: false;\n error: SchemaError;\n };\n decodeStringPayload: <V>(payload: string, activeCodec: { decode: (encoded: string) => V }) => V;\n buildFallbackResult: <Extra extends object = {}>(\n error?: CodecError | SchemaError,\n extra?: Extra,\n ) => ReadResult<T, Extra>;\n developmentRuntime: boolean;\n contractFingerprint: string | null;\n hasMounted: boolean;\n setHasMounted: (value: boolean) => void;\n hydrationMode: NonNullable<UseMnemonicKeyOptions<T>[\"ssr\"]>[\"hydration\"] | undefined;\n ssrOptions: UseMnemonicKeyOptions<T>[\"ssr\"];\n};\n\ntype UseMnemonicKeyStateConfig<T, Extra extends object> = {\n decodeForRead: (rawText: string | null) => ReadResult<T, Extra>;\n encodeForWrite: (nextValue: T) => string;\n additionalDevWarnings?: (args: {\n api: Mnemonic;\n key: string;\n listenCrossTab: UseMnemonicKeyOptions<T>[\"listenCrossTab\"];\n codecOpt: UseMnemonicKeyOptions<T>[\"codec\"];\n schema: UseMnemonicKeyOptions<T>[\"schema\"];\n warnOnce: (id: string, message: string) => void;\n }) => void;\n onDecodedEffect?: (decoded: ReadResult<T, Extra>) => void;\n};\n\ntype ApplyReconcileArgs<T, Extra extends object> = {\n value: T;\n rewriteRaw?: string;\n extra?: Extra;\n persistedVersion: number;\n latestVersion?: number;\n serializeForPersist: (value: T) => string;\n deriveExtra?: (value: T, extra?: Extra) => Extra | undefined;\n};\n\nconst SSR_SNAPSHOT_TOKEN = Symbol(\"mnemonic:ssr-snapshot\");\nconst diagnosticContractRegistry = new WeakMap<object, Map<string, string>>();\nconst diagnosticWarningRegistry = new WeakMap<object, Set<string>>();\nconst diagnosticObjectIds = new WeakMap<object, number>();\nlet nextDiagnosticObjectId = 1;\n\nexport function serializeEnvelope(version: number, payload: unknown): string {\n return JSON.stringify({\n version,\n payload,\n } satisfies MnemonicEnvelope);\n}\n\nexport function withReadMetadata<T, Extra extends object = {}>(\n value: T,\n rewriteRaw?: string,\n extra?: Extra,\n): ReadResult<T, Extra> {\n const result = { value } as ReadResult<T, Extra>;\n if (extra !== undefined) {\n Object.assign(result, extra);\n }\n if (rewriteRaw !== undefined) result.rewriteRaw = rewriteRaw;\n return result;\n}\n\nfunction isDevelopmentRuntime(): boolean {\n return getRuntimeNodeEnv() === \"development\";\n}\n\nfunction getDiagnosticWarnings(api: object): Set<string> {\n let warnings = diagnosticWarningRegistry.get(api);\n if (!warnings) {\n warnings = new Set<string>();\n diagnosticWarningRegistry.set(api, warnings);\n }\n return warnings;\n}\n\nfunction warnOnce(api: object, id: string, message: string): void {\n const warnings = getDiagnosticWarnings(api);\n if (warnings.has(id)) return;\n warnings.add(id);\n console.warn(message);\n}\n\nfunction stableDiagnosticValue(value: unknown): string {\n if (typeof value === \"function\") {\n const source = Function.prototype.toString.call(value).split(/\\s+/).join(\" \").trim();\n const name = value.name || \"anonymous\";\n return `[factory:${name}/${value.length}:${source}]`;\n }\n if (typeof value === \"bigint\") return `${value.toString()}n`;\n if (typeof value === \"symbol\") return value.toString();\n if (value === undefined) return \"undefined\";\n try {\n return JSON.stringify(value);\n } catch {\n const tag = Object.prototype.toString.call(value);\n if (value !== null && (typeof value === \"object\" || typeof value === \"function\")) {\n return `${tag}#${getDiagnosticObjectId(value)}`;\n }\n return tag;\n }\n}\n\nfunction isObjectLike(value: unknown): value is object {\n return value !== null && (typeof value === \"object\" || typeof value === \"function\");\n}\n\nfunction objectHasOwn(value: object, property: PropertyKey): boolean {\n const hasOwn = (Object as typeof Object & { hasOwn?: (target: object, key: PropertyKey) => boolean }).hasOwn;\n if (typeof hasOwn === \"function\") {\n return hasOwn(value, property);\n }\n return Object.getOwnPropertyDescriptor(value, property) !== undefined;\n}\n\nfunction getDiagnosticObjectId(value: object): number {\n const existing = diagnosticObjectIds.get(value);\n if (existing !== undefined) return existing;\n const id = nextDiagnosticObjectId++;\n diagnosticObjectIds.set(value, id);\n return id;\n}\n\nfunction buildContractFingerprint<T>({\n api,\n key,\n defaultValue,\n codecOpt,\n schemaVersion,\n reconcile,\n listenCrossTab,\n ssrOptions,\n}: {\n api: object;\n key: string;\n defaultValue: UseMnemonicKeyOptions<T>[\"defaultValue\"];\n codecOpt: UseMnemonicKeyOptions<T>[\"codec\"];\n schemaVersion?: number;\n reconcile: UseMnemonicKeyOptions<T>[\"reconcile\"];\n listenCrossTab: UseMnemonicKeyOptions<T>[\"listenCrossTab\"];\n ssrOptions: UseMnemonicKeyOptions<T>[\"ssr\"];\n}): string {\n const codecSignature =\n codecOpt == null || !isObjectLike(codecOpt)\n ? \"default-json-codec\"\n : `codec:${stableDiagnosticValue((codecOpt as { encode?: unknown }).encode)}:${stableDiagnosticValue((codecOpt as { decode?: unknown }).decode)}`;\n const reconcileSignature =\n reconcile == null || !isObjectLike(reconcile)\n ? \"no-reconcile\"\n : `reconcile:${stableDiagnosticValue(reconcile)}`;\n\n return JSON.stringify({\n key,\n defaultValue: stableDiagnosticValue(defaultValue),\n codec: codecSignature,\n schemaVersion: schemaVersion ?? null,\n listenCrossTab: Boolean(listenCrossTab),\n reconcile: reconcileSignature,\n ssrHydration: ssrOptions?.hydration ?? null,\n hasServerValue: ssrOptions?.serverValue !== undefined,\n providerHydration: (api as { ssrHydration?: string }).ssrHydration ?? null,\n });\n}\n\nexport function resolveMnemonicKeyArgs<T>(\n keyOrDescriptor: string | MnemonicKeyDescriptor<T, string>,\n options?: UseMnemonicKeyOptions<T>,\n): MnemonicKeyDescriptor<T, string> {\n if (typeof keyOrDescriptor !== \"string\") {\n return keyOrDescriptor;\n }\n if (!options) {\n throw new Error(\"useMnemonicKey requires options when called with a string key\");\n }\n return {\n key: keyOrDescriptor,\n options,\n };\n}\n\nexport function useMnemonicKeyShared<T>(\n keyOrDescriptor: string | MnemonicKeyDescriptor<T, string>,\n options: UseMnemonicKeyOptions<T> | undefined,\n schemaVersion?: number,\n): SharedMnemonicKeyContext<T> {\n const descriptor = resolveMnemonicKeyArgs(keyOrDescriptor, options);\n const key = descriptor.key;\n const resolvedOptions = descriptor.options;\n const api = useMnemonic();\n\n const {\n defaultValue,\n onMount,\n onChange,\n listenCrossTab,\n codec: codecOpt,\n schema,\n reconcile,\n ssr: ssrOptions,\n } = resolvedOptions;\n\n const codec = codecOpt ?? JSONCodec;\n const hydrationMode = ssrOptions?.hydration ?? api.ssrHydration;\n const [hasMounted, setHasMounted] = useState(hydrationMode !== \"client-only\");\n const developmentRuntime = isDevelopmentRuntime();\n const contractFingerprint = useMemo(\n () =>\n developmentRuntime\n ? buildContractFingerprint({\n api,\n key,\n defaultValue,\n codecOpt,\n ...(schemaVersion === undefined ? {} : { schemaVersion }),\n reconcile,\n listenCrossTab,\n ssrOptions,\n })\n : null,\n [\n developmentRuntime,\n api,\n key,\n defaultValue,\n codecOpt,\n schemaVersion,\n reconcile,\n listenCrossTab,\n ssrOptions?.hydration,\n ssrOptions?.serverValue,\n ],\n );\n\n const getFallback = useCallback(\n (error?: CodecError | SchemaError) =>\n typeof defaultValue === \"function\"\n ? (defaultValue as (error?: CodecError | SchemaError) => T)(error)\n : defaultValue,\n [defaultValue],\n );\n\n const getServerValue = useCallback(() => {\n const serverValue = ssrOptions?.serverValue;\n if (serverValue === undefined) {\n return getFallback();\n }\n return typeof serverValue === \"function\" ? (serverValue as () => T)() : serverValue;\n }, [getFallback, ssrOptions?.serverValue]);\n\n const parseEnvelope = useCallback(\n (rawText: string): { ok: true; envelope: MnemonicEnvelope } | { ok: false; error: SchemaError } => {\n try {\n const parsed = JSON.parse(rawText) as MnemonicEnvelope;\n if (\n typeof parsed !== \"object\" ||\n parsed == null ||\n !Number.isInteger(parsed.version) ||\n parsed.version < 0 ||\n !objectHasOwn(parsed, \"payload\")\n ) {\n return {\n ok: false,\n error: new SchemaError(\"INVALID_ENVELOPE\", `Invalid envelope for key \"${key}\"`),\n };\n }\n return { ok: true, envelope: parsed };\n } catch (err) {\n return {\n ok: false,\n error: new SchemaError(\"INVALID_ENVELOPE\", `Invalid envelope for key \"${key}\"`, err),\n };\n }\n },\n [key],\n );\n\n const decodeStringPayload = useCallback(\n <V>(payload: string, activeCodec: { decode: (encoded: string) => V }) => {\n try {\n return activeCodec.decode(payload);\n } catch (err) {\n throw err instanceof CodecError ? err : new CodecError(`Codec decode failed for key \"${key}\"`, err);\n }\n },\n [key],\n );\n\n const buildFallbackResult = useCallback(\n <Extra extends object = {}>(error?: CodecError | SchemaError, extra?: Extra): ReadResult<T, Extra> => {\n return withReadMetadata(getFallback(error), undefined, extra);\n },\n [getFallback],\n );\n\n return {\n api,\n key,\n codec,\n codecOpt,\n schema,\n reconcile,\n onMount,\n onChange,\n listenCrossTab,\n getFallback,\n getServerValue,\n parseEnvelope,\n decodeStringPayload,\n buildFallbackResult,\n developmentRuntime,\n contractFingerprint,\n hasMounted,\n setHasMounted,\n hydrationMode,\n ssrOptions,\n };\n}\n\nexport function useApplyReconcile<T, Extra extends object = {}>({\n key,\n reconcile,\n buildFallbackResult,\n}: {\n key: string;\n reconcile: UseMnemonicKeyOptions<T>[\"reconcile\"];\n buildFallbackResult: <ResultExtra extends object = {}>(\n error?: CodecError | SchemaError,\n extra?: ResultExtra,\n ) => ReadResult<T, ResultExtra>;\n}) {\n return useCallback(\n ({\n value,\n rewriteRaw,\n extra,\n persistedVersion,\n latestVersion,\n serializeForPersist,\n deriveExtra,\n }: ApplyReconcileArgs<T, Extra>): ReadResult<T, Extra> => {\n if (!reconcile) {\n return withReadMetadata(value, rewriteRaw, extra);\n }\n\n const context: { key: string; persistedVersion: number; latestVersion?: number } = {\n key,\n persistedVersion,\n };\n if (latestVersion !== undefined) {\n context.latestVersion = latestVersion;\n }\n\n const baselineSerialized = (() => {\n try {\n return serializeForPersist(value);\n } catch {\n return rewriteRaw;\n }\n })();\n\n try {\n const reconciled = reconcile(value, context);\n const nextExtra = deriveExtra ? deriveExtra(reconciled, extra) : extra;\n const nextSerialized = serializeForPersist(reconciled);\n const nextRewriteRaw =\n baselineSerialized === undefined || nextSerialized !== baselineSerialized\n ? nextSerialized\n : rewriteRaw;\n return withReadMetadata(reconciled, nextRewriteRaw, nextExtra);\n } catch (err) {\n const typedErr =\n err instanceof SchemaError\n ? err\n : new SchemaError(\"RECONCILE_FAILED\", `Reconciliation failed for key \"${key}\"`, err);\n return buildFallbackResult(typedErr, extra);\n }\n },\n [buildFallbackResult, key, reconcile],\n );\n}\n\nexport function useMnemonicKeyState<T, Extra extends object>(\n shared: SharedMnemonicKeyContext<T>,\n config: UseMnemonicKeyStateConfig<T, Extra>,\n): MnemonicKeyState<T> {\n const {\n api,\n key,\n codecOpt,\n schema,\n onMount,\n onChange,\n listenCrossTab,\n getFallback,\n getServerValue,\n developmentRuntime,\n contractFingerprint,\n hasMounted,\n setHasMounted,\n hydrationMode,\n ssrOptions,\n } = shared;\n const { decodeForRead, encodeForWrite, additionalDevWarnings, onDecodedEffect } = config;\n\n const getServerRawSnapshot = useCallback(\n (): string | typeof SSR_SNAPSHOT_TOKEN | null =>\n ssrOptions?.serverValue === undefined ? null : SSR_SNAPSHOT_TOKEN,\n [ssrOptions?.serverValue],\n );\n\n const deferStorageRead = hydrationMode === \"client-only\" && !hasMounted;\n const subscribe = useCallback(\n (listener: () => void) => {\n if (deferStorageRead) {\n return () => undefined;\n }\n return api.subscribeRaw(key, listener);\n },\n [api, deferStorageRead, key],\n );\n\n const raw = useSyncExternalStore(\n subscribe,\n () => (deferStorageRead ? getServerRawSnapshot() : api.getRawSnapshot(key)),\n getServerRawSnapshot,\n );\n\n const decoded = useMemo(() => {\n if (raw === SSR_SNAPSHOT_TOKEN) {\n return withReadMetadata<T, Extra>(getServerValue());\n }\n return decodeForRead(raw);\n }, [decodeForRead, getServerValue, raw]);\n const value = decoded.value;\n\n useEffect(() => {\n if (!developmentRuntime) return;\n\n const globalWindow = (globalThis as { window?: Window }).window;\n\n if (listenCrossTab && (api.crossTabSyncMode ?? \"none\") === \"none\" && globalWindow !== undefined) {\n warnOnce(\n api,\n `listenCrossTab:${key}`,\n `[Mnemonic] useMnemonicKey(\"${key}\") enabled listenCrossTab, but the active storage backend may not be able to notify external changes. If you're using a custom Storage-like wrapper around localStorage, ensure it forwards browser \"storage\" events or implements storage.onExternalChange(...); otherwise, use localStorage or implement storage.onExternalChange(...) on your custom backend.`,\n );\n }\n\n additionalDevWarnings?.({\n api,\n key,\n listenCrossTab,\n codecOpt,\n schema,\n warnOnce: (id, message) => warnOnce(api, id, message),\n });\n\n let keyContracts = diagnosticContractRegistry.get(api);\n if (!keyContracts) {\n keyContracts = new Map<string, string>();\n diagnosticContractRegistry.set(api, keyContracts);\n }\n\n if (contractFingerprint === null) {\n return;\n }\n const previousContract = keyContracts.get(key);\n if (previousContract === undefined) {\n keyContracts.set(key, contractFingerprint);\n return;\n }\n if (previousContract === contractFingerprint) {\n return;\n }\n\n warnOnce(\n api,\n `contract-conflict:${key}`,\n `[Mnemonic] Conflicting useMnemonicKey contracts detected for key \"${key}\" in namespace \"${api.prefix.slice(0, -1)}\". Reuse a shared descriptor with defineMnemonicKey(...) or align defaultValue/codec/schema/reconcile options so every consumer describes the same persisted contract.`,\n );\n }, [\n additionalDevWarnings,\n api,\n key,\n developmentRuntime,\n contractFingerprint,\n listenCrossTab,\n codecOpt,\n schema,\n api.crossTabSyncMode,\n ]);\n\n useEffect(() => {\n if (hasMounted) return;\n setHasMounted(true);\n }, [hasMounted, setHasMounted]);\n\n useEffect(() => {\n if (decoded.rewriteRaw && decoded.rewriteRaw !== raw) {\n api.setRaw(key, decoded.rewriteRaw);\n }\n }, [api, decoded.rewriteRaw, key, raw]);\n\n useEffect(() => {\n onDecodedEffect?.(decoded);\n }, [decoded, onDecodedEffect]);\n\n const prevRef = useRef<T>(value);\n\n const mounted = useRef(false);\n useEffect(() => {\n if (mounted.current) return;\n mounted.current = true;\n onMount?.(value);\n prevRef.current = value;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const prev = prevRef.current;\n if (Object.is(prev, value)) return;\n prevRef.current = value;\n onChange?.(value, prev);\n }, [value, onChange]);\n\n useEffect(() => {\n if (!listenCrossTab) return;\n const globalWindow = (globalThis as { window?: Window }).window;\n if (globalWindow === undefined) return;\n\n const storageKey = api.prefix + key;\n\n const handler = (e: StorageEvent) => {\n if (e.key === null) {\n api.removeRaw(key);\n return;\n }\n if (e.key !== storageKey) return;\n if (e.newValue == null) {\n api.removeRaw(key);\n return;\n }\n api.setRaw(key, e.newValue);\n };\n\n globalWindow.addEventListener(\"storage\", handler);\n return () => globalWindow.removeEventListener(\"storage\", handler);\n }, [listenCrossTab, api, key]);\n\n const set = useMemo(() => {\n return (next: T | ((cur: T) => T)) => {\n const nextVal =\n typeof next === \"function\" ? (next as (c: T) => T)(decodeForRead(api.getRawSnapshot(key)).value) : next;\n try {\n const encoded = encodeForWrite(nextVal);\n api.setRaw(key, encoded);\n } catch (err) {\n if (err instanceof SchemaError) {\n console.error(`[Mnemonic] Schema error for key \"${key}\" (${err.code}):`, err.message);\n return;\n }\n if (err instanceof CodecError) {\n console.error(`[Mnemonic] Codec encode error for key \"${key}\":`, err.message);\n return;\n }\n console.error(`[Mnemonic] Failed to persist key \"${key}\":`, err);\n }\n };\n }, [api, key, decodeForRead, encodeForWrite]);\n\n const reset = useMemo(() => {\n return () => {\n const v = getFallback();\n try {\n const encoded = encodeForWrite(v);\n api.setRaw(key, encoded);\n } catch (err) {\n if (err instanceof SchemaError) {\n console.error(`[Mnemonic] Schema error for key \"${key}\" (${err.code}):`, err.message);\n return;\n }\n if (err instanceof CodecError) {\n console.error(`[Mnemonic] Codec encode error for key \"${key}\":`, err.message);\n }\n return;\n }\n };\n }, [api, key, getFallback, encodeForWrite]);\n\n const remove = useMemo(() => {\n return () => api.removeRaw(key);\n }, [api, key]);\n\n return useMemo<MnemonicKeyState<T>>(\n () => ({\n value,\n set,\n reset,\n remove,\n }),\n [value, set, reset, remove],\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\nimport { useCallback } from \"react\";\nimport { CodecError } from \"./codecs\";\nimport { SchemaError, type MnemonicEnvelope } from \"./schema\";\nimport { serializeEnvelope, useApplyReconcile, useMnemonicKeyShared, useMnemonicKeyState } from \"./use-shared\";\nimport type { MnemonicKeyDescriptor, MnemonicKeyState, UseMnemonicKeyOptions } from \"./types\";\n\nfunction throwCoreSchemaImportError(key: string): never {\n throw new Error(\n `[Mnemonic] useMnemonicKey(\"${key}\") requested schema features from react-mnemonic/core. Import useMnemonicKey from \"react-mnemonic/schema\" or \"react-mnemonic\" for schema validation, autoschema, and migration support.`,\n );\n}\n\nfunction useCoreRuntime<T>(\n keyOrDescriptor: string | MnemonicKeyDescriptor<T, string>,\n options?: UseMnemonicKeyOptions<T>,\n): MnemonicKeyState<T> {\n const shared = useMnemonicKeyShared(keyOrDescriptor, options);\n const { api, key, codec, schema, reconcile, parseEnvelope, decodeStringPayload, buildFallbackResult } = shared;\n\n if (schema?.version !== undefined || api.schemaMode !== \"default\") {\n throwCoreSchemaImportError(key);\n }\n\n const applyReconcile = useApplyReconcile<T>({\n key,\n reconcile,\n buildFallbackResult,\n });\n\n const encodeForWrite = useCallback(\n (nextValue: T): string => {\n return serializeEnvelope(0, codec.encode(nextValue));\n },\n [codec],\n );\n\n const decodeForRead = useCallback(\n (rawText: string | null) => {\n if (rawText == null) return buildFallbackResult();\n\n const parsed = parseEnvelope(rawText);\n if (!parsed.ok) return buildFallbackResult(parsed.error);\n\n const envelope: MnemonicEnvelope = parsed.envelope;\n if (typeof envelope.payload !== \"string\") {\n return applyReconcile({\n value: envelope.payload as T,\n persistedVersion: envelope.version,\n serializeForPersist: encodeForWrite,\n });\n }\n\n try {\n const decoded = decodeStringPayload<T>(envelope.payload, codec);\n return applyReconcile({\n value: decoded,\n persistedVersion: envelope.version,\n serializeForPersist: encodeForWrite,\n });\n } catch (err) {\n return buildFallbackResult(err as CodecError | SchemaError);\n }\n },\n [applyReconcile, buildFallbackResult, codec, decodeStringPayload, encodeForWrite, parseEnvelope],\n );\n\n const additionalDevWarnings = useCallback(\n ({ warnOnce }: { warnOnce: (id: string, message: string) => void }) => {\n if (!api.schemaRegistry) return;\n warnOnce(\n `core-schema-registry:${key}`,\n `[Mnemonic] useMnemonicKey(\"${key}\") is running from react-mnemonic/core, so registered schemas are ignored for this key. Import useMnemonicKey from \"react-mnemonic/schema\" or \"react-mnemonic\" to enable schema validation and migrations.`,\n );\n },\n [api.schemaRegistry, key],\n );\n\n return useMnemonicKeyState(shared, {\n decodeForRead,\n encodeForWrite,\n additionalDevWarnings,\n });\n}\n\nexport function useMnemonicKey<T, K extends string>(descriptor: MnemonicKeyDescriptor<T, K>): MnemonicKeyState<T>;\nexport function useMnemonicKey<T>(key: string, options: UseMnemonicKeyOptions<T>): MnemonicKeyState<T>;\nexport function useMnemonicKey<T>(\n keyOrDescriptor: string | MnemonicKeyDescriptor<T, string>,\n options?: UseMnemonicKeyOptions<T>,\n): MnemonicKeyState<T> {\n return useCoreRuntime(keyOrDescriptor, options);\n}\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\nimport { useCallback, useMemo } from \"react\";\nimport { useMnemonic } from \"./provider\";\nimport { getRuntimeNodeEnv } from \"./runtime\";\nimport type {\n MnemonicRecoveryAction,\n MnemonicRecoveryEvent,\n MnemonicRecoveryHook,\n UseMnemonicRecoveryOptions,\n} from \"./types\";\n\nfunction uniqueKeys(keys: readonly string[]): string[] {\n return [...new Set(keys)];\n}\n\nfunction isDevelopmentRuntime(): boolean {\n return getRuntimeNodeEnv() === \"development\";\n}\n\nconst recoveryDiagnosticWarnings = new WeakMap<object, Set<string>>();\n\nfunction warnRecoveryOnce(api: object, id: string, message: string): void {\n let warnings = recoveryDiagnosticWarnings.get(api);\n if (!warnings) {\n warnings = new Set<string>();\n recoveryDiagnosticWarnings.set(api, warnings);\n }\n if (warnings.has(id)) return;\n warnings.add(id);\n console.warn(message);\n}\n\n/**\n * Hook for namespace-scoped recovery actions such as hard reset and selective clear.\n *\n * Applications can use this to offer self-service recovery UX for corrupt or\n * legacy persisted state. The hook operates on the current provider namespace.\n *\n * See the\n * [Reset and Recovery guide](https://thirtytwobits.github.io/react-mnemonic/docs/guides/reset-and-recovery)\n * for soft-reset and hard-reset patterns.\n *\n * @param options - Optional recovery callback for telemetry/auditing\n * @returns Namespace recovery helpers\n *\n * @throws {Error} If used outside of a MnemonicProvider\n */\nexport function useMnemonicRecovery(options: UseMnemonicRecoveryOptions = {}): MnemonicRecoveryHook {\n const api = useMnemonic();\n const { onRecover } = options;\n\n const namespace = useMemo(() => (api.prefix.endsWith(\".\") ? api.prefix.slice(0, -1) : api.prefix), [api.prefix]);\n\n const emitRecovery = useCallback(\n (action: MnemonicRecoveryAction, clearedKeys: string[]) => {\n const event: MnemonicRecoveryEvent = {\n action,\n namespace,\n clearedKeys,\n };\n onRecover?.(event);\n },\n [namespace, onRecover],\n );\n\n const listKeys = useCallback(() => api.keys(), [api]);\n\n const clearResolvedKeys = useCallback(\n (action: MnemonicRecoveryAction, keys: readonly string[]) => {\n const clearedKeys = uniqueKeys(keys);\n for (const key of clearedKeys) {\n api.removeRaw(key);\n }\n emitRecovery(action, clearedKeys);\n return clearedKeys;\n },\n [api, emitRecovery],\n );\n\n const clearKeys = useCallback(\n (keys: readonly string[]) => clearResolvedKeys(\"clear-keys\", keys),\n [clearResolvedKeys],\n );\n\n const clearAll = useCallback(() => {\n if (!api.canEnumerateKeys) {\n if (isDevelopmentRuntime()) {\n warnRecoveryOnce(\n api,\n \"recovery-clear-all-non-enumerable\",\n `[Mnemonic] clearAll() requires an enumerable storage backend in namespace \"${namespace}\". Use clearKeys([...]) with an explicit durable-key list, or supply a storage backend that implements length and key(index).`,\n );\n }\n throw new Error(\n \"clearAll requires an enumerable storage backend. Use clearKeys([...]) with an explicit key list instead.\",\n );\n }\n return clearResolvedKeys(\"clear-all\", api.keys());\n }, [api, clearResolvedKeys, namespace]);\n\n const clearMatching = useCallback(\n (predicate: (key: string) => boolean) => {\n if (!api.canEnumerateKeys) {\n if (isDevelopmentRuntime()) {\n warnRecoveryOnce(\n api,\n \"recovery-clear-matching-non-enumerable\",\n `[Mnemonic] clearMatching() requires an enumerable storage backend in namespace \"${namespace}\". Use clearKeys([...]) with an explicit durable-key list, or supply a storage backend that implements length and key(index).`,\n );\n }\n throw new Error(\n \"clearMatching requires an enumerable storage backend. Use clearKeys([...]) with an explicit key list instead.\",\n );\n }\n return clearResolvedKeys(\n \"clear-matching\",\n api.keys().filter((key) => predicate(key)),\n );\n },\n [api, clearResolvedKeys, namespace],\n );\n\n return useMemo(\n () => ({\n namespace,\n canEnumerateKeys: api.canEnumerateKeys,\n listKeys,\n clearAll,\n clearKeys,\n clearMatching,\n }),\n [namespace, api.canEnumerateKeys, listKeys, clearAll, clearKeys, clearMatching],\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\nimport type { JsonSchema } from \"./json-schema\";\nimport type { KeySchema, MnemonicKeyDescriptor, SchemaBoundKeyOptions, UseMnemonicKeyOptions } from \"./types\";\n\n/**\n * Define a reusable, importable contract for a persisted key.\n *\n * This packages the storage key and the canonical `useMnemonicKey(...)`\n * options into a single object that can be shared across components, docs,\n * and generated code.\n *\n * @template K - The literal storage key name\n * @template T - The decoded value type for the key\n *\n * @param key - The unprefixed storage key\n * @param options - Canonical hook options for the key\n * @returns A descriptor that can be passed directly to `useMnemonicKey(...)`\n *\n * @example\n * ```typescript\n * const themeKey = defineMnemonicKey(\"theme\", {\n * defaultValue: \"light\" as \"light\" | \"dark\",\n * listenCrossTab: true,\n * });\n *\n * const { value, set } = useMnemonicKey(themeKey);\n * ```\n */\nexport function defineMnemonicKey<const K extends string, T>(\n key: K,\n options: UseMnemonicKeyOptions<T>,\n): MnemonicKeyDescriptor<T, K>;\nexport function defineMnemonicKey<const K extends string, TSchema extends KeySchema<unknown, K, JsonSchema>>(\n keySchema: TSchema,\n options: SchemaBoundKeyOptions<TSchema extends KeySchema<infer TValue, string, JsonSchema> ? TValue : never>,\n): MnemonicKeyDescriptor<TSchema extends KeySchema<infer TValue, string, JsonSchema> ? TValue : never, TSchema[\"key\"]>;\nexport function defineMnemonicKey(\n keyOrSchema: string | KeySchema<unknown, string, JsonSchema>,\n options: UseMnemonicKeyOptions<unknown> | SchemaBoundKeyOptions<unknown>,\n): MnemonicKeyDescriptor<unknown, string> {\n if (typeof keyOrSchema !== \"string\") {\n return Object.freeze({\n key: keyOrSchema.key,\n options: {\n ...options,\n schema: { version: keyOrSchema.version },\n },\n });\n }\n\n return Object.freeze({\n key: keyOrSchema,\n options,\n });\n}\n"]}
1
+ {"version":3,"sources":["../src/Mnemonic/codecs.ts","../src/Mnemonic/json-schema.ts","../src/Mnemonic/schema.ts","../src/Mnemonic/runtime.ts","../src/Mnemonic/use-shared.ts","../src/Mnemonic/optional-bridge-adapter.ts","../src/Mnemonic/optional-bridge.tsx","../src/Mnemonic/optional-bridge-provider.tsx","../src/Mnemonic/provider.tsx","../src/Mnemonic/provider-core.tsx","../src/Mnemonic/use-core.ts","../src/Mnemonic/recovery.ts","../src/Mnemonic/key.ts"],"names":["objectHasOwn","useState","useMemo","useCallback","parseEnvelope","decodeStringPayload","buildFallbackResult","useSyncExternalStore","useEffect","useRef","createContext","createElement","useContext","store","jsx","MnemonicProvider","warnOnce","isDevelopmentRuntime"],"mappings":"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","file":"core.cjs","sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\n/**\n * @fileoverview Codec implementations for encoding and decoding values to/from storage.\n *\n * This module provides the built-in JSON codec and a factory for creating custom\n * codecs. Codecs handle the bidirectional transformation between typed JavaScript\n * values and their string representations for storage.\n *\n * Codecs are a low-level mechanism for keys that opt out of the JSON Schema\n * validation system. When a schema is registered for a key, the schema's\n * JSON Schema is used for validation and the payload is stored as a JSON value\n * directly (no codec encoding needed).\n */\n\nimport type { Codec } from \"./types\";\n\n/**\n * Custom error class for codec encoding and decoding failures.\n *\n * Thrown when a codec cannot successfully encode a value to a string or\n * decode a string back to its typed representation. This allows callers\n * to distinguish codec errors from other types of errors.\n *\n * @example\n * ```typescript\n * try {\n * const value = JSONCodec.decode('not-valid-json');\n * } catch (error) {\n * if (error instanceof CodecError) {\n * console.error('Failed to decode:', error.message);\n * }\n * }\n * ```\n */\nexport class CodecError extends Error {\n /**\n * The underlying error that caused the codec failure, if any.\n *\n * Useful for debugging when wrapping errors from JSON.parse or\n * other parsing operations.\n */\n readonly cause?: unknown;\n\n /**\n * Creates a new CodecError.\n *\n * @param message - Human-readable error description\n * @param cause - Optional underlying error that caused this failure\n */\n constructor(message: string, cause?: unknown) {\n super(message);\n this.name = \"CodecError\";\n this.cause = cause;\n\n // Required for proper instanceof behavior when targeting ES5\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/**\n * JSON codec for encoding and decoding JSON-serializable values.\n *\n * This is the default codec used by `useMnemonicKey` when no codec is specified.\n * It uses `JSON.stringify` for encoding and `JSON.parse` for decoding, making it\n * suitable for objects, arrays, and primitive values.\n *\n * @remarks\n * - Supports any JSON-serializable type: objects, arrays, strings, numbers, booleans, null\n * - Does not preserve JavaScript-specific types like Date, Map, Set, or undefined\n * - Throws standard JSON parsing errors for malformed JSON strings\n *\n * @example\n * ```typescript\n * // Used automatically as the default\n * const { value, set } = useMnemonicKey('userProfile', {\n * defaultValue: { name: 'Guest', preferences: { theme: 'dark' } }\n * // codec: JSONCodec is implicit\n * });\n *\n * // Can be specified explicitly\n * const { value, set } = useMnemonicKey('settings', {\n * defaultValue: { notifications: true },\n * codec: JSONCodec\n * });\n * ```\n *\n * @see {@link createCodec} - For custom encoding schemes\n */\nexport const JSONCodec: Codec<any> = {\n encode: (value) => JSON.stringify(value),\n decode: (encoded) => JSON.parse(encoded),\n};\n\n/**\n * Factory function for creating custom codecs.\n *\n * Creates a `Codec<T>` from separate encode and decode functions. This is\n * useful for implementing custom serialization strategies for types that\n * aren't supported by JSONCodec. Using a custom codec on a key opts out\n * of JSON Schema validation for that key.\n *\n * @template T - The TypeScript type of values to encode/decode\n *\n * @param encode - Function that converts a typed value to a string\n * @param decode - Function that converts a string back to a typed value\n * @returns A `Codec<T>` object compatible with useMnemonicKey\n *\n * @example\n * ```typescript\n * // Codec for Date objects\n * const DateCodec = createCodec<Date>(\n * (date) => date.toISOString(),\n * (str) => new Date(str)\n * );\n *\n * const { value, set } = useMnemonicKey('lastLogin', {\n * defaultValue: new Date(),\n * codec: DateCodec\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Codec for Set<string>\n * const StringSetCodec = createCodec<Set<string>>(\n * (set) => JSON.stringify(Array.from(set)),\n * (str) => new Set(JSON.parse(str))\n * );\n *\n * const { value, set } = useMnemonicKey('tags', {\n * defaultValue: new Set<string>(),\n * codec: StringSetCodec\n * });\n * ```\n *\n * @see {@link Codec} - The codec interface\n * @see {@link CodecError} - Error to throw when encoding/decoding fails\n * @see {@link JSONCodec} - Built-in codec for JSON values\n */\nexport function createCodec<T>(encode: (value: T) => string, decode: (encoded: string) => T): Codec<T> {\n return { encode, decode };\n}\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\n/**\n * @fileoverview JSON Schema subset validator for Mnemonic.\n *\n * This module implements a minimal JSON Schema validator sufficient for\n * validating localStorage state. Only a subset of JSON Schema keywords\n * are supported; see {@link JsonSchema} for the full list.\n *\n * JSON Schema documents are plain JSON objects (inherently serializable),\n * making them suitable for storage alongside the data they describe.\n */\n\n/**\n * Supported JSON Schema type keywords.\n *\n * `\"integer\"` is a JSON Schema keyword meaning \"a number that is a whole number.\"\n */\nexport type JsonSchemaType = \"string\" | \"number\" | \"integer\" | \"boolean\" | \"null\" | \"object\" | \"array\";\n\n/**\n * A subset of JSON Schema sufficient for localStorage state management.\n *\n * Supported keywords:\n * type, enum, const,\n * minimum, maximum, exclusiveMinimum, exclusiveMaximum,\n * minLength, maxLength,\n * properties, required, additionalProperties,\n * items, minItems, maxItems\n *\n * Deliberately omitted: $ref, $id, $schema, $defs, allOf, anyOf,\n * oneOf, not, pattern, format, patternProperties, if/then/else,\n * dependencies, uniqueItems, multipleOf, propertyNames.\n *\n * An empty schema `{}` accepts any value.\n */\nexport interface JsonSchema {\n /** The expected JSON type(s). An array form like `[\"string\", \"null\"]` accepts either type. */\n type?: JsonSchemaType | JsonSchemaType[];\n\n /** The value must be deeply equal to one of these entries. */\n enum?: readonly unknown[];\n\n /** The value must be deeply equal to this exact value. */\n const?: unknown;\n\n /** Inclusive lower bound for numbers. */\n minimum?: number;\n\n /** Inclusive upper bound for numbers. */\n maximum?: number;\n\n /** Exclusive lower bound for numbers. */\n exclusiveMinimum?: number;\n\n /** Exclusive upper bound for numbers. */\n exclusiveMaximum?: number;\n\n /** Minimum string length (inclusive). */\n minLength?: number;\n\n /** Maximum string length (inclusive). */\n maxLength?: number;\n\n /** Property name to sub-schema mapping for objects. */\n properties?: Record<string, JsonSchema>;\n\n /** Properties that must be present on the object. */\n required?: readonly string[];\n\n /**\n * Controls extra properties not listed in `properties`.\n * `false` disallows them. A schema validates their values.\n * `true` (or omitted) allows anything.\n */\n additionalProperties?: boolean | JsonSchema;\n\n /** Schema applied to every element of an array. */\n items?: JsonSchema;\n\n /** Minimum array length (inclusive). */\n minItems?: number;\n\n /** Maximum array length (inclusive). */\n maxItems?: number;\n}\n\n/**\n * A single validation error produced by {@link validateJsonSchema}.\n */\nexport type JsonSchemaValidationError = {\n /** JSON Pointer path to the failing value (e.g., \"/foo/bar/0\"). Empty string for root. */\n path: string;\n /** Human-readable error description. */\n message: string;\n /** The JSON Schema keyword that failed. */\n keyword: string;\n};\n\n/**\n * Tests whether a value matches a single JSON Schema type keyword.\n */\nfunction matchesType(value: unknown, type: JsonSchemaType): boolean {\n switch (type) {\n case \"string\":\n return typeof value === \"string\";\n case \"number\":\n return typeof value === \"number\" && Number.isFinite(value);\n case \"integer\":\n return typeof value === \"number\" && Number.isInteger(value);\n case \"boolean\":\n return typeof value === \"boolean\";\n case \"null\":\n return value === null;\n case \"object\":\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n case \"array\":\n return Array.isArray(value);\n default:\n return false;\n }\n}\n\n/**\n * Structural deep equality for JSON values (null, booleans, numbers, strings,\n * arrays, and plain objects). Used by `enum` and `const` keywords.\n */\nfunction jsonDeepEqualArray(a: readonly unknown[], b: readonly unknown[]): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (!jsonDeepEqual(a[i], b[i])) return false;\n }\n return true;\n}\n\nfunction jsonDeepEqualObject(a: Record<string, unknown>, b: Record<string, unknown>): boolean {\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) return false;\n for (const key of aKeys) {\n if (!objectHasOwn(b, key)) return false;\n if (!jsonDeepEqual(a[key], b[key])) return false;\n }\n return true;\n}\n\nexport function jsonDeepEqual(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\n if (Array.isArray(a)) {\n if (!Array.isArray(b)) return false;\n return jsonDeepEqualArray(a, b);\n }\n\n if (typeof a === \"object\") {\n if (Array.isArray(b)) return false;\n return jsonDeepEqualObject(a as Record<string, unknown>, b as Record<string, unknown>);\n }\n\n return false;\n}\n\n/**\n * A pre-compiled validation function generated by {@link compileSchema}.\n *\n * Accepts a value and an optional JSON Pointer path for error reporting.\n * Returns an array of validation errors (empty = valid).\n */\nexport type CompiledValidator = (value: unknown, path?: string) => JsonSchemaValidationError[];\n\ntype ValidationStep = (value: unknown, path: string, errors: JsonSchemaValidationError[]) => void;\ntype TypeValidationStep = (value: unknown, path: string, errors: JsonSchemaValidationError[]) => boolean;\ntype ObjectValidationStep = (value: Record<string, unknown>, path: string, errors: JsonSchemaValidationError[]) => void;\n\n/** Module-level cache: schema object identity → compiled validator. */\nconst compiledCache = new WeakMap<JsonSchema, CompiledValidator>();\n\n/**\n * Pre-compiles a {@link JsonSchema} into a reusable validation function.\n *\n * Inspects the schema once and builds a specialized closure that\n * eliminates runtime branching for unused keywords, pre-converts\n * `required` arrays to `Set`s, recursively pre-compiles nested property\n * and item schemas, and pre-builds primitive `Set`s for O(1) enum\n * lookups when possible.\n *\n * Results are cached by schema object identity in a `WeakMap`, so\n * calling `compileSchema` with the same schema reference is free\n * after the first call.\n *\n * @param schema - The JSON Schema to compile\n * @returns A compiled validation function\n */\nexport function compileSchema(schema: JsonSchema): CompiledValidator {\n const cached = compiledCache.get(schema);\n if (cached) return cached;\n\n const compiled = buildValidator(schema);\n compiledCache.set(schema, compiled);\n return compiled;\n}\n\n/** Determines whether a value is a JSON primitive (not object/array). */\nfunction isJsonPrimitive(value: unknown): boolean {\n return value === null || typeof value !== \"object\";\n}\n\nfunction isJsonObjectRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction objectHasOwn(value: object, property: PropertyKey): boolean {\n const hasOwn = (Object as typeof Object & { hasOwn?: (target: object, key: PropertyKey) => boolean }).hasOwn;\n if (typeof hasOwn === \"function\") {\n return hasOwn(value, property);\n }\n return Object.getOwnPropertyDescriptor(value, property) !== undefined;\n}\n\n/**\n * Internal: builds a compiled validator closure for a single schema.\n * All keyword-specific logic is resolved at build time so the returned\n * function contains only the checks that are relevant.\n */\nfunction buildValidator(schema: JsonSchema): CompiledValidator {\n const typeStep = buildTypeValidationStep(schema);\n const validationSteps = [\n buildEnumValidationStep(schema),\n buildConstValidationStep(schema),\n buildNumberValidationStep(schema),\n buildStringValidationStep(schema),\n buildObjectValidationStep(schema),\n buildArrayValidationStep(schema),\n ].filter((step): step is ValidationStep => step !== null);\n\n if (typeStep === null && validationSteps.length === 0) {\n return (_value: unknown, _path?: string) => [];\n }\n\n return (value: unknown, path: string = \"\"): JsonSchemaValidationError[] => {\n const errors: JsonSchemaValidationError[] = [];\n if (typeStep && !typeStep(value, path, errors)) {\n return errors;\n }\n for (const step of validationSteps) {\n step(value, path, errors);\n }\n return errors;\n };\n}\n\nfunction buildTypeValidationStep(schema: JsonSchema): TypeValidationStep | null {\n if (schema.type === undefined) {\n return null;\n }\n\n const resolvedTypes = Array.isArray(schema.type) ? schema.type : [schema.type];\n const typeLabel = JSON.stringify(schema.type);\n return (value, path, errors) => {\n if (resolvedTypes.some((type) => matchesType(value, type))) {\n return true;\n }\n errors.push({\n path,\n message: `Expected type ${typeLabel}, got ${jsonTypeLabel(value)}`,\n keyword: \"type\",\n });\n return false;\n };\n}\n\nfunction buildEnumValidationStep(schema: JsonSchema): ValidationStep | null {\n if (schema.enum === undefined) {\n return null;\n }\n\n const enumPrimitiveSet = new Set(schema.enum.filter((member) => isJsonPrimitive(member)));\n const enumComplexMembers = schema.enum.filter((member) => !isJsonPrimitive(member));\n\n return (value, path, errors) => {\n const primitiveMatch = isJsonPrimitive(value) && enumPrimitiveSet.has(value);\n const complexMatch = !primitiveMatch && enumComplexMembers.some((entry) => jsonDeepEqual(value, entry));\n if (primitiveMatch || complexMatch) {\n return;\n }\n errors.push({\n path,\n message: `Value does not match any enum member`,\n keyword: \"enum\",\n });\n };\n}\n\nfunction buildConstValidationStep(schema: JsonSchema): ValidationStep | null {\n if (!(\"const\" in schema)) {\n return null;\n }\n\n return (value, path, errors) => {\n if (jsonDeepEqual(value, schema.const)) {\n return;\n }\n errors.push({\n path,\n message: `Value does not match const`,\n keyword: \"const\",\n });\n };\n}\n\nfunction buildNumberValidationStep(schema: JsonSchema): ValidationStep | null {\n const hasMinimum = schema.minimum !== undefined;\n const hasMaximum = schema.maximum !== undefined;\n const hasExMin = schema.exclusiveMinimum !== undefined;\n const hasExMax = schema.exclusiveMaximum !== undefined;\n if (!hasMinimum && !hasMaximum && !hasExMin && !hasExMax) {\n return null;\n }\n\n const minimum = schema.minimum;\n const maximum = schema.maximum;\n const exMin = schema.exclusiveMinimum;\n const exMax = schema.exclusiveMaximum;\n\n return (value, path, errors) => {\n if (typeof value !== \"number\") {\n return;\n }\n if (hasMinimum && value < minimum!) {\n errors.push({\n path,\n message: `Value ${value} is less than minimum ${minimum!}`,\n keyword: \"minimum\",\n });\n }\n if (hasMaximum && value > maximum!) {\n errors.push({\n path,\n message: `Value ${value} is greater than maximum ${maximum!}`,\n keyword: \"maximum\",\n });\n }\n if (hasExMin && value <= exMin!) {\n errors.push({\n path,\n message: `Value ${value} is not greater than exclusiveMinimum ${exMin!}`,\n keyword: \"exclusiveMinimum\",\n });\n }\n if (hasExMax && value >= exMax!) {\n errors.push({\n path,\n message: `Value ${value} is not less than exclusiveMaximum ${exMax!}`,\n keyword: \"exclusiveMaximum\",\n });\n }\n };\n}\n\nfunction buildStringValidationStep(schema: JsonSchema): ValidationStep | null {\n const hasMinLength = schema.minLength !== undefined;\n const hasMaxLength = schema.maxLength !== undefined;\n if (!hasMinLength && !hasMaxLength) {\n return null;\n }\n\n const minLength = schema.minLength;\n const maxLength = schema.maxLength;\n return (value, path, errors) => {\n if (typeof value !== \"string\") {\n return;\n }\n if (hasMinLength && value.length < minLength!) {\n errors.push({\n path,\n message: `String length ${value.length} is less than minLength ${minLength!}`,\n keyword: \"minLength\",\n });\n }\n if (hasMaxLength && value.length > maxLength!) {\n errors.push({\n path,\n message: `String length ${value.length} is greater than maxLength ${maxLength!}`,\n keyword: \"maxLength\",\n });\n }\n };\n}\n\nfunction buildObjectValidationStep(schema: JsonSchema): ValidationStep | null {\n const requiredKeys = schema.required ?? [];\n const propertyValidators = schema.properties\n ? (Object.entries(schema.properties).map(([name, propertySchema]) => [\n name,\n compileSchema(propertySchema),\n ]) satisfies [string, CompiledValidator][])\n : null;\n const checkAdditional = schema.additionalProperties !== undefined && schema.additionalProperties !== true;\n const additionalIsFalse = schema.additionalProperties === false;\n const additionalValidator =\n checkAdditional && !additionalIsFalse ? compileSchema(schema.additionalProperties as JsonSchema) : null;\n const definedPropKeys = checkAdditional ? new Set(Object.keys(schema.properties ?? {})) : null;\n const objectValidationSteps: ObjectValidationStep[] = [];\n\n if (requiredKeys.length > 0) {\n objectValidationSteps.push(createRequiredPropertyStep(requiredKeys));\n }\n if (propertyValidators !== null) {\n objectValidationSteps.push(createDeclaredPropertyStep(propertyValidators));\n }\n if (checkAdditional) {\n objectValidationSteps.push(\n createAdditionalPropertyStep({\n additionalIsFalse,\n additionalValidator,\n definedPropKeys: definedPropKeys ?? new Set<string>(),\n }),\n );\n }\n\n if (objectValidationSteps.length === 0) {\n return null;\n }\n\n return (value, path, errors) => {\n if (!isJsonObjectRecord(value)) {\n return;\n }\n\n for (const step of objectValidationSteps) {\n step(value, path, errors);\n }\n };\n}\n\nfunction createRequiredPropertyStep(requiredKeys: readonly string[]): ObjectValidationStep {\n return (value, path, errors) => {\n for (const requiredKey of requiredKeys) {\n if (objectHasOwn(value, requiredKey)) {\n continue;\n }\n errors.push({\n path,\n message: `Missing required property \"${requiredKey}\"`,\n keyword: \"required\",\n });\n }\n };\n}\n\nfunction createDeclaredPropertyStep(propertyValidators: [string, CompiledValidator][]): ObjectValidationStep {\n return (value, path, errors) => {\n for (const [propertyName, validator] of propertyValidators) {\n if (!objectHasOwn(value, propertyName)) {\n continue;\n }\n errors.push(...validator(value[propertyName], `${path}/${propertyName}`));\n }\n };\n}\n\nfunction createAdditionalPropertyStep({\n additionalIsFalse,\n additionalValidator,\n definedPropKeys,\n}: {\n additionalIsFalse: boolean;\n additionalValidator: CompiledValidator | null;\n definedPropKeys: Set<string>;\n}): ObjectValidationStep {\n return (value, path, errors) => {\n for (const objectKey of Object.keys(value)) {\n if (definedPropKeys.has(objectKey)) {\n continue;\n }\n if (additionalIsFalse) {\n errors.push({\n path,\n message: `Additional property \"${objectKey}\" is not allowed`,\n keyword: \"additionalProperties\",\n });\n continue;\n }\n errors.push(...additionalValidator!(value[objectKey], `${path}/${objectKey}`));\n }\n };\n}\n\nfunction buildArrayValidationStep(schema: JsonSchema): ValidationStep | null {\n const hasMinItems = schema.minItems !== undefined;\n const hasMaxItems = schema.maxItems !== undefined;\n const itemsValidator = schema.items ? compileSchema(schema.items) : null;\n if (!hasMinItems && !hasMaxItems && itemsValidator === null) {\n return null;\n }\n\n const minItems = schema.minItems;\n const maxItems = schema.maxItems;\n return (value, path, errors) => {\n if (!Array.isArray(value)) {\n return;\n }\n if (hasMinItems && value.length < minItems!) {\n errors.push({\n path,\n message: `Array length ${value.length} is less than minItems ${minItems!}`,\n keyword: \"minItems\",\n });\n }\n if (hasMaxItems && value.length > maxItems!) {\n errors.push({\n path,\n message: `Array length ${value.length} is greater than maxItems ${maxItems!}`,\n keyword: \"maxItems\",\n });\n }\n if (itemsValidator === null) {\n return;\n }\n for (const [index, item] of value.entries()) {\n errors.push(...itemsValidator(item, `${path}/${index}`));\n }\n };\n}\n\n/**\n * Validates a value against a {@link JsonSchema}.\n *\n * Returns an empty array when the value is valid.\n * Returns one or more {@link JsonSchemaValidationError} entries on failure.\n * Short-circuits on type mismatch (does not report downstream keyword errors).\n *\n * @param value - The value to validate\n * @param schema - The JSON Schema to validate against\n * @param path - Internal: JSON Pointer path for error reporting (default: `\"\"`)\n * @returns Array of validation errors (empty = valid)\n */\nexport function validateJsonSchema(value: unknown, schema: JsonSchema, path: string = \"\"): JsonSchemaValidationError[] {\n const compiled = compileSchema(schema);\n return compiled(value, path);\n}\n\n/**\n * Returns a human-readable label for the JSON type of a value.\n */\nfunction jsonTypeLabel(value: unknown): string {\n if (value === null) return \"null\";\n if (Array.isArray(value)) return \"array\";\n return typeof value;\n}\n\n/**\n * Infers a minimal {@link JsonSchema} from a sample value.\n *\n * Used by autoschema mode to register a schema from the first\n * successfully decoded value. The inferred schema only constrains\n * the top-level type.\n *\n * @param sample - A decoded value to infer a schema from\n * @returns A minimal JsonSchema that accepts values of the same top-level type\n */\nexport function inferJsonSchema(sample: unknown): JsonSchema {\n if (sample === null) return { type: \"null\" };\n if (Array.isArray(sample)) return { type: \"array\" };\n switch (typeof sample) {\n case \"string\":\n return { type: \"string\" };\n case \"number\":\n return { type: \"number\" };\n case \"boolean\":\n return { type: \"boolean\" };\n case \"object\":\n return { type: \"object\" };\n default:\n return {};\n }\n}\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\n/**\n * @fileoverview Schema versioning primitives for Mnemonic.\n *\n * This module defines the envelope format used to wrap every persisted value\n * and the error class thrown when schema-related operations fail.\n */\n\n/**\n * Error thrown for schema registry, versioning, and migration failures.\n *\n * Each instance carries a machine-readable {@link code} that categorises\n * the failure. When a `defaultValue` factory is provided to\n * `useMnemonicKey`, the `SchemaError` is passed as the `error` argument\n * so the factory can inspect the failure reason.\n *\n * Error codes:\n *\n * | Code | Meaning |\n * | ------------------------------- | --------------------------------------------------------------- |\n * | `INVALID_ENVELOPE` | The raw stored value is not a valid `MnemonicEnvelope`. |\n * | `SCHEMA_NOT_FOUND` | No schema registered for the stored key + version. |\n * | `WRITE_SCHEMA_REQUIRED` | Strict mode requires a schema to write, but none was found. |\n * | `MIGRATION_PATH_NOT_FOUND` | No contiguous migration path between the stored and latest version. |\n * | `MIGRATION_FAILED` | A migration step threw during execution. |\n * | `MIGRATION_GRAPH_INVALID` | The schema registry helper received an ambiguous or cyclic migration graph. |\n * | `RECONCILE_FAILED` | A read-time reconciliation hook threw or returned an unpersistable value. |\n * | `SCHEMA_REGISTRATION_CONFLICT` | `registerSchema` was called with a conflicting definition. |\n * | `TYPE_MISMATCH` | The decoded value failed JSON Schema validation. |\n * | `MODE_CONFIGURATION_INVALID` | The schema mode requires a capability the registry doesn't provide. |\n *\n * @example\n * ```typescript\n * defaultValue: (error) => {\n * if (error instanceof SchemaError) {\n * console.warn(`Schema issue [${error.code}]:`, error.message);\n * }\n * return { name: \"Guest\" };\n * }\n * ```\n *\n * @see {@link SchemaMode} - How the provider uses schemas\n * @see {@link SchemaRegistry} - Where schemas and migrations are registered\n */\nexport class SchemaError extends Error {\n /**\n * Machine-readable code identifying the category of schema failure.\n */\n readonly code:\n | \"INVALID_ENVELOPE\"\n | \"SCHEMA_NOT_FOUND\"\n | \"WRITE_SCHEMA_REQUIRED\"\n | \"MIGRATION_PATH_NOT_FOUND\"\n | \"MIGRATION_FAILED\"\n | \"MIGRATION_GRAPH_INVALID\"\n | \"RECONCILE_FAILED\"\n | \"SCHEMA_REGISTRATION_CONFLICT\"\n | \"TYPE_MISMATCH\"\n | \"MODE_CONFIGURATION_INVALID\";\n\n /**\n * The underlying error that caused this failure, if any.\n */\n readonly cause?: unknown;\n\n /**\n * Creates a new SchemaError.\n *\n * @param code - Machine-readable failure category\n * @param message - Human-readable error description\n * @param cause - Optional underlying error\n */\n constructor(code: SchemaError[\"code\"], message: string, cause?: unknown) {\n super(message);\n this.name = \"SchemaError\";\n this.code = code;\n this.cause = cause;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/**\n * The JSON envelope that wraps every value persisted by the library.\n *\n * All values are stored as `JSON.stringify({ version, payload })`. The\n * `version` field tells the read path which schema to use for validating\n * the `payload`.\n *\n * - When no schema is active (codec-only mode), `version` is `0` and\n * `payload` is a codec-encoded string.\n * - When a schema is active, `version` corresponds to the schema version\n * and `payload` is the JSON value directly (not string-encoded).\n *\n * @internal\n */\nexport type MnemonicEnvelope = {\n /**\n * Schema version number.\n *\n * Non-negative integer. Any version (including `0`) may have a\n * registered {@link KeySchema}.\n */\n version: number;\n\n /**\n * The stored value.\n *\n * For schema-managed keys, this is a JSON value (object, array,\n * string, number, boolean, or null). For codec-managed keys, this\n * is a string produced by `Codec.encode`.\n */\n payload: unknown;\n};\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\nimport type { StorageLike } from \"./types\";\n\ntype RuntimeProcess = { env?: { NODE_ENV?: string } };\n\nfunction getGlobalProcess(): RuntimeProcess | undefined {\n return (globalThis as { process?: RuntimeProcess }).process;\n}\n\nexport function getRuntimeNodeEnv(): string | undefined {\n const runtimeProcess = getGlobalProcess();\n if (runtimeProcess?.env?.NODE_ENV !== undefined) {\n return runtimeProcess.env.NODE_ENV;\n }\n return undefined;\n}\n\nexport function getNativeBrowserStorages(): StorageLike[] {\n const globalWindow = (globalThis as { window?: Window }).window;\n if (!globalWindow) return [];\n\n const storages: StorageLike[] = [];\n const addStorage = (getter: () => StorageLike) => {\n try {\n storages.push(getter());\n } catch {\n // Ignore blocked browser storage access and continue probing others.\n }\n };\n\n addStorage(() => globalWindow.localStorage);\n addStorage(() => globalWindow.sessionStorage);\n return storages;\n}\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\nimport { useSyncExternalStore, useMemo, useEffect, useRef, useCallback, useState } from \"react\";\nimport { useMnemonic } from \"./provider\";\nimport { JSONCodec, CodecError } from \"./codecs\";\nimport { SchemaError, type MnemonicEnvelope } from \"./schema\";\nimport { getRuntimeNodeEnv } from \"./runtime\";\nimport type { Mnemonic, MnemonicKeyDescriptor, MnemonicKeyState, UseMnemonicKeyOptions } from \"./types\";\n\nexport type ReadResult<T, Extra extends object = {}> = {\n value: T;\n rewriteRaw?: string;\n} & Extra;\n\ntype SharedMnemonicKeyContext<T> = {\n api: Mnemonic;\n key: string;\n codec: NonNullable<UseMnemonicKeyOptions<T>[\"codec\"]>;\n codecOpt: UseMnemonicKeyOptions<T>[\"codec\"];\n schema: UseMnemonicKeyOptions<T>[\"schema\"];\n reconcile: UseMnemonicKeyOptions<T>[\"reconcile\"];\n onMount: UseMnemonicKeyOptions<T>[\"onMount\"];\n onChange: UseMnemonicKeyOptions<T>[\"onChange\"];\n listenCrossTab: UseMnemonicKeyOptions<T>[\"listenCrossTab\"];\n getFallback: (error?: CodecError | SchemaError) => T;\n getServerValue: () => T;\n parseEnvelope: (rawText: string) =>\n | {\n ok: true;\n envelope: MnemonicEnvelope;\n }\n | {\n ok: false;\n error: SchemaError;\n };\n decodeStringPayload: <V>(payload: string, activeCodec: { decode: (encoded: string) => V }) => V;\n buildFallbackResult: <Extra extends object = {}>(\n error?: CodecError | SchemaError,\n extra?: Extra,\n ) => ReadResult<T, Extra>;\n developmentRuntime: boolean;\n contractFingerprint: string | null;\n hasMounted: boolean;\n setHasMounted: (value: boolean) => void;\n hydrationMode: NonNullable<UseMnemonicKeyOptions<T>[\"ssr\"]>[\"hydration\"] | undefined;\n ssrOptions: UseMnemonicKeyOptions<T>[\"ssr\"];\n};\n\ntype UseMnemonicKeyStateConfig<T, Extra extends object> = {\n decodeForRead: (rawText: string | null) => ReadResult<T, Extra>;\n encodeForWrite: (nextValue: T) => string;\n active?: boolean;\n additionalDevWarnings?: (args: {\n api: Mnemonic;\n key: string;\n listenCrossTab: UseMnemonicKeyOptions<T>[\"listenCrossTab\"];\n codecOpt: UseMnemonicKeyOptions<T>[\"codec\"];\n schema: UseMnemonicKeyOptions<T>[\"schema\"];\n warnOnce: (id: string, message: string) => void;\n }) => void;\n onDecodedEffect?: (decoded: ReadResult<T, Extra>) => void;\n};\n\ntype ApplyReconcileArgs<T, Extra extends object> = {\n value: T;\n rewriteRaw?: string;\n extra?: Extra;\n persistedVersion: number;\n latestVersion?: number;\n serializeForPersist: (value: T) => string;\n deriveExtra?: (value: T, extra?: Extra) => Extra | undefined;\n};\n\nconst SSR_SNAPSHOT_TOKEN = Symbol(\"mnemonic:ssr-snapshot\");\nconst diagnosticContractRegistry = new WeakMap<object, Map<string, string>>();\nconst diagnosticWarningRegistry = new WeakMap<object, Set<string>>();\nconst diagnosticObjectIds = new WeakMap<object, number>();\nlet nextDiagnosticObjectId = 1;\n\nexport function serializeEnvelope(version: number, payload: unknown): string {\n return JSON.stringify({\n version,\n payload,\n } satisfies MnemonicEnvelope);\n}\n\nexport function withReadMetadata<T, Extra extends object = {}>(\n value: T,\n rewriteRaw?: string,\n extra?: Extra,\n): ReadResult<T, Extra> {\n const result = { value } as ReadResult<T, Extra>;\n if (extra !== undefined) {\n Object.assign(result, extra);\n }\n if (rewriteRaw !== undefined) result.rewriteRaw = rewriteRaw;\n return result;\n}\n\nfunction isDevelopmentRuntime(): boolean {\n return getRuntimeNodeEnv() === \"development\";\n}\n\nfunction getDiagnosticWarnings(api: object): Set<string> {\n let warnings = diagnosticWarningRegistry.get(api);\n if (!warnings) {\n warnings = new Set<string>();\n diagnosticWarningRegistry.set(api, warnings);\n }\n return warnings;\n}\n\nfunction warnOnce(api: object, id: string, message: string): void {\n const warnings = getDiagnosticWarnings(api);\n if (warnings.has(id)) return;\n warnings.add(id);\n console.warn(message);\n}\n\nfunction stableDiagnosticValue(value: unknown): string {\n if (typeof value === \"function\") {\n const source = Function.prototype.toString.call(value).split(/\\s+/).join(\" \").trim();\n const name = value.name || \"anonymous\";\n return `[factory:${name}/${value.length}:${source}]`;\n }\n if (typeof value === \"bigint\") return `${value.toString()}n`;\n if (typeof value === \"symbol\") return value.toString();\n if (value === undefined) return \"undefined\";\n try {\n return JSON.stringify(value);\n } catch {\n const tag = Object.prototype.toString.call(value);\n if (value !== null && (typeof value === \"object\" || typeof value === \"function\")) {\n return `${tag}#${getDiagnosticObjectId(value)}`;\n }\n return tag;\n }\n}\n\nfunction isObjectLike(value: unknown): value is object {\n return value !== null && (typeof value === \"object\" || typeof value === \"function\");\n}\n\nfunction objectHasOwn(value: object, property: PropertyKey): boolean {\n const hasOwn = (Object as typeof Object & { hasOwn?: (target: object, key: PropertyKey) => boolean }).hasOwn;\n if (typeof hasOwn === \"function\") {\n return hasOwn(value, property);\n }\n return Object.getOwnPropertyDescriptor(value, property) !== undefined;\n}\n\nfunction getDiagnosticObjectId(value: object): number {\n const existing = diagnosticObjectIds.get(value);\n if (existing !== undefined) return existing;\n const id = nextDiagnosticObjectId++;\n diagnosticObjectIds.set(value, id);\n return id;\n}\n\nfunction buildContractFingerprint<T>({\n api,\n key,\n defaultValue,\n codecOpt,\n schemaVersion,\n reconcile,\n listenCrossTab,\n ssrOptions,\n}: {\n api: object;\n key: string;\n defaultValue: UseMnemonicKeyOptions<T>[\"defaultValue\"];\n codecOpt: UseMnemonicKeyOptions<T>[\"codec\"];\n schemaVersion?: number;\n reconcile: UseMnemonicKeyOptions<T>[\"reconcile\"];\n listenCrossTab: UseMnemonicKeyOptions<T>[\"listenCrossTab\"];\n ssrOptions: UseMnemonicKeyOptions<T>[\"ssr\"];\n}): string {\n const codecSignature =\n codecOpt == null || !isObjectLike(codecOpt)\n ? \"default-json-codec\"\n : `codec:${stableDiagnosticValue((codecOpt as { encode?: unknown }).encode)}:${stableDiagnosticValue((codecOpt as { decode?: unknown }).decode)}`;\n const reconcileSignature =\n reconcile == null || !isObjectLike(reconcile)\n ? \"no-reconcile\"\n : `reconcile:${stableDiagnosticValue(reconcile)}`;\n\n return JSON.stringify({\n key,\n defaultValue: stableDiagnosticValue(defaultValue),\n codec: codecSignature,\n schemaVersion: schemaVersion ?? null,\n listenCrossTab: Boolean(listenCrossTab),\n reconcile: reconcileSignature,\n ssrHydration: ssrOptions?.hydration ?? null,\n hasServerValue: ssrOptions?.serverValue !== undefined,\n providerHydration: (api as { ssrHydration?: string }).ssrHydration ?? null,\n });\n}\n\nexport function resolveMnemonicKeyArgs<T>(\n keyOrDescriptor: string | MnemonicKeyDescriptor<T, string>,\n options?: UseMnemonicKeyOptions<T>,\n): MnemonicKeyDescriptor<T, string> {\n if (typeof keyOrDescriptor !== \"string\") {\n return keyOrDescriptor;\n }\n if (!options) {\n throw new Error(\"useMnemonicKey requires options when called with a string key\");\n }\n return {\n key: keyOrDescriptor,\n options,\n };\n}\n\nexport function useMnemonicKeyShared<T>(\n keyOrDescriptor: string | MnemonicKeyDescriptor<T, string>,\n options: UseMnemonicKeyOptions<T> | undefined,\n schemaVersion?: number,\n): SharedMnemonicKeyContext<T> {\n return useMnemonicKeySharedFromApi(useMnemonic(), keyOrDescriptor, options, schemaVersion);\n}\n\nexport function useMnemonicKeySharedFromApi<T>(\n api: Mnemonic,\n keyOrDescriptor: string | MnemonicKeyDescriptor<T, string>,\n options: UseMnemonicKeyOptions<T> | undefined,\n schemaVersion?: number,\n): SharedMnemonicKeyContext<T> {\n const descriptor = resolveMnemonicKeyArgs(keyOrDescriptor, options);\n const key = descriptor.key;\n const resolvedOptions = descriptor.options;\n\n const {\n defaultValue,\n onMount,\n onChange,\n listenCrossTab,\n codec: codecOpt,\n schema,\n reconcile,\n ssr: ssrOptions,\n } = resolvedOptions;\n\n const codec = codecOpt ?? JSONCodec;\n const hydrationMode = ssrOptions?.hydration ?? api.ssrHydration;\n const [hasMounted, setHasMounted] = useState(hydrationMode !== \"client-only\");\n const developmentRuntime = isDevelopmentRuntime();\n const contractFingerprint = useMemo(\n () =>\n developmentRuntime\n ? buildContractFingerprint({\n api,\n key,\n defaultValue,\n codecOpt,\n ...(schemaVersion === undefined ? {} : { schemaVersion }),\n reconcile,\n listenCrossTab,\n ssrOptions,\n })\n : null,\n [\n developmentRuntime,\n api,\n key,\n defaultValue,\n codecOpt,\n schemaVersion,\n reconcile,\n listenCrossTab,\n ssrOptions?.hydration,\n ssrOptions?.serverValue,\n ],\n );\n\n const getFallback = useCallback(\n (error?: CodecError | SchemaError) =>\n typeof defaultValue === \"function\"\n ? (defaultValue as (error?: CodecError | SchemaError) => T)(error)\n : defaultValue,\n [defaultValue],\n );\n\n const getServerValue = useCallback(() => {\n const serverValue = ssrOptions?.serverValue;\n if (serverValue === undefined) {\n return getFallback();\n }\n return typeof serverValue === \"function\" ? (serverValue as () => T)() : serverValue;\n }, [getFallback, ssrOptions?.serverValue]);\n\n const parseEnvelope = useCallback(\n (rawText: string): { ok: true; envelope: MnemonicEnvelope } | { ok: false; error: SchemaError } => {\n try {\n const parsed = JSON.parse(rawText) as MnemonicEnvelope;\n if (\n typeof parsed !== \"object\" ||\n parsed == null ||\n !Number.isInteger(parsed.version) ||\n parsed.version < 0 ||\n !objectHasOwn(parsed, \"payload\")\n ) {\n return {\n ok: false,\n error: new SchemaError(\"INVALID_ENVELOPE\", `Invalid envelope for key \"${key}\"`),\n };\n }\n return { ok: true, envelope: parsed };\n } catch (err) {\n return {\n ok: false,\n error: new SchemaError(\"INVALID_ENVELOPE\", `Invalid envelope for key \"${key}\"`, err),\n };\n }\n },\n [key],\n );\n\n const decodeStringPayload = useCallback(\n <V>(payload: string, activeCodec: { decode: (encoded: string) => V }) => {\n try {\n return activeCodec.decode(payload);\n } catch (err) {\n throw err instanceof CodecError ? err : new CodecError(`Codec decode failed for key \"${key}\"`, err);\n }\n },\n [key],\n );\n\n const buildFallbackResult = useCallback(\n <Extra extends object = {}>(error?: CodecError | SchemaError, extra?: Extra): ReadResult<T, Extra> => {\n return withReadMetadata(getFallback(error), undefined, extra);\n },\n [getFallback],\n );\n\n return {\n api,\n key,\n codec,\n codecOpt,\n schema,\n reconcile,\n onMount,\n onChange,\n listenCrossTab,\n getFallback,\n getServerValue,\n parseEnvelope,\n decodeStringPayload,\n buildFallbackResult,\n developmentRuntime,\n contractFingerprint,\n hasMounted,\n setHasMounted,\n hydrationMode,\n ssrOptions,\n };\n}\n\nexport function useApplyReconcile<T, Extra extends object = {}>({\n key,\n reconcile,\n buildFallbackResult,\n}: {\n key: string;\n reconcile: UseMnemonicKeyOptions<T>[\"reconcile\"];\n buildFallbackResult: <ResultExtra extends object = {}>(\n error?: CodecError | SchemaError,\n extra?: ResultExtra,\n ) => ReadResult<T, ResultExtra>;\n}) {\n return useCallback(\n ({\n value,\n rewriteRaw,\n extra,\n persistedVersion,\n latestVersion,\n serializeForPersist,\n deriveExtra,\n }: ApplyReconcileArgs<T, Extra>): ReadResult<T, Extra> => {\n if (!reconcile) {\n return withReadMetadata(value, rewriteRaw, extra);\n }\n\n const context: { key: string; persistedVersion: number; latestVersion?: number } = {\n key,\n persistedVersion,\n };\n if (latestVersion !== undefined) {\n context.latestVersion = latestVersion;\n }\n\n const baselineSerialized = (() => {\n try {\n return serializeForPersist(value);\n } catch {\n return rewriteRaw;\n }\n })();\n\n try {\n const reconciled = reconcile(value, context);\n const nextExtra = deriveExtra ? deriveExtra(reconciled, extra) : extra;\n const nextSerialized = serializeForPersist(reconciled);\n const nextRewriteRaw =\n baselineSerialized === undefined || nextSerialized !== baselineSerialized\n ? nextSerialized\n : rewriteRaw;\n return withReadMetadata(reconciled, nextRewriteRaw, nextExtra);\n } catch (err) {\n const typedErr =\n err instanceof SchemaError\n ? err\n : new SchemaError(\"RECONCILE_FAILED\", `Reconciliation failed for key \"${key}\"`, err);\n return buildFallbackResult(typedErr, extra);\n }\n },\n [buildFallbackResult, key, reconcile],\n );\n}\n\nexport function useMnemonicKeyState<T, Extra extends object>(\n shared: SharedMnemonicKeyContext<T>,\n config: UseMnemonicKeyStateConfig<T, Extra>,\n): MnemonicKeyState<T> {\n const {\n api,\n key,\n codecOpt,\n schema,\n onMount,\n onChange,\n listenCrossTab,\n getFallback,\n getServerValue,\n developmentRuntime,\n contractFingerprint,\n hasMounted,\n setHasMounted,\n hydrationMode,\n ssrOptions,\n } = shared;\n const { decodeForRead, encodeForWrite, active = true, additionalDevWarnings, onDecodedEffect } = config;\n\n const getServerRawSnapshot = useCallback(\n (): string | typeof SSR_SNAPSHOT_TOKEN | null =>\n ssrOptions?.serverValue === undefined ? null : SSR_SNAPSHOT_TOKEN,\n [ssrOptions?.serverValue],\n );\n\n const deferStorageRead = hydrationMode === \"client-only\" && !hasMounted;\n const subscribe = useCallback(\n (listener: () => void) => {\n if (!active) {\n return () => undefined;\n }\n if (deferStorageRead) {\n return () => undefined;\n }\n return api.subscribeRaw(key, listener);\n },\n [active, api, deferStorageRead, key],\n );\n\n const raw = useSyncExternalStore(\n subscribe,\n () => (active && !deferStorageRead ? api.getRawSnapshot(key) : getServerRawSnapshot()),\n getServerRawSnapshot,\n );\n\n const decoded = useMemo(() => {\n if (raw === SSR_SNAPSHOT_TOKEN) {\n return withReadMetadata<T, Extra>(getServerValue());\n }\n return decodeForRead(raw);\n }, [decodeForRead, getServerValue, raw]);\n const value = decoded.value;\n\n useEffect(() => {\n if (!active) return;\n if (!developmentRuntime) return;\n\n const globalWindow = (globalThis as { window?: Window }).window;\n\n if (listenCrossTab && (api.crossTabSyncMode ?? \"none\") === \"none\" && globalWindow !== undefined) {\n warnOnce(\n api,\n `listenCrossTab:${key}`,\n `[Mnemonic] useMnemonicKey(\"${key}\") enabled listenCrossTab, but the active storage backend may not be able to notify external changes. If you're using a custom Storage-like wrapper around localStorage, ensure it forwards browser \"storage\" events or implements storage.onExternalChange(...); otherwise, use localStorage or implement storage.onExternalChange(...) on your custom backend.`,\n );\n }\n\n additionalDevWarnings?.({\n api,\n key,\n listenCrossTab,\n codecOpt,\n schema,\n warnOnce: (id, message) => warnOnce(api, id, message),\n });\n\n let keyContracts = diagnosticContractRegistry.get(api);\n if (!keyContracts) {\n keyContracts = new Map<string, string>();\n diagnosticContractRegistry.set(api, keyContracts);\n }\n\n if (contractFingerprint === null) {\n return;\n }\n const previousContract = keyContracts.get(key);\n if (previousContract === undefined) {\n keyContracts.set(key, contractFingerprint);\n return;\n }\n if (previousContract === contractFingerprint) {\n return;\n }\n\n warnOnce(\n api,\n `contract-conflict:${key}`,\n `[Mnemonic] Conflicting useMnemonicKey contracts detected for key \"${key}\" in namespace \"${api.prefix.slice(0, -1)}\". Reuse a shared descriptor with defineMnemonicKey(...) or align defaultValue/codec/schema/reconcile options so every consumer describes the same persisted contract.`,\n );\n }, [\n active,\n additionalDevWarnings,\n api,\n key,\n developmentRuntime,\n contractFingerprint,\n listenCrossTab,\n codecOpt,\n schema,\n api.crossTabSyncMode,\n ]);\n\n useEffect(() => {\n if (hasMounted) return;\n setHasMounted(true);\n }, [hasMounted, setHasMounted]);\n\n useEffect(() => {\n if (!active) return;\n if (decoded.rewriteRaw && decoded.rewriteRaw !== raw) {\n api.setRaw(key, decoded.rewriteRaw);\n }\n }, [active, api, decoded.rewriteRaw, key, raw]);\n\n useEffect(() => {\n if (!active) return;\n onDecodedEffect?.(decoded);\n }, [active, decoded, onDecodedEffect]);\n\n const prevRef = useRef<T>(value);\n\n const mounted = useRef(false);\n useEffect(() => {\n if (!active) return;\n if (mounted.current) return;\n mounted.current = true;\n onMount?.(value);\n prevRef.current = value;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [active]);\n\n useEffect(() => {\n if (!active) return;\n const prev = prevRef.current;\n if (Object.is(prev, value)) return;\n prevRef.current = value;\n onChange?.(value, prev);\n }, [active, value, onChange]);\n\n useEffect(() => {\n if (!active) return;\n if (!listenCrossTab) return;\n const globalWindow = (globalThis as { window?: Window }).window;\n if (globalWindow === undefined) return;\n\n const storageKey = api.prefix + key;\n\n const handler = (e: StorageEvent) => {\n if (e.key === null) {\n api.removeRaw(key);\n return;\n }\n if (e.key !== storageKey) return;\n if (e.newValue == null) {\n api.removeRaw(key);\n return;\n }\n api.setRaw(key, e.newValue);\n };\n\n globalWindow.addEventListener(\"storage\", handler);\n return () => globalWindow.removeEventListener(\"storage\", handler);\n }, [active, listenCrossTab, api, key]);\n\n const set = useMemo(() => {\n if (!active) {\n return () => undefined;\n }\n return (next: T | ((cur: T) => T)) => {\n const nextVal =\n typeof next === \"function\" ? (next as (c: T) => T)(decodeForRead(api.getRawSnapshot(key)).value) : next;\n try {\n const encoded = encodeForWrite(nextVal);\n api.setRaw(key, encoded);\n } catch (err) {\n if (err instanceof SchemaError) {\n console.error(`[Mnemonic] Schema error for key \"${key}\" (${err.code}):`, err.message);\n return;\n }\n if (err instanceof CodecError) {\n console.error(`[Mnemonic] Codec encode error for key \"${key}\":`, err.message);\n return;\n }\n console.error(`[Mnemonic] Failed to persist key \"${key}\":`, err);\n }\n };\n }, [active, api, key, decodeForRead, encodeForWrite]);\n\n const reset = useMemo(() => {\n if (!active) {\n return () => undefined;\n }\n return () => {\n const v = getFallback();\n try {\n const encoded = encodeForWrite(v);\n api.setRaw(key, encoded);\n } catch (err) {\n if (err instanceof SchemaError) {\n console.error(`[Mnemonic] Schema error for key \"${key}\" (${err.code}):`, err.message);\n return;\n }\n if (err instanceof CodecError) {\n console.error(`[Mnemonic] Codec encode error for key \"${key}\":`, err.message);\n }\n return;\n }\n };\n }, [active, api, key, getFallback, encodeForWrite]);\n\n const remove = useMemo(() => {\n if (!active) {\n return () => undefined;\n }\n return () => api.removeRaw(key);\n }, [active, api, key]);\n\n return useMemo<MnemonicKeyState<T>>(\n () => ({\n value,\n set,\n reset,\n remove,\n }),\n [value, set, reset, remove],\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\nimport { CodecError, JSONCodec } from \"./codecs\";\nimport { inferJsonSchema, validateJsonSchema } from \"./json-schema\";\nimport { SchemaError, type MnemonicEnvelope } from \"./schema\";\nimport { serializeEnvelope } from \"./use-shared\";\nimport type { JsonSchema } from \"./json-schema\";\nimport type { KeySchema, MigrationPath, Mnemonic, OptionalMnemonicKeyOptions, SchemaRegistry } from \"./types\";\nimport type { MnemonicOptionalBridgeInternal, OptionalReadResult } from \"./optional-bridge\";\n\ntype OptionalBridgeConfig = {\n api: Mnemonic;\n schemaRegistry?: SchemaRegistry;\n};\n\nfunction resolveOptionalDefaultValue<T>(defaultValue: OptionalMnemonicKeyOptions<T>[\"defaultValue\"]): T {\n return typeof defaultValue === \"function\" ? (defaultValue as () => T)() : defaultValue;\n}\n\nfunction objectHasOwn(value: object, property: PropertyKey): boolean {\n const hasOwn = (Object as typeof Object & { hasOwn?: (target: object, key: PropertyKey) => boolean }).hasOwn;\n if (typeof hasOwn === \"function\") {\n return hasOwn(value, property);\n }\n return Object.getOwnPropertyDescriptor(value, property) !== undefined;\n}\n\nfunction parseEnvelope(key: string, rawText: string): MnemonicEnvelope {\n try {\n const parsed = JSON.parse(rawText) as MnemonicEnvelope;\n if (\n typeof parsed !== \"object\" ||\n parsed == null ||\n !Number.isInteger(parsed.version) ||\n parsed.version < 0 ||\n !objectHasOwn(parsed, \"payload\")\n ) {\n throw new SchemaError(\"INVALID_ENVELOPE\", `Invalid envelope for key \"${key}\"`);\n }\n return parsed;\n } catch (error) {\n if (error instanceof SchemaError) {\n throw error;\n }\n throw new SchemaError(\"INVALID_ENVELOPE\", `Invalid envelope for key \"${key}\"`, error);\n }\n}\n\nfunction decodeStringPayload<T>(key: string, payload: string, options: OptionalMnemonicKeyOptions<T>): T {\n const codec = options.codec ?? JSONCodec;\n try {\n return codec.decode(payload);\n } catch (error) {\n throw error instanceof CodecError ? error : new CodecError(`Codec decode failed for key \"${key}\"`, error);\n }\n}\n\nfunction validateAgainstSchema(key: string, value: unknown, jsonSchema: JsonSchema): void {\n const errors = validateJsonSchema(value, jsonSchema);\n if (errors.length === 0) {\n return;\n }\n const message = errors.map((entry) => `${entry.path || \"/\"}: ${entry.message}`).join(\"; \");\n throw new SchemaError(\"TYPE_MISMATCH\", `Schema validation failed for key \"${key}\": ${message}`);\n}\n\nfunction getSchemaCapabilities(schemaRegistry?: SchemaRegistry): boolean {\n return schemaRegistry !== undefined;\n}\n\nfunction buildFallbackResult<T>(options: OptionalMnemonicKeyOptions<T>): OptionalReadResult<T> {\n return {\n value: resolveOptionalDefaultValue(options.defaultValue),\n };\n}\n\nfunction getLatestSchema(schemaRegistry: SchemaRegistry | undefined, key: string): KeySchema | undefined {\n return schemaRegistry?.getLatestSchema(key);\n}\n\nfunction getSchemaForVersion(\n schemaRegistry: SchemaRegistry | undefined,\n key: string,\n version: number,\n): KeySchema | undefined {\n return schemaRegistry?.getSchema(key, version);\n}\n\nfunction getMigrationPath(\n schemaRegistry: SchemaRegistry | undefined,\n key: string,\n fromVersion: number,\n toVersion: number,\n): MigrationPath | null {\n return schemaRegistry?.getMigrationPath(key, fromVersion, toVersion) ?? null;\n}\n\nfunction encodeValueForWrite<T>(\n key: string,\n nextValue: T,\n options: OptionalMnemonicKeyOptions<T>,\n schemaRegistry?: SchemaRegistry,\n): string {\n const explicitVersion = options.schema?.version;\n const latestSchema = getLatestSchema(schemaRegistry, key);\n const targetSchema =\n explicitVersion === undefined\n ? latestSchema\n : (getSchemaForVersion(schemaRegistry, key, explicitVersion) ?? latestSchema);\n\n if (!targetSchema) {\n const codec = options.codec ?? JSONCodec;\n return serializeEnvelope(0, codec.encode(nextValue));\n }\n\n let valueToStore: unknown = nextValue;\n const writeMigration = schemaRegistry?.getWriteMigration?.(key, targetSchema.version);\n if (writeMigration) {\n try {\n valueToStore = writeMigration.migrate(valueToStore);\n } catch (error) {\n throw error instanceof SchemaError\n ? error\n : new SchemaError(\"MIGRATION_FAILED\", `Write-time migration failed for key \"${key}\"`, error);\n }\n }\n\n validateAgainstSchema(key, valueToStore, targetSchema.schema);\n return serializeEnvelope(targetSchema.version, valueToStore);\n}\n\nfunction decodeCodecManagedEnvelope<T>(\n key: string,\n envelope: MnemonicEnvelope,\n options: OptionalMnemonicKeyOptions<T>,\n): OptionalReadResult<T> {\n if (typeof envelope.payload !== \"string\") {\n return {\n value: envelope.payload as T,\n };\n }\n\n return {\n value: decodeStringPayload(key, envelope.payload, options),\n };\n}\n\nfunction decodeAutoschemaEnvelope<T>(\n key: string,\n envelope: MnemonicEnvelope,\n options: OptionalMnemonicKeyOptions<T>,\n schemaRegistry: SchemaRegistry | undefined,\n): OptionalReadResult<T> {\n if (!schemaRegistry?.registerSchema) {\n throw new SchemaError(\n \"MODE_CONFIGURATION_INVALID\",\n `Autoschema mode requires schema registry registration for key \"${key}\"`,\n );\n }\n\n const decoded =\n typeof envelope.payload === \"string\"\n ? decodeStringPayload(key, envelope.payload, options)\n : (envelope.payload as T);\n const pendingSchema: KeySchema = {\n key,\n version: 1,\n schema: inferJsonSchema(decoded),\n };\n\n return {\n value: decoded,\n rewriteRaw: serializeEnvelope(pendingSchema.version, decoded),\n pendingSchema,\n };\n}\n\nfunction decodeSchemaManagedEnvelope<T>(\n key: string,\n envelope: MnemonicEnvelope,\n schemaForVersion: KeySchema,\n latestSchema: KeySchema | undefined,\n schemaRegistry: SchemaRegistry | undefined,\n): OptionalReadResult<T> {\n let current: unknown = envelope.payload;\n validateAgainstSchema(key, current, schemaForVersion.schema);\n\n if (!latestSchema || envelope.version >= latestSchema.version) {\n return {\n value: current as T,\n };\n }\n\n const path = getMigrationPath(schemaRegistry, key, envelope.version, latestSchema.version);\n if (!path) {\n throw new SchemaError(\n \"MIGRATION_PATH_NOT_FOUND\",\n `No migration path for key \"${key}\" from v${envelope.version} to v${latestSchema.version}`,\n );\n }\n\n for (const step of path) {\n current = step.migrate(current);\n }\n\n validateAgainstSchema(key, current, latestSchema.schema);\n return {\n value: current as T,\n rewriteRaw: serializeEnvelope(latestSchema.version, current),\n };\n}\n\nfunction decodePersistedValue<T>(\n key: string,\n raw: string | null,\n options: OptionalMnemonicKeyOptions<T>,\n api: Mnemonic,\n schemaRegistry?: SchemaRegistry,\n): OptionalReadResult<T> {\n if (raw == null) {\n return buildFallbackResult(options);\n }\n\n const envelope = parseEnvelope(key, raw);\n const latestSchema = getLatestSchema(schemaRegistry, key);\n const schemaForVersion = getSchemaForVersion(schemaRegistry, key, envelope.version);\n\n if (api.schemaMode === \"strict\" && !schemaForVersion) {\n throw new SchemaError(\"SCHEMA_NOT_FOUND\", `No schema for key \"${key}\" v${envelope.version}`);\n }\n\n if (api.schemaMode === \"autoschema\" && !schemaForVersion) {\n return decodeAutoschemaEnvelope(key, envelope, options, schemaRegistry);\n }\n\n if (!schemaForVersion) {\n return decodeCodecManagedEnvelope(key, envelope, options);\n }\n\n return decodeSchemaManagedEnvelope(key, envelope, schemaForVersion, latestSchema, schemaRegistry);\n}\n\nexport function createMnemonicOptionalBridge({\n api,\n schemaRegistry,\n}: OptionalBridgeConfig): MnemonicOptionalBridgeInternal {\n return {\n namespace: api.prefix.endsWith(\".\") ? api.prefix.slice(0, -1) : api.prefix,\n capabilities: {\n persistence: true,\n schema: getSchemaCapabilities(schemaRegistry),\n },\n subscribeRaw: (key, listener) => api.subscribeRaw(key, listener),\n getRawSnapshot: (key) => api.getRawSnapshot(key),\n decodeSnapshot: (key, raw, options) => {\n try {\n return decodePersistedValue(key, raw, options, api, schemaRegistry);\n } catch {\n return buildFallbackResult(options);\n }\n },\n setValue: (key, nextValue, options) => {\n try {\n api.setRaw(key, encodeValueForWrite(key, nextValue, options, schemaRegistry));\n } catch (error) {\n if (error instanceof SchemaError) {\n console.error(`[Mnemonic] Schema error for key \"${key}\" (${error.code}):`, error.message);\n return;\n }\n if (error instanceof CodecError) {\n console.error(`[Mnemonic] Codec error for key \"${key}\":`, error.message);\n return;\n }\n throw error;\n }\n },\n removeValue: (key) => {\n api.removeRaw(key);\n },\n commitSnapshot: (key, raw, snapshot) => {\n if (snapshot.pendingSchema && schemaRegistry?.registerSchema) {\n if (!schemaRegistry.getSchema(snapshot.pendingSchema.key, snapshot.pendingSchema.version)) {\n try {\n schemaRegistry.registerSchema(snapshot.pendingSchema);\n } catch {\n // Ignore registration races; the next read/write enforces schema validity.\n }\n }\n }\n if (snapshot.rewriteRaw !== undefined && snapshot.rewriteRaw !== raw) {\n api.setRaw(key, snapshot.rewriteRaw);\n }\n },\n };\n}\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\nimport { createContext, useContext } from \"react\";\nimport type { KeySchema, Listener, MnemonicOptionalBridge, OptionalMnemonicKeyOptions, Unsubscribe } from \"./types\";\n\nexport type OptionalReadResult<T> = {\n value: T;\n rewriteRaw?: string;\n pendingSchema?: KeySchema;\n};\n\nexport interface MnemonicOptionalBridgeInternal extends MnemonicOptionalBridge {\n subscribeRaw(key: string, listener: Listener): Unsubscribe;\n getRawSnapshot(key: string): string | null;\n decodeSnapshot<T>(key: string, raw: string | null, options: OptionalMnemonicKeyOptions<T>): OptionalReadResult<T>;\n setValue<T>(key: string, nextValue: T, options: OptionalMnemonicKeyOptions<T>): void;\n removeValue(key: string): void;\n commitSnapshot<T>(key: string, raw: string | null, snapshot: OptionalReadResult<T>): void;\n}\n\nexport const MnemonicOptionalBridgeContext = createContext<MnemonicOptionalBridgeInternal | null>(null);\n\nexport function useMnemonicOptionalBridge(): MnemonicOptionalBridgeInternal | null {\n return useContext(MnemonicOptionalBridgeContext);\n}\n\nexport function toPublicMnemonicOptionalBridge(\n bridge: MnemonicOptionalBridgeInternal | null,\n): MnemonicOptionalBridge | null {\n if (!bridge) {\n return null;\n }\n return {\n namespace: bridge.namespace,\n capabilities: bridge.capabilities,\n };\n}\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\nimport { createElement, type ReactNode } from \"react\";\nimport { MnemonicOptionalBridgeContext } from \"./optional-bridge\";\nimport type { MnemonicOptionalBridgeInternal } from \"./optional-bridge\";\n\nexport interface MnemonicOptionalBridgeProviderProps {\n readonly bridge: MnemonicOptionalBridgeInternal;\n readonly children: ReactNode;\n}\n\nexport function MnemonicOptionalBridgeProvider({\n bridge,\n children,\n}: Readonly<MnemonicOptionalBridgeProviderProps>): ReactNode {\n return createElement(MnemonicOptionalBridgeContext.Provider, { value: bridge }, children);\n}\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\n/**\n * @fileoverview React Context provider for persistent state management.\n *\n * This module exports the MnemonicProvider component and useMnemonic hook,\n * which together provide a namespace-scoped storage API to child components.\n * The provider creates an in-memory cache with read-through behavior to localStorage\n * (or a synchronous custom storage backend) and implements the React external\n * store contract.\n */\n\nimport { createContext, useContext, useMemo, useEffect, ReactNode } from \"react\";\nimport { createMnemonicOptionalBridge } from \"./optional-bridge-adapter\";\nimport { MnemonicOptionalBridgeProvider } from \"./optional-bridge-provider\";\nimport { getNativeBrowserStorages, getRuntimeNodeEnv } from \"./runtime\";\nimport type { Mnemonic, MnemonicProviderOptions, StorageLike, Listener, Unsubscribe } from \"./types\";\n\n/**\n * React Context for the Mnemonic store.\n *\n * Provides access to the low-level storage API. Consumer code should use\n * `useMnemonicKey` instead of accessing this context directly.\n *\n * @internal\n */\nconst MnemonicContext = createContext<Mnemonic | null>(null);\n\n/**\n * Hook to access the Mnemonic store from context.\n *\n * This is a low-level hook used internally by `useMnemonicKey`. Most applications\n * should use `useMnemonicKey` instead, which provides a higher-level, type-safe API.\n *\n * @returns The Mnemonic store instance\n *\n * @throws {Error} If called outside of a MnemonicProvider\n *\n * @example\n * ```tsx\n * // Internal usage (prefer useMnemonicKey for application code)\n * function MyComponent() {\n * const store = useMnemonic();\n * const raw = store.getRawSnapshot('myKey');\n * // ...\n * }\n * ```\n *\n * @see {@link useMnemonicKey} - Higher-level hook for application code\n * @see {@link MnemonicProvider} - Required provider component\n */\nexport function useMnemonic(): Mnemonic {\n const context = useMnemonicOptional();\n if (!context) {\n throw new Error(\"useMnemonic must be used within a MnemonicProvider\");\n }\n return context;\n}\n\n/**\n * Hook to access the Mnemonic store when one is available.\n *\n * Unlike {@link useMnemonic}, this hook never throws. It returns `null`\n * when no provider is mounted above the caller.\n */\nexport function useMnemonicOptional(): Mnemonic | null {\n return useContext(MnemonicContext);\n}\n\n/**\n * Props for the MnemonicProvider component.\n *\n * Extends MnemonicProviderOptions with required children prop.\n *\n * @see {@link MnemonicProviderOptions} - Configuration options\n * @see {@link MnemonicProvider} - Provider component\n */\nexport interface MnemonicProviderProps extends Readonly<MnemonicProviderOptions> {\n /**\n * React children to render within the provider.\n */\n readonly children: ReactNode;\n}\n\n/**\n * Helper function to safely access window.localStorage in browser environments.\n *\n * Returns undefined in non-browser environments (SSR) or when localStorage\n * is unavailable (e.g., in private browsing mode with strict settings).\n *\n * @returns localStorage if available, undefined otherwise\n *\n * @internal\n */\nfunction defaultBrowserStorage(): StorageLike | undefined {\n const globalWindow = (globalThis as { window?: Window }).window;\n if (globalWindow === undefined) return undefined;\n try {\n return globalWindow.localStorage;\n } catch {\n return undefined;\n }\n}\n\n/** Internal store type with reload capability, not exposed to consumers. */\ntype MnemonicInternal = Mnemonic & {\n reloadFromStorage: (changedKeys?: string[]) => void;\n};\n\n/** Internal store extension to retain a strong provider API reference while mounted. */\ntype MnemonicInternalWithDevToolsHold = MnemonicInternal & {\n __devToolsProviderApiHold?: DevToolsProviderApi;\n};\n\n/** Minimal WeakRef shape so we can compile against ES2020 libs. */\ntype WeakRefLike<T extends object> = {\n deref: () => T | undefined;\n};\n\ntype WeakRefConstructorLike = new <T extends object>(target: T) => WeakRefLike<T>;\n\ntype DevToolsProviderApi = {\n getStore: () => MnemonicInternal;\n dump: () => Record<string, string>;\n get: (key: string) => unknown;\n set: (key: string, value: unknown) => void;\n remove: (key: string) => void;\n clear: () => void;\n keys: () => string[];\n};\n\ntype DevToolsProviderEntry = {\n namespace: string;\n weakRef: WeakRefLike<DevToolsProviderApi>;\n registeredAt: number;\n lastSeenAt: number;\n staleSince: number | null;\n};\n\ntype DevToolsProviderDescriptor = {\n namespace: string;\n available: boolean;\n registeredAt: number;\n lastSeenAt: number;\n staleSince: number | null;\n};\n\ntype DevToolsRegistryRoot = {\n providers: Record<string, DevToolsProviderEntry>;\n resolve: (namespace: string) => DevToolsProviderApi | null;\n list: () => DevToolsProviderDescriptor[];\n capabilities: {\n weakRef: boolean;\n finalizationRegistry: boolean;\n };\n __meta: {\n version: number;\n lastUpdated: number;\n lastChange: string;\n };\n};\n\ntype DevToolsGlobalWindow = Window & {\n __REACT_MNEMONIC_DEVTOOLS__?: unknown;\n};\n\ntype StorageAccessCallbacks = {\n onAccessError: (error: unknown) => void;\n onAccessSuccess: () => void;\n onAsyncViolation: (method: \"getItem\" | \"setItem\" | \"removeItem\", thenable: PromiseLike<unknown>) => void;\n};\n\nfunction detectEnumerableStorage(storage: StorageLike | undefined): boolean {\n if (!storage) return false;\n try {\n return typeof storage.length === \"number\" && typeof storage.key === \"function\";\n } catch {\n return false;\n }\n}\n\nfunction isProductionRuntime(): boolean {\n const env = getRuntimeNodeEnv();\n if (env === undefined) {\n return true;\n }\n return env === \"production\";\n}\n\nfunction weakRefConstructor(): WeakRefConstructorLike | null {\n const ctor = (globalThis as { WeakRef?: unknown }).WeakRef;\n return typeof ctor === \"function\" ? (ctor as WeakRefConstructorLike) : null;\n}\n\nfunction hasFinalizationRegistry(): boolean {\n return typeof (globalThis as { FinalizationRegistry?: unknown }).FinalizationRegistry === \"function\";\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n if (value == null) return false;\n if (typeof value !== \"object\" && typeof value !== \"function\") return false;\n return typeof (value as { then?: unknown }).then === \"function\";\n}\n\nfunction getCrossTabSyncMode(\n requestedStorage: StorageLike | undefined,\n activeStorage: StorageLike | undefined,\n): NonNullable<Mnemonic[\"crossTabSyncMode\"]> {\n const isExplicitNativeBrowserStorage =\n activeStorage !== undefined &&\n requestedStorage !== undefined &&\n getNativeBrowserStorages().includes(activeStorage);\n if ((requestedStorage === undefined && activeStorage !== undefined) || isExplicitNativeBrowserStorage) {\n return \"browser-storage-event\";\n }\n if (typeof activeStorage?.onExternalChange === \"function\") {\n return \"custom-external-change\";\n }\n return \"none\";\n}\n\nfunction getDevToolsWindow(): DevToolsGlobalWindow | undefined {\n return (globalThis as { window?: DevToolsGlobalWindow }).window;\n}\n\nfunction sanitizeDevToolsRoot(root: Record<string, unknown>): void {\n const reserved = new Set([\"providers\", \"resolve\", \"list\", \"capabilities\", \"__meta\"]);\n for (const key of Object.keys(root)) {\n if (reserved.has(key)) continue;\n const descriptor = Object.getOwnPropertyDescriptor(root, key);\n if (descriptor && !descriptor.configurable) continue;\n try {\n delete root[key];\n } catch {\n // Ignore hostile legacy properties so devtools init stays fail-safe.\n }\n }\n}\n\nfunction ensureDevToolsRoot(enableDevTools: boolean): DevToolsRegistryRoot | null {\n if (!enableDevTools) return null;\n\n const globalWindow = getDevToolsWindow();\n if (!globalWindow) return null;\n\n const weakRefSupported = weakRefConstructor() !== null;\n const finalizationRegistrySupported = hasFinalizationRegistry();\n const existing = globalWindow.__REACT_MNEMONIC_DEVTOOLS__;\n const root: Record<string, unknown> =\n existing && typeof existing === \"object\" ? (existing as Record<string, unknown>) : {};\n\n sanitizeDevToolsRoot(root);\n\n if (!root.providers || typeof root.providers !== \"object\") {\n root.providers = {};\n }\n\n if (!root.capabilities || typeof root.capabilities !== \"object\") {\n root.capabilities = {};\n }\n\n const capabilities = root.capabilities as DevToolsRegistryRoot[\"capabilities\"];\n capabilities.weakRef = weakRefSupported;\n capabilities.finalizationRegistry = finalizationRegistrySupported;\n\n if (!root.__meta || typeof root.__meta !== \"object\") {\n root.__meta = {\n version: 0,\n lastUpdated: Date.now(),\n lastChange: \"\",\n };\n }\n\n const meta = root.__meta as DevToolsRegistryRoot[\"__meta\"];\n if (typeof meta.version !== \"number\" || !Number.isFinite(meta.version)) {\n meta.version = 0;\n }\n if (typeof meta.lastUpdated !== \"number\" || !Number.isFinite(meta.lastUpdated)) {\n meta.lastUpdated = Date.now();\n }\n if (typeof meta.lastChange !== \"string\") {\n meta.lastChange = \"\";\n }\n\n const providers = root.providers as Record<string, DevToolsProviderEntry>;\n if (typeof root.resolve !== \"function\") {\n root.resolve = (namespace: string): DevToolsProviderApi | null => {\n const entry = providers[namespace];\n if (!entry || typeof entry.weakRef?.deref !== \"function\") return null;\n\n const live = entry.weakRef.deref();\n if (live) {\n entry.lastSeenAt = Date.now();\n entry.staleSince = null;\n return live;\n }\n\n entry.staleSince ??= Date.now();\n return null;\n };\n }\n\n if (typeof root.list !== \"function\") {\n root.list = (): DevToolsProviderDescriptor[] =>\n Object.entries(providers)\n .map(([namespace, entry]) => {\n const live = typeof entry.weakRef?.deref === \"function\" ? entry.weakRef.deref() : undefined;\n const available = Boolean(live);\n if (available) {\n entry.lastSeenAt = Date.now();\n entry.staleSince = null;\n } else {\n entry.staleSince ??= Date.now();\n }\n return {\n namespace,\n available,\n registeredAt: entry.registeredAt,\n lastSeenAt: entry.lastSeenAt,\n staleSince: entry.staleSince,\n };\n })\n .sort((left, right) => left.namespace.localeCompare(right.namespace));\n }\n\n globalWindow.__REACT_MNEMONIC_DEVTOOLS__ = root;\n return root as DevToolsRegistryRoot;\n}\n\nfunction bumpDevToolsVersion(root: DevToolsRegistryRoot | null, namespace: string, reason: string): void {\n if (!root) return;\n root.__meta.version += 1;\n root.__meta.lastUpdated = Date.now();\n root.__meta.lastChange = `${namespace}.${reason}`;\n}\n\nfunction decodeDevToolsValue(raw: string): unknown {\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n}\n\nfunction readStorageRaw(\n storage: StorageLike | undefined,\n storageKey: string,\n callbacks: StorageAccessCallbacks,\n): string | null {\n if (!storage) return null;\n\n try {\n const raw = storage.getItem(storageKey);\n if (isPromiseLike(raw)) {\n callbacks.onAsyncViolation(\"getItem\", raw);\n return null;\n }\n callbacks.onAccessSuccess();\n return raw;\n } catch (error) {\n callbacks.onAccessError(error);\n return null;\n }\n}\n\nfunction enumerateNamespaceKeys(\n storage: StorageLike | undefined,\n prefix: string,\n callbacks: Pick<StorageAccessCallbacks, \"onAccessError\" | \"onAccessSuccess\">,\n): string[] {\n if (!storage) {\n return [];\n }\n\n const keys: string[] = [];\n try {\n const storageLength = storage.length;\n const getStorageKey = storage.key;\n if (typeof storageLength !== \"number\" || typeof getStorageKey !== \"function\") {\n return [];\n }\n for (let index = 0; index < storageLength; index++) {\n const fullKey = getStorageKey.call(storage, index);\n if (!fullKey?.startsWith(prefix)) continue;\n keys.push(fullKey.slice(prefix.length));\n }\n callbacks.onAccessSuccess();\n } catch (error) {\n callbacks.onAccessError(error);\n }\n return keys;\n}\n\nfunction syncCacheEntryFromStorage({\n key,\n storageKey,\n storage,\n cache,\n emit,\n callbacks,\n}: {\n key: string;\n storageKey: string;\n storage: StorageLike | undefined;\n cache: Map<string, string | null>;\n emit: (key: string) => void;\n callbacks: StorageAccessCallbacks;\n}): boolean {\n const fresh = readStorageRaw(storage, storageKey, callbacks);\n const cached = cache.get(key) ?? null;\n if (fresh === cached) {\n return false;\n }\n cache.set(key, fresh);\n emit(key);\n return true;\n}\n\nfunction reloadNamedKeysFromStorage({\n changedKeys,\n prefix,\n storage,\n listeners,\n cache,\n emit,\n callbacks,\n}: {\n changedKeys: string[];\n prefix: string;\n storage: StorageLike | undefined;\n listeners: Map<string, Set<Listener>>;\n cache: Map<string, string | null>;\n emit: (key: string) => void;\n callbacks: StorageAccessCallbacks;\n}): boolean {\n let changed = false;\n\n for (const fullStorageKey of changedKeys) {\n if (!fullStorageKey.startsWith(prefix)) continue;\n const key = fullStorageKey.slice(prefix.length);\n const listenerSet = listeners.get(key);\n if (listenerSet && listenerSet.size > 0) {\n changed =\n syncCacheEntryFromStorage({\n key,\n storageKey: fullStorageKey,\n storage,\n cache,\n emit,\n callbacks,\n }) || changed;\n continue;\n }\n if (cache.has(key)) {\n cache.delete(key);\n }\n }\n\n return changed;\n}\n\nfunction reloadSubscribedKeysFromStorage({\n prefix,\n storage,\n listeners,\n cache,\n emit,\n callbacks,\n}: {\n prefix: string;\n storage: StorageLike | undefined;\n listeners: Map<string, Set<Listener>>;\n cache: Map<string, string | null>;\n emit: (key: string) => void;\n callbacks: StorageAccessCallbacks;\n}): boolean {\n let changed = false;\n\n for (const [key, listenerSet] of listeners) {\n if (listenerSet.size === 0) continue;\n changed =\n syncCacheEntryFromStorage({\n key,\n storageKey: `${prefix}${key}`,\n storage,\n cache,\n emit,\n callbacks,\n }) || changed;\n }\n\n for (const key of cache.keys()) {\n const listenerSet = listeners.get(key);\n if (listenerSet && listenerSet.size > 0) continue;\n cache.delete(key);\n }\n\n return changed;\n}\n\nfunction createDevToolsProviderApi({\n store,\n dump,\n keys,\n readThrough,\n writeRaw,\n removeRaw,\n}: {\n store: MnemonicInternal;\n dump: () => Record<string, string>;\n keys: () => string[];\n readThrough: (key: string) => string | null;\n writeRaw: (key: string, raw: string) => void;\n removeRaw: (key: string) => void;\n}): DevToolsProviderApi {\n return {\n getStore: () => store,\n dump: () => {\n const data = dump();\n console.table(\n Object.entries(data).map(([key, value]) => ({\n key,\n value,\n decoded: decodeDevToolsValue(value),\n })),\n );\n return data;\n },\n get: (key: string) => {\n const raw = readThrough(key);\n if (raw == null) return undefined;\n return decodeDevToolsValue(raw);\n },\n set: (key: string, value: unknown) => {\n writeRaw(key, JSON.stringify(value));\n },\n remove: (key: string) => removeRaw(key),\n clear: () => {\n for (const key of keys()) {\n removeRaw(key);\n }\n },\n keys,\n };\n}\n\nfunction createReloadFromStorage({\n storage,\n hasAsyncContractViolation,\n prefix,\n listeners,\n cache,\n emit,\n callbacks,\n devToolsRoot,\n namespace,\n}: {\n storage: StorageLike | undefined;\n hasAsyncContractViolation: () => boolean;\n prefix: string;\n listeners: Map<string, Set<Listener>>;\n cache: Map<string, string | null>;\n emit: (key: string) => void;\n callbacks: StorageAccessCallbacks;\n devToolsRoot: DevToolsRegistryRoot | null;\n namespace: string;\n}): (changedKeys?: string[]) => void {\n return (changedKeys?: string[]) => {\n if (!storage || hasAsyncContractViolation()) return;\n if (changedKeys?.length === 0) return;\n\n const isFullReload = changedKeys === undefined;\n const changed = isFullReload\n ? reloadSubscribedKeysFromStorage({\n prefix,\n storage,\n listeners,\n cache,\n emit,\n callbacks,\n })\n : reloadNamedKeysFromStorage({\n changedKeys,\n prefix,\n storage,\n listeners,\n cache,\n emit,\n callbacks,\n });\n\n if (changed) {\n bumpDevToolsVersion(devToolsRoot, namespace, isFullReload ? \"reload:full\" : \"reload:granular\");\n }\n };\n}\n\nfunction registerDevToolsProvider({\n devToolsRoot,\n namespace,\n store,\n dump,\n keys,\n readThrough,\n writeRaw,\n removeRaw,\n}: {\n devToolsRoot: DevToolsRegistryRoot;\n namespace: string;\n store: MnemonicInternalWithDevToolsHold;\n dump: () => Record<string, string>;\n keys: () => string[];\n readThrough: (key: string) => string | null;\n writeRaw: (key: string, raw: string) => void;\n removeRaw: (key: string) => void;\n}): void {\n let infoMessage = `[Mnemonic DevTools] Namespace \"${namespace}\" available via window.__REACT_MNEMONIC_DEVTOOLS__.resolve(\"${namespace}\")`;\n\n if (!devToolsRoot.capabilities.weakRef) {\n console.info(\n `[Mnemonic DevTools] WeakRef is not available; registry provider \"${namespace}\" was not registered.`,\n );\n return;\n }\n\n const existingLive = devToolsRoot.resolve(namespace);\n if (existingLive) {\n const duplicateMessage = `[Mnemonic DevTools] Duplicate provider namespace \"${namespace}\" detected. Each window must have at most one live MnemonicProvider per namespace.`;\n if (!isProductionRuntime()) {\n throw new Error(duplicateMessage);\n }\n console.warn(`${duplicateMessage} Keeping the first provider and ignoring the duplicate.`);\n console.info(\n `[Mnemonic DevTools] Namespace \"${namespace}\" already registered. Keeping existing provider reference.`,\n );\n return;\n }\n\n const providerApi = createDevToolsProviderApi({\n store,\n dump,\n keys,\n readThrough,\n writeRaw,\n removeRaw,\n });\n const WeakRefCtor = weakRefConstructor();\n if (!WeakRefCtor) {\n console.info(`[Mnemonic DevTools] WeakRef became unavailable while registering \"${namespace}\".`);\n return;\n }\n\n // Keep a strong reference for the mounted provider lifetime.\n // The global registry still only exposes a WeakRef, but this\n // prevents premature collection while the provider is active.\n store.__devToolsProviderApiHold = providerApi;\n\n const now = Date.now();\n devToolsRoot.providers[namespace] = {\n namespace,\n weakRef: new WeakRefCtor(providerApi),\n registeredAt: now,\n lastSeenAt: now,\n staleSince: null,\n };\n bumpDevToolsVersion(devToolsRoot, namespace, \"registry:namespace-registered\");\n console.info(infoMessage);\n}\n\n/**\n * React Context provider for namespace-isolated persistent state.\n *\n * Creates a scoped storage environment where all keys are automatically prefixed\n * with the namespace to prevent collisions. Implements an in-memory cache with\n * read-through behavior to the underlying storage backend (localStorage by default).\n *\n * This provider must wrap any components that use `useMnemonicKey`. Multiple\n * providers with different namespaces can coexist in the same application.\n *\n * @param props - Provider configuration and children\n * @param props.children - React children to render within the provider\n * @param props.namespace - Unique namespace for isolating storage keys\n * @param props.storage - Optional synchronous custom storage backend (defaults to localStorage)\n * @param props.enableDevTools - Enable DevTools debugging interface (defaults to false)\n * @param props.schemaMode - Schema enforcement mode (default: \"default\")\n * @param props.schemaRegistry - Optional schema registry for storing schemas and migrations\n * @param props.ssr - Optional SSR defaults for descendant hooks\n *\n * @example\n * ```tsx\n * // Basic usage with default settings\n * function App() {\n * return (\n * <MnemonicProvider namespace=\"myApp\">\n * <MyComponents />\n * </MnemonicProvider>\n * );\n * }\n * ```\n *\n * @example\n * ```tsx\n * // With a synchronous custom storage backend\n * function App() {\n * return (\n * <MnemonicProvider\n * namespace=\"myApp\"\n * storage={window.sessionStorage}\n * >\n * <MyComponents />\n * </MnemonicProvider>\n * );\n * }\n * ```\n *\n * @example\n * ```tsx\n * // With DevTools enabled (development only)\n * function App() {\n * return (\n * <MnemonicProvider\n * namespace=\"myApp\"\n * enableDevTools={process.env.NODE_ENV === 'development'}\n * >\n * <MyComponents />\n * </MnemonicProvider>\n * );\n * }\n *\n * // Then in browser console:\n * const dt = window.__REACT_MNEMONIC_DEVTOOLS__.resolve('myApp')\n * dt?.dump()\n * dt?.get('user')\n * dt?.set('theme', 'dark')\n * ```\n *\n * @example\n * ```tsx\n * // Multiple providers with different namespaces\n * function App() {\n * return (\n * <MnemonicProvider namespace=\"user-prefs\">\n * <UserSettings />\n * <MnemonicProvider namespace=\"app-state\">\n * <Dashboard />\n * </MnemonicProvider>\n * </MnemonicProvider>\n * );\n * }\n * ```\n *\n * @example\n * ```tsx\n * // Delay persisted storage reads until after client mount\n * function App() {\n * return (\n * <MnemonicProvider\n * namespace=\"myApp\"\n * ssr={{ hydration: \"client-only\" }}\n * >\n * <MyComponents />\n * </MnemonicProvider>\n * );\n * }\n * ```\n *\n * @remarks\n * - Creates a stable store instance that only recreates when namespace, storage, or enableDevTools change\n * - All storage operations are cached in memory for fast reads\n * - Storage failures are handled gracefully (logged but not thrown)\n * - `StorageLike` is intentionally synchronous for v1; async persistence must sit behind a sync facade\n * - In SSR environments, the provider is safe by default: hooks render\n * `defaultValue` unless configured with an explicit `ssr.serverValue`\n * - The store implements React's useSyncExternalStore contract for efficient updates\n *\n * @see {@link useMnemonicKey} - Hook for using persistent state\n * @see {@link MnemonicProviderOptions} - Configuration options\n */\nexport function MnemonicProvider({\n children,\n namespace,\n storage,\n enableDevTools = false,\n schemaMode = \"default\",\n schemaRegistry,\n ssr,\n}: MnemonicProviderProps) {\n if (schemaMode === \"strict\" && !schemaRegistry) {\n throw new Error(\"MnemonicProvider strict mode requires schemaRegistry\");\n }\n if (schemaMode === \"autoschema\" && typeof schemaRegistry?.registerSchema !== \"function\") {\n throw new Error(\"MnemonicProvider autoschema mode requires schemaRegistry.registerSchema\");\n }\n\n const store = useMemo<MnemonicInternal>(() => {\n const prefix = `${namespace}.`;\n const st = storage ?? defaultBrowserStorage();\n const ssrHydration = ssr?.hydration ?? \"immediate\";\n const devToolsRoot = ensureDevToolsRoot(enableDevTools);\n const canEnumerateKeys = detectEnumerableStorage(st);\n const crossTabSyncMode = getCrossTabSyncMode(storage, st);\n\n /**\n * In-memory cache of raw string values.\n * Maps unprefixed keys to their raw string values (or null if not present).\n * Provides fast reads without hitting storage on every access.\n */\n const cache = new Map<string, string | null>();\n\n /**\n * Per-key listener registry.\n * Maps unprefixed keys to sets of listener functions.\n * Used to notify React components when values change.\n */\n const listeners = new Map<string, Set<Listener>>();\n\n /** Whether a QuotaExceededError has already been logged since the last successful write. */\n let quotaErrorLogged = false;\n\n /** Whether a non-quota DOMException has already been logged since the last successful storage access. */\n let accessErrorLogged = false;\n\n /** Whether the storage backend has violated the synchronous StorageLike contract. */\n let asyncContractViolationDetected = false;\n const storageAccessCallbacks: StorageAccessCallbacks = {\n onAccessError: (err) => logAccessError(err),\n onAccessSuccess: () => {\n accessErrorLogged = false;\n },\n onAsyncViolation: (method, thenable) => handleAsyncStorageContractViolation(method, thenable),\n };\n\n /**\n * Converts an unprefixed key to a fully-qualified storage key.\n *\n * @param key - Unprefixed key\n * @returns Prefixed key with namespace\n */\n const fullKey = (key: string) => prefix + key;\n\n /**\n * Notifies all listeners subscribed to a specific key.\n * Called after mutations (set/remove) to trigger React re-renders.\n *\n * @param key - Unprefixed key that changed\n */\n const emit = (key: string) => {\n const set = listeners.get(key);\n if (!set) return;\n for (const fn of set) fn();\n };\n\n /**\n * Logs a storage-access DOMException once, squelching repeats until\n * a successful storage operation resets the flag. Ignores\n * QuotaExceededError (handled separately in writeRaw) and silently\n * swallows all non-DOMException errors.\n */\n const logAccessError = (err: unknown): void => {\n if (!accessErrorLogged && err instanceof DOMException && err.name !== \"QuotaExceededError\") {\n console.error(\n `[Mnemonic] Storage access error (${err.name}): ${err.message}. ` +\n \"Data is cached in memory but may not persist.\",\n );\n accessErrorLogged = true;\n }\n };\n\n /**\n * Marks the storage backend as incompatible with the synchronous\n * StorageLike contract, consumes the offending thenable to avoid\n * unhandled rejections, and logs the problem once.\n */\n const handleAsyncStorageContractViolation = (\n method: \"getItem\" | \"setItem\" | \"removeItem\",\n thenable: PromiseLike<unknown>,\n ): void => {\n asyncContractViolationDetected = true;\n void Promise.resolve(thenable).catch(() => undefined);\n if (accessErrorLogged) return;\n console.error(\n `[Mnemonic] StorageLike.${method} returned a Promise. ` +\n \"StorageLike must remain synchronous for react-mnemonic v1. \" +\n \"Wrap async persistence behind a synchronous cache facade instead.\",\n );\n accessErrorLogged = true;\n };\n\n /**\n * Read-through cache accessor.\n * Returns cached value if available, otherwise reads from storage and caches.\n *\n * @param key - Unprefixed key to read\n * @returns Raw string value, or null if not present\n */\n const readThrough = (key: string): string | null => {\n if (cache.has(key)) return cache.get(key) ?? null;\n if (!st || asyncContractViolationDetected) {\n cache.set(key, null);\n return null;\n }\n const raw = readStorageRaw(st, fullKey(key), storageAccessCallbacks);\n cache.set(key, raw);\n return raw;\n };\n\n /**\n * Writes a raw string value to both cache and storage.\n * Notifies listeners after the write completes.\n *\n * @param key - Unprefixed key to write\n * @param raw - Raw string value to store\n */\n const writeRaw = (key: string, raw: string) => {\n cache.set(key, raw);\n if (st && !asyncContractViolationDetected) {\n try {\n const result = st.setItem(fullKey(key), raw);\n if (isPromiseLike(result)) {\n handleAsyncStorageContractViolation(\"setItem\", result);\n } else {\n quotaErrorLogged = false;\n accessErrorLogged = false;\n }\n } catch (err) {\n if (!quotaErrorLogged && err instanceof DOMException && err.name === \"QuotaExceededError\") {\n console.error(\n `[Mnemonic] Storage quota exceeded writing key \"${key}\". ` +\n \"Data is cached in memory but will not persist.\",\n );\n quotaErrorLogged = true;\n }\n logAccessError(err);\n }\n }\n emit(key);\n bumpDevToolsVersion(devToolsRoot, namespace, `set:${key}`);\n };\n\n /**\n * Removes a key from both cache and storage.\n * Notifies listeners after the removal completes.\n *\n * @param key - Unprefixed key to remove\n */\n const removeRaw = (key: string) => {\n cache.set(key, null);\n if (st && !asyncContractViolationDetected) {\n try {\n const result = st.removeItem(fullKey(key));\n if (isPromiseLike(result)) {\n handleAsyncStorageContractViolation(\"removeItem\", result);\n } else {\n accessErrorLogged = false;\n }\n } catch (err) {\n logAccessError(err);\n }\n }\n emit(key);\n bumpDevToolsVersion(devToolsRoot, namespace, `remove:${key}`);\n };\n\n /**\n * Subscribes a listener to changes for a specific key.\n * Implements the React external store subscription contract.\n *\n * @param key - Unprefixed key to subscribe to\n * @param listener - Callback invoked when the value changes\n * @returns Unsubscribe function\n */\n const subscribeRaw = (key: string, listener: Listener): Unsubscribe => {\n let set = listeners.get(key);\n if (!set) {\n set = new Set();\n listeners.set(key, set);\n }\n set.add(listener);\n\n // Ensure cache is primed so snapshots are stable.\n readThrough(key);\n\n return () => {\n const s = listeners.get(key);\n if (!s) return;\n s.delete(listener);\n if (s.size === 0) listeners.delete(key);\n };\n };\n\n /**\n * Gets the current snapshot of a key's raw value.\n * Implements the React external store snapshot contract.\n *\n * @param key - Unprefixed key to read\n * @returns Raw string value, or null if not present\n */\n const getRawSnapshot = (key: string) => readThrough(key);\n\n /**\n * Enumerates all keys in this namespace.\n * Iterates through storage and filters keys by namespace prefix.\n *\n * @returns Array of unprefixed key names\n */\n const keys = () => {\n if (asyncContractViolationDetected) {\n return Array.from(cache.entries())\n .filter(([, value]) => value != null)\n .map(([key]) => key);\n }\n if (!canEnumerateKeys) return [];\n return enumerateNamespaceKeys(st, prefix, storageAccessCallbacks);\n };\n\n /**\n * Dumps all key-value pairs in this namespace.\n * Useful for debugging and DevTools integration.\n *\n * @returns Object mapping unprefixed keys to raw string values\n */\n const dump = () => {\n const out: Record<string, string> = {};\n for (const k of keys()) {\n const raw = readThrough(k);\n if (raw != null) out[k] = raw;\n }\n return out;\n };\n\n /**\n * Re-reads keys from the underlying storage, updating the cache and\n * emitting change notifications for any keys whose values differ.\n *\n * @param changedKeys - Optional array of fully-qualified storage keys\n * that changed. When undefined, performs a blanket reload of all\n * actively subscribed keys. When an empty array, does nothing.\n *\n * Called by the onExternalChange subscription when the storage adapter\n * signals that data has changed externally (e.g., from another tab).\n */\n const reloadFromStorage = createReloadFromStorage({\n storage: st,\n hasAsyncContractViolation: () => asyncContractViolationDetected,\n prefix,\n listeners,\n cache,\n emit,\n callbacks: storageAccessCallbacks,\n devToolsRoot,\n namespace,\n });\n\n /**\n * The Mnemonic store API object.\n * Implements the contract expected by useSyncExternalStore.\n */\n const store: MnemonicInternalWithDevToolsHold = {\n prefix,\n canEnumerateKeys,\n subscribeRaw,\n getRawSnapshot,\n setRaw: writeRaw,\n removeRaw,\n keys,\n dump,\n reloadFromStorage,\n schemaMode,\n ssrHydration,\n crossTabSyncMode,\n ...(schemaRegistry ? { schemaRegistry } : {}),\n };\n\n /**\n * DevTools integration.\n * Exposes a weak-provider registry on the window object when enabled.\n */\n if (devToolsRoot) {\n registerDevToolsProvider({\n devToolsRoot,\n namespace,\n store,\n dump,\n keys,\n readThrough,\n writeRaw,\n removeRaw,\n });\n }\n\n return store;\n }, [namespace, storage, enableDevTools, schemaMode, schemaRegistry, ssr?.hydration]);\n\n const optionalBridge = useMemo(\n () =>\n createMnemonicOptionalBridge({\n api: store,\n ...(schemaRegistry ? { schemaRegistry } : {}),\n }),\n [schemaRegistry, store],\n );\n\n // Subscribe to external storage changes (e.g., cross-tab BroadcastChannel)\n useEffect(() => {\n if (!storage?.onExternalChange) return;\n return storage.onExternalChange((changedKeys) => store.reloadFromStorage(changedKeys));\n }, [storage, store]);\n\n return (\n <MnemonicContext.Provider value={store}>\n <MnemonicOptionalBridgeProvider bridge={optionalBridge}>{children}</MnemonicOptionalBridgeProvider>\n </MnemonicContext.Provider>\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\nimport type { ReactNode } from \"react\";\nimport { MnemonicProvider as SchemaMnemonicProvider } from \"./provider\";\nimport type { MnemonicProviderOptions, SchemaRegistry, SchemaMode } from \"./types\";\n\ntype CoreMnemonicProviderOptions = Omit<MnemonicProviderOptions, \"schemaMode\" | \"schemaRegistry\">;\nexport type { CoreMnemonicProviderOptions as MnemonicProviderOptions };\n\nfunction throwCoreProviderSchemaImportError(propName: \"schemaMode\" | \"schemaRegistry\"): never {\n throw new Error(\n `[Mnemonic] MnemonicProvider from react-mnemonic/core does not support ${propName}. Import MnemonicProvider from \"react-mnemonic/schema\" or \"react-mnemonic\" for schema validation, autoschema, and migration support.`,\n );\n}\n\nfunction assertNoSchemaProps(props: { schemaMode?: SchemaMode; schemaRegistry?: SchemaRegistry }): void {\n if (props.schemaMode !== undefined) {\n throwCoreProviderSchemaImportError(\"schemaMode\");\n }\n if (props.schemaRegistry !== undefined) {\n throwCoreProviderSchemaImportError(\"schemaRegistry\");\n }\n}\n\nexport interface MnemonicProviderProps extends Readonly<CoreMnemonicProviderOptions> {\n readonly children: ReactNode;\n}\n\nexport function MnemonicProvider(props: Readonly<MnemonicProviderProps>): ReactNode {\n assertNoSchemaProps(props as MnemonicProviderProps & { schemaMode?: SchemaMode; schemaRegistry?: SchemaRegistry });\n return <SchemaMnemonicProvider {...props} />;\n}\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\nimport { useCallback } from \"react\";\nimport { CodecError } from \"./codecs\";\nimport { useMnemonic } from \"./provider\";\nimport { SchemaError, type MnemonicEnvelope } from \"./schema\";\nimport { serializeEnvelope, useApplyReconcile, useMnemonicKeySharedFromApi, useMnemonicKeyState } from \"./use-shared\";\nimport type { Mnemonic, MnemonicKeyDescriptor, MnemonicKeyState, UseMnemonicKeyOptions } from \"./types\";\n\nfunction throwCoreSchemaImportError(key: string): never {\n throw new Error(\n `[Mnemonic] useMnemonicKey(\"${key}\") requested schema features from react-mnemonic/core. Import useMnemonicKey from \"react-mnemonic/schema\" or \"react-mnemonic\" for schema validation, autoschema, and migration support.`,\n );\n}\n\nexport function useCoreRuntimeFromApi<T>(\n api: Mnemonic,\n keyOrDescriptor: string | MnemonicKeyDescriptor<T, string>,\n options?: UseMnemonicKeyOptions<T>,\n active = true,\n): MnemonicKeyState<T> {\n const shared = useMnemonicKeySharedFromApi(api, keyOrDescriptor, options);\n const { key, codec, schema, reconcile, parseEnvelope, decodeStringPayload, buildFallbackResult } = shared;\n\n if (active && (schema?.version !== undefined || api.schemaMode !== \"default\")) {\n throwCoreSchemaImportError(key);\n }\n\n const applyReconcile = useApplyReconcile<T>({\n key,\n reconcile,\n buildFallbackResult,\n });\n\n const encodeForWrite = useCallback(\n (nextValue: T): string => {\n return serializeEnvelope(0, codec.encode(nextValue));\n },\n [codec],\n );\n\n const decodeForRead = useCallback(\n (rawText: string | null) => {\n if (rawText == null) return buildFallbackResult();\n\n const parsed = parseEnvelope(rawText);\n if (!parsed.ok) return buildFallbackResult(parsed.error);\n\n const envelope: MnemonicEnvelope = parsed.envelope;\n if (typeof envelope.payload !== \"string\") {\n return applyReconcile({\n value: envelope.payload as T,\n persistedVersion: envelope.version,\n serializeForPersist: encodeForWrite,\n });\n }\n\n try {\n const decoded = decodeStringPayload<T>(envelope.payload, codec);\n return applyReconcile({\n value: decoded,\n persistedVersion: envelope.version,\n serializeForPersist: encodeForWrite,\n });\n } catch (err) {\n return buildFallbackResult(err as CodecError | SchemaError);\n }\n },\n [applyReconcile, buildFallbackResult, codec, decodeStringPayload, encodeForWrite, parseEnvelope],\n );\n\n const additionalDevWarnings = useCallback(\n ({ warnOnce }: { warnOnce: (id: string, message: string) => void }) => {\n if (!api.schemaRegistry) return;\n warnOnce(\n `core-schema-registry:${key}`,\n `[Mnemonic] useMnemonicKey(\"${key}\") is running from react-mnemonic/core, so registered schemas are ignored for this key. Import useMnemonicKey from \"react-mnemonic/schema\" or \"react-mnemonic\" to enable schema validation and migrations.`,\n );\n },\n [api.schemaRegistry, key],\n );\n\n return useMnemonicKeyState(shared, {\n active,\n decodeForRead,\n encodeForWrite,\n additionalDevWarnings,\n });\n}\n\nfunction useCoreRuntime<T>(\n keyOrDescriptor: string | MnemonicKeyDescriptor<T, string>,\n options?: UseMnemonicKeyOptions<T>,\n): MnemonicKeyState<T> {\n return useCoreRuntimeFromApi(useMnemonic(), keyOrDescriptor, options);\n}\n\nexport function useMnemonicKey<T, K extends string>(descriptor: MnemonicKeyDescriptor<T, K>): MnemonicKeyState<T>;\nexport function useMnemonicKey<T>(key: string, options: UseMnemonicKeyOptions<T>): MnemonicKeyState<T>;\nexport function useMnemonicKey<T>(\n keyOrDescriptor: string | MnemonicKeyDescriptor<T, string>,\n options?: UseMnemonicKeyOptions<T>,\n): MnemonicKeyState<T> {\n return useCoreRuntime(keyOrDescriptor, options);\n}\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\nimport { useCallback, useMemo } from \"react\";\nimport { useMnemonic } from \"./provider\";\nimport { getRuntimeNodeEnv } from \"./runtime\";\nimport type {\n Mnemonic,\n MnemonicRecoveryAction,\n MnemonicRecoveryEvent,\n MnemonicRecoveryHook,\n UseMnemonicRecoveryOptions,\n} from \"./types\";\n\nfunction uniqueKeys(keys: readonly string[]): string[] {\n return [...new Set(keys)];\n}\n\nfunction isDevelopmentRuntime(): boolean {\n return getRuntimeNodeEnv() === \"development\";\n}\n\nconst recoveryDiagnosticWarnings = new WeakMap<object, Set<string>>();\n\nfunction warnRecoveryOnce(api: object, id: string, message: string): void {\n let warnings = recoveryDiagnosticWarnings.get(api);\n if (!warnings) {\n warnings = new Set<string>();\n recoveryDiagnosticWarnings.set(api, warnings);\n }\n if (warnings.has(id)) return;\n warnings.add(id);\n console.warn(message);\n}\n\n/**\n * Hook for namespace-scoped recovery actions such as hard reset and selective clear.\n *\n * Applications can use this to offer self-service recovery UX for corrupt or\n * legacy persisted state. The hook operates on the current provider namespace.\n *\n * See the\n * [Reset and Recovery guide](https://thirtytwobits.github.io/react-mnemonic/docs/guides/reset-and-recovery)\n * for soft-reset and hard-reset patterns.\n *\n * @param options - Optional recovery callback for telemetry/auditing\n * @returns Namespace recovery helpers\n *\n * @throws {Error} If used outside of a MnemonicProvider\n */\nexport function useMnemonicRecovery(options: UseMnemonicRecoveryOptions = {}): MnemonicRecoveryHook {\n return useMnemonicRecoveryFromApi(useMnemonic(), options);\n}\n\nexport function useMnemonicRecoveryFromApi(\n api: Mnemonic,\n options: UseMnemonicRecoveryOptions = {},\n active = true,\n): MnemonicRecoveryHook {\n const { onRecover } = options;\n\n const namespace = useMemo(() => {\n if (!active) return \"\";\n return api.prefix.endsWith(\".\") ? api.prefix.slice(0, -1) : api.prefix;\n }, [active, api.prefix]);\n\n const emitRecovery = useCallback(\n (action: MnemonicRecoveryAction, clearedKeys: string[]) => {\n if (!active) return;\n const event: MnemonicRecoveryEvent = {\n action,\n namespace,\n clearedKeys,\n };\n onRecover?.(event);\n },\n [active, namespace, onRecover],\n );\n\n const listKeys = useCallback(() => (active ? api.keys() : []), [active, api]);\n\n const clearResolvedKeys = useCallback(\n (action: MnemonicRecoveryAction, keys: readonly string[]) => {\n if (!active) return [];\n const clearedKeys = uniqueKeys(keys);\n for (const key of clearedKeys) {\n api.removeRaw(key);\n }\n emitRecovery(action, clearedKeys);\n return clearedKeys;\n },\n [active, api, emitRecovery],\n );\n\n const clearKeys = useCallback(\n (keys: readonly string[]) => clearResolvedKeys(\"clear-keys\", keys),\n [clearResolvedKeys],\n );\n\n const clearAll = useCallback(() => {\n if (!active) return [];\n if (!api.canEnumerateKeys) {\n if (isDevelopmentRuntime()) {\n warnRecoveryOnce(\n api,\n \"recovery-clear-all-non-enumerable\",\n `[Mnemonic] clearAll() requires an enumerable storage backend in namespace \"${namespace}\". Use clearKeys([...]) with an explicit durable-key list, or supply a storage backend that implements length and key(index).`,\n );\n }\n throw new Error(\n \"clearAll requires an enumerable storage backend. Use clearKeys([...]) with an explicit key list instead.\",\n );\n }\n return clearResolvedKeys(\"clear-all\", api.keys());\n }, [active, api, clearResolvedKeys, namespace]);\n\n const clearMatching = useCallback(\n (predicate: (key: string) => boolean) => {\n if (!active) return [];\n if (!api.canEnumerateKeys) {\n if (isDevelopmentRuntime()) {\n warnRecoveryOnce(\n api,\n \"recovery-clear-matching-non-enumerable\",\n `[Mnemonic] clearMatching() requires an enumerable storage backend in namespace \"${namespace}\". Use clearKeys([...]) with an explicit durable-key list, or supply a storage backend that implements length and key(index).`,\n );\n }\n throw new Error(\n \"clearMatching requires an enumerable storage backend. Use clearKeys([...]) with an explicit key list instead.\",\n );\n }\n return clearResolvedKeys(\n \"clear-matching\",\n api.keys().filter((key) => predicate(key)),\n );\n },\n [active, api, clearResolvedKeys, namespace],\n );\n\n return useMemo(\n () => ({\n namespace,\n canEnumerateKeys: active ? api.canEnumerateKeys : false,\n listKeys,\n clearAll,\n clearKeys,\n clearMatching,\n }),\n [namespace, active, api.canEnumerateKeys, listKeys, clearAll, clearKeys, clearMatching],\n );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\nimport type { JsonSchema } from \"./json-schema\";\nimport type { KeySchema, MnemonicKeyDescriptor, SchemaBoundKeyOptions, UseMnemonicKeyOptions } from \"./types\";\n\n/**\n * Define a reusable, importable contract for a persisted key.\n *\n * This packages the storage key and the canonical `useMnemonicKey(...)`\n * options into a single object that can be shared across components, docs,\n * and generated code.\n *\n * @template K - The literal storage key name\n * @template T - The decoded value type for the key\n *\n * @param key - The unprefixed storage key\n * @param options - Canonical hook options for the key\n * @returns A descriptor that can be passed directly to `useMnemonicKey(...)`\n *\n * @example\n * ```typescript\n * const themeKey = defineMnemonicKey(\"theme\", {\n * defaultValue: \"light\" as \"light\" | \"dark\",\n * listenCrossTab: true,\n * });\n *\n * const { value, set } = useMnemonicKey(themeKey);\n * ```\n */\nexport function defineMnemonicKey<const K extends string, T>(\n key: K,\n options: UseMnemonicKeyOptions<T>,\n): MnemonicKeyDescriptor<T, K>;\nexport function defineMnemonicKey<const K extends string, TSchema extends KeySchema<unknown, K, JsonSchema>>(\n keySchema: TSchema,\n options: SchemaBoundKeyOptions<TSchema extends KeySchema<infer TValue, string, JsonSchema> ? TValue : never>,\n): MnemonicKeyDescriptor<TSchema extends KeySchema<infer TValue, string, JsonSchema> ? TValue : never, TSchema[\"key\"]>;\nexport function defineMnemonicKey(\n keyOrSchema: string | KeySchema<unknown, string, JsonSchema>,\n options: UseMnemonicKeyOptions<unknown> | SchemaBoundKeyOptions<unknown>,\n): MnemonicKeyDescriptor<unknown, string> {\n if (typeof keyOrSchema !== \"string\") {\n return Object.freeze({\n key: keyOrSchema.key,\n options: {\n ...options,\n schema: { version: keyOrSchema.version },\n },\n });\n }\n\n return Object.freeze({\n key: keyOrSchema,\n options,\n });\n}\n"]}