UNPKG

@cachemap/reaper

Version:
1 lines 3.23 kB
{"version":3,"file":"index.cjs","sources":["../reaper/src//main/index.ts"],"sourcesContent":["import { type Metadata } from '@cachemap/types';\nimport { isPlainObject } from 'lodash-es';\nimport {\n type Callbacks,\n type ConstructorOptions,\n type DeleteCallback,\n type Init,\n type MetadataCallback,\n type Options,\n} from '../types.ts';\n\nexport class Reaper {\n private readonly _deleteCallback: DeleteCallback;\n private readonly _interval: number;\n private _intervalID?: NodeJS.Timeout;\n private readonly _metadataCallback: MetadataCallback;\n\n constructor(options: ConstructorOptions) {\n const { deleteCallback, interval = 60_000, metadataCallback, start = false } = options;\n\n this._deleteCallback = deleteCallback;\n this._interval = interval;\n this._metadataCallback = metadataCallback;\n\n if (start) {\n this._start();\n }\n }\n\n public async cull(metadata: Metadata[]): Promise<void> {\n await this._cull(metadata);\n }\n\n public start(): void {\n this._start();\n }\n\n public stop(): void {\n this._stop();\n }\n\n private async _cull(metadata: Metadata[]): Promise<void> {\n if (metadata.length === 0) {\n return;\n }\n\n try {\n await Promise.all(metadata.map(({ key, tags }) => this._deleteCallback(key, tags)));\n } catch {\n // no catch\n }\n }\n\n private _getExpiredMetadata(): Metadata[] {\n const metadata = this._metadataCallback();\n return metadata.filter(({ cacheability }) => !cacheability.checkTTL());\n }\n\n private _start(): void {\n this._intervalID = setInterval(() => {\n void this._cull(this._getExpiredMetadata());\n }, this._interval);\n }\n\n private _stop(): void {\n if (this._intervalID) {\n clearInterval(this._intervalID);\n }\n }\n}\n\nexport const init = (options: Options = {}): Init => {\n if (!isPlainObject(options)) {\n throw new TypeError('@cachemap/reaper expected options to be a plain object.');\n }\n\n return (callbacks: Callbacks) => new Reaper({ ...options, ...callbacks });\n};\n"],"names":["Reaper","constructor","options","deleteCallback","interval","metadataCallback","start","this","_deleteCallback","_interval","_metadataCallback","_start","cull","metadata","_cull","stop","_stop","length","Promise","all","map","key","tags","_getExpiredMetadata","filter","cacheability","checkTTL","_intervalID","setInterval","clearInterval","isPlainObject","TypeError","callbacks"],"mappings":"wCAWO,MAAMA,EAMX,WAAAC,CAAYC,GACV,MAAMC,eAAEA,EAAcC,SAAEA,EAAW,IAAMC,iBAAEA,EAAgBC,MAAEA,GAAQ,GAAUJ,EAE/EK,KAAKC,gBAAkBL,EACvBI,KAAKE,UAAYL,EACjBG,KAAKG,kBAAoBL,EAErBC,GACFC,KAAKI,QAET,CAEA,UAAaC,CAAKC,SACVN,KAAKO,MAAMD,EACnB,CAEOP,KAAAA,GACLC,KAAKI,QACP,CAEOI,IAAAA,GACLR,KAAKS,OACP,CAEA,WAAcF,CAAMD,GAClB,GAAwB,IAApBA,EAASI,OAIb,UACQC,QAAQC,IAAIN,EAASO,KAAI,EAAGC,MAAKC,UAAWf,KAAKC,gBAAgBa,EAAKC,KAC9E,CAAE,MAEF,CACF,CAEQC,mBAAAA,GAEN,OADiBhB,KAAKG,oBACNc,QAAO,EAAGC,mBAAoBA,EAAaC,YAC7D,CAEQf,MAAAA,GACNJ,KAAKoB,YAAcC,aAAY,KACxBrB,KAAKO,MAAMP,KAAKgB,sBAAmB,GACvChB,KAAKE,UACV,CAEQO,KAAAA,GACFT,KAAKoB,aACPE,cAActB,KAAKoB,YAEvB,gCAGkB,CAACzB,EAAmB,MACtC,IAAK4B,EAAAA,cAAc5B,GACjB,MAAM,IAAI6B,UAAU,2DAGtB,OAAQC,GAAyB,IAAIhC,EAAO,IAAKE,KAAY8B,GAAU"}