stroid 0.1.3 → 0.1.4

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 (133) hide show
  1. package/CHANGELOG.md +312 -265
  2. package/README.md +1017 -115
  3. package/dist/async.d.ts +1 -1
  4. package/dist/async.js +1 -33
  5. package/dist/chunk-645IESIU.js +2 -0
  6. package/dist/chunk-6ELWGQ4Q.js +2 -0
  7. package/dist/chunk-BW32TJGE.js +13 -0
  8. package/dist/chunk-FOQKGHPS.js +26 -0
  9. package/dist/chunk-KQCSFGHJ.js +2 -0
  10. package/dist/chunk-M2NJVI36.js +2 -0
  11. package/dist/chunk-PVATWAY4.js +2 -0
  12. package/dist/chunk-X3JR32JD.js +2 -0
  13. package/dist/chunk-YU5GMPCC.js +2 -0
  14. package/dist/computed-types.d.ts +42 -0
  15. package/dist/computed-types.js +2 -0
  16. package/dist/computed.d.ts +9 -2
  17. package/dist/computed.js +1 -12
  18. package/dist/core.js +1 -22
  19. package/dist/devtools.d.ts +1 -1
  20. package/dist/devtools.js +1 -1
  21. package/dist/feature.js +1 -1
  22. package/dist/helpers.js +1 -22
  23. package/dist/index-internal.d.ts +1 -1
  24. package/dist/index.d.cts +3 -1
  25. package/dist/index.d.ts +3 -1
  26. package/dist/index.js +1 -35
  27. package/dist/install.js +1 -1
  28. package/dist/options.d.ts +1 -1
  29. package/dist/persist.js +1 -1
  30. package/dist/psr.d.ts +48 -0
  31. package/dist/psr.js +2 -0
  32. package/dist/react/index.d.ts +3 -1
  33. package/dist/react/index.js +5 -36
  34. package/dist/registry.d.ts +1 -0
  35. package/dist/runtime-admin.js +1 -1
  36. package/dist/runtime-patch.d.ts +29 -0
  37. package/dist/runtime-tools.d.ts +6 -1
  38. package/dist/runtime-tools.js +1 -3
  39. package/dist/selectors.js +1 -1
  40. package/dist/server.d.ts +4 -1
  41. package/dist/server.js +1 -12
  42. package/dist/store-registry.d.ts +8 -0
  43. package/dist/sync.js +1 -1
  44. package/dist/testing.js +1 -22
  45. package/dist/types/adapters/options.d.ts +335 -0
  46. package/dist/types/async/cache.d.ts +40 -0
  47. package/dist/types/async/clone.d.ts +10 -0
  48. package/dist/types/async/errors.d.ts +3 -0
  49. package/dist/types/async/fetch.d.ts +37 -0
  50. package/dist/types/async/inflight.d.ts +30 -0
  51. package/dist/types/async/rate.d.ts +5 -0
  52. package/dist/types/async/registry.d.ts +117 -0
  53. package/dist/types/async/request.d.ts +11 -0
  54. package/dist/types/async/retry.d.ts +10 -0
  55. package/dist/types/async.d.ts +10 -0
  56. package/dist/types/computed/computed-graph.d.ts +33 -0
  57. package/dist/types/computed/index.d.ts +21 -0
  58. package/dist/types/computed/types.d.ts +40 -0
  59. package/dist/types/config.d.ts +10 -0
  60. package/dist/types/core/index.d.ts +11 -0
  61. package/dist/types/core/lifecycle-hooks.d.ts +16 -0
  62. package/dist/types/core/runtime-patch.d.ts +67 -0
  63. package/dist/types/core/store-admin-impl.d.ts +9 -0
  64. package/dist/types/core/store-admin.d.ts +9 -0
  65. package/dist/types/core/store-core.d.ts +13 -0
  66. package/dist/types/core/store-create.d.ts +16 -0
  67. package/dist/types/core/store-hydrate-impl.d.ts +35 -0
  68. package/dist/types/core/store-hydrate.d.ts +9 -0
  69. package/dist/types/core/store-lifecycle/hooks.d.ts +20 -0
  70. package/dist/types/core/store-lifecycle/identity.d.ts +23 -0
  71. package/dist/types/core/store-lifecycle/registry.d.ts +54 -0
  72. package/dist/types/core/store-lifecycle/types.d.ts +67 -0
  73. package/dist/types/core/store-lifecycle/validation.d.ts +53 -0
  74. package/dist/types/core/store-name.d.ts +28 -0
  75. package/dist/types/core/store-notify.d.ts +13 -0
  76. package/dist/types/core/store-read.d.ts +18 -0
  77. package/dist/types/core/store-registry.d.ts +115 -0
  78. package/dist/types/core/store-replace-impl.d.ts +11 -0
  79. package/dist/types/core/store-replace.d.ts +9 -0
  80. package/dist/types/core/store-set-impl.d.ts +13 -0
  81. package/dist/types/core/store-set.d.ts +9 -0
  82. package/dist/types/core/store-shared/core.d.ts +13 -0
  83. package/dist/types/core/store-shared/notify.d.ts +12 -0
  84. package/dist/types/core/store-transaction.d.ts +28 -0
  85. package/dist/types/core/store-write-shared.d.ts +25 -0
  86. package/dist/types/core/store-write.d.ts +13 -0
  87. package/dist/types/features/feature-registry.d.ts +91 -0
  88. package/dist/types/features/lifecycle.d.ts +40 -0
  89. package/dist/types/index.d.ts +17 -0
  90. package/dist/types/integrations/query.d.ts +8 -0
  91. package/dist/types/internals/computed-order.d.ts +3 -0
  92. package/dist/types/internals/config.d.ts +116 -0
  93. package/dist/types/internals/diagnostics.d.ts +21 -0
  94. package/dist/types/internals/reporting.d.ts +9 -0
  95. package/dist/types/internals/store-admin.d.ts +7 -0
  96. package/dist/types/internals/store-ops.d.ts +13 -0
  97. package/dist/types/internals/test-reset.d.ts +2 -0
  98. package/dist/types/internals/write-context.d.ts +20 -0
  99. package/dist/types/notification/delivery.d.ts +3 -0
  100. package/dist/types/notification/index.d.ts +10 -0
  101. package/dist/types/notification/metrics.d.ts +12 -0
  102. package/dist/types/notification/priority.d.ts +9 -0
  103. package/dist/types/notification/scheduler.d.ts +11 -0
  104. package/dist/types/notification/snapshot.d.ts +8 -0
  105. package/dist/types/runtime-admin/index.d.ts +2 -0
  106. package/dist/types/runtime-tools/index.d.ts +63 -0
  107. package/dist/types/store.d.ts +16 -0
  108. package/dist/types/types/utility.d.ts +17 -0
  109. package/dist/types/utils/clone.d.ts +4 -0
  110. package/dist/types/utils/devfreeze.d.ts +2 -0
  111. package/dist/types/utils/hash.d.ts +8 -0
  112. package/dist/types/utils/path.d.ts +5 -0
  113. package/dist/types/utils/validation.d.ts +14 -0
  114. package/dist/types/utils.d.ts +13 -0
  115. package/dist/types.d.ts +2 -2
  116. package/package.json +31 -20
  117. package/dist/async.js.map +0 -1
  118. package/dist/computed.js.map +0 -1
  119. package/dist/core.js.map +0 -1
  120. package/dist/devtools.js.map +0 -1
  121. package/dist/feature.js.map +0 -1
  122. package/dist/helpers.js.map +0 -1
  123. package/dist/index.js.map +0 -1
  124. package/dist/install.js.map +0 -1
  125. package/dist/persist.js.map +0 -1
  126. package/dist/react/index.js.map +0 -1
  127. package/dist/runtime-admin.js.map +0 -1
  128. package/dist/runtime-tools.js.map +0 -1
  129. package/dist/selectors.js.map +0 -1
  130. package/dist/server.js.map +0 -1
  131. package/dist/sync.js.map +0 -1
  132. package/dist/testing.js.map +0 -1
  133. package/dist/tsdoc-metadata.json +0 -11
@@ -1,2 +1,2 @@
1
- var ot=new Map;var ye=e=>ot.get(e),J=()=>Array.from(ot.keys());var it=()=>new Map([["noSignal",new Set],["shape",new Set],["autoCreate",new Set],["mutableResult",new Set]]),at=()=>({fetchRegistry:Object.create(null),inflight:Object.create(null),requestVersion:Object.create(null),cacheMeta:Object.create(null),rateWindowStart:Object.create(null),rateCount:Object.create(null),ratePruneState:{lastAt:0},ratePruneTimer:null,warnedOnce:it(),storeCleanups:Object.create(null),revalidateKeys:new Set,revalidateHandlers:Object.create(null),asyncMetrics:{cacheHits:0,cacheMisses:0,dedupes:0,requests:0,failures:0,avgMs:0,lastMs:0}}),he=e=>{Object.values(e.storeCleanups).forEach(t=>{Object.values(t).forEach(r=>{r?.forEach(n=>{try{n();}catch{}});});}),Object.keys(e.fetchRegistry).forEach(t=>delete e.fetchRegistry[t]),Object.keys(e.inflight).forEach(t=>delete e.inflight[t]),Object.keys(e.requestVersion).forEach(t=>delete e.requestVersion[t]),Object.keys(e.cacheMeta).forEach(t=>delete e.cacheMeta[t]),Object.keys(e.rateWindowStart).forEach(t=>delete e.rateWindowStart[t]),Object.keys(e.rateCount).forEach(t=>delete e.rateCount[t]),Object.keys(e.storeCleanups).forEach(t=>delete e.storeCleanups[t]),Object.keys(e.revalidateHandlers).forEach(t=>delete e.revalidateHandlers[t]),e.revalidateKeys.clear(),e.warnedOnce.forEach(t=>t.clear()),e.warnedOnce.clear(),it().forEach((t,r)=>{e.warnedOnce.set(r,t);}),e.ratePruneState.lastAt=0,e.ratePruneTimer&&(clearTimeout(e.ratePruneTimer),e.ratePruneTimer=null),e.asyncMetrics.cacheHits=0,e.asyncMetrics.cacheMisses=0,e.asyncMetrics.dedupes=0,e.asyncMetrics.requests=0,e.asyncMetrics.failures=0,e.asyncMetrics.avgMs=0,e.asyncMetrics.lastMs=0;};var Zt=new Map,v=(e,t,r=0)=>{!e||typeof t!="function"||Zt.set(e,{name:e,order:r,fn:t});};var Me=new Map,ct=new WeakSet,Ee=e=>{ct.has(e)||(ct.add(e),J().forEach(t=>{if(!e.featureRuntimes.get(t)){let r=ye(t);r&&e.featureRuntimes.set(t,r());}}));},er=typeof __STROID_REGISTRY_ID__<"u"&&__STROID_REGISTRY_ID__||typeof process<"u"&&process.env?.STROID_REGISTRY_ID||void 0,ut,Te=e=>(ut||er||e).replace(/\.ts(\?|$)/,".js$1"),Q=Te("stroid:default-registry");var tr=()=>{ut=void 0,Me.clear();};v("registry.scope-override",tr,110);var rr=()=>({pendingNotifications:new Set,pendingBuffer:[],orderedNames:[],notifyScheduled:false,batchDepth:0,flushId:0,isFlushing:false}),nr=e=>{e.pendingNotifications.clear(),e.pendingBuffer.length=0,e.orderedNames.length=0,e.notifyScheduled=false,e.batchDepth=0,e.flushId=0,e.isFlushing=false;},or=()=>({depth:0,pending:[],stagedValues:new Map,snapshotCache:new Map,failed:false,error:void 0}),sr=(e="default")=>{let t={scope:e,stores:Object.create(null),subscribers:Object.create(null),initialStates:Object.create(null),initialFactories:Object.create(null),metaEntries:Object.create(null),snapshotCache:Object.create(null),featureRuntimes:new Map,deletingStores:new Set,computedEntries:Object.create(null),computedDependents:Object.create(null),computedCleanups:new Map,transaction:or(),async:at(),notify:rr(),lifecycleListener:null};return Ee(t),t},Z=e=>{let t=Te(e),r=Me.get(t);if(r)return r;let n=sr();return Me.set(t,n),n},ee=(e,t)=>Object.prototype.hasOwnProperty.call(e.stores,t);var lt=e=>{e.computedCleanups.forEach(t=>{try{t();}catch{}}),e.computedCleanups.clear(),[e.stores,e.subscribers,e.initialStates,e.initialFactories,e.metaEntries,e.snapshotCache,e.computedEntries,e.computedDependents].forEach(t=>{Object.keys(t).forEach(r=>{delete t[r];});}),e.deletingStores.clear(),e.transaction.depth=0,e.transaction.pending=[],e.transaction.stagedValues.clear(),e.transaction.snapshotCache.clear(),e.transaction.failed=false,e.transaction.error=void 0,nr(e.notify),he(e.async),e.lifecycleListener=null;};var Fe=(e,t)=>{try{e.lifecycleListener?.(t);}catch{}};var z=[],ft={run:(e,t)=>{z.push(e);try{return t()}finally{z.pop();}},get:()=>z.length>0?z[z.length-1]:null,enterWith:e=>{if(z.length>0){z[z.length-1]=e;return}z.push(e);}};var L=e=>(ft).get()||e||Z(Q);var ar={log:(e,t)=>{typeof console<"u"&&typeof console.log=="function"&&(t?console.log(`[stroid] ${e}`,t):console.log(`[stroid] ${e}`));},warn:(e,t)=>{typeof console<"u"&&typeof console.warn=="function"&&(t?console.warn(`[stroid] ${e}`,t):console.warn(`[stroid] ${e}`));},critical:(e,t)=>{typeof console<"u"&&typeof console.error=="function"&&(t?console.error(`[stroid] ${e}`,t):console.error(`[stroid] ${e}`));}},gt={logSink:ar,flush:{chunkSize:Number.POSITIVE_INFINITY,chunkDelayMs:0,priorityStores:[]},revalidateOnFocus:{debounceMs:0,maxConcurrent:3,staggerMs:100},namespace:"",strictMissingFeatures:true,assertRuntime:false,strictMutatorReturns:true,asyncAutoCreate:false,asyncCloneResult:"none",autoCorrelationIds:false,acknowledgeLooseTypes:false,pathCacheSize:500,defaultSnapshotMode:"deep",strictAsyncUsageErrors:false,middleware:[],allowUntrustedHydration:false,mutatorProduce:void 0,selectorCloneFrozen:true},Oe=e=>({logSink:{...e.logSink},flush:{...e.flush},revalidateOnFocus:{...e.revalidateOnFocus},namespace:e.namespace,strictMissingFeatures:e.strictMissingFeatures,assertRuntime:e.assertRuntime,strictMutatorReturns:e.strictMutatorReturns,asyncAutoCreate:e.asyncAutoCreate,asyncCloneResult:e.asyncCloneResult,autoCorrelationIds:e.autoCorrelationIds,acknowledgeLooseTypes:e.acknowledgeLooseTypes,pathCacheSize:e.pathCacheSize,defaultSnapshotMode:e.defaultSnapshotMode,strictAsyncUsageErrors:e.strictAsyncUsageErrors,middleware:[...e.middleware],allowUntrustedHydration:e.allowUntrustedHydration,mutatorProduce:e.mutatorProduce,selectorCloneFrozen:e.selectorCloneFrozen}),je=new WeakMap,yt=Oe(gt),cr=e=>{let t=je.get(e);return t||(t=Oe(yt),je.set(e,t)),t};var j=()=>cr(L());var fr=()=>{je=new WeakMap,yt=Oe(gt);};v("config.reset",fr,90);var pr=typeof process<"u"&&typeof process.env?.NODE_ENV=="string"?process.env.NODE_ENV:void 0,gr=typeof import.meta<"u"&&import.meta?.env?.MODE?import.meta.env.MODE:void 0,ht=typeof globalThis<"u"&&typeof globalThis.__STROID_DEV__=="boolean"?globalThis.__STROID_DEV__:void 0,yr="production",hr=pr??gr??yr,Se=typeof ht=="boolean"?ht:hr!=="production",M=()=>Se,St=(e,t)=>{typeof console<"u"&&typeof console.warn=="function"&&(t?console.warn(`[stroid] ${e}`,t):console.warn(`[stroid] ${e}`));},Sr=(e,t)=>{typeof console<"u"&&typeof console.error=="function"&&(t?console.error(`[stroid] ${e}`,t):console.error(`[stroid] ${e}`));},mr=(e,t)=>{typeof console<"u"&&typeof console.log=="function"&&(t?console.log(`[stroid] ${e}`,t):console.log(`[stroid] ${e}`));},De=(e,t)=>{if((j().logSink.critical??Sr)(e,t),j().assertRuntime)throw new Error(e)},f=(e,t)=>{if(!Se)return;if((j().logSink.warn??St)(e,t),j().assertRuntime)throw new Error(e)},te=(e,t)=>{if((j().logSink.warn??St)(e,t),j().assertRuntime)throw new Error(e)};var re=(e,t)=>{if(!Se)return;(j().logSink.log??mr)(e,t);};var mt=()=>"Date detected; stored as ISO string. Use new Date(value) when reading.",bt=()=>"Map detected; converting to plain object.",wt=()=>"Set detected; converting to array.";var ne=new Set(["__proto__","constructor","prototype"]);var Rt=e=>e===null?"null":Array.isArray(e)?"array":e instanceof Map?"map":e instanceof Set?"set":e instanceof Date?"date":typeof e=="function"?"function":typeof e,wr=e=>{if(!e||typeof e!="object")return null;let t=globalThis?.WeakRef;return t&&e instanceof t?"WeakRef":typeof WeakMap<"u"&&e instanceof WeakMap?"WeakMap":typeof WeakSet<"u"&&e instanceof WeakSet?"WeakSet":typeof EventTarget<"u"&&e instanceof EventTarget?"EventTarget":typeof ReadableStream<"u"&&e instanceof ReadableStream?"ReadableStream":typeof WritableStream<"u"&&e instanceof WritableStream?"WritableStream":typeof Request<"u"&&e instanceof Request?"Request":typeof Response<"u"&&e instanceof Response?"Response":typeof Headers<"u"&&e instanceof Headers?"Headers":typeof FormData<"u"&&e instanceof FormData?"FormData":null};var fe=(e,t)=>{let r=wr(e);if(r)throw new Error(`${r} values are not supported`);let n=Rt(e);if(n==="number"){if(!Number.isFinite(e))throw new Error("Non-finite numbers are not supported");return e}if(n==="bigint")throw new Error("BigInt values are not supported");if(n==="symbol")throw new Error("Symbol values are not supported");if(n==="date")return M()&&f(mt()),e.toISOString();if(n==="map"){if(t.has(e))throw new Error("Circular reference detected during sanitize");t.add(e),M()&&f(bt());let o={};for(let[c,d]of e){if(typeof c!="string")throw new Error("Map keys must be strings to remain JSON-safe");o[String(c)]=fe(d,t);}return o}if(n==="set"){if(t.has(e))throw new Error("Circular reference detected during sanitize");return t.add(e),M()&&f(wt()),Array.from(e,o=>fe(o,t))}if(n==="object"){if(t.has(e))throw new Error("Circular reference detected during sanitize");t.add(e);let o={},c=Object.getOwnPropertyDescriptors(e);for(let[d,g]of Object.entries(c))if(g.enumerable&&!ne.has(d)){if("get"in g||"set"in g)throw new Error(`Accessor properties are not supported during sanitize ("${d}")`);o[d]=fe(g.value,t);}return o}if(n==="array"){if(t.has(e))throw new Error("Circular reference detected during sanitize");return t.add(e),e.map(o=>fe(o,t))}return e},Ve=e=>fe(e,new WeakSet);var Ne=null,Rr=()=>{if(Ne)return Ne;let e,t=[];for(let r=0;r<256;r++){e=r;for(let n=0;n<8;n++)e=e&1?3988292384^e>>>1:e>>>1;t[r]=e>>>0;}return Ne=t,t},kt=e=>{let t=Rr(),r=-1;for(let n=0;n<e.length;n++)r=r>>>0,r=r>>>8^t[(r^e.charCodeAt(n))&255];return (r^-1)>>>0},Cr=2166136261,kr=2654435761,xr=1e5,B=(e,t)=>{let r=t>>>0;e.h1=Math.imul(e.h1^r,2246822507),e.h2=Math.imul(e.h2^r,3266489909);},G=(e,t)=>{B(e,t.length);for(let r=0;r<t.length;r++)B(e,t.charCodeAt(r));},R=(e,t)=>{G(e,t);},Ct=(e,t)=>{if(Number.isNaN(t)){R(e,"NaN");return}if(!Number.isFinite(t)){R(e,t>0?"Infinity":"-Infinity");return}if(Object.is(t,-0)){R(e,"-0");return}let r=t|0;if(t===r){R(e,"int"),B(e,r);return}R(e,"num"),G(e,String(t));},oe=(e,t)=>{if(e.nodes++>xr){R(e,"[max]");return}if(t===null){R(e,"null");return}let r=typeof t;if(r==="string"){R(e,"string"),G(e,t);return}if(r==="number"){R(e,"number"),Ct(e,t);return}if(r==="boolean"){R(e,t?"true":"false");return}if(r==="undefined"){R(e,"undefined");return}if(r==="bigint"){R(e,"bigint"),G(e,t.toString());return}if(r==="symbol"){R(e,"symbol");let u=t;G(e,Symbol.keyFor(u)??u.description??String(u));return}if(r==="function"){R(e,"function"),G(e,t.name||"anonymous");return}let n=t,o=e.seen.get(n);if(o!==void 0){R(e,"ref"),B(e,o);return}let c=e.nextId++;if(e.seen.set(n,c),Array.isArray(n)){R(e,"array"),B(e,n.length);for(let u=0;u<n.length;u++)Object.prototype.hasOwnProperty.call(n,u)?oe(e,n[u]):R(e,"hole");return}if(n instanceof Date){R(e,"date"),Ct(e,n.getTime());return}if(n instanceof Map){R(e,"map"),B(e,n.size),n.forEach((u,m)=>{oe(e,m),oe(e,u);});return}if(n instanceof Set){R(e,"set"),B(e,n.size),n.forEach(u=>{oe(e,u);});return}R(e,"object");let d=Object.getOwnPropertyDescriptors(n),g=[];Object.entries(d).forEach(([u,m])=>{m?.enumerable&&(ne.has(u)||"get"in m||"set"in m||g.push([u,m]));}),B(e,g.length);for(let[u,m]of g)G(e,u),oe(e,m.value);},Ie=e=>{if(typeof e=="string")return kt(JSON.stringify(e));let t={h1:Cr,h2:kr,seen:new WeakMap,nextId:1,nodes:0};oe(t,e);let r=t.h1>>>0,n=t.h2>>>0;return r^=r>>>16,r=Math.imul(r,2246822507),r^=r>>>13,r=Math.imul(r,3266489909),r^=r>>>16,n^=n>>>16,n=Math.imul(n,668265261),n^=n>>>15,n=Math.imul(n,374761393),n^=n>>>16,(r&2097151)*4294967296+(n>>>0)};var vr=typeof globalThis<"u"&&typeof globalThis.structuredClone=="function",_e=e=>{if(typeof e=="function")return "function";if(typeof e=="symbol")return "symbol";if(e===null||typeof e!="object")return null;let t=[["WeakMap",globalThis.WeakMap],["WeakSet",globalThis.WeakSet],["WeakRef",globalThis.WeakRef],["Promise",globalThis.Promise],["ReadableStream",globalThis.ReadableStream],["WritableStream",globalThis.WritableStream],["TransformStream",globalThis.TransformStream],["EventTarget",globalThis.EventTarget]];for(let[n,o]of t)if(typeof o=="function"&&e instanceof o)return n;let r=globalThis.Node;return typeof r=="function"&&e instanceof r?"DOM Node":null},Mr=e=>_e(e)===null,Er=e=>{let t=_e(e);if(t)throw new Error(`deepClone failed: value is not structured-cloneable (${t}). Avoid storing this type in stroid state.`)},Y=(e,t=new WeakMap)=>{if(Er(e),e===null||typeof e!="object")return e;if(t.has(e))return t.get(e);if(e instanceof Date)return new Date(e.getTime());if(e instanceof Map){let o=new Map;return t.set(e,o),e.forEach((c,d)=>{o.set(Y(d,t),Y(c,t));}),o}if(e instanceof Set){let o=new Set;return t.set(e,o),e.forEach(c=>{o.add(Y(c,t));}),o}if(Array.isArray(e)){let o=[];return t.set(e,o),e.forEach((c,d)=>{o[d]=Y(c,t);}),o}let r={};t.set(e,r);let n;try{n=Object.getOwnPropertyDescriptors(e);}catch(o){throw new Error(`deepClone failed to read object descriptors (possible Proxy or host object): ${o?.message??o}`)}return Object.entries(n).forEach(([o,c])=>{!c.enumerable||ne.has(o)||"get"in c||"set"in c||(r[o]=Y(c.value,t));}),r},K=e=>{if(vr)try{return structuredClone(e)}catch(t){if(!Mr(e)){let r=_e(e)??"unknown";throw new Error(`deepClone failed: value is not structured-cloneable (${r}). Avoid storing this type in stroid state.`)}return f(`deepClone fell back to manual clone after structuredClone failed: ${t?.message??t}`),Y(e)}return Y(e)};var xt=({name:e,label:t,fn:r,args:n,reportIssue:o})=>{if(typeof r=="function")try{r(...n);}catch(c){let d=`${t} for "${e}" failed: ${c?.message??c}`;o(d,"always");}};var Tr=(e,t,...r)=>{if(typeof e=="function")try{e(...r);}catch(n){let o=n?.message??n;te(`${t} callback threw: ${String(o)}`);}},me=(e,t={})=>{let{severity:r="warn",visibility:n="dev",onError:o}=t;if(Tr(o,"onError",e),r==="critical"){n==="dev"&&f(e),De(e);return}if(n==="always"){te(e);return}f(e);};v("computed.order-resolver",()=>{},105);var Et=()=>L(Z(Q)),$e=()=>Et().computedEntries,Tt=()=>Et().computedDependents;var Ft=e=>Object.prototype.hasOwnProperty.call($e(),e);var We=e=>{let t=$e()[e];if(!t)return null;let r=Tt()[e];return {deps:[...t.deps],dependents:r?[...r]:[]}};var At=new WeakMap,jt=new WeakMap;var we=e=>{let t=At.get(e);return t||(t=new Map,At.set(e,t)),t},Ot=e=>{let t=jt.get(e);return t||(t=new Map,jt.set(e,t)),t};new Proxy(new Map,{get:(e,t)=>{let r=we(V());if(t==="size")return r.size;if(t===Symbol.iterator)return r[Symbol.iterator].bind(r);let n=r[t];return typeof n=="function"?n.bind(r):n},set:(e,t,r)=>(we(V())[t]=r,true)});var Re=()=>{let e=V();we(e).clear(),Ot(e).clear();};v("validation.path-cache",Re,50);var Wt=new Map;var ge=(e,t,r)=>{let n=Wt.get(e);!n||n.size===0||n.forEach(o=>{try{o(t,r);}catch(c){typeof console<"u"&&console.warn&&console.warn(`[stroid] lifecycle hook "${e}" failed:`,c);}});};var Or=()=>{};v("write-context.runner",Or,121);var Nr=()=>{let e=V().notify;e.pendingNotifications.clear(),e.pendingBuffer.length=0,e.orderedNames.length=0,e.notifyScheduled=false,e.batchDepth=0;};v("notify.reset",Nr,40);var Ir=()=>V().computedCleanups,Lt=new WeakMap;var Pr=e=>{let t=Lt.get(e);return t||(t=new Map,Lt.set(e,t)),t};var Bt=e=>{let t=Ir(),r=t.get(e);if(!r){M()&&f(`deleteComputed("${e}") -- not found`);return}r(),t.delete(e);};var Kt=(e,t=V())=>Pr(t).get(e)?.autoDispose===true;var qt=e=>{let t=e.stores,r=e.subscribers,n=e.initialStates,o=e.initialFactories,c=e.metaEntries,d=e.snapshotCache,g=e.featureRuntimes,u=e.deletingStores,m=(i,b)=>{me(b,{onError:c[i]?.options?.onError,severity:"warn",visibility:"dev"});},y=({name:i,prev:b,options:S,initialState:E,getMeta:I,getStoreValue:_,hasStore:F})=>({name:i,options:S,prev:b,getMeta:I,getStoreValue:_,getAllStores:()=>t,getInitialState:()=>E,hasStore:F,setStoreValue:()=>{},applyFeatureState:()=>{},notify:()=>{},reportStoreError:k=>{me(k,{onError:S.onError,severity:"warn",visibility:"dev"});},warn:f,warnAlways:te,log:re,hashState:Ie,deepClone:K,sanitize:Ve,validate:()=>({ok:true,value:b}),isDev:M}),C=({name:i,prev:b,options:S,initialState:E,phase:I})=>{let _=y({name:i,prev:b,options:S,initialState:E,getMeta:()=>c[i],getStoreValue:()=>t[i],hasStore:()=>ee(e,i)}),F=y({name:i,prev:b,options:S,initialState:E,getMeta:()=>{},getStoreValue:()=>b,hasStore:()=>false});J().forEach(k=>{let A=g.get(k);I==="before"?A?.beforeStoreDelete?.(_):A?.afterStoreDelete?.(F);});},l=i=>{if(!ee(e,i))return;let b=t[i],S=c[i].options,E=n[i],I=r[i];u.add(i);try{I?.forEach(k=>{try{k(null);}catch(A){f(`Subscriber for "${i}" threw during delete: ${A?.message??A}`);}}),xt({name:i,label:"onDelete",fn:S.onDelete,args:[b],reportIssue:(k,A)=>{me(k,{onError:S.onError,severity:"warn",visibility:A});}}),C({name:i,prev:b,options:S,initialState:E,phase:"before"}),delete t[i],delete r[i],delete n[i],delete o[i],delete c[i],delete d[i],Ft(i)&&Bt(i);let F=e.computedDependents[i];if(F)for(let k of [...F]){let A=We(k);if(A&&Kt(k,e)&&A.deps.every(ae=>!ee(e,ae))){l(k);continue}f(`[stroid] source store "${i}" was deleted. Computed store "${k}" depends on it and will return stale data. Call deleteComputed("${k}") to clean up.`);}C({name:i,prev:b,options:S,initialState:E,phase:"after"}),ge("afterStoreDelete",i,{type:"afterStoreDelete",prev:b}),Fe(e,{type:"deleted",name:i}),re(`Store "${i}" deleted`);}finally{u.delete(i);}};return {deleteExistingStore:l,clearAllStores:()=>{let i=[],S=0,E=Number.POSITIVE_INFINITY;for(;S<20;){let _=Object.keys(t);if(_.length===0)break;_.forEach(k=>{ee(e,k)&&(l(k),i.push(k));}),S+=1;let F=Object.keys(t).length;if(F===0||F>=E)break;E=F;}let I=Object.keys(t).length;return I>0?f(`clearAllStores stopped after ${S} pass${S===1?"":"es"}; ${I} store(s) still registered (likely recreated during deletion).`):re(`All stores cleared (${i.length} stores removed)`),i},clearStores:i=>{let b=Object.keys(t).filter(S=>i?i.endsWith("*")?S.startsWith(i.slice(0,-1)):S===i:true);return b.forEach(S=>l(S)),b},reportStoreError:m}};var Je=Q,Gt=Z(Je),N=()=>{let e=L(Gt);return Ee(e),e};var V=()=>N();var ie=e=>new Proxy(Object.create(null),{get:(t,r)=>e()[r],set:(t,r,n)=>(e()[r]=n,true),deleteProperty:(t,r)=>(delete e()[r],true),has:(t,r)=>r in e(),ownKeys:()=>Reflect.ownKeys(e()),getOwnPropertyDescriptor:(t,r)=>{let n=Object.getOwnPropertyDescriptor(e(),r);if(n)return {...n,configurable:true}}}),$r=e=>new Proxy(new Map,{get:(t,r)=>{let n=e();if(r==="size")return n.size;if(r===Symbol.iterator)return n[Symbol.iterator].bind(n);let o=n[r];return typeof o=="function"?o.bind(n):o},set:(t,r,n)=>(e()[r]=n,true)}),Wr=e=>new Proxy({},{get:(t,r)=>{let n=e(),o=n[r];return typeof o=="function"?o.bind(n):o},set:(t,r,n)=>(e()[r]=n,true)});ie(()=>N().stores);ie(()=>N().subscribers);ie(()=>N().initialStates);ie(()=>N().initialFactories);ie(()=>N().metaEntries);ie(()=>N().snapshotCache);var se=$r(()=>N().featureRuntimes),Ut=new WeakMap,Yt=e=>{let t=Ut.get(e);return t||(t=qt(e),Ut.set(e,t)),t};Wr(()=>Yt(N()));var Qe=()=>Yt(N()),zr=e=>{let t=se.get(e);if(t)return t;let r=ye(e);if(!r)return;let n=r();return se.set(e,n),n},Hr=()=>{J().forEach(e=>{zr(e);});};Hr();var Lr=()=>{lt(N());},Br=()=>{se.forEach(e=>{try{e.resetAll?.();}catch{}}),se.clear();};v("features.reset",Br,10);v("registries.clear",Lr,20);v("registry.default",()=>{Je=Q,Gt=Z(Je);},115);var Xt=()=>L().async;var Jt=()=>{he(Xt());};var hs=()=>{Qe().clearAllStores(),Jt(),Re();},Ss=e=>{Qe().clearStores(e),Re();};export{hs as clearAllStores,Ss as clearStores};//# sourceMappingURL=runtime-admin.js.map
1
+ export{a as clearAllStores,b as clearStores}from'./chunk-645IESIU.js';import'./chunk-6ELWGQ4Q.js';import'./chunk-FOQKGHPS.js';import'./chunk-KQCSFGHJ.js';//# sourceMappingURL=runtime-admin.js.map
2
2
  //# sourceMappingURL=runtime-admin.js.map
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @module runtime-patch
3
+ *
4
+ * LAYER: Store runtime
5
+ * OWNS: Canonical serializable patch model and write-lowering helpers.
6
+ *
7
+ * Consumers: store-set-impl, store-replace-impl, store-admin-impl, store-hydrate-impl.
8
+ */
9
+
10
+ type RuntimePatchOp = "set" | "merge" | "delete" | "insert";
11
+ type RuntimePatchSource = "setStore" | "replaceStore" | "resetStore" | "hydrateStores";
12
+ type RuntimePatchPath = readonly (string | number)[];
13
+ interface RuntimePatchMeta {
14
+ timestamp: number;
15
+ source: RuntimePatchSource;
16
+ causedBy?: readonly string[];
17
+ isUnsafe?: boolean;
18
+ asyncBoundary?: boolean;
19
+ }
20
+ interface RuntimePatch {
21
+ id: string;
22
+ store: string;
23
+ path: RuntimePatchPath;
24
+ op: RuntimePatchOp;
25
+ value?: unknown;
26
+ meta: RuntimePatchMeta;
27
+ }
28
+
29
+ export type { RuntimePatch as R, RuntimePatchMeta as a, RuntimePatchOp as b };
@@ -1,5 +1,7 @@
1
1
  import { StoreFeatureMeta } from './feature.js';
