memorio 2.5.0 → 2.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -2
- package/index.js +1 -1
- package/package.json +76 -79
- package/types/memorio.d.ts +55 -14
- package/types/observer.d.ts +20 -4
- package/types/session.d.ts +12 -1
- package/types/state.d.ts +2 -2
- package/types/store.d.ts +12 -1
- package/types/useObserver.d.ts +8 -2
package/README.md
CHANGED
|
@@ -22,8 +22,7 @@ License is MIT - free to use, modify, and distribute
|
|
|
22
22
|
- [Quick Start](#quick-start)
|
|
23
23
|
- [API Reference](#api-reference)
|
|
24
24
|
- [State Management](#state-management)
|
|
25
|
-
- [
|
|
26
|
-
- [useObserver Pattern](#useobserver-pattern)
|
|
25
|
+
- [useObserver](#useobserver)
|
|
27
26
|
- [Store](#store)
|
|
28
27
|
- [Session](#session)
|
|
29
28
|
- [Cache](#cache)
|
package/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
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();
|
|
1
|
+
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();
|
package/package.json
CHANGED
|
@@ -1,79 +1,76 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "memorio",
|
|
3
|
-
"version": "2.5.
|
|
4
|
-
"type": "module",
|
|
5
|
-
"private": false,
|
|
6
|
-
"main": "index.js",
|
|
7
|
-
"license": "MIT",
|
|
8
|
-
"typings": "./types/*",
|
|
9
|
-
"description": "Memorio, State + Observer and Store for an easy life",
|
|
10
|
-
"copyright": "Copyright (c) 2025 Dario Passariello",
|
|
11
|
-
"homepage": "https://a51.gitbook.io/memorio",
|
|
12
|
-
"author": {
|
|
13
|
-
"name": "Dario Passariello",
|
|
14
|
-
"url": "https://dario.passariello.ca/",
|
|
15
|
-
"email": "dariopassariello@gmail.com"
|
|
16
|
-
},
|
|
17
|
-
"support": {
|
|
18
|
-
"name": "Dario Passariello",
|
|
19
|
-
"url": "https://github.com/passariello/",
|
|
20
|
-
"email": "dariopassariello@gmail.com"
|
|
21
|
-
},
|
|
22
|
-
"contributors": [
|
|
23
|
-
{
|
|
24
|
-
"name": "Dario Passariello",
|
|
25
|
-
"email": "dariopassarielloa@gmail.com"
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
"name": "Valeria Cala Scaglitta",
|
|
29
|
-
"email": "valeriacalascaglitta@gmail.com"
|
|
30
|
-
}
|
|
31
|
-
],
|
|
32
|
-
"keywords": [
|
|
33
|
-
"biglogic",
|
|
34
|
-
"a51",
|
|
35
|
-
"memorio",
|
|
36
|
-
"state",
|
|
37
|
-
"store",
|
|
38
|
-
"observer",
|
|
39
|
-
"useObserver",
|
|
40
|
-
"dario",
|
|
41
|
-
"passariello"
|
|
42
|
-
],
|
|
43
|
-
"funding": [
|
|
44
|
-
{
|
|
45
|
-
"type": "patreon",
|
|
46
|
-
"url": "https://www.patreon.com/passariello"
|
|
47
|
-
}
|
|
48
|
-
],
|
|
49
|
-
"typing": [
|
|
50
|
-
"types/*"
|
|
51
|
-
],
|
|
52
|
-
"exports": {
|
|
53
|
-
".": {
|
|
54
|
-
"types": "./types/index.d.ts",
|
|
55
|
-
"import": "./index.js",
|
|
56
|
-
"default": "./index.js"
|
|
57
|
-
},
|
|
58
|
-
"./types/*": "./types/*"
|
|
59
|
-
},
|
|
60
|
-
"scripts": {
|
|
61
|
-
"build": "node ./esbuild.config.mjs",
|
|
62
|
-
"watch": "nodemon --watch * --exec \"npm run build \"",
|
|
63
|
-
"npm:publish": "npm run build && npm publish ./dist",
|
|
64
|
-
"test": "cd tests && npm run test",
|
|
65
|
-
"lint": "cd tests && npm run lint",
|
|
66
|
-
"tsc": "
|
|
67
|
-
},
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
"
|
|
73
|
-
"esbuild": "
|
|
74
|
-
"
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
"typescript": "5.9.3"
|
|
78
|
-
}
|
|
79
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "memorio",
|
|
3
|
+
"version": "2.5.1",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"private": false,
|
|
6
|
+
"main": "index.js",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"typings": "./types/*",
|
|
9
|
+
"description": "Memorio, State + Observer and Store for an easy life",
|
|
10
|
+
"copyright": "Copyright (c) 2025 Dario Passariello",
|
|
11
|
+
"homepage": "https://a51.gitbook.io/memorio",
|
|
12
|
+
"author": {
|
|
13
|
+
"name": "Dario Passariello",
|
|
14
|
+
"url": "https://dario.passariello.ca/",
|
|
15
|
+
"email": "dariopassariello@gmail.com"
|
|
16
|
+
},
|
|
17
|
+
"support": {
|
|
18
|
+
"name": "Dario Passariello",
|
|
19
|
+
"url": "https://github.com/passariello/",
|
|
20
|
+
"email": "dariopassariello@gmail.com"
|
|
21
|
+
},
|
|
22
|
+
"contributors": [
|
|
23
|
+
{
|
|
24
|
+
"name": "Dario Passariello",
|
|
25
|
+
"email": "dariopassarielloa@gmail.com"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "Valeria Cala Scaglitta",
|
|
29
|
+
"email": "valeriacalascaglitta@gmail.com"
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
"keywords": [
|
|
33
|
+
"biglogic",
|
|
34
|
+
"a51",
|
|
35
|
+
"memorio",
|
|
36
|
+
"state",
|
|
37
|
+
"store",
|
|
38
|
+
"observer",
|
|
39
|
+
"useObserver",
|
|
40
|
+
"dario",
|
|
41
|
+
"passariello"
|
|
42
|
+
],
|
|
43
|
+
"funding": [
|
|
44
|
+
{
|
|
45
|
+
"type": "patreon",
|
|
46
|
+
"url": "https://www.patreon.com/passariello"
|
|
47
|
+
}
|
|
48
|
+
],
|
|
49
|
+
"typing": [
|
|
50
|
+
"types/*"
|
|
51
|
+
],
|
|
52
|
+
"exports": {
|
|
53
|
+
".": {
|
|
54
|
+
"types": "./types/index.d.ts",
|
|
55
|
+
"import": "./index.js",
|
|
56
|
+
"default": "./index.js"
|
|
57
|
+
},
|
|
58
|
+
"./types/*": "./types/*"
|
|
59
|
+
},
|
|
60
|
+
"scripts": {
|
|
61
|
+
"build": "node ./esbuild.config.mjs",
|
|
62
|
+
"watch": "nodemon --watch * --exec \"npm run build \"",
|
|
63
|
+
"npm:publish": "npm run build && npm publish ./dist",
|
|
64
|
+
"test": "cd tests && npm run test",
|
|
65
|
+
"lint": "cd tests && npm run lint",
|
|
66
|
+
"tsc": "tsc --noEmit"
|
|
67
|
+
},
|
|
68
|
+
"devDependencies": {
|
|
69
|
+
"@types/node": "25.3.2",
|
|
70
|
+
"esbuild": "0.27.3",
|
|
71
|
+
"esbuild-node-externals": "1.20.1",
|
|
72
|
+
"esbuild-plugin-alias": "0.2.1",
|
|
73
|
+
"esbuild-plugin-copy": "2.1.1",
|
|
74
|
+
"typescript": "5.9.3"
|
|
75
|
+
}
|
|
76
|
+
}
|
package/types/memorio.d.ts
CHANGED
|
@@ -1,23 +1,64 @@
|
|
|
1
1
|
|
|
2
|
+
interface _dispatch {
|
|
3
|
+
set: (name: string, value?: any) => void
|
|
4
|
+
listen: (name: string, cb?: ((e: Event) => void) | null, flag?: boolean) => void
|
|
5
|
+
remove: (name: string, cb?: any, flag?: boolean) => void
|
|
6
|
+
}
|
|
7
|
+
|
|
2
8
|
interface _memorio {
|
|
3
|
-
setProps:
|
|
4
|
-
obj:
|
|
5
|
-
array:
|
|
6
|
-
dispatch:
|
|
7
|
-
setDescription:
|
|
9
|
+
setProps: (props: Record<string, unknown>) => void
|
|
10
|
+
obj: Record<string, unknown>
|
|
11
|
+
array: unknown[]
|
|
12
|
+
dispatch: _dispatch
|
|
13
|
+
setDescription: (description: string) => void
|
|
14
|
+
logger?: {
|
|
15
|
+
log: (...args: unknown[]) => void
|
|
16
|
+
debug: (...args: unknown[]) => void
|
|
17
|
+
info: (...args: unknown[]) => void
|
|
18
|
+
warn: (...args: unknown[]) => void
|
|
19
|
+
error: (...args: unknown[]) => void
|
|
20
|
+
}
|
|
21
|
+
objPath?: (prop: string, object: string[], separator?: string) => string
|
|
22
|
+
propertyName?: string | ((container: any, object: any) => string | null)
|
|
23
|
+
debug?: boolean
|
|
24
|
+
// State management properties
|
|
25
|
+
_tracking?: boolean
|
|
26
|
+
_trackedPaths?: Set<string>
|
|
27
|
+
_locked?: boolean
|
|
8
28
|
}
|
|
9
29
|
|
|
10
30
|
type memorio = _memorio
|
|
11
|
-
declare var memorio:
|
|
31
|
+
declare var memorio: _memorio
|
|
32
|
+
|
|
33
|
+
interface GlobalMemorio {
|
|
34
|
+
memorio: _memorio
|
|
35
|
+
}
|
|
12
36
|
|
|
13
|
-
|
|
14
|
-
|
|
37
|
+
declare global {
|
|
38
|
+
var memorio: _memorio
|
|
39
|
+
var events: Record<string, any>
|
|
40
|
+
var idbases: any[]
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
type arguments = unknown[]
|
|
44
|
+
declare var arguments: unknown[]
|
|
45
|
+
|
|
46
|
+
globalThis.memorio = globalThis.memorio || {
|
|
47
|
+
setProps: () => { },
|
|
48
|
+
obj: {},
|
|
49
|
+
array: [],
|
|
50
|
+
dispatch: {
|
|
51
|
+
set: () => { },
|
|
52
|
+
listen: () => { },
|
|
53
|
+
remove: () => { }
|
|
54
|
+
},
|
|
55
|
+
setDescription: () => { }
|
|
56
|
+
}
|
|
15
57
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
: globalThis.memorio
|
|
58
|
+
// Initialize events if not exists
|
|
59
|
+
globalThis.events = globalThis.events || {}
|
|
19
60
|
|
|
20
|
-
|
|
61
|
+
// Initialize idbases if not exists
|
|
62
|
+
globalThis.idbases = globalThis.idbases || []
|
|
21
63
|
|
|
22
|
-
|
|
23
|
-
type layerpro = {}
|
|
64
|
+
export { }
|
package/types/observer.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
|
|
1
2
|
/*!
|
|
2
3
|
memorio
|
|
3
4
|
Copyright (c) 2025 Dario Passariello <dariopassariello@gmail.com>
|
|
4
5
|
Licensed under Private License, see
|
|
5
6
|
https://dario.passariello.ca
|
|
6
|
-
*/
|
|
7
|
+
*/
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* Observer run a callback anytime the associated state going to change
|
|
@@ -19,7 +20,7 @@ interface _observer {
|
|
|
19
20
|
*
|
|
20
21
|
* @since memorio 1.0.6
|
|
21
22
|
*/
|
|
22
|
-
(stateName: string, callBack
|
|
23
|
+
(stateName: string, callBack?: any, option?: boolean): any
|
|
23
24
|
|
|
24
25
|
/**
|
|
25
26
|
* List of active observers
|
|
@@ -29,7 +30,7 @@ interface _observer {
|
|
|
29
30
|
*
|
|
30
31
|
* @since memorio 1.0.6
|
|
31
32
|
*/
|
|
32
|
-
readonly list?:
|
|
33
|
+
readonly list?: Record<string, any>
|
|
33
34
|
|
|
34
35
|
/**
|
|
35
36
|
* Remove the active observer (not the state)
|
|
@@ -41,7 +42,22 @@ interface _observer {
|
|
|
41
42
|
*/
|
|
42
43
|
readonly remove?: (name: string, callBack?: any, flag?: boolean) => void
|
|
43
44
|
|
|
45
|
+
/**
|
|
46
|
+
* Remove all active observers
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* observer.removeAll()
|
|
50
|
+
*
|
|
51
|
+
* @since memorio 1.0.6
|
|
52
|
+
*/
|
|
53
|
+
readonly removeAll?: () => boolean
|
|
54
|
+
|
|
44
55
|
}
|
|
45
56
|
|
|
46
|
-
declare var observer: _observer
|
|
57
|
+
declare var observer: _observer | null
|
|
47
58
|
type observer = _observer
|
|
59
|
+
|
|
60
|
+
// Extend globalThis to include observer
|
|
61
|
+
declare global {
|
|
62
|
+
var observer: _observer | null | undefined
|
|
63
|
+
}
|
package/types/session.d.ts
CHANGED
|
@@ -70,7 +70,7 @@ interface _session {
|
|
|
70
70
|
* @since memorio 0.0.1
|
|
71
71
|
* @return values
|
|
72
72
|
*/
|
|
73
|
-
quota
|
|
73
|
+
quota?: () => { usage: number; quota: number } | undefined
|
|
74
74
|
|
|
75
75
|
/**
|
|
76
76
|
* Get the size of sessions an the total
|
|
@@ -83,6 +83,17 @@ interface _session {
|
|
|
83
83
|
*/
|
|
84
84
|
size: () => number
|
|
85
85
|
|
|
86
|
+
/**
|
|
87
|
+
* Get a list of all session items
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* session.list()
|
|
91
|
+
*
|
|
92
|
+
* @since memorio 3.0.0
|
|
93
|
+
* @return object with all session items
|
|
94
|
+
*/
|
|
95
|
+
list?: () => object
|
|
96
|
+
|
|
86
97
|
// TODO
|
|
87
98
|
// readonly increaseQuota: (value: number) => void
|
|
88
99
|
}
|
package/types/state.d.ts
CHANGED
|
@@ -51,12 +51,12 @@ interface _state {
|
|
|
51
51
|
* List all states using: state.list
|
|
52
52
|
*
|
|
53
53
|
* @example
|
|
54
|
-
* state.list
|
|
54
|
+
* state.list()
|
|
55
55
|
*
|
|
56
56
|
* @since memorio 0.0.1
|
|
57
57
|
* @return Object of all states (Not the Proxy).
|
|
58
58
|
*/
|
|
59
|
-
readonly list?: (
|
|
59
|
+
readonly list?: () => object
|
|
60
60
|
|
|
61
61
|
/**
|
|
62
62
|
* Generate a message for "memorio"
|
package/types/store.d.ts
CHANGED
|
@@ -70,7 +70,7 @@ interface _store {
|
|
|
70
70
|
* @since memorio 0.0.1
|
|
71
71
|
* @return values
|
|
72
72
|
*/
|
|
73
|
-
quota
|
|
73
|
+
quota?: () => { usage: number; quota: number } | undefined
|
|
74
74
|
|
|
75
75
|
/**
|
|
76
76
|
* Get the size of stores an the total
|
|
@@ -83,6 +83,17 @@ interface _store {
|
|
|
83
83
|
*/
|
|
84
84
|
size: () => number
|
|
85
85
|
|
|
86
|
+
/**
|
|
87
|
+
* Get a list of all store items
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* store.list()
|
|
91
|
+
*
|
|
92
|
+
* @since memorio 3.0.0
|
|
93
|
+
* @return object with all store items
|
|
94
|
+
*/
|
|
95
|
+
list?: () => object
|
|
96
|
+
|
|
86
97
|
// TODO
|
|
87
98
|
// readonly increaseQuota: (value: number) => void
|
|
88
99
|
}
|
package/types/useObserver.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
|
|
1
2
|
/*!
|
|
2
3
|
memorio
|
|
3
4
|
Copyright (c) 2025 Dario Passariello <dariopassariello@gmail.com>
|
|
4
5
|
Licensed under Private License, see
|
|
5
6
|
https://dario.passariello.ca
|
|
6
|
-
*/
|
|
7
|
+
*/
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* useObserver run a callback anytime the associated state going to change.
|
|
@@ -28,5 +29,10 @@ interface _useObserver {
|
|
|
28
29
|
|
|
29
30
|
}
|
|
30
31
|
|
|
31
|
-
declare var useObserver: _useObserver
|
|
32
|
+
declare var useObserver: _useObserver | null
|
|
32
33
|
type useObserver = _useObserver
|
|
34
|
+
|
|
35
|
+
// Extend globalThis to include useObserver
|
|
36
|
+
declare global {
|
|
37
|
+
var useObserver: _useObserver | null | undefined
|
|
38
|
+
}
|