memorio 4.9.5 → 4.9.7

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.
Files changed (3) hide show
  1. package/index.cjs +4369 -48
  2. package/index.js +4326 -7
  3. package/package.json +7 -8
package/index.cjs CHANGED
@@ -2,9 +2,2933 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var v=(e,t)=>()=>(e&&(t=e(e=0)),t);var a=v(()=>{});exports.DEV = void 0;exports.PROD = void 0;var L=v(()=>{a();exports.DEV=!(typeof process<"u"),exports.PROD=!exports.DEV;});var qe,y,Vr,Ct;exports.propertyName = void 0;exports.internal = void 0;var j=v(()=>{a();qe="__memorio_internal_state",y=globalThis[qe]||{debug:false,tracking:false,trackedPaths:new Set,locked:false,lastAccessedPath:"",stateVersion:0,currentContext:null,mutations:[],undoStack:[],redoStack:[],maxHistory:100,historyEnabled:false};globalThis[qe]||(globalThis[qe]=y);Vr={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=[];}},Ct=["list","state","store","idb","sqlite","observer","useObserver","remove","removeAll","_platform","_capabilities","_sessionId"],exports.propertyName=(e,t)=>String(t!==void 0?t:e).replace("() => ",""),exports.internal=Vr;});exports.message = void 0;var c,S=v(()=>{a();j();L();exports.message=(...e)=>{exports.DEV&&exports.internal.debug===true&&console.debug(...e);},c=exports.message;});function ve(){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 ue(){let e=globalThis;return e.Deno&&e.Deno.version?"deno":typeof process<"u"&&process.versions&&process.versions.node?"node":typeof globalThis<"u"&&typeof globalThis.ServiceWorkerGlobalScope<"u"?"edge":typeof window<"u"&&typeof document<"u"?"browser":"unknown"}function Le(){return ue()==="browser"}function Ne(){return ue()==="node"}function Ve(){return ue()==="deno"}function He(){return ue()==="edge"}function Ue(){try{if(typeof sessionStorage<"u"){let e="__memorio_test__";return sessionStorage.setItem(e,"1"),sessionStorage.removeItem(e),sessionStorage}}catch{}return null}function Je(){try{if(typeof localStorage<"u"){let e="__memorio_test__";return localStorage.setItem(e,"1"),localStorage.removeItem(e),localStorage}}catch{}return null}function Be(){return typeof indexedDB<"u"}function de(){let e=globalThis;return typeof e.WebAssembly>"u"||typeof e.WebAssembly.instantiate!="function"?false:typeof e.window<"u"}function Ur(){return typeof globalThis.dispatchEvent=="function"}function fe(){let e=ue(),t=typeof globalThis.isSecureContext<"u"?globalThis.isSecureContext:e==="browser";return {platform:e,hasSessionStorage:Ue()!==null,hasLocalStorage:Je()!==null,hasIndexedDB:Be(),hasSqlJs:de(),hasDispatchEvent:Ur(),hasNavigator:typeof navigator<"u",hasProcess:typeof process<"u",isSecureContext:t,sessionId:ve()}}function It(){let e=fe(),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){ce.has(r)||ce.set(r,[]),ce.get(r).push(o);},t.removeEventListener=function(r,o){let n=ce.get(r);if(n){let s=n.indexOf(o);s>-1&&n.splice(s,1);}},t.dispatchEvent=function(r){let o=ce.get(r.type);return o&&o.forEach(n=>{try{n(r);}catch(s){console.error("Event listener error:",s);}}),true});}function me(e){let t=e||`context_${ve()}`;Qe(t);let r={state:{},store:new Map,session:new Map,cache:new Map};return xe.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 ze(){return Array.from(xe.keys())}function Ke(e){return xe.delete(e)}function Qe(e){exports.internal.currentContext=e;}var ce,Ie,xe,K=v(()=>{a();j();ce=new Map;Ie="__memorio_contexts__",xe=globalThis[Ie]||new Map;globalThis[Ie]||(globalThis[Ie]=xe);});function X(){let t=exports.internal.currentContext||""||"default";return Fe.has(t)||Fe.set(t,new Map),Fe.get(t)}function Y(){let e=exports.internal.currentContext||"";return e?`${e}-`:"memorio_store_"}function We(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`),""):Y()+e}function Jr(e){let t=G?A.getItem(e):X().get(e);return t&&JSON.parse(t)}function Br(e,t){let r=JSON.stringify(t);G?A.setItem(e,r):X().set(e,r);}function zr(e){if(G){if(A.getItem(e))return A.removeItem(e),true}else if(X().has(e))return X().delete(e),true;return false}var A,Fe,G,Ye;exports.store = void 0;var ne=v(()=>{a();K();j();S();A=Je(),Fe=new Map;G=A!==null;Ye="__memorio_store_instance__";globalThis[Ye]?exports.store=globalThis[Ye]:(exports.store=new Proxy({},{}),Object.defineProperties(exports.store,{get:{value:e=>{if(!e)return console.warn("[memorio store] store.get() called with empty or null key - returning null"),null;try{return Jr(We(e))}catch(t){exports.message(`Error parsing store item '${e}': ${t}`);}return null}},getMultiple:{value:e=>{let t={};for(let r of e)try{let o=exports.store.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=We(e);if(!r)return false;if(typeof t=="function")return console.warn("[memorio store] functions are not storable - write aborted for key: "+e),exports.message("Storing functions is not secure and is blocked for safety."),false;try{Br(r,t);}catch(o){return exports.message(`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=We(e);if(!t)return false;try{return zr(t)}catch(r){exports.message(`Error removing store item '${e}': ${r}`);}return false}},delete:{value:e=>exports.store.remove(e)},removeAll:{value:()=>{if(G){let e=[];for(let t=0;t<A.length;t++){let r=A.key(t);r?.startsWith(Y())&&e.push(r);}e.forEach(t=>A.removeItem(t));}else X().clear();return true}},clearAll:{value:()=>(exports.store.removeAll(),true)},quota:{value:async()=>[0,0]},size:{value:()=>{let e=0;return G?Object.keys(A).forEach(t=>{if(t.startsWith(Y())){let r=A.getItem(t);r&&(e+=r.length);}}):X().forEach(t=>{e+=t.length;}),e}},isPersistent:{get:()=>G},list:{value:()=>{let e={};try{if(G)for(let t=0;t<A.length;t++){let r=A.key(t);if(r?.startsWith(Y())){let o=r.replace(Y(),""),n=A.getItem(r);if(n!==null)try{e[o]=JSON.parse(n);}catch{e[o]=n;}}}else X().forEach((t,r)=>{if(r.startsWith(Y())){let o=r.replace(Y(),"");try{e[o]=JSON.parse(t);}catch{e[o]=t;}}});}catch(t){exports.message(`Error listing store items: ${t}`);}return e}}}),Object.freeze(exports.store),globalThis[Ye]=exports.store);});var Wr={};var Lt=v(()=>{a();T();S();exports.idb.db.create=(e,t=1)=>new Promise((r,o)=>{if(!exports.idb.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 Yr={};var Nt=v(()=>{a();T();exports.idb.db.list=async()=>{if(!("indexedDB"in globalThis)||!indexedDB.databases)return [];try{let e=await indexedDB.databases();return globalThis.idbases=e||[],await exports.idb.db.size(),globalThis.idbases}catch(e){return console.error("Error listing databases:",e),[]}};});var Gr={};var Vt=v(()=>{a();T();exports.idb.db.exist=e=>idbases?.some(t=>t.name===e);});var Xr={};var Ht=v(()=>{a();T();exports.idb.db.quota=()=>navigator.storage.estimate();});var Zr={};var Ut=v(()=>{a();T();S();exports.idb.db.delete=e=>new Promise((t,r)=>{c(`Removing database ${e}...`),(()=>{let n=indexedDB.deleteDatabase(e);n.onsuccess=()=>{c(`${e} database removed successfully`),exports.idb.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 eo={};var Jt=v(()=>{a();T();S();exports.idb.db.size=async()=>{if(!(!idbases||idbases.length===0))for(let e=0;e<idbases.length;e++){let t=idbases[e];try{let r=await exports.idb.db.create(t.name,t.version),o=Array.from(r.objectStoreNames),n=0;for(let s of o){let i=await exports.idb.table.size(r,s);n+=i;}t.size=n,r.close();}catch(r){c(`Could not calculate size for ${t.name}:${r}`);}}};});var to={};var Bt=v(()=>{a();T();exports.idb.db.version=e=>{let t=0;for(let r of idbases){r.name===e&&(t=r.version);break}return t};});var ro={};var zt=v(()=>{a();T();S();exports.idb.db.support=()=>{let e="indexedDB"in globalThis;return e||c("Your environment doesn't support IndexedDB"),e};});var oo={};var Kt=v(()=>{a();T();S();exports.idb.table.create=(e,t)=>new Promise((r,o)=>{try{let s=(Number(exports.idb.db.version(e))||0)+1,i=indexedDB.open(e,s);i.onupgradeneeded=l=>{let f=l.target.result;if(!f.objectStoreNames.contains(t)){let g=f.createObjectStore(t,{keyPath:"id",autoIncrement:!0});g.createIndex("id","id",{unique:!0}),g.createIndex("data","data",{unique:!1}),c(`Table ${t} created in ${e}`);}},i.onsuccess=()=>{i.result.close(),exports.idb.db.list(),r();},i.onerror=()=>{console.error(`Error creating table ${t}:`,i.error),o(i.error);};}catch(n){console.error("Critical error in table.create:",n),o(n);}});});var no={};var Qt=v(()=>{a();T();S();exports.idb.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 g=>{let b=g.target.result;if(b){try{let P=b.value;n+=JSON.stringify(P).length;}catch(P){c(`Error stringifying IDB value tracking size:${P}`);}s++,s%200===0&&await new Promise(P=>setTimeout(P,0)),b.continue();}else r(n);},f.onerror=()=>{o(f.error);};});});var so={};var Ft=v(()=>{a();T();S();exports.idb.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 g=i.transaction(t,"readwrite").objectStore(t).delete(r);g.onsuccess=()=>{i.close(),c(`Record ${r} deleted from ${t}`),o();},g.onerror=()=>{i.close(),n(g.error);};},s.onerror=()=>n(s.error);});exports.idb.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 g=i.transaction(t,"readwrite").objectStore(t).clear();g.onsuccess=()=>{i.close(),c(`All data cleared from ${t}`),r();},g.onerror=()=>{i.close(),o(g.error);};},n.onerror=()=>o(n.error);});});var io={};var Wt=v(()=>{a();T();S();exports.idb.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 g=i.transaction(t,"readwrite").objectStore(t).put(r);g.onsuccess=()=>{i.close(),c(`Data saved in ${e}.${t}`),o(g.result);},g.onerror=b=>{i.close(),c(`Database insert error: ${g.error?.message}`),n(g.error);};},s.onerror=()=>{n(s.error);};});});var ao={};var Yt=v(()=>{a();T();exports.idb.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 b=l.transaction(t,"readonly").objectStore(t).get(r);b.onsuccess=()=>{l.close(),o(b.result);},b.onerror=()=>{l.close(),n(b.error);};},s.onerror=()=>{n(s.error);};});});var lo;exports.idb = void 0;var T=v(()=>{a();K();L();lo=Be(),exports.idb={db:{},table:{},data:{}};lo?(async()=>(Object.defineProperty(exports.idb,"db",{value:{},writable:true,configurable:true}),Object.defineProperty(exports.idb,"table",{value:{},writable:true,configurable:true}),Object.defineProperty(exports.idb,"data",{value:{},writable:true,configurable:true}),Object.defineProperty(globalThis,"idbases",{value:[],writable:true,configurable:true,enumerable:false}),await Promise.all([Promise.resolve().then(()=>(Lt(),Wr)),Promise.resolve().then(()=>(Nt(),Yr)),Promise.resolve().then(()=>(Vt(),Gr)),Promise.resolve().then(()=>(Ht(),Xr)),Promise.resolve().then(()=>(Ut(),Zr)),Promise.resolve().then(()=>(Jt(),eo)),Promise.resolve().then(()=>(Bt(),to)),Promise.resolve().then(()=>(zt(),ro)),Promise.resolve().then(()=>(Kt(),oo)),Promise.resolve().then(()=>(Qt(),no)),Promise.resolve().then(()=>(Ft(),so)),Promise.resolve().then(()=>(Wt(),io)),Promise.resolve().then(()=>(Yt(),ao))]),Object.preventExtensions(exports.idb),Object.seal(exports.idb),Object.freeze(exports.idb)))():(exports.idb._disabled=true,exports.idb._warning="IndexedDB is not available in this environment (Node.js/Deno). Use store or session for persistence.",exports.DEV&&console.warn("Memorio IDB: IndexedDB is not available in this environment. Use store or session for data persistence."));});var yo={};function fo(){let e=globalThis;return typeof e.document<"u"&&typeof e.document.createElement=="function"}function mo(e){let t=globalThis;return t.__memorioSqlJsScript===e?Promise.resolve():(et||(et=new Promise((r,o)=>{if(t.initSqlJs&&typeof t.initSqlJs=="function"){t.__memorioSqlJsScript=e,r();return}if(!fo()){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);})),et)}var we,_e,Gt,co,uo,et,po,Xt=v(()=>{a();D();K();S();we=null,_e=null,Gt="https://cdn.jsdelivr.net/npm/sql.js/dist/sql-wasm-browser.js",co=Gt.replace(/sql-wasm-browser\.js$/,""),uo=e=>(globalThis.sqliteWasmBase||co)+e,et=null;po=async()=>{let e=globalThis;return typeof e.initSqlJs=="function"?e.initSqlJs:(await mo(Gt),e.initSqlJs||e)};exports.sqlite.db.support=()=>de();exports.sqlite.db.getSQL=async()=>{if(_e)return _e;if(we)return we;let e=globalThis,t=e.sqliteConfig||{},r=(async()=>{if(typeof t.loader=="function")return await t.loader();let o=await po(),s=await(typeof o=="function"?o:o&&(o.default||o))({locateFile:t.locateFile||uo});return e.sqliteVersion=s?.version||"sql.js",c("Memorio SQLite: sql.js engine loaded"),s})();we=r;try{return _e=await r,_e}catch(o){try{exports.sqlite._disabled=!0;}catch{}try{exports.sqlite._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{we=null;}};exports.sqlite.db.version=()=>globalThis.sqliteVersion||null;});function go(){let e=N.sqliteConfig||{};return e.namespace?`ns:${e.namespace}`:"default"}function tt(e){return `memorio:sqlite:db:${go()}:${e}`}function bo(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 ho(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 Ee(e){return new Promise(t=>{let r=N.__sqliteDbs&&N.__sqliteDbs[e];if(!r||typeof r.export!="function"){t(false);return}try{let o=r.export();exports.store.set(tt(e),bo(o)),c(`Memorio SQLite: persisted '${e}' to store`),t(!0);}catch(o){console.warn("Memorio SQLite: persist snapshot failed",o),t(false);}})}function rt(e){let t=exports.store.get(tt(e));if(!t)return null;try{return ho(t)}catch{return null}}function vo(e){exports.store.remove(tt(e));}function er(e,t){if(!(!t||typeof t.updateHook!="function")){Zt[e]=true;try{t.updateHook(()=>{re[e]&&clearTimeout(re[e]),re[e]=setTimeout(()=>{re[e]=null,Ee(e);},250);});}catch(r){console.warn("Memorio SQLite: could not attach updateHook",r);}}}var N,Zt,re,tr=v(()=>{a();D();ne();S();N=globalThis,Zt={},re={};exports.sqlite.db.persist=async(e="memorio")=>Ee(e);exports.sqlite.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 exports.sqlite.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};exports.sqlite.db.close=async(e="memorio")=>{let t=N.__sqliteDbs&&N.__sqliteDbs[e];if(t&&typeof t.close=="function"){try{await Ee(e);}catch{}try{t.close();}catch(r){console.warn("Memorio SQLite: close failed",r);}}if(N.__sqliteDbs&&delete N.__sqliteDbs[e],N.sqlbases){let r=N.sqlbases.findIndex(o=>o&&o.name===e);r>-1&&N.sqlbases.splice(r,1);}delete Zt[e],re[e]&&(clearTimeout(re[e]),re[e]=null),vo(e);};exports.sqlite.db.loadSnapshot=rt;exports.sqlite.db.saveSnapshot=Ee;});var xo={};var rr=v(()=>{a();D();S();tr();exports.sqlite.db.create=async(e="memorio",t={})=>{let r=await exports.sqlite.db.getSQL(),o=globalThis,n=!!(t&&t.persistence)||!!(o.sqliteConfig&&o.sqliteConfig.persistence),s;if(n&&!t.data){let b=rt(e);b&&(s=b);}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 g=o.sqlbases.findIndex(b=>b&&b.name===e);return g>-1?o.sqlbases[g]={name:e,db:l,persistence:f.persistence}:o.sqlbases.push({name:e,db:l,persistence:f.persistence}),n&&er(e,l),l};});var So={};var or=v(()=>{a();D();exports.sqlite.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 wo={};var nr=v(()=>{a();D();S();exports.sqlite.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 _o={};var sr=v(()=>{a();D();exports.sqlite.db.list=()=>{let e=globalThis.__sqliteDbs;return e?Object.keys(e):[]};});var Eo={};var ir=v(()=>{a();D();exports.sqlite.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=exports.sqlite.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 ko={};var ar=v(()=>{a();D();exports.sqlite.db.export=async(e="memorio")=>exports.sqlite.db.get(e).export();});var Po={};var lr=v(()=>{a();D();exports.sqlite.db.import=async(e,t)=>exports.sqlite.db.create(e,{data:t});});var To={};var cr=v(()=>{a();D();S();exports.sqlite.query.run=async(e="memorio",t,r=[])=>{let o=exports.sqlite.db.get(e);return c(`Memorio SQLite: run -> ${t}`),o.run(t,r),o.getRowsModified()};});var Co={};var ur=v(()=>{a();D();exports.sqlite.query.select=async(e="memorio",t,r=[])=>{let n=exports.sqlite.db.get(e).prepare(t,r),s=[];try{for(;n.step();)s.push(n.getAsObject());}finally{try{n.free();}catch{}}return s};});var Do={};var dr=v(()=>{a();D();exports.sqlite.data.set=async(e="memorio",t,r=[])=>exports.sqlite.query.run(e,t,r);});var $o={};var fr=v(()=>{a();D();exports.sqlite.data.get=async(e="memorio",t,r=[])=>{let o=await exports.sqlite.query.select(e,t,r);return o.length?o[0]:null};});var Oo;exports.sqlite = void 0;var D=v(()=>{a();K();L();Oo=de(),exports.sqlite={db:{},query:{},data:{}};exports.sqlite.config=e=>{let t=globalThis;return t.sqliteConfig={...t.sqliteConfig,...e},e&&e.wasmUrl&&(t.sqliteWasmBase=e.wasmUrl.endsWith("/")?e.wasmUrl:e.wasmUrl+"/"),exports.sqlite};Object.defineProperty(exports.sqlite,"ready",{enumerable:false,configurable:false,get:()=>{let e=globalThis;return e.sqliteReady||(e.sqliteReady=typeof exports.sqlite.db.getSQL=="function"?exports.sqlite.db.getSQL().then(()=>{}).catch(()=>{}):Promise.resolve()),e.sqliteReady}});Oo?(async()=>(Object.defineProperty(exports.sqlite,"db",{value:{},writable:false,configurable:true,enumerable:true}),Object.defineProperty(exports.sqlite,"query",{value:{},writable:false,configurable:true,enumerable:true}),Object.defineProperty(exports.sqlite,"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(()=>(Xt(),yo)),Promise.resolve().then(()=>(rr(),xo)),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))])))():(exports.sqlite._disabled=true,exports.sqlite._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.',exports.DEV&&(globalThis.sqliteDisabled=true,globalThis.sqliteWarning=exports.sqlite._warning,console.warn("Memorio SQLite: sql.js is not available in this environment (requires browser + WebAssembly). Use store or session for persistence.")));});a();L();a();j();S();a();var w={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();S();var oe=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}},$t=(e,t)=>{let r=oe.get(e);return r?Dt(t,r,e):{valid:true}},Ot=(e,t)=>{typeof t=="function"?oe.set(e,{validator:t}):oe.set(e,t),c(`[memorio schema] Registered schema for '${e}'`);},At=e=>oe.delete(e),Mt=()=>Array.from(oe.keys()),Hr=e=>oe.get(e),z={register:Ot,validate:$t,unregister:At,list:Mt,get:Hr};L();var he=Symbol("memorio.target"),qt=new WeakMap,H=(e,t=null)=>{if(e===null||typeof e!="object")return e;if(e[he]!==void 0)return H(e[he],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]=H(e[n],t);return o},jt=(e,t,r=".")=>t.concat(e).join(r),Rt=(e,t,r=[])=>{let o=n=>{try{w.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===he||n[he]!==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;exports.internal.lastAccessedPath=i,exports.internal.tracking&&exports.internal.trackedPaths.add(i);}if(s==="_lastPath")return exports.internal.lastAccessedPath;if(s==="remove")return i=>(delete 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=qt.get(i);return l||(l=Rt(i,t,r.concat(s)),qt.set(i,l)),l}return i}catch(i){console.error("Error: ",i);return}},set(n,s,i){if(exports.internal.locked)return console.error("Error: state is locked. Use state.unlock() to enable modifications."),false;if(Ct.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=jt(s,r),f=H(i),g=z.validate(l,f);if(!g.valid)return exports.DEV&&exports.internal.debug&&console.error(`[memorio schema] Validation failed for '${l}':`,g.errors),c(`[memorio schema] Validation failed for '${l}': `+(g.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),exports.internal.bumpStateVersion(),n[s]&&typeof n[s]=="object"){let b=n[s];if(b&&typeof b=="object")try{Object.defineProperty(b,"__locked",{writable:!0,enumerable:!1,configurable:!1,value:!1}),Object.defineProperty(b,"lock",{writable:!1,enumerable:!1,configurable:!1,value:()=>{Object.defineProperty(b,"__locked",{writable:!0,enumerable:!1,configurable:!1,value:!0}),c(`State '${s}' is now locked.`);}}),Object.defineProperty(b,"unlock",{writable:!1,enumerable:!1,configurable:!1,value:()=>{Object.defineProperty(b,"__locked",{writable:!0,enumerable:!1,configurable:!1,value:!1}),c(`State '${s}' is now unlocked.`);}});}catch{}}return !0}catch(l){return console.error("Error in set trap:",l),false}},deleteProperty(n,s){try{let i=jt(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)}})},Re="__memorio_state_instance__";exports.state = void 0;globalThis[Re]?exports.state=globalThis[Re]:(exports.state=Rt({},e=>{exports.internal.historyEnabled&&exports.internal.recordMutation({path:e.path,action:e.action,newValue:e.newValue,previousValue:e.previousValue,timestamp:Date.now()});}),exports.state.lock=()=>{exports.internal.locked=true,c("State is now locked. All modifications are blocked.");},exports.state.unlock=()=>{exports.internal.locked=false,c("State is now unlocked. Modifications are allowed.");},globalThis[Re]=exports.state);ne();a();K();j();S();var M=Ue(),Ge=new Map;function te(){let t=exports.internal.currentContext||""||"default";return Ge.has(t)||Ge.set(t,new Map),Ge.get(t)}var ee=M!==null;function Z(){let e=exports.internal.currentContext||"";return e?`${e}-`:"memorio_session_"}function Xe(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`),""):Z()+e}function Kr(e){let t=ee?M.getItem(e):te().get(e);return t&&JSON.parse(t)}function Qr(e,t){let r=JSON.stringify(t);ee?M.setItem(e,r):te().set(e,r);}function Fr(e){if(ee){if(M.getItem(e))return M.removeItem(e),true}else if(te().has(e))return te().delete(e),true;return false}var Ze="__memorio_session_instance__";exports.session = void 0;globalThis[Ze]?exports.session=globalThis[Ze]:(exports.session=new Proxy({},{}),Object.defineProperties(exports.session,{get:{value:e=>{if(!e)return console.warn("[memorio session] session.get() called with empty or null key - returning null"),null;try{return Kr(Xe(e))}catch(t){exports.message(`Error parsing session item '${e}':${t}`);}return null}},set:{value:(e,t)=>{if(!e)return console.warn("[memorio session] session.set() called with empty or null key - write aborted"),false;let r=Xe(e);if(!r)return false;if(typeof t=="function")return console.warn("[memorio session] functions are not storable - write aborted for key: "+e),exports.message("It's not secure to session functions."),false;try{Qr(r,t);}catch(o){return exports.message(`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=Xe(e);if(!t)return false;try{return Fr(t)}catch(r){exports.message(`Error removing session item '${e}': ${r}`);}return false}},delete:{value:e=>exports.session.remove(e)},removeAll:{value:()=>{if(ee){let e=[];for(let t=0;t<M.length;t++){let r=M.key(t);r?.startsWith(Z())&&e.push(r);}e.forEach(t=>M.removeItem(t));}else te().clear();return true}},clearAll:{value:()=>(exports.session.removeAll(),true)},quota:{value:async()=>[0,0]},size:{value:()=>{let e=0;return ee?Object.keys(M).forEach(t=>{if(t.startsWith(Z())){let r=M.getItem(t);r&&(e+=r.length);}}):te().forEach(t=>{e+=t.length;}),e}},isPersistent:{get:()=>ee},list:{value:()=>{let e={};try{if(ee)for(let t=0;t<M.length;t++){let r=M.key(t);if(r?.startsWith(Z())){let o=r.replace(Z(),""),n=M.getItem(r);if(n!==null)try{e[o]=JSON.parse(n);}catch{e[o]=n;}}}else te().forEach((t,r)=>{if(r.startsWith(Z())){let o=r.replace(Z(),"");try{e[o]=JSON.parse(t);}catch{e[o]=t;}}});}catch(t){exports.message(`Error listing session items: ${t}`);}return e}}}),Object.freeze(exports.session),globalThis[Ze]=exports.session);a();var Se="__memorio_cache_instance__",I={},se=globalThis[Se]?globalThis[Se]:new Proxy({},{get(e,t){let r=t;return r==="get"?o=>I[o]:r==="set"?(o,n)=>{I[o]=n;}:r==="remove"?o=>(delete I[o],true):r==="removeAll"?()=>(Object.keys(I).forEach(o=>delete I[o]),true):r==="clear"?()=>(Object.keys(I).forEach(o=>delete I[o]),true):r==="list"?()=>({...I}):I[r]},set(e,t,r){return I[t]=r,true},deleteProperty(e,t){return delete I[t],true}});globalThis[Se]||(globalThis[Se]=se,Object.isFrozen(se)||Object.freeze(se));T();D();a();S();var Ao=(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]&&w.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]&&w.remove(s),i.forEach(f=>{typeof f=="function"&&w.listen(s,f,r);});return}},ke=Ao;Object.defineProperties(ke,{list:{get:()=>globalThis.events},remove:{value:e=>{e&&(w.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();S();j();L();var Pe=((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=exports.propertyName(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;w.listen(i,()=>e()),r.push(i);}else {exports.internal.clearTrackedPaths(),exports.internal.tracking=!0;try{e();}catch{}exports.internal.tracking=!1,exports.internal.trackedPaths.forEach(i=>{r.includes(i)||(c(`useObserver: [Auto-Discovery] -> "${i}"`),w.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 w.remove=="function"&&(w.remove(n),c(`useObserver: Stopped monitoring "${n}"`));});}}catch(n){return c(`useObserver Error: ${n}`),()=>{}}});exports.DEV&&!("useObserver"in globalThis)&&(globalThis.useObserver||(globalThis.useObserver=null),Object.defineProperty(globalThis,"useObserver",{value:Pe,writable:true,enumerable:false,configurable:true}),Object.freeze(globalThis.useObserver));S();a();j();S();L();var Mo={enabled:true,logToConsole:true,modules:["state","store","session","cache","idb"],maxEntries:1e3};function qo(){return exports.DEV&&exports.internal.debug===true}var V={...Mo},Q=[],jo=e=>{V={...V,...e};},Ro=()=>{V.enabled=true;},Io=()=>{V.enabled=false;},mr=e=>V.enabled&&V.modules.includes(e),Lo=(e,t,r,o,n)=>{if(!mr(e))return;let s={timestamp:new Date().toISOString(),module:e,action:t,path:r,value:o,previousValue:n};if(Q.push(s),Q.length>V.maxEntries&&Q.shift(),V.logToConsole&&qo()){let i=`[Memorio:${e.toUpperCase()}]`,l=No(e);c(`%c${i}%c ${t} ${r},
6
- color: ${l}; font-weight: bold,
7
- color: inherit`),o!==void 0&&c(` \u2192 value:${o}`),n!==void 0&&c(` \u2190 previous:${n}`);}V.customHandler&&V.customHandler(s);},No=e=>({state:"#4CAF50",store:"#2196F3",session:"#FF9800",cache:"#9C27B0",idb:"#F44336"})[e]||"#888888",Vo=()=>[...Q],Ho=()=>{Q.length=0;},Uo=()=>{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},Jo=()=>JSON.stringify(Q,null,2),ot={configure:jo,enable:Ro,disable:Io,isEnabled:mr,log:Lo,getHistory:Vo,clearHistory:Ho,getStats:Uo,exportLogs:Jo};a();j();L();var R=globalThis.__memorio_state_instance__,U=globalThis.__memorio_store_instance__,J=globalThis.__memorio_session_instance__,q=globalThis.__memorio_cache_instance__;function Bo(){return exports.DEV&&exports.internal.debug===true}function pr(){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}function yr(){if(!J)return {};let e={},t=J;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 zo=()=>{if(Bo()){if(R){let e=R.list,t;typeof e=="function"?t=e():typeof e=="object"&&e!==null?t=e:t=R,console.table(t);}if(U&&console.table(pr()),J&&console.table(yr()),q){let e=q.list,t;typeof e=="function"?t=e():typeof e=="object"&&e!==null?t=e:t=q,console.table(t);}}},Ko=()=>{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(R),storeKeys:e(U),sessionKeys:e(J),cacheKeys:e(q),idbDatabases:0,sqliteDbCount:0,lastUpdate:new Date().toISOString()}},pe=e=>{let r={state:R,store:U,session:J,cache:q}[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=()=>{pe("state"),pe("store"),pe("session"),pe("cache");},Fo=()=>{let e=()=>{if(R)try{return typeof R.list=="function"?R.list():R}catch{return}},t=()=>pr(),r=()=>yr(),o=()=>{if(q)try{return typeof q.list=="function"?q.list():q}catch{return}},n={state:e(),store:t(),session:r(),cache:o(),exportedAt:new Date().toISOString()};return JSON.stringify(n,null,2)},Wo=e=>{try{let t=JSON.parse(e);t.state&&Object.entries(t.state).forEach(([r,o])=>{R&&r!=="list"&&r!=="remove"&&r!=="removeAll"&&(R[r]=o);}),t.store&&U&&typeof U.set=="function"&&Object.entries(t.store).forEach(([r,o])=>{U.set(r,o);}),t.session&&J&&typeof J.set=="function"&&Object.entries(t.session).forEach(([r,o])=>{J.set(r,o);}),t.cache&&q&&Object.entries(t.cache).forEach(([r,o])=>{q&&r!=="get"&&r!=="set"&&r!=="remove"&&r!=="clear"&&(q[r]=o);});}catch(t){console.debug("Import failed:",t);}},Yo=(e,t)=>{let o={state:R,store:U,session:J,cache:q}[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);}},Go=()=>{console.debug(`
5
+ var __defProp = Object.defineProperty;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
8
+ var __esm = (fn, res) => function __init() {
9
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
10
+ };
11
+
12
+ // node_modules/tsup/assets/cjs_shims.js
13
+ var init_cjs_shims = __esm({
14
+ "node_modules/tsup/assets/cjs_shims.js"() {
15
+ }
16
+ });
17
+
18
+ // core/env.ts
19
+ exports.DEV = void 0; exports.PROD = void 0;
20
+ var init_env = __esm({
21
+ "core/env.ts"() {
22
+ init_cjs_shims();
23
+ exports.DEV = typeof process !== "undefined" ? false : true;
24
+ exports.PROD = !exports.DEV;
25
+ }
26
+ });
27
+
28
+ // core/internal.ts
29
+ var INTERNAL_KEY, state, internal, protect; exports.propertyName = void 0; exports.internal = void 0;
30
+ var init_internal = __esm({
31
+ "core/internal.ts"() {
32
+ init_cjs_shims();
33
+ INTERNAL_KEY = "__memorio_internal_state";
34
+ state = globalThis[INTERNAL_KEY] || {
35
+ debug: false,
36
+ tracking: false,
37
+ trackedPaths: /* @__PURE__ */ new Set(),
38
+ locked: false,
39
+ lastAccessedPath: "",
40
+ stateVersion: 0,
41
+ currentContext: null,
42
+ mutations: [],
43
+ undoStack: [],
44
+ redoStack: [],
45
+ maxHistory: 100,
46
+ historyEnabled: false
47
+ };
48
+ if (!globalThis[INTERNAL_KEY]) {
49
+ globalThis[INTERNAL_KEY] = state;
50
+ }
51
+ internal = {
52
+ get debug() {
53
+ return state.debug;
54
+ },
55
+ set debug(value) {
56
+ state.debug = value;
57
+ },
58
+ get tracking() {
59
+ return state.tracking;
60
+ },
61
+ set tracking(value) {
62
+ state.tracking = value;
63
+ },
64
+ get trackedPaths() {
65
+ return state.trackedPaths;
66
+ },
67
+ clearTrackedPaths() {
68
+ state.trackedPaths.clear();
69
+ },
70
+ get locked() {
71
+ return state.locked;
72
+ },
73
+ set locked(value) {
74
+ state.locked = value;
75
+ },
76
+ get lastAccessedPath() {
77
+ return state.lastAccessedPath;
78
+ },
79
+ set lastAccessedPath(value) {
80
+ state.lastAccessedPath = value;
81
+ },
82
+ get stateVersion() {
83
+ return state.stateVersion;
84
+ },
85
+ bumpStateVersion() {
86
+ state.stateVersion = (state.stateVersion || 0) + 1;
87
+ return state.stateVersion;
88
+ },
89
+ get currentContext() {
90
+ return state.currentContext;
91
+ },
92
+ set currentContext(value) {
93
+ state.currentContext = value;
94
+ },
95
+ get mutations() {
96
+ return state.mutations;
97
+ },
98
+ get undoStack() {
99
+ return state.undoStack;
100
+ },
101
+ get redoStack() {
102
+ return state.redoStack;
103
+ },
104
+ get maxHistory() {
105
+ return state.maxHistory;
106
+ },
107
+ set maxHistory(value) {
108
+ state.maxHistory = value;
109
+ },
110
+ get historyEnabled() {
111
+ return state.historyEnabled;
112
+ },
113
+ set historyEnabled(value) {
114
+ state.historyEnabled = value;
115
+ },
116
+ /**
117
+ * Records a mutation in the trace log and undo/redo stacks.
118
+ * Called by the state proxy's callback.
119
+ */
120
+ recordMutation(record) {
121
+ if (!state.historyEnabled) return;
122
+ state.mutations.push(record);
123
+ if (state.mutations.length > state.maxHistory) {
124
+ state.mutations.shift();
125
+ }
126
+ state.undoStack.push(record);
127
+ if (state.undoStack.length > state.maxHistory) {
128
+ state.undoStack.shift();
129
+ }
130
+ state.redoStack = [];
131
+ },
132
+ /**
133
+ * Pops a record from the undo stack and pushes to redo stack.
134
+ * Returns the record or undefined if empty.
135
+ */
136
+ popUndo() {
137
+ const record = state.undoStack.pop();
138
+ if (record) {
139
+ state.redoStack.push(record);
140
+ }
141
+ return record;
142
+ },
143
+ /**
144
+ * Pops a record from the redo stack and pushes to undo stack.
145
+ * Returns the record or undefined if empty.
146
+ */
147
+ popRedo() {
148
+ const record = state.redoStack.pop();
149
+ if (record) {
150
+ state.undoStack.push(record);
151
+ }
152
+ return record;
153
+ },
154
+ canUndo() {
155
+ return state.undoStack.length > 0;
156
+ },
157
+ canRedo() {
158
+ return state.redoStack.length > 0;
159
+ },
160
+ clearHistory() {
161
+ state.mutations = [];
162
+ state.undoStack = [];
163
+ state.redoStack = [];
164
+ },
165
+ clearRedo() {
166
+ state.redoStack = [];
167
+ }
168
+ };
169
+ protect = [
170
+ "list",
171
+ "state",
172
+ "store",
173
+ "idb",
174
+ "sqlite",
175
+ "observer",
176
+ "useObserver",
177
+ "remove",
178
+ "removeAll",
179
+ // Platform-related protected keys
180
+ "_platform",
181
+ "_capabilities",
182
+ "_sessionId"
183
+ ];
184
+ exports.propertyName = /* @__PURE__ */ __name((container, object) => {
185
+ const target = object !== void 0 ? object : container;
186
+ return String(target).replace("() => ", "");
187
+ }, "propertyName");
188
+ exports.internal = internal;
189
+ }
190
+ });
191
+
192
+ // functions/message/index.ts
193
+ exports.message = void 0; var message_default;
194
+ var init_message = __esm({
195
+ "functions/message/index.ts"() {
196
+ init_cjs_shims();
197
+ init_internal();
198
+ init_env();
199
+ exports.message = /* @__PURE__ */ __name((...args) => {
200
+ if (exports.DEV && exports.internal.debug === true) {
201
+ console.debug(...args);
202
+ }
203
+ }, "message");
204
+ message_default = exports.message;
205
+ }
206
+ });
207
+
208
+ // core/platform.ts
209
+ function generateSessionId() {
210
+ const anyGlobal = globalThis;
211
+ if (typeof anyGlobal.crypto !== "undefined" && anyGlobal.crypto.randomUUID) {
212
+ return anyGlobal.crypto.randomUUID();
213
+ }
214
+ if (typeof anyGlobal.crypto !== "undefined" && anyGlobal.crypto.getRandomValues) {
215
+ const array = new Uint8Array(16);
216
+ anyGlobal.crypto.getRandomValues(array);
217
+ return Array.from(array, (b) => b.toString(16).padStart(2, "0")).join("");
218
+ }
219
+ return `session_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`;
220
+ }
221
+ function detectPlatform() {
222
+ const globalAny = globalThis;
223
+ if (globalAny.Deno && globalAny.Deno.version) {
224
+ return "deno";
225
+ }
226
+ if (typeof process !== "undefined" && process.versions && process.versions.node) {
227
+ return "node";
228
+ }
229
+ if (typeof globalThis !== "undefined" && typeof globalThis.ServiceWorkerGlobalScope !== "undefined") {
230
+ return "edge";
231
+ }
232
+ if (typeof window !== "undefined" && typeof document !== "undefined") {
233
+ return "browser";
234
+ }
235
+ return "unknown";
236
+ }
237
+ function isBrowser() {
238
+ const platform = detectPlatform();
239
+ return platform === "browser";
240
+ }
241
+ function isNode() {
242
+ const platform = detectPlatform();
243
+ return platform === "node";
244
+ }
245
+ function isDeno() {
246
+ const platform = detectPlatform();
247
+ return platform === "deno";
248
+ }
249
+ function isEdge() {
250
+ const platform = detectPlatform();
251
+ return platform === "edge";
252
+ }
253
+ function getSessionStorage() {
254
+ try {
255
+ if (typeof sessionStorage !== "undefined") {
256
+ const testKey = "__memorio_test__";
257
+ sessionStorage.setItem(testKey, "1");
258
+ sessionStorage.removeItem(testKey);
259
+ return sessionStorage;
260
+ }
261
+ } catch (_) {
262
+ }
263
+ return null;
264
+ }
265
+ function getLocalStorage() {
266
+ try {
267
+ if (typeof localStorage !== "undefined") {
268
+ const testKey = "__memorio_test__";
269
+ localStorage.setItem(testKey, "1");
270
+ localStorage.removeItem(testKey);
271
+ return localStorage;
272
+ }
273
+ } catch (_) {
274
+ }
275
+ return null;
276
+ }
277
+ function hasIndexedDB() {
278
+ if (typeof indexedDB !== "undefined") {
279
+ return true;
280
+ }
281
+ return false;
282
+ }
283
+ function hasSqlJs() {
284
+ const anyGlobal = globalThis;
285
+ if (typeof anyGlobal.WebAssembly === "undefined" || typeof anyGlobal.WebAssembly.instantiate !== "function") {
286
+ return false;
287
+ }
288
+ return typeof anyGlobal.window !== "undefined";
289
+ }
290
+ function hasDispatchEvent() {
291
+ return typeof globalThis.dispatchEvent === "function";
292
+ }
293
+ function getCapabilities() {
294
+ const platform = detectPlatform();
295
+ const isSecure = typeof globalThis.isSecureContext !== "undefined" ? globalThis.isSecureContext : platform === "browser";
296
+ return {
297
+ platform,
298
+ hasSessionStorage: getSessionStorage() !== null,
299
+ hasLocalStorage: getLocalStorage() !== null,
300
+ hasIndexedDB: hasIndexedDB(),
301
+ hasSqlJs: hasSqlJs(),
302
+ hasDispatchEvent: hasDispatchEvent(),
303
+ hasNavigator: typeof navigator !== "undefined",
304
+ hasProcess: typeof process !== "undefined",
305
+ isSecureContext: isSecure,
306
+ sessionId: generateSessionId()
307
+ };
308
+ }
309
+ function initializePlatform() {
310
+ const capabilities = getCapabilities();
311
+ const anyGlobal = globalThis;
312
+ if (!capabilities.hasDispatchEvent) {
313
+ anyGlobal.dispatchEvent = function(_event) {
314
+ return true;
315
+ };
316
+ if (typeof CustomEvent === "undefined") {
317
+ anyGlobal.CustomEvent = class CustomEvent {
318
+ static {
319
+ __name(this, "CustomEvent");
320
+ }
321
+ type;
322
+ detail;
323
+ constructor(type, detail = {}) {
324
+ this.type = type;
325
+ this.detail = detail;
326
+ }
327
+ };
328
+ }
329
+ }
330
+ if (typeof anyGlobal.addEventListener !== "function") {
331
+ anyGlobal.addEventListener = function(type, listener) {
332
+ if (!_eventListenerStorage.has(type)) {
333
+ _eventListenerStorage.set(type, []);
334
+ }
335
+ _eventListenerStorage.get(type).push(listener);
336
+ };
337
+ anyGlobal.removeEventListener = function(type, listener) {
338
+ const listeners = _eventListenerStorage.get(type);
339
+ if (listeners) {
340
+ const index = listeners.indexOf(listener);
341
+ if (index > -1) {
342
+ listeners.splice(index, 1);
343
+ }
344
+ }
345
+ };
346
+ anyGlobal.dispatchEvent = function(event) {
347
+ const listeners = _eventListenerStorage.get(event.type);
348
+ if (listeners) {
349
+ listeners.forEach((listener) => {
350
+ try {
351
+ listener(event);
352
+ } catch (e) {
353
+ console.error("Event listener error:", e);
354
+ }
355
+ });
356
+ }
357
+ return true;
358
+ };
359
+ }
360
+ }
361
+ function createContext(name) {
362
+ const contextId = name || `context_${generateSessionId()}`;
363
+ setCurrentContext(contextId);
364
+ const contextStorage = {
365
+ state: {},
366
+ store: /* @__PURE__ */ new Map(),
367
+ session: /* @__PURE__ */ new Map(),
368
+ cache: /* @__PURE__ */ new Map()
369
+ };
370
+ _contexts.set(contextId, contextStorage);
371
+ return {
372
+ id: contextId,
373
+ state: contextStorage.state,
374
+ store: {
375
+ get: /* @__PURE__ */ __name((key) => {
376
+ const data = contextStorage.store.get(key);
377
+ return data ? JSON.parse(data) : null;
378
+ }, "get"),
379
+ set: /* @__PURE__ */ __name((key, value) => {
380
+ contextStorage.store.set(key, JSON.stringify(value));
381
+ }, "set"),
382
+ remove: /* @__PURE__ */ __name((key) => contextStorage.store.delete(key), "remove"),
383
+ removeAll: /* @__PURE__ */ __name(() => contextStorage.store.clear(), "removeAll"),
384
+ clearAll: /* @__PURE__ */ __name(() => contextStorage.store.clear(), "clearAll"),
385
+ size: /* @__PURE__ */ __name(() => contextStorage.store.size, "size"),
386
+ isPersistent: false
387
+ },
388
+ session: {
389
+ get: /* @__PURE__ */ __name((key) => {
390
+ const data = contextStorage.session.get(key);
391
+ return data ? JSON.parse(data) : null;
392
+ }, "get"),
393
+ set: /* @__PURE__ */ __name((key, value) => {
394
+ contextStorage.session.set(key, JSON.stringify(value));
395
+ }, "set"),
396
+ remove: /* @__PURE__ */ __name((key) => contextStorage.session.delete(key), "remove"),
397
+ removeAll: /* @__PURE__ */ __name(() => contextStorage.session.clear(), "removeAll"),
398
+ clearAll: /* @__PURE__ */ __name(() => contextStorage.session.clear(), "clearAll"),
399
+ size: /* @__PURE__ */ __name(() => contextStorage.session.size, "size"),
400
+ isPersistent: false
401
+ },
402
+ cache: {
403
+ get: /* @__PURE__ */ __name((key) => contextStorage.cache.get(key), "get"),
404
+ set: /* @__PURE__ */ __name((key, value) => contextStorage.cache.set(key, value), "set"),
405
+ remove: /* @__PURE__ */ __name((key) => contextStorage.cache.delete(key), "remove"),
406
+ removeAll: /* @__PURE__ */ __name(() => contextStorage.cache.clear(), "removeAll"),
407
+ clear: /* @__PURE__ */ __name(() => contextStorage.cache.clear(), "clear")
408
+ }
409
+ };
410
+ }
411
+ function listContexts() {
412
+ return Array.from(_contexts.keys());
413
+ }
414
+ function deleteContext(id) {
415
+ return _contexts.delete(id);
416
+ }
417
+ function setCurrentContext(id) {
418
+ exports.internal.currentContext = id;
419
+ }
420
+ var _eventListenerStorage, CONTEXTS_KEY, _contexts;
421
+ var init_platform = __esm({
422
+ "core/platform.ts"() {
423
+ init_cjs_shims();
424
+ init_internal();
425
+ __name(generateSessionId, "generateSessionId");
426
+ __name(detectPlatform, "detectPlatform");
427
+ __name(isBrowser, "isBrowser");
428
+ __name(isNode, "isNode");
429
+ __name(isDeno, "isDeno");
430
+ __name(isEdge, "isEdge");
431
+ __name(getSessionStorage, "getSessionStorage");
432
+ __name(getLocalStorage, "getLocalStorage");
433
+ __name(hasIndexedDB, "hasIndexedDB");
434
+ __name(hasSqlJs, "hasSqlJs");
435
+ __name(hasDispatchEvent, "hasDispatchEvent");
436
+ __name(getCapabilities, "getCapabilities");
437
+ _eventListenerStorage = /* @__PURE__ */ new Map();
438
+ __name(initializePlatform, "initializePlatform");
439
+ CONTEXTS_KEY = "__memorio_contexts__";
440
+ _contexts = globalThis[CONTEXTS_KEY] || /* @__PURE__ */ new Map();
441
+ if (!globalThis[CONTEXTS_KEY]) {
442
+ globalThis[CONTEXTS_KEY] = _contexts;
443
+ }
444
+ __name(createContext, "createContext");
445
+ __name(listContexts, "listContexts");
446
+ __name(deleteContext, "deleteContext");
447
+ __name(setCurrentContext, "setCurrentContext");
448
+ }
449
+ });
450
+
451
+ // functions/store/index.ts
452
+ function _getFallbackStorage() {
453
+ const contextName = exports.internal.currentContext || "";
454
+ const key = contextName || "default";
455
+ if (!_fallbackStorageByContext.has(key)) {
456
+ _fallbackStorageByContext.set(key, /* @__PURE__ */ new Map());
457
+ }
458
+ return _fallbackStorageByContext.get(key);
459
+ }
460
+ function _getPrefix() {
461
+ const contextName = exports.internal.currentContext || "";
462
+ return contextName ? `${contextName}-` : `memorio_store_`;
463
+ }
464
+ function _prefixKey(name) {
465
+ if (!name || typeof name !== "string") {
466
+ console.warn(`[memorio store] key is empty or not a string - operation aborted`);
467
+ return "";
468
+ }
469
+ if (name.length > 512) {
470
+ console.warn(`[memorio store] key "${name}" exceeds 512 chars - operation aborted`);
471
+ return "";
472
+ }
473
+ return _getPrefix() + name;
474
+ }
475
+ function _read(prefixedName) {
476
+ const raw = _hasStorage ? _localStorage.getItem(prefixedName) : _getFallbackStorage().get(prefixedName);
477
+ return raw ? JSON.parse(raw) : raw;
478
+ }
479
+ function _write(prefixedName, value) {
480
+ const json = JSON.stringify(value);
481
+ if (_hasStorage) _localStorage.setItem(prefixedName, json);
482
+ else _getFallbackStorage().set(prefixedName, json);
483
+ }
484
+ function _remove(prefixedName) {
485
+ if (_hasStorage) {
486
+ if (_localStorage.getItem(prefixedName)) {
487
+ _localStorage.removeItem(prefixedName);
488
+ return true;
489
+ }
490
+ } else if (_getFallbackStorage().has(prefixedName)) {
491
+ _getFallbackStorage().delete(prefixedName);
492
+ return true;
493
+ }
494
+ return false;
495
+ }
496
+ var _localStorage, _fallbackStorageByContext, _hasStorage, STORE_INSTANCE_KEY; exports.store = void 0;
497
+ var init_store = __esm({
498
+ "functions/store/index.ts"() {
499
+ init_cjs_shims();
500
+ init_platform();
501
+ init_internal();
502
+ init_message();
503
+ _localStorage = getLocalStorage();
504
+ _fallbackStorageByContext = /* @__PURE__ */ new Map();
505
+ __name(_getFallbackStorage, "_getFallbackStorage");
506
+ _hasStorage = _localStorage !== null;
507
+ __name(_getPrefix, "_getPrefix");
508
+ __name(_prefixKey, "_prefixKey");
509
+ __name(_read, "_read");
510
+ __name(_write, "_write");
511
+ __name(_remove, "_remove");
512
+ STORE_INSTANCE_KEY = "__memorio_store_instance__";
513
+ if (globalThis[STORE_INSTANCE_KEY]) {
514
+ exports.store = globalThis[STORE_INSTANCE_KEY];
515
+ } else {
516
+ exports.store = new Proxy({}, {});
517
+ Object.defineProperties(
518
+ exports.store,
519
+ {
520
+ /**
521
+ * Gets a value from storage.
522
+ * @param name The key to retrieve.
523
+ * @returns The parsed value or null if not found.
524
+ */
525
+ get: {
526
+ value: /* @__PURE__ */ __name((name) => {
527
+ if (!name) {
528
+ console.warn("[memorio store] store.get() called with empty or null key - returning null");
529
+ return null;
530
+ }
531
+ try {
532
+ return _read(_prefixKey(name));
533
+ } catch (err) {
534
+ exports.message(`Error parsing store item '${name}': ${err}`);
535
+ }
536
+ return null;
537
+ }, "value")
538
+ },
539
+ getMultiple: {
540
+ value: /* @__PURE__ */ __name((keys) => {
541
+ const result = {};
542
+ for (const key of keys) {
543
+ try {
544
+ const item = exports.store.get(key);
545
+ if (item) result[key] = item;
546
+ } catch (err) {
547
+ console.debug(`[memorio store] getMultiple error for key "${key}":`, err);
548
+ }
549
+ }
550
+ return result;
551
+ }, "value")
552
+ },
553
+ /**
554
+ * Sets a value in storage.
555
+ * @param name The key to set.
556
+ * @param value The value to store (objects, arrays, primitives).
557
+ * @returns true if written, false if the key was rejected.
558
+ */
559
+ set: {
560
+ value: /* @__PURE__ */ __name((name, value) => {
561
+ if (!name) {
562
+ console.warn("[memorio store] store.set() called with empty or null key - write aborted");
563
+ return false;
564
+ }
565
+ const prefixedName = _prefixKey(name);
566
+ if (!prefixedName) return false;
567
+ if (typeof value === "function") {
568
+ console.warn("[memorio store] functions are not storable - write aborted for key: " + name);
569
+ exports.message("Storing functions is not secure and is blocked for safety.");
570
+ return false;
571
+ }
572
+ try {
573
+ _write(prefixedName, value);
574
+ } catch (err) {
575
+ exports.message(`Error setting store item '${name}': ${err}`);
576
+ return false;
577
+ }
578
+ return true;
579
+ }, "value")
580
+ },
581
+ /**
582
+ * Removes a value from storage.
583
+ * @param name The key to remove.
584
+ * @returns True if removed, false if not found.
585
+ */
586
+ remove: {
587
+ value: /* @__PURE__ */ __name((name) => {
588
+ if (!name) {
589
+ console.debug("[memorio store] store.remove() called with empty or null key - returning false");
590
+ return false;
591
+ }
592
+ const prefixedName = _prefixKey(name);
593
+ if (!prefixedName) return false;
594
+ try {
595
+ return _remove(prefixedName);
596
+ } catch (err) {
597
+ exports.message(`Error removing store item '${name}': ${err}`);
598
+ }
599
+ return false;
600
+ }, "value")
601
+ },
602
+ /**
603
+ * Alias for remove.
604
+ * @param name The key to delete.
605
+ */
606
+ delete: {
607
+ value: /* @__PURE__ */ __name((name) => {
608
+ return exports.store.remove(name);
609
+ }, "value")
610
+ },
611
+ /**
612
+ * Clears all memorio items from storage.
613
+ */
614
+ removeAll: {
615
+ value: /* @__PURE__ */ __name(() => {
616
+ if (_hasStorage) {
617
+ const keysToRemove = [];
618
+ for (let i = 0; i < _localStorage.length; i++) {
619
+ const key = _localStorage.key(i);
620
+ if (key?.startsWith(_getPrefix())) keysToRemove.push(key);
621
+ }
622
+ keysToRemove.forEach((key) => _localStorage.removeItem(key));
623
+ } else {
624
+ _getFallbackStorage().clear();
625
+ }
626
+ return true;
627
+ }, "value")
628
+ },
629
+ /**
630
+ * Alias for removeAll.
631
+ */
632
+ clearAll: {
633
+ value: /* @__PURE__ */ __name(() => {
634
+ exports.store.removeAll();
635
+ return true;
636
+ }, "value")
637
+ },
638
+ /**
639
+ * Estimates storage quota usage.
640
+ * @returns Promise with [usage, quota].
641
+ */
642
+ quota: {
643
+ value: /* @__PURE__ */ __name(async () => {
644
+ return [0, 0];
645
+ }, "value")
646
+ },
647
+ /**
648
+ * Calculates total size of all memorio items (characters).
649
+ */
650
+ size: {
651
+ value: /* @__PURE__ */ __name(() => {
652
+ let totalSize = 0;
653
+ if (_hasStorage) {
654
+ Object.keys(_localStorage).forEach((key) => {
655
+ if (key.startsWith(_getPrefix())) {
656
+ const item = _localStorage.getItem(key);
657
+ if (item) totalSize += item.length;
658
+ }
659
+ });
660
+ } else {
661
+ _getFallbackStorage().forEach((value) => {
662
+ totalSize += value.length;
663
+ });
664
+ }
665
+ return totalSize;
666
+ }, "value")
667
+ },
668
+ /**
669
+ * Check if using real localStorage or fallback
670
+ */
671
+ isPersistent: {
672
+ get: /* @__PURE__ */ __name(() => _hasStorage, "get")
673
+ },
674
+ /**
675
+ * Get a list of all memorio store items.
676
+ */
677
+ list: {
678
+ value: /* @__PURE__ */ __name(() => {
679
+ const result = {};
680
+ try {
681
+ if (_hasStorage) {
682
+ for (let i = 0; i < _localStorage.length; i++) {
683
+ const key = _localStorage.key(i);
684
+ if (key?.startsWith(_getPrefix())) {
685
+ const cleanKey = key.replace(_getPrefix(), "");
686
+ const item = _localStorage.getItem(key);
687
+ if (item !== null) {
688
+ try {
689
+ result[cleanKey] = JSON.parse(item);
690
+ } catch {
691
+ result[cleanKey] = item;
692
+ }
693
+ }
694
+ }
695
+ }
696
+ } else {
697
+ _getFallbackStorage().forEach((value, key) => {
698
+ if (key.startsWith(_getPrefix())) {
699
+ const cleanKey = key.replace(_getPrefix(), "");
700
+ try {
701
+ result[cleanKey] = JSON.parse(value);
702
+ } catch {
703
+ result[cleanKey] = value;
704
+ }
705
+ }
706
+ });
707
+ }
708
+ } catch (err) {
709
+ exports.message(`Error listing store items: ${err}`);
710
+ }
711
+ return result;
712
+ }, "value")
713
+ }
714
+ }
715
+ );
716
+ Object.freeze(exports.store);
717
+ globalThis[STORE_INSTANCE_KEY] = exports.store;
718
+ }
719
+ }
720
+ });
721
+
722
+ // functions/idb/tools/db.create.ts
723
+ var db_create_exports = {};
724
+ var init_db_create = __esm({
725
+ "functions/idb/tools/db.create.ts"() {
726
+ init_cjs_shims();
727
+ init_idb();
728
+ init_message();
729
+ exports.idb.db.create = (dbName, ver = 1) => {
730
+ return new Promise((resolve, reject) => {
731
+ if (!exports.idb.db.support()) {
732
+ return reject(new Error("IndexedDB not supported"));
733
+ }
734
+ const request = globalThis.indexedDB.open(dbName, ver);
735
+ request.onerror = () => {
736
+ message_default(`IndexedDB error: ${request.error?.message}`);
737
+ reject(request.error);
738
+ };
739
+ request.onsuccess = () => {
740
+ message_default(`Database ${dbName} connected successfully`);
741
+ resolve(request.result);
742
+ };
743
+ request.onupgradeneeded = () => {
744
+ message_default(`Database ${dbName} upgrade/creation initiated`);
745
+ };
746
+ });
747
+ };
748
+ }
749
+ });
750
+
751
+ // functions/idb/tools/db.list.ts
752
+ var db_list_exports = {};
753
+ var init_db_list = __esm({
754
+ "functions/idb/tools/db.list.ts"() {
755
+ init_cjs_shims();
756
+ init_idb();
757
+ exports.idb.db.list = async () => {
758
+ if (!("indexedDB" in globalThis) || !indexedDB.databases) return [];
759
+ try {
760
+ const result = await indexedDB.databases();
761
+ globalThis.idbases = result || [];
762
+ await exports.idb.db.size();
763
+ return globalThis.idbases;
764
+ } catch (err) {
765
+ console.error("Error listing databases:", err);
766
+ return [];
767
+ }
768
+ };
769
+ }
770
+ });
771
+
772
+ // functions/idb/tools/db.exist.ts
773
+ var db_exist_exports = {};
774
+ var init_db_exist = __esm({
775
+ "functions/idb/tools/db.exist.ts"() {
776
+ init_cjs_shims();
777
+ init_idb();
778
+ exports.idb.db.exist = (storeName) => {
779
+ return idbases?.some((db) => db.name === storeName);
780
+ };
781
+ }
782
+ });
783
+
784
+ // functions/idb/tools/db.quota.ts
785
+ var db_quota_exports = {};
786
+ var init_db_quota = __esm({
787
+ "functions/idb/tools/db.quota.ts"() {
788
+ init_cjs_shims();
789
+ init_idb();
790
+ exports.idb.db.quota = () => {
791
+ return navigator.storage.estimate();
792
+ };
793
+ }
794
+ });
795
+
796
+ // functions/idb/tools/db.delete.ts
797
+ var db_delete_exports = {};
798
+ var init_db_delete = __esm({
799
+ "functions/idb/tools/db.delete.ts"() {
800
+ init_cjs_shims();
801
+ init_idb();
802
+ init_message();
803
+ exports.idb.db.delete = (storeName) => {
804
+ return new Promise((resolve, reject) => {
805
+ message_default(`Removing database ${storeName}...`);
806
+ const performDelete = /* @__PURE__ */ __name(() => {
807
+ const request = indexedDB.deleteDatabase(storeName);
808
+ request.onsuccess = () => {
809
+ message_default(`${storeName} database removed successfully`);
810
+ exports.idb.db.list();
811
+ resolve();
812
+ };
813
+ request.onerror = () => {
814
+ console.error(`Error removing ${storeName}:`, request.error);
815
+ reject(request.error);
816
+ };
817
+ request.onblocked = () => {
818
+ console.warn(`Deletion of ${storeName} is blocked. Please close other tabs.`);
819
+ };
820
+ }, "performDelete");
821
+ performDelete();
822
+ });
823
+ };
824
+ }
825
+ });
826
+
827
+ // functions/idb/tools/db.size.ts
828
+ var db_size_exports = {};
829
+ var init_db_size = __esm({
830
+ "functions/idb/tools/db.size.ts"() {
831
+ init_cjs_shims();
832
+ init_idb();
833
+ init_message();
834
+ exports.idb.db.size = async () => {
835
+ if (!idbases || idbases.length === 0) return;
836
+ for (let i = 0; i < idbases.length; i++) {
837
+ const dbInfo = idbases[i];
838
+ try {
839
+ const db = await exports.idb.db.create(dbInfo.name, dbInfo.version);
840
+ const tableNames = Array.from(db.objectStoreNames);
841
+ let totalDbSize = 0;
842
+ for (const tableName of tableNames) {
843
+ const tableSize = await exports.idb.table.size(db, tableName);
844
+ totalDbSize += tableSize;
845
+ }
846
+ dbInfo.size = totalDbSize;
847
+ db.close();
848
+ } catch (err) {
849
+ message_default(`Could not calculate size for ${dbInfo.name}:${err}`);
850
+ }
851
+ }
852
+ };
853
+ }
854
+ });
855
+
856
+ // functions/idb/tools/db.version.ts
857
+ var db_version_exports = {};
858
+ var init_db_version = __esm({
859
+ "functions/idb/tools/db.version.ts"() {
860
+ init_cjs_shims();
861
+ init_idb();
862
+ exports.idb.db.version = (storeName) => {
863
+ let idbVer = 0;
864
+ for (const v of idbases) {
865
+ if (v.name === storeName) idbVer = v.version;
866
+ break;
867
+ }
868
+ return idbVer;
869
+ };
870
+ }
871
+ });
872
+
873
+ // functions/idb/tools/db.support.ts
874
+ var db_support_exports = {};
875
+ var init_db_support = __esm({
876
+ "functions/idb/tools/db.support.ts"() {
877
+ init_cjs_shims();
878
+ init_idb();
879
+ init_message();
880
+ exports.idb.db.support = () => {
881
+ const isSupported = "indexedDB" in globalThis;
882
+ if (!isSupported) {
883
+ message_default("Your environment doesn't support IndexedDB");
884
+ }
885
+ return isSupported;
886
+ };
887
+ }
888
+ });
889
+
890
+ // functions/idb/tools/table.create.ts
891
+ var table_create_exports = {};
892
+ var init_table_create = __esm({
893
+ "functions/idb/tools/table.create.ts"() {
894
+ init_cjs_shims();
895
+ init_idb();
896
+ init_message();
897
+ exports.idb.table.create = (dbName, dbTable) => {
898
+ return new Promise((resolve, reject) => {
899
+ try {
900
+ const currentVersion = Number(exports.idb.db.version(dbName)) || 0;
901
+ const nextVersion = currentVersion + 1;
902
+ const request = indexedDB.open(dbName, nextVersion);
903
+ request.onupgradeneeded = (e) => {
904
+ const db = e.target.result;
905
+ if (!db.objectStoreNames.contains(dbTable)) {
906
+ const store2 = db.createObjectStore(dbTable, {
907
+ keyPath: "id",
908
+ autoIncrement: true
909
+ });
910
+ store2.createIndex("id", "id", { unique: true });
911
+ store2.createIndex("data", "data", { unique: false });
912
+ message_default(`Table ${dbTable} created in ${dbName}`);
913
+ }
914
+ };
915
+ request.onsuccess = () => {
916
+ request.result.close();
917
+ exports.idb.db.list();
918
+ resolve();
919
+ };
920
+ request.onerror = () => {
921
+ console.error(`Error creating table ${dbTable}:`, request.error);
922
+ reject(request.error);
923
+ };
924
+ } catch (err) {
925
+ console.error("Critical error in table.create:", err);
926
+ reject(err);
927
+ }
928
+ });
929
+ };
930
+ }
931
+ });
932
+
933
+ // functions/idb/tools/table.size.ts
934
+ var table_size_exports = {};
935
+ var init_table_size = __esm({
936
+ "functions/idb/tools/table.size.ts"() {
937
+ init_cjs_shims();
938
+ init_idb();
939
+ init_message();
940
+ exports.idb.table.size = (db, table) => {
941
+ return new Promise((resolve, reject) => {
942
+ if (!db) return reject(new Error("Database instance is required"));
943
+ if (!db.objectStoreNames.contains(table)) return resolve(0);
944
+ let size = 0;
945
+ let count = 0;
946
+ const transaction = db.transaction([table], "readonly");
947
+ const store2 = transaction.objectStore(table);
948
+ const request = store2.openCursor();
949
+ request.onsuccess = async (event) => {
950
+ const cursor = event.target.result;
951
+ if (cursor) {
952
+ try {
953
+ const value = cursor.value;
954
+ size += JSON.stringify(value).length;
955
+ } catch (err) {
956
+ message_default(`Error stringifying IDB value tracking size:${err}`);
957
+ }
958
+ count++;
959
+ if (count % 200 === 0) {
960
+ await new Promise((resolve2) => setTimeout(resolve2, 0));
961
+ }
962
+ cursor.continue();
963
+ } else {
964
+ resolve(size);
965
+ }
966
+ };
967
+ request.onerror = () => {
968
+ reject(request.error);
969
+ };
970
+ });
971
+ };
972
+ }
973
+ });
974
+
975
+ // functions/idb/crud/data.delete.ts
976
+ var data_delete_exports = {};
977
+ var init_data_delete = __esm({
978
+ "functions/idb/crud/data.delete.ts"() {
979
+ init_cjs_shims();
980
+ init_idb();
981
+ init_message();
982
+ exports.idb.data.delete = (storeName, table, key) => {
983
+ return new Promise((resolve, reject) => {
984
+ const request = indexedDB.open(storeName);
985
+ request.onsuccess = () => {
986
+ const db = request.result;
987
+ if (!db.objectStoreNames.contains(table)) {
988
+ db.close();
989
+ return reject(new Error(`Table ${table} not found`));
990
+ }
991
+ const transaction = db.transaction(table, "readwrite");
992
+ const objectStore = transaction.objectStore(table);
993
+ const deleteRequest = objectStore.delete(key);
994
+ deleteRequest.onsuccess = () => {
995
+ db.close();
996
+ message_default(`Record ${key} deleted from ${table}`);
997
+ resolve();
998
+ };
999
+ deleteRequest.onerror = () => {
1000
+ db.close();
1001
+ reject(deleteRequest.error);
1002
+ };
1003
+ };
1004
+ request.onerror = () => reject(request.error);
1005
+ });
1006
+ };
1007
+ exports.idb.data.delete.all = (storeName, table) => {
1008
+ return new Promise((resolve, reject) => {
1009
+ const request = indexedDB.open(storeName);
1010
+ request.onsuccess = (event) => {
1011
+ const db = event.target.result;
1012
+ if (!db.objectStoreNames.contains(table)) {
1013
+ db.close();
1014
+ return reject(new Error(`Table ${table} not found`));
1015
+ }
1016
+ const transaction = db.transaction(table, "readwrite");
1017
+ const store2 = transaction.objectStore(table);
1018
+ const clearRequest = store2.clear();
1019
+ clearRequest.onsuccess = () => {
1020
+ db.close();
1021
+ message_default(`All data cleared from ${table}`);
1022
+ resolve();
1023
+ };
1024
+ clearRequest.onerror = () => {
1025
+ db.close();
1026
+ reject(clearRequest.error);
1027
+ };
1028
+ };
1029
+ request.onerror = () => reject(request.error);
1030
+ });
1031
+ };
1032
+ }
1033
+ });
1034
+
1035
+ // functions/idb/crud/data.set.ts
1036
+ var data_set_exports = {};
1037
+ var init_data_set = __esm({
1038
+ "functions/idb/crud/data.set.ts"() {
1039
+ init_cjs_shims();
1040
+ init_idb();
1041
+ init_message();
1042
+ exports.idb.data.set = (storeName, table, value) => {
1043
+ return new Promise((resolve, reject) => {
1044
+ const request = indexedDB.open(storeName);
1045
+ request.onsuccess = () => {
1046
+ const db = request.result;
1047
+ if (!db.objectStoreNames.contains(table)) {
1048
+ db.close();
1049
+ return reject(new Error(`Table ${table} does not exist in ${storeName}`));
1050
+ }
1051
+ const transaction = db.transaction(table, "readwrite");
1052
+ const objectStore = transaction.objectStore(table);
1053
+ const putRequest = objectStore.put(value);
1054
+ putRequest.onsuccess = () => {
1055
+ db.close();
1056
+ message_default(`Data saved in ${storeName}.${table}`);
1057
+ resolve(putRequest.result);
1058
+ };
1059
+ putRequest.onerror = (_) => {
1060
+ db.close();
1061
+ message_default(`Database insert error: ${putRequest.error?.message}`);
1062
+ reject(putRequest.error);
1063
+ };
1064
+ };
1065
+ request.onerror = () => {
1066
+ reject(request.error);
1067
+ };
1068
+ });
1069
+ };
1070
+ }
1071
+ });
1072
+
1073
+ // functions/idb/crud/data.get.ts
1074
+ var data_get_exports = {};
1075
+ var init_data_get = __esm({
1076
+ "functions/idb/crud/data.get.ts"() {
1077
+ init_cjs_shims();
1078
+ init_idb();
1079
+ exports.idb.data.get = (storeName, table, key) => {
1080
+ return new Promise((resolve, reject) => {
1081
+ const request = indexedDB.open(storeName);
1082
+ request.onsuccess = (event) => {
1083
+ const db = event.target.result;
1084
+ if (!db.objectStoreNames.contains(table)) {
1085
+ db.close();
1086
+ return reject(new Error(`Table ${table} not found in ${storeName}`));
1087
+ }
1088
+ const transaction = db.transaction(table, "readonly");
1089
+ const store2 = transaction.objectStore(table);
1090
+ const getRequest = store2.get(key);
1091
+ getRequest.onsuccess = () => {
1092
+ db.close();
1093
+ resolve(getRequest.result);
1094
+ };
1095
+ getRequest.onerror = () => {
1096
+ db.close();
1097
+ reject(getRequest.error);
1098
+ };
1099
+ };
1100
+ request.onerror = () => {
1101
+ reject(request.error);
1102
+ };
1103
+ });
1104
+ };
1105
+ }
1106
+ });
1107
+
1108
+ // functions/idb/index.ts
1109
+ var _hasIDB; exports.idb = void 0;
1110
+ var init_idb = __esm({
1111
+ "functions/idb/index.ts"() {
1112
+ init_cjs_shims();
1113
+ init_platform();
1114
+ init_env();
1115
+ _hasIDB = hasIndexedDB();
1116
+ exports.idb = {
1117
+ db: {},
1118
+ table: {},
1119
+ data: {}
1120
+ };
1121
+ if (_hasIDB) {
1122
+ (async () => {
1123
+ Object.defineProperty(exports.idb, "db", { value: {}, writable: true, configurable: true });
1124
+ Object.defineProperty(exports.idb, "table", { value: {}, writable: true, configurable: true });
1125
+ Object.defineProperty(exports.idb, "data", { value: {}, writable: true, configurable: true });
1126
+ Object.defineProperty(globalThis, "idbases", {
1127
+ value: [],
1128
+ writable: true,
1129
+ configurable: true,
1130
+ enumerable: false
1131
+ });
1132
+ await Promise.all([
1133
+ Promise.resolve().then(() => (init_db_create(), db_create_exports)),
1134
+ Promise.resolve().then(() => (init_db_list(), db_list_exports)),
1135
+ Promise.resolve().then(() => (init_db_exist(), db_exist_exports)),
1136
+ Promise.resolve().then(() => (init_db_quota(), db_quota_exports)),
1137
+ Promise.resolve().then(() => (init_db_delete(), db_delete_exports)),
1138
+ Promise.resolve().then(() => (init_db_size(), db_size_exports)),
1139
+ Promise.resolve().then(() => (init_db_version(), db_version_exports)),
1140
+ Promise.resolve().then(() => (init_db_support(), db_support_exports)),
1141
+ Promise.resolve().then(() => (init_table_create(), table_create_exports)),
1142
+ Promise.resolve().then(() => (init_table_size(), table_size_exports)),
1143
+ Promise.resolve().then(() => (init_data_delete(), data_delete_exports)),
1144
+ Promise.resolve().then(() => (init_data_set(), data_set_exports)),
1145
+ Promise.resolve().then(() => (init_data_get(), data_get_exports))
1146
+ ]);
1147
+ Object.preventExtensions(exports.idb);
1148
+ Object.seal(exports.idb);
1149
+ Object.freeze(exports.idb);
1150
+ })();
1151
+ } else {
1152
+ exports.idb._disabled = true;
1153
+ exports.idb._warning = "IndexedDB is not available in this environment (Node.js/Deno). Use store or session for persistence.";
1154
+ if (exports.DEV) {
1155
+ console.warn("Memorio IDB: IndexedDB is not available in this environment. Use store or session for data persistence.");
1156
+ }
1157
+ }
1158
+ }
1159
+ });
1160
+
1161
+ // functions/sqlite/tools/db.support.ts
1162
+ var db_support_exports2 = {};
1163
+ function _inDocument() {
1164
+ const g3 = globalThis;
1165
+ return typeof g3.document !== "undefined" && typeof g3.document.createElement === "function";
1166
+ }
1167
+ function _loadSqlJsScript(url) {
1168
+ const g3 = globalThis;
1169
+ if (g3.__memorioSqlJsScript === url) return Promise.resolve();
1170
+ if (!_scriptLoaded) {
1171
+ _scriptLoaded = new Promise((resolve, reject) => {
1172
+ if (g3.initSqlJs && typeof g3.initSqlJs === "function") {
1173
+ g3.__memorioSqlJsScript = url;
1174
+ resolve();
1175
+ return;
1176
+ }
1177
+ if (!_inDocument()) {
1178
+ reject(new Error("memorio sqlite: no document available to load sql.js"));
1179
+ return;
1180
+ }
1181
+ const script = g3.document.createElement("script");
1182
+ script.src = url;
1183
+ script.async = true;
1184
+ script.onload = () => {
1185
+ g3.__memorioSqlJsScript = url;
1186
+ resolve();
1187
+ };
1188
+ script.onerror = () => reject(new Error(`memorio sqlite: failed to load sql.js from ${url}`));
1189
+ g3.document.head.appendChild(script);
1190
+ });
1191
+ }
1192
+ return _scriptLoaded;
1193
+ }
1194
+ var _loading, _SQL, _defaultLocateFile, _scriptLoaded, _loadSqlJsFromCdn;
1195
+ var init_db_support2 = __esm({
1196
+ "functions/sqlite/tools/db.support.ts"() {
1197
+ init_cjs_shims();
1198
+ init_sqlite();
1199
+ init_platform();
1200
+ init_message();
1201
+ _loading = null;
1202
+ _SQL = null;
1203
+ _defaultLocateFile = /* @__PURE__ */ __name((file) => {
1204
+ const g3 = globalThis;
1205
+ const base = g3.sqliteWasmBase || "";
1206
+ return base + file;
1207
+ }, "_defaultLocateFile");
1208
+ _scriptLoaded = null;
1209
+ __name(_inDocument, "_inDocument");
1210
+ __name(_loadSqlJsScript, "_loadSqlJsScript");
1211
+ _loadSqlJsFromCdn = /* @__PURE__ */ __name(async (url) => {
1212
+ const g3 = globalThis;
1213
+ if (!url) {
1214
+ throw new Error('memorio sqlite: no loader configured. Install sql.js (npm i sql.js) and pass a loader via sqlite.config({ loader: () => import("sql.js") }).');
1215
+ }
1216
+ if (typeof g3.initSqlJs === "function") return g3.initSqlJs;
1217
+ await _loadSqlJsScript(url);
1218
+ return g3.initSqlJs || g3;
1219
+ }, "_loadSqlJsFromCdn");
1220
+ exports.sqlite.db.support = () => {
1221
+ return hasSqlJs();
1222
+ };
1223
+ exports.sqlite.db.getSQL = async () => {
1224
+ if (_SQL) return _SQL;
1225
+ if (_loading) return _loading;
1226
+ const g3 = globalThis;
1227
+ const cfg = g3.sqliteConfig || {};
1228
+ const p = (async () => {
1229
+ if (typeof cfg.loader === "function") {
1230
+ return await cfg.loader();
1231
+ }
1232
+ if (cfg.scriptUrl) {
1233
+ const mod = await _loadSqlJsFromCdn(cfg.scriptUrl);
1234
+ const initSqlJs = typeof mod === "function" ? mod : mod && (mod.default || mod);
1235
+ const SQL = await initSqlJs({ locateFile: cfg.locateFile || _defaultLocateFile });
1236
+ g3.sqliteVersion = SQL?.version || "sql.js";
1237
+ message_default("Memorio SQLite: sql.js engine loaded");
1238
+ return SQL;
1239
+ }
1240
+ throw new Error('memorio sqlite: no loader configured. Install sql.js (npm i sql.js) and pass a loader via sqlite.config({ loader: () => import("sql.js") }).');
1241
+ })();
1242
+ _loading = p;
1243
+ try {
1244
+ _SQL = await p;
1245
+ return _SQL;
1246
+ } catch (err) {
1247
+ try {
1248
+ exports.sqlite._disabled = true;
1249
+ } catch (_) {
1250
+ }
1251
+ try {
1252
+ exports.sqlite._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>() }).";
1253
+ } catch (_) {
1254
+ }
1255
+ console.warn("Memorio SQLite: failed to load sql.js", err);
1256
+ throw err;
1257
+ } finally {
1258
+ _loading = null;
1259
+ }
1260
+ };
1261
+ exports.sqlite.db.version = () => {
1262
+ return globalThis.sqliteVersion || null;
1263
+ };
1264
+ }
1265
+ });
1266
+
1267
+ // functions/sqlite/tools/persist.ts
1268
+ function _ns() {
1269
+ const cfg = g.sqliteConfig || {};
1270
+ return cfg.namespace ? `ns:${cfg.namespace}` : "default";
1271
+ }
1272
+ function _key(name) {
1273
+ return `memorio:sqlite:db:${_ns()}:${name}`;
1274
+ }
1275
+ function _b64encode(buf) {
1276
+ const bytes = buf instanceof Uint8Array ? buf : new Uint8Array(buf);
1277
+ let binary = "";
1278
+ const len = bytes.byteLength;
1279
+ for (let i = 0; i < len; i++) binary += String.fromCharCode(bytes[i]);
1280
+ if (typeof btoa === "function") return btoa(binary);
1281
+ return typeof Buffer !== "undefined" ? Buffer.from(bytes).toString("base64") : "";
1282
+ }
1283
+ function _b64decode(b64) {
1284
+ if (typeof Buffer !== "undefined") {
1285
+ return new Uint8Array(Buffer.from(b64, "base64"));
1286
+ }
1287
+ if (typeof atob !== "function") {
1288
+ throw new Error("memorio sqlite: no base64 decoder available");
1289
+ }
1290
+ const binary = atob(b64);
1291
+ const len = binary.length;
1292
+ const out = new Uint8Array(len);
1293
+ for (let i = 0; i < len; i++) out[i] = binary.charCodeAt(i);
1294
+ return out;
1295
+ }
1296
+ function saveSnapshot(name) {
1297
+ return new Promise((resolve) => {
1298
+ const db = g.__sqliteDbs && g.__sqliteDbs[name];
1299
+ if (!db || typeof db.export !== "function") {
1300
+ resolve(false);
1301
+ return;
1302
+ }
1303
+ try {
1304
+ const blob = db.export();
1305
+ exports.store.set(_key(name), _b64encode(blob));
1306
+ message_default(`Memorio SQLite: persisted '${name}' to store`);
1307
+ resolve(true);
1308
+ } catch (err) {
1309
+ console.warn("Memorio SQLite: persist snapshot failed", err);
1310
+ resolve(false);
1311
+ }
1312
+ });
1313
+ }
1314
+ function loadSnapshot(name) {
1315
+ const b64 = exports.store.get(_key(name));
1316
+ if (!b64) return null;
1317
+ try {
1318
+ return _b64decode(b64);
1319
+ } catch {
1320
+ return null;
1321
+ }
1322
+ }
1323
+ function removeSnapshot(name) {
1324
+ exports.store.remove(_key(name));
1325
+ }
1326
+ function attachAutoExport(name, db) {
1327
+ if (!db || typeof db.updateHook !== "function") return;
1328
+ _persistDbs[name] = true;
1329
+ try {
1330
+ db.updateHook(() => {
1331
+ if (_exportTimers[name]) clearTimeout(_exportTimers[name]);
1332
+ _exportTimers[name] = setTimeout(() => {
1333
+ _exportTimers[name] = null;
1334
+ void saveSnapshot(name);
1335
+ }, 250);
1336
+ });
1337
+ } catch (err) {
1338
+ console.warn("Memorio SQLite: could not attach updateHook", err);
1339
+ }
1340
+ }
1341
+ var g, _persistDbs, _exportTimers;
1342
+ var init_persist = __esm({
1343
+ "functions/sqlite/tools/persist.ts"() {
1344
+ init_cjs_shims();
1345
+ init_sqlite();
1346
+ init_store();
1347
+ init_message();
1348
+ g = globalThis;
1349
+ _persistDbs = {};
1350
+ _exportTimers = {};
1351
+ __name(_ns, "_ns");
1352
+ __name(_key, "_key");
1353
+ __name(_b64encode, "_b64encode");
1354
+ __name(_b64decode, "_b64decode");
1355
+ __name(saveSnapshot, "saveSnapshot");
1356
+ __name(loadSnapshot, "loadSnapshot");
1357
+ __name(removeSnapshot, "removeSnapshot");
1358
+ __name(attachAutoExport, "attachAutoExport");
1359
+ exports.sqlite.db.persist = async (name = "memorio") => {
1360
+ return saveSnapshot(name);
1361
+ };
1362
+ exports.sqlite.db.download = async (name = "memorio", filename = `${name}.sqlite`) => {
1363
+ const g3 = globalThis;
1364
+ const db = g3.__sqliteDbs && g3.__sqliteDbs[name];
1365
+ if (!db) {
1366
+ console.warn(`Memorio SQLite: cannot download '${name}' - database not found. Create it with sqlite.db.create('${name}').`);
1367
+ return false;
1368
+ }
1369
+ let blob;
1370
+ try {
1371
+ blob = await exports.sqlite.db.export(name);
1372
+ } catch (err) {
1373
+ console.warn("Memorio SQLite: export failed during download", err);
1374
+ return false;
1375
+ }
1376
+ if (!blob) return false;
1377
+ if (typeof g3.document === "undefined" || typeof g3.Blob === "undefined") {
1378
+ console.warn("Memorio SQLite: sqlite.db.download() requires a browser environment.");
1379
+ return false;
1380
+ }
1381
+ const URL2 = g3.URL || g3.webkitURL;
1382
+ if (!URL2 || typeof URL2.createObjectURL !== "function") return false;
1383
+ const objectUrl = URL2.createObjectURL(new Blob([blob], { type: "application/x-sqlite3" }));
1384
+ const a = g3.document.createElement("a");
1385
+ a.style.display = "none";
1386
+ a.href = objectUrl;
1387
+ a.download = filename;
1388
+ g3.document.body.appendChild(a);
1389
+ a.click();
1390
+ setTimeout(() => {
1391
+ try {
1392
+ URL2.revokeObjectURL(objectUrl);
1393
+ } catch (_) {
1394
+ }
1395
+ a.remove();
1396
+ }, 1e3);
1397
+ return true;
1398
+ };
1399
+ exports.sqlite.db.close = async (name = "memorio") => {
1400
+ const db = g.__sqliteDbs && g.__sqliteDbs[name];
1401
+ if (db && typeof db.close === "function") {
1402
+ try {
1403
+ await saveSnapshot(name);
1404
+ } catch (_) {
1405
+ }
1406
+ try {
1407
+ db.close();
1408
+ } catch (err) {
1409
+ console.warn("Memorio SQLite: close failed", err);
1410
+ }
1411
+ }
1412
+ if (g.__sqliteDbs) delete g.__sqliteDbs[name];
1413
+ if (g.sqlbases) {
1414
+ const idx = g.sqlbases.findIndex((x) => x && x.name === name);
1415
+ if (idx > -1) g.sqlbases.splice(idx, 1);
1416
+ }
1417
+ delete _persistDbs[name];
1418
+ if (_exportTimers[name]) {
1419
+ clearTimeout(_exportTimers[name]);
1420
+ _exportTimers[name] = null;
1421
+ }
1422
+ removeSnapshot(name);
1423
+ };
1424
+ exports.sqlite.db.loadSnapshot = loadSnapshot;
1425
+ exports.sqlite.db.saveSnapshot = saveSnapshot;
1426
+ }
1427
+ });
1428
+
1429
+ // functions/sqlite/tools/db.create.ts
1430
+ var db_create_exports2 = {};
1431
+ var init_db_create2 = __esm({
1432
+ "functions/sqlite/tools/db.create.ts"() {
1433
+ init_cjs_shims();
1434
+ init_sqlite();
1435
+ init_message();
1436
+ init_persist();
1437
+ exports.sqlite.db.create = async (name = "memorio", opts = {}) => {
1438
+ const SQL = await exports.sqlite.db.getSQL();
1439
+ const g3 = globalThis;
1440
+ const persistence = !!(opts && opts.persistence) || !!(g3.sqliteConfig && g3.sqliteConfig.persistence);
1441
+ let data;
1442
+ if (persistence && !opts.data) {
1443
+ const restored = loadSnapshot(name);
1444
+ if (restored) data = restored;
1445
+ }
1446
+ const useData = opts && opts.data || data;
1447
+ let db;
1448
+ if (useData && typeof useData.byteLength === "number") {
1449
+ db = new SQL.Database(useData);
1450
+ message_default(`Memorio SQLite: database '${name}' opened (persistence=${persistence})`);
1451
+ } else {
1452
+ db = new SQL.Database();
1453
+ message_default(`Memorio SQLite: database '${name}' created (persistence=${persistence})`);
1454
+ }
1455
+ const createOpts = { ...opts, persistence };
1456
+ if (!g3.__sqliteDbs) g3.__sqliteDbs = {};
1457
+ g3.__sqliteDbs[name] = db;
1458
+ if (!g3.sqlbases) g3.sqlbases = [];
1459
+ const idx = g3.sqlbases.findIndex((x) => x && x.name === name);
1460
+ if (idx > -1) {
1461
+ g3.sqlbases[idx] = { name, db, persistence: createOpts.persistence };
1462
+ } else {
1463
+ g3.sqlbases.push({ name, db, persistence: createOpts.persistence });
1464
+ }
1465
+ if (persistence) attachAutoExport(name, db);
1466
+ return db;
1467
+ };
1468
+ }
1469
+ });
1470
+
1471
+ // functions/sqlite/tools/db.get.ts
1472
+ var db_get_exports = {};
1473
+ var init_db_get = __esm({
1474
+ "functions/sqlite/tools/db.get.ts"() {
1475
+ init_cjs_shims();
1476
+ init_sqlite();
1477
+ exports.sqlite.db.get = (name = "memorio") => {
1478
+ const dbs = globalThis.__sqliteDbs;
1479
+ if (!dbs || !dbs[name]) {
1480
+ throw new Error(
1481
+ `SQLite database '${name}' does not exist. Create it with sqlite.db.create('${name}').`
1482
+ );
1483
+ }
1484
+ return dbs[name];
1485
+ };
1486
+ }
1487
+ });
1488
+
1489
+ // functions/sqlite/tools/db.delete.ts
1490
+ var db_delete_exports2 = {};
1491
+ var init_db_delete2 = __esm({
1492
+ "functions/sqlite/tools/db.delete.ts"() {
1493
+ init_cjs_shims();
1494
+ init_sqlite();
1495
+ init_message();
1496
+ exports.sqlite.db.delete = (name) => {
1497
+ const dbs = globalThis.__sqliteDbs;
1498
+ if (!dbs || !dbs[name]) return false;
1499
+ try {
1500
+ dbs[name].close();
1501
+ } catch (_) {
1502
+ }
1503
+ delete dbs[name];
1504
+ const g3 = globalThis;
1505
+ if (g3.sqlbases) g3.sqlbases = g3.sqlbases.filter((x) => x && x.name !== name);
1506
+ message_default(`Memorio SQLite: database '${name}' deleted`);
1507
+ return true;
1508
+ };
1509
+ }
1510
+ });
1511
+
1512
+ // functions/sqlite/tools/db.list.ts
1513
+ var db_list_exports2 = {};
1514
+ var init_db_list2 = __esm({
1515
+ "functions/sqlite/tools/db.list.ts"() {
1516
+ init_cjs_shims();
1517
+ init_sqlite();
1518
+ exports.sqlite.db.list = () => {
1519
+ const dbs = globalThis.__sqliteDbs;
1520
+ return dbs ? Object.keys(dbs) : [];
1521
+ };
1522
+ }
1523
+ });
1524
+
1525
+ // functions/sqlite/tools/db.size.ts
1526
+ var db_size_exports2 = {};
1527
+ var init_db_size2 = __esm({
1528
+ "functions/sqlite/tools/db.size.ts"() {
1529
+ init_cjs_shims();
1530
+ init_sqlite();
1531
+ exports.sqlite.db.size = async (name) => {
1532
+ const dbs = globalThis.__sqliteDbs;
1533
+ if (!dbs) return 0;
1534
+ const _bytes = /* @__PURE__ */ __name((b) => b ? b.byteLength || b.length || 0 : 0, "_bytes");
1535
+ if (name) {
1536
+ const db = exports.sqlite.db.get(name);
1537
+ return _bytes(db.export());
1538
+ }
1539
+ let total = 0;
1540
+ for (const n of Object.keys(dbs)) {
1541
+ try {
1542
+ total += _bytes(dbs[n].export());
1543
+ } catch (_) {
1544
+ }
1545
+ }
1546
+ return total;
1547
+ };
1548
+ }
1549
+ });
1550
+
1551
+ // functions/sqlite/tools/db.export.ts
1552
+ var db_export_exports = {};
1553
+ var init_db_export = __esm({
1554
+ "functions/sqlite/tools/db.export.ts"() {
1555
+ init_cjs_shims();
1556
+ init_sqlite();
1557
+ exports.sqlite.db.export = async (name = "memorio") => {
1558
+ const db = exports.sqlite.db.get(name);
1559
+ return db.export();
1560
+ };
1561
+ }
1562
+ });
1563
+
1564
+ // functions/sqlite/tools/db.import.ts
1565
+ var db_import_exports = {};
1566
+ var init_db_import = __esm({
1567
+ "functions/sqlite/tools/db.import.ts"() {
1568
+ init_cjs_shims();
1569
+ init_sqlite();
1570
+ exports.sqlite.db.import = async (name, data) => {
1571
+ return exports.sqlite.db.create(name, { data });
1572
+ };
1573
+ }
1574
+ });
1575
+
1576
+ // functions/sqlite/crud/query.run.ts
1577
+ var query_run_exports = {};
1578
+ var init_query_run = __esm({
1579
+ "functions/sqlite/crud/query.run.ts"() {
1580
+ init_cjs_shims();
1581
+ init_sqlite();
1582
+ init_message();
1583
+ exports.sqlite.query.run = async (name = "memorio", sql, params = []) => {
1584
+ const db = exports.sqlite.db.get(name);
1585
+ message_default(`Memorio SQLite: run -> ${sql}`);
1586
+ db.run(sql, params);
1587
+ return db.getRowsModified();
1588
+ };
1589
+ }
1590
+ });
1591
+
1592
+ // functions/sqlite/crud/query.select.ts
1593
+ var query_select_exports = {};
1594
+ var init_query_select = __esm({
1595
+ "functions/sqlite/crud/query.select.ts"() {
1596
+ init_cjs_shims();
1597
+ init_sqlite();
1598
+ exports.sqlite.query.select = async (name = "memorio", sql, params = []) => {
1599
+ const db = exports.sqlite.db.get(name);
1600
+ const stmt = db.prepare(sql, params);
1601
+ const result = [];
1602
+ try {
1603
+ while (stmt.step()) {
1604
+ result.push(stmt.getAsObject());
1605
+ }
1606
+ } finally {
1607
+ try {
1608
+ stmt.free();
1609
+ } catch (_) {
1610
+ }
1611
+ }
1612
+ return result;
1613
+ };
1614
+ }
1615
+ });
1616
+
1617
+ // functions/sqlite/crud/data.set.ts
1618
+ var data_set_exports2 = {};
1619
+ var init_data_set2 = __esm({
1620
+ "functions/sqlite/crud/data.set.ts"() {
1621
+ init_cjs_shims();
1622
+ init_sqlite();
1623
+ exports.sqlite.data.set = async (name = "memorio", sql, params = []) => {
1624
+ return exports.sqlite.query.run(name, sql, params);
1625
+ };
1626
+ }
1627
+ });
1628
+
1629
+ // functions/sqlite/crud/data.get.ts
1630
+ var data_get_exports2 = {};
1631
+ var init_data_get2 = __esm({
1632
+ "functions/sqlite/crud/data.get.ts"() {
1633
+ init_cjs_shims();
1634
+ init_sqlite();
1635
+ exports.sqlite.data.get = async (name = "memorio", sql, params = []) => {
1636
+ const rows = await exports.sqlite.query.select(name, sql, params);
1637
+ return rows.length ? rows[0] : null;
1638
+ };
1639
+ }
1640
+ });
1641
+
1642
+ // functions/sqlite/index.ts
1643
+ var _hasSqlJs; exports.sqlite = void 0;
1644
+ var init_sqlite = __esm({
1645
+ "functions/sqlite/index.ts"() {
1646
+ init_cjs_shims();
1647
+ init_platform();
1648
+ init_env();
1649
+ _hasSqlJs = hasSqlJs();
1650
+ exports.sqlite = {
1651
+ db: {},
1652
+ query: {},
1653
+ data: {}
1654
+ };
1655
+ exports.sqlite.config = (opts) => {
1656
+ const g3 = globalThis;
1657
+ g3.sqliteConfig = { ...g3.sqliteConfig, ...opts };
1658
+ if (opts && opts.wasmUrl) {
1659
+ g3.sqliteWasmBase = opts.wasmUrl.endsWith("/") ? opts.wasmUrl : opts.wasmUrl + "/";
1660
+ }
1661
+ return exports.sqlite;
1662
+ };
1663
+ Object.defineProperty(exports.sqlite, "ready", {
1664
+ enumerable: false,
1665
+ configurable: false,
1666
+ get: /* @__PURE__ */ __name(() => {
1667
+ const g3 = globalThis;
1668
+ if (!g3.sqliteReady) {
1669
+ g3.sqliteReady = typeof exports.sqlite.db.getSQL === "function" ? exports.sqlite.db.getSQL().then(() => {
1670
+ }).catch(() => {
1671
+ }) : Promise.resolve();
1672
+ }
1673
+ return g3.sqliteReady;
1674
+ }, "get")
1675
+ });
1676
+ if (_hasSqlJs) {
1677
+ (async () => {
1678
+ Object.defineProperty(exports.sqlite, "db", { value: {}, writable: false, configurable: true, enumerable: true });
1679
+ Object.defineProperty(exports.sqlite, "query", { value: {}, writable: false, configurable: true, enumerable: true });
1680
+ Object.defineProperty(exports.sqlite, "data", { value: {}, writable: false, configurable: true, enumerable: true });
1681
+ Object.defineProperty(globalThis, "sqlbases", {
1682
+ value: [],
1683
+ writable: true,
1684
+ configurable: true,
1685
+ enumerable: false
1686
+ });
1687
+ await Promise.all([
1688
+ Promise.resolve().then(() => (init_db_support2(), db_support_exports2)),
1689
+ Promise.resolve().then(() => (init_db_create2(), db_create_exports2)),
1690
+ Promise.resolve().then(() => (init_db_get(), db_get_exports)),
1691
+ Promise.resolve().then(() => (init_db_delete2(), db_delete_exports2)),
1692
+ Promise.resolve().then(() => (init_db_list2(), db_list_exports2)),
1693
+ Promise.resolve().then(() => (init_db_size2(), db_size_exports2)),
1694
+ Promise.resolve().then(() => (init_db_export(), db_export_exports)),
1695
+ Promise.resolve().then(() => (init_db_import(), db_import_exports)),
1696
+ Promise.resolve().then(() => (init_query_run(), query_run_exports)),
1697
+ Promise.resolve().then(() => (init_query_select(), query_select_exports)),
1698
+ Promise.resolve().then(() => (init_data_set2(), data_set_exports2)),
1699
+ Promise.resolve().then(() => (init_data_get2(), data_get_exports2))
1700
+ ]);
1701
+ })();
1702
+ } else {
1703
+ exports.sqlite._disabled = true;
1704
+ exports.sqlite._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.';
1705
+ if (exports.DEV) {
1706
+ globalThis.sqliteDisabled = true;
1707
+ globalThis.sqliteWarning = exports.sqlite._warning;
1708
+ console.warn("Memorio SQLite: sql.js is not available in this environment (requires browser + WebAssembly). Use store or session for persistence.");
1709
+ }
1710
+ }
1711
+ }
1712
+ });
1713
+
1714
+ // index.ts
1715
+ init_cjs_shims();
1716
+ init_env();
1717
+
1718
+ // functions/state/index.ts
1719
+ init_cjs_shims();
1720
+ init_internal();
1721
+ init_message();
1722
+
1723
+ // core/dispatch.ts
1724
+ init_cjs_shims();
1725
+ var dispatch = {
1726
+ /**
1727
+ * Dispatches a custom event with the specified name and value.
1728
+ * @param name The name of the event.
1729
+ * @param value The value to pass with the event.
1730
+ */
1731
+ set: /* @__PURE__ */ __name((name, value = {}) => {
1732
+ globalThis.dispatchEvent(new CustomEvent(String(name), value));
1733
+ }, "set"),
1734
+ ///
1735
+ /**
1736
+ * Listens for the specified event names and executes the callback when the event is triggered.
1737
+ * @param name The name of the event to listen for.
1738
+ * @param cb The callback function to execute when the event is triggered.
1739
+ */
1740
+ listen: /* @__PURE__ */ __name((name, cb = null, _flag) => {
1741
+ if (globalThis.events?.[name]) return;
1742
+ const exec = cb ? (e) => {
1743
+ const target = e;
1744
+ return globalThis.queueMicrotask ? globalThis.queueMicrotask(() => cb(target)) : Promise.resolve().then(() => cb(target));
1745
+ } : void 0;
1746
+ if (exec) globalThis.addEventListener(name, exec);
1747
+ if (exec) globalThis.events[name] = exec;
1748
+ }, "listen"),
1749
+ ///
1750
+ /**
1751
+ * Removes the event listener for the specified event names.
1752
+ * @param name The name of the event to remove the listener for.
1753
+ */
1754
+ remove: /* @__PURE__ */ __name((name) => {
1755
+ const listener = globalThis.events?.[name];
1756
+ if (listener) {
1757
+ globalThis.removeEventListener(name, listener);
1758
+ delete globalThis.events[name];
1759
+ }
1760
+ }, "remove")
1761
+ };
1762
+
1763
+ // functions/schema/index.ts
1764
+ init_cjs_shims();
1765
+ init_message();
1766
+ var _schemas = /* @__PURE__ */ new Map();
1767
+ var _validateValue = /* @__PURE__ */ __name((value, schema2, path) => {
1768
+ const errors = [];
1769
+ if (schema2.type && schema2.type !== "any") {
1770
+ const actualType = Array.isArray(value) ? "array" : typeof value;
1771
+ if (actualType !== schema2.type) {
1772
+ errors.push(`${path}: expected ${schema2.type}, got ${actualType}`);
1773
+ return { valid: false, errors };
1774
+ }
1775
+ }
1776
+ if (schema2.enum && !schema2.enum.includes(value)) {
1777
+ errors.push(`${path}: value must be one of [${schema2.enum.map(String).join(", ")}]`);
1778
+ }
1779
+ if (schema2.validator) {
1780
+ const result = schema2.validator(value);
1781
+ if (result !== true) {
1782
+ errors.push(`${path}: ${typeof result === "string" ? result : "validation failed"}`);
1783
+ }
1784
+ }
1785
+ if (typeof value === "number") {
1786
+ if (schema2.min !== void 0 && value < schema2.min) {
1787
+ errors.push(`${path}: value ${value} is less than minimum ${schema2.min}`);
1788
+ }
1789
+ if (schema2.max !== void 0 && value > schema2.max) {
1790
+ errors.push(`${path}: value ${value} exceeds maximum ${schema2.max}`);
1791
+ }
1792
+ }
1793
+ if (typeof value === "string") {
1794
+ if (schema2.min !== void 0 && value.length < schema2.min) {
1795
+ errors.push(`${path}: string length ${value.length} is less than minimum ${schema2.min}`);
1796
+ }
1797
+ if (schema2.max !== void 0 && value.length > schema2.max) {
1798
+ errors.push(`${path}: string length ${value.length} exceeds maximum ${schema2.max}`);
1799
+ }
1800
+ if (schema2.pattern && !schema2.pattern.test(value)) {
1801
+ errors.push(`${path}: string does not match required pattern`);
1802
+ }
1803
+ }
1804
+ if (schema2.type === "object" && value && typeof value === "object" && !Array.isArray(value)) {
1805
+ if (schema2.required) {
1806
+ for (const req of schema2.required) {
1807
+ if (!(req in value)) {
1808
+ errors.push(`${path}: missing required property '${req}'`);
1809
+ }
1810
+ }
1811
+ }
1812
+ if (schema2.properties) {
1813
+ for (const [prop, propSchema] of Object.entries(schema2.properties)) {
1814
+ if (prop in value && value[prop] !== void 0) {
1815
+ const propResult = _validateValue(value[prop], propSchema, `${path}.${prop}`);
1816
+ if (!propResult.valid) {
1817
+ errors.push(...propResult.errors || []);
1818
+ }
1819
+ }
1820
+ }
1821
+ }
1822
+ }
1823
+ return errors.length === 0 ? { valid: true } : { valid: false, errors };
1824
+ }, "_validateValue");
1825
+ var validate = /* @__PURE__ */ __name((path, value) => {
1826
+ const schema2 = _schemas.get(path);
1827
+ if (!schema2) {
1828
+ return { valid: true };
1829
+ }
1830
+ return _validateValue(value, schema2, path);
1831
+ }, "validate");
1832
+ var registerSchema = /* @__PURE__ */ __name((path, schema2) => {
1833
+ if (typeof schema2 === "function") {
1834
+ _schemas.set(path, { validator: schema2 });
1835
+ } else {
1836
+ _schemas.set(path, schema2);
1837
+ }
1838
+ message_default(`[memorio schema] Registered schema for '${path}'`);
1839
+ }, "registerSchema");
1840
+ var unregisterSchema = /* @__PURE__ */ __name((path) => {
1841
+ return _schemas.delete(path);
1842
+ }, "unregisterSchema");
1843
+ var listSchemas = /* @__PURE__ */ __name(() => {
1844
+ return Array.from(_schemas.keys());
1845
+ }, "listSchemas");
1846
+ var getSchema = /* @__PURE__ */ __name((path) => {
1847
+ return _schemas.get(path);
1848
+ }, "getSchema");
1849
+ var schema = {
1850
+ register: registerSchema,
1851
+ validate,
1852
+ unregister: unregisterSchema,
1853
+ list: listSchemas,
1854
+ get: getSchema
1855
+ };
1856
+
1857
+ // functions/state/index.ts
1858
+ init_env();
1859
+ var TARGET = /* @__PURE__ */ Symbol("memorio.target");
1860
+ var wrapperCache = /* @__PURE__ */ new WeakMap();
1861
+ var deepRaw = /* @__PURE__ */ __name((val, seen = null) => {
1862
+ if (val === null || typeof val !== "object") return val;
1863
+ if (val[TARGET] !== void 0) return deepRaw(val[TARGET], seen);
1864
+ if (seen) {
1865
+ if (seen.has(val)) return val;
1866
+ seen.add(val);
1867
+ }
1868
+ const ctor = val.constructor?.name;
1869
+ if (ctor !== "Object" && ctor !== "Array") return val;
1870
+ const copy = Array.isArray(val) ? [] : {};
1871
+ for (const k of Reflect.ownKeys(val)) {
1872
+ copy[k] = deepRaw(val[k], seen);
1873
+ }
1874
+ return copy;
1875
+ }, "deepRaw");
1876
+ var objPath = /* @__PURE__ */ __name((prop, object, separator = ".") => {
1877
+ return object.concat(prop).join(separator);
1878
+ }, "objPath");
1879
+ var buildProxy = /* @__PURE__ */ __name((obj, callback, tree = []) => {
1880
+ const event = /* @__PURE__ */ __name((name) => {
1881
+ try {
1882
+ dispatch.set(name, { detail: { name } });
1883
+ } catch (_) {
1884
+ }
1885
+ return;
1886
+ }, "event");
1887
+ return new Proxy(
1888
+ obj,
1889
+ {
1890
+ get(target, prop) {
1891
+ if (prop === "__path") {
1892
+ return tree.length > 0 ? "state." + tree.join(".") : "state";
1893
+ }
1894
+ if (prop === TARGET) {
1895
+ return target;
1896
+ }
1897
+ if (target[TARGET] !== void 0) {
1898
+ return target;
1899
+ }
1900
+ if (prop === "list") {
1901
+ message_default('Some state could be hidden when you use "state.list". Use "state" to see the complete list ');
1902
+ return JSON.parse(JSON.stringify(target));
1903
+ }
1904
+ if (typeof prop === "string") {
1905
+ const path = tree.length > 0 ? "state." + tree.concat(prop).join(".") : "state." + prop;
1906
+ exports.internal.lastAccessedPath = path;
1907
+ if (exports.internal.tracking) {
1908
+ exports.internal.trackedPaths.add(path);
1909
+ }
1910
+ }
1911
+ if (prop === "_lastPath") {
1912
+ return exports.internal.lastAccessedPath;
1913
+ }
1914
+ if (prop === "remove") {
1915
+ return (key) => {
1916
+ delete target[key];
1917
+ return true;
1918
+ };
1919
+ }
1920
+ if (prop === "removeAll") {
1921
+ return () => {
1922
+ try {
1923
+ for (const key in target) {
1924
+ if (typeof target[key] !== "function" && !["list", "remove", "removeAll", "lock", "unlock"].includes(key)) {
1925
+ delete target[key];
1926
+ }
1927
+ }
1928
+ } catch (error) {
1929
+ console.error(error);
1930
+ }
1931
+ return;
1932
+ };
1933
+ }
1934
+ if (Object.isFrozen(target[prop])) return target[prop];
1935
+ if (prop === "lock" || prop === "unlock") {
1936
+ const value = Reflect.get(target, prop);
1937
+ if (value) return value;
1938
+ }
1939
+ try {
1940
+ const value = Reflect.get(target, prop);
1941
+ if (value && typeof value === "object" && ["Array", "Object"].includes(value.constructor.name)) {
1942
+ let wrapper = wrapperCache.get(value);
1943
+ if (!wrapper) {
1944
+ wrapper = buildProxy(value, callback, tree.concat(prop));
1945
+ wrapperCache.set(value, wrapper);
1946
+ }
1947
+ return wrapper;
1948
+ }
1949
+ return value;
1950
+ } catch (error) {
1951
+ console.error("Error: ", error);
1952
+ return void 0;
1953
+ }
1954
+ },
1955
+ set(target, key, value) {
1956
+ if (exports.internal.locked) {
1957
+ console.error("Error: state is locked. Use state.unlock() to enable modifications.");
1958
+ return false;
1959
+ }
1960
+ if (protect.includes(key)) {
1961
+ console.error("key " + key + " is protected");
1962
+ return false;
1963
+ }
1964
+ if (target[key] && typeof target[key] === "object" && Object.isFrozen(target[key])) {
1965
+ console.error(`Error: state '${key}' is locked`);
1966
+ return false;
1967
+ }
1968
+ if (target[key] && typeof target[key] === "object" && target[key].__locked) {
1969
+ console.error(`Error: state '${key}' is locked. Use state.${key}.unlock() to enable modifications.`);
1970
+ return false;
1971
+ }
1972
+ try {
1973
+ const path = objPath(key, tree);
1974
+ const rawValue = deepRaw(value);
1975
+ const _schemaResult = schema.validate(path, rawValue);
1976
+ if (!_schemaResult.valid) {
1977
+ if (exports.DEV && exports.internal.debug) {
1978
+ console.error(
1979
+ `[memorio schema] Validation failed for '${path}':`,
1980
+ _schemaResult.errors
1981
+ );
1982
+ }
1983
+ message_default(
1984
+ `[memorio schema] Validation failed for '${path}': ` + (_schemaResult.errors?.join(", ") || "unknown error")
1985
+ );
1986
+ return false;
1987
+ }
1988
+ callback(
1989
+ {
1990
+ action: "set",
1991
+ path,
1992
+ target,
1993
+ newValue: rawValue,
1994
+ previousValue: Reflect.get(target, key)
1995
+ }
1996
+ );
1997
+ event("state." + path);
1998
+ Reflect.set(target, key, rawValue);
1999
+ exports.internal.bumpStateVersion();
2000
+ if (target[key] && typeof target[key] === "object") {
2001
+ const lockValue = target[key];
2002
+ if (lockValue && typeof lockValue === "object") {
2003
+ try {
2004
+ Object.defineProperty(lockValue, "__locked", {
2005
+ writable: true,
2006
+ enumerable: false,
2007
+ configurable: false,
2008
+ value: false
2009
+ });
2010
+ Object.defineProperty(lockValue, "lock", {
2011
+ writable: false,
2012
+ enumerable: false,
2013
+ configurable: false,
2014
+ value: /* @__PURE__ */ __name(() => {
2015
+ Object.defineProperty(lockValue, "__locked", {
2016
+ writable: true,
2017
+ enumerable: false,
2018
+ configurable: false,
2019
+ value: true
2020
+ });
2021
+ message_default(`State '${key}' is now locked.`);
2022
+ }, "value")
2023
+ });
2024
+ Object.defineProperty(lockValue, "unlock", {
2025
+ writable: false,
2026
+ enumerable: false,
2027
+ configurable: false,
2028
+ value: /* @__PURE__ */ __name(() => {
2029
+ Object.defineProperty(lockValue, "__locked", {
2030
+ writable: true,
2031
+ enumerable: false,
2032
+ configurable: false,
2033
+ value: false
2034
+ });
2035
+ message_default(`State '${key}' is now unlocked.`);
2036
+ }, "value")
2037
+ });
2038
+ } catch (_) {
2039
+ }
2040
+ }
2041
+ }
2042
+ return true;
2043
+ } catch (error) {
2044
+ console.error("Error in set trap:", error);
2045
+ return false;
2046
+ }
2047
+ },
2048
+ deleteProperty(target, prop) {
2049
+ try {
2050
+ const path = objPath(prop, tree);
2051
+ const previousValue = Reflect.get(target, prop);
2052
+ callback({ action: "delete", path, target, previousValue });
2053
+ return Reflect.deleteProperty(target, prop);
2054
+ } catch (error) {
2055
+ console.error("Error in deleteProperty trap:", error);
2056
+ return false;
2057
+ }
2058
+ },
2059
+ ownKeys(target) {
2060
+ return Reflect.ownKeys(target);
2061
+ },
2062
+ getOwnPropertyDescriptor(target, prop) {
2063
+ return Reflect.getOwnPropertyDescriptor(target, prop);
2064
+ }
2065
+ }
2066
+ );
2067
+ }, "buildProxy");
2068
+ var STATE_INSTANCE_KEY = "__memorio_state_instance__";
2069
+ exports.state = void 0;
2070
+ if (globalThis[STATE_INSTANCE_KEY]) {
2071
+ exports.state = globalThis[STATE_INSTANCE_KEY];
2072
+ } else {
2073
+ exports.state = buildProxy({}, (mutation) => {
2074
+ if (exports.internal.historyEnabled) {
2075
+ exports.internal.recordMutation({
2076
+ path: mutation.path,
2077
+ action: mutation.action,
2078
+ newValue: mutation.newValue,
2079
+ previousValue: mutation.previousValue,
2080
+ timestamp: Date.now()
2081
+ });
2082
+ }
2083
+ });
2084
+ exports.state.lock = () => {
2085
+ exports.internal.locked = true;
2086
+ message_default("State is now locked. All modifications are blocked.");
2087
+ };
2088
+ exports.state.unlock = () => {
2089
+ exports.internal.locked = false;
2090
+ message_default("State is now unlocked. Modifications are allowed.");
2091
+ };
2092
+ globalThis[STATE_INSTANCE_KEY] = exports.state;
2093
+ }
2094
+
2095
+ // index.ts
2096
+ init_store();
2097
+
2098
+ // functions/session/index.ts
2099
+ init_cjs_shims();
2100
+ init_platform();
2101
+ init_internal();
2102
+ init_message();
2103
+ var _sessionStorage = getSessionStorage();
2104
+ var _fallbackStorageByContext2 = /* @__PURE__ */ new Map();
2105
+ function _getFallbackStorage2() {
2106
+ const contextName = exports.internal.currentContext || "";
2107
+ const key = contextName || "default";
2108
+ if (!_fallbackStorageByContext2.has(key)) {
2109
+ _fallbackStorageByContext2.set(key, /* @__PURE__ */ new Map());
2110
+ }
2111
+ return _fallbackStorageByContext2.get(key);
2112
+ }
2113
+ __name(_getFallbackStorage2, "_getFallbackStorage");
2114
+ var _hasStorage2 = _sessionStorage !== null;
2115
+ function _getPrefix2() {
2116
+ const contextName = exports.internal.currentContext || "";
2117
+ return contextName ? `${contextName}-` : `memorio_session_`;
2118
+ }
2119
+ __name(_getPrefix2, "_getPrefix");
2120
+ function _prefixKey2(name) {
2121
+ if (!name || typeof name !== "string") {
2122
+ console.warn("[memorio session] key is empty or not a string - operation aborted");
2123
+ return "";
2124
+ }
2125
+ if (name.length > 512) {
2126
+ console.warn(`[memorio session] key "${name}" exceeds 512 chars - operation aborted`);
2127
+ return "";
2128
+ }
2129
+ return _getPrefix2() + name;
2130
+ }
2131
+ __name(_prefixKey2, "_prefixKey");
2132
+ function _read2(prefixedName) {
2133
+ const raw = _hasStorage2 ? _sessionStorage.getItem(prefixedName) : _getFallbackStorage2().get(prefixedName);
2134
+ return raw ? JSON.parse(raw) : raw;
2135
+ }
2136
+ __name(_read2, "_read");
2137
+ function _write2(prefixedName, value) {
2138
+ const json = JSON.stringify(value);
2139
+ if (_hasStorage2) _sessionStorage.setItem(prefixedName, json);
2140
+ else _getFallbackStorage2().set(prefixedName, json);
2141
+ }
2142
+ __name(_write2, "_write");
2143
+ function _remove2(prefixedName) {
2144
+ if (_hasStorage2) {
2145
+ if (_sessionStorage.getItem(prefixedName)) {
2146
+ _sessionStorage.removeItem(prefixedName);
2147
+ return true;
2148
+ }
2149
+ } else if (_getFallbackStorage2().has(prefixedName)) {
2150
+ _getFallbackStorage2().delete(prefixedName);
2151
+ return true;
2152
+ }
2153
+ return false;
2154
+ }
2155
+ __name(_remove2, "_remove");
2156
+ var SESSION_INSTANCE_KEY = "__memorio_session_instance__";
2157
+ exports.session = void 0;
2158
+ if (globalThis[SESSION_INSTANCE_KEY]) {
2159
+ exports.session = globalThis[SESSION_INSTANCE_KEY];
2160
+ } else {
2161
+ exports.session = new Proxy({}, {});
2162
+ Object.defineProperties(
2163
+ exports.session,
2164
+ {
2165
+ /**
2166
+ * Gets a value from storage.
2167
+ * @param name The key to retrieve.
2168
+ * @returns The parsed value or null if not found.
2169
+ */
2170
+ get: {
2171
+ value: /* @__PURE__ */ __name((name) => {
2172
+ if (!name) {
2173
+ console.warn("[memorio session] session.get() called with empty or null key - returning null");
2174
+ return null;
2175
+ }
2176
+ try {
2177
+ return _read2(_prefixKey2(name));
2178
+ } catch (err) {
2179
+ exports.message(`Error parsing session item '${name}':${err}`);
2180
+ }
2181
+ return null;
2182
+ }, "value")
2183
+ },
2184
+ /**
2185
+ * Sets a value in storage.
2186
+ * @param name The key to set.
2187
+ * @param value The value to store.
2188
+ * @returns true if written, false if the key was rejected.
2189
+ */
2190
+ set: {
2191
+ value: /* @__PURE__ */ __name((name, value) => {
2192
+ if (!name) {
2193
+ console.warn("[memorio session] session.set() called with empty or null key - write aborted");
2194
+ return false;
2195
+ }
2196
+ const prefixedName = _prefixKey2(name);
2197
+ if (!prefixedName) return false;
2198
+ if (typeof value === "function") {
2199
+ console.warn("[memorio session] functions are not storable - write aborted for key: " + name);
2200
+ exports.message("It's not secure to session functions.");
2201
+ return false;
2202
+ }
2203
+ try {
2204
+ _write2(prefixedName, value);
2205
+ } catch (err) {
2206
+ exports.message(`Error setting session item '${name}': ${err}`);
2207
+ return false;
2208
+ }
2209
+ return true;
2210
+ }, "value")
2211
+ },
2212
+ /**
2213
+ * Removes a value from storage.
2214
+ * @param name The key to remove.
2215
+ * @returns True if removed.
2216
+ */
2217
+ remove: {
2218
+ value: /* @__PURE__ */ __name((name) => {
2219
+ if (!name) {
2220
+ console.warn("[memorio session] session.remove() called with empty or null key - returning false");
2221
+ return false;
2222
+ }
2223
+ const prefixedName = _prefixKey2(name);
2224
+ if (!prefixedName) return false;
2225
+ try {
2226
+ return _remove2(prefixedName);
2227
+ } catch (err) {
2228
+ exports.message(`Error removing session item '${name}': ${err}`);
2229
+ }
2230
+ return false;
2231
+ }, "value")
2232
+ },
2233
+ /**
2234
+ * Alias for remove.
2235
+ * @param name The key to delete.
2236
+ * @returns True if removed.
2237
+ */
2238
+ delete: {
2239
+ value: /* @__PURE__ */ __name((name) => {
2240
+ return exports.session.remove(name);
2241
+ }, "value")
2242
+ },
2243
+ /**
2244
+ * Clears all sessionStorage items.
2245
+ */
2246
+ removeAll: {
2247
+ value: /* @__PURE__ */ __name(() => {
2248
+ if (_hasStorage2) {
2249
+ const keysToRemove = [];
2250
+ for (let i = 0; i < _sessionStorage.length; i++) {
2251
+ const key = _sessionStorage.key(i);
2252
+ if (key?.startsWith(_getPrefix2())) {
2253
+ keysToRemove.push(key);
2254
+ }
2255
+ }
2256
+ keysToRemove.forEach((key) => _sessionStorage.removeItem(key));
2257
+ } else {
2258
+ _getFallbackStorage2().clear();
2259
+ }
2260
+ return true;
2261
+ }, "value")
2262
+ },
2263
+ /**
2264
+ * Alias for removeAll.
2265
+ */
2266
+ clearAll: {
2267
+ value: /* @__PURE__ */ __name(() => {
2268
+ exports.session.removeAll();
2269
+ return true;
2270
+ }, "value")
2271
+ },
2272
+ quota: {
2273
+ value: /* @__PURE__ */ __name(async () => {
2274
+ return [0, 0];
2275
+ }, "value")
2276
+ },
2277
+ /**
2278
+ * Gets total size of all sessionStorage items.
2279
+ * @returns Total size in characters.
2280
+ */
2281
+ size: {
2282
+ value: /* @__PURE__ */ __name(() => {
2283
+ let totalSize = 0;
2284
+ if (_hasStorage2) {
2285
+ Object.keys(_sessionStorage).forEach(
2286
+ (key) => {
2287
+ if (key.startsWith(_getPrefix2())) {
2288
+ const item = _sessionStorage.getItem(key);
2289
+ if (item) totalSize += item.length;
2290
+ }
2291
+ }
2292
+ );
2293
+ } else {
2294
+ _getFallbackStorage2().forEach((value) => {
2295
+ totalSize += value.length;
2296
+ });
2297
+ }
2298
+ return totalSize;
2299
+ }, "value")
2300
+ },
2301
+ /**
2302
+ * Check if using real sessionStorage or fallback
2303
+ */
2304
+ isPersistent: {
2305
+ get: /* @__PURE__ */ __name(() => _hasStorage2, "get")
2306
+ },
2307
+ /**
2308
+ * Get a list of all memorio session items.
2309
+ */
2310
+ list: {
2311
+ value: /* @__PURE__ */ __name(() => {
2312
+ const result = {};
2313
+ try {
2314
+ if (_hasStorage2) {
2315
+ for (let i = 0; i < _sessionStorage.length; i++) {
2316
+ const key = _sessionStorage.key(i);
2317
+ if (key?.startsWith(_getPrefix2())) {
2318
+ const cleanKey = key.replace(_getPrefix2(), "");
2319
+ const item = _sessionStorage.getItem(key);
2320
+ if (item !== null) {
2321
+ try {
2322
+ result[cleanKey] = JSON.parse(item);
2323
+ } catch {
2324
+ result[cleanKey] = item;
2325
+ }
2326
+ }
2327
+ }
2328
+ }
2329
+ } else {
2330
+ _getFallbackStorage2().forEach((value, key) => {
2331
+ if (key.startsWith(_getPrefix2())) {
2332
+ const cleanKey = key.replace(_getPrefix2(), "");
2333
+ try {
2334
+ result[cleanKey] = JSON.parse(value);
2335
+ } catch {
2336
+ result[cleanKey] = value;
2337
+ }
2338
+ }
2339
+ });
2340
+ }
2341
+ } catch (err) {
2342
+ exports.message(`Error listing session items: ${err}`);
2343
+ }
2344
+ return result;
2345
+ }, "value")
2346
+ }
2347
+ }
2348
+ );
2349
+ Object.freeze(exports.session);
2350
+ globalThis[SESSION_INSTANCE_KEY] = exports.session;
2351
+ }
2352
+
2353
+ // functions/cache/index.ts
2354
+ init_cjs_shims();
2355
+ var CACHE_INSTANCE_KEY = "__memorio_cache_instance__";
2356
+ var cacheData = {};
2357
+ var cache = globalThis[CACHE_INSTANCE_KEY] ? globalThis[CACHE_INSTANCE_KEY] : new Proxy({}, {
2358
+ get(target, prop) {
2359
+ const key = prop;
2360
+ if (key === "get") return (name) => cacheData[name];
2361
+ if (key === "set") return (name, value) => {
2362
+ cacheData[name] = value;
2363
+ };
2364
+ if (key === "remove") return (name) => {
2365
+ delete cacheData[name];
2366
+ return true;
2367
+ };
2368
+ if (key === "removeAll") return () => {
2369
+ Object.keys(cacheData).forEach((k) => delete cacheData[k]);
2370
+ return true;
2371
+ };
2372
+ if (key === "clear") return () => {
2373
+ Object.keys(cacheData).forEach((k) => delete cacheData[k]);
2374
+ return true;
2375
+ };
2376
+ if (key === "list") return () => ({ ...cacheData });
2377
+ return cacheData[key];
2378
+ },
2379
+ set(target, prop, value) {
2380
+ cacheData[prop] = value;
2381
+ return true;
2382
+ },
2383
+ deleteProperty(target, prop) {
2384
+ delete cacheData[prop];
2385
+ return true;
2386
+ }
2387
+ });
2388
+ if (!globalThis[CACHE_INSTANCE_KEY]) {
2389
+ globalThis[CACHE_INSTANCE_KEY] = cache;
2390
+ if (!Object.isFrozen(cache)) {
2391
+ Object.freeze(cache);
2392
+ }
2393
+ }
2394
+
2395
+ // index.ts
2396
+ init_idb();
2397
+ init_sqlite();
2398
+
2399
+ // functions/observer/index.ts
2400
+ init_cjs_shims();
2401
+ init_message();
2402
+ var observerFunction = /* @__PURE__ */ __name((s, cb = null, option = true) => {
2403
+ const resolvePath = /* @__PURE__ */ __name((path2) => {
2404
+ if (typeof path2 === "string") return path2;
2405
+ if (path2 && typeof path2 === "object" && path2.__path) return path2.__path;
2406
+ return null;
2407
+ }, "resolvePath");
2408
+ const path = resolvePath(s);
2409
+ if (!s && !cb) {
2410
+ console.error("Observer Error: You need to setup observer correctly, Some parameters are missed!");
2411
+ return;
2412
+ }
2413
+ if (!s && cb) {
2414
+ console.error(`Observer Error: You need to declare what state need to be monitored as string like 'state.test'.`);
2415
+ return;
2416
+ }
2417
+ if (path) {
2418
+ const t = path.split(".");
2419
+ if (t[0] !== "state" && t[0] !== "store") {
2420
+ console.error(`Observer Error: You need to declare 'state.' or 'store.'. The '${path}' string is incorrect!`);
2421
+ return;
2422
+ }
2423
+ }
2424
+ if (s && !cb) {
2425
+ const resolvedPath = resolvePath(s);
2426
+ if (!resolvedPath) return;
2427
+ const obs = globalThis.observer;
2428
+ if (obs?.list?.[resolvedPath]) dispatch.remove(resolvedPath);
2429
+ message_default(`called: ${resolvedPath}`);
2430
+ return;
2431
+ }
2432
+ if (s && cb) {
2433
+ const resolvedPath = resolvePath(s);
2434
+ if (!resolvedPath) return;
2435
+ if (typeof s !== "string" && !(s && typeof s === "object")) {
2436
+ console.error(`Observer Error: name of state need to be a 'string' like 'state.test' or a direct state value`);
2437
+ return;
2438
+ }
2439
+ const callbacks = Array.isArray(cb) ? cb : [cb];
2440
+ const obs = globalThis.observer;
2441
+ if (obs?.list?.[resolvedPath]) dispatch.remove(resolvedPath);
2442
+ callbacks.forEach((callback) => {
2443
+ if (typeof callback === "function") {
2444
+ dispatch.listen(resolvedPath, callback, option);
2445
+ }
2446
+ });
2447
+ return;
2448
+ }
2449
+ }, "observerFunction");
2450
+ var observer = observerFunction;
2451
+ Object.defineProperties(
2452
+ observer,
2453
+ {
2454
+ /**
2455
+ * See the list of all your observer (eventListener) actually installed.
2456
+ * @returns The list of all installed observers.
2457
+ */
2458
+ list: {
2459
+ get: /* @__PURE__ */ __name(() => globalThis.events, "get")
2460
+ },
2461
+ ///
2462
+ /**
2463
+ * Remove an observer.
2464
+ * @param name The name of the observer to remove.
2465
+ */
2466
+ remove: {
2467
+ value: /* @__PURE__ */ __name((name) => {
2468
+ if (!name) return;
2469
+ dispatch.remove(name);
2470
+ delete globalThis.events[name];
2471
+ return;
2472
+ }, "value")
2473
+ },
2474
+ ///
2475
+ /**
2476
+ * Remove all observers.
2477
+ * @returns void
2478
+ */
2479
+ removeAll: {
2480
+ get: /* @__PURE__ */ __name(() => {
2481
+ const obs = globalThis.observer;
2482
+ const list = obs?.list;
2483
+ if (list) {
2484
+ Object.keys(list).forEach((key) => {
2485
+ obs?.remove?.(key);
2486
+ });
2487
+ }
2488
+ return true;
2489
+ }, "get")
2490
+ },
2491
+ ///
2492
+ /**
2493
+ * Check if an observer exists for the given path.
2494
+ * @param name The state path to check.
2495
+ * @returns true if an observer exists for the path, false otherwise.
2496
+ */
2497
+ has: {
2498
+ value: /* @__PURE__ */ __name((name) => {
2499
+ const obs = globalThis.observer;
2500
+ return !!obs?.list?.[name];
2501
+ }, "value")
2502
+ }
2503
+ }
2504
+ );
2505
+
2506
+ // functions/useObserver/index.ts
2507
+ init_cjs_shims();
2508
+ init_message();
2509
+ init_internal();
2510
+ init_env();
2511
+ var useObserver = /* @__PURE__ */ __name(((func, deps = []) => {
2512
+ if (!deps || typeof func !== "function") {
2513
+ return () => {
2514
+ };
2515
+ }
2516
+ const handlers = [];
2517
+ const depList = Array.isArray(deps) && !deps.__path ? deps : [deps];
2518
+ try {
2519
+ depList.forEach((dep) => {
2520
+ let t = "";
2521
+ if (typeof dep === "function") {
2522
+ const result = exports.propertyName(dep);
2523
+ if (result) t = result;
2524
+ } else if (typeof dep === "object" && dep !== null) {
2525
+ t = dep.__path || (typeof dep.toString === "function" && dep.toString() !== "[object Object]" ? dep.toString() : "");
2526
+ }
2527
+ if (t) {
2528
+ t = t.replace(/^(\(\)\s*=>\s*)/, "").replace(/^globalThis\./, "").replace(/^state\./, "");
2529
+ const path = t.startsWith("store.") || t.startsWith("state.") ? t : "state." + t;
2530
+ dispatch.listen(path, () => func());
2531
+ handlers.push(path);
2532
+ } else {
2533
+ exports.internal.clearTrackedPaths();
2534
+ exports.internal.tracking = true;
2535
+ try {
2536
+ func();
2537
+ } catch (_) {
2538
+ }
2539
+ exports.internal.tracking = false;
2540
+ exports.internal.trackedPaths.forEach((path) => {
2541
+ if (!handlers.includes(path)) {
2542
+ message_default(`useObserver: [Auto-Discovery] -> "${path}"`);
2543
+ dispatch.listen(path, () => func());
2544
+ handlers.push(path);
2545
+ }
2546
+ });
2547
+ }
2548
+ });
2549
+ if (handlers.length > 0) {
2550
+ message_default(`useObserver: Monitoring ${handlers.length} paths.`);
2551
+ } else {
2552
+ console.warn(`useObserver: No paths resolved for monitoring. Check your dependencies!`);
2553
+ }
2554
+ return () => {
2555
+ handlers.forEach((path) => {
2556
+ if (typeof dispatch.remove === "function") {
2557
+ dispatch.remove(path);
2558
+ message_default(`useObserver: Stopped monitoring "${path}"`);
2559
+ }
2560
+ });
2561
+ };
2562
+ } catch (err) {
2563
+ message_default(`useObserver Error: ${err}`);
2564
+ return () => {
2565
+ };
2566
+ }
2567
+ }), "useObserver");
2568
+ if (exports.DEV && !("useObserver" in globalThis)) {
2569
+ if (!globalThis.useObserver) globalThis.useObserver = null;
2570
+ Object.defineProperty(
2571
+ globalThis,
2572
+ "useObserver",
2573
+ {
2574
+ value: useObserver,
2575
+ writable: true,
2576
+ enumerable: false,
2577
+ configurable: true
2578
+ }
2579
+ );
2580
+ Object.freeze(globalThis.useObserver);
2581
+ }
2582
+
2583
+ // index.ts
2584
+ init_message();
2585
+
2586
+ // functions/logger/index.ts
2587
+ init_cjs_shims();
2588
+ init_internal();
2589
+ init_message();
2590
+ init_env();
2591
+ var defaultConfig = {
2592
+ enabled: true,
2593
+ logToConsole: true,
2594
+ modules: ["state", "store", "session", "cache", "idb"],
2595
+ maxEntries: 1e3
2596
+ };
2597
+ function isDebugEnabled() {
2598
+ return exports.DEV && exports.internal.debug === true;
2599
+ }
2600
+ __name(isDebugEnabled, "isDebugEnabled");
2601
+ var config = { ...defaultConfig };
2602
+ var logHistory = [];
2603
+ var configure = /* @__PURE__ */ __name((options) => {
2604
+ config = { ...config, ...options };
2605
+ }, "configure");
2606
+ var enable = /* @__PURE__ */ __name(() => {
2607
+ config.enabled = true;
2608
+ }, "enable");
2609
+ var disable = /* @__PURE__ */ __name(() => {
2610
+ config.enabled = false;
2611
+ }, "disable");
2612
+ var isEnabled = /* @__PURE__ */ __name((module) => {
2613
+ return config.enabled && config.modules.includes(module);
2614
+ }, "isEnabled");
2615
+ var log = /* @__PURE__ */ __name((module, action, path, value, previousValue) => {
2616
+ if (!isEnabled(module)) return;
2617
+ const entry = {
2618
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
2619
+ module,
2620
+ action,
2621
+ path,
2622
+ value,
2623
+ previousValue
2624
+ };
2625
+ logHistory.push(entry);
2626
+ if (logHistory.length > config.maxEntries) {
2627
+ logHistory.shift();
2628
+ }
2629
+ if (config.logToConsole && isDebugEnabled()) {
2630
+ const prefix = `[Memorio:${module.toUpperCase()}]`;
2631
+ const color = getModuleColor(module);
2632
+ message_default(
2633
+ `%c${prefix}%c ${action} ${path},
2634
+ color: ${color}; font-weight: bold,
2635
+ color: inherit`
2636
+ );
2637
+ if (value !== void 0) {
2638
+ message_default(` \u2192 value:${value}`);
2639
+ }
2640
+ if (previousValue !== void 0) {
2641
+ message_default(` \u2190 previous:${previousValue}`);
2642
+ }
2643
+ }
2644
+ if (config.customHandler) {
2645
+ config.customHandler(entry);
2646
+ }
2647
+ }, "log");
2648
+ var getModuleColor = /* @__PURE__ */ __name((module) => {
2649
+ const colors = {
2650
+ state: "#4CAF50",
2651
+ store: "#2196F3",
2652
+ session: "#FF9800",
2653
+ cache: "#9C27B0",
2654
+ idb: "#F44336"
2655
+ };
2656
+ return colors[module] || "#888888";
2657
+ }, "getModuleColor");
2658
+ var getHistory = /* @__PURE__ */ __name(() => {
2659
+ return [...logHistory];
2660
+ }, "getHistory");
2661
+ var clearHistory = /* @__PURE__ */ __name(() => {
2662
+ logHistory.length = 0;
2663
+ }, "clearHistory");
2664
+ var getStats = /* @__PURE__ */ __name(() => {
2665
+ const stats2 = {
2666
+ total: logHistory.length,
2667
+ state: 0,
2668
+ store: 0,
2669
+ session: 0,
2670
+ cache: 0,
2671
+ idb: 0,
2672
+ set: 0,
2673
+ get: 0,
2674
+ delete: 0,
2675
+ clear: 0
2676
+ };
2677
+ for (const entry of logHistory) {
2678
+ if (entry) {
2679
+ const module = entry.module;
2680
+ const action = entry.action;
2681
+ if (module && typeof stats2[module] === "number") stats2[module]++;
2682
+ if (action && typeof stats2[action] === "number") stats2[action]++;
2683
+ }
2684
+ }
2685
+ return stats2;
2686
+ }, "getStats");
2687
+ var exportLogs = /* @__PURE__ */ __name(() => {
2688
+ return JSON.stringify(logHistory, null, 2);
2689
+ }, "exportLogs");
2690
+ var logger = {
2691
+ configure,
2692
+ enable,
2693
+ disable,
2694
+ isEnabled,
2695
+ log,
2696
+ getHistory,
2697
+ clearHistory,
2698
+ getStats,
2699
+ exportLogs
2700
+ };
2701
+
2702
+ // functions/devtools/index.ts
2703
+ init_cjs_shims();
2704
+ init_internal();
2705
+ init_env();
2706
+ var _state = globalThis.__memorio_state_instance__;
2707
+ var _store = globalThis.__memorio_store_instance__;
2708
+ var _session = globalThis.__memorio_session_instance__;
2709
+ var _cache = globalThis.__memorio_cache_instance__;
2710
+ function isDebugEnabled2() {
2711
+ return exports.DEV && exports.internal.debug === true;
2712
+ }
2713
+ __name(isDebugEnabled2, "isDebugEnabled");
2714
+ function extractStoreData() {
2715
+ if (!_store) return {};
2716
+ const result = {};
2717
+ const store2 = _store;
2718
+ if (typeof store2.list === "function") {
2719
+ try {
2720
+ return store2.list();
2721
+ } catch {
2722
+ }
2723
+ }
2724
+ if (typeof store2.get === "function") {
2725
+ for (const key of Object.keys(store2)) {
2726
+ if (!["get", "set", "remove", "delete", "removeAll", "clearAll", "size", "isPersistent", "list"].includes(key)) {
2727
+ try {
2728
+ const val = store2.get(key);
2729
+ if (val !== null && val !== void 0) {
2730
+ result[key] = val;
2731
+ }
2732
+ } catch {
2733
+ }
2734
+ }
2735
+ }
2736
+ }
2737
+ return result;
2738
+ }
2739
+ __name(extractStoreData, "extractStoreData");
2740
+ function extractSessionData() {
2741
+ if (!_session) return {};
2742
+ const result = {};
2743
+ const session2 = _session;
2744
+ if (typeof session2.list === "function") {
2745
+ try {
2746
+ return session2.list();
2747
+ } catch {
2748
+ }
2749
+ }
2750
+ if (typeof session2.get === "function") {
2751
+ for (const key of Object.keys(session2)) {
2752
+ if (!["get", "set", "remove", "delete", "removeAll", "clearAll", "size", "isPersistent", "list"].includes(key)) {
2753
+ try {
2754
+ const val = session2.get(key);
2755
+ if (val !== null && val !== void 0) {
2756
+ result[key] = val;
2757
+ }
2758
+ } catch {
2759
+ }
2760
+ }
2761
+ }
2762
+ }
2763
+ return result;
2764
+ }
2765
+ __name(extractSessionData, "extractSessionData");
2766
+ var inspect = /* @__PURE__ */ __name(() => {
2767
+ if (!isDebugEnabled2()) return;
2768
+ if (_state) {
2769
+ const stateList = _state.list;
2770
+ let stateData;
2771
+ if (typeof stateList === "function") {
2772
+ stateData = stateList();
2773
+ } else if (typeof stateList === "object" && stateList !== null) {
2774
+ stateData = stateList;
2775
+ } else {
2776
+ stateData = _state;
2777
+ }
2778
+ console.table(stateData);
2779
+ }
2780
+ if (_store) {
2781
+ console.table(extractStoreData());
2782
+ }
2783
+ if (_session) {
2784
+ console.table(extractSessionData());
2785
+ }
2786
+ if (_cache) {
2787
+ const cacheList = _cache.list;
2788
+ let cacheData2;
2789
+ if (typeof cacheList === "function") {
2790
+ cacheData2 = cacheList();
2791
+ } else if (typeof cacheList === "object" && cacheList !== null) {
2792
+ cacheData2 = cacheList;
2793
+ } else {
2794
+ cacheData2 = _cache;
2795
+ }
2796
+ console.table(cacheData2);
2797
+ }
2798
+ }, "inspect");
2799
+ var stats = /* @__PURE__ */ __name(() => {
2800
+ const getKeys = /* @__PURE__ */ __name((obj) => {
2801
+ if (!obj) return 0;
2802
+ if (typeof obj.list === "function") {
2803
+ try {
2804
+ const list = obj.list();
2805
+ return Object.keys(list).length;
2806
+ } catch {
2807
+ }
2808
+ }
2809
+ return Object.keys(obj).length;
2810
+ }, "getKeys");
2811
+ return {
2812
+ stateKeys: getKeys(_state),
2813
+ storeKeys: getKeys(_store),
2814
+ sessionKeys: getKeys(_session),
2815
+ cacheKeys: getKeys(_cache),
2816
+ idbDatabases: 0,
2817
+ sqliteDbCount: 0,
2818
+ lastUpdate: (/* @__PURE__ */ new Date()).toISOString()
2819
+ };
2820
+ }, "stats");
2821
+ var clear = /* @__PURE__ */ __name((moduleName) => {
2822
+ const targets = { state: _state, store: _store, session: _session, cache: _cache };
2823
+ const target = targets[moduleName];
2824
+ if (target && typeof target.clear === "function") {
2825
+ target.clear();
2826
+ } else if (target && typeof target.removeAll === "function") {
2827
+ target.removeAll();
2828
+ } else {
2829
+ console.debug(`Module ${moduleName} not found or does not support clear()/removeAll()`);
2830
+ }
2831
+ }, "clear");
2832
+ var clearAll = /* @__PURE__ */ __name(() => {
2833
+ clear("state");
2834
+ clear("store");
2835
+ clear("session");
2836
+ clear("cache");
2837
+ }, "clearAll");
2838
+ var exportData = /* @__PURE__ */ __name(() => {
2839
+ const getStateData = /* @__PURE__ */ __name(() => {
2840
+ if (!_state) return void 0;
2841
+ try {
2842
+ if (typeof _state.list === "function") {
2843
+ return _state.list();
2844
+ }
2845
+ return _state;
2846
+ } catch {
2847
+ return void 0;
2848
+ }
2849
+ }, "getStateData");
2850
+ const getStoreData = /* @__PURE__ */ __name(() => {
2851
+ return extractStoreData();
2852
+ }, "getStoreData");
2853
+ const getSessionData = /* @__PURE__ */ __name(() => {
2854
+ return extractSessionData();
2855
+ }, "getSessionData");
2856
+ const getCacheData = /* @__PURE__ */ __name(() => {
2857
+ if (!_cache) return void 0;
2858
+ try {
2859
+ if (typeof _cache.list === "function") {
2860
+ return _cache.list();
2861
+ }
2862
+ return _cache;
2863
+ } catch {
2864
+ return void 0;
2865
+ }
2866
+ }, "getCacheData");
2867
+ const data = {
2868
+ state: getStateData(),
2869
+ store: getStoreData(),
2870
+ session: getSessionData(),
2871
+ cache: getCacheData(),
2872
+ exportedAt: (/* @__PURE__ */ new Date()).toISOString()
2873
+ };
2874
+ return JSON.stringify(data, null, 2);
2875
+ }, "exportData");
2876
+ var importData = /* @__PURE__ */ __name((jsonString) => {
2877
+ try {
2878
+ const data = JSON.parse(jsonString);
2879
+ if (data.state) {
2880
+ Object.entries(data.state).forEach(([key, value]) => {
2881
+ if (_state && key !== "list" && key !== "remove" && key !== "removeAll") {
2882
+ ;
2883
+ _state[key] = value;
2884
+ }
2885
+ });
2886
+ }
2887
+ if (data.store && _store && typeof _store.set === "function") {
2888
+ Object.entries(data.store).forEach(([key, value]) => {
2889
+ ;
2890
+ _store.set(key, value);
2891
+ });
2892
+ }
2893
+ if (data.session && _session && typeof _session.set === "function") {
2894
+ Object.entries(data.session).forEach(([key, value]) => {
2895
+ ;
2896
+ _session.set(key, value);
2897
+ });
2898
+ }
2899
+ if (data.cache && _cache) {
2900
+ Object.entries(data.cache).forEach(([key, value]) => {
2901
+ if (_cache && key !== "get" && key !== "set" && key !== "remove" && key !== "clear") {
2902
+ ;
2903
+ _cache[key] = value;
2904
+ }
2905
+ });
2906
+ }
2907
+ } catch (error) {
2908
+ console.debug("Import failed:", error);
2909
+ }
2910
+ }, "importData");
2911
+ var watch = /* @__PURE__ */ __name((moduleName, path) => {
2912
+ const targets = { state: _state, store: _store, session: _session, cache: _cache };
2913
+ const target = targets[moduleName];
2914
+ if (!target) {
2915
+ console.debug(`Module ${moduleName} not found`);
2916
+ return;
2917
+ }
2918
+ const initialValue = target[path];
2919
+ console.debug(`Watching ${moduleName}.${path} (initial: ${JSON.stringify(initialValue)})`);
2920
+ if (moduleName === "state" && globalThis.memorio?.dispatch) {
2921
+ const handler = /* @__PURE__ */ __name((e) => {
2922
+ const detail = e.detail;
2923
+ if (detail?.name?.includes(path)) {
2924
+ console.debug(`Change: ${moduleName}.${path} =`, e.detail.value);
2925
+ }
2926
+ }, "handler");
2927
+ target.addEventListener?.("memorio-change", handler);
2928
+ }
2929
+ }, "watch");
2930
+ var help = /* @__PURE__ */ __name(() => {
2931
+ console.debug(`
8
2932
  Memorio DevTools Help
9
2933
 
10
2934
  Available commands:
@@ -22,8 +2946,1390 @@ Shortcuts (dev only):
22
2946
  store - localStorage wrapper
23
2947
  session - sessionStorage wrapper
24
2948
  cache - in-memory cache
25
- `);},Te={inspect:zo,stats:Ko,clear:pe,clearAll:Qo,exportData:Fo,importData:Wo,watch:Yo,help:Go};a();var gr="__memorio_hlc_node";function st(){if(typeof globalThis>"u")return "node";try{if(typeof sessionStorage<"u"&&sessionStorage){let e=sessionStorage.getItem(gr);return e||(e=br(),sessionStorage.setItem(gr,e)),e}}catch{}return globalThis.__memorioHlcNodeId||(globalThis.__memorioHlcNodeId=br()),globalThis.__memorioHlcNodeId}function br(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID().slice(0,8):Math.random().toString(36).slice(2,10)}var nt="__memorio_hlc_local",$=globalThis[nt]||{physical:0,logical:0,node:st()};globalThis[nt]||(globalThis[nt]=$);function Xo(e){let t=Date.now(),r=$.physical,o,n;return t>r?(o=t,n=0):(o=r,n=$.logical+1),$.physical=o,$.logical=n,{physical:o,logical:n,node:$.node}}function Zo(e){let t=Date.now();return e.physical>$.physical?($.physical=e.physical>t?e.physical:t,$.logical=1):e.physical===$.physical&&($.logical=Math.max($.logical,e.logical)+1),$.node=st(),{...$}}function hr(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 en(e,t){return hr(e,t)<0}function tn(e){return `hlc:${e.physical}:${e.logical}:${e.node}`}function rn(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 _={tick:Xo,receive:Zo,compare:hr,happenedBefore:en,serialize:tn,parse:rn,getNodeId:st};a();function ye(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?on(t,r):t===null?it(e,r):nn(e,t,r)}function on(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===""?at(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 it(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===""?sn(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=xr(o,0);return i!==null?i+at("a",t):"b"+at("a",t)}function xr(e,t){if(t>=e.length)return null;let r=e.charCodeAt(t);return r<122?e.slice(0,t)+String.fromCharCode(r+1):xr(e,t+1)}function nn(e,t,r){let o=e.split("."),n=t.split("."),s=Math.max(o.length,n.length),i=vr(o,s),l=vr(n,s),f=[];for(let g=0;g<s;g++){let b=i[g]||"a",P=l[g]||"z";if(b===P)f.push(b);else {let Ae=b.charCodeAt(0);if(P.charCodeAt(0)-Ae>1){for(f.push(String.fromCharCode(Ae+1));f.length<r;)f.push("a");return f.join(".")}return f.push(b),f.push(it(b,r)),f.join(".")}}return it(e,r)}function vr(e,t){for(;e.length<t;)e.push("a");return e}function at(e,t){let r=e;for(;r.length<t;)r="a"+r;return r}function sn(e,t){let r=e;for(;r.length<t;)r=r+"a";return r}function an(){return ye(null,null)}function Sr(e){return ye(e,null)}function wr(e){return ye(null,e)}function _r(e,t){return ye(e,t)}function ln(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 cn(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=wr(e[0].key):n===null?s.key=Sr(r):s.key=_r(r,n),t.push(s),r=s.key;}return t}var un={generateBetween:ye,firstKey:an,after:Sr,before:wr,between:_r,reorder:ln,reindex:cn};j();K();a();K();j();var lt={version:"4.9.5"};L();ne();T();D();S();a();function ct(){return exports.state}a();j();S();function Er(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 dt=()=>Er(H(exports.state)),ft=e=>{let t=[],r=(o,n,s)=>{let i=o?Object.keys(o):[],l=n?Object.keys(n):[];for(let f of l){let g=s?`${s}.${f}`:f,b=o?o[f]:void 0,P=n[f];b!==P&&(typeof b!==typeof P||b===void 0?t.push({path:g,oldValue:b,newValue:P}):b&&typeof b=="object"?r(b,P,g):b!==P&&t.push({path:g,oldValue:b,newValue:P}));}for(let f of i)if(!(f in(n||{}))){let g=s?`${s}.${f}`:f;t.push({path:g,oldValue:o[f],newValue:void 0});}};return r(e,H(exports.state),""),t},mt=(e=true)=>{exports.internal.historyEnabled=e,c(`[memorio history] Tracking ${e?"enabled":"disabled"}`);};var pt=()=>[...exports.internal.mutations],yt=()=>exports.internal.canUndo(),gt=()=>exports.internal.canRedo(),bt=()=>{if(!exports.internal.historyEnabled){c("[memorio history] History is not enabled");return}let e=exports.internal.popUndo();if(e)return fn(e),c(`[memorio history] Undid: ${e.action} ${e.path}`),e},ht=()=>{if(!exports.internal.historyEnabled){c("[memorio history] History is not enabled");return}let e=exports.internal.popRedo();if(e)return mn(e),c(`[memorio history] Redid: ${e.action} ${e.path}`),e};function fn(e){let t=exports.internal.historyEnabled;exports.internal.historyEnabled=false;try{e.action==="set"?e.previousValue===void 0?kr(e.path):ut(e.path,e.previousValue):e.action==="delete"&&e.previousValue!==void 0&&ut(e.path,e.previousValue);}finally{exports.internal.historyEnabled=t;}}function mn(e){let t=exports.internal.historyEnabled;exports.internal.historyEnabled=false;try{e.action==="set"?ut(e.path,e.newValue):e.action==="delete"&&kr(e.path);}finally{exports.internal.historyEnabled=t;}}function ut(e,t){let r=e.split("."),o=exports.state;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 kr(e){let t=e.split(".");if(t.length===1){exports.state.remove(t[0]);return}let r=exports.state;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 vt=e=>{exports.state.removeAll();for(let t of Object.keys(e))exports.state[t]=Er(e[t]);exports.internal.clearHistory(),c("[memorio history] State rolled back to snapshot");},xt=()=>{exports.internal.clearHistory(),c("[memorio history] History cleared");},St=()=>{exports.internal.clearRedo();};a();ne();T();a();ne();var B=globalThis;function ge(){let e=B.memorioSyncConfig;if(e&&typeof e.namespace=="string"&&e.namespace)return `ns:${e.namespace}`;let t=B.memorio?B.memorio._currentContext:void 0,r=typeof t=="string"&&t?t:"";return r?`ctx:${r}`:"default"}function Pr(){return !!B.memorioSyncConfig}var ae=e=>`memorio:sync:${e}:`,ie=e=>`${ae(e)}index`;function wt(e){try{return typeof e=="string"?JSON.parse(e):e}catch{return null}}var _t={async append(e,t){let r=ge(),o={...e,operation:t,updatedAt:e.updatedAt||Date.now(),version:e.version||1,sync:"pending",hlc:e.hlc||_.serialize(_.tick())},n=`${ae(r)}${o.id}`;exports.store.set(n,o);let s=exports.store.get(ie(r))||[];return s.includes(o.id)||s.push(o.id),exports.store.set(ie(r),s),o},async pending(){let e=ge(),t=[],r=exports.store.get(ie(e))||[];for(let o of r){let n=exports.store.get(`${ae(e)}${o}`);if(!n)continue;let s=wt(n);s&&s.sync!=="synced"&&t.push(s);}return t.sort((o,n)=>{if(o.hlc&&n.hlc){let s=_.parse(o.hlc),i=_.parse(n.hlc);if(s&&i)return _.compare(s,i)}return (o.updatedAt||0)-(n.updatedAt||0)}),t},async markSynced(e){if(!e.length)return 0;let t=ge(),r=0,o=exports.store.get(ie(t))||[];for(let n of o){if(!e.includes(n))continue;let s=`${ae(t)}${n}`,i=exports.store.get(s);if(!i)continue;let l=wt(i);!l||l.sync==="synced"||(l.sync="synced",exports.store.set(s,l),r++);}return r},async get(e){let t=ge(),r=exports.store.get(`${ae(t)}${e}`);return wt(r??"")},async clear(){let e=ge(),t=exports.store.get(ie(e))||[];for(let r of t)exports.store.remove(`${ae(e)}${r}`);exports.store.remove(ie(e));},async replay(){let e={synced:[],resolved:[]};if(!Pr())return e;let r=(B.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=_.parse(i.hlc);f&&_.receive(f);}let l=await this.get(i.id);if(l&&i.hlc&&l.hlc){let f=_.parse(l.hlc),g=_.parse(i.hlc);if(f&&g){let b=_.compare(f,g);if(b===0){let P=typeof r.resolveConflict=="function"?await r.resolveConflict(l,i):"remote";if(e.resolved?.push({id:i.id,resolution:P}),P==="local")continue}else if(b>0)continue}}await this.append(i,i.operation||"confirm"),await this.markSynced([i.id]);}}catch{}return e},status(){return Promise.resolve("store")}};function Tr(e){let t=B.memorioSyncConfig||{};return B.memorioSyncConfig={...t,...e},_t}if(typeof B.addEventListener=="function"){let e=false;B.addEventListener("focus",()=>{e||!Pr()||(e=true,_t.replay().finally(()=>{e=false;}));});}var Et=_t;var $e="__memorio_memory_index__",Cr="__memorio_superseded__";function le(){return !!globalThis.memorioSyncConfig}async function F(e,t){if(le()&&e.scope!=="hot")try{await Et.append(e,t);}catch{}}function kt(e){return e.startsWith(Cr)?e:`${Cr}${e}`}function Dr(e){return e?Array.isArray(e)?e:[e]:[]}function pn(e,t){if(t.scope)return t.scope;let r=JSON.stringify(e).length;return r>1e6?"durable":("local")}function E(){return Date.now()}function De(e){return e.ttl===null||e.ttl===void 0?false:E()-e.createdAt>e.ttl}function yn(e,t){return e.status==="obsolete"||e.status==="superseded"||De(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 gn(e,t){return !(e.status!=="active"||De(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 bn(e){let t=(E()-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 Or(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 Pt(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 hn(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 W(e){let t=e.status==="superseded"?kt(e.id||e.key):e.key,r=JSON.stringify(e);switch(e.scope){case "hot":Pt(exports.state,t,e.value);break;case "session":exports.session.set(t,r);break;case "local":exports.store.set(t,r);break;case "durable":await exports.idb.set("memories",t,r);break}await vn(e.id||e.key,e.scope,e.status==="superseded");}async function Ar(e,t,r=false){let o=r?kt(e):e,n;switch(t){case "hot":{let s=Or(exports.state,o);return s===void 0?null:Mr(e,s,t)}case "session":n=exports.session.get(o);break;case "local":n=exports.store.get(o);break;case "durable":n=await exports.idb.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 Mr(e,t,r){return {id:e,key:e,value:t,type:"fact",confidence:1,scope:r,ttl:null,tags:[],status:"active",createdAt:E(),lastConfirmedAt:E(),supersededId:null}}async function $r(e,t,r=false){let o=r?kt(e):e;switch(t){case "hot":Pt(exports.state,o,void 0);break;case "session":exports.session.remove(o);break;case "local":exports.store.remove(o);break;case "durable":await exports.idb.deleteKey("memories",o);break}await xn(e,r);}async function be(){try{let e=exports.store.get($e);return e?JSON.parse(e):{}}catch{return {}}}async function vn(e,t,r=false){let o=await be();o[e]={scope:t,superseded:r},exports.store.set($e,JSON.stringify(o));}async function xn(e,t=false){let r=await be(),o=r[e];o&&(t&&o.superseded||!t&&!o.superseded)&&delete r[e],exports.store.set($e,JSON.stringify(r));}async function Ce(){let e=await be(),t=[];for(let[r,o]of Object.entries(e)){let n=await Ar(r,o.scope,o.superseded);n&&(n.id=n.id||r,n.supersededId=n.supersededId??null,t.push(n));}return t}var Oe={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:E()};await W(f),await F(f,"supersede");}let n=pn(t,r),s=Dr(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:E(),lastConfirmedAt:E(),updatedAt:E(),version:o&&o.version?o.version+1:1,sync:le()?"pending":void 0,supersededId:o?o.id:null,hlc:_.serialize(_.tick())};await W(i),await F(i,"remember"),w.set("memorio:memory:remembered",{key:e,scope:n,entryId:i.id});},async recall(e,t={}){let r=await this._getEntry(e);return !r||!yn(r,t)?null:(r.lastConfirmedAt=E(),await W(r),w.set("memorio:memory:recalled",{key:e}),r.value)},async context(e={}){return (await Ce()).filter(n=>gn(n,e)).map(n=>({entry:n,score:bn(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:E()-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:E(),lastConfirmedAt:E(),updatedAt:E(),version:1,sync:le()?"pending":void 0,hlc:_.serialize(_.tick())};await F(o,"delete");return}await $r(t.id||e,t.scope,t.status==="superseded");let r={...t,value:null,status:"obsolete",operation:"delete",updatedAt:E(),version:(t.version?t.version:0)+1,sync:le()?"pending":void 0,hlc:_.serialize(_.tick())};await F(r,"delete"),w.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${E()}`,s={...o,id:n,key:o.key,status:"superseded",supersededId:null,lastConfirmedAt:E()};await W(s),await F(s,"supersede");let i={...o,value:t,lastConfirmedAt:E(),updatedAt:E(),version:(o.version?o.version:0)+1,sync:le()?"pending":void 0,hlc:_.serialize(_.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:Dr(r.tags)}:{},...r.source?{source:r.source}:{}};await W(i),await F(i,"update"),w.set("memorio:memory:updated",{key:e,entryId:i.id});},async stats(){let e=await Ce(),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,De(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 Ce(),t=0;for(let r of e)De(r)&&r.status==="active"&&(r.status="obsolete",r.updatedAt=E(),r.operation="expire",await W(r),await F(r,"expire"),t++);return t},async clear(){let e=await be();for(let[t,r]of Object.entries(e))await $r(t,r.scope,r.superseded);exports.store.remove($e);},async _getEntry(e){let r=(await be())[e];if(!r){let o=Or(exports.state,e);return o!==void 0?Mr(e,o,"hot"):null}return Ar(e,r.scope,r.superseded)},async _loadAll(){return Ce()},async _save(e){await W(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"?(Pt({[r.key]:r.value},s.path.replace(/^[^.]+\./,""),s.value),o=true):s.op==="delete"&&(hn({[r.key]:r.value},s.path.replace(/^[^.]+\./,"")),o=true);if(!o)return;let n={...r,updatedAt:E(),lastConfirmedAt:E(),version:(r.version?r.version:0)+1,sync:le()?"pending":void 0,hlc:_.serialize(_.tick()),patches:t,path:t[0]?.path};await W(n),await F(n,"patch"),w.set("memorio:memory:patched",{key:e,patches:t});},journal:Et,configure(e){return Tr(e),this}};a();var Tt=()=>{let e=H(exports.state);return Object.keys(e).filter(t=>!["list","remove","removeAll","lock","unlock"].includes(t))},qr=e=>{if(!e||typeof e!="string")return false;let t=e.replace(/^state\./,"").split("."),r=exports.state;for(let o of t){if(r==null)return false;r=r[o];}return r!==void 0},jr=e=>{let[t,r]=Lr(e);return !t||r===void 0?"undefined":Array.isArray(r)?"array":typeof r},Rr=e=>{let[t,r]=Lr(e);if(!(!t||r===void 0))return Sn(r)},Ir=()=>{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,g=f?Array.isArray(l)?"array":typeof l:"undefined";e.push({path:i,type:g,defined:f}),f&&typeof l=="object"&&!Array.isArray(l)&&l.constructor?.name==="Object"&&t(l,i);}};return t(H(exports.state),""),e};function Lr(e){if(!e||typeof e!="string")return [false,void 0];let t=e.replace(/^state\./,"").split("."),r=exports.state;for(let o of t){if(r==null)return [false,void 0];r=r[o];}return [r!==void 0,r]}function Sn(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:w,message:exports.message,setDescription:()=>{}},writable:false,configurable:true,enumerable:false}),Object.defineProperty(globalThis,"events",{value:{},writable:true,enumerable:false}),typeof globalThis.addEventListener=="function"&&w.listen("memorio:memory:cleanup",async()=>Oe.forgetExpired?.()),Object.defineProperty(memorio,"version",{writable:false,enumerable:false,value:lt.version}),memorio.memory=Oe,It(),memorio.isBrowser=Le,memorio.isNode=Ne,memorio.isDeno=Ve,memorio.isEdge=He,memorio.getCapabilities=fe,memorio.createContext=me,memorio.listContexts=ze,memorio.deleteContext=Ke,memorio.isolate=t=>me(t),Object.defineProperty(memorio,"setContext",{writable:false,enumerable:false,value:t=>Qe(t)}),Object.defineProperty(memorio,"getContext",{writable:false,enumerable:false,value:()=>exports.internal.currentContext}),memorio.registerSchema=z.register,memorio.validate=z.validate,memorio.unregisterSchema=z.unregister,memorio.listSchemas=z.list,memorio.typed=ct,memorio.snapshot=dt,memorio.diff=ft,memorio.undo=bt,memorio.redo=ht,memorio.canUndo=yt,memorio.canRedo=gt,memorio.rollback=vt,memorio.trace=pt,memorio.enableHistory=mt,memorio.clearHistory=xt,memorio.clearRedo=St,Object.defineProperty(memorio,"dispatch",{value:w,writable:true,enumerable:false,configurable:true});let e=exports.DEV;if(memorio.env={isDev:e,isProd:exports.PROD},memorio.global=function(){let t={state:exports.state,store:exports.store,session:exports.session,cache:se,idb:exports.idb,sqlite:exports.sqlite,observer:ke,useObserver:Pe};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(),exports.DEV){Object.defineProperty(memorio,"debug",{get:()=>exports.internal.debug,set:r=>{exports.internal.debug=r;},enumerable:false});let t=fe();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:ve()}),memorio.logger=ot,"$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=Te,memorio.inspect=Tt,memorio.stateKeys=Tt,memorio.pathExists=qr,memorio.stateType=jr,memorio.stateGet=Rr,memorio.stateSchema=Ir,memorio.help=function(){console.debug(`
26
- \u{1F9E0} Memorio ${lt.version} - Help
2949
+ `);
2950
+ }, "help");
2951
+ var devtools = {
2952
+ inspect,
2953
+ stats,
2954
+ clear,
2955
+ clearAll,
2956
+ exportData,
2957
+ importData,
2958
+ watch,
2959
+ help
2960
+ };
2961
+
2962
+ // core/hlc.ts
2963
+ init_cjs_shims();
2964
+ var NODE_ID_KEY = "__memorio_hlc_node";
2965
+ function getNodeId() {
2966
+ if (typeof globalThis === "undefined") return "node";
2967
+ try {
2968
+ if (typeof sessionStorage !== "undefined" && sessionStorage) {
2969
+ let id = sessionStorage.getItem(NODE_ID_KEY);
2970
+ if (!id) {
2971
+ id = generateNodeId();
2972
+ sessionStorage.setItem(NODE_ID_KEY, id);
2973
+ }
2974
+ return id;
2975
+ }
2976
+ } catch {
2977
+ }
2978
+ if (!globalThis.__memorioHlcNodeId) {
2979
+ globalThis.__memorioHlcNodeId = generateNodeId();
2980
+ }
2981
+ return globalThis.__memorioHlcNodeId;
2982
+ }
2983
+ __name(getNodeId, "getNodeId");
2984
+ function generateNodeId() {
2985
+ if (typeof crypto !== "undefined" && crypto.randomUUID) {
2986
+ return crypto.randomUUID().slice(0, 8);
2987
+ }
2988
+ return Math.random().toString(36).slice(2, 10);
2989
+ }
2990
+ __name(generateNodeId, "generateNodeId");
2991
+ var HLC_KEY = "__memorio_hlc_local";
2992
+ var local = globalThis[HLC_KEY] || {
2993
+ physical: 0,
2994
+ logical: 0,
2995
+ node: getNodeId()
2996
+ };
2997
+ if (!globalThis[HLC_KEY]) {
2998
+ globalThis[HLC_KEY] = local;
2999
+ }
3000
+ function tick(_incoming) {
3001
+ const now2 = Date.now();
3002
+ const base = local.physical;
3003
+ let physical;
3004
+ let logical;
3005
+ if (now2 > base) {
3006
+ physical = now2;
3007
+ logical = 0;
3008
+ } else if (now2 < base) {
3009
+ physical = base;
3010
+ logical = local.logical + 1;
3011
+ } else {
3012
+ physical = base;
3013
+ logical = local.logical + 1;
3014
+ }
3015
+ local.physical = physical;
3016
+ local.logical = logical;
3017
+ return { physical, logical, node: local.node };
3018
+ }
3019
+ __name(tick, "tick");
3020
+ function receive(remote) {
3021
+ const now2 = Date.now();
3022
+ if (remote.physical > local.physical) {
3023
+ local.physical = remote.physical > now2 ? remote.physical : now2;
3024
+ local.logical = 1;
3025
+ } else if (remote.physical === local.physical) {
3026
+ local.logical = Math.max(local.logical, remote.logical) + 1;
3027
+ }
3028
+ local.node = getNodeId();
3029
+ return { ...local };
3030
+ }
3031
+ __name(receive, "receive");
3032
+ function compare(a, b) {
3033
+ if (a.physical !== b.physical) {
3034
+ return a.physical < b.physical ? -1 : 1;
3035
+ }
3036
+ if (a.logical !== b.logical) {
3037
+ return a.logical < b.logical ? -1 : 1;
3038
+ }
3039
+ if (a.node !== b.node) {
3040
+ return a.node < b.node ? -1 : 1;
3041
+ }
3042
+ return 0;
3043
+ }
3044
+ __name(compare, "compare");
3045
+ function happenedBefore(a, b) {
3046
+ return compare(a, b) < 0;
3047
+ }
3048
+ __name(happenedBefore, "happenedBefore");
3049
+ function serialize(hlc2) {
3050
+ return `hlc:${hlc2.physical}:${hlc2.logical}:${hlc2.node}`;
3051
+ }
3052
+ __name(serialize, "serialize");
3053
+ function parse(serialized) {
3054
+ if (!serialized.startsWith("hlc:")) return null;
3055
+ const parts = serialized.split(":");
3056
+ if (parts.length !== 4) return null;
3057
+ const physical = parseInt(parts[1], 10);
3058
+ const logical = parseInt(parts[2], 10);
3059
+ const node = parts[3];
3060
+ if (isNaN(physical) || isNaN(logical)) return null;
3061
+ return { physical, logical, node };
3062
+ }
3063
+ __name(parse, "parse");
3064
+ var hlc = {
3065
+ tick,
3066
+ receive,
3067
+ compare,
3068
+ happenedBefore,
3069
+ serialize,
3070
+ parse,
3071
+ getNodeId
3072
+ };
3073
+
3074
+ // core/fractional.ts
3075
+ init_cjs_shims();
3076
+ function generateBetween(left, right, minChars = 2) {
3077
+ if (left !== null && right !== null && left >= right) {
3078
+ throw new Error(`left (${left}) must be < right (${right})`);
3079
+ }
3080
+ if (left === null && right === null) {
3081
+ return "a";
3082
+ }
3083
+ if (left === null) {
3084
+ return generateLower(right, minChars);
3085
+ }
3086
+ if (right === null) {
3087
+ return generateUpper(left, minChars);
3088
+ }
3089
+ return generateMiddle(left, right, minChars);
3090
+ }
3091
+ __name(generateBetween, "generateBetween");
3092
+ function generateLower(right, minChars) {
3093
+ const rightDigits = right.split(".");
3094
+ const first = rightDigits[0];
3095
+ const firstChar = first.charCodeAt(0);
3096
+ if (firstChar > "a".charCodeAt(0)) {
3097
+ const prev = String.fromCharCode(firstChar - 1);
3098
+ const rest = first.slice(1);
3099
+ if (rest === "") {
3100
+ return leftPad(prev, minChars);
3101
+ }
3102
+ return prev + rest;
3103
+ }
3104
+ if (first[0] === "a") {
3105
+ let i = 0;
3106
+ while (i < first.length && first[i] === "a") i++;
3107
+ if (i === first.length) {
3108
+ return ".z." + ".z".repeat(Math.floor(minChars / 2) + 1);
3109
+ }
3110
+ const char = first.charCodeAt(i);
3111
+ const next = String.fromCharCode(char - 1);
3112
+ if (next >= "a") {
3113
+ return next + first.slice(i + 1);
3114
+ }
3115
+ return "a" + next + first.slice(i + 1);
3116
+ }
3117
+ return ".z." + ".z".repeat(Math.floor(minChars / 2) + 1);
3118
+ }
3119
+ __name(generateLower, "generateLower");
3120
+ function generateUpper(left, minChars) {
3121
+ const leftDigits = left.split(".");
3122
+ const first = leftDigits[0];
3123
+ const firstChar = first.charCodeAt(0);
3124
+ const nextChar = String.fromCharCode(firstChar + 1);
3125
+ if (nextChar <= "z") {
3126
+ const rest = first.slice(1);
3127
+ if (rest === "") {
3128
+ return rightPad(nextChar, minChars);
3129
+ }
3130
+ return nextChar + rest;
3131
+ }
3132
+ if (first.length > 1) {
3133
+ const lastChar = first[first.length - 1];
3134
+ if (lastChar < "z") {
3135
+ return first.slice(0, -1) + String.fromCharCode(lastChar.charCodeAt(0) + 1);
3136
+ }
3137
+ }
3138
+ const carry = handleCarry(first, 0);
3139
+ if (carry !== null) {
3140
+ return carry + leftPad("a", minChars);
3141
+ }
3142
+ return "b" + leftPad("a", minChars);
3143
+ }
3144
+ __name(generateUpper, "generateUpper");
3145
+ function handleCarry(digits, carryPos) {
3146
+ if (carryPos >= digits.length) return null;
3147
+ const char = digits.charCodeAt(carryPos);
3148
+ if (char < "z".charCodeAt(0)) {
3149
+ return digits.slice(0, carryPos) + String.fromCharCode(char + 1);
3150
+ }
3151
+ return handleCarry(digits, carryPos + 1);
3152
+ }
3153
+ __name(handleCarry, "handleCarry");
3154
+ function generateMiddle(left, right, minChars) {
3155
+ const leftDigits = left.split(".");
3156
+ const rightDigits = right.split(".");
3157
+ const maxLen = Math.max(leftDigits.length, rightDigits.length);
3158
+ const leftParts = padParts(leftDigits, maxLen);
3159
+ const rightParts = padParts(rightDigits, maxLen);
3160
+ let prefix = [];
3161
+ for (let i = 0; i < maxLen; i++) {
3162
+ const l = leftParts[i] || "a";
3163
+ const r = rightParts[i] || "z";
3164
+ if (l === r) {
3165
+ prefix.push(l);
3166
+ } else {
3167
+ const lCode = l.charCodeAt(0);
3168
+ const rCode = r.charCodeAt(0);
3169
+ if (rCode - lCode > 1) {
3170
+ prefix.push(String.fromCharCode(lCode + 1));
3171
+ while (prefix.length < minChars) {
3172
+ prefix.push("a");
3173
+ }
3174
+ return prefix.join(".");
3175
+ }
3176
+ prefix.push(l);
3177
+ prefix.push(generateUpper(l, minChars));
3178
+ return prefix.join(".");
3179
+ }
3180
+ }
3181
+ return generateUpper(left, minChars);
3182
+ }
3183
+ __name(generateMiddle, "generateMiddle");
3184
+ function padParts(parts, maxLen) {
3185
+ while (parts.length < maxLen) parts.push("a");
3186
+ return parts;
3187
+ }
3188
+ __name(padParts, "padParts");
3189
+ function leftPad(key, minChars) {
3190
+ let result = key;
3191
+ while (result.length < minChars) result = "a" + result;
3192
+ return result;
3193
+ }
3194
+ __name(leftPad, "leftPad");
3195
+ function rightPad(key, minChars) {
3196
+ let result = key;
3197
+ while (result.length < minChars) result = result + "a";
3198
+ return result;
3199
+ }
3200
+ __name(rightPad, "rightPad");
3201
+ function firstKey() {
3202
+ return generateBetween(null, null);
3203
+ }
3204
+ __name(firstKey, "firstKey");
3205
+ function after(left) {
3206
+ return generateBetween(left, null);
3207
+ }
3208
+ __name(after, "after");
3209
+ function before(right) {
3210
+ return generateBetween(null, right);
3211
+ }
3212
+ __name(before, "before");
3213
+ function between(left, right) {
3214
+ return generateBetween(left, right);
3215
+ }
3216
+ __name(between, "between");
3217
+ function reorder(items, fromIndex, toIndex) {
3218
+ if (fromIndex === toIndex) return items.map((i) => i.key);
3219
+ const reordered = [...items];
3220
+ const [removed] = reordered.splice(fromIndex, 1);
3221
+ reordered.splice(toIndex, 0, removed);
3222
+ return reordered.map((i) => i.key);
3223
+ }
3224
+ __name(reorder, "reorder");
3225
+ function reindex(items) {
3226
+ if (items.length === 0) return items;
3227
+ const result = [];
3228
+ let prev = null;
3229
+ for (let i = 0; i < items.length; i++) {
3230
+ const next = i < items.length - 1 ? items[i + 1].key : null;
3231
+ const newItem = { ...items[i] };
3232
+ if (prev === null) {
3233
+ newItem.key = before(items[0].key);
3234
+ } else if (next === null) {
3235
+ newItem.key = after(prev);
3236
+ } else {
3237
+ newItem.key = between(prev, next);
3238
+ }
3239
+ result.push(newItem);
3240
+ prev = newItem.key;
3241
+ }
3242
+ return result;
3243
+ }
3244
+ __name(reindex, "reindex");
3245
+ var fractional = {
3246
+ generateBetween,
3247
+ firstKey,
3248
+ after,
3249
+ before,
3250
+ between,
3251
+ reorder,
3252
+ reindex
3253
+ };
3254
+
3255
+ // index.ts
3256
+ init_internal();
3257
+ init_platform();
3258
+
3259
+ // core/global.ts
3260
+ init_cjs_shims();
3261
+ init_platform();
3262
+ init_internal();
3263
+
3264
+ // package.json
3265
+ var package_default = {
3266
+ version: "4.9.7"};
3267
+
3268
+ // core/global.ts
3269
+ init_env();
3270
+ init_store();
3271
+ init_idb();
3272
+ init_sqlite();
3273
+ init_message();
3274
+
3275
+ // functions/typed/index.ts
3276
+ init_cjs_shims();
3277
+ function typed() {
3278
+ return exports.state;
3279
+ }
3280
+ __name(typed, "typed");
3281
+
3282
+ // functions/history/index.ts
3283
+ init_cjs_shims();
3284
+ init_internal();
3285
+ init_message();
3286
+ function _clone(value) {
3287
+ if (value === null || typeof value !== "object") return value;
3288
+ const ctor = value.constructor?.name;
3289
+ if (ctor !== "Object" && ctor !== "Array") return value;
3290
+ try {
3291
+ return JSON.parse(JSON.stringify(value));
3292
+ } catch {
3293
+ return value;
3294
+ }
3295
+ }
3296
+ __name(_clone, "_clone");
3297
+ var snapshot = /* @__PURE__ */ __name(() => {
3298
+ return _clone(deepRaw(exports.state));
3299
+ }, "snapshot");
3300
+ var diff = /* @__PURE__ */ __name((snap) => {
3301
+ const changes = [];
3302
+ const _walk = /* @__PURE__ */ __name((oldObj, newObj, prefix) => {
3303
+ const oldKeys = oldObj ? Object.keys(oldObj) : [];
3304
+ const newKeys = newObj ? Object.keys(newObj) : [];
3305
+ for (const key of newKeys) {
3306
+ const newPath = prefix ? `${prefix}.${key}` : key;
3307
+ const oldVal = oldObj ? oldObj[key] : void 0;
3308
+ const newVal = newObj[key];
3309
+ if (oldVal !== newVal) {
3310
+ const oldType = typeof oldVal;
3311
+ const newType = typeof newVal;
3312
+ if (oldType !== newType || oldVal === void 0) {
3313
+ changes.push({ path: newPath, oldValue: oldVal, newValue: newVal });
3314
+ } else if (oldVal && typeof oldVal === "object") {
3315
+ _walk(oldVal, newVal, newPath);
3316
+ } else if (oldVal !== newVal) {
3317
+ changes.push({ path: newPath, oldValue: oldVal, newValue: newVal });
3318
+ }
3319
+ }
3320
+ }
3321
+ for (const key of oldKeys) {
3322
+ if (!(key in (newObj || {}))) {
3323
+ const newPath = prefix ? `${prefix}.${key}` : key;
3324
+ changes.push({ path: newPath, oldValue: oldObj[key], newValue: void 0 });
3325
+ }
3326
+ }
3327
+ }, "_walk");
3328
+ _walk(snap, deepRaw(exports.state), "");
3329
+ return changes;
3330
+ }, "diff");
3331
+ var enableHistory = /* @__PURE__ */ __name((enabled = true) => {
3332
+ exports.internal.historyEnabled = enabled;
3333
+ message_default(`[memorio history] Tracking ${enabled ? "enabled" : "disabled"}`);
3334
+ }, "enableHistory");
3335
+ var trace = /* @__PURE__ */ __name(() => {
3336
+ return [...exports.internal.mutations];
3337
+ }, "trace");
3338
+ var canUndo = /* @__PURE__ */ __name(() => {
3339
+ return exports.internal.canUndo();
3340
+ }, "canUndo");
3341
+ var canRedo = /* @__PURE__ */ __name(() => {
3342
+ return exports.internal.canRedo();
3343
+ }, "canRedo");
3344
+ var undo = /* @__PURE__ */ __name(() => {
3345
+ if (!exports.internal.historyEnabled) {
3346
+ message_default("[memorio history] History is not enabled");
3347
+ return void 0;
3348
+ }
3349
+ const record = exports.internal.popUndo();
3350
+ if (!record) return void 0;
3351
+ _applyInverse(record);
3352
+ message_default(`[memorio history] Undid: ${record.action} ${record.path}`);
3353
+ return record;
3354
+ }, "undo");
3355
+ var redo = /* @__PURE__ */ __name(() => {
3356
+ if (!exports.internal.historyEnabled) {
3357
+ message_default("[memorio history] History is not enabled");
3358
+ return void 0;
3359
+ }
3360
+ const record = exports.internal.popRedo();
3361
+ if (!record) return void 0;
3362
+ _applyForward(record);
3363
+ message_default(`[memorio history] Redid: ${record.action} ${record.path}`);
3364
+ return record;
3365
+ }, "redo");
3366
+ function _applyInverse(record) {
3367
+ const wasEnabled = exports.internal.historyEnabled;
3368
+ exports.internal.historyEnabled = false;
3369
+ try {
3370
+ if (record.action === "set") {
3371
+ if (record.previousValue === void 0) {
3372
+ _deletePath(record.path);
3373
+ } else {
3374
+ _setPath(record.path, record.previousValue);
3375
+ }
3376
+ } else if (record.action === "delete") {
3377
+ if (record.previousValue !== void 0) {
3378
+ _setPath(record.path, record.previousValue);
3379
+ }
3380
+ }
3381
+ } finally {
3382
+ exports.internal.historyEnabled = wasEnabled;
3383
+ }
3384
+ }
3385
+ __name(_applyInverse, "_applyInverse");
3386
+ function _applyForward(record) {
3387
+ const wasEnabled = exports.internal.historyEnabled;
3388
+ exports.internal.historyEnabled = false;
3389
+ try {
3390
+ if (record.action === "set") {
3391
+ _setPath(record.path, record.newValue);
3392
+ } else if (record.action === "delete") {
3393
+ _deletePath(record.path);
3394
+ }
3395
+ } finally {
3396
+ exports.internal.historyEnabled = wasEnabled;
3397
+ }
3398
+ }
3399
+ __name(_applyForward, "_applyForward");
3400
+ function _setPath(path, value) {
3401
+ const parts = path.split(".");
3402
+ let current = exports.state;
3403
+ for (let i = 0; i < parts.length - 1; i++) {
3404
+ const part = parts[i];
3405
+ if (current[part] === void 0) {
3406
+ current[part] = {};
3407
+ }
3408
+ current = current[part];
3409
+ }
3410
+ current[parts[parts.length - 1]] = value;
3411
+ }
3412
+ __name(_setPath, "_setPath");
3413
+ function _deletePath(path) {
3414
+ const parts = path.split(".");
3415
+ if (parts.length === 1) {
3416
+ exports.state.remove(parts[0]);
3417
+ return;
3418
+ }
3419
+ let current = exports.state;
3420
+ for (let i = 0; i < parts.length - 1; i++) {
3421
+ const part = parts[i];
3422
+ if (current[part] === void 0) return;
3423
+ current = current[part];
3424
+ }
3425
+ delete current[parts[parts.length - 1]];
3426
+ }
3427
+ __name(_deletePath, "_deletePath");
3428
+ var rollback = /* @__PURE__ */ __name((snap) => {
3429
+ exports.state.removeAll();
3430
+ for (const key of Object.keys(snap)) {
3431
+ exports.state[key] = _clone(snap[key]);
3432
+ }
3433
+ exports.internal.clearHistory();
3434
+ message_default("[memorio history] State rolled back to snapshot");
3435
+ }, "rollback");
3436
+ var clearHistory2 = /* @__PURE__ */ __name(() => {
3437
+ exports.internal.clearHistory();
3438
+ message_default("[memorio history] History cleared");
3439
+ }, "clearHistory");
3440
+ var clearRedo = /* @__PURE__ */ __name(() => {
3441
+ exports.internal.clearRedo();
3442
+ }, "clearRedo");
3443
+
3444
+ // functions/memory/index.ts
3445
+ init_cjs_shims();
3446
+ init_store();
3447
+ init_idb();
3448
+
3449
+ // functions/memory/journal.ts
3450
+ init_cjs_shims();
3451
+ init_store();
3452
+ var g2 = globalThis;
3453
+ function namespace() {
3454
+ const cfg = g2.memorioSyncConfig;
3455
+ if (cfg && typeof cfg.namespace === "string" && cfg.namespace) return `ns:${cfg.namespace}`;
3456
+ const ctx = g2.memorio ? g2.memorio._currentContext : void 0;
3457
+ const ctxName = typeof ctx === "string" && ctx ? ctx : "";
3458
+ return ctxName ? `ctx:${ctxName}` : "default";
3459
+ }
3460
+ __name(namespace, "namespace");
3461
+ function isSyncEnabled() {
3462
+ return !!g2.memorioSyncConfig;
3463
+ }
3464
+ __name(isSyncEnabled, "isSyncEnabled");
3465
+ var STORE_PREFIX = /* @__PURE__ */ __name((ns) => `memorio:sync:${ns}:`, "STORE_PREFIX");
3466
+ var INDEX_KEY = /* @__PURE__ */ __name((ns) => `${STORE_PREFIX(ns)}index`, "INDEX_KEY");
3467
+ function parseEntry(raw) {
3468
+ try {
3469
+ if (typeof raw === "string") return JSON.parse(raw);
3470
+ return raw;
3471
+ } catch {
3472
+ return null;
3473
+ }
3474
+ }
3475
+ __name(parseEntry, "parseEntry");
3476
+ var journal = {
3477
+ /** Append (or replace) a journal row for the current namespace. */
3478
+ async append(entry, operation) {
3479
+ const ns = namespace();
3480
+ const row = {
3481
+ ...entry,
3482
+ operation,
3483
+ updatedAt: entry.updatedAt || Date.now(),
3484
+ version: entry.version || 1,
3485
+ sync: "pending",
3486
+ hlc: entry.hlc || hlc.serialize(hlc.tick())
3487
+ };
3488
+ const key = `${STORE_PREFIX(ns)}${row.id}`;
3489
+ exports.store.set(key, row);
3490
+ const idx = exports.store.get(INDEX_KEY(ns)) || [];
3491
+ if (!idx.includes(row.id)) idx.push(row.id);
3492
+ exports.store.set(INDEX_KEY(ns), idx);
3493
+ return row;
3494
+ },
3495
+ /** All pending (not-yet-synced) entries for the current namespace. */
3496
+ async pending() {
3497
+ const ns = namespace();
3498
+ const out = [];
3499
+ const idx = exports.store.get(INDEX_KEY(ns)) || [];
3500
+ for (const id of idx) {
3501
+ const raw = exports.store.get(`${STORE_PREFIX(ns)}${id}`);
3502
+ if (!raw) continue;
3503
+ const e = parseEntry(raw);
3504
+ if (e && e.sync !== "synced") out.push(e);
3505
+ }
3506
+ out.sort((a, b) => {
3507
+ if (a.hlc && b.hlc) {
3508
+ const ha = hlc.parse(a.hlc);
3509
+ const hb = hlc.parse(b.hlc);
3510
+ if (ha && hb) return hlc.compare(ha, hb);
3511
+ }
3512
+ return (a.updatedAt || 0) - (b.updatedAt || 0);
3513
+ });
3514
+ return out;
3515
+ },
3516
+ /**
3517
+ * Mark entries as synced. Returns the number of rows actually advanced to
3518
+ * `synced` (namespace-scoped).
3519
+ */
3520
+ async markSynced(ids) {
3521
+ if (!ids.length) return 0;
3522
+ const ns = namespace();
3523
+ let count = 0;
3524
+ const idx = exports.store.get(INDEX_KEY(ns)) || [];
3525
+ for (const id of idx) {
3526
+ if (!ids.includes(id)) continue;
3527
+ const key = `${STORE_PREFIX(ns)}${id}`;
3528
+ const raw = exports.store.get(key);
3529
+ if (!raw) continue;
3530
+ const e = parseEntry(raw);
3531
+ if (!e || e.sync === "synced") continue;
3532
+ e.sync = "synced";
3533
+ exports.store.set(key, e);
3534
+ count++;
3535
+ }
3536
+ return count;
3537
+ },
3538
+ async get(id) {
3539
+ const ns = namespace();
3540
+ const raw = exports.store.get(`${STORE_PREFIX(ns)}${id}`);
3541
+ return parseEntry(raw ?? "");
3542
+ },
3543
+ /** Remove all journal rows for the current namespace. */
3544
+ async clear() {
3545
+ const ns = namespace();
3546
+ const idx = exports.store.get(INDEX_KEY(ns)) || [];
3547
+ for (const id of idx) exports.store.remove(`${STORE_PREFIX(ns)}${id}`);
3548
+ exports.store.remove(INDEX_KEY(ns));
3549
+ },
3550
+ /**
3551
+ * Reconcile the local journal against the configured provider. Pushes pending
3552
+ * local operations, then optionally pulls newer remote operations and applies
3553
+ * them. No-op (empty ack) when no provider is configured.
3554
+ *
3555
+ * When pulling remote entries, HLC timestamps are used to order operations
3556
+ * causally. Concurrent writes to the same key are resolved via the provider's
3557
+ * `resolveConflict` method (if provided), falling back to HLC timestamp
3558
+ * comparison.
3559
+ */
3560
+ async replay() {
3561
+ const ack = { synced: [], resolved: [] };
3562
+ if (!isSyncEnabled()) return ack;
3563
+ const transport = g2.memorioSyncConfig || {};
3564
+ const provider = transport.provider;
3565
+ if (!provider || typeof provider.push !== "function") return ack;
3566
+ const pending = await this.pending();
3567
+ if (pending.length) {
3568
+ try {
3569
+ const res = await provider.push(pending);
3570
+ ack.synced = res?.synced || [];
3571
+ ack.conflicts = res?.conflicts;
3572
+ ack.error = res?.error;
3573
+ if (ack.synced.length) await this.markSynced(ack.synced);
3574
+ } catch (err) {
3575
+ ack.error = String(err);
3576
+ }
3577
+ }
3578
+ if (typeof provider.pull === "function") {
3579
+ try {
3580
+ const since = pending.length ? Math.min(...pending.map((p) => p.updatedAt || 0)) : 0;
3581
+ const remote = await provider.pull(since);
3582
+ for (const e of remote || []) {
3583
+ if (e.hlc) {
3584
+ const parsed = hlc.parse(e.hlc);
3585
+ if (parsed) hlc.receive(parsed);
3586
+ }
3587
+ const localEntry = await this.get(e.id);
3588
+ if (localEntry && e.hlc && localEntry.hlc) {
3589
+ const ha = hlc.parse(localEntry.hlc);
3590
+ const hb = hlc.parse(e.hlc);
3591
+ if (ha && hb) {
3592
+ const cmp = hlc.compare(ha, hb);
3593
+ if (cmp === 0) {
3594
+ const resolution = typeof provider.resolveConflict === "function" ? await provider.resolveConflict(localEntry, e) : "remote";
3595
+ ack.resolved?.push({ id: e.id, resolution });
3596
+ if (resolution === "local") continue;
3597
+ } else if (cmp > 0) {
3598
+ continue;
3599
+ }
3600
+ }
3601
+ }
3602
+ await this.append(e, e.operation || "confirm");
3603
+ await this.markSynced([e.id]);
3604
+ }
3605
+ } catch (_) {
3606
+ }
3607
+ }
3608
+ return ack;
3609
+ },
3610
+ status() {
3611
+ return Promise.resolve("store");
3612
+ }
3613
+ };
3614
+ function configure2(opts) {
3615
+ const prev = g2.memorioSyncConfig || {};
3616
+ g2.memorioSyncConfig = { ...prev, ...opts };
3617
+ return journal;
3618
+ }
3619
+ __name(configure2, "configure");
3620
+ if (typeof g2.addEventListener === "function") {
3621
+ let armed = false;
3622
+ g2.addEventListener("focus", () => {
3623
+ if (armed || !isSyncEnabled()) return;
3624
+ armed = true;
3625
+ void journal.replay().finally(() => {
3626
+ armed = false;
3627
+ });
3628
+ });
3629
+ }
3630
+ var journal_default = journal;
3631
+
3632
+ // functions/memory/index.ts
3633
+ var MEMORY_INDEX_KEY = "__memorio_memory_index__";
3634
+ var SUPERSEDED_PREFIX = "__memorio_superseded__";
3635
+ function isSyncEnabled2() {
3636
+ return !!globalThis.memorioSyncConfig;
3637
+ }
3638
+ __name(isSyncEnabled2, "isSyncEnabled");
3639
+ async function recordJournal(entry, operation) {
3640
+ if (!isSyncEnabled2()) return;
3641
+ if (entry.scope === "hot") return;
3642
+ try {
3643
+ await journal_default.append(entry, operation);
3644
+ } catch (_) {
3645
+ }
3646
+ }
3647
+ __name(recordJournal, "recordJournal");
3648
+ function memoryEntryKey(id) {
3649
+ return id.startsWith(SUPERSEDED_PREFIX) ? id : `${SUPERSEDED_PREFIX}${id}`;
3650
+ }
3651
+ __name(memoryEntryKey, "memoryEntryKey");
3652
+ function normalizeTags(tags) {
3653
+ if (!tags) return [];
3654
+ return Array.isArray(tags) ? tags : [tags];
3655
+ }
3656
+ __name(normalizeTags, "normalizeTags");
3657
+ function resolveScope(value, opts) {
3658
+ if (opts.scope) return opts.scope;
3659
+ const size = JSON.stringify(value).length;
3660
+ if (size > 1e6) return "durable";
3661
+ if (size > 1e5) return "local";
3662
+ return "local";
3663
+ }
3664
+ __name(resolveScope, "resolveScope");
3665
+ function now() {
3666
+ return Date.now();
3667
+ }
3668
+ __name(now, "now");
3669
+ function isExpired(entry) {
3670
+ if (entry.ttl === null || entry.ttl === void 0) return false;
3671
+ return now() - entry.createdAt > entry.ttl;
3672
+ }
3673
+ __name(isExpired, "isExpired");
3674
+ function matchesFilters(entry, opts) {
3675
+ if (entry.status === "obsolete") return opts.includeObsolete ?? false;
3676
+ if (entry.status === "superseded") return opts.includeObsolete ?? false;
3677
+ if (isExpired(entry)) {
3678
+ return opts.includeObsolete ?? false;
3679
+ }
3680
+ if (opts.type) {
3681
+ const types = Array.isArray(opts.type) ? opts.type : [opts.type];
3682
+ if (!types.includes(entry.type)) return false;
3683
+ }
3684
+ if (opts.minConfidence !== void 0 && entry.confidence < opts.minConfidence) return false;
3685
+ return true;
3686
+ }
3687
+ __name(matchesFilters, "matchesFilters");
3688
+ function matchesContextFilters(entry, opts) {
3689
+ if (entry.status !== "active") return false;
3690
+ if (isExpired(entry)) return false;
3691
+ if (opts.tags) {
3692
+ const tags = Array.isArray(opts.tags) ? opts.tags : [opts.tags];
3693
+ const hasMatch = tags.some((t) => entry.tags.includes(t));
3694
+ if (!hasMatch) return false;
3695
+ }
3696
+ if (opts.types) {
3697
+ const types = Array.isArray(opts.types) ? opts.types : [opts.types];
3698
+ if (!types.includes(entry.type)) return false;
3699
+ }
3700
+ if (opts.minConfidence !== void 0 && entry.confidence < opts.minConfidence) return false;
3701
+ if (opts.scopes && !opts.scopes.includes(entry.scope)) return false;
3702
+ return true;
3703
+ }
3704
+ __name(matchesContextFilters, "matchesContextFilters");
3705
+ function computeRelevance(entry) {
3706
+ const ageHours = (now() - entry.createdAt) / (1e3 * 3600);
3707
+ const recencyScore = Math.max(0.1, 1 / (1 + ageHours * 0.5));
3708
+ const confidenceScore = entry.confidence;
3709
+ const accessScore = 1 + entry.tags.length * 0.1;
3710
+ const typeBoost = {
3711
+ decision: 1.5,
3712
+ context: 1.3,
3713
+ preference: 1.2,
3714
+ task: 1,
3715
+ fact: 0.8
3716
+ };
3717
+ const scopeBoost = {
3718
+ hot: 1.5,
3719
+ session: 1.2,
3720
+ local: 1,
3721
+ durable: 0.8
3722
+ };
3723
+ return recencyScore * confidenceScore * accessScore * typeBoost[entry.type] * scopeBoost[entry.scope];
3724
+ }
3725
+ __name(computeRelevance, "computeRelevance");
3726
+ function getNestedPath(obj, path) {
3727
+ if (!path || typeof path !== "string") return void 0;
3728
+ const parts = path.replace(/^state\./, "").split(".");
3729
+ let current = obj;
3730
+ for (const part of parts) {
3731
+ if (current === null || current === void 0) return void 0;
3732
+ current = current[part];
3733
+ }
3734
+ return current;
3735
+ }
3736
+ __name(getNestedPath, "getNestedPath");
3737
+ function setNestedPath(obj, path, value) {
3738
+ if (!path || typeof path !== "string") return;
3739
+ const parts = path.replace(/^state\./, "").split(".");
3740
+ let current = obj;
3741
+ for (let i = 0; i < parts.length - 1; i++) {
3742
+ const part = parts[i];
3743
+ if (current[part] === void 0 || current[part] === null) {
3744
+ current[part] = {};
3745
+ }
3746
+ current = current[part];
3747
+ }
3748
+ current[parts[parts.length - 1]] = value;
3749
+ }
3750
+ __name(setNestedPath, "setNestedPath");
3751
+ function deleteNestedPath(obj, path) {
3752
+ if (!path || typeof path !== "string") return;
3753
+ const parts = path.replace(/^state\./, "").split(".");
3754
+ let current = obj;
3755
+ for (let i = 0; i < parts.length - 1; i++) {
3756
+ const part = parts[i];
3757
+ if (current[part] === void 0 || current[part] === null) return;
3758
+ current = current[part];
3759
+ }
3760
+ delete current[parts[parts.length - 1]];
3761
+ }
3762
+ __name(deleteNestedPath, "deleteNestedPath");
3763
+ async function saveToScope(entry) {
3764
+ const storageKey = entry.status === "superseded" ? memoryEntryKey(entry.id || entry.key) : entry.key;
3765
+ const serialized = JSON.stringify(entry);
3766
+ switch (entry.scope) {
3767
+ case "hot":
3768
+ setNestedPath(exports.state, storageKey, entry.value);
3769
+ break;
3770
+ case "session":
3771
+ exports.session.set(storageKey, serialized);
3772
+ break;
3773
+ case "local":
3774
+ exports.store.set(storageKey, serialized);
3775
+ break;
3776
+ case "durable":
3777
+ await exports.idb.set("memories", storageKey, serialized);
3778
+ break;
3779
+ }
3780
+ await updateIndex(entry.id || entry.key, entry.scope, entry.status === "superseded");
3781
+ }
3782
+ __name(saveToScope, "saveToScope");
3783
+ async function loadFromScope(id, scope, isSuperseded = false) {
3784
+ const storageKey = isSuperseded ? memoryEntryKey(id) : id;
3785
+ let raw;
3786
+ switch (scope) {
3787
+ case "hot": {
3788
+ const val = getNestedPath(exports.state, storageKey);
3789
+ if (val === void 0) return null;
3790
+ return reconstructEntry(id, val, scope);
3791
+ }
3792
+ case "session":
3793
+ raw = exports.session.get(storageKey);
3794
+ break;
3795
+ case "local":
3796
+ raw = exports.store.get(storageKey);
3797
+ break;
3798
+ case "durable":
3799
+ raw = await exports.idb.get("memories", storageKey);
3800
+ break;
3801
+ }
3802
+ if (!raw) return null;
3803
+ try {
3804
+ const entry = JSON.parse(raw);
3805
+ entry.id = entry.id || id;
3806
+ return entry;
3807
+ } catch {
3808
+ return null;
3809
+ }
3810
+ }
3811
+ __name(loadFromScope, "loadFromScope");
3812
+ function reconstructEntry(key, value, scope) {
3813
+ return {
3814
+ id: key,
3815
+ key,
3816
+ value,
3817
+ type: "fact",
3818
+ confidence: 1,
3819
+ scope,
3820
+ ttl: null,
3821
+ tags: [],
3822
+ status: "active",
3823
+ createdAt: now(),
3824
+ lastConfirmedAt: now(),
3825
+ supersededId: null
3826
+ };
3827
+ }
3828
+ __name(reconstructEntry, "reconstructEntry");
3829
+ async function removeFromScope(id, scope, isSuperseded = false) {
3830
+ const storageKey = isSuperseded ? memoryEntryKey(id) : id;
3831
+ switch (scope) {
3832
+ case "hot":
3833
+ setNestedPath(exports.state, storageKey, void 0);
3834
+ break;
3835
+ case "session":
3836
+ exports.session.remove(storageKey);
3837
+ break;
3838
+ case "local":
3839
+ exports.store.remove(storageKey);
3840
+ break;
3841
+ case "durable":
3842
+ await exports.idb.deleteKey("memories", storageKey);
3843
+ break;
3844
+ }
3845
+ await removeFromIndex(id, isSuperseded);
3846
+ }
3847
+ __name(removeFromScope, "removeFromScope");
3848
+ async function getAllIndexes() {
3849
+ try {
3850
+ const raw = exports.store.get(MEMORY_INDEX_KEY);
3851
+ if (!raw) return {};
3852
+ return JSON.parse(raw);
3853
+ } catch {
3854
+ return {};
3855
+ }
3856
+ }
3857
+ __name(getAllIndexes, "getAllIndexes");
3858
+ async function updateIndex(id, scope, isSuperseded = false) {
3859
+ const index = await getAllIndexes();
3860
+ index[id] = { scope, superseded: isSuperseded };
3861
+ exports.store.set(MEMORY_INDEX_KEY, JSON.stringify(index));
3862
+ }
3863
+ __name(updateIndex, "updateIndex");
3864
+ async function removeFromIndex(id, isSuperseded = false) {
3865
+ const index = await getAllIndexes();
3866
+ const entry = index[id];
3867
+ if (entry) {
3868
+ if (isSuperseded && entry.superseded) {
3869
+ delete index[id];
3870
+ } else if (!isSuperseded && !entry.superseded) {
3871
+ delete index[id];
3872
+ }
3873
+ }
3874
+ exports.store.set(MEMORY_INDEX_KEY, JSON.stringify(index));
3875
+ }
3876
+ __name(removeFromIndex, "removeFromIndex");
3877
+ async function loadAll() {
3878
+ const index = await getAllIndexes();
3879
+ const entries = [];
3880
+ for (const [id, info] of Object.entries(index)) {
3881
+ const entry = await loadFromScope(id, info.scope, info.superseded);
3882
+ if (entry) {
3883
+ entry.id = entry.id || id;
3884
+ entry.supersededId = entry.supersededId ?? null;
3885
+ entries.push(entry);
3886
+ }
3887
+ }
3888
+ return entries;
3889
+ }
3890
+ __name(loadAll, "loadAll");
3891
+ var memory = {
3892
+ async remember(key, value, opts = {}) {
3893
+ const existing = await this._getEntry(key);
3894
+ if (existing && existing.status === "active") {
3895
+ const supersededId = `${existing.id}__v${Date.now()}`;
3896
+ const superseded = {
3897
+ ...existing,
3898
+ id: supersededId,
3899
+ key: existing.key,
3900
+ status: "superseded",
3901
+ supersededId: null,
3902
+ lastConfirmedAt: now()
3903
+ };
3904
+ await saveToScope(superseded);
3905
+ await recordJournal(superseded, "supersede");
3906
+ }
3907
+ const scope = resolveScope(value, opts);
3908
+ const tags = normalizeTags(opts.tags);
3909
+ const entry = {
3910
+ id: opts.id || key,
3911
+ key,
3912
+ value,
3913
+ type: opts.type || "fact",
3914
+ confidence: opts.confidence ?? 1,
3915
+ scope,
3916
+ ttl: opts.ttl ?? null,
3917
+ tags,
3918
+ source: opts.source,
3919
+ status: "active",
3920
+ createdAt: now(),
3921
+ lastConfirmedAt: now(),
3922
+ updatedAt: now(),
3923
+ version: existing ? existing.version ? existing.version + 1 : 1 : 1,
3924
+ sync: isSyncEnabled2() ? "pending" : void 0,
3925
+ supersededId: existing ? existing.id : null,
3926
+ hlc: hlc.serialize(hlc.tick())
3927
+ };
3928
+ await saveToScope(entry);
3929
+ await recordJournal(entry, "remember");
3930
+ dispatch.set("memorio:memory:remembered", { key, scope, entryId: entry.id });
3931
+ },
3932
+ async recall(query, opts = {}) {
3933
+ const entry = await this._getEntry(query);
3934
+ if (!entry) return null;
3935
+ if (!matchesFilters(entry, opts)) return null;
3936
+ entry.lastConfirmedAt = now();
3937
+ await saveToScope(entry);
3938
+ dispatch.set("memorio:memory:recalled", { key: query });
3939
+ return entry.value;
3940
+ },
3941
+ async context(opts = {}) {
3942
+ const entries = await loadAll();
3943
+ const filtered = entries.filter((e) => matchesContextFilters(e, opts));
3944
+ const ranked = filtered.map((entry) => ({
3945
+ entry,
3946
+ score: computeRelevance(entry)
3947
+ })).sort((a, b) => b.score - a.score).slice(0, opts.maxEntries ?? 25);
3948
+ return ranked.map(({ entry }) => ({
3949
+ key: entry.key,
3950
+ value: entry.value,
3951
+ type: entry.type,
3952
+ confidence: entry.confidence,
3953
+ scope: entry.scope,
3954
+ tags: entry.tags,
3955
+ age: now() - entry.createdAt,
3956
+ accessCount: entry.tags.length + 1,
3957
+ lastAccessedAt: entry.lastConfirmedAt
3958
+ }));
3959
+ },
3960
+ async forget(key) {
3961
+ const entry = await this._getEntry(key);
3962
+ if (!entry) {
3963
+ const tombstone2 = {
3964
+ id: key,
3965
+ key,
3966
+ value: null,
3967
+ type: "fact",
3968
+ confidence: 1,
3969
+ scope: "local",
3970
+ ttl: null,
3971
+ tags: [],
3972
+ status: "obsolete",
3973
+ operation: "delete",
3974
+ createdAt: now(),
3975
+ lastConfirmedAt: now(),
3976
+ updatedAt: now(),
3977
+ version: 1,
3978
+ sync: isSyncEnabled2() ? "pending" : void 0,
3979
+ hlc: hlc.serialize(hlc.tick())
3980
+ };
3981
+ await recordJournal(tombstone2, "delete");
3982
+ return;
3983
+ }
3984
+ await removeFromScope(entry.id || key, entry.scope, entry.status === "superseded");
3985
+ const tombstone = {
3986
+ ...entry,
3987
+ value: null,
3988
+ status: "obsolete",
3989
+ operation: "delete",
3990
+ updatedAt: now(),
3991
+ version: (entry.version ? entry.version : 0) + 1,
3992
+ sync: isSyncEnabled2() ? "pending" : void 0,
3993
+ hlc: hlc.serialize(hlc.tick())
3994
+ };
3995
+ await recordJournal(tombstone, "delete");
3996
+ dispatch.set("memorio:memory:forgotten", { key });
3997
+ },
3998
+ async update(key, value, opts = {}) {
3999
+ const existing = await this._getEntry(key);
4000
+ if (!existing) {
4001
+ await this.remember(key, value, opts);
4002
+ return;
4003
+ }
4004
+ const supersededId = `${existing.id}__v${now()}`;
4005
+ const superseded = {
4006
+ ...existing,
4007
+ id: supersededId,
4008
+ key: existing.key,
4009
+ status: "superseded",
4010
+ supersededId: null,
4011
+ lastConfirmedAt: now()
4012
+ };
4013
+ await saveToScope(superseded);
4014
+ await recordJournal(superseded, "supersede");
4015
+ const updated = {
4016
+ ...existing,
4017
+ value,
4018
+ lastConfirmedAt: now(),
4019
+ updatedAt: now(),
4020
+ version: (existing.version ? existing.version : 0) + 1,
4021
+ sync: isSyncEnabled2() ? "pending" : void 0,
4022
+ hlc: hlc.serialize(hlc.tick()),
4023
+ ...opts.scope ? { scope: opts.scope } : {},
4024
+ ...opts.ttl !== void 0 ? { ttl: opts.ttl } : {},
4025
+ ...opts.type ? { type: opts.type } : {},
4026
+ ...opts.confidence !== void 0 ? { confidence: opts.confidence } : {},
4027
+ ...opts.tags !== void 0 ? { tags: normalizeTags(opts.tags) } : {},
4028
+ ...opts.source ? { source: opts.source } : {}
4029
+ };
4030
+ await saveToScope(updated);
4031
+ await recordJournal(updated, "update");
4032
+ dispatch.set("memorio:memory:updated", { key, entryId: updated.id });
4033
+ },
4034
+ async stats() {
4035
+ const entries = await loadAll();
4036
+ const byScope = { hot: 0, session: 0, local: 0, durable: 0 };
4037
+ const byType = {};
4038
+ let expired = 0;
4039
+ for (const entry of entries) {
4040
+ byScope[entry.scope] = (byScope[entry.scope] || 0) + 1;
4041
+ if (isExpired(entry)) expired++;
4042
+ byType[entry.type] = (byType[entry.type] || 0) + 1;
4043
+ }
4044
+ return { total: entries.length, byScope, byType, expired };
4045
+ },
4046
+ async forgetExpired() {
4047
+ const entries = await loadAll();
4048
+ let count = 0;
4049
+ for (const entry of entries) {
4050
+ if (isExpired(entry) && entry.status === "active") {
4051
+ entry.status = "obsolete";
4052
+ entry.updatedAt = now();
4053
+ entry.operation = "expire";
4054
+ await saveToScope(entry);
4055
+ await recordJournal(entry, "expire");
4056
+ count++;
4057
+ }
4058
+ }
4059
+ return count;
4060
+ },
4061
+ async clear() {
4062
+ const index = await getAllIndexes();
4063
+ for (const [id, info] of Object.entries(index)) {
4064
+ await removeFromScope(id, info.scope, info.superseded);
4065
+ }
4066
+ exports.store.remove(MEMORY_INDEX_KEY);
4067
+ },
4068
+ async _getEntry(key) {
4069
+ const index = await getAllIndexes();
4070
+ const info = index[key];
4071
+ if (!info) {
4072
+ const val = getNestedPath(exports.state, key);
4073
+ if (val !== void 0) return reconstructEntry(key, val, "hot");
4074
+ return null;
4075
+ }
4076
+ return loadFromScope(key, info.scope, info.superseded);
4077
+ },
4078
+ async _loadAll() {
4079
+ return loadAll();
4080
+ },
4081
+ async _save(entry) {
4082
+ await saveToScope(entry);
4083
+ },
4084
+ /** Apply a field-level path patch to an existing memory entry. */
4085
+ async patch(key, patches) {
4086
+ const entry = await this._getEntry(key);
4087
+ if (!entry) return;
4088
+ let patched = false;
4089
+ for (const p of patches) {
4090
+ if (p.op === "set") {
4091
+ setNestedPath({ [entry.key]: entry.value }, p.path.replace(/^[^.]+\./, ""), p.value);
4092
+ patched = true;
4093
+ } else if (p.op === "delete") {
4094
+ deleteNestedPath({ [entry.key]: entry.value }, p.path.replace(/^[^.]+\./, ""));
4095
+ patched = true;
4096
+ }
4097
+ }
4098
+ if (!patched) return;
4099
+ const updated = {
4100
+ ...entry,
4101
+ updatedAt: now(),
4102
+ lastConfirmedAt: now(),
4103
+ version: (entry.version ? entry.version : 0) + 1,
4104
+ sync: isSyncEnabled2() ? "pending" : void 0,
4105
+ hlc: hlc.serialize(hlc.tick()),
4106
+ patches,
4107
+ path: patches[0]?.path
4108
+ };
4109
+ await saveToScope(updated);
4110
+ await recordJournal(updated, "patch");
4111
+ dispatch.set("memorio:memory:patched", { key, patches });
4112
+ },
4113
+ /** Local operation journal (namespaced). No-op substrate when sqlite/idb unavailable. */
4114
+ journal: journal_default,
4115
+ /** Configure the optional cloud-sync layer (namespace + provider). Chainable. */
4116
+ configure(opts) {
4117
+ configure2(opts);
4118
+ return this;
4119
+ }
4120
+ };
4121
+
4122
+ // functions/inspect/index.ts
4123
+ init_cjs_shims();
4124
+ var stateKeys = /* @__PURE__ */ __name(() => {
4125
+ const raw = deepRaw(exports.state);
4126
+ return Object.keys(raw).filter(
4127
+ (k) => !["list", "remove", "removeAll", "lock", "unlock"].includes(k)
4128
+ );
4129
+ }, "stateKeys");
4130
+ var pathExists = /* @__PURE__ */ __name((path) => {
4131
+ if (!path || typeof path !== "string") return false;
4132
+ const parts = path.replace(/^state\./, "").split(".");
4133
+ let current = exports.state;
4134
+ for (const part of parts) {
4135
+ if (current === null || current === void 0) {
4136
+ return false;
4137
+ }
4138
+ current = current[part];
4139
+ }
4140
+ return current !== void 0;
4141
+ }, "pathExists");
4142
+ var stateType = /* @__PURE__ */ __name((path) => {
4143
+ const [exists, value] = _getValue(path);
4144
+ if (!exists || value === void 0) return "undefined";
4145
+ return Array.isArray(value) ? "array" : typeof value;
4146
+ }, "stateType");
4147
+ var stateGet = /* @__PURE__ */ __name((path) => {
4148
+ const [exists, value] = _getValue(path);
4149
+ if (!exists || value === void 0) return void 0;
4150
+ return _clone2(value);
4151
+ }, "stateGet");
4152
+ var stateSchema = /* @__PURE__ */ __name(() => {
4153
+ const result = [];
4154
+ const _walk = /* @__PURE__ */ __name((obj, prefix) => {
4155
+ if (obj === null || typeof obj !== "object" || Array.isArray(obj)) {
4156
+ return;
4157
+ }
4158
+ const keys = Object.keys(obj).filter(
4159
+ (k) => !["list", "remove", "removeAll", "lock", "unlock"].includes(k)
4160
+ );
4161
+ for (const key of keys) {
4162
+ const newPath = prefix ? `${prefix}.${key}` : key;
4163
+ const value = obj[key];
4164
+ const defined = value !== void 0;
4165
+ const type = defined ? Array.isArray(value) ? "array" : typeof value : "undefined";
4166
+ result.push({ path: newPath, type, defined });
4167
+ if (defined && typeof value === "object" && !Array.isArray(value) && value.constructor?.name === "Object") {
4168
+ _walk(value, newPath);
4169
+ }
4170
+ }
4171
+ }, "_walk");
4172
+ _walk(deepRaw(exports.state), "");
4173
+ return result;
4174
+ }, "stateSchema");
4175
+ function _getValue(path) {
4176
+ if (!path || typeof path !== "string") return [false, void 0];
4177
+ const parts = path.replace(/^state\./, "").split(".");
4178
+ let current = exports.state;
4179
+ for (const part of parts) {
4180
+ if (current === null || current === void 0) {
4181
+ return [false, void 0];
4182
+ }
4183
+ current = current[part];
4184
+ }
4185
+ return [current !== void 0, current];
4186
+ }
4187
+ __name(_getValue, "_getValue");
4188
+ function _clone2(value) {
4189
+ if (value === null || typeof value !== "object") return value;
4190
+ const ctor = value.constructor?.name;
4191
+ if (ctor !== "Object" && ctor !== "Array") return value;
4192
+ try {
4193
+ return JSON.parse(JSON.stringify(value));
4194
+ } catch {
4195
+ return value;
4196
+ }
4197
+ }
4198
+ __name(_clone2, "_clone");
4199
+
4200
+ // core/global.ts
4201
+ if (!("memorio" in globalThis)) {
4202
+ Object.defineProperty(
4203
+ globalThis,
4204
+ "memorio",
4205
+ {
4206
+ value: {
4207
+ setProps: /* @__PURE__ */ __name(() => {
4208
+ }, "setProps"),
4209
+ obj: {},
4210
+ array: [],
4211
+ dispatch,
4212
+ message: exports.message,
4213
+ setDescription: /* @__PURE__ */ __name(() => {
4214
+ }, "setDescription")
4215
+ },
4216
+ writable: false,
4217
+ configurable: true,
4218
+ enumerable: false
4219
+ }
4220
+ );
4221
+ Object.defineProperty(
4222
+ globalThis,
4223
+ "events",
4224
+ {
4225
+ value: {},
4226
+ writable: true,
4227
+ enumerable: false
4228
+ }
4229
+ );
4230
+ if (typeof globalThis.addEventListener === "function") {
4231
+ dispatch.listen("memorio:memory:cleanup", async () => memory.forgetExpired?.());
4232
+ }
4233
+ Object.defineProperty(
4234
+ memorio,
4235
+ "version",
4236
+ {
4237
+ writable: false,
4238
+ enumerable: false,
4239
+ value: package_default.version
4240
+ }
4241
+ );
4242
+ memorio.memory = memory;
4243
+ initializePlatform();
4244
+ memorio.isBrowser = isBrowser;
4245
+ memorio.isNode = isNode;
4246
+ memorio.isDeno = isDeno;
4247
+ memorio.isEdge = isEdge;
4248
+ memorio.getCapabilities = getCapabilities;
4249
+ memorio.createContext = createContext;
4250
+ memorio.listContexts = listContexts;
4251
+ memorio.deleteContext = deleteContext;
4252
+ memorio.isolate = (name) => createContext(name);
4253
+ Object.defineProperty(memorio, "setContext", { writable: false, enumerable: false, value: /* @__PURE__ */ __name((id) => setCurrentContext(id), "value") });
4254
+ Object.defineProperty(memorio, "getContext", { writable: false, enumerable: false, value: /* @__PURE__ */ __name(() => exports.internal.currentContext, "value") });
4255
+ memorio.registerSchema = schema.register;
4256
+ memorio.validate = schema.validate;
4257
+ memorio.unregisterSchema = schema.unregister;
4258
+ memorio.listSchemas = schema.list;
4259
+ memorio.typed = typed;
4260
+ memorio.snapshot = snapshot;
4261
+ memorio.diff = diff;
4262
+ memorio.undo = undo;
4263
+ memorio.redo = redo;
4264
+ memorio.canUndo = canUndo;
4265
+ memorio.canRedo = canRedo;
4266
+ memorio.rollback = rollback;
4267
+ memorio.trace = trace;
4268
+ memorio.enableHistory = enableHistory;
4269
+ memorio.clearHistory = clearHistory2;
4270
+ memorio.clearRedo = clearRedo;
4271
+ Object.defineProperty(memorio, "dispatch", { value: dispatch, writable: true, enumerable: false, configurable: true });
4272
+ const isDev = exports.DEV;
4273
+ memorio.env = {
4274
+ isDev,
4275
+ isProd: exports.PROD
4276
+ };
4277
+ memorio.global = function() {
4278
+ const globalDefinitions = {
4279
+ state: exports.state,
4280
+ store: exports.store,
4281
+ session: exports.session,
4282
+ cache,
4283
+ idb: exports.idb,
4284
+ sqlite: exports.sqlite,
4285
+ observer,
4286
+ useObserver
4287
+ };
4288
+ for (const key of Object.keys(globalDefinitions)) {
4289
+ if (!(key in globalThis)) {
4290
+ Object.defineProperty(globalThis, key, {
4291
+ value: globalDefinitions[key],
4292
+ writable: true,
4293
+ enumerable: false,
4294
+ configurable: true
4295
+ });
4296
+ }
4297
+ }
4298
+ };
4299
+ if (isDev) {
4300
+ memorio.global();
4301
+ }
4302
+ if (exports.DEV) {
4303
+ Object.defineProperty(
4304
+ memorio,
4305
+ "debug",
4306
+ {
4307
+ get: /* @__PURE__ */ __name(() => exports.internal.debug, "get"),
4308
+ set: /* @__PURE__ */ __name((v) => {
4309
+ exports.internal.debug = v;
4310
+ }, "set"),
4311
+ enumerable: false
4312
+ }
4313
+ );
4314
+ const caps = getCapabilities();
4315
+ Object.defineProperty(memorio, "_platform", { writable: false, enumerable: false, value: caps.platform });
4316
+ Object.defineProperty(memorio, "_capabilities", { writable: false, enumerable: false, value: caps });
4317
+ Object.defineProperty(memorio, "_sessionId", { writable: false, enumerable: false, value: generateSessionId() });
4318
+ memorio.logger = logger;
4319
+ if (!("$state" in globalThis)) Object.defineProperty(globalThis, "$state", { get: /* @__PURE__ */ __name(() => globalThis.state, "get"), configurable: true });
4320
+ if (!("$store" in globalThis)) Object.defineProperty(globalThis, "$store", { get: /* @__PURE__ */ __name(() => globalThis.store, "get"), configurable: true });
4321
+ if (!("$session" in globalThis)) Object.defineProperty(globalThis, "$session", { get: /* @__PURE__ */ __name(() => globalThis.session, "get"), configurable: true });
4322
+ if (!("$cache" in globalThis)) Object.defineProperty(globalThis, "$cache", { get: /* @__PURE__ */ __name(() => globalThis.cache, "get"), configurable: true });
4323
+ memorio.devtools = devtools;
4324
+ memorio.inspect = stateKeys;
4325
+ memorio.stateKeys = stateKeys;
4326
+ memorio.pathExists = pathExists;
4327
+ memorio.stateType = stateType;
4328
+ memorio.stateGet = stateGet;
4329
+ memorio.stateSchema = stateSchema;
4330
+ memorio.help = function() {
4331
+ console.debug(`
4332
+ \u{1F9E0} Memorio ${package_default.version} - Help
27
4333
 
28
4334
  Core Modules (runtime):
29
4335
  state - Reactive state management (DEV global)
@@ -109,46 +4415,61 @@ Memory types:
109
4415
  Console shortcuts (DEV only):
110
4416
  state, store, session, cache, idb, sqlite - direct access to modules
111
4417
  $state, $store, $session, $cache - aliases for the above
112
- `);};}}var dl=exports.DEV?Te:void 0,wn=globalThis.memorio,fl=globalThis.events,ml=e=>me(e),pl=globalThis.memorio?.help,yl=e=>exports.internal.currentContext=e,gl=()=>exports.internal.currentContext,bl=wn;
113
-
114
- exports.cache = se;
115
- exports.canRedo = gt;
116
- exports.canUndo = yt;
117
- exports.clearHistory = xt;
118
- exports.clearRedo = St;
119
- exports.createContext = me;
120
- exports.default = bl;
121
- exports.deleteContext = Ke;
122
- exports.devtools = dl;
123
- exports.diff = ft;
124
- exports.dispatch = w;
125
- exports.enableHistory = mt;
126
- exports.events = fl;
127
- exports.fractional = un;
128
- exports.getCapabilities = fe;
129
- exports.getContext = gl;
130
- exports.help = pl;
131
- exports.hlc = _;
132
- exports.isBrowser = Le;
133
- exports.isDeno = Ve;
134
- exports.isEdge = He;
135
- exports.isNode = Ne;
136
- exports.isolate = ml;
137
- exports.listContexts = ze;
138
- exports.listSchemas = Mt;
139
- exports.logger = ot;
140
- exports.memorio = wn;
141
- exports.memory = Oe;
142
- exports.observer = ke;
143
- exports.redo = ht;
144
- exports.registerSchema = Ot;
145
- exports.rollback = vt;
146
- exports.schema = z;
147
- exports.setContext = yl;
148
- exports.snapshot = dt;
149
- exports.trace = pt;
150
- exports.typed = ct;
151
- exports.undo = bt;
152
- exports.unregisterSchema = At;
153
- exports.useObserver = Pe;
154
- exports.validate = $t;
4418
+ `);
4419
+ };
4420
+ }
4421
+ }
4422
+
4423
+ // index.ts
4424
+ var devtools2 = exports.DEV ? devtools : void 0;
4425
+ var memorio2 = globalThis.memorio;
4426
+ var events = globalThis.events;
4427
+ var isolate = /* @__PURE__ */ __name((name) => createContext(name), "isolate");
4428
+ var help2 = globalThis.memorio?.help;
4429
+ var setContext = /* @__PURE__ */ __name((id) => exports.internal.currentContext = id, "setContext");
4430
+ var getContext = /* @__PURE__ */ __name(() => exports.internal.currentContext, "getContext");
4431
+ var index_default = memorio2;
4432
+
4433
+ exports.cache = cache;
4434
+ exports.canRedo = canRedo;
4435
+ exports.canUndo = canUndo;
4436
+ exports.clearHistory = clearHistory2;
4437
+ exports.clearRedo = clearRedo;
4438
+ exports.createContext = createContext;
4439
+ exports.default = index_default;
4440
+ exports.deleteContext = deleteContext;
4441
+ exports.devtools = devtools2;
4442
+ exports.diff = diff;
4443
+ exports.dispatch = dispatch;
4444
+ exports.enableHistory = enableHistory;
4445
+ exports.events = events;
4446
+ exports.fractional = fractional;
4447
+ exports.getCapabilities = getCapabilities;
4448
+ exports.getContext = getContext;
4449
+ exports.help = help2;
4450
+ exports.hlc = hlc;
4451
+ exports.isBrowser = isBrowser;
4452
+ exports.isDeno = isDeno;
4453
+ exports.isEdge = isEdge;
4454
+ exports.isNode = isNode;
4455
+ exports.isolate = isolate;
4456
+ exports.listContexts = listContexts;
4457
+ exports.listSchemas = listSchemas;
4458
+ exports.logger = logger;
4459
+ exports.memorio = memorio2;
4460
+ exports.memory = memory;
4461
+ exports.observer = observer;
4462
+ exports.redo = redo;
4463
+ exports.registerSchema = registerSchema;
4464
+ exports.rollback = rollback;
4465
+ exports.schema = schema;
4466
+ exports.setContext = setContext;
4467
+ exports.snapshot = snapshot;
4468
+ exports.trace = trace;
4469
+ exports.typed = typed;
4470
+ exports.undo = undo;
4471
+ exports.unregisterSchema = unregisterSchema;
4472
+ exports.useObserver = useObserver;
4473
+ exports.validate = validate;
4474
+ //# sourceMappingURL=index.cjs.map
4475
+ //# sourceMappingURL=index.cjs.map