stroid 0.0.4 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/CHANGELOG.md +136 -25
  2. package/README.md +514 -81
  3. package/dist/_tsup-dts-rollup.d.cts +2411 -0
  4. package/dist/_tsup-dts-rollup.d.ts +2411 -0
  5. package/dist/async.cjs +34 -0
  6. package/dist/async.cjs.map +1 -0
  7. package/dist/async.d.cts +9 -0
  8. package/dist/async.d.ts +9 -30
  9. package/dist/async.js +34 -1
  10. package/dist/async.js.map +1 -0
  11. package/dist/computed.cjs +13 -0
  12. package/dist/computed.cjs.map +1 -0
  13. package/dist/computed.d.cts +7 -0
  14. package/dist/computed.d.ts +7 -0
  15. package/dist/computed.js +13 -0
  16. package/dist/computed.js.map +1 -0
  17. package/dist/core.cjs +24 -0
  18. package/dist/core.cjs.map +1 -0
  19. package/dist/core.d.cts +15 -0
  20. package/dist/core.d.ts +15 -1
  21. package/dist/core.js +24 -1
  22. package/dist/core.js.map +1 -0
  23. package/dist/devtools.cjs +2 -0
  24. package/dist/devtools.cjs.map +1 -0
  25. package/dist/devtools.d.cts +5 -0
  26. package/dist/devtools.d.ts +5 -0
  27. package/dist/devtools.js +2 -0
  28. package/dist/devtools.js.map +1 -0
  29. package/dist/feature.cjs +2 -0
  30. package/dist/feature.cjs.map +1 -0
  31. package/dist/feature.d.cts +14 -0
  32. package/dist/feature.d.ts +14 -0
  33. package/dist/feature.js +2 -0
  34. package/dist/feature.js.map +1 -0
  35. package/dist/helpers.cjs +24 -0
  36. package/dist/helpers.cjs.map +1 -0
  37. package/dist/helpers.d.cts +3 -0
  38. package/dist/helpers.d.ts +3 -0
  39. package/dist/helpers.js +24 -0
  40. package/dist/helpers.js.map +1 -0
  41. package/dist/index.cjs +35 -0
  42. package/dist/index.cjs.map +1 -0
  43. package/dist/index.d.cts +33 -0
  44. package/dist/index.d.ts +33 -3
  45. package/dist/index.js +35 -1
  46. package/dist/index.js.map +1 -0
  47. package/dist/install.cjs +2 -0
  48. package/dist/install.cjs.map +1 -0
  49. package/dist/install.d.cts +4 -0
  50. package/dist/install.d.ts +4 -0
  51. package/dist/install.js +2 -0
  52. package/dist/install.js.map +1 -0
  53. package/dist/persist.cjs +2 -0
  54. package/dist/persist.cjs.map +1 -0
  55. package/dist/persist.d.cts +1 -0
  56. package/dist/persist.d.ts +1 -0
  57. package/dist/persist.js +2 -0
  58. package/dist/persist.js.map +1 -0
  59. package/dist/react.cjs +36 -0
  60. package/dist/react.cjs.map +1 -0
  61. package/dist/react.d.cts +7 -0
  62. package/dist/react.d.ts +7 -20
  63. package/dist/react.js +36 -1
  64. package/dist/react.js.map +1 -0
  65. package/dist/runtime-admin.cjs +2 -0
  66. package/dist/runtime-admin.cjs.map +1 -0
  67. package/dist/runtime-admin.d.cts +2 -0
  68. package/dist/runtime-admin.d.ts +2 -0
  69. package/dist/runtime-admin.js +2 -0
  70. package/dist/runtime-admin.js.map +1 -0
  71. package/dist/runtime-tools.cjs +4 -0
  72. package/dist/runtime-tools.cjs.map +1 -0
  73. package/dist/runtime-tools.d.cts +9 -0
  74. package/dist/runtime-tools.d.ts +9 -0
  75. package/dist/runtime-tools.js +4 -0
  76. package/dist/runtime-tools.js.map +1 -0
  77. package/dist/selectors.cjs +2 -0
  78. package/dist/selectors.cjs.map +1 -0
  79. package/dist/selectors.d.cts +2 -0
  80. package/dist/selectors.d.ts +2 -0
  81. package/dist/selectors.js +2 -0
  82. package/dist/selectors.js.map +1 -0
  83. package/dist/server.cjs +12 -0
  84. package/dist/server.cjs.map +1 -0
  85. package/dist/server.d.cts +2 -0
  86. package/dist/server.d.ts +2 -0
  87. package/dist/server.js +12 -0
  88. package/dist/server.js.map +1 -0
  89. package/dist/sync.cjs +2 -0
  90. package/dist/sync.cjs.map +1 -0
  91. package/dist/sync.d.cts +1 -0
  92. package/dist/sync.d.ts +1 -0
  93. package/dist/sync.js +2 -0
  94. package/dist/sync.js.map +1 -0
  95. package/dist/testing.cjs +24 -0
  96. package/dist/testing.cjs.map +1 -0
  97. package/dist/testing.d.cts +4 -0
  98. package/dist/testing.d.ts +4 -16
  99. package/dist/testing.js +24 -1
  100. package/dist/testing.js.map +1 -0
  101. package/package.json +86 -6
  102. package/dist/chunk-5F2FD6DX.js +0 -17
  103. package/dist/chunk-G6JMMJYH.js +0 -5
  104. package/dist/chunk-JBYLHJKN.js +0 -3
  105. package/dist/chunk-K6QIWMMW.js +0 -1
  106. package/dist/core-CKzRwVaY.d.ts +0 -213
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/internals/test-reset.ts","../src/async-registry.ts","../src/store-registry.ts","../src/internals/config.ts","../src/internals/diagnostics.ts","../src/utils/validation.ts","../src/utils/hash.ts","../src/utils/clone.ts","../src/utils/path.ts","../src/adapters/options.ts","../src/devfreeze.ts","../src/feature-registry.ts","../src/features/lifecycle.ts","../src/internals/reporting.ts","../src/internals/computed-order.ts","../src/computed-graph.ts","../src/store-lifecycle/identity.ts","../src/store-transaction.ts","../src/store-lifecycle/validation.ts","../src/store-read.ts","../src/store-name.ts","../src/store-notify.ts","../src/computed.ts","../src/internals/store-admin.ts","../src/store-lifecycle/registry.ts","../src/store-lifecycle/hooks.ts","../src/store-write.ts","../src/async-cache.ts","../src/internals/selector-store.ts","../src/selectors.ts","../src/internals/hooks-warnings.ts","../src/hooks-core.ts","../src/hooks-async.ts","../src/hooks-form.ts","../src/async-retry.ts","../src/async/clone.ts","../src/async/errors.ts","../src/async/inflight.ts","../src/async/rate.ts","../src/async/request.ts","../src/async-fetch.ts","../src/hooks-async-suspense.ts"],"names":["_resetHooks","registerTestResetHook","name","fn","order","createAsyncRegistry","resetAsyncRegistry","registry","cleanup","unsubscribe","fns","key","_registries","_registryOverrideEnv","_registryOverrideRuntime","normalizeStoreRegistryScope","scope","defaultRegistryScope","clearRegistryScopeOverrideForTests","createNotifyState","resetNotifyState","notify","createStoreRegistry","getStoreRegistry","normalizedScope","existing","created","hasStoreEntry","isStoreDeleting","clearStoreRegistries","registryPart","getRequestCarrier","runWithRegistry","getActiveStoreRegistry","fallback","defaultLogSink","msg","meta","defaultConfig","cloneConfig","base","configByRegistry","baseConfig","getRegistryConfig","config","getConfig","resetConfig","getNamespace","_envFromProcess","_envFromImportMeta","_devFlag","_fallbackEnv","_resolvedEnv","__DEV__","isDev","defaultWarn","defaultCritical","defaultLog","critical","warn","warnAlways","error","log","getInvalidFunctionStoreValueMessage","getMapSetStoreWarningMessage","getDateStoreWarningMessage","getSanitizeDateWarningMessage","getSanitizeMapWarningMessage","getSanitizeSetWarningMessage","getPathDepthExceededMessage","depth","maxDepth","parts","getDeepNestingWarningMessage","getPathReachedNullMessage","part","getPathNotObjectMessage","getInvalidStoreNameMessage","getStoreNameContainsSpacesMessage","getForbiddenStoreNameMessage","MAX_LEVENSHTEIN_INPUT_LENGTH","shouldCheckLevenshtein","a","b","levenshtein","prev","_","i","next","j","suggestStoreName","existingNames","similar","entry","FORBIDDEN_OBJECT_KEYS","runSchemaValidation","schema","value","res","joiError","message","err","getType","getNonSerializableType","WeakRefCtor","isValidData","type","_canReuseSanitized","seen","blocked","keys","idx","descriptors","descriptor","canReuseSanitized","_sanitize","clean","entryValue","sanitize","isValidStoreName","_crcTable","_getCrcTable","c","table","n","k","crc32","str","crc","HASH_SEED_1","HASH_SEED_2","MAX_HASH_NODES","mixHash","state","v","mixString","mixToken","token","hashNumber","asInt","hashValue","sym","obj","seenId","id","entries","hashState","h1","h2","hasStructuredClone","shallowClone","clone","_deepCloneFallback","index","deepClone","shallowEqual","aObj","bObj","aKeys","bKeys","MAX_DEPTH","WARN_DEPTH","_splitPath","path","current","escaping","ch","parsePath","validateDepth","getByPath","setByPath","segment","applyAt","isLast","targetIndex","isIndex","container","arr","warnedLegacyOptions","resetLegacyOptionDeprecationWarningsForTests","memoryStorage","m","safeStorage","isObject","hasOwn","isIdentityStringTransform","probeA","probeB","DEFAULT_PERSIST_CRYPTO_MARK","markDefaultPersistCrypto","legacyOptionReplacementMap","normalizePersistOptions","persist","encrypt","decrypt","encryptAsync","decryptAsync","sensitiveData","allowPlaintext","checksum","collectLegacyOptionDeprecationWarnings","option","warnings","legacyKey","replacement","normalizeStoreOptions","defaultSnapshotMode","normalizedLazy","normalizedPathCreate","lifecycle","persistGroup","devtoolsGroup","normalizedValidate","normalizedSnapshot","normalizedFeatures","explicitPersist","explicitSync","explicitDevtools","normalizedAllowSSRGlobalStore","devtools","onError","sync","enc","encAsync","devDeepFreeze","stack","_featureFactories","hasRegisteredStoreFeature","getStoreFeatureFactory","getRegisteredFeatureNames","MIDDLEWARE_ABORT","runMiddleware","payload","middlewares","reportIssue","warnedUndefined","nextState","mw","result","middlewareNext","runStoreHook","label","args","options","severity","visibility","resolver","setComputedOrderResolver","getComputedOrder","names","getRegistry","getEntries","getDependents","isComputed","getTopoOrderedComputeds","changedSources","dependents","affected","queue","deps","dep","expandComputedDeps","inDegree","adjList","degree","ready","sorted","children","child","newDegree","insertAt","_ssrWarningsIssued","getSsrWarningIssued","markSsrWarningIssued","resetSsrWarningFlag","_namespaceWarnings","qualifyName","raw","ns","nameOf","exists","hasStoreEntryInternal","isDeleting","stores","reportStoreIssue","reportStoreCreationIssue","reportStoreWarning","reportStoreCreationWarning","reportStoreError","reportStoreCreationError","warnMissingFeature","storeName","featureName","getTransactionState","coerceError","isTransactionActive","markTransactionFailed","registerTransactionCommit","stageTransactionValue","getStagedTransactionValue","_pathValidationCacheByRegistry","_pathValidationLruByRegistry","MAX_PATH_CACHE_ENTRIES_PER_STORE","PATH_CACHE_DELIMITER","getPathValidationCache","cache","getPathValidationLru","lru","getStorePathLru","lruByStore","storeLru","touchPathLru","cacheKey","oldestKey","oldest","_target","prop","target","validatePathSafety","nextValue","metaEntry","incomingType","pathCache","pathKey","root","node","cached","allowCreate","cursor","verdict","reason","expected","hadVerdict","sanitizeValue","collectErrorHandlers","handlers","metaHandler","runValidation","validate","report","handler","schemaResult","normalizeCommittedState","sanitized","validation","invalidatePathCache","clearPathValidationCache","setPathCacheInvalidator","materializeInitial","factory","initialFactories","produced","cleanResult","normalized","setStoreValueInternal","initialStates","getStore","data","getStoreValueRef","hasStore","store","resolveSnapshotMode","mode","cloneSnapshot","maybeFreezeSnapshot","snapshot","scheduleChunk","delayMs","buildPendingOrder","pendingNotifications","pendingBuffer","orderedNames","cfg","priority","pendingSet","prioritySet","p","computedOrder","orderedSet","computedName","sliceSize","chunkDelayMs","runInline","flush","now","finish","scheduleFlush","subs","subscribers","version","snapshotMode","snapshotCache","nextSnapshot","start","subscriber","elapsed","metrics","buildQueue","filter","tasks","priorityQueue","regularQueue","refreshTaskSubscribers","task","runQueue","done","processNext","sent","versionChanged","currentSubs","hasUnnotified","sub","run","subscribeStore","subscribe","getStoreSnapshot","txCache","source","snap","resetNotifyStateForTests","getComputedCleanups","deleteComputed","cleanups","createStoreAdmin","metaEntries","featureRuntimes","deletingStores","createDeleteContext","initialState","getMeta","getStoreValue","runFeatureDeleteHooks","phase","beforeDeleteContext","afterDeleteContext","runtime","deleteExistingStore","removed","pass","previousRemaining","remaining","pattern","_scope","_defaultRegistry","_invalidatePathCache","initializedRegistries","initializeRegistryFeatureRuntimes","getActiveRegistry","createRegistryObjectProxy","getter","desc","createRegistryMapProxy","createRegistryValueProxy","storeAdminByRegistry","getStoreAdminForRegistry","admin","getFeatureRuntime","initializeRegisteredFeatureRuntimes","staged","carrier","frozen","applyFeatureState","updatedAtMs","clearAllRegistries","resetFeaturesForTests","baseFeatureContextsByRegistry","getBaseFeatureContexts","contexts","clearFeatureContexts","createBaseFeatureContext","baseFeatureContexts","ctx","runFeatureCreateHooks","baseContext","runFeatureWriteHooks","action","runMiddlewareForStore","storeMiddleware","globalMiddleware","runStoreHookSafe","resolveFeatureAvailability","SLOW_MUTATOR_WARN_MS","slowMutatorWarned","ssrGlobalAllowWarned","warnSlowMutator","elapsedMs","commitStoreUpdate","hookLabel","logMessage","stageOrCommitUpdate","createStore","initialData","normalizedOptions","isServer","nodeEnv","isProdServer","allowGlobalSSR","isLazy","hadPreexistingSubscribers","validated","createdAtMs","createdAtIso","setStore","keyOrData","updated","stagedPrev","usedMutator","mutatorStart","producer","didReturn","returnedValue","recipe","draft","partialResult","valueResult","sanitizedValue","safePath","validateRule","committed","MAX_CACHE_SLOTS_PER_STORE","MAX_INFLIGHT_SLOTS_PER_STORE","MAX_WARNED_ENTRIES","getActiveAsyncRegistry","createAsyncObjectProxy","createAsyncValueProxy","getFetchRegistry","inflight","requestVersion","getCacheMeta","rateWindowStart","rateCount","cleanupSubs","storeCleanupFns","noSignalWarned","shapeWarned","autoCreateWarned","mutableResultWarned","asyncMetrics","markWarned","set","shouldUseCache","cacheSlot","ttl","cacheMeta","clearAsyncMeta","fetchRegistry","startsWithName","pruneAsyncCache","prefix","slots","overflow","countInflightSlots","count","registerStoreCleanup","ensureCleanupSubscription","unregisterStoreCleanup","hasSelectorStoreEntry","subscribeSelectorStore","subscribeWithSelector","selector","equality","listener","hasPrev","prevSel","getSafeSelectorState","ref","_state","nextSel","last","_broadUseStoreWarnings","_missingUseStoreWarnings","hasBroadUseStoreWarning","markBroadUseStoreWarning","hasMissingUseStoreWarning","markMissingUseStoreWarning","resetBroadUseStoreWarnings","resetMissingUseStoreWarnings","pickPath","createSelectorCache","readSelectorCache","selectorRef","equalityRef","cacheRef","currentSelector","warnMissingStoreOnce","warnBroadUseStoreOnce","hasSelector","useStore","pathOrSelector","equalityFn","useRef","selectorCache","selectorIdentityWarned","prevSelectorRef","readSelectedSnapshot","useCallback","getSnapshot","useSyncExternalStore","useEffect","useStoreField","field","useSelector","selectorFn","resolvedName","selectValue","getSnap","selection","useStoreStatic","useAsyncStore","handle","useFormStore","onChange","eOrValue","MAX_RETRY_ATTEMPTS","MIN_RETRY_DELAY_MS","MAX_RETRY_DELAY_MS","MAX_RETRY_BACKOFF","delay","ms","signal","resolve","timer","onAbort","normalizeRetryNumber","normalizeRetryOptions","retry","retryDelay","retryBackoff","rawRetry","safeRetry","safeRetryDelay","safeRetryBackoff","cloneAsyncResult","runAsyncHook","reportAsyncUsageError","throwAsyncUsageError","isCurrentRequest","reserveRequestVersion","currentVersion","clearRequestVersion","setInflightEntry","clearInflightEntry","hasInflightEntry","tryDedupeRequest","transform","active","RATE_WINDOW_MS","RATE_MAX","pruneRateCountersForRegistry","nowTs","pruneRateCounters","scheduleRatePrune","registerRateHit","windowStart","currentCount","buildFetchOptions","fetchOpts","parseResponseBody","response","responseType","contentType","looksLikeAsyncState","record","_applyAsyncState","storeHandle","_settleAbort","applyState","fetchStore","nameInput","urlOrRequest","onSuccess","stateAdapter","method","headers","body","staleWhileRevalidate","dedupe","isDirectPromiseInput","retryPolicy","promiseRetryNoticeIssued","shouldWarnPromiseRetry","autoCreate","cloneMode","cachedData","backgroundRevalidate","readCachedData","deduped","startedAt","controller","mergedSignal","abortOnCleanup","executeFetch","attempts","currentRequest","isPromiseRequest","effectiveRetryPolicy","fetchOptions","transformed","cloned","errorMessage","timeoutId","timeoutPromise","reject","execution","promise","rawPromise","refetchStore","latest","EMPTY_OPTIONS","useAsyncStoreSuspense","input","resolvedOptions","useMemo","pending"],"mappings":"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","file":"react.js","sourcesContent":["/**\r\n * @module internals/test-reset\r\n *\r\n * LAYER: Internal subsystem\r\n * OWNS: Module-level behavior and exports for internals/test-reset.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\ntype TestResetHook = {\r\n name: string;\r\n order: number;\r\n fn: () => void;\r\n};\r\n\r\nconst _resetHooks = new Map<string, TestResetHook>();\r\n\r\nexport const registerTestResetHook = (name: string, fn: () => void, order = 0): void => {\r\n if (!name || typeof fn !== \"function\") return;\r\n _resetHooks.set(name, { name, order, fn });\r\n};\r\n\r\nexport const runTestResets = (): void => {\r\n const ordered = Array.from(_resetHooks.values()).sort((a, b) => {\r\n if (a.order !== b.order) return a.order - b.order;\r\n return a.name.localeCompare(b.name, \"en\");\r\n });\r\n ordered.forEach((hook) => hook.fn());\r\n};\r\n\r\n\r\n","/**\r\n * @module async-registry\r\n *\r\n * LAYER: Module\r\n * OWNS: Module-level behavior and exports for async-registry.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nexport type AsyncStateSnapshot = {\r\n data?: unknown;\r\n loading: boolean;\r\n error: string | null;\r\n status: \"idle\" | \"loading\" | \"success\" | \"error\" | \"aborted\";\r\n cached?: boolean;\r\n revalidating?: boolean;\r\n};\r\n\r\nexport type AsyncStateAdapter = (ctx: {\r\n name: string;\r\n prev: unknown;\r\n next: AsyncStateSnapshot;\r\n set: (value: unknown | ((draft: any) => void)) => void;\r\n}) => void;\r\n\r\nexport interface FetchOptions {\r\n transform?: (result: unknown) => unknown;\r\n onSuccess?: (data: unknown) => void;\r\n onError?: (message: string) => void;\r\n /**\r\n * Optional adapter to write async state into a custom store shape.\r\n * When provided, default AsyncState writes are skipped.\r\n */\r\n stateAdapter?: AsyncStateAdapter;\r\n method?: string;\r\n headers?: Record<string, string>;\r\n body?: unknown;\r\n ttl?: number;\r\n staleWhileRevalidate?: boolean;\r\n dedupe?: boolean;\r\n retry?: number;\r\n retryDelay?: number;\r\n retryBackoff?: number;\r\n signal?: AbortSignal;\r\n cacheKey?: string;\r\n responseType?: \"auto\" | \"json\" | \"text\" | \"arrayBuffer\" | \"blob\" | \"formData\";\r\n /**\r\n * Auto-create the backing store if missing.\r\n * Defaults to the global config setting (true by default).\r\n */\r\n autoCreate?: boolean;\r\n /**\r\n * Clone strategy for transformed results.\r\n * - \"none\" (default): store by reference.\r\n * - \"shallow\": shallow clone objects/arrays.\r\n * - \"deep\": deep clone objects/arrays.\r\n */\r\n cloneResult?: \"none\" | \"shallow\" | \"deep\";\r\n}\r\n\r\ntype InflightEntry = { promise: Promise<unknown>; raw: Promise<unknown>; transform?: FetchOptions[\"transform\"] };\r\n\r\nexport type AsyncRegistry = {\r\n fetchRegistry: Record<string, { kind: \"url\"; url: string; options: FetchOptions } | { kind: \"factory\"; factory: () => string | Promise<unknown>; options: FetchOptions }>;\r\n inflight: Partial<Record<string, InflightEntry>>;\r\n requestVersion: Record<string, number>;\r\n cacheMeta: Record<string, { timestamp: number; expiresAt: number | null; data: unknown }>;\r\n rateWindowStart: Record<string, number>;\r\n rateCount: Record<string, number>;\r\n ratePruneState: { lastAt: number };\r\n ratePruneTimer: ReturnType<typeof setTimeout> | null;\r\n noSignalWarned: Set<string>;\r\n shapeWarned: Set<string>;\r\n autoCreateWarned: Set<string>;\r\n mutableResultWarned: Set<string>;\r\n cleanupSubs: Record<string, () => void>;\r\n storeCleanupFns: Record<string, Set<() => void>>;\r\n revalidateKeys: Set<string>;\r\n revalidateHandlers: Record<string, () => void>;\r\n asyncMetrics: {\r\n cacheHits: number;\r\n cacheMisses: number;\r\n dedupes: number;\r\n requests: number;\r\n failures: number;\r\n avgMs: number;\r\n lastMs: number;\r\n };\r\n};\r\n\r\nexport const createAsyncRegistry = (): AsyncRegistry => ({\r\n fetchRegistry: Object.create(null),\r\n inflight: Object.create(null),\r\n requestVersion: Object.create(null),\r\n cacheMeta: Object.create(null),\r\n rateWindowStart: Object.create(null),\r\n rateCount: Object.create(null),\r\n ratePruneState: { lastAt: 0 },\r\n ratePruneTimer: null,\r\n noSignalWarned: new Set<string>(),\r\n shapeWarned: new Set<string>(),\r\n autoCreateWarned: new Set<string>(),\r\n mutableResultWarned: new Set<string>(),\r\n cleanupSubs: Object.create(null),\r\n storeCleanupFns: Object.create(null),\r\n revalidateKeys: new Set<string>(),\r\n revalidateHandlers: Object.create(null),\r\n asyncMetrics: {\r\n cacheHits: 0,\r\n cacheMisses: 0,\r\n dedupes: 0,\r\n requests: 0,\r\n failures: 0,\r\n avgMs: 0,\r\n lastMs: 0,\r\n },\r\n});\r\n\r\nexport const resetAsyncRegistry = (registry: AsyncRegistry): void => {\r\n Object.values(registry.revalidateHandlers).forEach((cleanup) => {\r\n try { cleanup(); } catch (_) { /* ignore cleanup errors */ }\r\n });\r\n\r\n Object.values(registry.cleanupSubs).forEach((unsubscribe) => {\r\n try { unsubscribe(); } catch (_) { /* ignore cleanup errors */ }\r\n });\r\n\r\n Object.values(registry.storeCleanupFns).forEach((fns) => {\r\n fns.forEach((fn) => {\r\n try { fn(); } catch (_) { /* ignore cleanup errors */ }\r\n });\r\n });\r\n\r\n Object.keys(registry.fetchRegistry).forEach((key) => delete registry.fetchRegistry[key]);\r\n Object.keys(registry.inflight).forEach((key) => delete registry.inflight[key]);\r\n Object.keys(registry.requestVersion).forEach((key) => delete registry.requestVersion[key]);\r\n Object.keys(registry.cacheMeta).forEach((key) => delete registry.cacheMeta[key]);\r\n Object.keys(registry.rateWindowStart).forEach((key) => delete registry.rateWindowStart[key]);\r\n Object.keys(registry.rateCount).forEach((key) => delete registry.rateCount[key]);\r\n Object.keys(registry.cleanupSubs).forEach((key) => delete registry.cleanupSubs[key]);\r\n Object.keys(registry.storeCleanupFns).forEach((key) => delete registry.storeCleanupFns[key]);\r\n Object.keys(registry.revalidateHandlers).forEach((key) => delete registry.revalidateHandlers[key]);\r\n\r\n registry.revalidateKeys.clear();\r\n registry.noSignalWarned.clear();\r\n registry.shapeWarned.clear();\r\n registry.autoCreateWarned.clear();\r\n registry.mutableResultWarned.clear();\r\n registry.ratePruneState.lastAt = 0;\r\n if (registry.ratePruneTimer) {\r\n clearTimeout(registry.ratePruneTimer);\r\n registry.ratePruneTimer = null;\r\n }\r\n\r\n registry.asyncMetrics.cacheHits = 0;\r\n registry.asyncMetrics.cacheMisses = 0;\r\n registry.asyncMetrics.dedupes = 0;\r\n registry.asyncMetrics.requests = 0;\r\n registry.asyncMetrics.failures = 0;\r\n registry.asyncMetrics.avgMs = 0;\r\n registry.asyncMetrics.lastMs = 0;\r\n};\r\n\r\n\r\n","/**\r\n * @module store-registry\r\n *\r\n * LAYER: Store runtime\r\n * OWNS: Module-level behavior and exports for store-registry.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport type { FeatureName, StoreFeatureMeta, StoreFeatureRuntime } from \"./feature-registry.js\";\r\nimport type { AsyncRegistry } from \"./async-registry.js\";\r\nimport { createAsyncRegistry, resetAsyncRegistry } from \"./async-registry.js\";\r\nimport { registerTestResetHook } from \"./internals/test-reset.js\";\r\n\r\nexport type RegistryStoreValue = unknown;\r\nexport type RegistrySubscriber = (value: RegistryStoreValue | null) => void;\r\nexport type RegistrySnapshotEntry = {\r\n version: number;\r\n snapshot: RegistryStoreValue | null;\r\n};\r\n\r\nexport type TransactionState = {\r\n depth: number;\r\n pending: Array<() => void>;\r\n stagedValues: Map<string, RegistryStoreValue>;\r\n snapshotCache: Map<string, TransactionSnapshotEntry>;\r\n failed: boolean;\r\n error?: Error;\r\n};\r\n\r\ntype TransactionSnapshotMode = \"deep\" | \"shallow\" | \"ref\";\r\ntype TransactionSnapshotEntry = {\r\n source: RegistryStoreValue | null | undefined;\r\n snapshot: RegistryStoreValue | null;\r\n mode: TransactionSnapshotMode;\r\n};\r\n\r\nexport type ComputedEntry = {\r\n deps: string[];\r\n compute: (...args: unknown[]) => unknown;\r\n stale: boolean;\r\n};\r\n\r\nexport type NotifyState = {\r\n pendingNotifications: Set<string>;\r\n pendingBuffer: string[];\r\n orderedNames: string[];\r\n notifyScheduled: boolean;\r\n batchDepth: number;\r\n};\r\n\r\nexport type StoreRegistry = {\r\n stores: Record<string, RegistryStoreValue>;\r\n subscribers: Record<string, Set<RegistrySubscriber>>;\r\n initialStates: Record<string, RegistryStoreValue>;\r\n initialFactories: Record<string, (() => RegistryStoreValue) | undefined>;\r\n metaEntries: Record<string, StoreFeatureMeta>;\r\n snapshotCache: Record<string, RegistrySnapshotEntry>;\r\n featureRuntimes: Map<FeatureName, StoreFeatureRuntime>;\r\n deletingStores: Set<string>;\r\n computedEntries: Record<string, ComputedEntry>;\r\n computedDependents: Record<string, Set<string>>;\r\n computedCleanups: Map<string, () => void>;\r\n transaction: TransactionState;\r\n async: AsyncRegistry;\r\n notify: NotifyState;\r\n};\r\n\r\nconst _registries = new Map<string, StoreRegistry>();\r\n\r\ndeclare const __STROID_REGISTRY_ID__: string | undefined;\r\nconst _registryOverrideEnv =\r\n (typeof __STROID_REGISTRY_ID__ !== \"undefined\" && __STROID_REGISTRY_ID__)\r\n || (typeof process !== \"undefined\" && process.env?.STROID_REGISTRY_ID)\r\n || undefined;\r\n\r\nlet _registryOverrideRuntime: string | undefined;\r\n\r\nexport const normalizeStoreRegistryScope = (scope: string): string => {\r\n const resolved = _registryOverrideRuntime || _registryOverrideEnv || scope;\r\n return resolved.replace(/\\.ts(\\?|$)/, \".js$1\");\r\n};\r\n\r\nexport const defaultRegistryScope = normalizeStoreRegistryScope(new URL(\"./store.js\", import.meta.url).href);\r\nexport const getDefaultStoreRegistry = (): StoreRegistry => getStoreRegistry(defaultRegistryScope);\r\n\r\nexport const setRegistryScope = (scope: string): void => {\r\n _registryOverrideRuntime = scope;\r\n _registries.clear();\r\n};\r\n\r\nexport const clearRegistryScopeOverrideForTests = (): void => {\r\n _registryOverrideRuntime = undefined;\r\n _registries.clear();\r\n};\r\n\r\nregisterTestResetHook(\"registry.scope-override\", clearRegistryScopeOverrideForTests, 110);\r\n\r\nconst createNotifyState = (): NotifyState => ({\r\n pendingNotifications: new Set<string>(),\r\n pendingBuffer: [],\r\n orderedNames: [],\r\n notifyScheduled: false,\r\n batchDepth: 0,\r\n});\r\n\r\nconst resetNotifyState = (notify: NotifyState): void => {\r\n notify.pendingNotifications.clear();\r\n notify.pendingBuffer.length = 0;\r\n notify.orderedNames.length = 0;\r\n notify.notifyScheduled = false;\r\n notify.batchDepth = 0;\r\n};\r\n\r\nexport const createStoreRegistry = (): StoreRegistry => ({\r\n stores: Object.create(null),\r\n subscribers: Object.create(null),\r\n initialStates: Object.create(null),\r\n initialFactories: Object.create(null),\r\n metaEntries: Object.create(null),\r\n snapshotCache: Object.create(null),\r\n featureRuntimes: new Map(),\r\n deletingStores: new Set(),\r\n computedEntries: Object.create(null),\r\n computedDependents: Object.create(null),\r\n computedCleanups: new Map(),\r\n transaction: {\r\n depth: 0,\r\n pending: [],\r\n stagedValues: new Map(),\r\n snapshotCache: new Map(),\r\n failed: false,\r\n error: undefined,\r\n },\r\n async: createAsyncRegistry(),\r\n notify: createNotifyState(),\r\n});\r\n\r\nexport const getStoreRegistry = (scope: string): StoreRegistry => {\r\n const normalizedScope = normalizeStoreRegistryScope(scope);\r\n const existing = _registries.get(normalizedScope);\r\n if (existing) return existing;\r\n const created = createStoreRegistry();\r\n _registries.set(normalizedScope, created);\r\n return created;\r\n};\r\n\r\nexport const hasStoreEntry = (registry: StoreRegistry, name: string): boolean =>\r\n Object.prototype.hasOwnProperty.call(registry.stores, name);\r\n\r\nexport const isStoreDeleting = (registry: StoreRegistry, name: string): boolean =>\r\n registry.deletingStores.has(name);\r\n\r\nexport const clearStoreRegistries = (registry: StoreRegistry): void => {\r\n registry.computedCleanups.forEach((cleanup) => {\r\n try { cleanup(); } catch (_) { /* ignore cleanup errors */ }\r\n });\r\n registry.computedCleanups.clear();\r\n [\r\n registry.stores,\r\n registry.subscribers,\r\n registry.initialStates,\r\n registry.initialFactories,\r\n registry.metaEntries,\r\n registry.snapshotCache,\r\n registry.computedEntries,\r\n registry.computedDependents,\r\n ].forEach((registryPart) => {\r\n Object.keys(registryPart).forEach((key) => {\r\n delete registryPart[key];\r\n });\r\n });\r\n registry.deletingStores.clear();\r\n registry.transaction.depth = 0;\r\n registry.transaction.pending = [];\r\n registry.transaction.stagedValues.clear();\r\n registry.transaction.snapshotCache.clear();\r\n registry.transaction.failed = false;\r\n registry.transaction.error = undefined;\r\n resetNotifyState(registry.notify);\r\n resetAsyncRegistry(registry.async);\r\n};\r\n\r\nexport const resetAllStoreRegistriesForTests = (): void => {\r\n _registries.forEach((registry) => {\r\n registry.computedCleanups.forEach((cleanup) => {\r\n try { cleanup(); } catch (_) { /* ignore cleanup errors */ }\r\n });\r\n registry.computedCleanups.clear();\r\n [\r\n registry.stores,\r\n registry.subscribers,\r\n registry.initialStates,\r\n registry.initialFactories,\r\n registry.metaEntries,\r\n registry.snapshotCache,\r\n registry.computedEntries,\r\n registry.computedDependents,\r\n ].forEach((registryPart) => {\r\n Object.keys(registryPart).forEach((key) => {\r\n delete registryPart[key];\r\n });\r\n });\r\n registry.deletingStores.clear();\r\n registry.transaction.depth = 0;\r\n registry.transaction.pending = [];\r\n registry.transaction.stagedValues.clear();\r\n registry.transaction.snapshotCache.clear();\r\n registry.transaction.failed = false;\r\n registry.transaction.error = undefined;\r\n resetNotifyState(registry.notify);\r\n resetAsyncRegistry(registry.async);\r\n });\r\n _registries.clear();\r\n};\r\n\r\nexport type CarrierContext = Record<string, unknown>;\r\nexport interface CarrierRunner {\r\n run<T>(carrier: CarrierContext, fn: () => T): T;\r\n get(): CarrierContext | null;\r\n}\r\n\r\nlet currentCarrierRunner: CarrierRunner | null = null;\r\n\r\nexport const injectCarrierRunner = (runner: CarrierRunner): void => {\r\n currentCarrierRunner = runner;\r\n};\r\n\r\nexport const getRequestCarrier = (): CarrierContext | null => {\r\n return currentCarrierRunner?.get() || null;\r\n};\r\n\r\nexport interface RegistryRunner {\r\n run<T>(registry: StoreRegistry, fn: () => T): T;\r\n get(): StoreRegistry | null;\r\n enterWith?: (registry: StoreRegistry) => void;\r\n}\r\n\r\nlet currentRegistryRunner: RegistryRunner | null = null;\r\n\r\nexport const injectRegistryRunner = (runner: RegistryRunner): void => {\r\n currentRegistryRunner = runner;\r\n};\r\n\r\nexport const runWithRegistry = <T>(registry: StoreRegistry, fn: () => T): T => {\r\n if (currentRegistryRunner?.run) return currentRegistryRunner.run(registry, fn);\r\n return fn();\r\n};\r\n\r\nexport const getActiveStoreRegistry = (fallback?: StoreRegistry): StoreRegistry => {\r\n return currentRegistryRunner?.get() || fallback || getStoreRegistry(defaultRegistryScope);\r\n};\r\n\r\nexport const enterRegistry = (registry: StoreRegistry): void => {\r\n if (currentRegistryRunner?.enterWith) {\r\n currentRegistryRunner.enterWith(registry);\r\n }\r\n};\r\n\r\n\r\n","/**\r\n * @module internals/config\r\n *\r\n * LAYER: Internal subsystem\r\n * OWNS: Module-level behavior and exports for internals/config.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport type { SnapshotMode, MiddlewareCtx, StoreValue } from \"../adapters/options.js\";\r\nimport { registerTestResetHook } from \"./test-reset.js\";\r\nimport { warnAlways } from \"./diagnostics.js\";\r\nimport { getActiveStoreRegistry, getDefaultStoreRegistry, type StoreRegistry } from \"../store-registry.js\";\r\n\r\nexport type LogSink = {\r\n log?: (msg: string, meta?: Record<string, unknown>) => void;\r\n warn?: (msg: string, meta?: Record<string, unknown>) => void;\r\n critical?: (msg: string, meta?: Record<string, unknown>) => void;\r\n};\r\n\r\nexport type AsyncCloneMode = \"none\" | \"shallow\" | \"deep\";\r\n\r\nexport type FlushConfig = {\r\n chunkSize?: number;\r\n chunkDelayMs?: number;\r\n priorityStores?: string[];\r\n};\r\n\r\nexport type RevalidateOnFocusConfig = {\r\n debounceMs?: number;\r\n maxConcurrent?: number;\r\n staggerMs?: number;\r\n};\r\n\r\nexport type StroidConfig = {\r\n logSink?: LogSink;\r\n flush?: FlushConfig;\r\n revalidateOnFocus?: RevalidateOnFocusConfig;\r\n namespace?: string;\r\n strictMissingFeatures?: boolean;\r\n strictFeatures?: boolean;\r\n assertRuntime?: boolean;\r\n strictMutatorReturns?: boolean;\r\n asyncAutoCreate?: boolean;\r\n asyncCloneResult?: AsyncCloneMode;\r\n defaultSnapshotMode?: SnapshotMode;\r\n /**\r\n * Alias for defaultSnapshotMode.\r\n */\r\n snapshotStrategy?: SnapshotMode;\r\n /**\r\n * Throw on async usage errors instead of returning null.\r\n * Default: false (usage errors return null and call onError).\r\n */\r\n strictAsyncUsageErrors?: boolean;\r\n middleware?: Array<(ctx: MiddlewareCtx) => StoreValue | void>;\r\n /**\r\n * Allow hydrateStores to accept untrusted snapshots without explicit opt-in.\r\n * Default: false (hydration requires an explicit trust opt-in).\r\n */\r\n allowUntrustedHydration?: boolean;\r\n /**\r\n * Optional custom mutator engine (e.g. Immer's produce) to enable structural sharing.\r\n * You can pass the produce function directly or use \"immer\" with a global produce shim.\r\n */\r\n mutatorProduce?: (<T>(base: T, recipe: (draft: T) => void) => T) | \"immer\";\r\n};\r\n\r\ntype ResolvedConfig = {\r\n logSink: LogSink;\r\n flush: Required<FlushConfig>;\r\n revalidateOnFocus: Required<RevalidateOnFocusConfig>;\r\n namespace: string;\r\n strictMissingFeatures: boolean;\r\n assertRuntime: boolean;\r\n strictMutatorReturns: boolean;\r\n asyncAutoCreate: boolean;\r\n asyncCloneResult: AsyncCloneMode;\r\n defaultSnapshotMode: SnapshotMode;\r\n strictAsyncUsageErrors: boolean;\r\n middleware: Array<(ctx: MiddlewareCtx) => StoreValue | void>;\r\n allowUntrustedHydration: boolean;\r\n mutatorProduce?: <T>(base: T, recipe: (draft: T) => void) => T;\r\n};\r\n\r\nconst defaultLogSink: LogSink = {\r\n log: (msg: string, meta?: Record<string, unknown>) => {\r\n if (typeof console !== \"undefined\" && typeof console.log === \"function\") {\r\n if (meta) console.log(`[stroid] ${msg}`, meta);\r\n else console.log(`[stroid] ${msg}`);\r\n }\r\n },\r\n warn: (msg: string, meta?: Record<string, unknown>) => {\r\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\r\n if (meta) console.warn(`[stroid] ${msg}`, meta);\r\n else console.warn(`[stroid] ${msg}`);\r\n }\r\n },\r\n critical: (msg: string, meta?: Record<string, unknown>) => {\r\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\r\n if (meta) console.error(`[stroid] ${msg}`, meta);\r\n else console.error(`[stroid] ${msg}`);\r\n }\r\n },\r\n};\r\n\r\nconst defaultConfig: ResolvedConfig = {\r\n logSink: defaultLogSink,\r\n flush: {\r\n chunkSize: Number.POSITIVE_INFINITY,\r\n chunkDelayMs: 0,\r\n priorityStores: [],\r\n },\r\n revalidateOnFocus: {\r\n debounceMs: 0,\r\n maxConcurrent: 3,\r\n staggerMs: 100,\r\n },\r\n namespace: \"\",\r\n strictMissingFeatures: true,\r\n assertRuntime: false,\r\n strictMutatorReturns: true,\r\n asyncAutoCreate: false,\r\n asyncCloneResult: \"none\",\r\n defaultSnapshotMode: \"deep\",\r\n strictAsyncUsageErrors: false,\r\n middleware: [],\r\n allowUntrustedHydration: false,\r\n mutatorProduce: undefined,\r\n};\r\n\r\nconst cloneConfig = (base: ResolvedConfig): ResolvedConfig => ({\r\n logSink: { ...base.logSink },\r\n flush: { ...base.flush },\r\n revalidateOnFocus: { ...base.revalidateOnFocus },\r\n namespace: base.namespace,\r\n strictMissingFeatures: base.strictMissingFeatures,\r\n assertRuntime: base.assertRuntime,\r\n strictMutatorReturns: base.strictMutatorReturns,\r\n asyncAutoCreate: base.asyncAutoCreate,\r\n asyncCloneResult: base.asyncCloneResult,\r\n defaultSnapshotMode: base.defaultSnapshotMode,\r\n strictAsyncUsageErrors: base.strictAsyncUsageErrors,\r\n middleware: [...base.middleware],\r\n allowUntrustedHydration: base.allowUntrustedHydration,\r\n mutatorProduce: base.mutatorProduce,\r\n});\r\n\r\nlet configByRegistry = new WeakMap<StoreRegistry, ResolvedConfig>();\r\nlet baseConfig = cloneConfig(defaultConfig);\r\nconst getRegistryConfig = (registry: StoreRegistry): ResolvedConfig => {\r\n let config = configByRegistry.get(registry);\r\n if (!config) {\r\n config = cloneConfig(baseConfig);\r\n configByRegistry.set(registry, config);\r\n }\r\n return config;\r\n};\r\n\r\nconst IMMER_PRODUCE_KEY = \"__STROID_IMMER_PRODUCE__\";\r\nlet cachedImmerProduce: (<T>(base: T, recipe: (draft: T) => void) => T) | undefined;\r\nlet immerMissingWarned = false;\r\nconst resolveImmerProduce = (): (<T>(base: T, recipe: (draft: T) => void) => T) | undefined => {\r\n if (cachedImmerProduce) return cachedImmerProduce;\r\n const globalAny = globalThis as Record<string, unknown> | undefined;\r\n const candidate = globalAny ? globalAny[IMMER_PRODUCE_KEY] : undefined;\r\n if (typeof candidate === \"function\") {\r\n cachedImmerProduce = candidate as (<T>(base: T, recipe: (draft: T) => void) => T);\r\n return cachedImmerProduce;\r\n }\r\n return undefined;\r\n};\r\n\r\nexport const getConfig = (): ResolvedConfig => getRegistryConfig(getActiveStoreRegistry());\r\n\r\nexport const configureStroid = (next?: StroidConfig): void => {\r\n if (!next) return;\r\n const registry = getActiveStoreRegistry();\r\n let config = getRegistryConfig(registry);\r\n\r\n if (next.logSink) {\r\n config = {\r\n ...config,\r\n logSink: {\r\n log: next.logSink.log ?? config.logSink.log,\r\n warn: next.logSink.warn ?? config.logSink.warn,\r\n critical: next.logSink.critical ?? config.logSink.critical,\r\n },\r\n };\r\n }\r\n\r\n if (next.flush) {\r\n config = {\r\n ...config,\r\n flush: {\r\n chunkSize: Number.isFinite(next.flush.chunkSize ?? config.flush.chunkSize)\r\n ? (next.flush.chunkSize as number)\r\n : config.flush.chunkSize,\r\n chunkDelayMs: Number.isFinite(next.flush.chunkDelayMs ?? config.flush.chunkDelayMs)\r\n ? (next.flush.chunkDelayMs as number)\r\n : config.flush.chunkDelayMs,\r\n priorityStores: Array.isArray(next.flush.priorityStores)\r\n ? next.flush.priorityStores\r\n : config.flush.priorityStores,\r\n },\r\n };\r\n }\r\n\r\n if (next.revalidateOnFocus) {\r\n config = {\r\n ...config,\r\n revalidateOnFocus: {\r\n debounceMs: Number.isFinite(next.revalidateOnFocus.debounceMs ?? config.revalidateOnFocus.debounceMs)\r\n ? (next.revalidateOnFocus.debounceMs as number)\r\n : config.revalidateOnFocus.debounceMs,\r\n maxConcurrent: Number.isFinite(next.revalidateOnFocus.maxConcurrent ?? config.revalidateOnFocus.maxConcurrent)\r\n ? Math.max(1, next.revalidateOnFocus.maxConcurrent as number)\r\n : config.revalidateOnFocus.maxConcurrent,\r\n staggerMs: Number.isFinite(next.revalidateOnFocus.staggerMs ?? config.revalidateOnFocus.staggerMs)\r\n ? Math.max(0, next.revalidateOnFocus.staggerMs as number)\r\n : config.revalidateOnFocus.staggerMs,\r\n },\r\n };\r\n }\r\n\r\n if (typeof next.namespace === \"string\") {\r\n config = {\r\n ...config,\r\n namespace: next.namespace.trim(),\r\n };\r\n }\r\n\r\n if (typeof next.strictMissingFeatures === \"boolean\") {\r\n config = {\r\n ...config,\r\n strictMissingFeatures: next.strictMissingFeatures,\r\n };\r\n }\r\n if (typeof next.strictFeatures === \"boolean\") {\r\n config = {\r\n ...config,\r\n strictMissingFeatures: next.strictFeatures,\r\n };\r\n }\r\n\r\n if (typeof next.assertRuntime === \"boolean\") {\r\n config = {\r\n ...config,\r\n assertRuntime: next.assertRuntime,\r\n };\r\n }\r\n\r\n if (typeof next.strictMutatorReturns === \"boolean\") {\r\n config = {\r\n ...config,\r\n strictMutatorReturns: next.strictMutatorReturns,\r\n };\r\n }\r\n\r\n if (typeof next.asyncAutoCreate === \"boolean\") {\r\n config = {\r\n ...config,\r\n asyncAutoCreate: next.asyncAutoCreate,\r\n };\r\n }\r\n if (typeof next.strictAsyncUsageErrors === \"boolean\") {\r\n config = {\r\n ...config,\r\n strictAsyncUsageErrors: next.strictAsyncUsageErrors,\r\n };\r\n }\r\n\r\n if (next.asyncCloneResult === \"none\" || next.asyncCloneResult === \"shallow\" || next.asyncCloneResult === \"deep\") {\r\n config = {\r\n ...config,\r\n asyncCloneResult: next.asyncCloneResult,\r\n };\r\n }\r\n\r\n if (next.snapshotStrategy === \"shallow\" || next.snapshotStrategy === \"ref\" || next.snapshotStrategy === \"deep\") {\r\n config = {\r\n ...config,\r\n defaultSnapshotMode: next.snapshotStrategy,\r\n };\r\n }\r\n\r\n if (next.defaultSnapshotMode === \"shallow\" || next.defaultSnapshotMode === \"ref\" || next.defaultSnapshotMode === \"deep\") {\r\n config = {\r\n ...config,\r\n defaultSnapshotMode: next.defaultSnapshotMode,\r\n };\r\n }\r\n\r\n if (Array.isArray(next.middleware)) {\r\n config = {\r\n ...config,\r\n middleware: next.middleware,\r\n };\r\n }\r\n\r\n if (typeof next.allowUntrustedHydration === \"boolean\") {\r\n config = {\r\n ...config,\r\n allowUntrustedHydration: next.allowUntrustedHydration,\r\n };\r\n }\r\n\r\n if (typeof next.mutatorProduce === \"function\") {\r\n config = {\r\n ...config,\r\n mutatorProduce: next.mutatorProduce,\r\n };\r\n } else if (next.mutatorProduce === \"immer\") {\r\n const produce = resolveImmerProduce();\r\n if (produce) {\r\n config = {\r\n ...config,\r\n mutatorProduce: produce,\r\n };\r\n } else {\r\n if (!immerMissingWarned) {\r\n immerMissingWarned = true;\r\n warnAlways(\r\n `configureStroid({ mutatorProduce: \"immer\" }) requires Immer's produce function.\\n` +\r\n `Set globalThis.${IMMER_PRODUCE_KEY} = produce or pass mutatorProduce: produce directly.`\r\n );\r\n }\r\n }\r\n }\r\n\r\n configByRegistry.set(registry, config);\r\n if (registry === getDefaultStoreRegistry()) {\r\n baseConfig = cloneConfig(config);\r\n }\r\n};\r\n\r\nexport const resetConfig = (): void => {\r\n configByRegistry = new WeakMap<StoreRegistry, ResolvedConfig>();\r\n baseConfig = cloneConfig(defaultConfig);\r\n cachedImmerProduce = undefined;\r\n immerMissingWarned = false;\r\n};\r\n\r\nregisterTestResetHook(\"config.reset\", resetConfig, 90);\r\n\r\n// Back-compat for tests\r\nexport const _resetConfigForTests = (): void => resetConfig();\r\n\r\nexport const getNamespace = (): string => getConfig().namespace;\r\nexport const setNamespace = (ns: string): void => {\r\n const registry = getActiveStoreRegistry();\r\n const config = getRegistryConfig(registry);\r\n const next = { ...config, namespace: ns.trim() };\r\n configByRegistry.set(registry, next);\r\n if (registry === getDefaultStoreRegistry()) {\r\n baseConfig = cloneConfig(next);\r\n }\r\n};\r\n\r\n\r\n","/**\r\n * @module internals/diagnostics\r\n *\r\n * LAYER: Internal subsystem\r\n * OWNS: Module-level behavior and exports for internals/diagnostics.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport { getConfig } from \"./config.js\";\r\nconst _envFromProcess = typeof process !== \"undefined\" && typeof process.env?.NODE_ENV === \"string\"\r\n ? process.env.NODE_ENV\r\n : undefined;\r\nconst _envFromImportMeta = typeof import.meta !== \"undefined\" && (import.meta as any)?.env?.MODE\r\n ? (import.meta as any).env.MODE\r\n : undefined;\r\nconst _devFlag = typeof globalThis !== \"undefined\" && typeof (globalThis as any).__STROID_DEV__ === \"boolean\"\r\n ? (globalThis as any).__STROID_DEV__\r\n : undefined;\r\nconst _fallbackEnv = \"production\";\r\nconst _resolvedEnv = _envFromProcess ?? _envFromImportMeta ?? _fallbackEnv;\r\n\r\nexport const __DEV__ = typeof _devFlag === \"boolean\"\r\n ? _devFlag\r\n : _resolvedEnv !== \"production\";\r\n\r\nexport const isDev = (): boolean => __DEV__;\r\n\r\nconst defaultWarn = (msg: string, meta?: Record<string, unknown>): void => {\r\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\r\n if (meta) console.warn(`[stroid] ${msg}`, meta);\r\n else console.warn(`[stroid] ${msg}`);\r\n }\r\n};\r\n\r\nconst defaultCritical = (msg: string, meta?: Record<string, unknown>): void => {\r\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\r\n if (meta) console.error(`[stroid] ${msg}`, meta);\r\n else console.error(`[stroid] ${msg}`);\r\n }\r\n};\r\n\r\nconst defaultLog = (msg: string, meta?: Record<string, unknown>): void => {\r\n if (typeof console !== \"undefined\" && typeof console.log === \"function\") {\r\n if (meta) console.log(`[stroid] ${msg}`, meta);\r\n else console.log(`[stroid] ${msg}`);\r\n }\r\n};\r\n\r\nexport const critical = (msg: string, meta?: Record<string, unknown>): void => {\r\n const sink = getConfig().logSink.critical ?? defaultCritical;\r\n sink(msg, meta);\r\n if (getConfig().assertRuntime) throw new Error(msg);\r\n};\r\n\r\nexport const warn = (msg: string, meta?: Record<string, unknown>): void => {\r\n if (!__DEV__) return;\r\n const sink = getConfig().logSink.warn ?? defaultWarn;\r\n sink(msg, meta);\r\n if (getConfig().assertRuntime) throw new Error(msg);\r\n};\r\n\r\n// Used for configuration hazards that must surface in production too.\r\nexport const warnAlways = (msg: string, meta?: Record<string, unknown>): void => {\r\n const sink = getConfig().logSink.warn ?? defaultWarn;\r\n sink(msg, meta);\r\n if (getConfig().assertRuntime) throw new Error(msg);\r\n};\r\n\r\nexport const error = (msg: string, meta?: Record<string, unknown>): void => {\r\n if (__DEV__) {\r\n const sink = getConfig().logSink.warn ?? defaultWarn;\r\n sink(msg, meta);\r\n }\r\n critical(msg, meta);\r\n if (getConfig().assertRuntime) throw new Error(msg);\r\n};\r\n\r\nexport const log = (msg: string, meta?: Record<string, unknown>): void => {\r\n if (!__DEV__) return;\r\n const sink = getConfig().logSink.log ?? defaultLog;\r\n sink(msg, meta);\r\n};\r\n\r\nexport const getInvalidFunctionStoreValueMessage = (): string =>\r\n `Functions cannot be stored in stroid.\\n` +\r\n `Store data only - handle functions outside the store.`;\r\n\r\nexport const getMapSetStoreWarningMessage = (): string =>\r\n `Map/Set detected. stroid converts these to plain objects.\\n` +\r\n `Use arrays or plain objects for best results.`;\r\n\r\nexport const getDateStoreWarningMessage = (): string =>\r\n `Date object detected. stroid stores it as ISO string.\\n` +\r\n `Use new Date(value) to convert back when reading.`;\r\n\r\nexport const getSanitizeDateWarningMessage = (): string =>\r\n \"Date detected; stored as ISO string. Use new Date(value) when reading.\";\r\n\r\nexport const getSanitizeMapWarningMessage = (): string =>\r\n \"Map detected; converting to plain object.\";\r\n\r\nexport const getSanitizeSetWarningMessage = (): string =>\r\n \"Set detected; converting to array.\";\r\n\r\nexport const getPathDepthExceededMessage = (depth: number, maxDepth: number, parts: string[]): string =>\r\n `Path depth of ${depth} exceeded maximum of ${maxDepth}.\\n` +\r\n `\"${parts.join(\".\")}\"\\n` +\r\n `This is a data design issue. Split into separate stores:\\n` +\r\n `createStore(\"${parts[0]}\", ...) and createStore(\"${parts[1]}\", ...)`;\r\n\r\nexport const getDeepNestingWarningMessage = (depth: number, parts: string[]): string =>\r\n `Deep nesting detected (${depth} levels): \"${parts.join(\".\")}\"\\n` +\r\n `Consider splitting into separate stores for better readability.`;\r\n\r\nexport const getPathReachedNullMessage = (parts: string[], part: string): string =>\r\n `Path \"${parts.join(\".\")}\" not found - reached null at \"${part}\"`;\r\n\r\nexport const getPathNotObjectMessage = (part: string): string =>\r\n `Cannot go deeper at \"${part}\" - value is not an object`;\r\n\r\nexport const getInvalidStoreNameMessage = (name: string): string =>\r\n `Store name must be a non-empty string. Got: ${JSON.stringify(name)}`;\r\n\r\nexport const getStoreNameContainsSpacesMessage = (name: string): string =>\r\n `Store name \"${name}\" contains spaces.\\n` +\r\n `Use camelCase or kebab-case: \"userName\" or \"user-name\"`;\r\n\r\nexport const getForbiddenStoreNameMessage = (name: string): string =>\r\n `Store name \"${name}\" is not allowed.\\n` +\r\n `Reserved names: \"__proto__\", \"constructor\", \"prototype\".`;\r\n\r\nconst MAX_LEVENSHTEIN_INPUT_LENGTH = 128;\r\n\r\nconst shouldCheckLevenshtein = (a: string, b: string): boolean => {\r\n if (Math.abs(a.length - b.length) > 2) return false;\r\n return Math.max(a.length, b.length) <= MAX_LEVENSHTEIN_INPUT_LENGTH;\r\n};\r\n\r\nconst levenshtein = (a: string, b: string): number => {\r\n if (a === b) return 0;\r\n if (a.length === 0) return b.length;\r\n if (b.length === 0) return a.length;\r\n\r\n let prev = Array.from({ length: a.length + 1 }, (_, i) => i);\r\n let next = new Array<number>(a.length + 1);\r\n\r\n for (let i = 1; i <= b.length; i++) {\r\n next[0] = i;\r\n for (let j = 1; j <= a.length; j++) {\r\n next[j] =\r\n b[i - 1] === a[j - 1]\r\n ? prev[j - 1]\r\n : Math.min(prev[j - 1], next[j - 1], prev[j]) + 1;\r\n }\r\n [prev, next] = [next, prev];\r\n }\r\n return prev[a.length];\r\n};\r\n\r\nexport const suggestStoreName = (name: string, existingNames: string[]): void => {\r\n const similar = existingNames.find((entry) => {\r\n const a = entry.toLowerCase();\r\n const b = name.toLowerCase();\r\n return (\r\n a.includes(b)\r\n || b.includes(a)\r\n || (shouldCheckLevenshtein(a, b) && levenshtein(a, b) <= 2)\r\n );\r\n });\r\n\r\n if (similar) {\r\n warn(`Store \"${name}\" not found. Did you mean \"${similar}\"?`);\r\n return;\r\n }\r\n\r\n error(\r\n `Store \"${name}\" not found.\\n` +\r\n `Available stores: [${existingNames.join(\", \")}]\\n` +\r\n `Call createStore(\"${name}\", data) first.`\r\n );\r\n};\r\n\r\n\r\n","/**\r\n * @module utils/validation\r\n *\r\n * LAYER: Utilities\r\n * OWNS: Module-level behavior and exports for utils/validation.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport {\r\n error,\r\n getDateStoreWarningMessage,\r\n getInvalidFunctionStoreValueMessage,\r\n getInvalidStoreNameMessage,\r\n getForbiddenStoreNameMessage,\r\n getMapSetStoreWarningMessage,\r\n getSanitizeDateWarningMessage,\r\n getSanitizeMapWarningMessage,\r\n getSanitizeSetWarningMessage,\r\n getStoreNameContainsSpacesMessage,\r\n isDev,\r\n warn,\r\n} from \"../internals/diagnostics.js\";\r\n\r\nexport const FORBIDDEN_OBJECT_KEYS = new Set([\"__proto__\", \"constructor\", \"prototype\"]);\r\n\r\nexport const runSchemaValidation = (schema: unknown, value: unknown): { ok: boolean; data?: unknown; error?: unknown } => {\r\n if (!schema) return { ok: true };\r\n try {\r\n if (typeof (schema as { safeParse?: unknown }).safeParse === \"function\") {\r\n const res = (schema as any).safeParse(value);\r\n return res.success ? { ok: true, data: res.data } : { ok: false, error: res.error };\r\n }\r\n if (typeof (schema as { parse?: unknown }).parse === \"function\") {\r\n (schema as any).parse(value);\r\n return { ok: true, data: value };\r\n }\r\n if (typeof (schema as { validateSync?: unknown }).validateSync === \"function\") {\r\n (schema as any).validateSync(value);\r\n return { ok: true, data: value };\r\n }\r\n if (typeof (schema as { isValidSync?: unknown }).isValidSync === \"function\") {\r\n const valid = (schema as any).isValidSync(value);\r\n return valid ? { ok: true, data: value } : { ok: false, error: \"Schema validation failed\" };\r\n }\r\n if (typeof (schema as { validate?: unknown }).validate === \"function\") {\r\n const res = (schema as any).validate(value);\r\n if (res === true) return { ok: true, data: value };\r\n if (res === false) return { ok: false, error: (schema as any).errors || \"Schema validation failed\" };\r\n if (res && typeof res === \"object\") {\r\n const joiError = (res as any).error;\r\n const message =\r\n joiError?.details?.[0]?.message ||\r\n joiError?.message ||\r\n (res as any).message ||\r\n (schema as any).errors;\r\n if (message) return { ok: false, error: message };\r\n if (joiError) return { ok: false, error: joiError };\r\n }\r\n const errMsg = (schema as any).errors || \"Schema validation failed\";\r\n return { ok: false, error: errMsg };\r\n }\r\n if (typeof schema === \"function\") {\r\n const res = (schema as (v: unknown) => unknown | boolean)(value);\r\n if (res === false) return { ok: false, error: \"Schema validation failed\" };\r\n return { ok: true, data: res === true ? value : res };\r\n }\r\n return { ok: true, data: value };\r\n } catch (err) {\r\n return { ok: false, error: (err as { message?: string })?.message ?? err };\r\n }\r\n};\r\n\r\n// --- type helpers ------------------------------------------------------------\r\nconst SUPPORTED_TYPES = [\r\n \"object\",\r\n \"array\",\r\n \"string\",\r\n \"number\",\r\n \"boolean\",\r\n \"null\",\r\n] as const;\r\nexport type SupportedType = typeof SUPPORTED_TYPES[number] | \"function\" | \"map\" | \"set\" | \"date\" | \"undefined\" | \"bigint\" | \"symbol\";\r\n\r\nexport const getType = (value: unknown): SupportedType => {\r\n if (value === null) return \"null\";\r\n if (Array.isArray(value)) return \"array\";\r\n if (value instanceof Map) return \"map\";\r\n if (value instanceof Set) return \"set\";\r\n if (value instanceof Date) return \"date\";\r\n if (typeof value === \"function\") return \"function\";\r\n return typeof value;\r\n};\r\n\r\nconst getNonSerializableType = (value: unknown): string | null => {\r\n if (!value || typeof value !== \"object\") return null;\r\n const WeakRefCtor = (globalThis as any)?.WeakRef as (new (...args: any[]) => any) | undefined;\r\n if (WeakRefCtor && value instanceof WeakRefCtor) return \"WeakRef\";\r\n if (typeof WeakMap !== \"undefined\" && value instanceof WeakMap) return \"WeakMap\";\r\n if (typeof WeakSet !== \"undefined\" && value instanceof WeakSet) return \"WeakSet\";\r\n if (typeof EventTarget !== \"undefined\" && value instanceof EventTarget) return \"EventTarget\";\r\n if (typeof ReadableStream !== \"undefined\" && value instanceof ReadableStream) return \"ReadableStream\";\r\n if (typeof WritableStream !== \"undefined\" && value instanceof WritableStream) return \"WritableStream\";\r\n if (typeof Request !== \"undefined\" && value instanceof Request) return \"Request\";\r\n if (typeof Response !== \"undefined\" && value instanceof Response) return \"Response\";\r\n if (typeof Headers !== \"undefined\" && value instanceof Headers) return \"Headers\";\r\n if (typeof FormData !== \"undefined\" && value instanceof FormData) return \"FormData\";\r\n return null;\r\n};\r\n\r\nexport const isValidData = (value: unknown): boolean => {\r\n const type = getType(value);\r\n if (type === \"function\") {\r\n error(getInvalidFunctionStoreValueMessage());\r\n return false;\r\n }\r\n if (type === \"map\" || type === \"set\") {\r\n warn(getMapSetStoreWarningMessage());\r\n return true;\r\n }\r\n if (type === \"date\") {\r\n warn(getDateStoreWarningMessage());\r\n return true;\r\n }\r\n return true;\r\n};\r\n\r\nconst _canReuseSanitized = (value: unknown, seen: WeakSet<object>): boolean => {\r\n const blocked = getNonSerializableType(value);\r\n if (blocked) {\r\n throw new Error(`${blocked} values are not supported`);\r\n }\r\n const type = getType(value);\r\n if (type === \"number\") {\r\n if (!Number.isFinite(value as number)) {\r\n throw new Error(\"Non-finite numbers are not supported\");\r\n }\r\n return true;\r\n }\r\n if (type === \"bigint\") {\r\n throw new Error(\"BigInt values are not supported\");\r\n }\r\n if (type === \"symbol\") {\r\n throw new Error(\"Symbol values are not supported\");\r\n }\r\n if (type === \"date\" || type === \"map\" || type === \"set\") {\r\n return false;\r\n }\r\n if (type === \"array\") {\r\n if (seen.has(value as object)) {\r\n throw new Error(\"Circular reference detected during sanitize\");\r\n }\r\n seen.add(value as object);\r\n const keys = Object.keys(value as unknown[]);\r\n for (const key of keys) {\r\n const idx = Number(key);\r\n if (!Number.isInteger(idx)) return false;\r\n }\r\n for (let i = 0; i < (value as unknown[]).length; i += 1) {\r\n if (!(i in (value as unknown[]))) continue;\r\n if (!_canReuseSanitized((value as unknown[])[i], seen)) return false;\r\n }\r\n return true;\r\n }\r\n if (type === \"object\") {\r\n if (seen.has(value as object)) {\r\n throw new Error(\"Circular reference detected during sanitize\");\r\n }\r\n seen.add(value as object);\r\n if (Object.getOwnPropertySymbols(value as object).length > 0) return false;\r\n const descriptors = Object.getOwnPropertyDescriptors(value as Record<string, unknown>);\r\n for (const [key, descriptor] of Object.entries(descriptors)) {\r\n if (!descriptor.enumerable) return false;\r\n if (FORBIDDEN_OBJECT_KEYS.has(key)) return false;\r\n if (\"get\" in descriptor || \"set\" in descriptor) {\r\n throw new Error(`Accessor properties are not supported during sanitize (\"${key}\")`);\r\n }\r\n if (!_canReuseSanitized(descriptor.value, seen)) return false;\r\n }\r\n return true;\r\n }\r\n return true;\r\n};\r\n\r\nexport const canReuseSanitized = (value: unknown): boolean => _canReuseSanitized(value, new WeakSet<object>());\r\n\r\nconst _sanitize = (value: unknown, seen: WeakSet<object>): unknown => {\r\n const blocked = getNonSerializableType(value);\r\n if (blocked) {\r\n throw new Error(`${blocked} values are not supported`);\r\n }\r\n const type = getType(value);\r\n if (type === \"number\") {\r\n if (!Number.isFinite(value as number)) {\r\n throw new Error(\"Non-finite numbers are not supported\");\r\n }\r\n return value;\r\n }\r\n if (type === \"bigint\") {\r\n throw new Error(\"BigInt values are not supported\");\r\n }\r\n if (type === \"symbol\") {\r\n throw new Error(\"Symbol values are not supported\");\r\n }\r\n if (type === \"date\") {\r\n if (isDev()) warn(getSanitizeDateWarningMessage());\r\n return (value as Date).toISOString();\r\n }\r\n if (type === \"map\") {\r\n if (seen.has(value as object)) {\r\n throw new Error(\"Circular reference detected during sanitize\");\r\n }\r\n seen.add(value as object);\r\n if (isDev()) warn(getSanitizeMapWarningMessage());\r\n const clean: Record<string, unknown> = {};\r\n for (const [key, entryValue] of value as Map<unknown, unknown>) {\r\n if (typeof key !== \"string\") {\r\n throw new Error(\"Map keys must be strings to remain JSON-safe\");\r\n }\r\n clean[String(key)] = _sanitize(entryValue, seen);\r\n }\r\n return clean;\r\n }\r\n if (type === \"set\") {\r\n if (seen.has(value as object)) {\r\n throw new Error(\"Circular reference detected during sanitize\");\r\n }\r\n seen.add(value as object);\r\n if (isDev()) warn(getSanitizeSetWarningMessage());\r\n return Array.from(value as Set<unknown>, (entry) => _sanitize(entry, seen));\r\n }\r\n if (type === \"object\") {\r\n if (seen.has(value as object)) {\r\n throw new Error(\"Circular reference detected during sanitize\");\r\n }\r\n seen.add(value as object);\r\n const clean: Record<string, unknown> = {};\r\n const descriptors = Object.getOwnPropertyDescriptors(value as Record<string, unknown>);\r\n for (const [key, descriptor] of Object.entries(descriptors)) {\r\n if (!descriptor.enumerable) continue;\r\n if (FORBIDDEN_OBJECT_KEYS.has(key)) continue;\r\n if (\"get\" in descriptor || \"set\" in descriptor) {\r\n throw new Error(`Accessor properties are not supported during sanitize (\"${key}\")`);\r\n }\r\n clean[key] = _sanitize(descriptor.value, seen);\r\n }\r\n return clean;\r\n }\r\n if (type === \"array\") {\r\n if (seen.has(value as object)) {\r\n throw new Error(\"Circular reference detected during sanitize\");\r\n }\r\n seen.add(value as object);\r\n return (value as unknown[]).map((entry) => _sanitize(entry, seen));\r\n }\r\n return value;\r\n};\r\n\r\nexport const sanitize = (value: unknown): unknown => _sanitize(value, new WeakSet<object>());\r\n\r\nexport const isValidStoreName = (name: string): boolean => {\r\n if (typeof name !== \"string\" || name.trim() === \"\") {\r\n error(getInvalidStoreNameMessage(name));\r\n return false;\r\n }\r\n if (FORBIDDEN_OBJECT_KEYS.has(name)) {\r\n error(getForbiddenStoreNameMessage(name));\r\n return false;\r\n }\r\n if (name.includes(\" \")) {\r\n error(getStoreNameContainsSpacesMessage(name));\r\n return false;\r\n }\r\n return true;\r\n};\r\n\r\n\r\n","/**\r\n * @module utils/hash\r\n *\r\n * LAYER: Utilities\r\n * OWNS: Module-level behavior and exports for utils/hash.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport { FORBIDDEN_OBJECT_KEYS } from \"./validation.js\";\r\n\r\n// --- hashing / checksum ------------------------------------------------------\r\nlet _crcTable: number[] | null = null;\r\nconst _getCrcTable = (): number[] => {\r\n if (_crcTable) return _crcTable;\r\n let c: number;\r\n const table: number[] = [];\r\n for (let n = 0; n < 256; n++) {\r\n c = n;\r\n for (let k = 0; k < 8; k++) {\r\n c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\r\n }\r\n table[n] = c >>> 0;\r\n }\r\n _crcTable = table;\r\n return table;\r\n};\r\n\r\nexport const crc32 = (str: string): number => {\r\n const table = _getCrcTable();\r\n let crc = 0 ^ (-1);\r\n for (let i = 0; i < str.length; i++) {\r\n crc = (crc >>> 0);\r\n crc = (crc >>> 8) ^ table[(crc ^ str.charCodeAt(i)) & 0xFF];\r\n }\r\n return (crc ^ (-1)) >>> 0;\r\n};\r\n\r\ntype HashState = {\r\n h1: number;\r\n h2: number;\r\n seen: WeakMap<object, number>;\r\n nextId: number;\r\n nodes: number;\r\n};\r\n\r\nconst HASH_SEED_1 = 0x811C9DC5;\r\nconst HASH_SEED_2 = 0x9E3779B1;\r\nconst MAX_HASH_NODES = 100_000;\r\n\r\nconst mixHash = (state: HashState, value: number): void => {\r\n const v = value >>> 0;\r\n state.h1 = Math.imul(state.h1 ^ v, 0x85EBCA6B);\r\n state.h2 = Math.imul(state.h2 ^ v, 0xC2B2AE35);\r\n};\r\n\r\nconst mixString = (state: HashState, value: string): void => {\r\n mixHash(state, value.length);\r\n for (let i = 0; i < value.length; i++) {\r\n mixHash(state, value.charCodeAt(i));\r\n }\r\n};\r\n\r\nconst mixToken = (state: HashState, token: string): void => {\r\n mixString(state, token);\r\n};\r\n\r\nconst hashNumber = (state: HashState, value: number): void => {\r\n if (Number.isNaN(value)) {\r\n mixToken(state, \"NaN\");\r\n return;\r\n }\r\n if (!Number.isFinite(value)) {\r\n mixToken(state, value > 0 ? \"Infinity\" : \"-Infinity\");\r\n return;\r\n }\r\n if (Object.is(value, -0)) {\r\n mixToken(state, \"-0\");\r\n return;\r\n }\r\n const asInt = value | 0;\r\n if (value === asInt) {\r\n mixToken(state, \"int\");\r\n mixHash(state, asInt);\r\n return;\r\n }\r\n mixToken(state, \"num\");\r\n mixString(state, String(value));\r\n};\r\n\r\nconst hashValue = (state: HashState, value: unknown): void => {\r\n if (state.nodes++ > MAX_HASH_NODES) {\r\n mixToken(state, \"[max]\");\r\n return;\r\n }\r\n if (value === null) {\r\n mixToken(state, \"null\");\r\n return;\r\n }\r\n const type = typeof value;\r\n if (type === \"string\") {\r\n mixToken(state, \"string\");\r\n mixString(state, value as string);\r\n return;\r\n }\r\n if (type === \"number\") {\r\n mixToken(state, \"number\");\r\n hashNumber(state, value as number);\r\n return;\r\n }\r\n if (type === \"boolean\") {\r\n mixToken(state, value ? \"true\" : \"false\");\r\n return;\r\n }\r\n if (type === \"undefined\") {\r\n mixToken(state, \"undefined\");\r\n return;\r\n }\r\n if (type === \"bigint\") {\r\n mixToken(state, \"bigint\");\r\n mixString(state, (value as bigint).toString());\r\n return;\r\n }\r\n if (type === \"symbol\") {\r\n mixToken(state, \"symbol\");\r\n const sym = value as symbol;\r\n mixString(state, Symbol.keyFor(sym) ?? sym.description ?? String(sym));\r\n return;\r\n }\r\n if (type === \"function\") {\r\n mixToken(state, \"function\");\r\n mixString(state, (value as Function).name || \"anonymous\");\r\n return;\r\n }\r\n\r\n const obj = value as object;\r\n const seenId = state.seen.get(obj);\r\n if (seenId !== undefined) {\r\n mixToken(state, \"ref\");\r\n mixHash(state, seenId);\r\n return;\r\n }\r\n const id = state.nextId++;\r\n state.seen.set(obj, id);\r\n\r\n if (Array.isArray(obj)) {\r\n mixToken(state, \"array\");\r\n mixHash(state, obj.length);\r\n for (let i = 0; i < obj.length; i++) {\r\n if (Object.prototype.hasOwnProperty.call(obj, i)) {\r\n hashValue(state, (obj as unknown[])[i]);\r\n } else {\r\n mixToken(state, \"hole\");\r\n }\r\n }\r\n return;\r\n }\r\n if (obj instanceof Date) {\r\n mixToken(state, \"date\");\r\n hashNumber(state, obj.getTime());\r\n return;\r\n }\r\n if (obj instanceof Map) {\r\n mixToken(state, \"map\");\r\n mixHash(state, obj.size);\r\n obj.forEach((entryValue, key) => {\r\n hashValue(state, key);\r\n hashValue(state, entryValue);\r\n });\r\n return;\r\n }\r\n if (obj instanceof Set) {\r\n mixToken(state, \"set\");\r\n mixHash(state, obj.size);\r\n obj.forEach((entryValue) => {\r\n hashValue(state, entryValue);\r\n });\r\n return;\r\n }\r\n\r\n mixToken(state, \"object\");\r\n const descriptors = Object.getOwnPropertyDescriptors(obj as Record<string, unknown>);\r\n const entries: Array<[string, PropertyDescriptor]> = [];\r\n Object.entries(descriptors).forEach(([key, descriptor]) => {\r\n if (!descriptor?.enumerable) return;\r\n if (FORBIDDEN_OBJECT_KEYS.has(key)) return;\r\n if (\"get\" in descriptor || \"set\" in descriptor) return;\r\n entries.push([key, descriptor]);\r\n });\r\n mixHash(state, entries.length);\r\n for (const [key, descriptor] of entries) {\r\n mixString(state, key);\r\n hashValue(state, descriptor.value);\r\n }\r\n};\r\n\r\n/**\r\n * Non-cryptographic checksum for integrity (best-effort). Do not use for security.\r\n * String inputs preserve the legacy CRC32(JSON.stringify(value)) behavior to keep\r\n * persisted checksums stable across versions.\r\n */\r\nexport const hashState = (value: unknown): number => {\r\n if (typeof value === \"string\") {\r\n return crc32(JSON.stringify(value));\r\n }\r\n const state: HashState = {\r\n h1: HASH_SEED_1,\r\n h2: HASH_SEED_2,\r\n seen: new WeakMap(),\r\n nextId: 1,\r\n nodes: 0,\r\n };\r\n hashValue(state, value);\r\n let h1 = state.h1 >>> 0;\r\n let h2 = state.h2 >>> 0;\r\n h1 ^= h1 >>> 16;\r\n h1 = Math.imul(h1, 0x85EBCA6B);\r\n h1 ^= h1 >>> 13;\r\n h1 = Math.imul(h1, 0xC2B2AE35);\r\n h1 ^= h1 >>> 16;\r\n h2 ^= h2 >>> 16;\r\n h2 = Math.imul(h2, 0x27D4EB2D);\r\n h2 ^= h2 >>> 15;\r\n h2 = Math.imul(h2, 0x165667B1);\r\n h2 ^= h2 >>> 16;\r\n return ((h1 & 0x1FFFFF) * 0x100000000) + (h2 >>> 0);\r\n};\r\n\r\nexport const checksumState = hashState; // alias for clarity\r\n\r\n\r\n","/**\r\n * @module utils/clone\r\n *\r\n * LAYER: Utilities\r\n * OWNS: Module-level behavior and exports for utils/clone.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport { warnAlways } from \"../internals/diagnostics.js\";\r\nimport { FORBIDDEN_OBJECT_KEYS } from \"./validation.js\";\r\n\r\n// --- cloning / equality helpers ------------------------------------------------\r\nconst hasStructuredClone = typeof globalThis !== \"undefined\" && typeof (globalThis as any).structuredClone === \"function\";\r\n\r\nexport const shallowClone = <T>(value: T): T => {\r\n if (value === null || typeof value !== \"object\") return value;\r\n if (value instanceof Date) return new Date(value.getTime()) as T;\r\n if (value instanceof Map) return new Map(value as Map<unknown, unknown>) as T;\r\n if (value instanceof Set) return new Set(value as Set<unknown>) as T;\r\n if (Array.isArray(value)) return (value.slice() as unknown) as T;\r\n\r\n const clone: Record<string, unknown> = {};\r\n const descriptors = Object.getOwnPropertyDescriptors(value as Record<string, unknown>);\r\n Object.entries(descriptors).forEach(([key, descriptor]) => {\r\n if (!descriptor.enumerable) return;\r\n if (FORBIDDEN_OBJECT_KEYS.has(key)) return;\r\n if (\"get\" in descriptor || \"set\" in descriptor) return;\r\n clone[key] = descriptor.value;\r\n });\r\n return clone as T;\r\n};\r\n\r\nconst _deepCloneFallback = <T>(value: T, seen = new WeakMap<object, unknown>()): T => {\r\n if (value === null || typeof value !== \"object\") return value;\r\n if (seen.has(value as object)) return seen.get(value as object) as T;\r\n\r\n if (value instanceof Date) return new Date(value.getTime()) as T;\r\n if (value instanceof Map) {\r\n const clone = new Map();\r\n seen.set(value, clone);\r\n value.forEach((entryValue, key) => {\r\n clone.set(_deepCloneFallback(key, seen), _deepCloneFallback(entryValue, seen));\r\n });\r\n return clone as T;\r\n }\r\n if (value instanceof Set) {\r\n const clone = new Set();\r\n seen.set(value, clone);\r\n value.forEach((entryValue) => {\r\n clone.add(_deepCloneFallback(entryValue, seen));\r\n });\r\n return clone as T;\r\n }\r\n if (Array.isArray(value)) {\r\n const clone: unknown[] = [];\r\n seen.set(value, clone);\r\n value.forEach((entry, index) => {\r\n clone[index] = _deepCloneFallback(entry, seen);\r\n });\r\n return clone as T;\r\n }\r\n\r\n const WeakRefCtor = (globalThis as any)?.WeakRef as (new (...args: any[]) => any) | undefined;\r\n if (WeakRefCtor && value instanceof WeakRefCtor) {\r\n warnAlways(\"WeakRef values cannot be deep-cloned. Returning the original reference.\");\r\n return value;\r\n }\r\n\r\n const clone: Record<string, unknown> = {};\r\n seen.set(value as object, clone);\r\n let descriptors: Record<string, PropertyDescriptor>;\r\n try {\r\n descriptors = Object.getOwnPropertyDescriptors(value as Record<string, unknown>);\r\n } catch (err) {\r\n warnAlways(\r\n `deepClone failed to read object descriptors (possible Proxy or host object). ` +\r\n `Returning the original reference.`\r\n );\r\n return value;\r\n }\r\n Object.entries(descriptors).forEach(([key, descriptor]) => {\r\n if (!descriptor.enumerable || FORBIDDEN_OBJECT_KEYS.has(key)) return;\r\n if (\"get\" in descriptor || \"set\" in descriptor) return;\r\n clone[key] = _deepCloneFallback(descriptor.value, seen);\r\n });\r\n return clone as T;\r\n};\r\n\r\nexport const deepClone = <T>(value: T): T => {\r\n try {\r\n if (hasStructuredClone) return (structuredClone as <X>(v: X) => X)(value);\r\n } catch (_) {\r\n // Fall through to the manual clone path below.\r\n }\r\n return _deepCloneFallback(value);\r\n};\r\n\r\nexport const shallowEqual = (a: unknown, b: unknown): boolean => {\r\n if (Object.is(a, b)) return true;\r\n if (!a || !b || typeof a !== \"object\" || typeof b !== \"object\") return false;\r\n const aObj = a as Record<string, unknown>;\r\n const bObj = b as Record<string, unknown>;\r\n const aKeys = Object.keys(aObj);\r\n const bKeys = Object.keys(bObj);\r\n if (aKeys.length !== bKeys.length) return false;\r\n for (const k of aKeys) {\r\n if (!Object.prototype.hasOwnProperty.call(bObj, k) || !Object.is(aObj[k], bObj[k])) return false;\r\n }\r\n return true;\r\n};\r\n\r\nexport const produceClone = <T>(base: T, recipe: (draft: T) => void): T => {\r\n try {\r\n const draft = deepClone(base);\r\n recipe(draft);\r\n return draft;\r\n } catch (err) {\r\n throw new Error(\r\n `produceClone failed (possible circular reference or unserializable data): ${(err as { message?: string })?.message ?? err}`\r\n );\r\n }\r\n};\r\n\r\n\r\n","/**\r\n * @module utils/path\r\n *\r\n * LAYER: Utilities\r\n * OWNS: Module-level behavior and exports for utils/path.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport {\r\n critical,\r\n error,\r\n getDeepNestingWarningMessage,\r\n getPathDepthExceededMessage,\r\n getPathNotObjectMessage,\r\n getPathReachedNullMessage,\r\n warn,\r\n} from \"../internals/diagnostics.js\";\r\nimport { FORBIDDEN_OBJECT_KEYS } from \"./validation.js\";\r\n\r\nconst MAX_DEPTH = 10;\r\nconst WARN_DEPTH = 5;\r\nexport type PathInput = string | readonly string[] | string[];\r\n\r\nconst _splitPath = (path: string): string[] => {\r\n const parts: string[] = [];\r\n let current = \"\";\r\n let escaping = false;\r\n\r\n for (const ch of path) {\r\n if (escaping) {\r\n current += ch;\r\n escaping = false;\r\n continue;\r\n }\r\n if (ch === \"\\\\\") {\r\n escaping = true;\r\n continue;\r\n }\r\n if (ch === \".\") {\r\n parts.push(current);\r\n current = \"\";\r\n continue;\r\n }\r\n current += ch;\r\n }\r\n\r\n if (escaping) current += \"\\\\\";\r\n parts.push(current);\r\n return parts;\r\n};\r\n\r\nexport const parsePath = (path: PathInput): string[] => {\r\n if (Array.isArray(path)) return [...path] as string[];\r\n if (typeof path === \"string\" && !path.includes(\".\")) return [path];\r\n if (typeof path === \"string\") return _splitPath(path);\r\n return [String(path)];\r\n};\r\n\r\nexport const validateDepth = (path: PathInput): boolean => {\r\n const parts = parsePath(path);\r\n const depth = parts.length;\r\n if (depth > MAX_DEPTH) {\r\n error(getPathDepthExceededMessage(depth, MAX_DEPTH, parts));\r\n return false;\r\n }\r\n if (depth > WARN_DEPTH) {\r\n warn(getDeepNestingWarningMessage(depth, parts));\r\n }\r\n return true;\r\n};\r\n\r\nexport const getByPath = (obj: unknown, path: PathInput): unknown => {\r\n const parts = parsePath(path);\r\n let current: unknown = obj;\r\n for (const part of parts) {\r\n if (current === null || current === undefined) {\r\n warn(getPathReachedNullMessage(parts, part));\r\n return undefined;\r\n }\r\n if (typeof current !== \"object\") {\r\n warn(getPathNotObjectMessage(part));\r\n return undefined;\r\n }\r\n current = (current as Record<string, unknown>)[part];\r\n }\r\n return current;\r\n};\r\n\r\nexport const setByPath = <T extends Record<string, unknown> | unknown[]>(obj: T, path: PathInput, value: unknown): T => {\r\n const parts = parsePath(path);\r\n if (parts.length === 0) return obj;\r\n for (const segment of parts) {\r\n if (FORBIDDEN_OBJECT_KEYS.has(segment)) {\r\n critical(`Blocked forbidden path segment \"${String(segment)}\" in setStore path \"${parts.join(\".\")}\".`);\r\n return obj;\r\n }\r\n }\r\n\r\n const applyAt = (current: unknown, index: number): unknown => {\r\n const key = parts[index];\r\n const isLast = index === parts.length - 1;\r\n\r\n if (Array.isArray(current)) {\r\n const targetIndex = Number(key);\r\n if (!Number.isInteger(targetIndex)) return current;\r\n const clone = [...current];\r\n if (isLast) {\r\n clone[targetIndex] = value;\r\n return clone;\r\n }\r\n clone[targetIndex] = applyAt(clone[targetIndex], index + 1);\r\n return clone;\r\n }\r\n\r\n if (current && typeof current === \"object\") {\r\n if (FORBIDDEN_OBJECT_KEYS.has(key)) {\r\n critical(`Blocked unsafe path segment \"${String(key)}\" while setting \"${parts.join(\".\")}\".`);\r\n return current;\r\n }\r\n const clone: Record<string, unknown> = { ...(current as Record<string, unknown>) };\r\n if (isLast) {\r\n clone[key] = value;\r\n return clone as unknown;\r\n }\r\n clone[key] = applyAt(clone[key], index + 1);\r\n return clone as unknown;\r\n }\r\n\r\n if ((current === null || current === undefined) && !isLast) {\r\n const isIndex = Number.isInteger(Number(key));\r\n const container: Record<string, unknown> | unknown[] = isIndex ? [] : {};\r\n if (isIndex) {\r\n const arr = container as unknown[];\r\n const idx = Number(key);\r\n arr[idx] = applyAt(undefined, index + 1);\r\n return arr;\r\n }\r\n (container as Record<string, unknown>)[key] = applyAt(undefined, index + 1);\r\n return container;\r\n }\r\n\r\n // Fallback: leave unchanged when path cannot be extended.\r\n return isLast ? value : current;\r\n };\r\n\r\n return applyAt(obj, 0) as T;\r\n};\r\n\r\n\r\n","/**\r\n * @module adapters/options\r\n *\r\n * LAYER: Module\r\n * OWNS: Module-level behavior and exports for adapters/options.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport { registerTestResetHook } from \"../internals/test-reset.js\";\r\n\r\nexport type StoreValue = unknown;\r\n\r\n// Ambient map users can augment to type feature option bags.\r\n// Example:\r\n// declare module \"stroid\" { interface FeatureOptionsMap { myFeature: { enabled: boolean } } }\r\nexport interface FeatureOptionsMap {}\r\nexport type FeatureOptions = Partial<FeatureOptionsMap> & Record<string, unknown>;\r\n\r\nexport interface PersistDriver {\r\n getItem?: (k: string) => string | null | Promise<string | null>;\r\n setItem?: (k: string, v: string) => void | Promise<void>;\r\n removeItem?: (k: string) => void | Promise<void>;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport type StoreScope = \"request\" | \"global\" | \"temp\";\r\nexport type SnapshotMode = \"deep\" | \"shallow\" | \"ref\";\r\n\r\nexport type ValidateFn<State = StoreValue> = (next: State) => boolean | State;\r\n\r\nexport type SchemaValidateOption =\r\n | { safeParse: (value: unknown) => { success: true; data: unknown } | { success: false; error?: unknown } }\r\n | { parse: (value: unknown) => unknown }\r\n | { validateSync: (value: unknown) => unknown }\r\n | { isValidSync: (value: unknown) => boolean }\r\n | { validate: (value: unknown) => unknown };\r\n\r\nexport type ValidateOption<State = StoreValue> = ValidateFn<State> | SchemaValidateOption;\r\n\r\nexport interface PersistOptions<State = StoreValue> {\r\n driver?: PersistDriver;\r\n storage?: PersistDriver;\r\n key?: string;\r\n serialize?: (v: unknown) => string;\r\n deserialize?: (v: string) => unknown;\r\n /**\r\n * Optional encryption hook for persisted payloads.\r\n *\r\n * Default is identity (no encryption). Data is stored in plaintext.\r\n */\r\n encrypt?: (v: string) => string;\r\n /**\r\n * Optional async encryption hook for persisted payloads.\r\n *\r\n * When provided, persistence will encrypt in the background and hydrate asynchronously.\r\n */\r\n encryptAsync?: (v: string) => Promise<string>;\r\n /**\r\n * Optional decryption hook for persisted payloads.\r\n *\r\n * Default is identity (no encryption). Data is stored in plaintext.\r\n */\r\n decrypt?: (v: string) => string;\r\n /**\r\n * Optional async decryption hook for persisted payloads.\r\n *\r\n * When provided, persistence will hydrate asynchronously after store creation.\r\n */\r\n decryptAsync?: (v: string) => Promise<string>;\r\n /**\r\n * Explicitly allow plaintext persistence when encrypt/decrypt are identity.\r\n *\r\n * In production builds, plaintext persistence is blocked unless this is true.\r\n */\r\n allowPlaintext?: boolean;\r\n /**\r\n * Marks this store's persisted data as sensitive (secrets/PII).\r\n *\r\n * When `true`, stroid throws at store creation time unless a non-identity\r\n * `encrypt` hook is provided.\r\n */\r\n sensitiveData?: boolean;\r\n /**\r\n * Integrity check mode for persisted payloads.\r\n * - \"hash\" (default): store and validate a checksum.\r\n * - \"none\": skip checksum generation/validation.\r\n * - \"sha256\": store a SHA-256 hash for stronger tamper detection (may be async in browsers).\r\n */\r\n checksum?: \"hash\" | \"none\" | \"sha256\";\r\n version?: number;\r\n migrations?: Record<number, (state: State) => State>;\r\n onMigrationFail?: \"reset\" | \"keep\" | ((state: unknown) => unknown);\r\n onStorageCleared?: (info: { name: string; key: string; reason: \"clear\" | \"remove\" | \"missing\" }) => void;\r\n}\r\n\r\nexport interface PersistConfig {\r\n driver: PersistDriver;\r\n key: string;\r\n serialize: (v: unknown) => string;\r\n deserialize: (v: string) => unknown;\r\n encrypt: (v: string) => string;\r\n decrypt: (v: string) => string;\r\n encryptAsync?: (v: string) => Promise<string>;\r\n decryptAsync?: (v: string) => Promise<string>;\r\n allowPlaintext?: boolean;\r\n sensitiveData?: boolean;\r\n checksum: \"hash\" | \"none\" | \"sha256\";\r\n onMigrationFail?: \"reset\" | \"keep\" | ((state: unknown) => unknown);\r\n onStorageCleared?: (info: { name: string; key: string; reason: \"clear\" | \"remove\" | \"missing\" }) => void;\r\n}\r\n\r\nexport interface MiddlewareCtx {\r\n action: string;\r\n name: string;\r\n prev: StoreValue;\r\n next: StoreValue;\r\n path: unknown;\r\n}\r\n\r\nexport interface SyncOptions {\r\n channel?: string;\r\n maxPayloadBytes?: number;\r\n /**\r\n * Optional shared token for lightweight cross-tab authentication.\r\n * When set, incoming sync messages without a matching token are rejected.\r\n */\r\n authToken?: string;\r\n conflictResolver?: (args: {\r\n local: StoreValue;\r\n incoming: StoreValue;\r\n localUpdated: number;\r\n incomingUpdated: number;\r\n }) => StoreValue | void;\r\n /**\r\n * Optional checksum mode for sync payloads.\r\n * - \"hash\" (default): include a checksum of the payload.\r\n * - \"none\": skip checksum generation.\r\n */\r\n checksum?: \"hash\" | \"none\";\r\n /**\r\n * Optional signer for sync payloads. The returned value is attached to the message as `auth`.\r\n */\r\n sign?: (payload: SyncMessage) => unknown;\r\n /**\r\n * Optional verifier for incoming sync payloads.\r\n * Return true to accept the message, false to reject it.\r\n */\r\n verify?: (payload: SyncMessage) => boolean;\r\n /**\r\n * Optional resolver for updatedAt timestamps when conflicts are resolved.\r\n */\r\n resolveUpdatedAt?: (args: {\r\n localUpdated: number;\r\n incomingUpdated: number | undefined;\r\n now: number;\r\n }) => number;\r\n}\r\n\r\nexport type SyncMessage = {\r\n v: number;\r\n protocol: number;\r\n type: \"sync-request\" | \"sync-state\";\r\n name: string;\r\n clock: number;\r\n source: string;\r\n updatedAt?: number;\r\n data?: StoreValue;\r\n checksum?: number | null;\r\n auth?: unknown;\r\n token?: string;\r\n requestedAt?: number;\r\n};\r\n\r\nexport interface DevtoolsOptions<State = StoreValue> {\r\n enabled?: boolean;\r\n historyLimit?: number;\r\n redactor?: (state: State) => State;\r\n}\r\n\r\nexport interface LifecycleOptions<State = StoreValue> {\r\n middleware?: Array<(ctx: MiddlewareCtx) => StoreValue | void>;\r\n onSet?: (prev: State, next: State) => void;\r\n onReset?: (prev: State, next: State) => void;\r\n onDelete?: (prev: State) => void;\r\n onCreate?: (initial: State) => void;\r\n}\r\n\r\nexport interface StoreOptions<State = StoreValue> {\r\n scope?: StoreScope;\r\n lazy?: boolean;\r\n /**\r\n * Allow `setStore(name, path, value)` to create missing **leaf** keys on object nodes.\r\n *\r\n * Default: `false` (strict path writes).\r\n *\r\n * Notes:\r\n * - Does not expand arrays (out-of-bounds indices are still rejected).\r\n * - Does not create missing intermediate objects for deep paths; define the shape up-front.\r\n */\r\n pathCreate?: boolean;\r\n validate?: ValidateOption<State>;\r\n persist?: boolean | string | PersistOptions<State>;\r\n devtools?: boolean | DevtoolsOptions<State>;\r\n lifecycle?: LifecycleOptions<State>;\r\n middleware?: Array<(ctx: MiddlewareCtx) => StoreValue | void>;\r\n onSet?: (prev: State, next: State) => void;\r\n onReset?: (prev: State, next: State) => void;\r\n onDelete?: (prev: State) => void;\r\n onCreate?: (initial: State) => void;\r\n onError?: (err: string) => void;\r\n /** @deprecated use validate instead */\r\n validator?: (next: State) => boolean;\r\n /** @deprecated use validate instead */\r\n schema?: unknown;\r\n migrations?: Record<number, (state: State) => State>;\r\n version?: number;\r\n redactor?: (state: State) => State;\r\n historyLimit?: number;\r\n allowSSRGlobalStore?: boolean;\r\n sync?: boolean | SyncOptions;\r\n /**\r\n * Optional feature option bag for third-party plugins.\r\n * Keys are plugin names, values are plugin-specific options.\r\n */\r\n features?: FeatureOptions;\r\n /**\r\n * Snapshot cloning strategy used by subscriptions and selector snapshots.\r\n *\r\n * - \"deep\" (default): deep clone and dev-freeze snapshot values.\r\n * - \"shallow\": shallow clone (top-level) only; nested references are shared.\r\n * - \"ref\": return the live store reference (no cloning).\r\n */\r\n snapshot?: SnapshotMode;\r\n}\r\n\r\nexport interface NormalizedOptions {\r\n scope: StoreScope;\r\n lazy: boolean;\r\n pathCreate: boolean;\r\n persist: PersistConfig | null;\r\n devtools: boolean;\r\n middleware: Array<(ctx: MiddlewareCtx) => StoreValue | void>;\r\n onSet?: (prev: StoreValue, next: StoreValue) => void;\r\n onReset?: (prev: StoreValue, next: StoreValue) => void;\r\n onDelete?: (prev: StoreValue) => void;\r\n onCreate?: (initial: StoreValue) => void;\r\n onError?: (err: string) => void;\r\n validate?: ValidateOption;\r\n migrations: Record<number, (state: any) => any>;\r\n version: number;\r\n redactor?: (state: StoreValue) => StoreValue;\r\n historyLimit: number;\r\n allowSSRGlobalStore?: boolean;\r\n sync?: boolean | SyncOptions;\r\n features?: FeatureOptions;\r\n snapshot: SnapshotMode;\r\n explicitPersist: boolean;\r\n explicitSync: boolean;\r\n explicitDevtools: boolean;\r\n}\r\n\r\nconst warnedLegacyOptions = new Set<string>();\r\n\r\n/**\r\n * Resets the internal set of legacy options that have been warned\r\n * about. Used for testing purposes to prevent warnings from leaking\r\n * between tests.\r\n */\r\nexport const resetLegacyOptionDeprecationWarningsForTests = (): void => {\r\n warnedLegacyOptions.clear();\r\n};\r\n\r\nregisterTestResetHook(\"options.legacy-warnings\", resetLegacyOptionDeprecationWarningsForTests, 30);\r\n\r\nconst memoryStorage: PersistDriver = (() => {\r\n const m = new Map<string, string>();\r\n return {\r\n getItem: (k: string) => (m.has(k) ? m.get(k)! : null),\r\n setItem: (k: string, v: string) => { m.set(k, v); },\r\n removeItem: (k: string) => { m.delete(k); },\r\n type: \"memory\",\r\n };\r\n})();\r\n\r\n/**\r\n * Returns a storage driver that attempts to use the given type of storage\r\n * (session or local) and falls back to memory storage if it is not available.\r\n *\r\n * @param {string} type The type of storage to attempt to use.\r\n * @returns {PersistDriver} A storage driver that may use memory storage if necessary.\r\n */\r\nconst safeStorage = (type: string): PersistDriver => {\r\n try {\r\n if (typeof window === \"undefined\") return memoryStorage;\r\n if (type === \"session\" || type === \"sessionStorage\") return window.sessionStorage ?? memoryStorage;\r\n return window.localStorage ?? memoryStorage;\r\n } catch (_) {\r\n return memoryStorage;\r\n }\r\n};\r\n\r\n/**\r\n * Checks if a value is an object.\r\n *\r\n * This function checks if the value is of type 'object', is not null, and is not an array.\r\n *\r\n * @returns {boolean} True if the value is an object, false otherwise.\r\n */\r\nconst isObject = (value: unknown): value is Record<string, unknown> =>\r\n typeof value === \"object\" && value !== null && !Array.isArray(value);\r\n\r\nconst hasOwn = (value: object, key: string): boolean =>\r\n Object.prototype.hasOwnProperty.call(value, key);\r\n\r\nconst isIdentityStringTransform = (fn: (v: string) => string): boolean => {\r\n try {\r\n const probeA = `__stroid_plaintext_probe_${Math.random().toString(36).slice(2)}__`;\r\n const probeB = `__stroid_plaintext_probe_${Math.random().toString(36).slice(2)}__`;\r\n if (fn(probeA) !== probeA) return false;\r\n return fn(probeB) === probeB;\r\n } catch (_) {\r\n return false;\r\n }\r\n};\r\n\r\nconst DEFAULT_PERSIST_CRYPTO_MARK = typeof Symbol === \"function\"\r\n ? Symbol.for(\"stroid.persist.defaultCrypto\")\r\n : \"__stroid_persist_defaultCrypto__\";\r\n\r\nconst markDefaultPersistCrypto = (fn: (v: string) => string): ((v: string) => string) => {\r\n try {\r\n (fn as any)[DEFAULT_PERSIST_CRYPTO_MARK] = true;\r\n } catch (_) {\r\n // ignore marker failures\r\n }\r\n return fn;\r\n};\r\n\r\nconst legacyOptionReplacementMap: Record<string, string> = {\r\n allowSSRGlobalStore: `scope: \"global\"`,\r\n schema: \"validate\",\r\n validator: \"validate\",\r\n version: \"persist.version\",\r\n migrations: \"persist.migrations\",\r\n historyLimit: \"devtools.historyLimit\",\r\n redactor: \"devtools.redactor\",\r\n middleware: \"lifecycle.middleware\",\r\n onCreate: \"lifecycle.onCreate\",\r\n onSet: \"lifecycle.onSet\",\r\n onReset: \"lifecycle.onReset\",\r\n onDelete: \"lifecycle.onDelete\",\r\n};\r\n\r\n/**\r\n * Normalize persist options for a store.\r\n *\r\n * This function takes the raw persist options from a store and returns\r\n * a normalized PersistConfig object. If the raw persist options are\r\n * invalid, this function returns null.\r\n *\r\n * @template State\r\n * @param {StoreOptions<State>[\"persist\"]} persist - The raw persist options for the store.\r\n * @param {string} name - The name of the store.\r\n * @returns {PersistConfig | null} A normalized PersistConfig object, or null if the raw persist options are invalid.\r\n */\r\nexport const normalizePersistOptions = <State>(\r\n persist: StoreOptions<State>[\"persist\"],\r\n name: string\r\n): PersistConfig | null => {\r\n if (!persist) return null;\r\n\r\n const base = {\r\n key: `stroid_${name}`,\r\n serialize: JSON.stringify,\r\n deserialize: JSON.parse,\r\n encrypt: markDefaultPersistCrypto((v: string) => v),\r\n decrypt: markDefaultPersistCrypto((v: string) => v),\r\n allowPlaintext: false,\r\n sensitiveData: false,\r\n onMigrationFail: \"reset\" as const,\r\n checksum: \"hash\" as const,\r\n };\r\n\r\n if (persist === true) {\r\n return {\r\n driver: safeStorage(\"localStorage\"),\r\n ...base,\r\n };\r\n }\r\n\r\n if (typeof persist === \"string\") {\r\n return {\r\n driver: safeStorage(persist),\r\n ...base,\r\n };\r\n }\r\n\r\n const encrypt = persist.encrypt || base.encrypt;\r\n const decrypt = persist.decrypt || base.decrypt;\r\n const encryptAsync = persist.encryptAsync;\r\n const decryptAsync = persist.decryptAsync;\r\n const sensitiveData = persist.sensitiveData === true;\r\n const allowPlaintext = persist.allowPlaintext === true;\r\n const checksum = persist.checksum === \"sha256\"\r\n ? \"sha256\"\r\n : (persist.checksum === \"none\" ? \"none\" : \"hash\");\r\n\r\n if ((encryptAsync && !decryptAsync) || (!encryptAsync && decryptAsync)) {\r\n throw new Error(\r\n `[stroid/persist] Store \"${name}\" must provide both encryptAsync and decryptAsync when using async crypto.`\r\n );\r\n }\r\n\r\n if (sensitiveData && isIdentityStringTransform(encrypt) && !encryptAsync) {\r\n throw new Error(\r\n `[stroid/persist] Store \"${name}\" is marked sensitiveData but is configured to persist in plaintext. ` +\r\n `Provide encrypt/decrypt hooks to protect sensitive data.`,\r\n );\r\n }\r\n\r\n return {\r\n driver: persist.driver || persist.storage || safeStorage(\"localStorage\"),\r\n key: persist.key || base.key,\r\n serialize: persist.serialize || base.serialize,\r\n deserialize: persist.deserialize || base.deserialize,\r\n encrypt,\r\n decrypt,\r\n encryptAsync,\r\n decryptAsync,\r\n allowPlaintext,\r\n sensitiveData,\r\n checksum,\r\n onMigrationFail: persist.onMigrationFail || \"reset\",\r\n onStorageCleared: persist.onStorageCleared,\r\n };\r\n};\r\n\r\n/**\r\n * Collect deprecation warnings for a store options object.\r\n *\r\n * This function walks through the store options object and checks if any\r\n * deprecated options are present. If a deprecated option is found, a\r\n * warning message is added to the warnings array.\r\n *\r\n * The function returns an array of warning messages. If no deprecated\r\n * options are found, an empty array is returned.\r\n *\r\n * @template State The type of the state stored in the store.\r\n * @param option The store options object to check for deprecated options.\r\n * @returns An array of warning messages for deprecated options. If no deprecated\r\n * options are found, an empty array is returned.\r\n */\r\nexport const collectLegacyOptionDeprecationWarnings = <State>(option: StoreOptions<State>): string[] => {\r\n if (!isObject(option)) return [];\r\n\r\n const warnings: string[] = [];\r\n Object.entries(legacyOptionReplacementMap).forEach(([legacyKey, replacement]) => {\r\n if (!hasOwn(option, legacyKey)) return;\r\n if (warnedLegacyOptions.has(legacyKey)) return;\r\n warnedLegacyOptions.add(legacyKey);\r\n warnings.push(`createStore option \"${legacyKey}\" is deprecated. Use \"${replacement}\" instead.`);\r\n });\r\n return warnings;\r\n};\r\n\r\n/**\r\n * Normalize a store options object, merging default values and performing deprecation checks.\r\n * @param option The store options object to normalize.\r\n * @param name The name of the store.\r\n * @param defaultSnapshotMode The default snapshot mode to use if none is specified.\r\n * @returns A normalized store options object.\r\n */\r\nexport const normalizeStoreOptions = <State>(\r\n option: StoreOptions<State> = {},\r\n name: string,\r\n defaultSnapshotMode: SnapshotMode = \"deep\"\r\n): NormalizedOptions => {\r\n const normalizedScope: StoreScope = option.scope ?? \"request\";\r\n const normalizedLazy = option.lazy === true;\r\n const normalizedPathCreate = option.pathCreate === true;\r\n const lifecycle = isObject(option.lifecycle) ? option.lifecycle as LifecycleOptions<State> : undefined;\r\n const persistGroup = isObject(option.persist) ? option.persist as PersistOptions<State> : undefined;\r\n const devtoolsGroup = isObject(option.devtools) ? option.devtools as DevtoolsOptions<State> : undefined;\r\n const normalizedValidate = option.validate ?? option.validator ?? option.schema;\r\n const normalizedSnapshot =\r\n option.snapshot === \"shallow\" || option.snapshot === \"ref\"\r\n ? option.snapshot\r\n : (defaultSnapshotMode === \"shallow\" || defaultSnapshotMode === \"ref\"\r\n ? defaultSnapshotMode\r\n : \"deep\");\r\n const normalizedFeatures = isObject(option.features)\r\n ? { ...(option.features as Record<string, unknown>) }\r\n : undefined;\r\n const explicitPersist = hasOwn(option, \"persist\");\r\n const explicitSync = hasOwn(option, \"sync\");\r\n const explicitDevtools = hasOwn(option, \"devtools\") || hasOwn(option, \"historyLimit\") || hasOwn(option, \"redactor\");\r\n const normalizedAllowSSRGlobalStore = normalizedScope === \"global\"\r\n ? true\r\n : (option.allowSSRGlobalStore ?? false);\r\n\r\n const {\r\n persist = false,\r\n devtools = false,\r\n onError,\r\n sync,\r\n } = option;\r\n\r\n if (persistGroup?.sensitiveData === true) {\r\n const enc = persistGroup.encrypt;\r\n const encAsync = persistGroup.encryptAsync;\r\n const isIdentity = !enc || isIdentityStringTransform(enc);\r\n if (isIdentity && !encAsync) {\r\n throw new Error(\r\n `[stroid/persist] Store \"${name}\" is marked sensitiveData but is configured to persist in plaintext. ` +\r\n `Provide encrypt/decrypt hooks to protect sensitive data.`,\r\n );\r\n }\r\n }\r\n\r\n return {\r\n scope: normalizedScope,\r\n lazy: normalizedLazy,\r\n pathCreate: normalizedPathCreate,\r\n persist: normalizedScope === \"temp\" && !explicitPersist\r\n ? null\r\n : normalizePersistOptions<State>(persist, name),\r\n devtools: normalizedScope === \"temp\" && !explicitDevtools\r\n ? false\r\n : (typeof devtools === \"boolean\" ? devtools : (devtoolsGroup?.enabled ?? true)),\r\n middleware: (lifecycle?.middleware ?? option.middleware ?? []) as NormalizedOptions[\"middleware\"],\r\n onSet: (lifecycle?.onSet ?? option.onSet) as NormalizedOptions[\"onSet\"],\r\n onReset: (lifecycle?.onReset ?? option.onReset) as NormalizedOptions[\"onReset\"],\r\n onDelete: (lifecycle?.onDelete ?? option.onDelete) as NormalizedOptions[\"onDelete\"],\r\n onCreate: (lifecycle?.onCreate ?? option.onCreate) as NormalizedOptions[\"onCreate\"],\r\n onError,\r\n validate: normalizedValidate as NormalizedOptions[\"validate\"],\r\n migrations: (persistGroup?.migrations ?? option.migrations ?? {}) as NormalizedOptions[\"migrations\"],\r\n version: persistGroup?.version ?? option.version ?? 1,\r\n redactor: normalizedScope === \"temp\" && !explicitDevtools\r\n ? undefined\r\n : (devtoolsGroup?.redactor ?? option.redactor) as NormalizedOptions[\"redactor\"],\r\n historyLimit: normalizedScope === \"temp\" && !explicitDevtools\r\n ? 0\r\n : (devtoolsGroup?.historyLimit ?? option.historyLimit ?? 50),\r\n sync: normalizedScope === \"temp\" && !explicitSync\r\n ? false\r\n : (sync ?? false),\r\n features: normalizedFeatures,\r\n allowSSRGlobalStore: normalizedAllowSSRGlobalStore,\r\n snapshot: normalizedSnapshot,\r\n explicitPersist,\r\n explicitSync,\r\n explicitDevtools,\r\n };\r\n};\r\n\r\n\r\n","/**\r\n * @module devfreeze\r\n *\r\n * LAYER: Module\r\n * OWNS: Module-level behavior and exports for devfreeze.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nexport const devDeepFreeze = <T>(value: T): T => {\r\n if (typeof value !== \"object\" || value === null) return value;\r\n // Skip React elements, DOM nodes, and complex instances (Maps, Sets, third-party classes, etc.)\r\n if (\r\n (value as any).$$typeof || \r\n (typeof window !== \"undefined\" && value instanceof Element) ||\r\n (value.constructor && value.constructor.name !== \"Object\" && value.constructor.name !== \"Array\")\r\n ) {\r\n return value;\r\n }\r\n const stack: object[] = [value as object];\r\n const seen = new WeakSet<object>();\r\n\r\n while (stack.length > 0) {\r\n const current = stack.pop()!;\r\n if (seen.has(current)) continue;\r\n seen.add(current);\r\n\r\n if (!Object.isFrozen(current)) {\r\n Object.freeze(current);\r\n }\r\n\r\n for (const key of Object.keys(current as Record<string, unknown>)) {\r\n const next = (current as Record<string, unknown>)[key];\r\n if (typeof next === \"object\" && next !== null && !seen.has(next)) {\r\n stack.push(next);\r\n }\r\n }\r\n }\r\n return value;\r\n};\r\n\r\n\r\n","/**\r\n * @module feature-registry\r\n *\r\n * LAYER: Module\r\n * OWNS: Module-level behavior and exports for feature-registry.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport type { NormalizedOptions, StoreValue } from \"./adapters/options.js\";\r\n\r\nexport type BuiltInFeatureName = \"persist\" | \"sync\" | \"devtools\";\r\nexport type FeatureName = BuiltInFeatureName | (string & {});\r\n\r\nexport interface FeatureMetrics {\r\n notifyCount: number;\r\n totalNotifyMs: number;\r\n lastNotifyMs: number;\r\n}\r\n\r\nexport interface StoreFeatureMeta {\r\n createdAt: string;\r\n updatedAt: string;\r\n updatedAtMs: number;\r\n updateCount: number;\r\n version: number;\r\n metrics: FeatureMetrics;\r\n options: NormalizedOptions;\r\n}\r\n\r\nexport interface BaseFeatureContext {\r\n name: string;\r\n options: NormalizedOptions;\r\n getMeta: () => StoreFeatureMeta | undefined;\r\n getStoreValue: () => StoreValue;\r\n getAllStores: () => Record<string, StoreValue>;\r\n getInitialState: () => StoreValue;\r\n hasStore: () => boolean;\r\n setStoreValue: (value: StoreValue) => void;\r\n applyFeatureState: (value: StoreValue, updatedAtMs?: number) => void;\r\n notify: () => void;\r\n reportStoreError: (message: string) => void;\r\n warn: (message: string) => void;\r\n log: (message: string) => void;\r\n hashState: (value: unknown) => number;\r\n deepClone: <T>(value: T) => T;\r\n sanitize: (value: unknown) => unknown;\r\n validate: (next: StoreValue) => { ok: boolean; value?: StoreValue };\r\n isDev: () => boolean;\r\n}\r\n\r\nexport interface FeatureCreateContext extends BaseFeatureContext {}\r\n\r\nexport interface FeatureWriteContext extends BaseFeatureContext {\r\n action: string;\r\n prev: StoreValue;\r\n next: StoreValue;\r\n}\r\n\r\nexport interface FeatureDeleteContext extends BaseFeatureContext {\r\n prev: StoreValue;\r\n}\r\n\r\nexport interface DevtoolsFeatureApi {\r\n getHistory?: (name: string, limit?: number) => unknown[];\r\n clearHistory?: (name?: string) => void;\r\n getPersistQueueDepth?: (name: string) => number;\r\n}\r\n\r\nexport interface StoreFeatureRuntime {\r\n onStoreCreate?: (ctx: FeatureCreateContext) => void;\r\n onStoreWrite?: (ctx: FeatureWriteContext) => void;\r\n beforeStoreDelete?: (ctx: FeatureDeleteContext) => void;\r\n afterStoreDelete?: (ctx: FeatureDeleteContext) => void;\r\n resetAll?: () => void;\r\n api?: DevtoolsFeatureApi;\r\n}\r\n\r\nexport type StoreFeatureFactory = () => StoreFeatureRuntime;\r\n\r\nconst _featureFactories = new Map<FeatureName, StoreFeatureFactory>();\r\nlet _onFeatureRegistered: ((name: FeatureName, factory: StoreFeatureFactory) => void) | null = null;\r\n\r\nexport const registerStoreFeature = (name: FeatureName, factory: StoreFeatureFactory): void => {\r\n _featureFactories.set(name, factory);\r\n _onFeatureRegistered?.(name, factory);\r\n};\r\n\r\nexport const hasRegisteredStoreFeature = (name: FeatureName): boolean =>\r\n _featureFactories.has(name);\r\n\r\nexport const getStoreFeatureFactory = (name: FeatureName): StoreFeatureFactory | undefined =>\r\n _featureFactories.get(name);\r\n\r\nexport const getRegisteredFeatureNames = (): FeatureName[] =>\r\n Array.from(_featureFactories.keys());\r\n\r\nexport const setFeatureRegistrationHook = (hook: ((name: FeatureName, factory: StoreFeatureFactory) => void) | null): void => {\r\n _onFeatureRegistered = hook;\r\n};\r\n\r\nexport const resetRegisteredStoreFeaturesForTests = (): void => {\r\n _featureFactories.clear();\r\n _onFeatureRegistered = null;\r\n};\r\n\r\n\r\n","/**\r\n * @module features/lifecycle\r\n *\r\n * LAYER: Feature runtime\r\n * OWNS: Module-level behavior and exports for features/lifecycle.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport type { StoreValue } from \"../adapters/options.js\";\r\nimport { deepClone, isDev } from \"../utils.js\";\r\n\r\nexport const MIDDLEWARE_ABORT = Symbol(\"stroid.middleware.abort\");\r\n\r\nexport type LifecycleIssueReporter = (message: string, visibility?: \"dev\" | \"always\") => void;\r\n\r\nexport const runMiddleware = ({\r\n name,\r\n payload,\r\n middlewares,\r\n reportIssue,\r\n warn,\r\n}: {\r\n name: string;\r\n payload: { action: string; prev: StoreValue; next: StoreValue; path: unknown };\r\n middlewares: Array<(ctx: {\r\n action: string;\r\n name: string;\r\n prev: StoreValue;\r\n next: StoreValue;\r\n path: unknown;\r\n }) => StoreValue | void>;\r\n reportIssue: LifecycleIssueReporter;\r\n warn: (message: string) => void;\r\n}): StoreValue | typeof MIDDLEWARE_ABORT => {\r\n if (!Array.isArray(middlewares) || middlewares.length === 0) return payload.next;\r\n const warnedUndefined = new WeakSet<Function>();\r\n let nextState = deepClone(payload.next);\r\n for (const mw of middlewares) {\r\n if (typeof mw !== \"function\") continue;\r\n let result: StoreValue | void;\r\n const middlewareNext = nextState;\r\n try {\r\n result = mw({\r\n action: payload.action,\r\n name,\r\n prev: payload.prev,\r\n next: middlewareNext,\r\n path: payload.path,\r\n });\r\n } catch (err) {\r\n const message = `Middleware for \"${name}\" failed: ${(err as { message?: string })?.message ?? err}`;\r\n reportIssue(message, \"dev\");\r\n return MIDDLEWARE_ABORT;\r\n }\r\n if (result && typeof (result as Promise<unknown>).then === \"function\") {\r\n const message = `Middleware for \"${name}\" must be synchronous. Promise-returning middleware is not supported.`;\r\n reportIssue(message, \"dev\");\r\n return MIDDLEWARE_ABORT;\r\n }\r\n if (result === undefined) {\r\n if (isDev() && !warnedUndefined.has(mw)) {\r\n warnedUndefined.add(mw);\r\n warn(`Middleware for \"${name}\" returned undefined; treating as pass-through. Return the new state to override.`);\r\n }\r\n nextState = middlewareNext;\r\n } else {\r\n nextState = result;\r\n }\r\n }\r\n return nextState;\r\n};\r\n\r\nexport const runStoreHook = ({\r\n name,\r\n label,\r\n fn,\r\n args,\r\n reportIssue,\r\n}: {\r\n name: string;\r\n label: \"onCreate\" | \"onSet\" | \"onReset\" | \"onDelete\";\r\n fn: ((...args: any[]) => void) | undefined;\r\n args: any[];\r\n reportIssue: LifecycleIssueReporter;\r\n}): void => {\r\n if (typeof fn !== \"function\") return;\r\n try {\r\n fn(...args);\r\n } catch (err) {\r\n const message = `${label} for \"${name}\" failed: ${(err as { message?: string })?.message ?? err}`;\r\n reportIssue(message, \"always\");\r\n }\r\n};\r\n\r\n\r\n","/**\r\n * @module internals/reporting\r\n *\r\n * LAYER: Internal subsystem\r\n * OWNS: Module-level behavior and exports for internals/reporting.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport { critical, warn, warnAlways } from \"./diagnostics.js\";\r\n\r\nexport type IssueSeverity = \"warn\" | \"critical\";\r\nexport type IssueVisibility = \"dev\" | \"always\";\r\n\r\nexport type IssueOptions = {\r\n severity?: IssueSeverity;\r\n visibility?: IssueVisibility;\r\n onError?: (message: string) => void;\r\n};\r\n\r\nexport const reportIssue = (message: string, options: IssueOptions = {}): void => {\r\n const {\r\n severity = \"warn\",\r\n visibility = \"dev\",\r\n onError,\r\n } = options;\r\n\r\n onError?.(message);\r\n\r\n if (severity === \"critical\") {\r\n if (visibility === \"dev\") warn(message);\r\n critical(message);\r\n return;\r\n }\r\n\r\n if (visibility === \"always\") {\r\n warnAlways(message);\r\n return;\r\n }\r\n\r\n warn(message);\r\n};\r\n\r\n\r\n","/**\r\n * @module internals/computed-order\r\n *\r\n * LAYER: Internal subsystem\r\n * OWNS: Module-level behavior and exports for internals/computed-order.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport { registerTestResetHook } from \"./test-reset.js\";\r\n\r\nexport type ComputedOrderResolver = (names: string[]) => string[];\r\n\r\nlet resolver: ComputedOrderResolver | null = null;\r\n\r\nexport const setComputedOrderResolver = (next: ComputedOrderResolver | null): void => {\r\n resolver = next;\r\n};\r\n\r\nexport const getComputedOrder = (names: string[]): string[] => {\r\n return resolver ? resolver(names) : [];\r\n};\r\n\r\nregisterTestResetHook(\"computed.order-resolver\", () => {\r\n resolver = null;\r\n}, 105);\r\n\r\n\r\n","/**\r\n * @module computed-graph\r\n *\r\n * LAYER: Module\r\n * OWNS: Module-level behavior and exports for computed-graph.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport {\r\n getStoreRegistry,\r\n getActiveStoreRegistry,\r\n defaultRegistryScope,\r\n type ComputedEntry,\r\n} from \"./store-registry.js\";\r\nimport { error } from \"./utils.js\";\r\nimport { setComputedOrderResolver } from \"./internals/computed-order.js\";\r\n\r\nconst getRegistry = () => getActiveStoreRegistry(getStoreRegistry(defaultRegistryScope));\r\n\r\nconst getEntries = () => getRegistry().computedEntries;\r\nconst getDependents = () => getRegistry().computedDependents;\r\n\r\nexport const detectCycle = (name: string, deps: string[]): string | null => {\r\n const entries = getEntries();\r\n const visited = new Set<string>();\r\n const path: string[] = [];\r\n\r\n const dfs = (current: string): boolean => {\r\n if (current === name) return true;\r\n if (visited.has(current)) return false;\r\n visited.add(current);\r\n path.push(current);\r\n\r\n const currentDeps = entries[current]?.deps ?? [];\r\n for (const dep of currentDeps) {\r\n if (dfs(dep)) return true;\r\n }\r\n\r\n path.pop();\r\n return false;\r\n };\r\n\r\n for (const dep of deps) {\r\n path.length = 0;\r\n if (dfs(dep)) {\r\n return [name, ...path, name].join(\" -> \");\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\nconst removeComputedDependentLinks = (name: string, deps: string[]): void => {\r\n const dependents = getDependents();\r\n for (const dep of deps) {\r\n const links = dependents[dep];\r\n if (!links) continue;\r\n links.delete(name);\r\n if (links.size === 0) delete dependents[dep];\r\n }\r\n};\r\n\r\nexport const registerComputed = (\r\n name: string,\r\n deps: string[],\r\n compute: (...args: unknown[]) => unknown\r\n): boolean => {\r\n const cycleTrace = detectCycle(name, deps);\r\n if (cycleTrace) {\r\n error(\r\n `[stroid] createComputed(\"${name}\") rejected: ` +\r\n `circular dependency detected -> ${cycleTrace}\\n` +\r\n `Define relationships without cycles.`\r\n );\r\n return false;\r\n }\r\n\r\n const entries = getEntries();\r\n const dependents = getDependents();\r\n\r\n if (entries[name]) {\r\n removeComputedDependentLinks(name, entries[name].deps);\r\n }\r\n\r\n entries[name] = { deps, compute, stale: true } as ComputedEntry;\r\n\r\n for (const dep of deps) {\r\n if (!dependents[dep]) dependents[dep] = new Set<string>();\r\n dependents[dep].add(name);\r\n }\r\n\r\n return true;\r\n};\r\n\r\nexport const unregisterComputed = (name: string): void => {\r\n const entries = getEntries();\r\n const entry = entries[name];\r\n if (!entry) return;\r\n\r\n removeComputedDependentLinks(name, entry.deps);\r\n delete entries[name];\r\n};\r\n\r\nexport const markStale = (name: string): void => {\r\n const entries = getEntries();\r\n if (entries[name]) entries[name].stale = true;\r\n};\r\n\r\nexport const isComputed = (name: string): boolean =>\r\n Object.prototype.hasOwnProperty.call(getEntries(), name);\r\n\r\nexport const getComputedEntry = (name: string): ComputedEntry | undefined =>\r\n getEntries()[name];\r\n\r\nexport const getTopoOrderedComputeds = (changedSources: string[]): string[] => {\r\n const entries = getEntries();\r\n const dependents = getDependents();\r\n\r\n const affected = new Set<string>();\r\n const queue = [...changedSources];\r\n\r\n while (queue.length > 0) {\r\n const current = queue.shift()!;\r\n const deps = dependents[current];\r\n if (!deps) continue;\r\n for (const dep of deps) {\r\n if (!affected.has(dep)) {\r\n affected.add(dep);\r\n queue.push(dep);\r\n }\r\n }\r\n }\r\n\r\n if (affected.size === 0) return [];\r\n\r\n const expandComputedDeps = (name: string): void => {\r\n const entry = entries[name];\r\n if (!entry) return;\r\n for (const dep of entry.deps) {\r\n if (!entries[dep]) continue;\r\n if (!affected.has(dep)) {\r\n affected.add(dep);\r\n expandComputedDeps(dep);\r\n }\r\n }\r\n };\r\n\r\n Array.from(affected).forEach((name) => expandComputedDeps(name));\r\n\r\n const inDegree = new Map<string, number>();\r\n const adjList = new Map<string, string[]>();\r\n\r\n for (const name of affected) {\r\n const entry = entries[name];\r\n if (!entry) continue;\r\n\r\n let degree = 0;\r\n for (const dep of entry.deps) {\r\n if (affected.has(dep)) {\r\n degree++;\r\n if (!adjList.has(dep)) adjList.set(dep, []);\r\n adjList.get(dep)!.push(name);\r\n }\r\n }\r\n inDegree.set(name, degree);\r\n }\r\n\r\n const ready: string[] = [];\r\n for (const [name, degree] of inDegree) {\r\n if (degree === 0) ready.push(name);\r\n }\r\n ready.sort();\r\n\r\n const sorted: string[] = [];\r\n while (ready.length > 0) {\r\n const name = ready.shift()!;\r\n sorted.push(name);\r\n\r\n const children = adjList.get(name) ?? [];\r\n for (const child of children) {\r\n const newDegree = (inDegree.get(child) ?? 1) - 1;\r\n inDegree.set(child, newDegree);\r\n if (newDegree === 0) {\r\n const insertAt = ready.findIndex((n) => n > child);\r\n if (insertAt === -1) ready.push(child);\r\n else ready.splice(insertAt, 0, child);\r\n }\r\n }\r\n }\r\n\r\n return sorted;\r\n};\r\n\r\nsetComputedOrderResolver(getTopoOrderedComputeds);\r\n\r\nexport const getFullComputedGraph = (): {\r\n nodes: string[];\r\n edges: Array<{ from: string; to: string }>;\r\n dependencies: Record<string, string[]>;\r\n dependents: Record<string, string[]>;\r\n} => {\r\n const entries = getEntries();\r\n const dependents = getDependents();\r\n\r\n const nodes = Object.keys(entries);\r\n const edges: Array<{ from: string; to: string }> = [];\r\n\r\n for (const [name, entry] of Object.entries(entries)) {\r\n for (const dep of entry.deps) {\r\n edges.push({ from: dep, to: name });\r\n }\r\n }\r\n\r\n return {\r\n nodes,\r\n edges,\r\n dependencies: Object.fromEntries(\r\n Object.entries(entries).map(([k, v]) => [k, [...v.deps]])\r\n ),\r\n dependents: Object.fromEntries(\r\n Object.entries(dependents).map(([k, v]) => [k, [...v]])\r\n ),\r\n };\r\n};\r\n\r\nexport const getComputedDepsFor = (name: string): { deps: string[]; dependents: string[] } | null => {\r\n const entry = getEntries()[name];\r\n if (!entry) return null;\r\n const dependents = getDependents()[name];\r\n return {\r\n deps: [...entry.deps],\r\n dependents: dependents ? [...dependents] : [],\r\n };\r\n};\r\n\r\n\r\n","/**\r\n * @module store-lifecycle/identity\r\n *\r\n * LAYER: Store lifecycle\r\n * OWNS: Module-level behavior and exports for store-lifecycle/identity.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport { warn, isDev, suggestStoreName } from \"../utils.js\";\r\nimport { getConfig, getNamespace } from \"../internals/config.js\";\r\nimport { reportIssue, type IssueSeverity, type IssueVisibility } from \"../internals/reporting.js\";\r\nimport { hasStoreEntryInternal, stores, isDeleting, meta, featureRuntimes } from \"./registry.js\";\r\nimport type { FeatureName } from \"../feature-registry.js\";\r\nimport type { StoreDefinition } from \"./types.js\";\r\nimport { registerTestResetHook } from \"../internals/test-reset.js\";\r\n\r\nconst _ssrWarningsIssued = new Set<string>();\r\nexport const getSsrWarningIssued = (name?: string): boolean =>\r\n name ? _ssrWarningsIssued.has(name) : _ssrWarningsIssued.size > 0;\r\nexport const markSsrWarningIssued = (name: string): void => {\r\n if (!name) return;\r\n _ssrWarningsIssued.add(name);\r\n};\r\nexport const resetSsrWarningFlag = (): void => {\r\n _ssrWarningsIssued.clear();\r\n};\r\n\r\nregisterTestResetHook(\"ssr.warnings\", resetSsrWarningFlag, 60);\r\n\r\nconst _namespaceWarnings = new Set<string>();\r\nexport const qualifyName = (raw: string): string => {\r\n const ns = getNamespace();\r\n if (!ns) return raw;\r\n if (raw.includes(\"::\")) return raw;\r\n if (isDev() && !_namespaceWarnings.has(raw)) {\r\n _namespaceWarnings.add(raw);\r\n warn(\r\n `Namespace \"${ns}\" is active; treating store \"${raw}\" as \"${ns}::${raw}\". ` +\r\n `Consider using namespace(\"${ns}\").create(\"...\") to be explicit.`\r\n );\r\n }\r\n return `${ns}::${raw}`;\r\n};\r\n\r\nexport const nameOf = (name: string | StoreDefinition<string, unknown>): string =>\r\n qualifyName(typeof name === \"string\" ? name : name.name);\r\n\r\nexport const exists = (name: string): boolean => {\r\n if (hasStoreEntryInternal(name) && !isDeleting(name)) return true;\r\n suggestStoreName(name, Object.keys(stores));\r\n return false;\r\n};\r\n\r\nexport const reportStoreIssue = (\r\n name: string,\r\n message: string,\r\n options: { severity?: IssueSeverity; visibility?: IssueVisibility } = {}\r\n): void => {\r\n reportIssue(message, {\r\n ...options,\r\n onError: meta[name]?.options?.onError,\r\n });\r\n};\r\n\r\nexport const reportStoreCreationIssue = (\r\n message: string,\r\n onError?: (message: string) => void,\r\n options: { severity?: IssueSeverity; visibility?: IssueVisibility } = {}\r\n): void => {\r\n reportIssue(message, {\r\n ...options,\r\n onError,\r\n });\r\n};\r\n\r\nexport const reportStoreWarning = (\r\n name: string,\r\n message: string,\r\n visibility: IssueVisibility = \"dev\"\r\n): void => {\r\n reportStoreIssue(name, message, { severity: \"warn\", visibility });\r\n};\r\n\r\nexport const reportStoreCreationWarning = (\r\n message: string,\r\n onError?: (message: string) => void,\r\n visibility: IssueVisibility = \"dev\"\r\n): void => {\r\n reportStoreCreationIssue(message, onError, { severity: \"warn\", visibility });\r\n};\r\n\r\nexport const reportStoreError = (name: string, message: string): void =>\r\n reportStoreIssue(name, message, { severity: \"critical\", visibility: \"always\" });\r\n\r\nexport const reportStoreCreationError = (message: string, onError?: (message: string) => void): void =>\r\n reportStoreCreationIssue(message, onError, { severity: \"critical\", visibility: \"always\" });\r\n\r\nexport const warnMissingFeature = (storeName: string, featureName: FeatureName, onError?: (message: string) => void): void => {\r\n const message =\r\n `Store \"${storeName}\" requested ${featureName} support, but \"${featureName}\" is not registered.\\n` +\r\n `Import \"stroid/${featureName}\" before calling createStore(\"${storeName}\", ...).`;\r\n reportStoreCreationWarning(message, onError, \"always\");\r\n if (getConfig().strictMissingFeatures) {\r\n throw new Error(message);\r\n }\r\n};\r\n\r\nexport const getFeatureApi = (name: FeatureName) => featureRuntimes.get(name)?.api;\r\n\r\n\r\n","/**\r\n * @module store-transaction\r\n *\r\n * LAYER: Store runtime\r\n * OWNS: Module-level behavior and exports for store-transaction.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport type { StoreValue } from \"./store-lifecycle/types.js\";\r\nimport {\r\n getActiveStoreRegistry,\r\n runWithRegistry,\r\n type StoreRegistry,\r\n type TransactionState,\r\n} from \"./store-registry.js\";\r\n\r\nconst getTransactionState = (registry?: StoreRegistry): TransactionState =>\r\n (registry ?? getActiveStoreRegistry()).transaction;\r\n\r\nconst coerceError = (err?: unknown): Error => {\r\n if (err instanceof Error) return err;\r\n if (typeof err === \"string\") return new Error(err);\r\n if (err && typeof (err as any)?.message === \"string\") return new Error((err as any).message);\r\n return new Error(\"setStoreBatch aborted\");\r\n};\r\n\r\nexport const beginTransaction = (registry?: StoreRegistry): StoreRegistry => {\r\n const resolvedRegistry = registry ?? getActiveStoreRegistry();\r\n const state = getTransactionState(resolvedRegistry);\r\n state.depth += 1;\r\n if (state.depth === 1) {\r\n state.pending = [];\r\n state.stagedValues.clear();\r\n state.snapshotCache.clear();\r\n state.failed = false;\r\n state.error = undefined;\r\n }\r\n return resolvedRegistry;\r\n};\r\n\r\nexport const isTransactionActive = (): boolean => getTransactionState().depth > 0;\r\n\r\nexport const markTransactionFailed = (err?: unknown, registry?: StoreRegistry): void => {\r\n const state = getTransactionState(registry);\r\n state.failed = true;\r\n if (!state.error) state.error = coerceError(err);\r\n};\r\n\r\nexport const registerTransactionCommit = (fn: () => void): void => {\r\n const registry = getActiveStoreRegistry();\r\n const state = getTransactionState(registry);\r\n state.pending.push(() => runWithRegistry(registry, fn));\r\n};\r\n\r\nexport const stageTransactionValue = (name: string, value: StoreValue): void => {\r\n const state = getTransactionState();\r\n state.stagedValues.set(name, value);\r\n state.snapshotCache.delete(name);\r\n};\r\n\r\nexport const getStagedTransactionValue = (name: string): { has: boolean; value: StoreValue | undefined } => {\r\n const state = getTransactionState();\r\n if (!state.stagedValues.has(name)) return { has: false, value: undefined };\r\n return { has: true, value: state.stagedValues.get(name) };\r\n};\r\n\r\nexport const endTransaction = (err?: unknown, registry?: StoreRegistry): Error | null => {\r\n const state = getTransactionState(registry);\r\n if (state.depth === 0) return null;\r\n if (err) {\r\n markTransactionFailed(err, registry);\r\n }\r\n state.depth = Math.max(0, state.depth - 1);\r\n if (state.depth > 0) return null;\r\n\r\n const finalError = state.failed ? (state.error ?? new Error(\"setStoreBatch aborted\")) : null;\r\n\r\n if (!finalError) {\r\n state.pending.forEach((fn) => fn());\r\n }\r\n\r\n state.pending = [];\r\n state.stagedValues.clear();\r\n state.snapshotCache.clear();\r\n state.failed = false;\r\n state.error = undefined;\r\n\r\n return finalError;\r\n};\r\n\r\n\r\n","/**\r\n * @module store-lifecycle/validation\r\n *\r\n * LAYER: Store lifecycle\r\n * OWNS: Module-level behavior and exports for store-lifecycle/validation.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport {\r\n warn,\r\n critical,\r\n sanitize,\r\n canReuseSanitized,\r\n parsePath,\r\n deepClone,\r\n runSchemaValidation,\r\n getType,\r\n type SupportedType,\r\n PathInput,\r\n} from \"../utils.js\";\r\nimport { type ValidateOption } from \"../adapters/options.js\";\r\nimport {\r\n meta,\r\n stores,\r\n initialFactories,\r\n initialStates,\r\n setStoreValueInternal,\r\n getRegistry,\r\n setPathCacheInvalidator,\r\n} from \"./registry.js\";\r\nimport { reportStoreError } from \"./identity.js\";\r\nimport {\r\n isTransactionActive,\r\n stageTransactionValue,\r\n registerTransactionCommit,\r\n getStagedTransactionValue,\r\n} from \"../store-transaction.js\";\r\nimport { registerTestResetHook } from \"../internals/test-reset.js\";\r\nimport type { StoreValue } from \"./types.js\";\r\n\r\ntype PathSafetyVerdict = { ok: true } | { ok: false; reason: string };\r\ntype PathValidationCacheNode = {\r\n children: Map<string, PathValidationCacheNode>;\r\n verdicts?: Map<SupportedType, PathSafetyVerdict>;\r\n};\r\ntype PathValidationLruEntry = {\r\n node: PathValidationCacheNode;\r\n type: SupportedType;\r\n};\r\nconst _pathValidationCacheByRegistry = new WeakMap<object, Map<string, PathValidationCacheNode>>();\r\nconst _pathValidationLruByRegistry = new WeakMap<object, Map<string, Map<string, PathValidationLruEntry>>>();\r\nconst MAX_PATH_CACHE_ENTRIES_PER_STORE = 500;\r\nconst PATH_CACHE_DELIMITER = \"\\u001f\";\r\nconst getPathValidationCache = (registry: object): Map<string, PathValidationCacheNode> => {\r\n let cache = _pathValidationCacheByRegistry.get(registry);\r\n if (!cache) {\r\n cache = new Map();\r\n _pathValidationCacheByRegistry.set(registry, cache);\r\n }\r\n return cache;\r\n};\r\nconst getPathValidationLru = (registry: object): Map<string, Map<string, PathValidationLruEntry>> => {\r\n let lru = _pathValidationLruByRegistry.get(registry);\r\n if (!lru) {\r\n lru = new Map();\r\n _pathValidationLruByRegistry.set(registry, lru);\r\n }\r\n return lru;\r\n};\r\nconst getStorePathLru = (registry: object, storeName: string): Map<string, PathValidationLruEntry> => {\r\n const lruByStore = getPathValidationLru(registry);\r\n let storeLru = lruByStore.get(storeName);\r\n if (!storeLru) {\r\n storeLru = new Map();\r\n lruByStore.set(storeName, storeLru);\r\n }\r\n return storeLru;\r\n};\r\nconst touchPathLru = (\r\n storeLru: Map<string, PathValidationLruEntry>,\r\n cacheKey: string,\r\n entry: PathValidationLruEntry\r\n): void => {\r\n if (storeLru.has(cacheKey)) storeLru.delete(cacheKey);\r\n storeLru.set(cacheKey, entry);\r\n while (storeLru.size > MAX_PATH_CACHE_ENTRIES_PER_STORE) {\r\n const oldestKey = storeLru.keys().next().value as string | undefined;\r\n if (!oldestKey) break;\r\n const oldest = storeLru.get(oldestKey);\r\n storeLru.delete(oldestKey);\r\n if (oldest?.node.verdicts) {\r\n oldest.node.verdicts.delete(oldest.type);\r\n if (oldest.node.verdicts.size === 0) {\r\n delete oldest.node.verdicts;\r\n }\r\n }\r\n }\r\n};\r\n\r\nexport const pathValidationCache = new Proxy(new Map(), {\r\n get: (_target, prop) => {\r\n const target = getPathValidationCache(getRegistry()) as any;\r\n if (prop === \"size\") return target.size;\r\n if (prop === Symbol.iterator) return target[Symbol.iterator].bind(target);\r\n const value = target[prop];\r\n return typeof value === \"function\" ? value.bind(target) : value;\r\n },\r\n set: (_target, prop, value) => {\r\n (getPathValidationCache(getRegistry()) as any)[prop] = value;\r\n return true;\r\n },\r\n}) as Map<string, PathValidationCacheNode>;\r\n\r\nexport const resetPathValidationCache = (registry: object): void => {\r\n _pathValidationCacheByRegistry.set(registry, new Map<string, PathValidationCacheNode>());\r\n _pathValidationLruByRegistry.set(registry, new Map<string, Map<string, PathValidationLruEntry>>());\r\n};\r\n\r\nexport const validatePathSafety = (storeName: string, base: StoreValue, path: PathInput, nextValue: unknown): { ok: boolean; reason?: string } => {\r\n const metaEntry = meta[storeName];\r\n if (!metaEntry) return { ok: true };\r\n const parts = parsePath(path);\r\n if (parts.length === 0) return { ok: true };\r\n const incomingType = getType(nextValue);\r\n const registry = getRegistry();\r\n const pathCache = getPathValidationCache(registry);\r\n const storeLru = getStorePathLru(registry, storeName);\r\n const pathKey = parts.join(PATH_CACHE_DELIMITER);\r\n let root = pathCache.get(storeName);\r\n if (!root) {\r\n root = { children: new Map() };\r\n pathCache.set(storeName, root);\r\n }\r\n\r\n let node = root;\r\n for (const segment of parts) {\r\n let child = node.children.get(segment);\r\n if (!child) {\r\n child = { children: new Map() };\r\n node.children.set(segment, child);\r\n }\r\n node = child;\r\n }\r\n\r\n const cached = node.verdicts?.get(incomingType);\r\n if (cached) {\r\n const cacheKey = `${pathKey}|${incomingType}`;\r\n touchPathLru(storeLru, cacheKey, { node, type: incomingType });\r\n return cached;\r\n }\r\n\r\n const allowCreate = metaEntry.options?.pathCreate === true;\r\n let cursor: unknown = base;\r\n let verdict: PathSafetyVerdict = { ok: true };\r\n for (let i = 0; i < parts.length; i++) {\r\n const key = parts[i];\r\n const isLast = i === parts.length - 1;\r\n\r\n if (cursor === null || cursor === undefined) {\r\n const reason = `Path \"${parts.join(\".\")}\" is invalid for \"${storeName}\" - \"${parts.slice(0, i).join(\".\") || \"root\"}\" is ${cursor === null ? \"null\" : \"undefined\"}.`;\r\n critical(reason);\r\n verdict = { ok: false, reason };\r\n break;\r\n }\r\n\r\n if (typeof cursor !== \"object\") {\r\n const reason = `Path \"${parts.join(\".\")}\" is invalid for \"${storeName}\" - \"${parts.slice(0, i).join(\".\") || \"root\"}\" is not an object.`;\r\n critical(reason);\r\n verdict = { ok: false, reason };\r\n break;\r\n }\r\n\r\n if (Array.isArray(cursor)) {\r\n const idx = Number(key);\r\n if (!Number.isInteger(idx) || idx < 0) {\r\n const reason = `Path \"${parts.join(\".\")}\" targets non-numeric index \"${key}\" on an array in \"${storeName}\".`;\r\n critical(reason);\r\n verdict = { ok: false, reason };\r\n break;\r\n }\r\n\r\n const arr = cursor as unknown[];\r\n if (idx >= arr.length) {\r\n const reason = `Path \"${parts.join(\".\")}\" is invalid for \"${storeName}\" - index ${idx} is out of bounds (length ${arr.length}).`;\r\n critical(reason);\r\n verdict = { ok: false, reason };\r\n break;\r\n }\r\n\r\n if (isLast) {\r\n const existing = arr[idx];\r\n if (existing !== undefined && existing !== null) {\r\n const expected = getType(existing);\r\n if (expected !== incomingType) {\r\n const reason = `Type mismatch setting \"${parts.join(\".\")}\" on \"${storeName}\": expected ${expected}, received ${incomingType}.`;\r\n critical(reason);\r\n verdict = { ok: false, reason };\r\n break;\r\n }\r\n }\r\n verdict = { ok: true };\r\n break;\r\n }\r\n cursor = arr[idx];\r\n continue;\r\n }\r\n\r\n const hasKey = Object.prototype.hasOwnProperty.call(cursor as Record<string, unknown>, key);\r\n if (!hasKey) {\r\n if (allowCreate && isLast) {\r\n verdict = { ok: true };\r\n break;\r\n }\r\n const reason = `Path \"${parts.join(\".\")}\" is invalid for \"${storeName}\" - unknown key \"${key}\" at \"${parts.slice(0, i).join(\".\") || \"root\"}\".`;\r\n critical(reason);\r\n verdict = { ok: false, reason };\r\n break;\r\n }\r\n if (isLast) {\r\n const existing = (cursor as Record<string, unknown>)[key];\r\n if (existing !== undefined && existing !== null) {\r\n const expected = getType(existing);\r\n if (expected !== incomingType) {\r\n const reason = `Type mismatch setting \"${parts.join(\".\")}\" on \"${storeName}\": expected ${expected}, received ${incomingType}.`;\r\n critical(reason);\r\n verdict = { ok: false, reason };\r\n break;\r\n }\r\n }\r\n verdict = { ok: true };\r\n break;\r\n }\r\n cursor = (cursor as Record<string, unknown>)[key];\r\n }\r\n\r\n if (!node.verdicts) node.verdicts = new Map();\r\n const hadVerdict = node.verdicts.has(incomingType);\r\n node.verdicts.set(incomingType, verdict);\r\n if (!hadVerdict) {\r\n const cacheKey = `${pathKey}|${incomingType}`;\r\n touchPathLru(storeLru, cacheKey, { node, type: incomingType });\r\n }\r\n return verdict;\r\n};\r\n\r\nexport const sanitizeValue = (\r\n name: string,\r\n value: unknown,\r\n onError?: (message: string) => void,\r\n options?: { reuseInput?: boolean }\r\n): { ok: true; value: StoreValue } | { ok: false } => {\r\n try {\r\n if (options?.reuseInput && canReuseSanitized(value)) {\r\n return { ok: true, value: value as StoreValue };\r\n }\r\n return { ok: true, value: sanitize(value) as StoreValue };\r\n } catch (err) {\r\n const message = `Sanitize failed for \"${name}\": ${(err as { message?: string })?.message ?? err}`;\r\n meta[name]?.options?.onError?.(message);\r\n onError?.(message);\r\n warn(message);\r\n return { ok: false };\r\n }\r\n};\r\n\r\nconst collectErrorHandlers = (name: string, onError?: (message: string) => void): Set<(message: string) => void> => {\r\n const handlers = new Set<((message: string) => void)>();\r\n const metaHandler = meta[name]?.options?.onError;\r\n if (typeof metaHandler === \"function\") handlers.add(metaHandler);\r\n if (typeof onError === \"function\") handlers.add(onError);\r\n return handlers;\r\n};\r\n\r\nexport const runValidation = (\r\n name: string,\r\n value: StoreValue,\r\n validate: ValidateOption | undefined,\r\n onError?: (message: string) => void\r\n): { ok: true; value: StoreValue } | { ok: false } => {\r\n if (!validate) return { ok: true, value };\r\n const handlers = collectErrorHandlers(name, onError);\r\n const report = (message: string, severity: \"warn\" | \"critical\"): void => {\r\n handlers.forEach((handler) => handler(message));\r\n if (severity === \"critical\") critical(message);\r\n else warn(message);\r\n };\r\n\r\n if (typeof validate === \"function\") {\r\n try {\r\n const result = validate(value);\r\n if (result === false) {\r\n report(`Validation blocked update for \"${name}\"`, \"warn\");\r\n return { ok: false };\r\n }\r\n return { ok: true, value: result === true ? value : result as StoreValue };\r\n } catch (err) {\r\n report(`Validation for \"${name}\" failed: ${(err as { message?: string })?.message ?? err}`, \"critical\");\r\n return { ok: false };\r\n }\r\n }\r\n\r\n const schemaResult = runSchemaValidation(validate, value);\r\n if (!schemaResult.ok) {\r\n report(`Validation failed for \"${name}\": ${schemaResult.error}`, \"critical\");\r\n return { ok: false };\r\n }\r\n return { ok: true, value: (schemaResult.data ?? value) as StoreValue };\r\n};\r\n\r\nexport const normalizeCommittedState = (\r\n name: string,\r\n value: unknown,\r\n validate: ValidateOption | undefined,\r\n onError?: (message: string) => void,\r\n options?: { reuseInput?: boolean }\r\n): { ok: true; value: StoreValue } | { ok: false } => {\r\n const sanitized = sanitizeValue(name, value, onError, options);\r\n if (!sanitized.ok) return { ok: false };\r\n\r\n const validation = runValidation(name, sanitized.value, validate, onError);\r\n if (!validation.ok) return { ok: false };\r\n\r\n return { ok: true, value: validation.value };\r\n};\r\n\r\nexport const invalidatePathCache = (name: string): void => {\r\n const registry = getRegistry();\r\n getPathValidationCache(registry).delete(name);\r\n getPathValidationLru(registry).delete(name);\r\n};\r\n\r\nexport const clearPathValidationCache = (): void => {\r\n const registry = getRegistry();\r\n getPathValidationCache(registry).clear();\r\n getPathValidationLru(registry).clear();\r\n};\r\n\r\nregisterTestResetHook(\"validation.path-cache\", clearPathValidationCache, 50);\r\n\r\nsetPathCacheInvalidator(invalidatePathCache);\r\n\r\nexport const materializeInitial = (name: string): boolean => {\r\n const staged = isTransactionActive() ? getStagedTransactionValue(name) : { has: false, value: undefined };\r\n if (staged.has) return true;\r\n if (stores[name] !== undefined) return true;\r\n const factory = initialFactories[name];\r\n if (!factory) return true;\r\n try {\r\n const produced = factory();\r\n const cleanResult = sanitizeValue(name, produced, meta[name]?.options?.onError);\r\n if (!cleanResult.ok) return false;\r\n const validate = meta[name]?.options?.validate;\r\n const normalized = normalizeCommittedState(name, cleanResult.value, validate, meta[name]?.options?.onError);\r\n if (!normalized.ok) return false;\r\n if (isTransactionActive()) {\r\n const value = normalized.value;\r\n stageTransactionValue(name, value);\r\n registerTransactionCommit(() => {\r\n setStoreValueInternal(name, value);\r\n initialStates[name] = deepClone(value);\r\n delete initialFactories[name];\r\n invalidatePathCache(name);\r\n });\r\n } else {\r\n setStoreValueInternal(name, normalized.value);\r\n initialStates[name] = deepClone(normalized.value);\r\n delete initialFactories[name];\r\n invalidatePathCache(name);\r\n }\r\n return true;\r\n } catch (err) {\r\n reportStoreError(name, `Lazy initializer for \"${name}\" failed: ${(err as { message?: string })?.message ?? err}`);\r\n return false;\r\n }\r\n};\r\n\r\n\r\n","/**\r\n * @module store-read\r\n *\r\n * LAYER: Store runtime\r\n * OWNS: Module-level behavior and exports for store-read.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport {\r\n deepClone,\r\n getByPath,\r\n validateDepth,\r\n type PathInput,\r\n} from \"./utils.js\";\r\nimport {\r\n initialStates,\r\n meta,\r\n hasStoreEntryInternal,\r\n getStoreValueRef,\r\n} from \"./store-lifecycle/registry.js\";\r\nimport { materializeInitial } from \"./store-lifecycle/validation.js\";\r\nimport { nameOf, exists, getFeatureApi } from \"./store-lifecycle/identity.js\";\r\nimport type {\r\n Path,\r\n PathValue,\r\n StoreDefinition,\r\n StoreValue,\r\n StoreKey,\r\n StoreName,\r\n StateFor,\r\n} from \"./store-lifecycle/types.js\";\r\n\r\ntype StoreSnapshot<T> = T extends object ? Readonly<T> : T;\r\n\r\nexport function getStore<Name extends string, State, P extends Path<State>>(name: StoreDefinition<Name, State>, path: P): StoreSnapshot<PathValue<State, P>> | null;\r\nexport function getStore<Name extends string, State>(name: StoreDefinition<Name, State>, path?: undefined): StoreSnapshot<State> | null;\r\nexport function getStore<Name extends string, State, P extends Path<State>>(name: StoreKey<Name, State>, path: P): StoreSnapshot<PathValue<State, P>> | null;\r\nexport function getStore<Name extends string, State>(name: StoreKey<Name, State>, path?: undefined): StoreSnapshot<State> | null;\r\nexport function getStore<Name extends StoreName, P extends Path<StateFor<Name>>>(name: Name, path: P): StoreSnapshot<PathValue<StateFor<Name>, P>> | null;\r\nexport function getStore<Name extends StoreName>(name: Name, path?: undefined): StoreSnapshot<StateFor<Name>> | null;\r\nexport function getStore(name: string | StoreDefinition<string, StoreValue>, path?: PathInput): StoreValue | null {\r\n const storeName = nameOf(name);\r\n if (!exists(storeName)) return null;\r\n if (!materializeInitial(storeName)) return null;\r\n const data = getStoreValueRef(storeName);\r\n if (path === undefined) {\r\n if (data === null || typeof data !== \"object\") return data as StoreValue;\r\n return deepClone(data);\r\n }\r\n if (!validateDepth(path)) return null;\r\n const value = getByPath(data, path);\r\n if (value === null || typeof value !== \"object\") return value as StoreValue;\r\n return deepClone(value);\r\n}\r\n\r\nexport const hasStore = (name: string): boolean => hasStoreEntryInternal(name);\r\n\r\nexport { hasStoreEntryInternal as _hasStoreEntryInternal, getStoreValueRef as _getStoreValueRef, getFeatureApi as _getFeatureApi };\r\n\r\nexport const getInitialState = (): Record<string, StoreValue> => deepClone(initialStates) as Record<string, StoreValue>;\r\n\r\nexport const getMetrics = (name: string): (typeof meta)[string][\"metrics\"] | null => {\r\n const metaEntry = meta[name];\r\n if (!metaEntry?.metrics) return null;\r\n return { ...metaEntry.metrics };\r\n};\r\n\r\n\r\n","/**\r\n * @module store-name\r\n *\r\n * LAYER: Store runtime\r\n * OWNS: Module-level behavior and exports for store-name.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport type { StoreKey, StoreValue } from \"./store-lifecycle/types.js\";\r\nimport { createStore, createStoreStrict, setStore, deleteStore, resetStore } from \"./store-write.js\";\r\nimport { getStore } from \"./store-read.js\";\r\n\r\n/**\r\n * Helper to get an auto-completable, literal-typed store handle without creating it.\r\n *\r\n * Example:\r\n * const user = store(\"user\");\r\n * setStore(user, \"name\", \"Alex\");\r\n */\r\nexport const store = <Name extends string, State = StoreValue>(name: Name): StoreKey<Name, State> =>\r\n ({ name } as StoreKey<Name, State>);\r\n\r\nexport const namespace = (ns: string) => {\r\n const prefix = `${ns}::`;\r\n const qualify = (name: string) => (name.includes(\"::\") ? name : `${prefix}${name}`);\r\n const adaptName = (name: any) =>\r\n typeof name === \"string\" ? store(qualify(name)) : { ...(name as any), name: qualify((name as any).name) };\r\n return {\r\n store: <Name extends string, State = StoreValue>(name: Name): StoreKey<Name, State> =>\r\n ({ name: qualify(name) } as StoreKey<Name, State>),\r\n create: <Name extends string, State>(name: Name, data: State, options?: Parameters<typeof createStore>[2]) =>\r\n createStore(qualify(name), data, options),\r\n createStrict: <Name extends string, State>(name: Name, data: State, options?: Parameters<typeof createStore>[2]) =>\r\n createStoreStrict(qualify(name), data, options),\r\n set: (name: any, ...rest: any[]) => {\r\n const restParams = rest as [any?, ...any[]];\r\n return (setStore as any)(adaptName(name), ...restParams);\r\n },\r\n get: (name: any, ...rest: any[]) => {\r\n const restParams = rest as [any?, ...any[]];\r\n return (getStore as any)(adaptName(name), ...restParams);\r\n },\r\n delete: (name: string) => deleteStore(adaptName(name)),\r\n reset: (name: string) => resetStore(adaptName(name)),\r\n };\r\n};\r\n\r\n\r\n","/**\r\n * @module store-notify\r\n *\r\n * LAYER: Store runtime\r\n * OWNS: Module-level behavior and exports for store-notify.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport { deepClone, shallowClone, warn, warnAlways } from \"./utils.js\";\r\nimport { devDeepFreeze } from \"./devfreeze.js\";\r\nimport { getConfig } from \"./internals/config.js\";\r\nimport { beginTransaction, endTransaction, isTransactionActive } from \"./store-transaction.js\";\r\nimport { runWithRegistry, type StoreRegistry, type NotifyState } from \"./store-registry.js\";\r\nimport { registerTestResetHook } from \"./internals/test-reset.js\";\r\nimport {\r\n meta,\r\n subscribers,\r\n stores,\r\n snapshotCache,\r\n hasStoreEntryInternal,\r\n getStoreValueRef,\r\n getRegistry,\r\n} from \"./store-lifecycle/registry.js\";\r\nimport type { StoreValue, Subscriber } from \"./store-lifecycle/types.js\";\r\nimport { getComputedOrder } from \"./internals/computed-order.js\";\r\nimport type { SnapshotMode } from \"./adapters/options.js\";\r\n\r\nconst resolveSnapshotMode = (name: string): SnapshotMode => {\r\n const mode = meta[name]?.options?.snapshot ?? getConfig().defaultSnapshotMode;\r\n return mode === \"shallow\" || mode === \"ref\" ? mode : \"deep\";\r\n};\r\n\r\nconst cloneSnapshot = (value: StoreValue, mode: SnapshotMode): StoreValue => {\r\n if (mode === \"ref\") return value;\r\n if (mode === \"shallow\") return shallowClone(value);\r\n return deepClone(value);\r\n};\r\n\r\nconst maybeFreezeSnapshot = (snapshot: StoreValue | null, mode: SnapshotMode): void => {\r\n if (mode !== \"deep\" && mode !== \"ref\") return;\r\n if (snapshot && typeof snapshot === \"object\") devDeepFreeze(snapshot);\r\n};\r\n\r\nconst scheduleChunk = (fn: () => void, delayMs: number): void => {\r\n if (delayMs > 0 && typeof setTimeout === \"function\") {\r\n setTimeout(fn, delayMs);\r\n return;\r\n }\r\n if (typeof queueMicrotask === \"function\") {\r\n queueMicrotask(fn);\r\n return;\r\n }\r\n Promise.resolve().then(fn);\r\n};\r\n\r\nconst buildPendingOrder = (state: NotifyState): { names: string[]; sliceSize: number; chunkDelayMs: number; runInline: boolean; prioritySet: Set<string> | null } => {\r\n const { pendingNotifications, pendingBuffer, orderedNames } = state;\r\n pendingBuffer.length = 0;\r\n for (const name of pendingNotifications) pendingBuffer.push(name);\r\n pendingNotifications.clear();\r\n\r\n const cfg = getConfig().flush;\r\n const priority = cfg.priorityStores || [];\r\n const pendingSet = new Set(pendingBuffer);\r\n const prioritySet = priority.length ? new Set(priority) : null;\r\n\r\n orderedNames.length = 0;\r\n if (prioritySet) {\r\n for (const p of priority) {\r\n if (pendingSet.has(p)) orderedNames.push(p);\r\n }\r\n for (const name of pendingBuffer) {\r\n if (!prioritySet.has(name)) orderedNames.push(name);\r\n }\r\n } else {\r\n orderedNames.push(...pendingBuffer);\r\n }\r\n\r\n const computedOrder = getComputedOrder(orderedNames);\r\n const orderedSet = new Set(orderedNames);\r\n for (const computedName of computedOrder) {\r\n if (pendingSet.has(computedName) && !orderedSet.has(computedName)) {\r\n orderedNames.push(computedName);\r\n orderedSet.add(computedName);\r\n }\r\n }\r\n\r\n const sliceSize = Number.isFinite(cfg.chunkSize) && (cfg.chunkSize as number) > 0\r\n ? (cfg.chunkSize as number)\r\n : Number.POSITIVE_INFINITY;\r\n const chunkDelayMs = cfg.chunkDelayMs;\r\n const runInline = sliceSize === Number.POSITIVE_INFINITY && chunkDelayMs === 0;\r\n const names = orderedNames.slice();\r\n return { names, sliceSize, chunkDelayMs, runInline, prioritySet };\r\n};\r\n\r\nconst flush = (registry: StoreRegistry): void => {\r\n const state = registry.notify;\r\n const { names, sliceSize, chunkDelayMs, runInline, prioritySet } = buildPendingOrder(state);\r\n const now = () => (typeof performance !== \"undefined\" && performance.now) ? performance.now() : Date.now();\r\n\r\n const finish = () => {\r\n state.notifyScheduled = false;\r\n if (state.pendingNotifications.size > 0) scheduleFlush(registry);\r\n };\r\n\r\n if (runInline) {\r\n for (const name of names) {\r\n const subs = subscribers[name];\r\n if (!subs || subs.size === 0) continue;\r\n const version = meta[name]?.updateCount ?? 0;\r\n const snapshotMode = resolveSnapshotMode(name);\r\n const cached = snapshotCache[name];\r\n const snapshot = (cached && cached.version === version)\r\n ? cached.snapshot\r\n : (() => {\r\n const nextSnapshot = cloneSnapshot(stores[name], snapshotMode);\r\n snapshotCache[name] = { version, snapshot: nextSnapshot };\r\n return nextSnapshot;\r\n })();\r\n\r\n const start = now();\r\n for (const subscriber of subs) {\r\n try { subscriber(snapshot); }\r\n catch (err) { warn(`Subscriber for \"${name}\" threw: ${(err as { message?: string })?.message ?? err}`); }\r\n }\r\n const elapsed = now() - start;\r\n\r\n const metrics = meta[name]?.metrics || { notifyCount: 0, totalNotifyMs: 0, lastNotifyMs: 0 };\r\n metrics.notifyCount += 1;\r\n metrics.totalNotifyMs += elapsed;\r\n metrics.lastNotifyMs = elapsed;\r\n if (meta[name]) meta[name].metrics = metrics;\r\n\r\n const currentVersion = meta[name]?.updateCount ?? version;\r\n if (currentVersion !== version) {\r\n state.pendingNotifications.add(name);\r\n }\r\n }\r\n finish();\r\n return;\r\n }\r\n\r\n type StoreTask = {\r\n name: string;\r\n subsArray: Subscriber[];\r\n index: number;\r\n snapshot: StoreValue | null;\r\n version: number;\r\n notified: Set<Subscriber>;\r\n metrics: { notifyCount: number; totalNotifyMs: number; lastNotifyMs: number };\r\n totalMs: number;\r\n };\r\n\r\n const buildQueue = (filter?: (name: string) => boolean): StoreTask[] => {\r\n const tasks: StoreTask[] = [];\r\n for (const name of names) {\r\n if (filter && !filter(name)) continue;\r\n const subs = subscribers[name];\r\n if (!subs || subs.size === 0) continue;\r\n const version = meta[name]?.updateCount ?? 0;\r\n const snapshotMode = resolveSnapshotMode(name);\r\n const cached = snapshotCache[name];\r\n const snapshot = (cached && cached.version === version)\r\n ? cached.snapshot\r\n : (() => {\r\n const nextSnapshot = cloneSnapshot(stores[name], snapshotMode);\r\n snapshotCache[name] = { version, snapshot: nextSnapshot };\r\n return nextSnapshot;\r\n })();\r\n tasks.push({\r\n name,\r\n subsArray: Array.from(subs),\r\n index: 0,\r\n snapshot,\r\n version,\r\n notified: new Set(),\r\n metrics: meta[name]?.metrics ? { ...meta[name]!.metrics } : { notifyCount: 0, totalNotifyMs: 0, lastNotifyMs: 0 },\r\n totalMs: 0,\r\n });\r\n }\r\n return tasks;\r\n };\r\n\r\n const priorityQueue = prioritySet ? buildQueue((name) => prioritySet.has(name)) : [];\r\n const regularQueue = buildQueue((name) => !prioritySet || !prioritySet.has(name));\r\n\r\n const refreshTaskSubscribers = (task: StoreTask): void => {\r\n const subs = subscribers[task.name];\r\n if (!subs || subs.size === 0) {\r\n task.subsArray = [];\r\n task.index = 0;\r\n return;\r\n }\r\n task.subsArray = Array.from(subs);\r\n task.index = 0;\r\n };\r\n\r\n const runQueue = (queue: StoreTask[], done: () => void): void => {\r\n const processNext = (): void => {\r\n if (queue.length === 0) {\r\n done();\r\n return;\r\n }\r\n const task = queue.shift()!;\r\n const currentVersion = meta[task.name]?.updateCount ?? task.version;\r\n if (currentVersion !== task.version) {\r\n state.pendingNotifications.add(task.name);\r\n if (queue.length === 0) {\r\n done();\r\n return;\r\n }\r\n if (runInline) processNext();\r\n else scheduleChunk(processNext, chunkDelayMs);\r\n return;\r\n }\r\n\r\n refreshTaskSubscribers(task);\r\n if (task.subsArray.length === 0) {\r\n if (queue.length === 0) {\r\n done();\r\n return;\r\n }\r\n if (runInline) processNext();\r\n else scheduleChunk(processNext, chunkDelayMs);\r\n return;\r\n }\r\n\r\n const start = now();\r\n let sent = 0;\r\n let versionChanged = false;\r\n while (task.index < task.subsArray.length && sent < sliceSize) {\r\n const subscriber = task.subsArray[task.index++];\r\n if (task.notified.has(subscriber)) continue;\r\n task.notified.add(subscriber);\r\n try { subscriber(task.snapshot); }\r\n catch (err) { warn(`Subscriber for \"${task.name}\" threw: ${(err as { message?: string })?.message ?? err}`); }\r\n sent += 1;\r\n const currentVersion = meta[task.name]?.updateCount ?? task.version;\r\n if (currentVersion !== task.version) {\r\n versionChanged = true;\r\n state.pendingNotifications.add(task.name);\r\n break;\r\n }\r\n }\r\n task.totalMs += now() - start;\r\n\r\n if (versionChanged) {\r\n if (queue.length === 0) {\r\n done();\r\n return;\r\n }\r\n if (runInline) processNext();\r\n else scheduleChunk(processNext, chunkDelayMs);\r\n return;\r\n }\r\n\r\n const currentSubs = subscribers[task.name];\r\n const hasUnnotified = currentSubs\r\n ? Array.from(currentSubs).some((sub) => !task.notified.has(sub))\r\n : false;\r\n\r\n if (task.index < task.subsArray.length || hasUnnotified) {\r\n queue.push(task);\r\n } else {\r\n task.metrics.notifyCount += 1;\r\n task.metrics.totalNotifyMs += task.totalMs;\r\n task.metrics.lastNotifyMs = task.totalMs;\r\n if (meta[task.name]) meta[task.name].metrics = task.metrics;\r\n }\r\n\r\n if (queue.length === 0) {\r\n done();\r\n return;\r\n }\r\n if (runInline) processNext();\r\n else scheduleChunk(processNext, chunkDelayMs);\r\n };\r\n\r\n processNext();\r\n };\r\n\r\n if (priorityQueue.length > 0) {\r\n runQueue(priorityQueue, () => runQueue(regularQueue, finish));\r\n } else {\r\n runQueue(regularQueue, finish);\r\n }\r\n};\r\n\r\nconst scheduleFlush = (registry: StoreRegistry): void => {\r\n const state = registry.notify;\r\n if (state.notifyScheduled) return;\r\n state.notifyScheduled = true;\r\n const run = () => runWithRegistry(registry, () => flush(registry));\r\n if (typeof queueMicrotask === \"function\") queueMicrotask(run);\r\n else Promise.resolve().then(run);\r\n};\r\n\r\nexport const notify = (name: string): void => {\r\n const registry = getRegistry();\r\n const state = registry.notify;\r\n state.pendingNotifications.add(name);\r\n if (state.batchDepth === 0) scheduleFlush(registry);\r\n};\r\n\r\nexport const setStoreBatch = (fn: () => unknown): void => {\r\n if (typeof fn !== \"function\") {\r\n warn(\"setStoreBatch requires a synchronous function callback.\");\r\n return;\r\n }\r\n if (Object.prototype.toString.call(fn) === \"[object AsyncFunction]\") {\r\n warnAlways(\"setStoreBatch does not support async functions. Move async work outside and batch only synchronous mutations.\");\r\n return;\r\n }\r\n\r\n const registry = getRegistry();\r\n const state = registry.notify;\r\n state.batchDepth = Math.max(0, state.batchDepth + 1);\r\n beginTransaction(registry);\r\n let batchError: unknown;\r\n try {\r\n const result = runWithRegistry(registry, fn);\r\n if (result && typeof (result as Promise<unknown>).then === \"function\") {\r\n batchError = new Error(\"setStoreBatch does not support promise-returning callbacks. Move async work outside and batch only synchronous mutations.\");\r\n }\r\n } catch (err) {\r\n batchError = err;\r\n } finally {\r\n const txError = endTransaction(batchError, registry);\r\n state.batchDepth = Math.max(0, state.batchDepth - 1);\r\n if (batchError || txError) {\r\n state.pendingNotifications.clear();\r\n state.notifyScheduled = false;\r\n }\r\n if (state.batchDepth === 0 && state.pendingNotifications.size > 0) {\r\n scheduleFlush(registry);\r\n }\r\n if (txError && !batchError) {\r\n batchError = txError;\r\n }\r\n }\r\n\r\n if (batchError) {\r\n const message = batchError instanceof Error ? batchError.message : String(batchError);\r\n warnAlways(`setStoreBatch failed: ${message}`);\r\n }\r\n};\r\n\r\nexport const subscribeStore = (name: string, fn: Subscriber): (() => void) => {\r\n if (!subscribers[name]) subscribers[name] = new Set();\r\n subscribers[name].add(fn);\r\n return () => {\r\n subscribers[name]?.delete(fn); // O(1)\r\n if (subscribers[name]?.size === 0) delete subscribers[name];\r\n };\r\n};\r\n\r\n// Backward compat aliases\r\n/** @deprecated Use subscribeStore instead. */\r\nexport const subscribeInternal = subscribeStore;\r\n/** @deprecated Use subscribeStore instead. */\r\nexport const subscribe = subscribeStore;\r\n\r\nexport const getStoreSnapshot = (name: string): StoreValue | null => {\r\n if (!hasStoreEntryInternal(name)) return null;\r\n const snapshotMode = resolveSnapshotMode(name);\r\n if (isTransactionActive()) {\r\n const registry = getRegistry();\r\n const txCache = registry.transaction.snapshotCache;\r\n const source = getStoreValueRef(name);\r\n if (source === undefined) return null;\r\n const cached = txCache.get(name);\r\n if (cached && cached.source === source && cached.mode === snapshotMode) {\r\n const snap = cached.snapshot;\r\n maybeFreezeSnapshot(snap, snapshotMode);\r\n return snap;\r\n }\r\n const snapshot = cloneSnapshot(source, snapshotMode);\r\n txCache.set(name, { source, snapshot, mode: snapshotMode });\r\n maybeFreezeSnapshot(snapshot, snapshotMode);\r\n return snapshot;\r\n }\r\n\r\n const version = meta[name]?.updateCount ?? 0;\r\n const cached = snapshotCache[name];\r\n if (cached && cached.version === version) {\r\n const snap = cached.snapshot;\r\n maybeFreezeSnapshot(snap, snapshotMode);\r\n return snap;\r\n }\r\n\r\n const source = getStoreValueRef(name);\r\n const snapshot = cloneSnapshot(source, snapshotMode);\r\n maybeFreezeSnapshot(snapshot, snapshotMode);\r\n snapshotCache[name] = { version, snapshot };\r\n return snapshot;\r\n};\r\n// Backward compat alias\r\n/** @deprecated Use getStoreSnapshot instead. */\r\nexport const getSnapshot = getStoreSnapshot;\r\n\r\nexport const resetNotifyStateForTests = (): void => {\r\n const state = getRegistry().notify;\r\n state.pendingNotifications.clear();\r\n state.pendingBuffer.length = 0;\r\n state.orderedNames.length = 0;\r\n state.notifyScheduled = false;\r\n state.batchDepth = 0;\r\n};\r\n\r\nregisterTestResetHook(\"notify.reset\", resetNotifyStateForTests, 40);\r\n\r\n\r\n","/**\r\n * @module computed\r\n *\r\n * LAYER: Module\r\n * OWNS: Module-level behavior and exports for computed.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport { store } from \"./store-name.js\";\r\nimport { createStore, replaceStore, getStore, hasStore, subscribeStore } from \"./internals/store-ops.js\";\r\nimport {\r\n registerComputed,\r\n unregisterComputed,\r\n markStale,\r\n getComputedEntry,\r\n isComputed,\r\n} from \"./computed-graph.js\";\r\nimport { warn, isDev, log } from \"./utils.js\";\r\nimport { getRegistry } from \"./store-lifecycle/registry.js\";\r\nimport type { StoreDefinition, StoreKey, StoreName, StateFor, StoreValue } from \"./store-lifecycle/types.js\";\r\n\r\nexport type ComputedOptions = {\r\n autoDispose?: boolean;\r\n onError?: (err: unknown) => void;\r\n};\r\n\r\nconst getComputedCleanups = (): Map<string, () => void> => getRegistry().computedCleanups;\r\n\r\ntype DepHandle = StoreDefinition<string, StoreValue> | StoreKey<string, StoreValue>;\r\ntype DepValue<T> = T extends StoreDefinition<string, infer S>\r\n ? Readonly<S> | null\r\n : T extends StoreKey<string, infer S>\r\n ? Readonly<S> | null\r\n : T extends StoreName\r\n ? Readonly<StateFor<T>> | null\r\n : StoreValue | null;\r\n\r\nexport function createComputed<TResult, Deps extends readonly (StoreName | DepHandle)[]>(\r\n name: string,\r\n deps: Deps,\r\n compute: (...args: { [K in keyof Deps]: DepValue<Deps[K]> }) => TResult,\r\n options: ComputedOptions = {}\r\n): StoreDefinition<string, TResult> | undefined {\r\n if (!name || typeof name !== \"string\") {\r\n warn(\"createComputed requires a store name as first argument\");\r\n return undefined;\r\n }\r\n\r\n if (!Array.isArray(deps) || deps.length === 0) {\r\n warn(`createComputed(\"${name}\") requires at least one dependency`);\r\n return undefined;\r\n }\r\n\r\n if (typeof compute !== \"function\") {\r\n warn(`createComputed(\"${name}\") requires a compute function as third argument`);\r\n return undefined;\r\n }\r\n\r\n const cleanups = getComputedCleanups();\r\n const existingCleanup = cleanups.get(name);\r\n if (existingCleanup) {\r\n existingCleanup();\r\n cleanups.delete(name);\r\n }\r\n\r\n const depNames = deps.map((dep) => (typeof dep === \"string\" ? dep : dep?.name));\r\n if (depNames.some((dep) => !dep || typeof dep !== \"string\")) {\r\n warn(`createComputed(\"${name}\") dependencies must be store names or store handles.`);\r\n return undefined;\r\n }\r\n if (isDev()) {\r\n const missing = depNames.filter((dep) => !hasStore(dep as string));\r\n if (missing.length > 0) {\r\n warn(\r\n `createComputed(\"${name}\") dependencies not found at registration: ${missing.join(\", \")}. ` +\r\n `Computed values will receive null until those stores are created.`\r\n );\r\n }\r\n }\r\n\r\n const registered = registerComputed(name, depNames as string[], compute as (...args: unknown[]) => unknown);\r\n if (!registered) return undefined;\r\n\r\n const initial = _runCompute(name, deps, compute as (...args: unknown[]) => unknown, options.onError);\r\n\r\n const handle = store<string, TResult>(name);\r\n if (!hasStore(name)) {\r\n createStore(name, initial as TResult);\r\n } else {\r\n replaceStore(handle, initial as TResult);\r\n }\r\n\r\n const unsubscribers: Array<() => void> = [];\r\n for (const dep of depNames) {\r\n const unsub = subscribeStore(dep as string, () => {\r\n _recomputeAndFlush(name, depNames as string[], compute as (...args: unknown[]) => unknown, options.onError);\r\n });\r\n unsubscribers.push(unsub);\r\n }\r\n\r\n getComputedCleanups().set(name, () => {\r\n unsubscribers.forEach((fn) => fn());\r\n unregisterComputed(name);\r\n });\r\n\r\n if (isDev()) {\r\n log(`computed store \"${name}\" created, deps: [${depNames.join(\", \")}]`);\r\n }\r\n\r\n return handle as StoreDefinition<string, TResult>;\r\n}\r\n\r\nconst _runCompute = (\r\n name: string,\r\n deps: Array<string | DepHandle>,\r\n compute: (...args: unknown[]) => unknown,\r\n onError?: (err: unknown) => void\r\n): unknown => {\r\n const args = deps.map((dep) => {\r\n if (typeof dep === \"string\") return getStore(store(dep));\r\n return getStore(dep as StoreDefinition<string, StoreValue>);\r\n });\r\n\r\n try {\r\n return compute(...args);\r\n } catch (err) {\r\n warn(`createComputed(\"${name}\") compute function threw: ${(err as { message?: string })?.message ?? err}`);\r\n onError?.(err);\r\n const handle = store(name);\r\n return hasStore(name) ? getStore(handle) : null;\r\n }\r\n};\r\n\r\nconst _recomputeAndFlush = (\r\n name: string,\r\n deps: string[],\r\n compute: (...args: unknown[]) => unknown,\r\n onError?: (err: unknown) => void\r\n): void => {\r\n const entry = getComputedEntry(name);\r\n if (!entry) return;\r\n\r\n const next = _runCompute(name, deps, compute, onError);\r\n const handle = store(name);\r\n const current = getStore(handle);\r\n if (Object.is(next, current)) return;\r\n\r\n replaceStore(handle, next);\r\n markStale(name);\r\n};\r\n\r\nexport const invalidateComputed = (name: string): void => {\r\n const entry = getComputedEntry(name);\r\n if (!entry) {\r\n warn(`invalidateComputed(\"${name}\") -- \"${name}\" is not a computed store`);\r\n return;\r\n }\r\n markStale(name);\r\n _recomputeAndFlush(name, entry.deps, entry.compute);\r\n};\r\n\r\nexport const deleteComputed = (name: string): void => {\r\n const cleanups = getComputedCleanups();\r\n const cleanup = cleanups.get(name);\r\n if (!cleanup) {\r\n if (isDev()) warn(`deleteComputed(\"${name}\") -- not found`);\r\n return;\r\n }\r\n cleanup();\r\n cleanups.delete(name);\r\n};\r\n\r\nexport const isComputedStore = (name: string): boolean => isComputed(name);\r\n\r\nexport const _resetComputedForTests = (): void => {\r\n const cleanups = getComputedCleanups();\r\n cleanups.forEach((fn) => fn());\r\n cleanups.clear();\r\n};\r\n\r\n\r\n","/**\r\n * @module internals/store-admin\r\n *\r\n * LAYER: Internal subsystem\r\n * OWNS: Module-level behavior and exports for internals/store-admin.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport { runStoreHook } from \"../features/lifecycle.js\";\r\nimport { getRegisteredFeatureNames, type FeatureDeleteContext, type StoreFeatureMeta } from \"../feature-registry.js\";\r\nimport { hasStoreEntry, type StoreRegistry } from \"../store-registry.js\";\r\nimport { deepClone, hashState, sanitize } from \"../utils.js\";\r\nimport { isDev, log, warn } from \"./diagnostics.js\";\r\nimport { reportIssue } from \"./reporting.js\";\r\nimport { isComputed } from \"../computed-graph.js\";\r\nimport { deleteComputed } from \"../computed.js\";\r\n\r\ntype MetaEntry = StoreFeatureMeta;\r\n\r\nexport const createStoreAdmin = (registry: StoreRegistry) => {\r\n const stores = registry.stores as Record<string, unknown>;\r\n const subscribers = registry.subscribers as Record<string, Set<(value: unknown | null) => void>>;\r\n const initialStates = registry.initialStates as Record<string, unknown>;\r\n const initialFactories = registry.initialFactories as Record<string, (() => unknown) | undefined>;\r\n const metaEntries = registry.metaEntries as Record<string, MetaEntry>;\r\n const snapshotCache = registry.snapshotCache as Record<string, { version: number; snapshot: unknown | null }>;\r\n const featureRuntimes = registry.featureRuntimes;\r\n const deletingStores = registry.deletingStores;\r\n\r\n const reportStoreError = (name: string, message: string): void => {\r\n reportIssue(message, {\r\n onError: metaEntries[name]?.options?.onError,\r\n severity: \"warn\",\r\n visibility: \"dev\",\r\n });\r\n };\r\n\r\n const createDeleteContext = ({\r\n name,\r\n prev,\r\n options,\r\n initialState,\r\n getMeta,\r\n getStoreValue,\r\n hasStore,\r\n }: {\r\n name: string;\r\n prev: unknown;\r\n options: MetaEntry[\"options\"];\r\n initialState: unknown;\r\n getMeta: () => MetaEntry | undefined;\r\n getStoreValue: () => unknown;\r\n hasStore: () => boolean;\r\n }): FeatureDeleteContext => ({\r\n name,\r\n options,\r\n prev,\r\n getMeta,\r\n getStoreValue,\r\n getAllStores: () => stores,\r\n getInitialState: () => initialState,\r\n hasStore,\r\n setStoreValue: () => undefined,\r\n applyFeatureState: () => undefined,\r\n notify: () => undefined,\r\n reportStoreError: (message: string) => {\r\n reportIssue(message, {\r\n onError: options.onError,\r\n severity: \"warn\",\r\n visibility: \"dev\",\r\n });\r\n },\r\n warn,\r\n log,\r\n hashState,\r\n deepClone,\r\n sanitize,\r\n validate: () => ({ ok: true, value: prev }),\r\n isDev,\r\n });\r\n\r\n const runFeatureDeleteHooks = ({\r\n name,\r\n prev,\r\n options,\r\n initialState,\r\n phase,\r\n }: {\r\n name: string;\r\n prev: unknown;\r\n options: MetaEntry[\"options\"];\r\n initialState: unknown;\r\n phase: \"before\" | \"after\";\r\n }): void => {\r\n const beforeDeleteContext = createDeleteContext({\r\n name,\r\n prev,\r\n options,\r\n initialState,\r\n getMeta: () => metaEntries[name],\r\n getStoreValue: () => stores[name],\r\n hasStore: () => hasStoreEntry(registry, name),\r\n });\r\n\r\n const afterDeleteContext = createDeleteContext({\r\n name,\r\n prev,\r\n options,\r\n initialState,\r\n getMeta: () => undefined,\r\n getStoreValue: () => prev,\r\n hasStore: () => false,\r\n });\r\n\r\n getRegisteredFeatureNames().forEach((featureName) => {\r\n const runtime = featureRuntimes.get(featureName);\r\n if (phase === \"before\") runtime?.beforeStoreDelete?.(beforeDeleteContext);\r\n else runtime?.afterStoreDelete?.(afterDeleteContext);\r\n });\r\n };\r\n\r\n const deleteExistingStore = (name: string): void => {\r\n if (!hasStoreEntry(registry, name)) return;\r\n\r\n const prev = stores[name];\r\n const options = metaEntries[name].options;\r\n const initialState = initialStates[name];\r\n const subs = subscribers[name];\r\n deletingStores.add(name);\r\n\r\n try {\r\n subs?.forEach((fn) => {\r\n try {\r\n fn(null);\r\n } catch (err) {\r\n warn(`Subscriber for \"${name}\" threw during delete: ${(err as { message?: string })?.message ?? err}`);\r\n }\r\n });\r\n\r\n runStoreHook({\r\n name,\r\n label: \"onDelete\",\r\n fn: options.onDelete,\r\n args: [prev],\r\n reportIssue: (message, visibility) => {\r\n reportIssue(message, {\r\n onError: options.onError,\r\n severity: \"warn\",\r\n visibility,\r\n });\r\n },\r\n });\r\n\r\n runFeatureDeleteHooks({\r\n name,\r\n prev,\r\n options,\r\n initialState,\r\n phase: \"before\",\r\n });\r\n\r\n delete stores[name];\r\n delete subscribers[name];\r\n delete initialStates[name];\r\n delete initialFactories[name];\r\n delete metaEntries[name];\r\n delete snapshotCache[name];\r\n\r\n if (isComputed(name)) {\r\n deleteComputed(name);\r\n }\r\n\r\n const dependents = registry.computedDependents;\r\n const affected = dependents[name];\r\n if (affected) {\r\n for (const computedName of affected) {\r\n warn(\r\n `[stroid] source store \"${name}\" was deleted. ` +\r\n `Computed store \"${computedName}\" depends on it and will return stale data. ` +\r\n `Call deleteComputed(\"${computedName}\") to clean up.`\r\n );\r\n }\r\n }\r\n\r\n runFeatureDeleteHooks({\r\n name,\r\n prev,\r\n options,\r\n initialState,\r\n phase: \"after\",\r\n });\r\n log(`Store \"${name}\" deleted`);\r\n } finally {\r\n deletingStores.delete(name);\r\n }\r\n };\r\n\r\n const clearAllStores = (): string[] => {\r\n const removed: string[] = [];\r\n const maxPasses = 20;\r\n let pass = 0;\r\n let previousRemaining = Number.POSITIVE_INFINITY;\r\n while (pass < maxPasses) {\r\n const names = Object.keys(stores);\r\n if (names.length === 0) break;\r\n names.forEach((name) => {\r\n if (hasStoreEntry(registry, name)) {\r\n deleteExistingStore(name);\r\n removed.push(name);\r\n }\r\n });\r\n pass += 1;\r\n const remaining = Object.keys(stores).length;\r\n if (remaining === 0) break;\r\n if (remaining >= previousRemaining) break;\r\n previousRemaining = remaining;\r\n }\r\n const remaining = Object.keys(stores).length;\r\n if (remaining > 0) {\r\n warn(\r\n `clearAllStores stopped after ${pass} pass${pass === 1 ? \"\" : \"es\"}; ` +\r\n `${remaining} store(s) still registered (likely recreated during deletion).`\r\n );\r\n } else {\r\n warn(`All stores cleared (${removed.length} stores removed)`);\r\n }\r\n return removed;\r\n };\r\n\r\n const clearStores = (pattern?: string): string[] => {\r\n const names = Object.keys(stores).filter((n) => {\r\n if (!pattern) return true;\r\n if (pattern.endsWith(\"*\")) return n.startsWith(pattern.slice(0, -1));\r\n return n === pattern;\r\n });\r\n names.forEach((name) => deleteExistingStore(name));\r\n return names;\r\n };\r\n\r\n return {\r\n deleteExistingStore,\r\n clearAllStores,\r\n clearStores,\r\n reportStoreError,\r\n };\r\n};\r\n\r\n\r\n","/**\r\n * @module store-lifecycle/registry\r\n *\r\n * LAYER: Store lifecycle\r\n * OWNS: Module-level behavior and exports for store-lifecycle/registry.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport { devDeepFreeze } from \"../devfreeze.js\";\r\nimport { isDev } from \"../utils.js\";\r\nimport {\r\n getStoreRegistry,\r\n hasStoreEntry as _hasStoreEntry,\r\n isStoreDeleting,\r\n clearStoreRegistries,\r\n normalizeStoreRegistryScope,\r\n defaultRegistryScope,\r\n getRequestCarrier,\r\n getActiveStoreRegistry,\r\n enterRegistry,\r\n type StoreRegistry,\r\n} from \"../store-registry.js\";\r\nimport { registerTestResetHook } from \"../internals/test-reset.js\";\r\nimport {\r\n getStoreFeatureFactory,\r\n getRegisteredFeatureNames,\r\n setFeatureRegistrationHook,\r\n type FeatureName,\r\n type StoreFeatureRuntime,\r\n type StoreFeatureMeta,\r\n} from \"../feature-registry.js\";\r\nimport { createStoreAdmin } from \"../internals/store-admin.js\";\r\nimport type { StoreValue, Subscriber } from \"./types.js\";\r\nimport { getStagedTransactionValue, isTransactionActive } from \"../store-transaction.js\";\r\n\r\nexport { defaultRegistryScope } from \"../store-registry.js\";\r\n\r\nlet _scope = defaultRegistryScope;\r\nlet _defaultRegistry = getStoreRegistry(_scope);\r\nvar _invalidatePathCache: ((name: string) => void) | null = null;\r\nconst initializedRegistries = new WeakSet<StoreRegistry>();\r\nconst initializeRegistryFeatureRuntimes = (registry: StoreRegistry): void => {\r\n if (initializedRegistries.has(registry)) return;\r\n initializedRegistries.add(registry);\r\n getRegisteredFeatureNames().forEach((name) => {\r\n if (!registry.featureRuntimes.get(name)) {\r\n const factory = getStoreFeatureFactory(name);\r\n if (factory) registry.featureRuntimes.set(name, factory());\r\n }\r\n });\r\n};\r\n\r\nconst getActiveRegistry = (): StoreRegistry => {\r\n const registry = getActiveStoreRegistry(_defaultRegistry);\r\n initializeRegistryFeatureRuntimes(registry);\r\n return registry;\r\n};\r\n\r\nexport const setRegistryContext = (scope: string, registry: StoreRegistry): void => {\r\n _scope = scope;\r\n _defaultRegistry = registry;\r\n enterRegistry(registry);\r\n};\r\n\r\nexport const getRegistry = (): StoreRegistry => getActiveRegistry();\r\n\r\nexport function setPathCacheInvalidator(fn: (name: string) => void): void {\r\n _invalidatePathCache = fn;\r\n}\r\n\r\nconst createRegistryObjectProxy = <T extends object>(getter: () => T): T =>\r\n new Proxy(Object.create(null), {\r\n get: (_target, prop) => (getter() as any)[prop],\r\n set: (_target, prop, value) => {\r\n (getter() as any)[prop] = value;\r\n return true;\r\n },\r\n deleteProperty: (_target, prop) => {\r\n delete (getter() as any)[prop];\r\n return true;\r\n },\r\n has: (_target, prop) => prop in (getter() as any),\r\n ownKeys: () => Reflect.ownKeys(getter()),\r\n getOwnPropertyDescriptor: (_target, prop) => {\r\n const desc = Object.getOwnPropertyDescriptor(getter(), prop);\r\n if (!desc) return undefined;\r\n return { ...desc, configurable: true };\r\n },\r\n }) as T;\r\n\r\nconst createRegistryMapProxy = <T extends Map<any, any>>(getter: () => T): T =>\r\n new Proxy(new Map(), {\r\n get: (_target, prop) => {\r\n const target = getter() as any;\r\n if (prop === \"size\") return target.size;\r\n if (prop === Symbol.iterator) return target[Symbol.iterator].bind(target);\r\n const value = target[prop];\r\n return typeof value === \"function\" ? value.bind(target) : value;\r\n },\r\n set: (_target, prop, value) => {\r\n (getter() as any)[prop] = value;\r\n return true;\r\n },\r\n }) as T;\r\n\r\nconst createRegistryValueProxy = <T extends object>(getter: () => T): T =>\r\n new Proxy({} as T, {\r\n get: (_target, prop) => {\r\n const target = getter() as any;\r\n const value = target[prop];\r\n return typeof value === \"function\" ? value.bind(target) : value;\r\n },\r\n set: (_target, prop, value) => {\r\n (getter() as any)[prop] = value;\r\n return true;\r\n },\r\n });\r\n\r\nexport const stores = createRegistryObjectProxy(() => getActiveRegistry().stores as Record<string, StoreValue>);\r\nexport const subscribers = createRegistryObjectProxy(() => getActiveRegistry().subscribers as Record<string, Set<Subscriber>>);\r\nexport const initialStates = createRegistryObjectProxy(() => getActiveRegistry().initialStates as Record<string, StoreValue>);\r\nexport const initialFactories = createRegistryObjectProxy(() => getActiveRegistry().initialFactories as Record<string, (() => StoreValue) | undefined>);\r\nexport const meta = createRegistryObjectProxy(() => getActiveRegistry().metaEntries as Record<string, StoreFeatureMeta>);\r\nexport const snapshotCache = createRegistryObjectProxy(() => getActiveRegistry().snapshotCache as Record<string, { version: number; snapshot: StoreValue | null }>);\r\nexport const featureRuntimes = createRegistryMapProxy(() => getActiveRegistry().featureRuntimes as Map<FeatureName, StoreFeatureRuntime>);\r\n\r\nconst storeAdminByRegistry = new WeakMap<StoreRegistry, ReturnType<typeof createStoreAdmin>>();\r\nconst getStoreAdminForRegistry = (registry: StoreRegistry): ReturnType<typeof createStoreAdmin> => {\r\n let admin = storeAdminByRegistry.get(registry);\r\n if (!admin) {\r\n admin = createStoreAdmin(registry);\r\n storeAdminByRegistry.set(registry, admin);\r\n }\r\n return admin;\r\n};\r\nexport const storeAdmin = createRegistryValueProxy(() => getStoreAdminForRegistry(getActiveRegistry()));\r\nexport const getStoreAdmin = (): ReturnType<typeof createStoreAdmin> =>\r\n getStoreAdminForRegistry(getActiveRegistry());\r\n\r\nexport const getFeatureRuntime = (name: FeatureName): StoreFeatureRuntime | undefined => {\r\n const existing = featureRuntimes.get(name);\r\n if (existing) return existing;\r\n const factory = getStoreFeatureFactory(name);\r\n if (!factory) return undefined;\r\n const runtime = factory();\r\n featureRuntimes.set(name, runtime);\r\n return runtime;\r\n};\r\n\r\nexport const initializeRegisteredFeatureRuntimes = (): void => {\r\n getRegisteredFeatureNames().forEach((name) => {\r\n getFeatureRuntime(name);\r\n });\r\n};\r\n\r\nsetFeatureRegistrationHook((name, factory) => {\r\n if (!featureRuntimes.get(name)) {\r\n featureRuntimes.set(name, factory());\r\n }\r\n});\r\ninitializeRegisteredFeatureRuntimes();\r\n\r\nexport const hasStoreEntryInternal = (name: string): boolean => _hasStoreEntry(getActiveRegistry(), name);\r\n\r\nexport const getStoreValueRef = (name: string): StoreValue | undefined => {\r\n if (isTransactionActive()) {\r\n const staged = getStagedTransactionValue(name);\r\n if (staged.has) return staged.value;\r\n }\r\n const carrier = getRequestCarrier();\r\n if (carrier && Object.prototype.hasOwnProperty.call(carrier, name)) {\r\n return carrier[name] as StoreValue;\r\n }\r\n return stores[name];\r\n};\r\n\r\nexport const setStoreValueInternal = (name: string, value: StoreValue): void => {\r\n const carrier = getRequestCarrier();\r\n const frozen = isDev() ? devDeepFreeze(value) : value;\r\n if (carrier) {\r\n carrier[name] = frozen;\r\n if (!Object.prototype.hasOwnProperty.call(stores, name)) {\r\n stores[name] = undefined;\r\n }\r\n } else {\r\n stores[name] = frozen;\r\n }\r\n};\r\n\r\nexport const applyFeatureState = (name: string, value: StoreValue, updatedAtMs = Date.now()): void => {\r\n setStoreValueInternal(name, value);\r\n if (!meta[name]) return;\r\n meta[name].updatedAt = new Date(updatedAtMs).toISOString();\r\n meta[name].updatedAtMs = updatedAtMs;\r\n meta[name].updateCount++;\r\n _invalidatePathCache?.(name);\r\n};\r\n\r\nexport const clearAllRegistries = (): void => {\r\n clearStoreRegistries(getActiveRegistry());\r\n};\r\n\r\nexport const resetFeaturesForTests = (): void => {\r\n featureRuntimes.forEach((runtime) => {\r\n try { runtime.resetAll?.(); } catch (_) { /* ignore cleanup errors */ }\r\n });\r\n featureRuntimes.clear();\r\n};\r\n\r\nregisterTestResetHook(\"features.reset\", resetFeaturesForTests, 10);\r\nregisterTestResetHook(\"registries.clear\", clearAllRegistries, 20);\r\n\r\nexport const getMetaEntry = (name: string): StoreFeatureMeta | undefined => meta[name];\r\n\r\nexport const isDeleting = (name: string): boolean =>\r\n isStoreDeleting(getActiveRegistry(), name);\r\n\r\nexport const resolveScope = (scopeOrRegistry?: string | ReturnType<typeof getStoreRegistry>): { scope: string; registry: StoreRegistry } => {\r\n const resolvedScope = typeof scopeOrRegistry === \"string\"\r\n ? normalizeStoreRegistryScope(scopeOrRegistry)\r\n : _scope;\r\n const registry = typeof scopeOrRegistry === \"string\"\r\n ? getStoreRegistry(resolvedScope)\r\n : scopeOrRegistry ?? getStoreRegistry(_scope);\r\n return { scope: resolvedScope, registry };\r\n};\r\n\r\n\r\n","/**\r\n * @module store-lifecycle/hooks\r\n *\r\n * LAYER: Store lifecycle\r\n * OWNS: Module-level behavior and exports for store-lifecycle/hooks.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport { warn, log, hashState, deepClone, sanitize, isDev } from \"../utils.js\";\r\nimport { runMiddleware, runStoreHook, MIDDLEWARE_ABORT } from \"../features/lifecycle.js\";\r\nimport { getConfig } from \"../internals/config.js\";\r\nimport { registerTestResetHook } from \"../internals/test-reset.js\";\r\nimport {\r\n hasRegisteredStoreFeature,\r\n type FeatureDeleteContext,\r\n type FeatureName,\r\n type FeatureWriteContext,\r\n type StoreFeatureMeta,\r\n} from \"../feature-registry.js\";\r\nimport type { NormalizedOptions } from \"../adapters/options.js\";\r\nimport type { StoreValue } from \"./types.js\";\r\nimport {\r\n meta,\r\n stores,\r\n initialStates,\r\n featureRuntimes,\r\n applyFeatureState,\r\n getRegistry,\r\n setStoreValueInternal,\r\n hasStoreEntryInternal,\r\n} from \"./registry.js\";\r\nimport { runValidation, invalidatePathCache } from \"./validation.js\";\r\nimport { reportStoreError, reportStoreWarning, warnMissingFeature } from \"./identity.js\";\r\n\r\ntype BaseFeatureContext = {\r\n name: string;\r\n options: StoreFeatureMeta[\"options\"];\r\n getMeta: () => StoreFeatureMeta | undefined;\r\n getStoreValue: () => StoreValue;\r\n getAllStores: () => Record<string, StoreValue>;\r\n getInitialState: () => StoreValue | undefined;\r\n hasStore: () => boolean;\r\n setStoreValue: (value: StoreValue) => void;\r\n applyFeatureState: (value: StoreValue, updatedAtMs?: number) => void;\r\n notify: () => void;\r\n reportStoreError: (message: string) => void;\r\n warn: typeof warn;\r\n log: typeof log;\r\n hashState: typeof hashState;\r\n deepClone: typeof deepClone;\r\n sanitize: typeof sanitize;\r\n validate: (next: StoreValue) => { ok: true; value: StoreValue } | { ok: false };\r\n isDev: typeof isDev;\r\n};\r\n\r\nconst baseFeatureContextsByRegistry = new WeakMap<object, Map<string, BaseFeatureContext | null>>();\r\nconst getBaseFeatureContexts = (registry: object): Map<string, BaseFeatureContext | null> => {\r\n let contexts = baseFeatureContextsByRegistry.get(registry);\r\n if (!contexts) {\r\n contexts = new Map();\r\n baseFeatureContextsByRegistry.set(registry, contexts);\r\n }\r\n return contexts;\r\n};\r\n\r\nexport const clearFeatureContexts = (): void => {\r\n getBaseFeatureContexts(getRegistry()).clear();\r\n};\r\n\r\nregisterTestResetHook(\"features.contexts\", clearFeatureContexts, 100);\r\n\r\nexport const createBaseFeatureContext = (name: string): BaseFeatureContext | null => {\r\n const registry = getRegistry();\r\n const baseFeatureContexts = getBaseFeatureContexts(registry);\r\n const cached = baseFeatureContexts.get(name);\r\n if (cached) return cached;\r\n\r\n const metaEntry = meta[name];\r\n if (!metaEntry) {\r\n warn(`Internal feature context requested for \"${name}\" after metadata was cleared.`);\r\n return null;\r\n }\r\n\r\n const ctx: BaseFeatureContext = {\r\n name,\r\n options: metaEntry.options,\r\n getMeta: () => meta[name],\r\n getStoreValue: () => stores[name],\r\n getAllStores: () => stores,\r\n getInitialState: () => initialStates[name],\r\n hasStore: () => hasStoreEntryInternal(name),\r\n setStoreValue: (value: StoreValue) => {\r\n setStoreValueInternal(name, value);\r\n },\r\n applyFeatureState: (value: StoreValue, updatedAtMs?: number) => {\r\n applyFeatureState(name, value, updatedAtMs);\r\n invalidatePathCache(name);\r\n },\r\n notify: () => {\r\n // noop placeholder to be bound by store-notify\r\n },\r\n reportStoreError: (message: string) => {\r\n reportStoreError(name, message);\r\n },\r\n warn,\r\n log,\r\n hashState,\r\n deepClone,\r\n sanitize,\r\n validate: (next: StoreValue) => runValidation(name, next, meta[name]?.options?.validate),\r\n isDev,\r\n };\r\n baseFeatureContexts.set(name, ctx);\r\n return ctx;\r\n};\r\n\r\nexport const runFeatureCreateHooks = (name: string, notify: (name: string) => void): void => {\r\n const baseContext = createBaseFeatureContext(name);\r\n if (!baseContext) return;\r\n baseContext.notify = () => notify(name);\r\n featureRuntimes.forEach((runtime) => {\r\n runtime.onStoreCreate?.(baseContext);\r\n });\r\n};\r\n\r\nexport const runFeatureWriteHooks = (name: string, action: string, prev: StoreValue, next: StoreValue, notify: (name: string) => void): void => {\r\n const baseContext = createBaseFeatureContext(name);\r\n if (!baseContext) return;\r\n baseContext.notify = () => notify(name);\r\n const ctx = Object.assign(Object.create(baseContext), {\r\n action,\r\n prev,\r\n next,\r\n }) as FeatureWriteContext;\r\n\r\n featureRuntimes.forEach((runtime) => {\r\n runtime.onStoreWrite?.(ctx);\r\n });\r\n};\r\n\r\nexport const runFeatureDeleteHooks = (name: string, prev: StoreValue, notify: (name: string) => void): void => {\r\n const baseContext = createBaseFeatureContext(name);\r\n if (!baseContext) return;\r\n baseContext.notify = () => notify(name);\r\n const ctx = Object.assign(Object.create(baseContext), {\r\n prev,\r\n }) as FeatureDeleteContext;\r\n featureRuntimes.forEach((runtime) => {\r\n runtime.beforeStoreDelete?.(ctx);\r\n });\r\n featureRuntimes.forEach((runtime) => {\r\n runtime.afterStoreDelete?.(ctx);\r\n });\r\n getBaseFeatureContexts(getRegistry()).delete(name);\r\n};\r\n\r\nexport const runMiddlewareForStore = (\r\n name: string,\r\n payload: { action: string; prev: StoreValue; next: StoreValue; path: unknown; }\r\n): StoreValue | typeof MIDDLEWARE_ABORT =>\r\n runMiddleware({\r\n name,\r\n payload,\r\n middlewares: (() => {\r\n const storeMiddleware = meta[name]?.options?.middleware || [];\r\n const globalMiddleware = getConfig().middleware || [];\r\n if (storeMiddleware.length === 0) return globalMiddleware;\r\n if (globalMiddleware.length === 0) return storeMiddleware;\r\n // Store-level first, then global middleware as the final gate.\r\n return [...storeMiddleware, ...globalMiddleware];\r\n })(),\r\n reportIssue: (message, visibility) => {\r\n reportStoreWarning(name, message, visibility);\r\n },\r\n warn,\r\n });\r\n\r\nexport const runStoreHookSafe = (\r\n name: string,\r\n label: \"onCreate\" | \"onSet\" | \"onReset\" | \"onDelete\",\r\n fn: ((...args: any[]) => void) | undefined,\r\n args: any[]\r\n): void =>\r\n runStoreHook({\r\n name,\r\n label,\r\n fn,\r\n args,\r\n reportIssue: (message, visibility) => {\r\n reportStoreWarning(name, message, visibility);\r\n },\r\n });\r\n\r\nexport const resolveFeatureAvailability = (name: string, options: NormalizedOptions): NormalizedOptions => {\r\n const next: NormalizedOptions = { ...options };\r\n\r\n if (next.persist && !hasRegisteredStoreFeature(\"persist\")) {\r\n if (next.explicitPersist) warnMissingFeature(name, \"persist\", next.onError);\r\n next.persist = null;\r\n }\r\n\r\n if (next.sync && !hasRegisteredStoreFeature(\"sync\")) {\r\n if (next.explicitSync) warnMissingFeature(name, \"sync\", next.onError);\r\n next.sync = false;\r\n }\r\n\r\n if (!hasRegisteredStoreFeature(\"devtools\")) {\r\n if (next.explicitDevtools) warnMissingFeature(name, \"devtools\", next.onError);\r\n next.devtools = false;\r\n next.historyLimit = 0;\r\n next.redactor = undefined;\r\n }\r\n\r\n return next;\r\n};\r\n\r\n\r\n","/**\r\n * @module store-write\r\n *\r\n * LAYER: Store runtime\r\n * OWNS: Module-level behavior and exports for store-write.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport {\r\n warn,\r\n warnAlways,\r\n error,\r\n log,\r\n isDev,\r\n isValidData,\r\n isValidStoreName,\r\n validateDepth,\r\n setByPath,\r\n deepClone,\r\n produceClone,\r\n type PathInput,\r\n} from \"./utils.js\";\r\nimport {\r\n collectLegacyOptionDeprecationWarnings,\r\n normalizeStoreOptions,\r\n type StoreOptions,\r\n} from \"./adapters/options.js\";\r\nimport {\r\n stores,\r\n meta,\r\n subscribers,\r\n initialStates,\r\n initialFactories,\r\n storeAdmin,\r\n setStoreValueInternal,\r\n getStoreValueRef,\r\n hasStoreEntryInternal,\r\n} from \"./store-lifecycle/registry.js\";\r\nimport {\r\n sanitizeValue,\r\n normalizeCommittedState,\r\n validatePathSafety,\r\n invalidatePathCache,\r\n materializeInitial,\r\n} from \"./store-lifecycle/validation.js\";\r\nimport {\r\n runFeatureCreateHooks,\r\n runFeatureWriteHooks,\r\n runMiddlewareForStore,\r\n runStoreHookSafe,\r\n resolveFeatureAvailability,\r\n} from \"./store-lifecycle/hooks.js\";\r\nimport {\r\n nameOf,\r\n exists,\r\n reportStoreCreationError,\r\n reportStoreError,\r\n reportStoreWarning,\r\n getSsrWarningIssued,\r\n markSsrWarningIssued,\r\n} from \"./store-lifecycle/identity.js\";\r\nimport type {\r\n PartialDeep,\r\n Path,\r\n PathValue,\r\n StoreDefinition,\r\n StoreValue,\r\n StoreKey,\r\n StoreName,\r\n StateFor,\r\n WriteResult,\r\n} from \"./store-lifecycle/types.js\";\r\nimport { getConfig } from \"./internals/config.js\";\r\nimport { runTestResets } from \"./internals/test-reset.js\";\r\nimport { notify } from \"./store-notify.js\";\r\nimport { MIDDLEWARE_ABORT } from \"./features/lifecycle.js\";\r\nimport {\r\n isTransactionActive,\r\n getStagedTransactionValue,\r\n stageTransactionValue,\r\n registerTransactionCommit,\r\n markTransactionFailed,\r\n} from \"./store-transaction.js\";\r\n\r\ntype KeyOrData = StoreValue | string | string[] | Record<string, unknown> | ((draft: any) => void);\r\n// If store names are loose (not registered via StoreStateMap), fall back to untyped paths/values.\r\ntype IsStoreNameLoose = string extends StoreName ? true : false;\r\ntype StorePathFor<Name extends StoreName> =\r\n IsStoreNameLoose extends true ? string | string[] : Path<StateFor<Name>>;\r\ntype StorePathValueFor<Name extends StoreName, P extends StorePathFor<Name>> =\r\n IsStoreNameLoose extends true ? unknown : (P extends Path<StateFor<Name>> ? PathValue<StateFor<Name>, P> : never);\r\ntype HydrateSnapshot = Partial<{ [K in StoreName]: StateFor<K> }>;\r\ntype HydrateOptions<Snapshot extends Record<string, unknown>> =\r\n Partial<{ [K in keyof Snapshot]: StoreOptions<Snapshot[K]> }> & { default?: StoreOptions };\r\ntype HydrationTrust<Snapshot extends Record<string, unknown>> = {\r\n allowUntrusted?: boolean;\r\n validate?: (snapshot: Snapshot) => boolean;\r\n};\r\n\r\nconst SLOW_MUTATOR_WARN_MS = 32;\r\nconst slowMutatorWarned = new Set<string>();\r\nconst ssrGlobalAllowWarned = new Set<string>();\r\nconst warnSlowMutator = (storeName: string, elapsedMs: number): void => {\r\n if (!isDev()) return;\r\n if (elapsedMs < SLOW_MUTATOR_WARN_MS) return;\r\n if (slowMutatorWarned.has(storeName)) return;\r\n slowMutatorWarned.add(storeName);\r\n warn(\r\n `setStore(\"${storeName}\", mutator) took ${elapsedMs}ms. ` +\r\n `Mutator writes clone the entire store; consider path writes or smaller stores for hot paths.`\r\n );\r\n};\r\n\r\ntype CommitAction = \"set\" | \"reset\" | \"hydrate\" | \"replace\";\r\ntype CommitHookLabel = \"onSet\" | \"onReset\";\r\ntype CommitArgs = {\r\n name: string;\r\n prev: StoreValue;\r\n next: StoreValue;\r\n action: CommitAction;\r\n hookLabel: CommitHookLabel;\r\n logMessage: string;\r\n};\r\n\r\nconst commitStoreUpdate = ({ name, prev, next, action, hookLabel, logMessage }: CommitArgs): void => {\r\n setStoreValueInternal(name, next);\r\n invalidatePathCache(name);\r\n const updatedAtMs = Date.now();\r\n meta[name].updatedAt = new Date(updatedAtMs).toISOString();\r\n meta[name].updatedAtMs = updatedAtMs;\r\n meta[name].updateCount++;\r\n runFeatureWriteHooks(name, action, prev, next, notify);\r\n runStoreHookSafe(name, hookLabel, meta[name].options[hookLabel], [prev, next]);\r\n notify(name);\r\n log(logMessage);\r\n};\r\n\r\nconst stageOrCommitUpdate = (args: CommitArgs): void => {\r\n if (isTransactionActive()) {\r\n stageTransactionValue(args.name, args.next);\r\n registerTransactionCommit(() => commitStoreUpdate(args));\r\n return;\r\n }\r\n commitStoreUpdate(args);\r\n};\r\n\r\nexport const createStore = <Name extends string, State>(\r\n name: Name,\r\n initialData: State,\r\n option: StoreOptions<State> = {}\r\n): StoreDefinition<Name, State> | undefined => {\r\n if (isTransactionActive()) {\r\n const message =\r\n `createStore(\"${String(name)}\") cannot be called inside setStoreBatch. ` +\r\n `Move createStore outside the batch to preserve transaction semantics.`;\r\n reportStoreCreationError(message, option.onError as ((message: string) => void) | undefined);\r\n markTransactionFailed(message);\r\n return;\r\n }\r\n if (!isValidStoreName(name)) {\r\n reportStoreCreationError(`createStore(\"${String(name)}\") is not a valid store name.`, option.onError as ((message: string) => void) | undefined);\r\n return;\r\n }\r\n const lazyRequested = option.lazy === true && typeof initialData === \"function\";\r\n if (!lazyRequested && !isValidData(initialData)) {\r\n reportStoreCreationError(`createStore(\"${name}\") received invalid initial data.`, option.onError as ((message: string) => void) | undefined);\r\n return;\r\n }\r\n if (initialData === undefined && isDev()) {\r\n warn(\r\n `createStore(\"${name}\") received an undefined initial value. This can be indistinguishable from a missing store in some consumers; consider null or an explicit shape if that is intentional.`\r\n );\r\n }\r\n\r\n collectLegacyOptionDeprecationWarnings(option).forEach((message) => {\r\n warn(message);\r\n });\r\n\r\n const normalizedOptions = resolveFeatureAvailability(\r\n name,\r\n normalizeStoreOptions(option, name, getConfig().defaultSnapshotMode)\r\n );\r\n\r\n if (normalizedOptions.scope === \"temp\" && option.persist) {\r\n const message =\r\n `Store \"${name}\" has scope: \"temp\" but persist is enabled. ` +\r\n `Temp stores are intended to be ephemeral.`;\r\n normalizedOptions.onError?.(message);\r\n if (!isDev()) warnAlways(message);\r\n error(message);\r\n }\r\n\r\n const isServer = typeof window === \"undefined\";\r\n const nodeEnv = typeof process !== \"undefined\" ? process.env?.NODE_ENV : undefined;\r\n const isProdServer = isServer && nodeEnv === \"production\";\r\n const allowGlobalSSR = normalizedOptions.allowSSRGlobalStore ?? false;\r\n\r\n if (isProdServer && !allowGlobalSSR) {\r\n const msg =\r\n `createStore(\"${name}\") is blocked on the server in production to prevent cross-request memory leaks.\\n` +\r\n `Call createStoreForRequest(...) inside each request scope or pass { scope: \"global\" } to opt in.`;\r\n reportStoreCreationError(msg, option.onError as ((message: string) => void) | undefined);\r\n return;\r\n }\r\n if (isProdServer && allowGlobalSSR && !ssrGlobalAllowWarned.has(name)) {\r\n ssrGlobalAllowWarned.add(name);\r\n warnAlways(\r\n `createStore(\"${name}\") is allowed on the server in production because allowSSRGlobalStore is true.\\n` +\r\n `This can leak data across concurrent requests. Prefer createStoreForRequest(...) or scope: \"request\" unless you truly need a global SSR store.`\r\n );\r\n }\r\n\r\n if (hasStoreEntryInternal(name)) {\r\n const msg = `Store \"${name}\" already exists. Call setStore(\"${name}\", data) to update instead.`;\r\n reportStoreWarning(name, msg);\r\n return { name } as StoreDefinition<Name, State>;\r\n }\r\n\r\n if (isServer && !allowGlobalSSR && !getSsrWarningIssued(name) && isDev()) {\r\n markSsrWarningIssued(name);\r\n warn(\r\n `createStore(\\\"${name}\\\") called in a server environment. ` +\r\n `Use createStoreForRequest(...) per request to avoid cross-request leaks ` +\r\n `or pass { allowSSRGlobalStore: true } if you really want a global store on the server.`\r\n );\r\n }\r\n\r\n const cleanResult = sanitizeValue(name, initialData, normalizedOptions.onError);\r\n if (!cleanResult.ok) return;\r\n const clean = cleanResult.value;\r\n const isLazy = normalizedOptions.lazy === true && typeof initialData === \"function\";\r\n\r\n const hadPreexistingSubscribers = (subscribers[name]?.size ?? 0) > 0;\r\n if (isLazy) {\r\n stores[name] = undefined;\r\n initialFactories[name] = initialData as () => unknown;\r\n } else {\r\n const validated = normalizeCommittedState(name, clean, normalizedOptions.validate, normalizedOptions.onError);\r\n if (!validated.ok) return;\r\n setStoreValueInternal(name, validated.value);\r\n initialStates[name] = deepClone(validated.value);\r\n }\r\n const createdAtMs = Date.now();\r\n const createdAtIso = new Date(createdAtMs).toISOString();\r\n meta[name] = {\r\n createdAt: createdAtIso,\r\n updatedAt: createdAtIso,\r\n updatedAtMs: createdAtMs,\r\n updateCount: 0,\r\n version: normalizedOptions.version,\r\n metrics: { notifyCount: 0, totalNotifyMs: 0, lastNotifyMs: 0 },\r\n options: normalizedOptions,\r\n };\r\n\r\n invalidatePathCache(name);\r\n runFeatureCreateHooks(name, notify);\r\n runStoreHookSafe(name, \"onCreate\", meta[name].options.onCreate, [clean]);\r\n if (hadPreexistingSubscribers) notify(name);\r\n\r\n log(`Store \"${name}\" created -> ${JSON.stringify(clean)}`);\r\n return { name } as StoreDefinition<Name, State>;\r\n};\r\n\r\nexport const createStoreStrict = <Name extends string, State>(\r\n name: Name,\r\n initialData: State,\r\n option: StoreOptions<State> = {}\r\n): StoreDefinition<Name, State> => {\r\n const created = createStore(name, initialData, option);\r\n if (created) return created;\r\n throw new Error(\r\n `createStoreStrict(\"${String(name)}\") failed. ` +\r\n `See earlier warnings/errors or onError callbacks for the cause.`\r\n );\r\n};\r\n\r\nexport function setStore<Name extends string, State, P extends Path<State>>(name: StoreDefinition<Name, State>, path: P, value: PathValue<State, P>): WriteResult;\r\nexport function setStore<Name extends string, State>(name: StoreDefinition<Name, State>, mutator: (draft: State) => void): WriteResult;\r\nexport function setStore<Name extends string, State>(name: StoreDefinition<Name, State>, data: PartialDeep<State>): WriteResult;\r\nexport function setStore<Name extends string, State, P extends Path<State>>(name: StoreKey<Name, State>, path: P, value: PathValue<State, P>): WriteResult;\r\nexport function setStore<Name extends string, State>(name: StoreKey<Name, State>, mutator: (draft: State) => void): WriteResult;\r\nexport function setStore<Name extends string, State>(name: StoreKey<Name, State>, data: PartialDeep<State>): WriteResult;\r\nexport function setStore<Name extends StoreName, P extends StorePathFor<Name>>(\r\n name: Name,\r\n path: P,\r\n value: StorePathValueFor<Name, P>\r\n): WriteResult;\r\nexport function setStore<Name extends StoreName>(name: Name, mutator: (draft: StateFor<Name>) => void): WriteResult;\r\nexport function setStore<Name extends StoreName>(name: Name, data: PartialDeep<StateFor<Name>>): WriteResult;\r\nexport function setStore(name: string | StoreDefinition<string, StoreValue>, keyOrData: KeyOrData, value?: unknown): WriteResult {\r\n const storeName = nameOf(name);\r\n if (!materializeInitial(storeName)) return { ok: false, reason: \"validate\" };\r\n if (!hasStoreEntryInternal(storeName)) {\r\n const message =\r\n `setStore(\"${storeName}\") called before createStore(). ` +\r\n `Create the store first or pass a valid StoreDefinition.`;\r\n reportStoreError(storeName, message);\r\n if (isTransactionActive()) markTransactionFailed(message);\r\n return { ok: false, reason: \"not-found\" };\r\n }\r\n let updated: StoreValue;\r\n const stagedPrev = isTransactionActive() ? getStagedTransactionValue(storeName) : { has: false, value: undefined };\r\n const prev = stagedPrev.has ? stagedPrev.value : getStoreValueRef(storeName);\r\n\r\n const usedMutator = typeof keyOrData === \"function\" && value === undefined;\r\n\r\n if (usedMutator) {\r\n const mutatorStart = isDev() ? Date.now() : 0;\r\n try {\r\n const producer = getConfig().mutatorProduce;\r\n let didReturn = false;\r\n let returnedValue: unknown = undefined;\r\n const recipe = (draft: StoreValue) => {\r\n const result = (keyOrData as (draft: StoreValue) => void)(draft);\r\n if (result !== undefined) {\r\n didReturn = true;\r\n returnedValue = result;\r\n }\r\n return result;\r\n };\r\n const draft = producer\r\n ? producer(prev as StoreValue, recipe as (draft: StoreValue) => void)\r\n : (() => {\r\n const clone = deepClone(prev);\r\n recipe(clone);\r\n return clone;\r\n })();\r\n if (didReturn && getConfig().strictMutatorReturns) {\r\n const message =\r\n `setStore(\"${storeName}\", mutator) returned a value. ` +\r\n `Strict mutator mode forbids return values; mutate the draft instead.`;\r\n reportStoreError(storeName, message);\r\n if (isTransactionActive()) markTransactionFailed(message);\r\n return { ok: false, reason: \"validate\" };\r\n }\r\n if (didReturn && isDev() && !getConfig().strictMutatorReturns) {\r\n warn(\r\n `setStore(\"${storeName}\", mutator) returned a value. ` +\r\n `Return values replace the entire store; return void to apply draft mutations instead.`\r\n );\r\n }\r\n updated = (didReturn && !getConfig().strictMutatorReturns)\r\n ? (returnedValue as StoreValue)\r\n : (draft as StoreValue);\r\n } catch (err) {\r\n reportStoreError(storeName, `Mutator for \"${storeName}\" failed: ${(err as { message?: string })?.message ?? err}`);\r\n if (isTransactionActive()) markTransactionFailed(err);\r\n return { ok: false, reason: \"validate\" };\r\n } finally {\r\n if (mutatorStart) {\r\n warnSlowMutator(storeName, Date.now() - mutatorStart);\r\n }\r\n }\r\n } else if (typeof keyOrData === \"object\" && !Array.isArray(keyOrData) && value === undefined) {\r\n if (!isValidData(keyOrData)) {\r\n if (isTransactionActive()) markTransactionFailed(`setStore(\"${storeName}\") received invalid data`);\r\n return { ok: false, reason: \"invalid-args\" };\r\n }\r\n if (typeof prev !== \"object\" || prev === null || Array.isArray(prev)) {\r\n error(\r\n `setStore(\"${storeName}\", data) only merges into object stores.\\n` +\r\n `Use setStore(\"${storeName}\", \"path\", value) or recreate the store with an object shape.`\r\n );\r\n if (isTransactionActive()) markTransactionFailed(`setStore(\"${storeName}\") attempted object merge on non-object store`);\r\n return { ok: false, reason: \"validate\" };\r\n }\r\n const partialResult = sanitizeValue(storeName, keyOrData);\r\n if (!partialResult.ok) {\r\n if (isTransactionActive()) markTransactionFailed(`setStore(\"${storeName}\") failed sanitize`);\r\n return { ok: false, reason: \"validate\" };\r\n }\r\n updated = { ...(prev as Record<string, unknown>), ...partialResult.value as Record<string, unknown> };\r\n } else if (typeof keyOrData === \"string\" || Array.isArray(keyOrData)) {\r\n if (!validateDepth(keyOrData as PathInput)) {\r\n if (isTransactionActive()) markTransactionFailed(`setStore(\"${storeName}\") received invalid path`);\r\n return { ok: false, reason: \"invalid-args\" };\r\n }\r\n const valueResult = sanitizeValue(storeName, value);\r\n if (!valueResult.ok) {\r\n if (isTransactionActive()) markTransactionFailed(`setStore(\"${storeName}\") failed sanitize`);\r\n return { ok: false, reason: \"validate\" };\r\n }\r\n const sanitizedValue = valueResult.value;\r\n const safePath = validatePathSafety(storeName, prev, keyOrData as PathInput, sanitizedValue);\r\n if (!safePath.ok) {\r\n meta[storeName]?.options?.onError?.(safePath.reason ?? `Invalid path for \"${storeName}\".`);\r\n if (isTransactionActive()) markTransactionFailed(safePath.reason);\r\n return { ok: false, reason: \"path\" };\r\n }\r\n updated = setByPath(prev as Record<string, unknown>, keyOrData as PathInput, sanitizedValue);\r\n } else {\r\n const message =\r\n `setStore(\"${storeName}\") - invalid arguments.\\n` +\r\n `Usage:\\n` +\r\n ` setStore(\"${storeName}\", \"field\", value)\\n` +\r\n ` setStore(\"${storeName}\", \"nested.field\", value)\\n` +\r\n ` setStore(\"${storeName}\", { field: value })\\n` +\r\n ` setStore(storeDef, draft => { draft.field = value })\\n` +\r\n ` replaceStore(\"${storeName}\", value) // full-store replace`;\r\n error(message);\r\n meta[storeName]?.options?.onError?.(message);\r\n if (isTransactionActive()) markTransactionFailed(message);\r\n return { ok: false, reason: \"invalid-args\" };\r\n }\r\n\r\n if (!isValidData(updated)) {\r\n if (isTransactionActive()) markTransactionFailed(`setStore(\"${storeName}\") produced invalid data`);\r\n return { ok: false, reason: \"validate\" };\r\n }\r\n const validateRule = meta[storeName]?.options?.validate;\r\n\r\n const next = runMiddlewareForStore(storeName, { action: \"set\", prev, next: updated, path: keyOrData });\r\n if (next === MIDDLEWARE_ABORT) {\r\n if (isTransactionActive()) markTransactionFailed(`setStore(\"${storeName}\") aborted by middleware`);\r\n return { ok: false, reason: \"middleware\" };\r\n }\r\n const reuseInput = usedMutator && next === updated;\r\n const committed = normalizeCommittedState(storeName, next, validateRule, undefined, reuseInput ? { reuseInput: true } : undefined);\r\n if (!committed.ok) {\r\n if (isTransactionActive()) markTransactionFailed(`setStore(\"${storeName}\") failed validation`);\r\n return { ok: false, reason: \"validate\" };\r\n }\r\n\r\n stageOrCommitUpdate({\r\n name: storeName,\r\n prev,\r\n next: committed.value,\r\n action: \"set\",\r\n hookLabel: \"onSet\",\r\n logMessage: `Store \"${storeName}\" updated`,\r\n });\r\n return { ok: true };\r\n}\r\n\r\nexport function replaceStore<Name extends string, State>(name: StoreDefinition<Name, State>, value: State): WriteResult;\r\nexport function replaceStore<Name extends string, State>(name: StoreKey<Name, State>, value: State): WriteResult;\r\nexport function replaceStore<Name extends StoreName>(name: Name, value: StateFor<Name>): WriteResult;\r\nexport function replaceStore(nameInput: string | StoreDefinition<string, StoreValue>, value: unknown): WriteResult {\r\n if (isTransactionActive()) {\r\n const message = `replaceStore(...) cannot be called inside setStoreBatch.`;\r\n warn(message);\r\n markTransactionFailed(message);\r\n return { ok: false, reason: \"invalid-args\" };\r\n }\r\n const storeName = nameOf(nameInput);\r\n if (!storeName) return { ok: false, reason: \"invalid-args\" };\r\n\r\n const result = replaceStoreState(storeName, value, \"replace\");\r\n if (!result.ok) {\r\n if (result.reason === \"not-found\") return { ok: false, reason: \"not-found\" };\r\n if (result.reason === \"middleware\") return { ok: false, reason: \"middleware\" };\r\n return { ok: false, reason: \"validate\" };\r\n }\r\n return { ok: true };\r\n}\r\n\r\nexport function deleteStore<Name extends string, State>(name: StoreDefinition<Name, State>): void;\r\nexport function deleteStore<Name extends string, State>(name: StoreKey<Name, State>): void;\r\nexport function deleteStore<Name extends StoreName>(name: Name): void;\r\nexport function deleteStore(nameInput: string | StoreDefinition<string, StoreValue>): void {\r\n const name = nameOf(nameInput);\r\n if (!exists(name)) return;\r\n if (!materializeInitial(name)) return;\r\n if (isTransactionActive()) {\r\n const message =\r\n `deleteStore(\"${name}\") cannot be called inside setStoreBatch. ` +\r\n `Move deleteStore outside the batch to preserve transaction semantics.`;\r\n reportStoreWarning(name, message);\r\n markTransactionFailed(message);\r\n return;\r\n }\r\n storeAdmin.deleteExistingStore(name);\r\n invalidatePathCache(name);\r\n}\r\n\r\nexport function resetStore<Name extends string, State>(name: StoreDefinition<Name, State>): WriteResult;\r\nexport function resetStore<Name extends string, State>(name: StoreKey<Name, State>): WriteResult;\r\nexport function resetStore<Name extends StoreName>(name: Name): WriteResult;\r\nexport function resetStore(nameInput: string | StoreDefinition<string, StoreValue>): WriteResult {\r\n const name = nameOf(nameInput);\r\n if (!exists(name)) return { ok: false, reason: \"not-found\" };\r\n if (!materializeInitial(name)) return { ok: false, reason: \"validate\" };\r\n if (!initialStates[name]) {\r\n const message =\r\n `resetStore(\"${name}\") has no initial state to reset to. ` +\r\n `If this is a lazy store, ensure it has been initialized before calling resetStore.`;\r\n reportStoreWarning(name, message);\r\n if (isTransactionActive()) {\r\n markTransactionFailed(message);\r\n }\r\n return { ok: false, reason: \"not-found\" };\r\n }\r\n const stagedPrev = isTransactionActive() ? getStagedTransactionValue(name) : { has: false, value: undefined };\r\n const prev = stagedPrev.has ? stagedPrev.value : stores[name];\r\n const resetValue = deepClone(initialStates[name]);\r\n\r\n stageOrCommitUpdate({\r\n name,\r\n prev,\r\n next: resetValue,\r\n action: \"reset\",\r\n hookLabel: \"onReset\",\r\n logMessage: `Store \"${name}\" reset to initial state/value`,\r\n });\r\n return { ok: true };\r\n}\r\n\r\nconst replaceStoreState = (name: string, data: unknown, action: CommitAction = \"hydrate\"): { ok: boolean; reason?: string } => {\r\n if (!exists(name)) return { ok: false, reason: \"not-found\" };\r\n const prev = stores[name];\r\n const nextResult = sanitizeValue(name, data);\r\n if (!nextResult.ok) return { ok: false, reason: \"sanitize\" };\r\n const nextValue = nextResult.value;\r\n if (nextValue === undefined) {\r\n const message = `Whole-store undefined replacement is blocked for \"${name}\". Use null for intentional empty state.`;\r\n reportStoreWarning(name, message);\r\n return { ok: false, reason: \"undefined\" };\r\n }\r\n\r\n const validateRule = meta[name]?.options?.validate;\r\n\r\n const final = runMiddlewareForStore(name, { action, prev, next: nextValue, path: null });\r\n if (final === MIDDLEWARE_ABORT) return { ok: false, reason: \"middleware\" };\r\n const committed = normalizeCommittedState(name, final, validateRule);\r\n if (!committed.ok) return { ok: false, reason: \"validate\" };\r\n commitStoreUpdate({\r\n name,\r\n prev,\r\n next: committed.value,\r\n action,\r\n hookLabel: \"onSet\",\r\n logMessage: `Store \"${name}\" ${action === \"hydrate\" ? \"hydrated\" : \"replaced\"}`,\r\n });\r\n return { ok: true };\r\n};\r\n\r\nexport const clearAllStores = (): void => {\r\n if (isTransactionActive()) {\r\n const message = `clearAllStores() cannot be called inside setStoreBatch.`;\r\n warn(message);\r\n markTransactionFailed(message);\r\n return;\r\n }\r\n storeAdmin.clearAllStores();\r\n};\r\n\r\nexport const _hardResetAllStoresForTest = (): void => {\r\n runTestResets();\r\n};\r\n\r\nexport const hydrateStores = <Snapshot extends Record<string, unknown> = HydrateSnapshot>(\r\n snapshot: Snapshot,\r\n options: HydrateOptions<Snapshot> = {},\r\n trust: HydrationTrust<Snapshot> = {}\r\n): { hydrated: string[]; created: string[]; failed: Record<string, string> } => {\r\n if (isTransactionActive()) {\r\n const message = `hydrateStores(...) cannot be called inside setStoreBatch.`;\r\n warn(message);\r\n markTransactionFailed(message);\r\n return {\r\n hydrated: [],\r\n created: [],\r\n failed: { _batch: \"transaction\" },\r\n };\r\n }\r\n const result = {\r\n hydrated: [] as string[],\r\n created: [] as string[],\r\n failed: Object.create(null) as Record<string, string>,\r\n };\r\n if (!snapshot || typeof snapshot !== \"object\") return result;\r\n\r\n const allowUntrusted = trust.allowUntrusted === true || getConfig().allowUntrustedHydration === true;\r\n if (!allowUntrusted) {\r\n warnAlways(\r\n `hydrateStores(...) requires explicit trust. ` +\r\n `Pass { allowUntrusted: true } as the third argument or configureStroid({ allowUntrustedHydration: true }).`\r\n );\r\n result.failed._hydration = \"untrusted\";\r\n return result;\r\n }\r\n if (typeof trust.validate === \"function\") {\r\n let ok = false;\r\n try {\r\n ok = !!trust.validate(snapshot);\r\n } catch (err) {\r\n warnAlways(\r\n `hydrateStores(...) trust validation threw: ${(err as { message?: string })?.message ?? err}`\r\n );\r\n result.failed._hydration = \"validation-error\";\r\n return result;\r\n }\r\n if (!ok) {\r\n warnAlways(\"hydrateStores(...) rejected by trust validation.\");\r\n result.failed._hydration = \"validation-failed\";\r\n return result;\r\n }\r\n }\r\n Object.entries(snapshot).forEach(([storeName, data]) => {\r\n if (!isValidStoreName(storeName)) {\r\n result.failed[storeName] = \"invalid-name\";\r\n return;\r\n }\r\n if (hasStoreEntryInternal(storeName)) {\r\n const res = replaceStoreState(storeName, data, \"hydrate\");\r\n if (!res.ok) result.failed[storeName] = res.reason ?? \"hydrate-failed\";\r\n else result.hydrated.push(storeName);\r\n } else {\r\n const optionMap = options as Record<string, StoreOptions> & { default?: StoreOptions };\r\n const created = createStore(storeName, data, optionMap[storeName] || optionMap.default || {});\r\n if (created) result.created.push(storeName);\r\n else result.failed[storeName] = \"create-failed\";\r\n }\r\n });\r\n return result;\r\n};\r\n\r\nexport { useRegistry } from \"./store-lifecycle/bind.js\";\r\n\r\n\r\n","/**\r\n * @module async-cache\r\n *\r\n * LAYER: Module\r\n * OWNS: Module-level behavior and exports for async-cache.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport { subscribe } from \"./store-notify.js\";\r\nimport { getRegistry } from \"./store-lifecycle/registry.js\";\r\nimport type { FetchOptions } from \"./async-registry.js\";\r\nimport { resetAsyncRegistry } from \"./async-registry.js\";\r\nexport type { FetchOptions, AsyncStateSnapshot, AsyncStateAdapter } from \"./async-registry.js\";\r\n\r\nexport type FetchInput = string | Promise<unknown> | (() => string | Promise<unknown>);\r\n\r\nexport const MAX_CACHE_SLOTS_PER_STORE = 100;\r\nexport const MAX_INFLIGHT_SLOTS_PER_STORE = 100;\r\nexport const MAX_WARNED_ENTRIES = 1000;\r\n\r\nexport const getActiveAsyncRegistry = () => getRegistry().async;\r\n\r\nconst createAsyncObjectProxy = <T extends object>(getter: () => T): T =>\r\n new Proxy(Object.create(null), {\r\n get: (_target, prop) => (getter() as any)[prop],\r\n set: (_target, prop, value) => {\r\n (getter() as any)[prop] = value;\r\n return true;\r\n },\r\n deleteProperty: (_target, prop) => {\r\n delete (getter() as any)[prop];\r\n return true;\r\n },\r\n has: (_target, prop) => prop in (getter() as any),\r\n ownKeys: () => Reflect.ownKeys(getter()),\r\n getOwnPropertyDescriptor: (_target, prop) => {\r\n const desc = Object.getOwnPropertyDescriptor(getter(), prop);\r\n if (!desc) return undefined;\r\n return { ...desc, configurable: true };\r\n },\r\n }) as T;\r\n\r\nconst createAsyncValueProxy = <T extends object>(getter: () => T): T =>\r\n new Proxy({} as T, {\r\n get: (_target, prop) => {\r\n const target = getter() as any;\r\n const value = target[prop];\r\n return typeof value === \"function\" ? value.bind(target) : value;\r\n },\r\n set: (_target, prop, value) => {\r\n (getter() as any)[prop] = value;\r\n return true;\r\n },\r\n has: (_target, prop) => prop in (getter() as any),\r\n ownKeys: () => Reflect.ownKeys(getter()),\r\n getOwnPropertyDescriptor: (_target, prop) => {\r\n const desc = Object.getOwnPropertyDescriptor(getter(), prop);\r\n if (!desc) return undefined;\r\n return { ...desc, configurable: true };\r\n },\r\n });\r\n\r\nexport const getFetchRegistry = (): ReturnType<typeof getActiveAsyncRegistry>[\"fetchRegistry\"] =>\r\n getActiveAsyncRegistry().fetchRegistry;\r\nexport const inflight = createAsyncObjectProxy(() => getActiveAsyncRegistry().inflight);\r\nexport const requestVersion = createAsyncObjectProxy(() => getActiveAsyncRegistry().requestVersion);\r\nexport const getCacheMeta = (): ReturnType<typeof getActiveAsyncRegistry>[\"cacheMeta\"] =>\r\n getActiveAsyncRegistry().cacheMeta;\r\nexport const rateWindowStart = createAsyncObjectProxy(() => getActiveAsyncRegistry().rateWindowStart);\r\nexport const rateCount = createAsyncObjectProxy(() => getActiveAsyncRegistry().rateCount);\r\nexport const ratePruneState = createAsyncValueProxy(() => getActiveAsyncRegistry().ratePruneState);\r\nexport const cleanupSubs = createAsyncObjectProxy(() => getActiveAsyncRegistry().cleanupSubs);\r\nexport const storeCleanupFns = createAsyncObjectProxy(() => getActiveAsyncRegistry().storeCleanupFns);\r\nexport const revalidateHandlers = createAsyncObjectProxy(() => getActiveAsyncRegistry().revalidateHandlers);\r\nexport const noSignalWarned = createAsyncValueProxy(() => getActiveAsyncRegistry().noSignalWarned);\r\nexport const shapeWarned = createAsyncValueProxy(() => getActiveAsyncRegistry().shapeWarned);\r\nexport const autoCreateWarned = createAsyncValueProxy(() => getActiveAsyncRegistry().autoCreateWarned);\r\nexport const mutableResultWarned = createAsyncValueProxy(() => getActiveAsyncRegistry().mutableResultWarned);\r\nexport const revalidateKeys = createAsyncValueProxy(() => getActiveAsyncRegistry().revalidateKeys);\r\nexport const asyncMetrics = createAsyncValueProxy(() => getActiveAsyncRegistry().asyncMetrics);\r\n\r\nexport const markWarned = (set: Set<string>, key: string): void => {\r\n if (set.has(key)) return;\r\n set.add(key);\r\n if (set.size <= MAX_WARNED_ENTRIES) return;\r\n const oldest = set.values().next().value as string | undefined;\r\n if (oldest !== undefined) set.delete(oldest);\r\n};\r\n\r\n\r\nexport const resetAsyncState = (): void => {\r\n resetAsyncRegistry(getActiveAsyncRegistry());\r\n};\r\n\r\nexport const shouldUseCache = (cacheSlot: string, ttl?: number): boolean => {\r\n if (!ttl) return false;\r\n const cacheMeta = getCacheMeta();\r\n const meta = cacheMeta[cacheSlot];\r\n if (!meta) return false;\r\n if (meta.expiresAt !== null && meta.expiresAt <= Date.now()) {\r\n delete cacheMeta[cacheSlot];\r\n return false;\r\n }\r\n return Date.now() - meta.timestamp < ttl;\r\n};\r\n\r\nexport const clearAsyncMeta = (name: string): void => {\r\n const fetchRegistry = getFetchRegistry();\r\n const cacheMeta = getCacheMeta();\r\n delete fetchRegistry[name];\r\n noSignalWarned.delete(name);\r\n shapeWarned.delete(name);\r\n autoCreateWarned.delete(name);\r\n mutableResultWarned.delete(name);\r\n\r\n const startsWithName = (key: string) => key === name || key.startsWith(`${name}:`);\r\n\r\n Object.keys(inflight).forEach((k) => { if (startsWithName(k)) delete inflight[k]; });\r\n Object.keys(requestVersion).forEach((k) => { if (startsWithName(k)) delete requestVersion[k]; });\r\n Object.keys(cacheMeta).forEach((k) => { if (startsWithName(k)) delete cacheMeta[k]; });\r\n Object.keys(rateWindowStart).forEach((k) => { if (startsWithName(k)) delete rateWindowStart[k]; });\r\n Object.keys(rateCount).forEach((k) => { if (startsWithName(k)) delete rateCount[k]; });\r\n};\r\n\r\nexport const pruneAsyncCache = (name: string): void => {\r\n const prefix = `${name}:`;\r\n const cacheMeta = getCacheMeta();\r\n const slots = Object.entries(cacheMeta)\r\n .filter(([key, meta]) => {\r\n if (key !== name && !key.startsWith(prefix)) return false;\r\n if (meta.expiresAt !== null && meta.expiresAt <= Date.now()) {\r\n delete cacheMeta[key];\r\n return false;\r\n }\r\n return true;\r\n })\r\n .sort((a, b) => a[1].timestamp - b[1].timestamp);\r\n\r\n if (slots.length <= MAX_CACHE_SLOTS_PER_STORE) return;\r\n const overflow = slots.length - MAX_CACHE_SLOTS_PER_STORE;\r\n slots.slice(0, overflow).forEach(([key]) => {\r\n delete cacheMeta[key];\r\n delete requestVersion[key];\r\n });\r\n};\r\n\r\nexport const countInflightSlots = (name: string): number => {\r\n const prefix = `${name}:`;\r\n let count = 0;\r\n Object.keys(inflight).forEach((key) => {\r\n if (key === name || key.startsWith(prefix)) count += 1;\r\n });\r\n return count;\r\n};\r\n\r\nexport const registerStoreCleanup = (name: string, fn: () => void): void => {\r\n if (!storeCleanupFns[name]) storeCleanupFns[name] = new Set();\r\n storeCleanupFns[name].add(fn);\r\n ensureCleanupSubscription(name);\r\n};\r\n\r\nexport const unregisterStoreCleanup = (name: string, fn: () => void): void => {\r\n const fns = storeCleanupFns[name];\r\n if (!fns) return;\r\n fns.delete(fn);\r\n if (fns.size === 0) delete storeCleanupFns[name];\r\n};\r\n\r\nexport const ensureCleanupSubscription = (name: string): void => {\r\n if (cleanupSubs[name]) return;\r\n cleanupSubs[name] = subscribe(name, (state) => {\r\n if (state !== null) return;\r\n const fns = storeCleanupFns[name];\r\n if (fns) {\r\n fns.forEach((fn) => {\r\n try { fn(); } catch (_) { /* ignore cleanup errors */ }\r\n });\r\n delete storeCleanupFns[name];\r\n }\r\n cleanupSubs[name]?.();\r\n delete cleanupSubs[name];\r\n clearAsyncMeta(name);\r\n });\r\n};\r\n\r\n\r\n","/**\r\n * @module internals/selector-store\r\n *\r\n * LAYER: Internal subsystem\r\n * OWNS: Module-level behavior and exports for internals/selector-store.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport {\r\n stores as _stores,\r\n subscribers as _subscribers,\r\n} from \"../store-lifecycle/registry.js\";\r\nimport type { StoreValue as SelectorStoreValue } from \"../store-lifecycle/types.js\";\r\n\r\ntype SelectorSubscriber = (value: SelectorStoreValue | null) => void;\r\n\r\nexport type { SelectorStoreValue };\r\n\r\nexport const hasSelectorStoreEntry = (name: string): boolean =>\r\n Object.prototype.hasOwnProperty.call(_stores, name);\r\n\r\nexport const getSelectorStoreValueRef = (name: string): SelectorStoreValue | undefined =>\r\n _stores[name];\r\n\r\nexport const subscribeSelectorStore = (name: string, fn: SelectorSubscriber): (() => void) => {\r\n if (!_subscribers[name]) _subscribers[name] = new Set();\r\n _subscribers[name].add(fn);\r\n return () => {\r\n _subscribers[name]?.delete(fn);\r\n if (_subscribers[name]?.size === 0) delete _subscribers[name];\r\n };\r\n};\r\n\r\n\r\n","/**\r\n * @module selectors\r\n *\r\n * LAYER: Selectors\r\n * OWNS: Module-level behavior and exports for selectors.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport {\r\n getSelectorStoreValueRef,\r\n hasSelectorStoreEntry,\r\n subscribeSelectorStore,\r\n type SelectorStoreValue as StoreValue,\r\n} from \"./internals/selector-store.js\";\r\nimport { deepClone, shallowClone, getByPath, warn } from \"./utils.js\";\r\nimport { getStoreSnapshot } from \"./store-notify.js\";\r\nimport { meta } from \"./store-lifecycle/registry.js\";\r\nimport type { SnapshotMode } from \"./adapters/options.js\";\r\n\r\ntype SelectorDependency = string[];\r\n\r\nconst trackSelectorDependencies = <TState, TResult>(\r\n state: TState,\r\n selectorFn: (state: TState) => TResult\r\n): { result: TResult; deps: SelectorDependency[] } => {\r\n const seen = new WeakMap<object, unknown>();\r\n const deps = new Set<string>();\r\n const sep = \"\\u0000\";\r\n\r\n const wrap = (value: unknown, path: string[]): unknown => {\r\n if (!value || typeof value !== \"object\") return value;\r\n const cached = seen.get(value as object);\r\n if (cached) return cached;\r\n\r\n const proxy = new Proxy(value as object, {\r\n get(target, prop, receiver) {\r\n if (typeof prop !== \"string\") {\r\n return Reflect.get(target, prop, receiver);\r\n }\r\n const nextPath = [...path, prop];\r\n const result = Reflect.get(target, prop, receiver);\r\n if (!result || typeof result !== \"object\") {\r\n deps.add(nextPath.join(sep));\r\n }\r\n return wrap(result, nextPath);\r\n },\r\n });\r\n\r\n seen.set(value as object, proxy);\r\n return proxy;\r\n };\r\n\r\n const result = selectorFn(wrap(state, []) as TState);\r\n return {\r\n result,\r\n deps: Array.from(deps, (entry) => entry.split(sep)),\r\n };\r\n};\r\n\r\nconst selectorDepsChanged = <TState>(prev: TState, next: TState, deps: SelectorDependency[]): boolean =>\r\n deps.some((path) => !Object.is(getByPath(prev, path), getByPath(next, path)));\r\n\r\nexport const createSelector = <TState, TResult>(storeName: string, selectorFn: (state: TState) => TResult) => {\r\n let lastRef: TState | undefined;\r\n let lastResult: TResult | undefined;\r\n let lastDeps: SelectorDependency[] = [];\r\n return () => {\r\n const state = getSelectorStoreValueRef(storeName) as TState | undefined;\r\n if (state === undefined) return null;\r\n if (state === lastRef) return lastResult ?? null;\r\n if (lastRef !== undefined && lastDeps.length > 0 && !selectorDepsChanged(lastRef, state, lastDeps)) {\r\n lastRef = state;\r\n return lastResult ?? null;\r\n }\r\n const tracked = trackSelectorDependencies(state, selectorFn);\r\n lastRef = state;\r\n lastDeps = tracked.deps;\r\n lastResult = tracked.result;\r\n return lastResult ?? null;\r\n };\r\n};\r\n\r\nexport const subscribeWithSelector = <R>(\r\n name: string,\r\n selector: (state: any) => R,\r\n equality: (a: R, b: R) => boolean = Object.is,\r\n listener: (next: R, prev: R) => void\r\n): (() => void) => {\r\n if (typeof selector !== \"function\" || typeof listener !== \"function\") {\r\n warn(`subscribeWithSelector(\"${name}\") requires selector and listener functions.`);\r\n return () => {};\r\n }\r\n let hasPrev = false;\r\n let prevSel = undefined as R;\r\n\r\n const resolveSnapshotMode = (): SnapshotMode => {\r\n const mode = meta[name]?.options?.snapshot;\r\n return mode === \"shallow\" || mode === \"ref\" ? mode : \"deep\";\r\n };\r\n\r\n const getSafeSelectorState = (snapshot?: StoreValue | null): unknown => {\r\n const ref = snapshot !== undefined ? snapshot : getStoreSnapshot(name);\r\n if (ref === null || typeof ref !== \"object\") return ref;\r\n const mode = resolveSnapshotMode();\r\n if (mode === \"ref\") return ref;\r\n if (mode === \"shallow\") return shallowClone(ref);\r\n return deepClone(ref);\r\n };\r\n\r\n if (hasSelectorStoreEntry(name)) {\r\n prevSel = selector(getSafeSelectorState());\r\n hasPrev = true;\r\n }\r\n\r\n const wrapped = (_state: StoreValue | null) => {\r\n if (_state === null || !hasSelectorStoreEntry(name)) {\r\n hasPrev = false;\r\n prevSel = undefined as R;\r\n return;\r\n }\r\n const nextSel = selector(getSafeSelectorState(_state));\r\n if (!hasPrev) {\r\n hasPrev = true;\r\n prevSel = nextSel;\r\n listener(nextSel, nextSel);\r\n return;\r\n }\r\n const matches = equality(nextSel, prevSel);\r\n if (!matches) {\r\n const last = prevSel;\r\n prevSel = nextSel;\r\n listener(nextSel, last);\r\n }\r\n };\r\n return subscribeSelectorStore(name, wrapped);\r\n};\r\n\r\n\r\n","/**\r\n * @module internals/hooks-warnings\r\n *\r\n * LAYER: Internal subsystem\r\n * OWNS: Module-level behavior and exports for internals/hooks-warnings.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport { registerTestResetHook } from \"./test-reset.js\";\r\n\r\nconst _broadUseStoreWarnings = new Set<string>();\r\nconst _missingUseStoreWarnings = new Set<string>();\r\n\r\nexport const hasBroadUseStoreWarning = (name: string): boolean =>\r\n _broadUseStoreWarnings.has(name);\r\n\r\nexport const markBroadUseStoreWarning = (name: string): void => {\r\n if (name) _broadUseStoreWarnings.add(name);\r\n};\r\n\r\nexport const hasMissingUseStoreWarning = (name: string): boolean =>\r\n _missingUseStoreWarnings.has(name);\r\n\r\nexport const markMissingUseStoreWarning = (name: string): void => {\r\n if (name) _missingUseStoreWarnings.add(name);\r\n};\r\n\r\nexport const resetBroadUseStoreWarnings = (): void => {\r\n _broadUseStoreWarnings.clear();\r\n};\r\n\r\nexport const resetMissingUseStoreWarnings = (): void => {\r\n _missingUseStoreWarnings.clear();\r\n};\r\n\r\nregisterTestResetHook(\"hooks.broad-warning\", resetBroadUseStoreWarnings, 70);\r\nregisterTestResetHook(\"hooks.missing-warning\", resetMissingUseStoreWarnings, 80);\r\n\r\n\r\n","/**\r\n * @module hooks-core\r\n *\r\n * LAYER: React hooks\r\n * OWNS: Module-level behavior and exports for hooks-core.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport { useEffect, useCallback, useSyncExternalStore, useRef } from \"react\";\r\nimport { subscribeStore, getStoreSnapshot, hasStore } from \"./store.js\";\r\nimport { subscribeWithSelector } from \"./selectors.js\";\r\nimport { getByPath, warn, isDev, shallowEqual } from \"./utils.js\";\r\nimport type {\r\n Path,\r\n PathValue,\r\n StoreDefinition,\r\n StoreKey,\r\n StoreName,\r\n StateFor,\r\n} from \"./store-lifecycle/types.js\";\r\nimport {\r\n hasBroadUseStoreWarning,\r\n markBroadUseStoreWarning,\r\n hasMissingUseStoreWarning,\r\n markMissingUseStoreWarning,\r\n} from \"./internals/hooks-warnings.js\";\r\n\r\nconst pickPath = (data: any, path?: string) => {\r\n if (!path) return data;\r\n const current = getByPath(data, path);\r\n return current ?? null;\r\n};\r\n\r\ntype StoreSnapshot<T> = T extends object ? Readonly<T> : T;\r\n\r\ntype SelectorCache<R> = {\r\n hasValue: boolean;\r\n storeName: string;\r\n snapshot: unknown;\r\n selector: unknown;\r\n value: R | null;\r\n};\r\n\r\nconst createSelectorCache = <R,>(): SelectorCache<R> => ({\r\n hasValue: false,\r\n storeName: \"\",\r\n snapshot: undefined,\r\n selector: undefined,\r\n value: null,\r\n});\r\n\r\nconst readSelectorCache = <T, R>(\r\n storeName: string,\r\n snapshot: T | null,\r\n selectorRef: React.MutableRefObject<((state: T) => R) | undefined>,\r\n equalityRef: React.MutableRefObject<(a: R, b: R) => boolean>,\r\n cacheRef: React.MutableRefObject<SelectorCache<R>>\r\n): R | null => {\r\n if (snapshot === null || snapshot === undefined || !selectorRef.current) {\r\n cacheRef.current = {\r\n hasValue: true,\r\n storeName,\r\n snapshot,\r\n selector: selectorRef.current,\r\n value: null,\r\n };\r\n return null;\r\n }\r\n\r\n const currentSelector = selectorRef.current;\r\n const cache = cacheRef.current;\r\n if (\r\n cache.hasValue\r\n && cache.storeName === storeName\r\n && cache.snapshot === snapshot\r\n && cache.selector === currentSelector\r\n ) {\r\n return cache.value;\r\n }\r\n\r\n const next = currentSelector(snapshot);\r\n if (\r\n cache.hasValue\r\n && cache.storeName === storeName\r\n && equalityRef.current(next, cache.value as R)\r\n ) {\r\n cache.snapshot = snapshot;\r\n cache.selector = currentSelector;\r\n return cache.value;\r\n }\r\n\r\n cache.hasValue = true;\r\n cache.storeName = storeName;\r\n cache.snapshot = snapshot;\r\n cache.selector = currentSelector;\r\n cache.value = next;\r\n return next;\r\n};\r\n\r\nconst warnMissingStoreOnce = (name: string): void => {\r\n if (hasStore(name)) return;\r\n if (hasMissingUseStoreWarning(name)) return;\r\n markMissingUseStoreWarning(name);\r\n warn(\r\n `useStore(\"${name}\") - store not found yet.\\n` +\r\n `Component will update automatically when createStore(\"${name}\") is called.`\r\n );\r\n};\r\n\r\nconst warnBroadUseStoreOnce = (name: string, hasSelector: boolean, path?: string): void => {\r\n if (!isDev()) return;\r\n if (hasSelector || path) return;\r\n if (hasBroadUseStoreWarning(name)) return;\r\n markBroadUseStoreWarning(name);\r\n warn(\r\n `useStore(\"${name}\") without a selector/path subscribes to the entire store and may re-render on every change.\\n` +\r\n `Prefer useSelector/useStoreField for better performance.`\r\n );\r\n};\r\n\r\nexport function useStore<Name extends string, State, P extends Path<State>>(\r\n name: StoreDefinition<Name, State>,\r\n path: P\r\n): StoreSnapshot<PathValue<State, P>> | null;\r\nexport function useStore<Name extends string, State>(\r\n name: StoreDefinition<Name, State>,\r\n path?: undefined\r\n): StoreSnapshot<State> | null;\r\nexport function useStore<Name extends string, State, R>(\r\n name: StoreDefinition<Name, State>,\r\n selector: (state: StoreSnapshot<State>) => R,\r\n equalityFn?: (a: R, b: R) => boolean\r\n): R | null;\r\nexport function useStore<Name extends string, State, P extends Path<State>>(\r\n name: StoreKey<Name, State>,\r\n path: P\r\n): StoreSnapshot<PathValue<State, P>> | null;\r\nexport function useStore<Name extends string, State>(\r\n name: StoreKey<Name, State>,\r\n path?: undefined\r\n): StoreSnapshot<State> | null;\r\nexport function useStore<Name extends string, State, R>(\r\n name: StoreKey<Name, State>,\r\n selector: (state: StoreSnapshot<State>) => R,\r\n equalityFn?: (a: R, b: R) => boolean\r\n): R | null;\r\nexport function useStore<Name extends StoreName, P extends Path<StateFor<Name>>>(\r\n name: Name,\r\n path: P\r\n): StoreSnapshot<PathValue<StateFor<Name>, P>> | null;\r\nexport function useStore<Name extends StoreName>(\r\n name: Name,\r\n path?: undefined\r\n): StoreSnapshot<StateFor<Name>> | null;\r\nexport function useStore<Name extends StoreName, R>(\r\n name: Name,\r\n selector: (state: StoreSnapshot<StateFor<Name>>) => R,\r\n equalityFn?: (a: R, b: R) => boolean\r\n): R | null;\r\nexport function useStore<T = unknown, R = unknown>(\r\n name: string | StoreDefinition<string, T> | StoreKey<string, T>,\r\n pathOrSelector?: string | ((state: T) => R),\r\n equalityFn: (a: R, b: R) => boolean = Object.is\r\n): T | R | null {\r\n const storeName = typeof name === \"string\" ? name : name.name;\r\n const hasSelector = typeof pathOrSelector === \"function\";\r\n const path = typeof pathOrSelector === \"string\" ? pathOrSelector : undefined;\r\n const selector = hasSelector ? (pathOrSelector as (state: T) => R) : undefined;\r\n const selectorRef = useRef<typeof selector>(selector);\r\n const equalityRef = useRef(equalityFn);\r\n const selectorCache = useRef<SelectorCache<R>>(createSelectorCache<R>());\r\n const selectorIdentityWarned = useRef(false);\r\n const prevSelectorRef = useRef<typeof selector>(selector);\r\n\r\n selectorRef.current = selector;\r\n equalityRef.current = equalityFn;\r\n\r\n const readSelectedSnapshot = useCallback(\r\n (snapshot: T | null): R | null =>\r\n readSelectorCache(storeName, snapshot, selectorRef, equalityRef, selectorCache),\r\n [storeName]\r\n );\r\n\r\n const subscribe = useCallback(\r\n (fn: () => void) =>\r\n hasSelector\r\n ? subscribeWithSelector(\r\n storeName,\r\n (state) => selectorRef.current!(state as T),\r\n (a, b) => equalityRef.current(a, b),\r\n fn\r\n )\r\n : subscribeStore(storeName, () => fn()),\r\n [storeName, hasSelector]\r\n );\r\n\r\n const getSnapshot = useCallback(() => {\r\n const snap = getStoreSnapshot(storeName);\r\n warnMissingStoreOnce(storeName);\r\n warnBroadUseStoreOnce(storeName, hasSelector, path);\r\n if (hasSelector) {\r\n return readSelectedSnapshot(snap as T | null);\r\n }\r\n return pickPath(snap, path);\r\n }, [storeName, hasSelector, path, readSelectedSnapshot]);\r\n\r\n const state = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\r\n\r\n useEffect(() => {\r\n if (isDev() && hasSelector) {\r\n const prev = prevSelectorRef.current;\r\n if (prev && prev !== selector && !selectorIdentityWarned.current) {\r\n selectorIdentityWarned.current = true;\r\n warn(\r\n `useStore(\"${storeName}\") selector was recreated between renders. ` +\r\n `This can cause repeated subscriptions. Wrap the selector in useCallback or define it outside the component.`\r\n );\r\n }\r\n prevSelectorRef.current = selector;\r\n }\r\n\r\n }, [storeName, hasSelector, path, selector]);\r\n\r\n return state as StoreSnapshot<T> | R | null;\r\n}\r\n\r\nexport function useStoreField<Name extends string, State, P extends Path<State>>(\r\n storeName: StoreDefinition<Name, State> | StoreKey<Name, State>,\r\n field: P\r\n): StoreSnapshot<PathValue<State, P>> | null;\r\nexport function useStoreField<Name extends StoreName, P extends Path<StateFor<Name>>>(\r\n storeName: Name,\r\n field: P\r\n): StoreSnapshot<PathValue<StateFor<Name>, P>> | null;\r\nexport function useStoreField(storeName: any, field: any): unknown {\r\n return useStore(storeName, field);\r\n}\r\n\r\nexport function useSelector<Name extends string, State, R>(\r\n storeName: StoreDefinition<Name, State> | StoreKey<Name, State>,\r\n selectorFn: (state: StoreSnapshot<State>) => R,\r\n equalityFn?: (a: R, b: R) => boolean\r\n): R | null;\r\nexport function useSelector<Name extends StoreName, R>(\r\n storeName: Name,\r\n selectorFn: (state: StoreSnapshot<StateFor<Name>>) => R,\r\n equalityFn?: (a: R, b: R) => boolean\r\n): R | null;\r\nexport function useSelector<T = unknown, R = unknown>(\r\n storeName: string | StoreDefinition<string, T> | StoreKey<string, T>,\r\n selectorFn: (state: T) => R,\r\n equalityFn: (a: R, b: R) => boolean = shallowEqual\r\n): R | null {\r\n const resolvedName = typeof storeName === \"string\" ? storeName : storeName.name;\r\n const selectorRef = useRef(selectorFn);\r\n const equalityRef = useRef(equalityFn);\r\n const selectorCache = useRef<SelectorCache<R>>(createSelectorCache<R>());\r\n const selectorIdentityWarned = useRef(false);\r\n const prevSelectorRef = useRef(selectorFn);\r\n\r\n selectorRef.current = selectorFn;\r\n equalityRef.current = equalityFn;\r\n\r\n const selectValue = useCallback(\r\n (data: T | null): R | null =>\r\n readSelectorCache(resolvedName, data, selectorRef, equalityRef, selectorCache),\r\n [resolvedName]\r\n );\r\n\r\n const getSnap = useCallback(() => {\r\n const data = getStoreSnapshot(resolvedName) as T | null;\r\n warnMissingStoreOnce(resolvedName);\r\n return selectValue(data);\r\n }, [resolvedName, selectValue]);\r\n\r\n const subscribe = useCallback((notify: () => void) => {\r\n return subscribeWithSelector(\r\n resolvedName,\r\n (state) => selectorRef.current(state as T),\r\n (a, b) => equalityRef.current(a, b),\r\n () => notify()\r\n );\r\n }, [resolvedName]);\r\n\r\n const selection = useSyncExternalStore(subscribe, getSnap, getSnap);\r\n\r\n useEffect(() => {\r\n if (!isDev()) return;\r\n const prev = prevSelectorRef.current;\r\n if (prev && prev !== selectorFn && !selectorIdentityWarned.current) {\r\n selectorIdentityWarned.current = true;\r\n warn(\r\n `useSelector(\"${resolvedName}\") selector was recreated between renders. ` +\r\n `Wrap it in useCallback or define it outside the component to avoid resubscribe churn.`\r\n );\r\n }\r\n prevSelectorRef.current = selectorFn;\r\n }, [resolvedName, selectorFn]);\r\n\r\n return selection as R | null;\r\n}\r\n\r\nexport function useStoreStatic<Name extends string, State, P extends Path<State>>(\r\n name: StoreDefinition<Name, State> | StoreKey<Name, State>,\r\n path: P\r\n): StoreSnapshot<PathValue<State, P>> | null;\r\nexport function useStoreStatic<Name extends string, State>(\r\n name: StoreDefinition<Name, State> | StoreKey<Name, State>,\r\n path?: undefined\r\n): StoreSnapshot<State> | null;\r\nexport function useStoreStatic<Name extends StoreName, P extends Path<StateFor<Name>>>(\r\n name: Name,\r\n path: P\r\n): StoreSnapshot<PathValue<StateFor<Name>, P>> | null;\r\nexport function useStoreStatic<Name extends StoreName>(\r\n name: Name,\r\n path?: undefined\r\n): StoreSnapshot<StateFor<Name>> | null;\r\nexport function useStoreStatic(\r\n name: string | StoreDefinition<string, unknown> | StoreKey<string, unknown>,\r\n path?: string\r\n): unknown {\r\n const resolvedName = typeof name === \"string\" ? name : name.name;\r\n const data = getStoreSnapshot(resolvedName);\r\n warnMissingStoreOnce(resolvedName);\r\n if (data === null || data === undefined) return null;\r\n return pickPath(data, path);\r\n}\r\n\r\n\r\n","/**\r\n * @module hooks-async\r\n *\r\n * LAYER: React hooks\r\n * OWNS: Module-level behavior and exports for hooks-async.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport { useStore } from \"./hooks-core.js\";\r\nimport { store as storeHandle } from \"./store-name.js\";\r\nimport type { StoreDefinition, StoreKey, StoreName, StateFor } from \"./store-lifecycle/types.js\";\r\n\r\nexport type AsyncStoreState<T = unknown> = {\r\n data: T | null;\r\n loading: boolean;\r\n revalidating?: boolean;\r\n error: string | null;\r\n status: \"idle\" | \"loading\" | \"success\" | \"error\" | \"aborted\";\r\n};\r\n\r\nexport type AsyncDataFor<State> = State extends { data: infer T } ? T : unknown;\r\n\r\nexport type AsyncStoreSnapshot<T = unknown> = AsyncStoreState<T> & { isEmpty: boolean };\r\n\r\nexport function useAsyncStore<Name extends string, State extends AsyncStoreState>(\r\n name: StoreDefinition<Name, State> | StoreKey<Name, State>\r\n): AsyncStoreSnapshot<AsyncDataFor<State>>;\r\nexport function useAsyncStore<Name extends StoreName>(\r\n name: Name\r\n): AsyncStoreSnapshot<AsyncDataFor<StateFor<Name>>>;\r\nexport function useAsyncStore(\r\n name: string | StoreDefinition<string, AsyncStoreState> | StoreKey<string, AsyncStoreState>\r\n): AsyncStoreSnapshot {\r\n const handle = typeof name === \"string\" ? storeHandle<string, AsyncStoreState>(name) : name;\r\n const snapshot = useStore(handle);\r\n return {\r\n data: snapshot?.data ?? null,\r\n loading: snapshot?.loading ?? false,\r\n revalidating: snapshot?.revalidating ?? false,\r\n error: snapshot?.error ?? null,\r\n status: snapshot?.status ?? \"idle\",\r\n isEmpty: snapshot?.data == null && !snapshot?.loading && !snapshot?.error,\r\n };\r\n}\r\n\r\n\r\n","/**\r\n * @module hooks-form\r\n *\r\n * LAYER: React hooks\r\n * OWNS: Module-level behavior and exports for hooks-form.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport { useCallback } from \"react\";\r\nimport { useStore } from \"./hooks-core.js\";\r\nimport { setStore } from \"./store.js\";\r\nimport type {\r\n Path,\r\n PathValue,\r\n StoreDefinition,\r\n StoreKey,\r\n StoreName,\r\n StateFor,\r\n} from \"./store-lifecycle/types.js\";\r\n\r\ntype StoreSnapshot<T> = T extends object ? Readonly<T> : T;\r\n\r\nexport function useFormStore<Name extends string, State, P extends Path<State>>(\r\n storeName: StoreDefinition<Name, State> | StoreKey<Name, State>,\r\n field: P\r\n): { value: StoreSnapshot<PathValue<State, P>> | null; onChange: (eOrValue: any) => void };\r\nexport function useFormStore<Name extends StoreName, P extends Path<StateFor<Name>>>(\r\n storeName: Name,\r\n field: P\r\n): { value: StoreSnapshot<PathValue<StateFor<Name>, P>> | null; onChange: (eOrValue: any) => void };\r\nexport function useFormStore(\r\n storeName: StoreDefinition<string, unknown> | StoreKey<string, unknown> | StoreName,\r\n field: string\r\n) {\r\n const value = useStore(storeName as any, field as any);\r\n const onChange = useCallback(\r\n (eOrValue: unknown) => {\r\n const target = (eOrValue as { target?: { type?: string; checked?: boolean; value?: unknown } })?.target;\r\n const next = target\r\n ? target.type === \"checkbox\"\r\n ? !!target.checked\r\n : target.value\r\n : eOrValue;\r\n (setStore as any)(storeName, field, next);\r\n },\r\n [storeName, field]\r\n );\r\n return { value, onChange };\r\n}\r\n\r\n\r\n","/**\r\n * @module async-retry\r\n *\r\n * LAYER: Module\r\n * OWNS: Module-level behavior and exports for async-retry.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport { warn } from \"./utils.js\";\r\n\r\nexport const MAX_RETRY_ATTEMPTS = 10;\r\nexport const MIN_RETRY_DELAY_MS = 10;\r\nexport const MAX_RETRY_DELAY_MS = 30_000;\r\nexport const MAX_RETRY_BACKOFF = 8;\r\n\r\nexport const delay = (ms: number, signal?: AbortSignal): Promise<void> => new Promise((resolve) => {\r\n if (signal?.aborted) {\r\n resolve();\r\n return;\r\n }\r\n\r\n const timer = setTimeout(() => {\r\n signal?.removeEventListener(\"abort\", onAbort);\r\n resolve();\r\n }, ms);\r\n\r\n const onAbort = () => {\r\n clearTimeout(timer);\r\n signal?.removeEventListener(\"abort\", onAbort);\r\n resolve();\r\n };\r\n\r\n signal?.addEventListener(\"abort\", onAbort, { once: true });\r\n});\r\n\r\nconst normalizeRetryNumber = (name: string, label: \"retry\" | \"retryDelay\" | \"retryBackoff\", value: number, fallback: number): number => {\r\n if (!Number.isFinite(value)) {\r\n warn(`fetchStore(\"${name}\") received non-finite ${label}; using ${fallback}.`);\r\n return fallback;\r\n }\r\n return value;\r\n};\r\n\r\nexport const normalizeRetryOptions = (\r\n name: string,\r\n retry: number,\r\n retryDelay: number,\r\n retryBackoff: number\r\n): { retry: number; retryDelay: number; retryBackoff: number } => {\r\n const rawRetry = Number.isFinite(retry)\r\n ? retry\r\n : (retry > 0 ? MAX_RETRY_ATTEMPTS : 0);\r\n const safeRetry = Math.min(\r\n MAX_RETRY_ATTEMPTS,\r\n Math.max(0, Math.trunc(rawRetry))\r\n );\r\n if (!Number.isFinite(retry)) {\r\n warn(`fetchStore(\"${name}\") received non-finite retry; using ${safeRetry}.`);\r\n }\r\n const safeRetryDelay = Math.min(\r\n MAX_RETRY_DELAY_MS,\r\n Math.max(MIN_RETRY_DELAY_MS, normalizeRetryNumber(name, \"retryDelay\", retryDelay, 400))\r\n );\r\n const safeRetryBackoff = Math.min(\r\n MAX_RETRY_BACKOFF,\r\n Math.max(1, normalizeRetryNumber(name, \"retryBackoff\", retryBackoff, 1.7))\r\n );\r\n\r\n if (safeRetry !== retry) {\r\n warn(`fetchStore(\"${name}\") clamped retry attempts to ${safeRetry}.`);\r\n }\r\n if (safeRetryDelay !== retryDelay) {\r\n warn(`fetchStore(\"${name}\") clamped retryDelay to ${safeRetryDelay}ms.`);\r\n }\r\n if (safeRetryBackoff !== retryBackoff) {\r\n warn(`fetchStore(\"${name}\") clamped retryBackoff to ${safeRetryBackoff}.`);\r\n }\r\n\r\n return {\r\n retry: safeRetry,\r\n retryDelay: safeRetryDelay,\r\n retryBackoff: safeRetryBackoff,\r\n };\r\n};\r\n\r\n\r\n","/**\r\n * @module async/clone\r\n *\r\n * LAYER: Async subsystem\r\n * OWNS: Module-level behavior and exports for async/clone.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport type { FetchOptions } from \"../async-cache.js\";\r\nimport { deepClone, shallowClone } from \"../utils.js\";\r\n\r\nexport const cloneAsyncResult = (value: unknown, mode: FetchOptions[\"cloneResult\"]): unknown => {\r\n if (!mode || mode === \"none\") return value;\r\n if (value === null || typeof value !== \"object\") return value;\r\n if (mode === \"shallow\") return shallowClone(value);\r\n return deepClone(value);\r\n};\r\n\r\n\r\n","/**\r\n * @module async/errors\r\n *\r\n * LAYER: Async subsystem\r\n * OWNS: Module-level behavior and exports for async/errors.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport { critical, error, isDev, warn } from \"../utils.js\";\r\nimport { getConfig } from \"../internals/config.js\";\r\n\r\nexport const runAsyncHook = (\r\n name: string,\r\n label: \"onSuccess\" | \"onError\",\r\n fn: ((value: any) => void) | undefined,\r\n value: unknown\r\n): void => {\r\n if (typeof fn !== \"function\") return;\r\n try {\r\n fn(value);\r\n } catch (err) {\r\n warn(`fetchStore(\"${name}\") ${label} callback failed: ${(err as { message?: string })?.message ?? err}`);\r\n }\r\n};\r\n\r\nexport const reportAsyncUsageError = (\r\n name: string,\r\n message: string,\r\n onError?: (message: string) => void\r\n): null => {\r\n if (getConfig().strictAsyncUsageErrors) {\r\n return throwAsyncUsageError(name, message, onError);\r\n }\r\n runAsyncHook(name, \"onError\", onError, message);\r\n if (isDev()) {\r\n error(message);\r\n return null;\r\n }\r\n critical(message);\r\n return null;\r\n};\r\n\r\nexport const throwAsyncUsageError = (\r\n name: string,\r\n message: string,\r\n onError?: (message: string) => void\r\n): never => {\r\n runAsyncHook(name, \"onError\", onError, message);\r\n if (isDev()) {\r\n error(message);\r\n } else {\r\n critical(message);\r\n }\r\n throw new Error(message);\r\n};\r\n\r\n\r\n","/**\r\n * @module async/inflight\r\n *\r\n * LAYER: Async subsystem\r\n * OWNS: Module-level behavior and exports for async/inflight.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport { asyncMetrics, inflight, requestVersion } from \"../async-cache.js\";\r\nimport type { FetchOptions } from \"../async-cache.js\";\r\nimport { reportAsyncUsageError } from \"./errors.js\";\r\n\r\nexport type InflightEntry = { promise: Promise<unknown>; raw: Promise<unknown>; transform?: FetchOptions[\"transform\"] };\r\n\r\nexport const isCurrentRequest = (cacheSlot: string, version: number): boolean =>\r\n (requestVersion[cacheSlot] ?? 0) === version;\r\n\r\nexport const reserveRequestVersion = (cacheSlot: string): number => {\r\n const currentVersion = (requestVersion[cacheSlot] ?? 0) + 1;\r\n requestVersion[cacheSlot] = currentVersion;\r\n return currentVersion;\r\n};\r\n\r\nexport const clearRequestVersion = (cacheSlot: string, version: number): void => {\r\n if (requestVersion[cacheSlot] === version) delete requestVersion[cacheSlot];\r\n};\r\n\r\nexport const setInflightEntry = (cacheSlot: string, entry: InflightEntry): void => {\r\n (inflight as Record<string, InflightEntry>)[cacheSlot] = entry;\r\n};\r\n\r\nexport const clearInflightEntry = (cacheSlot: string): void => {\r\n delete inflight[cacheSlot];\r\n};\r\n\r\nexport const hasInflightEntry = (cacheSlot: string): boolean => Boolean(inflight[cacheSlot]);\r\n\r\nexport const tryDedupeRequest = (\r\n name: string,\r\n cacheSlot: string,\r\n transform: FetchOptions[\"transform\"] | undefined,\r\n onError?: (message: string) => void\r\n): Promise<unknown> | null | undefined => {\r\n const active = inflight[cacheSlot] as InflightEntry | undefined;\r\n if (!active) return undefined;\r\n\r\n asyncMetrics.dedupes += 1;\r\n if (transform && active.transform && active.transform !== transform) {\r\n reportAsyncUsageError(\r\n name,\r\n `fetchStore(\"${name}\") cannot dedupe callers that use different transform functions for cacheSlot \"${cacheSlot}\".`,\r\n onError\r\n );\r\n return null;\r\n }\r\n if (!transform || active.transform === transform) return active.promise;\r\n return active.raw.then((raw) => transform(raw));\r\n};\r\n\r\n\r\n","/**\r\n * @module async/rate\r\n *\r\n * LAYER: Async subsystem\r\n * OWNS: Module-level behavior and exports for async/rate.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport { getActiveAsyncRegistry, rateCount, ratePruneState, rateWindowStart } from \"../async-cache.js\";\r\nimport type { AsyncRegistry } from \"../async-registry.js\";\r\n\r\nexport const RATE_WINDOW_MS = 1000;\r\nexport const RATE_MAX = 100;\r\n\r\nconst pruneRateCountersForRegistry = (registry: AsyncRegistry, nowTs: number): void => {\r\n if (nowTs - registry.ratePruneState.lastAt < RATE_WINDOW_MS) return;\r\n registry.ratePruneState.lastAt = nowTs;\r\n Object.keys(registry.rateWindowStart).forEach((key) => {\r\n if (nowTs - (registry.rateWindowStart[key] ?? 0) > RATE_WINDOW_MS) {\r\n delete registry.rateWindowStart[key];\r\n delete registry.rateCount[key];\r\n }\r\n });\r\n};\r\n\r\nexport const pruneRateCounters = (nowTs: number): void => {\r\n pruneRateCountersForRegistry(getActiveAsyncRegistry(), nowTs);\r\n};\r\n\r\nexport const scheduleRatePrune = (delayMs = RATE_WINDOW_MS): void => {\r\n const registry = getActiveAsyncRegistry();\r\n if (registry.ratePruneTimer) return;\r\n if (typeof setTimeout !== \"function\") return;\r\n registry.ratePruneTimer = setTimeout(() => {\r\n registry.ratePruneTimer = null;\r\n pruneRateCountersForRegistry(registry, Date.now());\r\n }, delayMs);\r\n};\r\n\r\nexport const registerRateHit = (cacheSlot: string, nowTs: number): boolean => {\r\n const windowStart = rateWindowStart[cacheSlot];\r\n const currentCount = rateCount[cacheSlot] ?? 0;\r\n if (windowStart !== undefined && nowTs - windowStart < RATE_WINDOW_MS) {\r\n if (currentCount >= RATE_MAX) {\r\n return true;\r\n }\r\n rateCount[cacheSlot] = currentCount + 1;\r\n return false;\r\n }\r\n\r\n rateWindowStart[cacheSlot] = nowTs;\r\n rateCount[cacheSlot] = 1;\r\n return false;\r\n};\r\n\r\n\r\n","/**\r\n * @module async/request\r\n *\r\n * LAYER: Async subsystem\r\n * OWNS: Module-level behavior and exports for async/request.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport type { FetchOptions } from \"../async-cache.js\";\r\n\r\nexport const buildFetchOptions = (options: FetchOptions): RequestInit => {\r\n const fetchOpts: RequestInit = {};\r\n\r\n if (options.method) {\r\n fetchOpts.method = options.method.toUpperCase();\r\n }\r\n\r\n if (options.headers) {\r\n fetchOpts.headers = options.headers;\r\n } else {\r\n fetchOpts.headers = { \"Content-Type\": \"application/json\" };\r\n }\r\n\r\n if (options.body) {\r\n fetchOpts.body = typeof options.body === \"string\"\r\n ? options.body\r\n : JSON.stringify(options.body);\r\n }\r\n\r\n if (options.signal) {\r\n fetchOpts.signal = options.signal;\r\n }\r\n\r\n return fetchOpts;\r\n};\r\n\r\nexport const parseResponseBody = async (\r\n response: Response,\r\n responseType: FetchOptions[\"responseType\"]\r\n): Promise<unknown> => {\r\n const type = responseType ?? \"auto\";\r\n if (type === \"json\") return response.json();\r\n if (type === \"text\") return response.text();\r\n if (type === \"arrayBuffer\") return response.arrayBuffer();\r\n if (type === \"blob\") return response.blob();\r\n if (type === \"formData\") return response.formData();\r\n\r\n // auto-detect\r\n const contentType = response.headers.get(\"content-type\") || \"\";\r\n if (contentType.includes(\"application/json\") || contentType.includes(\"+json\")) {\r\n return response.json();\r\n }\r\n if (contentType.startsWith(\"text/\") || contentType.includes(\"xml\") || contentType.includes(\"html\")) {\r\n return response.text();\r\n }\r\n if (contentType.includes(\"form-data\")) return response.formData();\r\n return response.arrayBuffer();\r\n};\r\n\r\n\r\n","/**\r\n * @module async-fetch\r\n *\r\n * LAYER: Module\r\n * OWNS: Module-level behavior and exports for async-fetch.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport { createStore, setStore, hasStore, getStore } from \"./internals/store-ops.js\";\r\nimport { error, warn, isDev } from \"./utils.js\";\r\nimport { getConfig } from \"./internals/config.js\";\r\nimport { nameOf } from \"./store-lifecycle/identity.js\";\r\nimport type { StoreDefinition, StoreKey, StoreName } from \"./store-lifecycle/types.js\";\r\nimport {\r\n asyncMetrics,\r\n getCacheMeta,\r\n cleanupSubs,\r\n countInflightSlots,\r\n getFetchRegistry,\r\n MAX_INFLIGHT_SLOTS_PER_STORE,\r\n markWarned,\r\n mutableResultWarned,\r\n noSignalWarned,\r\n shapeWarned,\r\n autoCreateWarned,\r\n ensureCleanupSubscription,\r\n pruneAsyncCache,\r\n registerStoreCleanup,\r\n revalidateHandlers,\r\n revalidateKeys,\r\n storeCleanupFns,\r\n unregisterStoreCleanup,\r\n shouldUseCache,\r\n type FetchInput,\r\n type FetchOptions,\r\n type AsyncStateSnapshot,\r\n} from \"./async-cache.js\";\r\nimport { resetAsyncState } from \"./async-cache.js\";\r\nimport { delay, normalizeRetryOptions, MAX_RETRY_DELAY_MS } from \"./async-retry.js\";\r\nimport { cloneAsyncResult } from \"./async/clone.js\";\r\nimport { reportAsyncUsageError, runAsyncHook } from \"./async/errors.js\";\r\nimport {\r\n clearInflightEntry,\r\n clearRequestVersion,\r\n hasInflightEntry,\r\n isCurrentRequest,\r\n reserveRequestVersion,\r\n setInflightEntry,\r\n tryDedupeRequest,\r\n} from \"./async/inflight.js\";\r\nimport { RATE_MAX, RATE_WINDOW_MS, pruneRateCounters, registerRateHit, scheduleRatePrune } from \"./async/rate.js\";\r\nimport { buildFetchOptions, parseResponseBody } from \"./async/request.js\";\r\nconst _wildcardCleanups: Array<() => void> = [];\r\ntype AsyncState = AsyncStateSnapshot;\r\n\r\nconst looksLikeAsyncState = (value: unknown): boolean => {\r\n if (!value || typeof value !== \"object\") return false;\r\n const record = value as Record<string, unknown>;\r\n return (\"data\" in record) && (\"loading\" in record) && (\"error\" in record) && (\"status\" in record);\r\n};\r\n\r\nconst _applyAsyncState = (\r\n name: string,\r\n storeHandle: StoreDefinition<string, AsyncState>,\r\n next: AsyncStateSnapshot,\r\n options: FetchOptions\r\n): void => {\r\n if (!hasStore(name)) return;\r\n if (options.stateAdapter) {\r\n try {\r\n const prev = getStore({ name } as StoreDefinition<string, unknown>);\r\n const set = (value: unknown | ((draft: any) => void)) => {\r\n setStore(storeHandle as StoreDefinition<string, any>, value as any);\r\n };\r\n options.stateAdapter({\r\n name,\r\n prev,\r\n next,\r\n set,\r\n });\r\n } catch (err) {\r\n warn(`fetchStore(\"${name}\") stateAdapter failed: ${(err as { message?: string })?.message ?? err}`);\r\n }\r\n return;\r\n }\r\n setStore(storeHandle, next as AsyncState);\r\n};\r\n\r\nconst _settleAbort = (\r\n name: string,\r\n cacheSlot: string,\r\n version: number,\r\n applyState: (next: AsyncStateSnapshot) => void\r\n): null => {\r\n warn(`fetchStore(\"${name}\") aborted`);\r\n if (isCurrentRequest(cacheSlot, version) && hasStore(name)) {\r\n applyState({\r\n loading: false,\r\n error: \"aborted\",\r\n status: \"aborted\",\r\n revalidating: false,\r\n });\r\n }\r\n return null;\r\n};\r\n\r\nexport function fetchStore<Name extends string, State>(\r\n name: StoreDefinition<Name, State>,\r\n urlOrRequest: FetchInput,\r\n options?: FetchOptions\r\n): Promise<unknown>;\r\nexport function fetchStore<Name extends string, State>(\r\n name: StoreKey<Name, State>,\r\n urlOrRequest: FetchInput,\r\n options?: FetchOptions\r\n): Promise<unknown>;\r\nexport function fetchStore<Name extends StoreName>(\r\n name: Name,\r\n urlOrRequest: FetchInput,\r\n options?: FetchOptions\r\n): Promise<unknown>;\r\nexport async function fetchStore(\r\n nameInput: string | StoreDefinition<string, unknown>,\r\n urlOrRequest: FetchInput,\r\n options: FetchOptions = {}\r\n): Promise<unknown> {\r\n const name = nameOf(nameInput as StoreDefinition<string, unknown>);\r\n if (!name || typeof name !== \"string\") {\r\n error(`fetchStore requires a store name as first argument`);\r\n return;\r\n }\r\n const storeHandle = { name } as StoreDefinition<string, AsyncState>;\r\n\r\n if (!urlOrRequest) {\r\n error(`fetchStore(\"${name}\") requires a URL, Promise, or Promise factory as second argument`);\r\n return;\r\n }\r\n\r\n const {\r\n transform,\r\n onSuccess,\r\n onError,\r\n stateAdapter,\r\n method,\r\n headers,\r\n body,\r\n ttl,\r\n staleWhileRevalidate = false,\r\n dedupe = true,\r\n retry = 0,\r\n retryDelay = 400,\r\n retryBackoff = 1.7,\r\n signal,\r\n cacheKey,\r\n responseType = \"auto\",\r\n } = options;\r\n const cacheMeta = getCacheMeta();\r\n const fetchRegistry = getFetchRegistry();\r\n\r\n if (!signal && isDev() && !noSignalWarned.has(name)) {\r\n markWarned(noSignalWarned, name);\r\n warn(\r\n `fetchStore(\"${name}\") called without an AbortSignal. Provide \"signal\" to enable cancellation (recommended).`\r\n );\r\n }\r\n\r\n const cacheSlot = cacheKey ? `${name}:${cacheKey}` : name;\r\n const applyState = (next: AsyncStateSnapshot) =>\r\n _applyAsyncState(name, storeHandle, next, options);\r\n const isDirectPromiseInput =\r\n typeof urlOrRequest !== \"string\"\r\n && typeof urlOrRequest !== \"function\"\r\n && typeof (urlOrRequest as any)?.then === \"function\";\r\n const retryPolicy = normalizeRetryOptions(name, retry, retryDelay, retryBackoff);\r\n let promiseRetryNoticeIssued = false;\r\n const shouldWarnPromiseRetry = isDirectPromiseInput && retry > 0;\r\n\r\n const isProdServer = typeof window === \"undefined\"\r\n && (typeof process !== \"undefined\" ? process.env?.NODE_ENV : undefined) === \"production\";\r\n const autoCreate = options.autoCreate ?? getConfig().asyncAutoCreate;\r\n const cloneMode = options.cloneResult ?? getConfig().asyncCloneResult;\r\n\r\n if (stateAdapter && !hasStore(name)) {\r\n return reportAsyncUsageError(\r\n name,\r\n `fetchStore(\"${name}\") with stateAdapter requires an existing backing store.\\n` +\r\n `Call createStore(\"${name}\", ...) first or omit stateAdapter to use the default AsyncState shape.`,\r\n onError\r\n );\r\n }\r\n\r\n if (!hasStore(name) && isProdServer) {\r\n return reportAsyncUsageError(\r\n name,\r\n `fetchStore(\"${name}\") cannot create a backing store on the server in production.\\n` +\r\n `Use createStoreForRequest(...) inside the request scope or create the store ahead of time with { allowSSRGlobalStore: true }.`,\r\n onError\r\n );\r\n }\r\n\r\n if (!hasStore(name)) {\r\n if (!autoCreate) {\r\n return reportAsyncUsageError(\r\n name,\r\n `fetchStore(\"${name}\") requires an existing backing store when autoCreate is disabled.\\n` +\r\n `Call createStore(\"${name}\", ...) first or enable autoCreate.`,\r\n onError\r\n );\r\n }\r\n if (isDev() && !autoCreateWarned.has(name)) {\r\n markWarned(autoCreateWarned, name);\r\n const message =\r\n `fetchStore(\"${name}\") auto-created its backing store.\\n` +\r\n `Call createStore(\"${name}\", ...) first to avoid typos creating phantom stores.`;\r\n onError?.(message);\r\n warn(message);\r\n }\r\n createStore(name, {\r\n data: null,\r\n loading: false,\r\n error: null,\r\n status: \"idle\",\r\n } as AsyncState);\r\n if (!hasStore(name)) {\r\n return reportAsyncUsageError(\r\n name,\r\n `fetchStore(\"${name}\") could not initialize its backing store.\\n` +\r\n `On the server in production, use createStoreForRequest(...) inside the request scope ` +\r\n `or create the store with { allowSSRGlobalStore: true } before calling fetchStore.`,\r\n onError\r\n );\r\n }\r\n }\r\n\r\n if (!stateAdapter) {\r\n const existing = getStore({ name } as StoreDefinition<string, unknown>);\r\n if (existing && !looksLikeAsyncState(existing)) {\r\n if (!shapeWarned.has(name)) markWarned(shapeWarned, name);\r\n return reportAsyncUsageError(\r\n name,\r\n `fetchStore(\"${name}\") cannot write AsyncState into an existing non-async store. ` +\r\n `Provide a stateAdapter or create the store with the async shape to avoid overwriting fields.`,\r\n onError\r\n );\r\n }\r\n }\r\n ensureCleanupSubscription(name);\r\n\r\n let cachedData: unknown = null;\r\n let backgroundRevalidate = false;\r\n const readCachedData = () => cacheMeta[cacheSlot]?.data ?? null;\r\n\r\n if (shouldUseCache(cacheSlot, ttl)) {\r\n asyncMetrics.cacheHits += 1;\r\n cachedData = readCachedData();\r\n applyState({\r\n data: cachedData,\r\n loading: staleWhileRevalidate,\r\n error: null,\r\n status: \"success\",\r\n cached: true,\r\n revalidating: staleWhileRevalidate,\r\n });\r\n if (!staleWhileRevalidate) return cachedData;\r\n backgroundRevalidate = true;\r\n } else {\r\n asyncMetrics.cacheMisses += 1;\r\n }\r\n\r\n if (dedupe) {\r\n const deduped = tryDedupeRequest(name, cacheSlot, transform, onError);\r\n if (deduped !== undefined) return deduped;\r\n }\r\n\r\n const nowTs = Date.now();\r\n pruneRateCounters(nowTs);\r\n scheduleRatePrune();\r\n if (registerRateHit(cacheSlot, nowTs)) {\r\n return reportAsyncUsageError(\r\n name,\r\n `fetchStore(\"${name}\") rate limited: ${RATE_MAX} requests per ${RATE_WINDOW_MS}ms window for cacheSlot \"${cacheSlot}\".`,\r\n onError\r\n );\r\n }\r\n\r\n if (!hasInflightEntry(cacheSlot) && countInflightSlots(name) >= MAX_INFLIGHT_SLOTS_PER_STORE) {\r\n return reportAsyncUsageError(\r\n name,\r\n `fetchStore(\"${name}\") exceeded ${MAX_INFLIGHT_SLOTS_PER_STORE} concurrent request slots. Reuse cacheKey values, wait for pending requests, or delete the store to clear async state.`,\r\n onError\r\n );\r\n }\r\n\r\n const currentVersion = reserveRequestVersion(cacheSlot);\r\n\r\n if (!backgroundRevalidate) {\r\n applyState({\r\n loading: true,\r\n error: null,\r\n status: \"loading\",\r\n cached: false,\r\n revalidating: false,\r\n });\r\n }\r\n\r\n asyncMetrics.requests += 1;\r\n const startedAt = Date.now();\r\n\r\n const controller = !signal && typeof AbortController !== \"undefined\"\r\n ? new AbortController()\r\n : null;\r\n const mergedSignal = signal || controller?.signal;\r\n const abortOnCleanup = controller\r\n ? () => {\r\n if (!controller.signal.aborted) controller.abort();\r\n }\r\n : null;\r\n\r\n if (abortOnCleanup) {\r\n registerStoreCleanup(name, abortOnCleanup);\r\n }\r\n\r\n const executeFetch = async (): Promise<{ raw: unknown; transformed: unknown } | null> => {\r\n let attempts = 0;\r\n let delayMs = retryPolicy.retryDelay;\r\n while (true) {\r\n if (mergedSignal?.aborted) {\r\n return _settleAbort(name, cacheSlot, currentVersion, applyState);\r\n }\r\n\r\n const currentRequest = typeof urlOrRequest === \"function\" ? urlOrRequest() : urlOrRequest;\r\n const isPromiseRequest = isDirectPromiseInput\r\n || (typeof currentRequest !== \"string\" && typeof (currentRequest as any)?.then === \"function\");\r\n const effectiveRetryPolicy = isPromiseRequest ? { ...retryPolicy, retry: 0 } : retryPolicy;\r\n if (isPromiseRequest && (retry > 0 || shouldWarnPromiseRetry) && !promiseRetryNoticeIssued) {\r\n warn(`fetchStore(\"${name}\") ignores retry settings for direct Promise inputs; pass a URL string or factory to use retries.`);\r\n promiseRetryNoticeIssued = true;\r\n }\r\n\r\n try {\r\n let result: unknown;\r\n\r\n if (typeof currentRequest === \"string\") {\r\n const fetchOptions = buildFetchOptions({\r\n method,\r\n headers,\r\n body,\r\n signal: mergedSignal,\r\n ...options,\r\n });\r\n const response = await fetch(currentRequest, fetchOptions);\r\n if (!response.ok) {\r\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\r\n }\r\n result = await parseResponseBody(response, responseType);\r\n } else if (typeof (currentRequest as any).then === \"function\") {\r\n result = await currentRequest;\r\n } else {\r\n error(\r\n `fetchStore(\"${name}\") - second argument must be a URL string, Promise, or Promise factory.\\n` +\r\n `Examples:\\n` +\r\n ` fetchStore(\"users\", \"https://api.example.com/users\")\\n` +\r\n ` fetchStore(\"users\", () => fetch(\"https://api.example.com/users\"))`\r\n );\r\n return null;\r\n }\r\n\r\n if (mergedSignal?.aborted) {\r\n return _settleAbort(name, cacheSlot, currentVersion, applyState);\r\n }\r\n\r\n const transformed = transform ? transform(result) : result;\r\n if (transformed && typeof (transformed as any).then === \"function\") {\r\n return reportAsyncUsageError(\r\n name,\r\n `fetchStore(\"${name}\") transform must be synchronous. Return the transformed value directly instead of a Promise.`,\r\n onError\r\n );\r\n }\r\n\r\n if (cloneMode === \"none\" && isDev() && transformed && typeof transformed === \"object\") {\r\n if (!mutableResultWarned.has(name)) {\r\n markWarned(mutableResultWarned, name);\r\n warn(\r\n `fetchStore(\"${name}\") received a mutable object while asyncCloneResult is \"none\".\\n` +\r\n `Async data is stored by reference; mutations will affect cache and subscribers.\\n` +\r\n `Set cloneResult: \"deep\" (per call) or configureStroid({ asyncCloneResult: \"deep\" }).`\r\n );\r\n }\r\n }\r\n\r\n const cloned = cloneAsyncResult(transformed, cloneMode);\r\n\r\n if (mergedSignal?.aborted) {\r\n return _settleAbort(name, cacheSlot, currentVersion, applyState);\r\n }\r\n\r\n if (!isCurrentRequest(cacheSlot, currentVersion)) {\r\n return null; // stale, ignore\r\n }\r\n\r\n cacheMeta[cacheSlot] = {\r\n timestamp: Date.now(),\r\n expiresAt: ttl ? Date.now() + ttl : null,\r\n data: cloned,\r\n };\r\n pruneAsyncCache(name);\r\n\r\n applyState({\r\n data: cloned,\r\n loading: false,\r\n error: null,\r\n status: \"success\",\r\n cached: false,\r\n revalidating: false,\r\n });\r\n\r\n runAsyncHook(name, \"onSuccess\", onSuccess, cloned);\r\n const elapsed = Date.now() - startedAt;\r\n asyncMetrics.lastMs = elapsed;\r\n asyncMetrics.avgMs = ((asyncMetrics.avgMs * (asyncMetrics.requests - 1)) + elapsed) / asyncMetrics.requests;\r\n return { raw: result, transformed: cloned };\r\n } catch (err) {\r\n attempts += 1;\r\n const isAbort = (err as any)?.name === \"AbortError\";\r\n if (isAbort) {\r\n return _settleAbort(name, cacheSlot, currentVersion, applyState);\r\n }\r\n\r\n if (attempts <= effectiveRetryPolicy.retry) {\r\n if (mergedSignal?.aborted) return _settleAbort(name, cacheSlot, currentVersion, applyState);\r\n await delay(delayMs, mergedSignal);\r\n if (mergedSignal?.aborted) return _settleAbort(name, cacheSlot, currentVersion, applyState);\r\n delayMs = Math.min(MAX_RETRY_DELAY_MS, delayMs * effectiveRetryPolicy.retryBackoff);\r\n continue;\r\n }\r\n\r\n if (!isCurrentRequest(cacheSlot, currentVersion)) return null;\r\n\r\n const errorMessage = (err as any)?.message || \"Something went wrong\";\r\n applyState({\r\n data: backgroundRevalidate ? readCachedData() : null,\r\n loading: false,\r\n error: errorMessage,\r\n status: \"error\",\r\n cached: backgroundRevalidate,\r\n revalidating: false,\r\n });\r\n\r\n runAsyncHook(name, \"onError\", onError, errorMessage);\r\n asyncMetrics.failures += 1;\r\n warn(`fetchStore(\"${name}\") failed: ${errorMessage}`);\r\n return null;\r\n }\r\n }\r\n };\r\n\r\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\r\n const timeoutPromise = new Promise<{ raw: unknown; transformed: unknown } | null>((_, reject) => {\r\n if (signal) return;\r\n timeoutId = setTimeout(() => {\r\n timeoutId = null;\r\n reject(new Error(\"Timeout: async request hung for 60 seconds without an AbortSignal\"));\r\n }, 60000);\r\n });\r\n\r\n const execution = Promise.race([\r\n executeFetch().finally(() => {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n timeoutId = null;\r\n }\r\n }),\r\n timeoutPromise,\r\n ]).catch((err) => {\r\n const errorMessage = (err as any)?.message || \"Request timed out\";\r\n applyState({\r\n data: backgroundRevalidate ? readCachedData() : null,\r\n loading: false,\r\n error: errorMessage,\r\n status: \"error\",\r\n cached: backgroundRevalidate,\r\n revalidating: false,\r\n });\r\n runAsyncHook(name, \"onError\", onError, errorMessage);\r\n asyncMetrics.failures += 1;\r\n warn(`fetchStore(\"${name}\") failed: ${errorMessage}`);\r\n return null;\r\n });\r\n\r\n const promise = execution.then((res) => res?.transformed ?? null).finally(() => {\r\n clearInflightEntry(cacheSlot);\r\n clearRequestVersion(cacheSlot, currentVersion);\r\n if (abortOnCleanup) unregisterStoreCleanup(name, abortOnCleanup);\r\n });\r\n const rawPromise = execution.then((res) => res?.raw);\r\n\r\n setInflightEntry(cacheSlot, { promise, raw: rawPromise, transform });\r\n if (typeof urlOrRequest === \"function\") {\r\n fetchRegistry[name] = { kind: \"factory\", factory: urlOrRequest, options: { ...options, cacheKey } };\r\n } else if (typeof urlOrRequest === \"string\") {\r\n fetchRegistry[name] = { kind: \"url\", url: urlOrRequest, options: { ...options, cacheKey } };\r\n } else {\r\n delete fetchRegistry[name];\r\n }\r\n\r\n return promise;\r\n}\r\n\r\nexport function refetchStore<Name extends string, State>(name: StoreDefinition<Name, State>): Promise<unknown>;\r\nexport function refetchStore<Name extends string, State>(name: StoreKey<Name, State>): Promise<unknown>;\r\nexport function refetchStore<Name extends StoreName>(name: Name): Promise<unknown>;\r\nexport async function refetchStore(nameInput: string | StoreDefinition<string, unknown>): Promise<unknown> {\r\n const name = nameOf(nameInput as StoreDefinition<string, unknown>);\r\n if (!hasStore(name)) return undefined;\r\n const fetchRegistry = getFetchRegistry();\r\n const last = fetchRegistry[name];\r\n if (!last) {\r\n // Fallback: if we don't have a replayable fetch recipe (e.g. direct Promise input),\r\n // return the most recent cached value for this store when available.\r\n const prefix = `${name}:`;\r\n const cacheMeta = getCacheMeta();\r\n const slots = Object.entries(cacheMeta).filter(([key]) =>\r\n key === name || key.startsWith(prefix)\r\n );\r\n\r\n if (slots.length > 0) {\r\n const [, meta] = slots.reduce(\r\n (latest, entry) =>\r\n entry[1].timestamp >= latest[1].timestamp ? entry : latest\r\n );\r\n return meta.data;\r\n }\r\n\r\n if (isDev()) {\r\n warn(\r\n `refetchStore(\"${name}\") - no previous fetch found.\\n` +\r\n `Call fetchStore(\"${name}\", url) first.`\r\n );\r\n }\r\n return undefined;\r\n }\r\n const handle = { name } as StoreDefinition<string, AsyncState>;\r\n if (last.kind === \"factory\") {\r\n return fetchStore(handle, last.factory, last.options);\r\n }\r\n return fetchStore(handle, last.url, last.options);\r\n}\r\n\r\nexport function enableRevalidateOnFocus<Name extends string, State>(\r\n name: StoreDefinition<Name, State>,\r\n overrides?: Partial<FetchOptions> & { debounceMs?: number; maxConcurrent?: number; staggerMs?: number; priority?: \"high\" | \"normal\" }\r\n): (() => void);\r\nexport function enableRevalidateOnFocus<Name extends string, State>(\r\n name: StoreKey<Name, State>,\r\n overrides?: Partial<FetchOptions> & { debounceMs?: number; maxConcurrent?: number; staggerMs?: number; priority?: \"high\" | \"normal\" }\r\n): (() => void);\r\nexport function enableRevalidateOnFocus<Name extends StoreName>(\r\n name?: Name | \"*\",\r\n overrides?: Partial<FetchOptions> & { debounceMs?: number; maxConcurrent?: number; staggerMs?: number; priority?: \"high\" | \"normal\" }\r\n): (() => void);\r\nexport function enableRevalidateOnFocus(\r\n nameInput?: string | StoreDefinition<string, unknown>,\r\n overrides?: Partial<FetchOptions> & { debounceMs?: number; maxConcurrent?: number; staggerMs?: number; priority?: \"high\" | \"normal\" }\r\n): (() => void) {\r\n if (typeof window === \"undefined\" || typeof window.addEventListener !== \"function\") return () => {};\r\n const resolvedName = nameInput === \"*\" ? \"*\" : (nameInput ? nameOf(nameInput as StoreDefinition<string, unknown>) : undefined);\r\n const key = resolvedName ?? \"*\";\r\n if (revalidateKeys.has(key)) return revalidateHandlers[key] ?? (() => {});\r\n const focusConfig = getConfig().revalidateOnFocus;\r\n const debounceMs = Math.max(0, overrides?.debounceMs ?? focusConfig.debounceMs);\r\n const maxConcurrent = Math.max(1, overrides?.maxConcurrent ?? focusConfig.maxConcurrent);\r\n const staggerMs = Math.max(0, overrides?.staggerMs ?? focusConfig.staggerMs);\r\n let debounceTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n const runRefetch = () => {\r\n const fetchRegistry = getFetchRegistry();\r\n let targets = key === \"*\" ? Object.keys(fetchRegistry) : [key];\r\n if (overrides?.priority === \"high\" && key !== \"*\") {\r\n targets = [key, ...targets.filter((t) => t !== key)];\r\n }\r\n if (targets.length === 0) return;\r\n let index = 0;\r\n const launchNext = () => {\r\n const batch = targets.slice(index, index + maxConcurrent);\r\n batch.forEach((storeName, offset) => {\r\n const fire = () => {\r\n const fetchRegistry = getFetchRegistry();\r\n const last = fetchRegistry[storeName];\r\n if (!last) {\r\n void refetchStore({ name: storeName } as StoreDefinition<string, AsyncState>);\r\n return;\r\n }\r\n if (last.kind === \"factory\") {\r\n void fetchStore({ name: storeName } as StoreDefinition<string, AsyncState>, last.factory, last.options);\r\n } else {\r\n void fetchStore({ name: storeName } as StoreDefinition<string, AsyncState>, last.url, last.options);\r\n }\r\n };\r\n if (staggerMs > 0) {\r\n setTimeout(fire, offset * staggerMs);\r\n } else {\r\n fire();\r\n }\r\n });\r\n index += batch.length;\r\n if (index < targets.length) {\r\n const delayMs = staggerMs > 0 ? staggerMs * Math.max(1, batch.length) : 0;\r\n setTimeout(launchNext, delayMs);\r\n }\r\n };\r\n launchNext();\r\n };\r\n\r\n const handler = () => {\r\n // For zero-debounce configs, run immediately to avoid relying on timers\r\n // (helps test environments and keeps default behaviour snappy).\r\n if (debounceMs === 0) {\r\n runRefetch();\r\n return;\r\n }\r\n if (debounceTimer !== null) clearTimeout(debounceTimer);\r\n debounceTimer = setTimeout(runRefetch, debounceMs);\r\n };\r\n\r\n window.addEventListener(\"focus\", handler);\r\n window.addEventListener(\"online\", handler);\r\n revalidateKeys.add(key);\r\n const cleanup = () => {\r\n window.removeEventListener(\"focus\", handler);\r\n window.removeEventListener(\"online\", handler);\r\n if (debounceTimer !== null) {\r\n clearTimeout(debounceTimer);\r\n debounceTimer = null;\r\n }\r\n revalidateKeys.delete(key);\r\n delete revalidateHandlers[key];\r\n if (key !== \"*\") {\r\n unregisterStoreCleanup(key, cleanup);\r\n } else {\r\n const idx = _wildcardCleanups.indexOf(cleanup);\r\n if (idx !== -1) _wildcardCleanups.splice(idx, 1);\r\n }\r\n };\r\n revalidateHandlers[key] = cleanup;\r\n if (key !== \"*\") {\r\n registerStoreCleanup(key, cleanup);\r\n } else {\r\n _wildcardCleanups.push(cleanup);\r\n }\r\n return cleanup;\r\n}\r\n\r\nexport const getAsyncMetrics = () => ({ ...asyncMetrics });\r\n\r\nexport const _resetAsyncStateForTests = (): void => {\r\n cleanupAllRevalidateHandlers();\r\n resetAsyncState();\r\n};\r\nexport const cleanupAllRevalidateHandlers = (): void => {\r\n _wildcardCleanups.forEach(fn => fn());\r\n _wildcardCleanups.length = 0;\r\n};\r\n\r\n\r\n","/**\r\n * @module hooks-async-suspense\r\n *\r\n * LAYER: React hooks\r\n * OWNS: Module-level behavior and exports for hooks-async-suspense.\r\n *\r\n * Consumers: Internal imports and public API.\r\n */\r\nimport { useMemo } from \"react\";\r\nimport type { FetchInput, FetchOptions } from \"./async-cache.js\";\r\nimport { getFetchRegistry, inflight } from \"./async-cache.js\";\r\nimport { fetchStore, refetchStore } from \"./async-fetch.js\";\r\nimport { useAsyncStore, type AsyncDataFor, type AsyncStoreState } from \"./hooks-async.js\";\r\nimport { store } from \"./store.js\";\r\nimport type { StoreDefinition, StoreKey, StoreName, StateFor } from \"./store-lifecycle/types.js\";\r\n\r\nconst EMPTY_OPTIONS: FetchOptions = {};\r\n\r\nexport function useAsyncStoreSuspense<Name extends string, State extends AsyncStoreState, T = AsyncDataFor<State>>(\r\n name: StoreDefinition<Name, State> | StoreKey<Name, State>,\r\n input?: FetchInput,\r\n options?: FetchOptions\r\n): T;\r\nexport function useAsyncStoreSuspense<Name extends StoreName, T = AsyncDataFor<StateFor<Name>>>(\r\n name: Name,\r\n input?: FetchInput,\r\n options?: FetchOptions\r\n): T;\r\nexport function useAsyncStoreSuspense<T = unknown>(\r\n name: string | StoreDefinition<string, AsyncStoreState> | StoreKey<string, AsyncStoreState>,\r\n input?: FetchInput,\r\n options?: FetchOptions,\r\n): T {\r\n const resolvedOptions = options ?? EMPTY_OPTIONS;\r\n const storeName = typeof name === \"string\" ? name : name.name;\r\n const storeHandle = useMemo(\r\n () => (typeof name === \"string\" ? store(name) : name),\r\n [name]\r\n ) as StoreDefinition<string, AsyncStoreState> | StoreKey<string, AsyncStoreState>;\r\n const snapshot = useAsyncStore(storeHandle as StoreDefinition<string, AsyncStoreState>);\r\n const pending = snapshot.loading || snapshot.status === \"idle\";\r\n const cacheSlot = resolvedOptions.cacheKey ? `${storeName}:${resolvedOptions.cacheKey}` : storeName;\r\n\r\n const promise = useMemo(() => {\r\n if (!pending) return null;\r\n const active = inflight[cacheSlot]?.promise as Promise<unknown> | undefined;\r\n if (active) return active;\r\n if (input !== undefined) return fetchStore(storeHandle, input, resolvedOptions);\r\n const fetchRegistry = getFetchRegistry();\r\n if (fetchRegistry[storeName]) return refetchStore(storeHandle);\r\n return null;\r\n }, [cacheSlot, input, storeHandle, storeName, resolvedOptions, pending]);\r\n\r\n if (promise) throw promise;\r\n if (snapshot.error) throw new Error(snapshot.error);\r\n return snapshot.data as T;\r\n}\r\n\r\n\r\n"]}