alpinejs-cache
Version:
Persist and expire data easily with Alpine
2 lines (1 loc) • 1.37 kB
JavaScript
(()=>{var I={setItem(t,n){return localStorage.setItem(t,JSON.stringify(n))},getItem(t){let n=localStorage.getItem(t);return n!==void 0?JSON.parse(n):null}},O=function(t){let n=new Map,u=(e,r,i)=>{for(let a of o(i,e))a(r)},o=(e,r)=>(n.has(e)||n.set(e,new Map),n.get(e).has(r)||n.get(e).set(r,new Set),n.get(e).get(r)),s=()=>{let e,r,i;return i=c.defaultDriver,t.interceptor((a,l,S,x)=>{let d=f(e||x),_=r||60,m=!1;o(i,d).add(S);let p;return M(d,i)?p=D(d,i):(m=!0,p={data:a,expires_at:g()+_*1e3}),t.effect(()=>{let h=l();h?._x_interceptor||(m&&v(d,h,_,i),m=!0),S(h)}),p.data},a=>{a.as=l=>(e=l,a),a.for=l=>(r=l,a),a.until=l=>(r=Math.max(l-g(),0),a),a.using=l=>(i=l,a)})};Object.defineProperty(t,"$cache",{get:()=>s()}),t.magic("cache",s);let c={defaultDriver:I,invalidate:(e,r=null)=>{e=f(e),v(e,void 0,0,r||c.defaultDriver),u(e,void 0,r||c.defaultDriver)},set:(e,r,i,a=null)=>{e=f(e),v(e,r,i,a||c.defaultDriver),u(e,r,a||c.defaultDriver)},get:(e,r=null)=>(e=f(e),D(e,r||c.defaultDriver)?.data)};t.cache=c};function f(t){return`_cache_${t}`}function g(){return Date.now()}function M(t,n){return D(t,n)!==void 0}function D(t,n){let u=n.getItem(t);if(!(!u?.expires_at||g()>u?.expires_at))return u}function v(t,n,u,o){let s=g()+u*1e3,c=Object.create(null);o.setItem(t,{data:n,expires_at:s})}var w=O;document.addEventListener("alpine:init",()=>window.Alpine.plugin(w));})();