UNPKG

@directus/api

Version:

Directus is a real-time API and App dashboard for managing SQL database content

34 lines (33 loc) 1.08 kB
import { useEnv } from '@directus/env'; import { createCache } from '@directus/memory'; import { redisConfigAvailable, useRedis } from '../../redis/index.js'; const env = useEnv(); const localOnly = redisConfigAvailable() === false; const config = localOnly ? { type: 'local', } : { type: 'redis', namespace: env['WEBSOCKETS_COLLAB_STORE_NAMESPACE'] ?? 'collab', redis: useRedis(), }; const store = createCache(config); export function useStore(uid, defaults) { return (callback) => store.usingLock(`lock:${uid}`, async () => { return await callback({ has(key) { return store.has(`${uid}:${String(key)}`); }, async get(key) { return ((await store.get(`${uid}:${String(key)}`)) ?? defaults?.[key]); }, set(key, value) { return store.set(`${uid}:${String(key)}`, value); }, delete(key) { return store.delete(`${uid}:${String(key)}`); }, }); }); }