UNPKG

multi-layers-cache

Version:

A very simple multi layers cache.

101 lines (97 loc) 2.58 kB
"use strict"; var l = Object.defineProperty; var c = Object.getOwnPropertyDescriptor; var m = Object.getOwnPropertyNames; var u = Object.prototype.hasOwnProperty; var h = (s, e) => { for (var n in e) l(s, n, { get: e[n], enumerable: !0 }); }, f = (s, e, n, t) => { if (e && typeof e == "object" || typeof e == "function") for (let a of m(e)) !u.call(s, a) && a !== n && l(s, a, { get: () => e[a], enumerable: !(t = c(e, a)) || t.enumerable }); return s; }; var x = (s) => f(l({}, "__esModule", { value: !0 }), s); // src/index.ts var g = {}; h(g, { LRUCache: () => i, newCacheStorage: () => d, newLRUCache: () => p }); module.exports = x(g); // src/lru.ts var i = class extends Map { max; maxAge; stale; constructor(e = {}) { super(), typeof e == "number" && (e = { max: e }); let { max: n, maxAge: t } = e; this.max = n && n > 0 ? n : 1 / 0, this.maxAge = t !== void 0 ? t : -1, this.stale = !!e.stale; } peek(e) { return this.get(e, !1); } set(e, n, t = this.maxAge) { this.has(e) && this.delete(e), this.size + 1 > this.max && this.delete(this.keys().next().value); let a = t > -1 ? t + Date.now() : t; return super.set(e, { expires: a, content: n }); } /** * * @param key * @param mut Update the ttl * @returns */ get(e, n = !1) { let t = super.get(e); if (t === void 0) return t; let { expires: a, content: r } = t, o = { expireAt: a > 0 ? (a - Date.now()) / 1e3 : a, value: r, key: e }; return a !== !1 && a !== -1 && Date.now() >= a ? (this.delete(e), this.stale ? o : void 0) : (n && this.set(e, r), o); } }; function p(s = { maxItems: 10 }) { let e = new i({ max: s.maxItems }); return { async del(n) { e.delete(n); }, async get(n) { return e.get(n); }, async set(n, t, a) { e.set(n, t, a && a * 1e3); } }; } // src/index.ts function d({ layers: s }) { let e = s.slice(); if (!e.length) throw new Error("At least a caching layer must be set."); return { async del(n) { await Promise.all(e.map((t) => t.del(n))); }, async get(n) { let t, a = 0; for (; a < e.length && (t = await e[a].get(n), !t); a++) ; return t && a > 0 && await Promise.all(e.slice(0, a - 1).map((r) => r.set(n, t.value, t.expireAt))), t; }, async set(n, t, a) { await Promise.all(e.map((r) => r.set(n, t, a))); } }; } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { LRUCache, newCacheStorage, newLRUCache });