UNPKG

@hasan-akbari/advanced-http-client

Version:

Advanced Angular HttpClient with cache, inflight dedup, rate limit, debounce, queueing, batching, retry/backoff, timeout, logging.

28 lines 4.66 kB
export class MemoryCache { constructor() { this.map = new Map(); } set(key, value, durationMs) { this.map.set(key, { value, expiresAt: Date.now() + durationMs }); } get(key) { const e = this.map.get(key); if (!e) return undefined; if (e.expiresAt <= Date.now()) { this.map.delete(key); return undefined; } return e.value; } delete(key) { this.map.delete(key); } clear() { this.map.clear(); } cleanup() { const now = Date.now(); for (const [k, e] of this.map.entries()) if (e.expiresAt <= now) this.map.delete(k); } keys() { return Array.from(this.map.keys()); } } export function stableStringify(obj) { if (obj === null || obj === undefined) return String(obj); if (typeof obj !== 'object') return JSON.stringify(obj); if (Array.isArray(obj)) return `[${obj.map(stableStringify).join(',')}]`; const keys = Object.keys(obj).sort(); return `{${keys.map(k => `"${k}":${stableStringify(obj[k])}`).join(',')}}`; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1jYWNoZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FkdmFuY2VkLWh0dHAtY2xpZW50L3NyYy9saWIvcmVxdWVzdC1jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sV0FBVztJQUF4QjtRQUNVLFFBQUcsR0FBQyxJQUFJLEdBQUcsRUFBcUMsQ0FBQztJQU8zRCxDQUFDO0lBTkMsR0FBRyxDQUFDLEdBQVUsRUFBQyxLQUFPLEVBQUMsVUFBaUIsSUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUMsRUFBQyxLQUFLLEVBQUMsU0FBUyxFQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBQztJQUNyRyxHQUFHLENBQUMsR0FBVSxJQUFFLE1BQU0sQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUEsSUFBRyxDQUFDLENBQUM7UUFBQyxPQUFPLFNBQVMsQ0FBQyxDQUFBLElBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUMsQ0FBQztRQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQUEsT0FBTyxTQUFTLENBQUM7SUFBQSxDQUFDLENBQUEsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUEsQ0FBQztJQUNwSixNQUFNLENBQUMsR0FBVSxJQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUEsQ0FBQztJQUN6QyxLQUFLLEtBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFBLENBQUM7SUFDMUIsT0FBTyxLQUFHLE1BQU0sR0FBRyxHQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFBLEtBQUksTUFBTSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRTtRQUFDLElBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBRSxHQUFHO1lBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDO0lBQzdHLElBQUksS0FBRyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUEsQ0FBQztDQUM1QztBQUVELE1BQU0sVUFBVSxlQUFlLENBQUMsR0FBTztJQUNyQyxJQUFHLEdBQUcsS0FBRyxJQUFJLElBQUUsR0FBRyxLQUFHLFNBQVM7UUFBQyxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRCxJQUFHLE9BQU8sR0FBRyxLQUFHLFFBQVE7UUFBQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEQsSUFBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO0lBQ3ZFLE1BQU0sSUFBSSxHQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbkMsT0FBTyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBLEVBQUUsQ0FBQSxJQUFJLENBQUMsS0FBSyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO0FBQzNFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgTWVtb3J5Q2FjaGU8VD57XG4gIHByaXZhdGUgbWFwPW5ldyBNYXA8c3RyaW5nLHt2YWx1ZTpUO2V4cGlyZXNBdDpudW1iZXJ9PigpO1xuICBzZXQoa2V5OnN0cmluZyx2YWx1ZTpULGR1cmF0aW9uTXM6bnVtYmVyKXt0aGlzLm1hcC5zZXQoa2V5LHt2YWx1ZSxleHBpcmVzQXQ6RGF0ZS5ub3coKStkdXJhdGlvbk1zfSk7fVxuICBnZXQoa2V5OnN0cmluZyl7Y29uc3QgZT10aGlzLm1hcC5nZXQoa2V5KTtpZighZSlyZXR1cm4gdW5kZWZpbmVkO2lmKGUuZXhwaXJlc0F0PD1EYXRlLm5vdygpKXt0aGlzLm1hcC5kZWxldGUoa2V5KTtyZXR1cm4gdW5kZWZpbmVkO31yZXR1cm4gZS52YWx1ZTt9XG4gIGRlbGV0ZShrZXk6c3RyaW5nKXt0aGlzLm1hcC5kZWxldGUoa2V5KTt9IFxuICBjbGVhcigpe3RoaXMubWFwLmNsZWFyKCk7fVxuICBjbGVhbnVwKCl7Y29uc3Qgbm93PURhdGUubm93KCk7Zm9yKGNvbnN0IFtrLGVdIG9mIHRoaXMubWFwLmVudHJpZXMoKSlpZihlLmV4cGlyZXNBdDw9bm93KXRoaXMubWFwLmRlbGV0ZShrKTt9IFxuICBrZXlzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5tYXAua2V5cygpKTt9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFibGVTdHJpbmdpZnkob2JqOmFueSk6c3RyaW5ne1xuICBpZihvYmo9PT1udWxsfHxvYmo9PT11bmRlZmluZWQpcmV0dXJuIFN0cmluZyhvYmopO1xuICBpZih0eXBlb2Ygb2JqIT09J29iamVjdCcpcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaik7XG4gIGlmKEFycmF5LmlzQXJyYXkob2JqKSlyZXR1cm4gYFske29iai5tYXAoc3RhYmxlU3RyaW5naWZ5KS5qb2luKCcsJyl9XWA7XG4gIGNvbnN0IGtleXM9T2JqZWN0LmtleXMob2JqKS5zb3J0KCk7XG4gIHJldHVybiBgeyR7a2V5cy5tYXAoaz0+YFwiJHtrfVwiOiR7c3RhYmxlU3RyaW5naWZ5KG9ialtrXSl9YCkuam9pbignLCcpfX1gO1xufSJdfQ==