mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-22 18:06:01 +00:00
41 lines
1.0 KiB
TypeScript
41 lines
1.0 KiB
TypeScript
import getAsArray from './getAsArray';
|
|
|
|
let cachedByKey = {};
|
|
let cachedPromisesByKey = {};
|
|
const cachedKeysByReloadTrigger = {};
|
|
|
|
export function cacheGet(key) {
|
|
return cachedByKey[key];
|
|
}
|
|
|
|
export function cacheSet(key, value, reloadTrigger) {
|
|
cachedByKey[key] = value;
|
|
for (const item of getAsArray(reloadTrigger)) {
|
|
if (!(item in cachedKeysByReloadTrigger)) {
|
|
cachedKeysByReloadTrigger[item] = [];
|
|
}
|
|
cachedKeysByReloadTrigger[item].push(key);
|
|
}
|
|
delete cachedPromisesByKey[key];
|
|
}
|
|
|
|
export function cacheClean(reloadTrigger) {
|
|
for (const item of getAsArray(reloadTrigger)) {
|
|
const keys = cachedKeysByReloadTrigger[item];
|
|
if (keys) {
|
|
for (const key of keys) {
|
|
delete cachedByKey[key];
|
|
delete cachedPromisesByKey[key];
|
|
}
|
|
}
|
|
delete cachedKeysByReloadTrigger[item];
|
|
}
|
|
}
|
|
|
|
export function getCachedPromise(key, func) {
|
|
if (key in cachedPromisesByKey) return cachedPromisesByKey[key];
|
|
const promise = func();
|
|
cachedPromisesByKey[key] = promise;
|
|
return promise;
|
|
}
|