stroid 0.1.3 → 0.1.4-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/CHANGELOG.md +37 -15
  2. package/README.md +12 -10
  3. package/dist/async.d.ts +1 -1
  4. package/dist/async.js +22 -22
  5. package/dist/computed-types.d.ts +42 -0
  6. package/dist/computed-types.js +2 -0
  7. package/dist/computed.d.ts +9 -2
  8. package/dist/computed.js +11 -11
  9. package/dist/core.js +14 -14
  10. package/dist/devtools.d.ts +1 -1
  11. package/dist/devtools.js +1 -1
  12. package/dist/helpers.js +14 -14
  13. package/dist/index-internal.d.ts +1 -1
  14. package/dist/index.d.cts +3 -1
  15. package/dist/index.d.ts +3 -1
  16. package/dist/index.js +24 -24
  17. package/dist/install.js +1 -1
  18. package/dist/persist.js +1 -1
  19. package/dist/psr.d.ts +38 -0
  20. package/dist/psr.js +19 -0
  21. package/dist/react/index.d.ts +3 -1
  22. package/dist/react/index.js +25 -25
  23. package/dist/runtime-admin.js +1 -1
  24. package/dist/runtime-patch.d.ts +29 -0
  25. package/dist/runtime-tools.d.ts +6 -1
  26. package/dist/runtime-tools.js +2 -2
  27. package/dist/selectors.js +1 -1
  28. package/dist/server.d.ts +3 -1
  29. package/dist/server.js +11 -11
  30. package/dist/store-registry.d.ts +6 -0
  31. package/dist/sync.js +1 -1
  32. package/dist/testing.js +16 -16
  33. package/dist/types.d.ts +1 -1
  34. package/package.json +37 -39
  35. package/dist/async.js.map +0 -1
  36. package/dist/computed.js.map +0 -1
  37. package/dist/core.js.map +0 -1
  38. package/dist/devtools.js.map +0 -1
  39. package/dist/feature.js.map +0 -1
  40. package/dist/helpers.js.map +0 -1
  41. package/dist/index.js.map +0 -1
  42. package/dist/install.js.map +0 -1
  43. package/dist/persist.js.map +0 -1
  44. package/dist/react/index.js.map +0 -1
  45. package/dist/runtime-admin.js.map +0 -1
  46. package/dist/runtime-tools.js.map +0 -1
  47. package/dist/selectors.js.map +0 -1
  48. package/dist/server.js.map +0 -1
  49. package/dist/sync.js.map +0 -1
  50. package/dist/testing.js.map +0 -1
