axios-cache-interceptor
Version:
Cache interceptor for axios
7 lines • 14 kB
JavaScript
/*!
* Axios Cache Interceptor 1.12.3
* (c) 2021-present Arthur Fiorette & Contributors
* Released under the MIT License.
*/
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require("cache-parser"),require("fast-defer"),require("http-vary"),require("object-code"),require("try")):typeof define==`function`&&define.amd?define([`exports`,`cache-parser`,`fast-defer`,`http-vary`,`object-code`,`try`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.AxiosCacheInterceptor={},e.cache_parser,e.fast_defer,e.http_vary,e.object_code,e.try))})(this,function(e,t,n,r,i,a){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});let o={IfModifiedSince:`if-modified-since`,LastModified:`last-modified`,IfNoneMatch:`if-none-match`,CacheControl:`cache-control`,Pragma:`pragma`,ETag:`etag`,Expires:`expires`,Age:`age`,XAxiosCacheEtag:`x-axios-cache-etag`,XAxiosCacheLastModified:`x-axios-cache-last-modified`,XAxiosCacheStaleIfError:`x-axios-cache-stale-if-error`,Vary:`vary`},s=(e,n)=>{if(!e)return`not enough headers`;let r=e[o.CacheControl];if(r){let i=(0,t.parse)(String(r));if(i.noCache||i.noStore||n===`server`&&i.private)return`dont cache`;if(i.immutable)return{cache:31536e6};if(i.maxAge!==void 0){let t=e[o.Age];return{cache:t?(i.maxAge-Number(t))*1e3:i.maxAge*1e3,stale:i.maxStale===void 0?i.staleWhileRevalidate===void 0?void 0:i.staleWhileRevalidate*1e3:i.maxStale*1e3}}}let i=e[o.Expires];if(i){let e=Date.parse(String(i))-Date.now();return e>=0?{cache:e}:`dont cache`}return`not enough headers`};function c(e,t){let n={};for(let i of t){var r;n[i]=(r=e.get(i))==null?void 0:r.toString()}return n}async function l(e,t){if(typeof t==`function`)return t(e);let{statusCheck:n,responseMatch:r,containsHeaders:i}=t;if(n&&!await n(e.status)||r&&!await r(e))return!1;if(i)for(let[t,n]of Object.entries(i)){var a;if(!await n((a=e.headers[t.toLowerCase()])==null?e.headers[t]:a))return!1}return!0}function u(e,t){return e instanceof RegExp?(e.lastIndex=0,e.test(t)):t.includes(e)}function d(e){return e?t=>e(t)||t===304:e=>e>=200&&e<300||e===304}function f(e=`get`,t=[]){return e=e.toLowerCase(),t.some(t=>t===e)}function p(e,t){var n;let{etag:r,modifiedSince:i}=t.cache,a=(n=e.data)==null||(n=n.meta)==null?void 0:n.revalidation;if(r){let n;if(a!=null&&a.etag)n=a.etag;else if(r===!0){var s;n=(s=e.data)==null?void 0:s.headers[o.ETag]}else n=r;n&&t.headers.set(o.IfNoneMatch,n)}if(i){let n;n=a!=null&&a.lastModified?a.lastModified===!0?new Date(e.createdAt).toUTCString():a.lastModified:i===!0?e.data.headers[o.LastModified]||new Date(e.createdAt).toUTCString():i.toUTCString(),t.headers.set(o.IfModifiedSince,n)}}function m(e,t){return e.status===304&&t?(e.cached=!0,e.data=t.data,e.status=t.status,e.statusText=t.statusText,e.headers={...t.headers,...e.headers},t):{data:e.data,status:e.status,statusText:e.statusText,headers:e.headers}}function h(e){let t=async i=>{var a;if(i.id=e.generateKey(i,{vary:i.cache&&Array.isArray(i.cache.vary)?c(i.headers,i.cache.vary):void 0}),i.cache===!1||(i.cache={...e.defaults.cache,...i.cache},i.cache.enabled===!1))return i;if(typeof i.cache.cachePredicate==`object`&&i.cache.cachePredicate.ignoreUrls&&i.url){for(let e of i.cache.cachePredicate.ignoreUrls)if(u(e,i.url))return i}if(typeof i.cache.cachePredicate==`object`&&i.cache.cachePredicate.allowUrls&&i.url){let e=!1;for(let t of i.cache.cachePredicate.allowUrls)if(u(t,i.url)){e=!0;break}if(!e)return i}if(i.cache.cacheTakeover&&(i.headers.set(o.CacheControl,`no-cache, no-store, must-revalidate, max-age=0`,!1),i.headers.set(o.Pragma,`no-cache`,!1),i.headers.set(o.Expires,`0`,!1)),!f(i.method,i.cache.methods))return i;let s=await e.storage.get(i.id,i),l=i.cache.override;if(i.cache.vary!==!1&&(a=s.data)!=null&&(a=a.meta)!=null&&a.vary&&s.data.headers[o.Vary]){var m;let t=Array.isArray(i.cache.vary)?i.cache.vary:(0,r.parse)(s.data.headers[o.Vary]);if(t&&t!==`*`&&!(0,r.compare)(t,(m=s.data.meta)==null?void 0:m.vary,i.headers)){let n=c(i.headers,t),r=e.generateKey({...i,id:void 0},{vary:n});i.id!==r&&(i.id=r,s=await e.storage.get(r,i))}}ignoreAndRequest:if(s.state===`empty`||s.state===`stale`||s.state===`must-revalidate`||l){if(e.waiting.has(i.id)&&!l&&(s=await e.storage.get(i.id,i),s.state!==`empty`&&s.state!==`must-revalidate`))break ignoreAndRequest;let t=(0,n.deferred)();if(e.waiting.set(i.id,t),t.catch(()=>void 0),await e.storage.set(i.id,{state:`loading`,previous:l?s.data?`stale`:`empty`:s.state,data:s.data,createdAt:l&&!s.createdAt?Date.now():s.createdAt},i),(s.state===`stale`||s.state===`must-revalidate`)&&!l&&p(s,{...i,cache:i.cache}),i.validateStatus=d(i.validateStatus),s.state===`stale`||s.data&&s.state!==`must-revalidate`){var h,g;await((h=(g=i.cache).hydrate)==null?void 0:h.call(g,s))}return i}let _;if(s.state===`loading`){let n=e.waiting.get(i.id);if(!n){if(s.data){var v,y;await((v=(y=i.cache).hydrate)==null?void 0:v.call(y,s))}return i}try{await n;let a=await e.storage.get(i.id,i);if(!a.data)return t(i);if(i.cache.vary!==!1&&a.data.headers[o.Vary]){var b;let e=Array.isArray(i.cache.vary)?i.cache.vary:(0,r.parse)(a.data.headers[o.Vary]),n=(b=a.data.meta)==null?void 0:b.vary;if(e===`*`||e&&n&&!(0,r.compare)(e,n,i.headers))return t(i)}_=a.data}catch(e){throw e}}else _=s.data;return i.transformResponse=void 0,i.adapter=function(){return Promise.resolve({config:i,data:_.data,headers:_.headers,status:_.status,statusText:_.statusText,cached:!0,stale:s.previous===`stale`,id:i.id})},i};return{onFulfilled:t}}async function g(e,t,n){if(typeof n==`function`)return n(t);for(let[r,i]of Object.entries(n)){if(i===`delete`){await e.remove(r,t.config);continue}let n=await e.get(r,t.config);if(n.state===`loading`)continue;let a=await i(n,t);if(a===`delete`){await e.remove(r,t.config);continue}a!==`ignore`&&await e.set(r,a,t.config)}}function _(e){let n=(t,n,r)=>{let i=e.waiting.get(t);i&&(i[n](r),e.waiting.delete(t))};return{onFulfilled:async t=>{if(!(t!=null&&t.config))throw t;t.id=t.config.id,t.cached!=null||(t.cached=!1);let i=t.config,a=i.cache;if(t.cached)return t;if(!a)return t.cached=!1,t;if(a.update&&await g(e.storage,t,a.update),!f(i.method,a.methods))return t;let s=await e.storage.get(t.id,i);if(s.state!==`loading`||!s.data&&!await l(t,a.cachePredicate))return n(t.id,`resolve`),t;for(let e of Object.keys(t.headers))e.startsWith(`x-axios-cache`)&&delete t.headers[e];let u=a.ttl||-1,d;if(a.interpretHeader){let r=e.headerInterpreter(t.headers,e.location);if(r===`dont cache`)return n(t.id,`resolve`),t;r!==`not enough headers`&&(typeof r==`number`?u=r:(u=r.cache,d=r.stale))}typeof u==`function`&&(u=await u(t));let p=m(t,s.data);if(a.etag||a.modifiedSince){if(p.meta!=null||(p.meta={}),p.meta.revalidation={},a.etag){let e=a.etag===!0?t.headers[o.ETag]:a.etag;e&&(p.meta.revalidation.etag=e)}a.modifiedSince&&(p.meta.revalidation.lastModified=a.modifiedSince===!0?t.headers[o.LastModified]||!0:a.modifiedSince.toUTCString())}if(a.vary!==!1&&t.headers[o.Vary]){let s=Array.isArray(a.vary)?a.vary:(0,r.parse)(t.headers[o.Vary]);if(Array.isArray(s))p.meta!=null||(p.meta={}),p.meta.vary=c(i.headers,s);else if(s===`*`)return await e.storage.set(t.id,{state:`stale`,createdAt:Date.now(),data:p,ttl:u},i),n(t.id,`resolve`),t}let h={state:`cached`,ttl:u,staleTtl:d,createdAt:Date.now(),data:p};return await e.storage.set(t.id,h,i),n(t.id,`resolve`),t},onRejected:async r=>{if(!r.isAxiosError||!r.config)throw r;let i=r.config,a=i.id,s=i.cache,c=r.response;if(!s||!a)throw r;if(!f(i.method,s.methods))throw await e.storage.remove(a,i),n(a,`reject`,r),r;let l=await e.storage.get(a,i);if(l.state!==`loading`||l.previous!==`stale`)throw(r.code!==`ERR_CANCELED`||r.code===`ERR_CANCELED`&&l.state!==`cached`)&&await e.storage.remove(a,i),r.code===`ERR_CANCELED`?n(a,`resolve`):n(a,`reject`,r),r;if(s.staleIfError){let n=String(c==null?void 0:c.headers[o.CacheControl]),u=n&&(0,t.parse)(n).staleIfError,d=typeof s.staleIfError==`function`?await s.staleIfError(c,l,r):s.staleIfError===!0&&u?u*1e3:s.staleIfError;if(d===!0||typeof d==`number`&&l.createdAt+d>Date.now()){await e.storage.set(a,{state:`stale`,createdAt:Date.now(),data:l.data},i);let t=e.waiting.get(a);return t&&(t.resolve(),e.waiting.delete(a)),{cached:!0,stale:!0,config:i,id:a,data:l.data.data,headers:l.data.headers,status:l.data.status,statusText:l.data.statusText}}}throw await e.storage.remove(a,i),n(a,`reject`,r),r}}}let v=e=>!!e&&!!e[`is-storage`];function y(e){var t;if((t=e.meta)!=null&&t.revalidation)return;let n=e.headers[o.XAxiosCacheEtag],r=e.headers[o.XAxiosCacheLastModified];(n||r)&&(e.meta!=null||(e.meta={}),e.meta.revalidation={},n&&(e.meta.revalidation.etag=n),r&&(e.meta.revalidation.lastModified=r===`use-cache-timestamp`||r),delete e.headers[o.XAxiosCacheEtag],delete e.headers[o.XAxiosCacheLastModified],delete e.headers[o.XAxiosCacheStaleIfError])}function b(e){var t;y(e.data);let n=e.data.headers,r=(t=e.data.meta)==null?void 0:t.revalidation;return o.ETag in n||o.LastModified in n||!!(r!=null&&r.etag||r!=null&&r.lastModified)}function x(e){return String(e.data.headers[o.CacheControl]).includes(`must-revalidate`)}function S(e){return b(e)?!0:e.state===`cached`&&e.staleTtl!==void 0&&Math.abs(Date.now()-(e.createdAt+e.ttl))<=e.staleTtl}function C(e){return e.ttl!==void 0&&e.createdAt+e.ttl<=Date.now()}let w={empty:0,"must-revalidate":1,stale:2,cached:3,loading:4};function T([,e],[,t]){let n=w[e.state]-w[t.state];return n===0?(e.createdAt||0)-(t.createdAt||0):n}function E(e,t){switch(e.state){case`loading`:return!1;case`empty`:case`must-revalidate`:return!0;case`cached`:return C(e)&&!S(e);case`stale`:return t!==void 0&&e.ttl!==void 0&&Date.now()>e.createdAt+e.ttl+t}}function D({set:e,find:t,remove:n,clear:r}){return{"is-storage":1,set:e,remove:n,clear:r,get:async(r,i)=>{let a=await t(r,i);if(!a)return{state:`empty`};if(a.state===`empty`||a.state===`loading`||a.state===`must-revalidate`)return a;if((a.state===`cached`||a.state===`stale`)&&y(a.data),a.state===`cached`){if(!C(a))return a;if(!S(a))return await n(r,i),{state:`empty`};if(a={state:`stale`,createdAt:a.createdAt,data:a.data,ttl:a.staleTtl===void 0?void 0:a.staleTtl+a.ttl},await e(r,a,i),x(a))return{...a,state:`must-revalidate`}}return!C(a)||b(a)?a:(await n(r,i),{state:`empty`})}}}let O=typeof structuredClone==`function`?structuredClone:e=>JSON.parse(JSON.stringify(e));function k(e=!1,t=3e5,n=1024,r=36e5){function i(){return Array.from(a.data.entries()).sort(T)}let a=D({set:(t,r)=>{if(n&&a.data.size>=n&&(a.cleanup(),a.data.size>=n)){for(let[e]of i())if(a.data.delete(e),a.data.size<n)break}a.data.set(t,e===`double`?O(r):r)},remove:e=>{a.data.delete(e)},find:t=>{let n=a.data.get(t);return e&&n!==void 0?O(n):n},clear:()=>{a.data.clear()}});return a.data=new Map,a.cleanup=()=>{for(let[e,t]of i())E(t,r)&&a.data.delete(e)},t&&(a.cleaner=setInterval(a.cleanup,t),typeof a.cleaner==`object`&&`unref`in a.cleaner&&a.cleaner.unref()),a}let A=/^\/|\/$/g;function j(e){return(t,n)=>{if(t.id)return t.id;let r=e(t,n);return typeof r==`string`||typeof r==`number`?`${r}`:`${(0,i.hash)(r)}`}}let M=j(({baseURL:e,url:t,method:n,params:r,data:i},a)=>(e=e===void 0?``:e.replace(A,``),t=t===void 0?``:t.replace(A,``),n=n===void 0?`get`:n.toLowerCase(),{url:e+(e&&t?`/`:``)+t,params:r,method:n,data:i,...a}));function N(e,t={}){var n,r,i,a,o,c,l,u,d,f,p;let m=e;if(m.defaults.cache)throw Error(`setupCache() should be called only once`);if(m.location=typeof window>`u`?`server`:`client`,m.storage=t.storage||k(),!v(m.storage))throw Error(`Use buildStorage() function`);return m.waiting=t.waiting||new Map,m.generateKey=t.generateKey||M,m.headerInterpreter=t.headerInterpreter||s,m.requestInterceptor=t.requestInterceptor||h(m),m.responseInterceptor=t.responseInterceptor||_(m),m.debug=t.debug||function(){},m.defaults.cache={enabled:(n=t.enabled)==null||n,update:t.update||{},ttl:(r=t.ttl)==null?3e5:r,methods:t.methods||[`get`,`head`],cachePredicate:t.cachePredicate||{statusCheck:e=>[200,203,300,301,302,404,405,410,414,501].includes(e)},etag:(i=t.etag)==null||i,modifiedSince:(a=t.modifiedSince)==null?t.etag===!1:a,interpretHeader:(o=t.interpretHeader)==null||o,cacheTakeover:(c=t.cacheTakeover)==null||c,staleIfError:(l=t.staleIfError)==null||l,override:(u=t.override)!=null&&u,hydrate:(d=t.hydrate)==null?void 0:d,vary:(f=t.vary)==null||f},((p=t.register)==null||p)&&(m.interceptors.request.use(m.requestInterceptor.onFulfilled,m.requestInterceptor.onRejected),m.interceptors.response.use(m.responseInterceptor.onFulfilled,m.responseInterceptor.onRejected)),m}function P(e,t=`axios-cache-`,n=36e5){function r(n,r){e.setItem(t+n,JSON.stringify(r))}return D({clear:()=>{for(let n in e)n.startsWith(t)&&e.removeItem(n)},find:n=>{let r=e.getItem(t+n);return r?JSON.parse(r):void 0},remove:n=>{e.removeItem(t+n)},set:(i,o)=>{let s=a.Result.try(r,i,o);if(s.ok)return;if(!F(s.error))throw s.error;let c=Object.entries(e).filter(([e])=>e.startsWith(t)).map(([e,t])=>[e,JSON.parse(t)]);for(let[t,r]of c)E(r,n)&&e.removeItem(t);let l=a.Result.try(r,i,o);if(l.ok)return;if(!F(l.error))throw l.error;let u=c.sort((e,t)=>(e[1].createdAt||0)-(t[1].createdAt||0));for(let t of u){e.removeItem(t[0]);let n=a.Result.try(r,i,o);if(n.ok)return;if(!F(n.error))throw n.error}}})}function F(e){var t;return(e instanceof DOMException||typeof e==`object`&&!!e&&`name`in e&&((t=e.constructor)==null?void 0:t.name)===`DOMException`)&&`name`in e&&(e.name===`QuotaExceededError`||e.name===`NS_ERROR_DOM_QUOTA_REACHED`||e.name===`QUOTA_EXCEEDED_ERR`)}e.Header=o,e.buildKeyGenerator=j,e.buildMemoryStorage=k,e.buildStorage=D,e.buildWebStorage=P,e.canRemoveStorageEntry=E,e.canStale=S,e.createCacheResponse=m,e.createValidateStatus=d,e.defaultHeaderInterpreter=s,e.defaultKeyGenerator=M,e.defaultRequestInterceptor=h,e.defaultResponseInterceptor=_,e.isExpired=C,e.isMethodIn=f,e.isStorage=v,e.mustRevalidate=x,e.regexOrStringMatch=u,e.setupCache=N,e.storageEntriesSorter=T,e.testCachePredicate=l,e.updateCache=g,e.updateStaleRequest=p});
//# sourceMappingURL=index.bundle.js.map