memorio 4.8.0 → 4.9.5

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,8 +1,10 @@
1
1
  import 'path';
2
2
  import 'url';
3
3
 
4
- var x=(e,t)=>()=>(e&&(t=e(e=0)),t);var a=x(()=>{});var y,dr,mt,Se,u,$=x(()=>{a();y={debug:false,tracking:false,trackedPaths:new Set,locked:false,lastAccessedPath:"",stateVersion:0,currentContext:null,mutations:[],undoStack:[],redoStack:[],maxHistory:100,historyEnabled:false},dr={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;},get mutations(){return y.mutations},get undoStack(){return y.undoStack},get redoStack(){return y.redoStack},get maxHistory(){return y.maxHistory},set maxHistory(e){y.maxHistory=e;},get historyEnabled(){return y.historyEnabled},set historyEnabled(e){y.historyEnabled=e;},recordMutation(e){y.historyEnabled&&(y.mutations.push(e),y.mutations.length>y.maxHistory&&y.mutations.shift(),y.undoStack.push(e),y.undoStack.length>y.maxHistory&&y.undoStack.shift(),y.redoStack=[]);},popUndo(){let e=y.undoStack.pop();return e&&y.redoStack.push(e),e},popRedo(){let e=y.redoStack.pop();return e&&y.undoStack.push(e),e},canUndo(){return y.undoStack.length>0},canRedo(){return y.redoStack.length>0},clearHistory(){y.mutations=[],y.undoStack=[],y.redoStack=[];},clearRedo(){y.redoStack=[];}},mt=["list","state","store","idb","sqlite","observer","useObserver","remove","removeAll","_platform","_capabilities","_sessionId"],Se=(e,t)=>String(t!==void 0?t:e).replace("() => ",""),u=dr;});var P,c,w=x(()=>{a();$();P=(...e)=>{u.debug===true&&console.debug(...e);},c=P;});function ce(){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 te(){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 we(){return te()==="browser"}function Ee(){return te()==="node"}function Te(){return te()==="deno"}function Pe(){return te()==="edge"}function _e(){try{if(typeof sessionStorage<"u"){let e="__memorio_test__";return sessionStorage.setItem(e,"1"),sessionStorage.removeItem(e),sessionStorage}}catch{}return null}function ke(){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 re(){let e=globalThis;return typeof e.WebAssembly>"u"||typeof e.WebAssembly.instantiate!="function"?false:typeof e.window<"u"}function pr(){return typeof globalThis.dispatchEvent=="function"}function oe(){let e=te(),t=typeof globalThis.isSecureContext<"u"?globalThis.isSecureContext:e==="browser";return {platform:e,hasSessionStorage:_e()!==null,hasLocalStorage:ke()!==null,hasIndexedDB:Oe(),hasSqlJs:re(),hasDispatchEvent:pr(),hasNavigator:typeof navigator<"u",hasProcess:typeof process<"u",isSecureContext:t,sessionId:ce()}}function xt(){let e=oe(),t=globalThis;e.hasDispatchEvent||(t.dispatchEvent=function(r){return true},typeof CustomEvent>"u"&&(t.CustomEvent=class{type;detail;constructor(o,n={}){this.type=o,this.detail=n;}})),typeof t.addEventListener!="function"&&(t.addEventListener=function(r,o){ee.has(r)||ee.set(r,[]),ee.get(r).push(o);},t.removeEventListener=function(r,o){let n=ee.get(r);if(n){let s=n.indexOf(o);s>-1&&n.splice(s,1);}},t.dispatchEvent=function(r){let o=ee.get(r.type);return o&&o.forEach(n=>{try{n(r);}catch(s){console.error("Event listener error:",s);}}),true});}function ne(e){let t=e||`context_${ce()}`;Ce(t);let r={state:{},store:new Map,session:new Map,cache:new Map};return qe.set(t,r),{id:t,state:r.state,store:{get:o=>{let n=r.store.get(o);return n?JSON.parse(n):null},set:(o,n)=>{r.store.set(o,JSON.stringify(n));},remove:o=>r.store.delete(o),removeAll:()=>r.store.clear(),clearAll:()=>r.store.clear(),size:()=>r.store.size,isPersistent:false},session:{get:o=>{let n=r.session.get(o);return n?JSON.parse(n):null},set:(o,n)=>{r.session.set(o,JSON.stringify(n));},remove:o=>r.session.delete(o),removeAll:()=>r.session.clear(),clearAll:()=>r.session.clear(),size:()=>r.session.size,isPersistent:false},cache:{get:o=>r.cache.get(o),set:(o,n)=>r.cache.set(o,n),remove:o=>r.cache.delete(o),removeAll:()=>r.cache.clear(),clear:()=>r.cache.clear()}}}function Me(){return Array.from(qe.keys())}function $e(e){return qe.delete(e)}function Ce(e){u.currentContext=e;}var ee,qe,J=x(()=>{a();$();ee=new Map;qe=new Map;});function U(){let t=u.currentContext||""||"default";return je.has(t)||je.set(t,new Map),je.get(t)}function B(){let e=u.currentContext||"";return e?`${e}-`:"memorio_store_"}function De(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`),""):B()+e}function yr(e){let t=V?q.getItem(e):U().get(e);return t&&JSON.parse(t)}function gr(e,t){let r=JSON.stringify(t);V?q.setItem(e,r):U().set(e,r);}function br(e){if(V){if(q.getItem(e))return q.removeItem(e),true}else if(U().has(e))return U().delete(e),true;return false}var q,je,V,h,G=x(()=>{a();J();$();w();q=ke(),je=new Map;V=q!==null;h=new Proxy({},{});Object.defineProperty(globalThis,"store",{value:h,enumerable:false,configurable:true});Object.defineProperties(h,{get:{value:e=>{if(!e)return console.warn("[memorio store] store.get() called with empty or null key - returning null"),null;try{return yr(De(e))}catch(t){P(`Error parsing store item '${e}': ${t}`);}return null}},getMultiple:{value:e=>{let t={};for(let r of e)try{let o=h.get(r);o&&(t[r]=o);}catch(o){console.debug(`[memorio store] getMultiple error for key "${r}":`,o);}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=De(e);if(!r)return false;if(typeof t=="function")return console.warn("[memorio store] functions are not storable - write aborted for key: "+e),P("Storing functions is not secure and is blocked for safety."),false;try{gr(r,t);}catch(o){return P(`Error setting store item '${e}': ${o}`),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=De(e);if(!t)return false;try{return br(t)}catch(r){P(`Error removing store item '${e}': ${r}`);}return false}},delete:{value:e=>h.remove(e)},removeAll:{value:()=>{if(V){let e=[];for(let t=0;t<q.length;t++){let r=q.key(t);r?.startsWith(B())&&e.push(r);}e.forEach(t=>q.removeItem(t));}else U().clear();return true}},clearAll:{value:()=>(h.removeAll(),true)},quota:{value:async()=>[0,0]},size:{value:()=>{let e=0;return V?Object.keys(q).forEach(t=>{if(t.startsWith(B())){let r=q.getItem(t);r&&(e+=r.length);}}):U().forEach(t=>{e+=t.length;}),e}},isPersistent:{get:()=>V},list:{value:()=>{let e={};try{if(V)for(let t=0;t<q.length;t++){let r=q.key(t);if(r?.startsWith(B())){let o=r.replace(B(),""),n=q.getItem(r);if(n!==null)try{e[o]=JSON.parse(n);}catch{e[o]=n;}}}else U().forEach((t,r)=>{if(r.startsWith(B())){let o=r.replace(B(),"");try{e[o]=JSON.parse(t);}catch{e[o]=t;}}});}catch(t){P(`Error listing store items: ${t}`);}return e}}});Object.freeze(h);});var Sr={};var St=x(()=>{a();T();w();d.db.create=(e,t=1)=>new Promise((r,o)=>{if(!d.db.support())return o(new Error("IndexedDB not supported"));let n=globalThis.indexedDB.open(e,t);n.onerror=()=>{c(`IndexedDB error: ${n.error?.message}`),o(n.error);},n.onsuccess=()=>{c(`Database ${e} connected successfully`),r(n.result);},n.onupgradeneeded=()=>{c(`Database ${e} upgrade/creation initiated`);};});});var wr={};var wt=x(()=>{a();T();d.db.list=async()=>{if(!("indexedDB"in globalThis)||!indexedDB.databases)return [];try{let e=await indexedDB.databases();return globalThis.idbases=e||[],await d.db.size(),globalThis.idbases}catch(e){return console.error("Error listing databases:",e),[]}};});var Er={};var Et=x(()=>{a();T();d.db.exist=e=>idbases?.some(t=>t.name===e);});var Tr={};var Tt=x(()=>{a();T();d.db.quota=()=>navigator.storage.estimate();});var Pr={};var Pt=x(()=>{a();T();w();d.db.delete=e=>new Promise((t,r)=>{c(`Removing database ${e}...`),(()=>{let n=indexedDB.deleteDatabase(e);n.onsuccess=()=>{c(`${e} database removed successfully`),d.db.list(),t();},n.onerror=()=>{console.error(`Error removing ${e}:`,n.error),r(n.error);},n.onblocked=()=>{console.warn(`Deletion of ${e} is blocked. Please close other tabs.`);};})();});});var _r={};var _t=x(()=>{a();T();w();d.db.size=async()=>{if(!(!idbases||idbases.length===0))for(let e=0;e<idbases.length;e++){let t=idbases[e];try{let r=await d.db.create(t.name,t.version),o=Array.from(r.objectStoreNames),n=0;for(let s of o){let i=await d.table.size(r,s);n+=i;}t.size=n,r.close();}catch(r){c(`Could not calculate size for ${t.name}:${r}`);}}};});var kr={};var kt=x(()=>{a();T();d.db.version=e=>{let t=0;for(let r of idbases){r.name===e&&(t=r.version);break}return t};});var Or={};var Ot=x(()=>{a();T();w();d.db.support=()=>{let e="indexedDB"in globalThis;return e||c("Your environment doesn't support IndexedDB"),e};});var qr={};var qt=x(()=>{a();T();w();d.table.create=(e,t)=>new Promise((r,o)=>{try{let s=(Number(d.db.version(e))||0)+1,i=indexedDB.open(e,s);i.onupgradeneeded=l=>{let g=l.target.result;if(!g.objectStoreNames.contains(t)){let b=g.createObjectStore(t,{keyPath:"id",autoIncrement:!0});b.createIndex("id","id",{unique:!0}),b.createIndex("data","data",{unique:!1}),c(`Table ${t} created in ${e}`);}},i.onsuccess=()=>{i.result.close(),d.db.list(),r();},i.onerror=()=>{console.error(`Error creating table ${t}:`,i.error),o(i.error);};}catch(n){console.error("Critical error in table.create:",n),o(n);}});});var Mr={};var Mt=x(()=>{a();T();w();d.table.size=(e,t)=>new Promise((r,o)=>{if(!e)return o(new Error("Database instance is required"));if(!e.objectStoreNames.contains(t))return r(0);let n=0,s=0,g=e.transaction([t],"readonly").objectStore(t).openCursor();g.onsuccess=async b=>{let v=b.target.result;if(v){try{let O=v.value;n+=JSON.stringify(O).length;}catch(O){c(`Error stringifying IDB value tracking size:${O}`);}s++,s%200===0&&await new Promise(O=>setTimeout(O,0)),v.continue();}else r(n);},g.onerror=()=>{o(g.error);};});});var $r={};var $t=x(()=>{a();T();w();d.data.delete=(e,t,r)=>new Promise((o,n)=>{let s=indexedDB.open(e);s.onsuccess=()=>{let i=s.result;if(!i.objectStoreNames.contains(t))return i.close(),n(new Error(`Table ${t} not found`));let b=i.transaction(t,"readwrite").objectStore(t).delete(r);b.onsuccess=()=>{i.close(),c(`Record ${r} deleted from ${t}`),o();},b.onerror=()=>{i.close(),n(b.error);};},s.onerror=()=>n(s.error);});d.data.delete.all=(e,t)=>new Promise((r,o)=>{let n=indexedDB.open(e);n.onsuccess=s=>{let i=s.target.result;if(!i.objectStoreNames.contains(t))return i.close(),o(new Error(`Table ${t} not found`));let b=i.transaction(t,"readwrite").objectStore(t).clear();b.onsuccess=()=>{i.close(),c(`All data cleared from ${t}`),r();},b.onerror=()=>{i.close(),o(b.error);};},n.onerror=()=>o(n.error);});});var Cr={};var Ct=x(()=>{a();T();w();d.data.set=(e,t,r)=>new Promise((o,n)=>{let s=indexedDB.open(e);s.onsuccess=()=>{let i=s.result;if(!i.objectStoreNames.contains(t))return i.close(),n(new Error(`Table ${t} does not exist in ${e}`));let b=i.transaction(t,"readwrite").objectStore(t).put(r);b.onsuccess=()=>{i.close(),c(`Data saved in ${e}.${t}`),o(b.result);},b.onerror=v=>{i.close(),c(`Database insert error: ${b.error?.message}`),n(b.error);};},s.onerror=()=>{n(s.error);};});});var jr={};var jt=x(()=>{a();T();d.data.get=(e,t,r)=>new Promise((o,n)=>{let s=indexedDB.open(e);s.onsuccess=i=>{let l=i.target.result;if(!l.objectStoreNames.contains(t))return l.close(),n(new Error(`Table ${t} not found in ${e}`));let v=l.transaction(t,"readonly").objectStore(t).get(r);v.onsuccess=()=>{l.close(),o(v.result);},v.onerror=()=>{l.close(),n(v.error);};},s.onerror=()=>{n(s.error);};});});var Dr,d,T=x(()=>{a();J();Dr=Oe(),d={db:{},table:{},data:{}};Dr?(async()=>(Object.defineProperty(d,"db",{value:{},writable:true,configurable:true}),Object.defineProperty(d,"table",{value:{},writable:true,configurable:true}),Object.defineProperty(d,"data",{value:{},writable:true,configurable:true}),Object.defineProperty(globalThis,"idbases",{value:[],writable:true,configurable:true,enumerable:false}),await Promise.all([Promise.resolve().then(()=>(St(),Sr)),Promise.resolve().then(()=>(wt(),wr)),Promise.resolve().then(()=>(Et(),Er)),Promise.resolve().then(()=>(Tt(),Tr)),Promise.resolve().then(()=>(Pt(),Pr)),Promise.resolve().then(()=>(_t(),_r)),Promise.resolve().then(()=>(kt(),kr)),Promise.resolve().then(()=>(Ot(),Or)),Promise.resolve().then(()=>(qt(),qr)),Promise.resolve().then(()=>(Mt(),Mr)),Promise.resolve().then(()=>($t(),$r)),Promise.resolve().then(()=>(Ct(),Cr)),Promise.resolve().then(()=>(jt(),jr))]),Object.preventExtensions(d),Object.seal(d),Object.freeze(d)))():(d._disabled=true,d._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."));});var Nr={};function Ir(){let e=globalThis;return typeof e.document<"u"&&typeof e.document.createElement=="function"}function Lr(e){let t=globalThis;return t.__memorioSqlJsScript===e?Promise.resolve():(Ie||(Ie=new Promise((r,o)=>{if(t.initSqlJs&&typeof t.initSqlJs=="function"){t.__memorioSqlJsScript=e,r();return}if(!Ir()){o(new Error("memorio sqlite: no document available to load sql.js"));return}let n=t.document.createElement("script");n.src=e,n.async=true,n.onload=()=>{t.__memorioSqlJsScript=e,r();},n.onerror=()=>o(new Error(`memorio sqlite: failed to load sql.js from ${e}`)),t.document.head.appendChild(n);})),Ie)}var me,de,Dt,Ar,Rr,Ie,Jr,At=x(()=>{a();_();J();w();me=null,de=null,Dt="https://cdn.jsdelivr.net/npm/sql.js/dist/sql-wasm-browser.js",Ar=Dt.replace(/sql-wasm-browser\.js$/,""),Rr=e=>(globalThis.sqliteWasmBase||Ar)+e,Ie=null;Jr=async()=>{let e=globalThis;return typeof e.initSqlJs=="function"?e.initSqlJs:(await Lr(Dt),e.initSqlJs||e)};m.db.support=()=>re();m.db.getSQL=async()=>{if(de)return de;if(me)return me;let e=globalThis,t=e.sqliteConfig||{},r=(async()=>{if(typeof t.loader=="function")return await t.loader();let o=await Jr(),s=await(typeof o=="function"?o:o&&(o.default||o))({locateFile:t.locateFile||Rr});return e.sqliteVersion=s?.version||"sql.js",c("Memorio SQLite: sql.js engine loaded"),s})();me=r;try{return de=await r,de}catch(o){try{m._disabled=!0;}catch{}try{m._warning='Memorio SQLite: sql.js could not be loaded. Install sql.js (npm i sql.js) and configure a loader via sqlite.config({ loader: () => import("sql.js") }).';}catch{}throw console.warn("Memorio SQLite: failed to load sql.js",o),o}finally{me=null;}};m.db.version=()=>globalThis.sqliteVersion||null;});function Br(){let e=D.sqliteConfig||{};return e.namespace?`ns:${e.namespace}`:"default"}function Le(e){return `memorio:sqlite:db:${Br()}:${e}`}function Vr(e){let t=e instanceof Uint8Array?e:new Uint8Array(e),r="",o=t.byteLength;for(let n=0;n<o;n++)r+=String.fromCharCode(t[n]);return typeof btoa=="function"?btoa(r):typeof Buffer<"u"?Buffer.from(t).toString("base64"):""}function Ur(e){if(typeof Buffer<"u")return new Uint8Array(Buffer.from(e,"base64"));if(typeof atob!="function")throw new Error("memorio sqlite: no base64 decoder available");let t=atob(e),r=t.length,o=new Uint8Array(r);for(let n=0;n<r;n++)o[n]=t.charCodeAt(n);return o}function fe(e){return new Promise(t=>{let r=D.__sqliteDbs&&D.__sqliteDbs[e];if(!r||typeof r.export!="function"){t(false);return}try{let o=r.export();h.set(Le(e),Vr(o)),c(`Memorio SQLite: persisted '${e}' to store`),t(!0);}catch(o){console.warn("Memorio SQLite: persist snapshot failed",o),t(false);}})}function Je(e){let t=h.get(Le(e));if(!t)return null;try{return Ur(t)}catch{return null}}function Hr(e){h.remove(Le(e));}function It(e,t){if(!(!t||typeof t.updateHook!="function")){Rt[e]=true;try{t.updateHook(()=>{K[e]&&clearTimeout(K[e]),K[e]=setTimeout(()=>{K[e]=null,fe(e);},250);});}catch(r){console.warn("Memorio SQLite: could not attach updateHook",r);}}}var D,Rt,K,Lt=x(()=>{a();_();G();w();D=globalThis,Rt={},K={};m.db.persist=async(e="memorio")=>fe(e);m.db.download=async(e="memorio",t=`${e}.sqlite`)=>{let r=globalThis;if(!(r.__sqliteDbs&&r.__sqliteDbs[e]))return console.warn(`Memorio SQLite: cannot download '${e}' \u2014 database not found. Create it with sqlite.db.create('${e}').`),false;let n;try{n=await m.db.export(e);}catch(g){return console.warn("Memorio SQLite: export failed during download",g),false}if(!n)return false;if(typeof r.document>"u"||typeof r.Blob>"u")return console.warn("Memorio SQLite: sqlite.db.download() requires a browser environment."),false;let s=r.URL||r.webkitURL;if(!s||typeof s.createObjectURL!="function")return false;let i=s.createObjectURL(new Blob([n],{type:"application/x-sqlite3"})),l=r.document.createElement("a");return l.style.display="none",l.href=i,l.download=t,r.document.body.appendChild(l),l.click(),setTimeout(()=>{try{s.revokeObjectURL(i);}catch{}l.remove();},1e3),true};m.db.close=async(e="memorio")=>{let t=D.__sqliteDbs&&D.__sqliteDbs[e];if(t&&typeof t.close=="function"){try{await fe(e);}catch{}try{t.close();}catch(r){console.warn("Memorio SQLite: close failed",r);}}if(D.__sqliteDbs&&delete D.__sqliteDbs[e],D.sqlbases){let r=D.sqlbases.findIndex(o=>o&&o.name===e);r>-1&&D.sqlbases.splice(r,1);}delete Rt[e],K[e]&&(clearTimeout(K[e]),K[e]=null),Hr(e);};m.db.loadSnapshot=Je;m.db.saveSnapshot=fe;});var zr={};var Jt=x(()=>{a();_();w();Lt();m.db.create=async(e="memorio",t={})=>{let r=await m.db.getSQL(),o=globalThis,n=!!(t&&t.persistence)||!!(o.sqliteConfig&&o.sqliteConfig.persistence),s;if(n&&!t.data){let v=Je(e);v&&(s=v);}let i=t&&t.data||s,l;i&&typeof i.byteLength=="number"?(l=new r.Database(i),c(`Memorio SQLite: database '${e}' opened (persistence=${n})`)):(l=new r.Database,c(`Memorio SQLite: database '${e}' created (persistence=${n})`));let g={...t,persistence:n};o.__sqliteDbs||(o.__sqliteDbs={}),o.__sqliteDbs[e]=l,o.sqlbases||(o.sqlbases=[]);let b=o.sqlbases.findIndex(v=>v&&v.name===e);return b>-1?o.sqlbases[b]={name:e,db:l,persistence:g.persistence}:o.sqlbases.push({name:e,db:l,persistence:g.persistence}),n&&It(e,l),l};});var Qr={};var Nt=x(()=>{a();_();m.db.get=(e="memorio")=>{let t=globalThis.__sqliteDbs;if(!t||!t[e])throw new Error(`SQLite database '${e}' does not exist. Create it with sqlite.db.create('${e}').`);return t[e]};});var Kr={};var Bt=x(()=>{a();_();w();m.db.delete=e=>{let t=globalThis.__sqliteDbs;if(!t||!t[e])return false;try{t[e].close();}catch{}delete t[e];let r=globalThis;return r.sqlbases&&(r.sqlbases=r.sqlbases.filter(o=>o&&o.name!==e)),c(`Memorio SQLite: database '${e}' deleted`),true};});var Wr={};var Vt=x(()=>{a();_();m.db.list=()=>{let e=globalThis.__sqliteDbs;return e?Object.keys(e):[]};});var Fr={};var Ut=x(()=>{a();_();m.db.size=async e=>{let t=globalThis.__sqliteDbs;if(!t)return 0;let r=n=>n&&(n.byteLength||n.length)||0;if(e){let n=m.db.get(e);return r(n.export())}let o=0;for(let n of Object.keys(t))try{o+=r(t[n].export());}catch{}return o};});var Gr={};var Ht=x(()=>{a();_();m.db.export=async(e="memorio")=>m.db.get(e).export();});var Yr={};var zt=x(()=>{a();_();m.db.import=async(e,t)=>m.db.create(e,{data:t});});var Xr={};var Qt=x(()=>{a();_();w();m.query.run=async(e="memorio",t,r=[])=>{let o=m.db.get(e);return c(`Memorio SQLite: run -> ${t}`),o.run(t,r),o.getRowsModified()};});var Zr={};var Kt=x(()=>{a();_();m.query.select=async(e="memorio",t,r=[])=>{let n=m.db.get(e).prepare(t,r),s=[];try{for(;n.step();)s.push(n.getAsObject());}finally{try{n.free();}catch{}}return s};});var eo={};var Wt=x(()=>{a();_();m.data.set=async(e="memorio",t,r=[])=>m.query.run(e,t,r);});var to={};var Ft=x(()=>{a();_();m.data.get=async(e="memorio",t,r=[])=>{let o=await m.query.select(e,t,r);return o.length?o[0]:null};});var ro,m,_=x(()=>{a();J();ro=re(),m={db:{},query:{},data:{}};m.config=e=>{let t=globalThis;return t.sqliteConfig={...t.sqliteConfig,...e},e&&e.wasmUrl&&(t.sqliteWasmBase=e.wasmUrl.endsWith("/")?e.wasmUrl:e.wasmUrl+"/"),m};Object.defineProperty(m,"ready",{enumerable:false,configurable:false,get:()=>{let e=globalThis;return e.sqliteReady||(e.sqliteReady=typeof m.db.getSQL=="function"?m.db.getSQL().then(()=>{}).catch(()=>{}):Promise.resolve()),e.sqliteReady}});ro?(async()=>(Object.defineProperty(m,"db",{value:{},writable:false,configurable:true,enumerable:true}),Object.defineProperty(m,"query",{value:{},writable:false,configurable:true,enumerable:true}),Object.defineProperty(m,"data",{value:{},writable:false,configurable:true,enumerable:true}),Object.defineProperty(globalThis,"sqlbases",{value:[],writable:true,configurable:true,enumerable:false}),await Promise.all([Promise.resolve().then(()=>(At(),Nr)),Promise.resolve().then(()=>(Jt(),zr)),Promise.resolve().then(()=>(Nt(),Qr)),Promise.resolve().then(()=>(Bt(),Kr)),Promise.resolve().then(()=>(Vt(),Wr)),Promise.resolve().then(()=>(Ut(),Fr)),Promise.resolve().then(()=>(Ht(),Gr)),Promise.resolve().then(()=>(zt(),Yr)),Promise.resolve().then(()=>(Qt(),Xr)),Promise.resolve().then(()=>(Kt(),Zr)),Promise.resolve().then(()=>(Wt(),eo)),Promise.resolve().then(()=>(Ft(),to))])))():(globalThis.sqliteDisabled=true,globalThis.sqliteWarning='SQLite (sql.js) is not available in this environment. It requires a browser with WebAssembly support. Install the optional "sql.js" package to enable it.',m._disabled=true,m._warning=globalThis.sqliteWarning,console.warn("Memorio SQLite: sql.js is not available in this environment (requires browser + WebAssembly). Use store or session for persistence."));});a();a();$();w();a();var E={set:(e,t={})=>{globalThis.dispatchEvent(new CustomEvent(String(e),t));},listen:(e,t=null,r)=>{if(globalThis.events?.[e])return;let o=t?n=>{let s=n;return globalThis.queueMicrotask?globalThis.queueMicrotask(()=>t(s)):Promise.resolve().then(()=>t(s))}:void 0;o&&globalThis.addEventListener(e,o),o&&(globalThis.events[e]=o);},remove:e=>{let t=globalThis.events?.[e];t&&(globalThis.removeEventListener(e,t),delete globalThis.events[e]);}};a();w();var F=new Map,dt=(e,t,r)=>{let o=[];if(t.type&&t.type!=="any"){let n=Array.isArray(e)?"array":typeof e;if(n!==t.type)return o.push(`${r}: expected ${t.type}, got ${n}`),{valid:false,errors:o}}if(t.enum&&!t.enum.includes(e)&&o.push(`${r}: value must be one of [${t.enum.map(String).join(", ")}]`),t.validator){let n=t.validator(e);n!==true&&o.push(`${r}: ${typeof n=="string"?n:"validation failed"}`);}if(typeof e=="number"&&(t.min!==void 0&&e<t.min&&o.push(`${r}: value ${e} is less than minimum ${t.min}`),t.max!==void 0&&e>t.max&&o.push(`${r}: value ${e} exceeds maximum ${t.max}`)),typeof e=="string"&&(t.min!==void 0&&e.length<t.min&&o.push(`${r}: string length ${e.length} is less than minimum ${t.min}`),t.max!==void 0&&e.length>t.max&&o.push(`${r}: string length ${e.length} exceeds maximum ${t.max}`),t.pattern&&!t.pattern.test(e)&&o.push(`${r}: string does not match required pattern`)),t.type==="object"&&e&&typeof e=="object"&&!Array.isArray(e)){if(t.required)for(let n of t.required)n in e||o.push(`${r}: missing required property '${n}'`);if(t.properties){for(let[n,s]of Object.entries(t.properties))if(n in e&&e[n]!==void 0){let i=dt(e[n],s,`${r}.${n}`);i.valid||o.push(...i.errors||[]);}}}return o.length===0?{valid:true}:{valid:false,errors:o}},ft=(e,t)=>{let r=F.get(e);return r?dt(t,r,e):{valid:true}},pt=(e,t)=>{typeof t=="function"?F.set(e,{validator:t}):F.set(e,t),c(`[memorio schema] Registered schema for '${e}'`);},yt=e=>F.delete(e),gt=()=>Array.from(F.keys()),fr=e=>F.get(e),L={register:pt,validate:ft,unregister:yt,list:gt,get:fr};var le=Symbol("memorio.target"),bt=new WeakMap,R=(e,t=null)=>{if(e===null||typeof e!="object")return e;if(e[le]!==void 0)return R(e[le],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 o=Array.isArray(e)?[]:{};for(let n of Reflect.ownKeys(e))o[n]=R(e[n],t);return o},ht=(e,t,r=".")=>t.concat(e).join(r),vt=(e,t,r=[])=>{let o=n=>{try{E.set(n,{detail:{name:n}});}catch{}};return new Proxy(e,{get(n,s){if(s==="__path")return r.length>0?"state."+r.join("."):"state";if(s===le||n[le]!==void 0)return n;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(n));if(typeof s=="string"){let i=r.length>0?"state."+r.concat(s).join("."):"state."+s;u.lastAccessedPath=i,u.tracking&&u.trackedPaths.add(i);}if(s==="_lastPath")return u.lastAccessedPath;if(s==="remove")return i=>(delete n[i],true);if(s==="removeAll")return ()=>{try{for(let i in n)typeof n[i]!="function"&&!["list","remove","removeAll","lock","unlock"].includes(i)&&delete n[i];}catch(i){console.error(i);}};if(Object.isFrozen(n[s]))return n[s];if(s==="lock"||s==="unlock"){let i=Reflect.get(n,s);if(i)return i}try{let i=Reflect.get(n,s);if(i&&typeof i=="object"&&["Array","Object"].includes(i.constructor.name)){let l=bt.get(i);return l||(l=vt(i,t,r.concat(s)),bt.set(i,l)),l}return i}catch(i){console.error("Error: ",i);return}},set(n,s,i){if(u.locked)return console.error("Error: state is locked. Use state.unlock() to enable modifications."),false;if(mt.includes(s))return console.error("key "+s+" is protected"),false;if(n[s]&&typeof n[s]=="object"&&Object.isFrozen(n[s]))return console.error(`Error: state '${s}' is locked`),false;if(n[s]&&typeof n[s]=="object"&&n[s].__locked)return console.error(`Error: state '${s}' is locked. Use state.${s}.unlock() to enable modifications.`),false;try{let l=ht(s,r),g=R(i),b=L.validate(l,g);if(!b.valid)return u.debug&&console.error(`[memorio schema] Validation failed for '${l}':`,b.errors),c(`[memorio schema] Validation failed for '${l}': `+(b.errors?.join(", ")||"unknown error")),!1;if(t({action:"set",path:l,target:n,newValue:g,previousValue:Reflect.get(n,s)}),o("state."+l),Reflect.set(n,s,g),u.bumpStateVersion(),n[s]&&typeof n[s]=="object"){let v=n[s];if(v&&typeof v=="object")try{Object.defineProperty(v,"__locked",{writable:!0,enumerable:!1,configurable:!1,value:!1}),Object.defineProperty(v,"lock",{writable:!1,enumerable:!1,configurable:!1,value:()=>{Object.defineProperty(v,"__locked",{writable:!0,enumerable:!1,configurable:!1,value:!0}),c(`State '${s}' is now locked.`);}}),Object.defineProperty(v,"unlock",{writable:!1,enumerable:!1,configurable:!1,value:()=>{Object.defineProperty(v,"__locked",{writable:!0,enumerable:!1,configurable:!1,value:!1}),c(`State '${s}' is now unlocked.`);}});}catch{}}return !0}catch(l){return console.error("Error in set trap:",l),false}},deleteProperty(n,s){try{let i=ht(s,r),l=Reflect.get(n,s);return t({action:"delete",path:i,target:n,previousValue:l}),Reflect.deleteProperty(n,s)}catch(i){return console.error("Error in deleteProperty trap:",i),false}},ownKeys(n){return Reflect.ownKeys(n)},getOwnPropertyDescriptor(n,s){return Reflect.getOwnPropertyDescriptor(n,s)}})},S=vt({},e=>{u.historyEnabled&&u.recordMutation({path:e.path,action:e.action,newValue:e.newValue,previousValue:e.previousValue,timestamp:Date.now()});});S.lock=()=>{u.locked=true,c("State is now locked. All modifications are blocked.");};S.unlock=()=>{u.locked=false,c("State is now unlocked. Modifications are allowed.");};G();a();J();$();w();var M=_e(),Ae=new Map;function Q(){let t=u.currentContext||""||"default";return Ae.has(t)||Ae.set(t,new Map),Ae.get(t)}var z=M!==null;function H(){let e=u.currentContext||"";return e?`${e}-`:"memorio_session_"}function Re(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`),""):H()+e}function hr(e){let t=z?M.getItem(e):Q().get(e);return t&&JSON.parse(t)}function vr(e,t){let r=JSON.stringify(t);z?M.setItem(e,r):Q().set(e,r);}function xr(e){if(z){if(M.getItem(e))return M.removeItem(e),true}else if(Q().has(e))return Q().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 hr(Re(e))}catch(t){P(`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=Re(e);if(!r)return false;if(typeof t=="function")return console.warn("[memorio session] functions are not storable - write aborted for key: "+e),P("It's not secure to session functions."),false;try{vr(r,t);}catch(o){return P(`Error setting session item '${e}': ${o}`),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=Re(e);if(!t)return false;try{return xr(t)}catch(r){P(`Error removing session item '${e}': ${r}`);}return false}},delete:{value:e=>C.remove(e)},removeAll:{value:()=>{if(z){let e=[];for(let t=0;t<M.length;t++){let r=M.key(t);r?.startsWith(H())&&e.push(r);}e.forEach(t=>M.removeItem(t));}else Q().clear();return true}},clearAll:{value:()=>(C.removeAll(),true)},quota:{value:async()=>[0,0]},size:{value:()=>{let e=0;return z?Object.keys(M).forEach(t=>{if(t.startsWith(H())){let r=M.getItem(t);r&&(e+=r.length);}}):Q().forEach(t=>{e+=t.length;}),e}},isPersistent:{get:()=>z},list:{value:()=>{let e={};try{if(z)for(let t=0;t<M.length;t++){let r=M.key(t);if(r?.startsWith(H())){let o=r.replace(H(),""),n=M.getItem(r);if(n!==null)try{e[o]=JSON.parse(n);}catch{e[o]=n;}}}else Q().forEach((t,r)=>{if(r.startsWith(H())){let o=r.replace(H(),"");try{e[o]=JSON.parse(t);}catch{e[o]=t;}}});}catch(t){P(`Error listing session items: ${t}`);}return e}}});Object.freeze(C);a();var j={},ue=new Proxy({},{get(e,t){let r=t;return r==="get"?o=>j[o]:r==="set"?(o,n)=>{j[o]=n;}:r==="remove"?o=>(delete j[o],true):r==="removeAll"?()=>(Object.keys(j).forEach(o=>delete j[o]),true):r==="clear"?()=>(Object.keys(j).forEach(o=>delete j[o]),true):r==="list"?()=>({...j}):j[r]},set(e,t,r){return j[t]=r,true},deleteProperty(e,t){return delete j[t],true}});Object.freeze(ue);T();_();a();w();var oo=(e,t=null,r=true)=>{let o=s=>typeof s=="string"?s:s&&typeof s=="object"&&s.__path?s.__path:null,n=o(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(n){let s=n.split(".");if(s[0]!=="state"&&s[0]!=="store"){console.error(`Observer Error: You need to declare 'state.' or 'store.'. The '${n}' string is incorrect!`);return}}if(e&&!t){let s=o(e);if(!s)return;globalThis.observer?.list?.[s]&&E.remove(s),c(`called: ${s}`);return}if(e&&t){let s=o(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]&&E.remove(s),i.forEach(g=>{typeof g=="function"&&E.listen(s,g,r);});return}},pe=oo;Object.defineProperties(pe,{list:{get:()=>globalThis.events},remove:{value:e=>{e&&(E.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();w();$();globalThis.useObserver||(globalThis.useObserver=null);Object.defineProperty(globalThis,"useObserver",{value:null,writable:true,enumerable:false,configurable:true});var ye=((e,t=[])=>{if(!t||typeof e!="function")return ()=>{};let r=[],o=Array.isArray(t)&&!t.__path?t:[t];try{return o.forEach(n=>{let s="";if(typeof n=="function"){let i=Se(n);i&&(s=i);}else typeof n=="object"&&n!==null&&(s=n.__path||(typeof n.toString=="function"&&n.toString()!=="[object Object]"?n.toString():""));if(s){s=s.replace(/^(\(\)\s*=>\s*)/,"").replace(/^globalThis\./,"").replace(/^state\./,"");let i=s.startsWith("store.")||s.startsWith("state.")?s:"state."+s;E.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}"`),E.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(n=>{typeof E.remove=="function"&&(E.remove(n),c(`useObserver: Stopped monitoring "${n}"`));});}}catch(n){return c(`useObserver Error: ${n}`),()=>{}}});globalThis.useObserver=ye;Object.freeze(globalThis.useObserver);w();a();$();function no(){return u.debug===true}function Gt(){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 o=t.get(r);o!=null&&(e[r]=o);}catch{}}return e}function Yt(){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 o=t.get(r);o!=null&&(e[r]=o);}catch{}}return e}var so=()=>{if(no()){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(Gt()),globalThis.session&&console.table(Yt()),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);}}},io=()=>{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,sqliteDbCount:typeof globalThis.sqlite?.db?.list=="function"?globalThis.sqlite.db.list().length:(globalThis.sqlbases||[]).length,lastUpdate:new Date().toISOString()}},se=e=>{globalThis[e]&&typeof globalThis[e].clear=="function"?globalThis[e].clear():console.error(`Module ${e} not found or does not support clear()`);},ao=()=>{se("state"),se("store"),se("session"),se("cache");},lo=()=>{let e=()=>{if(globalThis.state)try{return typeof globalThis.state.list=="function"?globalThis.state.list():globalThis.state}catch{return}},t=()=>Gt(),r=()=>Yt(),o=()=>{if(globalThis.cache)try{return typeof globalThis.cache.list=="function"?globalThis.cache.list():globalThis.cache}catch{return}},n={state:e(),store:t(),session:r(),cache:o(),exportedAt:new Date().toISOString()};return JSON.stringify(n,null,2)},co=e=>{try{let t=JSON.parse(e);t.state&&Object.entries(t.state).forEach(([r,o])=>{globalThis.state&&r!=="list"&&r!=="remove"&&r!=="removeAll"&&(globalThis.state[r]=o);}),t.store&&globalThis.store&&typeof globalThis.store.set=="function"&&Object.entries(t.store).forEach(([r,o])=>{globalThis.store.set(r,o);}),t.session&&globalThis.session&&typeof globalThis.session.set=="function"&&Object.entries(t.session).forEach(([r,o])=>{globalThis.session.set(r,o);}),t.cache&&globalThis.cache&&Object.entries(t.cache).forEach(([r,o])=>{globalThis.cache&&r!=="get"&&r!=="set"&&r!=="remove"&&r!=="clear"&&(globalThis.cache[r]=o);});}catch(t){console.error("%c\u2717 Import failed:","color: #F44336",t);}},uo=(e,t)=>{if(!globalThis[e]){console.error(`Module ${e} not found`);return}let r=globalThis[e],o=r[t];if(console.debug(`\u{1F441} Watching ${e}.${t} (initial: ${JSON.stringify(o)})`),e==="state"&&globalThis.memorio?.dispatch){let n=s=>{s.detail?.name?.includes(t)&&console.debug(`\u{1F441} Change: ${e}.${t} =`,s.detail.value);};r.addEventListener?.("memorio-change",n);}},mo=()=>{console.debug(`
5
- \u{1F9E0} Memorio DevTools Help
4
+ var x=(e,t)=>()=>(e&&(t=e(e=0)),t);var a=x(()=>{});var P,qe,N=x(()=>{a();P=!(typeof process<"u"),qe=!P;});var je,g,Hr,Dt,Re,d,R=x(()=>{a();je="__memorio_internal_state",g=globalThis[je]||{debug:false,tracking:false,trackedPaths:new Set,locked:false,lastAccessedPath:"",stateVersion:0,currentContext:null,mutations:[],undoStack:[],redoStack:[],maxHistory:100,historyEnabled:false};globalThis[je]||(globalThis[je]=g);Hr={get debug(){return g.debug},set debug(e){g.debug=e;},get tracking(){return g.tracking},set tracking(e){g.tracking=e;},get trackedPaths(){return g.trackedPaths},clearTrackedPaths(){g.trackedPaths.clear();},get locked(){return g.locked},set locked(e){g.locked=e;},get lastAccessedPath(){return g.lastAccessedPath},set lastAccessedPath(e){g.lastAccessedPath=e;},get stateVersion(){return g.stateVersion},bumpStateVersion(){return g.stateVersion=(g.stateVersion||0)+1,g.stateVersion},get currentContext(){return g.currentContext},set currentContext(e){g.currentContext=e;},get mutations(){return g.mutations},get undoStack(){return g.undoStack},get redoStack(){return g.redoStack},get maxHistory(){return g.maxHistory},set maxHistory(e){g.maxHistory=e;},get historyEnabled(){return g.historyEnabled},set historyEnabled(e){g.historyEnabled=e;},recordMutation(e){g.historyEnabled&&(g.mutations.push(e),g.mutations.length>g.maxHistory&&g.mutations.shift(),g.undoStack.push(e),g.undoStack.length>g.maxHistory&&g.undoStack.shift(),g.redoStack=[]);},popUndo(){let e=g.undoStack.pop();return e&&g.redoStack.push(e),e},popRedo(){let e=g.redoStack.pop();return e&&g.undoStack.push(e),e},canUndo(){return g.undoStack.length>0},canRedo(){return g.redoStack.length>0},clearHistory(){g.mutations=[],g.undoStack=[],g.redoStack=[];},clearRedo(){g.redoStack=[];}},Dt=["list","state","store","idb","sqlite","observer","useObserver","remove","removeAll","_platform","_capabilities","_sessionId"],Re=(e,t)=>String(t!==void 0?t:e).replace("() => ",""),d=Hr;});var D,c,w=x(()=>{a();R();N();D=(...e)=>{P&&d.debug===true&&console.debug(...e);},c=D;});function xe(){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 de(){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 Ne(){return de()==="browser"}function Ve(){return de()==="node"}function He(){return de()==="deno"}function Je(){return de()==="edge"}function Be(){try{if(typeof sessionStorage<"u"){let e="__memorio_test__";return sessionStorage.setItem(e,"1"),sessionStorage.removeItem(e),sessionStorage}}catch{}return null}function Ue(){try{if(typeof localStorage<"u"){let e="__memorio_test__";return localStorage.setItem(e,"1"),localStorage.removeItem(e),localStorage}}catch{}return null}function ze(){return typeof indexedDB<"u"}function fe(){let e=globalThis;return typeof e.WebAssembly>"u"||typeof e.WebAssembly.instantiate!="function"?false:typeof e.window<"u"}function Br(){return typeof globalThis.dispatchEvent=="function"}function me(){let e=de(),t=typeof globalThis.isSecureContext<"u"?globalThis.isSecureContext:e==="browser";return {platform:e,hasSessionStorage:Be()!==null,hasLocalStorage:Ue()!==null,hasIndexedDB:ze(),hasSqlJs:fe(),hasDispatchEvent:Br(),hasNavigator:typeof navigator<"u",hasProcess:typeof process<"u",isSecureContext:t,sessionId:xe()}}function Lt(){let e=me(),t=globalThis;e.hasDispatchEvent||(t.dispatchEvent=function(r){return true},typeof CustomEvent>"u"&&(t.CustomEvent=class{type;detail;constructor(o,n={}){this.type=o,this.detail=n;}})),typeof t.addEventListener!="function"&&(t.addEventListener=function(r,o){ue.has(r)||ue.set(r,[]),ue.get(r).push(o);},t.removeEventListener=function(r,o){let n=ue.get(r);if(n){let s=n.indexOf(o);s>-1&&n.splice(s,1);}},t.dispatchEvent=function(r){let o=ue.get(r.type);return o&&o.forEach(n=>{try{n(r);}catch(s){console.error("Event listener error:",s);}}),true});}function pe(e){let t=e||`context_${xe()}`;Qe(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:o=>{let n=r.store.get(o);return n?JSON.parse(n):null},set:(o,n)=>{r.store.set(o,JSON.stringify(n));},remove:o=>r.store.delete(o),removeAll:()=>r.store.clear(),clearAll:()=>r.store.clear(),size:()=>r.store.size,isPersistent:false},session:{get:o=>{let n=r.session.get(o);return n?JSON.parse(n):null},set:(o,n)=>{r.session.set(o,JSON.stringify(n));},remove:o=>r.session.delete(o),removeAll:()=>r.session.clear(),clearAll:()=>r.session.clear(),size:()=>r.session.size,isPersistent:false},cache:{get:o=>r.cache.get(o),set:(o,n)=>r.cache.set(o,n),remove:o=>r.cache.delete(o),removeAll:()=>r.cache.clear(),clear:()=>r.cache.clear()}}}function Ke(){return Array.from(Se.keys())}function Fe(e){return Se.delete(e)}function Qe(e){d.currentContext=e;}var ue,Le,Se,F=x(()=>{a();R();ue=new Map;Le="__memorio_contexts__",Se=globalThis[Le]||new Map;globalThis[Le]||(globalThis[Le]=Se);});function Z(){let t=d.currentContext||""||"default";return We.has(t)||We.set(t,new Map),We.get(t)}function G(){let e=d.currentContext||"";return e?`${e}-`:"memorio_store_"}function Ye(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`),""):G()+e}function Ur(e){let t=X?M.getItem(e):Z().get(e);return t&&JSON.parse(t)}function zr(e,t){let r=JSON.stringify(t);X?M.setItem(e,r):Z().set(e,r);}function Kr(e){if(X){if(M.getItem(e))return M.removeItem(e),true}else if(Z().has(e))return Z().delete(e),true;return false}var M,We,X,Ge,v,se=x(()=>{a();F();R();w();M=Ue(),We=new Map;X=M!==null;Ge="__memorio_store_instance__";globalThis[Ge]?v=globalThis[Ge]:(v=new Proxy({},{}),Object.defineProperties(v,{get:{value:e=>{if(!e)return console.warn("[memorio store] store.get() called with empty or null key - returning null"),null;try{return Ur(Ye(e))}catch(t){D(`Error parsing store item '${e}': ${t}`);}return null}},getMultiple:{value:e=>{let t={};for(let r of e)try{let o=v.get(r);o&&(t[r]=o);}catch(o){console.debug(`[memorio store] getMultiple error for key "${r}":`,o);}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=Ye(e);if(!r)return false;if(typeof t=="function")return console.warn("[memorio store] functions are not storable - write aborted for key: "+e),D("Storing functions is not secure and is blocked for safety."),false;try{zr(r,t);}catch(o){return D(`Error setting store item '${e}': ${o}`),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=Ye(e);if(!t)return false;try{return Kr(t)}catch(r){D(`Error removing store item '${e}': ${r}`);}return false}},delete:{value:e=>v.remove(e)},removeAll:{value:()=>{if(X){let e=[];for(let t=0;t<M.length;t++){let r=M.key(t);r?.startsWith(G())&&e.push(r);}e.forEach(t=>M.removeItem(t));}else Z().clear();return true}},clearAll:{value:()=>(v.removeAll(),true)},quota:{value:async()=>[0,0]},size:{value:()=>{let e=0;return X?Object.keys(M).forEach(t=>{if(t.startsWith(G())){let r=M.getItem(t);r&&(e+=r.length);}}):Z().forEach(t=>{e+=t.length;}),e}},isPersistent:{get:()=>X},list:{value:()=>{let e={};try{if(X)for(let t=0;t<M.length;t++){let r=M.key(t);if(r?.startsWith(G())){let o=r.replace(G(),""),n=M.getItem(r);if(n!==null)try{e[o]=JSON.parse(n);}catch{e[o]=n;}}}else Z().forEach((t,r)=>{if(r.startsWith(G())){let o=r.replace(G(),"");try{e[o]=JSON.parse(t);}catch{e[o]=t;}}});}catch(t){D(`Error listing store items: ${t}`);}return e}}}),Object.freeze(v),globalThis[Ge]=v);});var Yr={};var Nt=x(()=>{a();C();w();y.db.create=(e,t=1)=>new Promise((r,o)=>{if(!y.db.support())return o(new Error("IndexedDB not supported"));let n=globalThis.indexedDB.open(e,t);n.onerror=()=>{c(`IndexedDB error: ${n.error?.message}`),o(n.error);},n.onsuccess=()=>{c(`Database ${e} connected successfully`),r(n.result);},n.onupgradeneeded=()=>{c(`Database ${e} upgrade/creation initiated`);};});});var Gr={};var Vt=x(()=>{a();C();y.db.list=async()=>{if(!("indexedDB"in globalThis)||!indexedDB.databases)return [];try{let e=await indexedDB.databases();return globalThis.idbases=e||[],await y.db.size(),globalThis.idbases}catch(e){return console.error("Error listing databases:",e),[]}};});var Xr={};var Ht=x(()=>{a();C();y.db.exist=e=>idbases?.some(t=>t.name===e);});var Zr={};var Jt=x(()=>{a();C();y.db.quota=()=>navigator.storage.estimate();});var eo={};var Bt=x(()=>{a();C();w();y.db.delete=e=>new Promise((t,r)=>{c(`Removing database ${e}...`),(()=>{let n=indexedDB.deleteDatabase(e);n.onsuccess=()=>{c(`${e} database removed successfully`),y.db.list(),t();},n.onerror=()=>{console.error(`Error removing ${e}:`,n.error),r(n.error);},n.onblocked=()=>{console.warn(`Deletion of ${e} is blocked. Please close other tabs.`);};})();});});var to={};var Ut=x(()=>{a();C();w();y.db.size=async()=>{if(!(!idbases||idbases.length===0))for(let e=0;e<idbases.length;e++){let t=idbases[e];try{let r=await y.db.create(t.name,t.version),o=Array.from(r.objectStoreNames),n=0;for(let s of o){let i=await y.table.size(r,s);n+=i;}t.size=n,r.close();}catch(r){c(`Could not calculate size for ${t.name}:${r}`);}}};});var ro={};var zt=x(()=>{a();C();y.db.version=e=>{let t=0;for(let r of idbases){r.name===e&&(t=r.version);break}return t};});var oo={};var Kt=x(()=>{a();C();w();y.db.support=()=>{let e="indexedDB"in globalThis;return e||c("Your environment doesn't support IndexedDB"),e};});var no={};var Ft=x(()=>{a();C();w();y.table.create=(e,t)=>new Promise((r,o)=>{try{let s=(Number(y.db.version(e))||0)+1,i=indexedDB.open(e,s);i.onupgradeneeded=l=>{let f=l.target.result;if(!f.objectStoreNames.contains(t)){let b=f.createObjectStore(t,{keyPath:"id",autoIncrement:!0});b.createIndex("id","id",{unique:!0}),b.createIndex("data","data",{unique:!1}),c(`Table ${t} created in ${e}`);}},i.onsuccess=()=>{i.result.close(),y.db.list(),r();},i.onerror=()=>{console.error(`Error creating table ${t}:`,i.error),o(i.error);};}catch(n){console.error("Critical error in table.create:",n),o(n);}});});var so={};var Qt=x(()=>{a();C();w();y.table.size=(e,t)=>new Promise((r,o)=>{if(!e)return o(new Error("Database instance is required"));if(!e.objectStoreNames.contains(t))return r(0);let n=0,s=0,f=e.transaction([t],"readonly").objectStore(t).openCursor();f.onsuccess=async b=>{let h=b.target.result;if(h){try{let T=h.value;n+=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)),h.continue();}else r(n);},f.onerror=()=>{o(f.error);};});});var io={};var Wt=x(()=>{a();C();w();y.data.delete=(e,t,r)=>new Promise((o,n)=>{let s=indexedDB.open(e);s.onsuccess=()=>{let i=s.result;if(!i.objectStoreNames.contains(t))return i.close(),n(new Error(`Table ${t} not found`));let b=i.transaction(t,"readwrite").objectStore(t).delete(r);b.onsuccess=()=>{i.close(),c(`Record ${r} deleted from ${t}`),o();},b.onerror=()=>{i.close(),n(b.error);};},s.onerror=()=>n(s.error);});y.data.delete.all=(e,t)=>new Promise((r,o)=>{let n=indexedDB.open(e);n.onsuccess=s=>{let i=s.target.result;if(!i.objectStoreNames.contains(t))return i.close(),o(new Error(`Table ${t} not found`));let b=i.transaction(t,"readwrite").objectStore(t).clear();b.onsuccess=()=>{i.close(),c(`All data cleared from ${t}`),r();},b.onerror=()=>{i.close(),o(b.error);};},n.onerror=()=>o(n.error);});});var ao={};var Yt=x(()=>{a();C();w();y.data.set=(e,t,r)=>new Promise((o,n)=>{let s=indexedDB.open(e);s.onsuccess=()=>{let i=s.result;if(!i.objectStoreNames.contains(t))return i.close(),n(new Error(`Table ${t} does not exist in ${e}`));let b=i.transaction(t,"readwrite").objectStore(t).put(r);b.onsuccess=()=>{i.close(),c(`Data saved in ${e}.${t}`),o(b.result);},b.onerror=h=>{i.close(),c(`Database insert error: ${b.error?.message}`),n(b.error);};},s.onerror=()=>{n(s.error);};});});var lo={};var Gt=x(()=>{a();C();y.data.get=(e,t,r)=>new Promise((o,n)=>{let s=indexedDB.open(e);s.onsuccess=i=>{let l=i.target.result;if(!l.objectStoreNames.contains(t))return l.close(),n(new Error(`Table ${t} not found in ${e}`));let h=l.transaction(t,"readonly").objectStore(t).get(r);h.onsuccess=()=>{l.close(),o(h.result);},h.onerror=()=>{l.close(),n(h.error);};},s.onerror=()=>{n(s.error);};});});var co,y,C=x(()=>{a();F();N();co=ze(),y={db:{},table:{},data:{}};co?(async()=>(Object.defineProperty(y,"db",{value:{},writable:true,configurable:true}),Object.defineProperty(y,"table",{value:{},writable:true,configurable:true}),Object.defineProperty(y,"data",{value:{},writable:true,configurable:true}),Object.defineProperty(globalThis,"idbases",{value:[],writable:true,configurable:true,enumerable:false}),await Promise.all([Promise.resolve().then(()=>(Nt(),Yr)),Promise.resolve().then(()=>(Vt(),Gr)),Promise.resolve().then(()=>(Ht(),Xr)),Promise.resolve().then(()=>(Jt(),Zr)),Promise.resolve().then(()=>(Bt(),eo)),Promise.resolve().then(()=>(Ut(),to)),Promise.resolve().then(()=>(zt(),ro)),Promise.resolve().then(()=>(Kt(),oo)),Promise.resolve().then(()=>(Ft(),no)),Promise.resolve().then(()=>(Qt(),so)),Promise.resolve().then(()=>(Wt(),io)),Promise.resolve().then(()=>(Yt(),ao)),Promise.resolve().then(()=>(Gt(),lo))]),Object.preventExtensions(y),Object.seal(y),Object.freeze(y)))():(y._disabled=true,y._warning="IndexedDB is not available in this environment (Node.js/Deno). Use store or session for persistence.",P&&console.warn("Memorio IDB: IndexedDB is not available in this environment. Use store or session for data persistence."));});var go={};function mo(){let e=globalThis;return typeof e.document<"u"&&typeof e.document.createElement=="function"}function po(e){let t=globalThis;return t.__memorioSqlJsScript===e?Promise.resolve():(tt||(tt=new Promise((r,o)=>{if(t.initSqlJs&&typeof t.initSqlJs=="function"){t.__memorioSqlJsScript=e,r();return}if(!mo()){o(new Error("memorio sqlite: no document available to load sql.js"));return}let n=t.document.createElement("script");n.src=e,n.async=true,n.onload=()=>{t.__memorioSqlJsScript=e,r();},n.onerror=()=>o(new Error(`memorio sqlite: failed to load sql.js from ${e}`)),t.document.head.appendChild(n);})),tt)}var _e,Ee,Xt,uo,fo,tt,yo,Zt=x(()=>{a();$();F();w();_e=null,Ee=null,Xt="https://cdn.jsdelivr.net/npm/sql.js/dist/sql-wasm-browser.js",uo=Xt.replace(/sql-wasm-browser\.js$/,""),fo=e=>(globalThis.sqliteWasmBase||uo)+e,tt=null;yo=async()=>{let e=globalThis;return typeof e.initSqlJs=="function"?e.initSqlJs:(await po(Xt),e.initSqlJs||e)};u.db.support=()=>fe();u.db.getSQL=async()=>{if(Ee)return Ee;if(_e)return _e;let e=globalThis,t=e.sqliteConfig||{},r=(async()=>{if(typeof t.loader=="function")return await t.loader();let o=await yo(),s=await(typeof o=="function"?o:o&&(o.default||o))({locateFile:t.locateFile||fo});return e.sqliteVersion=s?.version||"sql.js",c("Memorio SQLite: sql.js engine loaded"),s})();_e=r;try{return Ee=await r,Ee}catch(o){try{u._disabled=!0;}catch{}try{u._warning="Memorio SQLite: sql.js could not be loaded. Install sql.js (npm i sql.js) and pass a loader via sqlite.config({ loader: () => <your sql.js import>() }).";}catch{}throw console.warn("Memorio SQLite: failed to load sql.js",o),o}finally{_e=null;}};u.db.version=()=>globalThis.sqliteVersion||null;});function bo(){let e=V.sqliteConfig||{};return e.namespace?`ns:${e.namespace}`:"default"}function rt(e){return `memorio:sqlite:db:${bo()}:${e}`}function ho(e){let t=e instanceof Uint8Array?e:new Uint8Array(e),r="",o=t.byteLength;for(let n=0;n<o;n++)r+=String.fromCharCode(t[n]);return typeof btoa=="function"?btoa(r):typeof Buffer<"u"?Buffer.from(t).toString("base64"):""}function vo(e){if(typeof Buffer<"u")return new Uint8Array(Buffer.from(e,"base64"));if(typeof atob!="function")throw new Error("memorio sqlite: no base64 decoder available");let t=atob(e),r=t.length,o=new Uint8Array(r);for(let n=0;n<r;n++)o[n]=t.charCodeAt(n);return o}function ke(e){return new Promise(t=>{let r=V.__sqliteDbs&&V.__sqliteDbs[e];if(!r||typeof r.export!="function"){t(false);return}try{let o=r.export();v.set(rt(e),ho(o)),c(`Memorio SQLite: persisted '${e}' to store`),t(!0);}catch(o){console.warn("Memorio SQLite: persist snapshot failed",o),t(false);}})}function ot(e){let t=v.get(rt(e));if(!t)return null;try{return vo(t)}catch{return null}}function xo(e){v.remove(rt(e));}function tr(e,t){if(!(!t||typeof t.updateHook!="function")){er[e]=true;try{t.updateHook(()=>{oe[e]&&clearTimeout(oe[e]),oe[e]=setTimeout(()=>{oe[e]=null,ke(e);},250);});}catch(r){console.warn("Memorio SQLite: could not attach updateHook",r);}}}var V,er,oe,rr=x(()=>{a();$();se();w();V=globalThis,er={},oe={};u.db.persist=async(e="memorio")=>ke(e);u.db.download=async(e="memorio",t=`${e}.sqlite`)=>{let r=globalThis;if(!(r.__sqliteDbs&&r.__sqliteDbs[e]))return console.warn(`Memorio SQLite: cannot download '${e}' - database not found. Create it with sqlite.db.create('${e}').`),false;let n;try{n=await u.db.export(e);}catch(f){return console.warn("Memorio SQLite: export failed during download",f),false}if(!n)return false;if(typeof r.document>"u"||typeof r.Blob>"u")return console.warn("Memorio SQLite: sqlite.db.download() requires a browser environment."),false;let s=r.URL||r.webkitURL;if(!s||typeof s.createObjectURL!="function")return false;let i=s.createObjectURL(new Blob([n],{type:"application/x-sqlite3"})),l=r.document.createElement("a");return l.style.display="none",l.href=i,l.download=t,r.document.body.appendChild(l),l.click(),setTimeout(()=>{try{s.revokeObjectURL(i);}catch{}l.remove();},1e3),true};u.db.close=async(e="memorio")=>{let t=V.__sqliteDbs&&V.__sqliteDbs[e];if(t&&typeof t.close=="function"){try{await ke(e);}catch{}try{t.close();}catch(r){console.warn("Memorio SQLite: close failed",r);}}if(V.__sqliteDbs&&delete V.__sqliteDbs[e],V.sqlbases){let r=V.sqlbases.findIndex(o=>o&&o.name===e);r>-1&&V.sqlbases.splice(r,1);}delete er[e],oe[e]&&(clearTimeout(oe[e]),oe[e]=null),xo(e);};u.db.loadSnapshot=ot;u.db.saveSnapshot=ke;});var So={};var or=x(()=>{a();$();w();rr();u.db.create=async(e="memorio",t={})=>{let r=await u.db.getSQL(),o=globalThis,n=!!(t&&t.persistence)||!!(o.sqliteConfig&&o.sqliteConfig.persistence),s;if(n&&!t.data){let h=ot(e);h&&(s=h);}let i=t&&t.data||s,l;i&&typeof i.byteLength=="number"?(l=new r.Database(i),c(`Memorio SQLite: database '${e}' opened (persistence=${n})`)):(l=new r.Database,c(`Memorio SQLite: database '${e}' created (persistence=${n})`));let f={...t,persistence:n};o.__sqliteDbs||(o.__sqliteDbs={}),o.__sqliteDbs[e]=l,o.sqlbases||(o.sqlbases=[]);let b=o.sqlbases.findIndex(h=>h&&h.name===e);return b>-1?o.sqlbases[b]={name:e,db:l,persistence:f.persistence}:o.sqlbases.push({name:e,db:l,persistence:f.persistence}),n&&tr(e,l),l};});var wo={};var nr=x(()=>{a();$();u.db.get=(e="memorio")=>{let t=globalThis.__sqliteDbs;if(!t||!t[e])throw new Error(`SQLite database '${e}' does not exist. Create it with sqlite.db.create('${e}').`);return t[e]};});var _o={};var sr=x(()=>{a();$();w();u.db.delete=e=>{let t=globalThis.__sqliteDbs;if(!t||!t[e])return false;try{t[e].close();}catch{}delete t[e];let r=globalThis;return r.sqlbases&&(r.sqlbases=r.sqlbases.filter(o=>o&&o.name!==e)),c(`Memorio SQLite: database '${e}' deleted`),true};});var Eo={};var ir=x(()=>{a();$();u.db.list=()=>{let e=globalThis.__sqliteDbs;return e?Object.keys(e):[]};});var ko={};var ar=x(()=>{a();$();u.db.size=async e=>{let t=globalThis.__sqliteDbs;if(!t)return 0;let r=n=>n&&(n.byteLength||n.length)||0;if(e){let n=u.db.get(e);return r(n.export())}let o=0;for(let n of Object.keys(t))try{o+=r(t[n].export());}catch{}return o};});var Po={};var lr=x(()=>{a();$();u.db.export=async(e="memorio")=>u.db.get(e).export();});var To={};var cr=x(()=>{a();$();u.db.import=async(e,t)=>u.db.create(e,{data:t});});var Co={};var ur=x(()=>{a();$();w();u.query.run=async(e="memorio",t,r=[])=>{let o=u.db.get(e);return c(`Memorio SQLite: run -> ${t}`),o.run(t,r),o.getRowsModified()};});var Do={};var dr=x(()=>{a();$();u.query.select=async(e="memorio",t,r=[])=>{let n=u.db.get(e).prepare(t,r),s=[];try{for(;n.step();)s.push(n.getAsObject());}finally{try{n.free();}catch{}}return s};});var $o={};var fr=x(()=>{a();$();u.data.set=async(e="memorio",t,r=[])=>u.query.run(e,t,r);});var Oo={};var mr=x(()=>{a();$();u.data.get=async(e="memorio",t,r=[])=>{let o=await u.query.select(e,t,r);return o.length?o[0]:null};});var Ao,u,$=x(()=>{a();F();N();Ao=fe(),u={db:{},query:{},data:{}};u.config=e=>{let t=globalThis;return t.sqliteConfig={...t.sqliteConfig,...e},e&&e.wasmUrl&&(t.sqliteWasmBase=e.wasmUrl.endsWith("/")?e.wasmUrl:e.wasmUrl+"/"),u};Object.defineProperty(u,"ready",{enumerable:false,configurable:false,get:()=>{let e=globalThis;return e.sqliteReady||(e.sqliteReady=typeof u.db.getSQL=="function"?u.db.getSQL().then(()=>{}).catch(()=>{}):Promise.resolve()),e.sqliteReady}});Ao?(async()=>(Object.defineProperty(u,"db",{value:{},writable:false,configurable:true,enumerable:true}),Object.defineProperty(u,"query",{value:{},writable:false,configurable:true,enumerable:true}),Object.defineProperty(u,"data",{value:{},writable:false,configurable:true,enumerable:true}),Object.defineProperty(globalThis,"sqlbases",{value:[],writable:true,configurable:true,enumerable:false}),await Promise.all([Promise.resolve().then(()=>(Zt(),go)),Promise.resolve().then(()=>(or(),So)),Promise.resolve().then(()=>(nr(),wo)),Promise.resolve().then(()=>(sr(),_o)),Promise.resolve().then(()=>(ir(),Eo)),Promise.resolve().then(()=>(ar(),ko)),Promise.resolve().then(()=>(lr(),Po)),Promise.resolve().then(()=>(cr(),To)),Promise.resolve().then(()=>(ur(),Co)),Promise.resolve().then(()=>(dr(),Do)),Promise.resolve().then(()=>(fr(),$o)),Promise.resolve().then(()=>(mr(),Oo))])))():(u._disabled=true,u._warning='SQLite (sql.js) is not available in this environment. It requires a browser with WebAssembly support. Install the optional "sql.js" package to enable it.',P&&(globalThis.sqliteDisabled=true,globalThis.sqliteWarning=u._warning,console.warn("Memorio SQLite: sql.js is not available in this environment (requires browser + WebAssembly). Use store or session for persistence.")));});a();N();a();R();w();a();var _={set:(e,t={})=>{globalThis.dispatchEvent(new CustomEvent(String(e),t));},listen:(e,t=null,r)=>{if(globalThis.events?.[e])return;let o=t?n=>{let s=n;return globalThis.queueMicrotask?globalThis.queueMicrotask(()=>t(s)):Promise.resolve().then(()=>t(s))}:void 0;o&&globalThis.addEventListener(e,o),o&&(globalThis.events[e]=o);},remove:e=>{let t=globalThis.events?.[e];t&&(globalThis.removeEventListener(e,t),delete globalThis.events[e]);}};a();w();var ne=new Map,$t=(e,t,r)=>{let o=[];if(t.type&&t.type!=="any"){let n=Array.isArray(e)?"array":typeof e;if(n!==t.type)return o.push(`${r}: expected ${t.type}, got ${n}`),{valid:false,errors:o}}if(t.enum&&!t.enum.includes(e)&&o.push(`${r}: value must be one of [${t.enum.map(String).join(", ")}]`),t.validator){let n=t.validator(e);n!==true&&o.push(`${r}: ${typeof n=="string"?n:"validation failed"}`);}if(typeof e=="number"&&(t.min!==void 0&&e<t.min&&o.push(`${r}: value ${e} is less than minimum ${t.min}`),t.max!==void 0&&e>t.max&&o.push(`${r}: value ${e} exceeds maximum ${t.max}`)),typeof e=="string"&&(t.min!==void 0&&e.length<t.min&&o.push(`${r}: string length ${e.length} is less than minimum ${t.min}`),t.max!==void 0&&e.length>t.max&&o.push(`${r}: string length ${e.length} exceeds maximum ${t.max}`),t.pattern&&!t.pattern.test(e)&&o.push(`${r}: string does not match required pattern`)),t.type==="object"&&e&&typeof e=="object"&&!Array.isArray(e)){if(t.required)for(let n of t.required)n in e||o.push(`${r}: missing required property '${n}'`);if(t.properties){for(let[n,s]of Object.entries(t.properties))if(n in e&&e[n]!==void 0){let i=$t(e[n],s,`${r}.${n}`);i.valid||o.push(...i.errors||[]);}}}return o.length===0?{valid:true}:{valid:false,errors:o}},Ot=(e,t)=>{let r=ne.get(e);return r?$t(t,r,e):{valid:true}},At=(e,t)=>{typeof t=="function"?ne.set(e,{validator:t}):ne.set(e,t),c(`[memorio schema] Registered schema for '${e}'`);},Mt=e=>ne.delete(e),qt=()=>Array.from(ne.keys()),Jr=e=>ne.get(e),K={register:At,validate:Ot,unregister:Mt,list:qt,get:Jr};N();var ve=Symbol("memorio.target"),jt=new WeakMap,J=(e,t=null)=>{if(e===null||typeof e!="object")return e;if(e[ve]!==void 0)return J(e[ve],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 o=Array.isArray(e)?[]:{};for(let n of Reflect.ownKeys(e))o[n]=J(e[n],t);return o},Rt=(e,t,r=".")=>t.concat(e).join(r),It=(e,t,r=[])=>{let o=n=>{try{_.set(n,{detail:{name:n}});}catch{}};return new Proxy(e,{get(n,s){if(s==="__path")return r.length>0?"state."+r.join("."):"state";if(s===ve||n[ve]!==void 0)return n;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(n));if(typeof s=="string"){let i=r.length>0?"state."+r.concat(s).join("."):"state."+s;d.lastAccessedPath=i,d.tracking&&d.trackedPaths.add(i);}if(s==="_lastPath")return d.lastAccessedPath;if(s==="remove")return i=>(delete n[i],true);if(s==="removeAll")return ()=>{try{for(let i in n)typeof n[i]!="function"&&!["list","remove","removeAll","lock","unlock"].includes(i)&&delete n[i];}catch(i){console.error(i);}};if(Object.isFrozen(n[s]))return n[s];if(s==="lock"||s==="unlock"){let i=Reflect.get(n,s);if(i)return i}try{let i=Reflect.get(n,s);if(i&&typeof i=="object"&&["Array","Object"].includes(i.constructor.name)){let l=jt.get(i);return l||(l=It(i,t,r.concat(s)),jt.set(i,l)),l}return i}catch(i){console.error("Error: ",i);return}},set(n,s,i){if(d.locked)return console.error("Error: state is locked. Use state.unlock() to enable modifications."),false;if(Dt.includes(s))return console.error("key "+s+" is protected"),false;if(n[s]&&typeof n[s]=="object"&&Object.isFrozen(n[s]))return console.error(`Error: state '${s}' is locked`),false;if(n[s]&&typeof n[s]=="object"&&n[s].__locked)return console.error(`Error: state '${s}' is locked. Use state.${s}.unlock() to enable modifications.`),false;try{let l=Rt(s,r),f=J(i),b=K.validate(l,f);if(!b.valid)return P&&d.debug&&console.error(`[memorio schema] Validation failed for '${l}':`,b.errors),c(`[memorio schema] Validation failed for '${l}': `+(b.errors?.join(", ")||"unknown error")),!1;if(t({action:"set",path:l,target:n,newValue:f,previousValue:Reflect.get(n,s)}),o("state."+l),Reflect.set(n,s,f),d.bumpStateVersion(),n[s]&&typeof n[s]=="object"){let h=n[s];if(h&&typeof h=="object")try{Object.defineProperty(h,"__locked",{writable:!0,enumerable:!1,configurable:!1,value:!1}),Object.defineProperty(h,"lock",{writable:!1,enumerable:!1,configurable:!1,value:()=>{Object.defineProperty(h,"__locked",{writable:!0,enumerable:!1,configurable:!1,value:!0}),c(`State '${s}' is now locked.`);}}),Object.defineProperty(h,"unlock",{writable:!1,enumerable:!1,configurable:!1,value:()=>{Object.defineProperty(h,"__locked",{writable:!0,enumerable:!1,configurable:!1,value:!1}),c(`State '${s}' is now unlocked.`);}});}catch{}}return !0}catch(l){return console.error("Error in set trap:",l),false}},deleteProperty(n,s){try{let i=Rt(s,r),l=Reflect.get(n,s);return t({action:"delete",path:i,target:n,previousValue:l}),Reflect.deleteProperty(n,s)}catch(i){return console.error("Error in deleteProperty trap:",i),false}},ownKeys(n){return Reflect.ownKeys(n)},getOwnPropertyDescriptor(n,s){return Reflect.getOwnPropertyDescriptor(n,s)}})},Ie="__memorio_state_instance__",S;globalThis[Ie]?S=globalThis[Ie]:(S=It({},e=>{d.historyEnabled&&d.recordMutation({path:e.path,action:e.action,newValue:e.newValue,previousValue:e.previousValue,timestamp:Date.now()});}),S.lock=()=>{d.locked=true,c("State is now locked. All modifications are blocked.");},S.unlock=()=>{d.locked=false,c("State is now unlocked. Modifications are allowed.");},globalThis[Ie]=S);se();a();F();R();w();var q=Be(),Xe=new Map;function re(){let t=d.currentContext||""||"default";return Xe.has(t)||Xe.set(t,new Map),Xe.get(t)}var te=q!==null;function ee(){let e=d.currentContext||"";return e?`${e}-`:"memorio_session_"}function Ze(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`),""):ee()+e}function Fr(e){let t=te?q.getItem(e):re().get(e);return t&&JSON.parse(t)}function Qr(e,t){let r=JSON.stringify(t);te?q.setItem(e,r):re().set(e,r);}function Wr(e){if(te){if(q.getItem(e))return q.removeItem(e),true}else if(re().has(e))return re().delete(e),true;return false}var et="__memorio_session_instance__",A;globalThis[et]?A=globalThis[et]:(A=new Proxy({},{}),Object.defineProperties(A,{get:{value:e=>{if(!e)return console.warn("[memorio session] session.get() called with empty or null key - returning null"),null;try{return Fr(Ze(e))}catch(t){D(`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=Ze(e);if(!r)return false;if(typeof t=="function")return console.warn("[memorio session] functions are not storable - write aborted for key: "+e),D("It's not secure to session functions."),false;try{Qr(r,t);}catch(o){return D(`Error setting session item '${e}': ${o}`),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=Ze(e);if(!t)return false;try{return Wr(t)}catch(r){D(`Error removing session item '${e}': ${r}`);}return false}},delete:{value:e=>A.remove(e)},removeAll:{value:()=>{if(te){let e=[];for(let t=0;t<q.length;t++){let r=q.key(t);r?.startsWith(ee())&&e.push(r);}e.forEach(t=>q.removeItem(t));}else re().clear();return true}},clearAll:{value:()=>(A.removeAll(),true)},quota:{value:async()=>[0,0]},size:{value:()=>{let e=0;return te?Object.keys(q).forEach(t=>{if(t.startsWith(ee())){let r=q.getItem(t);r&&(e+=r.length);}}):re().forEach(t=>{e+=t.length;}),e}},isPersistent:{get:()=>te},list:{value:()=>{let e={};try{if(te)for(let t=0;t<q.length;t++){let r=q.key(t);if(r?.startsWith(ee())){let o=r.replace(ee(),""),n=q.getItem(r);if(n!==null)try{e[o]=JSON.parse(n);}catch{e[o]=n;}}}else re().forEach((t,r)=>{if(r.startsWith(ee())){let o=r.replace(ee(),"");try{e[o]=JSON.parse(t);}catch{e[o]=t;}}});}catch(t){D(`Error listing session items: ${t}`);}return e}}}),Object.freeze(A),globalThis[et]=A);a();var we="__memorio_cache_instance__",L={},ie=globalThis[we]?globalThis[we]:new Proxy({},{get(e,t){let r=t;return r==="get"?o=>L[o]:r==="set"?(o,n)=>{L[o]=n;}:r==="remove"?o=>(delete L[o],true):r==="removeAll"?()=>(Object.keys(L).forEach(o=>delete L[o]),true):r==="clear"?()=>(Object.keys(L).forEach(o=>delete L[o]),true):r==="list"?()=>({...L}):L[r]},set(e,t,r){return L[t]=r,true},deleteProperty(e,t){return delete L[t],true}});globalThis[we]||(globalThis[we]=ie,Object.isFrozen(ie)||Object.freeze(ie));C();$();a();w();var Mo=(e,t=null,r=true)=>{let o=s=>typeof s=="string"?s:s&&typeof s=="object"&&s.__path?s.__path:null,n=o(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(n){let s=n.split(".");if(s[0]!=="state"&&s[0]!=="store"){console.error(`Observer Error: You need to declare 'state.' or 'store.'. The '${n}' string is incorrect!`);return}}if(e&&!t){let s=o(e);if(!s)return;globalThis.observer?.list?.[s]&&_.remove(s),c(`called: ${s}`);return}if(e&&t){let s=o(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]&&_.remove(s),i.forEach(f=>{typeof f=="function"&&_.listen(s,f,r);});return}},Pe=Mo;Object.defineProperties(Pe,{list:{get:()=>globalThis.events},remove:{value:e=>{e&&(_.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();w();R();N();var Te=((e,t=[])=>{if(!t||typeof e!="function")return ()=>{};let r=[],o=Array.isArray(t)&&!t.__path?t:[t];try{return o.forEach(n=>{let s="";if(typeof n=="function"){let i=Re(n);i&&(s=i);}else typeof n=="object"&&n!==null&&(s=n.__path||(typeof n.toString=="function"&&n.toString()!=="[object Object]"?n.toString():""));if(s){s=s.replace(/^(\(\)\s*=>\s*)/,"").replace(/^globalThis\./,"").replace(/^state\./,"");let i=s.startsWith("store.")||s.startsWith("state.")?s:"state."+s;_.listen(i,()=>e()),r.push(i);}else {d.clearTrackedPaths(),d.tracking=!0;try{e();}catch{}d.tracking=!1,d.trackedPaths.forEach(i=>{r.includes(i)||(c(`useObserver: [Auto-Discovery] -> "${i}"`),_.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(n=>{typeof _.remove=="function"&&(_.remove(n),c(`useObserver: Stopped monitoring "${n}"`));});}}catch(n){return c(`useObserver Error: ${n}`),()=>{}}});P&&!("useObserver"in globalThis)&&(globalThis.useObserver||(globalThis.useObserver=null),Object.defineProperty(globalThis,"useObserver",{value:Te,writable:true,enumerable:false,configurable:true}),Object.freeze(globalThis.useObserver));w();a();R();w();N();var qo={enabled:true,logToConsole:true,modules:["state","store","session","cache","idb"],maxEntries:1e3};function jo(){return P&&d.debug===true}var H={...qo},Q=[],Ro=e=>{H={...H,...e};},Io=()=>{H.enabled=true;},Lo=()=>{H.enabled=false;},pr=e=>H.enabled&&H.modules.includes(e),No=(e,t,r,o,n)=>{if(!pr(e))return;let s={timestamp:new Date().toISOString(),module:e,action:t,path:r,value:o,previousValue:n};if(Q.push(s),Q.length>H.maxEntries&&Q.shift(),H.logToConsole&&jo()){let i=`[Memorio:${e.toUpperCase()}]`,l=Vo(e);c(`%c${i}%c ${t} ${r},
5
+ color: ${l}; font-weight: bold,
6
+ color: inherit`),o!==void 0&&c(` \u2192 value:${o}`),n!==void 0&&c(` \u2190 previous:${n}`);}H.customHandler&&H.customHandler(s);},Vo=e=>({state:"#4CAF50",store:"#2196F3",session:"#FF9800",cache:"#9C27B0",idb:"#F44336"})[e]||"#888888",Ho=()=>[...Q],Jo=()=>{Q.length=0;},Bo=()=>{let e={total:Q.length,state:0,store:0,session:0,cache:0,idb:0,set:0,get:0,delete:0,clear:0};for(let t of Q)if(t){let r=t.module,o=t.action;r&&typeof e[r]=="number"&&e[r]++,o&&typeof e[o]=="number"&&e[o]++;}return e},Uo=()=>JSON.stringify(Q,null,2),nt={configure:Ro,enable:Io,disable:Lo,isEnabled:pr,log:No,getHistory:Ho,clearHistory:Jo,getStats:Bo,exportLogs:Uo};a();R();N();var I=globalThis.__memorio_state_instance__,B=globalThis.__memorio_store_instance__,U=globalThis.__memorio_session_instance__,j=globalThis.__memorio_cache_instance__;function zo(){return P&&d.debug===true}function yr(){if(!B)return {};let e={},t=B;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 o=t.get(r);o!=null&&(e[r]=o);}catch{}}return e}function gr(){if(!U)return {};let e={},t=U;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 o=t.get(r);o!=null&&(e[r]=o);}catch{}}return e}var Ko=()=>{if(zo()){if(I){let e=I.list,t;typeof e=="function"?t=e():typeof e=="object"&&e!==null?t=e:t=I,console.table(t);}if(B&&console.table(yr()),U&&console.table(gr()),j){let e=j.list,t;typeof e=="function"?t=e():typeof e=="object"&&e!==null?t=e:t=j,console.table(t);}}},Fo=()=>{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(I),storeKeys:e(B),sessionKeys:e(U),cacheKeys:e(j),idbDatabases:0,sqliteDbCount:0,lastUpdate:new Date().toISOString()}},ye=e=>{let r={state:I,store:B,session:U,cache:j}[e];r&&typeof r.clear=="function"?r.clear():r&&typeof r.removeAll=="function"?r.removeAll():console.debug(`Module ${e} not found or does not support clear()/removeAll()`);},Qo=()=>{ye("state"),ye("store"),ye("session"),ye("cache");},Wo=()=>{let e=()=>{if(I)try{return typeof I.list=="function"?I.list():I}catch{return}},t=()=>yr(),r=()=>gr(),o=()=>{if(j)try{return typeof j.list=="function"?j.list():j}catch{return}},n={state:e(),store:t(),session:r(),cache:o(),exportedAt:new Date().toISOString()};return JSON.stringify(n,null,2)},Yo=e=>{try{let t=JSON.parse(e);t.state&&Object.entries(t.state).forEach(([r,o])=>{I&&r!=="list"&&r!=="remove"&&r!=="removeAll"&&(I[r]=o);}),t.store&&B&&typeof B.set=="function"&&Object.entries(t.store).forEach(([r,o])=>{B.set(r,o);}),t.session&&U&&typeof U.set=="function"&&Object.entries(t.session).forEach(([r,o])=>{U.set(r,o);}),t.cache&&j&&Object.entries(t.cache).forEach(([r,o])=>{j&&r!=="get"&&r!=="set"&&r!=="remove"&&r!=="clear"&&(j[r]=o);});}catch(t){console.debug("Import failed:",t);}},Go=(e,t)=>{let o={state:I,store:B,session:U,cache:j}[e];if(!o){console.debug(`Module ${e} not found`);return}let n=o[t];if(console.debug(`Watching ${e}.${t} (initial: ${JSON.stringify(n)})`),e==="state"&&globalThis.memorio?.dispatch){let s=i=>{i.detail?.name?.includes(t)&&console.debug(`Change: ${e}.${t} =`,i.detail.value);};o.addEventListener?.("memorio-change",s);}},Xo=()=>{console.debug(`
7
+ Memorio DevTools Help
6
8
 
7
9
  Available commands:
8
10
  memorio.devtools.inspect() - Inspect all state modules
@@ -14,99 +16,42 @@ Available commands:
14
16
  memorio.devtools.watch(module, path) - Watch a path for changes
15
17
  memorio.devtools.help() - Show this help
16
18
 
17
- Shortcuts:
18
- state - globalThis.state
19
- store - globalThis.store
20
- session - globalThis.session
21
- cache - globalThis.cache
22
- sqlite - globalThis.sqlite (SQLite / sql.js, browser only)
23
- `);},Ne={inspect:so,stats:io,clear:se,clearAll:ao,exportData:lo,importData:co,watch:uo,help:mo};a();$();w();var fo={enabled:true,logToConsole:true,modules:["state","store","session","cache","idb"],maxEntries:1e3};function po(){return u.debug===true}var A={...fo},N=[],yo=e=>{A={...A,...e};},go=()=>{A.enabled=true;},bo=()=>{A.enabled=false;},Xt=e=>A.enabled&&A.modules.includes(e),ho=(e,t,r,o,n)=>{if(!Xt(e))return;let s={timestamp:new Date().toISOString(),module:e,action:t,path:r,value:o,previousValue:n};if(N.push(s),N.length>A.maxEntries&&N.shift(),A.logToConsole&&po()){let i=`[Memorio:${e.toUpperCase()}]`,l=vo(e);c(`%c${i}%c ${t} ${r},
24
- color: ${l}; font-weight: bold,
25
- color: inherit`),o!==void 0&&c(` \u2192 value:${o}`),n!==void 0&&c(` \u2190 previous:${n}`);}A.customHandler&&A.customHandler(s);},vo=e=>({state:"#4CAF50",store:"#2196F3",session:"#FF9800",cache:"#9C27B0",idb:"#F44336"})[e]||"#888888",xo=()=>[...N],So=()=>{N.length=0;},wo=()=>{let e={total:N.length,state:0,store:0,session:0,cache:0,idb:0,set:0,get:0,delete:0,clear:0};for(let t of N)if(t){let r=t.module,o=t.action;r&&typeof e[r]=="number"&&e[r]++,o&&typeof e[o]=="number"&&e[o]++;}return e},Eo=()=>JSON.stringify(N,null,2),Be={configure:yo,enable:go,disable:bo,isEnabled:Xt,log:ho,getHistory:xo,clearHistory:So,getStats:wo,exportLogs:Eo};$();J();a();J();$();var ge={version:"4.8.0"};G();T();_();w();a();function Ve(){return S}a();$();w();function Zt(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 He=()=>Zt(R(S)),ze=e=>{let t=[],r=(o,n,s)=>{let i=o?Object.keys(o):[],l=n?Object.keys(n):[];for(let g of l){let b=s?`${s}.${g}`:g,v=o?o[g]:void 0,O=n[g];v!==O&&(typeof v!==typeof O||v===void 0?t.push({path:b,oldValue:v,newValue:O}):v&&typeof v=="object"?r(v,O,b):v!==O&&t.push({path:b,oldValue:v,newValue:O}));}for(let g of i)if(!(g in(n||{}))){let b=s?`${s}.${g}`:g;t.push({path:b,oldValue:o[g],newValue:void 0});}};return r(e,R(S),""),t},Qe=(e=true)=>{u.historyEnabled=e,c(`[memorio history] Tracking ${e?"enabled":"disabled"}`);};var Ke=()=>[...u.mutations],We=()=>u.canUndo(),Fe=()=>u.canRedo(),Ge=()=>{if(!u.historyEnabled){c("[memorio history] History is not enabled");return}let e=u.popUndo();if(e)return Po(e),c(`[memorio history] Undid: ${e.action} ${e.path}`),e},Ye=()=>{if(!u.historyEnabled){c("[memorio history] History is not enabled");return}let e=u.popRedo();if(e)return _o(e),c(`[memorio history] Redid: ${e.action} ${e.path}`),e};function Po(e){let t=u.historyEnabled;u.historyEnabled=false;try{e.action==="set"?e.previousValue===void 0?er(e.path):Ue(e.path,e.previousValue):e.action==="delete"&&e.previousValue!==void 0&&Ue(e.path,e.previousValue);}finally{u.historyEnabled=t;}}function _o(e){let t=u.historyEnabled;u.historyEnabled=false;try{e.action==="set"?Ue(e.path,e.newValue):e.action==="delete"&&er(e.path);}finally{u.historyEnabled=t;}}function Ue(e,t){let r=e.split("."),o=S;for(let n=0;n<r.length-1;n++){let s=r[n];o[s]===void 0&&(o[s]={}),o=o[s];}o[r[r.length-1]]=t;}function er(e){let t=e.split(".");if(t.length===1){S.remove(t[0]);return}let r=S;for(let o=0;o<t.length-1;o++){let n=t[o];if(r[n]===void 0)return;r=r[n];}delete r[t[t.length-1]];}var Xe=e=>{S.removeAll();for(let t of Object.keys(e))S[t]=Zt(e[t]);u.clearHistory(),c("[memorio history] State rolled back to snapshot");},Ze=()=>{u.clearHistory(),c("[memorio history] History cleared");},et=()=>{u.clearRedo();};a();var tt=()=>{let e=R(S);return Object.keys(e).filter(t=>!["list","remove","removeAll","lock","unlock"].includes(t))},rt=e=>{if(!e||typeof e!="string")return false;let t=e.replace(/^state\./,"").split("."),r=S;for(let o of t){if(r==null)return false;r=r[o];}return r!==void 0},ot=e=>{let[t,r]=tr(e);return !t||r===void 0?"undefined":Array.isArray(r)?"array":typeof r},nt=e=>{let[t,r]=tr(e);if(!(!t||r===void 0))return ko(r)},st=()=>{let e=[],t=(r,o)=>{if(r===null||typeof r!="object"||Array.isArray(r))return;let n=Object.keys(r).filter(s=>!["list","remove","removeAll","lock","unlock"].includes(s));for(let s of n){let i=o?`${o}.${s}`:s,l=r[s],g=l!==void 0,b=g?Array.isArray(l)?"array":typeof l:"undefined";e.push({path:i,type:b,defined:g}),g&&typeof l=="object"&&!Array.isArray(l)&&l.constructor?.name==="Object"&&t(l,i);}};return t(R(S),""),e};function tr(e){if(!e||typeof e!="string")return [false,void 0];let t=e.replace(/^state\./,"").split("."),r=S;for(let o of t){if(r==null)return [false,void 0];r=r[o];}return [r!==void 0,r]}function ko(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();G();T();a();G();var I=globalThis,Oo=10*1024*1024;function ie(){let e=I.memorioSyncConfig;if(e&&typeof e.namespace=="string"&&e.namespace)return `ns:${e.namespace}`;let t=I.memorio?I.memorio._currentContext:void 0,r=typeof t=="string"&&t?t:"";return r?`ctx:${r}`:"default"}function rr(){return !!I.memorioSyncConfig}var X=e=>`memorio:sync:${e}:`,Y=e=>`${X(e)}index`;function qo(e){let t=JSON.stringify(e);if(t.length>Oo)throw new Error("memorio sync: memory entry exceeds maximum size");return t}function it(e){try{return JSON.parse(e)}catch{return null}}var at={async append(e,t){let r=ie(),o={...e,operation:t,updatedAt:e.updatedAt||Date.now(),version:e.version||1,sync:"pending"},n=qo(o),s=`${X(r)}${o.id}`;h.set(s,n);let i=h.get(Y(r))||[];return i.includes(o.id)||i.push(o.id),h.set(Y(r),JSON.stringify(i)),o},async pending(){let e=ie(),t=[],r=h.get(Y(e))||[];for(let o of r){let n=h.get(`${X(e)}${o}`);if(!n)continue;let s=it(n);s&&s.sync!=="synced"&&t.push(s);}return t.sort((o,n)=>(o.updatedAt||0)-(n.updatedAt||0)),t},async markSynced(e){if(!e.length)return 0;let t=ie(),r=0,o=h.get(Y(t))||[];for(let n of o){if(!e.includes(n))continue;let s=`${X(t)}${n}`,i=h.get(s);if(!i)continue;let l=it(i);!l||l.sync==="synced"||(l.sync="synced",h.set(s,JSON.stringify(l)),r++);}return r},async get(e){let t=ie(),r=h.get(`${X(t)}${e}`);return it(r??"")},async clear(){let e=ie(),t=h.get(Y(e))||[];for(let r of t)h.remove(`${X(e)}${r}`);h.remove(Y(e));},async replay(){let e={synced:[]};if(!rr())return e;let r=(I.memorioSyncConfig||{}).provider;if(!r||typeof r.push!="function")return e;let o=await this.pending();if(o.length)try{let n=await r.push(o);e.synced=n?.synced||[],e.conflicts=n?.conflicts,e.error=n?.error,e.synced.length&&await this.markSynced(e.synced);}catch(n){e.error=String(n);}if(typeof r.pull=="function")try{let n=o.length?Math.min(...o.map(i=>i.updatedAt||0)):0,s=await r.pull(n);for(let i of s||[])await this.append(i,i.operation||"confirm"),await this.markSynced([i.id]);}catch{}return e},status(){return Promise.resolve("store")}};function or(e){let t=I.memorioSyncConfig||{};return I.memorioSyncConfig={...t,...e},at}if(typeof I.addEventListener=="function"){let e=false;I.addEventListener("focus",()=>{e||!rr()||(e=true,at.replay().finally(()=>{e=false;}));});}var lt=at;var ve="__memorio_memory_index__",nr="__memorio_superseded__";function ct(){return !!globalThis.memorioSyncConfig}async function Z(e,t){if(ct()&&e.scope!=="hot")try{await lt.append(e,t);}catch{}}function ut(e){return e.startsWith(nr)?e:`${nr}${e}`}function sr(e){return e?Array.isArray(e)?e:[e]:[]}function Mo(e,t){if(t.scope)return t.scope;let r=JSON.stringify(e).length;return r>1e6?"durable":("local")}function k(){return Date.now()}function he(e){return e.ttl===null||e.ttl===void 0?false:k()-e.createdAt>e.ttl}function $o(e,t){return e.status==="obsolete"||e.status==="superseded"||he(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 Co(e,t){return !(e.status!=="active"||he(e)||t.tags&&!(Array.isArray(t.tags)?t.tags:[t.tags]).some(n=>e.tags.includes(n))||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 jo(e){let t=(k()-e.createdAt)/36e5,r=Math.max(.1,1/(1+t*.5)),o=e.confidence,n=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*o*n*s[e.type]*i[e.scope]}function ar(e,t){if(!t||typeof t!="string")return;let r=t.replace(/^state\./,"").split("."),o=e;for(let n of r){if(o==null)return;o=o[n];}return o}function lr(e,t,r){if(!t||typeof t!="string")return;let o=t.replace(/^state\./,"").split("."),n=e;for(let s=0;s<o.length-1;s++){let i=o[s];(n[i]===void 0||n[i]===null)&&(n[i]={}),n=n[i];}n[o[o.length-1]]=r;}async function W(e){let t=e.status==="superseded"?ut(e.id||e.key):e.key,r=JSON.stringify(e);switch(e.scope){case "hot":lr(S,t,e.value);break;case "session":C.set(t,r);break;case "local":h.set(t,r);break;case "durable":await d.set("memories",t,r);break}await Do(e.id||e.key,e.scope,e.status==="superseded");}async function cr(e,t,r=false){let o=r?ut(e):e,n;switch(t){case "hot":{let s=ar(S,o);return s===void 0?null:ur(e,s,t)}case "session":n=C.get(o);break;case "local":n=h.get(o);break;case "durable":n=await d.get("memories",o);break}if(!n)return null;try{let s=JSON.parse(n);return s.id=s.id||e,s}catch{return null}}function ur(e,t,r){return {id:e,key:e,value:t,type:"fact",confidence:1,scope:r,ttl:null,tags:[],status:"active",createdAt:k(),lastConfirmedAt:k(),supersededId:null}}async function ir(e,t,r=false){let o=r?ut(e):e;switch(t){case "hot":lr(S,o,void 0);break;case "session":C.remove(o);break;case "local":h.remove(o);break;case "durable":await d.deleteKey("memories",o);break}await Ao(e,r);}async function ae(){try{let e=h.get(ve);return e?JSON.parse(e):{}}catch{return {}}}async function Do(e,t,r=false){let o=await ae();o[e]={scope:t,superseded:r},h.set(ve,JSON.stringify(o));}async function Ao(e,t=false){let r=await ae(),o=r[e];o&&(t&&o.superseded||!t&&!o.superseded)&&delete r[e],h.set(ve,JSON.stringify(r));}async function be(){let e=await ae(),t=[];for(let[r,o]of Object.entries(e)){let n=await cr(r,o.scope,o.superseded);n&&(n.id=n.id||r,n.supersededId=n.supersededId??null,t.push(n));}return t}var xe={async remember(e,t,r={}){let o=await this._getEntry(e);if(o&&o.status==="active"){let l=`${o.id}__v${Date.now()}`,g={...o,id:l,key:o.key,status:"superseded",supersededId:null,lastConfirmedAt:k()};await W(g),await Z(g,"supersede");}let n=Mo(t,r),s=sr(r.tags),i={id:r.id||e,key:e,value:t,type:r.type||"fact",confidence:r.confidence??1,scope:n,ttl:r.ttl??null,tags:s,source:r.source,status:"active",createdAt:k(),lastConfirmedAt:k(),updatedAt:k(),version:o&&o.version?o.version+1:1,sync:ct()?"pending":void 0,supersededId:o?o.id:null};await W(i),await Z(i,"remember"),E.set("memorio:memory:remembered",{key:e,scope:n,entryId:i.id});},async recall(e,t={}){let r=await this._getEntry(e);return !r||!$o(r,t)?null:(r.lastConfirmedAt=k(),await W(r),E.set("memorio:memory:recalled",{key:e}),r.value)},async context(e={}){return (await be()).filter(n=>Co(n,e)).map(n=>({entry:n,score:jo(n)})).sort((n,s)=>s.score-n.score).slice(0,e.maxEntries??25).map(({entry:n})=>({key:n.key,value:n.value,type:n.type,confidence:n.confidence,scope:n.scope,tags:n.tags,age:k()-n.createdAt,accessCount:n.tags.length+1,lastAccessedAt:n.lastConfirmedAt}))},async forget(e){let t=await this._getEntry(e);t&&(await ir(t.id||e,t.scope,t.status==="superseded"),await Z(t,"forget"),E.set("memorio:memory:forgotten",{key:e}));},async update(e,t,r={}){let o=await this._getEntry(e);if(!o){await this.remember(e,t,r);return}let n=`${o.id}__v${k()}`,s={...o,id:n,key:o.key,status:"superseded",supersededId:null,lastConfirmedAt:k()};await W(s),await Z(s,"supersede");let i={...o,value:t,lastConfirmedAt:k(),updatedAt:k(),version:(o.version?o.version:0)+1,sync:ct()?"pending":void 0,...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:sr(r.tags)}:{},...r.source?{source:r.source}:{}};await W(i),await Z(i,"update"),E.set("memorio:memory:updated",{key:e,entryId:i.id});},async stats(){let e=await be(),t={hot:0,session:0,local:0,durable:0},r={},o=0;for(let n of e)t[n.scope]=(t[n.scope]||0)+1,he(n)&&o++,r[n.type]=(r[n.type]||0)+1;return {total:e.length,byScope:t,byType:r,expired:o}},async forgetExpired(){let e=await be(),t=0;for(let r of e)he(r)&&r.status==="active"&&(r.status="obsolete",r.updatedAt=k(),r.operation="expire",await W(r),await Z(r,"expire"),t++);return t},async clear(){let e=await ae();for(let[t,r]of Object.entries(e))await ir(t,r.scope,r.superseded);h.remove(ve);},async _getEntry(e){let r=(await ae())[e];if(!r){let o=ar(S,e);return o!==void 0?ur(e,o,"hot"):null}return cr(e,r.scope,r.superseded)},async _loadAll(){return be()},async _save(e){await W(e);},journal:lt,configure(e){return or(e),this}};Object.defineProperty(globalThis,"memorio",{value:{setProps:()=>{},obj:{},array:[],dispatch:E,message:P,devtools:Ne,logger:Be,setDescription:()=>{}},writable:false,configurable:true,enumerable:false});Object.defineProperty(globalThis,"events",{value:{},writable:true,enumerable:false});typeof globalThis.addEventListener=="function"&&E.listen("memorio:memory:cleanup",async()=>xe.forgetExpired?.());Object.defineProperty(memorio,"version",{writable:false,enumerable:false,value:ge.version});Object.defineProperty(memorio,"debug",{get:()=>u.debug,set:e=>{u.debug=e;},enumerable:false});var mr=oe();Object.defineProperty(memorio,"_platform",{writable:false,enumerable:false,value:mr.platform});Object.defineProperty(memorio,"_capabilities",{writable:false,enumerable:false,value:mr});Object.defineProperty(memorio,"_sessionId",{writable:false,enumerable:false,value:ce()});xt();memorio.isBrowser=we;memorio.isNode=Ee;memorio.isDeno=Te;memorio.isEdge=Pe;memorio.getCapabilities=oe;memorio.createContext=ne;memorio.listContexts=Me;memorio.deleteContext=$e;memorio.isolate=e=>ne(e);memorio.registerSchema=L.register;memorio.validate=L.validate;memorio.unregisterSchema=L.unregister;memorio.listSchemas=L.list;memorio.typed=Ve;memorio.snapshot=He;memorio.diff=ze;memorio.undo=Ge;memorio.redo=Ye;memorio.canUndo=We;memorio.canRedo=Fe;memorio.rollback=Xe;memorio.trace=Ke;memorio.enableHistory=Qe;memorio.clearHistory=Ze;memorio.clearRedo=et;memorio.stateKeys=tt;memorio.pathExists=rt;memorio.stateType=ot;memorio.stateGet=nt;memorio.stateSchema=st;memorio.memory=xe;Object.defineProperty(globalThis,"state",{value:S,writable:true,enumerable:false,configurable:true});Object.defineProperty(globalThis,"store",{value:h,writable:true,enumerable:false,configurable:true});Object.defineProperty(globalThis,"session",{value:C,writable:true,enumerable:false,configurable:true});Object.defineProperty(globalThis,"cache",{value:ue,writable:true,enumerable:false,configurable:true});Object.defineProperty(globalThis,"idb",{value:d,writable:true,enumerable:false,configurable:true});Object.defineProperty(globalThis,"sqlite",{value:m,writable:true,enumerable:false,configurable:true});Object.defineProperty(globalThis,"observer",{value:pe,writable:true,enumerable:false,configurable:true});Object.defineProperty(globalThis,"useObserver",{value:ye,writable:true,enumerable:false,configurable:true});Object.defineProperty(memorio,"dispatch",{value:E,writable:true,enumerable:false,configurable:true});Object.defineProperty(memorio,"setContext",{writable:false,enumerable:false,value:e=>Ce(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(`
26
- \u{1F9E0} Memorio ${ge.version} - Help
19
+ Shortcuts (dev only):
20
+ state - global state proxy
21
+ store - localStorage wrapper
22
+ session - sessionStorage wrapper
23
+ cache - in-memory cache
24
+ `);},Ce={inspect:Ko,stats:Fo,clear:ye,clearAll:Qo,exportData:Wo,importData:Yo,watch:Go,help:Xo};a();var br="__memorio_hlc_node";function it(){if(typeof globalThis>"u")return "node";try{if(typeof sessionStorage<"u"&&sessionStorage){let e=sessionStorage.getItem(br);return e||(e=hr(),sessionStorage.setItem(br,e)),e}}catch{}return globalThis.__memorioHlcNodeId||(globalThis.__memorioHlcNodeId=hr()),globalThis.__memorioHlcNodeId}function hr(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID().slice(0,8):Math.random().toString(36).slice(2,10)}var st="__memorio_hlc_local",O=globalThis[st]||{physical:0,logical:0,node:it()};globalThis[st]||(globalThis[st]=O);function Zo(e){let t=Date.now(),r=O.physical,o,n;return t>r?(o=t,n=0):(o=r,n=O.logical+1),O.physical=o,O.logical=n,{physical:o,logical:n,node:O.node}}function en(e){let t=Date.now();return e.physical>O.physical?(O.physical=e.physical>t?e.physical:t,O.logical=1):e.physical===O.physical&&(O.logical=Math.max(O.logical,e.logical)+1),O.node=it(),{...O}}function vr(e,t){return e.physical!==t.physical?e.physical<t.physical?-1:1:e.logical!==t.logical?e.logical<t.logical?-1:1:e.node!==t.node?e.node<t.node?-1:1:0}function tn(e,t){return vr(e,t)<0}function rn(e){return `hlc:${e.physical}:${e.logical}:${e.node}`}function on(e){if(!e.startsWith("hlc:"))return null;let t=e.split(":");if(t.length!==4)return null;let r=parseInt(t[1],10),o=parseInt(t[2],10),n=t[3];return isNaN(r)||isNaN(o)?null:{physical:r,logical:o,node:n}}var E={tick:Zo,receive:en,compare:vr,happenedBefore:tn,serialize:rn,parse:on,getNodeId:it};a();function ge(e,t,r=2){if(e!==null&&t!==null&&e>=t)throw new Error(`left (${e}) must be < right (${t})`);return e===null&&t===null?"a":e===null?nn(t,r):t===null?at(e,r):sn(e,t,r)}function nn(e,t){let o=e.split(".")[0],n=o.charCodeAt(0);if(n>97){let s=String.fromCharCode(n-1),i=o.slice(1);return i===""?lt(s,t):s+i}if(o[0]==="a"){let s=0;for(;s<o.length&&o[s]==="a";)s++;if(s===o.length)return ".z."+".z".repeat(Math.floor(t/2)+1);let i=o.charCodeAt(s),l=String.fromCharCode(i-1);return l>="a"?l+o.slice(s+1):"a"+l+o.slice(s+1)}return ".z."+".z".repeat(Math.floor(t/2)+1)}function at(e,t){let o=e.split(".")[0],n=o.charCodeAt(0),s=String.fromCharCode(n+1);if(s<="z"){let l=o.slice(1);return l===""?an(s,t):s+l}if(o.length>1){let l=o[o.length-1];if(l<"z")return o.slice(0,-1)+String.fromCharCode(l.charCodeAt(0)+1)}let i=Sr(o,0);return i!==null?i+lt("a",t):"b"+lt("a",t)}function Sr(e,t){if(t>=e.length)return null;let r=e.charCodeAt(t);return r<122?e.slice(0,t)+String.fromCharCode(r+1):Sr(e,t+1)}function sn(e,t,r){let o=e.split("."),n=t.split("."),s=Math.max(o.length,n.length),i=xr(o,s),l=xr(n,s),f=[];for(let b=0;b<s;b++){let h=i[b]||"a",T=l[b]||"z";if(h===T)f.push(h);else {let Me=h.charCodeAt(0);if(T.charCodeAt(0)-Me>1){for(f.push(String.fromCharCode(Me+1));f.length<r;)f.push("a");return f.join(".")}return f.push(h),f.push(at(h,r)),f.join(".")}}return at(e,r)}function xr(e,t){for(;e.length<t;)e.push("a");return e}function lt(e,t){let r=e;for(;r.length<t;)r="a"+r;return r}function an(e,t){let r=e;for(;r.length<t;)r=r+"a";return r}function ln(){return ge(null,null)}function wr(e){return ge(e,null)}function _r(e){return ge(null,e)}function Er(e,t){return ge(e,t)}function cn(e,t,r){if(t===r)return e.map(s=>s.key);let o=[...e],[n]=o.splice(t,1);return o.splice(r,0,n),o.map(s=>s.key)}function un(e){if(e.length===0)return e;let t=[],r=null;for(let o=0;o<e.length;o++){let n=o<e.length-1?e[o+1].key:null,s={...e[o]};r===null?s.key=_r(e[0].key):n===null?s.key=wr(r):s.key=Er(r,n),t.push(s),r=s.key;}return t}var dn={generateBetween:ge,firstKey:ln,after:wr,before:_r,between:Er,reorder:cn,reindex:un};R();F();a();F();R();var ct={version:"4.9.5"};N();se();C();$();w();a();function ut(){return S}a();R();w();function kr(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 ft=()=>kr(J(S)),mt=e=>{let t=[],r=(o,n,s)=>{let i=o?Object.keys(o):[],l=n?Object.keys(n):[];for(let f of l){let b=s?`${s}.${f}`:f,h=o?o[f]:void 0,T=n[f];h!==T&&(typeof h!==typeof T||h===void 0?t.push({path:b,oldValue:h,newValue:T}):h&&typeof h=="object"?r(h,T,b):h!==T&&t.push({path:b,oldValue:h,newValue:T}));}for(let f of i)if(!(f in(n||{}))){let b=s?`${s}.${f}`:f;t.push({path:b,oldValue:o[f],newValue:void 0});}};return r(e,J(S),""),t},pt=(e=true)=>{d.historyEnabled=e,c(`[memorio history] Tracking ${e?"enabled":"disabled"}`);};var yt=()=>[...d.mutations],gt=()=>d.canUndo(),bt=()=>d.canRedo(),ht=()=>{if(!d.historyEnabled){c("[memorio history] History is not enabled");return}let e=d.popUndo();if(e)return mn(e),c(`[memorio history] Undid: ${e.action} ${e.path}`),e},vt=()=>{if(!d.historyEnabled){c("[memorio history] History is not enabled");return}let e=d.popRedo();if(e)return pn(e),c(`[memorio history] Redid: ${e.action} ${e.path}`),e};function mn(e){let t=d.historyEnabled;d.historyEnabled=false;try{e.action==="set"?e.previousValue===void 0?Pr(e.path):dt(e.path,e.previousValue):e.action==="delete"&&e.previousValue!==void 0&&dt(e.path,e.previousValue);}finally{d.historyEnabled=t;}}function pn(e){let t=d.historyEnabled;d.historyEnabled=false;try{e.action==="set"?dt(e.path,e.newValue):e.action==="delete"&&Pr(e.path);}finally{d.historyEnabled=t;}}function dt(e,t){let r=e.split("."),o=S;for(let n=0;n<r.length-1;n++){let s=r[n];o[s]===void 0&&(o[s]={}),o=o[s];}o[r[r.length-1]]=t;}function Pr(e){let t=e.split(".");if(t.length===1){S.remove(t[0]);return}let r=S;for(let o=0;o<t.length-1;o++){let n=t[o];if(r[n]===void 0)return;r=r[n];}delete r[t[t.length-1]];}var xt=e=>{S.removeAll();for(let t of Object.keys(e))S[t]=kr(e[t]);d.clearHistory(),c("[memorio history] State rolled back to snapshot");},St=()=>{d.clearHistory(),c("[memorio history] History cleared");},wt=()=>{d.clearRedo();};a();se();C();a();se();var z=globalThis;function be(){let e=z.memorioSyncConfig;if(e&&typeof e.namespace=="string"&&e.namespace)return `ns:${e.namespace}`;let t=z.memorio?z.memorio._currentContext:void 0,r=typeof t=="string"&&t?t:"";return r?`ctx:${r}`:"default"}function Tr(){return !!z.memorioSyncConfig}var le=e=>`memorio:sync:${e}:`,ae=e=>`${le(e)}index`;function _t(e){try{return typeof e=="string"?JSON.parse(e):e}catch{return null}}var Et={async append(e,t){let r=be(),o={...e,operation:t,updatedAt:e.updatedAt||Date.now(),version:e.version||1,sync:"pending",hlc:e.hlc||E.serialize(E.tick())},n=`${le(r)}${o.id}`;v.set(n,o);let s=v.get(ae(r))||[];return s.includes(o.id)||s.push(o.id),v.set(ae(r),s),o},async pending(){let e=be(),t=[],r=v.get(ae(e))||[];for(let o of r){let n=v.get(`${le(e)}${o}`);if(!n)continue;let s=_t(n);s&&s.sync!=="synced"&&t.push(s);}return t.sort((o,n)=>{if(o.hlc&&n.hlc){let s=E.parse(o.hlc),i=E.parse(n.hlc);if(s&&i)return E.compare(s,i)}return (o.updatedAt||0)-(n.updatedAt||0)}),t},async markSynced(e){if(!e.length)return 0;let t=be(),r=0,o=v.get(ae(t))||[];for(let n of o){if(!e.includes(n))continue;let s=`${le(t)}${n}`,i=v.get(s);if(!i)continue;let l=_t(i);!l||l.sync==="synced"||(l.sync="synced",v.set(s,l),r++);}return r},async get(e){let t=be(),r=v.get(`${le(t)}${e}`);return _t(r??"")},async clear(){let e=be(),t=v.get(ae(e))||[];for(let r of t)v.remove(`${le(e)}${r}`);v.remove(ae(e));},async replay(){let e={synced:[],resolved:[]};if(!Tr())return e;let r=(z.memorioSyncConfig||{}).provider;if(!r||typeof r.push!="function")return e;let o=await this.pending();if(o.length)try{let n=await r.push(o);e.synced=n?.synced||[],e.conflicts=n?.conflicts,e.error=n?.error,e.synced.length&&await this.markSynced(e.synced);}catch(n){e.error=String(n);}if(typeof r.pull=="function")try{let n=o.length?Math.min(...o.map(i=>i.updatedAt||0)):0,s=await r.pull(n);for(let i of s||[]){if(i.hlc){let f=E.parse(i.hlc);f&&E.receive(f);}let l=await this.get(i.id);if(l&&i.hlc&&l.hlc){let f=E.parse(l.hlc),b=E.parse(i.hlc);if(f&&b){let h=E.compare(f,b);if(h===0){let T=typeof r.resolveConflict=="function"?await r.resolveConflict(l,i):"remote";if(e.resolved?.push({id:i.id,resolution:T}),T==="local")continue}else if(h>0)continue}}await this.append(i,i.operation||"confirm"),await this.markSynced([i.id]);}}catch{}return e},status(){return Promise.resolve("store")}};function Cr(e){let t=z.memorioSyncConfig||{};return z.memorioSyncConfig={...t,...e},Et}if(typeof z.addEventListener=="function"){let e=false;z.addEventListener("focus",()=>{e||!Tr()||(e=true,Et.replay().finally(()=>{e=false;}));});}var kt=Et;var Oe="__memorio_memory_index__",Dr="__memorio_superseded__";function ce(){return !!globalThis.memorioSyncConfig}async function W(e,t){if(ce()&&e.scope!=="hot")try{await kt.append(e,t);}catch{}}function Pt(e){return e.startsWith(Dr)?e:`${Dr}${e}`}function $r(e){return e?Array.isArray(e)?e:[e]:[]}function yn(e,t){if(t.scope)return t.scope;let r=JSON.stringify(e).length;return r>1e6?"durable":("local")}function k(){return Date.now()}function $e(e){return e.ttl===null||e.ttl===void 0?false:k()-e.createdAt>e.ttl}function gn(e,t){return e.status==="obsolete"||e.status==="superseded"||$e(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 bn(e,t){return !(e.status!=="active"||$e(e)||t.tags&&!(Array.isArray(t.tags)?t.tags:[t.tags]).some(n=>e.tags.includes(n))||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 hn(e){let t=(k()-e.createdAt)/36e5,r=Math.max(.1,1/(1+t*.5)),o=e.confidence,n=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*o*n*s[e.type]*i[e.scope]}function Ar(e,t){if(!t||typeof t!="string")return;let r=t.replace(/^state\./,"").split("."),o=e;for(let n of r){if(o==null)return;o=o[n];}return o}function Tt(e,t,r){if(!t||typeof t!="string")return;let o=t.replace(/^state\./,"").split("."),n=e;for(let s=0;s<o.length-1;s++){let i=o[s];(n[i]===void 0||n[i]===null)&&(n[i]={}),n=n[i];}n[o[o.length-1]]=r;}function vn(e,t){if(!t||typeof t!="string")return;let r=t.replace(/^state\./,"").split("."),o=e;for(let n=0;n<r.length-1;n++){let s=r[n];if(o[s]===void 0||o[s]===null)return;o=o[s];}delete o[r[r.length-1]];}async function Y(e){let t=e.status==="superseded"?Pt(e.id||e.key):e.key,r=JSON.stringify(e);switch(e.scope){case "hot":Tt(S,t,e.value);break;case "session":A.set(t,r);break;case "local":v.set(t,r);break;case "durable":await y.set("memories",t,r);break}await xn(e.id||e.key,e.scope,e.status==="superseded");}async function Mr(e,t,r=false){let o=r?Pt(e):e,n;switch(t){case "hot":{let s=Ar(S,o);return s===void 0?null:qr(e,s,t)}case "session":n=A.get(o);break;case "local":n=v.get(o);break;case "durable":n=await y.get("memories",o);break}if(!n)return null;try{let s=JSON.parse(n);return s.id=s.id||e,s}catch{return null}}function qr(e,t,r){return {id:e,key:e,value:t,type:"fact",confidence:1,scope:r,ttl:null,tags:[],status:"active",createdAt:k(),lastConfirmedAt:k(),supersededId:null}}async function Or(e,t,r=false){let o=r?Pt(e):e;switch(t){case "hot":Tt(S,o,void 0);break;case "session":A.remove(o);break;case "local":v.remove(o);break;case "durable":await y.deleteKey("memories",o);break}await Sn(e,r);}async function he(){try{let e=v.get(Oe);return e?JSON.parse(e):{}}catch{return {}}}async function xn(e,t,r=false){let o=await he();o[e]={scope:t,superseded:r},v.set(Oe,JSON.stringify(o));}async function Sn(e,t=false){let r=await he(),o=r[e];o&&(t&&o.superseded||!t&&!o.superseded)&&delete r[e],v.set(Oe,JSON.stringify(r));}async function De(){let e=await he(),t=[];for(let[r,o]of Object.entries(e)){let n=await Mr(r,o.scope,o.superseded);n&&(n.id=n.id||r,n.supersededId=n.supersededId??null,t.push(n));}return t}var Ae={async remember(e,t,r={}){let o=await this._getEntry(e);if(o&&o.status==="active"){let l=`${o.id}__v${Date.now()}`,f={...o,id:l,key:o.key,status:"superseded",supersededId:null,lastConfirmedAt:k()};await Y(f),await W(f,"supersede");}let n=yn(t,r),s=$r(r.tags),i={id:r.id||e,key:e,value:t,type:r.type||"fact",confidence:r.confidence??1,scope:n,ttl:r.ttl??null,tags:s,source:r.source,status:"active",createdAt:k(),lastConfirmedAt:k(),updatedAt:k(),version:o&&o.version?o.version+1:1,sync:ce()?"pending":void 0,supersededId:o?o.id:null,hlc:E.serialize(E.tick())};await Y(i),await W(i,"remember"),_.set("memorio:memory:remembered",{key:e,scope:n,entryId:i.id});},async recall(e,t={}){let r=await this._getEntry(e);return !r||!gn(r,t)?null:(r.lastConfirmedAt=k(),await Y(r),_.set("memorio:memory:recalled",{key:e}),r.value)},async context(e={}){return (await De()).filter(n=>bn(n,e)).map(n=>({entry:n,score:hn(n)})).sort((n,s)=>s.score-n.score).slice(0,e.maxEntries??25).map(({entry:n})=>({key:n.key,value:n.value,type:n.type,confidence:n.confidence,scope:n.scope,tags:n.tags,age:k()-n.createdAt,accessCount:n.tags.length+1,lastAccessedAt:n.lastConfirmedAt}))},async forget(e){let t=await this._getEntry(e);if(!t){let o={id:e,key:e,value:null,type:"fact",confidence:1,scope:"local",ttl:null,tags:[],status:"obsolete",operation:"delete",createdAt:k(),lastConfirmedAt:k(),updatedAt:k(),version:1,sync:ce()?"pending":void 0,hlc:E.serialize(E.tick())};await W(o,"delete");return}await Or(t.id||e,t.scope,t.status==="superseded");let r={...t,value:null,status:"obsolete",operation:"delete",updatedAt:k(),version:(t.version?t.version:0)+1,sync:ce()?"pending":void 0,hlc:E.serialize(E.tick())};await W(r,"delete"),_.set("memorio:memory:forgotten",{key:e});},async update(e,t,r={}){let o=await this._getEntry(e);if(!o){await this.remember(e,t,r);return}let n=`${o.id}__v${k()}`,s={...o,id:n,key:o.key,status:"superseded",supersededId:null,lastConfirmedAt:k()};await Y(s),await W(s,"supersede");let i={...o,value:t,lastConfirmedAt:k(),updatedAt:k(),version:(o.version?o.version:0)+1,sync:ce()?"pending":void 0,hlc:E.serialize(E.tick()),...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:$r(r.tags)}:{},...r.source?{source:r.source}:{}};await Y(i),await W(i,"update"),_.set("memorio:memory:updated",{key:e,entryId:i.id});},async stats(){let e=await De(),t={hot:0,session:0,local:0,durable:0},r={},o=0;for(let n of e)t[n.scope]=(t[n.scope]||0)+1,$e(n)&&o++,r[n.type]=(r[n.type]||0)+1;return {total:e.length,byScope:t,byType:r,expired:o}},async forgetExpired(){let e=await De(),t=0;for(let r of e)$e(r)&&r.status==="active"&&(r.status="obsolete",r.updatedAt=k(),r.operation="expire",await Y(r),await W(r,"expire"),t++);return t},async clear(){let e=await he();for(let[t,r]of Object.entries(e))await Or(t,r.scope,r.superseded);v.remove(Oe);},async _getEntry(e){let r=(await he())[e];if(!r){let o=Ar(S,e);return o!==void 0?qr(e,o,"hot"):null}return Mr(e,r.scope,r.superseded)},async _loadAll(){return De()},async _save(e){await Y(e);},async patch(e,t){let r=await this._getEntry(e);if(!r)return;let o=false;for(let s of t)s.op==="set"?(Tt({[r.key]:r.value},s.path.replace(/^[^.]+\./,""),s.value),o=true):s.op==="delete"&&(vn({[r.key]:r.value},s.path.replace(/^[^.]+\./,"")),o=true);if(!o)return;let n={...r,updatedAt:k(),lastConfirmedAt:k(),version:(r.version?r.version:0)+1,sync:ce()?"pending":void 0,hlc:E.serialize(E.tick()),patches:t,path:t[0]?.path};await Y(n),await W(n,"patch"),_.set("memorio:memory:patched",{key:e,patches:t});},journal:kt,configure(e){return Cr(e),this}};a();var Ct=()=>{let e=J(S);return Object.keys(e).filter(t=>!["list","remove","removeAll","lock","unlock"].includes(t))},jr=e=>{if(!e||typeof e!="string")return false;let t=e.replace(/^state\./,"").split("."),r=S;for(let o of t){if(r==null)return false;r=r[o];}return r!==void 0},Rr=e=>{let[t,r]=Nr(e);return !t||r===void 0?"undefined":Array.isArray(r)?"array":typeof r},Ir=e=>{let[t,r]=Nr(e);if(!(!t||r===void 0))return wn(r)},Lr=()=>{let e=[],t=(r,o)=>{if(r===null||typeof r!="object"||Array.isArray(r))return;let n=Object.keys(r).filter(s=>!["list","remove","removeAll","lock","unlock"].includes(s));for(let s of n){let i=o?`${o}.${s}`:s,l=r[s],f=l!==void 0,b=f?Array.isArray(l)?"array":typeof l:"undefined";e.push({path:i,type:b,defined:f}),f&&typeof l=="object"&&!Array.isArray(l)&&l.constructor?.name==="Object"&&t(l,i);}};return t(J(S),""),e};function Nr(e){if(!e||typeof e!="string")return [false,void 0];let t=e.replace(/^state\./,"").split("."),r=S;for(let o of t){if(r==null)return [false,void 0];r=r[o];}return [r!==void 0,r]}function wn(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}}if(!("memorio"in globalThis)){Object.defineProperty(globalThis,"memorio",{value:{setProps:()=>{},obj:{},array:[],dispatch:_,message:D,setDescription:()=>{}},writable:false,configurable:true,enumerable:false}),Object.defineProperty(globalThis,"events",{value:{},writable:true,enumerable:false}),typeof globalThis.addEventListener=="function"&&_.listen("memorio:memory:cleanup",async()=>Ae.forgetExpired?.()),Object.defineProperty(memorio,"version",{writable:false,enumerable:false,value:ct.version}),memorio.memory=Ae,Lt(),memorio.isBrowser=Ne,memorio.isNode=Ve,memorio.isDeno=He,memorio.isEdge=Je,memorio.getCapabilities=me,memorio.createContext=pe,memorio.listContexts=Ke,memorio.deleteContext=Fe,memorio.isolate=t=>pe(t),Object.defineProperty(memorio,"setContext",{writable:false,enumerable:false,value:t=>Qe(t)}),Object.defineProperty(memorio,"getContext",{writable:false,enumerable:false,value:()=>d.currentContext}),memorio.registerSchema=K.register,memorio.validate=K.validate,memorio.unregisterSchema=K.unregister,memorio.listSchemas=K.list,memorio.typed=ut,memorio.snapshot=ft,memorio.diff=mt,memorio.undo=ht,memorio.redo=vt,memorio.canUndo=gt,memorio.canRedo=bt,memorio.rollback=xt,memorio.trace=yt,memorio.enableHistory=pt,memorio.clearHistory=St,memorio.clearRedo=wt,Object.defineProperty(memorio,"dispatch",{value:_,writable:true,enumerable:false,configurable:true});let e=P;if(memorio.env={isDev:e,isProd:qe},memorio.global=function(){let t={state:S,store:v,session:A,cache:ie,idb:y,sqlite:u,observer:Pe,useObserver:Te};for(let r of Object.keys(t))r in globalThis||Object.defineProperty(globalThis,r,{value:t[r],writable:true,enumerable:false,configurable:true});},e&&memorio.global(),P){Object.defineProperty(memorio,"debug",{get:()=>d.debug,set:r=>{d.debug=r;},enumerable:false});let t=me();Object.defineProperty(memorio,"_platform",{writable:false,enumerable:false,value:t.platform}),Object.defineProperty(memorio,"_capabilities",{writable:false,enumerable:false,value:t}),Object.defineProperty(memorio,"_sessionId",{writable:false,enumerable:false,value:xe()}),memorio.logger=nt,"$state"in globalThis||Object.defineProperty(globalThis,"$state",{get:()=>globalThis.state,configurable:true}),"$store"in globalThis||Object.defineProperty(globalThis,"$store",{get:()=>globalThis.store,configurable:true}),"$session"in globalThis||Object.defineProperty(globalThis,"$session",{get:()=>globalThis.session,configurable:true}),"$cache"in globalThis||Object.defineProperty(globalThis,"$cache",{get:()=>globalThis.cache,configurable:true}),memorio.devtools=Ce,memorio.inspect=Ct,memorio.stateKeys=Ct,memorio.pathExists=jr,memorio.stateType=Rr,memorio.stateGet=Ir,memorio.stateSchema=Lr,memorio.help=function(){console.debug(`
25
+ \u{1F9E0} Memorio ${ct.version} - Help
27
26
 
28
- Core Modules:
29
- state - Reactive state management
27
+ Core Modules (runtime):
28
+ state - Reactive state management (DEV global)
30
29
  store - Persistent storage (localStorage/Map)
31
30
  session - Session storage (sessionStorage/Map)
32
31
  cache - In-memory cache
33
32
  idb - IndexedDB (browser only)
34
33
  sqlite - SQLite in browser (sql.js, optional)
35
34
 
36
- API:
37
- memorio.typed<T>() - Type-safe view of global state (compile-time only)
38
- memorio.registerSchema() - Register a validator for a state path
39
- memorio.validate() - Manually validate a value
40
- memorio.unregisterSchema() - Remove a registered schema
41
- memorio.listSchemas() - List all registered schema paths
42
-
43
- Context Management:
44
- memorio.isolate(name) - Create isolated context
45
- memorio.listContexts() - List all contexts
46
- memorio.deleteContext(id) - Delete a context
47
-
48
35
  Platform Detection:
49
- memorio.isBrowser() - Browser environment
50
- memorio.isNode() - Node.js environment
51
- memorio.isDeno() - Deno environment
52
- memorio.isEdge() - Edge/Worker environment
36
+ memorio.isBrowser() - Browser environment
37
+ memorio.isNode() - Node.js environment
38
+ memorio.isDeno() - Deno environment
39
+ memorio.isEdge() - Edge/Worker environment
53
40
  memorio.getCapabilities() - Full capabilities object
54
41
 
55
- DevTools:
56
- memorio.devtools.inspect() - Inspect all modules
57
- memorio.devtools.stats() - Show statistics
58
- memorio.devtools.watch() - Watch a path
59
- memorio.devtools.exportData() - Export as JSON
60
- memorio.devtools.importData() - Import from JSON
61
- memorio.devtools.clear() - Clear specific module
62
- memorio.devtools.clearAll() - Clear all modules
63
-
64
- Memory System:
65
- memorio.memory.remember(key, value, opts) - Store a memory with type, confidence, scope, TTL, tags
66
- memorio.memory.recall(key, opts) - Retrieve a memory with filtering
67
- memorio.memory.update(key, value, opts) - Update an existing memory
68
- memorio.memory.forget(key) - Delete a specific memory
69
- memorio.memory.context(opts) - Get ranked relevant memories (semantic context for AI)
70
- memorio.memory.stats() - Memory usage statistics
71
- memorio.memory.forgetExpired() - Remove all expired entries
72
- memorio.memory.clear() - Wipe all memories
73
- memorio.memory.configure({ sync }) - Optional cloud-sync provider + namespace
74
- memorio.memory.journal.pending() - Local op journal (SQLite/store)
75
-
76
- Scopes:
77
- hot - In-memory reactive state (volatile, fastest)
78
- session - sessionStorage (persists across page reloads, cleared on tab close)
79
- local - localStorage (persistent, survives browser restart)
80
- durable - IndexedDB (large datasets, async)
81
- sql - SQLite / sql.js (browser, optional, full SQL)
82
-
83
- TTL options:
84
- ttl: number (milliseconds) or null (never expires)
85
-
86
- Memory types:
87
- fact, preference, decision, task, context
88
-
89
- Shortcuts:
90
- state, store, session, cache, idb, sqlite - direct access to modules
91
- `);};memorio.help=function(){console.debug(`
92
- \u{1F9E0} Memorio ${ge.version} - Help
93
-
94
- Core Modules:
95
- state - Reactive state management
96
- store - Persistent storage (localStorage/Map)
97
- session - Session storage (sessionStorage/Map)
98
- cache - In-memory cache
99
- idb - IndexedDB (browser only)
100
- sqlite - SQLite in browser (sql.js, optional)
42
+ Context Management:
43
+ memorio.isolate(name) - Create isolated context
44
+ memorio.listContexts() - List all contexts
45
+ memorio.deleteContext(id) - Delete a context
101
46
 
102
- API:
103
- memorio.typed<T>() - Type-safe view of global state (compile-time only)
47
+ Schema Validation (runtime):
104
48
  memorio.registerSchema() - Register a validator for a state path
105
49
  memorio.validate() - Manually validate a value
106
50
  memorio.unregisterSchema() - Remove a registered schema
107
51
  memorio.listSchemas() - List all registered schema paths
52
+ memorio.typed<T>() - Type-safe view of global state (compile-time only)
108
53
 
109
- History & Time Travel:
54
+ History & Time Travel (runtime):
110
55
  memorio.snapshot() - Capture a deep snapshot of state
111
56
  memorio.diff(snap) - Diff snapshot against current state
112
57
  memorio.undo() / redo() - Undo / redo the last mutation
@@ -116,26 +61,7 @@ History & Time Travel:
116
61
  memorio.enableHistory() - Enable/disable mutation tracking
117
62
  memorio.clearHistory() - Clear undo/redo stacks and trace log
118
63
 
119
- Introspection:
120
- memorio.stateKeys() - List top-level state keys
121
- memorio.pathExists(path) - Check if a state path exists
122
- memorio.stateType(path) - Get runtime type of a state value
123
- memorio.stateGet(path) - Get a deep-cloned value at a path
124
- memorio.stateSchema() - Get a schema report of all state paths
125
-
126
- Context Management:
127
- memorio.isolate(name) - Create isolated context
128
- memorio.listContexts() - List all contexts
129
- memorio.deleteContext(id) - Delete a context
130
-
131
- Platform Detection:
132
- memorio.isBrowser() - Browser environment
133
- memorio.isNode() - Node.js environment
134
- memorio.isDeno() - Deno environment
135
- memorio.isEdge() - Edge/Worker environment
136
- memorio.getCapabilities() - Full capabilities object
137
-
138
- DevTools:
64
+ DevTools (development-only):
139
65
  memorio.devtools.inspect() - Inspect all modules
140
66
  memorio.devtools.stats() - Show statistics
141
67
  memorio.devtools.watch() - Watch a path
@@ -144,17 +70,27 @@ DevTools:
144
70
  memorio.devtools.clear() - Clear specific module
145
71
  memorio.devtools.clearAll() - Clear all modules
146
72
 
147
- Memory System:
73
+ Introspection (development-only):
74
+ memorio.stateKeys() - List top-level state keys
75
+ memorio.pathExists(path) - Check if a state path exists
76
+ memorio.stateType(path) - Get runtime type of a state value
77
+ memorio.stateGet(path) - Get a deep-cloned value at a path
78
+ memorio.stateSchema() - Get a schema report of all state paths
79
+
80
+ Debug:
81
+ memorio.debug = true - Enable debug output (DEV only)
82
+
83
+ Memory System (runtime):
148
84
  memorio.memory.remember(key, value, opts) - Store a memory with type, confidence, scope, TTL, tags
149
85
  memorio.memory.recall(key, opts) - Retrieve a memory with filtering
150
86
  memorio.memory.update(key, value, opts) - Update an existing memory
151
87
  memorio.memory.forget(key) - Delete a specific memory
152
88
  memorio.memory.context(opts) - Get ranked relevant memories (semantic context for AI)
153
89
  memorio.memory.stats() - Memory usage statistics
154
- memorio.memory.forgetExpired() - Remove all expired entries
155
- memorio.memory.clear() - Wipe all memories
156
- memorio.memory.configure({ sync }) - Optional cloud-sync provider + namespace
157
- memorio.memory.journal.pending() - Local op journal (SQLite/store)
90
+ memorio.memory.forgetExpired() - Remove all expired entries
91
+ memorio.memory.clear() - Wipe all memories
92
+ memorio.memory.configure({ sync }) - Optional cloud-sync provider + namespace
93
+ memorio.memory.journal.pending() - Local op journal (SQLite/store)
158
94
 
159
95
  Scopes:
160
96
  hot - In-memory reactive state (volatile, fastest)
@@ -169,8 +105,9 @@ TTL options:
169
105
  Memory types:
170
106
  fact, preference, decision, task, context
171
107
 
172
- Shortcuts:
108
+ Console shortcuts (DEV only):
173
109
  state, store, session, cache, idb, sqlite - direct access to modules
174
- `);};var Ro=globalThis.memorio,fa=globalThis.events,pa=e=>ne(e),ya=globalThis.memorio?.help,ga=e=>u.currentContext=e,ba=()=>u.currentContext,ha=Ro;
110
+ $state, $store, $session, $cache - aliases for the above
111
+ `);};}}var gl=P?Ce:void 0,_n=globalThis.memorio,bl=globalThis.events,hl=e=>pe(e),vl=globalThis.memorio?.help,xl=e=>d.currentContext=e,Sl=()=>d.currentContext,wl=_n;
175
112
 
176
- export { ue as cache, Fe as canRedo, We as canUndo, Ze as clearHistory, et as clearRedo, ne as createContext, ha as default, $e as deleteContext, Ne as devtools, ze as diff, E as dispatch, Qe as enableHistory, fa as events, oe as getCapabilities, ba as getContext, ya as help, d as idb, u as internal, we as isBrowser, Te as isDeno, Pe as isEdge, Ee as isNode, pa as isolate, Me as listContexts, gt as listSchemas, Be as logger, Ro as memorio, xe as memory, P as message, pe as observer, rt as pathExists, Se as propertyName, Ye as redo, pt as registerSchema, Xe as rollback, L as schema, C as session, ga as setContext, He as snapshot, m as sqlite, S as state, nt as stateGet, tt as stateKeys, st as stateSchema, ot as stateType, h as store, Ke as trace, Ve as typed, Ge as undo, yt as unregisterSchema, ye as useObserver, ft as validate };
113
+ export { P as DEV, qe as PROD, ie as cache, bt as canRedo, gt as canUndo, St as clearHistory, wt as clearRedo, pe as createContext, wl as default, Fe as deleteContext, gl as devtools, mt as diff, _ as dispatch, pt as enableHistory, bl as events, dn as fractional, me as getCapabilities, Sl as getContext, vl as help, E as hlc, y as idb, d as internal, Ne as isBrowser, He as isDeno, Je as isEdge, Ve as isNode, hl as isolate, Ke as listContexts, qt as listSchemas, nt as logger, _n as memorio, Ae as memory, D as message, Pe as observer, Re as propertyName, vt as redo, At as registerSchema, xt as rollback, K as schema, A as session, xl as setContext, ft as snapshot, u as sqlite, S as state, v as store, yt as trace, ut as typed, ht as undo, Mt as unregisterSchema, Te as useObserver, Ot as validate };
package/llms.txt CHANGED
@@ -357,7 +357,7 @@ Isolation is implemented as a **key-prefix convention** inside the same underlyi
357
357
 
358
358
  ### `memorio.typed<T>()` - Typed Store (compile-time safety)
359
359
 
360
- Returns the global `state` proxy cast to type `T`. The same Proxy instance no overhead. Use for TypeScript autocomplete and static type checking.
360
+ Returns the global `state` proxy cast to type `T`. The same Proxy instance - no overhead. Use for TypeScript autocomplete and static type checking.
361
361
 
362
362
  ```javascript
363
363
  const app = memorio.typed<AppState>()
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "memorio",
3
3
  "codeName": "memorio",
4
- "version": "4.8.0",
4
+ "version": "4.9.5",
5
5
  "description": "Memorio, State + Observer, Store and iDB for an easy life - Cross-platform compatible",
6
6
  "main": "./index.cjs",
7
7
  "browser": "./index.js",
package/types/env.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Runtime environment detection.
3
+ *
4
+ * `DEV` and `PROD` are derived at runtime from `process.env.NODE_ENV`
5
+ * (polyfilled by Vite/Webpack in browsers). No build-time environment
6
+ * constant is required. Import from `core/env.ts`:
7
+ *
8
+ * import { DEV, PROD } from './core/env'
9
+ */
@@ -33,6 +33,28 @@ export const useObserver: _useObserver
33
33
  export const dispatch: _dispatch
34
34
  export const events: Record<string, any>
35
35
 
36
+ export const DEV: boolean
37
+ export const PROD: boolean
38
+
39
+ export const hlc: {
40
+ tick(incoming?: { physical: number; logical: number; node: string }): { physical: number; logical: number; node: string }
41
+ receive(remote: { physical: number; logical: number; node: string }): { physical: number; logical: number; node: string }
42
+ compare(a: { physical: number; logical: number; node: string }, b: { physical: number; logical: number; node: string }): number
43
+ happenedBefore(a: { physical: number; logical: number; node: string }, b: { physical: number; logical: number; node: string }): boolean
44
+ serialize(hlc: { physical: number; logical: number; node: string }): string
45
+ parse(serialized: string): { physical: number; logical: number; node: string } | null
46
+ getNodeId(): string
47
+ }
48
+ export const fractional: {
49
+ generateBetween(left: string | null, right: string | null, minChars?: number): string
50
+ firstKey(): string
51
+ after(left: string): string
52
+ before(right: string): string
53
+ between(left: string, right: string): string
54
+ reorder<T extends { key: string }>(items: T[], fromIndex: number, toIndex: number): string[]
55
+ reindex<T extends { key: string }>(items: T[]): T[]
56
+ }
57
+
36
58
  export const isBrowser: () => boolean
37
59
  export const isNode: () => boolean
38
60
  export const isDeno: () => boolean
@@ -45,11 +67,37 @@ export const isolate: _memorio['isolate']
45
67
  export const message: (...args: unknown[]) => void
46
68
  export const help: () => void
47
69
 
70
+ // ── Development-only (tree-shaken from production builds) ────────────
71
+ export const devtools: {
72
+ inspect: () => void
73
+ stats: () => any
74
+ clear: (module: string) => void
75
+ clearAll: () => void
76
+ exportData: () => string
77
+ importData: (json: string) => void
78
+ watch: (module: string, path: string) => void
79
+ help: () => void
80
+ } | undefined
81
+ export const logger: {
82
+ configure: (opts: Record<string, unknown>) => void
83
+ enable: () => void
84
+ disable: () => void
85
+ isEnabled: (module: string) => boolean
86
+ log: (module: string, action: string, path: string, value?: any, previousValue?: any) => void
87
+ getHistory: () => any[]
88
+ clearHistory: () => void
89
+ getStats: () => Record<string, number>
90
+ exportLogs: () => string
91
+ }
92
+
93
+ // ── Schema validation (runtime) ───────────────────────────────────────
48
94
  export const registerSchema: (path: string, schema: any) => void
49
95
  export const validate: (path: string, value: any) => { valid: boolean; errors?: string[] }
50
96
  export const unregisterSchema: (path: string) => boolean
51
97
  export const listSchemas: () => string[]
52
98
  export const typed: <T extends Record<string, any>>() => T
99
+
100
+ // ── History / time-travel (runtime) ───────────────────────────────────
53
101
  export const snapshot: () => Record<string, any>
54
102
  export const diff: (snap: Record<string, any>) => Array<{ path: string; oldValue: any; newValue: any }>
55
103
  export const undo: () => any
@@ -61,12 +109,13 @@ export const trace: () => any[]
61
109
  export const enableHistory: (enabled?: boolean) => void
62
110
  export const clearHistory: () => void
63
111
  export const clearRedo: () => void
112
+
113
+ // ── Introspection (development-only) ─────────────────────────────────
64
114
  export const stateKeys: () => string[]
65
115
  export const pathExists: (path: string) => boolean
66
116
  export const stateType: (path: string) => string
67
117
  export const stateGet: (path: string) => any
68
118
  export const stateSchema: () => Array<{ path: string; type: string; defined: boolean }>
69
-
70
119
  export const propertyName: (container: any, object: any) => string | null
71
120
  export const internal: {
72
121
  debug: boolean