timed-cache
Version:
A minimalist time-based caching system.
3 lines (2 loc) • 7.11 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Cache=t()}(this,(function(){"use strict";const e="__cache__",t=function(t){return"string"!=typeof t?e+JSON.stringify(t):e+t};return class{constructor(e={defaultTtl:6e4}){this.cache={},this.defaultTtl=e.defaultTtl||6e4}put(e,c,a){const i=(a?a.ttl:void 0)||this.defaultTtl,n=(a?a.callback:void 0)||function(){},l=t(e),o=this.cache[l];o&&clearTimeout(o.handle);const s=setTimeout((()=>this.remove(e)),i);this.cache[l]={handle:s,data:c,callback:n}}get(e){const c=this.cache[t(e)];return c&&c.data}remove(e){const c=t(e),a=this.cache[c];a&&(clearTimeout(a.handle),delete this.cache[c],a.callback(e,a.data))}clear(){for(const c in this.cache)e=this.cache,t=c,null!==e&&Object.prototype.hasOwnProperty.call(e,t)&&clearTimeout(this.cache[c].handle);var e,t;this.cache={}}size(){return Object.keys(this.cache).length}}}));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUudW1kLmpzIiwic291cmNlcyI6WyIuLi9jYWNoZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICogLy8vLy8vLy8vLy8vIENhY2hlIG1vZHVsZSAvLy8vLy8vLy8vLy8vXG4gKiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAqXG4gKiBUaGlzIG1vZHVsZSBvZmZlcnMgb2JqZWN0IGNhY2hpbmcgbWVjaGFuaXNtcyBmb3JcbiAqIHRoaXJkLXBhcnR5IG1vZHVsZXMuIEl0IGFsbG93cyB0byBtYW5hZ2UgdGhlIGxpZmVjeWNsZVxuICogb2YgY2FjaGVkIG9iamVjdHMgYnkgYXNzb2NpYXRpbmcgdGhlbSB3aXRoIGEgdGltZS10by1saXZlLlxuICovXG5cbi8qKlxuICogU2hvcnRjdXQgZnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIGFuIG9iamVjdCBoYXNcbiAqIGEgZ2l2ZW4gcHJvcGVydHkgZGlyZWN0bHkgb24gaXRzZWxmLlxuICovXG5jb25zdCBoYXMgPSAob2JqLCBrZXkpID0+IG9iaiAhPT0gbnVsbCAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpO1xuXG4vKipcbiAqIEEgcHJlZml4IHVzZWQgdG8gZm9yYmlkIGFjY2VzcyB0byBpbnRlcm5hbCBwcm9wZXJ0aWVzXG4gKiBvZiB0aGUgb2JqZWN0IHN0b3JhZ2UuXG4gKi9cbmNvbnN0IHByZWZpeCA9ICdfX2NhY2hlX18nO1xuXG4vKipcbiAqIElmIHRoZSBrZXkgaXMgYW4gb2JqZWN0LCB3ZSBzZXJpYWxpemUgaXQsIHNvIGl0XG4gKiBjYW4gYmUgY2FjaGVkIHRyYW5zcGFyZW50bHkuXG4gKi9cbmNvbnN0IHNlcmlhbGl6ZSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIChwcmVmaXggKyBKU09OLnN0cmluZ2lmeShrZXkpKTtcbiAgfVxuICByZXR1cm4gKHByZWZpeCArIGtleSk7XG59O1xuXG4vKipcbiAqIFRoZSBgdGltZWQtY2FjaGVgIGltcGxlbWVudGF0aW9uLlxuICovXG5jbGFzcyBDYWNoZSB7XG5cbiAgLyoqXG4gICAqIENhY2hlIGNvbnN0cnVjdG9yLlxuICAgKiBAcGFyYW0geyp9IG9wdGlvbnMgdGhlIGBvcHRpb25zYCBvYmplY3RcbiAgICogaG9sZGVyIHVzZWQgYnkgdGhlIGNhY2hlIGltcGxlbWVudGF0aW9uLiBcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7IGRlZmF1bHRUdGw6IDYwICogMTAwMCB9KSB7XG4gICAgLy8gVGhlIGNhY2hlIHN0b3JhZ2UuXG4gICAgdGhpcy5jYWNoZSA9IHt9O1xuICAgIC8vIFRoZSBkZWZhdWx0IGNhY2hlZCBvYmplY3RzIGV4cGlyYXRpb25cbiAgICAvLyBkZWxheSBpcyBleHByZXNzZWQgaW4gbWlsbGlzZWNvbmRzIGFuZFxuICAgIC8vIGlzIGRlZmluZWQgYnkgYW4gaW50ZXJuYWwgZGVmYXVsdCB2YWx1ZVxuICAgIC8vIG9yIGEgdXNlciB2YWx1ZSBpZiBpdCBpcyBwYXNzZWQgdG8gdGhlXG4gICAgLy8gY29uc3RydWN0b3IuXG4gICAgdGhpcy5kZWZhdWx0VHRsID0gb3B0aW9ucy5kZWZhdWx0VHRsIHx8IDYwICogMTAwMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdXRzIGEga2V5L3ZhbHVlIHBhaXIgaW50byB0aGUgY2FjaGUgc3RvcmFnZS5cbiAgICovXG4gIHB1dChrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gICAgY29uc3QgdHRsICA9IChvcHRpb25zID8gb3B0aW9ucy50dGwgOiB1bmRlZmluZWQpIHx8IHRoaXMuZGVmYXVsdFR0bDtcbiAgICBjb25zdCBjYWxsYmFjayA9IChvcHRpb25zID8gb3B0aW9ucy5jYWxsYmFjayA6IHVuZGVmaW5lZCkgfHwgZnVuY3Rpb24gKCkge307XG4gICAgY29uc3Qga2V5XyA9IHNlcmlhbGl6ZShrZXkpO1xuICBcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSBnaXZlbiBrZXkgYWxyZWFkeVxuICAgIC8vIGhhcyBhIHZhbHVlLlxuICAgIGNvbnN0IHYgPSB0aGlzLmNhY2hlW2tleV9dO1xuICBcbiAgICBpZiAodikge1xuICAgICAgLy8gV2UgY2xlYXIgdGhlIHRpbWVvdXQgYXNzb2NpYXRlZCB3aXRoXG4gICAgICAvLyB0aGUgZXhpc3RpbmcgdmFsdWUuXG4gICAgICBjbGVhclRpbWVvdXQodi5oYW5kbGUpO1xuICAgIH1cbiAgXG4gICAgLy8gV2UgdGhlbiBjcmVhdGUgYSBuZXcgdGltZW91dCBmdW5jdGlvbiBmb3JcbiAgICAvLyB0aGUgbmV3IHZhbHVlLlxuICAgIGNvbnN0IGhhbmRsZSA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZW1vdmUoa2V5KSwgdHRsKTtcbiAgXG4gICAgLy8gQW5kIHdlIHNhdmUgdGhlIHZhbHVlIGludG8gdGhlIGNhY2hlIHN0b3JhZ2VcbiAgICAvLyB3aXRoIHRoZSBoYW5kbGUuXG4gICAgdGhpcy5jYWNoZVtrZXlfXSA9IHsgaGFuZGxlLCBkYXRhOiB2YWx1ZSwgY2FsbGJhY2sgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgY2FjaGVkIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGVcbiAgICogZ2l2ZW4ga2V5IGlmIGl0IGV4aXN0cywgcmV0dXJucyBhbiB1bmRlZmluZWRcbiAgICogdmFsdWUgb3RoZXJ3aXNlLlxuICAgKi9cbiAgZ2V0KGtleSkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jYWNoZVtzZXJpYWxpemUoa2V5KV07XG4gICAgcmV0dXJuICh2YWx1ZSAmJiB2YWx1ZS5kYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlIGNhY2hlIGVudHJ5IGFzc29jaWF0ZWRcbiAgICogd2l0aCB0aGUgZ2l2ZW4gYGtleWAuXG4gICAqL1xuICByZW1vdmUoa2V5KSB7XG4gICAgY29uc3Qga2V5XyAgPSBzZXJpYWxpemUoa2V5KTtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY2FjaGVba2V5X107XG4gIFxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgY2xlYXJUaW1lb3V0KHZhbHVlLmhhbmRsZSk7XG4gICAgICBkZWxldGUgdGhpcy5jYWNoZVtrZXlfXTtcbiAgICAgIHZhbHVlLmNhbGxiYWNrKGtleSwgdmFsdWUuZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyB0aGUgaW50ZXJuYWwgY2FjaGUuXG4gICAqL1xuICBjbGVhcigpIHtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IGluIHRoaXMuY2FjaGUpIHtcbiAgICAgIGlmIChoYXModGhpcy5jYWNoZSwgZW50cnkpKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmNhY2hlW2VudHJ5XS5oYW5kbGUpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNhY2hlID0ge307XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgY2FjaGUgb2JqZWN0IGluXG4gICAqIHRlcm1zIG9mIHJlZmVyZW5jZWQgZWxlbWVudHMuXG4gICAqL1xuICBzaXplKCkge1xuICAgIHJldHVybiAoT2JqZWN0LmtleXModGhpcy5jYWNoZSkubGVuZ3RoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYWNoZTtcbiJdLCJuYW1lcyI6WyJwcmVmaXgiLCJzZXJpYWxpemUiLCJrZXkiLCJKU09OIiwic3RyaW5naWZ5IiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwiZGVmYXVsdFR0bCIsInRoaXMiLCJjYWNoZSIsInB1dCIsInZhbHVlIiwidHRsIiwidW5kZWZpbmVkIiwiY2FsbGJhY2siLCJrZXlfIiwidiIsImNsZWFyVGltZW91dCIsImhhbmRsZSIsInNldFRpbWVvdXQiLCJyZW1vdmUiLCJkYXRhIiwiZ2V0IiwiY2xlYXIiLCJlbnRyeSIsIm9iaiIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInNpemUiLCJrZXlzIl0sIm1hcHBpbmdzIjoic09BY0EsTUFNTUEsRUFBUyxZQU1UQyxFQUFZLFNBQVVDLEdBQzFCLE1BQW1CLGlCQUFSQSxFQUNERixFQUFTRyxLQUFLQyxVQUFVRixHQUUxQkYsRUFBU0UsVUFNbkIsTUFPRUcsWUFBWUMsRUFBVSxDQUFFQyxXQUFZLE1BRWxDQyxLQUFLQyxNQUFRLEdBTWJELEtBQUtELFdBQWFELEVBQVFDLFlBQWMsSUFNMUNHLElBQUlSLEVBQUtTLEVBQU9MLEdBQ2QsTUFBTU0sR0FBUU4sRUFBVUEsRUFBUU0sU0FBTUMsSUFBY0wsS0FBS0QsV0FDbkRPLEdBQVlSLEVBQVVBLEVBQVFRLGNBQVdELElBQWMsYUFDdkRFLEVBQU9kLEVBQVVDLEdBSWpCYyxFQUFJUixLQUFLQyxNQUFNTSxHQUVqQkMsR0FHRkMsYUFBYUQsRUFBRUUsUUFLakIsTUFBTUEsRUFBU0MsWUFBVyxJQUFNWCxLQUFLWSxPQUFPbEIsSUFBTVUsR0FJbERKLEtBQUtDLE1BQU1NLEdBQVEsQ0FBRUcsU0FBUUcsS0FBTVYsRUFBT0csWUFRNUNRLElBQUlwQixHQUNGLE1BQU1TLEVBQVFILEtBQUtDLE1BQU1SLEVBQVVDLElBQ25DLE9BQVFTLEdBQVNBLEVBQU1VLEtBT3pCRCxPQUFPbEIsR0FDTCxNQUFNYSxFQUFRZCxFQUFVQyxHQUNsQlMsRUFBUUgsS0FBS0MsTUFBTU0sR0FFckJKLElBQ0ZNLGFBQWFOLEVBQU1PLGVBQ1pWLEtBQUtDLE1BQU1NLEdBQ2xCSixFQUFNRyxTQUFTWixFQUFLUyxFQUFNVSxPQU85QkUsUUFDRSxJQUFLLE1BQU1DLEtBQVNoQixLQUFLQyxNQWhHaEJnQixFQWlHQ2pCLEtBQUtDLE1BakdEUCxFQWlHUXNCLEVBakdRLE9BQVJDLEdBQWdCQyxPQUFPQyxVQUFVQyxlQUFlQyxLQUFLSixFQUFLdkIsSUFrRzVFZSxhQUFhVCxLQUFLQyxNQUFNZSxHQUFPTixRQWxHM0IsSUFBQ08sRUFBS3ZCLEVBcUdkTSxLQUFLQyxNQUFRLEdBT2ZxQixPQUNFLE9BQVFKLE9BQU9LLEtBQUt2QixLQUFLQyxPQUFhIn0=