memorio
Version:
Memorio, State + Observer and Store for a easy life
2 lines (1 loc) • 14.3 kB
JavaScript
var c=(e,r)=>()=>(e&&(r=e(e=0)),r);var m,g=c(()=>{m={name:"memorio",version:"2.1.2",type:"module",private:!1,main:"index.js",license:"CC-BY 4.0",types:"index.d.ts",typings:"./types/*",description:"Memorio, State + Observer and Store for a easy life ",copyright:"Dario Passariello, BigLogic ca - a51.dev is a BigLogic project",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:{import:"./index.js",require:"./index.js",default:"./index.js"},scripts:{build:"node ./esbuild.config.mjs",watch:'nodemon --watch * --exec "npm run build "',test:"cd tests/jest && npm run test","-----------":"","npm:publish":"npm run build && npm publish ./dist"},dependencies:{"dphelper.types":"0.0.20"},devDependencies:{"@babel/eslint-parser":"^7.28.5","@eslint/js":"9.39.2","@testing-library/jest-dom":"6.9.1","@types/jest":"30.0.0","@types/node":"25.0.6","@typescript-eslint/eslint-plugin":"8.52.0","@typescript-eslint/parser":"8.52.0",esbuild:"0.27.2","esbuild-node-externals":"1.20.1","esbuild-plugin-alias":"0.2.1","esbuild-plugin-clean":"1.0.1","esbuild-plugin-copy":"2.1.1","esbuild-sass-plugin":"3.6.0","esbuild-scss-modules-plugin":"1.1.1",eslint:"9.39.2",jest:"30.2.0","jest-environment-jsdom":"30.2.0","ts-jest":"29.4.6","ts-loader":"^9.5.4","ts-node":"10.9.2",tslib:"^2.8.1",typescript:"5.9.3"}}});var v,f=c(()=>{"use strict";s();g();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:m.version});v=["list","state","store","idb","observer","useObserver","remove","removeAll"]});var y=c(()=>{"use strict";s();Object.defineProperty(memorio,"dispatch",{writable:!1,enumerable:!1,value:{set:(e,r={})=>{dispatchEvent(new CustomEvent(String(e),r))},listen:(e,r=null,o=!1)=>{observer.list?.[e]?.length>0&&observer.remove(e);let a=t=>r?setTimeout(()=>r(t),1):null;globalThis.addEventListener(e,a),globalThis.events[e]=a},remove:e=>{globalThis.removeEventListener(e,globalThis.events[e]),delete globalThis.events[e]}}})});var h=c(()=>{"use strict";s();memorio.propertyName=function(e,r){return String(r).replace("() => ","")}});var j,S,O=c(()=>{"use strict";s();f();Object.defineProperty(memorio,"objPath",{writable:!1,enumerable:!1,value:(e,r,o=".")=>r.concat(e).join(o)});j=(e,r,o=[])=>{let a=t=>{let n=t.split(".");n.forEach((i,l)=>{let u=n.slice(0,l+1).join(".");globalThis.memorio.dispatch.set(u,{detail:{name:u}})})};return new Proxy(e,{get(t,n){if(n==="list")return console.log('Some state could be hidden when you use "state.list". Use "state" to see the complete list '),JSON.parse(JSON.stringify(state));if(n==="remove")return function(i){return delete t[i],!0};if(n==="removeAll")return function(){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.error(i)}};if(Object.isFrozen(t[n]))return t[n];try{let i=Reflect.get(t,n);return i&&typeof i=="object"&&["Array","Object"].includes(i.constructor.name)?j(i,r,o.concat(n)):i}catch(i){console.error("Error: ",i);return}},set(t,n,i){if(v.includes(n))return console.error("key "+n+" is protected"),!1;if(t[n]&&typeof t[n]=="object"&&Object.isFrozen(t[n]))return console.error(`Error: state '${n}' is locked`),!1;try{let l=globalThis.memorio.objPath(n,o);return r({action:"set",path:l,target:t,newValue:i,previousValue:Reflect.get(t,n)}),a("state."+l),Reflect.set(t,n,i),t[n]&&typeof t[n]=="object"&&Reflect.defineProperty(t[n],"lock",{value(){Object.defineProperty(t,n,{writable:!1,enumerable:!1}),Object.freeze(t[n])}}),!0}catch(l){console.error("Error in set trap:",l);return}},deleteProperty(t,n){try{let i=globalThis.memorio.objPath(n,o);return r({action:"delete",path:i,target:t}),Reflect.deleteProperty(t,n)}catch(i){console.error("Error in deleteProperty trap:",i);return}}})};globalThis?.state?globalThis.state=state:globalThis.state=j({},()=>{});S=new WeakSet;S.add(state);setInterval(()=>{if(!S.has(state)){alert("Memorio state is compromised, check if you override it and please reload the page");for(let e=1;e<99999;e++)clearInterval(e);stop()}},1e3);Object.defineProperty(globalThis,"state",{enumerable:!1,configurable:!0})});var x=c(()=>{"use strict";s();globalThis.observer||(globalThis.observer=null);Object.defineProperty(globalThis,"observer",{enumerable:!1,configurable:!0});observer=(e,r=null,o=!0)=>{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(a){console.error(a);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 a=(String(e),{detail:{name:String(e)}});globalThis.observer.list[e]&&globalThis.memorio.dispatch.remove(a),globalThis.observer.list[e]||globalThis.memorio.dispatch.listen(a),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(observer,{list:{get:()=>globalThis.events},remove:{value:e=>{e&&(globalThis.memorio.dispatch.remove(e),delete globalThis.events[e])}},removeAll:{get:()=>{Object.entries(observer.list).forEach(e=>{globalThis.events[e[0]]})}}});Object.freeze(observer)});var w=c(()=>{"use strict";s();globalThis.useObserver||(globalThis.useObserver=null);Object.defineProperty(globalThis,"useObserver",{enumerable:!1,configurable:!0});useObserver=(e,r)=>{let o=memorio.propertyName(state,r);try{return observer(o,()=>e()),!0}catch(a){console.error(a);return}};Object.freeze(useObserver)});var P=c(()=>{"use strict";s();Object.defineProperty(globalThis,"store",{value:new Proxy({},{}),enumerable:!1,configurable:!0});Object.defineProperties(store,{get:{value(e){if(e){try{let r=localStorage.getItem(e);return r&&JSON.parse(r)}catch(r){console.error(`Error parsing store item '${e}':`,r)}return null}}},set:{value(e,r){if(e){try{r==null?localStorage.setItem(e,JSON.stringify(null)):typeof r=="object"||typeof r=="number"||typeof r=="boolean"||typeof r=="string"?localStorage.setItem(e,JSON.stringify(r)):typeof r=="function"&&console.error("It's not secure to store functions.")}catch(o){console.error(`Error setting store item '${e}':`,o)}return null}}},remove:{value(e){if(e)return localStorage.getItem(e)?(localStorage.removeItem(e),!0):!1}},delete:{value(e){return store.remove(e),!0}},removeAll:{value(){return localStorage.clear(),!0}},clearAll:{value(){return store.removeAll(),!0}},quota:{value(){"storage"in navigator&&"estimate"in navigator.storage&&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.error("Error estimating quota:",e)})}},size:{value(){let e=0;for(let r in localStorage)if(localStorage.hasOwnProperty(r)){let o=localStorage.getItem(r);o&&(e+=o.length)}return e}}});Object.freeze(store)});var T=c(()=>{"use strict";s();Object.defineProperty(globalThis,"session",{value:new Proxy({},{}),enumerable:!1,configurable:!0});Object.defineProperties(session,{get:{value(e){if(e)try{let r=sessionStorage.getItem(e);return r&&JSON.parse(r)}catch(r){console.error(`Error parsing session item '${e}':`,r)}}},set:{value(e,r){if(e)try{r==null?sessionStorage.setItem(e,JSON.stringify(null)):typeof r=="object"||typeof r=="number"||typeof r=="boolean"||typeof r=="string"?sessionStorage.setItem(e,JSON.stringify(r)):typeof r=="function"&&console.error("It's not secure to session functions.")}catch(o){console.error(`Error setting session item '${e}':`,o)}}},remove:{value(e){if(e&&sessionStorage.getItem(e))return sessionStorage.removeItem(e),!0}},delete:{value(e){return session.remove(e),!0}},removeAll:{value(){return sessionStorage.clear(),!0}},clearAll:{value(){return session.removeAll(),!0}},quota:{value(){"storage"in navigator&&"estimate"in navigator.storage&&navigator.storage.estimate().then(({usage:e,quota:r})=>{e&&r&&console.debug(`Using ${e/1024} out of ${r/1024} Mb.`)}).catch(e=>{console.error("Error estimating quota:",e)})}},size:{value(){let e=0;for(let r in sessionStorage)if(sessionStorage.hasOwnProperty(r)){let o=sessionStorage.getItem(r);o&&(e+=o.length)}return e}}});Object.freeze(session)});var D=c(()=>{"use strict";s();Object.defineProperty(window,"cache",{value:new Proxy({},{}),enumerable:!1,configurable:!0})});var W={};var E=c(()=>{"use strict";s();idb.db.create=(e,r=1)=>{idb.db.support();let o=indexedDB.open(e,r);o.onerror=()=>{console.error(`IndexedDB error: ${o.errorCode}`)},o.onsuccess=()=>{console.debug("Successful database connection")},o.onupgradeneeded=()=>{console.debug("Database created")},idb.db.list()}});var H={};var I=c(()=>{"use strict";s();idb.db.list=()=>(indexedDB.databases().then(e=>e).then(e=>{e&&(idbases=e)}).catch(e=>{console.error(e)}),idb.db.size(),idbases);setInterval(()=>{idb.db.list()},1e3)});var K={};var $=c(()=>{"use strict";s();idb.db.exist=e=>idbases?.find(r=>r.name===e)!==void 0});var N={};var z=c(()=>{"use strict";s();idb.db.quota=()=>navigator.storage.estimate()});var Q={};var B=c(()=>{"use strict";s();idb.db.delete=e=>{if(console.log(`Remove ${e}...`),!!idb.db.exist(e))if(typeof layerpro=="function"){confirm(`Are you sure to remove "${e}" database?`,()=>{setTimeout(()=>{indexedDB.deleteDatabase(e),console.debug(`${e} removed`),idb.db.list()},1e3)},()=>alert("Operation cancelled."));return}else{confirm(`Are you sure to remove "${e}" database?`)?setTimeout(()=>{indexedDB.deleteDatabase(e),console.debug(`${e} removed`),idb.db.list()},1e3):alert("Operation cancelled.");return}}});var X={};var A=c(()=>{"use strict";s();idb.db.size=()=>{idbases?.map(e=>{if(!idb.db.exist(e))return null;let r=dphelper.array.findindex(idbases,e.name),o=indexedDB?.open(e.name,idb.db.version(e.name));return o.onerror=a=>console.error("Error on IndexedDB"),o.onsuccess=a=>{let t=a.target.result,n=[...t.objectStoreNames];((l,u)=>{let b=l.reduce((d,p)=>(d.push(idb.table.size(u,p)),d),[]);b.map(d=>{let p=d.reduce((U,k)=>U+k,0);return Number.parseInt(dphelper.dev.byteSize(p)),null}),idbases[r].size=b.length>0?b:0})(n,t)},null})}});var Z={};var q=c(()=>{"use strict";s();idb.db.version=e=>{let r=0;for(let o of idbases){o.name===e&&(r=o.version);break}return r}});var _={};var C=c(()=>{"use strict";s();idb.db.support=()=>{if("indexedDB"in window)return!0;console.error("Your browser doesn't support IndexedBD")}});var ee={};var J=c(()=>{"use strict";s();idb.table.create=(e,r)=>{try{let o=Number(idb.db.version(e))+1,a=indexedDB.open(e,o);try{a.onupgradeneeded=t=>{let n=t.target,i=n.result,l=i.createObjectStore(r,{keyPath:"id",unique:!0,autoincrement:!0});l.createIndex("id","id"),l.createIndex("data","data"),i.close(),a?.result?.close(),a=void 0,idb.db.list()}}catch(t){console.error(">>",t);return}}catch(o){console.error(">>>",o);return}return!1}});var re={};var R=c(()=>{"use strict";s();idb.table.size=(e,r)=>(idb.db.list(),new Promise((o,a)=>{if(e==null)return a();let t=event,n=0;e=t.target.result;let i=e.transaction([r]).objectStore(r).openCursor();i.onsuccess=(l=>{let u=l.target.result;if(u){let b=u.value,d=JSON.stringify(b);n+=d.length,u.continue()}else o(n)}),i.onerror=l=>a(`error in ${r}: ${l}`)}))});var te={};var V=c(()=>{"use strict";s();idb.data.delete=(e,r,o)=>{if(!idb.db.exist(e))return;let a=indexedDB.open(e,idb.db.version(e));a.onsuccess=()=>{let t=a.result,n=t.transaction(r,"readwrite");n.objectStore(r).put(o),a.onerror=l=>{console.debug(l,`Database insert error: ${l.target.errorCode}`)},n.onerror=l=>{console.debug(event,`Database insert error: ${l.target.errorCode}`)},t.close(),idb.db.list(),console.debug("Store inserted")}};idb.data.delete.all=(e,r)=>{idb.db.list();let o=indexedDB.open(e);o.onsuccess=a=>{let n=a.target.result.transaction(r).objectStore(r).set({});n.onsuccess=i=>{console.log(i)}}}});var oe={};var Y=c(()=>{"use strict";s();idb.data.set=(e,r,o)=>{if(!idb.exist(e))return;let a=indexedDB.open(e,idb.version(e));a.onsuccess=()=>{let t=a.result,n=t.transaction(r,"readwrite");n.objectStore(r).put(o),a.onerror=l=>{console.debug(l,`Database insert error: ${l.target.errorCode}`)},n.onerror=l=>{console.debug(event,`Database insert error: ${l.target.errorCode}`)},t.close(),idb.databases(),console.debug("IndexDB inserted")}}});var se={};var L,M=c(()=>{"use strict";s();idb.data.get=(e,r,o)=>{idb.db.list();let a=indexedDB.open(e);return a.onsuccess=t=>{let n=t.target.result,i=n.transaction(r).objectStore(r).get(o);i.onsuccess=l=>(L=i.result,i.result)},L}});var F=c(()=>{"use strict";s();Object.defineProperty(window,"idb",{value:{db:{},table:{},data:{}},writable:!0,configurable:!0,enumerable:!1}),Object.defineProperty(window,"idbases",{value:[],writable:!0,configurable:!0,enumerable:!1}),Promise.resolve().then(()=>E()),Promise.resolve().then(()=>I()),Promise.resolve().then(()=>$()),Promise.resolve().then(()=>z()),Promise.resolve().then(()=>B()),Promise.resolve().then(()=>A()),Promise.resolve().then(()=>q()),Promise.resolve().then(()=>C()),Promise.resolve().then(()=>J()),Promise.resolve().then(()=>R()),Promise.resolve().then(()=>V()),Promise.resolve().then(()=>Y()),Promise.resolve().then(()=>M()),Object.preventExtensions(idb),Object.seal(idb),Object.freeze(idb)});import"dphelper.types";import"dphelper.types";var s=c(()=>{f();y();h();O();x();w();P();T();D();F()});s();