2
2
  import { getAsyncMetrics } from './async.js';
3
+ import { RuntimeNodeId, ComputedDescriptor, RuntimeGraph } from './computed-types.js';
4
+ export { ComputedClassification, RuntimeEdgeType, RuntimeGraphEdge, RuntimeGraphGranularity, RuntimeGraphNode, RuntimeNodeType } from './computed-types.js';
3
5
  import './options.js';
4
6
  import './utility.js';
5
7
  import './cache.js';
@@ -58,9 +60,12 @@ declare const getComputedGraph: () => {
58
60
  dependencies: Record<string, string[]>;
59
61
  dependents: Record<string, string[]>;
60
62
  };
63
+ declare const getRuntimeGraph: () => RuntimeGraph;
61
64
  declare const getComputedDeps: (name: string) => {
62
65
  deps: string[];
63
66
  dependents: string[];
64
67
  } | null;
68
+ declare const getComputedDescriptor: (nodeId: RuntimeNodeId) => ComputedDescriptor | null;
69
+ declare const evaluateComputed: (nodeId: RuntimeNodeId, snapshot: Record<string, unknown>) => unknown;
65
70
 
66
- export { type ColdStoreReport, type StoreHealthEntry, type StoreHealthReport, findColdStores, getAsyncInflightCount, getComputedDeps, getComputedGraph, getInitialState, getMetrics, getPersistQueueDepth, getStoreHealth, getStoreMeta, getSubscriberCount, listStores };
71
+ export { type ColdStoreReport, ComputedDescriptor, RuntimeGraph, RuntimeNodeId, type StoreHealthEntry, type StoreHealthReport, evaluateComputed, findColdStores, getAsyncInflightCount, getComputedDeps, getComputedDescriptor, getComputedGraph, getInitialState, getMetrics, getPersistQueueDepth, getRuntimeGraph, getStoreHealth, getStoreMeta, getSubscriberCount, listStores };
@@ -1,4 +1,2 @@
1
- var er=new Map,k=(e,t,r=0)=>{!e||typeof t!="function"||er.set(e,{name:e,order:r,fn:t});};var ut=new Map;var we=e=>ut.get(e),te=()=>Array.from(ut.keys());var dt=()=>new Map([["noSignal",new Set],["shape",new Set],["autoCreate",new Set],["mutableResult",new Set]]),ft=()=>({fetchRegistry:Object.create(null),inflight:Object.create(null),requestVersion:Object.create(null),cacheMeta:Object.create(null),rateWindowStart:Object.create(null),rateCount:Object.create(null),ratePruneState:{lastAt:0},ratePruneTimer:null,warnedOnce:dt(),storeCleanups:Object.create(null),revalidateKeys:new Set,revalidateHandlers:Object.create(null),asyncMetrics:{cacheHits:0,cacheMisses:0,dedupes:0,requests:0,failures:0,avgMs:0,lastMs:0}}),pt=e=>{Object.values(e.storeCleanups).forEach(t=>{Object.values(t).forEach(r=>{r?.forEach(n=>{try{n();}catch{}});});}),Object.keys(e.fetchRegistry).forEach(t=>delete e.fetchRegistry[t]),Object.keys(e.inflight).forEach(t=>delete e.inflight[t]),Object.keys(e.requestVersion).forEach(t=>delete e.requestVersion[t]),Object.keys(e.cacheMeta).forEach(t=>delete e.cacheMeta[t]),Object.keys(e.rateWindowStart).forEach(t=>delete e.rateWindowStart[t]),Object.keys(e.rateCount).forEach(t=>delete e.rateCount[t]),Object.keys(e.storeCleanups).forEach(t=>delete e.storeCleanups[t]),Object.keys(e.revalidateHandlers).forEach(t=>delete e.revalidateHandlers[t]),e.revalidateKeys.clear(),e.warnedOnce.forEach(t=>t.clear()),e.warnedOnce.clear(),dt().forEach((t,r)=>{e.warnedOnce.set(r,t);}),e.ratePruneState.lastAt=0,e.ratePruneTimer&&(clearTimeout(e.ratePruneTimer),e.ratePruneTimer=null),e.asyncMetrics.cacheHits=0,e.asyncMetrics.cacheMisses=0,e.asyncMetrics.dedupes=0,e.asyncMetrics.requests=0,e.asyncMetrics.failures=0,e.asyncMetrics.avgMs=0,e.asyncMetrics.lastMs=0;};var Te=new Map,gt=new WeakSet,Ae=e=>{gt.has(e)||(gt.add(e),te().forEach(t=>{if(!e.featureRuntimes.get(t)){let r=we(t);r&&e.featureRuntimes.set(t,r());}}));},rr=typeof __STROID_REGISTRY_ID__<"u"&&__STROID_REGISTRY_ID__||typeof process<"u"&&process.env?.STROID_REGISTRY_ID||void 0,yt,De=e=>(yt||rr||e).replace(/\.ts(\?|$)/,".js$1"),q=De("stroid:default-registry");var nr=()=>{yt=void 0,Te.clear();};k("registry.scope-override",nr,110);var or=()=>({pendingNotifications:new Set,pendingBuffer:[],orderedNames:[],notifyScheduled:false,batchDepth:0,flushId:0,isFlushing:false}),sr=e=>{e.pendingNotifications.clear(),e.pendingBuffer.length=0,e.orderedNames.length=0,e.notifyScheduled=false,e.batchDepth=0,e.flushId=0,e.isFlushing=false;},ir=()=>({depth:0,pending:[],stagedValues:new Map,snapshotCache:new Map,failed:false,error:void 0}),ar=(e="default")=>{let t={scope:e,stores:Object.create(null),subscribers:Object.create(null),initialStates:Object.create(null),initialFactories:Object.create(null),metaEntries:Object.create(null),snapshotCache:Object.create(null),featureRuntimes:new Map,deletingStores:new Set,computedEntries:Object.create(null),computedDependents:Object.create(null),computedCleanups:new Map,transaction:ir(),async:ft(),notify:or(),lifecycleListener:null};return Ae(t),t},K=e=>{let t=De(e),r=Te.get(t);if(r)return r;let n=ar();return Te.set(t,n),n},U=(e,t)=>Object.prototype.hasOwnProperty.call(e.stores,t);var mt=e=>{e.computedCleanups.forEach(t=>{try{t();}catch{}}),e.computedCleanups.clear(),[e.stores,e.subscribers,e.initialStates,e.initialFactories,e.metaEntries,e.snapshotCache,e.computedEntries,e.computedDependents].forEach(t=>{Object.keys(t).forEach(r=>{delete t[r];});}),e.deletingStores.clear(),e.transaction.depth=0,e.transaction.pending=[],e.transaction.stagedValues.clear(),e.transaction.snapshotCache.clear(),e.transaction.failed=false,e.transaction.error=void 0,sr(e.notify),pt(e.async),e.lifecycleListener=null;};var Oe=(e,t)=>{try{e.lifecycleListener?.(t);}catch{}};var L=[],St={run:(e,t)=>{L.push(e);try{return t()}finally{L.pop();}},get:()=>L.length>0?L[L.length-1]:null,enterWith:e=>{if(L.length>0){L[L.length-1]=e;return}L.push(e);}};var _=e=>(St).get()||e||K(q);var ur={log:(e,t)=>{typeof console<"u"&&typeof console.log=="function"&&(t?console.log(`[stroid] ${e}`,t):console.log(`[stroid] ${e}`));},warn:(e,t)=>{typeof console<"u"&&typeof console.warn=="function"&&(t?console.warn(`[stroid] ${e}`,t):console.warn(`[stroid] ${e}`));},critical:(e,t)=>{typeof console<"u"&&typeof console.error=="function"&&(t?console.error(`[stroid] ${e}`,t):console.error(`[stroid] ${e}`));}},wt={logSink:ur,flush:{chunkSize:Number.POSITIVE_INFINITY,chunkDelayMs:0,priorityStores:[]},revalidateOnFocus:{debounceMs:0,maxConcurrent:3,staggerMs:100},namespace:"",strictMissingFeatures:true,assertRuntime:false,strictMutatorReturns:true,asyncAutoCreate:false,asyncCloneResult:"none",autoCorrelationIds:false,acknowledgeLooseTypes:false,pathCacheSize:500,defaultSnapshotMode:"deep",strictAsyncUsageErrors:false,middleware:[],allowUntrustedHydration:false,mutatorProduce:void 0,selectorCloneFrozen:true},Ie=e=>({logSink:{...e.logSink},flush:{...e.flush},revalidateOnFocus:{...e.revalidateOnFocus},namespace:e.namespace,strictMissingFeatures:e.strictMissingFeatures,assertRuntime:e.assertRuntime,strictMutatorReturns:e.strictMutatorReturns,asyncAutoCreate:e.asyncAutoCreate,asyncCloneResult:e.asyncCloneResult,autoCorrelationIds:e.autoCorrelationIds,acknowledgeLooseTypes:e.acknowledgeLooseTypes,pathCacheSize:e.pathCacheSize,defaultSnapshotMode:e.defaultSnapshotMode,strictAsyncUsageErrors:e.strictAsyncUsageErrors,middleware:[...e.middleware],allowUntrustedHydration:e.allowUntrustedHydration,mutatorProduce:e.mutatorProduce,selectorCloneFrozen:e.selectorCloneFrozen}),Ne=new WeakMap,Rt=Ie(wt),lr=e=>{let t=Ne.get(e);return t||(t=Ie(Rt),Ne.set(e,t)),t};var T=()=>lr(_());var gr=()=>{Ne=new WeakMap,Rt=Ie(wt);};k("config.reset",gr,90);var yr=typeof process<"u"&&typeof process.env?.NODE_ENV=="string"?process.env.NODE_ENV:void 0,mr=typeof import.meta<"u"&&import.meta?.env?.MODE?import.meta.env.MODE:void 0,Ct=typeof globalThis<"u"&&typeof globalThis.__STROID_DEV__=="boolean"?globalThis.__STROID_DEV__:void 0,hr="production",Sr=yr??mr??hr,ge=typeof Ct=="boolean"?Ct:Sr!=="production",M=()=>ge,$e=(e,t)=>{typeof console<"u"&&typeof console.warn=="function"&&(t?console.warn(`[stroid] ${e}`,t):console.warn(`[stroid] ${e}`));},br=(e,t)=>{typeof console<"u"&&typeof console.error=="function"&&(t?console.error(`[stroid] ${e}`,t):console.error(`[stroid] ${e}`));},wr=(e,t)=>{typeof console<"u"&&typeof console.log=="function"&&(t?console.log(`[stroid] ${e}`,t):console.log(`[stroid] ${e}`));},Re=(e,t)=>{if((T().logSink.critical??br)(e,t),T().assertRuntime)throw new Error(e)},f=(e,t)=>{if(!ge)return;if((T().logSink.warn??$e)(e,t),T().assertRuntime)throw new Error(e)},re=(e,t)=>{if((T().logSink.warn??$e)(e,t),T().assertRuntime)throw new Error(e)},_e=(e,t)=>{if(ge&&(T().logSink.warn??$e)(e,t),Re(e,t),T().assertRuntime)throw new Error(e)},ne=(e,t)=>{if(!ge)return;(T().logSink.log??wr)(e,t);};var xt=()=>"Date detected; stored as ISO string. Use new Date(value) when reading.",vt=()=>"Map detected; converting to plain object.",kt=()=>"Set detected; converting to array.";var Rr=128,Cr=(e,t)=>Math.abs(e.length-t.length)>2?false:Math.max(e.length,t.length)<=Rr,xr=(e,t)=>{if(e===t)return 0;if(e.length===0)return t.length;if(t.length===0)return e.length;let r=Array.from({length:e.length+1},(o,s)=>s),n=new Array(e.length+1);for(let o=1;o<=t.length;o++){n[0]=o;for(let s=1;s<=e.length;s++)n[s]=t[o-1]===e[s-1]?r[s-1]:Math.min(r[s-1],n[s-1],r[s])+1;[r,n]=[n,r];}return r[e.length]},Pe=(e,t)=>{let r=t.find(n=>{let o=n.toLowerCase(),s=e.toLowerCase();return o.includes(s)||s.includes(o)||Cr(o,s)&&xr(o,s)<=2});if(r){f(`Store "${e}" not found. Did you mean "${r}"?`);return}_e(`Store "${e}" not found.
2
- Available stores: [${t.join(", ")}]
3
- Call createStore("${e}", data) first.`);};var oe=new Set(["__proto__","constructor","prototype"]);var Mt=e=>e===null?"null":Array.isArray(e)?"array":e instanceof Map?"map":e instanceof Set?"set":e instanceof Date?"date":typeof e=="function"?"function":typeof e,vr=e=>{if(!e||typeof e!="object")return null;let t=globalThis?.WeakRef;return t&&e instanceof t?"WeakRef":typeof WeakMap<"u"&&e instanceof WeakMap?"WeakMap":typeof WeakSet<"u"&&e instanceof WeakSet?"WeakSet":typeof EventTarget<"u"&&e instanceof EventTarget?"EventTarget":typeof ReadableStream<"u"&&e instanceof ReadableStream?"ReadableStream":typeof WritableStream<"u"&&e instanceof WritableStream?"WritableStream":typeof Request<"u"&&e instanceof Request?"Request":typeof Response<"u"&&e instanceof Response?"Response":typeof Headers<"u"&&e instanceof Headers?"Headers":typeof FormData<"u"&&e instanceof FormData?"FormData":null};var ye=(e,t)=>{let r=vr(e);if(r)throw new Error(`${r} values are not supported`);let n=Mt(e);if(n==="number"){if(!Number.isFinite(e))throw new Error("Non-finite numbers are not supported");return e}if(n==="bigint")throw new Error("BigInt values are not supported");if(n==="symbol")throw new Error("Symbol values are not supported");if(n==="date")return M()&&f(xt()),e.toISOString();if(n==="map"){if(t.has(e))throw new Error("Circular reference detected during sanitize");t.add(e),M()&&f(vt());let o={};for(let[s,l]of e){if(typeof s!="string")throw new Error("Map keys must be strings to remain JSON-safe");o[String(s)]=ye(l,t);}return o}if(n==="set"){if(t.has(e))throw new Error("Circular reference detected during sanitize");return t.add(e),M()&&f(kt()),Array.from(e,o=>ye(o,t))}if(n==="object"){if(t.has(e))throw new Error("Circular reference detected during sanitize");t.add(e);let o={},s=Object.getOwnPropertyDescriptors(e);for(let[l,p]of Object.entries(s))if(p.enumerable&&!oe.has(l)){if("get"in p||"set"in p)throw new Error(`Accessor properties are not supported during sanitize ("${l}")`);o[l]=ye(p.value,t);}return o}if(n==="array"){if(t.has(e))throw new Error("Circular reference detected during sanitize");return t.add(e),e.map(o=>ye(o,t))}return e},Ve=e=>ye(e,new WeakSet);var We=null,kr=()=>{if(We)return We;let e,t=[];for(let r=0;r<256;r++){e=r;for(let n=0;n<8;n++)e=e&1?3988292384^e>>>1:e>>>1;t[r]=e>>>0;}return We=t,t},Et=e=>{let t=kr(),r=-1;for(let n=0;n<e.length;n++)r=r>>>0,r=r>>>8^t[(r^e.charCodeAt(n))&255];return (r^-1)>>>0},Mr=2166136261,Fr=2654435761,Er=1e5,G=(e,t)=>{let r=t>>>0;e.h1=Math.imul(e.h1^r,2246822507),e.h2=Math.imul(e.h2^r,3266489909);},J=(e,t)=>{G(e,t.length);for(let r=0;r<t.length;r++)G(e,t.charCodeAt(r));},R=(e,t)=>{J(e,t);},Ft=(e,t)=>{if(Number.isNaN(t)){R(e,"NaN");return}if(!Number.isFinite(t)){R(e,t>0?"Infinity":"-Infinity");return}if(Object.is(t,-0)){R(e,"-0");return}let r=t|0;if(t===r){R(e,"int"),G(e,r);return}R(e,"num"),J(e,String(t));},se=(e,t)=>{if(e.nodes++>Er){R(e,"[max]");return}if(t===null){R(e,"null");return}let r=typeof t;if(r==="string"){R(e,"string"),J(e,t);return}if(r==="number"){R(e,"number"),Ft(e,t);return}if(r==="boolean"){R(e,t?"true":"false");return}if(r==="undefined"){R(e,"undefined");return}if(r==="bigint"){R(e,"bigint"),J(e,t.toString());return}if(r==="symbol"){R(e,"symbol");let u=t;J(e,Symbol.keyFor(u)??u.description??String(u));return}if(r==="function"){R(e,"function"),J(e,t.name||"anonymous");return}let n=t,o=e.seen.get(n);if(o!==void 0){R(e,"ref"),G(e,o);return}let s=e.nextId++;if(e.seen.set(n,s),Array.isArray(n)){R(e,"array"),G(e,n.length);for(let u=0;u<n.length;u++)Object.prototype.hasOwnProperty.call(n,u)?se(e,n[u]):R(e,"hole");return}if(n instanceof Date){R(e,"date"),Ft(e,n.getTime());return}if(n instanceof Map){R(e,"map"),G(e,n.size),n.forEach((u,S)=>{se(e,S),se(e,u);});return}if(n instanceof Set){R(e,"set"),G(e,n.size),n.forEach(u=>{se(e,u);});return}R(e,"object");let l=Object.getOwnPropertyDescriptors(n),p=[];Object.entries(l).forEach(([u,S])=>{S?.enumerable&&(oe.has(u)||"get"in S||"set"in S||p.push([u,S]));}),G(e,p.length);for(let[u,S]of p)J(e,u),se(e,S.value);},He=e=>{if(typeof e=="string")return Et(JSON.stringify(e));let t={h1:Mr,h2:Fr,seen:new WeakMap,nextId:1,nodes:0};se(t,e);let r=t.h1>>>0,n=t.h2>>>0;return r^=r>>>16,r=Math.imul(r,2246822507),r^=r>>>13,r=Math.imul(r,3266489909),r^=r>>>16,n^=n>>>16,n=Math.imul(n,668265261),n^=n>>>15,n=Math.imul(n,374761393),n^=n>>>16,(r&2097151)*4294967296+(n>>>0)};var Tr=typeof globalThis<"u"&&typeof globalThis.structuredClone=="function",N=e=>{if(e===null||typeof e!="object")return e;if(e instanceof Date)return new Date(e.getTime());if(e instanceof Map)return new Map(e);if(e instanceof Set)return new Set(e);if(Array.isArray(e))return e.slice();let t={},r=Object.getOwnPropertyDescriptors(e);return Object.entries(r).forEach(([n,o])=>{o.enumerable&&(oe.has(n)||"get"in o||"set"in o||(t[n]=o.value));}),t},ze=e=>{if(typeof e=="function")return "function";if(typeof e=="symbol")return "symbol";if(e===null||typeof e!="object")return null;let t=[["WeakMap",globalThis.WeakMap],["WeakSet",globalThis.WeakSet],["WeakRef",globalThis.WeakRef],["Promise",globalThis.Promise],["ReadableStream",globalThis.ReadableStream],["WritableStream",globalThis.WritableStream],["TransformStream",globalThis.TransformStream],["EventTarget",globalThis.EventTarget]];for(let[n,o]of t)if(typeof o=="function"&&e instanceof o)return n;let r=globalThis.Node;return typeof r=="function"&&e instanceof r?"DOM Node":null},Ar=e=>ze(e)===null,Dr=e=>{let t=ze(e);if(t)throw new Error(`deepClone failed: value is not structured-cloneable (${t}). Avoid storing this type in stroid state.`)},Z=(e,t=new WeakMap)=>{if(Dr(e),e===null||typeof e!="object")return e;if(t.has(e))return t.get(e);if(e instanceof Date)return new Date(e.getTime());if(e instanceof Map){let o=new Map;return t.set(e,o),e.forEach((s,l)=>{o.set(Z(l,t),Z(s,t));}),o}if(e instanceof Set){let o=new Set;return t.set(e,o),e.forEach(s=>{o.add(Z(s,t));}),o}if(Array.isArray(e)){let o=[];return t.set(e,o),e.forEach((s,l)=>{o[l]=Z(s,t);}),o}let r={};t.set(e,r);let n;try{n=Object.getOwnPropertyDescriptors(e);}catch(o){throw new Error(`deepClone failed to read object descriptors (possible Proxy or host object): ${o?.message??o}`)}return Object.entries(n).forEach(([o,s])=>{!s.enumerable||oe.has(o)||"get"in s||"set"in s||(r[o]=Z(s.value,t));}),r},P=e=>{if(Tr)try{return structuredClone(e)}catch(t){if(!Ar(e)){let r=ze(e)??"unknown";throw new Error(`deepClone failed: value is not structured-cloneable (${r}). Avoid storing this type in stroid state.`)}return f(`deepClone fell back to manual clone after structuredClone failed: ${t?.message??t}`),Z(e)}return Z(e)};var Tt=({name:e,label:t,fn:r,args:n,reportIssue:o})=>{if(typeof r=="function")try{r(...n);}catch(s){let l=`${t} for "${e}" failed: ${s?.message??s}`;o(l,"always");}};var Or=(e,t,...r)=>{if(typeof e=="function")try{e(...r);}catch(n){let o=n?.message??n;re(`${t} callback threw: ${String(o)}`);}},Ce=(e,t={})=>{let{severity:r="warn",visibility:n="dev",onError:o}=t;if(Or(o,"onError",e),r==="critical"){n==="dev"&&f(e),Re(e);return}if(n==="always"){re(e);return}f(e);};k("computed.order-resolver",()=>{},105);var Ot=()=>_(K(q)),ve=()=>Ot().computedEntries,Le=()=>Ot().computedDependents;var jt=e=>Object.prototype.hasOwnProperty.call(ve(),e);var Be=()=>{let e=ve(),t=Le(),r=Object.keys(e),n=[];for(let[o,s]of Object.entries(e))for(let l of s.deps)n.push({from:l,to:o});return {nodes:r,edges:n,dependencies:Object.fromEntries(Object.entries(e).map(([o,s])=>[o,[...s.deps]])),dependents:Object.fromEntries(Object.entries(t).map(([o,s])=>[o,[...s]]))}},me=e=>{let t=ve()[e];if(!t)return null;let r=Le()[e];return {deps:[...t.deps],dependents:r?[...r]:[]}};var Nr=new Set;var Ir=()=>{Nr.clear();};k("ssr.warnings",Ir,60);var Nt=e=>Y.get(e)?.api;var Ht=new Map;var Se=(e,t,r)=>{let n=Ht.get(e);!n||n.size===0||n.forEach(o=>{try{o(t,r);}catch(s){typeof console<"u"&&console.warn&&console.warn(`[stroid] lifecycle hook "${e}" failed:`,s);}});};var Vr=()=>{};k("write-context.runner",Vr,121);var zr=()=>{let e=ie().notify;e.pendingNotifications.clear(),e.pendingBuffer.length=0,e.orderedNames.length=0,e.notifyScheduled=false,e.batchDepth=0;};k("notify.reset",zr,40);var Lr=()=>ie().computedCleanups,Bt=new WeakMap;var Br=e=>{let t=Bt.get(e);return t||(t=new Map,Bt.set(e,t)),t};var qt=e=>{let t=Lr(),r=t.get(e);if(!r){M()&&f(`deleteComputed("${e}") -- not found`);return}r(),t.delete(e);};var Kt=(e,t=ie())=>Br(t).get(e)?.autoDispose===true;var Ut=e=>{let t=e.stores,r=e.subscribers,n=e.initialStates,o=e.initialFactories,s=e.metaEntries,l=e.snapshotCache,p=e.featureRuntimes,u=e.deletingStores,S=(a,b)=>{Ce(b,{onError:s[a]?.options?.onError,severity:"warn",visibility:"dev"});},y=({name:a,prev:b,options:h,initialState:F,getMeta:I,getStoreValue:W,hasStore:A})=>({name:a,options:h,prev:b,getMeta:I,getStoreValue:W,getAllStores:()=>t,getInitialState:()=>F,hasStore:A,setStoreValue:()=>{},applyFeatureState:()=>{},notify:()=>{},reportStoreError:x=>{Ce(x,{onError:h.onError,severity:"warn",visibility:"dev"});},warn:f,warnAlways:re,log:ne,hashState:He,deepClone:P,sanitize:Ve,validate:()=>({ok:true,value:b}),isDev:M}),C=({name:a,prev:b,options:h,initialState:F,phase:I})=>{let W=y({name:a,prev:b,options:h,initialState:F,getMeta:()=>s[a],getStoreValue:()=>t[a],hasStore:()=>U(e,a)}),A=y({name:a,prev:b,options:h,initialState:F,getMeta:()=>{},getStoreValue:()=>b,hasStore:()=>false});te().forEach(x=>{let D=p.get(x);I==="before"?D?.beforeStoreDelete?.(W):D?.afterStoreDelete?.(A);});},d=a=>{if(!U(e,a))return;let b=t[a],h=s[a].options,F=n[a],I=r[a];u.add(a);try{I?.forEach(x=>{try{x(null);}catch(D){f(`Subscriber for "${a}" threw during delete: ${D?.message??D}`);}}),Tt({name:a,label:"onDelete",fn:h.onDelete,args:[b],reportIssue:(x,D)=>{Ce(x,{onError:h.onError,severity:"warn",visibility:D});}}),C({name:a,prev:b,options:h,initialState:F,phase:"before"}),delete t[a],delete r[a],delete n[a],delete o[a],delete s[a],delete l[a],jt(a)&&qt(a);let A=e.computedDependents[a];if(A)for(let x of [...A]){let D=me(x);if(D&&Kt(x,e)&&D.deps.every(ue=>!U(e,ue))){d(x);continue}f(`[stroid] source store "${a}" was deleted. Computed store "${x}" depends on it and will return stale data. Call deleteComputed("${x}") to clean up.`);}C({name:a,prev:b,options:h,initialState:F,phase:"after"}),Se("afterStoreDelete",a,{type:"afterStoreDelete",prev:b}),Oe(e,{type:"deleted",name:a}),ne(`Store "${a}" deleted`);}finally{u.delete(a);}};return {deleteExistingStore:d,clearAllStores:()=>{let a=[],h=0,F=Number.POSITIVE_INFINITY;for(;h<20;){let W=Object.keys(t);if(W.length===0)break;W.forEach(x=>{U(e,x)&&(d(x),a.push(x));}),h+=1;let A=Object.keys(t).length;if(A===0||A>=F)break;F=A;}let I=Object.keys(t).length;return I>0?f(`clearAllStores stopped after ${h} pass${h===1?"":"es"}; ${I} store(s) still registered (likely recreated during deletion).`):ne(`All stores cleared (${a.length} stores removed)`),a},clearStores:a=>{let b=Object.keys(t).filter(h=>a?a.endsWith("*")?h.startsWith(a.slice(0,-1)):h===a:true);return b.forEach(h=>d(h)),b},reportStoreError:S}};var tt=q,Yt=K(tt);var V=()=>{let e=_(Yt);return Ae(e),e};var ie=()=>V();var ae=e=>new Proxy(Object.create(null),{get:(t,r)=>e()[r],set:(t,r,n)=>(e()[r]=n,true),deleteProperty:(t,r)=>(delete e()[r],true),has:(t,r)=>r in e(),ownKeys:()=>Reflect.ownKeys(e()),getOwnPropertyDescriptor:(t,r)=>{let n=Object.getOwnPropertyDescriptor(e(),r);if(n)return {...n,configurable:true}}}),qr=e=>new Proxy(new Map,{get:(t,r)=>{let n=e();if(r==="size")return n.size;if(r===Symbol.iterator)return n[Symbol.iterator].bind(n);let o=n[r];return typeof o=="function"?o.bind(n):o},set:(t,r,n)=>(e()[r]=n,true)}),Kr=e=>new Proxy({},{get:(t,r)=>{let n=e(),o=n[r];return typeof o=="function"?o.bind(n):o},set:(t,r,n)=>(e()[r]=n,true)});ae(()=>V().stores);var Xt=ae(()=>V().subscribers);ae(()=>V().initialStates);ae(()=>V().initialFactories);ae(()=>V().metaEntries);ae(()=>V().snapshotCache);var Y=qr(()=>V().featureRuntimes),Gt=new WeakMap,Ur=e=>{let t=Gt.get(e);return t||(t=Ut(e),Gt.set(e,t)),t};Kr(()=>Ur(V()));var Gr=e=>{let t=Y.get(e);if(t)return t;let r=we(e);if(!r)return;let n=r();return Y.set(e,n),n},Yr=()=>{te().forEach(e=>{Gr(e);});};Yr();var Xr=()=>{mt(V());},Qr=()=>{Y.forEach(e=>{try{e.resetAll?.();}catch{}}),Y.clear();};k("features.reset",Qr,10);k("registries.clear",Xr,20);k("registry.default",()=>{tt=q,Yt=K(tt);},115);var rt=()=>_().async;var Jr=()=>rt().inflight;var Qt=()=>rt().asyncMetrics;var nt=e=>{let t=`${e}:`,r=Jr(),n=0;return Object.keys(r).forEach(o=>{(o===e||o.startsWith(t))&&(n+=1);}),n};var Jt=()=>({...Qt()});var ce=()=>_(K(q)),be=e=>{let t=ce();return U(t,e)?true:(Pe(e,Object.keys(t.stores)),false)},Zr=(e,t)=>{if(!t)return true;if(t.endsWith("*")){let r=t.slice(0,-1);return e.startsWith(r)}return e===t},Zt=e=>{let t=ce();return Object.keys(t.stores).filter(r=>Zr(r,e))},en=e=>{if(!be(e))return null;let t=ce().metaEntries[e],r=N(t);r.metrics=N(t.metrics);let n=N(t.options),o=n;return o.persist&&typeof o.persist=="object"&&(o.persist=N(o.persist)),o.sync&&typeof o.sync=="object"&&(o.sync=N(o.sync)),o.devtools&&typeof o.devtools=="object"&&(o.devtools=N(o.devtools)),o.lifecycle&&typeof o.lifecycle=="object"&&(o.lifecycle=N(o.lifecycle)),r.options=n,r},Ws=()=>P(ce().initialStates),tn=e=>{let t=ce().metaEntries[e];return t?.metrics?{...t.metrics}:null},rn=e=>be(e)?Xt[e]?.size??0:0,nn=e=>be(e)?nt(e):0,on=(e={})=>{let t=e.unreadThresholdMs??6e4,r=Date.now();return Zt().map(n=>{let o=ce().metaEntries[n],s=o?.createdAt?new Date(o.createdAt).getTime():r,l=o?.lastReadAtMs??null,p=Math.max(0,r-s),u;return (o?.readCount??0)===0&&(o?.updateCount??0)===0?u="cold":(o?.readCount??0)===0?u="write-only":l&&r-l>t?u="stale":u="active",{name:n,createdAt:o?.createdAt??new Date(s).toISOString(),lastReadAt:o?.lastReadAt??null,updateCount:o?.updateCount??0,readCount:o?.readCount??0,subscriberCount:rn(n),ageMs:p,verdict:u}}).filter(n=>n.verdict==="cold"||n.verdict==="stale"||e.includeWriteOnly&&n.verdict==="write-only")},sn=e=>{if(e){if(!be(e))return null;let r=en(e);return {name:e,meta:r,metrics:tn(e),async:{inflight:nn(e),lastCorrelationId:r?.lastCorrelationId??null,traceContext:r?.lastTraceContext??null},persist:{queueDepth:an(e)}}}let t=Zt().map(r=>sn(r));return {stores:t,async:Jt(),registry:{totalStores:t.length,coldStores:on({})}}},an=e=>{if(!be(e))return 0;let t=Nt("persist");return t?.getPersistQueueDepth?t.getPersistQueueDepth(e)??0:0},Hs=()=>Be(),zs=e=>me(e);export{on as findColdStores,nn as getAsyncInflightCount,zs as getComputedDeps,Hs as getComputedGraph,Ws as getInitialState,tn as getMetrics,an as getPersistQueueDepth,sn as getStoreHealth,en as getStoreMeta,rn as getSubscriberCount,Zt as listStores};//# sourceMappingURL=runtime-tools.js.map
1
+ export{n as evaluateComputed,g as findColdStores,f as getAsyncInflightCount,l as getComputedDeps,m as getComputedDescriptor,j as getComputedGraph,c as getInitialState,d as getMetrics,i as getPersistQueueDepth,k as getRuntimeGraph,h as getStoreHealth,b as getStoreMeta,e as getSubscriberCount,a as listStores}from'./chunk-M2NJVI36.js';import'./chunk-BW32TJGE.js';import'./chunk-6ELWGQ4Q.js';import'./chunk-FOQKGHPS.js';import'./chunk-KQCSFGHJ.js';//# sourceMappingURL=runtime-tools.js.map
4
2
  //# sourceMappingURL=runtime-tools.js.map
