{"version":3,"file":"ng-doc-ui-kit-interceptors.mjs","sources":["../../../../libs/ui-kit/interceptors/cache.interceptor.ts","../../../../libs/ui-kit/interceptors/ng-doc-ui-kit-interceptors.ts"],"sourcesContent":["import {\n  HttpEvent,\n  HttpHandler,\n  HttpInterceptor,\n  HttpRequest,\n  HttpResponse,\n} from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { shareReplay, tap } from 'rxjs/operators';\n\n@Injectable()\nexport class NgDocCacheInterceptor implements HttpInterceptor {\n  static readonly TOKEN: string = Math.random().toString(36).slice(-8);\n  private cache: Map<string, Observable<HttpEvent<unknown>>> = new Map<\n    string,\n    Observable<HttpEvent<unknown>>\n  >();\n\n  intercept<T>(request: HttpRequest<T>, next: HttpHandler): Observable<HttpEvent<T>> {\n    // Only GET requests can be cached\n    if (request.method !== 'GET') {\n      return next.handle(request);\n    }\n\n    // Do not cache request when the token is not provided\n    if (!request.params.has(NgDocCacheInterceptor.TOKEN)) {\n      return next.handle(request);\n    }\n\n    // Return cached response\n    const cachedRequest: Observable<HttpEvent<T>> | undefined = this.cache.get(\n      request.url,\n    ) as Observable<HttpEvent<T>>;\n\n    if (cachedRequest) {\n      return cachedRequest;\n    }\n\n    // Clone the request, delete the TOKEN from the params\n    const newRequest: HttpRequest<T> = request.clone({\n      params: request.params.delete(NgDocCacheInterceptor.TOKEN),\n    });\n\n    // Create a new request handler\n    const newHandler: Observable<HttpEvent<T>> = next.handle(newRequest).pipe(\n      tap({\n        error: (event: HttpEvent<Error>) => {\n          if (event instanceof HttpResponse) {\n            this.cache.delete(event.url || '');\n          }\n        },\n      }),\n      shareReplay(1),\n    );\n\n    // Cache the request and return the new handler\n    this.cache.set(request.url, newHandler);\n\n    return newHandler;\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;MAYa,qBAAqB,CAAA;AADlC,IAAA,WAAA,GAAA;AAGU,QAAA,IAAA,CAAA,KAAK,GAAgD,IAAI,GAAG,EAGjE;AA4CJ,IAAA;AAhDiB,IAAA,SAAA,IAAA,CAAA,KAAK,GAAW,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAMrE,SAAS,CAAI,OAAuB,EAAE,IAAiB,EAAA;;AAErD,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE;AAC5B,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QAC7B;;AAGA,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE;AACpD,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QAC7B;;AAGA,QAAA,MAAM,aAAa,GAAyC,IAAI,CAAC,KAAK,CAAC,GAAG,CACxE,OAAO,CAAC,GAAG,CACgB;QAE7B,IAAI,aAAa,EAAE;AACjB,YAAA,OAAO,aAAa;QACtB;;AAGA,QAAA,MAAM,UAAU,GAAmB,OAAO,CAAC,KAAK,CAAC;YAC/C,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,KAAK,CAAC;AAC3D,SAAA,CAAC;;AAGF,QAAA,MAAM,UAAU,GAA6B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CACvE,GAAG,CAAC;AACF,YAAA,KAAK,EAAE,CAAC,KAAuB,KAAI;AACjC,gBAAA,IAAI,KAAK,YAAY,YAAY,EAAE;oBACjC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC;gBACpC;YACF,CAAC;AACF,SAAA,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf;;QAGD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC;AAEvC,QAAA,OAAO,UAAU;IACnB;8GAhDW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAArB,qBAAqB,EAAA,CAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC;;;ACXD;;AAEG;;;;"}