@forestadmin/forestadmin-client
Version:
This package contains the logic to use the ForestAdmin API inside an agent.
35 lines • 2.45 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
/**
* Simplest TTL cache for multiple entries
* Handles concurrent fetch by design
*/
class TTLCache {
constructor(fetchMethod, ttl = 1000) {
this.fetchMethod = fetchMethod;
this.ttl = ttl;
this.stateMap = new Map();
}
async fetch(key) {
const now = Date.now();
const state = this.stateMap.get(key);
if (state && state.promise && state.expirationTimestamp && state.expirationTimestamp > now) {
return state.promise;
}
const fetch = this.fetchMethod(key);
this.stateMap.set(key, { promise: fetch, expirationTimestamp: now + this.ttl });
fetch.catch(() => {
// Don't cache rejected promises
this.stateMap.delete(key);
});
return fetch;
}
clear() {
this.stateMap.clear();
}
delete(key) {
this.stateMap.delete(key);
}
}
exports.default = TTLCache;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHRsLWNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3R0bC1jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBOzs7R0FHRztBQUNILE1BQXFCLFFBQVE7SUFNM0IsWUFDbUIsV0FBb0QsRUFDcEQsTUFBTSxJQUFJO1FBRFYsZ0JBQVcsR0FBWCxXQUFXLENBQXlDO1FBQ3BELFFBQUcsR0FBSCxHQUFHLENBQU87UUFQWixhQUFRLEdBQUcsSUFBSSxHQUFHLEVBR2hDLENBQUM7SUFLRCxDQUFDO0lBRUosS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFXO1FBQ3JCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVyQyxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsSUFBSSxLQUFLLENBQUMsbUJBQW1CLEdBQUcsR0FBRyxFQUFFO1lBQzFGLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQztTQUN0QjtRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFFaEYsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDZixnQ0FBZ0M7WUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQVc7UUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUIsQ0FBQztDQUNGO0FBckNELDJCQXFDQyJ9
;