package/dist/selectors.js CHANGED
@@ -1,2 +1,2 @@
1
- var ut=new Map;var me=e=>ut.get(e),Q=()=>Array.from(ut.keys());var dt=()=>new Map([["noSignal",new Set],["shape",new Set],["autoCreate",new Set],["mutableResult",new Set]]),ft=()=>({fetchRegistry:Object.create(null),inflight:Object.create(null),requestVersion:Object.create(null),cacheMeta:Object.create(null),rateWindowStart:Object.create(null),rateCount:Object.create(null),ratePruneState:{lastAt:0},ratePruneTimer:null,warnedOnce:dt(),storeCleanups:Object.create(null),revalidateKeys:new Set,revalidateHandlers:Object.create(null),asyncMetrics:{cacheHits:0,cacheMisses:0,dedupes:0,requests:0,failures:0,avgMs:0,lastMs:0}}),pt=e=>{Object.values(e.storeCleanups).forEach(t=>{Object.values(t).forEach(r=>{r?.forEach(n=>{try{n();}catch{}});});}),Object.keys(e.fetchRegistry).forEach(t=>delete e.fetchRegistry[t]),Object.keys(e.inflight).forEach(t=>delete e.inflight[t]),Object.keys(e.requestVersion).forEach(t=>delete e.requestVersion[t]),Object.keys(e.cacheMeta).forEach(t=>delete e.cacheMeta[t]),Object.keys(e.rateWindowStart).forEach(t=>delete e.rateWindowStart[t]),Object.keys(e.rateCount).forEach(t=>delete e.rateCount[t]),Object.keys(e.storeCleanups).forEach(t=>delete e.storeCleanups[t]),Object.keys(e.revalidateHandlers).forEach(t=>delete e.revalidateHandlers[t]),e.revalidateKeys.clear(),e.warnedOnce.forEach(t=>t.clear()),e.warnedOnce.clear(),dt().forEach((t,r)=>{e.warnedOnce.set(r,t);}),e.ratePruneState.lastAt=0,e.ratePruneTimer&&(clearTimeout(e.ratePruneTimer),e.ratePruneTimer=null),e.asyncMetrics.cacheHits=0,e.asyncMetrics.cacheMisses=0,e.asyncMetrics.dedupes=0,e.asyncMetrics.requests=0,e.asyncMetrics.failures=0,e.asyncMetrics.avgMs=0,e.asyncMetrics.lastMs=0;};var cr=new Map,M=(e,t,r=0)=>{!e||typeof t!="function"||cr.set(e,{name:e,order:r,fn:t});};var Ne=new Map,gt=new WeakSet,Ve=e=>{gt.has(e)||(gt.add(e),Q().forEach(t=>{if(!e.featureRuntimes.get(t)){let r=me(t);r&&e.featureRuntimes.set(t,r());}}));},ur=typeof __STROID_REGISTRY_ID__<"u"&&__STROID_REGISTRY_ID__||typeof process<"u"&&process.env?.STROID_REGISTRY_ID||void 0,yt,Ie=e=>(yt||ur||e).replace(/\.ts(\?|$)/,".js$1"),Z=Ie("stroid:default-registry");var lr=()=>{yt=void 0,Ne.clear();};M("registry.scope-override",lr,110);var dr=()=>({pendingNotifications:new Set,pendingBuffer:[],orderedNames:[],notifyScheduled:false,batchDepth:0,flushId:0,isFlushing:false}),fr=e=>{e.pendingNotifications.clear(),e.pendingBuffer.length=0,e.orderedNames.length=0,e.notifyScheduled=false,e.batchDepth=0,e.flushId=0,e.isFlushing=false;},St=()=>({depth:0,pending:[],stagedValues:new Map,snapshotCache:new Map,failed:false,error:void 0}),pr=(e="default")=>{let t={scope:e,stores:Object.create(null),subscribers:Object.create(null),initialStates:Object.create(null),initialFactories:Object.create(null),metaEntries:Object.create(null),snapshotCache:Object.create(null),featureRuntimes:new Map,deletingStores:new Set,computedEntries:Object.create(null),computedDependents:Object.create(null),computedCleanups:new Map,transaction:St(),async:ft(),notify:dr(),lifecycleListener:null};return Ve(t),t},ee=e=>{let t=Ie(e),r=Ne.get(t);if(r)return r;let n=pr();return Ne.set(t,n),n},Y=(e,t)=>Object.prototype.hasOwnProperty.call(e.stores,t);var ht=e=>{e.computedCleanups.forEach(t=>{try{t();}catch{}}),e.computedCleanups.clear(),[e.stores,e.subscribers,e.initialStates,e.initialFactories,e.metaEntries,e.snapshotCache,e.computedEntries,e.computedDependents].forEach(t=>{Object.keys(t).forEach(r=>{delete t[r];});}),e.deletingStores.clear(),e.transaction.depth=0,e.transaction.pending=[],e.transaction.stagedValues.clear(),e.transaction.snapshotCache.clear(),e.transaction.failed=false,e.transaction.error=void 0,fr(e.notify),pt(e.async),e.lifecycleListener=null;};var Pe=(e,t)=>{try{e.lifecycleListener?.(t);}catch{}};var be=()=>null,H=[],bt={run:(e,t)=>{H.push(e);try{return t()}finally{H.pop();}},get:()=>H.length>0?H[H.length-1]:null,enterWith:e=>{if(H.length>0){H[H.length-1]=e;return}H.push(e);}};var B=e=>(bt).get()||e||ee(Z);var yr={log:(e,t)=>{typeof console<"u"&&typeof console.log=="function"&&(t?console.log(`[stroid] ${e}`,t):console.log(`[stroid] ${e}`));},warn:(e,t)=>{typeof console<"u"&&typeof console.warn=="function"&&(t?console.warn(`[stroid] ${e}`,t):console.warn(`[stroid] ${e}`));},critical:(e,t)=>{typeof console<"u"&&typeof console.error=="function"&&(t?console.error(`[stroid] ${e}`,t):console.error(`[stroid] ${e}`));}},wt={logSink:yr,flush:{chunkSize:Number.POSITIVE_INFINITY,chunkDelayMs:0,priorityStores:[]},revalidateOnFocus:{debounceMs:0,maxConcurrent:3,staggerMs:100},namespace:"",strictMissingFeatures:true,assertRuntime:false,strictMutatorReturns:true,asyncAutoCreate:false,asyncCloneResult:"none",autoCorrelationIds:false,acknowledgeLooseTypes:false,pathCacheSize:500,defaultSnapshotMode:"deep",strictAsyncUsageErrors:false,middleware:[],allowUntrustedHydration:false,mutatorProduce:void 0,selectorCloneFrozen:true},$e=e=>({logSink:{...e.logSink},flush:{...e.flush},revalidateOnFocus:{...e.revalidateOnFocus},namespace:e.namespace,strictMissingFeatures:e.strictMissingFeatures,assertRuntime:e.assertRuntime,strictMutatorReturns:e.strictMutatorReturns,asyncAutoCreate:e.asyncAutoCreate,asyncCloneResult:e.asyncCloneResult,autoCorrelationIds:e.autoCorrelationIds,acknowledgeLooseTypes:e.acknowledgeLooseTypes,pathCacheSize:e.pathCacheSize,defaultSnapshotMode:e.defaultSnapshotMode,strictAsyncUsageErrors:e.strictAsyncUsageErrors,middleware:[...e.middleware],allowUntrustedHydration:e.allowUntrustedHydration,mutatorProduce:e.mutatorProduce,selectorCloneFrozen:e.selectorCloneFrozen}),We=new WeakMap,Rt=$e(wt),Sr=e=>{let t=We.get(e);return t||(t=$e(Rt),We.set(e,t)),t};var T=()=>Sr(B());var wr=()=>{We=new WeakMap,Rt=$e(wt);};M("config.reset",wr,90);var Rr=typeof process<"u"&&typeof process.env?.NODE_ENV=="string"?process.env.NODE_ENV:void 0,kr=typeof import.meta<"u"&&import.meta?.env?.MODE?import.meta.env.MODE:void 0,kt=typeof globalThis<"u"&&typeof globalThis.__STROID_DEV__=="boolean"?globalThis.__STROID_DEV__:void 0,Cr="production",xr=Rr??kr??Cr,we=typeof kt=="boolean"?kt:xr!=="production",v=()=>we,Ct=(e,t)=>{typeof console<"u"&&typeof console.warn=="function"&&(t?console.warn(`[stroid] ${e}`,t):console.warn(`[stroid] ${e}`));},Mr=(e,t)=>{typeof console<"u"&&typeof console.error=="function"&&(t?console.error(`[stroid] ${e}`,t):console.error(`[stroid] ${e}`));},Tr=(e,t)=>{typeof console<"u"&&typeof console.log=="function"&&(t?console.log(`[stroid] ${e}`,t):console.log(`[stroid] ${e}`));},Re=(e,t)=>{if((T().logSink.critical??Mr)(e,t),T().assertRuntime)throw new Error(e)},S=(e,t)=>{if(!we)return;if((T().logSink.warn??Ct)(e,t),T().assertRuntime)throw new Error(e)},te=(e,t)=>{if((T().logSink.warn??Ct)(e,t),T().assertRuntime)throw new Error(e)};var re=(e,t)=>{if(!we)return;(T().logSink.log??Tr)(e,t);};var xt=()=>"Date detected; stored as ISO string. Use new Date(value) when reading.",Mt=()=>"Map detected; converting to plain object.",Tt=()=>"Set detected; converting to array.";var vt=(e,t)=>`Path "${e.join(".")}" not found - reached null at "${t}"`,Et=e=>`Cannot go deeper at "${e}" - value is not an object`;var ne=new Set(["__proto__","constructor","prototype"]);var jt=e=>e===null?"null":Array.isArray(e)?"array":e instanceof Map?"map":e instanceof Set?"set":e instanceof Date?"date":typeof e=="function"?"function":typeof e,vr=e=>{if(!e||typeof e!="object")return null;let t=globalThis?.WeakRef;return t&&e instanceof t?"WeakRef":typeof WeakMap<"u"&&e instanceof WeakMap?"WeakMap":typeof WeakSet<"u"&&e instanceof WeakSet?"WeakSet":typeof EventTarget<"u"&&e instanceof EventTarget?"EventTarget":typeof ReadableStream<"u"&&e instanceof ReadableStream?"ReadableStream":typeof WritableStream<"u"&&e instanceof WritableStream?"WritableStream":typeof Request<"u"&&e instanceof Request?"Request":typeof Response<"u"&&e instanceof Response?"Response":typeof Headers<"u"&&e instanceof Headers?"Headers":typeof FormData<"u"&&e instanceof FormData?"FormData":null};var pe=(e,t)=>{let r=vr(e);if(r)throw new Error(`${r} values are not supported`);let n=jt(e);if(n==="number"){if(!Number.isFinite(e))throw new Error("Non-finite numbers are not supported");return e}if(n==="bigint")throw new Error("BigInt values are not supported");if(n==="symbol")throw new Error("Symbol values are not supported");if(n==="date")return v()&&S(xt()),e.toISOString();if(n==="map"){if(t.has(e))throw new Error("Circular reference detected during sanitize");t.add(e),v()&&S(Mt());let o={};for(let[s,g]of e){if(typeof s!="string")throw new Error("Map keys must be strings to remain JSON-safe");o[String(s)]=pe(g,t);}return o}if(n==="set"){if(t.has(e))throw new Error("Circular reference detected during sanitize");return t.add(e),v()&&S(Tt()),Array.from(e,o=>pe(o,t))}if(n==="object"){if(t.has(e))throw new Error("Circular reference detected during sanitize");t.add(e);let o={},s=Object.getOwnPropertyDescriptors(e);for(let[g,f]of Object.entries(s))if(f.enumerable&&!ne.has(g)){if("get"in f||"set"in f)throw new Error(`Accessor properties are not supported during sanitize ("${g}")`);o[g]=pe(f.value,t);}return o}if(n==="array"){if(t.has(e))throw new Error("Circular reference detected during sanitize");return t.add(e),e.map(o=>pe(o,t))}return e},ze=e=>pe(e,new WeakSet);var He=null,Er=()=>{if(He)return He;let e,t=[];for(let r=0;r<256;r++){e=r;for(let n=0;n<8;n++)e=e&1?3988292384^e>>>1:e>>>1;t[r]=e>>>0;}return He=t,t},Ot=e=>{let t=Er(),r=-1;for(let n=0;n<e.length;n++)r=r>>>0,r=r>>>8^t[(r^e.charCodeAt(n))&255];return (r^-1)>>>0},Fr=2166136261,jr=2654435761,Dr=1e5,q=(e,t)=>{let r=t>>>0;e.h1=Math.imul(e.h1^r,2246822507),e.h2=Math.imul(e.h2^r,3266489909);},G=(e,t)=>{q(e,t.length);for(let r=0;r<t.length;r++)q(e,t.charCodeAt(r));},k=(e,t)=>{G(e,t);},Dt=(e,t)=>{if(Number.isNaN(t)){k(e,"NaN");return}if(!Number.isFinite(t)){k(e,t>0?"Infinity":"-Infinity");return}if(Object.is(t,-0)){k(e,"-0");return}let r=t|0;if(t===r){k(e,"int"),q(e,r);return}k(e,"num"),G(e,String(t));},oe=(e,t)=>{if(e.nodes++>Dr){k(e,"[max]");return}if(t===null){k(e,"null");return}let r=typeof t;if(r==="string"){k(e,"string"),G(e,t);return}if(r==="number"){k(e,"number"),Dt(e,t);return}if(r==="boolean"){k(e,t?"true":"false");return}if(r==="undefined"){k(e,"undefined");return}if(r==="bigint"){k(e,"bigint"),G(e,t.toString());return}if(r==="symbol"){k(e,"symbol");let d=t;G(e,Symbol.keyFor(d)??d.description??String(d));return}if(r==="function"){k(e,"function"),G(e,t.name||"anonymous");return}let n=t,o=e.seen.get(n);if(o!==void 0){k(e,"ref"),q(e,o);return}let s=e.nextId++;if(e.seen.set(n,s),Array.isArray(n)){k(e,"array"),q(e,n.length);for(let d=0;d<n.length;d++)Object.prototype.hasOwnProperty.call(n,d)?oe(e,n[d]):k(e,"hole");return}if(n instanceof Date){k(e,"date"),Dt(e,n.getTime());return}if(n instanceof Map){k(e,"map"),q(e,n.size),n.forEach((d,a)=>{oe(e,a),oe(e,d);});return}if(n instanceof Set){k(e,"set"),q(e,n.size),n.forEach(d=>{oe(e,d);});return}k(e,"object");let g=Object.getOwnPropertyDescriptors(n),f=[];Object.entries(g).forEach(([d,a])=>{a?.enumerable&&(ne.has(d)||"get"in a||"set"in a||f.push([d,a]));}),q(e,f.length);for(let[d,a]of f)G(e,d),oe(e,a.value);},Le=e=>{if(typeof e=="string")return Ot(JSON.stringify(e));let t={h1:Fr,h2:jr,seen:new WeakMap,nextId:1,nodes:0};oe(t,e);let r=t.h1>>>0,n=t.h2>>>0;return r^=r>>>16,r=Math.imul(r,2246822507),r^=r>>>13,r=Math.imul(r,3266489909),r^=r>>>16,n^=n>>>16,n=Math.imul(n,668265261),n^=n>>>15,n=Math.imul(n,374761393),n^=n>>>16,(r&2097151)*4294967296+(n>>>0)};var Or=typeof globalThis<"u"&&typeof globalThis.structuredClone=="function",ge=e=>{if(e===null||typeof e!="object")return e;if(e instanceof Date)return new Date(e.getTime());if(e instanceof Map)return new Map(e);if(e instanceof Set)return new Set(e);if(Array.isArray(e))return e.slice();let t={},r=Object.getOwnPropertyDescriptors(e);return Object.entries(r).forEach(([n,o])=>{o.enumerable&&(ne.has(n)||"get"in o||"set"in o||(t[n]=o.value));}),t},Be=e=>{if(typeof e=="function")return "function";if(typeof e=="symbol")return "symbol";if(e===null||typeof e!="object")return null;let t=[["WeakMap",globalThis.WeakMap],["WeakSet",globalThis.WeakSet],["WeakRef",globalThis.WeakRef],["Promise",globalThis.Promise],["ReadableStream",globalThis.ReadableStream],["WritableStream",globalThis.WritableStream],["TransformStream",globalThis.TransformStream],["EventTarget",globalThis.EventTarget]];for(let[n,o]of t)if(typeof o=="function"&&e instanceof o)return n;let r=globalThis.Node;return typeof r=="function"&&e instanceof r?"DOM Node":null},Ar=e=>Be(e)===null,Nr=e=>{let t=Be(e);if(t)throw new Error(`deepClone failed: value is not structured-cloneable (${t}). Avoid storing this type in stroid state.`)},J=(e,t=new WeakMap)=>{if(Nr(e),e===null||typeof e!="object")return e;if(t.has(e))return t.get(e);if(e instanceof Date)return new Date(e.getTime());if(e instanceof Map){let o=new Map;return t.set(e,o),e.forEach((s,g)=>{o.set(J(g,t),J(s,t));}),o}if(e instanceof Set){let o=new Set;return t.set(e,o),e.forEach(s=>{o.add(J(s,t));}),o}if(Array.isArray(e)){let o=[];return t.set(e,o),e.forEach((s,g)=>{o[g]=J(s,t);}),o}let r={};t.set(e,r);let n;try{n=Object.getOwnPropertyDescriptors(e);}catch(o){throw new Error(`deepClone failed to read object descriptors (possible Proxy or host object): ${o?.message??o}`)}return Object.entries(n).forEach(([o,s])=>{!s.enumerable||ne.has(o)||"get"in s||"set"in s||(r[o]=J(s.value,t));}),r},V=e=>{if(Or)try{return structuredClone(e)}catch(t){if(!Ar(e)){let r=Be(e)??"unknown";throw new Error(`deepClone failed: value is not structured-cloneable (${r}). Avoid storing this type in stroid state.`)}return S(`deepClone fell back to manual clone after structuredClone failed: ${t?.message??t}`),J(e)}return J(e)};var Vr=e=>{let t=[],r="",n=false;for(let o of e){if(n){r+=o,n=false;continue}if(o==="\\"){n=true;continue}if(o==="."){t.push(r),r="";continue}r+=o;}return n&&(r+="\\"),t.push(r),t},At=e=>Array.isArray(e)?[...e]:typeof e=="string"&&!e.includes(".")?[e]:typeof e=="string"?Vr(e):[String(e)];var ke=(e,t)=>{let r=At(t),n=e;for(let o of r){if(n==null){S(vt(r,o));return}if(typeof n!="object"){S(Et(o));return}n=n[o];}return n};var Nt=({name:e,label:t,fn:r,args:n,reportIssue:o})=>{if(typeof r=="function")try{r(...n);}catch(s){let g=`${t} for "${e}" failed: ${s?.message??s}`;o(g,"always");}};var Ir=(e,t,...r)=>{if(typeof e=="function")try{e(...r);}catch(n){let o=n?.message??n;te(`${t} callback threw: ${String(o)}`);}},Ce=(e,t={})=>{let{severity:r="warn",visibility:n="dev",onError:o}=t;if(Ir(o,"onError",e),r==="critical"){n==="dev"&&S(e),Re(e);return}if(n==="always"){te(e);return}S(e);};M("computed.order-resolver",()=>{},105);var Pt=()=>B(ee(Z)),qe=()=>Pt().computedEntries,_t=()=>Pt().computedDependents;var Wt=e=>Object.prototype.hasOwnProperty.call(qe(),e);var Ue=e=>{let t=qe()[e];if(!t)return null;let r=_t()[e];return {deps:[...t.deps],dependents:r?[...r]:[]}};var Me=null;var _r=()=>{Me=null;};M("transaction.runner",_r,120);var $t=e=>{let t=Me?.get();return t||(e??B()).transaction};var Te=()=>Me?(Me.get()?.depth??0)>0:$t().depth>0;var zt=e=>{let t=$t();return t.stagedValues.has(e)?{has:true,value:t.stagedValues.get(e)}:{has:false,value:void 0}};var Lt=e=>{if(typeof e!="object"||e===null)return false;let t=e;if(t.$$typeof||typeof window<"u"&&e instanceof Element)return false;let r=t.constructor?.name;return !(r&&r!=="Object"&&r!=="Array")},ye=e=>(Lt(e)&&(Object.isFrozen(e)||Object.freeze(e)),e),ve=e=>{if(!Lt(e))return e;let t=[e],r=new WeakSet;for(;t.length>0;){let n=t.pop();if(!r.has(n)){r.add(n),Object.isFrozen(n)||Object.freeze(n);for(let o of Object.keys(n)){let s=n[o];typeof s=="object"&&s!==null&&!r.has(s)&&t.push(s);}}}return e};var Ee=(e,t)=>{let r=e?.options?.snapshot??t;return r==="shallow"||r==="ref"?r:"deep"},se=(e,t)=>{if(t==="ref"){if(!v())return e;try{return ye(e)}catch{return e}}if(t==="shallow"){let n=ge(e);if(!v())return n;try{return ye(n)}catch{return n}}let r=V(e);if(!v())return r;try{return ve(r)}catch{return r}};var Ut=new Map;var he=(e,t,r)=>{let n=Ut.get(e);!n||n.size===0||n.forEach(o=>{try{o(t,r);}catch(s){typeof console<"u"&&console.warn&&console.warn(`[stroid] lifecycle hook "${e}" failed:`,s);}});};var Wr=()=>{};M("write-context.runner",Wr,121);var je=(e,t)=>{if(!(!e||typeof e!="object")){if(t==="ref"||t==="shallow"){ye(e);return}t==="deep"&&ve(e);}};var Gt=e=>{if(!Jt(e))return null;let t=I();Xt(e,t);let r=Ee(t.metaEntries[e],T().defaultSnapshotMode);if(Te()){let f=t.transaction.snapshotCache,d=tt(e);if(d===void 0)return null;let a=f.get(e);if(a&&a.source===d&&a.mode===r){let y=a.snapshot;return je(y,r),y}let u=se(d,r);return f.set(e,{source:d,snapshot:u,mode:r}),je(u,r),u}let n=t.notify.flushId,o=tt(e,t),s=t.snapshotCache[e];if(s&&s.source===o&&s.mode===r){let f=s.snapshot;return je(f,r),f}let g=se(o,r);return je(g,r),t.snapshotCache[e]={version:n,snapshot:g,source:o,mode:r},g};var Hr=()=>{let e=I().notify;e.pendingNotifications.clear(),e.pendingBuffer.length=0,e.orderedNames.length=0,e.notifyScheduled=false,e.batchDepth=0;};M("notify.reset",Hr,40);var Lr=()=>I().computedCleanups,Qt=new WeakMap;var Br=e=>{let t=Qt.get(e);return t||(t=new Map,Qt.set(e,t)),t};var Zt=e=>{let t=Lr(),r=t.get(e);if(!r){v()&&S(`deleteComputed("${e}") -- not found`);return}r(),t.delete(e);};var er=(e,t=I())=>Br(t).get(e)?.autoDispose===true;var tr=e=>{let t=e.stores,r=e.subscribers,n=e.initialStates,o=e.initialFactories,s=e.metaEntries,g=e.snapshotCache,f=e.featureRuntimes,d=e.deletingStores,a=(c,w)=>{Ce(w,{onError:s[c]?.options?.onError,severity:"warn",visibility:"dev"});},u=({name:c,prev:w,options:b,initialState:E,getMeta:P,getStoreValue:W,hasStore:j})=>({name:c,options:b,prev:w,getMeta:P,getStoreValue:W,getAllStores:()=>t,getInitialState:()=>E,hasStore:j,setStoreValue:()=>{},applyFeatureState:()=>{},notify:()=>{},reportStoreError:C=>{Ce(C,{onError:b.onError,severity:"warn",visibility:"dev"});},warn:S,warnAlways:te,log:re,hashState:Le,deepClone:V,sanitize:ze,validate:()=>({ok:true,value:w}),isDev:v}),y=({name:c,prev:w,options:b,initialState:E,phase:P})=>{let W=u({name:c,prev:w,options:b,initialState:E,getMeta:()=>s[c],getStoreValue:()=>t[c],hasStore:()=>Y(e,c)}),j=u({name:c,prev:w,options:b,initialState:E,getMeta:()=>{},getStoreValue:()=>w,hasStore:()=>false});Q().forEach(C=>{let D=f.get(C);P==="before"?D?.beforeStoreDelete?.(W):D?.afterStoreDelete?.(j);});},p=c=>{if(!Y(e,c))return;let w=t[c],b=s[c].options,E=n[c],P=r[c];d.add(c);try{P?.forEach(C=>{try{C(null);}catch(D){S(`Subscriber for "${c}" threw during delete: ${D?.message??D}`);}}),Nt({name:c,label:"onDelete",fn:b.onDelete,args:[w],reportIssue:(C,D)=>{Ce(C,{onError:b.onError,severity:"warn",visibility:D});}}),y({name:c,prev:w,options:b,initialState:E,phase:"before"}),delete t[c],delete r[c],delete n[c],delete o[c],delete s[c],delete g[c],Wt(c)&&Zt(c);let j=e.computedDependents[c];if(j)for(let C of [...j]){let D=Ue(C);if(D&&er(C,e)&&D.deps.every(ce=>!Y(e,ce))){p(C);continue}S(`[stroid] source store "${c}" was deleted. Computed store "${C}" depends on it and will return stale data. Call deleteComputed("${C}") to clean up.`);}y({name:c,prev:w,options:b,initialState:E,phase:"after"}),he("afterStoreDelete",c,{type:"afterStoreDelete",prev:w}),Pe(e,{type:"deleted",name:c}),re(`Store "${c}" deleted`);}finally{d.delete(c);}};return {deleteExistingStore:p,clearAllStores:()=>{let c=[],b=0,E=Number.POSITIVE_INFINITY;for(;b<20;){let W=Object.keys(t);if(W.length===0)break;W.forEach(C=>{Y(e,C)&&(p(C),c.push(C));}),b+=1;let j=Object.keys(t).length;if(j===0||j>=E)break;E=j;}let P=Object.keys(t).length;return P>0?S(`clearAllStores stopped after ${b} pass${b===1?"":"es"}; ${P} store(s) still registered (likely recreated during deletion).`):re(`All stores cleared (${c.length} stores removed)`),c},clearStores:c=>{let w=Object.keys(t).filter(b=>c?c.endsWith("*")?b.startsWith(c.slice(0,-1)):b===c:true);return w.forEach(b=>p(b)),w},reportStoreError:a}};var rt=Z,nr=ee(rt);var O=()=>{let e=B(nr);return Ve(e),e};var I=()=>O();var ae=e=>new Proxy(Object.create(null),{get:(t,r)=>e()[r],set:(t,r,n)=>(e()[r]=n,true),deleteProperty:(t,r)=>(delete e()[r],true),has:(t,r)=>r in e(),ownKeys:()=>Reflect.ownKeys(e()),getOwnPropertyDescriptor:(t,r)=>{let n=Object.getOwnPropertyDescriptor(e(),r);if(n)return {...n,configurable:true}}}),qr=e=>new Proxy(new Map,{get:(t,r)=>{let n=e();if(r==="size")return n.size;if(r===Symbol.iterator)return n[Symbol.iterator].bind(n);let o=n[r];return typeof o=="function"?o.bind(n):o},set:(t,r,n)=>(e()[r]=n,true)}),Ur=e=>new Proxy({},{get:(t,r)=>{let n=e(),o=n[r];return typeof o=="function"?o.bind(n):o},set:(t,r,n)=>(e()[r]=n,true)});ae(()=>O().stores);ae(()=>O().subscribers);ae(()=>O().initialStates);ae(()=>O().initialFactories);var or=ae(()=>O().metaEntries);ae(()=>O().snapshotCache);var ie=qr(()=>O().featureRuntimes),rr=new WeakMap,Kr=e=>{let t=rr.get(e);return t||(t=tr(e),rr.set(e,t)),t};Ur(()=>Kr(O()));var Yr=e=>{let t=ie.get(e);if(t)return t;let r=me(e);if(!r)return;let n=r();return ie.set(e,n),n},Gr=()=>{Q().forEach(e=>{Yr(e);});};Gr();var Jt=(e,t)=>Y(O(),e),tt=(e,t=O())=>{if(Te()){let n=zt(e);if(n.has)return n.value}let r=be();return r&&Object.prototype.hasOwnProperty.call(r,e)?r[e]:t.stores[e]};var Xt=(e,t=O())=>{let r=t.metaEntries[e];if(!r)return;r.readCount=(r.readCount??0)+1;let n=Date.now();r.lastReadAtMs=n,r.lastReadAt=new Date(n).toISOString();},Jr=()=>{ht(O());},Xr=()=>{ie.forEach(e=>{try{e.resetAll?.();}catch{}}),ie.clear();};M("features.reset",Xr,10);M("registries.clear",Jr,20);M("registry.default",()=>{rt=Z,nr=ee(rt);},115);var nt=e=>{let t=I();return Object.prototype.hasOwnProperty.call(t.stores,e)},sr=e=>I().stores[e],ir=(e,t)=>{let n=I().subscribers;return n[e]||(n[e]=new Set),n[e].add(t),()=>{n[e]?.delete(t),n[e]?.size===0&&delete n[e];}};var Qr=(e,t)=>{let r=new WeakMap,n=new WeakMap,o=new Set,s="\0",g=(a,u)=>{if(!a||typeof a!="object")return a;let y=r.get(a);if(y)return y;let p=new Proxy(a,{get(m,h,c){if(typeof h!="string")return Reflect.get(m,h,c);let w=[...u,h],b=Reflect.get(m,h,c);return (!b||typeof b!="object")&&o.add(w.join(s)),g(b,w)}});return n.set(p,u.join(s)),r.set(a,p),p},f=t(g(e,[])),d=(a,u)=>{if(!a||typeof a!="object"||u.has(a))return;u.add(a);let y=n.get(a);if(y){y&&o.add(y);return}for(let p of Object.values(a))d(p,u);};return d(f,new WeakSet),{result:f,deps:Array.from(o,a=>a.split(s))}},Zr=(e,t,r)=>r.some(n=>!Object.is(ke(e,n),ke(t,n))),Es=(e,t)=>{let r,n,o=[];return ()=>{let s=sr(e);if(s===void 0)return null;if(s===r)return n??null;if(r!==void 0&&o.length>0&&!Zr(r,s,o))return r=s,n??null;let g=T().selectorCloneFrozen,f=s&&typeof s=="object"&&Object.isFrozen(s)&&g?V(s):s,d=Qr(f,t);return r=s,o=d.deps,n=d.result,n??null}},Fs=(e,t,r=Object.is,n)=>{if(typeof t!="function"||typeof n!="function")return S(`subscribeWithSelector("${e}") requires selector and listener functions.`),()=>{};let o=false,s,g=()=>{let a=or[e]?.options?.snapshot;return a==="shallow"||a==="ref"?a:"deep"},f=a=>{let u=a!==void 0?a:Gt(e);if(u===null||typeof u!="object")return u;let y=g();return y==="ref"?u:y==="shallow"?ge(u):V(u)};return nt(e)&&(s=t(f()),o=true),ir(e,a=>{if(a===null||!nt(e)){o=false,s=void 0;return}let u=t(f(a));if(!o){let p=s;o=true,s=u,n(u,p);return}if(!r(u,s)){let p=s;s=u,n(u,p);}})};export{Es as createSelector,Fs as subscribeWithSelector};//# sourceMappingURL=selectors.js.map
1
+ export{a as createSelector,b as subscribeWithSelector}from'./chunk-X3JR32JD.js';import'./chunk-FOQKGHPS.js';import'./chunk-KQCSFGHJ.js';//# sourceMappingURL=selectors.js.map
2
2
  //# sourceMappingURL=selectors.js.map
