@directus/api
Version:
Directus is a real-time API and App dashboard for managing SQL database content
34 lines (33 loc) • 1.08 kB
JavaScript
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)}`);
},
});
});
}