UNPKG

@stevenleep/storage

Version:

enhanced local storage

2 lines (1 loc) 3.84 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e;exports.StorageType=void 0,(e=exports.StorageType||(exports.StorageType={})).LocalStorage="localStorage",e.SessionStorage="sessionStorage",e.MemoryStorage="memoryStorage",e.Cookie="cookie";const t=new Map;t.set(exports.StorageType.LocalStorage,globalThis.localStorage),t.set(exports.StorageType.SessionStorage,globalThis.sessionStorage),t.set(exports.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)}}),t.set(exports.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 s{constructor(e={}){this.baseStorageOptions=e,this.storage=t.get(exports.StorageType.LocalStorage),this.namespace="@app/",e.storage&&this.setStorage(e.storage),e.namespace&&this.setNamespace(e.namespace)}setNamespace(e){this.namespace=e}setStorage(e){if("string"==typeof e){const s=t.get(e);if(!s)throw new Error(`Storage ${e} not found`);this.storage=s}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 r=new Map;class o{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(r.has(e))return r.get(e).subscribe(t,s)}}class a extends s{constructor(e={}){super(e),this.options=e,this.observer=new o,r.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)}}exports.BaseReactive=o,exports.BaseStorage=s,exports.DoActionStorage=a,exports.Storages=t,exports.default=a;