Latest Threat Research:SANDWORM_MODE: Shai-Hulud-Style npm Worm Hijacks CI Workflows and Poisons AI Toolchains.Details
Socket
Book a DemoInstallSign in
Socket

memorio

Package Overview
Dependencies
Maintainers
1
Versions
85
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

memorio - npm Package Compare versions

Comparing version
2.5.0
to
2.5.1
+1
-1
index.js

@@ -1,1 +0,1 @@

var l=(e,r)=>()=>(e&&(r=e(e=0)),r);var p,h=l(()=>{p={name:"memorio",version:"2.5.0",type:"module",private:!1,main:"index.js",license:"MIT",typings:"./types/*",description:"Memorio, State + Observer and Store for an easy life",copyright:"Copyright (c) 2025 Dario Passariello",homepage:"https://a51.gitbook.io/memorio",author:{name:"Dario Passariello",url:"https://dario.passariello.ca/",email:"dariopassariello@gmail.com"},support:{name:"Dario Passariello",url:"https://github.com/passariello/",email:"dariopassariello@gmail.com"},contributors:[{name:"Dario Passariello",email:"dariopassarielloa@gmail.com"},{name:"Valeria Cala Scaglitta",email:"valeriacalascaglitta@gmail.com"}],keywords:["biglogic","a51","memorio","state","store","observer","useObserver","dario","passariello"],funding:[{type:"patreon",url:"https://www.patreon.com/passariello"}],typing:["types/*"],exports:{".":{types:"./types/index.d.ts",import:"./index.js",default:"./index.js"},"./types/*":"./types/*"},scripts:{build:"node ./esbuild.config.mjs",watch:'nodemon --watch * --exec "npm run build "',"npm:publish":"npm run build && npm publish ./dist",test:"cd tests && npm run test",lint:"cd tests && npm run lint",tsc:"cd tests && tsc --noEmit"},dependencies:{"dphelper.types":"0.0.20"},devDependencies:{"@types/node":"25.3.1",esbuild:"0.27.3","esbuild-node-externals":"1.20.1","esbuild-plugin-alias":"0.2.1","esbuild-plugin-copy":"2.1.1",typescript:"5.9.3"}}});var y,f=l(()=>{"use strict";a();h();Object.defineProperty(globalThis,"memorio",{value:{},writable:!1,configurable:!0,enumerable:!1});Object.defineProperty(globalThis,"events",{value:{},writable:!0,enumerable:!1});Object.defineProperty(memorio,"version",{writable:!1,enumerable:!1,value:p.version});y=["list","state","store","idb","observer","useObserver","remove","removeAll"]});var v=l(()=>{"use strict";a();Object.defineProperty(memorio,"dispatch",{writable:!1,enumerable:!1,value:{set:(e,r={})=>{globalThis.dispatchEvent(new CustomEvent(String(e),r))},listen:(e,r=null,o=!1)=>{globalThis.observer?.list?.[e]?.length>0&&globalThis.observer.remove(e);let n=t=>r?setTimeout(()=>r(t),1):null;globalThis.addEventListener(e,n),globalThis.events[e]=n},remove:e=>{globalThis.removeEventListener(e,globalThis.events[e]),delete globalThis.events[e]}}})});var T=l(()=>{"use strict";a();memorio.propertyName=(e,r)=>String(r).replace("() => ","")});var S,O,P=l(()=>{"use strict";a();f();Object.defineProperty(memorio,"objPath",{writable:!1,enumerable:!1,value:(e,r,o=".")=>{let n=r.concat(e).join(o);return globalThis.memorio._tracking&&globalThis.memorio._trackedPaths.add("state."+n),n}});globalThis.memorio._tracking=!1;globalThis.memorio._trackedPaths=new Set;globalThis.memorio._locked=!1;S=e=>new Proxy({},{get(r,o){return o===Symbol.toPrimitive||o==="toString"?()=>e:S(`${e}.${String(o)}`)}}),O=(e,r,o=[])=>{let n=t=>{globalThis.memorio.dispatch.set(t,{detail:{name:t}})};return new Proxy(e,{get(t,s){if(s==="__path")return o.length>0?"state."+o.join("."):"state";if(s==="path")return S("state");if(s==="list")return console.debug('Some state could be hidden when you use "state.list". Use "state" to see the complete list '),JSON.parse(JSON.stringify(globalThis.state));if(globalThis.memorio._tracking&&typeof s=="string"){let i=o.length>0?"state."+o.concat(s).join("."):"state."+s;globalThis.memorio._trackedPaths.add(i)}if(s==="remove")return i=>(delete t[i],!0);if(s==="removeAll")return()=>{try{for(let i in t)typeof t[i]!="function"&&!["list","remove","removeAll"].includes(i)&&(Object.isFrozen(t[i])||delete t[i],delete t[i])}catch(i){console.debug(i)}};if(Object.isFrozen(t[s]))return t[s];try{let i=Reflect.get(t,s);return i&&typeof i=="object"&&["Array","Object"].includes(i.constructor.name)?O(i,r,o.concat(s)):i}catch(i){console.error("Error: ",i);return}},set(t,s,i){if(globalThis.memorio._locked)return console.error("Error: state is locked. Use state.unlock() to enable modifications."),!1;if(y.includes(s))return console.error("key "+s+" is protected"),!1;if(t[s]&&typeof t[s]=="object"&&Object.isFrozen(t[s]))return console.error(`Error: state '${s}' is locked`),!1;try{let u=globalThis.memorio.objPath(s,o);return r({action:"set",path:u,target:t,newValue:i,previousValue:Reflect.get(t,s)}),n("state."+u),Reflect.set(t,s,i),t[s]&&typeof t[s]=="object"&&Reflect.defineProperty(t[s],"lock",{value:()=>{Object.defineProperty(t,s,{writable:!1,enumerable:!1}),Object.freeze(t[s])}}),!0}catch(u){console.error("Error in set trap:",u);return}},deleteProperty(t,s){try{let i=globalThis.memorio.objPath(s,o);return r({action:"delete",path:i,target:t}),Reflect.deleteProperty(t,s)}catch(i){console.error("Error in deleteProperty trap:",i);return}}})};globalThis?.state?globalThis.state=state:globalThis.state=O({},()=>{});globalThis.state.lock=()=>{globalThis.memorio._locked=!0,console.info("State is now locked. All modifications are blocked.")};globalThis.state.unlock=()=>{globalThis.memorio._locked=!1,console.info("State is now unlocked. Modifications are allowed.")};Object.defineProperty(globalThis,"state",{enumerable:!1,configurable:!0})});var j=l(()=>{"use strict";a();globalThis.observer||(globalThis.observer=null);Object.defineProperty(globalThis,"observer",{enumerable:!1,configurable:!0});globalThis.observer=(e,r=null,o=!0)=>{console.warn('DEPRECATED: "observer" is deprecated and will be removed in future versions. Please use "useObserver" instead.');try{if(!(t=>t.split(".")[0]!=="state"?(console.error(`Observer Error: You need to declare 'state.' or 'store.'. The '${t}' string is incorrect!`),!1):!0)(e))return}catch(n){console.error(n);return}if(!e&&!r){console.error("Observer Error: You need to setup observer correctly, Some parameters are missed!");return}if(!e&&r){console.error("Observer Error: You need to declare what state need to be monitored as string like 'state.test'.");return}if(e&&!r){let n=(String(e),{detail:{name:String(e)}});globalThis.observer.list[e]&&globalThis.memorio.dispatch.remove(n),globalThis.observer.list[e]||globalThis.memorio.dispatch.listen(n),console.debug("called: ",e);return}if(e&&r){if(typeof e!="string"||typeof r!="function"){console.error("Observer Error: name of state need to be a 'string' like 'state.test' and the callback need to be a 'function'");return}globalThis.observer.list[e]&&globalThis.memorio.dispatch.remove(e,r,o),globalThis.observer.list[e]||globalThis.memorio.dispatch.listen(e,r,o);return}};Object.defineProperties(globalThis.observer,{list:{get:()=>globalThis.events},remove:{value:e=>{e&&(globalThis.memorio.dispatch.remove(e),delete globalThis.events[e])}},removeAll:{get:()=>(Object.keys(globalThis.observer.list).forEach(e=>{globalThis.observer.remove(e)}),!0)}});Object.freeze(observer)});var w=l(()=>{"use strict";a();globalThis.useObserver||(globalThis.useObserver=null);Object.defineProperty(globalThis,"useObserver",{value:null,writable:!0,enumerable:!1,configurable:!0});globalThis.useObserver=((e,r)=>{if(!r||typeof e!="function")return()=>{};let o=[],n=Array.isArray(r)&&!r.__path?r:[r];try{return n.forEach(t=>{let s="";if(typeof t=="function"?s=globalThis.memorio.propertyName(globalThis.state,t):typeof t=="object"&&t!==null?s=t.__path||(typeof t.toString=="function"&&t.toString()!=="[object Object]"?t.toString():""):typeof t=="string"&&(t.startsWith("state.")||t.startsWith("store."))&&(s=t),s){s=s.replace(/^(\(\)\s*=>\s*)/,"").replace(/^globalThis\./,"").replace(/^state\./,"");let i=s.startsWith("store.")||s.startsWith("state.")?s:"state."+s;globalThis.memorio.dispatch.listen(i,()=>e()),o.push(i)}else{globalThis.memorio._trackedPaths.clear(),globalThis.memorio._tracking=!0;try{e()}catch{}globalThis.memorio._tracking=!1,globalThis.memorio._trackedPaths.forEach(i=>{o.includes(i)||(console.info(`useObserver: [Auto-Discovery] -> "${i}"`),globalThis.memorio.dispatch.listen(i,()=>e()),o.push(i))})}}),o.length>0?console.info(`useObserver: Monitoring ${o.length} paths.`):console.warn("useObserver: No paths resolved for monitoring. Check your dependencies!"),()=>{o.forEach(t=>{globalThis.memorio.dispatch&&typeof globalThis.memorio.dispatch.remove=="function"&&(globalThis.memorio.dispatch.remove(t),console.debug(`useObserver: Stopped monitoring "${t}"`))})}}catch(t){return console.debug("useObserver Error:",t),()=>{}}});Object.freeze(globalThis.useObserver)});var x=l(()=>{"use strict";a();Object.defineProperty(globalThis,"store",{value:new Proxy({},{}),enumerable:!1,configurable:!0});Object.defineProperties(store,{get:{value:e=>{if(e){try{let r=globalThis.localStorage.getItem(e);return r&&JSON.parse(r)}catch(r){console.debug(`Error parsing store item '${e}':`,r)}return null}}},set:{value:(e,r)=>{if(e){try{r==null?globalThis.localStorage.setItem(e,JSON.stringify(null)):typeof r=="object"||typeof r=="number"||typeof r=="boolean"||typeof r=="string"?globalThis.localStorage.setItem(e,JSON.stringify(r)):typeof r=="function"&&console.debug("It's not secure to store functions.")}catch(o){console.debug(`Error setting store item '${e}':`,o)}return null}}},remove:{value:e=>{if(e)return globalThis.localStorage.getItem(e)?(globalThis.localStorage.removeItem(e),!0):!1}},delete:{value:e=>(store.remove(e),!0)},removeAll:{value:()=>(globalThis.localStorage.clear(),!0)},clearAll:{value:()=>(store.removeAll(),!0)},quota:{value:async()=>globalThis.navigator&&"storage"in globalThis.navigator&&"estimate"in globalThis.navigator.storage?globalThis.navigator.storage.estimate().then(({usage:e,quota:r})=>(e&&r&&console.debug(`Using ${e/1024} out of ${r/1024} Mb.`),[e/1024,r/1024])).catch(e=>(console.debug("Error estimating quota:",e),[0,0])):[0,0]},size:{value:()=>{let e=0;return Object.keys(globalThis.localStorage).forEach(r=>{let o=globalThis.localStorage.getItem(r);o&&(e+=o.length)}),e}}});Object.freeze(store)});var E=l(()=>{"use strict";a();Object.defineProperty(globalThis,"session",{value:new Proxy({},{}),enumerable:!1,configurable:!0});Object.defineProperties(session,{get:{value:e=>{if(e)try{let r=globalThis.sessionStorage.getItem(e);return r&&JSON.parse(r)}catch(r){console.debug(`Error parsing session item '${e}':`,r)}}},set:{value:(e,r)=>{if(e)try{r==null?globalThis.sessionStorage.setItem(e,JSON.stringify(null)):typeof r=="object"||typeof r=="number"||typeof r=="boolean"||typeof r=="string"?globalThis.sessionStorage.setItem(e,JSON.stringify(r)):typeof r=="function"&&console.debug("It's not secure to session functions.")}catch(o){console.debug(`Error setting session item '${e}':`,o)}}},remove:{value:e=>{if(e&&globalThis.sessionStorage.getItem(e))return globalThis.sessionStorage.removeItem(e),!0}},delete:{value:e=>(session.remove(e),!0)},removeAll:{value:()=>(globalThis.sessionStorage.clear(),!0)},clearAll:{value:()=>(session.removeAll(),!0)},quota:{value:async()=>globalThis.navigator&&"storage"in globalThis.navigator&&"estimate"in globalThis.navigator.storage?globalThis.navigator.storage.estimate().then(({usage:e,quota:r})=>(e&&r&&console.debug(`Using ${e/1024} out of ${r/1024} Mb.`),[e/1024,r/1024])).catch(e=>(console.debug("Error estimating quota:",e),[0,0])):[0,0]},size:{value:()=>{let e=0;return Object.keys(globalThis.sessionStorage).forEach(r=>{let o=globalThis.sessionStorage.getItem(r);o&&(e+=o.length)}),e}}});Object.freeze(session)});var d,D=l(()=>{"use strict";a();d={};Object.defineProperty(globalThis,"cache",{value:new Proxy({},{get(e,r){let o=r;return o==="get"?n=>d[n]:o==="set"?(n,t)=>{d[n]=t}:o==="remove"?n=>(delete d[n],!0):o==="removeAll"?()=>(Object.keys(d).forEach(n=>delete d[n]),!0):o==="clear"?()=>(Object.keys(d).forEach(n=>delete d[n]),!0):d[o]},set(e,r,o){return d[r]=o,!0},deleteProperty(e,r){return delete d[r],!0}}),enumerable:!1,configurable:!0});Object.freeze(cache)});var U={};var $=l(()=>{"use strict";a();idb.db.create=(e,r=1)=>new Promise((o,n)=>{if(!idb.db.support())return n(new Error("IndexedDB not supported"));let t=globalThis.indexedDB.open(e,r);t.onerror=()=>{console.debug(`IndexedDB error: ${t.error?.message}`),n(t.error)},t.onsuccess=()=>{console.debug(`Database ${e} connected successfully`),idb.db.list(),o(t.result)},t.onupgradeneeded=()=>{console.debug(`Database ${e} upgrade/creation initiated`)}})});var W={};var k=l(()=>{"use strict";a();idb.db.list=async()=>{if(!("indexedDB"in globalThis)||!indexedDB.databases)return[];try{let e=await indexedDB.databases();return globalThis.idbases=e||[],await idb.db.size(),globalThis.idbases}catch(e){return console.error("Error listing databases:",e),[]}};idb.db.list()});var Y={};var I=l(()=>{"use strict";a();idb.db.exist=e=>idbases?.some(r=>r.name===e)});var L={};var z=l(()=>{"use strict";a();idb.db.quota=()=>navigator.storage.estimate()});var G={};var _=l(()=>{"use strict";a();idb.db.delete=e=>new Promise((r,o)=>{console.debug(`Removing database ${e}...`);let n=()=>{let t=indexedDB.deleteDatabase(e);t.onsuccess=()=>{console.debug(`${e} database removed successfully`),idb.db.list(),r()},t.onerror=()=>{console.error(`Error removing ${e}:`,t.error),o(t.error)},t.onblocked=()=>{console.warn(`Deletion of ${e} is blocked. Please close other tabs.`)}};confirm(`Are you sure you want to remove the "${e}" database?`)?n():(console.debug("Database deletion cancelled by user."),r())})});var H={};var A=l(()=>{"use strict";a();idb.db.size=async()=>{if(!(!idbases||idbases.length===0))for(let e=0;e<idbases.length;e++){let r=idbases[e];try{let o=await idb.db.create(r.name,r.version),n=Array.from(o.objectStoreNames),t=0;for(let s of n){let i=await idb.table.size(o,s);t+=i}r.size=t,o.close()}catch(o){console.debug(`Could not calculate size for ${r.name}:`,o)}}}});var K={};var B=l(()=>{"use strict";a();idb.db.version=e=>{let r=0;for(let o of idbases){o.name===e&&(r=o.version);break}return r}});var Q={};var q=l(()=>{"use strict";a();idb.db.support=()=>{let e="indexedDB"in globalThis;return e||console.debug("Your environment doesn't support IndexedDB"),e}});var X={};var R=l(()=>{"use strict";a();idb.table.create=(e,r)=>new Promise(async(o,n)=>{try{let s=(Number(idb.db.version(e))||0)+1,i=indexedDB.open(e,s);i.onupgradeneeded=u=>{let b=u.target.result;if(!b.objectStoreNames.contains(r)){let c=b.createObjectStore(r,{keyPath:"id",autoIncrement:!0});c.createIndex("id","id",{unique:!0}),c.createIndex("data","data",{unique:!1}),console.debug(`Table ${r} created in ${e}`)}},i.onsuccess=()=>{i.result.close(),idb.db.list(),o()},i.onerror=()=>{console.error(`Error creating table ${r}:`,i.error),n(i.error)}}catch(t){console.error("Critical error in table.create:",t),n(t)}})});var Z={};var N=l(()=>{"use strict";a();idb.table.size=(e,r)=>new Promise((o,n)=>{if(!e)return n(new Error("Database instance is required"));if(!e.objectStoreNames.contains(r))return o(0);let t=0,s=0,b=e.transaction([r],"readonly").objectStore(r).openCursor();b.onsuccess=async c=>{let g=c.target.result;if(g){try{let m=g.value;t+=JSON.stringify(m).length}catch(m){console.debug("Error stringifying IDB value tracking size:",m)}s++,s%200===0&&await new Promise(m=>setTimeout(m,0)),g.continue()}else o(t)},b.onerror=()=>{n(b.error)}})});var ee={};var C=l(()=>{"use strict";a();idb.data.delete=(e,r,o)=>new Promise((n,t)=>{let s=indexedDB.open(e);s.onsuccess=()=>{let i=s.result;if(!i.objectStoreNames.contains(r))return i.close(),t(new Error(`Table ${r} not found`));let c=i.transaction(r,"readwrite").objectStore(r).delete(o);c.onsuccess=()=>{i.close(),console.debug(`Record ${o} deleted from ${r}`),n()},c.onerror=()=>{i.close(),t(c.error)}},s.onerror=()=>t(s.error)});idb.data.delete.all=(e,r)=>new Promise((o,n)=>{let t=indexedDB.open(e);t.onsuccess=s=>{let i=s.target.result;if(!i.objectStoreNames.contains(r))return i.close(),n(new Error(`Table ${r} not found`));let c=i.transaction(r,"readwrite").objectStore(r).clear();c.onsuccess=()=>{i.close(),console.debug(`All data cleared from ${r}`),o()},c.onerror=()=>{i.close(),n(c.error)}},t.onerror=()=>n(t.error)})});var re={};var J=l(()=>{"use strict";a();idb.data.set=(e,r,o)=>new Promise((n,t)=>{let s=indexedDB.open(e);s.onsuccess=()=>{let i=s.result;if(!i.objectStoreNames.contains(r))return i.close(),t(new Error(`Table ${r} does not exist in ${e}`));let c=i.transaction(r,"readwrite").objectStore(r).put(o);c.onsuccess=()=>{i.close(),console.debug(`Data saved in ${e}.${r}`),n(c.result)},c.onerror=g=>{i.close(),console.debug(`Database insert error: ${c.error?.message}`),t(c.error)}},s.onerror=()=>{t(s.error)}})});var te={};var V=l(()=>{"use strict";a();idb.data.get=(e,r,o)=>new Promise((n,t)=>{let s=indexedDB.open(e);s.onsuccess=i=>{let u=i.target.result;if(!u.objectStoreNames.contains(r))return u.close(),t(new Error(`Table ${r} not found in ${e}`));let g=u.transaction(r,"readonly").objectStore(r).get(o);g.onsuccess=()=>{u.close(),n(g.result)},g.onerror=()=>{u.close(),t(g.error)}},s.onerror=()=>{t(s.error)}})});var M=l(()=>{"use strict";a();(async()=>(Object.defineProperty(globalThis,"idb",{value:{db:{},table:{},data:{}},writable:!0,configurable:!0,enumerable:!1}),Object.defineProperty(globalThis,"idbases",{value:[],writable:!0,configurable:!0,enumerable:!1}),await Promise.all([Promise.resolve().then(()=>($(),U)),Promise.resolve().then(()=>(k(),W)),Promise.resolve().then(()=>(I(),Y)),Promise.resolve().then(()=>(z(),L)),Promise.resolve().then(()=>(_(),G)),Promise.resolve().then(()=>(A(),H)),Promise.resolve().then(()=>(B(),K)),Promise.resolve().then(()=>(q(),Q)),Promise.resolve().then(()=>(R(),X)),Promise.resolve().then(()=>(N(),Z)),Promise.resolve().then(()=>(C(),ee)),Promise.resolve().then(()=>(J(),re)),Promise.resolve().then(()=>(V(),te))]),Object.preventExtensions(idb),Object.seal(idb),Object.freeze(idb)))()});import"dphelper.types";var a=l(()=>{f();v();T();P();j();w();x();E();D();M()});a();
var l=(e,r)=>()=>(e&&(r=e(e=0)),r);var p,h=l(()=>{p={name:"memorio",version:"2.5.1",type:"module",private:!1,main:"index.js",license:"MIT",typings:"./types/*",description:"Memorio, State + Observer and Store for an easy life",copyright:"Copyright (c) 2025 Dario Passariello",homepage:"https://a51.gitbook.io/memorio",author:{name:"Dario Passariello",url:"https://dario.passariello.ca/",email:"dariopassariello@gmail.com"},support:{name:"Dario Passariello",url:"https://github.com/passariello/",email:"dariopassariello@gmail.com"},contributors:[{name:"Dario Passariello",email:"dariopassarielloa@gmail.com"},{name:"Valeria Cala Scaglitta",email:"valeriacalascaglitta@gmail.com"}],keywords:["biglogic","a51","memorio","state","store","observer","useObserver","dario","passariello"],funding:[{type:"patreon",url:"https://www.patreon.com/passariello"}],typing:["types/*"],exports:{".":{types:"./types/index.d.ts",import:"./index.js",default:"./index.js"},"./types/*":"./types/*"},scripts:{build:"node ./esbuild.config.mjs",watch:'nodemon --watch * --exec "npm run build "',"npm:publish":"npm run build && npm publish ./dist",test:"cd tests && npm run test",lint:"cd tests && npm run lint",tsc:"tsc --noEmit"},devDependencies:{"@types/node":"25.3.2",esbuild:"0.27.3","esbuild-node-externals":"1.20.1","esbuild-plugin-alias":"0.2.1","esbuild-plugin-copy":"2.1.1",typescript:"5.9.3"}}});var y,m=l(()=>{"use strict";a();h();Object.defineProperty(globalThis,"memorio",{value:{},writable:!1,configurable:!0,enumerable:!1});Object.defineProperty(globalThis,"events",{value:{},writable:!0,enumerable:!1});Object.defineProperty(memorio,"version",{writable:!1,enumerable:!1,value:p.version});y=["list","state","store","idb","observer","useObserver","remove","removeAll"]});var v=l(()=>{"use strict";a();Object.defineProperty(memorio,"dispatch",{writable:!1,enumerable:!1,value:{set:(e,r={})=>{globalThis.dispatchEvent(new CustomEvent(String(e),r))},listen:(e,r=null,o=!1)=>{globalThis.observer?.list?.[e]?.length>0&&globalThis.observer?.remove?.(e);let i=r?t=>setTimeout(()=>r(t),1):void 0;i&&globalThis.addEventListener(e,i),i&&(globalThis.events[e]=i)},remove:e=>{let r=globalThis.events?.[e];r&&(globalThis.removeEventListener(e,r),delete globalThis.events[e])}}})});var T=l(()=>{"use strict";a();memorio.propertyName=(e,r)=>String(r).replace("() => ","")});var S,O,P=l(()=>{"use strict";a();m();Object.defineProperty(memorio,"objPath",{writable:!1,enumerable:!1,value:(e,r,o=".")=>{let i=r.concat(e).join(o);return globalThis.memorio._tracking&&globalThis.memorio._trackedPaths?.add("state."+i),i}});globalThis.memorio._tracking=!1;globalThis.memorio._trackedPaths=new Set;globalThis.memorio._locked=!1;S=e=>new Proxy({},{get(r,o){return o===Symbol.toPrimitive||o==="toString"?()=>e:S(`${e}.${String(o)}`)}}),O=(e,r,o=[])=>{let i=t=>{try{globalThis.memorio?.dispatch?.set?.(t,{detail:{name:t}})}catch{}};return new Proxy(e,{get(t,s){if(s==="__path")return o.length>0?"state."+o.join("."):"state";if(s==="path")return S("state");if(s==="list")return console.debug('Some state could be hidden when you use "state.list". Use "state" to see the complete list '),JSON.parse(JSON.stringify(globalThis.state));if(globalThis.memorio._tracking&&typeof s=="string"){let n=o.length>0?"state."+o.concat(s).join("."):"state."+s;globalThis.memorio._trackedPaths?.add(n)}if(s==="remove")return n=>(delete t[n],!0);if(s==="removeAll")return()=>{try{for(let n in t)typeof t[n]!="function"&&!["list","remove","removeAll"].includes(n)&&(Object.isFrozen(t[n])||delete t[n],delete t[n])}catch(n){console.debug(n)}};if(Object.isFrozen(t[s]))return t[s];if(s==="lock"||s==="unlock"){let n=Reflect.get(t,s);if(n)return n}try{let n=Reflect.get(t,s);return n&&typeof n=="object"&&["Array","Object"].includes(n.constructor.name)?O(n,r,o.concat(s)):n}catch(n){console.error("Error: ",n);return}},set(t,s,n){if(globalThis.memorio._locked)return console.error("Error: state is locked. Use state.unlock() to enable modifications."),!1;if(y.includes(s))return console.error("key "+s+" is protected"),!1;if(t[s]&&typeof t[s]=="object"&&Object.isFrozen(t[s]))return console.error(`Error: state '${s}' is locked`),!1;if(t[s]&&typeof t[s]=="object"&&t[s].__locked)return console.error(`Error: state '${s}' is locked. Use state.${s}.unlock() to enable modifications.`),!1;try{let u=globalThis.memorio.objPath?.(s,o)??s;if(r({action:"set",path:u,target:t,newValue:n,previousValue:Reflect.get(t,s)}),i("state."+u),Reflect.set(t,s,n),t[s]&&typeof t[s]=="object"){let b=t[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}),console.info(`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}),console.info(`State '${s}' is now unlocked.`)}})}catch{}}return!0}catch(u){return console.error("Error in set trap:",u),!1}},deleteProperty(t,s){try{let n=globalThis.memorio.objPath?.(s,o);return r({action:"delete",path:n,target:t}),Reflect.deleteProperty(t,s)}catch(n){return console.error("Error in deleteProperty trap:",n),!1}}})};globalThis?.state?globalThis.state=state:globalThis.state=O({},()=>{});globalThis.state.lock=()=>{globalThis.memorio._locked=!0,console.info("State is now locked. All modifications are blocked.")};globalThis.state.unlock=()=>{globalThis.memorio._locked=!1,console.info("State is now unlocked. Modifications are allowed.")};Object.defineProperty(globalThis,"state",{enumerable:!1,configurable:!0})});var U,j=l(()=>{"use strict";a();globalThis.observer||(globalThis.observer=null);Object.defineProperty(globalThis,"observer",{enumerable:!1,configurable:!0});U=(e,r=null,o=!0)=>{console.warn('DEPRECATED: "observer" is deprecated and will be removed in future versions. Please use "useObserver" instead.');try{if(!(t=>t.split(".")[0]!=="state"?(console.error(`Observer Error: You need to declare 'state.' or 'store.'. The '${t}' string is incorrect!`),!1):!0)(e))return}catch(i){console.error(i);return}if(!e&&!r){console.error("Observer Error: You need to setup observer correctly, Some parameters are missed!");return}if(!e&&r){console.error("Observer Error: You need to declare what state need to be monitored as string like 'state.test'.");return}if(e&&!r){let i=(String(e),{detail:{name:String(e)}}),t=globalThis.observer;t?.list?.[e]&&globalThis.memorio.dispatch.remove(i),t?.list?.[e]||globalThis.memorio.dispatch.listen(i),console.debug("called: ",e);return}if(e&&r){if(typeof e!="string"||typeof r!="function"){console.error("Observer Error: name of state need to be a 'string' like 'state.test' and the callback need to be a 'function'");return}let i=globalThis.observer;i?.list?.[e]&&globalThis.memorio.dispatch.remove(e,r,o),i?.list?.[e]||globalThis.memorio.dispatch.listen(e,r,o);return}};globalThis.observer=U;Object.defineProperties(globalThis.observer,{list:{get:()=>globalThis.events},remove:{value:e=>{e&&(globalThis.memorio.dispatch.remove(e),delete globalThis.events[e])}},removeAll:{get:()=>{let e=globalThis.observer,r=e?.list;return r&&Object.keys(r).forEach(o=>{e?.remove?.(o)}),!0}}});Object.freeze(observer)});var w=l(()=>{"use strict";a();globalThis.useObserver||(globalThis.useObserver=null);Object.defineProperty(globalThis,"useObserver",{value:null,writable:!0,enumerable:!1,configurable:!0});globalThis.useObserver=((e,r)=>{if(!r||typeof e!="function")return()=>{};let o=[],i=Array.isArray(r)&&!r.__path?r:[r];try{return i.forEach(t=>{let s="";if(typeof t=="function"){let n=globalThis.memorio.propertyName;if(typeof n=="function"){let u=n(globalThis.state,t);u&&(s=u)}}else typeof t=="object"&&t!==null?s=t.__path||(typeof t.toString=="function"&&t.toString()!=="[object Object]"?t.toString():""):typeof t=="string"&&(t.startsWith("state.")||t.startsWith("store."))&&(s=t);if(s){s=s.replace(/^(\(\)\s*=>\s*)/,"").replace(/^globalThis\./,"").replace(/^state\./,"");let n=s.startsWith("store.")||s.startsWith("state.")?s:"state."+s;globalThis.memorio.dispatch.listen(n,()=>e()),o.push(n)}else{globalThis.memorio._trackedPaths?.clear(),globalThis.memorio._tracking=!0;try{e()}catch{}globalThis.memorio._tracking=!1,globalThis.memorio._trackedPaths?.forEach(n=>{o.includes(n)||(console.info(`useObserver: [Auto-Discovery] -> "${n}"`),globalThis.memorio.dispatch.listen(n,()=>e()),o.push(n))})}}),o.length>0?console.info(`useObserver: Monitoring ${o.length} paths.`):console.warn("useObserver: No paths resolved for monitoring. Check your dependencies!"),()=>{o.forEach(t=>{globalThis.memorio.dispatch&&typeof globalThis.memorio.dispatch.remove=="function"&&(globalThis.memorio.dispatch.remove(t),console.debug(`useObserver: Stopped monitoring "${t}"`))})}}catch(t){return console.debug("useObserver Error:",t),()=>{}}});Object.freeze(globalThis.useObserver)});var x=l(()=>{"use strict";a();Object.defineProperty(globalThis,"store",{value:new Proxy({},{}),enumerable:!1,configurable:!0});Object.defineProperties(store,{get:{value:e=>{if(e){try{let r=globalThis.localStorage.getItem(e);return r&&JSON.parse(r)}catch(r){console.debug(`Error parsing store item '${e}':`,r)}return null}}},set:{value:(e,r)=>{if(e){try{r==null?globalThis.localStorage.setItem(e,JSON.stringify(null)):typeof r=="object"||typeof r=="number"||typeof r=="boolean"||typeof r=="string"?globalThis.localStorage.setItem(e,JSON.stringify(r)):typeof r=="function"&&console.debug("It's not secure to store functions.")}catch(o){console.debug(`Error setting store item '${e}':`,o)}return null}}},remove:{value:e=>{if(e)return globalThis.localStorage.getItem(e)?(globalThis.localStorage.removeItem(e),!0):!1}},delete:{value:e=>(store.remove(e),!0)},removeAll:{value:()=>(globalThis.localStorage.clear(),!0)},clearAll:{value:()=>(store.removeAll(),!0)},quota:{value:async()=>globalThis.navigator&&"storage"in globalThis.navigator&&"estimate"in globalThis.navigator.storage?globalThis.navigator.storage.estimate().then(({usage:e,quota:r})=>{let o=e??0,i=r??0;return o&&i&&console.debug(`Using ${o/1024} out of ${i/1024} Mb.`),[o/1024,i/1024]}).catch(e=>(console.debug("Error estimating quota:",e),[0,0])):[0,0]},size:{value:()=>{let e=0;return Object.keys(globalThis.localStorage).forEach(r=>{let o=globalThis.localStorage.getItem(r);o&&(e+=o.length)}),e}}});Object.freeze(store)});var E=l(()=>{"use strict";a();Object.defineProperty(globalThis,"session",{value:new Proxy({},{}),enumerable:!1,configurable:!0});Object.defineProperties(session,{get:{value:e=>{if(e)try{let r=globalThis.sessionStorage.getItem(e);return r&&JSON.parse(r)}catch(r){console.debug(`Error parsing session item '${e}':`,r)}}},set:{value:(e,r)=>{if(e)try{r==null?globalThis.sessionStorage.setItem(e,JSON.stringify(null)):typeof r=="object"||typeof r=="number"||typeof r=="boolean"||typeof r=="string"?globalThis.sessionStorage.setItem(e,JSON.stringify(r)):typeof r=="function"&&console.debug("It's not secure to session functions.")}catch(o){console.debug(`Error setting session item '${e}':`,o)}}},remove:{value:e=>{if(e&&globalThis.sessionStorage.getItem(e))return globalThis.sessionStorage.removeItem(e),!0}},delete:{value:e=>(session.remove(e),!0)},removeAll:{value:()=>(globalThis.sessionStorage.clear(),!0)},clearAll:{value:()=>(session.removeAll(),!0)},quota:{value:async()=>globalThis.navigator&&"storage"in globalThis.navigator&&"estimate"in globalThis.navigator.storage?globalThis.navigator.storage.estimate().then(({usage:e,quota:r})=>{let o=e??0,i=r??0;return o&&i&&console.debug(`Using ${o/1024} out of ${i/1024} Mb.`),[o/1024,i/1024]}).catch(e=>(console.debug("Error estimating quota:",e),[0,0])):[0,0]},size:{value:()=>{let e=0;return Object.keys(globalThis.sessionStorage).forEach(r=>{let o=globalThis.sessionStorage.getItem(r);o&&(e+=o.length)}),e}}});Object.freeze(session)});var d,$=l(()=>{"use strict";a();d={};Object.defineProperty(globalThis,"cache",{value:new Proxy({},{get(e,r){let o=r;return o==="get"?i=>d[i]:o==="set"?(i,t)=>{d[i]=t}:o==="remove"?i=>(delete d[i],!0):o==="removeAll"?()=>(Object.keys(d).forEach(i=>delete d[i]),!0):o==="clear"?()=>(Object.keys(d).forEach(i=>delete d[i]),!0):d[o]},set(e,r,o){return d[r]=o,!0},deleteProperty(e,r){return delete d[r],!0}}),enumerable:!1,configurable:!0});Object.freeze(cache)});var W={};var D=l(()=>{"use strict";a();idb.db.create=(e,r=1)=>new Promise((o,i)=>{if(!idb.db.support())return i(new Error("IndexedDB not supported"));let t=globalThis.indexedDB.open(e,r);t.onerror=()=>{console.debug(`IndexedDB error: ${t.error?.message}`),i(t.error)},t.onsuccess=()=>{console.debug(`Database ${e} connected successfully`),idb.db.list(),o(t.result)},t.onupgradeneeded=()=>{console.debug(`Database ${e} upgrade/creation initiated`)}})});var Y={};var k=l(()=>{"use strict";a();idb.db.list=async()=>{if(!("indexedDB"in globalThis)||!indexedDB.databases)return[];try{let e=await indexedDB.databases();return globalThis.idbases=e||[],await idb.db.size(),globalThis.idbases}catch(e){return console.error("Error listing databases:",e),[]}};idb.db.list()});var L={};var _=l(()=>{"use strict";a();idb.db.exist=e=>idbases?.some(r=>r.name===e)});var G={};var I=l(()=>{"use strict";a();idb.db.quota=()=>navigator.storage.estimate()});var H={};var q=l(()=>{"use strict";a();idb.db.delete=e=>new Promise((r,o)=>{console.debug(`Removing database ${e}...`);let i=()=>{let t=indexedDB.deleteDatabase(e);t.onsuccess=()=>{console.debug(`${e} database removed successfully`),idb.db.list(),r()},t.onerror=()=>{console.error(`Error removing ${e}:`,t.error),o(t.error)},t.onblocked=()=>{console.warn(`Deletion of ${e} is blocked. Please close other tabs.`)}};confirm(`Are you sure you want to remove the "${e}" database?`)?i():(console.debug("Database deletion cancelled by user."),r())})});var K={};var z=l(()=>{"use strict";a();idb.db.size=async()=>{if(!(!idbases||idbases.length===0))for(let e=0;e<idbases.length;e++){let r=idbases[e];try{let o=await idb.db.create(r.name,r.version),i=Array.from(o.objectStoreNames),t=0;for(let s of i){let n=await idb.table.size(o,s);t+=n}r.size=t,o.close()}catch(o){console.debug(`Could not calculate size for ${r.name}:`,o)}}}});var Q={};var A=l(()=>{"use strict";a();idb.db.version=e=>{let r=0;for(let o of idbases){o.name===e&&(r=o.version);break}return r}});var X={};var B=l(()=>{"use strict";a();idb.db.support=()=>{let e="indexedDB"in globalThis;return e||console.debug("Your environment doesn't support IndexedDB"),e}});var Z={};var R=l(()=>{"use strict";a();idb.table.create=(e,r)=>new Promise(async(o,i)=>{try{let s=(Number(idb.db.version(e))||0)+1,n=indexedDB.open(e,s);n.onupgradeneeded=u=>{let b=u.target.result;if(!b.objectStoreNames.contains(r)){let c=b.createObjectStore(r,{keyPath:"id",autoIncrement:!0});c.createIndex("id","id",{unique:!0}),c.createIndex("data","data",{unique:!1}),console.debug(`Table ${r} created in ${e}`)}},n.onsuccess=()=>{n.result.close(),idb.db.list(),o()},n.onerror=()=>{console.error(`Error creating table ${r}:`,n.error),i(n.error)}}catch(t){console.error("Critical error in table.create:",t),i(t)}})});var ee={};var N=l(()=>{"use strict";a();idb.table.size=(e,r)=>new Promise((o,i)=>{if(!e)return i(new Error("Database instance is required"));if(!e.objectStoreNames.contains(r))return o(0);let t=0,s=0,b=e.transaction([r],"readonly").objectStore(r).openCursor();b.onsuccess=async c=>{let g=c.target.result;if(g){try{let f=g.value;t+=JSON.stringify(f).length}catch(f){console.debug("Error stringifying IDB value tracking size:",f)}s++,s%200===0&&await new Promise(f=>setTimeout(f,0)),g.continue()}else o(t)},b.onerror=()=>{i(b.error)}})});var re={};var C=l(()=>{"use strict";a();idb.data.delete=(e,r,o)=>new Promise((i,t)=>{let s=indexedDB.open(e);s.onsuccess=()=>{let n=s.result;if(!n.objectStoreNames.contains(r))return n.close(),t(new Error(`Table ${r} not found`));let c=n.transaction(r,"readwrite").objectStore(r).delete(o);c.onsuccess=()=>{n.close(),console.debug(`Record ${o} deleted from ${r}`),i()},c.onerror=()=>{n.close(),t(c.error)}},s.onerror=()=>t(s.error)});idb.data.delete.all=(e,r)=>new Promise((o,i)=>{let t=indexedDB.open(e);t.onsuccess=s=>{let n=s.target.result;if(!n.objectStoreNames.contains(r))return n.close(),i(new Error(`Table ${r} not found`));let c=n.transaction(r,"readwrite").objectStore(r).clear();c.onsuccess=()=>{n.close(),console.debug(`All data cleared from ${r}`),o()},c.onerror=()=>{n.close(),i(c.error)}},t.onerror=()=>i(t.error)})});var te={};var J=l(()=>{"use strict";a();idb.data.set=(e,r,o)=>new Promise((i,t)=>{let s=indexedDB.open(e);s.onsuccess=()=>{let n=s.result;if(!n.objectStoreNames.contains(r))return n.close(),t(new Error(`Table ${r} does not exist in ${e}`));let c=n.transaction(r,"readwrite").objectStore(r).put(o);c.onsuccess=()=>{n.close(),console.debug(`Data saved in ${e}.${r}`),i(c.result)},c.onerror=g=>{n.close(),console.debug(`Database insert error: ${c.error?.message}`),t(c.error)}},s.onerror=()=>{t(s.error)}})});var oe={};var V=l(()=>{"use strict";a();idb.data.get=(e,r,o)=>new Promise((i,t)=>{let s=indexedDB.open(e);s.onsuccess=n=>{let u=n.target.result;if(!u.objectStoreNames.contains(r))return u.close(),t(new Error(`Table ${r} not found in ${e}`));let g=u.transaction(r,"readonly").objectStore(r).get(o);g.onsuccess=()=>{u.close(),i(g.result)},g.onerror=()=>{u.close(),t(g.error)}},s.onerror=()=>{t(s.error)}})});var M=l(()=>{"use strict";a();(async()=>(Object.defineProperty(globalThis,"idb",{value:{db:{},table:{},data:{}},writable:!0,configurable:!0,enumerable:!1}),Object.defineProperty(globalThis,"idbases",{value:[],writable:!0,configurable:!0,enumerable:!1}),await Promise.all([Promise.resolve().then(()=>(D(),W)),Promise.resolve().then(()=>(k(),Y)),Promise.resolve().then(()=>(_(),L)),Promise.resolve().then(()=>(I(),G)),Promise.resolve().then(()=>(q(),H)),Promise.resolve().then(()=>(z(),K)),Promise.resolve().then(()=>(A(),Q)),Promise.resolve().then(()=>(B(),X)),Promise.resolve().then(()=>(R(),Z)),Promise.resolve().then(()=>(N(),ee)),Promise.resolve().then(()=>(C(),re)),Promise.resolve().then(()=>(J(),te)),Promise.resolve().then(()=>(V(),oe))]),Object.preventExtensions(idb),Object.seal(idb),Object.freeze(idb)))()});var a=l(()=>{m();v();T();P();j();w();x();E();$();M()});a();
{
"name": "memorio",
"version": "2.5.0",
"version": "2.5.1",
"type": "module",

@@ -66,9 +66,6 @@ "private": false,

"lint": "cd tests && npm run lint",
"tsc": "cd tests && tsc --noEmit"
"tsc": "tsc --noEmit"
},
"dependencies": {
"dphelper.types": "0.0.20"
},
"devDependencies": {
"@types/node": "25.3.1",
"@types/node": "25.3.2",
"esbuild": "0.27.3",

@@ -80,2 +77,2 @@ "esbuild-node-externals": "1.20.1",

}
}
}

@@ -25,4 +25,3 @@ # [memorio](https://npmjs.com/package/memorio)

- [State Management](#state-management)
- [Observer Pattern](#observer-pattern)
- [useObserver Pattern](#useobserver-pattern)
- [useObserver](#useobserver)
- [Store](#store)

@@ -29,0 +28,0 @@ - [Session](#session)

interface _dispatch {
set: (name: string, value?: any) => void
listen: (name: string, cb?: ((e: Event) => void) | null, flag?: boolean) => void
remove: (name: string, cb?: any, flag?: boolean) => void
}
interface _memorio {
setProps: any,
obj: any,
array: any,
dispatch: any,
setDescription: any
setProps: (props: Record<string, unknown>) => void
obj: Record<string, unknown>
array: unknown[]
dispatch: _dispatch
setDescription: (description: string) => void
logger?: {
log: (...args: unknown[]) => void
debug: (...args: unknown[]) => void
info: (...args: unknown[]) => void
warn: (...args: unknown[]) => void
error: (...args: unknown[]) => void
}
objPath?: (prop: string, object: string[], separator?: string) => string
propertyName?: string | ((container: any, object: any) => string | null)
debug?: boolean
// State management properties
_tracking?: boolean
_trackedPaths?: Set<string>
_locked?: boolean
}
type memorio = _memorio
declare var memorio: any
declare var memorio: _memorio
type arguments = any
declare var arguments: any
interface GlobalMemorio {
memorio: _memorio
}
global.memorio = global.memorio
? global.memorio
: globalThis.memorio
declare global {
var memorio: _memorio
var events: Record<string, any>
var idbases: any[]
}
///
type arguments = unknown[]
declare var arguments: unknown[]
declare var layerpro: any
type layerpro = {}
globalThis.memorio = globalThis.memorio || {
setProps: () => { },
obj: {},
array: [],
dispatch: {
set: () => { },
listen: () => { },
remove: () => { }
},
setDescription: () => { }
}
// Initialize events if not exists
globalThis.events = globalThis.events || {}
// Initialize idbases if not exists
globalThis.idbases = globalThis.idbases || []
export { }

@@ -0,1 +1,2 @@

/*!

@@ -6,3 +7,3 @@ memorio

https://dario.passariello.ca
*/
*/

@@ -23,3 +24,3 @@ /**

*/
(stateName: string, callBack: any): any
(stateName: string, callBack?: any, option?: boolean): any

@@ -34,3 +35,3 @@ /**

*/
readonly list?: () => void
readonly list?: Record<string, any>

@@ -47,5 +48,20 @@ /**

/**
* Remove all active observers
*
* @example
* observer.removeAll()
*
* @since memorio 1.0.6
*/
readonly removeAll?: () => boolean
}
declare var observer: _observer
declare var observer: _observer | null
type observer = _observer
// Extend globalThis to include observer
declare global {
var observer: _observer | null | undefined
}

@@ -73,3 +73,3 @@ /*!

*/
quota: () => void
quota?: () => { usage: number; quota: number } | undefined

@@ -87,2 +87,13 @@ /**

/**
* Get a list of all session items
*
* @example
* session.list()
*
* @since memorio 3.0.0
* @return object with all session items
*/
list?: () => object
// TODO

@@ -89,0 +100,0 @@ // readonly increaseQuota: (value: number) => void

@@ -54,3 +54,3 @@ /*!

* @example
* state.list
* state.list()
*

@@ -60,3 +60,3 @@ * @since memorio 0.0.1

*/
readonly list?: (stateName: string) => any
readonly list?: () => object

@@ -63,0 +63,0 @@ /**

@@ -73,3 +73,3 @@ /*!

*/
quota: () => void
quota?: () => { usage: number; quota: number } | undefined

@@ -87,2 +87,13 @@ /**

/**
* Get a list of all store items
*
* @example
* store.list()
*
* @since memorio 3.0.0
* @return object with all store items
*/
list?: () => object
// TODO

@@ -89,0 +100,0 @@ // readonly increaseQuota: (value: number) => void

@@ -0,1 +1,2 @@

/*!

@@ -6,3 +7,3 @@ memorio

https://dario.passariello.ca
*/
*/

@@ -32,3 +33,8 @@ /**

declare var useObserver: _useObserver
declare var useObserver: _useObserver | null
type useObserver = _useObserver
// Extend globalThis to include useObserver
declare global {
var useObserver: _useObserver | null | undefined
}