UNPKG

@forestadmin/forestadmin-client

Version:

This package contains the logic to use the ForestAdmin API inside an agent.

35 lines 2.45 kB
"use strict"; 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