@mmstack/resource 20.2.7 → 20.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -0
- package/fesm2022/mmstack-resource.mjs +295 -32
- package/fesm2022/mmstack-resource.mjs.map +1 -1
- package/index.d.ts +49 -3
- package/package.json +2 -2
|
@@ -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/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/to-resource-object.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(), ...(ngDevMode ? [{ debugName: \"keySignal\" }] : []));\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 * Retrieves a cache entry or an object with the key if not found.\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 an object with the key if not found. The signal\n * updates whenever the cache entry changes (e.g., due to revalidation or expiration).\n */\n getEntryOrKey(key) {\n const valueSig = this.getInternal(key);\n return computed(() => valueSig() ?? 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 key,\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yZXNvdXJjZS9zcmMvbGliL3V0aWwvY2FjaGUvY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04sY0FBYyxFQUVkLFNBQVMsRUFHVCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUF5RDFCLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQyxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUVoQyxNQUFNLG1CQUFtQixHQUFHO0lBQzFCLElBQUksRUFBRSxLQUFLO0lBQ1gsT0FBTyxFQUFFLEdBQUc7SUFDWixhQUFhLEVBQUUsUUFBUTtDQUNDLENBQUM7QUFFM0I7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxLQUFLO0lBY0s7SUFDQTtJQWRKLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLEVBQXlCLENBQUMsQ0FBQztJQUNyRCxVQUFVLENBQWM7SUFFekM7Ozs7Ozs7O09BUUc7SUFDSCxZQUNxQixNQUFjLE9BQU8sRUFDckIsWUFBb0IsUUFBUSxFQUMvQyxhQUFtQztRQUNqQyxJQUFJLEVBQUUsS0FBSztRQUNYLE9BQU8sRUFBRSxJQUFJO1FBQ2IsYUFBYSxFQUFFLFFBQVE7S0FDeEI7UUFOa0IsUUFBRyxHQUFILEdBQUcsQ0FBa0I7UUFDckIsY0FBUyxHQUFULFNBQVMsQ0FBbUI7UUFPL0MsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNoQixHQUFHLG1CQUFtQjtZQUN0QixHQUFHLFVBQVU7U0FDZCxDQUFDO1FBQ0YsSUFB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Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsR0FBa0I7SUFDbEQsT0FBTztRQUNMLE9BQU8sRUFBRSxrQkFBa0I7UUFDM0IsUUFBUSxFQUFFLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDO0tBQzVELENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxTQUFhLFNBQVEsS0FBUTtJQUN4QixLQUFLLENBQUMsQ0FBUyxFQUFFLEVBQUssRUFBRSxHQUFHLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUc7UUFDdEUsT0FBTztJQUNULENBQUM7Q0FDRjtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLFFBQW1CO0lBRW5CLE1BQU0sS0FBSyxHQUFHLFFBQVE7UUFDcEIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxFQUFFO1lBQ3JDLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQztRQUNKLENBQUMsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUU7WUFDekIsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDLENBQUM7SUFFUCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxJQUFJLFNBQVMsRUFBRTtZQUNiLE1BQU0sSUFBSSxLQUFLLENBQ2IsdUVBQXVFLENBQ3hFLENBQUM7O1lBQ0MsT0FBTyxJQUFJLFNBQVMsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxPQUFPLEtBQWtDLENBQUM7QUFDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge1xyXG4gIGNvbXB1dGVkLFxyXG4gIGluamVjdCxcclxuICBJbmplY3Rpb25Ub2tlbixcclxuICBJbmplY3RvcixcclxuICBpc0Rldk1vZGUsXHJcbiAgdHlwZSBQcm92aWRlcixcclxuICB0eXBlIFNpZ25hbCxcclxuICB1bnRyYWNrZWQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IG11dGFibGUgfSBmcm9tICdAbW1zdGFjay9wcmltaXRpdmVzJztcclxuaW1wb3J0IHsgdjcgfSBmcm9tICd1dWlkJztcclxuXHJcbi8qKlxyXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyB0aGUgTGVhc3QgUmVjZW50bHkgVXNlZCAoTFJVKSBjYWNoZSBjbGVhbnVwIHN0cmF0ZWd5LlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbnR5cGUgTFJVQ2xlYW51cFR5cGUgPSB7XHJcbiAgdHlwZTogJ2xydSc7XHJcbiAgLyoqXHJcbiAgICogSG93IG9mdGVuIHRvIGNoZWNrIGZvciBleHBpcmVkIG9yIGV4Y2VzcyBlbnRyaWVzLCBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICovXHJcbiAgY2hlY2tJbnRlcnZhbDogbnVtYmVyO1xyXG4gIC8qKlxyXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIHRvIGtlZXAgaW4gdGhlIGNhY2hlLiAgV2hlbiB0aGUgY2FjaGUgZXhjZWVkcyB0aGlzIHNpemUsXHJcbiAgICogdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQgZW50cmllcyB3aWxsIGJlIHJlbW92ZWQuXHJcbiAgICovXHJcbiAgbWF4U2l6ZTogbnVtYmVyO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIHRoZSBcIm9sZGVzdCBmaXJzdFwiIGNhY2hlIGNsZWFudXAgc3RyYXRlZ3kuXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxudHlwZSBPbGRzZXRDbGVhbnVwVHlwZSA9IHtcclxuICB0eXBlOiAnb2xkZXN0JztcclxuICAvKipcclxuICAgKiBIb3cgb2Z0ZW4gdG8gY2hlY2sgZm9yIGV4cGlyZWQgb3IgZXhjZXNzIGVudHJpZXMsIGluIG1pbGxpc2Vjb25kcy5cclxuICAgKi9cclxuICBjaGVja0ludGVydmFsOiBudW1iZXI7XHJcbiAgLyoqXHJcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgdG8ga2VlcCBpbiB0aGUgY2FjaGUuICBXaGVuIHRoZSBjYWNoZSBleGNlZWRzIHRoaXMgc2l6ZSxcclxuICAgKiB0aGUgb2xkZXN0IGVudHJpZXMgd2lsbCBiZSByZW1vdmVkLlxyXG4gICAqL1xyXG4gIG1heFNpemU6IG51bWJlcjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXByZXNlbnRzIGFuIGVudHJ5IGluIHRoZSBjYWNoZS5cclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBDYWNoZUVudHJ5PFQ+ID0ge1xyXG4gIHZhbHVlOiBUO1xyXG4gIGNyZWF0ZWQ6IG51bWJlcjtcclxuICBzdGFsZTogbnVtYmVyO1xyXG4gIHVzZUNvdW50OiBudW1iZXI7XHJcbiAgZXhwaXJlc0F0OiBudW1iZXI7XHJcbiAgdGltZW91dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XHJcbiAga2V5OiBzdHJpbmc7XHJcbn07XHJcblxyXG4vKipcclxuICogRGVmaW5lcyB0aGUgdHlwZXMgb2YgY2xlYW51cCBzdHJhdGVnaWVzIGF2YWlsYWJsZSBmb3IgdGhlIGNhY2hlLlxyXG4gKiAtIGBscnVgOiBMZWFzdCBSZWNlbnRseSBVc2VkLiAgUmVtb3ZlcyB0aGUgbGVhc3QgcmVjZW50bHkgYWNjZXNzZWQgZW50cmllcyB3aGVuIHRoZSBjYWNoZSBpcyBmdWxsLlxyXG4gKiAtIGBvbGRlc3RgOiBSZW1vdmVzIHRoZSBvbGRlc3QgZW50cmllcyB3aGVuIHRoZSBjYWNoZSBpcyBmdWxsLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgQ2xlYW51cFR5cGUgPSBMUlVDbGVhbnVwVHlwZSB8IE9sZHNldENsZWFudXBUeXBlO1xyXG5cclxuY29uc3QgT05FX0RBWSA9IDEwMDAgKiA2MCAqIDYwICogMjQ7XHJcbmNvbnN0IE9ORV9IT1VSID0gMTAwMCAqIDYwICogNjA7XHJcblxyXG5jb25zdCBERUZBVUxUX0NMRUFOVVBfT1BUID0ge1xyXG4gIHR5cGU6ICdscnUnLFxyXG4gIG1heFNpemU6IDIwMCxcclxuICBjaGVja0ludGVydmFsOiBPTkVfSE9VUixcclxufSBzYXRpc2ZpZXMgTFJVQ2xlYW51cFR5cGU7XHJcblxyXG4vKipcclxuICogQSBnZW5lcmljIGNhY2hlIGltcGxlbWVudGF0aW9uIHRoYXQgc3RvcmVzIGRhdGEgd2l0aCB0aW1lLXRvLWxpdmUgKFRUTCkgYW5kIHN0YWxlLXdoaWxlLXJldmFsaWRhdGUgY2FwYWJpbGl0aWVzLlxyXG4gKlxyXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBkYXRhIHRvIGJlIHN0b3JlZCBpbiB0aGUgY2FjaGUuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQ2FjaGU8VD4ge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgaW50ZXJuYWwgPSBtdXRhYmxlKG5ldyBNYXA8c3RyaW5nLCBDYWNoZUVudHJ5PFQ+PigpKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGNsZWFudXBPcHQ6IENsZWFudXBUeXBlO1xyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGEgbmV3IGBDYWNoZWAgaW5zdGFuY2UuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gdHRsIC0gVGhlIGRlZmF1bHQgVGltZSBUbyBMaXZlIChUVEwpIGZvciBjYWNoZSBlbnRyaWVzLCBpbiBtaWxsaXNlY29uZHMuICBEZWZhdWx0cyB0byBvbmUgZGF5LlxyXG4gICAqIEBwYXJhbSBzdGFsZVRpbWUgLSBUaGUgZGVmYXVsdCBkdXJhdGlvbiwgaW4gbWlsbGlzZWNvbmRzLCBkdXJpbmcgd2hpY2ggYSBjYWNoZSBlbnRyeSBpcyBjb25zaWRlcmVkXHJcbiAgICogICAgICAgICAgICAgICAgICAgIHN0YWxlIGJ1dCBjYW4gc3RpbGwgYmUgdXNlZCB3aGlsZSByZXZhbGlkYXRpb24gb2NjdXJzIGluIHRoZSBiYWNrZ3JvdW5kLiBEZWZhdWx0cyB0byAxIGhvdXIuXHJcbiAgICogQHBhcmFtIGNsZWFudXBPcHQgLSBPcHRpb25zIGZvciBjb25maWd1cmluZyB0aGUgY2FjaGUgY2xlYW51cCBzdHJhdGVneS4gIERlZmF1bHRzIHRvIExSVSB3aXRoIGFcclxuICAgKiAgICAgICAgICAgICAgICAgICAgIGBtYXhTaXplYCBvZiAyMDAgYW5kIGEgYGNoZWNrSW50ZXJ2YWxgIG9mIG9uZSBob3VyLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHR0bDogbnVtYmVyID0gT05FX0RBWSxcclxuICAgIHByb3RlY3RlZCByZWFkb25seSBzdGFsZVRpbWU6IG51bWJlciA9IE9ORV9IT1VSLFxyXG4gICAgY2xlYW51cE9wdDogUGFydGlhbDxDbGVhbnVwVHlwZT4gPSB7XHJcbiAgICAgIHR5cGU6ICdscnUnLFxyXG4gICAgICBtYXhTaXplOiAxMDAwLFxyXG4gICAgICBjaGVja0ludGVydmFsOiBPTkVfSE9VUixcclxuICAgIH0sXHJcbiAgKSB7XHJcbiAgICB0aGlzLmNsZWFudXBPcHQgPSB7XHJcbiAgICAgIC4uLkRFRkFVTFRfQ0xFQU5VUF9PUFQsXHJcbiAgICAgIC4uLmNsZWFudXBPcHQsXHJcbiAgICB9O1xyXG4gICAgaWYgKHRoaXMuY2xlYW51cE9wdC5tYXhTaXplIDw9IDApXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWF4U2l6ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwJyk7XHJcblxyXG4gICAgLy8gY2xlYW51cCBjYWNoZSBiYXNlZCBvbiBwcm92aWRlZCBvcHRpb25zIHJlZ3VsYXJseVxyXG4gICAgY29uc3QgY2xlYW51cEludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICB0aGlzLmNsZWFudXAoKTtcclxuICAgIH0sIGNsZWFudXBPcHQuY2hlY2tJbnRlcnZhbCk7XHJcblxyXG4gICAgY29uc3QgZGVzdHJveUlkID0gdjcoKTtcclxuXHJcbiAgICAvLyBjbGVhbnVwIGlmIG9iamVjdCBpcyBnYXJiYWdlIGNvbGxlY3RlZCwgdGhpcyBpcyBiZWNhdXNlIHRoZSBjYWNoZSBjYW4gYmUgcXVpdGUgbGFyZ2UgZnJvbSBhIG1lbW9yeSBzdGFuZHBvaW50ICYgd2UgZG9udCB3YW50IGFsbCB0aGF0IGZsb2F0aW5nIGdhcmJhZ2VcclxuICAgIGNvbnN0IHJlZ2lzdHJ5ID0gbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KChpZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmIChpZCA9PT0gZGVzdHJveUlkKSB7XHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbChjbGVhbnVwSW50ZXJ2YWwpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZWdpc3RyeS5yZWdpc3Rlcih0aGlzLCBkZXN0cm95SWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gIHByaXZhdGUgZ2V0SW50ZXJuYWwoXHJcbiAgICBrZXk6ICgpID0+IHN0cmluZyB8IG51bGwsXHJcbiAgKTogU2lnbmFsPChDYWNoZUVudHJ5PFQ+ICYgeyBpc1N0YWxlOiBib29sZWFuIH0pIHwgbnVsbD4ge1xyXG4gICAgY29uc3Qga2V5U2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ga2V5KCkpO1xyXG5cclxuICAgIHJldHVybiBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGtleSA9IGtleVNpZ25hbCgpO1xyXG4gICAgICBpZiAoIWtleSkgcmV0dXJuIG51bGw7XHJcbiAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5pbnRlcm5hbCgpLmdldChrZXkpO1xyXG5cclxuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcclxuXHJcbiAgICAgIGlmICghZm91bmQgfHwgZm91bmQuZXhwaXJlc0F0IDw9IG5vdykgcmV0dXJuIG51bGw7XHJcbiAgICAgIGZvdW5kLnVzZUNvdW50Kys7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uZm91bmQsXHJcbiAgICAgICAgaXNTdGFsZTogZm91bmQuc3RhbGUgPD0gbm93LFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYSBjYWNoZSBlbnRyeSB3aXRob3V0IGFmZmVjdGluZyBpdHMgdXNhZ2UgY291bnQgKGZvciBMUlUpLiAgVGhpcyBpcyBwcmltYXJpbHlcclxuICAgKiBmb3IgaW50ZXJuYWwgdXNlIG9yIGRlYnVnZ2luZy5cclxuICAgKiBAaW50ZXJuYWxcclxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gcmV0cmlldmUuXHJcbiAgICogQHJldHVybnMgVGhlIGNhY2hlIGVudHJ5LCBvciBgbnVsbGAgaWYgbm90IGZvdW5kIG9yIGV4cGlyZWQuXHJcbiAgICovXHJcbiAgZ2V0VW50cmFja2VkKGtleTogc3RyaW5nKTogKENhY2hlRW50cnk8VD4gJiB7IGlzU3RhbGU6IGJvb2xlYW4gfSkgfCBudWxsIHtcclxuICAgIHJldHVybiB1bnRyYWNrZWQodGhpcy5nZXRJbnRlcm5hbCgoKSA9PiBrZXkpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyBhIGNhY2hlIGVudHJ5IGFzIGEgc2lnbmFsLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGtleSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjYWNoZSBrZXkuIFRoZSBrZXkgaXMgYSBzaWduYWwsIGFsbG93aW5nIGZvciBkeW5hbWljIGtleXMuIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIG51bGwgdGhlIHZhbHVlIGlzIGFsc28gbnVsbC5cclxuICAgKiBAcmV0dXJucyBBIHNpZ25hbCB0aGF0IGhvbGRzIHRoZSBjYWNoZSBlbnRyeSwgb3IgYG51bGxgIGlmIG5vdCBmb3VuZCBvciBleHBpcmVkLiAgVGhlIHNpZ25hbFxyXG4gICAqICAgICAgICAgIHVwZGF0ZXMgd2hlbmV2ZXIgdGhlIGNhY2hlIGVudHJ5IGNoYW5nZXMgKGUuZy4sIGR1ZSB0byByZXZhbGlkYXRpb24gb3IgZXhwaXJhdGlvbikuXHJcbiAgICovXHJcbiAgZ2V0KFxyXG4gICAga2V5OiAoKSA9PiBzdHJpbmcgfCBudWxsLFxyXG4gICk6IFNpZ25hbDwoQ2FjaGVFbnRyeTxUPiAmIHsgaXNTdGFsZTogYm9vbGVhbiB9KSB8IG51bGw+IHtcclxuICAgIHJldHVybiB0aGlzLmdldEludGVybmFsKGtleSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYSBjYWNoZSBlbnRyeSBvciBhbiBvYmplY3Qgd2l0aCB0aGUga2V5IGlmIG5vdCBmb3VuZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBrZXkgLSBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgY2FjaGUga2V5LiBUaGUga2V5IGlzIGEgc2lnbmFsLCBhbGxvd2luZyBmb3IgZHluYW1pYyBrZXlzLiBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBudWxsIHRoZSB2YWx1ZSBpcyBhbHNvIG51bGwuXHJcbiAgICogQHJldHVybnMgIEEgc2lnbmFsIHRoYXQgaG9sZHMgdGhlIGNhY2hlIGVudHJ5IG9yIGFuIG9iamVjdCB3aXRoIHRoZSBrZXkgaWYgbm90IGZvdW5kLiBUaGUgc2lnbmFsXHJcbiAgICogICAgICAgICAgdXBkYXRlcyB3aGVuZXZlciB0aGUgY2FjaGUgZW50cnkgY2hhbmdlcyAoZS5nLiwgZHVlIHRvIHJldmFsaWRhdGlvbiBvciBleHBpcmF0aW9uKS5cclxuICAgKi9cclxuICBnZXRFbnRyeU9yS2V5KFxyXG4gICAga2V5OiAoKSA9PiBzdHJpbmcgfCBudWxsLFxyXG4gICk6IFNpZ25hbDwoQ2FjaGVFbnRyeTxUPiAmIHsgaXNTdGFsZTogYm9vbGVhbiB9KSB8IHN0cmluZyB8IG51bGw+IHtcclxuICAgIGNvbnN0IHZhbHVlU2lnID0gdGhpcy5nZXRJbnRlcm5hbChrZXkpO1xyXG4gICAgcmV0dXJuIGNvbXB1dGVkKCgpID0+IHZhbHVlU2lnKCkgPz8ga2V5KCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcmVzIGEgdmFsdWUgaW4gdGhlIGNhY2hlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkgdW5kZXIgd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLlxyXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBzdG9yZS5cclxuICAgKiBAcGFyYW0gc3RhbGVUaW1lIC0gKE9wdGlvbmFsKSBUaGUgc3RhbGUgdGltZSBmb3IgdGhpcyBlbnRyeSwgaW4gbWlsbGlzZWNvbmRzLiBPdmVycmlkZXMgdGhlIGRlZmF1bHQgYHN0YWxlVGltZWAuXHJcbiAgICogQHBhcmFtIHR0bCAtIChPcHRpb25hbCkgVGhlIFRUTCBmb3IgdGhpcyBlbnRyeSwgaW4gbWlsbGlzZWNvbmRzLiBPdmVycmlkZXMgdGhlIGRlZmF1bHQgYHR0bGAuXHJcbiAgICovXHJcbiAgc3RvcmUoa2V5OiBzdHJpbmcsIHZhbHVlOiBULCBzdGFsZVRpbWUgPSB0aGlzLnN0YWxlVGltZSwgdHRsID0gdGhpcy50dGwpIHtcclxuICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5nZXRVbnRyYWNrZWQoa2V5KTtcclxuICAgIGlmIChlbnRyeSkge1xyXG4gICAgICBjbGVhclRpbWVvdXQoZW50cnkudGltZW91dCk7IC8vIHN0b3AgaW52YWxpZGF0aW9uXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcHJldkNvdW50ID0gZW50cnk/LnVzZUNvdW50ID8/IDA7XHJcblxyXG4gICAgLy8gdHRsIGNhbm5vdCBiZSBsZXNzIHRoYW4gc3RhbGVUaW1lXHJcbiAgICBpZiAodHRsIDwgc3RhbGVUaW1lKSBzdGFsZVRpbWUgPSB0dGw7XHJcblxyXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcclxuXHJcbiAgICB0aGlzLmludGVybmFsLm11dGF0ZSgobWFwKSA9PiB7XHJcbiAgICAgIG1hcC5zZXQoa2V5LCB7XHJcbiAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgY3JlYXRlZDogZW50cnk/LmNyZWF0ZWQgPz8gbm93LFxyXG4gICAgICAgIHVzZUNvdW50OiBwcmV2Q291bnQgKyAxLFxyXG4gICAgICAgIHN0YWxlOiBub3cgKyBzdGFsZVRpbWUsXHJcbiAgICAgICAgZXhwaXJlc0F0OiBub3cgKyB0dGwsXHJcbiAgICAgICAgdGltZW91dDogc2V0VGltZW91dCgoKSA9PiB0aGlzLmludmFsaWRhdGUoa2V5KSwgdHRsKSxcclxuICAgICAgICBrZXksXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gbWFwO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbnZhbGlkYXRlcyAocmVtb3ZlcykgYSBjYWNoZSBlbnRyeS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBpbnZhbGlkYXRlLlxyXG4gICAqL1xyXG4gIGludmFsaWRhdGUoa2V5OiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5nZXRVbnRyYWNrZWQoa2V5KTtcclxuICAgIGlmICghZW50cnkpIHJldHVybjtcclxuICAgIGNsZWFyVGltZW91dChlbnRyeS50aW1lb3V0KTtcclxuICAgIHRoaXMuaW50ZXJuYWwubXV0YXRlKChtYXApID0+IHtcclxuICAgICAgbWFwLmRlbGV0ZShrZXkpO1xyXG4gICAgICByZXR1cm4gbWFwO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKiogQGludGVybmFsICovXHJcbiAgcHJpdmF0ZSBjbGVhbnVwKCkge1xyXG4gICAgaWYgKHVudHJhY2tlZCh0aGlzLmludGVybmFsKS5zaXplIDw9IHRoaXMuY2xlYW51cE9wdC5tYXhTaXplKSByZXR1cm47XHJcblxyXG4gICAgY29uc3Qgc29ydGVkID0gQXJyYXkuZnJvbSh1bnRyYWNrZWQodGhpcy5pbnRlcm5hbCkuZW50cmllcygpKS50b1NvcnRlZChcclxuICAgICAgKGEsIGIpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5jbGVhbnVwT3B0LnR5cGUgPT09ICdscnUnKSB7XHJcbiAgICAgICAgICByZXR1cm4gYVsxXS51c2VDb3VudCAtIGJbMV0udXNlQ291bnQ7IC8vIGxlYXN0IHVzZWQgZmlyc3RcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIGFbMV0uY3JlYXRlZCAtIGJbMV0uY3JlYXRlZDsgLy8gb2xkZXN0IGZpcnN0XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBrZWVwQ291bnQgPSBNYXRoLmZsb29yKHRoaXMuY2xlYW51cE9wdC5tYXhTaXplIC8gMik7XHJcblxyXG4gICAgY29uc3QgcmVtb3ZlZCA9IHNvcnRlZC5zbGljZSgwLCBzb3J0ZWQubGVuZ3RoIC0ga2VlcENvdW50KTtcclxuICAgIGNvbnN0IGtlZXAgPSBzb3J0ZWQuc2xpY2UocmVtb3ZlZC5sZW5ndGgsIHNvcnRlZC5sZW5ndGgpO1xyXG5cclxuICAgIHJlbW92ZWQuZm9yRWFjaCgoWywgZV0pID0+IHtcclxuICAgICAgY2xlYXJUaW1lb3V0KGUudGltZW91dCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmludGVybmFsLnNldChuZXcgTWFwKGtlZXApKTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyB0aGUgY2FjaGUuXHJcbiAqL1xyXG50eXBlIENhY2hlT3B0aW9ucyA9IHtcclxuICAvKipcclxuICAgKiBUaGUgZGVmYXVsdCBUaW1lIFRvIExpdmUgKFRUTCkgZm9yIGNhY2hlIGVudHJpZXMsIGluIG1pbGxpc2Vjb25kcy5cclxuICAgKi9cclxuICB0dGw/OiBudW1iZXI7XHJcbiAgLyoqXHJcbiAgICogVGhlIGRlZmF1bHQgZHVyYXRpb24sIGluIG1pbGxpc2Vjb25kcywgZHVyaW5nIHdoaWNoIGEgY2FjaGUgZW50cnkgaXMgY29uc2lkZXJlZFxyXG4gICAqIHN0YWxlIGJ1dCBjYW4gc3RpbGwgYmUgdXNlZCB3aGlsZSByZXZhbGlkYXRpb24gb2NjdXJzIGluIHRoZSBiYWNrZ3JvdW5kLlxyXG4gICAqL1xyXG4gIHN0YWxlVGltZT86IG51bWJlcjtcclxuICAvKipcclxuICAgKiBPcHRpb25zIGZvciBjb25maWd1cmluZyB0aGUgY2FjaGUgY2xlYW51cCBzdHJhdGVneS5cclxuICAgKi9cclxuICBjbGVhbnVwPzogUGFydGlhbDxDbGVhbnVwVHlwZT47XHJcbn07XHJcblxyXG5jb25zdCBDTElFTlRfQ0FDSEVfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48Q2FjaGU8SHR0cFJlc3BvbnNlPHVua25vd24+Pj4oXHJcbiAgJ0lOVEVSTkFMX0NMSUVOVF9DQUNIRScsXHJcbik7XHJcblxyXG4vKipcclxuICogUHJvdmlkZXMgdGhlIGluc3RhbmNlIG9mIHRoZSBRdWVyeUNhY2hlIGZvciBxdWVyeVJlc291cmNlLiBUaGlzIHNob3VsZCBwcm9iYWJseSBiZSBjYWxsZWRcclxuICogaW4geW91ciBhcHBsaWNhdGlvbidzIHJvb3QgY29uZmlndXJhdGlvbiwgYnV0IGNhbiBhbHNvIGJlIG92ZXJyaWRlbiB3aXRoIGNvbXBvbmVudC9tb2R1bGUgcHJvdmlkZXJzLlxyXG4gKlxyXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGNhY2hlLlxyXG4gKiBAcmV0dXJucyBBbiBBbmd1bGFyIGBQcm92aWRlcmAgZm9yIHRoZSBjYWNoZS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogLy8gSW4geW91ciBhcHAuY29uZmlnLnRzIG9yIEFwcE1vZHVsZSBwcm92aWRlcnM6XHJcbiAqXHJcbiAqIGltcG9ydCB7IHByb3ZpZGVRdWVyeUNhY2hlIH0gZnJvbSAnLi95b3VyLWNhY2hlJztcclxuICpcclxuICogZXhwb3J0IGNvbnN0IGFwcENvbmZpZzogQXBwbGljYXRpb25Db25maWcgPSB7XHJcbiAqICAgcHJvdmlkZXJzOiBbXHJcbiAqICAgICBwcm92aWRlUXVlcnlDYWNoZSh7XHJcbiAqICAgICAgIHR0bDogNjAwMDAsIC8vIERlZmF1bHQgVFRMIG9mIDYwIHNlY29uZHNcclxuICogICAgICAgc3RhbGVUaW1lOiAzMDAwMCwgLy8gRGVmYXVsdCBzdGFsZVRpbWUgb2YgMzAgc2Vjb25kc1xyXG4gKiAgICAgfSksXHJcbiAqICAgICAvLyAuLi4gb3RoZXIgcHJvdmlkZXJzXHJcbiAqICAgXVxyXG4gKiB9O1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVRdWVyeUNhY2hlKG9wdD86IENhY2hlT3B0aW9ucyk6IFByb3ZpZGVyIHtcclxuICByZXR1cm4ge1xyXG4gICAgcHJvdmlkZTogQ0xJRU5UX0NBQ0hFX1RPS0VOLFxyXG4gICAgdXNlVmFsdWU6IG5ldyBDYWNoZShvcHQ/LnR0bCwgb3B0Py5zdGFsZVRpbWUsIG9wdD8uY2xlYW51cCksXHJcbiAgfTtcclxufVxyXG5cclxuY2xhc3MgTm9vcENhY2hlPFQ+IGV4dGVuZHMgQ2FjaGU8VD4ge1xyXG4gIG92ZXJyaWRlIHN0b3JlKF86IHN0cmluZywgX186IFQsIF9fXyA9IHN1cGVyLnN0YWxlVGltZSwgX19fXyA9IHN1cGVyLnR0bCkge1xyXG4gICAgLy8gbm9vcFxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEluamVjdHMgdGhlIGBRdWVyeUNhY2hlYCBpbnN0YW5jZSB0aGF0IGlzIHVzZWQgd2l0aGluIHF1ZXJ5UmVzb3VyY2UuXHJcbiAqIEFsbG93cyBmb3IgZGlyZWN0IG1vZGlmaWNhdGlvbiBvZiBjYWNoZWQgZGF0YSwgYnV0IGlzIG1vc3RseSBtZWFudCBmb3IgaW50ZXJuYWwgdXNlLlxyXG4gKlxyXG4gKiBAcGFyYW0gaW5qZWN0b3IgLSAoT3B0aW9uYWwpIFRoZSBpbmplY3RvciB0byB1c2UuICBJZiBub3QgcHJvdmlkZWQsIHRoZSBjdXJyZW50XHJcbiAqICAgICAgICAgICAgICAgICAgIGluamVjdGlvbiBjb250ZXh0IGlzIHVzZWQuXHJcbiAqIEByZXR1cm5zIFRoZSBgUXVlcnlDYWNoZWAgaW5zdGFuY2UuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIC8vIEluIHlvdXIgY29tcG9uZW50IG9yIHNlcnZpY2U6XHJcbiAqXHJcbiAqIGltcG9ydCB7IGluamVjdFF1ZXJ5Q2FjaGUgfSBmcm9tICcuL3lvdXItY2FjaGUnO1xyXG4gKlxyXG4gKiBjb25zdHJ1Y3RvcigpIHtcclxuICogICBjb25zdCBjYWNoZSA9IGluamVjdFF1ZXJ5Q2FjaGUoKTtcclxuICpcclxuICogICBjb25zdCBteURhdGEgPSBjYWNoZS5nZXQoKCkgPT4gJ215LWRhdGEta2V5Jyk7XHJcbiAqICAgaWYgKG15RGF0YSgpICE9PSBudWxsKSB7XHJcbiAqICAgICAvLyAuLi4gdXNlIGNhY2hlZCBkYXRhIC4uLlxyXG4gKiAgIH1cclxuICogfVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdFF1ZXJ5Q2FjaGU8VFJhdyA9IHVua25vd24+KFxyXG4gIGluamVjdG9yPzogSW5qZWN0b3IsXHJcbik6IENhY2hlPEh0dHBSZXNwb25zZTxUUmF3Pj4ge1xyXG4gIGNvbnN0IGNhY2hlID0gaW5qZWN0b3JcclxuICAgID8gaW5qZWN0b3IuZ2V0KENMSUVOVF9DQUNIRV9UT0tFTiwgbnVsbCwge1xyXG4gICAgICAgIG9wdGlvbmFsOiB0cnVlLFxyXG4gICAgICB9KVxyXG4gICAgOiBpbmplY3QoQ0xJRU5UX0NBQ0hFX1RPS0VOLCB7XHJcbiAgICAgICAgb3B0aW9uYWw6IHRydWUsXHJcbiAgICAgIH0pO1xyXG5cclxuICBpZiAoIWNhY2hlKSB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAnQ2FjaGUgbm90IHByb3ZpZGVkLCBwbGVhc2UgYWRkIHByb3ZpZGVRdWVyeUNhY2hlKCkgdG8gcHJvdmlkZXJzIGFycmF5JyxcclxuICAgICAgKTtcclxuICAgIGVsc2UgcmV0dXJuIG5ldyBOb29wQ2FjaGUoKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBjYWNoZSBhcyBDYWNoZTxIdHRwUmVzcG9uc2U8VFJhdz4+O1xyXG59XHJcbiJdfQ==","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, ignoreCacheControl = false) {\n if (ignoreCacheControl) {\n return {\n noStore: false,\n noCache: false,\n mustRevalidate: false,\n immutable: false,\n maxAge: null,\n staleWhileRevalidate: null,\n };\n }\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, optStaleTime, optTTL) {\n let staleTime = optStaleTime;\n let ttl = optTTL;\n if (cacheControl.immutable)\n return {\n staleTime: Infinity,\n ttl: Infinity,\n };\n if (cacheControl.maxAge !== null)\n ttl = cacheControl.maxAge * 1000;\n if (cacheControl.staleWhileRevalidate !== null)\n staleTime = cacheControl.staleWhileRevalidate * 1000;\n // if no-cache is set, we must always revalidate\n if (cacheControl.noCache || cacheControl.mustRevalidate)\n staleTime = 0;\n if (ttl !== undefined && staleTime !== undefined && ttl < staleTime) {\n staleTime = ttl;\n }\n return { staleTime, ttl };\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 if (opt.bustBrowserCache) {\n req = req.clone({\n setParams: { _cb: Date.now().toString() },\n });\n }\n return next(req).pipe(tap((event) => {\n if (event instanceof HttpResponse && event.ok) {\n const cacheControl = parseCacheControlHeader(event, opt.ignoreCacheControl);\n if (cacheControl.noStore)\n return;\n const { staleTime, ttl } = resolveTimings(cacheControl, opt.staleTime, opt.ttl);\n if (opt.ttl === 0)\n return; // no point\n const parsedResponse = opt.parse\n ? new HttpResponse({\n body: opt.parse(event.body),\n headers: event.headers,\n status: event.status,\n statusText: event.statusText,\n url: event.url ?? undefined,\n })\n : event;\n cache.store(key, parsedResponse, 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yZXNvdXJjZS9zcmMvbGliL3V0aWwvY2FjaGUvY2FjaGUuaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFdBQVcsRUFDWCxnQkFBZ0IsRUFLaEIsWUFBWSxHQUNiLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQVkzQyxNQUFNLGFBQWEsR0FBRyxJQUFJLGdCQUFnQixDQUFvQixHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLEtBQUssRUFBRSxLQUFLO0NBQ2IsQ0FBQyxDQUFDLENBQUM7QUFFSixNQUFNLFVBQVUsZUFBZSxDQUM3QixHQUFHLEdBQUcsSUFBSSxXQUFXLEVBQUUsRUFDdkIsR0FFQztJQUVELE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsR0FBZ0I7SUFDdkMsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFXRCxTQUFTLHVCQUF1QixDQUM5QixHQUEwQixFQUMxQixrQkFBa0IsR0FBRyxLQUFLO0lBRTFCLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUN2QixPQUFPO1lBQ0wsT0FBTyxFQUFFLEtBQUs7WUFDZCxPQUFPLEVBQUUsS0FBSztZQUNkLGNBQWMsRUFBRSxLQUFLO1lBQ3JCLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLE1BQU0sRUFBRSxJQUFJO1lBQ1osb0JBQW9CLEVBQUUs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QUFLLENBQUM7Z0JBRVYsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNuRCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDWixpREFBaUQ7WUFDakQsSUFBSSxLQUFLLFlBQVksWUFBWSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNuRSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDckIsQ0FBQztZQUVELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEh0dHBDb250ZXh0LFxyXG4gIEh0dHBDb250ZXh0VG9rZW4sXHJcbiAgdHlwZSBIdHRwRXZlbnQsXHJcbiAgdHlwZSBIdHRwSGFuZGxlckZuLFxyXG4gIHR5cGUgSHR0cEludGVyY2VwdG9yRm4sXHJcbiAgdHlwZSBIdHRwUmVxdWVzdCxcclxuICBIdHRwUmVzcG9uc2UsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUsIG9mLCB0YXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgaW5qZWN0UXVlcnlDYWNoZSB9IGZyb20gJy4vY2FjaGUnO1xyXG5cclxudHlwZSBDYWNoZUVudHJ5T3B0aW9ucyA9IHtcclxuICBrZXk/OiBzdHJpbmc7XHJcbiAgdHRsPzogbnVtYmVyO1xyXG4gIHN0YWxlVGltZT86IG51bWJlcjtcclxuICBjYWNoZTogYm9vbGVhbjtcclxuICBidXN0QnJvd3NlckNhY2hlPzogYm9vbGVhbjtcclxuICBpZ25vcmVDYWNoZUNvbnRyb2w/OiBib29sZWFuO1xyXG4gIHBhcnNlPzogKHZhbDogdW5rbm93bikgPT4gdW5rbm93bjtcclxufTtcclxuXHJcbmNvbnN0IENBQ0hFX0NPTlRFWFQgPSBuZXcgSHR0cENvbnRleHRUb2tlbjxDYWNoZUVudHJ5T3B0aW9ucz4oKCkgPT4gKHtcclxuICBjYWNoZTogZmFsc2UsXHJcbn0pKTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRDYWNoZUNvbnRleHQoXHJcbiAgY3R4ID0gbmV3IEh0dHBDb250ZXh0KCksXHJcbiAgb3B0OiBPbWl0PENhY2hlRW50cnlPcHRpb25zLCAnY2FjaGUnIHwgJ2tleSc+ICYge1xyXG4gICAga2V5OiBSZXF1aXJlZDxDYWNoZUVudHJ5T3B0aW9ucz5bJ2tleSddO1xyXG4gIH0sXHJcbikge1xyXG4gIHJldHVybiBjdHguc2V0KENBQ0hFX0NPTlRFWFQsIHsgLi4ub3B0LCBjYWNoZTogdHJ1ZSB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Q2FjaGVDb250ZXh0KGN0eDogSHR0cENvbnRleHQpOiBDYWNoZUVudHJ5T3B0aW9ucyB7XHJcbiAgcmV0dXJuIGN0eC5nZXQoQ0FDSEVfQ09OVEVYVCk7XHJcbn1cclxuXHJcbnR5cGUgUmVzb2x2ZWRDYWNoZUNvbnRyb2wgPSB7XHJcbiAgbm9TdG9yZTogYm9vbGVhbjtcclxuICBub0NhY2hlOiBib29sZWFuO1xyXG4gIG11c3RSZXZhbGlkYXRlOiBib29sZWFuO1xyXG4gIGltbXV0YWJsZTogYm9vbGVhbjtcclxuICBtYXhBZ2U6IG51bWJlciB8IG51bGw7XHJcbiAgc3RhbGVXaGlsZVJldmFsaWRhdGU6IG51bWJlciB8IG51bGw7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBwYXJzZUNhY2hlQ29udHJvbEhlYWRlcihcclxuICByZXE6IEh0dHBSZXNwb25zZTx1bmtub3duPixcclxuICBpZ25vcmVDYWNoZUNvbnRyb2wgPSBmYWxzZSxcclxuKTogUmVzb2x2ZWRDYWNoZUNvbnRyb2wge1xyXG4gIGlmIChpZ25vcmVDYWNoZUNvbnRyb2wpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5vU3RvcmU6IGZhbHNlLFxyXG4gICAgICBub0NhY2hlOiBmYWxzZSxcclxuICAgICAgbXVzdFJldmFsaWRhdGU6IGZhbHNlLFxyXG4gICAgICBpbW11dGFibGU6IGZhbHNlLFxyXG4gICAgICBtYXhBZ2U6IG51bGwsXHJcbiAgICAgIHN0YWxlV2hpbGVSZXZhbGlkYXRlOiBudWxsLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGhlYWRlciA9IHJlcS5oZWFkZXJzLmdldCgnQ2FjaGUtQ29udHJvbCcpO1xyXG5cclxuICBsZXQgc01heEFnZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgY29uc3QgZGlyZWN0aXZlczogUmVzb2x2ZWRDYWNoZUNvbnRyb2wgPSB7XHJcbiAgICBub1N0b3JlOiBmYWxzZSxcclxuICAgIG5vQ2FjaGU6IGZhbHNlLFxyXG4gICAgbXVzdFJldmFsaWRhdGU6IGZhbHNlLFxyXG4gICAgaW1tdXRhYmxlOiBmYWxzZSxcclxuICAgIG1heEFnZTogbnVsbCxcclxuICAgIHN0YWxlV2hpbGVSZXZhbGlkYXRlOiBudWxsLFxyXG4gIH07XHJcblxyXG4gIGlmICghaGVhZGVyKSByZXR1cm4gZGlyZWN0aXZlcztcclxuXHJcbiAgY29uc3QgcGFydHMgPSBoZWFkZXIuc3BsaXQoJywnKTtcclxuXHJcbiAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XHJcbiAgICBjb25zdCBbdW5wYXJzZWRLZXksIHZhbHVlXSA9IHBhcnQudHJpbSgpLnNwbGl0KCc9Jyk7XHJcbiAgICBjb25zdCBrZXkgPSB1bnBhcnNlZEtleS50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICBzd2l0Y2ggKGtleSkge1xyXG4gICAgICBjYXNlICduby1zdG9yZSc6XHJcbiAgICAgICAgZGlyZWN0aXZlcy5ub1N0b3JlID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnbm8tY2FjaGUnOlxyXG4gICAgICAgIGRpcmVjdGl2ZXMubm9DYWNoZSA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ211c3QtcmV2YWxpZGF0ZSc6XHJcbiAgICAgIGNhc2UgJ3Byb3h5LXJldmFsaWRhdGUnOlxyXG4gICAgICAgIGRpcmVjdGl2ZXMubXVzdFJldmFsaWRhdGUgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdpbW11dGFibGUnOlxyXG4gICAgICAgIGRpcmVjdGl2ZXMuaW1tdXRhYmxlID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnbWF4LWFnZSc6IHtcclxuICAgICAgICBpZiAoIXZhbHVlKSBicmVhaztcclxuICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XHJcbiAgICAgICAgaWYgKCFpc05hTihwYXJzZWRWYWx1ZSkpIGRpcmVjdGl2ZXMubWF4QWdlID0gcGFyc2VkVmFsdWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAncy1tYXgtYWdlJzoge1xyXG4gICAgICAgIGlmICghdmFsdWUpIGJyZWFrO1xyXG4gICAgICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcclxuICAgICAgICBpZiAoIWlzTmFOKHBhcnNlZFZhbHVlKSkgc01heEFnZSA9IHBhcnNlZFZhbHVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ3N0YWxlLXdoaWxlLXJldmFsaWRhdGUnOiB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkgYnJlYWs7XHJcbiAgICAgICAgY29uc3QgcGFyc2VkVmFsdWUgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xyXG4gICAgICAgIGlmICghaXNOYU4ocGFyc2VkVmFsdWUpKSBkaXJlY3RpdmVzLnN0YWxlV2hpbGVSZXZhbGlkYXRlID0gcGFyc2VkVmFsdWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIHMtbWF4LWFnZSB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgbWF4LWFnZVxyXG4gIGlmIChzTWF4QWdlICE9PSBudWxsKSBkaXJlY3RpdmVzLm1heEFnZSA9IHNNYXhBZ2U7XHJcblxyXG4gIC8vIGlmIG5vIHN0b3JlIG5vdGhpbmcgZWxzZSBpcyByZWxldmFudFxyXG4gIGlmIChkaXJlY3RpdmVzLm5vU3RvcmUpXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBub1N0b3JlOiB0cnVlLFxyXG4gICAgICBub0NhY2hlOiBmYWxzZSxcclxuICAgICAgbXVzdFJldmFsaWRhdGU6IGZhbHNlLFxyXG4gICAgICBpbW11dGFibGU6IGZhbHNlLFxyXG4gICAgICBtYXhBZ2U6IG51bGwsXHJcbiAgICAgIHN0YWxlV2hpbGVSZXZhbGlkYXRlOiBudWxsLFxyXG4gICAgfTtcclxuXHJcbiAgLy8gbWF4IGFnZSBkb2VzIG5vdCBhcHBseSB0byBpbW11dGFibGUgcmVzb3VyY2VzXHJcbiAgaWYgKGRpcmVjdGl2ZXMuaW1tdXRhYmxlKVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLi4uZGlyZWN0aXZlcyxcclxuICAgICAgbWF4QWdlOiBudWxsLFxyXG4gICAgfTtcclxuXHJcbiAgcmV0dXJuIGRpcmVjdGl2ZXM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlc29sdmVUaW1pbmdzKFxyXG4gIGNhY2hlQ29udHJvbDogUmVzb2x2ZWRDYWNoZUNvbnRyb2wsXHJcbiAgb3B0U3RhbGVUaW1lPzogbnVtYmVyLFxyXG4gIG9wdFRUTD86IG51bWJlcixcclxuKTogeyBzdGFsZVRpbWU/OiBudW1iZXI7IHR0bD86IG51bWJlciB9IHtcclxuICBsZXQgc3RhbGVUaW1lID0gb3B0U3RhbGVUaW1lO1xyXG4gIGxldCB0dGwgPSBvcHRUVEw7XHJcblxyXG4gIGlmIChjYWNoZUNvbnRyb2wuaW1tdXRhYmxlKVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc3RhbGVUaW1lOiBJbmZpbml0eSxcclxuICAgICAgdHRsOiBJbmZpbml0eSxcclxuICAgIH07XHJcblxyXG4gIGlmIChjYWNoZUNvbnRyb2wubWF4QWdlICE9PSBudWxsKSB0dGwgPSBjYWNoZUNvbnRyb2wubWF4QWdlICogMTAwMDtcclxuXHJcbiAgaWYgKGNhY2hlQ29udHJvbC5zdGFsZVdoaWxlUmV2YWxpZGF0ZSAhPT0gbnVsbClcclxuICAgIHN0YWxlVGltZSA9IGNhY2hlQ29udHJvbC5zdGFsZVdoaWxlUmV2YWxpZGF0ZSAqIDEwMDA7XHJcblxyXG4gIC8vIGlmIG5vLWNhY2hlIGlzIHNldCwgd2UgbXVzdCBhbHdheXMgcmV2YWxpZGF0ZVxyXG4gIGlmIChjYWNoZUNvbnRyb2wubm9DYWNoZSB8fCBjYWNoZUNvbnRyb2wubXVzdFJldmFsaWRhdGUpIHN0YWxlVGltZSA9IDA7XHJcblxyXG4gIGlmICh0dGwgIT09IHVuZGVmaW5lZCAmJiBzdGFsZVRpbWUgIT09IHVuZGVmaW5lZCAmJiB0dGwgPCBzdGFsZVRpbWUpIHtcclxuICAgIHN0YWxlVGltZSA9IHR0bDtcclxuICB9XHJcblxyXG4gIHJldHVybiB7IHN0YWxlVGltZSwgdHRsIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGFuIGBIdHRwSW50ZXJjZXB0b3JGbmAgdGhhdCBpbXBsZW1lbnRzIGNhY2hpbmcgZm9yIEhUVFAgcmVxdWVzdHMuIFRoaXMgaW50ZXJjZXB0b3JcclxuICogY2hlY2tzIGZvciBhIGNhY2hpbmcgY29uZmlndXJhdGlvbiBpbiB0aGUgcmVxdWVzdCdzIGBIdHRwQ29udGV4dGAgKGludGVybmFsbHkgc2V0IGJ5IHRoZSBxdWVyeVJlc291cmNlKS5cclxuICogSWYgY2FjaGluZyBpcyBlbmFibGVkLCBpdCBhdHRlbXB0cyB0byByZXRyaWV2ZSByZXNwb25zZXMgZnJvbSB0aGUgY2FjaGUuIElmIGEgY2FjaGVkIHJlc3BvbnNlXHJcbiAqIGlzIGZvdW5kIGFuZCBpcyBub3Qgc3RhbGUsIGl0J3MgcmV0dXJuZWQgZGlyZWN0bHkuICBJZiB0aGUgY2FjaGVkIHJlc3BvbnNlIGlzIHN0YWxlLCBpdCdzIHJldHVybmVkLFxyXG4gKiBhbmQgYSBiYWNrZ3JvdW5kIHJldmFsaWRhdGlvbiByZXF1ZXN0IGlzIG1hZGUuICBJZiBubyBjYWNoZWQgcmVzcG9uc2UgaXMgZm91bmQsIHRoZSByZXF1ZXN0XHJcbiAqIGlzIG1hZGUgdG8gdGhlIHNlcnZlciwgYW5kIHRoZSByZXNwb25zZSBpcyBjYWNoZWQgYWNjb3JkaW5nIHRvIHRoZSBjb25maWd1cmVkIFRUTCBhbmQgc3RhbGVuZXNzLlxyXG4gKiBUaGUgaW50ZXJjZXB0b3IgYWxzbyByZXNwZWN0cyBgQ2FjaGUtQ29udHJvbGAgaGVhZGVycyBmcm9tIHRoZSBzZXJ2ZXIuXHJcbiAqXHJcbiAqIEBwYXJhbSBhbGxvd2VkTWV0aG9kcyAtIEFuIGFycmF5IG9mIEhUVFAgbWV0aG9kcyBmb3Igd2hpY2ggY2FjaGluZyBzaG91bGQgYmUgZW5hYmxlZC5cclxuICogICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byBgWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJ11gLlxyXG4gKlxyXG4gKiBAcmV0dXJucyBBbiBgSHR0cEludGVyY2VwdG9yRm5gIHRoYXQgaW1wbGVtZW50cyB0aGUgY2FjaGluZyBsb2dpYy5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogLy8gSW4geW91ciBhcHAuY29uZmlnLnRzIG9yIG1vZHVsZSBwcm92aWRlcnM6XHJcbiAqXHJcbiAqIGltcG9ydCB7IHByb3ZpZGVIdHRwQ2xpZW50LCB3aXRoSW50ZXJjZXB0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG4gKiBpbXBvcnQgeyBjcmVhdGVDYWNoZUludGVyY2VwdG9yIH0gZnJvbSAnQG1tc3RhY2svcmVzb3VyY2UnO1xyXG4gKlxyXG4gKiBleHBvcnQgY29uc3QgYXBwQ29uZmlnOiBBcHBsaWNhdGlvbkNvbmZpZyA9IHtcclxuICogICBwcm92aWRlcnM6IFtcclxuICogICAgIHByb3ZpZGVIdHRwQ2xpZW50KHdpdGhJbnRlcmNlcHRvcnMoW2NyZWF0ZUNhY2hlSW50ZXJjZXB0b3IoKV0pKSxcclxuICogICAgIC8vIC4uLiBvdGhlciBwcm92aWRlcnNcclxuICogICBdLFxyXG4gKiB9O1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhY2hlSW50ZXJjZXB0b3IoXHJcbiAgYWxsb3dlZE1ldGhvZHMgPSBbJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnXSxcclxuKTogSHR0cEludGVyY2VwdG9yRm4ge1xyXG4gIGNvbnN0IENBQ0hFX01FVEhPRFMgPSBuZXcgU2V0PHN0cmluZz4oYWxsb3dlZE1ldGhvZHMpO1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgcmVxOiBIdHRwUmVxdWVzdDx1bmtub3duPixcclxuICAgIG5leHQ6IEh0dHBIYW5kbGVyRm4sXHJcbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8dW5rbm93bj4+ID0+IHtcclxuICAgIGNvbnN0IGNhY2hlID0gaW5qZWN0UXVlcnlDYWNoZSgpO1xyXG5cclxuICAgIGlmICghQ0FDSEVfTUVUSE9EUy5oYXMocmVxLm1ldGhvZCkpIHJldHVybiBuZXh0KHJlcSk7XHJcbiAgICBjb25zdCBvcHQgPSBnZXRDYWNoZUNvbnRleHQocmVxLmNvbnRleHQpO1xyXG5cclxuICAgIGlmICghb3B0LmNhY2hlKSByZXR1cm4gbmV4dChyZXEpO1xyXG5cclxuICAgIGNvbnN0IGtleSA9IG9wdC5rZXkgPz8gcmVxLnVybFdpdGhQYXJhbXM7XHJcbiAgICBjb25zdCBlbnRyeSA9IGNhY2hlLmdldFVudHJhY2tlZChrZXkpOyAvLyBudWxsIGlmIGV4cGlyZWQgb3Igbm90IGZvdW5kXHJcblxyXG4gICAgLy8gSWYgdGhlIGVudHJ5IGlzIG5vdCBzdGFsZSwgcmV0dXJuIGl0XHJcbiAgICBpZiAoZW50cnkgJiYgIWVudHJ5LmlzU3RhbGUpIHJldHVybiBvZihlbnRyeS52YWx1ZSk7XHJcblxyXG4gICAgLy8gcmVzb3VyY2UgaXRzZWxmIGhhbmRsZXMgY2FzZSBvZiBzaG93aW5nIHN0YWxlIGRhdGEuLi50aGUgcmVxdWVzdCBtdXN0IHByb2Nlc3MgYXMgdGhpcyB3aWxsIFwicmVmcmVzaCBzYWlkIGRhdGFcIlxyXG5cclxuICAgIGNvbnN0IGVUYWcgPSBlbnRyeT8udmFsdWUuaGVhZGVycy5nZXQoJ0VUYWcnKTtcclxuICAgIGNvbnN0IGxhc3RNb2RpZmllZCA9IGVudHJ5Py52YWx1ZS5oZWFkZXJzLmdldCgnTGFzdC1Nb2RpZmllZCcpO1xyXG5cclxuICAgIGlmIChlVGFnKSB7XHJcbiAgICAgIHJlcSA9IHJlcS5jbG9uZSh7IHNldEhlYWRlcnM6IHsgJ0lmLU5vbmUtTWF0Y2gnOiBlVGFnIH0gfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGxhc3RNb2RpZmllZCkge1xyXG4gICAgICByZXEgPSByZXEuY2xvbmUoeyBzZXRIZWFkZXJzOiB7ICdJZi1Nb2RpZmllZC1TaW5jZSc6IGxhc3RNb2RpZmllZCB9IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvcHQuYnVzdEJyb3dzZXJDYWNoZSkge1xyXG4gICAgICByZXEgPSByZXEuY2xvbmUoe1xyXG4gICAgICAgIHNldFBhcmFtczogeyBfY2I6IERhdGUubm93KCkudG9TdHJpbmcoKSB9LFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV4dChyZXEpLnBpcGUoXHJcbiAgICAgIHRhcCgoZXZlbnQpID0+IHtcclxuICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgJiYgZXZlbnQub2spIHtcclxuICAgICAgICAgIGNvbnN0IGNhY2hlQ29udHJvbCA9IHBhcnNlQ2FjaGVDb250cm9sSGVhZGVyKFxyXG4gICAgICAgICAgICBldmVudCxcclxuICAgICAgICAgICAgb3B0Lmlnbm9yZUNhY2hlQ29udHJvbCxcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgaWYgKGNhY2hlQ29udHJvbC5ub1N0b3JlKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgY29uc3QgeyBzdGFsZVRpbWUsIHR0bCB9ID0gcmVzb2x2ZVRpbWluZ3MoXHJcbiAgICAgICAgICAgIGNhY2hlQ29udHJvbCxcclxuICAgICAgICAgICAgb3B0LnN0YWxlVGltZSxcclxuICAgICAgICAgICAgb3B0LnR0bCxcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgaWYgKG9wdC50dGwgPT09IDApIHJldHVybjsgLy8gbm8gcG9pbnRcclxuXHJcbiAgICAgICAgICBjb25zdCBwYXJzZWRSZXNwb25zZSA9IG9wdC5wYXJzZVxyXG4gICAgICAgICAgICA/IG5ldyBIdHRwUmVzcG9uc2Uoe1xyXG4gICAgICAgICAgICAgICAgYm9keTogb3B0LnBhcnNlKGV2ZW50LmJvZHkpLFxyXG4gICAgICAgICAgICAgICAgaGVhZGVyczogZXZlbnQuaGVhZGVycyxcclxuICAgICAgICAgICAgICAgIHN0YXR1czogZXZlbnQuc3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzVGV4dDogZXZlbnQuc3RhdHVzVGV4dCxcclxuICAgICAgICAgICAgICAgIHVybDogZXZlbnQudXJsID8/IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICA6IGV2ZW50O1xyXG5cclxuICAgICAgICAgIGNhY2hlLnN0b3JlKGtleSwgcGFyc2VkUmVzcG9uc2UsIHN0YWxlVGltZSwgdHRsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBtYXAoKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgLy8gaGFuZGxlIDMwNCByZXNwb25zZXMgZHVlIHRvIGVUYWcvbGFzdC1tb2RpZmllZFxyXG4gICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSAmJiBldmVudC5zdGF0dXMgPT09IDMwNCAmJiBlbnRyeSkge1xyXG4gICAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGV2ZW50O1xyXG4gICAgICB9KSxcclxuICAgICk7XHJcbiAgfTtcclxufVxyXG4iXX0=","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, inject, InjectionToken, Injector, signal, untracked, } from '@angular/core';\n/** @internal */\nconst DEFAULT_OPTIONS = {\n treshold: 5,\n timeout: 30000,\n shouldFail: () => true,\n shouldFailForever: () => false,\n};\n/** @internal */\nfunction internalCeateCircuitBreaker(treshold = 5, resetTimeout = 30000, shouldFail = () => true, shouldFailForever = () => false) {\n const halfOpen = signal(false, ...(ngDevMode ? [{ debugName: \"halfOpen\" }] : []));\n const failureCount = signal(0, ...(ngDevMode ? [{ debugName: \"failureCount\" }] : []));\n const status = computed(() => {\n if (failureCount() >= treshold)\n return 'OPEN';\n return halfOpen() ? 'HALF_OPEN' : 'CLOSED';\n }, ...(ngDevMode ? [{ debugName: \"status\" }] : []));\n const isClosed = computed(() => status() !== 'OPEN', ...(ngDevMode ? [{ debugName: \"isClosed\" }] : []));\n const isOpen = computed(() => status() !== 'CLOSED', ...(ngDevMode ? [{ debugName: \"isOpen\" }] : []));\n const success = () => {\n failureCount.set(0);\n halfOpen.set(false);\n };\n const tryOnce = () => {\n if (!untracked(isOpen))\n return;\n halfOpen.set(true);\n failureCount.set(treshold - 1);\n };\n let failForeverResetId = null;\n const effectRef = effect((cleanup) => {\n if (!isOpen())\n return;\n const timeout = setTimeout(tryOnce, resetTimeout);\n failForeverResetId = timeout;\n return cleanup(() => {\n clearTimeout(timeout);\n failForeverResetId = null;\n });\n }, ...(ngDevMode ? [{ debugName: \"effectRef\" }] : []));\n const failInternal = () => {\n failureCount.set(failureCount() + 1);\n halfOpen.set(false);\n };\n const failForever = () => {\n if (failForeverResetId)\n clearTimeout(failForeverResetId);\n effectRef.destroy();\n failureCount.set(Infinity);\n halfOpen.set(false);\n return;\n };\n const fail = (err) => {\n if (shouldFailForever(err))\n return failForever();\n if (shouldFail(err))\n return failInternal();\n // If the error does not trigger a failure, we do nothing.\n };\n return {\n status,\n isClosed,\n isOpen,\n fail,\n success,\n halfOpen: tryOnce,\n destroy: () => effectRef.destroy(),\n };\n}\n/** @internal */\nfunction createNeverBrokenCircuitBreaker() {\n return {\n isClosed: computed(() => true),\n isOpen: computed(() => false),\n status: signal('CLOSED'),\n fail: () => {\n // noop\n },\n success: () => {\n // noop\n },\n halfOpen: () => {\n // noop\n },\n destroy: () => {\n // noop\n },\n };\n}\nconst CB_DEFAULT_OPTIONS = new InjectionToken('MMSTACK_CIRCUIT_BREAKER_DEFAULT_OPTIONS');\nexport function provideCircuitBreakerDefaultOptions(options) {\n return {\n provide: CB_DEFAULT_OPTIONS,\n useValue: {\n ...DEFAULT_OPTIONS,\n ...options,\n },\n };\n}\nfunction injectCircuitBreakerOptions(injector = inject(Injector)) {\n return injector.get(CB_DEFAULT_OPTIONS, DEFAULT_OPTIONS, {\n optional: true,\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, injector) {\n if (opt === false)\n return createNeverBrokenCircuitBreaker();\n if (typeof opt === 'object' && 'isClosed' in opt)\n return opt;\n const { treshold, timeout, shouldFail, shouldFailForever } = {\n ...injectCircuitBreakerOptions(injector),\n ...opt,\n };\n return internalCeateCircuitBreaker(treshold, timeout, shouldFail, shouldFailForever);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2lyY3VpdC1icmVha2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcmVzb3VyY2Uvc3JjL2xpYi91dGlsL2NpcmN1aXQtYnJlYWtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sY0FBYyxFQUNkLFFBQVEsRUFHUixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBcUZ2QixnQkFBZ0I7QUFDaEIsTUFBTSxlQUFlLEdBQTBDO0lBQzdELFFBQVEsRUFBRSxDQUFDO0lBQ1gsT0FBTyxFQUFFLEtBQUs7SUFDZCxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSTtJQUN0QixpQkFBaUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLO0NBQy9CLENBQUM7QUFFRixnQkFBZ0I7QUFDaEIsU0FBUywyQkFBMkIsQ0FDbEMsUUFBUSxHQUFHLENBQUMsRUFDWixZQUFZLEdBQUcsS0FBSyxFQUNwQixhQUF1QyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQ2pELG9CQUE4QyxHQUFHLEVBQUUsQ0FBQyxLQUFLO0lBRXpELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLG9EQUFDLENBQUM7SUFDL0IsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLENBQUMsd0RBQUMsQ0FBQztJQUUvQixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQXNCLEdBQUcsRUFBRTtRQUNoRCxJQUFJLFlBQVksRUFBRSxJQUFJLFFBQVE7WUFBRSxPQUFPLE1BQU0sQ0FBQztRQUM5QyxPQUFPLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUM3QyxDQUFDLGtEQUFDLENBQUM7SUFFSCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssTUFBTSxv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QztBQUNKLENBQUM7QUFFRCxNQUFNLGtCQUFrQixHQUFHLElBQUksY0FBYyxDQUUzQyx5Q0FBeUMsQ0FBQyxDQUFDO0FBRTdDLE1BQU0sVUFBVSxtQ0FBbUMsQ0FDakQsT0FBOEI7SUFFOUIsT0FBTztRQUNMLE9BQU8sRUFBRSxrQkFBa0I7UUFDM0IsUUFBUSxFQUFFO1lBQ1IsR0FBRyxlQUFlO1lBQ2xCLEdBQUcsT0FBTztTQUNYO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLDJCQUEyQixDQUNsQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztJQUUzQixPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsZUFBZSxFQUFFO1FBQ3ZELFFBQVEsRUFBRSxJQUFJO0tBQ2YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxHQUEyQixFQUMzQixRQUFtQjtJQUVuQixJQUFJLEdBQUcsS0FBSyxLQUFLO1FBQUUsT0FBTywrQkFBK0IsRUFBRSxDQUFDO0lBRTVELElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLFVBQVUsSUFBSSxHQUFHO1FBQUUsT0FBTyxHQUFHLENBQUM7SUFFN0QsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLEdBQUc7UUFDM0QsR0FBRywyQkFBMkIsQ0FBQyxRQUFRLENBQUM7UUFDeEMsR0FBRyxHQUFHO0tBQ1AsQ0FBQztJQUVGLE9BQU8sMkJBQTJCLENBQ2hDLFFBQVEsRUFDUixPQUFPLEVBQ1AsVUFBVSxFQUNWLGlCQUFpQixDQUNsQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgY29tcHV0ZWQsXHJcbiAgZWZmZWN0LFxyXG4gIGluamVjdCxcclxuICBJbmplY3Rpb25Ub2tlbixcclxuICBJbmplY3RvcixcclxuICBQcm92aWRlcixcclxuICBTaWduYWwsXHJcbiAgc2lnbmFsLFxyXG4gIHVudHJhY2tlZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8qKlxyXG4gKiBSZXByZXNlbnRzIHRoZSBwb3NzaWJsZSBzdGF0ZXMgb2YgYSBjaXJjdWl0IGJyZWFrZXIuXHJcbiAqIC0gYENMT1NFRGA6IFRoZSBjaXJjdWl0IGJyZWFrZXIgaXMgY2xvc2VkLCBhbmQgb3BlcmF0aW9ucyBhcmUgYWxsb3dlZCB0byBwcm9jZWVkLlxyXG4gKiAtIGBPUEVOYDogVGhlIGNpcmN1aXQgYnJlYWtlciBpcyBvcGVuLCBhbmQgb3BlcmF0aW9ucyBhcmUgYmxvY2tlZC5cclxuICogLSBgSEFMRl9PUEVOYDogVGhlIGNpcmN1aXQgYnJlYWtlciBpcyBpbiBhIGhhbGYtb3BlbiBzdGF0ZSwgYWxsb3dpbmcgYSBsaW1pdGVkIG51bWJlciBvZiBvcGVyYXRpb25zIHRvIHRlc3QgaWYgdGhlIHVuZGVybHlpbmcgaXNzdWUgaXMgcmVzb2x2ZWQuXHJcbiAqL1xyXG50eXBlIENpcmN1aXRCcmVha2VyU3RhdGUgPSAnQ0xPU0VEJyB8ICdPUEVOJyB8ICdIQUxGX09QRU4nO1xyXG5cclxuLyoqXHJcbiAqIFJlcHJlc2VudHMgYSBjaXJjdWl0IGJyZWFrZXIsIHdoaWNoIG1vbml0b3JzIG9wZXJhdGlvbnMgYW5kIHByZXZlbnRzIGZhaWx1cmVzIGZyb20gY2FzY2FkaW5nLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgQ2lyY3VpdEJyZWFrZXIgPSB7XHJcbiAgLyoqXHJcbiAgICogQSBzaWduYWwgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjaXJjdWl0IGJyZWFrZXIgaXMgY3VycmVudGx5IGNsb3NlZCAoYWxsb3dpbmcgb3BlcmF0aW9ucykuXHJcbiAgICovXHJcbiAgaXNDbG9zZWQ6IFNpZ25hbDxib29sZWFuPjtcclxuICAvKipcclxuICAgKiAgQSBzaWduYWwgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjaXJjdWl0IGJyZWFrZXIgaXMgZWl0aGVyIG9wZW4gb3IgaW4gYSBoYWxmLW9wZW4gc3RhdGUuXHJcbiAgICogVGhpcyBpcyB1c2VmdWwgZm9yIGNoZWNraW5nIGlmIG9wZXJhdGlvbnMgYXJlIGJsb2NrZWQuXHJcbiAgICogSWYgdGhlIGNpcmN1aXQgYnJlYWtlciBpcyBvcGVuLCBvcGVyYXRpb25zIHNob3VsZCBub3QgcHJvY2VlZC5cclxuICAgKi9cclxuICBpc09wZW46IFNpZ25hbDxib29sZWFuPjtcclxuICAvKipcclxuICAgKiBBIHNpZ25hbCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGNpcmN1aXQgYnJlYWtlci5cclxuICAgKi9cclxuICBzdGF0dXM6IFNpZ25hbDxDaXJjdWl0QnJlYWtlclN0YXRlPjtcclxuICAvKipcclxuICAgKiBTaWduYWxzIGEgZmFpbHVyZSB0byB0aGUgY2lyY3VpdCBicmVha2VyLiAgVGhpcyBtYXkgY2F1c2UgdGhlIGNpcmN1aXQgYnJlYWtlciB0byBvcGVuLlxyXG4gICAqL1xyXG4gIGZhaWw6IChlcnI/OiBFcnJvcikgPT4gdm9pZDtcclxuICAvKipcclxuICAgKiBTaWduYWxzIGEgc3VjY2VzcyB0byB0aGUgY2lyY3VpdCBicmVha2VyLiAgVGhpcyBtYXkgY2F1c2UgdGhlIGNpcmN1aXQgYnJlYWtlciB0byBjbG9zZS5cclxuICAgKi9cclxuICBzdWNjZXNzOiAoKSA9PiB2b2lkO1xyXG4gIC8qKlxyXG4gICAqIEF0dGVtcHRzIHRvIHRyYW5zaXRpb24gdGhlIGNpcmN1aXQgYnJlYWtlciB0byB0aGUgaGFsZi1vcGVuIHN0YXRlLiBUaGlzIGlzIHR5cGljYWxseSB1c2VkXHJcbiAgICogdG8gdGVzdCBpZiB0aGUgdW5kZXJseWluZyBpc3N1ZSBoYXMgYmVlbiByZXNvbHZlZCBhZnRlciB0aGUgY2lyY3VpdCBicmVha2VyIGhhcyBiZWVuIG9wZW4uXHJcbiAgICovXHJcbiAgaGFsZk9wZW46ICgpID0+IHZvaWQ7XHJcbiAgLyoqXHJcbiAgICogRGVzdHJveXMgdGhlIGNpcmN1aXQgYnJlYWtlciAmIGluaXRpYXRlcyByZWxhdGVkIGNsZWFudXBcclxuICAgKi9cclxuICBkZXN0cm95OiAoKSA9PiB2b2lkO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIGNyZWF0aW5nIGEgY2lyY3VpdCBicmVha2VyLlxyXG4gKi9cclxudHlwZSBDcmVhdGVDaXJjdWl0QnJlYWtlck9wdGlvbnMgPSB7XHJcbiAgLyoqXHJcbiAgICogVGhlIG51bWJlciBvZiBmYWlsdXJlcyB0aGF0IHdpbGwgY2F1c2UgdGhlIGNpcmN1aXQgYnJlYWtlciB0byBvcGVuLlxyXG4gICAqIEBkZWZhdWx0IDVcclxuICAgKi9cclxuICB0cmVzaG9sZD86IG51bWJlcjtcclxuICAvKipcclxuICAgKiBUaGUgdGltZSBpbiBtaWxsaXNlY29uZHMgYWZ0ZXIgd2hpY2ggdGhlIGNpcmN1aXQgYnJlYWtlciB3aWxsIHJlc2V0IGFuZCBhbGxvdyBvcGVyYXRpb25zIHRvIHByb2NlZWQgYWdhaW4uXHJcbiAgICogQGRlZmF1bHQgMzAwMDAgKDMwIHNlY29uZHMpXHJcbiAgICovXHJcbiAgdGltZW91dD86IG51bWJlcjtcclxuICAvKipcclxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGVycm9yIHNob3VsZCBjYXVzZSB0aGUgY2lyY3VpdCBicmVha2VyIHRvIGluY3JlbWVudCB0aGUgZmFpbHVyZSBjb3VudC5cclxuICAgKiBAZGVmYXVsdCBBbHdheXMgcmV0dXJucyB0cnVlXHJcbiAgICovXHJcbiAgc2hvdWxkRmFpbD86IChlcnI/OiBFcnJvcikgPT4gYm9vbGVhbjtcclxuICAvKipcclxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGVycm9yIHNob3VsZCBjYXVzZSB0aGUgY2lyY3VpdCBicmVha2VyIHRvIGJlIG9wZW4gZm9yZXZlci5cclxuICAgKiBAZGVmYXVsdCBBbHdheXMgcmV0dXJucyBmYWxzZVxyXG4gICAqL1xyXG4gIHNob3VsZEZhaWxGb3JldmVyPzogKGVycj86IEVycm9yKSA9PiBib29sZWFuO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIGNyZWF0aW5nIGEgY2lyY3VpdCBicmVha2VyLlxyXG4gKiAgLSBgZmFsc2VgOiBEaXNhYmxlcyBjaXJjdWl0IGJyZWFrZXIgZnVuY3Rpb25hbGl0eSAoYWx3YXlzIG9wZW4pLlxyXG4gKiAgLSB0cnVlOiBDcmVhdGVzIGEgbmV3IGNpcmN1aXQgYnJlYWtlciB3aXRoIGRlZmF1bHQgb3B0aW9ucy5cclxuICogIC0gYENpcmN1aXRCcmVha2VyYDogUHJvdmlkZXMgYW4gZXhpc3RpbmcgYENpcmN1aXRCcmVha2VyYCBpbnN0YW5jZSB0byB1c2UuXHJcbiAqICAtIGB7IHRyZXNob2xkPzogbnVtYmVyOyB0aW1lb3V0PzogbnVtYmVyOyB9YDogQ3JlYXRlcyBhIG5ldyBjaXJjdWl0IGJyZWFrZXIgd2l0aCB0aGUgc3BlY2lmaWVkIG9wdGlvbnMuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBDaXJjdWl0QnJlYWtlck9wdGlvbnMgPVxyXG4gIHwgZmFsc2VcclxuICB8IENpcmN1aXRCcmVha2VyXHJcbiAgfCBDcmVhdGVDaXJjdWl0QnJlYWtlck9wdGlvbnM7XHJcblxyXG4vKiogQGludGVybmFsICovXHJcbmNvbnN0IERFRkFVTFRfT1BUSU9OUzogUmVxdWlyZWQ8Q3JlYXRlQ2lyY3VpdEJyZWFrZXJPcHRpb25zPiA9IHtcclxuICB0cmVzaG9sZDogNSxcclxuICB0aW1lb3V0OiAzMDAwMCxcclxuICBzaG91bGRGYWlsOiAoKSA9PiB0cnVlLFxyXG4gIHNob3VsZEZhaWxGb3JldmVyOiAoKSA9PiBmYWxzZSxcclxufTtcclxuXHJcbi8qKiBAaW50ZXJuYWwgKi9cclxuZnVuY3Rpb24gaW50ZXJuYWxDZWF0ZUNpcmN1aXRCcmVha2VyKFxyXG4gIHRyZXNob2xkID0gNSxcclxuICByZXNldFRpbWVvdXQgPSAzMDAwMCxcclxuICBzaG91bGRGYWlsOiAoZXJyPzogRXJyb3IpID0+IGJvb2xlYW4gPSAoKSA9PiB0cnVlLFxyXG4gIHNob3VsZEZhaWxGb3JldmVyOiAoZXJyPzogRXJyb3IpID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcclxuKTogQ2lyY3VpdEJyZWFrZXIge1xyXG4gIGNvbnN0IGhhbGZPcGVuID0gc2lnbmFsKGZhbHNlKTtcclxuICBjb25zdCBmYWlsdXJlQ291bnQgPSBzaWduYWwoMCk7XHJcblxyXG4gIGNvbnN0IHN0YXR1cyA9IGNvbXB1dGVkPENpcmN1aXRCcmVha2VyU3RhdGU+KCgpID0+IHtcclxuICAgIGlmIChmYWlsdXJlQ291bnQoKSA+PSB0cmVzaG9sZCkgcmV0dXJuICdPUEVOJztcclxuICAgIHJldHVybiBoYWxmT3BlbigpID8gJ0hBTEZfT1BFTicgOiAnQ0xPU0VEJztcclxuICB9KTtcclxuXHJcbiAgY29uc3QgaXNDbG9zZWQgPSBjb21wdXRlZCgoKSA9PiBzdGF0dXMoKSAhPT0gJ09QRU4nKTtcclxuICBjb25zdCBpc09wZW4gPSBjb21wdXRlZCgoKSA9PiBzdGF0dXMoKSAhPT0gJ0NMT1NFRCcpO1xyXG5cclxuICBjb25zdCBzdWNjZXNzID0gKCkgPT4ge1xyXG4gICAgZmFpbHVyZUNvdW50LnNldCgwKTtcclxuICAgIGhhbGZPcGVuLnNldChmYWxzZSk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgdHJ5T25jZSA9ICgpID0+IHtcclxuICAgIGlmICghdW50cmFja2VkKGlzT3BlbikpIHJldHVybjtcclxuICAgIGhhbGZPcGVuLnNldCh0cnVlKTtcclxuICAgIGZhaWx1cmVDb3VudC5zZXQodHJlc2hvbGQgLSAxKTtcclxuICB9O1xyXG5cclxuICBsZXQgZmFpbEZvcmV2ZXJSZXNldElkOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xyXG4gIGNvbnN0IGVmZmVjdFJlZiA9IGVmZmVjdCgoY2xlYW51cCkgPT4ge1xyXG4gICAgaWYgKCFpc09wZW4oKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KHRyeU9uY2UsIHJlc2V0VGltZW91dCk7XHJcbiAgICBmYWlsRm9yZXZlclJlc2V0SWQgPSB0aW1lb3V0O1xyXG4gICAgcmV0dXJuIGNsZWFudXAoKCkgPT4ge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XHJcbiAgICAgIGZhaWxGb3JldmVyUmVzZXRJZCA9IG51bGw7XHJcbiAgICB9KTtcclxuICB9KTtcclxuXHJcbiAgY29uc3QgZmFpbEludGVybmFsID0gKCkgPT4ge1xyXG4gICAgZmFpbHVyZUNvdW50LnNldChmYWlsdXJlQ291bnQoKSArIDEpO1xyXG4gICAgaGFsZk9wZW4uc2V0KGZhbHNlKTtcclxuICB9O1xyXG5cclxuICBjb25zdCBmYWlsRm9yZXZlciA9ICgpID0+IHtcclxuICAgIGlmIChmYWlsRm9yZXZlclJlc2V0SWQpIGNsZWFyVGltZW91dChmYWlsRm9yZXZlclJlc2V0SWQpO1xyXG4gICAgZWZmZWN0UmVmLmRlc3Ryb3koKTtcclxuICAgIGZhaWx1cmVDb3VudC5zZXQoSW5maW5pdHkpO1xyXG4gICAgaGFsZk9wZW4uc2V0KGZhbHNlKTtcclxuICAgIHJldHVybjtcclxuICB9O1xyXG5cclxuICBjb25zdCBmYWlsID0gKGVycj86IEVycm9yKSA9PiB7XHJcbiAgICBpZiAoc2hvdWxkRmFpbEZvcmV2ZXIoZXJyKSkgcmV0dXJuIGZhaWxGb3JldmVyKCk7XHJcbiAgICBpZiAoc2hvdWxkRmFpbChlcnIpKSByZXR1cm4gZmFpbEludGVybmFsKCk7XHJcbiAgICAvLyBJZiB0aGUgZXJyb3IgZG9lcyBub3QgdHJpZ2dlciBhIGZhaWx1cmUsIHdlIGRvIG5vdGhpbmcuXHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIHN0YXR1cyxcclxuICAgIGlzQ2xvc2VkLFxyXG4gICAgaXNPcGVuLFxyXG4gICAgZmFpbCxcclxuICAgIHN1Y2Nlc3MsXHJcbiAgICBoYWxmT3BlbjogdHJ5T25jZSxcclxuICAgIGRlc3Ryb3k6ICgpID0+IGVmZmVjdFJlZi5kZXN0cm95KCksXHJcbiAgfTtcclxufVxyXG5cclxuLyoqIEBpbnRlcm5hbCAqL1xyXG5mdW5jdGlvbiBjcmVhdGVOZXZlckJyb2tlbkNpcmN1aXRCcmVha2VyKCk6IENpcmN1aXRCcmVha2VyIHtcclxuICByZXR1cm4ge1xyXG4gICAgaXNDbG9zZWQ6IGNvbXB1dGVkKCgpID0+IHRydWUpLFxyXG4gICAgaXNPcGVuOiBjb21wdXRlZCgoKSA9PiBmYWxzZSksXHJcbiAgICBzdGF0dXM6IHNpZ25hbCgnQ0xPU0VEJyksXHJcbiAgICBmYWlsOiAoKSA9PiB7XHJcbiAgICAgIC8vIG5vb3BcclxuICAgIH0sXHJcbiAgICBzdWNjZXNzOiAoKSA9PiB7XHJcbiAgICAgIC8vIG5vb3BcclxuICAgIH0sXHJcbiAgICBoYWxmT3BlbjogKCkgPT4ge1xyXG4gICAgICAvLyBub29wXHJcbiAgICB9LFxyXG4gICAgZGVzdHJveTogKCkgPT4ge1xyXG4gICAgICAvLyBub29wXHJcbiAgICB9LFxyXG4gIH07XHJcbn1cclxuXHJcbmNvbnN0IENCX0RFRkFVTFRfT1BUSU9OUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxcclxuICBSZXF1aXJlZDxDcmVhdGVDaXJjdWl0QnJlYWtlck9wdGlvbnM+XHJcbj4oJ01NU1RBQ0tfQ0lSQ1VJVF9CUkVBS0VSX0RFRkFVTFRfT1BUSU9OUycpO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVDaXJjdWl0QnJlYWtlckRlZmF1bHRPcHRpb25zKFxyXG4gIG9wdGlvbnM6IENpcmN1aXRCcmVha2VyT3B0aW9ucyxcclxuKTogUHJvdmlkZXIge1xyXG4gIHJldHVybiB7XHJcbiAgICBwcm92aWRlOiBDQl9ERUZBVUxUX09QVElPTlMsXHJcbiAgICB1c2VWYWx1ZToge1xyXG4gICAgICAuLi5ERUZBVUxUX09QVElPTlMsXHJcbiAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICB9LFxyXG4gIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluamVjdENpcmN1aXRCcmVha2VyT3B0aW9ucyhcclxuICBpbmplY3RvciA9IGluamVjdChJbmplY3RvciksXHJcbik6IFJlcXVpcmVkPENyZWF0ZUNpcmN1aXRCcmVha2VyT3B0aW9ucz4ge1xyXG4gIHJldHVybiBpbmplY3Rvci5nZXQoQ0JfREVGQVVMVF9PUFRJT05TLCBERUZBVUxUX09QVElPTlMsIHtcclxuICAgIG9wdGlvbmFsOiB0cnVlLFxyXG4gIH0pO1xyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIGNpcmN1aXQgYnJlYWtlciBpbnN0YW5jZS5cclxuICpcclxuICogQHBhcmFtIG9wdGlvbnMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBjaXJjdWl0IGJyZWFrZXIuICBDYW4gYmU6XHJcbiAqICAgLSBgdW5kZWZpbmVkYDogIENyZWF0ZXMgYSBcIm5vLW9wXCIgY2lyY3VpdCBicmVha2VyIHRoYXQgaXMgYWx3YXlzIG9wZW4gKG5ldmVyIHRyaXBzKS5cclxuICogICAtIGB0cnVlYDogQ3JlYXRlcyBhIGNpcmN1aXQgYnJlYWtlciB3aXRoIGRlZmF1bHQgc2V0dGluZ3MgKHRocmVzaG9sZDogNSwgdGltZW91dDogMzAwMDBtcykuXHJcbiAqICAgLSBgQ2lyY3VpdEJyZWFrZXJgOiAgUmV1c2VzIGFuIGV4aXN0aW5nIGBDaXJjdWl0QnJlYWtlcmAgaW5zdGFuY2UuXHJcbiAqICAgLSBgeyB0aHJlc2hvbGQ/OiBudW1iZXI7IHRpbWVvdXQ/OiBudW1iZXI7IH1gOiBDcmVhdGVzIGEgY2lyY3VpdCBicmVha2VyIHdpdGggdGhlIHNwZWNpZmllZCB0aHJlc2hvbGQgYW5kIHRpbWVvdXQuXHJcbiAqXHJcbiAqIEByZXR1cm5zIEEgYENpcmN1aXRCcmVha2VyYCBpbnN0YW5jZS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogLy8gQ3JlYXRlIGEgY2lyY3VpdCBicmVha2VyIHdpdGggZGVmYXVsdCBzZXR0aW5nczpcclxuICogY29uc3QgYnJlYWtlciA9IGNyZWF0ZUNpcmN1aXRCcmVha2VyKCk7XHJcbiAqXHJcbiAqIC8vIENyZWF0ZSBhIGNpcmN1aXQgYnJlYWtlciB3aXRoIGN1c3RvbSBzZXR0aW5nczpcclxuICogY29uc3QgY3VzdG9tQnJlYWtlciA9IGNyZWF0ZUNpcmN1aXRCcmVha2VyKHsgdGhyZXNob2xkOiAxMCwgdGltZW91dDogNjAwMDAgfSk7XHJcbiAqXHJcbiAqIC8vIFNoYXJlIGEgc2luZ2xlIGNpcmN1aXQgYnJlYWtlciBpbnN0YW5jZSBhY3Jvc3MgbXVsdGlwbGUgcmVzb3VyY2VzOlxyXG4gKiBjb25zdCBzaGFyZWRCcmVha2VyID0gY3JlYXRlQ2lyY3VpdEJyZWFrZXIoKTtcclxuICogY29uc3QgcmVzb3VyY2UxID0gcXVlcnlSZXNvdXJjZSguLi4sIHsgY2lyY3VpdEJyZWFrZXI6IHNoYXJlZEJyZWFrZXIgfSk7XHJcbiAqIGNvbnN0IHJlc291cmNlMiA9IG11dGF0aW9uUmVzb3VyY2UoLi4uLCB7IGNpcmN1aXRCcmVha2VyOiBzaGFyZWRCcmVha2VyIH0pO1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNpcmN1aXRCcmVha2VyKFxyXG4gIG9wdD86IENpcmN1aXRCcmVha2VyT3B0aW9ucyxcclxuICBpbmplY3Rvcj86IEluamVjdG9yLFxyXG4pOiBDaXJjdWl0QnJlYWtlciB7XHJcbiAgaWYgKG9wdCA9PT0gZmFsc2UpIHJldHVybiBjcmVhdGVOZXZlckJyb2tlbkNpcmN1aXRCcmVha2VyKCk7XHJcblxyXG4gIGlmICh0eXBlb2Ygb3B0ID09PSAnb2JqZWN0JyAmJiAnaXNDbG9zZWQnIGluIG9wdCkgcmV0dXJuIG9wdDtcclxuXHJcbiAgY29uc3QgeyB0cmVzaG9sZCwgdGltZW91dCwgc2hvdWxkRmFpbCwgc2hvdWxkRmFpbEZvcmV2ZXIgfSA9IHtcclxuICAgIC4uLmluamVjdENpcmN1aXRCcmVha2VyT3B0aW9ucyhpbmplY3RvciksXHJcbiAgICAuLi5vcHQsXHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIGludGVybmFsQ2VhdGVDaXJjdWl0QnJlYWtlcihcclxuICAgIHRyZXNob2xkLFxyXG4gICAgdGltZW91dCxcclxuICAgIHNob3VsZEZhaWwsXHJcbiAgICBzaG91bGRGYWlsRm9yZXZlcixcclxuICApO1xyXG59XHJcbiJdfQ==","// 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 { HttpHeaders, HttpParams, } from '@angular/common/http';\nimport { 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 equalParamArray(a, b) {\n if (!a && !b)\n return true;\n if (!a || !b)\n return false;\n if (a.length !== b.length)\n return false;\n return a.every((value) => b.includes(value));\n}\nfunction headersToObject(headerClass) {\n const headers = {};\n headerClass.keys().forEach((key) => {\n const value = headerClass.getAll(key);\n if (value === null)\n return;\n if (value.length === 1) {\n headers[key] = value[0];\n }\n else {\n headers[key] = value;\n }\n });\n return headers;\n}\nfunction paramToObject(paramsClass) {\n const params = {};\n paramsClass.keys().forEach((key) => {\n const value = paramsClass.getAll(key);\n if (value === null)\n return;\n if (value.length === 1) {\n params[key] = value[0];\n }\n else {\n params[key] = value;\n }\n });\n return params;\n}\nfunction equalParams(a, b) {\n if (!a && !b)\n return true;\n if (!a || !b)\n return false;\n const aObj = a instanceof HttpParams ? paramToObject(a) : a;\n const bObj = b instanceof HttpParams ? paramToObject(b) : b;\n const aKeys = keys(aObj);\n const bKeys = keys(bObj);\n if (aKeys.length !== bKeys.length)\n return false;\n return aKeys.every((key) => {\n if (Array.isArray(aObj[key]) || Array.isArray(bObj[key])) {\n return equalParamArray(Array.isArray(aObj[key]) ? aObj[key] : [aObj[key]], Array.isArray(bObj[key]) ? bObj[key] : [bObj[key]]);\n }\n return aObj[key] === bObj[key];\n });\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 aObj = a instanceof HttpHeaders ? headersToObject(a) : a;\n const bObj = b instanceof HttpHeaders ? headersToObject(b) : b;\n const aKeys = keys(aObj);\n const bKeys = keys(bObj);\n if (aKeys.length !== bKeys.length)\n return false;\n return aKeys.every((key) => {\n if (Array.isArray(aObj[key]) || Array.isArray(bObj[key])) {\n return equalParamArray(Array.isArray(aObj[key]) ? aObj[key] : [aObj[key]], Array.isArray(bObj[key]) ? bObj[key] : [bObj[key]]);\n }\n return aObj[key] === bObj[key];\n });\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXF1YWxpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yZXNvdXJjZS9zcmMvbGliL3V0aWwvZXF1YWxpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFdBQVcsRUFDWCxVQUFVLEdBRVgsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTdDLFNBQVMsa0JBQWtCLENBQ3pCLENBQXVDLEVBQ3ZDLENBQXVDO0lBRXZDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDMUIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUUzQixJQUFJLE9BQU8sQ0FBQyxLQUFLLE9BQU8sQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3hDLElBQUksT0FBTyxDQUFDLEtBQUssU0FBUyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFNBQVM7UUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFckUsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3hELElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUV6RCxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRXRFLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRS9DLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxj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QyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ25ELElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDdEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBZSxFQUFFLENBQUMsQ0FBQyxJQUFlLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUM3RCxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRXRELElBQUksQ0FBQyxDQUFDLGVBQWUsS0FBSyxDQUFDLENBQUMsZUFBZTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzFELElBQUksQ0FBQyxDQUFDLGNBQWMsS0FBSyxDQUFDLENBQUMsY0FBYztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3hELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUV4RSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEh0dHBIZWFkZXJzLFxyXG4gIEh0dHBQYXJhbXMsXHJcbiAgSHR0cFJlc291cmNlUmVxdWVzdCxcclxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IHR5cGUgVmFsdWVFcXVhbGl0eUZuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGhhc2gsIGtleXMgfSBmcm9tICdAbW1zdGFjay9vYmplY3QnO1xyXG5cclxuZnVuY3Rpb24gZXF1YWxUcmFuc2ZlckNhY2hlKFxyXG4gIGE6IEh0dHBSZXNvdXJjZVJlcXVlc3RbJ3RyYW5zZmVyQ2FjaGUnXSxcclxuICBiOiBIdHRwUmVzb3VyY2VSZXF1ZXN0Wyd0cmFuc2ZlckNhY2hlJ10sXHJcbik6IGJvb2xlYW4ge1xyXG4gIGlmICghYSAmJiAhYikgcmV0dXJuIHRydWU7XHJcbiAgaWYgKCFhIHx8ICFiKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gIGlmICh0eXBlb2YgYSAhPT0gdHlwZW9mIGIpIHJldHVybiBmYWxzZTtcclxuICBpZiAodHlwZW9mIGEgPT09ICdib29sZWFuJyB8fCB0eXBlb2YgYiA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gYSA9PT0gYjtcclxuXHJcbiAgaWYgKCFhLmluY2x1ZGVIZWFkZXJzICYmICFiLmluY2x1ZGVIZWFkZXJzKSByZXR1cm4gdHJ1ZTtcclxuICBpZiAoIWEuaW5jbHVkZUhlYWRlcnMgfHwgIWIuaW5jbHVkZUhlYWRlcnMpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgaWYgKGEuaW5jbHVkZUhlYWRlcnMubGVuZ3RoICE9PSBiLmluY2x1ZGVIZWFkZXJzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICBpZiAoYS5pbmNsdWRlSGVhZGVycy5sZW5ndGggPT09IDApIHJldHVybiB0cnVlO1xyXG5cclxuICBjb25zdCBhU2V0ID0gbmV3IFNldChhLmluY2x1ZGVIZWFkZXJzID8/IFtdKTtcclxuXHJcbiAgcmV0dXJuIGIuaW5jbHVkZUhlYWRlcnMuZXZlcnkoKGhlYWRlcikgPT4gYVNldC5oYXMoaGVhZGVyKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVxdWFsUGFyYW1BcnJheShcclxuICBhOiBBcnJheTxzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPixcclxuICBiOiBBcnJheTxzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPixcclxuKTogYm9vbGVhbiB7XHJcbiAgaWYgKCFhICYmICFiKSByZXR1cm4gdHJ1ZTtcclxuICBpZiAoIWEgfHwgIWIpIHJldHVybiBmYWxzZTtcclxuICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gIHJldHVybiBhLmV2ZXJ5KCh2YWx1ZSkgPT4gYi5pbmNsdWRlcyh2YWx1ZSkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBoZWFkZXJzVG9PYmplY3QoaGVhZGVyQ2xhc3M6IEh0dHBIZWFkZXJzKSB7XHJcbiAgY29uc3QgaGVhZGVyczogRXhjbHVkZTxcclxuICAgIFJlcXVpcmVkPEh0dHBSZXNvdXJjZVJlcXVlc3RbJ2hlYWRlcnMnXT4sXHJcbiAgICBIdHRwSGVhZGVycyB8IHVuZGVmaW5lZFxyXG4gID4gPSB7fTtcclxuXHJcbiAgaGVhZGVyQ2xhc3Mua2V5cygpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgY29uc3QgdmFsdWUgPSBoZWFkZXJDbGFzcy5nZXRBbGwoa2V5KTtcclxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICBoZWFkZXJzW2tleV0gPSB2YWx1ZVswXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGhlYWRlcnNba2V5XSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gaGVhZGVycztcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyYW1Ub09iamVjdChwYXJhbXNDbGFzczogSHR0cFBhcmFtcykge1xyXG4gIGNvbnN0IHBhcmFtczogRXhjbHVkZTxcclxuICAgIFJlcXVpcmVkPEh0dHBSZXNvdXJjZVJlcXVlc3RbJ3BhcmFtcyddPixcclxuICAgIEh0dHBQYXJhbXMgfCB1bmRlZmluZWRcclxuICA+ID0ge307XHJcblxyXG4gIHBhcmFtc0NsYXNzLmtleXMoKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgIGNvbnN0IHZhbHVlID0gcGFyYW1zQ2xhc3MuZ2V0QWxsKGtleSk7XHJcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHtcclxuICAgICAgcGFyYW1zW2tleV0gPSB2YWx1ZVswXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBhcmFtc1trZXldID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBwYXJhbXM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVxdWFsUGFyYW1zKFxyXG4gIGE6IEh0dHBSZXNvdXJjZVJlcXVlc3RbJ3BhcmFtcyddLFxyXG4gIGI6IEh0dHBSZXNvdXJjZVJlcXVlc3RbJ3BhcmFtcyddLFxyXG4pOiBib29sZWFuIHtcclxuICBpZiAoIWEgJiYgIWIpIHJldHVybiB0cnVlO1xyXG4gIGlmICghYSB8fCAhYikgcmV0dXJuIGZhbHNlO1xyXG5cclxuICBjb25zdCBhT2JqID0gYSBpbnN0YW5jZW9mIEh0dHBQYXJhbXMgPyBwYXJhbVRvT2JqZWN0KGEpIDogYTtcclxuICBjb25zdCBiT2JqID0gYiBpbnN0YW5jZW9mIEh0dHBQYXJhbXMgPyBwYXJhbVRvT2JqZWN0KGIpIDogYjtcclxuXHJcbiAgY29uc3QgYUtleXMgPSBrZXlzKGFPYmopO1xyXG4gIGNvbnN0IGJLZXlzID0ga2V5cyhiT2JqKTtcclxuICBpZiAoYUtleXMubGVuZ3RoICE9PSBiS2V5cy5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgcmV0dXJuIGFLZXlzLmV2ZXJ5KChrZXkpID0+IHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGFPYmpba2V5XSkgfHwgQXJyYXkuaXNBcnJheShiT2JqW2tleV0pKSB7XHJcbiAgICAgIHJldHVybiBlcXVhbFBhcmFtQXJyYXkoXHJcbiAgICAgICAgQXJyYXkuaXNBcnJheShhT2JqW2tleV0pID8gYU9ialtrZXldIDogW2FPYmpba2V5XV0sXHJcbiAgICAgICAgQXJyYXkuaXNBcnJheShiT2JqW2tleV0pID8gYk9ialtrZXldIDogW2JPYmpba2V5XV0sXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGFPYmpba2V5XSA9PT0gYk9ialtrZXldO1xyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlcXVhbEJvZHkoXHJcbiAgYTogSHR0cFJlc291cmNlUmVxdWVzdFsnYm9keSddLFxyXG4gIGI6IEh0dHBSZXNvdXJjZVJlcXVlc3RbJ2JvZHknXSxcclxuKTogYm9vbGVhbiB7XHJcbiAgaWYgKCFhICYmICFiKSByZXR1cm4gdHJ1ZTtcclxuICBpZiAoIWEgfHwgIWIpIHJldHVybiBmYWxzZTtcclxuICByZXR1cm4gaGFzaChhKSA9PT0gaGFzaChiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZXF1YWxIZWFkZXJzKFxyXG4gIGE6IEh0dHBSZXNvdXJjZVJlcXVlc3RbJ2hlYWRlcnMnXSxcclxuICBiOiBIdHRwUmVzb3VyY2VSZXF1ZXN0WydoZWFkZXJzJ10sXHJcbik6IGJvb2xlYW4ge1xyXG4gIGlmICghYSAmJiAhYikgcmV0dXJuIHRydWU7XHJcbiAgaWYgKCFhIHx8ICFiKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gIGNvbnN0IGFPYmogPSBhIGluc3RhbmNlb2YgSHR0cEhlYWRlcnMgPyBoZWFkZXJzVG9PYmplY3QoYSkgOiBhO1xyXG4gIGNvbnN0IGJPYmogPSBiIGluc3RhbmNlb2YgSHR0cEhlYWRlcnMgPyBoZWFkZXJzVG9PYmplY3QoYikgOiBiO1xyXG5cclxuICBjb25zdCBhS2V5cyA9IGtleXMoYU9iaik7XHJcbiAgY29uc3QgYktleXMgPSBrZXlzKGJPYmopO1xyXG4gIGlmIChhS2V5cy5sZW5ndGggIT09IGJLZXlzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG4gIHJldHVybiBhS2V5cy5ldmVyeSgoa2V5KSA9PiB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhT2JqW2tleV0pIHx8IEFycmF5LmlzQXJyYXkoYk9ialtrZXldKSkge1xyXG4gICAgICByZXR1cm4gZXF1YWxQYXJhbUFycmF5KFxyXG4gICAgICAgIEFycmF5LmlzQXJyYXkoYU9ialtrZXldKSA/IGFPYmpba2V5XSA6IFthT2JqW2tleV1dLFxyXG4gICAgICAgIEFycmF5LmlzQXJyYXkoYk9ialtrZXldKSA/IGJPYmpba2V5XSA6IFtiT2JqW2tleV1dLFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBhT2JqW2tleV0gPT09IGJPYmpba2V5XTtcclxuICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gZXF1YWxDb250ZXh0KFxyXG4gIGE6IEh0dHBSZXNvdXJjZVJlcXVlc3RbJ2NvbnRleHQnXSxcclxuICBiOiBIdHRwUmVzb3VyY2VSZXF1ZXN0Wydjb250ZXh0J10sXHJcbik6IGJvb2xlYW4ge1xyXG4gIGlmICghYSAmJiAhYikgcmV0dXJuIHRydWU7XHJcbiAgaWYgKCFhIHx8ICFiKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gIGNvbnN0IGFLZXlzID0ga2V5cyhhKTtcclxuICBjb25zdCBiS2V5cyA9IGtleXMoYik7XHJcbiAgaWYgKGFLZXlzLmxlbmd0aCAhPT0gYktleXMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcbiAgcmV0dXJuIGFLZXlzLmV2ZXJ5KChrZXkpID0+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 persist(src, equal) {\n // linkedSignal allows us to access previous source value\n const persisted = linkedSignal({\n source: () => src(),\n computation: (next, prev) => {\n if (next === undefined && prev !== undefined)\n return prev.value;\n return next;\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 src) {\n persisted.set = src.set;\n persisted.update = src.update;\n persisted.asReadonly = src.asReadonly;\n }\n return persisted;\n}\nexport function persistResourceValues(resource, shouldPersist = false, equal) {\n if (!shouldPersist)\n return resource;\n return {\n ...resource,\n statusCode: persist(resource.statusCode),\n headers: persist(resource.headers),\n value: persist(resource.value, equal),\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc2lzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Jlc291cmNlL3NyYy9saWIvdXRpbC9wZXJzaXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxZQUFZLEdBSWIsTUFBTSxlQUFlLENBQUM7QUFTdkIsU0FBUyxPQUFPLENBQ2QsR0FBa0MsRUFDbEMsS0FBMEI7SUFFMUIseURBQXlEO0lBRXpELE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBTztRQUNuQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFO1FBQ25CLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUMxQixJQUFJLElBQUksS0FBSyxTQUFTLElBQUksSUFBSSxLQUFLLFNBQVM7Z0JBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ2hFLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELEtBQUs7S0FDTixDQUFDLENBQUM7SUFFSCx3S0FBd0s7SUFDeEssSUFBSSxLQUFLLElBQUksR0FBRyxFQUFFLENBQUM7UUFDakIsU0FBUyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ3hCLFNBQVMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUM5QixTQUFTLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUM7SUFDeEMsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQ25DLFFBQTRCLEVBQzVCLGFBQWEsR0FBRyxLQUFLLEVBQ3JCLEtBQTBCO0lBRTFCLElBQUksQ0FBQyxhQUFhO1FBQUUsT0FBTyxRQUFRLENBQUM7SUFFcEMsT0FBTztRQUNMLEdBQUcsUUFBUTtRQUNYLFVBQVUsRUFBRSxPQUFPLENBQXFCLFFBQVEsQ0FBQyxVQUFVLENBQUM7UUFDNUQsT0FBTyxFQUFFLE9BQU8sQ0FBMEIsUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUMzRCxLQUFLLEVBQUUsT0FBTyxDQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDO0tBQ3pDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBIdHRwSGVhZGVycywgdHlwZSBIdHRwUmVzb3VyY2VSZWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7XHJcbiAgbGlua2VkU2lnbmFsLFxyXG4gIHR5cGUgU2lnbmFsLFxyXG4gIHR5cGUgVmFsdWVFcXVhbGl0eUZuLFxyXG4gIHR5cGUgV3JpdGFibGVTaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5mdW5jdGlvbiBwZXJzaXN0PFQ+KFxyXG4gIHZhbHVlOiBXcml0YWJsZVNpZ25hbDxUPixcclxuICBlcXVhbD86IFZhbHVlRXF1YWxpdHlGbjxUPixcclxuKTogV3JpdGFibGVTaWduYWw8VD47XHJcblxyXG5mdW5jdGlvbiBwZXJzaXN0PFQ+KHZhbHVlOiBTaWduYWw8VD4sIGVxdWFsPzogVmFsdWVFcXVhbGl0eUZuPFQ+KTogU2lnbmFsPFQ+O1xyXG5cclxuZnVuY3Rpb24gcGVyc2lzdDxUPihcclxuICBzcmM6IFdyaXRhYmxlU2lnbmFsPFQ+IHwgU2lnbmFsPFQ+LFxyXG4gIGVxdWFsPzogVmFsdWVFcXVhbGl0eUZuPFQ+LFxyXG4pOiBXcml0YWJsZVNpZ25hbDxUPiB8IFNpZ25hbDxUPiB7XHJcbiAgLy8gbGlua2VkU2lnbmFsIGFsbG93cyB1cyB0byBhY2Nlc3MgcHJldmlvdXMgc291cmNlIHZhbHVlXHJcblxyXG4gIGNvbnN0IHBlcnNpc3RlZCA9IGxpbmtlZFNpZ25hbDxULCBUPih7XHJcbiAgICBzb3VyY2U6ICgpID0+IHNyYygpLFxyXG4gICAgY29tcHV0YXRpb246IChuZXh0LCBwcmV2KSA9PiB7XHJcbiAgICAgIGlmIChuZXh0ID09PSB1bmRlZmluZWQgJiYgcHJldiAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcHJldi52YWx1ZTtcclxuICAgICAgcmV0dXJuIG5leHQ7XHJcbiAgICB9LFxyXG4gICAgZXF1YWwsXHJcbiAgfSk7XHJcblxyXG4gIC8vIGlmIG9yaWdpbmFsIHZhbHVlIHdhcyBXcml0YWJsZVNpZ25hbCB0aGVuIG92ZXJyaWRlIGxpbmtlZFNpZ25hbCBtZXRob2RzIHRvIG9yaWdpbmFsLi4uYW5ndWxhciB1c2VzIGxpbmtlZFNpZ25hbCB1bmRlciB0aGUgaG9vZCBpbiBSZXNvdXJjZUltcGwsIHRoaXMgYXBwbGllcyB0byB0aGF0LlxyXG4gIGlmICgnc2V0JyBpbiBzcmMpIHtcclxuICAgIHBlcnNpc3RlZC5zZXQgPSBzcmMuc2V0O1xyXG4gICAgcGVyc2lzdGVkLnVwZGF0ZSA9IHNyYy51cGRhdGU7XHJcbiAgICBwZXJzaXN0ZWQuYXNSZWFkb25seSA9IHNyYy5hc1JlYWRvbmx5O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHBlcnNpc3RlZDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBlcnNpc3RSZXNvdXJjZVZhbHVlczxUPihcclxuICByZXNvdXJjZTogSHR0cFJlc291cmNlUmVmPFQ+LFxyXG4gIHNob3VsZFBlcnNpc3QgPSBmYWxzZSxcclxuICBlcXVhbD86IFZhbHVlRXF1YWxpdHlGbjxUPixcclxuKTogSHR0cFJlc291cmNlUmVmPFQ+IHtcclxuICBpZiAoIXNob3VsZFBlcnNpc3QpIHJldHVybiByZXNvdXJjZTtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIC4uLnJlc291cmNlLFxyXG4gICAgc3RhdHVzQ29kZTogcGVyc2lzdDxudW1iZXIgfCB1bmRlZmluZWQ+KHJlc291cmNlLnN0YXR1c0NvZGUpLFxyXG4gICAgaGVhZGVyczogcGVyc2lzdDxIdHRwSGVhZGVycyB8IHVuZGVmaW5lZD4ocmVzb3VyY2UuaGVhZGVycyksXHJcbiAgICB2YWx1ZTogcGVyc2lzdDxUPihyZXNvdXJjZS52YWx1ZSwgZXF1YWwpLFxyXG4gIH07XHJcbn1cclxuIl19","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 }, ...(ngDevMode ? [{ debugName: \"ref\" }] : []));\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cnktb24tZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yZXNvdXJjZS9zcmMvbGliL3V0aWwvcmV0cnktb24tZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVN2QywySUFBMkk7QUFDM0ksTUFBTSxVQUFVLFlBQVksQ0FDMUIsR0FBdUIsRUFDdkIsR0FBa0I7SUFFbEIsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLE1BQU0sT0FBTyxHQUFHLE9BQU8sR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFFdkUsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBRWhCLElBQUksT0FBa0QsQ0FBQztJQUV2RCxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUU7UUFDbkIsSUFBSSxPQUFPLElBQUksR0FBRztZQUFFLE9BQU87UUFDM0IsT0FBTyxFQUFFLENBQUM7UUFFVixJQUFJLE9BQU87WUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkMsVUFBVSxDQUNSLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFDbEIsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUN0RCxDQUFDO0lBQ0osQ0FBQyxDQUFDO0lBRUYsTUFBTSxTQUFTLEdBQUcsR0FBRyxFQUFFO1FBQ3JCLElBQUksT0FBTztZQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0lBRUYsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRTtRQUN0QixRQUFRLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQ3JCLEtBQUssT0FBTztnQkFDVixPQUFPLE9BQU8sRUFBRSxDQUFDO1lBQ25CLEtBQUssVUFBVTtnQkFDYixPQUFPLFNBQVMsRUFBRSxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDLCtDQUFDLENBQUM7SUFFSCxPQUFPO1FBQ0wsR0FBRyxHQUFHO1FBQ04sT0FBTyxFQUFFLEdBQUcsRUFBRTtZQUNaLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLDRCQUE0QjtZQUMzQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDaEIsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBIdHRwUmVzb3VyY2VSZWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IGVmZmVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuZXhwb3J0IHR5cGUgUmV0cnlPcHRpb25zID1cclxuICB8IG51bWJlclxyXG4gIHwge1xyXG4gICAgICBtYXg/OiBudW1iZXI7XHJcbiAgICAgIGJhY2tvZmY/OiBudW1iZXI7XHJcbiAgICB9O1xyXG5cclxuLy8gUmV0cnkgb24gZXJyb3IsIGlmIG51bWJlciBpcyBwcm92aWRlZCBpdCB3aWxsIHJldHJ5IHRoYXQgbWFueSB0aW1lcyB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmYsIG90aGVyd2lzZSBpdCB3aWxsIHVzZSB0aGUgb3B0aW9ucyBwcm92aWRlZFxyXG5leHBvcnQgZnVuY3Rpb24gcmV0cnlPbkVycm9yPFQ+KFxyXG4gIHJlczogSHR0cFJlc291cmNlUmVmPFQ+LFxyXG4gIG9wdD86IFJldHJ5T3B0aW9ucyxcclxuKTogSHR0cFJlc291cmNlUmVmPFQ+IHtcclxuICBjb25zdCBtYXggPSBvcHQgPyAodHlwZW9mIG9wdCA9PT0gJ251bWJlcicgPyBvcHQgOiAob3B0Lm1heCA/PyAwKSkgOiAwO1xyXG4gIGNvbnN0IGJhY2tvZmYgPSB0eXBlb2Ygb3B0ID09PSAnb2JqZWN0JyA/IChvcHQuYmFja29mZiA/PyAxMDAwKSA6IDEwMDA7XHJcblxyXG4gIGxldCByZXRyaWVzID0gMDtcclxuXHJcbiAgbGV0IHRpbWVvdXQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xyXG5cclxuICBjb25zdCBvbkVycm9yID0gKCkgPT4ge1xyXG4gICAgaWYgKHJldHJpZXMgPj0gbWF4KSByZXR1cm47XHJcbiAgICByZXRyaWVzKys7XHJcblxyXG4gICAgaWYgKHRpbWVvdXQpIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KFxyXG4gICAgICAoKSA9PiByZXMucmVsb2FkKCksXHJcbiAgICAgIHJldHJpZXMgPD0gMCA/IDAgOiBiYWNrb2ZmICogTWF0aC5wb3coMiwgcmV0cmllcyAtIDEpLFxyXG4gICAgKTtcclxuICB9O1xyXG5cclxuICBjb25zdCBvblN1Y2Nlc3MgPSAoKSA9PiB7XHJcbiAgICBpZiAodGltZW91dCkgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xyXG4gICAgcmV0cmllcyA9IDA7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgcmVmID0gZWZmZWN0KCgpID0+IHtcclxuICAgIHN3aXRjaCAocmVzLnN0YXR1cygpKSB7XHJcbiAgICAgIGNhc2UgJ2Vycm9yJzpcclxuICAgICAgICByZXR1cm4gb25FcnJvcigpO1xyXG4gICAgICBjYXNlICdyZXNvbHZlZCc6XHJcbiAgICAgICAgcmV0dXJuIG9uU3VjY2VzcygpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgLi4ucmVzLFxyXG4gICAgZGVzdHJveTogKCkgPT4ge1xyXG4gICAgICByZWYuZGVzdHJveSgpOyAvLyBjbGVhbnVwIG9uIG1hbnVhbCBkZXN0cm95XHJcbiAgICAgIHJlcy5kZXN0cm95KCk7XHJcbiAgICB9LFxyXG4gIH07XHJcbn1cclxuIl19","export function toResourceObject(res) {\n return {\n asReadonly: () => res.asReadonly(),\n destroy: () => res.destroy(),\n error: res.error,\n headers: res.headers,\n isLoading: res.isLoading,\n progress: res.progress,\n status: res.status,\n statusCode: res.statusCode,\n value: res.value,\n reload: () => res.reload(),\n hasValue: (() => res.hasValue()),\n set: (v) => res.set(v),\n update: (v) => res.update(v),\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG8tcmVzb3VyY2Utb2JqZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcmVzb3VyY2Uvc3JjL2xpYi91dGlsL3RvLXJlc291cmNlLW9iamVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLEdBQXVCO0lBRXZCLE9BQU87UUFDTCxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRTtRQUNsQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRTtRQUM1QixLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7UUFDaEIsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPO1FBQ3BCLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztRQUN4QixRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVE7UUFDdEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNO1FBQ2xCLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVTtRQUMxQixLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7UUFDaEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUU7UUFDMUIsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFtQztRQUNsRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7S0FDN0IsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwUmVzb3VyY2VSZWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1Jlc291cmNlT2JqZWN0PFQ+KFxuICByZXM6IEh0dHBSZXNvdXJjZVJlZjxUPixcbik6IEh0dHBSZXNvdXJjZVJlZjxUPiB7XG4gIHJldHVybiB7XG4gICAgYXNSZWFkb25seTogKCkgPT4gcmVzLmFzUmVhZG9ubHkoKSxcbiAgICBkZXN0cm95OiAoKSA9PiByZXMuZGVzdHJveSgpLFxuICAgIGVycm9yOiByZXMuZXJyb3IsXG4gICAgaGVhZGVyczogcmVzLmhlYWRlcnMsXG4gICAgaXNMb2FkaW5nOiByZXMuaXNMb2FkaW5nLFxuICAgIHByb2dyZXNzOiByZXMucHJvZ3Jlc3MsXG4gICAgc3RhdHVzOiByZXMuc3RhdHVzLFxuICAgIHN0YXR1c0NvZGU6IHJlcy5zdGF0dXNDb2RlLFxuICAgIHZhbHVlOiByZXMudmFsdWUsXG4gICAgcmVsb2FkOiAoKSA9PiByZXMucmVsb2FkKCksXG4gICAgaGFzVmFsdWU6ICgoKSA9PiByZXMuaGFzVmFsdWUoKSkgYXMgSHR0cFJlc291cmNlUmVmPFQ+WydoYXNWYWx1ZSddLFxuICAgIHNldDogKHYpID0+IHJlcy5zZXQodiksXG4gICAgdXBkYXRlOiAodikgPT4gcmVzLnVwZGF0ZSh2KSxcbiAgfTtcbn1cbiJdfQ==","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 .sort(([a], [b]) => a.localeCompare(b))\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLXdpdGgtcGFyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcmVzb3VyY2Uvc3JjL2xpYi91dGlsL3VybC13aXRoLXBhcmFtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUF1QixNQUFNLHNCQUFzQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUxQyxTQUFTLGVBQWUsQ0FDdEIsTUFBK0M7SUFFL0MsSUFBSSxNQUFNLFlBQVksVUFBVTtRQUFFLE9BQU8sTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBRTNELE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBRTNDLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUMzQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QixRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDN0QsQ0FBQzthQUFNLENBQUM7WUFDTixRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFELENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNsQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1NBQ3hDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLEdBQXdCO0lBQ3BELElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTTtRQUFFLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUVoQyxPQUFPLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDckQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBQYXJhbXMsIEh0dHBSZXNvdXJjZVJlcXVlc3QgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IGVudHJpZXMgfSBmcm9tICdAbW1zdGFjay9vYmplY3QnO1xyXG5cclxuZnVuY3Rpb24gbm9ybWFsaXplUGFyYW1zKFxyXG4gIHBhcmFtczogUmVxdWlyZWQ8SHR0cFJlc291cmNlUmVxdWVzdD5bJ3BhcmFtcyddLFxyXG4pOiBzdHJpbmcge1xyXG4gIGlmIChwYXJhbXMgaW5zdGFuY2VvZiBIdHRwUGFyYW1zKSByZXR1cm4gcGFyYW1zLnRvU3RyaW5nKCk7XHJcblxyXG4gIGNvbnN0IHBhcmFtTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcclxuXHJcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgZW50cmllcyhwYXJhbXMpKSB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgcGFyYW1NYXAuc2V0KGtleSwgdmFsdWUubWFwKGVuY29kZVVSSUNvbXBvbmVudCkuam9pbignLCcpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBhcmFtTWFwLnNldChrZXksIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZS50b1N0cmluZygpKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gQXJyYXkuZnJvbShwYXJhbU1hcC5lbnRyaWVzKCkpXHJcbiAgICAuc29ydCgoW2FdLCBbYl0pID0+IGEubG9jYWxlQ29tcGFyZShiKSlcclxuICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCR7a2V5fT0ke3ZhbHVlfWApXHJcbiAgICAuam9pbignJicpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdXJsV2l0aFBhcmFtcyhyZXE6IEh0dHBSZXNvdXJjZVJlcXVlc3QpOiBzdHJpbmcge1xyXG4gIGlmICghcmVxLnBhcmFtcykgcmV0dXJuIHJlcS51cmw7XHJcblxyXG4gIHJldHVybiBgJHtyZXEudXJsfT8ke25vcm1hbGl6ZVBhcmFtcyhyZXEucGFyYW1zKX1gO1xyXG59XHJcbiJdfQ==","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, toResourceObject, 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), options?.injector);\n const stableRequest = computed(() => {\n if (cb.isOpen())\n return undefined;\n return request() ?? undefined;\n }, ...(ngDevMode ? [{ debugName: \"stableRequest\", equal: options?.triggerOnSameRequest\n ? undefined\n : createEqualRequest(options?.equal) }] : [{\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 }, ...(ngDevMode ? [{ debugName: \"cacheKey\" }] : []));\n const bustBrowserCache = typeof options?.cache === 'object' &&\n options.cache.bustBrowserCache === true;\n const ignoreCacheControl = typeof options?.cache === 'object' &&\n options.cache.ignoreCacheControl === true;\n const parse = options?.parse ?? ((val) => val);\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 bustBrowserCache,\n ignoreCacheControl,\n }),\n };\n })\n : stableRequest;\n let resource = toResourceObject(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.getEntryOrKey(cacheKey);\n const cacheEntry = linkedSignal({\n source: () => cachedEvent(),\n computation: (entry, prev) => {\n if (!entry)\n return null;\n if (typeof entry === 'string' &&\n prev &&\n prev.value !== null &&\n prev.value.key === entry) {\n return prev.value;\n }\n if (typeof entry === 'string')\n return { key: entry, value: null };\n if (!(entry.value instanceof HttpResponse))\n return { key: entry.key, value: null };\n return {\n value: entry.value.body,\n key: entry.key,\n };\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 cacheEntry()?.value ?? 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 }, ...(ngDevMode ? [{ debugName: \"onErrorRef\" }] : []));\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(untracked(resource.error));\n else if (status === 'resolved')\n cb.success();\n }, ...(ngDevMode ? [{ debugName: \"cbEffectRef\" }] : []));\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 statusCode: linkedSignal(resource.statusCode),\n headers: linkedSignal(resource.headers),\n disabled: computed(() => cb.isOpen() || 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(stableRequest);\n const prefetchRequest = {\n ...request,\n ...partial,\n };\n if (!prefetchRequest.url)\n return Promise.resolve();\n const key = hashFn({\n ...prefetchRequest,\n url: prefetchRequest.url ?? '',\n });\n const found = cache.getUntracked(key);\n if (found && !found.isStale)\n return Promise.resolve();\n try {\n await firstValueFrom(client.request(prefetchRequest.method ?? 'GET', prefetchRequest.url, {\n ...prefetchRequest,\n credentials: prefetchRequest.credentials,\n priority: prefetchRequest.priority,\n cache: prefetchRequest.cache,\n mode: prefetchRequest.mode,\n redirect: prefetchRequest.redirect,\n context: setCacheContext(prefetchRequest.context, {\n staleTime,\n ttl,\n key: hashFn({\n ...prefetchRequest,\n url: prefetchRequest.url ?? '',\n }),\n bustBrowserCache,\n ignoreCacheControl,\n }),\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktcmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yZXNvdXJjZS9zcmMvbGliL3F1ZXJ5LXJlc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxVQUFVLEVBRVYsWUFBWSxFQUNaLFlBQVksR0FJYixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFDTCxRQUFRLEVBQ1IsVUFBVSxFQUNWLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFlBQVksRUFFWixTQUFTLEdBRVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUNMLGVBQWUsRUFFZixvQkFBb0IsRUFDcEIsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLE9BQU8sRUFDUCxZQUFZLEVBQ1osZUFBZSxFQUNmLGdCQUFnQixFQUNoQixhQUFhLEdBRWQsTUFBTSxRQUFRLENBQUM7QUF5SWhCLE1BQU0sVUFBVSxhQUFhLENBQzNCLE9BQXFELEVBQ3JELE9BQTZDO0lBRTdDLE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFVLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUUzRCxNQUFNLFVBQVUsR0FBRyxPQUFPLEVBQUUsUUFBUTtRQUNsQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFdkIsTUFBTSxFQUFFLEdBQUcsb0JBQW9CLENBQzdCLE9BQU8sRUFBRSxjQUFjLEtBQUssSUFBSTtRQUM5QixDQUFDLENBQUMsU0FBUztRQUNYLENBQUMsQ0FBQyxDQUFDLE9BQU8s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TSxJQUFJLEtBQUssRUFDL0IsZUFBZSxDQUFDLEdBQUcsRUFDbkI7b0JBQ0UsR0FBRyxlQUFlO29CQUNsQixXQUFXLEVBQUUsZUFBZSxDQUFDLFdBQTZDO29CQUMxRSxRQUFRLEVBQUUsZUFBZSxDQUFDLFFBQXVDO29CQUNqRSxLQUFLLEVBQUUsZUFBZSxDQUFDLEtBQWlDO29CQUN4RCxJQUFJLEVBQUUsZUFBZSxDQUFDLElBQStCO29CQUNyRCxRQUFRLEVBQUUsZUFBZSxDQUFDLFFBQXVDO29CQUNqRSxPQUFPLEVBQUUsZUFBZSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUU7d0JBQ2hELFNBQVM7d0JBQ1QsR0FBRzt3QkFDSCxHQUFHLEVBQUUsTUFBTSxDQUFDOzRCQUNWLEdBQUcsZUFBZTs0QkFDbEIsR0FBRyxFQUFFLGVBQWUsQ0FBQyxHQUFHLElBQUksRUFBRTt5QkFDL0IsQ0FBQzt3QkFDRixnQkFBZ0I7d0JBQ2hCLGtCQUFrQjtxQkFDbkIsQ0FBQztvQkFDRixPQUFPLEVBQUUsZUFBZSxDQUFDLE9BQXNCO29CQUMvQyxPQUFPLEVBQUUsVUFBVTtpQkFDcEIsQ0FDRixDQUNGLENBQUM7Z0JBRUYsT0FBTztZQUNULENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLElBQUksU0FBUyxFQUFFO29CQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3pELE9BQU87WUFDVCxDQUFDO1FBQ0gsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBIdHRwQ2xpZW50LFxyXG4gIEh0dHBIZWFkZXJzLFxyXG4gIGh0dHBSZXNvdXJjZSxcclxuICBIdHRwUmVzcG9uc2UsXHJcbiAgdHlwZSBIdHRwUmVzb3VyY2VPcHRpb25zLFxyXG4gIHR5cGUgSHR0cFJlc291cmNlUmVmLFxyXG4gIHR5cGUgSHR0cFJlc291cmNlUmVxdWVzdCxcclxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7XHJcbiAgY29tcHV0ZWQsXHJcbiAgRGVzdHJveVJlZixcclxuICBlZmZlY3QsXHJcbiAgaW5qZWN0LFxyXG4gIGlzRGV2TW9kZSxcclxuICBsaW5rZWRTaWduYWwsXHJcbiAgU2lnbmFsLFxyXG4gIHVudHJhY2tlZCxcclxuICBXcml0YWJsZVNpZ25hbCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgdG9Xcml0YWJsZSB9IGZyb20gJ0BtbXN0YWNrL3ByaW1pdGl2ZXMnO1xyXG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIGNhdGNoVmFsdWVFcnJvcixcclxuICBDaXJjdWl0QnJlYWtlck9wdGlvbnMsXHJcbiAgY3JlYXRlQ2lyY3VpdEJyZWFrZXIsXHJcbiAgY3JlYXRlRXF1YWxSZXF1ZXN0LFxyXG4gIGhhc1Nsb3dDb25uZWN0aW9uLFxyXG4gIGluamVjdFF1ZXJ5Q2FjaGUsXHJcbiAgcGVyc2lzdFJlc291cmNlVmFsdWVzLFxyXG4gIHJlZnJlc2gsXHJcbiAgcmV0cnlPbkVycm9yLFxyXG4gIHNldENhY2hlQ29udGV4dCxcclxuICB0b1Jlc291cmNlT2JqZWN0LFxyXG4gIHVybFdpdGhQYXJhbXMsXHJcbiAgdHlwZSBSZXRyeU9wdGlvbnMsXHJcbn0gZnJvbSAnLi91dGlsJztcclxuaW1wb3J0IHsgQ2FjaGVFbnRyeSB9IGZyb20gJy4vdXRpbC9jYWNoZS9jYWNoZSc7XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgY2FjaGluZyBiZWhhdmlvciBvZiBhIGBxdWVyeVJlc291cmNlYC5cclxuICogLSBgdHJ1ZWA6IEVuYWJsZXMgY2FjaGluZyB3aXRoIGRlZmF1bHQgc2V0dGluZ3MuXHJcbiAqIC0gYHsgdHRsPzogbnVtYmVyOyBzdGFsZVRpbWU/OiBudW1iZXI7IGhhc2g/OiAocmVxOiBIdHRwUmVzb3VyY2VSZXF1ZXN0KSA9PiBzdHJpbmc7IH1gOiAgQ29uZmlndXJlcyBjYWNoaW5nIHdpdGggY3VzdG9tIHNldHRpbmdzLlxyXG4gKi9cclxudHlwZSBSZXNvdXJjZUNhY2hlT3B0aW9ucyA9XHJcbiAgfCB0cnVlXHJcbiAgfCB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBUaGUgVGltZSBUbyBMaXZlIChUVEwpIGZvciB0aGUgY2FjaGVkIGRhdGEsIGluIG1pbGxpc2Vjb25kcy4gQWZ0ZXIgdGhpcyB0aW1lLCB0aGUgY2FjaGVkIGRhdGEgaXNcclxuICAgICAgICogY29uc2lkZXJlZCBleHBpcmVkIGFuZCB3aWxsIGJlIHJlZmV0Y2hlZC5cclxuICAgICAgICovXHJcbiAgICAgIHR0bD86IG51bWJlcjtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFRoZSBkdXJhdGlvbiwgaW4gbWlsbGlzZWNvbmRzLCBkdXJpbmcgd2hpY2ggc3RhbGUgZGF0YSBjYW4gYmUgc2VydmVkIHdoaWxlIGEgcmV2YWxpZGF0aW9uIHJlcXVlc3RcclxuICAgICAgICogaXMgbWFkZSBpbiB0aGUgYmFja2dyb3VuZC5cclxuICAgICAgICovXHJcbiAgICAgIHN0YWxlVGltZT86IG51bWJlcjtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEEgY3VzdG9tIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHRoZSBjYWNoZSBrZXkuIERlZmF1bHRzIHRvIHVzaW5nIHRoZSByZXF1ZXN0IFVSTCB3aXRoIHBhcmFtZXRlcnMuXHJcbiAgICAgICAqIFByb3ZpZGUgYSBjdXN0b20gaGFzaCBmdW5jdGlvbiBpZiB5b3UgbmVlZCBtb3JlIGNvbnRyb2wgb3ZlciBob3cgY2FjaGUga2V5cyBhcmUgZ2VuZXJhdGVkLFxyXG4gICAgICAgKiBmb3IgaW5zdGFuY2UsIHRvIGlnbm9yZSBjZXJ0YWluIHF1ZXJ5IHBhcmFtZXRlcnMgb3IgdG8gdXNlIHJlcXVlc3QgYm9keSBmb3IgdGhlIGNhY2hlIGtleS5cclxuICAgICAgICovXHJcbiAgICAgIGhhc2g/OiAocmVxOiBIdHRwUmVzb3VyY2VSZXF1ZXN0KSA9PiBzdHJpbmc7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBXaGV0aGVyIHRvIGJ1c3QgdGhlIGJyb3dzZXIgY2FjaGUgYnkgYXBwZW5kaW5nIGEgdW5pcXVlIHF1ZXJ5IHBhcmFtZXRlciB0byB0aGUgcmVxdWVzdCBVUkwuXHJcbiAgICAgICAqIFRoaXMgaXMgdXNlZnVsIGZvciBlbnN1cmluZyB0aGF0IHRoZSBsYXRlc3QgZGF0YSBpcyBmZXRjaGVkIGZyb20gdGhlIHNlcnZlciwgYnlwYXNzaW5nIGFueVxyXG4gICAgICAgKiBjYWNoZWQgcmVzcG9uc2VzIGluIHRoZSBicm93c2VyLiBUaGUgdW5pcXVlIHBhcmFtZXRlciBpcyByZW1vdmVkIGJlZm9yZSBjYWxsaW5nIHRoZSBjYWNoZSBmdW5jdGlvbiwgc28gaXQgZG9lcyBub3QgYWZmZWN0IHRoZSBjYWNoZSBrZXkuXHJcbiAgICAgICAqIEBkZWZhdWx0IGZhbHNlIC0gQnkgZGVmYXVsdCwgdGhlIHJlc291cmNlIHdpbGwgbm90IGJ1c3QgdGhlIGJyb3dzZXIgY2FjaGUuXHJcbiAgICAgICAqL1xyXG4gICAgICBidXN0QnJvd3NlckNhY2hlPzogYm9vbGVhbjtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFdoZXRoZXIgdG8gaWdub3JlIHRoZSBgQ2FjaGUtQ29udHJvbGAgaGVhZGVycyBmcm9tIHRoZSBzZXJ2ZXIgd2hlbiBjYWNoaW5nIHJlc3BvbnNlcy5cclxuICAgICAgICogSWYgc2V0IHRvIGB0cnVlYCwgdGhlIHJlc291cmNlIHdpbGwgbm90IHJlc3BlY3QgYW55IGNhY2hlIGRpcmVjdGl2ZXMgZnJvbSB0aGUgc2VydmVyLFxyXG4gICAgICAgKiBhbGxvd2luZyB5b3UgdG8gY29udHJvbCBjYWNoaW5nIGJlaGF2aW9yIGVudGlyZWx5IHRocm91Z2ggdGhlIHJlc291cmNlIG9wdGlvbnMuXHJcbiAgICAgICAqIEBkZWZhdWx0IGZhbHNlIC0gQnkgZGVmYXVsdCB0aGUgcmVzb3VyY2Ugd2lsbCByZXNwZWN0IGBDYWNoZS1Db250cm9sYCBoZWFkZXJzLlxyXG4gICAgICAgKi9cclxuICAgICAgaWdub3JlQ2FjaGVDb250cm9sPzogYm9vbGVhbjtcclxuICAgIH07XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgYSBgcXVlcnlSZXNvdXJjZWAuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBRdWVyeVJlc291cmNlT3B0aW9uczxUUmVzdWx0LCBUUmF3ID0gVFJlc3VsdD4gPSBIdHRwUmVzb3VyY2VPcHRpb25zPFxyXG4gIFRSZXN1bHQsXHJcbiAgVFJhd1xyXG4+ICYge1xyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdG8ga2VlcCB0aGUgcHJldmlvdXMgdmFsdWUgb2YgdGhlIHJlc291cmNlIHdoaWxlIGEgcmVmcmVzaCBpcyBpbiBwcm9ncmVzcy5cclxuICAgKiBEZWZhdWx0cyB0byBgZmFsc2VgLiBBbHNvIGtlZXBzIHN0YXR1cyAmIGhlYWRlcnMgd2hpbGUgcmVmcmVzaGluZy5cclxuICAgKi9cclxuICBrZWVwUHJldmlvdXM/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIFRoZSByZWZyZXNoIGludGVydmFsLCBpbiBtaWxsaXNlY29uZHMuIElmIHByb3ZpZGVkLCB0aGUgcmVzb3VyY2Ugd2lsbCBhdXRvbWF0aWNhbGx5XHJcbiAgICogcmVmcmVzaCBpdHMgZGF0YSBhdCB0aGUgc3BlY2lmaWVkIGludGVydmFsLlxyXG4gICAqL1xyXG4gIHJlZnJlc2g/OiBudW1iZXI7XHJcbiAgLyoqXHJcbiAgICogT3B0aW9ucyBmb3IgcmV0cnlpbmcgZmFpbGVkIHJlcXVlc3RzLlxyXG4gICAqL1xyXG4gIHJldHJ5PzogUmV0cnlPcHRpb25zO1xyXG4gIC8qKlxyXG4gICAqIEFuIG9wdGlvbmFsIGVycm9yIGhhbmRsZXIgY2FsbGJhY2suICBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZVxyXG4gICAqIHVuZGVybHlpbmcgSFRUUCByZXF1ZXN0IGZhaWxzLiBVc2VmdWwgZm9yIGRpc3BsYXlpbmcgdG9hc3RzIG9yIG90aGVyIGVycm9yIG1lc3NhZ2VzLlxyXG4gICAqL1xyXG4gIG9uRXJyb3I/OiAoZXJyOiB1bmtub3duKSA9PiB2b2lkO1xyXG4gIC8qKlxyXG4gICAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGEgY2lyY3VpdCBicmVha2VyIGZvciB0aGUgcmVzb3VyY2UuXHJcbiAgICovXHJcbiAgY2lyY3VpdEJyZWFrZXI/OiBDaXJjdWl0QnJlYWtlck9wdGlvbnMgfCB0cnVlO1xyXG4gIC8qKlxyXG4gICAqIE9wdGlvbnMgZm9yIGVuYWJsaW5nIGFuZCBjb25maWd1cmluZyBjYWNoaW5nIGZvciB0aGUgcmVzb3VyY2UuXHJcbiAgICovXHJcbiAgY2FjaGU/OiBSZXNvdXJjZUNhY2hlT3B0aW9ucztcclxuICAvKipcclxuICAgKiBUcmlnZ2VyIGEgcmVxdWVzdCBldmVyeSB0aW1lIHRoZSByZXF1ZXN0IGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCwgZXZlbiBpZiB0aGUgcmVxdWVzdCBwYXJhbWV0ZXJzIGFyZSB0aGUgc2FtZS5cclxuICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAqL1xyXG4gIHRyaWdnZXJPblNhbWVSZXF1ZXN0PzogYm9vbGVhbjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXByZXNlbnRzIGEgcmVzb3VyY2UgY3JlYXRlZCBieSBgcXVlcnlSZXNvdXJjZWAuIEV4dGVuZHMgYEh0dHBSZXNvdXJjZVJlZmAgd2l0aCBhZGRpdGlvbmFsIHByb3BlcnRpZXMuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBRdWVyeVJlc291cmNlUmVmPFRSZXN1bHQ+ID0gT21pdDxcclxuICBIdHRwUmVzb3VyY2VSZWY8VFJlc3VsdD4sXHJcbiAgJ2hlYWRlcnMnIHwgJ3N0YXR1c0NvZGUnXHJcbj4gJiB7XHJcbiAgLyoqXHJcbiAgICogTGlua2Vkc2lnbmFsIG9mIHRoZSByZXNwb25zZSBoZWFkZXJzLCB3aGVuIGF2YWlsYWJsZS5cclxuICAgKi9cclxuICByZWFkb25seSBoZWFkZXJzOiBXcml0YWJsZVNpZ25hbDxIdHRwSGVhZGVycyB8IHVuZGVmaW5lZD47XHJcbiAgLyoqXHJcbiAgICogTGlua2Vkc2lnbmFsIG9mIHRoZSByZXNwb25zZSBzdGF0dXMgY29kZSwgd2hlbiBhdmFpbGFibGUuXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgc3RhdHVzQ29kZTogV3JpdGFibGVTaWduYWw8bnVtYmVyIHwgdW5kZWZpbmVkPjtcclxuICAvKipcclxuICAgKiBBIHNpZ25hbCBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHJlc291cmNlIGlzIGN1cnJlbnRseSBkaXNhYmxlZCAoZHVlIHRvIGNpcmN1aXQgYnJlYWtlciBvciB1bmRlZmluZWQgcmVxdWVzdCkuXHJcbiAgICovXHJcbiAgZGlzYWJsZWQ6IFNpZ25hbDxib29sZWFuPjtcclxuICAvKipcclxuICAgKiBQcmVmZXRjaGVzIGRhdGEgZm9yIHRoZSByZXNvdXJjZSwgcG9wdWxhdGluZyB0aGUgY2FjaGUgaWYgY2FjaGluZyBpcyBlbmFibGVkLiAgVGhpcyBjYW4gYmVcclxuICAgKiB1c2VkIHRvIHByb2FjdGl2ZWx5IGxvYWQgZGF0YSBiZWZvcmUgaXQncyBuZWVkZWQuICBJZiBhIHNsb3cgY29ubmVjdGlvbiBpcyBkZXRlY3RlZCwgcHJlZmV0Y2hpbmcgaXMgc2tpcHBlZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSByZXEgLSBPcHRpb25hbCBwYXJ0aWFsIHJlcXVlc3QgcGFyYW1ldGVycyB0byB1c2UgZm9yIHRoZSBwcmVmZXRjaC4gIFRoaXMgYWxsb3dzIHlvdVxyXG4gICAqICAgICAgICAgICAgICB0byBwcmVmZXRjaCBkYXRhIHdpdGggZGlmZmVyZW50IHBhcmFtZXRlcnMgdGhhbiB0aGUgbWFpbiByZXNvdXJjZSByZXF1ZXN0LlxyXG4gICAqL1xyXG4gIHByZWZldGNoOiAocmVxPzogUGFydGlhbDxIdHRwUmVzb3VyY2VSZXF1ZXN0PikgPT4gUHJvbWlzZTx2b2lkPjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBxdWVyeVJlc291cmNlPFRSZXN1bHQsIFRSYXcgPSBUUmVzdWx0PihcclxuICByZXF1ZXN0OiAoKSA9PiBIdHRwUmVzb3VyY2VSZXF1ZXN0IHwgdW5kZWZpbmVkIHwgdm9pZCxcclxuICBvcHRpb25zOiBRdWVyeVJlc291cmNlT3B0aW9uczxUUmVzdWx0LCBUUmF3PiAmIHtcclxuICAgIGRlZmF1bHRWYWx1ZTogTm9JbmZlcjxUUmVzdWx0PjtcclxuICB9LFxyXG4pOiBRdWVyeVJlc291cmNlUmVmPFRSZXN1bHQ+O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYW4gZXh0ZW5kZWQgSFRUUCByZXNvdXJjZSB3aXRoIGZlYXR1cmVzIGxpa2UgY2FjaGluZywgcmV0cmllcywgcmVmcmVzaCBpbnRlcnZhbHMsXHJcbiAqIGNpcmN1aXQgYnJlYWtlciwgYW5kIG9wdGltaXN0aWMgdXBkYXRlcy4gV2l0aG91dCBhZGRpdGlvbmFsIG9wdGlvbnMgaXQgaXMgZXF1aXZhbGVudCB0byBzaW1wbHkgY2FsbGluZyBgaHR0cFJlc291cmNlYC5cclxuICpcclxuICogQHBhcmFtIHJlcXVlc3QgQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGBIdHRwUmVzb3VyY2VSZXF1ZXN0YCB0byBiZSBtYWRlLiAgVGhpcyBmdW5jdGlvblxyXG4gKiAgICAgICAgICAgICAgICBpcyBjYWxsZWQgcmVhY3RpdmVseSwgc28gdGhlIHJlcXVlc3QgY2FuIGNoYW5nZSBvdmVyIHRpbWUuICBJZiB0aGUgZnVuY3Rpb25cclxuICogICAgICAgICAgICAgICAgcmV0dXJucyBgdW5kZWZpbmVkYCwgdGhlIHJlc291cmNlIGlzIGNvbnNpZGVyZWQgXCJkaXNhYmxlZFwiIGFuZCBubyByZXF1ZXN0IHdpbGwgYmUgbWFkZS5cclxuICogQHBhcmFtIG9wdGlvbnMgQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgcmVzb3VyY2UuICBUaGVzZSBvcHRpb25zIGV4dGVuZCB0aGUgYmFzaWNcclxuICogICAgICAgICAgICAgICAgYEh0dHBSZXNvdXJjZU9wdGlvbnNgIGFuZCBhZGQgZmVhdHVyZXMgbGlrZSBga2VlcFByZXZpb3VzYCwgYHJlZnJlc2hgLCBgcmV0cnlgLFxyXG4gKiAgICAgICAgICAgICAgICBgb25FcnJvcmAsIGBjaXJjdWl0QnJlYWtlcmAsIGFuZCBgY2FjaGVgLlxyXG4gKiBAcmV0dXJucyBBbiBgUXVlcnlSZXNvdXJjZVJlZmAgaW5zdGFuY2UsIHdoaWNoIGV4dGVuZHMgdGhlIGJhc2ljIGBIdHRwUmVzb3VyY2VSZWZgIHdpdGggYWRkaXRpb25hbCBmZWF0dXJlcy5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBxdWVyeVJlc291cmNlPFRSZXN1bHQsIFRSYXcgPSBUUmVzdWx0PihcclxuICByZXF1ZXN0OiAoKSA9PiBIdHRwUmVzb3VyY2VSZXF1ZXN0IHwgdW5kZWZpbmVkIHwgdm9pZCxcclxuICBvcHRpb25zPzogUXVlcnlSZXNvdXJjZU9wdGlvbnM8VFJlc3VsdCwgVFJhdz4sXHJcbik6IFF1ZXJ5UmVzb3VyY2VSZWY8VFJlc3VsdCB8IHVuZGVmaW5lZD47XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlSZXNvdXJjZTxUUmVzdWx0LCBUUmF3ID0gVFJlc3VsdD4oXHJcbiAgcmVxdWVzdDogKCkgPT4gSHR0cFJlc291cmNlUmVxdWVzdCB8IHVuZGVmaW5lZCB8IHZvaWQsXHJcbiAgb3B0aW9ucz86IFF1ZXJ5UmVzb3VyY2VPcHRpb25zPFRSZXN1bHQsIFRSYXc+LFxyXG4pOiBRdWVyeVJlc291cmNlUmVmPFRSZXN1bHQgfCB1bmRlZmluZWQ+IHtcclxuICBjb25zdCBjYWNoZSA9IGluamVjdFF1ZXJ5Q2FjaGU8VFJlc3VsdD4ob3B0aW9ucz8uaW5qZWN0b3IpO1xyXG5cclxuICBjb25zdCBkZXN0cm95UmVmID0gb3B0aW9ucz8uaW5qZWN0b3JcclxuICAgID8gb3B0aW9ucy5pbmplY3Rvci5nZXQoRGVzdHJveVJlZilcclxuICAgIDogaW5qZWN0KERlc3Ryb3lSZWYpO1xyXG5cclxuICBjb25zdCBjYiA9IGNyZWF0ZUNpcmN1aXRCcmVha2VyKFxyXG4gICAgb3B0aW9ucz8uY2lyY3VpdEJyZWFrZXIgPT09IHRydWVcclxuICAgICAgPyB1bmRlZmluZWRcclxuICAgICAgOiAob3B0aW9ucz8uY2lyY3VpdEJyZWFrZXIgPz8gZmFsc2UpLFxyXG4gICAgb3B0aW9ucz8uaW5qZWN0b3IsXHJcbiAgKTtcclxuXHJcbiAgY29uc3Qgc3RhYmxlUmVxdWVzdCA9IGNvbXB1dGVkKFxyXG4gICAgKCkgPT4ge1xyXG4gICAgICBpZiAoY2IuaXNPcGVuKCkpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgIHJldHVybiByZXF1ZXN0KCkgPz8gdW5kZWZpbmVkO1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgZXF1YWw6IG9wdGlvbnM/LnRyaWdnZXJPblNhbWVSZXF1ZXN0XHJcbiAgICAgICAgPyB1bmRlZmluZWRcclxuICAgICAgICA6IGNyZWF0ZUVxdWFsUmVxdWVzdChvcHRpb25zPy5lcXVhbCksXHJcbiAgICB9LFxyXG4gICk7XHJcblxyXG4gIGNvbnN0IGhhc2hGbiA9XHJcbiAgICB0eXBlb2Ygb3B0aW9ucz8uY2FjaGUgPT09ICdvYmplY3QnXHJcbiAgICAgID8gKG9wdGlvbnMuY2FjaGUuaGFzaCA/PyB1cmxXaXRoUGFyYW1zKVxyXG4gICAgICA6IHVybFdpdGhQYXJhbXM7XHJcblxyXG4gIGNvbnN0IHN0YWxlVGltZSA9XHJcbiAgICB0eXBlb2Ygb3B0aW9ucz8uY2FjaGUgPT09ICdvYmplY3QnID8gb3B0aW9ucy5jYWNoZS5zdGFsZVRpbWUgOiAwO1xyXG4gIGNvbnN0IHR0bCA9XHJcbiAgICB0eXBlb2Ygb3B0aW9ucz8uY2FjaGUgPT09ICdvYmplY3QnID8gb3B0aW9ucy5jYWNoZS50dGwgOiB1bmRlZmluZWQ7XHJcblxyXG4gIGNvbnN0IGNhY2hlS2V5ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgY29uc3QgciA9IHN0YWJsZVJlcXVlc3QoKTtcclxuICAgIGlmICghcikgcmV0dXJuIG51bGw7XHJcbiAgICByZXR1cm4gaGFzaEZuKHIpO1xyXG4gIH0pO1xyXG5cclxuICBjb25zdCBidXN0QnJvd3NlckNhY2hlID1cclxuICAgIHR5cGVvZiBvcHRpb25zPy5jYWNoZSA9PT0gJ29iamVjdCcgJiZcclxuICAgIG9wdGlvbnMuY2FjaGUuYnVzdEJyb3dzZXJDYWNoZSA9PT0gdHJ1ZTtcclxuXHJcbiAgY29uc3QgaWdub3JlQ2FjaGVDb250cm9sID1cclxuICAgIHR5cGVvZiBvcHRpb25zPy5jYWNoZSA9PT0gJ29iamVjdCcgJiZcclxuICAgIG9wdGlvbnMuY2FjaGUuaWdub3JlQ2FjaGVDb250cm9sID09PSB0cnVlO1xyXG5cclxuICBjb25zdCBwYXJzZSA9IG9wdGlvbnM/LnBhcnNlID8/ICgodmFsOiBUUmF3KSA9PiB2YWwgYXMgdW5rbm93biBhcyBUUmVzdWx0KTtcclxuXHJcbiAgY29uc3QgY2FjaGVkUmVxdWVzdCA9IG9wdGlvbnM/LmNhY2hlXHJcbiAgICA/IGNvbXB1dGVkKCgpID0+IHtcclxuICAgICAgICBjb25zdCByID0gc3RhYmxlUmVxdWVzdCgpO1xyXG4gICAgICAgIGlmICghcikgcmV0dXJuIHI7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi5yLFxyXG4gICAgICAgICAgY29udGV4dDogc2V0Q2FjaGVDb250ZXh0KHIuY29udGV4dCwge1xyXG4gICAgICAgICAgICBzdGFsZVRpbWUsXHJcbiAgICAgICAgICAgIHR0bCxcclxuICAgICAgICAgICAga2V5OiBjYWNoZUtleSgpID8/IGhhc2hGbihyKSxcclxuICAgICAgICAgICAgYnVzdEJyb3dzZXJDYWNoZSxcclxuICAgICAgICAgICAgaWdub3JlQ2FjaGVDb250cm9sLFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgfTtcclxuICAgICAgfSlcclxuICAgIDogc3RhYmxlUmVxdWVzdDtcclxuXHJcbiAgbGV0IHJlc291cmNlID0gdG9SZXNvdXJjZU9iamVjdChcclxuICAgIGh0dHBSZXNvdXJjZTxUUmVzdWx0PihjYWNoZWRSZXF1ZXN0LCB7XHJcbiAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgIHBhcnNlOiBvcHRpb25zPy5wYXJzZSBhcyBhbnksIC8vIE5vdCBteSBmYXZvcml0ZSB0aGluZyB0byBkbywgYnV0IGhlcmUgaXQgaXMgY29tcGxldGVseSBzYWZlLlxyXG4gICAgfSkgYXMgSHR0cFJlc291cmNlUmVmPFRSZXN1bHQ+LFxyXG4gICk7XHJcblxyXG4gIHJlc291cmNlID0gY2F0Y2hWYWx1ZUVycm9yKHJlc291cmNlLCBvcHRpb25zPy5kZWZhdWx0VmFsdWUgYXMgVFJlc3VsdCk7XHJcblxyXG4gIC8vIGdldCBmdWxsIEh0dHBSZXNvbnNlIGZyb20gQ2FjaGVcclxuICBjb25zdCBjYWNoZWRFdmVudCA9IGNhY2hlLmdldEVudHJ5T3JLZXkoY2FjaGVLZXkpO1xyXG5cclxuICBjb25zdCBjYWNoZUVudHJ5ID0gbGlua2VkU2lnbmFsPFxyXG4gICAgQ2FjaGVFbnRyeTxIdHRwUmVzcG9uc2U8VFJlc3VsdD4+IHwgc3RyaW5nIHwgbnVsbCxcclxuICAgIHsga2V5OiBzdHJpbmc7IHZhbHVlOiBUUmVzdWx0IHwgbnVsbCB9IHwgbnVsbFxyXG4gID4oe1xyXG4gICAgc291cmNlOiAoKSA9PiBjYWNoZWRFdmVudCgpLFxyXG4gICAgY29tcHV0YXRpb246IChlbnRyeSwgcHJldikgPT4ge1xyXG4gICAgICBpZiAoIWVudHJ5KSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnICYmXHJcbiAgICAgICAgcHJldiAmJlxyXG4gICAgICAgIHByZXYudmFsdWUgIT09IG51bGwgJiZcclxuICAgICAgICBwcmV2LnZhbHVlLmtleSA9PT0gZW50cnlcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuIHByZXYudmFsdWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSByZXR1cm4geyBrZXk6IGVudHJ5LCB2YWx1ZTogbnVsbCB9O1xyXG5cclxuICAgICAgaWYgKCEoZW50cnkudmFsdWUgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UpKVxyXG4gICAgICAgIHJldHVybiB7IGtleTogZW50cnkua2V5LCB2YWx1ZTogbnVsbCB9O1xyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB2YWx1ZTogZW50cnkudmFsdWUuYm9keSxcclxuICAgICAgICBrZXk6IGVudHJ5LmtleSxcclxuICAgICAgfTtcclxuICAgIH0sXHJcbiAgfSk7XHJcblxyXG4gIHJlc291cmNlID0gcmVmcmVzaChyZXNvdXJjZSwgZGVzdHJveVJlZiwgb3B0aW9ucz8ucmVmcmVzaCk7XHJcbiAgcmVzb3VyY2UgPSByZXRyeU9uRXJyb3IocmVzb3VyY2UsIG9wdGlvbnM/LnJldHJ5KTtcclxuXHJcbiAgcmVzb3VyY2UgPSBwZXJzaXN0UmVzb3VyY2VWYWx1ZXM8VFJlc3VsdD4oXHJcbiAgICByZXNvdXJjZSxcclxuICAgIG9wdGlvbnM/LmtlZXBQcmV2aW91cyxcclxuICAgIG9wdGlvbnM/LmVxdWFsLFxyXG4gICk7XHJcblxyXG4gIGNvbnN0IHZhbHVlID0gb3B0aW9ucz8uY2FjaGVcclxuICAgID8gdG9Xcml0YWJsZShcclxuICAgICAgICBjb21wdXRlZCgoKTogVFJlc3VsdCA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gY2FjaGVFbnRyeSgpPy52YWx1ZSA/PyByZXNvdXJjZS52YWx1ZSgpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHJlc291cmNlLnZhbHVlLnNldCxcclxuICAgICAgICByZXNvdXJjZS52YWx1ZS51cGRhdGUsXHJcbiAgICAgIClcclxuICAgIDogcmVzb3VyY2UudmFsdWU7XHJcblxyXG4gIGNvbnN0IG9uRXJyb3IgPSBvcHRpb25zPy5vbkVycm9yOyAvLyBQdXQgaW4gb3duIHZhcmlhYmxlIHRvIGVuc3VyZSB2YWx1ZSByZW1haW5zIGV2ZW4gaWYgb3B0aW9ucyBhcmUgc29tZWhvdyBtdXRhdGVkIGluLWxpbmVcclxuXHJcbiAgaWYgKG9uRXJyb3IpIHtcclxuICAgIGNvbnN0IG9uRXJyb3JSZWYgPSBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICBjb25zdCBlcnIgPSByZXNvdXJjZS5lcnJvcigpO1xyXG4gICAgICBpZiAoZXJyKSBvbkVycm9yKGVycik7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBjbGVhbnVwIG9uIG1hbnVhbCBkZXN0cm95LCBJJ20gY29tZm9ydGFibGUgc2V0dGluZyB0aGVzZSBwcm9wcyBpbi1saW5lIGFzIHdlIGhhdmUgeWV0IHRvICdyZWxlYXNlJyB0aGUgb2JqZWN0IG91dCBvZiB0aGlzIGxleGljYWwgc2NvcGVcclxuICAgIGNvbnN0IGRlc3Ryb3lSZXN0ID0gcmVzb3VyY2UuZGVzdHJveTtcclxuICAgIHJlc291cmNlLmRlc3Ryb3kgPSAoKSA9PiB7XHJcbiAgICAgIG9uRXJyb3JSZWYuZGVzdHJveSgpO1xyXG4gICAgICBkZXN0cm95UmVzdCgpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8vIGl0ZXJhdGUgY2lyY3VpdCBicmVha2VyIHN0YXRlLCBpcyBlZmZlY3QgYXMgYSBjb21wdXRlZCB3b3VsZCBjYXVzZSBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgKHJlc291cmNlIC0+IGNiIC0+IHJlc291cmNlKVxyXG4gIGNvbnN0IGNiRWZmZWN0UmVmID0gZWZmZWN0KCgpID0+IHtcclxuICAgIGNvbnN0IHN0YXR1cyA9IHJlc291cmNlLnN0YXR1cygpO1xyXG4gICAgaWYgKHN0YXR1cyA9PT0gJ2Vycm9yJykgY2IuZmFpbCh1bnRyYWNrZWQocmVzb3VyY2UuZXJyb3IpKTtcclxuICAgIGVsc2UgaWYgKHN0YXR1cyA9PT0gJ3Jlc29sdmVkJykgY2Iuc3VjY2VzcygpO1xyXG4gIH0pO1xyXG5cclxuICBjb25zdCBzZXQgPSAodmFsdWU6IFRSZXN1bHQpID0+IHtcclxuICAgIHJlc291cmNlLnZhbHVlLnNldCh2YWx1ZSk7XHJcbiAgICBjb25zdCBrID0gdW50cmFja2VkKGNhY2hlS2V5KTtcclxuICAgIGlmIChvcHRpb25zPy5jYWNoZSAmJiBrKVxyXG4gICAgICBjYWNoZS5zdG9yZShcclxuICAgICAgICBrLFxyXG4gICAgICAgIG5ldyBIdHRwUmVzcG9uc2Uoe1xyXG4gICAgICAgICAgYm9keTogdmFsdWUsXHJcbiAgICAgICAgICBzdGF0dXM6IDIwMCxcclxuICAgICAgICAgIHN0YXR1c1RleHQ6ICdPSycsXHJcbiAgICAgICAgfSksXHJcbiAgICAgICk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgdXBkYXRlID0gKHVwZGF0ZXI6ICh2YWx1ZTogVFJlc3VsdCkgPT4gVFJlc3VsdCkgPT4ge1xyXG4gICAgc2V0KHVwZGF0ZXIodW50cmFja2VkKHJlc291cmNlLnZhbHVlKSkpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IGNsaWVudCA9IG9wdGlvbnM/LmluamVjdG9yXHJcbiAgICA/IG9wdGlvbnMuaW5qZWN0b3IuZ2V0KEh0dHBDbGllbnQpXHJcbiAgICA6IGluamVjdChIdHRwQ2xpZW50KTtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIC4uLnJlc291cmNlLFxyXG4gICAgdmFsdWUsXHJcbiAgICBzZXQsXHJcbiAgICB1cGRhdGUsXHJcbiAgICBzdGF0dXNDb2RlOiBsaW5rZWRTaWduYWwocmVzb3VyY2Uuc3RhdHVzQ29kZSksXHJcbiAgICBoZWFkZXJzOiBsaW5rZWRTaWduYWwocmVzb3VyY2UuaGVhZGVycyksXHJcbiAgICBkaXNhYmxlZDogY29tcHV0ZWQoKCkgPT4gY2IuaXNPcGVuKCkgfHwgc3RhYmxlUmVxdWVzdCgpID09PSB1bmRlZmluZWQpLFxyXG4gICAgcmVsb2FkOiAoKSA9PiB7XHJcbiAgICAgIGNiLmhhbGZPcGVuKCk7IC8vIG9wZW4gdGhlIGNpcmN1aXQgZm9yIG1hbnVhbCByZWxvYWRcclxuICAgICAgcmV0dXJuIHJlc291cmNlLnJlbG9hZCgpO1xyXG4gICAgfSxcclxuICAgIGRlc3Ryb3k6ICgpID0+IHtcclxuICAgICAgY2JFZmZlY3RSZWYuZGVzdHJveSgpO1xyXG4gICAgICBjYi5kZXN0cm95KCk7XHJcbiAgICAgIHJlc291cmNlLmRlc3Ryb3koKTtcclxuICAgIH0sXHJcbiAgICBwcmVmZXRjaDogYXN5bmMgKHBhcnRpYWwpID0+IHtcclxuICAgICAgaWYgKCFvcHRpb25zPy5jYWNoZSB8fCBoYXNTbG93Q29ubmVjdGlvbigpKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcblxyXG4gICAgICBjb25zdCByZXF1ZXN0ID0gdW50cmFja2VkKHN0YWJsZVJlcXVlc3QpO1xyXG5cclxuICAgICAgY29uc3QgcHJlZmV0Y2hSZXF1ZXN0ID0ge1xyXG4gICAgICAgIC4uLnJlcXVlc3QsXHJcbiAgICAgICAgLi4ucGFydGlhbCxcclxuICAgICAgfTtcclxuICAgICAgaWYgKCFwcmVmZXRjaFJlcXVlc3QudXJsKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcblxyXG4gICAgICBjb25zdCBrZXkgPSBoYXNoRm4oe1xyXG4gICAgICAgIC4uLnByZWZldGNoUmVxdWVzdCxcclxuICAgICAgICB1cmw6IHByZWZldGNoUmVxdWVzdC51cmwgPz8gJycsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgZm91bmQgPSBjYWNoZS5nZXRVbnRyYWNrZWQoa2V5KTtcclxuICAgICAgaWYgKGZvdW5kICYmICFmb3VuZC5pc1N0YWxlKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcblxyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICAgIGNsaWVudC5yZXF1ZXN0KFxyXG4gICAgICAgICAgICBwcmVmZXRjaFJlcXVlc3QubWV0aG9kID8/ICdHRVQnLFxyXG4gICAgICAgICAgICBwcmVmZXRjaFJlcXVlc3QudXJsLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgLi4ucHJlZmV0Y2hSZXF1ZXN0LFxyXG4gICAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBwcmVmZXRjaFJlcXVlc3QuY3JlZGVudGlhbHMgYXMgUmVxdWVzdENyZWRlbnRpYWxzIHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgIHByaW9yaXR5OiBwcmVmZXRjaFJlcXVlc3QucHJpb3JpdHkgYXMgUmVxdWVzdFByaW9yaXR5IHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgIGNhY2hlOiBwcmVmZXRjaFJlcXVlc3QuY2FjaGUgYXMgUmVxdWVzdENhY2hlIHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgIG1vZGU6IHByZWZldGNoUmVxdWVzdC5tb2RlIGFzIFJlcXVlc3RNb2RlIHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgIHJlZGlyZWN0OiBwcmVmZXRjaFJlcXVlc3QucmVkaXJlY3QgYXMgUmVxdWVzdFJlZGlyZWN0IHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgIGNvbnRleHQ6IHNldENhY2hlQ29udGV4dChwcmVmZXRjaFJlcXVlc3QuY29udGV4dCwge1xyXG4gICAgICAgICAgICAgICAgc3RhbGVUaW1lLFxyXG4gICAgICAgICAgICAgICAgdHRsLFxyXG4gICAgICAgICAgICAgICAga2V5OiBoYXNoRm4oe1xyXG4gICAgICAgICAgICAgICAgICAuLi5wcmVmZXRjaFJlcXVlc3QsXHJcbiAgICAgICAgICAgICAgICAgIHVybDogcHJlZmV0Y2hSZXF1ZXN0LnVybCA/PyAnJyxcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgYnVzdEJyb3dzZXJDYWNoZSxcclxuICAgICAgICAgICAgICAgIGlnbm9yZUNhY2hlQ29udHJvbCxcclxuICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICBoZWFkZXJzOiBwcmVmZXRjaFJlcXVlc3QuaGVhZGVycyBhcyBIdHRwSGVhZGVycyxcclxuICAgICAgICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgKSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS5lcnJvcignUHJlZmV0Y2ggZmFpbGVkOiAnLCBlcnIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICB9O1xyXG59XHJcbiJdfQ==","import { computed, DestroyRef, inject, linkedSignal, 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 { createCircuitBreaker, 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 function is called reactively. The parameter is the mutation value provided by the `mutate` method.\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 TMutation - The type of the mutation value (the request body).\n * @typeParam TICTX - The type of the initial context value passed to `onMutate`.\n * @typeParam TCTX - The type of the context value returned by `onMutate`.\n * @typeParam TMethod - The HTTP method to be used for the mutation (defaults to `HttpResourceRequest['method']`).\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 eq = equal ?? Object.is;\n const next = signal(null, ...(ngDevMode ? [{ debugName: \"next\", equal: (a, b) => {\n if (!a && !b)\n return true;\n if (!a || !b)\n return false;\n return eq(a, b);\n } }] : [{\n equal: (a, b) => {\n if (!a && !b)\n return true;\n if (!a || !b)\n return false;\n return eq(a, b);\n },\n }]));\n const req = computed(() => {\n const nr = next();\n if (!nr)\n return;\n return request(nr) ?? undefined;\n }, ...(ngDevMode ? [{ debugName: \"req\", equal: requestEqual }] : [{\n equal: requestEqual,\n }]));\n const lastValue = linkedSignal({\n source: next,\n computation: (next, prev) => {\n if (next === null && !!prev)\n return prev.value;\n return next;\n },\n });\n const lastValueRequest = computed(() => {\n const nr = lastValue();\n if (!nr)\n return;\n return request(nr) ?? undefined;\n }, ...(ngDevMode ? [{ debugName: \"lastValueRequest\", equal: requestEqual }] : [{\n equal: requestEqual,\n }]));\n const cb = createCircuitBreaker(options?.circuitBreaker === true\n ? undefined\n : (options?.circuitBreaker ?? false), options?.injector);\n const resource = queryResource(req, {\n ...rest,\n circuitBreaker: cb,\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 next.set(null);\n });\n return {\n ...resource,\n destroy: () => {\n statusSub.unsubscribe();\n resource.destroy();\n },\n mutate: (value, ictx) => {\n ctx = onMutate?.(value, ictx);\n next.set(value);\n },\n current: next,\n // redeclare disabled with last value so that it is not affected by the resource's internal disablement logic\n disabled: computed(() => cb.isOpen() || lastValueRequest() === undefined),\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXV0YXRpb24tcmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yZXNvdXJjZS9zcmMvbGliL211dGF0aW9uLXJlc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsVUFBVSxFQUNWLE1BQU0sRUFDTixZQUFZLEVBRVosTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RFLE9BQU8sRUFDTCxhQUFhLEdBR2QsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFzR2xFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBUTlCLE9BRXFFLEVBQ3JFLFVBQTBFLEVBQUU7SUFFNUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFFNUUsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFL0MsTUFBTSxFQUFFLEdBQUcsS0FBSyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUM7SUFDOUIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFtQixJQUFJLHdDQUN4QyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQUUsT0FBTyxJQUFJLENBQUM7Z0JBQzFCLElB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SUFBSSxDQUFTLENBQUM7WUFDdEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQixDQUFDO1FBQ0QsT0FBTyxFQUFFLElBQUk7UUFDYiw2R0FBNkc7UUFDN0csUUFBUSxFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksZ0JBQWdCLEVBQUUsS0FBSyxTQUFTLENBQUM7S0FDMUUsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIEh0dHBSZXNvdXJjZVJlcXVlc3QgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7XHJcbiAgY29tcHV0ZWQsXHJcbiAgRGVzdHJveVJlZixcclxuICBpbmplY3QsXHJcbiAgbGlua2VkU2lnbmFsLFxyXG4gIFNpZ25hbCxcclxuICBzaWduYWwsXHJcbiAgVmFsdWVFcXVhbGl0eUZuLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgY29tYmluZUxhdGVzdFdpdGgsIGZpbHRlciwgbWFwLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIHF1ZXJ5UmVzb3VyY2UsXHJcbiAgdHlwZSBRdWVyeVJlc291cmNlT3B0aW9ucyxcclxuICB0eXBlIFF1ZXJ5UmVzb3VyY2VSZWYsXHJcbn0gZnJvbSAnLi9xdWVyeS1yZXNvdXJjZSc7XHJcbmltcG9ydCB7IGNyZWF0ZUNpcmN1aXRCcmVha2VyLCBjcmVhdGVFcXVhbFJlcXVlc3QgfSBmcm9tICcuL3V0aWwnO1xyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKiBIZWxwZXIgdHlwZSBmb3IgaW5mZXJyaW5nIHRoZSByZXF1ZXN0IGJvZHkgdHlwZSBiYXNlZCBvbiB0aGUgSFRUUCBtZXRob2QuXHJcbiAqL1xyXG50eXBlIE5leHRSZXF1ZXN0PFxyXG4gIFRNZXRob2QgZXh0ZW5kcyBIdHRwUmVzb3VyY2VSZXF1ZXN0WydtZXRob2QnXSxcclxuICBUTXV0YXRpb24sXHJcbj4gPSBUTWV0aG9kIGV4dGVuZHMgJ0RFTEVURScgfCAnZGVsZXRlJ1xyXG4gID8gT21pdDxIdHRwUmVzb3VyY2VSZXF1ZXN0LCAnYm9keScgfCAnbWV0aG9kJz4gJiB7IG1ldGhvZDogVE1ldGhvZCB9XHJcbiAgOiBPbWl0PEh0dHBSZXNvdXJjZVJlcXVlc3QsICdib2R5JyB8ICdtZXRob2QnPiAmIHtcclxuICAgICAgYm9keTogVE11dGF0aW9uO1xyXG4gICAgICBtZXRob2Q6IFRNZXRob2Q7XHJcbiAgICB9O1xyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKiBIZWxwZXIgdHlwZSBmb3IgdHJhY2tpbmcgbXV0YXRpb24gc3RhdHVzLlxyXG4gKi9cclxudHlwZSBTdGF0dXNSZXN1bHQ8VFJlc3VsdD4gPVxyXG4gIHwge1xyXG4gICAgICBzdGF0dXM6ICdlcnJvcic7XHJcbiAgICAgIGVycm9yOiB1bmtub3duO1xyXG4gICAgfVxyXG4gIHwge1xyXG4gICAgICBzdGF0dXM6ICdyZXNvbHZlZCc7XHJcbiAgICAgIHZhbHVlOiBUUmVzdWx0O1xyXG4gICAgfTtcclxuXHJcbi8qKlxyXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyBhIGBtdXRhdGlvblJlc291cmNlYC5cclxuICpcclxuICogQHR5cGVQYXJhbSBUUmVzdWx0IC0gVGhlIHR5cGUgb2YgdGhlIGV4cGVjdGVkIHJlc3VsdCBmcm9tIHRoZSBtdXRhdGlvbi5cclxuICogQHR5cGVQYXJhbSBUUmF3IC0gVGhlIHJhdyByZXNwb25zZSB0eXBlIGZyb20gdGhlIEhUVFAgcmVxdWVzdCAoZGVmYXVsdHMgdG8gVFJlc3VsdCkuXHJcbiAqIEB0eXBlUGFyYW0gVENUWCAtIFRoZSB0eXBlIG9mIHRoZSBjb250ZXh0IHZhbHVlIHJldHVybmVkIGJ5IGBvbk11dGF0ZWAuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBNdXRhdGlvblJlc291cmNlT3B0aW9uczxcclxuICBUUmVzdWx0LFxyXG4gIFRSYXcgPSBUUmVzdWx0LFxyXG4gIFRNdXRhdGlvbiA9IFRSZXN1bHQsXHJcbiAgVENUWCA9IHZvaWQsXHJcbiAgVElDVFggPSBUQ1RYLFxyXG4+ID0gT21pdDxcclxuICBRdWVyeVJlc291cmNlT3B0aW9uczxUUmVzdWx0LCBUUmF3PixcclxuICAnZXF1YWwnIHwgJ29uRXJyb3InIHwgJ2tlZXBQcmV2aW91cycgfCAncmVmcmVzaCcgfCAnY2FjaGUnIC8vIHdlIGNhbid0IGtlZXAgcHJldmlvdXMgdmFsdWVzLCByZWZyZXNoIG9yIGNhY2hlIG11dGF0aW9ucyBhcyB0aGV5IGFyZSBtZWFudCB0byBiZSBvbmUtb2ZmIG9wZXJhdGlvbnNcclxuPiAmIHtcclxuICAvKipcclxuICAgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGJlZm9yZSB0aGUgbXV0YXRpb24gcmVxdWVzdCBpcyBtYWRlLlxyXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgYmVpbmcgbXV0YXRlZCAodGhlIGBib2R5YCBvZiB0aGUgcmVxdWVzdCkuXHJcbiAgICogQHJldHVybnMgQW4gb3B0aW9uYWwgY29udGV4dCB2YWx1ZSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBgb25FcnJvcmAsIGBvblN1Y2Nlc3NgLCBhbmQgYG9uU2V0dGxlZGAgY2FsbGJhY2tzLiBUaGlzIGlzIHVzZWZ1bCBmb3Igc3RvcmluZ1xyXG4gICAqICBpbmZvcm1hdGlvbiBuZWVkZWQgZHVyaW5nIHRoZSBtdXRhdGlvbiBsaWZlY3ljbGUsIHN1Y2ggYXMgcHJldmlvdXMgdmFsdWVzIGZvciBvcHRpbWlzdGljIHVwZGF0ZXMgb3Igcm9sbGJhY2suXHJcbiAgICovXHJcbiAgb25NdXRhdGU/OiAodmFsdWU6IFRNdXRhdGlvbiwgaW5pdGlhbENUWD86IFRJQ1RYKSA9PiBUQ1RYO1xyXG4gIC8qKlxyXG4gICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgaWYgdGhlIG11dGF0aW9uIHJlcXVlc3QgZmFpbHMuXHJcbiAgICogQHBhcmFtIGVycm9yIFRoZSBlcnJvciB0aGF0IG9jY3VycmVkLlxyXG4gICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGBvbk11dGF0ZWAgY2FsbGJhY2sgKG9yIGB1bmRlZmluZWRgIGlmIGBvbk11dGF0ZWAgd2FzIG5vdCBwcm92aWRlZCBvciByZXR1cm5lZCBgdW5kZWZpbmVkYCkuXHJcbiAgICovXHJcbiAgb25FcnJvcj86IChlcnJvcjogdW5rbm93biwgY3R4OiBOb0luZmVyPFRDVFg+KSA9PiB2b2lkO1xyXG4gIC8qKlxyXG4gICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgaWYgdGhlIG11dGF0aW9uIHJlcXVlc3Qgc3VjY2VlZHMuXHJcbiAgICogQHBhcmFtIHZhbHVlIFRoZSByZXN1bHQgb2YgdGhlIG11dGF0aW9uICh0aGUgcGFyc2VkIHJlc3BvbnNlIGJvZHkpLlxyXG4gICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGBvbk11dGF0ZWAgY2FsbGJhY2sgKG9yIGB1bmRlZmluZWRgIGlmIGBvbk11dGF0ZWAgd2FzIG5vdCBwcm92aWRlZCBvciByZXR1cm5lZCBgdW5kZWZpbmVkYCkuXHJcbiAgICovXHJcbiAgb25TdWNjZXNzPzogKHZhbHVlOiBOb0luZmVyPFRSZXN1bHQ+LCBjdHg6IE5vSW5mZXI8VENUWD4pID0+IHZvaWQ7XHJcbiAgLyoqXHJcbiAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSBtdXRhdGlvbiByZXF1ZXN0IHNldHRsZXMgKGVpdGhlciBzdWNjZWVkcyBvciBmYWlscykuXHJcbiAgICogQHBhcmFtIGN0eCBUaGUgY29udGV4dCB2YWx1ZSByZXR1cm5lZCBieSB0aGUgYG9uTXV0YXRlYCBjYWxsYmFjayAob3IgYHVuZGVmaW5lZGAgaWYgYG9uTXV0YXRlYCB3YXMgbm90IHByb3ZpZGVkIG9yIHJldHVybmVkIGB1bmRlZmluZWRgKS5cclxuICAgKi9cclxuICBvblNldHRsZWQ/OiAoY3R4OiBOb0luZmVyPFRDVFg+KSA9PiB2b2lkO1xyXG4gIGVxdWFsPzogVmFsdWVFcXVhbGl0eUZuPFRNdXRhdGlvbj47XHJcbn07XHJcblxyXG4vKipcclxuICogUmVwcmVzZW50cyBhIG11dGF0aW9uIHJlc291cmNlIGNyZWF0ZWQgYnkgYG11dGF0aW9uUmVzb3VyY2VgLiAgRXh0ZW5kcyBgUXVlcnlSZXNvdXJjZVJlZmBcclxuICogYnV0IHJlbW92ZXMgbWV0aG9kcyB0aGF0IGRvbid0IG1ha2Ugc2Vuc2UgZm9yIG11dGF0aW9ucyAobGlrZSBgcHJlZmV0Y2hgLCBgdmFsdWVgLCBldGMuKS5cclxuICpcclxuICogQHR5cGVQYXJhbSBUUmVzdWx0IC0gVGhlIHR5cGUgb2YgdGhlIGV4cGVjdGVkIHJlc3VsdCBmcm9tIHRoZSBtdXRhdGlvbi5cclxuICovXHJcbmV4cG9ydCB0eXBlIE11dGF0aW9uUmVzb3VyY2VSZWY8XHJcbiAgVFJlc3VsdCxcclxuICBUTXV0YXRpb24gPSBUUmVzdWx0LFxyXG4gIFRJQ1RYID0gdm9pZCxcclxuPiA9IE9taXQ8XHJcbiAgUXVlcnlSZXNvdXJjZVJlZjxUUmVzdWx0PixcclxuICAncHJlZmV0Y2gnIHwgJ3ZhbHVlJyB8ICdoYXNWYWx1ZScgfCAnc2V0JyB8ICd1cGRhdGUnIC8vIHdlIGRvbid0IGFsbG93IG1hbnVhbGx5IHZpZXdpbmcgdGhlIHJldHVybmVkIGRhdGEgb3IgdXBkYXRpbmcgaXQgbWFudWFsbHksIHByZWZldGNoaW5nIGEgbXV0YXRpb24gYWxzbyBkb2Vzbid0IG1ha2UgYW55IHNlbnNlXHJcbj4gJiB7XHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZXMgdGhlIG11dGF0aW9uLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHZhbHVlIFRoZSBtdXRhdGlvbiB2YWx1ZSAodXN1YWxseSB0aGUgcmVxdWVzdCBib2R5KS5cclxuICAgKiBAcGFyYW0gY3R4IEFuIG9wdGlvbmFsIGluaXRpYWwgY29udGV4dCB2YWx1ZSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBgb25NdXRhdGVgIGNhbGxiYWNrLlxyXG4gICAqL1xyXG4gIG11dGF0ZTogKHZhbHVlOiBUTXV0YXRpb24sIGN0eD86IFRJQ1RYKSA9PiB2b2lkO1xyXG4gIC8qKlxyXG4gICAqIEEgc2lnbmFsIHRoYXQgaG9sZHMgdGhlIGN1cnJlbnQgbXV0YXRpb24gcmVxdWVzdCwgb3IgYG51bGxgIGlmIG5vIG11dGF0aW9uIGlzIGluIHByb2dyZXNzLlxyXG4gICAqIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgdHJhY2tpbmcgdGhlIHN0YXRlIG9mIHRoZSBtdXRhdGlvbiBvciBmb3IgZGlzcGxheWluZyBsb2FkaW5nIGluZGljYXRvcnMuXHJcbiAgICovXHJcbiAgY3VycmVudDogU2lnbmFsPFRNdXRhdGlvbiB8IG51bGw+O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSByZXNvdXJjZSBmb3IgcGVyZm9ybWluZyBtdXRhdGlvbnMgKGUuZy4sIFBPU1QsIFBVVCwgUEFUQ0gsIERFTEVURSByZXF1ZXN0cykuXHJcbiAqIFVubGlrZSBgcXVlcnlSZXNvdXJjZWAsIGBtdXRhdGlvblJlc291cmNlYCBpcyBkZXNpZ25lZCBmb3Igb25lLW9mZiBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIGRhdGEuXHJcbiAqIEl0IGRvZXMgKm5vdCogY2FjaGUgcmVzcG9uc2VzIGFuZCBkb2VzIG5vdCBwcm92aWRlIGEgYHZhbHVlYCBzaWduYWwuICBJbnN0ZWFkLCBpdCBmb2N1c2VzIG9uXHJcbiAqIG1hbmFnaW5nIHRoZSBtdXRhdGlvbiBsaWZlY3ljbGUgKHBlbmRpbmcsIGVycm9yLCBzdWNjZXNzKSBhbmQgcHJvdmlkZXMgY2FsbGJhY2tzIGZvciBoYW5kbGluZ1xyXG4gKiB0aGVzZSBzdGF0ZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSByZXF1ZXN0IEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBiYXNlIGBIdHRwUmVzb3VyY2VSZXF1ZXN0YCB0byBiZSBtYWRlLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCByZWFjdGl2ZWx5LiBUaGUgcGFyYW1ldGVyIGlzIHRoZSBtdXRhdGlvbiB2YWx1ZSBwcm92aWRlZCBieSB0aGUgYG11dGF0ZWAgbWV0aG9kLlxyXG4gKiBAcGFyYW0gb3B0aW9ucyBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBtdXRhdGlvbiByZXNvdXJjZS4gIFRoaXMgaW5jbHVkZXMgY2FsbGJhY2tzXHJcbiAqICAgICAgICAgICAgICAgZm9yIGBvbk11dGF0ZWAsIGBvbkVycm9yYCwgYG9uU3VjY2Vzc2AsIGFuZCBgb25TZXR0bGVkYC5cclxuICogQHR5cGVQYXJhbSBUUmVzdWx0IC0gVGhlIHR5cGUgb2YgdGhlIGV4cGVjdGVkIHJlc3VsdCBmcm9tIHRoZSBtdXRhdGlvbi5cclxuICogQHR5cGVQYXJhbSBUUmF3IC0gVGhlIHJhdyByZXNwb25zZSB0eXBlIGZyb20gdGhlIEhUVFAgcmVxdWVzdCAoZGVmYXVsdHMgdG8gVFJlc3VsdCkuXHJcbiAqIEB0eXBlUGFyYW0gVE11dGF0aW9uIC0gVGhlIHR5cGUgb2YgdGhlIG11dGF0aW9uIHZhbHVlICh0aGUgcmVxdWVzdCBib2R5KS5cclxuICogQHR5cGVQYXJhbSBUSUNUWCAtIFRoZSB0eXBlIG9mIHRoZSBpbml0aWFsIGNvbnRleHQgdmFsdWUgcGFzc2VkIHRvIGBvbk11dGF0ZWAuXHJcbiAqIEB0eXBlUGFyYW0gVENUWCAtIFRoZSB0eXBlIG9mIHRoZSBjb250ZXh0IHZhbHVlIHJldHVybmVkIGJ5IGBvbk11dGF0ZWAuXHJcbiAqIEB0eXBlUGFyYW0gVE1ldGhvZCAtIFRoZSBIVFRQIG1ldGhvZCB0byBiZSB1c2VkIGZvciB0aGUgbXV0YXRpb24gKGRlZmF1bHRzIHRvIGBIdHRwUmVzb3VyY2VSZXF1ZXN0WydtZXRob2QnXWApLlxyXG4gKiBAcmV0dXJucyBBIGBNdXRhdGlvblJlc291cmNlUmVmYCBpbnN0YW5jZSwgd2hpY2ggcHJvdmlkZXMgbWV0aG9kcyBmb3IgdHJpZ2dlcmluZyB0aGUgbXV0YXRpb25cclxuICogICAgICAgICAgYW5kIG9ic2VydmluZyBpdHMgc3RhdHVzLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG11dGF0aW9uUmVzb3VyY2U8XHJcbiAgVFJlc3VsdCxcclxuICBUUmF3ID0gVFJlc3VsdCxcclxuICBUTXV0YXRpb24gPSBUUmVzdWx0LFxyXG4gIFRDVFggPSB2b2lkLFxyXG4gIFRJQ1RYID0gVENUWCxcclxuICBUTWV0aG9kIGV4dGVuZHMgSHR0cFJlc291cmNlUmVxdWVzdFsnbWV0aG9kJ10gPSBIdHRwUmVzb3VyY2VSZXF1ZXN0WydtZXRob2QnXSxcclxuPihcclxuICByZXF1ZXN0OiAoXHJcbiAgICBwYXJhbXM6IFRNdXRhdGlvbixcclxuICApID0+IE9taXQ8TmV4dFJlcXVlc3Q8VE1ldGhvZCwgVE11dGF0aW9uPiwgJ2JvZHknPiB8IHVuZGVmaW5lZCB8IHZvaWQsXHJcbiAgb3B0aW9uczogTXV0YXRpb25SZXNvdXJjZU9wdGlvbnM8VFJlc3VsdCwgVFJhdywgVE11dGF0aW9uLCBUQ1RYLCBUSUNUWD4gPSB7fSxcclxuKTogTXV0YXRpb25SZXNvdXJjZVJlZjxUUmVzdWx0LCBUTXV0YXRpb24sIFRJQ1RYPiB7XHJcbiAgY29uc3QgeyBvbk11dGF0ZSwgb25FcnJvciwgb25TdWNjZXNzLCBvblNldHRsZWQsIGVxdWFsLCAuLi5yZXN0IH0gPSBvcHRpb25zO1xyXG5cclxuICBjb25zdCByZXF1ZXN0RXF1YWwgPSBjcmVhdGVFcXVhbFJlcXVlc3QoZXF1YWwpO1xyXG5cclxuICBjb25zdCBlcSA9IGVxdWFsID8/IE9iamVjdC5pcztcclxuICBjb25zdCBuZXh0ID0gc2lnbmFsPFRNdXRhdGlvbiB8IG51bGw+KG51bGwsIHtcclxuICAgIGVxdWFsOiAoYSwgYikgPT4ge1xyXG4gICAgICBpZiAoIWEgJiYgIWIpIHJldHVybiB0cnVlO1xyXG4gICAgICBpZiAoIWEgfHwgIWIpIHJldHVybiBmYWxzZTtcclxuICAgICAgcmV0dXJuIGVxKGEsIGIpO1xyXG4gICAgfSxcclxuICB9KTtcclxuXHJcbiAgY29uc3QgcmVxID0gY29tcHV0ZWQoXHJcbiAgICAoKTogSHR0cFJlc291cmNlUmVxdWVzdCB8IHVuZGVmaW5lZCA9PiB7XHJcbiAgICAgIGNvbnN0IG5yID0gbmV4dCgpO1xyXG4gICAgICBpZiAoIW5yKSByZXR1cm47XHJcblxyXG4gICAgICByZXR1cm4gcmVxdWVzdChucikgPz8gdW5kZWZpbmVkO1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgZXF1YWw6IHJlcXVlc3RFcXVhbCxcclxuICAgIH0sXHJcbiAgKTtcclxuXHJcbiAgY29uc3QgbGFzdFZhbHVlID0gbGlua2VkU2lnbmFsPFRNdXRhdGlvbiB8IG51bGwsIFRNdXRhdGlvbiB8IG51bGw+KHtcclxuICAgIHNvdXJjZTogbmV4dCxcclxuICAgIGNvbXB1dGF0aW9uOiAobmV4dCwgcHJldikgPT4ge1xyXG4gICAgICBpZiAobmV4dCA9PT0gbnVsbCAmJiAhIXByZXYpIHJldHVybiBwcmV2LnZhbHVlO1xyXG4gICAgICByZXR1cm4gbmV4dDtcclxuICAgIH0sXHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IGxhc3RWYWx1ZVJlcXVlc3QgPSBjb21wdXRlZChcclxuICAgICgpOiBIdHRwUmVzb3VyY2VSZXF1ZXN0IHwgdW5kZWZpbmVkID0+IHtcclxuICAgICAgY29uc3QgbnIgPSBsYXN0VmFsdWUoKTtcclxuICAgICAgaWYgKCFucikgcmV0dXJuO1xyXG5cclxuICAgICAgcmV0dXJuIHJlcXVlc3QobnIpID8/IHVuZGVmaW5lZDtcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGVxdWFsOiByZXF1ZXN0RXF1YWwsXHJcbiAgICB9LFxyXG4gICk7XHJcblxyXG4gIGNvbnN0IGNiID0gY3JlYXRlQ2lyY3VpdEJyZWFrZXIoXHJcbiAgICBvcHRpb25zPy5jaXJjdWl0QnJlYWtlciA9PT0gdHJ1ZVxyXG4gICAgICA/IHVuZGVmaW5lZFxyXG4gICAgICA6IChvcHRpb25zPy5jaXJjdWl0QnJlYWtlciA/PyBmYWxzZSksXHJcbiAgICBvcHRpb25zPy5pbmplY3RvcixcclxuICApO1xyXG5cclxuICBjb25zdCByZXNvdXJjZSA9IHF1ZXJ5UmVzb3VyY2U8VFJlc3VsdCwgVFJhdz4ocmVxLCB7XHJcbiAgICAuLi5yZXN0LFxyXG4gICAgY2lyY3VpdEJyZWFrZXI6IGNiLFxyXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsIGFzIHVua25vd24gYXMgVFJlc3VsdCwgLy8gZG9lc250IG1hdHRlciBzaW5jZSAudmFsdWUgaXMgbm90IGFjY2Vzc2libGVcclxuICB9KTtcclxuXHJcbiAgbGV0IGN0eDogVENUWCA9IHVuZGVmaW5lZCBhcyBUQ1RYO1xyXG5cclxuICBjb25zdCBkZXN0cm95UmVmID0gb3B0aW9ucy5pbmplY3RvclxyXG4gICAgPyBvcHRpb25zLmluamVjdG9yLmdldChEZXN0cm95UmVmKVxyXG4gICAgOiBpbmplY3QoRGVzdHJveVJlZik7XHJcblxyXG4gIGNvbnN0IGVycm9yJCA9IHRvT2JzZXJ2YWJsZShyZXNvdXJjZS5lcnJvcik7XHJcbiAgY29uc3QgdmFsdWUkID0gdG9PYnNlcnZhYmxlKHJlc291cmNlLnZhbHVlKS5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YobnVsbCkpKTtcclxuXHJcbiAgY29uc3Qgc3RhdHVzU3ViID0gdG9PYnNlcnZhYmxlKHJlc291cmNlLnN0YXR1cylcclxuICAgIC5waXBlKFxyXG4gICAgICBjb21iaW5lTGF0ZXN0V2l0aChlcnJvciQsIHZhbHVlJCksXHJcbiAgICAgIG1hcCgoW3N0YXR1cywgZXJyb3IsIHZhbHVlXSk6IFN0YXR1c1Jlc3VsdDxUUmVzdWx0PiB8IG51bGwgPT4ge1xyXG4gICAgICAgIGlmIChzdGF0dXMgPT09ICdlcnJvcicgJiYgZXJyb3IpIHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHN0YXR1czogJ2Vycm9yJyxcclxuICAgICAgICAgICAgZXJyb3IsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ3Jlc29sdmVkJyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgc3RhdHVzOiAncmVzb2x2ZWQnLFxyXG4gICAgICAgICAgICB2YWx1ZSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfSksXHJcbiAgICAgIGZpbHRlcigodikgPT4gdiAhPT0gbnVsbCksXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZChkZXN0cm95UmVmKSxcclxuICAgIClcclxuICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2Vycm9yJykgb25FcnJvcj8uKHJlc3VsdC5lcnJvciwgY3R4KTtcclxuICAgICAgZWxzZSBvblN1Y2Nlc3M/LihyZXN1bHQudmFsdWUsIGN0eCk7XHJcblxyXG4gICAgICBvblNldHRsZWQ/LihjdHgpO1xyXG4gICAgICBjdHggPSB1bmRlZmluZWQgYXMgVENUWDtcclxuICAgICAgbmV4dC5zZXQobnVsbCk7XHJcbiAgICB9KTtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIC4uLnJlc291cmNlLFxyXG4gICAgZGVzdHJveTogKCkgPT4ge1xyXG4gICAgICBzdGF0dXNTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgICAgcmVzb3VyY2UuZGVzdHJveSgpO1xyXG4gICAgfSxcclxuICAgIG11dGF0ZTogKHZhbHVlLCBpY3R4KSA9PiB7XHJcbiAgICAgIGN0eCA9IG9uTXV0YXRlPy4odmFsdWUsIGljdHgpIGFzIFRDVFg7XHJcbiAgICAgIG5leHQuc2V0KHZhbHVlKTtcclxuICAgIH0sXHJcbiAgICBjdXJyZW50OiBuZXh0LFxyXG4gICAgLy8gcmVkZWNsYXJlIGRpc2FibGVkIHdpdGggbGFzdCB2YWx1ZSBzbyB0aGF0IGl0IGlzIG5vdCBhZmZlY3RlZCBieSB0aGUgcmVzb3VyY2UncyBpbnRlcm5hbCBkaXNhYmxlbWVudCBsb2dpY1xyXG4gICAgZGlzYWJsZWQ6IGNvbXB1dGVkKCgpID0+IGNiLmlzT3BlbigpIHx8IGxhc3RWYWx1ZVJlcXVlc3QoKSA9PT0gdW5kZWZpbmVkKSxcclxuICB9O1xyXG59XHJcbiJdfQ==","/**\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/persistence.js","../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/to-resource-object.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 { isPlatformBrowser } from '@angular/common';\nimport { inject, isDevMode, PLATFORM_ID } from '@angular/core';\nexport function createNoopDB() {\n return {\n getAll: async () => [],\n store: async () => {\n // noop\n },\n remove: async () => {\n // noop\n },\n };\n}\nfunction toCacheDB(db, storeName) {\n const getAll = async () => {\n const now = Date.now();\n return new Promise((res, rej) => {\n const transaction = db.transaction(storeName, 'readonly');\n const store = transaction.objectStore(storeName);\n const request = store.getAll();\n request.onsuccess = () => res(request.result);\n request.onerror = () => rej(request.error);\n })\n .then((entries) => entries.filter((e) => e.expiresAt > now))\n .catch((err) => {\n if (isDevMode())\n console.error('Error getting all items from cache DB:', err);\n return [];\n });\n };\n const store = (value) => {\n return new Promise((res, rej) => {\n const transaction = db.transaction(storeName, 'readwrite');\n const store = transaction.objectStore(storeName);\n store.put(value);\n transaction.oncomplete = () => res();\n transaction.onerror = () => rej(transaction.error);\n }).catch((err) => {\n if (isDevMode())\n console.error('Error storing item in cache DB:', err);\n });\n };\n const remove = (key) => {\n return new Promise((res, rej) => {\n const transaction = db.transaction(storeName, 'readwrite');\n const store = transaction.objectStore(storeName);\n store.delete(key);\n transaction.oncomplete = () => res();\n transaction.onerror = () => rej(transaction.error);\n }).catch((err) => {\n if (isDevMode())\n console.error('Error removing item from cache DB:', err);\n });\n };\n return {\n getAll,\n store,\n remove,\n };\n}\nexport function createSingleStoreDB(name, getStoreName, version = 1) {\n const isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n const storeName = getStoreName(version);\n if (!isBrowser)\n return Promise.resolve(createNoopDB());\n return new Promise((res, rej) => {\n if (version < 1)\n rej(new Error('Version must be 1 or greater'));\n const req = indexedDB.open(name, version);\n req.onupgradeneeded = (event) => {\n const db = req.result;\n const oldVersion = event.oldVersion;\n db.createObjectStore(storeName, { keyPath: 'key' });\n if (oldVersion > 0) {\n db.deleteObjectStore(getStoreName(oldVersion));\n }\n };\n req.onerror = () => {\n rej(req.error);\n };\n req.onsuccess = () => res(req.result);\n })\n .then((db) => toCacheDB(db, storeName))\n .catch((err) => {\n if (isDevMode())\n console.error('Error creating query DB:', err);\n return createNoopDB();\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc2lzdGVuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yZXNvdXJjZS9zcmMvbGliL3V0aWwvY2FjaGUvcGVyc2lzdGVuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBVy9ELE1BQU0sVUFBVSxZQUFZO0lBQzFCLE9BQU87UUFDTCxNQUFNLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxFQUFFO1FBQ3RCLEtBQUssRUFBRSxLQUFLLElBQUksRUFBRTtZQUNoQixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sRUFBRSxLQUFLLElBQUksRUFBRTtZQUNqQixPQUFPO1FBQ1QsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUksRUFBZSxFQUFFLFNBQWlCO0lBQ3RELE1BQU0sTUFBTSxHQUFHLEtBQUssSUFBSSxFQUFFO1FBQ3hCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QixPQUFPLElBQUksT0FBTyxDQUFtQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNoRCxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUMxRCxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2pELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUUvQixPQUFPLENBQUMsU0FBUyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQzthQUNDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsQ0FBQzthQUMzRCxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNiLElBQUksU0FBUyxFQUFFO2dCQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0NBQXdDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDL0QsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQztJQUVGLE1BQU0sS0FBSyxHQUFHLENBQUMsS0FBcUIsRUFBRSxFQUFFO1FBQ3RDLE9BQU8sSUFBSSxPQUFPLENBQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDcEMsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDM0QsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUVqRCxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRWpCLFdBQVcsQ0FBQyxVQUFVLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDckMsV0FBVyxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2YsSUFBSSxTQUFTLEVBQUU7Z0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN6RSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztJQUVGLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUU7UUFDN0IsT0FBTyxJQUFJLE9BQU8sQ0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNwQyxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUMzRCxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRWpELEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFbEIsV0FBVyxDQUFDLFVBQVUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNyQyxXQUFXLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDZixJQUFJLFNBQVMsRUFBRTtnQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzVFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0lBRUYsT0FBTztRQUNMLE1BQU07UUFDTixLQUFLO1FBQ0wsTUFBTTtLQUNQLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxJQUFZLEVBQ1osWUFBeUMsRUFDekMsT0FBTyxHQUFHLENBQUM7SUFFWCxNQUFNLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUN6RCxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFeEMsSUFBSSxDQUFDLFNBQVM7UUFBRSxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUV2RCxPQUFPLElBQUksT0FBTyxDQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQzNDLElBQUksT0FBTyxHQUFHLENBQUM7WUFBRSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDO1FBRWhFLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRTFDLEdBQUcsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM5QixNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO1lBQ3RCLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7WUFFcEMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBRXBELElBQUksVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNuQixFQUFFLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDakQsQ0FBQztRQUNILENBQUMsQ0FBQztRQUVGLEdBQUcsQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFO1lBQ2pCLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakIsQ0FBQyxDQUFDO1FBRUYsR0FBRyxDQUFDLFNBQVMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hDLENBQUMsQ0FBQztTQUNDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFJLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztTQUN6QyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUNiLElBQUksU0FBUyxFQUFFO1lBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQywwQkFBMEIsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNoRSxPQUFPLFlBQVksRUFBRSxDQUFDO0lBQ3hCLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGluamVjdCwgaXNEZXZNb2RlLCBQTEFURk9STV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2FjaGVFbnRyeSB9IGZyb20gJy4vY2FjaGUnO1xuXG50eXBlIFN0b3JlZEVudHJ5PFQ+ID0gT21pdDxDYWNoZUVudHJ5PFQ+LCAndGltZW91dCc+O1xuXG5leHBvcnQgdHlwZSBDYWNoZURCPFQ+ID0ge1xuICBnZXRBbGw6ICgpID0+IFByb21pc2U8U3RvcmVkRW50cnk8VD5bXT47XG4gIHN0b3JlOiAodmFsdWU6IFN0b3JlZEVudHJ5PFQ+KSA9PiBQcm9taXNlPHZvaWQ+O1xuICByZW1vdmU6IChrZXk6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOb29wREI8VD4oKTogQ2FjaGVEQjxUPiB7XG4gIHJldHVybiB7XG4gICAgZ2V0QWxsOiBhc3luYyAoKSA9PiBbXSxcbiAgICBzdG9yZTogYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gbm9vcFxuICAgIH0sXG4gICAgcmVtb3ZlOiBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBub29wXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gdG9DYWNoZURCPFQ+KGRiOiBJREJEYXRhYmFzZSwgc3RvcmVOYW1lOiBzdHJpbmcpOiBDYWNoZURCPFQ+IHtcbiAgY29uc3QgZ2V0QWxsID0gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFN0b3JlZEVudHJ5PFQ+W10+KChyZXMsIHJlaikgPT4ge1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihzdG9yZU5hbWUsICdyZWFkb25seScpO1xuICAgICAgY29uc3Qgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzdG9yZU5hbWUpO1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHN0b3JlLmdldEFsbCgpO1xuXG4gICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHJlcyhyZXF1ZXN0LnJlc3VsdCk7XG4gICAgICByZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWoocmVxdWVzdC5lcnJvcik7XG4gICAgfSlcbiAgICAgIC50aGVuKChlbnRyaWVzKSA9PiBlbnRyaWVzLmZpbHRlcigoZSkgPT4gZS5leHBpcmVzQXQgPiBub3cpKVxuICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKVxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGdldHRpbmcgYWxsIGl0ZW1zIGZyb20gY2FjaGUgREI6JywgZXJyKTtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfSk7XG4gIH07XG5cbiAgY29uc3Qgc3RvcmUgPSAodmFsdWU6IFN0b3JlZEVudHJ5PFQ+KSA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXMsIHJlaikgPT4ge1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihzdG9yZU5hbWUsICdyZWFkd3JpdGUnKTtcbiAgICAgIGNvbnN0IHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc3RvcmVOYW1lKTtcblxuICAgICAgc3RvcmUucHV0KHZhbHVlKTtcblxuICAgICAgdHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9ICgpID0+IHJlcygpO1xuICAgICAgdHJhbnNhY3Rpb24ub25lcnJvciA9ICgpID0+IHJlaih0cmFuc2FjdGlvbi5lcnJvcik7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSBjb25zb2xlLmVycm9yKCdFcnJvciBzdG9yaW5nIGl0ZW0gaW4gY2FjaGUgREI6JywgZXJyKTtcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCByZW1vdmUgPSAoa2V5OiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlcywgcmVqKSA9PiB7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKHN0b3JlTmFtZSwgJ3JlYWR3cml0ZScpO1xuICAgICAgY29uc3Qgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzdG9yZU5hbWUpO1xuXG4gICAgICBzdG9yZS5kZWxldGUoa2V5KTtcblxuICAgICAgdHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9ICgpID0+IHJlcygpO1xuICAgICAgdHJhbnNhY3Rpb24ub25lcnJvciA9ICgpID0+IHJlaih0cmFuc2FjdGlvbi5lcnJvcik7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSBjb25zb2xlLmVycm9yKCdFcnJvciByZW1vdmluZyBpdGVtIGZyb20gY2FjaGUgREI6JywgZXJyKTtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGdldEFsbCxcbiAgICBzdG9yZSxcbiAgICByZW1vdmUsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTaW5nbGVTdG9yZURCPFQ+KFxuICBuYW1lOiBzdHJpbmcsXG4gIGdldFN0b3JlTmFtZTogKHZlcnNpb246IG51bWJlcikgPT4gc3RyaW5nLFxuICB2ZXJzaW9uID0gMSxcbik6IFByb21pc2U8Q2FjaGVEQjxUPj4ge1xuICBjb25zdCBpc0Jyb3dzZXIgPSBpc1BsYXRmb3JtQnJvd3NlcihpbmplY3QoUExBVEZPUk1fSUQpKTtcbiAgY29uc3Qgc3RvcmVOYW1lID0gZ2V0U3RvcmVOYW1lKHZlcnNpb24pO1xuXG4gIGlmICghaXNCcm93c2VyKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWF0ZU5vb3BEQigpKTtcblxuICByZXR1cm4gbmV3IFByb21pc2U8SURCRGF0YWJhc2U+KChyZXMsIHJlaikgPT4ge1xuICAgIGlmICh2ZXJzaW9uIDwgMSkgcmVqKG5ldyBFcnJvcignVmVyc2lvbiBtdXN0IGJlIDEgb3IgZ3JlYXRlcicpKTtcblxuICAgIGNvbnN0IHJlcSA9IGluZGV4ZWREQi5vcGVuKG5hbWUsIHZlcnNpb24pO1xuXG4gICAgcmVxLm9udXBncmFkZW5lZWRlZCA9IChldmVudCkgPT4ge1xuICAgICAgY29uc3QgZGIgPSByZXEucmVzdWx0O1xuICAgICAgY29uc3Qgb2xkVmVyc2lvbiA9IGV2ZW50Lm9sZFZlcnNpb247XG5cbiAgICAgIGRiLmNyZWF0ZU9iamVjdFN0b3JlKHN0b3JlTmFtZSwgeyBrZXlQYXRoOiAna2V5JyB9KTtcblxuICAgICAgaWYgKG9sZFZlcnNpb24gPiAwKSB7XG4gICAgICAgIGRiLmRlbGV0ZU9iamVjdFN0b3JlKGdldFN0b3JlTmFtZShvbGRWZXJzaW9uKSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJlcS5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgcmVqKHJlcS5lcnJvcik7XG4gICAgfTtcblxuICAgIHJlcS5vbnN1Y2Nlc3MgPSAoKSA9PiByZXMocmVxLnJlc3VsdCk7XG4gIH0pXG4gICAgLnRoZW4oKGRiKSA9PiB0b0NhY2hlREI8VD4oZGIsIHN0b3JlTmFtZSkpXG4gICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS5lcnJvcignRXJyb3IgY3JlYXRpbmcgcXVlcnkgREI6JywgZXJyKTtcbiAgICAgIHJldHVybiBjcmVhdGVOb29wREIoKTtcbiAgICB9KTtcbn1cbiJdfQ==","import { HttpHeaders, HttpResponse } from '@angular/common/http';\nimport { computed, inject, InjectionToken, isDevMode, untracked, } from '@angular/core';\nimport { mutable } from '@mmstack/primitives';\nimport { v7 } from 'uuid';\nimport { createNoopDB, createSingleStoreDB } from './persistence';\nfunction isSyncMessage(msg) {\n return (typeof msg === 'object' &&\n msg !== null &&\n 'type' in msg &&\n msg.type === 'cache-sync-message');\n}\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 db;\n internal = mutable(new Map());\n cleanupOpt;\n id = v7();\n /**\n * Destroys the cache instance, cleaning up any resources used by the cache.\n * This method is called automatically when the cache instance is garbage collected.\n */\n destroy;\n broadcast = () => {\n // noop\n };\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 * @param syncTabs - If provided, the cache will use the options a BroadcastChannel to send updates between tabs.\n * Defaults to `undefined`, meaning no synchronization across tabs.\n */\n constructor(ttl = ONE_DAY, staleTime = ONE_HOUR, cleanupOpt = {\n type: 'lru',\n maxSize: 1000,\n checkInterval: ONE_HOUR,\n }, syncTabs, db = Promise.resolve(createNoopDB())) {\n this.ttl = ttl;\n this.staleTime = staleTime;\n this.db = db;\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 let destroySyncTabs = () => {\n // noop\n };\n if (syncTabs) {\n const channel = new BroadcastChannel(syncTabs.id);\n this.broadcast = (msg) => {\n if (msg.action === 'invalidate')\n return channel.postMessage({\n action: 'invalidate',\n entry: { key: msg.entry.key },\n cacheId: this.id,\n type: 'cache-sync-message',\n });\n return channel.postMessage({\n ...msg,\n entry: {\n ...msg.entry,\n value: syncTabs.serialize(msg.entry.value),\n },\n cacheId: this.id,\n type: 'cache-sync-message',\n });\n };\n channel.onmessage = (event) => {\n const msg = event.data;\n if (!isSyncMessage(msg))\n return;\n if (msg.cacheId === this.id)\n return; // ignore messages from this cache\n if (msg.action === 'store') {\n const value = syncTabs.deserialize(msg.entry.value);\n if (value === null)\n return;\n this.storeInternal(msg.entry.key, value, msg.entry.stale - msg.entry.updated, msg.entry.expiresAt - msg.entry.updated, true, false);\n }\n else if (msg.action === 'invalidate') {\n this.invalidateInternal(msg.entry.key, true);\n }\n };\n destroySyncTabs = () => {\n channel.close();\n };\n }\n let destroyed = false;\n const destroy = () => {\n if (destroyed)\n return;\n destroyed = true;\n clearInterval(cleanupInterval);\n destroySyncTabs();\n };\n this.db\n .then(async (db) => {\n if (destroyed)\n return [];\n return db.getAll();\n })\n .then((entries) => {\n if (destroyed)\n return;\n // load entries into the cache\n const current = untracked(this.internal);\n entries.forEach((entry) => {\n if (current.has(entry.key))\n return;\n this.storeInternal(entry.key, entry.value, entry.stale - entry.updated, entry.expiresAt - entry.updated, true);\n });\n });\n this.destroy = destroy;\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 === this.id) {\n destroy();\n }\n });\n registry.register(this, this.id);\n }\n /** @internal */\n getInternal(key) {\n const keySignal = computed(() => key(), ...(ngDevMode ? [{ debugName: \"keySignal\" }] : []));\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 * Retrieves a cache entry or an object with the key if not found.\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 an object with the key if not found. The signal\n * updates whenever the cache entry changes (e.g., due to revalidation or expiration).\n */\n getEntryOrKey(key) {\n const valueSig = this.getInternal(key);\n return computed(() => valueSig() ?? 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, persist = false) {\n this.storeInternal(key, value, staleTime, ttl, false, persist);\n }\n storeInternal(key, value, staleTime = this.staleTime, ttl = this.ttl, fromSync = false, persist = false) {\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 const next = {\n value,\n created: entry?.created ?? now,\n updated: now,\n useCount: prevCount + 1,\n stale: now + staleTime,\n expiresAt: now + ttl,\n key,\n };\n this.internal.mutate((map) => {\n map.set(key, {\n ...next,\n timeout: setTimeout(() => this.invalidate(key), ttl),\n });\n return map;\n });\n if (!fromSync) {\n if (persist)\n this.db.then((db) => db.store(next));\n this.broadcast({\n action: 'store',\n entry: next,\n });\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 this.invalidateInternal(key);\n }\n invalidateInternal(key, fromSync = false) {\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 if (!fromSync) {\n this.db.then((db) => db.remove(key));\n this.broadcast({ action: 'invalidate', entry: { key } });\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 const serialize = (value) => {\n const headersRecord = {};\n const headerKeys = value.headers.keys();\n headerKeys.forEach((key) => {\n const values = value.headers.getAll(key);\n if (!values)\n return;\n headersRecord[key] = values;\n });\n return JSON.stringify({\n body: value.body,\n status: value.status,\n statusText: value.statusText,\n headers: headerKeys.length > 0 ? headersRecord : undefined,\n url: value.url,\n });\n };\n const deserialize = (value) => {\n try {\n const parsed = JSON.parse(value);\n if (!parsed || typeof parsed !== 'object' || !('body' in parsed))\n throw new Error('Invalid cache entry format');\n const headers = parsed.headers\n ? new HttpHeaders(parsed.headers)\n : undefined;\n return new HttpResponse({\n body: parsed.body,\n status: parsed.status,\n statusText: parsed.statusText,\n headers: headers,\n url: parsed.url,\n });\n }\n catch (err) {\n if (isDevMode())\n console.error('Failed to deserialize cache entry:', err);\n return null;\n }\n };\n const syncTabsOpt = opt?.syncTabs\n ? {\n id: 'mmstack-query-cache-sync',\n serialize,\n deserialize,\n }\n : undefined;\n let db = opt?.persist === false\n ? undefined\n : createSingleStoreDB('mmstack-query-cache-db', (version) => `query-store_v${version}`, opt?.version).then((db) => {\n return {\n getAll: () => {\n return db.getAll().then((entries) => {\n return entries\n .map((entry) => {\n const value = deserialize(entry.value);\n if (value === null)\n return null;\n return {\n ...entry,\n value,\n };\n })\n .filter((e) => e !== null);\n });\n },\n store: (entry) => {\n return db.store({ ...entry, value: serialize(entry.value) });\n },\n remove: db.remove,\n };\n });\n return {\n provide: CLIENT_CACHE_TOKEN,\n useValue: new Cache(opt?.ttl, opt?.staleTime, opt?.cleanup, syncTabsOpt, db),\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yZXNvdXJjZS9zcmMvbGliL3V0aWwvY2FjaGUvY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRSxPQUFPLEVBQ0wsUUFBUSxFQUNSLE1BQU0sRUFDTixjQUFjLEVBRWQsU0FBUyxFQUdULFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQixPQUFPLEVBQVcsWUFBWSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBMEIzRSxTQUFTLGFBQWEsQ0FBSSxHQUFZO0lBQ3BDLE9BQU8sQ0FDTCxPQUFPLEdBQUcsS0FBSyxRQUFRO1FBQ3ZCLEdBQUcsS0FBSyxJQUFJO1FBQ1osTUFBTSxJQUFJLEdBQUc7UUFDWixHQUFzQixDQUFDLElBQUksS0FBSyxvQkFBb0IsQ0FDdEQsQ0FBQztBQUNKLENBQUM7QUEwREQsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBRWhDLE1BQU0sbUJBQW1CLEdBQUc7SUFDMUIsSUFBSSxFQUFFLEtBQUs7SUFDWCxPQUFPLEVBQUUsR0FBRztJQUNaLGFBQWEsRUFBRSxRQUFRO0NBQ0MsQ0FBQztBQUUzQjs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLEtBQUs7SUEyQks7SUFDQTtJQVlGO0lBdkNGLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLEVBQXlCLENBQUMsQ0FBQztJQUNyRCxVQUFVLENB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QVUsZ0JBQWdCLENBQzlCLFFBQW1CO0lBRW5CLE1BQU0sS0FBSyxHQUFHLFFBQVE7UUFDcEIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxFQUFFO1lBQ3JDLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQztRQUNKLENBQUMsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUU7WUFDekIsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDLENBQUM7SUFFUCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxJQUFJLFNBQVMsRUFBRTtZQUNiLE1BQU0sSUFBSSxLQUFLLENBQ2IsdUVBQXVFLENBQ3hFLENBQUM7O1lBQ0MsT0FBTyxJQUFJLFNBQVMsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxPQUFPLEtBQWtDLENBQUM7QUFDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBIZWFkZXJzLCBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7XHJcbiAgY29tcHV0ZWQsXHJcbiAgaW5qZWN0LFxyXG4gIEluamVjdGlvblRva2VuLFxyXG4gIEluamVjdG9yLFxyXG4gIGlzRGV2TW9kZSxcclxuICB0eXBlIFByb3ZpZGVyLFxyXG4gIHR5cGUgU2lnbmFsLFxyXG4gIHVudHJhY2tlZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgbXV0YWJsZSB9IGZyb20gJ0BtbXN0YWNrL3ByaW1pdGl2ZXMnO1xyXG5pbXBvcnQgeyB2NyB9IGZyb20gJ3V1aWQnO1xyXG5pbXBvcnQgeyBDYWNoZURCLCBjcmVhdGVOb29wREIsIGNyZWF0ZVNpbmdsZVN0b3JlREIgfSBmcm9tICcuL3BlcnNpc3RlbmNlJztcclxuXHJcbnR5cGUgQmFzZVN5bmNNZXNzYWdlPFRFbnRyeSwgVEFjdGlvbiBleHRlbmRzIHN0cmluZz4gPSB7XHJcbiAgZW50cnk6IFRFbnRyeTtcclxuICBhY3Rpb246IFRBY3Rpb247XHJcbn07XHJcblxyXG50eXBlIEludmFsaWRhdGVNZXNzYWdlPFQ+ID0gQmFzZVN5bmNNZXNzYWdlPFxyXG4gIFBpY2s8Q2FjaGVFbnRyeTxUPiwgJ2tleSc+LFxyXG4gICdpbnZhbGlkYXRlJ1xyXG4+O1xyXG5cclxudHlwZSBTdG9yZU1lc3NhZ2U8VD4gPSBCYXNlU3luY01lc3NhZ2U8T21pdDxDYWNoZUVudHJ5PFQ+LCAndGltZW91dCc+LCAnc3RvcmUnPjtcclxuXHJcbnR5cGUgSW50ZXJuYWxTeW5jTWVzc2FnZTxUPiA9IEludmFsaWRhdGVNZXNzYWdlPFQ+IHwgU3RvcmVNZXNzYWdlPFQ+O1xyXG5cclxuLyoqXHJcbiAqIEEgbWVzc2FnZSB0eXBlIHVzZWQgZm9yIHN5bmNocm9uaXppbmcgY2FjaGUgdXBkYXRlcyBhY3Jvc3MgdGFicy5cclxuICogQGludGVybmFsXHJcbiAqIEB0ZW1wbGF0ZSBUIC0gVGhlIHR5cGUgb2YgZGF0YSBiZWluZyBjYWNoZWQuXHJcbiAqL1xyXG50eXBlIFN5bmNNZXNzYWdlPFQ+ID0gSW50ZXJuYWxTeW5jTWVzc2FnZTxUPiAmIHtcclxuICBjYWNoZUlkOiBzdHJpbmc7XHJcbiAgdHlwZTogJ2NhY2hlLXN5bmMtbWVzc2FnZSc7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBpc1N5bmNNZXNzYWdlPFQ+KG1zZzogdW5rbm93bik6IG1zZyBpcyBTeW5jTWVzc2FnZTxUPiB7XHJcbiAgcmV0dXJuIChcclxuICAgIHR5cGVvZiBtc2cgPT09ICdvYmplY3QnICYmXHJcbiAgICBtc2cgIT09IG51bGwgJiZcclxuICAgICd0eXBlJyBpbiBtc2cgJiZcclxuICAgIChtc2cgYXMgU3luY01lc3NhZ2U8VD4pLnR5cGUgPT09ICdjYWNoZS1zeW5jLW1lc3NhZ2UnXHJcbiAgKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIHRoZSBMZWFzdCBSZWNlbnRseSBVc2VkIChMUlUpIGNhY2hlIGNsZWFudXAgc3RyYXRlZ3kuXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxudHlwZSBMUlVDbGVhbnVwVHlwZSA9IHtcclxuICB0eXBlOiAnbHJ1JztcclxuICAvKipcclxuICAgKiBIb3cgb2Z0ZW4gdG8gY2hlY2sgZm9yIGV4cGlyZWQgb3IgZXhjZXNzIGVudHJpZXMsIGluIG1pbGxpc2Vjb25kcy5cclxuICAgKi9cclxuICBjaGVja0ludGVydmFsOiBudW1iZXI7XHJcbiAgLyoqXHJcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgdG8ga2VlcCBpbiB0aGUgY2FjaGUuICBXaGVuIHRoZSBjYWNoZSBleGNlZWRzIHRoaXMgc2l6ZSxcclxuICAgKiB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCBlbnRyaWVzIHdpbGwgYmUgcmVtb3ZlZC5cclxuICAgKi9cclxuICBtYXhTaXplOiBudW1iZXI7XHJcbn07XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhlIFwib2xkZXN0IGZpcnN0XCIgY2FjaGUgY2xlYW51cCBzdHJhdGVneS5cclxuICogQGludGVybmFsXHJcbiAqL1xyXG50eXBlIE9sZHNldENsZWFudXBUeXBlID0ge1xyXG4gIHR5cGU6ICdvbGRlc3QnO1xyXG4gIC8qKlxyXG4gICAqIEhvdyBvZnRlbiB0byBjaGVjayBmb3IgZXhwaXJlZCBvciBleGNlc3MgZW50cmllcywgaW4gbWlsbGlzZWNvbmRzLlxyXG4gICAqL1xyXG4gIGNoZWNrSW50ZXJ2YWw6IG51bWJlcjtcclxuICAvKipcclxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgZW50cmllcyB0byBrZWVwIGluIHRoZSBjYWNoZS4gIFdoZW4gdGhlIGNhY2hlIGV4Y2VlZHMgdGhpcyBzaXplLFxyXG4gICAqIHRoZSBvbGRlc3QgZW50cmllcyB3aWxsIGJlIHJlbW92ZWQuXHJcbiAgICovXHJcbiAgbWF4U2l6ZTogbnVtYmVyO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlcHJlc2VudHMgYW4gZW50cnkgaW4gdGhlIGNhY2hlLlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmV4cG9ydCB0eXBlIENhY2hlRW50cnk8VD4gPSB7XHJcbiAgdmFsdWU6IFQ7XHJcbiAgY3JlYXRlZDogbnVtYmVyO1xyXG4gIHVwZGF0ZWQ6IG51bWJlcjtcclxuICBzdGFsZTogbnVtYmVyO1xyXG4gIHVzZUNvdW50OiBudW1iZXI7XHJcbiAgZXhwaXJlc0F0OiBudW1iZXI7XHJcbiAgdGltZW91dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XHJcbiAga2V5OiBzdHJpbmc7XHJcbn07XHJcblxyXG4vKipcclxuICogRGVmaW5lcyB0aGUgdHlwZXMgb2YgY2xlYW51cCBzdHJhdGVnaWVzIGF2YWlsYWJsZSBmb3IgdGhlIGNhY2hlLlxyXG4gKiAtIGBscnVgOiBMZWFzdCBSZWNlbnRseSBVc2VkLiAgUmVtb3ZlcyB0aGUgbGVhc3QgcmVjZW50bHkgYWNjZXNzZWQgZW50cmllcyB3aGVuIHRoZSBjYWNoZSBpcyBmdWxsLlxyXG4gKiAtIGBvbGRlc3RgOiBSZW1vdmVzIHRoZSBvbGRlc3QgZW50cmllcyB3aGVuIHRoZSBjYWNoZSBpcyBmdWxsLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgQ2xlYW51cFR5cGUgPSBMUlVDbGVhbnVwVHlwZSB8IE9sZHNldENsZWFudXBUeXBlO1xyXG5cclxuY29uc3QgT05FX0RBWSA9IDEwMDAgKiA2MCAqIDYwICogMjQ7XHJcbmNvbnN0IE9ORV9IT1VSID0gMTAwMCAqIDYwICogNjA7XHJcblxyXG5jb25zdCBERUZBVUxUX0NMRUFOVVBfT1BUID0ge1xyXG4gIHR5cGU6ICdscnUnLFxyXG4gIG1heFNpemU6IDIwMCxcclxuICBjaGVja0ludGVydmFsOiBPTkVfSE9VUixcclxufSBzYXRpc2ZpZXMgTFJVQ2xlYW51cFR5cGU7XHJcblxyXG4vKipcclxuICogQSBnZW5lcmljIGNhY2hlIGltcGxlbWVudGF0aW9uIHRoYXQgc3RvcmVzIGRhdGEgd2l0aCB0aW1lLXRvLWxpdmUgKFRUTCkgYW5kIHN0YWxlLXdoaWxlLXJldmFsaWRhdGUgY2FwYWJpbGl0aWVzLlxyXG4gKlxyXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBkYXRhIHRvIGJlIHN0b3JlZCBpbiB0aGUgY2FjaGUuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQ2FjaGU8VD4ge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgaW50ZXJuYWwgPSBtdXRhYmxlKG5ldyBNYXA8c3RyaW5nLCBDYWNoZUVudHJ5PFQ+PigpKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGNsZWFudXBPcHQ6IENsZWFudXBUeXBlO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgaWQgPSB2NygpO1xyXG5cclxuICAvKipcclxuICAgKiBEZXN0cm95cyB0aGUgY2FjaGUgaW5zdGFuY2UsIGNsZWFuaW5nIHVwIGFueSByZXNvdXJjZXMgdXNlZCBieSB0aGUgY2FjaGUuXHJcbiAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgY2FjaGUgaW5zdGFuY2UgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQuXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgZGVzdHJveTogKCkgPT4gdm9pZDtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBicm9hZGNhc3Q6IChtc2c6IEludGVybmFsU3luY01lc3NhZ2U8VD4pID0+IHZvaWQgPSAoKSA9PiB7XHJcbiAgICAvLyBub29wXHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIG5ldyBgQ2FjaGVgIGluc3RhbmNlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHR0bCAtIFRoZSBkZWZhdWx0IFRpbWUgVG8gTGl2ZSAoVFRMKSBmb3IgY2FjaGUgZW50cmllcywgaW4gbWlsbGlzZWNvbmRzLiAgRGVmYXVsdHMgdG8gb25lIGRheS5cclxuICAgKiBAcGFyYW0gc3RhbGVUaW1lIC0gVGhlIGRlZmF1bHQgZHVyYXRpb24sIGluIG1pbGxpc2Vjb25kcywgZHVyaW5nIHdoaWNoIGEgY2FjaGUgZW50cnkgaXMgY29uc2lkZXJlZFxyXG4gICAqICAgICAgICAgICAgICAgICAgICBzdGFsZSBidXQgY2FuIHN0aWxsIGJlIHVzZWQgd2hpbGUgcmV2YWxpZGF0aW9uIG9jY3VycyBpbiB0aGUgYmFja2dyb3VuZC4gRGVmYXVsdHMgdG8gMSBob3VyLlxyXG4gICAqIEBwYXJhbSBjbGVhbnVwT3B0IC0gT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhlIGNhY2hlIGNsZWFudXAgc3RyYXRlZ3kuICBEZWZhdWx0cyB0byBMUlUgd2l0aCBhXHJcbiAgICogICAgICAgICAgICAgICAgICAgICBgbWF4U2l6ZWAgb2YgMjAwIGFuZCBhIGBjaGVja0ludGVydmFsYCBvZiBvbmUgaG91ci5cclxuICAgKiBAcGFyYW0gc3luY1RhYnMgLSBJZiBwcm92aWRlZCwgdGhlIGNhY2hlIHdpbGwgdXNlIHRoZSBvcHRpb25zIGEgQnJvYWRjYXN0Q2hhbm5lbCB0byBzZW5kIHVwZGF0ZXMgYmV0d2VlbiB0YWJzLlxyXG4gICAqICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIGB1bmRlZmluZWRgLCBtZWFuaW5nIG5vIHN5bmNocm9uaXphdGlvbiBhY3Jvc3MgdGFicy5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCByZWFkb25seSB0dGw6IG51bWJlciA9IE9ORV9EQVksXHJcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3RhbGVUaW1lOiBudW1iZXIgPSBPTkVfSE9VUixcclxuICAgIGNsZWFudXBPcHQ6IFBhcnRpYWw8Q2xlYW51cFR5cGU+ID0ge1xyXG4gICAgICB0eXBlOiAnbHJ1JyxcclxuICAgICAgbWF4U2l6ZTogMTAwMCxcclxuICAgICAgY2hlY2tJbnRlcnZhbDogT05FX0hPVVIsXHJcbiAgICB9LFxyXG4gICAgc3luY1RhYnM/OiB7XHJcbiAgICAgIGlkOiBzdHJpbmc7XHJcbiAgICAgIHNlcmlhbGl6ZTogKHZhbHVlOiBUKSA9PiBzdHJpbmc7XHJcbiAgICAgIGRlc2VyaWFsaXplOiAodmFsdWU6IHN0cmluZykgPT4gVCB8IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGI6IFByb21pc2U8Q2FjaGVEQjxUPj4gPSBQcm9taXNlLnJlc29sdmUoXHJcbiAgICAgIGNyZWF0ZU5vb3BEQjxUPigpLFxyXG4gICAgKSxcclxuICApIHtcclxuICAgIHRoaXMuY2xlYW51cE9wdCA9IHtcclxuICAgICAgLi4uREVGQVVMVF9DTEVBTlVQX09QVCxcclxuICAgICAgLi4uY2xlYW51cE9wdCxcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMuY2xlYW51cE9wdC5tYXhTaXplIDw9IDApXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWF4U2l6ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwJyk7XHJcblxyXG4gICAgLy8gY2xlYW51cCBjYWNoZSBiYXNlZCBvbiBwcm92aWRlZCBvcHRpb25zIHJlZ3VsYXJseVxyXG4gICAgY29uc3QgY2xlYW51cEludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICB0aGlzLmNsZWFudXAoKTtcclxuICAgIH0sIGNsZWFudXBPcHQuY2hlY2tJbnRlcnZhbCk7XHJcblxyXG4gICAgbGV0IGRlc3Ryb3lTeW5jVGFicyA9ICgpID0+IHtcclxuICAgICAgLy8gbm9vcFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoc3luY1RhYnMpIHtcclxuICAgICAgY29uc3QgY2hhbm5lbCA9IG5ldyBCcm9hZGNhc3RDaGFubmVsKHN5bmNUYWJzLmlkKTtcclxuICAgICAgdGhpcy5icm9hZGNhc3QgPSAobXNnOiBJbnRlcm5hbFN5bmNNZXNzYWdlPFQ+KSA9PiB7XHJcbiAgICAgICAgaWYgKG1zZy5hY3Rpb24gPT09ICdpbnZhbGlkYXRlJylcclxuICAgICAgICAgIHJldHVybiBjaGFubmVsLnBvc3RNZXNzYWdlKHtcclxuICAgICAgICAgICAgYWN0aW9uOiAnaW52YWxpZGF0ZScsXHJcbiAgICAgICAgICAgIGVudHJ5OiB7IGtleTogbXNnLmVudHJ5LmtleSB9LFxyXG4gICAgICAgICAgICBjYWNoZUlkOiB0aGlzLmlkLFxyXG4gICAgICAgICAgICB0eXBlOiAnY2FjaGUtc3luYy1tZXNzYWdlJyxcclxuICAgICAgICAgIH0gc2F0aXNmaWVzIFN5bmNNZXNzYWdlPHN0cmluZz4pO1xyXG5cclxuICAgICAgICByZXR1cm4gY2hhbm5lbC5wb3N0TWVzc2FnZSh7XHJcbiAgICAgICAgICAuLi5tc2csXHJcbiAgICAgICAgICBlbnRyeToge1xyXG4gICAgICAgICAgICAuLi5tc2cuZW50cnksXHJcbiAgICAgICAgICAgIHZhbHVlOiBzeW5jVGFicy5zZXJpYWxpemUobXNnLmVudHJ5LnZhbHVlKSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjYWNoZUlkOiB0aGlzLmlkLFxyXG4gICAgICAgICAgdHlwZTogJ2NhY2hlLXN5bmMtbWVzc2FnZScsXHJcbiAgICAgICAgfSBzYXRpc2ZpZXMgU3luY01lc3NhZ2U8c3RyaW5nPik7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBjaGFubmVsLm9ubWVzc2FnZSA9IChldmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG1zZyA9IGV2ZW50LmRhdGE7XHJcbiAgICAgICAgaWYgKCFpc1N5bmNNZXNzYWdlPHN0cmluZz4obXNnKSkgcmV0dXJuO1xyXG4gICAgICAgIGlmIChtc2cuY2FjaGVJZCA9PT0gdGhpcy5pZCkgcmV0dXJuOyAvLyBpZ25vcmUgbWVzc2FnZXMgZnJvbSB0aGlzIGNhY2hlXHJcblxyXG4gICAgICAgIGlmIChtc2cuYWN0aW9uID09PSAnc3RvcmUnKSB7XHJcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHN5bmNUYWJzLmRlc2VyaWFsaXplKG1zZy5lbnRyeS52YWx1ZSk7XHJcbiAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybjtcclxuICAgICAgICAgIHRoaXMuc3RvcmVJbnRlcm5hbChcclxuICAgICAgICAgICAgbXNnLmVudHJ5LmtleSxcclxuICAgICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAgIG1zZy5lbnRyeS5zdGFsZSAtIG1zZy5lbnRyeS51cGRhdGVkLFxyXG4gICAgICAgICAgICBtc2cuZW50cnkuZXhwaXJlc0F0IC0gbXNnLmVudHJ5LnVwZGF0ZWQsXHJcbiAgICAgICAgICAgIHRydWUsXHJcbiAgICAgICAgICAgIGZhbHNlLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG1zZy5hY3Rpb24gPT09ICdpbnZhbGlkYXRlJykge1xyXG4gICAgICAgICAgdGhpcy5pbnZhbGlkYXRlSW50ZXJuYWwobXNnLmVudHJ5LmtleSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgZGVzdHJveVN5bmNUYWJzID0gKCkgPT4ge1xyXG4gICAgICAgIGNoYW5uZWwuY2xvc2UoKTtcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGVzdHJveWVkID0gZmFsc2U7XHJcbiAgICBjb25zdCBkZXN0cm95ID0gKCkgPT4ge1xyXG4gICAgICBpZiAoZGVzdHJveWVkKSByZXR1cm47XHJcbiAgICAgIGRlc3Ryb3llZCA9IHRydWU7XHJcbiAgICAgIGNsZWFySW50ZXJ2YWwoY2xlYW51cEludGVydmFsKTtcclxuICAgICAgZGVzdHJveVN5bmNUYWJzKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuZGJcclxuICAgICAgLnRoZW4oYXN5bmMgKGRiKSA9PiB7XHJcbiAgICAgICAgaWYgKGRlc3Ryb3llZCkgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBkYi5nZXRBbGwoKTtcclxuICAgICAgfSlcclxuICAgICAgLnRoZW4oKGVudHJpZXMpID0+IHtcclxuICAgICAgICBpZiAoZGVzdHJveWVkKSByZXR1cm47XHJcbiAgICAgICAgLy8gbG9hZCBlbnRyaWVzIGludG8gdGhlIGNhY2hlXHJcblxyXG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSB1bnRyYWNrZWQodGhpcy5pbnRlcm5hbCk7XHJcbiAgICAgICAgZW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGN1cnJlbnQuaGFzKGVudHJ5LmtleSkpIHJldHVybjtcclxuICAgICAgICAgIHRoaXMuc3RvcmVJbnRlcm5hbChcclxuICAgICAgICAgICAgZW50cnkua2V5LFxyXG4gICAgICAgICAgICBlbnRyeS52YWx1ZSxcclxuICAgICAgICAgICAgZW50cnkuc3RhbGUgLSBlbnRyeS51cGRhdGVkLFxyXG4gICAgICAgICAgICBlbnRyeS5leHBpcmVzQXQgLSBlbnRyeS51cGRhdGVkLFxyXG4gICAgICAgICAgICB0cnVlLCAvLyBsaWtlIGZyb20gc3luYyBiZWNhdXNlIHdlIGRvbnQgd2FudCB0byB0cmlnZ2VyIHN5bmMgb3IgZGIgd3JpdGVzXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmRlc3Ryb3kgPSBkZXN0cm95O1xyXG5cclxuICAgIC8vIGNsZWFudXAgaWYgb2JqZWN0IGlzIGdhcmJhZ2UgY29sbGVjdGVkLCB0aGlzIGlzIGJlY2F1c2UgdGhlIGNhY2hlIGNhbiBiZSBxdWl0ZSBsYXJnZSBmcm9tIGEgbWVtb3J5IHN0YW5kcG9pbnQgJiB3ZSBkb250IHdhbnQgYWxsIHRoYXQgZmxvYXRpbmcgZ2FyYmFnZVxyXG4gICAgY29uc3QgcmVnaXN0cnkgPSBuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoKGlkOiBzdHJpbmcpID0+IHtcclxuICAgICAgaWYgKGlkID09PSB0aGlzLmlkKSB7XHJcbiAgICAgICAgZGVzdHJveSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZWdpc3RyeS5yZWdpc3Rlcih0aGlzLCB0aGlzLmlkKTtcclxuICB9XHJcblxyXG4gIC8qKiBAaW50ZXJuYWwgKi9cclxuICBwcml2YXRlIGdldEludGVybmFsKFxyXG4gICAga2V5OiAoKSA9PiBzdHJpbmcgfCBudWxsLFxyXG4gICk6IFNpZ25hbDwoQ2FjaGVFbnRyeTxUPiAmIHsgaXNTdGFsZTogYm9vbGVhbiB9KSB8IG51bGw+IHtcclxuICAgIGNvbnN0IGtleVNpZ25hbCA9IGNvbXB1dGVkKCgpID0+IGtleSgpKTtcclxuXHJcbiAgICByZXR1cm4gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgICBjb25zdCBrZXkgPSBrZXlTaWduYWwoKTtcclxuICAgICAgaWYgKCFrZXkpIHJldHVybiBudWxsO1xyXG4gICAgICBjb25zdCBmb3VuZCA9IHRoaXMuaW50ZXJuYWwoKS5nZXQoa2V5KTtcclxuXHJcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XHJcblxyXG4gICAgICBpZiAoIWZvdW5kIHx8IGZvdW5kLmV4cGlyZXNBdCA8PSBub3cpIHJldHVybiBudWxsO1xyXG4gICAgICBmb3VuZC51c2VDb3VudCsrO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIC4uLmZvdW5kLFxyXG4gICAgICAgIGlzU3RhbGU6IGZvdW5kLnN0YWxlIDw9IG5vdyxcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIGEgY2FjaGUgZW50cnkgd2l0aG91dCBhZmZlY3RpbmcgaXRzIHVzYWdlIGNvdW50IChmb3IgTFJVKS4gIFRoaXMgaXMgcHJpbWFyaWx5XHJcbiAgICogZm9yIGludGVybmFsIHVzZSBvciBkZWJ1Z2dpbmcuXHJcbiAgICogQGludGVybmFsXHJcbiAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIHJldHJpZXZlLlxyXG4gICAqIEByZXR1cm5zIFRoZSBjYWNoZSBlbnRyeSwgb3IgYG51bGxgIGlmIG5vdCBmb3VuZCBvciBleHBpcmVkLlxyXG4gICAqL1xyXG4gIGdldFVudHJhY2tlZChrZXk6IHN0cmluZyk6IChDYWNoZUVudHJ5PFQ+ICYgeyBpc1N0YWxlOiBib29sZWFuIH0pIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdW50cmFja2VkKHRoaXMuZ2V0SW50ZXJuYWwoKCkgPT4ga2V5KSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYSBjYWNoZSBlbnRyeSBhcyBhIHNpZ25hbC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBrZXkgLSBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgY2FjaGUga2V5LiBUaGUga2V5IGlzIGEgc2lnbmFsLCBhbGxvd2luZyBmb3IgZHluYW1pYyBrZXlzLiBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBudWxsIHRoZSB2YWx1ZSBpcyBhbHNvIG51bGwuXHJcbiAgICogQHJldHVybnMgQSBzaWduYWwgdGhhdCBob2xkcyB0aGUgY2FjaGUgZW50cnksIG9yIGBudWxsYCBpZiBub3QgZm91bmQgb3IgZXhwaXJlZC4gIFRoZSBzaWduYWxcclxuICAgKiAgICAgICAgICB1cGRhdGVzIHdoZW5ldmVyIHRoZSBjYWNoZSBlbnRyeSBjaGFuZ2VzIChlLmcuLCBkdWUgdG8gcmV2YWxpZGF0aW9uIG9yIGV4cGlyYXRpb24pLlxyXG4gICAqL1xyXG4gIGdldChcclxuICAgIGtleTogKCkgPT4gc3RyaW5nIHwgbnVsbCxcclxuICApOiBTaWduYWw8KENhY2hlRW50cnk8VD4gJiB7IGlzU3RhbGU6IGJvb2xlYW4gfSkgfCBudWxsPiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRJbnRlcm5hbChrZXkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIGEgY2FjaGUgZW50cnkgb3IgYW4gb2JqZWN0IHdpdGggdGhlIGtleSBpZiBub3QgZm91bmQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ga2V5IC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGNhY2hlIGtleS4gVGhlIGtleSBpcyBhIHNpZ25hbCwgYWxsb3dpbmcgZm9yIGR5bmFtaWMga2V5cy4gSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgbnVsbCB0aGUgdmFsdWUgaXMgYWxzbyBudWxsLlxyXG4gICAqIEByZXR1cm5zICBBIHNpZ25hbCB0aGF0IGhvbGRzIHRoZSBjYWNoZSBlbnRyeSBvciBhbiBvYmplY3Qgd2l0aCB0aGUga2V5IGlmIG5vdCBmb3VuZC4gVGhlIHNpZ25hbFxyXG4gICAqICAgICAgICAgIHVwZGF0ZXMgd2hlbmV2ZXIgdGhlIGNhY2hlIGVudHJ5IGNoYW5nZXMgKGUuZy4sIGR1ZSB0byByZXZhbGlkYXRpb24gb3IgZXhwaXJhdGlvbikuXHJcbiAgICovXHJcbiAgZ2V0RW50cnlPcktleShcclxuICAgIGtleTogKCkgPT4gc3RyaW5nIHwgbnVsbCxcclxuICApOiBTaWduYWw8KENhY2hlRW50cnk8VD4gJiB7IGlzU3RhbGU6IGJvb2xlYW4gfSkgfCBzdHJpbmcgfCBudWxsPiB7XHJcbiAgICBjb25zdCB2YWx1ZVNpZyA9IHRoaXMuZ2V0SW50ZXJuYWwoa2V5KTtcclxuICAgIHJldHVybiBjb21wdXRlZCgoKSA9PiB2YWx1ZVNpZygpID8/IGtleSgpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3JlcyBhIHZhbHVlIGluIHRoZSBjYWNoZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IHVuZGVyIHdoaWNoIHRvIHN0b3JlIHRoZSB2YWx1ZS5cclxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc3RvcmUuXHJcbiAgICogQHBhcmFtIHN0YWxlVGltZSAtIChPcHRpb25hbCkgVGhlIHN0YWxlIHRpbWUgZm9yIHRoaXMgZW50cnksIGluIG1pbGxpc2Vjb25kcy4gT3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGBzdGFsZVRpbWVgLlxyXG4gICAqIEBwYXJhbSB0dGwgLSAoT3B0aW9uYWwpIFRoZSBUVEwgZm9yIHRoaXMgZW50cnksIGluIG1pbGxpc2Vjb25kcy4gT3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGB0dGxgLlxyXG4gICAqL1xyXG4gIHN0b3JlKFxyXG4gICAga2V5OiBzdHJpbmcsXHJcbiAgICB2YWx1ZTogVCxcclxuICAgIHN0YWxlVGltZSA9IHRoaXMuc3RhbGVUaW1lLFxyXG4gICAgdHRsID0gdGhpcy50dGwsXHJcbiAgICBwZXJzaXN0ID0gZmFsc2UsXHJcbiAgKSB7XHJcbiAgICB0aGlzLnN0b3JlSW50ZXJuYWwoa2V5LCB2YWx1ZSwgc3RhbGVUaW1lLCB0dGwsIGZhbHNlLCBwZXJzaXN0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RvcmVJbnRlcm5hbChcclxuICAgIGtleTogc3RyaW5nLFxyXG4gICAgdmFsdWU6IFQsXHJcbiAgICBzdGFsZVRpbWUgPSB0aGlzLnN0YWxlVGltZSxcclxuICAgIHR0bCA9IHRoaXMudHRsLFxyXG4gICAgZnJvbVN5bmMgPSBmYWxzZSxcclxuICAgIHBlcnNpc3QgPSBmYWxzZSxcclxuICApIHtcclxuICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5nZXRVbnRyYWNrZWQoa2V5KTtcclxuICAgIGlmIChlbnRyeSkge1xyXG4gICAgICBjbGVhclRpbWVvdXQoZW50cnkudGltZW91dCk7IC8vIHN0b3AgaW52YWxpZGF0aW9uXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcHJldkNvdW50ID0gZW50cnk/LnVzZUNvdW50ID8/IDA7XHJcblxyXG4gICAgLy8gdHRsIGNhbm5vdCBiZSBsZXNzIHRoYW4gc3RhbGVUaW1lXHJcbiAgICBpZiAodHRsIDwgc3RhbGVUaW1lKSBzdGFsZVRpbWUgPSB0dGw7XHJcblxyXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcclxuXHJcbiAgICBjb25zdCBuZXh0OiBPbWl0PENhY2hlRW50cnk8VD4sICd0aW1lb3V0Jz4gPSB7XHJcbiAgICAgIHZhbHVlLFxyXG4gICAgICBjcmVhdGVkOiBlbnRyeT8uY3JlYXRlZCA/PyBub3csXHJcbiAgICAgIHVwZGF0ZWQ6IG5vdyxcclxuICAgICAgdXNlQ291bnQ6IHByZXZDb3VudCArIDEsXHJcbiAgICAgIHN0YWxlOiBub3cgKyBzdGFsZVRpbWUsXHJcbiAgICAgIGV4cGlyZXNBdDogbm93ICsgdHRsLFxyXG4gICAgICBrZXksXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuaW50ZXJuYWwubXV0YXRlKChtYXApID0+IHtcclxuICAgICAgbWFwLnNldChrZXksIHtcclxuICAgICAgICAuLi5uZXh0LFxyXG4gICAgICAgIHRpbWVvdXQ6IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5pbnZhbGlkYXRlKGtleSksIHR0bCksXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gbWFwO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCFmcm9tU3luYykge1xyXG4gICAgICBpZiAocGVyc2lzdCkgdGhpcy5kYi50aGVuKChkYikgPT4gZGIuc3RvcmUobmV4dCkpO1xyXG5cclxuICAgICAgdGhpcy5icm9hZGNhc3Qoe1xyXG4gICAgICAgIGFjdGlvbjogJ3N0b3JlJyxcclxuICAgICAgICBlbnRyeTogbmV4dCxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbnZhbGlkYXRlcyAocmVtb3ZlcykgYSBjYWNoZSBlbnRyeS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBpbnZhbGlkYXRlLlxyXG4gICAqL1xyXG4gIGludmFsaWRhdGUoa2V5OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuaW52YWxpZGF0ZUludGVybmFsKGtleSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGludmFsaWRhdGVJbnRlcm5hbChrZXk6IHN0cmluZywgZnJvbVN5bmMgPSBmYWxzZSkge1xyXG4gICAgY29uc3QgZW50cnkgPSB0aGlzLmdldFVudHJhY2tlZChrZXkpO1xyXG4gICAgaWYgKCFlbnRyeSkgcmV0dXJuO1xyXG4gICAgY2xlYXJUaW1lb3V0KGVudHJ5LnRpbWVvdXQpO1xyXG4gICAgdGhpcy5pbnRlcm5hbC5tdXRhdGUoKG1hcCkgPT4ge1xyXG4gICAgICBtYXAuZGVsZXRlKGtleSk7XHJcbiAgICAgIHJldHVybiBtYXA7XHJcbiAgICB9KTtcclxuICAgIGlmICghZnJvbVN5bmMpIHtcclxuICAgICAgdGhpcy5kYi50aGVuKChkYikgPT4gZGIucmVtb3ZlKGtleSkpO1xyXG4gICAgICB0aGlzLmJyb2FkY2FzdCh7IGFjdGlvbjogJ2ludmFsaWRhdGUnLCBlbnRyeTogeyBrZXkgfSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBAaW50ZXJuYWwgKi9cclxuICBwcml2YXRlIGNsZWFudXAoKSB7XHJcbiAgICBpZiAodW50cmFja2VkKHRoaXMuaW50ZXJuYWwpLnNpemUgPD0gdGhpcy5jbGVhbnVwT3B0Lm1heFNpemUpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBzb3J0ZWQgPSBBcnJheS5mcm9tKHVudHJhY2tlZCh0aGlzLmludGVybmFsKS5lbnRyaWVzKCkpLnRvU29ydGVkKFxyXG4gICAgICAoYSwgYikgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmNsZWFudXBPcHQudHlwZSA9PT0gJ2xydScpIHtcclxuICAgICAgICAgIHJldHVybiBhWzFdLnVzZUNvdW50IC0gYlsxXS51c2VDb3VudDsgLy8gbGVhc3QgdXNlZCBmaXJzdFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gYVsxXS5jcmVhdGVkIC0gYlsxXS5jcmVhdGVkOyAvLyBvbGRlc3QgZmlyc3RcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGtlZXBDb3VudCA9IE1hdGguZmxvb3IodGhpcy5jbGVhbnVwT3B0Lm1heFNpemUgLyAyKTtcclxuXHJcbiAgICBjb25zdCByZW1vdmVkID0gc29ydGVkLnNsaWNlKDAsIHNvcnRlZC5sZW5ndGggLSBrZWVwQ291bnQpO1xyXG4gICAgY29uc3Qga2VlcCA9IHNvcnRlZC5zbGljZShyZW1vdmVkLmxlbmd0aCwgc29ydGVkLmxlbmd0aCk7XHJcblxyXG4gICAgcmVtb3ZlZC5mb3JFYWNoKChbLCBlXSkgPT4ge1xyXG4gICAgICBjbGVhclRpbWVvdXQoZS50aW1lb3V0KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuaW50ZXJuYWwuc2V0KG5ldyBNYXAoa2VlcCkpO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIHRoZSBjYWNoZS5cclxuICovXHJcbnR5cGUgQ2FjaGVPcHRpb25zID0ge1xyXG4gIC8qKlxyXG4gICAqIFRoZSBkZWZhdWx0IFRpbWUgVG8gTGl2ZSAoVFRMKSBmb3IgY2FjaGUgZW50cmllcywgaW4gbWlsbGlzZWNvbmRzLlxyXG4gICAqL1xyXG4gIHR0bD86IG51bWJlcjtcclxuICAvKipcclxuICAgKiBUaGUgZGVmYXVsdCBkdXJhdGlvbiwgaW4gbWlsbGlzZWNvbmRzLCBkdXJpbmcgd2hpY2ggYSBjYWNoZSBlbnRyeSBpcyBjb25zaWRlcmVkXHJcbiAgICogc3RhbGUgYnV0IGNhbiBzdGlsbCBiZSB1c2VkIHdoaWxlIHJldmFsaWRhdGlvbiBvY2N1cnMgaW4gdGhlIGJhY2tncm91bmQuXHJcbiAgICovXHJcbiAgc3RhbGVUaW1lPzogbnVtYmVyO1xyXG4gIC8qKlxyXG4gICAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIHRoZSBjYWNoZSBjbGVhbnVwIHN0cmF0ZWd5LlxyXG4gICAqL1xyXG4gIGNsZWFudXA/OiBQYXJ0aWFsPENsZWFudXBUeXBlPjtcclxuICAvKipcclxuICAgKiBXaGV0aGVyIHRvIHN5bmNocm9uaXplIGNhY2hlIGFjcm9zcyB0YWJzLiBJZiB0cnVlLCB0aGUgY2FjaGUgd2lsbCB1c2UgYSBCcm9hZGNhc3RDaGFubmVsIHRvIHNlbmQgdXBkYXRlcyBiZXR3ZWVuIHRhYnMuXHJcbiAgICovXHJcbiAgc3luY1RhYnM/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIEdsb2JhbGx5IGRpc2FibGUgcGVyc2lzdGVuY2Ugb2YgY2FjaGUgZW50cmllcy5cclxuICAgKiBJZiBzZXQgdG8gYGZhbHNlYCwgY2FjaGUgZW50cmllcyB3aWxsIG5vdCBiZSBwZXJzaXN0ZWQgdG8gdGhlIGRhdGFiYXNlLlxyXG4gICAqIGB0cnVlYCBtZWFucywgY2FjaGUgZW50cmllcyBjYW4gYmUgcGVyc2lzdGVkLCB0aGV5IG11c3Qgc3RpbGwgYmUgb3B0ZWQgaW50byBvbiB0aGUgcmVzb3VyY2UgbGV2ZWwgJiBhbGxvd2VkIGJ5IHNlcnZlciBoZWFkZXJzLlxyXG4gICAqIEBkZWZhdWx0IHRydWVcclxuICAgKi9cclxuICBwZXJzaXN0PzogYm9vbGVhbjtcclxuICAvKipcclxuICAgKiBWZXJzaW9uIG9mIHRoZSBjYWNoZXMgZGF0YWJhc2UsIGluY3JlbWVudCB0aGlzIGlmIHRoZSBpbnRlcmZhY2VzIGNoYW5nZSwgdGhpcyB3aWxsIGNhdXNlIHRoZSBvbGQgZGF0YSB0byBiZSBkZWxldGVkLlxyXG4gICAqIE1pbmltdW0gdmFsdWUgaXMgMSwgc28gZmlyc3QgaW5jcmVtZW50IHNob3VsZCBiZSAyLlxyXG4gICAqIEBkZWZhdWx0IDFcclxuICAgKi9cclxuICB2ZXJzaW9uPzogbnVtYmVyO1xyXG59O1xyXG5cclxuY29uc3QgQ0xJRU5UX0NBQ0hFX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPENhY2hlPEh0dHBSZXNwb25zZTx1bmtub3duPj4+KFxyXG4gICdJTlRFUk5BTF9DTElFTlRfQ0FDSEUnLFxyXG4pO1xyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIHRoZSBpbnN0YW5jZSBvZiB0aGUgUXVlcnlDYWNoZSBmb3IgcXVlcnlSZXNvdXJjZS4gVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgY2FsbGVkXHJcbiAqIGluIHlvdXIgYXBwbGljYXRpb24ncyByb290IGNvbmZpZ3VyYXRpb24sIGJ1dCBjYW4gYWxzbyBiZSBvdmVycmlkZW4gd2l0aCBjb21wb25lbnQvbW9kdWxlIHByb3ZpZGVycy5cclxuICpcclxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBjYWNoZS5cclxuICogQHJldHVybnMgQW4gQW5ndWxhciBgUHJvdmlkZXJgIGZvciB0aGUgY2FjaGUuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIC8vIEluIHlvdXIgYXBwLmNvbmZpZy50cyBvciBBcHBNb2R1bGUgcHJvdmlkZXJzOlxyXG4gKlxyXG4gKiBpbXBvcnQgeyBwcm92aWRlUXVlcnlDYWNoZSB9IGZyb20gJy4veW91ci1jYWNoZSc7XHJcbiAqXHJcbiAqIGV4cG9ydCBjb25zdCBhcHBDb25maWc6IEFwcGxpY2F0aW9uQ29uZmlnID0ge1xyXG4gKiAgIHByb3ZpZGVyczogW1xyXG4gKiAgICAgcHJvdmlkZVF1ZXJ5Q2FjaGUoe1xyXG4gKiAgICAgICB0dGw6IDYwMDAwLCAvLyBEZWZhdWx0IFRUTCBvZiA2MCBzZWNvbmRzXHJcbiAqICAgICAgIHN0YWxlVGltZTogMzAwMDAsIC8vIERlZmF1bHQgc3RhbGVUaW1lIG9mIDMwIHNlY29uZHNcclxuICogICAgIH0pLFxyXG4gKiAgICAgLy8gLi4uIG90aGVyIHByb3ZpZGVyc1xyXG4gKiAgIF1cclxuICogfTtcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlUXVlcnlDYWNoZShvcHQ/OiBDYWNoZU9wdGlvbnMpOiBQcm92aWRlciB7XHJcbiAgY29uc3Qgc2VyaWFsaXplID0gKHZhbHVlOiBIdHRwUmVzcG9uc2U8dW5rbm93bj4pID0+IHtcclxuICAgIGNvbnN0IGhlYWRlcnNSZWNvcmQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xyXG5cclxuICAgIGNvbnN0IGhlYWRlcktleXMgPSB2YWx1ZS5oZWFkZXJzLmtleXMoKTtcclxuICAgIGhlYWRlcktleXMuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHZhbHVlLmhlYWRlcnMuZ2V0QWxsKGtleSk7XHJcbiAgICAgIGlmICghdmFsdWVzKSByZXR1cm47XHJcbiAgICAgIGhlYWRlcnNSZWNvcmRba2V5XSA9IHZhbHVlcztcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgIGJvZHk6IHZhbHVlLmJvZHksXHJcbiAgICAgIHN0YXR1czogdmFsdWUuc3RhdHVzLFxyXG4gICAgICBzdGF0dXNUZXh0OiB2YWx1ZS5zdGF0dXNUZXh0LFxyXG4gICAgICBoZWFkZXJzOiBoZWFkZXJLZXlzLmxlbmd0aCA+IDAgPyBoZWFkZXJzUmVjb3JkIDogdW5kZWZpbmVkLFxyXG4gICAgICB1cmw6IHZhbHVlLnVybCxcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IGRlc2VyaWFsaXplID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UodmFsdWUpO1xyXG5cclxuICAgICAgaWYgKCFwYXJzZWQgfHwgdHlwZW9mIHBhcnNlZCAhPT0gJ29iamVjdCcgfHwgISgnYm9keScgaW4gcGFyc2VkKSlcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY2FjaGUgZW50cnkgZm9ybWF0Jyk7XHJcblxyXG4gICAgICBjb25zdCBoZWFkZXJzID0gcGFyc2VkLmhlYWRlcnNcclxuICAgICAgICA/IG5ldyBIdHRwSGVhZGVycyhwYXJzZWQuaGVhZGVycylcclxuICAgICAgICA6IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgIHJldHVybiBuZXcgSHR0cFJlc3BvbnNlKHtcclxuICAgICAgICBib2R5OiBwYXJzZWQuYm9keSxcclxuICAgICAgICBzdGF0dXM6IHBhcnNlZC5zdGF0dXMsXHJcbiAgICAgICAgc3RhdHVzVGV4dDogcGFyc2VkLnN0YXR1c1RleHQsXHJcbiAgICAgICAgaGVhZGVyczogaGVhZGVycyxcclxuICAgICAgICB1cmw6IHBhcnNlZC51cmwsXHJcbiAgICAgIH0pO1xyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGRlc2VyaWFsaXplIGNhY2hlIGVudHJ5OicsIGVycik7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IHN5bmNUYWJzT3B0ID0gb3B0Py5zeW5jVGFic1xyXG4gICAgPyB7XHJcbiAgICAgICAgaWQ6ICdtbXN0YWNrLXF1ZXJ5LWNhY2hlLXN5bmMnLFxyXG4gICAgICAgIHNlcmlhbGl6ZSxcclxuICAgICAgICBkZXNlcmlhbGl6ZSxcclxuICAgICAgfVxyXG4gICAgOiB1bmRlZmluZWQ7XHJcblxyXG4gIGxldCBkYiA9XHJcbiAgICBvcHQ/LnBlcnNpc3QgPT09IGZhbHNlXHJcbiAgICAgID8gdW5kZWZpbmVkXHJcbiAgICAgIDogY3JlYXRlU2luZ2xlU3RvcmVEQjxzdHJpbmc+KFxyXG4gICAgICAgICAgJ21tc3RhY2stcXVlcnktY2FjaGUtZGInLFxyXG4gICAgICAgICAgKHZlcnNpb24pID0+IGBxdWVyeS1zdG9yZV92JHt2ZXJzaW9ufWAsXHJcbiAgICAgICAgICBvcHQ/LnZlcnNpb24sXHJcbiAgICAgICAgKS50aGVuKChkYik6IENhY2hlREI8SHR0cFJlc3BvbnNlPHVua25vd24+PiA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBnZXRBbGw6ICgpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gZGIuZ2V0QWxsKCkudGhlbigoZW50cmllcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVudHJpZXNcclxuICAgICAgICAgICAgICAgICAgLm1hcCgoZW50cnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGRlc2VyaWFsaXplKGVudHJ5LnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAuLi5lbnRyeSxcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGUpID0+IGUgIT09IG51bGwpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzdG9yZTogKGVudHJ5KSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGRiLnN0b3JlKHsgLi4uZW50cnksIHZhbHVlOiBzZXJpYWxpemUoZW50cnkudmFsdWUpIH0pO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICByZW1vdmU6IGRiLnJlbW92ZSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBwcm92aWRlOiBDTElFTlRfQ0FDSEVfVE9LRU4sXHJcbiAgICB1c2VWYWx1ZTogbmV3IENhY2hlKFxyXG4gICAgICBvcHQ/LnR0bCxcclxuICAgICAgb3B0Py5zdGFsZVRpbWUsXHJcbiAgICAgIG9wdD8uY2xlYW51cCxcclxuICAgICAgc3luY1RhYnNPcHQsXHJcbiAgICAgIGRiLFxyXG4gICAgKSxcclxuICB9O1xyXG59XHJcblxyXG5jbGFzcyBOb29wQ2FjaGU8VD4gZXh0ZW5kcyBDYWNoZTxUPiB7XHJcbiAgb3ZlcnJpZGUgc3RvcmUoXzogc3RyaW5nLCBfXzogVCwgX19fID0gc3VwZXIuc3RhbGVUaW1lLCBfX19fID0gc3VwZXIudHRsKSB7XHJcbiAgICAvLyBub29wXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogSW5qZWN0cyB0aGUgYFF1ZXJ5Q2FjaGVgIGluc3RhbmNlIHRoYXQgaXMgdXNlZCB3aXRoaW4gcXVlcnlSZXNvdXJjZS5cclxuICogQWxsb3dzIGZvciBkaXJlY3QgbW9kaWZpY2F0aW9uIG9mIGNhY2hlZCBkYXRhLCBidXQgaXMgbW9zdGx5IG1lYW50IGZvciBpbnRlcm5hbCB1c2UuXHJcbiAqXHJcbiAqIEBwYXJhbSBpbmplY3RvciAtIChPcHRpb25hbCkgVGhlIGluamVjdG9yIHRvIHVzZS4gIElmIG5vdCBwcm92aWRlZCwgdGhlIGN1cnJlbnRcclxuICogICAgICAgICAgICAgICAgICAgaW5qZWN0aW9uIGNvbnRleHQgaXMgdXNlZC5cclxuICogQHJldHVybnMgVGhlIGBRdWVyeUNhY2hlYCBpbnN0YW5jZS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogLy8gSW4geW91ciBjb21wb25lbnQgb3Igc2VydmljZTpcclxuICpcclxuICogaW1wb3J0IHsgaW5qZWN0UXVlcnlDYWNoZSB9IGZyb20gJy4veW91ci1jYWNoZSc7XHJcbiAqXHJcbiAqIGNvbnN0cnVjdG9yKCkge1xyXG4gKiAgIGNvbnN0IGNhY2hlID0gaW5qZWN0UXVlcnlDYWNoZSgpO1xyXG4gKlxyXG4gKiAgIGNvbnN0IG15RGF0YSA9IGNhY2hlLmdldCgoKSA9PiAnbXktZGF0YS1rZXknKTtcclxuICogICBpZiAobXlEYXRhKCkgIT09IG51bGwpIHtcclxuICogICAgIC8vIC4uLiB1c2UgY2FjaGVkIGRhdGEgLi4uXHJcbiAqICAgfVxyXG4gKiB9XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0UXVlcnlDYWNoZTxUUmF3ID0gdW5rbm93bj4oXHJcbiAgaW5qZWN0b3I/OiBJbmplY3RvcixcclxuKTogQ2FjaGU8SHR0cFJlc3BvbnNlPFRSYXc+PiB7XHJcbiAgY29uc3QgY2FjaGUgPSBpbmplY3RvclxyXG4gICAgPyBpbmplY3Rvci5nZXQoQ0xJRU5UX0NBQ0hFX1RPS0VOLCBudWxsLCB7XHJcbiAgICAgICAgb3B0aW9uYWw6IHRydWUsXHJcbiAgICAgIH0pXHJcbiAgICA6IGluamVjdChDTElFTlRfQ0FDSEVfVE9LRU4sIHtcclxuICAgICAgICBvcHRpb25hbDogdHJ1ZSxcclxuICAgICAgfSk7XHJcblxyXG4gIGlmICghY2FjaGUpIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSlcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICdDYWNoZSBub3QgcHJvdmlkZWQsIHBsZWFzZSBhZGQgcHJvdmlkZVF1ZXJ5Q2FjaGUoKSB0byBwcm92aWRlcnMgYXJyYXknLFxyXG4gICAgICApO1xyXG4gICAgZWxzZSByZXR1cm4gbmV3IE5vb3BDYWNoZSgpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGNhY2hlIGFzIENhY2hlPEh0dHBSZXNwb25zZTxUUmF3Pj47XHJcbn1cclxuIl19","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, optStaleTime, optTTL) {\n let staleTime = optStaleTime;\n let ttl = optTTL;\n if (cacheControl.immutable)\n return {\n staleTime: Infinity,\n ttl: Infinity,\n };\n if (cacheControl.maxAge !== null)\n ttl = cacheControl.maxAge * 1000;\n if (cacheControl.staleWhileRevalidate !== null)\n staleTime = cacheControl.staleWhileRevalidate * 1000;\n // if no-cache is set, we must always revalidate\n if (cacheControl.noCache || cacheControl.mustRevalidate)\n staleTime = 0;\n if (ttl !== undefined && staleTime !== undefined && ttl < staleTime) {\n staleTime = ttl;\n }\n return { staleTime, ttl };\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 if (opt.bustBrowserCache) {\n req = req.clone({\n setParams: { _cb: Date.now().toString() },\n });\n }\n return next(req).pipe(tap((event) => {\n if (event instanceof HttpResponse && event.ok) {\n const cacheControl = parseCacheControlHeader(event);\n if (cacheControl.noStore && !opt.ignoreCacheControl)\n return;\n const { staleTime, ttl } = opt.ignoreCacheControl\n ? opt\n : resolveTimings(cacheControl, opt.staleTime, opt.ttl);\n if (opt.ttl === 0)\n return; // no point\n const parsedResponse = opt.parse\n ? new HttpResponse({\n body: opt.parse(event.body),\n headers: event.headers,\n status: event.status,\n statusText: event.statusText,\n url: event.url ?? undefined,\n })\n : event;\n cache.store(key, parsedResponse, staleTime, ttl, opt.persist);\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yZXNvdXJjZS9zcmMvbGliL3V0aWwvY2FjaGUvY2FjaGUuaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFdBQVcsRUFDWCxnQkFBZ0IsRUFLaEIsWUFBWSxHQUNiLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQWEzQyxNQUFNLGFBQWEsR0FBRyxJQUFJLGdCQUFnQixDQUFvQixHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLEtBQUssRUFBRSxLQUFLO0NBQ2IsQ0FBQyxDQUFDLENBQUM7QUFFSixNQUFNLFVBQVUsZUFBZSxDQUM3QixHQUFHLEdBQUcsSUFBSSxXQUFXLEVBQUUsRUFDdkIsR0FFQztJQUVELE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsR0FBZ0I7SUFDdkMsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFXRCxTQUFTLHVCQUF1QixDQUM5QixHQUEwQjtJQUUxQixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUVoRCxJQUFJLE9BQU8sR0FBa0IsSUFBSSxDQUFDO0lBQ2xDLE1BQU0sVUFBVSxHQUF5QjtRQUN2QyxPQUFPLEVBQUUsS0FBSztRQUNkLE9BQU8sRUFBRSxLQUFLO1FBQ2QsY0FBYyxFQUFFLEtBQUs7UUFDckIsU0FBUyxFQUFFLEtBQUs7UUFDaEIsTUFBTSxFQUFFLElBQUk7UUFDWixvQkFBb0IsRUFBRSxJQUFJO0tBQzNCLENBQUM7SUFFRixJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU8sVUFBVSxDQUFDO0lBRS9CLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFaEMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN6QixNQUFNLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEQsTUFBTSxHQUFHLEdBQUcsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRTdDLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDWixLQUFLLFVBQVU7Z0JBQ2IsVUFBVSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQzFCLE1BQU07WUFDUixLQUFLLFVBQVU7Z0JBQ2IsVUFBVSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQzFCLE1BQU07WUFDUixLQUFLLGlCQUFpQixDQUFDO1lBQ3ZCLEtBQUssa0JBQWtCO2dCQUNyQixVQUFVLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztnQkFDakMsTUFBTTtZQUNSLEtBQUssV0FBVztnQkFDZCxVQUFVLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztnQkFDNUIsTUFBTTtZQUNSLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDZixJQUFJLENBQUMsS0FBSztvQkFBRSxNQUFNO2dCQUNsQixNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztvQkFBRSxVQUFVLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQztnQkFDekQsTUFBTTtZQUNSLENBQUM7WUFDRCxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxLQUFLO29CQUFFLE1BQU07Z0JBQ2xCLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO29CQUFFLE9BQU8sR0FBRyxXQUFXLENBQUM7Z0JBQy9DLE1BQU07WUFDUixDQUFDO1lBQ0QsS0FBSyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxLQUFLO29CQUFFLE1BQU07Z0JBQ2xCLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO29CQUFFLFVBQVUsQ0FBQyxvQkFBb0IsR0FBRyxXQUFXLENBQUM7Z0JBQ3ZFLE1BQU07WUFDUixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsSUFBSSxPQUFPLEtBQUssSUFBSTtRQUFFLFVBQVUsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO0lBRWxELHVDQUF1QztJQUN2QyxJQUFJLFVBQVUsQ0FBQyxPQUFPO1FBQ3BCLE9BQU87WUFDTCxPQUFPLEVBQUUsSUFBSTtZQUNiLE9BQU8sRUFBRSxLQUFLO1lBQ2QsY0FBYyxFQUFFLEtBQUs7WUFDckIsU0FBUyxFQUFFLEtBQUs7WUFDaEIsTUFBTSxFQUFFLElBQUk7WUFDWixvQkFBb0IsRUFBRSxJQUFJO1NBQzNCLENBQUM7SUFFSixnREFBZ0Q7SUFDaEQsSUFBSSxVQUFVLENBQUMsU0FBUztRQUN0QixPQUFPO1lBQ0wsR0FBRyxVQUFVO1lBQ2IsTUFBTSxFQUFFLElBQUk7U0FDYixDQUFDO0lBRUosT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUNyQixZQUFrQyxFQUNsQyxZQUFxQixFQUNyQixNQUFlO0lBRWYsSUFBSSxTQUFTLEdBQUcsWUFBWSxDQUFDO0lBQzdCLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQztJQUVqQixJQUFJLFlBQVksQ0FBQyxTQUFTO1FBQ3hCLE9BQU87WUFDTCxTQUFTLEVBQUUsUUFBUTtZQUNuQixHQUFHLEVBQUUsUUFBUTtTQUNkLENBQUM7SUFFSixJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssSUFBSTtRQUFFLEdBQUcsR0FBRyxZQUFZLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUVuRSxJQUFJLFlBQVksQ0FBQyxvQkFBb0IsS0FBSyxJQUFJO1FBQzVDLFNBQVMsR0FBRyxZQUFZLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO0lBRXZELGdEQUFnRDtJQUNoRCxJQUFJLFlBQVksQ0FBQyxPQUFPLElBQUksWUFBWSxDQUFDLGNBQWM7UUFBRSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBRXZFLElBQUksR0FBRyxLQUFLLFNBQVMsSUFBSSxTQUFTLEtBQUssU0FBUyxJQUFJLEdBQUcsR0FBRyxTQUFTLEVBQUUsQ0FBQztRQUNwRSxTQUFTLEdBQUcsR0FBRyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzVCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLGNBQWMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDO0lBRTNDLE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxDQUFTLGNBQWMsQ0FBQyxDQUFDO0lBRXRELE9BQU8sQ0FDTCxHQUF5QixFQUN6QixJQUFtQixFQUNhLEVBQUU7UUFDbEMsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUVqQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckQsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV6QyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUs7WUFBRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUM7UUFDekMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLCtCQUErQjtRQUV0RSx1Q0FBdUM7UUFDdkMsSUFBSSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTztZQUFFLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVwRCxpSEFBaUg7UUFFakgsTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLE1BQU0sWUFBWSxHQUFHLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUUvRCxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFFRCxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLENBQUM7UUFFRCxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3pCLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO2dCQUNkLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUU7YUFDMUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FDbkIsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDWixJQUFJLEtBQUssWUFBWSxZQUFZLElBQUksS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUM5QyxNQUFNLFlBQVksR0FBRyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFcEQsSUFBSSxZQUFZLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQjtvQkFBRSxPQUFPO2dCQUU1RCxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxrQkFBa0I7b0JBQy9DLENBQUMsQ0FBQyxHQUFHO29CQUNMLENBQUMsQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUV6RCxJQUFJLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztvQkFBRSxPQUFPLENBQUMsV0FBVztnQkFFdEMsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDLEtBQUs7b0JBQzlCLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQzt3QkFDZixJQUFJLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO3dCQUMzQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87d0JBQ3RCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTt3QkFDcEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO3dCQUM1QixHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsSUFBSSxTQUFTO3FCQUM1QixDQUFDO29CQUNKLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBRVYsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hFLENBQUM7UUFDSCxDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNaLGlEQUFpRDtZQUNqRCxJQUFJLEtBQUssWUFBWSxZQUFZLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ25FLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNyQixDQUFDO1lBRUQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgSHR0cENvbnRleHQsXHJcbiAgSHR0cENvbnRleHRUb2tlbixcclxuICB0eXBlIEh0dHBFdmVudCxcclxuICB0eXBlIEh0dHBIYW5kbGVyRm4sXHJcbiAgdHlwZSBIdHRwSW50ZXJjZXB0b3JGbixcclxuICB0eXBlIEh0dHBSZXF1ZXN0LFxyXG4gIEh0dHBSZXNwb25zZSxcclxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHRhcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBpbmplY3RRdWVyeUNhY2hlIH0gZnJvbSAnLi9jYWNoZSc7XHJcblxyXG50eXBlIENhY2hlRW50cnlPcHRpb25zID0ge1xyXG4gIGtleT86IHN0cmluZztcclxuICB0dGw/OiBudW1iZXI7XHJcbiAgc3RhbGVUaW1lPzogbnVtYmVyO1xyXG4gIGNhY2hlOiBib29sZWFuO1xyXG4gIGJ1c3RCcm93c2VyQ2FjaGU/OiBib29sZWFuO1xyXG4gIGlnbm9yZUNhY2hlQ29udHJvbD86IGJvb2xlYW47XHJcbiAgcGFyc2U/OiAodmFsOiB1bmtub3duKSA9PiB1bmtub3duO1xyXG4gIHBlcnNpc3Q/OiBib29sZWFuO1xyXG59O1xyXG5cclxuY29uc3QgQ0FDSEVfQ09OVEVYVCA9IG5ldyBIdHRwQ29udGV4dFRva2VuPENhY2hlRW50cnlPcHRpb25zPigoKSA9PiAoe1xyXG4gIGNhY2hlOiBmYWxzZSxcclxufSkpO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldENhY2hlQ29udGV4dChcclxuICBjdHggPSBuZXcgSHR0cENvbnRleHQoKSxcclxuICBvcHQ6IE9taXQ8Q2FjaGVFbnRyeU9wdGlvbnMsICdjYWNoZScgfCAna2V5Jz4gJiB7XHJcbiAgICBrZXk6IFJlcXVpcmVkPENhY2hlRW50cnlPcHRpb25zPlsna2V5J107XHJcbiAgfSxcclxuKSB7XHJcbiAgcmV0dXJuIGN0eC5zZXQoQ0FDSEVfQ09OVEVYVCwgeyAuLi5vcHQsIGNhY2hlOiB0cnVlIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRDYWNoZUNvbnRleHQoY3R4OiBIdHRwQ29udGV4dCk6IENhY2hlRW50cnlPcHRpb25zIHtcclxuICByZXR1cm4gY3R4LmdldChDQUNIRV9DT05URVhUKTtcclxufVxyXG5cclxudHlwZSBSZXNvbHZlZENhY2hlQ29udHJvbCA9IHtcclxuICBub1N0b3JlOiBib29sZWFuO1xyXG4gIG5vQ2FjaGU6IGJvb2xlYW47XHJcbiAgbXVzdFJldmFsaWRhdGU6IGJvb2xlYW47XHJcbiAgaW1tdXRhYmxlOiBib29sZWFuO1xyXG4gIG1heEFnZTogbnVtYmVyIHwgbnVsbDtcclxuICBzdGFsZVdoaWxlUmV2YWxpZGF0ZTogbnVtYmVyIHwgbnVsbDtcclxufTtcclxuXHJcbmZ1bmN0aW9uIHBhcnNlQ2FjaGVDb250cm9sSGVhZGVyKFxyXG4gIHJlcTogSHR0cFJlc3BvbnNlPHVua25vd24+LFxyXG4pOiBSZXNvbHZlZENhY2hlQ29udHJvbCB7XHJcbiAgY29uc3QgaGVhZGVyID0gcmVxLmhlYWRlcnMuZ2V0KCdDYWNoZS1Db250cm9sJyk7XHJcblxyXG4gIGxldCBzTWF4QWdlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBjb25zdCBkaXJlY3RpdmVzOiBSZXNvbHZlZENhY2hlQ29udHJvbCA9IHtcclxuICAgIG5vU3RvcmU6IGZhbHNlLFxyXG4gICAgbm9DYWNoZTogZmFsc2UsXHJcbiAgICBtdXN0UmV2YWxpZGF0ZTogZmFsc2UsXHJcbiAgICBpbW11dGFibGU6IGZhbHNlLFxyXG4gICAgbWF4QWdlOiBudWxsLFxyXG4gICAgc3RhbGVXaGlsZVJldmFsaWRhdGU6IG51bGwsXHJcbiAgfTtcclxuXHJcbiAgaWYgKCFoZWFkZXIpIHJldHVybiBkaXJlY3RpdmVzO1xyXG5cclxuICBjb25zdCBwYXJ0cyA9IGhlYWRlci5zcGxpdCgnLCcpO1xyXG5cclxuICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcclxuICAgIGNvbnN0IFt1bnBhcnNlZEtleSwgdmFsdWVdID0gcGFydC50cmltKCkuc3BsaXQoJz0nKTtcclxuICAgIGNvbnN0IGtleSA9IHVucGFyc2VkS2V5LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgIHN3aXRjaCAoa2V5KSB7XHJcbiAgICAgIGNhc2UgJ25vLXN0b3JlJzpcclxuICAgICAgICBkaXJlY3RpdmVzLm5vU3RvcmUgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICduby1jYWNoZSc6XHJcbiAgICAgICAgZGlyZWN0aXZlcy5ub0NhY2hlID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnbXVzdC1yZXZhbGlkYXRlJzpcclxuICAgICAgY2FzZSAncHJveHktcmV2YWxpZGF0ZSc6XHJcbiAgICAgICAgZGlyZWN0aXZlcy5tdXN0UmV2YWxpZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2ltbXV0YWJsZSc6XHJcbiAgICAgICAgZGlyZWN0aXZlcy5pbW11dGFibGUgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdtYXgtYWdlJzoge1xyXG4gICAgICAgIGlmICghdmFsdWUpIGJyZWFrO1xyXG4gICAgICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcclxuICAgICAgICBpZiAoIWlzTmFOKHBhcnNlZFZhbHVlKSkgZGlyZWN0aXZlcy5tYXhBZ2UgPSBwYXJzZWRWYWx1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdzLW1heC1hZ2UnOiB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkgYnJlYWs7XHJcbiAgICAgICAgY29uc3QgcGFyc2VkVmFsdWUgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xyXG4gICAgICAgIGlmICghaXNOYU4ocGFyc2VkVmFsdWUpKSBzTWF4QWdlID0gcGFyc2VkVmFsdWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnc3RhbGUtd2hpbGUtcmV2YWxpZGF0ZSc6IHtcclxuICAgICAgICBpZiAoIXZhbHVlKSBicmVhaztcclxuICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XHJcbiAgICAgICAgaWYgKCFpc05hTihwYXJzZWRWYWx1ZSkpIGRpcmVjdGl2ZXMuc3RhbGVXaGlsZVJldmFsaWRhdGUgPSBwYXJzZWRWYWx1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gcy1tYXgtYWdlIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBtYXgtYWdlXHJcbiAgaWYgKHNNYXhBZ2UgIT09IG51bGwpIGRpcmVjdGl2ZXMubWF4QWdlID0gc01heEFnZTtcclxuXHJcbiAgLy8gaWYgbm8gc3RvcmUgbm90aGluZyBlbHNlIGlzIHJlbGV2YW50XHJcbiAgaWYgKGRpcmVjdGl2ZXMubm9TdG9yZSlcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5vU3RvcmU6IHRydWUsXHJcbiAgICAgIG5vQ2FjaGU6IGZhbHNlLFxyXG4gICAgICBtdXN0UmV2YWxpZGF0ZTogZmFsc2UsXHJcbiAgICAgIGltbXV0YWJsZTogZmFsc2UsXHJcbiAgICAgIG1heEFnZTogbnVsbCxcclxuICAgICAgc3RhbGVXaGlsZVJldmFsaWRhdGU6IG51bGwsXHJcbiAgICB9O1xyXG5cclxuICAvLyBtYXggYWdlIGRvZXMgbm90IGFwcGx5IHRvIGltbXV0YWJsZSByZXNvdXJjZXNcclxuICBpZiAoZGlyZWN0aXZlcy5pbW11dGFibGUpXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAuLi5kaXJlY3RpdmVzLFxyXG4gICAgICBtYXhBZ2U6IG51bGwsXHJcbiAgICB9O1xyXG5cclxuICByZXR1cm4gZGlyZWN0aXZlcztcclxufVxyXG5cclxuZnVuY3Rpb24gcmVzb2x2ZVRpbWluZ3MoXHJcbiAgY2FjaGVDb250cm9sOiBSZXNvbHZlZENhY2hlQ29udHJvbCxcclxuICBvcHRTdGFsZVRpbWU/OiBudW1iZXIsXHJcbiAgb3B0VFRMPzogbnVtYmVyLFxyXG4pOiB7IHN0YWxlVGltZT86IG51bWJlcjsgdHRsPzogbnVtYmVyIH0ge1xyXG4gIGxldCBzdGFsZVRpbWUgPSBvcHRTdGFsZVRpbWU7XHJcbiAgbGV0IHR0bCA9IG9wdFRUTDtcclxuXHJcbiAgaWYgKGNhY2hlQ29udHJvbC5pbW11dGFibGUpXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzdGFsZVRpbWU6IEluZmluaXR5LFxyXG4gICAgICB0dGw6IEluZmluaXR5LFxyXG4gICAgfTtcclxuXHJcbiAgaWYgKGNhY2hlQ29udHJvbC5tYXhBZ2UgIT09IG51bGwpIHR0bCA9IGNhY2hlQ29udHJvbC5tYXhBZ2UgKiAxMDAwO1xyXG5cclxuICBpZiAoY2FjaGVDb250cm9sLnN0YWxlV2hpbGVSZXZhbGlkYXRlICE9PSBudWxsKVxyXG4gICAgc3RhbGVUaW1lID0gY2FjaGVDb250cm9sLnN0YWxlV2hpbGVSZXZhbGlkYXRlICogMTAwMDtcclxuXHJcbiAgLy8gaWYgbm8tY2FjaGUgaXMgc2V0LCB3ZSBtdXN0IGFsd2F5cyByZXZhbGlkYXRlXHJcbiAgaWYgKGNhY2hlQ29udHJvbC5ub0NhY2hlIHx8IGNhY2hlQ29udHJvbC5tdXN0UmV2YWxpZGF0ZSkgc3RhbGVUaW1lID0gMDtcclxuXHJcbiAgaWYgKHR0bCAhPT0gdW5kZWZpbmVkICYmIHN0YWxlVGltZSAhPT0gdW5kZWZpbmVkICYmIHR0bCA8IHN0YWxlVGltZSkge1xyXG4gICAgc3RhbGVUaW1lID0gdHRsO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHsgc3RhbGVUaW1lLCB0dGwgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYW4gYEh0dHBJbnRlcmNlcHRvckZuYCB0aGF0IGltcGxlbWVudHMgY2FjaGluZyBmb3IgSFRUUCByZXF1ZXN0cy4gVGhpcyBpbnRlcmNlcHRvclxyXG4gKiBjaGVja3MgZm9yIGEgY2FjaGluZyBjb25maWd1cmF0aW9uIGluIHRoZSByZXF1ZXN0J3MgYEh0dHBDb250ZXh0YCAoaW50ZXJuYWxseSBzZXQgYnkgdGhlIHF1ZXJ5UmVzb3VyY2UpLlxyXG4gKiBJZiBjYWNoaW5nIGlzIGVuYWJsZWQsIGl0IGF0dGVtcHRzIHRvIHJldHJpZXZlIHJlc3BvbnNlcyBmcm9tIHRoZSBjYWNoZS4gSWYgYSBjYWNoZWQgcmVzcG9uc2VcclxuICogaXMgZm91bmQgYW5kIGlzIG5vdCBzdGFsZSwgaXQncyByZXR1cm5lZCBkaXJlY3RseS4gIElmIHRoZSBjYWNoZWQgcmVzcG9uc2UgaXMgc3RhbGUsIGl0J3MgcmV0dXJuZWQsXHJcbiAqIGFuZCBhIGJhY2tncm91bmQgcmV2YWxpZGF0aW9uIHJlcXVlc3QgaXMgbWFkZS4gIElmIG5vIGNhY2hlZCByZXNwb25zZSBpcyBmb3VuZCwgdGhlIHJlcXVlc3RcclxuICogaXMgbWFkZSB0byB0aGUgc2VydmVyLCBhbmQgdGhlIHJlc3BvbnNlIGlzIGNhY2hlZCBhY2NvcmRpbmcgdG8gdGhlIGNvbmZpZ3VyZWQgVFRMIGFuZCBzdGFsZW5lc3MuXHJcbiAqIFRoZSBpbnRlcmNlcHRvciBhbHNvIHJlc3BlY3RzIGBDYWNoZS1Db250cm9sYCBoZWFkZXJzIGZyb20gdGhlIHNlcnZlci5cclxuICpcclxuICogQHBhcmFtIGFsbG93ZWRNZXRob2RzIC0gQW4gYXJyYXkgb2YgSFRUUCBtZXRob2RzIGZvciB3aGljaCBjYWNoaW5nIHNob3VsZCBiZSBlbmFibGVkLlxyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIGBbJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnXWAuXHJcbiAqXHJcbiAqIEByZXR1cm5zIEFuIGBIdHRwSW50ZXJjZXB0b3JGbmAgdGhhdCBpbXBsZW1lbnRzIHRoZSBjYWNoaW5nIGxvZ2ljLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAvLyBJbiB5b3VyIGFwcC5jb25maWcudHMgb3IgbW9kdWxlIHByb3ZpZGVyczpcclxuICpcclxuICogaW1wb3J0IHsgcHJvdmlkZUh0dHBDbGllbnQsIHdpdGhJbnRlcmNlcHRvcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbiAqIGltcG9ydCB7IGNyZWF0ZUNhY2hlSW50ZXJjZXB0b3IgfSBmcm9tICdAbW1zdGFjay9yZXNvdXJjZSc7XHJcbiAqXHJcbiAqIGV4cG9ydCBjb25zdCBhcHBDb25maWc6IEFwcGxpY2F0aW9uQ29uZmlnID0ge1xyXG4gKiAgIHByb3ZpZGVyczogW1xyXG4gKiAgICAgcHJvdmlkZUh0dHBDbGllbnQod2l0aEludGVyY2VwdG9ycyhbY3JlYXRlQ2FjaGVJbnRlcmNlcHRvcigpXSkpLFxyXG4gKiAgICAgLy8gLi4uIG90aGVyIHByb3ZpZGVyc1xyXG4gKiAgIF0sXHJcbiAqIH07XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FjaGVJbnRlcmNlcHRvcihcclxuICBhbGxvd2VkTWV0aG9kcyA9IFsnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUyddLFxyXG4pOiBIdHRwSW50ZXJjZXB0b3JGbiB7XHJcbiAgY29uc3QgQ0FDSEVfTUVUSE9EUyA9IG5ldyBTZXQ8c3RyaW5nPihhbGxvd2VkTWV0aG9kcyk7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICByZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+LFxyXG4gICAgbmV4dDogSHR0cEhhbmRsZXJGbixcclxuICApOiBPYnNlcnZhYmxlPEh0dHBFdmVudDx1bmtub3duPj4gPT4ge1xyXG4gICAgY29uc3QgY2FjaGUgPSBpbmplY3RRdWVyeUNhY2hlKCk7XHJcblxyXG4gICAgaWYgKCFDQUNIRV9NRVRIT0RTLmhhcyhyZXEubWV0aG9kKSkgcmV0dXJuIG5leHQocmVxKTtcclxuICAgIGNvbnN0IG9wdCA9IGdldENhY2hlQ29udGV4dChyZXEuY29udGV4dCk7XHJcblxyXG4gICAgaWYgKCFvcHQuY2FjaGUpIHJldHVybiBuZXh0KHJlcSk7XHJcblxyXG4gICAgY29uc3Qga2V5ID0gb3B0LmtleSA/PyByZXEudXJsV2l0aFBhcmFtcztcclxuICAgIGNvbnN0IGVudHJ5ID0gY2FjaGUuZ2V0VW50cmFja2VkKGtleSk7IC8vIG51bGwgaWYgZXhwaXJlZCBvciBub3QgZm91bmRcclxuXHJcbiAgICAvLyBJZiB0aGUgZW50cnkgaXMgbm90IHN0YWxlLCByZXR1cm4gaXRcclxuICAgIGlmIChlbnRyeSAmJiAhZW50cnkuaXNTdGFsZSkgcmV0dXJuIG9mKGVudHJ5LnZhbHVlKTtcclxuXHJcbiAgICAvLyByZXNvdXJjZSBpdHNlbGYgaGFuZGxlcyBjYXNlIG9mIHNob3dpbmcgc3RhbGUgZGF0YS4uLnRoZSByZXF1ZXN0IG11c3QgcHJvY2VzcyBhcyB0aGlzIHdpbGwgXCJyZWZyZXNoIHNhaWQgZGF0YVwiXHJcblxyXG4gICAgY29uc3QgZVRhZyA9IGVudHJ5Py52YWx1ZS5oZWFkZXJzLmdldCgnRVRhZycpO1xyXG4gICAgY29uc3QgbGFzdE1vZGlmaWVkID0gZW50cnk/LnZhbHVlLmhlYWRlcnMuZ2V0KCdMYXN0LU1vZGlmaWVkJyk7XHJcblxyXG4gICAgaWYgKGVUYWcpIHtcclxuICAgICAgcmVxID0gcmVxLmNsb25lKHsgc2V0SGVhZGVyczogeyAnSWYtTm9uZS1NYXRjaCc6IGVUYWcgfSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobGFzdE1vZGlmaWVkKSB7XHJcbiAgICAgIHJlcSA9IHJlcS5jbG9uZSh7IHNldEhlYWRlcnM6IHsgJ0lmLU1vZGlmaWVkLVNpbmNlJzogbGFzdE1vZGlmaWVkIH0gfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9wdC5idXN0QnJvd3NlckNhY2hlKSB7XHJcbiAgICAgIHJlcSA9IHJlcS5jbG9uZSh7XHJcbiAgICAgICAgc2V0UGFyYW1zOiB7IF9jYjogRGF0ZS5ub3coKS50b1N0cmluZygpIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXh0KHJlcSkucGlwZShcclxuICAgICAgdGFwKChldmVudCkgPT4ge1xyXG4gICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSAmJiBldmVudC5vaykge1xyXG4gICAgICAgICAgY29uc3QgY2FjaGVDb250cm9sID0gcGFyc2VDYWNoZUNvbnRyb2xIZWFkZXIoZXZlbnQpO1xyXG5cclxuICAgICAgICAgIGlmIChjYWNoZUNvbnRyb2wubm9TdG9yZSAmJiAhb3B0Lmlnbm9yZUNhY2hlQ29udHJvbCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHsgc3RhbGVUaW1lLCB0dGwgfSA9IG9wdC5pZ25vcmVDYWNoZUNvbnRyb2xcclxuICAgICAgICAgICAgPyBvcHRcclxuICAgICAgICAgICAgOiByZXNvbHZlVGltaW5ncyhjYWNoZUNvbnRyb2wsIG9wdC5zdGFsZVRpbWUsIG9wdC50dGwpO1xyXG5cclxuICAgICAgICAgIGlmIChvcHQudHRsID09PSAwKSByZXR1cm47IC8vIG5vIHBvaW50XHJcblxyXG4gICAgICAgICAgY29uc3QgcGFyc2VkUmVzcG9uc2UgPSBvcHQucGFyc2VcclxuICAgICAgICAgICAgPyBuZXcgSHR0cFJlc3BvbnNlKHtcclxuICAgICAgICAgICAgICAgIGJvZHk6IG9wdC5wYXJzZShldmVudC5ib2R5KSxcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGV2ZW50LmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6IGV2ZW50LnN0YXR1cyxcclxuICAgICAgICAgICAgICAgIHN0YXR1c1RleHQ6IGV2ZW50LnN0YXR1c1RleHQsXHJcbiAgICAgICAgICAgICAgICB1cmw6IGV2ZW50LnVybCA/PyB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgOiBldmVudDtcclxuXHJcbiAgICAgICAgICBjYWNoZS5zdG9yZShrZXksIHBhcnNlZFJlc3BvbnNlLCBzdGFsZVRpbWUsIHR0bCwgb3B0LnBlcnNpc3QpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIG1hcCgoZXZlbnQpID0+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, inject, InjectionToken, Injector, signal, untracked, } from '@angular/core';\n/** @internal */\nconst DEFAULT_OPTIONS = {\n treshold: 5,\n timeout: 30000,\n shouldFail: () => true,\n shouldFailForever: () => false,\n};\n/** @internal */\nfunction internalCeateCircuitBreaker(treshold = 5, resetTimeout = 30000, shouldFail = () => true, shouldFailForever = () => false) {\n const halfOpen = signal(false, ...(ngDevMode ? [{ debugName: \"halfOpen\" }] : []));\n const failureCount = signal(0, ...(ngDevMode ? [{ debugName: \"failureCount\" }] : []));\n const status = computed(() => {\n if (failureCount() >= treshold)\n return 'OPEN';\n return halfOpen() ? 'HALF_OPEN' : 'CLOSED';\n }, ...(ngDevMode ? [{ debugName: \"status\" }] : []));\n const isClosed = computed(() => status() !== 'OPEN', ...(ngDevMode ? [{ debugName: \"isClosed\" }] : []));\n const isOpen = computed(() => status() !== 'CLOSED', ...(ngDevMode ? [{ debugName: \"isOpen\" }] : []));\n const success = () => {\n failureCount.set(0);\n halfOpen.set(false);\n };\n const tryOnce = () => {\n if (!untracked(isOpen))\n return;\n halfOpen.set(true);\n failureCount.set(treshold - 1);\n };\n let failForeverResetId = null;\n const effectRef = effect((cleanup) => {\n if (!isOpen())\n return;\n const timeout = setTimeout(tryOnce, resetTimeout);\n failForeverResetId = timeout;\n return cleanup(() => {\n clearTimeout(timeout);\n failForeverResetId = null;\n });\n }, ...(ngDevMode ? [{ debugName: \"effectRef\" }] : []));\n const failInternal = () => {\n failureCount.set(failureCount() + 1);\n halfOpen.set(false);\n };\n const failForever = () => {\n if (failForeverResetId)\n clearTimeout(failForeverResetId);\n effectRef.destroy();\n failureCount.set(Infinity);\n halfOpen.set(false);\n return;\n };\n const fail = (err) => {\n if (shouldFailForever(err))\n return failForever();\n if (shouldFail(err))\n return failInternal();\n // If the error does not trigger a failure, we do nothing.\n };\n return {\n status,\n isClosed,\n isOpen,\n fail,\n success,\n halfOpen: tryOnce,\n destroy: () => effectRef.destroy(),\n };\n}\n/** @internal */\nfunction createNeverBrokenCircuitBreaker() {\n return {\n isClosed: computed(() => true),\n isOpen: computed(() => false),\n status: signal('CLOSED'),\n fail: () => {\n // noop\n },\n success: () => {\n // noop\n },\n halfOpen: () => {\n // noop\n },\n destroy: () => {\n // noop\n },\n };\n}\nconst CB_DEFAULT_OPTIONS = new InjectionToken('MMSTACK_CIRCUIT_BREAKER_DEFAULT_OPTIONS');\nexport function provideCircuitBreakerDefaultOptions(options) {\n return {\n provide: CB_DEFAULT_OPTIONS,\n useValue: {\n ...DEFAULT_OPTIONS,\n ...options,\n },\n };\n}\nfunction injectCircuitBreakerOptions(injector = inject(Injector)) {\n return injector.get(CB_DEFAULT_OPTIONS, DEFAULT_OPTIONS, {\n optional: true,\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, injector) {\n if (opt === false)\n return createNeverBrokenCircuitBreaker();\n if (typeof opt === 'object' && 'isClosed' in opt)\n return opt;\n const { treshold, timeout, shouldFail, shouldFailForever } = {\n ...injectCircuitBreakerOptions(injector),\n ...opt,\n };\n return internalCeateCircuitBreaker(treshold, timeout, shouldFail, shouldFailForever);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2lyY3VpdC1icmVha2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcmVzb3VyY2Uvc3JjL2xpYi91dGlsL2NpcmN1aXQtYnJlYWtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sY0FBYyxFQUNkLFFBQVEsRUFHUixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBcUZ2QixnQkFBZ0I7QUFDaEIsTUFBTSxlQUFlLEdBQTBDO0lBQzdELFFBQVEsRUFBRSxDQUFDO0lBQ1gsT0FBTyxFQUFFLEtBQUs7SUFDZCxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSTtJQUN0QixpQkFBaUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLO0NBQy9CLENBQUM7QUFFRixnQkFBZ0I7QUFDaEIsU0FBUywyQkFBMkIsQ0FDbEMsUUFBUSxHQUFHLENBQUMsRUFDWixZQUFZLEdBQUcsS0FBSyxFQUNwQixhQUF1QyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQ2pELG9CQUE4QyxHQUFHLEVBQUUsQ0FBQyxLQUFLO0lBRXpELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLG9EQUFDLENBQUM7SUFDL0IsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLENBQUMsd0RBQUMsQ0FBQztJQUUvQixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQXNCLEdBQUcsRUFBRTtRQUNoRCxJQUFJLFlBQVksRUFBRSxJQUFJLFFBQVE7WUFBRSxPQUFPLE1BQU0sQ0FBQztRQUM5QyxPQUFPLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUM3QyxDQUFDLGtEQUFDLENBQUM7SUFFSCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssTUFBTSxv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QztBQUNKLENBQUM7QUFFRCxNQUFNLGtCQUFrQixHQUFHLElBQUksY0FBYyxDQUUzQyx5Q0FBeUMsQ0FBQyxDQUFDO0FBRTdDLE1BQU0sVUFBVSxtQ0FBbUMsQ0FDakQsT0FBOEI7SUFFOUIsT0FBTztRQUNMLE9BQU8sRUFBRSxrQkFBa0I7UUFDM0IsUUFBUSxFQUFFO1lBQ1IsR0FBRyxlQUFlO1lBQ2xCLEdBQUcsT0FBTztTQUNYO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLDJCQUEyQixDQUNsQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztJQUUzQixPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsZUFBZSxFQUFFO1FBQ3ZELFFBQVEsRUFBRSxJQUFJO0tBQ2YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxHQUEyQixFQUMzQixRQUFtQjtJQUVuQixJQUFJLEdBQUcsS0FBSyxLQUFLO1FBQUUsT0FBTywrQkFBK0IsRUFBRSxDQUFDO0lBRTVELElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLFVBQVUsSUFBSSxHQUFHO1FBQUUsT0FBTyxHQUFHLENBQUM7SUFFN0QsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLEdBQUc7UUFDM0QsR0FBRywyQkFBMkIsQ0FBQyxRQUFRLENBQUM7UUFDeEMsR0FBRyxHQUFHO0tBQ1AsQ0FBQztJQUVGLE9BQU8sMkJBQTJCLENBQ2hDLFFBQVEsRUFDUixPQUFPLEVBQ1AsVUFBVSxFQUNWLGlCQUFpQixDQUNsQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgY29tcHV0ZWQsXHJcbiAgZWZmZWN0LFxyXG4gIGluamVjdCxcclxuICBJbmplY3Rpb25Ub2tlbixcclxuICBJbmplY3RvcixcclxuICBQcm92aWRlcixcclxuICBTaWduYWwsXHJcbiAgc2lnbmFsLFxyXG4gIHVudHJhY2tlZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8qKlxyXG4gKiBSZXByZXNlbnRzIHRoZSBwb3NzaWJsZSBzdGF0ZXMgb2YgYSBjaXJjdWl0IGJyZWFrZXIuXHJcbiAqIC0gYENMT1NFRGA6IFRoZSBjaXJjdWl0IGJyZWFrZXIgaXMgY2xvc2VkLCBhbmQgb3BlcmF0aW9ucyBhcmUgYWxsb3dlZCB0byBwcm9jZWVkLlxyXG4gKiAtIGBPUEVOYDogVGhlIGNpcmN1aXQgYnJlYWtlciBpcyBvcGVuLCBhbmQgb3BlcmF0aW9ucyBhcmUgYmxvY2tlZC5cclxuICogLSBgSEFMRl9PUEVOYDogVGhlIGNpcmN1aXQgYnJlYWtlciBpcyBpbiBhIGhhbGYtb3BlbiBzdGF0ZSwgYWxsb3dpbmcgYSBsaW1pdGVkIG51bWJlciBvZiBvcGVyYXRpb25zIHRvIHRlc3QgaWYgdGhlIHVuZGVybHlpbmcgaXNzdWUgaXMgcmVzb2x2ZWQuXHJcbiAqL1xyXG50eXBlIENpcmN1aXRCcmVha2VyU3RhdGUgPSAnQ0xPU0VEJyB8ICdPUEVOJyB8ICdIQUxGX09QRU4nO1xyXG5cclxuLyoqXHJcbiAqIFJlcHJlc2VudHMgYSBjaXJjdWl0IGJyZWFrZXIsIHdoaWNoIG1vbml0b3JzIG9wZXJhdGlvbnMgYW5kIHByZXZlbnRzIGZhaWx1cmVzIGZyb20gY2FzY2FkaW5nLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgQ2lyY3VpdEJyZWFrZXIgPSB7XHJcbiAgLyoqXHJcbiAgICogQSBzaWduYWwgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjaXJjdWl0IGJyZWFrZXIgaXMgY3VycmVudGx5IGNsb3NlZCAoYWxsb3dpbmcgb3BlcmF0aW9ucykuXHJcbiAgICovXHJcbiAgaXNDbG9zZWQ6IFNpZ25hbDxib29sZWFuPjtcclxuICAvKipcclxuICAgKiAgQSBzaWduYWwgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjaXJjdWl0IGJyZWFrZXIgaXMgZWl0aGVyIG9wZW4gb3IgaW4gYSBoYWxmLW9wZW4gc3RhdGUuXHJcbiAgICogVGhpcyBpcyB1c2VmdWwgZm9yIGNoZWNraW5nIGlmIG9wZXJhdGlvbnMgYXJlIGJsb2NrZWQuXHJcbiAgICogSWYgdGhlIGNpcmN1aXQgYnJlYWtlciBpcyBvcGVuLCBvcGVyYXRpb25zIHNob3VsZCBub3QgcHJvY2VlZC5cclxuICAgKi9cclxuICBpc09wZW46IFNpZ25hbDxib29sZWFuPjtcclxuICAvKipcclxuICAgKiBBIHNpZ25hbCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGNpcmN1aXQgYnJlYWtlci5cclxuICAgKi9cclxuICBzdGF0dXM6IFNpZ25hbDxDaXJjdWl0QnJlYWtlclN0YXRlPjtcclxuICAvKipcclxuICAgKiBTaWduYWxzIGEgZmFpbHVyZSB0byB0aGUgY2lyY3VpdCBicmVha2VyLiAgVGhpcyBtYXkgY2F1c2UgdGhlIGNpcmN1aXQgYnJlYWtlciB0byBvcGVuLlxyXG4gICAqL1xyXG4gIGZhaWw6IChlcnI/OiBFcnJvcikgPT4gdm9pZDtcclxuICAvKipcclxuICAgKiBTaWduYWxzIGEgc3VjY2VzcyB0byB0aGUgY2lyY3VpdCBicmVha2VyLiAgVGhpcyBtYXkgY2F1c2UgdGhlIGNpcmN1aXQgYnJlYWtlciB0byBjbG9zZS5cclxuICAgKi9cclxuICBzdWNjZXNzOiAoKSA9PiB2b2lkO1xyXG4gIC8qKlxyXG4gICAqIEF0dGVtcHRzIHRvIHRyYW5zaXRpb24gdGhlIGNpcmN1aXQgYnJlYWtlciB0byB0aGUgaGFsZi1vcGVuIHN0YXRlLiBUaGlzIGlzIHR5cGljYWxseSB1c2VkXHJcbiAgICogdG8gdGVzdCBpZiB0aGUgdW5kZXJseWluZyBpc3N1ZSBoYXMgYmVlbiByZXNvbHZlZCBhZnRlciB0aGUgY2lyY3VpdCBicmVha2VyIGhhcyBiZWVuIG9wZW4uXHJcbiAgICovXHJcbiAgaGFsZk9wZW46ICgpID0+IHZvaWQ7XHJcbiAgLyoqXHJcbiAgICogRGVzdHJveXMgdGhlIGNpcmN1aXQgYnJlYWtlciAmIGluaXRpYXRlcyByZWxhdGVkIGNsZWFudXBcclxuICAgKi9cclxuICBkZXN0cm95OiAoKSA9PiB2b2lkO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIGNyZWF0aW5nIGEgY2lyY3VpdCBicmVha2VyLlxyXG4gKi9cclxudHlwZSBDcmVhdGVDaXJjdWl0QnJlYWtlck9wdGlvbnMgPSB7XHJcbiAgLyoqXHJcbiAgICogVGhlIG51bWJlciBvZiBmYWlsdXJlcyB0aGF0IHdpbGwgY2F1c2UgdGhlIGNpcmN1aXQgYnJlYWtlciB0byBvcGVuLlxyXG4gICAqIEBkZWZhdWx0IDVcclxuICAgKi9cclxuICB0cmVzaG9sZD86IG51bWJlcjtcclxuICAvKipcclxuICAgKiBUaGUgdGltZSBpbiBtaWxsaXNlY29uZHMgYWZ0ZXIgd2hpY2ggdGhlIGNpcmN1aXQgYnJlYWtlciB3aWxsIHJlc2V0IGFuZCBhbGxvdyBvcGVyYXRpb25zIHRvIHByb2NlZWQgYWdhaW4uXHJcbiAgICogQGRlZmF1bHQgMzAwMDAgKDMwIHNlY29uZHMpXHJcbiAgICovXHJcbiAgdGltZW91dD86IG51bWJlcjtcclxuICAvKipcclxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGVycm9yIHNob3VsZCBjYXVzZSB0aGUgY2lyY3VpdCBicmVha2VyIHRvIGluY3JlbWVudCB0aGUgZmFpbHVyZSBjb3VudC5cclxuICAgKiBAZGVmYXVsdCBBbHdheXMgcmV0dXJucyB0cnVlXHJcbiAgICovXHJcbiAgc2hvdWxkRmFpbD86IChlcnI/OiBFcnJvcikgPT4gYm9vbGVhbjtcclxuICAvKipcclxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGVycm9yIHNob3VsZCBjYXVzZSB0aGUgY2lyY3VpdCBicmVha2VyIHRvIGJlIG9wZW4gZm9yZXZlci5cclxuICAgKiBAZGVmYXVsdCBBbHdheXMgcmV0dXJucyBmYWxzZVxyXG4gICAqL1xyXG4gIHNob3VsZEZhaWxGb3JldmVyPzogKGVycj86IEVycm9yKSA9PiBib29sZWFuO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIGNyZWF0aW5nIGEgY2lyY3VpdCBicmVha2VyLlxyXG4gKiAgLSBgZmFsc2VgOiBEaXNhYmxlcyBjaXJjdWl0IGJyZWFrZXIgZnVuY3Rpb25hbGl0eSAoYWx3YXlzIG9wZW4pLlxyXG4gKiAgLSB0cnVlOiBDcmVhdGVzIGEgbmV3IGNpcmN1aXQgYnJlYWtlciB3aXRoIGRlZmF1bHQgb3B0aW9ucy5cclxuICogIC0gYENpcmN1aXRCcmVha2VyYDogUHJvdmlkZXMgYW4gZXhpc3RpbmcgYENpcmN1aXRCcmVha2VyYCBpbnN0YW5jZSB0byB1c2UuXHJcbiAqICAtIGB7IHRyZXNob2xkPzogbnVtYmVyOyB0aW1lb3V0PzogbnVtYmVyOyB9YDogQ3JlYXRlcyBhIG5ldyBjaXJjdWl0IGJyZWFrZXIgd2l0aCB0aGUgc3BlY2lmaWVkIG9wdGlvbnMuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBDaXJjdWl0QnJlYWtlck9wdGlvbnMgPVxyXG4gIHwgZmFsc2VcclxuICB8IENpcmN1aXRCcmVha2VyXHJcbiAgfCBDcmVhdGVDaXJjdWl0QnJlYWtlck9wdGlvbnM7XHJcblxyXG4vKiogQGludGVybmFsICovXHJcbmNvbnN0IERFRkFVTFRfT1BUSU9OUzogUmVxdWlyZWQ8Q3JlYXRlQ2lyY3VpdEJyZWFrZXJPcHRpb25zPiA9IHtcclxuICB0cmVzaG9sZDogNSxcclxuICB0aW1lb3V0OiAzMDAwMCxcclxuICBzaG91bGRGYWlsOiAoKSA9PiB0cnVlLFxyXG4gIHNob3VsZEZhaWxGb3JldmVyOiAoKSA9PiBmYWxzZSxcclxufTtcclxuXHJcbi8qKiBAaW50ZXJuYWwgKi9cclxuZnVuY3Rpb24gaW50ZXJuYWxDZWF0ZUNpcmN1aXRCcmVha2VyKFxyXG4gIHRyZXNob2xkID0gNSxcclxuICByZXNldFRpbWVvdXQgPSAzMDAwMCxcclxuICBzaG91bGRGYWlsOiAoZXJyPzogRXJyb3IpID0+IGJvb2xlYW4gPSAoKSA9PiB0cnVlLFxyXG4gIHNob3VsZEZhaWxGb3JldmVyOiAoZXJyPzogRXJyb3IpID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcclxuKTogQ2lyY3VpdEJyZWFrZXIge1xyXG4gIGNvbnN0IGhhbGZPcGVuID0gc2lnbmFsKGZhbHNlKTtcclxuICBjb25zdCBmYWlsdXJlQ291bnQgPSBzaWduYWwoMCk7XHJcblxyXG4gIGNvbnN0IHN0YXR1cyA9IGNvbXB1dGVkPENpcmN1aXRCcmVha2VyU3RhdGU+KCgpID0+IHtcclxuICAgIGlmIChmYWlsdXJlQ291bnQoKSA+PSB0cmVzaG9sZCkgcmV0dXJuICdPUEVOJztcclxuICAgIHJldHVybiBoYWxmT3BlbigpID8gJ0hBTEZfT1BFTicgOiAnQ0xPU0VEJztcclxuICB9KTtcclxuXHJcbiAgY29uc3QgaXNDbG9zZWQgPSBjb21wdXRlZCgoKSA9PiBzdGF0dXMoKSAhPT0gJ09QRU4nKTtcclxuICBjb25zdCBpc09wZW4gPSBjb21wdXRlZCgoKSA9PiBzdGF0dXMoKSAhPT0gJ0NMT1NFRCcpO1xyXG5cclxuICBjb25zdCBzdWNjZXNzID0gKCkgPT4ge1xyXG4gICAgZmFpbHVyZUNvdW50LnNldCgwKTtcclxuICAgIGhhbGZPcGVuLnNldChmYWxzZSk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgdHJ5T25jZSA9ICgpID0+IHtcclxuICAgIGlmICghdW50cmFja2VkKGlzT3BlbikpIHJldHVybjtcclxuICAgIGhhbGZPcGVuLnNldCh0cnVlKTtcclxuICAgIGZhaWx1cmVDb3VudC5zZXQodHJlc2hvbGQgLSAxKTtcclxuICB9O1xyXG5cclxuICBsZXQgZmFpbEZvcmV2ZXJSZXNldElkOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xyXG4gIGNvbnN0IGVmZmVjdFJlZiA9IGVmZmVjdCgoY2xlYW51cCkgPT4ge1xyXG4gICAgaWYgKCFpc09wZW4oKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KHRyeU9uY2UsIHJlc2V0VGltZW91dCk7XHJcbiAgICBmYWlsRm9yZXZlclJlc2V0SWQgPSB0aW1lb3V0O1xyXG4gICAgcmV0dXJuIGNsZWFudXAoKCkgPT4ge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XHJcbiAgICAgIGZhaWxGb3JldmVyUmVzZXRJZCA9IG51bGw7XHJcbiAgICB9KTtcclxuICB9KTtcclxuXHJcbiAgY29uc3QgZmFpbEludGVybmFsID0gKCkgPT4ge1xyXG4gICAgZmFpbHVyZUNvdW50LnNldChmYWlsdXJlQ291bnQoKSArIDEpO1xyXG4gICAgaGFsZk9wZW4uc2V0KGZhbHNlKTtcclxuICB9O1xyXG5cclxuICBjb25zdCBmYWlsRm9yZXZlciA9ICgpID0+IHtcclxuICAgIGlmIChmYWlsRm9yZXZlclJlc2V0SWQpIGNsZWFyVGltZW91dChmYWlsRm9yZXZlclJlc2V0SWQpO1xyXG4gICAgZWZmZWN0UmVmLmRlc3Ryb3koKTtcclxuICAgIGZhaWx1cmVDb3VudC5zZXQoSW5maW5pdHkpO1xyXG4gICAgaGFsZk9wZW4uc2V0KGZhbHNlKTtcclxuICAgIHJldHVybjtcclxuICB9O1xyXG5cclxuICBjb25zdCBmYWlsID0gKGVycj86IEVycm9yKSA9PiB7XHJcbiAgICBpZiAoc2hvdWxkRmFpbEZvcmV2ZXIoZXJyKSkgcmV0dXJuIGZhaWxGb3JldmVyKCk7XHJcbiAgICBpZiAoc2hvdWxkRmFpbChlcnIpKSByZXR1cm4gZmFpbEludGVybmFsKCk7XHJcbiAgICAvLyBJZiB0aGUgZXJyb3IgZG9lcyBub3QgdHJpZ2dlciBhIGZhaWx1cmUsIHdlIGRvIG5vdGhpbmcuXHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIHN0YXR1cyxcclxuICAgIGlzQ2xvc2VkLFxyXG4gICAgaXNPcGVuLFxyXG4gICAgZmFpbCxcclxuICAgIHN1Y2Nlc3MsXHJcbiAgICBoYWxmT3BlbjogdHJ5T25jZSxcclxuICAgIGRlc3Ryb3k6ICgpID0+IGVmZmVjdFJlZi5kZXN0cm95KCksXHJcbiAgfTtcclxufVxyXG5cclxuLyoqIEBpbnRlcm5hbCAqL1xyXG5mdW5jdGlvbiBjcmVhdGVOZXZlckJyb2tlbkNpcmN1aXRCcmVha2VyKCk6IENpcmN1aXRCcmVha2VyIHtcclxuICByZXR1cm4ge1xyXG4gICAgaXNDbG9zZWQ6IGNvbXB1dGVkKCgpID0+IHRydWUpLFxyXG4gICAgaXNPcGVuOiBjb21wdXRlZCgoKSA9PiBmYWxzZSksXHJcbiAgICBzdGF0dXM6IHNpZ25hbCgnQ0xPU0VEJyksXHJcbiAgICBmYWlsOiAoKSA9PiB7XHJcbiAgICAgIC8vIG5vb3BcclxuICAgIH0sXHJcbiAgICBzdWNjZXNzOiAoKSA9PiB7XHJcbiAgICAgIC8vIG5vb3BcclxuICAgIH0sXHJcbiAgICBoYWxmT3BlbjogKCkgPT4ge1xyXG4gICAgICAvLyBub29wXHJcbiAgICB9LFxyXG4gICAgZGVzdHJveTogKCkgPT4ge1xyXG4gICAgICAvLyBub29wXHJcbiAgICB9LFxyXG4gIH07XHJcbn1cclxuXHJcbmNvbnN0IENCX0RFRkFVTFRfT1BUSU9OUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxcclxuICBSZXF1aXJlZDxDcmVhdGVDaXJjdWl0QnJlYWtlck9wdGlvbnM+XHJcbj4oJ01NU1RBQ0tfQ0lSQ1VJVF9CUkVBS0VSX0RFRkFVTFRfT1BUSU9OUycpO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVDaXJjdWl0QnJlYWtlckRlZmF1bHRPcHRpb25zKFxyXG4gIG9wdGlvbnM6IENpcmN1aXRCcmVha2VyT3B0aW9ucyxcclxuKTogUHJvdmlkZXIge1xyXG4gIHJldHVybiB7XHJcbiAgICBwcm92aWRlOiBDQl9ERUZBVUxUX09QVElPTlMsXHJcbiAgICB1c2VWYWx1ZToge1xyXG4gICAgICAuLi5ERUZBVUxUX09QVElPTlMsXHJcbiAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICB9LFxyXG4gIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluamVjdENpcmN1aXRCcmVha2VyT3B0aW9ucyhcclxuICBpbmplY3RvciA9IGluamVjdChJbmplY3RvciksXHJcbik6IFJlcXVpcmVkPENyZWF0ZUNpcmN1aXRCcmVha2VyT3B0aW9ucz4ge1xyXG4gIHJldHVybiBpbmplY3Rvci5nZXQoQ0JfREVGQVVMVF9PUFRJT05TLCBERUZBVUxUX09QVElPTlMsIHtcclxuICAgIG9wdGlvbmFsOiB0cnVlLFxyXG4gIH0pO1xyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIGNpcmN1aXQgYnJlYWtlciBpbnN0YW5jZS5cclxuICpcclxuICogQHBhcmFtIG9wdGlvbnMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBjaXJjdWl0IGJyZWFrZXIuICBDYW4gYmU6XHJcbiAqICAgLSBgdW5kZWZpbmVkYDogIENyZWF0ZXMgYSBcIm5vLW9wXCIgY2lyY3VpdCBicmVha2VyIHRoYXQgaXMgYWx3YXlzIG9wZW4gKG5ldmVyIHRyaXBzKS5cclxuICogICAtIGB0cnVlYDogQ3JlYXRlcyBhIGNpcmN1aXQgYnJlYWtlciB3aXRoIGRlZmF1bHQgc2V0dGluZ3MgKHRocmVzaG9sZDogNSwgdGltZW91dDogMzAwMDBtcykuXHJcbiAqICAgLSBgQ2lyY3VpdEJyZWFrZXJgOiAgUmV1c2VzIGFuIGV4aXN0aW5nIGBDaXJjdWl0QnJlYWtlcmAgaW5zdGFuY2UuXHJcbiAqICAgLSBgeyB0aHJlc2hvbGQ/OiBudW1iZXI7IHRpbWVvdXQ/OiBudW1iZXI7IH1gOiBDcmVhdGVzIGEgY2lyY3VpdCBicmVha2VyIHdpdGggdGhlIHNwZWNpZmllZCB0aHJlc2hvbGQgYW5kIHRpbWVvdXQuXHJcbiAqXHJcbiAqIEByZXR1cm5zIEEgYENpcmN1aXRCcmVha2VyYCBpbnN0YW5jZS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogLy8gQ3JlYXRlIGEgY2lyY3VpdCBicmVha2VyIHdpdGggZGVmYXVsdCBzZXR0aW5nczpcclxuICogY29uc3QgYnJlYWtlciA9IGNyZWF0ZUNpcmN1aXRCcmVha2VyKCk7XHJcbiAqXHJcbiAqIC8vIENyZWF0ZSBhIGNpcmN1aXQgYnJlYWtlciB3aXRoIGN1c3RvbSBzZXR0aW5nczpcclxuICogY29uc3QgY3VzdG9tQnJlYWtlciA9IGNyZWF0ZUNpcmN1aXRCcmVha2VyKHsgdGhyZXNob2xkOiAxMCwgdGltZW91dDogNjAwMDAgfSk7XHJcbiAqXHJcbiAqIC8vIFNoYXJlIGEgc2luZ2xlIGNpcmN1aXQgYnJlYWtlciBpbnN0YW5jZSBhY3Jvc3MgbXVsdGlwbGUgcmVzb3VyY2VzOlxyXG4gKiBjb25zdCBzaGFyZWRCcmVha2VyID0gY3JlYXRlQ2lyY3VpdEJyZWFrZXIoKTtcclxuICogY29uc3QgcmVzb3VyY2UxID0gcXVlcnlSZXNvdXJjZSguLi4sIHsgY2lyY3VpdEJyZWFrZXI6IHNoYXJlZEJyZWFrZXIgfSk7XHJcbiAqIGNvbnN0IHJlc291cmNlMiA9IG11dGF0aW9uUmVzb3VyY2UoLi4uLCB7IGNpcmN1aXRCcmVha2VyOiBzaGFyZWRCcmVha2VyIH0pO1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNpcmN1aXRCcmVha2VyKFxyXG4gIG9wdD86IENpcmN1aXRCcmVha2VyT3B0aW9ucyxcclxuICBpbmplY3Rvcj86IEluamVjdG9yLFxyXG4pOiBDaXJjdWl0QnJlYWtlciB7XHJcbiAgaWYgKG9wdCA9PT0gZmFsc2UpIHJldHVybiBjcmVhdGVOZXZlckJyb2tlbkNpcmN1aXRCcmVha2VyKCk7XHJcblxyXG4gIGlmICh0eXBlb2Ygb3B0ID09PSAnb2JqZWN0JyAmJiAnaXNDbG9zZWQnIGluIG9wdCkgcmV0dXJuIG9wdDtcclxuXHJcbiAgY29uc3QgeyB0cmVzaG9sZCwgdGltZW91dCwgc2hvdWxkRmFpbCwgc2hvdWxkRmFpbEZvcmV2ZXIgfSA9IHtcclxuICAgIC4uLmluamVjdENpcmN1aXRCcmVha2VyT3B0aW9ucyhpbmplY3RvciksXHJcbiAgICAuLi5vcHQsXHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIGludGVybmFsQ2VhdGVDaXJjdWl0QnJlYWtlcihcclxuICAgIHRyZXNob2xkLFxyXG4gICAgdGltZW91dCxcclxuICAgIHNob3VsZEZhaWwsXHJcbiAgICBzaG91bGRGYWlsRm9yZXZlcixcclxuICApO1xyXG59XHJcbiJdfQ==","// 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 { HttpHeaders, HttpParams, } from '@angular/common/http';\nimport { 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 equalParamArray(a, b) {\n if (!a && !b)\n return true;\n if (!a || !b)\n return false;\n if (a.length !== b.length)\n return false;\n return a.every((value) => b.includes(value));\n}\nfunction headersToObject(headerClass) {\n const headers = {};\n headerClass.keys().forEach((key) => {\n const value = headerClass.getAll(key);\n if (value === null)\n return;\n if (value.length === 1) {\n headers[key] = value[0];\n }\n else {\n headers[key] = value;\n }\n });\n return headers;\n}\nfunction paramToObject(paramsClass) {\n const params = {};\n paramsClass.keys().forEach((key) => {\n const value = paramsClass.getAll(key);\n if (value === null)\n return;\n if (value.length === 1) {\n params[key] = value[0];\n }\n else {\n params[key] = value;\n }\n });\n return params;\n}\nfunction equalParams(a, b) {\n if (!a && !b)\n return true;\n if (!a || !b)\n return false;\n const aObj = a instanceof HttpParams ? paramToObject(a) : a;\n const bObj = b instanceof HttpParams ? paramToObject(b) : b;\n const aKeys = keys(aObj);\n const bKeys = keys(bObj);\n if (aKeys.length !== bKeys.length)\n return false;\n return aKeys.every((key) => {\n if (Array.isArray(aObj[key]) || Array.isArray(bObj[key])) {\n return equalParamArray(Array.isArray(aObj[key]) ? aObj[key] : [aObj[key]], Array.isArray(bObj[key]) ? bObj[key] : [bObj[key]]);\n }\n return aObj[key] === bObj[key];\n });\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 aObj = a instanceof HttpHeaders ? headersToObject(a) : a;\n const bObj = b instanceof HttpHeaders ? headersToObject(b) : b;\n const aKeys = keys(aObj);\n const bKeys = keys(bObj);\n if (aKeys.length !== bKeys.length)\n return false;\n return aKeys.every((key) => {\n if (Array.isArray(aObj[key]) || Array.isArray(bObj[key])) {\n return equalParamArray(Array.isArray(aObj[key]) ? aObj[key] : [aObj[key]], Array.isArray(bObj[key]) ? bObj[key] : [bObj[key]]);\n }\n return aObj[key] === bObj[key];\n });\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXF1YWxpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yZXNvdXJjZS9zcmMvbGliL3V0aWwvZXF1YWxpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFdBQVcsRUFDWCxVQUFVLEdBRVgsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTdDLFNBQVMsa0JBQWtCLENBQ3pCLENBQXVDLEVBQ3ZDLENBQXVDO0lBRXZDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDMUIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUUzQixJQUFJLE9BQU8sQ0FBQyxLQUFLLE9BQU8sQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3hDLElBQUksT0FBTyxDQUFDLEtBQUssU0FBUyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFNBQVM7UUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFckUsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3hELElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUV6RCxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRXRFLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRS9DLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxj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QyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ25ELElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDdEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBZSxFQUFFLENBQUMsQ0FBQyxJQUFlLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUM3RCxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRXRELElBQUksQ0FBQyxDQUFDLGVBQWUsS0FBSyxDQUFDLENBQUMsZUFBZTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzFELElBQUksQ0FBQyxDQUFDLGNBQWMsS0FBSyxDQUFDLENBQUMsY0FBYztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3hELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUV4RSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEh0dHBIZWFkZXJzLFxyXG4gIEh0dHBQYXJhbXMsXHJcbiAgSHR0cFJlc291cmNlUmVxdWVzdCxcclxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IHR5cGUgVmFsdWVFcXVhbGl0eUZuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGhhc2gsIGtleXMgfSBmcm9tICdAbW1zdGFjay9vYmplY3QnO1xyXG5cclxuZnVuY3Rpb24gZXF1YWxUcmFuc2ZlckNhY2hlKFxyXG4gIGE6IEh0dHBSZXNvdXJjZVJlcXVlc3RbJ3RyYW5zZmVyQ2FjaGUnXSxcclxuICBiOiBIdHRwUmVzb3VyY2VSZXF1ZXN0Wyd0cmFuc2ZlckNhY2hlJ10sXHJcbik6IGJvb2xlYW4ge1xyXG4gIGlmICghYSAmJiAhYikgcmV0dXJuIHRydWU7XHJcbiAgaWYgKCFhIHx8ICFiKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gIGlmICh0eXBlb2YgYSAhPT0gdHlwZW9mIGIpIHJldHVybiBmYWxzZTtcclxuICBpZiAodHlwZW9mIGEgPT09ICdib29sZWFuJyB8fCB0eXBlb2YgYiA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gYSA9PT0gYjtcclxuXHJcbiAgaWYgKCFhLmluY2x1ZGVIZWFkZXJzICYmICFiLmluY2x1ZGVIZWFkZXJzKSByZXR1cm4gdHJ1ZTtcclxuICBpZiAoIWEuaW5jbHVkZUhlYWRlcnMgfHwgIWIuaW5jbHVkZUhlYWRlcnMpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgaWYgKGEuaW5jbHVkZUhlYWRlcnMubGVuZ3RoICE9PSBiLmluY2x1ZGVIZWFkZXJzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICBpZiAoYS5pbmNsdWRlSGVhZGVycy5sZW5ndGggPT09IDApIHJldHVybiB0cnVlO1xyXG5cclxuICBjb25zdCBhU2V0ID0gbmV3IFNldChhLmluY2x1ZGVIZWFkZXJzID8/IFtdKTtcclxuXHJcbiAgcmV0dXJuIGIuaW5jbHVkZUhlYWRlcnMuZXZlcnkoKGhlYWRlcikgPT4gYVNldC5oYXMoaGVhZGVyKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVxdWFsUGFyYW1BcnJheShcclxuICBhOiBBcnJheTxzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPixcclxuICBiOiBBcnJheTxzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPixcclxuKTogYm9vbGVhbiB7XHJcbiAgaWYgKCFhICYmICFiKSByZXR1cm4gdHJ1ZTtcclxuICBpZiAoIWEgfHwgIWIpIHJldHVybiBmYWxzZTtcclxuICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gIHJldHVybiBhLmV2ZXJ5KCh2YWx1ZSkgPT4gYi5pbmNsdWRlcyh2YWx1ZSkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBoZWFkZXJzVG9PYmplY3QoaGVhZGVyQ2xhc3M6IEh0dHBIZWFkZXJzKSB7XHJcbiAgY29uc3QgaGVhZGVyczogRXhjbHVkZTxcclxuICAgIFJlcXVpcmVkPEh0dHBSZXNvdXJjZVJlcXVlc3RbJ2hlYWRlcnMnXT4sXHJcbiAgICBIdHRwSGVhZGVycyB8IHVuZGVmaW5lZFxyXG4gID4gPSB7fTtcclxuXHJcbiAgaGVhZGVyQ2xhc3Mua2V5cygpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgY29uc3QgdmFsdWUgPSBoZWFkZXJDbGFzcy5nZXRBbGwoa2V5KTtcclxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICBoZWFkZXJzW2tleV0gPSB2YWx1ZVswXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGhlYWRlcnNba2V5XSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gaGVhZGVycztcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyYW1Ub09iamVjdChwYXJhbXNDbGFzczogSHR0cFBhcmFtcykge1xyXG4gIGNvbnN0IHBhcmFtczogRXhjbHVkZTxcclxuICAgIFJlcXVpcmVkPEh0dHBSZXNvdXJjZVJlcXVlc3RbJ3BhcmFtcyddPixcclxuICAgIEh0dHBQYXJhbXMgfCB1bmRlZmluZWRcclxuICA+ID0ge307XHJcblxyXG4gIHBhcmFtc0NsYXNzLmtleXMoKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgIGNvbnN0IHZhbHVlID0gcGFyYW1zQ2xhc3MuZ2V0QWxsKGtleSk7XHJcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybjtcclxuICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHtcclxuICAgICAgcGFyYW1zW2tleV0gPSB2YWx1ZVswXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBhcmFtc1trZXldID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBwYXJhbXM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVxdWFsUGFyYW1zKFxyXG4gIGE6IEh0dHBSZXNvdXJjZVJlcXVlc3RbJ3BhcmFtcyddLFxyXG4gIGI6IEh0dHBSZXNvdXJjZVJlcXVlc3RbJ3BhcmFtcyddLFxyXG4pOiBib29sZWFuIHtcclxuICBpZiAoIWEgJiYgIWIpIHJldHVybiB0cnVlO1xyXG4gIGlmICghYSB8fCAhYikgcmV0dXJuIGZhbHNlO1xyXG5cclxuICBjb25zdCBhT2JqID0gYSBpbnN0YW5jZW9mIEh0dHBQYXJhbXMgPyBwYXJhbVRvT2JqZWN0KGEpIDogYTtcclxuICBjb25zdCBiT2JqID0gYiBpbnN0YW5jZW9mIEh0dHBQYXJhbXMgPyBwYXJhbVRvT2JqZWN0KGIpIDogYjtcclxuXHJcbiAgY29uc3QgYUtleXMgPSBrZXlzKGFPYmopO1xyXG4gIGNvbnN0IGJLZXlzID0ga2V5cyhiT2JqKTtcclxuICBpZiAoYUtleXMubGVuZ3RoICE9PSBiS2V5cy5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgcmV0dXJuIGFLZXlzLmV2ZXJ5KChrZXkpID0+IHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGFPYmpba2V5XSkgfHwgQXJyYXkuaXNBcnJheShiT2JqW2tleV0pKSB7XHJcbiAgICAgIHJldHVybiBlcXVhbFBhcmFtQXJyYXkoXHJcbiAgICAgICAgQXJyYXkuaXNBcnJheShhT2JqW2tleV0pID8gYU9ialtrZXldIDogW2FPYmpba2V5XV0sXHJcbiAgICAgICAgQXJyYXkuaXNBcnJheShiT2JqW2tleV0pID8gYk9ialtrZXldIDogW2JPYmpba2V5XV0sXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGFPYmpba2V5XSA9PT0gYk9ialtrZXldO1xyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlcXVhbEJvZHkoXHJcbiAgYTogSHR0cFJlc291cmNlUmVxdWVzdFsnYm9keSddLFxyXG4gIGI6IEh0dHBSZXNvdXJjZVJlcXVlc3RbJ2JvZHknXSxcclxuKTogYm9vbGVhbiB7XHJcbiAgaWYgKCFhICYmICFiKSByZXR1cm4gdHJ1ZTtcclxuICBpZiAoIWEgfHwgIWIpIHJldHVybiBmYWxzZTtcclxuICByZXR1cm4gaGFzaChhKSA9PT0gaGFzaChiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZXF1YWxIZWFkZXJzKFxyXG4gIGE6IEh0dHBSZXNvdXJjZVJlcXVlc3RbJ2hlYWRlcnMnXSxcclxuICBiOiBIdHRwUmVzb3VyY2VSZXF1ZXN0WydoZWFkZXJzJ10sXHJcbik6IGJvb2xlYW4ge1xyXG4gIGlmICghYSAmJiAhYikgcmV0dXJuIHRydWU7XHJcbiAgaWYgKCFhIHx8ICFiKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gIGNvbnN0IGFPYmogPSBhIGluc3RhbmNlb2YgSHR0cEhlYWRlcnMgPyBoZWFkZXJzVG9PYmplY3QoYSkgOiBhO1xyXG4gIGNvbnN0IGJPYmogPSBiIGluc3RhbmNlb2YgSHR0cEhlYWRlcnMgPyBoZWFkZXJzVG9PYmplY3QoYikgOiBiO1xyXG5cclxuICBjb25zdCBhS2V5cyA9IGtleXMoYU9iaik7XHJcbiAgY29uc3QgYktleXMgPSBrZXlzKGJPYmopO1xyXG4gIGlmIChhS2V5cy5sZW5ndGggIT09IGJLZXlzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG4gIHJldHVybiBhS2V5cy5ldmVyeSgoa2V5KSA9PiB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhT2JqW2tleV0pIHx8IEFycmF5LmlzQXJyYXkoYk9ialtrZXldKSkge1xyXG4gICAgICByZXR1cm4gZXF1YWxQYXJhbUFycmF5KFxyXG4gICAgICAgIEFycmF5LmlzQXJyYXkoYU9ialtrZXldKSA/IGFPYmpba2V5XSA6IFthT2JqW2tleV1dLFxyXG4gICAgICAgIEFycmF5LmlzQXJyYXkoYk9ialtrZXldKSA/IGJPYmpba2V5XSA6IFtiT2JqW2tleV1dLFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBhT2JqW2tleV0gPT09IGJPYmpba2V5XTtcclxuICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gZXF1YWxDb250ZXh0KFxyXG4gIGE6IEh0dHBSZXNvdXJjZVJlcXVlc3RbJ2NvbnRleHQnXSxcclxuICBiOiBIdHRwUmVzb3VyY2VSZXF1ZXN0Wydjb250ZXh0J10sXHJcbik6IGJvb2xlYW4ge1xyXG4gIGlmICghYSAmJiAhYikgcmV0dXJuIHRydWU7XHJcbiAgaWYgKCFhIHx8ICFiKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gIGNvbnN0IGFLZXlzID0ga2V5cyhhKTtcclxuICBjb25zdCBiS2V5cyA9IGtleXMoYik7XHJcbiAgaWYgKGFLZXlzLmxlbmd0aCAhPT0gYktleXMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcbiAgcmV0dXJuIGFLZXlzLmV2ZXJ5KChrZXkpID0+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 persist(src, equal) {\n // linkedSignal allows us to access previous source value\n const persisted = linkedSignal({\n source: () => src(),\n computation: (next, prev) => {\n if (next === undefined && prev !== undefined)\n return prev.value;\n return next;\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 src) {\n persisted.set = src.set;\n persisted.update = src.update;\n persisted.asReadonly = src.asReadonly;\n }\n return persisted;\n}\nexport function persistResourceValues(resource, shouldPersist = false, equal) {\n if (!shouldPersist)\n return resource;\n return {\n ...resource,\n statusCode: persist(resource.statusCode),\n headers: persist(resource.headers),\n value: persist(resource.value, equal),\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc2lzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Jlc291cmNlL3NyYy9saWIvdXRpbC9wZXJzaXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxZQUFZLEdBSWIsTUFBTSxlQUFlLENBQUM7QUFTdkIsU0FBUyxPQUFPLENBQ2QsR0FBa0MsRUFDbEMsS0FBMEI7SUFFMUIseURBQXlEO0lBRXpELE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBTztRQUNuQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFO1FBQ25CLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUMxQixJQUFJLElBQUksS0FBSyxTQUFTLElBQUksSUFBSSxLQUFLLFNBQVM7Z0JBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ2hFLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELEtBQUs7S0FDTixDQUFDLENBQUM7SUFFSCx3S0FBd0s7SUFDeEssSUFBSSxLQUFLLElBQUksR0FBRyxFQUFFLENBQUM7UUFDakIsU0FBUyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ3hCLFNBQVMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUM5QixTQUFTLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUM7SUFDeEMsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQ25DLFFBQTRCLEVBQzVCLGFBQWEsR0FBRyxLQUFLLEVBQ3JCLEtBQTBCO0lBRTFCLElBQUksQ0FBQyxhQUFhO1FBQUUsT0FBTyxRQUFRLENBQUM7SUFFcEMsT0FBTztRQUNMLEdBQUcsUUFBUTtRQUNYLFVBQVUsRUFBRSxPQUFPLENBQXFCLFFBQVEsQ0FBQyxVQUFVLENBQUM7UUFDNUQsT0FBTyxFQUFFLE9BQU8sQ0FBMEIsUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUMzRCxLQUFLLEVBQUUsT0FBTyxDQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDO0tBQ3pDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBIdHRwSGVhZGVycywgdHlwZSBIdHRwUmVzb3VyY2VSZWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7XHJcbiAgbGlua2VkU2lnbmFsLFxyXG4gIHR5cGUgU2lnbmFsLFxyXG4gIHR5cGUgVmFsdWVFcXVhbGl0eUZuLFxyXG4gIHR5cGUgV3JpdGFibGVTaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5mdW5jdGlvbiBwZXJzaXN0PFQ+KFxyXG4gIHZhbHVlOiBXcml0YWJsZVNpZ25hbDxUPixcclxuICBlcXVhbD86IFZhbHVlRXF1YWxpdHlGbjxUPixcclxuKTogV3JpdGFibGVTaWduYWw8VD47XHJcblxyXG5mdW5jdGlvbiBwZXJzaXN0PFQ+KHZhbHVlOiBTaWduYWw8VD4sIGVxdWFsPzogVmFsdWVFcXVhbGl0eUZuPFQ+KTogU2lnbmFsPFQ+O1xyXG5cclxuZnVuY3Rpb24gcGVyc2lzdDxUPihcclxuICBzcmM6IFdyaXRhYmxlU2lnbmFsPFQ+IHwgU2lnbmFsPFQ+LFxyXG4gIGVxdWFsPzogVmFsdWVFcXVhbGl0eUZuPFQ+LFxyXG4pOiBXcml0YWJsZVNpZ25hbDxUPiB8IFNpZ25hbDxUPiB7XHJcbiAgLy8gbGlua2VkU2lnbmFsIGFsbG93cyB1cyB0byBhY2Nlc3MgcHJldmlvdXMgc291cmNlIHZhbHVlXHJcblxyXG4gIGNvbnN0IHBlcnNpc3RlZCA9IGxpbmtlZFNpZ25hbDxULCBUPih7XHJcbiAgICBzb3VyY2U6ICgpID0+IHNyYygpLFxyXG4gICAgY29tcHV0YXRpb246IChuZXh0LCBwcmV2KSA9PiB7XHJcbiAgICAgIGlmIChuZXh0ID09PSB1bmRlZmluZWQgJiYgcHJldiAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcHJldi52YWx1ZTtcclxuICAgICAgcmV0dXJuIG5leHQ7XHJcbiAgICB9LFxyXG4gICAgZXF1YWwsXHJcbiAgfSk7XHJcblxyXG4gIC8vIGlmIG9yaWdpbmFsIHZhbHVlIHdhcyBXcml0YWJsZVNpZ25hbCB0aGVuIG92ZXJyaWRlIGxpbmtlZFNpZ25hbCBtZXRob2RzIHRvIG9yaWdpbmFsLi4uYW5ndWxhciB1c2VzIGxpbmtlZFNpZ25hbCB1bmRlciB0aGUgaG9vZCBpbiBSZXNvdXJjZUltcGwsIHRoaXMgYXBwbGllcyB0byB0aGF0LlxyXG4gIGlmICgnc2V0JyBpbiBzcmMpIHtcclxuICAgIHBlcnNpc3RlZC5zZXQgPSBzcmMuc2V0O1xyXG4gICAgcGVyc2lzdGVkLnVwZGF0ZSA9IHNyYy51cGRhdGU7XHJcbiAgICBwZXJzaXN0ZWQuYXNSZWFkb25seSA9IHNyYy5hc1JlYWRvbmx5O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHBlcnNpc3RlZDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBlcnNpc3RSZXNvdXJjZVZhbHVlczxUPihcclxuICByZXNvdXJjZTogSHR0cFJlc291cmNlUmVmPFQ+LFxyXG4gIHNob3VsZFBlcnNpc3QgPSBmYWxzZSxcclxuICBlcXVhbD86IFZhbHVlRXF1YWxpdHlGbjxUPixcclxuKTogSHR0cFJlc291cmNlUmVmPFQ+IHtcclxuICBpZiAoIXNob3VsZFBlcnNpc3QpIHJldHVybiByZXNvdXJjZTtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIC4uLnJlc291cmNlLFxyXG4gICAgc3RhdHVzQ29kZTogcGVyc2lzdDxudW1iZXIgfCB1bmRlZmluZWQ+KHJlc291cmNlLnN0YXR1c0NvZGUpLFxyXG4gICAgaGVhZGVyczogcGVyc2lzdDxIdHRwSGVhZGVycyB8IHVuZGVmaW5lZD4ocmVzb3VyY2UuaGVhZGVycyksXHJcbiAgICB2YWx1ZTogcGVyc2lzdDxUPihyZXNvdXJjZS52YWx1ZSwgZXF1YWwpLFxyXG4gIH07XHJcbn1cclxuIl19","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 }, ...(ngDevMode ? [{ debugName: \"ref\" }] : []));\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cnktb24tZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yZXNvdXJjZS9zcmMvbGliL3V0aWwvcmV0cnktb24tZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVN2QywySUFBMkk7QUFDM0ksTUFBTSxVQUFVLFlBQVksQ0FDMUIsR0FBdUIsRUFDdkIsR0FBa0I7SUFFbEIsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLE1BQU0sT0FBTyxHQUFHLE9BQU8sR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFFdkUsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBRWhCLElBQUksT0FBa0QsQ0FBQztJQUV2RCxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUU7UUFDbkIsSUFBSSxPQUFPLElBQUksR0FBRztZQUFFLE9BQU87UUFDM0IsT0FBTyxFQUFFLENBQUM7UUFFVixJQUFJLE9BQU87WUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkMsVUFBVSxDQUNSLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFDbEIsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUN0RCxDQUFDO0lBQ0osQ0FBQyxDQUFDO0lBRUYsTUFBTSxTQUFTLEdBQUcsR0FBRyxFQUFFO1FBQ3JCLElBQUksT0FBTztZQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0lBRUYsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRTtRQUN0QixRQUFRLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQ3JCLEtBQUssT0FBTztnQkFDVixPQUFPLE9BQU8sRUFBRSxDQUFDO1lBQ25CLEtBQUssVUFBVTtnQkFDYixPQUFPLFNBQVMsRUFBRSxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDLCtDQUFDLENBQUM7SUFFSCxPQUFPO1FBQ0wsR0FBRyxHQUFHO1FBQ04sT0FBTyxFQUFFLEdBQUcsRUFBRTtZQUNaLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLDRCQUE0QjtZQUMzQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDaEIsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBIdHRwUmVzb3VyY2VSZWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IGVmZmVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuZXhwb3J0IHR5cGUgUmV0cnlPcHRpb25zID1cclxuICB8IG51bWJlclxyXG4gIHwge1xyXG4gICAgICBtYXg/OiBudW1iZXI7XHJcbiAgICAgIGJhY2tvZmY/OiBudW1iZXI7XHJcbiAgICB9O1xyXG5cclxuLy8gUmV0cnkgb24gZXJyb3IsIGlmIG51bWJlciBpcyBwcm92aWRlZCBpdCB3aWxsIHJldHJ5IHRoYXQgbWFueSB0aW1lcyB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmYsIG90aGVyd2lzZSBpdCB3aWxsIHVzZSB0aGUgb3B0aW9ucyBwcm92aWRlZFxyXG5leHBvcnQgZnVuY3Rpb24gcmV0cnlPbkVycm9yPFQ+KFxyXG4gIHJlczogSHR0cFJlc291cmNlUmVmPFQ+LFxyXG4gIG9wdD86IFJldHJ5T3B0aW9ucyxcclxuKTogSHR0cFJlc291cmNlUmVmPFQ+IHtcclxuICBjb25zdCBtYXggPSBvcHQgPyAodHlwZW9mIG9wdCA9PT0gJ251bWJlcicgPyBvcHQgOiAob3B0Lm1heCA/PyAwKSkgOiAwO1xyXG4gIGNvbnN0IGJhY2tvZmYgPSB0eXBlb2Ygb3B0ID09PSAnb2JqZWN0JyA/IChvcHQuYmFja29mZiA/PyAxMDAwKSA6IDEwMDA7XHJcblxyXG4gIGxldCByZXRyaWVzID0gMDtcclxuXHJcbiAgbGV0IHRpbWVvdXQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xyXG5cclxuICBjb25zdCBvbkVycm9yID0gKCkgPT4ge1xyXG4gICAgaWYgKHJldHJpZXMgPj0gbWF4KSByZXR1cm47XHJcbiAgICByZXRyaWVzKys7XHJcblxyXG4gICAgaWYgKHRpbWVvdXQpIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KFxyXG4gICAgICAoKSA9PiByZXMucmVsb2FkKCksXHJcbiAgICAgIHJldHJpZXMgPD0gMCA/IDAgOiBiYWNrb2ZmICogTWF0aC5wb3coMiwgcmV0cmllcyAtIDEpLFxyXG4gICAgKTtcclxuICB9O1xyXG5cclxuICBjb25zdCBvblN1Y2Nlc3MgPSAoKSA9PiB7XHJcbiAgICBpZiAodGltZW91dCkgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xyXG4gICAgcmV0cmllcyA9IDA7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgcmVmID0gZWZmZWN0KCgpID0+IHtcclxuICAgIHN3aXRjaCAocmVzLnN0YXR1cygpKSB7XHJcbiAgICAgIGNhc2UgJ2Vycm9yJzpcclxuICAgICAgICByZXR1cm4gb25FcnJvcigpO1xyXG4gICAgICBjYXNlICdyZXNvbHZlZCc6XHJcbiAgICAgICAgcmV0dXJuIG9uU3VjY2VzcygpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgLi4ucmVzLFxyXG4gICAgZGVzdHJveTogKCkgPT4ge1xyXG4gICAgICByZWYuZGVzdHJveSgpOyAvLyBjbGVhbnVwIG9uIG1hbnVhbCBkZXN0cm95XHJcbiAgICAgIHJlcy5kZXN0cm95KCk7XHJcbiAgICB9LFxyXG4gIH07XHJcbn1cclxuIl19","export function toResourceObject(res) {\n return {\n asReadonly: () => res.asReadonly(),\n destroy: () => res.destroy(),\n error: res.error,\n headers: res.headers,\n isLoading: res.isLoading,\n progress: res.progress,\n status: res.status,\n statusCode: res.statusCode,\n value: res.value,\n reload: () => res.reload(),\n hasValue: (() => res.hasValue()),\n set: (v) => res.set(v),\n update: (v) => res.update(v),\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG8tcmVzb3VyY2Utb2JqZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcmVzb3VyY2Uvc3JjL2xpYi91dGlsL3RvLXJlc291cmNlLW9iamVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLEdBQXVCO0lBRXZCLE9BQU87UUFDTCxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRTtRQUNsQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRTtRQUM1QixLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7UUFDaEIsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPO1FBQ3BCLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztRQUN4QixRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVE7UUFDdEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNO1FBQ2xCLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVTtRQUMxQixLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7UUFDaEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUU7UUFDMUIsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFtQztRQUNsRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7S0FDN0IsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwUmVzb3VyY2VSZWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1Jlc291cmNlT2JqZWN0PFQ+KFxuICByZXM6IEh0dHBSZXNvdXJjZVJlZjxUPixcbik6IEh0dHBSZXNvdXJjZVJlZjxUPiB7XG4gIHJldHVybiB7XG4gICAgYXNSZWFkb25seTogKCkgPT4gcmVzLmFzUmVhZG9ubHkoKSxcbiAgICBkZXN0cm95OiAoKSA9PiByZXMuZGVzdHJveSgpLFxuICAgIGVycm9yOiByZXMuZXJyb3IsXG4gICAgaGVhZGVyczogcmVzLmhlYWRlcnMsXG4gICAgaXNMb2FkaW5nOiByZXMuaXNMb2FkaW5nLFxuICAgIHByb2dyZXNzOiByZXMucHJvZ3Jlc3MsXG4gICAgc3RhdHVzOiByZXMuc3RhdHVzLFxuICAgIHN0YXR1c0NvZGU6IHJlcy5zdGF0dXNDb2RlLFxuICAgIHZhbHVlOiByZXMudmFsdWUsXG4gICAgcmVsb2FkOiAoKSA9PiByZXMucmVsb2FkKCksXG4gICAgaGFzVmFsdWU6ICgoKSA9PiByZXMuaGFzVmFsdWUoKSkgYXMgSHR0cFJlc291cmNlUmVmPFQ+WydoYXNWYWx1ZSddLFxuICAgIHNldDogKHYpID0+IHJlcy5zZXQodiksXG4gICAgdXBkYXRlOiAodikgPT4gcmVzLnVwZGF0ZSh2KSxcbiAgfTtcbn1cbiJdfQ==","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 .sort(([a], [b]) => a.localeCompare(b))\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLXdpdGgtcGFyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcmVzb3VyY2Uvc3JjL2xpYi91dGlsL3VybC13aXRoLXBhcmFtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUF1QixNQUFNLHNCQUFzQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUxQyxTQUFTLGVBQWUsQ0FDdEIsTUFBK0M7SUFFL0MsSUFBSSxNQUFNLFlBQVksVUFBVTtRQUFFLE9BQU8sTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBRTNELE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBRTNDLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUMzQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QixRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDN0QsQ0FBQzthQUFNLENBQUM7WUFDTixRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFELENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNsQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1NBQ3hDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLEdBQXdCO0lBQ3BELElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTTtRQUFFLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUVoQyxPQUFPLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDckQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBQYXJhbXMsIEh0dHBSZXNvdXJjZVJlcXVlc3QgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IGVudHJpZXMgfSBmcm9tICdAbW1zdGFjay9vYmplY3QnO1xyXG5cclxuZnVuY3Rpb24gbm9ybWFsaXplUGFyYW1zKFxyXG4gIHBhcmFtczogUmVxdWlyZWQ8SHR0cFJlc291cmNlUmVxdWVzdD5bJ3BhcmFtcyddLFxyXG4pOiBzdHJpbmcge1xyXG4gIGlmIChwYXJhbXMgaW5zdGFuY2VvZiBIdHRwUGFyYW1zKSByZXR1cm4gcGFyYW1zLnRvU3RyaW5nKCk7XHJcblxyXG4gIGNvbnN0IHBhcmFtTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcclxuXHJcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgZW50cmllcyhwYXJhbXMpKSB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgcGFyYW1NYXAuc2V0KGtleSwgdmFsdWUubWFwKGVuY29kZVVSSUNvbXBvbmVudCkuam9pbignLCcpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBhcmFtTWFwLnNldChrZXksIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZS50b1N0cmluZygpKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gQXJyYXkuZnJvbShwYXJhbU1hcC5lbnRyaWVzKCkpXHJcbiAgICAuc29ydCgoW2FdLCBbYl0pID0+IGEubG9jYWxlQ29tcGFyZShiKSlcclxuICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCR7a2V5fT0ke3ZhbHVlfWApXHJcbiAgICAuam9pbignJicpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdXJsV2l0aFBhcmFtcyhyZXE6IEh0dHBSZXNvdXJjZVJlcXVlc3QpOiBzdHJpbmcge1xyXG4gIGlmICghcmVxLnBhcmFtcykgcmV0dXJuIHJlcS51cmw7XHJcblxyXG4gIHJldHVybiBgJHtyZXEudXJsfT8ke25vcm1hbGl6ZVBhcmFtcyhyZXEucGFyYW1zKX1gO1xyXG59XHJcbiJdfQ==","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, toResourceObject, 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), options?.injector);\n const stableRequest = computed(() => {\n if (cb.isOpen())\n return undefined;\n return request() ?? undefined;\n }, ...(ngDevMode ? [{ debugName: \"stableRequest\", equal: options?.triggerOnSameRequest\n ? undefined\n : createEqualRequest(options?.equal) }] : [{\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 }, ...(ngDevMode ? [{ debugName: \"cacheKey\" }] : []));\n const bustBrowserCache = typeof options?.cache === 'object' &&\n options.cache.bustBrowserCache === true;\n const ignoreCacheControl = typeof options?.cache === 'object' &&\n options.cache.ignoreCacheControl === true;\n const persist = typeof options?.cache === 'object' && options.cache.persist === true;\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 bustBrowserCache,\n ignoreCacheControl,\n persist,\n }),\n };\n })\n : stableRequest;\n let resource = toResourceObject(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.getEntryOrKey(cacheKey);\n const cacheEntry = linkedSignal({\n source: () => cachedEvent(),\n computation: (entry, prev) => {\n if (!entry)\n return null;\n if (typeof entry === 'string' &&\n prev &&\n prev.value !== null &&\n prev.value.key === entry) {\n return prev.value;\n }\n if (typeof entry === 'string')\n return { key: entry, value: null };\n if (!(entry.value instanceof HttpResponse))\n return { key: entry.key, value: null };\n return {\n value: entry.value.body,\n key: entry.key,\n };\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 cacheEntry()?.value ?? 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 }, ...(ngDevMode ? [{ debugName: \"onErrorRef\" }] : []));\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(untracked(resource.error));\n else if (status === 'resolved')\n cb.success();\n }, ...(ngDevMode ? [{ debugName: \"cbEffectRef\" }] : []));\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 }), staleTime, ttl, persist);\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 statusCode: linkedSignal(resource.statusCode),\n headers: linkedSignal(resource.headers),\n disabled: computed(() => cb.isOpen() || 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(stableRequest);\n const prefetchRequest = {\n ...request,\n ...partial,\n };\n if (!prefetchRequest.url)\n return Promise.resolve();\n const key = hashFn({\n ...prefetchRequest,\n url: prefetchRequest.url ?? '',\n });\n const found = cache.getUntracked(key);\n if (found && !found.isStale)\n return Promise.resolve();\n try {\n await firstValueFrom(client.request(prefetchRequest.method ?? 'GET', prefetchRequest.url, {\n ...prefetchRequest,\n credentials: prefetchRequest.credentials,\n priority: prefetchRequest.priority,\n cache: prefetchRequest.cache,\n mode: prefetchRequest.mode,\n redirect: prefetchRequest.redirect,\n context: setCacheContext(prefetchRequest.context, {\n staleTime,\n ttl,\n key: hashFn({\n ...prefetchRequest,\n url: prefetchRequest.url ?? '',\n }),\n bustBrowserCache,\n ignoreCacheControl,\n persist,\n }),\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktcmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yZXNvdXJjZS9zcmMvbGliL3F1ZXJ5LXJlc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxVQUFVLEVBRVYsWUFBWSxFQUNaLFlBQVksR0FJYixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFDTCxRQUFRLEVBQ1IsVUFBVSxFQUNWLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFlBQVksRUFFWixTQUFTLEdBRVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUNMLGVBQWUsRUFFZixvQkFBb0IsRUFDcEIsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLE9BQU8sRUFDUCxZQUFZLEVBQ1osZUFBZSxFQUNmLGdCQUFnQixFQUNoQixhQUFhLEdBRWQsTUFBTSxRQUFRLENBQUM7QUE4SWhCLE1BQU0sVUFBVSxhQUFhLENBQzNCLE9BQXFELEVBQ3JELE9BQTZDO0lBRTdDLE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFVLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUUzRCxNQUFNLFVBQVUsR0FBRyxPQUFPLEVBQUUsUUFBUTtRQUNsQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFdkIsTUFBTSxFQUFFLEdBQUcsb0JBQW9CLENBQzdCLE9BQU8sRUFBRSxjQUFjLEtBQUssSUFBSTtRQUM5QixDQUFDLENBQUMsU0FBUztRQUNYLENBQUMsQ0FBQyxDQUFDLE9BQU8s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LE1BQU0sY0FBYyxDQUNsQixNQUFNLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxNQUFNLElBQUksS0FBSyxFQUFFLGVBQWUsQ0FBQyxHQUFHLEVBQUU7b0JBQ25FLEdBQUcsZUFBZTtvQkFDbEIsV0FBVyxFQUFFLGVBQWUsQ0FBQyxXQUVoQjtvQkFDYixRQUFRLEVBQUUsZUFBZSxDQUFDLFFBQXVDO29CQUNqRSxLQUFLLEVBQUUsZUFBZSxDQUFDLEtBQWlDO29CQUN4RCxJQUFJLEVBQUUsZUFBZSxDQUFDLElBQStCO29CQUNyRCxRQUFRLEVBQUUsZUFBZSxDQUFDLFFBQXVDO29CQUNqRSxPQUFPLEVBQUUsZUFBZSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUU7d0JBQ2hELFNBQVM7d0JBQ1QsR0FBRzt3QkFDSCxHQUFHLEVBQUUsTUFBTSxDQUFDOzRCQUNWLEdBQUcsZUFBZTs0QkFDbEIsR0FBRyxFQUFFLGVBQWUsQ0FBQyxHQUFHLElBQUksRUFBRTt5QkFDL0IsQ0FBQzt3QkFDRixnQkFBZ0I7d0JBQ2hCLGtCQUFrQjt3QkFDbEIsT0FBTztxQkFDUixDQUFDO29CQUNGLE9BQU8sRUFBRSxlQUFlLENBQUMsT0FBc0I7b0JBQy9DLE9BQU8sRUFBRSxVQUFVO2lCQUNwQixDQUFDLENBQ0gsQ0FBQztnQkFFRixPQUFPO1lBQ1QsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxTQUFTLEVBQUU7b0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDekQsT0FBTztZQUNULENBQUM7UUFDSCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEh0dHBDbGllbnQsXHJcbiAgSHR0cEhlYWRlcnMsXHJcbiAgaHR0cFJlc291cmNlLFxyXG4gIEh0dHBSZXNwb25zZSxcclxuICB0eXBlIEh0dHBSZXNvdXJjZU9wdGlvbnMsXHJcbiAgdHlwZSBIdHRwUmVzb3VyY2VSZWYsXHJcbiAgdHlwZSBIdHRwUmVzb3VyY2VSZXF1ZXN0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtcclxuICBjb21wdXRlZCxcclxuICBEZXN0cm95UmVmLFxyXG4gIGVmZmVjdCxcclxuICBpbmplY3QsXHJcbiAgaXNEZXZNb2RlLFxyXG4gIGxpbmtlZFNpZ25hbCxcclxuICBTaWduYWwsXHJcbiAgdW50cmFja2VkLFxyXG4gIFdyaXRhYmxlU2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0b1dyaXRhYmxlIH0gZnJvbSAnQG1tc3RhY2svcHJpbWl0aXZlcyc7XHJcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgY2F0Y2hWYWx1ZUVycm9yLFxyXG4gIENpcmN1aXRCcmVha2VyT3B0aW9ucyxcclxuICBjcmVhdGVDaXJjdWl0QnJlYWtlcixcclxuICBjcmVhdGVFcXVhbFJlcXVlc3QsXHJcbiAgaGFzU2xvd0Nvbm5lY3Rpb24sXHJcbiAgaW5qZWN0UXVlcnlDYWNoZSxcclxuICBwZXJzaXN0UmVzb3VyY2VWYWx1ZXMsXHJcbiAgcmVmcmVzaCxcclxuICByZXRyeU9uRXJyb3IsXHJcbiAgc2V0Q2FjaGVDb250ZXh0LFxyXG4gIHRvUmVzb3VyY2VPYmplY3QsXHJcbiAgdXJsV2l0aFBhcmFtcyxcclxuICB0eXBlIFJldHJ5T3B0aW9ucyxcclxufSBmcm9tICcuL3V0aWwnO1xyXG5pbXBvcnQgeyBDYWNoZUVudHJ5IH0gZnJvbSAnLi91dGlsL2NhY2hlL2NhY2hlJztcclxuXHJcbi8qKlxyXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyBjYWNoaW5nIGJlaGF2aW9yIG9mIGEgYHF1ZXJ5UmVzb3VyY2VgLlxyXG4gKiAtIGB0cnVlYDogRW5hYmxlcyBjYWNoaW5nIHdpdGggZGVmYXVsdCBzZXR0aW5ncy5cclxuICogLSBgeyB0dGw/OiBudW1iZXI7IHN0YWxlVGltZT86IG51bWJlcjsgaGFzaD86IChyZXE6IEh0dHBSZXNvdXJjZVJlcXVlc3QpID0+IHN0cmluZzsgfWA6ICBDb25maWd1cmVzIGNhY2hpbmcgd2l0aCBjdXN0b20gc2V0dGluZ3MuXHJcbiAqL1xyXG50eXBlIFJlc291cmNlQ2FjaGVPcHRpb25zID1cclxuICB8IHRydWVcclxuICB8IHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFRoZSBUaW1lIFRvIExpdmUgKFRUTCkgZm9yIHRoZSBjYWNoZWQgZGF0YSwgaW4gbWlsbGlzZWNvbmRzLiBBZnRlciB0aGlzIHRpbWUsIHRoZSBjYWNoZWQgZGF0YSBpc1xyXG4gICAgICAgKiBjb25zaWRlcmVkIGV4cGlyZWQgYW5kIHdpbGwgYmUgcmVmZXRjaGVkLlxyXG4gICAgICAgKi9cclxuICAgICAgdHRsPzogbnVtYmVyO1xyXG4gICAgICAvKipcclxuICAgICAgICogVGhlIGR1cmF0aW9uLCBpbiBtaWxsaXNlY29uZHMsIGR1cmluZyB3aGljaCBzdGFsZSBkYXRhIGNhbiBiZSBzZXJ2ZWQgd2hpbGUgYSByZXZhbGlkYXRpb24gcmVxdWVzdFxyXG4gICAgICAgKiBpcyBtYWRlIGluIHRoZSBiYWNrZ3JvdW5kLlxyXG4gICAgICAgKi9cclxuICAgICAgc3RhbGVUaW1lPzogbnVtYmVyO1xyXG4gICAgICAvKipcclxuICAgICAgICogQSBjdXN0b20gZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdGhlIGNhY2hlIGtleS4gRGVmYXVsdHMgdG8gdXNpbmcgdGhlIHJlcXVlc3QgVVJMIHdpdGggcGFyYW1ldGVycy5cclxuICAgICAgICogUHJvdmlkZSBhIGN1c3RvbSBoYXNoIGZ1bmN0aW9uIGlmIHlvdSBuZWVkIG1vcmUgY29udHJvbCBvdmVyIGhvdyBjYWNoZSBrZXlzIGFyZSBnZW5lcmF0ZWQsXHJcbiAgICAgICAqIGZvciBpbnN0YW5jZSwgdG8gaWdub3JlIGNlcnRhaW4gcXVlcnkgcGFyYW1ldGVycyBvciB0byB1c2UgcmVxdWVzdCBib2R5IGZvciB0aGUgY2FjaGUga2V5LlxyXG4gICAgICAgKi9cclxuICAgICAgaGFzaD86IChyZXE6IEh0dHBSZXNvdXJjZVJlcXVlc3QpID0+IHN0cmluZztcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFdoZXRoZXIgdG8gYnVzdCB0aGUgYnJvd3NlciBjYWNoZSBieSBhcHBlbmRpbmcgYSB1bmlxdWUgcXVlcnkgcGFyYW1ldGVyIHRvIHRoZSByZXF1ZXN0IFVSTC5cclxuICAgICAgICogVGhpcyBpcyB1c2VmdWwgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIGxhdGVzdCBkYXRhIGlzIGZldGNoZWQgZnJvbSB0aGUgc2VydmVyLCBieXBhc3NpbmcgYW55XHJcbiAgICAgICAqIGNhY2hlZCByZXNwb25zZXMgaW4gdGhlIGJyb3dzZXIuIFRoZSB1bmlxdWUgcGFyYW1ldGVyIGlzIHJlbW92ZWQgYmVmb3JlIGNhbGxpbmcgdGhlIGNhY2hlIGZ1bmN0aW9uLCBzbyBpdCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNhY2hlIGtleS5cclxuICAgICAgICogQGRlZmF1bHQgZmFsc2UgLSBCeSBkZWZhdWx0LCB0aGUgcmVzb3VyY2Ugd2lsbCBub3QgYnVzdCB0aGUgYnJvd3NlciBjYWNoZS5cclxuICAgICAgICovXHJcbiAgICAgIGJ1c3RCcm93c2VyQ2FjaGU/OiBib29sZWFuO1xyXG4gICAgICAvKipcclxuICAgICAgICogV2hldGhlciB0byBpZ25vcmUgdGhlIGBDYWNoZS1Db250cm9sYCBoZWFkZXJzIGZyb20gdGhlIHNlcnZlciB3aGVuIGNhY2hpbmcgcmVzcG9uc2VzLlxyXG4gICAgICAgKiBJZiBzZXQgdG8gYHRydWVgLCB0aGUgcmVzb3VyY2Ugd2lsbCBub3QgcmVzcGVjdCBhbnkgY2FjaGUgZGlyZWN0aXZlcyBmcm9tIHRoZSBzZXJ2ZXIsXHJcbiAgICAgICAqIGFsbG93aW5nIHlvdSB0byBjb250cm9sIGNhY2hpbmcgYmVoYXZpb3IgZW50aXJlbHkgdGhyb3VnaCB0aGUgcmVzb3VyY2Ugb3B0aW9ucy5cclxuICAgICAgICogQGRlZmF1bHQgZmFsc2UgLSBCeSBkZWZhdWx0IHRoZSByZXNvdXJjZSB3aWxsIHJlc3BlY3QgYENhY2hlLUNvbnRyb2xgIGhlYWRlcnMuXHJcbiAgICAgICAqL1xyXG4gICAgICBpZ25vcmVDYWNoZUNvbnRyb2w/OiBib29sZWFuO1xyXG4gICAgICAvKipcclxuICAgICAgICogV2hldGhlciB0byBwZXJzaXN0IHRoZSBjYWNoZSBlbnRyeSBpbiB0aGUgbG9jYWwgREIgaW5zdGFuY2UuXHJcbiAgICAgICAqIEBkZWZhdWx0IGZhbHNlIC0gQnkgZGVmYXVsdCwgdGhlIGNhY2hlIGVudHJ5IGlzIG5vdCBwZXJzaXN0ZWQuXHJcbiAgICAgICAqL1xyXG4gICAgICBwZXJzaXN0PzogYm9vbGVhbjtcclxuICAgIH07XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgYSBgcXVlcnlSZXNvdXJjZWAuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBRdWVyeVJlc291cmNlT3B0aW9uczxUUmVzdWx0LCBUUmF3ID0gVFJlc3VsdD4gPSBIdHRwUmVzb3VyY2VPcHRpb25zPFxyXG4gIFRSZXN1bHQsXHJcbiAgVFJhd1xyXG4+ICYge1xyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdG8ga2VlcCB0aGUgcHJldmlvdXMgdmFsdWUgb2YgdGhlIHJlc291cmNlIHdoaWxlIGEgcmVmcmVzaCBpcyBpbiBwcm9ncmVzcy5cclxuICAgKiBEZWZhdWx0cyB0byBgZmFsc2VgLiBBbHNvIGtlZXBzIHN0YXR1cyAmIGhlYWRlcnMgd2hpbGUgcmVmcmVzaGluZy5cclxuICAgKi9cclxuICBrZWVwUHJldmlvdXM/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIFRoZSByZWZyZXNoIGludGVydmFsLCBpbiBtaWxsaXNlY29uZHMuIElmIHByb3ZpZGVkLCB0aGUgcmVzb3VyY2Ugd2lsbCBhdXRvbWF0aWNhbGx5XHJcbiAgICogcmVmcmVzaCBpdHMgZGF0YSBhdCB0aGUgc3BlY2lmaWVkIGludGVydmFsLlxyXG4gICAqL1xyXG4gIHJlZnJlc2g/OiBudW1iZXI7XHJcbiAgLyoqXHJcbiAgICogT3B0aW9ucyBmb3IgcmV0cnlpbmcgZmFpbGVkIHJlcXVlc3RzLlxyXG4gICAqL1xyXG4gIHJldHJ5PzogUmV0cnlPcHRpb25zO1xyXG4gIC8qKlxyXG4gICAqIEFuIG9wdGlvbmFsIGVycm9yIGhhbmRsZXIgY2FsbGJhY2suICBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZVxyXG4gICAqIHVuZGVybHlpbmcgSFRUUCByZXF1ZXN0IGZhaWxzLiBVc2VmdWwgZm9yIGRpc3BsYXlpbmcgdG9hc3RzIG9yIG90aGVyIGVycm9yIG1lc3NhZ2VzLlxyXG4gICAqL1xyXG4gIG9uRXJyb3I/OiAoZXJyOiB1bmtub3duKSA9PiB2b2lkO1xyXG4gIC8qKlxyXG4gICAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGEgY2lyY3VpdCBicmVha2VyIGZvciB0aGUgcmVzb3VyY2UuXHJcbiAgICovXHJcbiAgY2lyY3VpdEJyZWFrZXI/OiBDaXJjdWl0QnJlYWtlck9wdGlvbnMgfCB0cnVlO1xyXG4gIC8qKlxyXG4gICAqIE9wdGlvbnMgZm9yIGVuYWJsaW5nIGFuZCBjb25maWd1cmluZyBjYWNoaW5nIGZvciB0aGUgcmVzb3VyY2UuXHJcbiAgICovXHJcbiAgY2FjaGU/OiBSZXNvdXJjZUNhY2hlT3B0aW9ucztcclxuICAvKipcclxuICAgKiBUcmlnZ2VyIGEgcmVxdWVzdCBldmVyeSB0aW1lIHRoZSByZXF1ZXN0IGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCwgZXZlbiBpZiB0aGUgcmVxdWVzdCBwYXJhbWV0ZXJzIGFyZSB0aGUgc2FtZS5cclxuICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAqL1xyXG4gIHRyaWdnZXJPblNhbWVSZXF1ZXN0PzogYm9vbGVhbjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXByZXNlbnRzIGEgcmVzb3VyY2UgY3JlYXRlZCBieSBgcXVlcnlSZXNvdXJjZWAuIEV4dGVuZHMgYEh0dHBSZXNvdXJjZVJlZmAgd2l0aCBhZGRpdGlvbmFsIHByb3BlcnRpZXMuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBRdWVyeVJlc291cmNlUmVmPFRSZXN1bHQ+ID0gT21pdDxcclxuICBIdHRwUmVzb3VyY2VSZWY8VFJlc3VsdD4sXHJcbiAgJ2hlYWRlcnMnIHwgJ3N0YXR1c0NvZGUnXHJcbj4gJiB7XHJcbiAgLyoqXHJcbiAgICogTGlua2Vkc2lnbmFsIG9mIHRoZSByZXNwb25zZSBoZWFkZXJzLCB3aGVuIGF2YWlsYWJsZS5cclxuICAgKi9cclxuICByZWFkb25seSBoZWFkZXJzOiBXcml0YWJsZVNpZ25hbDxIdHRwSGVhZGVycyB8IHVuZGVmaW5lZD47XHJcbiAgLyoqXHJcbiAgICogTGlua2Vkc2lnbmFsIG9mIHRoZSByZXNwb25zZSBzdGF0dXMgY29kZSwgd2hlbiBhdmFpbGFibGUuXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgc3RhdHVzQ29kZTogV3JpdGFibGVTaWduYWw8bnVtYmVyIHwgdW5kZWZpbmVkPjtcclxuICAvKipcclxuICAgKiBBIHNpZ25hbCBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHJlc291cmNlIGlzIGN1cnJlbnRseSBkaXNhYmxlZCAoZHVlIHRvIGNpcmN1aXQgYnJlYWtlciBvciB1bmRlZmluZWQgcmVxdWVzdCkuXHJcbiAgICovXHJcbiAgZGlzYWJsZWQ6IFNpZ25hbDxib29sZWFuPjtcclxuICAvKipcclxuICAgKiBQcmVmZXRjaGVzIGRhdGEgZm9yIHRoZSByZXNvdXJjZSwgcG9wdWxhdGluZyB0aGUgY2FjaGUgaWYgY2FjaGluZyBpcyBlbmFibGVkLiAgVGhpcyBjYW4gYmVcclxuICAgKiB1c2VkIHRvIHByb2FjdGl2ZWx5IGxvYWQgZGF0YSBiZWZvcmUgaXQncyBuZWVkZWQuICBJZiBhIHNsb3cgY29ubmVjdGlvbiBpcyBkZXRlY3RlZCwgcHJlZmV0Y2hpbmcgaXMgc2tpcHBlZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSByZXEgLSBPcHRpb25hbCBwYXJ0aWFsIHJlcXVlc3QgcGFyYW1ldGVycyB0byB1c2UgZm9yIHRoZSBwcmVmZXRjaC4gIFRoaXMgYWxsb3dzIHlvdVxyXG4gICAqICAgICAgICAgICAgICB0byBwcmVmZXRjaCBkYXRhIHdpdGggZGlmZmVyZW50IHBhcmFtZXRlcnMgdGhhbiB0aGUgbWFpbiByZXNvdXJjZSByZXF1ZXN0LlxyXG4gICAqL1xyXG4gIHByZWZldGNoOiAocmVxPzogUGFydGlhbDxIdHRwUmVzb3VyY2VSZXF1ZXN0PikgPT4gUHJvbWlzZTx2b2lkPjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBxdWVyeVJlc291cmNlPFRSZXN1bHQsIFRSYXcgPSBUUmVzdWx0PihcclxuICByZXF1ZXN0OiAoKSA9PiBIdHRwUmVzb3VyY2VSZXF1ZXN0IHwgdW5kZWZpbmVkIHwgdm9pZCxcclxuICBvcHRpb25zOiBRdWVyeVJlc291cmNlT3B0aW9uczxUUmVzdWx0LCBUUmF3PiAmIHtcclxuICAgIGRlZmF1bHRWYWx1ZTogTm9JbmZlcjxUUmVzdWx0PjtcclxuICB9LFxyXG4pOiBRdWVyeVJlc291cmNlUmVmPFRSZXN1bHQ+O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYW4gZXh0ZW5kZWQgSFRUUCByZXNvdXJjZSB3aXRoIGZlYXR1cmVzIGxpa2UgY2FjaGluZywgcmV0cmllcywgcmVmcmVzaCBpbnRlcnZhbHMsXHJcbiAqIGNpcmN1aXQgYnJlYWtlciwgYW5kIG9wdGltaXN0aWMgdXBkYXRlcy4gV2l0aG91dCBhZGRpdGlvbmFsIG9wdGlvbnMgaXQgaXMgZXF1aXZhbGVudCB0byBzaW1wbHkgY2FsbGluZyBgaHR0cFJlc291cmNlYC5cclxuICpcclxuICogQHBhcmFtIHJlcXVlc3QgQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGBIdHRwUmVzb3VyY2VSZXF1ZXN0YCB0byBiZSBtYWRlLiAgVGhpcyBmdW5jdGlvblxyXG4gKiAgICAgICAgICAgICAgICBpcyBjYWxsZWQgcmVhY3RpdmVseSwgc28gdGhlIHJlcXVlc3QgY2FuIGNoYW5nZSBvdmVyIHRpbWUuICBJZiB0aGUgZnVuY3Rpb25cclxuICogICAgICAgICAgICAgICAgcmV0dXJucyBgdW5kZWZpbmVkYCwgdGhlIHJlc291cmNlIGlzIGNvbnNpZGVyZWQgXCJkaXNhYmxlZFwiIGFuZCBubyByZXF1ZXN0IHdpbGwgYmUgbWFkZS5cclxuICogQHBhcmFtIG9wdGlvbnMgQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgcmVzb3VyY2UuICBUaGVzZSBvcHRpb25zIGV4dGVuZCB0aGUgYmFzaWNcclxuICogICAgICAgICAgICAgICAgYEh0dHBSZXNvdXJjZU9wdGlvbnNgIGFuZCBhZGQgZmVhdHVyZXMgbGlrZSBga2VlcFByZXZpb3VzYCwgYHJlZnJlc2hgLCBgcmV0cnlgLFxyXG4gKiAgICAgICAgICAgICAgICBgb25FcnJvcmAsIGBjaXJjdWl0QnJlYWtlcmAsIGFuZCBgY2FjaGVgLlxyXG4gKiBAcmV0dXJucyBBbiBgUXVlcnlSZXNvdXJjZVJlZmAgaW5zdGFuY2UsIHdoaWNoIGV4dGVuZHMgdGhlIGJhc2ljIGBIdHRwUmVzb3VyY2VSZWZgIHdpdGggYWRkaXRpb25hbCBmZWF0dXJlcy5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBxdWVyeVJlc291cmNlPFRSZXN1bHQsIFRSYXcgPSBUUmVzdWx0PihcclxuICByZXF1ZXN0OiAoKSA9PiBIdHRwUmVzb3VyY2VSZXF1ZXN0IHwgdW5kZWZpbmVkIHwgdm9pZCxcclxuICBvcHRpb25zPzogUXVlcnlSZXNvdXJjZU9wdGlvbnM8VFJlc3VsdCwgVFJhdz4sXHJcbik6IFF1ZXJ5UmVzb3VyY2VSZWY8VFJlc3VsdCB8IHVuZGVmaW5lZD47XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlSZXNvdXJjZTxUUmVzdWx0LCBUUmF3ID0gVFJlc3VsdD4oXHJcbiAgcmVxdWVzdDogKCkgPT4gSHR0cFJlc291cmNlUmVxdWVzdCB8IHVuZGVmaW5lZCB8IHZvaWQsXHJcbiAgb3B0aW9ucz86IFF1ZXJ5UmVzb3VyY2VPcHRpb25zPFRSZXN1bHQsIFRSYXc+LFxyXG4pOiBRdWVyeVJlc291cmNlUmVmPFRSZXN1bHQgfCB1bmRlZmluZWQ+IHtcclxuICBjb25zdCBjYWNoZSA9IGluamVjdFF1ZXJ5Q2FjaGU8VFJlc3VsdD4ob3B0aW9ucz8uaW5qZWN0b3IpO1xyXG5cclxuICBjb25zdCBkZXN0cm95UmVmID0gb3B0aW9ucz8uaW5qZWN0b3JcclxuICAgID8gb3B0aW9ucy5pbmplY3Rvci5nZXQoRGVzdHJveVJlZilcclxuICAgIDogaW5qZWN0KERlc3Ryb3lSZWYpO1xyXG5cclxuICBjb25zdCBjYiA9IGNyZWF0ZUNpcmN1aXRCcmVha2VyKFxyXG4gICAgb3B0aW9ucz8uY2lyY3VpdEJyZWFrZXIgPT09IHRydWVcclxuICAgICAgPyB1bmRlZmluZWRcclxuICAgICAgOiAob3B0aW9ucz8uY2lyY3VpdEJyZWFrZXIgPz8gZmFsc2UpLFxyXG4gICAgb3B0aW9ucz8uaW5qZWN0b3IsXHJcbiAgKTtcclxuXHJcbiAgY29uc3Qgc3RhYmxlUmVxdWVzdCA9IGNvbXB1dGVkKFxyXG4gICAgKCkgPT4ge1xyXG4gICAgICBpZiAoY2IuaXNPcGVuKCkpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgIHJldHVybiByZXF1ZXN0KCkgPz8gdW5kZWZpbmVkO1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgZXF1YWw6IG9wdGlvbnM/LnRyaWdnZXJPblNhbWVSZXF1ZXN0XHJcbiAgICAgICAgPyB1bmRlZmluZWRcclxuICAgICAgICA6IGNyZWF0ZUVxdWFsUmVxdWVzdChvcHRpb25zPy5lcXVhbCksXHJcbiAgICB9LFxyXG4gICk7XHJcblxyXG4gIGNvbnN0IGhhc2hGbiA9XHJcbiAgICB0eXBlb2Ygb3B0aW9ucz8uY2FjaGUgPT09ICdvYmplY3QnXHJcbiAgICAgID8gKG9wdGlvbnMuY2FjaGUuaGFzaCA/PyB1cmxXaXRoUGFyYW1zKVxyXG4gICAgICA6IHVybFdpdGhQYXJhbXM7XHJcblxyXG4gIGNvbnN0IHN0YWxlVGltZSA9XHJcbiAgICB0eXBlb2Ygb3B0aW9ucz8uY2FjaGUgPT09ICdvYmplY3QnID8gb3B0aW9ucy5jYWNoZS5zdGFsZVRpbWUgOiAwO1xyXG4gIGNvbnN0IHR0bCA9XHJcbiAgICB0eXBlb2Ygb3B0aW9ucz8uY2FjaGUgPT09ICdvYmplY3QnID8gb3B0aW9ucy5jYWNoZS50dGwgOiB1bmRlZmluZWQ7XHJcblxyXG4gIGNvbnN0IGNhY2hlS2V5ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgY29uc3QgciA9IHN0YWJsZVJlcXVlc3QoKTtcclxuICAgIGlmICghcikgcmV0dXJuIG51bGw7XHJcbiAgICByZXR1cm4gaGFzaEZuKHIpO1xyXG4gIH0pO1xyXG5cclxuICBjb25zdCBidXN0QnJvd3NlckNhY2hlID1cclxuICAgIHR5cGVvZiBvcHRpb25zPy5jYWNoZSA9PT0gJ29iamVjdCcgJiZcclxuICAgIG9wdGlvbnMuY2FjaGUuYnVzdEJyb3dzZXJDYWNoZSA9PT0gdHJ1ZTtcclxuXHJcbiAgY29uc3QgaWdub3JlQ2FjaGVDb250cm9sID1cclxuICAgIHR5cGVvZiBvcHRpb25zPy5jYWNoZSA9PT0gJ29iamVjdCcgJiZcclxuICAgIG9wdGlvbnMuY2FjaGUuaWdub3JlQ2FjaGVDb250cm9sID09PSB0cnVlO1xyXG5cclxuICBjb25zdCBwZXJzaXN0ID1cclxuICAgIHR5cGVvZiBvcHRpb25zPy5jYWNoZSA9PT0gJ29iamVjdCcgJiYgb3B0aW9ucy5jYWNoZS5wZXJzaXN0ID09PSB0cnVlO1xyXG5cclxuICBjb25zdCBjYWNoZWRSZXF1ZXN0ID0gb3B0aW9ucz8uY2FjaGVcclxuICAgID8gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHIgPSBzdGFibGVSZXF1ZXN0KCk7XHJcbiAgICAgICAgaWYgKCFyKSByZXR1cm4gcjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLnIsXHJcbiAgICAgICAgICBjb250ZXh0OiBzZXRDYWNoZUNvbnRleHQoci5jb250ZXh0LCB7XHJcbiAgICAgICAgICAgIHN0YWxlVGltZSxcclxuICAgICAgICAgICAgdHRsLFxyXG4gICAgICAgICAgICBrZXk6IGNhY2hlS2V5KCkgPz8gaGFzaEZuKHIpLFxyXG4gICAgICAgICAgICBidXN0QnJvd3NlckNhY2hlLFxyXG4gICAgICAgICAgICBpZ25vcmVDYWNoZUNvbnRyb2wsXHJcbiAgICAgICAgICAgIHBlcnNpc3QsXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICB9O1xyXG4gICAgICB9KVxyXG4gICAgOiBzdGFibGVSZXF1ZXN0O1xyXG5cclxuICBsZXQgcmVzb3VyY2UgPSB0b1Jlc291cmNlT2JqZWN0KFxyXG4gICAgaHR0cFJlc291cmNlPFRSZXN1bHQ+KGNhY2hlZFJlcXVlc3QsIHtcclxuICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgcGFyc2U6IG9wdGlvbnM/LnBhcnNlIGFzIGFueSwgLy8gTm90IG15IGZhdm9yaXRlIHRoaW5nIHRvIGRvLCBidXQgaGVyZSBpdCBpcyBjb21wbGV0ZWx5IHNhZmUuXHJcbiAgICB9KSBhcyBIdHRwUmVzb3VyY2VSZWY8VFJlc3VsdD4sXHJcbiAgKTtcclxuXHJcbiAgcmVzb3VyY2UgPSBjYXRjaFZhbHVlRXJyb3IocmVzb3VyY2UsIG9wdGlvbnM/LmRlZmF1bHRWYWx1ZSBhcyBUUmVzdWx0KTtcclxuXHJcbiAgLy8gZ2V0IGZ1bGwgSHR0cFJlc29uc2UgZnJvbSBDYWNoZVxyXG4gIGNvbnN0IGNhY2hlZEV2ZW50ID0gY2FjaGUuZ2V0RW50cnlPcktleShjYWNoZUtleSk7XHJcblxyXG4gIGNvbnN0IGNhY2hlRW50cnkgPSBsaW5rZWRTaWduYWw8XHJcbiAgICBDYWNoZUVudHJ5PEh0dHBSZXNwb25zZTxUUmVzdWx0Pj4gfCBzdHJpbmcgfCBudWxsLFxyXG4gICAgeyBrZXk6IHN0cmluZzsgdmFsdWU6IFRSZXN1bHQgfCBudWxsIH0gfCBudWxsXHJcbiAgPih7XHJcbiAgICBzb3VyY2U6ICgpID0+IGNhY2hlZEV2ZW50KCksXHJcbiAgICBjb21wdXRhdGlvbjogKGVudHJ5LCBwcmV2KSA9PiB7XHJcbiAgICAgIGlmICghZW50cnkpIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgJiZcclxuICAgICAgICBwcmV2ICYmXHJcbiAgICAgICAgcHJldi52YWx1ZSAhPT0gbnVsbCAmJlxyXG4gICAgICAgIHByZXYudmFsdWUua2V5ID09PSBlbnRyeVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gcHJldi52YWx1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHJldHVybiB7IGtleTogZW50cnksIHZhbHVlOiBudWxsIH07XHJcblxyXG4gICAgICBpZiAoIShlbnRyeS52YWx1ZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSkpXHJcbiAgICAgICAgcmV0dXJuIHsga2V5OiBlbnRyeS5rZXksIHZhbHVlOiBudWxsIH07XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHZhbHVlOiBlbnRyeS52YWx1ZS5ib2R5LFxyXG4gICAgICAgIGtleTogZW50cnkua2V5LFxyXG4gICAgICB9O1xyXG4gICAgfSxcclxuICB9KTtcclxuXHJcbiAgcmVzb3VyY2UgPSByZWZyZXNoKHJlc291cmNlLCBkZXN0cm95UmVmLCBvcHRpb25zPy5yZWZyZXNoKTtcclxuICByZXNvdXJjZSA9IHJldHJ5T25FcnJvcihyZXNvdXJjZSwgb3B0aW9ucz8ucmV0cnkpO1xyXG5cclxuICByZXNvdXJjZSA9IHBlcnNpc3RSZXNvdXJjZVZhbHVlczxUUmVzdWx0PihcclxuICAgIHJlc291cmNlLFxyXG4gICAgb3B0aW9ucz8ua2VlcFByZXZpb3VzLFxyXG4gICAgb3B0aW9ucz8uZXF1YWwsXHJcbiAgKTtcclxuXHJcbiAgY29uc3QgdmFsdWUgPSBvcHRpb25zPy5jYWNoZVxyXG4gICAgPyB0b1dyaXRhYmxlKFxyXG4gICAgICAgIGNvbXB1dGVkKCgpOiBUUmVzdWx0ID0+IHtcclxuICAgICAgICAgIHJldHVybiBjYWNoZUVudHJ5KCk/LnZhbHVlID8/IHJlc291cmNlLnZhbHVlKCk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgcmVzb3VyY2UudmFsdWUuc2V0LFxyXG4gICAgICAgIHJlc291cmNlLnZhbHVlLnVwZGF0ZSxcclxuICAgICAgKVxyXG4gICAgOiByZXNvdXJjZS52YWx1ZTtcclxuXHJcbiAgY29uc3Qgb25FcnJvciA9IG9wdGlvbnM/Lm9uRXJyb3I7IC8vIFB1dCBpbiBvd24gdmFyaWFibGUgdG8gZW5zdXJlIHZhbHVlIHJlbWFpbnMgZXZlbiBpZiBvcHRpb25zIGFyZSBzb21laG93IG11dGF0ZWQgaW4tbGluZVxyXG5cclxuICBpZiAob25FcnJvcikge1xyXG4gICAgY29uc3Qgb25FcnJvclJlZiA9IGVmZmVjdCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGVyciA9IHJlc291cmNlLmVycm9yKCk7XHJcbiAgICAgIGlmIChlcnIpIG9uRXJyb3IoZXJyKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIGNsZWFudXAgb24gbWFudWFsIGRlc3Ryb3ksIEknbSBjb21mb3J0YWJsZSBzZXR0aW5nIHRoZXNlIHByb3BzIGluLWxpbmUgYXMgd2UgaGF2ZSB5ZXQgdG8gJ3JlbGVhc2UnIHRoZSBvYmplY3Qgb3V0IG9mIHRoaXMgbGV4aWNhbCBzY29wZVxyXG4gICAgY29uc3QgZGVzdHJveVJlc3QgPSByZXNvdXJjZS5kZXN0cm95O1xyXG4gICAgcmVzb3VyY2UuZGVzdHJveSA9ICgpID0+IHtcclxuICAgICAgb25FcnJvclJlZi5kZXN0cm95KCk7XHJcbiAgICAgIGRlc3Ryb3lSZXN0KCk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLy8gaXRlcmF0ZSBjaXJjdWl0IGJyZWFrZXIgc3RhdGUsIGlzIGVmZmVjdCBhcyBhIGNvbXB1dGVkIHdvdWxkIGNhdXNlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSAocmVzb3VyY2UgLT4gY2IgLT4gcmVzb3VyY2UpXHJcbiAgY29uc3QgY2JFZmZlY3RSZWYgPSBlZmZlY3QoKCkgPT4ge1xyXG4gICAgY29uc3Qgc3RhdHVzID0gcmVzb3VyY2Uuc3RhdHVzKCk7XHJcbiAgICBpZiAoc3RhdHVzID09PSAnZXJyb3InKSBjYi5mYWlsKHVudHJhY2tlZChyZXNvdXJjZS5lcnJvcikpO1xyXG4gICAgZWxzZSBpZiAoc3RhdHVzID09PSAncmVzb2x2ZWQnKSBjYi5zdWNjZXNzKCk7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IHNldCA9ICh2YWx1ZTogVFJlc3VsdCkgPT4ge1xyXG4gICAgcmVzb3VyY2UudmFsdWUuc2V0KHZhbHVlKTtcclxuICAgIGNvbnN0IGsgPSB1bnRyYWNrZWQoY2FjaGVLZXkpO1xyXG4gICAgaWYgKG9wdGlvbnM/LmNhY2hlICYmIGspXHJcbiAgICAgIGNhY2hlLnN0b3JlKFxyXG4gICAgICAgIGssXHJcbiAgICAgICAgbmV3IEh0dHBSZXNwb25zZSh7XHJcbiAgICAgICAgICBib2R5OiB2YWx1ZSxcclxuICAgICAgICAgIHN0YXR1czogMjAwLFxyXG4gICAgICAgICAgc3RhdHVzVGV4dDogJ09LJyxcclxuICAgICAgICB9KSxcclxuICAgICAgICBzdGFsZVRpbWUsXHJcbiAgICAgICAgdHRsLFxyXG4gICAgICAgIHBlcnNpc3QsXHJcbiAgICAgICk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgdXBkYXRlID0gKHVwZGF0ZXI6ICh2YWx1ZTogVFJlc3VsdCkgPT4gVFJlc3VsdCkgPT4ge1xyXG4gICAgc2V0KHVwZGF0ZXIodW50cmFja2VkKHJlc291cmNlLnZhbHVlKSkpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IGNsaWVudCA9IG9wdGlvbnM/LmluamVjdG9yXHJcbiAgICA/IG9wdGlvbnMuaW5qZWN0b3IuZ2V0KEh0dHBDbGllbnQpXHJcbiAgICA6IGluamVjdChIdHRwQ2xpZW50KTtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIC4uLnJlc291cmNlLFxyXG4gICAgdmFsdWUsXHJcbiAgICBzZXQsXHJcbiAgICB1cGRhdGUsXHJcbiAgICBzdGF0dXNDb2RlOiBsaW5rZWRTaWduYWwocmVzb3VyY2Uuc3RhdHVzQ29kZSksXHJcbiAgICBoZWFkZXJzOiBsaW5rZWRTaWduYWwocmVzb3VyY2UuaGVhZGVycyksXHJcbiAgICBkaXNhYmxlZDogY29tcHV0ZWQoKCkgPT4gY2IuaXNPcGVuKCkgfHwgc3RhYmxlUmVxdWVzdCgpID09PSB1bmRlZmluZWQpLFxyXG4gICAgcmVsb2FkOiAoKSA9PiB7XHJcbiAgICAgIGNiLmhhbGZPcGVuKCk7IC8vIG9wZW4gdGhlIGNpcmN1aXQgZm9yIG1hbnVhbCByZWxvYWRcclxuICAgICAgcmV0dXJuIHJlc291cmNlLnJlbG9hZCgpO1xyXG4gICAgfSxcclxuICAgIGRlc3Ryb3k6ICgpID0+IHtcclxuICAgICAgY2JFZmZlY3RSZWYuZGVzdHJveSgpO1xyXG4gICAgICBjYi5kZXN0cm95KCk7XHJcbiAgICAgIHJlc291cmNlLmRlc3Ryb3koKTtcclxuICAgIH0sXHJcbiAgICBwcmVmZXRjaDogYXN5bmMgKHBhcnRpYWwpID0+IHtcclxuICAgICAgaWYgKCFvcHRpb25zPy5jYWNoZSB8fCBoYXNTbG93Q29ubmVjdGlvbigpKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcblxyXG4gICAgICBjb25zdCByZXF1ZXN0ID0gdW50cmFja2VkKHN0YWJsZVJlcXVlc3QpO1xyXG5cclxuICAgICAgY29uc3QgcHJlZmV0Y2hSZXF1ZXN0ID0ge1xyXG4gICAgICAgIC4uLnJlcXVlc3QsXHJcbiAgICAgICAgLi4ucGFydGlhbCxcclxuICAgICAgfTtcclxuICAgICAgaWYgKCFwcmVmZXRjaFJlcXVlc3QudXJsKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcblxyXG4gICAgICBjb25zdCBrZXkgPSBoYXNoRm4oe1xyXG4gICAgICAgIC4uLnByZWZldGNoUmVxdWVzdCxcclxuICAgICAgICB1cmw6IHByZWZldGNoUmVxdWVzdC51cmwgPz8gJycsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgZm91bmQgPSBjYWNoZS5nZXRVbnRyYWNrZWQoa2V5KTtcclxuICAgICAgaWYgKGZvdW5kICYmICFmb3VuZC5pc1N0YWxlKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcblxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICAgICAgY2xpZW50LnJlcXVlc3QocHJlZmV0Y2hSZXF1ZXN0Lm1ldGhvZCA/PyAnR0VUJywgcHJlZmV0Y2hSZXF1ZXN0LnVybCwge1xyXG4gICAgICAgICAgICAuLi5wcmVmZXRjaFJlcXVlc3QsXHJcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBwcmVmZXRjaFJlcXVlc3QuY3JlZGVudGlhbHMgYXNcclxuICAgICAgICAgICAgICB8IFJlcXVlc3RDcmVkZW50aWFsc1xyXG4gICAgICAgICAgICAgIHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBwcmlvcml0eTogcHJlZmV0Y2hSZXF1ZXN0LnByaW9yaXR5IGFzIFJlcXVlc3RQcmlvcml0eSB8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgY2FjaGU6IHByZWZldGNoUmVxdWVzdC5jYWNoZSBhcyBSZXF1ZXN0Q2FjaGUgfCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIG1vZGU6IHByZWZldGNoUmVxdWVzdC5tb2RlIGFzIFJlcXVlc3RNb2RlIHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICByZWRpcmVjdDogcHJlZmV0Y2hSZXF1ZXN0LnJlZGlyZWN0IGFzIFJlcXVlc3RSZWRpcmVjdCB8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgY29udGV4dDogc2V0Q2FjaGVDb250ZXh0KHByZWZldGNoUmVxdWVzdC5jb250ZXh0LCB7XHJcbiAgICAgICAgICAgICAgc3RhbGVUaW1lLFxyXG4gICAgICAgICAgICAgIHR0bCxcclxuICAgICAgICAgICAgICBrZXk6IGhhc2hGbih7XHJcbiAgICAgICAgICAgICAgICAuLi5wcmVmZXRjaFJlcXVlc3QsXHJcbiAgICAgICAgICAgICAgICB1cmw6IHByZWZldGNoUmVxdWVzdC51cmwgPz8gJycsXHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgYnVzdEJyb3dzZXJDYWNoZSxcclxuICAgICAgICAgICAgICBpZ25vcmVDYWNoZUNvbnRyb2wsXHJcbiAgICAgICAgICAgICAgcGVyc2lzdCxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHByZWZldGNoUmVxdWVzdC5oZWFkZXJzIGFzIEh0dHBIZWFkZXJzLFxyXG4gICAgICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnLFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIGNvbnNvbGUuZXJyb3IoJ1ByZWZldGNoIGZhaWxlZDogJywgZXJyKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgfTtcclxufVxyXG4iXX0=","import { computed, DestroyRef, inject, linkedSignal, 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 { createCircuitBreaker, 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 function is called reactively. The parameter is the mutation value provided by the `mutate` method.\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 TMutation - The type of the mutation value (the request body).\n * @typeParam TICTX - The type of the initial context value passed to `onMutate`.\n * @typeParam TCTX - The type of the context value returned by `onMutate`.\n * @typeParam TMethod - The HTTP method to be used for the mutation (defaults to `HttpResourceRequest['method']`).\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 eq = equal ?? Object.is;\n const next = signal(null, ...(ngDevMode ? [{ debugName: \"next\", equal: (a, b) => {\n if (!a && !b)\n return true;\n if (!a || !b)\n return false;\n return eq(a, b);\n } }] : [{\n equal: (a, b) => {\n if (!a && !b)\n return true;\n if (!a || !b)\n return false;\n return eq(a, b);\n },\n }]));\n const req = computed(() => {\n const nr = next();\n if (!nr)\n return;\n return request(nr) ?? undefined;\n }, ...(ngDevMode ? [{ debugName: \"req\", equal: requestEqual }] : [{\n equal: requestEqual,\n }]));\n const lastValue = linkedSignal({\n source: next,\n computation: (next, prev) => {\n if (next === null && !!prev)\n return prev.value;\n return next;\n },\n });\n const lastValueRequest = computed(() => {\n const nr = lastValue();\n if (!nr)\n return;\n return request(nr) ?? undefined;\n }, ...(ngDevMode ? [{ debugName: \"lastValueRequest\", equal: requestEqual }] : [{\n equal: requestEqual,\n }]));\n const cb = createCircuitBreaker(options?.circuitBreaker === true\n ? undefined\n : (options?.circuitBreaker ?? false), options?.injector);\n const resource = queryResource(req, {\n ...rest,\n circuitBreaker: cb,\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 next.set(null);\n });\n return {\n ...resource,\n destroy: () => {\n statusSub.unsubscribe();\n resource.destroy();\n },\n mutate: (value, ictx) => {\n ctx = onMutate?.(value, ictx);\n next.set(value);\n },\n current: next,\n // redeclare disabled with last value so that it is not affected by the resource's internal disablement logic\n disabled: computed(() => cb.isOpen() || lastValueRequest() === undefined),\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXV0YXRpb24tcmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yZXNvdXJjZS9zcmMvbGliL211dGF0aW9uLXJlc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsVUFBVSxFQUNWLE1BQU0sRUFDTixZQUFZLEVBRVosTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RFLE9BQU8sRUFDTCxhQUFhLEdBR2QsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFzR2xFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBUTlCLE9BRXFFLEVBQ3JFLFVBQTBFLEVBQUU7SUFFNUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFFNUUsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFL0MsTUFBTSxFQUFFLEdBQUcsS0FBSyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUM7SUFDOUIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFtQixJQUFJLHdDQUN4QyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQUUsT0FBTyxJQUFJLENBQUM7Z0JBQzFCLElB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SUFBSSxDQUFTLENBQUM7WUFDdEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQixDQUFDO1FBQ0QsT0FBTyxFQUFFLElBQUk7UUFDYiw2R0FBNkc7UUFDN0csUUFBUSxFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksZ0JBQWdCLEVBQUUsS0FBSyxTQUFTLENBQUM7S0FDMUUsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIEh0dHBSZXNvdXJjZVJlcXVlc3QgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7XHJcbiAgY29tcHV0ZWQsXHJcbiAgRGVzdHJveVJlZixcclxuICBpbmplY3QsXHJcbiAgbGlua2VkU2lnbmFsLFxyXG4gIFNpZ25hbCxcclxuICBzaWduYWwsXHJcbiAgVmFsdWVFcXVhbGl0eUZuLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgY29tYmluZUxhdGVzdFdpdGgsIGZpbHRlciwgbWFwLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIHF1ZXJ5UmVzb3VyY2UsXHJcbiAgdHlwZSBRdWVyeVJlc291cmNlT3B0aW9ucyxcclxuICB0eXBlIFF1ZXJ5UmVzb3VyY2VSZWYsXHJcbn0gZnJvbSAnLi9xdWVyeS1yZXNvdXJjZSc7XHJcbmltcG9ydCB7IGNyZWF0ZUNpcmN1aXRCcmVha2VyLCBjcmVhdGVFcXVhbFJlcXVlc3QgfSBmcm9tICcuL3V0aWwnO1xyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKiBIZWxwZXIgdHlwZSBmb3IgaW5mZXJyaW5nIHRoZSByZXF1ZXN0IGJvZHkgdHlwZSBiYXNlZCBvbiB0aGUgSFRUUCBtZXRob2QuXHJcbiAqL1xyXG50eXBlIE5leHRSZXF1ZXN0PFxyXG4gIFRNZXRob2QgZXh0ZW5kcyBIdHRwUmVzb3VyY2VSZXF1ZXN0WydtZXRob2QnXSxcclxuICBUTXV0YXRpb24sXHJcbj4gPSBUTWV0aG9kIGV4dGVuZHMgJ0RFTEVURScgfCAnZGVsZXRlJ1xyXG4gID8gT21pdDxIdHRwUmVzb3VyY2VSZXF1ZXN0LCAnYm9keScgfCAnbWV0aG9kJz4gJiB7IG1ldGhvZDogVE1ldGhvZCB9XHJcbiAgOiBPbWl0PEh0dHBSZXNvdXJjZVJlcXVlc3QsICdib2R5JyB8ICdtZXRob2QnPiAmIHtcclxuICAgICAgYm9keTogVE11dGF0aW9uO1xyXG4gICAgICBtZXRob2Q6IFRNZXRob2Q7XHJcbiAgICB9O1xyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKiBIZWxwZXIgdHlwZSBmb3IgdHJhY2tpbmcgbXV0YXRpb24gc3RhdHVzLlxyXG4gKi9cclxudHlwZSBTdGF0dXNSZXN1bHQ8VFJlc3VsdD4gPVxyXG4gIHwge1xyXG4gICAgICBzdGF0dXM6ICdlcnJvcic7XHJcbiAgICAgIGVycm9yOiB1bmtub3duO1xyXG4gICAgfVxyXG4gIHwge1xyXG4gICAgICBzdGF0dXM6ICdyZXNvbHZlZCc7XHJcbiAgICAgIHZhbHVlOiBUUmVzdWx0O1xyXG4gICAgfTtcclxuXHJcbi8qKlxyXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyBhIGBtdXRhdGlvblJlc291cmNlYC5cclxuICpcclxuICogQHR5cGVQYXJhbSBUUmVzdWx0IC0gVGhlIHR5cGUgb2YgdGhlIGV4cGVjdGVkIHJlc3VsdCBmcm9tIHRoZSBtdXRhdGlvbi5cclxuICogQHR5cGVQYXJhbSBUUmF3IC0gVGhlIHJhdyByZXNwb25zZSB0eXBlIGZyb20gdGhlIEhUVFAgcmVxdWVzdCAoZGVmYXVsdHMgdG8gVFJlc3VsdCkuXHJcbiAqIEB0eXBlUGFyYW0gVENUWCAtIFRoZSB0eXBlIG9mIHRoZSBjb250ZXh0IHZhbHVlIHJldHVybmVkIGJ5IGBvbk11dGF0ZWAuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBNdXRhdGlvblJlc291cmNlT3B0aW9uczxcclxuICBUUmVzdWx0LFxyXG4gIFRSYXcgPSBUUmVzdWx0LFxyXG4gIFRNdXRhdGlvbiA9IFRSZXN1bHQsXHJcbiAgVENUWCA9IHZvaWQsXHJcbiAgVElDVFggPSBUQ1RYLFxyXG4+ID0gT21pdDxcclxuICBRdWVyeVJlc291cmNlT3B0aW9uczxUUmVzdWx0LCBUUmF3PixcclxuICAnZXF1YWwnIHwgJ29uRXJyb3InIHwgJ2tlZXBQcmV2aW91cycgfCAncmVmcmVzaCcgfCAnY2FjaGUnIC8vIHdlIGNhbid0IGtlZXAgcHJldmlvdXMgdmFsdWVzLCByZWZyZXNoIG9yIGNhY2hlIG11dGF0aW9ucyBhcyB0aGV5IGFyZSBtZWFudCB0byBiZSBvbmUtb2ZmIG9wZXJhdGlvbnNcclxuPiAmIHtcclxuICAvKipcclxuICAgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGJlZm9yZSB0aGUgbXV0YXRpb24gcmVxdWVzdCBpcyBtYWRlLlxyXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgYmVpbmcgbXV0YXRlZCAodGhlIGBib2R5YCBvZiB0aGUgcmVxdWVzdCkuXHJcbiAgICogQHJldHVybnMgQW4gb3B0aW9uYWwgY29udGV4dCB2YWx1ZSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBgb25FcnJvcmAsIGBvblN1Y2Nlc3NgLCBhbmQgYG9uU2V0dGxlZGAgY2FsbGJhY2tzLiBUaGlzIGlzIHVzZWZ1bCBmb3Igc3RvcmluZ1xyXG4gICAqICBpbmZvcm1hdGlvbiBuZWVkZWQgZHVyaW5nIHRoZSBtdXRhdGlvbiBsaWZlY3ljbGUsIHN1Y2ggYXMgcHJldmlvdXMgdmFsdWVzIGZvciBvcHRpbWlzdGljIHVwZGF0ZXMgb3Igcm9sbGJhY2suXHJcbiAgICovXHJcbiAgb25NdXRhdGU/OiAodmFsdWU6IFRNdXRhdGlvbiwgaW5pdGlhbENUWD86IFRJQ1RYKSA9PiBUQ1RYO1xyXG4gIC8qKlxyXG4gICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgaWYgdGhlIG11dGF0aW9uIHJlcXVlc3QgZmFpbHMuXHJcbiAgICogQHBhcmFtIGVycm9yIFRoZSBlcnJvciB0aGF0IG9jY3VycmVkLlxyXG4gICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGBvbk11dGF0ZWAgY2FsbGJhY2sgKG9yIGB1bmRlZmluZWRgIGlmIGBvbk11dGF0ZWAgd2FzIG5vdCBwcm92aWRlZCBvciByZXR1cm5lZCBgdW5kZWZpbmVkYCkuXHJcbiAgICovXHJcbiAgb25FcnJvcj86IChlcnJvcjogdW5rbm93biwgY3R4OiBOb0luZmVyPFRDVFg+KSA9PiB2b2lkO1xyXG4gIC8qKlxyXG4gICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgaWYgdGhlIG11dGF0aW9uIHJlcXVlc3Qgc3VjY2VlZHMuXHJcbiAgICogQHBhcmFtIHZhbHVlIFRoZSByZXN1bHQgb2YgdGhlIG11dGF0aW9uICh0aGUgcGFyc2VkIHJlc3BvbnNlIGJvZHkpLlxyXG4gICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGBvbk11dGF0ZWAgY2FsbGJhY2sgKG9yIGB1bmRlZmluZWRgIGlmIGBvbk11dGF0ZWAgd2FzIG5vdCBwcm92aWRlZCBvciByZXR1cm5lZCBgdW5kZWZpbmVkYCkuXHJcbiAgICovXHJcbiAgb25TdWNjZXNzPzogKHZhbHVlOiBOb0luZmVyPFRSZXN1bHQ+LCBjdHg6IE5vSW5mZXI8VENUWD4pID0+IHZvaWQ7XHJcbiAgLyoqXHJcbiAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSBtdXRhdGlvbiByZXF1ZXN0IHNldHRsZXMgKGVpdGhlciBzdWNjZWVkcyBvciBmYWlscykuXHJcbiAgICogQHBhcmFtIGN0eCBUaGUgY29udGV4dCB2YWx1ZSByZXR1cm5lZCBieSB0aGUgYG9uTXV0YXRlYCBjYWxsYmFjayAob3IgYHVuZGVmaW5lZGAgaWYgYG9uTXV0YXRlYCB3YXMgbm90IHByb3ZpZGVkIG9yIHJldHVybmVkIGB1bmRlZmluZWRgKS5cclxuICAgKi9cclxuICBvblNldHRsZWQ/OiAoY3R4OiBOb0luZmVyPFRDVFg+KSA9PiB2b2lkO1xyXG4gIGVxdWFsPzogVmFsdWVFcXVhbGl0eUZuPFRNdXRhdGlvbj47XHJcbn07XHJcblxyXG4vKipcclxuICogUmVwcmVzZW50cyBhIG11dGF0aW9uIHJlc291cmNlIGNyZWF0ZWQgYnkgYG11dGF0aW9uUmVzb3VyY2VgLiAgRXh0ZW5kcyBgUXVlcnlSZXNvdXJjZVJlZmBcclxuICogYnV0IHJlbW92ZXMgbWV0aG9kcyB0aGF0IGRvbid0IG1ha2Ugc2Vuc2UgZm9yIG11dGF0aW9ucyAobGlrZSBgcHJlZmV0Y2hgLCBgdmFsdWVgLCBldGMuKS5cclxuICpcclxuICogQHR5cGVQYXJhbSBUUmVzdWx0IC0gVGhlIHR5cGUgb2YgdGhlIGV4cGVjdGVkIHJlc3VsdCBmcm9tIHRoZSBtdXRhdGlvbi5cclxuICovXHJcbmV4cG9ydCB0eXBlIE11dGF0aW9uUmVzb3VyY2VSZWY8XHJcbiAgVFJlc3VsdCxcclxuICBUTXV0YXRpb24gPSBUUmVzdWx0LFxyXG4gIFRJQ1RYID0gdm9pZCxcclxuPiA9IE9taXQ8XHJcbiAgUXVlcnlSZXNvdXJjZVJlZjxUUmVzdWx0PixcclxuICAncHJlZmV0Y2gnIHwgJ3ZhbHVlJyB8ICdoYXNWYWx1ZScgfCAnc2V0JyB8ICd1cGRhdGUnIC8vIHdlIGRvbid0IGFsbG93IG1hbnVhbGx5IHZpZXdpbmcgdGhlIHJldHVybmVkIGRhdGEgb3IgdXBkYXRpbmcgaXQgbWFudWFsbHksIHByZWZldGNoaW5nIGEgbXV0YXRpb24gYWxzbyBkb2Vzbid0IG1ha2UgYW55IHNlbnNlXHJcbj4gJiB7XHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZXMgdGhlIG11dGF0aW9uLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHZhbHVlIFRoZSBtdXRhdGlvbiB2YWx1ZSAodXN1YWxseSB0aGUgcmVxdWVzdCBib2R5KS5cclxuICAgKiBAcGFyYW0gY3R4IEFuIG9wdGlvbmFsIGluaXRpYWwgY29udGV4dCB2YWx1ZSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBgb25NdXRhdGVgIGNhbGxiYWNrLlxyXG4gICAqL1xyXG4gIG11dGF0ZTogKHZhbHVlOiBUTXV0YXRpb24sIGN0eD86IFRJQ1RYKSA9PiB2b2lkO1xyXG4gIC8qKlxyXG4gICAqIEEgc2lnbmFsIHRoYXQgaG9sZHMgdGhlIGN1cnJlbnQgbXV0YXRpb24gcmVxdWVzdCwgb3IgYG51bGxgIGlmIG5vIG11dGF0aW9uIGlzIGluIHByb2dyZXNzLlxyXG4gICAqIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgdHJhY2tpbmcgdGhlIHN0YXRlIG9mIHRoZSBtdXRhdGlvbiBvciBmb3IgZGlzcGxheWluZyBsb2FkaW5nIGluZGljYXRvcnMuXHJcbiAgICovXHJcbiAgY3VycmVudDogU2lnbmFsPFRNdXRhdGlvbiB8IG51bGw+O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSByZXNvdXJjZSBmb3IgcGVyZm9ybWluZyBtdXRhdGlvbnMgKGUuZy4sIFBPU1QsIFBVVCwgUEFUQ0gsIERFTEVURSByZXF1ZXN0cykuXHJcbiAqIFVubGlrZSBgcXVlcnlSZXNvdXJjZWAsIGBtdXRhdGlvblJlc291cmNlYCBpcyBkZXNpZ25lZCBmb3Igb25lLW9mZiBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIGRhdGEuXHJcbiAqIEl0IGRvZXMgKm5vdCogY2FjaGUgcmVzcG9uc2VzIGFuZCBkb2VzIG5vdCBwcm92aWRlIGEgYHZhbHVlYCBzaWduYWwuICBJbnN0ZWFkLCBpdCBmb2N1c2VzIG9uXHJcbiAqIG1hbmFnaW5nIHRoZSBtdXRhdGlvbiBsaWZlY3ljbGUgKHBlbmRpbmcsIGVycm9yLCBzdWNjZXNzKSBhbmQgcHJvdmlkZXMgY2FsbGJhY2tzIGZvciBoYW5kbGluZ1xyXG4gKiB0aGVzZSBzdGF0ZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSByZXF1ZXN0IEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBiYXNlIGBIdHRwUmVzb3VyY2VSZXF1ZXN0YCB0byBiZSBtYWRlLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCByZWFjdGl2ZWx5LiBUaGUgcGFyYW1ldGVyIGlzIHRoZSBtdXRhdGlvbiB2YWx1ZSBwcm92aWRlZCBieSB0aGUgYG11dGF0ZWAgbWV0aG9kLlxyXG4gKiBAcGFyYW0gb3B0aW9ucyBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBtdXRhdGlvbiByZXNvdXJjZS4gIFRoaXMgaW5jbHVkZXMgY2FsbGJhY2tzXHJcbiAqICAgICAgICAgICAgICAgZm9yIGBvbk11dGF0ZWAsIGBvbkVycm9yYCwgYG9uU3VjY2Vzc2AsIGFuZCBgb25TZXR0bGVkYC5cclxuICogQHR5cGVQYXJhbSBUUmVzdWx0IC0gVGhlIHR5cGUgb2YgdGhlIGV4cGVjdGVkIHJlc3VsdCBmcm9tIHRoZSBtdXRhdGlvbi5cclxuICogQHR5cGVQYXJhbSBUUmF3IC0gVGhlIHJhdyByZXNwb25zZSB0eXBlIGZyb20gdGhlIEhUVFAgcmVxdWVzdCAoZGVmYXVsdHMgdG8gVFJlc3VsdCkuXHJcbiAqIEB0eXBlUGFyYW0gVE11dGF0aW9uIC0gVGhlIHR5cGUgb2YgdGhlIG11dGF0aW9uIHZhbHVlICh0aGUgcmVxdWVzdCBib2R5KS5cclxuICogQHR5cGVQYXJhbSBUSUNUWCAtIFRoZSB0eXBlIG9mIHRoZSBpbml0aWFsIGNvbnRleHQgdmFsdWUgcGFzc2VkIHRvIGBvbk11dGF0ZWAuXHJcbiAqIEB0eXBlUGFyYW0gVENUWCAtIFRoZSB0eXBlIG9mIHRoZSBjb250ZXh0IHZhbHVlIHJldHVybmVkIGJ5IGBvbk11dGF0ZWAuXHJcbiAqIEB0eXBlUGFyYW0gVE1ldGhvZCAtIFRoZSBIVFRQIG1ldGhvZCB0byBiZSB1c2VkIGZvciB0aGUgbXV0YXRpb24gKGRlZmF1bHRzIHRvIGBIdHRwUmVzb3VyY2VSZXF1ZXN0WydtZXRob2QnXWApLlxyXG4gKiBAcmV0dXJucyBBIGBNdXRhdGlvblJlc291cmNlUmVmYCBpbnN0YW5jZSwgd2hpY2ggcHJvdmlkZXMgbWV0aG9kcyBmb3IgdHJpZ2dlcmluZyB0aGUgbXV0YXRpb25cclxuICogICAgICAgICAgYW5kIG9ic2VydmluZyBpdHMgc3RhdHVzLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG11dGF0aW9uUmVzb3VyY2U8XHJcbiAgVFJlc3VsdCxcclxuICBUUmF3ID0gVFJlc3VsdCxcclxuICBUTXV0YXRpb24gPSBUUmVzdWx0LFxyXG4gIFRDVFggPSB2b2lkLFxyXG4gIFRJQ1RYID0gVENUWCxcclxuICBUTWV0aG9kIGV4dGVuZHMgSHR0cFJlc291cmNlUmVxdWVzdFsnbWV0aG9kJ10gPSBIdHRwUmVzb3VyY2VSZXF1ZXN0WydtZXRob2QnXSxcclxuPihcclxuICByZXF1ZXN0OiAoXHJcbiAgICBwYXJhbXM6IFRNdXRhdGlvbixcclxuICApID0+IE9taXQ8TmV4dFJlcXVlc3Q8VE1ldGhvZCwgVE11dGF0aW9uPiwgJ2JvZHknPiB8IHVuZGVmaW5lZCB8IHZvaWQsXHJcbiAgb3B0aW9uczogTXV0YXRpb25SZXNvdXJjZU9wdGlvbnM8VFJlc3VsdCwgVFJhdywgVE11dGF0aW9uLCBUQ1RYLCBUSUNUWD4gPSB7fSxcclxuKTogTXV0YXRpb25SZXNvdXJjZVJlZjxUUmVzdWx0LCBUTXV0YXRpb24sIFRJQ1RYPiB7XHJcbiAgY29uc3QgeyBvbk11dGF0ZSwgb25FcnJvciwgb25TdWNjZXNzLCBvblNldHRsZWQsIGVxdWFsLCAuLi5yZXN0IH0gPSBvcHRpb25zO1xyXG5cclxuICBjb25zdCByZXF1ZXN0RXF1YWwgPSBjcmVhdGVFcXVhbFJlcXVlc3QoZXF1YWwpO1xyXG5cclxuICBjb25zdCBlcSA9IGVxdWFsID8/IE9iamVjdC5pcztcclxuICBjb25zdCBuZXh0ID0gc2lnbmFsPFRNdXRhdGlvbiB8IG51bGw+KG51bGwsIHtcclxuICAgIGVxdWFsOiAoYSwgYikgPT4ge1xyXG4gICAgICBpZiAoIWEgJiYgIWIpIHJldHVybiB0cnVlO1xyXG4gICAgICBpZiAoIWEgfHwgIWIpIHJldHVybiBmYWxzZTtcclxuICAgICAgcmV0dXJuIGVxKGEsIGIpO1xyXG4gICAgfSxcclxuICB9KTtcclxuXHJcbiAgY29uc3QgcmVxID0gY29tcHV0ZWQoXHJcbiAgICAoKTogSHR0cFJlc291cmNlUmVxdWVzdCB8IHVuZGVmaW5lZCA9PiB7XHJcbiAgICAgIGNvbnN0IG5yID0gbmV4dCgpO1xyXG4gICAgICBpZiAoIW5yKSByZXR1cm47XHJcblxyXG4gICAgICByZXR1cm4gcmVxdWVzdChucikgPz8gdW5kZWZpbmVkO1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgZXF1YWw6IHJlcXVlc3RFcXVhbCxcclxuICAgIH0sXHJcbiAgKTtcclxuXHJcbiAgY29uc3QgbGFzdFZhbHVlID0gbGlua2VkU2lnbmFsPFRNdXRhdGlvbiB8IG51bGwsIFRNdXRhdGlvbiB8IG51bGw+KHtcclxuICAgIHNvdXJjZTogbmV4dCxcclxuICAgIGNvbXB1dGF0aW9uOiAobmV4dCwgcHJldikgPT4ge1xyXG4gICAgICBpZiAobmV4dCA9PT0gbnVsbCAmJiAhIXByZXYpIHJldHVybiBwcmV2LnZhbHVlO1xyXG4gICAgICByZXR1cm4gbmV4dDtcclxuICAgIH0sXHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IGxhc3RWYWx1ZVJlcXVlc3QgPSBjb21wdXRlZChcclxuICAgICgpOiBIdHRwUmVzb3VyY2VSZXF1ZXN0IHwgdW5kZWZpbmVkID0+IHtcclxuICAgICAgY29uc3QgbnIgPSBsYXN0VmFsdWUoKTtcclxuICAgICAgaWYgKCFucikgcmV0dXJuO1xyXG5cclxuICAgICAgcmV0dXJuIHJlcXVlc3QobnIpID8/IHVuZGVmaW5lZDtcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGVxdWFsOiByZXF1ZXN0RXF1YWwsXHJcbiAgICB9LFxyXG4gICk7XHJcblxyXG4gIGNvbnN0IGNiID0gY3JlYXRlQ2lyY3VpdEJyZWFrZXIoXHJcbiAgICBvcHRpb25zPy5jaXJjdWl0QnJlYWtlciA9PT0gdHJ1ZVxyXG4gICAgICA/IHVuZGVmaW5lZFxyXG4gICAgICA6IChvcHRpb25zPy5jaXJjdWl0QnJlYWtlciA/PyBmYWxzZSksXHJcbiAgICBvcHRpb25zPy5pbmplY3RvcixcclxuICApO1xyXG5cclxuICBjb25zdCByZXNvdXJjZSA9IHF1ZXJ5UmVzb3VyY2U8VFJlc3VsdCwgVFJhdz4ocmVxLCB7XHJcbiAgICAuLi5yZXN0LFxyXG4gICAgY2lyY3VpdEJyZWFrZXI6IGNiLFxyXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsIGFzIHVua25vd24gYXMgVFJlc3VsdCwgLy8gZG9lc250IG1hdHRlciBzaW5jZSAudmFsdWUgaXMgbm90IGFjY2Vzc2libGVcclxuICB9KTtcclxuXHJcbiAgbGV0IGN0eDogVENUWCA9IHVuZGVmaW5lZCBhcyBUQ1RYO1xyXG5cclxuICBjb25zdCBkZXN0cm95UmVmID0gb3B0aW9ucy5pbmplY3RvclxyXG4gICAgPyBvcHRpb25zLmluamVjdG9yLmdldChEZXN0cm95UmVmKVxyXG4gICAgOiBpbmplY3QoRGVzdHJveVJlZik7XHJcblxyXG4gIGNvbnN0IGVycm9yJCA9IHRvT2JzZXJ2YWJsZShyZXNvdXJjZS5lcnJvcik7XHJcbiAgY29uc3QgdmFsdWUkID0gdG9PYnNlcnZhYmxlKHJlc291cmNlLnZhbHVlKS5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YobnVsbCkpKTtcclxuXHJcbiAgY29uc3Qgc3RhdHVzU3ViID0gdG9PYnNlcnZhYmxlKHJlc291cmNlLnN0YXR1cylcclxuICAgIC5waXBlKFxyXG4gICAgICBjb21iaW5lTGF0ZXN0V2l0aChlcnJvciQsIHZhbHVlJCksXHJcbiAgICAgIG1hcCgoW3N0YXR1cywgZXJyb3IsIHZhbHVlXSk6IFN0YXR1c1Jlc3VsdDxUUmVzdWx0PiB8IG51bGwgPT4ge1xyXG4gICAgICAgIGlmIChzdGF0dXMgPT09ICdlcnJvcicgJiYgZXJyb3IpIHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHN0YXR1czogJ2Vycm9yJyxcclxuICAgICAgICAgICAgZXJyb3IsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ3Jlc29sdmVkJyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgc3RhdHVzOiAncmVzb2x2ZWQnLFxyXG4gICAgICAgICAgICB2YWx1ZSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfSksXHJcbiAgICAgIGZpbHRlcigodikgPT4gdiAhPT0gbnVsbCksXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZChkZXN0cm95UmVmKSxcclxuICAgIClcclxuICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2Vycm9yJykgb25FcnJvcj8uKHJlc3VsdC5lcnJvciwgY3R4KTtcclxuICAgICAgZWxzZSBvblN1Y2Nlc3M/LihyZXN1bHQudmFsdWUsIGN0eCk7XHJcblxyXG4gICAgICBvblNldHRsZWQ/LihjdHgpO1xyXG4gICAgICBjdHggPSB1bmRlZmluZWQgYXMgVENUWDtcclxuICAgICAgbmV4dC5zZXQobnVsbCk7XHJcbiAgICB9KTtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIC4uLnJlc291cmNlLFxyXG4gICAgZGVzdHJveTogKCkgPT4ge1xyXG4gICAgICBzdGF0dXNTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgICAgcmVzb3VyY2UuZGVzdHJveSgpO1xyXG4gICAgfSxcclxuICAgIG11dGF0ZTogKHZhbHVlLCBpY3R4KSA9PiB7XHJcbiAgICAgIGN0eCA9IG9uTXV0YXRlPy4odmFsdWUsIGljdHgpIGFzIFRDVFg7XHJcbiAgICAgIG5leHQuc2V0KHZhbHVlKTtcclxuICAgIH0sXHJcbiAgICBjdXJyZW50OiBuZXh0LFxyXG4gICAgLy8gcmVkZWNsYXJlIGRpc2FibGVkIHdpdGggbGFzdCB2YWx1ZSBzbyB0aGF0IGl0IGlzIG5vdCBhZmZlY3RlZCBieSB0aGUgcmVzb3VyY2UncyBpbnRlcm5hbCBkaXNhYmxlbWVudCBsb2dpY1xyXG4gICAgZGlzYWJsZWQ6IGNvbXB1dGVkKCgpID0+IGNiLmlzT3BlbigpIHx8IGxhc3RWYWx1ZVJlcXVlc3QoKSA9PT0gdW5kZWZpbmVkKSxcclxuICB9O1xyXG59XHJcbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW1zdGFjay1yZXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3Jlc291cmNlL3NyYy9tbXN0YWNrLXJlc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":"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"}
|