window.jvbCache=class{constructor(e,t={}){this.base=e,this.config={namespace:`${jvbBase.base}cache`,TTL:36e5,maxSize:100,...t},this._cache=new Map,this.subscribers=new Set}clearMemoryCache(){const e=this._cache.size;return this._cache.clear(),console.log(`Cleared ${e} items from memory cache`),e}get(e){if(this._cache.has(e))return this._cache.get(e);let t,a=`${this.base}_${e}`;try{if(t=localStorage.getItem(a),!t)return null;t=this._revive(JSON.parse(t))}catch(e){return console.warn("Error getting from localStorage:",e),null}return t&&this._cache.set(e,t),t}set(e,t){this._cache.set(e,t);let a=`${this.base}_${e}`,r=JSON.stringify(this._serialize(t));try{localStorage.setItem(a,r)}catch(e){if(e instanceof DOMException&&22===e.code){this.clearOldestLocalStorageItems();try{localStorage.setItem(a,r)}catch(e){console.warn("Still failed to set localStorage item after cleanup:",e)}}else console.warn("Error setting localStorage item:",e)}this.notify("cache-saved",{key:e,value:t})}_serialize(e){return e instanceof Map?{__type:"Map",value:Array.from(e.entries())}:e instanceof Set?{__type:"Set",value:Array.from(e.values())}:e}_revive(e){if(e&&"object"==typeof e){if("Map"===e.__type)return new Map(e.value);if("Set"===e.__type)return new Set(e.value)}return e}remove(e){let t=`${this.base}_${e}`;try{localStorage.removeItem(t)}catch(e){console.warn("Error removing localStorage item:",e)}}clearOldestLocalStorageItems(){try{const e=[];for(let t=0;te.timestamp-t.timestamp);const t=Math.max(1,Math.ceil(.2*e.length));for(let a=0;a=0;e--){const t=localStorage.key(e);t&&t.startsWith(this.config.namespace)&&localStorage.removeItem(t)}}catch(e){console.warn("Error clearing localStorage cache:",e)}}subscribe(e){return this.subscribers.add(e),()=>this.subscribers.delete(e)}notify(e,t){this.subscribers.forEach(a=>a(e,t))}};