@mmstack/resource 20.0.0 → 20.0.2
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.
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { computed, untracked, InjectionToken, inject, isDevMode, signal, effect, linkedSignal, DestroyRef } from '@angular/core';
|
|
2
2
|
import { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
|
|
3
|
-
import { of, tap, map, finalize, shareReplay, interval, firstValueFrom, combineLatestWith, filter } from 'rxjs';
|
|
3
|
+
import { of, tap, map, finalize, shareReplay, interval, firstValueFrom, catchError, combineLatestWith, filter } from 'rxjs';
|
|
4
4
|
import { HttpContextToken, HttpContext, HttpResponse, HttpParams, httpResource, HttpClient } from '@angular/common/http';
|
|
5
5
|
import { mutable, toWritable } from '@mmstack/primitives';
|
|
6
6
|
import { v7 } from 'uuid';
|
|
@@ -415,6 +415,20 @@ function createCacheInterceptor(allowedMethods = ['GET', 'HEAD', 'OPTIONS']) {
|
|
|
415
415
|
};
|
|
416
416
|
}
|
|
417
417
|
|
|
418
|
+
function catchValueError(resource, fallback) {
|
|
419
|
+
return {
|
|
420
|
+
...resource,
|
|
421
|
+
value: toWritable(computed(() => {
|
|
422
|
+
try {
|
|
423
|
+
return resource.value();
|
|
424
|
+
}
|
|
425
|
+
catch {
|
|
426
|
+
return fallback;
|
|
427
|
+
}
|
|
428
|
+
}), (value) => resource.value.set(value)),
|
|
429
|
+
};
|
|
430
|
+
}
|
|
431
|
+
|
|
418
432
|
/** @internal */
|
|
419
433
|
function internalCeateCircuitBreaker(treshold = 5, resetTimeout = 30000) {
|
|
420
434
|
const halfOpen = signal(false);
|
|
@@ -805,7 +819,9 @@ function queryResource(request, options) {
|
|
|
805
819
|
return undefined;
|
|
806
820
|
return request() ?? undefined;
|
|
807
821
|
}, {
|
|
808
|
-
equal:
|
|
822
|
+
equal: options?.triggerOnSameRequest
|
|
823
|
+
? undefined
|
|
824
|
+
: createEqualRequest(options?.equal),
|
|
809
825
|
});
|
|
810
826
|
const hashFn = typeof options?.cache === 'object'
|
|
811
827
|
? (options.cache.hash ?? urlWithParams)
|
|
@@ -838,6 +854,7 @@ function queryResource(request, options) {
|
|
|
838
854
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
839
855
|
parse: options?.parse, // Not my favorite thing to do, but here it is completely safe.
|
|
840
856
|
});
|
|
857
|
+
resource = catchValueError(resource, options?.defaultValue);
|
|
841
858
|
// get full HttpResonse from Cache
|
|
842
859
|
const cachedEvent = cache.get(cacheKey);
|
|
843
860
|
const parse = options?.parse ?? ((val) => val);
|
|
@@ -1004,7 +1021,7 @@ function mutationResource(request, options = {}) {
|
|
|
1004
1021
|
? options.injector.get(DestroyRef)
|
|
1005
1022
|
: inject(DestroyRef);
|
|
1006
1023
|
const error$ = toObservable(resource.error);
|
|
1007
|
-
const value$ = toObservable(resource.value);
|
|
1024
|
+
const value$ = toObservable(resource.value).pipe(catchError(() => of(null)));
|
|
1008
1025
|
const statusSub = toObservable(resource.status)
|
|
1009
1026
|
.pipe(combineLatestWith(error$, value$), map(([status, error, value]) => {
|
|
1010
1027
|
if (status === 'error' && error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mmstack-resource.mjs","sources":["../tmp-esm2022/lib/util/cache/cache.js","../tmp-esm2022/lib/util/cache/cache.interceptor.js","../tmp-esm2022/lib/util/circuit-breaker.js","../tmp-esm2022/lib/util/dedupe.interceptor.js","../tmp-esm2022/lib/util/equality.js","../tmp-esm2022/lib/util/has-slow-connection.js","../tmp-esm2022/lib/util/persist.js","../tmp-esm2022/lib/util/refresh.js","../tmp-esm2022/lib/util/retry-on-error.js","../tmp-esm2022/lib/util/url-with-params.js","../tmp-esm2022/lib/query-resource.js","../tmp-esm2022/lib/mutation-resource.js","../tmp-esm2022/mmstack-resource.js"],"sourcesContent":["import { computed, inject, InjectionToken, isDevMode, untracked, } from '@angular/core';\nimport { mutable } from '@mmstack/primitives';\nimport { v7 } from 'uuid';\nconst ONE_DAY = 1000 * 60 * 60 * 24;\nconst ONE_HOUR = 1000 * 60 * 60;\nconst DEFAULT_CLEANUP_OPT = {\n type: 'lru',\n maxSize: 200,\n checkInterval: ONE_HOUR,\n};\n/**\n * A generic cache implementation that stores data with time-to-live (TTL) and stale-while-revalidate capabilities.\n *\n * @typeParam T - The type of data to be stored in the cache.\n */\nexport class Cache {\n ttl;\n staleTime;\n internal = mutable(new Map());\n cleanupOpt;\n /**\n * Creates a new `Cache` instance.\n *\n * @param ttl - The default Time To Live (TTL) for cache entries, in milliseconds. Defaults to one day.\n * @param staleTime - The default duration, in milliseconds, during which a cache entry is considered\n * stale but can still be used while revalidation occurs in the background. Defaults to 1 hour.\n * @param cleanupOpt - Options for configuring the cache cleanup strategy. Defaults to LRU with a\n * `maxSize` of 200 and a `checkInterval` of one hour.\n */\n constructor(ttl = ONE_DAY, staleTime = ONE_HOUR, cleanupOpt = {\n type: 'lru',\n maxSize: 1000,\n checkInterval: ONE_HOUR,\n }) {\n this.ttl = ttl;\n this.staleTime = staleTime;\n this.cleanupOpt = {\n ...DEFAULT_CLEANUP_OPT,\n ...cleanupOpt,\n };\n if (this.cleanupOpt.maxSize <= 0)\n throw new Error('maxSize must be greater than 0');\n // cleanup cache based on provided options regularly\n const cleanupInterval = setInterval(() => {\n this.cleanup();\n }, cleanupOpt.checkInterval);\n const destroyId = v7();\n // cleanup if object is garbage collected, this is because the cache can be quite large from a memory standpoint & we dont want all that floating garbage\n const registry = new FinalizationRegistry((id) => {\n if (id === destroyId) {\n clearInterval(cleanupInterval);\n }\n });\n registry.register(this, destroyId);\n }\n /** @internal */\n getInternal(key) {\n const keySignal = computed(() => key());\n return computed(() => {\n const key = keySignal();\n if (!key)\n return null;\n const found = this.internal().get(key);\n const now = Date.now();\n if (!found || found.expiresAt <= now)\n return null;\n found.useCount++;\n return {\n ...found,\n isStale: found.stale <= now,\n };\n });\n }\n /**\n * Retrieves a cache entry without affecting its usage count (for LRU). This is primarily\n * for internal use or debugging.\n * @internal\n * @param key - The key of the entry to retrieve.\n * @returns The cache entry, or `null` if not found or expired.\n */\n getUntracked(key) {\n return untracked(this.getInternal(() => key));\n }\n /**\n * Retrieves a cache entry as a signal.\n *\n * @param key - A function that returns the cache key. The key is a signal, allowing for dynamic keys. If the function returns null the value is also null.\n * @returns A signal that holds the cache entry, or `null` if not found or expired. The signal\n * updates whenever the cache entry changes (e.g., due to revalidation or expiration).\n */\n get(key) {\n return this.getInternal(key);\n }\n /**\n * Stores a value in the cache.\n *\n * @param key - The key under which to store the value.\n * @param value - The value to store.\n * @param staleTime - (Optional) The stale time for this entry, in milliseconds. Overrides the default `staleTime`.\n * @param ttl - (Optional) The TTL for this entry, in milliseconds. Overrides the default `ttl`.\n */\n store(key, value, staleTime = this.staleTime, ttl = this.ttl) {\n const entry = this.getUntracked(key);\n if (entry) {\n clearTimeout(entry.timeout); // stop invalidation\n }\n const prevCount = entry?.useCount ?? 0;\n // ttl cannot be less than staleTime\n if (ttl < staleTime)\n staleTime = ttl;\n const now = Date.now();\n this.internal.mutate((map) => {\n map.set(key, {\n value,\n created: entry?.created ?? now,\n useCount: prevCount + 1,\n stale: now + staleTime,\n expiresAt: now + ttl,\n timeout: setTimeout(() => this.invalidate(key), ttl),\n });\n return map;\n });\n }\n /**\n * Invalidates (removes) a cache entry.\n *\n * @param key - The key of the entry to invalidate.\n */\n invalidate(key) {\n const entry = this.getUntracked(key);\n if (!entry)\n return;\n clearTimeout(entry.timeout);\n this.internal.mutate((map) => {\n map.delete(key);\n return map;\n });\n }\n /** @internal */\n cleanup() {\n if (untracked(this.internal).size <= this.cleanupOpt.maxSize)\n return;\n const sorted = Array.from(untracked(this.internal).entries()).toSorted((a, b) => {\n if (this.cleanupOpt.type === 'lru') {\n return a[1].useCount - b[1].useCount; // least used first\n }\n else {\n return a[1].created - b[1].created; // oldest first\n }\n });\n const keepCount = Math.floor(this.cleanupOpt.maxSize / 2);\n const removed = sorted.slice(0, sorted.length - keepCount);\n const keep = sorted.slice(removed.length, sorted.length);\n removed.forEach(([, e]) => {\n clearTimeout(e.timeout);\n });\n this.internal.set(new Map(keep));\n }\n}\nconst CLIENT_CACHE_TOKEN = new InjectionToken('INTERNAL_CLIENT_CACHE');\n/**\n * Provides the instance of the QueryCache for queryResource. This should probably be called\n * in your application's root configuration, but can also be overriden with component/module providers.\n *\n * @param options - Optional configuration options for the cache.\n * @returns An Angular `Provider` for the cache.\n *\n * @example\n * // In your app.config.ts or AppModule providers:\n *\n * import { provideQueryCache } from './your-cache';\n *\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideQueryCache({\n * ttl: 60000, // Default TTL of 60 seconds\n * staleTime: 30000, // Default staleTime of 30 seconds\n * }),\n * // ... other providers\n * ]\n * };\n */\nexport function provideQueryCache(opt) {\n return {\n provide: CLIENT_CACHE_TOKEN,\n useValue: new Cache(opt?.ttl, opt?.staleTime, opt?.cleanup),\n };\n}\nclass NoopCache extends Cache {\n store(_, __, ___ = super.staleTime, ____ = super.ttl) {\n // noop\n }\n}\n/**\n * Injects the `QueryCache` instance that is used within queryResource.\n * Allows for direct modification of cached data, but is mostly meant for internal use.\n *\n * @param injector - (Optional) The injector to use. If not provided, the current\n * injection context is used.\n * @returns The `QueryCache` instance.\n *\n * @example\n * // In your component or service:\n *\n * import { injectQueryCache } from './your-cache';\n *\n * constructor() {\n * const cache = injectQueryCache();\n *\n * const myData = cache.get(() => 'my-data-key');\n * if (myData() !== null) {\n * // ... use cached data ...\n * }\n * }\n */\nexport function injectQueryCache(injector) {\n const cache = injector\n ? injector.get(CLIENT_CACHE_TOKEN, null, {\n optional: true,\n })\n : inject(CLIENT_CACHE_TOKEN, {\n optional: true,\n });\n if (!cache) {\n if (isDevMode())\n throw new Error('Cache not provided, please add provideQueryCache() to providers array');\n else\n return new NoopCache();\n }\n return cache;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yZXNvdXJjZS9zcmMvbGliL3V0aWwvY2FjaGUvY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04sY0FBYyxFQUVkLFNBQVMsRUFHVCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUF3RDFCLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQyxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUVoQyxNQUFNLG1CQUFtQixHQUFHO0lBQzFCLElBQUksRUFBRSxLQUFLO0lBQ1gsT0FBTyxFQUFFLEdBQUc7SUFDWixhQUFhLEVBQUUsUUFBUTtDQUNDLENBQUM7QUFFM0I7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxLQUFLO0lBY0s7SUFDQTtJQWRKLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLEVBQXlCLENBQUMsQ0FBQztJQUNyRCxVQUFVLENBQWM7SUFFekM7Ozs7Ozs7O09BUUc7SUFDSCxZQUNxQixNQUFjLE9BQU8sRUFDckIsWUFBb0IsUUFBUSxFQUMvQyxhQUFtQztRQUNqQyxJQUFJLEVBQUUsS0FBSztRQUNYLE9BQU8sRUFBRSxJQUFJO1FBQ2IsYUFBYSxFQUFFLFFBQVE7S0FDeEI7UUFOa0IsUUFBRyxHQUFILEdBQUcsQ0FBa0I7UUFDckIsY0FBUyxHQUFULFNBQVMsQ0FBbUI7UUFPL0MsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNoQixHQUFHLG1CQUFtQjtZQUN0QixHQUFHLFVBQVU7U0FDZCxDQUFDO1FBQ0YsSUFB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QUM7QUFDSixDQUFDO0FBRUQsTUFBTSxTQUFhLFNBQVEsS0FBUTtJQUN4QixLQUFLLENBQUMsQ0FBUyxFQUFFLEVBQUssRUFBRSxHQUFHLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUc7UUFDdEUsT0FBTztJQUNULENBQUM7Q0FDRjtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLFFBQW1CO0lBRW5CLE1BQU0sS0FBSyxHQUFHLFFBQVE7UUFDcEIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxFQUFFO1lBQ3JDLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQztRQUNKLENBQUMsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUU7WUFDekIsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDLENBQUM7SUFFUCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxJQUFJLFNBQVMsRUFBRTtZQUNiLE1BQU0sSUFBSSxLQUFLLENBQ2IsdUVBQXVFLENBQ3hFLENBQUM7O1lBQ0MsT0FBTyxJQUFJLFNBQVMsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEh0dHBSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtcclxuICBjb21wdXRlZCxcclxuICBpbmplY3QsXHJcbiAgSW5qZWN0aW9uVG9rZW4sXHJcbiAgSW5qZWN0b3IsXHJcbiAgaXNEZXZNb2RlLFxyXG4gIHR5cGUgUHJvdmlkZXIsXHJcbiAgdHlwZSBTaWduYWwsXHJcbiAgdW50cmFja2VkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBtdXRhYmxlIH0gZnJvbSAnQG1tc3RhY2svcHJpbWl0aXZlcyc7XHJcbmltcG9ydCB7IHY3IH0gZnJvbSAndXVpZCc7XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhlIExlYXN0IFJlY2VudGx5IFVzZWQgKExSVSkgY2FjaGUgY2xlYW51cCBzdHJhdGVneS5cclxuICogQGludGVybmFsXHJcbiAqL1xyXG50eXBlIExSVUNsZWFudXBUeXBlID0ge1xyXG4gIHR5cGU6ICdscnUnO1xyXG4gIC8qKlxyXG4gICAqIEhvdyBvZnRlbiB0byBjaGVjayBmb3IgZXhwaXJlZCBvciBleGNlc3MgZW50cmllcywgaW4gbWlsbGlzZWNvbmRzLlxyXG4gICAqL1xyXG4gIGNoZWNrSW50ZXJ2YWw6IG51bWJlcjtcclxuICAvKipcclxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgZW50cmllcyB0byBrZWVwIGluIHRoZSBjYWNoZS4gIFdoZW4gdGhlIGNhY2hlIGV4Y2VlZHMgdGhpcyBzaXplLFxyXG4gICAqIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIGVudHJpZXMgd2lsbCBiZSByZW1vdmVkLlxyXG4gICAqL1xyXG4gIG1heFNpemU6IG51bWJlcjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyB0aGUgXCJvbGRlc3QgZmlyc3RcIiBjYWNoZSBjbGVhbnVwIHN0cmF0ZWd5LlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbnR5cGUgT2xkc2V0Q2xlYW51cFR5cGUgPSB7XHJcbiAgdHlwZTogJ29sZGVzdCc7XHJcbiAgLyoqXHJcbiAgICogSG93IG9mdGVuIHRvIGNoZWNrIGZvciBleHBpcmVkIG9yIGV4Y2VzcyBlbnRyaWVzLCBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICovXHJcbiAgY2hlY2tJbnRlcnZhbDogbnVtYmVyO1xyXG4gIC8qKlxyXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIHRvIGtlZXAgaW4gdGhlIGNhY2hlLiAgV2hlbiB0aGUgY2FjaGUgZXhjZWVkcyB0aGlzIHNpemUsXHJcbiAgICogdGhlIG9sZGVzdCBlbnRyaWVzIHdpbGwgYmUgcmVtb3ZlZC5cclxuICAgKi9cclxuICBtYXhTaXplOiBudW1iZXI7XHJcbn07XHJcblxyXG4vKipcclxuICogUmVwcmVzZW50cyBhbiBlbnRyeSBpbiB0aGUgY2FjaGUuXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxudHlwZSBDYWNoZUVudHJ5PFQ+ID0ge1xyXG4gIHZhbHVlOiBUO1xyXG4gIGNyZWF0ZWQ6IG51bWJlcjtcclxuICBzdGFsZTogbnVtYmVyO1xyXG4gIHVzZUNvdW50OiBudW1iZXI7XHJcbiAgZXhwaXJlc0F0OiBudW1iZXI7XHJcbiAgdGltZW91dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XHJcbn07XHJcblxyXG4vKipcclxuICogRGVmaW5lcyB0aGUgdHlwZXMgb2YgY2xlYW51cCBzdHJhdGVnaWVzIGF2YWlsYWJsZSBmb3IgdGhlIGNhY2hlLlxyXG4gKiAtIGBscnVgOiBMZWFzdCBSZWNlbnRseSBVc2VkLiAgUmVtb3ZlcyB0aGUgbGVhc3QgcmVjZW50bHkgYWNjZXNzZWQgZW50cmllcyB3aGVuIHRoZSBjYWNoZSBpcyBmdWxsLlxyXG4gKiAtIGBvbGRlc3RgOiBSZW1vdmVzIHRoZSBvbGRlc3QgZW50cmllcyB3aGVuIHRoZSBjYWNoZSBpcyBmdWxsLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgQ2xlYW51cFR5cGUgPSBMUlVDbGVhbnVwVHlwZSB8IE9sZHNldENsZWFudXBUeXBlO1xyXG5cclxuY29uc3QgT05FX0RBWSA9IDEwMDAgKiA2MCAqIDYwICogMjQ7XHJcbmNvbnN0IE9ORV9IT1VSID0gMTAwMCAqIDYwICogNjA7XHJcblxyXG5jb25zdCBERUZBVUxUX0NMRUFOVVBfT1BUID0ge1xyXG4gIHR5cGU6ICdscnUnLFxyXG4gIG1heFNpemU6IDIwMCxcclxuICBjaGVja0ludGVydmFsOiBPTkVfSE9VUixcclxufSBzYXRpc2ZpZXMgTFJVQ2xlYW51cFR5cGU7XHJcblxyXG4vKipcclxuICogQSBnZW5lcmljIGNhY2hlIGltcGxlbWVudGF0aW9uIHRoYXQgc3RvcmVzIGRhdGEgd2l0aCB0aW1lLXRvLWxpdmUgKFRUTCkgYW5kIHN0YWxlLXdoaWxlLXJldmFsaWRhdGUgY2FwYWJpbGl0aWVzLlxyXG4gKlxyXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBkYXRhIHRvIGJlIHN0b3JlZCBpbiB0aGUgY2FjaGUuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQ2FjaGU8VD4ge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgaW50ZXJuYWwgPSBtdXRhYmxlKG5ldyBNYXA8c3RyaW5nLCBDYWNoZUVudHJ5PFQ+PigpKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGNsZWFudXBPcHQ6IENsZWFudXBUeXBlO1xyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGEgbmV3IGBDYWNoZWAgaW5zdGFuY2UuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gdHRsIC0gVGhlIGRlZmF1bHQgVGltZSBUbyBMaXZlIChUVEwpIGZvciBjYWNoZSBlbnRyaWVzLCBpbiBtaWxsaXNlY29uZHMuICBEZWZhdWx0cyB0byBvbmUgZGF5LlxyXG4gICAqIEBwYXJhbSBzdGFsZVRpbWUgLSBUaGUgZGVmYXVsdCBkdXJhdGlvbiwgaW4gbWlsbGlzZWNvbmRzLCBkdXJpbmcgd2hpY2ggYSBjYWNoZSBlbnRyeSBpcyBjb25zaWRlcmVkXHJcbiAgICogICAgICAgICAgICAgICAgICAgIHN0YWxlIGJ1dCBjYW4gc3RpbGwgYmUgdXNlZCB3aGlsZSByZXZhbGlkYXRpb24gb2NjdXJzIGluIHRoZSBiYWNrZ3JvdW5kLiBEZWZhdWx0cyB0byAxIGhvdXIuXHJcbiAgICogQHBhcmFtIGNsZWFudXBPcHQgLSBPcHRpb25zIGZvciBjb25maWd1cmluZyB0aGUgY2FjaGUgY2xlYW51cCBzdHJhdGVneS4gIERlZmF1bHRzIHRvIExSVSB3aXRoIGFcclxuICAgKiAgICAgICAgICAgICAgICAgICAgIGBtYXhTaXplYCBvZiAyMDAgYW5kIGEgYGNoZWNrSW50ZXJ2YWxgIG9mIG9uZSBob3VyLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHR0bDogbnVtYmVyID0gT05FX0RBWSxcclxuICAgIHByb3RlY3RlZCByZWFkb25seSBzdGFsZVRpbWU6IG51bWJlciA9IE9ORV9IT1VSLFxyXG4gICAgY2xlYW51cE9wdDogUGFydGlhbDxDbGVhbnVwVHlwZT4gPSB7XHJcbiAgICAgIHR5cGU6ICdscnUnLFxyXG4gICAgICBtYXhTaXplOiAxMDAwLFxyXG4gICAgICBjaGVja0ludGVydmFsOiBPTkVfSE9VUixcclxuICAgIH0sXHJcbiAgKSB7XHJcbiAgICB0aGlzLmNsZWFudXBPcHQgPSB7XHJcbiAgICAgIC4uLkRFRkFVTFRfQ0xFQU5VUF9PUFQsXHJcbiAgICAgIC4uLmNsZWFudXBPcHQsXHJcbiAgICB9O1xyXG4gICAgaWYgKHRoaXMuY2xlYW51cE9wdC5tYXhTaXplIDw9IDApXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWF4U2l6ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwJyk7XHJcblxyXG4gICAgLy8gY2xlYW51cCBjYWNoZSBiYXNlZCBvbiBwcm92aWRlZCBvcHRpb25zIHJlZ3VsYXJseVxyXG4gICAgY29uc3QgY2xlYW51cEludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICB0aGlzLmNsZWFudXAoKTtcclxuICAgIH0sIGNsZWFudXBPcHQuY2hlY2tJbnRlcnZhbCk7XHJcblxyXG4gICAgY29uc3QgZGVzdHJveUlkID0gdjcoKTtcclxuXHJcbiAgICAvLyBjbGVhbnVwIGlmIG9iamVjdCBpcyBnYXJiYWdlIGNvbGxlY3RlZCwgdGhpcyBpcyBiZWNhdXNlIHRoZSBjYWNoZSBjYW4gYmUgcXVpdGUgbGFyZ2UgZnJvbSBhIG1lbW9yeSBzdGFuZHBvaW50ICYgd2UgZG9udCB3YW50IGFsbCB0aGF0IGZsb2F0aW5nIGdhcmJhZ2VcclxuICAgIGNvbnN0IHJlZ2lzdHJ5ID0gbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KChpZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmIChpZCA9PT0gZGVzdHJveUlkKSB7XHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbChjbGVhbnVwSW50ZXJ2YWwpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZWdpc3RyeS5yZWdpc3Rlcih0aGlzLCBkZXN0cm95SWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gIHByaXZhdGUgZ2V0SW50ZXJuYWwoXHJcbiAgICBrZXk6ICgpID0+IHN0cmluZyB8IG51bGwsXHJcbiAgKTogU2lnbmFsPChDYWNoZUVudHJ5PFQ+ICYgeyBpc1N0YWxlOiBib29sZWFuIH0pIHwgbnVsbD4ge1xyXG4gICAgY29uc3Qga2V5U2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ga2V5KCkpO1xyXG5cclxuICAgIHJldHVybiBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGtleSA9IGtleVNpZ25hbCgpO1xyXG4gICAgICBpZiAoIWtleSkgcmV0dXJuIG51bGw7XHJcbiAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5pbnRlcm5hbCgpLmdldChrZXkpO1xyXG5cclxuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcclxuXHJcbiAgICAgIGlmICghZm91bmQgfHwgZm91bmQuZXhwaXJlc0F0IDw9IG5vdykgcmV0dXJuIG51bGw7XHJcbiAgICAgIGZvdW5kLnVzZUNvdW50Kys7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uZm91bmQsXHJcbiAgICAgICAgaXNTdGFsZTogZm91bmQuc3RhbGUgPD0gbm93LFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYSBjYWNoZSBlbnRyeSB3aXRob3V0IGFmZmVjdGluZyBpdHMgdXNhZ2UgY291bnQgKGZvciBMUlUpLiAgVGhpcyBpcyBwcmltYXJpbHlcclxuICAgKiBmb3IgaW50ZXJuYWwgdXNlIG9yIGRlYnVnZ2luZy5cclxuICAgKiBAaW50ZXJuYWxcclxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gcmV0cmlldmUuXHJcbiAgICogQHJldHVybnMgVGhlIGNhY2hlIGVudHJ5LCBvciBgbnVsbGAgaWYgbm90IGZvdW5kIG9yIGV4cGlyZWQuXHJcbiAgICovXHJcbiAgZ2V0VW50cmFja2VkKGtleTogc3RyaW5nKTogKENhY2hlRW50cnk8VD4gJiB7IGlzU3RhbGU6IGJvb2xlYW4gfSkgfCBudWxsIHtcclxuICAgIHJldHVybiB1bnRyYWNrZWQodGhpcy5nZXRJbnRlcm5hbCgoKSA9PiBrZXkpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyBhIGNhY2hlIGVudHJ5IGFzIGEgc2lnbmFsLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGtleSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjYWNoZSBrZXkuIFRoZSBrZXkgaXMgYSBzaWduYWwsIGFsbG93aW5nIGZvciBkeW5hbWljIGtleXMuIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIG51bGwgdGhlIHZhbHVlIGlzIGFsc28gbnVsbC5cclxuICAgKiBAcmV0dXJucyBBIHNpZ25hbCB0aGF0IGhvbGRzIHRoZSBjYWNoZSBlbnRyeSwgb3IgYG51bGxgIGlmIG5vdCBmb3VuZCBvciBleHBpcmVkLiAgVGhlIHNpZ25hbFxyXG4gICAqICAgICAgICAgIHVwZGF0ZXMgd2hlbmV2ZXIgdGhlIGNhY2hlIGVudHJ5IGNoYW5nZXMgKGUuZy4sIGR1ZSB0byByZXZhbGlkYXRpb24gb3IgZXhwaXJhdGlvbikuXHJcbiAgICovXHJcbiAgZ2V0KFxyXG4gICAga2V5OiAoKSA9PiBzdHJpbmcgfCBudWxsLFxyXG4gICk6IFNpZ25hbDwoQ2FjaGVFbnRyeTxUPiAmIHsgaXNTdGFsZTogYm9vbGVhbiB9KSB8IG51bGw+IHtcclxuICAgIHJldHVybiB0aGlzLmdldEludGVybmFsKGtleSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9yZXMgYSB2YWx1ZSBpbiB0aGUgY2FjaGUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSB1bmRlciB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUuXHJcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHN0b3JlLlxyXG4gICAqIEBwYXJhbSBzdGFsZVRpbWUgLSAoT3B0aW9uYWwpIFRoZSBzdGFsZSB0aW1lIGZvciB0aGlzIGVudHJ5LCBpbiBtaWxsaXNlY29uZHMuIE92ZXJyaWRlcyB0aGUgZGVmYXVsdCBgc3RhbGVUaW1lYC5cclxuICAgKiBAcGFyYW0gdHRsIC0gKE9wdGlvbmFsKSBUaGUgVFRMIGZvciB0aGlzIGVudHJ5LCBpbiBtaWxsaXNlY29uZHMuIE92ZXJyaWRlcyB0aGUgZGVmYXVsdCBgdHRsYC5cclxuICAgKi9cclxuICBzdG9yZShrZXk6IHN0cmluZywgdmFsdWU6IFQsIHN0YWxlVGltZSA9IHRoaXMuc3RhbGVUaW1lLCB0dGwgPSB0aGlzLnR0bCkge1xyXG4gICAgY29uc3QgZW50cnkgPSB0aGlzLmdldFVudHJhY2tlZChrZXkpO1xyXG4gICAgaWYgKGVudHJ5KSB7XHJcbiAgICAgIGNsZWFyVGltZW91dChlbnRyeS50aW1lb3V0KTsgLy8gc3RvcCBpbnZhbGlkYXRpb25cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwcmV2Q291bnQgPSBlbnRyeT8udXNlQ291bnQgPz8gMDtcclxuXHJcbiAgICAvLyB0dGwgY2Fubm90IGJlIGxlc3MgdGhhbiBzdGFsZVRpbWVcclxuICAgIGlmICh0dGwgPCBzdGFsZVRpbWUpIHN0YWxlVGltZSA9IHR0bDtcclxuXHJcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xyXG5cclxuICAgIHRoaXMuaW50ZXJuYWwubXV0YXRlKChtYXApID0+IHtcclxuICAgICAgbWFwLnNldChrZXksIHtcclxuICAgICAgICB2YWx1ZSxcclxuICAgICAgICBjcmVhdGVkOiBlbnRyeT8uY3JlYXRlZCA/PyBub3csXHJcbiAgICAgICAgdXNlQ291bnQ6IHByZXZDb3VudCArIDEsXHJcbiAgICAgICAgc3RhbGU6IG5vdyArIHN0YWxlVGltZSxcclxuICAgICAgICBleHBpcmVzQXQ6IG5vdyArIHR0bCxcclxuICAgICAgICB0aW1lb3V0OiBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaW52YWxpZGF0ZShrZXkpLCB0dGwpLFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIG1hcDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW52YWxpZGF0ZXMgKHJlbW92ZXMpIGEgY2FjaGUgZW50cnkuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gaW52YWxpZGF0ZS5cclxuICAgKi9cclxuICBpbnZhbGlkYXRlKGtleTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBlbnRyeSA9IHRoaXMuZ2V0VW50cmFja2VkKGtleSk7XHJcbiAgICBpZiAoIWVudHJ5KSByZXR1cm47XHJcbiAgICBjbGVhclRpbWVvdXQoZW50cnkudGltZW91dCk7XHJcbiAgICB0aGlzLmludGVybmFsLm11dGF0ZSgobWFwKSA9PiB7XHJcbiAgICAgIG1hcC5kZWxldGUoa2V5KTtcclxuICAgICAgcmV0dXJuIG1hcDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gIHByaXZhdGUgY2xlYW51cCgpIHtcclxuICAgIGlmICh1bnRyYWNrZWQodGhpcy5pbnRlcm5hbCkuc2l6ZSA8PSB0aGlzLmNsZWFudXBPcHQubWF4U2l6ZSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHNvcnRlZCA9IEFycmF5LmZyb20odW50cmFja2VkKHRoaXMuaW50ZXJuYWwpLmVudHJpZXMoKSkudG9Tb3J0ZWQoXHJcbiAgICAgIChhLCBiKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2xlYW51cE9wdC50eXBlID09PSAnbHJ1Jykge1xyXG4gICAgICAgICAgcmV0dXJuIGFbMV0udXNlQ291bnQgLSBiWzFdLnVzZUNvdW50OyAvLyBsZWFzdCB1c2VkIGZpcnN0XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBhWzFdLmNyZWF0ZWQgLSBiWzFdLmNyZWF0ZWQ7IC8vIG9sZGVzdCBmaXJzdFxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qga2VlcENvdW50ID0gTWF0aC5mbG9vcih0aGlzLmNsZWFudXBPcHQubWF4U2l6ZSAvIDIpO1xyXG5cclxuICAgIGNvbnN0IHJlbW92ZWQgPSBzb3J0ZWQuc2xpY2UoMCwgc29ydGVkLmxlbmd0aCAtIGtlZXBDb3VudCk7XHJcbiAgICBjb25zdCBrZWVwID0gc29ydGVkLnNsaWNlKHJlbW92ZWQubGVuZ3RoLCBzb3J0ZWQubGVuZ3RoKTtcclxuXHJcbiAgICByZW1vdmVkLmZvckVhY2goKFssIGVdKSA9PiB7XHJcbiAgICAgIGNsZWFyVGltZW91dChlLnRpbWVvdXQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5pbnRlcm5hbC5zZXQobmV3IE1hcChrZWVwKSk7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhlIGNhY2hlLlxyXG4gKi9cclxudHlwZSBDYWNoZU9wdGlvbnMgPSB7XHJcbiAgLyoqXHJcbiAgICogVGhlIGRlZmF1bHQgVGltZSBUbyBMaXZlIChUVEwpIGZvciBjYWNoZSBlbnRyaWVzLCBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICovXHJcbiAgdHRsPzogbnVtYmVyO1xyXG4gIC8qKlxyXG4gICAqIFRoZSBkZWZhdWx0IGR1cmF0aW9uLCBpbiBtaWxsaXNlY29uZHMsIGR1cmluZyB3aGljaCBhIGNhY2hlIGVudHJ5IGlzIGNvbnNpZGVyZWRcclxuICAgKiBzdGFsZSBidXQgY2FuIHN0aWxsIGJlIHVzZWQgd2hpbGUgcmV2YWxpZGF0aW9uIG9jY3VycyBpbiB0aGUgYmFja2dyb3VuZC5cclxuICAgKi9cclxuICBzdGFsZVRpbWU/OiBudW1iZXI7XHJcbiAgLyoqXHJcbiAgICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhlIGNhY2hlIGNsZWFudXAgc3RyYXRlZ3kuXHJcbiAgICovXHJcbiAgY2xlYW51cD86IFBhcnRpYWw8Q2xlYW51cFR5cGU+O1xyXG59O1xyXG5cclxuY29uc3QgQ0xJRU5UX0NBQ0hFX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPENhY2hlPEh0dHBSZXNwb25zZTx1bmtub3duPj4+KFxyXG4gICdJTlRFUk5BTF9DTElFTlRfQ0FDSEUnLFxyXG4pO1xyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIHRoZSBpbnN0YW5jZSBvZiB0aGUgUXVlcnlDYWNoZSBmb3IgcXVlcnlSZXNvdXJjZS4gVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgY2FsbGVkXHJcbiAqIGluIHlvdXIgYXBwbGljYXRpb24ncyByb290IGNvbmZpZ3VyYXRpb24sIGJ1dCBjYW4gYWxzbyBiZSBvdmVycmlkZW4gd2l0aCBjb21wb25lbnQvbW9kdWxlIHByb3ZpZGVycy5cclxuICpcclxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBjYWNoZS5cclxuICogQHJldHVybnMgQW4gQW5ndWxhciBgUHJvdmlkZXJgIGZvciB0aGUgY2FjaGUuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIC8vIEluIHlvdXIgYXBwLmNvbmZpZy50cyBvciBBcHBNb2R1bGUgcHJvdmlkZXJzOlxyXG4gKlxyXG4gKiBpbXBvcnQgeyBwcm92aWRlUXVlcnlDYWNoZSB9IGZyb20gJy4veW91ci1jYWNoZSc7XHJcbiAqXHJcbiAqIGV4cG9ydCBjb25zdCBhcHBDb25maWc6IEFwcGxpY2F0aW9uQ29uZmlnID0ge1xyXG4gKiAgIHByb3ZpZGVyczogW1xyXG4gKiAgICAgcHJvdmlkZVF1ZXJ5Q2FjaGUoe1xyXG4gKiAgICAgICB0dGw6IDYwMDAwLCAvLyBEZWZhdWx0IFRUTCBvZiA2MCBzZWNvbmRzXHJcbiAqICAgICAgIHN0YWxlVGltZTogMzAwMDAsIC8vIERlZmF1bHQgc3RhbGVUaW1lIG9mIDMwIHNlY29uZHNcclxuICogICAgIH0pLFxyXG4gKiAgICAgLy8gLi4uIG90aGVyIHByb3ZpZGVyc1xyXG4gKiAgIF1cclxuICogfTtcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlUXVlcnlDYWNoZShvcHQ/OiBDYWNoZU9wdGlvbnMpOiBQcm92aWRlciB7XHJcbiAgcmV0dXJuIHtcclxuICAgIHByb3ZpZGU6IENMSUVOVF9DQUNIRV9UT0tFTixcclxuICAgIHVzZVZhbHVlOiBuZXcgQ2FjaGUob3B0Py50dGwsIG9wdD8uc3RhbGVUaW1lLCBvcHQ/LmNsZWFudXApLFxyXG4gIH07XHJcbn1cclxuXHJcbmNsYXNzIE5vb3BDYWNoZTxUPiBleHRlbmRzIENhY2hlPFQ+IHtcclxuICBvdmVycmlkZSBzdG9yZShfOiBzdHJpbmcsIF9fOiBULCBfX18gPSBzdXBlci5zdGFsZVRpbWUsIF9fX18gPSBzdXBlci50dGwpIHtcclxuICAgIC8vIG5vb3BcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBJbmplY3RzIHRoZSBgUXVlcnlDYWNoZWAgaW5zdGFuY2UgdGhhdCBpcyB1c2VkIHdpdGhpbiBxdWVyeVJlc291cmNlLlxyXG4gKiBBbGxvd3MgZm9yIGRpcmVjdCBtb2RpZmljYXRpb24gb2YgY2FjaGVkIGRhdGEsIGJ1dCBpcyBtb3N0bHkgbWVhbnQgZm9yIGludGVybmFsIHVzZS5cclxuICpcclxuICogQHBhcmFtIGluamVjdG9yIC0gKE9wdGlvbmFsKSBUaGUgaW5qZWN0b3IgdG8gdXNlLiAgSWYgbm90IHByb3ZpZGVkLCB0aGUgY3VycmVudFxyXG4gKiAgICAgICAgICAgICAgICAgICBpbmplY3Rpb24gY29udGV4dCBpcyB1c2VkLlxyXG4gKiBAcmV0dXJucyBUaGUgYFF1ZXJ5Q2FjaGVgIGluc3RhbmNlLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAvLyBJbiB5b3VyIGNvbXBvbmVudCBvciBzZXJ2aWNlOlxyXG4gKlxyXG4gKiBpbXBvcnQgeyBpbmplY3RRdWVyeUNhY2hlIH0gZnJvbSAnLi95b3VyLWNhY2hlJztcclxuICpcclxuICogY29uc3RydWN0b3IoKSB7XHJcbiAqICAgY29uc3QgY2FjaGUgPSBpbmplY3RRdWVyeUNhY2hlKCk7XHJcbiAqXHJcbiAqICAgY29uc3QgbXlEYXRhID0gY2FjaGUuZ2V0KCgpID0+ICdteS1kYXRhLWtleScpO1xyXG4gKiAgIGlmIChteURhdGEoKSAhPT0gbnVsbCkge1xyXG4gKiAgICAgLy8gLi4uIHVzZSBjYWNoZWQgZGF0YSAuLi5cclxuICogICB9XHJcbiAqIH1cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RRdWVyeUNhY2hlKFxyXG4gIGluamVjdG9yPzogSW5qZWN0b3IsXHJcbik6IENhY2hlPEh0dHBSZXNwb25zZTx1bmtub3duPj4ge1xyXG4gIGNvbnN0IGNhY2hlID0gaW5qZWN0b3JcclxuICAgID8gaW5qZWN0b3IuZ2V0KENMSUVOVF9DQUNIRV9UT0tFTiwgbnVsbCwge1xyXG4gICAgICAgIG9wdGlvbmFsOiB0cnVlLFxyXG4gICAgICB9KVxyXG4gICAgOiBpbmplY3QoQ0xJRU5UX0NBQ0hFX1RPS0VOLCB7XHJcbiAgICAgICAgb3B0aW9uYWw6IHRydWUsXHJcbiAgICAgIH0pO1xyXG5cclxuICBpZiAoIWNhY2hlKSB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAnQ2FjaGUgbm90IHByb3ZpZGVkLCBwbGVhc2UgYWRkIHByb3ZpZGVRdWVyeUNhY2hlKCkgdG8gcHJvdmlkZXJzIGFycmF5JyxcclxuICAgICAgKTtcclxuICAgIGVsc2UgcmV0dXJuIG5ldyBOb29wQ2FjaGUoKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBjYWNoZTtcclxufVxyXG4iXX0=","import { HttpContext, HttpContextToken, HttpResponse, } from '@angular/common/http';\nimport { map, of, tap } from 'rxjs';\nimport { injectQueryCache } from './cache';\nconst CACHE_CONTEXT = new HttpContextToken(() => ({\n cache: false,\n}));\nexport function setCacheContext(ctx = new HttpContext(), opt) {\n return ctx.set(CACHE_CONTEXT, { ...opt, cache: true });\n}\nfunction getCacheContext(ctx) {\n return ctx.get(CACHE_CONTEXT);\n}\nfunction parseCacheControlHeader(req) {\n const header = req.headers.get('Cache-Control');\n let sMaxAge = null;\n const directives = {\n noStore: false,\n noCache: false,\n mustRevalidate: false,\n immutable: false,\n maxAge: null,\n staleWhileRevalidate: null,\n };\n if (!header)\n return directives;\n const parts = header.split(',');\n for (const part of parts) {\n const [unparsedKey, value] = part.trim().split('=');\n const key = unparsedKey.trim().toLowerCase();\n switch (key) {\n case 'no-store':\n directives.noStore = true;\n break;\n case 'no-cache':\n directives.noCache = true;\n break;\n case 'must-revalidate':\n case 'proxy-revalidate':\n directives.mustRevalidate = true;\n break;\n case 'immutable':\n directives.immutable = true;\n break;\n case 'max-age': {\n if (!value)\n break;\n const parsedValue = parseInt(value, 10);\n if (!isNaN(parsedValue))\n directives.maxAge = parsedValue;\n break;\n }\n case 's-max-age': {\n if (!value)\n break;\n const parsedValue = parseInt(value, 10);\n if (!isNaN(parsedValue))\n sMaxAge = parsedValue;\n break;\n }\n case 'stale-while-revalidate': {\n if (!value)\n break;\n const parsedValue = parseInt(value, 10);\n if (!isNaN(parsedValue))\n directives.staleWhileRevalidate = parsedValue;\n break;\n }\n }\n }\n // s-max-age takes precedence over max-age\n if (sMaxAge !== null)\n directives.maxAge = sMaxAge;\n // if no store nothing else is relevant\n if (directives.noStore)\n return {\n noStore: true,\n noCache: false,\n mustRevalidate: false,\n immutable: false,\n maxAge: null,\n staleWhileRevalidate: null,\n };\n // max age does not apply to immutable resources\n if (directives.immutable)\n return {\n ...directives,\n maxAge: null,\n };\n return directives;\n}\nfunction resolveTimings(cacheControl, staleTime, ttl) {\n const timings = {\n staleTime,\n ttl,\n };\n if (cacheControl.immutable)\n return {\n staleTime: Infinity,\n ttl: Infinity,\n };\n // if no-cache is set, we must always revalidate\n if (cacheControl.noCache || cacheControl.mustRevalidate)\n timings.staleTime = 0;\n if (cacheControl.staleWhileRevalidate !== null)\n timings.staleTime = cacheControl.staleWhileRevalidate;\n if (cacheControl.maxAge !== null)\n timings.ttl = cacheControl.maxAge * 1000;\n // if stale-while-revalidate is set, we must revalidate after that time at the latest, but we can still serve the stale data\n if (cacheControl.staleWhileRevalidate !== null) {\n const ms = cacheControl.staleWhileRevalidate * 1000;\n if (timings.staleTime === undefined || timings.staleTime > ms)\n timings.staleTime = ms;\n }\n return timings;\n}\n/**\n * Creates an `HttpInterceptorFn` that implements caching for HTTP requests. This interceptor\n * checks for a caching configuration in the request's `HttpContext` (internally set by the queryResource).\n * If caching is enabled, it attempts to retrieve responses from the cache. If a cached response\n * is found and is not stale, it's returned directly. If the cached response is stale, it's returned,\n * and a background revalidation request is made. If no cached response is found, the request\n * is made to the server, and the response is cached according to the configured TTL and staleness.\n * The interceptor also respects `Cache-Control` headers from the server.\n *\n * @param allowedMethods - An array of HTTP methods for which caching should be enabled.\n * Defaults to `['GET', 'HEAD', 'OPTIONS']`.\n *\n * @returns An `HttpInterceptorFn` that implements the caching logic.\n *\n * @example\n * // In your app.config.ts or module providers:\n *\n * import { provideHttpClient, withInterceptors } from '@angular/common/http';\n * import { createCacheInterceptor } from '@mmstack/resource';\n *\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideHttpClient(withInterceptors([createCacheInterceptor()])),\n * // ... other providers\n * ],\n * };\n */\nexport function createCacheInterceptor(allowedMethods = ['GET', 'HEAD', 'OPTIONS']) {\n const CACHE_METHODS = new Set(allowedMethods);\n return (req, next) => {\n const cache = injectQueryCache();\n if (!CACHE_METHODS.has(req.method))\n return next(req);\n const opt = getCacheContext(req.context);\n if (!opt.cache)\n return next(req);\n const key = opt.key ?? req.urlWithParams;\n const entry = cache.getUntracked(key); // null if expired or not found\n // If the entry is not stale, return it\n if (entry && !entry.isStale)\n return of(entry.value);\n // resource itself handles case of showing stale data...the request must process as this will \"refresh said data\"\n const eTag = entry?.value.headers.get('ETag');\n const lastModified = entry?.value.headers.get('Last-Modified');\n if (eTag) {\n req = req.clone({ setHeaders: { 'If-None-Match': eTag } });\n }\n if (lastModified) {\n req = req.clone({ setHeaders: { 'If-Modified-Since': lastModified } });\n }\n return next(req).pipe(tap((event) => {\n if (event instanceof HttpResponse && event.ok) {\n const cacheControl = parseCacheControlHeader(event);\n if (cacheControl.noStore)\n return;\n const { staleTime, ttl } = resolveTimings(cacheControl, opt.staleTime, opt.ttl);\n cache.store(key, event, staleTime, ttl);\n }\n }), map((event) => {\n // handle 304 responses due to eTag/last-modified\n if (event instanceof HttpResponse && event.status === 304 && entry) {\n return entry.value;\n }\n return event;\n }));\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yZXNvdXJjZS9zcmMvbGliL3V0aWwvY2FjaGUvY2FjaGUuaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFdBQVcsRUFDWCxnQkFBZ0IsRUFLaEIsWUFBWSxHQUNiLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQVMzQyxNQUFNLGFBQWEsR0FBRyxJQUFJLGdCQUFnQixDQUFvQixHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLEtBQUssRUFBRSxLQUFLO0NBQ2IsQ0FBQyxDQUFDLENBQUM7QUFFSixNQUFNLFVBQVUsZUFBZSxDQUM3QixHQUFHLEdBQUcsSUFBSSxXQUFXLEVBQUUsRUFDdkIsR0FFQztJQUVELE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsR0FBZ0I7SUFDdkMsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFXRCxTQUFTLHVCQUF1QixDQUM5QixHQUEwQjtJQUUxQixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUVoRCxJQUFJLE9BQU8sR0FBa0IsSUFBSSxDQUFDO0lBQ2xDLE1BQU0sVUFBVSxHQUF5QjtRQUN2QyxPQUFPLEVBQUUsS0FBSztRQUNkLE9BQU8sRUFBRSxLQUFLO1FBQ2QsY0FBYyxFQUFFLEtBQUs7UUFDckIsU0FBUyxFQUFFLEtBQUs7UUFDaEIsTUFBTSxFQUFFLElBQUk7UUFDWixvQkFBb0IsRUFBRSxJQUFJO0tBQzNCLENBQUM7SUFFRixJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU8sVUFBVSxDQUFDO0lBRS9CLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFaEMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN6QixNQUFNLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEQsTUFBTSxHQUFHLEdBQUcsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRTdDLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDWixLQUFLLFVBQVU7Z0JBQ2IsVUFBVSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQzFCLE1BQU07WUFDUixLQUFLLFVBQVU7Z0JBQ2IsVUFBVSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQzFCLE1BQU07WUFDUixLQUFLLGlCQUFpQixDQUFDO1lBQ3ZCLEtBQUssa0JBQWtCO2dCQUNyQixVQUFVLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztnQkFDakMsTUFBTTtZQUNSLEtBQUssV0FBVztnQkFDZCxVQUFVLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztnQkFDNUIsTUFBTTtZQUNSLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDZixJQUFJLENBQUMsS0FBSztvQkFBRSxNQUFNO2dCQUNsQixNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztvQkFBRSxVQUFVLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQztnQkFDekQsTUFBTTtZQUNSLENBQUM7WUFDRCxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxLQUFLO29CQUFFLE1BQU07Z0JBQ2xCLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO29CQUFFLE9BQU8sR0FBRyxXQUFXLENBQUM7Z0JBQy9DLE1BQU07WUFDUixDQUFDO1lBQ0QsS0FBSyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxLQUFLO29CQUFFLE1BQU07Z0JBQ2xCLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO29CQUFFLFVBQVUsQ0FBQyxvQkFBb0IsR0FBRyxXQUFXLENBQUM7Z0JBQ3ZFLE1BQU07WUFDUixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsSUFBSSxPQUFPLEtBQUssSUFBSTtRQUFFLFVBQVUsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO0lBRWxELHVDQUF1QztJQUN2QyxJQUFJLFVBQVUsQ0FBQyxPQUFPO1FBQ3BCLE9BQU87WUFDTCxPQUFPLEVBQUUsSUFBSTtZQUNiLE9BQU8sRUFBRSxLQUFLO1lBQ2QsY0FBYyxFQUFFLEtBQUs7WUFDckIsU0FBUyxFQUFFLEtBQUs7WUFDaEIsTUFBTSxFQUFFLElBQUk7WUFDWixvQkFBb0IsRUFBRSxJQUFJO1NBQzNCLENBQUM7SUFFSixnREFBZ0Q7SUFDaEQsSUFBSSxVQUFVLENBQUMsU0FBUztRQUN0QixPQUFPO1lBQ0wsR0FBRyxVQUFVO1lBQ2IsTUFBTSxFQUFFLElBQUk7U0FDYixDQUFDO0lBRUosT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUNyQixZQUFrQyxFQUNsQyxTQUFrQixFQUNsQixHQUFZO0lBRVosTUFBTSxPQUFPLEdBQUc7UUFDZCxTQUFTO1FBQ1QsR0FBRztLQUNKLENBQUM7SUFFRixJQUFJLFlBQVksQ0FBQyxTQUFTO1FBQ3hCLE9BQU87WUFDTCxTQUFTLEVBQUUsUUFBUTtZQUNuQixHQUFHLEVBQUUsUUFBUTtTQUNkLENBQUM7SUFFSixnREFBZ0Q7SUFDaEQsSUFBSSxZQUFZLENBQUMsT0FBTyxJQUFJLFlBQVksQ0FBQyxjQUFjO1FBQ3JELE9BQU8sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBRXhCLElBQUksWUFBWSxDQUFDLG9CQUFvQixLQUFLLElBQUk7UUFDNUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsb0JBQW9CLENBQUM7SUFFeEQsSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLElBQUk7UUFBRSxPQUFPLENBQUMsR0FBRyxHQUFHLFlBQVksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBRTNFLDRIQUE0SDtJQUM1SCxJQUFJLFlBQVksQ0FBQyxvQkFBb0IsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUMvQyxNQUFNLEVBQUUsR0FBRyxZQUFZLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQ3BELElBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxTQUFTLElBQUksT0FBTyxDQUFDLFNBQVMsR0FBRyxFQUFFO1lBQzNELE9BQU8sQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUNwQyxjQUFjLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQztJQUUzQyxNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsQ0FBUyxjQUFjLENBQUMsQ0FBQztJQUV0RCxPQUFPLENBQ0wsR0FBeUIsRUFDekIsSUFBbUIsRUFDYSxFQUFFO1FBQ2xDLE1BQU0sS0FBSyxHQUFHLGdCQUFnQixFQUFFLENBQUM7UUFFakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFekMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsYUFBYSxDQUFDO1FBQ3pDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQywrQkFBK0I7UUFFdEUsdUNBQXVDO1FBQ3ZDLElBQUksS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU87WUFBRSxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFcEQsaUhBQWlIO1FBRWpILE1BQU0sSUFBSSxHQUFHLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QyxNQUFNLFlBQVksR0FBRyxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFL0QsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBRUQsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLG1CQUFtQixFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUNuQixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNaLElBQUksS0FBSyxZQUFZLFlBQVksSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzlDLE1BQU0sWUFBWSxHQUFHLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNwRCxJQUFJLFlBQVksQ0FBQyxPQUFPO29CQUFFLE9BQU87Z0JBRWpDLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEdBQUcsY0FBYyxDQUN2QyxZQUFZLEVBQ1osR0FBRyxDQUFDLFNBQVMsRUFDYixHQUFHLENBQUMsR0FBRyxDQUNSLENBQUM7Z0JBRUYsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMxQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDWixpREFBaUQ7WUFDakQsSUFBSSxLQUFLLFlBQVksWUFBWSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNuRSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDckIsQ0FBQztZQUVELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEh0dHBDb250ZXh0LFxyXG4gIEh0dHBDb250ZXh0VG9rZW4sXHJcbiAgdHlwZSBIdHRwRXZlbnQsXHJcbiAgdHlwZSBIdHRwSGFuZGxlckZuLFxyXG4gIHR5cGUgSHR0cEludGVyY2VwdG9yRm4sXHJcbiAgdHlwZSBIdHRwUmVxdWVzdCxcclxuICBIdHRwUmVzcG9uc2UsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUsIG9mLCB0YXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgaW5qZWN0UXVlcnlDYWNoZSB9IGZyb20gJy4vY2FjaGUnO1xyXG5cclxudHlwZSBDYWNoZUVudHJ5T3B0aW9ucyA9IHtcclxuICBrZXk/OiBzdHJpbmc7XHJcbiAgdHRsPzogbnVtYmVyO1xyXG4gIHN0YWxlVGltZT86IG51bWJlcjtcclxuICBjYWNoZTogYm9vbGVhbjtcclxufTtcclxuXHJcbmNvbnN0IENBQ0hFX0NPTlRFWFQgPSBuZXcgSHR0cENvbnRleHRUb2tlbjxDYWNoZUVudHJ5T3B0aW9ucz4oKCkgPT4gKHtcclxuICBjYWNoZTogZmFsc2UsXHJcbn0pKTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRDYWNoZUNvbnRleHQoXHJcbiAgY3R4ID0gbmV3IEh0dHBDb250ZXh0KCksXHJcbiAgb3B0OiBPbWl0PENhY2hlRW50cnlPcHRpb25zLCAnY2FjaGUnIHwgJ2tleSc+ICYge1xyXG4gICAga2V5OiBSZXF1aXJlZDxDYWNoZUVudHJ5T3B0aW9ucz5bJ2tleSddO1xyXG4gIH0sXHJcbikge1xyXG4gIHJldHVybiBjdHguc2V0KENBQ0hFX0NPTlRFWFQsIHsgLi4ub3B0LCBjYWNoZTogdHJ1ZSB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Q2FjaGVDb250ZXh0KGN0eDogSHR0cENvbnRleHQpOiBDYWNoZUVudHJ5T3B0aW9ucyB7XHJcbiAgcmV0dXJuIGN0eC5nZXQoQ0FDSEVfQ09OVEVYVCk7XHJcbn1cclxuXHJcbnR5cGUgUmVzb2x2ZWRDYWNoZUNvbnRyb2wgPSB7XHJcbiAgbm9TdG9yZTogYm9vbGVhbjtcclxuICBub0NhY2hlOiBib29sZWFuO1xyXG4gIG11c3RSZXZhbGlkYXRlOiBib29sZWFuO1xyXG4gIGltbXV0YWJsZTogYm9vbGVhbjtcclxuICBtYXhBZ2U6IG51bWJlciB8IG51bGw7XHJcbiAgc3RhbGVXaGlsZVJldmFsaWRhdGU6IG51bWJlciB8IG51bGw7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBwYXJzZUNhY2hlQ29udHJvbEhlYWRlcihcclxuICByZXE6IEh0dHBSZXNwb25zZTx1bmtub3duPixcclxuKTogUmVzb2x2ZWRDYWNoZUNvbnRyb2wge1xyXG4gIGNvbnN0IGhlYWRlciA9IHJlcS5oZWFkZXJzLmdldCgnQ2FjaGUtQ29udHJvbCcpO1xyXG5cclxuICBsZXQgc01heEFnZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgY29uc3QgZGlyZWN0aXZlczogUmVzb2x2ZWRDYWNoZUNvbnRyb2wgPSB7XHJcbiAgICBub1N0b3JlOiBmYWxzZSxcclxuICAgIG5vQ2FjaGU6IGZhbHNlLFxyXG4gICAgbXVzdFJldmFsaWRhdGU6IGZhbHNlLFxyXG4gICAgaW1tdXRhYmxlOiBmYWxzZSxcclxuICAgIG1heEFnZTogbnVsbCxcclxuICAgIHN0YWxlV2hpbGVSZXZhbGlkYXRlOiBudWxsLFxyXG4gIH07XHJcblxyXG4gIGlmICghaGVhZGVyKSByZXR1cm4gZGlyZWN0aXZlcztcclxuXHJcbiAgY29uc3QgcGFydHMgPSBoZWFkZXIuc3BsaXQoJywnKTtcclxuXHJcbiAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XHJcbiAgICBjb25zdCBbdW5wYXJzZWRLZXksIHZhbHVlXSA9IHBhcnQudHJpbSgpLnNwbGl0KCc9Jyk7XHJcbiAgICBjb25zdCBrZXkgPSB1bnBhcnNlZEtleS50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICBzd2l0Y2ggKGtleSkge1xyXG4gICAgICBjYXNlICduby1zdG9yZSc6XHJcbiAgICAgICAgZGlyZWN0aXZlcy5ub1N0b3JlID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnbm8tY2FjaGUnOlxyXG4gICAgICAgIGRpcmVjdGl2ZXMubm9DYWNoZSA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ211c3QtcmV2YWxpZGF0ZSc6XHJcbiAgICAgIGNhc2UgJ3Byb3h5LXJldmFsaWRhdGUnOlxyXG4gICAgICAgIGRpcmVjdGl2ZXMubXVzdFJldmFsaWRhdGUgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdpbW11dGFibGUnOlxyXG4gICAgICAgIGRpcmVjdGl2ZXMuaW1tdXRhYmxlID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnbWF4LWFnZSc6IHtcclxuICAgICAgICBpZiAoIXZhbHVlKSBicmVhaztcclxuICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XHJcbiAgICAgICAgaWYgKCFpc05hTihwYXJzZWRWYWx1ZSkpIGRpcmVjdGl2ZXMubWF4QWdlID0gcGFyc2VkVmFsdWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAncy1tYXgtYWdlJzoge1xyXG4gICAgICAgIGlmICghdmFsdWUpIGJyZWFrO1xyXG4gICAgICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcclxuICAgICAgICBpZiAoIWlzTmFOKHBhcnNlZFZhbHVlKSkgc01heEFnZSA9IHBhcnNlZFZhbHVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ3N0YWxlLXdoaWxlLXJldmFsaWRhdGUnOiB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkgYnJlYWs7XHJcbiAgICAgICAgY29uc3QgcGFyc2VkVmFsdWUgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xyXG4gICAgICAgIGlmICghaXNOYU4ocGFyc2VkVmFsdWUpKSBkaXJlY3RpdmVzLnN0YWxlV2hpbGVSZXZhbGlkYXRlID0gcGFyc2VkVmFsdWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIHMtbWF4LWFnZSB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgbWF4LWFnZVxyXG4gIGlmIChzTWF4QWdlICE9PSBudWxsKSBkaXJlY3RpdmVzLm1heEFnZSA9IHNNYXhBZ2U7XHJcblxyXG4gIC8vIGlmIG5vIHN0b3JlIG5vdGhpbmcgZWxzZSBpcyByZWxldmFudFxyXG4gIGlmIChkaXJlY3RpdmVzLm5vU3RvcmUpXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBub1N0b3JlOiB0cnVlLFxyXG4gICAgICBub0NhY2hlOiBmYWxzZSxcclxuICAgICAgbXVzdFJldmFsaWRhdGU6IGZhbHNlLFxyXG4gICAgICBpbW11dGFibGU6IGZhbHNlLFxyXG4gICAgICBtYXhBZ2U6IG51bGwsXHJcbiAgICAgIHN0YWxlV2hpbGVSZXZhbGlkYXRlOiBudWxsLFxyXG4gICAgfTtcclxuXHJcbiAgLy8gbWF4IGFnZSBkb2VzIG5vdCBhcHBseSB0byBpbW11dGFibGUgcmVzb3VyY2VzXHJcbiAgaWYgKGRpcmVjdGl2ZXMuaW1tdXRhYmxlKVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLi4uZGlyZWN0aXZlcyxcclxuICAgICAgbWF4QWdlOiBudWxsLFxyXG4gICAgfTtcclxuXHJcbiAgcmV0dXJuIGRpcmVjdGl2ZXM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlc29sdmVUaW1pbmdzKFxyXG4gIGNhY2hlQ29udHJvbDogUmVzb2x2ZWRDYWNoZUNvbnRyb2wsXHJcbiAgc3RhbGVUaW1lPzogbnVtYmVyLFxyXG4gIHR0bD86IG51bWJlcixcclxuKTogeyBzdGFsZVRpbWU/OiBudW1iZXI7IHR0bD86IG51bWJlciB9IHtcclxuICBjb25zdCB0aW1pbmdzID0ge1xyXG4gICAgc3RhbGVUaW1lLFxyXG4gICAgdHRsLFxyXG4gIH07XHJcblxyXG4gIGlmIChjYWNoZUNvbnRyb2wuaW1tdXRhYmxlKVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc3RhbGVUaW1lOiBJbmZpbml0eSxcclxuICAgICAgdHRsOiBJbmZpbml0eSxcclxuICAgIH07XHJcblxyXG4gIC8vIGlmIG5vLWNhY2hlIGlzIHNldCwgd2UgbXVzdCBhbHdheXMgcmV2YWxpZGF0ZVxyXG4gIGlmIChjYWNoZUNvbnRyb2wubm9DYWNoZSB8fCBjYWNoZUNvbnRyb2wubXVzdFJldmFsaWRhdGUpXHJcbiAgICB0aW1pbmdzLnN0YWxlVGltZSA9IDA7XHJcblxyXG4gIGlmIChjYWNoZUNvbnRyb2wuc3RhbGVXaGlsZVJldmFsaWRhdGUgIT09IG51bGwpXHJcbiAgICB0aW1pbmdzLnN0YWxlVGltZSA9IGNhY2hlQ29udHJvbC5zdGFsZVdoaWxlUmV2YWxpZGF0ZTtcclxuXHJcbiAgaWYgKGNhY2hlQ29udHJvbC5tYXhBZ2UgIT09IG51bGwpIHRpbWluZ3MudHRsID0gY2FjaGVDb250cm9sLm1heEFnZSAqIDEwMDA7XHJcblxyXG4gIC8vIGlmIHN0YWxlLXdoaWxlLXJldmFsaWRhdGUgaXMgc2V0LCB3ZSBtdXN0IHJldmFsaWRhdGUgYWZ0ZXIgdGhhdCB0aW1lIGF0IHRoZSBsYXRlc3QsIGJ1dCB3ZSBjYW4gc3RpbGwgc2VydmUgdGhlIHN0YWxlIGRhdGFcclxuICBpZiAoY2FjaGVDb250cm9sLnN0YWxlV2hpbGVSZXZhbGlkYXRlICE9PSBudWxsKSB7XHJcbiAgICBjb25zdCBtcyA9IGNhY2hlQ29udHJvbC5zdGFsZVdoaWxlUmV2YWxpZGF0ZSAqIDEwMDA7XHJcbiAgICBpZiAodGltaW5ncy5zdGFsZVRpbWUgPT09IHVuZGVmaW5lZCB8fCB0aW1pbmdzLnN0YWxlVGltZSA+IG1zKVxyXG4gICAgICB0aW1pbmdzLnN0YWxlVGltZSA9IG1zO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRpbWluZ3M7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGFuIGBIdHRwSW50ZXJjZXB0b3JGbmAgdGhhdCBpbXBsZW1lbnRzIGNhY2hpbmcgZm9yIEhUVFAgcmVxdWVzdHMuIFRoaXMgaW50ZXJjZXB0b3JcclxuICogY2hlY2tzIGZvciBhIGNhY2hpbmcgY29uZmlndXJhdGlvbiBpbiB0aGUgcmVxdWVzdCdzIGBIdHRwQ29udGV4dGAgKGludGVybmFsbHkgc2V0IGJ5IHRoZSBxdWVyeVJlc291cmNlKS5cclxuICogSWYgY2FjaGluZyBpcyBlbmFibGVkLCBpdCBhdHRlbXB0cyB0byByZXRyaWV2ZSByZXNwb25zZXMgZnJvbSB0aGUgY2FjaGUuIElmIGEgY2FjaGVkIHJlc3BvbnNlXHJcbiAqIGlzIGZvdW5kIGFuZCBpcyBub3Qgc3RhbGUsIGl0J3MgcmV0dXJuZWQgZGlyZWN0bHkuICBJZiB0aGUgY2FjaGVkIHJlc3BvbnNlIGlzIHN0YWxlLCBpdCdzIHJldHVybmVkLFxyXG4gKiBhbmQgYSBiYWNrZ3JvdW5kIHJldmFsaWRhdGlvbiByZXF1ZXN0IGlzIG1hZGUuICBJZiBubyBjYWNoZWQgcmVzcG9uc2UgaXMgZm91bmQsIHRoZSByZXF1ZXN0XHJcbiAqIGlzIG1hZGUgdG8gdGhlIHNlcnZlciwgYW5kIHRoZSByZXNwb25zZSBpcyBjYWNoZWQgYWNjb3JkaW5nIHRvIHRoZSBjb25maWd1cmVkIFRUTCBhbmQgc3RhbGVuZXNzLlxyXG4gKiBUaGUgaW50ZXJjZXB0b3IgYWxzbyByZXNwZWN0cyBgQ2FjaGUtQ29udHJvbGAgaGVhZGVycyBmcm9tIHRoZSBzZXJ2ZXIuXHJcbiAqXHJcbiAqIEBwYXJhbSBhbGxvd2VkTWV0aG9kcyAtIEFuIGFycmF5IG9mIEhUVFAgbWV0aG9kcyBmb3Igd2hpY2ggY2FjaGluZyBzaG91bGQgYmUgZW5hYmxlZC5cclxuICogICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byBgWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJ11gLlxyXG4gKlxyXG4gKiBAcmV0dXJucyBBbiBgSHR0cEludGVyY2VwdG9yRm5gIHRoYXQgaW1wbGVtZW50cyB0aGUgY2FjaGluZyBsb2dpYy5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogLy8gSW4geW91ciBhcHAuY29uZmlnLnRzIG9yIG1vZHVsZSBwcm92aWRlcnM6XHJcbiAqXHJcbiAqIGltcG9ydCB7IHByb3ZpZGVIdHRwQ2xpZW50LCB3aXRoSW50ZXJjZXB0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG4gKiBpbXBvcnQgeyBjcmVhdGVDYWNoZUludGVyY2VwdG9yIH0gZnJvbSAnQG1tc3RhY2svcmVzb3VyY2UnO1xyXG4gKlxyXG4gKiBleHBvcnQgY29uc3QgYXBwQ29uZmlnOiBBcHBsaWNhdGlvbkNvbmZpZyA9IHtcclxuICogICBwcm92aWRlcnM6IFtcclxuICogICAgIHByb3ZpZGVIdHRwQ2xpZW50KHdpdGhJbnRlcmNlcHRvcnMoW2NyZWF0ZUNhY2hlSW50ZXJjZXB0b3IoKV0pKSxcclxuICogICAgIC8vIC4uLiBvdGhlciBwcm92aWRlcnNcclxuICogICBdLFxyXG4gKiB9O1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhY2hlSW50ZXJjZXB0b3IoXHJcbiAgYWxsb3dlZE1ldGhvZHMgPSBbJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnXSxcclxuKTogSHR0cEludGVyY2VwdG9yRm4ge1xyXG4gIGNvbnN0IENBQ0hFX01FVEhPRFMgPSBuZXcgU2V0PHN0cmluZz4oYWxsb3dlZE1ldGhvZHMpO1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgcmVxOiBIdHRwUmVxdWVzdDx1bmtub3duPixcclxuICAgIG5leHQ6IEh0dHBIYW5kbGVyRm4sXHJcbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8dW5rbm93bj4+ID0+IHtcclxuICAgIGNvbnN0IGNhY2hlID0gaW5qZWN0UXVlcnlDYWNoZSgpO1xyXG5cclxuICAgIGlmICghQ0FDSEVfTUVUSE9EUy5oYXMocmVxLm1ldGhvZCkpIHJldHVybiBuZXh0KHJlcSk7XHJcbiAgICBjb25zdCBvcHQgPSBnZXRDYWNoZUNvbnRleHQocmVxLmNvbnRleHQpO1xyXG5cclxuICAgIGlmICghb3B0LmNhY2hlKSByZXR1cm4gbmV4dChyZXEpO1xyXG5cclxuICAgIGNvbnN0IGtleSA9IG9wdC5rZXkgPz8gcmVxLnVybFdpdGhQYXJhbXM7XHJcbiAgICBjb25zdCBlbnRyeSA9IGNhY2hlLmdldFVudHJhY2tlZChrZXkpOyAvLyBudWxsIGlmIGV4cGlyZWQgb3Igbm90IGZvdW5kXHJcblxyXG4gICAgLy8gSWYgdGhlIGVudHJ5IGlzIG5vdCBzdGFsZSwgcmV0dXJuIGl0XHJcbiAgICBpZiAoZW50cnkgJiYgIWVudHJ5LmlzU3RhbGUpIHJldHVybiBvZihlbnRyeS52YWx1ZSk7XHJcblxyXG4gICAgLy8gcmVzb3VyY2UgaXRzZWxmIGhhbmRsZXMgY2FzZSBvZiBzaG93aW5nIHN0YWxlIGRhdGEuLi50aGUgcmVxdWVzdCBtdXN0IHByb2Nlc3MgYXMgdGhpcyB3aWxsIFwicmVmcmVzaCBzYWlkIGRhdGFcIlxyXG5cclxuICAgIGNvbnN0IGVUYWcgPSBlbnRyeT8udmFsdWUuaGVhZGVycy5nZXQoJ0VUYWcnKTtcclxuICAgIGNvbnN0IGxhc3RNb2RpZmllZCA9IGVudHJ5Py52YWx1ZS5oZWFkZXJzLmdldCgnTGFzdC1Nb2RpZmllZCcpO1xyXG5cclxuICAgIGlmIChlVGFnKSB7XHJcbiAgICAgIHJlcSA9IHJlcS5jbG9uZSh7IHNldEhlYWRlcnM6IHsgJ0lmLU5vbmUtTWF0Y2gnOiBlVGFnIH0gfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGxhc3RNb2RpZmllZCkge1xyXG4gICAgICByZXEgPSByZXEuY2xvbmUoeyBzZXRIZWFkZXJzOiB7ICdJZi1Nb2RpZmllZC1TaW5jZSc6IGxhc3RNb2RpZmllZCB9IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXh0KHJlcSkucGlwZShcclxuICAgICAgdGFwKChldmVudCkgPT4ge1xyXG4gICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSAmJiBldmVudC5vaykge1xyXG4gICAgICAgICAgY29uc3QgY2FjaGVDb250cm9sID0gcGFyc2VDYWNoZUNvbnRyb2xIZWFkZXIoZXZlbnQpO1xyXG4gICAgICAgICAgaWYgKGNhY2hlQ29udHJvbC5ub1N0b3JlKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgY29uc3QgeyBzdGFsZVRpbWUsIHR0bCB9ID0gcmVzb2x2ZVRpbWluZ3MoXHJcbiAgICAgICAgICAgIGNhY2hlQ29udHJvbCxcclxuICAgICAgICAgICAgb3B0LnN0YWxlVGltZSxcclxuICAgICAgICAgICAgb3B0LnR0bCxcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgY2FjaGUuc3RvcmUoa2V5LCBldmVudCwgc3RhbGVUaW1lLCB0dGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIG1hcCgoZXZlbnQpID0+IHtcclxuICAgICAgICAvLyBoYW5kbGUgMzA0IHJlc3BvbnNlcyBkdWUgdG8gZVRhZy9sYXN0LW1vZGlmaWVkXHJcbiAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlICYmIGV2ZW50LnN0YXR1cyA9PT0gMzA0ICYmIGVudHJ5KSB7XHJcbiAgICAgICAgICByZXR1cm4gZW50cnkudmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZXZlbnQ7XHJcbiAgICAgIH0pLFxyXG4gICAgKTtcclxuICB9O1xyXG59XHJcbiJdfQ==","import { computed, effect, signal, untracked } from '@angular/core';\n/** @internal */\nfunction internalCeateCircuitBreaker(treshold = 5, resetTimeout = 30000) {\n const halfOpen = signal(false);\n const failureCount = signal(0);\n const status = computed(() => {\n if (failureCount() >= treshold)\n return 'CLOSED';\n return halfOpen() ? 'HALF_OPEN' : 'OPEN';\n });\n const isClosed = computed(() => status() === 'CLOSED');\n const success = () => {\n failureCount.set(0);\n halfOpen.set(false);\n };\n const tryOnce = () => {\n if (!untracked(isClosed))\n return;\n halfOpen.set(true);\n failureCount.set(treshold - 1);\n };\n const effectRef = effect((cleanup) => {\n if (!isClosed())\n return;\n const timeout = setTimeout(tryOnce, resetTimeout);\n return cleanup(() => clearTimeout(timeout));\n });\n const fail = () => {\n failureCount.set(failureCount() + 1);\n halfOpen.set(false);\n };\n return {\n status,\n isClosed,\n fail,\n success,\n halfOpen: tryOnce,\n destroy: () => effectRef.destroy(),\n };\n}\n/** @internal */\nfunction createNeverBrokenCircuitBreaker() {\n return {\n isClosed: computed(() => false),\n status: signal('OPEN'),\n fail: () => {\n // noop\n },\n success: () => {\n // noop\n },\n halfOpen: () => {\n // noop\n },\n destroy: () => {\n // noop\n },\n };\n}\n/**\n * Creates a circuit breaker instance.\n *\n * @param options - Configuration options for the circuit breaker. Can be:\n * - `undefined`: Creates a \"no-op\" circuit breaker that is always open (never trips).\n * - `true`: Creates a circuit breaker with default settings (threshold: 5, timeout: 30000ms).\n * - `CircuitBreaker`: Reuses an existing `CircuitBreaker` instance.\n * - `{ threshold?: number; timeout?: number; }`: Creates a circuit breaker with the specified threshold and timeout.\n *\n * @returns A `CircuitBreaker` instance.\n *\n * @example\n * // Create a circuit breaker with default settings:\n * const breaker = createCircuitBreaker();\n *\n * // Create a circuit breaker with custom settings:\n * const customBreaker = createCircuitBreaker({ threshold: 10, timeout: 60000 });\n *\n * // Share a single circuit breaker instance across multiple resources:\n * const sharedBreaker = createCircuitBreaker();\n * const resource1 = queryResource(..., { circuitBreaker: sharedBreaker });\n * const resource2 = mutationResource(..., { circuitBreaker: sharedBreaker });\n */\nexport function createCircuitBreaker(opt) {\n if (opt === false)\n return createNeverBrokenCircuitBreaker();\n if (typeof opt === 'object' && 'isClosed' in opt)\n return opt;\n return internalCeateCircuitBreaker(opt?.treshold, opt?.timeout);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2lyY3VpdC1icmVha2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcmVzb3VyY2Uvc3JjL2xpYi91dGlsL2NpcmN1aXQtYnJlYWtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBcUQ1RSxnQkFBZ0I7QUFDaEIsU0FBUywyQkFBMkIsQ0FDbEMsUUFBUSxHQUFHLENBQUMsRUFDWixZQUFZLEdBQUcsS0FBSztJQUVwQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRS9CLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBc0IsR0FBRyxFQUFFO1FBQ2hELElBQUksWUFBWSxFQUFFLElBQUksUUFBUTtZQUFFLE9BQU8sUUFBUSxDQUFDO1FBQ2hELE9BQU8sUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzNDLENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDO0lBRXZELE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRTtRQUNuQixZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEIsQ0FBQyxDQUFDO0lBRUYsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFO1FBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO1lBQUUsT0FBTztRQUNqQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25CLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUMsQ0FBQztJQUVGLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQ25DLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFBRSxPQUFPO1FBRXhCLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFFbEQsT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLElBQUksR0FBRyxHQUFHLEVBQUU7UUFDaEIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNyQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RCLENBQUMsQ0FBQztJQUVGLE9BQU87UUFDTCxNQUFNO1FBQ04sUUFBUTtRQUNSLElBQUk7UUFDSixPQUFPO1FBQ1AsUUFBUSxFQUFFLE9BQU87UUFDakIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUU7S0FDbkMsQ0FBQztBQUNKLENBQUM7QUFFRCxnQkFBZ0I7QUFDaEIsU0FBUywrQkFBK0I7SUFDdEMsT0FBTztRQUNMLFFBQVEsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQy9CLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3RCLElBQUksRUFBRSxHQUFHLEVBQUU7WUFDVCxPQUFPO1FBQ1QsQ0FBQztRQUNELE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDWixPQUFPO1FBQ1QsQ0FBQztRQUNELFFBQVEsRUFBRSxHQUFHLEVBQUU7WUFDYixPQUFPO1FBQ1QsQ0FBQztRQUNELE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDWixPQUFPO1FBQ1QsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLEdBQTJCO0lBRTNCLElBQUksR0FBRyxLQUFLLEtBQUs7UUFBRSxPQUFPLCtCQUErQixFQUFFLENBQUM7SUFFNUQsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksVUFBVSxJQUFJLEdBQUc7UUFBRSxPQUFPLEdBQUcsQ0FBQztJQUU3RCxPQUFPLDJCQUEyQixDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2xFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgZWZmZWN0LCBTaWduYWwsIHNpZ25hbCwgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG4vKipcclxuICogUmVwcmVzZW50cyB0aGUgcG9zc2libGUgc3RhdGVzIG9mIGEgY2lyY3VpdCBicmVha2VyLlxyXG4gKiAtIGBDTE9TRURgOiBUaGUgY2lyY3VpdCBicmVha2VyIGlzIGNsb3NlZCwgYW5kIG9wZXJhdGlvbnMgYXJlIGFsbG93ZWQgdG8gcHJvY2VlZC5cclxuICogLSBgT1BFTmA6IFRoZSBjaXJjdWl0IGJyZWFrZXIgaXMgb3BlbiwgYW5kIG9wZXJhdGlvbnMgYXJlIGJsb2NrZWQuXHJcbiAqIC0gYEhBTEZfT1BFTmA6IFRoZSBjaXJjdWl0IGJyZWFrZXIgaXMgaW4gYSBoYWxmLW9wZW4gc3RhdGUsIGFsbG93aW5nIGEgbGltaXRlZCBudW1iZXIgb2Ygb3BlcmF0aW9ucyB0byB0ZXN0IGlmIHRoZSB1bmRlcmx5aW5nIGlzc3VlIGlzIHJlc29sdmVkLlxyXG4gKi9cclxudHlwZSBDaXJjdWl0QnJlYWtlclN0YXRlID0gJ0NMT1NFRCcgfCAnT1BFTicgfCAnSEFMRl9PUEVOJztcclxuXHJcbi8qKlxyXG4gKiBSZXByZXNlbnRzIGEgY2lyY3VpdCBicmVha2VyLCB3aGljaCBtb25pdG9ycyBvcGVyYXRpb25zIGFuZCBwcmV2ZW50cyBmYWlsdXJlcyBmcm9tIGNhc2NhZGluZy5cclxuICovXHJcbmV4cG9ydCB0eXBlIENpcmN1aXRCcmVha2VyID0ge1xyXG4gIC8qKlxyXG4gICAqIEEgc2lnbmFsIGluZGljYXRpbmcgd2hldGhlciB0aGUgY2lyY3VpdCBicmVha2VyIGlzIGN1cnJlbnRseSBjbG9zZWQgKGFsbG93aW5nIG9wZXJhdGlvbnMpLlxyXG4gICAqL1xyXG4gIGlzQ2xvc2VkOiBTaWduYWw8Ym9vbGVhbj47XHJcbiAgLyoqXHJcbiAgICogQSBzaWduYWwgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBjaXJjdWl0IGJyZWFrZXIuXHJcbiAgICovXHJcbiAgc3RhdHVzOiBTaWduYWw8Q2lyY3VpdEJyZWFrZXJTdGF0ZT47XHJcbiAgLyoqXHJcbiAgICogU2lnbmFscyBhIGZhaWx1cmUgdG8gdGhlIGNpcmN1aXQgYnJlYWtlci4gIFRoaXMgbWF5IGNhdXNlIHRoZSBjaXJjdWl0IGJyZWFrZXIgdG8gb3Blbi5cclxuICAgKi9cclxuICBmYWlsOiAoKSA9PiB2b2lkO1xyXG4gIC8qKlxyXG4gICAqIFNpZ25hbHMgYSBzdWNjZXNzIHRvIHRoZSBjaXJjdWl0IGJyZWFrZXIuICBUaGlzIG1heSBjYXVzZSB0aGUgY2lyY3VpdCBicmVha2VyIHRvIGNsb3NlLlxyXG4gICAqL1xyXG4gIHN1Y2Nlc3M6ICgpID0+IHZvaWQ7XHJcbiAgLyoqXHJcbiAgICogQXR0ZW1wdHMgdG8gdHJhbnNpdGlvbiB0aGUgY2lyY3VpdCBicmVha2VyIHRvIHRoZSBoYWxmLW9wZW4gc3RhdGUuIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWRcclxuICAgKiB0byB0ZXN0IGlmIHRoZSB1bmRlcmx5aW5nIGlzc3VlIGhhcyBiZWVuIHJlc29sdmVkIGFmdGVyIHRoZSBjaXJjdWl0IGJyZWFrZXIgaGFzIGJlZW4gb3Blbi5cclxuICAgKi9cclxuICBoYWxmT3BlbjogKCkgPT4gdm9pZDtcclxuICAvKipcclxuICAgKiBEZXN0cm95cyB0aGUgY2lyY3VpdCBicmVha2VyICYgaW5pdGlhdGVzIHJlbGF0ZWQgY2xlYW51cFxyXG4gICAqL1xyXG4gIGRlc3Ryb3k6ICgpID0+IHZvaWQ7XHJcbn07XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgY3JlYXRpbmcgYSBjaXJjdWl0IGJyZWFrZXIuXHJcbiAqICAtIGBmYWxzZWA6IERpc2FibGVzIGNpcmN1aXQgYnJlYWtlciBmdW5jdGlvbmFsaXR5IChhbHdheXMgb3BlbikuXHJcbiAqICAtIHRydWU6IENyZWF0ZXMgYSBuZXcgY2lyY3VpdCBicmVha2VyIHdpdGggZGVmYXVsdCBvcHRpb25zLlxyXG4gKiAgLSBgQ2lyY3VpdEJyZWFrZXJgOiBQcm92aWRlcyBhbiBleGlzdGluZyBgQ2lyY3VpdEJyZWFrZXJgIGluc3RhbmNlIHRvIHVzZS5cclxuICogIC0gYHsgdHJlc2hvbGQ/OiBudW1iZXI7IHRpbWVvdXQ/OiBudW1iZXI7IH1gOiBDcmVhdGVzIGEgbmV3IGNpcmN1aXQgYnJlYWtlciB3aXRoIHRoZSBzcGVjaWZpZWQgb3B0aW9ucy5cclxuICovXHJcbmV4cG9ydCB0eXBlIENpcmN1aXRCcmVha2VyT3B0aW9ucyA9XHJcbiAgfCBmYWxzZVxyXG4gIHwgQ2lyY3VpdEJyZWFrZXJcclxuICB8IHsgdHJlc2hvbGQ/OiBudW1iZXI7IHRpbWVvdXQ/OiBudW1iZXIgfTtcclxuXHJcbi8qKiBAaW50ZXJuYWwgKi9cclxuZnVuY3Rpb24gaW50ZXJuYWxDZWF0ZUNpcmN1aXRCcmVha2VyKFxyXG4gIHRyZXNob2xkID0gNSxcclxuICByZXNldFRpbWVvdXQgPSAzMDAwMCxcclxuKTogQ2lyY3VpdEJyZWFrZXIge1xyXG4gIGNvbnN0IGhhbGZPcGVuID0gc2lnbmFsKGZhbHNlKTtcclxuICBjb25zdCBmYWlsdXJlQ291bnQgPSBzaWduYWwoMCk7XHJcblxyXG4gIGNvbnN0IHN0YXR1cyA9IGNvbXB1dGVkPENpcmN1aXRCcmVha2VyU3RhdGU+KCgpID0+IHtcclxuICAgIGlmIChmYWlsdXJlQ291bnQoKSA+PSB0cmVzaG9sZCkgcmV0dXJuICdDTE9TRUQnO1xyXG4gICAgcmV0dXJuIGhhbGZPcGVuKCkgPyAnSEFMRl9PUEVOJyA6ICdPUEVOJztcclxuICB9KTtcclxuXHJcbiAgY29uc3QgaXNDbG9zZWQgPSBjb21wdXRlZCgoKSA9PiBzdGF0dXMoKSA9PT0gJ0NMT1NFRCcpO1xyXG5cclxuICBjb25zdCBzdWNjZXNzID0gKCkgPT4ge1xyXG4gICAgZmFpbHVyZUNvdW50LnNldCgwKTtcclxuICAgIGhhbGZPcGVuLnNldChmYWxzZSk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgdHJ5T25jZSA9ICgpID0+IHtcclxuICAgIGlmICghdW50cmFja2VkKGlzQ2xvc2VkKSkgcmV0dXJuO1xyXG4gICAgaGFsZk9wZW4uc2V0KHRydWUpO1xyXG4gICAgZmFpbHVyZUNvdW50LnNldCh0cmVzaG9sZCAtIDEpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IGVmZmVjdFJlZiA9IGVmZmVjdCgoY2xlYW51cCkgPT4ge1xyXG4gICAgaWYgKCFpc0Nsb3NlZCgpKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQodHJ5T25jZSwgcmVzZXRUaW1lb3V0KTtcclxuXHJcbiAgICByZXR1cm4gY2xlYW51cCgoKSA9PiBjbGVhclRpbWVvdXQodGltZW91dCkpO1xyXG4gIH0pO1xyXG5cclxuICBjb25zdCBmYWlsID0gKCkgPT4ge1xyXG4gICAgZmFpbHVyZUNvdW50LnNldChmYWlsdXJlQ291bnQoKSArIDEpO1xyXG4gICAgaGFsZk9wZW4uc2V0KGZhbHNlKTtcclxuICB9O1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgc3RhdHVzLFxyXG4gICAgaXNDbG9zZWQsXHJcbiAgICBmYWlsLFxyXG4gICAgc3VjY2VzcyxcclxuICAgIGhhbGZPcGVuOiB0cnlPbmNlLFxyXG4gICAgZGVzdHJveTogKCkgPT4gZWZmZWN0UmVmLmRlc3Ryb3koKSxcclxuICB9O1xyXG59XHJcblxyXG4vKiogQGludGVybmFsICovXHJcbmZ1bmN0aW9uIGNyZWF0ZU5ldmVyQnJva2VuQ2lyY3VpdEJyZWFrZXIoKTogQ2lyY3VpdEJyZWFrZXIge1xyXG4gIHJldHVybiB7XHJcbiAgICBpc0Nsb3NlZDogY29tcHV0ZWQoKCkgPT4gZmFsc2UpLFxyXG4gICAgc3RhdHVzOiBzaWduYWwoJ09QRU4nKSxcclxuICAgIGZhaWw6ICgpID0+IHtcclxuICAgICAgLy8gbm9vcFxyXG4gICAgfSxcclxuICAgIHN1Y2Nlc3M6ICgpID0+IHtcclxuICAgICAgLy8gbm9vcFxyXG4gICAgfSxcclxuICAgIGhhbGZPcGVuOiAoKSA9PiB7XHJcbiAgICAgIC8vIG5vb3BcclxuICAgIH0sXHJcbiAgICBkZXN0cm95OiAoKSA9PiB7XHJcbiAgICAgIC8vIG5vb3BcclxuICAgIH0sXHJcbiAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBjaXJjdWl0IGJyZWFrZXIgaW5zdGFuY2UuXHJcbiAqXHJcbiAqIEBwYXJhbSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgY2lyY3VpdCBicmVha2VyLiAgQ2FuIGJlOlxyXG4gKiAgIC0gYHVuZGVmaW5lZGA6ICBDcmVhdGVzIGEgXCJuby1vcFwiIGNpcmN1aXQgYnJlYWtlciB0aGF0IGlzIGFsd2F5cyBvcGVuIChuZXZlciB0cmlwcykuXHJcbiAqICAgLSBgdHJ1ZWA6IENyZWF0ZXMgYSBjaXJjdWl0IGJyZWFrZXIgd2l0aCBkZWZhdWx0IHNldHRpbmdzICh0aHJlc2hvbGQ6IDUsIHRpbWVvdXQ6IDMwMDAwbXMpLlxyXG4gKiAgIC0gYENpcmN1aXRCcmVha2VyYDogIFJldXNlcyBhbiBleGlzdGluZyBgQ2lyY3VpdEJyZWFrZXJgIGluc3RhbmNlLlxyXG4gKiAgIC0gYHsgdGhyZXNob2xkPzogbnVtYmVyOyB0aW1lb3V0PzogbnVtYmVyOyB9YDogQ3JlYXRlcyBhIGNpcmN1aXQgYnJlYWtlciB3aXRoIHRoZSBzcGVjaWZpZWQgdGhyZXNob2xkIGFuZCB0aW1lb3V0LlxyXG4gKlxyXG4gKiBAcmV0dXJucyBBIGBDaXJjdWl0QnJlYWtlcmAgaW5zdGFuY2UuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIC8vIENyZWF0ZSBhIGNpcmN1aXQgYnJlYWtlciB3aXRoIGRlZmF1bHQgc2V0dGluZ3M6XHJcbiAqIGNvbnN0IGJyZWFrZXIgPSBjcmVhdGVDaXJjdWl0QnJlYWtlcigpO1xyXG4gKlxyXG4gKiAvLyBDcmVhdGUgYSBjaXJjdWl0IGJyZWFrZXIgd2l0aCBjdXN0b20gc2V0dGluZ3M6XHJcbiAqIGNvbnN0IGN1c3RvbUJyZWFrZXIgPSBjcmVhdGVDaXJjdWl0QnJlYWtlcih7IHRocmVzaG9sZDogMTAsIHRpbWVvdXQ6IDYwMDAwIH0pO1xyXG4gKlxyXG4gKiAvLyBTaGFyZSBhIHNpbmdsZSBjaXJjdWl0IGJyZWFrZXIgaW5zdGFuY2UgYWNyb3NzIG11bHRpcGxlIHJlc291cmNlczpcclxuICogY29uc3Qgc2hhcmVkQnJlYWtlciA9IGNyZWF0ZUNpcmN1aXRCcmVha2VyKCk7XHJcbiAqIGNvbnN0IHJlc291cmNlMSA9IHF1ZXJ5UmVzb3VyY2UoLi4uLCB7IGNpcmN1aXRCcmVha2VyOiBzaGFyZWRCcmVha2VyIH0pO1xyXG4gKiBjb25zdCByZXNvdXJjZTIgPSBtdXRhdGlvblJlc291cmNlKC4uLiwgeyBjaXJjdWl0QnJlYWtlcjogc2hhcmVkQnJlYWtlciB9KTtcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaXJjdWl0QnJlYWtlcihcclxuICBvcHQ/OiBDaXJjdWl0QnJlYWtlck9wdGlvbnMsXHJcbik6IENpcmN1aXRCcmVha2VyIHtcclxuICBpZiAob3B0ID09PSBmYWxzZSkgcmV0dXJuIGNyZWF0ZU5ldmVyQnJva2VuQ2lyY3VpdEJyZWFrZXIoKTtcclxuXHJcbiAgaWYgKHR5cGVvZiBvcHQgPT09ICdvYmplY3QnICYmICdpc0Nsb3NlZCcgaW4gb3B0KSByZXR1cm4gb3B0O1xyXG5cclxuICByZXR1cm4gaW50ZXJuYWxDZWF0ZUNpcmN1aXRCcmVha2VyKG9wdD8udHJlc2hvbGQsIG9wdD8udGltZW91dCk7XHJcbn1cclxuIl19","// Heavily inspired by: https://dev.to/kasual1/request-deduplication-in-angular-3pd8\nimport { HttpContext, HttpContextToken, } from '@angular/common/http';\nimport { finalize, shareReplay } from 'rxjs';\nconst NO_DEDUPE = new HttpContextToken(() => false);\n/**\n * Disables request deduplication for a specific HTTP request.\n *\n * @param ctx - The `HttpContext` to modify. If not provided, a new `HttpContext` is created.\n * @returns The modified `HttpContext` with the `NO_DEDUPE` token set to `true`.\n *\n * @example\n * // Disable deduplication for a specific POST request:\n * const context = noDedupe();\n * this.http.post('/api/data', payload, { context }).subscribe(...);\n *\n * // Disable deduplication, modifying an existing context:\n * let context = new HttpContext();\n * context = noDedupe(context);\n * this.http.post('/api/data', payload, { context }).subscribe(...);\n */\nexport function noDedupe(ctx = new HttpContext()) {\n return ctx.set(NO_DEDUPE, true);\n}\n/**\n * Creates an `HttpInterceptorFn` that deduplicates identical HTTP requests.\n * If multiple identical requests (same URL and parameters) are made concurrently,\n * only the first request will be sent to the server. Subsequent requests will\n * receive the response from the first request.\n *\n * @param allowed - An array of HTTP methods for which deduplication should be enabled.\n * Defaults to `['GET', 'DELETE', 'HEAD', 'OPTIONS']`.\n *\n * @returns An `HttpInterceptorFn` that implements the request deduplication logic.\n *\n * @example\n * // In your app.config.ts or module providers:\n * import { provideHttpClient, withInterceptors } from '@angular/common/http';\n * import { createDedupeRequestsInterceptor } from './your-dedupe-interceptor';\n *\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideHttpClient(withInterceptors([createDedupeRequestsInterceptor()])),\n * // ... other providers\n * ],\n * };\n *\n * // You can also specify which methods should be deduped\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideHttpClient(withInterceptors([createDedupeRequestsInterceptor(['GET'])])), // only dedupe GET calls\n * // ... other providers\n * ],\n * };\n */\nexport function createDedupeRequestsInterceptor(allowed = ['GET', 'DELETE', 'HEAD', 'OPTIONS']) {\n const inFlight = new Map();\n const DEDUPE_METHODS = new Set(allowed);\n return (req, next) => {\n if (!DEDUPE_METHODS.has(req.method) || req.context.get(NO_DEDUPE))\n return next(req);\n const found = inFlight.get(req.urlWithParams);\n if (found)\n return found;\n const request = next(req).pipe(finalize(() => inFlight.delete(req.urlWithParams)), shareReplay());\n inFlight.set(req.urlWithParams, request);\n return request;\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVkdXBlLmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcmVzb3VyY2Uvc3JjL2xpYi91dGlsL2RlZHVwZS5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvRkFBb0Y7QUFFcEYsT0FBTyxFQUNMLFdBQVcsRUFDWCxnQkFBZ0IsR0FLakIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBbUIsTUFBTSxNQUFNLENBQUM7QUFFOUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBVSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUU3RDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLE1BQW1CLElBQUksV0FBVyxFQUFFO0lBQzNELE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFDSCxNQUFNLFVBQVUsK0JBQStCLENBQzdDLE9BQU8sR0FBRyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQztJQUU5QyxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBMEMsQ0FBQztJQUVuRSxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBUyxPQUFPLENBQUMsQ0FBQztJQUVoRCxPQUFPLENBQ0wsR0FBeUIsRUFDekIsSUFBbUIsRUFDYSxFQUFFO1FBQ2xDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7WUFDL0QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFbkIsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFOUMsSUFBSSxLQUFLO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFeEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FDNUIsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQ2xELFdBQVcsRUFBRSxDQUNkLENBQUM7UUFDRixRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFekMsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEhlYXZpbHkgaW5zcGlyZWQgYnk6IGh0dHBzOi8vZGV2LnRvL2thc3VhbDEvcmVxdWVzdC1kZWR1cGxpY2F0aW9uLWluLWFuZ3VsYXItM3BkOFxyXG5cclxuaW1wb3J0IHtcclxuICBIdHRwQ29udGV4dCxcclxuICBIdHRwQ29udGV4dFRva2VuLFxyXG4gIEh0dHBJbnRlcmNlcHRvckZuLFxyXG4gIHR5cGUgSHR0cEV2ZW50LFxyXG4gIHR5cGUgSHR0cEhhbmRsZXJGbixcclxuICB0eXBlIEh0dHBSZXF1ZXN0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgZmluYWxpemUsIHNoYXJlUmVwbGF5LCB0eXBlIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcbmNvbnN0IE5PX0RFRFVQRSA9IG5ldyBIdHRwQ29udGV4dFRva2VuPGJvb2xlYW4+KCgpID0+IGZhbHNlKTtcclxuXHJcbi8qKlxyXG4gKiBEaXNhYmxlcyByZXF1ZXN0IGRlZHVwbGljYXRpb24gZm9yIGEgc3BlY2lmaWMgSFRUUCByZXF1ZXN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gY3R4IC0gVGhlIGBIdHRwQ29udGV4dGAgdG8gbW9kaWZ5LiBJZiBub3QgcHJvdmlkZWQsIGEgbmV3IGBIdHRwQ29udGV4dGAgaXMgY3JlYXRlZC5cclxuICogQHJldHVybnMgVGhlIG1vZGlmaWVkIGBIdHRwQ29udGV4dGAgd2l0aCB0aGUgYE5PX0RFRFVQRWAgdG9rZW4gc2V0IHRvIGB0cnVlYC5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogLy8gRGlzYWJsZSBkZWR1cGxpY2F0aW9uIGZvciBhIHNwZWNpZmljIFBPU1QgcmVxdWVzdDpcclxuICogY29uc3QgY29udGV4dCA9IG5vRGVkdXBlKCk7XHJcbiAqIHRoaXMuaHR0cC5wb3N0KCcvYXBpL2RhdGEnLCBwYXlsb2FkLCB7IGNvbnRleHQgfSkuc3Vic2NyaWJlKC4uLik7XHJcbiAqXHJcbiAqIC8vIERpc2FibGUgZGVkdXBsaWNhdGlvbiwgbW9kaWZ5aW5nIGFuIGV4aXN0aW5nIGNvbnRleHQ6XHJcbiAqIGxldCBjb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XHJcbiAqIGNvbnRleHQgPSBub0RlZHVwZShjb250ZXh0KTtcclxuICogdGhpcy5odHRwLnBvc3QoJy9hcGkvZGF0YScsIHBheWxvYWQsIHsgY29udGV4dCB9KS5zdWJzY3JpYmUoLi4uKTtcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBub0RlZHVwZShjdHg6IEh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCkpIHtcclxuICByZXR1cm4gY3R4LnNldChOT19ERURVUEUsIHRydWUpO1xyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhbiBgSHR0cEludGVyY2VwdG9yRm5gIHRoYXQgZGVkdXBsaWNhdGVzIGlkZW50aWNhbCBIVFRQIHJlcXVlc3RzLlxyXG4gKiBJZiBtdWx0aXBsZSBpZGVudGljYWwgcmVxdWVzdHMgKHNhbWUgVVJMIGFuZCBwYXJhbWV0ZXJzKSBhcmUgbWFkZSBjb25jdXJyZW50bHksXHJcbiAqIG9ubHkgdGhlIGZpcnN0IHJlcXVlc3Qgd2lsbCBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIuIFN1YnNlcXVlbnQgcmVxdWVzdHMgd2lsbFxyXG4gKiByZWNlaXZlIHRoZSByZXNwb25zZSBmcm9tIHRoZSBmaXJzdCByZXF1ZXN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gYWxsb3dlZCAtIEFuIGFycmF5IG9mIEhUVFAgbWV0aG9kcyBmb3Igd2hpY2ggZGVkdXBsaWNhdGlvbiBzaG91bGQgYmUgZW5hYmxlZC5cclxuICogICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byBgWydHRVQnLCAnREVMRVRFJywgJ0hFQUQnLCAnT1BUSU9OUyddYC5cclxuICpcclxuICogQHJldHVybnMgQW4gYEh0dHBJbnRlcmNlcHRvckZuYCB0aGF0IGltcGxlbWVudHMgdGhlIHJlcXVlc3QgZGVkdXBsaWNhdGlvbiBsb2dpYy5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogLy8gSW4geW91ciBhcHAuY29uZmlnLnRzIG9yIG1vZHVsZSBwcm92aWRlcnM6XHJcbiAqIGltcG9ydCB7IHByb3ZpZGVIdHRwQ2xpZW50LCB3aXRoSW50ZXJjZXB0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG4gKiBpbXBvcnQgeyBjcmVhdGVEZWR1cGVSZXF1ZXN0c0ludGVyY2VwdG9yIH0gZnJvbSAnLi95b3VyLWRlZHVwZS1pbnRlcmNlcHRvcic7XHJcbiAqXHJcbiAqIGV4cG9ydCBjb25zdCBhcHBDb25maWc6IEFwcGxpY2F0aW9uQ29uZmlnID0ge1xyXG4gKiAgIHByb3ZpZGVyczogW1xyXG4gKiAgICAgcHJvdmlkZUh0dHBDbGllbnQod2l0aEludGVyY2VwdG9ycyhbY3JlYXRlRGVkdXBlUmVxdWVzdHNJbnRlcmNlcHRvcigpXSkpLFxyXG4gKiAgICAgLy8gLi4uIG90aGVyIHByb3ZpZGVyc1xyXG4gKiAgIF0sXHJcbiAqIH07XHJcbiAqXHJcbiAqIC8vIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IHdoaWNoIG1ldGhvZHMgc2hvdWxkIGJlIGRlZHVwZWRcclxuICogIGV4cG9ydCBjb25zdCBhcHBDb25maWc6IEFwcGxpY2F0aW9uQ29uZmlnID0ge1xyXG4gKiAgIHByb3ZpZGVyczogW1xyXG4gKiAgICAgcHJvdmlkZUh0dHBDbGllbnQod2l0aEludGVyY2VwdG9ycyhbY3JlYXRlRGVkdXBlUmVxdWVzdHNJbnRlcmNlcHRvcihbJ0dFVCddKV0pKSwgLy8gb25seSBkZWR1cGUgR0VUIGNhbGxzXHJcbiAqICAgICAvLyAuLi4gb3RoZXIgcHJvdmlkZXJzXHJcbiAqICAgXSxcclxuICogfTtcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWR1cGVSZXF1ZXN0c0ludGVyY2VwdG9yKFxyXG4gIGFsbG93ZWQgPSBbJ0dFVCcsICdERUxFVEUnLCAnSEVBRCcsICdPUFRJT05TJ10sXHJcbik6IEh0dHBJbnRlcmNlcHRvckZuIHtcclxuICBjb25zdCBpbkZsaWdodCA9IG5ldyBNYXA8c3RyaW5nLCBPYnNlcnZhYmxlPEh0dHBFdmVudDx1bmtub3duPj4+KCk7XHJcblxyXG4gIGNvbnN0IERFRFVQRV9NRVRIT0RTID0gbmV3IFNldDxzdHJpbmc+KGFsbG93ZWQpO1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgcmVxOiBIdHRwUmVxdWVzdDx1bmtub3duPixcclxuICAgIG5leHQ6IEh0dHBIYW5kbGVyRm4sXHJcbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8dW5rbm93bj4+ID0+IHtcclxuICAgIGlmICghREVEVVBFX01FVEhPRFMuaGFzKHJlcS5tZXRob2QpIHx8IHJlcS5jb250ZXh0LmdldChOT19ERURVUEUpKVxyXG4gICAgICByZXR1cm4gbmV4dChyZXEpO1xyXG5cclxuICAgIGNvbnN0IGZvdW5kID0gaW5GbGlnaHQuZ2V0KHJlcS51cmxXaXRoUGFyYW1zKTtcclxuXHJcbiAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZDtcclxuXHJcbiAgICBjb25zdCByZXF1ZXN0ID0gbmV4dChyZXEpLnBpcGUoXHJcbiAgICAgIGZpbmFsaXplKCgpID0+IGluRmxpZ2h0LmRlbGV0ZShyZXEudXJsV2l0aFBhcmFtcykpLFxyXG4gICAgICBzaGFyZVJlcGxheSgpLFxyXG4gICAgKTtcclxuICAgIGluRmxpZ2h0LnNldChyZXEudXJsV2l0aFBhcmFtcywgcmVxdWVzdCk7XHJcblxyXG4gICAgcmV0dXJuIHJlcXVlc3Q7XHJcbiAgfTtcclxufVxyXG4iXX0=","import { hash, keys } from '@mmstack/object';\nfunction equalTransferCache(a, b) {\n if (!a && !b)\n return true;\n if (!a || !b)\n return false;\n if (typeof a !== typeof b)\n return false;\n if (typeof a === 'boolean' || typeof b === 'boolean')\n return a === b;\n if (!a.includeHeaders && !b.includeHeaders)\n return true;\n if (!a.includeHeaders || !b.includeHeaders)\n return false;\n if (a.includeHeaders.length !== b.includeHeaders.length)\n return false;\n if (a.includeHeaders.length === 0)\n return true;\n const aSet = new Set(a.includeHeaders ?? []);\n return b.includeHeaders.every((header) => aSet.has(header));\n}\nfunction equalParams(a, b) {\n if (!a && !b)\n return true;\n if (!a || !b)\n return false;\n const aKeys = keys(a);\n const bKeys = keys(b);\n if (aKeys.length !== bKeys.length)\n return false;\n return aKeys.every((key) => a[key] === b[key]);\n}\nfunction equalBody(a, b) {\n if (!a && !b)\n return true;\n if (!a || !b)\n return false;\n return hash(a) === hash(b);\n}\nfunction equalHeaders(a, b) {\n if (!a && !b)\n return true;\n if (!a || !b)\n return false;\n const aKeys = keys(a);\n const bKeys = keys(b);\n if (aKeys.length !== bKeys.length)\n return false;\n return aKeys.every((key) => a[key] === b[key]);\n}\nfunction equalContext(a, b) {\n if (!a && !b)\n return true;\n if (!a || !b)\n return false;\n const aKeys = keys(a);\n const bKeys = keys(b);\n if (aKeys.length !== bKeys.length)\n return false;\n return aKeys.every((key) => a[key] === b[key]);\n}\nexport function createEqualRequest(equalResult) {\n const eqb = equalResult ?? equalBody;\n return (a, b) => {\n if (!a && !b)\n return true;\n if (!a || !b)\n return false;\n if (a.url !== b.url)\n return false;\n if (a.method !== b.method)\n return false;\n if (!equalParams(a.params, b.params))\n return false;\n if (!equalHeaders(a.headers, b.headers))\n return false;\n if (!eqb(a.body, b.body))\n return false;\n if (!equalContext(a.context, b.context))\n return false;\n if (a.withCredentials !== b.withCredentials)\n return false;\n if (a.reportProgress !== b.reportProgress)\n return false;\n if (!equalTransferCache(a.transferCache, b.transferCache))\n return false;\n return true;\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXF1YWxpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yZXNvdXJjZS9zcmMvbGliL3V0aWwvZXF1YWxpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxTQUFTLGtCQUFrQixDQUN6QixDQUF1QyxFQUN2QyxDQUF1QztJQUV2QyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzFCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFM0IsSUFBSSxPQUFPLENBQUMsS0FBSyxPQUFPLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN4QyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsS0FBSyxTQUFTO1FBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXJFLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUN4RCxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFekQsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsY0FBYyxDQUFDLE1BQU07UUFBRSxPQUFPLEtBQUssQ0FBQztJQUV0RSxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUUvQyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRTdDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsQ0FB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SUFBSSxDQUFDLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUUzQixJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUc7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNsQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU07WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN4QyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ25ELElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDdEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBZSxFQUFFLENBQUMsQ0FBQyxJQUFlLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUM3RCxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRXRELElBQUksQ0FBQyxDQUFDLGVBQWUsS0FBSyxDQUFDLENBQUMsZUFBZTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzFELElBQUksQ0FBQyxDQUFDLGNBQWMsS0FBSyxDQUFDLENBQUMsY0FBYztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3hELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUV4RSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwUmVzb3VyY2VSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyB0eXBlIFZhbHVlRXF1YWxpdHlGbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBoYXNoLCBrZXlzIH0gZnJvbSAnQG1tc3RhY2svb2JqZWN0JztcclxuXHJcbmZ1bmN0aW9uIGVxdWFsVHJhbnNmZXJDYWNoZShcclxuICBhOiBIdHRwUmVzb3VyY2VSZXF1ZXN0Wyd0cmFuc2ZlckNhY2hlJ10sXHJcbiAgYjogSHR0cFJlc291cmNlUmVxdWVzdFsndHJhbnNmZXJDYWNoZSddLFxyXG4pOiBib29sZWFuIHtcclxuICBpZiAoIWEgJiYgIWIpIHJldHVybiB0cnVlO1xyXG4gIGlmICghYSB8fCAhYikgcmV0dXJuIGZhbHNlO1xyXG5cclxuICBpZiAodHlwZW9mIGEgIT09IHR5cGVvZiBiKSByZXR1cm4gZmFsc2U7XHJcbiAgaWYgKHR5cGVvZiBhID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIGIgPT09ICdib29sZWFuJykgcmV0dXJuIGEgPT09IGI7XHJcblxyXG4gIGlmICghYS5pbmNsdWRlSGVhZGVycyAmJiAhYi5pbmNsdWRlSGVhZGVycykgcmV0dXJuIHRydWU7XHJcbiAgaWYgKCFhLmluY2x1ZGVIZWFkZXJzIHx8ICFiLmluY2x1ZGVIZWFkZXJzKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gIGlmIChhLmluY2x1ZGVIZWFkZXJzLmxlbmd0aCAhPT0gYi5pbmNsdWRlSGVhZGVycy5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgaWYgKGEuaW5jbHVkZUhlYWRlcnMubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgY29uc3QgYVNldCA9IG5ldyBTZXQoYS5pbmNsdWRlSGVhZGVycyA/PyBbXSk7XHJcblxyXG4gIHJldHVybiBiLmluY2x1ZGVIZWFkZXJzLmV2ZXJ5KChoZWFkZXIpID0+IGFTZXQuaGFzKGhlYWRlcikpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlcXVhbFBhcmFtcyhcclxuICBhOiBIdHRwUmVzb3VyY2VSZXF1ZXN0WydwYXJhbXMnXSxcclxuICBiOiBIdHRwUmVzb3VyY2VSZXF1ZXN0WydwYXJhbXMnXSxcclxuKTogYm9vbGVhbiB7XHJcbiAgaWYgKCFhICYmICFiKSByZXR1cm4gdHJ1ZTtcclxuICBpZiAoIWEgfHwgIWIpIHJldHVybiBmYWxzZTtcclxuICBjb25zdCBhS2V5cyA9IGtleXMoYSk7XHJcbiAgY29uc3QgYktleXMgPSBrZXlzKGIpO1xyXG4gIGlmIChhS2V5cy5sZW5ndGggIT09IGJLZXlzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICByZXR1cm4gYUtleXMuZXZlcnkoKGtleSkgPT4gYVtrZXldID09PSBiW2tleV0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlcXVhbEJvZHkoXHJcbiAgYTogSHR0cFJlc291cmNlUmVxdWVzdFsnYm9keSddLFxyXG4gIGI6IEh0dHBSZXNvdXJjZVJlcXVlc3RbJ2JvZHknXSxcclxuKTogYm9vbGVhbiB7XHJcbiAgaWYgKCFhICYmICFiKSByZXR1cm4gdHJ1ZTtcclxuICBpZiAoIWEgfHwgIWIpIHJldHVybiBmYWxzZTtcclxuICByZXR1cm4gaGFzaChhKSA9PT0gaGFzaChiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZXF1YWxIZWFkZXJzKFxyXG4gIGE6IEh0dHBSZXNvdXJjZVJlcXVlc3RbJ2hlYWRlcnMnXSxcclxuICBiOiBIdHRwUmVzb3VyY2VSZXF1ZXN0WydoZWFkZXJzJ10sXHJcbik6IGJvb2xlYW4ge1xyXG4gIGlmICghYSAmJiAhYikgcmV0dXJuIHRydWU7XHJcbiAgaWYgKCFhIHx8ICFiKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gIGNvbnN0IGFLZXlzID0ga2V5cyhhKTtcclxuICBjb25zdCBiS2V5cyA9IGtleXMoYik7XHJcbiAgaWYgKGFLZXlzLmxlbmd0aCAhPT0gYktleXMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcbiAgcmV0dXJuIGFLZXlzLmV2ZXJ5KChrZXkpID0+IGFba2V5XSA9PT0gYltrZXldKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZXF1YWxDb250ZXh0KFxyXG4gIGE6IEh0dHBSZXNvdXJjZVJlcXVlc3RbJ2NvbnRleHQnXSxcclxuICBiOiBIdHRwUmVzb3VyY2VSZXF1ZXN0Wydjb250ZXh0J10sXHJcbik6IGJvb2xlYW4ge1xyXG4gIGlmICghYSAmJiAhYikgcmV0dXJuIHRydWU7XHJcbiAgaWYgKCFhIHx8ICFiKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gIGNvbnN0IGFLZXlzID0ga2V5cyhhKTtcclxuICBjb25zdCBiS2V5cyA9IGtleXMoYik7XHJcbiAgaWYgKGFLZXlzLmxlbmd0aCAhPT0gYktleXMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcbiAgcmV0dXJuIGFLZXlzLmV2ZXJ5KChrZXkpID0+IGFba2V5XSA9PT0gYltrZXldKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVxdWFsUmVxdWVzdDxUUmVzdWx0PihcclxuICBlcXVhbFJlc3VsdD86IFZhbHVlRXF1YWxpdHlGbjxUUmVzdWx0PixcclxuKSB7XHJcbiAgY29uc3QgZXFiID0gZXF1YWxSZXN1bHQgPz8gZXF1YWxCb2R5O1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgYTogUGFydGlhbDxIdHRwUmVzb3VyY2VSZXF1ZXN0PiB8IHVuZGVmaW5lZCxcclxuICAgIGI6IFBhcnRpYWw8SHR0cFJlc291cmNlUmVxdWVzdD4gfCB1bmRlZmluZWQsXHJcbiAgKSA9PiB7XHJcbiAgICBpZiAoIWEgJiYgIWIpIHJldHVybiB0cnVlO1xyXG4gICAgaWYgKCFhIHx8ICFiKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgaWYgKGEudXJsICE9PSBiLnVybCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKGEubWV0aG9kICE9PSBiLm1ldGhvZCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKCFlcXVhbFBhcmFtcyhhLnBhcmFtcywgYi5wYXJhbXMpKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAoIWVxdWFsSGVhZGVycyhhLmhlYWRlcnMsIGIuaGVhZGVycykpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICghZXFiKGEuYm9keSBhcyBUUmVzdWx0LCBiLmJvZHkgYXMgVFJlc3VsdCkpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICghZXF1YWxDb250ZXh0KGEuY29udGV4dCwgYi5jb250ZXh0KSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmIChhLndpdGhDcmVkZW50aWFscyAhPT0gYi53aXRoQ3JlZGVudGlhbHMpIHJldHVybiBmYWxzZTtcclxuICAgIGlmIChhLnJlcG9ydFByb2dyZXNzICE9PSBiLnJlcG9ydFByb2dyZXNzKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAoIWVxdWFsVHJhbnNmZXJDYWNoZShhLnRyYW5zZmVyQ2FjaGUsIGIudHJhbnNmZXJDYWNoZSkpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9O1xyXG59XHJcbiJdfQ==","export function hasSlowConnection() {\n if (window &&\n 'navigator' in window &&\n 'connection' in window.navigator &&\n typeof window.navigator.connection === 'object' &&\n !!window.navigator.connection &&\n 'effectiveType' in window.navigator.connection &&\n typeof window.navigator.connection.effectiveType === 'string')\n return window.navigator.connection.effectiveType.endsWith('2g');\n return false;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzLXNsb3ctY29ubmVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Jlc291cmNlL3NyYy9saWIvdXRpbC9oYXMtc2xvdy1jb25uZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxpQkFBaUI7SUFDL0IsSUFDRSxNQUFNO1FBQ04sV0FBVyxJQUFJLE1BQU07UUFDckIsWUFBWSxJQUFJLE1BQU0sQ0FBQyxTQUFTO1FBQ2hDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEtBQUssUUFBUTtRQUMvQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVO1FBQzdCLGVBQWUsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVU7UUFDOUMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxhQUFhLEtBQUssUUFBUTtRQUU3RCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFbEUsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGhhc1Nsb3dDb25uZWN0aW9uKCkge1xyXG4gIGlmIChcclxuICAgIHdpbmRvdyAmJlxyXG4gICAgJ25hdmlnYXRvcicgaW4gd2luZG93ICYmXHJcbiAgICAnY29ubmVjdGlvbicgaW4gd2luZG93Lm5hdmlnYXRvciAmJlxyXG4gICAgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IuY29ubmVjdGlvbiA9PT0gJ29iamVjdCcgJiZcclxuICAgICEhd2luZG93Lm5hdmlnYXRvci5jb25uZWN0aW9uICYmXHJcbiAgICAnZWZmZWN0aXZlVHlwZScgaW4gd2luZG93Lm5hdmlnYXRvci5jb25uZWN0aW9uICYmXHJcbiAgICB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvci5jb25uZWN0aW9uLmVmZmVjdGl2ZVR5cGUgPT09ICdzdHJpbmcnXHJcbiAgKVxyXG4gICAgcmV0dXJuIHdpbmRvdy5uYXZpZ2F0b3IuY29ubmVjdGlvbi5lZmZlY3RpdmVUeXBlLmVuZHNXaXRoKCcyZycpO1xyXG5cclxuICByZXR1cm4gZmFsc2U7XHJcbn1cclxuIl19","import { linkedSignal, } from '@angular/core';\nfunction presist(value, usePrevious, equal) {\n // linkedSignal allows us to access previous source value\n const persisted = linkedSignal({\n source: () => {\n return {\n value: value(),\n usePrevious: usePrevious(),\n };\n },\n computation: (source, prev) => {\n if (source.usePrevious && prev)\n return prev.value;\n return source.value;\n },\n equal,\n });\n // if original value was WritableSignal then override linkedSignal methods to original...angular uses linkedSignal under the hood in ResourceImpl, this applies to that.\n if ('set' in value) {\n persisted.set = value.set;\n persisted.update = value.update;\n persisted.asReadonly = value.asReadonly;\n }\n return persisted;\n}\nexport function persistResourceValues(resource, persist = false, equal) {\n if (!persist)\n return resource;\n return {\n ...resource,\n statusCode: presist(resource.statusCode, resource.isLoading),\n headers: presist(resource.headers, resource.isLoading),\n value: presist(resource.value, resource.isLoading, equal),\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc2lzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Jlc291cmNlL3NyYy9saWIvdXRpbC9wZXJzaXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxZQUFZLEdBSWIsTUFBTSxlQUFlLENBQUM7QUFjdkIsU0FBUyxPQUFPLENBQ2QsS0FBb0MsRUFDcEMsV0FBNEIsRUFDNUIsS0FBMEI7SUFFMUIseURBQXlEO0lBRXpELE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FNNUI7UUFDQSxNQUFNLEVBQUUsR0FBRyxFQUFFO1lBQ1gsT0FBTztnQkFDTCxLQUFLLEVBQUUsS0FBSyxFQUFFO2dCQUNkLFdBQVcsRUFBRSxXQUFXLEVBQUU7YUFDM0IsQ0FBQztRQUNKLENBQUM7UUFDRCxXQUFXLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDNUIsSUFBSSxNQUFNLENBQUMsV0FBVyxJQUFJLElBQUk7Z0JBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBRWxELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQztRQUN0QixDQUFDO1FBQ0QsS0FBSztLQUNOLENBQUMsQ0FBQztJQUVILHdLQUF3SztJQUN4SyxJQUFJLEtBQUssSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNuQixTQUFTLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFDMUIsU0FBUyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQ2hDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUIsQ0FDbkMsUUFBNEIsRUFDNUIsT0FBTyxHQUFHLEtBQUssRUFDZixLQUEwQjtJQUUxQixJQUFJLENBQUMsT0FBTztRQUFFLE9BQU8sUUFBUSxDQUFDO0lBRTlCLE9BQU87UUFDTCxHQUFHLFFBQVE7UUFDWCxVQUFVLEVBQUUsT0FBTyxDQUNqQixRQUFRLENBQUMsVUFBVSxFQUNuQixRQUFRLENBQUMsU0FBUyxDQUNuQjtRQUNELE9BQU8sRUFBRSxPQUFPLENBQ2QsUUFBUSxDQUFDLE9BQU8sRUFDaEIsUUFBUSxDQUFDLFNBQVMsQ0FDbkI7UUFDRCxLQUFLLEVBQUUsT0FBTyxDQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUM7S0FDN0QsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIEh0dHBIZWFkZXJzLCB0eXBlIEh0dHBSZXNvdXJjZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtcclxuICBsaW5rZWRTaWduYWwsXHJcbiAgdHlwZSBTaWduYWwsXHJcbiAgdHlwZSBWYWx1ZUVxdWFsaXR5Rm4sXHJcbiAgdHlwZSBXcml0YWJsZVNpZ25hbCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmZ1bmN0aW9uIHByZXNpc3Q8VD4oXHJcbiAgdmFsdWU6IFdyaXRhYmxlU2lnbmFsPFQ+LFxyXG4gIHVzZVByZXZpb3VzOiBTaWduYWw8Ym9vbGVhbj4sXHJcbiAgZXF1YWw/OiBWYWx1ZUVxdWFsaXR5Rm48VD4sXHJcbik6IFdyaXRhYmxlU2lnbmFsPFQ+O1xyXG5cclxuZnVuY3Rpb24gcHJlc2lzdDxUPihcclxuICB2YWx1ZTogU2lnbmFsPFQ+LFxyXG4gIHVzZVByZXZpb3VzOiBTaWduYWw8Ym9vbGVhbj4sXHJcbiAgZXF1YWw/OiBWYWx1ZUVxdWFsaXR5Rm48VD4sXHJcbik6IFNpZ25hbDxUPjtcclxuXHJcbmZ1bmN0aW9uIHByZXNpc3Q8VD4oXHJcbiAgdmFsdWU6IFdyaXRhYmxlU2lnbmFsPFQ+IHwgU2lnbmFsPFQ+LFxyXG4gIHVzZVByZXZpb3VzOiBTaWduYWw8Ym9vbGVhbj4sXHJcbiAgZXF1YWw/OiBWYWx1ZUVxdWFsaXR5Rm48VD4sXHJcbik6IFdyaXRhYmxlU2lnbmFsPFQ+IHwgU2lnbmFsPFQ+IHtcclxuICAvLyBsaW5rZWRTaWduYWwgYWxsb3dzIHVzIHRvIGFjY2VzcyBwcmV2aW91cyBzb3VyY2UgdmFsdWVcclxuXHJcbiAgY29uc3QgcGVyc2lzdGVkID0gbGlua2VkU2lnbmFsPFxyXG4gICAge1xyXG4gICAgICB2YWx1ZTogVDtcclxuICAgICAgdXNlUHJldmlvdXM6IGJvb2xlYW47XHJcbiAgICB9LFxyXG4gICAgVFxyXG4gID4oe1xyXG4gICAgc291cmNlOiAoKSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgdmFsdWU6IHZhbHVlKCksXHJcbiAgICAgICAgdXNlUHJldmlvdXM6IHVzZVByZXZpb3VzKCksXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgY29tcHV0YXRpb246IChzb3VyY2UsIHByZXYpID0+IHtcclxuICAgICAgaWYgKHNvdXJjZS51c2VQcmV2aW91cyAmJiBwcmV2KSByZXR1cm4gcHJldi52YWx1ZTtcclxuXHJcbiAgICAgIHJldHVybiBzb3VyY2UudmFsdWU7XHJcbiAgICB9LFxyXG4gICAgZXF1YWwsXHJcbiAgfSk7XHJcblxyXG4gIC8vIGlmIG9yaWdpbmFsIHZhbHVlIHdhcyBXcml0YWJsZVNpZ25hbCB0aGVuIG92ZXJyaWRlIGxpbmtlZFNpZ25hbCBtZXRob2RzIHRvIG9yaWdpbmFsLi4uYW5ndWxhciB1c2VzIGxpbmtlZFNpZ25hbCB1bmRlciB0aGUgaG9vZCBpbiBSZXNvdXJjZUltcGwsIHRoaXMgYXBwbGllcyB0byB0aGF0LlxyXG4gIGlmICgnc2V0JyBpbiB2YWx1ZSkge1xyXG4gICAgcGVyc2lzdGVkLnNldCA9IHZhbHVlLnNldDtcclxuICAgIHBlcnNpc3RlZC51cGRhdGUgPSB2YWx1ZS51cGRhdGU7XHJcbiAgICBwZXJzaXN0ZWQuYXNSZWFkb25seSA9IHZhbHVlLmFzUmVhZG9ubHk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcGVyc2lzdGVkO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcGVyc2lzdFJlc291cmNlVmFsdWVzPFQ+KFxyXG4gIHJlc291cmNlOiBIdHRwUmVzb3VyY2VSZWY8VD4sXHJcbiAgcGVyc2lzdCA9IGZhbHNlLFxyXG4gIGVxdWFsPzogVmFsdWVFcXVhbGl0eUZuPFQ+LFxyXG4pOiBIdHRwUmVzb3VyY2VSZWY8VD4ge1xyXG4gIGlmICghcGVyc2lzdCkgcmV0dXJuIHJlc291cmNlO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgLi4ucmVzb3VyY2UsXHJcbiAgICBzdGF0dXNDb2RlOiBwcmVzaXN0PG51bWJlciB8IHVuZGVmaW5lZD4oXHJcbiAgICAgIHJlc291cmNlLnN0YXR1c0NvZGUsXHJcbiAgICAgIHJlc291cmNlLmlzTG9hZGluZyxcclxuICAgICksXHJcbiAgICBoZWFkZXJzOiBwcmVzaXN0PEh0dHBIZWFkZXJzIHwgdW5kZWZpbmVkPihcclxuICAgICAgcmVzb3VyY2UuaGVhZGVycyxcclxuICAgICAgcmVzb3VyY2UuaXNMb2FkaW5nLFxyXG4gICAgKSxcclxuICAgIHZhbHVlOiBwcmVzaXN0PFQ+KHJlc291cmNlLnZhbHVlLCByZXNvdXJjZS5pc0xvYWRpbmcsIGVxdWFsKSxcclxuICB9O1xyXG59XHJcbiJdfQ==","import { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { interval } from 'rxjs';\n// refresh resource every n miliseconds or don't refresh if undefined provided. 0 also excluded, due to it not being a valid usecase\nexport function refresh(resource, destroyRef, refresh) {\n if (!refresh)\n return resource; // no refresh requested\n // we can use RxJs here as reloading the resource will always be a side effect & as such does not impact the reactive graph in any way.\n let sub = interval(refresh)\n .pipe(takeUntilDestroyed(destroyRef))\n .subscribe(() => resource.reload());\n const reload = () => {\n sub.unsubscribe(); // do not conflict with manual reload\n const hasReloaded = resource.reload();\n // resubscribe after manual reload\n sub = interval(refresh)\n .pipe(takeUntilDestroyed(destroyRef))\n .subscribe(() => resource.reload());\n return hasReloaded;\n };\n return {\n ...resource,\n reload,\n destroy: () => {\n sub.unsubscribe();\n resource.destroy();\n },\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmcmVzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Jlc291cmNlL3NyYy9saWIvdXRpbC9yZWZyZXNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFaEMsb0lBQW9JO0FBQ3BJLE1BQU0sVUFBVSxPQUFPLENBQ3JCLFFBQTRCLEVBQzVCLFVBQXNCLEVBQ3RCLE9BQWdCO0lBRWhCLElBQUksQ0FBQyxPQUFPO1FBQUUsT0FBTyxRQUFRLENBQUMsQ0FBQyx1QkFBdUI7SUFFdEQsdUlBQXVJO0lBQ3ZJLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7U0FDeEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3BDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUV0QyxNQUFNLE1BQU0sR0FBRyxHQUFZLEVBQUU7UUFDM0IsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMscUNBQXFDO1FBRXhELE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUV0QyxrQ0FBa0M7UUFDbEMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7YUFDcEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3BDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUV0QyxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDLENBQUM7SUFFRixPQUFPO1FBQ0wsR0FBRyxRQUFRO1FBQ1gsTUFBTTtRQUNOLE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDWixHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbEIsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3JCLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBSZXNvdXJjZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgRGVzdHJveVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XHJcbmltcG9ydCB7IGludGVydmFsIH0gZnJvbSAncnhqcyc7XHJcblxyXG4vLyByZWZyZXNoIHJlc291cmNlIGV2ZXJ5IG4gbWlsaXNlY29uZHMgb3IgZG9uJ3QgcmVmcmVzaCBpZiB1bmRlZmluZWQgcHJvdmlkZWQuIDAgYWxzbyBleGNsdWRlZCwgZHVlIHRvIGl0IG5vdCBiZWluZyBhIHZhbGlkIHVzZWNhc2VcclxuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2g8VD4oXHJcbiAgcmVzb3VyY2U6IEh0dHBSZXNvdXJjZVJlZjxUPixcclxuICBkZXN0cm95UmVmOiBEZXN0cm95UmVmLFxyXG4gIHJlZnJlc2g/OiBudW1iZXIsXHJcbik6IEh0dHBSZXNvdXJjZVJlZjxUPiB7XHJcbiAgaWYgKCFyZWZyZXNoKSByZXR1cm4gcmVzb3VyY2U7IC8vIG5vIHJlZnJlc2ggcmVxdWVzdGVkXHJcblxyXG4gIC8vIHdlIGNhbiB1c2UgUnhKcyBoZXJlIGFzIHJlbG9hZGluZyB0aGUgcmVzb3VyY2Ugd2lsbCBhbHdheXMgYmUgYSBzaWRlIGVmZmVjdCAmIGFzIHN1Y2ggZG9lcyBub3QgaW1wYWN0IHRoZSByZWFjdGl2ZSBncmFwaCBpbiBhbnkgd2F5LlxyXG4gIGxldCBzdWIgPSBpbnRlcnZhbChyZWZyZXNoKVxyXG4gICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKGRlc3Ryb3lSZWYpKVxyXG4gICAgLnN1YnNjcmliZSgoKSA9PiByZXNvdXJjZS5yZWxvYWQoKSk7XHJcblxyXG4gIGNvbnN0IHJlbG9hZCA9ICgpOiBib29sZWFuID0+IHtcclxuICAgIHN1Yi51bnN1YnNjcmliZSgpOyAvLyBkbyBub3QgY29uZmxpY3Qgd2l0aCBtYW51YWwgcmVsb2FkXHJcblxyXG4gICAgY29uc3QgaGFzUmVsb2FkZWQgPSByZXNvdXJjZS5yZWxvYWQoKTtcclxuXHJcbiAgICAvLyByZXN1YnNjcmliZSBhZnRlciBtYW51YWwgcmVsb2FkXHJcbiAgICBzdWIgPSBpbnRlcnZhbChyZWZyZXNoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoZGVzdHJveVJlZikpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gcmVzb3VyY2UucmVsb2FkKCkpO1xyXG5cclxuICAgIHJldHVybiBoYXNSZWxvYWRlZDtcclxuICB9O1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgLi4ucmVzb3VyY2UsXHJcbiAgICByZWxvYWQsXHJcbiAgICBkZXN0cm95OiAoKSA9PiB7XHJcbiAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgICByZXNvdXJjZS5kZXN0cm95KCk7XHJcbiAgICB9LFxyXG4gIH07XHJcbn1cclxuIl19","import { effect } from '@angular/core';\n// Retry on error, if number is provided it will retry that many times with exponential backoff, otherwise it will use the options provided\nexport function retryOnError(res, opt) {\n const max = opt ? (typeof opt === 'number' ? opt : (opt.max ?? 0)) : 0;\n const backoff = typeof opt === 'object' ? (opt.backoff ?? 1000) : 1000;\n let retries = 0;\n let timeout;\n const onError = () => {\n if (retries >= max)\n return;\n retries++;\n if (timeout)\n clearTimeout(timeout);\n setTimeout(() => res.reload(), retries <= 0 ? 0 : backoff * Math.pow(2, retries - 1));\n };\n const onSuccess = () => {\n if (timeout)\n clearTimeout(timeout);\n retries = 0;\n };\n const ref = effect(() => {\n switch (res.status()) {\n case 'error':\n return onError();\n case 'resolved':\n return onSuccess();\n }\n });\n return {\n ...res,\n destroy: () => {\n ref.destroy(); // cleanup on manual destroy\n res.destroy();\n },\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cnktb24tZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yZXNvdXJjZS9zcmMvbGliL3V0aWwvcmV0cnktb24tZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVN2QywySUFBMkk7QUFDM0ksTUFBTSxVQUFVLFlBQVksQ0FDMUIsR0FBdUIsRUFDdkIsR0FBa0I7SUFFbEIsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLE1BQU0sT0FBTyxHQUFHLE9BQU8sR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFFdkUsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBRWhCLElBQUksT0FBa0QsQ0FBQztJQUV2RCxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUU7UUFDbkIsSUFBSSxPQUFPLElBQUksR0FBRztZQUFFLE9BQU87UUFDM0IsT0FBTyxFQUFFLENBQUM7UUFFVixJQUFJLE9BQU87WUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkMsVUFBVSxDQUNSLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFDbEIsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUN0RCxDQUFDO0lBQ0osQ0FBQyxDQUFDO0lBRUYsTUFBTSxTQUFTLEdBQUcsR0FBRyxFQUFFO1FBQ3JCLElBQUksT0FBTztZQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0lBRUYsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRTtRQUN0QixRQUFRLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQ3JCLEtBQUssT0FBTztnQkFDVixPQUFPLE9BQU8sRUFBRSxDQUFDO1lBQ25CLEtBQUssVUFBVTtnQkFDYixPQUFPLFNBQVMsRUFBRSxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU87UUFDTCxHQUFHLEdBQUc7UUFDTixPQUFPLEVBQUUsR0FBRyxFQUFFO1lBQ1osR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsNEJBQTRCO1lBQzNDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNoQixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIEh0dHBSZXNvdXJjZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgZWZmZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5leHBvcnQgdHlwZSBSZXRyeU9wdGlvbnMgPVxyXG4gIHwgbnVtYmVyXHJcbiAgfCB7XHJcbiAgICAgIG1heD86IG51bWJlcjtcclxuICAgICAgYmFja29mZj86IG51bWJlcjtcclxuICAgIH07XHJcblxyXG4vLyBSZXRyeSBvbiBlcnJvciwgaWYgbnVtYmVyIGlzIHByb3ZpZGVkIGl0IHdpbGwgcmV0cnkgdGhhdCBtYW55IHRpbWVzIHdpdGggZXhwb25lbnRpYWwgYmFja29mZiwgb3RoZXJ3aXNlIGl0IHdpbGwgdXNlIHRoZSBvcHRpb25zIHByb3ZpZGVkXHJcbmV4cG9ydCBmdW5jdGlvbiByZXRyeU9uRXJyb3I8VD4oXHJcbiAgcmVzOiBIdHRwUmVzb3VyY2VSZWY8VD4sXHJcbiAgb3B0PzogUmV0cnlPcHRpb25zLFxyXG4pOiBIdHRwUmVzb3VyY2VSZWY8VD4ge1xyXG4gIGNvbnN0IG1heCA9IG9wdCA/ICh0eXBlb2Ygb3B0ID09PSAnbnVtYmVyJyA/IG9wdCA6IChvcHQubWF4ID8/IDApKSA6IDA7XHJcbiAgY29uc3QgYmFja29mZiA9IHR5cGVvZiBvcHQgPT09ICdvYmplY3QnID8gKG9wdC5iYWNrb2ZmID8/IDEwMDApIDogMTAwMDtcclxuXHJcbiAgbGV0IHJldHJpZXMgPSAwO1xyXG5cclxuICBsZXQgdGltZW91dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIGNvbnN0IG9uRXJyb3IgPSAoKSA9PiB7XHJcbiAgICBpZiAocmV0cmllcyA+PSBtYXgpIHJldHVybjtcclxuICAgIHJldHJpZXMrKztcclxuXHJcbiAgICBpZiAodGltZW91dCkgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xyXG5cclxuICAgIHNldFRpbWVvdXQoXHJcbiAgICAgICgpID0+IHJlcy5yZWxvYWQoKSxcclxuICAgICAgcmV0cmllcyA8PSAwID8gMCA6IGJhY2tvZmYgKiBNYXRoLnBvdygyLCByZXRyaWVzIC0gMSksXHJcbiAgICApO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IG9uU3VjY2VzcyA9ICgpID0+IHtcclxuICAgIGlmICh0aW1lb3V0KSBjbGVhclRpbWVvdXQodGltZW91dCk7XHJcbiAgICByZXRyaWVzID0gMDtcclxuICB9O1xyXG5cclxuICBjb25zdCByZWYgPSBlZmZlY3QoKCkgPT4ge1xyXG4gICAgc3dpdGNoIChyZXMuc3RhdHVzKCkpIHtcclxuICAgICAgY2FzZSAnZXJyb3InOlxyXG4gICAgICAgIHJldHVybiBvbkVycm9yKCk7XHJcbiAgICAgIGNhc2UgJ3Jlc29sdmVkJzpcclxuICAgICAgICByZXR1cm4gb25TdWNjZXNzKCk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICAuLi5yZXMsXHJcbiAgICBkZXN0cm95OiAoKSA9PiB7XHJcbiAgICAgIHJlZi5kZXN0cm95KCk7IC8vIGNsZWFudXAgb24gbWFudWFsIGRlc3Ryb3lcclxuICAgICAgcmVzLmRlc3Ryb3koKTtcclxuICAgIH0sXHJcbiAgfTtcclxufVxyXG4iXX0=","import { HttpParams } from '@angular/common/http';\nimport { entries } from '@mmstack/object';\nfunction normalizeParams(params) {\n if (params instanceof HttpParams)\n return params.toString();\n const paramMap = new Map();\n for (const [key, value] of entries(params)) {\n if (Array.isArray(value)) {\n paramMap.set(key, value.map(encodeURIComponent).join(','));\n }\n else {\n paramMap.set(key, encodeURIComponent(value.toString()));\n }\n }\n return Array.from(paramMap.entries())\n .map(([key, value]) => `${key}=${value}`)\n .join('&');\n}\nexport function urlWithParams(req) {\n if (!req.params)\n return req.url;\n return `${req.url}?${normalizeParams(req.params)}`;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLXdpdGgtcGFyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcmVzb3VyY2Uvc3JjL2xpYi91dGlsL3VybC13aXRoLXBhcmFtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUF1QixNQUFNLHNCQUFzQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUxQyxTQUFTLGVBQWUsQ0FDdEIsTUFBK0M7SUFFL0MsSUFBSSxNQUFNLFlBQVksVUFBVTtRQUFFLE9BQU8sTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBRTNELE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBRTNDLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUMzQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QixRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDN0QsQ0FBQzthQUFNLENBQUM7WUFDTixRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFELENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7U0FDeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsR0FBd0I7SUFDcEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNO1FBQUUsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDO0lBRWhDLE9BQU8sR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUNyRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cFBhcmFtcywgSHR0cFJlc291cmNlUmVxdWVzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgZW50cmllcyB9IGZyb20gJ0BtbXN0YWNrL29iamVjdCc7XHJcblxyXG5mdW5jdGlvbiBub3JtYWxpemVQYXJhbXMoXHJcbiAgcGFyYW1zOiBSZXF1aXJlZDxIdHRwUmVzb3VyY2VSZXF1ZXN0PlsncGFyYW1zJ10sXHJcbik6IHN0cmluZyB7XHJcbiAgaWYgKHBhcmFtcyBpbnN0YW5jZW9mIEh0dHBQYXJhbXMpIHJldHVybiBwYXJhbXMudG9TdHJpbmcoKTtcclxuXHJcbiAgY29uc3QgcGFyYW1NYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xyXG5cclxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBlbnRyaWVzKHBhcmFtcykpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICBwYXJhbU1hcC5zZXQoa2V5LCB2YWx1ZS5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KS5qb2luKCcsJykpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGFyYW1NYXAuc2V0KGtleSwgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlLnRvU3RyaW5nKCkpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBBcnJheS5mcm9tKHBhcmFtTWFwLmVudHJpZXMoKSlcclxuICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCR7a2V5fT0ke3ZhbHVlfWApXHJcbiAgICAuam9pbignJicpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdXJsV2l0aFBhcmFtcyhyZXE6IEh0dHBSZXNvdXJjZVJlcXVlc3QpOiBzdHJpbmcge1xyXG4gIGlmICghcmVxLnBhcmFtcykgcmV0dXJuIHJlcS51cmw7XHJcblxyXG4gIHJldHVybiBgJHtyZXEudXJsfT8ke25vcm1hbGl6ZVBhcmFtcyhyZXEucGFyYW1zKX1gO1xyXG59XHJcbiJdfQ==","import { HttpClient, httpResource, HttpResponse, } from '@angular/common/http';\nimport { computed, DestroyRef, effect, inject, isDevMode, linkedSignal, untracked, } from '@angular/core';\nimport { toWritable } from '@mmstack/primitives';\nimport { firstValueFrom } from 'rxjs';\nimport { createCircuitBreaker, createEqualRequest, hasSlowConnection, injectQueryCache, persistResourceValues, refresh, retryOnError, setCacheContext, urlWithParams, } from './util';\nexport function queryResource(request, options) {\n const cache = injectQueryCache(options?.injector);\n const destroyRef = options?.injector\n ? options.injector.get(DestroyRef)\n : inject(DestroyRef);\n const cb = createCircuitBreaker(options?.circuitBreaker === true\n ? undefined\n : (options?.circuitBreaker ?? false));\n const stableRequest = computed(() => {\n if (cb.isClosed())\n return undefined;\n return request() ?? undefined;\n }, {\n equal: createEqualRequest(options?.equal),\n });\n const hashFn = typeof options?.cache === 'object'\n ? (options.cache.hash ?? urlWithParams)\n : urlWithParams;\n const staleTime = typeof options?.cache === 'object' ? options.cache.staleTime : 0;\n const ttl = typeof options?.cache === 'object' ? options.cache.ttl : undefined;\n const cacheKey = computed(() => {\n const r = stableRequest();\n if (!r)\n return null;\n return hashFn(r);\n });\n const cachedRequest = options?.cache\n ? computed(() => {\n const r = stableRequest();\n if (!r)\n return r;\n return {\n ...r,\n context: setCacheContext(r.context, {\n staleTime,\n ttl,\n key: cacheKey() ?? hashFn(r),\n }),\n };\n })\n : stableRequest;\n let resource = httpResource(cachedRequest, {\n ...options,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n parse: options?.parse, // Not my favorite thing to do, but here it is completely safe.\n });\n // get full HttpResonse from Cache\n const cachedEvent = cache.get(cacheKey);\n const parse = options?.parse ?? ((val) => val);\n const actualCacheValue = computed(() => {\n const ce = cachedEvent();\n if (!ce || !(ce.value instanceof HttpResponse))\n return;\n return parse(ce.value.body);\n });\n // retains last cache value after it is invalidated for lifetime of resource\n const cachedValue = linkedSignal({\n source: () => actualCacheValue(),\n computation: (source, prev) => {\n if (!source && prev)\n return prev.value;\n return source;\n },\n });\n resource = refresh(resource, destroyRef, options?.refresh);\n resource = retryOnError(resource, options?.retry);\n resource = persistResourceValues(resource, options?.keepPrevious, options?.equal);\n const value = options?.cache\n ? toWritable(computed(() => {\n return cachedValue() ?? resource.value();\n }), resource.value.set, resource.value.update)\n : resource.value;\n const onError = options?.onError; // Put in own variable to ensure value remains even if options are somehow mutated in-line\n if (onError) {\n const onErrorRef = effect(() => {\n const err = resource.error();\n if (err)\n onError(err);\n });\n // cleanup on manual destroy, I'm comfortable setting these props in-line as we have yet to 'release' the object out of this lexical scope\n const destroyRest = resource.destroy;\n resource.destroy = () => {\n onErrorRef.destroy();\n destroyRest();\n };\n }\n // iterate circuit breaker state, is effect as a computed would cause a circular dependency (resource -> cb -> resource)\n const cbEffectRef = effect(() => {\n const status = resource.status();\n if (status === 'error')\n cb.fail();\n else if (status === 'resolved')\n cb.success();\n });\n const set = (value) => {\n resource.value.set(value);\n const k = untracked(cacheKey);\n if (options?.cache && k)\n cache.store(k, new HttpResponse({\n body: value,\n status: 200,\n statusText: 'OK',\n }));\n };\n const update = (updater) => {\n set(updater(untracked(resource.value)));\n };\n const client = options?.injector\n ? options.injector.get(HttpClient)\n : inject(HttpClient);\n return {\n ...resource,\n value,\n set,\n update,\n disabled: computed(() => cb.isClosed() || stableRequest() === undefined),\n reload: () => {\n cb.halfOpen(); // open the circuit for manual reload\n return resource.reload();\n },\n destroy: () => {\n cbEffectRef.destroy();\n cb.destroy();\n resource.destroy();\n },\n prefetch: async (partial) => {\n if (!options?.cache || hasSlowConnection())\n return Promise.resolve();\n const request = untracked(cachedRequest);\n if (!request)\n return Promise.resolve();\n const prefetchRequest = {\n ...request,\n ...partial,\n };\n try {\n await firstValueFrom(client.request(prefetchRequest.method ?? 'GET', prefetchRequest.url, {\n ...prefetchRequest,\n headers: prefetchRequest.headers,\n observe: 'response',\n }));\n return;\n }\n catch (err) {\n if (isDevMode())\n console.error('Prefetch failed: ', err);\n return;\n }\n },\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktcmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yZXNvdXJjZS9zcmMvbGliL3F1ZXJ5LXJlc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxVQUFVLEVBRVYsWUFBWSxFQUNaLFlBQVksR0FJYixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFDTCxRQUFRLEVBQ1IsVUFBVSxFQUNWLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFlBQVksRUFFWixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUVMLG9CQUFvQixFQUNwQixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixxQkFBcUIsRUFDckIsT0FBTyxFQUNQLFlBQVksRUFDWixlQUFlLEVBQ2YsYUFBYSxHQUVkLE1BQU0sUUFBUSxDQUFDO0FBMEdoQixNQUFNLFVBQVUsYUFBYSxDQUMzQixPQUFxRCxFQUNyRCxPQUE2QztJQUU3QyxNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFbEQsTUFBTSxVQUFVLEdBQUcsT0FBTyxFQUFFLFFBQVE7UUFDbEMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztRQUNsQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXZCLE1BQU0sRUFBRSxHQUFHLG9CQUFvQixDQUM3QixPQUFPLEVBQUUsY0FBYyxLQUFLLElBQUk7UUFDOUIsQ0FBQyxDQUFDLFNBQVM7UUFDWCxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsY0FBYyxJQUFJLEtBQUssQ0FB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QUFTLEVBQUU7b0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDekQsT0FBTztZQUNULENBQUM7UUFDSCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEh0dHBDbGllbnQsXHJcbiAgSHR0cEhlYWRlcnMsXHJcbiAgaHR0cFJlc291cmNlLFxyXG4gIEh0dHBSZXNwb25zZSxcclxuICB0eXBlIEh0dHBSZXNvdXJjZU9wdGlvbnMsXHJcbiAgdHlwZSBIdHRwUmVzb3VyY2VSZWYsXHJcbiAgdHlwZSBIdHRwUmVzb3VyY2VSZXF1ZXN0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtcclxuICBjb21wdXRlZCxcclxuICBEZXN0cm95UmVmLFxyXG4gIGVmZmVjdCxcclxuICBpbmplY3QsXHJcbiAgaXNEZXZNb2RlLFxyXG4gIGxpbmtlZFNpZ25hbCxcclxuICBTaWduYWwsXHJcbiAgdW50cmFja2VkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0b1dyaXRhYmxlIH0gZnJvbSAnQG1tc3RhY2svcHJpbWl0aXZlcyc7XHJcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgQ2lyY3VpdEJyZWFrZXJPcHRpb25zLFxyXG4gIGNyZWF0ZUNpcmN1aXRCcmVha2VyLFxyXG4gIGNyZWF0ZUVxdWFsUmVxdWVzdCxcclxuICBoYXNTbG93Q29ubmVjdGlvbixcclxuICBpbmplY3RRdWVyeUNhY2hlLFxyXG4gIHBlcnNpc3RSZXNvdXJjZVZhbHVlcyxcclxuICByZWZyZXNoLFxyXG4gIHJldHJ5T25FcnJvcixcclxuICBzZXRDYWNoZUNvbnRleHQsXHJcbiAgdXJsV2l0aFBhcmFtcyxcclxuICB0eXBlIFJldHJ5T3B0aW9ucyxcclxufSBmcm9tICcuL3V0aWwnO1xyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGNhY2hpbmcgYmVoYXZpb3Igb2YgYSBgcXVlcnlSZXNvdXJjZWAuXHJcbiAqIC0gYHRydWVgOiBFbmFibGVzIGNhY2hpbmcgd2l0aCBkZWZhdWx0IHNldHRpbmdzLlxyXG4gKiAtIGB7IHR0bD86IG51bWJlcjsgc3RhbGVUaW1lPzogbnVtYmVyOyBoYXNoPzogKHJlcTogSHR0cFJlc291cmNlUmVxdWVzdCkgPT4gc3RyaW5nOyB9YDogIENvbmZpZ3VyZXMgY2FjaGluZyB3aXRoIGN1c3RvbSBzZXR0aW5ncy5cclxuICovXHJcbnR5cGUgUmVzb3VyY2VDYWNoZU9wdGlvbnMgPVxyXG4gIHwgdHJ1ZVxyXG4gIHwge1xyXG4gICAgICAvKipcclxuICAgICAgICogVGhlIFRpbWUgVG8gTGl2ZSAoVFRMKSBmb3IgdGhlIGNhY2hlZCBkYXRhLCBpbiBtaWxsaXNlY29uZHMuIEFmdGVyIHRoaXMgdGltZSwgdGhlIGNhY2hlZCBkYXRhIGlzXHJcbiAgICAgICAqIGNvbnNpZGVyZWQgZXhwaXJlZCBhbmQgd2lsbCBiZSByZWZldGNoZWQuXHJcbiAgICAgICAqL1xyXG4gICAgICB0dGw/OiBudW1iZXI7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBUaGUgZHVyYXRpb24sIGluIG1pbGxpc2Vjb25kcywgZHVyaW5nIHdoaWNoIHN0YWxlIGRhdGEgY2FuIGJlIHNlcnZlZCB3aGlsZSBhIHJldmFsaWRhdGlvbiByZXF1ZXN0XHJcbiAgICAgICAqIGlzIG1hZGUgaW4gdGhlIGJhY2tncm91bmQuXHJcbiAgICAgICAqL1xyXG4gICAgICBzdGFsZVRpbWU/OiBudW1iZXI7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBBIGN1c3RvbSBmdW5jdGlvbiB0byBnZW5lcmF0ZSB0aGUgY2FjaGUga2V5LiBEZWZhdWx0cyB0byB1c2luZyB0aGUgcmVxdWVzdCBVUkwgd2l0aCBwYXJhbWV0ZXJzLlxyXG4gICAgICAgKiBQcm92aWRlIGEgY3VzdG9tIGhhc2ggZnVuY3Rpb24gaWYgeW91IG5lZWQgbW9yZSBjb250cm9sIG92ZXIgaG93IGNhY2hlIGtleXMgYXJlIGdlbmVyYXRlZCxcclxuICAgICAgICogZm9yIGluc3RhbmNlLCB0byBpZ25vcmUgY2VydGFpbiBxdWVyeSBwYXJhbWV0ZXJzIG9yIHRvIHVzZSByZXF1ZXN0IGJvZHkgZm9yIHRoZSBjYWNoZSBrZXkuXHJcbiAgICAgICAqL1xyXG4gICAgICBoYXNoPzogKHJlcTogSHR0cFJlc291cmNlUmVxdWVzdCkgPT4gc3RyaW5nO1xyXG4gICAgfTtcclxuXHJcbi8qKlxyXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyBhIGBxdWVyeVJlc291cmNlYC5cclxuICovXHJcbmV4cG9ydCB0eXBlIFF1ZXJ5UmVzb3VyY2VPcHRpb25zPFRSZXN1bHQsIFRSYXcgPSBUUmVzdWx0PiA9IEh0dHBSZXNvdXJjZU9wdGlvbnM8XHJcbiAgVFJlc3VsdCxcclxuICBUUmF3XHJcbj4gJiB7XHJcbiAgLyoqXHJcbiAgICogV2hldGhlciB0byBrZWVwIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgcmVzb3VyY2Ugd2hpbGUgYSByZWZyZXNoIGlzIGluIHByb2dyZXNzLlxyXG4gICAqIERlZmF1bHRzIHRvIGBmYWxzZWAuIEFsc28ga2VlcHMgc3RhdHVzICYgaGVhZGVycyB3aGlsZSByZWZyZXNoaW5nLlxyXG4gICAqL1xyXG4gIGtlZXBQcmV2aW91cz86IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICogVGhlIHJlZnJlc2ggaW50ZXJ2YWwsIGluIG1pbGxpc2Vjb25kcy4gSWYgcHJvdmlkZWQsIHRoZSByZXNvdXJjZSB3aWxsIGF1dG9tYXRpY2FsbHlcclxuICAgKiByZWZyZXNoIGl0cyBkYXRhIGF0IHRoZSBzcGVjaWZpZWQgaW50ZXJ2YWwuXHJcbiAgICovXHJcbiAgcmVmcmVzaD86IG51bWJlcjtcclxuICAvKipcclxuICAgKiBPcHRpb25zIGZvciByZXRyeWluZyBmYWlsZWQgcmVxdWVzdHMuXHJcbiAgICovXHJcbiAgcmV0cnk/OiBSZXRyeU9wdGlvbnM7XHJcbiAgLyoqXHJcbiAgICogQW4gb3B0aW9uYWwgZXJyb3IgaGFuZGxlciBjYWxsYmFjay4gIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlXHJcbiAgICogdW5kZXJseWluZyBIVFRQIHJlcXVlc3QgZmFpbHMuIFVzZWZ1bCBmb3IgZGlzcGxheWluZyB0b2FzdHMgb3Igb3RoZXIgZXJyb3IgbWVzc2FnZXMuXHJcbiAgICovXHJcbiAgb25FcnJvcj86IChlcnI6IHVua25vd24pID0+IHZvaWQ7XHJcbiAgLyoqXHJcbiAgICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgYSBjaXJjdWl0IGJyZWFrZXIgZm9yIHRoZSByZXNvdXJjZS5cclxuICAgKi9cclxuICBjaXJjdWl0QnJlYWtlcj86IENpcmN1aXRCcmVha2VyT3B0aW9ucyB8IHRydWU7XHJcbiAgLyoqXHJcbiAgICogT3B0aW9ucyBmb3IgZW5hYmxpbmcgYW5kIGNvbmZpZ3VyaW5nIGNhY2hpbmcgZm9yIHRoZSByZXNvdXJjZS5cclxuICAgKi9cclxuICBjYWNoZT86IFJlc291cmNlQ2FjaGVPcHRpb25zO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlcHJlc2VudHMgYSByZXNvdXJjZSBjcmVhdGVkIGJ5IGBxdWVyeVJlc291cmNlYC4gRXh0ZW5kcyBgSHR0cFJlc291cmNlUmVmYCB3aXRoIGFkZGl0aW9uYWwgcHJvcGVydGllcy5cclxuICovXHJcbmV4cG9ydCB0eXBlIFF1ZXJ5UmVzb3VyY2VSZWY8VFJlc3VsdD4gPSBIdHRwUmVzb3VyY2VSZWY8VFJlc3VsdD4gJiB7XHJcbiAgLyoqXHJcbiAgICogQSBzaWduYWwgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSByZXNvdXJjZSBpcyBjdXJyZW50bHkgZGlzYWJsZWQgKGR1ZSB0byBjaXJjdWl0IGJyZWFrZXIgb3IgdW5kZWZpbmVkIHJlcXVlc3QpLlxyXG4gICAqL1xyXG4gIGRpc2FibGVkOiBTaWduYWw8Ym9vbGVhbj47XHJcbiAgLyoqXHJcbiAgICogUHJlZmV0Y2hlcyBkYXRhIGZvciB0aGUgcmVzb3VyY2UsIHBvcHVsYXRpbmcgdGhlIGNhY2hlIGlmIGNhY2hpbmcgaXMgZW5hYmxlZC4gIFRoaXMgY2FuIGJlXHJcbiAgICogdXNlZCB0byBwcm9hY3RpdmVseSBsb2FkIGRhdGEgYmVmb3JlIGl0J3MgbmVlZGVkLiAgSWYgYSBzbG93IGNvbm5lY3Rpb24gaXMgZGV0ZWN0ZWQsIHByZWZldGNoaW5nIGlzIHNraXBwZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gcmVxIC0gT3B0aW9uYWwgcGFydGlhbCByZXF1ZXN0IHBhcmFtZXRlcnMgdG8gdXNlIGZvciB0aGUgcHJlZmV0Y2guICBUaGlzIGFsbG93cyB5b3VcclxuICAgKiAgICAgICAgICAgICAgdG8gcHJlZmV0Y2ggZGF0YSB3aXRoIGRpZmZlcmVudCBwYXJhbWV0ZXJzIHRoYW4gdGhlIG1haW4gcmVzb3VyY2UgcmVxdWVzdC5cclxuICAgKi9cclxuICBwcmVmZXRjaDogKHJlcT86IFBhcnRpYWw8SHR0cFJlc291cmNlUmVxdWVzdD4pID0+IFByb21pc2U8dm9pZD47XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlSZXNvdXJjZTxUUmVzdWx0LCBUUmF3ID0gVFJlc3VsdD4oXHJcbiAgcmVxdWVzdDogKCkgPT4gSHR0cFJlc291cmNlUmVxdWVzdCB8IHVuZGVmaW5lZCB8IHZvaWQsXHJcbiAgb3B0aW9uczogUXVlcnlSZXNvdXJjZU9wdGlvbnM8VFJlc3VsdCwgVFJhdz4gJiB7XHJcbiAgICBkZWZhdWx0VmFsdWU6IE5vSW5mZXI8VFJlc3VsdD47XHJcbiAgfSxcclxuKTogUXVlcnlSZXNvdXJjZVJlZjxUUmVzdWx0PjtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGFuIGV4dGVuZGVkIEhUVFAgcmVzb3VyY2Ugd2l0aCBmZWF0dXJlcyBsaWtlIGNhY2hpbmcsIHJldHJpZXMsIHJlZnJlc2ggaW50ZXJ2YWxzLFxyXG4gKiBjaXJjdWl0IGJyZWFrZXIsIGFuZCBvcHRpbWlzdGljIHVwZGF0ZXMuIFdpdGhvdXQgYWRkaXRpb25hbCBvcHRpb25zIGl0IGlzIGVxdWl2YWxlbnQgdG8gc2ltcGx5IGNhbGxpbmcgYGh0dHBSZXNvdXJjZWAuXHJcbiAqXHJcbiAqIEBwYXJhbSByZXF1ZXN0IEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBgSHR0cFJlc291cmNlUmVxdWVzdGAgdG8gYmUgbWFkZS4gIFRoaXMgZnVuY3Rpb25cclxuICogICAgICAgICAgICAgICAgaXMgY2FsbGVkIHJlYWN0aXZlbHksIHNvIHRoZSByZXF1ZXN0IGNhbiBjaGFuZ2Ugb3ZlciB0aW1lLiAgSWYgdGhlIGZ1bmN0aW9uXHJcbiAqICAgICAgICAgICAgICAgIHJldHVybnMgYHVuZGVmaW5lZGAsIHRoZSByZXNvdXJjZSBpcyBjb25zaWRlcmVkIFwiZGlzYWJsZWRcIiBhbmQgbm8gcmVxdWVzdCB3aWxsIGJlIG1hZGUuXHJcbiAqIEBwYXJhbSBvcHRpb25zIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHJlc291cmNlLiAgVGhlc2Ugb3B0aW9ucyBleHRlbmQgdGhlIGJhc2ljXHJcbiAqICAgICAgICAgICAgICAgIGBIdHRwUmVzb3VyY2VPcHRpb25zYCBhbmQgYWRkIGZlYXR1cmVzIGxpa2UgYGtlZXBQcmV2aW91c2AsIGByZWZyZXNoYCwgYHJldHJ5YCxcclxuICogICAgICAgICAgICAgICAgYG9uRXJyb3JgLCBgY2lyY3VpdEJyZWFrZXJgLCBhbmQgYGNhY2hlYC5cclxuICogQHJldHVybnMgQW4gYFF1ZXJ5UmVzb3VyY2VSZWZgIGluc3RhbmNlLCB3aGljaCBleHRlbmRzIHRoZSBiYXNpYyBgSHR0cFJlc291cmNlUmVmYCB3aXRoIGFkZGl0aW9uYWwgZmVhdHVyZXMuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlSZXNvdXJjZTxUUmVzdWx0LCBUUmF3ID0gVFJlc3VsdD4oXHJcbiAgcmVxdWVzdDogKCkgPT4gSHR0cFJlc291cmNlUmVxdWVzdCB8IHVuZGVmaW5lZCB8IHZvaWQsXHJcbiAgb3B0aW9ucz86IFF1ZXJ5UmVzb3VyY2VPcHRpb25zPFRSZXN1bHQsIFRSYXc+LFxyXG4pOiBRdWVyeVJlc291cmNlUmVmPFRSZXN1bHQgfCB1bmRlZmluZWQ+O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5UmVzb3VyY2U8VFJlc3VsdCwgVFJhdyA9IFRSZXN1bHQ+KFxyXG4gIHJlcXVlc3Q6ICgpID0+IEh0dHBSZXNvdXJjZVJlcXVlc3QgfCB1bmRlZmluZWQgfCB2b2lkLFxyXG4gIG9wdGlvbnM/OiBRdWVyeVJlc291cmNlT3B0aW9uczxUUmVzdWx0LCBUUmF3PixcclxuKTogUXVlcnlSZXNvdXJjZVJlZjxUUmVzdWx0IHwgdW5kZWZpbmVkPiB7XHJcbiAgY29uc3QgY2FjaGUgPSBpbmplY3RRdWVyeUNhY2hlKG9wdGlvbnM/LmluamVjdG9yKTtcclxuXHJcbiAgY29uc3QgZGVzdHJveVJlZiA9IG9wdGlvbnM/LmluamVjdG9yXHJcbiAgICA/IG9wdGlvbnMuaW5qZWN0b3IuZ2V0KERlc3Ryb3lSZWYpXHJcbiAgICA6IGluamVjdChEZXN0cm95UmVmKTtcclxuXHJcbiAgY29uc3QgY2IgPSBjcmVhdGVDaXJjdWl0QnJlYWtlcihcclxuICAgIG9wdGlvbnM/LmNpcmN1aXRCcmVha2VyID09PSB0cnVlXHJcbiAgICAgID8gdW5kZWZpbmVkXHJcbiAgICAgIDogKG9wdGlvbnM/LmNpcmN1aXRCcmVha2VyID8/IGZhbHNlKSxcclxuICApO1xyXG5cclxuICBjb25zdCBzdGFibGVSZXF1ZXN0ID0gY29tcHV0ZWQoXHJcbiAgICAoKSA9PiB7XHJcbiAgICAgIGlmIChjYi5pc0Nsb3NlZCgpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICByZXR1cm4gcmVxdWVzdCgpID8/IHVuZGVmaW5lZDtcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGVxdWFsOiBjcmVhdGVFcXVhbFJlcXVlc3Qob3B0aW9ucz8uZXF1YWwpLFxyXG4gICAgfSxcclxuICApO1xyXG5cclxuICBjb25zdCBoYXNoRm4gPVxyXG4gICAgdHlwZW9mIG9wdGlvbnM/LmNhY2hlID09PSAnb2JqZWN0J1xyXG4gICAgICA/IChvcHRpb25zLmNhY2hlLmhhc2ggPz8gdXJsV2l0aFBhcmFtcylcclxuICAgICAgOiB1cmxXaXRoUGFyYW1zO1xyXG5cclxuICBjb25zdCBzdGFsZVRpbWUgPVxyXG4gICAgdHlwZW9mIG9wdGlvbnM/LmNhY2hlID09PSAnb2JqZWN0JyA/IG9wdGlvbnMuY2FjaGUuc3RhbGVUaW1lIDogMDtcclxuICBjb25zdCB0dGwgPVxyXG4gICAgdHlwZW9mIG9wdGlvbnM/LmNhY2hlID09PSAnb2JqZWN0JyA/IG9wdGlvbnMuY2FjaGUudHRsIDogdW5kZWZpbmVkO1xyXG5cclxuICBjb25zdCBjYWNoZUtleSA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGNvbnN0IHIgPSBzdGFibGVSZXF1ZXN0KCk7XHJcbiAgICBpZiAoIXIpIHJldHVybiBudWxsO1xyXG4gICAgcmV0dXJuIGhhc2hGbihyKTtcclxuICB9KTtcclxuXHJcbiAgY29uc3QgY2FjaGVkUmVxdWVzdCA9IG9wdGlvbnM/LmNhY2hlXHJcbiAgICA/IGNvbXB1dGVkKCgpID0+IHtcclxuICAgICAgICBjb25zdCByID0gc3RhYmxlUmVxdWVzdCgpO1xyXG4gICAgICAgIGlmICghcikgcmV0dXJuIHI7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi5yLFxyXG4gICAgICAgICAgY29udGV4dDogc2V0Q2FjaGVDb250ZXh0KHIuY29udGV4dCwge1xyXG4gICAgICAgICAgICBzdGFsZVRpbWUsXHJcbiAgICAgICAgICAgIHR0bCxcclxuICAgICAgICAgICAga2V5OiBjYWNoZUtleSgpID8/IGhhc2hGbihyKSxcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pXHJcbiAgICA6IHN0YWJsZVJlcXVlc3Q7XHJcblxyXG4gIGxldCByZXNvdXJjZSA9IGh0dHBSZXNvdXJjZTxUUmVzdWx0PihjYWNoZWRSZXF1ZXN0LCB7XHJcbiAgICAuLi5vcHRpb25zLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgIHBhcnNlOiBvcHRpb25zPy5wYXJzZSBhcyBhbnksIC8vIE5vdCBteSBmYXZvcml0ZSB0aGluZyB0byBkbywgYnV0IGhlcmUgaXQgaXMgY29tcGxldGVseSBzYWZlLlxyXG4gIH0pIGFzIEh0dHBSZXNvdXJjZVJlZjxUUmVzdWx0PjtcclxuXHJcbiAgLy8gZ2V0IGZ1bGwgSHR0cFJlc29uc2UgZnJvbSBDYWNoZVxyXG4gIGNvbnN0IGNhY2hlZEV2ZW50ID0gY2FjaGUuZ2V0KGNhY2hlS2V5KTtcclxuXHJcbiAgY29uc3QgcGFyc2UgPSBvcHRpb25zPy5wYXJzZSA/PyAoKHZhbDogVFJhdykgPT4gdmFsIGFzIHVua25vd24gYXMgVFJlc3VsdCk7XHJcblxyXG4gIGNvbnN0IGFjdHVhbENhY2hlVmFsdWUgPSBjb21wdXRlZCgoKTogVFJlc3VsdCB8IHVuZGVmaW5lZCA9PiB7XHJcbiAgICBjb25zdCBjZSA9IGNhY2hlZEV2ZW50KCk7XHJcbiAgICBpZiAoIWNlIHx8ICEoY2UudmFsdWUgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UpKSByZXR1cm47XHJcbiAgICByZXR1cm4gcGFyc2UoY2UudmFsdWUuYm9keSBhcyBUUmF3KTtcclxuICB9KTtcclxuXHJcbiAgLy8gcmV0YWlucyBsYXN0IGNhY2hlIHZhbHVlIGFmdGVyIGl0IGlzIGludmFsaWRhdGVkIGZvciBsaWZldGltZSBvZiByZXNvdXJjZVxyXG4gIGNvbnN0IGNhY2hlZFZhbHVlID0gbGlua2VkU2lnbmFsPFRSZXN1bHQgfCB1bmRlZmluZWQsIFRSZXN1bHQgfCB1bmRlZmluZWQ+KHtcclxuICAgIHNvdXJjZTogKCkgPT4gYWN0dWFsQ2FjaGVWYWx1ZSgpLFxyXG4gICAgY29tcHV0YXRpb246IChzb3VyY2UsIHByZXYpID0+IHtcclxuICAgICAgaWYgKCFzb3VyY2UgJiYgcHJldikgcmV0dXJuIHByZXYudmFsdWU7XHJcbiAgICAgIHJldHVybiBzb3VyY2U7XHJcbiAgICB9LFxyXG4gIH0pO1xyXG5cclxuICByZXNvdXJjZSA9IHJlZnJlc2gocmVzb3VyY2UsIGRlc3Ryb3lSZWYsIG9wdGlvbnM/LnJlZnJlc2gpO1xyXG4gIHJlc291cmNlID0gcmV0cnlPbkVycm9yKHJlc291cmNlLCBvcHRpb25zPy5yZXRyeSk7XHJcblxyXG4gIHJlc291cmNlID0gcGVyc2lzdFJlc291cmNlVmFsdWVzPFRSZXN1bHQ+KFxyXG4gICAgcmVzb3VyY2UsXHJcbiAgICBvcHRpb25zPy5rZWVwUHJldmlvdXMsXHJcbiAgICBvcHRpb25zPy5lcXVhbCxcclxuICApO1xyXG5cclxuICBjb25zdCB2YWx1ZSA9IG9wdGlvbnM/LmNhY2hlXHJcbiAgICA/IHRvV3JpdGFibGUoXHJcbiAgICAgICAgY29tcHV0ZWQoKCk6IFRSZXN1bHQgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGNhY2hlZFZhbHVlKCkgPz8gcmVzb3VyY2UudmFsdWUoKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICByZXNvdXJjZS52YWx1ZS5zZXQsXHJcbiAgICAgICAgcmVzb3VyY2UudmFsdWUudXBkYXRlLFxyXG4gICAgICApXHJcbiAgICA6IHJlc291cmNlLnZhbHVlO1xyXG5cclxuICBjb25zdCBvbkVycm9yID0gb3B0aW9ucz8ub25FcnJvcjsgLy8gUHV0IGluIG93biB2YXJpYWJsZSB0byBlbnN1cmUgdmFsdWUgcmVtYWlucyBldmVuIGlmIG9wdGlvbnMgYXJlIHNvbWVob3cgbXV0YXRlZCBpbi1saW5lXHJcbiAgaWYgKG9uRXJyb3IpIHtcclxuICAgIGNvbnN0IG9uRXJyb3JSZWYgPSBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICBjb25zdCBlcnIgPSByZXNvdXJjZS5lcnJvcigpO1xyXG4gICAgICBpZiAoZXJyKSBvbkVycm9yKGVycik7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBjbGVhbnVwIG9uIG1hbnVhbCBkZXN0cm95LCBJJ20gY29tZm9ydGFibGUgc2V0dGluZyB0aGVzZSBwcm9wcyBpbi1saW5lIGFzIHdlIGhhdmUgeWV0IHRvICdyZWxlYXNlJyB0aGUgb2JqZWN0IG91dCBvZiB0aGlzIGxleGljYWwgc2NvcGVcclxuICAgIGNvbnN0IGRlc3Ryb3lSZXN0ID0gcmVzb3VyY2UuZGVzdHJveTtcclxuICAgIHJlc291cmNlLmRlc3Ryb3kgPSAoKSA9PiB7XHJcbiAgICAgIG9uRXJyb3JSZWYuZGVzdHJveSgpO1xyXG4gICAgICBkZXN0cm95UmVzdCgpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8vIGl0ZXJhdGUgY2lyY3VpdCBicmVha2VyIHN0YXRlLCBpcyBlZmZlY3QgYXMgYSBjb21wdXRlZCB3b3VsZCBjYXVzZSBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgKHJlc291cmNlIC0+IGNiIC0+IHJlc291cmNlKVxyXG4gIGNvbnN0IGNiRWZmZWN0UmVmID0gZWZmZWN0KCgpID0+IHtcclxuICAgIGNvbnN0IHN0YXR1cyA9IHJlc291cmNlLnN0YXR1cygpO1xyXG4gICAgaWYgKHN0YXR1cyA9PT0gJ2Vycm9yJykgY2IuZmFpbCgpO1xyXG4gICAgZWxzZSBpZiAoc3RhdHVzID09PSAncmVzb2x2ZWQnKSBjYi5zdWNjZXNzKCk7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IHNldCA9ICh2YWx1ZTogVFJlc3VsdCkgPT4ge1xyXG4gICAgcmVzb3VyY2UudmFsdWUuc2V0KHZhbHVlKTtcclxuICAgIGNvbnN0IGsgPSB1bnRyYWNrZWQoY2FjaGVLZXkpO1xyXG4gICAgaWYgKG9wdGlvbnM/LmNhY2hlICYmIGspXHJcbiAgICAgIGNhY2hlLnN0b3JlKFxyXG4gICAgICAgIGssXHJcbiAgICAgICAgbmV3IEh0dHBSZXNwb25zZSh7XHJcbiAgICAgICAgICBib2R5OiB2YWx1ZSxcclxuICAgICAgICAgIHN0YXR1czogMjAwLFxyXG4gICAgICAgICAgc3RhdHVzVGV4dDogJ09LJyxcclxuICAgICAgICB9KSxcclxuICAgICAgKTtcclxuICB9O1xyXG5cclxuICBjb25zdCB1cGRhdGUgPSAodXBkYXRlcjogKHZhbHVlOiBUUmVzdWx0KSA9PiBUUmVzdWx0KSA9PiB7XHJcbiAgICBzZXQodXBkYXRlcih1bnRyYWNrZWQocmVzb3VyY2UudmFsdWUpKSk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgY2xpZW50ID0gb3B0aW9ucz8uaW5qZWN0b3JcclxuICAgID8gb3B0aW9ucy5pbmplY3Rvci5nZXQoSHR0cENsaWVudClcclxuICAgIDogaW5qZWN0KEh0dHBDbGllbnQpO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgLi4ucmVzb3VyY2UsXHJcbiAgICB2YWx1ZSxcclxuICAgIHNldCxcclxuICAgIHVwZGF0ZSxcclxuICAgIGRpc2FibGVkOiBjb21wdXRlZCgoKSA9PiBjYi5pc0Nsb3NlZCgpIHx8IHN0YWJsZVJlcXVlc3QoKSA9PT0gdW5kZWZpbmVkKSxcclxuICAgIHJlbG9hZDogKCkgPT4ge1xyXG4gICAgICBjYi5oYWxmT3BlbigpOyAvLyBvcGVuIHRoZSBjaXJjdWl0IGZvciBtYW51YWwgcmVsb2FkXHJcbiAgICAgIHJldHVybiByZXNvdXJjZS5yZWxvYWQoKTtcclxuICAgIH0sXHJcbiAgICBkZXN0cm95OiAoKSA9PiB7XHJcbiAgICAgIGNiRWZmZWN0UmVmLmRlc3Ryb3koKTtcclxuICAgICAgY2IuZGVzdHJveSgpO1xyXG4gICAgICByZXNvdXJjZS5kZXN0cm95KCk7XHJcbiAgICB9LFxyXG4gICAgcHJlZmV0Y2g6IGFzeW5jIChwYXJ0aWFsKSA9PiB7XHJcbiAgICAgIGlmICghb3B0aW9ucz8uY2FjaGUgfHwgaGFzU2xvd0Nvbm5lY3Rpb24oKSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG5cclxuICAgICAgY29uc3QgcmVxdWVzdCA9IHVudHJhY2tlZChjYWNoZWRSZXF1ZXN0KTtcclxuICAgICAgaWYgKCFyZXF1ZXN0KSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcblxyXG4gICAgICBjb25zdCBwcmVmZXRjaFJlcXVlc3QgPSB7XHJcbiAgICAgICAgLi4ucmVxdWVzdCxcclxuICAgICAgICAuLi5wYXJ0aWFsLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICAgIGNsaWVudC5yZXF1ZXN0PFRSYXc+KFxyXG4gICAgICAgICAgICBwcmVmZXRjaFJlcXVlc3QubWV0aG9kID8/ICdHRVQnLFxyXG4gICAgICAgICAgICBwcmVmZXRjaFJlcXVlc3QudXJsLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgLi4ucHJlZmV0Y2hSZXF1ZXN0LFxyXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHByZWZldGNoUmVxdWVzdC5oZWFkZXJzIGFzIEh0dHBIZWFkZXJzLFxyXG4gICAgICAgICAgICAgIG9ic2VydmU6ICdyZXNwb25zZScsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSBjb25zb2xlLmVycm9yKCdQcmVmZXRjaCBmYWlsZWQ6ICcsIGVycik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gIH07XHJcbn1cclxuIl19","import { computed, DestroyRef, inject, signal, } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { combineLatestWith, filter, map } from 'rxjs';\nimport { queryResource, } from './query-resource';\nimport { createEqualRequest } from './util';\n/**\n * Creates a resource for performing mutations (e.g., POST, PUT, PATCH, DELETE requests).\n * Unlike `queryResource`, `mutationResource` is designed for one-off operations that change data.\n * It does *not* cache responses and does not provide a `value` signal. Instead, it focuses on\n * managing the mutation lifecycle (pending, error, success) and provides callbacks for handling\n * these states.\n *\n * @param request A function that returns the base `HttpResourceRequest` to be made. This\n * function is called reactively. Unlike `queryResource`, the `body` property\n * of the request is provided when `mutate` is called, *not* here. If the\n * function returns `undefined`, the mutation is considered \"disabled.\" All properties,\n * except the body, can be set here.\n * @param options Configuration options for the mutation resource. This includes callbacks\n * for `onMutate`, `onError`, `onSuccess`, and `onSettled`.\n * @typeParam TResult - The type of the expected result from the mutation.\n * @typeParam TRaw - The raw response type from the HTTP request (defaults to TResult).\n * @typeParam TCTX - The type of the context value returned by `onMutate`.\n * @returns A `MutationResourceRef` instance, which provides methods for triggering the mutation\n * and observing its status.\n */\nexport function mutationResource(request, options = {}) {\n const { onMutate, onError, onSuccess, onSettled, equal, ...rest } = options;\n const requestEqual = createEqualRequest(equal);\n const baseRequest = computed(() => request() ?? undefined, {\n equal: requestEqual,\n });\n const nextRequest = signal(null, {\n equal: (a, b) => {\n if (!a && !b)\n return true;\n if (!a || !b)\n return false;\n return requestEqual(a, b);\n },\n });\n const req = computed(() => {\n const nr = nextRequest();\n if (!nr)\n return;\n const base = baseRequest();\n const url = nr.url ?? base?.url;\n if (!url)\n return;\n const method = nr.method ?? base?.method;\n return {\n ...base,\n ...nr,\n url,\n method,\n };\n });\n const resource = queryResource(req, {\n ...rest,\n defaultValue: null, // doesnt matter since .value is not accessible\n });\n let ctx = undefined;\n const destroyRef = options.injector\n ? options.injector.get(DestroyRef)\n : inject(DestroyRef);\n const error$ = toObservable(resource.error);\n const value$ = toObservable(resource.value);\n const statusSub = toObservable(resource.status)\n .pipe(combineLatestWith(error$, value$), map(([status, error, value]) => {\n if (status === 'error' && error) {\n return {\n status: 'error',\n error,\n };\n }\n if (status === 'resolved' && value !== null) {\n return {\n status: 'resolved',\n value,\n };\n }\n return null;\n }), filter((v) => v !== null), takeUntilDestroyed(destroyRef))\n .subscribe((result) => {\n if (result.status === 'error')\n onError?.(result.error, ctx);\n else\n onSuccess?.(result.value, ctx);\n onSettled?.(ctx);\n ctx = undefined;\n nextRequest.set(null);\n });\n return {\n ...resource,\n destroy: () => {\n statusSub.unsubscribe();\n resource.destroy();\n },\n mutate: (value, ictx) => {\n ctx = onMutate?.(value.body, ictx);\n nextRequest.set(value);\n },\n current: nextRequest,\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXV0YXRpb24tcmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yZXNvdXJjZS9zcmMvbGliL211dGF0aW9uLXJlc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsVUFBVSxFQUNWLE1BQU0sRUFFTixNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RELE9BQU8sRUFDTCxhQUFhLEdBR2QsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxRQUFRLENBQUM7QUEyRzVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQVE5QixPQUdRLEVBQ1IsVUFBMEUsRUFBRTtJQUU1RSxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUU1RSxNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUUvQyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksU0FBUyxFQUFFO1FBQ3pELEtBQUssRUFBRSxZQUFZO0tBQ3BCLENBQUMsQ0FBQztJQUVILE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FFeEIsSUFBSSxFQUFFO1FBQ04sS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2QsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQUUsT0FBTyxJQUFJ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LFdBQVcsRUFBRSxDQUFDO1lBQ3hCLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNyQixDQUFDO1FBQ0QsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ3RCLEdBQUcsR0FBRyxRQUFRLEVBQUUsQ0FDYixLQUF3QyxDQUFDLElBQWlCLEVBQzNELElBQUksQ0FDRyxDQUFDO1lBQ1YsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixDQUFDO1FBQ0QsT0FBTyxFQUFFLFdBQVc7S0FDckIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIEh0dHBSZXNvdXJjZVJlcXVlc3QgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7XHJcbiAgY29tcHV0ZWQsXHJcbiAgRGVzdHJveVJlZixcclxuICBpbmplY3QsXHJcbiAgU2lnbmFsLFxyXG4gIHNpZ25hbCxcclxuICBWYWx1ZUVxdWFsaXR5Rm4sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0V2l0aCwgZmlsdGVyLCBtYXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICBxdWVyeVJlc291cmNlLFxyXG4gIHR5cGUgUXVlcnlSZXNvdXJjZU9wdGlvbnMsXHJcbiAgdHlwZSBRdWVyeVJlc291cmNlUmVmLFxyXG59IGZyb20gJy4vcXVlcnktcmVzb3VyY2UnO1xyXG5pbXBvcnQgeyBjcmVhdGVFcXVhbFJlcXVlc3QgfSBmcm9tICcuL3V0aWwnO1xyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKiBIZWxwZXIgdHlwZSBmb3IgaW5mZXJyaW5nIHRoZSByZXF1ZXN0IGJvZHkgdHlwZSBiYXNlZCBvbiB0aGUgSFRUUCBtZXRob2QuXHJcbiAqL1xyXG50eXBlIE5leHRSZXF1ZXN0PFxyXG4gIFRNZXRob2QgZXh0ZW5kcyBIdHRwUmVzb3VyY2VSZXF1ZXN0WydtZXRob2QnXSxcclxuICBUTXV0YXRpb24sXHJcbj4gPSBUTWV0aG9kIGV4dGVuZHMgJ0RFTEVURScgfCAnZGVsZXRlJ1xyXG4gID8gT21pdDxIdHRwUmVzb3VyY2VSZXF1ZXN0LCAnYm9keScgfCAnbWV0aG9kJz4gJiB7IG1ldGhvZD86IFRNZXRob2QgfVxyXG4gIDogT21pdDxIdHRwUmVzb3VyY2VSZXF1ZXN0LCAnYm9keScgfCAnbWV0aG9kJz4gJiB7XHJcbiAgICAgIGJvZHk6IFRNdXRhdGlvbjtcclxuICAgICAgbWV0aG9kPzogVE1ldGhvZDtcclxuICAgIH07XHJcblxyXG4vKipcclxuICogQGludGVybmFsXHJcbiAqIEhlbHBlciB0eXBlIGZvciB0cmFja2luZyBtdXRhdGlvbiBzdGF0dXMuXHJcbiAqL1xyXG50eXBlIFN0YXR1c1Jlc3VsdDxUUmVzdWx0PiA9XHJcbiAgfCB7XHJcbiAgICAgIHN0YXR1czogJ2Vycm9yJztcclxuICAgICAgZXJyb3I6IHVua25vd247XHJcbiAgICB9XHJcbiAgfCB7XHJcbiAgICAgIHN0YXR1czogJ3Jlc29sdmVkJztcclxuICAgICAgdmFsdWU6IFRSZXN1bHQ7XHJcbiAgICB9O1xyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGEgYG11dGF0aW9uUmVzb3VyY2VgLlxyXG4gKlxyXG4gKiBAdHlwZVBhcmFtIFRSZXN1bHQgLSBUaGUgdHlwZSBvZiB0aGUgZXhwZWN0ZWQgcmVzdWx0IGZyb20gdGhlIG11dGF0aW9uLlxyXG4gKiBAdHlwZVBhcmFtIFRSYXcgLSBUaGUgcmF3IHJlc3BvbnNlIHR5cGUgZnJvbSB0aGUgSFRUUCByZXF1ZXN0IChkZWZhdWx0cyB0byBUUmVzdWx0KS5cclxuICogQHR5cGVQYXJhbSBUQ1RYIC0gVGhlIHR5cGUgb2YgdGhlIGNvbnRleHQgdmFsdWUgcmV0dXJuZWQgYnkgYG9uTXV0YXRlYC5cclxuICovXHJcbmV4cG9ydCB0eXBlIE11dGF0aW9uUmVzb3VyY2VPcHRpb25zPFxyXG4gIFRSZXN1bHQsXHJcbiAgVFJhdyA9IFRSZXN1bHQsXHJcbiAgVE11dGF0aW9uID0gVFJlc3VsdCxcclxuICBUQ1RYID0gdm9pZCxcclxuICBUSUNUWCA9IFRDVFgsXHJcbj4gPSBPbWl0PFxyXG4gIFF1ZXJ5UmVzb3VyY2VPcHRpb25zPFRSZXN1bHQsIFRSYXc+LFxyXG4gICdlcXVhbCcgfCAnb25FcnJvcicgfCAna2VlcFByZXZpb3VzJyB8ICdyZWZyZXNoJyB8ICdjYWNoZScgLy8gd2UgY2FuJ3Qga2VlcCBwcmV2aW91cyB2YWx1ZXMsIHJlZnJlc2ggb3IgY2FjaGUgbXV0YXRpb25zIGFzIHRoZXkgYXJlIG1lYW50IHRvIGJlIG9uZS1vZmYgb3BlcmF0aW9uc1xyXG4+ICYge1xyXG4gIC8qKlxyXG4gICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgYmVmb3JlIHRoZSBtdXRhdGlvbiByZXF1ZXN0IGlzIG1hZGUuXHJcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBiZWluZyBtdXRhdGVkICh0aGUgYGJvZHlgIG9mIHRoZSByZXF1ZXN0KS5cclxuICAgKiBAcmV0dXJucyBBbiBvcHRpb25hbCBjb250ZXh0IHZhbHVlIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGBvbkVycm9yYCwgYG9uU3VjY2Vzc2AsIGFuZCBgb25TZXR0bGVkYCBjYWxsYmFja3MuIFRoaXMgaXMgdXNlZnVsIGZvciBzdG9yaW5nXHJcbiAgICogIGluZm9ybWF0aW9uIG5lZWRlZCBkdXJpbmcgdGhlIG11dGF0aW9uIGxpZmVjeWNsZSwgc3VjaCBhcyBwcmV2aW91cyB2YWx1ZXMgZm9yIG9wdGltaXN0aWMgdXBkYXRlcyBvciByb2xsYmFjay5cclxuICAgKi9cclxuICBvbk11dGF0ZT86ICh2YWx1ZTogVE11dGF0aW9uLCBpbml0aWFsQ1RYPzogVElDVFgpID0+IFRDVFg7XHJcbiAgLyoqXHJcbiAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBpZiB0aGUgbXV0YXRpb24gcmVxdWVzdCBmYWlscy5cclxuICAgKiBAcGFyYW0gZXJyb3IgVGhlIGVycm9yIHRoYXQgb2NjdXJyZWQuXHJcbiAgICogQHBhcmFtIGN0eCBUaGUgY29udGV4dCB2YWx1ZSByZXR1cm5lZCBieSB0aGUgYG9uTXV0YXRlYCBjYWxsYmFjayAob3IgYHVuZGVmaW5lZGAgaWYgYG9uTXV0YXRlYCB3YXMgbm90IHByb3ZpZGVkIG9yIHJldHVybmVkIGB1bmRlZmluZWRgKS5cclxuICAgKi9cclxuICBvbkVycm9yPzogKGVycm9yOiB1bmtub3duLCBjdHg6IE5vSW5mZXI8VENUWD4pID0+IHZvaWQ7XHJcbiAgLyoqXHJcbiAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBpZiB0aGUgbXV0YXRpb24gcmVxdWVzdCBzdWNjZWVkcy5cclxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHJlc3VsdCBvZiB0aGUgbXV0YXRpb24gKHRoZSBwYXJzZWQgcmVzcG9uc2UgYm9keSkuXHJcbiAgICogQHBhcmFtIGN0eCBUaGUgY29udGV4dCB2YWx1ZSByZXR1cm5lZCBieSB0aGUgYG9uTXV0YXRlYCBjYWxsYmFjayAob3IgYHVuZGVmaW5lZGAgaWYgYG9uTXV0YXRlYCB3YXMgbm90IHByb3ZpZGVkIG9yIHJldHVybmVkIGB1bmRlZmluZWRgKS5cclxuICAgKi9cclxuICBvblN1Y2Nlc3M/OiAodmFsdWU6IE5vSW5mZXI8VFJlc3VsdD4sIGN0eDogTm9JbmZlcjxUQ1RYPikgPT4gdm9pZDtcclxuICAvKipcclxuICAgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIG11dGF0aW9uIHJlcXVlc3Qgc2V0dGxlcyAoZWl0aGVyIHN1Y2NlZWRzIG9yIGZhaWxzKS5cclxuICAgKiBAcGFyYW0gY3R4IFRoZSBjb250ZXh0IHZhbHVlIHJldHVybmVkIGJ5IHRoZSBgb25NdXRhdGVgIGNhbGxiYWNrIChvciBgdW5kZWZpbmVkYCBpZiBgb25NdXRhdGVgIHdhcyBub3QgcHJvdmlkZWQgb3IgcmV0dXJuZWQgYHVuZGVmaW5lZGApLlxyXG4gICAqL1xyXG4gIG9uU2V0dGxlZD86IChjdHg6IE5vSW5mZXI8VENUWD4pID0+IHZvaWQ7XHJcbiAgZXF1YWw/OiBWYWx1ZUVxdWFsaXR5Rm48VE11dGF0aW9uPjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXByZXNlbnRzIGEgbXV0YXRpb24gcmVzb3VyY2UgY3JlYXRlZCBieSBgbXV0YXRpb25SZXNvdXJjZWAuICBFeHRlbmRzIGBRdWVyeVJlc291cmNlUmVmYFxyXG4gKiBidXQgcmVtb3ZlcyBtZXRob2RzIHRoYXQgZG9uJ3QgbWFrZSBzZW5zZSBmb3IgbXV0YXRpb25zIChsaWtlIGBwcmVmZXRjaGAsIGB2YWx1ZWAsIGV0Yy4pLlxyXG4gKlxyXG4gKiBAdHlwZVBhcmFtIFRSZXN1bHQgLSBUaGUgdHlwZSBvZiB0aGUgZXhwZWN0ZWQgcmVzdWx0IGZyb20gdGhlIG11dGF0aW9uLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgTXV0YXRpb25SZXNvdXJjZVJlZjxcclxuICBUUmVzdWx0LFxyXG4gIFRNdXRhdGlvbiA9IFRSZXN1bHQsXHJcbiAgVElDVFggPSB2b2lkLFxyXG4gIFRNZXRob2QgZXh0ZW5kcyBIdHRwUmVzb3VyY2VSZXF1ZXN0WydtZXRob2QnXSA9IEh0dHBSZXNvdXJjZVJlcXVlc3RbJ21ldGhvZCddLFxyXG4+ID0gT21pdDxcclxuICBRdWVyeVJlc291cmNlUmVmPFRSZXN1bHQ+LFxyXG4gICdwcmVmZXRjaCcgfCAndmFsdWUnIHwgJ2hhc1ZhbHVlJyB8ICdzZXQnIHwgJ3VwZGF0ZScgLy8gd2UgZG9uJ3QgYWxsb3cgbWFudWFsbHkgdmlld2luZyB0aGUgcmV0dXJuZWQgZGF0YSBvciB1cGRhdGluZyBpdCBtYW51YWxseSwgcHJlZmV0Y2hpbmcgYSBtdXRhdGlvbiBhbHNvIGRvZXNuJ3QgbWFrZSBhbnkgc2Vuc2VcclxuPiAmIHtcclxuICAvKipcclxuICAgKiBFeGVjdXRlcyB0aGUgbXV0YXRpb24uXHJcbiAgICpcclxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHJlcXVlc3QgYm9keSBhbmQgYW55IG90aGVyIHJlcXVlc3QgcGFyYW1ldGVycyB0byB1c2UgZm9yIHRoZSBtdXRhdGlvbi4gIFRoZSBgYm9keWAgcHJvcGVydHkgaXMgKnJlcXVpcmVkKi5cclxuICAgKi9cclxuICBtdXRhdGU6IChcclxuICAgIHZhbHVlOiBPbWl0PE5leHRSZXF1ZXN0PFRNZXRob2QsIFRNdXRhdGlvbj4sICd1cmwnPiAmIHsgdXJsPzogc3RyaW5nIH0sXHJcbiAgICBjdHg/OiBUSUNUWCxcclxuICApID0+IHZvaWQ7XHJcbiAgLyoqXHJcbiAgICogQSBzaWduYWwgdGhhdCBob2xkcyB0aGUgY3VycmVudCBtdXRhdGlvbiByZXF1ZXN0LCBvciBgbnVsbGAgaWYgbm8gbXV0YXRpb24gaXMgaW4gcHJvZ3Jlc3MuXHJcbiAgICogVGhpcyBjYW4gYmUgdXNlZnVsIGZvciB0cmFja2luZyB0aGUgc3RhdGUgb2YgdGhlIG11dGF0aW9uIG9yIGZvciBkaXNwbGF5aW5nIGxvYWRpbmcgaW5kaWNhdG9ycy5cclxuICAgKi9cclxuICBjdXJyZW50OiBTaWduYWw8XHJcbiAgICAoT21pdDxOZXh0UmVxdWVzdDxUTWV0aG9kLCBUTXV0YXRpb24+LCAndXJsJz4gJiB7IHVybD86IHN0cmluZyB9KSB8IG51bGxcclxuICA+O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSByZXNvdXJjZSBmb3IgcGVyZm9ybWluZyBtdXRhdGlvbnMgKGUuZy4sIFBPU1QsIFBVVCwgUEFUQ0gsIERFTEVURSByZXF1ZXN0cykuXHJcbiAqIFVubGlrZSBgcXVlcnlSZXNvdXJjZWAsIGBtdXRhdGlvblJlc291cmNlYCBpcyBkZXNpZ25lZCBmb3Igb25lLW9mZiBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIGRhdGEuXHJcbiAqIEl0IGRvZXMgKm5vdCogY2FjaGUgcmVzcG9uc2VzIGFuZCBkb2VzIG5vdCBwcm92aWRlIGEgYHZhbHVlYCBzaWduYWwuICBJbnN0ZWFkLCBpdCBmb2N1c2VzIG9uXHJcbiAqIG1hbmFnaW5nIHRoZSBtdXRhdGlvbiBsaWZlY3ljbGUgKHBlbmRpbmcsIGVycm9yLCBzdWNjZXNzKSBhbmQgcHJvdmlkZXMgY2FsbGJhY2tzIGZvciBoYW5kbGluZ1xyXG4gKiB0aGVzZSBzdGF0ZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSByZXF1ZXN0IEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBiYXNlIGBIdHRwUmVzb3VyY2VSZXF1ZXN0YCB0byBiZSBtYWRlLiAgVGhpc1xyXG4gKiAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzIGNhbGxlZCByZWFjdGl2ZWx5LiAgVW5saWtlIGBxdWVyeVJlc291cmNlYCwgdGhlIGBib2R5YCBwcm9wZXJ0eVxyXG4gKiAgICAgICAgICAgICAgIG9mIHRoZSByZXF1ZXN0IGlzIHByb3ZpZGVkIHdoZW4gYG11dGF0ZWAgaXMgY2FsbGVkLCAqbm90KiBoZXJlLiAgSWYgdGhlXHJcbiAqICAgICAgICAgICAgICAgZnVuY3Rpb24gcmV0dXJucyBgdW5kZWZpbmVkYCwgdGhlIG11dGF0aW9uIGlzIGNvbnNpZGVyZWQgXCJkaXNhYmxlZC5cIiBBbGwgcHJvcGVydGllcyxcclxuICogICAgICAgICAgICAgICBleGNlcHQgdGhlIGJvZHksIGNhbiBiZSBzZXQgaGVyZS5cclxuICogQHBhcmFtIG9wdGlvbnMgQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbXV0YXRpb24gcmVzb3VyY2UuICBUaGlzIGluY2x1ZGVzIGNhbGxiYWNrc1xyXG4gKiAgICAgICAgICAgICAgIGZvciBgb25NdXRhdGVgLCBgb25FcnJvcmAsIGBvblN1Y2Nlc3NgLCBhbmQgYG9uU2V0dGxlZGAuXHJcbiAqIEB0eXBlUGFyYW0gVFJlc3VsdCAtIFRoZSB0eXBlIG9mIHRoZSBleHBlY3RlZCByZXN1bHQgZnJvbSB0aGUgbXV0YXRpb24uXHJcbiAqIEB0eXBlUGFyYW0gVFJhdyAtIFRoZSByYXcgcmVzcG9uc2UgdHlwZSBmcm9tIHRoZSBIVFRQIHJlcXVlc3QgKGRlZmF1bHRzIHRvIFRSZXN1bHQpLlxyXG4gKiBAdHlwZVBhcmFtIFRDVFggLSBUaGUgdHlwZSBvZiB0aGUgY29udGV4dCB2YWx1ZSByZXR1cm5lZCBieSBgb25NdXRhdGVgLlxyXG4gKiBAcmV0dXJucyBBIGBNdXRhdGlvblJlc291cmNlUmVmYCBpbnN0YW5jZSwgd2hpY2ggcHJvdmlkZXMgbWV0aG9kcyBmb3IgdHJpZ2dlcmluZyB0aGUgbXV0YXRpb25cclxuICogICAgICAgICAgYW5kIG9ic2VydmluZyBpdHMgc3RhdHVzLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG11dGF0aW9uUmVzb3VyY2U8XHJcbiAgVFJlc3VsdCxcclxuICBUUmF3ID0gVFJlc3VsdCxcclxuICBUTXV0YXRpb24gPSBUUmVzdWx0LFxyXG4gIFRDVFggPSB2b2lkLFxyXG4gIFRJQ1RYID0gVENUWCxcclxuICBUTWV0aG9kIGV4dGVuZHMgSHR0cFJlc291cmNlUmVxdWVzdFsnbWV0aG9kJ10gPSBIdHRwUmVzb3VyY2VSZXF1ZXN0WydtZXRob2QnXSxcclxuPihcclxuICByZXF1ZXN0OiAoKSA9PlxyXG4gICAgfCBPbWl0PE5leHRSZXF1ZXN0PFRNZXRob2QsIFRNdXRhdGlvbj4sICdib2R5Jz5cclxuICAgIHwgdW5kZWZpbmVkXHJcbiAgICB8IHZvaWQsXHJcbiAgb3B0aW9uczogTXV0YXRpb25SZXNvdXJjZU9wdGlvbnM8VFJlc3VsdCwgVFJhdywgVE11dGF0aW9uLCBUQ1RYLCBUSUNUWD4gPSB7fSxcclxuKTogTXV0YXRpb25SZXNvdXJjZVJlZjxUUmVzdWx0LCBUTXV0YXRpb24sIFRJQ1RYLCBUTWV0aG9kPiB7XHJcbiAgY29uc3QgeyBvbk11dGF0ZSwgb25FcnJvciwgb25TdWNjZXNzLCBvblNldHRsZWQsIGVxdWFsLCAuLi5yZXN0IH0gPSBvcHRpb25zO1xyXG5cclxuICBjb25zdCByZXF1ZXN0RXF1YWwgPSBjcmVhdGVFcXVhbFJlcXVlc3QoZXF1YWwpO1xyXG5cclxuICBjb25zdCBiYXNlUmVxdWVzdCA9IGNvbXB1dGVkKCgpID0+IHJlcXVlc3QoKSA/PyB1bmRlZmluZWQsIHtcclxuICAgIGVxdWFsOiByZXF1ZXN0RXF1YWwsXHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IG5leHRSZXF1ZXN0ID0gc2lnbmFsPFxyXG4gICAgKE9taXQ8TmV4dFJlcXVlc3Q8VE1ldGhvZCwgVE11dGF0aW9uPiwgJ3VybCc+ICYgeyB1cmw/OiBzdHJpbmcgfSkgfCBudWxsXHJcbiAgPihudWxsLCB7XHJcbiAgICBlcXVhbDogKGEsIGIpID0+IHtcclxuICAgICAgaWYgKCFhICYmICFiKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgaWYgKCFhIHx8ICFiKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgIHJldHVybiByZXF1ZXN0RXF1YWwoYSwgYik7XHJcbiAgICB9LFxyXG4gIH0pO1xyXG5cclxuICBjb25zdCByZXEgPSBjb21wdXRlZCgoKTogSHR0cFJlc291cmNlUmVxdWVzdCB8IHVuZGVmaW5lZCA9PiB7XHJcbiAgICBjb25zdCBuciA9IG5leHRSZXF1ZXN0KCk7XHJcbiAgICBpZiAoIW5yKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgYmFzZSA9IGJhc2VSZXF1ZXN0KCk7XHJcblxyXG4gICAgY29uc3QgdXJsID0gbnIudXJsID8/IGJhc2U/LnVybDtcclxuICAgIGlmICghdXJsKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgbWV0aG9kID0gbnIubWV0aG9kID8/IGJhc2U/Lm1ldGhvZDtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAuLi5iYXNlLFxyXG4gICAgICAuLi5ucixcclxuICAgICAgdXJsLFxyXG4gICAgICBtZXRob2QsXHJcbiAgICB9O1xyXG4gIH0pO1xyXG5cclxuICBjb25zdCByZXNvdXJjZSA9IHF1ZXJ5UmVzb3VyY2U8VFJlc3VsdCwgVFJhdz4ocmVxLCB7XHJcbiAgICAuLi5yZXN0LFxyXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsIGFzIHVua25vd24gYXMgVFJlc3VsdCwgLy8gZG9lc250IG1hdHRlciBzaW5jZSAudmFsdWUgaXMgbm90IGFjY2Vzc2libGVcclxuICB9KTtcclxuXHJcbiAgbGV0IGN0eDogVENUWCA9IHVuZGVmaW5lZCBhcyBUQ1RYO1xyXG5cclxuICBjb25zdCBkZXN0cm95UmVmID0gb3B0aW9ucy5pbmplY3RvclxyXG4gICAgPyBvcHRpb25zLmluamVjdG9yLmdldChEZXN0cm95UmVmKVxyXG4gICAgOiBpbmplY3QoRGVzdHJveVJlZik7XHJcblxyXG4gIGNvbnN0IGVycm9yJCA9IHRvT2JzZXJ2YWJsZShyZXNvdXJjZS5lcnJvcik7XHJcbiAgY29uc3QgdmFsdWUkID0gdG9PYnNlcnZhYmxlKHJlc291cmNlLnZhbHVlKTtcclxuXHJcbiAgY29uc3Qgc3RhdHVzU3ViID0gdG9PYnNlcnZhYmxlKHJlc291cmNlLnN0YXR1cylcclxuICAgIC5waXBlKFxyXG4gICAgICBjb21iaW5lTGF0ZXN0V2l0aChlcnJvciQsIHZhbHVlJCksXHJcbiAgICAgIG1hcCgoW3N0YXR1cywgZXJyb3IsIHZhbHVlXSk6IFN0YXR1c1Jlc3VsdDxUUmVzdWx0PiB8IG51bGwgPT4ge1xyXG4gICAgICAgIGlmIChzdGF0dXMgPT09ICdlcnJvcicgJiYgZXJyb3IpIHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHN0YXR1czogJ2Vycm9yJyxcclxuICAgICAgICAgICAgZXJyb3IsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ3Jlc29sdmVkJyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgc3RhdHVzOiAncmVzb2x2ZWQnLFxyXG4gICAgICAgICAgICB2YWx1ZSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfSksXHJcbiAgICAgIGZpbHRlcigodikgPT4gdiAhPT0gbnVsbCksXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZChkZXN0cm95UmVmKSxcclxuICAgIClcclxuICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2Vycm9yJykgb25FcnJvcj8uKHJlc3VsdC5lcnJvciwgY3R4KTtcclxuICAgICAgZWxzZSBvblN1Y2Nlc3M/LihyZXN1bHQudmFsdWUsIGN0eCk7XHJcblxyXG4gICAgICBvblNldHRsZWQ/LihjdHgpO1xyXG4gICAgICBjdHggPSB1bmRlZmluZWQgYXMgVENUWDtcclxuICAgICAgbmV4dFJlcXVlc3Quc2V0KG51bGwpO1xyXG4gICAgfSk7XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICAuLi5yZXNvdXJjZSxcclxuICAgIGRlc3Ryb3k6ICgpID0+IHtcclxuICAgICAgc3RhdHVzU3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIHJlc291cmNlLmRlc3Ryb3koKTtcclxuICAgIH0sXHJcbiAgICBtdXRhdGU6ICh2YWx1ZSwgaWN0eCkgPT4ge1xyXG4gICAgICBjdHggPSBvbk11dGF0ZT8uKFxyXG4gICAgICAgICh2YWx1ZSBhcyB1bmtub3duIGFzIEh0dHBSZXNvdXJjZVJlcXVlc3QpLmJvZHkgYXMgVE11dGF0aW9uLFxyXG4gICAgICAgIGljdHgsXHJcbiAgICAgICkgYXMgVENUWDtcclxuICAgICAgbmV4dFJlcXVlc3Quc2V0KHZhbHVlKTtcclxuICAgIH0sXHJcbiAgICBjdXJyZW50OiBuZXh0UmVxdWVzdCxcclxuICB9O1xyXG59XHJcbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW1zdGFjay1yZXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3Jlc291cmNlL3NyYy9tbXN0YWNrLXJlc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mmstack-resource.mjs","sources":["../tmp-esm2022/lib/util/cache/cache.js","../tmp-esm2022/lib/util/cache/cache.interceptor.js","../tmp-esm2022/lib/util/catch-value-error.js","../tmp-esm2022/lib/util/circuit-breaker.js","../tmp-esm2022/lib/util/dedupe.interceptor.js","../tmp-esm2022/lib/util/equality.js","../tmp-esm2022/lib/util/has-slow-connection.js","../tmp-esm2022/lib/util/persist.js","../tmp-esm2022/lib/util/refresh.js","../tmp-esm2022/lib/util/retry-on-error.js","../tmp-esm2022/lib/util/url-with-params.js","../tmp-esm2022/lib/query-resource.js","../tmp-esm2022/lib/mutation-resource.js","../tmp-esm2022/mmstack-resource.js"],"sourcesContent":["import { computed, inject, InjectionToken, isDevMode, untracked, } from '@angular/core';\nimport { mutable } from '@mmstack/primitives';\nimport { v7 } from 'uuid';\nconst ONE_DAY = 1000 * 60 * 60 * 24;\nconst ONE_HOUR = 1000 * 60 * 60;\nconst DEFAULT_CLEANUP_OPT = {\n type: 'lru',\n maxSize: 200,\n checkInterval: ONE_HOUR,\n};\n/**\n * A generic cache implementation that stores data with time-to-live (TTL) and stale-while-revalidate capabilities.\n *\n * @typeParam T - The type of data to be stored in the cache.\n */\nexport class Cache {\n ttl;\n staleTime;\n internal = mutable(new Map());\n cleanupOpt;\n /**\n * Creates a new `Cache` instance.\n *\n * @param ttl - The default Time To Live (TTL) for cache entries, in milliseconds. Defaults to one day.\n * @param staleTime - The default duration, in milliseconds, during which a cache entry is considered\n * stale but can still be used while revalidation occurs in the background. Defaults to 1 hour.\n * @param cleanupOpt - Options for configuring the cache cleanup strategy. Defaults to LRU with a\n * `maxSize` of 200 and a `checkInterval` of one hour.\n */\n constructor(ttl = ONE_DAY, staleTime = ONE_HOUR, cleanupOpt = {\n type: 'lru',\n maxSize: 1000,\n checkInterval: ONE_HOUR,\n }) {\n this.ttl = ttl;\n this.staleTime = staleTime;\n this.cleanupOpt = {\n ...DEFAULT_CLEANUP_OPT,\n ...cleanupOpt,\n };\n if (this.cleanupOpt.maxSize <= 0)\n throw new Error('maxSize must be greater than 0');\n // cleanup cache based on provided options regularly\n const cleanupInterval = setInterval(() => {\n this.cleanup();\n }, cleanupOpt.checkInterval);\n const destroyId = v7();\n // cleanup if object is garbage collected, this is because the cache can be quite large from a memory standpoint & we dont want all that floating garbage\n const registry = new FinalizationRegistry((id) => {\n if (id === destroyId) {\n clearInterval(cleanupInterval);\n }\n });\n registry.register(this, destroyId);\n }\n /** @internal */\n getInternal(key) {\n const keySignal = computed(() => key());\n return computed(() => {\n const key = keySignal();\n if (!key)\n return null;\n const found = this.internal().get(key);\n const now = Date.now();\n if (!found || found.expiresAt <= now)\n return null;\n found.useCount++;\n return {\n ...found,\n isStale: found.stale <= now,\n };\n });\n }\n /**\n * Retrieves a cache entry without affecting its usage count (for LRU). This is primarily\n * for internal use or debugging.\n * @internal\n * @param key - The key of the entry to retrieve.\n * @returns The cache entry, or `null` if not found or expired.\n */\n getUntracked(key) {\n return untracked(this.getInternal(() => key));\n }\n /**\n * Retrieves a cache entry as a signal.\n *\n * @param key - A function that returns the cache key. The key is a signal, allowing for dynamic keys. If the function returns null the value is also null.\n * @returns A signal that holds the cache entry, or `null` if not found or expired. The signal\n * updates whenever the cache entry changes (e.g., due to revalidation or expiration).\n */\n get(key) {\n return this.getInternal(key);\n }\n /**\n * Stores a value in the cache.\n *\n * @param key - The key under which to store the value.\n * @param value - The value to store.\n * @param staleTime - (Optional) The stale time for this entry, in milliseconds. Overrides the default `staleTime`.\n * @param ttl - (Optional) The TTL for this entry, in milliseconds. Overrides the default `ttl`.\n */\n store(key, value, staleTime = this.staleTime, ttl = this.ttl) {\n const entry = this.getUntracked(key);\n if (entry) {\n clearTimeout(entry.timeout); // stop invalidation\n }\n const prevCount = entry?.useCount ?? 0;\n // ttl cannot be less than staleTime\n if (ttl < staleTime)\n staleTime = ttl;\n const now = Date.now();\n this.internal.mutate((map) => {\n map.set(key, {\n value,\n created: entry?.created ?? now,\n useCount: prevCount + 1,\n stale: now + staleTime,\n expiresAt: now + ttl,\n timeout: setTimeout(() => this.invalidate(key), ttl),\n });\n return map;\n });\n }\n /**\n * Invalidates (removes) a cache entry.\n *\n * @param key - The key of the entry to invalidate.\n */\n invalidate(key) {\n const entry = this.getUntracked(key);\n if (!entry)\n return;\n clearTimeout(entry.timeout);\n this.internal.mutate((map) => {\n map.delete(key);\n return map;\n });\n }\n /** @internal */\n cleanup() {\n if (untracked(this.internal).size <= this.cleanupOpt.maxSize)\n return;\n const sorted = Array.from(untracked(this.internal).entries()).toSorted((a, b) => {\n if (this.cleanupOpt.type === 'lru') {\n return a[1].useCount - b[1].useCount; // least used first\n }\n else {\n return a[1].created - b[1].created; // oldest first\n }\n });\n const keepCount = Math.floor(this.cleanupOpt.maxSize / 2);\n const removed = sorted.slice(0, sorted.length - keepCount);\n const keep = sorted.slice(removed.length, sorted.length);\n removed.forEach(([, e]) => {\n clearTimeout(e.timeout);\n });\n this.internal.set(new Map(keep));\n }\n}\nconst CLIENT_CACHE_TOKEN = new InjectionToken('INTERNAL_CLIENT_CACHE');\n/**\n * Provides the instance of the QueryCache for queryResource. This should probably be called\n * in your application's root configuration, but can also be overriden with component/module providers.\n *\n * @param options - Optional configuration options for the cache.\n * @returns An Angular `Provider` for the cache.\n *\n * @example\n * // In your app.config.ts or AppModule providers:\n *\n * import { provideQueryCache } from './your-cache';\n *\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideQueryCache({\n * ttl: 60000, // Default TTL of 60 seconds\n * staleTime: 30000, // Default staleTime of 30 seconds\n * }),\n * // ... other providers\n * ]\n * };\n */\nexport function provideQueryCache(opt) {\n return {\n provide: CLIENT_CACHE_TOKEN,\n useValue: new Cache(opt?.ttl, opt?.staleTime, opt?.cleanup),\n };\n}\nclass NoopCache extends Cache {\n store(_, __, ___ = super.staleTime, ____ = super.ttl) {\n // noop\n }\n}\n/**\n * Injects the `QueryCache` instance that is used within queryResource.\n * Allows for direct modification of cached data, but is mostly meant for internal use.\n *\n * @param injector - (Optional) The injector to use. If not provided, the current\n * injection context is used.\n * @returns The `QueryCache` instance.\n *\n * @example\n * // In your component or service:\n *\n * import { injectQueryCache } from './your-cache';\n *\n * constructor() {\n * const cache = injectQueryCache();\n *\n * const myData = cache.get(() => 'my-data-key');\n * if (myData() !== null) {\n * // ... use cached data ...\n * }\n * }\n */\nexport function injectQueryCache(injector) {\n const cache = injector\n ? injector.get(CLIENT_CACHE_TOKEN, null, {\n optional: true,\n })\n : inject(CLIENT_CACHE_TOKEN, {\n optional: true,\n });\n if (!cache) {\n if (isDevMode())\n throw new Error('Cache not provided, please add provideQueryCache() to providers array');\n else\n return new NoopCache();\n }\n return cache;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yZXNvdXJjZS9zcmMvbGliL3V0aWwvY2FjaGUvY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04sY0FBYyxFQUVkLFNBQVMsRUFHVCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUF3RDFCLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQyxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUVoQyxNQUFNLG1CQUFtQixHQUFHO0lBQzFCLElBQUksRUFBRSxLQUFLO0lBQ1gsT0FBTyxFQUFFLEdBQUc7SUFDWixhQUFhLEVBQUUsUUFBUTtDQUNDLENBQUM7QUFFM0I7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxLQUFLO0lBY0s7SUFDQTtJQWRKLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLEVBQXlCLENBQUMsQ0FBQztJQUNyRCxVQUFVLENBQWM7SUFFekM7Ozs7Ozs7O09BUUc7SUFDSCxZQUNxQixNQUFjLE9BQU8sRUFDckIsWUFBb0IsUUFBUSxFQUMvQyxhQUFtQztRQUNqQyxJQUFJLEVBQUUsS0FBSztRQUNYLE9BQU8sRUFBRSxJQUFJO1FBQ2IsYUFBYSxFQUFFLFFBQVE7S0FDeEI7UUFOa0IsUUFBRyxHQUFILEdBQUcsQ0FBa0I7UUFDckIsY0FBUyxHQUFULFNBQVMsQ0FBbUI7UUFPL0MsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNoQixHQUFHLG1CQUFtQjtZQUN0QixHQUFHLFVBQVU7U0FDZCxDQUFDO1FBQ0YsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sSUFBSSxDQUFDO1lBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUVwRCxvREFBb0Q7UUFDcEQsTUFBTSxlQUFlLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUN2QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDakIsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUU3QixNQUFNLFNBQVMsR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUV2Qix5SkFBeUo7UUFDekosTUFBTSxRQUFRLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxDQUFDLEVBQVUsRUFBRSxFQUFFO1lBQ3ZELElBQUksRUFBRSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNyQixhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDakMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELGdCQUFnQjtJQUNSLFdBQVcsQ0FDakIsR0FBd0I7UUFFeEIsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFFeEMsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ25CLE1BQU0sR0FBRyxHQUFHLFNBQVMsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxHQUFHO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQ3RCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFdkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBRXZCLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLFNBQVMsSUFBSSxHQUFHO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQ2xELEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNqQixPQUFPO2dCQUNMLEdBQUcsS0FBSztnQkFDUixPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQUssSUFBSSxHQUFHO2FBQzVCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxZQUFZLENBQUMsR0FBVztRQUN0QixPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEdBQUcsQ0FDRCxHQUF3QjtRQUV4QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxLQUFLLENBQUMsR0FBVyxFQUFFLEtBQVEsRUFBRSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUc7UUFDckUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLG9CQUFvQjtRQUNuRCxDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsS0FBSyxFQUFFLFFBQVEsSUFBSSxDQUFDLENBQUM7UUFFdkMsb0NBQW9DO1FBQ3BDLElBQUksR0FBRyxHQUFHLFNBQVM7WUFBRSxTQUFTLEdBQUcsR0FBRyxDQUFDO1FBRXJDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUV2QixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzNCLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUNYLEtBQUs7Z0JBQ0wsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLElBQUksR0FBRztnQkFDOUIsUUFBUSxFQUFFLFNBQVMsR0FBRyxDQUFDO2dCQUN2QixLQUFLLEVBQUUsR0FBRyxHQUFHLFNBQVM7Z0JBQ3RCLFNBQVMsRUFBRSxHQUFHLEdBQUcsR0FBRztnQkFDcEIsT0FBTyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQzthQUNyRCxDQUFDLENBQUM7WUFDSCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxVQUFVLENBQUMsR0FBVztRQUNwQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUNuQixZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDM0IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQjtJQUNSLE9BQU87UUFDYixJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTztZQUFFLE9BQU87UUFFckUsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUNwRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNQLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQ25DLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsbUJBQW1CO1lBQzNELENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGVBQWU7WUFDckQsQ0FBQztRQUNILENBQUMsQ0FDRixDQUFDO1FBRUYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUUxRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDO1FBQzNELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFekQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3hCLFlBQVksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7Q0FDRjtBQXFCRCxNQUFNLGtCQUFrQixHQUFHLElBQUksY0FBYyxDQUMzQyx1QkFBdUIsQ0FDeEIsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsR0FBa0I7SUFDbEQsT0FBTztRQUNMLE9BQU8sRUFBRSxrQkFBa0I7UUFDM0IsUUFBUSxFQUFFLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDO0tBQzVELENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxTQUFhLFNBQVEsS0FBUTtJQUN4QixLQUFLLENBQUMsQ0FBUyxFQUFFLEVBQUssRUFBRSxHQUFHLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUc7UUFDdEUsT0FBTztJQUNULENBQUM7Q0FDRjtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLFFBQW1CO0lBRW5CLE1BQU0sS0FBSyxHQUFHLFFBQVE7UUFDcEIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxFQUFFO1lBQ3JDLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQztRQUNKLENBQUMsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUU7WUFDekIsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDLENBQUM7SUFFUCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxJQUFJLFNBQVMsRUFBRTtZQUNiLE1BQU0sSUFBSSxLQUFLLENBQ2IsdUVBQXVFLENBQ3hFLENBQUM7O1lBQ0MsT0FBTyxJQUFJLFNBQVMsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEh0dHBSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtcclxuICBjb21wdXRlZCxcclxuICBpbmplY3QsXHJcbiAgSW5qZWN0aW9uVG9rZW4sXHJcbiAgSW5qZWN0b3IsXHJcbiAgaXNEZXZNb2RlLFxyXG4gIHR5cGUgUHJvdmlkZXIsXHJcbiAgdHlwZSBTaWduYWwsXHJcbiAgdW50cmFja2VkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBtdXRhYmxlIH0gZnJvbSAnQG1tc3RhY2svcHJpbWl0aXZlcyc7XHJcbmltcG9ydCB7IHY3IH0gZnJvbSAndXVpZCc7XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhlIExlYXN0IFJlY2VudGx5IFVzZWQgKExSVSkgY2FjaGUgY2xlYW51cCBzdHJhdGVneS5cclxuICogQGludGVybmFsXHJcbiAqL1xyXG50eXBlIExSVUNsZWFudXBUeXBlID0ge1xyXG4gIHR5cGU6ICdscnUnO1xyXG4gIC8qKlxyXG4gICAqIEhvdyBvZnRlbiB0byBjaGVjayBmb3IgZXhwaXJlZCBvciBleGNlc3MgZW50cmllcywgaW4gbWlsbGlzZWNvbmRzLlxyXG4gICAqL1xyXG4gIGNoZWNrSW50ZXJ2YWw6IG51bWJlcjtcclxuICAvKipcclxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgZW50cmllcyB0byBrZWVwIGluIHRoZSBjYWNoZS4gIFdoZW4gdGhlIGNhY2hlIGV4Y2VlZHMgdGhpcyBzaXplLFxyXG4gICAqIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIGVudHJpZXMgd2lsbCBiZSByZW1vdmVkLlxyXG4gICAqL1xyXG4gIG1heFNpemU6IG51bWJlcjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyB0aGUgXCJvbGRlc3QgZmlyc3RcIiBjYWNoZSBjbGVhbnVwIHN0cmF0ZWd5LlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbnR5cGUgT2xkc2V0Q2xlYW51cFR5cGUgPSB7XHJcbiAgdHlwZTogJ29sZGVzdCc7XHJcbiAgLyoqXHJcbiAgICogSG93IG9mdGVuIHRvIGNoZWNrIGZvciBleHBpcmVkIG9yIGV4Y2VzcyBlbnRyaWVzLCBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICovXHJcbiAgY2hlY2tJbnRlcnZhbDogbnVtYmVyO1xyXG4gIC8qKlxyXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIHRvIGtlZXAgaW4gdGhlIGNhY2hlLiAgV2hlbiB0aGUgY2FjaGUgZXhjZWVkcyB0aGlzIHNpemUsXHJcbiAgICogdGhlIG9sZGVzdCBlbnRyaWVzIHdpbGwgYmUgcmVtb3ZlZC5cclxuICAgKi9cclxuICBtYXhTaXplOiBudW1iZXI7XHJcbn07XHJcblxyXG4vKipcclxuICogUmVwcmVzZW50cyBhbiBlbnRyeSBpbiB0aGUgY2FjaGUuXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxudHlwZSBDYWNoZUVudHJ5PFQ+ID0ge1xyXG4gIHZhbHVlOiBUO1xyXG4gIGNyZWF0ZWQ6IG51bWJlcjtcclxuICBzdGFsZTogbnVtYmVyO1xyXG4gIHVzZUNvdW50OiBudW1iZXI7XHJcbiAgZXhwaXJlc0F0OiBudW1iZXI7XHJcbiAgdGltZW91dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XHJcbn07XHJcblxyXG4vKipcclxuICogRGVmaW5lcyB0aGUgdHlwZXMgb2YgY2xlYW51cCBzdHJhdGVnaWVzIGF2YWlsYWJsZSBmb3IgdGhlIGNhY2hlLlxyXG4gKiAtIGBscnVgOiBMZWFzdCBSZWNlbnRseSBVc2VkLiAgUmVtb3ZlcyB0aGUgbGVhc3QgcmVjZW50bHkgYWNjZXNzZWQgZW50cmllcyB3aGVuIHRoZSBjYWNoZSBpcyBmdWxsLlxyXG4gKiAtIGBvbGRlc3RgOiBSZW1vdmVzIHRoZSBvbGRlc3QgZW50cmllcyB3aGVuIHRoZSBjYWNoZSBpcyBmdWxsLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgQ2xlYW51cFR5cGUgPSBMUlVDbGVhbnVwVHlwZSB8IE9sZHNldENsZWFudXBUeXBlO1xyXG5cclxuY29uc3QgT05FX0RBWSA9IDEwMDAgKiA2MCAqIDYwICogMjQ7XHJcbmNvbnN0IE9ORV9IT1VSID0gMTAwMCAqIDYwICogNjA7XHJcblxyXG5jb25zdCBERUZBVUxUX0NMRUFOVVBfT1BUID0ge1xyXG4gIHR5cGU6ICdscnUnLFxyXG4gIG1heFNpemU6IDIwMCxcclxuICBjaGVja0ludGVydmFsOiBPTkVfSE9VUixcclxufSBzYXRpc2ZpZXMgTFJVQ2xlYW51cFR5cGU7XHJcblxyXG4vKipcclxuICogQSBnZW5lcmljIGNhY2hlIGltcGxlbWVudGF0aW9uIHRoYXQgc3RvcmVzIGRhdGEgd2l0aCB0aW1lLXRvLWxpdmUgKFRUTCkgYW5kIHN0YWxlLXdoaWxlLXJldmFsaWRhdGUgY2FwYWJpbGl0aWVzLlxyXG4gKlxyXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBkYXRhIHRvIGJlIHN0b3JlZCBpbiB0aGUgY2FjaGUuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQ2FjaGU8VD4ge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgaW50ZXJuYWwgPSBtdXRhYmxlKG5ldyBNYXA8c3RyaW5nLCBDYWNoZUVudHJ5PFQ+PigpKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGNsZWFudXBPcHQ6IENsZWFudXBUeXBlO1xyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGEgbmV3IGBDYWNoZWAgaW5zdGFuY2UuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gdHRsIC0gVGhlIGRlZmF1bHQgVGltZSBUbyBMaXZlIChUVEwpIGZvciBjYWNoZSBlbnRyaWVzLCBpbiBtaWxsaXNlY29uZHMuICBEZWZhdWx0cyB0byBvbmUgZGF5LlxyXG4gICAqIEBwYXJhbSBzdGFsZVRpbWUgLSBUaGUgZGVmYXVsdCBkdXJhdGlvbiwgaW4gbWlsbGlzZWNvbmRzLCBkdXJpbmcgd2hpY2ggYSBjYWNoZSBlbnRyeSBpcyBjb25zaWRlcmVkXHJcbiAgICogICAgICAgICAgICAgICAgICAgIHN0YWxlIGJ1dCBjYW4gc3RpbGwgYmUgdXNlZCB3aGlsZSByZXZhbGlkYXRpb24gb2NjdXJzIGluIHRoZSBiYWNrZ3JvdW5kLiBEZWZhdWx0cyB0byAxIGhvdXIuXHJcbiAgICogQHBhcmFtIGNsZWFudXBPcHQgLSBPcHRpb25zIGZvciBjb25maWd1cmluZyB0aGUgY2FjaGUgY2xlYW51cCBzdHJhdGVneS4gIERlZmF1bHRzIHRvIExSVSB3aXRoIGFcclxuICAgKiAgICAgICAgICAgICAgICAgICAgIGBtYXhTaXplYCBvZiAyMDAgYW5kIGEgYGNoZWNrSW50ZXJ2YWxgIG9mIG9uZSBob3VyLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHR0bDogbnVtYmVyID0gT05FX0RBWSxcclxuICAgIHByb3RlY3RlZCByZWFkb25seSBzdGFsZVRpbWU6IG51bWJlciA9IE9ORV9IT1VSLFxyXG4gICAgY2xlYW51cE9wdDogUGFydGlhbDxDbGVhbnVwVHlwZT4gPSB7XHJcbiAgICAgIHR5cGU6ICdscnUnLFxyXG4gICAgICBtYXhTaXplOiAxMDAwLFxyXG4gICAgICBjaGVja0ludGVydmFsOiBPTkVfSE9VUixcclxuICAgIH0sXHJcbiAgKSB7XHJcbiAgICB0aGlzLmNsZWFudXBPcHQgPSB7XHJcbiAgICAgIC4uLkRFRkFVTFRfQ0xFQU5VUF9PUFQsXHJcbiAgICAgIC4uLmNsZWFudXBPcHQsXHJcbiAgICB9O1xyXG4gICAgaWYgKHRoaXMuY2xlYW51cE9wdC5tYXhTaXplIDw9IDApXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWF4U2l6ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwJyk7XHJcblxyXG4gICAgLy8gY2xlYW51cCBjYWNoZSBiYXNlZCBvbiBwcm92aWRlZCBvcHRpb25zIHJlZ3VsYXJseVxyXG4gICAgY29uc3QgY2xlYW51cEludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICB0aGlzLmNsZWFudXAoKTtcclxuICAgIH0sIGNsZWFudXBPcHQuY2hlY2tJbnRlcnZhbCk7XHJcblxyXG4gICAgY29uc3QgZGVzdHJveUlkID0gdjcoKTtcclxuXHJcbiAgICAvLyBjbGVhbnVwIGlmIG9iamVjdCBpcyBnYXJiYWdlIGNvbGxlY3RlZCwgdGhpcyBpcyBiZWNhdXNlIHRoZSBjYWNoZSBjYW4gYmUgcXVpdGUgbGFyZ2UgZnJvbSBhIG1lbW9yeSBzdGFuZHBvaW50ICYgd2UgZG9udCB3YW50IGFsbCB0aGF0IGZsb2F0aW5nIGdhcmJhZ2VcclxuICAgIGNvbnN0IHJlZ2lzdHJ5ID0gbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KChpZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmIChpZCA9PT0gZGVzdHJveUlkKSB7XHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbChjbGVhbnVwSW50ZXJ2YWwpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZWdpc3RyeS5yZWdpc3Rlcih0aGlzLCBkZXN0cm95SWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gIHByaXZhdGUgZ2V0SW50ZXJuYWwoXHJcbiAgICBrZXk6ICgpID0+IHN0cmluZyB8IG51bGwsXHJcbiAgKTogU2lnbmFsPChDYWNoZUVudHJ5PFQ+ICYgeyBpc1N0YWxlOiBib29sZWFuIH0pIHwgbnVsbD4ge1xyXG4gICAgY29uc3Qga2V5U2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ga2V5KCkpO1xyXG5cclxuICAgIHJldHVybiBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGtleSA9IGtleVNpZ25hbCgpO1xyXG4gICAgICBpZiAoIWtleSkgcmV0dXJuIG51bGw7XHJcbiAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5pbnRlcm5hbCgpLmdldChrZXkpO1xyXG5cclxuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcclxuXHJcbiAgICAgIGlmICghZm91bmQgfHwgZm91bmQuZXhwaXJlc0F0IDw9IG5vdykgcmV0dXJuIG51bGw7XHJcbiAgICAgIGZvdW5kLnVzZUNvdW50Kys7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uZm91bmQsXHJcbiAgICAgICAgaXNTdGFsZTogZm91bmQuc3RhbGUgPD0gbm93LFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYSBjYWNoZSBlbnRyeSB3aXRob3V0IGFmZmVjdGluZyBpdHMgdXNhZ2UgY291bnQgKGZvciBMUlUpLiAgVGhpcyBpcyBwcmltYXJpbHlcclxuICAgKiBmb3IgaW50ZXJuYWwgdXNlIG9yIGRlYnVnZ2luZy5cclxuICAgKiBAaW50ZXJuYWxcclxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gcmV0cmlldmUuXHJcbiAgICogQHJldHVybnMgVGhlIGNhY2hlIGVudHJ5LCBvciBgbnVsbGAgaWYgbm90IGZvdW5kIG9yIGV4cGlyZWQuXHJcbiAgICovXHJcbiAgZ2V0VW50cmFja2VkKGtleTogc3RyaW5nKTogKENhY2hlRW50cnk8VD4gJiB7IGlzU3RhbGU6IGJvb2xlYW4gfSkgfCBudWxsIHtcclxuICAgIHJldHVybiB1bnRyYWNrZWQodGhpcy5nZXRJbnRlcm5hbCgoKSA9PiBrZXkpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyBhIGNhY2hlIGVudHJ5IGFzIGEgc2lnbmFsLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGtleSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjYWNoZSBrZXkuIFRoZSBrZXkgaXMgYSBzaWduYWwsIGFsbG93aW5nIGZvciBkeW5hbWljIGtleXMuIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIG51bGwgdGhlIHZhbHVlIGlzIGFsc28gbnVsbC5cclxuICAgKiBAcmV0dXJucyBBIHNpZ25hbCB0aGF0IGhvbGRzIHRoZSBjYWNoZSBlbnRyeSwgb3IgYG51bGxgIGlmIG5vdCBmb3VuZCBvciBleHBpcmVkLiAgVGhlIHNpZ25hbFxyXG4gICAqICAgICAgICAgIHVwZGF0ZXMgd2hlbmV2ZXIgdGhlIGNhY2hlIGVudHJ5IGNoYW5nZXMgKGUuZy4sIGR1ZSB0byByZXZhbGlkYXRpb24gb3IgZXhwaXJhdGlvbikuXHJcbiAgICovXHJcbiAgZ2V0KFxyXG4gICAga2V5OiAoKSA9PiBzdHJpbmcgfCBudWxsLFxyXG4gICk6IFNpZ25hbDwoQ2FjaGVFbnRyeTxUPiAmIHsgaXNTdGFsZTogYm9vbGVhbiB9KSB8IG51bGw+IHtcclxuICAgIHJldHVybiB0aGlzLmdldEludGVybmFsKGtleSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9yZXMgYSB2YWx1ZSBpbiB0aGUgY2FjaGUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSB1bmRlciB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUuXHJcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHN0b3JlLlxyXG4gICAqIEBwYXJhbSBzdGFsZVRpbWUgLSAoT3B0aW9uYWwpIFRoZSBzdGFsZSB0aW1lIGZvciB0aGlzIGVudHJ5LCBpbiBtaWxsaXNlY29uZHMuIE92ZXJyaWRlcyB0aGUgZGVmYXVsdCBgc3RhbGVUaW1lYC5cclxuICAgKiBAcGFyYW0gdHRsIC0gKE9wdGlvbmFsKSBUaGUgVFRMIGZvciB0aGlzIGVudHJ5LCBpbiBtaWxsaXNlY29uZHMuIE92ZXJyaWRlcyB0aGUgZGVmYXVsdCBgdHRsYC5cclxuICAgKi9cclxuICBzdG9yZShrZXk6IHN0cmluZywgdmFsdWU6IFQsIHN0YWxlVGltZSA9IHRoaXMuc3RhbGVUaW1lLCB0dGwgPSB0aGlzLnR0bCkge1xyXG4gICAgY29uc3QgZW50cnkgPSB0aGlzLmdldFVudHJhY2tlZChrZXkpO1xyXG4gICAgaWYgKGVudHJ5KSB7XHJcbiAgICAgIGNsZWFyVGltZW91dChlbnRyeS50aW1lb3V0KTsgLy8gc3RvcCBpbnZhbGlkYXRpb25cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwcmV2Q291bnQgPSBlbnRyeT8udXNlQ291bnQgPz8gMDtcclxuXHJcbiAgICAvLyB0dGwgY2Fubm90IGJlIGxlc3MgdGhhbiBzdGFsZVRpbWVcclxuICAgIGlmICh0dGwgPCBzdGFsZVRpbWUpIHN0YWxlVGltZSA9IHR0bDtcclxuXHJcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xyXG5cclxuICAgIHRoaXMuaW50ZXJuYWwubXV0YXRlKChtYXApID0+IHtcclxuICAgICAgbWFwLnNldChrZXksIHtcclxuICAgICAgICB2YWx1ZSxcclxuICAgICAgICBjcmVhdGVkOiBlbnRyeT8uY3JlYXRlZCA/PyBub3csXHJcbiAgICAgICAgdXNlQ291bnQ6IHByZXZDb3VudCArIDEsXHJcbiAgICAgICAgc3RhbGU6IG5vdyArIHN0YWxlVGltZSxcclxuICAgICAgICBleHBpcmVzQXQ6IG5vdyArIHR0bCxcclxuICAgICAgICB0aW1lb3V0OiBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaW52YWxpZGF0ZShrZXkpLCB0dGwpLFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIG1hcDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW52YWxpZGF0ZXMgKHJlbW92ZXMpIGEgY2FjaGUgZW50cnkuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gaW52YWxpZGF0ZS5cclxuICAgKi9cclxuICBpbnZhbGlkYXRlKGtleTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBlbnRyeSA9IHRoaXMuZ2V0VW50cmFja2VkKGtleSk7XHJcbiAgICBpZiAoIWVudHJ5KSByZXR1cm47XHJcbiAgICBjbGVhclRpbWVvdXQoZW50cnkudGltZW91dCk7XHJcbiAgICB0aGlzLmludGVybmFsLm11dGF0ZSgobWFwKSA9PiB7XHJcbiAgICAgIG1hcC5kZWxldGUoa2V5KTtcclxuICAgICAgcmV0dXJuIG1hcDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gIHByaXZhdGUgY2xlYW51cCgpIHtcclxuICAgIGlmICh1bnRyYWNrZWQodGhpcy5pbnRlcm5hbCkuc2l6ZSA8PSB0aGlzLmNsZWFudXBPcHQubWF4U2l6ZSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHNvcnRlZCA9IEFycmF5LmZyb20odW50cmFja2VkKHRoaXMuaW50ZXJuYWwpLmVudHJpZXMoKSkudG9Tb3J0ZWQoXHJcbiAgICAgIChhLCBiKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2xlYW51cE9wdC50eXBlID09PSAnbHJ1Jykge1xyXG4gICAgICAgICAgcmV0dXJuIGFbMV0udXNlQ291bnQgLSBiWzFdLnVzZUNvdW50OyAvLyBsZWFzdCB1c2VkIGZpcnN0XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBhWzFdLmNyZWF0ZWQgLSBiWzFdLmNyZWF0ZWQ7IC8vIG9sZGVzdCBmaXJzdFxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qga2VlcENvdW50ID0gTWF0aC5mbG9vcih0aGlzLmNsZWFudXBPcHQubWF4U2l6ZSAvIDIpO1xyXG5cclxuICAgIGNvbnN0IHJlbW92ZWQgPSBzb3J0ZWQuc2xpY2UoMCwgc29ydGVkLmxlbmd0aCAtIGtlZXBDb3VudCk7XHJcbiAgICBjb25zdCBrZWVwID0gc29ydGVkLnNsaWNlKHJlbW92ZWQubGVuZ3RoLCBzb3J0ZWQubGVuZ3RoKTtcclxuXHJcbiAgICByZW1vdmVkLmZvckVhY2goKFssIGVdKSA9PiB7XHJcbiAgICAgIGNsZWFyVGltZW91dChlLnRpbWVvdXQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5pbnRlcm5hbC5zZXQobmV3IE1hcChrZWVwKSk7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhlIGNhY2hlLlxyXG4gKi9cclxudHlwZSBDYWNoZU9wdGlvbnMgPSB7XHJcbiAgLyoqXHJcbiAgICogVGhlIGRlZmF1bHQgVGltZSBUbyBMaXZlIChUVEwpIGZvciBjYWNoZSBlbnRyaWVzLCBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICovXHJcbiAgdHRsPzogbnVtYmVyO1xyXG4gIC8qKlxyXG4gICAqIFRoZSBkZWZhdWx0IGR1cmF0aW9uLCBpbiBtaWxsaXNlY29uZHMsIGR1cmluZyB3aGljaCBhIGNhY2hlIGVudHJ5IGlzIGNvbnNpZGVyZWRcclxuICAgKiBzdGFsZSBidXQgY2FuIHN0aWxsIGJlIHVzZWQgd2hpbGUgcmV2YWxpZGF0aW9uIG9jY3VycyBpbiB0aGUgYmFja2dyb3VuZC5cclxuICAgKi9cclxuICBzdGFsZVRpbWU/OiBudW1iZXI7XHJcbiAgLyoqXHJcbiAgICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhlIGNhY2hlIGNsZWFudXAgc3RyYXRlZ3kuXHJcbiAgICovXHJcbiAgY2xlYW51cD86IFBhcnRpYWw8Q2xlYW51cFR5cGU+O1xyXG59O1xyXG5cclxuY29uc3QgQ0xJRU5UX0NBQ0hFX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPENhY2hlPEh0dHBSZXNwb25zZTx1bmtub3duPj4+KFxyXG4gICdJTlRFUk5BTF9DTElFTlRfQ0FDSEUnLFxyXG4pO1xyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIHRoZSBpbnN0YW5jZSBvZiB0aGUgUXVlcnlDYWNoZSBmb3IgcXVlcnlSZXNvdXJjZS4gVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgY2FsbGVkXHJcbiAqIGluIHlvdXIgYXBwbGljYXRpb24ncyByb290IGNvbmZpZ3VyYXRpb24sIGJ1dCBjYW4gYWxzbyBiZSBvdmVycmlkZW4gd2l0aCBjb21wb25lbnQvbW9kdWxlIHByb3ZpZGVycy5cclxuICpcclxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBjYWNoZS5cclxuICogQHJldHVybnMgQW4gQW5ndWxhciBgUHJvdmlkZXJgIGZvciB0aGUgY2FjaGUuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIC8vIEluIHlvdXIgYXBwLmNvbmZpZy50cyBvciBBcHBNb2R1bGUgcHJvdmlkZXJzOlxyXG4gKlxyXG4gKiBpbXBvcnQgeyBwcm92aWRlUXVlcnlDYWNoZSB9IGZyb20gJy4veW91ci1jYWNoZSc7XHJcbiAqXHJcbiAqIGV4cG9ydCBjb25zdCBhcHBDb25maWc6IEFwcGxpY2F0aW9uQ29uZmlnID0ge1xyXG4gKiAgIHByb3ZpZGVyczogW1xyXG4gKiAgICAgcHJvdmlkZVF1ZXJ5Q2FjaGUoe1xyXG4gKiAgICAgICB0dGw6IDYwMDAwLCAvLyBEZWZhdWx0IFRUTCBvZiA2MCBzZWNvbmRzXHJcbiAqICAgICAgIHN0YWxlVGltZTogMzAwMDAsIC8vIERlZmF1bHQgc3RhbGVUaW1lIG9mIDMwIHNlY29uZHNcclxuICogICAgIH0pLFxyXG4gKiAgICAgLy8gLi4uIG90aGVyIHByb3ZpZGVyc1xyXG4gKiAgIF1cclxuICogfTtcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlUXVlcnlDYWNoZShvcHQ/OiBDYWNoZU9wdGlvbnMpOiBQcm92aWRlciB7XHJcbiAgcmV0dXJuIHtcclxuICAgIHByb3ZpZGU6IENMSUVOVF9DQUNIRV9UT0tFTixcclxuICAgIHVzZVZhbHVlOiBuZXcgQ2FjaGUob3B0Py50dGwsIG9wdD8uc3RhbGVUaW1lLCBvcHQ/LmNsZWFudXApLFxyXG4gIH07XHJcbn1cclxuXHJcbmNsYXNzIE5vb3BDYWNoZTxUPiBleHRlbmRzIENhY2hlPFQ+IHtcclxuICBvdmVycmlkZSBzdG9yZShfOiBzdHJpbmcsIF9fOiBULCBfX18gPSBzdXBlci5zdGFsZVRpbWUsIF9fX18gPSBzdXBlci50dGwpIHtcclxuICAgIC8vIG5vb3BcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBJbmplY3RzIHRoZSBgUXVlcnlDYWNoZWAgaW5zdGFuY2UgdGhhdCBpcyB1c2VkIHdpdGhpbiBxdWVyeVJlc291cmNlLlxyXG4gKiBBbGxvd3MgZm9yIGRpcmVjdCBtb2RpZmljYXRpb24gb2YgY2FjaGVkIGRhdGEsIGJ1dCBpcyBtb3N0bHkgbWVhbnQgZm9yIGludGVybmFsIHVzZS5cclxuICpcclxuICogQHBhcmFtIGluamVjdG9yIC0gKE9wdGlvbmFsKSBUaGUgaW5qZWN0b3IgdG8gdXNlLiAgSWYgbm90IHByb3ZpZGVkLCB0aGUgY3VycmVudFxyXG4gKiAgICAgICAgICAgICAgICAgICBpbmplY3Rpb24gY29udGV4dCBpcyB1c2VkLlxyXG4gKiBAcmV0dXJucyBUaGUgYFF1ZXJ5Q2FjaGVgIGluc3RhbmNlLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAvLyBJbiB5b3VyIGNvbXBvbmVudCBvciBzZXJ2aWNlOlxyXG4gKlxyXG4gKiBpbXBvcnQgeyBpbmplY3RRdWVyeUNhY2hlIH0gZnJvbSAnLi95b3VyLWNhY2hlJztcclxuICpcclxuICogY29uc3RydWN0b3IoKSB7XHJcbiAqICAgY29uc3QgY2FjaGUgPSBpbmplY3RRdWVyeUNhY2hlKCk7XHJcbiAqXHJcbiAqICAgY29uc3QgbXlEYXRhID0gY2FjaGUuZ2V0KCgpID0+ICdteS1kYXRhLWtleScpO1xyXG4gKiAgIGlmIChteURhdGEoKSAhPT0gbnVsbCkge1xyXG4gKiAgICAgLy8gLi4uIHVzZSBjYWNoZWQgZGF0YSAuLi5cclxuICogICB9XHJcbiAqIH1cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RRdWVyeUNhY2hlKFxyXG4gIGluamVjdG9yPzogSW5qZWN0b3IsXHJcbik6IENhY2hlPEh0dHBSZXNwb25zZTx1bmtub3duPj4ge1xyXG4gIGNvbnN0IGNhY2hlID0gaW5qZWN0b3JcclxuICAgID8gaW5qZWN0b3IuZ2V0KENMSUVOVF9DQUNIRV9UT0tFTiwgbnVsbCwge1xyXG4gICAgICAgIG9wdGlvbmFsOiB0cnVlLFxyXG4gICAgICB9KVxyXG4gICAgOiBpbmplY3QoQ0xJRU5UX0NBQ0hFX1RPS0VOLCB7XHJcbiAgICAgICAgb3B0aW9uYWw6IHRydWUsXHJcbiAgICAgIH0pO1xyXG5cclxuICBpZiAoIWNhY2hlKSB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAnQ2FjaGUgbm90IHByb3ZpZGVkLCBwbGVhc2UgYWRkIHByb3ZpZGVRdWVyeUNhY2hlKCkgdG8gcHJvdmlkZXJzIGFycmF5JyxcclxuICAgICAgKTtcclxuICAgIGVsc2UgcmV0dXJuIG5ldyBOb29wQ2FjaGUoKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBjYWNoZTtcclxufVxyXG4iXX0=","import { HttpContext, HttpContextToken, HttpResponse, } from '@angular/common/http';\nimport { map, of, tap } from 'rxjs';\nimport { injectQueryCache } from './cache';\nconst CACHE_CONTEXT = new HttpContextToken(() => ({\n cache: false,\n}));\nexport function setCacheContext(ctx = new HttpContext(), opt) {\n return ctx.set(CACHE_CONTEXT, { ...opt, cache: true });\n}\nfunction getCacheContext(ctx) {\n return ctx.get(CACHE_CONTEXT);\n}\nfunction parseCacheControlHeader(req) {\n const header = req.headers.get('Cache-Control');\n let sMaxAge = null;\n const directives = {\n noStore: false,\n noCache: false,\n mustRevalidate: false,\n immutable: false,\n maxAge: null,\n staleWhileRevalidate: null,\n };\n if (!header)\n return directives;\n const parts = header.split(',');\n for (const part of parts) {\n const [unparsedKey, value] = part.trim().split('=');\n const key = unparsedKey.trim().toLowerCase();\n switch (key) {\n case 'no-store':\n directives.noStore = true;\n break;\n case 'no-cache':\n directives.noCache = true;\n break;\n case 'must-revalidate':\n case 'proxy-revalidate':\n directives.mustRevalidate = true;\n break;\n case 'immutable':\n directives.immutable = true;\n break;\n case 'max-age': {\n if (!value)\n break;\n const parsedValue = parseInt(value, 10);\n if (!isNaN(parsedValue))\n directives.maxAge = parsedValue;\n break;\n }\n case 's-max-age': {\n if (!value)\n break;\n const parsedValue = parseInt(value, 10);\n if (!isNaN(parsedValue))\n sMaxAge = parsedValue;\n break;\n }\n case 'stale-while-revalidate': {\n if (!value)\n break;\n const parsedValue = parseInt(value, 10);\n if (!isNaN(parsedValue))\n directives.staleWhileRevalidate = parsedValue;\n break;\n }\n }\n }\n // s-max-age takes precedence over max-age\n if (sMaxAge !== null)\n directives.maxAge = sMaxAge;\n // if no store nothing else is relevant\n if (directives.noStore)\n return {\n noStore: true,\n noCache: false,\n mustRevalidate: false,\n immutable: false,\n maxAge: null,\n staleWhileRevalidate: null,\n };\n // max age does not apply to immutable resources\n if (directives.immutable)\n return {\n ...directives,\n maxAge: null,\n };\n return directives;\n}\nfunction resolveTimings(cacheControl, staleTime, ttl) {\n const timings = {\n staleTime,\n ttl,\n };\n if (cacheControl.immutable)\n return {\n staleTime: Infinity,\n ttl: Infinity,\n };\n // if no-cache is set, we must always revalidate\n if (cacheControl.noCache || cacheControl.mustRevalidate)\n timings.staleTime = 0;\n if (cacheControl.staleWhileRevalidate !== null)\n timings.staleTime = cacheControl.staleWhileRevalidate;\n if (cacheControl.maxAge !== null)\n timings.ttl = cacheControl.maxAge * 1000;\n // if stale-while-revalidate is set, we must revalidate after that time at the latest, but we can still serve the stale data\n if (cacheControl.staleWhileRevalidate !== null) {\n const ms = cacheControl.staleWhileRevalidate * 1000;\n if (timings.staleTime === undefined || timings.staleTime > ms)\n timings.staleTime = ms;\n }\n return timings;\n}\n/**\n * Creates an `HttpInterceptorFn` that implements caching for HTTP requests. This interceptor\n * checks for a caching configuration in the request's `HttpContext` (internally set by the queryResource).\n * If caching is enabled, it attempts to retrieve responses from the cache. If a cached response\n * is found and is not stale, it's returned directly. If the cached response is stale, it's returned,\n * and a background revalidation request is made. If no cached response is found, the request\n * is made to the server, and the response is cached according to the configured TTL and staleness.\n * The interceptor also respects `Cache-Control` headers from the server.\n *\n * @param allowedMethods - An array of HTTP methods for which caching should be enabled.\n * Defaults to `['GET', 'HEAD', 'OPTIONS']`.\n *\n * @returns An `HttpInterceptorFn` that implements the caching logic.\n *\n * @example\n * // In your app.config.ts or module providers:\n *\n * import { provideHttpClient, withInterceptors } from '@angular/common/http';\n * import { createCacheInterceptor } from '@mmstack/resource';\n *\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideHttpClient(withInterceptors([createCacheInterceptor()])),\n * // ... other providers\n * ],\n * };\n */\nexport function createCacheInterceptor(allowedMethods = ['GET', 'HEAD', 'OPTIONS']) {\n const CACHE_METHODS = new Set(allowedMethods);\n return (req, next) => {\n const cache = injectQueryCache();\n if (!CACHE_METHODS.has(req.method))\n return next(req);\n const opt = getCacheContext(req.context);\n if (!opt.cache)\n return next(req);\n const key = opt.key ?? req.urlWithParams;\n const entry = cache.getUntracked(key); // null if expired or not found\n // If the entry is not stale, return it\n if (entry && !entry.isStale)\n return of(entry.value);\n // resource itself handles case of showing stale data...the request must process as this will \"refresh said data\"\n const eTag = entry?.value.headers.get('ETag');\n const lastModified = entry?.value.headers.get('Last-Modified');\n if (eTag) {\n req = req.clone({ setHeaders: { 'If-None-Match': eTag } });\n }\n if (lastModified) {\n req = req.clone({ setHeaders: { 'If-Modified-Since': lastModified } });\n }\n return next(req).pipe(tap((event) => {\n if (event instanceof HttpResponse && event.ok) {\n const cacheControl = parseCacheControlHeader(event);\n if (cacheControl.noStore)\n return;\n const { staleTime, ttl } = resolveTimings(cacheControl, opt.staleTime, opt.ttl);\n cache.store(key, event, staleTime, ttl);\n }\n }), map((event) => {\n // handle 304 responses due to eTag/last-modified\n if (event instanceof HttpResponse && event.status === 304 && entry) {\n return entry.value;\n }\n return event;\n }));\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yZXNvdXJjZS9zcmMvbGliL3V0aWwvY2FjaGUvY2FjaGUuaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFdBQVcsRUFDWCxnQkFBZ0IsRUFLaEIsWUFBWSxHQUNiLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQVMzQyxNQUFNLGFBQWEsR0FBRyxJQUFJLGdCQUFnQixDQUFvQixHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLEtBQUssRUFBRSxLQUFLO0NBQ2IsQ0FBQyxDQUFDLENBQUM7QUFFSixNQUFNLFVBQVUsZUFBZSxDQUM3QixHQUFHLEdBQUcsSUFBSSxXQUFXLEVBQUUsRUFDdkIsR0FFQztJQUVELE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsR0FBZ0I7SUFDdkMsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFXRCxTQUFTLHVCQUF1QixDQUM5QixHQUEwQjtJQUUxQixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUVoRCxJQUFJLE9BQU8sR0FBa0IsSUFBSSxDQUFDO0lBQ2xDLE1BQU0sVUFBVSxHQUF5QjtRQUN2QyxPQUFPLEVBQUUsS0FBSztRQUNkLE9BQU8sRUFBRSxLQUFLO1FBQ2QsY0FBYyxFQUFFLEtBQUs7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RUFBRTtZQUNaLElBQUksS0FBSyxZQUFZLFlBQVksSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzlDLE1BQU0sWUFBWSxHQUFHLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNwRCxJQUFJLFlBQVksQ0FBQyxPQUFPO29CQUFFLE9BQU87Z0JBRWpDLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEdBQUcsY0FBYyxDQUN2QyxZQUFZLEVBQ1osR0FBRyxDQUFDLFNBQVMsRUFDYixHQUFHLENBQUMsR0FBRyxDQUNSLENBQUM7Z0JBRUYsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMxQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDWixpREFBaUQ7WUFDakQsSUFBSSxLQUFLLFlBQVksWUFBWSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNuRSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDckIsQ0FBQztZQUVELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEh0dHBDb250ZXh0LFxyXG4gIEh0dHBDb250ZXh0VG9rZW4sXHJcbiAgdHlwZSBIdHRwRXZlbnQsXHJcbiAgdHlwZSBIdHRwSGFuZGxlckZuLFxyXG4gIHR5cGUgSHR0cEludGVyY2VwdG9yRm4sXHJcbiAgdHlwZSBIdHRwUmVxdWVzdCxcclxuICBIdHRwUmVzcG9uc2UsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUsIG9mLCB0YXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgaW5qZWN0UXVlcnlDYWNoZSB9IGZyb20gJy4vY2FjaGUnO1xyXG5cclxudHlwZSBDYWNoZUVudHJ5T3B0aW9ucyA9IHtcclxuICBrZXk/OiBzdHJpbmc7XHJcbiAgdHRsPzogbnVtYmVyO1xyXG4gIHN0YWxlVGltZT86IG51bWJlcjtcclxuICBjYWNoZTogYm9vbGVhbjtcclxufTtcclxuXHJcbmNvbnN0IENBQ0hFX0NPTlRFWFQgPSBuZXcgSHR0cENvbnRleHRUb2tlbjxDYWNoZUVudHJ5T3B0aW9ucz4oKCkgPT4gKHtcclxuICBjYWNoZTogZmFsc2UsXHJcbn0pKTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRDYWNoZUNvbnRleHQoXHJcbiAgY3R4ID0gbmV3IEh0dHBDb250ZXh0KCksXHJcbiAgb3B0OiBPbWl0PENhY2hlRW50cnlPcHRpb25zLCAnY2FjaGUnIHwgJ2tleSc+ICYge1xyXG4gICAga2V5OiBSZXF1aXJlZDxDYWNoZUVudHJ5T3B0aW9ucz5bJ2tleSddO1xyXG4gIH0sXHJcbikge1xyXG4gIHJldHVybiBjdHguc2V0KENBQ0hFX0NPTlRFWFQsIHsgLi4ub3B0LCBjYWNoZTogdHJ1ZSB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Q2FjaGVDb250ZXh0KGN0eDogSHR0cENvbnRleHQpOiBDYWNoZUVudHJ5T3B0aW9ucyB7XHJcbiAgcmV0dXJuIGN0eC5nZXQoQ0FDSEVfQ09OVEVYVCk7XHJcbn1cclxuXHJcbnR5cGUgUmVzb2x2ZWRDYWNoZUNvbnRyb2wgPSB7XHJcbiAgbm9TdG9yZTogYm9vbGVhbjtcclxuICBub0NhY2hlOiBib29sZWFuO1xyXG4gIG11c3RSZXZhbGlkYXRlOiBib29sZWFuO1xyXG4gIGltbXV0YWJsZTogYm9vbGVhbjtcclxuICBtYXhBZ2U6IG51bWJlciB8IG51bGw7XHJcbiAgc3RhbGVXaGlsZVJldmFsaWRhdGU6IG51bWJlciB8IG51bGw7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBwYXJzZUNhY2hlQ29udHJvbEhlYWRlcihcclxuICByZXE6IEh0dHBSZXNwb25zZTx1bmtub3duPixcclxuKTogUmVzb2x2ZWRDYWNoZUNvbnRyb2wge1xyXG4gIGNvbnN0IGhlYWRlciA9IHJlcS5oZWFkZXJzLmdldCgnQ2FjaGUtQ29udHJvbCcpO1xyXG5cclxuICBsZXQgc01heEFnZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgY29uc3QgZGlyZWN0aXZlczogUmVzb2x2ZWRDYWNoZUNvbnRyb2wgPSB7XHJcbiAgICBub1N0b3JlOiBmYWxzZSxcclxuICAgIG5vQ2FjaGU6IGZhbHNlLFxyXG4gICAgbXVzdFJldmFsaWRhdGU6IGZhbHNlLFxyXG4gICAgaW1tdXRhYmxlOiBmYWxzZSxcclxuICAgIG1heEFnZTogbnVsbCxcclxuICAgIHN0YWxlV2hpbGVSZXZhbGlkYXRlOiBudWxsLFxyXG4gIH07XHJcblxyXG4gIGlmICghaGVhZGVyKSByZXR1cm4gZGlyZWN0aXZlcztcclxuXHJcbiAgY29uc3QgcGFydHMgPSBoZWFkZXIuc3BsaXQoJywnKTtcclxuXHJcbiAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XHJcbiAgICBjb25zdCBbdW5wYXJzZWRLZXksIHZhbHVlXSA9IHBhcnQudHJpbSgpLnNwbGl0KCc9Jyk7XHJcbiAgICBjb25zdCBrZXkgPSB1bnBhcnNlZEtleS50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICBzd2l0Y2ggKGtleSkge1xyXG4gICAgICBjYXNlICduby1zdG9yZSc6XHJcbiAgICAgICAgZGlyZWN0aXZlcy5ub1N0b3JlID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnbm8tY2FjaGUnOlxyXG4gICAgICAgIGRpcmVjdGl2ZXMubm9DYWNoZSA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ211c3QtcmV2YWxpZGF0ZSc6XHJcbiAgICAgIGNhc2UgJ3Byb3h5LXJldmFsaWRhdGUnOlxyXG4gICAgICAgIGRpcmVjdGl2ZXMubXVzdFJldmFsaWRhdGUgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdpbW11dGFibGUnOlxyXG4gICAgICAgIGRpcmVjdGl2ZXMuaW1tdXRhYmxlID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnbWF4LWFnZSc6IHtcclxuICAgICAgICBpZiAoIXZhbHVlKSBicmVhaztcclxuICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XHJcbiAgICAgICAgaWYgKCFpc05hTihwYXJzZWRWYWx1ZSkpIGRpcmVjdGl2ZXMubWF4QWdlID0gcGFyc2VkVmFsdWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAncy1tYXgtYWdlJzoge1xyXG4gICAgICAgIGlmICghdmFsdWUpIGJyZWFrO1xyXG4gICAgICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcclxuICAgICAgICBpZiAoIWlzTmFOKHBhcnNlZFZhbHVlKSkgc01heEFnZSA9IHBhcnNlZFZhbHVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ3N0YWxlLXdoaWxlLXJldmFsaWRhdGUnOiB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkgYnJlYWs7XHJcbiAgICAgICAgY29uc3QgcGFyc2VkVmFsdWUgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xyXG4gICAgICAgIGlmICghaXNOYU4ocGFyc2VkVmFsdWUpKSBkaXJlY3RpdmVzLnN0YWxlV2hpbGVSZXZhbGlkYXRlID0gcGFyc2VkVmFsdWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIHMtbWF4LWFnZSB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgbWF4LWFnZVxyXG4gIGlmIChzTWF4QWdlICE9PSBudWxsKSBkaXJlY3RpdmVzLm1heEFnZSA9IHNNYXhBZ2U7XHJcblxyXG4gIC8vIGlmIG5vIHN0b3JlIG5vdGhpbmcgZWxzZSBpcyByZWxldmFudFxyXG4gIGlmIChkaXJlY3RpdmVzLm5vU3RvcmUpXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBub1N0b3JlOiB0cnVlLFxyXG4gICAgICBub0NhY2hlOiBmYWxzZSxcclxuICAgICAgbXVzdFJldmFsaWRhdGU6IGZhbHNlLFxyXG4gICAgICBpbW11dGFibGU6IGZhbHNlLFxyXG4gICAgICBtYXhBZ2U6IG51bGwsXHJcbiAgICAgIHN0YWxlV2hpbGVSZXZhbGlkYXRlOiBudWxsLFxyXG4gICAgfTtcclxuXHJcbiAgLy8gbWF4IGFnZSBkb2VzIG5vdCBhcHBseSB0byBpbW11dGFibGUgcmVzb3VyY2VzXHJcbiAgaWYgKGRpcmVjdGl2ZXMuaW1tdXRhYmxlKVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLi4uZGlyZWN0aXZlcyxcclxuICAgICAgbWF4QWdlOiBudWxsLFxyXG4gICAgfTtcclxuXHJcbiAgcmV0dXJuIGRpcmVjdGl2ZXM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlc29sdmVUaW1pbmdzKFxyXG4gIGNhY2hlQ29udHJvbDogUmVzb2x2ZWRDYWNoZUNvbnRyb2wsXHJcbiAgc3RhbGVUaW1lPzogbnVtYmVyLFxyXG4gIHR0bD86IG51bWJlcixcclxuKTogeyBzdGFsZVRpbWU/OiBudW1iZXI7IHR0bD86IG51bWJlciB9IHtcclxuICBjb25zdCB0aW1pbmdzID0ge1xyXG4gICAgc3RhbGVUaW1lLFxyXG4gICAgdHRsLFxyXG4gIH07XHJcblxyXG4gIGlmIChjYWNoZUNvbnRyb2wuaW1tdXRhYmxlKVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc3RhbGVUaW1lOiBJbmZpbml0eSxcclxuICAgICAgdHRsOiBJbmZpbml0eSxcclxuICAgIH07XHJcblxyXG4gIC8vIGlmIG5vLWNhY2hlIGlzIHNldCwgd2UgbXVzdCBhbHdheXMgcmV2YWxpZGF0ZVxyXG4gIGlmIChjYWNoZUNvbnRyb2wubm9DYWNoZSB8fCBjYWNoZUNvbnRyb2wubXVzdFJldmFsaWRhdGUpXHJcbiAgICB0aW1pbmdzLnN0YWxlVGltZSA9IDA7XHJcblxyXG4gIGlmIChjYWNoZUNvbnRyb2wuc3RhbGVXaGlsZVJldmFsaWRhdGUgIT09IG51bGwpXHJcbiAgICB0aW1pbmdzLnN0YWxlVGltZSA9IGNhY2hlQ29udHJvbC5zdGFsZVdoaWxlUmV2YWxpZGF0ZTtcclxuXHJcbiAgaWYgKGNhY2hlQ29udHJvbC5tYXhBZ2UgIT09IG51bGwpIHRpbWluZ3MudHRsID0gY2FjaGVDb250cm9sLm1heEFnZSAqIDEwMDA7XHJcblxyXG4gIC8vIGlmIHN0YWxlLXdoaWxlLXJldmFsaWRhdGUgaXMgc2V0LCB3ZSBtdXN0IHJldmFsaWRhdGUgYWZ0ZXIgdGhhdCB0aW1lIGF0IHRoZSBsYXRlc3QsIGJ1dCB3ZSBjYW4gc3RpbGwgc2VydmUgdGhlIHN0YWxlIGRhdGFcclxuICBpZiAoY2FjaGVDb250cm9sLnN0YWxlV2hpbGVSZXZhbGlkYXRlICE9PSBudWxsKSB7XHJcbiAgICBjb25zdCBtcyA9IGNhY2hlQ29udHJvbC5zdGFsZVdoaWxlUmV2YWxpZGF0ZSAqIDEwMDA7XHJcbiAgICBpZiAodGltaW5ncy5zdGFsZVRpbWUgPT09IHVuZGVmaW5lZCB8fCB0aW1pbmdzLnN0YWxlVGltZSA+IG1zKVxyXG4gICAgICB0aW1pbmdzLnN0YWxlVGltZSA9IG1zO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRpbWluZ3M7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGFuIGBIdHRwSW50ZXJjZXB0b3JGbmAgdGhhdCBpbXBsZW1lbnRzIGNhY2hpbmcgZm9yIEhUVFAgcmVxdWVzdHMuIFRoaXMgaW50ZXJjZXB0b3JcclxuICogY2hlY2tzIGZvciBhIGNhY2hpbmcgY29uZmlndXJhdGlvbiBpbiB0aGUgcmVxdWVzdCdzIGBIdHRwQ29udGV4dGAgKGludGVybmFsbHkgc2V0IGJ5IHRoZSBxdWVyeVJlc291cmNlKS5cclxuICogSWYgY2FjaGluZyBpcyBlbmFibGVkLCBpdCBhdHRlbXB0cyB0byByZXRyaWV2ZSByZXNwb25zZXMgZnJvbSB0aGUgY2FjaGUuIElmIGEgY2FjaGVkIHJlc3BvbnNlXHJcbiAqIGlzIGZvdW5kIGFuZCBpcyBub3Qgc3RhbGUsIGl0J3MgcmV0dXJuZWQgZGlyZWN0bHkuICBJZiB0aGUgY2FjaGVkIHJlc3BvbnNlIGlzIHN0YWxlLCBpdCdzIHJldHVybmVkLFxyXG4gKiBhbmQgYSBiYWNrZ3JvdW5kIHJldmFsaWRhdGlvbiByZXF1ZXN0IGlzIG1hZGUuICBJZiBubyBjYWNoZWQgcmVzcG9uc2UgaXMgZm91bmQsIHRoZSByZXF1ZXN0XHJcbiAqIGlzIG1hZGUgdG8gdGhlIHNlcnZlciwgYW5kIHRoZSByZXNwb25zZSBpcyBjYWNoZWQgYWNjb3JkaW5nIHRvIHRoZSBjb25maWd1cmVkIFRUTCBhbmQgc3RhbGVuZXNzLlxyXG4gKiBUaGUgaW50ZXJjZXB0b3IgYWxzbyByZXNwZWN0cyBgQ2FjaGUtQ29udHJvbGAgaGVhZGVycyBmcm9tIHRoZSBzZXJ2ZXIuXHJcbiAqXHJcbiAqIEBwYXJhbSBhbGxvd2VkTWV0aG9kcyAtIEFuIGFycmF5IG9mIEhUVFAgbWV0aG9kcyBmb3Igd2hpY2ggY2FjaGluZyBzaG91bGQgYmUgZW5hYmxlZC5cclxuICogICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byBgWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJ11gLlxyXG4gKlxyXG4gKiBAcmV0dXJucyBBbiBgSHR0cEludGVyY2VwdG9yRm5gIHRoYXQgaW1wbGVtZW50cyB0aGUgY2FjaGluZyBsb2dpYy5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogLy8gSW4geW91ciBhcHAuY29uZmlnLnRzIG9yIG1vZHVsZSBwcm92aWRlcnM6XHJcbiAqXHJcbiAqIGltcG9ydCB7IHByb3ZpZGVIdHRwQ2xpZW50LCB3aXRoSW50ZXJjZXB0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG4gKiBpbXBvcnQgeyBjcmVhdGVDYWNoZUludGVyY2VwdG9yIH0gZnJvbSAnQG1tc3RhY2svcmVzb3VyY2UnO1xyXG4gKlxyXG4gKiBleHBvcnQgY29uc3QgYXBwQ29uZmlnOiBBcHBsaWNhdGlvbkNvbmZpZyA9IHtcclxuICogICBwcm92aWRlcnM6IFtcclxuICogICAgIHByb3ZpZGVIdHRwQ2xpZW50KHdpdGhJbnRlcmNlcHRvcnMoW2NyZWF0ZUNhY2hlSW50ZXJjZXB0b3IoKV0pKSxcclxuICogICAgIC8vIC4uLiBvdGhlciBwcm92aWRlcnNcclxuICogICBdLFxyXG4gKiB9O1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhY2hlSW50ZXJjZXB0b3IoXHJcbiAgYWxsb3dlZE1ldGhvZHMgPSBbJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnXSxcclxuKTogSHR0cEludGVyY2VwdG9yRm4ge1xyXG4gIGNvbnN0IENBQ0hFX01FVEhPRFMgPSBuZXcgU2V0PHN0cmluZz4oYWxsb3dlZE1ldGhvZHMpO1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgcmVxOiBIdHRwUmVxdWVzdDx1bmtub3duPixcclxuICAgIG5leHQ6IEh0dHBIYW5kbGVyRm4sXHJcbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8dW5rbm93bj4+ID0+IHtcclxuICAgIGNvbnN0IGNhY2hlID0gaW5qZWN0UXVlcnlDYWNoZSgpO1xyXG5cclxuICAgIGlmICghQ0FDSEVfTUVUSE9EUy5oYXMocmVxLm1ldGhvZCkpIHJldHVybiBuZXh0KHJlcSk7XHJcbiAgICBjb25zdCBvcHQgPSBnZXRDYWNoZUNvbnRleHQocmVxLmNvbnRleHQpO1xyXG5cclxuICAgIGlmICghb3B0LmNhY2hlKSByZXR1cm4gbmV4dChyZXEpO1xyXG5cclxuICAgIGNvbnN0IGtleSA9IG9wdC5rZXkgPz8gcmVxLnVybFdpdGhQYXJhbXM7XHJcbiAgICBjb25zdCBlbnRyeSA9IGNhY2hlLmdldFVudHJhY2tlZChrZXkpOyAvLyBudWxsIGlmIGV4cGlyZWQgb3Igbm90IGZvdW5kXHJcblxyXG4gICAgLy8gSWYgdGhlIGVudHJ5IGlzIG5vdCBzdGFsZSwgcmV0dXJuIGl0XHJcbiAgICBpZiAoZW50cnkgJiYgIWVudHJ5LmlzU3RhbGUpIHJldHVybiBvZihlbnRyeS52YWx1ZSk7XHJcblxyXG4gICAgLy8gcmVzb3VyY2UgaXRzZWxmIGhhbmRsZXMgY2FzZSBvZiBzaG93aW5nIHN0YWxlIGRhdGEuLi50aGUgcmVxdWVzdCBtdXN0IHByb2Nlc3MgYXMgdGhpcyB3aWxsIFwicmVmcmVzaCBzYWlkIGRhdGFcIlxyXG5cclxuICAgIGNvbnN0IGVUYWcgPSBlbnRyeT8udmFsdWUuaGVhZGVycy5nZXQoJ0VUYWcnKTtcclxuICAgIGNvbnN0IGxhc3RNb2RpZmllZCA9IGVudHJ5Py52YWx1ZS5oZWFkZXJzLmdldCgnTGFzdC1Nb2RpZmllZCcpO1xyXG5cclxuICAgIGlmIChlVGFnKSB7XHJcbiAgICAgIHJlcSA9IHJlcS5jbG9uZSh7IHNldEhlYWRlcnM6IHsgJ0lmLU5vbmUtTWF0Y2gnOiBlVGFnIH0gfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGxhc3RNb2RpZmllZCkge1xyXG4gICAgICByZXEgPSByZXEuY2xvbmUoeyBzZXRIZWFkZXJzOiB7ICdJZi1Nb2RpZmllZC1TaW5jZSc6IGxhc3RNb2RpZmllZCB9IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXh0KHJlcSkucGlwZShcclxuICAgICAgdGFwKChldmVudCkgPT4ge1xyXG4gICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSAmJiBldmVudC5vaykge1xyXG4gICAgICAgICAgY29uc3QgY2FjaGVDb250cm9sID0gcGFyc2VDYWNoZUNvbnRyb2xIZWFkZXIoZXZlbnQpO1xyXG4gICAgICAgICAgaWYgKGNhY2hlQ29udHJvbC5ub1N0b3JlKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgY29uc3QgeyBzdGFsZVRpbWUsIHR0bCB9ID0gcmVzb2x2ZVRpbWluZ3MoXHJcbiAgICAgICAgICAgIGNhY2hlQ29udHJvbCxcclxuICAgICAgICAgICAgb3B0LnN0YWxlVGltZSxcclxuICAgICAgICAgICAgb3B0LnR0bCxcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgY2FjaGUuc3RvcmUoa2V5LCBldmVudCwgc3RhbGVUaW1lLCB0dGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIG1hcCgoZXZlbnQpID0+IHtcclxuICAgICAgICAvLyBoYW5kbGUgMzA0IHJlc3BvbnNlcyBkdWUgdG8gZVRhZy9sYXN0LW1vZGlmaWVkXHJcbiAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlICYmIGV2ZW50LnN0YXR1cyA9PT0gMzA0ICYmIGVudHJ5KSB7XHJcbiAgICAgICAgICByZXR1cm4gZW50cnkudmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZXZlbnQ7XHJcbiAgICAgIH0pLFxyXG4gICAgKTtcclxuICB9O1xyXG59XHJcbiJdfQ==","import { computed } from '@angular/core';\nimport { toWritable } from '@mmstack/primitives';\nexport function catchValueError(resource, fallback) {\n return {\n ...resource,\n value: toWritable(computed(() => {\n try {\n return resource.value();\n }\n catch {\n return fallback;\n }\n }), (value) => resource.value.set(value)),\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0Y2gtdmFsdWUtZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yZXNvdXJjZS9zcmMvbGliL3V0aWwvY2F0Y2gtdmFsdWUtZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFakQsTUFBTSxVQUFVLGVBQWUsQ0FDN0IsUUFBNEIsRUFDNUIsUUFBVztJQUVYLE9BQU87UUFDTCxHQUFHLFFBQVE7UUFDWCxLQUFLLEVBQUUsVUFBVSxDQUNmLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUM7Z0JBQ0gsT0FBTyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDMUIsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCxPQUFPLFFBQVEsQ0FBQztZQUNsQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUNyQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cFJlc291cmNlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvV3JpdGFibGUgfSBmcm9tICdAbW1zdGFjay9wcmltaXRpdmVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNhdGNoVmFsdWVFcnJvcjxUPihcbiAgcmVzb3VyY2U6IEh0dHBSZXNvdXJjZVJlZjxUPixcbiAgZmFsbGJhY2s6IFQsXG4pOiBIdHRwUmVzb3VyY2VSZWY8VD4ge1xuICByZXR1cm4ge1xuICAgIC4uLnJlc291cmNlLFxuICAgIHZhbHVlOiB0b1dyaXRhYmxlKFxuICAgICAgY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiByZXNvdXJjZS52YWx1ZSgpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgKHZhbHVlKSA9PiByZXNvdXJjZS52YWx1ZS5zZXQodmFsdWUpLFxuICAgICksXG4gIH07XG59XG4iXX0=","import { computed, effect, signal, untracked } from '@angular/core';\n/** @internal */\nfunction internalCeateCircuitBreaker(treshold = 5, resetTimeout = 30000) {\n const halfOpen = signal(false);\n const failureCount = signal(0);\n const status = computed(() => {\n if (failureCount() >= treshold)\n return 'CLOSED';\n return halfOpen() ? 'HALF_OPEN' : 'OPEN';\n });\n const isClosed = computed(() => status() === 'CLOSED');\n const success = () => {\n failureCount.set(0);\n halfOpen.set(false);\n };\n const tryOnce = () => {\n if (!untracked(isClosed))\n return;\n halfOpen.set(true);\n failureCount.set(treshold - 1);\n };\n const effectRef = effect((cleanup) => {\n if (!isClosed())\n return;\n const timeout = setTimeout(tryOnce, resetTimeout);\n return cleanup(() => clearTimeout(timeout));\n });\n const fail = () => {\n failureCount.set(failureCount() + 1);\n halfOpen.set(false);\n };\n return {\n status,\n isClosed,\n fail,\n success,\n halfOpen: tryOnce,\n destroy: () => effectRef.destroy(),\n };\n}\n/** @internal */\nfunction createNeverBrokenCircuitBreaker() {\n return {\n isClosed: computed(() => false),\n status: signal('OPEN'),\n fail: () => {\n // noop\n },\n success: () => {\n // noop\n },\n halfOpen: () => {\n // noop\n },\n destroy: () => {\n // noop\n },\n };\n}\n/**\n * Creates a circuit breaker instance.\n *\n * @param options - Configuration options for the circuit breaker. Can be:\n * - `undefined`: Creates a \"no-op\" circuit breaker that is always open (never trips).\n * - `true`: Creates a circuit breaker with default settings (threshold: 5, timeout: 30000ms).\n * - `CircuitBreaker`: Reuses an existing `CircuitBreaker` instance.\n * - `{ threshold?: number; timeout?: number; }`: Creates a circuit breaker with the specified threshold and timeout.\n *\n * @returns A `CircuitBreaker` instance.\n *\n * @example\n * // Create a circuit breaker with default settings:\n * const breaker = createCircuitBreaker();\n *\n * // Create a circuit breaker with custom settings:\n * const customBreaker = createCircuitBreaker({ threshold: 10, timeout: 60000 });\n *\n * // Share a single circuit breaker instance across multiple resources:\n * const sharedBreaker = createCircuitBreaker();\n * const resource1 = queryResource(..., { circuitBreaker: sharedBreaker });\n * const resource2 = mutationResource(..., { circuitBreaker: sharedBreaker });\n */\nexport function createCircuitBreaker(opt) {\n if (opt === false)\n return createNeverBrokenCircuitBreaker();\n if (typeof opt === 'object' && 'isClosed' in opt)\n return opt;\n return internalCeateCircuitBreaker(opt?.treshold, opt?.timeout);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2lyY3VpdC1icmVha2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcmVzb3VyY2Uvc3JjL2xpYi91dGlsL2NpcmN1aXQtYnJlYWtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBcUQ1RSxnQkFBZ0I7QUFDaEIsU0FBUywyQkFBMkIsQ0FDbEMsUUFBUSxHQUFHLENBQUMsRUFDWixZQUFZLEdBQUcsS0FBSztJQUVwQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRS9CLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBc0IsR0FBRyxFQUFFO1FBQ2hELElBQUksWUFBWSxFQUFFLElBQUksUUFBUTtZQUFFLE9BQU8sUUFBUSxDQUFDO1FBQ2hELE9BQU8sUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzNDLENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDO0lBRXZELE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRTtRQUNuQixZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEIsQ0FBQyxDQUFDO0lBRUYsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFO1FBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO1lBQUUsT0FBTztRQUNqQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25CLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUMsQ0FBQztJQUVGLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQ25DLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFBRSxPQUFPO1FBRXhCLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFFbEQsT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLElBQUksR0FBRyxHQUFHLEVBQUU7UUFDaEIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNyQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RCLENBQUMsQ0FBQztJQUVGLE9BQU87UUFDTCxNQUFNO1FBQ04sUUFBUTtRQUNSLElBQUk7UUFDSixPQUFPO1FBQ1AsUUFBUSxFQUFFLE9BQU87UUFDakIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUU7S0FDbkMsQ0FBQztBQUNKLENBQUM7QUFFRCxnQkFBZ0I7QUFDaEIsU0FBUywrQkFBK0I7SUFDdEMsT0FBTztRQUNMLFFBQVEsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQy9CLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3RCLElBQUksRUFBRSxHQUFHLEVBQUU7WUFDVCxPQUFPO1FBQ1QsQ0FBQztRQUNELE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDWixPQUFPO1FBQ1QsQ0FBQztRQUNELFFBQVEsRUFBRSxHQUFHLEVBQUU7WUFDYixPQUFPO1FBQ1QsQ0FBQztRQUNELE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDWixPQUFPO1FBQ1QsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLEdBQTJCO0lBRTNCLElBQUksR0FBRyxLQUFLLEtBQUs7UUFBRSxPQUFPLCtCQUErQixFQUFFLENBQUM7SUFFNUQsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksVUFBVSxJQUFJLEdBQUc7UUFBRSxPQUFPLEdBQUcsQ0FBQztJQUU3RCxPQUFPLDJCQUEyQixDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2xFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgZWZmZWN0LCBTaWduYWwsIHNpZ25hbCwgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG4vKipcclxuICogUmVwcmVzZW50cyB0aGUgcG9zc2libGUgc3RhdGVzIG9mIGEgY2lyY3VpdCBicmVha2VyLlxyXG4gKiAtIGBDTE9TRURgOiBUaGUgY2lyY3VpdCBicmVha2VyIGlzIGNsb3NlZCwgYW5kIG9wZXJhdGlvbnMgYXJlIGFsbG93ZWQgdG8gcHJvY2VlZC5cclxuICogLSBgT1BFTmA6IFRoZSBjaXJjdWl0IGJyZWFrZXIgaXMgb3BlbiwgYW5kIG9wZXJhdGlvbnMgYXJlIGJsb2NrZWQuXHJcbiAqIC0gYEhBTEZfT1BFTmA6IFRoZSBjaXJjdWl0IGJyZWFrZXIgaXMgaW4gYSBoYWxmLW9wZW4gc3RhdGUsIGFsbG93aW5nIGEgbGltaXRlZCBudW1iZXIgb2Ygb3BlcmF0aW9ucyB0byB0ZXN0IGlmIHRoZSB1bmRlcmx5aW5nIGlzc3VlIGlzIHJlc29sdmVkLlxyXG4gKi9cclxudHlwZSBDaXJjdWl0QnJlYWtlclN0YXRlID0gJ0NMT1NFRCcgfCAnT1BFTicgfCAnSEFMRl9PUEVOJztcclxuXHJcbi8qKlxyXG4gKiBSZXByZXNlbnRzIGEgY2lyY3VpdCBicmVha2VyLCB3aGljaCBtb25pdG9ycyBvcGVyYXRpb25zIGFuZCBwcmV2ZW50cyBmYWlsdXJlcyBmcm9tIGNhc2NhZGluZy5cclxuICovXHJcbmV4cG9ydCB0eXBlIENpcmN1aXRCcmVha2VyID0ge1xyXG4gIC8qKlxyXG4gICAqIEEgc2lnbmFsIGluZGljYXRpbmcgd2hldGhlciB0aGUgY2lyY3VpdCBicmVha2VyIGlzIGN1cnJlbnRseSBjbG9zZWQgKGFsbG93aW5nIG9wZXJhdGlvbnMpLlxyXG4gICAqL1xyXG4gIGlzQ2xvc2VkOiBTaWduYWw8Ym9vbGVhbj47XHJcbiAgLyoqXHJcbiAgICogQSBzaWduYWwgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBjaXJjdWl0IGJyZWFrZXIuXHJcbiAgICovXHJcbiAgc3RhdHVzOiBTaWduYWw8Q2lyY3VpdEJyZWFrZXJTdGF0ZT47XHJcbiAgLyoqXHJcbiAgICogU2lnbmFscyBhIGZhaWx1cmUgdG8gdGhlIGNpcmN1aXQgYnJlYWtlci4gIFRoaXMgbWF5IGNhdXNlIHRoZSBjaXJjdWl0IGJyZWFrZXIgdG8gb3Blbi5cclxuICAgKi9cclxuICBmYWlsOiAoKSA9PiB2b2lkO1xyXG4gIC8qKlxyXG4gICAqIFNpZ25hbHMgYSBzdWNjZXNzIHRvIHRoZSBjaXJjdWl0IGJyZWFrZXIuICBUaGlzIG1heSBjYXVzZSB0aGUgY2lyY3VpdCBicmVha2VyIHRvIGNsb3NlLlxyXG4gICAqL1xyXG4gIHN1Y2Nlc3M6ICgpID0+IHZvaWQ7XHJcbiAgLyoqXHJcbiAgICogQXR0ZW1wdHMgdG8gdHJhbnNpdGlvbiB0aGUgY2lyY3VpdCBicmVha2VyIHRvIHRoZSBoYWxmLW9wZW4gc3RhdGUuIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWRcclxuICAgKiB0byB0ZXN0IGlmIHRoZSB1bmRlcmx5aW5nIGlzc3VlIGhhcyBiZWVuIHJlc29sdmVkIGFmdGVyIHRoZSBjaXJjdWl0IGJyZWFrZXIgaGFzIGJlZW4gb3Blbi5cclxuICAgKi9cclxuICBoYWxmT3BlbjogKCkgPT4gdm9pZDtcclxuICAvKipcclxuICAgKiBEZXN0cm95cyB0aGUgY2lyY3VpdCBicmVha2VyICYgaW5pdGlhdGVzIHJlbGF0ZWQgY2xlYW51cFxyXG4gICAqL1xyXG4gIGRlc3Ryb3k6ICgpID0+IHZvaWQ7XHJcbn07XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgY3JlYXRpbmcgYSBjaXJjdWl0IGJyZWFrZXIuXHJcbiAqICAtIGBmYWxzZWA6IERpc2FibGVzIGNpcmN1aXQgYnJlYWtlciBmdW5jdGlvbmFsaXR5IChhbHdheXMgb3BlbikuXHJcbiAqICAtIHRydWU6IENyZWF0ZXMgYSBuZXcgY2lyY3VpdCBicmVha2VyIHdpdGggZGVmYXVsdCBvcHRpb25zLlxyXG4gKiAgLSBgQ2lyY3VpdEJyZWFrZXJgOiBQcm92aWRlcyBhbiBleGlzdGluZyBgQ2lyY3VpdEJyZWFrZXJgIGluc3RhbmNlIHRvIHVzZS5cclxuICogIC0gYHsgdHJlc2hvbGQ/OiBudW1iZXI7IHRpbWVvdXQ/OiBudW1iZXI7IH1gOiBDcmVhdGVzIGEgbmV3IGNpcmN1aXQgYnJlYWtlciB3aXRoIHRoZSBzcGVjaWZpZWQgb3B0aW9ucy5cclxuICovXHJcbmV4cG9ydCB0eXBlIENpcmN1aXRCcmVha2VyT3B0aW9ucyA9XHJcbiAgfCBmYWxzZVxyXG4gIHwgQ2lyY3VpdEJyZWFrZXJcclxuICB8IHsgdHJlc2hvbGQ/OiBudW1iZXI7IHRpbWVvdXQ/OiBudW1iZXIgfTtcclxuXHJcbi8qKiBAaW50ZXJuYWwgKi9cclxuZnVuY3Rpb24gaW50ZXJuYWxDZWF0ZUNpcmN1aXRCcmVha2VyKFxyXG4gIHRyZXNob2xkID0gNSxcclxuICByZXNldFRpbWVvdXQgPSAzMDAwMCxcclxuKTogQ2lyY3VpdEJyZWFrZXIge1xyXG4gIGNvbnN0IGhhbGZPcGVuID0gc2lnbmFsKGZhbHNlKTtcclxuICBjb25zdCBmYWlsdXJlQ291bnQgPSBzaWduYWwoMCk7XHJcblxyXG4gIGNvbnN0IHN0YXR1cyA9IGNvbXB1dGVkPENpcmN1aXRCcmVha2VyU3RhdGU+KCgpID0+IHtcclxuICAgIGlmIChmYWlsdXJlQ291bnQoKSA+PSB0cmVzaG9sZCkgcmV0dXJuICdDTE9TRUQnO1xyXG4gICAgcmV0dXJuIGhhbGZPcGVuKCkgPyAnSEFMRl9PUEVOJyA6ICdPUEVOJztcclxuICB9KTtcclxuXHJcbiAgY29uc3QgaXNDbG9zZWQgPSBjb21wdXRlZCgoKSA9PiBzdGF0dXMoKSA9PT0gJ0NMT1NFRCcpO1xyXG5cclxuICBjb25zdCBzdWNjZXNzID0gKCkgPT4ge1xyXG4gICAgZmFpbHVyZUNvdW50LnNldCgwKTtcclxuICAgIGhhbGZPcGVuLnNldChmYWxzZSk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgdHJ5T25jZSA9ICgpID0+IHtcclxuICAgIGlmICghdW50cmFja2VkKGlzQ2xvc2VkKSkgcmV0dXJuO1xyXG4gICAgaGFsZk9wZW4uc2V0KHRydWUpO1xyXG4gICAgZmFpbHVyZUNvdW50LnNldCh0cmVzaG9sZCAtIDEpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IGVmZmVjdFJlZiA9IGVmZmVjdCgoY2xlYW51cCkgPT4ge1xyXG4gICAgaWYgKCFpc0Nsb3NlZCgpKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQodHJ5T25jZSwgcmVzZXRUaW1lb3V0KTtcclxuXHJcbiAgICByZXR1cm4gY2xlYW51cCgoKSA9PiBjbGVhclRpbWVvdXQodGltZW91dCkpO1xyXG4gIH0pO1xyXG5cclxuICBjb25zdCBmYWlsID0gKCkgPT4ge1xyXG4gICAgZmFpbHVyZUNvdW50LnNldChmYWlsdXJlQ291bnQoKSArIDEpO1xyXG4gICAgaGFsZk9wZW4uc2V0KGZhbHNlKTtcclxuICB9O1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgc3RhdHVzLFxyXG4gICAgaXNDbG9zZWQsXHJcbiAgICBmYWlsLFxyXG4gICAgc3VjY2VzcyxcclxuICAgIGhhbGZPcGVuOiB0cnlPbmNlLFxyXG4gICAgZGVzdHJveTogKCkgPT4gZWZmZWN0UmVmLmRlc3Ryb3koKSxcclxuICB9O1xyXG59XHJcblxyXG4vKiogQGludGVybmFsICovXHJcbmZ1bmN0aW9uIGNyZWF0ZU5ldmVyQnJva2VuQ2lyY3VpdEJyZWFrZXIoKTogQ2lyY3VpdEJyZWFrZXIge1xyXG4gIHJldHVybiB7XHJcbiAgICBpc0Nsb3NlZDogY29tcHV0ZWQoKCkgPT4gZmFsc2UpLFxyXG4gICAgc3RhdHVzOiBzaWduYWwoJ09QRU4nKSxcclxuICAgIGZhaWw6ICgpID0+IHtcclxuICAgICAgLy8gbm9vcFxyXG4gICAgfSxcclxuICAgIHN1Y2Nlc3M6ICgpID0+IHtcclxuICAgICAgLy8gbm9vcFxyXG4gICAgfSxcclxuICAgIGhhbGZPcGVuOiAoKSA9PiB7XHJcbiAgICAgIC8vIG5vb3BcclxuICAgIH0sXHJcbiAgICBkZXN0cm95OiAoKSA9PiB7XHJcbiAgICAgIC8vIG5vb3BcclxuICAgIH0sXHJcbiAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBjaXJjdWl0IGJyZWFrZXIgaW5zdGFuY2UuXHJcbiAqXHJcbiAqIEBwYXJhbSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgY2lyY3VpdCBicmVha2VyLiAgQ2FuIGJlOlxyXG4gKiAgIC0gYHVuZGVmaW5lZGA6ICBDcmVhdGVzIGEgXCJuby1vcFwiIGNpcmN1aXQgYnJlYWtlciB0aGF0IGlzIGFsd2F5cyBvcGVuIChuZXZlciB0cmlwcykuXHJcbiAqICAgLSBgdHJ1ZWA6IENyZWF0ZXMgYSBjaXJjdWl0IGJyZWFrZXIgd2l0aCBkZWZhdWx0IHNldHRpbmdzICh0aHJlc2hvbGQ6IDUsIHRpbWVvdXQ6IDMwMDAwbXMpLlxyXG4gKiAgIC0gYENpcmN1aXRCcmVha2VyYDogIFJldXNlcyBhbiBleGlzdGluZyBgQ2lyY3VpdEJyZWFrZXJgIGluc3RhbmNlLlxyXG4gKiAgIC0gYHsgdGhyZXNob2xkPzogbnVtYmVyOyB0aW1lb3V0PzogbnVtYmVyOyB9YDogQ3JlYXRlcyBhIGNpcmN1aXQgYnJlYWtlciB3aXRoIHRoZSBzcGVjaWZpZWQgdGhyZXNob2xkIGFuZCB0aW1lb3V0LlxyXG4gKlxyXG4gKiBAcmV0dXJucyBBIGBDaXJjdWl0QnJlYWtlcmAgaW5zdGFuY2UuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIC8vIENyZWF0ZSBhIGNpcmN1aXQgYnJlYWtlciB3aXRoIGRlZmF1bHQgc2V0dGluZ3M6XHJcbiAqIGNvbnN0IGJyZWFrZXIgPSBjcmVhdGVDaXJjdWl0QnJlYWtlcigpO1xyXG4gKlxyXG4gKiAvLyBDcmVhdGUgYSBjaXJjdWl0IGJyZWFrZXIgd2l0aCBjdXN0b20gc2V0dGluZ3M6XHJcbiAqIGNvbnN0IGN1c3RvbUJyZWFrZXIgPSBjcmVhdGVDaXJjdWl0QnJlYWtlcih7IHRocmVzaG9sZDogMTAsIHRpbWVvdXQ6IDYwMDAwIH0pO1xyXG4gKlxyXG4gKiAvLyBTaGFyZSBhIHNpbmdsZSBjaXJjdWl0IGJyZWFrZXIgaW5zdGFuY2UgYWNyb3NzIG11bHRpcGxlIHJlc291cmNlczpcclxuICogY29uc3Qgc2hhcmVkQnJlYWtlciA9IGNyZWF0ZUNpcmN1aXRCcmVha2VyKCk7XHJcbiAqIGNvbnN0IHJlc291cmNlMSA9IHF1ZXJ5UmVzb3VyY2UoLi4uLCB7IGNpcmN1aXRCcmVha2VyOiBzaGFyZWRCcmVha2VyIH0pO1xyXG4gKiBjb25zdCByZXNvdXJjZTIgPSBtdXRhdGlvblJlc291cmNlKC4uLiwgeyBjaXJjdWl0QnJlYWtlcjogc2hhcmVkQnJlYWtlciB9KTtcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaXJjdWl0QnJlYWtlcihcclxuICBvcHQ/OiBDaXJjdWl0QnJlYWtlck9wdGlvbnMsXHJcbik6IENpcmN1aXRCcmVha2VyIHtcclxuICBpZiAob3B0ID09PSBmYWxzZSkgcmV0dXJuIGNyZWF0ZU5ldmVyQnJva2VuQ2lyY3VpdEJyZWFrZXIoKTtcclxuXHJcbiAgaWYgKHR5cGVvZiBvcHQgPT09ICdvYmplY3QnICYmICdpc0Nsb3NlZCcgaW4gb3B0KSByZXR1cm4gb3B0O1xyXG5cclxuICByZXR1cm4gaW50ZXJuYWxDZWF0ZUNpcmN1aXRCcmVha2VyKG9wdD8udHJlc2hvbGQsIG9wdD8udGltZW91dCk7XHJcbn1cclxuIl19","// Heavily inspired by: https://dev.to/kasual1/request-deduplication-in-angular-3pd8\nimport { HttpContext, HttpContextToken, } from '@angular/common/http';\nimport { finalize, shareReplay } from 'rxjs';\nconst NO_DEDUPE = new HttpContextToken(() => false);\n/**\n * Disables request deduplication for a specific HTTP request.\n *\n * @param ctx - The `HttpContext` to modify. If not provided, a new `HttpContext` is created.\n * @returns The modified `HttpContext` with the `NO_DEDUPE` token set to `true`.\n *\n * @example\n * // Disable deduplication for a specific POST request:\n * const context = noDedupe();\n * this.http.post('/api/data', payload, { context }).subscribe(...);\n *\n * // Disable deduplication, modifying an existing context:\n * let context = new HttpContext();\n * context = noDedupe(context);\n * this.http.post('/api/data', payload, { context }).subscribe(...);\n */\nexport function noDedupe(ctx = new HttpContext()) {\n return ctx.set(NO_DEDUPE, true);\n}\n/**\n * Creates an `HttpInterceptorFn` that deduplicates identical HTTP requests.\n * If multiple identical requests (same URL and parameters) are made concurrently,\n * only the first request will be sent to the server. Subsequent requests will\n * receive the response from the first request.\n *\n * @param allowed - An array of HTTP methods for which deduplication should be enabled.\n * Defaults to `['GET', 'DELETE', 'HEAD', 'OPTIONS']`.\n *\n * @returns An `HttpInterceptorFn` that implements the request deduplication logic.\n *\n * @example\n * // In your app.config.ts or module providers:\n * import { provideHttpClient, withInterceptors } from '@angular/common/http';\n * import { createDedupeRequestsInterceptor } from './your-dedupe-interceptor';\n *\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideHttpClient(withInterceptors([createDedupeRequestsInterceptor()])),\n * // ... other providers\n * ],\n * };\n *\n * // You can also specify which methods should be deduped\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideHttpClient(withInterceptors([createDedupeRequestsInterceptor(['GET'])])), // only dedupe GET calls\n * // ... other providers\n * ],\n * };\n */\nexport function createDedupeRequestsInterceptor(allowed = ['GET', 'DELETE', 'HEAD', 'OPTIONS']) {\n const inFlight = new Map();\n const DEDUPE_METHODS = new Set(allowed);\n return (req, next) => {\n if (!DEDUPE_METHODS.has(req.method) || req.context.get(NO_DEDUPE))\n return next(req);\n const found = inFlight.get(req.urlWithParams);\n if (found)\n return found;\n const request = next(req).pipe(finalize(() => inFlight.delete(req.urlWithParams)), shareReplay());\n inFlight.set(req.urlWithParams, request);\n return request;\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVkdXBlLmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcmVzb3VyY2Uvc3JjL2xpYi91dGlsL2RlZHVwZS5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvRkFBb0Y7QUFFcEYsT0FBTyxFQUNMLFdBQVcsRUFDWCxnQkFBZ0IsR0FLakIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBbUIsTUFBTSxNQUFNLENBQUM7QUFFOUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBVSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUU3RDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLE1BQW1CLElBQUksV0FBVyxFQUFFO0lBQzNELE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFDSCxNQUFNLFVBQVUsK0JBQStCLENBQzdDLE9BQU8sR0FBRyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQztJQUU5QyxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBMEMsQ0FBQztJQUVuRSxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBUyxPQUFPLENBQUMsQ0FBQztJQUVoRCxPQUFPLENBQ0wsR0FBeUIsRUFDekIsSUFBbUIsRUFDYSxFQUFFO1FBQ2xDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7WUFDL0QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFbkIsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFOUMsSUFBSSxLQUFLO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFeEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FDNUIsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQ2xELFdBQVcsRUFBRSxDQUNkLENBQUM7UUFDRixRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFekMsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEhlYXZpbHkgaW5zcGlyZWQgYnk6IGh0dHBzOi8vZGV2LnRvL2thc3VhbDEvcmVxdWVzdC1kZWR1cGxpY2F0aW9uLWluLWFuZ3VsYXItM3BkOFxyXG5cclxuaW1wb3J0IHtcclxuICBIdHRwQ29udGV4dCxcclxuICBIdHRwQ29udGV4dFRva2VuLFxyXG4gIEh0dHBJbnRlcmNlcHRvckZuLFxyXG4gIHR5cGUgSHR0cEV2ZW50LFxyXG4gIHR5cGUgSHR0cEhhbmRsZXJGbixcclxuICB0eXBlIEh0dHBSZXF1ZXN0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgZmluYWxpemUsIHNoYXJlUmVwbGF5LCB0eXBlIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcbmNvbnN0IE5PX0RFRFVQRSA9IG5ldyBIdHRwQ29udGV4dFRva2VuPGJvb2xlYW4+KCgpID0+IGZhbHNlKTtcclxuXHJcbi8qKlxyXG4gKiBEaXNhYmxlcyByZXF1ZXN0IGRlZHVwbGljYXRpb24gZm9yIGEgc3BlY2lmaWMgSFRUUCByZXF1ZXN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gY3R4IC0gVGhlIGBIdHRwQ29udGV4dGAgdG8gbW9kaWZ5LiBJZiBub3QgcHJvdmlkZWQsIGEgbmV3IGBIdHRwQ29udGV4dGAgaXMgY3JlYXRlZC5cclxuICogQHJldHVybnMgVGhlIG1vZGlmaWVkIGBIdHRwQ29udGV4dGAgd2l0aCB0aGUgYE5PX0RFRFVQRWAgdG9rZW4gc2V0IHRvIGB0cnVlYC5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogLy8gRGlzYWJsZSBkZWR1cGxpY2F0aW9uIGZvciBhIHNwZWNpZmljIFBPU1QgcmVxdWVzdDpcclxuICogY29uc3QgY29udGV4dCA9IG5vRGVkdXBlKCk7XHJcbiAqIHRoaXMuaHR0cC5wb3N0KCcvYXBpL2RhdGEnLCBwYXlsb2FkLCB7IGNvbnRleHQgfSkuc3Vic2NyaWJlKC4uLik7XHJcbiAqXHJcbiAqIC8vIERpc2FibGUgZGVkdXBsaWNhdGlvbiwgbW9kaWZ5aW5nIGFuIGV4aXN0aW5nIGNvbnRleHQ6XHJcbiAqIGxldCBjb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XHJcbiAqIGNvbnRleHQgPSBub0RlZHVwZShjb250ZXh0KTtcclxuICogdGhpcy5odHRwLnBvc3QoJy9hcGkvZGF0YScsIHBheWxvYWQsIHsgY29udGV4dCB9KS5zdWJzY3JpYmUoLi4uKTtcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBub0RlZHVwZShjdHg6IEh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCkpIHtcclxuICByZXR1cm4gY3R4LnNldChOT19ERURVUEUsIHRydWUpO1xyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhbiBgSHR0cEludGVyY2VwdG9yRm5gIHRoYXQgZGVkdXBsaWNhdGVzIGlkZW50aWNhbCBIVFRQIHJlcXVlc3RzLlxyXG4gKiBJZiBtdWx0aXBsZSBpZGVudGljYWwgcmVxdWVzdHMgKHNhbWUgVVJMIGFuZCBwYXJhbWV0ZXJzKSBhcmUgbWFkZSBjb25jdXJyZW50bHksXHJcbiAqIG9ubHkgdGhlIGZpcnN0IHJlcXVlc3Qgd2lsbCBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIuIFN1YnNlcXVlbnQgcmVxdWVzdHMgd2lsbFxyXG4gKiByZWNlaXZlIHRoZSByZXNwb25zZSBmcm9tIHRoZSBmaXJzdCByZXF1ZXN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gYWxsb3dlZCAtIEFuIGFycmF5IG9mIEhUVFAgbWV0aG9kcyBmb3Igd2hpY2ggZGVkdXBsaWNhdGlvbiBzaG91bGQgYmUgZW5hYmxlZC5cclxuICogICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byBgWydHRVQnLCAnREVMRVRFJywgJ0hFQUQnLCAnT1BUSU9OUyddYC5cclxuICpcclxuICogQHJldHVybnMgQW4gYEh0dHBJbnRlcmNlcHRvckZuYCB0aGF0IGltcGxlbWVudHMgdGhlIHJlcXVlc3QgZGVkdXBsaWNhdGlvbiBsb2dpYy5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogLy8gSW4geW91ciBhcHAuY29uZmlnLnRzIG9yIG1vZHVsZSBwcm92aWRlcnM6XHJcbiAqIGltcG9ydCB7IHByb3ZpZGVIdHRwQ2xpZW50LCB3aXRoSW50ZXJjZXB0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG4gKiBpbXBvcnQgeyBjcmVhdGVEZWR1cGVSZXF1ZXN0c0ludGVyY2VwdG9yIH0gZnJvbSAnLi95b3VyLWRlZHVwZS1pbnRlcmNlcHRvcic7XHJcbiAqXHJcbiAqIGV4cG9ydCBjb25zdCBhcHBDb25maWc6IEFwcGxpY2F0aW9uQ29uZmlnID0ge1xyXG4gKiAgIHByb3ZpZGVyczogW1xyXG4gKiAgICAgcHJvdmlkZUh0dHBDbGllbnQod2l0aEludGVyY2VwdG9ycyhbY3JlYXRlRGVkdXBlUmVxdWVzdHNJbnRlcmNlcHRvcigpXSkpLFxyXG4gKiAgICAgLy8gLi4uIG90aGVyIHByb3ZpZGVyc1xyXG4gKiAgIF0sXHJcbiAqIH07XHJcbiAqXHJcbiAqIC8vIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IHdoaWNoIG1ldGhvZHMgc2hvdWxkIGJlIGRlZHVwZWRcclxuICogIGV4cG9ydCBjb25zdCBhcHBDb25maWc6IEFwcGxpY2F0aW9uQ29uZmlnID0ge1xyXG4gKiAgIHByb3ZpZGVyczogW1xyXG4gKiAgICAgcHJvdmlkZUh0dHBDbGllbnQod2l0aEludGVyY2VwdG9ycyhbY3JlYXRlRGVkdXBlUmVxdWVzdHNJbnRlcmNlcHRvcihbJ0dFVCddKV0pKSwgLy8gb25seSBkZWR1cGUgR0VUIGNhbGxzXHJcbiAqICAgICAvLyAuLi4gb3RoZXIgcHJvdmlkZXJzXHJcbiAqICAgXSxcclxuICogfTtcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWR1cGVSZXF1ZXN0c0ludGVyY2VwdG9yKFxyXG4gIGFsbG93ZWQgPSBbJ0dFVCcsICdERUxFVEUnLCAnSEVBRCcsICdPUFRJT05TJ10sXHJcbik6IEh0dHBJbnRlcmNlcHRvckZuIHtcclxuICBjb25zdCBpbkZsaWdodCA9IG5ldyBNYXA8c3RyaW5nLCBPYnNlcnZhYmxlPEh0dHBFdmVudDx1bmtub3duPj4+KCk7XHJcblxyXG4gIGNvbnN0IERFRFVQRV9NRVRIT0RTID0gbmV3IFNldDxzdHJpbmc+KGFsbG93ZWQpO1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgcmVxOiBIdHRwUmVxdWVzdDx1bmtub3duPixcclxuICAgIG5leHQ6IEh0dHBIYW5kbGVyRm4sXHJcbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8dW5rbm93bj4+ID0+IHtcclxuICAgIGlmICghREVEVVBFX01FVEhPRFMuaGFzKHJlcS5tZXRob2QpIHx8IHJlcS5jb250ZXh0LmdldChOT19ERURVUEUpKVxyXG4gICAgICByZXR1cm4gbmV4dChyZXEpO1xyXG5cclxuICAgIGNvbnN0IGZvdW5kID0gaW5GbGlnaHQuZ2V0KHJlcS51cmxXaXRoUGFyYW1zKTtcclxuXHJcbiAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZDtcclxuXHJcbiAgICBjb25zdCByZXF1ZXN0ID0gbmV4dChyZXEpLnBpcGUoXHJcbiAgICAgIGZpbmFsaXplKCgpID0+IGluRmxpZ2h0LmRlbGV0ZShyZXEudXJsV2l0aFBhcmFtcykpLFxyXG4gICAgICBzaGFyZVJlcGxheSgpLFxyXG4gICAgKTtcclxuICAgIGluRmxpZ2h0LnNldChyZXEudXJsV2l0aFBhcmFtcywgcmVxdWVzdCk7XHJcblxyXG4gICAgcmV0dXJuIHJlcXVlc3Q7XHJcbiAgfTtcclxufVxyXG4iXX0=","import { hash, keys } from '@mmstack/object';\nfunction equalTransferCache(a, b) {\n if (!a && !b)\n return true;\n if (!a || !b)\n return false;\n if (typeof a !== typeof b)\n return false;\n if (typeof a === 'boolean' || typeof b === 'boolean')\n return a === b;\n if (!a.includeHeaders && !b.includeHeaders)\n return true;\n if (!a.includeHeaders || !b.includeHeaders)\n return false;\n if (a.includeHeaders.length !== b.includeHeaders.length)\n return false;\n if (a.includeHeaders.length === 0)\n return true;\n const aSet = new Set(a.includeHeaders ?? []);\n return b.includeHeaders.every((header) => aSet.has(header));\n}\nfunction equalParams(a, b) {\n if (!a && !b)\n return true;\n if (!a || !b)\n return false;\n const aKeys = keys(a);\n const bKeys = keys(b);\n if (aKeys.length !== bKeys.length)\n return false;\n return aKeys.every((key) => a[key] === b[key]);\n}\nfunction equalBody(a, b) {\n if (!a && !b)\n return true;\n if (!a || !b)\n return false;\n return hash(a) === hash(b);\n}\nfunction equalHeaders(a, b) {\n if (!a && !b)\n return true;\n if (!a || !b)\n return false;\n const aKeys = keys(a);\n const bKeys = keys(b);\n if (aKeys.length !== bKeys.length)\n return false;\n return aKeys.every((key) => a[key] === b[key]);\n}\nfunction equalContext(a, b) {\n if (!a && !b)\n return true;\n if (!a || !b)\n return false;\n const aKeys = keys(a);\n const bKeys = keys(b);\n if (aKeys.length !== bKeys.length)\n return false;\n return aKeys.every((key) => a[key] === b[key]);\n}\nexport function createEqualRequest(equalResult) {\n const eqb = equalResult ?? equalBody;\n return (a, b) => {\n if (!a && !b)\n return true;\n if (!a || !b)\n return false;\n if (a.url !== b.url)\n return false;\n if (a.method !== b.method)\n return false;\n if (!equalParams(a.params, b.params))\n return false;\n if (!equalHeaders(a.headers, b.headers))\n return false;\n if (!eqb(a.body, b.body))\n return false;\n if (!equalContext(a.context, b.context))\n return false;\n if (a.withCredentials !== b.withCredentials)\n return false;\n if (a.reportProgress !== b.reportProgress)\n return false;\n if (!equalTransferCache(a.transferCache, b.transferCache))\n return false;\n return true;\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXF1YWxpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yZXNvdXJjZS9zcmMvbGliL3V0aWwvZXF1YWxpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxTQUFTLGtCQUFrQixDQUN6QixDQUF1QyxFQUN2QyxDQUF1QztJQUV2QyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzFCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFM0IsSUFBSSxPQUFPLENBQUMsS0FBSyxPQUFPLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN4QyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsS0FBSyxTQUFTO1FBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXJFLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUN4RCxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFekQsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsY0FBYyxDQUFDLE1BQU07UUFBRSxPQUFPLEtBQUssQ0FBQztJQUV0RSxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUUvQyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRTdDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsQ0FB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SUFBSSxDQUFDLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUUzQixJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUc7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNsQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU07WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN4QyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ25ELElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDdEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBZSxFQUFFLENBQUMsQ0FBQyxJQUFlLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUM3RCxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRXRELElBQUksQ0FBQyxDQUFDLGVBQWUsS0FBSyxDQUFDLENBQUMsZUFBZTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzFELElBQUksQ0FBQyxDQUFDLGNBQWMsS0FBSyxDQUFDLENBQUMsY0FBYztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3hELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUV4RSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwUmVzb3VyY2VSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyB0eXBlIFZhbHVlRXF1YWxpdHlGbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBoYXNoLCBrZXlzIH0gZnJvbSAnQG1tc3RhY2svb2JqZWN0JztcclxuXHJcbmZ1bmN0aW9uIGVxdWFsVHJhbnNmZXJDYWNoZShcclxuICBhOiBIdHRwUmVzb3VyY2VSZXF1ZXN0Wyd0cmFuc2ZlckNhY2hlJ10sXHJcbiAgYjogSHR0cFJlc291cmNlUmVxdWVzdFsndHJhbnNmZXJDYWNoZSddLFxyXG4pOiBib29sZWFuIHtcclxuICBpZiAoIWEgJiYgIWIpIHJldHVybiB0cnVlO1xyXG4gIGlmICghYSB8fCAhYikgcmV0dXJuIGZhbHNlO1xyXG5cclxuICBpZiAodHlwZW9mIGEgIT09IHR5cGVvZiBiKSByZXR1cm4gZmFsc2U7XHJcbiAgaWYgKHR5cGVvZiBhID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIGIgPT09ICdib29sZWFuJykgcmV0dXJuIGEgPT09IGI7XHJcblxyXG4gIGlmICghYS5pbmNsdWRlSGVhZGVycyAmJiAhYi5pbmNsdWRlSGVhZGVycykgcmV0dXJuIHRydWU7XHJcbiAgaWYgKCFhLmluY2x1ZGVIZWFkZXJzIHx8ICFiLmluY2x1ZGVIZWFkZXJzKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gIGlmIChhLmluY2x1ZGVIZWFkZXJzLmxlbmd0aCAhPT0gYi5pbmNsdWRlSGVhZGVycy5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgaWYgKGEuaW5jbHVkZUhlYWRlcnMubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgY29uc3QgYVNldCA9IG5ldyBTZXQoYS5pbmNsdWRlSGVhZGVycyA/PyBbXSk7XHJcblxyXG4gIHJldHVybiBiLmluY2x1ZGVIZWFkZXJzLmV2ZXJ5KChoZWFkZXIpID0+IGFTZXQuaGFzKGhlYWRlcikpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlcXVhbFBhcmFtcyhcclxuICBhOiBIdHRwUmVzb3VyY2VSZXF1ZXN0WydwYXJhbXMnXSxcclxuICBiOiBIdHRwUmVzb3VyY2VSZXF1ZXN0WydwYXJhbXMnXSxcclxuKTogYm9vbGVhbiB7XHJcbiAgaWYgKCFhICYmICFiKSByZXR1cm4gdHJ1ZTtcclxuICBpZiAoIWEgfHwgIWIpIHJldHVybiBmYWxzZTtcclxuICBjb25zdCBhS2V5cyA9IGtleXMoYSk7XHJcbiAgY29uc3QgYktleXMgPSBrZXlzKGIpO1xyXG4gIGlmIChhS2V5cy5sZW5ndGggIT09IGJLZXlzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICByZXR1cm4gYUtleXMuZXZlcnkoKGtleSkgPT4gYVtrZXldID09PSBiW2tleV0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlcXVhbEJvZHkoXHJcbiAgYTogSHR0cFJlc291cmNlUmVxdWVzdFsnYm9keSddLFxyXG4gIGI6IEh0dHBSZXNvdXJjZVJlcXVlc3RbJ2JvZHknXSxcclxuKTogYm9vbGVhbiB7XHJcbiAgaWYgKCFhICYmICFiKSByZXR1cm4gdHJ1ZTtcclxuICBpZiAoIWEgfHwgIWIpIHJldHVybiBmYWxzZTtcclxuICByZXR1cm4gaGFzaChhKSA9PT0gaGFzaChiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZXF1YWxIZWFkZXJzKFxyXG4gIGE6IEh0dHBSZXNvdXJjZVJlcXVlc3RbJ2hlYWRlcnMnXSxcclxuICBiOiBIdHRwUmVzb3VyY2VSZXF1ZXN0WydoZWFkZXJzJ10sXHJcbik6IGJvb2xlYW4ge1xyXG4gIGlmICghYSAmJiAhYikgcmV0dXJuIHRydWU7XHJcbiAgaWYgKCFhIHx8ICFiKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gIGNvbnN0IGFLZXlzID0ga2V5cyhhKTtcclxuICBjb25zdCBiS2V5cyA9IGtleXMoYik7XHJcbiAgaWYgKGFLZXlzLmxlbmd0aCAhPT0gYktleXMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcbiAgcmV0dXJuIGFLZXlzLmV2ZXJ5KChrZXkpID0+IGFba2V5XSA9PT0gYltrZXldKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZXF1YWxDb250ZXh0KFxyXG4gIGE6IEh0dHBSZXNvdXJjZVJlcXVlc3RbJ2NvbnRleHQnXSxcclxuICBiOiBIdHRwUmVzb3VyY2VSZXF1ZXN0Wydjb250ZXh0J10sXHJcbik6IGJvb2xlYW4ge1xyXG4gIGlmICghYSAmJiAhYikgcmV0dXJuIHRydWU7XHJcbiAgaWYgKCFhIHx8ICFiKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gIGNvbnN0IGFLZXlzID0ga2V5cyhhKTtcclxuICBjb25zdCBiS2V5cyA9IGtleXMoYik7XHJcbiAgaWYgKGFLZXlzLmxlbmd0aCAhPT0gYktleXMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcbiAgcmV0dXJuIGFLZXlzLmV2ZXJ5KChrZXkpID0+IGFba2V5XSA9PT0gYltrZXldKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVxdWFsUmVxdWVzdDxUUmVzdWx0PihcclxuICBlcXVhbFJlc3VsdD86IFZhbHVlRXF1YWxpdHlGbjxUUmVzdWx0PixcclxuKSB7XHJcbiAgY29uc3QgZXFiID0gZXF1YWxSZXN1bHQgPz8gZXF1YWxCb2R5O1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgYTogUGFydGlhbDxIdHRwUmVzb3VyY2VSZXF1ZXN0PiB8IHVuZGVmaW5lZCxcclxuICAgIGI6IFBhcnRpYWw8SHR0cFJlc291cmNlUmVxdWVzdD4gfCB1bmRlZmluZWQsXHJcbiAgKSA9PiB7XHJcbiAgICBpZiAoIWEgJiYgIWIpIHJldHVybiB0cnVlO1xyXG4gICAgaWYgKCFhIHx8ICFiKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgaWYgKGEudXJsICE9PSBiLnVybCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKGEubWV0aG9kICE9PSBiLm1ldGhvZCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKCFlcXVhbFBhcmFtcyhhLnBhcmFtcywgYi5wYXJhbXMpKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAoIWVxdWFsSGVhZGVycyhhLmhlYWRlcnMsIGIuaGVhZGVycykpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICghZXFiKGEuYm9keSBhcyBUUmVzdWx0LCBiLmJvZHkgYXMgVFJlc3VsdCkpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICghZXF1YWxDb250ZXh0KGEuY29udGV4dCwgYi5jb250ZXh0KSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmIChhLndpdGhDcmVkZW50aWFscyAhPT0gYi53aXRoQ3JlZGVudGlhbHMpIHJldHVybiBmYWxzZTtcclxuICAgIGlmIChhLnJlcG9ydFByb2dyZXNzICE9PSBiLnJlcG9ydFByb2dyZXNzKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAoIWVxdWFsVHJhbnNmZXJDYWNoZShhLnRyYW5zZmVyQ2FjaGUsIGIudHJhbnNmZXJDYWNoZSkpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9O1xyXG59XHJcbiJdfQ==","export function hasSlowConnection() {\n if (window &&\n 'navigator' in window &&\n 'connection' in window.navigator &&\n typeof window.navigator.connection === 'object' &&\n !!window.navigator.connection &&\n 'effectiveType' in window.navigator.connection &&\n typeof window.navigator.connection.effectiveType === 'string')\n return window.navigator.connection.effectiveType.endsWith('2g');\n return false;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzLXNsb3ctY29ubmVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Jlc291cmNlL3NyYy9saWIvdXRpbC9oYXMtc2xvdy1jb25uZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxpQkFBaUI7SUFDL0IsSUFDRSxNQUFNO1FBQ04sV0FBVyxJQUFJLE1BQU07UUFDckIsWUFBWSxJQUFJLE1BQU0sQ0FBQyxTQUFTO1FBQ2hDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEtBQUssUUFBUTtRQUMvQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVO1FBQzdCLGVBQWUsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVU7UUFDOUMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxhQUFhLEtBQUssUUFBUTtRQUU3RCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFbEUsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGhhc1Nsb3dDb25uZWN0aW9uKCkge1xyXG4gIGlmIChcclxuICAgIHdpbmRvdyAmJlxyXG4gICAgJ25hdmlnYXRvcicgaW4gd2luZG93ICYmXHJcbiAgICAnY29ubmVjdGlvbicgaW4gd2luZG93Lm5hdmlnYXRvciAmJlxyXG4gICAgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IuY29ubmVjdGlvbiA9PT0gJ29iamVjdCcgJiZcclxuICAgICEhd2luZG93Lm5hdmlnYXRvci5jb25uZWN0aW9uICYmXHJcbiAgICAnZWZmZWN0aXZlVHlwZScgaW4gd2luZG93Lm5hdmlnYXRvci5jb25uZWN0aW9uICYmXHJcbiAgICB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvci5jb25uZWN0aW9uLmVmZmVjdGl2ZVR5cGUgPT09ICdzdHJpbmcnXHJcbiAgKVxyXG4gICAgcmV0dXJuIHdpbmRvdy5uYXZpZ2F0b3IuY29ubmVjdGlvbi5lZmZlY3RpdmVUeXBlLmVuZHNXaXRoKCcyZycpO1xyXG5cclxuICByZXR1cm4gZmFsc2U7XHJcbn1cclxuIl19","import { linkedSignal, } from '@angular/core';\nfunction presist(value, usePrevious, equal) {\n // linkedSignal allows us to access previous source value\n const persisted = linkedSignal({\n source: () => {\n return {\n value: value(),\n usePrevious: usePrevious(),\n };\n },\n computation: (source, prev) => {\n if (source.usePrevious && prev)\n return prev.value;\n return source.value;\n },\n equal,\n });\n // if original value was WritableSignal then override linkedSignal methods to original...angular uses linkedSignal under the hood in ResourceImpl, this applies to that.\n if ('set' in value) {\n persisted.set = value.set;\n persisted.update = value.update;\n persisted.asReadonly = value.asReadonly;\n }\n return persisted;\n}\nexport function persistResourceValues(resource, persist = false, equal) {\n if (!persist)\n return resource;\n return {\n ...resource,\n statusCode: presist(resource.statusCode, resource.isLoading),\n headers: presist(resource.headers, resource.isLoading),\n value: presist(resource.value, resource.isLoading, equal),\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc2lzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Jlc291cmNlL3NyYy9saWIvdXRpbC9wZXJzaXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxZQUFZLEdBSWIsTUFBTSxlQUFlLENBQUM7QUFjdkIsU0FBUyxPQUFPLENBQ2QsS0FBb0MsRUFDcEMsV0FBNEIsRUFDNUIsS0FBMEI7SUFFMUIseURBQXlEO0lBRXpELE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FNNUI7UUFDQSxNQUFNLEVBQUUsR0FBRyxFQUFFO1lBQ1gsT0FBTztnQkFDTCxLQUFLLEVBQUUsS0FBSyxFQUFFO2dCQUNkLFdBQVcsRUFBRSxXQUFXLEVBQUU7YUFDM0IsQ0FBQztRQUNKLENBQUM7UUFDRCxXQUFXLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDNUIsSUFBSSxNQUFNLENBQUMsV0FBVyxJQUFJLElBQUk7Z0JBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBRWxELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQztRQUN0QixDQUFDO1FBQ0QsS0FBSztLQUNOLENBQUMsQ0FBQztJQUVILHdLQUF3SztJQUN4SyxJQUFJLEtBQUssSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNuQixTQUFTLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFDMUIsU0FBUyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQ2hDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUIsQ0FDbkMsUUFBNEIsRUFDNUIsT0FBTyxHQUFHLEtBQUssRUFDZixLQUEwQjtJQUUxQixJQUFJLENBQUMsT0FBTztRQUFFLE9BQU8sUUFBUSxDQUFDO0lBRTlCLE9BQU87UUFDTCxHQUFHLFFBQVE7UUFDWCxVQUFVLEVBQUUsT0FBTyxDQUNqQixRQUFRLENBQUMsVUFBVSxFQUNuQixRQUFRLENBQUMsU0FBUyxDQUNuQjtRQUNELE9BQU8sRUFBRSxPQUFPLENBQ2QsUUFBUSxDQUFDLE9BQU8sRUFDaEIsUUFBUSxDQUFDLFNBQVMsQ0FDbkI7UUFDRCxLQUFLLEVBQUUsT0FBTyxDQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUM7S0FDN0QsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIEh0dHBIZWFkZXJzLCB0eXBlIEh0dHBSZXNvdXJjZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtcclxuICBsaW5rZWRTaWduYWwsXHJcbiAgdHlwZSBTaWduYWwsXHJcbiAgdHlwZSBWYWx1ZUVxdWFsaXR5Rm4sXHJcbiAgdHlwZSBXcml0YWJsZVNpZ25hbCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmZ1bmN0aW9uIHByZXNpc3Q8VD4oXHJcbiAgdmFsdWU6IFdyaXRhYmxlU2lnbmFsPFQ+LFxyXG4gIHVzZVByZXZpb3VzOiBTaWduYWw8Ym9vbGVhbj4sXHJcbiAgZXF1YWw/OiBWYWx1ZUVxdWFsaXR5Rm48VD4sXHJcbik6IFdyaXRhYmxlU2lnbmFsPFQ+O1xyXG5cclxuZnVuY3Rpb24gcHJlc2lzdDxUPihcclxuICB2YWx1ZTogU2lnbmFsPFQ+LFxyXG4gIHVzZVByZXZpb3VzOiBTaWduYWw8Ym9vbGVhbj4sXHJcbiAgZXF1YWw/OiBWYWx1ZUVxdWFsaXR5Rm48VD4sXHJcbik6IFNpZ25hbDxUPjtcclxuXHJcbmZ1bmN0aW9uIHByZXNpc3Q8VD4oXHJcbiAgdmFsdWU6IFdyaXRhYmxlU2lnbmFsPFQ+IHwgU2lnbmFsPFQ+LFxyXG4gIHVzZVByZXZpb3VzOiBTaWduYWw8Ym9vbGVhbj4sXHJcbiAgZXF1YWw/OiBWYWx1ZUVxdWFsaXR5Rm48VD4sXHJcbik6IFdyaXRhYmxlU2lnbmFsPFQ+IHwgU2lnbmFsPFQ+IHtcclxuICAvLyBsaW5rZWRTaWduYWwgYWxsb3dzIHVzIHRvIGFjY2VzcyBwcmV2aW91cyBzb3VyY2UgdmFsdWVcclxuXHJcbiAgY29uc3QgcGVyc2lzdGVkID0gbGlua2VkU2lnbmFsPFxyXG4gICAge1xyXG4gICAgICB2YWx1ZTogVDtcclxuICAgICAgdXNlUHJldmlvdXM6IGJvb2xlYW47XHJcbiAgICB9LFxyXG4gICAgVFxyXG4gID4oe1xyXG4gICAgc291cmNlOiAoKSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgdmFsdWU6IHZhbHVlKCksXHJcbiAgICAgICAgdXNlUHJldmlvdXM6IHVzZVByZXZpb3VzKCksXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgY29tcHV0YXRpb246IChzb3VyY2UsIHByZXYpID0+IHtcclxuICAgICAgaWYgKHNvdXJjZS51c2VQcmV2aW91cyAmJiBwcmV2KSByZXR1cm4gcHJldi52YWx1ZTtcclxuXHJcbiAgICAgIHJldHVybiBzb3VyY2UudmFsdWU7XHJcbiAgICB9LFxyXG4gICAgZXF1YWwsXHJcbiAgfSk7XHJcblxyXG4gIC8vIGlmIG9yaWdpbmFsIHZhbHVlIHdhcyBXcml0YWJsZVNpZ25hbCB0aGVuIG92ZXJyaWRlIGxpbmtlZFNpZ25hbCBtZXRob2RzIHRvIG9yaWdpbmFsLi4uYW5ndWxhciB1c2VzIGxpbmtlZFNpZ25hbCB1bmRlciB0aGUgaG9vZCBpbiBSZXNvdXJjZUltcGwsIHRoaXMgYXBwbGllcyB0byB0aGF0LlxyXG4gIGlmICgnc2V0JyBpbiB2YWx1ZSkge1xyXG4gICAgcGVyc2lzdGVkLnNldCA9IHZhbHVlLnNldDtcclxuICAgIHBlcnNpc3RlZC51cGRhdGUgPSB2YWx1ZS51cGRhdGU7XHJcbiAgICBwZXJzaXN0ZWQuYXNSZWFkb25seSA9IHZhbHVlLmFzUmVhZG9ubHk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcGVyc2lzdGVkO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcGVyc2lzdFJlc291cmNlVmFsdWVzPFQ+KFxyXG4gIHJlc291cmNlOiBIdHRwUmVzb3VyY2VSZWY8VD4sXHJcbiAgcGVyc2lzdCA9IGZhbHNlLFxyXG4gIGVxdWFsPzogVmFsdWVFcXVhbGl0eUZuPFQ+LFxyXG4pOiBIdHRwUmVzb3VyY2VSZWY8VD4ge1xyXG4gIGlmICghcGVyc2lzdCkgcmV0dXJuIHJlc291cmNlO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgLi4ucmVzb3VyY2UsXHJcbiAgICBzdGF0dXNDb2RlOiBwcmVzaXN0PG51bWJlciB8IHVuZGVmaW5lZD4oXHJcbiAgICAgIHJlc291cmNlLnN0YXR1c0NvZGUsXHJcbiAgICAgIHJlc291cmNlLmlzTG9hZGluZyxcclxuICAgICksXHJcbiAgICBoZWFkZXJzOiBwcmVzaXN0PEh0dHBIZWFkZXJzIHwgdW5kZWZpbmVkPihcclxuICAgICAgcmVzb3VyY2UuaGVhZGVycyxcclxuICAgICAgcmVzb3VyY2UuaXNMb2FkaW5nLFxyXG4gICAgKSxcclxuICAgIHZhbHVlOiBwcmVzaXN0PFQ+KHJlc291cmNlLnZhbHVlLCByZXNvdXJjZS5pc0xvYWRpbmcsIGVxdWFsKSxcclxuICB9O1xyXG59XHJcbiJdfQ==","import { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { interval } from 'rxjs';\n// refresh resource every n miliseconds or don't refresh if undefined provided. 0 also excluded, due to it not being a valid usecase\nexport function refresh(resource, destroyRef, refresh) {\n if (!refresh)\n return resource; // no refresh requested\n // we can use RxJs here as reloading the resource will always be a side effect & as such does not impact the reactive graph in any way.\n let sub = interval(refresh)\n .pipe(takeUntilDestroyed(destroyRef))\n .subscribe(() => resource.reload());\n const reload = () => {\n sub.unsubscribe(); // do not conflict with manual reload\n const hasReloaded = resource.reload();\n // resubscribe after manual reload\n sub = interval(refresh)\n .pipe(takeUntilDestroyed(destroyRef))\n .subscribe(() => resource.reload());\n return hasReloaded;\n };\n return {\n ...resource,\n reload,\n destroy: () => {\n sub.unsubscribe();\n resource.destroy();\n },\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmcmVzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Jlc291cmNlL3NyYy9saWIvdXRpbC9yZWZyZXNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFaEMsb0lBQW9JO0FBQ3BJLE1BQU0sVUFBVSxPQUFPLENBQ3JCLFFBQTRCLEVBQzVCLFVBQXNCLEVBQ3RCLE9BQWdCO0lBRWhCLElBQUksQ0FBQyxPQUFPO1FBQUUsT0FBTyxRQUFRLENBQUMsQ0FBQyx1QkFBdUI7SUFFdEQsdUlBQXVJO0lBQ3ZJLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7U0FDeEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3BDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUV0QyxNQUFNLE1BQU0sR0FBRyxHQUFZLEVBQUU7UUFDM0IsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMscUNBQXFDO1FBRXhELE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUV0QyxrQ0FBa0M7UUFDbEMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7YUFDcEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3BDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUV0QyxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDLENBQUM7SUFFRixPQUFPO1FBQ0wsR0FBRyxRQUFRO1FBQ1gsTUFBTTtRQUNOLE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDWixHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbEIsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3JCLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBSZXNvdXJjZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgRGVzdHJveVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XHJcbmltcG9ydCB7IGludGVydmFsIH0gZnJvbSAncnhqcyc7XHJcblxyXG4vLyByZWZyZXNoIHJlc291cmNlIGV2ZXJ5IG4gbWlsaXNlY29uZHMgb3IgZG9uJ3QgcmVmcmVzaCBpZiB1bmRlZmluZWQgcHJvdmlkZWQuIDAgYWxzbyBleGNsdWRlZCwgZHVlIHRvIGl0IG5vdCBiZWluZyBhIHZhbGlkIHVzZWNhc2VcclxuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2g8VD4oXHJcbiAgcmVzb3VyY2U6IEh0dHBSZXNvdXJjZVJlZjxUPixcclxuICBkZXN0cm95UmVmOiBEZXN0cm95UmVmLFxyXG4gIHJlZnJlc2g/OiBudW1iZXIsXHJcbik6IEh0dHBSZXNvdXJjZVJlZjxUPiB7XHJcbiAgaWYgKCFyZWZyZXNoKSByZXR1cm4gcmVzb3VyY2U7IC8vIG5vIHJlZnJlc2ggcmVxdWVzdGVkXHJcblxyXG4gIC8vIHdlIGNhbiB1c2UgUnhKcyBoZXJlIGFzIHJlbG9hZGluZyB0aGUgcmVzb3VyY2Ugd2lsbCBhbHdheXMgYmUgYSBzaWRlIGVmZmVjdCAmIGFzIHN1Y2ggZG9lcyBub3QgaW1wYWN0IHRoZSByZWFjdGl2ZSBncmFwaCBpbiBhbnkgd2F5LlxyXG4gIGxldCBzdWIgPSBpbnRlcnZhbChyZWZyZXNoKVxyXG4gICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKGRlc3Ryb3lSZWYpKVxyXG4gICAgLnN1YnNjcmliZSgoKSA9PiByZXNvdXJjZS5yZWxvYWQoKSk7XHJcblxyXG4gIGNvbnN0IHJlbG9hZCA9ICgpOiBib29sZWFuID0+IHtcclxuICAgIHN1Yi51bnN1YnNjcmliZSgpOyAvLyBkbyBub3QgY29uZmxpY3Qgd2l0aCBtYW51YWwgcmVsb2FkXHJcblxyXG4gICAgY29uc3QgaGFzUmVsb2FkZWQgPSByZXNvdXJjZS5yZWxvYWQoKTtcclxuXHJcbiAgICAvLyByZXN1YnNjcmliZSBhZnRlciBtYW51YWwgcmVsb2FkXHJcbiAgICBzdWIgPSBpbnRlcnZhbChyZWZyZXNoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoZGVzdHJveVJlZikpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gcmVzb3VyY2UucmVsb2FkKCkpO1xyXG5cclxuICAgIHJldHVybiBoYXNSZWxvYWRlZDtcclxuICB9O1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgLi4ucmVzb3VyY2UsXHJcbiAgICByZWxvYWQsXHJcbiAgICBkZXN0cm95OiAoKSA9PiB7XHJcbiAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgICByZXNvdXJjZS5kZXN0cm95KCk7XHJcbiAgICB9LFxyXG4gIH07XHJcbn1cclxuIl19","import { effect } from '@angular/core';\n// Retry on error, if number is provided it will retry that many times with exponential backoff, otherwise it will use the options provided\nexport function retryOnError(res, opt) {\n const max = opt ? (typeof opt === 'number' ? opt : (opt.max ?? 0)) : 0;\n const backoff = typeof opt === 'object' ? (opt.backoff ?? 1000) : 1000;\n let retries = 0;\n let timeout;\n const onError = () => {\n if (retries >= max)\n return;\n retries++;\n if (timeout)\n clearTimeout(timeout);\n setTimeout(() => res.reload(), retries <= 0 ? 0 : backoff * Math.pow(2, retries - 1));\n };\n const onSuccess = () => {\n if (timeout)\n clearTimeout(timeout);\n retries = 0;\n };\n const ref = effect(() => {\n switch (res.status()) {\n case 'error':\n return onError();\n case 'resolved':\n return onSuccess();\n }\n });\n return {\n ...res,\n destroy: () => {\n ref.destroy(); // cleanup on manual destroy\n res.destroy();\n },\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cnktb24tZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yZXNvdXJjZS9zcmMvbGliL3V0aWwvcmV0cnktb24tZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVN2QywySUFBMkk7QUFDM0ksTUFBTSxVQUFVLFlBQVksQ0FDMUIsR0FBdUIsRUFDdkIsR0FBa0I7SUFFbEIsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLE1BQU0sT0FBTyxHQUFHLE9BQU8sR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFFdkUsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBRWhCLElBQUksT0FBa0QsQ0FBQztJQUV2RCxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUU7UUFDbkIsSUFBSSxPQUFPLElBQUksR0FBRztZQUFFLE9BQU87UUFDM0IsT0FBTyxFQUFFLENBQUM7UUFFVixJQUFJLE9BQU87WUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkMsVUFBVSxDQUNSLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFDbEIsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUN0RCxDQUFDO0lBQ0osQ0FBQyxDQUFDO0lBRUYsTUFBTSxTQUFTLEdBQUcsR0FBRyxFQUFFO1FBQ3JCLElBQUksT0FBTztZQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0lBRUYsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRTtRQUN0QixRQUFRLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQ3JCLEtBQUssT0FBTztnQkFDVixPQUFPLE9BQU8sRUFBRSxDQUFDO1lBQ25CLEtBQUssVUFBVTtnQkFDYixPQUFPLFNBQVMsRUFBRSxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU87UUFDTCxHQUFHLEdBQUc7UUFDTixPQUFPLEVBQUUsR0FBRyxFQUFFO1lBQ1osR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsNEJBQTRCO1lBQzNDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNoQixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIEh0dHBSZXNvdXJjZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgZWZmZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5leHBvcnQgdHlwZSBSZXRyeU9wdGlvbnMgPVxyXG4gIHwgbnVtYmVyXHJcbiAgfCB7XHJcbiAgICAgIG1heD86IG51bWJlcjtcclxuICAgICAgYmFja29mZj86IG51bWJlcjtcclxuICAgIH07XHJcblxyXG4vLyBSZXRyeSBvbiBlcnJvciwgaWYgbnVtYmVyIGlzIHByb3ZpZGVkIGl0IHdpbGwgcmV0cnkgdGhhdCBtYW55IHRpbWVzIHdpdGggZXhwb25lbnRpYWwgYmFja29mZiwgb3RoZXJ3aXNlIGl0IHdpbGwgdXNlIHRoZSBvcHRpb25zIHByb3ZpZGVkXHJcbmV4cG9ydCBmdW5jdGlvbiByZXRyeU9uRXJyb3I8VD4oXHJcbiAgcmVzOiBIdHRwUmVzb3VyY2VSZWY8VD4sXHJcbiAgb3B0PzogUmV0cnlPcHRpb25zLFxyXG4pOiBIdHRwUmVzb3VyY2VSZWY8VD4ge1xyXG4gIGNvbnN0IG1heCA9IG9wdCA/ICh0eXBlb2Ygb3B0ID09PSAnbnVtYmVyJyA/IG9wdCA6IChvcHQubWF4ID8/IDApKSA6IDA7XHJcbiAgY29uc3QgYmFja29mZiA9IHR5cGVvZiBvcHQgPT09ICdvYmplY3QnID8gKG9wdC5iYWNrb2ZmID8/IDEwMDApIDogMTAwMDtcclxuXHJcbiAgbGV0IHJldHJpZXMgPSAwO1xyXG5cclxuICBsZXQgdGltZW91dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIGNvbnN0IG9uRXJyb3IgPSAoKSA9PiB7XHJcbiAgICBpZiAocmV0cmllcyA+PSBtYXgpIHJldHVybjtcclxuICAgIHJldHJpZXMrKztcclxuXHJcbiAgICBpZiAodGltZW91dCkgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xyXG5cclxuICAgIHNldFRpbWVvdXQoXHJcbiAgICAgICgpID0+IHJlcy5yZWxvYWQoKSxcclxuICAgICAgcmV0cmllcyA8PSAwID8gMCA6IGJhY2tvZmYgKiBNYXRoLnBvdygyLCByZXRyaWVzIC0gMSksXHJcbiAgICApO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IG9uU3VjY2VzcyA9ICgpID0+IHtcclxuICAgIGlmICh0aW1lb3V0KSBjbGVhclRpbWVvdXQodGltZW91dCk7XHJcbiAgICByZXRyaWVzID0gMDtcclxuICB9O1xyXG5cclxuICBjb25zdCByZWYgPSBlZmZlY3QoKCkgPT4ge1xyXG4gICAgc3dpdGNoIChyZXMuc3RhdHVzKCkpIHtcclxuICAgICAgY2FzZSAnZXJyb3InOlxyXG4gICAgICAgIHJldHVybiBvbkVycm9yKCk7XHJcbiAgICAgIGNhc2UgJ3Jlc29sdmVkJzpcclxuICAgICAgICByZXR1cm4gb25TdWNjZXNzKCk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICAuLi5yZXMsXHJcbiAgICBkZXN0cm95OiAoKSA9PiB7XHJcbiAgICAgIHJlZi5kZXN0cm95KCk7IC8vIGNsZWFudXAgb24gbWFudWFsIGRlc3Ryb3lcclxuICAgICAgcmVzLmRlc3Ryb3koKTtcclxuICAgIH0sXHJcbiAgfTtcclxufVxyXG4iXX0=","import { HttpParams } from '@angular/common/http';\nimport { entries } from '@mmstack/object';\nfunction normalizeParams(params) {\n if (params instanceof HttpParams)\n return params.toString();\n const paramMap = new Map();\n for (const [key, value] of entries(params)) {\n if (Array.isArray(value)) {\n paramMap.set(key, value.map(encodeURIComponent).join(','));\n }\n else {\n paramMap.set(key, encodeURIComponent(value.toString()));\n }\n }\n return Array.from(paramMap.entries())\n .map(([key, value]) => `${key}=${value}`)\n .join('&');\n}\nexport function urlWithParams(req) {\n if (!req.params)\n return req.url;\n return `${req.url}?${normalizeParams(req.params)}`;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLXdpdGgtcGFyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcmVzb3VyY2Uvc3JjL2xpYi91dGlsL3VybC13aXRoLXBhcmFtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUF1QixNQUFNLHNCQUFzQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUxQyxTQUFTLGVBQWUsQ0FDdEIsTUFBK0M7SUFFL0MsSUFBSSxNQUFNLFlBQVksVUFBVTtRQUFFLE9BQU8sTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBRTNELE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBRTNDLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUMzQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QixRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDN0QsQ0FBQzthQUFNLENBQUM7WUFDTixRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFELENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7U0FDeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsR0FBd0I7SUFDcEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNO1FBQUUsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDO0lBRWhDLE9BQU8sR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUNyRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cFBhcmFtcywgSHR0cFJlc291cmNlUmVxdWVzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgZW50cmllcyB9IGZyb20gJ0BtbXN0YWNrL29iamVjdCc7XHJcblxyXG5mdW5jdGlvbiBub3JtYWxpemVQYXJhbXMoXHJcbiAgcGFyYW1zOiBSZXF1aXJlZDxIdHRwUmVzb3VyY2VSZXF1ZXN0PlsncGFyYW1zJ10sXHJcbik6IHN0cmluZyB7XHJcbiAgaWYgKHBhcmFtcyBpbnN0YW5jZW9mIEh0dHBQYXJhbXMpIHJldHVybiBwYXJhbXMudG9TdHJpbmcoKTtcclxuXHJcbiAgY29uc3QgcGFyYW1NYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xyXG5cclxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBlbnRyaWVzKHBhcmFtcykpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICBwYXJhbU1hcC5zZXQoa2V5LCB2YWx1ZS5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KS5qb2luKCcsJykpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGFyYW1NYXAuc2V0KGtleSwgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlLnRvU3RyaW5nKCkpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBBcnJheS5mcm9tKHBhcmFtTWFwLmVudHJpZXMoKSlcclxuICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCR7a2V5fT0ke3ZhbHVlfWApXHJcbiAgICAuam9pbignJicpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdXJsV2l0aFBhcmFtcyhyZXE6IEh0dHBSZXNvdXJjZVJlcXVlc3QpOiBzdHJpbmcge1xyXG4gIGlmICghcmVxLnBhcmFtcykgcmV0dXJuIHJlcS51cmw7XHJcblxyXG4gIHJldHVybiBgJHtyZXEudXJsfT8ke25vcm1hbGl6ZVBhcmFtcyhyZXEucGFyYW1zKX1gO1xyXG59XHJcbiJdfQ==","import { HttpClient, httpResource, HttpResponse, } from '@angular/common/http';\nimport { computed, DestroyRef, effect, inject, isDevMode, linkedSignal, untracked, } from '@angular/core';\nimport { toWritable } from '@mmstack/primitives';\nimport { firstValueFrom } from 'rxjs';\nimport { catchValueError, createCircuitBreaker, createEqualRequest, hasSlowConnection, injectQueryCache, persistResourceValues, refresh, retryOnError, setCacheContext, urlWithParams, } from './util';\nexport function queryResource(request, options) {\n const cache = injectQueryCache(options?.injector);\n const destroyRef = options?.injector\n ? options.injector.get(DestroyRef)\n : inject(DestroyRef);\n const cb = createCircuitBreaker(options?.circuitBreaker === true\n ? undefined\n : (options?.circuitBreaker ?? false));\n const stableRequest = computed(() => {\n if (cb.isClosed())\n return undefined;\n return request() ?? undefined;\n }, {\n equal: options?.triggerOnSameRequest\n ? undefined\n : createEqualRequest(options?.equal),\n });\n const hashFn = typeof options?.cache === 'object'\n ? (options.cache.hash ?? urlWithParams)\n : urlWithParams;\n const staleTime = typeof options?.cache === 'object' ? options.cache.staleTime : 0;\n const ttl = typeof options?.cache === 'object' ? options.cache.ttl : undefined;\n const cacheKey = computed(() => {\n const r = stableRequest();\n if (!r)\n return null;\n return hashFn(r);\n });\n const cachedRequest = options?.cache\n ? computed(() => {\n const r = stableRequest();\n if (!r)\n return r;\n return {\n ...r,\n context: setCacheContext(r.context, {\n staleTime,\n ttl,\n key: cacheKey() ?? hashFn(r),\n }),\n };\n })\n : stableRequest;\n let resource = httpResource(cachedRequest, {\n ...options,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n parse: options?.parse, // Not my favorite thing to do, but here it is completely safe.\n });\n resource = catchValueError(resource, options?.defaultValue);\n // get full HttpResonse from Cache\n const cachedEvent = cache.get(cacheKey);\n const parse = options?.parse ?? ((val) => val);\n const actualCacheValue = computed(() => {\n const ce = cachedEvent();\n if (!ce || !(ce.value instanceof HttpResponse))\n return;\n return parse(ce.value.body);\n });\n // retains last cache value after it is invalidated for lifetime of resource\n const cachedValue = linkedSignal({\n source: () => actualCacheValue(),\n computation: (source, prev) => {\n if (!source && prev)\n return prev.value;\n return source;\n },\n });\n resource = refresh(resource, destroyRef, options?.refresh);\n resource = retryOnError(resource, options?.retry);\n resource = persistResourceValues(resource, options?.keepPrevious, options?.equal);\n const value = options?.cache\n ? toWritable(computed(() => {\n return cachedValue() ?? resource.value();\n }), resource.value.set, resource.value.update)\n : resource.value;\n const onError = options?.onError; // Put in own variable to ensure value remains even if options are somehow mutated in-line\n if (onError) {\n const onErrorRef = effect(() => {\n const err = resource.error();\n if (err)\n onError(err);\n });\n // cleanup on manual destroy, I'm comfortable setting these props in-line as we have yet to 'release' the object out of this lexical scope\n const destroyRest = resource.destroy;\n resource.destroy = () => {\n onErrorRef.destroy();\n destroyRest();\n };\n }\n // iterate circuit breaker state, is effect as a computed would cause a circular dependency (resource -> cb -> resource)\n const cbEffectRef = effect(() => {\n const status = resource.status();\n if (status === 'error')\n cb.fail();\n else if (status === 'resolved')\n cb.success();\n });\n const set = (value) => {\n resource.value.set(value);\n const k = untracked(cacheKey);\n if (options?.cache && k)\n cache.store(k, new HttpResponse({\n body: value,\n status: 200,\n statusText: 'OK',\n }));\n };\n const update = (updater) => {\n set(updater(untracked(resource.value)));\n };\n const client = options?.injector\n ? options.injector.get(HttpClient)\n : inject(HttpClient);\n return {\n ...resource,\n value,\n set,\n update,\n disabled: computed(() => cb.isClosed() || stableRequest() === undefined),\n reload: () => {\n cb.halfOpen(); // open the circuit for manual reload\n return resource.reload();\n },\n destroy: () => {\n cbEffectRef.destroy();\n cb.destroy();\n resource.destroy();\n },\n prefetch: async (partial) => {\n if (!options?.cache || hasSlowConnection())\n return Promise.resolve();\n const request = untracked(cachedRequest);\n if (!request)\n return Promise.resolve();\n const prefetchRequest = {\n ...request,\n ...partial,\n };\n try {\n await firstValueFrom(client.request(prefetchRequest.method ?? 'GET', prefetchRequest.url, {\n ...prefetchRequest,\n headers: prefetchRequest.headers,\n observe: 'response',\n }));\n return;\n }\n catch (err) {\n if (isDevMode())\n console.error('Prefetch failed: ', err);\n return;\n }\n },\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktcmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yZXNvdXJjZS9zcmMvbGliL3F1ZXJ5LXJlc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxVQUFVLEVBRVYsWUFBWSxFQUNaLFlBQVksR0FJYixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFDTCxRQUFRLEVBQ1IsVUFBVSxFQUNWLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFlBQVksRUFFWixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUNMLGVBQWUsRUFFZixvQkFBb0IsRUFDcEIsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLE9BQU8sRUFDUCxZQUFZLEVBQ1osZUFBZSxFQUNmLGFBQWEsR0FFZCxNQUFNLFFBQVEsQ0FBQztBQStHaEIsTUFBTSxVQUFVLGFBQWEsQ0FDM0IsT0FBcUQsRUFDckQsT0FBNkM7SUFFN0MsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRWxELE1BQU0sVUFBVSxHQUFHLE9BQU8sRUFBRSxRQUFRO1FBQ2xDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7UUFDbEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUV2QixNQUFNLEVBQUUsR0FBRyxvQkFBb0IsQ0FDN0IsT0FBTyxFQUFFLGNBQWMsS0FBSyxJQUFJO1FBQzlCLENBQUMsQ0FBQyxTQUFTO1FBQ1gsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLGNBQWMsSUFB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TyxFQUFFLGVBQWUsQ0FBQyxPQUFzQjtvQkFDL0MsT0FBTyxFQUFFLFVBQVU7aUJBQ3BCLENBQ0YsQ0FDRixDQUFDO2dCQUVGLE9BQU87WUFDVCxDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixJQUFJLFNBQVMsRUFBRTtvQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN6RCxPQUFPO1lBQ1QsQ0FBQztRQUNILENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgSHR0cENsaWVudCxcclxuICBIdHRwSGVhZGVycyxcclxuICBodHRwUmVzb3VyY2UsXHJcbiAgSHR0cFJlc3BvbnNlLFxyXG4gIHR5cGUgSHR0cFJlc291cmNlT3B0aW9ucyxcclxuICB0eXBlIEh0dHBSZXNvdXJjZVJlZixcclxuICB0eXBlIEh0dHBSZXNvdXJjZVJlcXVlc3QsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge1xyXG4gIGNvbXB1dGVkLFxyXG4gIERlc3Ryb3lSZWYsXHJcbiAgZWZmZWN0LFxyXG4gIGluamVjdCxcclxuICBpc0Rldk1vZGUsXHJcbiAgbGlua2VkU2lnbmFsLFxyXG4gIFNpZ25hbCxcclxuICB1bnRyYWNrZWQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRvV3JpdGFibGUgfSBmcm9tICdAbW1zdGFjay9wcmltaXRpdmVzJztcclxuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICBjYXRjaFZhbHVlRXJyb3IsXHJcbiAgQ2lyY3VpdEJyZWFrZXJPcHRpb25zLFxyXG4gIGNyZWF0ZUNpcmN1aXRCcmVha2VyLFxyXG4gIGNyZWF0ZUVxdWFsUmVxdWVzdCxcclxuICBoYXNTbG93Q29ubmVjdGlvbixcclxuICBpbmplY3RRdWVyeUNhY2hlLFxyXG4gIHBlcnNpc3RSZXNvdXJjZVZhbHVlcyxcclxuICByZWZyZXNoLFxyXG4gIHJldHJ5T25FcnJvcixcclxuICBzZXRDYWNoZUNvbnRleHQsXHJcbiAgdXJsV2l0aFBhcmFtcyxcclxuICB0eXBlIFJldHJ5T3B0aW9ucyxcclxufSBmcm9tICcuL3V0aWwnO1xyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGNhY2hpbmcgYmVoYXZpb3Igb2YgYSBgcXVlcnlSZXNvdXJjZWAuXHJcbiAqIC0gYHRydWVgOiBFbmFibGVzIGNhY2hpbmcgd2l0aCBkZWZhdWx0IHNldHRpbmdzLlxyXG4gKiAtIGB7IHR0bD86IG51bWJlcjsgc3RhbGVUaW1lPzogbnVtYmVyOyBoYXNoPzogKHJlcTogSHR0cFJlc291cmNlUmVxdWVzdCkgPT4gc3RyaW5nOyB9YDogIENvbmZpZ3VyZXMgY2FjaGluZyB3aXRoIGN1c3RvbSBzZXR0aW5ncy5cclxuICovXHJcbnR5cGUgUmVzb3VyY2VDYWNoZU9wdGlvbnMgPVxyXG4gIHwgdHJ1ZVxyXG4gIHwge1xyXG4gICAgICAvKipcclxuICAgICAgICogVGhlIFRpbWUgVG8gTGl2ZSAoVFRMKSBmb3IgdGhlIGNhY2hlZCBkYXRhLCBpbiBtaWxsaXNlY29uZHMuIEFmdGVyIHRoaXMgdGltZSwgdGhlIGNhY2hlZCBkYXRhIGlzXHJcbiAgICAgICAqIGNvbnNpZGVyZWQgZXhwaXJlZCBhbmQgd2lsbCBiZSByZWZldGNoZWQuXHJcbiAgICAgICAqL1xyXG4gICAgICB0dGw/OiBudW1iZXI7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBUaGUgZHVyYXRpb24sIGluIG1pbGxpc2Vjb25kcywgZHVyaW5nIHdoaWNoIHN0YWxlIGRhdGEgY2FuIGJlIHNlcnZlZCB3aGlsZSBhIHJldmFsaWRhdGlvbiByZXF1ZXN0XHJcbiAgICAgICAqIGlzIG1hZGUgaW4gdGhlIGJhY2tncm91bmQuXHJcbiAgICAgICAqL1xyXG4gICAgICBzdGFsZVRpbWU/OiBudW1iZXI7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBBIGN1c3RvbSBmdW5jdGlvbiB0byBnZW5lcmF0ZSB0aGUgY2FjaGUga2V5LiBEZWZhdWx0cyB0byB1c2luZyB0aGUgcmVxdWVzdCBVUkwgd2l0aCBwYXJhbWV0ZXJzLlxyXG4gICAgICAgKiBQcm92aWRlIGEgY3VzdG9tIGhhc2ggZnVuY3Rpb24gaWYgeW91IG5lZWQgbW9yZSBjb250cm9sIG92ZXIgaG93IGNhY2hlIGtleXMgYXJlIGdlbmVyYXRlZCxcclxuICAgICAgICogZm9yIGluc3RhbmNlLCB0byBpZ25vcmUgY2VydGFpbiBxdWVyeSBwYXJhbWV0ZXJzIG9yIHRvIHVzZSByZXF1ZXN0IGJvZHkgZm9yIHRoZSBjYWNoZSBrZXkuXHJcbiAgICAgICAqL1xyXG4gICAgICBoYXNoPzogKHJlcTogSHR0cFJlc291cmNlUmVxdWVzdCkgPT4gc3RyaW5nO1xyXG4gICAgfTtcclxuXHJcbi8qKlxyXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyBhIGBxdWVyeVJlc291cmNlYC5cclxuICovXHJcbmV4cG9ydCB0eXBlIFF1ZXJ5UmVzb3VyY2VPcHRpb25zPFRSZXN1bHQsIFRSYXcgPSBUUmVzdWx0PiA9IEh0dHBSZXNvdXJjZU9wdGlvbnM8XHJcbiAgVFJlc3VsdCxcclxuICBUUmF3XHJcbj4gJiB7XHJcbiAgLyoqXHJcbiAgICogV2hldGhlciB0byBrZWVwIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgcmVzb3VyY2Ugd2hpbGUgYSByZWZyZXNoIGlzIGluIHByb2dyZXNzLlxyXG4gICAqIERlZmF1bHRzIHRvIGBmYWxzZWAuIEFsc28ga2VlcHMgc3RhdHVzICYgaGVhZGVycyB3aGlsZSByZWZyZXNoaW5nLlxyXG4gICAqL1xyXG4gIGtlZXBQcmV2aW91cz86IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICogVGhlIHJlZnJlc2ggaW50ZXJ2YWwsIGluIG1pbGxpc2Vjb25kcy4gSWYgcHJvdmlkZWQsIHRoZSByZXNvdXJjZSB3aWxsIGF1dG9tYXRpY2FsbHlcclxuICAgKiByZWZyZXNoIGl0cyBkYXRhIGF0IHRoZSBzcGVjaWZpZWQgaW50ZXJ2YWwuXHJcbiAgICovXHJcbiAgcmVmcmVzaD86IG51bWJlcjtcclxuICAvKipcclxuICAgKiBPcHRpb25zIGZvciByZXRyeWluZyBmYWlsZWQgcmVxdWVzdHMuXHJcbiAgICovXHJcbiAgcmV0cnk/OiBSZXRyeU9wdGlvbnM7XHJcbiAgLyoqXHJcbiAgICogQW4gb3B0aW9uYWwgZXJyb3IgaGFuZGxlciBjYWxsYmFjay4gIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlXHJcbiAgICogdW5kZXJseWluZyBIVFRQIHJlcXVlc3QgZmFpbHMuIFVzZWZ1bCBmb3IgZGlzcGxheWluZyB0b2FzdHMgb3Igb3RoZXIgZXJyb3IgbWVzc2FnZXMuXHJcbiAgICovXHJcbiAgb25FcnJvcj86IChlcnI6IHVua25vd24pID0+IHZvaWQ7XHJcbiAgLyoqXHJcbiAgICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgYSBjaXJjdWl0IGJyZWFrZXIgZm9yIHRoZSByZXNvdXJjZS5cclxuICAgKi9cclxuICBjaXJjdWl0QnJlYWtlcj86IENpcmN1aXRCcmVha2VyT3B0aW9ucyB8IHRydWU7XHJcbiAgLyoqXHJcbiAgICogT3B0aW9ucyBmb3IgZW5hYmxpbmcgYW5kIGNvbmZpZ3VyaW5nIGNhY2hpbmcgZm9yIHRoZSByZXNvdXJjZS5cclxuICAgKi9cclxuICBjYWNoZT86IFJlc291cmNlQ2FjaGVPcHRpb25zO1xyXG4gIC8qKlxyXG4gICAqIFRyaWdnZXIgYSByZXF1ZXN0IGV2ZXJ5IHRpbWUgdGhlIHJlcXVlc3QgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkLCBldmVuIGlmIHRoZSByZXF1ZXN0IHBhcmFtZXRlcnMgYXJlIHRoZSBzYW1lLlxyXG4gICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICovXHJcbiAgdHJpZ2dlck9uU2FtZVJlcXVlc3Q/OiBib29sZWFuO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlcHJlc2VudHMgYSByZXNvdXJjZSBjcmVhdGVkIGJ5IGBxdWVyeVJlc291cmNlYC4gRXh0ZW5kcyBgSHR0cFJlc291cmNlUmVmYCB3aXRoIGFkZGl0aW9uYWwgcHJvcGVydGllcy5cclxuICovXHJcbmV4cG9ydCB0eXBlIFF1ZXJ5UmVzb3VyY2VSZWY8VFJlc3VsdD4gPSBIdHRwUmVzb3VyY2VSZWY8VFJlc3VsdD4gJiB7XHJcbiAgLyoqXHJcbiAgICogQSBzaWduYWwgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSByZXNvdXJjZSBpcyBjdXJyZW50bHkgZGlzYWJsZWQgKGR1ZSB0byBjaXJjdWl0IGJyZWFrZXIgb3IgdW5kZWZpbmVkIHJlcXVlc3QpLlxyXG4gICAqL1xyXG4gIGRpc2FibGVkOiBTaWduYWw8Ym9vbGVhbj47XHJcbiAgLyoqXHJcbiAgICogUHJlZmV0Y2hlcyBkYXRhIGZvciB0aGUgcmVzb3VyY2UsIHBvcHVsYXRpbmcgdGhlIGNhY2hlIGlmIGNhY2hpbmcgaXMgZW5hYmxlZC4gIFRoaXMgY2FuIGJlXHJcbiAgICogdXNlZCB0byBwcm9hY3RpdmVseSBsb2FkIGRhdGEgYmVmb3JlIGl0J3MgbmVlZGVkLiAgSWYgYSBzbG93IGNvbm5lY3Rpb24gaXMgZGV0ZWN0ZWQsIHByZWZldGNoaW5nIGlzIHNraXBwZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gcmVxIC0gT3B0aW9uYWwgcGFydGlhbCByZXF1ZXN0IHBhcmFtZXRlcnMgdG8gdXNlIGZvciB0aGUgcHJlZmV0Y2guICBUaGlzIGFsbG93cyB5b3VcclxuICAgKiAgICAgICAgICAgICAgdG8gcHJlZmV0Y2ggZGF0YSB3aXRoIGRpZmZlcmVudCBwYXJhbWV0ZXJzIHRoYW4gdGhlIG1haW4gcmVzb3VyY2UgcmVxdWVzdC5cclxuICAgKi9cclxuICBwcmVmZXRjaDogKHJlcT86IFBhcnRpYWw8SHR0cFJlc291cmNlUmVxdWVzdD4pID0+IFByb21pc2U8dm9pZD47XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlSZXNvdXJjZTxUUmVzdWx0LCBUUmF3ID0gVFJlc3VsdD4oXHJcbiAgcmVxdWVzdDogKCkgPT4gSHR0cFJlc291cmNlUmVxdWVzdCB8IHVuZGVmaW5lZCB8IHZvaWQsXHJcbiAgb3B0aW9uczogUXVlcnlSZXNvdXJjZU9wdGlvbnM8VFJlc3VsdCwgVFJhdz4gJiB7XHJcbiAgICBkZWZhdWx0VmFsdWU6IE5vSW5mZXI8VFJlc3VsdD47XHJcbiAgfSxcclxuKTogUXVlcnlSZXNvdXJjZVJlZjxUUmVzdWx0PjtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGFuIGV4dGVuZGVkIEhUVFAgcmVzb3VyY2Ugd2l0aCBmZWF0dXJlcyBsaWtlIGNhY2hpbmcsIHJldHJpZXMsIHJlZnJlc2ggaW50ZXJ2YWxzLFxyXG4gKiBjaXJjdWl0IGJyZWFrZXIsIGFuZCBvcHRpbWlzdGljIHVwZGF0ZXMuIFdpdGhvdXQgYWRkaXRpb25hbCBvcHRpb25zIGl0IGlzIGVxdWl2YWxlbnQgdG8gc2ltcGx5IGNhbGxpbmcgYGh0dHBSZXNvdXJjZWAuXHJcbiAqXHJcbiAqIEBwYXJhbSByZXF1ZXN0IEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBgSHR0cFJlc291cmNlUmVxdWVzdGAgdG8gYmUgbWFkZS4gIFRoaXMgZnVuY3Rpb25cclxuICogICAgICAgICAgICAgICAgaXMgY2FsbGVkIHJlYWN0aXZlbHksIHNvIHRoZSByZXF1ZXN0IGNhbiBjaGFuZ2Ugb3ZlciB0aW1lLiAgSWYgdGhlIGZ1bmN0aW9uXHJcbiAqICAgICAgICAgICAgICAgIHJldHVybnMgYHVuZGVmaW5lZGAsIHRoZSByZXNvdXJjZSBpcyBjb25zaWRlcmVkIFwiZGlzYWJsZWRcIiBhbmQgbm8gcmVxdWVzdCB3aWxsIGJlIG1hZGUuXHJcbiAqIEBwYXJhbSBvcHRpb25zIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHJlc291cmNlLiAgVGhlc2Ugb3B0aW9ucyBleHRlbmQgdGhlIGJhc2ljXHJcbiAqICAgICAgICAgICAgICAgIGBIdHRwUmVzb3VyY2VPcHRpb25zYCBhbmQgYWRkIGZlYXR1cmVzIGxpa2UgYGtlZXBQcmV2aW91c2AsIGByZWZyZXNoYCwgYHJldHJ5YCxcclxuICogICAgICAgICAgICAgICAgYG9uRXJyb3JgLCBgY2lyY3VpdEJyZWFrZXJgLCBhbmQgYGNhY2hlYC5cclxuICogQHJldHVybnMgQW4gYFF1ZXJ5UmVzb3VyY2VSZWZgIGluc3RhbmNlLCB3aGljaCBleHRlbmRzIHRoZSBiYXNpYyBgSHR0cFJlc291cmNlUmVmYCB3aXRoIGFkZGl0aW9uYWwgZmVhdHVyZXMuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlSZXNvdXJjZTxUUmVzdWx0LCBUUmF3ID0gVFJlc3VsdD4oXHJcbiAgcmVxdWVzdDogKCkgPT4gSHR0cFJlc291cmNlUmVxdWVzdCB8IHVuZGVmaW5lZCB8IHZvaWQsXHJcbiAgb3B0aW9ucz86IFF1ZXJ5UmVzb3VyY2VPcHRpb25zPFRSZXN1bHQsIFRSYXc+LFxyXG4pOiBRdWVyeVJlc291cmNlUmVmPFRSZXN1bHQgfCB1bmRlZmluZWQ+O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5UmVzb3VyY2U8VFJlc3VsdCwgVFJhdyA9IFRSZXN1bHQ+KFxyXG4gIHJlcXVlc3Q6ICgpID0+IEh0dHBSZXNvdXJjZVJlcXVlc3QgfCB1bmRlZmluZWQgfCB2b2lkLFxyXG4gIG9wdGlvbnM/OiBRdWVyeVJlc291cmNlT3B0aW9uczxUUmVzdWx0LCBUUmF3PixcclxuKTogUXVlcnlSZXNvdXJjZVJlZjxUUmVzdWx0IHwgdW5kZWZpbmVkPiB7XHJcbiAgY29uc3QgY2FjaGUgPSBpbmplY3RRdWVyeUNhY2hlKG9wdGlvbnM/LmluamVjdG9yKTtcclxuXHJcbiAgY29uc3QgZGVzdHJveVJlZiA9IG9wdGlvbnM/LmluamVjdG9yXHJcbiAgICA/IG9wdGlvbnMuaW5qZWN0b3IuZ2V0KERlc3Ryb3lSZWYpXHJcbiAgICA6IGluamVjdChEZXN0cm95UmVmKTtcclxuXHJcbiAgY29uc3QgY2IgPSBjcmVhdGVDaXJjdWl0QnJlYWtlcihcclxuICAgIG9wdGlvbnM/LmNpcmN1aXRCcmVha2VyID09PSB0cnVlXHJcbiAgICAgID8gdW5kZWZpbmVkXHJcbiAgICAgIDogKG9wdGlvbnM/LmNpcmN1aXRCcmVha2VyID8/IGZhbHNlKSxcclxuICApO1xyXG5cclxuICBjb25zdCBzdGFibGVSZXF1ZXN0ID0gY29tcHV0ZWQoXHJcbiAgICAoKSA9PiB7XHJcbiAgICAgIGlmIChjYi5pc0Nsb3NlZCgpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICByZXR1cm4gcmVxdWVzdCgpID8/IHVuZGVmaW5lZDtcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGVxdWFsOiBvcHRpb25zPy50cmlnZ2VyT25TYW1lUmVxdWVzdFxyXG4gICAgICAgID8gdW5kZWZpbmVkXHJcbiAgICAgICAgOiBjcmVhdGVFcXVhbFJlcXVlc3Qob3B0aW9ucz8uZXF1YWwpLFxyXG4gICAgfSxcclxuICApO1xyXG5cclxuICBjb25zdCBoYXNoRm4gPVxyXG4gICAgdHlwZW9mIG9wdGlvbnM/LmNhY2hlID09PSAnb2JqZWN0J1xyXG4gICAgICA/IChvcHRpb25zLmNhY2hlLmhhc2ggPz8gdXJsV2l0aFBhcmFtcylcclxuICAgICAgOiB1cmxXaXRoUGFyYW1zO1xyXG5cclxuICBjb25zdCBzdGFsZVRpbWUgPVxyXG4gICAgdHlwZW9mIG9wdGlvbnM/LmNhY2hlID09PSAnb2JqZWN0JyA/IG9wdGlvbnMuY2FjaGUuc3RhbGVUaW1lIDogMDtcclxuICBjb25zdCB0dGwgPVxyXG4gICAgdHlwZW9mIG9wdGlvbnM/LmNhY2hlID09PSAnb2JqZWN0JyA/IG9wdGlvbnMuY2FjaGUudHRsIDogdW5kZWZpbmVkO1xyXG5cclxuICBjb25zdCBjYWNoZUtleSA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGNvbnN0IHIgPSBzdGFibGVSZXF1ZXN0KCk7XHJcbiAgICBpZiAoIXIpIHJldHVybiBudWxsO1xyXG4gICAgcmV0dXJuIGhhc2hGbihyKTtcclxuICB9KTtcclxuXHJcbiAgY29uc3QgY2FjaGVkUmVxdWVzdCA9IG9wdGlvbnM/LmNhY2hlXHJcbiAgICA/IGNvbXB1dGVkKCgpID0+IHtcclxuICAgICAgICBjb25zdCByID0gc3RhYmxlUmVxdWVzdCgpO1xyXG4gICAgICAgIGlmICghcikgcmV0dXJuIHI7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi5yLFxyXG4gICAgICAgICAgY29udGV4dDogc2V0Q2FjaGVDb250ZXh0KHIuY29udGV4dCwge1xyXG4gICAgICAgICAgICBzdGFsZVRpbWUsXHJcbiAgICAgICAgICAgIHR0bCxcclxuICAgICAgICAgICAga2V5OiBjYWNoZUtleSgpID8/IGhhc2hGbihyKSxcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pXHJcbiAgICA6IHN0YWJsZVJlcXVlc3Q7XHJcblxyXG4gIGxldCByZXNvdXJjZSA9IGh0dHBSZXNvdXJjZTxUUmVzdWx0PihjYWNoZWRSZXF1ZXN0LCB7XHJcbiAgICAuLi5vcHRpb25zLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgIHBhcnNlOiBvcHRpb25zPy5wYXJzZSBhcyBhbnksIC8vIE5vdCBteSBmYXZvcml0ZSB0aGluZyB0byBkbywgYnV0IGhlcmUgaXQgaXMgY29tcGxldGVseSBzYWZlLlxyXG4gIH0pIGFzIEh0dHBSZXNvdXJjZVJlZjxUUmVzdWx0PjtcclxuXHJcbiAgcmVzb3VyY2UgPSBjYXRjaFZhbHVlRXJyb3IocmVzb3VyY2UsIG9wdGlvbnM/LmRlZmF1bHRWYWx1ZSBhcyBUUmVzdWx0KTtcclxuXHJcbiAgLy8gZ2V0IGZ1bGwgSHR0cFJlc29uc2UgZnJvbSBDYWNoZVxyXG4gIGNvbnN0IGNhY2hlZEV2ZW50ID0gY2FjaGUuZ2V0KGNhY2hlS2V5KTtcclxuXHJcbiAgY29uc3QgcGFyc2UgPSBvcHRpb25zPy5wYXJzZSA/PyAoKHZhbDogVFJhdykgPT4gdmFsIGFzIHVua25vd24gYXMgVFJlc3VsdCk7XHJcblxyXG4gIGNvbnN0IGFjdHVhbENhY2hlVmFsdWUgPSBjb21wdXRlZCgoKTogVFJlc3VsdCB8IHVuZGVmaW5lZCA9PiB7XHJcbiAgICBjb25zdCBjZSA9IGNhY2hlZEV2ZW50KCk7XHJcbiAgICBpZiAoIWNlIHx8ICEoY2UudmFsdWUgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UpKSByZXR1cm47XHJcbiAgICByZXR1cm4gcGFyc2UoY2UudmFsdWUuYm9keSBhcyBUUmF3KTtcclxuICB9KTtcclxuXHJcbiAgLy8gcmV0YWlucyBsYXN0IGNhY2hlIHZhbHVlIGFmdGVyIGl0IGlzIGludmFsaWRhdGVkIGZvciBsaWZldGltZSBvZiByZXNvdXJjZVxyXG4gIGNvbnN0IGNhY2hlZFZhbHVlID0gbGlua2VkU2lnbmFsPFRSZXN1bHQgfCB1bmRlZmluZWQsIFRSZXN1bHQgfCB1bmRlZmluZWQ+KHtcclxuICAgIHNvdXJjZTogKCkgPT4gYWN0dWFsQ2FjaGVWYWx1ZSgpLFxyXG4gICAgY29tcHV0YXRpb246IChzb3VyY2UsIHByZXYpID0+IHtcclxuICAgICAgaWYgKCFzb3VyY2UgJiYgcHJldikgcmV0dXJuIHByZXYudmFsdWU7XHJcbiAgICAgIHJldHVybiBzb3VyY2U7XHJcbiAgICB9LFxyXG4gIH0pO1xyXG5cclxuICByZXNvdXJjZSA9IHJlZnJlc2gocmVzb3VyY2UsIGRlc3Ryb3lSZWYsIG9wdGlvbnM/LnJlZnJlc2gpO1xyXG4gIHJlc291cmNlID0gcmV0cnlPbkVycm9yKHJlc291cmNlLCBvcHRpb25zPy5yZXRyeSk7XHJcblxyXG4gIHJlc291cmNlID0gcGVyc2lzdFJlc291cmNlVmFsdWVzPFRSZXN1bHQ+KFxyXG4gICAgcmVzb3VyY2UsXHJcbiAgICBvcHRpb25zPy5rZWVwUHJldmlvdXMsXHJcbiAgICBvcHRpb25zPy5lcXVhbCxcclxuICApO1xyXG5cclxuICBjb25zdCB2YWx1ZSA9IG9wdGlvbnM/LmNhY2hlXHJcbiAgICA/IHRvV3JpdGFibGUoXHJcbiAgICAgICAgY29tcHV0ZWQoKCk6IFRSZXN1bHQgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGNhY2hlZFZhbHVlKCkgPz8gcmVzb3VyY2UudmFsdWUoKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICByZXNvdXJjZS52YWx1ZS5zZXQsXHJcbiAgICAgICAgcmVzb3VyY2UudmFsdWUudXBkYXRlLFxyXG4gICAgICApXHJcbiAgICA6IHJlc291cmNlLnZhbHVlO1xyXG5cclxuICBjb25zdCBvbkVycm9yID0gb3B0aW9ucz8ub25FcnJvcjsgLy8gUHV0IGluIG93biB2YXJpYWJsZSB0byBlbnN1cmUgdmFsdWUgcmVtYWlucyBldmVuIGlmIG9wdGlvbnMgYXJlIHNvbWVob3cgbXV0YXRlZCBpbi1saW5lXHJcbiAgaWYgKG9uRXJyb3IpIHtcclxuICAgIGNvbnN0IG9uRXJyb3JSZWYgPSBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICBjb25zdCBlcnIgPSByZXNvdXJjZS5lcnJvcigpO1xyXG4gICAgICBpZiAoZXJyKSBvbkVycm9yKGVycik7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBjbGVhbnVwIG9uIG1hbnVhbCBkZXN0cm95LCBJJ20gY29tZm9ydGFibGUgc2V0dGluZyB0aGVzZSBwcm9wcyBpbi1saW5lIGFzIHdlIGhhdmUgeWV0IHRvICdyZWxlYXNlJyB0aGUgb2JqZWN0IG91dCBvZiB0aGlzIGxleGljYWwgc2NvcGVcclxuICAgIGNvbnN0IGRlc3Ryb3lSZXN0ID0gcmVzb3VyY2UuZGVzdHJveTtcclxuICAgIHJlc291cmNlLmRlc3Ryb3kgPSAoKSA9PiB7XHJcbiAgICAgIG9uRXJyb3JSZWYuZGVzdHJveSgpO1xyXG4gICAgICBkZXN0cm95UmVzdCgpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8vIGl0ZXJhdGUgY2lyY3VpdCBicmVha2VyIHN0YXRlLCBpcyBlZmZlY3QgYXMgYSBjb21wdXRlZCB3b3VsZCBjYXVzZSBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgKHJlc291cmNlIC0+IGNiIC0+IHJlc291cmNlKVxyXG4gIGNvbnN0IGNiRWZmZWN0UmVmID0gZWZmZWN0KCgpID0+IHtcclxuICAgIGNvbnN0IHN0YXR1cyA9IHJlc291cmNlLnN0YXR1cygpO1xyXG4gICAgaWYgKHN0YXR1cyA9PT0gJ2Vycm9yJykgY2IuZmFpbCgpO1xyXG4gICAgZWxzZSBpZiAoc3RhdHVzID09PSAncmVzb2x2ZWQnKSBjYi5zdWNjZXNzKCk7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IHNldCA9ICh2YWx1ZTogVFJlc3VsdCkgPT4ge1xyXG4gICAgcmVzb3VyY2UudmFsdWUuc2V0KHZhbHVlKTtcclxuICAgIGNvbnN0IGsgPSB1bnRyYWNrZWQoY2FjaGVLZXkpO1xyXG4gICAgaWYgKG9wdGlvbnM/LmNhY2hlICYmIGspXHJcbiAgICAgIGNhY2hlLnN0b3JlKFxyXG4gICAgICAgIGssXHJcbiAgICAgICAgbmV3IEh0dHBSZXNwb25zZSh7XHJcbiAgICAgICAgICBib2R5OiB2YWx1ZSxcclxuICAgICAgICAgIHN0YXR1czogMjAwLFxyXG4gICAgICAgICAgc3RhdHVzVGV4dDogJ09LJyxcclxuICAgICAgICB9KSxcclxuICAgICAgKTtcclxuICB9O1xyXG5cclxuICBjb25zdCB1cGRhdGUgPSAodXBkYXRlcjogKHZhbHVlOiBUUmVzdWx0KSA9PiBUUmVzdWx0KSA9PiB7XHJcbiAgICBzZXQodXBkYXRlcih1bnRyYWNrZWQocmVzb3VyY2UudmFsdWUpKSk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgY2xpZW50ID0gb3B0aW9ucz8uaW5qZWN0b3JcclxuICAgID8gb3B0aW9ucy5pbmplY3Rvci5nZXQoSHR0cENsaWVudClcclxuICAgIDogaW5qZWN0KEh0dHBDbGllbnQpO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgLi4ucmVzb3VyY2UsXHJcbiAgICB2YWx1ZSxcclxuICAgIHNldCxcclxuICAgIHVwZGF0ZSxcclxuICAgIGRpc2FibGVkOiBjb21wdXRlZCgoKSA9PiBjYi5pc0Nsb3NlZCgpIHx8IHN0YWJsZVJlcXVlc3QoKSA9PT0gdW5kZWZpbmVkKSxcclxuICAgIHJlbG9hZDogKCkgPT4ge1xyXG4gICAgICBjYi5oYWxmT3BlbigpOyAvLyBvcGVuIHRoZSBjaXJjdWl0IGZvciBtYW51YWwgcmVsb2FkXHJcbiAgICAgIHJldHVybiByZXNvdXJjZS5yZWxvYWQoKTtcclxuICAgIH0sXHJcbiAgICBkZXN0cm95OiAoKSA9PiB7XHJcbiAgICAgIGNiRWZmZWN0UmVmLmRlc3Ryb3koKTtcclxuICAgICAgY2IuZGVzdHJveSgpO1xyXG4gICAgICByZXNvdXJjZS5kZXN0cm95KCk7XHJcbiAgICB9LFxyXG4gICAgcHJlZmV0Y2g6IGFzeW5jIChwYXJ0aWFsKSA9PiB7XHJcbiAgICAgIGlmICghb3B0aW9ucz8uY2FjaGUgfHwgaGFzU2xvd0Nvbm5lY3Rpb24oKSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG5cclxuICAgICAgY29uc3QgcmVxdWVzdCA9IHVudHJhY2tlZChjYWNoZWRSZXF1ZXN0KTtcclxuICAgICAgaWYgKCFyZXF1ZXN0KSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcblxyXG4gICAgICBjb25zdCBwcmVmZXRjaFJlcXVlc3QgPSB7XHJcbiAgICAgICAgLi4ucmVxdWVzdCxcclxuICAgICAgICAuLi5wYXJ0aWFsLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICAgIGNsaWVudC5yZXF1ZXN0PFRSYXc+KFxyXG4gICAgICAgICAgICBwcmVmZXRjaFJlcXVlc3QubWV0aG9kID8/ICdHRVQnLFxyXG4gICAgICAgICAgICBwcmVmZXRjaFJlcXVlc3QudXJsLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgLi4ucHJlZmV0Y2hSZXF1ZXN0LFxyXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHByZWZldGNoUmVxdWVzdC5oZWFkZXJzIGFzIEh0dHBIZWFkZXJzLFxyXG4gICAgICAgICAgICAgIG9ic2VydmU6ICdyZXNwb25zZScsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSBjb25zb2xlLmVycm9yKCdQcmVmZXRjaCBmYWlsZWQ6ICcsIGVycik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gIH07XHJcbn1cclxuIl19","import { computed, DestroyRef, inject, signal, } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { catchError, combineLatestWith, filter, map, of } from 'rxjs';\nimport { queryResource, } from './query-resource';\nimport { createEqualRequest } from './util';\n/**\n * Creates a resource for performing mutations (e.g., POST, PUT, PATCH, DELETE requests).\n * Unlike `queryResource`, `mutationResource` is designed for one-off operations that change data.\n * It does *not* cache responses and does not provide a `value` signal. Instead, it focuses on\n * managing the mutation lifecycle (pending, error, success) and provides callbacks for handling\n * these states.\n *\n * @param request A function that returns the base `HttpResourceRequest` to be made. This\n * function is called reactively. Unlike `queryResource`, the `body` property\n * of the request is provided when `mutate` is called, *not* here. If the\n * function returns `undefined`, the mutation is considered \"disabled.\" All properties,\n * except the body, can be set here.\n * @param options Configuration options for the mutation resource. This includes callbacks\n * for `onMutate`, `onError`, `onSuccess`, and `onSettled`.\n * @typeParam TResult - The type of the expected result from the mutation.\n * @typeParam TRaw - The raw response type from the HTTP request (defaults to TResult).\n * @typeParam TCTX - The type of the context value returned by `onMutate`.\n * @returns A `MutationResourceRef` instance, which provides methods for triggering the mutation\n * and observing its status.\n */\nexport function mutationResource(request, options = {}) {\n const { onMutate, onError, onSuccess, onSettled, equal, ...rest } = options;\n const requestEqual = createEqualRequest(equal);\n const baseRequest = computed(() => request() ?? undefined, {\n equal: requestEqual,\n });\n const nextRequest = signal(null, {\n equal: (a, b) => {\n if (!a && !b)\n return true;\n if (!a || !b)\n return false;\n return requestEqual(a, b);\n },\n });\n const req = computed(() => {\n const nr = nextRequest();\n if (!nr)\n return;\n const base = baseRequest();\n const url = nr.url ?? base?.url;\n if (!url)\n return;\n const method = nr.method ?? base?.method;\n return {\n ...base,\n ...nr,\n url,\n method,\n };\n });\n const resource = queryResource(req, {\n ...rest,\n defaultValue: null, // doesnt matter since .value is not accessible\n });\n let ctx = undefined;\n const destroyRef = options.injector\n ? options.injector.get(DestroyRef)\n : inject(DestroyRef);\n const error$ = toObservable(resource.error);\n const value$ = toObservable(resource.value).pipe(catchError(() => of(null)));\n const statusSub = toObservable(resource.status)\n .pipe(combineLatestWith(error$, value$), map(([status, error, value]) => {\n if (status === 'error' && error) {\n return {\n status: 'error',\n error,\n };\n }\n if (status === 'resolved' && value !== null) {\n return {\n status: 'resolved',\n value,\n };\n }\n return null;\n }), filter((v) => v !== null), takeUntilDestroyed(destroyRef))\n .subscribe((result) => {\n if (result.status === 'error')\n onError?.(result.error, ctx);\n else\n onSuccess?.(result.value, ctx);\n onSettled?.(ctx);\n ctx = undefined;\n nextRequest.set(null);\n });\n return {\n ...resource,\n destroy: () => {\n statusSub.unsubscribe();\n resource.destroy();\n },\n mutate: (value, ictx) => {\n ctx = onMutate?.(value.body, ictx);\n nextRequest.set(value);\n },\n current: nextRequest,\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXV0YXRpb24tcmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yZXNvdXJjZS9zcmMvbGliL211dGF0aW9uLXJlc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsVUFBVSxFQUNWLE1BQU0sRUFFTixNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEUsT0FBTyxFQUNMLGFBQWEsR0FHZCxNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQTJHNUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBUTlCLE9BR1EsRUFDUixVQUEwRSxFQUFFO0lBRTVFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRTVFLE1BQU0sWUFBWSxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRS9DLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxTQUFTLEVBQUU7UUFDekQsS0FBSyxFQUFFLFlBQVk7S0FDcEIsQ0FBQyxDQUFDO0lBRUgsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUV4QixJQUFJLEVBQUU7UUFDTixLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDZCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMs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Q0FBQztJQUN4QixDQUFDLENBQUMsQ0FBQztJQUVMLE9BQU87UUFDTCxHQUFHLFFBQVE7UUFDWCxPQUFPLEVBQUUsR0FBRyxFQUFFO1lBQ1osU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3hCLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNyQixDQUFDO1FBQ0QsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ3RCLEdBQUcsR0FBRyxRQUFRLEVBQUUsQ0FDYixLQUF3QyxDQUFDLElBQWlCLEVBQzNELElBQUksQ0FDRyxDQUFDO1lBQ1YsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixDQUFDO1FBQ0QsT0FBTyxFQUFFLFdBQVc7S0FDckIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIEh0dHBSZXNvdXJjZVJlcXVlc3QgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7XHJcbiAgY29tcHV0ZWQsXHJcbiAgRGVzdHJveVJlZixcclxuICBpbmplY3QsXHJcbiAgU2lnbmFsLFxyXG4gIHNpZ25hbCxcclxuICBWYWx1ZUVxdWFsaXR5Rm4sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBjb21iaW5lTGF0ZXN0V2l0aCwgZmlsdGVyLCBtYXAsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgcXVlcnlSZXNvdXJjZSxcclxuICB0eXBlIFF1ZXJ5UmVzb3VyY2VPcHRpb25zLFxyXG4gIHR5cGUgUXVlcnlSZXNvdXJjZVJlZixcclxufSBmcm9tICcuL3F1ZXJ5LXJlc291cmNlJztcclxuaW1wb3J0IHsgY3JlYXRlRXF1YWxSZXF1ZXN0IH0gZnJvbSAnLi91dGlsJztcclxuXHJcbi8qKlxyXG4gKiBAaW50ZXJuYWxcclxuICogSGVscGVyIHR5cGUgZm9yIGluZmVycmluZyB0aGUgcmVxdWVzdCBib2R5IHR5cGUgYmFzZWQgb24gdGhlIEhUVFAgbWV0aG9kLlxyXG4gKi9cclxudHlwZSBOZXh0UmVxdWVzdDxcclxuICBUTWV0aG9kIGV4dGVuZHMgSHR0cFJlc291cmNlUmVxdWVzdFsnbWV0aG9kJ10sXHJcbiAgVE11dGF0aW9uLFxyXG4+ID0gVE1ldGhvZCBleHRlbmRzICdERUxFVEUnIHwgJ2RlbGV0ZSdcclxuICA/IE9taXQ8SHR0cFJlc291cmNlUmVxdWVzdCwgJ2JvZHknIHwgJ21ldGhvZCc+ICYgeyBtZXRob2Q/OiBUTWV0aG9kIH1cclxuICA6IE9taXQ8SHR0cFJlc291cmNlUmVxdWVzdCwgJ2JvZHknIHwgJ21ldGhvZCc+ICYge1xyXG4gICAgICBib2R5OiBUTXV0YXRpb247XHJcbiAgICAgIG1ldGhvZD86IFRNZXRob2Q7XHJcbiAgICB9O1xyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKiBIZWxwZXIgdHlwZSBmb3IgdHJhY2tpbmcgbXV0YXRpb24gc3RhdHVzLlxyXG4gKi9cclxudHlwZSBTdGF0dXNSZXN1bHQ8VFJlc3VsdD4gPVxyXG4gIHwge1xyXG4gICAgICBzdGF0dXM6ICdlcnJvcic7XHJcbiAgICAgIGVycm9yOiB1bmtub3duO1xyXG4gICAgfVxyXG4gIHwge1xyXG4gICAgICBzdGF0dXM6ICdyZXNvbHZlZCc7XHJcbiAgICAgIHZhbHVlOiBUUmVzdWx0O1xyXG4gICAgfTtcclxuXHJcbi8qKlxyXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyBhIGBtdXRhdGlvblJlc291cmNlYC5cclxuICpcclxuICogQHR5cGVQYXJhbSBUUmVzdWx0IC0gVGhlIHR5cGUgb2YgdGhlIGV4cGVjdGVkIHJlc3VsdCBmcm9tIHRoZSBtdXRhdGlvbi5cclxuICogQHR5cGVQYXJhbSBUUmF3IC0gVGhlIHJhdyByZXNwb25zZSB0eXBlIGZyb20gdGhlIEhUVFAgcmVxdWVzdCAoZGVmYXVsdHMgdG8gVFJlc3VsdCkuXHJcbiAqIEB0eXBlUGFyYW0gVENUWCAtIFRoZSB0eXBlIG9mIHRoZSBjb250ZXh0IHZhbHVlIHJldHVybmVkIGJ5IGBvbk11dGF0ZWAuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBNdXRhdGlvblJlc291cmNlT3B0aW9uczxcclxuICBUUmVzdWx0LFxyXG4gIFRSYXcgPSBUUmVzdWx0LFxyXG4gIFRNdXRhdGlvbiA9IFRSZXN1bHQsXHJcbiAgVENUWCA9IHZvaWQsXHJcbiAgVElDVFggPSBUQ1RYLFxyXG4+ID0gT21pdDxcclxuICBRdWVyeVJlc291cmNlT3B0aW9uczxUUmVzdWx0LCBUUmF3PixcclxuICAnZXF1YWwnIHwgJ29uRXJyb3InIHwgJ2tlZXBQcmV2aW91cycgfCAncmVmcmVzaCcgfCAnY2FjaGUnIC8vIHdlIGNhbid0IGtlZXAgcHJldmlvdXMgdmFsdWVzLCByZWZyZXNoIG9yIGNhY2hlIG11dGF0aW9ucyBhcyB0aGV5IGFyZSBtZWFudCB0byBiZSBvbmUtb2ZmIG9wZXJhdGlvbnNcclxuPiAmIHtcclxuICAvKipcclxuICAgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGJlZm9yZSB0aGUgbXV0YXRpb24gcmVxdWVzdCBpcyBtYWRlLlxyXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgYmVpbmcgbXV0YXRlZCAodGhlIGBib2R5YCBvZiB0aGUgcmVxdWVzdCkuXHJcbiAgICogQHJldHVybnMgQW4gb3B0aW9uYWwgY29udGV4dCB2YWx1ZSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBgb25FcnJvcmAsIGBvblN1Y2Nlc3NgLCBhbmQgYG9uU2V0dGxlZGAgY2FsbGJhY2tzLiBUaGlzIGlzIHVzZWZ1bCBmb3Igc3RvcmluZ1xyXG4gICAqICBpbmZvcm1hdGlvbiBuZWVkZWQgZHVyaW5nIHRoZSBtdXRhdGlvbiBsaWZlY3ljbGUsIHN1Y2ggYXMgcHJldmlvdXMgdmFsdWVzIGZvciBvcHRpbWlzdGljIHVwZGF0ZXMgb3Igcm9sbGJhY2suXHJcbiAgICovXHJcbiAgb25NdXRhdGU/OiAodmFsdWU6IFRNdXRhdGlvbiwgaW5pdGlhbENUWD86IFRJQ1RYKSA9PiBUQ1RYO1xyXG4gIC8qKlxyXG4gICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgaWYgdGhlIG11dGF0aW9uIHJlcXVlc3QgZmFpbHMuXHJcbiAgICogQHBhcmFtIGVycm9yIFRoZSBlcnJvciB0aGF0IG9jY3VycmVkLlxyXG4gICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGBvbk11dGF0ZWAgY2FsbGJhY2sgKG9yIGB1bmRlZmluZWRgIGlmIGBvbk11dGF0ZWAgd2FzIG5vdCBwcm92aWRlZCBvciByZXR1cm5lZCBgdW5kZWZpbmVkYCkuXHJcbiAgICovXHJcbiAgb25FcnJvcj86IChlcnJvcjogdW5rbm93biwgY3R4OiBOb0luZmVyPFRDVFg+KSA9PiB2b2lkO1xyXG4gIC8qKlxyXG4gICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgaWYgdGhlIG11dGF0aW9uIHJlcXVlc3Qgc3VjY2VlZHMuXHJcbiAgICogQHBhcmFtIHZhbHVlIFRoZSByZXN1bHQgb2YgdGhlIG11dGF0aW9uICh0aGUgcGFyc2VkIHJlc3BvbnNlIGJvZHkpLlxyXG4gICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGBvbk11dGF0ZWAgY2FsbGJhY2sgKG9yIGB1bmRlZmluZWRgIGlmIGBvbk11dGF0ZWAgd2FzIG5vdCBwcm92aWRlZCBvciByZXR1cm5lZCBgdW5kZWZpbmVkYCkuXHJcbiAgICovXHJcbiAgb25TdWNjZXNzPzogKHZhbHVlOiBOb0luZmVyPFRSZXN1bHQ+LCBjdHg6IE5vSW5mZXI8VENUWD4pID0+IHZvaWQ7XHJcbiAgLyoqXHJcbiAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSBtdXRhdGlvbiByZXF1ZXN0IHNldHRsZXMgKGVpdGhlciBzdWNjZWVkcyBvciBmYWlscykuXHJcbiAgICogQHBhcmFtIGN0eCBUaGUgY29udGV4dCB2YWx1ZSByZXR1cm5lZCBieSB0aGUgYG9uTXV0YXRlYCBjYWxsYmFjayAob3IgYHVuZGVmaW5lZGAgaWYgYG9uTXV0YXRlYCB3YXMgbm90IHByb3ZpZGVkIG9yIHJldHVybmVkIGB1bmRlZmluZWRgKS5cclxuICAgKi9cclxuICBvblNldHRsZWQ/OiAoY3R4OiBOb0luZmVyPFRDVFg+KSA9PiB2b2lkO1xyXG4gIGVxdWFsPzogVmFsdWVFcXVhbGl0eUZuPFRNdXRhdGlvbj47XHJcbn07XHJcblxyXG4vKipcclxuICogUmVwcmVzZW50cyBhIG11dGF0aW9uIHJlc291cmNlIGNyZWF0ZWQgYnkgYG11dGF0aW9uUmVzb3VyY2VgLiAgRXh0ZW5kcyBgUXVlcnlSZXNvdXJjZVJlZmBcclxuICogYnV0IHJlbW92ZXMgbWV0aG9kcyB0aGF0IGRvbid0IG1ha2Ugc2Vuc2UgZm9yIG11dGF0aW9ucyAobGlrZSBgcHJlZmV0Y2hgLCBgdmFsdWVgLCBldGMuKS5cclxuICpcclxuICogQHR5cGVQYXJhbSBUUmVzdWx0IC0gVGhlIHR5cGUgb2YgdGhlIGV4cGVjdGVkIHJlc3VsdCBmcm9tIHRoZSBtdXRhdGlvbi5cclxuICovXHJcbmV4cG9ydCB0eXBlIE11dGF0aW9uUmVzb3VyY2VSZWY8XHJcbiAgVFJlc3VsdCxcclxuICBUTXV0YXRpb24gPSBUUmVzdWx0LFxyXG4gIFRJQ1RYID0gdm9pZCxcclxuICBUTWV0aG9kIGV4dGVuZHMgSHR0cFJlc291cmNlUmVxdWVzdFsnbWV0aG9kJ10gPSBIdHRwUmVzb3VyY2VSZXF1ZXN0WydtZXRob2QnXSxcclxuPiA9IE9taXQ8XHJcbiAgUXVlcnlSZXNvdXJjZVJlZjxUUmVzdWx0PixcclxuICAncHJlZmV0Y2gnIHwgJ3ZhbHVlJyB8ICdoYXNWYWx1ZScgfCAnc2V0JyB8ICd1cGRhdGUnIC8vIHdlIGRvbid0IGFsbG93IG1hbnVhbGx5IHZpZXdpbmcgdGhlIHJldHVybmVkIGRhdGEgb3IgdXBkYXRpbmcgaXQgbWFudWFsbHksIHByZWZldGNoaW5nIGEgbXV0YXRpb24gYWxzbyBkb2Vzbid0IG1ha2UgYW55IHNlbnNlXHJcbj4gJiB7XHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZXMgdGhlIG11dGF0aW9uLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHZhbHVlIFRoZSByZXF1ZXN0IGJvZHkgYW5kIGFueSBvdGhlciByZXF1ZXN0IHBhcmFtZXRlcnMgdG8gdXNlIGZvciB0aGUgbXV0YXRpb24uICBUaGUgYGJvZHlgIHByb3BlcnR5IGlzICpyZXF1aXJlZCouXHJcbiAgICovXHJcbiAgbXV0YXRlOiAoXHJcbiAgICB2YWx1ZTogT21pdDxOZXh0UmVxdWVzdDxUTWV0aG9kLCBUTXV0YXRpb24+LCAndXJsJz4gJiB7IHVybD86IHN0cmluZyB9LFxyXG4gICAgY3R4PzogVElDVFgsXHJcbiAgKSA9PiB2b2lkO1xyXG4gIC8qKlxyXG4gICAqIEEgc2lnbmFsIHRoYXQgaG9sZHMgdGhlIGN1cnJlbnQgbXV0YXRpb24gcmVxdWVzdCwgb3IgYG51bGxgIGlmIG5vIG11dGF0aW9uIGlzIGluIHByb2dyZXNzLlxyXG4gICAqIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgdHJhY2tpbmcgdGhlIHN0YXRlIG9mIHRoZSBtdXRhdGlvbiBvciBmb3IgZGlzcGxheWluZyBsb2FkaW5nIGluZGljYXRvcnMuXHJcbiAgICovXHJcbiAgY3VycmVudDogU2lnbmFsPFxyXG4gICAgKE9taXQ8TmV4dFJlcXVlc3Q8VE1ldGhvZCwgVE11dGF0aW9uPiwgJ3VybCc+ICYgeyB1cmw/OiBzdHJpbmcgfSkgfCBudWxsXHJcbiAgPjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgcmVzb3VyY2UgZm9yIHBlcmZvcm1pbmcgbXV0YXRpb25zIChlLmcuLCBQT1NULCBQVVQsIFBBVENILCBERUxFVEUgcmVxdWVzdHMpLlxyXG4gKiBVbmxpa2UgYHF1ZXJ5UmVzb3VyY2VgLCBgbXV0YXRpb25SZXNvdXJjZWAgaXMgZGVzaWduZWQgZm9yIG9uZS1vZmYgb3BlcmF0aW9ucyB0aGF0IGNoYW5nZSBkYXRhLlxyXG4gKiBJdCBkb2VzICpub3QqIGNhY2hlIHJlc3BvbnNlcyBhbmQgZG9lcyBub3QgcHJvdmlkZSBhIGB2YWx1ZWAgc2lnbmFsLiAgSW5zdGVhZCwgaXQgZm9jdXNlcyBvblxyXG4gKiBtYW5hZ2luZyB0aGUgbXV0YXRpb24gbGlmZWN5Y2xlIChwZW5kaW5nLCBlcnJvciwgc3VjY2VzcykgYW5kIHByb3ZpZGVzIGNhbGxiYWNrcyBmb3IgaGFuZGxpbmdcclxuICogdGhlc2Ugc3RhdGVzLlxyXG4gKlxyXG4gKiBAcGFyYW0gcmVxdWVzdCBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgYmFzZSBgSHR0cFJlc291cmNlUmVxdWVzdGAgdG8gYmUgbWFkZS4gIFRoaXNcclxuICogICAgICAgICAgICAgICBmdW5jdGlvbiBpcyBjYWxsZWQgcmVhY3RpdmVseS4gIFVubGlrZSBgcXVlcnlSZXNvdXJjZWAsIHRoZSBgYm9keWAgcHJvcGVydHlcclxuICogICAgICAgICAgICAgICBvZiB0aGUgcmVxdWVzdCBpcyBwcm92aWRlZCB3aGVuIGBtdXRhdGVgIGlzIGNhbGxlZCwgKm5vdCogaGVyZS4gIElmIHRoZVxyXG4gKiAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJldHVybnMgYHVuZGVmaW5lZGAsIHRoZSBtdXRhdGlvbiBpcyBjb25zaWRlcmVkIFwiZGlzYWJsZWQuXCIgQWxsIHByb3BlcnRpZXMsXHJcbiAqICAgICAgICAgICAgICAgZXhjZXB0IHRoZSBib2R5LCBjYW4gYmUgc2V0IGhlcmUuXHJcbiAqIEBwYXJhbSBvcHRpb25zIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIG11dGF0aW9uIHJlc291cmNlLiAgVGhpcyBpbmNsdWRlcyBjYWxsYmFja3NcclxuICogICAgICAgICAgICAgICBmb3IgYG9uTXV0YXRlYCwgYG9uRXJyb3JgLCBgb25TdWNjZXNzYCwgYW5kIGBvblNldHRsZWRgLlxyXG4gKiBAdHlwZVBhcmFtIFRSZXN1bHQgLSBUaGUgdHlwZSBvZiB0aGUgZXhwZWN0ZWQgcmVzdWx0IGZyb20gdGhlIG11dGF0aW9uLlxyXG4gKiBAdHlwZVBhcmFtIFRSYXcgLSBUaGUgcmF3IHJlc3BvbnNlIHR5cGUgZnJvbSB0aGUgSFRUUCByZXF1ZXN0IChkZWZhdWx0cyB0byBUUmVzdWx0KS5cclxuICogQHR5cGVQYXJhbSBUQ1RYIC0gVGhlIHR5cGUgb2YgdGhlIGNvbnRleHQgdmFsdWUgcmV0dXJuZWQgYnkgYG9uTXV0YXRlYC5cclxuICogQHJldHVybnMgQSBgTXV0YXRpb25SZXNvdXJjZVJlZmAgaW5zdGFuY2UsIHdoaWNoIHByb3ZpZGVzIG1ldGhvZHMgZm9yIHRyaWdnZXJpbmcgdGhlIG11dGF0aW9uXHJcbiAqICAgICAgICAgIGFuZCBvYnNlcnZpbmcgaXRzIHN0YXR1cy5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBtdXRhdGlvblJlc291cmNlPFxyXG4gIFRSZXN1bHQsXHJcbiAgVFJhdyA9IFRSZXN1bHQsXHJcbiAgVE11dGF0aW9uID0gVFJlc3VsdCxcclxuICBUQ1RYID0gdm9pZCxcclxuICBUSUNUWCA9IFRDVFgsXHJcbiAgVE1ldGhvZCBleHRlbmRzIEh0dHBSZXNvdXJjZVJlcXVlc3RbJ21ldGhvZCddID0gSHR0cFJlc291cmNlUmVxdWVzdFsnbWV0aG9kJ10sXHJcbj4oXHJcbiAgcmVxdWVzdDogKCkgPT5cclxuICAgIHwgT21pdDxOZXh0UmVxdWVzdDxUTWV0aG9kLCBUTXV0YXRpb24+LCAnYm9keSc+XHJcbiAgICB8IHVuZGVmaW5lZFxyXG4gICAgfCB2b2lkLFxyXG4gIG9wdGlvbnM6IE11dGF0aW9uUmVzb3VyY2VPcHRpb25zPFRSZXN1bHQsIFRSYXcsIFRNdXRhdGlvbiwgVENUWCwgVElDVFg+ID0ge30sXHJcbik6IE11dGF0aW9uUmVzb3VyY2VSZWY8VFJlc3VsdCwgVE11dGF0aW9uLCBUSUNUWCwgVE1ldGhvZD4ge1xyXG4gIGNvbnN0IHsgb25NdXRhdGUsIG9uRXJyb3IsIG9uU3VjY2Vzcywgb25TZXR0bGVkLCBlcXVhbCwgLi4ucmVzdCB9ID0gb3B0aW9ucztcclxuXHJcbiAgY29uc3QgcmVxdWVzdEVxdWFsID0gY3JlYXRlRXF1YWxSZXF1ZXN0KGVxdWFsKTtcclxuXHJcbiAgY29uc3QgYmFzZVJlcXVlc3QgPSBjb21wdXRlZCgoKSA9PiByZXF1ZXN0KCkgPz8gdW5kZWZpbmVkLCB7XHJcbiAgICBlcXVhbDogcmVxdWVzdEVxdWFsLFxyXG4gIH0pO1xyXG5cclxuICBjb25zdCBuZXh0UmVxdWVzdCA9IHNpZ25hbDxcclxuICAgIChPbWl0PE5leHRSZXF1ZXN0PFRNZXRob2QsIFRNdXRhdGlvbj4sICd1cmwnPiAmIHsgdXJsPzogc3RyaW5nIH0pIHwgbnVsbFxyXG4gID4obnVsbCwge1xyXG4gICAgZXF1YWw6IChhLCBiKSA9PiB7XHJcbiAgICAgIGlmICghYSAmJiAhYikgcmV0dXJuIHRydWU7XHJcbiAgICAgIGlmICghYSB8fCAhYikgcmV0dXJuIGZhbHNlO1xyXG4gICAgICByZXR1cm4gcmVxdWVzdEVxdWFsKGEsIGIpO1xyXG4gICAgfSxcclxuICB9KTtcclxuXHJcbiAgY29uc3QgcmVxID0gY29tcHV0ZWQoKCk6IEh0dHBSZXNvdXJjZVJlcXVlc3QgfCB1bmRlZmluZWQgPT4ge1xyXG4gICAgY29uc3QgbnIgPSBuZXh0UmVxdWVzdCgpO1xyXG4gICAgaWYgKCFucikgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGJhc2UgPSBiYXNlUmVxdWVzdCgpO1xyXG5cclxuICAgIGNvbnN0IHVybCA9IG5yLnVybCA/PyBiYXNlPy51cmw7XHJcbiAgICBpZiAoIXVybCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IG1ldGhvZCA9IG5yLm1ldGhvZCA/PyBiYXNlPy5tZXRob2Q7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLi4uYmFzZSxcclxuICAgICAgLi4ubnIsXHJcbiAgICAgIHVybCxcclxuICAgICAgbWV0aG9kLFxyXG4gICAgfTtcclxuICB9KTtcclxuXHJcbiAgY29uc3QgcmVzb3VyY2UgPSBxdWVyeVJlc291cmNlPFRSZXN1bHQsIFRSYXc+KHJlcSwge1xyXG4gICAgLi4ucmVzdCxcclxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbCBhcyB1bmtub3duIGFzIFRSZXN1bHQsIC8vIGRvZXNudCBtYXR0ZXIgc2luY2UgLnZhbHVlIGlzIG5vdCBhY2Nlc3NpYmxlXHJcbiAgfSk7XHJcblxyXG4gIGxldCBjdHg6IFRDVFggPSB1bmRlZmluZWQgYXMgVENUWDtcclxuXHJcbiAgY29uc3QgZGVzdHJveVJlZiA9IG9wdGlvbnMuaW5qZWN0b3JcclxuICAgID8gb3B0aW9ucy5pbmplY3Rvci5nZXQoRGVzdHJveVJlZilcclxuICAgIDogaW5qZWN0KERlc3Ryb3lSZWYpO1xyXG5cclxuICBjb25zdCBlcnJvciQgPSB0b09ic2VydmFibGUocmVzb3VyY2UuZXJyb3IpO1xyXG4gIGNvbnN0IHZhbHVlJCA9IHRvT2JzZXJ2YWJsZShyZXNvdXJjZS52YWx1ZSkucGlwZShjYXRjaEVycm9yKCgpID0+IG9mKG51bGwpKSk7XHJcblxyXG4gIGNvbnN0IHN0YXR1c1N1YiA9IHRvT2JzZXJ2YWJsZShyZXNvdXJjZS5zdGF0dXMpXHJcbiAgICAucGlwZShcclxuICAgICAgY29tYmluZUxhdGVzdFdpdGgoZXJyb3IkLCB2YWx1ZSQpLFxyXG4gICAgICBtYXAoKFtzdGF0dXMsIGVycm9yLCB2YWx1ZV0pOiBTdGF0dXNSZXN1bHQ8VFJlc3VsdD4gfCBudWxsID0+IHtcclxuICAgICAgICBpZiAoc3RhdHVzID09PSAnZXJyb3InICYmIGVycm9yKSB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBzdGF0dXM6ICdlcnJvcicsXHJcbiAgICAgICAgICAgIGVycm9yLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzdGF0dXMgPT09ICdyZXNvbHZlZCcgJiYgdmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHN0YXR1czogJ3Jlc29sdmVkJyxcclxuICAgICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH0pLFxyXG4gICAgICBmaWx0ZXIoKHYpID0+IHYgIT09IG51bGwpLFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoZGVzdHJveVJlZiksXHJcbiAgICApXHJcbiAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdlcnJvcicpIG9uRXJyb3I/LihyZXN1bHQuZXJyb3IsIGN0eCk7XHJcbiAgICAgIGVsc2Ugb25TdWNjZXNzPy4ocmVzdWx0LnZhbHVlLCBjdHgpO1xyXG5cclxuICAgICAgb25TZXR0bGVkPy4oY3R4KTtcclxuICAgICAgY3R4ID0gdW5kZWZpbmVkIGFzIFRDVFg7XHJcbiAgICAgIG5leHRSZXF1ZXN0LnNldChudWxsKTtcclxuICAgIH0pO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgLi4ucmVzb3VyY2UsXHJcbiAgICBkZXN0cm95OiAoKSA9PiB7XHJcbiAgICAgIHN0YXR1c1N1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgICByZXNvdXJjZS5kZXN0cm95KCk7XHJcbiAgICB9LFxyXG4gICAgbXV0YXRlOiAodmFsdWUsIGljdHgpID0+IHtcclxuICAgICAgY3R4ID0gb25NdXRhdGU/LihcclxuICAgICAgICAodmFsdWUgYXMgdW5rbm93biBhcyBIdHRwUmVzb3VyY2VSZXF1ZXN0KS5ib2R5IGFzIFRNdXRhdGlvbixcclxuICAgICAgICBpY3R4LFxyXG4gICAgICApIGFzIFRDVFg7XHJcbiAgICAgIG5leHRSZXF1ZXN0LnNldCh2YWx1ZSk7XHJcbiAgICB9LFxyXG4gICAgY3VycmVudDogbmV4dFJlcXVlc3QsXHJcbiAgfTtcclxufVxyXG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW1zdGFjay1yZXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3Jlc291cmNlL3NyYy9tbXN0YWNrLXJlc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -387,6 +387,11 @@ type QueryResourceOptions<TResult, TRaw = TResult> = HttpResourceOptions<TResult
|
|
|
387
387
|
* Options for enabling and configuring caching for the resource.
|
|
388
388
|
*/
|
|
389
389
|
cache?: ResourceCacheOptions;
|
|
390
|
+
/**
|
|
391
|
+
* Trigger a request every time the request function is triggered, even if the request parameters are the same.
|
|
392
|
+
* @default false
|
|
393
|
+
*/
|
|
394
|
+
triggerOnSameRequest?: boolean;
|
|
390
395
|
};
|
|
391
396
|
/**
|
|
392
397
|
* Represents a resource created by `queryResource`. Extends `HttpResourceRef` with additional properties.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mmstack/resource",
|
|
3
|
-
"version": "20.0.
|
|
3
|
+
"version": "20.0.2",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"angular",
|
|
6
6
|
"signals",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"homepage": "https://github.com/mihajm/mmstack/blob/master/packages/resource",
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"uuid": "~11.1.0",
|
|
21
|
-
"@mmstack/primitives": "^20.0.
|
|
21
|
+
"@mmstack/primitives": "^20.0.1",
|
|
22
22
|
"@mmstack/object": "^20.0.0",
|
|
23
23
|
"tslib": "^2.3.0"
|
|
24
24
|
},
|