gjendje 1.3.7 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -7
- package/dist/chunk-24EEL77P.cjs +1 -0
- package/dist/chunk-5F5C5U62.cjs +1 -0
- package/dist/chunk-6CL7CC45.js +1 -0
- package/dist/chunk-E5E4AZX7.js +1 -0
- package/dist/chunk-SLY2FTN3.cjs +1 -0
- package/dist/chunk-XP3O35DV.js +1 -0
- package/dist/devtools.cjs +1 -1
- package/dist/devtools.d.cts +6 -5
- package/dist/devtools.d.ts +6 -5
- package/dist/devtools.js +1 -1
- package/dist/{types-CFykgWDQ.d.cts → index-C75CW5j8.d.cts} +16 -0
- package/dist/{types-CFykgWDQ.d.ts → index-C75CW5j8.d.ts} +16 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +20 -20
- package/dist/index.d.ts +20 -20
- package/dist/index.js +1 -1
- package/dist/react.cjs +1 -1
- package/dist/react.d.cts +1 -1
- package/dist/react.d.ts +1 -1
- package/dist/react.js +1 -1
- package/dist/server.cjs +1 -1
- package/dist/server.d.cts +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.js +1 -1
- package/dist/svelte.cjs +1 -0
- package/dist/svelte.d.cts +29 -0
- package/dist/svelte.d.ts +29 -0
- package/dist/svelte.js +1 -0
- package/dist/vue.cjs +1 -1
- package/dist/vue.d.cts +1 -1
- package/dist/vue.d.ts +1 -1
- package/dist/vue.js +1 -1
- package/package.json +17 -2
- package/dist/chunk-22S7BKI5.js +0 -1
- package/dist/chunk-3NNMD2AB.js +0 -1
- package/dist/chunk-EB6FSOCF.cjs +0 -1
- package/dist/chunk-LVZKO5RP.cjs +0 -1
- package/dist/chunk-OGC62HIQ.cjs +0 -1
- package/dist/chunk-WX6QJ7EN.js +0 -1
package/README.md
CHANGED
|
@@ -62,12 +62,12 @@ function Counter() {
|
|
|
62
62
|
|
|
63
63
|
```vue
|
|
64
64
|
<script setup>
|
|
65
|
-
import { state } from 'gjendje'
|
|
66
|
-
import { useGjendje } from 'gjendje/vue'
|
|
65
|
+
import { state } from 'gjendje'
|
|
66
|
+
import { useGjendje } from 'gjendje/vue'
|
|
67
67
|
|
|
68
|
-
const counter = state({ counter: 0 })
|
|
68
|
+
const counter = state({ counter: 0 })
|
|
69
69
|
|
|
70
|
-
const count = useGjendje(counter)
|
|
70
|
+
const count = useGjendje(counter)
|
|
71
71
|
</script>
|
|
72
72
|
|
|
73
73
|
<template>
|
|
@@ -77,9 +77,28 @@ const count = useGjendje(counter)
|
|
|
77
77
|
|
|
78
78
|
[Vue guide](https://github.com/charliebeckstrand/gjendje/blob/main/docs/vue.md)
|
|
79
79
|
|
|
80
|
+
### Svelte
|
|
81
|
+
|
|
82
|
+
```svelte
|
|
83
|
+
<script>
|
|
84
|
+
import { state } from 'gjendje'
|
|
85
|
+
import { useGjendje } from 'gjendje/svelte'
|
|
86
|
+
|
|
87
|
+
const counter = state({ counter: 0 })
|
|
88
|
+
|
|
89
|
+
const count = useGjendje(counter)
|
|
90
|
+
</script>
|
|
91
|
+
|
|
92
|
+
<button on:click={() => $count++}>
|
|
93
|
+
{$count}
|
|
94
|
+
</button>
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
[Svelte guide](https://github.com/charliebeckstrand/gjendje/blob/main/docs/svelte.md)
|
|
98
|
+
|
|
80
99
|
## API
|
|
81
100
|
|
|
82
|
-
`get`, `peek`, `set`, `patch`, `reset`, `destroy`, `subscribe`, `watch`, `intercept`, `onChange`
|
|
101
|
+
`get`, `peek`, `set`, `patch`, `mutate`, `reset`, `destroy`, `subscribe`, `watch`, `intercept`, `onChange`
|
|
83
102
|
|
|
84
103
|
[API reference](https://github.com/charliebeckstrand/gjendje/blob/main/docs/api.md)
|
|
85
104
|
|
|
@@ -97,7 +116,7 @@ const count = useGjendje(counter)
|
|
|
97
116
|
|
|
98
117
|
## Utilities
|
|
99
118
|
|
|
100
|
-
`batch`, `snapshot`, `destroyAll`, `
|
|
119
|
+
`batch`, `snapshot`, `destroyAll`, `withHistory`, `withWatch`, `withServerSession`
|
|
101
120
|
|
|
102
121
|
[Utilities reference](https://github.com/charliebeckstrand/gjendje/blob/main/docs/utilities.md)
|
|
103
122
|
|
|
@@ -105,7 +124,7 @@ const count = useGjendje(counter)
|
|
|
105
124
|
|
|
106
125
|
[DevTools guide](https://github.com/charliebeckstrand/gjendje/blob/main/docs/devtools.md)
|
|
107
126
|
|
|
108
|
-
##
|
|
127
|
+
## Configure
|
|
109
128
|
|
|
110
129
|
`scope`, `maxKeys`, `prefix`, `requireValidation`, `registry`, `ssr`, `sync`, `warnOnDuplicate`, `onChange`, `onDestroy`, `onError`, `onExpire`, `onHydrate`, `onIntercept`, `onMigrate`, `onQuotaExceeded`, `onRegister`, `onReset`, `onSync`, `onValidationFail`
|
|
111
130
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
'use strict';var chunkSLY2FTN3_cjs=require('./chunk-SLY2FTN3.cjs'),chunk5F5C5U62_cjs=require('./chunk-5F5C5U62.cjs');var M=0,re=0,I=[],fe=new WeakMap;function Ie(s){M++;try{s();}finally{M--,M===0&&ke();}}function _(s){if(M>0){fe.get(s)!==re&&(fe.set(s,re),I.push(s));return}s();}var xe=100;function ke(){let s=0;for(;I.length>0;){if(++s>xe){console.error("[gjendje] Batch flush exceeded maximum iterations \u2014 possible infinite loop. Delivering remaining notifications once before stopping.");let t=I;I=[];for(let r=0;r<t.length;r++){let n=t[r];try{n&&n();}catch(i){console.error("[gjendje] Notification threw during best-effort delivery:",i),chunk5F5C5U62_cjs.h("batch","memory",i);}}I=[];break}re++;let e=I;I=[],M++;try{for(let t=0;t<e.length;t++){let r=e[t];try{r&&r();}catch(n){console.error("[gjendje] Notification threw:",n),chunk5F5C5U62_cjs.h("batch","memory",n);}}}finally{M--;}}}var $=class extends Error{key;scope;constructor(e,t,r,n){super(e,n),this.name="GjendjeError",this.key=t,this.scope=r;}},W=class extends ${constructor(e,t,r){super(`Failed to read key "${e}" from ${t} storage.`,e,t,r!==void 0?{cause:r}:void 0),this.name="StorageReadError";}},E=class extends ${isQuotaError;constructor(e,t,r,n=false){super(n?`Storage quota exceeded writing key "${e}" to ${t} storage.`:`Failed to write key "${e}" to ${t} storage.`,e,t,r!==void 0?{cause:r}:void 0),this.name="StorageWriteError",this.isQuotaError=n;}},q=class extends ${fromVersion;toVersion;constructor(e,t,r,n,i){super(`Migration from v${r} to v${n} failed for key "${e}".`,e,t,i!==void 0?{cause:i}:void 0),this.name="MigrationError",this.fromVersion=r,this.toVersion=n;}},z=class extends ${rejectedValue;constructor(e,t,r){super(`Validation failed for key "${e}" in ${t} storage.`,e,t),this.name="ValidationError",this.rejectedValue=r;}},U=class extends ${constructor(e,t,r){super(`Interceptor threw for key "${e}".`,e,t,r!==void 0?{cause:r}:void 0),this.name="InterceptorError";}},le=class extends ${constructor(e,t,r){super(`Computed derivation threw for "${e}".`,e,t,r!==void 0?{cause:r}:void 0),this.name="ComputedError";}},H=class extends ${constructor(e,t,r){super(`Cross-tab sync failed for key "${e}".`,e,t,r!==void 0?{cause:r}:void 0),this.name="SyncError";}},G=class extends ${constructor(e,t,r){super(`Hydration failed for key "${e}" \u2014 adapter unavailable.`,e,t,r!==void 0?{cause:r}:void 0),this.name="HydrationError";}};function ne(s,e,t){let r=s.get(e);return r||(r=new Set,s.set(e,r)),r.add(t),()=>{r.delete(t),r.size===0&&s.delete(e);}}function se(s,e,t){let r=chunkSLY2FTN3_cjs.e(e)?e:void 0,n=chunkSLY2FTN3_cjs.e(t)?t:void 0,i=Array.from(s);for(let a=0;a<i.length;a++){let[o,c]=i[a],d=r?.[o],f=n?.[o];if(!Object.is(d,f)){let p=Array.from(c);for(let w=0;w<p.length;w++)chunk5F5C5U62_cjs.i(p[w],f);}}}function Ee(s){return chunkSLY2FTN3_cjs.e(s)?Object.keys(s).length===2&&"v"in s&&"data"in s&&Number.isSafeInteger(s.v):false}function ie(s,e,t,r,n){let i=e.version??1,a=e.default,o=1,c;if(Ee(s)?(o=s.v,c=s.data):c=s,o>i&&chunk5F5C5U62_cjs.g("warn",`Stored version (v${o}) is higher than current version (v${i}) for key "${t??"unknown"}" \u2014 data may be from a newer app version. Returning as-is.`),o<i&&e.migrate&&(c=$e(c,o,i,e.migrate,t,r),t&&r&&chunk5F5C5U62_cjs.k(chunk5F5C5U62_cjs.f().onMigrate,{key:t,scope:r,fromVersion:o,toVersion:i,data:c})),e.validate&&!e.validate(c)){if(t&&r){let d=chunk5F5C5U62_cjs.f();chunk5F5C5U62_cjs.k(d.onValidationFail,{key:t,scope:r,value:c});let f=new z(t,r,c);chunk5F5C5U62_cjs.k(d.onError,{key:t,scope:r,error:f});}return n?.(),a}return c}function pe(s,e,t,r,n){try{let i=JSON.parse(s);return ie(i,e,t,r,n)}catch(i){if(chunk5F5C5U62_cjs.g("debug","Failed to read/migrate stored value \u2014 falling back to default."),t&&r){let a=new W(t,r,i);chunk5F5C5U62_cjs.k(chunk5F5C5U62_cjs.f().onError,{key:t,scope:r,error:a});}return n?.(),e.default}}function he(s,e){return JSON.stringify(!e||e===1?s:{v:e,data:s})}function Q(s,e){if(!e||!chunkSLY2FTN3_cjs.e(s))return s;let t={};for(let r of e)Object.hasOwn(s,r)&&(t[r]=s[r]);return t}function K(s,e,t){return !t||!chunkSLY2FTN3_cjs.e(s)?s:{...e,...s}}var je=1e3;function $e(s,e,t,r,n,i){if(e<0||t<0||t-e>je)return chunk5F5C5U62_cjs.g("warn",`Migration range v${e}\u2192v${t} is out of bounds \u2014 skipping.`),s;if(e>t)return chunk5F5C5U62_cjs.g("warn",`Stored version (v${e}) is higher than current version (v${t}) for key "${n??"unknown"}" \u2014 data may be from a newer app version. Returning as-is.`),s;let a=s;for(let o=e;o<t;o++){let c=r[o];if(c)try{a=c(a);}catch(d){chunk5F5C5U62_cjs.g("warn",`Migration from v${o} failed \u2014 discarding partially migrated data.`);let f=new q(n??"",i??"memory",o,t,d);throw n&&i&&chunk5F5C5U62_cjs.k(chunk5F5C5U62_cjs.f().onError,{key:n,scope:i,error:f}),f}}return a}function F(s,e,t){let{default:r,version:n,serialize:i,persist:a}=t,o=t.scope??"local",c=chunk5F5C5U62_cjs.m(e,o),d,f,p=false,w=`${e}:__gjendje_backup`;function C(l){try{s.getItem(w)===null&&(s.setItem(w,l),chunk5F5C5U62_cjs.g("warn",`Original data for key "${e}" backed up to "${w}" after migration/validation failure.`));}catch(g){chunk5F5C5U62_cjs.g("error",`Failed to backup data for key "${e}" to "${w}" \u2014 original data may be lost.`),chunk5F5C5U62_cjs.h(e,o,g);}}function y(l){if(i){let g=i.parse(l);return ie(g,t,e,t.scope,()=>C(l))}return pe(l,t,e,t.scope,()=>C(l))}function h(){if(p)return f;try{let l=s.getItem(e);if(l===null)return d=null,f=r,p=!0,r;if(l===d)return p=!0,f;let g;try{g=y(l);}catch{return d=void 0,f=void 0,p=!1,r}return g=K(g,r,a),d=l,f=g,p=!0,g}catch{return r}}function b(l){try{let g=Q(l,a),R;try{if(i){let A=n&&n>1?{v:n,data:g}:g;R=i.stringify(A);}else R=he(g,n);}catch(A){let de=new E(e,o,A);throw chunk5F5C5U62_cjs.g("error",`Serialization failed for key "${e}" \u2014 value may contain circular references, BigInt, or other non-serializable types.`),chunk5F5C5U62_cjs.h(e,o,de),de}s.setItem(e,R),d=R,f=a?K(g,r,a):l,p=!0;}catch(g){d=void 0,f=void 0,p=false;let R=g instanceof DOMException&&(g.name==="QuotaExceededError"||g.code===22),A=new E(e,o,g,R);throw chunk5F5C5U62_cjs.g("error",A.message),R&&chunk5F5C5U62_cjs.k(chunk5F5C5U62_cjs.f().onQuotaExceeded,{key:e,scope:o,error:A}),chunk5F5C5U62_cjs.h(e,o,A),A}}let v=r,x=()=>c.notify(v);function j(l){l.storageArea===s&&(l.key!==null&&l.key!==e||l.key!==null&&p&&l.newValue===d||(d=void 0,f=void 0,p=false,v=h(),_(x)));}return typeof window<"u"&&window.addEventListener("storage",j),{ready:chunkSLY2FTN3_cjs.a,get(){return h()},set(l){b(l),v=f,_(x);},subscribe:c.subscribe,destroy(){d=void 0,f=void 0,p=false;try{c.clear();}finally{typeof window<"u"&&window.removeEventListener("storage",j);}}}}function Pe(){return typeof navigator<"u"&&"storageBuckets"in navigator&&navigator.storageBuckets!=null}function ge(s,e,t){if(typeof s=="number")return s;let r=Object.keys(e).sort((c,d)=>d.length-c.length).join("|"),n=s.toLowerCase().match(new RegExp(`^(\\d+(?:\\.\\d+)?)(${r})$`));if(!n?.[1]||!n[2])return;let i=parseFloat(n[1]),a=e[n[2]];if(!a)return;let o=i*a;return t?t(o):o}var Ae={ms:1,s:1e3,m:6e4,h:36e5,d:864e5,w:6048e5},De={b:1,kb:1024,mb:1048576,gb:1073741824};function Ce(s){return ge(s,Ae,e=>Date.now()+e)}function Re(s){return ge(s,De,Math.floor)}function ye(s,e,t){let{default:r}=t,n=e.fallback??"local";if(!e.name||typeof e.name!="string")throw new Error("[gjendje] bucket.name must be a non-empty string.");let i=chunk5F5C5U62_cjs.m(s,"bucket"),a=r,o=()=>i.notify(a),c=n==="session"?sessionStorage:localStorage,d=F(c,s,t),f=false,p;function w(){p?.(),p=d.subscribe(y=>{a=y,_(o);});}return w(),{ready:(async()=>{if(!Pe())return;let y=false;try{let h={persisted:e.persisted??!1,durability:"strict"};if(e.expires!=null){let g=Ce(e.expires);g!=null?h.expires=g:chunk5F5C5U62_cjs.g("warn",`Invalid bucket expires format: "${e.expires}". Expected a number or a string like "7d", "24h", "30m".`);}if(e.quota!=null){let g=Re(e.quota);g!=null?h.quota=g:chunk5F5C5U62_cjs.g("warn",`Invalid bucket quota format: "${e.quota}". Expected a number or a string like "10mb", "50kb", "1gb".`);}let b=navigator.storageBuckets;if(!b)return;let x=await(await b.open(e.name,h)).localStorage();if(f)return;let j=d.get();if(y=!chunkSLY2FTN3_cjs.f(j,r),d.destroy?.(),d=F(x,s,t),f){d.destroy?.();return}let l=d.get();y&&chunkSLY2FTN3_cjs.f(l,r)&&chunk5F5C5U62_cjs.k(chunk5F5C5U62_cjs.f().onExpire,{key:s,scope:"bucket",expiredAt:Date.now()}),y&&d.set(j);}catch(h){chunk5F5C5U62_cjs.g("warn",`Storage Bucket initialization failed for key "${s}" \u2014 using ${n} fallback.`),chunk5F5C5U62_cjs.h(s,"bucket",h);}if(!f){if(!y){let h=d.get();chunkSLY2FTN3_cjs.f(h,r)||(a=h,_(o));}f||w();}})(),get(){return d.get()},set(y){d.set(y);},subscribe:i.subscribe,destroy(){f=true;try{p?.(),i.clear();}finally{d.destroy?.();}}}}function me(s){let e=s,t=new Set,r=()=>{let n=Array.from(t);for(let i=0;i<n.length;i++)chunk5F5C5U62_cjs.i(n[i],e);};return {ready:chunkSLY2FTN3_cjs.a,get(){return e},set(n){e=n,_(r);},subscribe(n){return t.add(n),()=>{t.delete(n);}},destroy(){t.clear();}}}function we(s,e,t){let r=`state:${e}`,n=null;if(typeof BroadcastChannel<"u")try{n=new BroadcastChannel(r);}catch(c){let d=new H(e,t??"local",c);chunk5F5C5U62_cjs.g("warn",`Failed to create BroadcastChannel for key "${e}" \u2014 cross-tab sync disabled.`),t&&chunk5F5C5U62_cjs.h(e,t,d);}let i=chunk5F5C5U62_cjs.m(e,t),a=false,o=s.subscribe(c=>{i.notify(c);});return n&&(n.onmessage=c=>{if(a)return;let d=c.data;if(d==null||typeof d!="object"||!("value"in d)||Object.keys(d).length!==1)return;let f=d.value;try{s.set(f),t&&chunk5F5C5U62_cjs.k(chunk5F5C5U62_cjs.f().onSync,{key:e,scope:t,value:f,source:"remote"});}catch(p){let w=new H(e,t??"local",p);chunk5F5C5U62_cjs.g("error",w.message),t&&chunk5F5C5U62_cjs.h(e,t,w);}}),{get ready(){return s.ready},get(){return s.get()},set(c){if(s.set(c),n)try{n.postMessage({value:c});}catch(d){let f=new H(e,t??"local",d);chunk5F5C5U62_cjs.g("error",f.message),t&&chunk5F5C5U62_cjs.h(e,t,f);}},subscribe(c){return i.subscribe(c)},destroy(){a=true;try{o(),i.clear();try{n?.close();}catch{}}finally{s.destroy?.();}}}}function be(s,e,t,r,n){if(typeof window>"u")throw new Error("[gjendje] URL scope is not available in this environment.");let i=chunk5F5C5U62_cjs.m(s,"url"),a=t.stringify(e),o,c=e;function d(){try{let y=window.location.search;if(y===o)return c;let b=new URLSearchParams(y).get(s);if(b===null)return o=y,c=e,e;let v=K(t.parse(b),e,r);return o=y,c=v,v}catch{return e}}function f(y){try{let h=new URLSearchParams(window.location.search),b=Q(y,r),v=t.stringify(b);v===a?h.delete(s):h.set(s,v);let j=h.toString(),l=j?`${window.location.pathname}?${j}${window.location.hash}`:`${window.location.pathname}${window.location.hash}`;n?window.history.replaceState(null,"",l):window.history.pushState(null,"",l),o=window.location.search,c=r?K(b,e,r):y;}catch(h){o=void 0;let b=new E(s,"url",h);throw chunk5F5C5U62_cjs.g("error",b.message),chunk5F5C5U62_cjs.h(s,"url",b),b}}let p=e,w=()=>i.notify(p);function C(){o=void 0,p=d(),_(w);}return window.addEventListener("popstate",C),{ready:chunkSLY2FTN3_cjs.a,get(){return d()},set(y){f(y),p=c,_(w);},subscribe:i.subscribe,destroy(){try{i.clear();}finally{window.removeEventListener("popstate",C);}}}}function J(){return typeof window>"u"||typeof document>"u"}var ve=new Set(["session","local","url","bucket"]);function Te(s){return J()?chunkSLY2FTN3_cjs.a:new Promise(e=>{Promise.resolve().then(()=>{let t=()=>{try{s();}catch(r){console.error("[gjendje] Hydration callback threw:",r);}e();};typeof requestAnimationFrame<"u"?requestAnimationFrame(t):setTimeout(t,0);});})}var ae,Se=false;function It(s){ae=s;}var oe=new Set(["local","bucket"]);function Ve(s,e,t){if(e.prefix===false)return s;let r=e.prefix??t;return r?`${r}:${s}`:s}function _e(s,e,t){switch(e){case "session":if(typeof sessionStorage>"u")throw new Error('[gjendje] sessionStorage is not available. Use ssr: true or scope: "memory" for server environments.');return F(sessionStorage,s,t);case "local":if(typeof localStorage>"u")throw new Error('[gjendje] localStorage is not available. Use ssr: true or scope: "server" for server environments.');return F(localStorage,s,t);case "url":return be(s,t.default,t.serialize??{stringify:JSON.stringify,parse:JSON.parse},t.persist,t.urlReplace);case "server":if(!ae)throw new Error('[gjendje] scope: "server" requires the server adapter. Import { withServerSession } from "gjendje" or "gjendje/server" to enable it.');return ae(s,t.default);case "bucket":{if(!t.bucket)throw new Error('[gjendje] scope: "bucket" requires a bucket option. Example: { scope: "bucket", bucket: { name: "my-bucket" } }');return ye(s,t.bucket,t)}default:{let r=e;throw new Error(`[gjendje] Unknown scope: ${r}`)}}}var ce=class{key;scope;_adapter;_defaultValue;_options;_rKey;_config;_s;constructor(e,t,r,n,i,a,o){this.key=e,this.scope=t,this._rKey=r,this._adapter=n,this._defaultValue=i.default,this._options=i,this._config=a,this._s=o??{lastValue:n.get(),isDestroyed:false,hasUserWrite:false,interceptors:void 0,changeHandlers:void 0,settled:chunkSLY2FTN3_cjs.a,resolveDestroyed:void 0,destroyed:void 0,hydrated:void 0,watchers:void 0,watchUnsub:void 0,watchPrev:void 0};}get(){return this._s.isDestroyed?this._s.lastValue:this._adapter.get()}peek(){return this._s.isDestroyed?this._s.lastValue:this._adapter.get()}_applyInterceptors(e,t){let r=this._s;if(r.interceptors===void 0||r.interceptors.size===0)return e;let n=e;try{for(let i of r.interceptors)e=i(e,t);}catch(i){let a=new U(this.key,this.scope,i);throw chunk5F5C5U62_cjs.h(this.key,this.scope,a),a}if(e===void 0){chunk5F5C5U62_cjs.g("warn",`Interceptor for state("${this.key}") returned undefined \u2014 ignoring.`);return}if(e instanceof Promise){chunk5F5C5U62_cjs.g("warn",`Interceptor for state("${this.key}") returned a Promise \u2014 interceptors must be synchronous. Ignoring.`);return}return Object.is(n,e)||chunk5F5C5U62_cjs.k(this._config.onIntercept,{key:this.key,scope:this.scope,original:n,intercepted:e}),e}_notifyChange(e,t){let r=this._s;if(r.changeHandlers!==void 0&&r.changeHandlers.size>0){let n=Array.from(r.changeHandlers);for(let i=0;i<n.length;i++)chunk5F5C5U62_cjs.j(n[i],e,t,this.key,this.scope);}chunk5F5C5U62_cjs.l(this._config.onChange,"onChange",{key:this.key,scope:this.scope,value:e,previousValue:t});}set(e){let t=this._s;if(t.isDestroyed)return;let r=this._adapter.get(),n=typeof e=="function"?e(r):e,i=this._applyInterceptors(n,r);if(i!==void 0&&(n=i,!this._options.isEqual?.(n,r))){try{this._adapter.set(n);}catch(a){if(a instanceof E)return;throw a}t.lastValue=n,t.hasUserWrite=true,t.settled=this._adapter.ready,this._notifyChange(n,r);}}subscribe(e){return this._adapter.subscribe(e)}reset(){let e=this._s;if(e.isDestroyed)return;let t=this._adapter.get(),r=this._applyInterceptors(this._defaultValue,t);if(r===void 0)return;let n=r;if(!this._options.isEqual?.(n,t)){try{this._adapter.set(n);}catch(i){if(i instanceof E)return;throw i}e.lastValue=n,e.hasUserWrite=true,e.settled=this._adapter.ready,chunk5F5C5U62_cjs.l(this._config.onReset,"onReset",{key:this.key,scope:this.scope,previousValue:t}),this._notifyChange(n,t);}}get ready(){return this._adapter.ready}get settled(){return this._s.settled}get hydrated(){return this._s.hydrated??chunkSLY2FTN3_cjs.a}get destroyed(){let e=this._s;return e.destroyed||(e.destroyed=new Promise(t=>{e.resolveDestroyed=t;})),e.destroyed}get isDestroyed(){return this._s.isDestroyed}intercept(e){let t=this._s;return t.interceptors||(t.interceptors=new Set),t.interceptors.add(e),()=>{t.interceptors?.delete(e);}}onChange(e){let t=this._s;return t.changeHandlers||(t.changeHandlers=new Set),t.changeHandlers.add(e),()=>{t.changeHandlers?.delete(e);}}watch(e,t){let r=this._s;return r.watchers||(r.watchers=new Map),this._ensureWatchSubscription(),ne(r.watchers,e,t)}patch(e,t){this.set(r=>{if(t?.strict){let n=r,i=e,a={};for(let o of Object.keys(i))Object.hasOwn(n,o)?a[o]=i[o]:chunk5F5C5U62_cjs.g("warn",`patch("${this.key}") ignored unknown key "${o}" (strict mode).`);return {...r,...a}}return {...r,...e}});}mutate(e){let t=this._s;if(t.isDestroyed)return;let r=this._adapter.get();e(r);let n=this._applyInterceptors(r,r);if(n===void 0)return;let i=n;try{this._adapter.set(i);}catch(a){if(a instanceof E)return;throw a}t.lastValue=i,t.hasUserWrite=true,t.settled=this._adapter.ready,this._notifyChange(i,r);}destroy(){let e=this._s;if(!e.isDestroyed){e.lastValue=this.get(),e.isDestroyed=true;try{e.interceptors?.clear(),e.changeHandlers?.clear(),e.watchers?.clear(),e.watchUnsub?.(),this._adapter.destroy?.(),chunk5F5C5U62_cjs.r(this._rKey),chunk5F5C5U62_cjs.l(this._config.onDestroy,"onDestroy",{key:this.key,scope:this.scope});}finally{e.resolveDestroyed?e.resolveDestroyed():e.destroyed=chunkSLY2FTN3_cjs.a;}}}_ensureWatchSubscription(){let e=this._s;e.watchUnsub||(e.watchPrev=this.get(),e.watchUnsub=this.subscribe(t=>{try{e.watchers&&e.watchers.size>0&&se(e.watchers,e.watchPrev,t);}finally{e.watchPrev=t;}}));}};function N(s){return s.ext===void 0&&(s.ext={interceptors:void 0,changeHandlers:void 0,watchers:void 0,watchUnsub:void 0,watchPrev:void 0,resolveDestroyed:void 0,destroyed:void 0}),s.ext}var X=class{key;scope="memory";_c;_defaultValue;_options;_config;_rKey;constructor(e,t,r,n){this.key=e,this._rKey=t,this._defaultValue=r.default,this._options=r,this._config=n,this._c={current:r.default,isDestroyed:false,listeners:void 0,notifyFn:void 0,ext:void 0};}get(){return this._c.current}peek(){return this._c.current}set(e){let t=this._c;if(t.isDestroyed)return;let r=t.current,n=typeof e=="function"?e(r):e,i=t.ext;if(i!==void 0&&i.interceptors!==void 0&&i.interceptors.size>0){let a=n;try{for(let o of i.interceptors)n=o(n,r);}catch(o){let c=new U(this.key,this.scope,o);throw chunk5F5C5U62_cjs.h(this.key,this.scope,c),c}if(n===void 0){chunk5F5C5U62_cjs.g("warn",`Interceptor for state("${this.key}") returned undefined \u2014 ignoring.`);return}if(n instanceof Promise){chunk5F5C5U62_cjs.g("warn",`Interceptor for state("${this.key}") returned a Promise \u2014 interceptors must be synchronous. Ignoring.`);return}Object.is(a,n)||chunk5F5C5U62_cjs.k(this._config.onIntercept,{key:this.key,scope:this.scope,original:a,intercepted:n});}if(!this._options.isEqual?.(n,r)){if(t.current=n,t.notifyFn!==void 0&&_(t.notifyFn),i!==void 0&&i.changeHandlers!==void 0&&i.changeHandlers.size>0){let a=Array.from(i.changeHandlers);for(let o=0;o<a.length;o++)chunk5F5C5U62_cjs.j(a[o],n,r,this.key,this.scope);}chunk5F5C5U62_cjs.l(this._config.onChange,"onChange",{key:this.key,scope:this.scope,value:n,previousValue:r});}}subscribe(e){let t=this._c;if(!t.listeners){let n=new Set,i=this.key,a=this.scope;t.listeners=n,t.notifyFn=()=>{let o=Array.from(n);for(let c=0;c<o.length;c++)chunk5F5C5U62_cjs.i(o[c],t.current,i,a);};}let r=t.listeners;return r.add(e),()=>{r.delete(e);}}reset(){let e=this._c;if(e.isDestroyed)return;let t=e.current,r=this._defaultValue,n=e.ext;if(n!==void 0&&n.interceptors!==void 0&&n.interceptors.size>0){let i=r;try{for(let a of n.interceptors)r=a(r,t);}catch(a){let o=new U(this.key,this.scope,a);throw chunk5F5C5U62_cjs.h(this.key,this.scope,o),o}if(r===void 0){chunk5F5C5U62_cjs.g("warn",`Interceptor for state("${this.key}") returned undefined \u2014 ignoring.`);return}if(r instanceof Promise){chunk5F5C5U62_cjs.g("warn",`Interceptor for state("${this.key}") returned a Promise \u2014 interceptors must be synchronous. Ignoring.`);return}Object.is(i,r)||chunk5F5C5U62_cjs.k(this._config.onIntercept,{key:this.key,scope:this.scope,original:i,intercepted:r});}if(!this._options.isEqual?.(r,t)){if(e.current=r,e.notifyFn!==void 0&&_(e.notifyFn),chunk5F5C5U62_cjs.l(this._config.onReset,"onReset",{key:this.key,scope:this.scope,previousValue:t}),n!==void 0&&n.changeHandlers!==void 0&&n.changeHandlers.size>0){let i=Array.from(n.changeHandlers);for(let a=0;a<i.length;a++)chunk5F5C5U62_cjs.j(i[a],r,t,this.key,this.scope);}chunk5F5C5U62_cjs.l(this._config.onChange,"onChange",{key:this.key,scope:this.scope,value:r,previousValue:t});}}get ready(){return chunkSLY2FTN3_cjs.a}get settled(){return chunkSLY2FTN3_cjs.a}get hydrated(){return chunkSLY2FTN3_cjs.a}get isDestroyed(){return this._c.isDestroyed}get destroyed(){if(this._c.isDestroyed)return chunkSLY2FTN3_cjs.a;let e=N(this._c);return e.destroyed||(e.destroyed=new Promise(t=>{e.resolveDestroyed=t;})),e.destroyed}intercept(e){let t=N(this._c);return t.interceptors||(t.interceptors=new Set),t.interceptors.add(e),()=>{t.interceptors?.delete(e);}}onChange(e){let t=N(this._c);return t.changeHandlers||(t.changeHandlers=new Set),t.changeHandlers.add(e),()=>{t.changeHandlers?.delete(e);}}watch(e,t){let r=N(this._c);return r.watchers||(r.watchers=new Map),this._ensureWatchSubscription(),ne(r.watchers,e,t)}patch(e,t){this.set(r=>{if(t?.strict){let n=r,i=e,a={};for(let o of Object.keys(i))Object.hasOwn(n,o)?a[o]=i[o]:chunk5F5C5U62_cjs.g("warn",`patch("${this.key}") ignored unknown key "${o}" (strict mode).`);return {...r,...a}}return {...r,...e}});}mutate(e){let t=this._c;if(t.isDestroyed)return;let r=t.current;e(r);let n=r,i=t.ext;if(i!==void 0&&i.interceptors!==void 0&&i.interceptors.size>0){let a=n;try{for(let o of i.interceptors)n=o(n,r);}catch(o){let c=new U(this.key,this.scope,o);throw chunk5F5C5U62_cjs.h(this.key,this.scope,c),c}if(n===void 0){chunk5F5C5U62_cjs.g("warn",`Interceptor for state("${this.key}") returned undefined \u2014 ignoring.`);return}if(n instanceof Promise){chunk5F5C5U62_cjs.g("warn",`Interceptor for state("${this.key}") returned a Promise \u2014 interceptors must be synchronous. Ignoring.`);return}Object.is(a,n)||chunk5F5C5U62_cjs.k(this._config.onIntercept,{key:this.key,scope:this.scope,original:a,intercepted:n});}if(t.current=n,t.notifyFn!==void 0&&_(t.notifyFn),i!==void 0&&i.changeHandlers!==void 0&&i.changeHandlers.size>0){let a=Array.from(i.changeHandlers);for(let o=0;o<a.length;o++)chunk5F5C5U62_cjs.j(a[o],n,r,this.key,this.scope);}chunk5F5C5U62_cjs.l(this._config.onChange,"onChange",{key:this.key,scope:this.scope,value:n,previousValue:r});}_ensureWatchSubscription(){let e=N(this._c);e.watchUnsub||(e.watchPrev=this._c.current,e.watchUnsub=this.subscribe(t=>{try{e.watchers&&e.watchers.size>0&&se(e.watchers,e.watchPrev,t);}finally{e.watchPrev=t;}}));}destroy(){let e=this._c;if(e.isDestroyed)return;e.isDestroyed=true;let t=e.ext;try{t!==void 0&&(t.interceptors?.clear(),t.changeHandlers?.clear(),t.watchers?.clear(),t.watchUnsub?.()),e.listeners?.clear(),e.notifyFn=void 0,this._rKey&&chunk5F5C5U62_cjs.r(this._rKey),chunk5F5C5U62_cjs.l(this._config.onDestroy,"onDestroy",{key:this.key,scope:this.scope});}finally{t?.resolveDestroyed?t.resolveDestroyed():t!==void 0&&(t.destroyed=chunkSLY2FTN3_cjs.a);}}};function Ut(s,e){if(!s)throw new Error("[gjendje] key must be a non-empty string.");let t=chunk5F5C5U62_cjs.f();if(t.keyPattern&&!t.keyPattern.test(s))throw new Error(`[gjendje] Key "${s}" does not match the configured keyPattern ${t.keyPattern}.`);if(e.version!==void 0&&(!Number.isSafeInteger(e.version)||e.version<1))throw new Error(`[gjendje] version must be a positive integer, got ${e.version} for state("${s}").`);let r=e.scope??t.scope??"memory",n=r==="render"?"memory":r;if(r==="render"&&!Se&&(Se=true,console.warn('[gjendje] The "render" scope is deprecated. Use "memory" instead. "render" will be removed in the next major version.')),n==="memory"){if((e.sync||t.sync)&&chunk5F5C5U62_cjs.g("warn",'sync: true is ignored for scope "memory". Only "local" and "bucket" scopes support cross-tab sync.'),t.registry===false)return new X(s,"",e,t);let b=chunk5F5C5U62_cjs.o(s,n),v=chunk5F5C5U62_cjs.p(b);if(v&&!v.isDestroyed)return t.warnOnDuplicate&&chunk5F5C5U62_cjs.g("warn",`Duplicate state("${s}") with scope "${n}". Returning cached instance.`),v;let x=new X(s,b,e,t);return chunk5F5C5U62_cjs.q(b,s,n,x,t,v),x}let i=chunk5F5C5U62_cjs.o(s,n),a=chunk5F5C5U62_cjs.p(i);if(a&&!a.isDestroyed)return t.warnOnDuplicate&&chunk5F5C5U62_cjs.g("warn",`Duplicate state("${s}") with scope "${n}". Returning cached instance.`),a;if(t.requireValidation&&chunk5F5C5U62_cjs.c.has(n)&&!e.validate)throw new Error(`[gjendje] A validate function is required for persisted scope "${n}" on state("${s}"). Set requireValidation: false in configure() to disable.`);let o=(e.ssr??t.ssr)&&ve.has(n),c=o&&J(),d=e.sync??(t.sync&&oe.has(n));d&&!oe.has(n)&&chunk5F5C5U62_cjs.g("warn",`sync: true is ignored for scope "${n}". Only "local" and "bucket" scopes support cross-tab sync.`);let f=Ve(s,e,t.prefix),p=n,w=c?me(e.default):_e(f,p,e),y=d&&oe.has(n)&&!c?we(w,f,n):w,h=new ce(s,n,i,y,e,t);return o&&!J()&&(h._s.hydrated=Te(()=>{if(h.isDestroyed||h._s.hasUserWrite)return;let b=h.get();if(!chunkSLY2FTN3_cjs.f(b,e.default))return;let v;try{v=_e(f,p,e);let x=v.get();chunkSLY2FTN3_cjs.f(x,e.default)||h.set(x),chunk5F5C5U62_cjs.k(t.onHydrate,{key:s,scope:n,serverValue:e.default,clientValue:x});}catch(x){chunk5F5C5U62_cjs.g("debug",`Hydration adapter unavailable for state("${s}") \u2014 using memory fallback.`);let j=new G(s,n,x);chunk5F5C5U62_cjs.h(s,n,j);}finally{v?.destroy?.();}})),chunk5F5C5U62_cjs.q(i,s,n,h,t,a),h}exports.a=Ie;exports.b=_;exports.c=$;exports.d=W;exports.e=E;exports.f=q;exports.g=z;exports.h=U;exports.i=le;exports.j=H;exports.k=G;exports.l=ne;exports.m=se;exports.n=It;exports.o=Ut;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
'use strict';var s={},a=new Map;function k(e,t){let n=a.get(e);n||(n=new Set,a.set(e,n)),n.add(t);}function S(e,t){let n=a.get(e);n&&(n.delete(t),n.size===0&&a.delete(e));}function x(e){return a.get(e)}var y=new Set(["local","session","bucket"]),C=new Set(["silent","warn","error","debug"]),w=new Set(["memory","render","session","local","url","server","bucket"]),v=new Set(["scope","keyPattern","logLevel","maxKeys","prefix","registry","requireValidation","ssr","sync","warnOnDuplicate","onDestroy","onError","onHydrate","onMigrate","onQuotaExceeded","onRegister","onSync","onChange","onReset","onIntercept","onValidationFail","onExpire"]);function m(e){if(e.maxKeys!==void 0&&(!Number.isSafeInteger(e.maxKeys)||e.maxKeys<1))throw new Error(`[gjendje] maxKeys must be a positive integer, got ${e.maxKeys}.`);if(e.logLevel!==void 0&&!C.has(e.logLevel))throw new Error(`[gjendje] logLevel must be one of 'silent', 'warn', 'error', 'debug', got '${e.logLevel}'.`);if(e.scope!==void 0&&!w.has(e.scope))throw new Error(`[gjendje] scope must be a valid scope ('memory', 'local', 'session', 'url', 'server', 'bucket'), got '${e.scope}'.`);if(e.keyPattern!==void 0&&!(e.keyPattern instanceof RegExp))throw new Error(`[gjendje] keyPattern must be a RegExp, got ${typeof e.keyPattern}.`);for(let n of Object.keys(e)){v.has(n)||l("warn",`configure() received unknown key "${n}" \u2014 possible typo.`);let o=e[n];o===void 0?delete s[n]:s[n]=o;}let t=s.scope??e.scope;s.registry===false&&t&&y.has(t)&&l("warn",`registry: false has no effect on scope "${t}" \u2014 persistent scopes always use the registry.`);}function h(){s={},a.clear();}function j(){return s}var p={debug:0,warn:1,error:2};function l(e,t){let n=s.logLevel??"warn";n!=="silent"&&p[e]>=p[n]&&console[e](`[gjendje] ${t}`);}function u(e,t,n){if(s.onError!==void 0)try{s.onError({key:e,scope:t,error:n});}catch(o){console.error("[gjendje] onError callback threw:",o);}}function f(e,t,n,o){try{e(t);}catch(r){console.error("[gjendje] Listener threw:",r),n!==void 0&&o!==void 0&&u(n,o,r);}}function L(e,t,n,o,r){try{e(t,n);}catch(i){console.error("[gjendje] Change handler threw:",i),o!==void 0&&r!==void 0&&u(o,r,i);}}function R(e,t){if(e!==void 0)try{e(t);}catch(n){console.error("[gjendje] Config callback threw:",n);}}function g(e,t,n){if(e!==void 0)try{e(n);}catch(r){console.error("[gjendje] Config callback threw:",r);}let o=x(t);if(o!==void 0&&o.size>0)for(let r of o)try{r(n);}catch(i){console.error("[gjendje] Config hook threw:",i);}}function T(e,t){let n=new Set;return {notify(o){let r=Array.from(n);for(let i=0;i<r.length;i++)f(r[i],o,e,t);},subscribe(o){return n.add(o),()=>{n.delete(o);}},clear(){n.clear();}}}function I(e,t){let n=new Set,o;return {notify(r){if(o!==void 0){f(o,r,e,t);return}let i=Array.from(n);for(let c=0;c<i.length;c++)f(i[c],r,e,t);},subscribe(r){return n.add(r),o=n.size===1?r:void 0,()=>{n.delete(r),n.size===1?o=n.values().next().value:o=void 0;}},clear(){n.clear(),o=void 0;}}}function V(e,t){return `${t}:${e}`}var d=new Map;function H(e){return d.get(e)}function A(e,t,n,o,r,i){if(i!==void 0){d.set(e,o),g(r.onRegister,"onRegister",{key:t,scope:n});return}if(r.maxKeys!==void 0&&d.size>=r.maxKeys)throw new Error(`[gjendje] maxKeys limit (${r.maxKeys}) reached. Cannot register state("${t}") with scope "${n}".`);d.set(e,o),g(r.onRegister,"onRegister",{key:t,scope:n});}function D(e){d.delete(e);}function O(){return d}function F(){let e=[...d.values()];d.clear();for(let t of e)t.isDestroyed||t.destroy();}exports.a=k;exports.b=S;exports.c=y;exports.d=m;exports.e=h;exports.f=j;exports.g=l;exports.h=u;exports.i=f;exports.j=L;exports.k=R;exports.l=g;exports.m=T;exports.n=I;exports.o=V;exports.p=H;exports.q=A;exports.r=D;exports.s=O;exports.t=F;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var s={},a=new Map;function k(e,t){let n=a.get(e);n||(n=new Set,a.set(e,n)),n.add(t);}function S(e,t){let n=a.get(e);n&&(n.delete(t),n.size===0&&a.delete(e));}function x(e){return a.get(e)}var y=new Set(["local","session","bucket"]),C=new Set(["silent","warn","error","debug"]),w=new Set(["memory","render","session","local","url","server","bucket"]),v=new Set(["scope","keyPattern","logLevel","maxKeys","prefix","registry","requireValidation","ssr","sync","warnOnDuplicate","onDestroy","onError","onHydrate","onMigrate","onQuotaExceeded","onRegister","onSync","onChange","onReset","onIntercept","onValidationFail","onExpire"]);function m(e){if(e.maxKeys!==void 0&&(!Number.isSafeInteger(e.maxKeys)||e.maxKeys<1))throw new Error(`[gjendje] maxKeys must be a positive integer, got ${e.maxKeys}.`);if(e.logLevel!==void 0&&!C.has(e.logLevel))throw new Error(`[gjendje] logLevel must be one of 'silent', 'warn', 'error', 'debug', got '${e.logLevel}'.`);if(e.scope!==void 0&&!w.has(e.scope))throw new Error(`[gjendje] scope must be a valid scope ('memory', 'local', 'session', 'url', 'server', 'bucket'), got '${e.scope}'.`);if(e.keyPattern!==void 0&&!(e.keyPattern instanceof RegExp))throw new Error(`[gjendje] keyPattern must be a RegExp, got ${typeof e.keyPattern}.`);for(let n of Object.keys(e)){v.has(n)||l("warn",`configure() received unknown key "${n}" \u2014 possible typo.`);let o=e[n];o===void 0?delete s[n]:s[n]=o;}let t=s.scope??e.scope;s.registry===false&&t&&y.has(t)&&l("warn",`registry: false has no effect on scope "${t}" \u2014 persistent scopes always use the registry.`);}function h(){s={},a.clear();}function j(){return s}var p={debug:0,warn:1,error:2};function l(e,t){let n=s.logLevel??"warn";n!=="silent"&&p[e]>=p[n]&&console[e](`[gjendje] ${t}`);}function u(e,t,n){if(s.onError!==void 0)try{s.onError({key:e,scope:t,error:n});}catch(o){console.error("[gjendje] onError callback threw:",o);}}function f(e,t,n,o){try{e(t);}catch(r){console.error("[gjendje] Listener threw:",r),n!==void 0&&o!==void 0&&u(n,o,r);}}function L(e,t,n,o,r){try{e(t,n);}catch(i){console.error("[gjendje] Change handler threw:",i),o!==void 0&&r!==void 0&&u(o,r,i);}}function R(e,t){if(e!==void 0)try{e(t);}catch(n){console.error("[gjendje] Config callback threw:",n);}}function g(e,t,n){if(e!==void 0)try{e(n);}catch(r){console.error("[gjendje] Config callback threw:",r);}let o=x(t);if(o!==void 0&&o.size>0)for(let r of o)try{r(n);}catch(i){console.error("[gjendje] Config hook threw:",i);}}function T(e,t){let n=new Set;return {notify(o){let r=Array.from(n);for(let i=0;i<r.length;i++)f(r[i],o,e,t);},subscribe(o){return n.add(o),()=>{n.delete(o);}},clear(){n.clear();}}}function I(e,t){let n=new Set,o;return {notify(r){if(o!==void 0){f(o,r,e,t);return}let i=Array.from(n);for(let c=0;c<i.length;c++)f(i[c],r,e,t);},subscribe(r){return n.add(r),o=n.size===1?r:void 0,()=>{n.delete(r),n.size===1?o=n.values().next().value:o=void 0;}},clear(){n.clear(),o=void 0;}}}function V(e,t){return `${t}:${e}`}var d=new Map;function H(e){return d.get(e)}function A(e,t,n,o,r,i){if(i!==void 0){d.set(e,o),g(r.onRegister,"onRegister",{key:t,scope:n});return}if(r.maxKeys!==void 0&&d.size>=r.maxKeys)throw new Error(`[gjendje] maxKeys limit (${r.maxKeys}) reached. Cannot register state("${t}") with scope "${n}".`);d.set(e,o),g(r.onRegister,"onRegister",{key:t,scope:n});}function D(e){d.delete(e);}function O(){return d}function F(){let e=[...d.values()];d.clear();for(let t of e)t.isDestroyed||t.destroy();}export{k as a,S as b,y as c,m as d,h as e,j as f,l as g,u as h,f as i,L as j,R as k,g as l,T as m,I as n,V as o,H as p,A as q,D as r,O as s,F as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import {e,a,f as f$1}from'./chunk-XP3O35DV.js';import {h,i,f,g,o,p,q as q$1,c,k,j,l,r,m}from'./chunk-6CL7CC45.js';var M=0,re=0,I=[],fe=new WeakMap;function Ie(s){M++;try{s();}finally{M--,M===0&&ke();}}function _(s){if(M>0){fe.get(s)!==re&&(fe.set(s,re),I.push(s));return}s();}var xe=100;function ke(){let s=0;for(;I.length>0;){if(++s>xe){console.error("[gjendje] Batch flush exceeded maximum iterations \u2014 possible infinite loop. Delivering remaining notifications once before stopping.");let t=I;I=[];for(let r=0;r<t.length;r++){let n=t[r];try{n&&n();}catch(i){console.error("[gjendje] Notification threw during best-effort delivery:",i),h("batch","memory",i);}}I=[];break}re++;let e=I;I=[],M++;try{for(let t=0;t<e.length;t++){let r=e[t];try{r&&r();}catch(n){console.error("[gjendje] Notification threw:",n),h("batch","memory",n);}}}finally{M--;}}}var $=class extends Error{key;scope;constructor(e,t,r,n){super(e,n),this.name="GjendjeError",this.key=t,this.scope=r;}},W=class extends ${constructor(e,t,r){super(`Failed to read key "${e}" from ${t} storage.`,e,t,r!==void 0?{cause:r}:void 0),this.name="StorageReadError";}},E=class extends ${isQuotaError;constructor(e,t,r,n=false){super(n?`Storage quota exceeded writing key "${e}" to ${t} storage.`:`Failed to write key "${e}" to ${t} storage.`,e,t,r!==void 0?{cause:r}:void 0),this.name="StorageWriteError",this.isQuotaError=n;}},q=class extends ${fromVersion;toVersion;constructor(e,t,r,n,i){super(`Migration from v${r} to v${n} failed for key "${e}".`,e,t,i!==void 0?{cause:i}:void 0),this.name="MigrationError",this.fromVersion=r,this.toVersion=n;}},z=class extends ${rejectedValue;constructor(e,t,r){super(`Validation failed for key "${e}" in ${t} storage.`,e,t),this.name="ValidationError",this.rejectedValue=r;}},U=class extends ${constructor(e,t,r){super(`Interceptor threw for key "${e}".`,e,t,r!==void 0?{cause:r}:void 0),this.name="InterceptorError";}},le=class extends ${constructor(e,t,r){super(`Computed derivation threw for "${e}".`,e,t,r!==void 0?{cause:r}:void 0),this.name="ComputedError";}},H=class extends ${constructor(e,t,r){super(`Cross-tab sync failed for key "${e}".`,e,t,r!==void 0?{cause:r}:void 0),this.name="SyncError";}},G=class extends ${constructor(e,t,r){super(`Hydration failed for key "${e}" \u2014 adapter unavailable.`,e,t,r!==void 0?{cause:r}:void 0),this.name="HydrationError";}};function ne(s,e,t){let r=s.get(e);return r||(r=new Set,s.set(e,r)),r.add(t),()=>{r.delete(t),r.size===0&&s.delete(e);}}function se(s,e$1,t){let r=e(e$1)?e$1:void 0,n=e(t)?t:void 0,i$1=Array.from(s);for(let a=0;a<i$1.length;a++){let[o,c]=i$1[a],d=r?.[o],f=n?.[o];if(!Object.is(d,f)){let p=Array.from(c);for(let w=0;w<p.length;w++)i(p[w],f);}}}function Ee(s){return e(s)?Object.keys(s).length===2&&"v"in s&&"data"in s&&Number.isSafeInteger(s.v):false}function ie(s,e,t,r,n){let i=e.version??1,a=e.default,o=1,c;if(Ee(s)?(o=s.v,c=s.data):c=s,o>i&&g("warn",`Stored version (v${o}) is higher than current version (v${i}) for key "${t??"unknown"}" \u2014 data may be from a newer app version. Returning as-is.`),o<i&&e.migrate&&(c=$e(c,o,i,e.migrate,t,r),t&&r&&k(f().onMigrate,{key:t,scope:r,fromVersion:o,toVersion:i,data:c})),e.validate&&!e.validate(c)){if(t&&r){let d=f();k(d.onValidationFail,{key:t,scope:r,value:c});let f$1=new z(t,r,c);k(d.onError,{key:t,scope:r,error:f$1});}return n?.(),a}return c}function pe(s,e,t,r,n){try{let i=JSON.parse(s);return ie(i,e,t,r,n)}catch(i){if(g("debug","Failed to read/migrate stored value \u2014 falling back to default."),t&&r){let a=new W(t,r,i);k(f().onError,{key:t,scope:r,error:a});}return n?.(),e.default}}function he(s,e){return JSON.stringify(!e||e===1?s:{v:e,data:s})}function Q(s,e$1){if(!e$1||!e(s))return s;let t={};for(let r of e$1)Object.hasOwn(s,r)&&(t[r]=s[r]);return t}function K(s,e$1,t){return !t||!e(s)?s:{...e$1,...s}}var je=1e3;function $e(s,e,t,r,n,i){if(e<0||t<0||t-e>je)return g("warn",`Migration range v${e}\u2192v${t} is out of bounds \u2014 skipping.`),s;if(e>t)return g("warn",`Stored version (v${e}) is higher than current version (v${t}) for key "${n??"unknown"}" \u2014 data may be from a newer app version. Returning as-is.`),s;let a=s;for(let o=e;o<t;o++){let c=r[o];if(c)try{a=c(a);}catch(d){g("warn",`Migration from v${o} failed \u2014 discarding partially migrated data.`);let f$1=new q(n??"",i??"memory",o,t,d);throw n&&i&&k(f().onError,{key:n,scope:i,error:f$1}),f$1}}return a}function F(s,e,t){let{default:r,version:n,serialize:i,persist:a$1}=t,o=t.scope??"local",c=m(e,o),d,f$1,p=false,w=`${e}:__gjendje_backup`;function C(l){try{s.getItem(w)===null&&(s.setItem(w,l),g("warn",`Original data for key "${e}" backed up to "${w}" after migration/validation failure.`));}catch(g$1){g("error",`Failed to backup data for key "${e}" to "${w}" \u2014 original data may be lost.`),h(e,o,g$1);}}function y(l){if(i){let g=i.parse(l);return ie(g,t,e,t.scope,()=>C(l))}return pe(l,t,e,t.scope,()=>C(l))}function h$1(){if(p)return f$1;try{let l=s.getItem(e);if(l===null)return d=null,f$1=r,p=!0,r;if(l===d)return p=!0,f$1;let g;try{g=y(l);}catch{return d=void 0,f$1=void 0,p=!1,r}return g=K(g,r,a$1),d=l,f$1=g,p=!0,g}catch{return r}}function b(l){try{let g$1=Q(l,a$1),R;try{if(i){let A=n&&n>1?{v:n,data:g$1}:g$1;R=i.stringify(A);}else R=he(g$1,n);}catch(A){let de=new E(e,o,A);throw g("error",`Serialization failed for key "${e}" \u2014 value may contain circular references, BigInt, or other non-serializable types.`),h(e,o,de),de}s.setItem(e,R),d=R,f$1=a$1?K(g$1,r,a$1):l,p=!0;}catch(g$1){d=void 0,f$1=void 0,p=false;let R=g$1 instanceof DOMException&&(g$1.name==="QuotaExceededError"||g$1.code===22),A=new E(e,o,g$1,R);throw g("error",A.message),R&&k(f().onQuotaExceeded,{key:e,scope:o,error:A}),h(e,o,A),A}}let v=r,x=()=>c.notify(v);function j(l){l.storageArea===s&&(l.key!==null&&l.key!==e||l.key!==null&&p&&l.newValue===d||(d=void 0,f$1=void 0,p=false,v=h$1(),_(x)));}return typeof window<"u"&&window.addEventListener("storage",j),{ready:a,get(){return h$1()},set(l){b(l),v=f$1,_(x);},subscribe:c.subscribe,destroy(){d=void 0,f$1=void 0,p=false;try{c.clear();}finally{typeof window<"u"&&window.removeEventListener("storage",j);}}}}function Pe(){return typeof navigator<"u"&&"storageBuckets"in navigator&&navigator.storageBuckets!=null}function ge(s,e,t){if(typeof s=="number")return s;let r=Object.keys(e).sort((c,d)=>d.length-c.length).join("|"),n=s.toLowerCase().match(new RegExp(`^(\\d+(?:\\.\\d+)?)(${r})$`));if(!n?.[1]||!n[2])return;let i=parseFloat(n[1]),a=e[n[2]];if(!a)return;let o=i*a;return t?t(o):o}var Ae={ms:1,s:1e3,m:6e4,h:36e5,d:864e5,w:6048e5},De={b:1,kb:1024,mb:1048576,gb:1073741824};function Ce(s){return ge(s,Ae,e=>Date.now()+e)}function Re(s){return ge(s,De,Math.floor)}function ye(s,e,t){let{default:r}=t,n=e.fallback??"local";if(!e.name||typeof e.name!="string")throw new Error("[gjendje] bucket.name must be a non-empty string.");let i=m(s,"bucket"),a=r,o=()=>i.notify(a),c=n==="session"?sessionStorage:localStorage,d=F(c,s,t),f$2=false,p;function w(){p?.(),p=d.subscribe(y=>{a=y,_(o);});}return w(),{ready:(async()=>{if(!Pe())return;let y=false;try{let h={persisted:e.persisted??!1,durability:"strict"};if(e.expires!=null){let g$1=Ce(e.expires);g$1!=null?h.expires=g$1:g("warn",`Invalid bucket expires format: "${e.expires}". Expected a number or a string like "7d", "24h", "30m".`);}if(e.quota!=null){let g$1=Re(e.quota);g$1!=null?h.quota=g$1:g("warn",`Invalid bucket quota format: "${e.quota}". Expected a number or a string like "10mb", "50kb", "1gb".`);}let b=navigator.storageBuckets;if(!b)return;let x=await(await b.open(e.name,h)).localStorage();if(f$2)return;let j=d.get();if(y=!f$1(j,r),d.destroy?.(),d=F(x,s,t),f$2){d.destroy?.();return}let l=d.get();y&&f$1(l,r)&&k(f().onExpire,{key:s,scope:"bucket",expiredAt:Date.now()}),y&&d.set(j);}catch(h$1){g("warn",`Storage Bucket initialization failed for key "${s}" \u2014 using ${n} fallback.`),h(s,"bucket",h$1);}if(!f$2){if(!y){let h=d.get();f$1(h,r)||(a=h,_(o));}f$2||w();}})(),get(){return d.get()},set(y){d.set(y);},subscribe:i.subscribe,destroy(){f$2=true;try{p?.(),i.clear();}finally{d.destroy?.();}}}}function me(s){let e=s,t=new Set,r=()=>{let n=Array.from(t);for(let i$1=0;i$1<n.length;i$1++)i(n[i$1],e);};return {ready:a,get(){return e},set(n){e=n,_(r);},subscribe(n){return t.add(n),()=>{t.delete(n);}},destroy(){t.clear();}}}function we(s,e,t){let r=`state:${e}`,n=null;if(typeof BroadcastChannel<"u")try{n=new BroadcastChannel(r);}catch(c){let d=new H(e,t??"local",c);g("warn",`Failed to create BroadcastChannel for key "${e}" \u2014 cross-tab sync disabled.`),t&&h(e,t,d);}let i=m(e,t),a=false,o=s.subscribe(c=>{i.notify(c);});return n&&(n.onmessage=c=>{if(a)return;let d=c.data;if(d==null||typeof d!="object"||!("value"in d)||Object.keys(d).length!==1)return;let f$1=d.value;try{s.set(f$1),t&&k(f().onSync,{key:e,scope:t,value:f$1,source:"remote"});}catch(p){let w=new H(e,t??"local",p);g("error",w.message),t&&h(e,t,w);}}),{get ready(){return s.ready},get(){return s.get()},set(c){if(s.set(c),n)try{n.postMessage({value:c});}catch(d){let f=new H(e,t??"local",d);g("error",f.message),t&&h(e,t,f);}},subscribe(c){return i.subscribe(c)},destroy(){a=true;try{o(),i.clear();try{n?.close();}catch{}}finally{s.destroy?.();}}}}function be(s,e,t,r,n){if(typeof window>"u")throw new Error("[gjendje] URL scope is not available in this environment.");let i=m(s,"url"),a$1=t.stringify(e),o,c=e;function d(){try{let y=window.location.search;if(y===o)return c;let b=new URLSearchParams(y).get(s);if(b===null)return o=y,c=e,e;let v=K(t.parse(b),e,r);return o=y,c=v,v}catch{return e}}function f(y){try{let h=new URLSearchParams(window.location.search),b=Q(y,r),v=t.stringify(b);v===a$1?h.delete(s):h.set(s,v);let j=h.toString(),l=j?`${window.location.pathname}?${j}${window.location.hash}`:`${window.location.pathname}${window.location.hash}`;n?window.history.replaceState(null,"",l):window.history.pushState(null,"",l),o=window.location.search,c=r?K(b,e,r):y;}catch(h$1){o=void 0;let b=new E(s,"url",h$1);throw g("error",b.message),h(s,"url",b),b}}let p=e,w=()=>i.notify(p);function C(){o=void 0,p=d(),_(w);}return window.addEventListener("popstate",C),{ready:a,get(){return d()},set(y){f(y),p=c,_(w);},subscribe:i.subscribe,destroy(){try{i.clear();}finally{window.removeEventListener("popstate",C);}}}}function J(){return typeof window>"u"||typeof document>"u"}var ve=new Set(["session","local","url","bucket"]);function Te(s){return J()?a:new Promise(e=>{Promise.resolve().then(()=>{let t=()=>{try{s();}catch(r){console.error("[gjendje] Hydration callback threw:",r);}e();};typeof requestAnimationFrame<"u"?requestAnimationFrame(t):setTimeout(t,0);});})}var ae,Se=false;function It(s){ae=s;}var oe=new Set(["local","bucket"]);function Ve(s,e,t){if(e.prefix===false)return s;let r=e.prefix??t;return r?`${r}:${s}`:s}function _e(s,e,t){switch(e){case "session":if(typeof sessionStorage>"u")throw new Error('[gjendje] sessionStorage is not available. Use ssr: true or scope: "memory" for server environments.');return F(sessionStorage,s,t);case "local":if(typeof localStorage>"u")throw new Error('[gjendje] localStorage is not available. Use ssr: true or scope: "server" for server environments.');return F(localStorage,s,t);case "url":return be(s,t.default,t.serialize??{stringify:JSON.stringify,parse:JSON.parse},t.persist,t.urlReplace);case "server":if(!ae)throw new Error('[gjendje] scope: "server" requires the server adapter. Import { withServerSession } from "gjendje" or "gjendje/server" to enable it.');return ae(s,t.default);case "bucket":{if(!t.bucket)throw new Error('[gjendje] scope: "bucket" requires a bucket option. Example: { scope: "bucket", bucket: { name: "my-bucket" } }');return ye(s,t.bucket,t)}default:{let r=e;throw new Error(`[gjendje] Unknown scope: ${r}`)}}}var ce=class{key;scope;_adapter;_defaultValue;_options;_rKey;_config;_s;constructor(e,t,r,n,i,a$1,o){this.key=e,this.scope=t,this._rKey=r,this._adapter=n,this._defaultValue=i.default,this._options=i,this._config=a$1,this._s=o??{lastValue:n.get(),isDestroyed:false,hasUserWrite:false,interceptors:void 0,changeHandlers:void 0,settled:a,resolveDestroyed:void 0,destroyed:void 0,hydrated:void 0,watchers:void 0,watchUnsub:void 0,watchPrev:void 0};}get(){return this._s.isDestroyed?this._s.lastValue:this._adapter.get()}peek(){return this._s.isDestroyed?this._s.lastValue:this._adapter.get()}_applyInterceptors(e,t){let r=this._s;if(r.interceptors===void 0||r.interceptors.size===0)return e;let n=e;try{for(let i of r.interceptors)e=i(e,t);}catch(i){let a=new U(this.key,this.scope,i);throw h(this.key,this.scope,a),a}if(e===void 0){g("warn",`Interceptor for state("${this.key}") returned undefined \u2014 ignoring.`);return}if(e instanceof Promise){g("warn",`Interceptor for state("${this.key}") returned a Promise \u2014 interceptors must be synchronous. Ignoring.`);return}return Object.is(n,e)||k(this._config.onIntercept,{key:this.key,scope:this.scope,original:n,intercepted:e}),e}_notifyChange(e,t){let r=this._s;if(r.changeHandlers!==void 0&&r.changeHandlers.size>0){let n=Array.from(r.changeHandlers);for(let i=0;i<n.length;i++)j(n[i],e,t,this.key,this.scope);}l(this._config.onChange,"onChange",{key:this.key,scope:this.scope,value:e,previousValue:t});}set(e){let t=this._s;if(t.isDestroyed)return;let r=this._adapter.get(),n=typeof e=="function"?e(r):e,i=this._applyInterceptors(n,r);if(i!==void 0&&(n=i,!this._options.isEqual?.(n,r))){try{this._adapter.set(n);}catch(a){if(a instanceof E)return;throw a}t.lastValue=n,t.hasUserWrite=true,t.settled=this._adapter.ready,this._notifyChange(n,r);}}subscribe(e){return this._adapter.subscribe(e)}reset(){let e=this._s;if(e.isDestroyed)return;let t=this._adapter.get(),r=this._applyInterceptors(this._defaultValue,t);if(r===void 0)return;let n=r;if(!this._options.isEqual?.(n,t)){try{this._adapter.set(n);}catch(i){if(i instanceof E)return;throw i}e.lastValue=n,e.hasUserWrite=true,e.settled=this._adapter.ready,l(this._config.onReset,"onReset",{key:this.key,scope:this.scope,previousValue:t}),this._notifyChange(n,t);}}get ready(){return this._adapter.ready}get settled(){return this._s.settled}get hydrated(){return this._s.hydrated??a}get destroyed(){let e=this._s;return e.destroyed||(e.destroyed=new Promise(t=>{e.resolveDestroyed=t;})),e.destroyed}get isDestroyed(){return this._s.isDestroyed}intercept(e){let t=this._s;return t.interceptors||(t.interceptors=new Set),t.interceptors.add(e),()=>{t.interceptors?.delete(e);}}onChange(e){let t=this._s;return t.changeHandlers||(t.changeHandlers=new Set),t.changeHandlers.add(e),()=>{t.changeHandlers?.delete(e);}}watch(e,t){let r=this._s;return r.watchers||(r.watchers=new Map),this._ensureWatchSubscription(),ne(r.watchers,e,t)}patch(e,t){this.set(r=>{if(t?.strict){let n=r,i=e,a={};for(let o of Object.keys(i))Object.hasOwn(n,o)?a[o]=i[o]:g("warn",`patch("${this.key}") ignored unknown key "${o}" (strict mode).`);return {...r,...a}}return {...r,...e}});}mutate(e){let t=this._s;if(t.isDestroyed)return;let r=this._adapter.get();e(r);let n=this._applyInterceptors(r,r);if(n===void 0)return;let i=n;try{this._adapter.set(i);}catch(a){if(a instanceof E)return;throw a}t.lastValue=i,t.hasUserWrite=true,t.settled=this._adapter.ready,this._notifyChange(i,r);}destroy(){let e=this._s;if(!e.isDestroyed){e.lastValue=this.get(),e.isDestroyed=true;try{e.interceptors?.clear(),e.changeHandlers?.clear(),e.watchers?.clear(),e.watchUnsub?.(),this._adapter.destroy?.(),r(this._rKey),l(this._config.onDestroy,"onDestroy",{key:this.key,scope:this.scope});}finally{e.resolveDestroyed?e.resolveDestroyed():e.destroyed=a;}}}_ensureWatchSubscription(){let e=this._s;e.watchUnsub||(e.watchPrev=this.get(),e.watchUnsub=this.subscribe(t=>{try{e.watchers&&e.watchers.size>0&&se(e.watchers,e.watchPrev,t);}finally{e.watchPrev=t;}}));}};function N(s){return s.ext===void 0&&(s.ext={interceptors:void 0,changeHandlers:void 0,watchers:void 0,watchUnsub:void 0,watchPrev:void 0,resolveDestroyed:void 0,destroyed:void 0}),s.ext}var X=class{key;scope="memory";_c;_defaultValue;_options;_config;_rKey;constructor(e,t,r,n){this.key=e,this._rKey=t,this._defaultValue=r.default,this._options=r,this._config=n,this._c={current:r.default,isDestroyed:false,listeners:void 0,notifyFn:void 0,ext:void 0};}get(){return this._c.current}peek(){return this._c.current}set(e){let t=this._c;if(t.isDestroyed)return;let r=t.current,n=typeof e=="function"?e(r):e,i=t.ext;if(i!==void 0&&i.interceptors!==void 0&&i.interceptors.size>0){let a=n;try{for(let o of i.interceptors)n=o(n,r);}catch(o){let c=new U(this.key,this.scope,o);throw h(this.key,this.scope,c),c}if(n===void 0){g("warn",`Interceptor for state("${this.key}") returned undefined \u2014 ignoring.`);return}if(n instanceof Promise){g("warn",`Interceptor for state("${this.key}") returned a Promise \u2014 interceptors must be synchronous. Ignoring.`);return}Object.is(a,n)||k(this._config.onIntercept,{key:this.key,scope:this.scope,original:a,intercepted:n});}if(!this._options.isEqual?.(n,r)){if(t.current=n,t.notifyFn!==void 0&&_(t.notifyFn),i!==void 0&&i.changeHandlers!==void 0&&i.changeHandlers.size>0){let a=Array.from(i.changeHandlers);for(let o=0;o<a.length;o++)j(a[o],n,r,this.key,this.scope);}l(this._config.onChange,"onChange",{key:this.key,scope:this.scope,value:n,previousValue:r});}}subscribe(e){let t=this._c;if(!t.listeners){let n=new Set,i$1=this.key,a=this.scope;t.listeners=n,t.notifyFn=()=>{let o=Array.from(n);for(let c=0;c<o.length;c++)i(o[c],t.current,i$1,a);};}let r=t.listeners;return r.add(e),()=>{r.delete(e);}}reset(){let e=this._c;if(e.isDestroyed)return;let t=e.current,r=this._defaultValue,n=e.ext;if(n!==void 0&&n.interceptors!==void 0&&n.interceptors.size>0){let i=r;try{for(let a of n.interceptors)r=a(r,t);}catch(a){let o=new U(this.key,this.scope,a);throw h(this.key,this.scope,o),o}if(r===void 0){g("warn",`Interceptor for state("${this.key}") returned undefined \u2014 ignoring.`);return}if(r instanceof Promise){g("warn",`Interceptor for state("${this.key}") returned a Promise \u2014 interceptors must be synchronous. Ignoring.`);return}Object.is(i,r)||k(this._config.onIntercept,{key:this.key,scope:this.scope,original:i,intercepted:r});}if(!this._options.isEqual?.(r,t)){if(e.current=r,e.notifyFn!==void 0&&_(e.notifyFn),l(this._config.onReset,"onReset",{key:this.key,scope:this.scope,previousValue:t}),n!==void 0&&n.changeHandlers!==void 0&&n.changeHandlers.size>0){let i=Array.from(n.changeHandlers);for(let a=0;a<i.length;a++)j(i[a],r,t,this.key,this.scope);}l(this._config.onChange,"onChange",{key:this.key,scope:this.scope,value:r,previousValue:t});}}get ready(){return a}get settled(){return a}get hydrated(){return a}get isDestroyed(){return this._c.isDestroyed}get destroyed(){if(this._c.isDestroyed)return a;let e=N(this._c);return e.destroyed||(e.destroyed=new Promise(t=>{e.resolveDestroyed=t;})),e.destroyed}intercept(e){let t=N(this._c);return t.interceptors||(t.interceptors=new Set),t.interceptors.add(e),()=>{t.interceptors?.delete(e);}}onChange(e){let t=N(this._c);return t.changeHandlers||(t.changeHandlers=new Set),t.changeHandlers.add(e),()=>{t.changeHandlers?.delete(e);}}watch(e,t){let r=N(this._c);return r.watchers||(r.watchers=new Map),this._ensureWatchSubscription(),ne(r.watchers,e,t)}patch(e,t){this.set(r=>{if(t?.strict){let n=r,i=e,a={};for(let o of Object.keys(i))Object.hasOwn(n,o)?a[o]=i[o]:g("warn",`patch("${this.key}") ignored unknown key "${o}" (strict mode).`);return {...r,...a}}return {...r,...e}});}mutate(e){let t=this._c;if(t.isDestroyed)return;let r=t.current;e(r);let n=r,i=t.ext;if(i!==void 0&&i.interceptors!==void 0&&i.interceptors.size>0){let a=n;try{for(let o of i.interceptors)n=o(n,r);}catch(o){let c=new U(this.key,this.scope,o);throw h(this.key,this.scope,c),c}if(n===void 0){g("warn",`Interceptor for state("${this.key}") returned undefined \u2014 ignoring.`);return}if(n instanceof Promise){g("warn",`Interceptor for state("${this.key}") returned a Promise \u2014 interceptors must be synchronous. Ignoring.`);return}Object.is(a,n)||k(this._config.onIntercept,{key:this.key,scope:this.scope,original:a,intercepted:n});}if(t.current=n,t.notifyFn!==void 0&&_(t.notifyFn),i!==void 0&&i.changeHandlers!==void 0&&i.changeHandlers.size>0){let a=Array.from(i.changeHandlers);for(let o=0;o<a.length;o++)j(a[o],n,r,this.key,this.scope);}l(this._config.onChange,"onChange",{key:this.key,scope:this.scope,value:n,previousValue:r});}_ensureWatchSubscription(){let e=N(this._c);e.watchUnsub||(e.watchPrev=this._c.current,e.watchUnsub=this.subscribe(t=>{try{e.watchers&&e.watchers.size>0&&se(e.watchers,e.watchPrev,t);}finally{e.watchPrev=t;}}));}destroy(){let e=this._c;if(e.isDestroyed)return;e.isDestroyed=true;let t=e.ext;try{t!==void 0&&(t.interceptors?.clear(),t.changeHandlers?.clear(),t.watchers?.clear(),t.watchUnsub?.()),e.listeners?.clear(),e.notifyFn=void 0,this._rKey&&r(this._rKey),l(this._config.onDestroy,"onDestroy",{key:this.key,scope:this.scope});}finally{t?.resolveDestroyed?t.resolveDestroyed():t!==void 0&&(t.destroyed=a);}}};function Ut(s,e){if(!s)throw new Error("[gjendje] key must be a non-empty string.");let t=f();if(t.keyPattern&&!t.keyPattern.test(s))throw new Error(`[gjendje] Key "${s}" does not match the configured keyPattern ${t.keyPattern}.`);if(e.version!==void 0&&(!Number.isSafeInteger(e.version)||e.version<1))throw new Error(`[gjendje] version must be a positive integer, got ${e.version} for state("${s}").`);let r=e.scope??t.scope??"memory",n=r==="render"?"memory":r;if(r==="render"&&!Se&&(Se=true,console.warn('[gjendje] The "render" scope is deprecated. Use "memory" instead. "render" will be removed in the next major version.')),n==="memory"){if((e.sync||t.sync)&&g("warn",'sync: true is ignored for scope "memory". Only "local" and "bucket" scopes support cross-tab sync.'),t.registry===false)return new X(s,"",e,t);let b=o(s,n),v=p(b);if(v&&!v.isDestroyed)return t.warnOnDuplicate&&g("warn",`Duplicate state("${s}") with scope "${n}". Returning cached instance.`),v;let x=new X(s,b,e,t);return q$1(b,s,n,x,t,v),x}let i=o(s,n),a=p(i);if(a&&!a.isDestroyed)return t.warnOnDuplicate&&g("warn",`Duplicate state("${s}") with scope "${n}". Returning cached instance.`),a;if(t.requireValidation&&c.has(n)&&!e.validate)throw new Error(`[gjendje] A validate function is required for persisted scope "${n}" on state("${s}"). Set requireValidation: false in configure() to disable.`);let o$1=(e.ssr??t.ssr)&&ve.has(n),c$1=o$1&&J(),d=e.sync??(t.sync&&oe.has(n));d&&!oe.has(n)&&g("warn",`sync: true is ignored for scope "${n}". Only "local" and "bucket" scopes support cross-tab sync.`);let f$2=Ve(s,e,t.prefix),p$1=n,w=c$1?me(e.default):_e(f$2,p$1,e),y=d&&oe.has(n)&&!c$1?we(w,f$2,n):w,h$1=new ce(s,n,i,y,e,t);return o$1&&!J()&&(h$1._s.hydrated=Te(()=>{if(h$1.isDestroyed||h$1._s.hasUserWrite)return;let b=h$1.get();if(!f$1(b,e.default))return;let v;try{v=_e(f$2,p$1,e);let x=v.get();f$1(x,e.default)||h$1.set(x),k(t.onHydrate,{key:s,scope:n,serverValue:e.default,clientValue:x});}catch(x){g("debug",`Hydration adapter unavailable for state("${s}") \u2014 using memory fallback.`);let j=new G(s,n,x);h(s,n,j);}finally{v?.destroy?.();}})),q$1(i,s,n,h$1,t,a),h$1}export{Ie as a,_ as b,$ as c,W as d,E as e,q as f,z as g,U as h,le as i,H as j,G as k,ne as l,se as m,It as n,Ut as o};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
'use strict';var l=Promise.resolve(),u=()=>{};function c(e,n){let t=e.length,s=new Array(t);for(let o=0;o<t;o++)s[o]=e[o].subscribe(n);return s}function a(e){for(let n=0;n<e.length;n++){let t=e[n];t&&t();}e.length=0;}function y(e){return e!==null&&typeof e=="object"}function d(e,n){if(Object.is(e,n))return true;if(typeof e!=typeof n||e===null||n===null||typeof e!="object"||typeof n!="object")return false;if(Array.isArray(e)){if(!Array.isArray(n)||e.length!==n.length)return false;for(let r=0;r<e.length;r++)if(!Object.is(e[r],n[r]))return false;return true}if(Array.isArray(n))return false;if(e instanceof Set){if(!(n instanceof Set)||e.size!==n.size)return false;for(let r of e)if(!n.has(r))return false;return true}if(e instanceof Map){if(!(n instanceof Map)||e.size!==n.size)return false;for(let[r,i]of e)if(!n.has(r)||!Object.is(i,n.get(r)))return false;return true}if(e instanceof Date)return n instanceof Date&&e.getTime()===n.getTime();if(e instanceof RegExp)return n instanceof RegExp&&e.toString()===n.toString();let t=e,s=n,o=Object.keys(t),f=Object.keys(s);if(o.length!==f.length)return false;for(let r=0;r<o.length;r++){let i=o[r];if(!Object.hasOwn(s,i)||!Object.is(t[i],s[i]))return false}return true}function p(e){return typeof e.set=="function"}function v(){let e,n;return {get promise(){return e||(e=new Promise(t=>{n=t;})),e},resolve(){n?n():e=Promise.resolve();}}}exports.a=l;exports.b=u;exports.c=c;exports.d=a;exports.e=y;exports.f=d;exports.g=p;exports.h=v;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var l=Promise.resolve(),u=()=>{};function c(e,n){let t=e.length,s=new Array(t);for(let o=0;o<t;o++)s[o]=e[o].subscribe(n);return s}function a(e){for(let n=0;n<e.length;n++){let t=e[n];t&&t();}e.length=0;}function y(e){return e!==null&&typeof e=="object"}function d(e,n){if(Object.is(e,n))return true;if(typeof e!=typeof n||e===null||n===null||typeof e!="object"||typeof n!="object")return false;if(Array.isArray(e)){if(!Array.isArray(n)||e.length!==n.length)return false;for(let r=0;r<e.length;r++)if(!Object.is(e[r],n[r]))return false;return true}if(Array.isArray(n))return false;if(e instanceof Set){if(!(n instanceof Set)||e.size!==n.size)return false;for(let r of e)if(!n.has(r))return false;return true}if(e instanceof Map){if(!(n instanceof Map)||e.size!==n.size)return false;for(let[r,i]of e)if(!n.has(r)||!Object.is(i,n.get(r)))return false;return true}if(e instanceof Date)return n instanceof Date&&e.getTime()===n.getTime();if(e instanceof RegExp)return n instanceof RegExp&&e.toString()===n.toString();let t=e,s=n,o=Object.keys(t),f=Object.keys(s);if(o.length!==f.length)return false;for(let r=0;r<o.length;r++){let i=o[r];if(!Object.hasOwn(s,i)||!Object.is(t[i],s[i]))return false}return true}function p(e){return typeof e.set=="function"}function v(){let e,n;return {get promise(){return e||(e=new Promise(t=>{n=t;})),e},resolve(){n?n():e=Promise.resolve();}}}export{l as a,u as b,c,a as d,y as e,d as f,p as g,v as h};
|
package/dist/devtools.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunk5F5C5U62_cjs=require('./chunk-5F5C5U62.cjs');var s,r=false,A={memory:"#9e9e9e",session:"#ff9800",local:"#4caf50",url:"#2196f3",server:"#9c27b0",bucket:"#795548"};function N(e){let o=A[e.scope]??"#9e9e9e",n=`[gjendje] ${e.type} "${e.key}" (${e.scope})`,t=s?.collapsed!==false;if(e.type==="register"||e.type==="destroy"){console.log(`%c${n}`,`color: ${o}; font-weight: bold`);return}(t?console.groupCollapsed:console.group)(`%c${n}`,`color: ${o}; font-weight: bold`),"previousValue"in e&&console.log("%cprev","color: #9e9e9e; font-weight: bold",e.previousValue),console.log("%cnext","color: #4caf50; font-weight: bold",e.value),console.groupEnd();}function b(e){return s=e,r=true,d}function d(){s=void 0,r=false;}function P(){return r}function p(e,o){if(!s?.filter)return true;try{return s.filter(e,o)}catch(n){return console.error("[gjendje] Logger filter threw:",n),false}}function f(e){let o=s?.logger??N;try{o(e);}catch(n){console.error("[gjendje] Logger callback threw:",n);}}function R(e,o,n,t){r&&p(e,o)&&f({type:"set",key:e,scope:o,value:n,previousValue:t,timestamp:Date.now()});}function h(e,o,n){r&&p(e,o)&&f({type:"reset",key:e,scope:o,previousValue:n,timestamp:Date.now()});}function S(e,o){r&&p(e,o)&&f({type:"register",key:e,scope:o,timestamp:Date.now()});}function w(e,o){r&&p(e,o)&&f({type:"destroy",key:e,scope:o,timestamp:Date.now()});}var i,m,v=false;function O(){let e={};for(let o of chunk5F5C5U62_cjs.s().values())o.isDestroyed||(e[o.key]=o.get());return e}function U(){if(typeof globalThis<"u")return globalThis.__REDUX_DEVTOOLS_EXTENSION__}function X(e){if(e.type!=="DISPATCH")return;let o=e.payload?.type;if(o==="JUMP_TO_STATE"||o==="JUMP_TO_ACTION"){if(!e.state)return;let n;try{n=JSON.parse(e.state);}catch{return}let t=chunk5F5C5U62_cjs.s();for(let a of t.values()){if(a.isDestroyed)continue;let T=a.key;if(T in n)try{a.set(n[T]);}catch($){console.error(`[gjendje] DevTools: time-travel set failed for "${T}":`,$);}}}}function k(e){if(v)return u;let o=U();return o?(i=o.connect({name:e?.name??"gjendje",features:{jump:true,skip:false,reorder:false}}),i.init(O()),m=i.subscribe(X)??void 0,v=true,u):()=>{}}function u(){m?.(),m=void 0,i=void 0,v=false;}function H(){return v}function y(e){if(i)try{i.send(e,O());}catch(o){console.error("[gjendje] Redux DevTools send failed:",o);}}function x(e,o,n,t){y({type:"set",key:e,scope:o,value:n,previousValue:t});}function L(e,o,n){y({type:"reset",key:e,scope:o,previousValue:n});}function E(e,o){y({type:"register",key:e,scope:o});}function j(e,o){y({type:"destroy",key:e,scope:o});}var g=false;function C(e){x(e.key,e.scope,e.value,e.previousValue),R(e.key,e.scope,e.value,e.previousValue);}function V(e){L(e.key,e.scope,e.previousValue),h(e.key,e.scope,e.previousValue);}function I(e){E(e.key,e.scope),S(e.key,e.scope);}function M(e){j(e.key,e.scope),w(e.key,e.scope);}function K(e){return g||(chunk5F5C5U62_cjs.a("onChange",C),chunk5F5C5U62_cjs.a("onReset",V),chunk5F5C5U62_cjs.a("onRegister",I),chunk5F5C5U62_cjs.a("onDestroy",M),e?.reduxDevTools!==false&&k(e?.name?{name:e.name}:void 0),e?.logger!==false&&b(e?.loggerOptions),g=true),_}function _(){g&&(chunk5F5C5U62_cjs.b("onChange",C),chunk5F5C5U62_cjs.b("onReset",V),chunk5F5C5U62_cjs.b("onRegister",I),chunk5F5C5U62_cjs.b("onDestroy",M),u(),d(),g=false);}function Q(){return g}exports.connectReduxDevTools=k;exports.disableDevTools=_;exports.disableLogger=d;exports.disconnectReduxDevTools=u;exports.enableDevTools=K;exports.enableLogger=b;exports.isDevToolsEnabled=Q;exports.isLoggerEnabled=P;exports.isReduxDevToolsConnected=H;
|
package/dist/devtools.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as Scope } from './
|
|
1
|
+
import { a as Scope } from './index-C75CW5j8.cjs';
|
|
2
2
|
|
|
3
3
|
interface LoggerOptions {
|
|
4
4
|
/**
|
|
@@ -156,8 +156,9 @@ interface DevToolsOptions {
|
|
|
156
156
|
/**
|
|
157
157
|
* Enable gjendje DevTools integration.
|
|
158
158
|
*
|
|
159
|
-
*
|
|
160
|
-
*
|
|
159
|
+
* Registers internal config hooks for `onChange`, `onReset`, `onRegister`,
|
|
160
|
+
* and `onDestroy`. These hooks run alongside — never replace — user-provided
|
|
161
|
+
* callbacks set via `configure()`, so the two cannot overwrite each other.
|
|
161
162
|
*
|
|
162
163
|
* Both Redux DevTools and the logger are enabled by default. Pass options
|
|
163
164
|
* to selectively enable/disable each feature.
|
|
@@ -194,8 +195,8 @@ declare function enableDevTools(options?: DevToolsOptions): () => void;
|
|
|
194
195
|
/**
|
|
195
196
|
* Disable gjendje DevTools integration.
|
|
196
197
|
*
|
|
197
|
-
*
|
|
198
|
-
*
|
|
198
|
+
* Removes the internal config hooks and disconnects from Redux DevTools
|
|
199
|
+
* and the logger. User-provided callbacks are never touched.
|
|
199
200
|
*/
|
|
200
201
|
declare function disableDevTools(): void;
|
|
201
202
|
/**
|
package/dist/devtools.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as Scope } from './
|
|
1
|
+
import { a as Scope } from './index-C75CW5j8.js';
|
|
2
2
|
|
|
3
3
|
interface LoggerOptions {
|
|
4
4
|
/**
|
|
@@ -156,8 +156,9 @@ interface DevToolsOptions {
|
|
|
156
156
|
/**
|
|
157
157
|
* Enable gjendje DevTools integration.
|
|
158
158
|
*
|
|
159
|
-
*
|
|
160
|
-
*
|
|
159
|
+
* Registers internal config hooks for `onChange`, `onReset`, `onRegister`,
|
|
160
|
+
* and `onDestroy`. These hooks run alongside — never replace — user-provided
|
|
161
|
+
* callbacks set via `configure()`, so the two cannot overwrite each other.
|
|
161
162
|
*
|
|
162
163
|
* Both Redux DevTools and the logger are enabled by default. Pass options
|
|
163
164
|
* to selectively enable/disable each feature.
|
|
@@ -194,8 +195,8 @@ declare function enableDevTools(options?: DevToolsOptions): () => void;
|
|
|
194
195
|
/**
|
|
195
196
|
* Disable gjendje DevTools integration.
|
|
196
197
|
*
|
|
197
|
-
*
|
|
198
|
-
*
|
|
198
|
+
* Removes the internal config hooks and disconnects from Redux DevTools
|
|
199
|
+
* and the logger. User-provided callbacks are never touched.
|
|
199
200
|
*/
|
|
200
201
|
declare function disableDevTools(): void;
|
|
201
202
|
/**
|
package/dist/devtools.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {a,b as b$1,s as s$1}from'./chunk-6CL7CC45.js';var s,r=false,A={memory:"#9e9e9e",session:"#ff9800",local:"#4caf50",url:"#2196f3",server:"#9c27b0",bucket:"#795548"};function N(e){let o=A[e.scope]??"#9e9e9e",n=`[gjendje] ${e.type} "${e.key}" (${e.scope})`,t=s?.collapsed!==false;if(e.type==="register"||e.type==="destroy"){console.log(`%c${n}`,`color: ${o}; font-weight: bold`);return}(t?console.groupCollapsed:console.group)(`%c${n}`,`color: ${o}; font-weight: bold`),"previousValue"in e&&console.log("%cprev","color: #9e9e9e; font-weight: bold",e.previousValue),console.log("%cnext","color: #4caf50; font-weight: bold",e.value),console.groupEnd();}function b(e){return s=e,r=true,d}function d(){s=void 0,r=false;}function P(){return r}function p(e,o){if(!s?.filter)return true;try{return s.filter(e,o)}catch(n){return console.error("[gjendje] Logger filter threw:",n),false}}function f(e){let o=s?.logger??N;try{o(e);}catch(n){console.error("[gjendje] Logger callback threw:",n);}}function R(e,o,n,t){r&&p(e,o)&&f({type:"set",key:e,scope:o,value:n,previousValue:t,timestamp:Date.now()});}function h(e,o,n){r&&p(e,o)&&f({type:"reset",key:e,scope:o,previousValue:n,timestamp:Date.now()});}function S(e,o){r&&p(e,o)&&f({type:"register",key:e,scope:o,timestamp:Date.now()});}function w(e,o){r&&p(e,o)&&f({type:"destroy",key:e,scope:o,timestamp:Date.now()});}var i,m,v=false;function O(){let e={};for(let o of s$1().values())o.isDestroyed||(e[o.key]=o.get());return e}function U(){if(typeof globalThis<"u")return globalThis.__REDUX_DEVTOOLS_EXTENSION__}function X(e){if(e.type!=="DISPATCH")return;let o=e.payload?.type;if(o==="JUMP_TO_STATE"||o==="JUMP_TO_ACTION"){if(!e.state)return;let n;try{n=JSON.parse(e.state);}catch{return}let t=s$1();for(let a of t.values()){if(a.isDestroyed)continue;let T=a.key;if(T in n)try{a.set(n[T]);}catch($){console.error(`[gjendje] DevTools: time-travel set failed for "${T}":`,$);}}}}function k(e){if(v)return u;let o=U();return o?(i=o.connect({name:e?.name??"gjendje",features:{jump:true,skip:false,reorder:false}}),i.init(O()),m=i.subscribe(X)??void 0,v=true,u):()=>{}}function u(){m?.(),m=void 0,i=void 0,v=false;}function H(){return v}function y(e){if(i)try{i.send(e,O());}catch(o){console.error("[gjendje] Redux DevTools send failed:",o);}}function x(e,o,n,t){y({type:"set",key:e,scope:o,value:n,previousValue:t});}function L(e,o,n){y({type:"reset",key:e,scope:o,previousValue:n});}function E(e,o){y({type:"register",key:e,scope:o});}function j(e,o){y({type:"destroy",key:e,scope:o});}var g=false;function C(e){x(e.key,e.scope,e.value,e.previousValue),R(e.key,e.scope,e.value,e.previousValue);}function V(e){L(e.key,e.scope,e.previousValue),h(e.key,e.scope,e.previousValue);}function I(e){E(e.key,e.scope),S(e.key,e.scope);}function M(e){j(e.key,e.scope),w(e.key,e.scope);}function K(e){return g||(a("onChange",C),a("onReset",V),a("onRegister",I),a("onDestroy",M),e?.reduxDevTools!==false&&k(e?.name?{name:e.name}:void 0),e?.logger!==false&&b(e?.loggerOptions),g=true),_}function _(){g&&(b$1("onChange",C),b$1("onReset",V),b$1("onRegister",I),b$1("onDestroy",M),u(),d(),g=false);}function Q(){return g}export{k as connectReduxDevTools,_ as disableDevTools,d as disableLogger,u as disconnectReduxDevTools,K as enableDevTools,b as enableLogger,Q as isDevToolsEnabled,P as isLoggerEnabled,H as isReduxDevToolsConnected};
|
|
@@ -84,6 +84,22 @@ interface StateInstance<T> extends BaseInstance<T> {
|
|
|
84
84
|
patch(partial: T extends object ? Partial<T> : never, options?: {
|
|
85
85
|
strict?: boolean;
|
|
86
86
|
}): void;
|
|
87
|
+
/**
|
|
88
|
+
* Mutate the current value in place, then notify subscribers.
|
|
89
|
+
*
|
|
90
|
+
* The callback receives the current value by reference. After it returns,
|
|
91
|
+
* the library re-stores the same reference and fires subscribers.
|
|
92
|
+
*
|
|
93
|
+
* **Bypasses `isEqual`** — the reference is identical, so equality checks
|
|
94
|
+
* would always bail. Interceptors still run normally.
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* ```ts
|
|
98
|
+
* const settings = state('settings', { default: { theme: 'light', lang: 'en' } })
|
|
99
|
+
* settings.mutate(draft => { draft.theme = 'dark' })
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
mutate(fn: (draft: T) => void): void;
|
|
87
103
|
}
|
|
88
104
|
interface BucketOptions {
|
|
89
105
|
/**
|
|
@@ -84,6 +84,22 @@ interface StateInstance<T> extends BaseInstance<T> {
|
|
|
84
84
|
patch(partial: T extends object ? Partial<T> : never, options?: {
|
|
85
85
|
strict?: boolean;
|
|
86
86
|
}): void;
|
|
87
|
+
/**
|
|
88
|
+
* Mutate the current value in place, then notify subscribers.
|
|
89
|
+
*
|
|
90
|
+
* The callback receives the current value by reference. After it returns,
|
|
91
|
+
* the library re-stores the same reference and fires subscribers.
|
|
92
|
+
*
|
|
93
|
+
* **Bypasses `isEqual`** — the reference is identical, so equality checks
|
|
94
|
+
* would always bail. Interceptors still run normally.
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* ```ts
|
|
98
|
+
* const settings = state('settings', { default: { theme: 'light', lang: 'en' } })
|
|
99
|
+
* settings.mutate(draft => { draft.theme = 'dark' })
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
mutate(fn: (draft: T) => void): void;
|
|
87
103
|
}
|
|
88
104
|
interface BucketOptions {
|
|
89
105
|
/**
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunk24EEL77P_cjs=require('./chunk-24EEL77P.cjs'),chunkSLY2FTN3_cjs=require('./chunk-SLY2FTN3.cjs'),chunk5F5C5U62_cjs=require('./chunk-5F5C5U62.cjs');function ne(e,t){let n=chunk24EEL77P_cjs.o(e,t),o,s,a;function l(){if(o)return o;let i=new Map;return o=i,s=n.get(),a=n.subscribe(r=>{if(i.size===0){s=r;return}let p=s??[];if(r.length!==p.length){let y=Array.from(i);for(let m=0;m<y.length;m++){let x=Array.from(y[m][1]);for(let b=0;b<x.length;b++)chunk5F5C5U62_cjs.i(x[b],r);}s=r;return}let g=r.length,d;for(let y=0;y<g;y++){let m=p[y],x=r[y];if(m===x)continue;let b=chunkSLY2FTN3_cjs.e(m)?m:void 0,T=chunkSLY2FTN3_cjs.e(x)?x:void 0;if(!b||!T){let h=Array.from(i);for(let k=0;k<h.length;k++){let S=Array.from(h[k][1]);for(let O=0;O<S.length;O++)chunk5F5C5U62_cjs.i(S[O],r);}s=r;return}for(let h of i.keys())d?.has(h)||Object.is(b[h],T[h])||(d||(d=new Set),d.add(h));if(d&&d.size===i.size)break}if(d)for(let y of d){let m=i.get(y);if(m){let x=Array.from(m);for(let b=0;b<x.length;b++)chunk5F5C5U62_cjs.i(x[b],r);}}s=r;}),i}let u=n.destroy,c=n;return c.watch=(i,r)=>chunk24EEL77P_cjs.l(l(),i,r),c.add=(...i)=>{n.set(n.get().concat(i));},c.remove=(i,r)=>{let p=n.get();if(r?.one){let f=p.findIndex(i);if(f===-1)return;let g=p.slice();g.splice(f,1),n.set(g);}else {let f=p.filter(g=>!i(g));f.length!==p.length&&n.set(f);}},c.update=(i,r,p)=>{let f=n.get(),g=typeof r=="function";if(p?.one){let d=f.findIndex(i);if(d===-1)return;let y=f.slice();y[d]=g?r(f[d]):{...f[d],...r},n.set(y);}else {let d;for(let y=0;y<f.length;y++){let m=f[y];i(m)&&(d||(d=f.slice()),d[y]=g?r(m):{...m,...r});}d&&n.set(d);}},c.find=i=>n.get().find(i),c.findAll=i=>n.get().filter(i),c.has=i=>n.get().some(i),c.clear=()=>{n.set([]);},Object.defineProperty(c,"size",{get(){return n.get().length},enumerable:true}),c.destroy=()=>{try{o?.clear(),o=void 0,a?.(),a=void 0,s=void 0;}finally{u.call(c);}},c}function re(e,t,n){try{return e(t)}catch(o){let s=new chunk24EEL77P_cjs.i(n,"memory",o);throw chunk5F5C5U62_cjs.h(n,"memory",s),s}}var oe=0;function se(e,t,n){let o=n?.key??`computed:${oe++}`,s=chunk5F5C5U62_cjs.n(o,"memory"),a,l=true,u=false,c=chunkSLY2FTN3_cjs.h(),i=new Array(e.length),r=e.length;function p(){if(!l)return a;for(let T=0;T<r;T++){let h=e[T];i[T]=h.get();}return a=re(t,i,o),l=false,a}let f=()=>{if(u)return;let T=a,h=p();Object.is(h,T)||s.notify(h);},d=chunkSLY2FTN3_cjs.c(e,()=>{u||(l=true,chunk24EEL77P_cjs.b(f));});p();let y=chunkSLY2FTN3_cjs.a,m=chunkSLY2FTN3_cjs.a,x=chunkSLY2FTN3_cjs.a,b=false;for(let T=0;T<r;T++)if(e[T].ready!==chunkSLY2FTN3_cjs.a){b=true;break}if(b){let T=new Array(r),h=new Array(r),k=new Array(r);for(let S=0;S<r;S++){let O=e[S];T[S]=O.ready,h[S]=O.hydrated,k[S]=O.settled;}y=Promise.all(T).then(chunkSLY2FTN3_cjs.b),m=Promise.all(h).then(chunkSLY2FTN3_cjs.b),x=Promise.all(k).then(chunkSLY2FTN3_cjs.b);}return {key:o,scope:"memory",get ready(){return y},get settled(){return x},get hydrated(){return m},get destroyed(){return u?chunkSLY2FTN3_cjs.a:c.promise},get isDestroyed(){return u},get(){return p()},peek(){return a},subscribe(T){return u?chunkSLY2FTN3_cjs.b:s.subscribe(T)},destroy(){if(!u){u=true;try{chunkSLY2FTN3_cjs.d(d),s.clear();}finally{c.resolve();}}}}}var ie=0;function ae(e,t,n){let o,s=false,a=n?.key??`effect:${ie++}`,l=e.length,u=new Array(l);function c(){if(!s){if(o){try{o();}catch(r){console.error("[gjendje] Effect cleanup threw:",r),chunk5F5C5U62_cjs.h(a,"memory",r);}o=void 0;}for(let r=0;r<l;r++){let p=e[r];u[r]=p.get();}try{o=t(u);}catch(r){console.error("[gjendje] Effect callback threw:",r),chunk5F5C5U62_cjs.h(a,"memory",r);}}}let i=chunkSLY2FTN3_cjs.c(e,c);return c(),{stop(){if(!s){s=true;try{chunkSLY2FTN3_cjs.d(i);}finally{if(o){try{o();}catch(r){console.error("[gjendje] Effect cleanup threw:",r),chunk5F5C5U62_cjs.h(a,"memory",r);}o=void 0;}}}}}}function ce(e,t){let n=t?.maxSize??50;if(!Number.isSafeInteger(n)||n<1)throw new Error(`[gjendje] withHistory maxSize must be a positive integer, got ${n}.`);let o=[],s=[],a=false,l=e.onChange((i,r)=>{a||(o.push(r),o.length>n&&o.shift(),s.length=0);});function u(i,r){if(i.length===0||e.isDestroyed)return;let p=e.get(),f=i[i.length-1];a=true;try{e.set(f),Object.is(e.get(),p)||(i.pop(),r.push(p));}finally{a=false;}}let c=Object.create(e);return c.undo=()=>u(o,s),c.redo=()=>u(s,o),Object.defineProperty(c,"canUndo",{get(){return o.length>0},enumerable:true}),Object.defineProperty(c,"canRedo",{get(){return s.length>0},enumerable:true}),c.clearHistory=()=>{o.length=0,s.length=0;},c.destroy=()=>{try{l(),o.length=0,s.length=0;}finally{e.destroy();}},c}function ue(e){let t,n,o;function s(){n||(o=e.get(),n=e.subscribe(l=>{try{t&&t.size>0&&chunk24EEL77P_cjs.m(t,o,l);}finally{o=l;}}));}let a=Object.create(e);return a.watch=(l,u)=>(t||(t=new Map),s(),chunk24EEL77P_cjs.l(t,l,u)),a.destroy=()=>{t?.clear(),t=void 0,n?.(),n=void 0,o=void 0,e.destroy();},a}var le=0;function de(e,t){let n=chunk5F5C5U62_cjs.m(),o=t?.key??`previous:${le++}`,s,a=e.get(),l=false,u=()=>{n.notify(s);},c;try{c=e.subscribe(r=>{let p=s;s=a,a=r,Object.is(p,s)||chunk24EEL77P_cjs.b(u);});}catch{throw n.clear(),new Error(`[gjendje] previous(): source.subscribe() threw for "${o}".`)}let i=chunkSLY2FTN3_cjs.h();return {key:o,scope:"memory",get ready(){return e.ready},get settled(){return e.settled},get hydrated(){return e.hydrated},get destroyed(){return i.promise},get isDestroyed(){return l},get(){return s},peek(){return s},subscribe:n.subscribe,destroy(){if(!l){l=true;try{c?.();}finally{n.clear(),i.resolve();}}}}}function pe(e){return Object.create(e,{set:{value:void 0},reset:{value:void 0},patch:{value:void 0},mutate:{value:void 0},intercept:{value:void 0},onChange:{value:void 0}})}var fe=0;function ye(e,t,n){try{return e(t)}catch(o){let s=new chunk24EEL77P_cjs.i(n,"memory",o);throw chunk5F5C5U62_cjs.h(n,"memory",s),s}}function Te(e,t,n){let o=n?.key??`select:${fe++}`,s=chunk5F5C5U62_cjs.n(o,"memory"),a,l=true,u=false,c=chunkSLY2FTN3_cjs.h();function i(){return l&&(a=ye(t,e.get(),o),l=false),a}let r=()=>{if(u)return;let g=a,d=i();Object.is(d,g)||s.notify(d);},p=()=>{u||(l=true,chunk24EEL77P_cjs.b(r));},f=e.subscribe(p);return i(),{key:o,scope:"memory",get ready(){return e.ready},get settled(){return e.settled},get hydrated(){return e.hydrated},get destroyed(){return u?chunkSLY2FTN3_cjs.a:c.promise},get isDestroyed(){return u},get(){return i()},peek(){return a},subscribe(g){return u?chunkSLY2FTN3_cjs.b:s.subscribe(g)},destroy(){if(!u){u=true;try{f(),s.clear();}finally{c.resolve();}}}}}function M(e){let t=Object.keys(e);if(t.length!==1)throw new Error(`[gjendje] Shortcut expects exactly one key, got ${t.length}: ${t.join(", ")}`);let n=t[0];return [n,e[n]]}function E(e,t,n){let[o,s]=M(t);return chunk24EEL77P_cjs.o(o,{...n,default:s,scope:e})}function me(e,t){return e?{...e,default:t}:t!==null&&typeof t=="object"&&"default"in t?t:{default:t}}function P(e,t,n){let o,s;if(typeof e=="object"){let[a,l]=M(e);o=a,s={...t,default:l};}else o=e,s=me(n,t);return chunk24EEL77P_cjs.o(o,s)}P.local=(e,t)=>E("local",e,t);P.session=(e,t)=>E("session",e,t);P.url=(e,t)=>E("url",e,t);P.bucket=(e,t)=>E("bucket",e,t);P.server=(e,t)=>E("server",e,t);var he=P;function ge(){return Array.from(chunk5F5C5U62_cjs.s().values(),e=>({key:e.key,scope:e.scope,value:e.isDestroyed?void 0:e.get(),isDestroyed:e.isDestroyed}))}Object.defineProperty(exports,"ComputedError",{enumerable:true,get:function(){return chunk24EEL77P_cjs.i}});Object.defineProperty(exports,"GjendjeError",{enumerable:true,get:function(){return chunk24EEL77P_cjs.c}});Object.defineProperty(exports,"HydrationError",{enumerable:true,get:function(){return chunk24EEL77P_cjs.k}});Object.defineProperty(exports,"InterceptorError",{enumerable:true,get:function(){return chunk24EEL77P_cjs.h}});Object.defineProperty(exports,"MigrationError",{enumerable:true,get:function(){return chunk24EEL77P_cjs.f}});Object.defineProperty(exports,"StorageReadError",{enumerable:true,get:function(){return chunk24EEL77P_cjs.d}});Object.defineProperty(exports,"StorageWriteError",{enumerable:true,get:function(){return chunk24EEL77P_cjs.e}});Object.defineProperty(exports,"SyncError",{enumerable:true,get:function(){return chunk24EEL77P_cjs.j}});Object.defineProperty(exports,"ValidationError",{enumerable:true,get:function(){return chunk24EEL77P_cjs.g}});Object.defineProperty(exports,"batch",{enumerable:true,get:function(){return chunk24EEL77P_cjs.a}});Object.defineProperty(exports,"shallowEqual",{enumerable:true,get:function(){return chunkSLY2FTN3_cjs.f}});Object.defineProperty(exports,"configure",{enumerable:true,get:function(){return chunk5F5C5U62_cjs.d}});Object.defineProperty(exports,"destroyAll",{enumerable:true,get:function(){return chunk5F5C5U62_cjs.t}});Object.defineProperty(exports,"resetConfig",{enumerable:true,get:function(){return chunk5F5C5U62_cjs.e}});exports.collection=ne;exports.computed=se;exports.effect=ae;exports.previous=de;exports.readonly=pe;exports.select=Te;exports.snapshot=ge;exports.state=he;exports.withHistory=ce;exports.withWatch=ue;
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { B as BaseInstance, U as Unsubscribe, S as StateOptions, R as ReadonlyInstance, D as DepValues, a as Scope, b as StateInstance } from './
|
|
2
|
-
export { A as Adapter, c as BucketOptions, E as Enhancer, L as Listener, d as Serializer } from './
|
|
1
|
+
import { B as BaseInstance, U as Unsubscribe, S as StateOptions, R as ReadonlyInstance, D as DepValues, a as Scope, b as StateInstance } from './index-C75CW5j8.cjs';
|
|
2
|
+
export { A as Adapter, c as BucketOptions, E as Enhancer, L as Listener, d as Serializer } from './index-C75CW5j8.cjs';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Runs all state updates inside fn as a single batch.
|
|
@@ -246,24 +246,6 @@ declare function configure(config: GjendjeConfig): void;
|
|
|
246
246
|
*/
|
|
247
247
|
declare function resetConfig(): void;
|
|
248
248
|
|
|
249
|
-
interface StateSnapshot {
|
|
250
|
-
key: string;
|
|
251
|
-
scope: Scope;
|
|
252
|
-
value: unknown;
|
|
253
|
-
isDestroyed: boolean;
|
|
254
|
-
}
|
|
255
|
-
/**
|
|
256
|
-
* Return a read-only snapshot of all registered state instances.
|
|
257
|
-
* Useful for debugging, logging, and DevTools integration.
|
|
258
|
-
*
|
|
259
|
-
* ```ts
|
|
260
|
-
* import { snapshot } from 'gjendje'
|
|
261
|
-
*
|
|
262
|
-
* console.table(snapshot())
|
|
263
|
-
* ```
|
|
264
|
-
*/
|
|
265
|
-
declare function snapshot(): StateSnapshot[];
|
|
266
|
-
|
|
267
249
|
type Cleanup = () => void;
|
|
268
250
|
interface EffectHandle {
|
|
269
251
|
/** Stop the effect and run the last cleanup function if any */
|
|
@@ -547,6 +529,24 @@ interface StateFunction {
|
|
|
547
529
|
}
|
|
548
530
|
declare const state: StateFunction;
|
|
549
531
|
|
|
532
|
+
interface StateSnapshot {
|
|
533
|
+
key: string;
|
|
534
|
+
scope: Scope;
|
|
535
|
+
value: unknown;
|
|
536
|
+
isDestroyed: boolean;
|
|
537
|
+
}
|
|
538
|
+
/**
|
|
539
|
+
* Return a read-only snapshot of all registered state instances.
|
|
540
|
+
* Useful for debugging, logging, and DevTools integration.
|
|
541
|
+
*
|
|
542
|
+
* ```ts
|
|
543
|
+
* import { snapshot } from 'gjendje'
|
|
544
|
+
*
|
|
545
|
+
* console.table(snapshot())
|
|
546
|
+
* ```
|
|
547
|
+
*/
|
|
548
|
+
declare function snapshot(): StateSnapshot[];
|
|
549
|
+
|
|
550
550
|
/**
|
|
551
551
|
* Shallow equality check for primitives, arrays, and plain objects.
|
|
552
552
|
* Returns true if the two values are structurally equal at one level deep.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { B as BaseInstance, U as Unsubscribe, S as StateOptions, R as ReadonlyInstance, D as DepValues, a as Scope, b as StateInstance } from './
|
|
2
|
-
export { A as Adapter, c as BucketOptions, E as Enhancer, L as Listener, d as Serializer } from './
|
|
1
|
+
import { B as BaseInstance, U as Unsubscribe, S as StateOptions, R as ReadonlyInstance, D as DepValues, a as Scope, b as StateInstance } from './index-C75CW5j8.js';
|
|
2
|
+
export { A as Adapter, c as BucketOptions, E as Enhancer, L as Listener, d as Serializer } from './index-C75CW5j8.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Runs all state updates inside fn as a single batch.
|
|
@@ -246,24 +246,6 @@ declare function configure(config: GjendjeConfig): void;
|
|
|
246
246
|
*/
|
|
247
247
|
declare function resetConfig(): void;
|
|
248
248
|
|
|
249
|
-
interface StateSnapshot {
|
|
250
|
-
key: string;
|
|
251
|
-
scope: Scope;
|
|
252
|
-
value: unknown;
|
|
253
|
-
isDestroyed: boolean;
|
|
254
|
-
}
|
|
255
|
-
/**
|
|
256
|
-
* Return a read-only snapshot of all registered state instances.
|
|
257
|
-
* Useful for debugging, logging, and DevTools integration.
|
|
258
|
-
*
|
|
259
|
-
* ```ts
|
|
260
|
-
* import { snapshot } from 'gjendje'
|
|
261
|
-
*
|
|
262
|
-
* console.table(snapshot())
|
|
263
|
-
* ```
|
|
264
|
-
*/
|
|
265
|
-
declare function snapshot(): StateSnapshot[];
|
|
266
|
-
|
|
267
249
|
type Cleanup = () => void;
|
|
268
250
|
interface EffectHandle {
|
|
269
251
|
/** Stop the effect and run the last cleanup function if any */
|
|
@@ -547,6 +529,24 @@ interface StateFunction {
|
|
|
547
529
|
}
|
|
548
530
|
declare const state: StateFunction;
|
|
549
531
|
|
|
532
|
+
interface StateSnapshot {
|
|
533
|
+
key: string;
|
|
534
|
+
scope: Scope;
|
|
535
|
+
value: unknown;
|
|
536
|
+
isDestroyed: boolean;
|
|
537
|
+
}
|
|
538
|
+
/**
|
|
539
|
+
* Return a read-only snapshot of all registered state instances.
|
|
540
|
+
* Useful for debugging, logging, and DevTools integration.
|
|
541
|
+
*
|
|
542
|
+
* ```ts
|
|
543
|
+
* import { snapshot } from 'gjendje'
|
|
544
|
+
*
|
|
545
|
+
* console.table(snapshot())
|
|
546
|
+
* ```
|
|
547
|
+
*/
|
|
548
|
+
declare function snapshot(): StateSnapshot[];
|
|
549
|
+
|
|
550
550
|
/**
|
|
551
551
|
* Shallow equality check for primitives, arrays, and plain objects.
|
|
552
552
|
* Returns true if the two values are structurally equal at one level deep.
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {o,l,b,m as m$1,i as i$1}from'./chunk-E5E4AZX7.js';export{i as ComputedError,c as GjendjeError,k as HydrationError,h as InterceptorError,f as MigrationError,d as StorageReadError,e as StorageWriteError,j as SyncError,g as ValidationError,a as batch}from'./chunk-E5E4AZX7.js';import {h,c,a,b as b$1,d,e}from'./chunk-XP3O35DV.js';export{f as shallowEqual}from'./chunk-XP3O35DV.js';import {n,m,s,i,h as h$1}from'./chunk-6CL7CC45.js';export{d as configure,t as destroyAll,e as resetConfig}from'./chunk-6CL7CC45.js';function ne(e$1,t){let n=o(e$1,t),o$1,s,a;function l$1(){if(o$1)return o$1;let i$1=new Map;return o$1=i$1,s=n.get(),a=n.subscribe(r=>{if(i$1.size===0){s=r;return}let p=s??[];if(r.length!==p.length){let y=Array.from(i$1);for(let m=0;m<y.length;m++){let x=Array.from(y[m][1]);for(let b=0;b<x.length;b++)i(x[b],r);}s=r;return}let g=r.length,d;for(let y=0;y<g;y++){let m=p[y],x=r[y];if(m===x)continue;let b=e(m)?m:void 0,T=e(x)?x:void 0;if(!b||!T){let h=Array.from(i$1);for(let k=0;k<h.length;k++){let S=Array.from(h[k][1]);for(let O=0;O<S.length;O++)i(S[O],r);}s=r;return}for(let h of i$1.keys())d?.has(h)||Object.is(b[h],T[h])||(d||(d=new Set),d.add(h));if(d&&d.size===i$1.size)break}if(d)for(let y of d){let m=i$1.get(y);if(m){let x=Array.from(m);for(let b=0;b<x.length;b++)i(x[b],r);}}s=r;}),i$1}let u=n.destroy,c=n;return c.watch=(i,r)=>l(l$1(),i,r),c.add=(...i)=>{n.set(n.get().concat(i));},c.remove=(i,r)=>{let p=n.get();if(r?.one){let f=p.findIndex(i);if(f===-1)return;let g=p.slice();g.splice(f,1),n.set(g);}else {let f=p.filter(g=>!i(g));f.length!==p.length&&n.set(f);}},c.update=(i,r,p)=>{let f=n.get(),g=typeof r=="function";if(p?.one){let d=f.findIndex(i);if(d===-1)return;let y=f.slice();y[d]=g?r(f[d]):{...f[d],...r},n.set(y);}else {let d;for(let y=0;y<f.length;y++){let m=f[y];i(m)&&(d||(d=f.slice()),d[y]=g?r(m):{...m,...r});}d&&n.set(d);}},c.find=i=>n.get().find(i),c.findAll=i=>n.get().filter(i),c.has=i=>n.get().some(i),c.clear=()=>{n.set([]);},Object.defineProperty(c,"size",{get(){return n.get().length},enumerable:true}),c.destroy=()=>{try{o$1?.clear(),o$1=void 0,a?.(),a=void 0,s=void 0;}finally{u.call(c);}},c}function re(e,t,n){try{return e(t)}catch(o){let s=new i$1(n,"memory",o);throw h$1(n,"memory",s),s}}var oe=0;function se(e,t,n$1){let o=n$1?.key??`computed:${oe++}`,s=n(o,"memory"),a$1,l=true,u=false,c$1=h(),i=new Array(e.length),r=e.length;function p(){if(!l)return a$1;for(let T=0;T<r;T++){let h=e[T];i[T]=h.get();}return a$1=re(t,i,o),l=false,a$1}let f=()=>{if(u)return;let T=a$1,h=p();Object.is(h,T)||s.notify(h);},d$1=c(e,()=>{u||(l=true,b(f));});p();let y=a,m=a,x=a,b$2=false;for(let T=0;T<r;T++)if(e[T].ready!==a){b$2=true;break}if(b$2){let T=new Array(r),h=new Array(r),k=new Array(r);for(let S=0;S<r;S++){let O=e[S];T[S]=O.ready,h[S]=O.hydrated,k[S]=O.settled;}y=Promise.all(T).then(b$1),m=Promise.all(h).then(b$1),x=Promise.all(k).then(b$1);}return {key:o,scope:"memory",get ready(){return y},get settled(){return x},get hydrated(){return m},get destroyed(){return u?a:c$1.promise},get isDestroyed(){return u},get(){return p()},peek(){return a$1},subscribe(T){return u?b$1:s.subscribe(T)},destroy(){if(!u){u=true;try{d(d$1),s.clear();}finally{c$1.resolve();}}}}}var ie=0;function ae(e,t,n){let o,s=false,a=n?.key??`effect:${ie++}`,l=e.length,u=new Array(l);function c$1(){if(!s){if(o){try{o();}catch(r){console.error("[gjendje] Effect cleanup threw:",r),h$1(a,"memory",r);}o=void 0;}for(let r=0;r<l;r++){let p=e[r];u[r]=p.get();}try{o=t(u);}catch(r){console.error("[gjendje] Effect callback threw:",r),h$1(a,"memory",r);}}}let i=c(e,c$1);return c$1(),{stop(){if(!s){s=true;try{d(i);}finally{if(o){try{o();}catch(r){console.error("[gjendje] Effect cleanup threw:",r),h$1(a,"memory",r);}o=void 0;}}}}}}function ce(e,t){let n=t?.maxSize??50;if(!Number.isSafeInteger(n)||n<1)throw new Error(`[gjendje] withHistory maxSize must be a positive integer, got ${n}.`);let o=[],s=[],a=false,l=e.onChange((i,r)=>{a||(o.push(r),o.length>n&&o.shift(),s.length=0);});function u(i,r){if(i.length===0||e.isDestroyed)return;let p=e.get(),f=i[i.length-1];a=true;try{e.set(f),Object.is(e.get(),p)||(i.pop(),r.push(p));}finally{a=false;}}let c=Object.create(e);return c.undo=()=>u(o,s),c.redo=()=>u(s,o),Object.defineProperty(c,"canUndo",{get(){return o.length>0},enumerable:true}),Object.defineProperty(c,"canRedo",{get(){return s.length>0},enumerable:true}),c.clearHistory=()=>{o.length=0,s.length=0;},c.destroy=()=>{try{l(),o.length=0,s.length=0;}finally{e.destroy();}},c}function ue(e){let t,n,o;function s(){n||(o=e.get(),n=e.subscribe(l=>{try{t&&t.size>0&&m$1(t,o,l);}finally{o=l;}}));}let a=Object.create(e);return a.watch=(l$1,u)=>(t||(t=new Map),s(),l(t,l$1,u)),a.destroy=()=>{t?.clear(),t=void 0,n?.(),n=void 0,o=void 0,e.destroy();},a}var le=0;function de(e,t){let n=m(),o=t?.key??`previous:${le++}`,s,a=e.get(),l=false,u=()=>{n.notify(s);},c;try{c=e.subscribe(r=>{let p=s;s=a,a=r,Object.is(p,s)||b(u);});}catch{throw n.clear(),new Error(`[gjendje] previous(): source.subscribe() threw for "${o}".`)}let i=h();return {key:o,scope:"memory",get ready(){return e.ready},get settled(){return e.settled},get hydrated(){return e.hydrated},get destroyed(){return i.promise},get isDestroyed(){return l},get(){return s},peek(){return s},subscribe:n.subscribe,destroy(){if(!l){l=true;try{c?.();}finally{n.clear(),i.resolve();}}}}}function pe(e){return Object.create(e,{set:{value:void 0},reset:{value:void 0},patch:{value:void 0},mutate:{value:void 0},intercept:{value:void 0},onChange:{value:void 0}})}var fe=0;function ye(e,t,n){try{return e(t)}catch(o){let s=new i$1(n,"memory",o);throw h$1(n,"memory",s),s}}function Te(e,t,n$1){let o=n$1?.key??`select:${fe++}`,s=n(o,"memory"),a$1,l=true,u=false,c=h();function i(){return l&&(a$1=ye(t,e.get(),o),l=false),a$1}let r=()=>{if(u)return;let g=a$1,d=i();Object.is(d,g)||s.notify(d);},p=()=>{u||(l=true,b(r));},f=e.subscribe(p);return i(),{key:o,scope:"memory",get ready(){return e.ready},get settled(){return e.settled},get hydrated(){return e.hydrated},get destroyed(){return u?a:c.promise},get isDestroyed(){return u},get(){return i()},peek(){return a$1},subscribe(g){return u?b$1:s.subscribe(g)},destroy(){if(!u){u=true;try{f(),s.clear();}finally{c.resolve();}}}}}function M(e){let t=Object.keys(e);if(t.length!==1)throw new Error(`[gjendje] Shortcut expects exactly one key, got ${t.length}: ${t.join(", ")}`);let n=t[0];return [n,e[n]]}function E(e,t,n){let[o$1,s]=M(t);return o(o$1,{...n,default:s,scope:e})}function me(e,t){return e?{...e,default:t}:t!==null&&typeof t=="object"&&"default"in t?t:{default:t}}function P(e,t,n){let o$1,s;if(typeof e=="object"){let[a,l]=M(e);o$1=a,s={...t,default:l};}else o$1=e,s=me(n,t);return o(o$1,s)}P.local=(e,t)=>E("local",e,t);P.session=(e,t)=>E("session",e,t);P.url=(e,t)=>E("url",e,t);P.bucket=(e,t)=>E("bucket",e,t);P.server=(e,t)=>E("server",e,t);var he=P;function ge(){return Array.from(s().values(),e=>({key:e.key,scope:e.scope,value:e.isDestroyed?void 0:e.get(),isDestroyed:e.isDestroyed}))}export{ne as collection,se as computed,ae as effect,de as previous,pe as readonly,Te as select,ge as snapshot,he as state,ce as withHistory,ue as withWatch};
|
package/dist/react.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunkSLY2FTN3_cjs=require('./chunk-SLY2FTN3.cjs'),react=require('react');function y(e,t){let s=react.useRef(t);s.current=t;let d=react.useCallback(r=>e.subscribe(r),[e]),u=react.useCallback(()=>s.current?s.current(e.get()):e.get(),[e]),o=react.useSyncExternalStore(d,u,u),a=!t&&chunkSLY2FTN3_cjs.g(e),T=react.useCallback(r=>e.set(r),[e]),c=react.useCallback(()=>e.reset(),[e]);return react.useMemo(()=>a?[o,T,c]:o,[a,o,T,c])}exports.useGjendje=y;
|
package/dist/react.d.cts
CHANGED
package/dist/react.d.ts
CHANGED
package/dist/react.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {g}from'./chunk-XP3O35DV.js';import {useRef,useCallback,useSyncExternalStore,useMemo}from'react';function y(e,t){let s=useRef(t);s.current=t;let d=useCallback(r=>e.subscribe(r),[e]),u=useCallback(()=>s.current?s.current(e.get()):e.get(),[e]),o=useSyncExternalStore(d,u,u),a=!t&&g(e),T=useCallback(r=>e.set(r),[e]),c=useCallback(()=>e.reset(),[e]);return useMemo(()=>a?[o,T,c]:o,[a,o,T,c])}export{y as useGjendje};
|
package/dist/server.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunk24EEL77P_cjs=require('./chunk-24EEL77P.cjs');require('./chunk-SLY2FTN3.cjs');var chunk5F5C5U62_cjs=require('./chunk-5F5C5U62.cjs'),async_hooks=require('async_hooks');var f=new async_hooks.AsyncLocalStorage;async function S(e){let t=new Map;return f.run(t,e)}function u(e,t){let s=chunk5F5C5U62_cjs.m(e,"server");function n(){return f.getStore()}let o=t,d=()=>s.notify(o);return {ready:Promise.resolve(),get(){let r=n();return r&&r.has(e)?r.get(e):t},set(r){let i=n();if(!i)throw new Error("[gjendje] Cannot set server-scoped state outside of a server session. Wrap your request handler with withServerSession().");i.set(e,r),o=r,chunk24EEL77P_cjs.b(d);},subscribe:s.subscribe,destroy(){s.clear();}}}chunk24EEL77P_cjs.n(u);exports.createServerAdapter=u;exports.withServerSession=S;
|
package/dist/server.d.cts
CHANGED
package/dist/server.d.ts
CHANGED
package/dist/server.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {n,b}from'./chunk-E5E4AZX7.js';import'./chunk-XP3O35DV.js';import {m}from'./chunk-6CL7CC45.js';import {AsyncLocalStorage}from'async_hooks';var f=new AsyncLocalStorage;async function S(e){let t=new Map;return f.run(t,e)}function u(e,t){let s=m(e,"server");function n(){return f.getStore()}let o=t,d=()=>s.notify(o);return {ready:Promise.resolve(),get(){let r=n();return r&&r.has(e)?r.get(e):t},set(r){let i=n();if(!i)throw new Error("[gjendje] Cannot set server-scoped state outside of a server session. Wrap your request handler with withServerSession().");i.set(e,r),o=r,b(d);},subscribe:s.subscribe,destroy(){s.clear();}}}n(u);export{u as createServerAdapter,S as withServerSession};
|
package/dist/svelte.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
'use strict';var chunkSLY2FTN3_cjs=require('./chunk-SLY2FTN3.cjs');function i(e,a){let d=!a&&chunkSLY2FTN3_cjs.g(e),o={subscribe(n){if(a){let t=a(e.get());return n(t),e.subscribe(j=>{let s=a(j);Object.is(s,t)||(t=s,n(s));})}return n(e.get()),e.subscribe(n)}};return d?{...o,set(n){e.set(n);},update(n){e.set(n(e.get()));}}:o}exports.useGjendje=i;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { R as ReadonlyInstance, B as BaseInstance } from './index-C75CW5j8.cjs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Svelte-compatible readable store contract.
|
|
5
|
+
* Structurally compatible with `svelte/store`'s `Readable<T>`.
|
|
6
|
+
*/
|
|
7
|
+
interface GjendjeReadable<T> {
|
|
8
|
+
subscribe(run: (value: T) => void): () => void;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Svelte-compatible writable store contract.
|
|
12
|
+
* Structurally compatible with `svelte/store`'s `Writable<T>`.
|
|
13
|
+
*/
|
|
14
|
+
interface GjendjeWritable<T> extends GjendjeReadable<T> {
|
|
15
|
+
set(value: T): void;
|
|
16
|
+
update(updater: (value: T) => T): void;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Create a Svelte-compatible store from a gjendje state instance.
|
|
20
|
+
*
|
|
21
|
+
* - **Writable instance** → returns a writable store (set, update, subscribe)
|
|
22
|
+
* - **Readonly / computed** → returns a readable store (subscribe only)
|
|
23
|
+
* - **With selector** → returns a readable store holding the selected slice
|
|
24
|
+
*/
|
|
25
|
+
declare function useGjendje<T, U>(instance: ReadonlyInstance<T>, selector: (value: T) => U): GjendjeReadable<U>;
|
|
26
|
+
declare function useGjendje<T>(instance: BaseInstance<T>): GjendjeWritable<T>;
|
|
27
|
+
declare function useGjendje<T>(instance: ReadonlyInstance<T>): GjendjeReadable<T>;
|
|
28
|
+
|
|
29
|
+
export { type GjendjeReadable, type GjendjeWritable, useGjendje };
|
package/dist/svelte.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { R as ReadonlyInstance, B as BaseInstance } from './index-C75CW5j8.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Svelte-compatible readable store contract.
|
|
5
|
+
* Structurally compatible with `svelte/store`'s `Readable<T>`.
|
|
6
|
+
*/
|
|
7
|
+
interface GjendjeReadable<T> {
|
|
8
|
+
subscribe(run: (value: T) => void): () => void;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Svelte-compatible writable store contract.
|
|
12
|
+
* Structurally compatible with `svelte/store`'s `Writable<T>`.
|
|
13
|
+
*/
|
|
14
|
+
interface GjendjeWritable<T> extends GjendjeReadable<T> {
|
|
15
|
+
set(value: T): void;
|
|
16
|
+
update(updater: (value: T) => T): void;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Create a Svelte-compatible store from a gjendje state instance.
|
|
20
|
+
*
|
|
21
|
+
* - **Writable instance** → returns a writable store (set, update, subscribe)
|
|
22
|
+
* - **Readonly / computed** → returns a readable store (subscribe only)
|
|
23
|
+
* - **With selector** → returns a readable store holding the selected slice
|
|
24
|
+
*/
|
|
25
|
+
declare function useGjendje<T, U>(instance: ReadonlyInstance<T>, selector: (value: T) => U): GjendjeReadable<U>;
|
|
26
|
+
declare function useGjendje<T>(instance: BaseInstance<T>): GjendjeWritable<T>;
|
|
27
|
+
declare function useGjendje<T>(instance: ReadonlyInstance<T>): GjendjeReadable<T>;
|
|
28
|
+
|
|
29
|
+
export { type GjendjeReadable, type GjendjeWritable, useGjendje };
|
package/dist/svelte.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import {g}from'./chunk-XP3O35DV.js';function i(e,a){let d=!a&&g(e),o={subscribe(n){if(a){let t=a(e.get());return n(t),e.subscribe(j=>{let s=a(j);Object.is(s,t)||(t=s,n(s));})}return n(e.get()),e.subscribe(n)}};return d?{...o,set(n){e.set(n);},update(n){e.set(n(e.get()));}}:o}export{i as useGjendje};
|
package/dist/vue.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunkSLY2FTN3_cjs=require('./chunk-SLY2FTN3.cjs'),vue=require('vue');function j(e,n){let u=!n&&chunkSLY2FTN3_cjs.g(e);return vue.customRef((f,r)=>{let o=n?n(e.get()):e.get(),i=e.subscribe(t=>{let s=n?n(t):t;Object.is(s,o)||(o=s,r());});return vue.onScopeDispose(i),{get(){return f(),n?o:e.get()},set(t){u&&e.set(t);}}})}exports.useGjendje=j;
|
package/dist/vue.d.cts
CHANGED
package/dist/vue.d.ts
CHANGED
package/dist/vue.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {g}from'./chunk-XP3O35DV.js';import {customRef,onScopeDispose}from'vue';function j(e,n){let u=!n&&g(e);return customRef((f,r)=>{let o=n?n(e.get()):e.get(),i=e.subscribe(t=>{let s=n?n(t):t;Object.is(s,o)||(o=s,r());});return onScopeDispose(i),{get(){return f(),n?o:e.get()},set(t){u&&e.set(t);}}})}export{j as useGjendje};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gjendje",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.1",
|
|
4
4
|
"description": "Storage-agnostic state management library for TypeScript and JavaScript",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"state",
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
"typescript",
|
|
12
12
|
"react",
|
|
13
13
|
"vue",
|
|
14
|
+
"svelte",
|
|
14
15
|
"localStorage",
|
|
15
16
|
"sessionStorage",
|
|
16
17
|
"storageBuckets"
|
|
@@ -71,6 +72,16 @@
|
|
|
71
72
|
"default": "./dist/vue.cjs"
|
|
72
73
|
}
|
|
73
74
|
},
|
|
75
|
+
"./svelte": {
|
|
76
|
+
"import": {
|
|
77
|
+
"types": "./dist/svelte.d.ts",
|
|
78
|
+
"default": "./dist/svelte.js"
|
|
79
|
+
},
|
|
80
|
+
"require": {
|
|
81
|
+
"types": "./dist/svelte.d.cts",
|
|
82
|
+
"default": "./dist/svelte.cjs"
|
|
83
|
+
}
|
|
84
|
+
},
|
|
74
85
|
"./devtools": {
|
|
75
86
|
"import": {
|
|
76
87
|
"types": "./dist/devtools.d.ts",
|
|
@@ -95,7 +106,8 @@
|
|
|
95
106
|
},
|
|
96
107
|
"peerDependencies": {
|
|
97
108
|
"react": ">=18.0.0",
|
|
98
|
-
"vue": ">=3.3.0"
|
|
109
|
+
"vue": ">=3.3.0",
|
|
110
|
+
"svelte": ">=3.0.0"
|
|
99
111
|
},
|
|
100
112
|
"peerDependenciesMeta": {
|
|
101
113
|
"react": {
|
|
@@ -103,6 +115,9 @@
|
|
|
103
115
|
},
|
|
104
116
|
"vue": {
|
|
105
117
|
"optional": true
|
|
118
|
+
},
|
|
119
|
+
"svelte": {
|
|
120
|
+
"optional": true
|
|
106
121
|
}
|
|
107
122
|
},
|
|
108
123
|
"devDependencies": {
|
package/dist/chunk-22S7BKI5.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
function e(n){return typeof n.set=="function"}export{e as a};
|
package/dist/chunk-3NNMD2AB.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import {f,g,d,e,l,m,n,a,i,h,o,j as j$1}from'./chunk-WX6QJ7EN.js';var I=0,te=0,D=[],ue=new WeakMap;function Ve(r){I++;try{r();}finally{I--,I===0&&ke();}}function k(r){if(I>0){ue.get(r)!==te&&(ue.set(r,te),D.push(r));return}r();}var _e=100;function ke(){let r=0;for(;D.length>0;){if(++r>_e){console.error("[gjendje] Batch flush exceeded maximum iterations \u2014 possible infinite loop. Delivering remaining notifications once before stopping.");let t=D;D=[];for(let n=0;n<t.length;n++){let s=t[n];try{s&&s();}catch(o){console.error("[gjendje] Notification threw during best-effort delivery:",o),f("batch","memory",o);}}D=[];break}te++;let e=D;D=[],I++;try{for(let t=0;t<e.length;t++){let n=e[t];try{n&&n();}catch(s){console.error("[gjendje] Notification threw:",s),f("batch","memory",s);}}}finally{I--;}}}var S=Promise.resolve(),Ie=()=>{};function Le(r,e){let t=r.length,n=new Array(t);for(let s=0;s<t;s++)n[s]=r[s].subscribe(e);return n}function Me(r){for(let e=0;e<r.length;e++){let t=r[e];t&&t();}r.length=0;}function C(r){return r!==null&&typeof r=="object"}function V(r,e){if(Object.is(r,e))return true;if(typeof r!=typeof e||r===null||e===null||typeof r!="object"||typeof e!="object")return false;if(Array.isArray(r)){if(!Array.isArray(e)||r.length!==e.length)return false;for(let i=0;i<r.length;i++)if(!Object.is(r[i],e[i]))return false;return true}if(Array.isArray(e))return false;if(r instanceof Set){if(!(e instanceof Set)||r.size!==e.size)return false;for(let i of r)if(!e.has(i))return false;return true}if(r instanceof Map){if(!(e instanceof Map)||r.size!==e.size)return false;for(let[i,a]of r)if(!e.has(i)||!Object.is(a,e.get(i)))return false;return true}if(r instanceof Date)return e instanceof Date&&r.getTime()===e.getTime();if(r instanceof RegExp)return e instanceof RegExp&&r.toString()===e.toString();let t=r,n=e,s=Object.keys(t),o=Object.keys(n);if(s.length!==o.length)return false;for(let i=0;i<s.length;i++){let a=s[i];if(!Object.hasOwn(n,a)||!Object.is(t[a],n[a]))return false}return true}function Ke(){let r,e;return {get promise(){return r||(r=new Promise(t=>{e=t;})),r},resolve(){e?e():r=Promise.resolve();}}}var j=class extends Error{key;scope;constructor(e,t,n,s){super(e,s),this.name="GjendjeError",this.key=t,this.scope=n;}},F=class extends j{constructor(e,t,n){super(`Failed to read key "${e}" from ${t} storage.`,e,t,n!==void 0?{cause:n}:void 0),this.name="StorageReadError";}},P=class extends j{isQuotaError;constructor(e,t,n,s=false){super(s?`Storage quota exceeded writing key "${e}" to ${t} storage.`:`Failed to write key "${e}" to ${t} storage.`,e,t,n!==void 0?{cause:n}:void 0),this.name="StorageWriteError",this.isQuotaError=s;}},W=class extends j{fromVersion;toVersion;constructor(e,t,n,s,o){super(`Migration from v${n} to v${s} failed for key "${e}".`,e,t,o!==void 0?{cause:o}:void 0),this.name="MigrationError",this.fromVersion=n,this.toVersion=s;}},q=class extends j{rejectedValue;constructor(e,t,n){super(`Validation failed for key "${e}" in ${t} storage.`,e,t),this.name="ValidationError",this.rejectedValue=n;}},L=class extends j{constructor(e,t,n){super(`Interceptor threw for key "${e}".`,e,t,n!==void 0?{cause:n}:void 0),this.name="InterceptorError";}},fe=class extends j{constructor(e,t,n){super(`Computed derivation threw for "${e}".`,e,t,n!==void 0?{cause:n}:void 0),this.name="ComputedError";}},M=class extends j{constructor(e,t,n){super(`Cross-tab sync failed for key "${e}".`,e,t,n!==void 0?{cause:n}:void 0),this.name="SyncError";}},z=class extends j{constructor(e,t,n){super(`Hydration failed for key "${e}" \u2014 adapter unavailable.`,e,t,n!==void 0?{cause:n}:void 0),this.name="HydrationError";}};function re(r,e,t){let n=r.get(e);return n||(n=new Set,r.set(e,n)),n.add(t),()=>{n.delete(t),n.size===0&&r.delete(e);}}function ne(r,e,t){let n=C(e)?e:void 0,s=C(t)?t:void 0,o=Array.from(r);for(let i=0;i<o.length;i++){let[a,c]=o[i],d=n?.[a],u=s?.[a];if(!Object.is(d,u)){let p=Array.from(c);for(let w=0;w<p.length;w++)g(p[w],u);}}}function xe(r){return C(r)?Object.keys(r).length===2&&"v"in r&&"data"in r&&Number.isSafeInteger(r.v):false}function se(r,e$1,t,n,s){let o=e$1.version??1,i$1=e$1.default,a=1,c;if(xe(r)?(a=r.v,c=r.data):c=r,a>o&&e("warn",`Stored version (v${a}) is higher than current version (v${o}) for key "${t??"unknown"}" \u2014 data may be from a newer app version. Returning as-is.`),a<o&&e$1.migrate&&(c=je(c,a,o,e$1.migrate,t,n),t&&n&&i(d().onMigrate,{key:t,scope:n,fromVersion:a,toVersion:o,data:c})),e$1.validate&&!e$1.validate(c)){if(t&&n){let d$1=d();i(d$1.onValidationFail,{key:t,scope:n,value:c});let u=new q(t,n,c);i(d$1.onError,{key:t,scope:n,error:u});}return s?.(),i$1}return c}function le(r,e$1,t,n,s){try{let o=JSON.parse(r);return se(o,e$1,t,n,s)}catch(o){if(e("debug","Failed to read/migrate stored value \u2014 falling back to default."),t&&n){let i$1=new F(t,n,o);i(d().onError,{key:t,scope:n,error:i$1});}return s?.(),e$1.default}}function pe(r,e){return JSON.stringify(!e||e===1?r:{v:e,data:r})}function G(r,e){if(!e||!C(r))return r;let t={};for(let n of e)Object.hasOwn(r,n)&&(t[n]=r[n]);return t}function K(r,e,t){return !t||!C(r)?r:{...e,...r}}var Ee=1e3;function je(r,e$1,t,n,s,o){if(e$1<0||t<0||t-e$1>Ee)return e("warn",`Migration range v${e$1}\u2192v${t} is out of bounds \u2014 skipping.`),r;if(e$1>t)return e("warn",`Stored version (v${e$1}) is higher than current version (v${t}) for key "${s??"unknown"}" \u2014 data may be from a newer app version. Returning as-is.`),r;let i$1=r;for(let a=e$1;a<t;a++){let c=n[a];if(c)try{i$1=c(i$1);}catch(d$1){e("warn",`Migration from v${a} failed \u2014 discarding partially migrated data.`);let u=new W(s??"",o??"memory",a,t,d$1);throw s&&o&&i(d().onError,{key:s,scope:o,error:u}),u}}return i$1}function H(r,e$1,t){let{default:n,version:s,serialize:o,persist:i$1}=t,a=t.scope??"local",c=j$1(e$1,a),d$1,u,p=false,w=`${e$1}:__gjendje_backup`;function R(h){try{r.getItem(w)===null&&(r.setItem(w,h),e("warn",`Original data for key "${e$1}" backed up to "${w}" after migration/validation failure.`));}catch(g){e("error",`Failed to backup data for key "${e$1}" to "${w}" \u2014 original data may be lost.`),f(e$1,a,g);}}function m(h){if(o){let g=o.parse(h);return se(g,t,e$1,t.scope,()=>R(h))}return le(h,t,e$1,t.scope,()=>R(h))}function l(){if(p)return u;try{let h=r.getItem(e$1);if(h===null)return d$1=null,u=n,p=!0,n;if(h===d$1)return p=!0,u;let g;try{g=m(h);}catch{return d$1=void 0,u=void 0,p=!1,n}return g=K(g,n,i$1),d$1=h,u=g,p=!0,g}catch{return n}}function b(h){try{let g=G(h,i$1),O;try{if(o){let A=s&&s>1?{v:s,data:g}:g;O=o.stringify(A);}else O=pe(g,s);}catch(A){let ce=new P(e$1,a,A);throw e("error",`Serialization failed for key "${e$1}" \u2014 value may contain circular references, BigInt, or other non-serializable types.`),f(e$1,a,ce),ce}r.setItem(e$1,O),d$1=O,u=i$1?K(g,n,i$1):h,p=!0;}catch(g){d$1=void 0,u=void 0,p=false;let O=g instanceof DOMException&&(g.name==="QuotaExceededError"||g.code===22),A=new P(e$1,a,g,O);throw e("error",A.message),O&&i(d().onQuotaExceeded,{key:e$1,scope:a,error:A}),f(e$1,a,A),A}}let T=n,_=()=>c.notify(T);function E(h){h.storageArea===r&&(h.key!==null&&h.key!==e$1||(d$1=void 0,u=void 0,p=false,T=l(),k(_)));}return typeof window<"u"&&window.addEventListener("storage",E),{ready:S,get(){return l()},set(h){b(h),T=u,k(_);},subscribe:c.subscribe,destroy(){d$1=void 0,u=void 0,p=false;try{c.clear();}finally{typeof window<"u"&&window.removeEventListener("storage",E);}}}}function Pe(){return typeof navigator<"u"&&"storageBuckets"in navigator&&navigator.storageBuckets!=null}function he(r,e,t){if(typeof r=="number")return r;let n=Object.keys(e).sort((c,d)=>d.length-c.length).join("|"),s=r.toLowerCase().match(new RegExp(`^(\\d+(?:\\.\\d+)?)(${n})$`));if(!s?.[1]||!s[2])return;let o=parseFloat(s[1]),i=e[s[2]];if(!i)return;let a=o*i;return t?t(a):a}var Ae={ms:1,s:1e3,m:6e4,h:36e5,d:864e5,w:6048e5},$e={b:1,kb:1024,mb:1048576,gb:1073741824};function Re(r){return he(r,Ae,e=>Date.now()+e)}function Oe(r){return he(r,$e,Math.floor)}function ge(r,e$1,t){let{default:n}=t,s=e$1.fallback??"local";if(!e$1.name||typeof e$1.name!="string")throw new Error("[gjendje] bucket.name must be a non-empty string.");let o=j$1(r,"bucket"),i$1=n,a=()=>o.notify(i$1),c=s==="session"?sessionStorage:localStorage,d$1=H(c,r,t),u=false,p;function w(){p?.(),p=d$1.subscribe(m=>{i$1=m,k(a);});}return w(),{ready:(async()=>{if(!Pe())return;let m=false;try{let l={persisted:e$1.persisted??!1,durability:"strict"};if(e$1.expires!=null){let g=Re(e$1.expires);g!=null?l.expires=g:e("warn",`Invalid bucket expires format: "${e$1.expires}". Expected a number or a string like "7d", "24h", "30m".`);}if(e$1.quota!=null){let g=Oe(e$1.quota);g!=null?l.quota=g:e("warn",`Invalid bucket quota format: "${e$1.quota}". Expected a number or a string like "10mb", "50kb", "1gb".`);}let b=navigator.storageBuckets;if(!b)return;let _=await(await b.open(e$1.name,l)).localStorage();if(u)return;let E=d$1.get();if(m=!V(E,n),d$1.destroy?.(),d$1=H(_,r,t),u){d$1.destroy?.();return}let h=d$1.get();m&&V(h,n)&&i(d().onExpire,{key:r,scope:"bucket",expiredAt:Date.now()}),m&&d$1.set(E);}catch(l){e("warn",`Storage Bucket initialization failed for key "${r}" \u2014 using ${s} fallback.`),f(r,"bucket",l);}if(!u){if(!m){let l=d$1.get();V(l,n)||(i$1=l,k(a));}u||w();}})(),get(){return d$1.get()},set(m){d$1.set(m);},subscribe:o.subscribe,destroy(){u=true;try{p?.(),o.clear();}finally{d$1.destroy?.();}}}}function ye(r){let e=r,t=new Set,n=()=>{for(let s of t)g(s,e);};return {ready:S,get(){return e},set(s){e=s,k(n);},subscribe(s){return t.add(s),()=>{t.delete(s);}},destroy(){t.clear();}}}function me(r,e$1,t){let n=`state:${e$1}`,s=null;if(typeof BroadcastChannel<"u")try{s=new BroadcastChannel(n);}catch(c){let d=new M(e$1,t??"local",c);e("warn",`Failed to create BroadcastChannel for key "${e$1}" \u2014 cross-tab sync disabled.`),t&&f(e$1,t,d);}let o=j$1(e$1,t),i$1=false,a=r.subscribe(c=>{o.notify(c);});return s&&(s.onmessage=c=>{if(i$1)return;let d$1=c.data;if(d$1==null||typeof d$1!="object"||!("value"in d$1)||Object.keys(d$1).length!==1)return;let u=d$1.value;try{r.set(u),t&&i(d().onSync,{key:e$1,scope:t,value:u,source:"remote"});}catch(p){let w=new M(e$1,t??"local",p);e("error",w.message),t&&f(e$1,t,w);}}),{get ready(){return r.ready},get(){return r.get()},set(c){if(r.set(c),s)try{s.postMessage({value:c});}catch(d){let u=new M(e$1,t??"local",d);e("error",u.message),t&&f(e$1,t,u);}},subscribe(c){return o.subscribe(c)},destroy(){i$1=true;try{a(),o.clear();try{s?.close();}catch{}}finally{r.destroy?.();}}}}function we(r,e$1,t,n,s){if(typeof window>"u")throw new Error("[gjendje] URL scope is not available in this environment.");let o=j$1(r,"url"),i=t.stringify(e$1),a,c=e$1;function d(){try{let m=window.location.search;if(m===a)return c;let b=new URLSearchParams(m).get(r);if(b===null)return a=m,c=e$1,e$1;let T=K(t.parse(b),e$1,n);return a=m,c=T,T}catch{return e$1}}function u(m){try{let l=new URLSearchParams(window.location.search),b=G(m,n),T=t.stringify(b);T===i?l.delete(r):l.set(r,T);let E=l.toString(),h=E?`${window.location.pathname}?${E}${window.location.hash}`:`${window.location.pathname}${window.location.hash}`;s?window.history.replaceState(null,"",h):window.history.pushState(null,"",h),a=window.location.search,c=n?K(b,e$1,n):m;}catch(l){a=void 0;let b=new P(r,"url",l);throw e("error",b.message),f(r,"url",b),b}}let p=e$1,w=()=>o.notify(p);function R(){a=void 0,p=d(),k(w);}return window.addEventListener("popstate",R),{ready:S,get(){return d()},set(m){u(m),p=c,k(w);},subscribe:o.subscribe,destroy(){try{o.clear();}finally{window.removeEventListener("popstate",R);}}}}function Q(){return typeof window>"u"||typeof document>"u"}var be=new Set(["session","local","url","bucket"]);function ve(r){return Q()?S:new Promise(e=>{Promise.resolve().then(()=>{let t=()=>{try{r();}catch(n){console.error("[gjendje] Hydration callback threw:",n);}e();};typeof requestAnimationFrame<"u"?requestAnimationFrame(t):setTimeout(t,0);});})}var ie,Te=false;function Kt(r){ie=r;}var oe=new Set(["local","bucket"]);function De(r,e,t){if(e.prefix===false)return r;let n=e.prefix??t;return n?`${n}:${r}`:r}function Se(r,e,t){switch(e){case "session":if(typeof sessionStorage>"u")throw new Error('[gjendje] sessionStorage is not available. Use ssr: true or scope: "memory" for server environments.');return H(sessionStorage,r,t);case "local":if(typeof localStorage>"u")throw new Error('[gjendje] localStorage is not available. Use ssr: true or scope: "server" for server environments.');return H(localStorage,r,t);case "url":return we(r,t.default,t.serialize??{stringify:JSON.stringify,parse:JSON.parse},t.persist,t.urlReplace);case "server":if(!ie)throw new Error('[gjendje] scope: "server" requires the server adapter. Import { withServerSession } from "gjendje" or "gjendje/server" to enable it.');return ie(r,t.default);case "bucket":{if(!t.bucket)throw new Error('[gjendje] scope: "bucket" requires a bucket option. Example: { scope: "bucket", bucket: { name: "my-bucket" } }');return ge(r,t.bucket,t)}default:{let n=e;throw new Error(`[gjendje] Unknown scope: ${n}`)}}}var ae=class{key;scope;_adapter;_defaultValue;_options;_rKey;_config;_s;constructor(e,t,n,s,o,i,a){this.key=e,this.scope=t,this._rKey=n,this._adapter=s,this._defaultValue=o.default,this._options=o,this._config=i,this._s=a??{lastValue:s.get(),isDestroyed:false,hasUserWrite:false,interceptors:void 0,changeHandlers:void 0,settled:S,resolveDestroyed:void 0,destroyed:void 0,hydrated:void 0,watchers:void 0,watchUnsub:void 0,watchPrev:void 0};}get(){return this._s.isDestroyed?this._s.lastValue:this._adapter.get()}peek(){return this._s.isDestroyed?this._s.lastValue:this._adapter.get()}_applyInterceptors(e$1,t){let n=this._s;if(n.interceptors===void 0||n.interceptors.size===0)return e$1;let s=e$1;try{for(let o of n.interceptors)e$1=o(e$1,t);}catch(o){let i=new L(this.key,this.scope,o);throw f(this.key,this.scope,i),i}return e$1===void 0?(e("warn",`Interceptor for state("${this.key}") returned undefined \u2014 ignoring.`),t):e$1 instanceof Promise?(e("warn",`Interceptor for state("${this.key}") returned a Promise \u2014 interceptors must be synchronous. Ignoring.`),t):(Object.is(s,e$1)||i(this._config.onIntercept,{key:this.key,scope:this.scope,original:s,intercepted:e$1}),e$1)}_notifyChange(e,t){let n=this._s;if(n.changeHandlers!==void 0&&n.changeHandlers.size>0){let s=Array.from(n.changeHandlers);for(let o=0;o<s.length;o++)h(s[o],e,t,this.key,this.scope);}this._config.onChange!==void 0&&i(this._config.onChange,{key:this.key,scope:this.scope,value:e,previousValue:t});}set(e){let t=this._s;if(t.isDestroyed)return;let n=this._adapter.get(),s=typeof e=="function"?e(n):e;if(s=this._applyInterceptors(s,n),!this._options.isEqual?.(s,n)){try{this._adapter.set(s);}catch(o){if(o instanceof P)return;throw o}t.lastValue=s,t.hasUserWrite=true,t.settled=this._adapter.ready,this._notifyChange(s,n);}}subscribe(e){return this._adapter.subscribe(e)}reset(){let e=this._s;if(e.isDestroyed)return;let t=this._adapter.get(),n=this._applyInterceptors(this._defaultValue,t);if(!this._options.isEqual?.(n,t)){try{this._adapter.set(n);}catch(s){if(s instanceof P)return;throw s}e.lastValue=n,e.hasUserWrite=true,e.settled=this._adapter.ready,i(this._config.onReset,{key:this.key,scope:this.scope,previousValue:t}),this._notifyChange(n,t);}}get ready(){return this._adapter.ready}get settled(){return this._s.settled}get hydrated(){return this._s.hydrated??S}get destroyed(){let e=this._s;return e.destroyed||(e.destroyed=new Promise(t=>{e.resolveDestroyed=t;})),e.destroyed}get isDestroyed(){return this._s.isDestroyed}intercept(e){let t=this._s;return t.interceptors||(t.interceptors=new Set),t.interceptors.add(e),()=>{t.interceptors?.delete(e);}}onChange(e){let t=this._s;return t.changeHandlers||(t.changeHandlers=new Set),t.changeHandlers.add(e),()=>{t.changeHandlers?.delete(e);}}watch(e,t){let n=this._s;return n.watchers||(n.watchers=new Map),this._ensureWatchSubscription(),re(n.watchers,e,t)}patch(e$1,t){this.set(n=>{if(t?.strict){let s=n,o=e$1,i={};for(let a of Object.keys(o))Object.hasOwn(s,a)?i[a]=o[a]:e("warn",`patch("${this.key}") ignored unknown key "${a}" (strict mode).`);return {...n,...i}}return {...n,...e$1}});}destroy(){let e=this._s;if(!e.isDestroyed){e.lastValue=this.get(),e.isDestroyed=true;try{e.interceptors?.clear(),e.changeHandlers?.clear(),e.watchers?.clear(),e.watchUnsub?.(),this._adapter.destroy?.(),o(this._rKey),i(this._config.onDestroy,{key:this.key,scope:this.scope});}finally{e.resolveDestroyed?e.resolveDestroyed():e.destroyed=S;}}}_ensureWatchSubscription(){let e=this._s;e.watchUnsub||(e.watchPrev=this.get(),e.watchUnsub=this.subscribe(t=>{try{e.watchers&&e.watchers.size>0&&ne(e.watchers,e.watchPrev,t);}finally{e.watchPrev=t;}}));}};function B(r){return r.ext===void 0&&(r.ext={interceptors:void 0,changeHandlers:void 0,watchers:void 0,watchUnsub:void 0,watchPrev:void 0,resolveDestroyed:void 0,destroyed:void 0}),r.ext}var J=class{key;scope="memory";_c;_defaultValue;_options;_config;_rKey;constructor(e,t,n,s){this.key=e,this._rKey=t,this._defaultValue=n.default,this._options=n,this._config=s,this._c={current:n.default,isDestroyed:false,listeners:void 0,notifyFn:void 0,ext:void 0};}get(){return this._c.current}peek(){return this._c.current}set(e$1){let t=this._c;if(t.isDestroyed)return;let n=t.current,s=typeof e$1=="function"?e$1(n):e$1,o=t.ext;if(o!==void 0&&o.interceptors!==void 0&&o.interceptors.size>0){let i$1=s;try{for(let a of o.interceptors)s=a(s,n);}catch(a){let c=new L(this.key,this.scope,a);throw f(this.key,this.scope,c),c}if(s===void 0){e("warn",`Interceptor for state("${this.key}") returned undefined \u2014 ignoring.`);return}if(s instanceof Promise){e("warn",`Interceptor for state("${this.key}") returned a Promise \u2014 interceptors must be synchronous. Ignoring.`);return}Object.is(i$1,s)||i(this._config.onIntercept,{key:this.key,scope:this.scope,original:i$1,intercepted:s});}if(!this._options.isEqual?.(s,n)){if(t.current=s,t.notifyFn!==void 0&&k(t.notifyFn),o!==void 0&&o.changeHandlers!==void 0&&o.changeHandlers.size>0){let i=Array.from(o.changeHandlers);for(let a=0;a<i.length;a++)h(i[a],s,n,this.key,this.scope);}this._config.onChange!==void 0&&i(this._config.onChange,{key:this.key,scope:this.scope,value:s,previousValue:n});}}subscribe(e){let t=this._c;if(!t.listeners){let s=new Set,o=this.key,i=this.scope;t.listeners=s,t.notifyFn=()=>{let a=Array.from(s);for(let c=0;c<a.length;c++)g(a[c],t.current,o,i);};}let n=t.listeners;return n.add(e),()=>{n.delete(e);}}reset(){let e$1=this._c;if(e$1.isDestroyed)return;let t=e$1.current,n=this._defaultValue,s=e$1.ext;if(s!==void 0&&s.interceptors!==void 0&&s.interceptors.size>0){let o=n;try{for(let i of s.interceptors)n=i(n,t);}catch(i){let a=new L(this.key,this.scope,i);throw f(this.key,this.scope,a),a}if(n===void 0){e("warn",`Interceptor for state("${this.key}") returned undefined \u2014 ignoring.`);return}if(n instanceof Promise){e("warn",`Interceptor for state("${this.key}") returned a Promise \u2014 interceptors must be synchronous. Ignoring.`);return}Object.is(o,n)||i(this._config.onIntercept,{key:this.key,scope:this.scope,original:o,intercepted:n});}if(!this._options.isEqual?.(n,t)){if(e$1.current=n,e$1.notifyFn!==void 0&&k(e$1.notifyFn),this._config.onReset!==void 0&&i(this._config.onReset,{key:this.key,scope:this.scope,previousValue:t}),s!==void 0&&s.changeHandlers!==void 0&&s.changeHandlers.size>0){let o=Array.from(s.changeHandlers);for(let i=0;i<o.length;i++)h(o[i],n,t,this.key,this.scope);}this._config.onChange!==void 0&&i(this._config.onChange,{key:this.key,scope:this.scope,value:n,previousValue:t});}}get ready(){return S}get settled(){return S}get hydrated(){return S}get isDestroyed(){return this._c.isDestroyed}get destroyed(){if(this._c.isDestroyed)return S;let e=B(this._c);return e.destroyed||(e.destroyed=new Promise(t=>{e.resolveDestroyed=t;})),e.destroyed}intercept(e){let t=B(this._c);return t.interceptors||(t.interceptors=new Set),t.interceptors.add(e),()=>{t.interceptors?.delete(e);}}onChange(e){let t=B(this._c);return t.changeHandlers||(t.changeHandlers=new Set),t.changeHandlers.add(e),()=>{t.changeHandlers?.delete(e);}}watch(e,t){let n=B(this._c);return n.watchers||(n.watchers=new Map),this._ensureWatchSubscription(),re(n.watchers,e,t)}patch(e$1,t){this.set(n=>{if(t?.strict){let s=n,o=e$1,i={};for(let a of Object.keys(o))Object.hasOwn(s,a)?i[a]=o[a]:e("warn",`patch("${this.key}") ignored unknown key "${a}" (strict mode).`);return {...n,...i}}return {...n,...e$1}});}_ensureWatchSubscription(){let e=B(this._c);e.watchUnsub||(e.watchPrev=this._c.current,e.watchUnsub=this.subscribe(t=>{try{e.watchers&&e.watchers.size>0&&ne(e.watchers,e.watchPrev,t);}finally{e.watchPrev=t;}}));}destroy(){let e=this._c;if(e.isDestroyed)return;e.isDestroyed=true;let t=e.ext;try{t!==void 0&&(t.interceptors?.clear(),t.changeHandlers?.clear(),t.watchers?.clear(),t.watchUnsub?.()),e.listeners?.clear(),e.notifyFn=void 0,this._rKey&&o(this._rKey),i(this._config.onDestroy,{key:this.key,scope:this.scope});}finally{t?.resolveDestroyed?t.resolveDestroyed():t!==void 0&&(t.destroyed=S);}}};function Ht(r,e$1){if(!r)throw new Error("[gjendje] key must be a non-empty string.");let t=d();if(t.keyPattern&&!t.keyPattern.test(r))throw new Error(`[gjendje] Key "${r}" does not match the configured keyPattern ${t.keyPattern}.`);if(e$1.version!==void 0&&(!Number.isSafeInteger(e$1.version)||e$1.version<1))throw new Error(`[gjendje] version must be a positive integer, got ${e$1.version} for state("${r}").`);let n$1=e$1.scope??t.scope??"memory",s=n$1==="render"?"memory":n$1;if(n$1==="render"&&!Te&&(Te=true,console.warn('[gjendje] The "render" scope is deprecated. Use "memory" instead. "render" will be removed in the next major version.')),s==="memory"){if((e$1.sync||t.sync)&&e("warn",'sync: true is ignored for scope "memory". Only "local" and "bucket" scopes support cross-tab sync.'),t.registry===false)return new J(r,"",e$1,t);let b=l(r,s),T=m(b);if(T&&!T.isDestroyed)return t.warnOnDuplicate&&e("warn",`Duplicate state("${r}") with scope "${s}". Returning cached instance.`),T;let _=new J(r,b,e$1,t);return n(b,r,s,_,t,T),_}let o=l(r,s),i$1=m(o);if(i$1&&!i$1.isDestroyed)return t.warnOnDuplicate&&e("warn",`Duplicate state("${r}") with scope "${s}". Returning cached instance.`),i$1;if(t.requireValidation&&a.has(s)&&!e$1.validate)throw new Error(`[gjendje] A validate function is required for persisted scope "${s}" on state("${r}"). Set requireValidation: false in configure() to disable.`);let a$1=(e$1.ssr??t.ssr)&&be.has(s),c=a$1&&Q(),d$1=e$1.sync??(t.sync&&oe.has(s));d$1&&!oe.has(s)&&e("warn",`sync: true is ignored for scope "${s}". Only "local" and "bucket" scopes support cross-tab sync.`);let u=De(r,e$1,t.prefix),p=s,w=c?ye(e$1.default):Se(u,p,e$1),m$1=d$1&&oe.has(s)&&!c?me(w,u,s):w,l$1=new ae(r,s,o,m$1,e$1,t);return a$1&&!Q()&&(l$1._s.hydrated=ve(()=>{if(l$1.isDestroyed||l$1._s.hasUserWrite)return;let b=l$1.get();if(!V(b,e$1.default))return;let T;try{T=Se(u,p,e$1);let _=T.get();V(_,e$1.default)||l$1.set(_),i(t.onHydrate,{key:r,scope:s,serverValue:e$1.default,clientValue:_});}catch(_){e("debug",`Hydration adapter unavailable for state("${r}") \u2014 using memory fallback.`);let E=new z(r,s,_);f(r,s,E);}finally{T?.destroy?.();}})),n(o,r,s,l$1,t,i$1),l$1}export{Ve as a,k as b,S as c,Ie as d,Le as e,Me as f,C as g,V as h,Ke as i,j,F as k,P as l,W as m,q as n,L as o,fe as p,M as q,z as r,re as s,ne as t,Kt as u,Ht as v};
|
package/dist/chunk-EB6FSOCF.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
'use strict';function e(n){return typeof n.set=="function"}exports.a=e;
|
package/dist/chunk-LVZKO5RP.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
'use strict';var s={},g=new Set(["local","session","bucket"]),x=new Set(["silent","warn","error","debug"]),y=new Set(["memory","render","session","local","url","server","bucket"]),w=new Set(["scope","keyPattern","logLevel","maxKeys","prefix","registry","requireValidation","ssr","sync","warnOnDuplicate","onDestroy","onError","onHydrate","onMigrate","onQuotaExceeded","onRegister","onSync","onChange","onReset","onIntercept","onValidationFail","onExpire"]);function v(e){if(e.maxKeys!==void 0&&(!Number.isSafeInteger(e.maxKeys)||e.maxKeys<1))throw new Error(`[gjendje] maxKeys must be a positive integer, got ${e.maxKeys}.`);if(e.logLevel!==void 0&&!x.has(e.logLevel))throw new Error(`[gjendje] logLevel must be one of 'silent', 'warn', 'error', 'debug', got '${e.logLevel}'.`);if(e.scope!==void 0&&!y.has(e.scope))throw new Error(`[gjendje] scope must be a valid scope ('memory', 'local', 'session', 'url', 'server', 'bucket'), got '${e.scope}'.`);if(e.keyPattern!==void 0&&!(e.keyPattern instanceof RegExp))throw new Error(`[gjendje] keyPattern must be a RegExp, got ${typeof e.keyPattern}.`);for(let n of Object.keys(e)){w.has(n)||l("warn",`configure() received unknown key "${n}" \u2014 possible typo.`);let r=e[n];r===void 0?delete s[n]:s[n]=r;}let t=s.scope??e.scope;s.registry===false&&t&&g.has(t)&&l("warn",`registry: false has no effect on scope "${t}" \u2014 persistent scopes always use the registry.`);}function C(){s={};}function m(){return s}var f={debug:0,warn:1,error:2};function l(e,t){let n=s.logLevel??"warn";n!=="silent"&&f[e]>=f[n]&&console[e](`[gjendje] ${t}`);}function c(e,t,n){if(s.onError!==void 0)try{s.onError({key:e,scope:t,error:n});}catch(r){console.error("[gjendje] onError callback threw:",r);}}function u(e,t,n,r){try{e(t);}catch(o){console.error("[gjendje] Listener threw:",o),n!==void 0&&r!==void 0&&c(n,r,o);}}function b(e,t,n,r,o){try{e(t,n);}catch(i){console.error("[gjendje] Change handler threw:",i),r!==void 0&&o!==void 0&&c(r,o,i);}}function p(e,t){if(e!==void 0)try{e(t);}catch(n){console.error("[gjendje] Config callback threw:",n);}}function h(e,t){let n=new Set;return {notify(r){let o=Array.from(n);for(let i=0;i<o.length;i++)u(o[i],r,e,t);},subscribe(r){return n.add(r),()=>{n.delete(r);}},clear(){n.clear();}}}function k(e,t){let n=new Set,r;return {notify(o){if(r!==void 0){u(r,o,e,t);return}let i=Array.from(n);for(let a=0;a<i.length;a++)u(i[a],o,e,t);},subscribe(o){return n.add(o),r=n.size===1?o:void 0,()=>{n.delete(o),n.size===1?r=n.values().next().value:r=void 0;}},clear(){n.clear(),r=void 0;}}}function T(e,t){return `${t}:${e}`}var d=new Map;function R(e){return d.get(e)}function I(e,t,n,r,o,i){if(i!==void 0){d.set(e,r),p(o.onRegister,{key:t,scope:n});return}if(o.maxKeys!==void 0&&d.size>=o.maxKeys)throw new Error(`[gjendje] maxKeys limit (${o.maxKeys}) reached. Cannot register state("${t}") with scope "${n}".`);d.set(e,r),p(o.onRegister,{key:t,scope:n});}function K(e){d.delete(e);}function $(){return d}function V(){let e=[...d.values()];d.clear();for(let t of e)t.isDestroyed||t.destroy();}exports.a=g;exports.b=v;exports.c=C;exports.d=m;exports.e=l;exports.f=c;exports.g=u;exports.h=b;exports.i=p;exports.j=h;exports.k=k;exports.l=T;exports.m=R;exports.n=I;exports.o=K;exports.p=$;exports.q=V;
|
package/dist/chunk-OGC62HIQ.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
'use strict';var chunkLVZKO5RP_cjs=require('./chunk-LVZKO5RP.cjs');var I=0,te=0,D=[],ue=new WeakMap;function Ve(r){I++;try{r();}finally{I--,I===0&&ke();}}function k(r){if(I>0){ue.get(r)!==te&&(ue.set(r,te),D.push(r));return}r();}var _e=100;function ke(){let r=0;for(;D.length>0;){if(++r>_e){console.error("[gjendje] Batch flush exceeded maximum iterations \u2014 possible infinite loop. Delivering remaining notifications once before stopping.");let t=D;D=[];for(let n=0;n<t.length;n++){let s=t[n];try{s&&s();}catch(o){console.error("[gjendje] Notification threw during best-effort delivery:",o),chunkLVZKO5RP_cjs.f("batch","memory",o);}}D=[];break}te++;let e=D;D=[],I++;try{for(let t=0;t<e.length;t++){let n=e[t];try{n&&n();}catch(s){console.error("[gjendje] Notification threw:",s),chunkLVZKO5RP_cjs.f("batch","memory",s);}}}finally{I--;}}}var S=Promise.resolve(),Ie=()=>{};function Le(r,e){let t=r.length,n=new Array(t);for(let s=0;s<t;s++)n[s]=r[s].subscribe(e);return n}function Me(r){for(let e=0;e<r.length;e++){let t=r[e];t&&t();}r.length=0;}function C(r){return r!==null&&typeof r=="object"}function V(r,e){if(Object.is(r,e))return true;if(typeof r!=typeof e||r===null||e===null||typeof r!="object"||typeof e!="object")return false;if(Array.isArray(r)){if(!Array.isArray(e)||r.length!==e.length)return false;for(let i=0;i<r.length;i++)if(!Object.is(r[i],e[i]))return false;return true}if(Array.isArray(e))return false;if(r instanceof Set){if(!(e instanceof Set)||r.size!==e.size)return false;for(let i of r)if(!e.has(i))return false;return true}if(r instanceof Map){if(!(e instanceof Map)||r.size!==e.size)return false;for(let[i,a]of r)if(!e.has(i)||!Object.is(a,e.get(i)))return false;return true}if(r instanceof Date)return e instanceof Date&&r.getTime()===e.getTime();if(r instanceof RegExp)return e instanceof RegExp&&r.toString()===e.toString();let t=r,n=e,s=Object.keys(t),o=Object.keys(n);if(s.length!==o.length)return false;for(let i=0;i<s.length;i++){let a=s[i];if(!Object.hasOwn(n,a)||!Object.is(t[a],n[a]))return false}return true}function Ke(){let r,e;return {get promise(){return r||(r=new Promise(t=>{e=t;})),r},resolve(){e?e():r=Promise.resolve();}}}var j=class extends Error{key;scope;constructor(e,t,n,s){super(e,s),this.name="GjendjeError",this.key=t,this.scope=n;}},F=class extends j{constructor(e,t,n){super(`Failed to read key "${e}" from ${t} storage.`,e,t,n!==void 0?{cause:n}:void 0),this.name="StorageReadError";}},P=class extends j{isQuotaError;constructor(e,t,n,s=false){super(s?`Storage quota exceeded writing key "${e}" to ${t} storage.`:`Failed to write key "${e}" to ${t} storage.`,e,t,n!==void 0?{cause:n}:void 0),this.name="StorageWriteError",this.isQuotaError=s;}},W=class extends j{fromVersion;toVersion;constructor(e,t,n,s,o){super(`Migration from v${n} to v${s} failed for key "${e}".`,e,t,o!==void 0?{cause:o}:void 0),this.name="MigrationError",this.fromVersion=n,this.toVersion=s;}},q=class extends j{rejectedValue;constructor(e,t,n){super(`Validation failed for key "${e}" in ${t} storage.`,e,t),this.name="ValidationError",this.rejectedValue=n;}},L=class extends j{constructor(e,t,n){super(`Interceptor threw for key "${e}".`,e,t,n!==void 0?{cause:n}:void 0),this.name="InterceptorError";}},fe=class extends j{constructor(e,t,n){super(`Computed derivation threw for "${e}".`,e,t,n!==void 0?{cause:n}:void 0),this.name="ComputedError";}},M=class extends j{constructor(e,t,n){super(`Cross-tab sync failed for key "${e}".`,e,t,n!==void 0?{cause:n}:void 0),this.name="SyncError";}},z=class extends j{constructor(e,t,n){super(`Hydration failed for key "${e}" \u2014 adapter unavailable.`,e,t,n!==void 0?{cause:n}:void 0),this.name="HydrationError";}};function re(r,e,t){let n=r.get(e);return n||(n=new Set,r.set(e,n)),n.add(t),()=>{n.delete(t),n.size===0&&r.delete(e);}}function ne(r,e,t){let n=C(e)?e:void 0,s=C(t)?t:void 0,o=Array.from(r);for(let i=0;i<o.length;i++){let[a,c]=o[i],d=n?.[a],u=s?.[a];if(!Object.is(d,u)){let p=Array.from(c);for(let w=0;w<p.length;w++)chunkLVZKO5RP_cjs.g(p[w],u);}}}function xe(r){return C(r)?Object.keys(r).length===2&&"v"in r&&"data"in r&&Number.isSafeInteger(r.v):false}function se(r,e,t,n,s){let o=e.version??1,i=e.default,a=1,c;if(xe(r)?(a=r.v,c=r.data):c=r,a>o&&chunkLVZKO5RP_cjs.e("warn",`Stored version (v${a}) is higher than current version (v${o}) for key "${t??"unknown"}" \u2014 data may be from a newer app version. Returning as-is.`),a<o&&e.migrate&&(c=je(c,a,o,e.migrate,t,n),t&&n&&chunkLVZKO5RP_cjs.i(chunkLVZKO5RP_cjs.d().onMigrate,{key:t,scope:n,fromVersion:a,toVersion:o,data:c})),e.validate&&!e.validate(c)){if(t&&n){let d=chunkLVZKO5RP_cjs.d();chunkLVZKO5RP_cjs.i(d.onValidationFail,{key:t,scope:n,value:c});let u=new q(t,n,c);chunkLVZKO5RP_cjs.i(d.onError,{key:t,scope:n,error:u});}return s?.(),i}return c}function le(r,e,t,n,s){try{let o=JSON.parse(r);return se(o,e,t,n,s)}catch(o){if(chunkLVZKO5RP_cjs.e("debug","Failed to read/migrate stored value \u2014 falling back to default."),t&&n){let i=new F(t,n,o);chunkLVZKO5RP_cjs.i(chunkLVZKO5RP_cjs.d().onError,{key:t,scope:n,error:i});}return s?.(),e.default}}function pe(r,e){return JSON.stringify(!e||e===1?r:{v:e,data:r})}function G(r,e){if(!e||!C(r))return r;let t={};for(let n of e)Object.hasOwn(r,n)&&(t[n]=r[n]);return t}function K(r,e,t){return !t||!C(r)?r:{...e,...r}}var Ee=1e3;function je(r,e,t,n,s,o){if(e<0||t<0||t-e>Ee)return chunkLVZKO5RP_cjs.e("warn",`Migration range v${e}\u2192v${t} is out of bounds \u2014 skipping.`),r;if(e>t)return chunkLVZKO5RP_cjs.e("warn",`Stored version (v${e}) is higher than current version (v${t}) for key "${s??"unknown"}" \u2014 data may be from a newer app version. Returning as-is.`),r;let i=r;for(let a=e;a<t;a++){let c=n[a];if(c)try{i=c(i);}catch(d){chunkLVZKO5RP_cjs.e("warn",`Migration from v${a} failed \u2014 discarding partially migrated data.`);let u=new W(s??"",o??"memory",a,t,d);throw s&&o&&chunkLVZKO5RP_cjs.i(chunkLVZKO5RP_cjs.d().onError,{key:s,scope:o,error:u}),u}}return i}function H(r,e,t){let{default:n,version:s,serialize:o,persist:i}=t,a=t.scope??"local",c=chunkLVZKO5RP_cjs.j(e,a),d,u,p=false,w=`${e}:__gjendje_backup`;function R(h){try{r.getItem(w)===null&&(r.setItem(w,h),chunkLVZKO5RP_cjs.e("warn",`Original data for key "${e}" backed up to "${w}" after migration/validation failure.`));}catch(g){chunkLVZKO5RP_cjs.e("error",`Failed to backup data for key "${e}" to "${w}" \u2014 original data may be lost.`),chunkLVZKO5RP_cjs.f(e,a,g);}}function m(h){if(o){let g=o.parse(h);return se(g,t,e,t.scope,()=>R(h))}return le(h,t,e,t.scope,()=>R(h))}function l(){if(p)return u;try{let h=r.getItem(e);if(h===null)return d=null,u=n,p=!0,n;if(h===d)return p=!0,u;let g;try{g=m(h);}catch{return d=void 0,u=void 0,p=!1,n}return g=K(g,n,i),d=h,u=g,p=!0,g}catch{return n}}function b(h){try{let g=G(h,i),O;try{if(o){let A=s&&s>1?{v:s,data:g}:g;O=o.stringify(A);}else O=pe(g,s);}catch(A){let ce=new P(e,a,A);throw chunkLVZKO5RP_cjs.e("error",`Serialization failed for key "${e}" \u2014 value may contain circular references, BigInt, or other non-serializable types.`),chunkLVZKO5RP_cjs.f(e,a,ce),ce}r.setItem(e,O),d=O,u=i?K(g,n,i):h,p=!0;}catch(g){d=void 0,u=void 0,p=false;let O=g instanceof DOMException&&(g.name==="QuotaExceededError"||g.code===22),A=new P(e,a,g,O);throw chunkLVZKO5RP_cjs.e("error",A.message),O&&chunkLVZKO5RP_cjs.i(chunkLVZKO5RP_cjs.d().onQuotaExceeded,{key:e,scope:a,error:A}),chunkLVZKO5RP_cjs.f(e,a,A),A}}let T=n,_=()=>c.notify(T);function E(h){h.storageArea===r&&(h.key!==null&&h.key!==e||(d=void 0,u=void 0,p=false,T=l(),k(_)));}return typeof window<"u"&&window.addEventListener("storage",E),{ready:S,get(){return l()},set(h){b(h),T=u,k(_);},subscribe:c.subscribe,destroy(){d=void 0,u=void 0,p=false;try{c.clear();}finally{typeof window<"u"&&window.removeEventListener("storage",E);}}}}function Pe(){return typeof navigator<"u"&&"storageBuckets"in navigator&&navigator.storageBuckets!=null}function he(r,e,t){if(typeof r=="number")return r;let n=Object.keys(e).sort((c,d)=>d.length-c.length).join("|"),s=r.toLowerCase().match(new RegExp(`^(\\d+(?:\\.\\d+)?)(${n})$`));if(!s?.[1]||!s[2])return;let o=parseFloat(s[1]),i=e[s[2]];if(!i)return;let a=o*i;return t?t(a):a}var Ae={ms:1,s:1e3,m:6e4,h:36e5,d:864e5,w:6048e5},$e={b:1,kb:1024,mb:1048576,gb:1073741824};function Re(r){return he(r,Ae,e=>Date.now()+e)}function Oe(r){return he(r,$e,Math.floor)}function ge(r,e,t){let{default:n}=t,s=e.fallback??"local";if(!e.name||typeof e.name!="string")throw new Error("[gjendje] bucket.name must be a non-empty string.");let o=chunkLVZKO5RP_cjs.j(r,"bucket"),i=n,a=()=>o.notify(i),c=s==="session"?sessionStorage:localStorage,d=H(c,r,t),u=false,p;function w(){p?.(),p=d.subscribe(m=>{i=m,k(a);});}return w(),{ready:(async()=>{if(!Pe())return;let m=false;try{let l={persisted:e.persisted??!1,durability:"strict"};if(e.expires!=null){let g=Re(e.expires);g!=null?l.expires=g:chunkLVZKO5RP_cjs.e("warn",`Invalid bucket expires format: "${e.expires}". Expected a number or a string like "7d", "24h", "30m".`);}if(e.quota!=null){let g=Oe(e.quota);g!=null?l.quota=g:chunkLVZKO5RP_cjs.e("warn",`Invalid bucket quota format: "${e.quota}". Expected a number or a string like "10mb", "50kb", "1gb".`);}let b=navigator.storageBuckets;if(!b)return;let _=await(await b.open(e.name,l)).localStorage();if(u)return;let E=d.get();if(m=!V(E,n),d.destroy?.(),d=H(_,r,t),u){d.destroy?.();return}let h=d.get();m&&V(h,n)&&chunkLVZKO5RP_cjs.i(chunkLVZKO5RP_cjs.d().onExpire,{key:r,scope:"bucket",expiredAt:Date.now()}),m&&d.set(E);}catch(l){chunkLVZKO5RP_cjs.e("warn",`Storage Bucket initialization failed for key "${r}" \u2014 using ${s} fallback.`),chunkLVZKO5RP_cjs.f(r,"bucket",l);}if(!u){if(!m){let l=d.get();V(l,n)||(i=l,k(a));}u||w();}})(),get(){return d.get()},set(m){d.set(m);},subscribe:o.subscribe,destroy(){u=true;try{p?.(),o.clear();}finally{d.destroy?.();}}}}function ye(r){let e=r,t=new Set,n=()=>{for(let s of t)chunkLVZKO5RP_cjs.g(s,e);};return {ready:S,get(){return e},set(s){e=s,k(n);},subscribe(s){return t.add(s),()=>{t.delete(s);}},destroy(){t.clear();}}}function me(r,e,t){let n=`state:${e}`,s=null;if(typeof BroadcastChannel<"u")try{s=new BroadcastChannel(n);}catch(c){let d=new M(e,t??"local",c);chunkLVZKO5RP_cjs.e("warn",`Failed to create BroadcastChannel for key "${e}" \u2014 cross-tab sync disabled.`),t&&chunkLVZKO5RP_cjs.f(e,t,d);}let o=chunkLVZKO5RP_cjs.j(e,t),i=false,a=r.subscribe(c=>{o.notify(c);});return s&&(s.onmessage=c=>{if(i)return;let d=c.data;if(d==null||typeof d!="object"||!("value"in d)||Object.keys(d).length!==1)return;let u=d.value;try{r.set(u),t&&chunkLVZKO5RP_cjs.i(chunkLVZKO5RP_cjs.d().onSync,{key:e,scope:t,value:u,source:"remote"});}catch(p){let w=new M(e,t??"local",p);chunkLVZKO5RP_cjs.e("error",w.message),t&&chunkLVZKO5RP_cjs.f(e,t,w);}}),{get ready(){return r.ready},get(){return r.get()},set(c){if(r.set(c),s)try{s.postMessage({value:c});}catch(d){let u=new M(e,t??"local",d);chunkLVZKO5RP_cjs.e("error",u.message),t&&chunkLVZKO5RP_cjs.f(e,t,u);}},subscribe(c){return o.subscribe(c)},destroy(){i=true;try{a(),o.clear();try{s?.close();}catch{}}finally{r.destroy?.();}}}}function we(r,e,t,n,s){if(typeof window>"u")throw new Error("[gjendje] URL scope is not available in this environment.");let o=chunkLVZKO5RP_cjs.j(r,"url"),i=t.stringify(e),a,c=e;function d(){try{let m=window.location.search;if(m===a)return c;let b=new URLSearchParams(m).get(r);if(b===null)return a=m,c=e,e;let T=K(t.parse(b),e,n);return a=m,c=T,T}catch{return e}}function u(m){try{let l=new URLSearchParams(window.location.search),b=G(m,n),T=t.stringify(b);T===i?l.delete(r):l.set(r,T);let E=l.toString(),h=E?`${window.location.pathname}?${E}${window.location.hash}`:`${window.location.pathname}${window.location.hash}`;s?window.history.replaceState(null,"",h):window.history.pushState(null,"",h),a=window.location.search,c=n?K(b,e,n):m;}catch(l){a=void 0;let b=new P(r,"url",l);throw chunkLVZKO5RP_cjs.e("error",b.message),chunkLVZKO5RP_cjs.f(r,"url",b),b}}let p=e,w=()=>o.notify(p);function R(){a=void 0,p=d(),k(w);}return window.addEventListener("popstate",R),{ready:S,get(){return d()},set(m){u(m),p=c,k(w);},subscribe:o.subscribe,destroy(){try{o.clear();}finally{window.removeEventListener("popstate",R);}}}}function Q(){return typeof window>"u"||typeof document>"u"}var be=new Set(["session","local","url","bucket"]);function ve(r){return Q()?S:new Promise(e=>{Promise.resolve().then(()=>{let t=()=>{try{r();}catch(n){console.error("[gjendje] Hydration callback threw:",n);}e();};typeof requestAnimationFrame<"u"?requestAnimationFrame(t):setTimeout(t,0);});})}var ie,Te=false;function Kt(r){ie=r;}var oe=new Set(["local","bucket"]);function De(r,e,t){if(e.prefix===false)return r;let n=e.prefix??t;return n?`${n}:${r}`:r}function Se(r,e,t){switch(e){case "session":if(typeof sessionStorage>"u")throw new Error('[gjendje] sessionStorage is not available. Use ssr: true or scope: "memory" for server environments.');return H(sessionStorage,r,t);case "local":if(typeof localStorage>"u")throw new Error('[gjendje] localStorage is not available. Use ssr: true or scope: "server" for server environments.');return H(localStorage,r,t);case "url":return we(r,t.default,t.serialize??{stringify:JSON.stringify,parse:JSON.parse},t.persist,t.urlReplace);case "server":if(!ie)throw new Error('[gjendje] scope: "server" requires the server adapter. Import { withServerSession } from "gjendje" or "gjendje/server" to enable it.');return ie(r,t.default);case "bucket":{if(!t.bucket)throw new Error('[gjendje] scope: "bucket" requires a bucket option. Example: { scope: "bucket", bucket: { name: "my-bucket" } }');return ge(r,t.bucket,t)}default:{let n=e;throw new Error(`[gjendje] Unknown scope: ${n}`)}}}var ae=class{key;scope;_adapter;_defaultValue;_options;_rKey;_config;_s;constructor(e,t,n,s,o,i,a){this.key=e,this.scope=t,this._rKey=n,this._adapter=s,this._defaultValue=o.default,this._options=o,this._config=i,this._s=a??{lastValue:s.get(),isDestroyed:false,hasUserWrite:false,interceptors:void 0,changeHandlers:void 0,settled:S,resolveDestroyed:void 0,destroyed:void 0,hydrated:void 0,watchers:void 0,watchUnsub:void 0,watchPrev:void 0};}get(){return this._s.isDestroyed?this._s.lastValue:this._adapter.get()}peek(){return this._s.isDestroyed?this._s.lastValue:this._adapter.get()}_applyInterceptors(e,t){let n=this._s;if(n.interceptors===void 0||n.interceptors.size===0)return e;let s=e;try{for(let o of n.interceptors)e=o(e,t);}catch(o){let i=new L(this.key,this.scope,o);throw chunkLVZKO5RP_cjs.f(this.key,this.scope,i),i}return e===void 0?(chunkLVZKO5RP_cjs.e("warn",`Interceptor for state("${this.key}") returned undefined \u2014 ignoring.`),t):e instanceof Promise?(chunkLVZKO5RP_cjs.e("warn",`Interceptor for state("${this.key}") returned a Promise \u2014 interceptors must be synchronous. Ignoring.`),t):(Object.is(s,e)||chunkLVZKO5RP_cjs.i(this._config.onIntercept,{key:this.key,scope:this.scope,original:s,intercepted:e}),e)}_notifyChange(e,t){let n=this._s;if(n.changeHandlers!==void 0&&n.changeHandlers.size>0){let s=Array.from(n.changeHandlers);for(let o=0;o<s.length;o++)chunkLVZKO5RP_cjs.h(s[o],e,t,this.key,this.scope);}this._config.onChange!==void 0&&chunkLVZKO5RP_cjs.i(this._config.onChange,{key:this.key,scope:this.scope,value:e,previousValue:t});}set(e){let t=this._s;if(t.isDestroyed)return;let n=this._adapter.get(),s=typeof e=="function"?e(n):e;if(s=this._applyInterceptors(s,n),!this._options.isEqual?.(s,n)){try{this._adapter.set(s);}catch(o){if(o instanceof P)return;throw o}t.lastValue=s,t.hasUserWrite=true,t.settled=this._adapter.ready,this._notifyChange(s,n);}}subscribe(e){return this._adapter.subscribe(e)}reset(){let e=this._s;if(e.isDestroyed)return;let t=this._adapter.get(),n=this._applyInterceptors(this._defaultValue,t);if(!this._options.isEqual?.(n,t)){try{this._adapter.set(n);}catch(s){if(s instanceof P)return;throw s}e.lastValue=n,e.hasUserWrite=true,e.settled=this._adapter.ready,chunkLVZKO5RP_cjs.i(this._config.onReset,{key:this.key,scope:this.scope,previousValue:t}),this._notifyChange(n,t);}}get ready(){return this._adapter.ready}get settled(){return this._s.settled}get hydrated(){return this._s.hydrated??S}get destroyed(){let e=this._s;return e.destroyed||(e.destroyed=new Promise(t=>{e.resolveDestroyed=t;})),e.destroyed}get isDestroyed(){return this._s.isDestroyed}intercept(e){let t=this._s;return t.interceptors||(t.interceptors=new Set),t.interceptors.add(e),()=>{t.interceptors?.delete(e);}}onChange(e){let t=this._s;return t.changeHandlers||(t.changeHandlers=new Set),t.changeHandlers.add(e),()=>{t.changeHandlers?.delete(e);}}watch(e,t){let n=this._s;return n.watchers||(n.watchers=new Map),this._ensureWatchSubscription(),re(n.watchers,e,t)}patch(e,t){this.set(n=>{if(t?.strict){let s=n,o=e,i={};for(let a of Object.keys(o))Object.hasOwn(s,a)?i[a]=o[a]:chunkLVZKO5RP_cjs.e("warn",`patch("${this.key}") ignored unknown key "${a}" (strict mode).`);return {...n,...i}}return {...n,...e}});}destroy(){let e=this._s;if(!e.isDestroyed){e.lastValue=this.get(),e.isDestroyed=true;try{e.interceptors?.clear(),e.changeHandlers?.clear(),e.watchers?.clear(),e.watchUnsub?.(),this._adapter.destroy?.(),chunkLVZKO5RP_cjs.o(this._rKey),chunkLVZKO5RP_cjs.i(this._config.onDestroy,{key:this.key,scope:this.scope});}finally{e.resolveDestroyed?e.resolveDestroyed():e.destroyed=S;}}}_ensureWatchSubscription(){let e=this._s;e.watchUnsub||(e.watchPrev=this.get(),e.watchUnsub=this.subscribe(t=>{try{e.watchers&&e.watchers.size>0&&ne(e.watchers,e.watchPrev,t);}finally{e.watchPrev=t;}}));}};function B(r){return r.ext===void 0&&(r.ext={interceptors:void 0,changeHandlers:void 0,watchers:void 0,watchUnsub:void 0,watchPrev:void 0,resolveDestroyed:void 0,destroyed:void 0}),r.ext}var J=class{key;scope="memory";_c;_defaultValue;_options;_config;_rKey;constructor(e,t,n,s){this.key=e,this._rKey=t,this._defaultValue=n.default,this._options=n,this._config=s,this._c={current:n.default,isDestroyed:false,listeners:void 0,notifyFn:void 0,ext:void 0};}get(){return this._c.current}peek(){return this._c.current}set(e){let t=this._c;if(t.isDestroyed)return;let n=t.current,s=typeof e=="function"?e(n):e,o=t.ext;if(o!==void 0&&o.interceptors!==void 0&&o.interceptors.size>0){let i=s;try{for(let a of o.interceptors)s=a(s,n);}catch(a){let c=new L(this.key,this.scope,a);throw chunkLVZKO5RP_cjs.f(this.key,this.scope,c),c}if(s===void 0){chunkLVZKO5RP_cjs.e("warn",`Interceptor for state("${this.key}") returned undefined \u2014 ignoring.`);return}if(s instanceof Promise){chunkLVZKO5RP_cjs.e("warn",`Interceptor for state("${this.key}") returned a Promise \u2014 interceptors must be synchronous. Ignoring.`);return}Object.is(i,s)||chunkLVZKO5RP_cjs.i(this._config.onIntercept,{key:this.key,scope:this.scope,original:i,intercepted:s});}if(!this._options.isEqual?.(s,n)){if(t.current=s,t.notifyFn!==void 0&&k(t.notifyFn),o!==void 0&&o.changeHandlers!==void 0&&o.changeHandlers.size>0){let i=Array.from(o.changeHandlers);for(let a=0;a<i.length;a++)chunkLVZKO5RP_cjs.h(i[a],s,n,this.key,this.scope);}this._config.onChange!==void 0&&chunkLVZKO5RP_cjs.i(this._config.onChange,{key:this.key,scope:this.scope,value:s,previousValue:n});}}subscribe(e){let t=this._c;if(!t.listeners){let s=new Set,o=this.key,i=this.scope;t.listeners=s,t.notifyFn=()=>{let a=Array.from(s);for(let c=0;c<a.length;c++)chunkLVZKO5RP_cjs.g(a[c],t.current,o,i);};}let n=t.listeners;return n.add(e),()=>{n.delete(e);}}reset(){let e=this._c;if(e.isDestroyed)return;let t=e.current,n=this._defaultValue,s=e.ext;if(s!==void 0&&s.interceptors!==void 0&&s.interceptors.size>0){let o=n;try{for(let i of s.interceptors)n=i(n,t);}catch(i){let a=new L(this.key,this.scope,i);throw chunkLVZKO5RP_cjs.f(this.key,this.scope,a),a}if(n===void 0){chunkLVZKO5RP_cjs.e("warn",`Interceptor for state("${this.key}") returned undefined \u2014 ignoring.`);return}if(n instanceof Promise){chunkLVZKO5RP_cjs.e("warn",`Interceptor for state("${this.key}") returned a Promise \u2014 interceptors must be synchronous. Ignoring.`);return}Object.is(o,n)||chunkLVZKO5RP_cjs.i(this._config.onIntercept,{key:this.key,scope:this.scope,original:o,intercepted:n});}if(!this._options.isEqual?.(n,t)){if(e.current=n,e.notifyFn!==void 0&&k(e.notifyFn),this._config.onReset!==void 0&&chunkLVZKO5RP_cjs.i(this._config.onReset,{key:this.key,scope:this.scope,previousValue:t}),s!==void 0&&s.changeHandlers!==void 0&&s.changeHandlers.size>0){let o=Array.from(s.changeHandlers);for(let i=0;i<o.length;i++)chunkLVZKO5RP_cjs.h(o[i],n,t,this.key,this.scope);}this._config.onChange!==void 0&&chunkLVZKO5RP_cjs.i(this._config.onChange,{key:this.key,scope:this.scope,value:n,previousValue:t});}}get ready(){return S}get settled(){return S}get hydrated(){return S}get isDestroyed(){return this._c.isDestroyed}get destroyed(){if(this._c.isDestroyed)return S;let e=B(this._c);return e.destroyed||(e.destroyed=new Promise(t=>{e.resolveDestroyed=t;})),e.destroyed}intercept(e){let t=B(this._c);return t.interceptors||(t.interceptors=new Set),t.interceptors.add(e),()=>{t.interceptors?.delete(e);}}onChange(e){let t=B(this._c);return t.changeHandlers||(t.changeHandlers=new Set),t.changeHandlers.add(e),()=>{t.changeHandlers?.delete(e);}}watch(e,t){let n=B(this._c);return n.watchers||(n.watchers=new Map),this._ensureWatchSubscription(),re(n.watchers,e,t)}patch(e,t){this.set(n=>{if(t?.strict){let s=n,o=e,i={};for(let a of Object.keys(o))Object.hasOwn(s,a)?i[a]=o[a]:chunkLVZKO5RP_cjs.e("warn",`patch("${this.key}") ignored unknown key "${a}" (strict mode).`);return {...n,...i}}return {...n,...e}});}_ensureWatchSubscription(){let e=B(this._c);e.watchUnsub||(e.watchPrev=this._c.current,e.watchUnsub=this.subscribe(t=>{try{e.watchers&&e.watchers.size>0&&ne(e.watchers,e.watchPrev,t);}finally{e.watchPrev=t;}}));}destroy(){let e=this._c;if(e.isDestroyed)return;e.isDestroyed=true;let t=e.ext;try{t!==void 0&&(t.interceptors?.clear(),t.changeHandlers?.clear(),t.watchers?.clear(),t.watchUnsub?.()),e.listeners?.clear(),e.notifyFn=void 0,this._rKey&&chunkLVZKO5RP_cjs.o(this._rKey),chunkLVZKO5RP_cjs.i(this._config.onDestroy,{key:this.key,scope:this.scope});}finally{t?.resolveDestroyed?t.resolveDestroyed():t!==void 0&&(t.destroyed=S);}}};function Ht(r,e){if(!r)throw new Error("[gjendje] key must be a non-empty string.");let t=chunkLVZKO5RP_cjs.d();if(t.keyPattern&&!t.keyPattern.test(r))throw new Error(`[gjendje] Key "${r}" does not match the configured keyPattern ${t.keyPattern}.`);if(e.version!==void 0&&(!Number.isSafeInteger(e.version)||e.version<1))throw new Error(`[gjendje] version must be a positive integer, got ${e.version} for state("${r}").`);let n=e.scope??t.scope??"memory",s=n==="render"?"memory":n;if(n==="render"&&!Te&&(Te=true,console.warn('[gjendje] The "render" scope is deprecated. Use "memory" instead. "render" will be removed in the next major version.')),s==="memory"){if((e.sync||t.sync)&&chunkLVZKO5RP_cjs.e("warn",'sync: true is ignored for scope "memory". Only "local" and "bucket" scopes support cross-tab sync.'),t.registry===false)return new J(r,"",e,t);let b=chunkLVZKO5RP_cjs.l(r,s),T=chunkLVZKO5RP_cjs.m(b);if(T&&!T.isDestroyed)return t.warnOnDuplicate&&chunkLVZKO5RP_cjs.e("warn",`Duplicate state("${r}") with scope "${s}". Returning cached instance.`),T;let _=new J(r,b,e,t);return chunkLVZKO5RP_cjs.n(b,r,s,_,t,T),_}let o=chunkLVZKO5RP_cjs.l(r,s),i=chunkLVZKO5RP_cjs.m(o);if(i&&!i.isDestroyed)return t.warnOnDuplicate&&chunkLVZKO5RP_cjs.e("warn",`Duplicate state("${r}") with scope "${s}". Returning cached instance.`),i;if(t.requireValidation&&chunkLVZKO5RP_cjs.a.has(s)&&!e.validate)throw new Error(`[gjendje] A validate function is required for persisted scope "${s}" on state("${r}"). Set requireValidation: false in configure() to disable.`);let a=(e.ssr??t.ssr)&&be.has(s),c=a&&Q(),d=e.sync??(t.sync&&oe.has(s));d&&!oe.has(s)&&chunkLVZKO5RP_cjs.e("warn",`sync: true is ignored for scope "${s}". Only "local" and "bucket" scopes support cross-tab sync.`);let u=De(r,e,t.prefix),p=s,w=c?ye(e.default):Se(u,p,e),m=d&&oe.has(s)&&!c?me(w,u,s):w,l=new ae(r,s,o,m,e,t);return a&&!Q()&&(l._s.hydrated=ve(()=>{if(l.isDestroyed||l._s.hasUserWrite)return;let b=l.get();if(!V(b,e.default))return;let T;try{T=Se(u,p,e);let _=T.get();V(_,e.default)||l.set(_),chunkLVZKO5RP_cjs.i(t.onHydrate,{key:r,scope:s,serverValue:e.default,clientValue:_});}catch(_){chunkLVZKO5RP_cjs.e("debug",`Hydration adapter unavailable for state("${r}") \u2014 using memory fallback.`);let E=new z(r,s,_);chunkLVZKO5RP_cjs.f(r,s,E);}finally{T?.destroy?.();}})),chunkLVZKO5RP_cjs.n(o,r,s,l,t,i),l}exports.a=Ve;exports.b=k;exports.c=S;exports.d=Ie;exports.e=Le;exports.f=Me;exports.g=C;exports.h=V;exports.i=Ke;exports.j=j;exports.k=F;exports.l=P;exports.m=W;exports.n=q;exports.o=L;exports.p=fe;exports.q=M;exports.r=z;exports.s=re;exports.t=ne;exports.u=Kt;exports.v=Ht;
|
package/dist/chunk-WX6QJ7EN.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var s={},g=new Set(["local","session","bucket"]),x=new Set(["silent","warn","error","debug"]),y=new Set(["memory","render","session","local","url","server","bucket"]),w=new Set(["scope","keyPattern","logLevel","maxKeys","prefix","registry","requireValidation","ssr","sync","warnOnDuplicate","onDestroy","onError","onHydrate","onMigrate","onQuotaExceeded","onRegister","onSync","onChange","onReset","onIntercept","onValidationFail","onExpire"]);function v(e){if(e.maxKeys!==void 0&&(!Number.isSafeInteger(e.maxKeys)||e.maxKeys<1))throw new Error(`[gjendje] maxKeys must be a positive integer, got ${e.maxKeys}.`);if(e.logLevel!==void 0&&!x.has(e.logLevel))throw new Error(`[gjendje] logLevel must be one of 'silent', 'warn', 'error', 'debug', got '${e.logLevel}'.`);if(e.scope!==void 0&&!y.has(e.scope))throw new Error(`[gjendje] scope must be a valid scope ('memory', 'local', 'session', 'url', 'server', 'bucket'), got '${e.scope}'.`);if(e.keyPattern!==void 0&&!(e.keyPattern instanceof RegExp))throw new Error(`[gjendje] keyPattern must be a RegExp, got ${typeof e.keyPattern}.`);for(let n of Object.keys(e)){w.has(n)||l("warn",`configure() received unknown key "${n}" \u2014 possible typo.`);let r=e[n];r===void 0?delete s[n]:s[n]=r;}let t=s.scope??e.scope;s.registry===false&&t&&g.has(t)&&l("warn",`registry: false has no effect on scope "${t}" \u2014 persistent scopes always use the registry.`);}function C(){s={};}function m(){return s}var f={debug:0,warn:1,error:2};function l(e,t){let n=s.logLevel??"warn";n!=="silent"&&f[e]>=f[n]&&console[e](`[gjendje] ${t}`);}function c(e,t,n){if(s.onError!==void 0)try{s.onError({key:e,scope:t,error:n});}catch(r){console.error("[gjendje] onError callback threw:",r);}}function u(e,t,n,r){try{e(t);}catch(o){console.error("[gjendje] Listener threw:",o),n!==void 0&&r!==void 0&&c(n,r,o);}}function b(e,t,n,r,o){try{e(t,n);}catch(i){console.error("[gjendje] Change handler threw:",i),r!==void 0&&o!==void 0&&c(r,o,i);}}function p(e,t){if(e!==void 0)try{e(t);}catch(n){console.error("[gjendje] Config callback threw:",n);}}function h(e,t){let n=new Set;return {notify(r){let o=Array.from(n);for(let i=0;i<o.length;i++)u(o[i],r,e,t);},subscribe(r){return n.add(r),()=>{n.delete(r);}},clear(){n.clear();}}}function k(e,t){let n=new Set,r;return {notify(o){if(r!==void 0){u(r,o,e,t);return}let i=Array.from(n);for(let a=0;a<i.length;a++)u(i[a],o,e,t);},subscribe(o){return n.add(o),r=n.size===1?o:void 0,()=>{n.delete(o),n.size===1?r=n.values().next().value:r=void 0;}},clear(){n.clear(),r=void 0;}}}function T(e,t){return `${t}:${e}`}var d=new Map;function R(e){return d.get(e)}function I(e,t,n,r,o,i){if(i!==void 0){d.set(e,r),p(o.onRegister,{key:t,scope:n});return}if(o.maxKeys!==void 0&&d.size>=o.maxKeys)throw new Error(`[gjendje] maxKeys limit (${o.maxKeys}) reached. Cannot register state("${t}") with scope "${n}".`);d.set(e,r),p(o.onRegister,{key:t,scope:n});}function K(e){d.delete(e);}function $(){return d}function V(){let e=[...d.values()];d.clear();for(let t of e)t.isDestroyed||t.destroy();}export{g as a,v as b,C as c,m as d,l as e,c as f,u as g,b as h,p as i,h as j,k,T as l,R as m,I as n,K as o,$ as p,V as q};
|