gjendje 1.4.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/chunk-7FYTDSXL.cjs +1 -0
- package/dist/chunk-IXTAQZNU.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 +1 -1
- package/dist/devtools.d.ts +1 -1
- package/dist/devtools.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +123 -21
- package/dist/index.d.ts +123 -21
- 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 -1
- package/dist/svelte.d.cts +1 -1
- package/dist/svelte.d.ts +1 -1
- package/dist/svelte.js +1 -1
- 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 +1 -1
- package/dist/chunk-22S7BKI5.js +0 -1
- package/dist/chunk-6JCZCUTF.js +0 -1
- package/dist/chunk-EB6FSOCF.cjs +0 -1
- package/dist/chunk-RZPEIFWE.cjs +0 -1
- /package/dist/{chunk-QRYS36IQ.cjs → chunk-5F5C5U62.cjs} +0 -0
- /package/dist/{chunk-3JPXLAVT.js → chunk-6CL7CC45.js} +0 -0
- /package/dist/{types-C75CW5j8.d.cts → index-C75CW5j8.d.cts} +0 -0
- /package/dist/{types-C75CW5j8.d.ts → index-C75CW5j8.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -104,7 +104,7 @@ function Counter() {
|
|
|
104
104
|
|
|
105
105
|
## Primitives
|
|
106
106
|
|
|
107
|
-
`computed`, `select`, `previous`, `readonly`, `collection`, `effect`
|
|
107
|
+
`computed`, `select`, `previous`, `readonly`, `collection`, `effect`, `when`, `resource`, `channel`, `toSignal`, `fromSignal`
|
|
108
108
|
|
|
109
109
|
[Primitives reference](https://github.com/charliebeckstrand/gjendje/blob/main/docs/primitives.md)
|
|
110
110
|
|
|
@@ -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 Le(s){M++;try{s();}finally{M--,M===0&&je();}}function _(s){if(M>0){fe.get(s)!==re&&(fe.set(s,re),I.push(s));return}s();}var Ee=100;function je(){let s=0;for(;I.length>0;){if(++s>Ee){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 E=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 E{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";}},j=class extends E{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 E{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 E{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 E{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 E{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 E{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 E{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";}},pe=class extends E{constructor(e,t){super(`Resource fetch failed for "${e}".`,e,"memory",t!==void 0?{cause:t}:void 0),this.name="ResourceError";}},he=class extends Error{timeout;constructor(e){super(`when() timed out after ${e}ms`),this.name="WhenTimeoutError",this.timeout=e;}};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 $e(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($e(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=Ae(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 ge(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 ye(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 Pe=1e3;function Ae(s,e,t,r,n,i){if(e<0||t<0||t-e>Pe)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 ge(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=ye(g,n);}catch(A){let de=new j(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 j(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 $(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",$),{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",$);}}}}function De(){return typeof navigator<"u"&&"storageBuckets"in navigator&&navigator.storageBuckets!=null}function me(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 Ce={ms:1,s:1e3,m:6e4,h:36e5,d:864e5,w:6048e5},Re={b:1,kb:1024,mb:1048576,gb:1073741824};function Ve(s){return me(s,Ce,e=>Date.now()+e)}function Oe(s){return me(s,Re,Math.floor)}function we(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(!De())return;let y=false;try{let h={persisted:e.persisted??!1,durability:"strict"};if(e.expires!=null){let g=Ve(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=Oe(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 $=d.get();if(y=!chunkSLY2FTN3_cjs.f($,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($);}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 be(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 ve(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 Te(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 $=h.toString(),l=$?`${window.location.pathname}?${$}${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 j(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 Se=new Set(["session","local","url","bucket"]);function _e(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,xe=false;function Lt(s){ae=s;}var oe=new Set(["local","bucket"]);function Ie(s,e,t){if(e.prefix===false)return s;let r=e.prefix??t;return r?`${r}:${s}`:s}function ke(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 Te(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 we(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 j)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 j)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 j)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 Mt(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"&&!xe&&(xe=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)&&Se.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=Ie(s,e,t.prefix),p=n,w=c?be(e.default):ke(f,p,e),y=d&&oe.has(n)&&!c?ve(w,f,n):w,h=new ce(s,n,i,y,e,t);return o&&!J()&&(h._s.hydrated=_e(()=>{if(h.isDestroyed||h._s.hasUserWrite)return;let b=h.get();if(!chunkSLY2FTN3_cjs.f(b,e.default))return;let v;try{v=ke(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 $=new G(s,n,x);chunk5F5C5U62_cjs.h(s,n,$);}finally{v?.destroy?.();}})),chunk5F5C5U62_cjs.q(i,s,n,h,t,a),h}exports.a=Le;exports.b=_;exports.c=E;exports.d=W;exports.e=j;exports.f=q;exports.g=z;exports.h=U;exports.i=le;exports.j=H;exports.k=G;exports.l=pe;exports.m=he;exports.n=ne;exports.o=se;exports.p=Lt;exports.q=Mt;
|
|
@@ -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 as j$1,l,r,m}from'./chunk-6CL7CC45.js';var M=0,re=0,I=[],fe=new WeakMap;function Le(s){M++;try{s();}finally{M--,M===0&&je();}}function _(s){if(M>0){fe.get(s)!==re&&(fe.set(s,re),I.push(s));return}s();}var Ee=100;function je(){let s=0;for(;I.length>0;){if(++s>Ee){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 E=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 E{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";}},j=class extends E{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 E{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 E{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 E{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 E{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 E{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 E{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";}},pe=class extends E{constructor(e,t){super(`Resource fetch failed for "${e}".`,e,"memory",t!==void 0?{cause:t}:void 0),this.name="ResourceError";}},he=class extends Error{timeout;constructor(e){super(`when() timed out after ${e}ms`),this.name="WhenTimeoutError",this.timeout=e;}};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 $e(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($e(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=Ae(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 ge(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 ye(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 Pe=1e3;function Ae(s,e,t,r,n,i){if(e<0||t<0||t-e>Pe)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 ge(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=ye(g$1,n);}catch(A){let de=new j(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 j(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 $(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",$),{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",$);}}}}function De(){return typeof navigator<"u"&&"storageBuckets"in navigator&&navigator.storageBuckets!=null}function me(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 Ce={ms:1,s:1e3,m:6e4,h:36e5,d:864e5,w:6048e5},Re={b:1,kb:1024,mb:1048576,gb:1073741824};function Ve(s){return me(s,Ce,e=>Date.now()+e)}function Oe(s){return me(s,Re,Math.floor)}function we(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(!De())return;let y=false;try{let h={persisted:e.persisted??!1,durability:"strict"};if(e.expires!=null){let g$1=Ve(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=Oe(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 $=d.get();if(y=!f$1($,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($);}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 be(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 ve(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 Te(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 $=h.toString(),l=$?`${window.location.pathname}?${$}${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 j(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 Se=new Set(["session","local","url","bucket"]);function _e(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,xe=false;function Lt(s){ae=s;}var oe=new Set(["local","bucket"]);function Ie(s,e,t){if(e.prefix===false)return s;let r=e.prefix??t;return r?`${r}:${s}`:s}function ke(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 Te(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 we(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$1(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 j)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 j)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 j)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$1(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$1(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$1(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 Mt(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"&&!xe&&(xe=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)&&Se.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=Ie(s,e,t.prefix),p$1=n,w=c$1?be(e.default):ke(f$2,p$1,e),y=d&&oe.has(n)&&!c$1?ve(w,f$2,n):w,h$1=new ce(s,n,i,y,e,t);return o$1&&!J()&&(h$1._s.hydrated=_e(()=>{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=ke(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 $=new G(s,n,x);h(s,n,$);}finally{v?.destroy?.();}})),q$1(i,s,n,h$1,t,a),h$1}export{Le as a,_ as b,E as c,W as d,j as e,q as f,z as g,U as h,le as i,H as j,G as k,pe as l,he as m,ne as n,se as o,Lt as p,Mt as q};
|
|
@@ -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
package/dist/devtools.d.ts
CHANGED
package/dist/devtools.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import {a,b as b$1,s as s$1}from'./chunk-
|
|
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};
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var chunkRZPEIFWE_cjs=require('./chunk-RZPEIFWE.cjs'),chunkQRYS36IQ_cjs=require('./chunk-QRYS36IQ.cjs');function ne(e,t){let n=chunkRZPEIFWE_cjs.v(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 S=Array.from(y[m][1]);for(let b=0;b<S.length;b++)chunkQRYS36IQ_cjs.i(S[b],r);}s=r;return}let g=r.length,d;for(let y=0;y<g;y++){let m=p[y],S=r[y];if(m===S)continue;let b=chunkRZPEIFWE_cjs.g(m)?m:void 0,T=chunkRZPEIFWE_cjs.g(S)?S:void 0;if(!b||!T){let h=Array.from(i);for(let k=0;k<h.length;k++){let x=Array.from(h[k][1]);for(let O=0;O<x.length;O++)chunkQRYS36IQ_cjs.i(x[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 S=Array.from(m);for(let b=0;b<S.length;b++)chunkQRYS36IQ_cjs.i(S[b],r);}}s=r;}),i}let u=n.destroy,c=n;return c.watch=(i,r)=>chunkRZPEIFWE_cjs.s(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 chunkRZPEIFWE_cjs.p(n,"memory",o);throw chunkQRYS36IQ_cjs.h(n,"memory",s),s}}var oe=0;function se(e,t,n){let o=n?.key??`computed:${oe++}`,s=chunkQRYS36IQ_cjs.n(o,"memory"),a,l=true,u=false,c=chunkRZPEIFWE_cjs.i(),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=chunkRZPEIFWE_cjs.e(e,()=>{u||(l=true,chunkRZPEIFWE_cjs.b(f));});p();let y=chunkRZPEIFWE_cjs.c,m=chunkRZPEIFWE_cjs.c,S=chunkRZPEIFWE_cjs.c,b=false;for(let T=0;T<r;T++)if(e[T].ready!==chunkRZPEIFWE_cjs.c){b=true;break}if(b){let T=new Array(r),h=new Array(r),k=new Array(r);for(let x=0;x<r;x++){let O=e[x];T[x]=O.ready,h[x]=O.hydrated,k[x]=O.settled;}y=Promise.all(T).then(chunkRZPEIFWE_cjs.d),m=Promise.all(h).then(chunkRZPEIFWE_cjs.d),S=Promise.all(k).then(chunkRZPEIFWE_cjs.d);}return {key:o,scope:"memory",get ready(){return y},get settled(){return S},get hydrated(){return m},get destroyed(){return u?chunkRZPEIFWE_cjs.c:c.promise},get isDestroyed(){return u},get(){return p()},peek(){return a},subscribe(T){return u?chunkRZPEIFWE_cjs.d:s.subscribe(T)},destroy(){if(!u){u=true;try{chunkRZPEIFWE_cjs.f(d),s.clear();}finally{c.resolve();}}}}}function ie(){return Array.from(chunkQRYS36IQ_cjs.s().values(),e=>({key:e.key,scope:e.scope,value:e.isDestroyed?void 0:e.get(),isDestroyed:e.isDestroyed}))}var ae=0;function ce(e,t,n){let o,s=false,a=n?.key??`effect:${ae++}`,l=e.length,u=new Array(l);function c(){if(!s){if(o){try{o();}catch(r){console.error("[gjendje] Effect cleanup threw:",r),chunkQRYS36IQ_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),chunkQRYS36IQ_cjs.h(a,"memory",r);}}}let i=chunkRZPEIFWE_cjs.e(e,c);return c(),{stop(){if(!s){s=true;try{chunkRZPEIFWE_cjs.f(i);}finally{if(o){try{o();}catch(r){console.error("[gjendje] Effect cleanup threw:",r),chunkQRYS36IQ_cjs.h(a,"memory",r);}o=void 0;}}}}}}function ue(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 le(e){let t,n,o;function s(){n||(o=e.get(),n=e.subscribe(l=>{try{t&&t.size>0&&chunkRZPEIFWE_cjs.t(t,o,l);}finally{o=l;}}));}let a=Object.create(e);return a.watch=(l,u)=>(t||(t=new Map),s(),chunkRZPEIFWE_cjs.s(t,l,u)),a.destroy=()=>{t?.clear(),t=void 0,n?.(),n=void 0,o=void 0,e.destroy();},a}var de=0;function pe(e,t){let n=chunkQRYS36IQ_cjs.m(),o=t?.key??`previous:${de++}`,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)||chunkRZPEIFWE_cjs.b(u);});}catch{throw n.clear(),new Error(`[gjendje] previous(): source.subscribe() threw for "${o}".`)}let i=chunkRZPEIFWE_cjs.i();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 fe(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 ye=0;function Te(e,t,n){try{return e(t)}catch(o){let s=new chunkRZPEIFWE_cjs.p(n,"memory",o);throw chunkQRYS36IQ_cjs.h(n,"memory",s),s}}function me(e,t,n){let o=n?.key??`select:${ye++}`,s=chunkQRYS36IQ_cjs.n(o,"memory"),a,l=true,u=false,c=chunkRZPEIFWE_cjs.i();function i(){return l&&(a=Te(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,chunkRZPEIFWE_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?chunkRZPEIFWE_cjs.c:c.promise},get isDestroyed(){return u},get(){return i()},peek(){return a},subscribe(g){return u?chunkRZPEIFWE_cjs.d: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 chunkRZPEIFWE_cjs.v(o,{...n,default:s,scope:e})}function he(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=he(n,t);return chunkRZPEIFWE_cjs.v(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 ge=P;Object.defineProperty(exports,"ComputedError",{enumerable:true,get:function(){return chunkRZPEIFWE_cjs.p}});Object.defineProperty(exports,"GjendjeError",{enumerable:true,get:function(){return chunkRZPEIFWE_cjs.j}});Object.defineProperty(exports,"HydrationError",{enumerable:true,get:function(){return chunkRZPEIFWE_cjs.r}});Object.defineProperty(exports,"InterceptorError",{enumerable:true,get:function(){return chunkRZPEIFWE_cjs.o}});Object.defineProperty(exports,"MigrationError",{enumerable:true,get:function(){return chunkRZPEIFWE_cjs.m}});Object.defineProperty(exports,"StorageReadError",{enumerable:true,get:function(){return chunkRZPEIFWE_cjs.k}});Object.defineProperty(exports,"StorageWriteError",{enumerable:true,get:function(){return chunkRZPEIFWE_cjs.l}});Object.defineProperty(exports,"SyncError",{enumerable:true,get:function(){return chunkRZPEIFWE_cjs.q}});Object.defineProperty(exports,"ValidationError",{enumerable:true,get:function(){return chunkRZPEIFWE_cjs.n}});Object.defineProperty(exports,"batch",{enumerable:true,get:function(){return chunkRZPEIFWE_cjs.a}});Object.defineProperty(exports,"shallowEqual",{enumerable:true,get:function(){return chunkRZPEIFWE_cjs.h}});Object.defineProperty(exports,"configure",{enumerable:true,get:function(){return chunkQRYS36IQ_cjs.d}});Object.defineProperty(exports,"destroyAll",{enumerable:true,get:function(){return chunkQRYS36IQ_cjs.t}});Object.defineProperty(exports,"resetConfig",{enumerable:true,get:function(){return chunkQRYS36IQ_cjs.e}});exports.collection=ne;exports.computed=se;exports.effect=ce;exports.previous=pe;exports.readonly=fe;exports.select=me;exports.snapshot=ie;exports.state=ge;exports.withHistory=ue;exports.withWatch=le;
|
|
1
|
+
'use strict';var chunk7FYTDSXL_cjs=require('./chunk-7FYTDSXL.cjs'),chunkSLY2FTN3_cjs=require('./chunk-SLY2FTN3.cjs'),chunk5F5C5U62_cjs=require('./chunk-5F5C5U62.cjs');var ce=0;function ue(e){let r=typeof e=="string"?e:e?.key??`channel:${ce++}`,t=chunk5F5C5U62_cjs.m(),o=false;return {get key(){return r},emit(n){o||t.notify(n);},subscribe(n){return o?chunkSLY2FTN3_cjs.b:t.subscribe(n)},destroy(){o||(o=true,t.clear());},get isDestroyed(){return o}}}function le(e,r){let t=chunk7FYTDSXL_cjs.q(e,r),o,n,a;function l(){if(o)return o;let s=new Map;return o=s,n=t.get(),a=t.subscribe(i=>{if(s.size===0){n=i;return}let y=n??[];if(i.length!==y.length){let d=Array.from(s);for(let T=0;T<d.length;T++){let b=Array.from(d[T][1]);for(let v=0;v<b.length;v++)chunk5F5C5U62_cjs.i(b[v],i);}n=i;return}let g=i.length,p;for(let d=0;d<g;d++){let T=y[d],b=i[d];if(T===b)continue;let v=chunkSLY2FTN3_cjs.e(T)?T:void 0,m=chunkSLY2FTN3_cjs.e(b)?b:void 0;if(!v||!m){let h=Array.from(s);for(let O=0;O<h.length;O++){let S=Array.from(h[O][1]);for(let x=0;x<S.length;x++)chunk5F5C5U62_cjs.i(S[x],i);}n=i;return}for(let h of s.keys())p?.has(h)||Object.is(v[h],m[h])||(p||(p=new Set),p.add(h));if(p&&p.size===s.size)break}if(p)for(let d of p){let T=s.get(d);if(T){let b=Array.from(T);for(let v=0;v<b.length;v++)chunk5F5C5U62_cjs.i(b[v],i);}}n=i;}),s}let c=t.destroy,u=t;return u.watch=(s,i)=>chunk7FYTDSXL_cjs.n(l(),s,i),u.add=(...s)=>{t.set(t.get().concat(s));},u.remove=(s,i)=>{let y=t.get();if(i?.one){let f=y.findIndex(s);if(f===-1)return;let g=y.slice();g.splice(f,1),t.set(g);}else {let f=y.filter(g=>!s(g));f.length!==y.length&&t.set(f);}},u.update=(s,i,y)=>{let f=t.get(),g=typeof i=="function";if(y?.one){let p=f.findIndex(s);if(p===-1)return;let d=f.slice();d[p]=g?i(f[p]):{...f[p],...i},t.set(d);}else {let p;for(let d=0;d<f.length;d++){let T=f[d];s(T)&&(p||(p=f.slice()),p[d]=g?i(T):{...T,...i});}p&&t.set(p);}},u.find=s=>t.get().find(s),u.findAll=s=>t.get().filter(s),u.has=s=>t.get().some(s),u.clear=()=>{t.set([]);},Object.defineProperty(u,"size",{get(){return t.get().length},enumerable:true}),u.destroy=()=>{try{o?.clear(),o=void 0,a?.(),a=void 0,n=void 0;}finally{c.call(u);}},u}function de(e,r,t){try{return e(r)}catch(o){let n=new chunk7FYTDSXL_cjs.i(t,"memory",o);throw chunk5F5C5U62_cjs.h(t,"memory",n),n}}var pe=0;function fe(e,r,t){let o=t?.key??`computed:${pe++}`,n=chunk5F5C5U62_cjs.n(o,"memory"),a,l=true,c=false,u=chunkSLY2FTN3_cjs.h(),s=new Array(e.length),i=e.length;function y(){if(!l)return a;for(let m=0;m<i;m++){let h=e[m];s[m]=h.get();}return a=de(r,s,o),l=false,a}let f=()=>{if(c)return;let m=a,h=y();Object.is(h,m)||n.notify(h);},p=chunkSLY2FTN3_cjs.c(e,()=>{c||(l=true,chunk7FYTDSXL_cjs.b(f));});y();let d=chunkSLY2FTN3_cjs.a,T=chunkSLY2FTN3_cjs.a,b=chunkSLY2FTN3_cjs.a,v=false;for(let m=0;m<i;m++)if(e[m].ready!==chunkSLY2FTN3_cjs.a){v=true;break}if(v){let m=new Array(i),h=new Array(i),O=new Array(i);for(let S=0;S<i;S++){let x=e[S];m[S]=x.ready,h[S]=x.hydrated,O[S]=x.settled;}d=Promise.all(m).then(chunkSLY2FTN3_cjs.b),T=Promise.all(h).then(chunkSLY2FTN3_cjs.b),b=Promise.all(O).then(chunkSLY2FTN3_cjs.b);}return {key:o,scope:"memory",get ready(){return d},get settled(){return b},get hydrated(){return T},get destroyed(){return c?chunkSLY2FTN3_cjs.a:u.promise},get isDestroyed(){return c},get(){return y()},peek(){return a},subscribe(m){return c?chunkSLY2FTN3_cjs.b:n.subscribe(m)},destroy(){if(!c){c=true;try{chunkSLY2FTN3_cjs.d(p),n.clear();}finally{u.resolve();}}}}}var ye=0;function Te(e,r,t){let o,n=false,a=t?.key??`effect:${ye++}`,l=e.length,c=new Array(l);function u(){if(!n){if(o){try{o();}catch(i){console.error("[gjendje] Effect cleanup threw:",i),chunk5F5C5U62_cjs.h(a,"memory",i);}o=void 0;}for(let i=0;i<l;i++){let y=e[i];c[i]=y.get();}try{o=r(c);}catch(i){console.error("[gjendje] Effect callback threw:",i),chunk5F5C5U62_cjs.h(a,"memory",i);}}}let s=chunkSLY2FTN3_cjs.c(e,u);return u(),{stop(){if(!n){n=true;try{chunkSLY2FTN3_cjs.d(s);}finally{if(o){try{o();}catch(i){console.error("[gjendje] Effect cleanup threw:",i),chunk5F5C5U62_cjs.h(a,"memory",i);}o=void 0;}}}}}}function me(e,r){let t=r?.maxSize??50;if(!Number.isSafeInteger(t)||t<1)throw new Error(`[gjendje] withHistory maxSize must be a positive integer, got ${t}.`);let o=[],n=[],a=false,l=e.onChange((s,i)=>{a||(o.push(i),o.length>t&&o.shift(),n.length=0);});function c(s,i){if(s.length===0||e.isDestroyed)return;let y=e.get(),f=s[s.length-1];a=true;try{e.set(f),Object.is(e.get(),y)||(s.pop(),i.push(y));}finally{a=false;}}let u=Object.create(e);return u.undo=()=>c(o,n),u.redo=()=>c(n,o),Object.defineProperty(u,"canUndo",{get(){return o.length>0},enumerable:true}),Object.defineProperty(u,"canRedo",{get(){return n.length>0},enumerable:true}),u.clearHistory=()=>{o.length=0,n.length=0;},u.destroy=()=>{try{l(),o.length=0,n.length=0;}finally{e.destroy();}},u}function be(e){let r,t,o;function n(){t||(o=e.get(),t=e.subscribe(l=>{try{r&&r.size>0&&chunk7FYTDSXL_cjs.o(r,o,l);}finally{o=l;}}));}let a=Object.create(e);return a.watch=(l,c)=>(r||(r=new Map),n(),chunk7FYTDSXL_cjs.n(r,l,c)),a.destroy=()=>{r?.clear(),r=void 0,t?.(),t=void 0,o=void 0,e.destroy();},a}var ge=0;function he(e,r){let t=chunk5F5C5U62_cjs.m(),o=r?.key??`previous:${ge++}`,n,a=e.get(),l=false,c=()=>{t.notify(n);},u;try{u=e.subscribe(i=>{let y=n;n=a,a=i,Object.is(y,n)||chunk7FYTDSXL_cjs.b(c);});}catch{throw t.clear(),new Error(`[gjendje] previous(): source.subscribe() threw for "${o}".`)}let s=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 s.promise},get isDestroyed(){return l},get(){return n},peek(){return n},subscribe:t.subscribe,destroy(){if(!l){l=true;try{u?.();}finally{t.clear(),s.resolve();}}}}}function V(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 xe=0;function ve(e,r,t){let o=Array.isArray(e),n=o?e:void 0,a=o?r:e,l=o?t:r,c=l?.key??`resource:${xe++}`,u=chunk7FYTDSXL_cjs.q(`${c}:data`,{default:l?.initialData}),s=chunk7FYTDSXL_cjs.q(`${c}:loading`,{default:true}),i=chunk7FYTDSXL_cjs.q(`${c}:error`,{default:void 0}),y=V(u),f=V(s),g=V(i),p=l?.isEqual,d=0,T=false,b,v=[];n&&(v=chunkSLY2FTN3_cjs.c(n,()=>{m();}));function m(){if(T)return;b&&b.abort(),b=new AbortController;let h=++d,O=b.signal;chunk7FYTDSXL_cjs.a(()=>{s.set(true),i.set(void 0);});let S;try{if(n){let x=n.length,N=new Array(x);for(let B=0;B<x;B++){let Q=n[B];N[B]=Q.get();}S=a(N);}else S=a();}catch(x){chunk7FYTDSXL_cjs.a(()=>{i.set(new chunk7FYTDSXL_cjs.l(c,x)),s.set(false);});return}S.then(x=>{O.aborted||T||d!==h||chunk7FYTDSXL_cjs.a(()=>{if(p?.(u.get(),x)){s.set(false);return}u.set(x),s.set(false);});},x=>{O.aborted||T||d!==h||chunk7FYTDSXL_cjs.a(()=>{i.set(new chunk7FYTDSXL_cjs.l(c,x)),s.set(false);});});}return m(),{data:y,loading:f,error:g,refetch:m,destroy(){if(!T){T=true,b&&(b.abort(),b=void 0);try{chunkSLY2FTN3_cjs.d(v);}finally{u.destroy(),s.destroy(),i.destroy();}}},get isDestroyed(){return T}}}var Se=0;function Re(e,r,t){try{return e(r)}catch(o){let n=new chunk7FYTDSXL_cjs.i(t,"memory",o);throw chunk5F5C5U62_cjs.h(t,"memory",n),n}}function Ie(e,r,t){let o=t?.key??`select:${Se++}`,n=chunk5F5C5U62_cjs.n(o,"memory"),a,l=true,c=false,u=chunkSLY2FTN3_cjs.h();function s(){return l&&(a=Re(r,e.get(),o),l=false),a}let i=()=>{if(c)return;let g=a,p=s();Object.is(p,g)||n.notify(p);},y=()=>{c||(l=true,chunk7FYTDSXL_cjs.b(i));},f=e.subscribe(y);return s(),{key:o,scope:"memory",get ready(){return e.ready},get settled(){return e.settled},get hydrated(){return e.hydrated},get destroyed(){return c?chunkSLY2FTN3_cjs.a:u.promise},get isDestroyed(){return c},get(){return s()},peek(){return a},subscribe(g){return c?chunkSLY2FTN3_cjs.b:n.subscribe(g)},destroy(){if(!c){c=true;try{f(),n.clear();}finally{u.resolve();}}}}}function _(e){let r=Object.keys(e);if(r.length!==1)throw new Error(`[gjendje] Shortcut expects exactly one key, got ${r.length}: ${r.join(", ")}`);let t=r[0];return [t,e[t]]}function K(e,r,t){let[o,n]=_(r);return chunk7FYTDSXL_cjs.q(o,{...t,default:n,scope:e})}function Oe(e,r){return e?{...e,default:r}:r!==null&&typeof r=="object"&&"default"in r?r:{default:r}}function A(e,r,t){let o,n;if(typeof e=="object"){let[a,l]=_(e);o=a,n={...r,default:l};}else o=e,n=Oe(t,r);return chunk7FYTDSXL_cjs.q(o,n)}A.local=(e,r)=>K("local",e,r);A.session=(e,r)=>K("session",e,r);A.url=(e,r)=>K("url",e,r);A.bucket=(e,r)=>K("bucket",e,r);A.server=(e,r)=>K("server",e,r);var we=A;function ke(e){if(typeof e.set=="function"){let r=e;return {get value(){return r.get()},set value(t){r.set(t);},subscribe:r.subscribe.bind(r)}}return {get value(){return e.get()},subscribe:e.subscribe.bind(e)}}var De=0;function je(e,r){let t=chunk5F5C5U62_cjs.m(),o=r?.key??`signal:${De++}`,n=e.value,a=false,l=()=>{t.notify(n);},c;try{c=e.subscribe(s=>{Object.is(n,s)||(n=s,chunk7FYTDSXL_cjs.b(l));});}catch{throw a=true,t.clear(),new Error(`[gjendje] fromSignal(): signal.subscribe() threw for "${o}".`)}let u=chunkSLY2FTN3_cjs.h();return {key:o,scope:"memory",get ready(){return chunkSLY2FTN3_cjs.a},get settled(){return chunkSLY2FTN3_cjs.a},get hydrated(){return chunkSLY2FTN3_cjs.a},get destroyed(){return u.promise},get isDestroyed(){return a},get(){return n},peek(){return n},subscribe(s){return a?chunkSLY2FTN3_cjs.b:t.subscribe(s)},destroy(){if(!a){a=true;try{c?.();}finally{t.clear(),u.resolve();}}}}}function Pe(){return Array.from(chunk5F5C5U62_cjs.s().values(),e=>({key:e.key,scope:e.scope,value:e.isDestroyed?void 0:e.get(),isDestroyed:e.isDestroyed}))}function Ce(e,r,t){let o=e.length,n=new Array(o);function a(){for(let l=0;l<o;l++){let c=e[l];n[l]=c.get();}}try{if(a(),r(n))return Promise.resolve()}catch(l){return Promise.reject(l)}return o===0?Promise.reject(new Error("when() called with no dependencies and an unsatisfied predicate")):new Promise((l,c)=>{let u=false,s,i;function y(){i&&(chunkSLY2FTN3_cjs.d(i),i=void 0),s!==void 0&&(clearTimeout(s),s=void 0),t?.signal&&t.signal.removeEventListener("abort",p);}function f(d){u||(u=true,y(),d());}function g(){try{a(),r(n)&&f(()=>l());}catch(d){f(()=>c(d));}}function p(){f(()=>c(t?.signal?.reason??new DOMException("Aborted","AbortError")));}if(t?.signal?.aborted){f(()=>c(t?.signal?.reason??new DOMException("Aborted","AbortError")));return}if(i=chunkSLY2FTN3_cjs.c(e,g),t?.timeout!==void 0){let d=t.timeout;s=setTimeout(()=>{f(()=>c(new chunk7FYTDSXL_cjs.m(d)));},d);}t?.signal&&t.signal.addEventListener("abort",p,{once:true});})}Object.defineProperty(exports,"ComputedError",{enumerable:true,get:function(){return chunk7FYTDSXL_cjs.i}});Object.defineProperty(exports,"GjendjeError",{enumerable:true,get:function(){return chunk7FYTDSXL_cjs.c}});Object.defineProperty(exports,"HydrationError",{enumerable:true,get:function(){return chunk7FYTDSXL_cjs.k}});Object.defineProperty(exports,"InterceptorError",{enumerable:true,get:function(){return chunk7FYTDSXL_cjs.h}});Object.defineProperty(exports,"MigrationError",{enumerable:true,get:function(){return chunk7FYTDSXL_cjs.f}});Object.defineProperty(exports,"ResourceError",{enumerable:true,get:function(){return chunk7FYTDSXL_cjs.l}});Object.defineProperty(exports,"StorageReadError",{enumerable:true,get:function(){return chunk7FYTDSXL_cjs.d}});Object.defineProperty(exports,"StorageWriteError",{enumerable:true,get:function(){return chunk7FYTDSXL_cjs.e}});Object.defineProperty(exports,"SyncError",{enumerable:true,get:function(){return chunk7FYTDSXL_cjs.j}});Object.defineProperty(exports,"ValidationError",{enumerable:true,get:function(){return chunk7FYTDSXL_cjs.g}});Object.defineProperty(exports,"WhenTimeoutError",{enumerable:true,get:function(){return chunk7FYTDSXL_cjs.m}});Object.defineProperty(exports,"batch",{enumerable:true,get:function(){return chunk7FYTDSXL_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.channel=ue;exports.collection=le;exports.computed=fe;exports.effect=Te;exports.fromSignal=je;exports.previous=he;exports.readonly=V;exports.resource=ve;exports.select=Ie;exports.snapshot=Pe;exports.state=we;exports.toSignal=ke;exports.when=Ce;exports.withHistory=me;exports.withWatch=be;
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { A as Adapter, c as BucketOptions, E as Enhancer,
|
|
1
|
+
import { L as Listener, U as Unsubscribe, B as BaseInstance, 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, d as Serializer } from './index-C75CW5j8.cjs';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Runs all state updates inside fn as a single batch.
|
|
@@ -20,6 +20,32 @@ export { A as Adapter, c as BucketOptions, E as Enhancer, L as Listener, d as Se
|
|
|
20
20
|
*/
|
|
21
21
|
declare function batch(fn: () => void): void;
|
|
22
22
|
|
|
23
|
+
interface ChannelInstance<T> {
|
|
24
|
+
readonly key: string;
|
|
25
|
+
emit(payload: T): void;
|
|
26
|
+
subscribe(listener: Listener<T>): Unsubscribe;
|
|
27
|
+
destroy(): void;
|
|
28
|
+
readonly isDestroyed: boolean;
|
|
29
|
+
}
|
|
30
|
+
interface ChannelOptions {
|
|
31
|
+
key?: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Create a lightweight pub/sub event channel.
|
|
35
|
+
* No state is stored — fire-and-forget.
|
|
36
|
+
*
|
|
37
|
+
* ```ts
|
|
38
|
+
* const onClick = channel<{ x: number; y: number }>('click')
|
|
39
|
+
*
|
|
40
|
+
* const unsub = onClick.subscribe(({ x, y }) => console.log(x, y))
|
|
41
|
+
* onClick.emit({ x: 100, y: 200 })
|
|
42
|
+
*
|
|
43
|
+
* // Later — tear down all subscriptions
|
|
44
|
+
* onClick.destroy()
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
declare function channel<T>(nameOrOptions?: string | ChannelOptions): ChannelInstance<T>;
|
|
48
|
+
|
|
23
49
|
interface CollectionInstance<T> extends BaseInstance<T[]> {
|
|
24
50
|
/** Read the current value without any reactive implications */
|
|
25
51
|
peek(): T[];
|
|
@@ -246,24 +272,6 @@ declare function configure(config: GjendjeConfig): void;
|
|
|
246
272
|
*/
|
|
247
273
|
declare function resetConfig(): void;
|
|
248
274
|
|
|
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
275
|
type Cleanup = () => void;
|
|
268
276
|
interface EffectHandle {
|
|
269
277
|
/** Stop the effect and run the last cleanup function if any */
|
|
@@ -437,6 +445,19 @@ declare class SyncError extends GjendjeError {
|
|
|
437
445
|
declare class HydrationError extends GjendjeError {
|
|
438
446
|
constructor(key: string, scope: Scope, cause?: unknown);
|
|
439
447
|
}
|
|
448
|
+
/**
|
|
449
|
+
* Thrown when a `resource()` async fetch function throws or rejects.
|
|
450
|
+
*/
|
|
451
|
+
declare class ResourceError extends GjendjeError {
|
|
452
|
+
constructor(key: string, cause?: unknown);
|
|
453
|
+
}
|
|
454
|
+
/**
|
|
455
|
+
* Thrown when `when()` exceeds its configured timeout.
|
|
456
|
+
*/
|
|
457
|
+
declare class WhenTimeoutError extends Error {
|
|
458
|
+
readonly timeout: number;
|
|
459
|
+
constructor(timeout: number);
|
|
460
|
+
}
|
|
440
461
|
|
|
441
462
|
/**
|
|
442
463
|
* A read-only reactive value that tracks the previous value of a source.
|
|
@@ -495,6 +516,25 @@ declare function readonly<T>(instance: ReadonlyInstance<T>): ReadonlyInstance<T>
|
|
|
495
516
|
*/
|
|
496
517
|
declare function destroyAll(): void;
|
|
497
518
|
|
|
519
|
+
interface ResourceInstance<T> {
|
|
520
|
+
readonly data: ReadonlyInstance<T | undefined>;
|
|
521
|
+
readonly loading: ReadonlyInstance<boolean>;
|
|
522
|
+
readonly error: ReadonlyInstance<ResourceError | undefined>;
|
|
523
|
+
refetch(): void;
|
|
524
|
+
destroy(): void;
|
|
525
|
+
readonly isDestroyed: boolean;
|
|
526
|
+
}
|
|
527
|
+
interface ResourceOptions<T> {
|
|
528
|
+
key?: string;
|
|
529
|
+
initialData?: T;
|
|
530
|
+
/** Compare previous and next data to skip redundant notifications. */
|
|
531
|
+
isEqual?: (prev: T | undefined, next: T) => boolean;
|
|
532
|
+
}
|
|
533
|
+
/** Create an async resource without reactive dependencies. */
|
|
534
|
+
declare function resource<T>(fn: () => Promise<T>, options?: ResourceOptions<T>): ResourceInstance<T>;
|
|
535
|
+
/** Create an async resource that refetches when reactive dependencies change. */
|
|
536
|
+
declare function resource<TDeps extends ReadonlyArray<ReadonlyInstance<unknown>>, T>(deps: TDeps, fn: (values: DepValues<TDeps>) => Promise<T>, options?: ResourceOptions<T>): ResourceInstance<T>;
|
|
537
|
+
|
|
498
538
|
/**
|
|
499
539
|
* A read-only reactive value derived from a single source.
|
|
500
540
|
* Lighter than `computed` — no array allocation, no dependency loop.
|
|
@@ -547,10 +587,72 @@ interface StateFunction {
|
|
|
547
587
|
}
|
|
548
588
|
declare const state: StateFunction;
|
|
549
589
|
|
|
590
|
+
interface Signal<T> {
|
|
591
|
+
readonly value: T;
|
|
592
|
+
subscribe(listener: Listener<T>): Unsubscribe;
|
|
593
|
+
}
|
|
594
|
+
interface WritableSignal<T> extends Signal<T> {
|
|
595
|
+
value: T;
|
|
596
|
+
}
|
|
597
|
+
interface SignalLike<T> {
|
|
598
|
+
readonly value: T;
|
|
599
|
+
subscribe(listener: (value: T) => void): () => void;
|
|
600
|
+
}
|
|
601
|
+
interface FromSignalOptions {
|
|
602
|
+
key?: string;
|
|
603
|
+
}
|
|
604
|
+
declare function toSignal<T>(instance: BaseInstance<T>): WritableSignal<T>;
|
|
605
|
+
declare function toSignal<T>(instance: ReadonlyInstance<T>): Signal<T>;
|
|
606
|
+
declare function fromSignal<T>(signal: SignalLike<T>, options?: FromSignalOptions): ReadonlyInstance<T>;
|
|
607
|
+
|
|
608
|
+
interface StateSnapshot {
|
|
609
|
+
key: string;
|
|
610
|
+
scope: Scope;
|
|
611
|
+
value: unknown;
|
|
612
|
+
isDestroyed: boolean;
|
|
613
|
+
}
|
|
614
|
+
/**
|
|
615
|
+
* Return a read-only snapshot of all registered state instances.
|
|
616
|
+
* Useful for debugging, logging, and DevTools integration.
|
|
617
|
+
*
|
|
618
|
+
* ```ts
|
|
619
|
+
* import { snapshot } from 'gjendje'
|
|
620
|
+
*
|
|
621
|
+
* console.table(snapshot())
|
|
622
|
+
* ```
|
|
623
|
+
*/
|
|
624
|
+
declare function snapshot(): StateSnapshot[];
|
|
625
|
+
|
|
550
626
|
/**
|
|
551
627
|
* Shallow equality check for primitives, arrays, and plain objects.
|
|
552
628
|
* Returns true if the two values are structurally equal at one level deep.
|
|
553
629
|
*/
|
|
554
630
|
declare function shallowEqual(a: unknown, b: unknown): boolean;
|
|
555
631
|
|
|
556
|
-
|
|
632
|
+
interface WhenOptions {
|
|
633
|
+
/** Rejects with WhenTimeoutError if the predicate is not satisfied within this duration (ms). */
|
|
634
|
+
timeout?: number;
|
|
635
|
+
/** Rejects with AbortError if the signal is aborted. */
|
|
636
|
+
signal?: AbortSignal;
|
|
637
|
+
}
|
|
638
|
+
/**
|
|
639
|
+
* Return a promise that resolves when a predicate over reactive dependencies
|
|
640
|
+
* becomes true.
|
|
641
|
+
*
|
|
642
|
+
* If the predicate is already satisfied with the current values, the returned
|
|
643
|
+
* promise resolves immediately without subscribing.
|
|
644
|
+
*
|
|
645
|
+
* ```ts
|
|
646
|
+
* await when([loading], ([isLoading]) => !isLoading)
|
|
647
|
+
*
|
|
648
|
+
* // With timeout
|
|
649
|
+
* await when([count], ([c]) => c > 10, { timeout: 5000 })
|
|
650
|
+
*
|
|
651
|
+
* // With AbortSignal
|
|
652
|
+
* const controller = new AbortController()
|
|
653
|
+
* await when([status], ([s]) => s === 'done', { signal: controller.signal })
|
|
654
|
+
* ```
|
|
655
|
+
*/
|
|
656
|
+
declare function when<TDeps extends ReadonlyArray<ReadonlyInstance<unknown>>>(deps: TDeps, predicate: (values: DepValues<TDeps>) => boolean, options?: WhenOptions): Promise<void>;
|
|
657
|
+
|
|
658
|
+
export { BaseInstance, type ChangeContext, type ChannelInstance, type ChannelOptions, type CollectionInstance, ComputedError, type ComputedInstance, type ComputedOptions, DepValues, type DestroyContext, type EffectHandle, type EffectOptions, type ErrorContext, type ExpireContext, type FromSignalOptions, type GjendjeConfig, GjendjeError, type HistoryOptions, type HydrateContext, HydrationError, type InterceptContext, InterceptorError, Listener, type LogLevel, type MigrateContext, MigrationError, type PreviousInstance, type PreviousOptions, type QuotaExceededContext, ReadonlyInstance, type RegisterContext, type ResetContext, ResourceError, type ResourceInstance, type ResourceOptions, Scope, type SelectInstance, type SelectOptions, type Signal, type SignalLike, type StateFunction, StateInstance, StateOptions, type StateSnapshot, StorageReadError, StorageWriteError, type SyncContext, SyncError, Unsubscribe, ValidationError, type ValidationFailContext, type WhenOptions, WhenTimeoutError, type WithHistoryInstance, type WithWatch, type WritableSignal, batch, channel, collection, computed, configure, destroyAll, effect, fromSignal, previous, readonly, resetConfig, resource, select, shallowEqual, snapshot, state, toSignal, when, withHistory, withWatch };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { A as Adapter, c as BucketOptions, E as Enhancer,
|
|
1
|
+
import { L as Listener, U as Unsubscribe, B as BaseInstance, 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, d as Serializer } from './index-C75CW5j8.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Runs all state updates inside fn as a single batch.
|
|
@@ -20,6 +20,32 @@ export { A as Adapter, c as BucketOptions, E as Enhancer, L as Listener, d as Se
|
|
|
20
20
|
*/
|
|
21
21
|
declare function batch(fn: () => void): void;
|
|
22
22
|
|
|
23
|
+
interface ChannelInstance<T> {
|
|
24
|
+
readonly key: string;
|
|
25
|
+
emit(payload: T): void;
|
|
26
|
+
subscribe(listener: Listener<T>): Unsubscribe;
|
|
27
|
+
destroy(): void;
|
|
28
|
+
readonly isDestroyed: boolean;
|
|
29
|
+
}
|
|
30
|
+
interface ChannelOptions {
|
|
31
|
+
key?: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Create a lightweight pub/sub event channel.
|
|
35
|
+
* No state is stored — fire-and-forget.
|
|
36
|
+
*
|
|
37
|
+
* ```ts
|
|
38
|
+
* const onClick = channel<{ x: number; y: number }>('click')
|
|
39
|
+
*
|
|
40
|
+
* const unsub = onClick.subscribe(({ x, y }) => console.log(x, y))
|
|
41
|
+
* onClick.emit({ x: 100, y: 200 })
|
|
42
|
+
*
|
|
43
|
+
* // Later — tear down all subscriptions
|
|
44
|
+
* onClick.destroy()
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
declare function channel<T>(nameOrOptions?: string | ChannelOptions): ChannelInstance<T>;
|
|
48
|
+
|
|
23
49
|
interface CollectionInstance<T> extends BaseInstance<T[]> {
|
|
24
50
|
/** Read the current value without any reactive implications */
|
|
25
51
|
peek(): T[];
|
|
@@ -246,24 +272,6 @@ declare function configure(config: GjendjeConfig): void;
|
|
|
246
272
|
*/
|
|
247
273
|
declare function resetConfig(): void;
|
|
248
274
|
|
|
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
275
|
type Cleanup = () => void;
|
|
268
276
|
interface EffectHandle {
|
|
269
277
|
/** Stop the effect and run the last cleanup function if any */
|
|
@@ -437,6 +445,19 @@ declare class SyncError extends GjendjeError {
|
|
|
437
445
|
declare class HydrationError extends GjendjeError {
|
|
438
446
|
constructor(key: string, scope: Scope, cause?: unknown);
|
|
439
447
|
}
|
|
448
|
+
/**
|
|
449
|
+
* Thrown when a `resource()` async fetch function throws or rejects.
|
|
450
|
+
*/
|
|
451
|
+
declare class ResourceError extends GjendjeError {
|
|
452
|
+
constructor(key: string, cause?: unknown);
|
|
453
|
+
}
|
|
454
|
+
/**
|
|
455
|
+
* Thrown when `when()` exceeds its configured timeout.
|
|
456
|
+
*/
|
|
457
|
+
declare class WhenTimeoutError extends Error {
|
|
458
|
+
readonly timeout: number;
|
|
459
|
+
constructor(timeout: number);
|
|
460
|
+
}
|
|
440
461
|
|
|
441
462
|
/**
|
|
442
463
|
* A read-only reactive value that tracks the previous value of a source.
|
|
@@ -495,6 +516,25 @@ declare function readonly<T>(instance: ReadonlyInstance<T>): ReadonlyInstance<T>
|
|
|
495
516
|
*/
|
|
496
517
|
declare function destroyAll(): void;
|
|
497
518
|
|
|
519
|
+
interface ResourceInstance<T> {
|
|
520
|
+
readonly data: ReadonlyInstance<T | undefined>;
|
|
521
|
+
readonly loading: ReadonlyInstance<boolean>;
|
|
522
|
+
readonly error: ReadonlyInstance<ResourceError | undefined>;
|
|
523
|
+
refetch(): void;
|
|
524
|
+
destroy(): void;
|
|
525
|
+
readonly isDestroyed: boolean;
|
|
526
|
+
}
|
|
527
|
+
interface ResourceOptions<T> {
|
|
528
|
+
key?: string;
|
|
529
|
+
initialData?: T;
|
|
530
|
+
/** Compare previous and next data to skip redundant notifications. */
|
|
531
|
+
isEqual?: (prev: T | undefined, next: T) => boolean;
|
|
532
|
+
}
|
|
533
|
+
/** Create an async resource without reactive dependencies. */
|
|
534
|
+
declare function resource<T>(fn: () => Promise<T>, options?: ResourceOptions<T>): ResourceInstance<T>;
|
|
535
|
+
/** Create an async resource that refetches when reactive dependencies change. */
|
|
536
|
+
declare function resource<TDeps extends ReadonlyArray<ReadonlyInstance<unknown>>, T>(deps: TDeps, fn: (values: DepValues<TDeps>) => Promise<T>, options?: ResourceOptions<T>): ResourceInstance<T>;
|
|
537
|
+
|
|
498
538
|
/**
|
|
499
539
|
* A read-only reactive value derived from a single source.
|
|
500
540
|
* Lighter than `computed` — no array allocation, no dependency loop.
|
|
@@ -547,10 +587,72 @@ interface StateFunction {
|
|
|
547
587
|
}
|
|
548
588
|
declare const state: StateFunction;
|
|
549
589
|
|
|
590
|
+
interface Signal<T> {
|
|
591
|
+
readonly value: T;
|
|
592
|
+
subscribe(listener: Listener<T>): Unsubscribe;
|
|
593
|
+
}
|
|
594
|
+
interface WritableSignal<T> extends Signal<T> {
|
|
595
|
+
value: T;
|
|
596
|
+
}
|
|
597
|
+
interface SignalLike<T> {
|
|
598
|
+
readonly value: T;
|
|
599
|
+
subscribe(listener: (value: T) => void): () => void;
|
|
600
|
+
}
|
|
601
|
+
interface FromSignalOptions {
|
|
602
|
+
key?: string;
|
|
603
|
+
}
|
|
604
|
+
declare function toSignal<T>(instance: BaseInstance<T>): WritableSignal<T>;
|
|
605
|
+
declare function toSignal<T>(instance: ReadonlyInstance<T>): Signal<T>;
|
|
606
|
+
declare function fromSignal<T>(signal: SignalLike<T>, options?: FromSignalOptions): ReadonlyInstance<T>;
|
|
607
|
+
|
|
608
|
+
interface StateSnapshot {
|
|
609
|
+
key: string;
|
|
610
|
+
scope: Scope;
|
|
611
|
+
value: unknown;
|
|
612
|
+
isDestroyed: boolean;
|
|
613
|
+
}
|
|
614
|
+
/**
|
|
615
|
+
* Return a read-only snapshot of all registered state instances.
|
|
616
|
+
* Useful for debugging, logging, and DevTools integration.
|
|
617
|
+
*
|
|
618
|
+
* ```ts
|
|
619
|
+
* import { snapshot } from 'gjendje'
|
|
620
|
+
*
|
|
621
|
+
* console.table(snapshot())
|
|
622
|
+
* ```
|
|
623
|
+
*/
|
|
624
|
+
declare function snapshot(): StateSnapshot[];
|
|
625
|
+
|
|
550
626
|
/**
|
|
551
627
|
* Shallow equality check for primitives, arrays, and plain objects.
|
|
552
628
|
* Returns true if the two values are structurally equal at one level deep.
|
|
553
629
|
*/
|
|
554
630
|
declare function shallowEqual(a: unknown, b: unknown): boolean;
|
|
555
631
|
|
|
556
|
-
|
|
632
|
+
interface WhenOptions {
|
|
633
|
+
/** Rejects with WhenTimeoutError if the predicate is not satisfied within this duration (ms). */
|
|
634
|
+
timeout?: number;
|
|
635
|
+
/** Rejects with AbortError if the signal is aborted. */
|
|
636
|
+
signal?: AbortSignal;
|
|
637
|
+
}
|
|
638
|
+
/**
|
|
639
|
+
* Return a promise that resolves when a predicate over reactive dependencies
|
|
640
|
+
* becomes true.
|
|
641
|
+
*
|
|
642
|
+
* If the predicate is already satisfied with the current values, the returned
|
|
643
|
+
* promise resolves immediately without subscribing.
|
|
644
|
+
*
|
|
645
|
+
* ```ts
|
|
646
|
+
* await when([loading], ([isLoading]) => !isLoading)
|
|
647
|
+
*
|
|
648
|
+
* // With timeout
|
|
649
|
+
* await when([count], ([c]) => c > 10, { timeout: 5000 })
|
|
650
|
+
*
|
|
651
|
+
* // With AbortSignal
|
|
652
|
+
* const controller = new AbortController()
|
|
653
|
+
* await when([status], ([s]) => s === 'done', { signal: controller.signal })
|
|
654
|
+
* ```
|
|
655
|
+
*/
|
|
656
|
+
declare function when<TDeps extends ReadonlyArray<ReadonlyInstance<unknown>>>(deps: TDeps, predicate: (values: DepValues<TDeps>) => boolean, options?: WhenOptions): Promise<void>;
|
|
657
|
+
|
|
658
|
+
export { BaseInstance, type ChangeContext, type ChannelInstance, type ChannelOptions, type CollectionInstance, ComputedError, type ComputedInstance, type ComputedOptions, DepValues, type DestroyContext, type EffectHandle, type EffectOptions, type ErrorContext, type ExpireContext, type FromSignalOptions, type GjendjeConfig, GjendjeError, type HistoryOptions, type HydrateContext, HydrationError, type InterceptContext, InterceptorError, Listener, type LogLevel, type MigrateContext, MigrationError, type PreviousInstance, type PreviousOptions, type QuotaExceededContext, ReadonlyInstance, type RegisterContext, type ResetContext, ResourceError, type ResourceInstance, type ResourceOptions, Scope, type SelectInstance, type SelectOptions, type Signal, type SignalLike, type StateFunction, StateInstance, StateOptions, type StateSnapshot, StorageReadError, StorageWriteError, type SyncContext, SyncError, Unsubscribe, ValidationError, type ValidationFailContext, type WhenOptions, WhenTimeoutError, type WithHistoryInstance, type WithWatch, type WritableSignal, batch, channel, collection, computed, configure, destroyAll, effect, fromSignal, previous, readonly, resetConfig, resource, select, shallowEqual, snapshot, state, toSignal, when, withHistory, withWatch };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import {v,s,i,e,b,c,d,f,g,t,p}from'./chunk-6JCZCUTF.js';export{p as ComputedError,j as GjendjeError,r as HydrationError,o as InterceptorError,m as MigrationError,k as StorageReadError,l as StorageWriteError,q as SyncError,n as ValidationError,a as batch,h as shallowEqual}from'./chunk-6JCZCUTF.js';import {n,s as s$1,m,i as i$1,h}from'./chunk-3JPXLAVT.js';export{d as configure,t as destroyAll,e as resetConfig}from'./chunk-3JPXLAVT.js';function ne(e,t){let n=v(e,t),o,s$1,a;function l(){if(o)return o;let i=new Map;return o=i,s$1=n.get(),a=n.subscribe(r=>{if(i.size===0){s$1=r;return}let p=s$1??[];if(r.length!==p.length){let y=Array.from(i);for(let m=0;m<y.length;m++){let S=Array.from(y[m][1]);for(let b=0;b<S.length;b++)i$1(S[b],r);}s$1=r;return}let g$1=r.length,d;for(let y=0;y<g$1;y++){let m=p[y],S=r[y];if(m===S)continue;let b=g(m)?m:void 0,T=g(S)?S:void 0;if(!b||!T){let h=Array.from(i);for(let k=0;k<h.length;k++){let x=Array.from(h[k][1]);for(let O=0;O<x.length;O++)i$1(x[O],r);}s$1=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 S=Array.from(m);for(let b=0;b<S.length;b++)i$1(S[b],r);}}s$1=r;}),i}let u=n.destroy,c=n;return c.watch=(i,r)=>s(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$1=void 0;}finally{u.call(c);}},c}function re(e,t,n){try{return e(t)}catch(o){let s=new p(n,"memory",o);throw h(n,"memory",s),s}}var oe=0;function se(e$1,t,n$1){let o=n$1?.key??`computed:${oe++}`,s=n(o,"memory"),a,l=true,u=false,c$1=i(),i$1=new Array(e$1.length),r=e$1.length;function p(){if(!l)return a;for(let T=0;T<r;T++){let h=e$1[T];i$1[T]=h.get();}return a=re(t,i$1,o),l=false,a}let f$1=()=>{if(u)return;let T=a,h=p();Object.is(h,T)||s.notify(h);},d$1=e(e$1,()=>{u||(l=true,b(f$1));});p();let y=c,m=c,S=c,b$1=false;for(let T=0;T<r;T++)if(e$1[T].ready!==c){b$1=true;break}if(b$1){let T=new Array(r),h=new Array(r),k=new Array(r);for(let x=0;x<r;x++){let O=e$1[x];T[x]=O.ready,h[x]=O.hydrated,k[x]=O.settled;}y=Promise.all(T).then(d),m=Promise.all(h).then(d),S=Promise.all(k).then(d);}return {key:o,scope:"memory",get ready(){return y},get settled(){return S},get hydrated(){return m},get destroyed(){return u?c:c$1.promise},get isDestroyed(){return u},get(){return p()},peek(){return a},subscribe(T){return u?d:s.subscribe(T)},destroy(){if(!u){u=true;try{f(d$1),s.clear();}finally{c$1.resolve();}}}}}function ie(){return Array.from(s$1().values(),e=>({key:e.key,scope:e.scope,value:e.isDestroyed?void 0:e.get(),isDestroyed:e.isDestroyed}))}var ae=0;function ce(e$1,t,n){let o,s=false,a=n?.key??`effect:${ae++}`,l=e$1.length,u=new Array(l);function c(){if(!s){if(o){try{o();}catch(r){console.error("[gjendje] Effect cleanup threw:",r),h(a,"memory",r);}o=void 0;}for(let r=0;r<l;r++){let p=e$1[r];u[r]=p.get();}try{o=t(u);}catch(r){console.error("[gjendje] Effect callback threw:",r),h(a,"memory",r);}}}let i=e(e$1,c);return c(),{stop(){if(!s){s=true;try{f(i);}finally{if(o){try{o();}catch(r){console.error("[gjendje] Effect cleanup threw:",r),h(a,"memory",r);}o=void 0;}}}}}}function ue(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 le(e){let t$1,n,o;function s$1(){n||(o=e.get(),n=e.subscribe(l=>{try{t$1&&t$1.size>0&&t(t$1,o,l);}finally{o=l;}}));}let a=Object.create(e);return a.watch=(l,u)=>(t$1||(t$1=new Map),s$1(),s(t$1,l,u)),a.destroy=()=>{t$1?.clear(),t$1=void 0,n?.(),n=void 0,o=void 0,e.destroy();},a}var de=0;function pe(e,t){let n=m(),o=t?.key??`previous:${de++}`,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$1=i();return {key:o,scope:"memory",get ready(){return e.ready},get settled(){return e.settled},get hydrated(){return e.hydrated},get destroyed(){return i$1.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$1.resolve();}}}}}function fe(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 ye=0;function Te(e,t,n){try{return e(t)}catch(o){let s=new p(n,"memory",o);throw h(n,"memory",s),s}}function me(e,t,n$1){let o=n$1?.key??`select:${ye++}`,s=n(o,"memory"),a,l=true,u=false,c$1=i();function i$1(){return l&&(a=Te(t,e.get(),o),l=false),a}let r=()=>{if(u)return;let g=a,d=i$1();Object.is(d,g)||s.notify(d);},p=()=>{u||(l=true,b(r));},f=e.subscribe(p);return i$1(),{key:o,scope:"memory",get ready(){return e.ready},get settled(){return e.settled},get hydrated(){return e.hydrated},get destroyed(){return u?c:c$1.promise},get isDestroyed(){return u},get(){return i$1()},peek(){return a},subscribe(g){return u?d:s.subscribe(g)},destroy(){if(!u){u=true;try{f(),s.clear();}finally{c$1.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 v(o,{...n,default:s,scope:e})}function he(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=he(n,t);return v(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 ge=P;export{ne as collection,se as computed,ce as effect,pe as previous,fe as readonly,me as select,ie as snapshot,ge as state,ue as withHistory,le as withWatch};
|
|
1
|
+
import {q,n,b as b$1,a as a$1,l,m as m$1,o,i as i$1}from'./chunk-IXTAQZNU.js';export{i as ComputedError,c as GjendjeError,k as HydrationError,h as InterceptorError,f as MigrationError,l as ResourceError,d as StorageReadError,e as StorageWriteError,j as SyncError,g as ValidationError,m as WhenTimeoutError,a as batch}from'./chunk-IXTAQZNU.js';import {b,h,c,a,d,e}from'./chunk-XP3O35DV.js';export{f as shallowEqual}from'./chunk-XP3O35DV.js';import {m,n as n$1,s,i,h as h$1}from'./chunk-6CL7CC45.js';export{d as configure,t as destroyAll,e as resetConfig}from'./chunk-6CL7CC45.js';var ce=0;function ue(e){let r=typeof e=="string"?e:e?.key??`channel:${ce++}`,t=m(),o=false;return {get key(){return r},emit(n){o||t.notify(n);},subscribe(n){return o?b:t.subscribe(n)},destroy(){o||(o=true,t.clear());},get isDestroyed(){return o}}}function le(e$1,r){let t=q(e$1,r),o,n$1,a;function l(){if(o)return o;let s=new Map;return o=s,n$1=t.get(),a=t.subscribe(i$1=>{if(s.size===0){n$1=i$1;return}let y=n$1??[];if(i$1.length!==y.length){let d=Array.from(s);for(let T=0;T<d.length;T++){let b=Array.from(d[T][1]);for(let v=0;v<b.length;v++)i(b[v],i$1);}n$1=i$1;return}let g=i$1.length,p;for(let d=0;d<g;d++){let T=y[d],b=i$1[d];if(T===b)continue;let v=e(T)?T:void 0,m=e(b)?b:void 0;if(!v||!m){let h=Array.from(s);for(let O=0;O<h.length;O++){let S=Array.from(h[O][1]);for(let x=0;x<S.length;x++)i(S[x],i$1);}n$1=i$1;return}for(let h of s.keys())p?.has(h)||Object.is(v[h],m[h])||(p||(p=new Set),p.add(h));if(p&&p.size===s.size)break}if(p)for(let d of p){let T=s.get(d);if(T){let b=Array.from(T);for(let v=0;v<b.length;v++)i(b[v],i$1);}}n$1=i$1;}),s}let c=t.destroy,u=t;return u.watch=(s,i)=>n(l(),s,i),u.add=(...s)=>{t.set(t.get().concat(s));},u.remove=(s,i)=>{let y=t.get();if(i?.one){let f=y.findIndex(s);if(f===-1)return;let g=y.slice();g.splice(f,1),t.set(g);}else {let f=y.filter(g=>!s(g));f.length!==y.length&&t.set(f);}},u.update=(s,i,y)=>{let f=t.get(),g=typeof i=="function";if(y?.one){let p=f.findIndex(s);if(p===-1)return;let d=f.slice();d[p]=g?i(f[p]):{...f[p],...i},t.set(d);}else {let p;for(let d=0;d<f.length;d++){let T=f[d];s(T)&&(p||(p=f.slice()),p[d]=g?i(T):{...T,...i});}p&&t.set(p);}},u.find=s=>t.get().find(s),u.findAll=s=>t.get().filter(s),u.has=s=>t.get().some(s),u.clear=()=>{t.set([]);},Object.defineProperty(u,"size",{get(){return t.get().length},enumerable:true}),u.destroy=()=>{try{o?.clear(),o=void 0,a?.(),a=void 0,n$1=void 0;}finally{c.call(u);}},u}function de(e,r,t){try{return e(r)}catch(o){let n=new i$1(t,"memory",o);throw h$1(t,"memory",n),n}}var pe=0;function fe(e,r,t){let o=t?.key??`computed:${pe++}`,n=n$1(o,"memory"),a$1,l=true,c$1=false,u=h(),s=new Array(e.length),i=e.length;function y(){if(!l)return a$1;for(let m=0;m<i;m++){let h=e[m];s[m]=h.get();}return a$1=de(r,s,o),l=false,a$1}let f=()=>{if(c$1)return;let m=a$1,h=y();Object.is(h,m)||n.notify(h);},p=c(e,()=>{c$1||(l=true,b$1(f));});y();let d$1=a,T=a,b$2=a,v=false;for(let m=0;m<i;m++)if(e[m].ready!==a){v=true;break}if(v){let m=new Array(i),h=new Array(i),O=new Array(i);for(let S=0;S<i;S++){let x=e[S];m[S]=x.ready,h[S]=x.hydrated,O[S]=x.settled;}d$1=Promise.all(m).then(b),T=Promise.all(h).then(b),b$2=Promise.all(O).then(b);}return {key:o,scope:"memory",get ready(){return d$1},get settled(){return b$2},get hydrated(){return T},get destroyed(){return c$1?a:u.promise},get isDestroyed(){return c$1},get(){return y()},peek(){return a$1},subscribe(m){return c$1?b:n.subscribe(m)},destroy(){if(!c$1){c$1=true;try{d(p),n.clear();}finally{u.resolve();}}}}}var ye=0;function Te(e,r,t){let o,n=false,a=t?.key??`effect:${ye++}`,l=e.length,c$1=new Array(l);function u(){if(!n){if(o){try{o();}catch(i){console.error("[gjendje] Effect cleanup threw:",i),h$1(a,"memory",i);}o=void 0;}for(let i=0;i<l;i++){let y=e[i];c$1[i]=y.get();}try{o=r(c$1);}catch(i){console.error("[gjendje] Effect callback threw:",i),h$1(a,"memory",i);}}}let s=c(e,u);return u(),{stop(){if(!n){n=true;try{d(s);}finally{if(o){try{o();}catch(i){console.error("[gjendje] Effect cleanup threw:",i),h$1(a,"memory",i);}o=void 0;}}}}}}function me(e,r){let t=r?.maxSize??50;if(!Number.isSafeInteger(t)||t<1)throw new Error(`[gjendje] withHistory maxSize must be a positive integer, got ${t}.`);let o=[],n=[],a=false,l=e.onChange((s,i)=>{a||(o.push(i),o.length>t&&o.shift(),n.length=0);});function c(s,i){if(s.length===0||e.isDestroyed)return;let y=e.get(),f=s[s.length-1];a=true;try{e.set(f),Object.is(e.get(),y)||(s.pop(),i.push(y));}finally{a=false;}}let u=Object.create(e);return u.undo=()=>c(o,n),u.redo=()=>c(n,o),Object.defineProperty(u,"canUndo",{get(){return o.length>0},enumerable:true}),Object.defineProperty(u,"canRedo",{get(){return n.length>0},enumerable:true}),u.clearHistory=()=>{o.length=0,n.length=0;},u.destroy=()=>{try{l(),o.length=0,n.length=0;}finally{e.destroy();}},u}function be(e){let r,t,o$1;function n$1(){t||(o$1=e.get(),t=e.subscribe(l=>{try{r&&r.size>0&&o(r,o$1,l);}finally{o$1=l;}}));}let a=Object.create(e);return a.watch=(l,c)=>(r||(r=new Map),n$1(),n(r,l,c)),a.destroy=()=>{r?.clear(),r=void 0,t?.(),t=void 0,o$1=void 0,e.destroy();},a}var ge=0;function he(e,r){let t=m(),o=r?.key??`previous:${ge++}`,n,a=e.get(),l=false,c=()=>{t.notify(n);},u;try{u=e.subscribe(i=>{let y=n;n=a,a=i,Object.is(y,n)||b$1(c);});}catch{throw t.clear(),new Error(`[gjendje] previous(): source.subscribe() threw for "${o}".`)}let s=h();return {key:o,scope:"memory",get ready(){return e.ready},get settled(){return e.settled},get hydrated(){return e.hydrated},get destroyed(){return s.promise},get isDestroyed(){return l},get(){return n},peek(){return n},subscribe:t.subscribe,destroy(){if(!l){l=true;try{u?.();}finally{t.clear(),s.resolve();}}}}}function V(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 xe=0;function ve(e,r,t){let o=Array.isArray(e),n=o?e:void 0,a=o?r:e,l$1=o?t:r,c$1=l$1?.key??`resource:${xe++}`,u=q(`${c$1}:data`,{default:l$1?.initialData}),s=q(`${c$1}:loading`,{default:true}),i=q(`${c$1}:error`,{default:void 0}),y=V(u),f=V(s),g=V(i),p=l$1?.isEqual,d$1=0,T=false,b,v=[];n&&(v=c(n,()=>{m();}));function m(){if(T)return;b&&b.abort(),b=new AbortController;let h=++d$1,O=b.signal;a$1(()=>{s.set(true),i.set(void 0);});let S;try{if(n){let x=n.length,N=new Array(x);for(let B=0;B<x;B++){let Q=n[B];N[B]=Q.get();}S=a(N);}else S=a();}catch(x){a$1(()=>{i.set(new l(c$1,x)),s.set(false);});return}S.then(x=>{O.aborted||T||d$1!==h||a$1(()=>{if(p?.(u.get(),x)){s.set(false);return}u.set(x),s.set(false);});},x=>{O.aborted||T||d$1!==h||a$1(()=>{i.set(new l(c$1,x)),s.set(false);});});}return m(),{data:y,loading:f,error:g,refetch:m,destroy(){if(!T){T=true,b&&(b.abort(),b=void 0);try{d(v);}finally{u.destroy(),s.destroy(),i.destroy();}}},get isDestroyed(){return T}}}var Se=0;function Re(e,r,t){try{return e(r)}catch(o){let n=new i$1(t,"memory",o);throw h$1(t,"memory",n),n}}function Ie(e,r,t){let o=t?.key??`select:${Se++}`,n=n$1(o,"memory"),a$1,l=true,c=false,u=h();function s(){return l&&(a$1=Re(r,e.get(),o),l=false),a$1}let i=()=>{if(c)return;let g=a$1,p=s();Object.is(p,g)||n.notify(p);},y=()=>{c||(l=true,b$1(i));},f=e.subscribe(y);return s(),{key:o,scope:"memory",get ready(){return e.ready},get settled(){return e.settled},get hydrated(){return e.hydrated},get destroyed(){return c?a:u.promise},get isDestroyed(){return c},get(){return s()},peek(){return a$1},subscribe(g){return c?b:n.subscribe(g)},destroy(){if(!c){c=true;try{f(),n.clear();}finally{u.resolve();}}}}}function _(e){let r=Object.keys(e);if(r.length!==1)throw new Error(`[gjendje] Shortcut expects exactly one key, got ${r.length}: ${r.join(", ")}`);let t=r[0];return [t,e[t]]}function K(e,r,t){let[o,n]=_(r);return q(o,{...t,default:n,scope:e})}function Oe(e,r){return e?{...e,default:r}:r!==null&&typeof r=="object"&&"default"in r?r:{default:r}}function A(e,r,t){let o,n;if(typeof e=="object"){let[a,l]=_(e);o=a,n={...r,default:l};}else o=e,n=Oe(t,r);return q(o,n)}A.local=(e,r)=>K("local",e,r);A.session=(e,r)=>K("session",e,r);A.url=(e,r)=>K("url",e,r);A.bucket=(e,r)=>K("bucket",e,r);A.server=(e,r)=>K("server",e,r);var we=A;function ke(e){if(typeof e.set=="function"){let r=e;return {get value(){return r.get()},set value(t){r.set(t);},subscribe:r.subscribe.bind(r)}}return {get value(){return e.get()},subscribe:e.subscribe.bind(e)}}var De=0;function je(e,r){let t=m(),o=r?.key??`signal:${De++}`,n=e.value,a$1=false,l=()=>{t.notify(n);},c;try{c=e.subscribe(s=>{Object.is(n,s)||(n=s,b$1(l));});}catch{throw a$1=true,t.clear(),new Error(`[gjendje] fromSignal(): signal.subscribe() threw for "${o}".`)}let u=h();return {key:o,scope:"memory",get ready(){return a},get settled(){return a},get hydrated(){return a},get destroyed(){return u.promise},get isDestroyed(){return a$1},get(){return n},peek(){return n},subscribe(s){return a$1?b:t.subscribe(s)},destroy(){if(!a$1){a$1=true;try{c?.();}finally{t.clear(),u.resolve();}}}}}function Pe(){return Array.from(s().values(),e=>({key:e.key,scope:e.scope,value:e.isDestroyed?void 0:e.get(),isDestroyed:e.isDestroyed}))}function Ce(e,r,t){let o=e.length,n=new Array(o);function a(){for(let l=0;l<o;l++){let c=e[l];n[l]=c.get();}}try{if(a(),r(n))return Promise.resolve()}catch(l){return Promise.reject(l)}return o===0?Promise.reject(new Error("when() called with no dependencies and an unsatisfied predicate")):new Promise((l,c$1)=>{let u=false,s,i;function y(){i&&(d(i),i=void 0),s!==void 0&&(clearTimeout(s),s=void 0),t?.signal&&t.signal.removeEventListener("abort",p);}function f(d){u||(u=true,y(),d());}function g(){try{a(),r(n)&&f(()=>l());}catch(d){f(()=>c$1(d));}}function p(){f(()=>c$1(t?.signal?.reason??new DOMException("Aborted","AbortError")));}if(t?.signal?.aborted){f(()=>c$1(t?.signal?.reason??new DOMException("Aborted","AbortError")));return}if(i=c(e,g),t?.timeout!==void 0){let d=t.timeout;s=setTimeout(()=>{f(()=>c$1(new m$1(d)));},d);}t?.signal&&t.signal.addEventListener("abort",p,{once:true});})}export{ue as channel,le as collection,fe as computed,Te as effect,je as fromSignal,he as previous,V as readonly,ve as resource,Ie as select,Pe as snapshot,we as state,ke as toSignal,Ce as when,me as withHistory,be 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 chunk7FYTDSXL_cjs=require('./chunk-7FYTDSXL.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,chunk7FYTDSXL_cjs.b(d);},subscribe:s.subscribe,destroy(){s.clear();}}}chunk7FYTDSXL_cjs.p(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 {p,b}from'./chunk-IXTAQZNU.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();}}}p(u);export{u as createServerAdapter,S as withServerSession};
|
package/dist/svelte.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var
|
|
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;
|
package/dist/svelte.d.cts
CHANGED
package/dist/svelte.d.ts
CHANGED
package/dist/svelte.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import {
|
|
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
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-6JCZCUTF.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import {h,i,f,g,o,p,q as q$1,c,k,j,l,r,m}from'./chunk-3JPXLAVT.js';var M=0,re=0,C=[],fe=new WeakMap;function Ie(n){M++;try{n();}finally{M--,M===0&&xe();}}function _(n){if(M>0){fe.get(n)!==re&&(fe.set(n,re),C.push(n));return}n();}var ke=100;function xe(){let n=0;for(;C.length>0;){if(++n>ke){console.error("[gjendje] Batch flush exceeded maximum iterations \u2014 possible infinite loop. Delivering remaining notifications once before stopping.");let t=C;C=[];for(let r=0;r<t.length;r++){let s=t[r];try{s&&s();}catch(o){console.error("[gjendje] Notification threw during best-effort delivery:",o),h("batch","memory",o);}}C=[];break}re++;let e=C;C=[],M++;try{for(let t=0;t<e.length;t++){let r=e[t];try{r&&r();}catch(s){console.error("[gjendje] Notification threw:",s),h("batch","memory",s);}}}finally{M--;}}}var S=Promise.resolve(),Le=()=>{};function Me(n,e){let t=n.length,r=new Array(t);for(let s=0;s<t;s++)r[s]=n[s].subscribe(e);return r}function He(n){for(let e=0;e<n.length;e++){let t=n[e];t&&t();}n.length=0;}function V(n){return n!==null&&typeof n=="object"}function I(n,e){if(Object.is(n,e))return true;if(typeof n!=typeof e||n===null||e===null||typeof n!="object"||typeof e!="object")return false;if(Array.isArray(n)){if(!Array.isArray(e)||n.length!==e.length)return false;for(let i=0;i<n.length;i++)if(!Object.is(n[i],e[i]))return false;return true}if(Array.isArray(e))return false;if(n instanceof Set){if(!(e instanceof Set)||n.size!==e.size)return false;for(let i of n)if(!e.has(i))return false;return true}if(n instanceof Map){if(!(e instanceof Map)||n.size!==e.size)return false;for(let[i,a]of n)if(!e.has(i)||!Object.is(a,e.get(i)))return false;return true}if(n instanceof Date)return e instanceof Date&&n.getTime()===e.getTime();if(n instanceof RegExp)return e instanceof RegExp&&n.toString()===e.toString();let t=n,r=e,s=Object.keys(t),o=Object.keys(r);if(s.length!==o.length)return false;for(let i=0;i<s.length;i++){let a=s[i];if(!Object.hasOwn(r,a)||!Object.is(t[a],r[a]))return false}return true}function Ke(){let n,e;return {get promise(){return n||(n=new Promise(t=>{e=t;})),n},resolve(){e?e():n=Promise.resolve();}}}var P=class extends Error{key;scope;constructor(e,t,r,s){super(e,s),this.name="GjendjeError",this.key=t,this.scope=r;}},W=class extends P{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 P{isQuotaError;constructor(e,t,r,s=false){super(s?`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=s;}},z=class extends P{fromVersion;toVersion;constructor(e,t,r,s,o){super(`Migration from v${r} to v${s} failed for key "${e}".`,e,t,o!==void 0?{cause:o}:void 0),this.name="MigrationError",this.fromVersion=r,this.toVersion=s;}},q=class extends P{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 P{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 P{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 P{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 P{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(n,e,t){let r=n.get(e);return r||(r=new Set,n.set(e,r)),r.add(t),()=>{r.delete(t),r.size===0&&n.delete(e);}}function se(n,e,t){let r=V(e)?e:void 0,s=V(t)?t:void 0,o=Array.from(n);for(let i$1=0;i$1<o.length;i$1++){let[a,c]=o[i$1],d=r?.[a],f=s?.[a];if(!Object.is(d,f)){let p=Array.from(c);for(let w=0;w<p.length;w++)i(p[w],f);}}}function Ee(n){return V(n)?Object.keys(n).length===2&&"v"in n&&"data"in n&&Number.isSafeInteger(n.v):false}function oe(n,e,t,r,s){let o=e.version??1,i=e.default,a=1,c;if(Ee(n)?(a=n.v,c=n.data):c=n,a>o&&g("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=Pe(c,a,o,e.migrate,t,r),t&&r&&k(f().onMigrate,{key:t,scope:r,fromVersion:a,toVersion:o,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 q(t,r,c);k(d.onError,{key:t,scope:r,error:f$1});}return s?.(),i}return c}function pe(n,e,t,r,s){try{let o=JSON.parse(n);return oe(o,e,t,r,s)}catch(o){if(g("debug","Failed to read/migrate stored value \u2014 falling back to default."),t&&r){let i=new W(t,r,o);k(f().onError,{key:t,scope:r,error:i});}return s?.(),e.default}}function he(n,e){return JSON.stringify(!e||e===1?n:{v:e,data:n})}function Q(n,e){if(!e||!V(n))return n;let t={};for(let r of e)Object.hasOwn(n,r)&&(t[r]=n[r]);return t}function K(n,e,t){return !t||!V(n)?n:{...e,...n}}var je=1e3;function Pe(n,e,t,r,s,o){if(e<0||t<0||t-e>je)return g("warn",`Migration range v${e}\u2192v${t} is out of bounds \u2014 skipping.`),n;if(e>t)return g("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.`),n;let i=n;for(let a=e;a<t;a++){let c=r[a];if(c)try{i=c(i);}catch(d){g("warn",`Migration from v${a} failed \u2014 discarding partially migrated data.`);let f$1=new z(s??"",o??"memory",a,t,d);throw s&&o&&k(f().onError,{key:s,scope:o,error:f$1}),f$1}}return i}function B(n,e,t){let{default:r,version:s,serialize:o,persist:i}=t,a=t.scope??"local",c=m(e,a),d,f$1,p=false,w=`${e}:__gjendje_backup`;function D(l){try{n.getItem(w)===null&&(n.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,a,g$1);}}function y(l){if(o){let g=o.parse(l);return oe(g,t,e,t.scope,()=>D(l))}return pe(l,t,e,t.scope,()=>D(l))}function h$1(){if(p)return f$1;try{let l=n.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,i),d=l,f$1=g,p=!0,g}catch{return r}}function v(l){try{let g$1=Q(l,i),O;try{if(o){let $=s&&s>1?{v:s,data:g$1}:g$1;O=o.stringify($);}else O=he(g$1,s);}catch($){let de=new E(e,a,$);throw g("error",`Serialization failed for key "${e}" \u2014 value may contain circular references, BigInt, or other non-serializable types.`),h(e,a,de),de}n.setItem(e,O),d=O,f$1=i?K(g$1,r,i):l,p=!0;}catch(g$1){d=void 0,f$1=void 0,p=false;let O=g$1 instanceof DOMException&&(g$1.name==="QuotaExceededError"||g$1.code===22),$=new E(e,a,g$1,O);throw g("error",$.message),O&&k(f().onQuotaExceeded,{key:e,scope:a,error:$}),h(e,a,$),$}}let b=r,k$1=()=>c.notify(b);function j(l){l.storageArea===n&&(l.key!==null&&l.key!==e||l.key!==null&&p&&l.newValue===d||(d=void 0,f$1=void 0,p=false,b=h$1(),_(k$1)));}return typeof window<"u"&&window.addEventListener("storage",j),{ready:S,get(){return h$1()},set(l){v(l),b=f$1,_(k$1);},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 Ae(){return typeof navigator<"u"&&"storageBuckets"in navigator&&navigator.storageBuckets!=null}function ge(n,e,t){if(typeof n=="number")return n;let r=Object.keys(e).sort((c,d)=>d.length-c.length).join("|"),s=n.toLowerCase().match(new RegExp(`^(\\d+(?:\\.\\d+)?)(${r})$`));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 $e={ms:1,s:1e3,m:6e4,h:36e5,d:864e5,w:6048e5},Re={b:1,kb:1024,mb:1048576,gb:1073741824};function De(n){return ge(n,$e,e=>Date.now()+e)}function Oe(n){return ge(n,Re,Math.floor)}function ye(n,e,t){let{default:r}=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=m(n,"bucket"),i=r,a=()=>o.notify(i),c=s==="session"?sessionStorage:localStorage,d=B(c,n,t),f$1=false,p;function w(){p?.(),p=d.subscribe(y=>{i=y,_(a);});}return w(),{ready:(async()=>{if(!Ae())return;let y=false;try{let h={persisted:e.persisted??!1,durability:"strict"};if(e.expires!=null){let g$1=De(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=Oe(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 v=navigator.storageBuckets;if(!v)return;let k$1=await(await v.open(e.name,h)).localStorage();if(f$1)return;let j=d.get();if(y=!I(j,r),d.destroy?.(),d=B(k$1,n,t),f$1){d.destroy?.();return}let l=d.get();y&&I(l,r)&&k(f().onExpire,{key:n,scope:"bucket",expiredAt:Date.now()}),y&&d.set(j);}catch(h$1){g("warn",`Storage Bucket initialization failed for key "${n}" \u2014 using ${s} fallback.`),h(n,"bucket",h$1);}if(!f$1){if(!y){let h=d.get();I(h,r)||(i=h,_(a));}f$1||w();}})(),get(){return d.get()},set(y){d.set(y);},subscribe:o.subscribe,destroy(){f$1=true;try{p?.(),o.clear();}finally{d.destroy?.();}}}}function me(n){let e=n,t=new Set,r=()=>{let s=Array.from(t);for(let o=0;o<s.length;o++)i(s[o],e);};return {ready:S,get(){return e},set(s){e=s,_(r);},subscribe(s){return t.add(s),()=>{t.delete(s);}},destroy(){t.clear();}}}function we(n,e,t){let r=`state:${e}`,s=null;if(typeof BroadcastChannel<"u")try{s=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 o=m(e,t),i=false,a=n.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 f$1=d.value;try{n.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 n.ready},get(){return n.get()},set(c){if(n.set(c),s)try{s.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 o.subscribe(c)},destroy(){i=true;try{a(),o.clear();try{s?.close();}catch{}}finally{n.destroy?.();}}}}function ve(n,e,t,r,s){if(typeof window>"u")throw new Error("[gjendje] URL scope is not available in this environment.");let o=m(n,"url"),i=t.stringify(e),a,c=e;function d(){try{let y=window.location.search;if(y===a)return c;let v=new URLSearchParams(y).get(n);if(v===null)return a=y,c=e,e;let b=K(t.parse(v),e,r);return a=y,c=b,b}catch{return e}}function f(y){try{let h=new URLSearchParams(window.location.search),v=Q(y,r),b=t.stringify(v);b===i?h.delete(n):h.set(n,b);let j=h.toString(),l=j?`${window.location.pathname}?${j}${window.location.hash}`:`${window.location.pathname}${window.location.hash}`;s?window.history.replaceState(null,"",l):window.history.pushState(null,"",l),a=window.location.search,c=r?K(v,e,r):y;}catch(h$1){a=void 0;let v=new E(n,"url",h$1);throw g("error",v.message),h(n,"url",v),v}}let p=e,w=()=>o.notify(p);function D(){a=void 0,p=d(),_(w);}return window.addEventListener("popstate",D),{ready:S,get(){return d()},set(y){f(y),p=c,_(w);},subscribe:o.subscribe,destroy(){try{o.clear();}finally{window.removeEventListener("popstate",D);}}}}function J(){return typeof window>"u"||typeof document>"u"}var be=new Set(["session","local","url","bucket"]);function Te(n){return J()?S:new Promise(e=>{Promise.resolve().then(()=>{let t=()=>{try{n();}catch(r){console.error("[gjendje] Hydration callback threw:",r);}e();};typeof requestAnimationFrame<"u"?requestAnimationFrame(t):setTimeout(t,0);});})}var ae,Se=false;function Kt(n){ae=n;}var ie=new Set(["local","bucket"]);function Ce(n,e,t){if(e.prefix===false)return n;let r=e.prefix??t;return r?`${r}:${n}`:n}function _e(n,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 B(sessionStorage,n,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 B(localStorage,n,t);case "url":return ve(n,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(n,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(n,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,s,o,i,a){this.key=e,this.scope=t,this._rKey=r,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 r=this._s;if(r.interceptors===void 0||r.interceptors.size===0)return e;let s=e;try{for(let o of r.interceptors)e=o(e,t);}catch(o){let i=new U(this.key,this.scope,o);throw h(this.key,this.scope,i),i}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(s,e)||k(this._config.onIntercept,{key:this.key,scope:this.scope,original:s,intercepted:e}),e}_notifyChange(e,t){let r=this._s;if(r.changeHandlers!==void 0&&r.changeHandlers.size>0){let s=Array.from(r.changeHandlers);for(let o=0;o<s.length;o++)j(s[o],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(),s=typeof e=="function"?e(r):e,o=this._applyInterceptors(s,r);if(o!==void 0&&(s=o,!this._options.isEqual?.(s,r))){try{this._adapter.set(s);}catch(i){if(i instanceof E)return;throw i}t.lastValue=s,t.hasUserWrite=true,t.settled=this._adapter.ready,this._notifyChange(s,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 s=r;if(!this._options.isEqual?.(s,t)){try{this._adapter.set(s);}catch(o){if(o instanceof E)return;throw o}e.lastValue=s,e.hasUserWrite=true,e.settled=this._adapter.ready,l(this._config.onReset,"onReset",{key:this.key,scope:this.scope,previousValue:t}),this._notifyChange(s,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 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 s=r,o=e,i={};for(let a of Object.keys(o))Object.hasOwn(s,a)?i[a]=o[a]:g("warn",`patch("${this.key}") ignored unknown key "${a}" (strict mode).`);return {...r,...i}}return {...r,...e}});}mutate(e){let t=this._s;if(t.isDestroyed)return;let r=this._adapter.get();e(r);let s=this._applyInterceptors(r,r);if(s===void 0)return;let o=s;try{this._adapter.set(o);}catch(i){if(i instanceof E)return;throw i}t.lastValue=o,t.hasUserWrite=true,t.settled=this._adapter.ready,this._notifyChange(o,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=S;}}}_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(n){return n.ext===void 0&&(n.ext={interceptors:void 0,changeHandlers:void 0,watchers:void 0,watchUnsub:void 0,watchPrev:void 0,resolveDestroyed:void 0,destroyed:void 0}),n.ext}var X=class{key;scope="memory";_c;_defaultValue;_options;_config;_rKey;constructor(e,t,r,s){this.key=e,this._rKey=t,this._defaultValue=r.default,this._options=r,this._config=s,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,s=typeof e=="function"?e(r):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,r);}catch(a){let c=new U(this.key,this.scope,a);throw h(this.key,this.scope,c),c}if(s===void 0){g("warn",`Interceptor for state("${this.key}") returned undefined \u2014 ignoring.`);return}if(s instanceof Promise){g("warn",`Interceptor for state("${this.key}") returned a Promise \u2014 interceptors must be synchronous. Ignoring.`);return}Object.is(i,s)||k(this._config.onIntercept,{key:this.key,scope:this.scope,original:i,intercepted:s});}if(!this._options.isEqual?.(s,r)){if(t.current=s,t.notifyFn!==void 0&&_(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++)j(i[a],s,r,this.key,this.scope);}l(this._config.onChange,"onChange",{key:this.key,scope:this.scope,value:s,previousValue:r});}}subscribe(e){let t=this._c;if(!t.listeners){let s=new Set,o=this.key,i$1=this.scope;t.listeners=s,t.notifyFn=()=>{let a=Array.from(s);for(let c=0;c<a.length;c++)i(a[c],t.current,o,i$1);};}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,s=e.ext;if(s!==void 0&&s.interceptors!==void 0&&s.interceptors.size>0){let o=r;try{for(let i of s.interceptors)r=i(r,t);}catch(i){let a=new U(this.key,this.scope,i);throw h(this.key,this.scope,a),a}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(o,r)||k(this._config.onIntercept,{key:this.key,scope:this.scope,original:o,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}),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++)j(o[i],r,t,this.key,this.scope);}l(this._config.onChange,"onChange",{key:this.key,scope:this.scope,value:r,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=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 s=r,o=e,i={};for(let a of Object.keys(o))Object.hasOwn(s,a)?i[a]=o[a]:g("warn",`patch("${this.key}") ignored unknown key "${a}" (strict mode).`);return {...r,...i}}return {...r,...e}});}mutate(e){let t=this._c;if(t.isDestroyed)return;let r=t.current;e(r);let s=r,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,r);}catch(a){let c=new U(this.key,this.scope,a);throw h(this.key,this.scope,c),c}if(s===void 0){g("warn",`Interceptor for state("${this.key}") returned undefined \u2014 ignoring.`);return}if(s instanceof Promise){g("warn",`Interceptor for state("${this.key}") returned a Promise \u2014 interceptors must be synchronous. Ignoring.`);return}Object.is(i,s)||k(this._config.onIntercept,{key:this.key,scope:this.scope,original:i,intercepted:s});}if(t.current=s,t.notifyFn!==void 0&&_(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++)j(i[a],s,r,this.key,this.scope);}l(this._config.onChange,"onChange",{key:this.key,scope:this.scope,value:s,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=S);}}};function Bt(n,e){if(!n)throw new Error("[gjendje] key must be a non-empty string.");let t=f();if(t.keyPattern&&!t.keyPattern.test(n))throw new Error(`[gjendje] Key "${n}" 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("${n}").`);let r=e.scope??t.scope??"memory",s=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.')),s==="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(n,"",e,t);let v=o(n,s),b=p(v);if(b&&!b.isDestroyed)return t.warnOnDuplicate&&g("warn",`Duplicate state("${n}") with scope "${s}". Returning cached instance.`),b;let k=new X(n,v,e,t);return q$1(v,n,s,k,t,b),k}let o$1=o(n,s),i=p(o$1);if(i&&!i.isDestroyed)return t.warnOnDuplicate&&g("warn",`Duplicate state("${n}") with scope "${s}". Returning cached instance.`),i;if(t.requireValidation&&c.has(s)&&!e.validate)throw new Error(`[gjendje] A validate function is required for persisted scope "${s}" on state("${n}"). Set requireValidation: false in configure() to disable.`);let a=(e.ssr??t.ssr)&&be.has(s),c$1=a&&J(),d=e.sync??(t.sync&&ie.has(s));d&&!ie.has(s)&&g("warn",`sync: true is ignored for scope "${s}". Only "local" and "bucket" scopes support cross-tab sync.`);let f$1=Ce(n,e,t.prefix),p$1=s,w=c$1?me(e.default):_e(f$1,p$1,e),y=d&&ie.has(s)&&!c$1?we(w,f$1,s):w,h$1=new ce(n,s,o$1,y,e,t);return a&&!J()&&(h$1._s.hydrated=Te(()=>{if(h$1.isDestroyed||h$1._s.hasUserWrite)return;let v=h$1.get();if(!I(v,e.default))return;let b;try{b=_e(f$1,p$1,e);let k$1=b.get();I(k$1,e.default)||h$1.set(k$1),k(t.onHydrate,{key:n,scope:s,serverValue:e.default,clientValue:k$1});}catch(k){g("debug",`Hydration adapter unavailable for state("${n}") \u2014 using memory fallback.`);let j=new G(n,s,k);h(n,s,j);}finally{b?.destroy?.();}})),q$1(o$1,n,s,h$1,t,i),h$1}export{Ie as a,_ as b,S as c,Le as d,Me as e,He as f,V as g,I as h,Ke as i,P as j,W as k,E as l,z as m,q as n,U as o,le as p,H as q,G as r,ne as s,se as t,Kt as u,Bt 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-RZPEIFWE.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
'use strict';var chunkQRYS36IQ_cjs=require('./chunk-QRYS36IQ.cjs');var M=0,re=0,C=[],fe=new WeakMap;function Ie(n){M++;try{n();}finally{M--,M===0&&xe();}}function _(n){if(M>0){fe.get(n)!==re&&(fe.set(n,re),C.push(n));return}n();}var ke=100;function xe(){let n=0;for(;C.length>0;){if(++n>ke){console.error("[gjendje] Batch flush exceeded maximum iterations \u2014 possible infinite loop. Delivering remaining notifications once before stopping.");let t=C;C=[];for(let r=0;r<t.length;r++){let s=t[r];try{s&&s();}catch(o){console.error("[gjendje] Notification threw during best-effort delivery:",o),chunkQRYS36IQ_cjs.h("batch","memory",o);}}C=[];break}re++;let e=C;C=[],M++;try{for(let t=0;t<e.length;t++){let r=e[t];try{r&&r();}catch(s){console.error("[gjendje] Notification threw:",s),chunkQRYS36IQ_cjs.h("batch","memory",s);}}}finally{M--;}}}var S=Promise.resolve(),Le=()=>{};function Me(n,e){let t=n.length,r=new Array(t);for(let s=0;s<t;s++)r[s]=n[s].subscribe(e);return r}function He(n){for(let e=0;e<n.length;e++){let t=n[e];t&&t();}n.length=0;}function V(n){return n!==null&&typeof n=="object"}function I(n,e){if(Object.is(n,e))return true;if(typeof n!=typeof e||n===null||e===null||typeof n!="object"||typeof e!="object")return false;if(Array.isArray(n)){if(!Array.isArray(e)||n.length!==e.length)return false;for(let i=0;i<n.length;i++)if(!Object.is(n[i],e[i]))return false;return true}if(Array.isArray(e))return false;if(n instanceof Set){if(!(e instanceof Set)||n.size!==e.size)return false;for(let i of n)if(!e.has(i))return false;return true}if(n instanceof Map){if(!(e instanceof Map)||n.size!==e.size)return false;for(let[i,a]of n)if(!e.has(i)||!Object.is(a,e.get(i)))return false;return true}if(n instanceof Date)return e instanceof Date&&n.getTime()===e.getTime();if(n instanceof RegExp)return e instanceof RegExp&&n.toString()===e.toString();let t=n,r=e,s=Object.keys(t),o=Object.keys(r);if(s.length!==o.length)return false;for(let i=0;i<s.length;i++){let a=s[i];if(!Object.hasOwn(r,a)||!Object.is(t[a],r[a]))return false}return true}function Ke(){let n,e;return {get promise(){return n||(n=new Promise(t=>{e=t;})),n},resolve(){e?e():n=Promise.resolve();}}}var P=class extends Error{key;scope;constructor(e,t,r,s){super(e,s),this.name="GjendjeError",this.key=t,this.scope=r;}},W=class extends P{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 P{isQuotaError;constructor(e,t,r,s=false){super(s?`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=s;}},z=class extends P{fromVersion;toVersion;constructor(e,t,r,s,o){super(`Migration from v${r} to v${s} failed for key "${e}".`,e,t,o!==void 0?{cause:o}:void 0),this.name="MigrationError",this.fromVersion=r,this.toVersion=s;}},q=class extends P{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 P{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 P{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 P{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 P{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(n,e,t){let r=n.get(e);return r||(r=new Set,n.set(e,r)),r.add(t),()=>{r.delete(t),r.size===0&&n.delete(e);}}function se(n,e,t){let r=V(e)?e:void 0,s=V(t)?t:void 0,o=Array.from(n);for(let i=0;i<o.length;i++){let[a,c]=o[i],d=r?.[a],f=s?.[a];if(!Object.is(d,f)){let p=Array.from(c);for(let w=0;w<p.length;w++)chunkQRYS36IQ_cjs.i(p[w],f);}}}function Ee(n){return V(n)?Object.keys(n).length===2&&"v"in n&&"data"in n&&Number.isSafeInteger(n.v):false}function oe(n,e,t,r,s){let o=e.version??1,i=e.default,a=1,c;if(Ee(n)?(a=n.v,c=n.data):c=n,a>o&&chunkQRYS36IQ_cjs.g("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=Pe(c,a,o,e.migrate,t,r),t&&r&&chunkQRYS36IQ_cjs.k(chunkQRYS36IQ_cjs.f().onMigrate,{key:t,scope:r,fromVersion:a,toVersion:o,data:c})),e.validate&&!e.validate(c)){if(t&&r){let d=chunkQRYS36IQ_cjs.f();chunkQRYS36IQ_cjs.k(d.onValidationFail,{key:t,scope:r,value:c});let f=new q(t,r,c);chunkQRYS36IQ_cjs.k(d.onError,{key:t,scope:r,error:f});}return s?.(),i}return c}function pe(n,e,t,r,s){try{let o=JSON.parse(n);return oe(o,e,t,r,s)}catch(o){if(chunkQRYS36IQ_cjs.g("debug","Failed to read/migrate stored value \u2014 falling back to default."),t&&r){let i=new W(t,r,o);chunkQRYS36IQ_cjs.k(chunkQRYS36IQ_cjs.f().onError,{key:t,scope:r,error:i});}return s?.(),e.default}}function he(n,e){return JSON.stringify(!e||e===1?n:{v:e,data:n})}function Q(n,e){if(!e||!V(n))return n;let t={};for(let r of e)Object.hasOwn(n,r)&&(t[r]=n[r]);return t}function K(n,e,t){return !t||!V(n)?n:{...e,...n}}var je=1e3;function Pe(n,e,t,r,s,o){if(e<0||t<0||t-e>je)return chunkQRYS36IQ_cjs.g("warn",`Migration range v${e}\u2192v${t} is out of bounds \u2014 skipping.`),n;if(e>t)return chunkQRYS36IQ_cjs.g("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.`),n;let i=n;for(let a=e;a<t;a++){let c=r[a];if(c)try{i=c(i);}catch(d){chunkQRYS36IQ_cjs.g("warn",`Migration from v${a} failed \u2014 discarding partially migrated data.`);let f=new z(s??"",o??"memory",a,t,d);throw s&&o&&chunkQRYS36IQ_cjs.k(chunkQRYS36IQ_cjs.f().onError,{key:s,scope:o,error:f}),f}}return i}function B(n,e,t){let{default:r,version:s,serialize:o,persist:i}=t,a=t.scope??"local",c=chunkQRYS36IQ_cjs.m(e,a),d,f,p=false,w=`${e}:__gjendje_backup`;function D(l){try{n.getItem(w)===null&&(n.setItem(w,l),chunkQRYS36IQ_cjs.g("warn",`Original data for key "${e}" backed up to "${w}" after migration/validation failure.`));}catch(g){chunkQRYS36IQ_cjs.g("error",`Failed to backup data for key "${e}" to "${w}" \u2014 original data may be lost.`),chunkQRYS36IQ_cjs.h(e,a,g);}}function y(l){if(o){let g=o.parse(l);return oe(g,t,e,t.scope,()=>D(l))}return pe(l,t,e,t.scope,()=>D(l))}function h(){if(p)return f;try{let l=n.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,i),d=l,f=g,p=!0,g}catch{return r}}function v(l){try{let g=Q(l,i),O;try{if(o){let $=s&&s>1?{v:s,data:g}:g;O=o.stringify($);}else O=he(g,s);}catch($){let de=new E(e,a,$);throw chunkQRYS36IQ_cjs.g("error",`Serialization failed for key "${e}" \u2014 value may contain circular references, BigInt, or other non-serializable types.`),chunkQRYS36IQ_cjs.h(e,a,de),de}n.setItem(e,O),d=O,f=i?K(g,r,i):l,p=!0;}catch(g){d=void 0,f=void 0,p=false;let O=g instanceof DOMException&&(g.name==="QuotaExceededError"||g.code===22),$=new E(e,a,g,O);throw chunkQRYS36IQ_cjs.g("error",$.message),O&&chunkQRYS36IQ_cjs.k(chunkQRYS36IQ_cjs.f().onQuotaExceeded,{key:e,scope:a,error:$}),chunkQRYS36IQ_cjs.h(e,a,$),$}}let b=r,k=()=>c.notify(b);function j(l){l.storageArea===n&&(l.key!==null&&l.key!==e||l.key!==null&&p&&l.newValue===d||(d=void 0,f=void 0,p=false,b=h(),_(k)));}return typeof window<"u"&&window.addEventListener("storage",j),{ready:S,get(){return h()},set(l){v(l),b=f,_(k);},subscribe:c.subscribe,destroy(){d=void 0,f=void 0,p=false;try{c.clear();}finally{typeof window<"u"&&window.removeEventListener("storage",j);}}}}function Ae(){return typeof navigator<"u"&&"storageBuckets"in navigator&&navigator.storageBuckets!=null}function ge(n,e,t){if(typeof n=="number")return n;let r=Object.keys(e).sort((c,d)=>d.length-c.length).join("|"),s=n.toLowerCase().match(new RegExp(`^(\\d+(?:\\.\\d+)?)(${r})$`));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 $e={ms:1,s:1e3,m:6e4,h:36e5,d:864e5,w:6048e5},Re={b:1,kb:1024,mb:1048576,gb:1073741824};function De(n){return ge(n,$e,e=>Date.now()+e)}function Oe(n){return ge(n,Re,Math.floor)}function ye(n,e,t){let{default:r}=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=chunkQRYS36IQ_cjs.m(n,"bucket"),i=r,a=()=>o.notify(i),c=s==="session"?sessionStorage:localStorage,d=B(c,n,t),f=false,p;function w(){p?.(),p=d.subscribe(y=>{i=y,_(a);});}return w(),{ready:(async()=>{if(!Ae())return;let y=false;try{let h={persisted:e.persisted??!1,durability:"strict"};if(e.expires!=null){let g=De(e.expires);g!=null?h.expires=g:chunkQRYS36IQ_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=Oe(e.quota);g!=null?h.quota=g:chunkQRYS36IQ_cjs.g("warn",`Invalid bucket quota format: "${e.quota}". Expected a number or a string like "10mb", "50kb", "1gb".`);}let v=navigator.storageBuckets;if(!v)return;let k=await(await v.open(e.name,h)).localStorage();if(f)return;let j=d.get();if(y=!I(j,r),d.destroy?.(),d=B(k,n,t),f){d.destroy?.();return}let l=d.get();y&&I(l,r)&&chunkQRYS36IQ_cjs.k(chunkQRYS36IQ_cjs.f().onExpire,{key:n,scope:"bucket",expiredAt:Date.now()}),y&&d.set(j);}catch(h){chunkQRYS36IQ_cjs.g("warn",`Storage Bucket initialization failed for key "${n}" \u2014 using ${s} fallback.`),chunkQRYS36IQ_cjs.h(n,"bucket",h);}if(!f){if(!y){let h=d.get();I(h,r)||(i=h,_(a));}f||w();}})(),get(){return d.get()},set(y){d.set(y);},subscribe:o.subscribe,destroy(){f=true;try{p?.(),o.clear();}finally{d.destroy?.();}}}}function me(n){let e=n,t=new Set,r=()=>{let s=Array.from(t);for(let o=0;o<s.length;o++)chunkQRYS36IQ_cjs.i(s[o],e);};return {ready:S,get(){return e},set(s){e=s,_(r);},subscribe(s){return t.add(s),()=>{t.delete(s);}},destroy(){t.clear();}}}function we(n,e,t){let r=`state:${e}`,s=null;if(typeof BroadcastChannel<"u")try{s=new BroadcastChannel(r);}catch(c){let d=new H(e,t??"local",c);chunkQRYS36IQ_cjs.g("warn",`Failed to create BroadcastChannel for key "${e}" \u2014 cross-tab sync disabled.`),t&&chunkQRYS36IQ_cjs.h(e,t,d);}let o=chunkQRYS36IQ_cjs.m(e,t),i=false,a=n.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 f=d.value;try{n.set(f),t&&chunkQRYS36IQ_cjs.k(chunkQRYS36IQ_cjs.f().onSync,{key:e,scope:t,value:f,source:"remote"});}catch(p){let w=new H(e,t??"local",p);chunkQRYS36IQ_cjs.g("error",w.message),t&&chunkQRYS36IQ_cjs.h(e,t,w);}}),{get ready(){return n.ready},get(){return n.get()},set(c){if(n.set(c),s)try{s.postMessage({value:c});}catch(d){let f=new H(e,t??"local",d);chunkQRYS36IQ_cjs.g("error",f.message),t&&chunkQRYS36IQ_cjs.h(e,t,f);}},subscribe(c){return o.subscribe(c)},destroy(){i=true;try{a(),o.clear();try{s?.close();}catch{}}finally{n.destroy?.();}}}}function ve(n,e,t,r,s){if(typeof window>"u")throw new Error("[gjendje] URL scope is not available in this environment.");let o=chunkQRYS36IQ_cjs.m(n,"url"),i=t.stringify(e),a,c=e;function d(){try{let y=window.location.search;if(y===a)return c;let v=new URLSearchParams(y).get(n);if(v===null)return a=y,c=e,e;let b=K(t.parse(v),e,r);return a=y,c=b,b}catch{return e}}function f(y){try{let h=new URLSearchParams(window.location.search),v=Q(y,r),b=t.stringify(v);b===i?h.delete(n):h.set(n,b);let j=h.toString(),l=j?`${window.location.pathname}?${j}${window.location.hash}`:`${window.location.pathname}${window.location.hash}`;s?window.history.replaceState(null,"",l):window.history.pushState(null,"",l),a=window.location.search,c=r?K(v,e,r):y;}catch(h){a=void 0;let v=new E(n,"url",h);throw chunkQRYS36IQ_cjs.g("error",v.message),chunkQRYS36IQ_cjs.h(n,"url",v),v}}let p=e,w=()=>o.notify(p);function D(){a=void 0,p=d(),_(w);}return window.addEventListener("popstate",D),{ready:S,get(){return d()},set(y){f(y),p=c,_(w);},subscribe:o.subscribe,destroy(){try{o.clear();}finally{window.removeEventListener("popstate",D);}}}}function J(){return typeof window>"u"||typeof document>"u"}var be=new Set(["session","local","url","bucket"]);function Te(n){return J()?S:new Promise(e=>{Promise.resolve().then(()=>{let t=()=>{try{n();}catch(r){console.error("[gjendje] Hydration callback threw:",r);}e();};typeof requestAnimationFrame<"u"?requestAnimationFrame(t):setTimeout(t,0);});})}var ae,Se=false;function Kt(n){ae=n;}var ie=new Set(["local","bucket"]);function Ce(n,e,t){if(e.prefix===false)return n;let r=e.prefix??t;return r?`${r}:${n}`:n}function _e(n,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 B(sessionStorage,n,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 B(localStorage,n,t);case "url":return ve(n,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(n,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(n,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,s,o,i,a){this.key=e,this.scope=t,this._rKey=r,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 r=this._s;if(r.interceptors===void 0||r.interceptors.size===0)return e;let s=e;try{for(let o of r.interceptors)e=o(e,t);}catch(o){let i=new U(this.key,this.scope,o);throw chunkQRYS36IQ_cjs.h(this.key,this.scope,i),i}if(e===void 0){chunkQRYS36IQ_cjs.g("warn",`Interceptor for state("${this.key}") returned undefined \u2014 ignoring.`);return}if(e instanceof Promise){chunkQRYS36IQ_cjs.g("warn",`Interceptor for state("${this.key}") returned a Promise \u2014 interceptors must be synchronous. Ignoring.`);return}return Object.is(s,e)||chunkQRYS36IQ_cjs.k(this._config.onIntercept,{key:this.key,scope:this.scope,original:s,intercepted:e}),e}_notifyChange(e,t){let r=this._s;if(r.changeHandlers!==void 0&&r.changeHandlers.size>0){let s=Array.from(r.changeHandlers);for(let o=0;o<s.length;o++)chunkQRYS36IQ_cjs.j(s[o],e,t,this.key,this.scope);}chunkQRYS36IQ_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(),s=typeof e=="function"?e(r):e,o=this._applyInterceptors(s,r);if(o!==void 0&&(s=o,!this._options.isEqual?.(s,r))){try{this._adapter.set(s);}catch(i){if(i instanceof E)return;throw i}t.lastValue=s,t.hasUserWrite=true,t.settled=this._adapter.ready,this._notifyChange(s,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 s=r;if(!this._options.isEqual?.(s,t)){try{this._adapter.set(s);}catch(o){if(o instanceof E)return;throw o}e.lastValue=s,e.hasUserWrite=true,e.settled=this._adapter.ready,chunkQRYS36IQ_cjs.l(this._config.onReset,"onReset",{key:this.key,scope:this.scope,previousValue:t}),this._notifyChange(s,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 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 s=r,o=e,i={};for(let a of Object.keys(o))Object.hasOwn(s,a)?i[a]=o[a]:chunkQRYS36IQ_cjs.g("warn",`patch("${this.key}") ignored unknown key "${a}" (strict mode).`);return {...r,...i}}return {...r,...e}});}mutate(e){let t=this._s;if(t.isDestroyed)return;let r=this._adapter.get();e(r);let s=this._applyInterceptors(r,r);if(s===void 0)return;let o=s;try{this._adapter.set(o);}catch(i){if(i instanceof E)return;throw i}t.lastValue=o,t.hasUserWrite=true,t.settled=this._adapter.ready,this._notifyChange(o,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?.(),chunkQRYS36IQ_cjs.r(this._rKey),chunkQRYS36IQ_cjs.l(this._config.onDestroy,"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&&se(e.watchers,e.watchPrev,t);}finally{e.watchPrev=t;}}));}};function N(n){return n.ext===void 0&&(n.ext={interceptors:void 0,changeHandlers:void 0,watchers:void 0,watchUnsub:void 0,watchPrev:void 0,resolveDestroyed:void 0,destroyed:void 0}),n.ext}var X=class{key;scope="memory";_c;_defaultValue;_options;_config;_rKey;constructor(e,t,r,s){this.key=e,this._rKey=t,this._defaultValue=r.default,this._options=r,this._config=s,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,s=typeof e=="function"?e(r):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,r);}catch(a){let c=new U(this.key,this.scope,a);throw chunkQRYS36IQ_cjs.h(this.key,this.scope,c),c}if(s===void 0){chunkQRYS36IQ_cjs.g("warn",`Interceptor for state("${this.key}") returned undefined \u2014 ignoring.`);return}if(s instanceof Promise){chunkQRYS36IQ_cjs.g("warn",`Interceptor for state("${this.key}") returned a Promise \u2014 interceptors must be synchronous. Ignoring.`);return}Object.is(i,s)||chunkQRYS36IQ_cjs.k(this._config.onIntercept,{key:this.key,scope:this.scope,original:i,intercepted:s});}if(!this._options.isEqual?.(s,r)){if(t.current=s,t.notifyFn!==void 0&&_(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++)chunkQRYS36IQ_cjs.j(i[a],s,r,this.key,this.scope);}chunkQRYS36IQ_cjs.l(this._config.onChange,"onChange",{key:this.key,scope:this.scope,value:s,previousValue:r});}}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++)chunkQRYS36IQ_cjs.i(a[c],t.current,o,i);};}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,s=e.ext;if(s!==void 0&&s.interceptors!==void 0&&s.interceptors.size>0){let o=r;try{for(let i of s.interceptors)r=i(r,t);}catch(i){let a=new U(this.key,this.scope,i);throw chunkQRYS36IQ_cjs.h(this.key,this.scope,a),a}if(r===void 0){chunkQRYS36IQ_cjs.g("warn",`Interceptor for state("${this.key}") returned undefined \u2014 ignoring.`);return}if(r instanceof Promise){chunkQRYS36IQ_cjs.g("warn",`Interceptor for state("${this.key}") returned a Promise \u2014 interceptors must be synchronous. Ignoring.`);return}Object.is(o,r)||chunkQRYS36IQ_cjs.k(this._config.onIntercept,{key:this.key,scope:this.scope,original:o,intercepted:r});}if(!this._options.isEqual?.(r,t)){if(e.current=r,e.notifyFn!==void 0&&_(e.notifyFn),chunkQRYS36IQ_cjs.l(this._config.onReset,"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++)chunkQRYS36IQ_cjs.j(o[i],r,t,this.key,this.scope);}chunkQRYS36IQ_cjs.l(this._config.onChange,"onChange",{key:this.key,scope:this.scope,value:r,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=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 s=r,o=e,i={};for(let a of Object.keys(o))Object.hasOwn(s,a)?i[a]=o[a]:chunkQRYS36IQ_cjs.g("warn",`patch("${this.key}") ignored unknown key "${a}" (strict mode).`);return {...r,...i}}return {...r,...e}});}mutate(e){let t=this._c;if(t.isDestroyed)return;let r=t.current;e(r);let s=r,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,r);}catch(a){let c=new U(this.key,this.scope,a);throw chunkQRYS36IQ_cjs.h(this.key,this.scope,c),c}if(s===void 0){chunkQRYS36IQ_cjs.g("warn",`Interceptor for state("${this.key}") returned undefined \u2014 ignoring.`);return}if(s instanceof Promise){chunkQRYS36IQ_cjs.g("warn",`Interceptor for state("${this.key}") returned a Promise \u2014 interceptors must be synchronous. Ignoring.`);return}Object.is(i,s)||chunkQRYS36IQ_cjs.k(this._config.onIntercept,{key:this.key,scope:this.scope,original:i,intercepted:s});}if(t.current=s,t.notifyFn!==void 0&&_(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++)chunkQRYS36IQ_cjs.j(i[a],s,r,this.key,this.scope);}chunkQRYS36IQ_cjs.l(this._config.onChange,"onChange",{key:this.key,scope:this.scope,value:s,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&&chunkQRYS36IQ_cjs.r(this._rKey),chunkQRYS36IQ_cjs.l(this._config.onDestroy,"onDestroy",{key:this.key,scope:this.scope});}finally{t?.resolveDestroyed?t.resolveDestroyed():t!==void 0&&(t.destroyed=S);}}};function Bt(n,e){if(!n)throw new Error("[gjendje] key must be a non-empty string.");let t=chunkQRYS36IQ_cjs.f();if(t.keyPattern&&!t.keyPattern.test(n))throw new Error(`[gjendje] Key "${n}" 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("${n}").`);let r=e.scope??t.scope??"memory",s=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.')),s==="memory"){if((e.sync||t.sync)&&chunkQRYS36IQ_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(n,"",e,t);let v=chunkQRYS36IQ_cjs.o(n,s),b=chunkQRYS36IQ_cjs.p(v);if(b&&!b.isDestroyed)return t.warnOnDuplicate&&chunkQRYS36IQ_cjs.g("warn",`Duplicate state("${n}") with scope "${s}". Returning cached instance.`),b;let k=new X(n,v,e,t);return chunkQRYS36IQ_cjs.q(v,n,s,k,t,b),k}let o=chunkQRYS36IQ_cjs.o(n,s),i=chunkQRYS36IQ_cjs.p(o);if(i&&!i.isDestroyed)return t.warnOnDuplicate&&chunkQRYS36IQ_cjs.g("warn",`Duplicate state("${n}") with scope "${s}". Returning cached instance.`),i;if(t.requireValidation&&chunkQRYS36IQ_cjs.c.has(s)&&!e.validate)throw new Error(`[gjendje] A validate function is required for persisted scope "${s}" on state("${n}"). Set requireValidation: false in configure() to disable.`);let a=(e.ssr??t.ssr)&&be.has(s),c=a&&J(),d=e.sync??(t.sync&&ie.has(s));d&&!ie.has(s)&&chunkQRYS36IQ_cjs.g("warn",`sync: true is ignored for scope "${s}". Only "local" and "bucket" scopes support cross-tab sync.`);let f=Ce(n,e,t.prefix),p=s,w=c?me(e.default):_e(f,p,e),y=d&&ie.has(s)&&!c?we(w,f,s):w,h=new ce(n,s,o,y,e,t);return a&&!J()&&(h._s.hydrated=Te(()=>{if(h.isDestroyed||h._s.hasUserWrite)return;let v=h.get();if(!I(v,e.default))return;let b;try{b=_e(f,p,e);let k=b.get();I(k,e.default)||h.set(k),chunkQRYS36IQ_cjs.k(t.onHydrate,{key:n,scope:s,serverValue:e.default,clientValue:k});}catch(k){chunkQRYS36IQ_cjs.g("debug",`Hydration adapter unavailable for state("${n}") \u2014 using memory fallback.`);let j=new G(n,s,k);chunkQRYS36IQ_cjs.h(n,s,j);}finally{b?.destroy?.();}})),chunkQRYS36IQ_cjs.q(o,n,s,h,t,i),h}exports.a=Ie;exports.b=_;exports.c=S;exports.d=Le;exports.e=Me;exports.f=He;exports.g=V;exports.h=I;exports.i=Ke;exports.j=P;exports.k=W;exports.l=E;exports.m=z;exports.n=q;exports.o=U;exports.p=le;exports.q=H;exports.r=G;exports.s=ne;exports.t=se;exports.u=Kt;exports.v=Bt;
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|