ng-http-caching 18.0.2 → 20.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.ts CHANGED
@@ -1,5 +1,320 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- /// <amd-module name="ng-http-caching" />
5
- export * from './public-api';
1
+ import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpResponse, HttpContextToken, HttpContext, HttpHeaders } from '@angular/common/http';
2
+ import { Observable } from 'rxjs';
3
+ import * as i0 from '@angular/core';
4
+ import { InjectionToken, ModuleWithProviders } from '@angular/core';
5
+ import { Observable as Observable$1 } from 'rxjs/internal/Observable';
6
+
7
+ declare class NgHttpCachingInterceptorService implements HttpInterceptor {
8
+ private readonly cacheService;
9
+ intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>;
10
+ /**
11
+ * Send http request (next handler)
12
+ */
13
+ sendRequest(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>;
14
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgHttpCachingInterceptorService, never>;
15
+ static ɵprov: i0.ɵɵInjectableDeclaration<NgHttpCachingInterceptorService>;
16
+ }
17
+
18
+ interface NgHttpCachingStorageInterface {
19
+ /**
20
+ * The number of cached entries.
21
+ */
22
+ readonly size: number;
23
+ /**
24
+ * Clear the cache.
25
+ */
26
+ clear(): void;
27
+ /**
28
+ * Delete the cache entry for the provided key.
29
+ */
30
+ delete(key: string): boolean;
31
+ /**
32
+ * The forEach() method executes a provided function once for each cache entry.
33
+ */
34
+ forEach<K = any, T = any>(callbackfn: (value: NgHttpCachingEntry<K, T>, key: string) => void): void;
35
+ /**
36
+ * Return the cache entry for the provided key.
37
+ */
38
+ get<K = any, T = any>(key: string): Readonly<NgHttpCachingEntry<K, T>> | undefined;
39
+ /**
40
+ * Return true if the cache entry exists the provided key.
41
+ */
42
+ has(key: string): boolean;
43
+ /**
44
+ * Set the cache entry for the provided key.
45
+ */
46
+ set<K = any, T = any>(key: string, value: NgHttpCachingEntry<K, T>): void;
47
+ }
48
+
49
+ type NgHttpCachingContext = Pick<NgHttpCachingConfig, 'getKey' | 'isCacheable' | 'isExpired' | 'isValid'>;
50
+ declare const NG_HTTP_CACHING_CONTEXT: HttpContextToken<NgHttpCachingContext>;
51
+ declare const withNgHttpCachingContext: (value: NgHttpCachingContext, context?: HttpContext) => HttpContext;
52
+ declare const checkCacheHeaders: (headers: HttpHeaders) => boolean;
53
+ interface NgHttpCachingEntry<K = any, T = any> {
54
+ /**
55
+ * URL
56
+ */
57
+ url: string;
58
+ /**
59
+ * HttpResponse
60
+ */
61
+ response: HttpResponse<T>;
62
+ /**
63
+ * HttpRequest
64
+ */
65
+ request: HttpRequest<K>;
66
+ /**
67
+ * Timestamp of add to cache time
68
+ */
69
+ addedTime: number;
70
+ /**
71
+ * Cache version
72
+ */
73
+ version: string;
74
+ }
75
+ declare const NG_HTTP_CACHING_CONFIG: InjectionToken<NgHttpCachingContext>;
76
+ declare enum NgHttpCachingStrategy {
77
+ /**
78
+ * All request are cacheable if HTTP method is into `allowedMethod`
79
+ */
80
+ ALLOW_ALL = "ALLOW_ALL",
81
+ /**
82
+ * Only the request with `X-NG-HTTP-CACHING-ALLOW-CACHE` header are cacheable if HTTP method is into `allowedMethod`
83
+ */
84
+ DISALLOW_ALL = "DISALLOW_ALL"
85
+ }
86
+ declare enum NgHttpCachingHeaders {
87
+ /**
88
+ * Request is cacheable if HTTP method is into `allowedMethod`
89
+ */
90
+ ALLOW_CACHE = "X-NG-HTTP-CACHING-ALLOW-CACHE",
91
+ /**
92
+ * Request isn't cacheable
93
+ */
94
+ DISALLOW_CACHE = "X-NG-HTTP-CACHING-DISALLOW-CACHE",
95
+ /**
96
+ * Specific cache lifetime for the request
97
+ */
98
+ LIFETIME = "X-NG-HTTP-CACHING-LIFETIME",
99
+ /**
100
+ * You can tag multiple request by adding this header with the same tag and
101
+ * using `NgHttpCachingService.clearCacheByTag(tag: string)` for delete all the tagged request
102
+ */
103
+ TAG = "X-NG-HTTP-CACHING-TAG"
104
+ }
105
+ declare const NgHttpCachingHeadersList: NgHttpCachingHeaders[];
106
+ declare const NG_HTTP_CACHING_SECOND_IN_MS = 1000;
107
+ declare const NG_HTTP_CACHING_MINUTE_IN_MS: number;
108
+ declare const NG_HTTP_CACHING_HOUR_IN_MS: number;
109
+ declare const NG_HTTP_CACHING_DAY_IN_MS: number;
110
+ declare const NG_HTTP_CACHING_WEEK_IN_MS: number;
111
+ declare const NG_HTTP_CACHING_MONTH_IN_MS: number;
112
+ declare const NG_HTTP_CACHING_YEAR_IN_MS: number;
113
+ interface NgHttpCachingConfig {
114
+ /**
115
+ * Set the cache store. You can implement your custom store by implement the `NgHttpCachingStorageInterface` interface, eg.:
116
+ */
117
+ store?: NgHttpCachingStorageInterface;
118
+ /**
119
+ * Number of millisecond that a response is stored in the cache.
120
+ * You can set specific "lifetime" for each request by add the header `X-NG-HTTP-CACHING-LIFETIME` (see example below).
121
+ */
122
+ lifetime?: number;
123
+ /**
124
+ * Array of allowed HTTP methods to cache.
125
+ * You can allow multiple methods, eg.: `['GET', 'POST', 'PUT', 'DELETE', 'HEAD']` or
126
+ * allow all methods by: `['ALL']`. If `allowedMethod` is an empty array (`[]`), no response are cached.
127
+ * *Warning!* `NgHttpCaching` use the full url (url with query parameters) as unique key for the cached response,
128
+ * this is correct for the `GET` request but is _potentially_ wrong for other type of request (eg. `POST`, `PUT`).
129
+ * You can set a different "key" by customizing the `getKey` config method (see `getKey` section).
130
+ */
131
+ allowedMethod?: string[];
132
+ /**
133
+ * Set the cache strategy, possible strategies are:
134
+ * - `NgHttpCachingStrategy.ALLOW_ALL`: All request are cacheable if HTTP method is into `allowedMethod`;
135
+ * - `NgHttpCachingStrategy.DISALLOW_ALL`: Only the request with `X-NG-HTTP-CACHING-ALLOW-CACHE` header are cacheable if HTTP method is into `allowedMethod`;
136
+ */
137
+ cacheStrategy?: NgHttpCachingStrategy;
138
+ /**
139
+ * Cache version. When you have a breaking change, change the version, and it'll delete the current cache automatically.
140
+ * The default value is Angular major version (eg. 13), in this way, the cache is invalidated on every Angular upgrade.
141
+ */
142
+ version?: string;
143
+ /**
144
+ * If true response headers cache-control and expires are respected.
145
+ */
146
+ checkResponseHeaders?: boolean;
147
+ /**
148
+ * If this function return `true` the request is expired and a new request is send to backend, if return `false` isn't expired.
149
+ * If the result is `undefined`, the normal behaviour is provided.
150
+ */
151
+ isExpired?: <K, T>(entry: NgHttpCachingEntry<K, T>) => boolean | undefined | void;
152
+ /**
153
+ * If this function return `true` the request is cacheable, if return `false` isn't cacheable.
154
+ * If the result is `undefined`, the normal behaviour is provided.
155
+ */
156
+ isCacheable?: <K>(req: HttpRequest<K>) => boolean | undefined | void;
157
+ /**
158
+ * This function return the unique key (`string`) for store the response into the cache.
159
+ * If the result is `undefined`, the normal behaviour is provided.
160
+ */
161
+ getKey?: <K>(req: HttpRequest<K>) => string | undefined | void;
162
+ /**
163
+ * If this function return `true` the cache entry is valid and can be stored, if return `false` isn't valid.
164
+ * If the result is `undefined`, the normal behaviour is provided.
165
+ */
166
+ isValid?: <K, T>(entry: NgHttpCachingEntry<K, T>) => boolean | undefined | void;
167
+ }
168
+ interface NgHttpCachingDefaultConfig extends NgHttpCachingConfig {
169
+ store: NgHttpCachingStorageInterface;
170
+ lifetime: number;
171
+ allowedMethod: string[];
172
+ cacheStrategy: NgHttpCachingStrategy;
173
+ version: string;
174
+ checkResponseHeaders: boolean;
175
+ }
176
+ declare const NgHttpCachingConfigDefault: Readonly<NgHttpCachingDefaultConfig>;
177
+ declare class NgHttpCachingService {
178
+ private readonly queue;
179
+ private readonly config;
180
+ private gcLock;
181
+ private devMode;
182
+ constructor();
183
+ /**
184
+ * Return the config
185
+ */
186
+ getConfig(): Readonly<NgHttpCachingConfig>;
187
+ /**
188
+ * Return the queue map
189
+ */
190
+ getQueue(): Readonly<Map<string, Observable$1<HttpEvent<any>>>>;
191
+ /**
192
+ * Return the cache store
193
+ */
194
+ getStore(): Readonly<NgHttpCachingStorageInterface>;
195
+ /**
196
+ * Return response from cache
197
+ */
198
+ getFromCache<K, T>(req: HttpRequest<K>): Readonly<HttpResponse<T>> | undefined;
199
+ /**
200
+ * Add response to cache
201
+ */
202
+ addToCache<K, T>(req: HttpRequest<K>, res: HttpResponse<T>): boolean;
203
+ /**
204
+ * Delete response from cache
205
+ */
206
+ deleteFromCache<K>(req: HttpRequest<K>): boolean;
207
+ /**
208
+ * Clear the cache
209
+ */
210
+ clearCache(): void;
211
+ /**
212
+ * Clear the cache by key
213
+ */
214
+ clearCacheByKey(key: string): boolean;
215
+ /**
216
+ * Clear the cache by keys
217
+ */
218
+ clearCacheByKeys(keys: Array<string>): number;
219
+ /**
220
+ * Clear the cache by regex
221
+ */
222
+ clearCacheByRegex<K, T>(regex: RegExp): number;
223
+ /**
224
+ * Clear the cache by TAG
225
+ */
226
+ clearCacheByTag<K, T>(tag: string): number;
227
+ /**
228
+ * Run garbage collector (delete expired cache entry)
229
+ */
230
+ runGc<K, T>(): boolean;
231
+ /**
232
+ * Return true if cache entry is expired
233
+ */
234
+ isExpired<K, T>(entry: NgHttpCachingEntry<K, T>): boolean;
235
+ /**
236
+ * Return true if cache entry is valid for store in the cache
237
+ * Default behaviour is whether the status code falls in the 2xx range and response headers cache-control and expires allow cache.
238
+ */
239
+ isValid<K, T>(entry: NgHttpCachingEntry<K, T>): boolean;
240
+ /**
241
+ * Return true if the request is cacheable
242
+ */
243
+ isCacheable<K>(req: HttpRequest<K>): boolean;
244
+ /**
245
+ * Return the cache key.
246
+ * Default key is http method plus url with query parameters, eg.:
247
+ * `GET@https://github.com/nigrosimone/ng-http-caching`
248
+ */
249
+ getKey<K>(req: HttpRequest<K>): string;
250
+ /**
251
+ * Return observable from cache
252
+ */
253
+ getFromQueue<K, T>(req: HttpRequest<K>): Observable$1<HttpEvent<T>> | undefined;
254
+ /**
255
+ * Add observable to cache
256
+ */
257
+ addToQueue<K, T>(req: HttpRequest<K>, obs: Observable$1<HttpEvent<T>>): void;
258
+ /**
259
+ * Delete observable from cache
260
+ */
261
+ deleteFromQueue<K>(req: HttpRequest<K>): boolean;
262
+ /**
263
+ * Recursively Object.freeze simple Javascript structures consisting of plain objects, arrays, and primitives.
264
+ * Make the data immutable.
265
+ * @returns immutable object
266
+ */
267
+ private deepFreeze;
268
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgHttpCachingService, never>;
269
+ static ɵprov: i0.ɵɵInjectableDeclaration<NgHttpCachingService>;
270
+ }
271
+
272
+ declare class NgHttpCachingModule {
273
+ static forRoot(ngHttpCachingConfig?: NgHttpCachingConfig): ModuleWithProviders<NgHttpCachingModule>;
274
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgHttpCachingModule, never>;
275
+ static ɵmod: i0.ɵɵNgModuleDeclaration<NgHttpCachingModule, never, never, never>;
276
+ static ɵinj: i0.ɵɵInjectorDeclaration<NgHttpCachingModule>;
277
+ }
278
+
279
+ declare function provideNgHttpCaching(ngHttpCachingConfig?: NgHttpCachingConfig): i0.EnvironmentProviders;
280
+
281
+ declare class NgHttpCachingMemoryStorage extends Map<string, NgHttpCachingEntry<any, any>> implements NgHttpCachingStorageInterface {
282
+ }
283
+
284
+ interface NgHttpCachingStorageEntry {
285
+ url: string;
286
+ response: string;
287
+ request: string;
288
+ addedTime: number;
289
+ version: string;
290
+ }
291
+ declare const serializeRequest: (req: HttpRequest<any>) => string;
292
+ declare const serializeResponse: (res: HttpResponse<any>) => string;
293
+ declare const deserializeRequest: <T = any>(req: string) => HttpRequest<T>;
294
+ declare const deserializeResponse: <T = any>(res: string) => HttpResponse<T>;
295
+ declare class NgHttpCachingBrowserStorage implements NgHttpCachingStorageInterface {
296
+ private storage;
297
+ constructor(storage: Storage);
298
+ get size(): number;
299
+ clear(): void;
300
+ delete(key: string): boolean;
301
+ forEach(callbackfn: (value: NgHttpCachingEntry, key: string) => void): void;
302
+ get(key: string): Readonly<NgHttpCachingEntry> | undefined;
303
+ has(key: string): boolean;
304
+ set(key: string, value: NgHttpCachingEntry): void;
305
+ protected serialize(value: NgHttpCachingEntry): NgHttpCachingStorageEntry;
306
+ protected deserialize(value: NgHttpCachingStorageEntry): NgHttpCachingEntry;
307
+ }
308
+
309
+ declare class NgHttpCachingLocalStorage extends NgHttpCachingBrowserStorage {
310
+ constructor();
311
+ }
312
+ declare const withNgHttpCachingLocalStorage: () => NgHttpCachingLocalStorage;
313
+
314
+ declare class NgHttpCachingSessionStorage extends NgHttpCachingBrowserStorage {
315
+ constructor();
316
+ }
317
+ declare const withNgHttpCachingSessionStorage: () => NgHttpCachingSessionStorage;
318
+
319
+ export { NG_HTTP_CACHING_CONFIG, NG_HTTP_CACHING_CONTEXT, NG_HTTP_CACHING_DAY_IN_MS, NG_HTTP_CACHING_HOUR_IN_MS, NG_HTTP_CACHING_MINUTE_IN_MS, NG_HTTP_CACHING_MONTH_IN_MS, NG_HTTP_CACHING_SECOND_IN_MS, NG_HTTP_CACHING_WEEK_IN_MS, NG_HTTP_CACHING_YEAR_IN_MS, NgHttpCachingBrowserStorage, NgHttpCachingConfigDefault, NgHttpCachingHeaders, NgHttpCachingHeadersList, NgHttpCachingInterceptorService, NgHttpCachingLocalStorage, NgHttpCachingMemoryStorage, NgHttpCachingModule, NgHttpCachingService, NgHttpCachingSessionStorage, NgHttpCachingStrategy, checkCacheHeaders, deserializeRequest, deserializeResponse, provideNgHttpCaching, serializeRequest, serializeResponse, withNgHttpCachingContext, withNgHttpCachingLocalStorage, withNgHttpCachingSessionStorage };
320
+ export type { NgHttpCachingConfig, NgHttpCachingContext, NgHttpCachingDefaultConfig, NgHttpCachingEntry, NgHttpCachingStorageEntry, NgHttpCachingStorageInterface };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ng-http-caching",
3
- "version": "18.0.2",
3
+ "version": "20.0.1",
4
4
  "description": "Cache for HTTP requests in Angular application.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -40,8 +40,6 @@
40
40
  },
