UNPKG

@stevenleep/storage

Version:

enhanced local storage

2 lines (1 loc) 3.98 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).storage={})}(this,(function(e){"use strict";var t;e.StorageType=void 0,(t=e.StorageType||(e.StorageType={})).LocalStorage="localStorage",t.SessionStorage="sessionStorage",t.MemoryStorage="memoryStorage",t.Cookie="cookie";const s=new Map;s.set(e.StorageType.LocalStorage,globalThis.localStorage),s.set(e.StorageType.SessionStorage,globalThis.sessionStorage),s.set(e.StorageType.MemoryStorage,new class{constructor(){this.store=new Map}clear(){this.store.clear()}getItem(e){return this.store.get(e)||null}key(e){return e<0||e>=this.store.size?null:this.store.keys().next().value}removeItem(e){this.store.delete(e)}setItem(e,t){this.store.set(e,t)}}),s.set(e.StorageType.Cookie,new class{clear(){document.cookie=""}getItem(e){const t=document.cookie.split(";");for(let s=0;s<t.length;s++){const r=t[s],o=r.indexOf("=");if(o<0)continue;return r.substr(0,o)===e?decodeURIComponent(r.substr(o+1)):null}return null}key(e){const t=document.cookie.split(";");if(e<0||e>=t.length)return null;const s=t[e],r=s.indexOf("=");return r<0?null:decodeURIComponent(s.substr(0,r))}get length(){return document.cookie.split(";").length}removeItem(e){document.cookie=encodeURIComponent(e)+"=; expires=Thu, 01 Jan 1970 00:00:00 GMT"}setItem(e,t){document.cookie=encodeURIComponent(e)+"="+encodeURIComponent(t)}});class r{constructor(t={}){this.baseStorageOptions=t,this.storage=s.get(e.StorageType.LocalStorage),this.namespace="@app/",t.storage&&this.setStorage(t.storage),t.namespace&&this.setNamespace(t.namespace)}setNamespace(e){this.namespace=e}setStorage(e){if("string"==typeof e){const t=s.get(e);if(!t)throw new Error(`Storage ${e} not found`);this.storage=t}else this.storage=e}getNamespace(){return this.namespace}getStorage(){return this.storage}isMounted(){return null!==this.storage}mappingNamespace(e){return`${this.namespace}${e}`}clear(){this.storage.clear()}getItem(e){return this.storage.getItem(this.mappingNamespace(e))}key(e){return this.storage.key(e)}removeItem(e){return this.storage.removeItem(this.mappingNamespace(e))}setItem(e,t){return this.storage.setItem(this.mappingNamespace(e),t)}}const o=new Map;class a{constructor(){this.subscribers=new Map,this.stateChangedSubscribers=new Set}subscribe(e,t){return this.subscribers.has(e)||this.subscribers.set(e,[]),this.subscribers.get(e).push(t),()=>{this.unsubscribe(e,t)}}unsubscribe(e,t){const s=this.subscribers.get(e);if(!s||!Array.isArray(s))return;const r=s.indexOf(t);r>-1&&s.splice(r,1)}broadcast(e,t){this.subscribers.forEach(((s,r)=>{s.forEach((s=>{s(e,t)}))}))}clear(e){e?this.subscribers.delete(e):this.subscribers.clear()}notify(e,t,s){const r=this.subscribers.get(e);r&&Array.isArray(r)&&r.forEach((e=>e(t,s)))}subscribeStateChange(e){return this.stateChangedSubscribers.add(e),()=>{this.stateChangedSubscribers.delete(e)}}notifyStateChange(e,t,s){this.stateChangedSubscribers.forEach((r=>r(e,t,s)))}unsubscribeStateChange(e){this.stateChangedSubscribers.delete(e)}clearStateChange(){this.stateChangedSubscribers.clear()}subscribeWithScope(e,t,s){if(o.has(e))return o.get(e).subscribe(t,s)}}class n extends r{constructor(e={}){super(e),this.options=e,this.observer=new a,o.set(this.namespace,this.observer)}setItem(e,t){const s=super.getItem(e);super.setItem(e,t),this.stateChange(e,t,s)}removeItem(e){const t=super.getItem(e);super.removeItem(e),this.stateChange(e,null,t),this.observer.clear(e)}getItem(e){return super.getItem(e)}clear(){super.clear(),this.observer.broadcast(null,null),this.observer.notifyStateChange(null,null,"__APP__CLEAR__"),this.observer.clearStateChange(),this.observer.clear()}stateChange(e,t,s){this.observer.notifyStateChange(t,s,e),this.observer.notify(e,t,s)}}e.BaseReactive=a,e.BaseStorage=r,e.DoActionStorage=n,e.Storages=s,e.default=n,Object.defineProperty(e,"__esModule",{value:!0})}));