UNPKG

wuffle

Version:

A multi-repository task board for GitHub issues

93 lines (62 loc) 1.25 kB
export class Cache { constructor(ttl) { this.ttl = ttl; this.entries = {}; } remove(key) { delete this.entries[key]; } evict() { const { entries, ttl } = this; if (ttl === -1) { return; } const now = Date.now(); Object.keys(entries).forEach(key => { const entry = entries[key]; if (now - entry.created > ttl) { this.remove(key); } }); } async get(key, defaultValue) { const entry = this.entries[key]; if (entry) { return entry.value; } const value = typeof defaultValue === 'function' ? await defaultValue(key) : defaultValue; this.set(key, value); return value; } set(key, value) { this.entries[key] = { created: Date.now(), value }; } } export class KeepAliveCache extends Cache { get(key, defaultValue) { const entry = this.entries[key]; if (entry) { entry.created = Date.now(); } return super.get(key, defaultValue); } } export class NoopCache { evict() { } get(key, defaultValue) { const value = typeof defaultValue === 'function' ? defaultValue() : defaultValue; return value; } }