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