package/dist/server.d.ts CHANGED
@@ -1,9 +1,11 @@
1
1
  import { S as StoreOptions } from './options.js';
2
- import { S as StoreStateMap } from './types.js';
2
+ import { c as StoreStateMap } from './types.js';
3
3
  import { S as StoreRegistry } from './store-registry.js';
4
4
  import './utility.js';
5
5
  import './feature.js';
6
+ import './runtime-patch.js';
6
7
  import './registry.js';
8
+ import './computed-types.js';
7
9
 
8
10
  type RequestStoreName<StateMap> = keyof StateMap extends never ? string : keyof StateMap & string;
9
11
  type RequestStoreValue<StateMap, Name extends RequestStoreName<StateMap>> = Name extends keyof StateMap ? StateMap[Name] : unknown;
@@ -19,6 +21,7 @@ type RequestStoreApi<StateMap extends StoreStateMap = StoreStateMap> = {
19
21
  create: <Name extends RequestStoreName<StateMap>>(name: Name, data: RequestStoreValue<StateMap, Name>, options?: StoreOptions<RequestStoreValue<StateMap, Name>>) => RequestStoreValue<StateMap, Name>;
20
22
  set: <Name extends RequestStoreName<StateMap>>(name: Name, updater: RequestStoreValue<StateMap, Name> | ((draft: RequestStoreValue<StateMap, Name>) => void)) => RequestStoreValue<StateMap, Name>;
21
23
  get: <Name extends RequestStoreName<StateMap>>(name: Name) => RequestStoreValue<StateMap, Name> | undefined;
24
+ snapshot: () => RequestSnapshot<StateMap>;
22
25
  };
