import { Injectable } from "@angular/core"; import { HttpRequest, HttpResponse } from "@angular/common/http"; @Injectable() export class RequestCache { private cache: Map; constructor() { this.cache = new Map(); } get(req: HttpRequest): HttpResponse | undefined { const splittedUrl = req.urlWithParams.split("/"); const url = splittedUrl[splittedUrl.length - 1] + "_" + req.method; this.clearExpiredEntries(); const cached = this.cache.get(url); let cachedResponse: HttpResponse; if (cached) { cachedResponse = cached.response; } return cachedResponse; } put(req: HttpRequest, response: HttpResponse): void { const splittedUrl = req.urlWithParams.split("/"); const url = splittedUrl[splittedUrl.length - 1] + "_" + req.method; const entry = { url, response, lastRead: Date.now() }; this.cache.set(url, entry); this.clearExpiredEntries(); } private clearExpiredEntries(): void { const maxAge = 30000; const expired = Date.now() - maxAge; this.cache.forEach((expiredEntry) => { if (expiredEntry.lastRead < expired) { this.cache.delete(expiredEntry.url); } }); } }