package/dist/install.js CHANGED
@@ -1,2 +1,2 @@
1
- var Ue=new Map,Et=null,fe=(e,t)=>{Ue.set(e,t),Et?.(e,t);};var Pe=e=>Ue.get(e),pe=()=>Array.from(Ue.keys()),Ft=e=>{Et=e;};var Br=typeof Symbol=="function"?Symbol.for("stroid.persist.defaultCrypto"):"__stroid_persist_defaultCrypto__",qe=e=>!!e?.[Br],Ae=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}},xt=(e,t,r)=>{let o="__stroid_persist_roundtrip_probe__",s;try{s=t(o);}catch(c){return {ok:false,reason:`persist: encrypt failed for store "${e}" (${c?.message??c})`}}if(typeof s!="string")return {ok:false,reason:`persist: encrypt must return a string for store "${e}".`};let a;try{a=r(s);}catch(c){return {ok:false,reason:`persist: decrypt failed for store "${e}" (${c?.message??c})`}}return typeof a!="string"?{ok:false,reason:`persist: decrypt must return a string for store "${e}".`}:a!==o?{ok:false,reason:`persist: encrypt/decrypt must round-trip for store "${e}".`}:{ok:true}};var Tt=(e,t,r)=>{e[t]&&(e[t].lastPresent=r);},Vt=({name:e,persistConfig:t,persistWatchState:r})=>{let o=t?.onStorageCleared;if(!t||typeof o!="function"||typeof window>"u"||typeof window.addEventListener!="function")return;r[e]?.dispose();let s=window,a=()=>{try{return t.driver.getItem?.(t.key)!=null}catch{return false}},c=n=>{let p=r[e],i=a();if(p){if(!p.lastPresent||i){p.lastPresent=i;return}p.lastPresent=false,o({name:e,key:t.key,reason:n});}},l=n=>{if(n.key===null){c("clear");return}n.key===t.key&&n.newValue===null&&c("remove");},g=()=>{c("missing");};s.addEventListener("storage",l),s.addEventListener("focus",g),r[e]={lastPresent:a(),dispose:()=>{s.removeEventListener("storage",l),s.removeEventListener("focus",g);}};};var Me=({value:e,sanitize:t,validate:r,onSanitizeError:o})=>{let s;if(t)try{s=t(e);}catch(c){return o?.(c),{ok:false}}else s=e;let a=r(s);return a.ok?{ok:true,value:a.value??s}:{ok:false}},ie=({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 Ur=new Map,A=(e,t,r=0)=>{!e||typeof t!="function"||Ur.set(e,{name:e,order:r,fn:t});};var jt=()=>new Map([["noSignal",new Set],["shape",new Set],["autoCreate",new Set],["mutableResult",new Set]]),Pt=()=>({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:jt(),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}}),At=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(),jt().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 Ke=new Map,Dt=new WeakSet,Ge=e=>{Dt.has(e)||(Dt.add(e),pe().forEach(t=>{if(!e.featureRuntimes.get(t)){let r=Pe(t);r&&e.featureRuntimes.set(t,r());}}));},qr=typeof __STROID_REGISTRY_ID__<"u"&&__STROID_REGISTRY_ID__||typeof process<"u"&&process.env?.STROID_REGISTRY_ID||void 0,$t,Ye=e=>($t||qr||e).replace(/\.ts(\?|$)/,".js$1"),ge=Ye("stroid:default-registry");var Kr=()=>{$t=void 0,Ke.clear();};A("registry.scope-override",Kr,110);var Gr=()=>({pendingNotifications:new Set,pendingBuffer:[],orderedNames:[],notifyScheduled:false,batchDepth:0,flushId:0,isFlushing:false}),Yr=e=>{e.pendingNotifications.clear(),e.pendingBuffer.length=0,e.orderedNames.length=0,e.notifyScheduled=false,e.batchDepth=0,e.flushId=0,e.isFlushing=false;},Jr=()=>({depth:0,pending:[],stagedValues:new Map,snapshotCache:new Map,failed:false,error:void 0}),Xr=(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:Jr(),async:Pt(),notify:Gr(),lifecycleListener:null};return Ge(t),t},ye=e=>{let t=Ye(e),r=Ke.get(t);if(r)return r;let o=Xr();return Ke.set(t,o),o},ae=(e,t)=>Object.prototype.hasOwnProperty.call(e.stores,t);var Ot=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,Yr(e.notify),At(e.async),e.lifecycleListener=null;};var Je=(e,t)=>{try{e.lifecycleListener?.(t);}catch{}};var ee=[],It={run:(e,t)=>{ee.push(e);try{return t()}finally{ee.pop();}},get:()=>ee.length>0?ee[ee.length-1]:null,enterWith:e=>{if(ee.length>0){ee[ee.length-1]=e;return}ee.push(e);}};var he=e=>(It).get()||e||ye(ge);var Zr={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}`));}},zt={logSink:Zr,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},Qe=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}),Xe=new WeakMap,Wt=Qe(zt),eo=e=>{let t=Xe.get(e);return t||(t=Qe(Wt),Xe.set(e,t)),t};var N=()=>eo(he());var no=()=>{Xe=new WeakMap,Wt=Qe(zt);};A("config.reset",no,90);var so=typeof process<"u"&&typeof process.env?.NODE_ENV=="string"?process.env.NODE_ENV:void 0,io=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,ao="production",co=so??io??ao,$e=typeof Ht=="boolean"?Ht:co!=="production",D=()=>$e,Lt=(e,t)=>{typeof console<"u"&&typeof console.warn=="function"&&(t?console.warn(`[stroid] ${e}`,t):console.warn(`[stroid] ${e}`));},uo=(e,t)=>{typeof console<"u"&&typeof console.error=="function"&&(t?console.error(`[stroid] ${e}`,t):console.error(`[stroid] ${e}`));},lo=(e,t)=>{typeof console<"u"&&typeof console.log=="function"&&(t?console.log(`[stroid] ${e}`,t):console.log(`[stroid] ${e}`));},Ee=(e,t)=>{if((N().logSink.critical??uo)(e,t),N().assertRuntime)throw new Error(e)},E=(e,t)=>{if(!$e)return;if((N().logSink.warn??Lt)(e,t),N().assertRuntime)throw new Error(e)},U=(e,t)=>{if((N().logSink.warn??Lt)(e,t),N().assertRuntime)throw new Error(e)};var oe=(e,t)=>{if(!$e)return;(N().logSink.log??lo)(e,t);};var Bt=()=>"Date detected; stored as ISO string. Use new Date(value) when reading.",Ut=()=>"Map detected; converting to plain object.",qt=()=>"Set detected; converting to array.";var me=new Set(["__proto__","constructor","prototype"]),Ze=(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 s=r.error,a=s?.details?.[0]?.message||s?.message||r.message||e.errors;if(a)return {ok:!1,error:a};if(s)return {ok:!1,error:s}}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 et=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,po=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=po(e);if(r)throw new Error(`${r} values are not supported`);let o=et(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 D()&&E(Bt()),e.toISOString();if(o==="map"){if(t.has(e))throw new Error("Circular reference detected during sanitize");t.add(e),D()&&E(Ut());let s={};for(let[a,c]of e){if(typeof a!="string")throw new Error("Map keys must be strings to remain JSON-safe");s[String(a)]=Fe(c,t);}return s}if(o==="set"){if(t.has(e))throw new Error("Circular reference detected during sanitize");return t.add(e),D()&&E(qt()),Array.from(e,s=>Fe(s,t))}if(o==="object"){if(t.has(e))throw new Error("Circular reference detected during sanitize");t.add(e);let s={},a=Object.getOwnPropertyDescriptors(e);for(let[c,l]of Object.entries(a))if(l.enumerable&&!me.has(c)){if("get"in l||"set"in l)throw new Error(`Accessor properties are not supported during sanitize ("${c}")`);s[c]=Fe(l.value,t);}return s}if(o==="array"){if(t.has(e))throw new Error("Circular reference detected during sanitize");return t.add(e),e.map(s=>Fe(s,t))}return e},Se=e=>Fe(e,new WeakSet);var tt=null,go=()=>{if(tt)return tt;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 tt=t,t},Gt=e=>{let t=go(),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},yo=2166136261,ho=2654435761,mo=1e5,ne=(e,t)=>{let r=t>>>0;e.h1=Math.imul(e.h1^r,2246822507),e.h2=Math.imul(e.h2^r,3266489909);},ce=(e,t)=>{ne(e,t.length);for(let r=0;r<t.length;r++)ne(e,t.charCodeAt(r));},V=(e,t)=>{ce(e,t);},Kt=(e,t)=>{if(Number.isNaN(t)){V(e,"NaN");return}if(!Number.isFinite(t)){V(e,t>0?"Infinity":"-Infinity");return}if(Object.is(t,-0)){V(e,"-0");return}let r=t|0;if(t===r){V(e,"int"),ne(e,r);return}V(e,"num"),ce(e,String(t));},be=(e,t)=>{if(e.nodes++>mo){V(e,"[max]");return}if(t===null){V(e,"null");return}let r=typeof t;if(r==="string"){V(e,"string"),ce(e,t);return}if(r==="number"){V(e,"number"),Kt(e,t);return}if(r==="boolean"){V(e,t?"true":"false");return}if(r==="undefined"){V(e,"undefined");return}if(r==="bigint"){V(e,"bigint"),ce(e,t.toString());return}if(r==="symbol"){V(e,"symbol");let g=t;ce(e,Symbol.keyFor(g)??g.description??String(g));return}if(r==="function"){V(e,"function"),ce(e,t.name||"anonymous");return}let o=t,s=e.seen.get(o);if(s!==void 0){V(e,"ref"),ne(e,s);return}let a=e.nextId++;if(e.seen.set(o,a),Array.isArray(o)){V(e,"array"),ne(e,o.length);for(let g=0;g<o.length;g++)Object.prototype.hasOwnProperty.call(o,g)?be(e,o[g]):V(e,"hole");return}if(o instanceof Date){V(e,"date"),Kt(e,o.getTime());return}if(o instanceof Map){V(e,"map"),ne(e,o.size),o.forEach((g,n)=>{be(e,n),be(e,g);});return}if(o instanceof Set){V(e,"set"),ne(e,o.size),o.forEach(g=>{be(e,g);});return}V(e,"object");let c=Object.getOwnPropertyDescriptors(o),l=[];Object.entries(c).forEach(([g,n])=>{n?.enumerable&&(me.has(g)||"get"in n||"set"in n||l.push([g,n]));}),ne(e,l.length);for(let[g,n]of l)ce(e,g),be(e,n.value);},ue=e=>{if(typeof e=="string")return Gt(JSON.stringify(e));let t={h1:yo,h2:ho,seen:new WeakMap,nextId:1,nodes:0};be(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 So=typeof globalThis<"u"&&typeof globalThis.structuredClone=="function",ot=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,s]of t)if(typeof s=="function"&&e instanceof s)return o;let r=globalThis.Node;return typeof r=="function"&&e instanceof r?"DOM Node":null},bo=e=>ot(e)===null,ko=e=>{let t=ot(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(ko(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 s=new Map;return t.set(e,s),e.forEach((a,c)=>{s.set(le(c,t),le(a,t));}),s}if(e instanceof Set){let s=new Set;return t.set(e,s),e.forEach(a=>{s.add(le(a,t));}),s}if(Array.isArray(e)){let s=[];return t.set(e,s),e.forEach((a,c)=>{s[c]=le(a,t);}),s}let r={};t.set(e,r);let o;try{o=Object.getOwnPropertyDescriptors(e);}catch(s){throw new Error(`deepClone failed to read object descriptors (possible Proxy or host object): ${s?.message??s}`)}return Object.entries(o).forEach(([s,a])=>{!a.enumerable||me.has(s)||"get"in a||"set"in a||(r[s]=le(a.value,t));}),r},G=e=>{if(So)try{return structuredClone(e)}catch(t){if(!bo(e)){let r=ot(e)??"unknown";throw new Error(`deepClone failed: value is not structured-cloneable (${r}). Avoid storing this type in stroid state.`)}return E(`deepClone fell back to manual clone after structuredClone failed: ${t?.message??t}`),le(e)}return le(e)};var wo=e=>{let t=new Uint8Array(e),r="";for(let o=0;o<t.length;o++)r+=t[o].toString(16).padStart(2,"0");return r},Co=async e=>{if(typeof globalThis<"u"&&globalThis.crypto?.subtle){let t=typeof TextEncoder<"u"?new TextEncoder:null,r=t?t.encode(e):new Uint8Array(Buffer.from(e)),o=await globalThis.crypto.subtle.digest("SHA-256",r);return wo(o)}try{let{createHash:t}=await import('crypto');return t("sha256").update(e).digest("hex")}catch{throw new Error("sha256 checksum is not supported in this environment")}},Oe=async(e,t,r=ue)=>e==="none"?null:e==="sha256"?Co(t):r(t);var Yt=1e6,Jt=(e,t)=>{let r=e?.options?.migrations??{};if(Object.keys(r).length>0)return r;let o=t?.migrate;if(typeof o!="function")return r;let s=e?.version??1;return !Number.isFinite(s)||s<=1?r:{[s]:o}},nt=({name:e,persisted:t,reason:r,persistConfig:o,initialState:s,reportStoreError:a,sanitize:c,deepClone:l})=>{a(e,r);let g=o?.onMigrationFail??"reset";if(g==="keep")return {state:t,requiresValidation:true};if(typeof g=="function")try{let n=g(l(t));if(n!==void 0)return {state:c(n),requiresValidation:!0};a(e,`onMigrationFail for "${e}" returned undefined. Falling back to initial state.`);}catch(n){a(e,`onMigrationFail for "${e}" failed: ${n?.message??n}`);}return {state:l(s),requiresValidation:true}},Xt=e=>{let r=e.getMeta()?.options?.persist;return r?!!r.decryptAsync||r.checksum==="sha256"?Mo(e):Ro(e):false},Ro=({name:e,silent:t=false,getMeta:r,getInitialState:o,applyFeatureState:s,reportStoreError:a,warnMissingMaxSize:c,validate:l,log:g,hashState:n,deepClone:p,sanitize:i,shouldApply:u})=>{let m=r(),d=m?.options?.persist;if(!d)return false;let h=Jt(m,d),y=f=>Me({value:f,validate:l});try{let f=d.driver.getItem?.(d.key)??null;if(!f)return !1;if(typeof f!="string")return a(e,`Persist driver for "${e}" returned an async value during sync hydration. Provide async decrypt hooks or use an async-capable persist driver.`),!0;if(typeof d.maxSize!="number"&&f.length>Yt&&c?.(f.length),typeof d.maxSize=="number"&&f.length>d.maxSize)return a(e,`Persist payload for "${e}" exceeds maxSize (${f.length} > ${d.maxSize}). Skipping hydration.`),!0;let b=d.decrypt(f),v=JSON.parse(b),{v:C=1,checksum:M,data:R,updatedAt:j,updatedAtMs:O}=v||{};if(!R)return !0;let L=ie({value:typeof O=="number"?O:j,fallbackMs:Date.now(),onInvalid:()=>{g(`persist: corrupt updatedAt in stored data for "${e}". Using current time to prevent sync overwrite.`);}});if(d.checksum!=="none"&&M!==n(R))return a(e,`Checksum mismatch loading store "${e}". Falling back to initial state.`),(!u||u())&&s(p(o()),Date.now()),!0;let J=d.deserialize(R),X=m?.version??1,_=Qt({name:e,parsed:J,v:C,targetVersion:X,cfg:d,migrations:h,getInitialState:o,reportStoreError:a,sanitize:i,deepClone:p,validateState:y,safeUpdatedAt:L,applyFeatureState:s,shouldApply:u});return _.ok&&(J=_.state,(!u||u())&&(s(_.state,L),t||g(`Store "${e}" loaded from persistence`))),!0}catch(f){return a(e,`Could not load store "${e}" (${f?.message||f})`),true}},Mo=async({name:e,silent:t=false,getMeta:r,getInitialState:o,applyFeatureState:s,reportStoreError:a,warnMissingMaxSize:c,validate:l,log:g,hashState:n,deepClone:p,sanitize:i,shouldApply:u})=>{let m=r(),d=m?.options?.persist;if(!d)return false;let h=Jt(m,d),y=f=>Me({value:f,validate:l});try{let f=await Promise.resolve(d.driver.getItem?.(d.key)??null);if(!f)return !1;if(typeof d.maxSize!="number"&&typeof f=="string"&&f.length>Yt&&c?.(f.length),typeof d.maxSize=="number"&&typeof f=="string"&&f.length>d.maxSize)return a(e,`Persist payload for "${e}" exceeds maxSize (${f.length} > ${d.maxSize}). Skipping hydration.`),!0;let b=d.decryptAsync?await d.decryptAsync(f):d.decrypt(f),v=JSON.parse(b),{v:C=1,checksum:M,data:R,updatedAt:j,updatedAtMs:O}=v||{};if(!R)return !0;let L=ie({value:typeof O=="number"?O:j,fallbackMs:Date.now(),onInvalid:()=>{g(`persist: corrupt updatedAt in stored data for "${e}". Using current time to prevent sync overwrite.`);}}),J=await Oe(d.checksum,R,n);if(d.checksum!=="none"&&M!==J)return a(e,`Checksum mismatch loading store "${e}". Falling back to initial state.`),(!u||u())&&s(p(o()),Date.now()),!0;let X=d.deserialize(R),_=m?.version??1,k=Qt({name:e,parsed:X,v:C,targetVersion:_,cfg:d,migrations:h,getInitialState:o,reportStoreError:a,sanitize:i,deepClone:p,validateState:y,safeUpdatedAt:L,applyFeatureState:s,shouldApply:u});return k.ok&&(!u||u())&&(s(k.state,L),t||g(`Store "${e}" loaded from persistence`)),!0}catch(f){return a(e,`Could not load store "${e}" (${f?.message||f})`),true}},Qt=({name:e,parsed:t,v:r,targetVersion:o,cfg:s,migrations:a,getInitialState:c,reportStoreError:l,sanitize:g,deepClone:n,validateState:p,safeUpdatedAt:i,applyFeatureState:u,shouldApply:m})=>{if(r!==o){let h=Object.keys(a).map(b=>Number(b)).filter(b=>b>r&&b<=o).sort((b,v)=>b-v);if(h.length===0){let b=nt({name:e,persisted:t,reason:`No migration path from v${r} to v${o} for "${e}". Applying onMigrationFail strategy.`,persistConfig:s,initialState:c(),reportStoreError:l,sanitize:g,deepClone:n});if(t=b.state,!b.requiresValidation)return (!m||m())&&u(t,i),{ok:false,state:t}}let y=false,f=true;if(h.forEach(b=>{if(!y)try{let v=a[b](t);v!==void 0&&(t=v);}catch(v){let C=nt({name:e,persisted:t,reason:`Migration to v${b} failed for "${e}": ${v?.message||v}`,persistConfig:s,initialState:c(),reportStoreError:l,sanitize:g,deepClone:n});t=C.state,f=C.requiresValidation,y=true;}}),y){if(!f)return (!m||m())&&u(t,i),{ok:false,state:t};let b=p(t);return b.ok?{ok:true,state:b.value??t}:((!m||m())&&u(n(c()),Date.now()),{ok:false,state:t})}}let d=p(t);if(!d.ok){if(r!==o){let h=s?.onMigrationFail??"reset",y=nt({name:e,persisted:t,reason:`Persisted state for "${e}" failed schema after version change. Applying onMigrationFail strategy.`,persistConfig:s,initialState:c(),reportStoreError:l,sanitize:g,deepClone:n});if(!y.requiresValidation)return (!m||m())&&u(y.state,i),{ok:false,state:y.state};let f=p(y.state);if(f.ok)return h==="reset"&&l(e,`Persisted state for "${e}" failed schema; resetting to initial.`),{ok:true,state:f.value??y.state}}return l(e,`Persisted state for "${e}" failed schema; resetting to initial.`),(!m||m())&&u(n(c()),Date.now()),{ok:false,state:t}}return {ok:true,state:d.value??t}};var xe=(e,t,...r)=>{if(typeof e=="function")try{e(...r);}catch(o){let s=o?.message??o;U(`${t} callback threw: ${String(s)}`);}},ke=(e,t={})=>{let{severity:r="warn",visibility:o="dev",onError:s}=t;if(xe(s,"onError",e),r==="critical"){o==="dev"&&E(e),Ee(e);return}if(o==="always"){U(e);return}E(e);};var Zt=({name:e,persistTimers:t,persistInFlight:r,persistSequence:o,persistWatchState:s,plaintextWarningsIssued:a,exists:c,getMeta:l,getStoreValue:g,reportStoreError:n,hashState:p},i=false)=>{let u=l()?.options?.persist;if(!u)return;let m=async y=>{let f=l();if(!(!f?.options?.persist||f.options.persist!==u||!c())&&!(y!==void 0&&o[e]!==y)){if(!u.allowPlaintext&&!a.has(e)&&qe(u.encrypt)&&qe(u.decrypt)){a.add(e);let b=`[stroid/persist] Store '${e}' is persisted in plaintext. Provide encrypt/decrypt hooks to protect sensitive data.`;xe(f.options.onError,`onError(${e})`,b),U(b);}try{let b=u.serialize(g()),v=await Oe(u.checksum,b,p),C=JSON.stringify({v:f.version??1,updatedAt:f.updatedAt,updatedAtMs:f.updatedAtMs??Date.now(),checksum:v,data:b}),M=u.encryptAsync?await u.encryptAsync(C):u.encrypt(C);if(y!==void 0&&o[e]!==y)return;await Promise.resolve(u.driver.setItem?.(u.key,M)),Tt(s,e,!0);}catch(b){n(e,`Could not persist store "${e}" (${b?.message||b})`);}}},d=y=>{let f=r[e],b=(o[e]??0)+1;o[e]=b;let C=(async()=>{f&&await f,!(y&&t[e]!==y)&&o[e]===b&&await m(b);})().finally(()=>{r[e]===C&&(r[e]=null),y&&t[e]===y&&delete t[e];});r[e]=C;};if(i){t[e]&&(clearTimeout(t[e]),delete t[e]),d();return}t[e]&&clearTimeout(t[e]);let h=setTimeout(()=>{t[e]===h&&d(h);},0);t[e]=h;},Te=e=>Zt(e),er=(e,t)=>Zt({...t,name:e},true);var tr=false,Eo=typeof process<"u"&&typeof process.env?.NODE_ENV=="string"?process.env.NODE_ENV:void 0,Fo=typeof import.meta<"u"&&import.meta?.env?.MODE?import.meta.env.MODE:void 0,xo=Eo??Fo,To=()=>xo==="production",Vo=()=>{let e={},t={},r=Object.create(null),o=Object.create(null),s=Object.create(null),a=new Set,c=new Set,l=Object.create(null),g=Object.create(null);return {api:{getPersistQueueDepth(n){return e[n]?1:0}},onStoreCreate(n){let p=n.options.persist;if(!p)return;if(!p.encryptAsync&&Ae(p.encrypt)&&Ae(p.decrypt)&&!p.allowPlaintext){let y=`[stroid/persist] Store "${n.name}" is configured for plaintext persistence. Provide encrypt/decrypt hooks or set persist.allowPlaintext: true to acknowledge.`;if(To()){n.reportStoreError(y),n.options.persist=null;return}n.warn(y);}if(p.sensitiveData&&!p.encryptAsync&&Ae(p.encrypt)){n.reportStoreError(`persist: store "${n.name}" is marked sensitiveData but has no encrypt function. Plaintext data will be written to storage.`);return}let u=xt(n.name,p.encrypt,p.decrypt);if(!u.ok){n.reportStoreError(u.reason??`persist: encrypt/decrypt validation failed for store "${n.name}".`),n.options.persist=null;return}if(p.key){let y=o[p.key];y&&y!==n.name&&n.isDev()?n.warn(`Persist key collision: "${p.key}" already used by store "${y}". Store "${n.name}" will overwrite the same storage key.`):o[p.key]=n.name;}let m=n.getMeta()?.updateCount??0,d=()=>{let y=n.getMeta();return y?(y.updateCount??0)===m:false},h=Xt({name:n.name,silent:true,getMeta:n.getMeta,getInitialState:n.getInitialState,applyFeatureState:n.applyFeatureState,reportStoreError:(y,f)=>n.reportStoreError(f),warnMissingMaxSize:y=>{c.has(n.name)||(c.add(n.name),n.warnAlways(`[stroid/persist] Store "${n.name}" loaded ${y} bytes without a maxSize guard. Set persist.maxSize to prevent oversized payloads.`));},validate:n.validate,log:n.log,hashState:n.hashState,deepClone:n.deepClone,sanitize:n.sanitize,shouldApply:d});if(typeof h?.then=="function"?(l[n.name]={loading:true,pendingSave:false},h.then(y=>{let f=l[n.name];f&&(f.loading=false,(!y||f.pendingSave)&&Te({name:n.name,persistTimers:e,persistInFlight:t,persistSequence:r,persistWatchState:s,plaintextWarningsIssued:a,exists:()=>n.hasStore(),getMeta:n.getMeta,getStoreValue:n.getStoreValue,reportStoreError:(b,v)=>n.reportStoreError(v),hashState:n.hashState}),delete l[n.name]);}).catch(()=>{let y=l[n.name];y&&(y.loading=false,y.pendingSave&&Te({name:n.name,persistTimers:e,persistInFlight:t,persistSequence:r,persistWatchState:s,plaintextWarningsIssued:a,exists:()=>n.hasStore(),getMeta:n.getMeta,getStoreValue:n.getStoreValue,reportStoreError:(f,b)=>n.reportStoreError(b),hashState:n.hashState}),delete l[n.name]);})):h||Te({name:n.name,persistTimers:e,persistInFlight:t,persistSequence:r,persistWatchState:s,plaintextWarningsIssued:a,exists:()=>n.hasStore(),getMeta:n.getMeta,getStoreValue:n.getStoreValue,reportStoreError:(y,f)=>n.reportStoreError(f),hashState:n.hashState}),typeof window<"u"&&typeof window.addEventListener=="function"){g[n.name]?.();let y=window,f=false,b=()=>{f||(f=true,y.removeEventListener("pagehide",v),y.removeEventListener("beforeunload",v),delete g[n.name]);},v=()=>{b(),er(n.name,{name:n.name,persistTimers:e,persistInFlight:t,persistSequence:r,persistWatchState:s,plaintextWarningsIssued:a,exists:()=>n.hasStore(),getMeta:n.getMeta,getStoreValue:n.getStoreValue,reportStoreError:(C,M)=>n.reportStoreError(M),hashState:n.hashState});};y.addEventListener("pagehide",v,{once:true}),y.addEventListener("beforeunload",v,{once:true}),g[n.name]=b;}Vt({name:n.name,persistConfig:p,persistWatchState:s});},onStoreWrite(n){if(!n.options.persist)return;let p=l[n.name];if(p?.loading){p.pendingSave=true;return}Te({name:n.name,persistTimers:e,persistInFlight:t,persistSequence:r,persistWatchState:s,plaintextWarningsIssued:a,exists:()=>n.hasStore(),getMeta:n.getMeta,getStoreValue:n.getStoreValue,reportStoreError:(i,u)=>n.reportStoreError(u),hashState:n.hashState});},beforeStoreDelete(n){let p=n.options.persist;if(p){delete l[n.name],c.delete(n.name),e[n.name]&&(clearTimeout(e[n.name]),delete e[n.name]),t[n.name]=null,delete r[n.name];try{p.driver.removeItem?.(p.key);}catch{}p.key&&o[p.key]===n.name&&delete o[p.key],g[n.name]?.(),s[n.name]?.dispose(),delete g[n.name],delete s[n.name];}},resetAll(){Object.values(e).forEach(n=>clearTimeout(n)),Object.values(g).forEach(n=>{try{n();}catch{}}),Object.values(s).forEach(n=>{try{n.dispose();}catch{}}),Object.keys(e).forEach(n=>delete e[n]),Object.keys(t).forEach(n=>{t[n]=null,delete t[n];}),Object.keys(r).forEach(n=>delete r[n]),Object.keys(o).forEach(n=>delete o[n]),Object.keys(s).forEach(n=>delete s[n]),Object.keys(l).forEach(n=>delete l[n]),a.clear(),c.clear();}}},rr=()=>{tr||(tr=true,fe("persist",Vo));};var or=({name:e,label:t,fn:r,args:o,reportIssue:s})=>{if(typeof r=="function")try{r(...o);}catch(a){let c=`${t} for "${e}" failed: ${a?.message??a}`;s(c,"always");}};A("computed.order-resolver",()=>{},105);var ir=()=>he(ye(ge)),st=()=>ir().computedEntries,ar=()=>ir().computedDependents;var cr=e=>Object.prototype.hasOwnProperty.call(st(),e);var it=e=>{let t=st()[e];if(!t)return null;let r=ar()[e];return {deps:[...t.deps],dependents:r?[...r]:[]}};var Po=new Set;var Ao=()=>{Po.clear();};A("ssr.warnings",Ao,60);var Do=(e,t,r={})=>{ke(t,{...r,onError:$[e]?.options?.onError});};var at=(e,t)=>Do(e,t,{severity:"critical",visibility:"always"});var ur=new WeakMap,lr=new WeakMap;var ze=e=>{let t=ur.get(e);return t||(t=new Map,ur.set(e,t)),t},dr=e=>{let t=lr.get(e);return t||(t=new Map,lr.set(e,t)),t};new Proxy(new Map,{get:(e,t)=>{let r=ze(z());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)=>(ze(z())[t]=r,true)});var $o=(e,t)=>{let r=new Set,o=$[e]?.options?.onError;return typeof o=="function"&&r.add(o),r},fr=(e,t,r,o)=>{if(!r)return {ok:true,value:t};let s=$o(e),a=(l,g)=>{s.forEach(n=>xe(n,`onError(${e})`,l)),g==="critical"?Ee(l):E(l);};if(typeof r=="function")try{let l=r(t);return l===!1?(a(`Validation blocked update for "${e}"`,"warn"),{ok:!1}):{ok:!0,value:l===!0?t:l}}catch(l){return a(`Validation for "${e}" failed: ${l?.message??l}`,"critical"),{ok:false}}let c=Ze(r,t);return c.ok?{ok:true,value:c.data??t}:(a(`Validation failed for "${e}": ${c.error}`,"critical"),{ok:false})};var ct=e=>{let t=z();ze(t).delete(e),dr(t).delete(e);},Oo=()=>{let e=z();ze(e).clear(),dr(e).clear();};A("validation.path-cache",Oo,50);pr(ct);var kr=new Map;var je=(e,t,r)=>{let o=kr.get(e);!o||o.size===0||o.forEach(s=>{try{s(t,r);}catch(a){typeof console<"u"&&console.warn&&console.warn(`[stroid] lifecycle hook "${e}" failed:`,a);}});};var _o=()=>{};A("write-context.runner",_o,121);var zo=()=>{let e=z().notify;e.pendingNotifications.clear(),e.pendingBuffer.length=0,e.orderedNames.length=0,e.notifyScheduled=false,e.batchDepth=0;};A("notify.reset",zo,40);var Wo=()=>z().computedCleanups,Cr=new WeakMap;var Ho=e=>{let t=Cr.get(e);return t||(t=new Map,Cr.set(e,t)),t};var Rr=e=>{let t=Wo(),r=t.get(e);if(!r){D()&&E(`deleteComputed("${e}") -- not found`);return}r(),t.delete(e);};var Mr=(e,t=z())=>Ho(t).get(e)?.autoDispose===true;var Er=e=>{let t=e.stores,r=e.subscribers,o=e.initialStates,s=e.initialFactories,a=e.metaEntries,c=e.snapshotCache,l=e.featureRuntimes,g=e.deletingStores,n=(h,y)=>{ke(y,{onError:a[h]?.options?.onError,severity:"warn",visibility:"dev"});},p=({name:h,prev:y,options:f,initialState:b,getMeta:v,getStoreValue:C,hasStore:M})=>({name:h,options:f,prev:y,getMeta:v,getStoreValue:C,getAllStores:()=>t,getInitialState:()=>b,hasStore:M,setStoreValue:()=>{},applyFeatureState:()=>{},notify:()=>{},reportStoreError:R=>{ke(R,{onError:f.onError,severity:"warn",visibility:"dev"});},warn:E,warnAlways:U,log:oe,hashState:ue,deepClone:G,sanitize:Se,validate:()=>({ok:true,value:y}),isDev:D}),i=({name:h,prev:y,options:f,initialState:b,phase:v})=>{let C=p({name:h,prev:y,options:f,initialState:b,getMeta:()=>a[h],getStoreValue:()=>t[h],hasStore:()=>ae(e,h)}),M=p({name:h,prev:y,options:f,initialState:b,getMeta:()=>{},getStoreValue:()=>y,hasStore:()=>false});pe().forEach(R=>{let j=l.get(R);v==="before"?j?.beforeStoreDelete?.(C):j?.afterStoreDelete?.(M);});},u=h=>{if(!ae(e,h))return;let y=t[h],f=a[h].options,b=o[h],v=r[h];g.add(h);try{v?.forEach(R=>{try{R(null);}catch(j){E(`Subscriber for "${h}" threw during delete: ${j?.message??j}`);}}),or({name:h,label:"onDelete",fn:f.onDelete,args:[y],reportIssue:(R,j)=>{ke(R,{onError:f.onError,severity:"warn",visibility:j});}}),i({name:h,prev:y,options:f,initialState:b,phase:"before"}),delete t[h],delete r[h],delete o[h],delete s[h],delete a[h],delete c[h],cr(h)&&Rr(h);let M=e.computedDependents[h];if(M)for(let R of [...M]){let j=it(R);if(j&&Mr(R,e)&&j.deps.every(O=>!ae(e,O))){u(R);continue}E(`[stroid] source store "${h}" was deleted. Computed store "${R}" depends on it and will return stale data. Call deleteComputed("${R}") to clean up.`);}i({name:h,prev:y,options:f,initialState:b,phase:"after"}),je("afterStoreDelete",h,{type:"afterStoreDelete",prev:y}),Je(e,{type:"deleted",name:h}),oe(`Store "${h}" deleted`);}finally{g.delete(h);}};return {deleteExistingStore:u,clearAllStores:()=>{let h=[],f=0,b=Number.POSITIVE_INFINITY;for(;f<20;){let C=Object.keys(t);if(C.length===0)break;C.forEach(R=>{ae(e,R)&&(u(R),h.push(R));}),f+=1;let M=Object.keys(t).length;if(M===0||M>=b)break;b=M;}let v=Object.keys(t).length;return v>0?E(`clearAllStores stopped after ${f} pass${f===1?"":"es"}; ${v} store(s) still registered (likely recreated during deletion).`):oe(`All stores cleared (${h.length} stores removed)`),h},clearStores:h=>{let y=Object.keys(t).filter(f=>h?h.endsWith("*")?f.startsWith(h.slice(0,-1)):f===h:true);return y.forEach(f=>u(f)),y},reportStoreError:n}};var bt=ge,xr=ye(bt),Tr=null,q=()=>{let e=he(xr);return Ge(e),e};var z=()=>q();function pr(e){Tr=e;}var ve=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}}}),Lo=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 s=o[r];return typeof s=="function"?s.bind(o):s},set:(t,r,o)=>(e()[r]=o,true)}),Bo=e=>new Proxy({},{get:(t,r)=>{let o=e(),s=o[r];return typeof s=="function"?s.bind(o):s},set:(t,r,o)=>(e()[r]=o,true)}),Ie=ve(()=>q().stores);ve(()=>q().subscribers);var Vr=ve(()=>q().initialStates);ve(()=>q().initialFactories);var $=ve(()=>q().metaEntries);ve(()=>q().snapshotCache);var te=Lo(()=>q().featureRuntimes),Fr=new WeakMap,Uo=e=>{let t=Fr.get(e);return t||(t=Er(e),Fr.set(e,t)),t};Bo(()=>Uo(q()));var qo=e=>{let t=te.get(e);if(t)return t;let r=Pe(e);if(!r)return;let o=r();return te.set(e,o),o},kt=()=>{pe().forEach(e=>{qo(e);});};Ft((e,t)=>{te.get(e)||te.set(e,t());});kt();var Ne=(e,t)=>ae(q(),e);var We=(e,t,r=q())=>{r.stores[e]=t;},jr=(e,t,r=Date.now())=>{We(e,t),$[e]&&($[e].updatedAt=new Date(r).toISOString(),$[e].updatedAtMs=r,$[e].lastCorrelationId=null,$[e].lastCorrelationAt=null,$[e].lastCorrelationAtMs=null,$[e].lastTraceContext=null,$[e].updateCount>=Number.MAX_SAFE_INTEGER?$[e].updateCount=0:$[e].updateCount+=1,Tr?.(e));};var Ko=()=>{Ot(q());},Go=()=>{te.forEach(e=>{try{e.resetAll?.();}catch{}}),te.clear();};A("features.reset",Go,10);A("registries.clear",Ko,20);A("registry.default",()=>{bt=ge,xr=ye(bt);},115);var Pr=new WeakMap,Ar=e=>{let t=Pr.get(e);return t||(t=new Map,Pr.set(e,t)),t},Yo=()=>{Ar(z()).clear();};A("features.contexts",Yo,100);var Jo=e=>{let t=z(),r=Ar(t),o=r.get(e);if(o)return o;let s=$[e];if(!s)return E(`Internal feature context requested for "${e}" after metadata was cleared.`),null;let a={name:e,options:s.options,getMeta:()=>$[e],getStoreValue:()=>Ie[e],getAllStores:()=>Ie,getInitialState:()=>Vr[e],hasStore:()=>Ne(e),setStoreValue:c=>{We(e,c);},applyFeatureState:(c,l)=>{jr(e,c,l),ct(e);},notify:()=>{},reportStoreError:c=>{at(e,c);},warn:E,warnAlways:U,log:oe,hashState:ue,deepClone:G,sanitize:Se,validate:c=>fr(e,c,$[e]?.options?.validate),isDev:D};return r.set(e,a),a},Xo=(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 s=`Feature hook context missing fields for "${e}": ${o.join(", ")}.`;if(at(e,s),r.assertRuntime)throw new Error(s)};var vt=(e,t,r,o,s,a)=>{kt();let c=Jo(e);if(!c)return;c.notify=()=>s(e);let l=Object.assign(Object.create(c),{action:t,prev:r,next:o});Xo(e,l);let g=new Set(a);te.forEach((n,p)=>{g.has(p)||n.onStoreWrite?.(l);});};var Dr=false,we=1,Qo=e=>typeof e?.v=="number"?e.v:typeof e?.protocol=="number"?e.protocol:void 0,wt=new Set,Ct=new Set,Le=100,_r=e=>{if(!e)return null;if(e===true)return Le;if(typeof e!="object")return null;let t=e.loopGuard;if(t===false)return null;if(t===true||t===void 0)return Le;if(typeof t=="object"){let r=t.windowMs;return typeof r=="number"&&Number.isFinite(r)&&r>0?r:Le}return Le},Zo=e=>typeof TextEncoder<"u"?new TextEncoder().encode(e).length:typeof Buffer<"u"?Buffer.byteLength(e):e.length,en=({incoming:e,accepted:t})=>{let r=t?.clock??0,o=typeof e.clock=="number"?e.clock:0;if(o!==r)return o-r;let s=e.source??"",a=t?.source??"";return s===a?0:s.localeCompare(a,"en",{sensitivity:"variant"})},tn=e=>e?.updatedAtMs??ie({value:e?.updatedAt,fallbackMs:0}),rn=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"},$r=({name:e,syncChannels:t,instanceId:r,authToken:o,reportStoreError:s})=>{let a=t[e];if(a)try{let c={v:we,protocol:we,type:"sync-request",source:r,name:e,clock:0,requestedAt:Date.now()};o&&(c.token=o),a.postMessage(c);}catch(c){s(e,`Failed to request sync snapshot for "${e}": ${c?.message??c}`);}},on=(e,t)=>(t[e]=(t[e]??0)+1,t[e]),nn=(e,t,r)=>(r[e]=Math.max(r[e]??0,t)+1,r[e]),sn=({name:e,syncChannels:t,syncWindowCleanup:r,syncClocks:o,syncVersions:s})=>{t[e]?.close(),delete t[e],r[e]?.(),delete r[e],delete o[e],delete s[e];},an=({syncChannels:e,syncWindowCleanup:t})=>{Object.values(t).forEach(r=>{try{r();}catch{}}),Object.values(e).forEach(r=>{try{r.close();}catch{}});},cn=({name:e,syncOption:t,syncChannels:r,syncClocks:o,syncVersions:s,syncWindowCleanup:a,instanceId:c,getMeta:l,getAcceptedSyncVersion:g,getStoreValue:n,hasStoreEntry:p,notify:i,validate:u,reportStoreError:m,warn:d,setStoreValue:h,normalizeIncomingState:y,acceptIncomingSyncVersion:f,resolveSyncVersion:b,broadcastSync:v,markLoopGuard:C,hashState:M})=>{if(!t)return;if(typeof window>"u"||typeof BroadcastChannel>"u"){m(e,`Sync enabled for "${e}" but BroadcastChannel not available in this environment.`);return}let R=typeof t=="object"?t.policy:void 0,j=R==="insecure"||R!=="strict"&&typeof t=="object"&&t.insecure===true,O=typeof t=="object"&&typeof t.authToken=="string"&&t.authToken.length>0,L=typeof t=="object"&&typeof t.verify=="function",J=typeof t=="object"&&typeof t.sign=="function",X=R==="strict"||!D()&&R!=="insecure";if(X&&!j&&!O&&!L){m(e,`Sync for "${e}" requires authToken or verify in strict mode. Use sync: { policy: "insecure" } to acknowledge the risk.`);return}!X&&!j&&!O&&!L&&!wt.has(e)&&(wt.add(e),U(`Sync for "${e}" is unauthenticated. Any same-origin tab can forge sync messages. Provide sync.authToken or sync.verify to enforce authentication.`)),J&&!L&&!Ct.has(e)&&(Ct.add(e),d(`Sync for "${e}" is configured with "sign" but no "verify". "sign" has no effect unless incoming messages are verified.`));let _=typeof t=="object"?t.authToken:void 0,k=_r(t),T=false,F=typeof t=="object"&&t.channel?t.channel:`stroid_sync_${e}`;try{let S=new BroadcastChannel(F);if(r[e]=S,S.onmessage=W=>{let w=W.data;if(!w||w.source===c||w.name!==e||r[e]!==S||!p(e)||!l(e))return;if(!rn(w)){m(e,`Sync message for "${e}" is malformed; ignoring.`);return}if(_&&w.token!==_){T||(m(e,`Sync message for "${e}" failed auth token verification; ignoring.`),T=!0);return}let I=Qo(w);if(I!==we){m(e,`Sync protocol mismatch for "${e}". Expected v${we} but received ${String(I??"unknown")}. Ignoring message.`);return}let B=w.type==="sync-state";if(B&&(typeof w.data>"u"||typeof w.clock!="number")){m(e,`Sync message for "${e}" is malformed; ignoring.`);return}if(typeof t=="object"&&typeof t.verify=="function"){let P=!1;try{P=!!t.verify(w);}catch(x){m(e,`Sync message verification failed for "${e}": ${x?.message??x}`);return}if(!P){m(e,`Sync message for "${e}" failed verification; ignoring.`);return}}let Q=typeof t=="object"&&t.checksum==="none"?"none":"hash";if(B&&Q!=="none"){let P=M(w.data);if(w.checksum!==P){m(e,`Sync checksum mismatch for "${e}". Expected ${String(P)}, got ${String(w.checksum)}. Ignoring message.`);return}}if(w.type==="sync-request"){v(e);return}let K=typeof t=="object"?t.conflictResolver:null;if(en({incoming:{clock:w.clock,source:w.source},accepted:g(e)})<=0){let P=tn(l(e)),x=typeof w.updatedAt=="number"?w.updatedAt:Date.now();if(K){let Y=K({local:n(e),incoming:w.data,localUpdated:P,incomingUpdated:x});if(Y!==void 0){let H=y(e,Y);if(H===null)return;let Ce=n(e);h(e,H);let re=typeof t=="object"?t.resolveUpdatedAt:null,Re=re?re({localUpdated:P,incomingUpdated:x,now:Date.now()}):Math.max(Date.now(),P,x);b(e,Re,typeof w.clock=="number"?w.clock:0),vt(e,"sync",Ce,H,()=>i(e),["sync"]),k&&C(e,k),i(e),v(e);}}return}let Z=y(e,w.data);if(Z===null)return;let se=n(e);h(e,Z),f(e,typeof w.updatedAt=="number"?w.updatedAt:Date.now(),typeof w.clock=="number"?w.clock:0,typeof w.source=="string"?w.source:""),vt(e,"sync",se,Z,()=>i(e),["sync"]),k&&C(e,k),i(e);},typeof window<"u"&&typeof window.addEventListener=="function"){a[e]?.();let W=window,w=()=>{$r({name:e,syncChannels:r,instanceId:c,authToken:_,reportStoreError:m});};W.addEventListener("focus",w),W.addEventListener("online",w),a[e]=()=>{W.removeEventListener("focus",w),W.removeEventListener("online",w);};}queueMicrotask(()=>{$r({name:e,syncChannels:r,instanceId:c,authToken:_,reportStoreError:m});});}catch(S){d(`Failed to setup sync for "${e}": ${S?.message||S}`);}},Or=({name:e,syncOption:t,syncChannels:r,syncClocks:o,instanceId:s,updatedAt:a,data:c,hashState:l,reportStoreError:g})=>{let n=r[e];if(n)try{let p=typeof t=="object"&&t.checksum==="none"?"none":"hash",i={v:we,protocol:we,type:"sync-state",source:s,name:e,clock:o[e]??0,updatedAt:ie({value:a,fallbackMs:Date.now()}),data:c,checksum:p==="hash"?l(c):null};if(typeof t=="object"&&t.authToken&&(i.token=t.authToken),typeof t=="object"&&typeof t.sign=="function")try{let d=t.sign(i);if(d&&typeof d.then=="function"){g(e,`Sync signer for "${e}" returned a Promise. "sign" must be synchronous.`);return}d!==void 0&&(i.auth=d);}catch(d){g(e,`Failed to sign sync payload for "${e}": ${d?.message??d}`);return}let u=typeof t=="object"&&typeof t.maxPayloadBytes=="number"?t.maxPayloadBytes:64*1024,m=Zo(JSON.stringify(i));if(m>u){g(e,`Sync payload for "${e}" exceeds ${u} bytes (${m} bytes). Skipping BroadcastChannel sync.`);return}try{n.postMessage(i);}catch(d){if(d&&typeof d=="object"&&d.name==="DataCloneError"){g(e,`Sync payload for "${e}" could not be cloned (DataCloneError). Remove non-serializable values or provide a custom serializer. Payload size ~${m} bytes.`);return}throw d}}catch(p){g(e,`Failed to broadcast sync for "${e}": ${p?.message??p}`);}},un=()=>{let e=Object.create(null),t=Object.create(null),r=Object.create(null),o=Object.create(null),s=Object.create(null),a=new Set,c=`stroid_${Math.random().toString(16).slice(2)}`,l=(i,u)=>{r[i]={clock:t[i]??0,updatedAt:ie({value:u,fallbackMs:Date.now()}),source:c};},g=(i,u)=>{on(i,t),l(i,u);},n=(i,u)=>{!u||!Number.isFinite(u)||(s[i]=Date.now()+u);},p=(i,u)=>{if(!u)return false;let m=s[i];return m?Date.now()>=m?(delete s[i],false):true:false};return {onStoreCreate(i){if(!i.options.sync)return;let u=i.options.sync,m=i.notify,d=typeof u=="object"?u.policy:void 0,h=d==="insecure"||d!=="strict"&&typeof u=="object"&&u.insecure===true,y=typeof u=="object"&&typeof u.authToken=="string"&&u.authToken.length>0,f=typeof u=="object"&&typeof u.verify=="function";if((d==="strict"||!i.isDev()&&d!=="insecure")&&u&&!h&&!y&&!f){i.reportStoreError(`Sync for "${i.name}" requires authToken or verify in strict mode. Use sync: { policy: "insecure" } to acknowledge the risk.`),i.options.sync=false;return}if(cn({name:i.name,syncOption:u,syncChannels:e,syncClocks:t,syncVersions:r,syncWindowCleanup:o,instanceId:c,getMeta:i.getMeta,getAcceptedSyncVersion:v=>r[v],getStoreValue:v=>i.getStoreValue(),hasStoreEntry:()=>i.hasStore(),notify:()=>m(),validate:(v,C)=>i.validate(C),reportStoreError:(v,C)=>i.reportStoreError(C),warn:i.warn,setStoreValue:(v,C)=>i.setStoreValue(C),normalizeIncomingState:(v,C)=>{let M=Me({value:C,sanitize:i.sanitize,validate:i.validate,onSanitizeError:R=>{i.reportStoreError(`Sanitize failed for incoming sync "${v}": ${R?.message??R}`);}});return M.ok?M.value:null},acceptIncomingSyncVersion:(v,C,M,R)=>{i.applyFeatureState(i.getStoreValue(),C),t[i.name]=Math.max(t[i.name]??0,M),r[i.name]={clock:M,updatedAt:C,source:R};},resolveSyncVersion:(v,C,M)=>{i.applyFeatureState(i.getStoreValue(),C);let R=nn(i.name,M,t);return r[i.name]={clock:R,updatedAt:C,source:c},R},broadcastSync:()=>{let v=i.getMeta();v&&Or({name:i.name,syncOption:i.options.sync,syncChannels:e,syncClocks:t,instanceId:c,updatedAt:v.updatedAtMs??v.updatedAt,data:i.getStoreValue(),hashState:i.hashState,reportStoreError:(C,M)=>i.reportStoreError(M)});},markLoopGuard:n,hashState:i.hashState}),e[i.name]){let v=i.getMeta();l(i.name,v?.updatedAtMs??v?.updatedAt??new Date().toISOString());}},onStoreWrite(i){if(!i.options.sync)return;let u=i.getMeta();if(!u)return;let m=_r(i.options.sync);if(p(i.name,m)){g(i.name,u.updatedAtMs??u.updatedAt),a.has(i.name)||(a.add(i.name),i.warn(`Sync broadcast for "${i.name}" suppressed by loopGuard to prevent feedback loops.`));return}g(i.name,u.updatedAtMs??u.updatedAt),Or({name:i.name,syncOption:i.options.sync,syncChannels:e,syncClocks:t,instanceId:c,updatedAt:u.updatedAtMs??u.updatedAt,data:i.next,hashState:i.hashState,reportStoreError:(d,h)=>i.reportStoreError(h)});},beforeStoreDelete(i){sn({name:i.name,syncChannels:e,syncWindowCleanup:o,syncClocks:t,syncVersions:r}),delete s[i.name],a.delete(i.name);},resetAll(){an({syncChannels:e,syncWindowCleanup:o}),Object.keys(e).forEach(i=>delete e[i]),Object.keys(t).forEach(i=>delete t[i]),Object.keys(r).forEach(i=>delete r[i]),Object.keys(o).forEach(i=>delete o[i]),Object.keys(s).forEach(i=>delete s[i]),wt.clear(),Ct.clear(),a.clear();}}},Ir=()=>{Dr||(Dr=true,fe("sync",un));};var Nr=false,zr=e=>{try{return typeof structuredClone=="function"?structuredClone(e):JSON.parse(JSON.stringify(e))}catch{return e}},ln=({name:e,useDevtools:t,existingDevtools:r,stores:o,warn:s})=>{if(!t||typeof window>"u")return r;let a=window.__REDUX_DEVTOOLS_EXTENSION__||window.__REDUX_DEVTOOLS_EXTENSION__;if(!a||typeof a.connect!="function")return s(`DevTools requested for "${e}" but Redux DevTools extension not found.`),r;if(r)return r;let c=a.connect({name:"stroid"});return c.init(o),c},Be=({data:e,redactor:t,deepClone:r})=>{if(typeof t=="function")try{return t(r(e))}catch{return e}return e},dn=(e,t)=>{if(typeof e!="object"||typeof t!="object"||e===null||t===null)return null;let r=e,o=t,s=[],a=[],c=[],l=new Set(Object.keys(r)),g=new Set(Object.keys(o));return g.forEach(n=>{l.has(n)?Object.is(r[n],o[n])||c.push(n):s.push(n);}),l.forEach(n=>{g.has(n)||a.push(n);}),{added:s,removed:a,changed:c}},Wr=({name:e,action:t,prev:r,next:o,history:s,historyLimit:a,applyRedactor:c,deepClone:l})=>{if(a===0)return;s[e]||(s[e]=[]);let g={ts:Date.now(),action:t,prev:l(c(r)),next:l(c(o)),diff:dn(r,o)};s[e].push(g),s[e].length>a&&s[e].splice(0,s[e].length-a);},Hr=({name:e,action:t,force:r=false,devtools:o,enabled:s,stores:a,applyRedactor:c})=>{if(!(!o||!r&&!s))try{let l={...a,[e]:c(a[e])};o.send({type:`${e}/${t}`},l);}catch{}},fn=()=>{let e=Object.create(null),t;return {onStoreCreate(r){t=ln({name:r.name,useDevtools:!!r.options.devtools,existingDevtools:t,stores:r.getAllStores(),warn:r.warn}),Wr({name:r.name,action:"create",prev:null,next:r.getStoreValue(),history:e,historyLimit:r.options.historyLimit??50,applyRedactor:o=>Be({data:o,redactor:r.options.redactor,deepClone:r.deepClone}),deepClone:r.deepClone});},onStoreWrite(r){Wr({name:r.name,action:r.action,prev:r.prev,next:r.next,history:e,historyLimit:r.options.historyLimit??50,applyRedactor:o=>Be({data:o,redactor:r.options.redactor,deepClone:r.deepClone}),deepClone:r.deepClone}),Hr({name:r.name,action:r.action,devtools:t,enabled:!!r.options.devtools,stores:r.getAllStores(),applyRedactor:o=>Be({data:o,redactor:r.options.redactor,deepClone:r.deepClone})});},afterStoreDelete(r){r.options.devtools&&Hr({name:r.name,action:"delete",force:true,devtools:t,enabled:true,stores:r.getAllStores(),applyRedactor:o=>Be({data:o,redactor:r.options.redactor,deepClone:r.deepClone})}),delete e[r.name];},resetAll(){Object.keys(e).forEach(r=>{delete e[r];}),t=void 0;},api:{getHistory(r,o){if(!e[r])return [];let s=e[r];return o&&o>0?zr(s.slice(-o)):zr(s)},clearHistory(r){if(r){delete e[r];return}Object.keys(e).forEach(o=>{delete e[o];});}}}},Lr=()=>{Nr||(Nr=true,fe("devtools",fn));};var pn=()=>{rr();},gn=()=>{Ir();},yn=()=>{Lr();},ma=()=>{pn(),gn(),yn();};export{ma as installAllFeatures,yn as installDevtools,pn as installPersist,gn as installSync};//# sourceMappingURL=install.js.map
1
+ var Ue=new Map,Et=null,fe=(e,t)=>{Ue.set(e,t),Et?.(e,t);};var Pe=e=>Ue.get(e),pe=()=>Array.from(Ue.keys()),Ft=e=>{Et=e;};var qr=typeof Symbol=="function"?Symbol.for("stroid.persist.defaultCrypto"):"__stroid_persist_defaultCrypto__",qe=e=>!!e?.[qr],De=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}},xt=(e,t,r)=>{let o="__stroid_persist_roundtrip_probe__",s;try{s=t(o);}catch(c){return {ok:false,reason:`persist: encrypt failed for store "${e}" (${c?.message??c})`}}if(typeof s!="string")return {ok:false,reason:`persist: encrypt must return a string for store "${e}".`};let a;try{a=r(s);}catch(c){return {ok:false,reason:`persist: decrypt failed for store "${e}" (${c?.message??c})`}}return typeof a!="string"?{ok:false,reason:`persist: decrypt must return a string for store "${e}".`}:a!==o?{ok:false,reason:`persist: encrypt/decrypt must round-trip for store "${e}".`}:{ok:true}};var Tt=(e,t,r)=>{e[t]&&(e[t].lastPresent=r);},Vt=({name:e,persistConfig:t,persistWatchState:r})=>{let o=t?.onStorageCleared;if(!t||typeof o!="function"||typeof window>"u"||typeof window.addEventListener!="function")return;r[e]?.dispose();let s=window,a=()=>{try{return t.driver.getItem?.(t.key)!=null}catch{return false}},c=n=>{let p=r[e],i=a();if(p){if(!p.lastPresent||i){p.lastPresent=i;return}p.lastPresent=false,o({name:e,key:t.key,reason:n});}},l=n=>{if(n.key===null){c("clear");return}n.key===t.key&&n.newValue===null&&c("remove");},g=()=>{c("missing");};s.addEventListener("storage",l),s.addEventListener("focus",g),r[e]={lastPresent:a(),dispose:()=>{s.removeEventListener("storage",l),s.removeEventListener("focus",g);}};};var Me=({value:e,sanitize:t,validate:r,onSanitizeError:o})=>{let s;if(t)try{s=t(e);}catch(c){return o?.(c),{ok:false}}else s=e;let a=r(s);return a.ok?{ok:true,value:a.value??s}:{ok:false}},ie=({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 Gr=new Map,D=(e,t,r=0)=>{!e||typeof t!="function"||Gr.set(e,{name:e,order:r,fn:t});};var jt=()=>new Map([["noSignal",new Set],["shape",new Set],["autoCreate",new Set],["mutableResult",new Set]]),Pt=()=>({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:jt(),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}}),Dt=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(),jt().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 Ge=new Map,At=new WeakSet,Ke=e=>{At.has(e)||(At.add(e),pe().forEach(t=>{if(!e.featureRuntimes.get(t)){let r=Pe(t);r&&e.featureRuntimes.set(t,r());}}));},Kr=typeof __STROID_REGISTRY_ID__<"u"&&__STROID_REGISTRY_ID__||typeof process<"u"&&process.env?.STROID_REGISTRY_ID||void 0,$t,Ye=e=>($t||Kr||e).replace(/\.ts(\?|$)/,".js$1"),ge=Ye("stroid:default-registry");var Yr=()=>{$t=void 0,Ge.clear();};D("registry.scope-override",Yr,110);var Jr=()=>({pendingNotifications:new Set,pendingBuffer:[],orderedNames:[],subscriberBuffer:[],notifyScheduled:false,batchDepth:0,flushId:0,isFlushing:false}),Xr=e=>{e.pendingNotifications.clear(),e.pendingBuffer.length=0,e.orderedNames.length=0,e.subscriberBuffer.length=0,e.notifyScheduled=false,e.batchDepth=0,e.flushId=0,e.isFlushing=false;},Qr=()=>({depth:0,pending:[],stagedValues:new Map,snapshotCache:new Map,runtimePatches:[],failed:false,error:void 0}),Zr=(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,lastRuntimePatches:[],transaction:Qr(),async:Pt(),notify:Jr(),lifecycleListener:null};return Ke(t),t},ye=e=>{let t=Ye(e),r=Ge.get(t);if(r)return r;let o=Zr();return Ge.set(t,o),o},ae=(e,t)=>Object.prototype.hasOwnProperty.call(e.stores,t);var Ot=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.runtimePatches.length=0,e.transaction.failed=false,e.transaction.error=void 0,e.lastRuntimePatches.length=0,Xr(e.notify),Dt(e.async),e.lifecycleListener=null;};var Je=(e,t)=>{try{e.lifecycleListener?.(t);}catch{}};var ee=[],It={run:(e,t)=>{ee.push(e);try{return t()}finally{ee.pop();}},get:()=>ee.length>0?ee[ee.length-1]:null,enterWith:e=>{if(ee.length>0){ee[ee.length-1]=e;return}ee.push(e);}};var me=e=>(It).get()||e||ye(ge);var to={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}`));}},zt={logSink:to,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},Qe=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}),Xe=new WeakMap,Wt=Qe(zt),ro=e=>{let t=Xe.get(e);return t||(t=Qe(Wt),Xe.set(e,t)),t};var _=()=>ro(me());var io=()=>{Xe=new WeakMap,Wt=Qe(zt);};D("config.reset",io,90);var ao=typeof process<"u"&&typeof process.env?.NODE_ENV=="string"?process.env.NODE_ENV:void 0,co=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,uo="production",lo=ao??co??uo,$e=typeof Ht=="boolean"?Ht:lo!=="production",A=()=>$e,Lt=(e,t)=>{typeof console<"u"&&typeof console.warn=="function"&&(t?console.warn(`[stroid] ${e}`,t):console.warn(`[stroid] ${e}`));},fo=(e,t)=>{typeof console<"u"&&typeof console.error=="function"&&(t?console.error(`[stroid] ${e}`,t):console.error(`[stroid] ${e}`));},po=(e,t)=>{typeof console<"u"&&typeof console.log=="function"&&(t?console.log(`[stroid] ${e}`,t):console.log(`[stroid] ${e}`));},Ee=(e,t)=>{if((_().logSink.critical??fo)(e,t),_().assertRuntime)throw new Error(e)},E=(e,t)=>{if(!$e)return;if((_().logSink.warn??Lt)(e,t),_().assertRuntime)throw new Error(e)},U=(e,t)=>{if((_().logSink.warn??Lt)(e,t),_().assertRuntime)throw new Error(e)};var oe=(e,t)=>{if(!$e)return;(_().logSink.log??po)(e,t);};var Bt=()=>"Date detected; stored as ISO string. Use new Date(value) when reading.",Ut=()=>"Map detected; converting to plain object.",qt=()=>"Set detected; converting to array.";var he=new Set(["__proto__","constructor","prototype"]),Ze=(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 s=r.error,a=s?.details?.[0]?.message||s?.message||r.message||e.errors;if(a)return {ok:!1,error:a};if(s)return {ok:!1,error:s}}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 et=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,yo=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=yo(e);if(r)throw new Error(`${r} values are not supported`);let o=et(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()&&E(Bt()),e.toISOString();if(o==="map"){if(t.has(e))throw new Error("Circular reference detected during sanitize");t.add(e),A()&&E(Ut());let s={};for(let[a,c]of e){if(typeof a!="string")throw new Error("Map keys must be strings to remain JSON-safe");s[String(a)]=Fe(c,t);}return s}if(o==="set"){if(t.has(e))throw new Error("Circular reference detected during sanitize");return t.add(e),A()&&E(qt()),Array.from(e,s=>Fe(s,t))}if(o==="object"){if(t.has(e))throw new Error("Circular reference detected during sanitize");t.add(e);let s={},a=Object.getOwnPropertyDescriptors(e);for(let[c,l]of Object.entries(a))if(l.enumerable&&!he.has(c)){if("get"in l||"set"in l)throw new Error(`Accessor properties are not supported during sanitize ("${c}")`);s[c]=Fe(l.value,t);}return s}if(o==="array"){if(t.has(e))throw new Error("Circular reference detected during sanitize");return t.add(e),e.map(s=>Fe(s,t))}return e},Se=e=>Fe(e,new WeakSet);var tt=null,mo=()=>{if(tt)return tt;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 tt=t,t},Kt=e=>{let t=mo(),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},ho=2166136261,So=2654435761,bo=1e5,ne=(e,t)=>{let r=t>>>0;e.h1=Math.imul(e.h1^r,2246822507),e.h2=Math.imul(e.h2^r,3266489909);},ce=(e,t)=>{ne(e,t.length);for(let r=0;r<t.length;r++)ne(e,t.charCodeAt(r));},V=(e,t)=>{ce(e,t);},Gt=(e,t)=>{if(Number.isNaN(t)){V(e,"NaN");return}if(!Number.isFinite(t)){V(e,t>0?"Infinity":"-Infinity");return}if(Object.is(t,-0)){V(e,"-0");return}let r=t|0;if(t===r){V(e,"int"),ne(e,r);return}V(e,"num"),ce(e,String(t));},be=(e,t)=>{if(e.nodes++>bo){V(e,"[max]");return}if(t===null){V(e,"null");return}let r=typeof t;if(r==="string"){V(e,"string"),ce(e,t);return}if(r==="number"){V(e,"number"),Gt(e,t);return}if(r==="boolean"){V(e,t?"true":"false");return}if(r==="undefined"){V(e,"undefined");return}if(r==="bigint"){V(e,"bigint"),ce(e,t.toString());return}if(r==="symbol"){V(e,"symbol");let g=t;ce(e,Symbol.keyFor(g)??g.description??String(g));return}if(r==="function"){V(e,"function"),ce(e,t.name||"anonymous");return}let o=t,s=e.seen.get(o);if(s!==void 0){V(e,"ref"),ne(e,s);return}let a=e.nextId++;if(e.seen.set(o,a),Array.isArray(o)){V(e,"array"),ne(e,o.length);for(let g=0;g<o.length;g++)Object.prototype.hasOwnProperty.call(o,g)?be(e,o[g]):V(e,"hole");return}if(o instanceof Date){V(e,"date"),Gt(e,o.getTime());return}if(o instanceof Map){V(e,"map"),ne(e,o.size),o.forEach((g,n)=>{be(e,n),be(e,g);});return}if(o instanceof Set){V(e,"set"),ne(e,o.size),o.forEach(g=>{be(e,g);});return}V(e,"object");let c=Object.getOwnPropertyDescriptors(o),l=[];Object.entries(c).forEach(([g,n])=>{n?.enumerable&&(he.has(g)||"get"in n||"set"in n||l.push([g,n]));}),ne(e,l.length);for(let[g,n]of l)ce(e,g),be(e,n.value);},ue=e=>{if(typeof e=="string")return Kt(JSON.stringify(e));let t={h1:ho,h2:So,seen:new WeakMap,nextId:1,nodes:0};be(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 wo=typeof globalThis<"u"&&typeof globalThis.structuredClone=="function",ot=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,s]of t)if(typeof s=="function"&&e instanceof s)return o;let r=globalThis.Node;return typeof r=="function"&&e instanceof r?"DOM Node":null},ko=e=>ot(e)===null,vo=e=>{let t=ot(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(vo(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 s=new Map;return t.set(e,s),e.forEach((a,c)=>{s.set(le(c,t),le(a,t));}),s}if(e instanceof Set){let s=new Set;return t.set(e,s),e.forEach(a=>{s.add(le(a,t));}),s}if(Array.isArray(e)){let s=[];return t.set(e,s),e.forEach((a,c)=>{s[c]=le(a,t);}),s}let r={};t.set(e,r);let o;try{o=Object.getOwnPropertyDescriptors(e);}catch(s){throw new Error(`deepClone failed to read object descriptors (possible Proxy or host object): ${s?.message??s}`)}return Object.entries(o).forEach(([s,a])=>{!a.enumerable||he.has(s)||"get"in a||"set"in a||(r[s]=le(a.value,t));}),r},K=e=>{if(wo)try{return structuredClone(e)}catch(t){if(!ko(e)){let r=ot(e)??"unknown";throw new Error(`deepClone failed: value is not structured-cloneable (${r}). Avoid storing this type in stroid state.`)}return E(`deepClone fell back to manual clone after structuredClone failed: ${t?.message??t}`),le(e)}return le(e)};var Ro=e=>{let t=new Uint8Array(e),r="";for(let o=0;o<t.length;o++)r+=t[o].toString(16).padStart(2,"0");return r},Mo=async e=>{if(typeof globalThis<"u"&&globalThis.crypto?.subtle){let t=typeof TextEncoder<"u"?new TextEncoder:null,r=t?t.encode(e):new Uint8Array(Buffer.from(e)),o=await globalThis.crypto.subtle.digest("SHA-256",r);return Ro(o)}try{let{createHash:t}=await import('crypto');return t("sha256").update(e).digest("hex")}catch{throw new Error("sha256 checksum is not supported in this environment")}},Oe=async(e,t,r=ue)=>e==="none"?null:e==="sha256"?Mo(t):r(t);var Yt=1e6,Jt=(e,t)=>{let r=e?.options?.migrations??{};if(Object.keys(r).length>0)return r;let o=t?.migrate;if(typeof o!="function")return r;let s=e?.version??1;return !Number.isFinite(s)||s<=1?r:{[s]:o}},nt=({name:e,persisted:t,reason:r,persistConfig:o,initialState:s,reportStoreError:a,sanitize:c,deepClone:l})=>{a(e,r);let g=o?.onMigrationFail??"reset";if(g==="keep")return {state:t,requiresValidation:true};if(typeof g=="function")try{let n=g(l(t));if(n!==void 0)return {state:c(n),requiresValidation:!0};a(e,`onMigrationFail for "${e}" returned undefined. Falling back to initial state.`);}catch(n){a(e,`onMigrationFail for "${e}" failed: ${n?.message??n}`);}return {state:l(s),requiresValidation:true}},Xt=e=>{let r=e.getMeta()?.options?.persist;return r?!!r.decryptAsync||r.checksum==="sha256"?Fo(e):Eo(e):false},Eo=({name:e,silent:t=false,getMeta:r,getInitialState:o,applyFeatureState:s,reportStoreError:a,warnMissingMaxSize:c,validate:l,log:g,hashState:n,deepClone:p,sanitize:i,shouldApply:u})=>{let h=r(),d=h?.options?.persist;if(!d)return false;let m=Jt(h,d),y=f=>Me({value:f,validate:l});try{let f=d.driver.getItem?.(d.key)??null;if(!f)return !1;if(typeof f!="string")return a(e,`Persist driver for "${e}" returned an async value during sync hydration. Provide async decrypt hooks or use an async-capable persist driver.`),!0;if(typeof d.maxSize!="number"&&f.length>Yt&&c?.(f.length),typeof d.maxSize=="number"&&f.length>d.maxSize)return a(e,`Persist payload for "${e}" exceeds maxSize (${f.length} > ${d.maxSize}). Skipping hydration.`),!0;let b=d.decrypt(f),k=JSON.parse(b),{v:C=1,checksum:M,data:R,updatedAt:j,updatedAtMs:O}=k||{};if(!R)return !0;let L=ie({value:typeof O=="number"?O:j,fallbackMs:Date.now(),onInvalid:()=>{g(`persist: corrupt updatedAt in stored data for "${e}". Using current time to prevent sync overwrite.`);}});if(d.checksum!=="none"&&M!==n(R))return a(e,`Checksum mismatch loading store "${e}". Falling back to initial state.`),(!u||u())&&s(p(o()),Date.now()),!0;let J=d.deserialize(R),X=h?.version??1,N=Qt({name:e,parsed:J,v:C,targetVersion:X,cfg:d,migrations:m,getInitialState:o,reportStoreError:a,sanitize:i,deepClone:p,validateState:y,safeUpdatedAt:L,applyFeatureState:s,shouldApply:u});return N.ok&&(J=N.state,(!u||u())&&(s(N.state,L),t||g(`Store "${e}" loaded from persistence`))),!0}catch(f){return a(e,`Could not load store "${e}" (${f?.message||f})`),true}},Fo=async({name:e,silent:t=false,getMeta:r,getInitialState:o,applyFeatureState:s,reportStoreError:a,warnMissingMaxSize:c,validate:l,log:g,hashState:n,deepClone:p,sanitize:i,shouldApply:u})=>{let h=r(),d=h?.options?.persist;if(!d)return false;let m=Jt(h,d),y=f=>Me({value:f,validate:l});try{let f=await Promise.resolve(d.driver.getItem?.(d.key)??null);if(!f)return !1;if(typeof d.maxSize!="number"&&typeof f=="string"&&f.length>Yt&&c?.(f.length),typeof d.maxSize=="number"&&typeof f=="string"&&f.length>d.maxSize)return a(e,`Persist payload for "${e}" exceeds maxSize (${f.length} > ${d.maxSize}). Skipping hydration.`),!0;let b=d.decryptAsync?await d.decryptAsync(f):d.decrypt(f),k=JSON.parse(b),{v:C=1,checksum:M,data:R,updatedAt:j,updatedAtMs:O}=k||{};if(!R)return !0;let L=ie({value:typeof O=="number"?O:j,fallbackMs:Date.now(),onInvalid:()=>{g(`persist: corrupt updatedAt in stored data for "${e}". Using current time to prevent sync overwrite.`);}}),J=await Oe(d.checksum,R,n);if(d.checksum!=="none"&&M!==J)return a(e,`Checksum mismatch loading store "${e}". Falling back to initial state.`),(!u||u())&&s(p(o()),Date.now()),!0;let X=d.deserialize(R),N=h?.version??1,w=Qt({name:e,parsed:X,v:C,targetVersion:N,cfg:d,migrations:m,getInitialState:o,reportStoreError:a,sanitize:i,deepClone:p,validateState:y,safeUpdatedAt:L,applyFeatureState:s,shouldApply:u});return w.ok&&(!u||u())&&(s(w.state,L),t||g(`Store "${e}" loaded from persistence`)),!0}catch(f){return a(e,`Could not load store "${e}" (${f?.message||f})`),true}},Qt=({name:e,parsed:t,v:r,targetVersion:o,cfg:s,migrations:a,getInitialState:c,reportStoreError:l,sanitize:g,deepClone:n,validateState:p,safeUpdatedAt:i,applyFeatureState:u,shouldApply:h})=>{if(r!==o){let m=Object.keys(a).map(b=>Number(b)).filter(b=>b>r&&b<=o).sort((b,k)=>b-k);if(m.length===0){let b=nt({name:e,persisted:t,reason:`No migration path from v${r} to v${o} for "${e}". Applying onMigrationFail strategy.`,persistConfig:s,initialState:c(),reportStoreError:l,sanitize:g,deepClone:n});if(t=b.state,!b.requiresValidation)return (!h||h())&&u(t,i),{ok:false,state:t}}let y=false,f=true;if(m.forEach(b=>{if(!y)try{let k=a[b](t);k!==void 0&&(t=k);}catch(k){let C=nt({name:e,persisted:t,reason:`Migration to v${b} failed for "${e}": ${k?.message||k}`,persistConfig:s,initialState:c(),reportStoreError:l,sanitize:g,deepClone:n});t=C.state,f=C.requiresValidation,y=true;}}),y){if(!f)return (!h||h())&&u(t,i),{ok:false,state:t};let b=p(t);return b.ok?{ok:true,state:b.value??t}:((!h||h())&&u(n(c()),Date.now()),{ok:false,state:t})}}let d=p(t);if(!d.ok){if(r!==o){let m=s?.onMigrationFail??"reset",y=nt({name:e,persisted:t,reason:`Persisted state for "${e}" failed schema after version change. Applying onMigrationFail strategy.`,persistConfig:s,initialState:c(),reportStoreError:l,sanitize:g,deepClone:n});if(!y.requiresValidation)return (!h||h())&&u(y.state,i),{ok:false,state:y.state};let f=p(y.state);if(f.ok)return m==="reset"&&l(e,`Persisted state for "${e}" failed schema; resetting to initial.`),{ok:true,state:f.value??y.state}}return l(e,`Persisted state for "${e}" failed schema; resetting to initial.`),(!h||h())&&u(n(c()),Date.now()),{ok:false,state:t}}return {ok:true,state:d.value??t}};var xe=(e,t,...r)=>{if(typeof e=="function")try{e(...r);}catch(o){let s=o?.message??o;U(`${t} callback threw: ${String(s)}`);}},we=(e,t={})=>{let{severity:r="warn",visibility:o="dev",onError:s}=t;if(xe(s,"onError",e),r==="critical"){o==="dev"&&E(e),Ee(e);return}if(o==="always"){U(e);return}E(e);};var Zt=({name:e,persistTimers:t,persistInFlight:r,persistSequence:o,persistWatchState:s,plaintextWarningsIssued:a,exists:c,getMeta:l,getStoreValue:g,reportStoreError:n,hashState:p},i=false)=>{let u=l()?.options?.persist;if(!u)return;let h=async y=>{let f=l();if(!(!f?.options?.persist||f.options.persist!==u||!c())&&!(y!==void 0&&o[e]!==y)){if(!u.allowPlaintext&&!a.has(e)&&qe(u.encrypt)&&qe(u.decrypt)){a.add(e);let b=`[stroid/persist] Store '${e}' is persisted in plaintext. Provide encrypt/decrypt hooks to protect sensitive data.`;xe(f.options.onError,`onError(${e})`,b),U(b);}try{let b=u.serialize(g()),k=await Oe(u.checksum,b,p),C=JSON.stringify({v:f.version??1,updatedAt:f.updatedAt,updatedAtMs:f.updatedAtMs??Date.now(),checksum:k,data:b}),M=u.encryptAsync?await u.encryptAsync(C):u.encrypt(C);if(y!==void 0&&o[e]!==y)return;await Promise.resolve(u.driver.setItem?.(u.key,M)),Tt(s,e,!0);}catch(b){n(e,`Could not persist store "${e}" (${b?.message||b})`);}}},d=y=>{let f=r[e],b=(o[e]??0)+1;o[e]=b;let C=(async()=>{f&&await f,!(y&&t[e]!==y)&&o[e]===b&&await h(b);})().finally(()=>{r[e]===C&&(r[e]=null),y&&t[e]===y&&delete t[e];});r[e]=C;};if(i){t[e]&&(clearTimeout(t[e]),delete t[e]),d();return}t[e]&&clearTimeout(t[e]);let m=setTimeout(()=>{t[e]===m&&d(m);},0);t[e]=m;},Te=e=>Zt(e),er=(e,t)=>Zt({...t,name:e},true);var tr=false,xo=typeof process<"u"&&typeof process.env?.NODE_ENV=="string"?process.env.NODE_ENV:void 0,To=typeof import.meta<"u"&&import.meta?.env?.MODE?import.meta.env.MODE:void 0,Vo=xo??To,jo=()=>Vo==="production",Po=()=>{let e={},t={},r=Object.create(null),o=Object.create(null),s=Object.create(null),a=new Set,c=new Set,l=Object.create(null),g=Object.create(null);return {api:{getPersistQueueDepth(n){return e[n]?1:0}},onStoreCreate(n){let p=n.options.persist;if(!p)return;if(!p.encryptAsync&&De(p.encrypt)&&De(p.decrypt)&&!p.allowPlaintext){let y=`[stroid/persist] Store "${n.name}" is configured for plaintext persistence. Provide encrypt/decrypt hooks or set persist.allowPlaintext: true to acknowledge.`;if(jo()){n.reportStoreError(y),n.options.persist=null;return}n.warn(y);}if(p.sensitiveData&&!p.encryptAsync&&De(p.encrypt)){n.reportStoreError(`persist: store "${n.name}" is marked sensitiveData but has no encrypt function. Plaintext data will be written to storage.`);return}let u=xt(n.name,p.encrypt,p.decrypt);if(!u.ok){n.reportStoreError(u.reason??`persist: encrypt/decrypt validation failed for store "${n.name}".`),n.options.persist=null;return}if(p.key){let y=o[p.key];y&&y!==n.name&&n.isDev()?n.warn(`Persist key collision: "${p.key}" already used by store "${y}". Store "${n.name}" will overwrite the same storage key.`):o[p.key]=n.name;}let h=n.getMeta()?.updateCount??0,d=()=>{let y=n.getMeta();return y?(y.updateCount??0)===h:false},m=Xt({name:n.name,silent:true,getMeta:n.getMeta,getInitialState:n.getInitialState,applyFeatureState:n.applyFeatureState,reportStoreError:(y,f)=>n.reportStoreError(f),warnMissingMaxSize:y=>{c.has(n.name)||(c.add(n.name),n.warnAlways(`[stroid/persist] Store "${n.name}" loaded ${y} bytes without a maxSize guard. Set persist.maxSize to prevent oversized payloads.`));},validate:n.validate,log:n.log,hashState:n.hashState,deepClone:n.deepClone,sanitize:n.sanitize,shouldApply:d});if(typeof m?.then=="function"?(l[n.name]={loading:true,pendingSave:false},m.then(y=>{let f=l[n.name];f&&(f.loading=false,(!y||f.pendingSave)&&Te({name:n.name,persistTimers:e,persistInFlight:t,persistSequence:r,persistWatchState:s,plaintextWarningsIssued:a,exists:()=>n.hasStore(),getMeta:n.getMeta,getStoreValue:n.getStoreValue,reportStoreError:(b,k)=>n.reportStoreError(k),hashState:n.hashState}),delete l[n.name]);}).catch(()=>{let y=l[n.name];y&&(y.loading=false,y.pendingSave&&Te({name:n.name,persistTimers:e,persistInFlight:t,persistSequence:r,persistWatchState:s,plaintextWarningsIssued:a,exists:()=>n.hasStore(),getMeta:n.getMeta,getStoreValue:n.getStoreValue,reportStoreError:(f,b)=>n.reportStoreError(b),hashState:n.hashState}),delete l[n.name]);})):m||Te({name:n.name,persistTimers:e,persistInFlight:t,persistSequence:r,persistWatchState:s,plaintextWarningsIssued:a,exists:()=>n.hasStore(),getMeta:n.getMeta,getStoreValue:n.getStoreValue,reportStoreError:(y,f)=>n.reportStoreError(f),hashState:n.hashState}),typeof window<"u"&&typeof window.addEventListener=="function"){g[n.name]?.();let y=window,f=false,b=()=>{f||(f=true,y.removeEventListener("pagehide",k),y.removeEventListener("beforeunload",k),delete g[n.name]);},k=()=>{b(),er(n.name,{name:n.name,persistTimers:e,persistInFlight:t,persistSequence:r,persistWatchState:s,plaintextWarningsIssued:a,exists:()=>n.hasStore(),getMeta:n.getMeta,getStoreValue:n.getStoreValue,reportStoreError:(C,M)=>n.reportStoreError(M),hashState:n.hashState});};y.addEventListener("pagehide",k,{once:true}),y.addEventListener("beforeunload",k,{once:true}),g[n.name]=b;}Vt({name:n.name,persistConfig:p,persistWatchState:s});},onStoreWrite(n){if(!n.options.persist)return;let p=l[n.name];if(p?.loading){p.pendingSave=true;return}Te({name:n.name,persistTimers:e,persistInFlight:t,persistSequence:r,persistWatchState:s,plaintextWarningsIssued:a,exists:()=>n.hasStore(),getMeta:n.getMeta,getStoreValue:n.getStoreValue,reportStoreError:(i,u)=>n.reportStoreError(u),hashState:n.hashState});},beforeStoreDelete(n){let p=n.options.persist;if(p){delete l[n.name],c.delete(n.name),e[n.name]&&(clearTimeout(e[n.name]),delete e[n.name]),t[n.name]=null,delete r[n.name];try{p.driver.removeItem?.(p.key);}catch{}p.key&&o[p.key]===n.name&&delete o[p.key],g[n.name]?.(),s[n.name]?.dispose(),delete g[n.name],delete s[n.name];}},resetAll(){Object.values(e).forEach(n=>clearTimeout(n)),Object.values(g).forEach(n=>{try{n();}catch{}}),Object.values(s).forEach(n=>{try{n.dispose();}catch{}}),Object.keys(e).forEach(n=>delete e[n]),Object.keys(t).forEach(n=>{t[n]=null,delete t[n];}),Object.keys(r).forEach(n=>delete r[n]),Object.keys(o).forEach(n=>delete o[n]),Object.keys(s).forEach(n=>delete s[n]),Object.keys(l).forEach(n=>delete l[n]),a.clear(),c.clear();}}},rr=()=>{tr||(tr=true,fe("persist",Po));};var or=({name:e,label:t,fn:r,args:o,reportIssue:s})=>{if(typeof r=="function")try{r(...o);}catch(a){let c=`${t} for "${e}" failed: ${a?.message??a}`;s(c,"always");}};D("computed.order-resolver",()=>{},105);var ir=()=>me(ye(ge));var st=()=>ir().computedEntries,ar=()=>ir().computedDependents;var cr=e=>Object.prototype.hasOwnProperty.call(st(),e);var it=e=>{let t=st()[e];if(!t)return null;let r=ar()[e];return {deps:[...t.deps],dependents:r?[...r]:[]}};var Ao=new Set;var $o=()=>{Ao.clear();};D("ssr.warnings",$o,60);var ur=(e,t,r={})=>{we(t,{...r,onError:$[e]?.options?.onError});};var lr=(e,t,r="dev")=>{ur(e,t,{severity:"warn",visibility:r});};var at=(e,t)=>ur(e,t,{severity:"critical",visibility:"always"});var dr=new WeakMap,fr=new WeakMap;var ze=e=>{let t=dr.get(e);return t||(t=new Map,dr.set(e,t)),t},pr=e=>{let t=fr.get(e);return t||(t=new Map,fr.set(e,t)),t};new Proxy(new Map,{get:(e,t)=>{let r=ze(z());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)=>(ze(z())[t]=r,true)});var Oo=(e,t)=>{let r=new Set,o=$[e]?.options?.onError;return typeof o=="function"&&r.add(o),r},gr=(e,t,r,o)=>{if(!r)return {ok:true,value:t};let s=Oo(e),a=(l,g)=>{s.forEach(n=>xe(n,`onError(${e})`,l)),g==="critical"?Ee(l):E(l);};if(typeof r=="function")try{let l=r(t);return l===!1?(a(`Validation blocked update for "${e}"`,"warn"),{ok:!1}):{ok:!0,value:l===!0?t:l}}catch(l){return a(`Validation for "${e}" failed: ${l?.message??l}`,"critical"),{ok:false}}let c=Ze(r,t);return c.ok?{ok:true,value:c.data??t}:(a(`Validation failed for "${e}": ${c.error}`,"critical"),{ok:false})};var ct=e=>{let t=z();ze(t).delete(e),pr(t).delete(e);},No=()=>{let e=z();ze(e).clear(),pr(e).clear();};D("validation.path-cache",No,50);yr(ct);var vr=new Map;var je=(e,t,r)=>{let o=vr.get(e);!o||o.size===0||o.forEach(s=>{try{s(t,r);}catch(a){typeof console<"u"&&console.warn&&console.warn(`[stroid] lifecycle hook "${e}" failed:`,a);}});};var Io=()=>{};D("write-context.runner",Io,121);var Wo=()=>{let e=z().notify;e.pendingNotifications.clear(),e.pendingBuffer.length=0,e.orderedNames.length=0,e.notifyScheduled=false,e.batchDepth=0;};D("notify.reset",Wo,40);var Ho=()=>z().computedCleanups,Mr=new WeakMap;var Lo=e=>{let t=Mr.get(e);return t||(t=new Map,Mr.set(e,t)),t};var Er=e=>{let t=Ho(),r=t.get(e);if(!r){A()&&E(`deleteComputed("${e}") -- not found`);return}r(),t.delete(e);};var Fr=(e,t=z())=>Lo(t).get(e)?.autoDispose===true;var xr=e=>{let t=e.stores,r=e.subscribers,o=e.initialStates,s=e.initialFactories,a=e.metaEntries,c=e.snapshotCache,l=e.featureRuntimes,g=e.deletingStores,n=(m,y)=>{we(y,{onError:a[m]?.options?.onError,severity:"warn",visibility:"dev"});},p=({name:m,prev:y,options:f,initialState:b,getMeta:k,getStoreValue:C,hasStore:M})=>({name:m,options:f,prev:y,getMeta:k,getStoreValue:C,getAllStores:()=>t,getInitialState:()=>b,hasStore:M,setStoreValue:()=>{},applyFeatureState:()=>{},notify:()=>{},reportStoreError:R=>{we(R,{onError:f.onError,severity:"warn",visibility:"dev"});},warn:E,warnAlways:U,log:oe,hashState:ue,deepClone:K,sanitize:Se,validate:()=>({ok:true,value:y}),isDev:A}),i=({name:m,prev:y,options:f,initialState:b,phase:k})=>{let C=p({name:m,prev:y,options:f,initialState:b,getMeta:()=>a[m],getStoreValue:()=>t[m],hasStore:()=>ae(e,m)}),M=p({name:m,prev:y,options:f,initialState:b,getMeta:()=>{},getStoreValue:()=>y,hasStore:()=>false});pe().forEach(R=>{let j=l.get(R);k==="before"?j?.beforeStoreDelete?.(C):j?.afterStoreDelete?.(M);});},u=m=>{if(!ae(e,m))return;let y=t[m],f=a[m].options,b=o[m],k=r[m];g.add(m);try{k?.forEach(R=>{try{R(null);}catch(j){E(`Subscriber for "${m}" threw during delete: ${j?.message??j}`);}}),or({name:m,label:"onDelete",fn:f.onDelete,args:[y],reportIssue:(R,j)=>{we(R,{onError:f.onError,severity:"warn",visibility:j});}}),i({name:m,prev:y,options:f,initialState:b,phase:"before"}),delete t[m],delete r[m],delete o[m],delete s[m],delete a[m],delete c[m],cr(m)&&Er(m);let M=e.computedDependents[m];if(M)for(let R of [...M]){let j=it(R);if(j&&Fr(R,e)&&j.deps.every(O=>!ae(e,O))){u(R);continue}E(`[stroid] source store "${m}" was deleted. Computed store "${R}" depends on it and will return stale data. Call deleteComputed("${R}") to clean up.`);}i({name:m,prev:y,options:f,initialState:b,phase:"after"}),je("afterStoreDelete",m,{type:"afterStoreDelete",prev:y}),Je(e,{type:"deleted",name:m}),oe(`Store "${m}" deleted`);}finally{g.delete(m);}};return {deleteExistingStore:u,clearAllStores:()=>{let m=[],f=0,b=Number.POSITIVE_INFINITY;for(;f<20;){let C=Object.keys(t);if(C.length===0)break;C.forEach(R=>{ae(e,R)&&(u(R),m.push(R));}),f+=1;let M=Object.keys(t).length;if(M===0||M>=b)break;b=M;}let k=Object.keys(t).length;return k>0?E(`clearAllStores stopped after ${f} pass${f===1?"":"es"}; ${k} store(s) still registered (likely recreated during deletion).`):oe(`All stores cleared (${m.length} stores removed)`),m},clearStores:m=>{let y=Object.keys(t).filter(f=>m?m.endsWith("*")?f.startsWith(m.slice(0,-1)):f===m:true);return y.forEach(f=>u(f)),y},reportStoreError:n}};var bt=ge,Vr=ye(bt),jr=null,q=()=>{let e=me(Vr);return Ke(e),e};var z=()=>q();function yr(e){jr=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}}}),Bo=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 s=o[r];return typeof s=="function"?s.bind(o):s},set:(t,r,o)=>(e()[r]=o,true)}),Uo=e=>new Proxy({},{get:(t,r)=>{let o=e(),s=o[r];return typeof s=="function"?s.bind(o):s},set:(t,r,o)=>(e()[r]=o,true)}),Ie=ke(()=>q().stores);ke(()=>q().subscribers);var Pr=ke(()=>q().initialStates);ke(()=>q().initialFactories);var $=ke(()=>q().metaEntries);ke(()=>q().snapshotCache);var te=Bo(()=>q().featureRuntimes),Tr=new WeakMap,qo=e=>{let t=Tr.get(e);return t||(t=xr(e),Tr.set(e,t)),t};Uo(()=>qo(q()));var Go=e=>{let t=te.get(e);if(t)return t;let r=Pe(e);if(!r)return;let o=r();return te.set(e,o),o},wt=()=>{pe().forEach(e=>{Go(e);});};Ft((e,t)=>{te.get(e)||te.set(e,t());});wt();var _e=(e,t)=>ae(q(),e);var We=(e,t,r=q())=>{r.stores[e]=t;},Dr=(e,t,r=Date.now())=>{We(e,t),$[e]&&($[e].updatedAt=new Date(r).toISOString(),$[e].updatedAtMs=r,$[e].lastCorrelationId=null,$[e].lastCorrelationAt=null,$[e].lastCorrelationAtMs=null,$[e].lastTraceContext=null,$[e].updateCount>=Number.MAX_SAFE_INTEGER?$[e].updateCount=0:$[e].updateCount+=1,jr?.(e));};var Ko=()=>{Ot(q());},Yo=()=>{te.forEach(e=>{try{e.resetAll?.();}catch{}}),te.clear();};D("features.reset",Yo,10);D("registries.clear",Ko,20);D("registry.default",()=>{bt=ge,Vr=ye(bt);},115);var Ar=new WeakMap,$r=e=>{let t=Ar.get(e);return t||(t=new Map,Ar.set(e,t)),t},Jo=()=>{$r(z()).clear();};D("features.contexts",Jo,100);var Xo=e=>{let t=z(),r=$r(t),o=r.get(e);if(o)return o;let s=$[e];if(!s)return E(`Internal feature context requested for "${e}" after metadata was cleared.`),null;let a={name:e,options:s.options,getMeta:()=>$[e],getStoreValue:()=>Ie[e],getAllStores:()=>Ie,getInitialState:()=>Pr[e],hasStore:()=>_e(e),setStoreValue:c=>{We(e,c);},applyFeatureState:(c,l)=>{Dr(e,c,l),ct(e);},notify:()=>{},reportStoreError:c=>{at(e,c);},warn:E,warnAlways:U,log:oe,hashState:ue,deepClone:K,sanitize:Se,validate:c=>gr(e,c,$[e]?.options?.validate),isDev:A};return r.set(e,a),a},Qo=(e,t)=>{let r=_();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 s=`Feature hook context missing fields for "${e}": ${o.join(", ")}.`;if(at(e,s),r.assertRuntime)throw new Error(s)};var kt=(e,t,r,o,s,a)=>{wt();let c=Xo(e);if(!c)return;c.notify=()=>s(e);let l=Object.assign(Object.create(c),{action:t,prev:r,next:o});Qo(e,l);let g=new Set(a);te.forEach((n,p)=>{if(!g.has(p))try{n.onStoreWrite?.(l);}catch(i){lr(e,`Feature "${String(p)}" onStoreWrite for "${e}" failed: ${i?.message??i}`,"always");}});};var Or=false,ve=1,Zo=e=>typeof e?.v=="number"?e.v:typeof e?.protocol=="number"?e.protocol:void 0,vt=new Set,Ct=new Set,Le=100,_r=e=>{if(!e)return null;if(e===true)return Le;if(typeof e!="object")return null;let t=e.loopGuard;if(t===false)return null;if(t===true||t===void 0)return Le;if(typeof t=="object"){let r=t.windowMs;return typeof r=="number"&&Number.isFinite(r)&&r>0?r:Le}return Le},en=e=>typeof TextEncoder<"u"?new TextEncoder().encode(e).length:typeof Buffer<"u"?Buffer.byteLength(e):e.length,tn=({incoming:e,accepted:t})=>{let r=t?.clock??0,o=typeof e.clock=="number"?e.clock:0;if(o!==r)return o-r;let s=e.source??"",a=t?.source??"";return s===a?0:s.localeCompare(a,"en",{sensitivity:"variant"})},rn=e=>e?.updatedAtMs??ie({value:e?.updatedAt,fallbackMs:0}),on=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"},Nr=({name:e,syncChannels:t,instanceId:r,authToken:o,reportStoreError:s})=>{let a=t[e];if(a)try{let c={v:ve,protocol:ve,type:"sync-request",source:r,name:e,clock:0,requestedAt:Date.now()};o&&(c.token=o),a.postMessage(c);}catch(c){s(e,`Failed to request sync snapshot for "${e}": ${c?.message??c}`);}},nn=(e,t)=>(t[e]=(t[e]??0)+1,t[e]),sn=(e,t,r)=>(r[e]=Math.max(r[e]??0,t)+1,r[e]),an=({name:e,syncChannels:t,syncWindowCleanup:r,syncClocks:o,syncVersions:s})=>{t[e]?.close(),delete t[e],r[e]?.(),delete r[e],delete o[e],delete s[e];},cn=({syncChannels:e,syncWindowCleanup:t})=>{Object.values(t).forEach(r=>{try{r();}catch{}}),Object.values(e).forEach(r=>{try{r.close();}catch{}});},un=({name:e,syncOption:t,syncChannels:r,syncClocks:o,syncVersions:s,syncWindowCleanup:a,instanceId:c,getMeta:l,getAcceptedSyncVersion:g,getStoreValue:n,hasStoreEntry:p,notify:i,validate:u,reportStoreError:h,warn:d,setStoreValue:m,normalizeIncomingState:y,acceptIncomingSyncVersion:f,resolveSyncVersion:b,broadcastSync:k,markLoopGuard:C,hashState:M})=>{if(!t)return;if(typeof window>"u"||typeof BroadcastChannel>"u"){h(e,`Sync enabled for "${e}" but BroadcastChannel not available in this environment.`);return}let R=typeof t=="object"?t.policy:void 0,j=R==="insecure"||R!=="strict"&&typeof t=="object"&&t.insecure===true,O=typeof t=="object"&&typeof t.authToken=="string"&&t.authToken.length>0,L=typeof t=="object"&&typeof t.verify=="function",J=typeof t=="object"&&typeof t.sign=="function",X=R==="strict"||!A()&&R!=="insecure";if(X&&!j&&!O&&!L){h(e,`Sync for "${e}" requires authToken or verify in strict mode. Use sync: { policy: "insecure" } to acknowledge the risk.`);return}!X&&!j&&!O&&!L&&!vt.has(e)&&(vt.add(e),U(`Sync for "${e}" is unauthenticated. Any same-origin tab can forge sync messages. Provide sync.authToken or sync.verify to enforce authentication.`)),J&&!L&&!Ct.has(e)&&(Ct.add(e),d(`Sync for "${e}" is configured with "sign" but no "verify". "sign" has no effect unless incoming messages are verified.`));let N=typeof t=="object"?t.authToken:void 0,w=_r(t),T=false,F=typeof t=="object"&&t.channel?t.channel:`stroid_sync_${e}`;try{let S=new BroadcastChannel(F);if(r[e]=S,S.onmessage=W=>{let v=W.data;if(!v||v.source===c||v.name!==e||r[e]!==S||!p(e)||!l(e))return;if(!on(v)){h(e,`Sync message for "${e}" is malformed; ignoring.`);return}if(N&&v.token!==N){T||(h(e,`Sync message for "${e}" failed auth token verification; ignoring.`),T=!0);return}let I=Zo(v);if(I!==ve){h(e,`Sync protocol mismatch for "${e}". Expected v${ve} but received ${String(I??"unknown")}. Ignoring message.`);return}let B=v.type==="sync-state";if(B&&(typeof v.data>"u"||typeof v.clock!="number")){h(e,`Sync message for "${e}" is malformed; ignoring.`);return}if(typeof t=="object"&&typeof t.verify=="function"){let P=!1;try{P=!!t.verify(v);}catch(x){h(e,`Sync message verification failed for "${e}": ${x?.message??x}`);return}if(!P){h(e,`Sync message for "${e}" failed verification; ignoring.`);return}}let Q=typeof t=="object"&&t.checksum==="none"?"none":"hash";if(B&&Q!=="none"){let P=M(v.data);if(v.checksum!==P){h(e,`Sync checksum mismatch for "${e}". Expected ${String(P)}, got ${String(v.checksum)}. Ignoring message.`);return}}if(v.type==="sync-request"){k(e);return}let G=typeof t=="object"?t.conflictResolver:null;if(tn({incoming:{clock:v.clock,source:v.source},accepted:g(e)})<=0){let P=rn(l(e)),x=typeof v.updatedAt=="number"?v.updatedAt:Date.now();if(G){let Y=G({local:n(e),incoming:v.data,localUpdated:P,incomingUpdated:x});if(Y!==void 0){let H=y(e,Y);if(H===null)return;let Ce=n(e);m(e,H);let re=typeof t=="object"?t.resolveUpdatedAt:null,Re=re?re({localUpdated:P,incomingUpdated:x,now:Date.now()}):Math.max(Date.now(),P,x);b(e,Re,typeof v.clock=="number"?v.clock:0),kt(e,"sync",Ce,H,()=>i(e),["sync"]),w&&C(e,w),i(e),k(e);}}return}let Z=y(e,v.data);if(Z===null)return;let se=n(e);m(e,Z),f(e,typeof v.updatedAt=="number"?v.updatedAt:Date.now(),typeof v.clock=="number"?v.clock:0,typeof v.source=="string"?v.source:""),kt(e,"sync",se,Z,()=>i(e),["sync"]),w&&C(e,w),i(e);},typeof window<"u"&&typeof window.addEventListener=="function"){a[e]?.();let W=window,v=()=>{Nr({name:e,syncChannels:r,instanceId:c,authToken:N,reportStoreError:h});};W.addEventListener("focus",v),W.addEventListener("online",v),a[e]=()=>{W.removeEventListener("focus",v),W.removeEventListener("online",v);};}queueMicrotask(()=>{Nr({name:e,syncChannels:r,instanceId:c,authToken:N,reportStoreError:h});});}catch(S){d(`Failed to setup sync for "${e}": ${S?.message||S}`);}},Ir=({name:e,syncOption:t,syncChannels:r,syncClocks:o,instanceId:s,updatedAt:a,data:c,hashState:l,reportStoreError:g})=>{let n=r[e];if(n)try{let p=typeof t=="object"&&t.checksum==="none"?"none":"hash",i={v:ve,protocol:ve,type:"sync-state",source:s,name:e,clock:o[e]??0,updatedAt:ie({value:a,fallbackMs:Date.now()}),data:c,checksum:p==="hash"?l(c):null};if(typeof t=="object"&&t.authToken&&(i.token=t.authToken),typeof t=="object"&&typeof t.sign=="function")try{let d=t.sign(i);if(d&&typeof d.then=="function"){g(e,`Sync signer for "${e}" returned a Promise. "sign" must be synchronous.`);return}d!==void 0&&(i.auth=d);}catch(d){g(e,`Failed to sign sync payload for "${e}": ${d?.message??d}`);return}let u=typeof t=="object"&&typeof t.maxPayloadBytes=="number"?t.maxPayloadBytes:64*1024,h=en(JSON.stringify(i));if(h>u){g(e,`Sync payload for "${e}" exceeds ${u} bytes (${h} bytes). Skipping BroadcastChannel sync.`);return}try{n.postMessage(i);}catch(d){if(d&&typeof d=="object"&&d.name==="DataCloneError"){g(e,`Sync payload for "${e}" could not be cloned (DataCloneError). Remove non-serializable values or provide a custom serializer. Payload size ~${h} bytes.`);return}throw d}}catch(p){g(e,`Failed to broadcast sync for "${e}": ${p?.message??p}`);}},ln=()=>{let e=Object.create(null),t=Object.create(null),r=Object.create(null),o=Object.create(null),s=Object.create(null),a=new Set,c=`stroid_${Math.random().toString(16).slice(2)}`,l=(i,u)=>{r[i]={clock:t[i]??0,updatedAt:ie({value:u,fallbackMs:Date.now()}),source:c};},g=(i,u)=>{nn(i,t),l(i,u);},n=(i,u)=>{!u||!Number.isFinite(u)||(s[i]=Date.now()+u);},p=(i,u)=>{if(!u)return false;let h=s[i];return h?Date.now()>=h?(delete s[i],false):true:false};return {onStoreCreate(i){if(!i.options.sync)return;let u=i.options.sync,h=i.notify,d=typeof u=="object"?u.policy:void 0,m=d==="insecure"||d!=="strict"&&typeof u=="object"&&u.insecure===true,y=typeof u=="object"&&typeof u.authToken=="string"&&u.authToken.length>0,f=typeof u=="object"&&typeof u.verify=="function";if((d==="strict"||!i.isDev()&&d!=="insecure")&&u&&!m&&!y&&!f){i.reportStoreError(`Sync for "${i.name}" requires authToken or verify in strict mode. Use sync: { policy: "insecure" } to acknowledge the risk.`),i.options.sync=false;return}if(un({name:i.name,syncOption:u,syncChannels:e,syncClocks:t,syncVersions:r,syncWindowCleanup:o,instanceId:c,getMeta:i.getMeta,getAcceptedSyncVersion:k=>r[k],getStoreValue:k=>i.getStoreValue(),hasStoreEntry:()=>i.hasStore(),notify:()=>h(),validate:(k,C)=>i.validate(C),reportStoreError:(k,C)=>i.reportStoreError(C),warn:i.warn,setStoreValue:(k,C)=>i.setStoreValue(C),normalizeIncomingState:(k,C)=>{let M=Me({value:C,sanitize:i.sanitize,validate:i.validate,onSanitizeError:R=>{i.reportStoreError(`Sanitize failed for incoming sync "${k}": ${R?.message??R}`);}});return M.ok?M.value:null},acceptIncomingSyncVersion:(k,C,M,R)=>{i.applyFeatureState(i.getStoreValue(),C),t[i.name]=Math.max(t[i.name]??0,M),r[i.name]={clock:M,updatedAt:C,source:R};},resolveSyncVersion:(k,C,M)=>{i.applyFeatureState(i.getStoreValue(),C);let R=sn(i.name,M,t);return r[i.name]={clock:R,updatedAt:C,source:c},R},broadcastSync:()=>{let k=i.getMeta();k&&Ir({name:i.name,syncOption:i.options.sync,syncChannels:e,syncClocks:t,instanceId:c,updatedAt:k.updatedAtMs??k.updatedAt,data:i.getStoreValue(),hashState:i.hashState,reportStoreError:(C,M)=>i.reportStoreError(M)});},markLoopGuard:n,hashState:i.hashState}),e[i.name]){let k=i.getMeta();l(i.name,k?.updatedAtMs??k?.updatedAt??new Date().toISOString());}},onStoreWrite(i){if(!i.options.sync)return;let u=i.getMeta();if(!u)return;let h=_r(i.options.sync);if(p(i.name,h)){g(i.name,u.updatedAtMs??u.updatedAt),a.has(i.name)||(a.add(i.name),i.warn(`Sync broadcast for "${i.name}" suppressed by loopGuard to prevent feedback loops.`));return}g(i.name,u.updatedAtMs??u.updatedAt),Ir({name:i.name,syncOption:i.options.sync,syncChannels:e,syncClocks:t,instanceId:c,updatedAt:u.updatedAtMs??u.updatedAt,data:i.next,hashState:i.hashState,reportStoreError:(d,m)=>i.reportStoreError(m)});},beforeStoreDelete(i){an({name:i.name,syncChannels:e,syncWindowCleanup:o,syncClocks:t,syncVersions:r}),delete s[i.name],a.delete(i.name);},resetAll(){cn({syncChannels:e,syncWindowCleanup:o}),Object.keys(e).forEach(i=>delete e[i]),Object.keys(t).forEach(i=>delete t[i]),Object.keys(r).forEach(i=>delete r[i]),Object.keys(o).forEach(i=>delete o[i]),Object.keys(s).forEach(i=>delete s[i]),vt.clear(),Ct.clear(),a.clear();}}},zr=()=>{Or||(Or=true,fe("sync",ln));};var Wr=false,Hr=e=>{try{return typeof structuredClone=="function"?structuredClone(e):JSON.parse(JSON.stringify(e))}catch{return e}},dn=({name:e,useDevtools:t,existingDevtools:r,stores:o,warn:s})=>{if(!t||typeof window>"u")return r;let a=window.__REDUX_DEVTOOLS_EXTENSION__||window.__REDUX_DEVTOOLS_EXTENSION__;if(!a||typeof a.connect!="function")return s(`DevTools requested for "${e}" but Redux DevTools extension not found.`),r;if(r)return r;let c=a.connect({name:"stroid"});return c.init(o),c},Be=({data:e,redactor:t,deepClone:r})=>{if(typeof t=="function")try{return t(r(e))}catch{return e}return e},fn=(e,t)=>{if(typeof e!="object"||typeof t!="object"||e===null||t===null)return null;let r=e,o=t,s=[],a=[],c=[],l=new Set(Object.keys(r)),g=new Set(Object.keys(o));return g.forEach(n=>{l.has(n)?Object.is(r[n],o[n])||c.push(n):s.push(n);}),l.forEach(n=>{g.has(n)||a.push(n);}),{added:s,removed:a,changed:c}},Lr=({name:e,action:t,prev:r,next:o,history:s,historyLimit:a,applyRedactor:c,deepClone:l})=>{if(a===0)return;s[e]||(s[e]=[]);let g={ts:Date.now(),action:t,prev:l(c(r)),next:l(c(o)),diff:fn(r,o)};s[e].push(g),s[e].length>a&&s[e].splice(0,s[e].length-a);},Br=({name:e,action:t,force:r=false,devtools:o,enabled:s,stores:a,applyRedactor:c})=>{if(!(!o||!r&&!s))try{let l={...a,[e]:c(a[e])};o.send({type:`${e}/${t}`},l);}catch{}},pn=()=>{let e=Object.create(null),t;return {onStoreCreate(r){t=dn({name:r.name,useDevtools:!!r.options.devtools,existingDevtools:t,stores:r.getAllStores(),warn:r.warn}),Lr({name:r.name,action:"create",prev:null,next:r.getStoreValue(),history:e,historyLimit:r.options.historyLimit??50,applyRedactor:o=>Be({data:o,redactor:r.options.redactor,deepClone:r.deepClone}),deepClone:r.deepClone});},onStoreWrite(r){Lr({name:r.name,action:r.action,prev:r.prev,next:r.next,history:e,historyLimit:r.options.historyLimit??50,applyRedactor:o=>Be({data:o,redactor:r.options.redactor,deepClone:r.deepClone}),deepClone:r.deepClone}),Br({name:r.name,action:r.action,devtools:t,enabled:!!r.options.devtools,stores:r.getAllStores(),applyRedactor:o=>Be({data:o,redactor:r.options.redactor,deepClone:r.deepClone})});},afterStoreDelete(r){r.options.devtools&&Br({name:r.name,action:"delete",force:true,devtools:t,enabled:true,stores:r.getAllStores(),applyRedactor:o=>Be({data:o,redactor:r.options.redactor,deepClone:r.deepClone})}),delete e[r.name];},resetAll(){Object.keys(e).forEach(r=>{delete e[r];}),t=void 0;},api:{getHistory(r,o){if(!e[r])return [];let s=e[r];return o&&o>0?Hr(s.slice(-o)):Hr(s)},clearHistory(r){if(r){delete e[r];return}Object.keys(e).forEach(o=>{delete e[o];});}}}},Ur=()=>{Wr||(Wr=true,fe("devtools",pn));};var gn=()=>{rr();},yn=()=>{zr();},mn=()=>{Ur();},ka=()=>{gn(),yn(),mn();};export{ka as installAllFeatures,mn as installDevtools,gn as installPersist,yn as installSync};//# sourceMappingURL=install.js.map
2
2
  //# sourceMappingURL=install.js.map