23
26
  type RequestStoreContext<StateMap extends StoreStateMap> = {
24
27
  registry: StoreRegistry;
package/dist/server.js CHANGED
@@ -1,13 +1,2 @@
1
- import {AsyncLocalStorage}from'async_hooks';var Go=new Map,x=(e,t,r=0)=>{!e||typeof t!="function"||Go.set(e,{name:e,order:r,fn:t});};var wt=new Map;var Ke=e=>wt.has(e),Ge=e=>wt.get(e),Se=()=>Array.from(wt.keys());var dr=()=>new Map([["noSignal",new Set],["shape",new Set],["autoCreate",new Set],["mutableResult",new Set]]),pr=()=>({fetchRegistry:Object.create(null),inflight:Object.create(null),requestVersion:Object.create(null),cacheMeta:Object.create(null),rateWindowStart:Object.create(null),rateCount:Object.create(null),ratePruneState:{lastAt:0},ratePruneTimer:null,warnedOnce:dr(),storeCleanups:Object.create(null),revalidateKeys:new Set,revalidateHandlers:Object.create(null),asyncMetrics:{cacheHits:0,cacheMisses:0,dedupes:0,requests:0,failures:0,avgMs:0,lastMs:0}}),fr=e=>{Object.values(e.storeCleanups).forEach(t=>{Object.values(t).forEach(r=>{r?.forEach(o=>{try{o();}catch{}});});}),Object.keys(e.fetchRegistry).forEach(t=>delete e.fetchRegistry[t]),Object.keys(e.inflight).forEach(t=>delete e.inflight[t]),Object.keys(e.requestVersion).forEach(t=>delete e.requestVersion[t]),Object.keys(e.cacheMeta).forEach(t=>delete e.cacheMeta[t]),Object.keys(e.rateWindowStart).forEach(t=>delete e.rateWindowStart[t]),Object.keys(e.rateCount).forEach(t=>delete e.rateCount[t]),Object.keys(e.storeCleanups).forEach(t=>delete e.storeCleanups[t]),Object.keys(e.revalidateHandlers).forEach(t=>delete e.revalidateHandlers[t]),e.revalidateKeys.clear(),e.warnedOnce.forEach(t=>t.clear()),e.warnedOnce.clear(),dr().forEach((t,r)=>{e.warnedOnce.set(r,t);}),e.ratePruneState.lastAt=0,e.ratePruneTimer&&(clearTimeout(e.ratePruneTimer),e.ratePruneTimer=null),e.asyncMetrics.cacheHits=0,e.asyncMetrics.cacheMisses=0,e.asyncMetrics.dedupes=0,e.asyncMetrics.requests=0,e.asyncMetrics.failures=0,e.asyncMetrics.avgMs=0,e.asyncMetrics.lastMs=0;};var vt=new Map,gr=new WeakSet,xt=e=>{gr.has(e)||(gr.add(e),Se().forEach(t=>{if(!e.featureRuntimes.get(t)){let r=Ge(t);r&&e.featureRuntimes.set(t,r());}}));},Jo=typeof __STROID_REGISTRY_ID__<"u"&&__STROID_REGISTRY_ID__||typeof process<"u"&&process.env?.STROID_REGISTRY_ID||void 0,Sr,Rt=e=>(Sr||Jo||e).replace(/\.ts(\?|$)/,".js$1"),ye=Rt("stroid:default-registry");var Xo=()=>{Sr=void 0,vt.clear();};x("registry.scope-override",Xo,110);var Qo=()=>({pendingNotifications:new Set,pendingBuffer:[],orderedNames:[],notifyScheduled:false,batchDepth:0,flushId:0,isFlushing:false}),Zo=e=>{e.pendingNotifications.clear(),e.pendingBuffer.length=0,e.orderedNames.length=0,e.notifyScheduled=false,e.batchDepth=0,e.flushId=0,e.isFlushing=false;},yr=()=>({depth:0,pending:[],stagedValues:new Map,snapshotCache:new Map,failed:false,error:void 0}),kt=(e="default")=>{let t={scope:e,stores:Object.create(null),subscribers:Object.create(null),initialStates:Object.create(null),initialFactories:Object.create(null),metaEntries:Object.create(null),snapshotCache:Object.create(null),featureRuntimes:new Map,deletingStores:new Set,computedEntries:Object.create(null),computedDependents:Object.create(null),computedCleanups:new Map,transaction:yr(),async:pr(),notify:Qo(),lifecycleListener:null};return xt(t),t},me=e=>{let t=Rt(e),r=vt.get(t);if(r)return r;let o=kt();return vt.set(t,o),o},ie=(e,t)=>Object.prototype.hasOwnProperty.call(e.stores,t),mr=(e,t)=>e.deletingStores.has(t),hr=e=>{e.computedCleanups.forEach(t=>{try{t();}catch{}}),e.computedCleanups.clear(),[e.stores,e.subscribers,e.initialStates,e.initialFactories,e.metaEntries,e.snapshotCache,e.computedEntries,e.computedDependents].forEach(t=>{Object.keys(t).forEach(r=>{delete t[r];});}),e.deletingStores.clear(),e.transaction.depth=0,e.transaction.pending=[],e.transaction.stagedValues.clear(),e.transaction.snapshotCache.clear(),e.transaction.failed=false,e.transaction.error=void 0,Zo(e.notify),fr(e.async),e.lifecycleListener=null;};var Ye=(e,t)=>{try{e.lifecycleListener?.(t);}catch{}};var br=null,wr=e=>{br=e;},Oe=()=>br?.get()||null,Ct=null,J=[],vr={run:(e,t)=>{J.push(e);try{return t()}finally{J.pop();}},get:()=>J.length>0?J[J.length-1]:null,enterWith:e=>{if(J.length>0){J[J.length-1]=e;return}J.push(e);}},xr=e=>{Ct=e;},Je=(e,t)=>(Ct??vr).run(e,t),X=e=>(Ct??vr).get()||e||me(ye);var en={log:(e,t)=>{typeof console<"u"&&typeof console.log=="function"&&(t?console.log(`[stroid] ${e}`,t):console.log(`[stroid] ${e}`));},warn:(e,t)=>{typeof console<"u"&&typeof console.warn=="function"&&(t?console.warn(`[stroid] ${e}`,t):console.warn(`[stroid] ${e}`));},critical:(e,t)=>{typeof console<"u"&&typeof console.error=="function"&&(t?console.error(`[stroid] ${e}`,t):console.error(`[stroid] ${e}`));}},Rr={logSink:en,flush:{chunkSize:Number.POSITIVE_INFINITY,chunkDelayMs:0,priorityStores:[]},revalidateOnFocus:{debounceMs:0,maxConcurrent:3,staggerMs:100},namespace:"",strictMissingFeatures:true,assertRuntime:false,strictMutatorReturns:true,asyncAutoCreate:false,asyncCloneResult:"none",autoCorrelationIds:false,acknowledgeLooseTypes:false,pathCacheSize:500,defaultSnapshotMode:"deep",strictAsyncUsageErrors:false,middleware:[],allowUntrustedHydration:false,mutatorProduce:void 0,selectorCloneFrozen:true},Et=e=>({logSink:{...e.logSink},flush:{...e.flush},revalidateOnFocus:{...e.revalidateOnFocus},namespace:e.namespace,strictMissingFeatures:e.strictMissingFeatures,assertRuntime:e.assertRuntime,strictMutatorReturns:e.strictMutatorReturns,asyncAutoCreate:e.asyncAutoCreate,asyncCloneResult:e.asyncCloneResult,autoCorrelationIds:e.autoCorrelationIds,acknowledgeLooseTypes:e.acknowledgeLooseTypes,pathCacheSize:e.pathCacheSize,defaultSnapshotMode:e.defaultSnapshotMode,strictAsyncUsageErrors:e.strictAsyncUsageErrors,middleware:[...e.middleware],allowUntrustedHydration:e.allowUntrustedHydration,mutatorProduce:e.mutatorProduce,selectorCloneFrozen:e.selectorCloneFrozen}),Mt=new WeakMap,kr=Et(Rr),tn=e=>{let t=Mt.get(e);return t||(t=Et(kr),Mt.set(e,t)),t};var k=()=>tn(X());var sn=()=>{Mt=new WeakMap,kr=Et(Rr);};x("config.reset",sn,90);var Cr=()=>k().namespace;var an=typeof process<"u"&&typeof process.env?.NODE_ENV=="string"?process.env.NODE_ENV:void 0,cn=typeof import.meta<"u"&&import.meta?.env?.MODE?import.meta.env.MODE:void 0,Mr=typeof globalThis<"u"&&typeof globalThis.__STROID_DEV__=="boolean"?globalThis.__STROID_DEV__:void 0,un="production",ln=an??cn??un,Ve=typeof Mr=="boolean"?Mr:ln!=="production",v=()=>Ve,Tt=(e,t)=>{typeof console<"u"&&typeof console.warn=="function"&&(t?console.warn(`[stroid] ${e}`,t):console.warn(`[stroid] ${e}`));},dn=(e,t)=>{typeof console<"u"&&typeof console.error=="function"&&(t?console.error(`[stroid] ${e}`,t):console.error(`[stroid] ${e}`));},pn=(e,t)=>{typeof console<"u"&&typeof console.log=="function"&&(t?console.log(`[stroid] ${e}`,t):console.log(`[stroid] ${e}`));},ae=(e,t)=>{if((k().logSink.critical??dn)(e,t),k().assertRuntime)throw new Error(e)},g=(e,t)=>{if(!Ve)return;if((k().logSink.warn??Tt)(e,t),k().assertRuntime)throw new Error(e)},T=(e,t)=>{if((k().logSink.warn??Tt)(e,t),k().assertRuntime)throw new Error(e)},L=(e,t)=>{if(Ve&&(k().logSink.warn??Tt)(e,t),ae(e,t),k().assertRuntime)throw new Error(e)},_=(e,t)=>{if(!Ve)return;(k().logSink.log??pn)(e,t);},Er=()=>`Functions cannot be stored in stroid.
2
- Store data only - handle functions outside the store.`,Tr=()=>`Map/Set detected. stroid converts these to plain objects.
3
- Use arrays or plain objects for best results.`,Fr=()=>`Date object detected. stroid stores it as ISO string.
4
- Use new Date(value) to convert back when reading.`,Or=()=>"Date detected; stored as ISO string. Use new Date(value) when reading.",Vr=()=>"Map detected; converting to plain object.",Dr=()=>"Set detected; converting to array.",Ir=e=>`Store name must be a non-empty string. Got: ${JSON.stringify(e)}`,$r=e=>`Store name "${e}" contains spaces.
5
- Use camelCase or kebab-case: "userName" or "user-name"`,zr=e=>`Store name "${e}" is not allowed.
6
- Reserved names: "__proto__", "constructor", "prototype".`,fn=128,gn=(e,t)=>Math.abs(e.length-t.length)>2?false:Math.max(e.length,t.length)<=fn,Sn=(e,t)=>{if(e===t)return 0;if(e.length===0)return t.length;if(t.length===0)return e.length;let r=Array.from({length:e.length+1},(n,s)=>s),o=new Array(e.length+1);for(let n=1;n<=t.length;n++){o[0]=n;for(let s=1;s<=e.length;s++)o[s]=t[n-1]===e[s-1]?r[s-1]:Math.min(r[s-1],o[s-1],r[s])+1;[r,o]=[o,r];}return r[e.length]},Ft=(e,t)=>{let r=t.find(o=>{let n=o.toLowerCase(),s=e.toLowerCase();return n.includes(s)||s.includes(n)||gn(n,s)&&Sn(n,s)<=2});if(r){g(`Store "${e}" not found. Did you mean "${r}"?`);return}L(`Store "${e}" not found.
7
- Available stores: [${t.join(", ")}]
8
- Call createStore("${e}", data) first.`);};var ee=new Set(["__proto__","constructor","prototype"]),Vt=(e,t)=>{if(!e)return {ok:true};try{if(typeof e.safeParse=="function"){let r=e.safeParse(t);return r.success?{ok:!0,data:r.data}:{ok:!1,error:r.error}}if(typeof e.parse=="function")return e.parse(t),{ok:!0,data:t};if(typeof e.validateSync=="function")return e.validateSync(t),{ok:!0,data:t};if(typeof e.isValidSync=="function")return e.isValidSync(t)?{ok:!0,data:t}:{ok:!1,error:"Schema validation failed"};if(typeof e.validate=="function"){let r=e.validate(t);if(r===!0)return {ok:!0,data:t};if(r===!1)return {ok:!1,error:e.errors||"Schema validation failed"};if(r&&typeof r=="object"){let n=r.error,s=n?.details?.[0]?.message||n?.message||r.message||e.errors;if(s)return {ok:!1,error:s};if(n)return {ok:!1,error:n}}return {ok:!1,error:e.errors||"Schema validation failed"}}if(typeof e=="function"){let r=e(t);return r===!1?{ok:!1,error:"Schema validation failed"}:{ok:!0,data:r===!0?t:r}}return {ok:!0,data:t}}catch(r){return {ok:false,error:r?.message??r}}};var je=e=>e===null?"null":Array.isArray(e)?"array":e instanceof Map?"map":e instanceof Set?"set":e instanceof Date?"date":typeof e=="function"?"function":typeof e,_r=e=>{if(!e||typeof e!="object")return null;let t=globalThis?.WeakRef;return t&&e instanceof t?"WeakRef":typeof WeakMap<"u"&&e instanceof WeakMap?"WeakMap":typeof WeakSet<"u"&&e instanceof WeakSet?"WeakSet":typeof EventTarget<"u"&&e instanceof EventTarget?"EventTarget":typeof ReadableStream<"u"&&e instanceof ReadableStream?"ReadableStream":typeof WritableStream<"u"&&e instanceof WritableStream?"WritableStream":typeof Request<"u"&&e instanceof Request?"Request":typeof Response<"u"&&e instanceof Response?"Response":typeof Headers<"u"&&e instanceof Headers?"Headers":typeof FormData<"u"&&e instanceof FormData?"FormData":null},Dt=e=>{let t=je(e);return t==="function"?(L(Er()),false):t==="map"||t==="set"?(g(Tr()),true):(t==="date"&&g(Fr()),true)},Ot=(e,t)=>{let r=_r(e);if(r)throw new Error(`${r} values are not supported`);let o=je(e);if(o==="number"){if(!Number.isFinite(e))throw new Error("Non-finite numbers are not supported");return true}if(o==="bigint")throw new Error("BigInt values are not supported");if(o==="symbol")throw new Error("Symbol values are not supported");if(o==="date"||o==="map"||o==="set")return false;if(o==="array"){if(t.has(e))throw new Error("Circular reference detected during sanitize");t.add(e);let n=Object.keys(e);for(let s of n){let i=Number(s);if(!Number.isInteger(i))return false}for(let s=0;s<e.length;s+=1)if(s in e&&!Ot(e[s],t))return false;return true}if(o==="object"){if(t.has(e))throw new Error("Circular reference detected during sanitize");if(t.add(e),Object.getOwnPropertySymbols(e).length>0)return false;let n=Object.getOwnPropertyDescriptors(e);for(let[s,i]of Object.entries(n)){if(!i.enumerable||ee.has(s))return false;if("get"in i||"set"in i)throw new Error(`Accessor properties are not supported during sanitize ("${s}")`);if(!Ot(i.value,t))return false}return true}return true},jt=e=>Ot(e,new WeakSet),De=(e,t)=>{let r=_r(e);if(r)throw new Error(`${r} values are not supported`);let o=je(e);if(o==="number"){if(!Number.isFinite(e))throw new Error("Non-finite numbers are not supported");return e}if(o==="bigint")throw new Error("BigInt values are not supported");if(o==="symbol")throw new Error("Symbol values are not supported");if(o==="date")return v()&&g(Or()),e.toISOString();if(o==="map"){if(t.has(e))throw new Error("Circular reference detected during sanitize");t.add(e),v()&&g(Vr());let n={};for(let[s,i]of e){if(typeof s!="string")throw new Error("Map keys must be strings to remain JSON-safe");n[String(s)]=De(i,t);}return n}if(o==="set"){if(t.has(e))throw new Error("Circular reference detected during sanitize");return t.add(e),v()&&g(Dr()),Array.from(e,n=>De(n,t))}if(o==="object"){if(t.has(e))throw new Error("Circular reference detected during sanitize");t.add(e);let n={},s=Object.getOwnPropertyDescriptors(e);for(let[i,c]of Object.entries(s))if(c.enumerable&&!ee.has(i)){if("get"in c||"set"in c)throw new Error(`Accessor properties are not supported during sanitize ("${i}")`);n[i]=De(c.value,t);}return n}if(o==="array"){if(t.has(e))throw new Error("Circular reference detected during sanitize");return t.add(e),e.map(n=>De(n,t))}return e},ce=e=>De(e,new WeakSet),Ae=e=>typeof e!="string"||e.trim()===""?(L(Ir(e)),false):ee.has(e)?(L(zr(e)),false):e.includes(" ")?(L($r(e)),false):true;var At=null,yn=()=>{if(At)return At;let e,t=[];for(let r=0;r<256;r++){e=r;for(let o=0;o<8;o++)e=e&1?3988292384^e>>>1:e>>>1;t[r]=e>>>0;}return At=t,t},Hr=e=>{let t=yn(),r=-1;for(let o=0;o<e.length;o++)r=r>>>0,r=r>>>8^t[(r^e.charCodeAt(o))&255];return (r^-1)>>>0},mn=2166136261,hn=2654435761,bn=1e5,te=(e,t)=>{let r=t>>>0;e.h1=Math.imul(e.h1^r,2246822507),e.h2=Math.imul(e.h2^r,3266489909);},ue=(e,t)=>{te(e,t.length);for(let r=0;r<t.length;r++)te(e,t.charCodeAt(r));},F=(e,t)=>{ue(e,t);},Wr=(e,t)=>{if(Number.isNaN(t)){F(e,"NaN");return}if(!Number.isFinite(t)){F(e,t>0?"Infinity":"-Infinity");return}if(Object.is(t,-0)){F(e,"-0");return}let r=t|0;if(t===r){F(e,"int"),te(e,r);return}F(e,"num"),ue(e,String(t));},he=(e,t)=>{if(e.nodes++>bn){F(e,"[max]");return}if(t===null){F(e,"null");return}let r=typeof t;if(r==="string"){F(e,"string"),ue(e,t);return}if(r==="number"){F(e,"number"),Wr(e,t);return}if(r==="boolean"){F(e,t?"true":"false");return}if(r==="undefined"){F(e,"undefined");return}if(r==="bigint"){F(e,"bigint"),ue(e,t.toString());return}if(r==="symbol"){F(e,"symbol");let a=t;ue(e,Symbol.keyFor(a)??a.description??String(a));return}if(r==="function"){F(e,"function"),ue(e,t.name||"anonymous");return}let o=t,n=e.seen.get(o);if(n!==void 0){F(e,"ref"),te(e,n);return}let s=e.nextId++;if(e.seen.set(o,s),Array.isArray(o)){F(e,"array"),te(e,o.length);for(let a=0;a<o.length;a++)Object.prototype.hasOwnProperty.call(o,a)?he(e,o[a]):F(e,"hole");return}if(o instanceof Date){F(e,"date"),Wr(e,o.getTime());return}if(o instanceof Map){F(e,"map"),te(e,o.size),o.forEach((a,u)=>{he(e,u),he(e,a);});return}if(o instanceof Set){F(e,"set"),te(e,o.size),o.forEach(a=>{he(e,a);});return}F(e,"object");let i=Object.getOwnPropertyDescriptors(o),c=[];Object.entries(i).forEach(([a,u])=>{u?.enumerable&&(ee.has(a)||"get"in u||"set"in u||c.push([a,u]));}),te(e,c.length);for(let[a,u]of c)ue(e,a),he(e,u.value);},Ne=e=>{if(typeof e=="string")return Hr(JSON.stringify(e));let t={h1:mn,h2:hn,seen:new WeakMap,nextId:1,nodes:0};he(t,e);let r=t.h1>>>0,o=t.h2>>>0;return r^=r>>>16,r=Math.imul(r,2246822507),r^=r>>>13,r=Math.imul(r,3266489909),r^=r>>>16,o^=o>>>16,o=Math.imul(o,668265261),o^=o>>>15,o=Math.imul(o,374761393),o^=o>>>16,(r&2097151)*4294967296+(o>>>0)};var wn=typeof globalThis<"u"&&typeof globalThis.structuredClone=="function",Pe=e=>{if(e===null||typeof e!="object")return e;if(e instanceof Date)return new Date(e.getTime());if(e instanceof Map)return new Map(e);if(e instanceof Set)return new Set(e);if(Array.isArray(e))return e.slice();let t={},r=Object.getOwnPropertyDescriptors(e);return Object.entries(r).forEach(([o,n])=>{n.enumerable&&(ee.has(o)||"get"in n||"set"in n||(t[o]=n.value));}),t},Nt=e=>{if(typeof e=="function")return "function";if(typeof e=="symbol")return "symbol";if(e===null||typeof e!="object")return null;let t=[["WeakMap",globalThis.WeakMap],["WeakSet",globalThis.WeakSet],["WeakRef",globalThis.WeakRef],["Promise",globalThis.Promise],["ReadableStream",globalThis.ReadableStream],["WritableStream",globalThis.WritableStream],["TransformStream",globalThis.TransformStream],["EventTarget",globalThis.EventTarget]];for(let[o,n]of t)if(typeof n=="function"&&e instanceof n)return o;let r=globalThis.Node;return typeof r=="function"&&e instanceof r?"DOM Node":null},vn=e=>Nt(e)===null,xn=e=>{let t=Nt(e);if(t)throw new Error(`deepClone failed: value is not structured-cloneable (${t}). Avoid storing this type in stroid state.`)},le=(e,t=new WeakMap)=>{if(xn(e),e===null||typeof e!="object")return e;if(t.has(e))return t.get(e);if(e instanceof Date)return new Date(e.getTime());if(e instanceof Map){let n=new Map;return t.set(e,n),e.forEach((s,i)=>{n.set(le(i,t),le(s,t));}),n}if(e instanceof Set){let n=new Set;return t.set(e,n),e.forEach(s=>{n.add(le(s,t));}),n}if(Array.isArray(e)){let n=[];return t.set(e,n),e.forEach((s,i)=>{n[i]=le(s,t);}),n}let r={};t.set(e,r);let o;try{o=Object.getOwnPropertyDescriptors(e);}catch(n){throw new Error(`deepClone failed to read object descriptors (possible Proxy or host object): ${n?.message??n}`)}return Object.entries(o).forEach(([n,s])=>{!s.enumerable||ee.has(n)||"get"in s||"set"in s||(r[n]=le(s.value,t));}),r},C=e=>{if(wn)try{return structuredClone(e)}catch(t){if(!vn(e)){let r=Nt(e)??"unknown";throw new Error(`deepClone failed: value is not structured-cloneable (${r}). Avoid storing this type in stroid state.`)}return g(`deepClone fell back to manual clone after structuredClone failed: ${t?.message??t}`),le(e)}return le(e)};var Pt=(e,t)=>{try{let r=C(e);return t(r),r}catch(r){throw new Error(`produceClone failed (possible circular reference or unserializable data): ${r?.message??r}`)}};var qr=e=>{if(typeof e!="object"||e===null)return false;let t=e;if(t.$$typeof||typeof window<"u"&&e instanceof Element)return false;let r=t.constructor?.name;return !(r&&r!=="Object"&&r!=="Array")},zt=e=>(qr(e)&&(Object.isFrozen(e)||Object.freeze(e)),e),Br=e=>{if(!qr(e))return e;let t=[e],r=new WeakSet;for(;t.length>0;){let o=t.pop();if(!r.has(o)){r.add(o),Object.isFrozen(o)||Object.freeze(o);for(let n of Object.keys(o)){let s=o[n];typeof s=="object"&&s!==null&&!r.has(s)&&t.push(s);}}}return e};var re=null,Ur=e=>{if(!e){re=null;return}if(re&&re!==e){T("injectTransactionRunner(...) was called more than once. The existing runner will be kept to avoid cross-request transaction leaks. If you need to replace it in tests, call injectTransactionRunner(null) first.");return}re=e;},Cn=()=>{re=null;};x("transaction.runner",Cn,120);var Ie=e=>{let t=re?.get();return t||(e??X()).transaction},Mn=e=>e instanceof Error?e:typeof e=="string"?new Error(e):e&&typeof e?.message=="string"?new Error(e.message):new Error("setStoreBatch aborted");var z=()=>re?(re.get()?.depth??0)>0:Ie().depth>0,be=(e,t)=>{let r=Ie(t);r.failed=true,r.error||(r.error=Mn(e));},Qe=e=>{let t=X();Ie(t).pending.push(()=>Je(t,e));},Ze=(e,t)=>{let r=Ie();r.stagedValues.set(e,t),r.snapshotCache.delete(e);},we=e=>{let t=Ie();return t.stagedValues.has(e)?{has:true,value:t.stagedValues.get(e)}:{has:false,value:void 0}};var et=Symbol("stroid.middleware.abort"),Kr=({name:e,payload:t,middlewares:r,reportIssue:o,warn:n})=>{if(!Array.isArray(r)||r.length===0)return t.next;let s=new WeakSet,i=C(t.next);for(let c of r){if(typeof c!="function")continue;let a,u=i;try{a=c({action:t.action,name:e,prev:t.prev,next:u,path:t.path,correlationId:t.correlationId,traceContext:t.traceContext});}catch(l){let y=`Middleware for "${e}" failed: ${l?.message??l}`;return o(y,"dev"),et}if(a&&typeof a.then=="function"){let l=`Middleware for "${e}" must be synchronous. Promise-returning middleware is not supported.`;return o(l,"dev"),et}a===void 0?(v()&&!s.has(c)&&(s.add(c),n(`Middleware for "${e}" returned undefined; treating as pass-through. Return the new state to override.`)),i=u):i=a;}return i},tt=({name:e,label:t,fn:r,args:o,reportIssue:n})=>{if(typeof r=="function")try{r(...o);}catch(s){let i=`${t} for "${e}" failed: ${s?.message??s}`;n(i,"always");}};var de=(e,t,...r)=>{if(typeof e=="function")try{e(...r);}catch(o){let n=o?.message??o;T(`${t} callback threw: ${String(n)}`);}},pe=(e,t={})=>{let{severity:r="warn",visibility:o="dev",onError:n}=t;if(de(n,"onError",e),r==="critical"){o==="dev"&&g(e),ae(e);return}if(o==="always"){T(e);return}g(e);};var rt=null,Gr=e=>{rt=e;},Yr=e=>rt?rt(e):[];x("computed.order-resolver",()=>{rt=null;},105);var Jr=()=>X(me(ye)),_t=()=>Jr().computedEntries,Xr=()=>Jr().computedDependents;var Qr=e=>Object.prototype.hasOwnProperty.call(_t(),e);var Wt=e=>{let t=_t(),r=Xr(),o=new Set,n=[...e];for(;n.length>0;){let l=n.shift(),y=r[l];if(y)for(let f of y)o.has(f)||(o.add(f),n.push(f));}if(o.size===0)return [];let s=l=>{let y=t[l];if(y)for(let f of y.deps)t[f]&&(o.has(f)||(o.add(f),s(f)));};Array.from(o).forEach(l=>s(l));let i=new Map,c=new Map;for(let l of o){let y=t[l];if(!y)continue;let f=0;for(let b of y.deps)o.has(b)&&(f++,c.has(b)||c.set(b,[]),c.get(b).push(l));i.set(l,f);}let a=[];for(let[l,y]of i)y===0&&a.push(l);a.sort();let u=[];for(;a.length>0;){let l=a.shift();u.push(l);let y=c.get(l)??[];for(let f of y){let b=(i.get(f)??1)-1;if(i.set(f,b),b===0){let h=a.findIndex(d=>d>f);h===-1?a.push(f):a.splice(h,0,f);}}}return u};Gr(Wt);var Ht=e=>{let t=_t()[e];if(!t)return null;let r=Xr()[e];return {deps:[...t.deps],dependents:r?[...r]:[]}};var qt=new Set,En=()=>{qt.clear();};x("options.legacy-warnings",En,30);var ot=(()=>{let e=new Map;return {getItem:t=>e.has(t)?e.get(t):null,setItem:(t,r)=>{e.set(t,r);},removeItem:t=>{e.delete(t);},type:"memory"}})(),Lt=e=>{try{return typeof window>"u"?ot:e==="session"||e==="sessionStorage"?window.sessionStorage??ot:window.localStorage??ot}catch{return ot}},$e=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),ve=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),eo=e=>{try{let t=`__stroid_plaintext_probe_${Math.random().toString(36).slice(2)}__`,r=`__stroid_plaintext_probe_${Math.random().toString(36).slice(2)}__`;return e(t)!==t?!1:e(r)===r}catch{return false}},Tn=typeof Symbol=="function"?Symbol.for("stroid.persist.defaultCrypto"):"__stroid_persist_defaultCrypto__",Zr=e=>{try{e[Tn]=!0;}catch{}return e},Fn={allowSSRGlobalStore:'scope: "global"',schema:"validate",validator:"validate",version:"persist.version",migrations:"persist.migrations",historyLimit:"devtools.historyLimit",redactor:"devtools.redactor",middleware:"lifecycle.middleware",onCreate:"lifecycle.onCreate",onSet:"lifecycle.onSet",onReset:"lifecycle.onReset",onDelete:"lifecycle.onDelete"},On=(e,t)=>{if(!e)return null;let r={key:`stroid_${t}`,serialize:JSON.stringify,deserialize:JSON.parse,encrypt:Zr(y=>y),decrypt:Zr(y=>y),allowPlaintext:false,sensitiveData:false,onMigrationFail:"reset",checksum:"hash"};if(e===true)return {driver:Lt("localStorage"),...r};if(typeof e=="string")return {driver:Lt(e),...r};let o=e.encrypt||r.encrypt,n=e.decrypt||r.decrypt,s=e.encryptAsync,i=e.decryptAsync,c=e.sensitiveData===true,a=e.allowPlaintext===true,u=typeof e.maxSize=="number"&&Number.isFinite(e.maxSize)&&e.maxSize>0?e.maxSize:void 0,l=e.checksum==="sha256"?"sha256":e.checksum==="none"?"none":"hash";if(s&&!i||!s&&i)throw new Error(`[stroid/persist] Store "${t}" must provide both encryptAsync and decryptAsync when using async crypto.`);if(c&&eo(o)&&!s)throw new Error(`[stroid/persist] Store "${t}" is marked sensitiveData but is configured to persist in plaintext. Provide encrypt/decrypt hooks to protect sensitive data.`);return {driver:e.driver||e.storage||Lt("localStorage"),key:e.key||r.key,serialize:e.serialize||r.serialize,deserialize:e.deserialize||r.deserialize,encrypt:o,decrypt:n,encryptAsync:s,decryptAsync:i,allowPlaintext:a,sensitiveData:c,maxSize:u,checksum:l,onMigrationFail:e.onMigrationFail||"reset",onStorageCleared:e.onStorageCleared}},to=e=>{if(!$e(e))return [];let t=[];return Object.entries(Fn).forEach(([r,o])=>{ve(e,r)&&(qt.has(r)||(qt.add(r),t.push(`createStore option "${r}" is deprecated. Use "${o}" instead.`)));}),t},ro=(e={},t,r="deep")=>{let o=e.scope??"request",n=e.lazy===true,s=e.pathCreate===true,i=$e(e.lifecycle)?e.lifecycle:void 0,c=$e(e.persist)?e.persist:void 0,a=$e(e.devtools)?e.devtools:void 0,u=e.validate??e.validator??e.schema,l=e.snapshot==="shallow"||e.snapshot==="ref"||e.snapshot==="deep"?e.snapshot:r==="shallow"||r==="ref"||r==="deep"?r:"deep",y=e.snapshotSafety==="warn"||e.snapshotSafety==="throw"||e.snapshotSafety==="auto-clone"?e.snapshotSafety:void 0,f=$e(e.features)?{...e.features}:void 0,b=ve(e,"persist"),h=ve(e,"sync"),d=ve(e,"devtools")||ve(e,"historyLimit")||ve(e,"redactor"),R=o==="global"?true:e.allowSSRGlobalStore??false,{persist:w=false,devtools:O=false,onError:P,sync:I}=e;if(c?.sensitiveData===true){let D=c.encrypt,m=c.encryptAsync;if((!D||eo(D))&&!m)throw new Error(`[stroid/persist] Store "${t}" is marked sensitiveData but is configured to persist in plaintext. Provide encrypt/decrypt hooks to protect sensitive data.`)}return {scope:o,lazy:n,pathCreate:s,persist:o==="temp"&&!b?null:On(w,t),devtools:o==="temp"&&!d?false:typeof O=="boolean"?O:a?.enabled??true,middleware:i?.middleware??e.middleware??[],onSet:i?.onSet??e.onSet,onReset:i?.onReset??e.onReset,onDelete:i?.onDelete??e.onDelete,onCreate:i?.onCreate??e.onCreate,onError:P,validate:u,migrations:c?.migrations??e.migrations??{},version:c?.version??e.version??1,redactor:o==="temp"&&!d?void 0:a?.redactor??e.redactor,historyLimit:o==="temp"&&!d?0:a?.historyLimit??e.historyLimit??50,sync:o==="temp"&&!h?false:I??false,features:f,allowSSRGlobalStore:R,snapshot:l,snapshotSafety:y,explicitPersist:b,explicitSync:h,explicitDevtools:d}};var nt=new Set,no=e=>e?nt.has(e):nt.size>0,so=e=>{e&&nt.add(e);},Vn=()=>{nt.clear();};x("ssr.warnings",Vn,60);var oo=new Set,Dn=e=>{let t=Cr();return !t||e.includes("::")?e:(v()&&!oo.has(e)&&(oo.add(e),g(`Namespace "${t}" is active; treating store "${e}" as "${t}::${e}". Consider using namespace("${t}").create("...") to be explicit.`)),`${t}::${e}`)},st=e=>Dn(typeof e=="string"?e:e.name),it=e=>U(e)&&!co(e)?true:(Ft(e,Object.keys(We)),false),io=(e,t,r={})=>{pe(t,{...r,onError:V[e]?.options?.onError});},ao=(e,t,r={})=>{pe(e,{...r,onError:t});},fe=(e,t,r="dev")=>{io(e,t,{severity:"warn",visibility:r});},jn=(e,t,r="dev")=>{ao(e,t,{severity:"warn",visibility:r});},ze=(e,t)=>io(e,t,{severity:"critical",visibility:"always"}),_e=(e,t)=>ao(e,t,{severity:"critical",visibility:"always"}),at=(e,t,r)=>{let o=`Store "${e}" requested ${t} support, but "${t}" is not registered.
9
- Import "stroid/${t}" before calling createStore("${e}", ...).`;if(jn(o,r,"always"),k().strictMissingFeatures)throw new Error(o)};var uo=new WeakMap,lo=new WeakMap;var ct=e=>{let t=uo.get(e);return t||(t=new Map,uo.set(e,t)),t},po=e=>{let t=lo.get(e);return t||(t=new Map,lo.set(e,t)),t};new Proxy(new Map,{get:(e,t)=>{let r=ct(M());if(t==="size")return r.size;if(t===Symbol.iterator)return r[Symbol.iterator].bind(r);let o=r[t];return typeof o=="function"?o.bind(r):o},set:(e,t,r)=>(ct(M())[t]=r,true)});var xe=(e,t,r,o)=>{try{return o?.reuseInput&&jt(t)?{ok:!0,value:t}:{ok:!0,value:ce(t)}}catch(n){let s=`Sanitize failed for "${e}": ${n?.message??n}`;return de(V[e]?.options?.onError,`onError(${e})`,s),de(r,`onError(${e})`,s),g(s),{ok:false}}},An=(e,t)=>{let r=new Set,o=V[e]?.options?.onError;return typeof o=="function"&&r.add(o),typeof t=="function"&&r.add(t),r},Bt=(e,t,r,o)=>{if(!r)return {ok:true,value:t};let n=An(e,o),s=(c,a)=>{n.forEach(u=>de(u,`onError(${e})`,c)),a==="critical"?ae(c):g(c);};if(typeof r=="function")try{let c=r(t);return c===!1?(s(`Validation blocked update for "${e}"`,"warn"),{ok:!1}):{ok:!0,value:c===!0?t:c}}catch(c){return s(`Validation for "${e}" failed: ${c?.message??c}`,"critical"),{ok:false}}let i=Vt(r,t);return i.ok?{ok:true,value:i.data??t}:(s(`Validation failed for "${e}": ${i.error}`,"critical"),{ok:false})},He=(e,t,r,o,n)=>{let s=xe(e,t,o,n);if(!s.ok)return {ok:false};let i=Bt(e,s.value,r,o);return i.ok?{ok:true,value:i.value}:{ok:false}},Q=e=>{let t=M();ct(t).delete(e),po(t).delete(e);},Nn=()=>{let e=M();ct(e).clear(),po(e).clear();};x("validation.path-cache",Nn,50);go(Q);var fo=(e,t=M())=>{if((z()?we(e):{has:false}).has||t.stores[e]!==void 0)return true;let o=t.initialFactories[e];if(!o)return true;try{let n=o(),s=xe(e,n,t.metaEntries[e]?.options?.onError);if(!s.ok)return !1;let i=t.metaEntries[e]?.options?.validate,c=He(e,s.value,i,t.metaEntries[e]?.options?.onError);if(!c.ok)return !1;if(z()){let a=c.value;Ze(e,a),Qe(()=>{K(e,a,t),t.initialStates[e]=C(a),delete t.initialFactories[e],Q(e);});}else K(e,c.value,t),t.initialStates[e]=C(c.value),delete t.initialFactories[e],Q(e);return !0}catch(n){return ze(e,`Lazy initializer for "${e}" failed: ${n?.message??n}`),false}};var So=new WeakMap,yo=e=>{let t=So.get(e);return t||(t=new Map,So.set(e,t)),t},Pn=()=>{yo(M()).clear();};x("features.contexts",Pn,100);var mo=e=>{let t=M(),r=yo(t),o=r.get(e);if(o)return o;let n=V[e];if(!n)return g(`Internal feature context requested for "${e}" after metadata was cleared.`),null;let s={name:e,options:n.options,getMeta:()=>V[e],getStoreValue:()=>We[e],getAllStores:()=>We,getInitialState:()=>Ro[e],hasStore:()=>U(e),setStoreValue:i=>{K(e,i);},applyFeatureState:(i,c)=>{ko(e,i,c),Q(e);},notify:()=>{},reportStoreError:i=>{ze(e,i);},warn:g,warnAlways:T,log:_,hashState:Ne,deepClone:C,sanitize:ce,validate:i=>Bt(e,i,V[e]?.options?.validate),isDev:v};return r.set(e,s),s},ho=(e,t)=>{let r=k();if(!r.strictMissingFeatures&&!r.assertRuntime)return;let o=[];if(typeof t.getMeta!="function"&&o.push("getMeta"),typeof t.getStoreValue!="function"&&o.push("getStoreValue"),typeof t.getAllStores!="function"&&o.push("getAllStores"),typeof t.getInitialState!="function"&&o.push("getInitialState"),typeof t.hasStore!="function"&&o.push("hasStore"),typeof t.setStoreValue!="function"&&o.push("setStoreValue"),typeof t.applyFeatureState!="function"&&o.push("applyFeatureState"),typeof t.notify!="function"&&o.push("notify"),typeof t.reportStoreError!="function"&&o.push("reportStoreError"),typeof t.warn!="function"&&o.push("warn"),typeof t.warnAlways!="function"&&o.push("warnAlways"),typeof t.log!="function"&&o.push("log"),typeof t.hashState!="function"&&o.push("hashState"),typeof t.deepClone!="function"&&o.push("deepClone"),typeof t.sanitize!="function"&&o.push("sanitize"),typeof t.validate!="function"&&o.push("validate"),typeof t.isDev!="function"&&o.push("isDev"),o.length===0)return;let n=`Feature hook context missing fields for "${e}": ${o.join(", ")}.`;if(ze(e,n),r.assertRuntime)throw new Error(n)},bo=(e,t)=>{lt();let r=mo(e);r&&(r.notify=()=>t(e),ho(e,r),B.forEach(o=>{o.onStoreCreate?.(r);}));},wo=(e,t,r,o,n)=>{lt();let s=mo(e);if(!s)return;s.notify=()=>n(e);let i=Object.assign(Object.create(s),{action:t,prev:r,next:o});ho(e,i),B.forEach(c=>{c.onStoreWrite?.(i);});};var vo=(e,t)=>Kr({name:e,payload:t,middlewares:(()=>{let r=V[e]?.options?.middleware||[],o=k().middleware||[];return r.length===0?o:o.length===0?r:[...r,...o]})(),reportIssue:(r,o)=>{fe(e,r,o);},warn:g}),ut=(e,t,r,o)=>tt({name:e,label:t,fn:r,args:o,reportIssue:(n,s)=>{fe(e,n,s);}}),xo=(e,t)=>{let r={...t};return r.persist&&!Ke("persist")&&(r.explicitPersist&&at(e,"persist",r.onError),r.persist=null),r.sync&&!Ke("sync")&&(r.explicitSync&&at(e,"sync",r.onError),r.sync=false),Ke("devtools")||(r.explicitDevtools&&at(e,"devtools",r.onError),r.devtools=false,r.historyLimit=0,r.redactor=void 0),r};var dt=null,Co=e=>(dt=e,()=>{dt===e&&(dt=null);}),Re=e=>{dt?.(e);};var pt=new Set,In=e=>{pt.clear();};x("store-create.ssr-global-warned",()=>In(),65);function Mo(e,t,r={}){if(z()){let m=`createStore("${String(e)}") cannot be called inside setStoreBatch. Move createStore outside the batch to preserve transaction semantics.`;_e(m,r.onError),be(m);return}if(!Ae(e)){_e(`createStore("${String(e)}") is not a valid store name.`,r.onError);return}if(!(r.lazy===true&&typeof t=="function")&&!Dt(t)){_e(`createStore("${e}") received invalid initial data.`,r.onError);return}t===void 0&&v()&&g(`createStore("${e}") 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.`),to(r).forEach(m=>{g(m);});let n=xo(e,ro(r,e,k().defaultSnapshotMode));if(n.scope==="temp"&&r.persist){let m=`Store "${e}" has scope: "temp" but persist is enabled. Temp stores are intended to be ephemeral.`;de(n.onError,`onError(${e})`,m),v()||T(m),L(m);}let s=typeof window>"u",i=typeof process<"u"?process.env?.NODE_ENV:void 0,c=s&&i==="production",a=n.allowSSRGlobalStore??false,u=M(),l=u.stores,y=u.subscribers,f=u.initialStates,b=u.initialFactories,h=u.metaEntries,d=u.scope==="request";if(c&&!a&&!d){let m=`createStore("${e}") is blocked on the server in production to prevent cross-request memory leaks.
10
- Call createStoreForRequest(...) inside each request scope or pass { scope: "global" } to opt in.`;_e(m,r.onError);return}if(c&&a&&!d&&!pt.has(e)&&(pt.add(e),T(`createStore("${e}") is allowed on the server in production because allowSSRGlobalStore is true.
11
- This can leak data across concurrent requests. Prefer createStoreForRequest(...) or scope: "request" unless you truly need a global SSR store.`)),U(e,u)){let m=`Store "${e}" already exists. Call setStore("${e}", data) to update instead.`;return fe(e,m),{name:e}}s&&!a&&!d&&!no(e)&&v()&&(so(e),g(`createStore("${e}") called in a server environment. Use createStoreForRequest(...) per request to avoid cross-request leaks or pass { allowSSRGlobalStore: true } if you really want a global store on the server.`));let R=xe(e,t,n.onError);if(!R.ok)return;let w=R.value,O=n.lazy===true&&typeof t=="function",P=(y[e]?.size??0)>0;if(O)l[e]=void 0,b[e]=t;else {let m=He(e,w,n.validate,n.onError);if(!m.ok)return;K(e,m.value,u),f[e]=C(m.value);}let I=Date.now(),D=new Date(I).toISOString();return h[e]={createdAt:D,updatedAt:D,updatedAtMs:I,updateCount:0,version:n.version,metrics:{notifyCount:0,totalNotifyMs:0,lastNotifyMs:0,resetCount:0,totalResetMs:0,lastResetMs:0},options:n,readCount:0,lastReadAt:null,lastReadAtMs:null,lastCorrelationId:null,lastCorrelationAt:null,lastCorrelationAtMs:null,lastTraceContext:null},Q(e),bo(e,Re),ut(e,"onCreate",h[e].options.onCreate,[w]),Eo(u,{type:"created",name:e,isGlobal:n.scope==="global",isTemp:n.scope==="temp"}),P&&Re(e),_(`Store "${e}" created -> ${JSON.stringify(w)}`),{name:e}}var $n=(e,t)=>{let r=e?.options?.snapshot??t;return r==="shallow"||r==="ref"?r:"deep"},To=(e,t)=>t==="ref"?e:t==="shallow"?Pe(e):C(e);function Ut(e,t){let r=st(e);if(!it(r))return null;let o=M();if(!fo(r,o))return null;Kt(r,o);let n=Le(r,o),s=$n(o.metaEntries[r],k().defaultSnapshotMode);return n===null||typeof n!="object"?n:To(n,s);}var qe=null,oe=null,Fo=e=>{if(!e){oe=null;return}if(oe&&oe!==e){T("injectWriteContextRunner(...) was called more than once. The existing runner will be kept to avoid cross-request write-context leaks. If you need to replace it in tests, call injectWriteContextRunner(null) first.");return}oe=e;},zn=()=>{qe=null,oe=null;};x("write-context.runner",zn,121);var ft=()=>oe?.get()??qe,Gt=(e,t)=>{if(!e||!e.correlationId&&!e.traceContext)return t();if(oe)return oe.run(e,t);let r=qe;qe=e;try{return t()}finally{qe=r;}};var _n=new Set;x("store-write.slow-mutator-warned",()=>_n.clear(),65);var Wn=e=>{if(e.updateCount>=Number.MAX_SAFE_INTEGER){e.updateCount=0;return}e.updateCount+=1;};var Vo=e=>ft(),Oo=(e,{name:t,prev:r,next:o,action:n,hookLabel:s,logMessage:i,context:c})=>{let a=e.metaEntries;K(t,o,e),Q(t);let u=Date.now();a[t].updatedAt=new Date(u).toISOString(),a[t].updatedAtMs=u;let l=c??ft();l&&(l.correlationId||l.traceContext)?(a[t].lastCorrelationId=l.correlationId??null,a[t].lastCorrelationAt=new Date(u).toISOString(),a[t].lastCorrelationAtMs=u,a[t].lastTraceContext=l.traceContext??null):(a[t].lastCorrelationId=null,a[t].lastCorrelationAt=null,a[t].lastCorrelationAtMs=null,a[t].lastTraceContext=null),Wn(a[t]),wo(t,n,r,o,Re),ut(t,s,a[t].options[s],[r,o]),Re(t),_(i);},Do=(e,t)=>{let r=t.context??ft();if(z()){Ze(t.name,t.next),Qe(()=>Oo(e,{...t,context:r}));return}Oo(e,{...t,context:r});};function jo(e,t){let r=st(e);if(!r)return {ok:false,reason:"invalid-args"};let o=M(),n=Yt(o,r,t,"replace");return n.ok?{ok:true}:n.reason==="not-found"?{ok:false,reason:"not-found"}:n.reason==="middleware"?{ok:false,reason:"middleware"}:{ok:false,reason:"validate"}}var Yt=(e,t,r,o="hydrate",n)=>{let s=(h,d)=>(z()&&be(d??h),{ok:false,reason:h});if(!it(t))return s("not-found",`replaceStore("${t}") called before createStore().`);let i=z()?we(t):{has:false,value:void 0},c=i.has?i.value:Le(t,e),a=xe(t,r);if(!a.ok)return s("sanitize",`replaceStore("${t}") failed sanitize`);let u=a.value;if(u===void 0){let h=`Whole-store undefined replacement is blocked for "${t}". Use null for intentional empty state.`;return fe(t,h),s("undefined",h)}let l=e.metaEntries[t]?.options?.validate,y=Vo(),f=vo(t,{action:o,prev:c,next:u,path:null,correlationId:y?.correlationId,traceContext:y?.traceContext});if(f===et)return s("middleware",`replaceStore("${t}") aborted by middleware`);let b=He(t,f,l);return b.ok?(Do(e,{name:t,prev:c,next:b.value,action:o,hookLabel:"onSet",logMessage:`Store "${t}" ${o==="hydrate"?"hydrated":"replaced"}`,context:y}),{ok:true}):s("validate",`replaceStore("${t}") failed validation`)};var Hn=()=>M().computedCleanups,Ao=new WeakMap;var Ln=e=>{let t=Ao.get(e);return t||(t=new Map,Ao.set(e,t)),t};var No=e=>{let t=Hn(),r=t.get(e);if(!r){v()&&g(`deleteComputed("${e}") -- not found`);return}r(),t.delete(e);};var Po=(e,t=M())=>Ln(t).get(e)?.autoDispose===true;var Io=new Map;var Jt=e=>{let t=Io.get(e);return !!t&&t.size>0},Be=(e,t,r)=>{let o=Io.get(e);!o||o.size===0||o.forEach(n=>{try{n(t,r);}catch(s){typeof console<"u"&&console.warn&&console.warn(`[stroid] lifecycle hook "${e}" failed:`,s);}});};var $o=e=>{let t=e.stores,r=e.subscribers,o=e.initialStates,n=e.initialFactories,s=e.metaEntries,i=e.snapshotCache,c=e.featureRuntimes,a=e.deletingStores,u=(d,R)=>{pe(R,{onError:s[d]?.options?.onError,severity:"warn",visibility:"dev"});},l=({name:d,prev:R,options:w,initialState:O,getMeta:P,getStoreValue:I,hasStore:D})=>({name:d,options:w,prev:R,getMeta:P,getStoreValue:I,getAllStores:()=>t,getInitialState:()=>O,hasStore:D,setStoreValue:()=>{},applyFeatureState:()=>{},notify:()=>{},reportStoreError:m=>{pe(m,{onError:w.onError,severity:"warn",visibility:"dev"});},warn:g,warnAlways:T,log:_,hashState:Ne,deepClone:C,sanitize:ce,validate:()=>({ok:true,value:R}),isDev:v}),y=({name:d,prev:R,options:w,initialState:O,phase:P})=>{let I=l({name:d,prev:R,options:w,initialState:O,getMeta:()=>s[d],getStoreValue:()=>t[d],hasStore:()=>ie(e,d)}),D=l({name:d,prev:R,options:w,initialState:O,getMeta:()=>{},getStoreValue:()=>R,hasStore:()=>false});Se().forEach(m=>{let $=c.get(m);P==="before"?$?.beforeStoreDelete?.(I):$?.afterStoreDelete?.(D);});},f=d=>{if(!ie(e,d))return;let R=t[d],w=s[d].options,O=o[d],P=r[d];a.add(d);try{P?.forEach(m=>{try{m(null);}catch($){g(`Subscriber for "${d}" threw during delete: ${$?.message??$}`);}}),tt({name:d,label:"onDelete",fn:w.onDelete,args:[R],reportIssue:(m,$)=>{pe(m,{onError:w.onError,severity:"warn",visibility:$});}}),y({name:d,prev:R,options:w,initialState:O,phase:"before"}),delete t[d],delete r[d],delete o[d],delete n[d],delete s[d],delete i[d],Qr(d)&&No(d);let D=e.computedDependents[d];if(D)for(let m of [...D]){let $=Ht(m);if($&&Po(m,e)&&$.deps.every(Ce=>!ie(e,Ce))){f(m);continue}g(`[stroid] source store "${d}" was deleted. Computed store "${m}" depends on it and will return stale data. Call deleteComputed("${m}") to clean up.`);}y({name:d,prev:R,options:w,initialState:O,phase:"after"}),Be("afterStoreDelete",d,{type:"afterStoreDelete",prev:R}),Ye(e,{type:"deleted",name:d}),_(`Store "${d}" deleted`);}finally{a.delete(d);}};return {deleteExistingStore:f,clearAllStores:()=>{let d=[],w=0,O=Number.POSITIVE_INFINITY;for(;w<20;){let I=Object.keys(t);if(I.length===0)break;I.forEach(m=>{ie(e,m)&&(f(m),d.push(m));}),w+=1;let D=Object.keys(t).length;if(D===0||D>=O)break;O=D;}let P=Object.keys(t).length;return P>0?g(`clearAllStores stopped after ${w} pass${w===1?"":"es"}; ${P} store(s) still registered (likely recreated during deletion).`):_(`All stores cleared (${d.length} stores removed)`),d},clearStores:d=>{let R=Object.keys(t).filter(w=>d?d.endsWith("*")?w.startsWith(d.slice(0,-1)):w===d:true);return R.forEach(w=>f(w)),R},reportStoreError:u}};var Xt=ye,_o=me(Xt),Wo=null,N=()=>{let e=X(_o);return xt(e),e};var M=()=>N();var Eo=(e,t)=>{Ye(e,t);};function go(e){Wo=e;}var ke=e=>new Proxy(Object.create(null),{get:(t,r)=>e()[r],set:(t,r,o)=>(e()[r]=o,true),deleteProperty:(t,r)=>(delete e()[r],true),has:(t,r)=>r in e(),ownKeys:()=>Reflect.ownKeys(e()),getOwnPropertyDescriptor:(t,r)=>{let o=Object.getOwnPropertyDescriptor(e(),r);if(o)return {...o,configurable:true}}}),qn=e=>new Proxy(new Map,{get:(t,r)=>{let o=e();if(r==="size")return o.size;if(r===Symbol.iterator)return o[Symbol.iterator].bind(o);let n=o[r];return typeof n=="function"?n.bind(o):n},set:(t,r,o)=>(e()[r]=o,true)}),Bn=e=>new Proxy({},{get:(t,r)=>{let o=e(),n=o[r];return typeof n=="function"?n.bind(o):n},set:(t,r,o)=>(e()[r]=o,true)}),We=ke(()=>N().stores);ke(()=>N().subscribers);var Ro=ke(()=>N().initialStates);ke(()=>N().initialFactories);var V=ke(()=>N().metaEntries);ke(()=>N().snapshotCache);var B=qn(()=>N().featureRuntimes),zo=new WeakMap,Un=e=>{let t=zo.get(e);return t||(t=$o(e),zo.set(e,t)),t};Bn(()=>Un(N()));var Kn=e=>{let t=B.get(e);if(t)return t;let r=Ge(e);if(!r)return;let o=r();return B.set(e,o),o},lt=()=>{Se().forEach(e=>{Kn(e);});};lt();var U=(e,t)=>ie(t??N(),e),Le=(e,t=N())=>{if(z()){let o=we(e);if(o.has)return o.value}let r=Oe();return r&&Object.prototype.hasOwnProperty.call(r,e)?r[e]:t.stores[e]},K=(e,t,r=N())=>{let o=Oe();o?(o[e]=t,Object.prototype.hasOwnProperty.call(r.stores,e)||(r.stores[e]=void 0)):r.stores[e]=t;},ko=(e,t,r=Date.now())=>{K(e,t),V[e]&&(V[e].updatedAt=new Date(r).toISOString(),V[e].updatedAtMs=r,V[e].lastCorrelationId=null,V[e].lastCorrelationAt=null,V[e].lastCorrelationAtMs=null,V[e].lastTraceContext=null,V[e].updateCount>=Number.MAX_SAFE_INTEGER?V[e].updateCount=0:V[e].updateCount+=1,Wo?.(e));},Kt=(e,t=N())=>{let r=t.metaEntries[e];if(!r)return;r.readCount=(r.readCount??0)+1;let o=Date.now();r.lastReadAtMs=o,r.lastReadAt=new Date(o).toISOString();},Gn=()=>{hr(N());},Yn=()=>{B.forEach(e=>{try{e.resetAll?.();}catch{}}),B.clear();};x("features.reset",Yn,10);x("registries.clear",Gn,20);x("registry.default",()=>{Xt=ye,_o=me(Xt);},115);var co=e=>mr(N(),e);var Ho=(e,t)=>{let r=e?.options?.snapshot??t;return r==="shallow"||r==="ref"?r:"deep"},Qt=(e,t)=>{if(t==="ref"){if(!v())return e;try{return zt(e)}catch{return e}}if(t==="shallow"){let o=Pe(e);if(!v())return o;try{return zt(o)}catch{return o}}let r=C(e);if(!v())return r;try{return Br(r)}catch{return r}};var Lo=e=>{let{pendingNotifications:t,pendingBuffer:r,orderedNames:o}=e,n=k().flush,s=n.priorityStores||[],i=s.length?new Set(s):null;o.length=0,r.length=0;let c=new Set;if(i){for(let h of t)r.push(h),c.add(h);for(let h of s)c.has(h)&&o.push(h);for(let h of r)i.has(h)||o.push(h);}else for(let h of t)r.push(h),c.add(h),o.push(h);t.clear();let a=Yr(o),u=new Set(o);for(let h of a)u.has(h)||(o.push(h),u.add(h));let l=Number.isFinite(n.chunkSize)&&n.chunkSize>0?n.chunkSize:Number.POSITIVE_INFINITY,y=n.chunkDelayMs,f=l===Number.POSITIVE_INFINITY&&y===0;return {names:o,sliceSize:l,chunkDelayMs:y,runInline:f,prioritySet:i}};var Zt=e=>({notifyCount:e?.notifyCount??0,totalNotifyMs:e?.totalNotifyMs??0,lastNotifyMs:e?.lastNotifyMs??0,resetCount:e?.resetCount??0,totalResetMs:e?.totalResetMs??0,lastResetMs:e?.lastResetMs??0}),er=(e,t)=>(e.notifyCount+=1,e.totalNotifyMs+=t,e.lastNotifyMs=t,e),tr=(e,t)=>{e&&(e.metrics=t);};var Ue=(e,t)=>{if(t>0&&typeof setTimeout=="function"){setTimeout(e,t);return}if(typeof queueMicrotask=="function"){queueMicrotask(e);return}Promise.resolve().then(e);},qo=(e,t)=>{let r=e.notify;if(r.notifyScheduled)return;r.notifyScheduled=true;let o=()=>Je(e,()=>t(e));typeof queueMicrotask=="function"?queueMicrotask(o):Promise.resolve().then(o);};var Bo=e=>{if(!(e instanceof TypeError))return false;let t=e?.message??String(e);return /read only|readonly|cannot assign|cannot add property|cannot delete property/i.test(t)},Uo=(e,t,r,o)=>{let n=e.notify,{names:s,sliceSize:i,chunkDelayMs:c,runInline:a,prioritySet:u}=t,l=Oe(),y=e.stores,f=e.subscribers,b=e.metaEntries,h=e.snapshotCache,d=k().defaultSnapshotMode,R=S=>Ho(b[S],d),w=S=>l&&Object.prototype.hasOwnProperty.call(l,S)?l[S]:y[S],O=()=>typeof performance<"u"&&performance.now?performance.now():Date.now(),P=Jt("beforeFlush"),I=Jt("afterFlush"),D=S=>{P&&Be("beforeFlush",S,{type:"beforeFlush"});},m=(S,j)=>{I&&Be("afterFlush",S,{type:"afterFlush",elapsedMs:j});},$=S=>{let j=b[S];if(!j)return null;let E=j.lastCorrelationId??void 0,p=j.lastTraceContext??void 0;return !E&&!p?null:{correlationId:E,traceContext:p}},Ce=()=>{o();};if(a){for(let S of s){let j=f[S];if(!j||j.size===0)continue;let E=b[S]?.updateCount??0,p=R(S),ge=w(S),W=h[S],H=W&&W.source===ge&&W.mode===p?W.snapshot:(()=>{let A=Qt(ge,p);return h[S]={version:r,snapshot:A,source:ge,mode:p},A})(),G=Zt(b[S]?.metrics);D(S);let ne=O(),Z=Array.from(j),Me=$(S),Ee=()=>{for(let A of Z)try{A(H);}catch(se){let Y=b[S]?.options?.snapshotSafety??"warn";if(v()&&(p==="ref"||p==="shallow")&&Bo(se)){if(Y==="throw")throw se;if(Y==="auto-clone")try{let Fe=C(H);g(`Snapshot mutation detected for "${S}". Delivered a cloned snapshot to the subscriber.`);try{A(Fe);}catch(bt){g(`Subscriber for "${S}" threw on cloned snapshot: ${bt?.message??bt}`);}continue}catch{}g(`Snapshot mutation detected for "${S}": ${se?.message??se}`);continue}g(`Subscriber for "${S}" threw: ${se?.message??se}`);}};Me?Gt(Me,Ee):Ee();let Te=O()-ne;m(S,Te),er(G,Te),tr(b[S],G),(b[S]?.updateCount??E)!==E&&n.pendingNotifications.add(S);}Ce();return}let sr=S=>{let j=[];for(let E of s){if(S&&!S(E))continue;let p=f[E];if(!p||p.size===0)continue;let ge=b[E]?.updateCount??0,W=R(E),H=w(E),G=h[E],ne=G&&G.source===H&&G.mode===W?G.snapshot:(()=>{let Z=Qt(H,W);return h[E]={version:r,snapshot:Z,source:H,mode:W},Z})();j.push({name:E,snapshot:ne,version:ge,subscribers:Array.from(p),subscriberSet:new Set(p),notified:new Set,metrics:Zt(b[E]?.metrics),totalMs:0,beforeHooked:false});}return j},ir=u?sr(S=>u.has(S)):[],ar=sr(S=>!u||!u.has(S)),mt=(S,j)=>{let E=()=>{if(S.length===0){j();return}let p=S.shift();if((b[p.name]?.updateCount??p.version)!==p.version){if(n.pendingNotifications.add(p.name),S.length===0){j();return}Ue(E,c);return}let W=()=>{let q=f[p.name];if(!(!q||q.size===0))for(let A of q)p.subscriberSet.has(A)||(p.subscriberSet.add(A),p.subscribers.push(A));};W();let H=p.subscribers;if(H.length===0){if(S.length===0){j();return}Ue(E,c);return}p.beforeHooked||(p.beforeHooked=true,D(p.name));let G=O(),ne=0,Z=false,Me=$(p.name),Ee=()=>{for(let q=0;q<H.length&&ne<i;q+=1){let A=H[q];if(p.notified.has(A))continue;p.notified.add(A);try{A(p.snapshot);}catch(Y){let ht=b[p.name]?.options?.snapshotSafety??"warn",Fe=R(p.name);if(v()&&(Fe==="ref"||Fe==="shallow")&&Bo(Y)){if(ht==="throw")throw Y;if(ht==="auto-clone")try{let cr=C(p.snapshot);g(`Snapshot mutation detected for "${p.name}". Delivered a cloned snapshot to the subscriber.`);try{A(cr);}catch(ur){g(`Subscriber for "${p.name}" threw on cloned snapshot: ${ur?.message??ur}`);}if(p.notified.add(A),ne+=1,(b[p.name]?.updateCount??p.version)!==p.version){Z=!0,n.pendingNotifications.add(p.name);break}continue}catch{}g(`Snapshot mutation detected for "${p.name}": ${Y?.message??Y}`);continue}g(`Subscriber for "${p.name}" threw: ${Y?.message??Y}`);}if(ne+=1,(b[p.name]?.updateCount??p.version)!==p.version){Z=true,n.pendingNotifications.add(p.name);break}}};if(Me?Gt(Me,Ee):Ee(),p.totalMs+=O()-G,Z){if(S.length===0){j();return}Ue(E,c);return}W();let Te=false;for(let q of H)if(!p.notified.has(q)){Te=true;break}if(Te?S.push(p):(er(p.metrics,p.totalMs),tr(b[p.name],p.metrics),m(p.name,p.totalMs)),S.length===0){j();return}Ue(E,c);};E();};ir.length>0?mt(ir,()=>mt(ar,Ce)):mt(ar,Ce);};var Jn=e=>{let t=e.notify;t.isFlushing=true,t.flushId=t.flushId+1>>>0;let r=t.flushId,o=Lo(t);Uo(e,o,r,()=>{t.isFlushing=false,t.notifyScheduled=false,t.pendingNotifications.size>0&&rr(e);});},rr=e=>{qo(e,Jn);};var Xn=e=>{let t=M(),r=t.notify;r.pendingNotifications.add(e),r.batchDepth===0&&rr(t);};Co(Xn);var Qn=()=>{let e=M().notify;e.pendingNotifications.clear(),e.pendingBuffer.length=0,e.orderedNames.length=0,e.notifyScheduled=false,e.batchDepth=0;};x("notify.reset",Qn,40);var gt=(e,t={},r)=>{if(z()){let a="hydrateStores(...) cannot be called inside setStoreBatch.";return g(a),be(a),{hydrated:[],created:[],failed:[],blocked:{reason:"transaction"}}}let o={hydrated:[],created:[],failed:[]};if(!e||typeof e!="object")return o;let n=M(),s=r??{};if(!(s.allowTrusted===true||s.allowHydration===true||s.allowUntrusted===true||k().allowUntrustedHydration===true))return T("hydrateStores(...) requires explicit trust. Pass { allowTrusted: true } (or { allowHydration: true }) as the third argument or configureStroid({ allowTrustedHydration: true })."),o.blocked={reason:"untrusted"},o;if(typeof s.validate=="function"){let a=false;try{a=!!s.validate(e);}catch(u){let l=`hydrateStores() trust.validate threw: ${u?.message??u}`;if(v())throw new Error(`hydrateStores() trust.validate threw an error. Fix your validator before this becomes a silent production failure.
12
- Original error: ${u?.message??u}`);let y=t?.default?.onError;if(typeof y=="function")try{y(l);}catch(f){T(`hydrateStores(...) onError threw: ${f?.message??f}`);}if(T(l),typeof s.onValidationError=="function")try{if(!!s.onValidationError(u,e))a=!0;else return o.blocked={reason:"validation-error",cause:u},o}catch(f){return T(`hydrateStores(...) onValidationError threw: ${f?.message??f}`),o.blocked={reason:"validation-error",cause:f},o}else return o.blocked={reason:"validation-error",cause:u},o}if(!a)return T("hydrateStores(...) rejected by trust validation."),o.blocked={reason:"validation-failed"},o}let c=[];return Object.entries(e).forEach(([a,u])=>{if(!Ae(a)){o.failed.push({name:a,reason:"invalid-name"});return}if(U(a,n)){let l=Yt(n,a,u,"hydrate");l.ok?(o.hydrated.push(a),c.push(a)):o.failed.push({name:a,reason:"merge-failed",cause:l.reason,received:u});}else {let l=t;Mo(a,u,l[a]||l.default||{})?(o.created.push(a),c.push(a)):o.failed.push({name:a,reason:"create-failed",received:u});}}),c.length>0&&Wt(c).forEach(u=>{let l=n.computedEntries[u];if(!l)return;let y=l.deps.map(f=>Ut(f));try{let f=l.compute(...y);if(f&&typeof f.then=="function"){g(`hydrateStores recompute for "${u}" returned a Promise; skipping.`);return}let b=Ut(u);if(Object.is(f,b))return;jo(u,f);}catch(f){g(`hydrateStores recompute for "${u}" failed: ${f?.message??f}`);}}),o};var nr=new AsyncLocalStorage,St=new AsyncLocalStorage,or=new AsyncLocalStorage,Ko=new AsyncLocalStorage;wr({run:(e,t)=>nr.run(e,t),get:()=>nr.getStore()||null});xr({run:(e,t)=>St.run(e,t),get:()=>St.getStore()||null,enterWith:e=>St.enterWith(e)});Ur({run:(e,t)=>or.run(e,t),get:()=>or.getStore()||null,enterWith:e=>or.enterWith(e)});Fo({run:(e,t)=>Ko.run(e,t),get:()=>Ko.getStore()||null});var Fc=e=>{let t=kt("request"),r={},o={},n=i=>Object.prototype.hasOwnProperty.call(r,i);return typeof e=="function"&&e({create:(i,c,a={})=>(r[i]=C(c),o[i]={...a},r[i]),set:(i,c)=>{if(!n(i))throw new Error(`createStoreForRequest.set("${i}") requires create("${i}", initialState) first.`);return r[i]=typeof c=="function"?Pt(r[i],c):c,r[i]},get:i=>n(i)?C(r[i]):void 0}),{registry:t,snapshot:()=>C(r),hydrate:(i,c={})=>{let a={...c,default:c.default};return Object.keys(r).forEach(u=>{let l=u,y={...c.default||{},...c[l]||{},...o[u]||{}};a[l]=y;}),St.run(t,()=>nr.run(C(r),()=>(gt(r,a,{allowTrusted:true}),i())))}}};export{Fc as createStoreForRequest};//# sourceMappingURL=server.js.map
1
+ import {h,i as i$1,ia,R,e,v,x,qa}from'./chunk-FOQKGHPS.js';import'./chunk-KQCSFGHJ.js';import {AsyncLocalStorage}from'async_hooks';var i=new AsyncLocalStorage,u=new AsyncLocalStorage,c=new AsyncLocalStorage,O=new AsyncLocalStorage;h({run:(t,o)=>i.run(t,o),get:()=>i.getStore()||null});i$1({run:(t,o)=>u.run(t,o),get:()=>u.getStore()||null,enterWith:t=>u.enterWith(t)});ia({run:(t,o)=>c.run(t,o),get:()=>c.getStore()||null,enterWith:t=>c.enterWith(t)});R({run:(t,o)=>O.run(t,o),get:()=>O.getStore()||null});var C=t=>t!==null&&(typeof t=="object"||typeof t=="function")&&typeof t.then=="function",P=t=>{let o=e("request"),r={},f={},M=e=>Object.prototype.hasOwnProperty.call(r,e),R=e=>{Object.keys(r).forEach(a=>{delete r[a];}),Object.keys(o.metaEntries).forEach(a=>{let S=Object.prototype.hasOwnProperty.call(e,a)?e[a]:o.stores[a];r[a]=v(S);});};return typeof t=="function"&&t({create:(e,a,S={})=>(r[e]=v(a),f[e]={...S},r[e]),set:(e,a)=>{if(!M(e))throw new Error(`createStoreForRequest.set("${e}") requires create("${e}", initialState) first.`);return r[e]=typeof a=="function"?x(r[e],a):v(a),r[e]},get:e=>M(e)?v(r[e]):void 0,snapshot:()=>v(r)}),{registry:o,snapshot:()=>v(r),hydrate:(e,a={})=>{let S={...a,default:a.default};return Object.keys(r).forEach(p=>{let s=p,x={...a.default||{},...a[s]||{},...f[p]||{}};S[s]=x;}),u.run(o,()=>i.run(v(r),()=>{qa(r,S,{allowTrusted:true});let p=i.getStore();if(!p)return e();try{let s=e();return C(s)?Promise.resolve(s).finally(()=>{R(p);}):(R(p),s)}catch(s){throw R(p),s}}))}}};export{P as createStoreForRequest};//# sourceMappingURL=server.js.map
13
2
  //# sourceMappingURL=server.js.map
