Ghost/ghost/event-aware-cache-wrapper/lib/EventAwareCacheWrapper.js

53 lines
1.4 KiB
JavaScript
Raw Normal View History

class EventAwareCacheWrapper {
#cache;
#lastReset;
/**
* @param {Object} deps
* @param {Object} deps.cache - cache instance extending adapter-base-cache
* @param {Object} [deps.eventRegistry] - event registry instance
* @param {Number} [deps.lastReset] - timestamp of last reset
* @param {String[]} [deps.resetEvents] - event to listen to triggering reset
*/
constructor(deps) {
this.#cache = deps.cache;
this.#lastReset = deps.lastReset || Date.now();
if (deps.resetEvents && deps.eventRegistry) {
this.#initListeners(deps.eventRegistry, deps.resetEvents);
}
}
#initListeners(eventRegistry, eventsToResetOn) {
eventsToResetOn.forEach((event) => {
eventRegistry.on(event, () => {
this.reset();
});
});
}
#buildResetAwareKey(key) {
return `${this.#lastReset}:${key}`;
}
async get(key) {
return this.#cache.get(this.#buildResetAwareKey(key));
}
async set(key, value) {
return this.#cache.set(this.#buildResetAwareKey(key), value);
}
/**
* Reset the cache without removing of flushing the keys
* The mechanism is based on adding a timestamp to the key
* This way the cache is invalidated but the keys are still there
*/
reset() {
this.#lastReset = Date.now();
}
}
module.exports = EventAwareCacheWrapper;