memorio 4.7.0 → 4.7.3

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/index.js CHANGED
@@ -1,4 +1,7 @@
1
- import'path';import'url';var b=(e,t)=>()=>(e&&(t=e(e=0)),t);var a=b(()=>{});var h,Le,pe,G,u,T=b(()=>{a();h={debug:false,tracking:false,trackedPaths:new Set,locked:false,lastAccessedPath:"",stateVersion:0,currentContext:null},Le={get debug(){return h.debug},set debug(e){h.debug=e;},get tracking(){return h.tracking},set tracking(e){h.tracking=e;},get trackedPaths(){return h.trackedPaths},clearTrackedPaths(){h.trackedPaths.clear();},get locked(){return h.locked},set locked(e){h.locked=e;},get lastAccessedPath(){return h.lastAccessedPath},set lastAccessedPath(e){h.lastAccessedPath=e;},get stateVersion(){return h.stateVersion},bumpStateVersion(){return h.stateVersion=(h.stateVersion||0)+1,h.stateVersion},get currentContext(){return h.currentContext},set currentContext(e){h.currentContext=e;}},pe=["list","state","store","idb","observer","useObserver","remove","removeAll","_platform","_capabilities","_sessionId"],G=(e,t)=>String(t!==void 0?t:e).replace("() => ",""),u=Le;});var v,c,p=b(()=>{a();T();v=(...e)=>{u.debug===true&&console.debug(...e);},c=v;});function U(){let e=globalThis;if(typeof e.crypto<"u"&&e.crypto.randomUUID)return e.crypto.randomUUID();if(typeof e.crypto<"u"&&e.crypto.getRandomValues){let t=new Uint8Array(16);return e.crypto.getRandomValues(t),Array.from(t,r=>r.toString(16).padStart(2,"0")).join("")}return `session_${Date.now()}_${Math.random().toString(36).substring(2,15)}`}function q(){let e=globalThis;return e.Deno&&e.Deno.version?"deno":typeof process<"u"&&process.versions&&process.versions.node?"node":typeof globalThis<"u"&&typeof globalThis.ServiceWorkerGlobalScope<"u"?"edge":typeof window<"u"&&typeof document<"u"?"browser":"unknown"}function X(){return q()==="browser"}function Z(){return q()==="node"}function ee(){return q()==="deno"}function te(){return q()==="edge"}function re(){try{if(typeof sessionStorage<"u"){let e="__memorio_test__";return sessionStorage.setItem(e,"1"),sessionStorage.removeItem(e),sessionStorage}}catch{}return null}function oe(){try{if(typeof localStorage<"u"){let e="__memorio_test__";return localStorage.setItem(e,"1"),localStorage.removeItem(e),localStorage}}catch{}return null}function se(){return typeof indexedDB<"u"}function ze(){return typeof globalThis.dispatchEvent=="function"}function J(){let e=q(),t=typeof globalThis.isSecureContext<"u"?globalThis.isSecureContext:e==="browser";return {platform:e,hasSessionStorage:re()!==null,hasLocalStorage:oe()!==null,hasIndexedDB:se(),hasDispatchEvent:ze(),hasNavigator:typeof navigator<"u",hasProcess:typeof process<"u",isSecureContext:t,sessionId:U()}}function xe(){let e=J(),t=globalThis;e.hasDispatchEvent||(t.dispatchEvent=function(r){return true},typeof CustomEvent>"u"&&(t.CustomEvent=class{type;detail;constructor(s,o={}){this.type=s,this.detail=o;}})),typeof t.addEventListener!="function"&&(t.addEventListener=function(r,s){z.has(r)||z.set(r,[]),z.get(r).push(s);},t.removeEventListener=function(r,s){let o=z.get(r);if(o){let n=o.indexOf(s);n>-1&&o.splice(n,1);}},t.dispatchEvent=function(r){let s=z.get(r.type);return s&&s.forEach(o=>{try{o(r);}catch(n){console.error("Event listener error:",n);}}),true});}function V(e){let t=e||`context_${U()}`;le(t);let r={state:{},store:new Map,session:new Map,cache:new Map};return ne.set(t,r),{id:t,state:r.state,store:{get:s=>{let o=r.store.get(s);return o?JSON.parse(o):null},set:(s,o)=>{r.store.set(s,JSON.stringify(o));},remove:s=>r.store.delete(s),removeAll:()=>r.store.clear(),clearAll:()=>r.store.clear(),size:()=>r.store.size,isPersistent:false},session:{get:s=>{let o=r.session.get(s);return o?JSON.parse(o):null},set:(s,o)=>{r.session.set(s,JSON.stringify(o));},remove:s=>r.session.delete(s),removeAll:()=>r.session.clear(),clearAll:()=>r.session.clear(),size:()=>r.session.size,isPersistent:false},cache:{get:s=>r.cache.get(s),set:(s,o)=>r.cache.set(s,o),remove:s=>r.cache.delete(s),removeAll:()=>r.cache.clear(),clear:()=>r.cache.clear()}}}function ie(){return Array.from(ne.keys())}function ae(e){return ne.delete(e)}function le(e){u.currentContext=e;}var z,ne,M=b(()=>{a();T();z=new Map;ne=new Map;});var We={};var we=b(()=>{a();w();p();l.db.create=(e,t=1)=>new Promise((r,s)=>{if(!l.db.support())return s(new Error("IndexedDB not supported"));let o=globalThis.indexedDB.open(e,t);o.onerror=()=>{c(`IndexedDB error: ${o.error?.message}`),s(o.error);},o.onsuccess=()=>{c(`Database ${e} connected successfully`),r(o.result);},o.onupgradeneeded=()=>{c(`Database ${e} upgrade/creation initiated`);};});});var He={};var Se=b(()=>{a();w();l.db.list=async()=>{if(!("indexedDB"in globalThis)||!indexedDB.databases)return [];try{let e=await indexedDB.databases();return globalThis.idbases=e||[],await l.db.size(),globalThis.idbases}catch(e){return console.error("Error listing databases:",e),[]}};});var Ye={};var Pe=b(()=>{a();w();l.db.exist=e=>idbases?.some(t=>t.name===e);});var Ge={};var Te=b(()=>{a();w();l.db.quota=()=>navigator.storage.estimate();});var Qe={};var Oe=b(()=>{a();w();p();l.db.delete=e=>new Promise((t,r)=>{c(`Removing database ${e}...`),(()=>{let o=indexedDB.deleteDatabase(e);o.onsuccess=()=>{c(`${e} database removed successfully`),l.db.list(),t();},o.onerror=()=>{console.error(`Error removing ${e}:`,o.error),r(o.error);},o.onblocked=()=>{console.warn(`Deletion of ${e} is blocked. Please close other tabs.`);};})();});});var Xe={};var Ee=b(()=>{a();w();p();l.db.size=async()=>{if(!(!idbases||idbases.length===0))for(let e=0;e<idbases.length;e++){let t=idbases[e];try{let r=await l.db.create(t.name,t.version),s=Array.from(r.objectStoreNames),o=0;for(let n of s){let i=await l.table.size(r,n);o+=i;}t.size=o,r.close();}catch(r){c(`Could not calculate size for ${t.name}:${r}`);}}};});var Ze={};var De=b(()=>{a();w();l.db.version=e=>{let t=0;for(let r of idbases){r.name===e&&(t=r.version);break}return t};});var et={};var je=b(()=>{a();w();p();l.db.support=()=>{let e="indexedDB"in globalThis;return e||c("Your environment doesn't support IndexedDB"),e};});var tt={};var Ce=b(()=>{a();w();p();l.table.create=(e,t)=>new Promise((r,s)=>{try{let n=(Number(l.db.version(e))||0)+1,i=indexedDB.open(e,n);i.onupgradeneeded=g=>{let y=g.target.result;if(!y.objectStoreNames.contains(t)){let f=y.createObjectStore(t,{keyPath:"id",autoIncrement:!0});f.createIndex("id","id",{unique:!0}),f.createIndex("data","data",{unique:!1}),c(`Table ${t} created in ${e}`);}},i.onsuccess=()=>{i.result.close(),l.db.list(),r();},i.onerror=()=>{console.error(`Error creating table ${t}:`,i.error),s(i.error);};}catch(o){console.error("Critical error in table.create:",o),s(o);}});});var rt={};var ke=b(()=>{a();w();p();l.table.size=(e,t)=>new Promise((r,s)=>{if(!e)return s(new Error("Database instance is required"));if(!e.objectStoreNames.contains(t))return r(0);let o=0,n=0,y=e.transaction([t],"readonly").objectStore(t).openCursor();y.onsuccess=async f=>{let E=f.target.result;if(E){try{let N=E.value;o+=JSON.stringify(N).length;}catch(N){c(`Error stringifying IDB value tracking size:${N}`);}n++,n%200===0&&await new Promise(N=>setTimeout(N,0)),E.continue();}else r(o);},y.onerror=()=>{s(y.error);};});});var ot={};var _e=b(()=>{a();w();p();l.data.delete=(e,t,r)=>new Promise((s,o)=>{let n=indexedDB.open(e);n.onsuccess=()=>{let i=n.result;if(!i.objectStoreNames.contains(t))return i.close(),o(new Error(`Table ${t} not found`));let f=i.transaction(t,"readwrite").objectStore(t).delete(r);f.onsuccess=()=>{i.close(),c(`Record ${r} deleted from ${t}`),s();},f.onerror=()=>{i.close(),o(f.error);};},n.onerror=()=>o(n.error);});l.data.delete.all=(e,t)=>new Promise((r,s)=>{let o=indexedDB.open(e);o.onsuccess=n=>{let i=n.target.result;if(!i.objectStoreNames.contains(t))return i.close(),s(new Error(`Table ${t} not found`));let f=i.transaction(t,"readwrite").objectStore(t).clear();f.onsuccess=()=>{i.close(),c(`All data cleared from ${t}`),r();},f.onerror=()=>{i.close(),s(f.error);};},o.onerror=()=>s(o.error);});});var st={};var $e=b(()=>{a();w();p();l.data.set=(e,t,r)=>new Promise((s,o)=>{let n=indexedDB.open(e);n.onsuccess=()=>{let i=n.result;if(!i.objectStoreNames.contains(t))return i.close(),o(new Error(`Table ${t} does not exist in ${e}`));let f=i.transaction(t,"readwrite").objectStore(t).put(r);f.onsuccess=()=>{i.close(),c(`Data saved in ${e}.${t}`),s(f.result);},f.onerror=E=>{i.close(),c(`Database insert error: ${f.error?.message}`),o(f.error);};},n.onerror=()=>{o(n.error);};});});var nt={};var Ie=b(()=>{a();w();l.data.get=(e,t,r)=>new Promise((s,o)=>{let n=indexedDB.open(e);n.onsuccess=i=>{let g=i.target.result;if(!g.objectStoreNames.contains(t))return g.close(),o(new Error(`Table ${t} not found in ${e}`));let E=g.transaction(t,"readonly").objectStore(t).get(r);E.onsuccess=()=>{g.close(),s(E.result);},E.onerror=()=>{g.close(),o(E.error);};},n.onerror=()=>{o(n.error);};});});var it,l,w=b(()=>{a();M();it=se(),l={db:{},table:{},data:{}};it?(async()=>(Object.defineProperty(l,"db",{value:{},writable:true,configurable:true}),Object.defineProperty(l,"table",{value:{},writable:true,configurable:true}),Object.defineProperty(l,"data",{value:{},writable:true,configurable:true}),Object.defineProperty(globalThis,"idbases",{value:[],writable:true,configurable:true,enumerable:false}),await Promise.all([Promise.resolve().then(()=>(we(),We)),Promise.resolve().then(()=>(Se(),He)),Promise.resolve().then(()=>(Pe(),Ye)),Promise.resolve().then(()=>(Te(),Ge)),Promise.resolve().then(()=>(Oe(),Qe)),Promise.resolve().then(()=>(Ee(),Xe)),Promise.resolve().then(()=>(De(),Ze)),Promise.resolve().then(()=>(je(),et)),Promise.resolve().then(()=>(Ce(),tt)),Promise.resolve().then(()=>(ke(),rt)),Promise.resolve().then(()=>(_e(),ot)),Promise.resolve().then(()=>($e(),st)),Promise.resolve().then(()=>(Ie(),nt))]),Object.preventExtensions(l),Object.seal(l),Object.freeze(l)))():(l._disabled=true,l._warning="IndexedDB is not available in this environment (Node.js/Deno). Use store or session for persistence.",console.warn("Memorio IDB: IndexedDB is not available in this environment. Use store or session for data persistence."));});a();a();T();p();a();var x={set:(e,t={})=>{globalThis.dispatchEvent(new CustomEvent(String(e),t));},listen:(e,t=null,r)=>{if(globalThis.events?.[e])return;let s=t?o=>{let n=o;return globalThis.queueMicrotask?globalThis.queueMicrotask(()=>t(n)):Promise.resolve().then(()=>t(n))}:void 0;s&&globalThis.addEventListener(e,s),s&&(globalThis.events[e]=s);},remove:e=>{let t=globalThis.events?.[e];t&&(globalThis.removeEventListener(e,t),delete globalThis.events[e]);}};var F=Symbol("memorio.target"),ye=new WeakMap,Q=(e,t=null)=>{if(e===null||typeof e!="object")return e;if(e[F]!==void 0)return Q(e[F],t);if(t){if(t.has(e))return e;t.add(e);}let r=e.constructor?.name;if(r!=="Object"&&r!=="Array")return e;let s=Array.isArray(e)?[]:{};for(let o of Reflect.ownKeys(e))s[o]=Q(e[o],t);return s},he=(e,t,r=".")=>t.concat(e).join(r),ve=(e,t,r=[])=>{let s=o=>{try{x.set(o,{detail:{name:o}});}catch{}};return new Proxy(e,{get(o,n){if(n==="__path")return r.length>0?"state."+r.join("."):"state";if(n===F||o[F]!==void 0)return o;if(n==="list")return c('Some state could be hidden when you use "state.list". Use "state" to see the complete list '),JSON.parse(JSON.stringify(o));if(typeof n=="string"){let i=r.length>0?"state."+r.concat(n).join("."):"state."+n;u.lastAccessedPath=i,u.tracking&&u.trackedPaths.add(i);}if(n==="_lastPath")return u.lastAccessedPath;if(n==="remove")return i=>(delete o[i],true);if(n==="removeAll")return ()=>{try{for(let i in o)typeof o[i]!="function"&&!["list","remove","removeAll","lock","unlock"].includes(i)&&delete o[i];}catch(i){console.error(i);}};if(Object.isFrozen(o[n]))return o[n];if(n==="lock"||n==="unlock"){let i=Reflect.get(o,n);if(i)return i}try{let i=Reflect.get(o,n);if(i&&typeof i=="object"&&["Array","Object"].includes(i.constructor.name)){let g=ye.get(i);return g||(g=ve(i,t,r.concat(n)),ye.set(i,g)),g}return i}catch(i){console.error("Error: ",i);return}},set(o,n,i){if(u.locked)return console.error("Error: state is locked. Use state.unlock() to enable modifications."),false;if(pe.includes(n))return console.error("key "+n+" is protected"),false;if(o[n]&&typeof o[n]=="object"&&Object.isFrozen(o[n]))return console.error(`Error: state '${n}' is locked`),false;if(o[n]&&typeof o[n]=="object"&&o[n].__locked)return console.error(`Error: state '${n}' is locked. Use state.${n}.unlock() to enable modifications.`),false;try{let g=he(n,r),y=Q(i);if(t({action:"set",path:g,target:o,newValue:y,previousValue:Reflect.get(o,n)}),s("state."+g),Reflect.set(o,n,y),u.bumpStateVersion(),o[n]&&typeof o[n]=="object"){let f=o[n];if(f&&typeof f=="object")try{Object.defineProperty(f,"__locked",{writable:!0,enumerable:!1,configurable:!1,value:!1}),Object.defineProperty(f,"lock",{writable:!1,enumerable:!1,configurable:!1,value:()=>{Object.defineProperty(f,"__locked",{writable:!0,enumerable:!1,configurable:!1,value:!0}),c(`State '${n}' is now locked.`);}}),Object.defineProperty(f,"unlock",{writable:!1,enumerable:!1,configurable:!1,value:()=>{Object.defineProperty(f,"__locked",{writable:!0,enumerable:!1,configurable:!1,value:!1}),c(`State '${n}' is now unlocked.`);}});}catch{}}return !0}catch(g){return console.error("Error in set trap:",g),false}},deleteProperty(o,n){try{let i=he(n,r);return t({action:"delete",path:i,target:o}),Reflect.deleteProperty(o,n)}catch(i){return console.error("Error in deleteProperty trap:",i),false}},ownKeys(o){return Reflect.ownKeys(o)},getOwnPropertyDescriptor(o,n){return Reflect.getOwnPropertyDescriptor(o,n)}})},L=ve({},()=>{});L.lock=()=>{u.locked=true,c("State is now locked. All modifications are blocked.");};L.unlock=()=>{u.locked=false,c("State is now unlocked. Modifications are allowed.");};a();M();T();p();var S=oe(),ce=new Map;function I(){let t=u.currentContext||""||"default";return ce.has(t)||ce.set(t,new Map),ce.get(t)}var $=S!==null;function _(){let e=u.currentContext||"";return e?`${e}-`:"memorio_store_"}function ue(e){return !e||typeof e!="string"?(console.warn("[memorio store] key is empty or not a string \u2014 operation aborted"),""):e.length>512?(console.warn(`[memorio store] key "${e}" exceeds 512 chars \u2014 operation aborted`),""):_()+e}function qe(e){let t=$?S.getItem(e):I().get(e);return t&&JSON.parse(t)}function Je(e,t){let r=JSON.stringify(t);$?S.setItem(e,r):I().set(e,r);}function Ve(e){if($){if(S.getItem(e))return S.removeItem(e),true}else if(I().has(e))return I().delete(e),true;return false}var j=new Proxy({},{});Object.defineProperty(globalThis,"store",{value:j,enumerable:false,configurable:true});Object.defineProperties(j,{get:{value:e=>{if(!e)return console.warn("[memorio store] store.get() called with empty or null key \u2014 returning null"),null;try{return qe(ue(e))}catch(t){v(`Error parsing store item '${e}': ${t}`);}return null}},getMultiple:{value:e=>{let t={};for(let r of e)try{let s=j.get(r);s&&(t[r]=s);}catch(s){console.debug(`[memorio store] getMultiple error for key "${r}":`,s);}return t}},set:{value:(e,t)=>{if(!e)return console.warn("[memorio store] store.set() called with empty or null key \u2014 write aborted"),false;let r=ue(e);if(!r)return false;if(typeof t=="function")return console.warn("[memorio store] functions are not storable \u2014 write aborted for key: "+e),v("Storing functions is not secure and is blocked for safety."),false;try{Je(r,t);}catch(s){return v(`Error setting store item '${e}': ${s}`),false}return true}},remove:{value:e=>{if(!e)return console.debug("[memorio store] store.remove() called with empty or null key \u2014 returning false"),false;let t=ue(e);if(!t)return false;try{return Ve(t)}catch(r){v(`Error removing store item '${e}': ${r}`);}return false}},delete:{value:e=>j.remove(e)},removeAll:{value:()=>{if($){let e=[];for(let t=0;t<S.length;t++){let r=S.key(t);r?.startsWith(_())&&e.push(r);}e.forEach(t=>S.removeItem(t));}else I().clear();return true}},clearAll:{value:()=>(j.removeAll(),true)},quota:{value:async()=>[0,0]},size:{value:()=>{let e=0;return $?Object.keys(S).forEach(t=>{if(t.startsWith(_())){let r=S.getItem(t);r&&(e+=r.length);}}):I().forEach(t=>{e+=t.length;}),e}},isPersistent:{get:()=>$},list:{value:()=>{let e={};try{if($)for(let t=0;t<S.length;t++){let r=S.key(t);if(r?.startsWith(_())){let s=r.replace(_(),""),o=S.getItem(r);if(o!==null)try{e[s]=JSON.parse(o);}catch{e[s]=o;}}}else I().forEach((t,r)=>{if(r.startsWith(_())){let s=r.replace(_(),"");try{e[s]=JSON.parse(t);}catch{e[s]=t;}}});}catch(t){v(`Error listing store items: ${t}`);}return e}}});Object.freeze(j);a();M();T();p();var P=re(),fe=new Map;function R(){let t=u.currentContext||""||"default";return fe.has(t)||fe.set(t,new Map),fe.get(t)}var B=P!==null;function A(){let e=u.currentContext||"";return e?`${e}-`:"memorio_session_"}function me(e){return !e||typeof e!="string"?(console.warn("[memorio session] key is empty or not a string \u2014 operation aborted"),""):e.length>512?(console.warn(`[memorio session] key "${e}" exceeds 512 chars \u2014 operation aborted`),""):A()+e}function Ke(e){let t=B?P.getItem(e):R().get(e);return t&&JSON.parse(t)}function Fe(e,t){let r=JSON.stringify(t);B?P.setItem(e,r):R().set(e,r);}function Ue(e){if(B){if(P.getItem(e))return P.removeItem(e),true}else if(R().has(e))return R().delete(e),true;return false}var C=new Proxy({},{});Object.defineProperty(globalThis,"session",{value:C,enumerable:false,configurable:true});Object.defineProperties(C,{get:{value:e=>{if(!e)return console.warn("[memorio session] session.get() called with empty or null key \u2014 returning null"),null;try{return Ke(me(e))}catch(t){v(`Error parsing session item '${e}':${t}`);}return null}},set:{value:(e,t)=>{if(!e)return console.warn("[memorio session] session.set() called with empty or null key \u2014 write aborted"),false;let r=me(e);if(!r)return false;if(typeof t=="function")return console.warn("[memorio session] functions are not storable \u2014 write aborted for key: "+e),v("It's not secure to session functions."),false;try{Fe(r,t);}catch(s){return v(`Error setting session item '${e}': ${s}`),false}return true}},remove:{value:e=>{if(!e)return console.warn("[memorio session] session.remove() called with empty or null key \u2014 returning false"),false;let t=me(e);if(!t)return false;try{return Ue(t)}catch(r){v(`Error removing session item '${e}': ${r}`);}return false}},delete:{value:e=>C.remove(e)},removeAll:{value:()=>{if(B){let e=[];for(let t=0;t<P.length;t++){let r=P.key(t);r?.startsWith(A())&&e.push(r);}e.forEach(t=>P.removeItem(t));}else R().clear();return true}},clearAll:{value:()=>(C.removeAll(),true)},quota:{value:async()=>[0,0]},size:{value:()=>{let e=0;return B?Object.keys(P).forEach(t=>{if(t.startsWith(A())){let r=P.getItem(t);r&&(e+=r.length);}}):R().forEach(t=>{e+=t.length;}),e}},isPersistent:{get:()=>B},list:{value:()=>{let e={};try{if(B)for(let t=0;t<P.length;t++){let r=P.key(t);if(r?.startsWith(A())){let s=r.replace(A(),""),o=P.getItem(r);if(o!==null)try{e[s]=JSON.parse(o);}catch{e[s]=o;}}}else R().forEach((t,r)=>{if(r.startsWith(A())){let s=r.replace(A(),"");try{e[s]=JSON.parse(t);}catch{e[s]=t;}}});}catch(t){v(`Error listing session items: ${t}`);}return e}}});Object.freeze(C);a();var O={},W=new Proxy({},{get(e,t){let r=t;return r==="get"?s=>O[s]:r==="set"?(s,o)=>{O[s]=o;}:r==="remove"?s=>(delete O[s],true):r==="removeAll"?()=>(Object.keys(O).forEach(s=>delete O[s]),true):r==="clear"?()=>(Object.keys(O).forEach(s=>delete O[s]),true):r==="list"?()=>({...O}):O[r]},set(e,t,r){return O[t]=r,true},deleteProperty(e,t){return delete O[t],true}});Object.freeze(W);w();a();p();var Ae=false,at=(e,t=null,r=true)=>{Ae||(console.warn('DEPRECATED: "observer" is deprecated and will be removed in future versions. Please use "useObserver" instead.'),Ae=true);let s=n=>typeof n=="string"?n:n&&typeof n=="object"&&n.__path?n.__path:null,o=s(e);if(!e&&!t){console.error("Observer Error: You need to setup observer correctly, Some parameters are missed!");return}if(!e&&t){console.error("Observer Error: You need to declare what state need to be monitored as string like 'state.test'.");return}if(o){let n=o.split(".");if(n[0]!=="state"&&n[0]!=="store"){console.error(`Observer Error: You need to declare 'state.' or 'store.'. The '${o}' string is incorrect!`);return}}if(e&&!t){let n=s(e);if(!n)return;globalThis.observer?.list?.[n]&&x.remove(n),c(`called: ${n}`);return}if(e&&t){let n=s(e);if(!n)return;if(typeof e!="string"&&!(e&&typeof e=="object")){console.error("Observer Error: name of state need to be a 'string' like 'state.test' or a direct state value");return}let i=Array.isArray(t)?t:[t];globalThis.observer?.list?.[n]&&x.remove(n),i.forEach(y=>{typeof y=="function"&&x.listen(n,y,r);});return}},H=at;Object.defineProperties(H,{list:{get:()=>globalThis.events},remove:{value:e=>{e&&(x.remove(e),delete globalThis.events[e]);}},removeAll:{get:()=>{let e=globalThis.observer,t=e?.list;return t&&Object.keys(t).forEach(r=>{e?.remove?.(r);}),true}},has:{value:e=>!!globalThis.observer?.list?.[e]}});a();p();T();globalThis.useObserver||(globalThis.useObserver=null);Object.defineProperty(globalThis,"useObserver",{value:null,writable:true,enumerable:false,configurable:true});var Y=((e,t=[])=>{if(!t||typeof e!="function")return ()=>{};let r=[],s=Array.isArray(t)&&!t.__path?t:[t];try{return s.forEach(o=>{let n="";if(typeof o=="function"){let i=G(o);i&&(n=i);}else typeof o=="object"&&o!==null&&(n=o.__path||(typeof o.toString=="function"&&o.toString()!=="[object Object]"?o.toString():""));if(n){n=n.replace(/^(\(\)\s*=>\s*)/,"").replace(/^globalThis\./,"").replace(/^state\./,"");let i=n.startsWith("store.")||n.startsWith("state.")?n:"state."+n;x.listen(i,()=>e()),r.push(i);}else {u.clearTrackedPaths(),u.tracking=!0;try{e();}catch{}u.tracking=!1,u.trackedPaths.forEach(i=>{r.includes(i)||(c(`useObserver: [Auto-Discovery] -> "${i}"`),x.listen(i,()=>e()),r.push(i));});}}),r.length>0?c(`useObserver: Monitoring ${r.length} paths.`):console.warn("useObserver: No paths resolved for monitoring. Check your dependencies!"),()=>{r.forEach(o=>{typeof x.remove=="function"&&(x.remove(o),c(`useObserver: Stopped monitoring "${o}"`));});}}catch(o){return c(`useObserver Error: ${o}`),()=>{}}});globalThis.useObserver=Y;Object.freeze(globalThis.useObserver);p();a();T();function lt(){return u.debug===true}function Be(){if(!globalThis.store)return {};let e={},t=globalThis.store;if(typeof t.list=="function")try{return t.list()}catch{}if(typeof t.get=="function"){for(let r of Object.keys(t))if(!["get","set","remove","delete","removeAll","clearAll","size","isPersistent","list"].includes(r))try{let s=t.get(r);s!=null&&(e[r]=s);}catch{}}return e}function Re(){if(!globalThis.session)return {};let e={},t=globalThis.session;if(typeof t.list=="function")try{return t.list()}catch{}if(typeof t.get=="function"){for(let r of Object.keys(t))if(!["get","set","remove","delete","removeAll","clearAll","size","isPersistent","list"].includes(r))try{let s=t.get(r);s!=null&&(e[r]=s);}catch{}}return e}var ct=()=>{if(lt()){if(globalThis.state){let e=globalThis.state.list,t;typeof e=="function"?t=e():typeof e=="object"&&e!==null?t=e:t=globalThis.state,console.table(t);}if(globalThis.store&&console.table(Be()),globalThis.session&&console.table(Re()),globalThis.cache){let e=globalThis.cache.list,t;typeof e=="function"?t=e():typeof e=="object"&&e!==null?t=e:t=globalThis.cache,console.table(t);}}},ut=()=>{let e=t=>{if(!t)return 0;if(typeof t.list=="function")try{let r=t.list();return Object.keys(r).length}catch{}return Object.keys(t).length};return {stateKeys:e(globalThis.state),storeKeys:e(globalThis.store),sessionKeys:e(globalThis.session),cacheKeys:e(globalThis.cache),idbDatabases:0,lastUpdate:new Date().toISOString()}},K=e=>{globalThis[e]&&typeof globalThis[e].clear=="function"?globalThis[e].clear():console.error(`Module ${e} not found or does not support clear()`);},ft=()=>{K("state"),K("store"),K("session"),K("cache");},mt=()=>{let e=()=>{if(globalThis.state)try{return typeof globalThis.state.list=="function"?globalThis.state.list():globalThis.state}catch{return}},t=()=>Be(),r=()=>Re(),s=()=>{if(globalThis.cache)try{return typeof globalThis.cache.list=="function"?globalThis.cache.list():globalThis.cache}catch{return}},o={state:e(),store:t(),session:r(),cache:s(),exportedAt:new Date().toISOString()};return JSON.stringify(o,null,2)},dt=e=>{try{let t=JSON.parse(e);t.state&&Object.entries(t.state).forEach(([r,s])=>{globalThis.state&&r!=="list"&&r!=="remove"&&r!=="removeAll"&&(globalThis.state[r]=s);}),t.store&&globalThis.store&&typeof globalThis.store.set=="function"&&Object.entries(t.store).forEach(([r,s])=>{globalThis.store.set(r,s);}),t.session&&globalThis.session&&typeof globalThis.session.set=="function"&&Object.entries(t.session).forEach(([r,s])=>{globalThis.session.set(r,s);}),t.cache&&globalThis.cache&&Object.entries(t.cache).forEach(([r,s])=>{globalThis.cache&&r!=="get"&&r!=="set"&&r!=="remove"&&r!=="clear"&&(globalThis.cache[r]=s);});}catch(t){console.error("%c\u2717 Import failed:","color: #F44336",t);}},gt=(e,t)=>{if(!globalThis[e]){console.error(`Module ${e} not found`);return}let r=globalThis[e],s=r[t];if(console.debug(`\u{1F441} Watching ${e}.${t} (initial: ${JSON.stringify(s)})`),e==="state"&&globalThis.memorio?.dispatch){let o=n=>{n.detail?.name?.includes(t)&&console.debug(`\u{1F441} Change: ${e}.${t} =`,n.detail.value);};r.addEventListener?.("memorio-change",o);}},bt=()=>{console.debug(`
1
+ import 'path';
2
+ import 'url';
3
+
4
+ var S=(e,t)=>()=>(e&&(t=e(e=0)),t);var a=S(()=>{});var m,Ct,Ke,ae,l,C=S(()=>{a();m={debug:false,tracking:false,trackedPaths:new Set,locked:false,lastAccessedPath:"",stateVersion:0,currentContext:null,mutations:[],undoStack:[],redoStack:[],maxHistory:100,historyEnabled:false},Ct={get debug(){return m.debug},set debug(e){m.debug=e;},get tracking(){return m.tracking},set tracking(e){m.tracking=e;},get trackedPaths(){return m.trackedPaths},clearTrackedPaths(){m.trackedPaths.clear();},get locked(){return m.locked},set locked(e){m.locked=e;},get lastAccessedPath(){return m.lastAccessedPath},set lastAccessedPath(e){m.lastAccessedPath=e;},get stateVersion(){return m.stateVersion},bumpStateVersion(){return m.stateVersion=(m.stateVersion||0)+1,m.stateVersion},get currentContext(){return m.currentContext},set currentContext(e){m.currentContext=e;},get mutations(){return m.mutations},get undoStack(){return m.undoStack},get redoStack(){return m.redoStack},get maxHistory(){return m.maxHistory},set maxHistory(e){m.maxHistory=e;},get historyEnabled(){return m.historyEnabled},set historyEnabled(e){m.historyEnabled=e;},recordMutation(e){m.historyEnabled&&(m.mutations.push(e),m.mutations.length>m.maxHistory&&m.mutations.shift(),m.undoStack.push(e),m.undoStack.length>m.maxHistory&&m.undoStack.shift(),m.redoStack=[]);},popUndo(){let e=m.undoStack.pop();return e&&m.redoStack.push(e),e},popRedo(){let e=m.redoStack.pop();return e&&m.undoStack.push(e),e},canUndo(){return m.undoStack.length>0},canRedo(){return m.redoStack.length>0},clearHistory(){m.mutations=[],m.undoStack=[],m.redoStack=[];},clearRedo(){m.redoStack=[];}},Ke=["list","state","store","idb","observer","useObserver","remove","removeAll","_platform","_capabilities","_sessionId"],ae=(e,t)=>String(t!==void 0?t:e).replace("() => ",""),l=Ct;});var T,c,x=S(()=>{a();C();T=(...e)=>{l.debug===true&&console.debug(...e);},c=T;});function Q(){let e=globalThis;if(typeof e.crypto<"u"&&e.crypto.randomUUID)return e.crypto.randomUUID();if(typeof e.crypto<"u"&&e.crypto.getRandomValues){let t=new Uint8Array(16);return e.crypto.getRandomValues(t),Array.from(t,r=>r.toString(16).padStart(2,"0")).join("")}return `session_${Date.now()}_${Math.random().toString(36).substring(2,15)}`}function q(){let e=globalThis;return e.Deno&&e.Deno.version?"deno":typeof process<"u"&&process.versions&&process.versions.node?"node":typeof globalThis<"u"&&typeof globalThis.ServiceWorkerGlobalScope<"u"?"edge":typeof window<"u"&&typeof document<"u"?"browser":"unknown"}function le(){return q()==="browser"}function ce(){return q()==="node"}function ue(){return q()==="deno"}function me(){return q()==="edge"}function de(){try{if(typeof sessionStorage<"u"){let e="__memorio_test__";return sessionStorage.setItem(e,"1"),sessionStorage.removeItem(e),sessionStorage}}catch{}return null}function fe(){try{if(typeof localStorage<"u"){let e="__memorio_test__";return localStorage.setItem(e,"1"),localStorage.removeItem(e),localStorage}}catch{}return null}function pe(){return typeof indexedDB<"u"}function $t(){return typeof globalThis.dispatchEvent=="function"}function F(){let e=q(),t=typeof globalThis.isSecureContext<"u"?globalThis.isSecureContext:e==="browser";return {platform:e,hasSessionStorage:de()!==null,hasLocalStorage:fe()!==null,hasIndexedDB:pe(),hasDispatchEvent:$t(),hasNavigator:typeof navigator<"u",hasProcess:typeof process<"u",isSecureContext:t,sessionId:Q()}}function Ze(){let e=F(),t=globalThis;e.hasDispatchEvent||(t.dispatchEvent=function(r){return true},typeof CustomEvent>"u"&&(t.CustomEvent=class{type;detail;constructor(s,o={}){this.type=s,this.detail=o;}})),typeof t.addEventListener!="function"&&(t.addEventListener=function(r,s){U.has(r)||U.set(r,[]),U.get(r).push(s);},t.removeEventListener=function(r,s){let o=U.get(r);if(o){let n=o.indexOf(s);n>-1&&o.splice(n,1);}},t.dispatchEvent=function(r){let s=U.get(r.type);return s&&s.forEach(o=>{try{o(r);}catch(n){console.error("Event listener error:",n);}}),true});}function W(e){let t=e||`context_${Q()}`;he(t);let r={state:{},store:new Map,session:new Map,cache:new Map};return ge.set(t,r),{id:t,state:r.state,store:{get:s=>{let o=r.store.get(s);return o?JSON.parse(o):null},set:(s,o)=>{r.store.set(s,JSON.stringify(o));},remove:s=>r.store.delete(s),removeAll:()=>r.store.clear(),clearAll:()=>r.store.clear(),size:()=>r.store.size,isPersistent:false},session:{get:s=>{let o=r.session.get(s);return o?JSON.parse(o):null},set:(s,o)=>{r.session.set(s,JSON.stringify(o));},remove:s=>r.session.delete(s),removeAll:()=>r.session.clear(),clearAll:()=>r.session.clear(),size:()=>r.session.size,isPersistent:false},cache:{get:s=>r.cache.get(s),set:(s,o)=>r.cache.set(s,o),remove:s=>r.cache.delete(s),removeAll:()=>r.cache.clear(),clear:()=>r.cache.clear()}}}function ye(){return Array.from(ge.keys())}function be(e){return ge.delete(e)}function he(e){l.currentContext=e;}var U,ge,K=S(()=>{a();C();U=new Map;ge=new Map;});var Nt={};var et=S(()=>{a();E();x();u.db.create=(e,t=1)=>new Promise((r,s)=>{if(!u.db.support())return s(new Error("IndexedDB not supported"));let o=globalThis.indexedDB.open(e,t);o.onerror=()=>{c(`IndexedDB error: ${o.error?.message}`),s(o.error);},o.onsuccess=()=>{c(`Database ${e} connected successfully`),r(o.result);},o.onupgradeneeded=()=>{c(`Database ${e} upgrade/creation initiated`);};});});var Vt={};var tt=S(()=>{a();E();u.db.list=async()=>{if(!("indexedDB"in globalThis)||!indexedDB.databases)return [];try{let e=await indexedDB.databases();return globalThis.idbases=e||[],await u.db.size(),globalThis.idbases}catch(e){return console.error("Error listing databases:",e),[]}};});var Bt={};var rt=S(()=>{a();E();u.db.exist=e=>idbases?.some(t=>t.name===e);});var Lt={};var ot=S(()=>{a();E();u.db.quota=()=>navigator.storage.estimate();});var Ht={};var st=S(()=>{a();E();x();u.db.delete=e=>new Promise((t,r)=>{c(`Removing database ${e}...`),(()=>{let o=indexedDB.deleteDatabase(e);o.onsuccess=()=>{c(`${e} database removed successfully`),u.db.list(),t();},o.onerror=()=>{console.error(`Error removing ${e}:`,o.error),r(o.error);},o.onblocked=()=>{console.warn(`Deletion of ${e} is blocked. Please close other tabs.`);};})();});});var Jt={};var nt=S(()=>{a();E();x();u.db.size=async()=>{if(!(!idbases||idbases.length===0))for(let e=0;e<idbases.length;e++){let t=idbases[e];try{let r=await u.db.create(t.name,t.version),s=Array.from(r.objectStoreNames),o=0;for(let n of s){let i=await u.table.size(r,n);o+=i;}t.size=o,r.close();}catch(r){c(`Could not calculate size for ${t.name}:${r}`);}}};});var zt={};var it=S(()=>{a();E();u.db.version=e=>{let t=0;for(let r of idbases){r.name===e&&(t=r.version);break}return t};});var Kt={};var at=S(()=>{a();E();x();u.db.support=()=>{let e="indexedDB"in globalThis;return e||c("Your environment doesn't support IndexedDB"),e};});var Ut={};var lt=S(()=>{a();E();x();u.table.create=(e,t)=>new Promise((r,s)=>{try{let n=(Number(u.db.version(e))||0)+1,i=indexedDB.open(e,n);i.onupgradeneeded=d=>{let f=d.target.result;if(!f.objectStoreNames.contains(t)){let y=f.createObjectStore(t,{keyPath:"id",autoIncrement:!0});y.createIndex("id","id",{unique:!0}),y.createIndex("data","data",{unique:!1}),c(`Table ${t} created in ${e}`);}},i.onsuccess=()=>{i.result.close(),u.db.list(),r();},i.onerror=()=>{console.error(`Error creating table ${t}:`,i.error),s(i.error);};}catch(o){console.error("Critical error in table.create:",o),s(o);}});});var qt={};var ct=S(()=>{a();E();x();u.table.size=(e,t)=>new Promise((r,s)=>{if(!e)return s(new Error("Database instance is required"));if(!e.objectStoreNames.contains(t))return r(0);let o=0,n=0,f=e.transaction([t],"readonly").objectStore(t).openCursor();f.onsuccess=async y=>{let b=y.target.result;if(b){try{let k=b.value;o+=JSON.stringify(k).length;}catch(k){c(`Error stringifying IDB value tracking size:${k}`);}n++,n%200===0&&await new Promise(k=>setTimeout(k,0)),b.continue();}else r(o);},f.onerror=()=>{s(f.error);};});});var Ft={};var ut=S(()=>{a();E();x();u.data.delete=(e,t,r)=>new Promise((s,o)=>{let n=indexedDB.open(e);n.onsuccess=()=>{let i=n.result;if(!i.objectStoreNames.contains(t))return i.close(),o(new Error(`Table ${t} not found`));let y=i.transaction(t,"readwrite").objectStore(t).delete(r);y.onsuccess=()=>{i.close(),c(`Record ${r} deleted from ${t}`),s();},y.onerror=()=>{i.close(),o(y.error);};},n.onerror=()=>o(n.error);});u.data.delete.all=(e,t)=>new Promise((r,s)=>{let o=indexedDB.open(e);o.onsuccess=n=>{let i=n.target.result;if(!i.objectStoreNames.contains(t))return i.close(),s(new Error(`Table ${t} not found`));let y=i.transaction(t,"readwrite").objectStore(t).clear();y.onsuccess=()=>{i.close(),c(`All data cleared from ${t}`),r();},y.onerror=()=>{i.close(),s(y.error);};},o.onerror=()=>s(o.error);});});var Wt={};var mt=S(()=>{a();E();x();u.data.set=(e,t,r)=>new Promise((s,o)=>{let n=indexedDB.open(e);n.onsuccess=()=>{let i=n.result;if(!i.objectStoreNames.contains(t))return i.close(),o(new Error(`Table ${t} does not exist in ${e}`));let y=i.transaction(t,"readwrite").objectStore(t).put(r);y.onsuccess=()=>{i.close(),c(`Data saved in ${e}.${t}`),s(y.result);},y.onerror=b=>{i.close(),c(`Database insert error: ${y.error?.message}`),o(y.error);};},n.onerror=()=>{o(n.error);};});});var Gt={};var dt=S(()=>{a();E();u.data.get=(e,t,r)=>new Promise((s,o)=>{let n=indexedDB.open(e);n.onsuccess=i=>{let d=i.target.result;if(!d.objectStoreNames.contains(t))return d.close(),o(new Error(`Table ${t} not found in ${e}`));let b=d.transaction(t,"readonly").objectStore(t).get(r);b.onsuccess=()=>{d.close(),s(b.result);},b.onerror=()=>{d.close(),o(b.error);};},n.onerror=()=>{o(n.error);};});});var Yt,u,E=S(()=>{a();K();Yt=pe(),u={db:{},table:{},data:{}};Yt?(async()=>(Object.defineProperty(u,"db",{value:{},writable:true,configurable:true}),Object.defineProperty(u,"table",{value:{},writable:true,configurable:true}),Object.defineProperty(u,"data",{value:{},writable:true,configurable:true}),Object.defineProperty(globalThis,"idbases",{value:[],writable:true,configurable:true,enumerable:false}),await Promise.all([Promise.resolve().then(()=>(et(),Nt)),Promise.resolve().then(()=>(tt(),Vt)),Promise.resolve().then(()=>(rt(),Bt)),Promise.resolve().then(()=>(ot(),Lt)),Promise.resolve().then(()=>(st(),Ht)),Promise.resolve().then(()=>(nt(),Jt)),Promise.resolve().then(()=>(it(),zt)),Promise.resolve().then(()=>(at(),Kt)),Promise.resolve().then(()=>(lt(),Ut)),Promise.resolve().then(()=>(ct(),qt)),Promise.resolve().then(()=>(ut(),Ft)),Promise.resolve().then(()=>(mt(),Wt)),Promise.resolve().then(()=>(dt(),Gt))]),Object.preventExtensions(u),Object.seal(u),Object.freeze(u)))():(u._disabled=true,u._warning="IndexedDB is not available in this environment (Node.js/Deno). Use store or session for persistence.",console.warn("Memorio IDB: IndexedDB is not available in this environment. Use store or session for data persistence."));});a();a();C();x();a();var v={set:(e,t={})=>{globalThis.dispatchEvent(new CustomEvent(String(e),t));},listen:(e,t=null,r)=>{if(globalThis.events?.[e])return;let s=t?o=>{let n=o;return globalThis.queueMicrotask?globalThis.queueMicrotask(()=>t(n)):Promise.resolve().then(()=>t(n))}:void 0;s&&globalThis.addEventListener(e,s),s&&(globalThis.events[e]=s);},remove:e=>{let t=globalThis.events?.[e];t&&(globalThis.removeEventListener(e,t),delete globalThis.events[e]);}};a();x();var z=new Map,Ue=(e,t,r)=>{let s=[];if(t.type&&t.type!=="any"){let o=Array.isArray(e)?"array":typeof e;if(o!==t.type)return s.push(`${r}: expected ${t.type}, got ${o}`),{valid:false,errors:s}}if(t.enum&&!t.enum.includes(e)&&s.push(`${r}: value must be one of [${t.enum.map(String).join(", ")}]`),t.validator){let o=t.validator(e);o!==true&&s.push(`${r}: ${typeof o=="string"?o:"validation failed"}`);}if(typeof e=="number"&&(t.min!==void 0&&e<t.min&&s.push(`${r}: value ${e} is less than minimum ${t.min}`),t.max!==void 0&&e>t.max&&s.push(`${r}: value ${e} exceeds maximum ${t.max}`)),typeof e=="string"&&(t.min!==void 0&&e.length<t.min&&s.push(`${r}: string length ${e.length} is less than minimum ${t.min}`),t.max!==void 0&&e.length>t.max&&s.push(`${r}: string length ${e.length} exceeds maximum ${t.max}`),t.pattern&&!t.pattern.test(e)&&s.push(`${r}: string does not match required pattern`)),t.type==="object"&&e&&typeof e=="object"&&!Array.isArray(e)){if(t.required)for(let o of t.required)o in e||s.push(`${r}: missing required property '${o}'`);if(t.properties){for(let[o,n]of Object.entries(t.properties))if(o in e&&e[o]!==void 0){let i=Ue(e[o],n,`${r}.${o}`);i.valid||s.push(...i.errors||[]);}}}return s.length===0?{valid:true}:{valid:false,errors:s}},qe=(e,t)=>{let r=z.get(e);return r?Ue(t,r,e):{valid:true}},Fe=(e,t)=>{typeof t=="function"?z.set(e,{validator:t}):z.set(e,t),c(`[memorio schema] Registered schema for '${e}'`);},We=e=>z.delete(e),Ge=()=>Array.from(z.keys()),_t=e=>z.get(e),M={register:Fe,validate:qe,unregister:We,list:Ge,get:_t};var X=Symbol("memorio.target"),Ye=new WeakMap,A=(e,t=null)=>{if(e===null||typeof e!="object")return e;if(e[X]!==void 0)return A(e[X],t);if(t){if(t.has(e))return e;t.add(e);}let r=e.constructor?.name;if(r!=="Object"&&r!=="Array")return e;let s=Array.isArray(e)?[]:{};for(let o of Reflect.ownKeys(e))s[o]=A(e[o],t);return s},Xe=(e,t,r=".")=>t.concat(e).join(r),Qe=(e,t,r=[])=>{let s=o=>{try{v.set(o,{detail:{name:o}});}catch{}};return new Proxy(e,{get(o,n){if(n==="__path")return r.length>0?"state."+r.join("."):"state";if(n===X||o[X]!==void 0)return o;if(n==="list")return c('Some state could be hidden when you use "state.list". Use "state" to see the complete list '),JSON.parse(JSON.stringify(o));if(typeof n=="string"){let i=r.length>0?"state."+r.concat(n).join("."):"state."+n;l.lastAccessedPath=i,l.tracking&&l.trackedPaths.add(i);}if(n==="_lastPath")return l.lastAccessedPath;if(n==="remove")return i=>(delete o[i],true);if(n==="removeAll")return ()=>{try{for(let i in o)typeof o[i]!="function"&&!["list","remove","removeAll","lock","unlock"].includes(i)&&delete o[i];}catch(i){console.error(i);}};if(Object.isFrozen(o[n]))return o[n];if(n==="lock"||n==="unlock"){let i=Reflect.get(o,n);if(i)return i}try{let i=Reflect.get(o,n);if(i&&typeof i=="object"&&["Array","Object"].includes(i.constructor.name)){let d=Ye.get(i);return d||(d=Qe(i,t,r.concat(n)),Ye.set(i,d)),d}return i}catch(i){console.error("Error: ",i);return}},set(o,n,i){if(l.locked)return console.error("Error: state is locked. Use state.unlock() to enable modifications."),false;if(Ke.includes(n))return console.error("key "+n+" is protected"),false;if(o[n]&&typeof o[n]=="object"&&Object.isFrozen(o[n]))return console.error(`Error: state '${n}' is locked`),false;if(o[n]&&typeof o[n]=="object"&&o[n].__locked)return console.error(`Error: state '${n}' is locked. Use state.${n}.unlock() to enable modifications.`),false;try{let d=Xe(n,r),f=A(i),y=M.validate(d,f);if(!y.valid)return l.debug&&console.error(`[memorio schema] Validation failed for '${d}':`,y.errors),c(`[memorio schema] Validation failed for '${d}': `+(y.errors?.join(", ")||"unknown error")),!1;if(t({action:"set",path:d,target:o,newValue:f,previousValue:Reflect.get(o,n)}),s("state."+d),Reflect.set(o,n,f),l.bumpStateVersion(),o[n]&&typeof o[n]=="object"){let b=o[n];if(b&&typeof b=="object")try{Object.defineProperty(b,"__locked",{writable:!0,enumerable:!1,configurable:!1,value:!1}),Object.defineProperty(b,"lock",{writable:!1,enumerable:!1,configurable:!1,value:()=>{Object.defineProperty(b,"__locked",{writable:!0,enumerable:!1,configurable:!1,value:!0}),c(`State '${n}' is now locked.`);}}),Object.defineProperty(b,"unlock",{writable:!1,enumerable:!1,configurable:!1,value:()=>{Object.defineProperty(b,"__locked",{writable:!0,enumerable:!1,configurable:!1,value:!1}),c(`State '${n}' is now unlocked.`);}});}catch{}}return !0}catch(d){return console.error("Error in set trap:",d),false}},deleteProperty(o,n){try{let i=Xe(n,r),d=Reflect.get(o,n);return t({action:"delete",path:i,target:o,previousValue:d}),Reflect.deleteProperty(o,n)}catch(i){return console.error("Error in deleteProperty trap:",i),false}},ownKeys(o){return Reflect.ownKeys(o)},getOwnPropertyDescriptor(o,n){return Reflect.getOwnPropertyDescriptor(o,n)}})},h=Qe({},e=>{l.historyEnabled&&l.recordMutation({path:e.path,action:e.action,newValue:e.newValue,previousValue:e.previousValue,timestamp:Date.now()});});h.lock=()=>{l.locked=true,c("State is now locked. All modifications are blocked.");};h.unlock=()=>{l.locked=false,c("State is now unlocked. Modifications are allowed.");};a();K();C();x();var P=fe(),ve=new Map;function V(){let t=l.currentContext||""||"default";return ve.has(t)||ve.set(t,new Map),ve.get(t)}var N=P!==null;function I(){let e=l.currentContext||"";return e?`${e}-`:"memorio_store_"}function xe(e){return !e||typeof e!="string"?(console.warn("[memorio store] key is empty or not a string - operation aborted"),""):e.length>512?(console.warn(`[memorio store] key "${e}" exceeds 512 chars - operation aborted`),""):I()+e}function Dt(e){let t=N?P.getItem(e):V().get(e);return t&&JSON.parse(t)}function Rt(e,t){let r=JSON.stringify(t);N?P.setItem(e,r):V().set(e,r);}function At(e){if(N){if(P.getItem(e))return P.removeItem(e),true}else if(V().has(e))return V().delete(e),true;return false}var w=new Proxy({},{});Object.defineProperty(globalThis,"store",{value:w,enumerable:false,configurable:true});Object.defineProperties(w,{get:{value:e=>{if(!e)return console.warn("[memorio store] store.get() called with empty or null key - returning null"),null;try{return Dt(xe(e))}catch(t){T(`Error parsing store item '${e}': ${t}`);}return null}},getMultiple:{value:e=>{let t={};for(let r of e)try{let s=w.get(r);s&&(t[r]=s);}catch(s){console.debug(`[memorio store] getMultiple error for key "${r}":`,s);}return t}},set:{value:(e,t)=>{if(!e)return console.warn("[memorio store] store.set() called with empty or null key - write aborted"),false;let r=xe(e);if(!r)return false;if(typeof t=="function")return console.warn("[memorio store] functions are not storable - write aborted for key: "+e),T("Storing functions is not secure and is blocked for safety."),false;try{Rt(r,t);}catch(s){return T(`Error setting store item '${e}': ${s}`),false}return true}},remove:{value:e=>{if(!e)return console.debug("[memorio store] store.remove() called with empty or null key - returning false"),false;let t=xe(e);if(!t)return false;try{return At(t)}catch(r){T(`Error removing store item '${e}': ${r}`);}return false}},delete:{value:e=>w.remove(e)},removeAll:{value:()=>{if(N){let e=[];for(let t=0;t<P.length;t++){let r=P.key(t);r?.startsWith(I())&&e.push(r);}e.forEach(t=>P.removeItem(t));}else V().clear();return true}},clearAll:{value:()=>(w.removeAll(),true)},quota:{value:async()=>[0,0]},size:{value:()=>{let e=0;return N?Object.keys(P).forEach(t=>{if(t.startsWith(I())){let r=P.getItem(t);r&&(e+=r.length);}}):V().forEach(t=>{e+=t.length;}),e}},isPersistent:{get:()=>N},list:{value:()=>{let e={};try{if(N)for(let t=0;t<P.length;t++){let r=P.key(t);if(r?.startsWith(I())){let s=r.replace(I(),""),o=P.getItem(r);if(o!==null)try{e[s]=JSON.parse(o);}catch{e[s]=o;}}}else V().forEach((t,r)=>{if(r.startsWith(I())){let s=r.replace(I(),"");try{e[s]=JSON.parse(t);}catch{e[s]=t;}}});}catch(t){T(`Error listing store items: ${t}`);}return e}}});Object.freeze(w);a();K();C();x();var O=de(),Se=new Map;function H(){let t=l.currentContext||""||"default";return Se.has(t)||Se.set(t,new Map),Se.get(t)}var L=O!==null;function B(){let e=l.currentContext||"";return e?`${e}-`:"memorio_session_"}function we(e){return !e||typeof e!="string"?(console.warn("[memorio session] key is empty or not a string - operation aborted"),""):e.length>512?(console.warn(`[memorio session] key "${e}" exceeds 512 chars - operation aborted`),""):B()+e}function Mt(e){let t=L?O.getItem(e):H().get(e);return t&&JSON.parse(t)}function jt(e,t){let r=JSON.stringify(t);L?O.setItem(e,r):H().set(e,r);}function It(e){if(L){if(O.getItem(e))return O.removeItem(e),true}else if(H().has(e))return H().delete(e),true;return false}var _=new Proxy({},{});Object.defineProperty(globalThis,"session",{value:_,enumerable:false,configurable:true});Object.defineProperties(_,{get:{value:e=>{if(!e)return console.warn("[memorio session] session.get() called with empty or null key - returning null"),null;try{return Mt(we(e))}catch(t){T(`Error parsing session item '${e}':${t}`);}return null}},set:{value:(e,t)=>{if(!e)return console.warn("[memorio session] session.set() called with empty or null key - write aborted"),false;let r=we(e);if(!r)return false;if(typeof t=="function")return console.warn("[memorio session] functions are not storable - write aborted for key: "+e),T("It's not secure to session functions."),false;try{jt(r,t);}catch(s){return T(`Error setting session item '${e}': ${s}`),false}return true}},remove:{value:e=>{if(!e)return console.warn("[memorio session] session.remove() called with empty or null key - returning false"),false;let t=we(e);if(!t)return false;try{return It(t)}catch(r){T(`Error removing session item '${e}': ${r}`);}return false}},delete:{value:e=>_.remove(e)},removeAll:{value:()=>{if(L){let e=[];for(let t=0;t<O.length;t++){let r=O.key(t);r?.startsWith(B())&&e.push(r);}e.forEach(t=>O.removeItem(t));}else H().clear();return true}},clearAll:{value:()=>(_.removeAll(),true)},quota:{value:async()=>[0,0]},size:{value:()=>{let e=0;return L?Object.keys(O).forEach(t=>{if(t.startsWith(B())){let r=O.getItem(t);r&&(e+=r.length);}}):H().forEach(t=>{e+=t.length;}),e}},isPersistent:{get:()=>L},list:{value:()=>{let e={};try{if(L)for(let t=0;t<O.length;t++){let r=O.key(t);if(r?.startsWith(B())){let s=r.replace(B(),""),o=O.getItem(r);if(o!==null)try{e[s]=JSON.parse(o);}catch{e[s]=o;}}}else H().forEach((t,r)=>{if(r.startsWith(B())){let s=r.replace(B(),"");try{e[s]=JSON.parse(t);}catch{e[s]=t;}}});}catch(t){T(`Error listing session items: ${t}`);}return e}}});Object.freeze(_);a();var D={},Z=new Proxy({},{get(e,t){let r=t;return r==="get"?s=>D[s]:r==="set"?(s,o)=>{D[s]=o;}:r==="remove"?s=>(delete D[s],true):r==="removeAll"?()=>(Object.keys(D).forEach(s=>delete D[s]),true):r==="clear"?()=>(Object.keys(D).forEach(s=>delete D[s]),true):r==="list"?()=>({...D}):D[r]},set(e,t,r){return D[t]=r,true},deleteProperty(e,t){return delete D[t],true}});Object.freeze(Z);E();a();x();var ft=false,Xt=(e,t=null,r=true)=>{ft||(console.warn('DEPRECATED: "observer" is deprecated and will be removed in future versions. Please use "useObserver" instead.'),ft=true);let s=n=>typeof n=="string"?n:n&&typeof n=="object"&&n.__path?n.__path:null,o=s(e);if(!e&&!t){console.error("Observer Error: You need to setup observer correctly, Some parameters are missed!");return}if(!e&&t){console.error("Observer Error: You need to declare what state need to be monitored as string like 'state.test'.");return}if(o){let n=o.split(".");if(n[0]!=="state"&&n[0]!=="store"){console.error(`Observer Error: You need to declare 'state.' or 'store.'. The '${o}' string is incorrect!`);return}}if(e&&!t){let n=s(e);if(!n)return;globalThis.observer?.list?.[n]&&v.remove(n),c(`called: ${n}`);return}if(e&&t){let n=s(e);if(!n)return;if(typeof e!="string"&&!(e&&typeof e=="object")){console.error("Observer Error: name of state need to be a 'string' like 'state.test' or a direct state value");return}let i=Array.isArray(t)?t:[t];globalThis.observer?.list?.[n]&&v.remove(n),i.forEach(f=>{typeof f=="function"&&v.listen(n,f,r);});return}},ee=Xt;Object.defineProperties(ee,{list:{get:()=>globalThis.events},remove:{value:e=>{e&&(v.remove(e),delete globalThis.events[e]);}},removeAll:{get:()=>{let e=globalThis.observer,t=e?.list;return t&&Object.keys(t).forEach(r=>{e?.remove?.(r);}),true}},has:{value:e=>!!globalThis.observer?.list?.[e]}});a();x();C();globalThis.useObserver||(globalThis.useObserver=null);Object.defineProperty(globalThis,"useObserver",{value:null,writable:true,enumerable:false,configurable:true});var te=((e,t=[])=>{if(!t||typeof e!="function")return ()=>{};let r=[],s=Array.isArray(t)&&!t.__path?t:[t];try{return s.forEach(o=>{let n="";if(typeof o=="function"){let i=ae(o);i&&(n=i);}else typeof o=="object"&&o!==null&&(n=o.__path||(typeof o.toString=="function"&&o.toString()!=="[object Object]"?o.toString():""));if(n){n=n.replace(/^(\(\)\s*=>\s*)/,"").replace(/^globalThis\./,"").replace(/^state\./,"");let i=n.startsWith("store.")||n.startsWith("state.")?n:"state."+n;v.listen(i,()=>e()),r.push(i);}else {l.clearTrackedPaths(),l.tracking=!0;try{e();}catch{}l.tracking=!1,l.trackedPaths.forEach(i=>{r.includes(i)||(c(`useObserver: [Auto-Discovery] -> "${i}"`),v.listen(i,()=>e()),r.push(i));});}}),r.length>0?c(`useObserver: Monitoring ${r.length} paths.`):console.warn("useObserver: No paths resolved for monitoring. Check your dependencies!"),()=>{r.forEach(o=>{typeof v.remove=="function"&&(v.remove(o),c(`useObserver: Stopped monitoring "${o}"`));});}}catch(o){return c(`useObserver Error: ${o}`),()=>{}}});globalThis.useObserver=te;Object.freeze(globalThis.useObserver);x();a();C();function Qt(){return l.debug===true}function pt(){if(!globalThis.store)return {};let e={},t=globalThis.store;if(typeof t.list=="function")try{return t.list()}catch{}if(typeof t.get=="function"){for(let r of Object.keys(t))if(!["get","set","remove","delete","removeAll","clearAll","size","isPersistent","list"].includes(r))try{let s=t.get(r);s!=null&&(e[r]=s);}catch{}}return e}function gt(){if(!globalThis.session)return {};let e={},t=globalThis.session;if(typeof t.list=="function")try{return t.list()}catch{}if(typeof t.get=="function"){for(let r of Object.keys(t))if(!["get","set","remove","delete","removeAll","clearAll","size","isPersistent","list"].includes(r))try{let s=t.get(r);s!=null&&(e[r]=s);}catch{}}return e}var Zt=()=>{if(Qt()){if(globalThis.state){let e=globalThis.state.list,t;typeof e=="function"?t=e():typeof e=="object"&&e!==null?t=e:t=globalThis.state,console.table(t);}if(globalThis.store&&console.table(pt()),globalThis.session&&console.table(gt()),globalThis.cache){let e=globalThis.cache.list,t;typeof e=="function"?t=e():typeof e=="object"&&e!==null?t=e:t=globalThis.cache,console.table(t);}}},er=()=>{let e=t=>{if(!t)return 0;if(typeof t.list=="function")try{let r=t.list();return Object.keys(r).length}catch{}return Object.keys(t).length};return {stateKeys:e(globalThis.state),storeKeys:e(globalThis.store),sessionKeys:e(globalThis.session),cacheKeys:e(globalThis.cache),idbDatabases:0,lastUpdate:new Date().toISOString()}},G=e=>{globalThis[e]&&typeof globalThis[e].clear=="function"?globalThis[e].clear():console.error(`Module ${e} not found or does not support clear()`);},tr=()=>{G("state"),G("store"),G("session"),G("cache");},rr=()=>{let e=()=>{if(globalThis.state)try{return typeof globalThis.state.list=="function"?globalThis.state.list():globalThis.state}catch{return}},t=()=>pt(),r=()=>gt(),s=()=>{if(globalThis.cache)try{return typeof globalThis.cache.list=="function"?globalThis.cache.list():globalThis.cache}catch{return}},o={state:e(),store:t(),session:r(),cache:s(),exportedAt:new Date().toISOString()};return JSON.stringify(o,null,2)},or=e=>{try{let t=JSON.parse(e);t.state&&Object.entries(t.state).forEach(([r,s])=>{globalThis.state&&r!=="list"&&r!=="remove"&&r!=="removeAll"&&(globalThis.state[r]=s);}),t.store&&globalThis.store&&typeof globalThis.store.set=="function"&&Object.entries(t.store).forEach(([r,s])=>{globalThis.store.set(r,s);}),t.session&&globalThis.session&&typeof globalThis.session.set=="function"&&Object.entries(t.session).forEach(([r,s])=>{globalThis.session.set(r,s);}),t.cache&&globalThis.cache&&Object.entries(t.cache).forEach(([r,s])=>{globalThis.cache&&r!=="get"&&r!=="set"&&r!=="remove"&&r!=="clear"&&(globalThis.cache[r]=s);});}catch(t){console.error("%c\u2717 Import failed:","color: #F44336",t);}},sr=(e,t)=>{if(!globalThis[e]){console.error(`Module ${e} not found`);return}let r=globalThis[e],s=r[t];if(console.debug(`\u{1F441} Watching ${e}.${t} (initial: ${JSON.stringify(s)})`),e==="state"&&globalThis.memorio?.dispatch){let o=n=>{n.detail?.name?.includes(t)&&console.debug(`\u{1F441} Change: ${e}.${t} =`,n.detail.value);};r.addEventListener?.("memorio-change",o);}},nr=()=>{console.debug(`
2
5
  \u{1F9E0} Memorio DevTools Help
3
6
 
4
7
  Available commands:
@@ -16,10 +19,10 @@ Shortcuts:
16
19
  store - globalThis.store
17
20
  session - globalThis.session
18
21
  cache - globalThis.cache
19
- `);},de={inspect:ct,stats:ut,clear:K,clearAll:ft,exportData:mt,importData:dt,watch:gt,help:bt};a();T();p();var pt={enabled:true,logToConsole:true,modules:["state","store","session","cache","idb"],maxEntries:1e3};function yt(){return u.debug===true}var D={...pt},k=[],ht=e=>{D={...D,...e};},vt=()=>{D.enabled=true;},xt=()=>{D.enabled=false;},Me=e=>D.enabled&&D.modules.includes(e),wt=(e,t,r,s,o)=>{if(!Me(e))return;let n={timestamp:new Date().toISOString(),module:e,action:t,path:r,value:s,previousValue:o};if(k.push(n),k.length>D.maxEntries&&k.shift(),D.logToConsole&&yt()){let i=`[Memorio:${e.toUpperCase()}]`,g=St(e);c(`%c${i}%c ${t} ${r},
20
- color: ${g}; font-weight: bold,
21
- color: inherit`),s!==void 0&&c(` \u2192 value:${s}`),o!==void 0&&c(` \u2190 previous:${o}`);}D.customHandler&&D.customHandler(n);},St=e=>({state:"#4CAF50",store:"#2196F3",session:"#FF9800",cache:"#9C27B0",idb:"#F44336"})[e]||"#888888",Pt=()=>[...k],Tt=()=>{k.length=0;},Ot=()=>{let e={total:k.length,state:0,store:0,session:0,cache:0,idb:0,set:0,get:0,delete:0,clear:0};for(let t of k)if(t){let r=t.module,s=t.action;r&&typeof e[r]=="number"&&e[r]++,s&&typeof e[s]=="number"&&e[s]++;}return e},Et=()=>JSON.stringify(k,null,2),ge={configure:ht,enable:vt,disable:xt,isEnabled:Me,log:wt,getHistory:Pt,clearHistory:Tt,getStats:Ot,exportLogs:Et};T();M();a();M();T();var be={version:"4.7.0"};w();p();Object.defineProperty(globalThis,"memorio",{value:{setProps:()=>{},obj:{},array:[],dispatch:x,message:v,devtools:de,logger:ge,setDescription:()=>{}},writable:false,configurable:true,enumerable:false});Object.defineProperty(globalThis,"events",{value:{},writable:true,enumerable:false});Object.defineProperty(memorio,"version",{writable:false,enumerable:false,value:be.version});Object.defineProperty(memorio,"debug",{get:()=>u.debug,set:e=>{u.debug=e;},enumerable:false});var Ne=J();Object.defineProperty(memorio,"_platform",{writable:false,enumerable:false,value:Ne.platform});Object.defineProperty(memorio,"_capabilities",{writable:false,enumerable:false,value:Ne});Object.defineProperty(memorio,"_sessionId",{writable:false,enumerable:false,value:U()});xe();memorio.isBrowser=X;memorio.isNode=Z;memorio.isDeno=ee;memorio.isEdge=te;memorio.getCapabilities=J;memorio.createContext=V;memorio.listContexts=ie;memorio.deleteContext=ae;memorio.isolate=e=>V(e);Object.defineProperty(globalThis,"state",{value:L,writable:true,enumerable:false,configurable:true});Object.defineProperty(globalThis,"store",{value:j,writable:true,enumerable:false,configurable:true});Object.defineProperty(globalThis,"session",{value:C,writable:true,enumerable:false,configurable:true});Object.defineProperty(globalThis,"cache",{value:W,writable:true,enumerable:false,configurable:true});Object.defineProperty(globalThis,"idb",{value:l,writable:true,enumerable:false,configurable:true});Object.defineProperty(globalThis,"observer",{value:H,writable:true,enumerable:false,configurable:true});Object.defineProperty(globalThis,"useObserver",{value:Y,writable:true,enumerable:false,configurable:true});Object.defineProperty(memorio,"dispatch",{value:x,writable:true,enumerable:false,configurable:true});Object.defineProperty(memorio,"setContext",{writable:false,enumerable:false,value:e=>le(e)});Object.defineProperty(memorio,"getContext",{writable:false,enumerable:false,value:()=>u.currentContext});Object.defineProperty(globalThis,"$state",{get:()=>globalThis.state,configurable:true});Object.defineProperty(globalThis,"$store",{get:()=>globalThis.store,configurable:true});Object.defineProperty(globalThis,"$session",{get:()=>globalThis.session,configurable:true});Object.defineProperty(globalThis,"$cache",{get:()=>globalThis.cache,configurable:true});memorio.help=function(){console.debug(`
22
- \u{1F9E0} Memorio ${be.version} - Help
22
+ `);},Ee={inspect:Zt,stats:er,clear:G,clearAll:tr,exportData:rr,importData:or,watch:sr,help:nr};a();C();x();var ir={enabled:true,logToConsole:true,modules:["state","store","session","cache","idb"],maxEntries:1e3};function ar(){return l.debug===true}var R={...ir},j=[],lr=e=>{R={...R,...e};},cr=()=>{R.enabled=true;},ur=()=>{R.enabled=false;},yt=e=>R.enabled&&R.modules.includes(e),mr=(e,t,r,s,o)=>{if(!yt(e))return;let n={timestamp:new Date().toISOString(),module:e,action:t,path:r,value:s,previousValue:o};if(j.push(n),j.length>R.maxEntries&&j.shift(),R.logToConsole&&ar()){let i=`[Memorio:${e.toUpperCase()}]`,d=dr(e);c(`%c${i}%c ${t} ${r},
23
+ color: ${d}; font-weight: bold,
24
+ color: inherit`),s!==void 0&&c(` \u2192 value:${s}`),o!==void 0&&c(` \u2190 previous:${o}`);}R.customHandler&&R.customHandler(n);},dr=e=>({state:"#4CAF50",store:"#2196F3",session:"#FF9800",cache:"#9C27B0",idb:"#F44336"})[e]||"#888888",fr=()=>[...j],pr=()=>{j.length=0;},gr=()=>{let e={total:j.length,state:0,store:0,session:0,cache:0,idb:0,set:0,get:0,delete:0,clear:0};for(let t of j)if(t){let r=t.module,s=t.action;r&&typeof e[r]=="number"&&e[r]++,s&&typeof e[s]=="number"&&e[s]++;}return e},yr=()=>JSON.stringify(j,null,2),Te={configure:lr,enable:cr,disable:ur,isEnabled:yt,log:mr,getHistory:fr,clearHistory:pr,getStats:gr,exportLogs:yr};C();K();a();K();C();var re={version:"4.7.3"};E();x();a();function ke(){return h}a();C();x();function bt(e){if(e===null||typeof e!="object")return e;let t=e.constructor?.name;if(t!=="Object"&&t!=="Array")return e;try{return JSON.parse(JSON.stringify(e))}catch{return e}}var Oe=()=>bt(A(h)),Ce=e=>{let t=[],r=(s,o,n)=>{let i=s?Object.keys(s):[],d=o?Object.keys(o):[];for(let f of d){let y=n?`${n}.${f}`:f,b=s?s[f]:void 0,k=o[f];b!==k&&(typeof b!==typeof k||b===void 0?t.push({path:y,oldValue:b,newValue:k}):b&&typeof b=="object"?r(b,k,y):b!==k&&t.push({path:y,oldValue:b,newValue:k}));}for(let f of i)if(!(f in(o||{}))){let y=n?`${n}.${f}`:f;t.push({path:y,oldValue:s[f],newValue:void 0});}};return r(e,A(h),""),t},_e=(e=true)=>{l.historyEnabled=e,c(`[memorio history] Tracking ${e?"enabled":"disabled"}`);};var $e=()=>[...l.mutations],De=()=>l.canUndo(),Re=()=>l.canRedo(),Ae=()=>{if(!l.historyEnabled){c("[memorio history] History is not enabled");return}let e=l.popUndo();if(e)return hr(e),c(`[memorio history] Undid: ${e.action} ${e.path}`),e},Me=()=>{if(!l.historyEnabled){c("[memorio history] History is not enabled");return}let e=l.popRedo();if(e)return vr(e),c(`[memorio history] Redid: ${e.action} ${e.path}`),e};function hr(e){let t=l.historyEnabled;l.historyEnabled=false;try{e.action==="set"?e.previousValue===void 0?ht(e.path):Pe(e.path,e.previousValue):e.action==="delete"&&e.previousValue!==void 0&&Pe(e.path,e.previousValue);}finally{l.historyEnabled=t;}}function vr(e){let t=l.historyEnabled;l.historyEnabled=false;try{e.action==="set"?Pe(e.path,e.newValue):e.action==="delete"&&ht(e.path);}finally{l.historyEnabled=t;}}function Pe(e,t){let r=e.split("."),s=h;for(let o=0;o<r.length-1;o++){let n=r[o];s[n]===void 0&&(s[n]={}),s=s[n];}s[r[r.length-1]]=t;}function ht(e){let t=e.split(".");if(t.length===1){h.remove(t[0]);return}let r=h;for(let s=0;s<t.length-1;s++){let o=t[s];if(r[o]===void 0)return;r=r[o];}delete r[t[t.length-1]];}var je=e=>{h.removeAll();for(let t of Object.keys(e))h[t]=bt(e[t]);l.clearHistory(),c("[memorio history] State rolled back to snapshot");},Ie=()=>{l.clearHistory(),c("[memorio history] History cleared");},Ne=()=>{l.clearRedo();};a();var Ve=()=>{let e=A(h);return Object.keys(e).filter(t=>!["list","remove","removeAll","lock","unlock"].includes(t))},Be=e=>{if(!e||typeof e!="string")return false;let t=e.replace(/^state\./,"").split("."),r=h;for(let s of t){if(r==null)return false;r=r[s];}return r!==void 0},Le=e=>{let[t,r]=vt(e);return !t||r===void 0?"undefined":Array.isArray(r)?"array":typeof r},He=e=>{let[t,r]=vt(e);if(!(!t||r===void 0))return xr(r)},Je=()=>{let e=[],t=(r,s)=>{if(r===null||typeof r!="object"||Array.isArray(r))return;let o=Object.keys(r).filter(n=>!["list","remove","removeAll","lock","unlock"].includes(n));for(let n of o){let i=s?`${s}.${n}`:n,d=r[n],f=d!==void 0,y=f?Array.isArray(d)?"array":typeof d:"undefined";e.push({path:i,type:y,defined:f}),f&&typeof d=="object"&&!Array.isArray(d)&&d.constructor?.name==="Object"&&t(d,i);}};return t(A(h),""),e};function vt(e){if(!e||typeof e!="string")return [false,void 0];let t=e.replace(/^state\./,"").split("."),r=h;for(let s of t){if(r==null)return [false,void 0];r=r[s];}return [r!==void 0,r]}function xr(e){if(e===null||typeof e!="object")return e;let t=e.constructor?.name;if(t!=="Object"&&t!=="Array")return e;try{return JSON.parse(JSON.stringify(e))}catch{return e}}a();E();var se="__memorio_memory_index__",xt="__memorio_superseded__";function ze(e){return e.startsWith(xt)?e:`${xt}${e}`}function St(e){return e?Array.isArray(e)?e:[e]:[]}function Sr(e,t){if(t.scope)return t.scope;let r=JSON.stringify(e).length;return r>1e6?"durable":("local")}function $(){return Date.now()}function ne(e){return e.ttl===null||e.ttl===void 0?false:$()-e.createdAt>e.ttl}function wr(e,t){return e.status==="obsolete"||e.status==="superseded"||ne(e)?t.includeObsolete??false:!(t.type&&!(Array.isArray(t.type)?t.type:[t.type]).includes(e.type)||t.minConfidence!==void 0&&e.confidence<t.minConfidence)}function Er(e,t){return !(e.status!=="active"||ne(e)||t.tags&&!(Array.isArray(t.tags)?t.tags:[t.tags]).some(o=>e.tags.includes(o))||t.types&&!(Array.isArray(t.types)?t.types:[t.types]).includes(e.type)||t.minConfidence!==void 0&&e.confidence<t.minConfidence||t.scopes&&!t.scopes.includes(e.scope))}function Tr(e){let t=($()-e.createdAt)/36e5,r=Math.max(.1,1/(1+t*.5)),s=e.confidence,o=1+e.tags.length*.1,n={decision:1.5,context:1.3,preference:1.2,task:1,fact:.8},i={hot:1.5,session:1.2,local:1,durable:.8};return r*s*o*n[e.type]*i[e.scope]}function Et(e,t){if(!t||typeof t!="string")return;let r=t.replace(/^state\./,"").split("."),s=e;for(let o of r){if(s==null)return;s=s[o];}return s}function Tt(e,t,r){if(!t||typeof t!="string")return;let s=t.replace(/^state\./,"").split("."),o=e;for(let n=0;n<s.length-1;n++){let i=s[n];(o[i]===void 0||o[i]===null)&&(o[i]={}),o=o[i];}o[s[s.length-1]]=r;}async function J(e){let t=e.status==="superseded"?ze(e.id||e.key):e.key,r=JSON.stringify(e);switch(e.scope){case "hot":Tt(h,t,e.value);break;case "session":_.set(t,r);break;case "local":w.set(t,r);break;case "durable":await u.set("memories",t,r);break}await kr(e.id||e.key,e.scope,e.status==="superseded");}async function kt(e,t,r=false){let s=r?ze(e):e,o;switch(t){case "hot":{let n=Et(h,s);return n===void 0?null:Pt(e,n,t)}case "session":o=_.get(s);break;case "local":o=w.get(s);break;case "durable":o=await u.get("memories",s);break}if(!o)return null;try{let n=JSON.parse(o);return n.id=n.id||e,n}catch{return null}}function Pt(e,t,r){return {id:e,key:e,value:t,type:"fact",confidence:1,scope:r,ttl:null,tags:[],status:"active",createdAt:$(),lastConfirmedAt:$(),supersededId:null}}async function wt(e,t,r=false){let s=r?ze(e):e;switch(t){case "hot":Tt(h,s,void 0);break;case "session":_.remove(s);break;case "local":w.remove(s);break;case "durable":await u.deleteKey("memories",s);break}await Pr(e,r);}async function Y(){try{let e=w.get(se);return e?JSON.parse(e):{}}catch{return {}}}async function kr(e,t,r=false){let s=await Y();s[e]={scope:t,superseded:r},w.set(se,JSON.stringify(s));}async function Pr(e,t=false){let r=await Y(),s=r[e];s&&(t&&s.superseded||!t&&!s.superseded)&&delete r[e],w.set(se,JSON.stringify(r));}async function oe(){let e=await Y(),t=[];for(let[r,s]of Object.entries(e)){let o=await kt(r,s.scope,s.superseded);o&&(o.id=o.id||r,o.supersededId=o.supersededId??null,t.push(o));}return t}async function Or(){let e=await oe(),t=0;for(let r of e)ne(r)&&r.status==="active"&&(r.status="obsolete",await J(r),t++);return t}var ie={async remember(e,t,r={}){let s=await this._getEntry(e);if(s&&s.status==="active"){let d=`${s.id}__v${Date.now()}`,f={...s,id:d,key:s.key,status:"superseded",supersededId:null,lastConfirmedAt:$()};await J(f);}let o=Sr(t,r),n=St(r.tags),i={id:r.id||e,key:e,value:t,type:r.type||"fact",confidence:r.confidence??1,scope:o,ttl:r.ttl??null,tags:n,source:r.source,status:"active",createdAt:$(),lastConfirmedAt:$(),supersededId:s?s.id:null};await J(i),v.set("memorio:memory:remembered",{key:e,scope:o,entryId:i.id});},async recall(e,t={}){let r=await this._getEntry(e);return !r||!wr(r,t)?null:(r.lastConfirmedAt=$(),await J(r),v.set("memorio:memory:recalled",{key:e}),r.value)},async context(e={}){return (await oe()).filter(o=>Er(o,e)).map(o=>({entry:o,score:Tr(o)})).sort((o,n)=>n.score-o.score).slice(0,e.maxEntries??25).map(({entry:o})=>({key:o.key,value:o.value,type:o.type,confidence:o.confidence,scope:o.scope,tags:o.tags,age:$()-o.createdAt,accessCount:o.tags.length+1,lastAccessedAt:o.lastConfirmedAt}))},async forget(e){let t=await this._getEntry(e);t&&(await wt(t.id||e,t.scope,t.status==="superseded"),v.set("memorio:memory:forgotten",{key:e}));},async update(e,t,r={}){let s=await this._getEntry(e);if(!s){await this.remember(e,t,r);return}let o=`${s.id}__v${$()}`,n={...s,id:o,key:s.key,status:"superseded",supersededId:null,lastConfirmedAt:$()};await J(n);let i={...s,value:t,lastConfirmedAt:$(),...r.scope?{scope:r.scope}:{},...r.ttl!==void 0?{ttl:r.ttl}:{},...r.type?{type:r.type}:{},...r.confidence!==void 0?{confidence:r.confidence}:{},...r.tags!==void 0?{tags:St(r.tags)}:{},...r.source?{source:r.source}:{}};await J(i),v.set("memorio:memory:updated",{key:e,entryId:i.id});},async stats(){let e=await oe(),t={hot:0,session:0,local:0,durable:0},r={},s=0;for(let o of e)t[o.scope]=(t[o.scope]||0)+1,ne(o)&&s++,r[o.type]=(r[o.type]||0)+1;return {total:e.length,byScope:t,byType:r,expired:s}},async forgetExpired(){return Or()},async clear(){let e=await Y();for(let[t,r]of Object.entries(e))await wt(t,r.scope,r.superseded);w.remove(se);},async _getEntry(e){let r=(await Y())[e];if(!r){let s=Et(h,e);return s!==void 0?Pt(e,s,"hot"):null}return kt(e,r.scope,r.superseded)},async _loadAll(){return oe()},async _save(e){await J(e);}};Object.defineProperty(globalThis,"memorio",{value:{setProps:()=>{},obj:{},array:[],dispatch:v,message:T,devtools:Ee,logger:Te,setDescription:()=>{}},writable:false,configurable:true,enumerable:false});Object.defineProperty(globalThis,"events",{value:{},writable:true,enumerable:false});typeof globalThis.addEventListener=="function"&&v.listen("memorio:memory:cleanup",async()=>ie.forgetExpired?.());Object.defineProperty(memorio,"version",{writable:false,enumerable:false,value:re.version});Object.defineProperty(memorio,"debug",{get:()=>l.debug,set:e=>{l.debug=e;},enumerable:false});var Ot=F();Object.defineProperty(memorio,"_platform",{writable:false,enumerable:false,value:Ot.platform});Object.defineProperty(memorio,"_capabilities",{writable:false,enumerable:false,value:Ot});Object.defineProperty(memorio,"_sessionId",{writable:false,enumerable:false,value:Q()});Ze();memorio.isBrowser=le;memorio.isNode=ce;memorio.isDeno=ue;memorio.isEdge=me;memorio.getCapabilities=F;memorio.createContext=W;memorio.listContexts=ye;memorio.deleteContext=be;memorio.isolate=e=>W(e);memorio.registerSchema=M.register;memorio.validate=M.validate;memorio.unregisterSchema=M.unregister;memorio.listSchemas=M.list;memorio.typed=ke;memorio.snapshot=Oe;memorio.diff=Ce;memorio.undo=Ae;memorio.redo=Me;memorio.canUndo=De;memorio.canRedo=Re;memorio.rollback=je;memorio.trace=$e;memorio.enableHistory=_e;memorio.clearHistory=Ie;memorio.clearRedo=Ne;memorio.stateKeys=Ve;memorio.pathExists=Be;memorio.stateType=Le;memorio.stateGet=He;memorio.stateSchema=Je;memorio.memory=ie;Object.defineProperty(globalThis,"state",{value:h,writable:true,enumerable:false,configurable:true});Object.defineProperty(globalThis,"store",{value:w,writable:true,enumerable:false,configurable:true});Object.defineProperty(globalThis,"session",{value:_,writable:true,enumerable:false,configurable:true});Object.defineProperty(globalThis,"cache",{value:Z,writable:true,enumerable:false,configurable:true});Object.defineProperty(globalThis,"idb",{value:u,writable:true,enumerable:false,configurable:true});Object.defineProperty(globalThis,"observer",{value:ee,writable:true,enumerable:false,configurable:true});Object.defineProperty(globalThis,"useObserver",{value:te,writable:true,enumerable:false,configurable:true});Object.defineProperty(memorio,"dispatch",{value:v,writable:true,enumerable:false,configurable:true});Object.defineProperty(memorio,"setContext",{writable:false,enumerable:false,value:e=>he(e)});Object.defineProperty(memorio,"getContext",{writable:false,enumerable:false,value:()=>l.currentContext});Object.defineProperty(globalThis,"$state",{get:()=>globalThis.state,configurable:true});Object.defineProperty(globalThis,"$store",{get:()=>globalThis.store,configurable:true});Object.defineProperty(globalThis,"$session",{get:()=>globalThis.session,configurable:true});Object.defineProperty(globalThis,"$cache",{get:()=>globalThis.cache,configurable:true});memorio.help=function(){console.debug(`
25
+ \u{1F9E0} Memorio ${re.version} - Help
23
26
 
24
27
  Core Modules:
25
28
  state - Reactive state management
@@ -28,6 +31,13 @@ Core Modules:
28
31
  cache - In-memory cache
29
32
  idb - IndexedDB (browser only)
30
33
 
34
+ API:
35
+ memorio.typed<T>() - Type-safe view of global state (compile-time only)
36
+ memorio.registerSchema() - Register a validator for a state path
37
+ memorio.validate() - Manually validate a value
38
+ memorio.unregisterSchema() - Remove a registered schema
39
+ memorio.listSchemas() - List all registered schema paths
40
+
31
41
  Context Management:
32
42
  memorio.isolate(name) - Create isolated context
33
43
  memorio.listContexts() - List all contexts
@@ -49,6 +59,109 @@ DevTools:
49
59
  memorio.devtools.clear() - Clear specific module
50
60
  memorio.devtools.clearAll() - Clear all modules
51
61
 
62
+ Memory System:
63
+ memorio.memory.remember(key, value, opts) - Store a memory with type, confidence, scope, TTL, tags
64
+ memorio.memory.recall(key, opts) - Retrieve a memory with filtering
65
+ memorio.memory.update(key, value, opts) - Update an existing memory
66
+ memorio.memory.forget(key) - Delete a specific memory
67
+ memorio.memory.context(opts) - Get ranked relevant memories (semantic context for AI)
68
+ memorio.memory.stats() - Memory usage statistics
69
+ memorio.memory.forgetExpired() - Remove all expired entries
70
+ memorio.memory.clear() - Wipe all memories
71
+
72
+ Scopes:
73
+ hot - In-memory reactive state (volatile, fastest)
74
+ session - sessionStorage (persists across page reloads, cleared on tab close)
75
+ local - localStorage (persistent, survives browser restart)
76
+ durable - IndexedDB (large datasets, async)
77
+
78
+ TTL options:
79
+ ttl: number (milliseconds) or null (never expires)
80
+
81
+ Memory types:
82
+ fact, preference, decision, task, context
83
+
52
84
  Shortcuts:
53
85
  state, store, session, cache, idb - direct access to modules
54
- `);};var jt=globalThis.memorio,Lo=globalThis.events,zo=e=>V(e),qo=globalThis.memorio?.help,Jo=e=>u.currentContext=e,Vo=()=>u.currentContext,Ko=jt;export{W as cache,V as createContext,Ko as default,ae as deleteContext,de as devtools,x as dispatch,Lo as events,J as getCapabilities,Vo as getContext,qo as help,l as idb,u as internal,X as isBrowser,ee as isDeno,te as isEdge,Z as isNode,zo as isolate,ie as listContexts,ge as logger,jt as memorio,v as message,H as observer,G as propertyName,C as session,Jo as setContext,L as state,j as store,Y as useObserver};
86
+ `);};memorio.help=function(){console.debug(`
87
+ \u{1F9E0} Memorio ${re.version} - Help
88
+
89
+ Core Modules:
90
+ state - Reactive state management
91
+ store - Persistent storage (localStorage/Map)
92
+ session - Session storage (sessionStorage/Map)
93
+ cache - In-memory cache
94
+ idb - IndexedDB (browser only)
95
+
96
+ API:
97
+ memorio.typed<T>() - Type-safe view of global state (compile-time only)
98
+ memorio.registerSchema() - Register a validator for a state path
99
+ memorio.validate() - Manually validate a value
100
+ memorio.unregisterSchema() - Remove a registered schema
101
+ memorio.listSchemas() - List all registered schema paths
102
+
103
+ History & Time Travel:
104
+ memorio.snapshot() - Capture a deep snapshot of state
105
+ memorio.diff(snap) - Diff snapshot against current state
106
+ memorio.undo() / redo() - Undo / redo the last mutation
107
+ memorio.canUndo() / canRedo() - Check availability
108
+ memorio.rollback(snap) - Restore state from a snapshot
109
+ memorio.trace() - List all recorded mutations
110
+ memorio.enableHistory() - Enable/disable mutation tracking
111
+ memorio.clearHistory() - Clear undo/redo stacks and trace log
112
+
113
+ Introspection:
114
+ memorio.stateKeys() - List top-level state keys
115
+ memorio.pathExists(path) - Check if a state path exists
116
+ memorio.stateType(path) - Get runtime type of a state value
117
+ memorio.stateGet(path) - Get a deep-cloned value at a path
118
+ memorio.stateSchema() - Get a schema report of all state paths
119
+
120
+ Context Management:
121
+ memorio.isolate(name) - Create isolated context
122
+ memorio.listContexts() - List all contexts
123
+ memorio.deleteContext(id) - Delete a context
124
+
125
+ Platform Detection:
126
+ memorio.isBrowser() - Browser environment
127
+ memorio.isNode() - Node.js environment
128
+ memorio.isDeno() - Deno environment
129
+ memorio.isEdge() - Edge/Worker environment
130
+ memorio.getCapabilities() - Full capabilities object
131
+
132
+ DevTools:
133
+ memorio.devtools.inspect() - Inspect all modules
134
+ memorio.devtools.stats() - Show statistics
135
+ memorio.devtools.watch() - Watch a path
136
+ memorio.devtools.exportData() - Export as JSON
137
+ memorio.devtools.importData() - Import from JSON
138
+ memorio.devtools.clear() - Clear specific module
139
+ memorio.devtools.clearAll() - Clear all modules
140
+
141
+ Memory System:
142
+ memorio.memory.remember(key, value, opts) - Store a memory with type, confidence, scope, TTL, tags
143
+ memorio.memory.recall(key, opts) - Retrieve a memory with filtering
144
+ memorio.memory.update(key, value, opts) - Update an existing memory
145
+ memorio.memory.forget(key) - Delete a specific memory
146
+ memorio.memory.context(opts) - Get ranked relevant memories (semantic context for AI)
147
+ memorio.memory.stats() - Memory usage statistics
148
+ memorio.memory.forgetExpired() - Remove all expired entries
149
+ memorio.memory.clear() - Wipe all memories
150
+
151
+ Scopes:
152
+ hot - In-memory reactive state (volatile, fastest)
153
+ session - sessionStorage (persists across page reloads, cleared on tab close)
154
+ local - localStorage (persistent, survives browser restart)
155
+ durable - IndexedDB (large datasets, async)
156
+
157
+ TTL options:
158
+ ttl: number (milliseconds) or null (never expires)
159
+
160
+ Memory types:
161
+ fact, preference, decision, task, context
162
+
163
+ Shortcuts:
164
+ state, store, session, cache, idb - direct access to modules
165
+ `);};var Cr=globalThis.memorio,yn=globalThis.events,bn=e=>W(e),hn=globalThis.memorio?.help,vn=e=>l.currentContext=e,xn=()=>l.currentContext,Sn=Cr;
166
+
167
+ export { Z as cache, Re as canRedo, De as canUndo, Ie as clearHistory, Ne as clearRedo, W as createContext, Sn as default, be as deleteContext, Ee as devtools, Ce as diff, v as dispatch, _e as enableHistory, yn as events, F as getCapabilities, xn as getContext, hn as help, u as idb, l as internal, le as isBrowser, ue as isDeno, me as isEdge, ce as isNode, bn as isolate, ye as listContexts, Ge as listSchemas, Te as logger, Cr as memorio, ie as memory, T as message, ee as observer, Be as pathExists, ae as propertyName, Me as redo, Fe as registerSchema, je as rollback, M as schema, _ as session, vn as setContext, Oe as snapshot, h as state, He as stateGet, Ve as stateKeys, Je as stateSchema, Le as stateType, w as store, $e as trace, ke as typed, Ae as undo, We as unregisterSchema, te as useObserver, qe as validate };