import { logger } from './logger.js' import * as redis from './redis.js' const cache = {} export async function setAsync (key, asyncValue) { logger.trace(`[Cache] Set async ${key}`) cache[key] = asyncValue const value = await asyncValue await set(key, value) return value } export function set (key, value) { logger.trace(`[Cache] Set ${key}`) if (cache[key] === value) return cache[key] = value if (redis.isEnabled()) { return redis.client.set(key, value) } } export async function getBuffer (key) { return get(key, { method: 'getBuffer' }) } export async function clear () { for (const prop of Object.getOwnPropertyNames(cache)) { delete cache[prop] } } export async function get (key, { method = 'get' } = {}) { if (cache[key]) { logger.trace(`[Cache] Resolve "${key}" from memory`) return cache[key] } if (redis.isEnabled()) { const result = await redis.client[method]?.(key) if (result) { logger.trace(`[Cache] Resolve "${key}" from redis`) cache[key] = result } return result } }