41
41
  ".": {
42
42
  "types": "./index.d.ts",
43
- "esm2022": "./esm2022/ng-http-caching.mjs",
44
- "esm": "./esm2022/ng-http-caching.mjs",
45
43
  "default": "./fesm2022/ng-http-caching.mjs"
46
44
  }
47
45
  },
@@ -1,65 +0,0 @@
1
- import { HttpResponse } from '@angular/common/http';
2
- import { Injectable } from '@angular/core';
3
- import { asyncScheduler, of, scheduled } from 'rxjs';
4
- import { tap, finalize, shareReplay } from 'rxjs/operators';
5
- import { NgHttpCachingHeadersList } from './ng-http-caching.service';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "./ng-http-caching.service";
8
- export class NgHttpCachingInterceptorService {
9
- constructor(cacheService) {
10
- this.cacheService = cacheService;
11
- }
12
- intercept(req, next) {
13
- // run garbage collector
14
- this.cacheService.runGc();
15
- // Don't cache if it's not cacheable
16
- if (!this.cacheService.isCacheable(req)) {
17
- return this.sendRequest(req, next);
18
- }
19
- // Checked if there is pending response for this request
20
- const cachedObservable = this.cacheService.getFromQueue(req);
21
- if (cachedObservable) {
22
- // console.log('cachedObservable',cachedObservable);
23
- return cachedObservable;
24
- }
25
- // Checked if there is cached response for this request
26
- const cachedResponse = this.cacheService.getFromCache(req);
27
- if (cachedResponse) {
28
- // console.log('cachedResponse');
29
- return scheduled(of(cachedResponse.clone()), asyncScheduler);
30
- }
31
- // If the request of going through for first time
32
- // then let the request proceed and cache the response
33
- // console.log('sendRequest', req);
34
- const shared = this.sendRequest(req, next).pipe(tap(event => {
35
- if (event instanceof HttpResponse) {
36
- this.cacheService.addToCache(req, event.clone());
37
- }
38
- }), finalize(() => {
39
- // delete pending request
40
- this.cacheService.deleteFromQueue(req);
41
- }), shareReplay());
42
- // add pending request to queue for cache parallel request
43
- this.cacheService.addToQueue(req, shared);
44
- return shared;
45
- }
46
- /**
47
- * Send http request (next handler)
48
- */
49
- sendRequest(req, next) {
50
- let cloned = req.clone();
51
- // trim custom headers before send request
52
- NgHttpCachingHeadersList.forEach(ngHttpCachingHeaders => {
53
- if (cloned.headers.has(ngHttpCachingHeaders)) {
54
- cloned = cloned.clone({ headers: cloned.headers.delete(ngHttpCachingHeaders) });
55
- }
56
- });
57
- return next.handle(cloned);
58
- }
59
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NgHttpCachingInterceptorService, deps: [{ token: i1.NgHttpCachingService }], target: i0.ɵɵFactoryTarget.Injectable }); }
60
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NgHttpCachingInterceptorService }); }
61
- }
62
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NgHttpCachingInterceptorService, decorators: [{
63
- type: Injectable
64
- }], ctorParameters: () => [{ type: i1.NgHttpCachingService }] });
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctaHR0cC1jYWNoaW5nLWludGVyY2VwdG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1odHRwLWNhY2hpbmcvc3JjL2xpYi9uZy1odHRwLWNhY2hpbmctaW50ZXJjZXB0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXdELFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzFHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVELE9BQU8sRUFBd0Isd0JBQXdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7O0FBRzNGLE1BQU0sT0FBTywrQkFBK0I7SUFFMUMsWUFBNkIsWUFBa0M7UUFBbEMsaUJBQVksR0FBWixZQUFZLENBQXNCO0lBQUksQ0FBQztJQUVwRSxTQUFTLENBQUMsR0FBcUIsRUFBRSxJQUFpQjtRQUNoRCx3QkFBd0I7UUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUUxQixvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBRUQsd0RBQXdEO1FBQ3hELE1BQU0sZ0JBQWdCLEdBQTJDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUNyQixvREFBb0Q7WUFDcEQsT0FBTyxnQkFBZ0IsQ0FBQztRQUMxQixDQUFDO1FBRUQsdURBQXVEO1FBQ3ZELE1BQU0sY0FBYyxHQUFrQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxRixJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLGlDQUFpQztZQUNqQyxPQUFPLFNBQVMsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUVELGlEQUFpRDtRQUNqRCxzREFBc0Q7UUFDdEQsbUNBQW1DO1FBQ25DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FDN0MsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1YsSUFBSSxLQUFLLFlBQVksWUFBWSxFQUFFLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNuRCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNaLHlCQUF5QjtZQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsRUFDRixXQUFXLEVBQUUsQ0FDZCxDQUFDO1FBRUYsMERBQTBEO1FBQzFELElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUUxQyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXLENBQUMsR0FBcUIsRUFBRSxJQUFpQjtRQUNsRCxJQUFJLE1BQU0sR0FBcUIsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzNDLDBDQUEwQztRQUMxQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsRUFBRTtZQUN0RCxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQztnQkFDN0MsTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEYsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdCLENBQUM7OEdBN0RVLCtCQUErQjtrSEFBL0IsK0JBQStCOzsyRkFBL0IsK0JBQStCO2tCQUQzQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEV2ZW50LCBIdHRwSGFuZGxlciwgSHR0cEludGVyY2VwdG9yLCBIdHRwUmVxdWVzdCwgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGFzeW5jU2NoZWR1bGVyLCBPYnNlcnZhYmxlLCBvZiwgc2NoZWR1bGVkIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRhcCwgZmluYWxpemUsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBOZ0h0dHBDYWNoaW5nU2VydmljZSwgTmdIdHRwQ2FjaGluZ0hlYWRlcnNMaXN0IH0gZnJvbSAnLi9uZy1odHRwLWNhY2hpbmcuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBOZ0h0dHBDYWNoaW5nSW50ZXJjZXB0b3JTZXJ2aWNlIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjYWNoZVNlcnZpY2U6IE5nSHR0cENhY2hpbmdTZXJ2aWNlKSB7IH1cclxuXHJcbiAgaW50ZXJjZXB0KHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiB7XHJcbiAgICAvLyBydW4gZ2FyYmFnZSBjb2xsZWN0b3JcclxuICAgIHRoaXMuY2FjaGVTZXJ2aWNlLnJ1bkdjKCk7XHJcblxyXG4gICAgLy8gRG9uJ3QgY2FjaGUgaWYgaXQncyBub3QgY2FjaGVhYmxlXHJcbiAgICBpZiAoIXRoaXMuY2FjaGVTZXJ2aWNlLmlzQ2FjaGVhYmxlKHJlcSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VuZFJlcXVlc3QocmVxLCBuZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVja2VkIGlmIHRoZXJlIGlzIHBlbmRpbmcgcmVzcG9uc2UgZm9yIHRoaXMgcmVxdWVzdFxyXG4gICAgY29uc3QgY2FjaGVkT2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4gfCB1bmRlZmluZWQgPSB0aGlzLmNhY2hlU2VydmljZS5nZXRGcm9tUXVldWUocmVxKTtcclxuICAgIGlmIChjYWNoZWRPYnNlcnZhYmxlKSB7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWNoZWRPYnNlcnZhYmxlJyxjYWNoZWRPYnNlcnZhYmxlKTtcclxuICAgICAgcmV0dXJuIGNhY2hlZE9ic2VydmFibGU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2tlZCBpZiB0aGVyZSBpcyBjYWNoZWQgcmVzcG9uc2UgZm9yIHRoaXMgcmVxdWVzdFxyXG4gICAgY29uc3QgY2FjaGVkUmVzcG9uc2U6IEh0dHBSZXNwb25zZTxhbnk+IHwgdW5kZWZpbmVkID0gdGhpcy5jYWNoZVNlcnZpY2UuZ2V0RnJvbUNhY2hlKHJlcSk7XHJcbiAgICBpZiAoY2FjaGVkUmVzcG9uc2UpIHtcclxuICAgICAgLy8gY29uc29sZS5sb2coJ2NhY2hlZFJlc3BvbnNlJyk7XHJcbiAgICAgIHJldHVybiBzY2hlZHVsZWQob2YoY2FjaGVkUmVzcG9uc2UuY2xvbmUoKSksIGFzeW5jU2NoZWR1bGVyKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiB0aGUgcmVxdWVzdCBvZiBnb2luZyB0aHJvdWdoIGZvciBmaXJzdCB0aW1lXHJcbiAgICAvLyB0aGVuIGxldCB0aGUgcmVxdWVzdCBwcm9jZWVkIGFuZCBjYWNoZSB0aGUgcmVzcG9uc2VcclxuICAgIC8vIGNvbnNvbGUubG9nKCdzZW5kUmVxdWVzdCcsIHJlcSk7XHJcbiAgICBjb25zdCBzaGFyZWQgPSB0aGlzLnNlbmRSZXF1ZXN0KHJlcSwgbmV4dCkucGlwZShcclxuICAgICAgdGFwKGV2ZW50ID0+IHtcclxuICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UpIHtcclxuICAgICAgICAgIHRoaXMuY2FjaGVTZXJ2aWNlLmFkZFRvQ2FjaGUocmVxLCBldmVudC5jbG9uZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgLy8gZGVsZXRlIHBlbmRpbmcgcmVxdWVzdFxyXG4gICAgICAgIHRoaXMuY2FjaGVTZXJ2aWNlLmRlbGV0ZUZyb21RdWV1ZShyZXEpO1xyXG4gICAgICB9KSxcclxuICAgICAgc2hhcmVSZXBsYXkoKVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBhZGQgcGVuZGluZyByZXF1ZXN0IHRvIHF1ZXVlIGZvciBjYWNoZSBwYXJhbGxlbCByZXF1ZXN0XHJcbiAgICB0aGlzLmNhY2hlU2VydmljZS5hZGRUb1F1ZXVlKHJlcSwgc2hhcmVkKTtcclxuXHJcbiAgICByZXR1cm4gc2hhcmVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZCBodHRwIHJlcXVlc3QgKG5leHQgaGFuZGxlcilcclxuICAgKi9cclxuICBzZW5kUmVxdWVzdChyZXE6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xyXG4gICAgbGV0IGNsb25lZDogSHR0cFJlcXVlc3Q8YW55PiA9IHJlcS5jbG9uZSgpO1xyXG4gICAgLy8gdHJpbSBjdXN0b20gaGVhZGVycyBiZWZvcmUgc2VuZCByZXF1ZXN0XHJcbiAgICBOZ0h0dHBDYWNoaW5nSGVhZGVyc0xpc3QuZm9yRWFjaChuZ0h0dHBDYWNoaW5nSGVhZGVycyA9PiB7XHJcbiAgICAgIGlmIChjbG9uZWQuaGVhZGVycy5oYXMobmdIdHRwQ2FjaGluZ0hlYWRlcnMpKSB7XHJcbiAgICAgICAgY2xvbmVkID0gY2xvbmVkLmNsb25lKHsgaGVhZGVyczogY2xvbmVkLmhlYWRlcnMuZGVsZXRlKG5nSHR0cENhY2hpbmdIZWFkZXJzKSB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbmV4dC5oYW5kbGUoY2xvbmVkKTtcclxuICB9XHJcbn1cclxuIl19
@@ -1,44 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { HTTP_INTERCEPTORS } from '@angular/common/http';
3
- import { NG_HTTP_CACHING_CONFIG, NgHttpCachingService, } from './ng-http-caching.service';
4
- import { NgHttpCachingInterceptorService } from './ng-http-caching-interceptor.service';
5
- import * as i0 from "@angular/core";
6
- export class NgHttpCachingModule {
7
- static forRoot(ngHttpCachingConfig) {
8
- return {
9
- ngModule: NgHttpCachingModule,
10
- providers: [
11
- {
12
- provide: NG_HTTP_CACHING_CONFIG,
13
- useValue: ngHttpCachingConfig,
14
- },
15
- ],
16
- };
17
- }
18
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NgHttpCachingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
19
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.2", ngImport: i0, type: NgHttpCachingModule }); }
20
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NgHttpCachingModule, providers: [
21
- NgHttpCachingService,
22
- NgHttpCachingInterceptorService,
23
- {
24
- provide: HTTP_INTERCEPTORS,
25
- useClass: NgHttpCachingInterceptorService,
26
- multi: true,
27
- },
28
- ] }); }
29
- }
30
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NgHttpCachingModule, decorators: [{
31
- type: NgModule,
32
- args: [{
33
- providers: [
34
- NgHttpCachingService,
35
- NgHttpCachingInterceptorService,
36
- {
37
- provide: HTTP_INTERCEPTORS,
38
- useClass: NgHttpCachingInterceptorService,
39
- multi: true,
40
- },
41
- ]
42
- }]
43
- }] });
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctaHR0cC1jYWNoaW5nLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWh0dHAtY2FjaGluZy9zcmMvbGliL25nLWh0dHAtY2FjaGluZy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUNMLHNCQUFzQixFQUV0QixvQkFBb0IsR0FDckIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7QUFheEYsTUFBTSxPQUFPLG1CQUFtQjtJQUM5QixNQUFNLENBQUMsT0FBTyxDQUNaLG1CQUF5QztRQUV6QyxPQUFPO1lBQ0wsUUFBUSxFQUFFLG1CQUFtQjtZQUM3QixTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsT0FBTyxFQUFFLHNCQUFzQjtvQkFDL0IsUUFBUSxFQUFFLG1CQUFtQjtpQkFDOUI7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDOzhHQWJVLG1CQUFtQjsrR0FBbkIsbUJBQW1COytHQUFuQixtQkFBbUIsYUFWbkI7WUFDVCxvQkFBb0I7WUFDcEIsK0JBQStCO1lBQy9CO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFFBQVEsRUFBRSwrQkFBK0I7Z0JBQ3pDLEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRjs7MkZBRVUsbUJBQW1CO2tCQVgvQixRQUFRO21CQUFDO29CQUNSLFNBQVMsRUFBRTt3QkFDVCxvQkFBb0I7d0JBQ3BCLCtCQUErQjt3QkFDL0I7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsUUFBUSxFQUFFLCtCQUErQjs0QkFDekMsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSwgTW9kdWxlV2l0aFByb3ZpZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIVFRQX0lOVEVSQ0VQVE9SUyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtcclxuICBOR19IVFRQX0NBQ0hJTkdfQ09ORklHLFxyXG4gIE5nSHR0cENhY2hpbmdDb25maWcsXHJcbiAgTmdIdHRwQ2FjaGluZ1NlcnZpY2UsXHJcbn0gZnJvbSAnLi9uZy1odHRwLWNhY2hpbmcuc2VydmljZSc7XHJcbmltcG9ydCB7IE5nSHR0cENhY2hpbmdJbnRlcmNlcHRvclNlcnZpY2UgfSBmcm9tICcuL25nLWh0dHAtY2FjaGluZy1pbnRlcmNlcHRvci5zZXJ2aWNlJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICBOZ0h0dHBDYWNoaW5nU2VydmljZSxcclxuICAgIE5nSHR0cENhY2hpbmdJbnRlcmNlcHRvclNlcnZpY2UsXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IEhUVFBfSU5URVJDRVBUT1JTLFxyXG4gICAgICB1c2VDbGFzczogTmdIdHRwQ2FjaGluZ0ludGVyY2VwdG9yU2VydmljZSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIE5nSHR0cENhY2hpbmdNb2R1bGUge1xyXG4gIHN0YXRpYyBmb3JSb290KFxyXG4gICAgbmdIdHRwQ2FjaGluZ0NvbmZpZz86IE5nSHR0cENhY2hpbmdDb25maWdcclxuICApOiBNb2R1bGVXaXRoUHJvdmlkZXJzPE5nSHR0cENhY2hpbmdNb2R1bGU+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5nTW9kdWxlOiBOZ0h0dHBDYWNoaW5nTW9kdWxlLFxyXG4gICAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwcm92aWRlOiBOR19IVFRQX0NBQ0hJTkdfQ09ORklHLFxyXG4gICAgICAgICAgdXNlVmFsdWU6IG5nSHR0cENhY2hpbmdDb25maWcsXHJcbiAgICAgICAgfSxcclxuICAgICAgXSxcclxuICAgIH07XHJcbiAgfVxyXG59XHJcbiJdfQ==