UNPKG

storage-manager-js

Version:

A little way to control Cookies, LocalStorage and SessionStorage without tears

3 lines (2 loc) 2.44 kB
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const k=(e,t)=>{try{Object.keys(e).forEach(t)}catch(o){window.console.log(o)}},i=e=>e==null,w=e=>{const t=typeof e;return t==="string"||t==="number"||t==="boolean"||i(e)},h=(e,t)=>{const o=t.getItem(e);try{return JSON.parse(o)}catch{return o??null}},u=e=>Object.keys(e).reduce((t,o)=>({...t,[o]:h(o,e)}),{}),p=e=>e instanceof Date?e:typeof e=="number"?new Date(new Date*1+e*864e5):e,d="1969-12-31T23:59:59.000Z",S=()=>document.cookie===""?{}:document.cookie.split("; ").map(t=>t.split("=")).reduce((t,o)=>(t[decodeURIComponent(o[0].trim())]=decodeURIComponent(o[1].trim()),t),{}),c=new Set,a=()=>{const e=S();c.forEach(t=>t(e))},y=[{name:"expires",parse:e=>`expires=${p(e.expires??d)}`},{name:"maxAge",parse:e=>e.maxAge?`max-age=${p(e.expires??d)}`:""},{name:"path",parse:e=>`path=${e.path??"/"}`},{name:"sameSite",parse:e=>`samesite=${e.sameSite??"strict"}`},{name:"useSecure",parse:e=>`${e.useSecure??!0?"secure":""}`},{name:"domain",parse:e=>{const t=e.domain??"";return t===""?"":`domain=${e.multiDomain?".":""}${t}`}},{name:"partitioned",parse:e=>e.partitioned?"Partitioned":""}],f={json:S,listener:e=>(c.add(e),()=>c.delete(e)),clearListeners:()=>c.clear(),has:e=>document.cookie.split(";").some(t=>t.trim().startsWith(`${e}=`)),deleteAll:()=>{document.cookie.split(";").forEach(e=>{document.cookie=e.replace(/^ +/,"").replace(/=.*/,`=;expires=${new Date().toUTCString()};path=/`)}),a()},get:e=>{const t=f.json()[e];if(i(t))return null;try{return JSON.parse(decodeURIComponent(t))}catch{return t}},delete:e=>{document.cookie=`${encodeURIComponent(e)}=;expires=${new Date().toUTCString()}`,a()},set:(e,t,o={})=>{const n=w(t)?t:encodeURIComponent(JSON.stringify(t)),s=y.reduce((r,$)=>{const m=$.parse(o);return m===""?r:r.concat(m)},[`${encodeURIComponent(e)}=${n}`]).join(";");document.cookie=s,a()}},l=e=>{const t=new Set,o=n=>{e().removeItem(n);const s=u(e());t.forEach(r=>r(s))};return{delete:o,listener:n=>(t.add(n),()=>t.delete(n)),clearListeners:()=>t.clear(),json:(n=!1)=>n?u(e()):e(),has:n=>{const s=e().getItem(n);return!i(s)},deleteAll:()=>{k(e(),o),t.forEach(n=>n(e()))},get:n=>h(n,e()),set:(n,s)=>{e().setItem(n,JSON.stringify(s)),t.forEach(r=>r(e()))}}},I=l(()=>window.sessionStorage),C=l(()=>window.localStorage);exports.Cookie=f;exports.LocalStorage=C;exports.SessionStorage=I;exports.createStorage=l; //# sourceMappingURL=index.js.map