@cachemap/reaper
Version:
The Cachemap reaper module.
3 lines (2 loc) • 868 B
JavaScript
import{isPlainObject as t}from"lodash-es";class a{constructor(t){const{deleteCallback:a,interval:e=6e4,metadataCallback:l,start:s=!1}=t;this._deleteCallback=a,this._interval=e,this._metadataCallback=l,s&&this._start()}async cull(t){await this._cull(t)}start(){this._start()}stop(){this._stop()}async _cull(t){if(0!==t.length)try{await Promise.all(t.map((({key:t,tags:a})=>this._deleteCallback(t,a))))}catch{}}_getExpiredMetadata(){return this._metadataCallback().filter((({cacheability:t})=>!t.checkTTL()))}_start(){this._intervalID=setInterval((()=>{this._cull(this._getExpiredMetadata())}),this._interval)}_stop(){this._intervalID&&clearInterval(this._intervalID)}}const e=(e={})=>{if(!t(e))throw new TypeError("@cachemap/reaper expected options to be a plain object.");return t=>new a({...e,...t})};export{a as Reaper,e as init};
//# sourceMappingURL=index.mjs.map