UNPKG

swr-store

Version:
2 lines (1 loc) 5.14 kB
import{dequal as U}from"dequal/lite";function p(){return{cache:new Map,subscribers:new Map}}function N(e,t,n){let r=e.cache.get(t);if(r)return r;let s={value:n};return e.cache.set(t,s),s}function R(e,t,n){let r=e.subscribers.get(t);return r||(r=new Set,e.subscribers.set(t,r)),r.add(n),()=>{r&&r.delete(n)}}function b(e,t,n,r=!0){let s=N(e,t,n);if(s.value=n,r){let a=e.subscribers.get(t);a||(a=new Set,e.subscribers.set(t,a));for(let o of a.keys())o(n)}}function C(e,t){let n=e.subscribers.get(t);return n?n.size:0}var T=p();function S(e,t){return R(T,e,t)}function f(e,t){b(T,e,t)}function v(e){let t=T.cache.get(e);if(t)return t.value}function h(e){return C(T,e)}var L=p();function I(e,t){return R(L,e,t)}function m(e,t,n=!0){b(L,e,t,n)}function w(e,t=!0){m(e,t)}function g(e,t,n=!0,r=U){m(e,n);let s=v(e);if(s&&s.result.status==="success"&&t.status==="success"&&r(s.result.data,t.data)){s.timestamp=Date.now();return}f(e,{result:t,timestamp:Date.now(),isValidating:!1})}function x(e,t){return S(e,r=>{t(r)})}import{dequal as z}from"dequal/lite";function G(...e){return JSON.stringify(e)}var _={revalidateOnFocus:!1,revalidateOnNetwork:!1,revalidateOnVisibility:!1,refreshWhenHidden:!1,refreshWhenBlurred:!1,refreshWhenOffline:!1,freshAge:2e3,staleAge:3e4,key:G,compare:z,maxRetryInterval:5e3},E=_;var j=typeof window!="undefined"&&typeof window.document!="undefined"&&typeof window.document.createElement!="undefined",W=j;function H(){let e=()=>{},t=()=>{};return{promise:new Promise((r,s)=>{e=r,t=s}),resolve:e,reject:t}}function y(e,t){let n=!0,r,s=H(),a=(o=10,i=0)=>{let u=l=>{!n||typeof t.count=="number"&&t.count<=i?s.reject(l):r=window.setTimeout(()=>{a(Math.max(10,Math.min(t.interval,o*2)),i+1)},o)};try{e().then(s.resolve,u)}catch(l){u(l)}};return a(),{resolvable:s,cancel:()=>{r&&clearTimeout(r),n=!1}}}var P=0;function k(){let e=P;return P+=1,e}var V=new Map,{assign:D}=Object;function F(e,t,n){let r={shouldRevalidate:!0,initialData:e.initialData,hydrate:!1},s=D({},r,n),a=e.key(...t),o=Date.now(),i=v(a);if(!i&&s.initialData&&(i={result:{data:s.initialData,status:"success"},timestamp:o,isValidating:!1},s.hydrate&&f(a,i)),i){if(!s.shouldRevalidate||i.timestamp+e.freshAge>o)return i.result;if(i.result.status==="pending"){let d=V.get(a);d&&d.cancel()}}let u=y(()=>e.get(...t),{count:e.maxRetryCount,interval:e.maxRetryInterval});V.set(a,u);let l=u.resolvable.promise,M={data:l,status:"pending"};return l.then(d=>{let c=v(a);(()=>c==null?!0:c.timestamp>o?!1:c.result.status==="success"?!e.compare(c.result.data,d):!0)()&&f(a,{result:{data:d,status:"success"},timestamp:c&&c.timestamp?c.timestamp:Date.now(),isValidating:!1})},d=>{let c=v(a);(()=>c==null?!0:!(c.timestamp>o))()&&f(a,{result:{data:d,status:"failure"},timestamp:c&&c.timestamp?c.timestamp:Date.now(),isValidating:!1})}),i&&i.timestamp+e.freshAge+e.staleAge>o?(i.timestamp=o,i.isValidating=!0,i.result):(f(a,{result:M,timestamp:o,isValidating:!0}),M)}function B(e,t,n,r){if(h(t)>0)return;let s=[],a=i=>{s.push(i())},o=()=>{m(t,!0)};a(()=>I(t,u=>{F(n,r,{shouldRevalidate:u})})),W&&(n.refreshInterval!=null&&(n.refreshWhenBlurred&&a(()=>{let i,u=()=>{window.clearInterval(i),i=window.setInterval(o,n.refreshInterval)},l=()=>{window.clearInterval(i),i=void 0};return window.addEventListener("blur",u,!1),window.addEventListener("focus",l,!1),()=>{window.removeEventListener("blur",u,!1),window.removeEventListener("focus",l,!1),window.clearInterval(i)}}),n.refreshWhenOffline&&a(()=>{let i,u=()=>{window.clearInterval(i),i=window.setInterval(o,n.refreshInterval)},l=()=>{window.clearInterval(i),i=void 0};return window.addEventListener("offline",u,!1),window.addEventListener("online",l,!1),()=>{window.removeEventListener("offline",u,!1),window.removeEventListener("online",l,!1),window.clearInterval(i)}}),n.refreshWhenHidden&&a(()=>{let i,u=()=>{window.clearInterval(i),document.visibilityState==="visible"?i=void 0:i=window.setInterval(o,n.refreshInterval)};return document.addEventListener("visibilitychange",u,!1),()=>{document.removeEventListener("visibilitychange",u,!1),window.clearInterval(i)}}),n.refreshWhenHidden||n.refreshWhenBlurred||n.refreshWhenOffline||a(()=>{let i=window.setInterval(o,n.refreshInterval);return()=>{window.clearInterval(i)}})),n.revalidateOnFocus&&a(()=>(window.addEventListener("focus",o,!1),()=>{window.removeEventListener("focus",o,!1)})),n.revalidateOnNetwork&&a(()=>(window.addEventListener("online",o,!1),()=>{window.removeEventListener("online",o,!1)})),n.revalidateOnVisibility&&a(()=>{let i=()=>{document.visibilityState==="visible"&&o()};return window.addEventListener("visibilitychange",i,!1),()=>{window.removeEventListener("visibilitychange",i,!1)}})),e.set(t,s)}function q(e,t){if(h(t)===0){let n=e.get(t);if(n){for(let r=0,s=n.length;r<s;r+=1)n[r]();e.delete(t)}}}function A(e){let t=D({},E,e),n=new Map;return{id:`SWRStore-${k()}`,trigger:(r,s=!0)=>{let a=t.key(...r);w(a,s)},mutate:(r,s,a=!0,o=t.compare)=>{let i=t.key(...r);g(i,s,a,o)},get:(r,s)=>F(t,r,s),subscribe:(r,s)=>{let a=t.key(...r);B(n,a,t,r);let o=x(a,s);return()=>{o(),q(n,a)}}}}export{A as createSWRStore,g as mutate,x as subscribe,w as trigger};