package/dist/persist.js CHANGED
@@ -1,2 +1,2 @@
1
- var $=new Map,X=(e,t)=>{$.set(e,t);};var Q=e=>$.get(e),Z=()=>Array.from($.keys());var Me=typeof Symbol=="function"?Symbol.for("stroid.persist.defaultCrypto"):"__stroid_persist_defaultCrypto__",z=e=>!!e?.[Me],j=e=>{try{let t=`__stroid_plaintext_probe_${Math.random().toString(36).slice(2)}__`,n=`__stroid_plaintext_probe_${Math.random().toString(36).slice(2)}__`;return e(t)!==t?!1:e(n)===n}catch{return false}},ee=(e,t,n)=>{let o="__stroid_persist_roundtrip_probe__",i;try{i=t(o);}catch(g){return {ok:false,reason:`persist: encrypt failed for store "${e}" (${g?.message??g})`}}if(typeof i!="string")return {ok:false,reason:`persist: encrypt must return a string for store "${e}".`};let l;try{l=n(i);}catch(g){return {ok:false,reason:`persist: decrypt failed for store "${e}" (${g?.message??g})`}}return typeof l!="string"?{ok:false,reason:`persist: decrypt must return a string for store "${e}".`}:l!==o?{ok:false,reason:`persist: encrypt/decrypt must round-trip for store "${e}".`}:{ok:true}};var te=(e,t,n)=>{e[t]&&(e[t].lastPresent=n);},re=({name:e,persistConfig:t,persistWatchState:n})=>{let o=t?.onStorageCleared;if(!t||typeof o!="function"||typeof window>"u"||typeof window.addEventListener!="function")return;n[e]?.dispose();let i=window,l=()=>{try{return t.driver.getItem?.(t.key)!=null}catch{return false}},g=r=>{let u=n[e],k=l();if(u){if(!u.lastPresent||k){u.lastPresent=k;return}u.lastPresent=false,o({name:e,key:t.key,reason:r});}},y=r=>{if(r.key===null){g("clear");return}r.key===t.key&&r.newValue===null&&g("remove");},c=()=>{g("missing");};i.addEventListener("storage",y),i.addEventListener("focus",c),n[e]={lastPresent:l(),dispose:()=>{i.removeEventListener("storage",y),i.removeEventListener("focus",c);}};};var W=({value:e,sanitize:t,validate:n,onSanitizeError:o})=>{let i;if(t)try{i=t(e);}catch(g){return o?.(g),{ok:false}}else i=e;let l=n(i);return l.ok?{ok:true,value:l.value??i}:{ok:false}},H=({value:e,fallbackMs:t=Date.now(),onInvalid:n})=>{if(typeof e=="number")return Number.isFinite(e)?e:(n?.(),t);if(typeof e=="string"){let o=Date.parse(e);return Number.isFinite(o)?o:(n?.(),t)}return n?.(),t};var Ce=new Map,D=(e,t,n=0)=>{!e||typeof t!="function"||Ce.set(e,{name:e,order:n,fn:t});};var Ee=()=>new Map([["noSignal",new Set],["shape",new Set],["autoCreate",new Set],["mutableResult",new Set]]),ne=()=>({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:Ee(),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}});var L=new Map,oe=new WeakSet,Fe=e=>{oe.has(e)||(oe.add(e),Z().forEach(t=>{if(!e.featureRuntimes.get(t)){let n=Q(t);n&&e.featureRuntimes.set(t,n());}}));},Pe=typeof __STROID_REGISTRY_ID__<"u"&&__STROID_REGISTRY_ID__||typeof process<"u"&&process.env?.STROID_REGISTRY_ID||void 0,se,ie=e=>(se||Pe||e).replace(/\.ts(\?|$)/,".js$1"),Te=ie("stroid:default-registry");var Oe=()=>{se=void 0,L.clear();};D("registry.scope-override",Oe,110);var _e=()=>({pendingNotifications:new Set,pendingBuffer:[],orderedNames:[],notifyScheduled:false,batchDepth:0,flushId:0,isFlushing:false});var xe=()=>({depth:0,pending:[],stagedValues:new Map,snapshotCache:new Map,failed:false,error:void 0}),Ae=(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:xe(),async:ne(),notify:_e(),lifecycleListener:null};return Fe(t),t},je=e=>{let t=ie(e),n=L.get(t);if(n)return n;let o=Ae();return L.set(t,o),o};var v=[],Ve={run:(e,t)=>{v.push(e);try{return t()}finally{v.pop();}},get:()=>v.length>0?v[v.length-1]:null,enterWith:e=>{if(v.length>0){v[v.length-1]=e;return}v.push(e);}};var ae=e=>(Ve).get()||e||je(Te);var Ne={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}`));}},ue={logSink:Ne,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},B=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}),U=new WeakMap,ce=B(ue),Ie=e=>{let t=U.get(e);return t||(t=B(ce),U.set(e,t)),t};var q=()=>Ie(ae());var He=()=>{U=new WeakMap,ce=B(ue);};D("config.reset",He,90);typeof process<"u"&&typeof process.env?.NODE_ENV=="string"?process.env.NODE_ENV:void 0;typeof import.meta<"u"&&import.meta?.env?.MODE?import.meta.env.MODE:void 0;var Le=(e,t)=>{typeof console<"u"&&typeof console.warn=="function"&&(t?console.warn(`[stroid] ${e}`,t):console.warn(`[stroid] ${e}`));};var _=(e,t)=>{if((q().logSink.warn??Le)(e,t),q().assertRuntime)throw new Error(e)};var le=new Set(["__proto__","constructor","prototype"]);var Y=null,Ue=()=>{if(Y)return Y;let e,t=[];for(let n=0;n<256;n++){e=n;for(let o=0;o<8;o++)e=e&1?3988292384^e>>>1:e>>>1;t[n]=e>>>0;}return Y=t,t},fe=e=>{let t=Ue(),n=-1;for(let o=0;o<e.length;o++)n=n>>>0,n=n>>>8^t[(n^e.charCodeAt(o))&255];return (n^-1)>>>0},Be=2166136261,qe=2654435761,Ye=1e5,R=(e,t)=>{let n=t>>>0;e.h1=Math.imul(e.h1^n,2246822507),e.h2=Math.imul(e.h2^n,3266489909);},E=(e,t)=>{R(e,t.length);for(let n=0;n<t.length;n++)R(e,t.charCodeAt(n));},h=(e,t)=>{E(e,t);},de=(e,t)=>{if(Number.isNaN(t)){h(e,"NaN");return}if(!Number.isFinite(t)){h(e,t>0?"Infinity":"-Infinity");return}if(Object.is(t,-0)){h(e,"-0");return}let n=t|0;if(t===n){h(e,"int"),R(e,n);return}h(e,"num"),E(e,String(t));},F=(e,t)=>{if(e.nodes++>Ye){h(e,"[max]");return}if(t===null){h(e,"null");return}let n=typeof t;if(n==="string"){h(e,"string"),E(e,t);return}if(n==="number"){h(e,"number"),de(e,t);return}if(n==="boolean"){h(e,t?"true":"false");return}if(n==="undefined"){h(e,"undefined");return}if(n==="bigint"){h(e,"bigint"),E(e,t.toString());return}if(n==="symbol"){h(e,"symbol");let c=t;E(e,Symbol.keyFor(c)??c.description??String(c));return}if(n==="function"){h(e,"function"),E(e,t.name||"anonymous");return}let o=t,i=e.seen.get(o);if(i!==void 0){h(e,"ref"),R(e,i);return}let l=e.nextId++;if(e.seen.set(o,l),Array.isArray(o)){h(e,"array"),R(e,o.length);for(let c=0;c<o.length;c++)Object.prototype.hasOwnProperty.call(o,c)?F(e,o[c]):h(e,"hole");return}if(o instanceof Date){h(e,"date"),de(e,o.getTime());return}if(o instanceof Map){h(e,"map"),R(e,o.size),o.forEach((c,r)=>{F(e,r),F(e,c);});return}if(o instanceof Set){h(e,"set"),R(e,o.size),o.forEach(c=>{F(e,c);});return}h(e,"object");let g=Object.getOwnPropertyDescriptors(o),y=[];Object.entries(g).forEach(([c,r])=>{r?.enumerable&&(le.has(c)||"get"in r||"set"in r||y.push([c,r]));}),R(e,y.length);for(let[c,r]of y)E(e,c),F(e,r.value);},K=e=>{if(typeof e=="string")return fe(JSON.stringify(e));let t={h1:Be,h2:qe,seen:new WeakMap,nextId:1,nodes:0};F(t,e);let n=t.h1>>>0,o=t.h2>>>0;return n^=n>>>16,n=Math.imul(n,2246822507),n^=n>>>13,n=Math.imul(n,3266489909),n^=n>>>16,o^=o>>>16,o=Math.imul(o,668265261),o^=o>>>15,o=Math.imul(o,374761393),o^=o>>>16,(n&2097151)*4294967296+(o>>>0)};var Ge=e=>{let t=new Uint8Array(e),n="";for(let o=0;o<t.length;o++)n+=t[o].toString(16).padStart(2,"0");return n},Xe=async e=>{if(typeof globalThis<"u"&&globalThis.crypto?.subtle){let t=typeof TextEncoder<"u"?new TextEncoder:null,n=t?t.encode(e):new Uint8Array(Buffer.from(e)),o=await globalThis.crypto.subtle.digest("SHA-256",n);return Ge(o)}try{let{createHash:t}=await import('crypto');return t("sha256").update(e).digest("hex")}catch{throw new Error("sha256 checksum is not supported in this environment")}},V=async(e,t,n=K)=>e==="none"?null:e==="sha256"?Xe(t):n(t);var pe=1e6,ge=(e,t)=>{let n=e?.options?.migrations??{};if(Object.keys(n).length>0)return n;let o=t?.migrate;if(typeof o!="function")return n;let i=e?.version??1;return !Number.isFinite(i)||i<=1?n:{[i]:o}},J=({name:e,persisted:t,reason:n,persistConfig:o,initialState:i,reportStoreError:l,sanitize:g,deepClone:y})=>{l(e,n);let c=o?.onMigrationFail??"reset";if(c==="keep")return {state:t,requiresValidation:true};if(typeof c=="function")try{let r=c(y(t));if(r!==void 0)return {state:g(r),requiresValidation:!0};l(e,`onMigrationFail for "${e}" returned undefined. Falling back to initial state.`);}catch(r){l(e,`onMigrationFail for "${e}" failed: ${r?.message??r}`);}return {state:y(i),requiresValidation:true}},ye=e=>{let n=e.getMeta()?.options?.persist;return n?!!n.decryptAsync||n.checksum==="sha256"?Ze(e):Qe(e):false},Qe=({name:e,silent:t=false,getMeta:n,getInitialState:o,applyFeatureState:i,reportStoreError:l,warnMissingMaxSize:g,validate:y,log:c,hashState:r,deepClone:u,sanitize:k,shouldApply:p})=>{let m=n(),f=m?.options?.persist;if(!f)return false;let b=ge(m,f),a=s=>W({value:s,validate:y});try{let s=f.driver.getItem?.(f.key)??null;if(!s)return !1;if(typeof s!="string")return l(e,`Persist driver for "${e}" returned an async value during sync hydration. Provide async decrypt hooks or use an async-capable persist driver.`),!0;if(typeof f.maxSize!="number"&&s.length>pe&&g?.(s.length),typeof f.maxSize=="number"&&s.length>f.maxSize)return l(e,`Persist payload for "${e}" exceeds maxSize (${s.length} > ${f.maxSize}). Skipping hydration.`),!0;let d=f.decrypt(s),S=JSON.parse(d),{v:w=1,checksum:M,data:C,updatedAt:N,updatedAtMs:P}=S||{};if(!C)return !0;let T=H({value:typeof P=="number"?P:N,fallbackMs:Date.now(),onInvalid:()=>{c(`persist: corrupt updatedAt in stored data for "${e}". Using current time to prevent sync overwrite.`);}});if(f.checksum!=="none"&&M!==r(C))return l(e,`Checksum mismatch loading store "${e}". Falling back to initial state.`),(!p||p())&&i(u(o()),Date.now()),!0;let A=f.deserialize(C),I=m?.version??1,O=me({name:e,parsed:A,v:w,targetVersion:I,cfg:f,migrations:b,getInitialState:o,reportStoreError:l,sanitize:k,deepClone:u,validateState:a,safeUpdatedAt:T,applyFeatureState:i,shouldApply:p});return O.ok&&(A=O.state,(!p||p())&&(i(O.state,T),t||c(`Store "${e}" loaded from persistence`))),!0}catch(s){return l(e,`Could not load store "${e}" (${s?.message||s})`),true}},Ze=async({name:e,silent:t=false,getMeta:n,getInitialState:o,applyFeatureState:i,reportStoreError:l,warnMissingMaxSize:g,validate:y,log:c,hashState:r,deepClone:u,sanitize:k,shouldApply:p})=>{let m=n(),f=m?.options?.persist;if(!f)return false;let b=ge(m,f),a=s=>W({value:s,validate:y});try{let s=await Promise.resolve(f.driver.getItem?.(f.key)??null);if(!s)return !1;if(typeof f.maxSize!="number"&&typeof s=="string"&&s.length>pe&&g?.(s.length),typeof f.maxSize=="number"&&typeof s=="string"&&s.length>f.maxSize)return l(e,`Persist payload for "${e}" exceeds maxSize (${s.length} > ${f.maxSize}). Skipping hydration.`),!0;let d=f.decryptAsync?await f.decryptAsync(s):f.decrypt(s),S=JSON.parse(d),{v:w=1,checksum:M,data:C,updatedAt:N,updatedAtMs:P}=S||{};if(!C)return !0;let T=H({value:typeof P=="number"?P:N,fallbackMs:Date.now(),onInvalid:()=>{c(`persist: corrupt updatedAt in stored data for "${e}". Using current time to prevent sync overwrite.`);}}),A=await V(f.checksum,C,r);if(f.checksum!=="none"&&M!==A)return l(e,`Checksum mismatch loading store "${e}". Falling back to initial state.`),(!p||p())&&i(u(o()),Date.now()),!0;let I=f.deserialize(C),O=m?.version??1,G=me({name:e,parsed:I,v:w,targetVersion:O,cfg:f,migrations:b,getInitialState:o,reportStoreError:l,sanitize:k,deepClone:u,validateState:a,safeUpdatedAt:T,applyFeatureState:i,shouldApply:p});return G.ok&&(!p||p())&&(i(G.state,T),t||c(`Store "${e}" loaded from persistence`)),!0}catch(s){return l(e,`Could not load store "${e}" (${s?.message||s})`),true}},me=({name:e,parsed:t,v:n,targetVersion:o,cfg:i,migrations:l,getInitialState:g,reportStoreError:y,sanitize:c,deepClone:r,validateState:u,safeUpdatedAt:k,applyFeatureState:p,shouldApply:m})=>{if(n!==o){let b=Object.keys(l).map(d=>Number(d)).filter(d=>d>n&&d<=o).sort((d,S)=>d-S);if(b.length===0){let d=J({name:e,persisted:t,reason:`No migration path from v${n} to v${o} for "${e}". Applying onMigrationFail strategy.`,persistConfig:i,initialState:g(),reportStoreError:y,sanitize:c,deepClone:r});if(t=d.state,!d.requiresValidation)return (!m||m())&&p(t,k),{ok:false,state:t}}let a=false,s=true;if(b.forEach(d=>{if(!a)try{let S=l[d](t);S!==void 0&&(t=S);}catch(S){let w=J({name:e,persisted:t,reason:`Migration to v${d} failed for "${e}": ${S?.message||S}`,persistConfig:i,initialState:g(),reportStoreError:y,sanitize:c,deepClone:r});t=w.state,s=w.requiresValidation,a=true;}}),a){if(!s)return (!m||m())&&p(t,k),{ok:false,state:t};let d=u(t);return d.ok?{ok:true,state:d.value??t}:((!m||m())&&p(r(g()),Date.now()),{ok:false,state:t})}}let f=u(t);if(!f.ok){if(n!==o){let b=i?.onMigrationFail??"reset",a=J({name:e,persisted:t,reason:`Persisted state for "${e}" failed schema after version change. Applying onMigrationFail strategy.`,persistConfig:i,initialState:g(),reportStoreError:y,sanitize:c,deepClone:r});if(!a.requiresValidation)return (!m||m())&&p(a.state,k),{ok:false,state:a.state};let s=u(a.state);if(s.ok)return b==="reset"&&y(e,`Persisted state for "${e}" failed schema; resetting to initial.`),{ok:true,state:s.value??a.state}}return y(e,`Persisted state for "${e}" failed schema; resetting to initial.`),(!m||m())&&p(r(g()),Date.now()),{ok:false,state:t}}return {ok:true,state:f.value??t}};var Se=(e,t,...n)=>{if(typeof e=="function")try{e(...n);}catch(o){let i=o?.message??o;_(`${t} callback threw: ${String(i)}`);}};var he=({name:e,persistTimers:t,persistInFlight:n,persistSequence:o,persistWatchState:i,plaintextWarningsIssued:l,exists:g,getMeta:y,getStoreValue:c,reportStoreError:r,hashState:u},k=false)=>{let p=y()?.options?.persist;if(!p)return;let m=async a=>{let s=y();if(!(!s?.options?.persist||s.options.persist!==p||!g())&&!(a!==void 0&&o[e]!==a)){if(!p.allowPlaintext&&!l.has(e)&&z(p.encrypt)&&z(p.decrypt)){l.add(e);let d=`[stroid/persist] Store '${e}' is persisted in plaintext. Provide encrypt/decrypt hooks to protect sensitive data.`;Se(s.options.onError,`onError(${e})`,d),_(d);}try{let d=p.serialize(c()),S=await V(p.checksum,d,u),w=JSON.stringify({v:s.version??1,updatedAt:s.updatedAt,updatedAtMs:s.updatedAtMs??Date.now(),checksum:S,data:d}),M=p.encryptAsync?await p.encryptAsync(w):p.encrypt(w);if(a!==void 0&&o[e]!==a)return;await Promise.resolve(p.driver.setItem?.(p.key,M)),te(i,e,!0);}catch(d){r(e,`Could not persist store "${e}" (${d?.message||d})`);}}},f=a=>{let s=n[e],d=(o[e]??0)+1;o[e]=d;let w=(async()=>{s&&await s,!(a&&t[e]!==a)&&o[e]===d&&await m(d);})().finally(()=>{n[e]===w&&(n[e]=null),a&&t[e]===a&&delete t[e];});n[e]=w;};if(k){t[e]&&(clearTimeout(t[e]),delete t[e]),f();return}t[e]&&clearTimeout(t[e]);let b=setTimeout(()=>{t[e]===b&&f(b);},0);t[e]=b;},x=e=>he(e),be=(e,t)=>he({...t,name:e},true);var ke=false,et=typeof process<"u"&&typeof process.env?.NODE_ENV=="string"?process.env.NODE_ENV:void 0,tt=typeof import.meta<"u"&&import.meta?.env?.MODE?import.meta.env.MODE:void 0,rt=et??tt,nt=()=>rt==="production",ot=()=>{let e={},t={},n=Object.create(null),o=Object.create(null),i=Object.create(null),l=new Set,g=new Set,y=Object.create(null),c=Object.create(null);return {api:{getPersistQueueDepth(r){return e[r]?1:0}},onStoreCreate(r){let u=r.options.persist;if(!u)return;if(!u.encryptAsync&&j(u.encrypt)&&j(u.decrypt)&&!u.allowPlaintext){let a=`[stroid/persist] Store "${r.name}" is configured for plaintext persistence. Provide encrypt/decrypt hooks or set persist.allowPlaintext: true to acknowledge.`;if(nt()){r.reportStoreError(a),r.options.persist=null;return}r.warn(a);}if(u.sensitiveData&&!u.encryptAsync&&j(u.encrypt)){r.reportStoreError(`persist: store "${r.name}" is marked sensitiveData but has no encrypt function. Plaintext data will be written to storage.`);return}let p=ee(r.name,u.encrypt,u.decrypt);if(!p.ok){r.reportStoreError(p.reason??`persist: encrypt/decrypt validation failed for store "${r.name}".`),r.options.persist=null;return}if(u.key){let a=o[u.key];a&&a!==r.name&&r.isDev()?r.warn(`Persist key collision: "${u.key}" already used by store "${a}". Store "${r.name}" will overwrite the same storage key.`):o[u.key]=r.name;}let m=r.getMeta()?.updateCount??0,f=()=>{let a=r.getMeta();return a?(a.updateCount??0)===m:false},b=ye({name:r.name,silent:true,getMeta:r.getMeta,getInitialState:r.getInitialState,applyFeatureState:r.applyFeatureState,reportStoreError:(a,s)=>r.reportStoreError(s),warnMissingMaxSize:a=>{g.has(r.name)||(g.add(r.name),r.warnAlways(`[stroid/persist] Store "${r.name}" loaded ${a} bytes without a maxSize guard. Set persist.maxSize to prevent oversized payloads.`));},validate:r.validate,log:r.log,hashState:r.hashState,deepClone:r.deepClone,sanitize:r.sanitize,shouldApply:f});if(typeof b?.then=="function"?(y[r.name]={loading:true,pendingSave:false},b.then(a=>{let s=y[r.name];s&&(s.loading=false,(!a||s.pendingSave)&&x({name:r.name,persistTimers:e,persistInFlight:t,persistSequence:n,persistWatchState:i,plaintextWarningsIssued:l,exists:()=>r.hasStore(),getMeta:r.getMeta,getStoreValue:r.getStoreValue,reportStoreError:(d,S)=>r.reportStoreError(S),hashState:r.hashState}),delete y[r.name]);}).catch(()=>{let a=y[r.name];a&&(a.loading=false,a.pendingSave&&x({name:r.name,persistTimers:e,persistInFlight:t,persistSequence:n,persistWatchState:i,plaintextWarningsIssued:l,exists:()=>r.hasStore(),getMeta:r.getMeta,getStoreValue:r.getStoreValue,reportStoreError:(s,d)=>r.reportStoreError(d),hashState:r.hashState}),delete y[r.name]);})):b||x({name:r.name,persistTimers:e,persistInFlight:t,persistSequence:n,persistWatchState:i,plaintextWarningsIssued:l,exists:()=>r.hasStore(),getMeta:r.getMeta,getStoreValue:r.getStoreValue,reportStoreError:(a,s)=>r.reportStoreError(s),hashState:r.hashState}),typeof window<"u"&&typeof window.addEventListener=="function"){c[r.name]?.();let a=window,s=false,d=()=>{s||(s=true,a.removeEventListener("pagehide",S),a.removeEventListener("beforeunload",S),delete c[r.name]);},S=()=>{d(),be(r.name,{name:r.name,persistTimers:e,persistInFlight:t,persistSequence:n,persistWatchState:i,plaintextWarningsIssued:l,exists:()=>r.hasStore(),getMeta:r.getMeta,getStoreValue:r.getStoreValue,reportStoreError:(w,M)=>r.reportStoreError(M),hashState:r.hashState});};a.addEventListener("pagehide",S,{once:true}),a.addEventListener("beforeunload",S,{once:true}),c[r.name]=d;}re({name:r.name,persistConfig:u,persistWatchState:i});},onStoreWrite(r){if(!r.options.persist)return;let u=y[r.name];if(u?.loading){u.pendingSave=true;return}x({name:r.name,persistTimers:e,persistInFlight:t,persistSequence:n,persistWatchState:i,plaintextWarningsIssued:l,exists:()=>r.hasStore(),getMeta:r.getMeta,getStoreValue:r.getStoreValue,reportStoreError:(k,p)=>r.reportStoreError(p),hashState:r.hashState});},beforeStoreDelete(r){let u=r.options.persist;if(u){delete y[r.name],g.delete(r.name),e[r.name]&&(clearTimeout(e[r.name]),delete e[r.name]),t[r.name]=null,delete n[r.name];try{u.driver.removeItem?.(u.key);}catch{}u.key&&o[u.key]===r.name&&delete o[u.key],c[r.name]?.(),i[r.name]?.dispose(),delete c[r.name],delete i[r.name];}},resetAll(){Object.values(e).forEach(r=>clearTimeout(r)),Object.values(c).forEach(r=>{try{r();}catch{}}),Object.values(i).forEach(r=>{try{r.dispose();}catch{}}),Object.keys(e).forEach(r=>delete e[r]),Object.keys(t).forEach(r=>{t[r]=null,delete t[r];}),Object.keys(n).forEach(r=>delete n[r]),Object.keys(o).forEach(r=>delete o[r]),Object.keys(i).forEach(r=>delete i[r]),Object.keys(y).forEach(r=>delete y[r]),l.clear(),g.clear();}}},we=()=>{ke||(ke=true,X("persist",ot));};var ve=()=>{we();};ve();export{ve as installPersist};//# sourceMappingURL=persist.js.map
1
+ var $=new Map,X=(e,t)=>{$.set(e,t);};var Q=e=>$.get(e),Z=()=>Array.from($.keys());var Re=typeof Symbol=="function"?Symbol.for("stroid.persist.defaultCrypto"):"__stroid_persist_defaultCrypto__",z=e=>!!e?.[Re],j=e=>{try{let t=`__stroid_plaintext_probe_${Math.random().toString(36).slice(2)}__`,n=`__stroid_plaintext_probe_${Math.random().toString(36).slice(2)}__`;return e(t)!==t?!1:e(n)===n}catch{return false}},ee=(e,t,n)=>{let o="__stroid_persist_roundtrip_probe__",i;try{i=t(o);}catch(g){return {ok:false,reason:`persist: encrypt failed for store "${e}" (${g?.message??g})`}}if(typeof i!="string")return {ok:false,reason:`persist: encrypt must return a string for store "${e}".`};let l;try{l=n(i);}catch(g){return {ok:false,reason:`persist: decrypt failed for store "${e}" (${g?.message??g})`}}return typeof l!="string"?{ok:false,reason:`persist: decrypt must return a string for store "${e}".`}:l!==o?{ok:false,reason:`persist: encrypt/decrypt must round-trip for store "${e}".`}:{ok:true}};var te=(e,t,n)=>{e[t]&&(e[t].lastPresent=n);},re=({name:e,persistConfig:t,persistWatchState:n})=>{let o=t?.onStorageCleared;if(!t||typeof o!="function"||typeof window>"u"||typeof window.addEventListener!="function")return;n[e]?.dispose();let i=window,l=()=>{try{return t.driver.getItem?.(t.key)!=null}catch{return false}},g=r=>{let u=n[e],k=l();if(u){if(!u.lastPresent||k){u.lastPresent=k;return}u.lastPresent=false,o({name:e,key:t.key,reason:r});}},y=r=>{if(r.key===null){g("clear");return}r.key===t.key&&r.newValue===null&&g("remove");},c=()=>{g("missing");};i.addEventListener("storage",y),i.addEventListener("focus",c),n[e]={lastPresent:l(),dispose:()=>{i.removeEventListener("storage",y),i.removeEventListener("focus",c);}};};var W=({value:e,sanitize:t,validate:n,onSanitizeError:o})=>{let i;if(t)try{i=t(e);}catch(g){return o?.(g),{ok:false}}else i=e;let l=n(i);return l.ok?{ok:true,value:l.value??i}:{ok:false}},H=({value:e,fallbackMs:t=Date.now(),onInvalid:n})=>{if(typeof e=="number")return Number.isFinite(e)?e:(n?.(),t);if(typeof e=="string"){let o=Date.parse(e);return Number.isFinite(o)?o:(n?.(),t)}return n?.(),t};var Me=new Map,D=(e,t,n=0)=>{!e||typeof t!="function"||Me.set(e,{name:e,order:n,fn:t});};var Ce=()=>new Map([["noSignal",new Set],["shape",new Set],["autoCreate",new Set],["mutableResult",new Set]]),ne=()=>({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:Ce(),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}});var L=new Map,oe=new WeakSet,Ee=e=>{oe.has(e)||(oe.add(e),Z().forEach(t=>{if(!e.featureRuntimes.get(t)){let n=Q(t);n&&e.featureRuntimes.set(t,n());}}));},Fe=typeof __STROID_REGISTRY_ID__<"u"&&__STROID_REGISTRY_ID__||typeof process<"u"&&process.env?.STROID_REGISTRY_ID||void 0,se,ie=e=>(se||Fe||e).replace(/\.ts(\?|$)/,".js$1"),Pe=ie("stroid:default-registry");var Te=()=>{se=void 0,L.clear();};D("registry.scope-override",Te,110);var Oe=()=>({pendingNotifications:new Set,pendingBuffer:[],orderedNames:[],subscriberBuffer:[],notifyScheduled:false,batchDepth:0,flushId:0,isFlushing:false});var _e=()=>({depth:0,pending:[],stagedValues:new Map,snapshotCache:new Map,runtimePatches:[],failed:false,error:void 0}),xe=(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,lastRuntimePatches:[],transaction:_e(),async:ne(),notify:Oe(),lifecycleListener:null};return Ee(t),t},Ae=e=>{let t=ie(e),n=L.get(t);if(n)return n;let o=xe();return L.set(t,o),o};var v=[],De={run:(e,t)=>{v.push(e);try{return t()}finally{v.pop();}},get:()=>v.length>0?v[v.length-1]:null,enterWith:e=>{if(v.length>0){v[v.length-1]=e;return}v.push(e);}};var ae=e=>(De).get()||e||Ae(Pe);var Ve={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}`));}},ue={logSink:Ve,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},U=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}),B=new WeakMap,ce=U(ue),Ne=e=>{let t=B.get(e);return t||(t=U(ce),B.set(e,t)),t};var q=()=>Ne(ae());var We=()=>{B=new WeakMap,ce=U(ue);};D("config.reset",We,90);typeof process<"u"&&typeof process.env?.NODE_ENV=="string"?process.env.NODE_ENV:void 0;typeof import.meta<"u"&&import.meta?.env?.MODE?import.meta.env.MODE:void 0;var He=(e,t)=>{typeof console<"u"&&typeof console.warn=="function"&&(t?console.warn(`[stroid] ${e}`,t):console.warn(`[stroid] ${e}`));};var _=(e,t)=>{if((q().logSink.warn??He)(e,t),q().assertRuntime)throw new Error(e)};var le=new Set(["__proto__","constructor","prototype"]);var Y=null,Le=()=>{if(Y)return Y;let e,t=[];for(let n=0;n<256;n++){e=n;for(let o=0;o<8;o++)e=e&1?3988292384^e>>>1:e>>>1;t[n]=e>>>0;}return Y=t,t},fe=e=>{let t=Le(),n=-1;for(let o=0;o<e.length;o++)n=n>>>0,n=n>>>8^t[(n^e.charCodeAt(o))&255];return (n^-1)>>>0},Be=2166136261,Ue=2654435761,qe=1e5,R=(e,t)=>{let n=t>>>0;e.h1=Math.imul(e.h1^n,2246822507),e.h2=Math.imul(e.h2^n,3266489909);},E=(e,t)=>{R(e,t.length);for(let n=0;n<t.length;n++)R(e,t.charCodeAt(n));},h=(e,t)=>{E(e,t);},de=(e,t)=>{if(Number.isNaN(t)){h(e,"NaN");return}if(!Number.isFinite(t)){h(e,t>0?"Infinity":"-Infinity");return}if(Object.is(t,-0)){h(e,"-0");return}let n=t|0;if(t===n){h(e,"int"),R(e,n);return}h(e,"num"),E(e,String(t));},F=(e,t)=>{if(e.nodes++>qe){h(e,"[max]");return}if(t===null){h(e,"null");return}let n=typeof t;if(n==="string"){h(e,"string"),E(e,t);return}if(n==="number"){h(e,"number"),de(e,t);return}if(n==="boolean"){h(e,t?"true":"false");return}if(n==="undefined"){h(e,"undefined");return}if(n==="bigint"){h(e,"bigint"),E(e,t.toString());return}if(n==="symbol"){h(e,"symbol");let c=t;E(e,Symbol.keyFor(c)??c.description??String(c));return}if(n==="function"){h(e,"function"),E(e,t.name||"anonymous");return}let o=t,i=e.seen.get(o);if(i!==void 0){h(e,"ref"),R(e,i);return}let l=e.nextId++;if(e.seen.set(o,l),Array.isArray(o)){h(e,"array"),R(e,o.length);for(let c=0;c<o.length;c++)Object.prototype.hasOwnProperty.call(o,c)?F(e,o[c]):h(e,"hole");return}if(o instanceof Date){h(e,"date"),de(e,o.getTime());return}if(o instanceof Map){h(e,"map"),R(e,o.size),o.forEach((c,r)=>{F(e,r),F(e,c);});return}if(o instanceof Set){h(e,"set"),R(e,o.size),o.forEach(c=>{F(e,c);});return}h(e,"object");let g=Object.getOwnPropertyDescriptors(o),y=[];Object.entries(g).forEach(([c,r])=>{r?.enumerable&&(le.has(c)||"get"in r||"set"in r||y.push([c,r]));}),R(e,y.length);for(let[c,r]of y)E(e,c),F(e,r.value);},K=e=>{if(typeof e=="string")return fe(JSON.stringify(e));let t={h1:Be,h2:Ue,seen:new WeakMap,nextId:1,nodes:0};F(t,e);let n=t.h1>>>0,o=t.h2>>>0;return n^=n>>>16,n=Math.imul(n,2246822507),n^=n>>>13,n=Math.imul(n,3266489909),n^=n>>>16,o^=o>>>16,o=Math.imul(o,668265261),o^=o>>>15,o=Math.imul(o,374761393),o^=o>>>16,(n&2097151)*4294967296+(o>>>0)};var Je=e=>{let t=new Uint8Array(e),n="";for(let o=0;o<t.length;o++)n+=t[o].toString(16).padStart(2,"0");return n},Ge=async e=>{if(typeof globalThis<"u"&&globalThis.crypto?.subtle){let t=typeof TextEncoder<"u"?new TextEncoder:null,n=t?t.encode(e):new Uint8Array(Buffer.from(e)),o=await globalThis.crypto.subtle.digest("SHA-256",n);return Je(o)}try{let{createHash:t}=await import('crypto');return t("sha256").update(e).digest("hex")}catch{throw new Error("sha256 checksum is not supported in this environment")}},V=async(e,t,n=K)=>e==="none"?null:e==="sha256"?Ge(t):n(t);var pe=1e6,ge=(e,t)=>{let n=e?.options?.migrations??{};if(Object.keys(n).length>0)return n;let o=t?.migrate;if(typeof o!="function")return n;let i=e?.version??1;return !Number.isFinite(i)||i<=1?n:{[i]:o}},J=({name:e,persisted:t,reason:n,persistConfig:o,initialState:i,reportStoreError:l,sanitize:g,deepClone:y})=>{l(e,n);let c=o?.onMigrationFail??"reset";if(c==="keep")return {state:t,requiresValidation:true};if(typeof c=="function")try{let r=c(y(t));if(r!==void 0)return {state:g(r),requiresValidation:!0};l(e,`onMigrationFail for "${e}" returned undefined. Falling back to initial state.`);}catch(r){l(e,`onMigrationFail for "${e}" failed: ${r?.message??r}`);}return {state:y(i),requiresValidation:true}},ye=e=>{let n=e.getMeta()?.options?.persist;return n?!!n.decryptAsync||n.checksum==="sha256"?Qe(e):Xe(e):false},Xe=({name:e,silent:t=false,getMeta:n,getInitialState:o,applyFeatureState:i,reportStoreError:l,warnMissingMaxSize:g,validate:y,log:c,hashState:r,deepClone:u,sanitize:k,shouldApply:p})=>{let m=n(),f=m?.options?.persist;if(!f)return false;let b=ge(m,f),a=s=>W({value:s,validate:y});try{let s=f.driver.getItem?.(f.key)??null;if(!s)return !1;if(typeof s!="string")return l(e,`Persist driver for "${e}" returned an async value during sync hydration. Provide async decrypt hooks or use an async-capable persist driver.`),!0;if(typeof f.maxSize!="number"&&s.length>pe&&g?.(s.length),typeof f.maxSize=="number"&&s.length>f.maxSize)return l(e,`Persist payload for "${e}" exceeds maxSize (${s.length} > ${f.maxSize}). Skipping hydration.`),!0;let d=f.decrypt(s),S=JSON.parse(d),{v:w=1,checksum:M,data:C,updatedAt:N,updatedAtMs:P}=S||{};if(!C)return !0;let T=H({value:typeof P=="number"?P:N,fallbackMs:Date.now(),onInvalid:()=>{c(`persist: corrupt updatedAt in stored data for "${e}". Using current time to prevent sync overwrite.`);}});if(f.checksum!=="none"&&M!==r(C))return l(e,`Checksum mismatch loading store "${e}". Falling back to initial state.`),(!p||p())&&i(u(o()),Date.now()),!0;let A=f.deserialize(C),I=m?.version??1,O=me({name:e,parsed:A,v:w,targetVersion:I,cfg:f,migrations:b,getInitialState:o,reportStoreError:l,sanitize:k,deepClone:u,validateState:a,safeUpdatedAt:T,applyFeatureState:i,shouldApply:p});return O.ok&&(A=O.state,(!p||p())&&(i(O.state,T),t||c(`Store "${e}" loaded from persistence`))),!0}catch(s){return l(e,`Could not load store "${e}" (${s?.message||s})`),true}},Qe=async({name:e,silent:t=false,getMeta:n,getInitialState:o,applyFeatureState:i,reportStoreError:l,warnMissingMaxSize:g,validate:y,log:c,hashState:r,deepClone:u,sanitize:k,shouldApply:p})=>{let m=n(),f=m?.options?.persist;if(!f)return false;let b=ge(m,f),a=s=>W({value:s,validate:y});try{let s=await Promise.resolve(f.driver.getItem?.(f.key)??null);if(!s)return !1;if(typeof f.maxSize!="number"&&typeof s=="string"&&s.length>pe&&g?.(s.length),typeof f.maxSize=="number"&&typeof s=="string"&&s.length>f.maxSize)return l(e,`Persist payload for "${e}" exceeds maxSize (${s.length} > ${f.maxSize}). Skipping hydration.`),!0;let d=f.decryptAsync?await f.decryptAsync(s):f.decrypt(s),S=JSON.parse(d),{v:w=1,checksum:M,data:C,updatedAt:N,updatedAtMs:P}=S||{};if(!C)return !0;let T=H({value:typeof P=="number"?P:N,fallbackMs:Date.now(),onInvalid:()=>{c(`persist: corrupt updatedAt in stored data for "${e}". Using current time to prevent sync overwrite.`);}}),A=await V(f.checksum,C,r);if(f.checksum!=="none"&&M!==A)return l(e,`Checksum mismatch loading store "${e}". Falling back to initial state.`),(!p||p())&&i(u(o()),Date.now()),!0;let I=f.deserialize(C),O=m?.version??1,G=me({name:e,parsed:I,v:w,targetVersion:O,cfg:f,migrations:b,getInitialState:o,reportStoreError:l,sanitize:k,deepClone:u,validateState:a,safeUpdatedAt:T,applyFeatureState:i,shouldApply:p});return G.ok&&(!p||p())&&(i(G.state,T),t||c(`Store "${e}" loaded from persistence`)),!0}catch(s){return l(e,`Could not load store "${e}" (${s?.message||s})`),true}},me=({name:e,parsed:t,v:n,targetVersion:o,cfg:i,migrations:l,getInitialState:g,reportStoreError:y,sanitize:c,deepClone:r,validateState:u,safeUpdatedAt:k,applyFeatureState:p,shouldApply:m})=>{if(n!==o){let b=Object.keys(l).map(d=>Number(d)).filter(d=>d>n&&d<=o).sort((d,S)=>d-S);if(b.length===0){let d=J({name:e,persisted:t,reason:`No migration path from v${n} to v${o} for "${e}". Applying onMigrationFail strategy.`,persistConfig:i,initialState:g(),reportStoreError:y,sanitize:c,deepClone:r});if(t=d.state,!d.requiresValidation)return (!m||m())&&p(t,k),{ok:false,state:t}}let a=false,s=true;if(b.forEach(d=>{if(!a)try{let S=l[d](t);S!==void 0&&(t=S);}catch(S){let w=J({name:e,persisted:t,reason:`Migration to v${d} failed for "${e}": ${S?.message||S}`,persistConfig:i,initialState:g(),reportStoreError:y,sanitize:c,deepClone:r});t=w.state,s=w.requiresValidation,a=true;}}),a){if(!s)return (!m||m())&&p(t,k),{ok:false,state:t};let d=u(t);return d.ok?{ok:true,state:d.value??t}:((!m||m())&&p(r(g()),Date.now()),{ok:false,state:t})}}let f=u(t);if(!f.ok){if(n!==o){let b=i?.onMigrationFail??"reset",a=J({name:e,persisted:t,reason:`Persisted state for "${e}" failed schema after version change. Applying onMigrationFail strategy.`,persistConfig:i,initialState:g(),reportStoreError:y,sanitize:c,deepClone:r});if(!a.requiresValidation)return (!m||m())&&p(a.state,k),{ok:false,state:a.state};let s=u(a.state);if(s.ok)return b==="reset"&&y(e,`Persisted state for "${e}" failed schema; resetting to initial.`),{ok:true,state:s.value??a.state}}return y(e,`Persisted state for "${e}" failed schema; resetting to initial.`),(!m||m())&&p(r(g()),Date.now()),{ok:false,state:t}}return {ok:true,state:f.value??t}};var Se=(e,t,...n)=>{if(typeof e=="function")try{e(...n);}catch(o){let i=o?.message??o;_(`${t} callback threw: ${String(i)}`);}};var he=({name:e,persistTimers:t,persistInFlight:n,persistSequence:o,persistWatchState:i,plaintextWarningsIssued:l,exists:g,getMeta:y,getStoreValue:c,reportStoreError:r,hashState:u},k=false)=>{let p=y()?.options?.persist;if(!p)return;let m=async a=>{let s=y();if(!(!s?.options?.persist||s.options.persist!==p||!g())&&!(a!==void 0&&o[e]!==a)){if(!p.allowPlaintext&&!l.has(e)&&z(p.encrypt)&&z(p.decrypt)){l.add(e);let d=`[stroid/persist] Store '${e}' is persisted in plaintext. Provide encrypt/decrypt hooks to protect sensitive data.`;Se(s.options.onError,`onError(${e})`,d),_(d);}try{let d=p.serialize(c()),S=await V(p.checksum,d,u),w=JSON.stringify({v:s.version??1,updatedAt:s.updatedAt,updatedAtMs:s.updatedAtMs??Date.now(),checksum:S,data:d}),M=p.encryptAsync?await p.encryptAsync(w):p.encrypt(w);if(a!==void 0&&o[e]!==a)return;await Promise.resolve(p.driver.setItem?.(p.key,M)),te(i,e,!0);}catch(d){r(e,`Could not persist store "${e}" (${d?.message||d})`);}}},f=a=>{let s=n[e],d=(o[e]??0)+1;o[e]=d;let w=(async()=>{s&&await s,!(a&&t[e]!==a)&&o[e]===d&&await m(d);})().finally(()=>{n[e]===w&&(n[e]=null),a&&t[e]===a&&delete t[e];});n[e]=w;};if(k){t[e]&&(clearTimeout(t[e]),delete t[e]),f();return}t[e]&&clearTimeout(t[e]);let b=setTimeout(()=>{t[e]===b&&f(b);},0);t[e]=b;},x=e=>he(e),be=(e,t)=>he({...t,name:e},true);var ke=false,Ze=typeof process<"u"&&typeof process.env?.NODE_ENV=="string"?process.env.NODE_ENV:void 0,et=typeof import.meta<"u"&&import.meta?.env?.MODE?import.meta.env.MODE:void 0,tt=Ze??et,rt=()=>tt==="production",nt=()=>{let e={},t={},n=Object.create(null),o=Object.create(null),i=Object.create(null),l=new Set,g=new Set,y=Object.create(null),c=Object.create(null);return {api:{getPersistQueueDepth(r){return e[r]?1:0}},onStoreCreate(r){let u=r.options.persist;if(!u)return;if(!u.encryptAsync&&j(u.encrypt)&&j(u.decrypt)&&!u.allowPlaintext){let a=`[stroid/persist] Store "${r.name}" is configured for plaintext persistence. Provide encrypt/decrypt hooks or set persist.allowPlaintext: true to acknowledge.`;if(rt()){r.reportStoreError(a),r.options.persist=null;return}r.warn(a);}if(u.sensitiveData&&!u.encryptAsync&&j(u.encrypt)){r.reportStoreError(`persist: store "${r.name}" is marked sensitiveData but has no encrypt function. Plaintext data will be written to storage.`);return}let p=ee(r.name,u.encrypt,u.decrypt);if(!p.ok){r.reportStoreError(p.reason??`persist: encrypt/decrypt validation failed for store "${r.name}".`),r.options.persist=null;return}if(u.key){let a=o[u.key];a&&a!==r.name&&r.isDev()?r.warn(`Persist key collision: "${u.key}" already used by store "${a}". Store "${r.name}" will overwrite the same storage key.`):o[u.key]=r.name;}let m=r.getMeta()?.updateCount??0,f=()=>{let a=r.getMeta();return a?(a.updateCount??0)===m:false},b=ye({name:r.name,silent:true,getMeta:r.getMeta,getInitialState:r.getInitialState,applyFeatureState:r.applyFeatureState,reportStoreError:(a,s)=>r.reportStoreError(s),warnMissingMaxSize:a=>{g.has(r.name)||(g.add(r.name),r.warnAlways(`[stroid/persist] Store "${r.name}" loaded ${a} bytes without a maxSize guard. Set persist.maxSize to prevent oversized payloads.`));},validate:r.validate,log:r.log,hashState:r.hashState,deepClone:r.deepClone,sanitize:r.sanitize,shouldApply:f});if(typeof b?.then=="function"?(y[r.name]={loading:true,pendingSave:false},b.then(a=>{let s=y[r.name];s&&(s.loading=false,(!a||s.pendingSave)&&x({name:r.name,persistTimers:e,persistInFlight:t,persistSequence:n,persistWatchState:i,plaintextWarningsIssued:l,exists:()=>r.hasStore(),getMeta:r.getMeta,getStoreValue:r.getStoreValue,reportStoreError:(d,S)=>r.reportStoreError(S),hashState:r.hashState}),delete y[r.name]);}).catch(()=>{let a=y[r.name];a&&(a.loading=false,a.pendingSave&&x({name:r.name,persistTimers:e,persistInFlight:t,persistSequence:n,persistWatchState:i,plaintextWarningsIssued:l,exists:()=>r.hasStore(),getMeta:r.getMeta,getStoreValue:r.getStoreValue,reportStoreError:(s,d)=>r.reportStoreError(d),hashState:r.hashState}),delete y[r.name]);})):b||x({name:r.name,persistTimers:e,persistInFlight:t,persistSequence:n,persistWatchState:i,plaintextWarningsIssued:l,exists:()=>r.hasStore(),getMeta:r.getMeta,getStoreValue:r.getStoreValue,reportStoreError:(a,s)=>r.reportStoreError(s),hashState:r.hashState}),typeof window<"u"&&typeof window.addEventListener=="function"){c[r.name]?.();let a=window,s=false,d=()=>{s||(s=true,a.removeEventListener("pagehide",S),a.removeEventListener("beforeunload",S),delete c[r.name]);},S=()=>{d(),be(r.name,{name:r.name,persistTimers:e,persistInFlight:t,persistSequence:n,persistWatchState:i,plaintextWarningsIssued:l,exists:()=>r.hasStore(),getMeta:r.getMeta,getStoreValue:r.getStoreValue,reportStoreError:(w,M)=>r.reportStoreError(M),hashState:r.hashState});};a.addEventListener("pagehide",S,{once:true}),a.addEventListener("beforeunload",S,{once:true}),c[r.name]=d;}re({name:r.name,persistConfig:u,persistWatchState:i});},onStoreWrite(r){if(!r.options.persist)return;let u=y[r.name];if(u?.loading){u.pendingSave=true;return}x({name:r.name,persistTimers:e,persistInFlight:t,persistSequence:n,persistWatchState:i,plaintextWarningsIssued:l,exists:()=>r.hasStore(),getMeta:r.getMeta,getStoreValue:r.getStoreValue,reportStoreError:(k,p)=>r.reportStoreError(p),hashState:r.hashState});},beforeStoreDelete(r){let u=r.options.persist;if(u){delete y[r.name],g.delete(r.name),e[r.name]&&(clearTimeout(e[r.name]),delete e[r.name]),t[r.name]=null,delete n[r.name];try{u.driver.removeItem?.(u.key);}catch{}u.key&&o[u.key]===r.name&&delete o[u.key],c[r.name]?.(),i[r.name]?.dispose(),delete c[r.name],delete i[r.name];}},resetAll(){Object.values(e).forEach(r=>clearTimeout(r)),Object.values(c).forEach(r=>{try{r();}catch{}}),Object.values(i).forEach(r=>{try{r.dispose();}catch{}}),Object.keys(e).forEach(r=>delete e[r]),Object.keys(t).forEach(r=>{t[r]=null,delete t[r];}),Object.keys(n).forEach(r=>delete n[r]),Object.keys(o).forEach(r=>delete o[r]),Object.keys(i).forEach(r=>delete i[r]),Object.keys(y).forEach(r=>delete y[r]),l.clear(),g.clear();}}},we=()=>{ke||(ke=true,X("persist",nt));};var ot=()=>{we();};export{ot as installPersist};//# sourceMappingURL=persist.js.map
2
2
  //# sourceMappingURL=persist.js.map
