import EventEmitter from "events"; import { CacheValueType, getRevalidateEventKey } from "cache"; import { getCacheKey } from "./cache.utils"; export const getCacheEvents = (emitter: EventEmitter) => ({ /** * Set cache data * @param cacheKey * @param data */ emitCacheData: (cacheKey: string, data: CacheValueType): void => { emitter.emit(getCacheKey(cacheKey), data); }, /** * Revalidate cache values event */ emitRevalidation: (cacheKey: string): void => { emitter.emit(getRevalidateEventKey(cacheKey)); }, /** * Cache data listener * @param cacheKey * @param callback * @returns */ onData: ( cacheKey: string, callback: (data: CacheValueType) => void, ): VoidFunction => { emitter.on(getCacheKey(cacheKey), callback); return () => emitter.removeListener(getCacheKey(cacheKey), callback); }, /** * Cache invalidation listener * @param cacheKey * @param callback * @returns */ onRevalidate: (cacheKey: string, callback: () => void): VoidFunction => { emitter.on(getRevalidateEventKey(cacheKey), callback); return () => emitter.removeListener(getRevalidateEventKey(cacheKey), callback); }, });