From e9d64695646a8a67679ceaeea6e5195ec5c58471 Mon Sep 17 00:00:00 2001 From: arthurfiorette Date: Tue, 14 Oct 2025 14:22:39 +0000 Subject: [PATCH] Deploy docs for latest --- 404.html | 6 +- assets/{app.BvQkxPcN.js => app.DeV0lJp_.js} | 2 +- ...jatY.js => VPAlgoliaSearchBox.B0RF9aTI.js} | 2 +- .../{theme.Bptbx08c.js => theme.DpzYL1kV.js} | 4 +- assets/chunks/ui-custom.C2yHb_f-.js | 1 - assets/chunks/ui-custom.D0LrQO1W.js | 1 + ...g.md.C00Phdwe.js => config.md.CScI-ExK.js} | 2 +- ...dwe.lean.js => config.md.CScI-ExK.lean.js} | 2 +- ...> config_request-specifics.md.B6wvTu18.js} | 9 ++- ...fig_request-specifics.md.B6wvTu18.lean.js} | 2 +- ... => config_response-object.md.8qsMplLz.js} | 2 +- ...onfig_response-object.md.8qsMplLz.lean.js} | 2 +- ....js => generated_benchmark.md.DZpgBPX8.js} | 2 +- ...> generated_benchmark.md.DZpgBPX8.lean.js} | 2 +- ...de.md.d-o1ySQc.js => guide.md.Ch_3Blm4.js} | 2 +- ...ySQc.lean.js => guide.md.Ch_3Blm4.lean.js} | 2 +- ...rG0.js => guide_comparison.md.CJjCfmUB.js} | 2 +- ...s => guide_comparison.md.CJjCfmUB.lean.js} | 2 +- ...7a0y.js => guide_debugging.md.UDhonkLW.js} | 2 +- ...js => guide_debugging.md.UDhonkLW.lean.js} | 2 +- ...s => guide_getting-started.md.X7rsi6EE.js} | 4 +- ...guide_getting-started.md.X7rsi6EE.lean.js} | 2 +- ...R.js => guide_interceptors.md.B6YE2URo.js} | 2 +- ...=> guide_interceptors.md.B6YE2URo.lean.js} | 2 +- ...> guide_invalidating-cache.md.D69gSzWZ.js} | 2 +- ...de_invalidating-cache.md.D69gSzWZ.lean.js} | 2 +- ...smi.js => guide_request-id.md.BqDUl7YS.js} | 2 +- ...s => guide_request-id.md.BqDUl7YS.lean.js} | 2 +- ...xY9uE.js => guide_storages.md.mDfw43wo.js} | 8 +-- ....js => guide_storages.md.mDfw43wo.lean.js} | 2 +- ...ex.md.DLe--HIQ.js => index.md.Cj5fvPtr.js} | 2 +- ...-HIQ.lean.js => index.md.Cj5fvPtr.lean.js} | 2 +- ...IPz.js => others_changelog.md.DFW69MVv.js} | 2 +- ...s => others_changelog.md.DFW69MVv.lean.js} | 2 +- ...ZBZ9K.js => others_license.md.Ceq08JKB.js} | 2 +- ....js => others_license.md.Ceq08JKB.lean.js} | 2 +- ...{style.BaFQwPzd.css => style.DjhVb9s0.css} | 2 +- config.html | 14 ++--- config/request-specifics.html | 21 ++++--- config/request-specifics.md | 53 +++++++++++------ config/response-object.html | 14 ++--- generated/benchmark.html | 12 ++-- guide.html | 12 ++-- guide/comparison.html | 14 ++--- guide/comparison.md | 2 - guide/debugging.html | 14 ++--- guide/getting-started.html | 16 ++--- guide/interceptors.html | 14 ++--- guide/invalidating-cache.html | 14 ++--- guide/request-id.html | 14 ++--- guide/storages.html | 20 +++---- guide/storages.md | 4 +- hashmap.json | 2 +- index.html | 12 ++-- llms-full.txt | 59 +++++++++++-------- others/changelog.html | 12 ++-- others/license.html | 12 ++-- 57 files changed, 232 insertions(+), 196 deletions(-) rename assets/{app.BvQkxPcN.js => app.DeV0lJp_.js} (95%) rename assets/chunks/{VPAlgoliaSearchBox.BLTIjatY.js => VPAlgoliaSearchBox.B0RF9aTI.js} (99%) rename assets/chunks/{theme.Bptbx08c.js => theme.DpzYL1kV.js} (93%) delete mode 100644 assets/chunks/ui-custom.C2yHb_f-.js create mode 100644 assets/chunks/ui-custom.D0LrQO1W.js rename assets/{config.md.C00Phdwe.js => config.md.CScI-ExK.js} (99%) rename assets/{config.md.C00Phdwe.lean.js => config.md.CScI-ExK.lean.js} (96%) rename assets/{config_request-specifics.md.31Q7kimq.js => config_request-specifics.md.B6wvTu18.js} (85%) rename assets/{config_request-specifics.md.31Q7kimq.lean.js => config_request-specifics.md.B6wvTu18.lean.js} (89%) rename assets/{config_response-object.md.U7zYb2Gi.js => config_response-object.md.8qsMplLz.js} (98%) rename assets/{config_response-object.md.U7zYb2Gi.lean.js => config_response-object.md.8qsMplLz.lean.js} (85%) rename assets/{generated_benchmark.md.CI-K7IUa.js => generated_benchmark.md.DZpgBPX8.js} (92%) rename assets/{generated_benchmark.md.CI-K7IUa.lean.js => generated_benchmark.md.DZpgBPX8.lean.js} (70%) rename assets/{guide.md.d-o1ySQc.js => guide.md.Ch_3Blm4.js} (98%) rename assets/{guide.md.d-o1ySQc.lean.js => guide.md.Ch_3Blm4.lean.js} (84%) rename assets/{guide_comparison.md.DU5b-rG0.js => guide_comparison.md.CJjCfmUB.js} (99%) rename assets/{guide_comparison.md.DU5b-rG0.lean.js => guide_comparison.md.CJjCfmUB.lean.js} (85%) rename assets/{guide_debugging.md.CVFh7a0y.js => guide_debugging.md.UDhonkLW.js} (98%) rename assets/{guide_debugging.md.CVFh7a0y.lean.js => guide_debugging.md.UDhonkLW.lean.js} (85%) rename assets/{guide_getting-started.md.Ds5NdnOh.js => guide_getting-started.md.X7rsi6EE.js} (96%) rename assets/{guide_getting-started.md.Ds5NdnOh.lean.js => guide_getting-started.md.X7rsi6EE.lean.js} (85%) rename assets/{guide_interceptors.md.La_rJDFR.js => guide_interceptors.md.B6YE2URo.js} (99%) rename assets/{guide_interceptors.md.La_rJDFR.lean.js => guide_interceptors.md.B6YE2URo.lean.js} (85%) rename assets/{guide_invalidating-cache.md.Bckt7x3W.js => guide_invalidating-cache.md.D69gSzWZ.js} (99%) rename assets/{guide_invalidating-cache.md.Bckt7x3W.lean.js => guide_invalidating-cache.md.D69gSzWZ.lean.js} (86%) rename assets/{guide_request-id.md.DHclQsmi.js => guide_request-id.md.BqDUl7YS.js} (98%) rename assets/{guide_request-id.md.DHclQsmi.lean.js => guide_request-id.md.BqDUl7YS.lean.js} (85%) rename assets/{guide_storages.md.CLMxY9uE.js => guide_storages.md.mDfw43wo.js} (98%) rename assets/{guide_storages.md.CLMxY9uE.lean.js => guide_storages.md.mDfw43wo.lean.js} (84%) rename assets/{index.md.DLe--HIQ.js => index.md.Cj5fvPtr.js} (94%) rename assets/{index.md.DLe--HIQ.lean.js => index.md.Cj5fvPtr.lean.js} (94%) rename assets/{others_changelog.md.DH3AxIPz.js => others_changelog.md.DFW69MVv.js} (99%) rename assets/{others_changelog.md.DH3AxIPz.lean.js => others_changelog.md.DFW69MVv.lean.js} (85%) rename assets/{others_license.md._FyZBZ9K.js => others_license.md.Ceq08JKB.js} (96%) rename assets/{others_license.md._FyZBZ9K.lean.js => others_license.md.Ceq08JKB.lean.js} (96%) rename assets/{style.BaFQwPzd.css => style.DjhVb9s0.css} (70%) diff --git a/404.html b/404.html index c58b88f..2aff3df 100644 --- a/404.html +++ b/404.html @@ -6,10 +6,10 @@ 404 | Axios Cache Interceptor - + - + @@ -49,7 +49,7 @@
- + \ No newline at end of file diff --git a/assets/app.BvQkxPcN.js b/assets/app.DeV0lJp_.js similarity index 95% rename from assets/app.BvQkxPcN.js rename to assets/app.DeV0lJp_.js index 16b93f7..09ef953 100644 --- a/assets/app.BvQkxPcN.js +++ b/assets/app.DeV0lJp_.js @@ -1 +1 @@ -import{t as p}from"./chunks/theme.Bptbx08c.js";import{U as s,a2 as i,a3 as u,a4 as c,a5 as l,a6 as f,a7 as d,a8 as m,a9 as h,aa as g,ab as A,d as v,u as y,v as C,s as P,ac as b,ad as w,ae as E,af as R}from"./chunks/framework.CnuuF8_c.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=y();return C(()=>{P(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&b(),w(),E(),n.setup&&n.setup(),()=>R(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=_(),a=D();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function D(){return A(S)}function _(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp}; +import{t as p}from"./chunks/theme.DpzYL1kV.js";import{U as s,a2 as i,a3 as u,a4 as c,a5 as l,a6 as f,a7 as d,a8 as m,a9 as h,aa as g,ab as A,d as v,u as y,v as C,s as P,ac as b,ad as w,ae as E,af as R}from"./chunks/framework.CnuuF8_c.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=y();return C(()=>{P(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&b(),w(),E(),n.setup&&n.setup(),()=>R(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=_(),a=D();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function D(){return A(S)}function _(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp}; diff --git a/assets/chunks/VPAlgoliaSearchBox.BLTIjatY.js b/assets/chunks/VPAlgoliaSearchBox.B0RF9aTI.js similarity index 99% rename from assets/chunks/VPAlgoliaSearchBox.BLTIjatY.js rename to assets/chunks/VPAlgoliaSearchBox.B0RF9aTI.js index e14ba17..35cd86a 100644 --- a/assets/chunks/VPAlgoliaSearchBox.BLTIjatY.js +++ b/assets/chunks/VPAlgoliaSearchBox.B0RF9aTI.js @@ -1,4 +1,4 @@ -import{d as pi,ah as vi,L as hi,v as di,q as yi,R as _i,c as gi,o as bi}from"./framework.CnuuF8_c.js";import{u as Si}from"./theme.Bptbx08c.js";/*! @docsearch/js 3.8.2 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */function Hr(){return Hr=Object.assign?Object.assign.bind():function(e){for(var t=1;t2&&(a.children=arguments.length>3?Wt.call(arguments,2):r),typeof e=="function"&&e.defaultProps!=null)for(i in e.defaultProps)a[i]===void 0&&(a[i]=e.defaultProps[i]);return Et(e,a,n,o,null)}function Et(e,t,r,n,o){var i={type:e,props:t,key:r,ref:n,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:o??++So,__i:-1,__u:0};return o==null&&H.vnode!=null&&H.vnode(i),i}function Re(e){return e.children}function Ce(e,t){this.props=e,this.context=t}function ct(e,t){if(t==null)return e.__?ct(e.__,e.__i+1):null;for(var r;tt&&Ge.sort(Ur));dr.__r=0}function Io(e,t,r,n,o,i,a,c,f,m,b){var l,v,s,S,g,y=n&&n.__k||Eo,_=t.length;for(r.__d=f,function(h,p,d){var P,E,C,N,I,x=p.length,k=d.length,U=k,z=0;for(h.__k=[],P=0;P0?Et(E.type,E.props,E.key,E.ref?E.ref:null,E.__v):E).__=h,E.__b=h.__b+1,C=null,(I=E.__i=wi(E,d,N,U))!==-1&&(U--,(C=d[I])&&(C.__u|=131072)),C==null||C.__v===null?(I==-1&&z--,typeof E.type!="function"&&(E.__u|=65536)):I!==N&&(I==N-1?z--:I==N+1?z++:(I>N?z--:z++,E.__u|=65536))):E=h.__k[P]=null;if(U)for(P=0;P(f==null||131072&f.__u?0:1))for(;a>=0||c=0){if((f=t[a])&&!(131072&f.__u)&&o==f.key&&i===f.type)return a;a--}if(c2&&(c.children=arguments.length>3?Wt.call(arguments,2):r),Et(e.type,c,n||e.key,o||e.ref,null)}Wt=Eo.slice,H={__e:function(e,t,r,n){for(var o,i,a;t=t.__;)if((o=t.__c)&&!o.__)try{if((i=o.constructor)&&i.getDerivedStateFromError!=null&&(o.setState(i.getDerivedStateFromError(e)),a=o.__d),o.componentDidCatch!=null&&(o.componentDidCatch(e,n||{}),a=o.__d),a)return o.__E=o}catch(c){e=c}throw e}},So=0,Ce.prototype.setState=function(e,t){var r;r=this.__s!=null&&this.__s!==this.state?this.__s:this.__s=Te({},this.state),typeof e=="function"&&(e=e(Te({},r),this.props)),e&&Te(r,e),e!=null&&this.__v&&(t&&this._sb.push(t),Vr(this))},Ce.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),Vr(this))},Ce.prototype.render=Re,Ge=[],Oo=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,Ur=function(e,t){return e.__v.__b-t.__v.__b},dr.__r=0,en=0,Fr=bn(!1),Br=bn(!0),wo=0;var Be,Z,Dr,Sn,lt=0,Ao=[],Y=H,On=Y.__b,wn=Y.__r,En=Y.diffed,jn=Y.__c,Pn=Y.unmount,In=Y.__;function st(e,t){Y.__h&&Y.__h(Z,e,lt||t),lt=0;var r=Z.__H||(Z.__H={__:[],__h:[]});return e>=r.__.length&&r.__.push({}),r.__[e]}function zt(e){return lt=1,nn(Ho,e)}function nn(e,t,r){var n=st(Be++,2);if(n.t=e,!n.__c&&(n.__=[r?r(t):Ho(void 0,t),function(c){var f=n.__N?n.__N[0]:n.__[0],m=n.t(f,c);f!==m&&(n.__N=[m,n.__[1]],n.__c.setState({}))}],n.__c=Z,!Z.u)){var o=function(c,f,m){if(!n.__c.__H)return!0;var b=n.__c.__H.__.filter(function(v){return!!v.__c});if(b.every(function(v){return!v.__N}))return!i||i.call(this,c,f,m);var l=!1;return b.forEach(function(v){if(v.__N){var s=v.__[0];v.__=v.__N,v.__N=void 0,s!==v.__[0]&&(l=!0)}}),!(!l&&n.__c.props===c)&&(!i||i.call(this,c,f,m))};Z.u=!0;var i=Z.shouldComponentUpdate,a=Z.componentWillUpdate;Z.componentWillUpdate=function(c,f,m){if(this.__e){var b=i;i=void 0,o(c,f,m),i=b}a&&a.call(this,c,f,m)},Z.shouldComponentUpdate=o}return n.__N||n.__}function Jt(e,t){var r=st(Be++,3);!Y.__s&&on(r.__H,t)&&(r.__=e,r.i=t,Z.__H.__h.push(r))}function Qt(e,t){var r=st(Be++,4);!Y.__s&&on(r.__H,t)&&(r.__=e,r.i=t,Z.__h.push(r))}function No(e){return lt=5,_r(function(){return{current:e}},[])}function To(e,t,r){lt=6,Qt(function(){return typeof e=="function"?(e(t()),function(){return e(null)}):e?(e.current=t(),function(){return e.current=null}):void 0},r==null?r:r.concat(e))}function _r(e,t){var r=st(Be++,7);return on(r.__H,t)&&(r.__=e(),r.__H=t,r.__h=e),r.__}function Ro(e,t){return lt=8,_r(function(){return e},t)}function Lo(e){var t=Z.context[e.__c],r=st(Be++,9);return r.c=e,t?(r.__==null&&(r.__=!0,t.sub(Z)),t.props.value):e.__}function qo(e,t){Y.useDebugValue&&Y.useDebugValue(t?t(e):e)}function Mo(){var e=st(Be++,11);if(!e.__){for(var t=Z.__v;t!==null&&!t.__m&&t.__!==null;)t=t.__;var r=t.__m||(t.__m=[0,0]);e.__="P"+r[0]+"-"+r[1]++}return e.__}function Ii(){for(var e;e=Ao.shift();)if(e.__P&&e.__H)try{e.__H.__h.forEach(mr),e.__H.__h.forEach(Kr),e.__H.__h=[]}catch(t){e.__H.__h=[],Y.__e(t,e.__v)}}Y.__b=function(e){Z=null,On&&On(e)},Y.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),In&&In(e,t)},Y.__r=function(e){wn&&wn(e),Be=0;var t=(Z=e.__c).__H;t&&(Dr===Z?(t.__h=[],Z.__h=[],t.__.forEach(function(r){r.__N&&(r.__=r.__N),r.i=r.__N=void 0})):(t.__h.forEach(mr),t.__h.forEach(Kr),t.__h=[],Be=0)),Dr=Z},Y.diffed=function(e){En&&En(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(Ao.push(t)!==1&&Sn===Y.requestAnimationFrame||((Sn=Y.requestAnimationFrame)||ki)(Ii)),t.__H.__.forEach(function(r){r.i&&(r.__H=r.i),r.i=void 0})),Dr=Z=null},Y.__c=function(e,t){t.some(function(r){try{r.__h.forEach(mr),r.__h=r.__h.filter(function(n){return!n.__||Kr(n)})}catch(n){t.some(function(o){o.__h&&(o.__h=[])}),t=[],Y.__e(n,r.__v)}}),jn&&jn(e,t)},Y.unmount=function(e){Pn&&Pn(e);var t,r=e.__c;r&&r.__H&&(r.__H.__.forEach(function(n){try{mr(n)}catch(o){t=o}}),r.__H=void 0,t&&Y.__e(t,r.__v))};var kn=typeof requestAnimationFrame=="function";function ki(e){var t,r=function(){clearTimeout(n),kn&&cancelAnimationFrame(t),setTimeout(e)},n=setTimeout(r,100);kn&&(t=requestAnimationFrame(r))}function mr(e){var t=Z,r=e.__c;typeof r=="function"&&(e.__c=void 0,r()),Z=t}function Kr(e){var t=Z;e.__c=e.__(),Z=t}function on(e,t){return!e||e.length!==t.length||t.some(function(r,n){return r!==e[n]})}function Ho(e,t){return typeof t=="function"?t(e):t}function Wr(e,t){for(var r in e)if(r!=="__source"&&!(r in t))return!0;for(var n in t)if(n!=="__source"&&e[n]!==t[n])return!0;return!1}function zr(e,t){this.props=e,this.context=t}(zr.prototype=new Ce).isPureReactComponent=!0,zr.prototype.shouldComponentUpdate=function(e,t){return Wr(this.props,e)||Wr(this.state,t)};var Dn=H.__b;H.__b=function(e){e.type&&e.type.__f&&e.ref&&(e.props.ref=e.ref,e.ref=null),Dn&&Dn(e)};var Di=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.forward_ref")||3911,Cn=function(e,t){return e==null?null:Le(Le(e).map(t))},Ci={map:Cn,forEach:Cn,count:function(e){return e?Le(e).length:0},only:function(e){var t=Le(e);if(t.length!==1)throw"Children.only";return t[0]},toArray:Le},xi=H.__e;H.__e=function(e,t,r,n){if(e.then){for(var o,i=t;i=i.__;)if((o=i.__c)&&o.__c)return t.__e==null&&(t.__e=r.__e,t.__k=r.__k),o.__c(e,t)}xi(e,t,r,n)};var xn=H.unmount;function Uo(e,t,r){return e&&(e.__c&&e.__c.__H&&(e.__c.__H.__.forEach(function(n){typeof n.__c=="function"&&n.__c()}),e.__c.__H=null),(e=function(n,o){for(var i in o)n[i]=o[i];return n}({},e)).__c!=null&&(e.__c.__P===r&&(e.__c.__P=t),e.__c=null),e.__k=e.__k&&e.__k.map(function(n){return Uo(n,t,r)})),e}function Fo(e,t,r){return e&&r&&(e.__v=null,e.__k=e.__k&&e.__k.map(function(n){return Fo(n,t,r)}),e.__c&&e.__c.__P===t&&(e.__e&&r.appendChild(e.__e),e.__c.__e=!0,e.__c.__P=r)),e}function pr(){this.__u=0,this.t=null,this.__b=null}function Bo(e){var t=e.__.__c;return t&&t.__a&&t.__a(e)}function Ot(){this.u=null,this.o=null}H.unmount=function(e){var t=e.__c;t&&t.__R&&t.__R(),t&&32&e.__u&&(e.type=null),xn&&xn(e)},(pr.prototype=new Ce).__c=function(e,t){var r=t.__c,n=this;n.t==null&&(n.t=[]),n.t.push(r);var o=Bo(n.__v),i=!1,a=function(){i||(i=!0,r.__R=null,o?o(c):c())};r.__R=a;var c=function(){if(!--n.__u){if(n.state.__a){var f=n.state.__a;n.__v.__k[0]=Fo(f,f.__c.__P,f.__c.__O)}var m;for(n.setState({__a:n.__b=null});m=n.t.pop();)m.forceUpdate()}};n.__u++||32&t.__u||n.setState({__a:n.__b=n.__v.__k[0]}),e.then(a,a)},pr.prototype.componentWillUnmount=function(){this.t=[]},pr.prototype.render=function(e,t){if(this.__b){if(this.__v.__k){var r=document.createElement("div"),n=this.__v.__k[0].__c;this.__v.__k[0]=Uo(this.__b,r,n.__O=n.__P)}this.__b=null}var o=t.__a&&De(Re,null,e.fallback);return o&&(o.__u&=-33),[De(Re,null,t.__a?null:e.children),o]};var An=function(e,t,r){if(++r[1]===r[0]&&e.o.delete(t),e.props.revealOrder&&(e.props.revealOrder[0]!=="t"||!e.o.size))for(r=e.u;r;){for(;r.length>3;)r.pop()();if(r[1]>>1,1),t.i.removeChild(n)}}),Ft(De(Ai,{context:t.context},e.__v),t.l)}function Vo(e,t){var r=De(Ni,{__v:e,i:t});return r.containerInfo=t,r}(Ot.prototype=new Ce).__a=function(e){var t=this,r=Bo(t.__v),n=t.o.get(e);return n[0]++,function(o){var i=function(){t.props.revealOrder?(n.push(o),An(t,e,n)):o()};r?r(i):i()}},Ot.prototype.render=function(e){this.u=null,this.o=new Map;var t=Le(e.children);e.revealOrder&&e.revealOrder[0]==="b"&&t.reverse();for(var r=t.length;r--;)this.o.set(t[r],this.u=[1,0,this.u]);return e.children},Ot.prototype.componentDidUpdate=Ot.prototype.componentDidMount=function(){var e=this;this.o.forEach(function(t,r){An(e,r,t)})};var Ko=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.element")||60103,Ti=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,Ri=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,Li=/[A-Z0-9]/g,qi=typeof document<"u",Mi=function(e){return(typeof Symbol<"u"&&A(Symbol())=="symbol"?/fil|che|rad/:/fil|che|ra/).test(e)};function Wo(e,t,r){return t.__k==null&&(t.textContent=""),Ft(e,t),typeof r=="function"&&r(),e?e.__c:null}Ce.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(e){Object.defineProperty(Ce.prototype,e,{configurable:!0,get:function(){return this["UNSAFE_"+e]},set:function(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,value:t})}})});var Nn=H.event;function Hi(){}function Ui(){return this.cancelBubble}function Fi(){return this.defaultPrevented}H.event=function(e){return Nn&&(e=Nn(e)),e.persist=Hi,e.isPropagationStopped=Ui,e.isDefaultPrevented=Fi,e.nativeEvent=e};var an,Bi={enumerable:!1,configurable:!0,get:function(){return this.class}},Tn=H.vnode;H.vnode=function(e){typeof e.type=="string"&&function(t){var r=t.props,n=t.type,o={},i=n.indexOf("-")===-1;for(var a in r){var c=r[a];if(!(a==="value"&&"defaultValue"in r&&c==null||qi&&a==="children"&&n==="noscript"||a==="class"||a==="className")){var f=a.toLowerCase();a==="defaultValue"&&"value"in r&&r.value==null?a="value":a==="download"&&c===!0?c="":f==="translate"&&c==="no"?c=!1:f[0]==="o"&&f[1]==="n"?f==="ondoubleclick"?a="ondblclick":f!=="onchange"||n!=="input"&&n!=="textarea"||Mi(r.type)?f==="onfocus"?a="onfocusin":f==="onblur"?a="onfocusout":Ri.test(a)&&(a=f):f=a="oninput":i&&Ti.test(a)?a=a.replace(Li,"-$&").toLowerCase():c===null&&(c=void 0),f==="oninput"&&o[a=f]&&(a="oninputCapture"),o[a]=c}}n=="select"&&o.multiple&&Array.isArray(o.value)&&(o.value=Le(r.children).forEach(function(m){m.props.selected=o.value.indexOf(m.props.value)!=-1})),n=="select"&&o.defaultValue!=null&&(o.value=Le(r.children).forEach(function(m){m.props.selected=o.multiple?o.defaultValue.indexOf(m.props.value)!=-1:o.defaultValue==m.props.value})),r.class&&!r.className?(o.class=r.class,Object.defineProperty(o,"className",Bi)):(r.className&&!r.class||r.class&&r.className)&&(o.class=o.className=r.className),t.props=o}(e),e.$$typeof=Ko,Tn&&Tn(e)};var Rn=H.__r;H.__r=function(e){Rn&&Rn(e),an=e.__c};var Ln=H.diffed;H.diffed=function(e){Ln&&Ln(e);var t=e.props,r=e.__e;r!=null&&e.type==="textarea"&&"value"in t&&t.value!==r.value&&(r.value=t.value==null?"":t.value),an=null};var Vi={ReactCurrentDispatcher:{current:{readContext:function(e){return an.__n[e.__c].props.value},useCallback:Ro,useContext:Lo,useDebugValue:qo,useDeferredValue:Jo,useEffect:Jt,useId:Mo,useImperativeHandle:To,useInsertionEffect:$o,useLayoutEffect:Qt,useMemo:_r,useReducer:nn,useRef:No,useState:zt,useSyncExternalStore:Zo,useTransition:Qo}}};function rr(e){return!!e&&e.$$typeof===Ko}function zo(e){e()}function Jo(e){return e}function Qo(){return[!1,zo]}var $o=Qt;function Zo(e,t){var r=t(),n=zt({h:{__:r,v:t}}),o=n[0].h,i=n[1];return Qt(function(){o.__=r,o.v=t,Cr(o)&&i({h:o})},[e,r,t]),Jt(function(){return Cr(o)&&i({h:o}),e(function(){Cr(o)&&i({h:o})})},[e]),r}function Cr(e){var t,r,n=e.v,o=e.__;try{var i=n();return!((t=o)===(r=i)&&(t!==0||1/t==1/r)||t!=t&&r!=r)}catch{return!0}}var u={useState:zt,useId:Mo,useReducer:nn,useEffect:Jt,useLayoutEffect:Qt,useInsertionEffect:$o,useTransition:Qo,useDeferredValue:Jo,useSyncExternalStore:Zo,startTransition:zo,useRef:No,useImperativeHandle:To,useMemo:_r,useCallback:Ro,useContext:Lo,useDebugValue:qo,version:"18.3.1",Children:Ci,render:Wo,hydrate:function(e,t,r){return xo(e,t),typeof r=="function"&&r(),e?e.__c:null},unmountComponentAtNode:function(e){return!!e.__k&&(Ft(null,e),!0)},createPortal:Vo,createElement:De,createContext:function(e,t){var r={__c:t="__cC"+wo++,__:e,Consumer:function(n,o){return n.children(o)},Provider:function(n){var o,i;return this.getChildContext||(o=new Set,(i={})[t]=this,this.getChildContext=function(){return i},this.componentWillUnmount=function(){o=null},this.shouldComponentUpdate=function(a){this.props.value!==a.value&&o.forEach(function(c){c.__e=!0,Vr(c)})},this.sub=function(a){o.add(a);var c=a.componentWillUnmount;a.componentWillUnmount=function(){o&&o.delete(a),c&&c.call(a)}}),n.children}};return r.Provider.__=r.Consumer.contextType=r},createFactory:function(e){return De.bind(null,e)},cloneElement:function(e){return rr(e)?Pi.apply(null,arguments):e},createRef:function(){return{current:null}},Fragment:Re,isValidElement:rr,isElement:rr,isFragment:function(e){return rr(e)&&e.type===Re},isMemo:function(e){return!!e&&!!e.displayName&&(typeof e.displayName=="string"||e.displayName instanceof String)&&e.displayName.startsWith("Memo(")},findDOMNode:function(e){return e&&(e.base||e.nodeType===1&&e)||null},Component:Ce,PureComponent:zr,memo:function(e,t){function r(o){var i=this.props.ref,a=i==o.ref;return!a&&i&&(i.call?i(null):i.current=null),t?!t(this.props,o)||!a:Wr(this.props,o)}function n(o){return this.shouldComponentUpdate=r,De(e,o)}return n.displayName="Memo("+(e.displayName||e.name)+")",n.prototype.isReactComponent=!0,n.__f=!0,n},forwardRef:function(e){function t(r){if(!("ref"in r))return e(r,null);var n=r.ref;delete r.ref;var o=e(r,n);return r.ref=n,o}return t.$$typeof=Di,t.render=t,t.prototype.isReactComponent=t.__f=!0,t.displayName="ForwardRef("+(e.displayName||e.name)+")",t},flushSync:function(e,t){return e(t)},unstable_batchedUpdates:function(e,t){return e(t)},StrictMode:Re,Suspense:pr,SuspenseList:Ot,lazy:function(e){var t,r,n;function o(i){if(t||(t=e()).then(function(a){r=a.default||a},function(a){n=a}),n)throw n;if(!r)throw t;return De(r,i)}return o.displayName="Lazy",o.__f=!0,o},__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:Vi};function Jr(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r=0;--R){var D=this.tryEntries[R],L=D.completion;if(D.tryLoc==="root")return j("end");if(D.tryLoc<=this.prev){var W=n.call(D,"catchLoc"),K=n.call(D,"finallyLoc");if(W&&K){if(this.prev=0;--j){var R=this.tryEntries[j];if(R.tryLoc<=this.prev&&n.call(R,"finallyLoc")&&this.prev=0;--w){var j=this.tryEntries[w];if(j.finallyLoc===O)return this.complete(j.completion,j.afterLoc),z(j),y}},catch:function(O){for(var w=this.tryEntries.length-1;w>=0;--w){var j=this.tryEntries[w];if(j.tryLoc===O){var R=j.completion;if(R.type==="throw"){var D=R.arg;z(j)}return D}}throw Error("illegal catch attempt")},delegateYield:function(O,w,j){return this.delegate={iterator:oe(O),resultName:w,nextLoc:j},this.method==="next"&&(this.arg=e),y}},t}function Vt(e,t){return Vt=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,n){return r.__proto__=n,r},Vt(e,t)}function he(e,t){return function(r){if(Array.isArray(r))return r}(e)||function(r,n){var o=r==null?null:typeof Symbol<"u"&&r[Symbol.iterator]||r["@@iterator"];if(o!=null){var i,a,c,f,m=[],b=!0,l=!1;try{if(c=(o=o.call(r)).next,n===0){if(Object(o)!==o)return;b=!1}else for(;!(b=(i=c.call(o)).done)&&(m.push(i.value),m.length!==n);b=!0);}catch(v){l=!0,a=v}finally{try{if(!b&&o.return!=null&&(f=o.return(),Object(f)!==f))return}finally{if(l)throw a}}return m}}(e,t)||Go(e,t)||function(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +import{d as pi,ah as vi,L as hi,v as di,q as yi,R as _i,c as gi,o as bi}from"./framework.CnuuF8_c.js";import{u as Si}from"./theme.DpzYL1kV.js";/*! @docsearch/js 3.8.2 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */function Hr(){return Hr=Object.assign?Object.assign.bind():function(e){for(var t=1;t2&&(a.children=arguments.length>3?Wt.call(arguments,2):r),typeof e=="function"&&e.defaultProps!=null)for(i in e.defaultProps)a[i]===void 0&&(a[i]=e.defaultProps[i]);return Et(e,a,n,o,null)}function Et(e,t,r,n,o){var i={type:e,props:t,key:r,ref:n,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:o??++So,__i:-1,__u:0};return o==null&&H.vnode!=null&&H.vnode(i),i}function Re(e){return e.children}function Ce(e,t){this.props=e,this.context=t}function ct(e,t){if(t==null)return e.__?ct(e.__,e.__i+1):null;for(var r;tt&&Ge.sort(Ur));dr.__r=0}function Io(e,t,r,n,o,i,a,c,f,m,b){var l,v,s,S,g,y=n&&n.__k||Eo,_=t.length;for(r.__d=f,function(h,p,d){var P,E,C,N,I,x=p.length,k=d.length,U=k,z=0;for(h.__k=[],P=0;P0?Et(E.type,E.props,E.key,E.ref?E.ref:null,E.__v):E).__=h,E.__b=h.__b+1,C=null,(I=E.__i=wi(E,d,N,U))!==-1&&(U--,(C=d[I])&&(C.__u|=131072)),C==null||C.__v===null?(I==-1&&z--,typeof E.type!="function"&&(E.__u|=65536)):I!==N&&(I==N-1?z--:I==N+1?z++:(I>N?z--:z++,E.__u|=65536))):E=h.__k[P]=null;if(U)for(P=0;P(f==null||131072&f.__u?0:1))for(;a>=0||c=0){if((f=t[a])&&!(131072&f.__u)&&o==f.key&&i===f.type)return a;a--}if(c2&&(c.children=arguments.length>3?Wt.call(arguments,2):r),Et(e.type,c,n||e.key,o||e.ref,null)}Wt=Eo.slice,H={__e:function(e,t,r,n){for(var o,i,a;t=t.__;)if((o=t.__c)&&!o.__)try{if((i=o.constructor)&&i.getDerivedStateFromError!=null&&(o.setState(i.getDerivedStateFromError(e)),a=o.__d),o.componentDidCatch!=null&&(o.componentDidCatch(e,n||{}),a=o.__d),a)return o.__E=o}catch(c){e=c}throw e}},So=0,Ce.prototype.setState=function(e,t){var r;r=this.__s!=null&&this.__s!==this.state?this.__s:this.__s=Te({},this.state),typeof e=="function"&&(e=e(Te({},r),this.props)),e&&Te(r,e),e!=null&&this.__v&&(t&&this._sb.push(t),Vr(this))},Ce.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),Vr(this))},Ce.prototype.render=Re,Ge=[],Oo=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,Ur=function(e,t){return e.__v.__b-t.__v.__b},dr.__r=0,en=0,Fr=bn(!1),Br=bn(!0),wo=0;var Be,Z,Dr,Sn,lt=0,Ao=[],Y=H,On=Y.__b,wn=Y.__r,En=Y.diffed,jn=Y.__c,Pn=Y.unmount,In=Y.__;function st(e,t){Y.__h&&Y.__h(Z,e,lt||t),lt=0;var r=Z.__H||(Z.__H={__:[],__h:[]});return e>=r.__.length&&r.__.push({}),r.__[e]}function zt(e){return lt=1,nn(Ho,e)}function nn(e,t,r){var n=st(Be++,2);if(n.t=e,!n.__c&&(n.__=[r?r(t):Ho(void 0,t),function(c){var f=n.__N?n.__N[0]:n.__[0],m=n.t(f,c);f!==m&&(n.__N=[m,n.__[1]],n.__c.setState({}))}],n.__c=Z,!Z.u)){var o=function(c,f,m){if(!n.__c.__H)return!0;var b=n.__c.__H.__.filter(function(v){return!!v.__c});if(b.every(function(v){return!v.__N}))return!i||i.call(this,c,f,m);var l=!1;return b.forEach(function(v){if(v.__N){var s=v.__[0];v.__=v.__N,v.__N=void 0,s!==v.__[0]&&(l=!0)}}),!(!l&&n.__c.props===c)&&(!i||i.call(this,c,f,m))};Z.u=!0;var i=Z.shouldComponentUpdate,a=Z.componentWillUpdate;Z.componentWillUpdate=function(c,f,m){if(this.__e){var b=i;i=void 0,o(c,f,m),i=b}a&&a.call(this,c,f,m)},Z.shouldComponentUpdate=o}return n.__N||n.__}function Jt(e,t){var r=st(Be++,3);!Y.__s&&on(r.__H,t)&&(r.__=e,r.i=t,Z.__H.__h.push(r))}function Qt(e,t){var r=st(Be++,4);!Y.__s&&on(r.__H,t)&&(r.__=e,r.i=t,Z.__h.push(r))}function No(e){return lt=5,_r(function(){return{current:e}},[])}function To(e,t,r){lt=6,Qt(function(){return typeof e=="function"?(e(t()),function(){return e(null)}):e?(e.current=t(),function(){return e.current=null}):void 0},r==null?r:r.concat(e))}function _r(e,t){var r=st(Be++,7);return on(r.__H,t)&&(r.__=e(),r.__H=t,r.__h=e),r.__}function Ro(e,t){return lt=8,_r(function(){return e},t)}function Lo(e){var t=Z.context[e.__c],r=st(Be++,9);return r.c=e,t?(r.__==null&&(r.__=!0,t.sub(Z)),t.props.value):e.__}function qo(e,t){Y.useDebugValue&&Y.useDebugValue(t?t(e):e)}function Mo(){var e=st(Be++,11);if(!e.__){for(var t=Z.__v;t!==null&&!t.__m&&t.__!==null;)t=t.__;var r=t.__m||(t.__m=[0,0]);e.__="P"+r[0]+"-"+r[1]++}return e.__}function Ii(){for(var e;e=Ao.shift();)if(e.__P&&e.__H)try{e.__H.__h.forEach(mr),e.__H.__h.forEach(Kr),e.__H.__h=[]}catch(t){e.__H.__h=[],Y.__e(t,e.__v)}}Y.__b=function(e){Z=null,On&&On(e)},Y.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),In&&In(e,t)},Y.__r=function(e){wn&&wn(e),Be=0;var t=(Z=e.__c).__H;t&&(Dr===Z?(t.__h=[],Z.__h=[],t.__.forEach(function(r){r.__N&&(r.__=r.__N),r.i=r.__N=void 0})):(t.__h.forEach(mr),t.__h.forEach(Kr),t.__h=[],Be=0)),Dr=Z},Y.diffed=function(e){En&&En(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(Ao.push(t)!==1&&Sn===Y.requestAnimationFrame||((Sn=Y.requestAnimationFrame)||ki)(Ii)),t.__H.__.forEach(function(r){r.i&&(r.__H=r.i),r.i=void 0})),Dr=Z=null},Y.__c=function(e,t){t.some(function(r){try{r.__h.forEach(mr),r.__h=r.__h.filter(function(n){return!n.__||Kr(n)})}catch(n){t.some(function(o){o.__h&&(o.__h=[])}),t=[],Y.__e(n,r.__v)}}),jn&&jn(e,t)},Y.unmount=function(e){Pn&&Pn(e);var t,r=e.__c;r&&r.__H&&(r.__H.__.forEach(function(n){try{mr(n)}catch(o){t=o}}),r.__H=void 0,t&&Y.__e(t,r.__v))};var kn=typeof requestAnimationFrame=="function";function ki(e){var t,r=function(){clearTimeout(n),kn&&cancelAnimationFrame(t),setTimeout(e)},n=setTimeout(r,100);kn&&(t=requestAnimationFrame(r))}function mr(e){var t=Z,r=e.__c;typeof r=="function"&&(e.__c=void 0,r()),Z=t}function Kr(e){var t=Z;e.__c=e.__(),Z=t}function on(e,t){return!e||e.length!==t.length||t.some(function(r,n){return r!==e[n]})}function Ho(e,t){return typeof t=="function"?t(e):t}function Wr(e,t){for(var r in e)if(r!=="__source"&&!(r in t))return!0;for(var n in t)if(n!=="__source"&&e[n]!==t[n])return!0;return!1}function zr(e,t){this.props=e,this.context=t}(zr.prototype=new Ce).isPureReactComponent=!0,zr.prototype.shouldComponentUpdate=function(e,t){return Wr(this.props,e)||Wr(this.state,t)};var Dn=H.__b;H.__b=function(e){e.type&&e.type.__f&&e.ref&&(e.props.ref=e.ref,e.ref=null),Dn&&Dn(e)};var Di=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.forward_ref")||3911,Cn=function(e,t){return e==null?null:Le(Le(e).map(t))},Ci={map:Cn,forEach:Cn,count:function(e){return e?Le(e).length:0},only:function(e){var t=Le(e);if(t.length!==1)throw"Children.only";return t[0]},toArray:Le},xi=H.__e;H.__e=function(e,t,r,n){if(e.then){for(var o,i=t;i=i.__;)if((o=i.__c)&&o.__c)return t.__e==null&&(t.__e=r.__e,t.__k=r.__k),o.__c(e,t)}xi(e,t,r,n)};var xn=H.unmount;function Uo(e,t,r){return e&&(e.__c&&e.__c.__H&&(e.__c.__H.__.forEach(function(n){typeof n.__c=="function"&&n.__c()}),e.__c.__H=null),(e=function(n,o){for(var i in o)n[i]=o[i];return n}({},e)).__c!=null&&(e.__c.__P===r&&(e.__c.__P=t),e.__c=null),e.__k=e.__k&&e.__k.map(function(n){return Uo(n,t,r)})),e}function Fo(e,t,r){return e&&r&&(e.__v=null,e.__k=e.__k&&e.__k.map(function(n){return Fo(n,t,r)}),e.__c&&e.__c.__P===t&&(e.__e&&r.appendChild(e.__e),e.__c.__e=!0,e.__c.__P=r)),e}function pr(){this.__u=0,this.t=null,this.__b=null}function Bo(e){var t=e.__.__c;return t&&t.__a&&t.__a(e)}function Ot(){this.u=null,this.o=null}H.unmount=function(e){var t=e.__c;t&&t.__R&&t.__R(),t&&32&e.__u&&(e.type=null),xn&&xn(e)},(pr.prototype=new Ce).__c=function(e,t){var r=t.__c,n=this;n.t==null&&(n.t=[]),n.t.push(r);var o=Bo(n.__v),i=!1,a=function(){i||(i=!0,r.__R=null,o?o(c):c())};r.__R=a;var c=function(){if(!--n.__u){if(n.state.__a){var f=n.state.__a;n.__v.__k[0]=Fo(f,f.__c.__P,f.__c.__O)}var m;for(n.setState({__a:n.__b=null});m=n.t.pop();)m.forceUpdate()}};n.__u++||32&t.__u||n.setState({__a:n.__b=n.__v.__k[0]}),e.then(a,a)},pr.prototype.componentWillUnmount=function(){this.t=[]},pr.prototype.render=function(e,t){if(this.__b){if(this.__v.__k){var r=document.createElement("div"),n=this.__v.__k[0].__c;this.__v.__k[0]=Uo(this.__b,r,n.__O=n.__P)}this.__b=null}var o=t.__a&&De(Re,null,e.fallback);return o&&(o.__u&=-33),[De(Re,null,t.__a?null:e.children),o]};var An=function(e,t,r){if(++r[1]===r[0]&&e.o.delete(t),e.props.revealOrder&&(e.props.revealOrder[0]!=="t"||!e.o.size))for(r=e.u;r;){for(;r.length>3;)r.pop()();if(r[1]>>1,1),t.i.removeChild(n)}}),Ft(De(Ai,{context:t.context},e.__v),t.l)}function Vo(e,t){var r=De(Ni,{__v:e,i:t});return r.containerInfo=t,r}(Ot.prototype=new Ce).__a=function(e){var t=this,r=Bo(t.__v),n=t.o.get(e);return n[0]++,function(o){var i=function(){t.props.revealOrder?(n.push(o),An(t,e,n)):o()};r?r(i):i()}},Ot.prototype.render=function(e){this.u=null,this.o=new Map;var t=Le(e.children);e.revealOrder&&e.revealOrder[0]==="b"&&t.reverse();for(var r=t.length;r--;)this.o.set(t[r],this.u=[1,0,this.u]);return e.children},Ot.prototype.componentDidUpdate=Ot.prototype.componentDidMount=function(){var e=this;this.o.forEach(function(t,r){An(e,r,t)})};var Ko=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.element")||60103,Ti=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,Ri=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,Li=/[A-Z0-9]/g,qi=typeof document<"u",Mi=function(e){return(typeof Symbol<"u"&&A(Symbol())=="symbol"?/fil|che|rad/:/fil|che|ra/).test(e)};function Wo(e,t,r){return t.__k==null&&(t.textContent=""),Ft(e,t),typeof r=="function"&&r(),e?e.__c:null}Ce.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(e){Object.defineProperty(Ce.prototype,e,{configurable:!0,get:function(){return this["UNSAFE_"+e]},set:function(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,value:t})}})});var Nn=H.event;function Hi(){}function Ui(){return this.cancelBubble}function Fi(){return this.defaultPrevented}H.event=function(e){return Nn&&(e=Nn(e)),e.persist=Hi,e.isPropagationStopped=Ui,e.isDefaultPrevented=Fi,e.nativeEvent=e};var an,Bi={enumerable:!1,configurable:!0,get:function(){return this.class}},Tn=H.vnode;H.vnode=function(e){typeof e.type=="string"&&function(t){var r=t.props,n=t.type,o={},i=n.indexOf("-")===-1;for(var a in r){var c=r[a];if(!(a==="value"&&"defaultValue"in r&&c==null||qi&&a==="children"&&n==="noscript"||a==="class"||a==="className")){var f=a.toLowerCase();a==="defaultValue"&&"value"in r&&r.value==null?a="value":a==="download"&&c===!0?c="":f==="translate"&&c==="no"?c=!1:f[0]==="o"&&f[1]==="n"?f==="ondoubleclick"?a="ondblclick":f!=="onchange"||n!=="input"&&n!=="textarea"||Mi(r.type)?f==="onfocus"?a="onfocusin":f==="onblur"?a="onfocusout":Ri.test(a)&&(a=f):f=a="oninput":i&&Ti.test(a)?a=a.replace(Li,"-$&").toLowerCase():c===null&&(c=void 0),f==="oninput"&&o[a=f]&&(a="oninputCapture"),o[a]=c}}n=="select"&&o.multiple&&Array.isArray(o.value)&&(o.value=Le(r.children).forEach(function(m){m.props.selected=o.value.indexOf(m.props.value)!=-1})),n=="select"&&o.defaultValue!=null&&(o.value=Le(r.children).forEach(function(m){m.props.selected=o.multiple?o.defaultValue.indexOf(m.props.value)!=-1:o.defaultValue==m.props.value})),r.class&&!r.className?(o.class=r.class,Object.defineProperty(o,"className",Bi)):(r.className&&!r.class||r.class&&r.className)&&(o.class=o.className=r.className),t.props=o}(e),e.$$typeof=Ko,Tn&&Tn(e)};var Rn=H.__r;H.__r=function(e){Rn&&Rn(e),an=e.__c};var Ln=H.diffed;H.diffed=function(e){Ln&&Ln(e);var t=e.props,r=e.__e;r!=null&&e.type==="textarea"&&"value"in t&&t.value!==r.value&&(r.value=t.value==null?"":t.value),an=null};var Vi={ReactCurrentDispatcher:{current:{readContext:function(e){return an.__n[e.__c].props.value},useCallback:Ro,useContext:Lo,useDebugValue:qo,useDeferredValue:Jo,useEffect:Jt,useId:Mo,useImperativeHandle:To,useInsertionEffect:$o,useLayoutEffect:Qt,useMemo:_r,useReducer:nn,useRef:No,useState:zt,useSyncExternalStore:Zo,useTransition:Qo}}};function rr(e){return!!e&&e.$$typeof===Ko}function zo(e){e()}function Jo(e){return e}function Qo(){return[!1,zo]}var $o=Qt;function Zo(e,t){var r=t(),n=zt({h:{__:r,v:t}}),o=n[0].h,i=n[1];return Qt(function(){o.__=r,o.v=t,Cr(o)&&i({h:o})},[e,r,t]),Jt(function(){return Cr(o)&&i({h:o}),e(function(){Cr(o)&&i({h:o})})},[e]),r}function Cr(e){var t,r,n=e.v,o=e.__;try{var i=n();return!((t=o)===(r=i)&&(t!==0||1/t==1/r)||t!=t&&r!=r)}catch{return!0}}var u={useState:zt,useId:Mo,useReducer:nn,useEffect:Jt,useLayoutEffect:Qt,useInsertionEffect:$o,useTransition:Qo,useDeferredValue:Jo,useSyncExternalStore:Zo,startTransition:zo,useRef:No,useImperativeHandle:To,useMemo:_r,useCallback:Ro,useContext:Lo,useDebugValue:qo,version:"18.3.1",Children:Ci,render:Wo,hydrate:function(e,t,r){return xo(e,t),typeof r=="function"&&r(),e?e.__c:null},unmountComponentAtNode:function(e){return!!e.__k&&(Ft(null,e),!0)},createPortal:Vo,createElement:De,createContext:function(e,t){var r={__c:t="__cC"+wo++,__:e,Consumer:function(n,o){return n.children(o)},Provider:function(n){var o,i;return this.getChildContext||(o=new Set,(i={})[t]=this,this.getChildContext=function(){return i},this.componentWillUnmount=function(){o=null},this.shouldComponentUpdate=function(a){this.props.value!==a.value&&o.forEach(function(c){c.__e=!0,Vr(c)})},this.sub=function(a){o.add(a);var c=a.componentWillUnmount;a.componentWillUnmount=function(){o&&o.delete(a),c&&c.call(a)}}),n.children}};return r.Provider.__=r.Consumer.contextType=r},createFactory:function(e){return De.bind(null,e)},cloneElement:function(e){return rr(e)?Pi.apply(null,arguments):e},createRef:function(){return{current:null}},Fragment:Re,isValidElement:rr,isElement:rr,isFragment:function(e){return rr(e)&&e.type===Re},isMemo:function(e){return!!e&&!!e.displayName&&(typeof e.displayName=="string"||e.displayName instanceof String)&&e.displayName.startsWith("Memo(")},findDOMNode:function(e){return e&&(e.base||e.nodeType===1&&e)||null},Component:Ce,PureComponent:zr,memo:function(e,t){function r(o){var i=this.props.ref,a=i==o.ref;return!a&&i&&(i.call?i(null):i.current=null),t?!t(this.props,o)||!a:Wr(this.props,o)}function n(o){return this.shouldComponentUpdate=r,De(e,o)}return n.displayName="Memo("+(e.displayName||e.name)+")",n.prototype.isReactComponent=!0,n.__f=!0,n},forwardRef:function(e){function t(r){if(!("ref"in r))return e(r,null);var n=r.ref;delete r.ref;var o=e(r,n);return r.ref=n,o}return t.$$typeof=Di,t.render=t,t.prototype.isReactComponent=t.__f=!0,t.displayName="ForwardRef("+(e.displayName||e.name)+")",t},flushSync:function(e,t){return e(t)},unstable_batchedUpdates:function(e,t){return e(t)},StrictMode:Re,Suspense:pr,SuspenseList:Ot,lazy:function(e){var t,r,n;function o(i){if(t||(t=e()).then(function(a){r=a.default||a},function(a){n=a}),n)throw n;if(!r)throw t;return De(r,i)}return o.displayName="Lazy",o.__f=!0,o},__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:Vi};function Jr(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r=0;--R){var D=this.tryEntries[R],L=D.completion;if(D.tryLoc==="root")return j("end");if(D.tryLoc<=this.prev){var W=n.call(D,"catchLoc"),K=n.call(D,"finallyLoc");if(W&&K){if(this.prev=0;--j){var R=this.tryEntries[j];if(R.tryLoc<=this.prev&&n.call(R,"finallyLoc")&&this.prev=0;--w){var j=this.tryEntries[w];if(j.finallyLoc===O)return this.complete(j.completion,j.afterLoc),z(j),y}},catch:function(O){for(var w=this.tryEntries.length-1;w>=0;--w){var j=this.tryEntries[w];if(j.tryLoc===O){var R=j.completion;if(R.type==="throw"){var D=R.arg;z(j)}return D}}throw Error("illegal catch attempt")},delegateYield:function(O,w,j){return this.delegate={iterator:oe(O),resultName:w,nextLoc:j},this.method==="next"&&(this.arg=e),y}},t}function Vt(e,t){return Vt=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,n){return r.__proto__=n,r},Vt(e,t)}function he(e,t){return function(r){if(Array.isArray(r))return r}(e)||function(r,n){var o=r==null?null:typeof Symbol<"u"&&r[Symbol.iterator]||r["@@iterator"];if(o!=null){var i,a,c,f,m=[],b=!0,l=!1;try{if(c=(o=o.call(r)).next,n===0){if(Object(o)!==o)return;b=!1}else for(;!(b=(i=c.call(o)).done)&&(m.push(i.value),m.length!==n);b=!0);}catch(v){l=!0,a=v}finally{try{if(!b&&o.return!=null&&(f=o.return(),Object(f)!==f))return}finally{if(l)throw a}}return m}}(e,t)||Go(e,t)||function(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function jt(e){return function(t){if(Array.isArray(t))return Jr(t)}(e)||function(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}(e)||Go(e)||function(){throw new TypeError(`Invalid attempt to spread non-iterable instance. In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function Go(e,t){if(e){if(typeof e=="string")return Jr(e,t);var r={}.toString.call(e).slice(8,-1);return r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set"?Array.from(e):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Jr(e,t):void 0}}function Qr(e){var t=typeof Map=="function"?new Map:void 0;return Qr=function(r){if(r===null||!function(o){try{return Function.toString.call(o).indexOf("[native code]")!==-1}catch{return typeof o=="function"}}(r))return r;if(typeof r!="function")throw new TypeError("Super expression must either be null or a function");if(t!==void 0){if(t.has(r))return t.get(r);t.set(r,n)}function n(){return function(o,i,a){if(un())return Reflect.construct.apply(null,arguments);var c=[null];c.push.apply(c,i);var f=new(o.bind.apply(o,c));return a&&Vt(f,a.prototype),f}(r,arguments,Bt(this).constructor)}return n.prototype=Object.create(r.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),Vt(n,r)},Qr(e)}function Ki(){return u.createElement("svg",{width:"15",height:"15",className:"DocSearch-Control-Key-Icon"},u.createElement("path",{d:"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953",strokeWidth:"1.2",stroke:"currentColor",fill:"none",strokeLinecap:"square"}))}function Yo(){return u.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20","aria-hidden":"true"},u.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}var Wi=["translations"],Ar="Ctrl",zi=u.forwardRef(function(e,t){var r=e.translations,n=r===void 0?{}:r,o=xe(e,Wi),i=n.buttonText,a=i===void 0?"Search":i,c=n.buttonAriaLabel,f=c===void 0?"Search":c,m=he(zt(null),2),b=m[0],l=m[1];Jt(function(){typeof navigator<"u"&&(/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?l("⌘"):l(Ar))},[]);var v=he(b===Ar?[Ar,"Ctrl",u.createElement(Ki,null)]:["Meta","Command",b],3),s=v[0],S=v[1],g=v[2];return u.createElement("button",le({type:"button",className:"DocSearch DocSearch-Button","aria-label":"".concat(f," (").concat(S,"+K)")},o,{ref:t}),u.createElement("span",{className:"DocSearch-Button-Container"},u.createElement(Yo,null),u.createElement("span",{className:"DocSearch-Button-Placeholder"},a)),u.createElement("span",{className:"DocSearch-Button-Keys"},b!==null&&u.createElement(u.Fragment,null,u.createElement(Hn,{reactsToKey:s},g),u.createElement(Hn,{reactsToKey:"k"},"K"))))});function Hn(e){var t=e.reactsToKey,r=e.children,n=he(zt(!1),2),o=n[0],i=n[1];return Jt(function(){if(t)return window.addEventListener("keydown",a),window.addEventListener("keyup",c),function(){window.removeEventListener("keydown",a),window.removeEventListener("keyup",c)};function a(f){f.key===t&&i(!0)}function c(f){f.key!==t&&f.key!=="Meta"||i(!1)}},[t]),u.createElement("kbd",{className:o?"DocSearch-Button-Key DocSearch-Button-Key--pressed":"DocSearch-Button-Key"},r)}function Xo(e,t){var r=void 0;return function(){for(var n=arguments.length,o=new Array(n),i=0;ie.length)&&(t=e.length);for(var r=0,n=new Array(t);re.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0||(b[f]=a[f]);return b}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Vn(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),r.push.apply(r,n)}return r}function at(e){for(var t=1;ti.map(i=>d[i]); -import{d as m,c as u,r as c,n as w,o as a,a as z,t as M,b as k,w as f,T as ue,e as h,_ as b,u as Be,i as Ee,f as Fe,g as de,h as g,j as d,k as r,l as q,m as re,p as I,q as D,s as X,v as j,x as Q,y as ve,z as De,A as Oe,F as A,B as H,C as K,D as ge,E as Z,G as _,H as $e,I as ye,J as E,K as Pe,L as x,M as U,N as ee,O as Ge,P as Le,Q as Ue,R as Ve,S as Se,U as te,V as je,W as Te,X as Ne,Y as ze,Z as qe,$ as Ke,a0 as We,a1 as Re}from"./framework.CnuuF8_c.js";const Je=m({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(s){return(e,t)=>(a(),u("span",{class:w(["VPBadge",e.type])},[c(e.$slots,"default",{},()=>[z(M(e.text),1)])],2))}}),Ye={key:0,class:"VPBackdrop"},Xe=m({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(s){return(e,t)=>(a(),k(ue,{name:"fade"},{default:f(()=>[e.show?(a(),u("div",Ye)):h("",!0)]),_:1}))}}),Qe=b(Xe,[["__scopeId","data-v-4257b8b8"]]),V=Be;function Ze(s,e){let t,o=!1;return()=>{t&&clearTimeout(t),o?t=setTimeout(s,e):(s(),(o=!0)&&setTimeout(()=>o=!1,e))}}function ie(s){return s.startsWith("/")?s:`/${s}`}function pe(s){const{pathname:e,search:t,hash:o,protocol:n}=new URL(s,"http://a.com");if(Ee(s)||s.startsWith("#")||!n.startsWith("http")||!Fe(e))return s;const{site:i}=V(),l=e.endsWith("/")||e.endsWith(".html")?s:s.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,i.value.cleanUrls?"":".html")}${t}${o}`);return de(l)}function R({correspondingLink:s=!1}={}){const{site:e,localeIndex:t,page:o,theme:n,hash:i}=V(),l=g(()=>{var p,$;return{label:(p=e.value.locales[t.value])==null?void 0:p.label,link:(($=e.value.locales[t.value])==null?void 0:$.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:g(()=>Object.entries(e.value.locales).flatMap(([p,$])=>l.value.label===$.label?[]:{text:$.label,link:xe($.link||(p==="root"?"/":`/${p}/`),n.value.i18nRouting!==!1&&s,o.value.relativePath.slice(l.value.link.length-1),!e.value.cleanUrls)+i.value})),currentLang:l}}function xe(s,e,t,o){return e?s.replace(/\/$/,"")+ie(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,o?".html":"")):s}const et={class:"NotFound"},tt={class:"code"},nt={class:"title"},ot={class:"quote"},st={class:"action"},at=["href","aria-label"],rt=m({__name:"NotFound",setup(s){const{theme:e}=V(),{currentLang:t}=R();return(o,n)=>{var i,l,v,p,$;return a(),u("div",et,[d("p",tt,M(((i=r(e).notFound)==null?void 0:i.code)??"404"),1),d("h1",nt,M(((l=r(e).notFound)==null?void 0:l.title)??"PAGE NOT FOUND"),1),n[0]||(n[0]=d("div",{class:"divider"},null,-1)),d("blockquote",ot,M(((v=r(e).notFound)==null?void 0:v.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),d("div",st,[d("a",{class:"link",href:r(de)(r(t).link),"aria-label":((p=r(e).notFound)==null?void 0:p.linkLabel)??"go to home"},M((($=r(e).notFound)==null?void 0:$.linkText)??"Take me home"),9,at)])])}}}),it=b(rt,[["__scopeId","data-v-462d141b"]]);function Ie(s,e){if(Array.isArray(s))return J(s);if(s==null)return[];e=ie(e);const t=Object.keys(s).sort((n,i)=>i.split("/").length-n.split("/").length).find(n=>e.startsWith(ie(n))),o=t?s[t]:[];return Array.isArray(o)?J(o):J(o.items,o.base)}function lt(s){const e=[];let t=0;for(const o in s){const n=s[o];if(n.items){t=e.push(n);continue}e[t]||e.push({items:[]}),e[t].items.push(n)}return e}function ct(s){const e=[];function t(o){for(const n of o)n.text&&n.link&&e.push({text:n.text,link:n.link,docFooterText:n.docFooterText}),n.items&&t(n.items)}return t(s),e}function le(s,e){return Array.isArray(e)?e.some(t=>le(s,t)):q(s,e.link)?!0:e.items?le(s,e.items):!1}function J(s,e){return[...s].map(t=>{const o={...t},n=o.base||e;return n&&o.link&&(o.link=n+o.link),o.items&&(o.items=J(o.items,n)),o})}function O(){const{frontmatter:s,page:e,theme:t}=V(),o=re("(min-width: 960px)"),n=I(!1),i=g(()=>{const C=t.value.sidebar,N=e.value.relativePath;return C?Ie(C,N):[]}),l=I(i.value);D(i,(C,N)=>{JSON.stringify(C)!==JSON.stringify(N)&&(l.value=i.value)});const v=g(()=>s.value.sidebar!==!1&&l.value.length>0&&s.value.layout!=="home"),p=g(()=>$?s.value.aside==null?t.value.aside==="left":s.value.aside==="left":!1),$=g(()=>s.value.layout==="home"?!1:s.value.aside!=null?!!s.value.aside:t.value.aside!==!1),S=g(()=>v.value&&o.value),y=g(()=>v.value?lt(l.value):[]);function P(){n.value=!0}function T(){n.value=!1}function L(){n.value?T():P()}return{isOpen:n,sidebar:l,sidebarGroups:y,hasSidebar:v,hasAside:$,leftAside:p,isSidebarEnabled:S,open:P,close:T,toggle:L}}function ut(s,e){let t;X(()=>{t=s.value?document.activeElement:void 0}),j(()=>{window.addEventListener("keyup",o)}),Q(()=>{window.removeEventListener("keyup",o)});function o(n){n.key==="Escape"&&s.value&&(e(),t==null||t.focus())}}function dt(s){const{page:e,hash:t}=V(),o=I(!1),n=g(()=>s.value.collapsed!=null),i=g(()=>!!s.value.link),l=I(!1),v=()=>{l.value=q(e.value.relativePath,s.value.link)};D([e,s,t],v),j(v);const p=g(()=>l.value?!0:s.value.items?le(e.value.relativePath,s.value.items):!1),$=g(()=>!!(s.value.items&&s.value.items.length));X(()=>{o.value=!!(n.value&&s.value.collapsed)}),ve(()=>{(l.value||p.value)&&(o.value=!1)});function S(){n.value&&(o.value=!o.value)}return{collapsed:o,collapsible:n,isLink:i,isActiveLink:l,hasActiveLink:p,hasChildren:$,toggle:S}}function vt(){const{hasSidebar:s}=O(),e=re("(min-width: 960px)"),t=re("(min-width: 1280px)");return{isAsideEnabled:g(()=>!t.value&&!e.value?!1:s.value?t.value:e.value)}}const pt=/\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/,ce=[];function we(s){return typeof s.outline=="object"&&!Array.isArray(s.outline)&&s.outline.label||s.outlineTitle||"On this page"}function fe(s){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const o=Number(t.tagName[1]);return{element:t,title:ft(t),link:"#"+t.id,level:o}});return ht(e,s)}function ft(s){let e="";for(const t of s.childNodes)if(t.nodeType===1){if(pt.test(t.className))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function ht(s,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[o,n]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;return kt(s,o,n)}function mt(s,e){const{isAsideEnabled:t}=vt(),o=Ze(i,100);let n=null;j(()=>{requestAnimationFrame(i),window.addEventListener("scroll",o)}),De(()=>{l(location.hash)}),Q(()=>{window.removeEventListener("scroll",o)});function i(){if(!t.value)return;const v=window.scrollY,p=window.innerHeight,$=document.body.offsetHeight,S=Math.abs(v+p-$)<1,y=ce.map(({element:T,link:L})=>({link:L,top:_t(T)})).filter(({top:T})=>!Number.isNaN(T)).sort((T,L)=>T.top-L.top);if(!y.length){l(null);return}if(v<1){l(null);return}if(S){l(y[y.length-1].link);return}let P=null;for(const{link:T,top:L}of y){if(L>v+Oe()+4)break;P=T}l(P)}function l(v){n&&n.classList.remove("active"),v==null?n=null:n=s.value.querySelector(`a[href="${decodeURIComponent(v)}"]`);const p=n;p?(p.classList.add("active"),e.value.style.top=p.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function _t(s){let e=0;for(;s!==document.body;){if(s===null)return NaN;e+=s.offsetTop,s=s.offsetParent}return e}function kt(s,e,t){ce.length=0;const o=[],n=[];return s.forEach(i=>{const l={...i,children:[]};let v=n[n.length-1];for(;v&&v.level>=l.level;)n.pop(),v=n[n.length-1];if(l.element.classList.contains("ignore-header")||v&&"shouldIgnore"in v){n.push({level:l.level,shouldIgnore:!0});return}l.level>t||l.level{const n=K("VPDocOutlineItem",!0);return a(),u("ul",{class:w(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),u(A,null,H(t.headers,({children:i,link:l,title:v})=>(a(),u("li",null,[d("a",{class:"outline-link",href:l,onClick:e,title:v},M(v),9,bt),i!=null&&i.length?(a(),k(n,{key:0,headers:i},null,8,["headers"])):h("",!0)]))),256))],2)}}}),Me=b(gt,[["__scopeId","data-v-784d6846"]]),$t={class:"content"},yt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},Pt=m({__name:"VPDocAsideOutline",setup(s){const{frontmatter:e,theme:t}=V(),o=ge([]);Z(()=>{o.value=fe(e.value.outline??t.value.outline)});const n=I(),i=I();return mt(n,i),(l,v)=>(a(),u("nav",{"aria-labelledby":"doc-outline-aria-label",class:w(["VPDocAsideOutline",{"has-outline":o.value.length>0}]),ref_key:"container",ref:n},[d("div",$t,[d("div",{class:"outline-marker",ref_key:"marker",ref:i},null,512),d("div",yt,M(r(we)(r(t))),1),_(Me,{headers:o.value,root:!0},null,8,["headers"])])],2))}}),Lt=b(Pt,[["__scopeId","data-v-d090cc38"]]),Vt={class:"VPDocAsideCarbonAds"},St=m({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(s){const e=$e(()=>ye(()=>import("./ui-custom.C2yHb_f-.js"),__vite__mapDeps([0,1])));return(t,o)=>(a(),u("div",Vt,[_(r(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Tt={class:"VPDocAside"},Nt=m({__name:"VPDocAside",setup(s){const{theme:e}=V();return(t,o)=>(a(),u("div",Tt,[c(t.$slots,"aside-top",{},void 0,!0),c(t.$slots,"aside-outline-before",{},void 0,!0),_(Lt),c(t.$slots,"aside-outline-after",{},void 0,!0),o[0]||(o[0]=d("div",{class:"spacer"},null,-1)),c(t.$slots,"aside-ads-before",{},void 0,!0),r(e).carbonAds?(a(),k(St,{key:0,"carbon-ads":r(e).carbonAds},null,8,["carbon-ads"])):h("",!0),c(t.$slots,"aside-ads-after",{},void 0,!0),c(t.$slots,"aside-bottom",{},void 0,!0)]))}}),It=b(Nt,[["__scopeId","data-v-954e674c"]]);function wt(){const{theme:s,page:e}=V();return g(()=>{const{text:t="Edit this page",pattern:o=""}=s.value.editLink||{};let n;return typeof o=="function"?n=o(e.value):n=o.replace(/:path/g,e.value.filePath),{url:n,text:t}})}function Mt(){const{page:s,theme:e,frontmatter:t}=V();return g(()=>{var $,S,y,P,T,L,C,N;const o=Ie(e.value.sidebar,s.value.relativePath),n=ct(o),i=Ct(n,B=>B.link.replace(/[?#].*$/,"")),l=i.findIndex(B=>q(s.value.relativePath,B.link)),v=(($=e.value.docFooter)==null?void 0:$.prev)===!1&&!t.value.prev||t.value.prev===!1,p=((S=e.value.docFooter)==null?void 0:S.next)===!1&&!t.value.next||t.value.next===!1;return{prev:v?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((y=i[l-1])==null?void 0:y.docFooterText)??((P=i[l-1])==null?void 0:P.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((T=i[l-1])==null?void 0:T.link)},next:p?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((L=i[l+1])==null?void 0:L.docFooterText)??((C=i[l+1])==null?void 0:C.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((N=i[l+1])==null?void 0:N.link)}}})}function Ct(s,e){const t=new Set;return s.filter(o=>{const n=e(o);return t.has(n)?!1:t.add(n)})}const F=m({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(s){const e=s,t=g(()=>e.tag??(e.href?"a":"span")),o=g(()=>e.href&&Pe.test(e.href)||e.target==="_blank");return(n,i)=>(a(),k(E(t.value),{class:w(["VPLink",{link:n.href,"vp-external-link-icon":o.value,"no-icon":n.noIcon}]),href:n.href?r(pe)(n.href):void 0,target:n.target??(o.value?"_blank":void 0),rel:n.rel??(o.value?"noreferrer":void 0)},{default:f(()=>[c(n.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),At={class:"VPLastUpdated"},Ht=["datetime"],Bt=m({__name:"VPDocFooterLastUpdated",setup(s){const{theme:e,page:t,lang:o}=V(),n=g(()=>new Date(t.value.lastUpdated)),i=g(()=>n.value.toISOString()),l=I("");return j(()=>{X(()=>{var v,p,$;l.value=new Intl.DateTimeFormat((p=(v=e.value.lastUpdated)==null?void 0:v.formatOptions)!=null&&p.forceLocale?o.value:void 0,(($=e.value.lastUpdated)==null?void 0:$.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(n.value)})}),(v,p)=>{var $;return a(),u("p",At,[z(M((($=r(e).lastUpdated)==null?void 0:$.text)||r(e).lastUpdatedText||"Last updated")+": ",1),d("time",{datetime:i.value},M(l.value),9,Ht)])}}}),Et=b(Bt,[["__scopeId","data-v-0e1c880e"]]),Ft={key:0,class:"VPDocFooter"},Dt={key:0,class:"edit-info"},Ot={key:0,class:"edit-link"},Gt={key:1,class:"last-updated"},Ut={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},jt={class:"pager"},zt=["innerHTML"],qt=["innerHTML"],Kt={class:"pager"},Wt=["innerHTML"],Rt=["innerHTML"],Jt=m({__name:"VPDocFooter",setup(s){const{theme:e,page:t,frontmatter:o}=V(),n=wt(),i=Mt(),l=g(()=>e.value.editLink&&o.value.editLink!==!1),v=g(()=>t.value.lastUpdated),p=g(()=>l.value||v.value||i.value.prev||i.value.next);return($,S)=>{var y,P,T,L;return p.value?(a(),u("footer",Ft,[c($.$slots,"doc-footer-before",{},void 0,!0),l.value||v.value?(a(),u("div",Dt,[l.value?(a(),u("div",Ot,[_(F,{class:"edit-link-button",href:r(n).url,"no-icon":!0},{default:f(()=>[S[0]||(S[0]=d("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),z(" "+M(r(n).text),1)]),_:1,__:[0]},8,["href"])])):h("",!0),v.value?(a(),u("div",Gt,[_(Et)])):h("",!0)])):h("",!0),(y=r(i).prev)!=null&&y.link||(P=r(i).next)!=null&&P.link?(a(),u("nav",Ut,[S[1]||(S[1]=d("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),d("div",jt,[(T=r(i).prev)!=null&&T.link?(a(),k(F,{key:0,class:"pager-link prev",href:r(i).prev.link},{default:f(()=>{var C;return[d("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.prev)||"Previous page"},null,8,zt),d("span",{class:"title",innerHTML:r(i).prev.text},null,8,qt)]}),_:1},8,["href"])):h("",!0)]),d("div",Kt,[(L=r(i).next)!=null&&L.link?(a(),k(F,{key:0,class:"pager-link next",href:r(i).next.link},{default:f(()=>{var C;return[d("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.next)||"Next page"},null,8,Wt),d("span",{class:"title",innerHTML:r(i).next.text},null,8,Rt)]}),_:1},8,["href"])):h("",!0)])])):h("",!0)])):h("",!0)}}}),Yt=b(Jt,[["__scopeId","data-v-854d1e56"]]),Xt={class:"container"},Qt={class:"aside-container"},Zt={class:"aside-content"},xt={class:"content"},en={class:"content-container"},tn={class:"main"},nn=m({__name:"VPDoc",setup(s){const{theme:e}=V(),t=x(),{hasSidebar:o,hasAside:n,leftAside:i}=O(),l=g(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(v,p)=>{const $=K("Content");return a(),u("div",{class:w(["VPDoc",{"has-sidebar":r(o),"has-aside":r(n)}])},[c(v.$slots,"doc-top",{},void 0,!0),d("div",Xt,[r(n)?(a(),u("div",{key:0,class:w(["aside",{"left-aside":r(i)}])},[p[0]||(p[0]=d("div",{class:"aside-curtain"},null,-1)),d("div",Qt,[d("div",Zt,[_(It,null,{"aside-top":f(()=>[c(v.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[c(v.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[c(v.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(v.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(v.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(v.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):h("",!0),d("div",xt,[d("div",en,[c(v.$slots,"doc-before",{},void 0,!0),d("main",tn,[_($,{class:w(["vp-doc",[l.value,r(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),_(Yt,null,{"doc-footer-before":f(()=>[c(v.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),c(v.$slots,"doc-after",{},void 0,!0)])])]),c(v.$slots,"doc-bottom",{},void 0,!0)],2)}}}),on=b(nn,[["__scopeId","data-v-c83a7005"]]),sn=m({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(s){const e=s,t=g(()=>e.href&&Pe.test(e.href)),o=g(()=>e.tag||(e.href?"a":"button"));return(n,i)=>(a(),k(E(o.value),{class:w(["VPButton",[n.size,n.theme]]),href:n.href?r(pe)(n.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:f(()=>[z(M(n.text),1)]),_:1},8,["class","href","target","rel"]))}}),an=b(sn,[["__scopeId","data-v-697578a2"]]),rn=["src","alt"],ln=m({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(s){return(e,t)=>{const o=K("VPImage",!0);return e.image?(a(),u(A,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),u("img",U({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:r(de)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,rn)):(a(),u(A,{key:1},[_(o,U({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),_(o,U({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):h("",!0)}}}),Y=b(ln,[["__scopeId","data-v-ef85d959"]]),cn={class:"container"},un={class:"main"},dn={class:"heading"},vn=["innerHTML"],pn=["innerHTML"],fn=["innerHTML"],hn={key:0,class:"actions"},mn={key:0,class:"image"},_n={class:"image-container"},kn=m({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(s){const e=ee("hero-image-slot-exists");return(t,o)=>(a(),u("div",{class:w(["VPHero",{"has-image":t.image||r(e)}])},[d("div",cn,[d("div",un,[c(t.$slots,"home-hero-info-before",{},void 0,!0),c(t.$slots,"home-hero-info",{},()=>[d("h1",dn,[t.name?(a(),u("span",{key:0,innerHTML:t.name,class:"name clip"},null,8,vn)):h("",!0),t.text?(a(),u("span",{key:1,innerHTML:t.text,class:"text"},null,8,pn)):h("",!0)]),t.tagline?(a(),u("p",{key:0,innerHTML:t.tagline,class:"tagline"},null,8,fn)):h("",!0)],!0),c(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),u("div",hn,[(a(!0),u(A,null,H(t.actions,n=>(a(),u("div",{key:n.link,class:"action"},[_(an,{tag:"a",size:"medium",theme:n.theme,text:n.text,href:n.link,target:n.target,rel:n.rel},null,8,["theme","text","href","target","rel"])]))),128))])):h("",!0),c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||r(e)?(a(),u("div",mn,[d("div",_n,[o[0]||(o[0]=d("div",{class:"image-bg"},null,-1)),c(t.$slots,"home-hero-image",{},()=>[t.image?(a(),k(Y,{key:0,class:"image-src",image:t.image},null,8,["image"])):h("",!0)],!0)])])):h("",!0)])],2))}}),bn=b(kn,[["__scopeId","data-v-0c44b6eb"]]),gn=m({__name:"VPHomeHero",setup(s){const{frontmatter:e}=V();return(t,o)=>r(e).hero?(a(),k(bn,{key:0,class:"VPHomeHero",name:r(e).hero.name,text:r(e).hero.text,tagline:r(e).hero.tagline,image:r(e).hero.image,actions:r(e).hero.actions},{"home-hero-info-before":f(()=>[c(t.$slots,"home-hero-info-before")]),"home-hero-info":f(()=>[c(t.$slots,"home-hero-info")]),"home-hero-info-after":f(()=>[c(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":f(()=>[c(t.$slots,"home-hero-actions-after")]),"home-hero-image":f(()=>[c(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):h("",!0)}}),$n={class:"box"},yn={key:0,class:"icon"},Pn=["innerHTML"],Ln=["innerHTML"],Vn=["innerHTML"],Sn={key:4,class:"link-text"},Tn={class:"link-text-value"},Nn=m({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(s){return(e,t)=>(a(),k(F,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:f(()=>[d("article",$n,[typeof e.icon=="object"&&e.icon.wrap?(a(),u("div",yn,[_(Y,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),k(Y,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(a(),u("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Pn)):h("",!0),d("h2",{class:"title",innerHTML:e.title},null,8,Ln),e.details?(a(),u("p",{key:3,class:"details",innerHTML:e.details},null,8,Vn)):h("",!0),e.linkText?(a(),u("div",Sn,[d("p",Tn,[z(M(e.linkText)+" ",1),t[0]||(t[0]=d("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):h("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),In=b(Nn,[["__scopeId","data-v-059b0b5c"]]),wn={key:0,class:"VPFeatures"},Mn={class:"container"},Cn={class:"items"},An=m({__name:"VPFeatures",props:{features:{}},setup(s){const e=s,t=g(()=>{const o=e.features.length;if(o){if(o===2)return"grid-2";if(o===3)return"grid-3";if(o%3===0)return"grid-6";if(o>3)return"grid-4"}else return});return(o,n)=>o.features?(a(),u("div",wn,[d("div",Mn,[d("div",Cn,[(a(!0),u(A,null,H(o.features,i=>(a(),u("div",{key:i.title,class:w(["item",[t.value]])},[_(In,{icon:i.icon,title:i.title,details:i.details,link:i.link,"link-text":i.linkText,rel:i.rel,target:i.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):h("",!0)}}),Hn=b(An,[["__scopeId","data-v-b8f2f37c"]]),Bn=m({__name:"VPHomeFeatures",setup(s){const{frontmatter:e}=V();return(t,o)=>r(e).features?(a(),k(Hn,{key:0,class:"VPHomeFeatures",features:r(e).features},null,8,["features"])):h("",!0)}}),En=m({__name:"VPHomeContent",setup(s){const{width:e}=Ge({initialWidth:0,includeScrollbar:!1});return(t,o)=>(a(),u("div",{class:"vp-doc container",style:Le(r(e)?{"--vp-offset":`calc(50% - ${r(e)/2}px)`}:{})},[c(t.$slots,"default",{},void 0,!0)],4))}}),Fn=b(En,[["__scopeId","data-v-82b4ea9c"]]),Dn=m({__name:"VPHome",setup(s){const{frontmatter:e,theme:t}=V();return(o,n)=>{const i=K("Content");return a(),u("div",{class:w(["VPHome",{"external-link-icon-enabled":r(t).externalLinkIcon}])},[c(o.$slots,"home-hero-before",{},void 0,!0),_(gn,null,{"home-hero-info-before":f(()=>[c(o.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(o.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(o.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(o.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(o.$slots,"home-hero-image",{},void 0,!0)]),_:3}),c(o.$slots,"home-hero-after",{},void 0,!0),c(o.$slots,"home-features-before",{},void 0,!0),_(Bn),c(o.$slots,"home-features-after",{},void 0,!0),r(e).markdownStyles!==!1?(a(),k(Fn,{key:0},{default:f(()=>[_(i)]),_:1})):(a(),k(i,{key:1}))],2)}}}),On=b(Dn,[["__scopeId","data-v-6edd784e"]]),Gn={},Un={class:"VPPage"};function jn(s,e){const t=K("Content");return a(),u("div",Un,[c(s.$slots,"page-top"),_(t),c(s.$slots,"page-bottom")])}const zn=b(Gn,[["render",jn]]),qn=m({__name:"VPContent",setup(s){const{page:e,frontmatter:t}=V(),{hasSidebar:o}=O();return(n,i)=>(a(),u("div",{class:w(["VPContent",{"has-sidebar":r(o),"is-home":r(t).layout==="home"}]),id:"VPContent"},[r(e).isNotFound?c(n.$slots,"not-found",{key:0},()=>[_(it)],!0):r(t).layout==="page"?(a(),k(zn,{key:1},{"page-top":f(()=>[c(n.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[c(n.$slots,"page-bottom",{},void 0,!0)]),_:3})):r(t).layout==="home"?(a(),k(On,{key:2},{"home-hero-before":f(()=>[c(n.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[c(n.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(n.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(n.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(n.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(n.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[c(n.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[c(n.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[c(n.$slots,"home-features-after",{},void 0,!0)]),_:3})):r(t).layout&&r(t).layout!=="doc"?(a(),k(E(r(t).layout),{key:3})):(a(),k(on,{key:4},{"doc-top":f(()=>[c(n.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[c(n.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":f(()=>[c(n.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[c(n.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[c(n.$slots,"doc-after",{},void 0,!0)]),"aside-top":f(()=>[c(n.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":f(()=>[c(n.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(n.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(n.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(n.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":f(()=>[c(n.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),Kn=b(qn,[["__scopeId","data-v-36e5cdaf"]]),Wn={class:"container"},Rn=["innerHTML"],Jn=["innerHTML"],Yn=m({__name:"VPFooter",setup(s){const{theme:e,frontmatter:t}=V(),{hasSidebar:o}=O();return(n,i)=>r(e).footer&&r(t).footer!==!1?(a(),u("footer",{key:0,class:w(["VPFooter",{"has-sidebar":r(o)}])},[d("div",Wn,[r(e).footer.message?(a(),u("p",{key:0,class:"message",innerHTML:r(e).footer.message},null,8,Rn)):h("",!0),r(e).footer.copyright?(a(),u("p",{key:1,class:"copyright",innerHTML:r(e).footer.copyright},null,8,Jn)):h("",!0)])],2)):h("",!0)}}),Xn=b(Yn,[["__scopeId","data-v-8dabfd52"]]);function Qn(){const{theme:s,frontmatter:e}=V(),t=ge([]),o=g(()=>t.value.length>0);return Z(()=>{t.value=fe(e.value.outline??s.value.outline)}),{headers:t,hasLocalNav:o}}const Zn={class:"menu-text"},xn={class:"header"},eo={class:"outline"},to=m({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(s){const e=s,{theme:t}=V(),o=I(!1),n=I(0),i=I(),l=I();function v(y){var P;(P=i.value)!=null&&P.contains(y.target)||(o.value=!1)}D(o,y=>{if(y){document.addEventListener("click",v);return}document.removeEventListener("click",v)}),Ue("Escape",()=>{o.value=!1}),Z(()=>{o.value=!1});function p(){o.value=!o.value,n.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function $(y){y.target.classList.contains("outline-link")&&(l.value&&(l.value.style.transition="none"),Ve(()=>{o.value=!1}))}function S(){o.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(y,P)=>(a(),u("div",{class:"VPLocalNavOutlineDropdown",style:Le({"--vp-vh":n.value+"px"}),ref_key:"main",ref:i},[y.headers.length>0?(a(),u("button",{key:0,onClick:p,class:w({open:o.value})},[d("span",Zn,M(r(we)(r(t))),1),P[0]||(P[0]=d("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(a(),u("button",{key:1,onClick:S},M(r(t).returnToTopLabel||"Return to top"),1)),_(ue,{name:"flyout"},{default:f(()=>[o.value?(a(),u("div",{key:0,ref_key:"items",ref:l,class:"items",onClick:$},[d("div",xn,[d("a",{class:"top-link",href:"#",onClick:S},M(r(t).returnToTopLabel||"Return to top"),1)]),d("div",eo,[_(Me,{headers:y.headers},null,8,["headers"])])],512)):h("",!0)]),_:1})],4))}}),no=b(to,[["__scopeId","data-v-b3853465"]]),oo={class:"container"},so=["aria-expanded"],ao={class:"menu-text"},ro=m({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(s){const{theme:e,frontmatter:t}=V(),{hasSidebar:o}=O(),{headers:n}=Qn(),{y:i}=Se(),l=I(0);j(()=>{l.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),Z(()=>{n.value=fe(t.value.outline??e.value.outline)});const v=g(()=>n.value.length===0),p=g(()=>v.value&&!o.value),$=g(()=>({VPLocalNav:!0,"has-sidebar":o.value,empty:v.value,fixed:p.value}));return(S,y)=>r(t).layout!=="home"&&(!p.value||r(i)>=l.value)?(a(),u("div",{key:0,class:w($.value)},[d("div",oo,[r(o)?(a(),u("button",{key:0,class:"menu","aria-expanded":S.open,"aria-controls":"VPSidebarNav",onClick:y[0]||(y[0]=P=>S.$emit("open-menu"))},[y[1]||(y[1]=d("span",{class:"vpi-align-left menu-icon"},null,-1)),d("span",ao,M(r(e).sidebarMenuLabel||"Menu"),1)],8,so)):h("",!0),_(no,{headers:r(n),navHeight:l.value},null,8,["headers","navHeight"])])],2)):h("",!0)}}),io=b(ro,[["__scopeId","data-v-fdc3adbf"]]);function lo(){const s=I(!1);function e(){s.value=!0,window.addEventListener("resize",n)}function t(){s.value=!1,window.removeEventListener("resize",n)}function o(){s.value?t():e()}function n(){window.outerWidth>=768&&t()}const i=x();return D(()=>i.path,t),{isScreenOpen:s,openScreen:e,closeScreen:t,toggleScreen:o}}const co={},uo={class:"VPSwitch",type:"button",role:"switch"},vo={class:"check"},po={key:0,class:"icon"};function fo(s,e){return a(),u("button",uo,[d("span",vo,[s.$slots.default?(a(),u("span",po,[c(s.$slots,"default",{},void 0,!0)])):h("",!0)])])}const ho=b(co,[["render",fo],["__scopeId","data-v-94e9f62d"]]),mo=m({__name:"VPSwitchAppearance",setup(s){const{isDark:e,theme:t}=V(),o=ee("toggle-appearance",()=>{e.value=!e.value}),n=I("");return ve(()=>{n.value=e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(i,l)=>(a(),k(ho,{title:n.value,class:"VPSwitchAppearance","aria-checked":r(e),onClick:r(o)},{default:f(()=>l[0]||(l[0]=[d("span",{class:"vpi-sun sun"},null,-1),d("span",{class:"vpi-moon moon"},null,-1)])),_:1,__:[0]},8,["title","aria-checked","onClick"]))}}),he=b(mo,[["__scopeId","data-v-598e3036"]]),_o={key:0,class:"VPNavBarAppearance"},ko=m({__name:"VPNavBarAppearance",setup(s){const{site:e}=V();return(t,o)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",_o,[_(he)])):h("",!0)}}),bo=b(ko,[["__scopeId","data-v-f499637a"]]),me=I();let Ce=!1,ae=0;function go(s){const e=I(!1);if(te){!Ce&&$o(),ae++;const t=D(me,o=>{var n,i,l;o===s.el.value||(n=s.el.value)!=null&&n.contains(o)?(e.value=!0,(i=s.onFocus)==null||i.call(s)):(e.value=!1,(l=s.onBlur)==null||l.call(s))});Q(()=>{t(),ae--,ae||yo()})}return je(e)}function $o(){document.addEventListener("focusin",Ae),Ce=!0,me.value=document.activeElement}function yo(){document.removeEventListener("focusin",Ae)}function Ae(){me.value=document.activeElement}const Po={class:"VPMenuLink"},Lo=["innerHTML"],Vo=m({__name:"VPMenuLink",props:{item:{}},setup(s){const{page:e}=V();return(t,o)=>(a(),u("div",Po,[_(F,{class:w({active:r(q)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon},{default:f(()=>[d("span",{innerHTML:t.item.text},null,8,Lo)]),_:1},8,["class","href","target","rel","no-icon"])]))}}),ne=b(Vo,[["__scopeId","data-v-b2a62be6"]]),So={class:"VPMenuGroup"},To={key:0,class:"title"},No=m({__name:"VPMenuGroup",props:{text:{},items:{}},setup(s){return(e,t)=>(a(),u("div",So,[e.text?(a(),u("p",To,M(e.text),1)):h("",!0),(a(!0),u(A,null,H(e.items,o=>(a(),u(A,null,["link"in o?(a(),k(ne,{key:0,item:o},null,8,["item"])):h("",!0)],64))),256))]))}}),Io=b(No,[["__scopeId","data-v-05d5f862"]]),wo={class:"VPMenu"},Mo={key:0,class:"items"},Co=m({__name:"VPMenu",props:{items:{}},setup(s){return(e,t)=>(a(),u("div",wo,[e.items?(a(),u("div",Mo,[(a(!0),u(A,null,H(e.items,o=>(a(),u(A,{key:JSON.stringify(o)},["link"in o?(a(),k(ne,{key:0,item:o},null,8,["item"])):"component"in o?(a(),k(E(o.component),U({key:1,ref_for:!0},o.props),null,16)):(a(),k(Io,{key:2,text:o.text,items:o.items},null,8,["text","items"]))],64))),128))])):h("",!0),c(e.$slots,"default",{},void 0,!0)]))}}),Ao=b(Co,[["__scopeId","data-v-5bb8aaa3"]]),Ho=["aria-expanded","aria-label"],Bo={key:0,class:"text"},Eo=["innerHTML"],Fo={key:1,class:"vpi-more-horizontal icon"},Do={class:"menu"},Oo=m({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(s){const e=I(!1),t=I();go({el:t,onBlur:o});function o(){e.value=!1}return(n,i)=>(a(),u("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:i[1]||(i[1]=l=>e.value=!0),onMouseleave:i[2]||(i[2]=l=>e.value=!1)},[d("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":n.label,onClick:i[0]||(i[0]=l=>e.value=!e.value)},[n.button||n.icon?(a(),u("span",Bo,[n.icon?(a(),u("span",{key:0,class:w([n.icon,"option-icon"])},null,2)):h("",!0),n.button?(a(),u("span",{key:1,innerHTML:n.button},null,8,Eo)):h("",!0),i[3]||(i[3]=d("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(a(),u("span",Fo))],8,Ho),d("div",Do,[_(Ao,{items:n.items},{default:f(()=>[c(n.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),_e=b(Oo,[["__scopeId","data-v-15615c13"]]),Go=["href","aria-label","innerHTML"],Uo=m({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(s){const e=s,t=I();j(async()=>{var i;await Ve();const n=(i=t.value)==null?void 0:i.children[0];n instanceof HTMLElement&&n.className.startsWith("vpi-social-")&&(getComputedStyle(n).maskImage||getComputedStyle(n).webkitMaskImage)==="none"&&n.style.setProperty("--icon",`url('https://api.iconify.design/simple-icons/${e.icon}.svg')`)});const o=g(()=>typeof e.icon=="object"?e.icon.svg:``);return(n,i)=>(a(),u("a",{ref_key:"el",ref:t,class:"VPSocialLink no-icon",href:n.link,"aria-label":n.ariaLabel??(typeof n.icon=="string"?n.icon:""),target:"_blank",rel:"noopener",innerHTML:o.value},null,8,Go))}}),jo=b(Uo,[["__scopeId","data-v-b60aa373"]]),zo={class:"VPSocialLinks"},qo=m({__name:"VPSocialLinks",props:{links:{}},setup(s){return(e,t)=>(a(),u("div",zo,[(a(!0),u(A,null,H(e.links,({link:o,icon:n,ariaLabel:i})=>(a(),k(jo,{key:o,icon:n,link:o,ariaLabel:i},null,8,["icon","link","ariaLabel"]))),128))]))}}),ke=b(qo,[["__scopeId","data-v-ad239fd6"]]),Ko={key:0,class:"group translations"},Wo={class:"trans-title"},Ro={key:1,class:"group"},Jo={class:"item appearance"},Yo={class:"label"},Xo={class:"appearance-action"},Qo={key:2,class:"group"},Zo={class:"item social-links"},xo=m({__name:"VPNavBarExtra",setup(s){const{site:e,theme:t}=V(),{localeLinks:o,currentLang:n}=R({correspondingLink:!0}),i=g(()=>o.value.length&&n.value.label||e.value.appearance||t.value.socialLinks);return(l,v)=>i.value?(a(),k(_e,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:f(()=>[r(o).length&&r(n).label?(a(),u("div",Ko,[d("p",Wo,M(r(n).label),1),(a(!0),u(A,null,H(r(o),p=>(a(),k(ne,{key:p.link,item:p},null,8,["item"]))),128))])):h("",!0),r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",Ro,[d("div",Jo,[d("p",Yo,M(r(t).darkModeSwitchLabel||"Appearance"),1),d("div",Xo,[_(he)])])])):h("",!0),r(t).socialLinks?(a(),u("div",Qo,[d("div",Zo,[_(ke,{class:"social-links-list",links:r(t).socialLinks},null,8,["links"])])])):h("",!0)]),_:1})):h("",!0)}}),es=b(xo,[["__scopeId","data-v-b981492a"]]),ts=["aria-expanded"],ns=m({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(s){return(e,t)=>(a(),u("button",{type:"button",class:w(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=o=>e.$emit("click"))},t[1]||(t[1]=[d("span",{class:"container"},[d("span",{class:"top"}),d("span",{class:"middle"}),d("span",{class:"bottom"})],-1)]),10,ts))}}),os=b(ns,[["__scopeId","data-v-7014dc69"]]),ss=["innerHTML"],as=m({__name:"VPNavBarMenuLink",props:{item:{}},setup(s){const{page:e}=V();return(t,o)=>(a(),k(F,{class:w({VPNavBarMenuLink:!0,active:r(q)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,tabindex:"0"},{default:f(()=>[d("span",{innerHTML:t.item.text},null,8,ss)]),_:1},8,["class","href","target","rel","no-icon"]))}}),rs=b(as,[["__scopeId","data-v-18f1f880"]]),is=m({__name:"VPNavBarMenuGroup",props:{item:{}},setup(s){const e=s,{page:t}=V(),o=i=>"component"in i?!1:"link"in i?q(t.value.relativePath,i.link,!!e.item.activeMatch):i.items.some(o),n=g(()=>o(e.item));return(i,l)=>(a(),k(_e,{class:w({VPNavBarMenuGroup:!0,active:r(q)(r(t).relativePath,i.item.activeMatch,!!i.item.activeMatch)||n.value}),button:i.item.text,items:i.item.items},null,8,["class","button","items"]))}}),ls={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},cs=m({__name:"VPNavBarMenu",setup(s){const{theme:e}=V();return(t,o)=>r(e).nav?(a(),u("nav",ls,[o[0]||(o[0]=d("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(a(!0),u(A,null,H(r(e).nav,n=>(a(),u(A,{key:JSON.stringify(n)},["link"in n?(a(),k(rs,{key:0,item:n},null,8,["item"])):"component"in n?(a(),k(E(n.component),U({key:1,ref_for:!0},n.props),null,16)):(a(),k(is,{key:2,item:n},null,8,["item"]))],64))),128))])):h("",!0)}}),us=b(cs,[["__scopeId","data-v-e4ba8c32"]]);function ds(s){const{localeIndex:e,theme:t}=V();function o(n){var L,C,N;const i=n.split("."),l=(L=t.value.search)==null?void 0:L.options,v=l&&typeof l=="object",p=v&&((N=(C=l.locales)==null?void 0:C[e.value])==null?void 0:N.translations)||null,$=v&&l.translations||null;let S=p,y=$,P=s;const T=i.pop();for(const B of i){let G=null;const W=P==null?void 0:P[B];W&&(G=P=W);const oe=y==null?void 0:y[B];oe&&(G=y=oe);const se=S==null?void 0:S[B];se&&(G=S=se),W||(P=G),oe||(y=G),se||(S=G)}return(S==null?void 0:S[T])??(y==null?void 0:y[T])??(P==null?void 0:P[T])??""}return o}const vs=["aria-label"],ps={class:"DocSearch-Button-Container"},fs={class:"DocSearch-Button-Placeholder"},be=m({__name:"VPNavBarSearchButton",setup(s){const t=ds({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(o,n)=>(a(),u("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":r(t)("button.buttonAriaLabel")},[d("span",ps,[n[0]||(n[0]=d("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1)),d("span",fs,M(r(t)("button.buttonText")),1)]),n[1]||(n[1]=d("span",{class:"DocSearch-Button-Keys"},[d("kbd",{class:"DocSearch-Button-Key"}),d("kbd",{class:"DocSearch-Button-Key"},"K")],-1))],8,vs))}}),hs={class:"VPNavBarSearch"},ms={id:"local-search"},_s={key:1,id:"docsearch"},ks=m({__name:"VPNavBarSearch",setup(s){const e=()=>null,t=$e(()=>ye(()=>import("./VPAlgoliaSearchBox.BLTIjatY.js"),__vite__mapDeps([2,1]))),{theme:o}=V(),n=I(!1),i=I(!1),l=()=>{const P="VPAlgoliaPreconnect";(window.requestIdleCallback||setTimeout)(()=>{var C;const L=document.createElement("link");L.id=P,L.rel="preconnect",L.href=`https://${(((C=o.value.search)==null?void 0:C.options)??o.value.algolia).appId}-dsn.algolia.net`,L.crossOrigin="",document.head.appendChild(L)})};j(()=>{l();const P=L=>{(L.key.toLowerCase()==="k"&&(L.metaKey||L.ctrlKey)||!$(L)&&L.key==="/")&&(L.preventDefault(),v(),T())},T=()=>{window.removeEventListener("keydown",P)};window.addEventListener("keydown",P),Q(T)});function v(){n.value||(n.value=!0,setTimeout(p,16))}function p(){const P=new Event("keydown");P.key="k",P.metaKey=!0,window.dispatchEvent(P),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||p()},16)}function $(P){const T=P.target,L=T.tagName;return T.isContentEditable||L==="INPUT"||L==="SELECT"||L==="TEXTAREA"}const S=I(!1),y="algolia";return(P,T)=>{var L;return a(),u("div",hs,[r(y)==="local"?(a(),u(A,{key:0},[S.value?(a(),k(r(e),{key:0,onClose:T[0]||(T[0]=C=>S.value=!1)})):h("",!0),d("div",ms,[_(be,{onClick:T[1]||(T[1]=C=>S.value=!0)})])],64)):r(y)==="algolia"?(a(),u(A,{key:1},[n.value?(a(),k(r(t),{key:0,algolia:((L=r(o).search)==null?void 0:L.options)??r(o).algolia,onVnodeBeforeMount:T[2]||(T[2]=C=>i.value=!0)},null,8,["algolia"])):h("",!0),i.value?h("",!0):(a(),u("div",_s,[_(be,{onClick:v})]))],64)):h("",!0)])}}}),bs=m({__name:"VPNavBarSocialLinks",setup(s){const{theme:e}=V();return(t,o)=>r(e).socialLinks?(a(),k(ke,{key:0,class:"VPNavBarSocialLinks",links:r(e).socialLinks},null,8,["links"])):h("",!0)}}),gs=b(bs,[["__scopeId","data-v-3d39eb27"]]),$s=["href","rel","target"],ys=["innerHTML"],Ps={key:2},Ls=m({__name:"VPNavBarTitle",setup(s){const{site:e,theme:t}=V(),{hasSidebar:o}=O(),{currentLang:n}=R(),i=g(()=>{var p;return typeof t.value.logoLink=="string"?t.value.logoLink:(p=t.value.logoLink)==null?void 0:p.link}),l=g(()=>{var p;return typeof t.value.logoLink=="string"||(p=t.value.logoLink)==null?void 0:p.rel}),v=g(()=>{var p;return typeof t.value.logoLink=="string"||(p=t.value.logoLink)==null?void 0:p.target});return(p,$)=>(a(),u("div",{class:w(["VPNavBarTitle",{"has-sidebar":r(o)}])},[d("a",{class:"title",href:i.value??r(pe)(r(n).link),rel:l.value,target:v.value},[c(p.$slots,"nav-bar-title-before",{},void 0,!0),r(t).logo?(a(),k(Y,{key:0,class:"logo",image:r(t).logo},null,8,["image"])):h("",!0),r(t).siteTitle?(a(),u("span",{key:1,innerHTML:r(t).siteTitle},null,8,ys)):r(t).siteTitle===void 0?(a(),u("span",Ps,M(r(e).title),1)):h("",!0),c(p.$slots,"nav-bar-title-after",{},void 0,!0)],8,$s)],2))}}),Vs=b(Ls,[["__scopeId","data-v-c4b00b0c"]]),Ss={class:"items"},Ts={class:"title"},Ns=m({__name:"VPNavBarTranslations",setup(s){const{theme:e}=V(),{localeLinks:t,currentLang:o}=R({correspondingLink:!0});return(n,i)=>r(t).length&&r(o).label?(a(),k(_e,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:r(e).langMenuLabel||"Change language"},{default:f(()=>[d("div",Ss,[d("p",Ts,M(r(o).label),1),(a(!0),u(A,null,H(r(t),l=>(a(),k(ne,{key:l.link,item:l},null,8,["item"]))),128))])]),_:1},8,["label"])):h("",!0)}}),Is=b(Ns,[["__scopeId","data-v-6593d95a"]]),ws={class:"wrapper"},Ms={class:"container"},Cs={class:"title"},As={class:"content"},Hs={class:"content-body"},Bs=m({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(s){const e=s,{y:t}=Se(),{hasSidebar:o}=O(),{frontmatter:n}=V(),i=I({});return ve(()=>{i.value={"has-sidebar":o.value,home:n.value.layout==="home",top:t.value===0,"screen-open":e.isScreenOpen}}),(l,v)=>(a(),u("div",{class:w(["VPNavBar",i.value])},[d("div",ws,[d("div",Ms,[d("div",Cs,[_(Vs,null,{"nav-bar-title-before":f(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),d("div",As,[d("div",Hs,[c(l.$slots,"nav-bar-content-before",{},void 0,!0),_(ks,{class:"search"}),_(us,{class:"menu"}),_(Is,{class:"translations"}),_(bo,{class:"appearance"}),_(gs,{class:"social-links"}),_(es,{class:"extra"}),c(l.$slots,"nav-bar-content-after",{},void 0,!0),_(os,{class:"hamburger",active:l.isScreenOpen,onClick:v[0]||(v[0]=p=>l.$emit("toggle-screen"))},null,8,["active"])])])])]),v[1]||(v[1]=d("div",{class:"divider"},[d("div",{class:"divider-line"})],-1))],2))}}),Es=b(Bs,[["__scopeId","data-v-0fc11f70"]]),Fs={key:0,class:"VPNavScreenAppearance"},Ds={class:"text"},Os=m({__name:"VPNavScreenAppearance",setup(s){const{site:e,theme:t}=V();return(o,n)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",Fs,[d("p",Ds,M(r(t).darkModeSwitchLabel||"Appearance"),1),_(he)])):h("",!0)}}),Gs=b(Os,[["__scopeId","data-v-5afdc38d"]]),Us=["innerHTML"],js=m({__name:"VPNavScreenMenuLink",props:{item:{}},setup(s){const e=ee("close-screen");return(t,o)=>(a(),k(F,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:r(e)},{default:f(()=>[d("span",{innerHTML:t.item.text},null,8,Us)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),zs=b(js,[["__scopeId","data-v-cf15a40f"]]),qs=["innerHTML"],Ks=m({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(s){const e=ee("close-screen");return(t,o)=>(a(),k(F,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:r(e)},{default:f(()=>[d("span",{innerHTML:t.item.text},null,8,qs)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),He=b(Ks,[["__scopeId","data-v-d4fb8760"]]),Ws={class:"VPNavScreenMenuGroupSection"},Rs={key:0,class:"title"},Js=m({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(s){return(e,t)=>(a(),u("div",Ws,[e.text?(a(),u("p",Rs,M(e.text),1)):h("",!0),(a(!0),u(A,null,H(e.items,o=>(a(),k(He,{key:o.text,item:o},null,8,["item"]))),128))]))}}),Ys=b(Js,[["__scopeId","data-v-e87a0a05"]]),Xs=["aria-controls","aria-expanded"],Qs=["innerHTML"],Zs=["id"],xs={key:0,class:"item"},ea={key:1,class:"item"},ta={key:2,class:"group"},na=m({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(s){const e=s,t=I(!1),o=g(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function n(){t.value=!t.value}return(i,l)=>(a(),u("div",{class:w(["VPNavScreenMenuGroup",{open:t.value}])},[d("button",{class:"button","aria-controls":o.value,"aria-expanded":t.value,onClick:n},[d("span",{class:"button-text",innerHTML:i.text},null,8,Qs),l[0]||(l[0]=d("span",{class:"vpi-plus button-icon"},null,-1))],8,Xs),d("div",{id:o.value,class:"items"},[(a(!0),u(A,null,H(i.items,v=>(a(),u(A,{key:JSON.stringify(v)},["link"in v?(a(),u("div",xs,[_(He,{item:v},null,8,["item"])])):"component"in v?(a(),u("div",ea,[(a(),k(E(v.component),U({ref_for:!0},v.props,{"screen-menu":""}),null,16))])):(a(),u("div",ta,[_(Ys,{text:v.text,items:v.items},null,8,["text","items"])]))],64))),128))],8,Zs)],2))}}),oa=b(na,[["__scopeId","data-v-24f2119c"]]),sa={key:0,class:"VPNavScreenMenu"},aa=m({__name:"VPNavScreenMenu",setup(s){const{theme:e}=V();return(t,o)=>r(e).nav?(a(),u("nav",sa,[(a(!0),u(A,null,H(r(e).nav,n=>(a(),u(A,{key:JSON.stringify(n)},["link"in n?(a(),k(zs,{key:0,item:n},null,8,["item"])):"component"in n?(a(),k(E(n.component),U({key:1,ref_for:!0},n.props,{"screen-menu":""}),null,16)):(a(),k(oa,{key:2,text:n.text||"",items:n.items},null,8,["text","items"]))],64))),128))])):h("",!0)}}),ra=m({__name:"VPNavScreenSocialLinks",setup(s){const{theme:e}=V();return(t,o)=>r(e).socialLinks?(a(),k(ke,{key:0,class:"VPNavScreenSocialLinks",links:r(e).socialLinks},null,8,["links"])):h("",!0)}}),ia={class:"list"},la=m({__name:"VPNavScreenTranslations",setup(s){const{localeLinks:e,currentLang:t}=R({correspondingLink:!0}),o=I(!1);function n(){o.value=!o.value}return(i,l)=>r(e).length&&r(t).label?(a(),u("div",{key:0,class:w(["VPNavScreenTranslations",{open:o.value}])},[d("button",{class:"title",onClick:n},[l[0]||(l[0]=d("span",{class:"vpi-languages icon lang"},null,-1)),z(" "+M(r(t).label)+" ",1),l[1]||(l[1]=d("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),d("ul",ia,[(a(!0),u(A,null,H(r(e),v=>(a(),u("li",{key:v.link,class:"item"},[_(F,{class:"link",href:v.link},{default:f(()=>[z(M(v.text),1)]),_:2},1032,["href"])]))),128))])],2)):h("",!0)}}),ca=b(la,[["__scopeId","data-v-590b4fe1"]]),ua={class:"container"},da=m({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(s){const e=I(null),t=Te(te?document.body:null);return(o,n)=>(a(),k(ue,{name:"fade",onEnter:n[0]||(n[0]=i=>t.value=!0),onAfterLeave:n[1]||(n[1]=i=>t.value=!1)},{default:f(()=>[o.open?(a(),u("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[d("div",ua,[c(o.$slots,"nav-screen-content-before",{},void 0,!0),_(aa,{class:"menu"}),_(ca,{class:"translations"}),_(Gs,{class:"appearance"}),_(ra,{class:"social-links"}),c(o.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):h("",!0)]),_:3}))}}),va=b(da,[["__scopeId","data-v-8eb87e4b"]]),pa={key:0,class:"VPNav"},fa=m({__name:"VPNav",setup(s){const{isScreenOpen:e,closeScreen:t,toggleScreen:o}=lo(),{frontmatter:n}=V(),i=g(()=>n.value.navbar!==!1);return Ne("close-screen",t),X(()=>{te&&document.documentElement.classList.toggle("hide-nav",!i.value)}),(l,v)=>i.value?(a(),u("header",pa,[_(Es,{"is-screen-open":r(e),onToggleScreen:r(o)},{"nav-bar-title-before":f(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[c(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[c(l.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),_(va,{open:r(e)},{"nav-screen-content-before":f(()=>[c(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[c(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):h("",!0)}}),ha=b(fa,[["__scopeId","data-v-82753295"]]),ma=["role","tabindex"],_a={key:1,class:"items"},ka=m({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(s){const e=s,{collapsed:t,collapsible:o,isLink:n,isActiveLink:i,hasActiveLink:l,hasChildren:v,toggle:p}=dt(g(()=>e.item)),$=g(()=>v.value?"section":"div"),S=g(()=>n.value?"a":"div"),y=g(()=>v.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),P=g(()=>n.value?void 0:"button"),T=g(()=>[[`level-${e.depth}`],{collapsible:o.value},{collapsed:t.value},{"is-link":n.value},{"is-active":i.value},{"has-active":l.value}]);function L(N){"key"in N&&N.key!=="Enter"||!e.item.link&&p()}function C(){e.item.link&&p()}return(N,B)=>{const G=K("VPSidebarItem",!0);return a(),k(E($.value),{class:w(["VPSidebarItem",T.value])},{default:f(()=>[N.item.text?(a(),u("div",U({key:0,class:"item",role:P.value},ze(N.item.items?{click:L,keydown:L}:{},!0),{tabindex:N.item.items&&0}),[B[1]||(B[1]=d("div",{class:"indicator"},null,-1)),N.item.link?(a(),k(F,{key:0,tag:S.value,class:"link",href:N.item.link,rel:N.item.rel,target:N.item.target},{default:f(()=>[(a(),k(E(y.value),{class:"text",innerHTML:N.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),k(E(y.value),{key:1,class:"text",innerHTML:N.item.text},null,8,["innerHTML"])),N.item.collapsed!=null&&N.item.items&&N.item.items.length?(a(),u("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:C,onKeydown:qe(C,["enter"]),tabindex:"0"},B[0]||(B[0]=[d("span",{class:"vpi-chevron-right caret-icon"},null,-1)]),32)):h("",!0)],16,ma)):h("",!0),N.item.items&&N.item.items.length?(a(),u("div",_a,[N.depth<5?(a(!0),u(A,{key:0},H(N.item.items,W=>(a(),k(G,{key:W.text,item:W,depth:N.depth+1},null,8,["item","depth"]))),128)):h("",!0)])):h("",!0)]),_:1},8,["class"])}}}),ba=b(ka,[["__scopeId","data-v-b1de5742"]]),ga=m({__name:"VPSidebarGroup",props:{items:{}},setup(s){const e=I(!0);let t=null;return j(()=>{t=setTimeout(()=>{t=null,e.value=!1},300)}),Ke(()=>{t!=null&&(clearTimeout(t),t=null)}),(o,n)=>(a(!0),u(A,null,H(o.items,i=>(a(),u("div",{key:i.text,class:w(["group",{"no-transition":e.value}])},[_(ba,{item:i,depth:0},null,8,["item"])],2))),128))}}),$a=b(ga,[["__scopeId","data-v-3e75e911"]]),ya={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Pa=m({__name:"VPSidebar",props:{open:{type:Boolean}},setup(s){const{sidebarGroups:e,hasSidebar:t}=O(),o=s,n=I(null),i=Te(te?document.body:null);D([o,n],()=>{var v;o.open?(i.value=!0,(v=n.value)==null||v.focus()):i.value=!1},{immediate:!0,flush:"post"});const l=I(0);return D(e,()=>{l.value+=1},{deep:!0}),(v,p)=>r(t)?(a(),u("aside",{key:0,class:w(["VPSidebar",{open:v.open}]),ref_key:"navEl",ref:n,onClick:p[0]||(p[0]=We(()=>{},["stop"]))},[p[2]||(p[2]=d("div",{class:"curtain"},null,-1)),d("nav",ya,[p[1]||(p[1]=d("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),c(v.$slots,"sidebar-nav-before",{},void 0,!0),(a(),k($a,{items:r(e),key:l.value},null,8,["items"])),c(v.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):h("",!0)}}),La=b(Pa,[["__scopeId","data-v-3a2b9ffb"]]),Va=m({__name:"VPSkipLink",setup(s){const{theme:e}=V(),t=x(),o=I();D(()=>t.path,()=>o.value.focus());function n({target:i}){const l=document.getElementById(decodeURIComponent(i.hash).slice(1));if(l){const v=()=>{l.removeAttribute("tabindex"),l.removeEventListener("blur",v)};l.setAttribute("tabindex","-1"),l.addEventListener("blur",v),l.focus(),window.scrollTo(0,0)}}return(i,l)=>(a(),u(A,null,[d("span",{ref_key:"backToTop",ref:o,tabindex:"-1"},null,512),d("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:n},M(r(e).skipToContentLabel||"Skip to content"),1)],64))}}),Sa=b(Va,[["__scopeId","data-v-31227e8f"]]),Ta=m({__name:"Layout",setup(s){const{isOpen:e,open:t,close:o}=O(),n=x();D(()=>n.path,o),ut(e,o);const{frontmatter:i}=V(),l=Re(),v=g(()=>!!l["home-hero-image"]);return Ne("hero-image-slot-exists",v),(p,$)=>{const S=K("Content");return r(i).layout!==!1?(a(),u("div",{key:0,class:w(["Layout",r(i).pageClass])},[c(p.$slots,"layout-top",{},void 0,!0),_(Sa),_(Qe,{class:"backdrop",show:r(e),onClick:r(o)},null,8,["show","onClick"]),_(ha,null,{"nav-bar-title-before":f(()=>[c(p.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(p.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[c(p.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[c(p.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":f(()=>[c(p.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[c(p.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),_(io,{open:r(e),onOpenMenu:r(t)},null,8,["open","onOpenMenu"]),_(La,{open:r(e)},{"sidebar-nav-before":f(()=>[c(p.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":f(()=>[c(p.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),_(Kn,null,{"page-top":f(()=>[c(p.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[c(p.$slots,"page-bottom",{},void 0,!0)]),"not-found":f(()=>[c(p.$slots,"not-found",{},void 0,!0)]),"home-hero-before":f(()=>[c(p.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[c(p.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(p.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(p.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(p.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(p.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[c(p.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[c(p.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[c(p.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":f(()=>[c(p.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[c(p.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[c(p.$slots,"doc-after",{},void 0,!0)]),"doc-top":f(()=>[c(p.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[c(p.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":f(()=>[c(p.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[c(p.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[c(p.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(p.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(p.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(p.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),_(Xn),c(p.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),k(S,{key:1}))}}}),Na=b(Ta,[["__scopeId","data-v-13c0e93a"]]),Ia={},wa={class:"VPTeamPageTitle"},Ma={key:0,class:"title"},Ca={key:1,class:"lead"};function Aa(s,e){return a(),u("div",wa,[s.$slots.title?(a(),u("h1",Ma,[c(s.$slots,"title",{},void 0,!0)])):h("",!0),s.$slots.lead?(a(),u("p",Ca,[c(s.$slots,"lead",{},void 0,!0)])):h("",!0)])}const Ba=b(Ia,[["render",Aa],["__scopeId","data-v-ca259fcb"]]),Ea={Layout:Na,enhanceApp:({app:s})=>{s.component("Badge",Je)}};export{Ba as V,vt as a,Ea as t,V as u}; +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/ui-custom.D0LrQO1W.js","assets/chunks/framework.CnuuF8_c.js","assets/chunks/VPAlgoliaSearchBox.B0RF9aTI.js"])))=>i.map(i=>d[i]); +import{d as m,c as u,r as c,n as w,o as a,a as z,t as M,b as k,w as f,T as ue,e as h,_ as b,u as Be,i as Ee,f as Fe,g as de,h as g,j as d,k as r,l as q,m as re,p as I,q as D,s as X,v as j,x as Q,y as ve,z as De,A as Oe,F as A,B as H,C as K,D as ge,E as Z,G as _,H as $e,I as ye,J as E,K as Pe,L as x,M as U,N as ee,O as Ge,P as Le,Q as Ue,R as Ve,S as Se,U as te,V as je,W as Te,X as Ne,Y as ze,Z as qe,$ as Ke,a0 as We,a1 as Re}from"./framework.CnuuF8_c.js";const Je=m({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(s){return(e,t)=>(a(),u("span",{class:w(["VPBadge",e.type])},[c(e.$slots,"default",{},()=>[z(M(e.text),1)])],2))}}),Ye={key:0,class:"VPBackdrop"},Xe=m({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(s){return(e,t)=>(a(),k(ue,{name:"fade"},{default:f(()=>[e.show?(a(),u("div",Ye)):h("",!0)]),_:1}))}}),Qe=b(Xe,[["__scopeId","data-v-f59142b7"]]),V=Be;function Ze(s,e){let t,o=!1;return()=>{t&&clearTimeout(t),o?t=setTimeout(s,e):(s(),(o=!0)&&setTimeout(()=>o=!1,e))}}function ie(s){return s.startsWith("/")?s:`/${s}`}function pe(s){const{pathname:e,search:t,hash:o,protocol:n}=new URL(s,"http://a.com");if(Ee(s)||s.startsWith("#")||!n.startsWith("http")||!Fe(e))return s;const{site:i}=V(),l=e.endsWith("/")||e.endsWith(".html")?s:s.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,i.value.cleanUrls?"":".html")}${t}${o}`);return de(l)}function R({correspondingLink:s=!1}={}){const{site:e,localeIndex:t,page:o,theme:n,hash:i}=V(),l=g(()=>{var p,$;return{label:(p=e.value.locales[t.value])==null?void 0:p.label,link:(($=e.value.locales[t.value])==null?void 0:$.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:g(()=>Object.entries(e.value.locales).flatMap(([p,$])=>l.value.label===$.label?[]:{text:$.label,link:xe($.link||(p==="root"?"/":`/${p}/`),n.value.i18nRouting!==!1&&s,o.value.relativePath.slice(l.value.link.length-1),!e.value.cleanUrls)+i.value})),currentLang:l}}function xe(s,e,t,o){return e?s.replace(/\/$/,"")+ie(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,o?".html":"")):s}const et={class:"NotFound"},tt={class:"code"},nt={class:"title"},ot={class:"quote"},st={class:"action"},at=["href","aria-label"],rt=m({__name:"NotFound",setup(s){const{theme:e}=V(),{currentLang:t}=R();return(o,n)=>{var i,l,v,p,$;return a(),u("div",et,[d("p",tt,M(((i=r(e).notFound)==null?void 0:i.code)??"404"),1),d("h1",nt,M(((l=r(e).notFound)==null?void 0:l.title)??"PAGE NOT FOUND"),1),n[0]||(n[0]=d("div",{class:"divider"},null,-1)),d("blockquote",ot,M(((v=r(e).notFound)==null?void 0:v.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),d("div",st,[d("a",{class:"link",href:r(de)(r(t).link),"aria-label":((p=r(e).notFound)==null?void 0:p.linkLabel)??"go to home"},M((($=r(e).notFound)==null?void 0:$.linkText)??"Take me home"),9,at)])])}}}),it=b(rt,[["__scopeId","data-v-0bfa2e64"]]);function Ie(s,e){if(Array.isArray(s))return J(s);if(s==null)return[];e=ie(e);const t=Object.keys(s).sort((n,i)=>i.split("/").length-n.split("/").length).find(n=>e.startsWith(ie(n))),o=t?s[t]:[];return Array.isArray(o)?J(o):J(o.items,o.base)}function lt(s){const e=[];let t=0;for(const o in s){const n=s[o];if(n.items){t=e.push(n);continue}e[t]||e.push({items:[]}),e[t].items.push(n)}return e}function ct(s){const e=[];function t(o){for(const n of o)n.text&&n.link&&e.push({text:n.text,link:n.link,docFooterText:n.docFooterText}),n.items&&t(n.items)}return t(s),e}function le(s,e){return Array.isArray(e)?e.some(t=>le(s,t)):q(s,e.link)?!0:e.items?le(s,e.items):!1}function J(s,e){return[...s].map(t=>{const o={...t},n=o.base||e;return n&&o.link&&(o.link=n+o.link),o.items&&(o.items=J(o.items,n)),o})}function O(){const{frontmatter:s,page:e,theme:t}=V(),o=re("(min-width: 960px)"),n=I(!1),i=g(()=>{const C=t.value.sidebar,N=e.value.relativePath;return C?Ie(C,N):[]}),l=I(i.value);D(i,(C,N)=>{JSON.stringify(C)!==JSON.stringify(N)&&(l.value=i.value)});const v=g(()=>s.value.sidebar!==!1&&l.value.length>0&&s.value.layout!=="home"),p=g(()=>$?s.value.aside==null?t.value.aside==="left":s.value.aside==="left":!1),$=g(()=>s.value.layout==="home"?!1:s.value.aside!=null?!!s.value.aside:t.value.aside!==!1),S=g(()=>v.value&&o.value),y=g(()=>v.value?lt(l.value):[]);function P(){n.value=!0}function T(){n.value=!1}function L(){n.value?T():P()}return{isOpen:n,sidebar:l,sidebarGroups:y,hasSidebar:v,hasAside:$,leftAside:p,isSidebarEnabled:S,open:P,close:T,toggle:L}}function ut(s,e){let t;X(()=>{t=s.value?document.activeElement:void 0}),j(()=>{window.addEventListener("keyup",o)}),Q(()=>{window.removeEventListener("keyup",o)});function o(n){n.key==="Escape"&&s.value&&(e(),t==null||t.focus())}}function dt(s){const{page:e,hash:t}=V(),o=I(!1),n=g(()=>s.value.collapsed!=null),i=g(()=>!!s.value.link),l=I(!1),v=()=>{l.value=q(e.value.relativePath,s.value.link)};D([e,s,t],v),j(v);const p=g(()=>l.value?!0:s.value.items?le(e.value.relativePath,s.value.items):!1),$=g(()=>!!(s.value.items&&s.value.items.length));X(()=>{o.value=!!(n.value&&s.value.collapsed)}),ve(()=>{(l.value||p.value)&&(o.value=!1)});function S(){n.value&&(o.value=!o.value)}return{collapsed:o,collapsible:n,isLink:i,isActiveLink:l,hasActiveLink:p,hasChildren:$,toggle:S}}function vt(){const{hasSidebar:s}=O(),e=re("(min-width: 960px)"),t=re("(min-width: 1280px)");return{isAsideEnabled:g(()=>!t.value&&!e.value?!1:s.value?t.value:e.value)}}const pt=/\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/,ce=[];function we(s){return typeof s.outline=="object"&&!Array.isArray(s.outline)&&s.outline.label||s.outlineTitle||"On this page"}function fe(s){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const o=Number(t.tagName[1]);return{element:t,title:ft(t),link:"#"+t.id,level:o}});return ht(e,s)}function ft(s){let e="";for(const t of s.childNodes)if(t.nodeType===1){if(pt.test(t.className))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function ht(s,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[o,n]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;return kt(s,o,n)}function mt(s,e){const{isAsideEnabled:t}=vt(),o=Ze(i,100);let n=null;j(()=>{requestAnimationFrame(i),window.addEventListener("scroll",o)}),De(()=>{l(location.hash)}),Q(()=>{window.removeEventListener("scroll",o)});function i(){if(!t.value)return;const v=window.scrollY,p=window.innerHeight,$=document.body.offsetHeight,S=Math.abs(v+p-$)<1,y=ce.map(({element:T,link:L})=>({link:L,top:_t(T)})).filter(({top:T})=>!Number.isNaN(T)).sort((T,L)=>T.top-L.top);if(!y.length){l(null);return}if(v<1){l(null);return}if(S){l(y[y.length-1].link);return}let P=null;for(const{link:T,top:L}of y){if(L>v+Oe()+4)break;P=T}l(P)}function l(v){n&&n.classList.remove("active"),v==null?n=null:n=s.value.querySelector(`a[href="${decodeURIComponent(v)}"]`);const p=n;p?(p.classList.add("active"),e.value.style.top=p.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function _t(s){let e=0;for(;s!==document.body;){if(s===null)return NaN;e+=s.offsetTop,s=s.offsetParent}return e}function kt(s,e,t){ce.length=0;const o=[],n=[];return s.forEach(i=>{const l={...i,children:[]};let v=n[n.length-1];for(;v&&v.level>=l.level;)n.pop(),v=n[n.length-1];if(l.element.classList.contains("ignore-header")||v&&"shouldIgnore"in v){n.push({level:l.level,shouldIgnore:!0});return}l.level>t||l.level{const n=K("VPDocOutlineItem",!0);return a(),u("ul",{class:w(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),u(A,null,H(t.headers,({children:i,link:l,title:v})=>(a(),u("li",null,[d("a",{class:"outline-link",href:l,onClick:e,title:v},M(v),9,bt),i!=null&&i.length?(a(),k(n,{key:0,headers:i},null,8,["headers"])):h("",!0)]))),256))],2)}}}),Me=b(gt,[["__scopeId","data-v-24355f8a"]]),$t={class:"content"},yt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},Pt=m({__name:"VPDocAsideOutline",setup(s){const{frontmatter:e,theme:t}=V(),o=ge([]);Z(()=>{o.value=fe(e.value.outline??t.value.outline)});const n=I(),i=I();return mt(n,i),(l,v)=>(a(),u("nav",{"aria-labelledby":"doc-outline-aria-label",class:w(["VPDocAsideOutline",{"has-outline":o.value.length>0}]),ref_key:"container",ref:n},[d("div",$t,[d("div",{class:"outline-marker",ref_key:"marker",ref:i},null,512),d("div",yt,M(r(we)(r(t))),1),_(Me,{headers:o.value,root:!0},null,8,["headers"])])],2))}}),Lt=b(Pt,[["__scopeId","data-v-5791035b"]]),Vt={class:"VPDocAsideCarbonAds"},St=m({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(s){const e=$e(()=>ye(()=>import("./ui-custom.D0LrQO1W.js"),__vite__mapDeps([0,1])));return(t,o)=>(a(),u("div",Vt,[_(r(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Tt={class:"VPDocAside"},Nt=m({__name:"VPDocAside",setup(s){const{theme:e}=V();return(t,o)=>(a(),u("div",Tt,[c(t.$slots,"aside-top",{},void 0,!0),c(t.$slots,"aside-outline-before",{},void 0,!0),_(Lt),c(t.$slots,"aside-outline-after",{},void 0,!0),o[0]||(o[0]=d("div",{class:"spacer"},null,-1)),c(t.$slots,"aside-ads-before",{},void 0,!0),r(e).carbonAds?(a(),k(St,{key:0,"carbon-ads":r(e).carbonAds},null,8,["carbon-ads"])):h("",!0),c(t.$slots,"aside-ads-after",{},void 0,!0),c(t.$slots,"aside-bottom",{},void 0,!0)]))}}),It=b(Nt,[["__scopeId","data-v-12c88fe8"]]);function wt(){const{theme:s,page:e}=V();return g(()=>{const{text:t="Edit this page",pattern:o=""}=s.value.editLink||{};let n;return typeof o=="function"?n=o(e.value):n=o.replace(/:path/g,e.value.filePath),{url:n,text:t}})}function Mt(){const{page:s,theme:e,frontmatter:t}=V();return g(()=>{var $,S,y,P,T,L,C,N;const o=Ie(e.value.sidebar,s.value.relativePath),n=ct(o),i=Ct(n,B=>B.link.replace(/[?#].*$/,"")),l=i.findIndex(B=>q(s.value.relativePath,B.link)),v=(($=e.value.docFooter)==null?void 0:$.prev)===!1&&!t.value.prev||t.value.prev===!1,p=((S=e.value.docFooter)==null?void 0:S.next)===!1&&!t.value.next||t.value.next===!1;return{prev:v?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((y=i[l-1])==null?void 0:y.docFooterText)??((P=i[l-1])==null?void 0:P.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((T=i[l-1])==null?void 0:T.link)},next:p?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((L=i[l+1])==null?void 0:L.docFooterText)??((C=i[l+1])==null?void 0:C.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((N=i[l+1])==null?void 0:N.link)}}})}function Ct(s,e){const t=new Set;return s.filter(o=>{const n=e(o);return t.has(n)?!1:t.add(n)})}const F=m({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(s){const e=s,t=g(()=>e.tag??(e.href?"a":"span")),o=g(()=>e.href&&Pe.test(e.href)||e.target==="_blank");return(n,i)=>(a(),k(E(t.value),{class:w(["VPLink",{link:n.href,"vp-external-link-icon":o.value,"no-icon":n.noIcon}]),href:n.href?r(pe)(n.href):void 0,target:n.target??(o.value?"_blank":void 0),rel:n.rel??(o.value?"noreferrer":void 0)},{default:f(()=>[c(n.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),At={class:"VPLastUpdated"},Ht=["datetime"],Bt=m({__name:"VPDocFooterLastUpdated",setup(s){const{theme:e,page:t,lang:o}=V(),n=g(()=>new Date(t.value.lastUpdated)),i=g(()=>n.value.toISOString()),l=I("");return j(()=>{X(()=>{var v,p,$;l.value=new Intl.DateTimeFormat((p=(v=e.value.lastUpdated)==null?void 0:v.formatOptions)!=null&&p.forceLocale?o.value:void 0,(($=e.value.lastUpdated)==null?void 0:$.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(n.value)})}),(v,p)=>{var $;return a(),u("p",At,[z(M((($=r(e).lastUpdated)==null?void 0:$.text)||r(e).lastUpdatedText||"Last updated")+": ",1),d("time",{datetime:i.value},M(l.value),9,Ht)])}}}),Et=b(Bt,[["__scopeId","data-v-7a07e477"]]),Ft={key:0,class:"VPDocFooter"},Dt={key:0,class:"edit-info"},Ot={key:0,class:"edit-link"},Gt={key:1,class:"last-updated"},Ut={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},jt={class:"pager"},zt=["innerHTML"],qt=["innerHTML"],Kt={class:"pager"},Wt=["innerHTML"],Rt=["innerHTML"],Jt=m({__name:"VPDocFooter",setup(s){const{theme:e,page:t,frontmatter:o}=V(),n=wt(),i=Mt(),l=g(()=>e.value.editLink&&o.value.editLink!==!1),v=g(()=>t.value.lastUpdated),p=g(()=>l.value||v.value||i.value.prev||i.value.next);return($,S)=>{var y,P,T,L;return p.value?(a(),u("footer",Ft,[c($.$slots,"doc-footer-before",{},void 0,!0),l.value||v.value?(a(),u("div",Dt,[l.value?(a(),u("div",Ot,[_(F,{class:"edit-link-button",href:r(n).url,"no-icon":!0},{default:f(()=>[S[0]||(S[0]=d("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),z(" "+M(r(n).text),1)]),_:1,__:[0]},8,["href"])])):h("",!0),v.value?(a(),u("div",Gt,[_(Et)])):h("",!0)])):h("",!0),(y=r(i).prev)!=null&&y.link||(P=r(i).next)!=null&&P.link?(a(),u("nav",Ut,[S[1]||(S[1]=d("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),d("div",jt,[(T=r(i).prev)!=null&&T.link?(a(),k(F,{key:0,class:"pager-link prev",href:r(i).prev.link},{default:f(()=>{var C;return[d("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.prev)||"Previous page"},null,8,zt),d("span",{class:"title",innerHTML:r(i).prev.text},null,8,qt)]}),_:1},8,["href"])):h("",!0)]),d("div",Kt,[(L=r(i).next)!=null&&L.link?(a(),k(F,{key:0,class:"pager-link next",href:r(i).next.link},{default:f(()=>{var C;return[d("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.next)||"Next page"},null,8,Wt),d("span",{class:"title",innerHTML:r(i).next.text},null,8,Rt)]}),_:1},8,["href"])):h("",!0)])])):h("",!0)])):h("",!0)}}}),Yt=b(Jt,[["__scopeId","data-v-03820f5f"]]),Xt={class:"container"},Qt={class:"aside-container"},Zt={class:"aside-content"},xt={class:"content"},en={class:"content-container"},tn={class:"main"},nn=m({__name:"VPDoc",setup(s){const{theme:e}=V(),t=x(),{hasSidebar:o,hasAside:n,leftAside:i}=O(),l=g(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(v,p)=>{const $=K("Content");return a(),u("div",{class:w(["VPDoc",{"has-sidebar":r(o),"has-aside":r(n)}])},[c(v.$slots,"doc-top",{},void 0,!0),d("div",Xt,[r(n)?(a(),u("div",{key:0,class:w(["aside",{"left-aside":r(i)}])},[p[0]||(p[0]=d("div",{class:"aside-curtain"},null,-1)),d("div",Qt,[d("div",Zt,[_(It,null,{"aside-top":f(()=>[c(v.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[c(v.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[c(v.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(v.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(v.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(v.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):h("",!0),d("div",xt,[d("div",en,[c(v.$slots,"doc-before",{},void 0,!0),d("main",tn,[_($,{class:w(["vp-doc",[l.value,r(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),_(Yt,null,{"doc-footer-before":f(()=>[c(v.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),c(v.$slots,"doc-after",{},void 0,!0)])])]),c(v.$slots,"doc-bottom",{},void 0,!0)],2)}}}),on=b(nn,[["__scopeId","data-v-a2dbfda7"]]),sn=m({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(s){const e=s,t=g(()=>e.href&&Pe.test(e.href)),o=g(()=>e.tag||(e.href?"a":"button"));return(n,i)=>(a(),k(E(o.value),{class:w(["VPButton",[n.size,n.theme]]),href:n.href?r(pe)(n.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:f(()=>[z(M(n.text),1)]),_:1},8,["class","href","target","rel"]))}}),an=b(sn,[["__scopeId","data-v-cb8c4fca"]]),rn=["src","alt"],ln=m({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(s){return(e,t)=>{const o=K("VPImage",!0);return e.image?(a(),u(A,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),u("img",U({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:r(de)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,rn)):(a(),u(A,{key:1},[_(o,U({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),_(o,U({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):h("",!0)}}}),Y=b(ln,[["__scopeId","data-v-8ebc39c0"]]),cn={class:"container"},un={class:"main"},dn={class:"heading"},vn=["innerHTML"],pn=["innerHTML"],fn=["innerHTML"],hn={key:0,class:"actions"},mn={key:0,class:"image"},_n={class:"image-container"},kn=m({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(s){const e=ee("hero-image-slot-exists");return(t,o)=>(a(),u("div",{class:w(["VPHero",{"has-image":t.image||r(e)}])},[d("div",cn,[d("div",un,[c(t.$slots,"home-hero-info-before",{},void 0,!0),c(t.$slots,"home-hero-info",{},()=>[d("h1",dn,[t.name?(a(),u("span",{key:0,innerHTML:t.name,class:"name clip"},null,8,vn)):h("",!0),t.text?(a(),u("span",{key:1,innerHTML:t.text,class:"text"},null,8,pn)):h("",!0)]),t.tagline?(a(),u("p",{key:0,innerHTML:t.tagline,class:"tagline"},null,8,fn)):h("",!0)],!0),c(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),u("div",hn,[(a(!0),u(A,null,H(t.actions,n=>(a(),u("div",{key:n.link,class:"action"},[_(an,{tag:"a",size:"medium",theme:n.theme,text:n.text,href:n.link,target:n.target,rel:n.rel},null,8,["theme","text","href","target","rel"])]))),128))])):h("",!0),c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||r(e)?(a(),u("div",mn,[d("div",_n,[o[0]||(o[0]=d("div",{class:"image-bg"},null,-1)),c(t.$slots,"home-hero-image",{},()=>[t.image?(a(),k(Y,{key:0,class:"image-src",image:t.image},null,8,["image"])):h("",!0)],!0)])])):h("",!0)])],2))}}),bn=b(kn,[["__scopeId","data-v-dd999c49"]]),gn=m({__name:"VPHomeHero",setup(s){const{frontmatter:e}=V();return(t,o)=>r(e).hero?(a(),k(bn,{key:0,class:"VPHomeHero",name:r(e).hero.name,text:r(e).hero.text,tagline:r(e).hero.tagline,image:r(e).hero.image,actions:r(e).hero.actions},{"home-hero-info-before":f(()=>[c(t.$slots,"home-hero-info-before")]),"home-hero-info":f(()=>[c(t.$slots,"home-hero-info")]),"home-hero-info-after":f(()=>[c(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":f(()=>[c(t.$slots,"home-hero-actions-after")]),"home-hero-image":f(()=>[c(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):h("",!0)}}),$n={class:"box"},yn={key:0,class:"icon"},Pn=["innerHTML"],Ln=["innerHTML"],Vn=["innerHTML"],Sn={key:4,class:"link-text"},Tn={class:"link-text-value"},Nn=m({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(s){return(e,t)=>(a(),k(F,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:f(()=>[d("article",$n,[typeof e.icon=="object"&&e.icon.wrap?(a(),u("div",yn,[_(Y,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),k(Y,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(a(),u("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Pn)):h("",!0),d("h2",{class:"title",innerHTML:e.title},null,8,Ln),e.details?(a(),u("p",{key:3,class:"details",innerHTML:e.details},null,8,Vn)):h("",!0),e.linkText?(a(),u("div",Sn,[d("p",Tn,[z(M(e.linkText)+" ",1),t[0]||(t[0]=d("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):h("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),In=b(Nn,[["__scopeId","data-v-c42fca83"]]),wn={key:0,class:"VPFeatures"},Mn={class:"container"},Cn={class:"items"},An=m({__name:"VPFeatures",props:{features:{}},setup(s){const e=s,t=g(()=>{const o=e.features.length;if(o){if(o===2)return"grid-2";if(o===3)return"grid-3";if(o%3===0)return"grid-6";if(o>3)return"grid-4"}else return});return(o,n)=>o.features?(a(),u("div",wn,[d("div",Mn,[d("div",Cn,[(a(!0),u(A,null,H(o.features,i=>(a(),u("div",{key:i.title,class:w(["item",[t.value]])},[_(In,{icon:i.icon,title:i.title,details:i.details,link:i.link,"link-text":i.linkText,rel:i.rel,target:i.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):h("",!0)}}),Hn=b(An,[["__scopeId","data-v-54b7d5ff"]]),Bn=m({__name:"VPHomeFeatures",setup(s){const{frontmatter:e}=V();return(t,o)=>r(e).features?(a(),k(Hn,{key:0,class:"VPHomeFeatures",features:r(e).features},null,8,["features"])):h("",!0)}}),En=m({__name:"VPHomeContent",setup(s){const{width:e}=Ge({initialWidth:0,includeScrollbar:!1});return(t,o)=>(a(),u("div",{class:"vp-doc container",style:Le(r(e)?{"--vp-offset":`calc(50% - ${r(e)/2}px)`}:{})},[c(t.$slots,"default",{},void 0,!0)],4))}}),Fn=b(En,[["__scopeId","data-v-430b30cb"]]),Dn=m({__name:"VPHome",setup(s){const{frontmatter:e,theme:t}=V();return(o,n)=>{const i=K("Content");return a(),u("div",{class:w(["VPHome",{"external-link-icon-enabled":r(t).externalLinkIcon}])},[c(o.$slots,"home-hero-before",{},void 0,!0),_(gn,null,{"home-hero-info-before":f(()=>[c(o.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(o.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(o.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(o.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(o.$slots,"home-hero-image",{},void 0,!0)]),_:3}),c(o.$slots,"home-hero-after",{},void 0,!0),c(o.$slots,"home-features-before",{},void 0,!0),_(Bn),c(o.$slots,"home-features-after",{},void 0,!0),r(e).markdownStyles!==!1?(a(),k(Fn,{key:0},{default:f(()=>[_(i)]),_:1})):(a(),k(i,{key:1}))],2)}}}),On=b(Dn,[["__scopeId","data-v-2464db7d"]]),Gn={},Un={class:"VPPage"};function jn(s,e){const t=K("Content");return a(),u("div",Un,[c(s.$slots,"page-top"),_(t),c(s.$slots,"page-bottom")])}const zn=b(Gn,[["render",jn]]),qn=m({__name:"VPContent",setup(s){const{page:e,frontmatter:t}=V(),{hasSidebar:o}=O();return(n,i)=>(a(),u("div",{class:w(["VPContent",{"has-sidebar":r(o),"is-home":r(t).layout==="home"}]),id:"VPContent"},[r(e).isNotFound?c(n.$slots,"not-found",{key:0},()=>[_(it)],!0):r(t).layout==="page"?(a(),k(zn,{key:1},{"page-top":f(()=>[c(n.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[c(n.$slots,"page-bottom",{},void 0,!0)]),_:3})):r(t).layout==="home"?(a(),k(On,{key:2},{"home-hero-before":f(()=>[c(n.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[c(n.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(n.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(n.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(n.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(n.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[c(n.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[c(n.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[c(n.$slots,"home-features-after",{},void 0,!0)]),_:3})):r(t).layout&&r(t).layout!=="doc"?(a(),k(E(r(t).layout),{key:3})):(a(),k(on,{key:4},{"doc-top":f(()=>[c(n.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[c(n.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":f(()=>[c(n.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[c(n.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[c(n.$slots,"doc-after",{},void 0,!0)]),"aside-top":f(()=>[c(n.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":f(()=>[c(n.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(n.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(n.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(n.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":f(()=>[c(n.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),Kn=b(qn,[["__scopeId","data-v-6b7662ab"]]),Wn={class:"container"},Rn=["innerHTML"],Jn=["innerHTML"],Yn=m({__name:"VPFooter",setup(s){const{theme:e,frontmatter:t}=V(),{hasSidebar:o}=O();return(n,i)=>r(e).footer&&r(t).footer!==!1?(a(),u("footer",{key:0,class:w(["VPFooter",{"has-sidebar":r(o)}])},[d("div",Wn,[r(e).footer.message?(a(),u("p",{key:0,class:"message",innerHTML:r(e).footer.message},null,8,Rn)):h("",!0),r(e).footer.copyright?(a(),u("p",{key:1,class:"copyright",innerHTML:r(e).footer.copyright},null,8,Jn)):h("",!0)])],2)):h("",!0)}}),Xn=b(Yn,[["__scopeId","data-v-80957399"]]);function Qn(){const{theme:s,frontmatter:e}=V(),t=ge([]),o=g(()=>t.value.length>0);return Z(()=>{t.value=fe(e.value.outline??s.value.outline)}),{headers:t,hasLocalNav:o}}const Zn={class:"menu-text"},xn={class:"header"},eo={class:"outline"},to=m({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(s){const e=s,{theme:t}=V(),o=I(!1),n=I(0),i=I(),l=I();function v(y){var P;(P=i.value)!=null&&P.contains(y.target)||(o.value=!1)}D(o,y=>{if(y){document.addEventListener("click",v);return}document.removeEventListener("click",v)}),Ue("Escape",()=>{o.value=!1}),Z(()=>{o.value=!1});function p(){o.value=!o.value,n.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function $(y){y.target.classList.contains("outline-link")&&(l.value&&(l.value.style.transition="none"),Ve(()=>{o.value=!1}))}function S(){o.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(y,P)=>(a(),u("div",{class:"VPLocalNavOutlineDropdown",style:Le({"--vp-vh":n.value+"px"}),ref_key:"main",ref:i},[y.headers.length>0?(a(),u("button",{key:0,onClick:p,class:w({open:o.value})},[d("span",Zn,M(r(we)(r(t))),1),P[0]||(P[0]=d("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(a(),u("button",{key:1,onClick:S},M(r(t).returnToTopLabel||"Return to top"),1)),_(ue,{name:"flyout"},{default:f(()=>[o.value?(a(),u("div",{key:0,ref_key:"items",ref:l,class:"items",onClick:$},[d("div",xn,[d("a",{class:"top-link",href:"#",onClick:S},M(r(t).returnToTopLabel||"Return to top"),1)]),d("div",eo,[_(Me,{headers:y.headers},null,8,["headers"])])],512)):h("",!0)]),_:1})],4))}}),no=b(to,[["__scopeId","data-v-39d21923"]]),oo={class:"container"},so=["aria-expanded"],ao={class:"menu-text"},ro=m({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(s){const{theme:e,frontmatter:t}=V(),{hasSidebar:o}=O(),{headers:n}=Qn(),{y:i}=Se(),l=I(0);j(()=>{l.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),Z(()=>{n.value=fe(t.value.outline??e.value.outline)});const v=g(()=>n.value.length===0),p=g(()=>v.value&&!o.value),$=g(()=>({VPLocalNav:!0,"has-sidebar":o.value,empty:v.value,fixed:p.value}));return(S,y)=>r(t).layout!=="home"&&(!p.value||r(i)>=l.value)?(a(),u("div",{key:0,class:w($.value)},[d("div",oo,[r(o)?(a(),u("button",{key:0,class:"menu","aria-expanded":S.open,"aria-controls":"VPSidebarNav",onClick:y[0]||(y[0]=P=>S.$emit("open-menu"))},[y[1]||(y[1]=d("span",{class:"vpi-align-left menu-icon"},null,-1)),d("span",ao,M(r(e).sidebarMenuLabel||"Menu"),1)],8,so)):h("",!0),_(no,{headers:r(n),navHeight:l.value},null,8,["headers","navHeight"])])],2)):h("",!0)}}),io=b(ro,[["__scopeId","data-v-ac3c66b6"]]);function lo(){const s=I(!1);function e(){s.value=!0,window.addEventListener("resize",n)}function t(){s.value=!1,window.removeEventListener("resize",n)}function o(){s.value?t():e()}function n(){window.outerWidth>=768&&t()}const i=x();return D(()=>i.path,t),{isScreenOpen:s,openScreen:e,closeScreen:t,toggleScreen:o}}const co={},uo={class:"VPSwitch",type:"button",role:"switch"},vo={class:"check"},po={key:0,class:"icon"};function fo(s,e){return a(),u("button",uo,[d("span",vo,[s.$slots.default?(a(),u("span",po,[c(s.$slots,"default",{},void 0,!0)])):h("",!0)])])}const ho=b(co,[["render",fo],["__scopeId","data-v-6f4e89fa"]]),mo=m({__name:"VPSwitchAppearance",setup(s){const{isDark:e,theme:t}=V(),o=ee("toggle-appearance",()=>{e.value=!e.value}),n=I("");return ve(()=>{n.value=e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(i,l)=>(a(),k(ho,{title:n.value,class:"VPSwitchAppearance","aria-checked":r(e),onClick:r(o)},{default:f(()=>l[0]||(l[0]=[d("span",{class:"vpi-sun sun"},null,-1),d("span",{class:"vpi-moon moon"},null,-1)])),_:1,__:[0]},8,["title","aria-checked","onClick"]))}}),he=b(mo,[["__scopeId","data-v-3b05a2ba"]]),_o={key:0,class:"VPNavBarAppearance"},ko=m({__name:"VPNavBarAppearance",setup(s){const{site:e}=V();return(t,o)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",_o,[_(he)])):h("",!0)}}),bo=b(ko,[["__scopeId","data-v-c06afdfa"]]),me=I();let Ce=!1,ae=0;function go(s){const e=I(!1);if(te){!Ce&&$o(),ae++;const t=D(me,o=>{var n,i,l;o===s.el.value||(n=s.el.value)!=null&&n.contains(o)?(e.value=!0,(i=s.onFocus)==null||i.call(s)):(e.value=!1,(l=s.onBlur)==null||l.call(s))});Q(()=>{t(),ae--,ae||yo()})}return je(e)}function $o(){document.addEventListener("focusin",Ae),Ce=!0,me.value=document.activeElement}function yo(){document.removeEventListener("focusin",Ae)}function Ae(){me.value=document.activeElement}const Po={class:"VPMenuLink"},Lo=["innerHTML"],Vo=m({__name:"VPMenuLink",props:{item:{}},setup(s){const{page:e}=V();return(t,o)=>(a(),u("div",Po,[_(F,{class:w({active:r(q)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon},{default:f(()=>[d("span",{innerHTML:t.item.text},null,8,Lo)]),_:1},8,["class","href","target","rel","no-icon"])]))}}),ne=b(Vo,[["__scopeId","data-v-cae06d8f"]]),So={class:"VPMenuGroup"},To={key:0,class:"title"},No=m({__name:"VPMenuGroup",props:{text:{},items:{}},setup(s){return(e,t)=>(a(),u("div",So,[e.text?(a(),u("p",To,M(e.text),1)):h("",!0),(a(!0),u(A,null,H(e.items,o=>(a(),u(A,null,["link"in o?(a(),k(ne,{key:0,item:o},null,8,["item"])):h("",!0)],64))),256))]))}}),Io=b(No,[["__scopeId","data-v-476545b4"]]),wo={class:"VPMenu"},Mo={key:0,class:"items"},Co=m({__name:"VPMenu",props:{items:{}},setup(s){return(e,t)=>(a(),u("div",wo,[e.items?(a(),u("div",Mo,[(a(!0),u(A,null,H(e.items,o=>(a(),u(A,{key:JSON.stringify(o)},["link"in o?(a(),k(ne,{key:0,item:o},null,8,["item"])):"component"in o?(a(),k(E(o.component),U({key:1,ref_for:!0},o.props),null,16)):(a(),k(Io,{key:2,text:o.text,items:o.items},null,8,["text","items"]))],64))),128))])):h("",!0),c(e.$slots,"default",{},void 0,!0)]))}}),Ao=b(Co,[["__scopeId","data-v-423530b0"]]),Ho=["aria-expanded","aria-label"],Bo={key:0,class:"text"},Eo=["innerHTML"],Fo={key:1,class:"vpi-more-horizontal icon"},Do={class:"menu"},Oo=m({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(s){const e=I(!1),t=I();go({el:t,onBlur:o});function o(){e.value=!1}return(n,i)=>(a(),u("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:i[1]||(i[1]=l=>e.value=!0),onMouseleave:i[2]||(i[2]=l=>e.value=!1)},[d("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":n.label,onClick:i[0]||(i[0]=l=>e.value=!e.value)},[n.button||n.icon?(a(),u("span",Bo,[n.icon?(a(),u("span",{key:0,class:w([n.icon,"option-icon"])},null,2)):h("",!0),n.button?(a(),u("span",{key:1,innerHTML:n.button},null,8,Eo)):h("",!0),i[3]||(i[3]=d("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(a(),u("span",Fo))],8,Ho),d("div",Do,[_(Ao,{items:n.items},{default:f(()=>[c(n.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),_e=b(Oo,[["__scopeId","data-v-1893426f"]]),Go=["href","aria-label","innerHTML"],Uo=m({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(s){const e=s,t=I();j(async()=>{var i;await Ve();const n=(i=t.value)==null?void 0:i.children[0];n instanceof HTMLElement&&n.className.startsWith("vpi-social-")&&(getComputedStyle(n).maskImage||getComputedStyle(n).webkitMaskImage)==="none"&&n.style.setProperty("--icon",`url('https://api.iconify.design/simple-icons/${e.icon}.svg')`)});const o=g(()=>typeof e.icon=="object"?e.icon.svg:``);return(n,i)=>(a(),u("a",{ref_key:"el",ref:t,class:"VPSocialLink no-icon",href:n.link,"aria-label":n.ariaLabel??(typeof n.icon=="string"?n.icon:""),target:"_blank",rel:"noopener",innerHTML:o.value},null,8,Go))}}),jo=b(Uo,[["__scopeId","data-v-5297b9ec"]]),zo={class:"VPSocialLinks"},qo=m({__name:"VPSocialLinks",props:{links:{}},setup(s){return(e,t)=>(a(),u("div",zo,[(a(!0),u(A,null,H(e.links,({link:o,icon:n,ariaLabel:i})=>(a(),k(jo,{key:o,icon:n,link:o,ariaLabel:i},null,8,["icon","link","ariaLabel"]))),128))]))}}),ke=b(qo,[["__scopeId","data-v-5af2a0df"]]),Ko={key:0,class:"group translations"},Wo={class:"trans-title"},Ro={key:1,class:"group"},Jo={class:"item appearance"},Yo={class:"label"},Xo={class:"appearance-action"},Qo={key:2,class:"group"},Zo={class:"item social-links"},xo=m({__name:"VPNavBarExtra",setup(s){const{site:e,theme:t}=V(),{localeLinks:o,currentLang:n}=R({correspondingLink:!0}),i=g(()=>o.value.length&&n.value.label||e.value.appearance||t.value.socialLinks);return(l,v)=>i.value?(a(),k(_e,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:f(()=>[r(o).length&&r(n).label?(a(),u("div",Ko,[d("p",Wo,M(r(n).label),1),(a(!0),u(A,null,H(r(o),p=>(a(),k(ne,{key:p.link,item:p},null,8,["item"]))),128))])):h("",!0),r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",Ro,[d("div",Jo,[d("p",Yo,M(r(t).darkModeSwitchLabel||"Appearance"),1),d("div",Xo,[_(he)])])])):h("",!0),r(t).socialLinks?(a(),u("div",Qo,[d("div",Zo,[_(ke,{class:"social-links-list",links:r(t).socialLinks},null,8,["links"])])])):h("",!0)]),_:1})):h("",!0)}}),es=b(xo,[["__scopeId","data-v-96f668d2"]]),ts=["aria-expanded"],ns=m({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(s){return(e,t)=>(a(),u("button",{type:"button",class:w(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=o=>e.$emit("click"))},t[1]||(t[1]=[d("span",{class:"container"},[d("span",{class:"top"}),d("span",{class:"middle"}),d("span",{class:"bottom"})],-1)]),10,ts))}}),os=b(ns,[["__scopeId","data-v-364b8629"]]),ss=["innerHTML"],as=m({__name:"VPNavBarMenuLink",props:{item:{}},setup(s){const{page:e}=V();return(t,o)=>(a(),k(F,{class:w({VPNavBarMenuLink:!0,active:r(q)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,tabindex:"0"},{default:f(()=>[d("span",{innerHTML:t.item.text},null,8,ss)]),_:1},8,["class","href","target","rel","no-icon"]))}}),rs=b(as,[["__scopeId","data-v-77375007"]]),is=m({__name:"VPNavBarMenuGroup",props:{item:{}},setup(s){const e=s,{page:t}=V(),o=i=>"component"in i?!1:"link"in i?q(t.value.relativePath,i.link,!!e.item.activeMatch):i.items.some(o),n=g(()=>o(e.item));return(i,l)=>(a(),k(_e,{class:w({VPNavBarMenuGroup:!0,active:r(q)(r(t).relativePath,i.item.activeMatch,!!i.item.activeMatch)||n.value}),button:i.item.text,items:i.item.items},null,8,["class","button","items"]))}}),ls={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},cs=m({__name:"VPNavBarMenu",setup(s){const{theme:e}=V();return(t,o)=>r(e).nav?(a(),u("nav",ls,[o[0]||(o[0]=d("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(a(!0),u(A,null,H(r(e).nav,n=>(a(),u(A,{key:JSON.stringify(n)},["link"in n?(a(),k(rs,{key:0,item:n},null,8,["item"])):"component"in n?(a(),k(E(n.component),U({key:1,ref_for:!0},n.props),null,16)):(a(),k(is,{key:2,item:n},null,8,["item"]))],64))),128))])):h("",!0)}}),us=b(cs,[["__scopeId","data-v-80fc4413"]]);function ds(s){const{localeIndex:e,theme:t}=V();function o(n){var L,C,N;const i=n.split("."),l=(L=t.value.search)==null?void 0:L.options,v=l&&typeof l=="object",p=v&&((N=(C=l.locales)==null?void 0:C[e.value])==null?void 0:N.translations)||null,$=v&&l.translations||null;let S=p,y=$,P=s;const T=i.pop();for(const B of i){let G=null;const W=P==null?void 0:P[B];W&&(G=P=W);const oe=y==null?void 0:y[B];oe&&(G=y=oe);const se=S==null?void 0:S[B];se&&(G=S=se),W||(P=G),oe||(y=G),se||(S=G)}return(S==null?void 0:S[T])??(y==null?void 0:y[T])??(P==null?void 0:P[T])??""}return o}const vs=["aria-label"],ps={class:"DocSearch-Button-Container"},fs={class:"DocSearch-Button-Placeholder"},be=m({__name:"VPNavBarSearchButton",setup(s){const t=ds({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(o,n)=>(a(),u("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":r(t)("button.buttonAriaLabel")},[d("span",ps,[n[0]||(n[0]=d("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1)),d("span",fs,M(r(t)("button.buttonText")),1)]),n[1]||(n[1]=d("span",{class:"DocSearch-Button-Keys"},[d("kbd",{class:"DocSearch-Button-Key"}),d("kbd",{class:"DocSearch-Button-Key"},"K")],-1))],8,vs))}}),hs={class:"VPNavBarSearch"},ms={id:"local-search"},_s={key:1,id:"docsearch"},ks=m({__name:"VPNavBarSearch",setup(s){const e=()=>null,t=$e(()=>ye(()=>import("./VPAlgoliaSearchBox.B0RF9aTI.js"),__vite__mapDeps([2,1]))),{theme:o}=V(),n=I(!1),i=I(!1),l=()=>{const P="VPAlgoliaPreconnect";(window.requestIdleCallback||setTimeout)(()=>{var C;const L=document.createElement("link");L.id=P,L.rel="preconnect",L.href=`https://${(((C=o.value.search)==null?void 0:C.options)??o.value.algolia).appId}-dsn.algolia.net`,L.crossOrigin="",document.head.appendChild(L)})};j(()=>{l();const P=L=>{(L.key.toLowerCase()==="k"&&(L.metaKey||L.ctrlKey)||!$(L)&&L.key==="/")&&(L.preventDefault(),v(),T())},T=()=>{window.removeEventListener("keydown",P)};window.addEventListener("keydown",P),Q(T)});function v(){n.value||(n.value=!0,setTimeout(p,16))}function p(){const P=new Event("keydown");P.key="k",P.metaKey=!0,window.dispatchEvent(P),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||p()},16)}function $(P){const T=P.target,L=T.tagName;return T.isContentEditable||L==="INPUT"||L==="SELECT"||L==="TEXTAREA"}const S=I(!1),y="algolia";return(P,T)=>{var L;return a(),u("div",hs,[r(y)==="local"?(a(),u(A,{key:0},[S.value?(a(),k(r(e),{key:0,onClose:T[0]||(T[0]=C=>S.value=!1)})):h("",!0),d("div",ms,[_(be,{onClick:T[1]||(T[1]=C=>S.value=!0)})])],64)):r(y)==="algolia"?(a(),u(A,{key:1},[n.value?(a(),k(r(t),{key:0,algolia:((L=r(o).search)==null?void 0:L.options)??r(o).algolia,onVnodeBeforeMount:T[2]||(T[2]=C=>i.value=!0)},null,8,["algolia"])):h("",!0),i.value?h("",!0):(a(),u("div",_s,[_(be,{onClick:v})]))],64)):h("",!0)])}}}),bs=m({__name:"VPNavBarSocialLinks",setup(s){const{theme:e}=V();return(t,o)=>r(e).socialLinks?(a(),k(ke,{key:0,class:"VPNavBarSocialLinks",links:r(e).socialLinks},null,8,["links"])):h("",!0)}}),gs=b(bs,[["__scopeId","data-v-43977e51"]]),$s=["href","rel","target"],ys=["innerHTML"],Ps={key:2},Ls=m({__name:"VPNavBarTitle",setup(s){const{site:e,theme:t}=V(),{hasSidebar:o}=O(),{currentLang:n}=R(),i=g(()=>{var p;return typeof t.value.logoLink=="string"?t.value.logoLink:(p=t.value.logoLink)==null?void 0:p.link}),l=g(()=>{var p;return typeof t.value.logoLink=="string"||(p=t.value.logoLink)==null?void 0:p.rel}),v=g(()=>{var p;return typeof t.value.logoLink=="string"||(p=t.value.logoLink)==null?void 0:p.target});return(p,$)=>(a(),u("div",{class:w(["VPNavBarTitle",{"has-sidebar":r(o)}])},[d("a",{class:"title",href:i.value??r(pe)(r(n).link),rel:l.value,target:v.value},[c(p.$slots,"nav-bar-title-before",{},void 0,!0),r(t).logo?(a(),k(Y,{key:0,class:"logo",image:r(t).logo},null,8,["image"])):h("",!0),r(t).siteTitle?(a(),u("span",{key:1,innerHTML:r(t).siteTitle},null,8,ys)):r(t).siteTitle===void 0?(a(),u("span",Ps,M(r(e).title),1)):h("",!0),c(p.$slots,"nav-bar-title-after",{},void 0,!0)],8,$s)],2))}}),Vs=b(Ls,[["__scopeId","data-v-45adfdaa"]]),Ss={class:"items"},Ts={class:"title"},Ns=m({__name:"VPNavBarTranslations",setup(s){const{theme:e}=V(),{localeLinks:t,currentLang:o}=R({correspondingLink:!0});return(n,i)=>r(t).length&&r(o).label?(a(),k(_e,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:r(e).langMenuLabel||"Change language"},{default:f(()=>[d("div",Ss,[d("p",Ts,M(r(o).label),1),(a(!0),u(A,null,H(r(t),l=>(a(),k(ne,{key:l.link,item:l},null,8,["item"]))),128))])]),_:1},8,["label"])):h("",!0)}}),Is=b(Ns,[["__scopeId","data-v-76e72062"]]),ws={class:"wrapper"},Ms={class:"container"},Cs={class:"title"},As={class:"content"},Hs={class:"content-body"},Bs=m({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(s){const e=s,{y:t}=Se(),{hasSidebar:o}=O(),{frontmatter:n}=V(),i=I({});return ve(()=>{i.value={"has-sidebar":o.value,home:n.value.layout==="home",top:t.value===0,"screen-open":e.isScreenOpen}}),(l,v)=>(a(),u("div",{class:w(["VPNavBar",i.value])},[d("div",ws,[d("div",Ms,[d("div",Cs,[_(Vs,null,{"nav-bar-title-before":f(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),d("div",As,[d("div",Hs,[c(l.$slots,"nav-bar-content-before",{},void 0,!0),_(ks,{class:"search"}),_(us,{class:"menu"}),_(Is,{class:"translations"}),_(bo,{class:"appearance"}),_(gs,{class:"social-links"}),_(es,{class:"extra"}),c(l.$slots,"nav-bar-content-after",{},void 0,!0),_(os,{class:"hamburger",active:l.isScreenOpen,onClick:v[0]||(v[0]=p=>l.$emit("toggle-screen"))},null,8,["active"])])])])]),v[1]||(v[1]=d("div",{class:"divider"},[d("div",{class:"divider-line"})],-1))],2))}}),Es=b(Bs,[["__scopeId","data-v-dd18e3da"]]),Fs={key:0,class:"VPNavScreenAppearance"},Ds={class:"text"},Os=m({__name:"VPNavScreenAppearance",setup(s){const{site:e,theme:t}=V();return(o,n)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",Fs,[d("p",Ds,M(r(t).darkModeSwitchLabel||"Appearance"),1),_(he)])):h("",!0)}}),Gs=b(Os,[["__scopeId","data-v-063c97a6"]]),Us=["innerHTML"],js=m({__name:"VPNavScreenMenuLink",props:{item:{}},setup(s){const e=ee("close-screen");return(t,o)=>(a(),k(F,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:r(e)},{default:f(()=>[d("span",{innerHTML:t.item.text},null,8,Us)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),zs=b(js,[["__scopeId","data-v-101fa30f"]]),qs=["innerHTML"],Ks=m({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(s){const e=ee("close-screen");return(t,o)=>(a(),k(F,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:r(e)},{default:f(()=>[d("span",{innerHTML:t.item.text},null,8,qs)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),He=b(Ks,[["__scopeId","data-v-3ba4ca06"]]),Ws={class:"VPNavScreenMenuGroupSection"},Rs={key:0,class:"title"},Js=m({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(s){return(e,t)=>(a(),u("div",Ws,[e.text?(a(),u("p",Rs,M(e.text),1)):h("",!0),(a(!0),u(A,null,H(e.items,o=>(a(),k(He,{key:o.text,item:o},null,8,["item"]))),128))]))}}),Ys=b(Js,[["__scopeId","data-v-6babe777"]]),Xs=["aria-controls","aria-expanded"],Qs=["innerHTML"],Zs=["id"],xs={key:0,class:"item"},ea={key:1,class:"item"},ta={key:2,class:"group"},na=m({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(s){const e=s,t=I(!1),o=g(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function n(){t.value=!t.value}return(i,l)=>(a(),u("div",{class:w(["VPNavScreenMenuGroup",{open:t.value}])},[d("button",{class:"button","aria-controls":o.value,"aria-expanded":t.value,onClick:n},[d("span",{class:"button-text",innerHTML:i.text},null,8,Qs),l[0]||(l[0]=d("span",{class:"vpi-plus button-icon"},null,-1))],8,Xs),d("div",{id:o.value,class:"items"},[(a(!0),u(A,null,H(i.items,v=>(a(),u(A,{key:JSON.stringify(v)},["link"in v?(a(),u("div",xs,[_(He,{item:v},null,8,["item"])])):"component"in v?(a(),u("div",ea,[(a(),k(E(v.component),U({ref_for:!0},v.props,{"screen-menu":""}),null,16))])):(a(),u("div",ta,[_(Ys,{text:v.text,items:v.items},null,8,["text","items"])]))],64))),128))],8,Zs)],2))}}),oa=b(na,[["__scopeId","data-v-de092b22"]]),sa={key:0,class:"VPNavScreenMenu"},aa=m({__name:"VPNavScreenMenu",setup(s){const{theme:e}=V();return(t,o)=>r(e).nav?(a(),u("nav",sa,[(a(!0),u(A,null,H(r(e).nav,n=>(a(),u(A,{key:JSON.stringify(n)},["link"in n?(a(),k(zs,{key:0,item:n},null,8,["item"])):"component"in n?(a(),k(E(n.component),U({key:1,ref_for:!0},n.props,{"screen-menu":""}),null,16)):(a(),k(oa,{key:2,text:n.text||"",items:n.items},null,8,["text","items"]))],64))),128))])):h("",!0)}}),ra=m({__name:"VPNavScreenSocialLinks",setup(s){const{theme:e}=V();return(t,o)=>r(e).socialLinks?(a(),k(ke,{key:0,class:"VPNavScreenSocialLinks",links:r(e).socialLinks},null,8,["links"])):h("",!0)}}),ia={class:"list"},la=m({__name:"VPNavScreenTranslations",setup(s){const{localeLinks:e,currentLang:t}=R({correspondingLink:!0}),o=I(!1);function n(){o.value=!o.value}return(i,l)=>r(e).length&&r(t).label?(a(),u("div",{key:0,class:w(["VPNavScreenTranslations",{open:o.value}])},[d("button",{class:"title",onClick:n},[l[0]||(l[0]=d("span",{class:"vpi-languages icon lang"},null,-1)),z(" "+M(r(t).label)+" ",1),l[1]||(l[1]=d("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),d("ul",ia,[(a(!0),u(A,null,H(r(e),v=>(a(),u("li",{key:v.link,class:"item"},[_(F,{class:"link",href:v.link},{default:f(()=>[z(M(v.text),1)]),_:2},1032,["href"])]))),128))])],2)):h("",!0)}}),ca=b(la,[["__scopeId","data-v-309ced7f"]]),ua={class:"container"},da=m({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(s){const e=I(null),t=Te(te?document.body:null);return(o,n)=>(a(),k(ue,{name:"fade",onEnter:n[0]||(n[0]=i=>t.value=!0),onAfterLeave:n[1]||(n[1]=i=>t.value=!1)},{default:f(()=>[o.open?(a(),u("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[d("div",ua,[c(o.$slots,"nav-screen-content-before",{},void 0,!0),_(aa,{class:"menu"}),_(ca,{class:"translations"}),_(Gs,{class:"appearance"}),_(ra,{class:"social-links"}),c(o.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):h("",!0)]),_:3}))}}),va=b(da,[["__scopeId","data-v-357a8c18"]]),pa={key:0,class:"VPNav"},fa=m({__name:"VPNav",setup(s){const{isScreenOpen:e,closeScreen:t,toggleScreen:o}=lo(),{frontmatter:n}=V(),i=g(()=>n.value.navbar!==!1);return Ne("close-screen",t),X(()=>{te&&document.documentElement.classList.toggle("hide-nav",!i.value)}),(l,v)=>i.value?(a(),u("header",pa,[_(Es,{"is-screen-open":r(e),onToggleScreen:r(o)},{"nav-bar-title-before":f(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[c(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[c(l.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),_(va,{open:r(e)},{"nav-screen-content-before":f(()=>[c(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[c(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):h("",!0)}}),ha=b(fa,[["__scopeId","data-v-6d80760b"]]),ma=["role","tabindex"],_a={key:1,class:"items"},ka=m({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(s){const e=s,{collapsed:t,collapsible:o,isLink:n,isActiveLink:i,hasActiveLink:l,hasChildren:v,toggle:p}=dt(g(()=>e.item)),$=g(()=>v.value?"section":"div"),S=g(()=>n.value?"a":"div"),y=g(()=>v.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),P=g(()=>n.value?void 0:"button"),T=g(()=>[[`level-${e.depth}`],{collapsible:o.value},{collapsed:t.value},{"is-link":n.value},{"is-active":i.value},{"has-active":l.value}]);function L(N){"key"in N&&N.key!=="Enter"||!e.item.link&&p()}function C(){e.item.link&&p()}return(N,B)=>{const G=K("VPSidebarItem",!0);return a(),k(E($.value),{class:w(["VPSidebarItem",T.value])},{default:f(()=>[N.item.text?(a(),u("div",U({key:0,class:"item",role:P.value},ze(N.item.items?{click:L,keydown:L}:{},!0),{tabindex:N.item.items&&0}),[B[1]||(B[1]=d("div",{class:"indicator"},null,-1)),N.item.link?(a(),k(F,{key:0,tag:S.value,class:"link",href:N.item.link,rel:N.item.rel,target:N.item.target},{default:f(()=>[(a(),k(E(y.value),{class:"text",innerHTML:N.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),k(E(y.value),{key:1,class:"text",innerHTML:N.item.text},null,8,["innerHTML"])),N.item.collapsed!=null&&N.item.items&&N.item.items.length?(a(),u("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:C,onKeydown:qe(C,["enter"]),tabindex:"0"},B[0]||(B[0]=[d("span",{class:"vpi-chevron-right caret-icon"},null,-1)]),32)):h("",!0)],16,ma)):h("",!0),N.item.items&&N.item.items.length?(a(),u("div",_a,[N.depth<5?(a(!0),u(A,{key:0},H(N.item.items,W=>(a(),k(G,{key:W.text,item:W,depth:N.depth+1},null,8,["item","depth"]))),128)):h("",!0)])):h("",!0)]),_:1},8,["class"])}}}),ba=b(ka,[["__scopeId","data-v-4e886116"]]),ga=m({__name:"VPSidebarGroup",props:{items:{}},setup(s){const e=I(!0);let t=null;return j(()=>{t=setTimeout(()=>{t=null,e.value=!1},300)}),Ke(()=>{t!=null&&(clearTimeout(t),t=null)}),(o,n)=>(a(!0),u(A,null,H(o.items,i=>(a(),u("div",{key:i.text,class:w(["group",{"no-transition":e.value}])},[_(ba,{item:i,depth:0},null,8,["item"])],2))),128))}}),$a=b(ga,[["__scopeId","data-v-4aa9b711"]]),ya={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Pa=m({__name:"VPSidebar",props:{open:{type:Boolean}},setup(s){const{sidebarGroups:e,hasSidebar:t}=O(),o=s,n=I(null),i=Te(te?document.body:null);D([o,n],()=>{var v;o.open?(i.value=!0,(v=n.value)==null||v.focus()):i.value=!1},{immediate:!0,flush:"post"});const l=I(0);return D(e,()=>{l.value+=1},{deep:!0}),(v,p)=>r(t)?(a(),u("aside",{key:0,class:w(["VPSidebar",{open:v.open}]),ref_key:"navEl",ref:n,onClick:p[0]||(p[0]=We(()=>{},["stop"]))},[p[2]||(p[2]=d("div",{class:"curtain"},null,-1)),d("nav",ya,[p[1]||(p[1]=d("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),c(v.$slots,"sidebar-nav-before",{},void 0,!0),(a(),k($a,{items:r(e),key:l.value},null,8,["items"])),c(v.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):h("",!0)}}),La=b(Pa,[["__scopeId","data-v-2e8ec0d9"]]),Va=m({__name:"VPSkipLink",setup(s){const{theme:e}=V(),t=x(),o=I();D(()=>t.path,()=>o.value.focus());function n({target:i}){const l=document.getElementById(decodeURIComponent(i.hash).slice(1));if(l){const v=()=>{l.removeAttribute("tabindex"),l.removeEventListener("blur",v)};l.setAttribute("tabindex","-1"),l.addEventListener("blur",v),l.focus(),window.scrollTo(0,0)}}return(i,l)=>(a(),u(A,null,[d("span",{ref_key:"backToTop",ref:o,tabindex:"-1"},null,512),d("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:n},M(r(e).skipToContentLabel||"Skip to content"),1)],64))}}),Sa=b(Va,[["__scopeId","data-v-77a352a9"]]),Ta=m({__name:"Layout",setup(s){const{isOpen:e,open:t,close:o}=O(),n=x();D(()=>n.path,o),ut(e,o);const{frontmatter:i}=V(),l=Re(),v=g(()=>!!l["home-hero-image"]);return Ne("hero-image-slot-exists",v),(p,$)=>{const S=K("Content");return r(i).layout!==!1?(a(),u("div",{key:0,class:w(["Layout",r(i).pageClass])},[c(p.$slots,"layout-top",{},void 0,!0),_(Sa),_(Qe,{class:"backdrop",show:r(e),onClick:r(o)},null,8,["show","onClick"]),_(ha,null,{"nav-bar-title-before":f(()=>[c(p.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(p.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[c(p.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[c(p.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":f(()=>[c(p.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[c(p.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),_(io,{open:r(e),onOpenMenu:r(t)},null,8,["open","onOpenMenu"]),_(La,{open:r(e)},{"sidebar-nav-before":f(()=>[c(p.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":f(()=>[c(p.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),_(Kn,null,{"page-top":f(()=>[c(p.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[c(p.$slots,"page-bottom",{},void 0,!0)]),"not-found":f(()=>[c(p.$slots,"not-found",{},void 0,!0)]),"home-hero-before":f(()=>[c(p.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[c(p.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(p.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(p.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(p.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(p.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[c(p.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[c(p.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[c(p.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":f(()=>[c(p.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[c(p.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[c(p.$slots,"doc-after",{},void 0,!0)]),"doc-top":f(()=>[c(p.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[c(p.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":f(()=>[c(p.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[c(p.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[c(p.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(p.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(p.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(p.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),_(Xn),c(p.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),k(S,{key:1}))}}}),Na=b(Ta,[["__scopeId","data-v-de37206a"]]),Ia={},wa={class:"VPTeamPageTitle"},Ma={key:0,class:"title"},Ca={key:1,class:"lead"};function Aa(s,e){return a(),u("div",wa,[s.$slots.title?(a(),u("h1",Ma,[c(s.$slots,"title",{},void 0,!0)])):h("",!0),s.$slots.lead?(a(),u("p",Ca,[c(s.$slots,"lead",{},void 0,!0)])):h("",!0)])}const Ba=b(Ia,[["render",Aa],["__scopeId","data-v-940aa655"]]),Ea={Layout:Na,enhanceApp:({app:s})=>{s.component("Badge",Je)}};export{Ba as V,vt as a,Ea as t,V as u}; diff --git a/assets/chunks/ui-custom.C2yHb_f-.js b/assets/chunks/ui-custom.C2yHb_f-.js deleted file mode 100644 index 6f3b875..0000000 --- a/assets/chunks/ui-custom.C2yHb_f-.js +++ /dev/null @@ -1 +0,0 @@ -import{u as i,a as p}from"./theme.Bptbx08c.js";import{d as l,p as u,q as t,v as f,c as _,o as m,_ as b}from"./framework.CnuuF8_c.js";const v=l({__name:"VPCarbonAds",props:{carbonAds:{}},setup(r){const{page:d}=i(),a=r.carbonAds,{isAsideEnabled:s}=p(),o=u();let n=!1;function c(){if(!n){n=!0;const e=document.createElement("script");e.id="_carbonads_js",e.src=`//cdn.carbonads.com/carbon.js?serve=${a.code}&placement=${a.placement}`,e.async=!0,o.value.appendChild(e)}}return t(()=>d.value.relativePath,()=>{var e;n&&s.value&&((e=window._carbonads)==null||e.refresh())}),a&&f(()=>{s.value?c():t(s,e=>e&&c())}),(e,h)=>(m(),_("div",{class:"VPCarbonAds",ref_key:"container",ref:o},null,512))}}),k=b(v,[["__scopeId","data-v-d8b3a76c"]]);export{k as default}; diff --git a/assets/chunks/ui-custom.D0LrQO1W.js b/assets/chunks/ui-custom.D0LrQO1W.js new file mode 100644 index 0000000..0b7ce53 --- /dev/null +++ b/assets/chunks/ui-custom.D0LrQO1W.js @@ -0,0 +1 @@ +import{u as d,a as p}from"./theme.DpzYL1kV.js";import{d as l,p as u,q as c,v as f,c as _,o as m,_ as b}from"./framework.CnuuF8_c.js";const v=l({__name:"VPCarbonAds",props:{carbonAds:{}},setup(r){const{page:i}=d(),a=r.carbonAds,{isAsideEnabled:s}=p(),o=u();let n=!1;function t(){if(!n){n=!0;const e=document.createElement("script");e.id="_carbonads_js",e.src=`//cdn.carbonads.com/carbon.js?serve=${a.code}&placement=${a.placement}`,e.async=!0,o.value.appendChild(e)}}return c(()=>i.value.relativePath,()=>{var e;n&&s.value&&((e=window._carbonads)==null||e.refresh())}),a&&f(()=>{s.value?t():c(s,e=>e&&t())}),(e,h)=>(m(),_("div",{class:"VPCarbonAds",ref_key:"container",ref:o},null,512))}}),k=b(v,[["__scopeId","data-v-89a5407e"]]);export{k as default}; diff --git a/assets/config.md.C00Phdwe.js b/assets/config.md.CScI-ExK.js similarity index 99% rename from assets/config.md.C00Phdwe.js rename to assets/config.md.CScI-ExK.js index d7fe69c..8dad4df 100644 --- a/assets/config.md.C00Phdwe.js +++ b/assets/config.md.CScI-ExK.js @@ -1,4 +1,4 @@ -import{_ as l,C as h,c as p,o as r,ag as t,G as a,j as e,a as n}from"./chunks/framework.CnuuF8_c.js";const y=JSON.parse('{"title":"setupCache()","description":"","frontmatter":{},"headers":[],"relativePath":"config.md","filePath":"config.md","lastUpdated":1755791588000}'),o={name:"config.md"};function k(d,s,c,C,g,A){const i=h("Badge");return r(),p("div",null,[s[0]||(s[0]=t(`

setupCache()

The setupCache function receives the axios instance and a set of optional properties described below. This modifies the axios instance in place and returns it.

ts
const axios = setupCache(axiosInstance, OPTIONS);

TIP

The setupCache function receives global options and all request specifics ones too. This way, you can customize the defaults for all requests.

TIP

If you want to use the same cache interceptor for all your axios instances, you can call setupCache with the default axios instance.

ts
import Axios from 'axios';
+import{_ as l,C as h,c as p,o as r,ag as t,G as a,j as e,a as n}from"./chunks/framework.CnuuF8_c.js";const y=JSON.parse('{"title":"setupCache()","description":"","frontmatter":{},"headers":[],"relativePath":"config.md","filePath":"config.md","lastUpdated":1760451679000}'),o={name:"config.md"};function k(d,s,c,C,g,A){const i=h("Badge");return r(),p("div",null,[s[0]||(s[0]=t(`

setupCache()

The setupCache function receives the axios instance and a set of optional properties described below. This modifies the axios instance in place and returns it.

ts
const axios = setupCache(axiosInstance, OPTIONS);

TIP

The setupCache function receives global options and all request specifics ones too. This way, you can customize the defaults for all requests.

TIP

If you want to use the same cache interceptor for all your axios instances, you can call setupCache with the default axios instance.

ts
import Axios from 'axios';
 setupCache(Axios, OPTIONS);

location

`,7)),a(i,{text:"optional",type:"warning"}),s[1]||(s[1]=t(`
  • Type: InstanceLocation
  • Default: typeof window === 'undefined' ? 'server' : 'client'

A hint to the library about where the axios instance is being used.

Used to take some decisions like handling or not Cache-Control: private.

ts
// NodeJS
 const cache = setupCache(Axios.create(), {
   location: 'server'
diff --git a/assets/config.md.C00Phdwe.lean.js b/assets/config.md.CScI-ExK.lean.js
similarity index 96%
rename from assets/config.md.C00Phdwe.lean.js
rename to assets/config.md.CScI-ExK.lean.js
index 9eef80e..e72da9d 100644
--- a/assets/config.md.C00Phdwe.lean.js
+++ b/assets/config.md.CScI-ExK.lean.js
@@ -1 +1 @@
-import{_ as l,C as h,c as p,o as r,ag as t,G as a,j as e,a as n}from"./chunks/framework.CnuuF8_c.js";const y=JSON.parse('{"title":"setupCache()","description":"","frontmatter":{},"headers":[],"relativePath":"config.md","filePath":"config.md","lastUpdated":1755791588000}'),o={name:"config.md"};function k(d,s,c,C,g,A){const i=h("Badge");return r(),p("div",null,[s[0]||(s[0]=t("",7)),a(i,{text:"optional",type:"warning"}),s[1]||(s[1]=t("",5)),a(i,{text:"optional",type:"warning"}),s[2]||(s[2]=t("",4)),a(i,{text:"optional",type:"warning"}),s[3]||(s[3]=t("",5)),a(i,{text:"optional",type:"warning"}),s[4]||(s[4]=e("ul",null,[e("li",null,[n("Type: "),e("code",null,"Map>")]),e("li",null,[n("Default: "),e("code",null,"new Map")])],-1)),s[5]||(s[5]=e("p",null,"A simple object that will hold a promise for each pending request. Used to handle concurrent requests.",-1)),s[6]||(s[6]=e("p",null,"You shouldn’t change this property, but it is exposed in case you need to use it as some sort of listener or know when a request is waiting for others to finish.",-1)),s[7]||(s[7]=e("h2",{id:"headerinterpreter",tabindex:"-1"},[n("headerInterpreter "),e("a",{class:"header-anchor",href:"#headerinterpreter","aria-label":'Permalink to "headerInterpreter"'},"​")],-1)),a(i,{text:"optional",type:"warning"}),s[8]||(s[8]=t("",7)),a(i,{text:"optional",type:"warning"}),s[9]||(s[9]=t("",6)),a(i,{text:"optional",type:"warning"}),s[10]||(s[10]=t("",6)),a(i,{text:"dev only",type:"danger"}),s[11]||(s[11]=n()),a(i,{text:"optional",type:"warning"}),s[12]||(s[12]=t("",5))])}const B=l(o,[["render",k]]);export{y as __pageData,B as default};
+import{_ as l,C as h,c as p,o as r,ag as t,G as a,j as e,a as n}from"./chunks/framework.CnuuF8_c.js";const y=JSON.parse('{"title":"setupCache()","description":"","frontmatter":{},"headers":[],"relativePath":"config.md","filePath":"config.md","lastUpdated":1760451679000}'),o={name:"config.md"};function k(d,s,c,C,g,A){const i=h("Badge");return r(),p("div",null,[s[0]||(s[0]=t("",7)),a(i,{text:"optional",type:"warning"}),s[1]||(s[1]=t("",5)),a(i,{text:"optional",type:"warning"}),s[2]||(s[2]=t("",4)),a(i,{text:"optional",type:"warning"}),s[3]||(s[3]=t("",5)),a(i,{text:"optional",type:"warning"}),s[4]||(s[4]=e("ul",null,[e("li",null,[n("Type: "),e("code",null,"Map>")]),e("li",null,[n("Default: "),e("code",null,"new Map")])],-1)),s[5]||(s[5]=e("p",null,"A simple object that will hold a promise for each pending request. Used to handle concurrent requests.",-1)),s[6]||(s[6]=e("p",null,"You shouldn’t change this property, but it is exposed in case you need to use it as some sort of listener or know when a request is waiting for others to finish.",-1)),s[7]||(s[7]=e("h2",{id:"headerinterpreter",tabindex:"-1"},[n("headerInterpreter "),e("a",{class:"header-anchor",href:"#headerinterpreter","aria-label":'Permalink to "headerInterpreter"'},"​")],-1)),a(i,{text:"optional",type:"warning"}),s[8]||(s[8]=t("",7)),a(i,{text:"optional",type:"warning"}),s[9]||(s[9]=t("",6)),a(i,{text:"optional",type:"warning"}),s[10]||(s[10]=t("",6)),a(i,{text:"dev only",type:"danger"}),s[11]||(s[11]=n()),a(i,{text:"optional",type:"warning"}),s[12]||(s[12]=t("",5))])}const B=l(o,[["render",k]]);export{y as __pageData,B as default};
diff --git a/assets/config_request-specifics.md.31Q7kimq.js b/assets/config_request-specifics.md.B6wvTu18.js
similarity index 85%
rename from assets/config_request-specifics.md.31Q7kimq.js
rename to assets/config_request-specifics.md.B6wvTu18.js
index 36e3f22..9d2a945 100644
--- a/assets/config_request-specifics.md.31Q7kimq.js
+++ b/assets/config_request-specifics.md.B6wvTu18.js
@@ -1,8 +1,13 @@
-import{_ as t,C as n,c as h,o as l,ag as i,G as e}from"./chunks/framework.CnuuF8_c.js";const p="/assets/disk-cache-screenshot.DCgmRbJn.png",y=JSON.parse('{"title":"Request specifics","description":"","frontmatter":{},"headers":[],"relativePath":"config/request-specifics.md","filePath":"config/request-specifics.md","lastUpdated":1755791588000}'),r={name:"config/request-specifics.md"};function k(o,s,d,c,C,A){const a=n("Badge");return l(),h("div",null,[s[0]||(s[0]=i('

Request specifics

Each request can have its own cache customization, by using the cache property. This way, you can have requests behaving differently from each other without much effort.

The inline documentation is self explanatory, but here is a shortly brief of what each property does:

TIP

You can override every request specific property when creating the cached axios client, the same way you do with the global options.

id

',6)),e(a,{text:"optional",type:"warning"}),s[1]||(s[1]=i('
  • Type: string
  • default: (auto generated by the current key generator)

The Request ID used in this request.

It may have been generated by the Key Generator or a custom one provided by config.id

cache

',4)),e(a,{text:"optional",type:"warning"}),s[2]||(s[2]=i(`
  • Type: false or Partial<CacheProperties<R, D>>.
  • Default: {} (Inherits from global configuration)

TIP

As this property is optional, when not provided, all properties will inherit from global configuration

The cache option available through the request config is where all the cache customization happens.

Setting the cache property to false will disable the cache for this request.

This does not mean that the cache will be excluded from the storage, in which case, you can do that by deleting the storage entry:

ts
// Make a request with cache disabled.
+import{_ as t,C as n,c as h,o as l,ag as i,G as e}from"./chunks/framework.CnuuF8_c.js";const p="/assets/disk-cache-screenshot.DCgmRbJn.png",y=JSON.parse('{"title":"Request specifics","description":"","frontmatter":{},"headers":[],"relativePath":"config/request-specifics.md","filePath":"config/request-specifics.md","lastUpdated":1760451679000}'),r={name:"config/request-specifics.md"};function k(o,s,d,c,C,A){const a=n("Badge");return l(),h("div",null,[s[0]||(s[0]=i('

Request specifics

Each request can have its own cache customization, by using the cache property. This way, you can have requests behaving differently from each other without much effort.

The inline documentation is self explanatory, but here is a shortly brief of what each property does:

TIP

You can override every request specific property when creating the cached axios client, the same way you do with the global options.

id

',6)),e(a,{text:"optional",type:"warning"}),s[1]||(s[1]=i('
  • Type: string
  • default: (auto generated by the current key generator)

The Request ID used in this request.

It may have been generated by the Key Generator or a custom one provided by config.id

cache

',4)),e(a,{text:"optional",type:"warning"}),s[2]||(s[2]=i(`
  • Type: false or Partial<CacheProperties<R, D>>.
  • Default: {} (Inherits from global configuration)

TIP

As this property is optional, when not provided, all properties will inherit from global configuration

The cache option available through the request config is where all the cache customization happens.

Setting the cache property to false will disable the cache for this request.

This does not mean that the cache will be excluded from the storage, in which case, you can do that by deleting the storage entry:

ts
// Make a request with cache disabled.
 const { id: requestId } = await axios.get('url', { cache: false });
 
 // Delete the cache entry for this request.
-await axios.storage.remove(requestId);

cache.ttl

`,7)),e(a,{text:"optional",type:"warning"}),s[3]||(s[3]=i('
  • Type: number
  • Default: 1000 * 60 * 5 (5 Minutes)

WARNING

When using interpretHeader, this value will only be used if the interpreter can’t determine their TTL value to override this one.

The time until the cached value is expired in milliseconds.

If a function is used, it will receive the complete response and waits to return a TTL value

cache.interpretHeader

',5)),e(a,{text:"optional",type:"warning"}),s[4]||(s[4]=i('
  • Type: boolean
  • Default: true

TIP

You can override the default behavior by changing the headerInterpreter option.

If activated, when the response is received, the ttl property will be inferred from the requests headers. As described in the MDN docs and HTML specification.

See the actual implementation of the interpretHeader method for more information.

cache.cacheTakeover

',5)),e(a,{text:"optional",type:"warning"}),s[5]||(s[5]=i('
  • Type: boolean
  • Default: true

As most of our cache strategies depends on well known defined HTTP headers, most browsers also use those headers to define their own cache strategies and storages.

This can be seen when opening network tab in your browser’s dev tools.

Network tab in Chrome Dev Tools

When your requested routes includes Cache-Control in their responses, you may end up with we and your browser caching the response, resulting in a double layer of cache.

This option solves this by including some predefined headers in the request, that should tell any client / adapter to not cache the response, thus only we will cache it.

These are headers used in our specific request, it won’t affect any other request or response that the server may handle.

Headers included:

  • Cache-Control: no-cache
  • Pragma: no-cache
  • Expires: 0

WARNING

This option will not work on most CORS requests, as the browser will throw Request header field pragma is not allowed by Access-Control-Allow-Headers in preflight response..

When you encounter CORS error, you need to make sure Cache-Control, Pragma and Expires headers are included into your server’s Access-Control-Allow-Headers CORS configuration.

If you cannot do such thing, you can fallback to disabling this option. Learn more on why it should be enabled at #437 and in this StackOverflow answer.

cache.methods

',10)),e(a,{text:"optional",type:"warning"}),s[6]||(s[6]=i(`
  • Type: Method[]
  • Default: ["get", "head"]

Specifies which methods we should handle and cache. This is where you can enable caching to POST, PUT, DELETE and other methods, as the default is only GET.

If you want to enable cache for POST requests, you can do:

ts
// Globally enables caching for POST requests
+await axios.storage.remove(requestId);

cache.ttl

`,7)),e(a,{text:"optional",type:"warning"}),s[3]||(s[3]=i('
  • Type: number
  • Default: 1000 * 60 * 5 (5 Minutes)

WARNING

When using interpretHeader, this value will only be used if the interpreter can’t determine their TTL value to override this one.

The time until the cached value is expired in milliseconds.

If a function is used, it will receive the complete response and waits to return a TTL value

cache.interpretHeader

',5)),e(a,{text:"optional",type:"warning"}),s[4]||(s[4]=i('
  • Type: boolean
  • Default: true

TIP

You can override the default behavior by changing the headerInterpreter option.

If activated, when the response is received, the ttl property will be inferred from the requests headers. As described in the MDN docs and HTML specification.

See the actual implementation of the interpretHeader method for more information.

cache.cacheTakeover

',5)),e(a,{text:"optional",type:"warning"}),s[5]||(s[5]=i('
  • Type: boolean
  • Default: true

As most of our cache strategies depend on well-known HTTP headers, most browsers also use those headers to define their own cache strategies and storages.

This can be seen when opening network tab in your browser’s dev tools.

Network tab in Chrome Dev Tools

When your requested routes include Cache-Control in their responses, you may end up with both the library and your browser caching the response, resulting in a double layer of cache.

This option solves this by including predefined headers in the request that instruct any client/adapter to not cache the response, thus ensuring only the library caches it.

These headers are added to your specific request and won’t affect any other request or response that the server may handle.

Headers included:

  • Cache-Control: no-cache, no-store, must-revalidate
  • Pragma: no-cache
  • Expires: 0

Alternative

While cacheTakeover works for most browsers according to this StackOverflow answer, in some rare edge cases it may be unreliable due to browser-specific cache behaviors or network intermediaries.

For maximum reliability, add a unique random query parameter instead:

ts
axios.get(
+  \`/api/data?cachebuster=\${Math.random().toString(36).slice(2)}\`,
+  {
+    id: 'api-data-endpoint' // Keep same cache key despite different URLs
+  }
+);

Your backend can ignore the cachebuster value. This guarantees no browser caching while preserving axios-cache-interceptor functionality.

CORS Considerations

This option will not work on CORS requests with restricted headers, as the browser will throw: Request header field Pragma is not allowed by Access-Control-Allow-Headers in preflight response.

When you encounter CORS errors, you need to ensure Cache-Control, Pragma, and Expires headers are included in your server’s Access-Control-Allow-Headers CORS configuration.

If you cannot modify the CORS configuration, you can:

  1. Disable this option (cacheTakeover: false)
  2. Use the query parameter approach mentioned above

Learn more about why this should be enabled at #437 and in this StackOverflow answer.

cache.methods

`,11)),e(a,{text:"optional",type:"warning"}),s[6]||(s[6]=i(`
  • Type: Method[]
  • Default: ["get", "head"]

Specifies which methods we should handle and cache. This is where you can enable caching to POST, PUT, DELETE and other methods, as the default is only GET.

If you want to enable cache for POST requests, you can do:

ts
// Globally enables caching for POST requests
 const axios = setupCache(instance, {
   methods: ['get', 'post']
 });
diff --git a/assets/config_request-specifics.md.31Q7kimq.lean.js b/assets/config_request-specifics.md.B6wvTu18.lean.js
similarity index 89%
rename from assets/config_request-specifics.md.31Q7kimq.lean.js
rename to assets/config_request-specifics.md.B6wvTu18.lean.js
index 6b7ef22..412c33d 100644
--- a/assets/config_request-specifics.md.31Q7kimq.lean.js
+++ b/assets/config_request-specifics.md.B6wvTu18.lean.js
@@ -1 +1 @@
-import{_ as t,C as n,c as h,o as l,ag as i,G as e}from"./chunks/framework.CnuuF8_c.js";const p="/assets/disk-cache-screenshot.DCgmRbJn.png",y=JSON.parse('{"title":"Request specifics","description":"","frontmatter":{},"headers":[],"relativePath":"config/request-specifics.md","filePath":"config/request-specifics.md","lastUpdated":1755791588000}'),r={name:"config/request-specifics.md"};function k(o,s,d,c,C,A){const a=n("Badge");return l(),h("div",null,[s[0]||(s[0]=i("",6)),e(a,{text:"optional",type:"warning"}),s[1]||(s[1]=i("",4)),e(a,{text:"optional",type:"warning"}),s[2]||(s[2]=i("",7)),e(a,{text:"optional",type:"warning"}),s[3]||(s[3]=i("",5)),e(a,{text:"optional",type:"warning"}),s[4]||(s[4]=i("",5)),e(a,{text:"optional",type:"warning"}),s[5]||(s[5]=i("",10)),e(a,{text:"optional",type:"warning"}),s[6]||(s[6]=i("",6)),e(a,{text:"optional",type:"warning"}),s[7]||(s[7]=i("",5)),e(a,{text:"optional",type:"warning"}),s[8]||(s[8]=i("",6)),e(a,{text:"optional",type:"warning"}),s[9]||(s[9]=i("",4)),e(a,{text:"optional",type:"warning"}),s[10]||(s[10]=i("",12)),e(a,{text:"optional",type:"warning"}),s[11]||(s[11]=i("",4)),e(a,{text:"optional",type:"warning"}),s[12]||(s[12]=i("",5))])}const u=t(r,[["render",k]]);export{y as __pageData,u as default};
+import{_ as t,C as n,c as h,o as l,ag as i,G as e}from"./chunks/framework.CnuuF8_c.js";const p="/assets/disk-cache-screenshot.DCgmRbJn.png",y=JSON.parse('{"title":"Request specifics","description":"","frontmatter":{},"headers":[],"relativePath":"config/request-specifics.md","filePath":"config/request-specifics.md","lastUpdated":1760451679000}'),r={name:"config/request-specifics.md"};function k(o,s,d,c,C,A){const a=n("Badge");return l(),h("div",null,[s[0]||(s[0]=i("",6)),e(a,{text:"optional",type:"warning"}),s[1]||(s[1]=i("",4)),e(a,{text:"optional",type:"warning"}),s[2]||(s[2]=i("",7)),e(a,{text:"optional",type:"warning"}),s[3]||(s[3]=i("",5)),e(a,{text:"optional",type:"warning"}),s[4]||(s[4]=i("",5)),e(a,{text:"optional",type:"warning"}),s[5]||(s[5]=i("",11)),e(a,{text:"optional",type:"warning"}),s[6]||(s[6]=i("",6)),e(a,{text:"optional",type:"warning"}),s[7]||(s[7]=i("",5)),e(a,{text:"optional",type:"warning"}),s[8]||(s[8]=i("",6)),e(a,{text:"optional",type:"warning"}),s[9]||(s[9]=i("",4)),e(a,{text:"optional",type:"warning"}),s[10]||(s[10]=i("",12)),e(a,{text:"optional",type:"warning"}),s[11]||(s[11]=i("",4)),e(a,{text:"optional",type:"warning"}),s[12]||(s[12]=i("",5))])}const u=t(r,[["render",k]]);export{y as __pageData,u as default};
diff --git a/assets/config_response-object.md.U7zYb2Gi.js b/assets/config_response-object.md.8qsMplLz.js
similarity index 98%
rename from assets/config_response-object.md.U7zYb2Gi.js
rename to assets/config_response-object.md.8qsMplLz.js
index 5f8b49a..babb0b4 100644
--- a/assets/config_response-object.md.U7zYb2Gi.js
+++ b/assets/config_response-object.md.8qsMplLz.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,ag as t}from"./chunks/framework.CnuuF8_c.js";const k=JSON.parse('{"title":"Response object","description":"","frontmatter":{},"headers":[],"relativePath":"config/response-object.md","filePath":"config/response-object.md","lastUpdated":1755791588000}'),n={name:"config/response-object.md"};function o(r,e,h,d,l,p){return a(),i("div",null,e[0]||(e[0]=[t(`

Response object

Axios cache interceptor returns a slightly changed than the original axios response. Containing information about the cache and other needed properties.

id

  • Type: string

The Request ID used in this request.

It may have been generated by the Key Generator or a custom one provided by config.id

ts
const response = await axios.get('url', { id: 'my-overridden-id' });
+import{_ as s,c as i,o as a,ag as t}from"./chunks/framework.CnuuF8_c.js";const k=JSON.parse('{"title":"Response object","description":"","frontmatter":{},"headers":[],"relativePath":"config/response-object.md","filePath":"config/response-object.md","lastUpdated":1760451679000}'),n={name:"config/response-object.md"};function o(r,e,h,d,l,p){return a(),i("div",null,e[0]||(e[0]=[t(`

Response object

Axios cache interceptor returns a slightly changed than the original axios response. Containing information about the cache and other needed properties.

id

  • Type: string

The Request ID used in this request.

It may have been generated by the Key Generator or a custom one provided by config.id

ts
const response = await axios.get('url', { id: 'my-overridden-id' });
 
 // This request used 'my-overridden-id' and
 // not the one generated by the key generator
diff --git a/assets/config_response-object.md.U7zYb2Gi.lean.js b/assets/config_response-object.md.8qsMplLz.lean.js
similarity index 85%
rename from assets/config_response-object.md.U7zYb2Gi.lean.js
rename to assets/config_response-object.md.8qsMplLz.lean.js
index 76cfec7..aec741c 100644
--- a/assets/config_response-object.md.U7zYb2Gi.lean.js
+++ b/assets/config_response-object.md.8qsMplLz.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,ag as t}from"./chunks/framework.CnuuF8_c.js";const k=JSON.parse('{"title":"Response object","description":"","frontmatter":{},"headers":[],"relativePath":"config/response-object.md","filePath":"config/response-object.md","lastUpdated":1755791588000}'),n={name:"config/response-object.md"};function o(r,e,h,d,l,p){return a(),i("div",null,e[0]||(e[0]=[t("",15)]))}const g=s(n,[["render",o]]);export{k as __pageData,g as default};
+import{_ as s,c as i,o as a,ag as t}from"./chunks/framework.CnuuF8_c.js";const k=JSON.parse('{"title":"Response object","description":"","frontmatter":{},"headers":[],"relativePath":"config/response-object.md","filePath":"config/response-object.md","lastUpdated":1760451679000}'),n={name:"config/response-object.md"};function o(r,e,h,d,l,p){return a(),i("div",null,e[0]||(e[0]=[t("",15)]))}const g=s(n,[["render",o]]);export{k as __pageData,g as default};
diff --git a/assets/generated_benchmark.md.CI-K7IUa.js b/assets/generated_benchmark.md.DZpgBPX8.js
similarity index 92%
rename from assets/generated_benchmark.md.CI-K7IUa.js
rename to assets/generated_benchmark.md.DZpgBPX8.js
index b639df2..b780781 100644
--- a/assets/generated_benchmark.md.CI-K7IUa.js
+++ b/assets/generated_benchmark.md.DZpgBPX8.js
@@ -1 +1 @@
-import{_ as a,c as t,o as r,ag as i}from"./chunks/framework.CnuuF8_c.js";const m=JSON.parse('{"title":"Result","description":"","frontmatter":{},"headers":[],"relativePath":"generated/benchmark.md","filePath":"generated/benchmark.md","lastUpdated":1755791588000}'),o={name:"generated/benchmark.md"};function n(l,e,d,s,c,h){return r(),t("div",null,e[0]||(e[0]=[i('

Result

Run at Sun, 29 Jan 2023 01:24:01 GMT

Commit: 3db90e8c262c48d011fdd53bcda105512434e56e

CACHE INTERCEPTOR

  • Operations: 41275/s
  • Network requests: 1 of 205788
  • Performance: 100.00%

CACHE ADAPTER

  • Operations: 37683/s
  • Network requests: 2 of 185780
  • Performance: 91.30%

AXIOS

  • Operations: 1970/s
  • Network requests: 9773 of 9773
  • Performance: 4.77%
',10)]))}const p=a(o,[["render",n]]);export{m as __pageData,p as default}; +import{_ as a,c as t,o as r,ag as i}from"./chunks/framework.CnuuF8_c.js";const m=JSON.parse('{"title":"Result","description":"","frontmatter":{},"headers":[],"relativePath":"generated/benchmark.md","filePath":"generated/benchmark.md","lastUpdated":1760451679000}'),o={name:"generated/benchmark.md"};function n(l,e,d,s,c,h){return r(),t("div",null,e[0]||(e[0]=[i('

Result

Run at Sun, 29 Jan 2023 01:24:01 GMT

Commit: 3db90e8c262c48d011fdd53bcda105512434e56e

CACHE INTERCEPTOR

  • Operations: 41275/s
  • Network requests: 1 of 205788
  • Performance: 100.00%

CACHE ADAPTER

  • Operations: 37683/s
  • Network requests: 2 of 185780
  • Performance: 91.30%

AXIOS

  • Operations: 1970/s
  • Network requests: 9773 of 9773
  • Performance: 4.77%
',10)]))}const p=a(o,[["render",n]]);export{m as __pageData,p as default}; diff --git a/assets/generated_benchmark.md.CI-K7IUa.lean.js b/assets/generated_benchmark.md.DZpgBPX8.lean.js similarity index 70% rename from assets/generated_benchmark.md.CI-K7IUa.lean.js rename to assets/generated_benchmark.md.DZpgBPX8.lean.js index 278ef28..e815761 100644 --- a/assets/generated_benchmark.md.CI-K7IUa.lean.js +++ b/assets/generated_benchmark.md.DZpgBPX8.lean.js @@ -1 +1 @@ -import{_ as a,c as t,o as r,ag as i}from"./chunks/framework.CnuuF8_c.js";const m=JSON.parse('{"title":"Result","description":"","frontmatter":{},"headers":[],"relativePath":"generated/benchmark.md","filePath":"generated/benchmark.md","lastUpdated":1755791588000}'),o={name:"generated/benchmark.md"};function n(l,e,d,s,c,h){return r(),t("div",null,e[0]||(e[0]=[i("",10)]))}const p=a(o,[["render",n]]);export{m as __pageData,p as default}; +import{_ as a,c as t,o as r,ag as i}from"./chunks/framework.CnuuF8_c.js";const m=JSON.parse('{"title":"Result","description":"","frontmatter":{},"headers":[],"relativePath":"generated/benchmark.md","filePath":"generated/benchmark.md","lastUpdated":1760451679000}'),o={name:"generated/benchmark.md"};function n(l,e,d,s,c,h){return r(),t("div",null,e[0]||(e[0]=[i("",10)]))}const p=a(o,[["render",n]]);export{m as __pageData,p as default}; diff --git a/assets/guide.md.d-o1ySQc.js b/assets/guide.md.Ch_3Blm4.js similarity index 98% rename from assets/guide.md.d-o1ySQc.js rename to assets/guide.md.Ch_3Blm4.js index b04d507..7b1ec00 100644 --- a/assets/guide.md.d-o1ySQc.js +++ b/assets/guide.md.Ch_3Blm4.js @@ -1 +1 @@ -import{_ as a,c as t,o as r,ag as o}from"./chunks/framework.CnuuF8_c.js";const p=JSON.parse('{"title":"Introduction","description":"","frontmatter":{},"headers":[],"relativePath":"guide.md","filePath":"guide.md","lastUpdated":1755791588000}'),i={name:"guide.md"};function s(n,e,h,l,d,c){return r(),t("div",null,e[0]||(e[0]=[o('

Introduction

Axios Cache Interceptor is a, as it name says, a interceptor for axios to handle caching. It was created to help developers call axios multiple times without having to worry about overloading the network or coding himself a simple and buggy cache system.

Each request goes through an interceptor applied to your axios instance. There, we handle each request and decide if we should send it to the network or return a cached response.

How it works

By using axios interceptors instead of adapters, each request is passed through the interceptor before calling the adapter and before returning to the original caller. Adapters are the final step and they are responsible for the actual network call, so, by choosing to use interceptors, we create a minimally invasive approach that allows you to still use the axios adapter of your choice.

Before the request is delivered to the adapter, our request interceptor checks if the request have already been cached and if it’s a valid one, checks if the request should be cached (sometimes you don’t want cache at all, and it’s ok), if there’s already a request sent to the network that we can wait for it and many more other checks.

After the adapter gets the response, we check if it belongs to a cacheable request, saves it into the storage, resolves other requests awaiting for the same resource and finally returns the response to the original caller.

Features

  • TTL, Cache-Control and ETag.
  • Return previous cached request if the new one failed.
  • Handles parallel requests
  • 100% Customizable
  • Built-in storages like In-Memory, Local Storage and Session Storage.
  • Less than 4.3Kb minified and gzipped.
  • Development mode to debug your requests.
  • 22 times faster than using axios and 8% faster than axios-cache-adapter.
  • And much more…

Why not…?

axios-cache-adapter

The creation of this library is heavily inspired by axios-cache-adapter. It was a great library but now it is unmaintained and has a lot of unresolved issues. Also, it weights more than 4x the size of this library with less features and less performance.

Fetch and some state management library?

As this library was built to be used with axios and to handle storage itself, I can assure that it is more performant that any glued code you may find and/or write yourself. About state management libraries and other similar things, this blog post explains why cache is more correct, architectural way, instead of state.

',15)]))}const m=a(i,[["render",s]]);export{p as __pageData,m as default}; +import{_ as a,c as t,o as r,ag as o}from"./chunks/framework.CnuuF8_c.js";const p=JSON.parse('{"title":"Introduction","description":"","frontmatter":{},"headers":[],"relativePath":"guide.md","filePath":"guide.md","lastUpdated":1760451679000}'),i={name:"guide.md"};function s(n,e,h,l,d,c){return r(),t("div",null,e[0]||(e[0]=[o('

Introduction

Axios Cache Interceptor is a, as it name says, a interceptor for axios to handle caching. It was created to help developers call axios multiple times without having to worry about overloading the network or coding himself a simple and buggy cache system.

Each request goes through an interceptor applied to your axios instance. There, we handle each request and decide if we should send it to the network or return a cached response.

How it works

By using axios interceptors instead of adapters, each request is passed through the interceptor before calling the adapter and before returning to the original caller. Adapters are the final step and they are responsible for the actual network call, so, by choosing to use interceptors, we create a minimally invasive approach that allows you to still use the axios adapter of your choice.

Before the request is delivered to the adapter, our request interceptor checks if the request have already been cached and if it’s a valid one, checks if the request should be cached (sometimes you don’t want cache at all, and it’s ok), if there’s already a request sent to the network that we can wait for it and many more other checks.

After the adapter gets the response, we check if it belongs to a cacheable request, saves it into the storage, resolves other requests awaiting for the same resource and finally returns the response to the original caller.

Features

  • TTL, Cache-Control and ETag.
  • Return previous cached request if the new one failed.
  • Handles parallel requests
  • 100% Customizable
  • Built-in storages like In-Memory, Local Storage and Session Storage.
  • Less than 4.3Kb minified and gzipped.
  • Development mode to debug your requests.
  • 22 times faster than using axios and 8% faster than axios-cache-adapter.
  • And much more…

Why not…?

axios-cache-adapter

The creation of this library is heavily inspired by axios-cache-adapter. It was a great library but now it is unmaintained and has a lot of unresolved issues. Also, it weights more than 4x the size of this library with less features and less performance.

Fetch and some state management library?

As this library was built to be used with axios and to handle storage itself, I can assure that it is more performant that any glued code you may find and/or write yourself. About state management libraries and other similar things, this blog post explains why cache is more correct, architectural way, instead of state.

',15)]))}const m=a(i,[["render",s]]);export{p as __pageData,m as default}; diff --git a/assets/guide.md.d-o1ySQc.lean.js b/assets/guide.md.Ch_3Blm4.lean.js similarity index 84% rename from assets/guide.md.d-o1ySQc.lean.js rename to assets/guide.md.Ch_3Blm4.lean.js index 0f0c4bd..c90b410 100644 --- a/assets/guide.md.d-o1ySQc.lean.js +++ b/assets/guide.md.Ch_3Blm4.lean.js @@ -1 +1 @@ -import{_ as a,c as t,o as r,ag as o}from"./chunks/framework.CnuuF8_c.js";const p=JSON.parse('{"title":"Introduction","description":"","frontmatter":{},"headers":[],"relativePath":"guide.md","filePath":"guide.md","lastUpdated":1755791588000}'),i={name:"guide.md"};function s(n,e,h,l,d,c){return r(),t("div",null,e[0]||(e[0]=[o("",15)]))}const m=a(i,[["render",s]]);export{p as __pageData,m as default}; +import{_ as a,c as t,o as r,ag as o}from"./chunks/framework.CnuuF8_c.js";const p=JSON.parse('{"title":"Introduction","description":"","frontmatter":{},"headers":[],"relativePath":"guide.md","filePath":"guide.md","lastUpdated":1760451679000}'),i={name:"guide.md"};function s(n,e,h,l,d,c){return r(),t("div",null,e[0]||(e[0]=[o("",15)]))}const m=a(i,[["render",s]]);export{p as __pageData,m as default}; diff --git a/assets/guide_comparison.md.DU5b-rG0.js b/assets/guide_comparison.md.CJjCfmUB.js similarity index 99% rename from assets/guide_comparison.md.DU5b-rG0.js rename to assets/guide_comparison.md.CJjCfmUB.js index b7da2a8..61226ac 100644 --- a/assets/guide_comparison.md.DU5b-rG0.js +++ b/assets/guide_comparison.md.CJjCfmUB.js @@ -1,4 +1,4 @@ -import{_ as e,c as a,o as s,ag as n}from"./chunks/framework.CnuuF8_c.js";const g=JSON.parse('{"title":"Comparison","description":"","frontmatter":{},"headers":[],"relativePath":"guide/comparison.md","filePath":"guide/comparison.md","lastUpdated":1755791588000}'),i={name:"guide/comparison.md"};function l(r,t,d,c,p,o){return s(),a("div",null,t[0]||(t[0]=[n(`

Comparison

This comparison page aims to be detailed, unbiased, and up-to-date.
If you see any information that may be inaccurate or could be improved otherwise, please feel free to suggest changes.

Cache Features

✅ Supported 1st-class and documented.
+import{_ as e,c as a,o as s,ag as n}from"./chunks/framework.CnuuF8_c.js";const g=JSON.parse('{"title":"Comparison","description":"","frontmatter":{},"headers":[],"relativePath":"guide/comparison.md","filePath":"guide/comparison.md","lastUpdated":1760451679000}'),i={name:"guide/comparison.md"};function l(r,t,d,c,p,o){return s(),a("div",null,t[0]||(t[0]=[n(`

Comparison

This comparison page aims to be detailed, unbiased, and up-to-date.
If you see any information that may be inaccurate or could be improved otherwise, please feel free to suggest changes.

Cache Features

✅ Supported 1st-class and documented.
 🔶 Supported and documented, but requires custom user-code to implement.
 🟡 Can be done, may not be documented.
 🛑 Not officially supported or documented.
Axios Cache InterceptorAxios Cache AdapterCachios
Compared versionLatest2.7.33.1.1
Expiration with TTL
Per-request configuration
Global and custom instance
Cache-Control header🛑
Expires & Age header🟡🛑
ETag and If-None-Match header🛑🛑
If-Modified-Size header🛑🛑
Bundle size4.4Kb (gzip)18.9Kb (gzip)19.5Kb (gzip)
Typescript declaration✅ (Custom interface)✅ (Applied globally)✅(Applied globally)
Custom cache keys
Multiple storages🔶 (Only localForage)
Built-in redis storage🔶🟡
Handles storage quota errors
Node & Web compatible🛑
Invalidate cache based on response🛑
Update cache based on response🟡🟡
Predicate to test if request should be cached🛑
Concurrent requests🔶#231🛑
Cache fallback on network errors
Debug / Development mode🛑

Benchmark

The benchmark is composed of axios throughput tests to compare the performance of this library, axios-cache-adapter and axios as it is.

md
# Result
diff --git a/assets/guide_comparison.md.DU5b-rG0.lean.js b/assets/guide_comparison.md.CJjCfmUB.lean.js
similarity index 85%
rename from assets/guide_comparison.md.DU5b-rG0.lean.js
rename to assets/guide_comparison.md.CJjCfmUB.lean.js
index 5a4e7b7..4205303 100644
--- a/assets/guide_comparison.md.DU5b-rG0.lean.js
+++ b/assets/guide_comparison.md.CJjCfmUB.lean.js
@@ -1 +1 @@
-import{_ as e,c as a,o as s,ag as n}from"./chunks/framework.CnuuF8_c.js";const g=JSON.parse('{"title":"Comparison","description":"","frontmatter":{},"headers":[],"relativePath":"guide/comparison.md","filePath":"guide/comparison.md","lastUpdated":1755791588000}'),i={name:"guide/comparison.md"};function l(r,t,d,c,p,o){return s(),a("div",null,t[0]||(t[0]=[n("",9)]))}const y=e(i,[["render",l]]);export{g as __pageData,y as default};
+import{_ as e,c as a,o as s,ag as n}from"./chunks/framework.CnuuF8_c.js";const g=JSON.parse('{"title":"Comparison","description":"","frontmatter":{},"headers":[],"relativePath":"guide/comparison.md","filePath":"guide/comparison.md","lastUpdated":1760451679000}'),i={name:"guide/comparison.md"};function l(r,t,d,c,p,o){return s(),a("div",null,t[0]||(t[0]=[n("",9)]))}const y=e(i,[["render",l]]);export{g as __pageData,y as default};
diff --git a/assets/guide_debugging.md.CVFh7a0y.js b/assets/guide_debugging.md.UDhonkLW.js
similarity index 98%
rename from assets/guide_debugging.md.CVFh7a0y.js
rename to assets/guide_debugging.md.UDhonkLW.js
index 1463abb..6a5c76b 100644
--- a/assets/guide_debugging.md.CVFh7a0y.js
+++ b/assets/guide_debugging.md.UDhonkLW.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as n,ag as h}from"./chunks/framework.CnuuF8_c.js";const r=JSON.parse('{"title":"Debugging","description":"","frontmatter":{},"headers":[],"relativePath":"guide/debugging.md","filePath":"guide/debugging.md","lastUpdated":1755791588000}'),t={name:"guide/debugging.md"};function k(p,s,l,e,C,A){return n(),a("div",null,s[0]||(s[0]=[h(`

Debugging

I’m certainly sure that along the way you will find some cache behavior that is not the expected to the current situation. To help with that, the library has a separate robust build with support to debug logs enabled.

You can use it by changing the setupCache import:

ts
import Axios from 'axios';
+import{_ as i,c as a,o as n,ag as h}from"./chunks/framework.CnuuF8_c.js";const r=JSON.parse('{"title":"Debugging","description":"","frontmatter":{},"headers":[],"relativePath":"guide/debugging.md","filePath":"guide/debugging.md","lastUpdated":1760451679000}'),t={name:"guide/debugging.md"};function k(p,s,l,e,C,A){return n(),a("div",null,s[0]||(s[0]=[h(`

Debugging

I’m certainly sure that along the way you will find some cache behavior that is not the expected to the current situation. To help with that, the library has a separate robust build with support to debug logs enabled.

You can use it by changing the setupCache import:

ts
import Axios from 'axios';
 
 // Only import from \`/dev\` where you import \`setupCache\`.
 import { setupCache } from 'axios-cache-interceptor';
diff --git a/assets/guide_debugging.md.CVFh7a0y.lean.js b/assets/guide_debugging.md.UDhonkLW.lean.js
similarity index 85%
rename from assets/guide_debugging.md.CVFh7a0y.lean.js
rename to assets/guide_debugging.md.UDhonkLW.lean.js
index 9df34f1..6b0b9a4 100644
--- a/assets/guide_debugging.md.CVFh7a0y.lean.js
+++ b/assets/guide_debugging.md.UDhonkLW.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,ag as h}from"./chunks/framework.CnuuF8_c.js";const r=JSON.parse('{"title":"Debugging","description":"","frontmatter":{},"headers":[],"relativePath":"guide/debugging.md","filePath":"guide/debugging.md","lastUpdated":1755791588000}'),t={name:"guide/debugging.md"};function k(p,s,l,e,C,A){return n(),a("div",null,s[0]||(s[0]=[h("",7)]))}const g=i(t,[["render",k]]);export{r as __pageData,g as default};
+import{_ as i,c as a,o as n,ag as h}from"./chunks/framework.CnuuF8_c.js";const r=JSON.parse('{"title":"Debugging","description":"","frontmatter":{},"headers":[],"relativePath":"guide/debugging.md","filePath":"guide/debugging.md","lastUpdated":1760451679000}'),t={name:"guide/debugging.md"};function k(p,s,l,e,C,A){return n(),a("div",null,s[0]||(s[0]=[h("",7)]))}const g=i(t,[["render",k]]);export{r as __pageData,g as default};
diff --git a/assets/guide_getting-started.md.Ds5NdnOh.js b/assets/guide_getting-started.md.X7rsi6EE.js
similarity index 96%
rename from assets/guide_getting-started.md.Ds5NdnOh.js
rename to assets/guide_getting-started.md.X7rsi6EE.js
index 41d4b69..75b091f 100644
--- a/assets/guide_getting-started.md.Ds5NdnOh.js
+++ b/assets/guide_getting-started.md.X7rsi6EE.js
@@ -1,9 +1,9 @@
-import{_ as i,c as a,o as t,ag as h}from"./chunks/framework.CnuuF8_c.js";const g=JSON.parse('{"title":"Getting Started","description":"","frontmatter":{},"headers":[],"relativePath":"guide/getting-started.md","filePath":"guide/getting-started.md","lastUpdated":1755791588000}'),n={name:"guide/getting-started.md"};function k(e,s,l,p,r,d){return t(),a("div",null,s[0]||(s[0]=[h(`

Getting Started

Looking for axios v0?

Install

Add Axios Cache Interceptor and Axios to your project using your favorite package manager:

bash
npm install axios@^1 axios-cache-interceptor@^1
html
<!-- Development UMD build for ES2017+ (~14.2 KiB) -->
+import{_ as i,c as a,o as t,ag as h}from"./chunks/framework.CnuuF8_c.js";const g=JSON.parse('{"title":"Getting Started","description":"","frontmatter":{},"headers":[],"relativePath":"guide/getting-started.md","filePath":"guide/getting-started.md","lastUpdated":1760451679000}'),n={name:"guide/getting-started.md"};function k(e,s,l,p,r,d){return t(),a("div",null,s[0]||(s[0]=[h(`

Getting Started

Looking for axios v0?

Install

Add Axios Cache Interceptor and Axios to your project using your favorite package manager:

bash
npm install axios@^1 axios-cache-interceptor@^1
html
<!-- Development UMD build for ES2017+ (~14.2 KiB) -->
 <script src="https://cdn.jsdelivr.net/npm/axios-cache-interceptor@1/dev/index.bundle.js"></script>
 
 <!-- Production UMD build for ES5+ (~16.4 KiB) -->
 <script src="https://cdn.jsdelivr.net/npm/axios-cache-interceptor@1/dist/index.bundle.js"></script>
ts
import Axios from 'https://cdn.skypack.dev/axios';
-import { setupCache } from 'https://cdn.skypack.dev/axios-cache-interceptor';

Setup

After installing, you can import the package and apply the interceptor to your axios instance, as shown below:

ts
import Axios from 'axios';
+import { setupCache } from 'https://cdn.skypack.dev/axios-cache-interceptor';

Setup

After installing, you can import the package and apply the interceptor to your axios instance, as shown below:

ts
import Axios from 'axios';
 import { setupCache } from 'axios-cache-interceptor';
 
 const instance = Axios.create();
diff --git a/assets/guide_getting-started.md.Ds5NdnOh.lean.js b/assets/guide_getting-started.md.X7rsi6EE.lean.js
similarity index 85%
rename from assets/guide_getting-started.md.Ds5NdnOh.lean.js
rename to assets/guide_getting-started.md.X7rsi6EE.lean.js
index c58e653..c8b346d 100644
--- a/assets/guide_getting-started.md.Ds5NdnOh.lean.js
+++ b/assets/guide_getting-started.md.X7rsi6EE.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as t,ag as h}from"./chunks/framework.CnuuF8_c.js";const g=JSON.parse('{"title":"Getting Started","description":"","frontmatter":{},"headers":[],"relativePath":"guide/getting-started.md","filePath":"guide/getting-started.md","lastUpdated":1755791588000}'),n={name:"guide/getting-started.md"};function k(e,s,l,p,r,d){return t(),a("div",null,s[0]||(s[0]=[h("",17)]))}const o=i(n,[["render",k]]);export{g as __pageData,o as default};
+import{_ as i,c as a,o as t,ag as h}from"./chunks/framework.CnuuF8_c.js";const g=JSON.parse('{"title":"Getting Started","description":"","frontmatter":{},"headers":[],"relativePath":"guide/getting-started.md","filePath":"guide/getting-started.md","lastUpdated":1760451679000}'),n={name:"guide/getting-started.md"};function k(e,s,l,p,r,d){return t(),a("div",null,s[0]||(s[0]=[h("",17)]))}const o=i(n,[["render",k]]);export{g as __pageData,o as default};
diff --git a/assets/guide_interceptors.md.La_rJDFR.js b/assets/guide_interceptors.md.B6YE2URo.js
similarity index 99%
rename from assets/guide_interceptors.md.La_rJDFR.js
rename to assets/guide_interceptors.md.B6YE2URo.js
index a132bb9..f72a0f0 100644
--- a/assets/guide_interceptors.md.La_rJDFR.js
+++ b/assets/guide_interceptors.md.B6YE2URo.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.CnuuF8_c.js";const C=JSON.parse('{"title":"Other Interceptors","description":"","frontmatter":{},"headers":[],"relativePath":"guide/interceptors.md","filePath":"guide/interceptors.md","lastUpdated":1755791588000}'),t={name:"guide/interceptors.md"};function h(p,s,l,k,r,o){return e(),a("div",null,s[0]||(s[0]=[n(`

Other Interceptors

When combining axios-cache-interceptors with other interceptors, you may encounter some inconsistencies. Which is explained in the next section.

TL;DR

  • Request interceptors registered before setupCache() are ran before and registrations made after are ran after.
  • Response interceptors registered before setupCache() are ran after and registrations made after are ran before.

Explanation

Axios interceptors are ran differently for the request and response ones.

  • Request interceptors are FILO (First In Last Out)
  • Response interceptors are FIFO (First In First Out)

As explained better in the Axios documentation and in this issue.

ts
// This will be ran BEFORE the cache interceptor
+import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.CnuuF8_c.js";const C=JSON.parse('{"title":"Other Interceptors","description":"","frontmatter":{},"headers":[],"relativePath":"guide/interceptors.md","filePath":"guide/interceptors.md","lastUpdated":1760451679000}'),t={name:"guide/interceptors.md"};function h(p,s,l,k,r,o){return e(),a("div",null,s[0]||(s[0]=[n(`

Other Interceptors

When combining axios-cache-interceptors with other interceptors, you may encounter some inconsistencies. Which is explained in the next section.

TL;DR

  • Request interceptors registered before setupCache() are ran before and registrations made after are ran after.
  • Response interceptors registered before setupCache() are ran after and registrations made after are ran before.

Explanation

Axios interceptors are ran differently for the request and response ones.

  • Request interceptors are FILO (First In Last Out)
  • Response interceptors are FIFO (First In First Out)

As explained better in the Axios documentation and in this issue.

ts
// This will be ran BEFORE the cache interceptor
 axios.interceptors.request.use((req) => req);
 
 // This will be ran AFTER the cache interceptor
diff --git a/assets/guide_interceptors.md.La_rJDFR.lean.js b/assets/guide_interceptors.md.B6YE2URo.lean.js
similarity index 85%
rename from assets/guide_interceptors.md.La_rJDFR.lean.js
rename to assets/guide_interceptors.md.B6YE2URo.lean.js
index d7ad804..bbcb869 100644
--- a/assets/guide_interceptors.md.La_rJDFR.lean.js
+++ b/assets/guide_interceptors.md.B6YE2URo.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.CnuuF8_c.js";const C=JSON.parse('{"title":"Other Interceptors","description":"","frontmatter":{},"headers":[],"relativePath":"guide/interceptors.md","filePath":"guide/interceptors.md","lastUpdated":1755791588000}'),t={name:"guide/interceptors.md"};function h(p,s,l,k,r,o){return e(),a("div",null,s[0]||(s[0]=[n("",23)]))}const A=i(t,[["render",h]]);export{C as __pageData,A as default};
+import{_ as i,c as a,o as e,ag as n}from"./chunks/framework.CnuuF8_c.js";const C=JSON.parse('{"title":"Other Interceptors","description":"","frontmatter":{},"headers":[],"relativePath":"guide/interceptors.md","filePath":"guide/interceptors.md","lastUpdated":1760451679000}'),t={name:"guide/interceptors.md"};function h(p,s,l,k,r,o){return e(),a("div",null,s[0]||(s[0]=[n("",23)]))}const A=i(t,[["render",h]]);export{C as __pageData,A as default};
diff --git a/assets/guide_invalidating-cache.md.Bckt7x3W.js b/assets/guide_invalidating-cache.md.D69gSzWZ.js
similarity index 99%
rename from assets/guide_invalidating-cache.md.Bckt7x3W.js
rename to assets/guide_invalidating-cache.md.D69gSzWZ.js
index 5d91854..e6d2301 100644
--- a/assets/guide_invalidating-cache.md.Bckt7x3W.js
+++ b/assets/guide_invalidating-cache.md.D69gSzWZ.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as t,ag as n}from"./chunks/framework.CnuuF8_c.js";const C=JSON.parse('{"title":"Invalidating Cache","description":"","frontmatter":{},"headers":[],"relativePath":"guide/invalidating-cache.md","filePath":"guide/invalidating-cache.md","lastUpdated":1755791588000}'),e={name:"guide/invalidating-cache.md"};function h(l,s,p,k,r,o){return t(),a("div",null,s[0]||(s[0]=[n(`

Invalidating Cache

When using cache-first approaches to improve performance, data inconsistency becomes your major problem. That occurs because you can mutate data in the server and others also can too. It becomes impossible to really know what the current state of the data is in real time without communicating with the server.

WARNING

All available revalidation methods only work when the request is successful.

If you are wanting to revalidate with a non standard 2XX status code, make sure to enable it at validateStatus or revalidate it manually as shown below.

Take a look at this simple example:

  1. User lists all available posts, the server returns an empty array.
  2. User proceeds to create a new post, server returns 200 OK.
  3. Your frontend navigates to the post list page.
  4. The post list page still shows 0 posts because it had a recent cache for that request.
  5. Your client shows 0 posts, but the server actually has 1 post.

Revalidation after mutation

In most cases, you are the one responsible for that inconsistency, like in the above example when the client itself initiated the mutation request. When that happens, you are capable of invalidating the cache for all places you have changed too.

The cache.update option is available for every request that you make, and it will be the go-to tool for invalidation.

TIP

By centralizing your requests into separate methods, you are more likely to keep track of custom IDs you use for each request, thus making it easier to reference and invalidate after.

Programmatically

If the mutation you made was just simple changes, you can get the mutation response and programmatically update your cache.

Again considering the first example, we can just do an array.push to the list-posts cache and we are good to go.

ts
// Uses \`list-posts\` id to be able to reference it later.
+import{_ as i,c as a,o as t,ag as n}from"./chunks/framework.CnuuF8_c.js";const C=JSON.parse('{"title":"Invalidating Cache","description":"","frontmatter":{},"headers":[],"relativePath":"guide/invalidating-cache.md","filePath":"guide/invalidating-cache.md","lastUpdated":1760451679000}'),e={name:"guide/invalidating-cache.md"};function h(l,s,p,k,r,o){return t(),a("div",null,s[0]||(s[0]=[n(`

Invalidating Cache

When using cache-first approaches to improve performance, data inconsistency becomes your major problem. That occurs because you can mutate data in the server and others also can too. It becomes impossible to really know what the current state of the data is in real time without communicating with the server.

WARNING

All available revalidation methods only work when the request is successful.

If you are wanting to revalidate with a non standard 2XX status code, make sure to enable it at validateStatus or revalidate it manually as shown below.

Take a look at this simple example:

  1. User lists all available posts, the server returns an empty array.
  2. User proceeds to create a new post, server returns 200 OK.
  3. Your frontend navigates to the post list page.
  4. The post list page still shows 0 posts because it had a recent cache for that request.
  5. Your client shows 0 posts, but the server actually has 1 post.

Revalidation after mutation

In most cases, you are the one responsible for that inconsistency, like in the above example when the client itself initiated the mutation request. When that happens, you are capable of invalidating the cache for all places you have changed too.

The cache.update option is available for every request that you make, and it will be the go-to tool for invalidation.

TIP

By centralizing your requests into separate methods, you are more likely to keep track of custom IDs you use for each request, thus making it easier to reference and invalidate after.

Programmatically

If the mutation you made was just simple changes, you can get the mutation response and programmatically update your cache.

Again considering the first example, we can just do an array.push to the list-posts cache and we are good to go.

ts
// Uses \`list-posts\` id to be able to reference it later.
 function listPosts() {
   return axios.get('/posts', {
     id: 'list-posts'
diff --git a/assets/guide_invalidating-cache.md.Bckt7x3W.lean.js b/assets/guide_invalidating-cache.md.D69gSzWZ.lean.js
similarity index 86%
rename from assets/guide_invalidating-cache.md.Bckt7x3W.lean.js
rename to assets/guide_invalidating-cache.md.D69gSzWZ.lean.js
index 2333a74..7017596 100644
--- a/assets/guide_invalidating-cache.md.Bckt7x3W.lean.js
+++ b/assets/guide_invalidating-cache.md.D69gSzWZ.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as t,ag as n}from"./chunks/framework.CnuuF8_c.js";const C=JSON.parse('{"title":"Invalidating Cache","description":"","frontmatter":{},"headers":[],"relativePath":"guide/invalidating-cache.md","filePath":"guide/invalidating-cache.md","lastUpdated":1755791588000}'),e={name:"guide/invalidating-cache.md"};function h(l,s,p,k,r,o){return t(),a("div",null,s[0]||(s[0]=[n("",33)]))}const g=i(e,[["render",h]]);export{C as __pageData,g as default};
+import{_ as i,c as a,o as t,ag as n}from"./chunks/framework.CnuuF8_c.js";const C=JSON.parse('{"title":"Invalidating Cache","description":"","frontmatter":{},"headers":[],"relativePath":"guide/invalidating-cache.md","filePath":"guide/invalidating-cache.md","lastUpdated":1760451679000}'),e={name:"guide/invalidating-cache.md"};function h(l,s,p,k,r,o){return t(),a("div",null,s[0]||(s[0]=[n("",33)]))}const g=i(e,[["render",h]]);export{C as __pageData,g as default};
diff --git a/assets/guide_request-id.md.DHclQsmi.js b/assets/guide_request-id.md.BqDUl7YS.js
similarity index 98%
rename from assets/guide_request-id.md.DHclQsmi.js
rename to assets/guide_request-id.md.BqDUl7YS.js
index 571ae0a..eb20bea 100644
--- a/assets/guide_request-id.md.DHclQsmi.js
+++ b/assets/guide_request-id.md.BqDUl7YS.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as t,ag as e}from"./chunks/framework.CnuuF8_c.js";const C=JSON.parse('{"title":"Request Id","description":"","frontmatter":{},"headers":[],"relativePath":"guide/request-id.md","filePath":"guide/request-id.md","lastUpdated":1755791588000}'),h={name:"guide/request-id.md"};function n(k,s,l,p,r,d){return t(),a("div",null,s[0]||(s[0]=[e(`

Request Id

We can distinguish requests from each other by assigning an non unique id to each request. These IDs are the same provided to the storage as keys.

Each ID is responsible for binding a cache to its request, for referencing or invalidating it later and to make the interceptor use the same cache for requests to the same endpoint and parameters.

The default id generator is smart enough to generate the same ID for theoretically same requests. { baseURL: 'https://a.com/', url: '/b' } == { url: 'https://a.com/b/' }.

ts
import Axios from 'axios';
+import{_ as i,c as a,o as t,ag as e}from"./chunks/framework.CnuuF8_c.js";const C=JSON.parse('{"title":"Request Id","description":"","frontmatter":{},"headers":[],"relativePath":"guide/request-id.md","filePath":"guide/request-id.md","lastUpdated":1760451679000}'),h={name:"guide/request-id.md"};function n(k,s,l,p,r,d){return t(),a("div",null,s[0]||(s[0]=[e(`

Request Id

We can distinguish requests from each other by assigning an non unique id to each request. These IDs are the same provided to the storage as keys.

Each ID is responsible for binding a cache to its request, for referencing or invalidating it later and to make the interceptor use the same cache for requests to the same endpoint and parameters.

The default id generator is smart enough to generate the same ID for theoretically same requests. { baseURL: 'https://a.com/', url: '/b' } == { url: 'https://a.com/b/' }.

ts
import Axios from 'axios';
 import { setupCache } from 'axios-cache-interceptor';
 
 const axios = setupCache(Axios);
diff --git a/assets/guide_request-id.md.DHclQsmi.lean.js b/assets/guide_request-id.md.BqDUl7YS.lean.js
similarity index 85%
rename from assets/guide_request-id.md.DHclQsmi.lean.js
rename to assets/guide_request-id.md.BqDUl7YS.lean.js
index 6ab692e..348fc61 100644
--- a/assets/guide_request-id.md.DHclQsmi.lean.js
+++ b/assets/guide_request-id.md.BqDUl7YS.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as t,ag as e}from"./chunks/framework.CnuuF8_c.js";const C=JSON.parse('{"title":"Request Id","description":"","frontmatter":{},"headers":[],"relativePath":"guide/request-id.md","filePath":"guide/request-id.md","lastUpdated":1755791588000}'),h={name:"guide/request-id.md"};function n(k,s,l,p,r,d){return t(),a("div",null,s[0]||(s[0]=[e("",14)]))}const g=i(h,[["render",n]]);export{C as __pageData,g as default};
+import{_ as i,c as a,o as t,ag as e}from"./chunks/framework.CnuuF8_c.js";const C=JSON.parse('{"title":"Request Id","description":"","frontmatter":{},"headers":[],"relativePath":"guide/request-id.md","filePath":"guide/request-id.md","lastUpdated":1760451679000}'),h={name:"guide/request-id.md"};function n(k,s,l,p,r,d){return t(),a("div",null,s[0]||(s[0]=[e("",14)]))}const g=i(h,[["render",n]]);export{C as __pageData,g as default};
diff --git a/assets/guide_storages.md.CLMxY9uE.js b/assets/guide_storages.md.mDfw43wo.js
similarity index 98%
rename from assets/guide_storages.md.CLMxY9uE.js
rename to assets/guide_storages.md.mDfw43wo.js
index dc57d28..f1a2e71 100644
--- a/assets/guide_storages.md.CLMxY9uE.js
+++ b/assets/guide_storages.md.mDfw43wo.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.CnuuF8_c.js";const o=JSON.parse('{"title":"Storages","description":"","frontmatter":{},"headers":[],"relativePath":"guide/storages.md","filePath":"guide/storages.md","lastUpdated":1755791588000}'),h={name:"guide/storages.md"};function t(l,s,k,p,r,d){return n(),a("div",null,s[0]||(s[0]=[e(`

Storages

Storages are responsible for saving, retrieving and serializing (if needed) cache data. They are completely customizable and you can code your own, or use one published on NPM.

They are meant to be the middleware between the cache interceptor and some sort of database (persistent or not) you may have. Our interceptors will call its methods internally to save and retrieve data, but you can do it manually to work programmatically your own way.

Currently, two storages are included in the library by default:

Memory Storage

WARNING

This is the storage chosen by default

Memory storage is the simplest one. It works everywhere and its values are lost upon page reload or when the process is killed.

If you are directly mutating some response property, you probably will face some reference issues because the storage will also get mutated. To avoid that, you can use the clone: true option to clone the response before saving it or clone: 'double' to also clone both ways, on set() and on get(). Just like #136 and many others.

For long running processes, you can avoid memory leaks by using playing with the cleanupInterval option. And can reduce memory usage with maxEntries.

ts
import Axios from 'axios';
+import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.CnuuF8_c.js";const o=JSON.parse('{"title":"Storages","description":"","frontmatter":{},"headers":[],"relativePath":"guide/storages.md","filePath":"guide/storages.md","lastUpdated":1760451679000}'),h={name:"guide/storages.md"};function t(l,s,k,p,r,d){return n(),a("div",null,s[0]||(s[0]=[e(`

Storages

Storages are responsible for saving, retrieving and serializing (if needed) cache data. They are completely customizable and you can code your own, or use one published on NPM.

They are meant to be the middleware between the cache interceptor and some sort of database (persistent or not) you may have. Our interceptors will call its methods internally to save and retrieve data, but you can do it manually to work programmatically your own way.

Currently, two storages are included in the library by default:

Memory Storage

WARNING

This is the storage chosen by default

Memory storage is the simplest one. It works everywhere and its values are lost upon page reload or when the process is killed.

If you are directly mutating some response property, you probably will face some reference issues because the storage will also get mutated. To avoid that, you can use the clone: true option to clone the response before saving it or clone: 'double' to also clone both ways, on set() and on get(). Just like #136 and many others.

For long running processes, you can avoid memory leaks by using playing with the cleanupInterval option. And can reduce memory usage with maxEntries.

ts
import Axios from 'axios';
 import { setupCache, buildMemoryStorage } from 'axios-cache-interceptor';
 
 setupCache(axios, {
@@ -8,7 +8,7 @@ import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.CnuuF8_c.js";const o
     /* cleanupInterval default=*/ false,
     /* maxEntries default=*/ false
   )
-});

Options:

  • cloneData: Use true if the data returned by find() should be cloned to avoid mutating the original data outside the set() method. Use 'double' to also clone before saving value in storage using set(). Disabled is default

  • cleanupInterval: The interval in milliseconds to run a setInterval job of cleaning old entries. If false, the job will not be created. Disabled is default

  • maxEntries: The maximum number of entries to keep in the storage. Its hard to determine the size of the entries, so a smart FIFO order is used to determine eviction. If false, no check will be done and you may grow up memory usage. Disabled is default

Web Storage API

If you need persistent caching between page refreshes, you can use the buildWebStorage to get this behavior. It works by connecting our storage API to the browser’s Storage API.

ts
import Axios from 'axios';
+});

Options:

  • cloneData: Use true if the data returned by find() should be cloned to avoid mutating the original data outside the set() method. Use 'double' to also clone before saving value in storage using set(). Disabled is default

  • cleanupInterval: The interval in milliseconds to run a setInterval job of cleaning old entries. If false, the job will not be created. Disabled is default

  • maxEntries: The maximum number of entries to keep in the storage. Its hard to determine the size of the entries, so a smart FIFO order is used to determine eviction. If false, no check will be done and you may grow up memory usage. Disabled is default

Web Storage API

If you need persistent caching between page refreshes, you can use the buildWebStorage to get this behavior. It works by connecting our storage API to the browser’s Storage API.

ts
import Axios from 'axios';
 import { setupCache, buildWebStorage } from 'axios-cache-interceptor';
 
 setupCache(axios, {
@@ -50,8 +50,8 @@ import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.CnuuF8_c.js";const o
           ? Date.now() +
             (req?.cache && typeof req.cache.ttl === 'number'
               ? req.cache.ttl
-              : // 1 minute in seconds
-                60000)
+              : // 1 minute in milliseconds
+                60_000)
           : // When a stale state has a determined value to expire, we can use it.
           //   Or if the cached value cannot enter in stale state.
           (value.state === 'stale' && value.ttl) ||
diff --git a/assets/guide_storages.md.CLMxY9uE.lean.js b/assets/guide_storages.md.mDfw43wo.lean.js
similarity index 84%
rename from assets/guide_storages.md.CLMxY9uE.lean.js
rename to assets/guide_storages.md.mDfw43wo.lean.js
index 95cf94f..6ed2052 100644
--- a/assets/guide_storages.md.CLMxY9uE.lean.js
+++ b/assets/guide_storages.md.mDfw43wo.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.CnuuF8_c.js";const o=JSON.parse('{"title":"Storages","description":"","frontmatter":{},"headers":[],"relativePath":"guide/storages.md","filePath":"guide/storages.md","lastUpdated":1755791588000}'),h={name:"guide/storages.md"};function t(l,s,k,p,r,d){return n(),a("div",null,s[0]||(s[0]=[e("",38)]))}const g=i(h,[["render",t]]);export{o as __pageData,g as default};
+import{_ as i,c as a,o as n,ag as e}from"./chunks/framework.CnuuF8_c.js";const o=JSON.parse('{"title":"Storages","description":"","frontmatter":{},"headers":[],"relativePath":"guide/storages.md","filePath":"guide/storages.md","lastUpdated":1760451679000}'),h={name:"guide/storages.md"};function t(l,s,k,p,r,d){return n(),a("div",null,s[0]||(s[0]=[e("",38)]))}const g=i(h,[["render",t]]);export{o as __pageData,g as default};
diff --git a/assets/index.md.DLe--HIQ.js b/assets/index.md.Cj5fvPtr.js
similarity index 94%
rename from assets/index.md.DLe--HIQ.js
rename to assets/index.md.Cj5fvPtr.js
index 5c04465..9247c34 100644
--- a/assets/index.md.DLe--HIQ.js
+++ b/assets/index.md.Cj5fvPtr.js
@@ -1 +1 @@
-import{V as a}from"./chunks/theme.Bptbx08c.js";import{c as i,o as s,j as t,G as n,w as o,a as r,k as l}from"./chunks/framework.CnuuF8_c.js";const f=JSON.parse(`{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Axios Cache Interceptor","text":"Performant, small and powerful","tagline":"A cache interceptor for axios made with developers and performance in mind.","image":{"src":"/rocket.svg","alt":"Rocket","title":"Axios Cache Interceptor's logo"},"actions":[{"theme":"brand","text":"Get Started","link":"/guide/getting-started"},{"theme":"alt","text":"Why cache?","link":"https://arthur.place/implications-of-cache-or-state"},{"theme":"alt","text":"View on GitHub","link":"https://github.com/arthurfiorette/axios-cache-interceptor"}]},"features":[{"icon":"⚡","title":"Simply faster","details":"Serving 21x more requests/s than axios itself."},{"icon":"📦","title":"Handy builds","details":"No matter what's you JS setup, we got you covered! CDN, EcmaScript, UMD, CommonJS and URL imports."},{"icon":"🔩","title":"Hassle free","details":"Just setupCache() and watch the magic happen! Works for everyone, no matter the current combination of adapters or interceptors."},{"icon":"🛠️","title":"Rich Features","details":"We follow strict rules defined by MDN, RFCs, and other specifications. No more guessing."},{"icon":"🌐","title":"No network waste!","details":"Network speed should not matter for your users. Make your application work offline, on 2G or ultra-fast 5G, it's up to your users."},{"icon":"🔑","title":"TypeScript!","details":"Fully configurable and flexible interceptors with full type-safe typing."}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1755791588000}`),c={name:"index.md"},h=Object.assign(c,{setup(d){return(u,e)=>(s(),i("div",null,[e[2]||(e[2]=t("div",{style:{display:"none"},hidden:"true","aria-hidden":"true"},"Are you an LLM? View /llms.txt for optimized Markdown documentation, or /llms-full.txt for full documentation bundle",-1)),n(l(a),null,{title:o(()=>e[0]||(e[0]=[r(" Our Team ",-1)])),lead:o(()=>e[1]||(e[1]=[r(" Composed of a diverse group of people from all over the world through our open source community. ",-1)])),_:1}),e[3]||(e[3]=t("div",{class:"contributors"},[t("a",{href:"https://github.com/arthurfiorette/axios-cache-interceptor/graphs/contributors"},[t("img",{src:"https://contrib.rocks/image?repo=arthurfiorette/axios-cache-interceptor"})])],-1))]))}});export{f as __pageData,h as default};
+import{V as a}from"./chunks/theme.DpzYL1kV.js";import{c as i,o as s,j as t,G as n,w as o,a as r,k as l}from"./chunks/framework.CnuuF8_c.js";const f=JSON.parse(`{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Axios Cache Interceptor","text":"Performant, small and powerful","tagline":"A cache interceptor for axios made with developers and performance in mind.","image":{"src":"/rocket.svg","alt":"Rocket","title":"Axios Cache Interceptor's logo"},"actions":[{"theme":"brand","text":"Get Started","link":"/guide/getting-started"},{"theme":"alt","text":"Why cache?","link":"https://arthur.place/implications-of-cache-or-state"},{"theme":"alt","text":"View on GitHub","link":"https://github.com/arthurfiorette/axios-cache-interceptor"}]},"features":[{"icon":"⚡","title":"Simply faster","details":"Serving 21x more requests/s than axios itself."},{"icon":"📦","title":"Handy builds","details":"No matter what's you JS setup, we got you covered! CDN, EcmaScript, UMD, CommonJS and URL imports."},{"icon":"🔩","title":"Hassle free","details":"Just setupCache() and watch the magic happen! Works for everyone, no matter the current combination of adapters or interceptors."},{"icon":"🛠️","title":"Rich Features","details":"We follow strict rules defined by MDN, RFCs, and other specifications. No more guessing."},{"icon":"🌐","title":"No network waste!","details":"Network speed should not matter for your users. Make your application work offline, on 2G or ultra-fast 5G, it's up to your users."},{"icon":"🔑","title":"TypeScript!","details":"Fully configurable and flexible interceptors with full type-safe typing."}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1760451679000}`),c={name:"index.md"},h=Object.assign(c,{setup(d){return(u,e)=>(s(),i("div",null,[e[2]||(e[2]=t("div",{style:{display:"none"},hidden:"true","aria-hidden":"true"},"Are you an LLM? View /llms.txt for optimized Markdown documentation, or /llms-full.txt for full documentation bundle",-1)),n(l(a),null,{title:o(()=>e[0]||(e[0]=[r(" Our Team ",-1)])),lead:o(()=>e[1]||(e[1]=[r(" Composed of a diverse group of people from all over the world through our open source community. ",-1)])),_:1}),e[3]||(e[3]=t("div",{class:"contributors"},[t("a",{href:"https://github.com/arthurfiorette/axios-cache-interceptor/graphs/contributors"},[t("img",{src:"https://contrib.rocks/image?repo=arthurfiorette/axios-cache-interceptor"})])],-1))]))}});export{f as __pageData,h as default};
diff --git a/assets/index.md.DLe--HIQ.lean.js b/assets/index.md.Cj5fvPtr.lean.js
similarity index 94%
rename from assets/index.md.DLe--HIQ.lean.js
rename to assets/index.md.Cj5fvPtr.lean.js
index 5c04465..9247c34 100644
--- a/assets/index.md.DLe--HIQ.lean.js
+++ b/assets/index.md.Cj5fvPtr.lean.js
@@ -1 +1 @@
-import{V as a}from"./chunks/theme.Bptbx08c.js";import{c as i,o as s,j as t,G as n,w as o,a as r,k as l}from"./chunks/framework.CnuuF8_c.js";const f=JSON.parse(`{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Axios Cache Interceptor","text":"Performant, small and powerful","tagline":"A cache interceptor for axios made with developers and performance in mind.","image":{"src":"/rocket.svg","alt":"Rocket","title":"Axios Cache Interceptor's logo"},"actions":[{"theme":"brand","text":"Get Started","link":"/guide/getting-started"},{"theme":"alt","text":"Why cache?","link":"https://arthur.place/implications-of-cache-or-state"},{"theme":"alt","text":"View on GitHub","link":"https://github.com/arthurfiorette/axios-cache-interceptor"}]},"features":[{"icon":"⚡","title":"Simply faster","details":"Serving 21x more requests/s than axios itself."},{"icon":"📦","title":"Handy builds","details":"No matter what's you JS setup, we got you covered! CDN, EcmaScript, UMD, CommonJS and URL imports."},{"icon":"🔩","title":"Hassle free","details":"Just setupCache() and watch the magic happen! Works for everyone, no matter the current combination of adapters or interceptors."},{"icon":"🛠️","title":"Rich Features","details":"We follow strict rules defined by MDN, RFCs, and other specifications. No more guessing."},{"icon":"🌐","title":"No network waste!","details":"Network speed should not matter for your users. Make your application work offline, on 2G or ultra-fast 5G, it's up to your users."},{"icon":"🔑","title":"TypeScript!","details":"Fully configurable and flexible interceptors with full type-safe typing."}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1755791588000}`),c={name:"index.md"},h=Object.assign(c,{setup(d){return(u,e)=>(s(),i("div",null,[e[2]||(e[2]=t("div",{style:{display:"none"},hidden:"true","aria-hidden":"true"},"Are you an LLM? View /llms.txt for optimized Markdown documentation, or /llms-full.txt for full documentation bundle",-1)),n(l(a),null,{title:o(()=>e[0]||(e[0]=[r(" Our Team ",-1)])),lead:o(()=>e[1]||(e[1]=[r(" Composed of a diverse group of people from all over the world through our open source community. ",-1)])),_:1}),e[3]||(e[3]=t("div",{class:"contributors"},[t("a",{href:"https://github.com/arthurfiorette/axios-cache-interceptor/graphs/contributors"},[t("img",{src:"https://contrib.rocks/image?repo=arthurfiorette/axios-cache-interceptor"})])],-1))]))}});export{f as __pageData,h as default};
+import{V as a}from"./chunks/theme.DpzYL1kV.js";import{c as i,o as s,j as t,G as n,w as o,a as r,k as l}from"./chunks/framework.CnuuF8_c.js";const f=JSON.parse(`{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Axios Cache Interceptor","text":"Performant, small and powerful","tagline":"A cache interceptor for axios made with developers and performance in mind.","image":{"src":"/rocket.svg","alt":"Rocket","title":"Axios Cache Interceptor's logo"},"actions":[{"theme":"brand","text":"Get Started","link":"/guide/getting-started"},{"theme":"alt","text":"Why cache?","link":"https://arthur.place/implications-of-cache-or-state"},{"theme":"alt","text":"View on GitHub","link":"https://github.com/arthurfiorette/axios-cache-interceptor"}]},"features":[{"icon":"⚡","title":"Simply faster","details":"Serving 21x more requests/s than axios itself."},{"icon":"📦","title":"Handy builds","details":"No matter what's you JS setup, we got you covered! CDN, EcmaScript, UMD, CommonJS and URL imports."},{"icon":"🔩","title":"Hassle free","details":"Just setupCache() and watch the magic happen! Works for everyone, no matter the current combination of adapters or interceptors."},{"icon":"🛠️","title":"Rich Features","details":"We follow strict rules defined by MDN, RFCs, and other specifications. No more guessing."},{"icon":"🌐","title":"No network waste!","details":"Network speed should not matter for your users. Make your application work offline, on 2G or ultra-fast 5G, it's up to your users."},{"icon":"🔑","title":"TypeScript!","details":"Fully configurable and flexible interceptors with full type-safe typing."}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1760451679000}`),c={name:"index.md"},h=Object.assign(c,{setup(d){return(u,e)=>(s(),i("div",null,[e[2]||(e[2]=t("div",{style:{display:"none"},hidden:"true","aria-hidden":"true"},"Are you an LLM? View /llms.txt for optimized Markdown documentation, or /llms-full.txt for full documentation bundle",-1)),n(l(a),null,{title:o(()=>e[0]||(e[0]=[r(" Our Team ",-1)])),lead:o(()=>e[1]||(e[1]=[r(" Composed of a diverse group of people from all over the world through our open source community. ",-1)])),_:1}),e[3]||(e[3]=t("div",{class:"contributors"},[t("a",{href:"https://github.com/arthurfiorette/axios-cache-interceptor/graphs/contributors"},[t("img",{src:"https://contrib.rocks/image?repo=arthurfiorette/axios-cache-interceptor"})])],-1))]))}});export{f as __pageData,h as default};
diff --git a/assets/others_changelog.md.DH3AxIPz.js b/assets/others_changelog.md.DFW69MVv.js
similarity index 99%
rename from assets/others_changelog.md.DH3AxIPz.js
rename to assets/others_changelog.md.DFW69MVv.js
index c9d4cc5..7df8fbb 100644
--- a/assets/others_changelog.md.DH3AxIPz.js
+++ b/assets/others_changelog.md.DFW69MVv.js
@@ -1 +1 @@
-import{_ as r,c as t,o as a,ag as o}from"./chunks/framework.CnuuF8_c.js";const n=JSON.parse('{"title":"Changelog","description":"","frontmatter":{},"headers":[],"relativePath":"others/changelog.md","filePath":"others/changelog.md","lastUpdated":1755791588000}'),c={name:"others/changelog.md"};function i(h,e,l,d,f,p){return a(),t("div",null,e[0]||(e[0]=[o('

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog and this project adheres to Semantic Versioning.

Generated by auto-changelog.

v1.7.0

Commits

v1.7.0 - 2025-03-17

Merged

  • build(deps): bump codecov/codecov-action from 4 to 5 #943
  • docs: add missing ‘different’ word into the code example comment #984
  • build(deps-dev): bump axios from 1.8.2 to 1.8.3 #988
  • build(deps-dev): bump @types/node from 22.13.9 to 22.13.10 #987
  • build(deps-dev): bump axios from 1.8.1 to 1.8.2 #986
  • build(deps-dev): bump @types/node from 22.13.8 to 22.13.9 #985
  • build(deps-dev): bump typescript from 5.7.3 to 5.8.2 #983
  • build(deps-dev): bump @types/node from 22.13.5 to 22.13.8 #982
  • build(deps-dev): bump axios from 1.8.0 to 1.8.1 #981
  • build(deps-dev): bump axios from 1.7.9 to 1.8.0 #979
  • build(deps-dev): bump @types/node from 22.13.4 to 22.13.5 #978
  • build(deps-dev): bump @types/node from 22.13.2 to 22.13.4 #976
  • build(deps-dev): bump @types/node from 22.13.1 to 22.13.2 #974
  • build(deps-dev): bump @arthurfiorette/biomejs-config from 1.0.6 to 1.0.7 #973
  • build(deps-dev): bump @types/node from 22.13.0 to 22.13.1 #972
  • build(deps-dev): bump @types/node from 22.12.0 to 22.13.0 #971
  • build(deps-dev): bump @types/node from 22.10.10 to 22.12.0 #970
  • build(deps-dev): bump @types/node from 22.10.9 to 22.10.10 #969
  • build(deps-dev): bump @types/node from 22.10.7 to 22.10.9 #968
  • build(deps-dev): bump vitepress from 1.6.2 to 1.6.3 #967
  • build(deps-dev): bump vitepress from 1.6.1 to 1.6.2 #966
  • build(deps-dev): bump vitepress from 1.5.0 to 1.6.1 #965
  • build(deps-dev): bump @types/node from 22.10.6 to 22.10.7 #964
  • build(deps-dev): bump @types/node from 22.10.5 to 22.10.6 #963
  • build(deps-dev): bump typescript from 5.7.2 to 5.7.3 #962
  • build(deps-dev): bump @types/node from 22.10.3 to 22.10.5 #960
  • build(deps-dev): bump @types/node from 22.10.2 to 22.10.3 #959
  • build(deps-dev): bump @types/node from 22.10.1 to 22.10.2 #957
  • build(deps): bump nanoid from 3.3.7 to 3.3.8 #956
  • build(deps-dev): bump c8 from 10.1.2 to 10.1.3 #955
  • build(deps-dev): bump axios from 1.7.8 to 1.7.9 #954
  • build(deps-dev): bump @types/node from 22.10.0 to 22.10.1 #952
  • build(deps-dev): bump @arthurfiorette/biomejs-config from 1.0.5 to 1.0.6 #951
  • build(deps-dev): bump @types/node from 22.9.3 to 22.10.0 #950
  • build(deps-dev): bump axios from 1.7.7 to 1.7.8 #949
  • build(deps-dev): bump @types/node from 22.9.1 to 22.9.3 #948
  • build(deps-dev): bump typescript from 5.6.3 to 5.7.2 #947
  • build(deps-dev): bump @types/node from 22.9.0 to 22.9.1 #946
  • build(deps): bump cross-spawn from 7.0.3 to 7.0.6 #945
  • build(deps-dev): bump @swc/helpers from 0.5.13 to 0.5.15 #942
  • build(deps-dev): bump vitepress from 1.4.5 to 1.5.0 #941
  • build(deps-dev): bump @types/node from 22.8.7 to 22.9.0 #940
  • build(deps-dev): bump @types/node from 22.8.6 to 22.8.7 #939
  • build(deps-dev): bump vitepress from 1.4.3 to 1.4.5 #938
  • build(deps-dev): bump vitepress from 1.4.2 to 1.4.3 #936
  • build(deps-dev): bump @types/node from 22.8.5 to 22.8.6 #937
  • build(deps-dev): bump tslib from 2.8.0 to 2.8.1 #935
  • docs: vue behavior when modifying cached arrays #934
  • build(deps-dev): bump @types/node from 22.8.4 to 22.8.5 #933
  • build(deps-dev): bump vitepress from 1.4.1 to 1.4.2 #931
  • build(deps-dev): bump @types/node from 22.8.2 to 22.8.4 #930
  • build(deps-dev): bump @types/node from 22.8.1 to 22.8.2 #929
  • build(deps-dev): bump @types/node from 22.7.9 to 22.8.1 #928
  • build(deps-dev): bump @types/node from 22.7.8 to 22.7.9 #927

Commits

v1.6.2 - 2024-10-22

Merged

  • fix: aborted requests should not clear its cache afterwards if previous request was cached #923
  • build(deps-dev): bump @types/node from 22.7.7 to 22.7.8 #926
  • build(deps-dev): bump @types/node from 22.7.6 to 22.7.7 #924

Commits

1.6.1 - 2024-10-18

v1.6.1 - 2024-10-22

Merged

  • fix: aborted requests should not clear its cache afterwards if previous request was cached #923
  • build(deps-dev): bump @types/node from 22.7.7 to 22.7.8 #926
  • build(deps-dev): bump @types/node from 22.7.6 to 22.7.7 #924
  • fix: cloneData for concurrent requests #921
  • build(deps-dev): bump @biomejs/biome from 1.9.3 to 1.9.4 #920
  • build(deps-dev): bump @types/node from 22.7.5 to 22.7.6 #919
  • build(deps-dev): bump tslib from 2.7.0 to 2.8.0 #918
  • build(deps-dev): bump vitepress from 1.4.0 to 1.4.1 #917
  • build(deps-dev): bump typescript from 5.6.2 to 5.6.3 #916
  • build(deps): bump rollup from 2.79.1 to 2.79.2 #914
  • build(deps-dev): bump vitepress from 1.3.4 to 1.4.0 #910
  • build(deps): bump ejs from 3.1.9 to 3.1.10 #912
  • build(deps): bump vite from 5.4.1 to 5.4.8 #913
  • build(deps-dev): bump @types/node from 22.7.4 to 22.7.5 #911
  • build(deps-dev): bump @biomejs/biome from 1.9.2 to 1.9.3 #908
  • build(deps-dev): bump @types/node from 22.7.2 to 22.7.4 #907
  • docs: Fix headerInterpreter type typo #905
  • build(deps-dev): bump @types/node from 22.7.0 to 22.7.2 #904
  • build(deps-dev): bump @types/node from 22.6.1 to 22.7.0 #903
  • build(deps-dev): bump @types/node from 22.5.5 to 22.6.1 #902
  • build(deps-dev): bump jsdom from 25.0.0 to 25.0.1 #901
  • build(deps-dev): bump @biomejs/biome from 1.9.1 to 1.9.2 #900
  • build(deps-dev): bump @types/node from 22.5.4 to 22.5.5 #898
  • build(deps-dev): bump @biomejs/biome from 1.9.0 to 1.9.1 #897
  • build(deps-dev): bump @biomejs/biome from 1.5.3 to 1.9.0 #895
  • build(deps-dev): bump @types/node from 20.11.5 to 22.5.4 #892
  • build(deps-dev): bump jsdom from 24.1.1 to 25.0.0 #885

Commits

v1.6.0 - 2024-09-13

Merged

  • build(deps-dev): bump auto-changelog from 2.4.0 to 2.5.0 #894
  • build(deps-dev): bump typescript from 5.5.4 to 5.6.2 #893
  • build(deps-dev): bump @swc/helpers from 0.5.12 to 0.5.13 #890
  • build(deps-dev): bump axios from 1.7.5 to 1.7.7 #889
  • build(deps-dev): bump axios from 1.7.4 to 1.7.5 #886
  • build(deps-dev): bump vitepress from 1.3.3 to 1.3.4 #884
  • build(deps-dev): bump tslib from 2.6.3 to 2.7.0 #883
  • build(deps-dev): bump vitepress from 1.3.2 to 1.3.3 #879
  • build(deps-dev): bump axios from 1.7.3 to 1.7.4 #877
  • build(deps-dev): bump vitepress from 1.3.1 to 1.3.2 #874
  • build(deps-dev): bump c8 from 9.1.0 to 10.1.2 #855
  • feat: add stale flag in request return object #843
  • build(deps-dev): bump axios from 1.7.2 to 1.7.3 #872
  • build(deps-dev): bump typescript from 5.5.3 to 5.5.4 #868
  • build(deps-dev): bump jsdom from 24.1.0 to 24.1.1 #867
  • build(deps-dev): bump vitepress from 1.3.0 to 1.3.1 #864
  • build(deps-dev): bump @swc/helpers from 0.5.11 to 0.5.12 #865
  • build(deps-dev): bump vitepress from 1.2.3 to 1.3.0 #860
  • build(deps-dev): bump typescript from 5.5.2 to 5.5.3 #859
  • build(deps-dev): bump typescript from 5.4.5 to 5.5.2 #857
  • build(deps-dev): bump tslib from 2.6.2 to 2.6.3 #851
  • feat: clear storage method #848
  • build(deps-dev): bump vitepress from 1.2.2 to 1.2.3 #849
  • build(deps-dev): bump @types/jsdom from 21.1.6 to 21.1.7 #845
  • [ImgBot] Optimize images #844
  • docs: add an example node-cache implementation in docs #841
  • build(deps-dev): bump jsdom from 24.0.0 to 24.1.0 #842

Commits

v1.5.3 - 2024-05-22

Merged

  • #839
  • #840
  • #838
  • #837
  • chore(deps-dev): bump axios from 1.6.8 to 1.7.0 #836
  • chore(deps-dev): bump vitepress from 1.1.4 to 1.2.0 #835
  • chore(deps): bump pnpm/action-setup from 3 to 4 #831
  • chore(deps-dev): bump vitepress from 1.1.3 to 1.1.4 #828
  • chore(deps-dev): bump @swc/helpers from 0.5.10 to 0.5.11 #826

Commits

v1.5.2 - 2024-04-23

Merged

  • [must-revalidate] properly revalidate based on eTag #824
  • chore(deps-dev): bump vitepress from 1.1.0 to 1.1.3 #823
  • chore(deps-dev): bump @swc/helpers from 0.5.9 to 0.5.10 #820
  • chore(deps-dev): bump @swc/helpers from 0.5.8 to 0.5.9 #819
  • chore(deps-dev): bump vitepress from 1.0.2 to 1.1.0 #817
  • chore(deps-dev): bump typescript from 5.4.4 to 5.4.5 #818
  • chore(deps-dev): bump typescript from 5.4.3 to 5.4.4 #816
  • chore(deps-dev): bump vite from 5.2.2 to 5.2.8 #814
  • chore(deps-dev): bump vitepress from 1.0.1 to 1.0.2 #813
  • chore(deps-dev): bump @swc/helpers from 0.5.7 to 0.5.8 #812
  • chore(deps-dev): bump vitepress from 1.0.0-rc.45 to 1.0.1 #809
  • chore(deps-dev): bump typescript from 5.4.2 to 5.4.3 #808
  • chore(deps-dev): bump axios from 1.6.7 to 1.6.8 #807
  • chore(deps-dev): bump @swc/helpers from 0.5.6 to 0.5.7 #806
  • chore(deps-dev): bump follow-redirects from 1.15.4 to 1.15.6 #805
  • chore(deps-dev): bump typescript from 5.3.3 to 5.4.2 #802
  • chore(deps-dev): bump vitepress from 1.0.0-rc.44 to 1.0.0-rc.45 #801
  • chore(deps-dev): bump @swc-node/register from 1.8.0 to 1.9.0 #800
  • chore(deps-dev): bump vitepress from 1.0.0-rc.43 to 1.0.0-rc.44 #798
  • chore(deps-dev): bump vitepress from 1.0.0-rc.42 to 1.0.0-rc.43 #797
  • docs: update cache jsdocs for debugging #796
  • chore(deps-dev): bump jsdom from 23.2.0 to 24.0.0 #779
  • chore(deps): bump pnpm/action-setup from 2 to 3 #794
  • chore(deps): bump codecov/codecov-action from 3 to 4 #786
  • chore(deps): bump object-code from 1.3.2 to 1.3.3 #793
  • docs: improved clarity of code comments in invalidating-cache.md #792
  • chore(deps-dev): bump vitepress from 1.0.0-rc.41 to 1.0.0-rc.42 #791
  • chore(deps-dev): bump @swc/helpers from 0.5.3 to 0.5.6 #790
  • chore(deps-dev): bump vitepress from 1.0.0-rc.40 to 1.0.0-rc.41 #789
  • chore(deps-dev): bump @swc-node/register from 1.6.8 to 1.8.0 #788
  • chore(deps-dev): bump axios from 1.6.5 to 1.6.7 #785
  • chore(deps-dev): bump vitepress from 1.0.0-rc.39 to 1.0.0-rc.40 #782
  • chore(deps-dev): bump @biomejs/biome from 1.5.2 to 1.5.3 #781
  • chore(deps-dev): bump vite from 5.0.11 to 5.0.12 #777

Commits

v1.5.1 - 2024-01-19

Commits

v1.5.0 - 2024-01-19

Merged

  • fix: transformResponse running twice on cached requests #775
  • feat: correct ESM and CJS support, move to microbundle. #764
  • chore(deps-dev): bump vitepress from 1.0.0-rc.37 to 1.0.0-rc.39 #776
  • chore(deps-dev): bump @biomejs/biome from 1.5.1 to 1.5.2 #774
  • chore(deps-dev): bump vitepress from 1.0.0-rc.36 to 1.0.0-rc.37 #773
  • chore(deps-dev): bump c8 from 9.0.0 to 9.1.0 #772
  • chore(deps-dev): bump @biomejs/biome from 1.4.1 to 1.5.1 #770
  • chore(deps-dev): bump vitepress from 1.0.0-rc.35 to 1.0.0-rc.36 #769
  • chore(deps-dev): bump axios from 1.6.4 to 1.6.5 #766
  • chore(deps-dev): bump jsdom from 23.0.1 to 23.2.0 #765
  • chore(deps-dev): bump c8 from 8.0.1 to 9.0.0 #762
  • chore(deps-dev): bump axios from 1.6.3 to 1.6.4 #763
  • chore(deps-dev): bump vitepress from 1.0.0-rc.34 to 1.0.0-rc.35 #761
  • chore(deps-dev): bump vitepress from 1.0.0-rc.33 to 1.0.0-rc.34 #758
  • chore(deps-dev): bump axios from 1.6.2 to 1.6.3 #756
  • chore(deps-dev): bump vitepress from 1.0.0-rc.32 to 1.0.0-rc.33 #755

Commits

v1.4.1 - 2023-12-26

Commits

v1.4.0 - 2023-12-23

Merged

  • Ådd feature to blacklist some paths #754
  • chore(deps): bump github/codeql-action from 2 to 3 #749
  • chore(deps-dev): bump vitepress from 1.0.0-rc.31 to 1.0.0-rc.32 #751

Commits

v1.3.3 - 2023-12-13

Merged

  • chore(deps-dev): bump @biomejs/biome from 1.3.3 to 1.4.1 #740
  • chore(deps-dev): bump jsdom from 22.1.0 to 23.0.1 #739
  • Update documentation to clarify side effects of setupCache #732
  • docs: wording and fixing a broken local link #745
  • docs: rewording the invalidating cache page #744
  • chore(deps-dev): bump typescript from 5.3.2 to 5.3.3 #743
  • chore(deps-dev): bump vite from 5.0.2 to 5.0.5 #741
  • chore(deps-dev): bump vitepress from 1.0.0-rc.30 to 1.0.0-rc.31 #735
  • chore(deps-dev): bump vitepress from 1.0.0-rc.29 to 1.0.0-rc.30 #733
  • chore(deps-dev): bump typescript from 5.2.2 to 5.3.2 #728
  • chore(deps-dev): bump @types/jsdom from 21.1.5 to 21.1.6 #727
  • chore(deps-dev): bump vitepress from 1.0.0-rc.26 to 1.0.0-rc.29 #726
  • chore(deps): bump fast-defer from 1.1.7 to 1.1.8 #725
  • chore(deps-dev): bump vitepress from 1.0.0-rc.25 to 1.0.0-rc.26 #724
  • chore(deps-dev): bump tsx from 3.14.0 to 4.1.2 #721
  • chore(deps-dev): bump axios from 1.6.1 to 1.6.2 #723
  • chore(deps-dev): bump ts-loader from 9.5.0 to 9.5.1 #722
  • chore(deps-dev): bump prettier-plugin-organize-imports #717
  • chore(deps-dev): bump axios from 1.6.0 to 1.6.1 #715
  • chore(deps-dev): bump @types/webpack from 5.28.4 to 5.28.5 #714
  • chore(deps-dev): bump @types/jsdom from 21.1.4 to 21.1.5 #713
  • chore(deps-dev): bump eslint from 8.52.0 to 8.53.0 #712
  • chore(deps-dev): bump vitepress from 1.0.0-rc.24 to 1.0.0-rc.25 #711
  • docs: fix typos #707
  • chore(deps-dev): bump axios from 1.5.1 to 1.6.0 #706
  • chore(deps): bump actions/setup-node from 3 to 4 #703
  • chore(deps-dev): bump vitepress from 1.0.0-rc.23 to 1.0.0-rc.24 #704

Commits

v1.3.2 - 2023-10-23

Merged

  • chore(deps-dev): bump eslint from 8.51.0 to 8.52.0 #702
  • chore(deps-dev): bump vitepress from 1.0.0-rc.22 to 1.0.0-rc.23 #701
  • chore(deps-dev): bump @types/webpack from 5.28.3 to 5.28.4 #699
  • chore(deps-dev): bump tsx from 3.13.0 to 3.14.0 #697
  • chore(deps-dev): bump @types/jsdom from 21.1.3 to 21.1.4 #696
  • chore(deps-dev): bump vitepress from 1.0.0-rc.21 to 1.0.0-rc.22 #693
  • chore(deps-dev): bump webpack from 5.88.2 to 5.89.0 #692
  • chore(deps-dev): bump vitepress from 1.0.0-rc.20 to 1.0.0-rc.21 #691
  • chore(deps-dev): bump eslint from 8.50.0 to 8.51.0 #690
  • chore(deps-dev): bump ts-loader from 9.4.4 to 9.5.0 #689
  • chore(deps-dev): bump postcss from 8.4.27 to 8.4.31 #687
  • chore(deps-dev): bump @arthurfiorette/prettier-config #686

Commits

v1.3.1 - 2023-09-30

Merged

  • docs: expression error #684
  • chore(deps-dev): bump axios from 1.5.0 to 1.5.1 #683
  • chore(deps-dev): bump @types/webpack from 5.28.2 to 5.28.3 #682
  • chore(deps-dev): bump vitepress from 1.0.0-rc.15 to 1.0.0-rc.20 #681
  • chore(deps-dev): bump eslint from 8.49.0 to 8.50.0 #680
  • chore(deps-dev): bump vitepress from 1.0.0-rc.14 to 1.0.0-rc.15 #679
  • chore(deps-dev): bump @types/jsdom from 21.1.2 to 21.1.3 #678
  • chore(deps-dev): bump vitepress from 1.0.0-rc.13 to 1.0.0-rc.14 #677
  • chore(deps-dev): bump vitepress from 1.0.0-rc.12 to 1.0.0-rc.13 #673
  • chore(deps-dev): bump vitepress from 1.0.0-rc.10 to 1.0.0-rc.12 #672
  • chore(deps-dev): bump eslint from 8.48.0 to 8.49.0 #671
  • chore(deps): bump actions/checkout from 3 to 4 #666

Commits

  • chore: fixed bundle license 5adc229
  • ci: fixed ci tests 060e67d
  • docs: installing e6b6441
  • feat: prefer noop over undefined when debugging 16e51e7
  • feat: testing with tsx and c8 dd8f634
  • fix: handle axios errors without config (#674) 309bfe1
  • fix: rejected response deadlocks (#685) 286b2c0
  • style: formatted code fe83070
  • tag: v1.3.1 953d992

v1.3.0 - 2023-09-05

Merged

  • chore(deps-dev): bump vitepress from 1.0.0-rc.9 to 1.0.0-rc.10 #661
  • chore(deps-dev): bump axios from 1.4.0 to 1.5.0 #659
  • chore(deps-dev): bump @types/node from 18.17.11 to 18.17.12 #660
  • chore(deps-dev): bump vitepress from 1.0.0-rc.4 to 1.0.0-rc.9 #658
  • chore(deps-dev): bump eslint from 8.47.0 to 8.48.0 #657
  • chore(deps-dev): bump @types/node from 18.17.9 to 18.17.11 #654
  • chore(deps-dev): bump typescript from 5.1.6 to 5.2.2 #653
  • chore(deps-dev): bump jest-environment-jsdom from 29.6.3 to 29.6.4 #652
  • chore(deps-dev): bump jest from 29.6.3 to 29.6.4 #651
  • chore(deps-dev): bump @types/node from 18.17.8 to 18.17.9 #650
  • chore(deps-dev): bump @types/webpack from 5.28.1 to 5.28.2 #649
  • chore(deps-dev): bump @types/node from 18.17.6 to 18.17.8 #648
  • chore(deps-dev): bump @types/jest from 29.5.3 to 29.5.4 #647
  • chore(deps-dev): bump jest from 29.6.2 to 29.6.3 #645
  • chore(deps-dev): bump jest-environment-jsdom from 29.6.2 to 29.6.3 #646
  • chore(deps-dev): bump tslib from 2.6.1 to 2.6.2 #644
  • chore(deps-dev): bump @types/node from 18.17.5 to 18.17.6 #643
  • chore(deps-dev): bump eslint from 8.46.0 to 8.47.0 #638
  • chore(deps-dev): bump @types/node from 18.17.4 to 18.17.5 #637
  • chore(deps-dev): bump vitepress from 1.0.0-beta.7 to 1.0.0-rc.4 #636
  • chore(deps-dev): bump @types/node from 18.17.3 to 18.17.4 #635
  • chore(deps-dev): bump eslint-config-prettier from 8.10.0 to 9.0.0 #634
  • chore(deps-dev): bump @types/node from 18.17.2 to 18.17.3 #633
  • chore(deps-dev): bump @types/node from 18.17.1 to 18.17.2 #632
  • chore(deps-dev): bump eslint-config-prettier from 8.9.0 to 8.10.0 #630
  • chore(deps-dev): bump vitepress from 1.0.0-beta.6 to 1.0.0-beta.7 #627
  • chore(deps-dev): bump eslint from 8.45.0 to 8.46.0 #626
  • fix: avoid RangeError: Maximum call stack size exceeded on streams and other objects #616
  • chore(deps-dev): bump jest-environment-jsdom from 29.6.1 to 29.6.2 #623
  • feat: turn most types into interfaces #615
  • chore(deps-dev): bump jest from 29.6.1 to 29.6.2 #622
  • chore(deps-dev): bump eslint-config-prettier from 8.8.0 to 8.9.0 #624
  • chore(deps-dev): bump @types/node from 18.17.0 to 18.17.1 #620
  • chore(deps-dev): bump tslib from 2.6.0 to 2.6.1 #619
  • chore(deps-dev): bump @types/node from 18.16.19 to 18.17.0 #617
  • chore(deps-dev): bump vitepress from 1.0.0-beta.5 to 1.0.0-beta.6 #618
  • chore(deps-dev): bump word-wrap from 1.2.3 to 1.2.4 #614
  • chore(deps-dev): bump @typescript-eslint/parser from 5.61.0 to 5.62.0 #602
  • chore(deps-dev): bump @types/jest from 29.5.2 to 29.5.3 #600
  • chore(deps-dev): bump webpack from 5.88.1 to 5.88.2 #605
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #601
  • chore(deps-dev): bump eslint from 8.44.0 to 8.45.0 #604
  • chore(deps-dev): bump prettier-plugin-organize-imports #603
  • chore(deps-dev): bump jest-environment-jsdom from 29.6.0 to 29.6.1 #599
  • chore(deps-dev): bump jest from 29.6.0 to 29.6.1 #598
  • chore(deps-dev): bump jest from 29.5.0 to 29.6.0 #595
  • chore(deps-dev): bump jest-environment-jsdom from 29.5.0 to 29.6.0 #596
  • chore(deps-dev): bump @typescript-eslint/parser from 5.60.1 to 5.61.0 #593
  • chore: new bug template #591
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #592
  • chore(deps-dev): bump vitepress from 1.0.0-beta.3 to 1.0.0-beta.5 #589
  • chore(deps-dev): bump @types/node from 18.16.18 to 18.16.19 #590
  • chore(deps-dev): bump eslint from 8.43.0 to 8.44.0 #588
  • feat: ‘cloneData’ option to buildMemoryStorage #581
  • chore(deps-dev): bump ts-loader from 9.4.3 to 9.4.4 #584
  • chore(deps-dev): bump typescript from 5.1.5 to 5.1.6 #582
  • chore(deps-dev): bump webpack from 5.88.0 to 5.88.1 #583
  • chore(deps-dev): bump eslint from 8.42.0 to 8.43.0 #567
  • chore(deps-dev): bump ts-jest from 29.1.0 to 29.1.1 #585
  • chore(deps-dev): bump typescript from 5.1.3 to 5.1.5 #577
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #576
  • chore(deps-dev): bump tslib from 2.5.3 to 2.6.0 #575
  • chore(deps-dev): bump @typescript-eslint/parser from 5.60.0 to 5.60.1 #574
  • fix(docs): redis link to docs #571
  • chore(deps-dev): bump @types/node from 18.16.16 to 18.16.18 #559
  • chore(deps-dev): bump webpack from 5.86.0 to 5.88.0 #569
  • chore(deps-dev): bump vitepress from 1.0.0-beta.1 to 1.0.0-beta.3 #566
  • chore(deps-dev): bump @typescript-eslint/parser from 5.59.9 to 5.60.0 #564
  • Fix typo in Request ID docs #561

Commits

  • chore: dependabot f571ad3
  • chore: removed unused eslint comment cb3114f
  • chore: updated pnpm 4ab04a7
  • ci: dependabot c7e3af0
  • ci: fixed escheck 60f161a
  • ci: ignore if codecov action breaks 605d39b
  • docs: added more keywords to help with searching b352f12
  • docs: filesizes ee10f76
  • docs: fix issue template 281848a
  • docs: fix issue template v2 d672a08
  • docs: update bug again 😃 ce82bb5
  • docs: update bug report 522179b
  • docs: update bug report c91e6a0
  • docs: updated download url 8fa904c
  • feat: added CORS info on cacheTakeover ddacace
  • feat: handle non axios errors rejections (#609) 929054e
  • feat: moved tests to node:test (#628) 2cc948d
  • fix: correct config re throw ddcac5f
  • fix: infinite loading states when a restart occurs in the middle of a request. (#612) 130ef0d
  • fix: moved to native source map support 4dbfea2
  • fix: updated vitepress 3be8029
  • tag: v1.3.0 96f03c4

v1.2.0 - 2023-06-09

Merged

  • chore(deps-dev): bump eslint from 8.34.0 to 8.42.0 #551
  • chore(deps-dev): bump jest-environment-jsdom from 29.4.3 to 29.5.0 #553
  • chore(deps-dev): bump @types/node from 18.13.0 to 18.16.16 #552
  • chore(deps-dev): bump tslib from 2.5.0 to 2.5.3 #550
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #549
  • docs: cachePredicate status codes follows RFC 7231 #547

Commits

  • chore: updated dependencies c7dab4f
  • feat: v1.2.0 066cc4f
  • fix: avoid git checks while publishing 2d2696d
  • fix: correct canStale checks (#543) 82182bf
  • fix: correct lowercase test 7e5ca7e
  • fix: support max-stale on header interpreter (#543) 683dbe0
  • style: formatted code 0cca290
  • style: formatted code a5f071d
  • style: formatted code a7405e1

v1.1.1 - 2023-05-25

Merged

  • docs: fixed headerInterpreter return type #542

Commits

  • docs: cdnjs links 9e3800c
  • feat: better storage docs 5f2ed82
  • feat: max entries on memory storage #539 ebd400b
  • feat: v1.1.1 143d409
  • fix: flaky network test and improved redis documentation ee9a7de
  • fix: removed only allow pnpm aa69799
  • style: formatted code 7b0fb85

v1.1.0 - 2023-05-17

Merged

  • fix: Support stale-while-revalidate #514
  • docs: added docs for #506 #509
  • feat: staleIfError using stale-if-error directive #506
  • chore(deps-dev): bump jest-environment-jsdom from 29.4.2 to 29.4.3 #505
  • chore(deps-dev): bump jest from 29.4.2 to 29.4.3 #504
  • chore(deps-dev): bump @typescript-eslint/parser from 5.51.0 to 5.52.0 #503
  • chore(deps-dev): bump axios from 1.3.2 to 1.3.3 #502
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #501
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.45 to 1.0.0-alpha.46 #500
  • chore(deps-dev): bump eslint from 8.33.0 to 8.34.0 #499
  • chore(deps-dev): bump jest-environment-jsdom from 29.4.1 to 29.4.2 #498
  • chore(deps-dev): bump prettier from 2.8.3 to 2.8.4 #497
  • chore(deps-dev): bump jest from 29.4.1 to 29.4.2 #496
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #495
  • chore(deps-dev): bump @typescript-eslint/parser from 5.50.0 to 5.51.0 #494
  • chore(deps-dev): bump axios from 1.3.1 to 1.3.2 #492
  • chore(deps-dev): bump @arthurfiorette/prettier-config #491

Fixed

  • docs: added docs for #506 (#509) #506
  • feat: staleIfError using stale-if-error directive (#506) #506

Commits

v1.0.1 - 2023-02-02

Merged

  • chore(deps-dev): bump @typescript-eslint/parser from 5.49.0 to 5.50.0 #488
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #486
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.44 to 1.0.0-alpha.45 #489
  • chore(deps-dev): bump typescript from 4.9.4 to 4.9.5 #485
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.43 to 1.0.0-alpha.44 #484
  • docs: typo at update getting-started.md #483
  • chore(deps-dev): bump eslint from 8.32.0 to 8.33.0 #482
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.40 to 1.0.0-alpha.43 #481
  • chore(deps-dev): bump tslib from 2.4.1 to 2.5.0 #477
  • chore(deps-dev): bump jest from 29.4.0 to 29.4.1 #479
  • chore(deps-dev): bump jest-environment-jsdom from 29.4.0 to 29.4.1 #478
  • chore(deps-dev): bump es-check from 7.0.1 to 7.1.0 #476
  • chore(deps-dev): bump jest from 29.3.1 to 29.4.0 #475
  • chore(deps-dev): bump jest-environment-jsdom from 29.3.1 to 29.4.0 #474
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #473
  • chore(deps-dev): bump @typescript-eslint/parser from 5.48.2 to 5.49.0 #472
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.38 to 1.0.0-alpha.40 #470
  • chore(deps-dev): bump @types/jest from 29.2.5 to 29.2.6 #468
  • fix: prevent response storage calls if method is not supported #464
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.36 to 1.0.0-alpha.38 #467
  • chore(deps-dev): bump prettier from 2.8.1 to 2.8.3 #460
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #466
  • chore(deps-dev): bump eslint from 8.31.0 to 8.32.0 #463
  • chore(deps-dev): bump @typescript-eslint/parser from 5.48.1 to 5.48.2 #465
  • chore(deps-dev): bump prettier-plugin-organize-imports #462
  • chore(deps-dev): bump ts-jest from 29.0.4 to 29.0.5 #461
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.35 to 1.0.0-alpha.36 #457
  • chore(deps-dev): bump ts-jest from 29.0.3 to 29.0.4 #458
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #454
  • chore(deps-dev): bump @typescript-eslint/parser from 5.48.0 to 5.48.1 #455
  • chore(deps-dev): bump eslint-config-prettier from 8.5.0 to 8.6.0 #451
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.34 to 1.0.0-alpha.35 #450
  • chore(deps): bump json5 from 2.2.1 to 2.2.3 #445
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.33 to 1.0.0-alpha.34 #443
  • chore: typos #446
  • chore(deps-dev): bump @typescript-eslint/parser from 5.47.1 to 5.48.0 #448
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #447
  • chore(deps-dev): bump eslint from 8.30.0 to 8.31.0 #444
  • chore(deps-dev): bump @types/jest from 29.2.4 to 29.2.5 #442
  • chore(deps-dev): bump @typescript-eslint/parser from 5.47.0 to 5.47.1 #438
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #439

Commits

v1.0.0 - 2022-12-26

Merged

  • chore(deps-dev): bump vitepress from 1.0.0-alpha.32 to 1.0.0-alpha.33 #436
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #434
  • chore(deps-dev): bump @typescript-eslint/parser from 5.46.1 to 5.47.0 #435
  • chore(deps-dev): bump eslint from 8.29.0 to 8.30.0 #432
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.31 to 1.0.0-alpha.32 #431
  • docs: Fix request-id.md docs #429
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #428
  • chore(deps-dev): bump @typescript-eslint/parser from 5.46.0 to 5.46.1 #427
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.30 to 1.0.0-alpha.31 #426
  • chore(deps-dev): bump prettier from 2.8.0 to 2.8.1 #421
  • chore: default prefix parameter for web storage #425
  • chore(deps-dev): bump typescript from 4.9.3 to 4.9.4 #420
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #423
  • chore(deps-dev): bump @typescript-eslint/parser from 5.45.1 to 5.46.0 #422
  • chore(deps-dev): bump @typescript-eslint/parser from 5.45.0 to 5.45.1 #419
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #418
  • Axios cache interceptor v1 roadmap #368
  • chore(deps-dev): bump eslint from 8.28.0 to 8.29.0 #417
  • chore(deps-dev): bump ts-loader from 9.4.1 to 9.4.2 #416
  • chore(deps-dev): bump @typescript-eslint/parser from 5.44.0 to 5.45.0 #414
  • chore(deps-dev): bump prettier from 2.7.1 to 2.8.0 #411
  • chore(deps-dev): bump prettier-plugin-organize-imports #413
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #408
  • chore(deps-dev): bump @typescript-eslint/parser from 5.42.1 to 5.44.0 #409
  • chore(deps-dev): bump eslint from 8.27.0 to 8.28.0 #407
  • chore(deps-dev): bump webpack-cli from 4.10.0 to 5.0.0 #406
  • chore(deps-dev): bump typescript from 4.8.4 to 4.9.3 #404
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #400
  • chore(deps-dev): bump prettier-plugin-organize-imports #399
  • chore(deps-dev): bump webpack from 5.74.0 to 5.75.0 #398
  • chore(deps-dev): bump jest-environment-jsdom from 29.3.0 to 29.3.1 #396
  • chore(deps-dev): bump eslint from 8.26.0 to 8.27.0 #395
  • chore(deps-dev): bump @typescript-eslint/parser from 5.42.0 to 5.42.1 #393
  • chore(deps-dev): bump jest-environment-jsdom from 29.2.2 to 29.3.0 #394
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #392
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #391
  • chore(deps-dev): bump tslib from 2.4.0 to 2.4.1 #390
  • chore(deps-dev): bump @typescript-eslint/parser from 5.41.0 to 5.42.0 #389
  • chore(deps-dev): bump @typescript-eslint/parser from 5.40.1 to 5.41.0 #387
  • chore(deps-dev): bump jest-environment-jsdom from 29.2.1 to 29.2.2 #388
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #386
  • chore(deps-dev): bump eslint from 8.25.0 to 8.26.0 #385
  • chore(deps-dev): bump jest-environment-jsdom from 29.2.0 to 29.2.1 #384
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #381
  • chore(deps-dev): bump @typescript-eslint/parser from 5.40.0 to 5.40.1 #382
  • chore(deps-dev): bump jest-environment-jsdom from 29.1.2 to 29.2.0 #379
  • chore(deps-dev): bump @typescript-eslint/parser from 5.39.0 to 5.40.0 #375
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #376
  • chore(deps-dev): bump express from 4.18.1 to 4.18.2 in /docs #373
  • chore(deps-dev): bump eslint from 8.24.0 to 8.25.0 #372
  • chore(deps-dev): bump @typescript-eslint/parser from 5.38.1 to 5.39.0 #364
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #363
  • chore(deps-dev): bump jest-environment-jsdom from 29.1.1 to 29.1.2 #362
  • chore(deps-dev): bump jest-environment-jsdom from 29.0.3 to 29.1.1 #360
  • chore(deps-dev): bump typescript from 4.8.3 to 4.8.4 #361
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #359
  • chore(deps-dev): bump @typescript-eslint/parser from 5.38.0 to 5.38.1 #358
  • chore(deps): bump ahmadnassri/action-dependabot-auto-merge #356
  • chore(deps-dev): bump eslint from 8.23.1 to 8.24.0 #357
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #351
  • chore(deps-dev): bump @typescript-eslint/parser from 5.37.0 to 5.38.0 #352
  • chore(deps-dev): bump ts-loader from 9.3.1 to 9.4.1 #355
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #350
  • chore(deps-dev): bump @typescript-eslint/parser from 5.36.2 to 5.37.0 #349
  • chore(deps-dev): bump jest-environment-jsdom from 29.0.2 to 29.0.3 #348
  • chore(deps-dev): bump eslint from 8.23.0 to 8.23.1 #347
  • chore(deps-dev): bump es-check from 7.0.0 to 7.0.1 #346
  • chore(deps-dev): bump typescript from 4.8.2 to 4.8.3 #345
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #343
  • chore(deps-dev): bump @typescript-eslint/parser from 5.36.1 to 5.36.2 #342
  • chore(deps-dev): bump jest-environment-jsdom from 29.0.1 to 29.0.2 #340
  • chore(deps-dev): bump prettier-plugin-organize-imports #341
  • chore(deps-dev): bump @typescript-eslint/parser from 5.36.0 to 5.36.1 #338
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #339
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #336
  • chore(deps-dev): bump @typescript-eslint/parser from 5.35.1 to 5.36.0 #337
  • chore(deps-dev): bump eslint from 8.22.0 to 8.23.0 #334
  • chore(deps-dev): bump jest-environment-jsdom from 29.0.0 to 29.0.1 #335
  • chore(deps-dev): bump jest-environment-jsdom from 28.1.3 to 29.0.0 #332
  • chore(deps-dev): bump typescript from 4.7.4 to 4.8.2 #333
  • chore(deps-dev): bump @typescript-eslint/parser from 5.34.0 to 5.35.1 #331
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #330
  • chore(deps-dev): bump @typescript-eslint/parser from 5.33.1 to 5.34.0 #328
  • chore(deps-dev): bump prettier-plugin-organize-imports #324
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #320
  • chore(deps-dev): bump @typescript-eslint/parser from 5.33.0 to 5.33.1 #322
  • chore(deps-dev): bump @types/jest from 28.1.6 to 28.1.7 #321
  • chore(deps-dev): bump eslint from 8.21.0 to 8.22.0 #319
  • chore(deps-dev): bump ts-jest from 28.0.7 to 28.0.8 #318
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #315
  • chore(deps-dev): bump @typescript-eslint/parser from 5.32.0 to 5.33.0 #316
  • chore(deps-dev): bump prettier-plugin-organize-imports #313
  • chore(deps-dev): bump prettier-plugin-organize-imports from 3.0.0 to 3.0.1 #310
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #312
  • chore(deps-dev): bump @typescript-eslint/parser from 5.31.0 to 5.32.0 #311
  • chore(deps-dev): bump eslint from 8.20.0 to 8.21.0 #309

Commits

  • chore: automerge dependabot prs 9c90644
  • chore: avoid github activity 0e97446
  • chore: axios as a peer dependency 9683de5
  • chore: docs versioning nav 13529b9
  • chore: fixed dependabot automerge 1c024f4
  • chore: re-added dev web bundle 9780d13
  • docs: improved features 79ac027
  • docs: spelling db41b7c
  • docs: update navbar again b6b9fc9
  • docs: updated version 232bb7d
  • docs: version selector b4ab156
  • feat: add ecompatible node version to engines 5562819
  • feat: cache takeover #437 7d82c5a
  • feat: MIT copyright notice on bundle f842c36
  • fix: action to deploy docs 64222ec
  • fix: correct skypack download url c7b6604
  • fix: docs versioning 09a0082
  • fix: removed check for non existent file 04d95f4
  • fix: types not available on esm packaging #430 00fdff0
  • refactor: dependencies, lint and null assertions 67819a3
  • tag: v1.0.0 d39cb29
  • test: added #317 test 491fb01

v0.10.7 - 2022-07-29

Merged

  • feat: cache updater function for multiple keys. #304
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #307
  • chore(deps-dev): bump @typescript-eslint/parser from 5.30.7 to 5.31.0 #306
  • chore(deps-dev): bump webpack from 5.73.0 to 5.74.0 #305
  • chore(deps): bump terser from 5.12.1 to 5.14.2 #302
  • chore(deps-dev): bump es-check from 6.2.1 to 7.0.0 #303
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #300
  • chore(deps-dev): bump @typescript-eslint/parser from 5.30.6 to 5.30.7 #301
  • chore(deps-dev): bump @types/jest from 28.1.5 to 28.1.6 #298
  • chore(deps-dev): bump eslint from 8.19.0 to 8.20.0 #297
  • chore(deps-dev): bump ts-jest from 28.0.5 to 28.0.7 #299
  • chore(deps-dev): bump jest-environment-jsdom from 28.1.2 to 28.1.3 #295
  • chore(deps-dev): bump jest from 28.1.2 to 28.1.3 #294
  • chore(deps-dev): bump @types/jest from 28.1.4 to 28.1.5 #293
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #292
  • chore(deps-dev): bump @typescript-eslint/parser from 5.30.5 to 5.30.6 #291
  • chore(deps-dev): bump @typescript-eslint/parser from 5.30.4 to 5.30.5 #289
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #290
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #288
  • chore(deps-dev): bump eslint from 8.18.0 to 8.19.0 #287
  • chore(deps-dev): bump @typescript-eslint/parser from 5.30.0 to 5.30.4 #286
  • chore(deps-dev): bump @types/jest from 28.1.3 to 28.1.4 #285
  • chore(deps-dev): bump eslint-plugin-prettier from 4.1.0 to 4.2.1 #284

Commits

v0.10.6 - 2022-06-29

Merged

  • fix: cache update not being executed correctly #283
  • chore(deps-dev): bump @typescript-eslint/parser from 5.29.0 to 5.30.0 #282
  • chore(deps-dev): bump eslint-plugin-prettier from 4.0.0 to 4.1.0 #280
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #281
  • chore(deps-dev): bump ts-loader from 9.3.0 to 9.3.1 #278
  • chore(deps-dev): bump @types/jest from 28.1.2 to 28.1.3 #276
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #275
  • chore(deps-dev): bump @typescript-eslint/parser from 5.28.0 to 5.29.0 #274
  • chore(deps-dev): bump eslint from 8.17.0 to 8.18.0 #271
  • chore(deps-dev): bump typescript from 4.7.3 to 4.7.4 #272
  • chore(deps-dev): bump @types/jest from 28.1.1 to 28.1.2 #273
  • chore(deps-dev): bump prettier-plugin-organize-imports #270
  • chore(deps-dev): bump prettier from 2.7.0 to 2.7.1 #269
  • chore(deps-dev): bump @typescript-eslint/parser from 5.27.1 to 5.28.0 #266
  • chore(deps-dev): bump ts-jest from 28.0.4 to 28.0.5 #265
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #268
  • chore(deps-dev): bump prettier from 2.6.2 to 2.7.0 #267
  • chore(deps-dev): bump webpack-cli from 4.9.2 to 4.10.0 #264

Commits

v0.10.5 - 2022-06-11

Merged

  • chore(deps-dev): bump jest-environment-jsdom from 28.1.0 to 28.1.1 #261
  • chore(deps-dev): bump @typescript-eslint/parser from 5.27.0 to 5.27.1 #263
  • chore(deps-dev): bump jest from 28.1.0 to 28.1.1 #260
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #262
  • chore(deps-dev): bump @types/jest from 28.1.0 to 28.1.1 #257
  • chore(deps-dev): bump typescript from 4.7.2 to 4.7.3 #258
  • chore(deps-dev): bump eslint from 8.16.0 to 8.17.0 #259

Commits

  • chore: fixed debug configuration 33398ce
  • chore: updated sponsors e8cb692
  • docs: improved override docs dfe1595
  • docs: typos 67bad37
  • docs: updated version 8c94ef9
  • feat: better override documentation 338c9a6
  • feat: override cache option 268fccb
  • feat: remove remnant x-axios-headers from server response d87307a
  • tag: v0.10.5 30617dd

v0.10.4 - 2022-06-03

Merged

  • chore(deps-dev): bump webpack from 5.72.1 to 5.73.0 #255
  • chore(deps-dev): bump ts-jest from 28.0.3 to 28.0.4 #254
  • chore(deps-dev): bump @types/jest from 27.5.1 to 28.1.0 #252
  • fix: Interpret max-age=0 as a valid cache-control header #253
  • chore(deps-dev): bump @typescript-eslint/parser from 5.26.0 to 5.27.0 #250
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #251
  • chore(deps-dev): bump typescript from 4.6.4 to 4.7.2 #249
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #246
  • chore(deps-dev): bump ts-jest from 28.0.2 to 28.0.3 #247
  • chore(deps-dev): bump @typescript-eslint/parser from 5.25.0 to 5.26.0 #248
  • chore(deps-dev): bump eslint from 8.15.0 to 8.16.0 #245
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #243
  • chore(deps-dev): bump @typescript-eslint/parser from 5.23.0 to 5.25.0 #242
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #241
  • chore(deps-dev): bump @types/jest from 27.5.0 to 27.5.1 #238
  • chore(deps-dev): bump ts-jest from 28.0.1 to 28.0.2 #234
  • chore(deps-dev): bump webpack from 5.72.0 to 5.72.1 #237
  • chore(deps-dev): bump @typescript-eslint/parser from 5.22.0 to 5.23.0 #235
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #236
  • chore(deps-dev): bump @typescript-eslint/parser from 5.21.0 to 5.22.0 #231
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #230
  • chore(deps-dev): bump @types/jest from 27.4.1 to 27.5.0 #232

Commits

  • chore(deps): update jest to 28 f4f4be1
  • deps: updated object-code 6b1a1c5
  • deps: updated object-code 77adcaf
  • docs: fixed variable name (#239) e97a515
  • docs: help this repo grow 2fc2c17
  • docs: improved documentation 6bcd7dc
  • docs: updated version 5cb76aa
  • fix: removed symbol to preserve sideEffect free status (#233) b6302ef
  • refactor: updated some minor things 623ae22
  • tag: v0.10.4 d00bdc8

v0.10.3 - 2022-05-02

Merged

  • chore(deps-dev): bump ts-loader from 9.2.9 to 9.3.0 #228
  • chore(deps-dev): bump express from 4.18.0 to 4.18.1 in /docs #229
  • feat: updated axios to 0.27 #227
  • Pass currentRequest on each access to storages (#220) #226
  • chore(deps-dev): bump typescript from 4.6.3 to 4.6.4 #225
  • chore(deps-dev): bump ts-loader from 9.2.8 to 9.2.9 #222
  • chore(deps-dev): bump @typescript-eslint/parser from 5.20.0 to 5.21.0 #215
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #217
  • chore(deps-dev): bump express from 4.17.3 to 4.18.0 in /docs #218
  • chore(deps): bump github/codeql-action from 1 to 2 #214
  • chore(deps-dev): bump eslint from 8.13.0 to 8.14.0 #213
  • chore(deps-dev): bump tslib from 2.3.1 to 2.4.0 #212
  • chore(deps): bump async from 2.6.3 to 2.6.4 #211
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #209
  • chore(deps-dev): bump @typescript-eslint/parser from 5.19.0 to 5.20.0 #210
  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.36 to 0.3.38 #208
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #207
  • chore(deps-dev): bump @typescript-eslint/parser from 5.18.0 to 5.19.0 #206
  • chore(deps-dev): bump eslint from 8.12.0 to 8.13.0 #205
  • chore(deps-dev): bump webpack from 5.71.0 to 5.72.0 #204
  • chore(deps): bump codecov/codecov-action from 2.1.0 to 3 #203
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #202
  • chore(deps-dev): bump @typescript-eslint/parser from 5.17.0 to 5.18.0 #201
  • chore(deps-dev): bump prettier from 2.6.1 to 2.6.2 #197
  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.35 to 0.3.36 #199
  • chore(deps-dev): bump webpack from 5.70.0 to 5.71.0 #198
  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.34 to 0.3.35 #196
  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.33 to 0.3.34 #195
  • chore(deps): bump ansi-regex from 3.0.0 to 3.0.1 #194
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #192
  • chore(deps-dev): bump @typescript-eslint/parser from 5.16.0 to 5.17.0 #193
  • chore(deps-dev): bump eslint from 8.11.0 to 8.12.0 #191

Commits

v0.10.2 - 2022-03-25

Merged

  • chore(deps): bump minimist from 1.2.5 to 1.2.6 in /docs #190
  • chore(deps): bump minimist from 1.2.5 to 1.2.6 #189
  • chore(deps-dev): bump prettier from 2.6.0 to 2.6.1 #187
  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.31 to 0.3.33 #185
  • chore(deps-dev): bump ts-jest from 27.1.3 to 27.1.4 #186
  • chore(deps-dev): bump typescript from 4.6.2 to 4.6.3 #188
  • chore(deps-dev): bump @typescript-eslint/parser from 5.15.0 to 5.16.0 #183
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #184
  • chore(deps): bump object-code from 1.2.0 to 1.2.2 #182
  • chore(deps): bump fast-defer from 1.1.5 to 1.1.7 #181
  • chore(deps): bump cache-parser from 1.2.2 to 1.2.4 #180
  • chore(deps-dev): bump prettier from 2.5.1 to 2.6.0 #178
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #175
  • chore(deps-dev): bump @typescript-eslint/parser from 5.14.0 to 5.15.0 #176

Commits

  • chore: fixed escheck script 4e93728
  • deps: updated all deps 1b50018
  • docs: added runkit comment f25bff6
  • docs: updated download urls b98f4b0
  • fix: fixed bug when a pending request had it cached empty (#165) 0a00778
  • style: formatted code b44c6b3
  • tag: v0.10.2 2fe8129

v0.10.1 - 2022-03-14

Commits

v0.10.0 - 2022-03-14

Merged

  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.30 to 0.3.31 #171
  • chore(deps-dev): bump eslint from 8.10.0 to 8.11.0 #170
  • chore(deps-dev): bump docsify-cli from 4.4.3 to 4.4.4 in /docs #172
  • feat!: new bundle setup & fixed development bundles #167
  • fix: memory storage copy data to avoid reference changes #164
  • chore(deps-dev): bump ts-loader from 9.2.7 to 9.2.8 #168
  • chore(deps-dev): bump axios from 0.26.0 to 0.26.1 #166

Commits

  • chore: brave rewards f140b02
  • chore: fixed unknown build bug 😃 cb8eb37
  • chore: updated yarn.lock bb88a8b
  • ci: dependabot for docs folder e7922bd
  • deps: updated typescript eslint ae58690
  • docs: updated benchmark and fixed some typos 08d7ab4
  • docs: updated download urls e2f2428
  • docs: updated many things in the documentation 766c6de
  • feat!: updated default caching options 119fa32
  • perf: optimized build config 3a800d7
  • refactor: clone data only when needed 09a69f8
  • style: formatted code 6fd42b2
  • style: formatted code 58d3859
  • tag: v0.10.0 e2fb91b
  • tag: v0.9.3 41d9fe1
  • tests: fixed memory storage clone test a0e05e8

v0.9.3 - 2022-03-04

Merged

  • chore(deps-dev): bump webpack from 5.69.1 to 5.70.0 #162
  • chore(deps-dev): bump eslint-config-prettier from 8.4.0 to 8.5.0 #160
  • chore(deps): bump actions/checkout from 2 to 3 #158
  • chore(deps-dev): bump ts-loader from 9.2.6 to 9.2.7 #159
  • chore(deps-dev): bump typescript from 4.5.5 to 4.6.2 #157

Commits

  • chore: add funding.yml 2429ae2
  • chore: cache parser dependency range a71f9aa
  • docs: updated code comment 80850b9
  • docs: updated download urls 06091a2
  • fix: defaultKeyGenerator keeps response unchanged (#161) ab45164
  • tag: v0.9.3 9993af2

v0.9.2 - 2022-02-28

Merged

  • chore(deps-dev): bump eslint from 8.9.0 to 8.10.0 #156
  • chore(deps): bump prismjs from 1.26.0 to 1.27.0 in /docs #155
  • chore(deps): bump actions/setup-node from 2 to 3 #154

Commits

v0.9.1 - 2022-02-23

Merged

  • feat: support for react-native cli #153
  • chore(deps-dev): bump @types/jest from 27.4.0 to 27.4.1 #152
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #150
  • chore(deps-dev): bump @typescript-eslint/parser from 5.12.0 to 5.12.1 #151

Commits

v0.9.0 - 2022-02-21

Merged

  • feat: handle web storage DOMExceptions #148
  • chore(deps-dev): bump eslint-config-prettier from 8.3.0 to 8.4.0 #149
  • chore(deps-dev): bump webpack from 5.69.0 to 5.69.1 #147

Commits

v0.8.10 - 2022-02-16

Merged

  • chore(deps-dev): bump webpack from 5.68.0 to 5.69.0 #146

Commits

v0.8.9 - 2022-02-14

Merged

  • chore(deps-dev): bump eslint from 8.8.0 to 8.9.0 #142
  • chore(deps-dev): bump jest from 27.5.0 to 27.5.1 #140

Commits

v0.8.8 - 2022-02-08

Commits

v0.8.7 - 2022-02-08

Commits

v0.8.6 - 2022-02-08

Merged

  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #138
  • chore(deps-dev): bump jest from 27.4.7 to 27.5.0 #136
  • chore(deps-dev): bump @typescript-eslint/parser from 5.10.1 to 5.10.2 #132
  • chore(deps-dev): bump webpack from 5.67.0 to 5.68.0 #133
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #134
  • chore(deps-dev): bump eslint from 8.7.0 to 8.8.0 #131
  • chore(deps-dev): bump es-check from 6.1.1 to 6.2.1 #130
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #126
  • chore(deps-dev): bump webpack-cli from 4.9.1 to 4.9.2 #127
  • chore(deps-dev): bump @typescript-eslint/parser from 5.10.0 to 5.10.1 #125

Commits

v0.8.5 - 2022-01-23

Merged

  • docs: add license scan report and status #124
  • chore(deps-dev): bump typescript from 4.5.4 to 4.5.5 #123

Commits

  • build: build everything from webpack f160428
  • build: minimize all bundles bc devtool is active 2d779ec
  • chore: switch back to yarn v1 7d314c2
  • docs: added react component example df74939
  • docs: added tsx syntax highlight 706c4dd
  • docs: removed coverpage bdbdd37
  • docs: simple analytics 😦 cb59384
  • docs: updated docs 95f4137
  • docs: updated documentation e9fc692
  • docs: updated download urls 026465c
  • docs: updated fossa badges 9b9ae3a
  • docs: updated homepage 7ccac42
  • docs: updated homepage 989ceec
  • docs: updated installing page b76087e
  • docs: updated sidebar and added dev mode section cc6523f
  • feat: debug mode & fixed tests 0ba6025
  • fixed jsx highlighting 64c0f40
  • refactor: added ACI prefix to avoid external conflicts ea4ab4c
  • refactor: added debug points 098cf47
  • refactor: added memory storage type 7dc15be
  • refactor: moved header file d14750e
  • refactor: prefer the usage of AxiosResponseHeaders bd4bf26
  • style: format code 31ef7e7
  • tag: v0.8.5 f09670d

v0.8.4 - 2022-01-18

Commits

  • chore: fix yarn.lock (yarnpkg/berry#3416) 9922650
  • chore: sideEffects: false and updated badges b555f95
  • deps: updated axios to v0.25 66f29c9
  • deps: updated eslint dependencies 2540c1e
  • docs: added staleIfError documentation 93dda05
  • docs: added table header 8273399
  • docs: updated documentation 668ce0c
  • docs: updated download urls c5629be
  • docs: updated rukit example 0aed72f
  • feat: add staleIfError support edb32bd
  • fix: removed breaking behaviour 7217eaf
  • refactor: use Object.freeze at Header enum 0e2508c
  • style: format code 1e8ca38
  • tag: v0.8.4 e356386

v0.8.3 - 2022-01-15

Commits

  • build: optimize umd builds with tslib 6d9683a
  • deps: updated cache-parser and jest 16184ac
  • docs: updated download urls d51c622
  • refactor: Header as const and renaming… e391f56
  • tag: v0.8.3 429256d

v0.8.2 - 2022-01-14

Commits

  • build: add umd/index.js for es2017+ 7f3a153
  • build: remove .min at umd bundles 5a7e015
  • chore: add source in the bundle 4c9c185
  • docs: updated docs a981cf2
  • docs: updated download urls 1ccfad3
  • docs: updated keyGenerator info 3c8b373
  • docs: updated umd filesizes ad51c23
  • feat: buildKeyGenerator and ids with req.data by default 9379fce
  • fix: include data at keyGenerator (#116) 6f9ef36
  • perf: only execute one generateKey per request fa2c6e3
  • tag: v0.8.2 650d094

v0.8.1 - 2022-01-13

Merged

  • build: Yarn v2 and ESM & CJS bundles #114
  • chore(deps): bump follow-redirects from 1.14.6 to 1.14.7 #113
  • chore(deps-dev): bump webpack from 5.65.0 to 5.66.0 #112

Commits

  • chore: eslint no-explicit-any 93df4fd
  • deps: fixed colors (marak/colors.js#285) 8243da5
  • deps: updated typescript-eslint monorepo 829b1a7
  • docs: fixed casing c76f2b7
  • docs: updated download urls ab53ac1
  • feat: cache predicate now supports async functions 88d45cc
  • fix: await unawaited promises and eslint more severe ff73ad5
  • fix: removed deprecated code e11e346
  • refactor: prefer unknown instead of any d0b0e2f
  • refactor: removed return await c3661a6
  • refactor: simplified cachePredicate 38a5ecd
  • refactor: used triple equal sign 1b93070
  • tag: v0.8.1 f928cfa
  • test: static roots to prevent other tests from running 57ee1e0

v0.8.0 - 2022-01-08

Commits

  • build: disabled downLevelIteration d30b862
  • deps: updated yarn.lock 2de68f3
  • docs: added SECURITY.md a6313ea
  • docs: fixed baseURL casing in examples & documentation 85336da
  • docs: updated download urls 75ec6fd
  • fix: code scanning alert 733a476
  • refactor: removed “abstract” buildInterceptor function f30e262
  • refactor: removed classes to decrease bundle size cd2f14c
  • refactor!: removed isAxiosCacheInterceptor function 37431a9
  • tag: v0.8.0 46a4ee5
  • tests: fixed coverage by enabling sourceMaps again 17408aa
  • tests: splited header interpreter tests into multiple files 4f938a4

v0.8.0-beta1 - 2022-01-07

Merged

  • docs: documentation at axios-cache-interceptor.js.org #108
  • chore(deps-dev): bump jest from 27.4.6 to 27.4.7 #107
  • chore(deps-dev): bump jest from 27.4.5 to 27.4.6 #105
  • chore(deps-dev): bump @types/node from 17.0.7 to 17.0.8 #106
  • chore(deps-dev): bump @types/jest from 27.0.3 to 27.4.0 #98

Commits

  • chore: bundles exports everything and webpack bundles everything ed1e163
  • chore: fixed default tsconfig.json 96e2d80
  • chore: fixed runkit import 4c58316
  • docs: added blazing fast badge 225658f
  • docs: added bundlephobia link 7c19739
  • docs: added docs mention at runkit example bf486ac
  • docs: added info about global axios usage 53c4d41
  • docs: added interactive examples 7207542
  • docs: added og preview 636ebb3
  • docs: added url-imports example e34bfdd
  • docs: added usage and examples page 06d9979
  • docs: fixed cache.update example 766b016
  • docs: fixed development cdn link 3daf7be
  • docs: fixed examples and added cache: false example 16600b0
  • docs: fixed source links c5de326
  • docs: fixed sw.js location b11d51d
  • docs: fixed tsdocs and added storages section 4c1e0ec
  • docs: offline support for an axios library does not make sense 6353b48
  • docs: pwa config f810365
  • docs: trying to fix runkit cors bcc1f47
  • docs: updated readme 1f9ddb4
  • examples: updated runkit example 4cfa8d0
  • feat: added isAxiosCacheInterceptor function c32c452
  • feat: allow ttl to be defined based on the response 1e87549
  • feat: suupport for async CacheUpdater cfbd601
  • fix: include default storages in cjs bundle 8d5a90e
  • fix: proper generic usage to type deep properties ce2f597
  • merge: merge yarn.lock b66ee1e
  • merge: package.json and yarn.lock 9e3c0f0
  • refactor: added data property in memory storages 500ac71
  • refactor: allow storages not return promises 567c1b2
  • refactor: extracted static functions to a single file c57916f
  • refactor: modified and simplified storages bafe1de
  • refactor: prefer unknown over any and removed find method from storages 79ce192
  • refactor: simplified defaultKeyGenerator function c155982
  • refactor: simplified header interpreter e776f01
  • style: prettified code 3c38985
  • tag: v0.8.0-beta1 db26ec6
  • tests: 100% coverage again a7751fd

v0.7.9 - 2021-12-30

Merged

  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #97

Commits

  • deps: updated fast-defer c6bec60
  • docs: fixed badges links 37a37b7
  • docs: updated docs ec523e8
  • feat: added many build options 232e9c5
  • fix: verify built ecmascript versions with es-check 58b6b12
  • refactor: prevent confusion by renaming createCache to useCache 4a0a99f
  • tag: v0.7.9 2e91a8f
  • test: added index.development tests 1e251dd

v0.7.8 - 2021-12-27

Commits

  • chore: fixed prettier config 144d3ae
  • deps: removed unused dependency 1b1b93b
  • docs: updated badges 5e04e5c
  • perf: minified code bundled as ES6 because axios itself needs ES6 8cad803
  • style: formatted code 27de629
  • tag: v0.7.8 cd0c189

v0.7.7 - 2021-12-27

Merged

  • chore(deps-dev): bump @types/node from 17.0.4 to 17.0.5 #94

Commits

  • refactor: deprecated useCache in favor of createCache (#95) 065b6ef
  • tag: v0.7.7 c611b42
  • test: added one simple test fec63a8

v0.7.6 - 2021-12-26

Merged

  • chore(deps-dev): bump @types/node from 17.0.3 to 17.0.4 #92
  • chore(deps-dev): bump @types/node from 17.0.2 to 17.0.3 #91
  • chore(deps-dev): bump @typescript-eslint/parser from 5.7.0 to 5.8.0 #88
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #89
  • chore(deps-dev): bump @types/node from 17.0.1 to 17.0.2 #90
  • chore(deps-dev): bump @types/node from 17.0.0 to 17.0.1 #85
  • chore(deps-dev): bump concurrently from 6.4.0 to 6.5.1 #86
  • chore(deps-dev): bump eslint from 8.4.1 to 8.5.0 #87
  • chore(deps-dev): bump ts-jest from 27.1.1 to 27.1.2 #84
  • chore(deps-dev): bump @types/node from 16.11.13 to 17.0.0 #83
  • chore(deps-dev): bump @babel/preset-env from 7.16.4 to 7.16.5 #78
  • chore(deps-dev): bump @babel/runtime from 7.16.3 to 7.16.5 #75
  • chore(deps-dev): bump @babel/preset-typescript from 7.16.0 to 7.16.5 #76
  • chore(deps-dev): bump @babel/plugin-transform-runtime #77
  • chore(deps-dev): bump @babel/plugin-transform-modules-commonjs #79

Commits

  • chore: include runkit examples 4fc6825
  • deps: updated cache-parser 9a2e4bc
  • deps: updated some dependencies 0640141
  • perf: reduce bundle size and replaced babel by ts-loader 6e25ba6
  • tag: v0.7.6 d6b2aff

v0.7.5 - 2021-12-13

Commits

v0.7.4 - 2021-12-13

Commits

v0.7.3 - 2021-12-13

Commits

  • chore: defined package.json browser field 3b40abd
  • deps: updated some dependencies 86a576d
  • deps: use cache-parser 6ce658b
  • refactor: better cache predicate function a77cde7
  • tag: v0.7.3 47beacc

v0.7.2 - 2021-12-11

Commits

  • chore: fixed typescript build ef94c70
  • chore: minor config changes d00b607
  • chore: use default webpack-terser-plugin 2d157c8
  • deps: updated dev dependencies b8623b6
  • refactor: externalized createCacheData function c3a0fea
  • refactor: made some methods static and public b4ad24d
  • style: fixed prettier plugin order 6929b02
  • tag: v0.7.2 795d706

v0.7.1 - 2021-12-09

Commits

v0.7.0 - 2021-12-09

Commits

  • chore: CacheOptions at the top of the file 1615f28
  • chore: correct babel filename 5d77ef1
  • chore: don’t transpile node_modules 05aadff
  • chore: good times 😃 1a5fdf9
  • chore: removed babel runtime usage d2a6fed
  • chore: transpile @tusbar/cache-control and correct babel config 32afef4
  • chore: use default browserslist config e9aeacc
  • chore!: use google browserlist config 1fc3552
  • deps: added missing explicit dependency 4fa9bc9
  • docs: updated badges 3ebe9e5
  • docs: updated readme badges f7f9033
  • refactor: bundle does not export everything that index has 488cd49
  • style: formatted code 964f7b0
  • tag: v0.7.0 39777cc
  • tag: v0.7.0 9d0f429

v0.7.0-beta3 - 2021-12-08

Commits

v0.7.0-beta2 - 2021-12-08

Commits

  • fix: fixed package.json bundle index name ae77e6a
  • tag: v0.7.0-beta2 5884d38

v0.7.0-beta1 - 2021-12-08

Merged

  • chore(deps-dev): bump @typescript-eslint/parser from 5.5.0 to 5.6.0 #69
  • chore(deps-dev): bump eslint from 8.4.0 to 8.4.1 #70
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #71
  • chore(deps-dev): bump @types/node from 16.11.11 to 16.11.12 #72
  • chore(deps-dev): bump eslint from 8.3.0 to 8.4.0 #66
  • chore(deps-dev): bump prettier from 2.5.0 to 2.5.1 #68
  • chore(deps-dev): bump ts-jest from 27.0.7 to 27.1.0 #67

Commits

  • deps: updated ts-jest 704be77
  • feat: added web bundle and babel 78cf406
  • feat!: removed createCache function 60ad91e
  • fix: fixed tests b9b4f79
  • perf: removed tslib and typed-core in favor of fast-defer 07ec645
  • tag: v0.7.0-beta1 6a67d4c

v0.6.3 - 2021-12-02

Merged

  • chore(deps-dev): bump jest from 27.4.2 to 27.4.3 #65
  • chore(deps-dev): bump @types/node from 16.11.10 to 16.11.11 #61
  • chore(deps): bump @tusbar/cache-control from 0.6.0 to 0.6.1 #60
  • chore(deps-dev): bump @typescript-eslint/parser from 5.4.0 to 5.5.0 #62
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #63
  • chore(deps-dev): bump jest from 27.4.0 to 27.4.2 #64
  • chore(deps-dev): bump @types/node from 16.11.9 to 16.11.10 #58
  • chore(deps-dev): bump prettier from 2.4.1 to 2.5.0 #59

Commits

v0.6.2 - 2021-11-23

Commits

v0.6.1 - 2021-11-23

Merged

  • chore(deps-dev): bump @types/node from 16.11.8 to 16.11.9 #57
  • chore(deps-dev): bump @types/jest from 27.0.2 to 27.0.3 #56
  • chore(deps-dev): bump @types/node from 16.11.7 to 16.11.8 #55
  • chore(deps-dev): bump typescript from 4.4.4 to 4.5.2 #54

Commits

  • build: emit declaration in dist folder e2de928
  • docs: removed readme duplicated title 1e1627b
  • tag: v0.6.1 097a179

v0.6.0 - 2021-11-15

Merged

  • feat: etag and if-modified-since support #53
  • feat: storage abstractions #52
  • feat: more headers supports, tests and must-revalidate fix #51
  • chore(deps-dev): bump @types/node from 16.11.6 to 16.11.7 #48
  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.24 to 0.3.30 #47

Commits

  • feat: immutable cache support 76a8af7
  • fix: compile to ES2020, instead of ES2021 5970483
  • style: prettier and changelog config changes 19d0e9b
  • tag: v0.6.0 bd98a16

v0.5.1 - 2021-11-05

Commits

v0.5.0 - 2021-10-28

Merged

  • chore(deps-dev): bump @types/node from 16.11.4 to 16.11.6 #46

Commits

v0.4.1 - 2021-10-25

Merged

  • chore(deps-dev): bump @types/node from 16.11.3 to 16.11.4 #44
  • chore(deps-dev): bump @types/node from 16.11.1 to 16.11.3 #43
  • chore(deps-dev): bump jest from 27.2.5 to 27.3.1 #42
  • chore(deps-dev): bump ts-jest from 27.0.6 to 27.0.7 #40
  • chore(deps-dev): bump @types/node from 16.11.0 to 16.11.1 #39
  • chore(deps-dev): bump @types/node from 16.10.9 to 16.11.0 #37
  • chore(deps-dev): bump ts-jest from 27.0.5 to 27.0.6 #38
  • chore(deps-dev): bump @types/node from 16.10.3 to 16.10.9 #36
  • chore(deps-dev): bump typescript from 4.4.3 to 4.4.4 #34

Commits

  • build: emit consistent javascript bundles with ES2021 cc23204
  • build: separate code and types build folder ede19c1
  • deps: latest @arthurfiorette/prettier-config b2ba65e
  • fix: fixed isCacheValid function and added tests 6e6100b
  • refactor: externalized cache eviction predicate f141b2e
  • tag: v0.4.1 28e3392
  • tag: v0.4.1 6ec1b57

v0.4.0 - 2021-10-12

Merged

  • chore(deps-dev): bump jest from 27.2.4 to 27.2.5 #33

Commits

  • docs: correct suported axios version 6b790af
  • docs: updated documentation 9b9827c
  • docs: updated minimal example dd1fa41
  • docs: updated readme 4c757d3
  • docs: updated readme 861567a
  • feat: preserve response status codes and use response.cached 75deccf
  • feat!: updated axios to v0.22.0 1713bb0
  • fix: generic spaghetti that axios brought 12a5032
  • fix: response and request types 891f1d0
  • merge: yarn.lock 03c4fba
  • refactor: cacheUpdater as generic function 2fa2557
  • refactor: eslint more strict 0605ad8
  • refactor: more type and naming refactors b42d3f1
  • style: indented tsconfig comments 65cec04
  • style: prettified code 3ed92c8
  • tag: v0.4.0 87880cf
  • tests: correct test name 49f80d7

v0.3.0 - 2021-10-09

Merged

  • chore(deps-dev): bump @types/node from 16.10.2 to 16.10.3 #32
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #30
  • chore(deps-dev): bump @typescript-eslint/parser from 4.32.0 to 4.33.0 #31

Commits

v0.2.8 - 2021-09-30

Merged

  • chore(deps-dev): bump jest from 27.2.3 to 27.2.4 #27
  • chore(deps-dev): bump @types/node from 16.10.1 to 16.10.2 #28
  • chore(deps-dev): bump jest from 27.2.2 to 27.2.3 #26
  • chore(deps-dev): bump @typescript-eslint/parser from 4.31.2 to 4.32.0 #25
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #24
  • chore(deps-dev): bump jest from 27.2.1 to 27.2.2 #23
  • chore(deps-dev): bump @types/node from 16.9.6 to 16.10.1 #22

Commits

v0.2.7 - 2021-09-26

Commits

  • chore: updated tsconfig 9ea72dc
  • fix: force import type to help compilation tools f8adcc4
  • refactor: removed double if 9d33ad6
  • refactor: renamed interceptor apply method c70bf3a
  • refactor: use for in instead of Object.entries 5b9847d
  • tag: v0.2.7 bc1aa19

v0.2.6 - 2021-09-26

Commits

  • ci: only run codeql when js files are changed b861277
  • refactor: use the same object for both properties 47349df
  • tag: v0.2.6 9c1f74f

v0.2.5 - 2021-09-23

Merged

  • chore(deps-dev): bump prettier-plugin-organize-imports #21
  • chore(deps): bump ansi-regex from 5.0.0 to 5.0.1 #20
  • chore(deps-dev): bump @types/node from 16.9.4 to 16.9.6 #19

Commits

v0.2.4 - 2021-09-21

Merged

  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #16
  • chore(deps-dev): bump @typescript-eslint/parser from 4.31.1 to 4.31.2 #18
  • chore(deps-dev): bump jest from 27.2.0 to 27.2.1 #17
  • chore(deps-dev): bump @types/jest from 27.0.1 to 27.0.2 #15

Commits

v0.2.3 - 2021-09-21

Commits

v0.2.2 - 2021-09-20

Commits

v0.2.1 - 2021-09-20

Commits

  • chore: prettify script with plugins c917f36
  • chore: push git tag on yarn version ec01751
  • chore: removed filename in launch.json eb868d4
  • refactor: concurreny fixes and refactored deferred 70e5c07
  • refactor: removed symbol support and more tests 5b6d14f
  • tag: v0.2.1 1099942

v0.2.0 - 2021-09-20

Merged

  • chore(deps-dev): bump @types/node from 16.9.2 to 16.9.4 #14
  • chore(deps-dev): bump @types/node from 16.9.1 to 16.9.2 #13
  • chore(deps-dev): bump prettier from 2.4.0 to 2.4.1 #12

Commits

  • chore: changelog generation 4363f65
  • feat: enable cache by creating or applying f4bbd8b
  • fix: a bunch of tests 6075a0a
  • fix: axios headers are lowercased 1f88779
  • fix: concurrent requests not beeing cached 1490bfc
  • refactor: interceptors in classes f1033a5
  • refactor: renamed status constants 6e61c0d
  • refactor: requests ids can also be symbol 38133a7
  • style: prettified code 45630e3
  • tag: v0.2.0 8228045
  • tag: v0.2.0 3ae95cf

v0.1.3 - 2021-09-15

Commits

v0.1.2 - 2021-09-15

Commits

  • fix: prevented bugs with the start of id being ::id c4a2dc3
  • tag: 0.1.2 0777874

v0.1.1 - 2021-09-15

Commits

v0.1.0 - 2021-09-15

Merged

  • chore(deps-dev): bump @typescript-eslint/parser from 4.31.0 to 4.31.1 #11
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #10

Commits

  • chore: removed unused methods from memory storage 5ddf9ed
  • chore: vscode tests debug b5c5905
  • ci: added main ci to lint and test code c48769a
  • ci: updated ci to support better caching 1c442ce
  • docs: changed # to h1 3f0e022
  • docs: fixed project name 🤣 6972069
  • docs: updated codecov badge token b45fd54
  • docs: updated readme d8afd8a
  • feat: interpreter also handles Expires header (and tests) 288c118
  • fix: fixed a log of bugs and added unit tests 2bbc9cb
  • refactor: init request and response tests 84dc522
  • refactor: more tests and fixes ee36bd5
  • refactor: ttl and createdAt instead of maxAge and storage takes care of staled entries be5ee1e
  • refactor: use generics on responseMatch 1c10b41
  • tag: v0.1.0 6d5bcf3
  • tests: added cache predicate tests bb552c8
  • tests: added deferred tests d09b3ad
  • tests: added key generator tests 7975c58

v0.0.6 - 2021-09-11

Commits

v0.0.5 - 2021-09-11

Merged

  • chore(deps-dev): bump prettier from 2.3.2 to 2.4.0 #9
  • chore(deps-dev): bump @types/node from 16.7.13 to 16.9.1 #8

Commits

  • chore: change built target to ESNext c1242ac
  • chore: updated eslint rules 4825739
  • dps: bump typescript@4.4.2 to typescript@4.4.3 b63e67b
  • feat: better cache predicate 892dab4
  • fix: define an empty waiting object at creation 2c49a49
  • refactor: axios.defaults.cache required 29d79d5
  • refactor: eslint more strict and some minor refactors d2c2a56
  • refactor: externalized the header interceptor ce2b7ec
  • refactor: moved all “utils” to one folder 211dd50
  • refactor: save all deferred to cache.waiting instead of in the storage ab051fc
  • Revert “tag: v0.0.6” aa0f90e
  • style: prettified code 6ae6d8f
  • tag: v0.0.4 96bc45d
  • tag: v0.0.5 (4 was already used) 99f69ce
  • tag: v0.0.6 80c4220

v0.0.4 - 2021-09-08

Merged

  • chore(deps-dev): bump axios from 0.21.1 to 0.21.4 #5
  • chore(deps-dev): bump @typescript-eslint/parser from 4.30.0 to 4.31.0 #4
  • chore(deps-dev): bump @types/node from 16.7.10 to 16.7.13 #6
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #3
  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.23 to 0.3.24 #1

Commits

  • chore: include eslint files on package 0e88571
  • docs: npm badge a43dfab
  • docs: updated author and readme 3465bc3
  • docs: updated readme 33f7385
  • style: use @arthurfiorette/prettier-config dc56085

v0.0.3 - 2021-09-01

Commits

v0.0.2 - 2021-09-01

Commits

v0.0.1 - 2021-09-01

Commits

',366)]))}const b=r(c,[["render",i]]);export{n as __pageData,b as default}; +import{_ as r,c as t,o as a,ag as o}from"./chunks/framework.CnuuF8_c.js";const n=JSON.parse('{"title":"Changelog","description":"","frontmatter":{},"headers":[],"relativePath":"others/changelog.md","filePath":"others/changelog.md","lastUpdated":1760451679000}'),c={name:"others/changelog.md"};function i(h,e,l,d,f,p){return a(),t("div",null,e[0]||(e[0]=[o('

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog and this project adheres to Semantic Versioning.

Generated by auto-changelog.

v1.7.0

Commits

v1.7.0 - 2025-03-17

Merged

  • build(deps): bump codecov/codecov-action from 4 to 5 #943
  • docs: add missing ‘different’ word into the code example comment #984
  • build(deps-dev): bump axios from 1.8.2 to 1.8.3 #988
  • build(deps-dev): bump @types/node from 22.13.9 to 22.13.10 #987
  • build(deps-dev): bump axios from 1.8.1 to 1.8.2 #986
  • build(deps-dev): bump @types/node from 22.13.8 to 22.13.9 #985
  • build(deps-dev): bump typescript from 5.7.3 to 5.8.2 #983
  • build(deps-dev): bump @types/node from 22.13.5 to 22.13.8 #982
  • build(deps-dev): bump axios from 1.8.0 to 1.8.1 #981
  • build(deps-dev): bump axios from 1.7.9 to 1.8.0 #979
  • build(deps-dev): bump @types/node from 22.13.4 to 22.13.5 #978
  • build(deps-dev): bump @types/node from 22.13.2 to 22.13.4 #976
  • build(deps-dev): bump @types/node from 22.13.1 to 22.13.2 #974
  • build(deps-dev): bump @arthurfiorette/biomejs-config from 1.0.6 to 1.0.7 #973
  • build(deps-dev): bump @types/node from 22.13.0 to 22.13.1 #972
  • build(deps-dev): bump @types/node from 22.12.0 to 22.13.0 #971
  • build(deps-dev): bump @types/node from 22.10.10 to 22.12.0 #970
  • build(deps-dev): bump @types/node from 22.10.9 to 22.10.10 #969
  • build(deps-dev): bump @types/node from 22.10.7 to 22.10.9 #968
  • build(deps-dev): bump vitepress from 1.6.2 to 1.6.3 #967
  • build(deps-dev): bump vitepress from 1.6.1 to 1.6.2 #966
  • build(deps-dev): bump vitepress from 1.5.0 to 1.6.1 #965
  • build(deps-dev): bump @types/node from 22.10.6 to 22.10.7 #964
  • build(deps-dev): bump @types/node from 22.10.5 to 22.10.6 #963
  • build(deps-dev): bump typescript from 5.7.2 to 5.7.3 #962
  • build(deps-dev): bump @types/node from 22.10.3 to 22.10.5 #960
  • build(deps-dev): bump @types/node from 22.10.2 to 22.10.3 #959
  • build(deps-dev): bump @types/node from 22.10.1 to 22.10.2 #957
  • build(deps): bump nanoid from 3.3.7 to 3.3.8 #956
  • build(deps-dev): bump c8 from 10.1.2 to 10.1.3 #955
  • build(deps-dev): bump axios from 1.7.8 to 1.7.9 #954
  • build(deps-dev): bump @types/node from 22.10.0 to 22.10.1 #952
  • build(deps-dev): bump @arthurfiorette/biomejs-config from 1.0.5 to 1.0.6 #951
  • build(deps-dev): bump @types/node from 22.9.3 to 22.10.0 #950
  • build(deps-dev): bump axios from 1.7.7 to 1.7.8 #949
  • build(deps-dev): bump @types/node from 22.9.1 to 22.9.3 #948
  • build(deps-dev): bump typescript from 5.6.3 to 5.7.2 #947
  • build(deps-dev): bump @types/node from 22.9.0 to 22.9.1 #946
  • build(deps): bump cross-spawn from 7.0.3 to 7.0.6 #945
  • build(deps-dev): bump @swc/helpers from 0.5.13 to 0.5.15 #942
  • build(deps-dev): bump vitepress from 1.4.5 to 1.5.0 #941
  • build(deps-dev): bump @types/node from 22.8.7 to 22.9.0 #940
  • build(deps-dev): bump @types/node from 22.8.6 to 22.8.7 #939
  • build(deps-dev): bump vitepress from 1.4.3 to 1.4.5 #938
  • build(deps-dev): bump vitepress from 1.4.2 to 1.4.3 #936
  • build(deps-dev): bump @types/node from 22.8.5 to 22.8.6 #937
  • build(deps-dev): bump tslib from 2.8.0 to 2.8.1 #935
  • docs: vue behavior when modifying cached arrays #934
  • build(deps-dev): bump @types/node from 22.8.4 to 22.8.5 #933
  • build(deps-dev): bump vitepress from 1.4.1 to 1.4.2 #931
  • build(deps-dev): bump @types/node from 22.8.2 to 22.8.4 #930
  • build(deps-dev): bump @types/node from 22.8.1 to 22.8.2 #929
  • build(deps-dev): bump @types/node from 22.7.9 to 22.8.1 #928
  • build(deps-dev): bump @types/node from 22.7.8 to 22.7.9 #927

Commits

v1.6.2 - 2024-10-22

Merged

  • fix: aborted requests should not clear its cache afterwards if previous request was cached #923
  • build(deps-dev): bump @types/node from 22.7.7 to 22.7.8 #926
  • build(deps-dev): bump @types/node from 22.7.6 to 22.7.7 #924

Commits

1.6.1 - 2024-10-18

v1.6.1 - 2024-10-22

Merged

  • fix: aborted requests should not clear its cache afterwards if previous request was cached #923
  • build(deps-dev): bump @types/node from 22.7.7 to 22.7.8 #926
  • build(deps-dev): bump @types/node from 22.7.6 to 22.7.7 #924
  • fix: cloneData for concurrent requests #921
  • build(deps-dev): bump @biomejs/biome from 1.9.3 to 1.9.4 #920
  • build(deps-dev): bump @types/node from 22.7.5 to 22.7.6 #919
  • build(deps-dev): bump tslib from 2.7.0 to 2.8.0 #918
  • build(deps-dev): bump vitepress from 1.4.0 to 1.4.1 #917
  • build(deps-dev): bump typescript from 5.6.2 to 5.6.3 #916
  • build(deps): bump rollup from 2.79.1 to 2.79.2 #914
  • build(deps-dev): bump vitepress from 1.3.4 to 1.4.0 #910
  • build(deps): bump ejs from 3.1.9 to 3.1.10 #912
  • build(deps): bump vite from 5.4.1 to 5.4.8 #913
  • build(deps-dev): bump @types/node from 22.7.4 to 22.7.5 #911
  • build(deps-dev): bump @biomejs/biome from 1.9.2 to 1.9.3 #908
  • build(deps-dev): bump @types/node from 22.7.2 to 22.7.4 #907
  • docs: Fix headerInterpreter type typo #905
  • build(deps-dev): bump @types/node from 22.7.0 to 22.7.2 #904
  • build(deps-dev): bump @types/node from 22.6.1 to 22.7.0 #903
  • build(deps-dev): bump @types/node from 22.5.5 to 22.6.1 #902
  • build(deps-dev): bump jsdom from 25.0.0 to 25.0.1 #901
  • build(deps-dev): bump @biomejs/biome from 1.9.1 to 1.9.2 #900
  • build(deps-dev): bump @types/node from 22.5.4 to 22.5.5 #898
  • build(deps-dev): bump @biomejs/biome from 1.9.0 to 1.9.1 #897
  • build(deps-dev): bump @biomejs/biome from 1.5.3 to 1.9.0 #895
  • build(deps-dev): bump @types/node from 20.11.5 to 22.5.4 #892
  • build(deps-dev): bump jsdom from 24.1.1 to 25.0.0 #885

Commits

v1.6.0 - 2024-09-13

Merged

  • build(deps-dev): bump auto-changelog from 2.4.0 to 2.5.0 #894
  • build(deps-dev): bump typescript from 5.5.4 to 5.6.2 #893
  • build(deps-dev): bump @swc/helpers from 0.5.12 to 0.5.13 #890
  • build(deps-dev): bump axios from 1.7.5 to 1.7.7 #889
  • build(deps-dev): bump axios from 1.7.4 to 1.7.5 #886
  • build(deps-dev): bump vitepress from 1.3.3 to 1.3.4 #884
  • build(deps-dev): bump tslib from 2.6.3 to 2.7.0 #883
  • build(deps-dev): bump vitepress from 1.3.2 to 1.3.3 #879
  • build(deps-dev): bump axios from 1.7.3 to 1.7.4 #877
  • build(deps-dev): bump vitepress from 1.3.1 to 1.3.2 #874
  • build(deps-dev): bump c8 from 9.1.0 to 10.1.2 #855
  • feat: add stale flag in request return object #843
  • build(deps-dev): bump axios from 1.7.2 to 1.7.3 #872
  • build(deps-dev): bump typescript from 5.5.3 to 5.5.4 #868
  • build(deps-dev): bump jsdom from 24.1.0 to 24.1.1 #867
  • build(deps-dev): bump vitepress from 1.3.0 to 1.3.1 #864
  • build(deps-dev): bump @swc/helpers from 0.5.11 to 0.5.12 #865
  • build(deps-dev): bump vitepress from 1.2.3 to 1.3.0 #860
  • build(deps-dev): bump typescript from 5.5.2 to 5.5.3 #859
  • build(deps-dev): bump typescript from 5.4.5 to 5.5.2 #857
  • build(deps-dev): bump tslib from 2.6.2 to 2.6.3 #851
  • feat: clear storage method #848
  • build(deps-dev): bump vitepress from 1.2.2 to 1.2.3 #849
  • build(deps-dev): bump @types/jsdom from 21.1.6 to 21.1.7 #845
  • [ImgBot] Optimize images #844
  • docs: add an example node-cache implementation in docs #841
  • build(deps-dev): bump jsdom from 24.0.0 to 24.1.0 #842

Commits

v1.5.3 - 2024-05-22

Merged

  • #839
  • #840
  • #838
  • #837
  • chore(deps-dev): bump axios from 1.6.8 to 1.7.0 #836
  • chore(deps-dev): bump vitepress from 1.1.4 to 1.2.0 #835
  • chore(deps): bump pnpm/action-setup from 3 to 4 #831
  • chore(deps-dev): bump vitepress from 1.1.3 to 1.1.4 #828
  • chore(deps-dev): bump @swc/helpers from 0.5.10 to 0.5.11 #826

Commits

v1.5.2 - 2024-04-23

Merged

  • [must-revalidate] properly revalidate based on eTag #824
  • chore(deps-dev): bump vitepress from 1.1.0 to 1.1.3 #823
  • chore(deps-dev): bump @swc/helpers from 0.5.9 to 0.5.10 #820
  • chore(deps-dev): bump @swc/helpers from 0.5.8 to 0.5.9 #819
  • chore(deps-dev): bump vitepress from 1.0.2 to 1.1.0 #817
  • chore(deps-dev): bump typescript from 5.4.4 to 5.4.5 #818
  • chore(deps-dev): bump typescript from 5.4.3 to 5.4.4 #816
  • chore(deps-dev): bump vite from 5.2.2 to 5.2.8 #814
  • chore(deps-dev): bump vitepress from 1.0.1 to 1.0.2 #813
  • chore(deps-dev): bump @swc/helpers from 0.5.7 to 0.5.8 #812
  • chore(deps-dev): bump vitepress from 1.0.0-rc.45 to 1.0.1 #809
  • chore(deps-dev): bump typescript from 5.4.2 to 5.4.3 #808
  • chore(deps-dev): bump axios from 1.6.7 to 1.6.8 #807
  • chore(deps-dev): bump @swc/helpers from 0.5.6 to 0.5.7 #806
  • chore(deps-dev): bump follow-redirects from 1.15.4 to 1.15.6 #805
  • chore(deps-dev): bump typescript from 5.3.3 to 5.4.2 #802
  • chore(deps-dev): bump vitepress from 1.0.0-rc.44 to 1.0.0-rc.45 #801
  • chore(deps-dev): bump @swc-node/register from 1.8.0 to 1.9.0 #800
  • chore(deps-dev): bump vitepress from 1.0.0-rc.43 to 1.0.0-rc.44 #798
  • chore(deps-dev): bump vitepress from 1.0.0-rc.42 to 1.0.0-rc.43 #797
  • docs: update cache jsdocs for debugging #796
  • chore(deps-dev): bump jsdom from 23.2.0 to 24.0.0 #779
  • chore(deps): bump pnpm/action-setup from 2 to 3 #794
  • chore(deps): bump codecov/codecov-action from 3 to 4 #786
  • chore(deps): bump object-code from 1.3.2 to 1.3.3 #793
  • docs: improved clarity of code comments in invalidating-cache.md #792
  • chore(deps-dev): bump vitepress from 1.0.0-rc.41 to 1.0.0-rc.42 #791
  • chore(deps-dev): bump @swc/helpers from 0.5.3 to 0.5.6 #790
  • chore(deps-dev): bump vitepress from 1.0.0-rc.40 to 1.0.0-rc.41 #789
  • chore(deps-dev): bump @swc-node/register from 1.6.8 to 1.8.0 #788
  • chore(deps-dev): bump axios from 1.6.5 to 1.6.7 #785
  • chore(deps-dev): bump vitepress from 1.0.0-rc.39 to 1.0.0-rc.40 #782
  • chore(deps-dev): bump @biomejs/biome from 1.5.2 to 1.5.3 #781
  • chore(deps-dev): bump vite from 5.0.11 to 5.0.12 #777

Commits

v1.5.1 - 2024-01-19

Commits

v1.5.0 - 2024-01-19

Merged

  • fix: transformResponse running twice on cached requests #775
  • feat: correct ESM and CJS support, move to microbundle. #764
  • chore(deps-dev): bump vitepress from 1.0.0-rc.37 to 1.0.0-rc.39 #776
  • chore(deps-dev): bump @biomejs/biome from 1.5.1 to 1.5.2 #774
  • chore(deps-dev): bump vitepress from 1.0.0-rc.36 to 1.0.0-rc.37 #773
  • chore(deps-dev): bump c8 from 9.0.0 to 9.1.0 #772
  • chore(deps-dev): bump @biomejs/biome from 1.4.1 to 1.5.1 #770
  • chore(deps-dev): bump vitepress from 1.0.0-rc.35 to 1.0.0-rc.36 #769
  • chore(deps-dev): bump axios from 1.6.4 to 1.6.5 #766
  • chore(deps-dev): bump jsdom from 23.0.1 to 23.2.0 #765
  • chore(deps-dev): bump c8 from 8.0.1 to 9.0.0 #762
  • chore(deps-dev): bump axios from 1.6.3 to 1.6.4 #763
  • chore(deps-dev): bump vitepress from 1.0.0-rc.34 to 1.0.0-rc.35 #761
  • chore(deps-dev): bump vitepress from 1.0.0-rc.33 to 1.0.0-rc.34 #758
  • chore(deps-dev): bump axios from 1.6.2 to 1.6.3 #756
  • chore(deps-dev): bump vitepress from 1.0.0-rc.32 to 1.0.0-rc.33 #755

Commits

v1.4.1 - 2023-12-26

Commits

v1.4.0 - 2023-12-23

Merged

  • Ådd feature to blacklist some paths #754
  • chore(deps): bump github/codeql-action from 2 to 3 #749
  • chore(deps-dev): bump vitepress from 1.0.0-rc.31 to 1.0.0-rc.32 #751

Commits

v1.3.3 - 2023-12-13

Merged

  • chore(deps-dev): bump @biomejs/biome from 1.3.3 to 1.4.1 #740
  • chore(deps-dev): bump jsdom from 22.1.0 to 23.0.1 #739
  • Update documentation to clarify side effects of setupCache #732
  • docs: wording and fixing a broken local link #745
  • docs: rewording the invalidating cache page #744
  • chore(deps-dev): bump typescript from 5.3.2 to 5.3.3 #743
  • chore(deps-dev): bump vite from 5.0.2 to 5.0.5 #741
  • chore(deps-dev): bump vitepress from 1.0.0-rc.30 to 1.0.0-rc.31 #735
  • chore(deps-dev): bump vitepress from 1.0.0-rc.29 to 1.0.0-rc.30 #733
  • chore(deps-dev): bump typescript from 5.2.2 to 5.3.2 #728
  • chore(deps-dev): bump @types/jsdom from 21.1.5 to 21.1.6 #727
  • chore(deps-dev): bump vitepress from 1.0.0-rc.26 to 1.0.0-rc.29 #726
  • chore(deps): bump fast-defer from 1.1.7 to 1.1.8 #725
  • chore(deps-dev): bump vitepress from 1.0.0-rc.25 to 1.0.0-rc.26 #724
  • chore(deps-dev): bump tsx from 3.14.0 to 4.1.2 #721
  • chore(deps-dev): bump axios from 1.6.1 to 1.6.2 #723
  • chore(deps-dev): bump ts-loader from 9.5.0 to 9.5.1 #722
  • chore(deps-dev): bump prettier-plugin-organize-imports #717
  • chore(deps-dev): bump axios from 1.6.0 to 1.6.1 #715
  • chore(deps-dev): bump @types/webpack from 5.28.4 to 5.28.5 #714
  • chore(deps-dev): bump @types/jsdom from 21.1.4 to 21.1.5 #713
  • chore(deps-dev): bump eslint from 8.52.0 to 8.53.0 #712
  • chore(deps-dev): bump vitepress from 1.0.0-rc.24 to 1.0.0-rc.25 #711
  • docs: fix typos #707
  • chore(deps-dev): bump axios from 1.5.1 to 1.6.0 #706
  • chore(deps): bump actions/setup-node from 3 to 4 #703
  • chore(deps-dev): bump vitepress from 1.0.0-rc.23 to 1.0.0-rc.24 #704

Commits

v1.3.2 - 2023-10-23

Merged

  • chore(deps-dev): bump eslint from 8.51.0 to 8.52.0 #702
  • chore(deps-dev): bump vitepress from 1.0.0-rc.22 to 1.0.0-rc.23 #701
  • chore(deps-dev): bump @types/webpack from 5.28.3 to 5.28.4 #699
  • chore(deps-dev): bump tsx from 3.13.0 to 3.14.0 #697
  • chore(deps-dev): bump @types/jsdom from 21.1.3 to 21.1.4 #696
  • chore(deps-dev): bump vitepress from 1.0.0-rc.21 to 1.0.0-rc.22 #693
  • chore(deps-dev): bump webpack from 5.88.2 to 5.89.0 #692
  • chore(deps-dev): bump vitepress from 1.0.0-rc.20 to 1.0.0-rc.21 #691
  • chore(deps-dev): bump eslint from 8.50.0 to 8.51.0 #690
  • chore(deps-dev): bump ts-loader from 9.4.4 to 9.5.0 #689
  • chore(deps-dev): bump postcss from 8.4.27 to 8.4.31 #687
  • chore(deps-dev): bump @arthurfiorette/prettier-config #686

Commits

v1.3.1 - 2023-09-30

Merged

  • docs: expression error #684
  • chore(deps-dev): bump axios from 1.5.0 to 1.5.1 #683
  • chore(deps-dev): bump @types/webpack from 5.28.2 to 5.28.3 #682
  • chore(deps-dev): bump vitepress from 1.0.0-rc.15 to 1.0.0-rc.20 #681
  • chore(deps-dev): bump eslint from 8.49.0 to 8.50.0 #680
  • chore(deps-dev): bump vitepress from 1.0.0-rc.14 to 1.0.0-rc.15 #679
  • chore(deps-dev): bump @types/jsdom from 21.1.2 to 21.1.3 #678
  • chore(deps-dev): bump vitepress from 1.0.0-rc.13 to 1.0.0-rc.14 #677
  • chore(deps-dev): bump vitepress from 1.0.0-rc.12 to 1.0.0-rc.13 #673
  • chore(deps-dev): bump vitepress from 1.0.0-rc.10 to 1.0.0-rc.12 #672
  • chore(deps-dev): bump eslint from 8.48.0 to 8.49.0 #671
  • chore(deps): bump actions/checkout from 3 to 4 #666

Commits

  • chore: fixed bundle license 5adc229
  • ci: fixed ci tests 060e67d
  • docs: installing e6b6441
  • feat: prefer noop over undefined when debugging 16e51e7
  • feat: testing with tsx and c8 dd8f634
  • fix: handle axios errors without config (#674) 309bfe1
  • fix: rejected response deadlocks (#685) 286b2c0
  • style: formatted code fe83070
  • tag: v1.3.1 953d992

v1.3.0 - 2023-09-05

Merged

  • chore(deps-dev): bump vitepress from 1.0.0-rc.9 to 1.0.0-rc.10 #661
  • chore(deps-dev): bump axios from 1.4.0 to 1.5.0 #659
  • chore(deps-dev): bump @types/node from 18.17.11 to 18.17.12 #660
  • chore(deps-dev): bump vitepress from 1.0.0-rc.4 to 1.0.0-rc.9 #658
  • chore(deps-dev): bump eslint from 8.47.0 to 8.48.0 #657
  • chore(deps-dev): bump @types/node from 18.17.9 to 18.17.11 #654
  • chore(deps-dev): bump typescript from 5.1.6 to 5.2.2 #653
  • chore(deps-dev): bump jest-environment-jsdom from 29.6.3 to 29.6.4 #652
  • chore(deps-dev): bump jest from 29.6.3 to 29.6.4 #651
  • chore(deps-dev): bump @types/node from 18.17.8 to 18.17.9 #650
  • chore(deps-dev): bump @types/webpack from 5.28.1 to 5.28.2 #649
  • chore(deps-dev): bump @types/node from 18.17.6 to 18.17.8 #648
  • chore(deps-dev): bump @types/jest from 29.5.3 to 29.5.4 #647
  • chore(deps-dev): bump jest from 29.6.2 to 29.6.3 #645
  • chore(deps-dev): bump jest-environment-jsdom from 29.6.2 to 29.6.3 #646
  • chore(deps-dev): bump tslib from 2.6.1 to 2.6.2 #644
  • chore(deps-dev): bump @types/node from 18.17.5 to 18.17.6 #643
  • chore(deps-dev): bump eslint from 8.46.0 to 8.47.0 #638
  • chore(deps-dev): bump @types/node from 18.17.4 to 18.17.5 #637
  • chore(deps-dev): bump vitepress from 1.0.0-beta.7 to 1.0.0-rc.4 #636
  • chore(deps-dev): bump @types/node from 18.17.3 to 18.17.4 #635
  • chore(deps-dev): bump eslint-config-prettier from 8.10.0 to 9.0.0 #634
  • chore(deps-dev): bump @types/node from 18.17.2 to 18.17.3 #633
  • chore(deps-dev): bump @types/node from 18.17.1 to 18.17.2 #632
  • chore(deps-dev): bump eslint-config-prettier from 8.9.0 to 8.10.0 #630
  • chore(deps-dev): bump vitepress from 1.0.0-beta.6 to 1.0.0-beta.7 #627
  • chore(deps-dev): bump eslint from 8.45.0 to 8.46.0 #626
  • fix: avoid RangeError: Maximum call stack size exceeded on streams and other objects #616
  • chore(deps-dev): bump jest-environment-jsdom from 29.6.1 to 29.6.2 #623
  • feat: turn most types into interfaces #615
  • chore(deps-dev): bump jest from 29.6.1 to 29.6.2 #622
  • chore(deps-dev): bump eslint-config-prettier from 8.8.0 to 8.9.0 #624
  • chore(deps-dev): bump @types/node from 18.17.0 to 18.17.1 #620
  • chore(deps-dev): bump tslib from 2.6.0 to 2.6.1 #619
  • chore(deps-dev): bump @types/node from 18.16.19 to 18.17.0 #617
  • chore(deps-dev): bump vitepress from 1.0.0-beta.5 to 1.0.0-beta.6 #618
  • chore(deps-dev): bump word-wrap from 1.2.3 to 1.2.4 #614
  • chore(deps-dev): bump @typescript-eslint/parser from 5.61.0 to 5.62.0 #602
  • chore(deps-dev): bump @types/jest from 29.5.2 to 29.5.3 #600
  • chore(deps-dev): bump webpack from 5.88.1 to 5.88.2 #605
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #601
  • chore(deps-dev): bump eslint from 8.44.0 to 8.45.0 #604
  • chore(deps-dev): bump prettier-plugin-organize-imports #603
  • chore(deps-dev): bump jest-environment-jsdom from 29.6.0 to 29.6.1 #599
  • chore(deps-dev): bump jest from 29.6.0 to 29.6.1 #598
  • chore(deps-dev): bump jest from 29.5.0 to 29.6.0 #595
  • chore(deps-dev): bump jest-environment-jsdom from 29.5.0 to 29.6.0 #596
  • chore(deps-dev): bump @typescript-eslint/parser from 5.60.1 to 5.61.0 #593
  • chore: new bug template #591
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #592
  • chore(deps-dev): bump vitepress from 1.0.0-beta.3 to 1.0.0-beta.5 #589
  • chore(deps-dev): bump @types/node from 18.16.18 to 18.16.19 #590
  • chore(deps-dev): bump eslint from 8.43.0 to 8.44.0 #588
  • feat: ‘cloneData’ option to buildMemoryStorage #581
  • chore(deps-dev): bump ts-loader from 9.4.3 to 9.4.4 #584
  • chore(deps-dev): bump typescript from 5.1.5 to 5.1.6 #582
  • chore(deps-dev): bump webpack from 5.88.0 to 5.88.1 #583
  • chore(deps-dev): bump eslint from 8.42.0 to 8.43.0 #567
  • chore(deps-dev): bump ts-jest from 29.1.0 to 29.1.1 #585
  • chore(deps-dev): bump typescript from 5.1.3 to 5.1.5 #577
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #576
  • chore(deps-dev): bump tslib from 2.5.3 to 2.6.0 #575
  • chore(deps-dev): bump @typescript-eslint/parser from 5.60.0 to 5.60.1 #574
  • fix(docs): redis link to docs #571
  • chore(deps-dev): bump @types/node from 18.16.16 to 18.16.18 #559
  • chore(deps-dev): bump webpack from 5.86.0 to 5.88.0 #569
  • chore(deps-dev): bump vitepress from 1.0.0-beta.1 to 1.0.0-beta.3 #566
  • chore(deps-dev): bump @typescript-eslint/parser from 5.59.9 to 5.60.0 #564
  • Fix typo in Request ID docs #561

Commits

  • chore: dependabot f571ad3
  • chore: removed unused eslint comment cb3114f
  • chore: updated pnpm 4ab04a7
  • ci: dependabot c7e3af0
  • ci: fixed escheck 60f161a
  • ci: ignore if codecov action breaks 605d39b
  • docs: added more keywords to help with searching b352f12
  • docs: filesizes ee10f76
  • docs: fix issue template 281848a
  • docs: fix issue template v2 d672a08
  • docs: update bug again 😃 ce82bb5
  • docs: update bug report 522179b
  • docs: update bug report c91e6a0
  • docs: updated download url 8fa904c
  • feat: added CORS info on cacheTakeover ddacace
  • feat: handle non axios errors rejections (#609) 929054e
  • feat: moved tests to node:test (#628) 2cc948d
  • fix: correct config re throw ddcac5f
  • fix: infinite loading states when a restart occurs in the middle of a request. (#612) 130ef0d
  • fix: moved to native source map support 4dbfea2
  • fix: updated vitepress 3be8029
  • tag: v1.3.0 96f03c4

v1.2.0 - 2023-06-09

Merged

  • chore(deps-dev): bump eslint from 8.34.0 to 8.42.0 #551
  • chore(deps-dev): bump jest-environment-jsdom from 29.4.3 to 29.5.0 #553
  • chore(deps-dev): bump @types/node from 18.13.0 to 18.16.16 #552
  • chore(deps-dev): bump tslib from 2.5.0 to 2.5.3 #550
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #549
  • docs: cachePredicate status codes follows RFC 7231 #547

Commits

  • chore: updated dependencies c7dab4f
  • feat: v1.2.0 066cc4f
  • fix: avoid git checks while publishing 2d2696d
  • fix: correct canStale checks (#543) 82182bf
  • fix: correct lowercase test 7e5ca7e
  • fix: support max-stale on header interpreter (#543) 683dbe0
  • style: formatted code 0cca290
  • style: formatted code a5f071d
  • style: formatted code a7405e1

v1.1.1 - 2023-05-25

Merged

  • docs: fixed headerInterpreter return type #542

Commits

  • docs: cdnjs links 9e3800c
  • feat: better storage docs 5f2ed82
  • feat: max entries on memory storage #539 ebd400b
  • feat: v1.1.1 143d409
  • fix: flaky network test and improved redis documentation ee9a7de
  • fix: removed only allow pnpm aa69799
  • style: formatted code 7b0fb85

v1.1.0 - 2023-05-17

Merged

  • fix: Support stale-while-revalidate #514
  • docs: added docs for #506 #509
  • feat: staleIfError using stale-if-error directive #506
  • chore(deps-dev): bump jest-environment-jsdom from 29.4.2 to 29.4.3 #505
  • chore(deps-dev): bump jest from 29.4.2 to 29.4.3 #504
  • chore(deps-dev): bump @typescript-eslint/parser from 5.51.0 to 5.52.0 #503
  • chore(deps-dev): bump axios from 1.3.2 to 1.3.3 #502
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #501
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.45 to 1.0.0-alpha.46 #500
  • chore(deps-dev): bump eslint from 8.33.0 to 8.34.0 #499
  • chore(deps-dev): bump jest-environment-jsdom from 29.4.1 to 29.4.2 #498
  • chore(deps-dev): bump prettier from 2.8.3 to 2.8.4 #497
  • chore(deps-dev): bump jest from 29.4.1 to 29.4.2 #496
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #495
  • chore(deps-dev): bump @typescript-eslint/parser from 5.50.0 to 5.51.0 #494
  • chore(deps-dev): bump axios from 1.3.1 to 1.3.2 #492
  • chore(deps-dev): bump @arthurfiorette/prettier-config #491

Fixed

  • docs: added docs for #506 (#509) #506
  • feat: staleIfError using stale-if-error directive (#506) #506

Commits

v1.0.1 - 2023-02-02

Merged

  • chore(deps-dev): bump @typescript-eslint/parser from 5.49.0 to 5.50.0 #488
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #486
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.44 to 1.0.0-alpha.45 #489
  • chore(deps-dev): bump typescript from 4.9.4 to 4.9.5 #485
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.43 to 1.0.0-alpha.44 #484
  • docs: typo at update getting-started.md #483
  • chore(deps-dev): bump eslint from 8.32.0 to 8.33.0 #482
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.40 to 1.0.0-alpha.43 #481
  • chore(deps-dev): bump tslib from 2.4.1 to 2.5.0 #477
  • chore(deps-dev): bump jest from 29.4.0 to 29.4.1 #479
  • chore(deps-dev): bump jest-environment-jsdom from 29.4.0 to 29.4.1 #478
  • chore(deps-dev): bump es-check from 7.0.1 to 7.1.0 #476
  • chore(deps-dev): bump jest from 29.3.1 to 29.4.0 #475
  • chore(deps-dev): bump jest-environment-jsdom from 29.3.1 to 29.4.0 #474
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #473
  • chore(deps-dev): bump @typescript-eslint/parser from 5.48.2 to 5.49.0 #472
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.38 to 1.0.0-alpha.40 #470
  • chore(deps-dev): bump @types/jest from 29.2.5 to 29.2.6 #468
  • fix: prevent response storage calls if method is not supported #464
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.36 to 1.0.0-alpha.38 #467
  • chore(deps-dev): bump prettier from 2.8.1 to 2.8.3 #460
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #466
  • chore(deps-dev): bump eslint from 8.31.0 to 8.32.0 #463
  • chore(deps-dev): bump @typescript-eslint/parser from 5.48.1 to 5.48.2 #465
  • chore(deps-dev): bump prettier-plugin-organize-imports #462
  • chore(deps-dev): bump ts-jest from 29.0.4 to 29.0.5 #461
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.35 to 1.0.0-alpha.36 #457
  • chore(deps-dev): bump ts-jest from 29.0.3 to 29.0.4 #458
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #454
  • chore(deps-dev): bump @typescript-eslint/parser from 5.48.0 to 5.48.1 #455
  • chore(deps-dev): bump eslint-config-prettier from 8.5.0 to 8.6.0 #451
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.34 to 1.0.0-alpha.35 #450
  • chore(deps): bump json5 from 2.2.1 to 2.2.3 #445
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.33 to 1.0.0-alpha.34 #443
  • chore: typos #446
  • chore(deps-dev): bump @typescript-eslint/parser from 5.47.1 to 5.48.0 #448
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #447
  • chore(deps-dev): bump eslint from 8.30.0 to 8.31.0 #444
  • chore(deps-dev): bump @types/jest from 29.2.4 to 29.2.5 #442
  • chore(deps-dev): bump @typescript-eslint/parser from 5.47.0 to 5.47.1 #438
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #439

Commits

v1.0.0 - 2022-12-26

Merged

  • chore(deps-dev): bump vitepress from 1.0.0-alpha.32 to 1.0.0-alpha.33 #436
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #434
  • chore(deps-dev): bump @typescript-eslint/parser from 5.46.1 to 5.47.0 #435
  • chore(deps-dev): bump eslint from 8.29.0 to 8.30.0 #432
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.31 to 1.0.0-alpha.32 #431
  • docs: Fix request-id.md docs #429
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #428
  • chore(deps-dev): bump @typescript-eslint/parser from 5.46.0 to 5.46.1 #427
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.30 to 1.0.0-alpha.31 #426
  • chore(deps-dev): bump prettier from 2.8.0 to 2.8.1 #421
  • chore: default prefix parameter for web storage #425
  • chore(deps-dev): bump typescript from 4.9.3 to 4.9.4 #420
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #423
  • chore(deps-dev): bump @typescript-eslint/parser from 5.45.1 to 5.46.0 #422
  • chore(deps-dev): bump @typescript-eslint/parser from 5.45.0 to 5.45.1 #419
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #418
  • Axios cache interceptor v1 roadmap #368
  • chore(deps-dev): bump eslint from 8.28.0 to 8.29.0 #417
  • chore(deps-dev): bump ts-loader from 9.4.1 to 9.4.2 #416
  • chore(deps-dev): bump @typescript-eslint/parser from 5.44.0 to 5.45.0 #414
  • chore(deps-dev): bump prettier from 2.7.1 to 2.8.0 #411
  • chore(deps-dev): bump prettier-plugin-organize-imports #413
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #408
  • chore(deps-dev): bump @typescript-eslint/parser from 5.42.1 to 5.44.0 #409
  • chore(deps-dev): bump eslint from 8.27.0 to 8.28.0 #407
  • chore(deps-dev): bump webpack-cli from 4.10.0 to 5.0.0 #406
  • chore(deps-dev): bump typescript from 4.8.4 to 4.9.3 #404
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #400
  • chore(deps-dev): bump prettier-plugin-organize-imports #399
  • chore(deps-dev): bump webpack from 5.74.0 to 5.75.0 #398
  • chore(deps-dev): bump jest-environment-jsdom from 29.3.0 to 29.3.1 #396
  • chore(deps-dev): bump eslint from 8.26.0 to 8.27.0 #395
  • chore(deps-dev): bump @typescript-eslint/parser from 5.42.0 to 5.42.1 #393
  • chore(deps-dev): bump jest-environment-jsdom from 29.2.2 to 29.3.0 #394
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #392
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #391
  • chore(deps-dev): bump tslib from 2.4.0 to 2.4.1 #390
  • chore(deps-dev): bump @typescript-eslint/parser from 5.41.0 to 5.42.0 #389
  • chore(deps-dev): bump @typescript-eslint/parser from 5.40.1 to 5.41.0 #387
  • chore(deps-dev): bump jest-environment-jsdom from 29.2.1 to 29.2.2 #388
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #386
  • chore(deps-dev): bump eslint from 8.25.0 to 8.26.0 #385
  • chore(deps-dev): bump jest-environment-jsdom from 29.2.0 to 29.2.1 #384
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #381
  • chore(deps-dev): bump @typescript-eslint/parser from 5.40.0 to 5.40.1 #382
  • chore(deps-dev): bump jest-environment-jsdom from 29.1.2 to 29.2.0 #379
  • chore(deps-dev): bump @typescript-eslint/parser from 5.39.0 to 5.40.0 #375
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #376
  • chore(deps-dev): bump express from 4.18.1 to 4.18.2 in /docs #373
  • chore(deps-dev): bump eslint from 8.24.0 to 8.25.0 #372
  • chore(deps-dev): bump @typescript-eslint/parser from 5.38.1 to 5.39.0 #364
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #363
  • chore(deps-dev): bump jest-environment-jsdom from 29.1.1 to 29.1.2 #362
  • chore(deps-dev): bump jest-environment-jsdom from 29.0.3 to 29.1.1 #360
  • chore(deps-dev): bump typescript from 4.8.3 to 4.8.4 #361
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #359
  • chore(deps-dev): bump @typescript-eslint/parser from 5.38.0 to 5.38.1 #358
  • chore(deps): bump ahmadnassri/action-dependabot-auto-merge #356
  • chore(deps-dev): bump eslint from 8.23.1 to 8.24.0 #357
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #351
  • chore(deps-dev): bump @typescript-eslint/parser from 5.37.0 to 5.38.0 #352
  • chore(deps-dev): bump ts-loader from 9.3.1 to 9.4.1 #355
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #350
  • chore(deps-dev): bump @typescript-eslint/parser from 5.36.2 to 5.37.0 #349
  • chore(deps-dev): bump jest-environment-jsdom from 29.0.2 to 29.0.3 #348
  • chore(deps-dev): bump eslint from 8.23.0 to 8.23.1 #347
  • chore(deps-dev): bump es-check from 7.0.0 to 7.0.1 #346
  • chore(deps-dev): bump typescript from 4.8.2 to 4.8.3 #345
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #343
  • chore(deps-dev): bump @typescript-eslint/parser from 5.36.1 to 5.36.2 #342
  • chore(deps-dev): bump jest-environment-jsdom from 29.0.1 to 29.0.2 #340
  • chore(deps-dev): bump prettier-plugin-organize-imports #341
  • chore(deps-dev): bump @typescript-eslint/parser from 5.36.0 to 5.36.1 #338
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #339
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #336
  • chore(deps-dev): bump @typescript-eslint/parser from 5.35.1 to 5.36.0 #337
  • chore(deps-dev): bump eslint from 8.22.0 to 8.23.0 #334
  • chore(deps-dev): bump jest-environment-jsdom from 29.0.0 to 29.0.1 #335
  • chore(deps-dev): bump jest-environment-jsdom from 28.1.3 to 29.0.0 #332
  • chore(deps-dev): bump typescript from 4.7.4 to 4.8.2 #333
  • chore(deps-dev): bump @typescript-eslint/parser from 5.34.0 to 5.35.1 #331
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #330
  • chore(deps-dev): bump @typescript-eslint/parser from 5.33.1 to 5.34.0 #328
  • chore(deps-dev): bump prettier-plugin-organize-imports #324
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #320
  • chore(deps-dev): bump @typescript-eslint/parser from 5.33.0 to 5.33.1 #322
  • chore(deps-dev): bump @types/jest from 28.1.6 to 28.1.7 #321
  • chore(deps-dev): bump eslint from 8.21.0 to 8.22.0 #319
  • chore(deps-dev): bump ts-jest from 28.0.7 to 28.0.8 #318
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #315
  • chore(deps-dev): bump @typescript-eslint/parser from 5.32.0 to 5.33.0 #316
  • chore(deps-dev): bump prettier-plugin-organize-imports #313
  • chore(deps-dev): bump prettier-plugin-organize-imports from 3.0.0 to 3.0.1 #310
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #312
  • chore(deps-dev): bump @typescript-eslint/parser from 5.31.0 to 5.32.0 #311
  • chore(deps-dev): bump eslint from 8.20.0 to 8.21.0 #309

Commits

  • chore: automerge dependabot prs 9c90644
  • chore: avoid github activity 0e97446
  • chore: axios as a peer dependency 9683de5
  • chore: docs versioning nav 13529b9
  • chore: fixed dependabot automerge 1c024f4
  • chore: re-added dev web bundle 9780d13
  • docs: improved features 79ac027
  • docs: spelling db41b7c
  • docs: update navbar again b6b9fc9
  • docs: updated version 232bb7d
  • docs: version selector b4ab156
  • feat: add ecompatible node version to engines 5562819
  • feat: cache takeover #437 7d82c5a
  • feat: MIT copyright notice on bundle f842c36
  • fix: action to deploy docs 64222ec
  • fix: correct skypack download url c7b6604
  • fix: docs versioning 09a0082
  • fix: removed check for non existent file 04d95f4
  • fix: types not available on esm packaging #430 00fdff0
  • refactor: dependencies, lint and null assertions 67819a3
  • tag: v1.0.0 d39cb29
  • test: added #317 test 491fb01

v0.10.7 - 2022-07-29

Merged

  • feat: cache updater function for multiple keys. #304
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #307
  • chore(deps-dev): bump @typescript-eslint/parser from 5.30.7 to 5.31.0 #306
  • chore(deps-dev): bump webpack from 5.73.0 to 5.74.0 #305
  • chore(deps): bump terser from 5.12.1 to 5.14.2 #302
  • chore(deps-dev): bump es-check from 6.2.1 to 7.0.0 #303
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #300
  • chore(deps-dev): bump @typescript-eslint/parser from 5.30.6 to 5.30.7 #301
  • chore(deps-dev): bump @types/jest from 28.1.5 to 28.1.6 #298
  • chore(deps-dev): bump eslint from 8.19.0 to 8.20.0 #297
  • chore(deps-dev): bump ts-jest from 28.0.5 to 28.0.7 #299
  • chore(deps-dev): bump jest-environment-jsdom from 28.1.2 to 28.1.3 #295
  • chore(deps-dev): bump jest from 28.1.2 to 28.1.3 #294
  • chore(deps-dev): bump @types/jest from 28.1.4 to 28.1.5 #293
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #292
  • chore(deps-dev): bump @typescript-eslint/parser from 5.30.5 to 5.30.6 #291
  • chore(deps-dev): bump @typescript-eslint/parser from 5.30.4 to 5.30.5 #289
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #290
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #288
  • chore(deps-dev): bump eslint from 8.18.0 to 8.19.0 #287
  • chore(deps-dev): bump @typescript-eslint/parser from 5.30.0 to 5.30.4 #286
  • chore(deps-dev): bump @types/jest from 28.1.3 to 28.1.4 #285
  • chore(deps-dev): bump eslint-plugin-prettier from 4.1.0 to 4.2.1 #284

Commits

v0.10.6 - 2022-06-29

Merged

  • fix: cache update not being executed correctly #283
  • chore(deps-dev): bump @typescript-eslint/parser from 5.29.0 to 5.30.0 #282
  • chore(deps-dev): bump eslint-plugin-prettier from 4.0.0 to 4.1.0 #280
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #281
  • chore(deps-dev): bump ts-loader from 9.3.0 to 9.3.1 #278
  • chore(deps-dev): bump @types/jest from 28.1.2 to 28.1.3 #276
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #275
  • chore(deps-dev): bump @typescript-eslint/parser from 5.28.0 to 5.29.0 #274
  • chore(deps-dev): bump eslint from 8.17.0 to 8.18.0 #271
  • chore(deps-dev): bump typescript from 4.7.3 to 4.7.4 #272
  • chore(deps-dev): bump @types/jest from 28.1.1 to 28.1.2 #273
  • chore(deps-dev): bump prettier-plugin-organize-imports #270
  • chore(deps-dev): bump prettier from 2.7.0 to 2.7.1 #269
  • chore(deps-dev): bump @typescript-eslint/parser from 5.27.1 to 5.28.0 #266
  • chore(deps-dev): bump ts-jest from 28.0.4 to 28.0.5 #265
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #268
  • chore(deps-dev): bump prettier from 2.6.2 to 2.7.0 #267
  • chore(deps-dev): bump webpack-cli from 4.9.2 to 4.10.0 #264

Commits

v0.10.5 - 2022-06-11

Merged

  • chore(deps-dev): bump jest-environment-jsdom from 28.1.0 to 28.1.1 #261
  • chore(deps-dev): bump @typescript-eslint/parser from 5.27.0 to 5.27.1 #263
  • chore(deps-dev): bump jest from 28.1.0 to 28.1.1 #260
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #262
  • chore(deps-dev): bump @types/jest from 28.1.0 to 28.1.1 #257
  • chore(deps-dev): bump typescript from 4.7.2 to 4.7.3 #258
  • chore(deps-dev): bump eslint from 8.16.0 to 8.17.0 #259

Commits

  • chore: fixed debug configuration 33398ce
  • chore: updated sponsors e8cb692
  • docs: improved override docs dfe1595
  • docs: typos 67bad37
  • docs: updated version 8c94ef9
  • feat: better override documentation 338c9a6
  • feat: override cache option 268fccb
  • feat: remove remnant x-axios-headers from server response d87307a
  • tag: v0.10.5 30617dd

v0.10.4 - 2022-06-03

Merged

  • chore(deps-dev): bump webpack from 5.72.1 to 5.73.0 #255
  • chore(deps-dev): bump ts-jest from 28.0.3 to 28.0.4 #254
  • chore(deps-dev): bump @types/jest from 27.5.1 to 28.1.0 #252
  • fix: Interpret max-age=0 as a valid cache-control header #253
  • chore(deps-dev): bump @typescript-eslint/parser from 5.26.0 to 5.27.0 #250
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #251
  • chore(deps-dev): bump typescript from 4.6.4 to 4.7.2 #249
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #246
  • chore(deps-dev): bump ts-jest from 28.0.2 to 28.0.3 #247
  • chore(deps-dev): bump @typescript-eslint/parser from 5.25.0 to 5.26.0 #248
  • chore(deps-dev): bump eslint from 8.15.0 to 8.16.0 #245
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #243
  • chore(deps-dev): bump @typescript-eslint/parser from 5.23.0 to 5.25.0 #242
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #241
  • chore(deps-dev): bump @types/jest from 27.5.0 to 27.5.1 #238
  • chore(deps-dev): bump ts-jest from 28.0.1 to 28.0.2 #234
  • chore(deps-dev): bump webpack from 5.72.0 to 5.72.1 #237
  • chore(deps-dev): bump @typescript-eslint/parser from 5.22.0 to 5.23.0 #235
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #236
  • chore(deps-dev): bump @typescript-eslint/parser from 5.21.0 to 5.22.0 #231
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #230
  • chore(deps-dev): bump @types/jest from 27.4.1 to 27.5.0 #232

Commits

  • chore(deps): update jest to 28 f4f4be1
  • deps: updated object-code 6b1a1c5
  • deps: updated object-code 77adcaf
  • docs: fixed variable name (#239) e97a515
  • docs: help this repo grow 2fc2c17
  • docs: improved documentation 6bcd7dc
  • docs: updated version 5cb76aa
  • fix: removed symbol to preserve sideEffect free status (#233) b6302ef
  • refactor: updated some minor things 623ae22
  • tag: v0.10.4 d00bdc8

v0.10.3 - 2022-05-02

Merged

  • chore(deps-dev): bump ts-loader from 9.2.9 to 9.3.0 #228
  • chore(deps-dev): bump express from 4.18.0 to 4.18.1 in /docs #229
  • feat: updated axios to 0.27 #227
  • Pass currentRequest on each access to storages (#220) #226
  • chore(deps-dev): bump typescript from 4.6.3 to 4.6.4 #225
  • chore(deps-dev): bump ts-loader from 9.2.8 to 9.2.9 #222
  • chore(deps-dev): bump @typescript-eslint/parser from 5.20.0 to 5.21.0 #215
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #217
  • chore(deps-dev): bump express from 4.17.3 to 4.18.0 in /docs #218
  • chore(deps): bump github/codeql-action from 1 to 2 #214
  • chore(deps-dev): bump eslint from 8.13.0 to 8.14.0 #213
  • chore(deps-dev): bump tslib from 2.3.1 to 2.4.0 #212
  • chore(deps): bump async from 2.6.3 to 2.6.4 #211
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #209
  • chore(deps-dev): bump @typescript-eslint/parser from 5.19.0 to 5.20.0 #210
  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.36 to 0.3.38 #208
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #207
  • chore(deps-dev): bump @typescript-eslint/parser from 5.18.0 to 5.19.0 #206
  • chore(deps-dev): bump eslint from 8.12.0 to 8.13.0 #205
  • chore(deps-dev): bump webpack from 5.71.0 to 5.72.0 #204
  • chore(deps): bump codecov/codecov-action from 2.1.0 to 3 #203
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #202
  • chore(deps-dev): bump @typescript-eslint/parser from 5.17.0 to 5.18.0 #201
  • chore(deps-dev): bump prettier from 2.6.1 to 2.6.2 #197
  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.35 to 0.3.36 #199
  • chore(deps-dev): bump webpack from 5.70.0 to 5.71.0 #198
  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.34 to 0.3.35 #196
  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.33 to 0.3.34 #195
  • chore(deps): bump ansi-regex from 3.0.0 to 3.0.1 #194
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #192
  • chore(deps-dev): bump @typescript-eslint/parser from 5.16.0 to 5.17.0 #193
  • chore(deps-dev): bump eslint from 8.11.0 to 8.12.0 #191

Commits

v0.10.2 - 2022-03-25

Merged

  • chore(deps): bump minimist from 1.2.5 to 1.2.6 in /docs #190
  • chore(deps): bump minimist from 1.2.5 to 1.2.6 #189
  • chore(deps-dev): bump prettier from 2.6.0 to 2.6.1 #187
  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.31 to 0.3.33 #185
  • chore(deps-dev): bump ts-jest from 27.1.3 to 27.1.4 #186
  • chore(deps-dev): bump typescript from 4.6.2 to 4.6.3 #188
  • chore(deps-dev): bump @typescript-eslint/parser from 5.15.0 to 5.16.0 #183
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #184
  • chore(deps): bump object-code from 1.2.0 to 1.2.2 #182
  • chore(deps): bump fast-defer from 1.1.5 to 1.1.7 #181
  • chore(deps): bump cache-parser from 1.2.2 to 1.2.4 #180
  • chore(deps-dev): bump prettier from 2.5.1 to 2.6.0 #178
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #175
  • chore(deps-dev): bump @typescript-eslint/parser from 5.14.0 to 5.15.0 #176

Commits

  • chore: fixed escheck script 4e93728
  • deps: updated all deps 1b50018
  • docs: added runkit comment f25bff6
  • docs: updated download urls b98f4b0
  • fix: fixed bug when a pending request had it cached empty (#165) 0a00778
  • style: formatted code b44c6b3
  • tag: v0.10.2 2fe8129

v0.10.1 - 2022-03-14

Commits

v0.10.0 - 2022-03-14

Merged

  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.30 to 0.3.31 #171
  • chore(deps-dev): bump eslint from 8.10.0 to 8.11.0 #170
  • chore(deps-dev): bump docsify-cli from 4.4.3 to 4.4.4 in /docs #172
  • feat!: new bundle setup & fixed development bundles #167
  • fix: memory storage copy data to avoid reference changes #164
  • chore(deps-dev): bump ts-loader from 9.2.7 to 9.2.8 #168
  • chore(deps-dev): bump axios from 0.26.0 to 0.26.1 #166

Commits

  • chore: brave rewards f140b02
  • chore: fixed unknown build bug 😃 cb8eb37
  • chore: updated yarn.lock bb88a8b
  • ci: dependabot for docs folder e7922bd
  • deps: updated typescript eslint ae58690
  • docs: updated benchmark and fixed some typos 08d7ab4
  • docs: updated download urls e2f2428
  • docs: updated many things in the documentation 766c6de
  • feat!: updated default caching options 119fa32
  • perf: optimized build config 3a800d7
  • refactor: clone data only when needed 09a69f8
  • style: formatted code 6fd42b2
  • style: formatted code 58d3859
  • tag: v0.10.0 e2fb91b
  • tag: v0.9.3 41d9fe1
  • tests: fixed memory storage clone test a0e05e8

v0.9.3 - 2022-03-04

Merged

  • chore(deps-dev): bump webpack from 5.69.1 to 5.70.0 #162
  • chore(deps-dev): bump eslint-config-prettier from 8.4.0 to 8.5.0 #160
  • chore(deps): bump actions/checkout from 2 to 3 #158
  • chore(deps-dev): bump ts-loader from 9.2.6 to 9.2.7 #159
  • chore(deps-dev): bump typescript from 4.5.5 to 4.6.2 #157

Commits

  • chore: add funding.yml 2429ae2
  • chore: cache parser dependency range a71f9aa
  • docs: updated code comment 80850b9
  • docs: updated download urls 06091a2
  • fix: defaultKeyGenerator keeps response unchanged (#161) ab45164
  • tag: v0.9.3 9993af2

v0.9.2 - 2022-02-28

Merged

  • chore(deps-dev): bump eslint from 8.9.0 to 8.10.0 #156
  • chore(deps): bump prismjs from 1.26.0 to 1.27.0 in /docs #155
  • chore(deps): bump actions/setup-node from 2 to 3 #154

Commits

v0.9.1 - 2022-02-23

Merged

  • feat: support for react-native cli #153
  • chore(deps-dev): bump @types/jest from 27.4.0 to 27.4.1 #152
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #150
  • chore(deps-dev): bump @typescript-eslint/parser from 5.12.0 to 5.12.1 #151

Commits

v0.9.0 - 2022-02-21

Merged

  • feat: handle web storage DOMExceptions #148
  • chore(deps-dev): bump eslint-config-prettier from 8.3.0 to 8.4.0 #149
  • chore(deps-dev): bump webpack from 5.69.0 to 5.69.1 #147

Commits

v0.8.10 - 2022-02-16

Merged

  • chore(deps-dev): bump webpack from 5.68.0 to 5.69.0 #146

Commits

v0.8.9 - 2022-02-14

Merged

  • chore(deps-dev): bump eslint from 8.8.0 to 8.9.0 #142
  • chore(deps-dev): bump jest from 27.5.0 to 27.5.1 #140

Commits

v0.8.8 - 2022-02-08

Commits

v0.8.7 - 2022-02-08

Commits

v0.8.6 - 2022-02-08

Merged

  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #138
  • chore(deps-dev): bump jest from 27.4.7 to 27.5.0 #136
  • chore(deps-dev): bump @typescript-eslint/parser from 5.10.1 to 5.10.2 #132
  • chore(deps-dev): bump webpack from 5.67.0 to 5.68.0 #133
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #134
  • chore(deps-dev): bump eslint from 8.7.0 to 8.8.0 #131
  • chore(deps-dev): bump es-check from 6.1.1 to 6.2.1 #130
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #126
  • chore(deps-dev): bump webpack-cli from 4.9.1 to 4.9.2 #127
  • chore(deps-dev): bump @typescript-eslint/parser from 5.10.0 to 5.10.1 #125

Commits

v0.8.5 - 2022-01-23

Merged

  • docs: add license scan report and status #124
  • chore(deps-dev): bump typescript from 4.5.4 to 4.5.5 #123

Commits

  • build: build everything from webpack f160428
  • build: minimize all bundles bc devtool is active 2d779ec
  • chore: switch back to yarn v1 7d314c2
  • docs: added react component example df74939
  • docs: added tsx syntax highlight 706c4dd
  • docs: removed coverpage bdbdd37
  • docs: simple analytics 😦 cb59384
  • docs: updated docs 95f4137
  • docs: updated documentation e9fc692
  • docs: updated download urls 026465c
  • docs: updated fossa badges 9b9ae3a
  • docs: updated homepage 7ccac42
  • docs: updated homepage 989ceec
  • docs: updated installing page b76087e
  • docs: updated sidebar and added dev mode section cc6523f
  • feat: debug mode & fixed tests 0ba6025
  • fixed jsx highlighting 64c0f40
  • refactor: added ACI prefix to avoid external conflicts ea4ab4c
  • refactor: added debug points 098cf47
  • refactor: added memory storage type 7dc15be
  • refactor: moved header file d14750e
  • refactor: prefer the usage of AxiosResponseHeaders bd4bf26
  • style: format code 31ef7e7
  • tag: v0.8.5 f09670d

v0.8.4 - 2022-01-18

Commits

  • chore: fix yarn.lock (yarnpkg/berry#3416) 9922650
  • chore: sideEffects: false and updated badges b555f95
  • deps: updated axios to v0.25 66f29c9
  • deps: updated eslint dependencies 2540c1e
  • docs: added staleIfError documentation 93dda05
  • docs: added table header 8273399
  • docs: updated documentation 668ce0c
  • docs: updated download urls c5629be
  • docs: updated rukit example 0aed72f
  • feat: add staleIfError support edb32bd
  • fix: removed breaking behaviour 7217eaf
  • refactor: use Object.freeze at Header enum 0e2508c
  • style: format code 1e8ca38
  • tag: v0.8.4 e356386

v0.8.3 - 2022-01-15

Commits

  • build: optimize umd builds with tslib 6d9683a
  • deps: updated cache-parser and jest 16184ac
  • docs: updated download urls d51c622
  • refactor: Header as const and renaming… e391f56
  • tag: v0.8.3 429256d

v0.8.2 - 2022-01-14

Commits

  • build: add umd/index.js for es2017+ 7f3a153
  • build: remove .min at umd bundles 5a7e015
  • chore: add source in the bundle 4c9c185
  • docs: updated docs a981cf2
  • docs: updated download urls 1ccfad3
  • docs: updated keyGenerator info 3c8b373
  • docs: updated umd filesizes ad51c23
  • feat: buildKeyGenerator and ids with req.data by default 9379fce
  • fix: include data at keyGenerator (#116) 6f9ef36
  • perf: only execute one generateKey per request fa2c6e3
  • tag: v0.8.2 650d094

v0.8.1 - 2022-01-13

Merged

  • build: Yarn v2 and ESM & CJS bundles #114
  • chore(deps): bump follow-redirects from 1.14.6 to 1.14.7 #113
  • chore(deps-dev): bump webpack from 5.65.0 to 5.66.0 #112

Commits

  • chore: eslint no-explicit-any 93df4fd
  • deps: fixed colors (marak/colors.js#285) 8243da5
  • deps: updated typescript-eslint monorepo 829b1a7
  • docs: fixed casing c76f2b7
  • docs: updated download urls ab53ac1
  • feat: cache predicate now supports async functions 88d45cc
  • fix: await unawaited promises and eslint more severe ff73ad5
  • fix: removed deprecated code e11e346
  • refactor: prefer unknown instead of any d0b0e2f
  • refactor: removed return await c3661a6
  • refactor: simplified cachePredicate 38a5ecd
  • refactor: used triple equal sign 1b93070
  • tag: v0.8.1 f928cfa
  • test: static roots to prevent other tests from running 57ee1e0

v0.8.0 - 2022-01-08

Commits

  • build: disabled downLevelIteration d30b862
  • deps: updated yarn.lock 2de68f3
  • docs: added SECURITY.md a6313ea
  • docs: fixed baseURL casing in examples & documentation 85336da
  • docs: updated download urls 75ec6fd
  • fix: code scanning alert 733a476
  • refactor: removed “abstract” buildInterceptor function f30e262
  • refactor: removed classes to decrease bundle size cd2f14c
  • refactor!: removed isAxiosCacheInterceptor function 37431a9
  • tag: v0.8.0 46a4ee5
  • tests: fixed coverage by enabling sourceMaps again 17408aa
  • tests: splited header interpreter tests into multiple files 4f938a4

v0.8.0-beta1 - 2022-01-07

Merged

  • docs: documentation at axios-cache-interceptor.js.org #108
  • chore(deps-dev): bump jest from 27.4.6 to 27.4.7 #107
  • chore(deps-dev): bump jest from 27.4.5 to 27.4.6 #105
  • chore(deps-dev): bump @types/node from 17.0.7 to 17.0.8 #106
  • chore(deps-dev): bump @types/jest from 27.0.3 to 27.4.0 #98

Commits

  • chore: bundles exports everything and webpack bundles everything ed1e163
  • chore: fixed default tsconfig.json 96e2d80
  • chore: fixed runkit import 4c58316
  • docs: added blazing fast badge 225658f
  • docs: added bundlephobia link 7c19739
  • docs: added docs mention at runkit example bf486ac
  • docs: added info about global axios usage 53c4d41
  • docs: added interactive examples 7207542
  • docs: added og preview 636ebb3
  • docs: added url-imports example e34bfdd
  • docs: added usage and examples page 06d9979
  • docs: fixed cache.update example 766b016
  • docs: fixed development cdn link 3daf7be
  • docs: fixed examples and added cache: false example 16600b0
  • docs: fixed source links c5de326
  • docs: fixed sw.js location b11d51d
  • docs: fixed tsdocs and added storages section 4c1e0ec
  • docs: offline support for an axios library does not make sense 6353b48
  • docs: pwa config f810365
  • docs: trying to fix runkit cors bcc1f47
  • docs: updated readme 1f9ddb4
  • examples: updated runkit example 4cfa8d0
  • feat: added isAxiosCacheInterceptor function c32c452
  • feat: allow ttl to be defined based on the response 1e87549
  • feat: suupport for async CacheUpdater cfbd601
  • fix: include default storages in cjs bundle 8d5a90e
  • fix: proper generic usage to type deep properties ce2f597
  • merge: merge yarn.lock b66ee1e
  • merge: package.json and yarn.lock 9e3c0f0
  • refactor: added data property in memory storages 500ac71
  • refactor: allow storages not return promises 567c1b2
  • refactor: extracted static functions to a single file c57916f
  • refactor: modified and simplified storages bafe1de
  • refactor: prefer unknown over any and removed find method from storages 79ce192
  • refactor: simplified defaultKeyGenerator function c155982
  • refactor: simplified header interpreter e776f01
  • style: prettified code 3c38985
  • tag: v0.8.0-beta1 db26ec6
  • tests: 100% coverage again a7751fd

v0.7.9 - 2021-12-30

Merged

  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #97

Commits

  • deps: updated fast-defer c6bec60
  • docs: fixed badges links 37a37b7
  • docs: updated docs ec523e8
  • feat: added many build options 232e9c5
  • fix: verify built ecmascript versions with es-check 58b6b12
  • refactor: prevent confusion by renaming createCache to useCache 4a0a99f
  • tag: v0.7.9 2e91a8f
  • test: added index.development tests 1e251dd

v0.7.8 - 2021-12-27

Commits

  • chore: fixed prettier config 144d3ae
  • deps: removed unused dependency 1b1b93b
  • docs: updated badges 5e04e5c
  • perf: minified code bundled as ES6 because axios itself needs ES6 8cad803
  • style: formatted code 27de629
  • tag: v0.7.8 cd0c189

v0.7.7 - 2021-12-27

Merged

  • chore(deps-dev): bump @types/node from 17.0.4 to 17.0.5 #94

Commits

  • refactor: deprecated useCache in favor of createCache (#95) 065b6ef
  • tag: v0.7.7 c611b42
  • test: added one simple test fec63a8

v0.7.6 - 2021-12-26

Merged

  • chore(deps-dev): bump @types/node from 17.0.3 to 17.0.4 #92
  • chore(deps-dev): bump @types/node from 17.0.2 to 17.0.3 #91
  • chore(deps-dev): bump @typescript-eslint/parser from 5.7.0 to 5.8.0 #88
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #89
  • chore(deps-dev): bump @types/node from 17.0.1 to 17.0.2 #90
  • chore(deps-dev): bump @types/node from 17.0.0 to 17.0.1 #85
  • chore(deps-dev): bump concurrently from 6.4.0 to 6.5.1 #86
  • chore(deps-dev): bump eslint from 8.4.1 to 8.5.0 #87
  • chore(deps-dev): bump ts-jest from 27.1.1 to 27.1.2 #84
  • chore(deps-dev): bump @types/node from 16.11.13 to 17.0.0 #83
  • chore(deps-dev): bump @babel/preset-env from 7.16.4 to 7.16.5 #78
  • chore(deps-dev): bump @babel/runtime from 7.16.3 to 7.16.5 #75
  • chore(deps-dev): bump @babel/preset-typescript from 7.16.0 to 7.16.5 #76
  • chore(deps-dev): bump @babel/plugin-transform-runtime #77
  • chore(deps-dev): bump @babel/plugin-transform-modules-commonjs #79

Commits

  • chore: include runkit examples 4fc6825
  • deps: updated cache-parser 9a2e4bc
  • deps: updated some dependencies 0640141
  • perf: reduce bundle size and replaced babel by ts-loader 6e25ba6
  • tag: v0.7.6 d6b2aff

v0.7.5 - 2021-12-13

Commits

v0.7.4 - 2021-12-13

Commits

v0.7.3 - 2021-12-13

Commits

  • chore: defined package.json browser field 3b40abd
  • deps: updated some dependencies 86a576d
  • deps: use cache-parser 6ce658b
  • refactor: better cache predicate function a77cde7
  • tag: v0.7.3 47beacc

v0.7.2 - 2021-12-11

Commits

  • chore: fixed typescript build ef94c70
  • chore: minor config changes d00b607
  • chore: use default webpack-terser-plugin 2d157c8
  • deps: updated dev dependencies b8623b6
  • refactor: externalized createCacheData function c3a0fea
  • refactor: made some methods static and public b4ad24d
  • style: fixed prettier plugin order 6929b02
  • tag: v0.7.2 795d706

v0.7.1 - 2021-12-09

Commits

v0.7.0 - 2021-12-09

Commits

  • chore: CacheOptions at the top of the file 1615f28
  • chore: correct babel filename 5d77ef1
  • chore: don’t transpile node_modules 05aadff
  • chore: good times 😃 1a5fdf9
  • chore: removed babel runtime usage d2a6fed
  • chore: transpile @tusbar/cache-control and correct babel config 32afef4
  • chore: use default browserslist config e9aeacc
  • chore!: use google browserlist config 1fc3552
  • deps: added missing explicit dependency 4fa9bc9
  • docs: updated badges 3ebe9e5
  • docs: updated readme badges f7f9033
  • refactor: bundle does not export everything that index has 488cd49
  • style: formatted code 964f7b0
  • tag: v0.7.0 39777cc
  • tag: v0.7.0 9d0f429

v0.7.0-beta3 - 2021-12-08

Commits

v0.7.0-beta2 - 2021-12-08

Commits

  • fix: fixed package.json bundle index name ae77e6a
  • tag: v0.7.0-beta2 5884d38

v0.7.0-beta1 - 2021-12-08

Merged

  • chore(deps-dev): bump @typescript-eslint/parser from 5.5.0 to 5.6.0 #69
  • chore(deps-dev): bump eslint from 8.4.0 to 8.4.1 #70
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #71
  • chore(deps-dev): bump @types/node from 16.11.11 to 16.11.12 #72
  • chore(deps-dev): bump eslint from 8.3.0 to 8.4.0 #66
  • chore(deps-dev): bump prettier from 2.5.0 to 2.5.1 #68
  • chore(deps-dev): bump ts-jest from 27.0.7 to 27.1.0 #67

Commits

  • deps: updated ts-jest 704be77
  • feat: added web bundle and babel 78cf406
  • feat!: removed createCache function 60ad91e
  • fix: fixed tests b9b4f79
  • perf: removed tslib and typed-core in favor of fast-defer 07ec645
  • tag: v0.7.0-beta1 6a67d4c

v0.6.3 - 2021-12-02

Merged

  • chore(deps-dev): bump jest from 27.4.2 to 27.4.3 #65
  • chore(deps-dev): bump @types/node from 16.11.10 to 16.11.11 #61
  • chore(deps): bump @tusbar/cache-control from 0.6.0 to 0.6.1 #60
  • chore(deps-dev): bump @typescript-eslint/parser from 5.4.0 to 5.5.0 #62
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #63
  • chore(deps-dev): bump jest from 27.4.0 to 27.4.2 #64
  • chore(deps-dev): bump @types/node from 16.11.9 to 16.11.10 #58
  • chore(deps-dev): bump prettier from 2.4.1 to 2.5.0 #59

Commits

v0.6.2 - 2021-11-23

Commits

v0.6.1 - 2021-11-23

Merged

  • chore(deps-dev): bump @types/node from 16.11.8 to 16.11.9 #57
  • chore(deps-dev): bump @types/jest from 27.0.2 to 27.0.3 #56
  • chore(deps-dev): bump @types/node from 16.11.7 to 16.11.8 #55
  • chore(deps-dev): bump typescript from 4.4.4 to 4.5.2 #54

Commits

  • build: emit declaration in dist folder e2de928
  • docs: removed readme duplicated title 1e1627b
  • tag: v0.6.1 097a179

v0.6.0 - 2021-11-15

Merged

  • feat: etag and if-modified-since support #53
  • feat: storage abstractions #52
  • feat: more headers supports, tests and must-revalidate fix #51
  • chore(deps-dev): bump @types/node from 16.11.6 to 16.11.7 #48
  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.24 to 0.3.30 #47

Commits

  • feat: immutable cache support 76a8af7
  • fix: compile to ES2020, instead of ES2021 5970483
  • style: prettier and changelog config changes 19d0e9b
  • tag: v0.6.0 bd98a16

v0.5.1 - 2021-11-05

Commits

v0.5.0 - 2021-10-28

Merged

  • chore(deps-dev): bump @types/node from 16.11.4 to 16.11.6 #46

Commits

v0.4.1 - 2021-10-25

Merged

  • chore(deps-dev): bump @types/node from 16.11.3 to 16.11.4 #44
  • chore(deps-dev): bump @types/node from 16.11.1 to 16.11.3 #43
  • chore(deps-dev): bump jest from 27.2.5 to 27.3.1 #42
  • chore(deps-dev): bump ts-jest from 27.0.6 to 27.0.7 #40
  • chore(deps-dev): bump @types/node from 16.11.0 to 16.11.1 #39
  • chore(deps-dev): bump @types/node from 16.10.9 to 16.11.0 #37
  • chore(deps-dev): bump ts-jest from 27.0.5 to 27.0.6 #38
  • chore(deps-dev): bump @types/node from 16.10.3 to 16.10.9 #36
  • chore(deps-dev): bump typescript from 4.4.3 to 4.4.4 #34

Commits

  • build: emit consistent javascript bundles with ES2021 cc23204
  • build: separate code and types build folder ede19c1
  • deps: latest @arthurfiorette/prettier-config b2ba65e
  • fix: fixed isCacheValid function and added tests 6e6100b
  • refactor: externalized cache eviction predicate f141b2e
  • tag: v0.4.1 28e3392
  • tag: v0.4.1 6ec1b57

v0.4.0 - 2021-10-12

Merged

  • chore(deps-dev): bump jest from 27.2.4 to 27.2.5 #33

Commits

  • docs: correct suported axios version 6b790af
  • docs: updated documentation 9b9827c
  • docs: updated minimal example dd1fa41
  • docs: updated readme 4c757d3
  • docs: updated readme 861567a
  • feat: preserve response status codes and use response.cached 75deccf
  • feat!: updated axios to v0.22.0 1713bb0
  • fix: generic spaghetti that axios brought 12a5032
  • fix: response and request types 891f1d0
  • merge: yarn.lock 03c4fba
  • refactor: cacheUpdater as generic function 2fa2557
  • refactor: eslint more strict 0605ad8
  • refactor: more type and naming refactors b42d3f1
  • style: indented tsconfig comments 65cec04
  • style: prettified code 3ed92c8
  • tag: v0.4.0 87880cf
  • tests: correct test name 49f80d7

v0.3.0 - 2021-10-09

Merged

  • chore(deps-dev): bump @types/node from 16.10.2 to 16.10.3 #32
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #30
  • chore(deps-dev): bump @typescript-eslint/parser from 4.32.0 to 4.33.0 #31

Commits

v0.2.8 - 2021-09-30

Merged

  • chore(deps-dev): bump jest from 27.2.3 to 27.2.4 #27
  • chore(deps-dev): bump @types/node from 16.10.1 to 16.10.2 #28
  • chore(deps-dev): bump jest from 27.2.2 to 27.2.3 #26
  • chore(deps-dev): bump @typescript-eslint/parser from 4.31.2 to 4.32.0 #25
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #24
  • chore(deps-dev): bump jest from 27.2.1 to 27.2.2 #23
  • chore(deps-dev): bump @types/node from 16.9.6 to 16.10.1 #22

Commits

v0.2.7 - 2021-09-26

Commits

  • chore: updated tsconfig 9ea72dc
  • fix: force import type to help compilation tools f8adcc4
  • refactor: removed double if 9d33ad6
  • refactor: renamed interceptor apply method c70bf3a
  • refactor: use for in instead of Object.entries 5b9847d
  • tag: v0.2.7 bc1aa19

v0.2.6 - 2021-09-26

Commits

  • ci: only run codeql when js files are changed b861277
  • refactor: use the same object for both properties 47349df
  • tag: v0.2.6 9c1f74f

v0.2.5 - 2021-09-23

Merged

  • chore(deps-dev): bump prettier-plugin-organize-imports #21
  • chore(deps): bump ansi-regex from 5.0.0 to 5.0.1 #20
  • chore(deps-dev): bump @types/node from 16.9.4 to 16.9.6 #19

Commits

v0.2.4 - 2021-09-21

Merged

  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #16
  • chore(deps-dev): bump @typescript-eslint/parser from 4.31.1 to 4.31.2 #18
  • chore(deps-dev): bump jest from 27.2.0 to 27.2.1 #17
  • chore(deps-dev): bump @types/jest from 27.0.1 to 27.0.2 #15

Commits

v0.2.3 - 2021-09-21

Commits

v0.2.2 - 2021-09-20

Commits

v0.2.1 - 2021-09-20

Commits

  • chore: prettify script with plugins c917f36
  • chore: push git tag on yarn version ec01751
  • chore: removed filename in launch.json eb868d4
  • refactor: concurreny fixes and refactored deferred 70e5c07
  • refactor: removed symbol support and more tests 5b6d14f
  • tag: v0.2.1 1099942

v0.2.0 - 2021-09-20

Merged

  • chore(deps-dev): bump @types/node from 16.9.2 to 16.9.4 #14
  • chore(deps-dev): bump @types/node from 16.9.1 to 16.9.2 #13
  • chore(deps-dev): bump prettier from 2.4.0 to 2.4.1 #12

Commits

  • chore: changelog generation 4363f65
  • feat: enable cache by creating or applying f4bbd8b
  • fix: a bunch of tests 6075a0a
  • fix: axios headers are lowercased 1f88779
  • fix: concurrent requests not beeing cached 1490bfc
  • refactor: interceptors in classes f1033a5
  • refactor: renamed status constants 6e61c0d
  • refactor: requests ids can also be symbol 38133a7
  • style: prettified code 45630e3
  • tag: v0.2.0 8228045
  • tag: v0.2.0 3ae95cf

v0.1.3 - 2021-09-15

Commits

v0.1.2 - 2021-09-15

Commits

  • fix: prevented bugs with the start of id being ::id c4a2dc3
  • tag: 0.1.2 0777874

v0.1.1 - 2021-09-15

Commits

v0.1.0 - 2021-09-15

Merged

  • chore(deps-dev): bump @typescript-eslint/parser from 4.31.0 to 4.31.1 #11
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #10

Commits

  • chore: removed unused methods from memory storage 5ddf9ed
  • chore: vscode tests debug b5c5905
  • ci: added main ci to lint and test code c48769a
  • ci: updated ci to support better caching 1c442ce
  • docs: changed # to h1 3f0e022
  • docs: fixed project name 🤣 6972069
  • docs: updated codecov badge token b45fd54
  • docs: updated readme d8afd8a
  • feat: interpreter also handles Expires header (and tests) 288c118
  • fix: fixed a log of bugs and added unit tests 2bbc9cb
  • refactor: init request and response tests 84dc522
  • refactor: more tests and fixes ee36bd5
  • refactor: ttl and createdAt instead of maxAge and storage takes care of staled entries be5ee1e
  • refactor: use generics on responseMatch 1c10b41
  • tag: v0.1.0 6d5bcf3
  • tests: added cache predicate tests bb552c8
  • tests: added deferred tests d09b3ad
  • tests: added key generator tests 7975c58

v0.0.6 - 2021-09-11

Commits

v0.0.5 - 2021-09-11

Merged

  • chore(deps-dev): bump prettier from 2.3.2 to 2.4.0 #9
  • chore(deps-dev): bump @types/node from 16.7.13 to 16.9.1 #8

Commits

  • chore: change built target to ESNext c1242ac
  • chore: updated eslint rules 4825739
  • dps: bump typescript@4.4.2 to typescript@4.4.3 b63e67b
  • feat: better cache predicate 892dab4
  • fix: define an empty waiting object at creation 2c49a49
  • refactor: axios.defaults.cache required 29d79d5
  • refactor: eslint more strict and some minor refactors d2c2a56
  • refactor: externalized the header interceptor ce2b7ec
  • refactor: moved all “utils” to one folder 211dd50
  • refactor: save all deferred to cache.waiting instead of in the storage ab051fc
  • Revert “tag: v0.0.6” aa0f90e
  • style: prettified code 6ae6d8f
  • tag: v0.0.4 96bc45d
  • tag: v0.0.5 (4 was already used) 99f69ce
  • tag: v0.0.6 80c4220

v0.0.4 - 2021-09-08

Merged

  • chore(deps-dev): bump axios from 0.21.1 to 0.21.4 #5
  • chore(deps-dev): bump @typescript-eslint/parser from 4.30.0 to 4.31.0 #4
  • chore(deps-dev): bump @types/node from 16.7.10 to 16.7.13 #6
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #3
  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.23 to 0.3.24 #1

Commits

  • chore: include eslint files on package 0e88571
  • docs: npm badge a43dfab
  • docs: updated author and readme 3465bc3
  • docs: updated readme 33f7385
  • style: use @arthurfiorette/prettier-config dc56085

v0.0.3 - 2021-09-01

Commits

v0.0.2 - 2021-09-01

Commits

v0.0.1 - 2021-09-01

Commits

',366)]))}const b=r(c,[["render",i]]);export{n as __pageData,b as default}; diff --git a/assets/others_changelog.md.DH3AxIPz.lean.js b/assets/others_changelog.md.DFW69MVv.lean.js similarity index 85% rename from assets/others_changelog.md.DH3AxIPz.lean.js rename to assets/others_changelog.md.DFW69MVv.lean.js index b45aaaf..1621baf 100644 --- a/assets/others_changelog.md.DH3AxIPz.lean.js +++ b/assets/others_changelog.md.DFW69MVv.lean.js @@ -1 +1 @@ -import{_ as r,c as t,o as a,ag as o}from"./chunks/framework.CnuuF8_c.js";const n=JSON.parse('{"title":"Changelog","description":"","frontmatter":{},"headers":[],"relativePath":"others/changelog.md","filePath":"others/changelog.md","lastUpdated":1755791588000}'),c={name:"others/changelog.md"};function i(h,e,l,d,f,p){return a(),t("div",null,e[0]||(e[0]=[o("",366)]))}const b=r(c,[["render",i]]);export{n as __pageData,b as default}; +import{_ as r,c as t,o as a,ag as o}from"./chunks/framework.CnuuF8_c.js";const n=JSON.parse('{"title":"Changelog","description":"","frontmatter":{},"headers":[],"relativePath":"others/changelog.md","filePath":"others/changelog.md","lastUpdated":1760451679000}'),c={name:"others/changelog.md"};function i(h,e,l,d,f,p){return a(),t("div",null,e[0]||(e[0]=[o("",366)]))}const b=r(c,[["render",i]]);export{n as __pageData,b as default}; diff --git a/assets/others_license.md._FyZBZ9K.js b/assets/others_license.md.Ceq08JKB.js similarity index 96% rename from assets/others_license.md._FyZBZ9K.js rename to assets/others_license.md.Ceq08JKB.js index fddff14..fde1912 100644 --- a/assets/others_license.md._FyZBZ9K.js +++ b/assets/others_license.md.Ceq08JKB.js @@ -1 +1 @@ -import{_ as o,c as i,o as s,j as e,a as n}from"./chunks/framework.CnuuF8_c.js";const R=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"others/license.md","filePath":"others/license.md","lastUpdated":1755791588000}'),a={name:"others/license.md"};function r(l,t,T,c,I,O){return s(),i("div",null,t[0]||(t[0]=[e("h3",{id:"mit-license",tabindex:"-1"},[n("MIT License "),e("a",{class:"header-anchor",href:"#mit-license","aria-label":'Permalink to "MIT License"'},"​")],-1),e("blockquote",null,[e("p",null,"Copyright © 2021-present Arthur Fiorette & Contributors")],-1),e("p",null,"Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:",-1),e("p",null,"The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.",-1),e("p",null,"THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.",-1)]))}const d=o(a,[["render",r]]);export{R as __pageData,d as default}; +import{_ as o,c as i,o as s,j as e,a as n}from"./chunks/framework.CnuuF8_c.js";const R=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"others/license.md","filePath":"others/license.md","lastUpdated":1760451679000}'),a={name:"others/license.md"};function r(l,t,T,c,I,O){return s(),i("div",null,t[0]||(t[0]=[e("h3",{id:"mit-license",tabindex:"-1"},[n("MIT License "),e("a",{class:"header-anchor",href:"#mit-license","aria-label":'Permalink to "MIT License"'},"​")],-1),e("blockquote",null,[e("p",null,"Copyright © 2021-present Arthur Fiorette & Contributors")],-1),e("p",null,"Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:",-1),e("p",null,"The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.",-1),e("p",null,"THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.",-1)]))}const d=o(a,[["render",r]]);export{R as __pageData,d as default}; diff --git a/assets/others_license.md._FyZBZ9K.lean.js b/assets/others_license.md.Ceq08JKB.lean.js similarity index 96% rename from assets/others_license.md._FyZBZ9K.lean.js rename to assets/others_license.md.Ceq08JKB.lean.js index fddff14..fde1912 100644 --- a/assets/others_license.md._FyZBZ9K.lean.js +++ b/assets/others_license.md.Ceq08JKB.lean.js @@ -1 +1 @@ -import{_ as o,c as i,o as s,j as e,a as n}from"./chunks/framework.CnuuF8_c.js";const R=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"others/license.md","filePath":"others/license.md","lastUpdated":1755791588000}'),a={name:"others/license.md"};function r(l,t,T,c,I,O){return s(),i("div",null,t[0]||(t[0]=[e("h3",{id:"mit-license",tabindex:"-1"},[n("MIT License "),e("a",{class:"header-anchor",href:"#mit-license","aria-label":'Permalink to "MIT License"'},"​")],-1),e("blockquote",null,[e("p",null,"Copyright © 2021-present Arthur Fiorette & Contributors")],-1),e("p",null,"Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:",-1),e("p",null,"The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.",-1),e("p",null,"THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.",-1)]))}const d=o(a,[["render",r]]);export{R as __pageData,d as default}; +import{_ as o,c as i,o as s,j as e,a as n}from"./chunks/framework.CnuuF8_c.js";const R=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"others/license.md","filePath":"others/license.md","lastUpdated":1760451679000}'),a={name:"others/license.md"};function r(l,t,T,c,I,O){return s(),i("div",null,t[0]||(t[0]=[e("h3",{id:"mit-license",tabindex:"-1"},[n("MIT License "),e("a",{class:"header-anchor",href:"#mit-license","aria-label":'Permalink to "MIT License"'},"​")],-1),e("blockquote",null,[e("p",null,"Copyright © 2021-present Arthur Fiorette & Contributors")],-1),e("p",null,"Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:",-1),e("p",null,"The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.",-1),e("p",null,"THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.",-1)]))}const d=o(a,[["render",r]]);export{R as __pageData,d as default}; diff --git a/assets/style.BaFQwPzd.css b/assets/style.DjhVb9s0.css similarity index 70% rename from assets/style.BaFQwPzd.css rename to assets/style.DjhVb9s0.css index cbf974e..dcd5503 100644 --- a/assets/style.BaFQwPzd.css +++ b/assets/style.DjhVb9s0.css @@ -1 +1 @@ -@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic.C5lxZ8CY.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek-ext.CqjqNYQ-.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek.BBVDIX6e.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-vietnamese.BjW4sHH5.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin-ext.4ZJIpNVo.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin.Di8DUHzh.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic-ext.r48I6akx.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic.By2_1cv3.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek-ext.1u6EdAuj.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek.DJ8dCoTZ.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-vietnamese.BSbpV94h.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin-ext.CN1xVJS-.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin.C2AdPX0b.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Punctuation SC;font-weight:400;src:local("PingFang SC Regular"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:500;src:local("PingFang SC Medium"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:600;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:700;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-purple-1: #6f42c1;--vp-c-purple-2: #7e4cc9;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-purple-1: #c8abfa;--vp-c-purple-2: #a879e6;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: #3c3c43;--vp-c-text-2: #67676c;--vp-c-text-3: #929295}.dark{--vp-c-text-1: #dfdfd6;--vp-c-text-2: #98989f;--vp-c-text-3: #6a6a71}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-note-1: var(--vp-c-brand-1);--vp-c-note-2: var(--vp-c-brand-2);--vp-c-note-3: var(--vp-c-brand-3);--vp-c-note-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-important-1: var(--vp-c-purple-1);--vp-c-important-2: var(--vp-c-purple-2);--vp-c-important-3: var(--vp-c-purple-3);--vp-c-important-soft: var(--vp-c-purple-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-c-caution-1: var(--vp-c-red-1);--vp-c-caution-2: var(--vp-c-red-2);--vp-c-caution-3: var(--vp-c-red-3);--vp-c-caution-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;font-optical-sizing:auto}:root:where(:lang(zh)){--vp-font-family-base: "Punctuation SC", "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}@media (min-width: 960px){:root{--vp-z-index-sidebar: 25}}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:lang(es),:lang(pt){--vp-code-copy-copied-text-content: "Copiado"}:lang(fa){--vp-code-copy-copied-text-content: "کپی شد"}:lang(ko){--vp-code-copy-copied-text-content: "복사됨"}:lang(ru){--vp-code-copy-copied-text-content: "Скопировано"}:lang(zh){--vp-code-copy-copied-text-content: "已复制"}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-note-border: transparent;--vp-custom-block-note-text: var(--vp-c-text-1);--vp-custom-block-note-bg: var(--vp-c-default-soft);--vp-custom-block-note-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-important-border: transparent;--vp-custom-block-important-text: var(--vp-c-text-1);--vp-custom-block-important-bg: var(--vp-c-important-soft);--vp-custom-block-important-code-bg: var(--vp-c-important-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-caution-border: transparent;--vp-custom-block-caution-text: var(--vp-c-text-1);--vp-custom-block-caution-bg: var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg: var(--vp-c-caution-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-default-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{overflow-x:auto}mjx-container>svg{display:inline-block;margin:auto}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3M15 12H3M17 18H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6M4 14l6-6 2-3M2 5h12M7 2h1M22 22l-5-10-5 10M14 18h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7M14 9h7M14 15h7M14 20h7'/%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2ZM18 9l-6 6M12 9l6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc h4{margin:24px 0 0;letter-spacing:-.01em;line-height:24px;font-size:18px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s;color:var(--vp-c-text-2)}.vp-doc blockquote>p{margin:0;font-size:16px;transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code,.vp-doc h4>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;-webkit-user-select:none;user-select:none;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(:is(.no-icon,svg a,:has(img,svg))):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(:is(.no-icon,svg a,:has(img,svg))):after{content:"";color:currentColor}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin:0 0 4px!important;text-align:center;letter-spacing:1px!important;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-4257b8b8]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-4257b8b8],.VPBackdrop.fade-leave-to[data-v-4257b8b8]{opacity:0}.VPBackdrop.fade-leave-active[data-v-4257b8b8]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-4257b8b8]{display:none}}.NotFound[data-v-462d141b]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-462d141b]{padding:96px 32px 168px}}.code[data-v-462d141b]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-462d141b]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-462d141b]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-462d141b]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-462d141b]{padding-top:20px}.link[data-v-462d141b]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-462d141b]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-784d6846]{position:relative;z-index:1}.nested[data-v-784d6846]{padding-right:16px;padding-left:16px}.outline-link[data-v-784d6846]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-784d6846]:hover,.outline-link.active[data-v-784d6846]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-784d6846]{padding-left:13px}.VPDocAsideOutline[data-v-d090cc38]{display:none}.VPDocAsideOutline.has-outline[data-v-d090cc38]{display:block}.content[data-v-d090cc38]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-d090cc38]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-d090cc38]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-954e674c]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-954e674c]{flex-grow:1}.VPDocAside[data-v-954e674c] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-954e674c] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-954e674c] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-0e1c880e]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-0e1c880e]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-854d1e56]{margin-top:64px}.edit-info[data-v-854d1e56]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-854d1e56]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-854d1e56]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-854d1e56]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-854d1e56]{margin-right:8px}.prev-next[data-v-854d1e56]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-854d1e56]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-854d1e56]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-854d1e56]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-854d1e56]{margin-left:auto;text-align:right}.desc[data-v-854d1e56]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-854d1e56]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-c83a7005]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-c83a7005]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-c83a7005]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-c83a7005]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-c83a7005]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-c83a7005]{display:flex;justify-content:center}.VPDoc .aside[data-v-c83a7005]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-c83a7005]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-c83a7005]{max-width:1104px}}.container[data-v-c83a7005]{margin:0 auto;width:100%}.aside[data-v-c83a7005]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-c83a7005]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-c83a7005]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-c83a7005]::-webkit-scrollbar{display:none}.aside-curtain[data-v-c83a7005]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-c83a7005]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-c83a7005]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-c83a7005]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-c83a7005]{order:1;margin:0;min-width:640px}}.content-container[data-v-c83a7005]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-c83a7005]{max-width:688px}.VPButton[data-v-697578a2]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-697578a2]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-697578a2]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-697578a2]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-697578a2]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-697578a2]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-697578a2]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-697578a2]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-697578a2]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-697578a2]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-697578a2]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-697578a2]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-697578a2]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-ef85d959]{display:none}.dark .VPImage.light[data-v-ef85d959]{display:none}.VPHero[data-v-0c44b6eb]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-0c44b6eb]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-0c44b6eb]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-0c44b6eb]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-0c44b6eb]{flex-direction:row}}.main[data-v-0c44b6eb]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-0c44b6eb]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-0c44b6eb]{text-align:left}}@media (min-width: 960px){.main[data-v-0c44b6eb]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-0c44b6eb]{max-width:592px}}.heading[data-v-0c44b6eb]{display:flex;flex-direction:column}.name[data-v-0c44b6eb],.text[data-v-0c44b6eb]{width:fit-content;max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-0c44b6eb],.VPHero.has-image .text[data-v-0c44b6eb]{margin:0 auto}.name[data-v-0c44b6eb]{color:var(--vp-home-hero-name-color)}.clip[data-v-0c44b6eb]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-0c44b6eb],.text[data-v-0c44b6eb]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-0c44b6eb],.text[data-v-0c44b6eb]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-0c44b6eb],.VPHero.has-image .text[data-v-0c44b6eb]{margin:0}}.tagline[data-v-0c44b6eb]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-0c44b6eb]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-0c44b6eb]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-0c44b6eb]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-0c44b6eb]{margin:0}}.actions[data-v-0c44b6eb]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-0c44b6eb]{justify-content:center}@media (min-width: 640px){.actions[data-v-0c44b6eb]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-0c44b6eb]{justify-content:flex-start}}.action[data-v-0c44b6eb]{flex-shrink:0;padding:6px}.image[data-v-0c44b6eb]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-0c44b6eb]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-0c44b6eb]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-0c44b6eb]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-0c44b6eb]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-0c44b6eb]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-0c44b6eb]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-0c44b6eb]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-0c44b6eb]{width:320px;height:320px}}[data-v-0c44b6eb] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-0c44b6eb] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-0c44b6eb] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-059b0b5c]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-059b0b5c]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-059b0b5c]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-059b0b5c]>.VPImage{margin-bottom:20px}.icon[data-v-059b0b5c]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-059b0b5c]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-059b0b5c]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-059b0b5c]{padding-top:8px}.link-text-value[data-v-059b0b5c]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-059b0b5c]{margin-left:6px}.VPFeatures[data-v-b8f2f37c]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-b8f2f37c]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-b8f2f37c]{padding:0 64px}}.container[data-v-b8f2f37c]{margin:0 auto;max-width:1152px}.items[data-v-b8f2f37c]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-b8f2f37c]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-b8f2f37c],.item.grid-4[data-v-b8f2f37c],.item.grid-6[data-v-b8f2f37c]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-b8f2f37c],.item.grid-4[data-v-b8f2f37c]{width:50%}.item.grid-3[data-v-b8f2f37c],.item.grid-6[data-v-b8f2f37c]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-b8f2f37c]{width:25%}}.container[data-v-82b4ea9c]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media (min-width: 640px){.container[data-v-82b4ea9c]{padding:0 48px}}@media (min-width: 960px){.container[data-v-82b4ea9c]{width:100%;padding:0 64px}}.vp-doc[data-v-82b4ea9c] .VPHomeSponsors,.vp-doc[data-v-82b4ea9c] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-82b4ea9c] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-82b4ea9c] .VPHomeSponsors a,.vp-doc[data-v-82b4ea9c] .VPTeamPage a{text-decoration:none}.VPHome[data-v-6edd784e]{margin-bottom:96px}@media (min-width: 768px){.VPHome[data-v-6edd784e]{margin-bottom:128px}}.VPContent[data-v-36e5cdaf]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-36e5cdaf]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-36e5cdaf]{margin:0}@media (min-width: 960px){.VPContent[data-v-36e5cdaf]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-36e5cdaf]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-36e5cdaf]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-8dabfd52]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-8dabfd52]{display:none}.VPFooter[data-v-8dabfd52] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-8dabfd52] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-8dabfd52]{padding:32px}}.container[data-v-8dabfd52]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-8dabfd52],.copyright[data-v-8dabfd52]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-b3853465]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-b3853465]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-b3853465]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-b3853465]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-b3853465]{color:var(--vp-c-text-1)}.icon[data-v-b3853465]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-b3853465]{font-size:14px}.icon[data-v-b3853465]{font-size:16px}}.open>.icon[data-v-b3853465]{transform:rotate(90deg)}.items[data-v-b3853465]{position:absolute;top:40px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}@media (min-width: 960px){.items[data-v-b3853465]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-b3853465]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-b3853465]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-b3853465]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-b3853465]{transition:all .2s ease-out}.flyout-leave-active[data-v-b3853465]{transition:all .15s ease-in}.flyout-enter-from[data-v-b3853465],.flyout-leave-to[data-v-b3853465]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-fdc3adbf]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-fdc3adbf]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-fdc3adbf]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-fdc3adbf]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-fdc3adbf]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-fdc3adbf]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-fdc3adbf]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-fdc3adbf]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-fdc3adbf]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-fdc3adbf]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-fdc3adbf]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-fdc3adbf]{display:none}}.menu-icon[data-v-fdc3adbf]{margin-right:8px;font-size:14px}.VPOutlineDropdown[data-v-fdc3adbf]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-fdc3adbf]{padding:12px 32px 11px}}.VPSwitch[data-v-94e9f62d]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-94e9f62d]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-94e9f62d]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-94e9f62d]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-94e9f62d] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-94e9f62d] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-598e3036]{opacity:1}.moon[data-v-598e3036],.dark .sun[data-v-598e3036]{opacity:0}.dark .moon[data-v-598e3036]{opacity:1}.dark .VPSwitchAppearance[data-v-598e3036] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-f499637a]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-f499637a]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-b2a62be6]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-b2a62be6]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-b2a62be6]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-b2a62be6]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-05d5f862]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-05d5f862]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-05d5f862]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-05d5f862]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-5bb8aaa3]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-5bb8aaa3] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-5bb8aaa3] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-5bb8aaa3] .group:last-child{padding-bottom:0}.VPMenu[data-v-5bb8aaa3] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-5bb8aaa3] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-5bb8aaa3] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-5bb8aaa3] .action{padding-left:24px}.VPFlyout[data-v-15615c13]{position:relative}.VPFlyout[data-v-15615c13]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-15615c13]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-15615c13]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-15615c13]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-15615c13]{color:var(--vp-c-brand-2)}.button[aria-expanded=false]+.menu[data-v-15615c13]{opacity:0;visibility:hidden;transform:translateY(0)}.VPFlyout:hover .menu[data-v-15615c13],.button[aria-expanded=true]+.menu[data-v-15615c13]{opacity:1;visibility:visible;transform:translateY(0)}.button[data-v-15615c13]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-15615c13]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-15615c13]{margin-right:0;font-size:16px}.text-icon[data-v-15615c13]{margin-left:4px;font-size:14px}.icon[data-v-15615c13]{font-size:20px;transition:fill .25s}.menu[data-v-15615c13]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-b60aa373]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-b60aa373]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-b60aa373]>svg,.VPSocialLink[data-v-b60aa373]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-ad239fd6]{display:flex;justify-content:center}.VPNavBarExtra[data-v-b981492a]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-b981492a]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-b981492a]{display:none}}.trans-title[data-v-b981492a]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-b981492a],.item.social-links[data-v-b981492a]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-b981492a]{min-width:176px}.appearance-action[data-v-b981492a]{margin-right:-2px}.social-links-list[data-v-b981492a]{margin:-4px -8px}.VPNavBarHamburger[data-v-7014dc69]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-7014dc69]{display:none}}.container[data-v-7014dc69]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-7014dc69]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-7014dc69]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-7014dc69]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-7014dc69]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-7014dc69]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-7014dc69]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-7014dc69],.VPNavBarHamburger.active:hover .middle[data-v-7014dc69],.VPNavBarHamburger.active:hover .bottom[data-v-7014dc69]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-7014dc69],.middle[data-v-7014dc69],.bottom[data-v-7014dc69]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-7014dc69]{top:0;left:0;transform:translate(0)}.middle[data-v-7014dc69]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-7014dc69]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-18f1f880]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-18f1f880],.VPNavBarMenuLink[data-v-18f1f880]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-e4ba8c32]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-e4ba8c32]{display:flex}}/*! @docsearch/css 3.8.2 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 #0304094d;--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 2px;position:relative;top:-1px;width:20px}.DocSearch-Button-Key--pressed{box-shadow:var(--docsearch-key-pressed-shadow);transform:translate3d(0,1px,0)}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:2px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button-Key--pressed{transform:none;box-shadow:none}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand-1);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.DocSearch-Search-Icon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088-4.088-4.088A7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653z'/%3E%3C/svg%3E")}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-3d39eb27]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-3d39eb27]{display:flex;align-items:center}}.title[data-v-c4b00b0c]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-c4b00b0c]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-c4b00b0c]{border-bottom-color:var(--vp-c-divider)}}[data-v-c4b00b0c] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-6593d95a]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-6593d95a]{display:flex;align-items:center}}.title[data-v-6593d95a]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-0fc11f70]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .25s}.VPNavBar.screen-open[data-v-0fc11f70]{transition:none;background-color:var(--vp-nav-bg-color);border-bottom:1px solid var(--vp-c-divider)}.VPNavBar[data-v-0fc11f70]:not(.home){background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar[data-v-0fc11f70]:not(.home){background-color:transparent}.VPNavBar[data-v-0fc11f70]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-0fc11f70]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-0fc11f70]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-0fc11f70]{padding:0}}.container[data-v-0fc11f70]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-0fc11f70],.container>.content[data-v-0fc11f70]{pointer-events:none}.container[data-v-0fc11f70] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-0fc11f70]{max-width:100%}}.title[data-v-0fc11f70]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-0fc11f70]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-0fc11f70]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-0fc11f70]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-0fc11f70]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-0fc11f70]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-0fc11f70]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.home.top) .content-body[data-v-0fc11f70]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-0fc11f70]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-0fc11f70]{column-gap:.5rem}}.menu+.translations[data-v-0fc11f70]:before,.menu+.appearance[data-v-0fc11f70]:before,.menu+.social-links[data-v-0fc11f70]:before,.translations+.appearance[data-v-0fc11f70]:before,.appearance+.social-links[data-v-0fc11f70]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-0fc11f70]:before,.translations+.appearance[data-v-0fc11f70]:before{margin-right:16px}.appearance+.social-links[data-v-0fc11f70]:before{margin-left:16px}.social-links[data-v-0fc11f70]{margin-right:-8px}.divider[data-v-0fc11f70]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-0fc11f70]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-0fc11f70]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-0fc11f70]{width:100%;height:1px;transition:background-color .5s}.VPNavBar:not(.home) .divider-line[data-v-0fc11f70]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.home.top) .divider-line[data-v-0fc11f70]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-0fc11f70]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-5afdc38d]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-5afdc38d]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-cf15a40f]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-cf15a40f]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-d4fb8760]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-d4fb8760]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-e87a0a05]{display:block}.title[data-v-e87a0a05]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-24f2119c]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-24f2119c]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-24f2119c]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-24f2119c]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-24f2119c]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-24f2119c]{transform:rotate(45deg)}.button[data-v-24f2119c]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-24f2119c]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-24f2119c]{transition:transform .25s}.group[data-v-24f2119c]:first-child{padding-top:0}.group+.group[data-v-24f2119c],.group+.item[data-v-24f2119c]{padding-top:4px}.VPNavScreenTranslations[data-v-590b4fe1]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-590b4fe1]{height:auto}.title[data-v-590b4fe1]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-590b4fe1]{font-size:16px}.icon.lang[data-v-590b4fe1]{margin-right:8px}.icon.chevron[data-v-590b4fe1]{margin-left:4px}.list[data-v-590b4fe1]{padding:4px 0 0 24px}.link[data-v-590b4fe1]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-8eb87e4b]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px));right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .25s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-8eb87e4b],.VPNavScreen.fade-leave-active[data-v-8eb87e4b]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-8eb87e4b],.VPNavScreen.fade-leave-active .container[data-v-8eb87e4b]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-8eb87e4b],.VPNavScreen.fade-leave-to[data-v-8eb87e4b]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-8eb87e4b],.VPNavScreen.fade-leave-to .container[data-v-8eb87e4b]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-8eb87e4b]{display:none}}.container[data-v-8eb87e4b]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-8eb87e4b],.menu+.appearance[data-v-8eb87e4b],.translations+.appearance[data-v-8eb87e4b]{margin-top:24px}.menu+.social-links[data-v-8eb87e4b]{margin-top:16px}.appearance+.social-links[data-v-8eb87e4b]{margin-top:16px}.VPNav[data-v-82753295]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-82753295]{position:fixed}}.VPSidebarItem.level-0[data-v-b1de5742]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-b1de5742]{padding-bottom:10px}.item[data-v-b1de5742]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-b1de5742]{cursor:pointer}.indicator[data-v-b1de5742]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-b1de5742],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-b1de5742],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-b1de5742],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-b1de5742]{background-color:var(--vp-c-brand-1)}.link[data-v-b1de5742]{display:flex;align-items:center;flex-grow:1}.text[data-v-b1de5742]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-b1de5742]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-b1de5742],.VPSidebarItem.level-2 .text[data-v-b1de5742],.VPSidebarItem.level-3 .text[data-v-b1de5742],.VPSidebarItem.level-4 .text[data-v-b1de5742],.VPSidebarItem.level-5 .text[data-v-b1de5742]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-b1de5742],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-b1de5742],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-b1de5742],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-b1de5742],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-b1de5742],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-b1de5742]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-b1de5742],.VPSidebarItem.level-1.has-active>.item>.text[data-v-b1de5742],.VPSidebarItem.level-2.has-active>.item>.text[data-v-b1de5742],.VPSidebarItem.level-3.has-active>.item>.text[data-v-b1de5742],.VPSidebarItem.level-4.has-active>.item>.text[data-v-b1de5742],.VPSidebarItem.level-5.has-active>.item>.text[data-v-b1de5742],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-b1de5742],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-b1de5742],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-b1de5742],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-b1de5742],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-b1de5742],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-b1de5742]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-b1de5742],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-b1de5742],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-b1de5742],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-b1de5742],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-b1de5742],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-b1de5742]{color:var(--vp-c-brand-1)}.caret[data-v-b1de5742]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-b1de5742]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-b1de5742]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-b1de5742]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-b1de5742]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-b1de5742],.VPSidebarItem.level-2 .items[data-v-b1de5742],.VPSidebarItem.level-3 .items[data-v-b1de5742],.VPSidebarItem.level-4 .items[data-v-b1de5742],.VPSidebarItem.level-5 .items[data-v-b1de5742]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-b1de5742]{display:none}.no-transition[data-v-3e75e911] .caret-icon{transition:none}.group+.group[data-v-3e75e911]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-3e75e911]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSidebar[data-v-3a2b9ffb]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-3a2b9ffb]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-3a2b9ffb]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-3a2b9ffb]{padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-3a2b9ffb]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-3a2b9ffb]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-3a2b9ffb]{outline:0}.VPSkipLink[data-v-31227e8f]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-31227e8f]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-31227e8f]{top:14px;left:16px}}.Layout[data-v-13c0e93a]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-39450138]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPHomeSponsors[data-v-39450138]{margin:96px 0}@media (min-width: 768px){.VPHomeSponsors[data-v-39450138]{margin:128px 0}}.VPHomeSponsors[data-v-39450138]{padding:0 24px}@media (min-width: 768px){.VPHomeSponsors[data-v-39450138]{padding:0 48px}}@media (min-width: 960px){.VPHomeSponsors[data-v-39450138]{padding:0 64px}}.container[data-v-39450138]{margin:0 auto;max-width:1152px}.love[data-v-39450138]{margin:0 auto;width:fit-content;font-size:28px;color:var(--vp-c-text-3)}.icon[data-v-39450138]{display:inline-block}.message[data-v-39450138]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-39450138]{padding-top:32px}.action[data-v-39450138]{padding-top:40px;text-align:center}.VPTeamMembersItem[data-v-bda8d028]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-bda8d028]{padding:32px}.VPTeamMembersItem.small .data[data-v-bda8d028]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-bda8d028]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-bda8d028]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-bda8d028]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-bda8d028]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-bda8d028]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-bda8d028]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-bda8d028]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-bda8d028]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-bda8d028]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-bda8d028]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-bda8d028]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-bda8d028]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-bda8d028]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-bda8d028]{text-align:center}.avatar[data-v-bda8d028]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-bda8d028]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-bda8d028]{margin:0;font-weight:600}.affiliation[data-v-bda8d028]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-bda8d028]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-bda8d028]:hover{color:var(--vp-c-brand-1)}.desc[data-v-bda8d028]{margin:0 auto}.desc[data-v-bda8d028] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-bda8d028]{display:flex;justify-content:center;height:56px}.sp-link[data-v-bda8d028]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-bda8d028]:hover,.sp .sp-link.link[data-v-bda8d028]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-bda8d028]{margin-right:8px;font-size:16px}.VPTeamMembers.small .container[data-v-4e5baf97]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-4e5baf97]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-4e5baf97]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-4e5baf97]{max-width:876px}.VPTeamMembers.medium .container[data-v-4e5baf97]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-4e5baf97]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-4e5baf97]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-4e5baf97]{max-width:760px}.container[data-v-4e5baf97]{display:grid;gap:24px;margin:0 auto;max-width:1152px}.VPTeamPage[data-v-c65bd8a0]{margin:96px 0}@media (min-width: 768px){.VPTeamPage[data-v-c65bd8a0]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-c65bd8a0-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamPageSection+.VPTeamPageSection[data-v-c65bd8a0-s],.VPTeamMembers+.VPTeamPageSection[data-v-c65bd8a0-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-c65bd8a0-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-c65bd8a0-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-c65bd8a0-s],.VPTeamMembers+.VPTeamPageSection[data-v-c65bd8a0-s]{margin-top:96px}}.VPTeamMembers[data-v-c65bd8a0-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-c65bd8a0-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-c65bd8a0-s]{padding:0 64px}}.VPTeamPageSection[data-v-a5d09758]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-a5d09758]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-a5d09758]{padding:0 64px}}.title[data-v-a5d09758]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-a5d09758]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-a5d09758]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-a5d09758]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-a5d09758]{padding-top:40px}.VPTeamPageTitle[data-v-ca259fcb]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-ca259fcb]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-ca259fcb]{padding:80px 64px 48px}}.title[data-v-ca259fcb]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-ca259fcb]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-ca259fcb]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-ca259fcb]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: hsl(43, 66%, 49%);--vp-c-brand-2: hsl(35, 67%, 47%);--vp-c-brand-3: hsl(44, 69%, 64%);--vp-c-brand-soft: hsla(54, 30%, 35%, .161);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft)}.dark{--vp-c-brand-1: hsl(44, 69%, 64%);--vp-c-brand-2: rgb(200, 133, 40);--vp-c-brand-3: hsl(43, 66%, 49%);--vp-c-brand-soft: hsla(54, 30%, 35%, .161)}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1)}:root{--vp-home-hero-name-color: transparent;--vp-home-hero-name-background: -webkit-linear-gradient(120deg, #e5582a 30%, #e3c164);--vp-home-hero-image-background-image: linear-gradient(32deg, #e52a2a 37%, #d0a73e 5%);--vp-home-hero-image-filter: blur(44px)}@media (min-width: 640px){:root{--vp-home-hero-image-filter: blur(56px)}}@media (min-width: 960px){:root{--vp-home-hero-image-filter: blur(68px)}}:root{--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-brand-soft);--vp-custom-block-tip-code-bg: var(--vp-c-brand-soft)}.DocSearch{--docsearch-primary-color: var(--vp-c-brand-1) !important}#trusted-by-wrapper{margin:0 auto;display:flex;justify-content:center;flex-direction:column;align-items:center}#small-text{font-size:.8rem;display:block;margin:1rem;color:var(--vp-c-text-2);text-align:center}#small-text a{color:var(--vp-c-text-1);text-decoration:underline}#small-text a:hover{text-decoration:none}#trusted-by{display:flex;align-items:center;justify-content:space-around;background-color:var(--vp-c-bg-soft);border-radius:12px;gap:2rem;width:min(100%,1152px);flex-wrap:wrap;margin:0 24px;min-height:20vh;padding:24px}#trusted-by a{filter:contrast(0);width:128px;transition:all .2s ease-in}#trusted-by a:hover{filter:none}@media (min-width: 960px){#trusted-by{margin:0 64px}}@media (min-width: 640px){#trusted-by{margin:0 48px}}.contributors{margin-top:2rem;display:flex;justify-content:center;align-items:center;flex-wrap:wrap;gap:1rem}.VPTeamMembers.medium.count-1{display:flex;justify-content:center}.VPCarbonAds[data-v-d8b3a76c]{display:flex;justify-content:center;align-items:center;padding:24px;border-radius:12px;min-height:256px;text-align:center;line-height:18px;font-size:12px;font-weight:500;background-color:var(--vp-carbon-ads-bg-color)}.VPCarbonAds[data-v-d8b3a76c] img{margin:0 auto;border-radius:6px}.VPCarbonAds[data-v-d8b3a76c] .carbon-text{display:block;margin:0 auto;padding-top:12px;color:var(--vp-carbon-ads-text-color);transition:color .25s}.VPCarbonAds[data-v-d8b3a76c] .carbon-text:hover{color:var(--vp-carbon-ads-hover-text-color)}.VPCarbonAds[data-v-d8b3a76c] .carbon-poweredby{display:block;padding-top:6px;font-size:11px;font-weight:500;color:var(--vp-carbon-ads-poweredby-color);text-transform:uppercase;transition:color .25s}.VPCarbonAds[data-v-d8b3a76c] .carbon-poweredby:hover{color:var(--vp-carbon-ads-hover-poweredby-color)}.VPCarbonAds[data-v-d8b3a76c]>div{display:none}.VPCarbonAds[data-v-d8b3a76c]>div:first-of-type{display:block} +@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic.C5lxZ8CY.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek-ext.CqjqNYQ-.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek.BBVDIX6e.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-vietnamese.BjW4sHH5.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin-ext.4ZJIpNVo.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin.Di8DUHzh.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic-ext.r48I6akx.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic.By2_1cv3.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek-ext.1u6EdAuj.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek.DJ8dCoTZ.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-vietnamese.BSbpV94h.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin-ext.CN1xVJS-.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin.C2AdPX0b.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Punctuation SC;font-weight:400;src:local("PingFang SC Regular"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:500;src:local("PingFang SC Medium"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:600;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:700;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-purple-1: #6f42c1;--vp-c-purple-2: #7e4cc9;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-purple-1: #c8abfa;--vp-c-purple-2: #a879e6;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: #3c3c43;--vp-c-text-2: #67676c;--vp-c-text-3: #929295}.dark{--vp-c-text-1: #dfdfd6;--vp-c-text-2: #98989f;--vp-c-text-3: #6a6a71}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-note-1: var(--vp-c-brand-1);--vp-c-note-2: var(--vp-c-brand-2);--vp-c-note-3: var(--vp-c-brand-3);--vp-c-note-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-important-1: var(--vp-c-purple-1);--vp-c-important-2: var(--vp-c-purple-2);--vp-c-important-3: var(--vp-c-purple-3);--vp-c-important-soft: var(--vp-c-purple-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-c-caution-1: var(--vp-c-red-1);--vp-c-caution-2: var(--vp-c-red-2);--vp-c-caution-3: var(--vp-c-red-3);--vp-c-caution-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;font-optical-sizing:auto}:root:where(:lang(zh)){--vp-font-family-base: "Punctuation SC", "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}@media (min-width: 960px){:root{--vp-z-index-sidebar: 25}}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:lang(es),:lang(pt){--vp-code-copy-copied-text-content: "Copiado"}:lang(fa){--vp-code-copy-copied-text-content: "کپی شد"}:lang(ko){--vp-code-copy-copied-text-content: "복사됨"}:lang(ru){--vp-code-copy-copied-text-content: "Скопировано"}:lang(zh){--vp-code-copy-copied-text-content: "已复制"}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-note-border: transparent;--vp-custom-block-note-text: var(--vp-c-text-1);--vp-custom-block-note-bg: var(--vp-c-default-soft);--vp-custom-block-note-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-important-border: transparent;--vp-custom-block-important-text: var(--vp-c-text-1);--vp-custom-block-important-bg: var(--vp-c-important-soft);--vp-custom-block-important-code-bg: var(--vp-c-important-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-caution-border: transparent;--vp-custom-block-caution-text: var(--vp-c-text-1);--vp-custom-block-caution-bg: var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg: var(--vp-c-caution-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-default-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{overflow-x:auto}mjx-container>svg{display:inline-block;margin:auto}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3M15 12H3M17 18H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6M4 14l6-6 2-3M2 5h12M7 2h1M22 22l-5-10-5 10M14 18h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7M14 9h7M14 15h7M14 20h7'/%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2ZM18 9l-6 6M12 9l6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc h4{margin:24px 0 0;letter-spacing:-.01em;line-height:24px;font-size:18px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s;color:var(--vp-c-text-2)}.vp-doc blockquote>p{margin:0;font-size:16px;transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code,.vp-doc h4>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;-webkit-user-select:none;user-select:none;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(:is(.no-icon,svg a,:has(img,svg))):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(:is(.no-icon,svg a,:has(img,svg))):after{content:"";color:currentColor}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin:0 0 4px!important;text-align:center;letter-spacing:1px!important;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-f59142b7]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-f59142b7],.VPBackdrop.fade-leave-to[data-v-f59142b7]{opacity:0}.VPBackdrop.fade-leave-active[data-v-f59142b7]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-f59142b7]{display:none}}.NotFound[data-v-0bfa2e64]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-0bfa2e64]{padding:96px 32px 168px}}.code[data-v-0bfa2e64]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-0bfa2e64]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-0bfa2e64]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-0bfa2e64]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-0bfa2e64]{padding-top:20px}.link[data-v-0bfa2e64]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-0bfa2e64]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-24355f8a]{position:relative;z-index:1}.nested[data-v-24355f8a]{padding-right:16px;padding-left:16px}.outline-link[data-v-24355f8a]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-24355f8a]:hover,.outline-link.active[data-v-24355f8a]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-24355f8a]{padding-left:13px}.VPDocAsideOutline[data-v-5791035b]{display:none}.VPDocAsideOutline.has-outline[data-v-5791035b]{display:block}.content[data-v-5791035b]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-5791035b]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-5791035b]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-12c88fe8]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-12c88fe8]{flex-grow:1}.VPDocAside[data-v-12c88fe8] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-12c88fe8] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-12c88fe8] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-7a07e477]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-7a07e477]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-03820f5f]{margin-top:64px}.edit-info[data-v-03820f5f]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-03820f5f]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-03820f5f]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-03820f5f]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-03820f5f]{margin-right:8px}.prev-next[data-v-03820f5f]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-03820f5f]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-03820f5f]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-03820f5f]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-03820f5f]{margin-left:auto;text-align:right}.desc[data-v-03820f5f]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-03820f5f]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-a2dbfda7]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-a2dbfda7]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-a2dbfda7]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-a2dbfda7]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-a2dbfda7]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-a2dbfda7]{display:flex;justify-content:center}.VPDoc .aside[data-v-a2dbfda7]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-a2dbfda7]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-a2dbfda7]{max-width:1104px}}.container[data-v-a2dbfda7]{margin:0 auto;width:100%}.aside[data-v-a2dbfda7]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-a2dbfda7]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-a2dbfda7]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-a2dbfda7]::-webkit-scrollbar{display:none}.aside-curtain[data-v-a2dbfda7]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-a2dbfda7]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-a2dbfda7]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-a2dbfda7]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-a2dbfda7]{order:1;margin:0;min-width:640px}}.content-container[data-v-a2dbfda7]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-a2dbfda7]{max-width:688px}.VPButton[data-v-cb8c4fca]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-cb8c4fca]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-cb8c4fca]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-cb8c4fca]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-cb8c4fca]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-cb8c4fca]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-cb8c4fca]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-cb8c4fca]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-cb8c4fca]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-cb8c4fca]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-cb8c4fca]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-cb8c4fca]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-cb8c4fca]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-8ebc39c0]{display:none}.dark .VPImage.light[data-v-8ebc39c0]{display:none}.VPHero[data-v-dd999c49]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-dd999c49]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-dd999c49]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-dd999c49]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-dd999c49]{flex-direction:row}}.main[data-v-dd999c49]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-dd999c49]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-dd999c49]{text-align:left}}@media (min-width: 960px){.main[data-v-dd999c49]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-dd999c49]{max-width:592px}}.heading[data-v-dd999c49]{display:flex;flex-direction:column}.name[data-v-dd999c49],.text[data-v-dd999c49]{width:fit-content;max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-dd999c49],.VPHero.has-image .text[data-v-dd999c49]{margin:0 auto}.name[data-v-dd999c49]{color:var(--vp-home-hero-name-color)}.clip[data-v-dd999c49]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-dd999c49],.text[data-v-dd999c49]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-dd999c49],.text[data-v-dd999c49]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-dd999c49],.VPHero.has-image .text[data-v-dd999c49]{margin:0}}.tagline[data-v-dd999c49]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-dd999c49]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-dd999c49]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-dd999c49]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-dd999c49]{margin:0}}.actions[data-v-dd999c49]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-dd999c49]{justify-content:center}@media (min-width: 640px){.actions[data-v-dd999c49]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-dd999c49]{justify-content:flex-start}}.action[data-v-dd999c49]{flex-shrink:0;padding:6px}.image[data-v-dd999c49]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-dd999c49]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-dd999c49]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-dd999c49]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-dd999c49]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-dd999c49]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-dd999c49]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-dd999c49]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-dd999c49]{width:320px;height:320px}}[data-v-dd999c49] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-dd999c49] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-dd999c49] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-c42fca83]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-c42fca83]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-c42fca83]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-c42fca83]>.VPImage{margin-bottom:20px}.icon[data-v-c42fca83]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-c42fca83]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-c42fca83]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-c42fca83]{padding-top:8px}.link-text-value[data-v-c42fca83]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-c42fca83]{margin-left:6px}.VPFeatures[data-v-54b7d5ff]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-54b7d5ff]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-54b7d5ff]{padding:0 64px}}.container[data-v-54b7d5ff]{margin:0 auto;max-width:1152px}.items[data-v-54b7d5ff]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-54b7d5ff]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-54b7d5ff],.item.grid-4[data-v-54b7d5ff],.item.grid-6[data-v-54b7d5ff]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-54b7d5ff],.item.grid-4[data-v-54b7d5ff]{width:50%}.item.grid-3[data-v-54b7d5ff],.item.grid-6[data-v-54b7d5ff]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-54b7d5ff]{width:25%}}.container[data-v-430b30cb]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media (min-width: 640px){.container[data-v-430b30cb]{padding:0 48px}}@media (min-width: 960px){.container[data-v-430b30cb]{width:100%;padding:0 64px}}.vp-doc[data-v-430b30cb] .VPHomeSponsors,.vp-doc[data-v-430b30cb] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-430b30cb] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-430b30cb] .VPHomeSponsors a,.vp-doc[data-v-430b30cb] .VPTeamPage a{text-decoration:none}.VPHome[data-v-2464db7d]{margin-bottom:96px}@media (min-width: 768px){.VPHome[data-v-2464db7d]{margin-bottom:128px}}.VPContent[data-v-6b7662ab]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-6b7662ab]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-6b7662ab]{margin:0}@media (min-width: 960px){.VPContent[data-v-6b7662ab]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-6b7662ab]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-6b7662ab]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-80957399]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-80957399]{display:none}.VPFooter[data-v-80957399] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-80957399] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-80957399]{padding:32px}}.container[data-v-80957399]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-80957399],.copyright[data-v-80957399]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-39d21923]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-39d21923]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-39d21923]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-39d21923]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-39d21923]{color:var(--vp-c-text-1)}.icon[data-v-39d21923]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-39d21923]{font-size:14px}.icon[data-v-39d21923]{font-size:16px}}.open>.icon[data-v-39d21923]{transform:rotate(90deg)}.items[data-v-39d21923]{position:absolute;top:40px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}@media (min-width: 960px){.items[data-v-39d21923]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-39d21923]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-39d21923]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-39d21923]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-39d21923]{transition:all .2s ease-out}.flyout-leave-active[data-v-39d21923]{transition:all .15s ease-in}.flyout-enter-from[data-v-39d21923],.flyout-leave-to[data-v-39d21923]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-ac3c66b6]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-ac3c66b6]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-ac3c66b6]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-ac3c66b6]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-ac3c66b6]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-ac3c66b6]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-ac3c66b6]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-ac3c66b6]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-ac3c66b6]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-ac3c66b6]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-ac3c66b6]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-ac3c66b6]{display:none}}.menu-icon[data-v-ac3c66b6]{margin-right:8px;font-size:14px}.VPOutlineDropdown[data-v-ac3c66b6]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-ac3c66b6]{padding:12px 32px 11px}}.VPSwitch[data-v-6f4e89fa]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-6f4e89fa]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-6f4e89fa]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-6f4e89fa]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-6f4e89fa] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-6f4e89fa] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-3b05a2ba]{opacity:1}.moon[data-v-3b05a2ba],.dark .sun[data-v-3b05a2ba]{opacity:0}.dark .moon[data-v-3b05a2ba]{opacity:1}.dark .VPSwitchAppearance[data-v-3b05a2ba] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-c06afdfa]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-c06afdfa]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-cae06d8f]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-cae06d8f]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-cae06d8f]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-cae06d8f]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-476545b4]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-476545b4]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-476545b4]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-476545b4]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-423530b0]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-423530b0] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-423530b0] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-423530b0] .group:last-child{padding-bottom:0}.VPMenu[data-v-423530b0] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-423530b0] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-423530b0] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-423530b0] .action{padding-left:24px}.VPFlyout[data-v-1893426f]{position:relative}.VPFlyout[data-v-1893426f]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-1893426f]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-1893426f]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-1893426f]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-1893426f]{color:var(--vp-c-brand-2)}.button[aria-expanded=false]+.menu[data-v-1893426f]{opacity:0;visibility:hidden;transform:translateY(0)}.VPFlyout:hover .menu[data-v-1893426f],.button[aria-expanded=true]+.menu[data-v-1893426f]{opacity:1;visibility:visible;transform:translateY(0)}.button[data-v-1893426f]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-1893426f]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-1893426f]{margin-right:0;font-size:16px}.text-icon[data-v-1893426f]{margin-left:4px;font-size:14px}.icon[data-v-1893426f]{font-size:20px;transition:fill .25s}.menu[data-v-1893426f]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-5297b9ec]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-5297b9ec]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-5297b9ec]>svg,.VPSocialLink[data-v-5297b9ec]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-5af2a0df]{display:flex;justify-content:center}.VPNavBarExtra[data-v-96f668d2]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-96f668d2]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-96f668d2]{display:none}}.trans-title[data-v-96f668d2]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-96f668d2],.item.social-links[data-v-96f668d2]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-96f668d2]{min-width:176px}.appearance-action[data-v-96f668d2]{margin-right:-2px}.social-links-list[data-v-96f668d2]{margin:-4px -8px}.VPNavBarHamburger[data-v-364b8629]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-364b8629]{display:none}}.container[data-v-364b8629]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-364b8629]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-364b8629]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-364b8629]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-364b8629]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-364b8629]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-364b8629]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-364b8629],.VPNavBarHamburger.active:hover .middle[data-v-364b8629],.VPNavBarHamburger.active:hover .bottom[data-v-364b8629]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-364b8629],.middle[data-v-364b8629],.bottom[data-v-364b8629]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-364b8629]{top:0;left:0;transform:translate(0)}.middle[data-v-364b8629]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-364b8629]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-77375007]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-77375007],.VPNavBarMenuLink[data-v-77375007]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-80fc4413]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-80fc4413]{display:flex}}/*! @docsearch/css 3.8.2 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 #0304094d;--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 2px;position:relative;top:-1px;width:20px}.DocSearch-Button-Key--pressed{box-shadow:var(--docsearch-key-pressed-shadow);transform:translate3d(0,1px,0)}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:2px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button-Key--pressed{transform:none;box-shadow:none}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand-1);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.DocSearch-Search-Icon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088-4.088-4.088A7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653z'/%3E%3C/svg%3E")}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-43977e51]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-43977e51]{display:flex;align-items:center}}.title[data-v-45adfdaa]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-45adfdaa]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-45adfdaa]{border-bottom-color:var(--vp-c-divider)}}[data-v-45adfdaa] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-76e72062]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-76e72062]{display:flex;align-items:center}}.title[data-v-76e72062]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-dd18e3da]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .25s}.VPNavBar.screen-open[data-v-dd18e3da]{transition:none;background-color:var(--vp-nav-bg-color);border-bottom:1px solid var(--vp-c-divider)}.VPNavBar[data-v-dd18e3da]:not(.home){background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar[data-v-dd18e3da]:not(.home){background-color:transparent}.VPNavBar[data-v-dd18e3da]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-dd18e3da]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-dd18e3da]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-dd18e3da]{padding:0}}.container[data-v-dd18e3da]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-dd18e3da],.container>.content[data-v-dd18e3da]{pointer-events:none}.container[data-v-dd18e3da] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-dd18e3da]{max-width:100%}}.title[data-v-dd18e3da]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-dd18e3da]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-dd18e3da]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-dd18e3da]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-dd18e3da]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-dd18e3da]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-dd18e3da]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.home.top) .content-body[data-v-dd18e3da]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-dd18e3da]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-dd18e3da]{column-gap:.5rem}}.menu+.translations[data-v-dd18e3da]:before,.menu+.appearance[data-v-dd18e3da]:before,.menu+.social-links[data-v-dd18e3da]:before,.translations+.appearance[data-v-dd18e3da]:before,.appearance+.social-links[data-v-dd18e3da]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-dd18e3da]:before,.translations+.appearance[data-v-dd18e3da]:before{margin-right:16px}.appearance+.social-links[data-v-dd18e3da]:before{margin-left:16px}.social-links[data-v-dd18e3da]{margin-right:-8px}.divider[data-v-dd18e3da]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-dd18e3da]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-dd18e3da]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-dd18e3da]{width:100%;height:1px;transition:background-color .5s}.VPNavBar:not(.home) .divider-line[data-v-dd18e3da]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.home.top) .divider-line[data-v-dd18e3da]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-dd18e3da]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-063c97a6]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-063c97a6]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-101fa30f]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-101fa30f]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-3ba4ca06]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-3ba4ca06]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-6babe777]{display:block}.title[data-v-6babe777]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-de092b22]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-de092b22]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-de092b22]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-de092b22]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-de092b22]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-de092b22]{transform:rotate(45deg)}.button[data-v-de092b22]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-de092b22]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-de092b22]{transition:transform .25s}.group[data-v-de092b22]:first-child{padding-top:0}.group+.group[data-v-de092b22],.group+.item[data-v-de092b22]{padding-top:4px}.VPNavScreenTranslations[data-v-309ced7f]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-309ced7f]{height:auto}.title[data-v-309ced7f]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-309ced7f]{font-size:16px}.icon.lang[data-v-309ced7f]{margin-right:8px}.icon.chevron[data-v-309ced7f]{margin-left:4px}.list[data-v-309ced7f]{padding:4px 0 0 24px}.link[data-v-309ced7f]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-357a8c18]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px));right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .25s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-357a8c18],.VPNavScreen.fade-leave-active[data-v-357a8c18]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-357a8c18],.VPNavScreen.fade-leave-active .container[data-v-357a8c18]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-357a8c18],.VPNavScreen.fade-leave-to[data-v-357a8c18]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-357a8c18],.VPNavScreen.fade-leave-to .container[data-v-357a8c18]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-357a8c18]{display:none}}.container[data-v-357a8c18]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-357a8c18],.menu+.appearance[data-v-357a8c18],.translations+.appearance[data-v-357a8c18]{margin-top:24px}.menu+.social-links[data-v-357a8c18]{margin-top:16px}.appearance+.social-links[data-v-357a8c18]{margin-top:16px}.VPNav[data-v-6d80760b]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-6d80760b]{position:fixed}}.VPSidebarItem.level-0[data-v-4e886116]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-4e886116]{padding-bottom:10px}.item[data-v-4e886116]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-4e886116]{cursor:pointer}.indicator[data-v-4e886116]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-4e886116],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-4e886116],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-4e886116],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-4e886116]{background-color:var(--vp-c-brand-1)}.link[data-v-4e886116]{display:flex;align-items:center;flex-grow:1}.text[data-v-4e886116]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-4e886116]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-4e886116],.VPSidebarItem.level-2 .text[data-v-4e886116],.VPSidebarItem.level-3 .text[data-v-4e886116],.VPSidebarItem.level-4 .text[data-v-4e886116],.VPSidebarItem.level-5 .text[data-v-4e886116]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-4e886116],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-4e886116],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-4e886116],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-4e886116],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-4e886116],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-4e886116]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-4e886116],.VPSidebarItem.level-1.has-active>.item>.text[data-v-4e886116],.VPSidebarItem.level-2.has-active>.item>.text[data-v-4e886116],.VPSidebarItem.level-3.has-active>.item>.text[data-v-4e886116],.VPSidebarItem.level-4.has-active>.item>.text[data-v-4e886116],.VPSidebarItem.level-5.has-active>.item>.text[data-v-4e886116],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-4e886116],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-4e886116],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-4e886116],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-4e886116],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-4e886116],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-4e886116]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-4e886116],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-4e886116],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-4e886116],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-4e886116],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-4e886116],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-4e886116]{color:var(--vp-c-brand-1)}.caret[data-v-4e886116]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-4e886116]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-4e886116]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-4e886116]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-4e886116]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-4e886116],.VPSidebarItem.level-2 .items[data-v-4e886116],.VPSidebarItem.level-3 .items[data-v-4e886116],.VPSidebarItem.level-4 .items[data-v-4e886116],.VPSidebarItem.level-5 .items[data-v-4e886116]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-4e886116]{display:none}.no-transition[data-v-4aa9b711] .caret-icon{transition:none}.group+.group[data-v-4aa9b711]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-4aa9b711]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSidebar[data-v-2e8ec0d9]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-2e8ec0d9]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-2e8ec0d9]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-2e8ec0d9]{padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-2e8ec0d9]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-2e8ec0d9]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-2e8ec0d9]{outline:0}.VPSkipLink[data-v-77a352a9]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-77a352a9]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-77a352a9]{top:14px;left:16px}}.Layout[data-v-de37206a]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-4104bc36]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPHomeSponsors[data-v-4104bc36]{margin:96px 0}@media (min-width: 768px){.VPHomeSponsors[data-v-4104bc36]{margin:128px 0}}.VPHomeSponsors[data-v-4104bc36]{padding:0 24px}@media (min-width: 768px){.VPHomeSponsors[data-v-4104bc36]{padding:0 48px}}@media (min-width: 960px){.VPHomeSponsors[data-v-4104bc36]{padding:0 64px}}.container[data-v-4104bc36]{margin:0 auto;max-width:1152px}.love[data-v-4104bc36]{margin:0 auto;width:fit-content;font-size:28px;color:var(--vp-c-text-3)}.icon[data-v-4104bc36]{display:inline-block}.message[data-v-4104bc36]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-4104bc36]{padding-top:32px}.action[data-v-4104bc36]{padding-top:40px;text-align:center}.VPTeamMembersItem[data-v-d2c1da53]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-d2c1da53]{padding:32px}.VPTeamMembersItem.small .data[data-v-d2c1da53]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-d2c1da53]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-d2c1da53]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-d2c1da53]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-d2c1da53]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-d2c1da53]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-d2c1da53]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-d2c1da53]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-d2c1da53]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-d2c1da53]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-d2c1da53]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-d2c1da53]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-d2c1da53]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-d2c1da53]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-d2c1da53]{text-align:center}.avatar[data-v-d2c1da53]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-d2c1da53]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-d2c1da53]{margin:0;font-weight:600}.affiliation[data-v-d2c1da53]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-d2c1da53]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-d2c1da53]:hover{color:var(--vp-c-brand-1)}.desc[data-v-d2c1da53]{margin:0 auto}.desc[data-v-d2c1da53] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-d2c1da53]{display:flex;justify-content:center;height:56px}.sp-link[data-v-d2c1da53]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-d2c1da53]:hover,.sp .sp-link.link[data-v-d2c1da53]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-d2c1da53]{margin-right:8px;font-size:16px}.VPTeamMembers.small .container[data-v-6e1ebfd7]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-6e1ebfd7]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-6e1ebfd7]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-6e1ebfd7]{max-width:876px}.VPTeamMembers.medium .container[data-v-6e1ebfd7]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-6e1ebfd7]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-6e1ebfd7]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-6e1ebfd7]{max-width:760px}.container[data-v-6e1ebfd7]{display:grid;gap:24px;margin:0 auto;max-width:1152px}.VPTeamPage[data-v-5bb8c726]{margin:96px 0}@media (min-width: 768px){.VPTeamPage[data-v-5bb8c726]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-5bb8c726-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamPageSection+.VPTeamPageSection[data-v-5bb8c726-s],.VPTeamMembers+.VPTeamPageSection[data-v-5bb8c726-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-5bb8c726-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-5bb8c726-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-5bb8c726-s],.VPTeamMembers+.VPTeamPageSection[data-v-5bb8c726-s]{margin-top:96px}}.VPTeamMembers[data-v-5bb8c726-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-5bb8c726-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-5bb8c726-s]{padding:0 64px}}.VPTeamPageSection[data-v-bb94f0cd]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-bb94f0cd]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-bb94f0cd]{padding:0 64px}}.title[data-v-bb94f0cd]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-bb94f0cd]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-bb94f0cd]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-bb94f0cd]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-bb94f0cd]{padding-top:40px}.VPTeamPageTitle[data-v-940aa655]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-940aa655]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-940aa655]{padding:80px 64px 48px}}.title[data-v-940aa655]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-940aa655]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-940aa655]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-940aa655]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: hsl(43, 66%, 49%);--vp-c-brand-2: hsl(35, 67%, 47%);--vp-c-brand-3: hsl(44, 69%, 64%);--vp-c-brand-soft: hsla(54, 30%, 35%, .161);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft)}.dark{--vp-c-brand-1: hsl(44, 69%, 64%);--vp-c-brand-2: rgb(200, 133, 40);--vp-c-brand-3: hsl(43, 66%, 49%);--vp-c-brand-soft: hsla(54, 30%, 35%, .161)}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1)}:root{--vp-home-hero-name-color: transparent;--vp-home-hero-name-background: -webkit-linear-gradient(120deg, #e5582a 30%, #e3c164);--vp-home-hero-image-background-image: linear-gradient(32deg, #e52a2a 37%, #d0a73e 5%);--vp-home-hero-image-filter: blur(44px)}@media (min-width: 640px){:root{--vp-home-hero-image-filter: blur(56px)}}@media (min-width: 960px){:root{--vp-home-hero-image-filter: blur(68px)}}:root{--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-brand-soft);--vp-custom-block-tip-code-bg: var(--vp-c-brand-soft)}.DocSearch{--docsearch-primary-color: var(--vp-c-brand-1) !important}#trusted-by-wrapper{margin:0 auto;display:flex;justify-content:center;flex-direction:column;align-items:center}#small-text{font-size:.8rem;display:block;margin:1rem;color:var(--vp-c-text-2);text-align:center}#small-text a{color:var(--vp-c-text-1);text-decoration:underline}#small-text a:hover{text-decoration:none}#trusted-by{display:flex;align-items:center;justify-content:space-around;background-color:var(--vp-c-bg-soft);border-radius:12px;gap:2rem;width:min(100%,1152px);flex-wrap:wrap;margin:0 24px;min-height:20vh;padding:24px}#trusted-by a{filter:contrast(0);width:128px;transition:all .2s ease-in}#trusted-by a:hover{filter:none}@media (min-width: 960px){#trusted-by{margin:0 64px}}@media (min-width: 640px){#trusted-by{margin:0 48px}}.contributors{margin-top:2rem;display:flex;justify-content:center;align-items:center;flex-wrap:wrap;gap:1rem}.VPTeamMembers.medium.count-1{display:flex;justify-content:center}.VPCarbonAds[data-v-89a5407e]{display:flex;justify-content:center;align-items:center;padding:24px;border-radius:12px;min-height:256px;text-align:center;line-height:18px;font-size:12px;font-weight:500;background-color:var(--vp-carbon-ads-bg-color)}.VPCarbonAds[data-v-89a5407e] img{margin:0 auto;border-radius:6px}.VPCarbonAds[data-v-89a5407e] .carbon-text{display:block;margin:0 auto;padding-top:12px;color:var(--vp-carbon-ads-text-color);transition:color .25s}.VPCarbonAds[data-v-89a5407e] .carbon-text:hover{color:var(--vp-carbon-ads-hover-text-color)}.VPCarbonAds[data-v-89a5407e] .carbon-poweredby{display:block;padding-top:6px;font-size:11px;font-weight:500;color:var(--vp-carbon-ads-poweredby-color);text-transform:uppercase;transition:color .25s}.VPCarbonAds[data-v-89a5407e] .carbon-poweredby:hover{color:var(--vp-carbon-ads-hover-poweredby-color)}.VPCarbonAds[data-v-89a5407e]>div{display:none}.VPCarbonAds[data-v-89a5407e]>div:first-of-type{display:block} diff --git a/config.html b/config.html index 0c4654d..0be8cec 100644 --- a/config.html +++ b/config.html @@ -6,14 +6,14 @@ setupCache() | Axios Cache Interceptor - + - + - + - + @@ -51,7 +51,7 @@ -
Skip to content

setupCache()

The setupCache function receives the axios instance and a set of optional properties described below. This modifies the axios instance in place and returns it.

ts
const axios = setupCache(axiosInstance, OPTIONS);

TIP

The setupCache function receives global options and all request specifics ones too. This way, you can customize the defaults for all requests.

TIP

If you want to use the same cache interceptor for all your axios instances, you can call setupCache with the default axios instance.

ts
import Axios from 'axios';
+    
Skip to content

setupCache()

The setupCache function receives the axios instance and a set of optional properties described below. This modifies the axios instance in place and returns it.

ts
const axios = setupCache(axiosInstance, OPTIONS);

TIP

The setupCache function receives global options and all request specifics ones too. This way, you can customize the defaults for all requests.

TIP

If you want to use the same cache interceptor for all your axios instances, you can call setupCache with the default axios instance.

ts
import Axios from 'axios';
 setupCache(Axios, OPTIONS);

location

optional
  • Type: InstanceLocation
  • Default: typeof window === 'undefined' ? 'server' : 'client'

A hint to the library about where the axios instance is being used.

Used to take some decisions like handling or not Cache-Control: private.

ts
// NodeJS
 const cache = setupCache(Axios.create(), {
   location: 'server'
@@ -83,8 +83,8 @@
 });
 
 // Disables debug. (default)
-setupCache(axiosInstance, { debug: undefined });

Made with ❤️

- +setupCache(axiosInstance, { debug: undefined });

Made with ❤️

+ \ No newline at end of file diff --git a/config/request-specifics.html b/config/request-specifics.html index 1cc55c6..4a69ca6 100644 --- a/config/request-specifics.html +++ b/config/request-specifics.html @@ -6,14 +6,14 @@ Request specifics | Axios Cache Interceptor - + - + - + - + @@ -51,11 +51,16 @@ -
Skip to content

Request specifics

Each request can have its own cache customization, by using the cache property. This way, you can have requests behaving differently from each other without much effort.

The inline documentation is self explanatory, but here is a shortly brief of what each property does:

TIP

You can override every request specific property when creating the cached axios client, the same way you do with the global options.

id

optional
  • Type: string
  • default: (auto generated by the current key generator)

The Request ID used in this request.

It may have been generated by the Key Generator or a custom one provided by config.id

cache

optional
  • Type: false or Partial<CacheProperties<R, D>>.
  • Default: {} (Inherits from global configuration)

TIP

As this property is optional, when not provided, all properties will inherit from global configuration

The cache option available through the request config is where all the cache customization happens.

Setting the cache property to false will disable the cache for this request.

This does not mean that the cache will be excluded from the storage, in which case, you can do that by deleting the storage entry:

ts
// Make a request with cache disabled.
+    
Skip to content

Request specifics

Each request can have its own cache customization, by using the cache property. This way, you can have requests behaving differently from each other without much effort.

The inline documentation is self explanatory, but here is a shortly brief of what each property does:

TIP

You can override every request specific property when creating the cached axios client, the same way you do with the global options.

id

optional
  • Type: string
  • default: (auto generated by the current key generator)

The Request ID used in this request.

It may have been generated by the Key Generator or a custom one provided by config.id

cache

optional
  • Type: false or Partial<CacheProperties<R, D>>.
  • Default: {} (Inherits from global configuration)

TIP

As this property is optional, when not provided, all properties will inherit from global configuration

The cache option available through the request config is where all the cache customization happens.

Setting the cache property to false will disable the cache for this request.

This does not mean that the cache will be excluded from the storage, in which case, you can do that by deleting the storage entry:

ts
// Make a request with cache disabled.
 const { id: requestId } = await axios.get('url', { cache: false });
 
 // Delete the cache entry for this request.
-await axios.storage.remove(requestId);

cache.ttl

optional
  • Type: number
  • Default: 1000 * 60 * 5 (5 Minutes)

WARNING

When using interpretHeader, this value will only be used if the interpreter can’t determine their TTL value to override this one.

The time until the cached value is expired in milliseconds.

If a function is used, it will receive the complete response and waits to return a TTL value

cache.interpretHeader

optional
  • Type: boolean
  • Default: true

TIP

You can override the default behavior by changing the headerInterpreter option.

If activated, when the response is received, the ttl property will be inferred from the requests headers. As described in the MDN docs and HTML specification.

See the actual implementation of the interpretHeader method for more information.

cache.cacheTakeover

optional
  • Type: boolean
  • Default: true

As most of our cache strategies depends on well known defined HTTP headers, most browsers also use those headers to define their own cache strategies and storages.

This can be seen when opening network tab in your browser’s dev tools.

Network tab in Chrome Dev Tools

When your requested routes includes Cache-Control in their responses, you may end up with we and your browser caching the response, resulting in a double layer of cache.

This option solves this by including some predefined headers in the request, that should tell any client / adapter to not cache the response, thus only we will cache it.

These are headers used in our specific request, it won’t affect any other request or response that the server may handle.

Headers included:

  • Cache-Control: no-cache
  • Pragma: no-cache
  • Expires: 0

WARNING

This option will not work on most CORS requests, as the browser will throw Request header field pragma is not allowed by Access-Control-Allow-Headers in preflight response..

When you encounter CORS error, you need to make sure Cache-Control, Pragma and Expires headers are included into your server’s Access-Control-Allow-Headers CORS configuration.

If you cannot do such thing, you can fallback to disabling this option. Learn more on why it should be enabled at #437 and in this StackOverflow answer.

cache.methods

optional
  • Type: Method[]
  • Default: ["get", "head"]

Specifies which methods we should handle and cache. This is where you can enable caching to POST, PUT, DELETE and other methods, as the default is only GET.

If you want to enable cache for POST requests, you can do:

ts
// Globally enables caching for POST requests
+await axios.storage.remove(requestId);

cache.ttl

optional
  • Type: number
  • Default: 1000 * 60 * 5 (5 Minutes)

WARNING

When using interpretHeader, this value will only be used if the interpreter can’t determine their TTL value to override this one.

The time until the cached value is expired in milliseconds.

If a function is used, it will receive the complete response and waits to return a TTL value

cache.interpretHeader

optional
  • Type: boolean
  • Default: true

TIP

You can override the default behavior by changing the headerInterpreter option.

If activated, when the response is received, the ttl property will be inferred from the requests headers. As described in the MDN docs and HTML specification.

See the actual implementation of the interpretHeader method for more information.

cache.cacheTakeover

optional
  • Type: boolean
  • Default: true

As most of our cache strategies depend on well-known HTTP headers, most browsers also use those headers to define their own cache strategies and storages.

This can be seen when opening network tab in your browser’s dev tools.

Network tab in Chrome Dev Tools

When your requested routes include Cache-Control in their responses, you may end up with both the library and your browser caching the response, resulting in a double layer of cache.

This option solves this by including predefined headers in the request that instruct any client/adapter to not cache the response, thus ensuring only the library caches it.

These headers are added to your specific request and won’t affect any other request or response that the server may handle.

Headers included:

  • Cache-Control: no-cache, no-store, must-revalidate
  • Pragma: no-cache
  • Expires: 0

Alternative

While cacheTakeover works for most browsers according to this StackOverflow answer, in some rare edge cases it may be unreliable due to browser-specific cache behaviors or network intermediaries.

For maximum reliability, add a unique random query parameter instead:

ts
axios.get(
+  `/api/data?cachebuster=${Math.random().toString(36).slice(2)}`,
+  {
+    id: 'api-data-endpoint' // Keep same cache key despite different URLs
+  }
+);

Your backend can ignore the cachebuster value. This guarantees no browser caching while preserving axios-cache-interceptor functionality.

CORS Considerations

This option will not work on CORS requests with restricted headers, as the browser will throw: Request header field Pragma is not allowed by Access-Control-Allow-Headers in preflight response.

When you encounter CORS errors, you need to ensure Cache-Control, Pragma, and Expires headers are included in your server’s Access-Control-Allow-Headers CORS configuration.

If you cannot modify the CORS configuration, you can:

  1. Disable this option (cacheTakeover: false)
  2. Use the query parameter approach mentioned above

Learn more about why this should be enabled at #437 and in this StackOverflow answer.

cache.methods

optional
  • Type: Method[]
  • Default: ["get", "head"]

Specifies which methods we should handle and cache. This is where you can enable caching to POST, PUT, DELETE and other methods, as the default is only GET.

If you want to enable cache for POST requests, you can do:

ts
// Globally enables caching for POST requests
 const axios = setupCache(instance, {
   methods: ['get', 'post']
 });
@@ -136,8 +141,8 @@
 
 // After the network lookup ends, we have fresh data and can
 // re-render the UI with confidence
-render(response.data);

Made with ❤️

- +render(response.data);

Made with ❤️

+ \ No newline at end of file diff --git a/config/request-specifics.md b/config/request-specifics.md index cc827ec..af8165f 100644 --- a/config/request-specifics.md +++ b/config/request-specifics.md @@ -96,8 +96,7 @@ method for more information. * Type: `boolean` * Default: `true` -As most of our cache strategies depends on well known defined HTTP headers, most browsers -also use those headers to define their own cache strategies and storages. +As most of our cache strategies depend on well-known HTTP headers, most browsers also use those headers to define their own cache strategies and storages. ::: details This can be seen when opening network tab in your browser's dev tools. @@ -105,34 +104,50 @@ also use those headers to define their own cache strategies and storages. ::: -When your requested routes includes `Cache-Control` in their responses, you may end up -with we and your browser caching the response, resulting in a **double layer of cache**. +When your requested routes include `Cache-Control` in their responses, you may end up with both the library and your browser caching the response, resulting in a **double layer of cache**. -This option solves this by including some predefined headers in the request, that should -tell any client / adapter to not cache the response, thus only we will cache it. +This option solves this by including predefined headers in the request that instruct any client/adapter to not cache the response, thus ensuring only the library caches it. -**These are headers used in our specific request, it won't affect any other request or -response that the server may handle.** +**These headers are added to your specific request and won't affect any other request or response that the server may handle.** Headers included: -* `Cache-Control: no-cache` +* `Cache-Control: no-cache, no-store, must-revalidate` * `Pragma: no-cache` * `Expires: 0` -::: warning +::: tip Alternative -This option will not work on most **CORS** requests, as the browser will throw -`Request header field pragma is not allowed by Access-Control-Allow-Headers in preflight response.`. +While `cacheTakeover` works for most browsers according to [this StackOverflow answer](https://stackoverflow.com/a/2068407), in some rare edge cases it may be unreliable due to browser-specific cache behaviors or network intermediaries. -When you encounter CORS error, you need to make sure `Cache-Control`, `Pragma` and -`Expires` headers are included into your server's `Access-Control-Allow-Headers` CORS -configuration. +For maximum reliability, add a unique random query parameter instead: -If you cannot do such thing, you can fallback to disabling this option. Learn more on why -it should be enabled at -[#437](https://github.com/arthurfiorette/axios-cache-interceptor/issues/437#issuecomment-1361262194) -and in this [StackOverflow](https://stackoverflow.com/a/62781874/14681561) answer. +```ts +axios.get( + `/api/data?cachebuster=${Math.random().toString(36).slice(2)}`, + { + id: 'api-data-endpoint' // Keep same cache key despite different URLs + } +); +``` + +Your backend can ignore the `cachebuster` value. This **guarantees** no browser caching while preserving axios-cache-interceptor functionality. + +::: + +::: warning CORS Considerations + +This option will not work on **CORS** requests with restricted headers, as the browser will throw: +`Request header field Pragma is not allowed by Access-Control-Allow-Headers in preflight response.` + +When you encounter CORS errors, you need to ensure `Cache-Control`, `Pragma`, and `Expires` headers are included in your server's `Access-Control-Allow-Headers` CORS configuration. + +If you cannot modify the CORS configuration, you can: + +1. Disable this option (`cacheTakeover: false`) +2. Use the query parameter approach mentioned above + +Learn more about why this should be enabled at [#437](https://github.com/arthurfiorette/axios-cache-interceptor/issues/437#issuecomment-1361262194) and in this [StackOverflow answer](https://stackoverflow.com/a/2068407). ::: diff --git a/config/response-object.html b/config/response-object.html index 27cff33..744de62 100644 --- a/config/response-object.html +++ b/config/response-object.html @@ -6,14 +6,14 @@ Response object | Axios Cache Interceptor - + - + - + - + @@ -51,12 +51,12 @@ -
Skip to content

Response object

Axios cache interceptor returns a slightly changed than the original axios response. Containing information about the cache and other needed properties.

id

  • Type: string

The Request ID used in this request.

It may have been generated by the Key Generator or a custom one provided by config.id

ts
const response = await axios.get('url', { id: 'my-overridden-id' });
+    
Skip to content

Response object

Axios cache interceptor returns a slightly changed than the original axios response. Containing information about the cache and other needed properties.

id

  • Type: string

The Request ID used in this request.

It may have been generated by the Key Generator or a custom one provided by config.id

ts
const response = await axios.get('url', { id: 'my-overridden-id' });
 
 // This request used 'my-overridden-id' and
 // not the one generated by the key generator
-response.id === 'my-overridden-id';

cached

  • Type: boolean

A simple boolean indicating if the request returned data from the cache or from the network call.

TIP

This does not indicated if the request was capable of being cached or not, as options like cache.override may have been enabled.

stale

  • Type: boolean

A simple boolean indicating if the request returned data is from valid or stale cache.

Made with ❤️

- +response.id === 'my-overridden-id';

cached

  • Type: boolean

A simple boolean indicating if the request returned data from the cache or from the network call.

TIP

This does not indicated if the request was capable of being cached or not, as options like cache.override may have been enabled.

stale

  • Type: boolean

A simple boolean indicating if the request returned data is from valid or stale cache.

Made with ❤️

+ \ No newline at end of file diff --git a/generated/benchmark.html b/generated/benchmark.html index 6d1bdeb..00e7c1e 100644 --- a/generated/benchmark.html +++ b/generated/benchmark.html @@ -6,14 +6,14 @@ Result | Axios Cache Interceptor - + - + - + - + @@ -51,8 +51,8 @@ -
Skip to content

Result

Run at Sun, 29 Jan 2023 01:24:01 GMT

Commit: 3db90e8c262c48d011fdd53bcda105512434e56e

CACHE INTERCEPTOR

  • Operations: 41275/s
  • Network requests: 1 of 205788
  • Performance: 100.00%

CACHE ADAPTER

  • Operations: 37683/s
  • Network requests: 2 of 185780
  • Performance: 91.30%

AXIOS

  • Operations: 1970/s
  • Network requests: 9773 of 9773
  • Performance: 4.77%

Made with ❤️

- +
Skip to content

Result

Run at Sun, 29 Jan 2023 01:24:01 GMT

Commit: 3db90e8c262c48d011fdd53bcda105512434e56e

CACHE INTERCEPTOR

  • Operations: 41275/s
  • Network requests: 1 of 205788
  • Performance: 100.00%

CACHE ADAPTER

  • Operations: 37683/s
  • Network requests: 2 of 185780
  • Performance: 91.30%

AXIOS

  • Operations: 1970/s
  • Network requests: 9773 of 9773
  • Performance: 4.77%

Made with ❤️

+ \ No newline at end of file diff --git a/guide.html b/guide.html index 0785c9a..e481a9c 100644 --- a/guide.html +++ b/guide.html @@ -6,14 +6,14 @@ Introduction | Axios Cache Interceptor - + - + - + - + @@ -51,8 +51,8 @@ -
Skip to content

Introduction

Axios Cache Interceptor is a, as it name says, a interceptor for axios to handle caching. It was created to help developers call axios multiple times without having to worry about overloading the network or coding himself a simple and buggy cache system.

Each request goes through an interceptor applied to your axios instance. There, we handle each request and decide if we should send it to the network or return a cached response.

How it works

By using axios interceptors instead of adapters, each request is passed through the interceptor before calling the adapter and before returning to the original caller. Adapters are the final step and they are responsible for the actual network call, so, by choosing to use interceptors, we create a minimally invasive approach that allows you to still use the axios adapter of your choice.

Before the request is delivered to the adapter, our request interceptor checks if the request have already been cached and if it’s a valid one, checks if the request should be cached (sometimes you don’t want cache at all, and it’s ok), if there’s already a request sent to the network that we can wait for it and many more other checks.

After the adapter gets the response, we check if it belongs to a cacheable request, saves it into the storage, resolves other requests awaiting for the same resource and finally returns the response to the original caller.

Features

  • TTL, Cache-Control and ETag.
  • Return previous cached request if the new one failed.
  • Handles parallel requests
  • 100% Customizable
  • Built-in storages like In-Memory, Local Storage and Session Storage.
  • Less than 4.3Kb minified and gzipped.
  • Development mode to debug your requests.
  • 22 times faster than using axios and 8% faster than axios-cache-adapter.
  • And much more…

Why not…?

axios-cache-adapter

The creation of this library is heavily inspired by axios-cache-adapter. It was a great library but now it is unmaintained and has a lot of unresolved issues. Also, it weights more than 4x the size of this library with less features and less performance.

Fetch and some state management library?

As this library was built to be used with axios and to handle storage itself, I can assure that it is more performant that any glued code you may find and/or write yourself. About state management libraries and other similar things, this blog post explains why cache is more correct, architectural way, instead of state.

Made with ❤️

- +
Skip to content

Introduction

Axios Cache Interceptor is a, as it name says, a interceptor for axios to handle caching. It was created to help developers call axios multiple times without having to worry about overloading the network or coding himself a simple and buggy cache system.

Each request goes through an interceptor applied to your axios instance. There, we handle each request and decide if we should send it to the network or return a cached response.

How it works

By using axios interceptors instead of adapters, each request is passed through the interceptor before calling the adapter and before returning to the original caller. Adapters are the final step and they are responsible for the actual network call, so, by choosing to use interceptors, we create a minimally invasive approach that allows you to still use the axios adapter of your choice.

Before the request is delivered to the adapter, our request interceptor checks if the request have already been cached and if it’s a valid one, checks if the request should be cached (sometimes you don’t want cache at all, and it’s ok), if there’s already a request sent to the network that we can wait for it and many more other checks.

After the adapter gets the response, we check if it belongs to a cacheable request, saves it into the storage, resolves other requests awaiting for the same resource and finally returns the response to the original caller.

Features

  • TTL, Cache-Control and ETag.
  • Return previous cached request if the new one failed.
  • Handles parallel requests
  • 100% Customizable
  • Built-in storages like In-Memory, Local Storage and Session Storage.
  • Less than 4.3Kb minified and gzipped.
  • Development mode to debug your requests.
  • 22 times faster than using axios and 8% faster than axios-cache-adapter.
  • And much more…

Why not…?

axios-cache-adapter

The creation of this library is heavily inspired by axios-cache-adapter. It was a great library but now it is unmaintained and has a lot of unresolved issues. Also, it weights more than 4x the size of this library with less features and less performance.

Fetch and some state management library?

As this library was built to be used with axios and to handle storage itself, I can assure that it is more performant that any glued code you may find and/or write yourself. About state management libraries and other similar things, this blog post explains why cache is more correct, architectural way, instead of state.

Made with ❤️

+ \ No newline at end of file diff --git a/guide/comparison.html b/guide/comparison.html index ede6c19..217fa96 100644 --- a/guide/comparison.html +++ b/guide/comparison.html @@ -6,14 +6,14 @@ Comparison | Axios Cache Interceptor - + - + - + - + @@ -51,7 +51,7 @@ -
Skip to content

Comparison

This comparison page aims to be detailed, unbiased, and up-to-date.
If you see any information that may be inaccurate or could be improved otherwise, please feel free to suggest changes.

Cache Features

✅ Supported 1st-class and documented.
+    
Skip to content

Comparison

This comparison page aims to be detailed, unbiased, and up-to-date.
If you see any information that may be inaccurate or could be improved otherwise, please feel free to suggest changes.

Cache Features

✅ Supported 1st-class and documented.
 🔶 Supported and documented, but requires custom user-code to implement.
 🟡 Can be done, may not be documented.
 🛑 Not officially supported or documented.
Axios Cache InterceptorAxios Cache AdapterCachios
Compared versionLatest2.7.33.1.1
Expiration with TTL
Per-request configuration
Global and custom instance
Cache-Control header🛑
Expires & Age header🟡🛑
ETag and If-None-Match header🛑🛑
If-Modified-Size header🛑🛑
Bundle size4.4Kb (gzip)18.9Kb (gzip)19.5Kb (gzip)
Typescript declaration✅ (Custom interface)✅ (Applied globally)✅(Applied globally)
Custom cache keys
Multiple storages🔶 (Only localForage)
Built-in redis storage🔶🟡
Handles storage quota errors
Node & Web compatible🛑
Invalidate cache based on response🛑
Update cache based on response🟡🟡
Predicate to test if request should be cached🛑
Concurrent requests🔶#231🛑
Cache fallback on network errors
Debug / Development mode🛑

Benchmark

The benchmark is composed of axios throughput tests to compare the performance of this library, axios-cache-adapter and axios as it is.

md
# Result
@@ -76,8 +76,8 @@
 
 - Operations: 1970/s
 - Network requests: 9773 of 9773
-- Performance: 4.77%

Made with ❤️

- +- Performance: 4.77%

Made with ❤️

+ \ No newline at end of file diff --git a/guide/comparison.md b/guide/comparison.md index 0c91113..40413a7 100644 --- a/guide/comparison.md +++ b/guide/comparison.md @@ -46,5 +46,3 @@ The [benchmark](https://github.com/arthurfiorette/axios-cache-interceptor/blob/main/benchmark/index.js) is composed of axios throughput tests to compare the performance of this library, `axios-cache-adapter` and axios as it is. - -<<< @/generated/benchmark.md {5,11} diff --git a/guide/debugging.html b/guide/debugging.html index 68a82e1..d451981 100644 --- a/guide/debugging.html +++ b/guide/debugging.html @@ -6,14 +6,14 @@ Debugging | Axios Cache Interceptor - + - + - + - + @@ -51,7 +51,7 @@ -
Skip to content

Debugging

I’m certainly sure that along the way you will find some cache behavior that is not the expected to the current situation. To help with that, the library has a separate robust build with support to debug logs enabled.

You can use it by changing the setupCache import:

ts
import Axios from 'axios';
+    
Skip to content

Debugging

I’m certainly sure that along the way you will find some cache behavior that is not the expected to the current situation. To help with that, the library has a separate robust build with support to debug logs enabled.

You can use it by changing the setupCache import:

ts
import Axios from 'axios';
 
 // Only import from `/dev` where you import `setupCache`.
 import { setupCache } from 'axios-cache-interceptor';
@@ -145,8 +145,8 @@
     "id": "-644704205",
     "msg": "Returning cached response"
   }
-]

Made with ❤️

- +]

Made with ❤️

+ \ No newline at end of file diff --git a/guide/getting-started.html b/guide/getting-started.html index ee1d6e3..107625a 100644 --- a/guide/getting-started.html +++ b/guide/getting-started.html @@ -6,14 +6,14 @@ Getting Started | Axios Cache Interceptor - + - + - + - + @@ -51,12 +51,12 @@ -
Skip to content

Getting Started

Looking for axios v0?

Install

Add Axios Cache Interceptor and Axios to your project using your favorite package manager:

bash
npm install axios@^1 axios-cache-interceptor@^1
html
<!-- Development UMD build for ES2017+ (~14.2 KiB) -->
+    
Skip to content

Getting Started

Looking for axios v0?

Install

Add Axios Cache Interceptor and Axios to your project using your favorite package manager:

bash
npm install axios@^1 axios-cache-interceptor@^1
html
<!-- Development UMD build for ES2017+ (~14.2 KiB) -->
 <script src="https://cdn.jsdelivr.net/npm/axios-cache-interceptor@1/dev/index.bundle.js"></script>
 
 <!-- Production UMD build for ES5+ (~16.4 KiB) -->
 <script src="https://cdn.jsdelivr.net/npm/axios-cache-interceptor@1/dist/index.bundle.js"></script>
ts
import Axios from 'https://cdn.skypack.dev/axios';
-import { setupCache } from 'https://cdn.skypack.dev/axios-cache-interceptor';

Setup

After installing, you can import the package and apply the interceptor to your axios instance, as shown below:

ts
import Axios from 'axios';
+import { setupCache } from 'https://cdn.skypack.dev/axios-cache-interceptor';

Setup

After installing, you can import the package and apply the interceptor to your axios instance, as shown below:

ts
import Axios from 'axios';
 import { setupCache } from 'axios-cache-interceptor';
 
 const instance = Axios.create();
@@ -104,8 +104,8 @@
 const [res1, res2] = await Promise.all([req1, req2]);
 
 res1.cached; // false
-res2.cached; // true

Just the above is sufficient for most use cases. However, you can also customize each cache behavior by passing a configuration object to the setupCache function. And you can also customize some behaviors each request by using the cache option in the request config.

Support Table

Most of axios v0 breaking changes were about typing issues, so your version may work with one outside of this table. Axios and Axios Cache Interceptor v0 are not compatible with Axios and Axios Cache Interceptor v1

Note: Axios was not defined as a peerDependency for all v0 versions, because it had a non-stable semver version. See #145 (Comment)

AxiosAxios Cache Interceptor
>= v1.7.8>= v1.7.0
>= v1.6>= v1.3.0 && <= 1.6.2
>= v1.4>= v1.2.0
>= v1.3.1>= v1
>= v0.27>= v0.10.3
>= v0.26>= v0.8.4
~ v0.25~ v0.8.4
~ v0.24>= v0.5 && <= 0.8.3
~ v0.23~ v0.4
~ v0.22~ v0.3
v0.21<= v0.2

Read More

Some useful links to get you more familiar with the library:

Made with ❤️

- +res2.cached; // true

Just the above is sufficient for most use cases. However, you can also customize each cache behavior by passing a configuration object to the setupCache function. And you can also customize some behaviors each request by using the cache option in the request config.

Support Table

Most of axios v0 breaking changes were about typing issues, so your version may work with one outside of this table. Axios and Axios Cache Interceptor v0 are not compatible with Axios and Axios Cache Interceptor v1

Note: Axios was not defined as a peerDependency for all v0 versions, because it had a non-stable semver version. See #145 (Comment)

AxiosAxios Cache Interceptor
>= v1.7.8>= v1.7.0
>= v1.6>= v1.3.0 && <= 1.6.2
>= v1.4>= v1.2.0
>= v1.3.1>= v1
>= v0.27>= v0.10.3
>= v0.26>= v0.8.4
~ v0.25~ v0.8.4
~ v0.24>= v0.5 && <= 0.8.3
~ v0.23~ v0.4
~ v0.22~ v0.3
v0.21<= v0.2

Read More

Some useful links to get you more familiar with the library:

Made with ❤️

+ \ No newline at end of file diff --git a/guide/interceptors.html b/guide/interceptors.html index 4b39a84..415fc51 100644 --- a/guide/interceptors.html +++ b/guide/interceptors.html @@ -6,14 +6,14 @@ Other Interceptors | Axios Cache Interceptor - + - + - + - + @@ -51,7 +51,7 @@ -
Skip to content

Other Interceptors

When combining axios-cache-interceptors with other interceptors, you may encounter some inconsistencies. Which is explained in the next section.

TL;DR

  • Request interceptors registered before setupCache() are ran before and registrations made after are ran after.
  • Response interceptors registered before setupCache() are ran after and registrations made after are ran before.

Explanation

Axios interceptors are ran differently for the request and response ones.

  • Request interceptors are FILO (First In Last Out)
  • Response interceptors are FIFO (First In First Out)

As explained better in the Axios documentation and in this issue.

ts
// This will be ran BEFORE the cache interceptor
+    
Skip to content

Other Interceptors

When combining axios-cache-interceptors with other interceptors, you may encounter some inconsistencies. Which is explained in the next section.

TL;DR

  • Request interceptors registered before setupCache() are ran before and registrations made after are ran after.
  • Response interceptors registered before setupCache() are ran after and registrations made after are ran before.

Explanation

Axios interceptors are ran differently for the request and response ones.

  • Request interceptors are FILO (First In Last Out)
  • Response interceptors are FIFO (First In First Out)

As explained better in the Axios documentation and in this issue.

ts
// This will be ran BEFORE the cache interceptor
 axios.interceptors.request.use((req) => req);
 
 // This will be ran AFTER the cache interceptor
@@ -80,8 +80,8 @@
   }
 });
 
-response.data; // Will be a string and will be able to be cached.

This library cannot handle streams or buffers, so if you still need response.data to be a stream or buffer, you will need to cache it manually.

If you can collect the response data into a serializable format, axios-cache-interceptor can handle it for you with help of the transformResponse option.

Made with ❤️

- +response.data; // Will be a string and will be able to be cached.

This library cannot handle streams or buffers, so if you still need response.data to be a stream or buffer, you will need to cache it manually.

If you can collect the response data into a serializable format, axios-cache-interceptor can handle it for you with help of the transformResponse option.

Made with ❤️

+ \ No newline at end of file diff --git a/guide/invalidating-cache.html b/guide/invalidating-cache.html index 707220f..3b41104 100644 --- a/guide/invalidating-cache.html +++ b/guide/invalidating-cache.html @@ -6,14 +6,14 @@ Invalidating Cache | Axios Cache Interceptor - + - + - + - + @@ -51,7 +51,7 @@ -
Skip to content

Invalidating Cache

When using cache-first approaches to improve performance, data inconsistency becomes your major problem. That occurs because you can mutate data in the server and others also can too. It becomes impossible to really know what the current state of the data is in real time without communicating with the server.

WARNING

All available revalidation methods only work when the request is successful.

If you are wanting to revalidate with a non standard 2XX status code, make sure to enable it at validateStatus or revalidate it manually as shown below.

Take a look at this simple example:

  1. User lists all available posts, the server returns an empty array.
  2. User proceeds to create a new post, server returns 200 OK.
  3. Your frontend navigates to the post list page.
  4. The post list page still shows 0 posts because it had a recent cache for that request.
  5. Your client shows 0 posts, but the server actually has 1 post.

Revalidation after mutation

In most cases, you are the one responsible for that inconsistency, like in the above example when the client itself initiated the mutation request. When that happens, you are capable of invalidating the cache for all places you have changed too.

The cache.update option is available for every request that you make, and it will be the go-to tool for invalidation.

TIP

By centralizing your requests into separate methods, you are more likely to keep track of custom IDs you use for each request, thus making it easier to reference and invalidate after.

Programmatically

If the mutation you made was just simple changes, you can get the mutation response and programmatically update your cache.

Again considering the first example, we can just do an array.push to the list-posts cache and we are good to go.

ts
// Uses `list-posts` id to be able to reference it later.
+    
Skip to content

Invalidating Cache

When using cache-first approaches to improve performance, data inconsistency becomes your major problem. That occurs because you can mutate data in the server and others also can too. It becomes impossible to really know what the current state of the data is in real time without communicating with the server.

WARNING

All available revalidation methods only work when the request is successful.

If you are wanting to revalidate with a non standard 2XX status code, make sure to enable it at validateStatus or revalidate it manually as shown below.

Take a look at this simple example:

  1. User lists all available posts, the server returns an empty array.
  2. User proceeds to create a new post, server returns 200 OK.
  3. Your frontend navigates to the post list page.
  4. The post list page still shows 0 posts because it had a recent cache for that request.
  5. Your client shows 0 posts, but the server actually has 1 post.

Revalidation after mutation

In most cases, you are the one responsible for that inconsistency, like in the above example when the client itself initiated the mutation request. When that happens, you are capable of invalidating the cache for all places you have changed too.

The cache.update option is available for every request that you make, and it will be the go-to tool for invalidation.

TIP

By centralizing your requests into separate methods, you are more likely to keep track of custom IDs you use for each request, thus making it easier to reference and invalidate after.

Programmatically

If the mutation you made was just simple changes, you can get the mutation response and programmatically update your cache.

Again considering the first example, we can just do an array.push to the list-posts cache and we are good to go.

ts
// Uses `list-posts` id to be able to reference it later.
 function listPosts() {
   return axios.get('/posts', {
     id: 'list-posts'
@@ -139,8 +139,8 @@
       }
     }
   });
-}

Summing up

When applying any kind of cache to any kind of application, you chose to trade data consistency for performance. And, most of the time that is OK.

The best cache strategy is a combination of all of them. TTL, custom revalidation, stale while revalidate and all the others together are the best solution.

The only real tip here is to you put on a scale the amount of inconsistency you are willing to give up for the performance you are willing to gain. Sometimes, not caching is the best solution.

Made with ❤️

- +}

Summing up

When applying any kind of cache to any kind of application, you chose to trade data consistency for performance. And, most of the time that is OK.

The best cache strategy is a combination of all of them. TTL, custom revalidation, stale while revalidate and all the others together are the best solution.

The only real tip here is to you put on a scale the amount of inconsistency you are willing to give up for the performance you are willing to gain. Sometimes, not caching is the best solution.

Made with ❤️

+ \ No newline at end of file diff --git a/guide/request-id.html b/guide/request-id.html index 8d54a70..5b5871f 100644 --- a/guide/request-id.html +++ b/guide/request-id.html @@ -6,14 +6,14 @@ Request Id | Axios Cache Interceptor - + - + - + - + @@ -51,7 +51,7 @@ -
Skip to content

Request Id

We can distinguish requests from each other by assigning an non unique id to each request. These IDs are the same provided to the storage as keys.

Each ID is responsible for binding a cache to its request, for referencing or invalidating it later and to make the interceptor use the same cache for requests to the same endpoint and parameters.

The default id generator is smart enough to generate the same ID for theoretically same requests. { baseURL: 'https://a.com/', url: '/b' } == { url: 'https://a.com/b/' }.

ts
import Axios from 'axios';
+    
Skip to content

Request Id

We can distinguish requests from each other by assigning an non unique id to each request. These IDs are the same provided to the storage as keys.

Each ID is responsible for binding a cache to its request, for referencing or invalidating it later and to make the interceptor use the same cache for requests to the same endpoint and parameters.

The default id generator is smart enough to generate the same ID for theoretically same requests. { baseURL: 'https://a.com/', url: '/b' } == { url: 'https://a.com/b/' }.

ts
import Axios from 'axios';
 import { setupCache } from 'axios-cache-interceptor';
 
 const axios = setupCache(Axios);
@@ -74,8 +74,8 @@
     url: request.url,
     custom: logicWith(request.method, request.url)
   }))
-});

Made with ❤️

- +});

Made with ❤️

+ \ No newline at end of file diff --git a/guide/storages.html b/guide/storages.html index 47dbf37..4b41417 100644 --- a/guide/storages.html +++ b/guide/storages.html @@ -6,14 +6,14 @@ Storages | Axios Cache Interceptor - + - + - + - + @@ -51,7 +51,7 @@ -
Skip to content

Storages

Storages are responsible for saving, retrieving and serializing (if needed) cache data. They are completely customizable and you can code your own, or use one published on NPM.

They are meant to be the middleware between the cache interceptor and some sort of database (persistent or not) you may have. Our interceptors will call its methods internally to save and retrieve data, but you can do it manually to work programmatically your own way.

Currently, two storages are included in the library by default:

Memory Storage

WARNING

This is the storage chosen by default

Memory storage is the simplest one. It works everywhere and its values are lost upon page reload or when the process is killed.

If you are directly mutating some response property, you probably will face some reference issues because the storage will also get mutated. To avoid that, you can use the clone: true option to clone the response before saving it or clone: 'double' to also clone both ways, on set() and on get(). Just like #136 and many others.

For long running processes, you can avoid memory leaks by using playing with the cleanupInterval option. And can reduce memory usage with maxEntries.

ts
import Axios from 'axios';
+    
Skip to content

Storages

Storages are responsible for saving, retrieving and serializing (if needed) cache data. They are completely customizable and you can code your own, or use one published on NPM.

They are meant to be the middleware between the cache interceptor and some sort of database (persistent or not) you may have. Our interceptors will call its methods internally to save and retrieve data, but you can do it manually to work programmatically your own way.

Currently, two storages are included in the library by default:

Memory Storage

WARNING

This is the storage chosen by default

Memory storage is the simplest one. It works everywhere and its values are lost upon page reload or when the process is killed.

If you are directly mutating some response property, you probably will face some reference issues because the storage will also get mutated. To avoid that, you can use the clone: true option to clone the response before saving it or clone: 'double' to also clone both ways, on set() and on get(). Just like #136 and many others.

For long running processes, you can avoid memory leaks by using playing with the cleanupInterval option. And can reduce memory usage with maxEntries.

ts
import Axios from 'axios';
 import { setupCache, buildMemoryStorage } from 'axios-cache-interceptor';
 
 setupCache(axios, {
@@ -61,7 +61,7 @@
     /* cleanupInterval default=*/ false,
     /* maxEntries default=*/ false
   )
-});

Options:

  • cloneData: Use true if the data returned by find() should be cloned to avoid mutating the original data outside the set() method. Use 'double' to also clone before saving value in storage using set(). Disabled is default

  • cleanupInterval: The interval in milliseconds to run a setInterval job of cleaning old entries. If false, the job will not be created. Disabled is default

  • maxEntries: The maximum number of entries to keep in the storage. Its hard to determine the size of the entries, so a smart FIFO order is used to determine eviction. If false, no check will be done and you may grow up memory usage. Disabled is default

Web Storage API

If you need persistent caching between page refreshes, you can use the buildWebStorage to get this behavior. It works by connecting our storage API to the browser’s Storage API.

ts
import Axios from 'axios';
+});

Options:

  • cloneData: Use true if the data returned by find() should be cloned to avoid mutating the original data outside the set() method. Use 'double' to also clone before saving value in storage using set(). Disabled is default

  • cleanupInterval: The interval in milliseconds to run a setInterval job of cleaning old entries. If false, the job will not be created. Disabled is default

  • maxEntries: The maximum number of entries to keep in the storage. Its hard to determine the size of the entries, so a smart FIFO order is used to determine eviction. If false, no check will be done and you may grow up memory usage. Disabled is default

Web Storage API

If you need persistent caching between page refreshes, you can use the buildWebStorage to get this behavior. It works by connecting our storage API to the browser’s Storage API.

ts
import Axios from 'axios';
 import { setupCache, buildWebStorage } from 'axios-cache-interceptor';
 
 setupCache(axios, {
@@ -103,8 +103,8 @@
           ? Date.now() +
             (req?.cache && typeof req.cache.ttl === 'number'
               ? req.cache.ttl
-              : // 1 minute in seconds
-                60000)
+              : // 1 minute in milliseconds
+                60_000)
           : // When a stale state has a determined value to expire, we can use it.
           //   Or if the cached value cannot enter in stale state.
           (value.state === 'stale' && value.ttl) ||
@@ -159,8 +159,8 @@
   remove(key) {
     cache.del(key);
   },
-});

Made with ❤️

- +});

Made with ❤️

+ \ No newline at end of file diff --git a/guide/storages.md b/guide/storages.md index 44a2f36..7599321 100644 --- a/guide/storages.md +++ b/guide/storages.md @@ -187,8 +187,8 @@ const redisStorage = buildStorage({ ? Date.now() + (req?.cache && typeof req.cache.ttl === 'number' ? req.cache.ttl - : // 1 minute in seconds - 60000) + : // 1 minute in milliseconds + 60_000) : // When a stale state has a determined value to expire, we can use it. // Or if the cached value cannot enter in stale state. (value.state === 'stale' && value.ttl) || diff --git a/hashmap.json b/hashmap.json index 4a2af3f..7859ade 100644 --- a/hashmap.json +++ b/hashmap.json @@ -1 +1 @@ -{"config.md":"C00Phdwe","config_request-specifics.md":"31Q7kimq","config_response-object.md":"U7zYb2Gi","generated_benchmark.md":"CI-K7IUa","guide.md":"d-o1ySQc","guide_comparison.md":"DU5b-rG0","guide_debugging.md":"CVFh7a0y","guide_getting-started.md":"Ds5NdnOh","guide_interceptors.md":"La_rJDFR","guide_invalidating-cache.md":"Bckt7x3W","guide_request-id.md":"DHclQsmi","guide_storages.md":"CLMxY9uE","index.md":"DLe--HIQ","others_changelog.md":"DH3AxIPz","others_license.md":"_FyZBZ9K"} +{"config.md":"CScI-ExK","config_request-specifics.md":"B6wvTu18","config_response-object.md":"8qsMplLz","generated_benchmark.md":"DZpgBPX8","guide.md":"Ch_3Blm4","guide_comparison.md":"CJjCfmUB","guide_debugging.md":"UDhonkLW","guide_getting-started.md":"X7rsi6EE","guide_interceptors.md":"B6YE2URo","guide_invalidating-cache.md":"D69gSzWZ","guide_request-id.md":"BqDUl7YS","guide_storages.md":"mDfw43wo","index.md":"Cj5fvPtr","others_changelog.md":"DFW69MVv","others_license.md":"Ceq08JKB"} diff --git a/index.html b/index.html index d856243..31ac0de 100644 --- a/index.html +++ b/index.html @@ -6,14 +6,14 @@ Axios Cache Interceptor - + - + - + - + @@ -51,8 +51,8 @@ -
Skip to content

Axios Cache InterceptorPerformant, small and powerful

A cache interceptor for axios made with developers and performance in mind.

Rocket

Our Team

Composed of a diverse group of people from all over the world through our open source community.

Made with ❤️

- +
Skip to content

Axios Cache InterceptorPerformant, small and powerful

A cache interceptor for axios made with developers and performance in mind.

Rocket

Our Team

Composed of a diverse group of people from all over the world through our open source community.

Made with ❤️

+ \ No newline at end of file diff --git a/llms-full.txt b/llms-full.txt index de41ee7..53a2154 100644 --- a/llms-full.txt +++ b/llms-full.txt @@ -47,8 +47,6 @@ The is composed of axios throughput tests to compare the performance of this library, `axios-cache-adapter` and axios as it is. -<<< @/generated/benchmark.md {5,11} - --- --- @@ -910,8 +908,7 @@ method for more information. * Type: `boolean` * Default: `true` -As most of our cache strategies depends on well known defined HTTP headers, most browsers -also use those headers to define their own cache strategies and storages. +As most of our cache strategies depend on well-known HTTP headers, most browsers also use those headers to define their own cache strategies and storages. ::: details This can be seen when opening network tab in your browser's dev tools. @@ -919,34 +916,50 @@ also use those headers to define their own cache strategies and storages. ::: -When your requested routes includes `Cache-Control` in their responses, you may end up -with we and your browser caching the response, resulting in a **double layer of cache**. +When your requested routes include `Cache-Control` in their responses, you may end up with both the library and your browser caching the response, resulting in a **double layer of cache**. -This option solves this by including some predefined headers in the request, that should -tell any client / adapter to not cache the response, thus only we will cache it. +This option solves this by including predefined headers in the request that instruct any client/adapter to not cache the response, thus ensuring only the library caches it. -**These are headers used in our specific request, it won't affect any other request or -response that the server may handle.** +**These headers are added to your specific request and won't affect any other request or response that the server may handle.** Headers included: -* `Cache-Control: no-cache` +* `Cache-Control: no-cache, no-store, must-revalidate` * `Pragma: no-cache` * `Expires: 0` -::: warning +::: tip Alternative -This option will not work on most **CORS** requests, as the browser will throw -`Request header field pragma is not allowed by Access-Control-Allow-Headers in preflight response.`. +While `cacheTakeover` works for most browsers according to [this StackOverflow answer](https://stackoverflow.com/a/2068407), in some rare edge cases it may be unreliable due to browser-specific cache behaviors or network intermediaries. -When you encounter CORS error, you need to make sure `Cache-Control`, `Pragma` and -`Expires` headers are included into your server's `Access-Control-Allow-Headers` CORS -configuration. +For maximum reliability, add a unique random query parameter instead: -If you cannot do such thing, you can fallback to disabling this option. Learn more on why -it should be enabled at -[#437](https://github.com/arthurfiorette/axios-cache-interceptor/issues/437#issuecomment-1361262194) -and in this [StackOverflow](https://stackoverflow.com/a/62781874/14681561) answer. +```ts +axios.get( + `/api/data?cachebuster=${Math.random().toString(36).slice(2)}`, + { + id: 'api-data-endpoint' // Keep same cache key despite different URLs + } +); +``` + +Your backend can ignore the `cachebuster` value. This **guarantees** no browser caching while preserving axios-cache-interceptor functionality. + +::: + +::: warning CORS Considerations + +This option will not work on **CORS** requests with restricted headers, as the browser will throw: +`Request header field Pragma is not allowed by Access-Control-Allow-Headers in preflight response.` + +When you encounter CORS errors, you need to ensure `Cache-Control`, `Pragma`, and `Expires` headers are included in your server's `Access-Control-Allow-Headers` CORS configuration. + +If you cannot modify the CORS configuration, you can: + +1. Disable this option (`cacheTakeover: false`) +2. Use the query parameter approach mentioned above + +Learn more about why this should be enabled at [#437](https://github.com/arthurfiorette/axios-cache-interceptor/issues/437#issuecomment-1361262194) and in this [StackOverflow answer](https://stackoverflow.com/a/2068407). ::: @@ -1664,8 +1677,8 @@ const redisStorage = buildStorage({ ? Date.now() + (req?.cache && typeof req.cache.ttl === 'number' ? req.cache.ttl - : // 1 minute in seconds - 60000) + : // 1 minute in milliseconds + 60_000) : // When a stale state has a determined value to expire, we can use it. // Or if the cached value cannot enter in stale state. (value.state === 'stale' && value.ttl) || diff --git a/others/changelog.html b/others/changelog.html index 624ae31..6178638 100644 --- a/others/changelog.html +++ b/others/changelog.html @@ -6,14 +6,14 @@ Changelog | Axios Cache Interceptor - + - + - + - + @@ -51,8 +51,8 @@ -
Skip to content

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog and this project adheres to Semantic Versioning.

Generated by auto-changelog.

v1.7.0

Commits

v1.7.0 - 2025-03-17

Merged

  • build(deps): bump codecov/codecov-action from 4 to 5 #943
  • docs: add missing ‘different’ word into the code example comment #984
  • build(deps-dev): bump axios from 1.8.2 to 1.8.3 #988
  • build(deps-dev): bump @types/node from 22.13.9 to 22.13.10 #987
  • build(deps-dev): bump axios from 1.8.1 to 1.8.2 #986
  • build(deps-dev): bump @types/node from 22.13.8 to 22.13.9 #985
  • build(deps-dev): bump typescript from 5.7.3 to 5.8.2 #983
  • build(deps-dev): bump @types/node from 22.13.5 to 22.13.8 #982
  • build(deps-dev): bump axios from 1.8.0 to 1.8.1 #981
  • build(deps-dev): bump axios from 1.7.9 to 1.8.0 #979
  • build(deps-dev): bump @types/node from 22.13.4 to 22.13.5 #978
  • build(deps-dev): bump @types/node from 22.13.2 to 22.13.4 #976
  • build(deps-dev): bump @types/node from 22.13.1 to 22.13.2 #974
  • build(deps-dev): bump @arthurfiorette/biomejs-config from 1.0.6 to 1.0.7 #973
  • build(deps-dev): bump @types/node from 22.13.0 to 22.13.1 #972
  • build(deps-dev): bump @types/node from 22.12.0 to 22.13.0 #971
  • build(deps-dev): bump @types/node from 22.10.10 to 22.12.0 #970
  • build(deps-dev): bump @types/node from 22.10.9 to 22.10.10 #969
  • build(deps-dev): bump @types/node from 22.10.7 to 22.10.9 #968
  • build(deps-dev): bump vitepress from 1.6.2 to 1.6.3 #967
  • build(deps-dev): bump vitepress from 1.6.1 to 1.6.2 #966
  • build(deps-dev): bump vitepress from 1.5.0 to 1.6.1 #965
  • build(deps-dev): bump @types/node from 22.10.6 to 22.10.7 #964
  • build(deps-dev): bump @types/node from 22.10.5 to 22.10.6 #963
  • build(deps-dev): bump typescript from 5.7.2 to 5.7.3 #962
  • build(deps-dev): bump @types/node from 22.10.3 to 22.10.5 #960
  • build(deps-dev): bump @types/node from 22.10.2 to 22.10.3 #959
  • build(deps-dev): bump @types/node from 22.10.1 to 22.10.2 #957
  • build(deps): bump nanoid from 3.3.7 to 3.3.8 #956
  • build(deps-dev): bump c8 from 10.1.2 to 10.1.3 #955
  • build(deps-dev): bump axios from 1.7.8 to 1.7.9 #954
  • build(deps-dev): bump @types/node from 22.10.0 to 22.10.1 #952
  • build(deps-dev): bump @arthurfiorette/biomejs-config from 1.0.5 to 1.0.6 #951
  • build(deps-dev): bump @types/node from 22.9.3 to 22.10.0 #950
  • build(deps-dev): bump axios from 1.7.7 to 1.7.8 #949
  • build(deps-dev): bump @types/node from 22.9.1 to 22.9.3 #948
  • build(deps-dev): bump typescript from 5.6.3 to 5.7.2 #947
  • build(deps-dev): bump @types/node from 22.9.0 to 22.9.1 #946
  • build(deps): bump cross-spawn from 7.0.3 to 7.0.6 #945
  • build(deps-dev): bump @swc/helpers from 0.5.13 to 0.5.15 #942
  • build(deps-dev): bump vitepress from 1.4.5 to 1.5.0 #941
  • build(deps-dev): bump @types/node from 22.8.7 to 22.9.0 #940
  • build(deps-dev): bump @types/node from 22.8.6 to 22.8.7 #939
  • build(deps-dev): bump vitepress from 1.4.3 to 1.4.5 #938
  • build(deps-dev): bump vitepress from 1.4.2 to 1.4.3 #936
  • build(deps-dev): bump @types/node from 22.8.5 to 22.8.6 #937
  • build(deps-dev): bump tslib from 2.8.0 to 2.8.1 #935
  • docs: vue behavior when modifying cached arrays #934
  • build(deps-dev): bump @types/node from 22.8.4 to 22.8.5 #933
  • build(deps-dev): bump vitepress from 1.4.1 to 1.4.2 #931
  • build(deps-dev): bump @types/node from 22.8.2 to 22.8.4 #930
  • build(deps-dev): bump @types/node from 22.8.1 to 22.8.2 #929
  • build(deps-dev): bump @types/node from 22.7.9 to 22.8.1 #928
  • build(deps-dev): bump @types/node from 22.7.8 to 22.7.9 #927

Commits

v1.6.2 - 2024-10-22

Merged

  • fix: aborted requests should not clear its cache afterwards if previous request was cached #923
  • build(deps-dev): bump @types/node from 22.7.7 to 22.7.8 #926
  • build(deps-dev): bump @types/node from 22.7.6 to 22.7.7 #924

Commits

1.6.1 - 2024-10-18

v1.6.1 - 2024-10-22

Merged

  • fix: aborted requests should not clear its cache afterwards if previous request was cached #923
  • build(deps-dev): bump @types/node from 22.7.7 to 22.7.8 #926
  • build(deps-dev): bump @types/node from 22.7.6 to 22.7.7 #924
  • fix: cloneData for concurrent requests #921
  • build(deps-dev): bump @biomejs/biome from 1.9.3 to 1.9.4 #920
  • build(deps-dev): bump @types/node from 22.7.5 to 22.7.6 #919
  • build(deps-dev): bump tslib from 2.7.0 to 2.8.0 #918
  • build(deps-dev): bump vitepress from 1.4.0 to 1.4.1 #917
  • build(deps-dev): bump typescript from 5.6.2 to 5.6.3 #916
  • build(deps): bump rollup from 2.79.1 to 2.79.2 #914
  • build(deps-dev): bump vitepress from 1.3.4 to 1.4.0 #910
  • build(deps): bump ejs from 3.1.9 to 3.1.10 #912
  • build(deps): bump vite from 5.4.1 to 5.4.8 #913
  • build(deps-dev): bump @types/node from 22.7.4 to 22.7.5 #911
  • build(deps-dev): bump @biomejs/biome from 1.9.2 to 1.9.3 #908
  • build(deps-dev): bump @types/node from 22.7.2 to 22.7.4 #907
  • docs: Fix headerInterpreter type typo #905
  • build(deps-dev): bump @types/node from 22.7.0 to 22.7.2 #904
  • build(deps-dev): bump @types/node from 22.6.1 to 22.7.0 #903
  • build(deps-dev): bump @types/node from 22.5.5 to 22.6.1 #902
  • build(deps-dev): bump jsdom from 25.0.0 to 25.0.1 #901
  • build(deps-dev): bump @biomejs/biome from 1.9.1 to 1.9.2 #900
  • build(deps-dev): bump @types/node from 22.5.4 to 22.5.5 #898
  • build(deps-dev): bump @biomejs/biome from 1.9.0 to 1.9.1 #897
  • build(deps-dev): bump @biomejs/biome from 1.5.3 to 1.9.0 #895
  • build(deps-dev): bump @types/node from 20.11.5 to 22.5.4 #892
  • build(deps-dev): bump jsdom from 24.1.1 to 25.0.0 #885

Commits

v1.6.0 - 2024-09-13

Merged

  • build(deps-dev): bump auto-changelog from 2.4.0 to 2.5.0 #894
  • build(deps-dev): bump typescript from 5.5.4 to 5.6.2 #893
  • build(deps-dev): bump @swc/helpers from 0.5.12 to 0.5.13 #890
  • build(deps-dev): bump axios from 1.7.5 to 1.7.7 #889
  • build(deps-dev): bump axios from 1.7.4 to 1.7.5 #886
  • build(deps-dev): bump vitepress from 1.3.3 to 1.3.4 #884
  • build(deps-dev): bump tslib from 2.6.3 to 2.7.0 #883
  • build(deps-dev): bump vitepress from 1.3.2 to 1.3.3 #879
  • build(deps-dev): bump axios from 1.7.3 to 1.7.4 #877
  • build(deps-dev): bump vitepress from 1.3.1 to 1.3.2 #874
  • build(deps-dev): bump c8 from 9.1.0 to 10.1.2 #855
  • feat: add stale flag in request return object #843
  • build(deps-dev): bump axios from 1.7.2 to 1.7.3 #872
  • build(deps-dev): bump typescript from 5.5.3 to 5.5.4 #868
  • build(deps-dev): bump jsdom from 24.1.0 to 24.1.1 #867
  • build(deps-dev): bump vitepress from 1.3.0 to 1.3.1 #864
  • build(deps-dev): bump @swc/helpers from 0.5.11 to 0.5.12 #865
  • build(deps-dev): bump vitepress from 1.2.3 to 1.3.0 #860
  • build(deps-dev): bump typescript from 5.5.2 to 5.5.3 #859
  • build(deps-dev): bump typescript from 5.4.5 to 5.5.2 #857
  • build(deps-dev): bump tslib from 2.6.2 to 2.6.3 #851
  • feat: clear storage method #848
  • build(deps-dev): bump vitepress from 1.2.2 to 1.2.3 #849
  • build(deps-dev): bump @types/jsdom from 21.1.6 to 21.1.7 #845
  • [ImgBot] Optimize images #844
  • docs: add an example node-cache implementation in docs #841
  • build(deps-dev): bump jsdom from 24.0.0 to 24.1.0 #842

Commits

v1.5.3 - 2024-05-22

Merged

  • #839
  • #840
  • #838
  • #837
  • chore(deps-dev): bump axios from 1.6.8 to 1.7.0 #836
  • chore(deps-dev): bump vitepress from 1.1.4 to 1.2.0 #835
  • chore(deps): bump pnpm/action-setup from 3 to 4 #831
  • chore(deps-dev): bump vitepress from 1.1.3 to 1.1.4 #828
  • chore(deps-dev): bump @swc/helpers from 0.5.10 to 0.5.11 #826

Commits

v1.5.2 - 2024-04-23

Merged

  • [must-revalidate] properly revalidate based on eTag #824
  • chore(deps-dev): bump vitepress from 1.1.0 to 1.1.3 #823
  • chore(deps-dev): bump @swc/helpers from 0.5.9 to 0.5.10 #820
  • chore(deps-dev): bump @swc/helpers from 0.5.8 to 0.5.9 #819
  • chore(deps-dev): bump vitepress from 1.0.2 to 1.1.0 #817
  • chore(deps-dev): bump typescript from 5.4.4 to 5.4.5 #818
  • chore(deps-dev): bump typescript from 5.4.3 to 5.4.4 #816
  • chore(deps-dev): bump vite from 5.2.2 to 5.2.8 #814
  • chore(deps-dev): bump vitepress from 1.0.1 to 1.0.2 #813
  • chore(deps-dev): bump @swc/helpers from 0.5.7 to 0.5.8 #812
  • chore(deps-dev): bump vitepress from 1.0.0-rc.45 to 1.0.1 #809
  • chore(deps-dev): bump typescript from 5.4.2 to 5.4.3 #808
  • chore(deps-dev): bump axios from 1.6.7 to 1.6.8 #807
  • chore(deps-dev): bump @swc/helpers from 0.5.6 to 0.5.7 #806
  • chore(deps-dev): bump follow-redirects from 1.15.4 to 1.15.6 #805
  • chore(deps-dev): bump typescript from 5.3.3 to 5.4.2 #802
  • chore(deps-dev): bump vitepress from 1.0.0-rc.44 to 1.0.0-rc.45 #801
  • chore(deps-dev): bump @swc-node/register from 1.8.0 to 1.9.0 #800
  • chore(deps-dev): bump vitepress from 1.0.0-rc.43 to 1.0.0-rc.44 #798
  • chore(deps-dev): bump vitepress from 1.0.0-rc.42 to 1.0.0-rc.43 #797
  • docs: update cache jsdocs for debugging #796
  • chore(deps-dev): bump jsdom from 23.2.0 to 24.0.0 #779
  • chore(deps): bump pnpm/action-setup from 2 to 3 #794
  • chore(deps): bump codecov/codecov-action from 3 to 4 #786
  • chore(deps): bump object-code from 1.3.2 to 1.3.3 #793
  • docs: improved clarity of code comments in invalidating-cache.md #792
  • chore(deps-dev): bump vitepress from 1.0.0-rc.41 to 1.0.0-rc.42 #791
  • chore(deps-dev): bump @swc/helpers from 0.5.3 to 0.5.6 #790
  • chore(deps-dev): bump vitepress from 1.0.0-rc.40 to 1.0.0-rc.41 #789
  • chore(deps-dev): bump @swc-node/register from 1.6.8 to 1.8.0 #788
  • chore(deps-dev): bump axios from 1.6.5 to 1.6.7 #785
  • chore(deps-dev): bump vitepress from 1.0.0-rc.39 to 1.0.0-rc.40 #782
  • chore(deps-dev): bump @biomejs/biome from 1.5.2 to 1.5.3 #781
  • chore(deps-dev): bump vite from 5.0.11 to 5.0.12 #777

Commits

v1.5.1 - 2024-01-19

Commits

v1.5.0 - 2024-01-19

Merged

  • fix: transformResponse running twice on cached requests #775
  • feat: correct ESM and CJS support, move to microbundle. #764
  • chore(deps-dev): bump vitepress from 1.0.0-rc.37 to 1.0.0-rc.39 #776
  • chore(deps-dev): bump @biomejs/biome from 1.5.1 to 1.5.2 #774
  • chore(deps-dev): bump vitepress from 1.0.0-rc.36 to 1.0.0-rc.37 #773
  • chore(deps-dev): bump c8 from 9.0.0 to 9.1.0 #772
  • chore(deps-dev): bump @biomejs/biome from 1.4.1 to 1.5.1 #770
  • chore(deps-dev): bump vitepress from 1.0.0-rc.35 to 1.0.0-rc.36 #769
  • chore(deps-dev): bump axios from 1.6.4 to 1.6.5 #766
  • chore(deps-dev): bump jsdom from 23.0.1 to 23.2.0 #765
  • chore(deps-dev): bump c8 from 8.0.1 to 9.0.0 #762
  • chore(deps-dev): bump axios from 1.6.3 to 1.6.4 #763
  • chore(deps-dev): bump vitepress from 1.0.0-rc.34 to 1.0.0-rc.35 #761
  • chore(deps-dev): bump vitepress from 1.0.0-rc.33 to 1.0.0-rc.34 #758
  • chore(deps-dev): bump axios from 1.6.2 to 1.6.3 #756
  • chore(deps-dev): bump vitepress from 1.0.0-rc.32 to 1.0.0-rc.33 #755

Commits

v1.4.1 - 2023-12-26

Commits

v1.4.0 - 2023-12-23

Merged

  • Ådd feature to blacklist some paths #754
  • chore(deps): bump github/codeql-action from 2 to 3 #749
  • chore(deps-dev): bump vitepress from 1.0.0-rc.31 to 1.0.0-rc.32 #751

Commits

v1.3.3 - 2023-12-13

Merged

  • chore(deps-dev): bump @biomejs/biome from 1.3.3 to 1.4.1 #740
  • chore(deps-dev): bump jsdom from 22.1.0 to 23.0.1 #739
  • Update documentation to clarify side effects of setupCache #732
  • docs: wording and fixing a broken local link #745
  • docs: rewording the invalidating cache page #744
  • chore(deps-dev): bump typescript from 5.3.2 to 5.3.3 #743
  • chore(deps-dev): bump vite from 5.0.2 to 5.0.5 #741
  • chore(deps-dev): bump vitepress from 1.0.0-rc.30 to 1.0.0-rc.31 #735
  • chore(deps-dev): bump vitepress from 1.0.0-rc.29 to 1.0.0-rc.30 #733
  • chore(deps-dev): bump typescript from 5.2.2 to 5.3.2 #728
  • chore(deps-dev): bump @types/jsdom from 21.1.5 to 21.1.6 #727
  • chore(deps-dev): bump vitepress from 1.0.0-rc.26 to 1.0.0-rc.29 #726
  • chore(deps): bump fast-defer from 1.1.7 to 1.1.8 #725
  • chore(deps-dev): bump vitepress from 1.0.0-rc.25 to 1.0.0-rc.26 #724
  • chore(deps-dev): bump tsx from 3.14.0 to 4.1.2 #721
  • chore(deps-dev): bump axios from 1.6.1 to 1.6.2 #723
  • chore(deps-dev): bump ts-loader from 9.5.0 to 9.5.1 #722
  • chore(deps-dev): bump prettier-plugin-organize-imports #717
  • chore(deps-dev): bump axios from 1.6.0 to 1.6.1 #715
  • chore(deps-dev): bump @types/webpack from 5.28.4 to 5.28.5 #714
  • chore(deps-dev): bump @types/jsdom from 21.1.4 to 21.1.5 #713
  • chore(deps-dev): bump eslint from 8.52.0 to 8.53.0 #712
  • chore(deps-dev): bump vitepress from 1.0.0-rc.24 to 1.0.0-rc.25 #711
  • docs: fix typos #707
  • chore(deps-dev): bump axios from 1.5.1 to 1.6.0 #706
  • chore(deps): bump actions/setup-node from 3 to 4 #703
  • chore(deps-dev): bump vitepress from 1.0.0-rc.23 to 1.0.0-rc.24 #704

Commits

v1.3.2 - 2023-10-23

Merged

  • chore(deps-dev): bump eslint from 8.51.0 to 8.52.0 #702
  • chore(deps-dev): bump vitepress from 1.0.0-rc.22 to 1.0.0-rc.23 #701
  • chore(deps-dev): bump @types/webpack from 5.28.3 to 5.28.4 #699
  • chore(deps-dev): bump tsx from 3.13.0 to 3.14.0 #697
  • chore(deps-dev): bump @types/jsdom from 21.1.3 to 21.1.4 #696
  • chore(deps-dev): bump vitepress from 1.0.0-rc.21 to 1.0.0-rc.22 #693
  • chore(deps-dev): bump webpack from 5.88.2 to 5.89.0 #692
  • chore(deps-dev): bump vitepress from 1.0.0-rc.20 to 1.0.0-rc.21 #691
  • chore(deps-dev): bump eslint from 8.50.0 to 8.51.0 #690
  • chore(deps-dev): bump ts-loader from 9.4.4 to 9.5.0 #689
  • chore(deps-dev): bump postcss from 8.4.27 to 8.4.31 #687
  • chore(deps-dev): bump @arthurfiorette/prettier-config #686

Commits

v1.3.1 - 2023-09-30

Merged

  • docs: expression error #684
  • chore(deps-dev): bump axios from 1.5.0 to 1.5.1 #683
  • chore(deps-dev): bump @types/webpack from 5.28.2 to 5.28.3 #682
  • chore(deps-dev): bump vitepress from 1.0.0-rc.15 to 1.0.0-rc.20 #681
  • chore(deps-dev): bump eslint from 8.49.0 to 8.50.0 #680
  • chore(deps-dev): bump vitepress from 1.0.0-rc.14 to 1.0.0-rc.15 #679
  • chore(deps-dev): bump @types/jsdom from 21.1.2 to 21.1.3 #678
  • chore(deps-dev): bump vitepress from 1.0.0-rc.13 to 1.0.0-rc.14 #677
  • chore(deps-dev): bump vitepress from 1.0.0-rc.12 to 1.0.0-rc.13 #673
  • chore(deps-dev): bump vitepress from 1.0.0-rc.10 to 1.0.0-rc.12 #672
  • chore(deps-dev): bump eslint from 8.48.0 to 8.49.0 #671
  • chore(deps): bump actions/checkout from 3 to 4 #666

Commits

  • chore: fixed bundle license 5adc229
  • ci: fixed ci tests 060e67d
  • docs: installing e6b6441
  • feat: prefer noop over undefined when debugging 16e51e7
  • feat: testing with tsx and c8 dd8f634
  • fix: handle axios errors without config (#674) 309bfe1
  • fix: rejected response deadlocks (#685) 286b2c0
  • style: formatted code fe83070
  • tag: v1.3.1 953d992

v1.3.0 - 2023-09-05

Merged

  • chore(deps-dev): bump vitepress from 1.0.0-rc.9 to 1.0.0-rc.10 #661
  • chore(deps-dev): bump axios from 1.4.0 to 1.5.0 #659
  • chore(deps-dev): bump @types/node from 18.17.11 to 18.17.12 #660
  • chore(deps-dev): bump vitepress from 1.0.0-rc.4 to 1.0.0-rc.9 #658
  • chore(deps-dev): bump eslint from 8.47.0 to 8.48.0 #657
  • chore(deps-dev): bump @types/node from 18.17.9 to 18.17.11 #654
  • chore(deps-dev): bump typescript from 5.1.6 to 5.2.2 #653
  • chore(deps-dev): bump jest-environment-jsdom from 29.6.3 to 29.6.4 #652
  • chore(deps-dev): bump jest from 29.6.3 to 29.6.4 #651
  • chore(deps-dev): bump @types/node from 18.17.8 to 18.17.9 #650
  • chore(deps-dev): bump @types/webpack from 5.28.1 to 5.28.2 #649
  • chore(deps-dev): bump @types/node from 18.17.6 to 18.17.8 #648
  • chore(deps-dev): bump @types/jest from 29.5.3 to 29.5.4 #647
  • chore(deps-dev): bump jest from 29.6.2 to 29.6.3 #645
  • chore(deps-dev): bump jest-environment-jsdom from 29.6.2 to 29.6.3 #646
  • chore(deps-dev): bump tslib from 2.6.1 to 2.6.2 #644
  • chore(deps-dev): bump @types/node from 18.17.5 to 18.17.6 #643
  • chore(deps-dev): bump eslint from 8.46.0 to 8.47.0 #638
  • chore(deps-dev): bump @types/node from 18.17.4 to 18.17.5 #637
  • chore(deps-dev): bump vitepress from 1.0.0-beta.7 to 1.0.0-rc.4 #636
  • chore(deps-dev): bump @types/node from 18.17.3 to 18.17.4 #635
  • chore(deps-dev): bump eslint-config-prettier from 8.10.0 to 9.0.0 #634
  • chore(deps-dev): bump @types/node from 18.17.2 to 18.17.3 #633
  • chore(deps-dev): bump @types/node from 18.17.1 to 18.17.2 #632
  • chore(deps-dev): bump eslint-config-prettier from 8.9.0 to 8.10.0 #630
  • chore(deps-dev): bump vitepress from 1.0.0-beta.6 to 1.0.0-beta.7 #627
  • chore(deps-dev): bump eslint from 8.45.0 to 8.46.0 #626
  • fix: avoid RangeError: Maximum call stack size exceeded on streams and other objects #616
  • chore(deps-dev): bump jest-environment-jsdom from 29.6.1 to 29.6.2 #623
  • feat: turn most types into interfaces #615
  • chore(deps-dev): bump jest from 29.6.1 to 29.6.2 #622
  • chore(deps-dev): bump eslint-config-prettier from 8.8.0 to 8.9.0 #624
  • chore(deps-dev): bump @types/node from 18.17.0 to 18.17.1 #620
  • chore(deps-dev): bump tslib from 2.6.0 to 2.6.1 #619
  • chore(deps-dev): bump @types/node from 18.16.19 to 18.17.0 #617
  • chore(deps-dev): bump vitepress from 1.0.0-beta.5 to 1.0.0-beta.6 #618
  • chore(deps-dev): bump word-wrap from 1.2.3 to 1.2.4 #614
  • chore(deps-dev): bump @typescript-eslint/parser from 5.61.0 to 5.62.0 #602
  • chore(deps-dev): bump @types/jest from 29.5.2 to 29.5.3 #600
  • chore(deps-dev): bump webpack from 5.88.1 to 5.88.2 #605
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #601
  • chore(deps-dev): bump eslint from 8.44.0 to 8.45.0 #604
  • chore(deps-dev): bump prettier-plugin-organize-imports #603
  • chore(deps-dev): bump jest-environment-jsdom from 29.6.0 to 29.6.1 #599
  • chore(deps-dev): bump jest from 29.6.0 to 29.6.1 #598
  • chore(deps-dev): bump jest from 29.5.0 to 29.6.0 #595
  • chore(deps-dev): bump jest-environment-jsdom from 29.5.0 to 29.6.0 #596
  • chore(deps-dev): bump @typescript-eslint/parser from 5.60.1 to 5.61.0 #593
  • chore: new bug template #591
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #592
  • chore(deps-dev): bump vitepress from 1.0.0-beta.3 to 1.0.0-beta.5 #589
  • chore(deps-dev): bump @types/node from 18.16.18 to 18.16.19 #590
  • chore(deps-dev): bump eslint from 8.43.0 to 8.44.0 #588
  • feat: ‘cloneData’ option to buildMemoryStorage #581
  • chore(deps-dev): bump ts-loader from 9.4.3 to 9.4.4 #584
  • chore(deps-dev): bump typescript from 5.1.5 to 5.1.6 #582
  • chore(deps-dev): bump webpack from 5.88.0 to 5.88.1 #583
  • chore(deps-dev): bump eslint from 8.42.0 to 8.43.0 #567
  • chore(deps-dev): bump ts-jest from 29.1.0 to 29.1.1 #585
  • chore(deps-dev): bump typescript from 5.1.3 to 5.1.5 #577
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #576
  • chore(deps-dev): bump tslib from 2.5.3 to 2.6.0 #575
  • chore(deps-dev): bump @typescript-eslint/parser from 5.60.0 to 5.60.1 #574
  • fix(docs): redis link to docs #571
  • chore(deps-dev): bump @types/node from 18.16.16 to 18.16.18 #559
  • chore(deps-dev): bump webpack from 5.86.0 to 5.88.0 #569
  • chore(deps-dev): bump vitepress from 1.0.0-beta.1 to 1.0.0-beta.3 #566
  • chore(deps-dev): bump @typescript-eslint/parser from 5.59.9 to 5.60.0 #564
  • Fix typo in Request ID docs #561

Commits

  • chore: dependabot f571ad3
  • chore: removed unused eslint comment cb3114f
  • chore: updated pnpm 4ab04a7
  • ci: dependabot c7e3af0
  • ci: fixed escheck 60f161a
  • ci: ignore if codecov action breaks 605d39b
  • docs: added more keywords to help with searching b352f12
  • docs: filesizes ee10f76
  • docs: fix issue template 281848a
  • docs: fix issue template v2 d672a08
  • docs: update bug again 😃 ce82bb5
  • docs: update bug report 522179b
  • docs: update bug report c91e6a0
  • docs: updated download url 8fa904c
  • feat: added CORS info on cacheTakeover ddacace
  • feat: handle non axios errors rejections (#609) 929054e
  • feat: moved tests to node:test (#628) 2cc948d
  • fix: correct config re throw ddcac5f
  • fix: infinite loading states when a restart occurs in the middle of a request. (#612) 130ef0d
  • fix: moved to native source map support 4dbfea2
  • fix: updated vitepress 3be8029
  • tag: v1.3.0 96f03c4

v1.2.0 - 2023-06-09

Merged

  • chore(deps-dev): bump eslint from 8.34.0 to 8.42.0 #551
  • chore(deps-dev): bump jest-environment-jsdom from 29.4.3 to 29.5.0 #553
  • chore(deps-dev): bump @types/node from 18.13.0 to 18.16.16 #552
  • chore(deps-dev): bump tslib from 2.5.0 to 2.5.3 #550
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #549
  • docs: cachePredicate status codes follows RFC 7231 #547

Commits

  • chore: updated dependencies c7dab4f
  • feat: v1.2.0 066cc4f
  • fix: avoid git checks while publishing 2d2696d
  • fix: correct canStale checks (#543) 82182bf
  • fix: correct lowercase test 7e5ca7e
  • fix: support max-stale on header interpreter (#543) 683dbe0
  • style: formatted code 0cca290
  • style: formatted code a5f071d
  • style: formatted code a7405e1

v1.1.1 - 2023-05-25

Merged

  • docs: fixed headerInterpreter return type #542

Commits

  • docs: cdnjs links 9e3800c
  • feat: better storage docs 5f2ed82
  • feat: max entries on memory storage #539 ebd400b
  • feat: v1.1.1 143d409
  • fix: flaky network test and improved redis documentation ee9a7de
  • fix: removed only allow pnpm aa69799
  • style: formatted code 7b0fb85

v1.1.0 - 2023-05-17

Merged

  • fix: Support stale-while-revalidate #514
  • docs: added docs for #506 #509
  • feat: staleIfError using stale-if-error directive #506
  • chore(deps-dev): bump jest-environment-jsdom from 29.4.2 to 29.4.3 #505
  • chore(deps-dev): bump jest from 29.4.2 to 29.4.3 #504
  • chore(deps-dev): bump @typescript-eslint/parser from 5.51.0 to 5.52.0 #503
  • chore(deps-dev): bump axios from 1.3.2 to 1.3.3 #502
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #501
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.45 to 1.0.0-alpha.46 #500
  • chore(deps-dev): bump eslint from 8.33.0 to 8.34.0 #499
  • chore(deps-dev): bump jest-environment-jsdom from 29.4.1 to 29.4.2 #498
  • chore(deps-dev): bump prettier from 2.8.3 to 2.8.4 #497
  • chore(deps-dev): bump jest from 29.4.1 to 29.4.2 #496
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #495
  • chore(deps-dev): bump @typescript-eslint/parser from 5.50.0 to 5.51.0 #494
  • chore(deps-dev): bump axios from 1.3.1 to 1.3.2 #492
  • chore(deps-dev): bump @arthurfiorette/prettier-config #491

Fixed

  • docs: added docs for #506 (#509) #506
  • feat: staleIfError using stale-if-error directive (#506) #506

Commits

v1.0.1 - 2023-02-02

Merged

  • chore(deps-dev): bump @typescript-eslint/parser from 5.49.0 to 5.50.0 #488
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #486
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.44 to 1.0.0-alpha.45 #489
  • chore(deps-dev): bump typescript from 4.9.4 to 4.9.5 #485
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.43 to 1.0.0-alpha.44 #484
  • docs: typo at update getting-started.md #483
  • chore(deps-dev): bump eslint from 8.32.0 to 8.33.0 #482
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.40 to 1.0.0-alpha.43 #481
  • chore(deps-dev): bump tslib from 2.4.1 to 2.5.0 #477
  • chore(deps-dev): bump jest from 29.4.0 to 29.4.1 #479
  • chore(deps-dev): bump jest-environment-jsdom from 29.4.0 to 29.4.1 #478
  • chore(deps-dev): bump es-check from 7.0.1 to 7.1.0 #476
  • chore(deps-dev): bump jest from 29.3.1 to 29.4.0 #475
  • chore(deps-dev): bump jest-environment-jsdom from 29.3.1 to 29.4.0 #474
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #473
  • chore(deps-dev): bump @typescript-eslint/parser from 5.48.2 to 5.49.0 #472
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.38 to 1.0.0-alpha.40 #470
  • chore(deps-dev): bump @types/jest from 29.2.5 to 29.2.6 #468
  • fix: prevent response storage calls if method is not supported #464
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.36 to 1.0.0-alpha.38 #467
  • chore(deps-dev): bump prettier from 2.8.1 to 2.8.3 #460
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #466
  • chore(deps-dev): bump eslint from 8.31.0 to 8.32.0 #463
  • chore(deps-dev): bump @typescript-eslint/parser from 5.48.1 to 5.48.2 #465
  • chore(deps-dev): bump prettier-plugin-organize-imports #462
  • chore(deps-dev): bump ts-jest from 29.0.4 to 29.0.5 #461
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.35 to 1.0.0-alpha.36 #457
  • chore(deps-dev): bump ts-jest from 29.0.3 to 29.0.4 #458
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #454
  • chore(deps-dev): bump @typescript-eslint/parser from 5.48.0 to 5.48.1 #455
  • chore(deps-dev): bump eslint-config-prettier from 8.5.0 to 8.6.0 #451
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.34 to 1.0.0-alpha.35 #450
  • chore(deps): bump json5 from 2.2.1 to 2.2.3 #445
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.33 to 1.0.0-alpha.34 #443
  • chore: typos #446
  • chore(deps-dev): bump @typescript-eslint/parser from 5.47.1 to 5.48.0 #448
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #447
  • chore(deps-dev): bump eslint from 8.30.0 to 8.31.0 #444
  • chore(deps-dev): bump @types/jest from 29.2.4 to 29.2.5 #442
  • chore(deps-dev): bump @typescript-eslint/parser from 5.47.0 to 5.47.1 #438
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #439

Commits

v1.0.0 - 2022-12-26

Merged

  • chore(deps-dev): bump vitepress from 1.0.0-alpha.32 to 1.0.0-alpha.33 #436
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #434
  • chore(deps-dev): bump @typescript-eslint/parser from 5.46.1 to 5.47.0 #435
  • chore(deps-dev): bump eslint from 8.29.0 to 8.30.0 #432
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.31 to 1.0.0-alpha.32 #431
  • docs: Fix request-id.md docs #429
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #428
  • chore(deps-dev): bump @typescript-eslint/parser from 5.46.0 to 5.46.1 #427
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.30 to 1.0.0-alpha.31 #426
  • chore(deps-dev): bump prettier from 2.8.0 to 2.8.1 #421
  • chore: default prefix parameter for web storage #425
  • chore(deps-dev): bump typescript from 4.9.3 to 4.9.4 #420
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #423
  • chore(deps-dev): bump @typescript-eslint/parser from 5.45.1 to 5.46.0 #422
  • chore(deps-dev): bump @typescript-eslint/parser from 5.45.0 to 5.45.1 #419
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #418
  • Axios cache interceptor v1 roadmap #368
  • chore(deps-dev): bump eslint from 8.28.0 to 8.29.0 #417
  • chore(deps-dev): bump ts-loader from 9.4.1 to 9.4.2 #416
  • chore(deps-dev): bump @typescript-eslint/parser from 5.44.0 to 5.45.0 #414
  • chore(deps-dev): bump prettier from 2.7.1 to 2.8.0 #411
  • chore(deps-dev): bump prettier-plugin-organize-imports #413
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #408
  • chore(deps-dev): bump @typescript-eslint/parser from 5.42.1 to 5.44.0 #409
  • chore(deps-dev): bump eslint from 8.27.0 to 8.28.0 #407
  • chore(deps-dev): bump webpack-cli from 4.10.0 to 5.0.0 #406
  • chore(deps-dev): bump typescript from 4.8.4 to 4.9.3 #404
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #400
  • chore(deps-dev): bump prettier-plugin-organize-imports #399
  • chore(deps-dev): bump webpack from 5.74.0 to 5.75.0 #398
  • chore(deps-dev): bump jest-environment-jsdom from 29.3.0 to 29.3.1 #396
  • chore(deps-dev): bump eslint from 8.26.0 to 8.27.0 #395
  • chore(deps-dev): bump @typescript-eslint/parser from 5.42.0 to 5.42.1 #393
  • chore(deps-dev): bump jest-environment-jsdom from 29.2.2 to 29.3.0 #394
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #392
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #391
  • chore(deps-dev): bump tslib from 2.4.0 to 2.4.1 #390
  • chore(deps-dev): bump @typescript-eslint/parser from 5.41.0 to 5.42.0 #389
  • chore(deps-dev): bump @typescript-eslint/parser from 5.40.1 to 5.41.0 #387
  • chore(deps-dev): bump jest-environment-jsdom from 29.2.1 to 29.2.2 #388
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #386
  • chore(deps-dev): bump eslint from 8.25.0 to 8.26.0 #385
  • chore(deps-dev): bump jest-environment-jsdom from 29.2.0 to 29.2.1 #384
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #381
  • chore(deps-dev): bump @typescript-eslint/parser from 5.40.0 to 5.40.1 #382
  • chore(deps-dev): bump jest-environment-jsdom from 29.1.2 to 29.2.0 #379
  • chore(deps-dev): bump @typescript-eslint/parser from 5.39.0 to 5.40.0 #375
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #376
  • chore(deps-dev): bump express from 4.18.1 to 4.18.2 in /docs #373
  • chore(deps-dev): bump eslint from 8.24.0 to 8.25.0 #372
  • chore(deps-dev): bump @typescript-eslint/parser from 5.38.1 to 5.39.0 #364
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #363
  • chore(deps-dev): bump jest-environment-jsdom from 29.1.1 to 29.1.2 #362
  • chore(deps-dev): bump jest-environment-jsdom from 29.0.3 to 29.1.1 #360
  • chore(deps-dev): bump typescript from 4.8.3 to 4.8.4 #361
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #359
  • chore(deps-dev): bump @typescript-eslint/parser from 5.38.0 to 5.38.1 #358
  • chore(deps): bump ahmadnassri/action-dependabot-auto-merge #356
  • chore(deps-dev): bump eslint from 8.23.1 to 8.24.0 #357
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #351
  • chore(deps-dev): bump @typescript-eslint/parser from 5.37.0 to 5.38.0 #352
  • chore(deps-dev): bump ts-loader from 9.3.1 to 9.4.1 #355
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #350
  • chore(deps-dev): bump @typescript-eslint/parser from 5.36.2 to 5.37.0 #349
  • chore(deps-dev): bump jest-environment-jsdom from 29.0.2 to 29.0.3 #348
  • chore(deps-dev): bump eslint from 8.23.0 to 8.23.1 #347
  • chore(deps-dev): bump es-check from 7.0.0 to 7.0.1 #346
  • chore(deps-dev): bump typescript from 4.8.2 to 4.8.3 #345
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #343
  • chore(deps-dev): bump @typescript-eslint/parser from 5.36.1 to 5.36.2 #342
  • chore(deps-dev): bump jest-environment-jsdom from 29.0.1 to 29.0.2 #340
  • chore(deps-dev): bump prettier-plugin-organize-imports #341
  • chore(deps-dev): bump @typescript-eslint/parser from 5.36.0 to 5.36.1 #338
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #339
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #336
  • chore(deps-dev): bump @typescript-eslint/parser from 5.35.1 to 5.36.0 #337
  • chore(deps-dev): bump eslint from 8.22.0 to 8.23.0 #334
  • chore(deps-dev): bump jest-environment-jsdom from 29.0.0 to 29.0.1 #335
  • chore(deps-dev): bump jest-environment-jsdom from 28.1.3 to 29.0.0 #332
  • chore(deps-dev): bump typescript from 4.7.4 to 4.8.2 #333
  • chore(deps-dev): bump @typescript-eslint/parser from 5.34.0 to 5.35.1 #331
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #330
  • chore(deps-dev): bump @typescript-eslint/parser from 5.33.1 to 5.34.0 #328
  • chore(deps-dev): bump prettier-plugin-organize-imports #324
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #320
  • chore(deps-dev): bump @typescript-eslint/parser from 5.33.0 to 5.33.1 #322
  • chore(deps-dev): bump @types/jest from 28.1.6 to 28.1.7 #321
  • chore(deps-dev): bump eslint from 8.21.0 to 8.22.0 #319
  • chore(deps-dev): bump ts-jest from 28.0.7 to 28.0.8 #318
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #315
  • chore(deps-dev): bump @typescript-eslint/parser from 5.32.0 to 5.33.0 #316
  • chore(deps-dev): bump prettier-plugin-organize-imports #313
  • chore(deps-dev): bump prettier-plugin-organize-imports from 3.0.0 to 3.0.1 #310
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #312
  • chore(deps-dev): bump @typescript-eslint/parser from 5.31.0 to 5.32.0 #311
  • chore(deps-dev): bump eslint from 8.20.0 to 8.21.0 #309

Commits

  • chore: automerge dependabot prs 9c90644
  • chore: avoid github activity 0e97446
  • chore: axios as a peer dependency 9683de5
  • chore: docs versioning nav 13529b9
  • chore: fixed dependabot automerge 1c024f4
  • chore: re-added dev web bundle 9780d13
  • docs: improved features 79ac027
  • docs: spelling db41b7c
  • docs: update navbar again b6b9fc9
  • docs: updated version 232bb7d
  • docs: version selector b4ab156
  • feat: add ecompatible node version to engines 5562819
  • feat: cache takeover #437 7d82c5a
  • feat: MIT copyright notice on bundle f842c36
  • fix: action to deploy docs 64222ec
  • fix: correct skypack download url c7b6604
  • fix: docs versioning 09a0082
  • fix: removed check for non existent file 04d95f4
  • fix: types not available on esm packaging #430 00fdff0
  • refactor: dependencies, lint and null assertions 67819a3
  • tag: v1.0.0 d39cb29
  • test: added #317 test 491fb01

v0.10.7 - 2022-07-29

Merged

  • feat: cache updater function for multiple keys. #304
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #307
  • chore(deps-dev): bump @typescript-eslint/parser from 5.30.7 to 5.31.0 #306
  • chore(deps-dev): bump webpack from 5.73.0 to 5.74.0 #305
  • chore(deps): bump terser from 5.12.1 to 5.14.2 #302
  • chore(deps-dev): bump es-check from 6.2.1 to 7.0.0 #303
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #300
  • chore(deps-dev): bump @typescript-eslint/parser from 5.30.6 to 5.30.7 #301
  • chore(deps-dev): bump @types/jest from 28.1.5 to 28.1.6 #298
  • chore(deps-dev): bump eslint from 8.19.0 to 8.20.0 #297
  • chore(deps-dev): bump ts-jest from 28.0.5 to 28.0.7 #299
  • chore(deps-dev): bump jest-environment-jsdom from 28.1.2 to 28.1.3 #295
  • chore(deps-dev): bump jest from 28.1.2 to 28.1.3 #294
  • chore(deps-dev): bump @types/jest from 28.1.4 to 28.1.5 #293
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #292
  • chore(deps-dev): bump @typescript-eslint/parser from 5.30.5 to 5.30.6 #291
  • chore(deps-dev): bump @typescript-eslint/parser from 5.30.4 to 5.30.5 #289
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #290
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #288
  • chore(deps-dev): bump eslint from 8.18.0 to 8.19.0 #287
  • chore(deps-dev): bump @typescript-eslint/parser from 5.30.0 to 5.30.4 #286
  • chore(deps-dev): bump @types/jest from 28.1.3 to 28.1.4 #285
  • chore(deps-dev): bump eslint-plugin-prettier from 4.1.0 to 4.2.1 #284

Commits

v0.10.6 - 2022-06-29

Merged

  • fix: cache update not being executed correctly #283
  • chore(deps-dev): bump @typescript-eslint/parser from 5.29.0 to 5.30.0 #282
  • chore(deps-dev): bump eslint-plugin-prettier from 4.0.0 to 4.1.0 #280
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #281
  • chore(deps-dev): bump ts-loader from 9.3.0 to 9.3.1 #278
  • chore(deps-dev): bump @types/jest from 28.1.2 to 28.1.3 #276
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #275
  • chore(deps-dev): bump @typescript-eslint/parser from 5.28.0 to 5.29.0 #274
  • chore(deps-dev): bump eslint from 8.17.0 to 8.18.0 #271
  • chore(deps-dev): bump typescript from 4.7.3 to 4.7.4 #272
  • chore(deps-dev): bump @types/jest from 28.1.1 to 28.1.2 #273
  • chore(deps-dev): bump prettier-plugin-organize-imports #270
  • chore(deps-dev): bump prettier from 2.7.0 to 2.7.1 #269
  • chore(deps-dev): bump @typescript-eslint/parser from 5.27.1 to 5.28.0 #266
  • chore(deps-dev): bump ts-jest from 28.0.4 to 28.0.5 #265
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #268
  • chore(deps-dev): bump prettier from 2.6.2 to 2.7.0 #267
  • chore(deps-dev): bump webpack-cli from 4.9.2 to 4.10.0 #264

Commits

v0.10.5 - 2022-06-11

Merged

  • chore(deps-dev): bump jest-environment-jsdom from 28.1.0 to 28.1.1 #261
  • chore(deps-dev): bump @typescript-eslint/parser from 5.27.0 to 5.27.1 #263
  • chore(deps-dev): bump jest from 28.1.0 to 28.1.1 #260
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #262
  • chore(deps-dev): bump @types/jest from 28.1.0 to 28.1.1 #257
  • chore(deps-dev): bump typescript from 4.7.2 to 4.7.3 #258
  • chore(deps-dev): bump eslint from 8.16.0 to 8.17.0 #259

Commits

  • chore: fixed debug configuration 33398ce
  • chore: updated sponsors e8cb692
  • docs: improved override docs dfe1595
  • docs: typos 67bad37
  • docs: updated version 8c94ef9
  • feat: better override documentation 338c9a6
  • feat: override cache option 268fccb
  • feat: remove remnant x-axios-headers from server response d87307a
  • tag: v0.10.5 30617dd

v0.10.4 - 2022-06-03

Merged

  • chore(deps-dev): bump webpack from 5.72.1 to 5.73.0 #255
  • chore(deps-dev): bump ts-jest from 28.0.3 to 28.0.4 #254
  • chore(deps-dev): bump @types/jest from 27.5.1 to 28.1.0 #252
  • fix: Interpret max-age=0 as a valid cache-control header #253
  • chore(deps-dev): bump @typescript-eslint/parser from 5.26.0 to 5.27.0 #250
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #251
  • chore(deps-dev): bump typescript from 4.6.4 to 4.7.2 #249
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #246
  • chore(deps-dev): bump ts-jest from 28.0.2 to 28.0.3 #247
  • chore(deps-dev): bump @typescript-eslint/parser from 5.25.0 to 5.26.0 #248
  • chore(deps-dev): bump eslint from 8.15.0 to 8.16.0 #245
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #243
  • chore(deps-dev): bump @typescript-eslint/parser from 5.23.0 to 5.25.0 #242
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #241
  • chore(deps-dev): bump @types/jest from 27.5.0 to 27.5.1 #238
  • chore(deps-dev): bump ts-jest from 28.0.1 to 28.0.2 #234
  • chore(deps-dev): bump webpack from 5.72.0 to 5.72.1 #237
  • chore(deps-dev): bump @typescript-eslint/parser from 5.22.0 to 5.23.0 #235
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #236
  • chore(deps-dev): bump @typescript-eslint/parser from 5.21.0 to 5.22.0 #231
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #230
  • chore(deps-dev): bump @types/jest from 27.4.1 to 27.5.0 #232

Commits

  • chore(deps): update jest to 28 f4f4be1
  • deps: updated object-code 6b1a1c5
  • deps: updated object-code 77adcaf
  • docs: fixed variable name (#239) e97a515
  • docs: help this repo grow 2fc2c17
  • docs: improved documentation 6bcd7dc
  • docs: updated version 5cb76aa
  • fix: removed symbol to preserve sideEffect free status (#233) b6302ef
  • refactor: updated some minor things 623ae22
  • tag: v0.10.4 d00bdc8

v0.10.3 - 2022-05-02

Merged

  • chore(deps-dev): bump ts-loader from 9.2.9 to 9.3.0 #228
  • chore(deps-dev): bump express from 4.18.0 to 4.18.1 in /docs #229
  • feat: updated axios to 0.27 #227
  • Pass currentRequest on each access to storages (#220) #226
  • chore(deps-dev): bump typescript from 4.6.3 to 4.6.4 #225
  • chore(deps-dev): bump ts-loader from 9.2.8 to 9.2.9 #222
  • chore(deps-dev): bump @typescript-eslint/parser from 5.20.0 to 5.21.0 #215
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #217
  • chore(deps-dev): bump express from 4.17.3 to 4.18.0 in /docs #218
  • chore(deps): bump github/codeql-action from 1 to 2 #214
  • chore(deps-dev): bump eslint from 8.13.0 to 8.14.0 #213
  • chore(deps-dev): bump tslib from 2.3.1 to 2.4.0 #212
  • chore(deps): bump async from 2.6.3 to 2.6.4 #211
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #209
  • chore(deps-dev): bump @typescript-eslint/parser from 5.19.0 to 5.20.0 #210
  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.36 to 0.3.38 #208
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #207
  • chore(deps-dev): bump @typescript-eslint/parser from 5.18.0 to 5.19.0 #206
  • chore(deps-dev): bump eslint from 8.12.0 to 8.13.0 #205
  • chore(deps-dev): bump webpack from 5.71.0 to 5.72.0 #204
  • chore(deps): bump codecov/codecov-action from 2.1.0 to 3 #203
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #202
  • chore(deps-dev): bump @typescript-eslint/parser from 5.17.0 to 5.18.0 #201
  • chore(deps-dev): bump prettier from 2.6.1 to 2.6.2 #197
  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.35 to 0.3.36 #199
  • chore(deps-dev): bump webpack from 5.70.0 to 5.71.0 #198
  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.34 to 0.3.35 #196
  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.33 to 0.3.34 #195
  • chore(deps): bump ansi-regex from 3.0.0 to 3.0.1 #194
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #192
  • chore(deps-dev): bump @typescript-eslint/parser from 5.16.0 to 5.17.0 #193
  • chore(deps-dev): bump eslint from 8.11.0 to 8.12.0 #191

Commits

v0.10.2 - 2022-03-25

Merged

  • chore(deps): bump minimist from 1.2.5 to 1.2.6 in /docs #190
  • chore(deps): bump minimist from 1.2.5 to 1.2.6 #189
  • chore(deps-dev): bump prettier from 2.6.0 to 2.6.1 #187
  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.31 to 0.3.33 #185
  • chore(deps-dev): bump ts-jest from 27.1.3 to 27.1.4 #186
  • chore(deps-dev): bump typescript from 4.6.2 to 4.6.3 #188
  • chore(deps-dev): bump @typescript-eslint/parser from 5.15.0 to 5.16.0 #183
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #184
  • chore(deps): bump object-code from 1.2.0 to 1.2.2 #182
  • chore(deps): bump fast-defer from 1.1.5 to 1.1.7 #181
  • chore(deps): bump cache-parser from 1.2.2 to 1.2.4 #180
  • chore(deps-dev): bump prettier from 2.5.1 to 2.6.0 #178
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #175
  • chore(deps-dev): bump @typescript-eslint/parser from 5.14.0 to 5.15.0 #176

Commits

  • chore: fixed escheck script 4e93728
  • deps: updated all deps 1b50018
  • docs: added runkit comment f25bff6
  • docs: updated download urls b98f4b0
  • fix: fixed bug when a pending request had it cached empty (#165) 0a00778
  • style: formatted code b44c6b3
  • tag: v0.10.2 2fe8129

v0.10.1 - 2022-03-14

Commits

v0.10.0 - 2022-03-14

Merged

  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.30 to 0.3.31 #171
  • chore(deps-dev): bump eslint from 8.10.0 to 8.11.0 #170
  • chore(deps-dev): bump docsify-cli from 4.4.3 to 4.4.4 in /docs #172
  • feat!: new bundle setup & fixed development bundles #167
  • fix: memory storage copy data to avoid reference changes #164
  • chore(deps-dev): bump ts-loader from 9.2.7 to 9.2.8 #168
  • chore(deps-dev): bump axios from 0.26.0 to 0.26.1 #166

Commits

  • chore: brave rewards f140b02
  • chore: fixed unknown build bug 😃 cb8eb37
  • chore: updated yarn.lock bb88a8b
  • ci: dependabot for docs folder e7922bd
  • deps: updated typescript eslint ae58690
  • docs: updated benchmark and fixed some typos 08d7ab4
  • docs: updated download urls e2f2428
  • docs: updated many things in the documentation 766c6de
  • feat!: updated default caching options 119fa32
  • perf: optimized build config 3a800d7
  • refactor: clone data only when needed 09a69f8
  • style: formatted code 6fd42b2
  • style: formatted code 58d3859
  • tag: v0.10.0 e2fb91b
  • tag: v0.9.3 41d9fe1
  • tests: fixed memory storage clone test a0e05e8

v0.9.3 - 2022-03-04

Merged

  • chore(deps-dev): bump webpack from 5.69.1 to 5.70.0 #162
  • chore(deps-dev): bump eslint-config-prettier from 8.4.0 to 8.5.0 #160
  • chore(deps): bump actions/checkout from 2 to 3 #158
  • chore(deps-dev): bump ts-loader from 9.2.6 to 9.2.7 #159
  • chore(deps-dev): bump typescript from 4.5.5 to 4.6.2 #157

Commits

  • chore: add funding.yml 2429ae2
  • chore: cache parser dependency range a71f9aa
  • docs: updated code comment 80850b9
  • docs: updated download urls 06091a2
  • fix: defaultKeyGenerator keeps response unchanged (#161) ab45164
  • tag: v0.9.3 9993af2

v0.9.2 - 2022-02-28

Merged

  • chore(deps-dev): bump eslint from 8.9.0 to 8.10.0 #156
  • chore(deps): bump prismjs from 1.26.0 to 1.27.0 in /docs #155
  • chore(deps): bump actions/setup-node from 2 to 3 #154

Commits

v0.9.1 - 2022-02-23

Merged

  • feat: support for react-native cli #153
  • chore(deps-dev): bump @types/jest from 27.4.0 to 27.4.1 #152
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #150
  • chore(deps-dev): bump @typescript-eslint/parser from 5.12.0 to 5.12.1 #151

Commits

v0.9.0 - 2022-02-21

Merged

  • feat: handle web storage DOMExceptions #148
  • chore(deps-dev): bump eslint-config-prettier from 8.3.0 to 8.4.0 #149
  • chore(deps-dev): bump webpack from 5.69.0 to 5.69.1 #147

Commits

v0.8.10 - 2022-02-16

Merged

  • chore(deps-dev): bump webpack from 5.68.0 to 5.69.0 #146

Commits

v0.8.9 - 2022-02-14

Merged

  • chore(deps-dev): bump eslint from 8.8.0 to 8.9.0 #142
  • chore(deps-dev): bump jest from 27.5.0 to 27.5.1 #140

Commits

v0.8.8 - 2022-02-08

Commits

v0.8.7 - 2022-02-08

Commits

v0.8.6 - 2022-02-08

Merged

  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #138
  • chore(deps-dev): bump jest from 27.4.7 to 27.5.0 #136
  • chore(deps-dev): bump @typescript-eslint/parser from 5.10.1 to 5.10.2 #132
  • chore(deps-dev): bump webpack from 5.67.0 to 5.68.0 #133
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #134
  • chore(deps-dev): bump eslint from 8.7.0 to 8.8.0 #131
  • chore(deps-dev): bump es-check from 6.1.1 to 6.2.1 #130
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #126
  • chore(deps-dev): bump webpack-cli from 4.9.1 to 4.9.2 #127
  • chore(deps-dev): bump @typescript-eslint/parser from 5.10.0 to 5.10.1 #125

Commits

v0.8.5 - 2022-01-23

Merged

  • docs: add license scan report and status #124
  • chore(deps-dev): bump typescript from 4.5.4 to 4.5.5 #123

Commits

  • build: build everything from webpack f160428
  • build: minimize all bundles bc devtool is active 2d779ec
  • chore: switch back to yarn v1 7d314c2
  • docs: added react component example df74939
  • docs: added tsx syntax highlight 706c4dd
  • docs: removed coverpage bdbdd37
  • docs: simple analytics 😦 cb59384
  • docs: updated docs 95f4137
  • docs: updated documentation e9fc692
  • docs: updated download urls 026465c
  • docs: updated fossa badges 9b9ae3a
  • docs: updated homepage 7ccac42
  • docs: updated homepage 989ceec
  • docs: updated installing page b76087e
  • docs: updated sidebar and added dev mode section cc6523f
  • feat: debug mode & fixed tests 0ba6025
  • fixed jsx highlighting 64c0f40
  • refactor: added ACI prefix to avoid external conflicts ea4ab4c
  • refactor: added debug points 098cf47
  • refactor: added memory storage type 7dc15be
  • refactor: moved header file d14750e
  • refactor: prefer the usage of AxiosResponseHeaders bd4bf26
  • style: format code 31ef7e7
  • tag: v0.8.5 f09670d

v0.8.4 - 2022-01-18

Commits

  • chore: fix yarn.lock (yarnpkg/berry#3416) 9922650
  • chore: sideEffects: false and updated badges b555f95
  • deps: updated axios to v0.25 66f29c9
  • deps: updated eslint dependencies 2540c1e
  • docs: added staleIfError documentation 93dda05
  • docs: added table header 8273399
  • docs: updated documentation 668ce0c
  • docs: updated download urls c5629be
  • docs: updated rukit example 0aed72f
  • feat: add staleIfError support edb32bd
  • fix: removed breaking behaviour 7217eaf
  • refactor: use Object.freeze at Header enum 0e2508c
  • style: format code 1e8ca38
  • tag: v0.8.4 e356386

v0.8.3 - 2022-01-15

Commits

  • build: optimize umd builds with tslib 6d9683a
  • deps: updated cache-parser and jest 16184ac
  • docs: updated download urls d51c622
  • refactor: Header as const and renaming… e391f56
  • tag: v0.8.3 429256d

v0.8.2 - 2022-01-14

Commits

  • build: add umd/index.js for es2017+ 7f3a153
  • build: remove .min at umd bundles 5a7e015
  • chore: add source in the bundle 4c9c185
  • docs: updated docs a981cf2
  • docs: updated download urls 1ccfad3
  • docs: updated keyGenerator info 3c8b373
  • docs: updated umd filesizes ad51c23
  • feat: buildKeyGenerator and ids with req.data by default 9379fce
  • fix: include data at keyGenerator (#116) 6f9ef36
  • perf: only execute one generateKey per request fa2c6e3
  • tag: v0.8.2 650d094

v0.8.1 - 2022-01-13

Merged

  • build: Yarn v2 and ESM & CJS bundles #114
  • chore(deps): bump follow-redirects from 1.14.6 to 1.14.7 #113
  • chore(deps-dev): bump webpack from 5.65.0 to 5.66.0 #112

Commits

  • chore: eslint no-explicit-any 93df4fd
  • deps: fixed colors (marak/colors.js#285) 8243da5
  • deps: updated typescript-eslint monorepo 829b1a7
  • docs: fixed casing c76f2b7
  • docs: updated download urls ab53ac1
  • feat: cache predicate now supports async functions 88d45cc
  • fix: await unawaited promises and eslint more severe ff73ad5
  • fix: removed deprecated code e11e346
  • refactor: prefer unknown instead of any d0b0e2f
  • refactor: removed return await c3661a6
  • refactor: simplified cachePredicate 38a5ecd
  • refactor: used triple equal sign 1b93070
  • tag: v0.8.1 f928cfa
  • test: static roots to prevent other tests from running 57ee1e0

v0.8.0 - 2022-01-08

Commits

  • build: disabled downLevelIteration d30b862
  • deps: updated yarn.lock 2de68f3
  • docs: added SECURITY.md a6313ea
  • docs: fixed baseURL casing in examples & documentation 85336da
  • docs: updated download urls 75ec6fd
  • fix: code scanning alert 733a476
  • refactor: removed “abstract” buildInterceptor function f30e262
  • refactor: removed classes to decrease bundle size cd2f14c
  • refactor!: removed isAxiosCacheInterceptor function 37431a9
  • tag: v0.8.0 46a4ee5
  • tests: fixed coverage by enabling sourceMaps again 17408aa
  • tests: splited header interpreter tests into multiple files 4f938a4

v0.8.0-beta1 - 2022-01-07

Merged

  • docs: documentation at axios-cache-interceptor.js.org #108
  • chore(deps-dev): bump jest from 27.4.6 to 27.4.7 #107
  • chore(deps-dev): bump jest from 27.4.5 to 27.4.6 #105
  • chore(deps-dev): bump @types/node from 17.0.7 to 17.0.8 #106
  • chore(deps-dev): bump @types/jest from 27.0.3 to 27.4.0 #98

Commits

  • chore: bundles exports everything and webpack bundles everything ed1e163
  • chore: fixed default tsconfig.json 96e2d80
  • chore: fixed runkit import 4c58316
  • docs: added blazing fast badge 225658f
  • docs: added bundlephobia link 7c19739
  • docs: added docs mention at runkit example bf486ac
  • docs: added info about global axios usage 53c4d41
  • docs: added interactive examples 7207542
  • docs: added og preview 636ebb3
  • docs: added url-imports example e34bfdd
  • docs: added usage and examples page 06d9979
  • docs: fixed cache.update example 766b016
  • docs: fixed development cdn link 3daf7be
  • docs: fixed examples and added cache: false example 16600b0
  • docs: fixed source links c5de326
  • docs: fixed sw.js location b11d51d
  • docs: fixed tsdocs and added storages section 4c1e0ec
  • docs: offline support for an axios library does not make sense 6353b48
  • docs: pwa config f810365
  • docs: trying to fix runkit cors bcc1f47
  • docs: updated readme 1f9ddb4
  • examples: updated runkit example 4cfa8d0
  • feat: added isAxiosCacheInterceptor function c32c452
  • feat: allow ttl to be defined based on the response 1e87549
  • feat: suupport for async CacheUpdater cfbd601
  • fix: include default storages in cjs bundle 8d5a90e
  • fix: proper generic usage to type deep properties ce2f597
  • merge: merge yarn.lock b66ee1e
  • merge: package.json and yarn.lock 9e3c0f0
  • refactor: added data property in memory storages 500ac71
  • refactor: allow storages not return promises 567c1b2
  • refactor: extracted static functions to a single file c57916f
  • refactor: modified and simplified storages bafe1de
  • refactor: prefer unknown over any and removed find method from storages 79ce192
  • refactor: simplified defaultKeyGenerator function c155982
  • refactor: simplified header interpreter e776f01
  • style: prettified code 3c38985
  • tag: v0.8.0-beta1 db26ec6
  • tests: 100% coverage again a7751fd

v0.7.9 - 2021-12-30

Merged

  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #97

Commits

  • deps: updated fast-defer c6bec60
  • docs: fixed badges links 37a37b7
  • docs: updated docs ec523e8
  • feat: added many build options 232e9c5
  • fix: verify built ecmascript versions with es-check 58b6b12
  • refactor: prevent confusion by renaming createCache to useCache 4a0a99f
  • tag: v0.7.9 2e91a8f
  • test: added index.development tests 1e251dd

v0.7.8 - 2021-12-27

Commits

  • chore: fixed prettier config 144d3ae
  • deps: removed unused dependency 1b1b93b
  • docs: updated badges 5e04e5c
  • perf: minified code bundled as ES6 because axios itself needs ES6 8cad803
  • style: formatted code 27de629
  • tag: v0.7.8 cd0c189

v0.7.7 - 2021-12-27

Merged

  • chore(deps-dev): bump @types/node from 17.0.4 to 17.0.5 #94

Commits

  • refactor: deprecated useCache in favor of createCache (#95) 065b6ef
  • tag: v0.7.7 c611b42
  • test: added one simple test fec63a8

v0.7.6 - 2021-12-26

Merged

  • chore(deps-dev): bump @types/node from 17.0.3 to 17.0.4 #92
  • chore(deps-dev): bump @types/node from 17.0.2 to 17.0.3 #91
  • chore(deps-dev): bump @typescript-eslint/parser from 5.7.0 to 5.8.0 #88
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #89
  • chore(deps-dev): bump @types/node from 17.0.1 to 17.0.2 #90
  • chore(deps-dev): bump @types/node from 17.0.0 to 17.0.1 #85
  • chore(deps-dev): bump concurrently from 6.4.0 to 6.5.1 #86
  • chore(deps-dev): bump eslint from 8.4.1 to 8.5.0 #87
  • chore(deps-dev): bump ts-jest from 27.1.1 to 27.1.2 #84
  • chore(deps-dev): bump @types/node from 16.11.13 to 17.0.0 #83
  • chore(deps-dev): bump @babel/preset-env from 7.16.4 to 7.16.5 #78
  • chore(deps-dev): bump @babel/runtime from 7.16.3 to 7.16.5 #75
  • chore(deps-dev): bump @babel/preset-typescript from 7.16.0 to 7.16.5 #76
  • chore(deps-dev): bump @babel/plugin-transform-runtime #77
  • chore(deps-dev): bump @babel/plugin-transform-modules-commonjs #79

Commits

  • chore: include runkit examples 4fc6825
  • deps: updated cache-parser 9a2e4bc
  • deps: updated some dependencies 0640141
  • perf: reduce bundle size and replaced babel by ts-loader 6e25ba6
  • tag: v0.7.6 d6b2aff

v0.7.5 - 2021-12-13

Commits

v0.7.4 - 2021-12-13

Commits

v0.7.3 - 2021-12-13

Commits

  • chore: defined package.json browser field 3b40abd
  • deps: updated some dependencies 86a576d
  • deps: use cache-parser 6ce658b
  • refactor: better cache predicate function a77cde7
  • tag: v0.7.3 47beacc

v0.7.2 - 2021-12-11

Commits

  • chore: fixed typescript build ef94c70
  • chore: minor config changes d00b607
  • chore: use default webpack-terser-plugin 2d157c8
  • deps: updated dev dependencies b8623b6
  • refactor: externalized createCacheData function c3a0fea
  • refactor: made some methods static and public b4ad24d
  • style: fixed prettier plugin order 6929b02
  • tag: v0.7.2 795d706

v0.7.1 - 2021-12-09

Commits

v0.7.0 - 2021-12-09

Commits

  • chore: CacheOptions at the top of the file 1615f28
  • chore: correct babel filename 5d77ef1
  • chore: don’t transpile node_modules 05aadff
  • chore: good times 😃 1a5fdf9
  • chore: removed babel runtime usage d2a6fed
  • chore: transpile @tusbar/cache-control and correct babel config 32afef4
  • chore: use default browserslist config e9aeacc
  • chore!: use google browserlist config 1fc3552
  • deps: added missing explicit dependency 4fa9bc9
  • docs: updated badges 3ebe9e5
  • docs: updated readme badges f7f9033
  • refactor: bundle does not export everything that index has 488cd49
  • style: formatted code 964f7b0
  • tag: v0.7.0 39777cc
  • tag: v0.7.0 9d0f429

v0.7.0-beta3 - 2021-12-08

Commits

v0.7.0-beta2 - 2021-12-08

Commits

  • fix: fixed package.json bundle index name ae77e6a
  • tag: v0.7.0-beta2 5884d38

v0.7.0-beta1 - 2021-12-08

Merged

  • chore(deps-dev): bump @typescript-eslint/parser from 5.5.0 to 5.6.0 #69
  • chore(deps-dev): bump eslint from 8.4.0 to 8.4.1 #70
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #71
  • chore(deps-dev): bump @types/node from 16.11.11 to 16.11.12 #72
  • chore(deps-dev): bump eslint from 8.3.0 to 8.4.0 #66
  • chore(deps-dev): bump prettier from 2.5.0 to 2.5.1 #68
  • chore(deps-dev): bump ts-jest from 27.0.7 to 27.1.0 #67

Commits

  • deps: updated ts-jest 704be77
  • feat: added web bundle and babel 78cf406
  • feat!: removed createCache function 60ad91e
  • fix: fixed tests b9b4f79
  • perf: removed tslib and typed-core in favor of fast-defer 07ec645
  • tag: v0.7.0-beta1 6a67d4c

v0.6.3 - 2021-12-02

Merged

  • chore(deps-dev): bump jest from 27.4.2 to 27.4.3 #65
  • chore(deps-dev): bump @types/node from 16.11.10 to 16.11.11 #61
  • chore(deps): bump @tusbar/cache-control from 0.6.0 to 0.6.1 #60
  • chore(deps-dev): bump @typescript-eslint/parser from 5.4.0 to 5.5.0 #62
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #63
  • chore(deps-dev): bump jest from 27.4.0 to 27.4.2 #64
  • chore(deps-dev): bump @types/node from 16.11.9 to 16.11.10 #58
  • chore(deps-dev): bump prettier from 2.4.1 to 2.5.0 #59

Commits

v0.6.2 - 2021-11-23

Commits

v0.6.1 - 2021-11-23

Merged

  • chore(deps-dev): bump @types/node from 16.11.8 to 16.11.9 #57
  • chore(deps-dev): bump @types/jest from 27.0.2 to 27.0.3 #56
  • chore(deps-dev): bump @types/node from 16.11.7 to 16.11.8 #55
  • chore(deps-dev): bump typescript from 4.4.4 to 4.5.2 #54

Commits

  • build: emit declaration in dist folder e2de928
  • docs: removed readme duplicated title 1e1627b
  • tag: v0.6.1 097a179

v0.6.0 - 2021-11-15

Merged

  • feat: etag and if-modified-since support #53
  • feat: storage abstractions #52
  • feat: more headers supports, tests and must-revalidate fix #51
  • chore(deps-dev): bump @types/node from 16.11.6 to 16.11.7 #48
  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.24 to 0.3.30 #47

Commits

  • feat: immutable cache support 76a8af7
  • fix: compile to ES2020, instead of ES2021 5970483
  • style: prettier and changelog config changes 19d0e9b
  • tag: v0.6.0 bd98a16

v0.5.1 - 2021-11-05

Commits

v0.5.0 - 2021-10-28

Merged

  • chore(deps-dev): bump @types/node from 16.11.4 to 16.11.6 #46

Commits

v0.4.1 - 2021-10-25

Merged

  • chore(deps-dev): bump @types/node from 16.11.3 to 16.11.4 #44
  • chore(deps-dev): bump @types/node from 16.11.1 to 16.11.3 #43
  • chore(deps-dev): bump jest from 27.2.5 to 27.3.1 #42
  • chore(deps-dev): bump ts-jest from 27.0.6 to 27.0.7 #40
  • chore(deps-dev): bump @types/node from 16.11.0 to 16.11.1 #39
  • chore(deps-dev): bump @types/node from 16.10.9 to 16.11.0 #37
  • chore(deps-dev): bump ts-jest from 27.0.5 to 27.0.6 #38
  • chore(deps-dev): bump @types/node from 16.10.3 to 16.10.9 #36
  • chore(deps-dev): bump typescript from 4.4.3 to 4.4.4 #34

Commits

  • build: emit consistent javascript bundles with ES2021 cc23204
  • build: separate code and types build folder ede19c1
  • deps: latest @arthurfiorette/prettier-config b2ba65e
  • fix: fixed isCacheValid function and added tests 6e6100b
  • refactor: externalized cache eviction predicate f141b2e
  • tag: v0.4.1 28e3392
  • tag: v0.4.1 6ec1b57

v0.4.0 - 2021-10-12

Merged

  • chore(deps-dev): bump jest from 27.2.4 to 27.2.5 #33

Commits

  • docs: correct suported axios version 6b790af
  • docs: updated documentation 9b9827c
  • docs: updated minimal example dd1fa41
  • docs: updated readme 4c757d3
  • docs: updated readme 861567a
  • feat: preserve response status codes and use response.cached 75deccf
  • feat!: updated axios to v0.22.0 1713bb0
  • fix: generic spaghetti that axios brought 12a5032
  • fix: response and request types 891f1d0
  • merge: yarn.lock 03c4fba
  • refactor: cacheUpdater as generic function 2fa2557
  • refactor: eslint more strict 0605ad8
  • refactor: more type and naming refactors b42d3f1
  • style: indented tsconfig comments 65cec04
  • style: prettified code 3ed92c8
  • tag: v0.4.0 87880cf
  • tests: correct test name 49f80d7

v0.3.0 - 2021-10-09

Merged

  • chore(deps-dev): bump @types/node from 16.10.2 to 16.10.3 #32
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #30
  • chore(deps-dev): bump @typescript-eslint/parser from 4.32.0 to 4.33.0 #31

Commits

v0.2.8 - 2021-09-30

Merged

  • chore(deps-dev): bump jest from 27.2.3 to 27.2.4 #27
  • chore(deps-dev): bump @types/node from 16.10.1 to 16.10.2 #28
  • chore(deps-dev): bump jest from 27.2.2 to 27.2.3 #26
  • chore(deps-dev): bump @typescript-eslint/parser from 4.31.2 to 4.32.0 #25
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #24
  • chore(deps-dev): bump jest from 27.2.1 to 27.2.2 #23
  • chore(deps-dev): bump @types/node from 16.9.6 to 16.10.1 #22

Commits

v0.2.7 - 2021-09-26

Commits

  • chore: updated tsconfig 9ea72dc
  • fix: force import type to help compilation tools f8adcc4
  • refactor: removed double if 9d33ad6
  • refactor: renamed interceptor apply method c70bf3a
  • refactor: use for in instead of Object.entries 5b9847d
  • tag: v0.2.7 bc1aa19

v0.2.6 - 2021-09-26

Commits

  • ci: only run codeql when js files are changed b861277
  • refactor: use the same object for both properties 47349df
  • tag: v0.2.6 9c1f74f

v0.2.5 - 2021-09-23

Merged

  • chore(deps-dev): bump prettier-plugin-organize-imports #21
  • chore(deps): bump ansi-regex from 5.0.0 to 5.0.1 #20
  • chore(deps-dev): bump @types/node from 16.9.4 to 16.9.6 #19

Commits

v0.2.4 - 2021-09-21

Merged

  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #16
  • chore(deps-dev): bump @typescript-eslint/parser from 4.31.1 to 4.31.2 #18
  • chore(deps-dev): bump jest from 27.2.0 to 27.2.1 #17
  • chore(deps-dev): bump @types/jest from 27.0.1 to 27.0.2 #15

Commits

v0.2.3 - 2021-09-21

Commits

v0.2.2 - 2021-09-20

Commits

v0.2.1 - 2021-09-20

Commits

  • chore: prettify script with plugins c917f36
  • chore: push git tag on yarn version ec01751
  • chore: removed filename in launch.json eb868d4
  • refactor: concurreny fixes and refactored deferred 70e5c07
  • refactor: removed symbol support and more tests 5b6d14f
  • tag: v0.2.1 1099942

v0.2.0 - 2021-09-20

Merged

  • chore(deps-dev): bump @types/node from 16.9.2 to 16.9.4 #14
  • chore(deps-dev): bump @types/node from 16.9.1 to 16.9.2 #13
  • chore(deps-dev): bump prettier from 2.4.0 to 2.4.1 #12

Commits

  • chore: changelog generation 4363f65
  • feat: enable cache by creating or applying f4bbd8b
  • fix: a bunch of tests 6075a0a
  • fix: axios headers are lowercased 1f88779
  • fix: concurrent requests not beeing cached 1490bfc
  • refactor: interceptors in classes f1033a5
  • refactor: renamed status constants 6e61c0d
  • refactor: requests ids can also be symbol 38133a7
  • style: prettified code 45630e3
  • tag: v0.2.0 8228045
  • tag: v0.2.0 3ae95cf

v0.1.3 - 2021-09-15

Commits

v0.1.2 - 2021-09-15

Commits

  • fix: prevented bugs with the start of id being ::id c4a2dc3
  • tag: 0.1.2 0777874

v0.1.1 - 2021-09-15

Commits

v0.1.0 - 2021-09-15

Merged

  • chore(deps-dev): bump @typescript-eslint/parser from 4.31.0 to 4.31.1 #11
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #10

Commits

  • chore: removed unused methods from memory storage 5ddf9ed
  • chore: vscode tests debug b5c5905
  • ci: added main ci to lint and test code c48769a
  • ci: updated ci to support better caching 1c442ce
  • docs: changed # to h1 3f0e022
  • docs: fixed project name 🤣 6972069
  • docs: updated codecov badge token b45fd54
  • docs: updated readme d8afd8a
  • feat: interpreter also handles Expires header (and tests) 288c118
  • fix: fixed a log of bugs and added unit tests 2bbc9cb
  • refactor: init request and response tests 84dc522
  • refactor: more tests and fixes ee36bd5
  • refactor: ttl and createdAt instead of maxAge and storage takes care of staled entries be5ee1e
  • refactor: use generics on responseMatch 1c10b41
  • tag: v0.1.0 6d5bcf3
  • tests: added cache predicate tests bb552c8
  • tests: added deferred tests d09b3ad
  • tests: added key generator tests 7975c58

v0.0.6 - 2021-09-11

Commits

v0.0.5 - 2021-09-11

Merged

  • chore(deps-dev): bump prettier from 2.3.2 to 2.4.0 #9
  • chore(deps-dev): bump @types/node from 16.7.13 to 16.9.1 #8

Commits

  • chore: change built target to ESNext c1242ac
  • chore: updated eslint rules 4825739
  • dps: bump typescript@4.4.2 to typescript@4.4.3 b63e67b
  • feat: better cache predicate 892dab4
  • fix: define an empty waiting object at creation 2c49a49
  • refactor: axios.defaults.cache required 29d79d5
  • refactor: eslint more strict and some minor refactors d2c2a56
  • refactor: externalized the header interceptor ce2b7ec
  • refactor: moved all “utils” to one folder 211dd50
  • refactor: save all deferred to cache.waiting instead of in the storage ab051fc
  • Revert “tag: v0.0.6” aa0f90e
  • style: prettified code 6ae6d8f
  • tag: v0.0.4 96bc45d
  • tag: v0.0.5 (4 was already used) 99f69ce
  • tag: v0.0.6 80c4220

v0.0.4 - 2021-09-08

Merged

  • chore(deps-dev): bump axios from 0.21.1 to 0.21.4 #5
  • chore(deps-dev): bump @typescript-eslint/parser from 4.30.0 to 4.31.0 #4
  • chore(deps-dev): bump @types/node from 16.7.10 to 16.7.13 #6
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #3
  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.23 to 0.3.24 #1

Commits

  • chore: include eslint files on package 0e88571
  • docs: npm badge a43dfab
  • docs: updated author and readme 3465bc3
  • docs: updated readme 33f7385
  • style: use @arthurfiorette/prettier-config dc56085

v0.0.3 - 2021-09-01

Commits

v0.0.2 - 2021-09-01

Commits

v0.0.1 - 2021-09-01

Commits

Made with ❤️

- +
Skip to content

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog and this project adheres to Semantic Versioning.

Generated by auto-changelog.

v1.7.0

Commits

v1.7.0 - 2025-03-17

Merged

  • build(deps): bump codecov/codecov-action from 4 to 5 #943
  • docs: add missing ‘different’ word into the code example comment #984
  • build(deps-dev): bump axios from 1.8.2 to 1.8.3 #988
  • build(deps-dev): bump @types/node from 22.13.9 to 22.13.10 #987
  • build(deps-dev): bump axios from 1.8.1 to 1.8.2 #986
  • build(deps-dev): bump @types/node from 22.13.8 to 22.13.9 #985
  • build(deps-dev): bump typescript from 5.7.3 to 5.8.2 #983
  • build(deps-dev): bump @types/node from 22.13.5 to 22.13.8 #982
  • build(deps-dev): bump axios from 1.8.0 to 1.8.1 #981
  • build(deps-dev): bump axios from 1.7.9 to 1.8.0 #979
  • build(deps-dev): bump @types/node from 22.13.4 to 22.13.5 #978
  • build(deps-dev): bump @types/node from 22.13.2 to 22.13.4 #976
  • build(deps-dev): bump @types/node from 22.13.1 to 22.13.2 #974
  • build(deps-dev): bump @arthurfiorette/biomejs-config from 1.0.6 to 1.0.7 #973
  • build(deps-dev): bump @types/node from 22.13.0 to 22.13.1 #972
  • build(deps-dev): bump @types/node from 22.12.0 to 22.13.0 #971
  • build(deps-dev): bump @types/node from 22.10.10 to 22.12.0 #970
  • build(deps-dev): bump @types/node from 22.10.9 to 22.10.10 #969
  • build(deps-dev): bump @types/node from 22.10.7 to 22.10.9 #968
  • build(deps-dev): bump vitepress from 1.6.2 to 1.6.3 #967
  • build(deps-dev): bump vitepress from 1.6.1 to 1.6.2 #966
  • build(deps-dev): bump vitepress from 1.5.0 to 1.6.1 #965
  • build(deps-dev): bump @types/node from 22.10.6 to 22.10.7 #964
  • build(deps-dev): bump @types/node from 22.10.5 to 22.10.6 #963
  • build(deps-dev): bump typescript from 5.7.2 to 5.7.3 #962
  • build(deps-dev): bump @types/node from 22.10.3 to 22.10.5 #960
  • build(deps-dev): bump @types/node from 22.10.2 to 22.10.3 #959
  • build(deps-dev): bump @types/node from 22.10.1 to 22.10.2 #957
  • build(deps): bump nanoid from 3.3.7 to 3.3.8 #956
  • build(deps-dev): bump c8 from 10.1.2 to 10.1.3 #955
  • build(deps-dev): bump axios from 1.7.8 to 1.7.9 #954
  • build(deps-dev): bump @types/node from 22.10.0 to 22.10.1 #952
  • build(deps-dev): bump @arthurfiorette/biomejs-config from 1.0.5 to 1.0.6 #951
  • build(deps-dev): bump @types/node from 22.9.3 to 22.10.0 #950
  • build(deps-dev): bump axios from 1.7.7 to 1.7.8 #949
  • build(deps-dev): bump @types/node from 22.9.1 to 22.9.3 #948
  • build(deps-dev): bump typescript from 5.6.3 to 5.7.2 #947
  • build(deps-dev): bump @types/node from 22.9.0 to 22.9.1 #946
  • build(deps): bump cross-spawn from 7.0.3 to 7.0.6 #945
  • build(deps-dev): bump @swc/helpers from 0.5.13 to 0.5.15 #942
  • build(deps-dev): bump vitepress from 1.4.5 to 1.5.0 #941
  • build(deps-dev): bump @types/node from 22.8.7 to 22.9.0 #940
  • build(deps-dev): bump @types/node from 22.8.6 to 22.8.7 #939
  • build(deps-dev): bump vitepress from 1.4.3 to 1.4.5 #938
  • build(deps-dev): bump vitepress from 1.4.2 to 1.4.3 #936
  • build(deps-dev): bump @types/node from 22.8.5 to 22.8.6 #937
  • build(deps-dev): bump tslib from 2.8.0 to 2.8.1 #935
  • docs: vue behavior when modifying cached arrays #934
  • build(deps-dev): bump @types/node from 22.8.4 to 22.8.5 #933
  • build(deps-dev): bump vitepress from 1.4.1 to 1.4.2 #931
  • build(deps-dev): bump @types/node from 22.8.2 to 22.8.4 #930
  • build(deps-dev): bump @types/node from 22.8.1 to 22.8.2 #929
  • build(deps-dev): bump @types/node from 22.7.9 to 22.8.1 #928
  • build(deps-dev): bump @types/node from 22.7.8 to 22.7.9 #927

Commits

v1.6.2 - 2024-10-22

Merged

  • fix: aborted requests should not clear its cache afterwards if previous request was cached #923
  • build(deps-dev): bump @types/node from 22.7.7 to 22.7.8 #926
  • build(deps-dev): bump @types/node from 22.7.6 to 22.7.7 #924

Commits

1.6.1 - 2024-10-18

v1.6.1 - 2024-10-22

Merged

  • fix: aborted requests should not clear its cache afterwards if previous request was cached #923
  • build(deps-dev): bump @types/node from 22.7.7 to 22.7.8 #926
  • build(deps-dev): bump @types/node from 22.7.6 to 22.7.7 #924
  • fix: cloneData for concurrent requests #921
  • build(deps-dev): bump @biomejs/biome from 1.9.3 to 1.9.4 #920
  • build(deps-dev): bump @types/node from 22.7.5 to 22.7.6 #919
  • build(deps-dev): bump tslib from 2.7.0 to 2.8.0 #918
  • build(deps-dev): bump vitepress from 1.4.0 to 1.4.1 #917
  • build(deps-dev): bump typescript from 5.6.2 to 5.6.3 #916
  • build(deps): bump rollup from 2.79.1 to 2.79.2 #914
  • build(deps-dev): bump vitepress from 1.3.4 to 1.4.0 #910
  • build(deps): bump ejs from 3.1.9 to 3.1.10 #912
  • build(deps): bump vite from 5.4.1 to 5.4.8 #913
  • build(deps-dev): bump @types/node from 22.7.4 to 22.7.5 #911
  • build(deps-dev): bump @biomejs/biome from 1.9.2 to 1.9.3 #908
  • build(deps-dev): bump @types/node from 22.7.2 to 22.7.4 #907
  • docs: Fix headerInterpreter type typo #905
  • build(deps-dev): bump @types/node from 22.7.0 to 22.7.2 #904
  • build(deps-dev): bump @types/node from 22.6.1 to 22.7.0 #903
  • build(deps-dev): bump @types/node from 22.5.5 to 22.6.1 #902
  • build(deps-dev): bump jsdom from 25.0.0 to 25.0.1 #901
  • build(deps-dev): bump @biomejs/biome from 1.9.1 to 1.9.2 #900
  • build(deps-dev): bump @types/node from 22.5.4 to 22.5.5 #898
  • build(deps-dev): bump @biomejs/biome from 1.9.0 to 1.9.1 #897
  • build(deps-dev): bump @biomejs/biome from 1.5.3 to 1.9.0 #895
  • build(deps-dev): bump @types/node from 20.11.5 to 22.5.4 #892
  • build(deps-dev): bump jsdom from 24.1.1 to 25.0.0 #885

Commits

v1.6.0 - 2024-09-13

Merged

  • build(deps-dev): bump auto-changelog from 2.4.0 to 2.5.0 #894
  • build(deps-dev): bump typescript from 5.5.4 to 5.6.2 #893
  • build(deps-dev): bump @swc/helpers from 0.5.12 to 0.5.13 #890
  • build(deps-dev): bump axios from 1.7.5 to 1.7.7 #889
  • build(deps-dev): bump axios from 1.7.4 to 1.7.5 #886
  • build(deps-dev): bump vitepress from 1.3.3 to 1.3.4 #884
  • build(deps-dev): bump tslib from 2.6.3 to 2.7.0 #883
  • build(deps-dev): bump vitepress from 1.3.2 to 1.3.3 #879
  • build(deps-dev): bump axios from 1.7.3 to 1.7.4 #877
  • build(deps-dev): bump vitepress from 1.3.1 to 1.3.2 #874
  • build(deps-dev): bump c8 from 9.1.0 to 10.1.2 #855
  • feat: add stale flag in request return object #843
  • build(deps-dev): bump axios from 1.7.2 to 1.7.3 #872
  • build(deps-dev): bump typescript from 5.5.3 to 5.5.4 #868
  • build(deps-dev): bump jsdom from 24.1.0 to 24.1.1 #867
  • build(deps-dev): bump vitepress from 1.3.0 to 1.3.1 #864
  • build(deps-dev): bump @swc/helpers from 0.5.11 to 0.5.12 #865
  • build(deps-dev): bump vitepress from 1.2.3 to 1.3.0 #860
  • build(deps-dev): bump typescript from 5.5.2 to 5.5.3 #859
  • build(deps-dev): bump typescript from 5.4.5 to 5.5.2 #857
  • build(deps-dev): bump tslib from 2.6.2 to 2.6.3 #851
  • feat: clear storage method #848
  • build(deps-dev): bump vitepress from 1.2.2 to 1.2.3 #849
  • build(deps-dev): bump @types/jsdom from 21.1.6 to 21.1.7 #845
  • [ImgBot] Optimize images #844
  • docs: add an example node-cache implementation in docs #841
  • build(deps-dev): bump jsdom from 24.0.0 to 24.1.0 #842

Commits

v1.5.3 - 2024-05-22

Merged

  • #839
  • #840
  • #838
  • #837
  • chore(deps-dev): bump axios from 1.6.8 to 1.7.0 #836
  • chore(deps-dev): bump vitepress from 1.1.4 to 1.2.0 #835
  • chore(deps): bump pnpm/action-setup from 3 to 4 #831
  • chore(deps-dev): bump vitepress from 1.1.3 to 1.1.4 #828
  • chore(deps-dev): bump @swc/helpers from 0.5.10 to 0.5.11 #826

Commits

v1.5.2 - 2024-04-23

Merged

  • [must-revalidate] properly revalidate based on eTag #824
  • chore(deps-dev): bump vitepress from 1.1.0 to 1.1.3 #823
  • chore(deps-dev): bump @swc/helpers from 0.5.9 to 0.5.10 #820
  • chore(deps-dev): bump @swc/helpers from 0.5.8 to 0.5.9 #819
  • chore(deps-dev): bump vitepress from 1.0.2 to 1.1.0 #817
  • chore(deps-dev): bump typescript from 5.4.4 to 5.4.5 #818
  • chore(deps-dev): bump typescript from 5.4.3 to 5.4.4 #816
  • chore(deps-dev): bump vite from 5.2.2 to 5.2.8 #814
  • chore(deps-dev): bump vitepress from 1.0.1 to 1.0.2 #813
  • chore(deps-dev): bump @swc/helpers from 0.5.7 to 0.5.8 #812
  • chore(deps-dev): bump vitepress from 1.0.0-rc.45 to 1.0.1 #809
  • chore(deps-dev): bump typescript from 5.4.2 to 5.4.3 #808
  • chore(deps-dev): bump axios from 1.6.7 to 1.6.8 #807
  • chore(deps-dev): bump @swc/helpers from 0.5.6 to 0.5.7 #806
  • chore(deps-dev): bump follow-redirects from 1.15.4 to 1.15.6 #805
  • chore(deps-dev): bump typescript from 5.3.3 to 5.4.2 #802
  • chore(deps-dev): bump vitepress from 1.0.0-rc.44 to 1.0.0-rc.45 #801
  • chore(deps-dev): bump @swc-node/register from 1.8.0 to 1.9.0 #800
  • chore(deps-dev): bump vitepress from 1.0.0-rc.43 to 1.0.0-rc.44 #798
  • chore(deps-dev): bump vitepress from 1.0.0-rc.42 to 1.0.0-rc.43 #797
  • docs: update cache jsdocs for debugging #796
  • chore(deps-dev): bump jsdom from 23.2.0 to 24.0.0 #779
  • chore(deps): bump pnpm/action-setup from 2 to 3 #794
  • chore(deps): bump codecov/codecov-action from 3 to 4 #786
  • chore(deps): bump object-code from 1.3.2 to 1.3.3 #793
  • docs: improved clarity of code comments in invalidating-cache.md #792
  • chore(deps-dev): bump vitepress from 1.0.0-rc.41 to 1.0.0-rc.42 #791
  • chore(deps-dev): bump @swc/helpers from 0.5.3 to 0.5.6 #790
  • chore(deps-dev): bump vitepress from 1.0.0-rc.40 to 1.0.0-rc.41 #789
  • chore(deps-dev): bump @swc-node/register from 1.6.8 to 1.8.0 #788
  • chore(deps-dev): bump axios from 1.6.5 to 1.6.7 #785
  • chore(deps-dev): bump vitepress from 1.0.0-rc.39 to 1.0.0-rc.40 #782
  • chore(deps-dev): bump @biomejs/biome from 1.5.2 to 1.5.3 #781
  • chore(deps-dev): bump vite from 5.0.11 to 5.0.12 #777

Commits

v1.5.1 - 2024-01-19

Commits

v1.5.0 - 2024-01-19

Merged

  • fix: transformResponse running twice on cached requests #775
  • feat: correct ESM and CJS support, move to microbundle. #764
  • chore(deps-dev): bump vitepress from 1.0.0-rc.37 to 1.0.0-rc.39 #776
  • chore(deps-dev): bump @biomejs/biome from 1.5.1 to 1.5.2 #774
  • chore(deps-dev): bump vitepress from 1.0.0-rc.36 to 1.0.0-rc.37 #773
  • chore(deps-dev): bump c8 from 9.0.0 to 9.1.0 #772
  • chore(deps-dev): bump @biomejs/biome from 1.4.1 to 1.5.1 #770
  • chore(deps-dev): bump vitepress from 1.0.0-rc.35 to 1.0.0-rc.36 #769
  • chore(deps-dev): bump axios from 1.6.4 to 1.6.5 #766
  • chore(deps-dev): bump jsdom from 23.0.1 to 23.2.0 #765
  • chore(deps-dev): bump c8 from 8.0.1 to 9.0.0 #762
  • chore(deps-dev): bump axios from 1.6.3 to 1.6.4 #763
  • chore(deps-dev): bump vitepress from 1.0.0-rc.34 to 1.0.0-rc.35 #761
  • chore(deps-dev): bump vitepress from 1.0.0-rc.33 to 1.0.0-rc.34 #758
  • chore(deps-dev): bump axios from 1.6.2 to 1.6.3 #756
  • chore(deps-dev): bump vitepress from 1.0.0-rc.32 to 1.0.0-rc.33 #755

Commits

v1.4.1 - 2023-12-26

Commits

v1.4.0 - 2023-12-23

Merged

  • Ådd feature to blacklist some paths #754
  • chore(deps): bump github/codeql-action from 2 to 3 #749
  • chore(deps-dev): bump vitepress from 1.0.0-rc.31 to 1.0.0-rc.32 #751

Commits

v1.3.3 - 2023-12-13

Merged

  • chore(deps-dev): bump @biomejs/biome from 1.3.3 to 1.4.1 #740
  • chore(deps-dev): bump jsdom from 22.1.0 to 23.0.1 #739
  • Update documentation to clarify side effects of setupCache #732
  • docs: wording and fixing a broken local link #745
  • docs: rewording the invalidating cache page #744
  • chore(deps-dev): bump typescript from 5.3.2 to 5.3.3 #743
  • chore(deps-dev): bump vite from 5.0.2 to 5.0.5 #741
  • chore(deps-dev): bump vitepress from 1.0.0-rc.30 to 1.0.0-rc.31 #735
  • chore(deps-dev): bump vitepress from 1.0.0-rc.29 to 1.0.0-rc.30 #733
  • chore(deps-dev): bump typescript from 5.2.2 to 5.3.2 #728
  • chore(deps-dev): bump @types/jsdom from 21.1.5 to 21.1.6 #727
  • chore(deps-dev): bump vitepress from 1.0.0-rc.26 to 1.0.0-rc.29 #726
  • chore(deps): bump fast-defer from 1.1.7 to 1.1.8 #725
  • chore(deps-dev): bump vitepress from 1.0.0-rc.25 to 1.0.0-rc.26 #724
  • chore(deps-dev): bump tsx from 3.14.0 to 4.1.2 #721
  • chore(deps-dev): bump axios from 1.6.1 to 1.6.2 #723
  • chore(deps-dev): bump ts-loader from 9.5.0 to 9.5.1 #722
  • chore(deps-dev): bump prettier-plugin-organize-imports #717
  • chore(deps-dev): bump axios from 1.6.0 to 1.6.1 #715
  • chore(deps-dev): bump @types/webpack from 5.28.4 to 5.28.5 #714
  • chore(deps-dev): bump @types/jsdom from 21.1.4 to 21.1.5 #713
  • chore(deps-dev): bump eslint from 8.52.0 to 8.53.0 #712
  • chore(deps-dev): bump vitepress from 1.0.0-rc.24 to 1.0.0-rc.25 #711
  • docs: fix typos #707
  • chore(deps-dev): bump axios from 1.5.1 to 1.6.0 #706
  • chore(deps): bump actions/setup-node from 3 to 4 #703
  • chore(deps-dev): bump vitepress from 1.0.0-rc.23 to 1.0.0-rc.24 #704

Commits

v1.3.2 - 2023-10-23

Merged

  • chore(deps-dev): bump eslint from 8.51.0 to 8.52.0 #702
  • chore(deps-dev): bump vitepress from 1.0.0-rc.22 to 1.0.0-rc.23 #701
  • chore(deps-dev): bump @types/webpack from 5.28.3 to 5.28.4 #699
  • chore(deps-dev): bump tsx from 3.13.0 to 3.14.0 #697
  • chore(deps-dev): bump @types/jsdom from 21.1.3 to 21.1.4 #696
  • chore(deps-dev): bump vitepress from 1.0.0-rc.21 to 1.0.0-rc.22 #693
  • chore(deps-dev): bump webpack from 5.88.2 to 5.89.0 #692
  • chore(deps-dev): bump vitepress from 1.0.0-rc.20 to 1.0.0-rc.21 #691
  • chore(deps-dev): bump eslint from 8.50.0 to 8.51.0 #690
  • chore(deps-dev): bump ts-loader from 9.4.4 to 9.5.0 #689
  • chore(deps-dev): bump postcss from 8.4.27 to 8.4.31 #687
  • chore(deps-dev): bump @arthurfiorette/prettier-config #686

Commits

v1.3.1 - 2023-09-30

Merged

  • docs: expression error #684
  • chore(deps-dev): bump axios from 1.5.0 to 1.5.1 #683
  • chore(deps-dev): bump @types/webpack from 5.28.2 to 5.28.3 #682
  • chore(deps-dev): bump vitepress from 1.0.0-rc.15 to 1.0.0-rc.20 #681
  • chore(deps-dev): bump eslint from 8.49.0 to 8.50.0 #680
  • chore(deps-dev): bump vitepress from 1.0.0-rc.14 to 1.0.0-rc.15 #679
  • chore(deps-dev): bump @types/jsdom from 21.1.2 to 21.1.3 #678
  • chore(deps-dev): bump vitepress from 1.0.0-rc.13 to 1.0.0-rc.14 #677
  • chore(deps-dev): bump vitepress from 1.0.0-rc.12 to 1.0.0-rc.13 #673
  • chore(deps-dev): bump vitepress from 1.0.0-rc.10 to 1.0.0-rc.12 #672
  • chore(deps-dev): bump eslint from 8.48.0 to 8.49.0 #671
  • chore(deps): bump actions/checkout from 3 to 4 #666

Commits

  • chore: fixed bundle license 5adc229
  • ci: fixed ci tests 060e67d
  • docs: installing e6b6441
  • feat: prefer noop over undefined when debugging 16e51e7
  • feat: testing with tsx and c8 dd8f634
  • fix: handle axios errors without config (#674) 309bfe1
  • fix: rejected response deadlocks (#685) 286b2c0
  • style: formatted code fe83070
  • tag: v1.3.1 953d992

v1.3.0 - 2023-09-05

Merged

  • chore(deps-dev): bump vitepress from 1.0.0-rc.9 to 1.0.0-rc.10 #661
  • chore(deps-dev): bump axios from 1.4.0 to 1.5.0 #659
  • chore(deps-dev): bump @types/node from 18.17.11 to 18.17.12 #660
  • chore(deps-dev): bump vitepress from 1.0.0-rc.4 to 1.0.0-rc.9 #658
  • chore(deps-dev): bump eslint from 8.47.0 to 8.48.0 #657
  • chore(deps-dev): bump @types/node from 18.17.9 to 18.17.11 #654
  • chore(deps-dev): bump typescript from 5.1.6 to 5.2.2 #653
  • chore(deps-dev): bump jest-environment-jsdom from 29.6.3 to 29.6.4 #652
  • chore(deps-dev): bump jest from 29.6.3 to 29.6.4 #651
  • chore(deps-dev): bump @types/node from 18.17.8 to 18.17.9 #650
  • chore(deps-dev): bump @types/webpack from 5.28.1 to 5.28.2 #649
  • chore(deps-dev): bump @types/node from 18.17.6 to 18.17.8 #648
  • chore(deps-dev): bump @types/jest from 29.5.3 to 29.5.4 #647
  • chore(deps-dev): bump jest from 29.6.2 to 29.6.3 #645
  • chore(deps-dev): bump jest-environment-jsdom from 29.6.2 to 29.6.3 #646
  • chore(deps-dev): bump tslib from 2.6.1 to 2.6.2 #644
  • chore(deps-dev): bump @types/node from 18.17.5 to 18.17.6 #643
  • chore(deps-dev): bump eslint from 8.46.0 to 8.47.0 #638
  • chore(deps-dev): bump @types/node from 18.17.4 to 18.17.5 #637
  • chore(deps-dev): bump vitepress from 1.0.0-beta.7 to 1.0.0-rc.4 #636
  • chore(deps-dev): bump @types/node from 18.17.3 to 18.17.4 #635
  • chore(deps-dev): bump eslint-config-prettier from 8.10.0 to 9.0.0 #634
  • chore(deps-dev): bump @types/node from 18.17.2 to 18.17.3 #633
  • chore(deps-dev): bump @types/node from 18.17.1 to 18.17.2 #632
  • chore(deps-dev): bump eslint-config-prettier from 8.9.0 to 8.10.0 #630
  • chore(deps-dev): bump vitepress from 1.0.0-beta.6 to 1.0.0-beta.7 #627
  • chore(deps-dev): bump eslint from 8.45.0 to 8.46.0 #626
  • fix: avoid RangeError: Maximum call stack size exceeded on streams and other objects #616
  • chore(deps-dev): bump jest-environment-jsdom from 29.6.1 to 29.6.2 #623
  • feat: turn most types into interfaces #615
  • chore(deps-dev): bump jest from 29.6.1 to 29.6.2 #622
  • chore(deps-dev): bump eslint-config-prettier from 8.8.0 to 8.9.0 #624
  • chore(deps-dev): bump @types/node from 18.17.0 to 18.17.1 #620
  • chore(deps-dev): bump tslib from 2.6.0 to 2.6.1 #619
  • chore(deps-dev): bump @types/node from 18.16.19 to 18.17.0 #617
  • chore(deps-dev): bump vitepress from 1.0.0-beta.5 to 1.0.0-beta.6 #618
  • chore(deps-dev): bump word-wrap from 1.2.3 to 1.2.4 #614
  • chore(deps-dev): bump @typescript-eslint/parser from 5.61.0 to 5.62.0 #602
  • chore(deps-dev): bump @types/jest from 29.5.2 to 29.5.3 #600
  • chore(deps-dev): bump webpack from 5.88.1 to 5.88.2 #605
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #601
  • chore(deps-dev): bump eslint from 8.44.0 to 8.45.0 #604
  • chore(deps-dev): bump prettier-plugin-organize-imports #603
  • chore(deps-dev): bump jest-environment-jsdom from 29.6.0 to 29.6.1 #599
  • chore(deps-dev): bump jest from 29.6.0 to 29.6.1 #598
  • chore(deps-dev): bump jest from 29.5.0 to 29.6.0 #595
  • chore(deps-dev): bump jest-environment-jsdom from 29.5.0 to 29.6.0 #596
  • chore(deps-dev): bump @typescript-eslint/parser from 5.60.1 to 5.61.0 #593
  • chore: new bug template #591
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #592
  • chore(deps-dev): bump vitepress from 1.0.0-beta.3 to 1.0.0-beta.5 #589
  • chore(deps-dev): bump @types/node from 18.16.18 to 18.16.19 #590
  • chore(deps-dev): bump eslint from 8.43.0 to 8.44.0 #588
  • feat: ‘cloneData’ option to buildMemoryStorage #581
  • chore(deps-dev): bump ts-loader from 9.4.3 to 9.4.4 #584
  • chore(deps-dev): bump typescript from 5.1.5 to 5.1.6 #582
  • chore(deps-dev): bump webpack from 5.88.0 to 5.88.1 #583
  • chore(deps-dev): bump eslint from 8.42.0 to 8.43.0 #567
  • chore(deps-dev): bump ts-jest from 29.1.0 to 29.1.1 #585
  • chore(deps-dev): bump typescript from 5.1.3 to 5.1.5 #577
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #576
  • chore(deps-dev): bump tslib from 2.5.3 to 2.6.0 #575
  • chore(deps-dev): bump @typescript-eslint/parser from 5.60.0 to 5.60.1 #574
  • fix(docs): redis link to docs #571
  • chore(deps-dev): bump @types/node from 18.16.16 to 18.16.18 #559
  • chore(deps-dev): bump webpack from 5.86.0 to 5.88.0 #569
  • chore(deps-dev): bump vitepress from 1.0.0-beta.1 to 1.0.0-beta.3 #566
  • chore(deps-dev): bump @typescript-eslint/parser from 5.59.9 to 5.60.0 #564
  • Fix typo in Request ID docs #561

Commits

  • chore: dependabot f571ad3
  • chore: removed unused eslint comment cb3114f
  • chore: updated pnpm 4ab04a7
  • ci: dependabot c7e3af0
  • ci: fixed escheck 60f161a
  • ci: ignore if codecov action breaks 605d39b
  • docs: added more keywords to help with searching b352f12
  • docs: filesizes ee10f76
  • docs: fix issue template 281848a
  • docs: fix issue template v2 d672a08
  • docs: update bug again 😃 ce82bb5
  • docs: update bug report 522179b
  • docs: update bug report c91e6a0
  • docs: updated download url 8fa904c
  • feat: added CORS info on cacheTakeover ddacace
  • feat: handle non axios errors rejections (#609) 929054e
  • feat: moved tests to node:test (#628) 2cc948d
  • fix: correct config re throw ddcac5f
  • fix: infinite loading states when a restart occurs in the middle of a request. (#612) 130ef0d
  • fix: moved to native source map support 4dbfea2
  • fix: updated vitepress 3be8029
  • tag: v1.3.0 96f03c4

v1.2.0 - 2023-06-09

Merged

  • chore(deps-dev): bump eslint from 8.34.0 to 8.42.0 #551
  • chore(deps-dev): bump jest-environment-jsdom from 29.4.3 to 29.5.0 #553
  • chore(deps-dev): bump @types/node from 18.13.0 to 18.16.16 #552
  • chore(deps-dev): bump tslib from 2.5.0 to 2.5.3 #550
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #549
  • docs: cachePredicate status codes follows RFC 7231 #547

Commits

  • chore: updated dependencies c7dab4f
  • feat: v1.2.0 066cc4f
  • fix: avoid git checks while publishing 2d2696d
  • fix: correct canStale checks (#543) 82182bf
  • fix: correct lowercase test 7e5ca7e
  • fix: support max-stale on header interpreter (#543) 683dbe0
  • style: formatted code 0cca290
  • style: formatted code a5f071d
  • style: formatted code a7405e1

v1.1.1 - 2023-05-25

Merged

  • docs: fixed headerInterpreter return type #542

Commits

  • docs: cdnjs links 9e3800c
  • feat: better storage docs 5f2ed82
  • feat: max entries on memory storage #539 ebd400b
  • feat: v1.1.1 143d409
  • fix: flaky network test and improved redis documentation ee9a7de
  • fix: removed only allow pnpm aa69799
  • style: formatted code 7b0fb85

v1.1.0 - 2023-05-17

Merged

  • fix: Support stale-while-revalidate #514
  • docs: added docs for #506 #509
  • feat: staleIfError using stale-if-error directive #506
  • chore(deps-dev): bump jest-environment-jsdom from 29.4.2 to 29.4.3 #505
  • chore(deps-dev): bump jest from 29.4.2 to 29.4.3 #504
  • chore(deps-dev): bump @typescript-eslint/parser from 5.51.0 to 5.52.0 #503
  • chore(deps-dev): bump axios from 1.3.2 to 1.3.3 #502
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #501
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.45 to 1.0.0-alpha.46 #500
  • chore(deps-dev): bump eslint from 8.33.0 to 8.34.0 #499
  • chore(deps-dev): bump jest-environment-jsdom from 29.4.1 to 29.4.2 #498
  • chore(deps-dev): bump prettier from 2.8.3 to 2.8.4 #497
  • chore(deps-dev): bump jest from 29.4.1 to 29.4.2 #496
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #495
  • chore(deps-dev): bump @typescript-eslint/parser from 5.50.0 to 5.51.0 #494
  • chore(deps-dev): bump axios from 1.3.1 to 1.3.2 #492
  • chore(deps-dev): bump @arthurfiorette/prettier-config #491

Fixed

  • docs: added docs for #506 (#509) #506
  • feat: staleIfError using stale-if-error directive (#506) #506

Commits

v1.0.1 - 2023-02-02

Merged

  • chore(deps-dev): bump @typescript-eslint/parser from 5.49.0 to 5.50.0 #488
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #486
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.44 to 1.0.0-alpha.45 #489
  • chore(deps-dev): bump typescript from 4.9.4 to 4.9.5 #485
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.43 to 1.0.0-alpha.44 #484
  • docs: typo at update getting-started.md #483
  • chore(deps-dev): bump eslint from 8.32.0 to 8.33.0 #482
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.40 to 1.0.0-alpha.43 #481
  • chore(deps-dev): bump tslib from 2.4.1 to 2.5.0 #477
  • chore(deps-dev): bump jest from 29.4.0 to 29.4.1 #479
  • chore(deps-dev): bump jest-environment-jsdom from 29.4.0 to 29.4.1 #478
  • chore(deps-dev): bump es-check from 7.0.1 to 7.1.0 #476
  • chore(deps-dev): bump jest from 29.3.1 to 29.4.0 #475
  • chore(deps-dev): bump jest-environment-jsdom from 29.3.1 to 29.4.0 #474
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #473
  • chore(deps-dev): bump @typescript-eslint/parser from 5.48.2 to 5.49.0 #472
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.38 to 1.0.0-alpha.40 #470
  • chore(deps-dev): bump @types/jest from 29.2.5 to 29.2.6 #468
  • fix: prevent response storage calls if method is not supported #464
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.36 to 1.0.0-alpha.38 #467
  • chore(deps-dev): bump prettier from 2.8.1 to 2.8.3 #460
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #466
  • chore(deps-dev): bump eslint from 8.31.0 to 8.32.0 #463
  • chore(deps-dev): bump @typescript-eslint/parser from 5.48.1 to 5.48.2 #465
  • chore(deps-dev): bump prettier-plugin-organize-imports #462
  • chore(deps-dev): bump ts-jest from 29.0.4 to 29.0.5 #461
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.35 to 1.0.0-alpha.36 #457
  • chore(deps-dev): bump ts-jest from 29.0.3 to 29.0.4 #458
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #454
  • chore(deps-dev): bump @typescript-eslint/parser from 5.48.0 to 5.48.1 #455
  • chore(deps-dev): bump eslint-config-prettier from 8.5.0 to 8.6.0 #451
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.34 to 1.0.0-alpha.35 #450
  • chore(deps): bump json5 from 2.2.1 to 2.2.3 #445
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.33 to 1.0.0-alpha.34 #443
  • chore: typos #446
  • chore(deps-dev): bump @typescript-eslint/parser from 5.47.1 to 5.48.0 #448
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #447
  • chore(deps-dev): bump eslint from 8.30.0 to 8.31.0 #444
  • chore(deps-dev): bump @types/jest from 29.2.4 to 29.2.5 #442
  • chore(deps-dev): bump @typescript-eslint/parser from 5.47.0 to 5.47.1 #438
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #439

Commits

v1.0.0 - 2022-12-26

Merged

  • chore(deps-dev): bump vitepress from 1.0.0-alpha.32 to 1.0.0-alpha.33 #436
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #434
  • chore(deps-dev): bump @typescript-eslint/parser from 5.46.1 to 5.47.0 #435
  • chore(deps-dev): bump eslint from 8.29.0 to 8.30.0 #432
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.31 to 1.0.0-alpha.32 #431
  • docs: Fix request-id.md docs #429
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #428
  • chore(deps-dev): bump @typescript-eslint/parser from 5.46.0 to 5.46.1 #427
  • chore(deps-dev): bump vitepress from 1.0.0-alpha.30 to 1.0.0-alpha.31 #426
  • chore(deps-dev): bump prettier from 2.8.0 to 2.8.1 #421
  • chore: default prefix parameter for web storage #425
  • chore(deps-dev): bump typescript from 4.9.3 to 4.9.4 #420
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #423
  • chore(deps-dev): bump @typescript-eslint/parser from 5.45.1 to 5.46.0 #422
  • chore(deps-dev): bump @typescript-eslint/parser from 5.45.0 to 5.45.1 #419
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #418
  • Axios cache interceptor v1 roadmap #368
  • chore(deps-dev): bump eslint from 8.28.0 to 8.29.0 #417
  • chore(deps-dev): bump ts-loader from 9.4.1 to 9.4.2 #416
  • chore(deps-dev): bump @typescript-eslint/parser from 5.44.0 to 5.45.0 #414
  • chore(deps-dev): bump prettier from 2.7.1 to 2.8.0 #411
  • chore(deps-dev): bump prettier-plugin-organize-imports #413
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #408
  • chore(deps-dev): bump @typescript-eslint/parser from 5.42.1 to 5.44.0 #409
  • chore(deps-dev): bump eslint from 8.27.0 to 8.28.0 #407
  • chore(deps-dev): bump webpack-cli from 4.10.0 to 5.0.0 #406
  • chore(deps-dev): bump typescript from 4.8.4 to 4.9.3 #404
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #400
  • chore(deps-dev): bump prettier-plugin-organize-imports #399
  • chore(deps-dev): bump webpack from 5.74.0 to 5.75.0 #398
  • chore(deps-dev): bump jest-environment-jsdom from 29.3.0 to 29.3.1 #396
  • chore(deps-dev): bump eslint from 8.26.0 to 8.27.0 #395
  • chore(deps-dev): bump @typescript-eslint/parser from 5.42.0 to 5.42.1 #393
  • chore(deps-dev): bump jest-environment-jsdom from 29.2.2 to 29.3.0 #394
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #392
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #391
  • chore(deps-dev): bump tslib from 2.4.0 to 2.4.1 #390
  • chore(deps-dev): bump @typescript-eslint/parser from 5.41.0 to 5.42.0 #389
  • chore(deps-dev): bump @typescript-eslint/parser from 5.40.1 to 5.41.0 #387
  • chore(deps-dev): bump jest-environment-jsdom from 29.2.1 to 29.2.2 #388
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #386
  • chore(deps-dev): bump eslint from 8.25.0 to 8.26.0 #385
  • chore(deps-dev): bump jest-environment-jsdom from 29.2.0 to 29.2.1 #384
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #381
  • chore(deps-dev): bump @typescript-eslint/parser from 5.40.0 to 5.40.1 #382
  • chore(deps-dev): bump jest-environment-jsdom from 29.1.2 to 29.2.0 #379
  • chore(deps-dev): bump @typescript-eslint/parser from 5.39.0 to 5.40.0 #375
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #376
  • chore(deps-dev): bump express from 4.18.1 to 4.18.2 in /docs #373
  • chore(deps-dev): bump eslint from 8.24.0 to 8.25.0 #372
  • chore(deps-dev): bump @typescript-eslint/parser from 5.38.1 to 5.39.0 #364
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #363
  • chore(deps-dev): bump jest-environment-jsdom from 29.1.1 to 29.1.2 #362
  • chore(deps-dev): bump jest-environment-jsdom from 29.0.3 to 29.1.1 #360
  • chore(deps-dev): bump typescript from 4.8.3 to 4.8.4 #361
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #359
  • chore(deps-dev): bump @typescript-eslint/parser from 5.38.0 to 5.38.1 #358
  • chore(deps): bump ahmadnassri/action-dependabot-auto-merge #356
  • chore(deps-dev): bump eslint from 8.23.1 to 8.24.0 #357
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #351
  • chore(deps-dev): bump @typescript-eslint/parser from 5.37.0 to 5.38.0 #352
  • chore(deps-dev): bump ts-loader from 9.3.1 to 9.4.1 #355
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #350
  • chore(deps-dev): bump @typescript-eslint/parser from 5.36.2 to 5.37.0 #349
  • chore(deps-dev): bump jest-environment-jsdom from 29.0.2 to 29.0.3 #348
  • chore(deps-dev): bump eslint from 8.23.0 to 8.23.1 #347
  • chore(deps-dev): bump es-check from 7.0.0 to 7.0.1 #346
  • chore(deps-dev): bump typescript from 4.8.2 to 4.8.3 #345
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #343
  • chore(deps-dev): bump @typescript-eslint/parser from 5.36.1 to 5.36.2 #342
  • chore(deps-dev): bump jest-environment-jsdom from 29.0.1 to 29.0.2 #340
  • chore(deps-dev): bump prettier-plugin-organize-imports #341
  • chore(deps-dev): bump @typescript-eslint/parser from 5.36.0 to 5.36.1 #338
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #339
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #336
  • chore(deps-dev): bump @typescript-eslint/parser from 5.35.1 to 5.36.0 #337
  • chore(deps-dev): bump eslint from 8.22.0 to 8.23.0 #334
  • chore(deps-dev): bump jest-environment-jsdom from 29.0.0 to 29.0.1 #335
  • chore(deps-dev): bump jest-environment-jsdom from 28.1.3 to 29.0.0 #332
  • chore(deps-dev): bump typescript from 4.7.4 to 4.8.2 #333
  • chore(deps-dev): bump @typescript-eslint/parser from 5.34.0 to 5.35.1 #331
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #330
  • chore(deps-dev): bump @typescript-eslint/parser from 5.33.1 to 5.34.0 #328
  • chore(deps-dev): bump prettier-plugin-organize-imports #324
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #320
  • chore(deps-dev): bump @typescript-eslint/parser from 5.33.0 to 5.33.1 #322
  • chore(deps-dev): bump @types/jest from 28.1.6 to 28.1.7 #321
  • chore(deps-dev): bump eslint from 8.21.0 to 8.22.0 #319
  • chore(deps-dev): bump ts-jest from 28.0.7 to 28.0.8 #318
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #315
  • chore(deps-dev): bump @typescript-eslint/parser from 5.32.0 to 5.33.0 #316
  • chore(deps-dev): bump prettier-plugin-organize-imports #313
  • chore(deps-dev): bump prettier-plugin-organize-imports from 3.0.0 to 3.0.1 #310
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #312
  • chore(deps-dev): bump @typescript-eslint/parser from 5.31.0 to 5.32.0 #311
  • chore(deps-dev): bump eslint from 8.20.0 to 8.21.0 #309

Commits

  • chore: automerge dependabot prs 9c90644
  • chore: avoid github activity 0e97446
  • chore: axios as a peer dependency 9683de5
  • chore: docs versioning nav 13529b9
  • chore: fixed dependabot automerge 1c024f4
  • chore: re-added dev web bundle 9780d13
  • docs: improved features 79ac027
  • docs: spelling db41b7c
  • docs: update navbar again b6b9fc9
  • docs: updated version 232bb7d
  • docs: version selector b4ab156
  • feat: add ecompatible node version to engines 5562819
  • feat: cache takeover #437 7d82c5a
  • feat: MIT copyright notice on bundle f842c36
  • fix: action to deploy docs 64222ec
  • fix: correct skypack download url c7b6604
  • fix: docs versioning 09a0082
  • fix: removed check for non existent file 04d95f4
  • fix: types not available on esm packaging #430 00fdff0
  • refactor: dependencies, lint and null assertions 67819a3
  • tag: v1.0.0 d39cb29
  • test: added #317 test 491fb01

v0.10.7 - 2022-07-29

Merged

  • feat: cache updater function for multiple keys. #304
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #307
  • chore(deps-dev): bump @typescript-eslint/parser from 5.30.7 to 5.31.0 #306
  • chore(deps-dev): bump webpack from 5.73.0 to 5.74.0 #305
  • chore(deps): bump terser from 5.12.1 to 5.14.2 #302
  • chore(deps-dev): bump es-check from 6.2.1 to 7.0.0 #303
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #300
  • chore(deps-dev): bump @typescript-eslint/parser from 5.30.6 to 5.30.7 #301
  • chore(deps-dev): bump @types/jest from 28.1.5 to 28.1.6 #298
  • chore(deps-dev): bump eslint from 8.19.0 to 8.20.0 #297
  • chore(deps-dev): bump ts-jest from 28.0.5 to 28.0.7 #299
  • chore(deps-dev): bump jest-environment-jsdom from 28.1.2 to 28.1.3 #295
  • chore(deps-dev): bump jest from 28.1.2 to 28.1.3 #294
  • chore(deps-dev): bump @types/jest from 28.1.4 to 28.1.5 #293
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #292
  • chore(deps-dev): bump @typescript-eslint/parser from 5.30.5 to 5.30.6 #291
  • chore(deps-dev): bump @typescript-eslint/parser from 5.30.4 to 5.30.5 #289
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #290
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #288
  • chore(deps-dev): bump eslint from 8.18.0 to 8.19.0 #287
  • chore(deps-dev): bump @typescript-eslint/parser from 5.30.0 to 5.30.4 #286
  • chore(deps-dev): bump @types/jest from 28.1.3 to 28.1.4 #285
  • chore(deps-dev): bump eslint-plugin-prettier from 4.1.0 to 4.2.1 #284

Commits

v0.10.6 - 2022-06-29

Merged

  • fix: cache update not being executed correctly #283
  • chore(deps-dev): bump @typescript-eslint/parser from 5.29.0 to 5.30.0 #282
  • chore(deps-dev): bump eslint-plugin-prettier from 4.0.0 to 4.1.0 #280
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #281
  • chore(deps-dev): bump ts-loader from 9.3.0 to 9.3.1 #278
  • chore(deps-dev): bump @types/jest from 28.1.2 to 28.1.3 #276
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #275
  • chore(deps-dev): bump @typescript-eslint/parser from 5.28.0 to 5.29.0 #274
  • chore(deps-dev): bump eslint from 8.17.0 to 8.18.0 #271
  • chore(deps-dev): bump typescript from 4.7.3 to 4.7.4 #272
  • chore(deps-dev): bump @types/jest from 28.1.1 to 28.1.2 #273
  • chore(deps-dev): bump prettier-plugin-organize-imports #270
  • chore(deps-dev): bump prettier from 2.7.0 to 2.7.1 #269
  • chore(deps-dev): bump @typescript-eslint/parser from 5.27.1 to 5.28.0 #266
  • chore(deps-dev): bump ts-jest from 28.0.4 to 28.0.5 #265
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #268
  • chore(deps-dev): bump prettier from 2.6.2 to 2.7.0 #267
  • chore(deps-dev): bump webpack-cli from 4.9.2 to 4.10.0 #264

Commits

v0.10.5 - 2022-06-11

Merged

  • chore(deps-dev): bump jest-environment-jsdom from 28.1.0 to 28.1.1 #261
  • chore(deps-dev): bump @typescript-eslint/parser from 5.27.0 to 5.27.1 #263
  • chore(deps-dev): bump jest from 28.1.0 to 28.1.1 #260
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #262
  • chore(deps-dev): bump @types/jest from 28.1.0 to 28.1.1 #257
  • chore(deps-dev): bump typescript from 4.7.2 to 4.7.3 #258
  • chore(deps-dev): bump eslint from 8.16.0 to 8.17.0 #259

Commits

  • chore: fixed debug configuration 33398ce
  • chore: updated sponsors e8cb692
  • docs: improved override docs dfe1595
  • docs: typos 67bad37
  • docs: updated version 8c94ef9
  • feat: better override documentation 338c9a6
  • feat: override cache option 268fccb
  • feat: remove remnant x-axios-headers from server response d87307a
  • tag: v0.10.5 30617dd

v0.10.4 - 2022-06-03

Merged

  • chore(deps-dev): bump webpack from 5.72.1 to 5.73.0 #255
  • chore(deps-dev): bump ts-jest from 28.0.3 to 28.0.4 #254
  • chore(deps-dev): bump @types/jest from 27.5.1 to 28.1.0 #252
  • fix: Interpret max-age=0 as a valid cache-control header #253
  • chore(deps-dev): bump @typescript-eslint/parser from 5.26.0 to 5.27.0 #250
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #251
  • chore(deps-dev): bump typescript from 4.6.4 to 4.7.2 #249
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #246
  • chore(deps-dev): bump ts-jest from 28.0.2 to 28.0.3 #247
  • chore(deps-dev): bump @typescript-eslint/parser from 5.25.0 to 5.26.0 #248
  • chore(deps-dev): bump eslint from 8.15.0 to 8.16.0 #245
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #243
  • chore(deps-dev): bump @typescript-eslint/parser from 5.23.0 to 5.25.0 #242
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #241
  • chore(deps-dev): bump @types/jest from 27.5.0 to 27.5.1 #238
  • chore(deps-dev): bump ts-jest from 28.0.1 to 28.0.2 #234
  • chore(deps-dev): bump webpack from 5.72.0 to 5.72.1 #237
  • chore(deps-dev): bump @typescript-eslint/parser from 5.22.0 to 5.23.0 #235
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #236
  • chore(deps-dev): bump @typescript-eslint/parser from 5.21.0 to 5.22.0 #231
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #230
  • chore(deps-dev): bump @types/jest from 27.4.1 to 27.5.0 #232

Commits

  • chore(deps): update jest to 28 f4f4be1
  • deps: updated object-code 6b1a1c5
  • deps: updated object-code 77adcaf
  • docs: fixed variable name (#239) e97a515
  • docs: help this repo grow 2fc2c17
  • docs: improved documentation 6bcd7dc
  • docs: updated version 5cb76aa
  • fix: removed symbol to preserve sideEffect free status (#233) b6302ef
  • refactor: updated some minor things 623ae22
  • tag: v0.10.4 d00bdc8

v0.10.3 - 2022-05-02

Merged

  • chore(deps-dev): bump ts-loader from 9.2.9 to 9.3.0 #228
  • chore(deps-dev): bump express from 4.18.0 to 4.18.1 in /docs #229
  • feat: updated axios to 0.27 #227
  • Pass currentRequest on each access to storages (#220) #226
  • chore(deps-dev): bump typescript from 4.6.3 to 4.6.4 #225
  • chore(deps-dev): bump ts-loader from 9.2.8 to 9.2.9 #222
  • chore(deps-dev): bump @typescript-eslint/parser from 5.20.0 to 5.21.0 #215
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #217
  • chore(deps-dev): bump express from 4.17.3 to 4.18.0 in /docs #218
  • chore(deps): bump github/codeql-action from 1 to 2 #214
  • chore(deps-dev): bump eslint from 8.13.0 to 8.14.0 #213
  • chore(deps-dev): bump tslib from 2.3.1 to 2.4.0 #212
  • chore(deps): bump async from 2.6.3 to 2.6.4 #211
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #209
  • chore(deps-dev): bump @typescript-eslint/parser from 5.19.0 to 5.20.0 #210
  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.36 to 0.3.38 #208
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #207
  • chore(deps-dev): bump @typescript-eslint/parser from 5.18.0 to 5.19.0 #206
  • chore(deps-dev): bump eslint from 8.12.0 to 8.13.0 #205
  • chore(deps-dev): bump webpack from 5.71.0 to 5.72.0 #204
  • chore(deps): bump codecov/codecov-action from 2.1.0 to 3 #203
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #202
  • chore(deps-dev): bump @typescript-eslint/parser from 5.17.0 to 5.18.0 #201
  • chore(deps-dev): bump prettier from 2.6.1 to 2.6.2 #197
  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.35 to 0.3.36 #199
  • chore(deps-dev): bump webpack from 5.70.0 to 5.71.0 #198
  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.34 to 0.3.35 #196
  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.33 to 0.3.34 #195
  • chore(deps): bump ansi-regex from 3.0.0 to 3.0.1 #194
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #192
  • chore(deps-dev): bump @typescript-eslint/parser from 5.16.0 to 5.17.0 #193
  • chore(deps-dev): bump eslint from 8.11.0 to 8.12.0 #191

Commits

v0.10.2 - 2022-03-25

Merged

  • chore(deps): bump minimist from 1.2.5 to 1.2.6 in /docs #190
  • chore(deps): bump minimist from 1.2.5 to 1.2.6 #189
  • chore(deps-dev): bump prettier from 2.6.0 to 2.6.1 #187
  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.31 to 0.3.33 #185
  • chore(deps-dev): bump ts-jest from 27.1.3 to 27.1.4 #186
  • chore(deps-dev): bump typescript from 4.6.2 to 4.6.3 #188
  • chore(deps-dev): bump @typescript-eslint/parser from 5.15.0 to 5.16.0 #183
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #184
  • chore(deps): bump object-code from 1.2.0 to 1.2.2 #182
  • chore(deps): bump fast-defer from 1.1.5 to 1.1.7 #181
  • chore(deps): bump cache-parser from 1.2.2 to 1.2.4 #180
  • chore(deps-dev): bump prettier from 2.5.1 to 2.6.0 #178
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #175
  • chore(deps-dev): bump @typescript-eslint/parser from 5.14.0 to 5.15.0 #176

Commits

  • chore: fixed escheck script 4e93728
  • deps: updated all deps 1b50018
  • docs: added runkit comment f25bff6
  • docs: updated download urls b98f4b0
  • fix: fixed bug when a pending request had it cached empty (#165) 0a00778
  • style: formatted code b44c6b3
  • tag: v0.10.2 2fe8129

v0.10.1 - 2022-03-14

Commits

v0.10.0 - 2022-03-14

Merged

  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.30 to 0.3.31 #171
  • chore(deps-dev): bump eslint from 8.10.0 to 8.11.0 #170
  • chore(deps-dev): bump docsify-cli from 4.4.3 to 4.4.4 in /docs #172
  • feat!: new bundle setup & fixed development bundles #167
  • fix: memory storage copy data to avoid reference changes #164
  • chore(deps-dev): bump ts-loader from 9.2.7 to 9.2.8 #168
  • chore(deps-dev): bump axios from 0.26.0 to 0.26.1 #166

Commits

  • chore: brave rewards f140b02
  • chore: fixed unknown build bug 😃 cb8eb37
  • chore: updated yarn.lock bb88a8b
  • ci: dependabot for docs folder e7922bd
  • deps: updated typescript eslint ae58690
  • docs: updated benchmark and fixed some typos 08d7ab4
  • docs: updated download urls e2f2428
  • docs: updated many things in the documentation 766c6de
  • feat!: updated default caching options 119fa32
  • perf: optimized build config 3a800d7
  • refactor: clone data only when needed 09a69f8
  • style: formatted code 6fd42b2
  • style: formatted code 58d3859
  • tag: v0.10.0 e2fb91b
  • tag: v0.9.3 41d9fe1
  • tests: fixed memory storage clone test a0e05e8

v0.9.3 - 2022-03-04

Merged

  • chore(deps-dev): bump webpack from 5.69.1 to 5.70.0 #162
  • chore(deps-dev): bump eslint-config-prettier from 8.4.0 to 8.5.0 #160
  • chore(deps): bump actions/checkout from 2 to 3 #158
  • chore(deps-dev): bump ts-loader from 9.2.6 to 9.2.7 #159
  • chore(deps-dev): bump typescript from 4.5.5 to 4.6.2 #157

Commits

  • chore: add funding.yml 2429ae2
  • chore: cache parser dependency range a71f9aa
  • docs: updated code comment 80850b9
  • docs: updated download urls 06091a2
  • fix: defaultKeyGenerator keeps response unchanged (#161) ab45164
  • tag: v0.9.3 9993af2

v0.9.2 - 2022-02-28

Merged

  • chore(deps-dev): bump eslint from 8.9.0 to 8.10.0 #156
  • chore(deps): bump prismjs from 1.26.0 to 1.27.0 in /docs #155
  • chore(deps): bump actions/setup-node from 2 to 3 #154

Commits

v0.9.1 - 2022-02-23

Merged

  • feat: support for react-native cli #153
  • chore(deps-dev): bump @types/jest from 27.4.0 to 27.4.1 #152
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #150
  • chore(deps-dev): bump @typescript-eslint/parser from 5.12.0 to 5.12.1 #151

Commits

v0.9.0 - 2022-02-21

Merged

  • feat: handle web storage DOMExceptions #148
  • chore(deps-dev): bump eslint-config-prettier from 8.3.0 to 8.4.0 #149
  • chore(deps-dev): bump webpack from 5.69.0 to 5.69.1 #147

Commits

v0.8.10 - 2022-02-16

Merged

  • chore(deps-dev): bump webpack from 5.68.0 to 5.69.0 #146

Commits

v0.8.9 - 2022-02-14

Merged

  • chore(deps-dev): bump eslint from 8.8.0 to 8.9.0 #142
  • chore(deps-dev): bump jest from 27.5.0 to 27.5.1 #140

Commits

v0.8.8 - 2022-02-08

Commits

v0.8.7 - 2022-02-08

Commits

v0.8.6 - 2022-02-08

Merged

  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #138
  • chore(deps-dev): bump jest from 27.4.7 to 27.5.0 #136
  • chore(deps-dev): bump @typescript-eslint/parser from 5.10.1 to 5.10.2 #132
  • chore(deps-dev): bump webpack from 5.67.0 to 5.68.0 #133
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #134
  • chore(deps-dev): bump eslint from 8.7.0 to 8.8.0 #131
  • chore(deps-dev): bump es-check from 6.1.1 to 6.2.1 #130
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #126
  • chore(deps-dev): bump webpack-cli from 4.9.1 to 4.9.2 #127
  • chore(deps-dev): bump @typescript-eslint/parser from 5.10.0 to 5.10.1 #125

Commits

v0.8.5 - 2022-01-23

Merged

  • docs: add license scan report and status #124
  • chore(deps-dev): bump typescript from 4.5.4 to 4.5.5 #123

Commits

  • build: build everything from webpack f160428
  • build: minimize all bundles bc devtool is active 2d779ec
  • chore: switch back to yarn v1 7d314c2
  • docs: added react component example df74939
  • docs: added tsx syntax highlight 706c4dd
  • docs: removed coverpage bdbdd37
  • docs: simple analytics 😦 cb59384
  • docs: updated docs 95f4137
  • docs: updated documentation e9fc692
  • docs: updated download urls 026465c
  • docs: updated fossa badges 9b9ae3a
  • docs: updated homepage 7ccac42
  • docs: updated homepage 989ceec
  • docs: updated installing page b76087e
  • docs: updated sidebar and added dev mode section cc6523f
  • feat: debug mode & fixed tests 0ba6025
  • fixed jsx highlighting 64c0f40
  • refactor: added ACI prefix to avoid external conflicts ea4ab4c
  • refactor: added debug points 098cf47
  • refactor: added memory storage type 7dc15be
  • refactor: moved header file d14750e
  • refactor: prefer the usage of AxiosResponseHeaders bd4bf26
  • style: format code 31ef7e7
  • tag: v0.8.5 f09670d

v0.8.4 - 2022-01-18

Commits

  • chore: fix yarn.lock (yarnpkg/berry#3416) 9922650
  • chore: sideEffects: false and updated badges b555f95
  • deps: updated axios to v0.25 66f29c9
  • deps: updated eslint dependencies 2540c1e
  • docs: added staleIfError documentation 93dda05
  • docs: added table header 8273399
  • docs: updated documentation 668ce0c
  • docs: updated download urls c5629be
  • docs: updated rukit example 0aed72f
  • feat: add staleIfError support edb32bd
  • fix: removed breaking behaviour 7217eaf
  • refactor: use Object.freeze at Header enum 0e2508c
  • style: format code 1e8ca38
  • tag: v0.8.4 e356386

v0.8.3 - 2022-01-15

Commits

  • build: optimize umd builds with tslib 6d9683a
  • deps: updated cache-parser and jest 16184ac
  • docs: updated download urls d51c622
  • refactor: Header as const and renaming… e391f56
  • tag: v0.8.3 429256d

v0.8.2 - 2022-01-14

Commits

  • build: add umd/index.js for es2017+ 7f3a153
  • build: remove .min at umd bundles 5a7e015
  • chore: add source in the bundle 4c9c185
  • docs: updated docs a981cf2
  • docs: updated download urls 1ccfad3
  • docs: updated keyGenerator info 3c8b373
  • docs: updated umd filesizes ad51c23
  • feat: buildKeyGenerator and ids with req.data by default 9379fce
  • fix: include data at keyGenerator (#116) 6f9ef36
  • perf: only execute one generateKey per request fa2c6e3
  • tag: v0.8.2 650d094

v0.8.1 - 2022-01-13

Merged

  • build: Yarn v2 and ESM & CJS bundles #114
  • chore(deps): bump follow-redirects from 1.14.6 to 1.14.7 #113
  • chore(deps-dev): bump webpack from 5.65.0 to 5.66.0 #112

Commits

  • chore: eslint no-explicit-any 93df4fd
  • deps: fixed colors (marak/colors.js#285) 8243da5
  • deps: updated typescript-eslint monorepo 829b1a7
  • docs: fixed casing c76f2b7
  • docs: updated download urls ab53ac1
  • feat: cache predicate now supports async functions 88d45cc
  • fix: await unawaited promises and eslint more severe ff73ad5
  • fix: removed deprecated code e11e346
  • refactor: prefer unknown instead of any d0b0e2f
  • refactor: removed return await c3661a6
  • refactor: simplified cachePredicate 38a5ecd
  • refactor: used triple equal sign 1b93070
  • tag: v0.8.1 f928cfa
  • test: static roots to prevent other tests from running 57ee1e0

v0.8.0 - 2022-01-08

Commits

  • build: disabled downLevelIteration d30b862
  • deps: updated yarn.lock 2de68f3
  • docs: added SECURITY.md a6313ea
  • docs: fixed baseURL casing in examples & documentation 85336da
  • docs: updated download urls 75ec6fd
  • fix: code scanning alert 733a476
  • refactor: removed “abstract” buildInterceptor function f30e262
  • refactor: removed classes to decrease bundle size cd2f14c
  • refactor!: removed isAxiosCacheInterceptor function 37431a9
  • tag: v0.8.0 46a4ee5
  • tests: fixed coverage by enabling sourceMaps again 17408aa
  • tests: splited header interpreter tests into multiple files 4f938a4

v0.8.0-beta1 - 2022-01-07

Merged

  • docs: documentation at axios-cache-interceptor.js.org #108
  • chore(deps-dev): bump jest from 27.4.6 to 27.4.7 #107
  • chore(deps-dev): bump jest from 27.4.5 to 27.4.6 #105
  • chore(deps-dev): bump @types/node from 17.0.7 to 17.0.8 #106
  • chore(deps-dev): bump @types/jest from 27.0.3 to 27.4.0 #98

Commits

  • chore: bundles exports everything and webpack bundles everything ed1e163
  • chore: fixed default tsconfig.json 96e2d80
  • chore: fixed runkit import 4c58316
  • docs: added blazing fast badge 225658f
  • docs: added bundlephobia link 7c19739
  • docs: added docs mention at runkit example bf486ac
  • docs: added info about global axios usage 53c4d41
  • docs: added interactive examples 7207542
  • docs: added og preview 636ebb3
  • docs: added url-imports example e34bfdd
  • docs: added usage and examples page 06d9979
  • docs: fixed cache.update example 766b016
  • docs: fixed development cdn link 3daf7be
  • docs: fixed examples and added cache: false example 16600b0
  • docs: fixed source links c5de326
  • docs: fixed sw.js location b11d51d
  • docs: fixed tsdocs and added storages section 4c1e0ec
  • docs: offline support for an axios library does not make sense 6353b48
  • docs: pwa config f810365
  • docs: trying to fix runkit cors bcc1f47
  • docs: updated readme 1f9ddb4
  • examples: updated runkit example 4cfa8d0
  • feat: added isAxiosCacheInterceptor function c32c452
  • feat: allow ttl to be defined based on the response 1e87549
  • feat: suupport for async CacheUpdater cfbd601
  • fix: include default storages in cjs bundle 8d5a90e
  • fix: proper generic usage to type deep properties ce2f597
  • merge: merge yarn.lock b66ee1e
  • merge: package.json and yarn.lock 9e3c0f0
  • refactor: added data property in memory storages 500ac71
  • refactor: allow storages not return promises 567c1b2
  • refactor: extracted static functions to a single file c57916f
  • refactor: modified and simplified storages bafe1de
  • refactor: prefer unknown over any and removed find method from storages 79ce192
  • refactor: simplified defaultKeyGenerator function c155982
  • refactor: simplified header interpreter e776f01
  • style: prettified code 3c38985
  • tag: v0.8.0-beta1 db26ec6
  • tests: 100% coverage again a7751fd

v0.7.9 - 2021-12-30

Merged

  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #97

Commits

  • deps: updated fast-defer c6bec60
  • docs: fixed badges links 37a37b7
  • docs: updated docs ec523e8
  • feat: added many build options 232e9c5
  • fix: verify built ecmascript versions with es-check 58b6b12
  • refactor: prevent confusion by renaming createCache to useCache 4a0a99f
  • tag: v0.7.9 2e91a8f
  • test: added index.development tests 1e251dd

v0.7.8 - 2021-12-27

Commits

  • chore: fixed prettier config 144d3ae
  • deps: removed unused dependency 1b1b93b
  • docs: updated badges 5e04e5c
  • perf: minified code bundled as ES6 because axios itself needs ES6 8cad803
  • style: formatted code 27de629
  • tag: v0.7.8 cd0c189

v0.7.7 - 2021-12-27

Merged

  • chore(deps-dev): bump @types/node from 17.0.4 to 17.0.5 #94

Commits

  • refactor: deprecated useCache in favor of createCache (#95) 065b6ef
  • tag: v0.7.7 c611b42
  • test: added one simple test fec63a8

v0.7.6 - 2021-12-26

Merged

  • chore(deps-dev): bump @types/node from 17.0.3 to 17.0.4 #92
  • chore(deps-dev): bump @types/node from 17.0.2 to 17.0.3 #91
  • chore(deps-dev): bump @typescript-eslint/parser from 5.7.0 to 5.8.0 #88
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #89
  • chore(deps-dev): bump @types/node from 17.0.1 to 17.0.2 #90
  • chore(deps-dev): bump @types/node from 17.0.0 to 17.0.1 #85
  • chore(deps-dev): bump concurrently from 6.4.0 to 6.5.1 #86
  • chore(deps-dev): bump eslint from 8.4.1 to 8.5.0 #87
  • chore(deps-dev): bump ts-jest from 27.1.1 to 27.1.2 #84
  • chore(deps-dev): bump @types/node from 16.11.13 to 17.0.0 #83
  • chore(deps-dev): bump @babel/preset-env from 7.16.4 to 7.16.5 #78
  • chore(deps-dev): bump @babel/runtime from 7.16.3 to 7.16.5 #75
  • chore(deps-dev): bump @babel/preset-typescript from 7.16.0 to 7.16.5 #76
  • chore(deps-dev): bump @babel/plugin-transform-runtime #77
  • chore(deps-dev): bump @babel/plugin-transform-modules-commonjs #79

Commits

  • chore: include runkit examples 4fc6825
  • deps: updated cache-parser 9a2e4bc
  • deps: updated some dependencies 0640141
  • perf: reduce bundle size and replaced babel by ts-loader 6e25ba6
  • tag: v0.7.6 d6b2aff

v0.7.5 - 2021-12-13

Commits

v0.7.4 - 2021-12-13

Commits

v0.7.3 - 2021-12-13

Commits

  • chore: defined package.json browser field 3b40abd
  • deps: updated some dependencies 86a576d
  • deps: use cache-parser 6ce658b
  • refactor: better cache predicate function a77cde7
  • tag: v0.7.3 47beacc

v0.7.2 - 2021-12-11

Commits

  • chore: fixed typescript build ef94c70
  • chore: minor config changes d00b607
  • chore: use default webpack-terser-plugin 2d157c8
  • deps: updated dev dependencies b8623b6
  • refactor: externalized createCacheData function c3a0fea
  • refactor: made some methods static and public b4ad24d
  • style: fixed prettier plugin order 6929b02
  • tag: v0.7.2 795d706

v0.7.1 - 2021-12-09

Commits

v0.7.0 - 2021-12-09

Commits

  • chore: CacheOptions at the top of the file 1615f28
  • chore: correct babel filename 5d77ef1
  • chore: don’t transpile node_modules 05aadff
  • chore: good times 😃 1a5fdf9
  • chore: removed babel runtime usage d2a6fed
  • chore: transpile @tusbar/cache-control and correct babel config 32afef4
  • chore: use default browserslist config e9aeacc
  • chore!: use google browserlist config 1fc3552
  • deps: added missing explicit dependency 4fa9bc9
  • docs: updated badges 3ebe9e5
  • docs: updated readme badges f7f9033
  • refactor: bundle does not export everything that index has 488cd49
  • style: formatted code 964f7b0
  • tag: v0.7.0 39777cc
  • tag: v0.7.0 9d0f429

v0.7.0-beta3 - 2021-12-08

Commits

v0.7.0-beta2 - 2021-12-08

Commits

  • fix: fixed package.json bundle index name ae77e6a
  • tag: v0.7.0-beta2 5884d38

v0.7.0-beta1 - 2021-12-08

Merged

  • chore(deps-dev): bump @typescript-eslint/parser from 5.5.0 to 5.6.0 #69
  • chore(deps-dev): bump eslint from 8.4.0 to 8.4.1 #70
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #71
  • chore(deps-dev): bump @types/node from 16.11.11 to 16.11.12 #72
  • chore(deps-dev): bump eslint from 8.3.0 to 8.4.0 #66
  • chore(deps-dev): bump prettier from 2.5.0 to 2.5.1 #68
  • chore(deps-dev): bump ts-jest from 27.0.7 to 27.1.0 #67

Commits

  • deps: updated ts-jest 704be77
  • feat: added web bundle and babel 78cf406
  • feat!: removed createCache function 60ad91e
  • fix: fixed tests b9b4f79
  • perf: removed tslib and typed-core in favor of fast-defer 07ec645
  • tag: v0.7.0-beta1 6a67d4c

v0.6.3 - 2021-12-02

Merged

  • chore(deps-dev): bump jest from 27.4.2 to 27.4.3 #65
  • chore(deps-dev): bump @types/node from 16.11.10 to 16.11.11 #61
  • chore(deps): bump @tusbar/cache-control from 0.6.0 to 0.6.1 #60
  • chore(deps-dev): bump @typescript-eslint/parser from 5.4.0 to 5.5.0 #62
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #63
  • chore(deps-dev): bump jest from 27.4.0 to 27.4.2 #64
  • chore(deps-dev): bump @types/node from 16.11.9 to 16.11.10 #58
  • chore(deps-dev): bump prettier from 2.4.1 to 2.5.0 #59

Commits

v0.6.2 - 2021-11-23

Commits

v0.6.1 - 2021-11-23

Merged

  • chore(deps-dev): bump @types/node from 16.11.8 to 16.11.9 #57
  • chore(deps-dev): bump @types/jest from 27.0.2 to 27.0.3 #56
  • chore(deps-dev): bump @types/node from 16.11.7 to 16.11.8 #55
  • chore(deps-dev): bump typescript from 4.4.4 to 4.5.2 #54

Commits

  • build: emit declaration in dist folder e2de928
  • docs: removed readme duplicated title 1e1627b
  • tag: v0.6.1 097a179

v0.6.0 - 2021-11-15

Merged

  • feat: etag and if-modified-since support #53
  • feat: storage abstractions #52
  • feat: more headers supports, tests and must-revalidate fix #51
  • chore(deps-dev): bump @types/node from 16.11.6 to 16.11.7 #48
  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.24 to 0.3.30 #47

Commits

  • feat: immutable cache support 76a8af7
  • fix: compile to ES2020, instead of ES2021 5970483
  • style: prettier and changelog config changes 19d0e9b
  • tag: v0.6.0 bd98a16

v0.5.1 - 2021-11-05

Commits

v0.5.0 - 2021-10-28

Merged

  • chore(deps-dev): bump @types/node from 16.11.4 to 16.11.6 #46

Commits

v0.4.1 - 2021-10-25

Merged

  • chore(deps-dev): bump @types/node from 16.11.3 to 16.11.4 #44
  • chore(deps-dev): bump @types/node from 16.11.1 to 16.11.3 #43
  • chore(deps-dev): bump jest from 27.2.5 to 27.3.1 #42
  • chore(deps-dev): bump ts-jest from 27.0.6 to 27.0.7 #40
  • chore(deps-dev): bump @types/node from 16.11.0 to 16.11.1 #39
  • chore(deps-dev): bump @types/node from 16.10.9 to 16.11.0 #37
  • chore(deps-dev): bump ts-jest from 27.0.5 to 27.0.6 #38
  • chore(deps-dev): bump @types/node from 16.10.3 to 16.10.9 #36
  • chore(deps-dev): bump typescript from 4.4.3 to 4.4.4 #34

Commits

  • build: emit consistent javascript bundles with ES2021 cc23204
  • build: separate code and types build folder ede19c1
  • deps: latest @arthurfiorette/prettier-config b2ba65e
  • fix: fixed isCacheValid function and added tests 6e6100b
  • refactor: externalized cache eviction predicate f141b2e
  • tag: v0.4.1 28e3392
  • tag: v0.4.1 6ec1b57

v0.4.0 - 2021-10-12

Merged

  • chore(deps-dev): bump jest from 27.2.4 to 27.2.5 #33

Commits

  • docs: correct suported axios version 6b790af
  • docs: updated documentation 9b9827c
  • docs: updated minimal example dd1fa41
  • docs: updated readme 4c757d3
  • docs: updated readme 861567a
  • feat: preserve response status codes and use response.cached 75deccf
  • feat!: updated axios to v0.22.0 1713bb0
  • fix: generic spaghetti that axios brought 12a5032
  • fix: response and request types 891f1d0
  • merge: yarn.lock 03c4fba
  • refactor: cacheUpdater as generic function 2fa2557
  • refactor: eslint more strict 0605ad8
  • refactor: more type and naming refactors b42d3f1
  • style: indented tsconfig comments 65cec04
  • style: prettified code 3ed92c8
  • tag: v0.4.0 87880cf
  • tests: correct test name 49f80d7

v0.3.0 - 2021-10-09

Merged

  • chore(deps-dev): bump @types/node from 16.10.2 to 16.10.3 #32
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #30
  • chore(deps-dev): bump @typescript-eslint/parser from 4.32.0 to 4.33.0 #31

Commits

v0.2.8 - 2021-09-30

Merged

  • chore(deps-dev): bump jest from 27.2.3 to 27.2.4 #27
  • chore(deps-dev): bump @types/node from 16.10.1 to 16.10.2 #28
  • chore(deps-dev): bump jest from 27.2.2 to 27.2.3 #26
  • chore(deps-dev): bump @typescript-eslint/parser from 4.31.2 to 4.32.0 #25
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #24
  • chore(deps-dev): bump jest from 27.2.1 to 27.2.2 #23
  • chore(deps-dev): bump @types/node from 16.9.6 to 16.10.1 #22

Commits

v0.2.7 - 2021-09-26

Commits

  • chore: updated tsconfig 9ea72dc
  • fix: force import type to help compilation tools f8adcc4
  • refactor: removed double if 9d33ad6
  • refactor: renamed interceptor apply method c70bf3a
  • refactor: use for in instead of Object.entries 5b9847d
  • tag: v0.2.7 bc1aa19

v0.2.6 - 2021-09-26

Commits

  • ci: only run codeql when js files are changed b861277
  • refactor: use the same object for both properties 47349df
  • tag: v0.2.6 9c1f74f

v0.2.5 - 2021-09-23

Merged

  • chore(deps-dev): bump prettier-plugin-organize-imports #21
  • chore(deps): bump ansi-regex from 5.0.0 to 5.0.1 #20
  • chore(deps-dev): bump @types/node from 16.9.4 to 16.9.6 #19

Commits

v0.2.4 - 2021-09-21

Merged

  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #16
  • chore(deps-dev): bump @typescript-eslint/parser from 4.31.1 to 4.31.2 #18
  • chore(deps-dev): bump jest from 27.2.0 to 27.2.1 #17
  • chore(deps-dev): bump @types/jest from 27.0.1 to 27.0.2 #15

Commits

v0.2.3 - 2021-09-21

Commits

v0.2.2 - 2021-09-20

Commits

v0.2.1 - 2021-09-20

Commits

  • chore: prettify script with plugins c917f36
  • chore: push git tag on yarn version ec01751
  • chore: removed filename in launch.json eb868d4
  • refactor: concurreny fixes and refactored deferred 70e5c07
  • refactor: removed symbol support and more tests 5b6d14f
  • tag: v0.2.1 1099942

v0.2.0 - 2021-09-20

Merged

  • chore(deps-dev): bump @types/node from 16.9.2 to 16.9.4 #14
  • chore(deps-dev): bump @types/node from 16.9.1 to 16.9.2 #13
  • chore(deps-dev): bump prettier from 2.4.0 to 2.4.1 #12

Commits

  • chore: changelog generation 4363f65
  • feat: enable cache by creating or applying f4bbd8b
  • fix: a bunch of tests 6075a0a
  • fix: axios headers are lowercased 1f88779
  • fix: concurrent requests not beeing cached 1490bfc
  • refactor: interceptors in classes f1033a5
  • refactor: renamed status constants 6e61c0d
  • refactor: requests ids can also be symbol 38133a7
  • style: prettified code 45630e3
  • tag: v0.2.0 8228045
  • tag: v0.2.0 3ae95cf

v0.1.3 - 2021-09-15

Commits

v0.1.2 - 2021-09-15

Commits

  • fix: prevented bugs with the start of id being ::id c4a2dc3
  • tag: 0.1.2 0777874

v0.1.1 - 2021-09-15

Commits

v0.1.0 - 2021-09-15

Merged

  • chore(deps-dev): bump @typescript-eslint/parser from 4.31.0 to 4.31.1 #11
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #10

Commits

  • chore: removed unused methods from memory storage 5ddf9ed
  • chore: vscode tests debug b5c5905
  • ci: added main ci to lint and test code c48769a
  • ci: updated ci to support better caching 1c442ce
  • docs: changed # to h1 3f0e022
  • docs: fixed project name 🤣 6972069
  • docs: updated codecov badge token b45fd54
  • docs: updated readme d8afd8a
  • feat: interpreter also handles Expires header (and tests) 288c118
  • fix: fixed a log of bugs and added unit tests 2bbc9cb
  • refactor: init request and response tests 84dc522
  • refactor: more tests and fixes ee36bd5
  • refactor: ttl and createdAt instead of maxAge and storage takes care of staled entries be5ee1e
  • refactor: use generics on responseMatch 1c10b41
  • tag: v0.1.0 6d5bcf3
  • tests: added cache predicate tests bb552c8
  • tests: added deferred tests d09b3ad
  • tests: added key generator tests 7975c58

v0.0.6 - 2021-09-11

Commits

v0.0.5 - 2021-09-11

Merged

  • chore(deps-dev): bump prettier from 2.3.2 to 2.4.0 #9
  • chore(deps-dev): bump @types/node from 16.7.13 to 16.9.1 #8

Commits

  • chore: change built target to ESNext c1242ac
  • chore: updated eslint rules 4825739
  • dps: bump typescript@4.4.2 to typescript@4.4.3 b63e67b
  • feat: better cache predicate 892dab4
  • fix: define an empty waiting object at creation 2c49a49
  • refactor: axios.defaults.cache required 29d79d5
  • refactor: eslint more strict and some minor refactors d2c2a56
  • refactor: externalized the header interceptor ce2b7ec
  • refactor: moved all “utils” to one folder 211dd50
  • refactor: save all deferred to cache.waiting instead of in the storage ab051fc
  • Revert “tag: v0.0.6” aa0f90e
  • style: prettified code 6ae6d8f
  • tag: v0.0.4 96bc45d
  • tag: v0.0.5 (4 was already used) 99f69ce
  • tag: v0.0.6 80c4220

v0.0.4 - 2021-09-08

Merged

  • chore(deps-dev): bump axios from 0.21.1 to 0.21.4 #5
  • chore(deps-dev): bump @typescript-eslint/parser from 4.30.0 to 4.31.0 #4
  • chore(deps-dev): bump @types/node from 16.7.10 to 16.7.13 #6
  • chore(deps-dev): bump @typescript-eslint/eslint-plugin #3
  • chore(deps-dev): bump prettier-plugin-jsdoc from 0.3.23 to 0.3.24 #1

Commits

  • chore: include eslint files on package 0e88571
  • docs: npm badge a43dfab
  • docs: updated author and readme 3465bc3
  • docs: updated readme 33f7385
  • style: use @arthurfiorette/prettier-config dc56085

v0.0.3 - 2021-09-01

Commits

v0.0.2 - 2021-09-01

Commits

v0.0.1 - 2021-09-01

Commits

Made with ❤️

+ \ No newline at end of file diff --git a/others/license.html b/others/license.html index 6b090f1..30c3c03 100644 --- a/others/license.html +++ b/others/license.html @@ -6,14 +6,14 @@ Axios Cache Interceptor - + - + - + - + @@ -51,8 +51,8 @@ -
Skip to content

MIT License

Copyright © 2021-present Arthur Fiorette & Contributors

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Made with ❤️

- +
Skip to content

MIT License

Copyright © 2021-present Arthur Fiorette & Contributors

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Made with ❤️

+ \ No newline at end of file