@@ -1,5 +1,7 @@
1
1
  import { StoreFeatureMeta, FeatureName, StoreFeatureRuntime } from './feature.js';
2
+ import { R as RuntimePatch } from './runtime-patch.js';
2
3
  import { A as AsyncRegistry } from './registry.js';
4
+ import { ComputedClassification } from './computed-types.js';
3
5
 
4
6
  /**
5
7
  * @module store-registry
@@ -33,6 +35,7 @@ type TransactionState = {
33
35
  pending: Array<() => void>;
34
36
  stagedValues: Map<string, RegistryStoreValue>;
35
37
  snapshotCache: Map<string, TransactionSnapshotEntry>;
38
+ runtimePatches: RuntimePatch[];
36
39
  failed: boolean;
37
40
  error?: Error;
38
41
  };
@@ -46,11 +49,15 @@ type ComputedEntry = {
46
49
  deps: string[];
47
50
  compute: (...args: unknown[]) => unknown;
48
51
  stale: boolean;
52
+ classification: ComputedClassification;
53
+ hasLastOutput: boolean;
54
+ lastOutput: unknown;
49
55
  };
50
56
  type NotifyState = {
51
57
  pendingNotifications: Set<string>;
52
58
  pendingBuffer: string[];
53
59
  orderedNames: string[];
60
+ subscriberBuffer: RegistrySubscriber[];
54
61
  notifyScheduled: boolean;
55
62
  batchDepth: number;
56
63
  flushId: number;
@@ -70,6 +77,7 @@ type StoreRegistry = {
70
77
  computedEntries: Record<string, ComputedEntry>;
71
78
  computedDependents: Record<string, Set<string>>;
72
79
  computedCleanups: Map<string, () => void>;
80
+ lastRuntimePatches: RuntimePatch[];
73
81
  transaction: TransactionState;
74
82
  async: AsyncRegistry;
75
83
  notify: NotifyState;
package/dist/sync.js CHANGED
@@ -1,2 +1,2 @@
1
- var Pe=new Map,mt=null,bt=(e,t)=>{Pe.set(e,t),mt?.(e,t);};var Fe=e=>Pe.get(e),ce=()=>Array.from(Pe.keys()),kt=e=>{mt=e;};var wt=({value:e,sanitize:t,validate:r,onSanitizeError:o})=>{let n;if(t)try{n=t(e);}catch(a){return o?.(a),{ok:false}}else n=e;let i=r(n);return i.ok?{ok:true,value:i.value??n}:{ok:false}},Ee=({value:e,fallbackMs:t=Date.now(),onInvalid:r})=>{if(typeof e=="number")return Number.isFinite(e)?e:(r?.(),t);if(typeof e=="string"){let o=Date.parse(e);return Number.isFinite(o)?o:(r?.(),t)}return r?.(),t};var Cr=new Map,V=(e,t,r=0)=>{!e||typeof t!="function"||Cr.set(e,{name:e,order:r,fn:t});};var vt=()=>new Map([["noSignal",new Set],["shape",new Set],["autoCreate",new Set],["mutableResult",new Set]]),Ct=()=>({fetchRegistry:Object.create(null),inflight:Object.create(null),requestVersion:Object.create(null),cacheMeta:Object.create(null),rateWindowStart:Object.create(null),rateCount:Object.create(null),ratePruneState:{lastAt:0},ratePruneTimer:null,warnedOnce:vt(),storeCleanups:Object.create(null),revalidateKeys:new Set,revalidateHandlers:Object.create(null),asyncMetrics:{cacheHits:0,cacheMisses:0,dedupes:0,requests:0,failures:0,avgMs:0,lastMs:0}}),Rt=e=>{Object.values(e.storeCleanups).forEach(t=>{Object.values(t).forEach(r=>{r?.forEach(o=>{try{o();}catch{}});});}),Object.keys(e.fetchRegistry).forEach(t=>delete e.fetchRegistry[t]),Object.keys(e.inflight).forEach(t=>delete e.inflight[t]),Object.keys(e.requestVersion).forEach(t=>delete e.requestVersion[t]),Object.keys(e.cacheMeta).forEach(t=>delete e.cacheMeta[t]),Object.keys(e.rateWindowStart).forEach(t=>delete e.rateWindowStart[t]),Object.keys(e.rateCount).forEach(t=>delete e.rateCount[t]),Object.keys(e.storeCleanups).forEach(t=>delete e.storeCleanups[t]),Object.keys(e.revalidateHandlers).forEach(t=>delete e.revalidateHandlers[t]),e.revalidateKeys.clear(),e.warnedOnce.forEach(t=>t.clear()),e.warnedOnce.clear(),vt().forEach((t,r)=>{e.warnedOnce.set(r,t);}),e.ratePruneState.lastAt=0,e.ratePruneTimer&&(clearTimeout(e.ratePruneTimer),e.ratePruneTimer=null),e.asyncMetrics.cacheHits=0,e.asyncMetrics.cacheMisses=0,e.asyncMetrics.dedupes=0,e.asyncMetrics.requests=0,e.asyncMetrics.failures=0,e.asyncMetrics.avgMs=0,e.asyncMetrics.lastMs=0;};var _e=new Map,xt=new WeakSet,ze=e=>{xt.has(e)||(xt.add(e),ce().forEach(t=>{if(!e.featureRuntimes.get(t)){let r=Fe(t);r&&e.featureRuntimes.set(t,r());}}));},Rr=typeof __STROID_REGISTRY_ID__<"u"&&__STROID_REGISTRY_ID__||typeof process<"u"&&process.env?.STROID_REGISTRY_ID||void 0,Mt,We=e=>(Mt||Rr||e).replace(/\.ts(\?|$)/,".js$1"),ue=We("stroid:default-registry");var xr=()=>{Mt=void 0,_e.clear();};V("registry.scope-override",xr,110);var Mr=()=>({pendingNotifications:new Set,pendingBuffer:[],orderedNames:[],notifyScheduled:false,batchDepth:0,flushId:0,isFlushing:false}),Fr=e=>{e.pendingNotifications.clear(),e.pendingBuffer.length=0,e.orderedNames.length=0,e.notifyScheduled=false,e.batchDepth=0,e.flushId=0,e.isFlushing=false;},Er=()=>({depth:0,pending:[],stagedValues:new Map,snapshotCache:new Map,failed:false,error:void 0}),Tr=(e="default")=>{let t={scope:e,stores:Object.create(null),subscribers:Object.create(null),initialStates:Object.create(null),initialFactories:Object.create(null),metaEntries:Object.create(null),snapshotCache:Object.create(null),featureRuntimes:new Map,deletingStores:new Set,computedEntries:Object.create(null),computedDependents:Object.create(null),computedCleanups:new Map,transaction:Er(),async:Ct(),notify:Mr(),lifecycleListener:null};return ze(t),t},le=e=>{let t=We(e),r=_e.get(t);if(r)return r;let o=Tr();return _e.set(t,o),o},oe=(e,t)=>Object.prototype.hasOwnProperty.call(e.stores,t);var Ft=e=>{e.computedCleanups.forEach(t=>{try{t();}catch{}}),e.computedCleanups.clear(),[e.stores,e.subscribers,e.initialStates,e.initialFactories,e.metaEntries,e.snapshotCache,e.computedEntries,e.computedDependents].forEach(t=>{Object.keys(t).forEach(r=>{delete t[r];});}),e.deletingStores.clear(),e.transaction.depth=0,e.transaction.pending=[],e.transaction.stagedValues.clear(),e.transaction.snapshotCache.clear(),e.transaction.failed=false,e.transaction.error=void 0,Fr(e.notify),Rt(e.async),e.lifecycleListener=null;};var He=(e,t)=>{try{e.lifecycleListener?.(t);}catch{}};var Y=[],Tt={run:(e,t)=>{Y.push(e);try{return t()}finally{Y.pop();}},get:()=>Y.length>0?Y[Y.length-1]:null,enterWith:e=>{if(Y.length>0){Y[Y.length-1]=e;return}Y.push(e);}};var de=e=>(Tt).get()||e||le(ue);var Vr={log:(e,t)=>{typeof console<"u"&&typeof console.log=="function"&&(t?console.log(`[stroid] ${e}`,t):console.log(`[stroid] ${e}`));},warn:(e,t)=>{typeof console<"u"&&typeof console.warn=="function"&&(t?console.warn(`[stroid] ${e}`,t):console.warn(`[stroid] ${e}`));},critical:(e,t)=>{typeof console<"u"&&typeof console.error=="function"&&(t?console.error(`[stroid] ${e}`,t):console.error(`[stroid] ${e}`));}},Vt={logSink:Vr,flush:{chunkSize:Number.POSITIVE_INFINITY,chunkDelayMs:0,priorityStores:[]},revalidateOnFocus:{debounceMs:0,maxConcurrent:3,staggerMs:100},namespace:"",strictMissingFeatures:true,assertRuntime:false,strictMutatorReturns:true,asyncAutoCreate:false,asyncCloneResult:"none",autoCorrelationIds:false,acknowledgeLooseTypes:false,pathCacheSize:500,defaultSnapshotMode:"deep",strictAsyncUsageErrors:false,middleware:[],allowUntrustedHydration:false,mutatorProduce:void 0,selectorCloneFrozen:true},Be=e=>({logSink:{...e.logSink},flush:{...e.flush},revalidateOnFocus:{...e.revalidateOnFocus},namespace:e.namespace,strictMissingFeatures:e.strictMissingFeatures,assertRuntime:e.assertRuntime,strictMutatorReturns:e.strictMutatorReturns,asyncAutoCreate:e.asyncAutoCreate,asyncCloneResult:e.asyncCloneResult,autoCorrelationIds:e.autoCorrelationIds,acknowledgeLooseTypes:e.acknowledgeLooseTypes,pathCacheSize:e.pathCacheSize,defaultSnapshotMode:e.defaultSnapshotMode,strictAsyncUsageErrors:e.strictAsyncUsageErrors,middleware:[...e.middleware],allowUntrustedHydration:e.allowUntrustedHydration,mutatorProduce:e.mutatorProduce,selectorCloneFrozen:e.selectorCloneFrozen}),Le=new WeakMap,At=Be(Vt),Ar=e=>{let t=Le.get(e);return t||(t=Be(At),Le.set(e,t)),t};var N=()=>Ar(de());var Ir=()=>{Le=new WeakMap,At=Be(Vt);};V("config.reset",Ir,90);var Nr=typeof process<"u"&&typeof process.env?.NODE_ENV=="string"?process.env.NODE_ENV:void 0,Pr=typeof import.meta<"u"&&import.meta?.env?.MODE?import.meta.env.MODE:void 0,Dt=typeof globalThis<"u"&&typeof globalThis.__STROID_DEV__=="boolean"?globalThis.__STROID_DEV__:void 0,_r="production",zr=Nr??Pr??_r,je=typeof Dt=="boolean"?Dt:zr!=="production",A=()=>je,Ot=(e,t)=>{typeof console<"u"&&typeof console.warn=="function"&&(t?console.warn(`[stroid] ${e}`,t):console.warn(`[stroid] ${e}`));},Wr=(e,t)=>{typeof console<"u"&&typeof console.error=="function"&&(t?console.error(`[stroid] ${e}`,t):console.error(`[stroid] ${e}`));},Hr=(e,t)=>{typeof console<"u"&&typeof console.log=="function"&&(t?console.log(`[stroid] ${e}`,t):console.log(`[stroid] ${e}`));},we=(e,t)=>{if((N().logSink.critical??Wr)(e,t),N().assertRuntime)throw new Error(e)},k=(e,t)=>{if(!je)return;if((N().logSink.warn??Ot)(e,t),N().assertRuntime)throw new Error(e)},q=(e,t)=>{if((N().logSink.warn??Ot)(e,t),N().assertRuntime)throw new Error(e)};var ee=(e,t)=>{if(!je)return;(N().logSink.log??Hr)(e,t);};var $t=()=>"Date detected; stored as ISO string. Use new Date(value) when reading.",It=()=>"Map detected; converting to plain object.",Nt=()=>"Set detected; converting to array.";var fe=new Set(["__proto__","constructor","prototype"]),Ue=(e,t)=>{if(!e)return {ok:true};try{if(typeof e.safeParse=="function"){let r=e.safeParse(t);return r.success?{ok:!0,data:r.data}:{ok:!1,error:r.error}}if(typeof e.parse=="function")return e.parse(t),{ok:!0,data:t};if(typeof e.validateSync=="function")return e.validateSync(t),{ok:!0,data:t};if(typeof e.isValidSync=="function")return e.isValidSync(t)?{ok:!0,data:t}:{ok:!1,error:"Schema validation failed"};if(typeof e.validate=="function"){let r=e.validate(t);if(r===!0)return {ok:!0,data:t};if(r===!1)return {ok:!1,error:e.errors||"Schema validation failed"};if(r&&typeof r=="object"){let n=r.error,i=n?.details?.[0]?.message||n?.message||r.message||e.errors;if(i)return {ok:!1,error:i};if(n)return {ok:!1,error:n}}return {ok:!1,error:e.errors||"Schema validation failed"}}if(typeof e=="function"){let r=e(t);return r===!1?{ok:!1,error:"Schema validation failed"}:{ok:!0,data:r===!0?t:r}}return {ok:!0,data:t}}catch(r){return {ok:false,error:r?.message??r}}};var qe=e=>e===null?"null":Array.isArray(e)?"array":e instanceof Map?"map":e instanceof Set?"set":e instanceof Date?"date":typeof e=="function"?"function":typeof e,Br=e=>{if(!e||typeof e!="object")return null;let t=globalThis?.WeakRef;return t&&e instanceof t?"WeakRef":typeof WeakMap<"u"&&e instanceof WeakMap?"WeakMap":typeof WeakSet<"u"&&e instanceof WeakSet?"WeakSet":typeof EventTarget<"u"&&e instanceof EventTarget?"EventTarget":typeof ReadableStream<"u"&&e instanceof ReadableStream?"ReadableStream":typeof WritableStream<"u"&&e instanceof WritableStream?"WritableStream":typeof Request<"u"&&e instanceof Request?"Request":typeof Response<"u"&&e instanceof Response?"Response":typeof Headers<"u"&&e instanceof Headers?"Headers":typeof FormData<"u"&&e instanceof FormData?"FormData":null};var ve=(e,t)=>{let r=Br(e);if(r)throw new Error(`${r} values are not supported`);let o=qe(e);if(o==="number"){if(!Number.isFinite(e))throw new Error("Non-finite numbers are not supported");return e}if(o==="bigint")throw new Error("BigInt values are not supported");if(o==="symbol")throw new Error("Symbol values are not supported");if(o==="date")return A()&&k($t()),e.toISOString();if(o==="map"){if(t.has(e))throw new Error("Circular reference detected during sanitize");t.add(e),A()&&k(It());let n={};for(let[i,a]of e){if(typeof i!="string")throw new Error("Map keys must be strings to remain JSON-safe");n[String(i)]=ve(a,t);}return n}if(o==="set"){if(t.has(e))throw new Error("Circular reference detected during sanitize");return t.add(e),A()&&k(Nt()),Array.from(e,n=>ve(n,t))}if(o==="object"){if(t.has(e))throw new Error("Circular reference detected during sanitize");t.add(e);let n={},i=Object.getOwnPropertyDescriptors(e);for(let[a,f]of Object.entries(i))if(f.enumerable&&!fe.has(a)){if("get"in f||"set"in f)throw new Error(`Accessor properties are not supported during sanitize ("${a}")`);n[a]=ve(f.value,t);}return n}if(o==="array"){if(t.has(e))throw new Error("Circular reference detected during sanitize");return t.add(e),e.map(n=>ve(n,t))}return e},pe=e=>ve(e,new WeakSet);var Ge=null,Ur=()=>{if(Ge)return Ge;let e,t=[];for(let r=0;r<256;r++){e=r;for(let o=0;o<8;o++)e=e&1?3988292384^e>>>1:e>>>1;t[r]=e>>>0;}return Ge=t,t},_t=e=>{let t=Ur(),r=-1;for(let o=0;o<e.length;o++)r=r>>>0,r=r>>>8^t[(r^e.charCodeAt(o))&255];return (r^-1)>>>0},qr=2166136261,Gr=2654435761,Kr=1e5,te=(e,t)=>{let r=t>>>0;e.h1=Math.imul(e.h1^r,2246822507),e.h2=Math.imul(e.h2^r,3266489909);},ne=(e,t)=>{te(e,t.length);for(let r=0;r<t.length;r++)te(e,t.charCodeAt(r));},T=(e,t)=>{ne(e,t);},Pt=(e,t)=>{if(Number.isNaN(t)){T(e,"NaN");return}if(!Number.isFinite(t)){T(e,t>0?"Infinity":"-Infinity");return}if(Object.is(t,-0)){T(e,"-0");return}let r=t|0;if(t===r){T(e,"int"),te(e,r);return}T(e,"num"),ne(e,String(t));},ge=(e,t)=>{if(e.nodes++>Kr){T(e,"[max]");return}if(t===null){T(e,"null");return}let r=typeof t;if(r==="string"){T(e,"string"),ne(e,t);return}if(r==="number"){T(e,"number"),Pt(e,t);return}if(r==="boolean"){T(e,t?"true":"false");return}if(r==="undefined"){T(e,"undefined");return}if(r==="bigint"){T(e,"bigint"),ne(e,t.toString());return}if(r==="symbol"){T(e,"symbol");let p=t;ne(e,Symbol.keyFor(p)??p.description??String(p));return}if(r==="function"){T(e,"function"),ne(e,t.name||"anonymous");return}let o=t,n=e.seen.get(o);if(n!==void 0){T(e,"ref"),te(e,n);return}let i=e.nextId++;if(e.seen.set(o,i),Array.isArray(o)){T(e,"array"),te(e,o.length);for(let p=0;p<o.length;p++)Object.prototype.hasOwnProperty.call(o,p)?ge(e,o[p]):T(e,"hole");return}if(o instanceof Date){T(e,"date"),Pt(e,o.getTime());return}if(o instanceof Map){T(e,"map"),te(e,o.size),o.forEach((p,m)=>{ge(e,m),ge(e,p);});return}if(o instanceof Set){T(e,"set"),te(e,o.size),o.forEach(p=>{ge(e,p);});return}T(e,"object");let a=Object.getOwnPropertyDescriptors(o),f=[];Object.entries(a).forEach(([p,m])=>{m?.enumerable&&(fe.has(p)||"get"in m||"set"in m||f.push([p,m]));}),te(e,f.length);for(let[p,m]of f)ne(e,p),ge(e,m.value);},Ce=e=>{if(typeof e=="string")return _t(JSON.stringify(e));let t={h1:qr,h2:Gr,seen:new WeakMap,nextId:1,nodes:0};ge(t,e);let r=t.h1>>>0,o=t.h2>>>0;return r^=r>>>16,r=Math.imul(r,2246822507),r^=r>>>13,r=Math.imul(r,3266489909),r^=r>>>16,o^=o>>>16,o=Math.imul(o,668265261),o^=o>>>15,o=Math.imul(o,374761393),o^=o>>>16,(r&2097151)*4294967296+(o>>>0)};var Yr=typeof globalThis<"u"&&typeof globalThis.structuredClone=="function",Ye=e=>{if(typeof e=="function")return "function";if(typeof e=="symbol")return "symbol";if(e===null||typeof e!="object")return null;let t=[["WeakMap",globalThis.WeakMap],["WeakSet",globalThis.WeakSet],["WeakRef",globalThis.WeakRef],["Promise",globalThis.Promise],["ReadableStream",globalThis.ReadableStream],["WritableStream",globalThis.WritableStream],["TransformStream",globalThis.TransformStream],["EventTarget",globalThis.EventTarget]];for(let[o,n]of t)if(typeof n=="function"&&e instanceof n)return o;let r=globalThis.Node;return typeof r=="function"&&e instanceof r?"DOM Node":null},Jr=e=>Ye(e)===null,Xr=e=>{let t=Ye(e);if(t)throw new Error(`deepClone failed: value is not structured-cloneable (${t}). Avoid storing this type in stroid state.`)},se=(e,t=new WeakMap)=>{if(Xr(e),e===null||typeof e!="object")return e;if(t.has(e))return t.get(e);if(e instanceof Date)return new Date(e.getTime());if(e instanceof Map){let n=new Map;return t.set(e,n),e.forEach((i,a)=>{n.set(se(a,t),se(i,t));}),n}if(e instanceof Set){let n=new Set;return t.set(e,n),e.forEach(i=>{n.add(se(i,t));}),n}if(Array.isArray(e)){let n=[];return t.set(e,n),e.forEach((i,a)=>{n[a]=se(i,t);}),n}let r={};t.set(e,r);let o;try{o=Object.getOwnPropertyDescriptors(e);}catch(n){throw new Error(`deepClone failed to read object descriptors (possible Proxy or host object): ${n?.message??n}`)}return Object.entries(o).forEach(([n,i])=>{!i.enumerable||fe.has(n)||"get"in i||"set"in i||(r[n]=se(i.value,t));}),r},B=e=>{if(Yr)try{return structuredClone(e)}catch(t){if(!Jr(e)){let r=Ye(e)??"unknown";throw new Error(`deepClone failed: value is not structured-cloneable (${r}). Avoid storing this type in stroid state.`)}return k(`deepClone fell back to manual clone after structuredClone failed: ${t?.message??t}`),se(e)}return se(e)};var Je=(e,t,...r)=>{if(typeof e=="function")try{e(...r);}catch(o){let n=o?.message??o;q(`${t} callback threw: ${String(n)}`);}},ye=(e,t={})=>{let{severity:r="warn",visibility:o="dev",onError:n}=t;if(Je(n,"onError",e),r==="critical"){o==="dev"&&k(e),we(e);return}if(o==="always"){q(e);return}k(e);};var zt=({name:e,label:t,fn:r,args:o,reportIssue:n})=>{if(typeof r=="function")try{r(...o);}catch(i){let a=`${t} for "${e}" failed: ${i?.message??i}`;n(a,"always");}};V("computed.order-resolver",()=>{},105);var Lt=()=>de(le(ue)),Xe=()=>Lt().computedEntries,Bt=()=>Lt().computedDependents;var Ut=e=>Object.prototype.hasOwnProperty.call(Xe(),e);var Qe=e=>{let t=Xe()[e];if(!t)return null;let r=Bt()[e];return {deps:[...t.deps],dependents:r?[...r]:[]}};var eo=new Set;var to=()=>{eo.clear();};V("ssr.warnings",to,60);var ro=(e,t,r={})=>{ye(t,{...r,onError:O[e]?.options?.onError});};var Ze=(e,t)=>ro(e,t,{severity:"critical",visibility:"always"});var qt=new WeakMap,Gt=new WeakMap;var Oe=e=>{let t=qt.get(e);return t||(t=new Map,qt.set(e,t)),t},Kt=e=>{let t=Gt.get(e);return t||(t=new Map,Gt.set(e,t)),t};new Proxy(new Map,{get:(e,t)=>{let r=Oe(P());if(t==="size")return r.size;if(t===Symbol.iterator)return r[Symbol.iterator].bind(r);let o=r[t];return typeof o=="function"?o.bind(r):o},set:(e,t,r)=>(Oe(P())[t]=r,true)});var oo=(e,t)=>{let r=new Set,o=O[e]?.options?.onError;return typeof o=="function"&&r.add(o),r},Yt=(e,t,r,o)=>{if(!r)return {ok:true,value:t};let n=oo(e),i=(f,p)=>{n.forEach(m=>Je(m,`onError(${e})`,f)),p==="critical"?we(f):k(f);};if(typeof r=="function")try{let f=r(t);return f===!1?(i(`Validation blocked update for "${e}"`,"warn"),{ok:!1}):{ok:!0,value:f===!0?t:f}}catch(f){return i(`Validation for "${e}" failed: ${f?.message??f}`,"critical"),{ok:false}}let a=Ue(r,t);return a.ok?{ok:true,value:a.data??t}:(i(`Validation failed for "${e}": ${a.error}`,"critical"),{ok:false})};var et=e=>{let t=P();Oe(t).delete(e),Kt(t).delete(e);},no=()=>{let e=P();Oe(e).clear(),Kt(e).clear();};V("validation.path-cache",no,50);Jt(et);var or=new Map;var xe=(e,t,r)=>{let o=or.get(e);!o||o.size===0||o.forEach(n=>{try{n(t,r);}catch(i){typeof console<"u"&&console.warn&&console.warn(`[stroid] lifecycle hook "${e}" failed:`,i);}});};var so=()=>{};V("write-context.runner",so,121);var co=()=>{let e=P().notify;e.pendingNotifications.clear(),e.pendingBuffer.length=0,e.orderedNames.length=0,e.notifyScheduled=false,e.batchDepth=0;};V("notify.reset",co,40);var uo=()=>P().computedCleanups,ir=new WeakMap;var lo=e=>{let t=ir.get(e);return t||(t=new Map,ir.set(e,t)),t};var ar=e=>{let t=uo(),r=t.get(e);if(!r){A()&&k(`deleteComputed("${e}") -- not found`);return}r(),t.delete(e);};var cr=(e,t=P())=>lo(t).get(e)?.autoDispose===true;var ur=e=>{let t=e.stores,r=e.subscribers,o=e.initialStates,n=e.initialFactories,i=e.metaEntries,a=e.snapshotCache,f=e.featureRuntimes,p=e.deletingStores,m=(l,R)=>{ye(R,{onError:i[l]?.options?.onError,severity:"warn",visibility:"dev"});},S=({name:l,prev:R,options:v,initialState:D,getMeta:w,getStoreValue:C,hasStore:x})=>({name:l,options:v,prev:R,getMeta:w,getStoreValue:C,getAllStores:()=>t,getInitialState:()=>D,hasStore:x,setStoreValue:()=>{},applyFeatureState:()=>{},notify:()=>{},reportStoreError:b=>{ye(b,{onError:v.onError,severity:"warn",visibility:"dev"});},warn:k,warnAlways:q,log:ee,hashState:Ce,deepClone:B,sanitize:pe,validate:()=>({ok:true,value:R}),isDev:A}),s=({name:l,prev:R,options:v,initialState:D,phase:w})=>{let C=S({name:l,prev:R,options:v,initialState:D,getMeta:()=>i[l],getStoreValue:()=>t[l],hasStore:()=>oe(e,l)}),x=S({name:l,prev:R,options:v,initialState:D,getMeta:()=>{},getStoreValue:()=>R,hasStore:()=>false});ce().forEach(b=>{let $=f.get(b);w==="before"?$?.beforeStoreDelete?.(C):$?.afterStoreDelete?.(x);});},c=l=>{if(!oe(e,l))return;let R=t[l],v=i[l].options,D=o[l],w=r[l];p.add(l);try{w?.forEach(b=>{try{b(null);}catch($){k(`Subscriber for "${l}" threw during delete: ${$?.message??$}`);}}),zt({name:l,label:"onDelete",fn:v.onDelete,args:[R],reportIssue:(b,$)=>{ye(b,{onError:v.onError,severity:"warn",visibility:$});}}),s({name:l,prev:R,options:v,initialState:D,phase:"before"}),delete t[l],delete r[l],delete o[l],delete n[l],delete i[l],delete a[l],Ut(l)&&ar(l);let x=e.computedDependents[l];if(x)for(let b of [...x]){let $=Qe(b);if($&&cr(b,e)&&$.deps.every(X=>!oe(e,X))){c(b);continue}k(`[stroid] source store "${l}" was deleted. Computed store "${b}" depends on it and will return stale data. Call deleteComputed("${b}") to clean up.`);}s({name:l,prev:R,options:v,initialState:D,phase:"after"}),xe("afterStoreDelete",l,{type:"afterStoreDelete",prev:R}),He(e,{type:"deleted",name:l}),ee(`Store "${l}" deleted`);}finally{p.delete(l);}};return {deleteExistingStore:c,clearAllStores:()=>{let l=[],v=0,D=Number.POSITIVE_INFINITY;for(;v<20;){let C=Object.keys(t);if(C.length===0)break;C.forEach(b=>{oe(e,b)&&(c(b),l.push(b));}),v+=1;let x=Object.keys(t).length;if(x===0||x>=D)break;D=x;}let w=Object.keys(t).length;return w>0?k(`clearAllStores stopped after ${v} pass${v===1?"":"es"}; ${w} store(s) still registered (likely recreated during deletion).`):ee(`All stores cleared (${l.length} stores removed)`),l},clearStores:l=>{let R=Object.keys(t).filter(v=>l?l.endsWith("*")?v.startsWith(l.slice(0,-1)):v===l:true);return R.forEach(v=>c(v)),R},reportStoreError:m}};var dt=ue,dr=le(dt),fr=null,H=()=>{let e=de(dr);return ze(e),e};var P=()=>H();function Jt(e){fr=e;}var he=e=>new Proxy(Object.create(null),{get:(t,r)=>e()[r],set:(t,r,o)=>(e()[r]=o,true),deleteProperty:(t,r)=>(delete e()[r],true),has:(t,r)=>r in e(),ownKeys:()=>Reflect.ownKeys(e()),getOwnPropertyDescriptor:(t,r)=>{let o=Object.getOwnPropertyDescriptor(e(),r);if(o)return {...o,configurable:true}}}),fo=e=>new Proxy(new Map,{get:(t,r)=>{let o=e();if(r==="size")return o.size;if(r===Symbol.iterator)return o[Symbol.iterator].bind(o);let n=o[r];return typeof n=="function"?n.bind(o):n},set:(t,r,o)=>(e()[r]=o,true)}),po=e=>new Proxy({},{get:(t,r)=>{let o=e(),n=o[r];return typeof n=="function"?n.bind(o):n},set:(t,r,o)=>(e()[r]=o,true)}),Ae=he(()=>H().stores);he(()=>H().subscribers);var pr=he(()=>H().initialStates);he(()=>H().initialFactories);var O=he(()=>H().metaEntries);he(()=>H().snapshotCache);var J=fo(()=>H().featureRuntimes),lr=new WeakMap,go=e=>{let t=lr.get(e);return t||(t=ur(e),lr.set(e,t)),t};po(()=>go(H()));var yo=e=>{let t=J.get(e);if(t)return t;let r=Fe(e);if(!r)return;let o=r();return J.set(e,o),o},ft=()=>{ce().forEach(e=>{yo(e);});};kt((e,t)=>{J.get(e)||J.set(e,t());});ft();var De=(e,t)=>oe(H(),e);var $e=(e,t,r=H())=>{r.stores[e]=t;},gr=(e,t,r=Date.now())=>{$e(e,t),O[e]&&(O[e].updatedAt=new Date(r).toISOString(),O[e].updatedAtMs=r,O[e].lastCorrelationId=null,O[e].lastCorrelationAt=null,O[e].lastCorrelationAtMs=null,O[e].lastTraceContext=null,O[e].updateCount>=Number.MAX_SAFE_INTEGER?O[e].updateCount=0:O[e].updateCount+=1,fr?.(e));};var ho=()=>{Ft(H());},So=()=>{J.forEach(e=>{try{e.resetAll?.();}catch{}}),J.clear();};V("features.reset",So,10);V("registries.clear",ho,20);V("registry.default",()=>{dt=ue,dr=le(dt);},115);var yr=new WeakMap,hr=e=>{let t=yr.get(e);return t||(t=new Map,yr.set(e,t)),t},mo=()=>{hr(P()).clear();};V("features.contexts",mo,100);var bo=e=>{let t=P(),r=hr(t),o=r.get(e);if(o)return o;let n=O[e];if(!n)return k(`Internal feature context requested for "${e}" after metadata was cleared.`),null;let i={name:e,options:n.options,getMeta:()=>O[e],getStoreValue:()=>Ae[e],getAllStores:()=>Ae,getInitialState:()=>pr[e],hasStore:()=>De(e),setStoreValue:a=>{$e(e,a);},applyFeatureState:(a,f)=>{gr(e,a,f),et(e);},notify:()=>{},reportStoreError:a=>{Ze(e,a);},warn:k,warnAlways:q,log:ee,hashState:Ce,deepClone:B,sanitize:pe,validate:a=>Yt(e,a,O[e]?.options?.validate),isDev:A};return r.set(e,i),i},ko=(e,t)=>{let r=N();if(!r.strictMissingFeatures&&!r.assertRuntime)return;let o=[];if(typeof t.getMeta!="function"&&o.push("getMeta"),typeof t.getStoreValue!="function"&&o.push("getStoreValue"),typeof t.getAllStores!="function"&&o.push("getAllStores"),typeof t.getInitialState!="function"&&o.push("getInitialState"),typeof t.hasStore!="function"&&o.push("hasStore"),typeof t.setStoreValue!="function"&&o.push("setStoreValue"),typeof t.applyFeatureState!="function"&&o.push("applyFeatureState"),typeof t.notify!="function"&&o.push("notify"),typeof t.reportStoreError!="function"&&o.push("reportStoreError"),typeof t.warn!="function"&&o.push("warn"),typeof t.warnAlways!="function"&&o.push("warnAlways"),typeof t.log!="function"&&o.push("log"),typeof t.hashState!="function"&&o.push("hashState"),typeof t.deepClone!="function"&&o.push("deepClone"),typeof t.sanitize!="function"&&o.push("sanitize"),typeof t.validate!="function"&&o.push("validate"),typeof t.isDev!="function"&&o.push("isDev"),o.length===0)return;let n=`Feature hook context missing fields for "${e}": ${o.join(", ")}.`;if(Ze(e,n),r.assertRuntime)throw new Error(n)};var pt=(e,t,r,o,n,i)=>{ft();let a=bo(e);if(!a)return;a.notify=()=>n(e);let f=Object.assign(Object.create(a),{action:t,prev:r,next:o});ko(e,f);let p=new Set(i);J.forEach((m,S)=>{p.has(S)||m.onStoreWrite?.(f);});};var Sr=false,Se=1,wo=e=>typeof e?.v=="number"?e.v:typeof e?.protocol=="number"?e.protocol:void 0,gt=new Set,yt=new Set,Ne=100,kr=e=>{if(!e)return null;if(e===true)return Ne;if(typeof e!="object")return null;let t=e.loopGuard;if(t===false)return null;if(t===true||t===void 0)return Ne;if(typeof t=="object"){let r=t.windowMs;return typeof r=="number"&&Number.isFinite(r)&&r>0?r:Ne}return Ne},vo=e=>typeof TextEncoder<"u"?new TextEncoder().encode(e).length:typeof Buffer<"u"?Buffer.byteLength(e):e.length,Co=({incoming:e,accepted:t})=>{let r=t?.clock??0,o=typeof e.clock=="number"?e.clock:0;if(o!==r)return o-r;let n=e.source??"",i=t?.source??"";return n===i?0:n.localeCompare(i,"en",{sensitivity:"variant"})},Ro=e=>e?.updatedAtMs??Ee({value:e?.updatedAt,fallbackMs:0}),xo=e=>{if(typeof e!="object"||e===null)return false;let t=e;return (typeof t.v=="number"||typeof t.protocol=="number")&&typeof t.type=="string"&&typeof t.name=="string"&&typeof t.clock=="number"&&typeof t.source=="string"},mr=({name:e,syncChannels:t,instanceId:r,authToken:o,reportStoreError:n})=>{let i=t[e];if(i)try{let a={v:Se,protocol:Se,type:"sync-request",source:r,name:e,clock:0,requestedAt:Date.now()};o&&(a.token=o),i.postMessage(a);}catch(a){n(e,`Failed to request sync snapshot for "${e}": ${a?.message??a}`);}},Mo=(e,t)=>(t[e]=(t[e]??0)+1,t[e]),Fo=(e,t,r)=>(r[e]=Math.max(r[e]??0,t)+1,r[e]),Eo=({name:e,syncChannels:t,syncWindowCleanup:r,syncClocks:o,syncVersions:n})=>{t[e]?.close(),delete t[e],r[e]?.(),delete r[e],delete o[e],delete n[e];},To=({syncChannels:e,syncWindowCleanup:t})=>{Object.values(t).forEach(r=>{try{r();}catch{}}),Object.values(e).forEach(r=>{try{r.close();}catch{}});},jo=({name:e,syncOption:t,syncChannels:r,syncClocks:o,syncVersions:n,syncWindowCleanup:i,instanceId:a,getMeta:f,getAcceptedSyncVersion:p,getStoreValue:m,hasStoreEntry:S,notify:s,validate:c,reportStoreError:g,warn:y,setStoreValue:l,normalizeIncomingState:R,acceptIncomingSyncVersion:v,resolveSyncVersion:D,broadcastSync:w,markLoopGuard:C,hashState:x})=>{if(!t)return;if(typeof window>"u"||typeof BroadcastChannel>"u"){g(e,`Sync enabled for "${e}" but BroadcastChannel not available in this environment.`);return}let b=typeof t=="object"?t.policy:void 0,$=b==="insecure"||b!=="strict"&&typeof t=="object"&&t.insecure===true,X=typeof t=="object"&&typeof t.authToken=="string"&&t.authToken.length>0,ie=typeof t=="object"&&typeof t.verify=="function",Me=typeof t=="object"&&typeof t.sign=="function",me=b==="strict"||!A()&&b!=="insecure";if(me&&!$&&!X&&!ie){g(e,`Sync for "${e}" requires authToken or verify in strict mode. Use sync: { policy: "insecure" } to acknowledge the risk.`);return}!me&&!$&&!X&&!ie&&!gt.has(e)&&(gt.add(e),q(`Sync for "${e}" is unauthenticated. Any same-origin tab can forge sync messages. Provide sync.authToken or sync.verify to enforce authentication.`)),Me&&!ie&&!yt.has(e)&&(yt.add(e),y(`Sync for "${e}" is configured with "sign" but no "verify". "sign" has no effect unless incoming messages are verified.`));let Q=typeof t=="object"?t.authToken:void 0,d=kr(t),E=false,M=typeof t=="object"&&t.channel?t.channel:`stroid_sync_${e}`;try{let u=new BroadcastChannel(M);if(r[e]=u,u.onmessage=_=>{let h=_.data;if(!h||h.source===a||h.name!==e||r[e]!==u||!S(e)||!f(e))return;if(!xo(h)){g(e,`Sync message for "${e}" is malformed; ignoring.`);return}if(Q&&h.token!==Q){E||(g(e,`Sync message for "${e}" failed auth token verification; ignoring.`),E=!0);return}let I=wo(h);if(I!==Se){g(e,`Sync protocol mismatch for "${e}". Expected v${Se} but received ${String(I??"unknown")}. Ignoring message.`);return}let W=h.type==="sync-state";if(W&&(typeof h.data>"u"||typeof h.clock!="number")){g(e,`Sync message for "${e}" is malformed; ignoring.`);return}if(typeof t=="object"&&typeof t.verify=="function"){let j=!1;try{j=!!t.verify(h);}catch(F){g(e,`Sync message verification failed for "${e}": ${F?.message??F}`);return}if(!j){g(e,`Sync message for "${e}" failed verification; ignoring.`);return}}let G=typeof t=="object"&&t.checksum==="none"?"none":"hash";if(W&&G!=="none"){let j=x(h.data);if(h.checksum!==j){g(e,`Sync checksum mismatch for "${e}". Expected ${String(j)}, got ${String(h.checksum)}. Ignoring message.`);return}}if(h.type==="sync-request"){w(e);return}let L=typeof t=="object"?t.conflictResolver:null;if(Co({incoming:{clock:h.clock,source:h.source},accepted:p(e)})<=0){let j=Ro(f(e)),F=typeof h.updatedAt=="number"?h.updatedAt:Date.now();if(L){let U=L({local:m(e),incoming:h.data,localUpdated:j,incomingUpdated:F});if(U!==void 0){let z=R(e,U);if(z===null)return;let be=m(e);l(e,z);let Z=typeof t=="object"?t.resolveUpdatedAt:null,ke=Z?Z({localUpdated:j,incomingUpdated:F,now:Date.now()}):Math.max(Date.now(),j,F);D(e,ke,typeof h.clock=="number"?h.clock:0),pt(e,"sync",be,z,()=>s(e),["sync"]),d&&C(e,d),s(e),w(e);}}return}let K=R(e,h.data);if(K===null)return;let re=m(e);l(e,K),v(e,typeof h.updatedAt=="number"?h.updatedAt:Date.now(),typeof h.clock=="number"?h.clock:0,typeof h.source=="string"?h.source:""),pt(e,"sync",re,K,()=>s(e),["sync"]),d&&C(e,d),s(e);},typeof window<"u"&&typeof window.addEventListener=="function"){i[e]?.();let _=window,h=()=>{mr({name:e,syncChannels:r,instanceId:a,authToken:Q,reportStoreError:g});};_.addEventListener("focus",h),_.addEventListener("online",h),i[e]=()=>{_.removeEventListener("focus",h),_.removeEventListener("online",h);};}queueMicrotask(()=>{mr({name:e,syncChannels:r,instanceId:a,authToken:Q,reportStoreError:g});});}catch(u){y(`Failed to setup sync for "${e}": ${u?.message||u}`);}},br=({name:e,syncOption:t,syncChannels:r,syncClocks:o,instanceId:n,updatedAt:i,data:a,hashState:f,reportStoreError:p})=>{let m=r[e];if(m)try{let S=typeof t=="object"&&t.checksum==="none"?"none":"hash",s={v:Se,protocol:Se,type:"sync-state",source:n,name:e,clock:o[e]??0,updatedAt:Ee({value:i,fallbackMs:Date.now()}),data:a,checksum:S==="hash"?f(a):null};if(typeof t=="object"&&t.authToken&&(s.token=t.authToken),typeof t=="object"&&typeof t.sign=="function")try{let y=t.sign(s);if(y&&typeof y.then=="function"){p(e,`Sync signer for "${e}" returned a Promise. "sign" must be synchronous.`);return}y!==void 0&&(s.auth=y);}catch(y){p(e,`Failed to sign sync payload for "${e}": ${y?.message??y}`);return}let c=typeof t=="object"&&typeof t.maxPayloadBytes=="number"?t.maxPayloadBytes:64*1024,g=vo(JSON.stringify(s));if(g>c){p(e,`Sync payload for "${e}" exceeds ${c} bytes (${g} bytes). Skipping BroadcastChannel sync.`);return}try{m.postMessage(s);}catch(y){if(y&&typeof y=="object"&&y.name==="DataCloneError"){p(e,`Sync payload for "${e}" could not be cloned (DataCloneError). Remove non-serializable values or provide a custom serializer. Payload size ~${g} bytes.`);return}throw y}}catch(S){p(e,`Failed to broadcast sync for "${e}": ${S?.message??S}`);}},Vo=()=>{let e=Object.create(null),t=Object.create(null),r=Object.create(null),o=Object.create(null),n=Object.create(null),i=new Set,a=`stroid_${Math.random().toString(16).slice(2)}`,f=(s,c)=>{r[s]={clock:t[s]??0,updatedAt:Ee({value:c,fallbackMs:Date.now()}),source:a};},p=(s,c)=>{Mo(s,t),f(s,c);},m=(s,c)=>{!c||!Number.isFinite(c)||(n[s]=Date.now()+c);},S=(s,c)=>{if(!c)return false;let g=n[s];return g?Date.now()>=g?(delete n[s],false):true:false};return {onStoreCreate(s){if(!s.options.sync)return;let c=s.options.sync,g=s.notify,y=typeof c=="object"?c.policy:void 0,l=y==="insecure"||y!=="strict"&&typeof c=="object"&&c.insecure===true,R=typeof c=="object"&&typeof c.authToken=="string"&&c.authToken.length>0,v=typeof c=="object"&&typeof c.verify=="function";if((y==="strict"||!s.isDev()&&y!=="insecure")&&c&&!l&&!R&&!v){s.reportStoreError(`Sync for "${s.name}" requires authToken or verify in strict mode. Use sync: { policy: "insecure" } to acknowledge the risk.`),s.options.sync=false;return}if(jo({name:s.name,syncOption:c,syncChannels:e,syncClocks:t,syncVersions:r,syncWindowCleanup:o,instanceId:a,getMeta:s.getMeta,getAcceptedSyncVersion:w=>r[w],getStoreValue:w=>s.getStoreValue(),hasStoreEntry:()=>s.hasStore(),notify:()=>g(),validate:(w,C)=>s.validate(C),reportStoreError:(w,C)=>s.reportStoreError(C),warn:s.warn,setStoreValue:(w,C)=>s.setStoreValue(C),normalizeIncomingState:(w,C)=>{let x=wt({value:C,sanitize:s.sanitize,validate:s.validate,onSanitizeError:b=>{s.reportStoreError(`Sanitize failed for incoming sync "${w}": ${b?.message??b}`);}});return x.ok?x.value:null},acceptIncomingSyncVersion:(w,C,x,b)=>{s.applyFeatureState(s.getStoreValue(),C),t[s.name]=Math.max(t[s.name]??0,x),r[s.name]={clock:x,updatedAt:C,source:b};},resolveSyncVersion:(w,C,x)=>{s.applyFeatureState(s.getStoreValue(),C);let b=Fo(s.name,x,t);return r[s.name]={clock:b,updatedAt:C,source:a},b},broadcastSync:()=>{let w=s.getMeta();w&&br({name:s.name,syncOption:s.options.sync,syncChannels:e,syncClocks:t,instanceId:a,updatedAt:w.updatedAtMs??w.updatedAt,data:s.getStoreValue(),hashState:s.hashState,reportStoreError:(C,x)=>s.reportStoreError(x)});},markLoopGuard:m,hashState:s.hashState}),e[s.name]){let w=s.getMeta();f(s.name,w?.updatedAtMs??w?.updatedAt??new Date().toISOString());}},onStoreWrite(s){if(!s.options.sync)return;let c=s.getMeta();if(!c)return;let g=kr(s.options.sync);if(S(s.name,g)){p(s.name,c.updatedAtMs??c.updatedAt),i.has(s.name)||(i.add(s.name),s.warn(`Sync broadcast for "${s.name}" suppressed by loopGuard to prevent feedback loops.`));return}p(s.name,c.updatedAtMs??c.updatedAt),br({name:s.name,syncOption:s.options.sync,syncChannels:e,syncClocks:t,instanceId:a,updatedAt:c.updatedAtMs??c.updatedAt,data:s.next,hashState:s.hashState,reportStoreError:(y,l)=>s.reportStoreError(l)});},beforeStoreDelete(s){Eo({name:s.name,syncChannels:e,syncWindowCleanup:o,syncClocks:t,syncVersions:r}),delete n[s.name],i.delete(s.name);},resetAll(){To({syncChannels:e,syncWindowCleanup:o}),Object.keys(e).forEach(s=>delete e[s]),Object.keys(t).forEach(s=>delete t[s]),Object.keys(r).forEach(s=>delete r[s]),Object.keys(o).forEach(s=>delete o[s]),Object.keys(n).forEach(s=>delete n[s]),gt.clear(),yt.clear(),i.clear();}}},wr=()=>{Sr||(Sr=true,bt("sync",Vo));};var vr=()=>{wr();};vr();export{vr as installSync};//# sourceMappingURL=sync.js.map
1
+ export{b as installSync}from'./chunk-PVATWAY4.js';import'./chunk-FOQKGHPS.js';import'./chunk-KQCSFGHJ.js';//# sourceMappingURL=sync.js.map
2
2
  //# sourceMappingURL=sync.js.map