UNPKG

@experteam-mx/ngx-services

Version:

Angular common services for Experteam apps

37 lines 5.63 kB
import { inject } from '@angular/core'; import { HttpResponse } from '@angular/common/http'; import { of } from 'rxjs'; import { tap } from 'rxjs/operators'; import { ENVIRONMENT_TOKEN } from '../ngx-services.models'; const DEFAULT_TTL = 10000; // ttl in ms const cache = new Map(); /** * Interceptor function to handle HTTP caching for GET requests. It retrieves cached responses * if available and valid; otherwise, it processes the request and caches the response for future use. * * @param {HttpRequest<any>} req - The HTTP request object being intercepted. * @param {HttpHandlerFn} next - The next HTTP handler function in the chain to process the request. * @return {Observable<HttpEvent<any>>} An observable that emits the HTTP event, either from cache * or by invoking the next handler. */ export function httpCachingInterceptor(req, next) { const { cacheTtl } = inject(ENVIRONMENT_TOKEN); if (req.method !== 'GET') return next(req); const cached = cache.get(req.urlWithParams); if (cached) { const isExpired = Date.now() > cached.ttl; if (!isExpired) { return of(cached.res); } cache.delete(req.urlWithParams); // If expired, remove the entry from cache } return next(req).pipe(tap((res) => { if (!(res instanceof HttpResponse)) { return; } const ttl = Date.now() + (cacheTtl ?? DEFAULT_TTL); cache.set(req.urlWithParams, { res, ttl }); })); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1jYWNoaW5nLmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXhwZXJ0ZWFtLW14L25neC1zZXJ2aWNlcy9zcmMvbGliL2ludGVyY2VwdG9ycy9odHRwLWNhY2hpbmcuaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN0QyxPQUFPLEVBQXlDLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBRTFGLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDckMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ3BDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBRTFELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQSxDQUFDLFlBQVk7QUFDdEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQW1ELENBQUE7QUFFeEU7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUUsR0FBcUIsRUFBRSxJQUFtQjtJQUNoRixNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUE7SUFFOUMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEtBQUs7UUFBRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUUxQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUUzQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ1gsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUE7UUFFekMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQUMsQ0FBQztRQUV6QyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQSxDQUFDLDBDQUEwQztJQUM1RSxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUNuQixHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUNWLElBQUksQ0FBQyxDQUFDLEdBQUcsWUFBWSxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQUMsT0FBTTtRQUFDLENBQUM7UUFFOUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsUUFBUSxJQUFJLFdBQVcsQ0FBQyxDQUFBO1FBRWxELEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFBO0lBQzVDLENBQUMsQ0FBQyxDQUNILENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHsgSHR0cEV2ZW50LCBIdHRwSGFuZGxlckZuLCBIdHRwUmVxdWVzdCwgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnXHJcblxyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnXHJcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xyXG5pbXBvcnQgeyBFTlZJUk9OTUVOVF9UT0tFTiB9IGZyb20gJy4uL25neC1zZXJ2aWNlcy5tb2RlbHMnXHJcblxyXG5jb25zdCBERUZBVUxUX1RUTCA9IDEwMDAwIC8vIHR0bCBpbiBtc1xyXG5jb25zdCBjYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCB7IHR0bDogbnVtYmVyLCByZXM6IEh0dHBSZXNwb25zZTxhbnk+IH0+KClcclxuXHJcbi8qKlxyXG4gKiBJbnRlcmNlcHRvciBmdW5jdGlvbiB0byBoYW5kbGUgSFRUUCBjYWNoaW5nIGZvciBHRVQgcmVxdWVzdHMuIEl0IHJldHJpZXZlcyBjYWNoZWQgcmVzcG9uc2VzXHJcbiAqIGlmIGF2YWlsYWJsZSBhbmQgdmFsaWQ7IG90aGVyd2lzZSwgaXQgcHJvY2Vzc2VzIHRoZSByZXF1ZXN0IGFuZCBjYWNoZXMgdGhlIHJlc3BvbnNlIGZvciBmdXR1cmUgdXNlLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0h0dHBSZXF1ZXN0PGFueT59IHJlcSAtIFRoZSBIVFRQIHJlcXVlc3Qgb2JqZWN0IGJlaW5nIGludGVyY2VwdGVkLlxyXG4gKiBAcGFyYW0ge0h0dHBIYW5kbGVyRm59IG5leHQgLSBUaGUgbmV4dCBIVFRQIGhhbmRsZXIgZnVuY3Rpb24gaW4gdGhlIGNoYWluIHRvIHByb2Nlc3MgdGhlIHJlcXVlc3QuXHJcbiAqIEByZXR1cm4ge09ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIEhUVFAgZXZlbnQsIGVpdGhlciBmcm9tIGNhY2hlXHJcbiAqIG9yIGJ5IGludm9raW5nIHRoZSBuZXh0IGhhbmRsZXIuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaHR0cENhY2hpbmdJbnRlcmNlcHRvciAocmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlckZuKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xyXG4gIGNvbnN0IHsgY2FjaGVUdGwgfSA9IGluamVjdChFTlZJUk9OTUVOVF9UT0tFTilcclxuXHJcbiAgaWYgKHJlcS5tZXRob2QgIT09ICdHRVQnKSByZXR1cm4gbmV4dChyZXEpXHJcblxyXG4gIGNvbnN0IGNhY2hlZCA9IGNhY2hlLmdldChyZXEudXJsV2l0aFBhcmFtcylcclxuXHJcbiAgaWYgKGNhY2hlZCkge1xyXG4gICAgY29uc3QgaXNFeHBpcmVkID0gRGF0ZS5ub3coKSA+IGNhY2hlZC50dGxcclxuXHJcbiAgICBpZiAoIWlzRXhwaXJlZCkgeyByZXR1cm4gb2YoY2FjaGVkLnJlcykgfVxyXG5cclxuICAgIGNhY2hlLmRlbGV0ZShyZXEudXJsV2l0aFBhcmFtcykgLy8gSWYgZXhwaXJlZCwgcmVtb3ZlIHRoZSBlbnRyeSBmcm9tIGNhY2hlXHJcbiAgfVxyXG5cclxuICByZXR1cm4gbmV4dChyZXEpLnBpcGUoXHJcbiAgICB0YXAoKHJlcykgPT4ge1xyXG4gICAgICBpZiAoIShyZXMgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UpKSB7IHJldHVybiB9XHJcblxyXG4gICAgICBjb25zdCB0dGwgPSBEYXRlLm5vdygpICsgKGNhY2hlVHRsID8/IERFRkFVTFRfVFRMKVxyXG5cclxuICAgICAgY2FjaGUuc2V0KHJlcS51cmxXaXRoUGFyYW1zLCB7IHJlcywgdHRsIH0pXHJcbiAgICB9KVxyXG4gIClcclxufVxyXG4iXX0=