class Cache { constructor() { this.kv = {}; } /** * @param {string} key * @param {string} value * @param {boolean?} noOverride */ set(key, value, noOverride) { if (noOverride && key in this.kv) { throw new Error("key exists"); } this.kv[key] = value; } /** * @param {string} key * @return {string?} */ get(key) { return this.kv[key] || null; } /** * @param {string[]} keys */ del(...keys) { for (const key of keys) { delete this.kv[key]; } } } let cache = null; exports.new = function () { if (cache) throw new Error("cache already initiate"); cache = new Cache(); return cache; }; exports.get = function () { if (!cache) throw new Error("cache not initiate"); return cache; };