package/dist/psr.d.ts ADDED
@@ -0,0 +1,38 @@
1
+ export { evaluateComputed, getComputedDescriptor, getStoreMeta, listStores } from './runtime-tools.js';
2
+ import { R as RuntimePatch } from './runtime-patch.js';
3
+ export { a as RuntimePatchMeta, b as RuntimePatchOp } from './runtime-patch.js';
4
+ import { S as StoreValue, a as StoreDefinition, b as StoreKey, W as WriteResult } from './types.js';
5
+ import { RuntimeGraph } from './computed-types.js';
6
+ export { ComputedClassification, ComputedDescriptor, RuntimeEdgeType, RuntimeGraphEdge, RuntimeGraphGranularity, RuntimeGraphNode, RuntimeNodeId, RuntimeNodeType } from './computed-types.js';
7
+ import './feature.js';
8
+ import './options.js';
9
+ import './utility.js';
10
+ import './async.js';
11
+ import './cache.js';
12
+ import './registry.js';
13
+
14
+ type StoreTarget = StoreDefinition<string, StoreValue> | StoreKey<string, StoreValue> | string;
15
+ type StoreListener = (value: StoreValue | null) => void;
16
+ type GovernanceMode = "full-governor" | "bounded-governor" | "observer";
17
+ type MutationAuthority = "exclusive" | "shared";
18
+ type CausalityBoundary = "none" | "async-boundary";
19
+ interface TimingContract {
20
+ simulationWindow: "pre-commit" | "pre-render" | "post-render";
21
+ executionModel: "sync" | "async-boundary";
22
+ effectScope: "in-pipeline" | "out-of-pipeline";
23
+ governanceMode: GovernanceMode;
24
+ mutationAuthority: MutationAuthority;
25
+ causalityBoundary: CausalityBoundary;
26
+ reasons: readonly string[];
27
+ }
28
+ declare const getStoreSnapshot: (target: StoreTarget) => StoreValue | null;
29
+ declare const getStoreSnapshotNoTrack: (target: StoreTarget) => StoreValue | null;
30
+ declare const subscribeStore: (target: StoreTarget, listener: StoreListener) => (() => void);
31
+ declare const hasStore: (target: StoreTarget) => boolean;
32
+ declare const applyStorePatch: (patch: RuntimePatch) => WriteResult;
33
+ declare const applyStorePatchesAtomic: (patches: readonly RuntimePatch[]) => WriteResult;
34
+ declare const getTimingContract: (target?: StoreTarget) => TimingContract;
35
+ declare const getComputedGraph: () => RuntimeGraph;
36
+ declare const getRuntimeGraph: () => RuntimeGraph;
37
+
38
+ export { type CausalityBoundary, type GovernanceMode, type MutationAuthority, RuntimeGraph, RuntimePatch, type StoreListener, type StoreTarget, type TimingContract, applyStorePatch, applyStorePatchesAtomic, getComputedGraph, getRuntimeGraph, getStoreSnapshot, getStoreSnapshotNoTrack, getTimingContract, hasStore, subscribeStore };
package/dist/psr.js ADDED
@@ -0,0 +1,19 @@
1
+ var Jo=new Map,F=(e,t,r=0)=>{!e||typeof t!="function"||Jo.set(e,{name:e,order:r,fn:t});};var yr=new Map;var ut=e=>yr.get(e),Me=()=>Array.from(yr.keys());var hr=()=>new Map([["noSignal",new Set],["shape",new Set],["autoCreate",new Set],["mutableResult",new Set]]),br=()=>({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:hr(),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}}),Rr=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(),hr().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 At=new Map,Cr=new WeakSet,It=e=>{Cr.has(e)||(Cr.add(e),Me().forEach(t=>{if(!e.featureRuntimes.get(t)){let r=ut(t);r&&e.featureRuntimes.set(t,r());}}));},Xo=typeof __STROID_REGISTRY_ID__<"u"&&__STROID_REGISTRY_ID__||typeof process<"u"&&process.env?.STROID_REGISTRY_ID||void 0,wr,Nt=e=>(wr||Xo||e).replace(/\.ts(\?|$)/,".js$1"),ae=Nt("stroid:default-registry");var Zo=()=>{wr=void 0,At.clear();};F("registry.scope-override",Zo,110);var en=()=>({pendingNotifications:new Set,pendingBuffer:[],orderedNames:[],subscriberBuffer:[],notifyScheduled:false,batchDepth:0,flushId:0,isFlushing:false}),tn=e=>{e.pendingNotifications.clear(),e.pendingBuffer.length=0,e.orderedNames.length=0,e.subscriberBuffer.length=0,e.notifyScheduled=false,e.batchDepth=0,e.flushId=0,e.isFlushing=false;},jt=()=>({depth:0,pending:[],stagedValues:new Map,snapshotCache:new Map,runtimePatches:[],failed:false,error:void 0}),rn=(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,lastRuntimePatches:[],transaction:jt(),async:br(),notify:en(),lifecycleListener:null};return It(t),t},ue=e=>{let t=Nt(e),r=At.get(t);if(r)return r;let o=rn();return At.set(t,o),o},re=(e,t)=>Object.prototype.hasOwnProperty.call(e.stores,t),xr=(e,t)=>e.deletingStores.has(t),kr=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.runtimePatches.length=0,e.transaction.failed=false,e.transaction.error=void 0,e.lastRuntimePatches.length=0,tn(e.notify),Rr(e.async),e.lifecycleListener=null;};var Vt=(e,t)=>{try{e.lifecycleListener?.(t);}catch{}};var _e=()=>null,te=[],Mr={run:(e,t)=>{te.push(e);try{return t()}finally{te.pop();}},get:()=>te.length>0?te[te.length-1]:null,enterWith:e=>{if(te.length>0){te[te.length-1]=e;return}te.push(e);}};var ct=(e,t)=>(Mr).run(e,t),B=e=>(Mr).get()||e||ue(ae);var nn={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}`));}},Tr={logSink:nn,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},Ot=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}),Dt=new WeakMap,Er=Ot(Tr),sn=e=>{let t=Dt.get(e);return t||(t=Ot(Er),Dt.set(e,t)),t};var v=()=>sn(B());var ln=()=>{Dt=new WeakMap,Er=Ot(Tr);};F("config.reset",ln,90);var Fr=()=>v().namespace;var dn=typeof process<"u"&&typeof process.env?.NODE_ENV=="string"?process.env.NODE_ENV:void 0,pn=typeof import.meta<"u"&&import.meta?.env?.MODE?import.meta.env.MODE:void 0,Pr=typeof globalThis<"u"&&typeof globalThis.__STROID_DEV__=="boolean"?globalThis.__STROID_DEV__:void 0,fn="production",gn=dn??pn??fn,ze=typeof Pr=="boolean"?Pr:gn!=="production",T=()=>ze,$t=(e,t)=>{typeof console<"u"&&typeof console.warn=="function"&&(t?console.warn(`[stroid] ${e}`,t):console.warn(`[stroid] ${e}`));},mn=(e,t)=>{typeof console<"u"&&typeof console.error=="function"&&(t?console.error(`[stroid] ${e}`,t):console.error(`[stroid] ${e}`));},yn=(e,t)=>{typeof console<"u"&&typeof console.log=="function"&&(t?console.log(`[stroid] ${e}`,t):console.log(`[stroid] ${e}`));},_=(e,t)=>{if((v().logSink.critical??mn)(e,t),v().assertRuntime)throw new Error(e)},S=(e,t)=>{if(!ze)return;if((v().logSink.warn??$t)(e,t),v().assertRuntime)throw new Error(e)},ce=(e,t)=>{if((v().logSink.warn??$t)(e,t),v().assertRuntime)throw new Error(e)},oe=(e,t)=>{if(ze&&(v().logSink.warn??$t)(e,t),_(e,t),v().assertRuntime)throw new Error(e)},K=(e,t)=>{if(!ze)return;(v().logSink.log??yn)(e,t);},Ar=()=>`Functions cannot be stored in stroid.
2
+ Store data only - handle functions outside the store.`,Ir=()=>`Map/Set detected. stroid converts these to plain objects.
3
+ Use arrays or plain objects for best results.`,Nr=()=>`Date object detected. stroid stores it as ISO string.
4
+ Use new Date(value) to convert back when reading.`,jr=()=>"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.",Or=(e,t,r)=>`Path depth of ${e} exceeded maximum of ${t}.
5
+ "${r.join(".")}"
6
+ This is a data design issue. Split into separate stores:
7
+ createStore("${r[0]}", ...) and createStore("${r[1]}", ...)`,$r=(e,t)=>`Deep nesting detected (${e} levels): "${t.join(".")}"
8
+ Consider splitting into separate stores for better readability.`;var Sn=128,hn=(e,t)=>Math.abs(e.length-t.length)>2?false:Math.max(e.length,t.length)<=Sn,bn=(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]},He=(e,t)=>{let r=t.find(o=>{let n=o.toLowerCase(),s=e.toLowerCase();return n.includes(s)||s.includes(n)||hn(n,s)&&bn(n,s)<=2});if(r){S(`Store "${e}" not found. Did you mean "${r}"?`);return}oe(`Store "${e}" not found.
9
+ Available stores: [${t.join(", ")}]
10
+ Call createStore("${e}", data) first.`);};var Y=new Set(["__proto__","constructor","prototype"]),_t=(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 le=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},lt=e=>{let t=le(e);return t==="function"?(oe(Ar()),false):t==="map"||t==="set"?(S(Ir()),true):(t==="date"&&S(Nr()),true)},Wt=(e,t)=>{let r=Wr(e);if(r)throw new Error(`${r} values are not supported`);let o=le(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&&!Wt(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||Y.has(s))return false;if("get"in i||"set"in i)throw new Error(`Accessor properties are not supported during sanitize ("${s}")`);if(!Wt(i.value,t))return false}return true}return true},zt=e=>Wt(e,new WeakSet),Be=(e,t)=>{let r=Wr(e);if(r)throw new Error(`${r} values are not supported`);let o=le(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 T()&&S(jr()),e.toISOString();if(o==="map"){if(t.has(e))throw new Error("Circular reference detected during sanitize");t.add(e),T()&&S(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)]=Be(i,t);}return n}if(o==="set"){if(t.has(e))throw new Error("Circular reference detected during sanitize");return t.add(e),T()&&S(Dr()),Array.from(e,n=>Be(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,a]of Object.entries(s))if(a.enumerable&&!Y.has(i)){if("get"in a||"set"in a)throw new Error(`Accessor properties are not supported during sanitize ("${i}")`);n[i]=Be(a.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=>Be(n,t))}return e},he=e=>Be(e,new WeakSet);var Ht=null,Rn=()=>{if(Ht)return Ht;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 Ht=t,t},zr=e=>{let t=Rn(),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},Cn=2166136261,wn=2654435761,xn=1e5,de=(e,t)=>{let r=t>>>0;e.h1=Math.imul(e.h1^r,2246822507),e.h2=Math.imul(e.h2^r,3266489909);},be=(e,t)=>{de(e,t.length);for(let r=0;r<t.length;r++)de(e,t.charCodeAt(r));},N=(e,t)=>{be(e,t);},_r=(e,t)=>{if(Number.isNaN(t)){N(e,"NaN");return}if(!Number.isFinite(t)){N(e,t>0?"Infinity":"-Infinity");return}if(Object.is(t,-0)){N(e,"-0");return}let r=t|0;if(t===r){N(e,"int"),de(e,r);return}N(e,"num"),be(e,String(t));},Te=(e,t)=>{if(e.nodes++>xn){N(e,"[max]");return}if(t===null){N(e,"null");return}let r=typeof t;if(r==="string"){N(e,"string"),be(e,t);return}if(r==="number"){N(e,"number"),_r(e,t);return}if(r==="boolean"){N(e,t?"true":"false");return}if(r==="undefined"){N(e,"undefined");return}if(r==="bigint"){N(e,"bigint"),be(e,t.toString());return}if(r==="symbol"){N(e,"symbol");let u=t;be(e,Symbol.keyFor(u)??u.description??String(u));return}if(r==="function"){N(e,"function"),be(e,t.name||"anonymous");return}let o=t,n=e.seen.get(o);if(n!==void 0){N(e,"ref"),de(e,n);return}let s=e.nextId++;if(e.seen.set(o,s),Array.isArray(o)){N(e,"array"),de(e,o.length);for(let u=0;u<o.length;u++)Object.prototype.hasOwnProperty.call(o,u)?Te(e,o[u]):N(e,"hole");return}if(o instanceof Date){N(e,"date"),_r(e,o.getTime());return}if(o instanceof Map){N(e,"map"),de(e,o.size),o.forEach((u,c)=>{Te(e,c),Te(e,u);});return}if(o instanceof Set){N(e,"set"),de(e,o.size),o.forEach(u=>{Te(e,u);});return}N(e,"object");let i=Object.getOwnPropertyDescriptors(o),a=[];Object.entries(i).forEach(([u,c])=>{c?.enumerable&&(Y.has(u)||"get"in c||"set"in c||a.push([u,c]));}),de(e,a.length);for(let[u,c]of a)be(e,u),Te(e,c.value);},Le=e=>{if(typeof e=="string")return zr(JSON.stringify(e));let t={h1:Cn,h2:wn,seen:new WeakMap,nextId:1,nodes:0};Te(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 kn=typeof globalThis<"u"&&typeof globalThis.structuredClone=="function",G=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&&(Y.has(o)||"get"in n||"set"in n||(t[o]=n.value));}),t},Bt=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=>Bt(e)===null,Mn=e=>{let t=Bt(e);if(t)throw new Error(`deepClone failed: value is not structured-cloneable (${t}). Avoid storing this type in stroid state.`)},Re=(e,t=new WeakMap)=>{if(Mn(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(Re(i,t),Re(s,t));}),n}if(e instanceof Set){let n=new Set;return t.set(e,n),e.forEach(s=>{n.add(Re(s,t));}),n}if(Array.isArray(e)){let n=[];return t.set(e,n),e.forEach((s,i)=>{n[i]=Re(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||Y.has(n)||"get"in s||"set"in s||(r[n]=Re(s.value,t));}),r},$=e=>{if(kn)try{return structuredClone(e)}catch(t){if(!vn(e)){let r=Bt(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}`),Re(e)}return Re(e)},Lt=(e,t)=>{if(Object.is(e,t))return true;if(!e||!t||typeof e!="object"||typeof t!="object")return false;let r=e,o=t,n=Object.keys(r),s=Object.keys(o);if(n.length!==s.length)return false;for(let i of n)if(!Object.prototype.hasOwnProperty.call(o,i)||!Object.is(r[i],o[i]))return false;return true};var Hr=10,Tn=5,En=e=>{let t=[],r="",o=false;for(let n of e){if(o){r+=n,o=false;continue}if(n==="\\"){o=true;continue}if(n==="."){t.push(r),r="";continue}r+=n;}return o&&(r+="\\"),t.push(r),t},Ce=e=>Array.isArray(e)?[...e]:typeof e=="string"&&!e.includes(".")?[e]:typeof e=="string"?En(e):[String(e)],Ue=e=>{let t=Ce(e),r=t.length;return r>Hr?(oe(Or(r,Hr,t)),false):(r>Tn&&S($r(r,t)),true)};var Ut=(e,t,r)=>{let o=Ce(t);if(o.length===0)return e;for(let s of o)if(Y.has(s))return _(`Blocked forbidden path segment "${String(s)}" in setStore path "${o.join(".")}".`),e;let n=(s,i)=>{let a=o[i],u=i===o.length-1;if(Array.isArray(s)){let c=Number(a);if(!Number.isInteger(c))return s;let l=[...s];return u?(l[c]=r,l):(l[c]=n(l[c],i+1),l)}if(s&&typeof s=="object"){if(Y.has(a))return _(`Blocked unsafe path segment "${String(a)}" while setting "${o.join(".")}".`),s;let c={...s};return u?(c[a]=r,c):(c[a]=n(c[a],i+1),c)}if(s==null&&!u){let c=Number.isInteger(Number(a)),l=c?[]:{};if(c){let m=l,d=Number(a);return m[d]=n(void 0,i+1),m}return l[a]=n(void 0,i+1),l}return u?r:s};return n(e,0)};var Br=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")},Ge=e=>(Br(e)&&(Object.isFrozen(e)||Object.freeze(e)),e),dt=e=>{if(!Br(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 Ee=Symbol("stroid.middleware.abort"),Lr=({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=$(t.next);for(let a of r){if(typeof a!="function")continue;let u,c=i;try{u=a({action:t.action,name:e,prev:t.prev,next:c,path:t.path,correlationId:t.correlationId,traceContext:t.traceContext});}catch(l){let m=`Middleware for "${e}" failed: ${l?.message??l}`;return o(m,"dev"),Ee}if(u&&typeof u.then=="function"){let l=`Middleware for "${e}" must be synchronous. Promise-returning middleware is not supported.`;return o(l,"dev"),Ee}u===void 0?(T()&&!s.has(a)&&(s.add(a),n(`Middleware for "${e}" returned undefined; treating as pass-through. Return the new state to override.`)),i=c):i=u;}return i},pt=({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 pe=(e,t,...r)=>{if(typeof e=="function")try{e(...r);}catch(o){let n=o?.message??o;ce(`${t} callback threw: ${String(n)}`);}},Fe=(e,t={})=>{let{severity:r="warn",visibility:o="dev",onError:n}=t;if(pe(n,"onError",e),r==="critical"){o==="dev"&&S(e),_(e);return}if(o==="always"){ce(e);return}S(e);};var ft=null,Ur=e=>{ft=e;},Gr=e=>ft?ft(e):[];F("computed.order-resolver",()=>{ft=null;},105);var Yr=()=>B(ue(ae));var J=()=>Yr().computedEntries,Jr=()=>Yr().computedDependents;var Qr=e=>Object.prototype.hasOwnProperty.call(J(),e);var Gt=e=>e==="asyncBoundary"?"async-boundary":"computed",Xr=(e,t,r=[])=>JSON.stringify([e,t,[...r]]),Fn=e=>e==="leaf"||e==="computed"||e==="async-boundary",Pn=e=>{try{let t=JSON.parse(e);if(!Array.isArray(t)||t.length!==3)return null;let[r,o,n]=t;return !Fn(r)||typeof o!="string"||!Array.isArray(n)||n.some(s=>typeof s!="string"&&typeof s!="number")?null:{type:r,storeId:o,path:[...n]}}catch{return null}},qr=(e,t)=>({id:Xr(e,t),storeId:t,path:[],type:e}),Zr=e=>{let t=J()[e];return qr(t?Gt(t.classification):"leaf",e)},eo=e=>{let t=J();if(t[e])return e;let r=Pn(e);if(!r||r.path.length!==0||r.type!=="computed"&&r.type!=="async-boundary")return null;let o=t[r.storeId];return o&&Gt(o.classification)===r.type?r.storeId:null},to=(e,t)=>{let r=Gt(t.classification);return {id:Xr(r,e),storeId:e,path:[],dependencies:t.deps.map(o=>Zr(o).id),nodeType:r,classification:t.classification,...t.classification==="asyncBoundary"?{asyncBoundary:true}:{}}},qt=e=>{let t=eo(e);if(!t)return null;let r=J()[t];return r?to(t,r):null},An=e=>{let t=J(),r=Jr(),o=new Set,n=[...e];for(;n.length>0;){let l=n.shift(),m=r[l];if(m)for(let d of m)o.has(d)||(o.add(d),n.push(d));}if(o.size===0)return [];let s=l=>{let m=t[l];if(m)for(let d of m.deps)t[d]&&(o.has(d)||(o.add(d),s(d)));};Array.from(o).forEach(l=>s(l));let i=new Map,a=new Map;for(let l of o){let m=t[l];if(!m)continue;let d=0;for(let g of m.deps)o.has(g)&&(d++,a.has(g)||a.set(g,[]),a.get(g).push(l));i.set(l,d);}let u=[];for(let[l,m]of i)m===0&&u.push(l);u.sort();let c=[];for(;u.length>0;){let l=u.shift();c.push(l);let m=a.get(l)??[];for(let d of m){let g=(i.get(d)??1)-1;if(i.set(d,g),g===0){let h=u.findIndex(f=>f>d);h===-1?u.push(d):u.splice(h,0,d);}}}return c};Ur(An);var gt=e=>{let t=J()[e];if(!t)return null;let r=Jr()[e];return {deps:[...t.deps],dependents:r?[...r]:[]}},Kt=()=>{let e=J(),t=new Map,r=new Map;for(let[s,i]of Object.entries(e)){let a=to(s,i);t.set(a.id,{id:a.id,storeId:a.storeId,path:a.path,type:a.nodeType}),i.deps.forEach((u,c)=>{let l=Zr(u),m=J()[u]?"computed-input":"leaf-input";t.set(l.id,l),r.set(`${l.id}|${a.id}|${c}`,{from:l.id,to:a.id,type:m});});}let o=Array.from(t.values()).sort((s,i)=>s.id.localeCompare(i.id)),n=Array.from(r.values()).sort((s,i)=>{let a=s.from.localeCompare(i.from);if(a!==0)return a;let u=s.to.localeCompare(i.to);return u!==0?u:s.type.localeCompare(i.type)});return {granularity:"store",nodes:o,edges:n}},In=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),Kr=(e,t)=>In(e,t)?e[t]:null,ro=(e,t,r)=>{if(r.memo.has(e))return r.memo.get(e);if(r.stack.has(e))throw new Error(`evaluateComputed("${e}") detected a computed cycle`);let o=J()[e];if(!o)throw new Error(`evaluateComputed("${e}") could not find a computed descriptor`);if(o.classification!=="deterministic")throw new Error(`evaluateComputed("${e}") only supports deterministic computed nodes`);r.stack.add(e);try{let n=o.deps.map(i=>{let a=J()[i];if(!a)return Kr(t,i);if(a.classification!=="deterministic")throw new Error(`evaluateComputed("${e}") cannot cross non-deterministic dependency "${i}"`);return ro(i,t,r)}),s;try{s=o.compute(...n);}catch{s=Kr(t,e);}return r.memo.set(e,s),s}finally{r.stack.delete(e);}},Yt=(e,t)=>{if(!t||typeof t!="object"||Array.isArray(t))throw new Error(`evaluateComputed("${e}") requires a snapshot record`);let r=eo(e);if(!r)throw new Error(`evaluateComputed("${e}") could not find a computed descriptor`);return ro(r,t,{memo:new Map,stack:new Set})};var Nn=new Set;var jn=()=>{Nn.clear();};F("ssr.warnings",jn,60);var oo=new Set,Vn=e=>{let t=Fr();return !t||e.includes("::")?e:(T()&&!oo.has(e)&&(oo.add(e),S(`Namespace "${t}" is active; treating store "${e}" as "${t}::${e}". Consider using namespace("${t}").create("...") to be explicit.`)),`${t}::${e}`)},Pe=e=>Vn(typeof e=="string"?e:e.name),no=e=>Q(e)&&!io(e)?true:(He(e,Object.keys(qe)),false),so=(e,t,r={})=>{Fe(t,{...r,onError:j[e]?.options?.onError});};var Ae=(e,t,r="dev")=>{so(e,t,{severity:"warn",visibility:r});};var ne=(e,t)=>so(e,t,{severity:"critical",visibility:"always"});var ao=new WeakMap,uo=new WeakMap,Dn=500,On="",Ke=e=>{let t=ao.get(e);return t||(t=new Map,ao.set(e,t)),t},Jt=e=>{let t=uo.get(e);return t||(t=new Map,uo.set(e,t)),t},$n=(e,t)=>{let r=Jt(e),o=r.get(t);return o||(o=new Map,r.set(t,o)),o},Wn=()=>{let e=v().pathCacheSize;return typeof e!="number"||!Number.isFinite(e)?Dn:Math.max(0,Math.floor(e))},co=(e,t,r,o)=>{if(o<=0){e.has(t)&&e.delete(t);return}for(e.has(t)&&e.delete(t),e.set(t,r);e.size>o;){let n=e.keys().next().value;if(!n)break;let s=e.get(n);e.delete(n),s?.node.verdicts&&(s.node.verdicts.delete(s.type),s.node.verdicts.size===0&&delete s.node.verdicts);}};new Proxy(new Map,{get:(e,t)=>{let r=Ke(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)=>(Ke(M())[t]=r,true)});var lo=(e,t,r,o)=>{let n=j[e];if(!n)return {ok:true};let s=Ce(r);if(s.length===0)return {ok:true};let i=le(o),a=Wn(),u=M(),c=Ke(u),l=$n(u,e),m=s.join(On),d=c.get(e);d||(d={children:new Map},c.set(e,d));let g=d;for(let C of s){let k=g.children.get(C);k||(k={children:new Map},g.children.set(C,k)),g=k;}let h=g.verdicts?.get(i);if(h){let C=`${m}|${i}`;return co(l,C,{node:g,type:i},a),h}let f=n.options?.pathCreate===true,b=t,R={ok:true};for(let C=0;C<s.length;C++){let k=s[C],V=C===s.length-1;if(b==null){let x=`Path "${s.join(".")}" is invalid for "${e}" - "${s.slice(0,C).join(".")||"root"}" is ${b===null?"null":"undefined"}.`;_(x),R={ok:false,reason:x};break}if(typeof b!="object"){let x=`Path "${s.join(".")}" is invalid for "${e}" - "${s.slice(0,C).join(".")||"root"}" is not an object.`;_(x),R={ok:false,reason:x};break}if(Array.isArray(b)){let x=Number(k);if(!Number.isInteger(x)||x<0){let D=`Path "${s.join(".")}" targets non-numeric index "${k}" on an array in "${e}".`;_(D),R={ok:false,reason:D};break}let A=b;if(x>=A.length){let D=`Path "${s.join(".")}" is invalid for "${e}" - index ${x} is out of bounds (length ${A.length}).`;_(D),R={ok:false,reason:D};break}if(V){let D=A[x];if(D!=null){let je=le(D);if(je!==i){let Ve=`Type mismatch setting "${s.join(".")}" on "${e}": expected ${je}, received ${i}.`;_(Ve),R={ok:false,reason:Ve};break}}R={ok:true};break}b=A[x];continue}if(!Object.prototype.hasOwnProperty.call(b,k)){if(f&&V){R={ok:true};break}let x=`Path "${s.join(".")}" is invalid for "${e}" - unknown key "${k}" at "${s.slice(0,C).join(".")||"root"}".`;_(x),R={ok:false,reason:x};break}if(V){let x=b[k];if(x!=null){let A=le(x);if(A!==i){let D=`Type mismatch setting "${s.join(".")}" on "${e}": expected ${A}, received ${i}.`;_(D),R={ok:false,reason:D};break}}R={ok:true};break}b=b[k];}g.verdicts||(g.verdicts=new Map);let w=g.verdicts.has(i);if(g.verdicts.set(i,R),!w){let C=`${m}|${i}`;co(l,C,{node:g,type:i},a);}return R},xe=(e,t,r,o)=>{try{return o?.reuseInput&&zt(t)?{ok:!0,value:t}:{ok:!0,value:he(t)}}catch(n){let s=`Sanitize failed for "${e}": ${n?.message??n}`;return pe(j[e]?.options?.onError,`onError(${e})`,s),pe(r,`onError(${e})`,s),S(s),{ok:false}}},_n=(e,t)=>{let r=new Set,o=j[e]?.options?.onError;return typeof o=="function"&&r.add(o),typeof t=="function"&&r.add(t),r},Qt=(e,t,r,o)=>{if(!r)return {ok:true,value:t};let n=_n(e,o),s=(a,u)=>{n.forEach(c=>pe(c,`onError(${e})`,a)),u==="critical"?_(a):S(a);};if(typeof r=="function")try{let a=r(t);return a===!1?(s(`Validation blocked update for "${e}"`,"warn"),{ok:!1}):{ok:!0,value:a===!0?t:a}}catch(a){return s(`Validation for "${e}" failed: ${a?.message??a}`,"critical"),{ok:false}}let i=_t(r,t);return i.ok?{ok:true,value:i.data??t}:(s(`Validation failed for "${e}": ${i.error}`,"critical"),{ok:false})},Ye=(e,t,r,o,n)=>{let s=xe(e,t,o,n);if(!s.ok)return {ok:false};let i=Qt(e,s.value,r,o);return i.ok?{ok:true,value:i.value}:{ok:false}},we=e=>{let t=M();Ke(t).delete(e),Jt(t).delete(e);},zn=()=>{let e=M();Ke(e).clear(),Jt(e).clear();};F("validation.path-cache",zn,50);fo(we);var po=(e,t=M())=>{if((E()?fe(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,a=Ye(e,s.value,i,t.metaEntries[e]?.options?.onError);if(!a.ok)return !1;if(E()){let u=a.value;yt(e,u),mt(()=>{X(e,u,t),t.initialStates[e]=$(u),delete t.initialFactories[e],we(e);});}else X(e,a.value,t),t.initialStates[e]=$(a.value),delete t.initialFactories[e],we(e);return !0}catch(n){return ne(e,`Lazy initializer for "${e}" failed: ${n?.message??n}`),false}};var go=new WeakMap,mo=e=>{let t=go.get(e);return t||(t=new Map,go.set(e,t)),t},Hn=()=>{mo(M()).clear();};F("features.contexts",Hn,100);var Bn=e=>{let t=M(),r=mo(t),o=r.get(e);if(o)return o;let n=j[e];if(!n)return S(`Internal feature context requested for "${e}" after metadata was cleared.`),null;let s={name:e,options:n.options,getMeta:()=>j[e],getStoreValue:()=>qe[e],getAllStores:()=>qe,getInitialState:()=>ho[e],hasStore:()=>Q(e),setStoreValue:i=>{X(e,i);},applyFeatureState:(i,a)=>{bo(e,i,a),we(e);},notify:()=>{},reportStoreError:i=>{ne(e,i);},warn:S,warnAlways:ce,log:K,hashState:Le,deepClone:$,sanitize:he,validate:i=>Qt(e,i,j[e]?.options?.validate),isDev:T};return r.set(e,s),s},Ln=(e,t)=>{let r=v();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(ne(e,n),r.assertRuntime)throw new Error(n)};var yo=(e,t,r,o,n)=>{Xt();let s=Bn(e);if(!s)return;s.notify=()=>n(e);let i=Object.assign(Object.create(s),{action:t,prev:r,next:o});Ln(e,i),se.forEach((a,u)=>{try{a.onStoreWrite?.(i);}catch(c){Ae(e,`Feature "${String(u)}" onStoreWrite for "${e}" failed: ${c?.message??c}`,"always");}});};var St=(e,t)=>Lr({name:e,payload:t,middlewares:(()=>{let r=j[e]?.options?.middleware||[],o=v().middleware||[];return r.length===0?o:o.length===0?r:[...r,...o]})(),reportIssue:(r,o)=>{Ae(e,r,o);},warn:S}),So=(e,t,r,o)=>pt({name:e,label:t,fn:r,args:o,reportIssue:(n,s)=>{Ae(e,n,s);}});var ht=null,Ro=e=>(ht=e,()=>{ht===e&&(ht=null);}),Zt=e=>{ht?.(e);};var Je=0,Un=(e,t)=>(Je>=Number.MAX_SAFE_INTEGER&&(Je=0),Je+=1,`${e}:${t}:${Je}`),Gn=e=>{let t=[e?.correlationId,e?.traceContext?.traceId,e?.traceContext?.spanId].filter(r=>typeof r=="string"&&r.length>0);return t.length>0?t:void 0},Co=e=>({...e,path:[...e.path],meta:{...e.meta,causedBy:e.meta.causedBy?[...e.meta.causedBy]:void 0}}),qn=e=>e?Array.isArray(e)?e.map(t=>typeof t=="number"?t:String(t)):Ce(e):[],er=e=>{let t=e.timestamp??Date.now();return {id:Un(e.source,t),store:e.store,path:qn(e.path),op:e.op,...e.value!==void 0?{value:e.value}:{},meta:{timestamp:t,source:e.source,causedBy:Gn(e.context),...e.isUnsafe===true?{isUnsafe:true}:{},...e.asyncBoundary===true?{asyncBoundary:true}:{}}}},tr=e=>er({store:e.store,op:"set",path:[],value:e.value,source:e.source,context:e.context}),wo=e=>e.intent.kind==="root"||!e.preserveIntent?[tr({store:e.store,value:e.committedValue,source:"setStore",context:e.context})]:e.intent.kind==="merge"?[er({store:e.store,op:"merge",path:[],value:e.intent.value,source:"setStore",context:e.context})]:[er({store:e.store,op:"set",path:e.intent.path,value:e.intent.value,source:"setStore",context:e.context})],Qe=(e,t=M())=>{t.lastRuntimePatches=e.map(Co);},xo=(e=M())=>e.lastRuntimePatches.map(Co);F("runtime-patch.sequence",()=>{Je=0;},126);var Xe=null,bt=null;var Kn=()=>{Xe=null,bt=null;};F("write-context.runner",Kn,121);var Rt=()=>bt?.get()??Xe,rr=(e,t)=>{if(!e||!e.correlationId&&!e.traceContext)return t();if(bt)return bt.run(e,t);let r=Xe;Xe=e;try{return t()}finally{Xe=r;}};var Yn=32,or=new Set;F("store-write.slow-mutator-warned",()=>or.clear(),65);var Jn=e=>{if(e.updateCount>=Number.MAX_SAFE_INTEGER){e.updateCount=0;return}e.updateCount+=1;};var vo=(e,t)=>{T()&&(t<Yn||or.has(e)||(or.add(e),S(`setStore("${e}", mutator) took ${t}ms. Mutator writes clone the entire store; consider path writes or smaller stores for hot paths.`)));},Ct=e=>Rt(),Qn=(e,t)=>{if(!e||!t)return;let r=t.resetElapsedMs;typeof r=="number"&&(e.metrics.resetCount=(e.metrics.resetCount??0)+1,e.metrics.totalResetMs=(e.metrics.totalResetMs??0)+r,e.metrics.lastResetMs=r);},ko=(e,{name:t,prev:r,next:o,action:n,hookLabel:s,logMessage:i,context:a,metricsUpdate:u})=>{let c=e.metaEntries;X(t,o,e),we(t);let l=Date.now();c[t].updatedAt=new Date(l).toISOString(),c[t].updatedAtMs=l;let m=a??Rt();m&&(m.correlationId||m.traceContext)?(c[t].lastCorrelationId=m.correlationId??null,c[t].lastCorrelationAt=new Date(l).toISOString(),c[t].lastCorrelationAtMs=l,c[t].lastTraceContext=m.traceContext??null):(c[t].lastCorrelationId=null,c[t].lastCorrelationAt=null,c[t].lastCorrelationAtMs=null,c[t].lastTraceContext=null),Jn(c[t]),Qn(c[t],u),yo(t,n,r,o,Zt),So(t,s,c[t].options[s],[r,o]),Zt(t),K(i);},wt=(e,t)=>{let r=t.context??Rt();if(E()){yt(t.name,t.next),Mo(t.runtimePatches??[]),mt(()=>ko(e,{...t,context:r}));return}ko(e,{...t,context:r}),t.runtimePatches&&t.runtimePatches.length>0&&Qe(t.runtimePatches,e);};function Ze(e,t,r){return Xn(e,t,r)}var Xn=(e,t,r,o)=>{let n=Pe(e),s=M(),i=s.metaEntries;if(!po(n,s))return {ok:false,reason:"validate"};if(!Q(n,s)){let w=`setStore("${n}") called before createStore(). Create the store first or pass a valid StoreDefinition.`;return ne(n,w),E()&&W(w),{ok:false,reason:"not-found"}}let a,u={kind:"root"},c=E()?fe(n):{has:false,value:void 0},l=c.has?c.value:ge(n,s);if(typeof t=="function"&&r===void 0){let w=T()?Date.now():0;try{let C=v().mutatorProduce,k=!1,V,P=A=>{let D=t(A);return D!==void 0&&(k=!0,V=D),D},x=C?C(l,P):(()=>{let A=$(l);return P(A),A})();if(k&&v().strictMutatorReturns){let A=`setStore("${n}", mutator) returned a value. Strict mutator mode forbids return values; mutate the draft instead.`;return ne(n,A),E()&&W(A),{ok:!1,reason:"validate"}}k&&T()&&!v().strictMutatorReturns&&S(`setStore("${n}", mutator) returned a value. Return values replace the entire store; return void to apply draft mutations instead.`),a=k&&!v().strictMutatorReturns?V:x,u={kind:"root"};}catch(C){return ne(n,`Mutator for "${n}" failed: ${C?.message??C}`),E()&&W(C),{ok:false,reason:"validate"}}finally{w&&vo(n,Date.now()-w);}}else if(typeof t=="object"&&!Array.isArray(t)&&r===void 0){if(!lt(t))return E()&&W(`setStore("${n}") received invalid data`),{ok:false,reason:"invalid-args"};if(typeof l!="object"||l===null||Array.isArray(l))return oe(`setStore("${n}", data) only merges into object stores.
11
+ Use setStore("${n}", "path", value) or recreate the store with an object shape.`),E()&&W(`setStore("${n}") attempted object merge on non-object store`),{ok:false,reason:"validate"};let w=xe(n,t);if(!w.ok)return E()&&W(`setStore("${n}") failed sanitize`),{ok:false,reason:"validate"};a={...l,...w.value},u={kind:"merge",value:w.value};}else if(typeof t=="string"||Array.isArray(t)){if(!Ue(t))return E()&&W(`setStore("${n}") received invalid path`),{ok:false,reason:"invalid-args"};let w=xe(n,r);if(!w.ok)return E()&&W(`setStore("${n}") failed sanitize`),{ok:false,reason:"validate"};let C=w.value,k=lo(n,l,t,C);if(!k.ok)return pe(i[n]?.options?.onError,`onError(${n})`,k.reason??`Invalid path for "${n}".`),E()&&W(k.reason),{ok:false,reason:"path"};a=Ut(l,t,C),u={kind:"path",path:t,value:C};}else {let w=`setStore("${n}") - invalid arguments.
12
+ Usage:
13
+ setStore("${n}", "field", value)
14
+ setStore("${n}", "nested.field", value)
15
+ setStore("${n}", { field: value })
16
+ setStore(storeDef, draft => { draft.field = value })
17
+ replaceStore("${n}", value) // full-store replace`;return oe(w),pe(i[n]?.options?.onError,`onError(${n})`,w),E()&&W(w),{ok:false,reason:"invalid-args"}}if(!lt(a))return E()&&W(`setStore("${n}") produced invalid data`),{ok:false,reason:"validate"};let d=i[n]?.options?.validate,g=Ct(),h=St(n,{action:"set",prev:l,next:a,path:t,correlationId:g?.correlationId,traceContext:g?.traceContext});if(h===Ee)return E()&&W(`setStore("${n}") aborted by middleware`),{ok:false,reason:"middleware"};let f=Object.is(h,a),b=Ye(n,h,d,void 0,f?{reuseInput:true}:void 0);if(!b.ok)return E()&&W(`setStore("${n}") failed validation`),{ok:false,reason:"validate"};let R=wo({store:n,intent:u,committedValue:b.value,preserveIntent:u.kind!=="root"&&Object.is(h,a)&&Object.is(b.value,h),context:g});try{if(Lt(l,b.value))return {ok:!0}}catch{}return wt(s,{name:n,prev:l,next:b.value,action:"set",hookLabel:"onSet",logMessage:`Store "${n}" updated`,context:g,runtimePatches:R}),{ok:true}};function xt(e,t){let r=Pe(e);if(!r)return {ok:false,reason:"invalid-args"};let o=M(),n=es(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 es=(e,t,r,o="hydrate",n)=>{let s=(h,f)=>(E()&&W(f??h),{ok:false,reason:h});if(!no(t))return s("not-found",`replaceStore("${t}") called before createStore().`);let i=E()?fe(t):{has:false,value:void 0},a=i.has?i.value:ge(t,e),u=xe(t,r);if(!u.ok)return s("sanitize",`replaceStore("${t}") failed sanitize`);let c=u.value;if(c===void 0){let h=`Whole-store undefined replacement is blocked for "${t}". Use null for intentional empty state.`;return Ae(t,h),s("undefined",h)}let l=e.metaEntries[t]?.options?.validate,m=Ct(),d=St(t,{action:o,prev:a,next:c,path:null,correlationId:m?.correlationId,traceContext:m?.traceContext});if(d===Ee)return s("middleware",`replaceStore("${t}") aborted by middleware`);let g=Ye(t,d,l);return g.ok?(wt(e,{name:t,prev:a,next:g.value,action:o,hookLabel:"onSet",logMessage:`Store "${t}" ${o==="hydrate"?"hydrated":"replaced"}`,context:m,runtimePatches:[tr({store:t,value:g.value,source:o==="hydrate"?"hydrateStores":"replaceStore",context:m})]}),{ok:true}):s("validate",`replaceStore("${t}") failed validation`)};var To=e=>Q(e);var rs=()=>M().computedCleanups,Eo=new WeakMap;var os=e=>{let t=Eo.get(e);return t||(t=new Map,Eo.set(e,t)),t};var Fo=e=>{let t=rs(),r=t.get(e);if(!r){T()&&S(`deleteComputed("${e}") -- not found`);return}r(),t.delete(e);};var Po=(e,t=M())=>os(t).get(e)?.autoDispose===true;var Ao=new Map;var sr=e=>{let t=Ao.get(e);return !!t&&t.size>0},et=(e,t,r)=>{let o=Ao.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 Io=e=>{let t=e.stores,r=e.subscribers,o=e.initialStates,n=e.initialFactories,s=e.metaEntries,i=e.snapshotCache,a=e.featureRuntimes,u=e.deletingStores,c=(f,b)=>{Fe(b,{onError:s[f]?.options?.onError,severity:"warn",visibility:"dev"});},l=({name:f,prev:b,options:R,initialState:w,getMeta:C,getStoreValue:k,hasStore:V})=>({name:f,options:R,prev:b,getMeta:C,getStoreValue:k,getAllStores:()=>t,getInitialState:()=>w,hasStore:V,setStoreValue:()=>{},applyFeatureState:()=>{},notify:()=>{},reportStoreError:P=>{Fe(P,{onError:R.onError,severity:"warn",visibility:"dev"});},warn:S,warnAlways:ce,log:K,hashState:Le,deepClone:$,sanitize:he,validate:()=>({ok:true,value:b}),isDev:T}),m=({name:f,prev:b,options:R,initialState:w,phase:C})=>{let k=l({name:f,prev:b,options:R,initialState:w,getMeta:()=>s[f],getStoreValue:()=>t[f],hasStore:()=>re(e,f)}),V=l({name:f,prev:b,options:R,initialState:w,getMeta:()=>{},getStoreValue:()=>b,hasStore:()=>false});Me().forEach(P=>{let x=a.get(P);C==="before"?x?.beforeStoreDelete?.(k):x?.afterStoreDelete?.(V);});},d=f=>{if(!re(e,f))return;let b=t[f],R=s[f].options,w=o[f],C=r[f];u.add(f);try{C?.forEach(P=>{try{P(null);}catch(x){S(`Subscriber for "${f}" threw during delete: ${x?.message??x}`);}}),pt({name:f,label:"onDelete",fn:R.onDelete,args:[b],reportIssue:(P,x)=>{Fe(P,{onError:R.onError,severity:"warn",visibility:x});}}),m({name:f,prev:b,options:R,initialState:w,phase:"before"}),delete t[f],delete r[f],delete o[f],delete n[f],delete s[f],delete i[f],Qr(f)&&Fo(f);let V=e.computedDependents[f];if(V)for(let P of [...V]){let x=gt(P);if(x&&Po(P,e)&&x.deps.every(A=>!re(e,A))){d(P);continue}S(`[stroid] source store "${f}" was deleted. Computed store "${P}" depends on it and will return stale data. Call deleteComputed("${P}") to clean up.`);}m({name:f,prev:b,options:R,initialState:w,phase:"after"}),et("afterStoreDelete",f,{type:"afterStoreDelete",prev:b}),Vt(e,{type:"deleted",name:f}),K(`Store "${f}" deleted`);}finally{u.delete(f);}};return {deleteExistingStore:d,clearAllStores:()=>{let f=[],R=0,w=Number.POSITIVE_INFINITY;for(;R<20;){let k=Object.keys(t);if(k.length===0)break;k.forEach(P=>{re(e,P)&&(d(P),f.push(P));}),R+=1;let V=Object.keys(t).length;if(V===0||V>=w)break;w=V;}let C=Object.keys(t).length;return C>0?S(`clearAllStores stopped after ${R} pass${R===1?"":"es"}; ${C} store(s) still registered (likely recreated during deletion).`):K(`All stores cleared (${f.length} stores removed)`),f},clearStores:f=>{let b=Object.keys(t).filter(R=>f?f.endsWith("*")?R.startsWith(f.slice(0,-1)):R===f:true);return b.forEach(R=>d(R)),b},reportStoreError:c}};var ir=ae,jo=ue(ir),Vo=null,z=()=>{let e=B(jo);return It(e),e};var M=()=>z();function fo(e){Vo=e;}var Ie=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}}}),ns=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)}),ss=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)}),qe=Ie(()=>z().stores);Ie(()=>z().subscribers);var ho=Ie(()=>z().initialStates);Ie(()=>z().initialFactories);var j=Ie(()=>z().metaEntries);Ie(()=>z().snapshotCache);var se=ns(()=>z().featureRuntimes),No=new WeakMap,is=e=>{let t=No.get(e);return t||(t=Io(e),No.set(e,t)),t};ss(()=>is(z()));var as=e=>{let t=se.get(e);if(t)return t;let r=ut(e);if(!r)return;let o=r();return se.set(e,o),o},Xt=()=>{Me().forEach(e=>{as(e);});};Xt();var Q=(e,t)=>re(t??z(),e),ge=(e,t=z())=>{if(E()){let r=fe(e);if(r.has)return r.value}return tt(e,t)},tt=(e,t=z())=>{let r=_e();return r&&Object.prototype.hasOwnProperty.call(r,e)?r[e]:t.stores[e]},X=(e,t,r=z())=>{r.stores[e]=t;},bo=(e,t,r=Date.now())=>{X(e,t),j[e]&&(j[e].updatedAt=new Date(r).toISOString(),j[e].updatedAtMs=r,j[e].lastCorrelationId=null,j[e].lastCorrelationAt=null,j[e].lastCorrelationAtMs=null,j[e].lastTraceContext=null,j[e].updateCount>=Number.MAX_SAFE_INTEGER?j[e].updateCount=0:j[e].updateCount+=1,Vo?.(e));},us=()=>{kr(z());},cs=()=>{se.forEach(e=>{try{e.resetAll?.();}catch{}}),se.clear();};F("features.reset",cs,10);F("registries.clear",us,20);F("registry.default",()=>{ir=ae,jo=ue(ir);},115);var io=e=>xr(z(),e);var ke=null;var ls=()=>{ke=null;};F("transaction.runner",ls,120);var me=e=>{let t=ke?.get();return t||(e??B()).transaction},Oo=e=>e instanceof Error?e:typeof e=="string"?new Error(e):e&&typeof e?.message=="string"?new Error(e.message):new Error("setStoreBatch aborted"),ds=e=>({notifyCount:e.notifyCount,totalNotifyMs:e.totalNotifyMs,lastNotifyMs:e.lastNotifyMs,resetCount:e.resetCount,totalResetMs:e.totalResetMs,lastResetMs:e.lastResetMs}),ps=e=>({updatedAt:e.updatedAt,updatedAtMs:e.updatedAtMs,updateCount:e.updateCount,lastCorrelationId:e.lastCorrelationId,lastCorrelationAt:e.lastCorrelationAt,lastCorrelationAtMs:e.lastCorrelationAtMs,lastTraceContext:e.lastTraceContext,metrics:ds(e.metrics)}),fs=e=>{let t=new Map;Object.keys(e.stores).forEach(o=>{t.set(o,tt(o,e));});let r=new Map;return Object.entries(e.metaEntries).forEach(([o,n])=>{r.set(o,ps(n));}),{stores:t,meta:r,pendingNotifications:[...e.notify.pendingNotifications],lastRuntimePatches:xo(e)}},Do=(e,t)=>{let r=new Set(Object.keys(e.stores));t.stores.forEach((o,n)=>{X(n,o,e),r.delete(n);}),r.forEach(o=>{delete e.stores[o];}),t.meta.forEach((o,n)=>{let s=e.metaEntries[n];s&&(s.updatedAt=o.updatedAt,s.updatedAtMs=o.updatedAtMs,s.updateCount=o.updateCount,s.lastCorrelationId=o.lastCorrelationId,s.lastCorrelationAt=o.lastCorrelationAt,s.lastCorrelationAtMs=o.lastCorrelationAtMs,s.lastTraceContext=o.lastTraceContext,s.metrics.notifyCount=o.metrics.notifyCount,s.metrics.totalNotifyMs=o.metrics.totalNotifyMs,s.metrics.lastNotifyMs=o.metrics.lastNotifyMs,s.metrics.resetCount=o.metrics.resetCount,s.metrics.totalResetMs=o.metrics.totalResetMs,s.metrics.lastResetMs=o.metrics.lastResetMs);}),e.notify.pendingNotifications.clear(),t.pendingNotifications.forEach(o=>{e.notify.pendingNotifications.add(o);}),Qe(t.lastRuntimePatches,e);},ar=e=>{let t=e??B(),r=ke?.get();return !r&&ke?.enterWith&&(r=jt(),ke.enterWith(r)),r||(r=me(t)),r.depth+=1,r.depth===1&&(r.pending=[],r.stagedValues.clear(),r.snapshotCache.clear(),r.runtimePatches.length=0,r.failed=false,r.error=void 0),t},E=()=>ke?(ke.get()?.depth??0)>0:me().depth>0,W=(e,t)=>{let r=me(t);r.failed=true,r.error||(r.error=Oo(e));},mt=e=>{let t=B();me(t).pending.push(()=>ct(t,e));},yt=(e,t)=>{let r=me();r.stagedValues.set(e,t),r.snapshotCache.delete(e);},Mo=e=>{if(e.length===0)return;me().runtimePatches.push(...e);},fe=e=>{let t=me();return t.stagedValues.has(e)?{has:true,value:t.stagedValues.get(e)}:{has:false,value:void 0}},ur=(e,t)=>{let r=me(t),o=t??B();if(r.depth===0||(e&&W(e,t),r.depth=Math.max(0,r.depth-1),r.depth>0))return null;let n=r.failed?r.error??new Error("setStoreBatch aborted"):null;if(!n){let s=fs(o);for(let i of r.pending)try{if(i(),r.failed){n=r.error??new Error("setStoreBatch aborted"),Do(o,s);break}}catch(a){W(a,t),n||(n=r.error??Oo(a)),Do(o,s);break}!n&&r.failed&&(n=r.error??new Error("setStoreBatch aborted"));}return !n&&r.runtimePatches.length>0&&Qe(r.runtimePatches,o),r.pending=[],r.stagedValues.clear(),r.snapshotCache.clear(),r.runtimePatches.length=0,r.failed=false,r.error=void 0,n};var kt=(e,t)=>{let r=e?.options?.snapshot??t;return r==="shallow"||r==="ref"?r:"deep"},Ne=(e,t)=>{if(t==="ref"){if(!T())return e;try{return Ge(e)}catch{return e}}if(t==="shallow"){let o=G(e);if(!T())return o;try{return Ge(o)}catch{return o}}let r=$(e);if(!T())return r;try{return dt(r)}catch{return r}};var $o=e=>{let{pendingNotifications:t,pendingBuffer:r,orderedNames:o}=e,n=v().flush,s=n.priorityStores||[],i=s.length?new Set(s):null;o.length=0,r.length=0;let a=new Set;if(i){for(let h of t)r.push(h),a.add(h);for(let h of s)a.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),a.add(h),o.push(h);t.clear();let u=Gr(o),c=new Set(o);for(let h of u)c.has(h)||(o.push(h),c.add(h));let l=Number.isFinite(n.chunkSize)&&n.chunkSize>0?n.chunkSize:Number.POSITIVE_INFINITY,m=n.chunkDelayMs,d=l===Number.POSITIVE_INFINITY&&m===0;return {names:o,sliceSize:l,chunkDelayMs:m,runInline:d,prioritySet:i}};var cr=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}),lr=(e,t)=>(e.notifyCount+=1,e.totalNotifyMs+=t,e.lastNotifyMs=t,e),dr=(e,t)=>{e&&(e.metrics=t);};var rt=(e,t)=>{if(t>0&&typeof setTimeout=="function"){setTimeout(e,t);return}if(typeof queueMicrotask=="function"){queueMicrotask(e);return}Promise.resolve().then(e);},Wo=(e,t)=>{let r=e.notify;if(r.notifyScheduled)return;r.notifyScheduled=true;let o=()=>ct(e,()=>t(e));typeof queueMicrotask=="function"?queueMicrotask(o):Promise.resolve().then(o);};var _o=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)},zo=(e,t,r,o)=>{let n=e.notify,{names:s,sliceSize:i,chunkDelayMs:a,runInline:u,prioritySet:c}=t,m=e.stores,d=e.subscribers,g=e.metaEntries,h=e.snapshotCache,f=v().defaultSnapshotMode,b=y=>kt(g[y],f),R=y=>m[y],w=()=>typeof performance<"u"&&performance.now?performance.now():Date.now(),C=sr("beforeFlush"),k=sr("afterFlush"),V=y=>{C&&et("beforeFlush",y,{type:"beforeFlush"});},P=(y,O)=>{k&&et("afterFlush",y,{type:"afterFlush",elapsedMs:O});},x=y=>{let O=g[y];if(!O)return null;let I=O.lastCorrelationId??void 0,p=O.lastTraceContext??void 0;return !I&&!p?null:{correlationId:I,traceContext:p}},A=()=>{o();};if(u){for(let y of s){let O=d[y];if(!O||O.size===0)continue;let I=g[y]?.updateCount??0,p=b(y),ve=R(y),L=h[y],U=L&&L.source===ve&&L.mode===p?L.snapshot:(()=>{let H=Ne(ve,p);return h[y]={version:r,snapshot:H,source:ve,mode:p},H})(),Z=cr(g[y]?.metrics);V(y);let ye=w(),ie=Array.from(O),De=x(y),Oe=()=>{for(let H of ie)try{H(U);}catch(Se){let ee=g[y]?.options?.snapshotSafety??"warn";if(T()&&(p==="ref"||p==="shallow")&&_o(Se)){if(ee==="throw")throw Se;if(ee==="auto-clone")try{let We=$(U);S(`Snapshot mutation detected for "${y}". Delivered a cloned snapshot to the subscriber.`);try{H(We);}catch(Pt){S(`Subscriber for "${y}" threw on cloned snapshot: ${Pt?.message??Pt}`);}continue}catch{}S(`Snapshot mutation detected for "${y}": ${Se?.message??Se}`);continue}S(`Subscriber for "${y}" threw: ${Se?.message??Se}`);}};De?rr(De,Oe):Oe();let $e=w()-ye;P(y,$e),lr(Z,$e),dr(g[y],Z),(g[y]?.updateCount??I)!==I&&n.pendingNotifications.add(y);}A();return}let D=y=>{let O=[];for(let I of s){if(y&&!y(I))continue;let p=d[I];if(!p||p.size===0)continue;let ve=g[I]?.updateCount??0,L=b(I),U=R(I),Z=h[I],ye=Z&&Z.source===U&&Z.mode===L?Z.snapshot:(()=>{let ie=Ne(U,L);return h[I]={version:r,snapshot:ie,source:U,mode:L},ie})();O.push({name:I,snapshot:ye,version:ve,subscribers:Array.from(p),subscriberSet:new Set(p),notified:new Set,metrics:cr(g[I]?.metrics),totalMs:0,beforeHooked:false});}return O},je=c?D(y=>c.has(y)):[],Ve=D(y=>!c||!c.has(y)),Et=(y,O)=>{let I=()=>{if(y.length===0){O();return}let p=y.shift();if((g[p.name]?.updateCount??p.version)!==p.version){if(n.pendingNotifications.add(p.name),y.length===0){O();return}rt(I,a);return}let L=()=>{let q=d[p.name];if(!(!q||q.size===0))for(let H of q)p.subscriberSet.has(H)||(p.subscriberSet.add(H),p.subscribers.push(H));};L();let U=p.subscribers;if(U.length===0){if(y.length===0){O();return}rt(I,a);return}p.beforeHooked||(p.beforeHooked=true,V(p.name));let Z=w(),ye=0,ie=false,De=x(p.name),Oe=()=>{for(let q=0;q<U.length&&ye<i;q+=1){let H=U[q];if(p.notified.has(H))continue;p.notified.add(H);try{H(p.snapshot);}catch(ee){let Ft=g[p.name]?.options?.snapshotSafety??"warn",We=b(p.name);if(T()&&(We==="ref"||We==="shallow")&&_o(ee)){if(Ft==="throw")throw ee;if(Ft==="auto-clone")try{let gr=$(p.snapshot);S(`Snapshot mutation detected for "${p.name}". Delivered a cloned snapshot to the subscriber.`);try{H(gr);}catch(mr){S(`Subscriber for "${p.name}" threw on cloned snapshot: ${mr?.message??mr}`);}if(p.notified.add(H),ye+=1,(g[p.name]?.updateCount??p.version)!==p.version){ie=!0,n.pendingNotifications.add(p.name);break}continue}catch{}S(`Snapshot mutation detected for "${p.name}": ${ee?.message??ee}`);continue}S(`Subscriber for "${p.name}" threw: ${ee?.message??ee}`);}if(ye+=1,(g[p.name]?.updateCount??p.version)!==p.version){ie=true,n.pendingNotifications.add(p.name);break}}};if(De?rr(De,Oe):Oe(),p.totalMs+=w()-Z,ie){if(y.length===0){O();return}rt(I,a);return}L();let $e=false;for(let q of U)if(!p.notified.has(q)){$e=true;break}if($e?y.push(p):(lr(p.metrics,p.totalMs),dr(g[p.name],p.metrics),P(p.name,p.totalMs)),y.length===0){O();return}rt(I,a);};I();};je.length>0?Et(je,()=>Et(Ve,A)):Et(Ve,A);};var gs=e=>{let t=e.notify;t.isFlushing=true,t.flushId=t.flushId+1>>>0;let r=t.flushId,o=$o(t);zo(e,o,r,()=>{t.isFlushing=false,t.notifyScheduled=false,t.pendingNotifications.size>0&&ot(e);});},ot=e=>{Wo(e,gs);};var vt=(e,t)=>{if(!(!e||typeof e!="object")){if(t==="ref"||t==="shallow"){Ge(e);return}t==="deep"&&dt(e);}},ms=e=>{let t=M(),r=t.notify;r.pendingNotifications.add(e),r.batchDepth===0&&ot(t);};Ro(ms);var Ho=(e,t)=>{let o=M().subscribers;return o[e]||(o[e]=new Set),o[e].add(t),()=>{o[e]?.delete(t),o[e]?.size===0&&delete o[e];}};var ys=(e,t)=>{if(!Q(e))return null;let r=M();let o=kt(r.metaEntries[e],v().defaultSnapshotMode);let n=r.notify.flushId,s=tt(e,r),i=r.snapshotCache[e];if(i&&i.source===s&&i.mode===o){let u=i.snapshot;return vt(u,o),u}let a=Ne(s,o);return vt(a,o),r.snapshotCache[e]={version:n,snapshot:a,source:s,mode:o},a};var pr=e=>ys(e);var Ss=()=>{let e=M().notify;e.pendingNotifications.clear(),e.pendingBuffer.length=0,e.orderedNames.length=0,e.notifyScheduled=false,e.batchDepth=0;};F("notify.reset",Ss,40);var fr=()=>B(ue(ae)),hs=e=>{let t=fr();return re(t,e)?true:(He(e,Object.keys(t.stores)),false)},bs=(e,t)=>{if(!t)return true;if(t.endsWith("*")){let r=t.slice(0,-1);return e.startsWith(r)}return e===t},Bo=e=>{let t=fr();return Object.keys(t.stores).filter(r=>bs(r,e))},Lo=e=>{if(!hs(e))return null;let t=fr().metaEntries[e],r=G(t);r.metrics=G(t.metrics);let o=G(t.options),n=o;return n.persist&&typeof n.persist=="object"&&(n.persist=G(n.persist)),n.sync&&typeof n.sync=="object"&&(n.sync=G(n.sync)),n.devtools&&typeof n.devtools=="object"&&(n.devtools=G(n.devtools)),n.lifecycle&&typeof n.lifecycle=="object"&&(n.lifecycle=G(n.lifecycle)),r.options=o,r};var Mt=()=>Kt();var Tt=e=>qt(e),Rs=(e,t)=>Yt(e,t);var st={ok:false,reason:"invalid-args"},Cs=["set","merge","delete","insert"],ws=["setStore","replaceStore","resetStore","hydrateStores"],at=e=>Pe(e),Uo=e=>!!e?.options.persist?.encryptAsync||!!e?.options.persist?.decryptAsync||e?.options.persist?.checksum==="sha256",xs=e=>!!e?.options.sync||Uo(e),ks=e=>!!e?.options.persist||!!e?.options.sync||e?.options.devtools===true,vs=(e,t)=>JSON.stringify([e,t,[]]),Ms=e=>vs("leaf",e),Go=(e,t)=>{let r=new Map;return e.edges.forEach(o=>{let n=t==="forward"?o.from:o.to,s=t==="forward"?o.to:o.from,i=r.get(n);if(i){i.push(s);return}r.set(n,[s]);}),r},qo=(e,t)=>{let r=new Set,o=[...e];for(;o.length>0;){let n=o.shift();if(r.has(n))continue;r.add(n);let s=t.get(n);s&&s.forEach(i=>{r.has(i)||o.push(i);});}return r},it=e=>Array.from(new Set(e)).sort((t,r)=>t.localeCompare(r)),Ts=e=>{if(!e)return [];let t=Tt(e);return t?[t.id]:[Ms(e)]},Es=(e,t)=>{if(!e)return it(Bo());let r=Tt(e);if(!r)return [e];let o=new Map(t.nodes.map(a=>[a.id,a])),n=Go(t,"reverse"),s=qo([r.id],n),i=Array.from(s).map(a=>o.get(a)).filter(a=>!!a).filter(a=>a.type==="leaf").map(a=>a.storeId);return i.length>0?it(i):[e]},Fs=(e,t)=>{let r=new Set(t.nodes.filter(i=>i.type==="async-boundary").map(i=>i.id));if(r.size===0)return [];if(!e)return it(r);let o=Ts(e),n=Go(t,"forward"),s=qo(o,n);return it(Array.from(s).filter(i=>r.has(i)))},nt=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),Ps=e=>typeof e=="string"&&Cs.includes(e),As=e=>typeof e=="string"&&ws.includes(e),Ko=e=>{if(!e||typeof e!="object"||!nt(e,"id")||typeof e.id!="string"||e.id.length===0||!nt(e,"store")||typeof e.store!="string"||e.store.length===0||!nt(e,"path")||!Array.isArray(e.path)||e.path.some(r=>typeof r!="string"&&typeof r!="number")||!Ps(e.op)||!nt(e,"meta")||!e.meta||typeof e.meta!="object"||typeof e.meta.timestamp!="number"||!Number.isFinite(e.meta.timestamp)||!As(e.meta.source)||e.meta.causedBy!==void 0&&(!Array.isArray(e.meta.causedBy)||e.meta.causedBy.some(r=>typeof r!="string"))||e.meta.isUnsafe!==void 0&&typeof e.meta.isUnsafe!="boolean"||e.meta.asyncBoundary!==void 0&&typeof e.meta.asyncBoundary!="boolean")return null;let t=e.path.map(r=>typeof r=="number"?r:String(r));return Ue(t.map(r=>String(r)))?{id:e.id,store:e.store,path:t,op:e.op,...nt(e,"value")?{value:e.value}:{},meta:{timestamp:e.meta.timestamp,source:e.meta.source,...e.meta.causedBy&&e.meta.causedBy.length>0?{causedBy:[...e.meta.causedBy]}:{},...e.meta.isUnsafe===true?{isUnsafe:true}:{},...e.meta.asyncBoundary===true?{asyncBoundary:true}:{}}}:null},Yo=e=>e.op==="set"?e.path.length===0?xt(e.store,e.value):Ze(e.store,e.path.map(t=>String(t)),e.value):e.op==="merge"?e.path.length!==0?st:Ze(e.store,e.value):st,Is=e=>{let t=Mt(),o=Es(e,t).map(d=>({storeId:d,meta:Lo(d)})),n=Fs(e,t),s=new Map(t.nodes.map(d=>[d.id,d])),i=e?Tt(e):null,a=new Set;o.forEach(({storeId:d,meta:g})=>{g?.options.sync&&a.add(`sync for "${d}" can apply remote writes outside the local commit path`),Uo(g)&&a.add(`persist for "${d}" introduces async boundary work`);}),n.forEach(d=>{let g=s.get(d)?.storeId;if(!g)return;let h=i?.id===d||!e?"computed node":"downstream computed node";a.add(`${h} "${g}" is marked asyncBoundary`);});let u=o.some(({meta:d})=>!!d?.options.sync),c=n.length>0||o.some(({meta:d})=>xs(d)),l=o.some(({meta:d})=>ks(d))?"in-pipeline":"out-of-pipeline";return {simulationWindow:"pre-commit",executionModel:c?"async-boundary":"sync",effectScope:l,governanceMode:u?"observer":c?"bounded-governor":"full-governor",mutationAuthority:u?"shared":"exclusive",causalityBoundary:c?"async-boundary":"none",reasons:it(a)}},Rc=e=>pr(at(e)),Cc=e=>pr(at(e)),wc=(e,t)=>Ho(at(e),t),xc=e=>To(at(e)),kc=e=>{let t=Ko(e);return t?Yo(t):st},vc=e=>{if(!Array.isArray(e))return st;if(e.length===0)return {ok:true};let t=[];for(let a of e){let u=Ko(a);if(!u)return st;t.push(u);}let r=M(),o=r.notify;o.batchDepth=Math.max(0,o.batchDepth+1),ar(r);let n=null,s=null,i=null;try{for(let a of t){let u=Yo(a);if(!u.ok){n=u;break}}}catch(a){s=a instanceof Error?a:new Error(String(a));}finally{i=ur(s??(n?new Error(`applyStorePatchesAtomic failed: ${n.reason}`):void 0),r),o.batchDepth=Math.max(0,o.batchDepth-1),o.batchDepth===0&&o.pendingNotifications.size>0&&ot(r);}return n||(s||i?{ok:false,reason:"validate"}:{ok:true})},Mc=e=>Is(e?at(e):void 0),Tc=()=>Mt(),Ec=()=>Mt();
18
+ export{kc as applyStorePatch,vc as applyStorePatchesAtomic,Rs as evaluateComputed,Tt as getComputedDescriptor,Tc as getComputedGraph,Ec as getRuntimeGraph,Lo as getStoreMeta,Rc as getStoreSnapshot,Cc as getStoreSnapshotNoTrack,Mc as getTimingContract,xc as hasStore,Bo as listStores,wc as subscribeStore};//# sourceMappingURL=psr.js.map
19
+ //# sourceMappingURL=psr.js.map