@angular-architects/ngrx-toolkit 20.5.0 → 21.0.0
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/fesm2022/angular-architects-ngrx-toolkit-redux-connector.mjs +3 -3
- package/fesm2022/angular-architects-ngrx-toolkit-redux-connector.mjs.map +1 -1
- package/fesm2022/angular-architects-ngrx-toolkit.mjs +334 -184
- package/fesm2022/angular-architects-ngrx-toolkit.mjs.map +1 -1
- package/package.json +8 -8
- package/{redux-connector/index.d.ts → types/angular-architects-ngrx-toolkit-redux-connector.d.ts} +2 -3
- package/{index.d.ts → types/angular-architects-ngrx-toolkit.d.ts} +97 -54
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"angular-architects-ngrx-toolkit.mjs","sources":["../tmp-esm2022/lib/devtools/internal/devtools-feature.js","../tmp-esm2022/lib/devtools/features/with-disabled-name-indicies.js","../tmp-esm2022/lib/shared/throw-if-null.js","../tmp-esm2022/lib/devtools/internal/glitch-tracker.service.js","../tmp-esm2022/lib/devtools/features/with-glitch-tracking.js","../tmp-esm2022/lib/devtools/features/with-mapper.js","../tmp-esm2022/lib/devtools/provide-devtools-config.js","../tmp-esm2022/lib/devtools/internal/default-tracker.js","../tmp-esm2022/lib/devtools/internal/current-action-names.js","../tmp-esm2022/lib/devtools/internal/devtools-syncer.service.js","../tmp-esm2022/lib/devtools/with-devtools.js","../tmp-esm2022/lib/devtools/rename-devtools-name.js","../tmp-esm2022/lib/devtools/update-state.js","../tmp-esm2022/lib/devtools/with-dev-tools-stub.js","../tmp-esm2022/lib/assertions/assertions.js","../tmp-esm2022/lib/with-redux.js","../tmp-esm2022/lib/with-call-state.js","../tmp-esm2022/lib/with-data-service.js","../tmp-esm2022/lib/with-pagination.js","../tmp-esm2022/lib/with-reset.js","../tmp-esm2022/lib/with-undo-redo.js","../tmp-esm2022/lib/immutable-state/deep-freeze.js","../tmp-esm2022/lib/immutable-state/is-dev-mode.js","../tmp-esm2022/lib/immutable-state/with-immutable-state.js","../tmp-esm2022/lib/storage-sync/internal/indexeddb.service.js","../tmp-esm2022/lib/storage-sync/internal/models.js","../tmp-esm2022/lib/storage-sync/features/with-indexed-db.js","../tmp-esm2022/lib/storage-sync/internal/local-storage.service.js","../tmp-esm2022/lib/storage-sync/internal/session-storage.service.js","../tmp-esm2022/lib/storage-sync/features/with-local-storage.js","../tmp-esm2022/lib/storage-sync/with-storage-sync.js","../tmp-esm2022/lib/with-conditional.js","../tmp-esm2022/lib/with-feature-factory.js","../tmp-esm2022/lib/flattening-operator.js","../tmp-esm2022/lib/mutation/rx-mutation.js","../tmp-esm2022/lib/with-resource.js","../tmp-esm2022/lib/with-entity-resources.js","../tmp-esm2022/lib/with-mutations.js","../tmp-esm2022/lib/mutation/http-mutation.js","../tmp-esm2022/angular-architects-ngrx-toolkit.js"],"sourcesContent":["export const DEVTOOLS_FEATURE = Symbol('DEVTOOLS_FEATURE');\nexport function createDevtoolsFeature(options) {\n return {\n [DEVTOOLS_FEATURE]: true,\n ...options,\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2dG9vbHMtZmVhdHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10b29sa2l0L3NyYy9saWIvZGV2dG9vbHMvaW50ZXJuYWwvZGV2dG9vbHMtZmVhdHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQTJCM0QsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxPQUF3QjtJQUV4QixPQUFPO1FBQ0wsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUk7UUFDeEIsR0FBRyxPQUFPO0tBQ1gsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmFja2VyIH0gZnJvbSAnLi9tb2RlbHMnO1xuXG5leHBvcnQgY29uc3QgREVWVE9PTFNfRkVBVFVSRSA9IFN5bWJvbCgnREVWVE9PTFNfRkVBVFVSRScpO1xuXG5leHBvcnQgdHlwZSBNYXBwZXIgPSAoc3RhdGU6IG9iamVjdCkgPT4gb2JqZWN0O1xuXG5leHBvcnQgdHlwZSBEZXZ0b29sc09wdGlvbnMgPSB7XG4gIGluZGV4TmFtZXM/OiBib29sZWFuOyAvLyBkZWZpbmVzIGlmIG5hbWVzIHNob3VsZCBiZSBpbmRleGVkLlxuICBtYXA/OiBNYXBwZXI7IC8vIGRlZmluZXMgYSBtYXBwZXIgZm9yIHRoZSBzdGF0ZS5cbiAgdHJhY2tlcj86IG5ldyAoKSA9PiBUcmFja2VyOyAvLyBkZWZpbmVzIGEgdHJhY2tlciBmb3IgdGhlIHN0YXRlXG59O1xuXG5leHBvcnQgdHlwZSBEZXZ0b29sc0lubmVyT3B0aW9ucyA9IHtcbiAgaW5kZXhOYW1lczogYm9vbGVhbjtcbiAgbWFwOiBNYXBwZXI7XG4gIHRyYWNrZXI6IFRyYWNrZXI7XG59O1xuXG4vKipcbiAqIEEgRGV2dG9vbHNGZWF0dXJlIGFkZHMgb3IgbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIHRoZVxuICogZGV2dG9vbHMgZXh0ZW5zaW9uLlxuICpcbiAqIFdlIHVzZSB0aGVtIChmdW5jdGlvbiBjYWxscykgaW5zdGVhZCBvZiBhIGNvbmZpZyBvYmplY3QsXG4gKiBiZWNhdXNlIG9mIHRyZWUtc2hha2luZy5cbiAqL1xuZXhwb3J0IHR5cGUgRGV2dG9vbHNGZWF0dXJlID0ge1xuICBbREVWVE9PTFNfRkVBVFVSRV06IHRydWU7XG59ICYgUGFydGlhbDxEZXZ0b29sc09wdGlvbnM+O1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGV2dG9vbHNGZWF0dXJlKFxuICBvcHRpb25zOiBEZXZ0b29sc09wdGlvbnMsXG4pOiBEZXZ0b29sc0ZlYXR1cmUge1xuICByZXR1cm4ge1xuICAgIFtERVZUT09MU19GRUFUVVJFXTogdHJ1ZSxcbiAgICAuLi5vcHRpb25zLFxuICB9O1xufVxuIl19","import { createDevtoolsFeature } from '../internal/devtools-feature';\n/**\n * If multiple instances of the same SignalStore class\n * exist, their devtool names are indexed.\n *\n * For example:\n *\n * ```typescript\n * const Store = signalStore(\n * withDevtools('flights')\n * )\n *\n * const store1 = new Store(); // will show up as 'flights'\n * const store2 = new Store(); // will show up as 'flights-1'\n * ```\n *\n * With adding `withDisabledNameIndices` to the store:\n * ```typescript\n * const Store = signalStore(\n * withDevtools('flights', withDisabledNameIndices())\n * )\n *\n * const store1 = new Store(); // will show up as 'flights'\n * const store2 = new Store(); //💥 throws an error\n * ```\n *\n */\nexport function withDisabledNameIndices() {\n return createDevtoolsFeature({ indexNames: false });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kaXNhYmxlZC1uYW1lLWluZGljaWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRvb2xraXQvc3JjL2xpYi9kZXZ0b29scy9mZWF0dXJlcy93aXRoLWRpc2FibGVkLW5hbWUtaW5kaWNpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFckU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCO0lBQ3JDLE9BQU8scUJBQXFCLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUN0RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlRGV2dG9vbHNGZWF0dXJlIH0gZnJvbSAnLi4vaW50ZXJuYWwvZGV2dG9vbHMtZmVhdHVyZSc7XG5cbi8qKlxuICogSWYgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIFNpZ25hbFN0b3JlIGNsYXNzXG4gKiBleGlzdCwgdGhlaXIgZGV2dG9vbCBuYW1lcyBhcmUgaW5kZXhlZC5cbiAqXG4gKiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBTdG9yZSA9IHNpZ25hbFN0b3JlKFxuICogICB3aXRoRGV2dG9vbHMoJ2ZsaWdodHMnKVxuICogKVxuICpcbiAqIGNvbnN0IHN0b3JlMSA9IG5ldyBTdG9yZSgpOyAvLyB3aWxsIHNob3cgdXAgYXMgJ2ZsaWdodHMnXG4gKiBjb25zdCBzdG9yZTIgPSBuZXcgU3RvcmUoKTsgLy8gd2lsbCBzaG93IHVwIGFzICdmbGlnaHRzLTEnXG4gKiBgYGBcbiAqXG4gKiBXaXRoIGFkZGluZyBgd2l0aERpc2FibGVkTmFtZUluZGljZXNgIHRvIHRoZSBzdG9yZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IFN0b3JlID0gc2lnbmFsU3RvcmUoXG4gKiAgIHdpdGhEZXZ0b29scygnZmxpZ2h0cycsIHdpdGhEaXNhYmxlZE5hbWVJbmRpY2VzKCkpXG4gKiApXG4gKlxuICogY29uc3Qgc3RvcmUxID0gbmV3IFN0b3JlKCk7IC8vIHdpbGwgc2hvdyB1cCBhcyAnZmxpZ2h0cydcbiAqIGNvbnN0IHN0b3JlMiA9IG5ldyBTdG9yZSgpOyAvL/CfkqUgdGhyb3dzIGFuIGVycm9yXG4gKiBgYGBcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoRGlzYWJsZWROYW1lSW5kaWNlcygpIHtcbiAgcmV0dXJuIGNyZWF0ZURldnRvb2xzRmVhdHVyZSh7IGluZGV4TmFtZXM6IGZhbHNlIH0pO1xufVxuIl19","export function throwIfNull(obj) {\n if (obj === null || obj === undefined) {\n throw new Error('');\n }\n return obj;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhyb3ctaWYtbnVsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10b29sa2l0L3NyYy9saWIvc2hhcmVkL3Rocm93LWlmLW51bGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLFdBQVcsQ0FBSSxHQUFNO0lBQ25DLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHRocm93SWZOdWxsPFQ+KG9iajogVCk6IE5vbk51bGxhYmxlPFQ+IHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignJyk7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuIl19","import { Injectable } from '@angular/core';\nimport { getState, watchState } from '@ngrx/signals';\nimport { throwIfNull } from '../../shared/throw-if-null';\nimport * as i0 from \"@angular/core\";\n/**\n * Internal Service used by {@link withGlitchTracking}. It does not rely\n * on `effect` as {@link DefaultTracker} does but uses the NgRx function\n * `watchState` to track all state changes.\n */\nexport class GlitchTrackerService {\n #stores = {};\n #callback;\n get stores() {\n return Object.entries(this.#stores).reduce((acc, [id, { store }]) => {\n acc[id] = store;\n return acc;\n }, {});\n }\n onChange(callback) {\n this.#callback = callback;\n }\n removeStore(id) {\n this.#stores = Object.entries(this.#stores).reduce((newStore, [storeId, value]) => {\n if (storeId !== id) {\n newStore[storeId] = value;\n }\n else {\n value.destroyWatcher();\n }\n return newStore;\n }, {});\n throwIfNull(this.#callback)({});\n }\n track(id, store) {\n const watcher = watchState(store, (state) => {\n throwIfNull(this.#callback)({ [id]: state });\n });\n this.#stores[id] = { destroyWatcher: watcher.destroy, store };\n }\n notifyRenamedStore(id) {\n if (Object.keys(this.#stores).includes(id) && this.#callback) {\n this.#callback({ [id]: getState(this.#stores[id].store) });\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: GlitchTrackerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: GlitchTrackerService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: GlitchTrackerService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xpdGNoLXRyYWNrZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10b29sa2l0L3NyYy9saWIvZGV2dG9vbHMvaW50ZXJuYWwvZ2xpdGNoLXRyYWNrZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQWUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFRekQ7Ozs7R0FJRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUFDL0IsT0FBTyxHQUFXLEVBQUUsQ0FBQztJQUNyQixTQUFTLENBQStEO0lBRXhFLElBQUksTUFBTTtRQUNSLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2xFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDaEIsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQUUsRUFBbUIsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxRQUFRLENBQUMsUUFBd0Q7UUFDL0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7SUFDNUIsQ0FBQztJQUVELFdBQVcsQ0FBQyxFQUFVO1FBQ3BCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUNoRCxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQzdCLElBQUksT0FBTyxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUNuQixRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQzVCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDekIsQ0FBQztZQUNELE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUMsRUFDRCxFQUFZLENBQ2IsQ0FBQztRQUVGLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELEtBQUssQ0FBQyxFQUFVLEVBQUUsS0FBMEI7UUFDMUMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQzFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsY0FBYyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDaEUsQ0FBQztJQUVELGtCQUFrQixDQUFDLEVBQVU7UUFDM0IsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzdELElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3RCxDQUFDO0lBQ0gsQ0FBQzs4R0EzQ1Usb0JBQW9CO2tIQUFwQixvQkFBb0IsY0FEUCxNQUFNOzsyRkFDbkIsb0JBQW9CO2tCQURoQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldFN0YXRlLCBTdGF0ZVNvdXJjZSwgd2F0Y2hTdGF0ZSB9IGZyb20gJ0BuZ3J4L3NpZ25hbHMnO1xuaW1wb3J0IHsgdGhyb3dJZk51bGwgfSBmcm9tICcuLi8uLi9zaGFyZWQvdGhyb3ctaWYtbnVsbCc7XG5pbXBvcnQgeyBUcmFja2VyLCBUcmFja2VyU3RvcmVzIH0gZnJvbSAnLi9tb2RlbHMnO1xuXG50eXBlIFN0b3JlcyA9IFJlY29yZDxcbiAgc3RyaW5nLFxuICB7IGRlc3Ryb3lXYXRjaGVyOiAoKSA9PiB2b2lkOyBzdG9yZTogU3RhdGVTb3VyY2U8b2JqZWN0PiB9XG4+O1xuXG4vKipcbiAqIEludGVybmFsIFNlcnZpY2UgdXNlZCBieSB7QGxpbmsgd2l0aEdsaXRjaFRyYWNraW5nfS4gSXQgZG9lcyBub3QgcmVseVxuICogb24gYGVmZmVjdGAgYXMge0BsaW5rIERlZmF1bHRUcmFja2VyfSBkb2VzIGJ1dCB1c2VzIHRoZSBOZ1J4IGZ1bmN0aW9uXG4gKiBgd2F0Y2hTdGF0ZWAgdG8gdHJhY2sgYWxsIHN0YXRlIGNoYW5nZXMuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgR2xpdGNoVHJhY2tlclNlcnZpY2UgaW1wbGVtZW50cyBUcmFja2VyIHtcbiAgI3N0b3JlczogU3RvcmVzID0ge307XG4gICNjYWxsYmFjazogKChjaGFuZ2VkU3RhdGU6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4pID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG4gIGdldCBzdG9yZXMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuI3N0b3JlcykucmVkdWNlKChhY2MsIFtpZCwgeyBzdG9yZSB9XSkgPT4ge1xuICAgICAgYWNjW2lkXSA9IHN0b3JlO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBUcmFja2VyU3RvcmVzKTtcbiAgfVxuXG4gIG9uQ2hhbmdlKGNhbGxiYWNrOiAoY2hhbmdlZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy4jY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgfVxuXG4gIHJlbW92ZVN0b3JlKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLiNzdG9yZXMgPSBPYmplY3QuZW50cmllcyh0aGlzLiNzdG9yZXMpLnJlZHVjZShcbiAgICAgIChuZXdTdG9yZSwgW3N0b3JlSWQsIHZhbHVlXSkgPT4ge1xuICAgICAgICBpZiAoc3RvcmVJZCAhPT0gaWQpIHtcbiAgICAgICAgICBuZXdTdG9yZVtzdG9yZUlkXSA9IHZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlLmRlc3Ryb3lXYXRjaGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld1N0b3JlO1xuICAgICAgfSxcbiAgICAgIHt9IGFzIFN0b3JlcyxcbiAgICApO1xuXG4gICAgdGhyb3dJZk51bGwodGhpcy4jY2FsbGJhY2spKHt9KTtcbiAgfVxuXG4gIHRyYWNrKGlkOiBzdHJpbmcsIHN0b3JlOiBTdGF0ZVNvdXJjZTxvYmplY3Q+KTogdm9pZCB7XG4gICAgY29uc3Qgd2F0Y2hlciA9IHdhdGNoU3RhdGUoc3RvcmUsIChzdGF0ZSkgPT4ge1xuICAgICAgdGhyb3dJZk51bGwodGhpcy4jY2FsbGJhY2spKHsgW2lkXTogc3RhdGUgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLiNzdG9yZXNbaWRdID0geyBkZXN0cm95V2F0Y2hlcjogd2F0Y2hlci5kZXN0cm95LCBzdG9yZSB9O1xuICB9XG5cbiAgbm90aWZ5UmVuYW1lZFN0b3JlKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy4jc3RvcmVzKS5pbmNsdWRlcyhpZCkgJiYgdGhpcy4jY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuI2NhbGxiYWNrKHsgW2lkXTogZ2V0U3RhdGUodGhpcy4jc3RvcmVzW2lkXS5zdG9yZSkgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=","import { createDevtoolsFeature } from '../internal/devtools-feature';\nimport { GlitchTrackerService } from '../internal/glitch-tracker.service';\n/**\n * It tracks all state changes of the State, including intermediary updates\n * that are typically suppressed by Angular's glitch-free mechanism.\n *\n * This feature is especially useful for debugging.\n *\n * Example:\n *\n * ```typescript\n * const Store = signalStore(\n * { providedIn: 'root' },\n * withState({ count: 0 }),\n * withDevtools('counter', withGlitchTracking()),\n * withMethods((store) => ({\n * increase: () =>\n * patchState(store, (value) => ({ count: value.count + 1 })),\n * }))\n * );\n *\n * // would show up in the DevTools with value 0\n * const store = inject(Store);\n *\n * store.increase(); // would show up in the DevTools with value 1\n * store.increase(); // would show up in the DevTools with value 2\n * store.increase(); // would show up in the DevTools with value 3\n * ```\n *\n * Without `withGlitchTracking`, the DevTools would only show the final value of 3.\n */\nexport function withGlitchTracking() {\n return createDevtoolsFeature({ tracker: GlitchTrackerService });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1nbGl0Y2gtdHJhY2tpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL2RldnRvb2xzL2ZlYXR1cmVzL3dpdGgtZ2xpdGNoLXRyYWNraW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRTFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEJHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQjtJQUNoQyxPQUFPLHFCQUFxQixDQUFDLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLENBQUMsQ0FBQztBQUNsRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlRGV2dG9vbHNGZWF0dXJlIH0gZnJvbSAnLi4vaW50ZXJuYWwvZGV2dG9vbHMtZmVhdHVyZSc7XG5pbXBvcnQgeyBHbGl0Y2hUcmFja2VyU2VydmljZSB9IGZyb20gJy4uL2ludGVybmFsL2dsaXRjaC10cmFja2VyLnNlcnZpY2UnO1xuXG4vKipcbiAqIEl0IHRyYWNrcyBhbGwgc3RhdGUgY2hhbmdlcyBvZiB0aGUgU3RhdGUsIGluY2x1ZGluZyBpbnRlcm1lZGlhcnkgdXBkYXRlc1xuICogdGhhdCBhcmUgdHlwaWNhbGx5IHN1cHByZXNzZWQgYnkgQW5ndWxhcidzIGdsaXRjaC1mcmVlIG1lY2hhbmlzbS5cbiAqXG4gKiBUaGlzIGZlYXR1cmUgaXMgZXNwZWNpYWxseSB1c2VmdWwgZm9yIGRlYnVnZ2luZy5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IFN0b3JlID0gc2lnbmFsU3RvcmUoXG4gKiAgIHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0sXG4gKiAgIHdpdGhTdGF0ZSh7IGNvdW50OiAwIH0pLFxuICogICB3aXRoRGV2dG9vbHMoJ2NvdW50ZXInLCB3aXRoR2xpdGNoVHJhY2tpbmcoKSksXG4gKiAgIHdpdGhNZXRob2RzKChzdG9yZSkgPT4gKHtcbiAqICAgICBpbmNyZWFzZTogKCkgPT5cbiAqICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsICh2YWx1ZSkgPT4gKHsgY291bnQ6IHZhbHVlLmNvdW50ICsgMSB9KSksXG4gKiAgIH0pKVxuICogKTtcbiAqXG4gKiAvLyB3b3VsZCBzaG93IHVwIGluIHRoZSBEZXZUb29scyB3aXRoIHZhbHVlIDBcbiAqIGNvbnN0IHN0b3JlID0gaW5qZWN0KFN0b3JlKTtcbiAqXG4gKiBzdG9yZS5pbmNyZWFzZSgpOyAvLyB3b3VsZCBzaG93IHVwIGluIHRoZSBEZXZUb29scyB3aXRoIHZhbHVlIDFcbiAqIHN0b3JlLmluY3JlYXNlKCk7IC8vIHdvdWxkIHNob3cgdXAgaW4gdGhlIERldlRvb2xzIHdpdGggdmFsdWUgMlxuICogc3RvcmUuaW5jcmVhc2UoKTsgLy8gd291bGQgc2hvdyB1cCBpbiB0aGUgRGV2VG9vbHMgd2l0aCB2YWx1ZSAzXG4gKiBgYGBcbiAqXG4gKiBXaXRob3V0IGB3aXRoR2xpdGNoVHJhY2tpbmdgLCB0aGUgRGV2VG9vbHMgd291bGQgb25seSBzaG93IHRoZSBmaW5hbCB2YWx1ZSBvZiAzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aEdsaXRjaFRyYWNraW5nKCkge1xuICByZXR1cm4gY3JlYXRlRGV2dG9vbHNGZWF0dXJlKHsgdHJhY2tlcjogR2xpdGNoVHJhY2tlclNlcnZpY2UgfSk7XG59XG4iXX0=","import { createDevtoolsFeature } from '../internal/devtools-feature';\n/**\n * Allows you to define a function to map the state.\n *\n * It is needed for huge states, that slows down the Devtools and where\n * you don't need to see the whole state or other reasons.\n *\n * Example:\n *\n * ```typescript\n * const initialState = {\n * id: 1,\n * email: 'john.list@host.com',\n * name: 'John List',\n * enteredPassword: ''\n * }\n *\n * const Store = signalStore(\n * withState(initialState),\n * withDevtools(\n * 'user',\n * withMapper(state => ({...state, enteredPassword: '***' }))\n * )\n * )\n * ```\n *\n * @param map function which maps the state\n */\nexport function withMapper(map) {\n return createDevtoolsFeature({ map: map });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1tYXBwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL2RldnRvb2xzL2ZlYXR1cmVzL3dpdGgtbWFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBVSxNQUFNLDhCQUE4QixDQUFDO0FBRTdFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQ3hCLEdBQThDO0lBRTlDLE9BQU8scUJBQXFCLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBYSxFQUFFLENBQUMsQ0FBQztBQUN2RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlRGV2dG9vbHNGZWF0dXJlLCBNYXBwZXIgfSBmcm9tICcuLi9pbnRlcm5hbC9kZXZ0b29scy1mZWF0dXJlJztcblxuLyoqXG4gKiBBbGxvd3MgeW91IHRvIGRlZmluZSBhIGZ1bmN0aW9uIHRvIG1hcCB0aGUgc3RhdGUuXG4gKlxuICogSXQgaXMgbmVlZGVkIGZvciBodWdlIHN0YXRlcywgdGhhdCBzbG93cyBkb3duIHRoZSBEZXZ0b29scyBhbmQgd2hlcmVcbiAqIHlvdSBkb24ndCBuZWVkIHRvIHNlZSB0aGUgd2hvbGUgc3RhdGUgb3Igb3RoZXIgcmVhc29ucy5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAqICAgaWQ6IDEsXG4gKiAgIGVtYWlsOiAnam9obi5saXN0QGhvc3QuY29tJyxcbiAqICAgbmFtZTogJ0pvaG4gTGlzdCcsXG4gKiAgIGVudGVyZWRQYXNzd29yZDogJydcbiAqIH1cbiAqXG4gKiBjb25zdCBTdG9yZSA9IHNpZ25hbFN0b3JlKFxuICogICB3aXRoU3RhdGUoaW5pdGlhbFN0YXRlKSxcbiAqICAgd2l0aERldnRvb2xzKFxuICogICAgICd1c2VyJyxcbiAqICAgICB3aXRoTWFwcGVyKHN0YXRlID0+ICh7Li4uc3RhdGUsIGVudGVyZWRQYXNzd29yZDogJyoqKicgfSkpXG4gKiAgIClcbiAqIClcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBtYXAgZnVuY3Rpb24gd2hpY2ggbWFwcyB0aGUgc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhNYXBwZXI8U3RhdGUgZXh0ZW5kcyBvYmplY3Q+KFxuICBtYXA6IChzdGF0ZTogU3RhdGUpID0+IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKSB7XG4gIHJldHVybiBjcmVhdGVEZXZ0b29sc0ZlYXR1cmUoeyBtYXA6IG1hcCBhcyBNYXBwZXIgfSk7XG59XG4iXX0=","import { InjectionToken } from '@angular/core';\n/**\n * Provides the configuration options for connecting to the Redux DevTools Extension.\n */\nexport function provideDevtoolsConfig(config) {\n return {\n provide: REDUX_DEVTOOLS_CONFIG,\n useValue: config,\n };\n}\n/**\n * Injection token for the configuration options for connecting to the Redux DevTools Extension.\n */\nexport const REDUX_DEVTOOLS_CONFIG = new InjectionToken('ReduxDevtoolsConfig');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1kZXZ0b29scy1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL2RldnRvb2xzL3Byb3ZpZGUtZGV2dG9vbHMtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRTlEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxNQUEyQjtJQUUzQixPQUFPO1FBQ0wsT0FBTyxFQUFFLHFCQUFxQjtRQUM5QixRQUFRLEVBQUUsTUFBTTtLQUNqQixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxjQUFjLENBQ3JELHFCQUFxQixDQUN0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIFZhbHVlUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBjb25uZWN0aW5nIHRvIHRoZSBSZWR1eCBEZXZUb29scyBFeHRlbnNpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlRGV2dG9vbHNDb25maWcoXG4gIGNvbmZpZzogUmVkdXhEZXZ0b29sc0NvbmZpZyxcbik6IFZhbHVlUHJvdmlkZXIge1xuICByZXR1cm4ge1xuICAgIHByb3ZpZGU6IFJFRFVYX0RFVlRPT0xTX0NPTkZJRyxcbiAgICB1c2VWYWx1ZTogY29uZmlnLFxuICB9O1xufVxuXG4vKipcbiAqIEluamVjdGlvbiB0b2tlbiBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgY29ubmVjdGluZyB0byB0aGUgUmVkdXggRGV2VG9vbHMgRXh0ZW5zaW9uLlxuICovXG5leHBvcnQgY29uc3QgUkVEVVhfREVWVE9PTFNfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPFJlZHV4RGV2dG9vbHNDb25maWc+KFxuICAnUmVkdXhEZXZ0b29sc0NvbmZpZycsXG4pO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNvbm5lY3RpbmcgdG8gdGhlIFJlZHV4IERldlRvb2xzIEV4dGVuc2lvbi5cbiAqIEBleGFtcGxlXG4gKiBjb25zdCBkZXZUb29sc09wdGlvbnM6IFJlZHV4RGV2dG9vbHNDb25maWcgPSB7XG4gKiAgIG5hbWU6ICdNeSBBcHAnLFxuICogfTtcbiAqL1xuZXhwb3J0IHR5cGUgUmVkdXhEZXZ0b29sc0NvbmZpZyA9IHtcbiAgLyoqIE9wdGlvbmFsIG5hbWUgZm9yIHRoZSBkZXZ0b29scyBpbnN0YW5jZS4gSWYgZW1wdHksIFwiTmdSeCBTaWduYWxTdG9yZVwiIHdpbGwgYmUgdXNlZC4gKi9cbiAgbmFtZT86IHN0cmluZztcbn07XG4iXX0=","import { effect, Injectable, signal } from '@angular/core';\nimport { getState } from '@ngrx/signals';\nimport * as i0 from \"@angular/core\";\nexport class DefaultTracker {\n #stores = signal({}, ...(ngDevMode ? [{ debugName: \"#stores\" }] : []));\n get stores() {\n return this.#stores();\n }\n #trackCallback;\n #trackingEffect = effect(() => {\n if (this.#trackCallback === undefined) {\n throw new Error('no callback function defined');\n }\n const stores = this.#stores();\n const fullState = Object.entries(stores).reduce((acc, [id, store]) => {\n return { ...acc, [id]: getState(store) };\n }, {});\n this.#trackCallback(fullState);\n }, ...(ngDevMode ? [{ debugName: \"#trackingEffect\" }] : []));\n track(id, store) {\n this.#stores.update((value) => ({\n ...value,\n [id]: store,\n }));\n }\n onChange(callback) {\n this.#trackCallback = callback;\n }\n removeStore(id) {\n this.#stores.update((stores) => Object.entries(stores).reduce((newStore, [storeId, state]) => {\n if (storeId !== id) {\n newStore[storeId] = state;\n }\n return newStore;\n }, {}));\n }\n notifyRenamedStore(id) {\n if (this.#stores()[id]) {\n this.#stores.update((stores) => {\n return { ...stores };\n });\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: DefaultTracker, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: DefaultTracker, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: DefaultTracker, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC10cmFja2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRvb2xraXQvc3JjL2xpYi9kZXZ0b29scy9pbnRlcm5hbC9kZWZhdWx0LXRyYWNrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBRSxRQUFRLEVBQWUsTUFBTSxlQUFlLENBQUM7O0FBSXRELE1BQU0sT0FBTyxjQUFjO0lBQ2hCLE9BQU8sR0FBRyxNQUFNLENBQWdCLEVBQUUsbURBQUMsQ0FBQztJQUU3QyxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsY0FBYyxDQUErRDtJQUU3RSxlQUFlLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRTtRQUM1QixJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFOUIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQzdDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDbkIsT0FBTyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDM0MsQ0FBQyxFQUNELEVBQTRCLENBQzdCLENBQUM7UUFFRixJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2pDLENBQUMsMkRBQUMsQ0FBQztJQUVILEtBQUssQ0FBQyxFQUFVLEVBQUUsS0FBMEI7UUFDMUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDOUIsR0FBRyxLQUFLO1lBQ1IsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLO1NBQ1osQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsUUFBUSxDQUFDLFFBQXdEO1FBQy9ELElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxXQUFXLENBQUMsRUFBVTtRQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQzdCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDM0QsSUFBSSxPQUFPLEtBQUssRUFBRSxFQUFFLENBQUM7Z0JBQ25CLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDNUIsQ0FBQztZQUNELE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUMsRUFBRSxFQUFtQixDQUFDLENBQ3hCLENBQUM7SUFDSixDQUFDO0lBRUQsa0JBQWtCLENBQUMsRUFBVTtRQUMzQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQzdCLE9BQU8sRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDO1lBQ3ZCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7OEdBckRVLGNBQWM7a0hBQWQsY0FBYyxjQURELE1BQU07OzJGQUNuQixjQUFjO2tCQUQxQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVmZmVjdCwgSW5qZWN0YWJsZSwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBnZXRTdGF0ZSwgU3RhdGVTb3VyY2UgfSBmcm9tICdAbmdyeC9zaWduYWxzJztcbmltcG9ydCB7IFRyYWNrZXIsIFRyYWNrZXJTdG9yZXMgfSBmcm9tICcuL21vZGVscyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgRGVmYXVsdFRyYWNrZXIgaW1wbGVtZW50cyBUcmFja2VyIHtcbiAgcmVhZG9ubHkgI3N0b3JlcyA9IHNpZ25hbDxUcmFja2VyU3RvcmVzPih7fSk7XG5cbiAgZ2V0IHN0b3JlcygpOiBUcmFja2VyU3RvcmVzIHtcbiAgICByZXR1cm4gdGhpcy4jc3RvcmVzKCk7XG4gIH1cblxuICAjdHJhY2tDYWxsYmFjazogdW5kZWZpbmVkIHwgKChjaGFuZ2VkU3RhdGU6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4pID0+IHZvaWQpO1xuXG4gICN0cmFja2luZ0VmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHRoaXMuI3RyYWNrQ2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyBjYWxsYmFjayBmdW5jdGlvbiBkZWZpbmVkJyk7XG4gICAgfVxuICAgIGNvbnN0IHN0b3JlcyA9IHRoaXMuI3N0b3JlcygpO1xuXG4gICAgY29uc3QgZnVsbFN0YXRlID0gT2JqZWN0LmVudHJpZXMoc3RvcmVzKS5yZWR1Y2UoXG4gICAgICAoYWNjLCBbaWQsIHN0b3JlXSkgPT4ge1xuICAgICAgICByZXR1cm4geyAuLi5hY2MsIFtpZF06IGdldFN0YXRlKHN0b3JlKSB9O1xuICAgICAgfSxcbiAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsIG9iamVjdD4sXG4gICAgKTtcblxuICAgIHRoaXMuI3RyYWNrQ2FsbGJhY2soZnVsbFN0YXRlKTtcbiAgfSk7XG5cbiAgdHJhY2soaWQ6IHN0cmluZywgc3RvcmU6IFN0YXRlU291cmNlPG9iamVjdD4pOiB2b2lkIHtcbiAgICB0aGlzLiNzdG9yZXMudXBkYXRlKCh2YWx1ZSkgPT4gKHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgW2lkXTogc3RvcmUsXG4gICAgfSkpO1xuICB9XG5cbiAgb25DaGFuZ2UoY2FsbGJhY2s6IChjaGFuZ2VkU3RhdGU6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4pID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLiN0cmFja0NhbGxiYWNrID0gY2FsbGJhY2s7XG4gIH1cblxuICByZW1vdmVTdG9yZShpZDogc3RyaW5nKSB7XG4gICAgdGhpcy4jc3RvcmVzLnVwZGF0ZSgoc3RvcmVzKSA9PlxuICAgICAgT2JqZWN0LmVudHJpZXMoc3RvcmVzKS5yZWR1Y2UoKG5ld1N0b3JlLCBbc3RvcmVJZCwgc3RhdGVdKSA9PiB7XG4gICAgICAgIGlmIChzdG9yZUlkICE9PSBpZCkge1xuICAgICAgICAgIG5ld1N0b3JlW3N0b3JlSWRdID0gc3RhdGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld1N0b3JlO1xuICAgICAgfSwge30gYXMgVHJhY2tlclN0b3JlcyksXG4gICAgKTtcbiAgfVxuXG4gIG5vdGlmeVJlbmFtZWRTdG9yZShpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI3N0b3JlcygpW2lkXSkge1xuICAgICAgdGhpcy4jc3RvcmVzLnVwZGF0ZSgoc3RvcmVzKSA9PiB7XG4gICAgICAgIHJldHVybiB7IC4uLnN0b3JlcyB9O1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=","export const currentActionNames = new Set();\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VycmVudC1hY3Rpb24tbmFtZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL2RldnRvb2xzL2ludGVybmFsL2N1cnJlbnQtYWN0aW9uLW5hbWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksR0FBRyxFQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgY3VycmVudEFjdGlvbk5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4iXX0=","import { isPlatformBrowser } from '@angular/common';\nimport { inject, Injectable, NgZone, PLATFORM_ID, } from '@angular/core';\nimport { REDUX_DEVTOOLS_CONFIG } from '../provide-devtools-config';\nimport { currentActionNames } from './current-action-names';\nimport * as i0 from \"@angular/core\";\nconst dummyConnection = {\n send: () => void true,\n};\n/**\n * A service provided by the root injector is\n * required because the synchronization runs\n * globally.\n *\n * The SignalStore could be provided in a component.\n * If the effect starts in the injection\n * context of the SignalStore, the complete sync\n * process would shut down once the component gets\n * destroyed.\n */\nexport class DevtoolsSyncer {\n /**\n * Stores all SignalStores that are connected to the\n * DevTools along their options, names and id.\n */\n #stores = {};\n #isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n #trackers = [];\n #devtoolsConfig = {\n name: 'NgRx SignalStore',\n ...inject(REDUX_DEVTOOLS_CONFIG, { optional: true }),\n };\n /**\n * Maintains the current states of all stores to avoid conflicts\n * between glitch-free and glitched trackers when used simultaneously.\n *\n * The challenge lies in ensuring that glitched trackers do not\n * interfere with the synchronization process of glitch-free trackers.\n * Specifically, glitched trackers could cause the synchronization to\n * read the current state of stores managed by glitch-free trackers.\n *\n * Therefore, the synchronization process doesn't read the state from\n * each store, but relies on #currentState.\n *\n * Please note, that here the key is the name and not the id.\n */\n #currentState = {};\n #currentId = 1;\n #connection = inject(NgZone).runOutsideAngular(() => this.#isBrowser\n ? window.__REDUX_DEVTOOLS_EXTENSION__\n ? window.__REDUX_DEVTOOLS_EXTENSION__.connect(this.#devtoolsConfig)\n : dummyConnection\n : dummyConnection);\n constructor() {\n if (!this.#isBrowser) {\n return;\n }\n }\n ngOnDestroy() {\n currentActionNames.clear();\n }\n syncToDevTools(changedStatePerId) {\n const mappedChangedStatePerName = Object.entries(changedStatePerId).reduce((acc, [id, store]) => {\n const { options, name } = this.#stores[id];\n acc[name] = options.map(store);\n return acc;\n }, {});\n this.#currentState = {\n ...this.#currentState,\n ...mappedChangedStatePerName,\n };\n const names = Array.from(currentActionNames);\n const type = names.length ? names.join(', ') : 'Store Update';\n currentActionNames.clear();\n this.#connection.send({ type }, this.#currentState);\n }\n getNextId() {\n return String(this.#currentId++);\n }\n /**\n * Consumer provides the id. That is because we can only start\n * tracking the store in the init hook.\n * Unfortunately, methods for renaming having the final id\n * need to be defined already before.\n * That's why `withDevtools` requests first the id and\n * then registers itself later.\n */\n addStore(id, name, store, options) {\n let storeName = name;\n const names = Object.values(this.#stores).map((store) => store.name);\n if (names.includes(storeName)) {\n // const { options } = throwIfNull(\n // Object.values(this.#stores).find((store) => store.name === storeName)\n // );\n if (!options.indexNames) {\n throw new Error(`An instance of the store ${storeName} already exists. \\\nEnable automatic indexing via withDevTools('${storeName}', { indexNames: true }), or rename it upon instantiation.`);\n }\n }\n for (let i = 1; names.includes(storeName); i++) {\n storeName = `${name}-${i}`;\n }\n this.#stores[id] = { name: storeName, options };\n const tracker = options.tracker;\n if (!this.#trackers.includes(tracker)) {\n this.#trackers.push(tracker);\n }\n tracker.onChange((changedState) => this.syncToDevTools(changedState));\n tracker.track(id, store);\n }\n removeStore(id) {\n const name = this.#stores[id].name;\n this.#stores = Object.entries(this.#stores).reduce((newStore, [storeId, value]) => {\n if (storeId !== id) {\n newStore[storeId] = value;\n }\n return newStore;\n }, {});\n this.#currentState = Object.entries(this.#currentState).reduce((newState, [storeName, state]) => {\n if (storeName !== name) {\n newState[storeName] = state;\n }\n return newState;\n }, {});\n for (const tracker of this.#trackers) {\n tracker.removeStore(id);\n }\n }\n /**\n * Renames a store identified by its internal id. If the store has already\n * been removed (e.g. due to component destruction), this is a no-op.\n */\n renameStore(id, newName) {\n const storeEntry = this.#stores[id];\n if (!storeEntry) {\n return;\n }\n const oldName = storeEntry.name;\n if (oldName === newName) {\n return;\n }\n const otherStoreNames = Object.entries(this.#stores)\n .filter(([entryId]) => entryId !== id)\n .map(([, s]) => s.name);\n if (otherStoreNames.includes(newName)) {\n throw new Error(`NgRx Toolkit/DevTools: cannot rename from ${oldName} to ${newName}. ${newName} is already assigned to another SignalStore instance.`);\n }\n this.#stores = Object.entries(this.#stores).reduce((newStore, [entryId, value]) => {\n if (entryId === id) {\n newStore[entryId] = { ...value, name: newName };\n }\n else {\n newStore[entryId] = value;\n }\n return newStore;\n }, {});\n // we don't rename in #currentState but wait for tracker to notify\n // us with a changed state that contains that name.\n this.#currentState = Object.entries(this.#currentState).reduce((newState, [storeName, state]) => {\n if (storeName !== oldName) {\n newState[storeName] = state;\n }\n return newState;\n }, {});\n this.#trackers.forEach((tracker) => tracker.notifyRenamedStore(id));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: DevtoolsSyncer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: DevtoolsSyncer, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: DevtoolsSyncer, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2dG9vbHMtc3luY2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL2RldnRvb2xzL2ludGVybmFsL2RldnRvb2xzLXN5bmNlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFDTCxNQUFNLEVBQ04sVUFBVSxFQUNWLE1BQU0sRUFFTixXQUFXLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBSTVELE1BQU0sZUFBZSxHQUFlO0lBQ2xDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUk7Q0FDdEIsQ0FBQztBQUVGOzs7Ozs7Ozs7O0dBVUc7QUFFSCxNQUFNLE9BQU8sY0FBYztJQUN6Qjs7O09BR0c7SUFDSCxPQUFPLEdBQWtCLEVBQUUsQ0FBQztJQUNuQixVQUFVLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDcEQsU0FBUyxHQUFHLEVBQWUsQ0FBQztJQUM1QixlQUFlLEdBQUc7UUFDekIsSUFBSSxFQUFFLGtCQUFrQjtRQUN4QixHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztLQUNyRCxDQUFDO0lBRUY7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNILGFBQWEsR0FBMkIsRUFBRSxDQUFDO0lBQzNDLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFFTixXQUFXLEdBQWUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxDQUN2RSxJQUFJLENBQUMs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QUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDbEQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDNUIsQ0FBQztZQUNELE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUMsRUFDRCxFQUFtQixDQUNwQixDQUFDO1FBRUYsa0VBQWtFO1FBQ2xFLG1EQUFtRDtRQUNuRCxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FDNUQsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUMvQixJQUFJLFNBQVMsS0FBSyxPQUFPLEVBQUUsQ0FBQztnQkFDMUIsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUM5QixDQUFDO1lBQ0QsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQyxFQUNELEVBQTRCLENBQzdCLENBQUM7UUFFRixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQzs4R0E5TFUsY0FBYztrSEFBZCxjQUFjLGNBREQsTUFBTTs7MkZBQ25CLGNBQWM7a0JBRDFCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgaW5qZWN0LFxuICBJbmplY3RhYmxlLFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgUExBVEZPUk1fSUQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RhdGVTb3VyY2UgfSBmcm9tICdAbmdyeC9zaWduYWxzJztcbmltcG9ydCB7IFJFRFVYX0RFVlRPT0xTX0NPTkZJRyB9IGZyb20gJy4uL3Byb3ZpZGUtZGV2dG9vbHMtY29uZmlnJztcbmltcG9ydCB7IGN1cnJlbnRBY3Rpb25OYW1lcyB9IGZyb20gJy4vY3VycmVudC1hY3Rpb24tbmFtZXMnO1xuaW1wb3J0IHsgRGV2dG9vbHNJbm5lck9wdGlvbnMgfSBmcm9tICcuL2RldnRvb2xzLWZlYXR1cmUnO1xuaW1wb3J0IHsgQ29ubmVjdGlvbiwgU3RvcmVSZWdpc3RyeSwgVHJhY2tlciB9IGZyb20gJy4vbW9kZWxzJztcblxuY29uc3QgZHVtbXlDb25uZWN0aW9uOiBDb25uZWN0aW9uID0ge1xuICBzZW5kOiAoKSA9PiB2b2lkIHRydWUsXG59O1xuXG4vKipcbiAqIEEgc2VydmljZSBwcm92aWRlZCBieSB0aGUgcm9vdCBpbmplY3RvciBpc1xuICogcmVxdWlyZWQgYmVjYXVzZSB0aGUgc3luY2hyb25pemF0aW9uIHJ1bnNcbiAqIGdsb2JhbGx5LlxuICpcbiAqIFRoZSBTaWduYWxTdG9yZSBjb3VsZCBiZSBwcm92aWRlZCBpbiBhIGNvbXBvbmVudC5cbiAqIElmIHRoZSBlZmZlY3Qgc3RhcnRzIGluIHRoZSBpbmplY3Rpb25cbiAqIGNvbnRleHQgb2YgdGhlIFNpZ25hbFN0b3JlLCB0aGUgY29tcGxldGUgc3luY1xuICogcHJvY2VzcyB3b3VsZCBzaHV0IGRvd24gb25jZSB0aGUgY29tcG9uZW50IGdldHNcbiAqIGRlc3Ryb3llZC5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBEZXZ0b29sc1N5bmNlciBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBTdG9yZXMgYWxsIFNpZ25hbFN0b3JlcyB0aGF0IGFyZSBjb25uZWN0ZWQgdG8gdGhlXG4gICAqIERldlRvb2xzIGFsb25nIHRoZWlyIG9wdGlvbnMsIG5hbWVzIGFuZCBpZC5cbiAgICovXG4gICNzdG9yZXM6IFN0b3JlUmVnaXN0cnkgPSB7fTtcbiAgcmVhZG9ubHkgI2lzQnJvd3NlciA9IGlzUGxhdGZvcm1Ccm93c2VyKGluamVjdChQTEFURk9STV9JRCkpO1xuICByZWFkb25seSAjdHJhY2tlcnMgPSBbXSBhcyBUcmFja2VyW107XG4gIHJlYWRvbmx5ICNkZXZ0b29sc0NvbmZpZyA9IHtcbiAgICBuYW1lOiAnTmdSeCBTaWduYWxTdG9yZScsXG4gICAgLi4uaW5qZWN0KFJFRFVYX0RFVlRPT0xTX0NPTkZJRywgeyBvcHRpb25hbDogdHJ1ZSB9KSxcbiAgfTtcblxuICAvKipcbiAgICogTWFpbnRhaW5zIHRoZSBjdXJyZW50IHN0YXRlcyBvZiBhbGwgc3RvcmVzIHRvIGF2b2lkIGNvbmZsaWN0c1xuICAgKiBiZXR3ZWVuIGdsaXRjaC1mcmVlIGFuZCBnbGl0Y2hlZCB0cmFja2VycyB3aGVuIHVzZWQgc2ltdWx0YW5lb3VzbHkuXG4gICAqXG4gICAqIFRoZSBjaGFsbGVuZ2UgbGllcyBpbiBlbnN1cmluZyB0aGF0IGdsaXRjaGVkIHRyYWNrZXJzIGRvIG5vdFxuICAgKiBpbnRlcmZlcmUgd2l0aCB0aGUgc3luY2hyb25pemF0aW9uIHByb2Nlc3Mgb2YgZ2xpdGNoLWZyZWUgdHJhY2tlcnMuXG4gICAqIFNwZWNpZmljYWxseSwgZ2xpdGNoZWQgdHJhY2tlcnMgY291bGQgY2F1c2UgdGhlIHN5bmNocm9uaXphdGlvbiB0b1xuICAgKiByZWFkIHRoZSBjdXJyZW50IHN0YXRlIG9mIHN0b3JlcyBtYW5hZ2VkIGJ5IGdsaXRjaC1mcmVlIHRyYWNrZXJzLlxuICAgKlxuICAgKiBUaGVyZWZvcmUsIHRoZSBzeW5jaHJvbml6YXRpb24gcHJvY2VzcyBkb2Vzbid0IHJlYWQgdGhlIHN0YXRlIGZyb21cbiAgICogZWFjaCBzdG9yZSwgYnV0IHJlbGllcyBvbiAjY3VycmVudFN0YXRlLlxuICAgKlxuICAgKiBQbGVhc2Ugbm90ZSwgdGhhdCBoZXJlIHRoZSBrZXkgaXMgdGhlIG5hbWUgYW5kIG5vdCB0aGUgaWQuXG4gICAqL1xuICAjY3VycmVudFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+ID0ge307XG4gICNjdXJyZW50SWQgPSAxO1xuXG4gIHJlYWRvbmx5ICNjb25uZWN0aW9uOiBDb25uZWN0aW9uID0gaW5qZWN0KE5nWm9uZSkucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT5cbiAgICB0aGlzLiNpc0Jyb3dzZXJcbiAgICAgID8gd2luZG93Ll9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX19cbiAgICAgICAgPyB3aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXy5jb25uZWN0KHRoaXMuI2RldnRvb2xzQ29uZmlnKVxuICAgICAgICA6IGR1bW15Q29ubmVjdGlvblxuICAgICAgOiBkdW1teUNvbm5lY3Rpb24sXG4gICk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKCF0aGlzLiNpc0Jyb3dzZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBjdXJyZW50QWN0aW9uTmFtZXMuY2xlYXIoKTtcbiAgfVxuXG4gIHN5bmNUb0RldlRvb2xzKGNoYW5nZWRTdGF0ZVBlcklkOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+KSB7XG4gICAgY29uc3QgbWFwcGVkQ2hhbmdlZFN0YXRlUGVyTmFtZSA9IE9iamVjdC5lbnRyaWVzKGNoYW5nZWRTdGF0ZVBlcklkKS5yZWR1Y2UoXG4gICAgICAoYWNjLCBbaWQsIHN0b3JlXSkgPT4ge1xuICAgICAgICBjb25zdCB7IG9wdGlvbnMsIG5hbWUgfSA9IHRoaXMuI3N0b3Jlc1tpZF07XG4gICAgICAgIGFjY1tuYW1lXSA9IG9wdGlvbnMubWFwKHN0b3JlKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sXG4gICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+LFxuICAgICk7XG4gICAgdGhpcy4jY3VycmVudFN0YXRlID0ge1xuICAgICAgLi4udGhpcy4jY3VycmVudFN0YXRlLFxuICAgICAgLi4ubWFwcGVkQ2hhbmdlZFN0YXRlUGVyTmFtZSxcbiAgICB9O1xuXG4gICAgY29uc3QgbmFtZXMgPSBBcnJheS5mcm9tKGN1cnJlbnRBY3Rpb25OYW1lcyk7XG4gICAgY29uc3QgdHlwZSA9IG5hbWVzLmxlbmd0aCA/IG5hbWVzLmpvaW4oJywgJykgOiAnU3RvcmUgVXBkYXRlJztcbiAgICBjdXJyZW50QWN0aW9uTmFtZXMuY2xlYXIoKTtcblxuICAgIHRoaXMuI2Nvbm5lY3Rpb24uc2VuZCh7IHR5cGUgfSwgdGhpcy4jY3VycmVudFN0YXRlKTtcbiAgfVxuXG4gIGdldE5leHRJZCgpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuI2N1cnJlbnRJZCsrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdW1lciBwcm92aWRlcyB0aGUgaWQuIFRoYXQgaXMgYmVjYXVzZSB3ZSBjYW4gb25seSBzdGFydFxuICAgKiB0cmFja2luZyB0aGUgc3RvcmUgaW4gdGhlIGluaXQgaG9vay5cbiAgICogVW5mb3J0dW5hdGVseSwgbWV0aG9kcyBmb3IgcmVuYW1pbmcgaGF2aW5nIHRoZSBmaW5hbCBpZFxuICAgKiBuZWVkIHRvIGJlIGRlZmluZWQgYWxyZWFkeSBiZWZvcmUuXG4gICAqIFRoYXQncyB3aHkgYHdpdGhEZXZ0b29sc2AgcmVxdWVzdHMgZmlyc3QgdGhlIGlkIGFuZFxuICAgKiB0aGVuIHJlZ2lzdGVycyBpdHNlbGYgbGF0ZXIuXG4gICAqL1xuICBhZGRTdG9yZShcbiAgICBpZDogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBzdG9yZTogU3RhdGVTb3VyY2U8b2JqZWN0PixcbiAgICBvcHRpb25zOiBEZXZ0b29sc0lubmVyT3B0aW9ucyxcbiAgKSB7XG4gICAgbGV0IHN0b3JlTmFtZSA9IG5hbWU7XG4gICAgY29uc3QgbmFtZXMgPSBPYmplY3QudmFsdWVzKHRoaXMuI3N0b3JlcykubWFwKChzdG9yZSkgPT4gc3RvcmUubmFtZSk7XG5cbiAgICBpZiAobmFtZXMuaW5jbHVkZXMoc3RvcmVOYW1lKSkge1xuICAgICAgLy8gY29uc3QgeyBvcHRpb25zIH0gPSB0aHJvd0lmTnVsbChcbiAgICAgIC8vICAgT2JqZWN0LnZhbHVlcyh0aGlzLiNzdG9yZXMpLmZpbmQoKHN0b3JlKSA9PiBzdG9yZS5uYW1lID09PSBzdG9yZU5hbWUpXG4gICAgICAvLyApO1xuICAgICAgaWYgKCFvcHRpb25zLmluZGV4TmFtZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBbiBpbnN0YW5jZSBvZiB0aGUgc3RvcmUgJHtzdG9yZU5hbWV9IGFscmVhZHkgZXhpc3RzLiBcXFxuRW5hYmxlIGF1dG9tYXRpYyBpbmRleGluZyB2aWEgd2l0aERldlRvb2xzKCcke3N0b3JlTmFtZX0nLCB7IGluZGV4TmFtZXM6IHRydWUgfSksIG9yIHJlbmFtZSBpdCB1cG9uIGluc3RhbnRpYXRpb24uYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDE7IG5hbWVzLmluY2x1ZGVzKHN0b3JlTmFtZSk7IGkrKykge1xuICAgICAgc3RvcmVOYW1lID0gYCR7bmFtZX0tJHtpfWA7XG4gICAgfVxuICAgIHRoaXMuI3N0b3Jlc1tpZF0gPSB7IG5hbWU6IHN0b3JlTmFtZSwgb3B0aW9ucyB9O1xuXG4gICAgY29uc3QgdHJhY2tlciA9IG9wdGlvbnMudHJhY2tlcjtcbiAgICBpZiAoIXRoaXMuI3RyYWNrZXJzLmluY2x1ZGVzKHRyYWNrZXIpKSB7XG4gICAgICB0aGlzLiN0cmFja2Vycy5wdXNoKHRyYWNrZXIpO1xuICAgIH1cblxuICAgIHRyYWNrZXIub25DaGFuZ2UoKGNoYW5nZWRTdGF0ZSkgPT4gdGhpcy5zeW5jVG9EZXZUb29scyhjaGFuZ2VkU3RhdGUpKTtcbiAgICB0cmFja2VyLnRyYWNrKGlkLCBzdG9yZSk7XG4gIH1cblxuICByZW1vdmVTdG9yZShpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgbmFtZSA9IHRoaXMuI3N0b3Jlc1tpZF0ubmFtZTtcbiAgICB0aGlzLiNzdG9yZXMgPSBPYmplY3QuZW50cmllcyh0aGlzLiNzdG9yZXMpLnJlZHVjZShcbiAgICAgIChuZXdTdG9yZSwgW3N0b3JlSWQsIHZhbHVlXSkgPT4ge1xuICAgICAgICBpZiAoc3RvcmVJZCAhPT0gaWQpIHtcbiAgICAgICAgICBuZXdTdG9yZVtzdG9yZUlkXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdTdG9yZTtcbiAgICAgIH0sXG4gICAgICB7fSBhcyBTdG9yZVJlZ2lzdHJ5LFxuICAgICk7XG5cbiAgICB0aGlzLiNjdXJyZW50U3RhdGUgPSBPYmplY3QuZW50cmllcyh0aGlzLiNjdXJyZW50U3RhdGUpLnJlZHVjZShcbiAgICAgIChuZXdTdGF0ZSwgW3N0b3JlTmFtZSwgc3RhdGVdKSA9PiB7XG4gICAgICAgIGlmIChzdG9yZU5hbWUgIT09IG5hbWUpIHtcbiAgICAgICAgICBuZXdTdGF0ZVtzdG9yZU5hbWVdID0gc3RhdGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld1N0YXRlO1xuICAgICAgfSxcbiAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsIG9iamVjdD4sXG4gICAgKTtcblxuICAgIGZvciAoY29uc3QgdHJhY2tlciBvZiB0aGlzLiN0cmFja2Vycykge1xuICAgICAgdHJhY2tlci5yZW1vdmVTdG9yZShpZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbmFtZXMgYSBzdG9yZSBpZGVudGlmaWVkIGJ5IGl0cyBpbnRlcm5hbCBpZC4gSWYgdGhlIHN0b3JlIGhhcyBhbHJlYWR5XG4gICAqIGJlZW4gcmVtb3ZlZCAoZS5nLiBkdWUgdG8gY29tcG9uZW50IGRlc3RydWN0aW9uKSwgdGhpcyBpcyBhIG5vLW9wLlxuICAgKi9cbiAgcmVuYW1lU3RvcmUoaWQ6IHN0cmluZywgbmV3TmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc3RvcmVFbnRyeSA9IHRoaXMuI3N0b3Jlc1tpZF07XG4gICAgaWYgKCFzdG9yZUVudHJ5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG9sZE5hbWUgPSBzdG9yZUVudHJ5Lm5hbWU7XG5cbiAgICBpZiAob2xkTmFtZSA9PT0gbmV3TmFtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG90aGVyU3RvcmVOYW1lcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuI3N0b3JlcylcbiAgICAgIC5maWx0ZXIoKFtlbnRyeUlkXSkgPT4gZW50cnlJZCAhPT0gaWQpXG4gICAgICAubWFwKChbLCBzXSkgPT4gcy5uYW1lKTtcbiAgICBpZiAob3RoZXJTdG9yZU5hbWVzLmluY2x1ZGVzKG5ld05hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBOZ1J4IFRvb2xraXQvRGV2VG9vbHM6IGNhbm5vdCByZW5hbWUgZnJvbSAke29sZE5hbWV9IHRvICR7bmV3TmFtZX0uICR7bmV3TmFtZX0gaXMgYWxyZWFkeSBhc3NpZ25lZCB0byBhbm90aGVyIFNpZ25hbFN0b3JlIGluc3RhbmNlLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuI3N0b3JlcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuI3N0b3JlcykucmVkdWNlKFxuICAgICAgKG5ld1N0b3JlLCBbZW50cnlJZCwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGlmIChlbnRyeUlkID09PSBpZCkge1xuICAgICAgICAgIG5ld1N0b3JlW2VudHJ5SWRdID0geyAuLi52YWx1ZSwgbmFtZTogbmV3TmFtZSB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld1N0b3JlW2VudHJ5SWRdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld1N0b3JlO1xuICAgICAgfSxcbiAgICAgIHt9IGFzIFN0b3JlUmVnaXN0cnksXG4gICAgKTtcblxuICAgIC8vIHdlIGRvbid0IHJlbmFtZSBpbiAjY3VycmVudFN0YXRlIGJ1dCB3YWl0IGZvciB0cmFja2VyIHRvIG5vdGlmeVxuICAgIC8vIHVzIHdpdGggYSBjaGFuZ2VkIHN0YXRlIHRoYXQgY29udGFpbnMgdGhhdCBuYW1lLlxuICAgIHRoaXMuI2N1cnJlbnRTdGF0ZSA9IE9iamVjdC5lbnRyaWVzKHRoaXMuI2N1cnJlbnRTdGF0ZSkucmVkdWNlKFxuICAgICAgKG5ld1N0YXRlLCBbc3RvcmVOYW1lLCBzdGF0ZV0pID0+IHtcbiAgICAgICAgaWYgKHN0b3JlTmFtZSAhPT0gb2xkTmFtZSkge1xuICAgICAgICAgIG5ld1N0YXRlW3N0b3JlTmFtZV0gPSBzdGF0ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3U3RhdGU7XG4gICAgICB9LFxuICAgICAge30gYXMgUmVjb3JkPHN0cmluZywgb2JqZWN0PixcbiAgICApO1xuXG4gICAgdGhpcy4jdHJhY2tlcnMuZm9yRWFjaCgodHJhY2tlcikgPT4gdHJhY2tlci5ub3RpZnlSZW5hbWVkU3RvcmUoaWQpKTtcbiAgfVxufVxuIl19","import { inject, InjectionToken } from '@angular/core';\nimport { signalStoreFeature, withHooks, withMethods, } from '@ngrx/signals';\nimport { DefaultTracker } from './internal/default-tracker';\nimport { DevtoolsSyncer } from './internal/devtools-syncer.service';\nexport const renameDevtoolsMethodName = '___renameDevtoolsName';\nexport const uniqueDevtoolsId = '___uniqueDevtoolsId';\nconst EXISTING_NAMES = new InjectionToken('Array contain existing names for the signal stores', { factory: () => [], providedIn: 'root' });\n/**\n * Adds this store as a feature state to the Redux DevTools.\n *\n * By default, the action name is 'Store Update'. You can\n * change that via the {@link updateState} method, which has as second\n * parameter the action name.\n *\n * The standalone function {@link renameDevtoolsName} can rename\n * the store name.\n *\n * @param name name of the store as it should appear in the DevTools\n * @param features features to extend or modify the behavior of the Devtools\n */\nexport function withDevtools(name, ...features) {\n return signalStoreFeature(withMethods(() => {\n const syncer = inject(DevtoolsSyncer);\n const id = syncer.getNextId();\n // TODO: use withProps and symbols\n return {\n [renameDevtoolsMethodName]: (newName) => {\n syncer.renameStore(id, newName);\n },\n [uniqueDevtoolsId]: () => id,\n };\n }), withHooks((store) => {\n const syncer = inject(DevtoolsSyncer);\n const id = String(store[uniqueDevtoolsId]());\n return {\n onInit() {\n const id = String(store[uniqueDevtoolsId]());\n const finalOptions = {\n indexNames: !features.some((f) => f.indexNames === false),\n map: features.find((f) => f.map)?.map ?? ((state) => state),\n tracker: inject(features.find((f) => f.tracker)?.tracker || DefaultTracker),\n };\n syncer.addStore(id, name, store, finalOptions);\n },\n onDestroy() {\n syncer.removeStore(id);\n },\n };\n }));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kZXZ0b29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10b29sa2l0L3NyYy9saWIvZGV2dG9vbHMvd2l0aC1kZXZ0b29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBR0wsa0JBQWtCLEVBQ2xCLFNBQVMsRUFDVCxXQUFXLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBSzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQVlwRSxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyx1QkFBdUIsQ0FBQztBQUNoRSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxxQkFBcUIsQ0FBQztBQUV0RCxNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FDdkMsb0RBQW9ELEVBQ3BELEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQWMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLENBQ3RELENBQUM7QUFFRjs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLElBQVksRUFBRSxHQUFHLFFBQTJCO0lBQ3ZFLE9BQU8sa0JBQWtCLENBQ3ZCLFdBQVcsQ0FBQyxHQUFHLEVBQUU7UUFDZixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFdEMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRTlCLGtDQUFrQztRQUNsQyxPQUFPO1lBQ0wsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUMsT0FBZSxFQUFFLEVBQUU7Z0JBQzlDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2xDLENBQUM7WUFDRCxDQUFDLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtTQUNxQixDQUFDO0lBQ3RELENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ2xCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0QyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLE9BQU87WUFDTCxNQUFNO2dCQUNKLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzdDLE1BQU0sWUFBWSxHQUF5QjtvQkFDekMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxLQUFLLENBQUM7b0JBQ3pELEdBQUcsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQztvQkFDM0QsT0FBTyxFQUFFLE1BQU0sQ0FDYixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsT0FBTyxJQUFJLGNBQWMsQ0FDM0Q7aUJBQ0YsQ0FBQztnQkFFRixNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ2pELENBQUM7WUFDRCxTQUFTO2dCQUNQLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekIsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDLENBQUMsQ0FDMkQsQ0FBQztBQUNsRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRW1wdHlGZWF0dXJlUmVzdWx0LFxuICBTaWduYWxTdG9yZUZlYXR1cmUsXG4gIHNpZ25hbFN0b3JlRmVhdHVyZSxcbiAgd2l0aEhvb2tzLFxuICB3aXRoTWV0aG9kcyxcbn0gZnJvbSAnQG5ncngvc2lnbmFscyc7XG5pbXBvcnQgeyBEZWZhdWx0VHJhY2tlciB9IGZyb20gJy4vaW50ZXJuYWwvZGVmYXVsdC10cmFja2VyJztcbmltcG9ydCB7XG4gIERldnRvb2xzRmVhdHVyZSBhcyBEZXZ0b29sc0ZlYXR1cmVJbnRlcm5hbCxcbiAgRGV2dG9vbHNJbm5lck9wdGlvbnMsXG59IGZyb20gJy4vaW50ZXJuYWwvZGV2dG9vbHMtZmVhdHVyZSc7XG5pbXBvcnQgeyBEZXZ0b29sc1N5bmNlciB9IGZyb20gJy4vaW50ZXJuYWwvZGV2dG9vbHMtc3luY2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVkdXhEZXZ0b29sc0V4dGVuc2lvbiB9IGZyb20gJy4vaW50ZXJuYWwvbW9kZWxzJztcblxuLy8gVXNlcnMgcmVxdWVzdGVkIHRoYXQgd2UgZXhwb3J0IHRoaXMgdHlwZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXItYXJjaGl0ZWN0cy9uZ3J4LXRvb2xraXQvaXNzdWVzLzE3OFxuZXhwb3J0IHR5cGUgRGV2dG9vbHNGZWF0dXJlID0gRGV2dG9vbHNGZWF0dXJlSW50ZXJuYWw7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXzogUmVkdXhEZXZ0b29sc0V4dGVuc2lvbiB8IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgcmVuYW1lRGV2dG9vbHNNZXRob2ROYW1lID0gJ19fX3JlbmFtZURldnRvb2xzTmFtZSc7XG5leHBvcnQgY29uc3QgdW5pcXVlRGV2dG9vbHNJZCA9ICdfX191bmlxdWVEZXZ0b29sc0lkJztcblxuY29uc3QgRVhJU1RJTkdfTkFNRVMgPSBuZXcgSW5qZWN0aW9uVG9rZW4oXG4gICdBcnJheSBjb250YWluIGV4aXN0aW5nIG5hbWVzIGZvciB0aGUgc2lnbmFsIHN0b3JlcycsXG4gIHsgZmFjdG9yeTogKCkgPT4gW10gYXMgc3RyaW5nW10sIHByb3ZpZGVkSW46ICdyb290JyB9LFxuKTtcblxuLyoqXG4gKiBBZGRzIHRoaXMgc3RvcmUgYXMgYSBmZWF0dXJlIHN0YXRlIHRvIHRoZSBSZWR1eCBEZXZUb29scy5cbiAqXG4gKiBCeSBkZWZhdWx0LCB0aGUgYWN0aW9uIG5hbWUgaXMgJ1N0b3JlIFVwZGF0ZScuIFlvdSBjYW5cbiAqIGNoYW5nZSB0aGF0IHZpYSB0aGUge0BsaW5rIHVwZGF0ZVN0YXRlfSBtZXRob2QsIHdoaWNoIGhhcyBhcyBzZWNvbmRcbiAqIHBhcmFtZXRlciB0aGUgYWN0aW9uIG5hbWUuXG4gKlxuICogVGhlIHN0YW5kYWxvbmUgZnVuY3Rpb24ge0BsaW5rIHJlbmFtZURldnRvb2xzTmFtZX0gY2FuIHJlbmFtZVxuICogdGhlIHN0b3JlIG5hbWUuXG4gKlxuICogQHBhcmFtIG5hbWUgbmFtZSBvZiB0aGUgc3RvcmUgYXMgaXQgc2hvdWxkIGFwcGVhciBpbiB0aGUgRGV2VG9vbHNcbiAqIEBwYXJhbSBmZWF0dXJlcyBmZWF0dXJlcyB0byBleHRlbmQgb3IgbW9kaWZ5IHRoZSBiZWhhdmlvciBvZiB0aGUgRGV2dG9vbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhEZXZ0b29scyhuYW1lOiBzdHJpbmcsIC4uLmZlYXR1cmVzOiBEZXZ0b29sc0ZlYXR1cmVbXSkge1xuICByZXR1cm4gc2lnbmFsU3RvcmVGZWF0dXJlKFxuICAgIHdpdGhNZXRob2RzKCgpID0+IHtcbiAgICAgIGNvbnN0IHN5bmNlciA9IGluamVjdChEZXZ0b29sc1N5bmNlcik7XG5cbiAgICAgIGNvbnN0IGlkID0gc3luY2VyLmdldE5leHRJZCgpO1xuXG4gICAgICAvLyBUT0RPOiB1c2Ugd2l0aFByb3BzIGFuZCBzeW1ib2xzXG4gICAgICByZXR1cm4ge1xuICAgICAgICBbcmVuYW1lRGV2dG9vbHNNZXRob2ROYW1lXTogKG5ld05hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIHN5bmNlci5yZW5hbWVTdG9yZShpZCwgbmV3TmFtZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFt1bmlxdWVEZXZ0b29sc0lkXTogKCkgPT4gaWQsXG4gICAgICB9IGFzIFJlY29yZDxzdHJpbmcsIChuZXdOYW1lPzogdW5rbm93bikgPT4gdW5rbm93bj47XG4gICAgfSksXG4gICAgd2l0aEhvb2tzKChzdG9yZSkgPT4ge1xuICAgICAgY29uc3Qgc3luY2VyID0gaW5qZWN0KERldnRvb2xzU3luY2VyKTtcbiAgICAgIGNvbnN0IGlkID0gU3RyaW5nKHN0b3JlW3VuaXF1ZURldnRvb2xzSWRdKCkpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb25Jbml0KCkge1xuICAgICAgICAgIGNvbnN0IGlkID0gU3RyaW5nKHN0b3JlW3VuaXF1ZURldnRvb2xzSWRdKCkpO1xuICAgICAgICAgIGNvbnN0IGZpbmFsT3B0aW9uczogRGV2dG9vbHNJbm5lck9wdGlvbnMgPSB7XG4gICAgICAgICAgICBpbmRleE5hbWVzOiAhZmVhdHVyZXMuc29tZSgoZikgPT4gZi5pbmRleE5hbWVzID09PSBmYWxzZSksXG4gICAgICAgICAgICBtYXA6IGZlYXR1cmVzLmZpbmQoKGYpID0+IGYubWFwKT8ubWFwID8/ICgoc3RhdGUpID0+IHN0YXRlKSxcbiAgICAgICAgICAgIHRyYWNrZXI6IGluamVjdChcbiAgICAgICAgICAgICAgZmVhdHVyZXMuZmluZCgoZikgPT4gZi50cmFja2VyKT8udHJhY2tlciB8fCBEZWZhdWx0VHJhY2tlcixcbiAgICAgICAgICAgICksXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHN5bmNlci5hZGRTdG9yZShpZCwgbmFtZSwgc3RvcmUsIGZpbmFsT3B0aW9ucyk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uRGVzdHJveSgpIHtcbiAgICAgICAgICBzeW5jZXIucmVtb3ZlU3RvcmUoaWQpO1xuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9KSxcbiAgKSBhcyBTaWduYWxTdG9yZUZlYXR1cmU8RW1wdHlGZWF0dXJlUmVzdWx0LCBFbXB0eUZlYXR1cmVSZXN1bHQ+O1xufVxuIl19","import { renameDevtoolsMethodName } from './with-devtools';\n/**\n * Renames the name of a store how it appears in the Devtools.\n * @param store instance of the SignalStore\n * @param newName new name for the Devtools\n */\nexport function renameDevtoolsName(store, newName) {\n const renameMethod = store[renameDevtoolsMethodName];\n if (!renameMethod) {\n throw new Error(\"Devtools extensions haven't been added to this store.\");\n }\n renameMethod(newName);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuYW1lLWRldnRvb2xzLW5hbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL2RldnRvb2xzL3JlbmFtZS1kZXZ0b29scy1uYW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLEtBQXlCLEVBQ3pCLE9BQWU7SUFFZixNQUFNLFlBQVksR0FBSSxLQUFtRCxDQUN2RSx3QkFBd0IsQ0FDekIsQ0FBQztJQUNGLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhdGVTb3VyY2UgfSBmcm9tICdAbmdyeC9zaWduYWxzJztcbmltcG9ydCB7IHJlbmFtZURldnRvb2xzTWV0aG9kTmFtZSB9IGZyb20gJy4vd2l0aC1kZXZ0b29scyc7XG5cbi8qKlxuICogUmVuYW1lcyB0aGUgbmFtZSBvZiBhIHN0b3JlIGhvdyBpdCBhcHBlYXJzIGluIHRoZSBEZXZ0b29scy5cbiAqIEBwYXJhbSBzdG9yZSBpbnN0YW5jZSBvZiB0aGUgU2lnbmFsU3RvcmVcbiAqIEBwYXJhbSBuZXdOYW1lIG5ldyBuYW1lIGZvciB0aGUgRGV2dG9vbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZURldnRvb2xzTmFtZTxTdGF0ZSBleHRlbmRzIG9iamVjdD4oXG4gIHN0b3JlOiBTdGF0ZVNvdXJjZTxTdGF0ZT4sXG4gIG5ld05hbWU6IHN0cmluZyxcbik6IHZvaWQge1xuICBjb25zdCByZW5hbWVNZXRob2QgPSAoc3RvcmUgYXMgUmVjb3JkPHN0cmluZywgKG5ld05hbWU6IHN0cmluZykgPT4gdm9pZD4pW1xuICAgIHJlbmFtZURldnRvb2xzTWV0aG9kTmFtZVxuICBdO1xuICBpZiAoIXJlbmFtZU1ldGhvZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkRldnRvb2xzIGV4dGVuc2lvbnMgaGF2ZW4ndCBiZWVuIGFkZGVkIHRvIHRoaXMgc3RvcmUuXCIpO1xuICB9XG5cbiAgcmVuYW1lTWV0aG9kKG5ld05hbWUpO1xufVxuIl19","import { patchState as originalPatchState, } from '@ngrx/signals';\nimport { currentActionNames } from './internal/current-action-names';\n/**\n * @deprecated Has been renamed to `updateState`\n */\nexport const patchState = (state, action, ...rest) => {\n updateState(state, action, ...rest);\n};\n/**\n * Wrapper of `patchState` for DevTools integration. Next to updating the state,\n * it also sends the action to the DevTools.\n * @param stateSource state of Signal Store\n * @param action name of action how it will show in DevTools\n * @param updaters updater functions or objects\n */\nexport function updateState(stateSource, action, ...updaters) {\n currentActionNames.add(action);\n return originalPatchState(stateSource, ...updaters);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLXN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRvb2xraXQvc3JjL2xpYi9kZXZ0b29scy91cGRhdGUtc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFVBQVUsSUFBSSxrQkFBa0IsR0FHakMsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFTckU7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUU7SUFDNUQsV0FBVyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUM7QUFFRjs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUN6QixXQUF1QyxFQUN2QyxNQUFjLEVBQ2QsR0FBRyxRQUVGO0lBRUQsa0JBQWtCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLE9BQU8sa0JBQWtCLENBQUMsV0FBVyxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUM7QUFDdEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHBhdGNoU3RhdGUgYXMgb3JpZ2luYWxQYXRjaFN0YXRlLFxuICBQYXJ0aWFsU3RhdGVVcGRhdGVyLFxuICBXcml0YWJsZVN0YXRlU291cmNlLFxufSBmcm9tICdAbmdyeC9zaWduYWxzJztcbmltcG9ydCB7IGN1cnJlbnRBY3Rpb25OYW1lcyB9IGZyb20gJy4vaW50ZXJuYWwvY3VycmVudC1hY3Rpb24tbmFtZXMnO1xuXG50eXBlIFBhdGNoRm4gPSB0eXBlb2Ygb3JpZ2luYWxQYXRjaFN0YXRlIGV4dGVuZHMgKFxuICBhcmcxOiBpbmZlciBGaXJzdCxcbiAgLi4uYXJnczogaW5mZXIgUmVzdFxuKSA9PiBpbmZlciBSZXR1cm5lclxuICA/IChzdGF0ZTogRmlyc3QsIGFjdGlvbjogc3RyaW5nLCAuLi5yZXN0OiBSZXN0KSA9PiBSZXR1cm5lclxuICA6IG5ldmVyO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIEhhcyBiZWVuIHJlbmFtZWQgdG8gYHVwZGF0ZVN0YXRlYFxuICovXG5leHBvcnQgY29uc3QgcGF0Y2hTdGF0ZTogUGF0Y2hGbiA9IChzdGF0ZSwgYWN0aW9uLCAuLi5yZXN0KSA9PiB7XG4gIHVwZGF0ZVN0YXRlKHN0YXRlLCBhY3Rpb24sIC4uLnJlc3QpO1xufTtcblxuLyoqXG4gKiBXcmFwcGVyIG9mIGBwYXRjaFN0YXRlYCBmb3IgRGV2VG9vbHMgaW50ZWdyYXRpb24uIE5leHQgdG8gdXBkYXRpbmcgdGhlIHN0YXRlLFxuICogaXQgYWxzbyBzZW5kcyB0aGUgYWN0aW9uIHRvIHRoZSBEZXZUb29scy5cbiAqIEBwYXJhbSBzdGF0ZVNvdXJjZSBzdGF0ZSBvZiBTaWduYWwgU3RvcmVcbiAqIEBwYXJhbSBhY3Rpb24gbmFtZSBvZiBhY3Rpb24gaG93IGl0IHdpbGwgc2hvdyBpbiBEZXZUb29sc1xuICogQHBhcmFtIHVwZGF0ZXJzIHVwZGF0ZXIgZnVuY3Rpb25zIG9yIG9iamVjdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlPFN0YXRlIGV4dGVuZHMgb2JqZWN0PihcbiAgc3RhdGVTb3VyY2U6IFdyaXRhYmxlU3RhdGVTb3VyY2U8U3RhdGU+LFxuICBhY3Rpb246IHN0cmluZyxcbiAgLi4udXBkYXRlcnM6IEFycmF5PFxuICAgIFBhcnRpYWw8Tm9JbmZlcjxTdGF0ZT4+IHwgUGFydGlhbFN0YXRlVXBkYXRlcjxOb0luZmVyPFN0YXRlPj5cbiAgPlxuKTogdm9pZCB7XG4gIGN1cnJlbnRBY3Rpb25OYW1lcy5hZGQoYWN0aW9uKTtcbiAgcmV0dXJuIG9yaWdpbmFsUGF0Y2hTdGF0ZShzdGF0ZVNvdXJjZSwgLi4udXBkYXRlcnMpO1xufVxuIl19","/**\n * Stub for DevTools integration. Can be used to disable DevTools in production.\n */\nexport const withDevToolsStub = () => (store) => store;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kZXYtdG9vbHMtc3R1Yi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10b29sa2l0L3NyYy9saWIvZGV2dG9vbHMvd2l0aC1kZXYtdG9vbHMtc3R1Yi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUF3QixHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgd2l0aERldnRvb2xzIH0gZnJvbSAnLi93aXRoLWRldnRvb2xzJztcblxuLyoqXG4gKiBTdHViIGZvciBEZXZUb29scyBpbnRlZ3JhdGlvbi4gQ2FuIGJlIHVzZWQgdG8gZGlzYWJsZSBEZXZUb29scyBpbiBwcm9kdWN0aW9uLlxuICovXG5leHBvcnQgY29uc3Qgd2l0aERldlRvb2xzU3R1YjogdHlwZW9mIHdpdGhEZXZ0b29scyA9ICgpID0+IChzdG9yZSkgPT4gc3RvcmU7XG4iXX0=","export function assertActionFnSpecs(obj) {\n if (!obj || typeof obj !== 'object') {\n throw new Error('%o is not an Action Specification');\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10b29sa2l0L3NyYy9saWIvYXNzZXJ0aW9ucy9hc3NlcnRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsR0FBWTtJQUVaLElBQUksQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDcEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aW9uc0ZuU3BlY3MgfSBmcm9tICcuLi93aXRoLXJlZHV4JztcblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydEFjdGlvbkZuU3BlY3MoXG4gIG9iajogdW5rbm93bixcbik6IGFzc2VydHMgb2JqIGlzIEFjdGlvbnNGblNwZWNzIHtcbiAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJyVvIGlzIG5vdCBhbiBBY3Rpb24gU3BlY2lmaWNhdGlvbicpO1xuICB9XG59XG4iXX0=","import { Subject } from 'rxjs';\nimport { assertActionFnSpecs } from './assertions/assertions';\nexport function payload() {\n return {};\n}\nexport const noPayload = {};\n/**\n * Creates a reducer function to separate the reducer logic into another file.\n *\n * ```typescript\n * interface FlightState {\n * flights: Flight[];\n * effect1: boolean;\n * effect2: boolean;\n * }\n *\n * const initialState: FlightState = {\n * flights: [],\n * effect1: false,\n * effect2: false,\n * };\n *\n * const actions = {\n * init: noPayload,\n * updateEffect1: payload<{ value: boolean }>(),\n * updateEffect2: payload<{ value: boolean }>(),\n * };\n *\n * const reducer = createReducer<FlightState, typeof actions>((actions, on) => {\n * on(actions.updateEffect1, (state, { value }) => {\n * patchState(state, { effect1: value });\n * });\n *\n * on(actions.updateEffect2, (state, { value }) => {\n * patchState(state, { effect2: value });\n * });\n * });\n *\n * signalStore(\n * withState(initialState),\n * withRedux({\n * actions,\n * reducer,\n * })\n * );\n * ```\n * @param reducerFactory\n */\nexport function createReducer(reducerFactory) {\n return reducerFactory;\n}\n/**\n * @deprecated Use NgRx's `@ngrx/signals/events` starting in 19.2\n *\n * Creates the effects function to separate the effects logic into another file.\n *\n * ```typescript\n * interface FlightState {\n * flights: Flight[];\n * effect1: boolean;\n * effect2: boolean;\n * }\n *\n * const initialState: FlightState = {\n * flights: [],\n * effect1: false,\n * effect2: false,\n * };\n *\n * const actions = {\n * init: noPayload,\n * updateEffect1: payload<{ value: boolean }>(),\n * updateEffect2: payload<{ value: boolean }>(),\n * };\n *\n * const effects = createEffects(actions, (actions, create) => {\n * return {\n * init1$: create(actions.init).pipe(\n * map(() => actions.updateEffect1({ value: true }))\n * ),\n * init2$: create(actions.init).pipe(\n * map(() => actions.updateEffect2({ value: true }))\n * ),\n * };\n * });\n *\n * signalStore(\n * withState(initialState),\n * withRedux({\n * actions,\n * effects,\n * })\n * );\n * ```\n * @param actions\n * @param effectsFactory\n */\nexport function createEffects(actions, effectsFactory) {\n return effectsFactory;\n}\nfunction createActionFns(actionFnSpecs, reducerRegistry, effectsRegistry, state) {\n const actionFns = {};\n for (const type in actionFnSpecs) {\n const actionFn = (payload) => {\n const fullPayload = { ...payload, type };\n const reducer = reducerRegistry[type];\n if (reducer) {\n reducer(state, fullPayload);\n }\n const effectSubjects = effectsRegistry[type];\n if (effectSubjects?.length) {\n for (const effectSubject of effectSubjects) {\n effectSubject.next(fullPayload);\n }\n }\n return fullPayload;\n };\n actionFn.type = type.toString();\n actionFns[type] = actionFn;\n }\n return actionFns;\n}\nfunction createPublicAndAllActionsFns(actionFnSpecs, reducerRegistry, effectsRegistry, state) {\n if ('public' in actionFnSpecs || 'private' in actionFnSpecs) {\n const privates = actionFnSpecs['private'] || {};\n const publics = actionFnSpecs['public'] || {};\n assertActionFnSpecs(privates);\n assertActionFnSpecs(publics);\n const privateActionFns = createActionFns(privates, reducerRegistry, effectsRegistry, state);\n const publicActionFns = createActionFns(publics, reducerRegistry, effectsRegistry, state);\n return {\n all: { ...privateActionFns, ...publicActionFns },\n publics: publicActionFns,\n };\n }\n const actionFns = createActionFns(actionFnSpecs, reducerRegistry, effectsRegistry, state);\n return { all: actionFns, publics: actionFns };\n}\nfunction fillReducerRegistry(reducer, actionFns, reducerRegistry) {\n function on(action, reducerFn) {\n reducerRegistry[action.type] = reducerFn;\n }\n reducer(actionFns, on);\n return reducerRegistry;\n}\nfunction fillEffects(effects, actionFns, effectsRegistry = {}) {\n function create(action) {\n const subject = new Subject();\n if (!(action.type in effectsRegistry)) {\n effectsRegistry[action.type] = [];\n }\n effectsRegistry[action.type].push(subject);\n return subject.asObservable();\n }\n const effectObservables = effects(actionFns, create);\n return Object.values(effectObservables);\n}\nfunction startSubscriptions(observables) {\n return observables.map((observable) => observable.subscribe());\n}\nfunction processRedux(actionFnSpecs, reducer, effects, store) {\n const reducerRegistry = {};\n const effectsRegistry = {};\n const actionsMap = createPublicAndAllActionsFns(actionFnSpecs, reducerRegistry, effectsRegistry, store);\n const actionFns = actionsMap.all;\n const publicActionsFns = actionsMap.publics;\n fillReducerRegistry(reducer, actionFns, reducerRegistry);\n const effectObservables = fillEffects(effects, actionFns, effectsRegistry);\n const subscriptions = startSubscriptions(effectObservables);\n return {\n methods: publicActionsFns,\n subscriptions: subscriptions,\n };\n}\n/**\n * @param redux redux\n *\n * properties do not start with `with` since they are not extension functions on their own.\n *\n * no dependency to NgRx\n *\n * actions are passed to reducer and effects, but it is also possible to use other actions.\n * effects provide forAction and do not return anything. that is important because effects should stay inaccessible\n */\nexport function withRedux(redux) {\n return (store) => {\n const { methods } = processRedux(redux.actions, redux.reducer, redux.effects, store);\n return {\n ...store,\n methods: { ...store.methods, ...methods },\n };\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1yZWR1eC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10b29sa2l0L3NyYy9saWIvd2l0aC1yZWR1eC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBNEM5RCxNQUFNLFVBQVUsT0FBTztJQUNyQixPQUFPLEVBQVUsQ0FBQztBQUNwQixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQWlCNUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUNHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FJM0IsY0FHQztJQUVELE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUM7QUFXRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkNHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FDM0IsT0FBZ0IsRUFDaEIsY0FBeUQ7SUFFekQsT0FBTyxjQUFjLENBQUM7QUFDeEIsQ0FBQztBQVdELFNBQVMsZUFBZSxDQUN0QixhQUFtQixFQUNuQixlQUdDLEVBQ0QsZUFBZ0MsRUFDaEMsS0FBYztJQUVkLE1BQU0sU0FBUyxHQUE2QixFQUFFLENBQUM7SUFFL0MsS0FBSyxNQUFNLElBQUksSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNqQyxNQUFNLFFBQVEsR0FBRyxDQUFDLE9BQWdCLEVBQUUsRUFBRTtZQUNwQyxNQUFNLFdBQVcsR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ3pDLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNYLE9BQXNELENBQ3JELEtBQUssRUFDTCxX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T0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFO1NBQzFDLENBQUM7SUFDSixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRW1wdHlGZWF0dXJlUmVzdWx0LFxuICBTaWduYWxTdG9yZUZlYXR1cmUsXG4gIFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdCxcbiAgV3JpdGFibGVTdGF0ZVNvdXJjZSxcbn0gZnJvbSAnQG5ncngvc2lnbmFscyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBhc3NlcnRBY3Rpb25GblNwZWNzIH0gZnJvbSAnLi9hc3NlcnRpb25zL2Fzc2VydGlvbnMnO1xuXG4vKiogQWN0aW9ucyAqKi9cblxudHlwZSBQYXlsb2FkID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbnR5cGUgQWN0aW9uRm48XG4gIFR5cGUgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXG4gIEFjdGlvblBheWxvYWQgZXh0ZW5kcyBQYXlsb2FkID0gUGF5bG9hZCxcbj4gPSAoKHBheWxvYWQ6IEFjdGlvblBheWxvYWQpID0+IEFjdGlvblBheWxvYWQgJiB7IHR5cGU6IFR5cGUgfSkgJiB7XG4gIHR5cGU6IFR5cGU7XG59O1xuXG50eXBlIEFjdGlvbkZucyA9IFJlY29yZDxzdHJpbmcsIEFjdGlvbkZuPjtcblxuZXhwb3J0IHR5cGUgQWN0aW9uc0ZuU3BlY3MgPSBSZWNvcmQ8c3RyaW5nLCBQYXlsb2FkPjtcblxudHlwZSBBY3Rpb25GbkNyZWF0b3I8U3BlYyBleHRlbmRzIEFjdGlvbnNGblNwZWNzPiA9IHtcbiAgW0FjdGlvbk5hbWUgaW4ga2V5b2YgU3BlY106IChSZWNvcmQ8bmV2ZXIsIG5ldmVyPiBleHRlbmRzIFNwZWNbQWN0aW9uTmFtZV1cbiAgICA/ICgpID0+IFNwZWNbQWN0aW9uTmFtZV0gJiB7IHR5cGU6IEFjdGlvbk5hbWUgfVxuICAgIDogKFxuICAgICAgICBwYXlsb2FkOiBTcGVjW0FjdGlvbk5hbWVdLFxuICAgICAgKSA9PiBTcGVjW0FjdGlvbk5hbWVdICYgeyB0eXBlOiBBY3Rpb25OYW1lIH0pICYge1xuICAgIHR5cGU6IEFjdGlvbk5hbWUgJiBzdHJpbmc7XG4gIH07XG59O1xuXG50eXBlIEFjdGlvbkZuUGF5bG9hZDxBY3Rpb24+ID0gQWN0aW9uIGV4dGVuZHMgKHBheWxvYWQ6IGluZmVyIFBheWxvYWQpID0+IHZvaWRcbiAgPyBQYXlsb2FkXG4gIDogbmV2ZXI7XG5cbnR5cGUgQWN0aW9uRm5zQ3JlYXRvcjxTcGVjIGV4dGVuZHMgQWN0aW9uc0ZuU3BlY3M+ID0gU3BlYyBleHRlbmRzIHtcbiAgcHJpdmF0ZTogUmVjb3JkPHN0cmluZywgUGF5bG9hZD47XG4gIHB1YmxpYzogUmVjb3JkPHN0cmluZywgUGF5bG9hZD47XG59XG4gID8gQWN0aW9uRm5DcmVhdG9yPFNwZWNbJ3ByaXZhdGUnXT4gJiBBY3Rpb25GbkNyZWF0b3I8U3BlY1sncHVibGljJ10+XG4gIDogQWN0aW9uRm5DcmVhdG9yPFNwZWM+O1xuXG50eXBlIFB1YmxpY0FjdGlvbkZuczxTcGVjIGV4dGVuZHMgQWN0aW9uc0ZuU3BlY3M+ID0gU3BlYyBleHRlbmRzIHtcbiAgcHVibGljOiBSZWNvcmQ8c3RyaW5nLCBQYXlsb2FkPjtcbn1cbiAgPyBBY3Rpb25GbkNyZWF0b3I8U3BlY1sncHVibGljJ10+XG4gIDogQWN0aW9uRm5DcmVhdG9yPFNwZWM+O1xuXG5leHBvcnQgZnVuY3Rpb24gcGF5bG9hZDxUeXBlIGV4dGVuZHMgUGF5bG9hZD4oKTogVHlwZSB7XG4gIHJldHVybiB7fSBhcyBUeXBlO1xufVxuXG5leHBvcnQgY29uc3Qgbm9QYXlsb2FkID0ge307XG5cbi8qKiBSZWR1Y2VyICoqL1xuXG50eXBlIFJlZHVjZXJGdW5jdGlvbjxSZWR1Y2VyQWN0aW9uLCBTdGF0ZT4gPSAoXG4gIHN0YXRlOiBTdGF0ZSxcbiAgYWN0aW9uOiBBY3Rpb25GblBheWxvYWQ8UmVkdWNlckFjdGlvbj4sXG4pID0+IHZvaWQ7XG5cbnR5cGUgUmVkdWNlckZhY3Rvcnk8U3RhdGVBY3Rpb25GbnMgZXh0ZW5kcyBBY3Rpb25GbnMsIFN0YXRlPiA9IChcbiAgYWN0aW9uczogU3RhdGVBY3Rpb25GbnMsXG4gIG9uOiA8UmVkdWNlckFjdGlvbiBleHRlbmRzIHsgdHlwZTogc3RyaW5nIH0+KFxuICAgIGFjdGlvbjogUmVkdWNlckFjdGlvbixcbiAgICByZWR1Y2VyRm46IFJlZHVjZXJGdW5jdGlvbjxSZWR1Y2VyQWN0aW9uLCBTdGF0ZT4sXG4gICkgPT4gdm9pZCxcbikgPT4gdm9pZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgcmVkdWNlciBmdW5jdGlvbiB0byBzZXBhcmF0ZSB0aGUgcmVkdWNlciBsb2dpYyBpbnRvIGFub3RoZXIgZmlsZS5cbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbnRlcmZhY2UgRmxpZ2h0U3RhdGUge1xuICogICBmbGlnaHRzOiBGbGlnaHRbXTtcbiAqICAgZWZmZWN0MTogYm9vbGVhbjtcbiAqICAgZWZmZWN0MjogYm9vbGVhbjtcbiAqIH1cbiAqXG4gKiBjb25zdCBpbml0aWFsU3RhdGU6IEZsaWdodFN0YXRlID0ge1xuICogICBmbGlnaHRzOiBbXSxcbiAqICAgZWZmZWN0MTogZmFsc2UsXG4gKiAgIGVmZmVjdDI6IGZhbHNlLFxuICogfTtcbiAqXG4gKiBjb25zdCBhY3Rpb25zID0ge1xuICogICBpbml0OiBub1BheWxvYWQsXG4gKiAgIHVwZGF0ZUVmZmVjdDE6IHBheWxvYWQ8eyB2YWx1ZTogYm9vbGVhbiB9PigpLFxuICogICB1cGRhdGVFZmZlY3QyOiBwYXlsb2FkPHsgdmFsdWU6IGJvb2xlYW4gfT4oKSxcbiAqIH07XG4gKlxuICogY29uc3QgcmVkdWNlciA9IGNyZWF0ZVJlZHVjZXI8RmxpZ2h0U3RhdGUsIHR5cGVvZiBhY3Rpb25zPigoYWN0aW9ucywgb24pID0+IHtcbiAqICAgb24oYWN0aW9ucy51cGRhdGVFZmZlY3QxLCAoc3RhdGUsIHsgdmFsdWUgfSkgPT4ge1xuICogICAgIHBhdGNoU3RhdGUoc3RhdGUsIHsgZWZmZWN0MTogdmFsdWUgfSk7XG4gKiAgIH0pO1xuICpcbiAqICAgb24oYWN0aW9ucy51cGRhdGVFZmZlY3QyLCAoc3RhdGUsIHsgdmFsdWUgfSkgPT4ge1xuICogICAgIHBhdGNoU3RhdGUoc3RhdGUsIHsgZWZmZWN0MjogdmFsdWUgfSk7XG4gKiAgIH0pO1xuICogfSk7XG4gKlxuICogc2lnbmFsU3RvcmUoXG4gKiAgIHdpdGhTdGF0ZShpbml0aWFsU3RhdGUpLFxuICogICB3aXRoUmVkdXgoe1xuICogICAgIGFjdGlvbnMsXG4gKiAgICAgcmVkdWNlcixcbiAqICAgfSlcbiAqICk7XG4gKiBgYGBcbiAqIEBwYXJhbSByZWR1Y2VyRmFjdG9yeVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVkdWNlcjxcbiAgU3RhdGUgZXh0ZW5kcyBvYmplY3QsXG4gIEFjdGlvbnMgZXh0ZW5kcyBBY3Rpb25zRm5TcGVjcyxcbj4oXG4gIHJlZHVjZXJGYWN0b3J5OiBSZWR1Y2VyRmFjdG9yeTxcbiAgICBBY3Rpb25GbnNDcmVhdG9yPEFjdGlvbnM+LFxuICAgIFdyaXRhYmxlU3RhdGVTb3VyY2U8U3RhdGU+XG4gID4sXG4pIHtcbiAgcmV0dXJuIHJlZHVjZXJGYWN0b3J5O1xufVxuXG4vKiogRWZmZWN0ICoqL1xuXG50eXBlIEVmZmVjdHNGYWN0b3J5PFN0YXRlQWN0aW9uRm5zIGV4dGVuZHMgQWN0aW9uRm5zPiA9IChcbiAgYWN0aW9uczogU3RhdGVBY3Rpb25GbnMsXG4gIGNyZWF0ZTogPEVmZmVjdEFjdGlvbiBleHRlbmRzIHsgdHlwZTogc3RyaW5nIH0+KFxuICAgIGFjdGlvbjogRWZmZWN0QWN0aW9uLFxuICApID0+IE9ic2VydmFibGU8QWN0aW9uRm5QYXlsb2FkPEVmZmVjdEFjdGlvbj4+LFxuKSA9PiBSZWNvcmQ8c3RyaW5nLCBPYnNlcnZhYmxlPHVua25vd24+PjtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgTmdSeCdzIGBAbmdyeC9zaWduYWxzL2V2ZW50c2Agc3RhcnRpbmcgaW4gMTkuMlxuICpcbiAqIENyZWF0ZXMgdGhlIGVmZmVjdHMgZnVuY3Rpb24gdG8gc2VwYXJhdGUgdGhlIGVmZmVjdHMgbG9naWMgaW50byBhbm90aGVyIGZpbGUuXG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW50ZXJmYWNlIEZsaWdodFN0YXRlIHtcbiAqICAgZmxpZ2h0czogRmxpZ2h0W107XG4gKiAgIGVmZmVjdDE6IGJvb2xlYW47XG4gKiAgIGVmZmVjdDI6IGJvb2xlYW47XG4gKiB9XG4gKlxuICogY29uc3QgaW5pdGlhbFN0YXRlOiBGbGlnaHRTdGF0ZSA9IHtcbiAqICAgZmxpZ2h0czogW10sXG4gKiAgIGVmZmVjdDE6IGZhbHNlLFxuICogICBlZmZlY3QyOiBmYWxzZSxcbiAqIH07XG4gKlxuICogY29uc3QgYWN0aW9ucyA9IHtcbiAqICAgaW5pdDogbm9QYXlsb2FkLFxuICogICB1cGRhdGVFZmZlY3QxOiBwYXlsb2FkPHsgdmFsdWU6IGJvb2xlYW4gfT4oKSxcbiAqICAgdXBkYXRlRWZmZWN0MjogcGF5bG9hZDx7IHZhbHVlOiBib29sZWFuIH0+KCksXG4gKiB9O1xuICpcbiAqIGNvbnN0IGVmZmVjdHMgPSBjcmVhdGVFZmZlY3RzKGFjdGlvbnMsIChhY3Rpb25zLCBjcmVhdGUpID0+IHtcbiAqICAgcmV0dXJuIHtcbiAqICAgICBpbml0MSQ6IGNyZWF0ZShhY3Rpb25zLmluaXQpLnBpcGUoXG4gKiAgICAgICBtYXAoKCkgPT4gYWN0aW9ucy51cGRhdGVFZmZlY3QxKHsgdmFsdWU6IHRydWUgfSkpXG4gKiAgICAgKSxcbiAqICAgICBpbml0MiQ6IGNyZWF0ZShhY3Rpb25zLmluaXQpLnBpcGUoXG4gKiAgICAgICBtYXAoKCkgPT4gYWN0aW9ucy51cGRhdGVFZmZlY3QyKHsgdmFsdWU6IHRydWUgfSkpXG4gKiAgICAgKSxcbiAqICAgfTtcbiAqIH0pO1xuICpcbiAqIHNpZ25hbFN0b3JlKFxuICogICB3aXRoU3RhdGUoaW5pdGlhbFN0YXRlKSxcbiAqICAgd2l0aFJlZHV4KHtcbiAqICAgICBhY3Rpb25zLFxuICogICAgIGVmZmVjdHMsXG4gKiAgIH0pXG4gKiApO1xuICogYGBgXG4gKiBAcGFyYW0gYWN0aW9uc1xuICogQHBhcmFtIGVmZmVjdHNGYWN0b3J5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFZmZlY3RzPEFjdGlvbnMgZXh0ZW5kcyBBY3Rpb25zRm5TcGVjcz4oXG4gIGFjdGlvbnM6IEFjdGlvbnMsXG4gIGVmZmVjdHNGYWN0b3J5OiBFZmZlY3RzRmFjdG9yeTxBY3Rpb25GbnNDcmVhdG9yPEFjdGlvbnM+Pixcbikge1xuICByZXR1cm4gZWZmZWN0c0ZhY3Rvcnk7XG59XG5cbi8vIGludGVybmFsIHR5cGVzXG5cbi8qKlxuICogUmVjb3JkIHdoaWNoIGhvbGRzIGFsbCBlZmZlY3RzIGZvciBhIHNwZWNpZmljIGFjdGlvbiB0eXBlLlxuICogVGhlIHZhbHVlcyBhcmUgU3ViamVjdCB3aGljaCB0aGUgZWZmZWN0IGFyZSBzdWJzY3JpYmVkIHRvLlxuICogYGNyZWF0ZUFjdGlvbkZuc2Agd2lsbCBjYWxsIG5leHQgb24gdGhlc2Ugc3ViamVjdHMuXG4gKi9cbnR5cGUgRWZmZWN0c1JlZ2lzdHJ5ID0gUmVjb3JkPHN0cmluZywgU3ViamVjdDxBY3Rpb25GblBheWxvYWQ8dW5rbm93bj4+W10+O1xuXG5mdW5jdGlvbiBjcmVhdGVBY3Rpb25GbnM8U3BlYyBleHRlbmRzIEFjdGlvbnNGblNwZWNzPihcbiAgYWN0aW9uRm5TcGVjczogU3BlYyxcbiAgcmVkdWNlclJlZ2lzdHJ5OiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIChzdGF0ZTogdW5rbm93biwgcGF5bG9hZDogQWN0aW9uRm5QYXlsb2FkPHVua25vd24+KSA9PiB2b2lkXG4gID4sXG4gIGVmZmVjdHNSZWdpc3RyeTogRWZmZWN0c1JlZ2lzdHJ5LFxuICBzdGF0ZTogdW5rbm93bixcbikge1xuICBjb25zdCBhY3Rpb25GbnM6IFJlY29yZDxzdHJpbmcsIEFjdGlvbkZuPiA9IHt9O1xuXG4gIGZvciAoY29uc3QgdHlwZSBpbiBhY3Rpb25GblNwZWNzKSB7XG4gICAgY29uc3QgYWN0aW9uRm4gPSAocGF5bG9hZDogUGF5bG9hZCkgPT4ge1xuICAgICAgY29uc3QgZnVsbFBheWxvYWQgPSB7IC4uLnBheWxvYWQsIHR5cGUgfTtcbiAgICAgIGNvbnN0IHJlZHVjZXIgPSByZWR1Y2VyUmVnaXN0cnlbdHlwZV07XG4gICAgICBpZiAocmVkdWNlcikge1xuICAgICAgICAocmVkdWNlciBhcyAoc3RhdGU6IHVua25vd24sIHBheWxvYWQ6IHVua25vd24pID0+IHZvaWQpKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGZ1bGxQYXlsb2FkIGFzIHVua25vd24sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCBlZmZlY3RTdWJqZWN0cyA9IGVmZmVjdHNSZWdpc3RyeVt0eXBlXTtcbiAgICAgIGlmIChlZmZlY3RTdWJqZWN0cz8ubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoY29uc3QgZWZmZWN0U3ViamVjdCBvZiBlZmZlY3RTdWJqZWN0cykge1xuICAgICAgICAgIChlZmZlY3RTdWJqZWN0IGFzIHVua25vd24gYXMgU3ViamVjdDx1bmtub3duPikubmV4dChmdWxsUGF5bG9hZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmdWxsUGF5bG9hZDtcbiAgICB9O1xuICAgIGFjdGlvbkZuLnR5cGUgPSB0eXBlLnRvU3RyaW5nKCk7XG4gICAgYWN0aW9uRm5zW3R5cGVdID0gYWN0aW9uRm47XG4gIH1cblxuICByZXR1cm4gYWN0aW9uRm5zO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVQdWJsaWNBbmRBbGxBY3Rpb25zRm5zPFNwZWMgZXh0ZW5kcyBBY3Rpb25zRm5TcGVjcz4oXG4gIGFjdGlvbkZuU3BlY3M6IFNwZWMsXG4gIHJlZHVjZXJSZWdpc3RyeTogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICAoc3RhdGU6IHVua25vd24sIHBheWxvYWQ6IEFjdGlvbkZuUGF5bG9hZDx1bmtub3duPikgPT4gdm9pZFxuICA+LFxuICBlZmZlY3RzUmVnaXN0cnk6IEVmZmVjdHNSZWdpc3RyeSxcbiAgc3RhdGU6IHVua25vd24sXG4pOiB7IGFsbDogQWN0aW9uRm5zOyBwdWJsaWNzOiBBY3Rpb25GbnMgfSB7XG4gIGlmICgncHVibGljJyBpbiBhY3Rpb25GblNwZWNzIHx8ICdwcml2YXRlJyBpbiBhY3Rpb25GblNwZWNzKSB7XG4gICAgY29uc3QgcHJpdmF0ZXMgPSBhY3Rpb25GblNwZWNzWydwcml2YXRlJ10gfHwge307XG4gICAgY29uc3QgcHVibGljcyA9IGFjdGlvbkZuU3BlY3NbJ3B1YmxpYyddIHx8IHt9O1xuXG4gICAgYXNzZXJ0QWN0aW9uRm5TcGVjcyhwcml2YXRlcyk7XG4gICAgYXNzZXJ0QWN0aW9uRm5TcGVjcyhwdWJsaWNzKTtcblxuICAgIGNvbnN0IHByaXZhdGVBY3Rpb25GbnMgPSBjcmVhdGVBY3Rpb25GbnMoXG4gICAgICBwcml2YXRlcyxcbiAgICAgIHJlZHVjZXJSZWdpc3RyeSxcbiAgICAgIGVmZmVjdHNSZWdpc3RyeSxcbiAgICAgIHN0YXRlLFxuICAgICk7XG4gICAgY29uc3QgcHVibGljQWN0aW9uRm5zID0gY3JlYXRlQWN0aW9uRm5zKFxuICAgICAgcHVibGljcyxcbiAgICAgIHJlZHVjZXJSZWdpc3RyeSxcbiAgICAgIGVmZmVjdHNSZWdpc3RyeSxcbiAgICAgIHN0YXRlLFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWxsOiB7IC4uLnByaXZhdGVBY3Rpb25GbnMsIC4uLnB1YmxpY0FjdGlvbkZucyB9LFxuICAgICAgcHVibGljczogcHVibGljQWN0aW9uRm5zLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBhY3Rpb25GbnMgPSBjcmVhdGVBY3Rpb25GbnMoXG4gICAgYWN0aW9uRm5TcGVjcyxcbiAgICByZWR1Y2VyUmVnaXN0cnksXG4gICAgZWZmZWN0c1JlZ2lzdHJ5LFxuICAgIHN0YXRlLFxuICApO1xuXG4gIHJldHVybiB7IGFsbDogYWN0aW9uRm5zLCBwdWJsaWNzOiBhY3Rpb25GbnMgfTtcbn1cblxuZnVuY3Rpb24gZmlsbFJlZHVjZXJSZWdpc3RyeShcbiAgcmVkdWNlcjogUmVkdWNlckZhY3Rvcnk8QWN0aW9uRm5zLCB1bmtub3duPixcbiAgYWN0aW9uRm5zOiBBY3Rpb25GbnMsXG4gIHJlZHVjZXJSZWdpc3RyeTogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICAoc3RhdGU6IHVua25vd24sIHBheWxvYWQ6IEFjdGlvbkZuUGF5bG9hZDx1bmtub3duPikgPT4gdm9pZFxuICA+LFxuKSB7XG4gIGZ1bmN0aW9uIG9uKFxuICAgIGFjdGlvbjogeyB0eXBlOiBzdHJpbmcgfSxcbiAgICByZWR1Y2VyRm46IChzdGF0ZTogdW5rbm93biwgcGF5bG9hZDogQWN0aW9uRm5QYXlsb2FkPHVua25vd24+KSA9PiB2b2lkLFxuICApIHtcbiAgICByZWR1Y2VyUmVnaXN0cnlbYWN0aW9uLnR5cGVdID0gcmVkdWNlckZuO1xuICB9XG5cbiAgcmVkdWNlcihhY3Rpb25GbnMsIG9uKTtcblxuICByZXR1cm4gcmVkdWNlclJlZ2lzdHJ5O1xufVxuXG5mdW5jdGlvbiBmaWxsRWZmZWN0cyhcbiAgZWZmZWN0czogRWZmZWN0c0ZhY3Rvcnk8QWN0aW9uRm5zPixcbiAgYWN0aW9uRm5zOiBBY3Rpb25GbnMsXG4gIGVmZmVjdHNSZWdpc3RyeTogRWZmZWN0c1JlZ2lzdHJ5ID0ge30sXG4pOiBPYnNlcnZhYmxlPHVua25vd24+W10ge1xuICBmdW5jdGlvbiBjcmVhdGUoYWN0aW9uOiB7IHR5cGU6IHN0cmluZyB9KSB7XG4gICAgY29uc3Qgc3ViamVjdCA9IG5ldyBTdWJqZWN0PEFjdGlvbkZuUGF5bG9hZDx1bmtub3duPj4oKTtcbiAgICBpZiAoIShhY3Rpb24udHlwZSBpbiBlZmZlY3RzUmVnaXN0cnkpKSB7XG4gICAgICBlZmZlY3RzUmVnaXN0cnlbYWN0aW9uLnR5cGVdID0gW107XG4gICAgfVxuICAgIGVmZmVjdHNSZWdpc3RyeVthY3Rpb24udHlwZV0ucHVzaChzdWJqZWN0KTtcbiAgICByZXR1cm4gc3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGNvbnN0IGVmZmVjdE9ic2VydmFibGVzID0gZWZmZWN0cyhhY3Rpb25GbnMsIGNyZWF0ZSk7XG4gIHJldHVybiBPYmplY3QudmFsdWVzKGVmZmVjdE9ic2VydmFibGVzKTtcbn1cblxuZnVuY3Rpb24gc3RhcnRTdWJzY3JpcHRpb25zKG9ic2VydmFibGVzOiBPYnNlcnZhYmxlPHVua25vd24+W10pIHtcbiAgcmV0dXJuIG9ic2VydmFibGVzLm1hcCgob2JzZXJ2YWJsZSkgPT4gb2JzZXJ2YWJsZS5zdWJzY3JpYmUoKSk7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NSZWR1eDxTcGVjIGV4dGVuZHMgQWN0aW9uc0ZuU3BlY3MsIFJldHVyblR5cGU+KFxuICBhY3Rpb25GblNwZWNzOiBTcGVjLFxuICByZWR1Y2VyOiBSZWR1Y2VyRmFjdG9yeTxBY3Rpb25GbnMsIHVua25vd24+LFxuICBlZmZlY3RzOiBFZmZlY3RzRmFjdG9yeTxBY3Rpb25GbnM+LFxuICBzdG9yZTogdW5rbm93bixcbikge1xuICBjb25zdCByZWR1Y2VyUmVnaXN0cnk6IFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAgKHN0YXRlOiB1bmtub3duLCBwYXlsb2FkOiBBY3Rpb25GblBheWxvYWQ8dW5rbm93bj4pID0+IHZvaWRcbiAgPiA9IHt9O1xuICBjb25zdCBlZmZlY3RzUmVnaXN0cnk6IFJlY29yZDxzdHJpbmcsIFN1YmplY3Q8QWN0aW9uRm5QYXlsb2FkPHVua25vd24+PltdPiA9XG4gICAge307XG4gIGNvbnN0IGFjdGlvbnNNYXAgPSBjcmVhdGVQdWJsaWNBbmRBbGxBY3Rpb25zRm5zKFxuICAgIGFjdGlvbkZuU3BlY3MsXG4gICAgcmVkdWNlclJlZ2lzdHJ5LFxuICAgIGVmZmVjdHNSZWdpc3RyeSxcbiAgICBzdG9yZSxcbiAgKTtcbiAgY29uc3QgYWN0aW9uRm5zID0gYWN0aW9uc01hcC5hbGw7XG4gIGNvbnN0IHB1YmxpY0FjdGlvbnNGbnMgPSBhY3Rpb25zTWFwLnB1YmxpY3M7XG5cbiAgZmlsbFJlZHVjZXJSZWdpc3RyeShyZWR1Y2VyLCBhY3Rpb25GbnMsIHJlZHVjZXJSZWdpc3RyeSk7XG4gIGNvbnN0IGVmZmVjdE9ic2VydmFibGVzID0gZmlsbEVmZmVjdHMoZWZmZWN0cywgYWN0aW9uRm5zLCBlZmZlY3RzUmVnaXN0cnkpO1xuICBjb25zdCBzdWJzY3JpcHRpb25zID0gc3RhcnRTdWJzY3JpcHRpb25zKGVmZmVjdE9ic2VydmFibGVzKTtcblxuICByZXR1cm4ge1xuICAgIG1ldGhvZHM6IHB1YmxpY0FjdGlvbnNGbnMgYXMgUmV0dXJuVHlwZSxcbiAgICBzdWJzY3JpcHRpb25zOiBzdWJzY3JpcHRpb25zLFxuICB9O1xufVxuXG4vKipcbiAqIEBwYXJhbSByZWR1eCByZWR1eFxuICpcbiAqIHByb3BlcnRpZXMgZG8gbm90IHN0YXJ0IHdpdGggYHdpdGhgIHNpbmNlIHRoZXkgYXJlIG5vdCBleHRlbnNpb24gZnVuY3Rpb25zIG9uIHRoZWlyIG93bi5cbiAqXG4gKiBubyBkZXBlbmRlbmN5IHRvIE5nUnhcbiAqXG4gKiBhY3Rpb25zIGFyZSBwYXNzZWQgdG8gcmVkdWNlciBhbmQgZWZmZWN0cywgYnV0IGl0IGlzIGFsc28gcG9zc2libGUgdG8gdXNlIG90aGVyIGFjdGlvbnMuXG4gKiBlZmZlY3RzIHByb3ZpZGUgZm9yQWN0aW9uIGFuZCBkbyBub3QgcmV0dXJuIGFueXRoaW5nLiB0aGF0IGlzIGltcG9ydGFudCBiZWNhdXNlIGVmZmVjdHMgc2hvdWxkIHN0YXkgaW5hY2Nlc3NpYmxlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoUmVkdXg8XG4gIFNwZWMgZXh0ZW5kcyBBY3Rpb25zRm5TcGVjcyxcbiAgSW5wdXQgZXh0ZW5kcyBTaWduYWxTdG9yZUZlYXR1cmVSZXN1bHQsXG4gIFN0YXRlQWN0aW9uRm5zIGV4dGVuZHMgQWN0aW9uRm5zQ3JlYXRvcjxTcGVjPiA9IEFjdGlvbkZuc0NyZWF0b3I8U3BlYz4sXG4gIFB1YmxpY1N0b3JlQWN0aW9uRm5zIGV4dGVuZHMgUHVibGljQWN0aW9uRm5zPFNwZWM+ID0gUHVibGljQWN0aW9uRm5zPFNwZWM+LFxuPihyZWR1eDoge1xuICBhY3Rpb25zOiBTcGVjO1xuICByZWR1Y2VyOiBSZWR1Y2VyRmFjdG9yeTxTdGF0ZUFjdGlvbkZucywgV3JpdGFibGVTdGF0ZVNvdXJjZTxJbnB1dFsnc3RhdGUnXT4+O1xuICBlZmZlY3RzOiBFZmZlY3RzRmFjdG9yeTxTdGF0ZUFjdGlvbkZucz47XG59KTogU2lnbmFsU3RvcmVGZWF0dXJlPFxuICBJbnB1dCxcbiAgRW1wdHlGZWF0dXJlUmVzdWx0ICYgeyBtZXRob2RzOiBQdWJsaWNTdG9yZUFjdGlvbkZucyB9XG4+IHtcbiAgcmV0dXJuIChzdG9yZSkgPT4ge1xuICAgIGNvbnN0IHsgbWV0aG9kcyB9ID0gcHJvY2Vzc1JlZHV4PFNwZWMsIFB1YmxpY1N0b3JlQWN0aW9uRm5zPihcbiAgICAgIHJlZHV4LmFjdGlvbnMsXG4gICAgICByZWR1eC5yZWR1Y2VyIGFzIFJlZHVjZXJGYWN0b3J5PEFjdGlvbkZucywgdW5rbm93bj4sXG4gICAgICByZWR1eC5lZmZlY3RzIGFzIEVmZmVjdHNGYWN0b3J5PEFjdGlvbkZucz4sXG4gICAgICBzdG9yZSxcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdG9yZSxcbiAgICAgIG1ldGhvZHM6IHsgLi4uc3RvcmUubWV0aG9kcywgLi4ubWV0aG9kcyB9LFxuICAgIH07XG4gIH07XG59XG4iXX0=","import { computed } from '@angular/core';\nimport { signalStoreFeature, withComputed, withState, } from '@ngrx/signals';\nexport function deriveCallStateKeys(collection) {\n return {\n callStateKey: collection ? `${collection}CallState` : 'callState',\n loadingKey: collection ? `${collection}Loading` : 'loading',\n loadedKey: collection ? `${collection}Loaded` : 'loaded',\n errorKey: collection ? `${collection}Error` : 'error',\n };\n}\nexport function getCallStateKeys(config) {\n const prop = config?.collection;\n return deriveCallStateKeys(prop);\n}\nexport function getCollectionArray(config) {\n return 'collections' in config\n ? config.collections\n : 'collection' in config && config.collection\n ? [config.collection]\n : undefined;\n}\nexport function withCallState(config) {\n return signalStoreFeature(withState(() => {\n if (!config) {\n return { callState: 'init' };\n }\n const collections = getCollectionArray(config);\n if (collections) {\n return collections.reduce((acc, cur) => ({\n ...acc,\n ...{ [cur ? `${cur}CallState` : 'callState']: 'init' },\n }), {});\n }\n return { callState: 'init' };\n }), withComputed((state) => {\n if (config) {\n const collections = getCollectionArray(config);\n if (collections) {\n return collections.reduce((acc, cur) => {\n const { callStateKey, errorKey, loadedKey, loadingKey } = deriveCallStateKeys(cur);\n const callState = state[callStateKey];\n return {\n ...acc,\n [loadingKey]: computed(() => callState() === 'loading'),\n [loadedKey]: computed(() => callState() === 'loaded'),\n [errorKey]: computed(() => {\n const v = callState();\n return typeof v === 'object' ? v.error : null;\n }),\n };\n }, {});\n }\n }\n const { callStateKey, errorKey, loadedKey, loadingKey } = deriveCallStateKeys();\n const callState = state[callStateKey];\n return {\n [loadingKey]: computed(() => callState() === 'loading'),\n [loadedKey]: computed(() => callState() === 'loaded'),\n [errorKey]: computed(() => {\n const v = callState();\n return typeof v === 'object' ? v.error : null;\n }),\n };\n }));\n}\nexport function setLoading(prop) {\n if (prop) {\n return { [`${prop}CallState`]: 'loading' };\n }\n return { callState: 'loading' };\n}\nexport function setLoaded(prop) {\n if (prop) {\n return { [`${prop}CallState`]: 'loaded' };\n }\n else {\n return { callState: 'loaded' };\n }\n}\nexport function setError(error, prop) {\n let errorMessage;\n if (!error) {\n errorMessage = '';\n }\n else if (typeof error === 'object' && 'message' in error) {\n errorMessage = String(error.message);\n }\n else {\n errorMessage = String(error);\n }\n if (prop) {\n return {\n [`${prop}CallState`]: { error: errorMessage },\n };\n }\n else {\n return { callState: { error: errorMessage } };\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1jYWxsLXN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRvb2xraXQvc3JjL2xpYi93aXRoLWNhbGwtc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBR0wsa0JBQWtCLEVBQ2xCLFlBQVksRUFDWixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUE4QnZCLE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsVUFBdUI7SUFFdkIsT0FBTztRQUNMLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVc7UUFDakUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUMzRCxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRO1FBQ3hELFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU87S0FDdEQsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsTUFBZ0M7SUFDL0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxFQUFFLFVBQVUsQ0FBQztJQUNoQyxPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLE1BQTREO0lBRTVELE9BQU8sYUFBYSxJQUFJLE1BQU07UUFDNUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXO1FBQ3BCLENBQUMsQ0FBQyxZQUFZLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxVQUFVO1lBQzNDLENBQUMsQ0FBQyxDQUFDLE1BQU0s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LEVBQUUsWUFBWSxFQUFFLEVBQXdCLENBQUM7SUFDdEUsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTaWduYWwsIGNvbXB1dGVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBFbXB0eUZlYXR1cmVSZXN1bHQsXG4gIFNpZ25hbFN0b3JlRmVhdHVyZSxcbiAgc2lnbmFsU3RvcmVGZWF0dXJlLFxuICB3aXRoQ29tcHV0ZWQsXG4gIHdpdGhTdGF0ZSxcbn0gZnJvbSAnQG5ncngvc2lnbmFscyc7XG5cbmV4cG9ydCB0eXBlIENhbGxTdGF0ZSA9ICdpbml0JyB8ICdsb2FkaW5nJyB8ICdsb2FkZWQnIHwgeyBlcnJvcjogc3RyaW5nIH07XG5cbmV4cG9ydCB0eXBlIENhbGxTdGF0ZVNsaWNlID0ge1xuICBjYWxsU3RhdGU6IENhbGxTdGF0ZTtcbn07XG5cbmV4cG9ydCB0eXBlIE5hbWVkQ2FsbFN0YXRlU2xpY2U8Q29sbGVjdGlvbiBleHRlbmRzIHN0cmluZz4gPSB7XG4gIFtLIGluIGtleW9mIENhbGxTdGF0ZVNsaWNlIGFzIENvbGxlY3Rpb24gZXh0ZW5kcyAnJ1xuICAgID8gYCR7Q29sbGVjdGlvbn0ke0t9YFxuICAgIDogYCR7Q29sbGVjdGlvbn0ke0NhcGl0YWxpemU8Sz59YF06IENhbGxTdGF0ZVNsaWNlW0tdO1xufTtcblxuZXhwb3J0IHR5cGUgQ2FsbFN0YXRlU2lnbmFscyA9IHtcbiAgbG9hZGluZzogU2lnbmFsPGJvb2xlYW4+O1xuICBsb2FkZWQ6IFNpZ25hbDxib29sZWFuPjtcbiAgZXJyb3I6IFNpZ25hbDxzdHJpbmcgfCBudWxsPjtcbn07XG5cbmV4cG9ydCB0eXBlIE5hbWVkQ2FsbFN0YXRlU2lnbmFsczxQcm9wIGV4dGVuZHMgc3RyaW5nPiA9IHtcbiAgW0sgaW4ga2V5b2YgQ2FsbFN0YXRlU2lnbmFscyBhcyBQcm9wIGV4dGVuZHMgJydcbiAgICA/IGAke1Byb3B9JHtLfWBcbiAgICA6IGAke1Byb3B9JHtDYXBpdGFsaXplPEs+fWBdOiBDYWxsU3RhdGVTaWduYWxzW0tdO1xufTtcblxuZXhwb3J0IHR5cGUgU2V0Q2FsbFN0YXRlPFByb3AgZXh0ZW5kcyBzdHJpbmcgfCB1bmRlZmluZWQ+ID0gUHJvcCBleHRlbmRzIHN0cmluZ1xuICA/IE5hbWVkQ2FsbFN0YXRlU2xpY2U8UHJvcD5cbiAgOiBDYWxsU3RhdGVTbGljZTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2ZUNhbGxTdGF0ZUtleXM8Q29sbGVjdGlvbiBleHRlbmRzIHN0cmluZz4oXG4gIGNvbGxlY3Rpb24/OiBDb2xsZWN0aW9uLFxuKSB7XG4gIHJldHVybiB7XG4gICAgY2FsbFN0YXRlS2V5OiBjb2xsZWN0aW9uID8gYCR7Y29sbGVjdGlvbn1DYWxsU3RhdGVgIDogJ2NhbGxTdGF0ZScsXG4gICAgbG9hZGluZ0tleTogY29sbGVjdGlvbiA/IGAke2NvbGxlY3Rpb259TG9hZGluZ2AgOiAnbG9hZGluZycsXG4gICAgbG9hZGVkS2V5OiBjb2xsZWN0aW9uID8gYCR7Y29sbGVjdGlvbn1Mb2FkZWRgIDogJ2xvYWRlZCcsXG4gICAgZXJyb3JLZXk6IGNvbGxlY3Rpb24gPyBgJHtjb2xsZWN0aW9ufUVycm9yYCA6ICdlcnJvcicsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDYWxsU3RhdGVLZXlzKGNvbmZpZz86IHsgY29sbGVjdGlvbj86IHN0cmluZyB9KSB7XG4gIGNvbnN0IHByb3AgPSBjb25maWc/LmNvbGxlY3Rpb247XG4gIHJldHVybiBkZXJpdmVDYWxsU3RhdGVLZXlzKHByb3ApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sbGVjdGlvbkFycmF5KFxuICBjb25maWc6IHsgY29sbGVjdGlvbj86IHN0cmluZyB9IHwgeyBjb2xsZWN0aW9ucz86IHN0cmluZ1tdIH0sXG4pIHtcbiAgcmV0dXJuICdjb2xsZWN0aW9ucycgaW4gY29uZmlnXG4gICAgPyBjb25maWcuY29sbGVjdGlvbnNcbiAgICA6ICdjb2xsZWN0aW9uJyBpbiBjb25maWcgJiYgY29uZmlnLmNvbGxlY3Rpb25cbiAgICAgID8gW2NvbmZpZy5jb2xsZWN0aW9uXVxuICAgICAgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoQ2FsbFN0YXRlPENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+KGNvbmZpZzoge1xuICBjb2xsZWN0aW9uczogQ29sbGVjdGlvbltdO1xufSk6IFNpZ25hbFN0b3JlRmVhdHVyZTxcbiAgRW1wdHlGZWF0dXJlUmVzdWx0LFxuICBFbXB0eUZlYXR1cmVSZXN1bHQgJiB7XG4gICAgc3RhdGU6IE5hbWVkQ2FsbFN0YXRlU2xpY2U8Q29sbGVjdGlvbj47XG4gICAgcHJvcHM6IE5hbWVkQ2FsbFN0YXRlU2lnbmFsczxDb2xsZWN0aW9uPjtcbiAgfVxuPjtcbmV4cG9ydCBmdW5jdGlvbiB3aXRoQ2FsbFN0YXRlPENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+KGNvbmZpZzoge1xuICBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uO1xufSk6IFNpZ25hbFN0b3JlRmVhdHVyZTxcbiAgRW1wdHlGZWF0dXJlUmVzdWx0LFxuICBFbXB0eUZlYXR1cmVSZXN1bHQgJiB7XG4gICAgc3RhdGU6IE5hbWVkQ2FsbFN0YXRlU2xpY2U8Q29sbGVjdGlvbj47XG4gICAgcHJvcHM6IE5hbWVkQ2FsbFN0YXRlU2lnbmFsczxDb2xsZWN0aW9uPjtcbiAgfVxuPjtcbmV4cG9ydCBmdW5jdGlvbiB3aXRoQ2FsbFN0YXRlKCk6IFNpZ25hbFN0b3JlRmVhdHVyZTxcbiAgRW1wdHlGZWF0dXJlUmVzdWx0LFxuICBFbXB0eUZlYXR1cmVSZXN1bHQgJiB7XG4gICAgc3RhdGU6IENhbGxTdGF0ZVNsaWNlO1xuICAgIHByb3BzOiBDYWxsU3RhdGVTaWduYWxzO1xuICB9XG4+O1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhDYWxsU3RhdGU8Q29sbGVjdGlvbiBleHRlbmRzIHN0cmluZz4oXG4gIGNvbmZpZz86XG4gICAgfCB7XG4gICAgICAgIGNvbGxlY3Rpb246IENvbGxlY3Rpb247XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uW107XG4gICAgICB9LFxuKTogU2lnbmFsU3RvcmVGZWF0dXJlIHtcbiAgcmV0dXJuIHNpZ25hbFN0b3JlRmVhdHVyZShcbiAgICB3aXRoU3RhdGUoKCkgPT4ge1xuICAgICAgaWYgKCFjb25maWcpIHtcbiAgICAgICAgcmV0dXJuIHsgY2FsbFN0YXRlOiAnaW5pdCcgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbGxlY3Rpb25zID0gZ2V0Q29sbGVjdGlvbkFycmF5KGNvbmZpZyk7XG4gICAgICBpZiAoY29sbGVjdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25zLnJlZHVjZShcbiAgICAgICAgICAoYWNjLCBjdXIpID0+ICh7XG4gICAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgICAuLi57IFtjdXIgPyBgJHtjdXJ9Q2FsbFN0YXRlYCA6ICdjYWxsU3RhdGUnXTogJ2luaXQnIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAge30sXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IGNhbGxTdGF0ZTogJ2luaXQnIH07XG4gICAgfSksXG4gICAgd2l0aENvbXB1dGVkKChzdGF0ZTogUmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+PikgPT4ge1xuICAgICAgaWYgKGNvbmZpZykge1xuICAgICAgICBjb25zdCBjb2xsZWN0aW9ucyA9IGdldENvbGxlY3Rpb25BcnJheShjb25maWcpO1xuICAgICAgICBpZiAoY29sbGVjdGlvbnMpIHtcbiAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbnMucmVkdWNlPFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KFxuICAgICAgICAgICAgKGFjYywgY3VyOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgeyBjYWxsU3RhdGVLZXksIGVycm9yS2V5LCBsb2FkZWRLZXksIGxvYWRpbmdLZXkgfSA9XG4gICAgICAgICAgICAgICAgZGVyaXZlQ2FsbFN0YXRlS2V5cyhjdXIpO1xuICAgICAgICAgICAgICBjb25zdCBjYWxsU3RhdGUgPSBzdGF0ZVtjYWxsU3RhdGVLZXldIGFzIFNpZ25hbDxDYWxsU3RhdGU+O1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmFjYyxcbiAgICAgICAgICAgICAgICBbbG9hZGluZ0tleV06IGNvbXB1dGVkKCgpID0+IGNhbGxTdGF0ZSgpID09PSAnbG9hZGluZycpLFxuICAgICAgICAgICAgICAgIFtsb2FkZWRLZXldOiBjb21wdXRlZCgoKSA9PiBjYWxsU3RhdGUoKSA9PT0gJ2xvYWRlZCcpLFxuICAgICAgICAgICAgICAgIFtlcnJvcktleV06IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBjYWxsU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgPyB2LmVycm9yIDogbnVsbDtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB7IGNhbGxTdGF0ZUtleSwgZXJyb3JLZXksIGxvYWRlZEtleSwgbG9hZGluZ0tleSB9ID1cbiAgICAgICAgZGVyaXZlQ2FsbFN0YXRlS2V5cygpO1xuICAgICAgY29uc3QgY2FsbFN0YXRlID0gc3RhdGVbY2FsbFN0YXRlS2V5XSBhcyBTaWduYWw8Q2FsbFN0YXRlPjtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtsb2FkaW5nS2V5XTogY29tcHV0ZWQoKCkgPT4gY2FsbFN0YXRlKCkgPT09ICdsb2FkaW5nJyksXG4gICAgICAgIFtsb2FkZWRLZXldOiBjb21wdXRlZCgoKSA9PiBjYWxsU3RhdGUoKSA9PT0gJ2xvYWRlZCcpLFxuICAgICAgICBbZXJyb3JLZXldOiBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdiA9IGNhbGxTdGF0ZSgpO1xuICAgICAgICAgIHJldHVybiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgPyB2LmVycm9yIDogbnVsbDtcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH0pLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0TG9hZGluZzxQcm9wIGV4dGVuZHMgc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPihcbiAgcHJvcD86IFByb3AsXG4pOiBTZXRDYWxsU3RhdGU8UHJvcD4ge1xuICBpZiAocHJvcCkge1xuICAgIHJldHVybiB7IFtgJHtwcm9wfUNhbGxTdGF0ZWBdOiAnbG9hZGluZycgfSBhcyBTZXRDYWxsU3RhdGU8UHJvcD47XG4gIH1cblxuICByZXR1cm4geyBjYWxsU3RhdGU6ICdsb2FkaW5nJyB9IGFzIFNldENhbGxTdGF0ZTxQcm9wPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldExvYWRlZDxQcm9wIGV4dGVuZHMgc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPihcbiAgcHJvcD86IFByb3AsXG4pOiBTZXRDYWxsU3RhdGU8UHJvcD4ge1xuICBpZiAocHJvcCkge1xuICAgIHJldHVybiB7IFtgJHtwcm9wfUNhbGxTdGF0ZWBdOiAnbG9hZGVkJyB9IGFzIFNldENhbGxTdGF0ZTxQcm9wPjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geyBjYWxsU3RhdGU6ICdsb2FkZWQnIH0gYXMgU2V0Q2FsbFN0YXRlPFByb3A+O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRFcnJvcjxQcm9wIGV4dGVuZHMgc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPihcbiAgZXJyb3I6IHVua25vd24sXG4gIHByb3A/OiBQcm9wLFxuKTogU2V0Q2FsbFN0YXRlPFByb3A+IHtcbiAgbGV0IGVycm9yTWVzc2FnZTogc3RyaW5nO1xuXG4gIGlmICghZXJyb3IpIHtcbiAgICBlcnJvck1lc3NhZ2UgPSAnJztcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnICYmICdtZXNzYWdlJyBpbiBlcnJvcikge1xuICAgIGVycm9yTWVzc2FnZSA9IFN0cmluZyhlcnJvci5tZXNzYWdlKTtcbiAgfSBlbHNlIHtcbiAgICBlcnJvck1lc3NhZ2UgPSBTdHJpbmcoZXJyb3IpO1xuICB9XG5cbiAgaWYgKHByb3ApIHtcbiAgICByZXR1cm4ge1xuICAgICAgW2Ake3Byb3B9Q2FsbFN0YXRlYF06IHsgZXJyb3I6IGVycm9yTWVzc2FnZSB9LFxuICAgIH0gYXMgU2V0Q2FsbFN0YXRlPFByb3A+O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7IGNhbGxTdGF0ZTogeyBlcnJvcjogZXJyb3JNZXNzYWdlIH0gfSBhcyBTZXRDYWxsU3RhdGU8UHJvcD47XG4gIH1cbn1cbiJdfQ==","import { computed, inject } from '@angular/core';\nimport { patchState, signalStoreFeature, withComputed, withMethods, withState, } from '@ngrx/signals';\nimport { addEntity, removeEntity, setAllEntities, updateEntity, } from '@ngrx/signals/entities';\nimport { getCallStateKeys, setError, setLoaded, setLoading, } from './with-call-state';\nexport function capitalize(str) {\n return str ? str[0].toUpperCase() + str.substring(1) : str;\n}\nexport function getDataServiceKeys(options) {\n const filterKey = options.collection\n ? `${options.collection}Filter`\n : 'filter';\n const selectedIdsKey = options.collection\n ? `selected${capitalize(options.collection)}Ids`\n : 'selectedIds';\n const selectedEntitiesKey = options.collection\n ? `selected${capitalize(options.collection)}Entities`\n : 'selectedEntities';\n const updateFilterKey = options.collection\n ? `update${capitalize(options.collection)}Filter`\n : 'updateFilter';\n const updateSelectedKey = options.collection\n ? `updateSelected${capitalize(options.collection)}Entities`\n : 'updateSelected';\n const loadKey = options.collection\n ? `load${capitalize(options.collection)}Entities`\n : 'load';\n const currentKey = options.collection\n ? `current${capitalize(options.collection)}`\n : 'current';\n const loadByIdKey = options.collection\n ? `load${capitalize(options.collection)}ById`\n : 'loadById';\n const setCurrentKey = options.collection\n ? `setCurrent${capitalize(options.collection)}`\n : 'setCurrent';\n const createKey = options.collection\n ? `create${capitalize(options.collection)}`\n : 'create';\n const updateKey = options.collection\n ? `update${capitalize(options.collection)}`\n : 'update';\n const updateAllKey = options.collection\n ? `updateAll${capitalize(options.collection)}`\n : 'updateAll';\n const deleteKey = options.collection\n ? `delete${capitalize(options.collection)}`\n : 'delete';\n // TODO: Take these from @ngrx/signals/entities, when they are exported\n const entitiesKey = options.collection\n ? `${options.collection}Entities`\n : 'entities';\n const entityMapKey = options.collection\n ? `${options.collection}EntityMap`\n : 'entityMap';\n const idsKey = options.collection ? `${options.collection}Ids` : 'ids';\n return {\n filterKey,\n selectedIdsKey,\n selectedEntitiesKey,\n updateFilterKey,\n updateSelectedKey,\n loadKey,\n entitiesKey,\n entityMapKey,\n idsKey,\n currentKey,\n loadByIdKey,\n setCurrentKey,\n createKey,\n updateKey,\n updateAllKey,\n deleteKey,\n };\n}\nexport function withDataService(options) {\n const { dataServiceType, filter, collection: prefix } = options;\n const { entitiesKey, filterKey, loadKey, selectedEntitiesKey, selectedIdsKey, updateFilterKey, updateSelectedKey, currentKey, createKey, updateKey, updateAllKey, deleteKey, loadByIdKey, setCurrentKey, } = getDataServiceKeys(options);\n const { callStateKey } = getCallStateKeys({ collection: prefix });\n return signalStoreFeature(withState(() => ({\n [filterKey]: filter,\n [selectedIdsKey]: {},\n [currentKey]: undefined,\n })), withComputed((store) => {\n const entities = store[entitiesKey];\n const selectedIds = store[selectedIdsKey];\n return {\n [selectedEntitiesKey]: computed(() => entities().filter((e) => selectedIds()[e.id])),\n };\n }), withMethods((store) => {\n const dataService = inject(dataServiceType);\n return {\n [updateFilterKey]: (filter) => {\n patchState(store, { [filterKey]: filter });\n },\n [updateSelectedKey]: (id, selected) => {\n patchState(store, (state) => ({\n [selectedIdsKey]: {\n ...state[selectedIdsKey],\n [id]: selected,\n },\n }));\n },\n [loadKey]: async () => {\n const filter = store[filterKey];\n (() => store[callStateKey] && patchState(store, setLoading(prefix)))();\n try {\n const result = await dataService.load(filter());\n patchState(store, prefix\n ? setAllEntities(result, { collection: prefix })\n : setAllEntities(result));\n (() => store[callStateKey] && patchState(store, setLoaded(prefix)))();\n }\n catch (e) {\n (() => store[callStateKey] &&\n patchState(store, setError(e, prefix)))();\n throw e;\n }\n },\n [loadByIdKey]: async (id) => {\n (() => store[callStateKey] && patchState(store, setLoading(prefix)))();\n try {\n const current = await dataService.loadById(id);\n (() => store[callStateKey] && patchState(store, setLoaded(prefix)))();\n patchState(store, { [currentKey]: current });\n }\n catch (e) {\n (() => store[callStateKey] &&\n patchState(store, setError(e, prefix)))();\n throw e;\n }\n },\n [setCurrentKey]: (current) => {\n patchState(store, { [currentKey]: current });\n },\n [createKey]: async (entity) => {\n patchState(store, { [currentKey]: entity });\n (() => store[callStateKey] && patchState(store, setLoading(prefix)))();\n try {\n const created = await dataService.create(entity);\n patchState(store, { [currentKey]: created });\n patchState(store, prefix\n ? addEntity(created, { collection: prefix })\n : addEntity(created));\n (() => store[callStateKey] && patchState(store, setLoaded(prefix)))();\n }\n catch (e) {\n (() => store[callStateKey] &&\n patchState(store, setError(e, prefix)))();\n throw e;\n }\n },\n [updateKey]: async (entity) => {\n patchState(store, { [currentKey]: entity });\n (() => store[callStateKey] && patchState(store, setLoading(prefix)))();\n try {\n const updated = await dataService.update(entity);\n patchState(store, { [currentKey]: updated });\n const updateArg = {\n id: updated.id,\n changes: updated,\n };\n const updater = (collection) => updateEntity(updateArg, { collection });\n patchState(store, prefix ? updater(prefix) : updateEntity(updateArg));\n (() => store[callStateKey] && patchState(store, setLoaded(prefix)))();\n }\n catch (e) {\n (() => store[callStateKey] &&\n patchState(store, setError(e, prefix)))();\n throw e;\n }\n },\n [updateAllKey]: async (entities) => {\n (() => store[callStateKey] && patchState(store, setLoading(prefix)))();\n try {\n const result = await dataService.updateAll(entities);\n patchState(store, prefix\n ? setAllEntities(result, { collection: prefix })\n : setAllEntities(result));\n (() => store[callStateKey] && patchState(store, setLoaded(prefix)))();\n }\n catch (e) {\n (() => store[callStateKey] &&\n patchState(store, setError(e, prefix)))();\n throw e;\n }\n },\n [deleteKey]: async (entity) => {\n patchState(store, { [currentKey]: entity });\n (() => store[callStateKey] && patchState(store, setLoading(prefix)))();\n try {\n await dataService.delete(entity);\n patchState(store, { [currentKey]: undefined });\n patchState(store, prefix\n ? removeEntity(entity.id, { collection: prefix })\n : removeEntity(entity.id));\n (() => store[callStateKey] && patchState(store, setLoaded(prefix)))();\n }\n catch (e) {\n (() => store[callStateKey] &&\n patchState(store, setError(e, prefix)))();\n throw e;\n }\n },\n };\n }));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kYXRhLXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL3dpdGgtZGF0YS1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBeUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBSUwsVUFBVSxFQUNWLGtCQUFrQixFQUNsQixZQUFZLEVBQ1osV0FBVyxFQUNYLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsU0FBUyxFQUNULFlBQVksRUFDWixjQUFjLEVBQ2QsWUFBWSxHQUNiLE1BQU0sd0JBQXdCLENBQUM7QUFFaEMsT0FBTyxFQUdMLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IsU0FBUyxFQUNULFVBQVUsR0FDWCxNQUFNLG1CQUFtQixDQUFDO0FBbUIzQixNQUFNLFVBQVUsVUFBVSxDQUFDLEdBQVc7SUFDcEMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDN0QsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxPQUFnQztJQUNqRSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsVUFBVTtRQUNsQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsVUFBVSxRQUFRO1FBQy9CLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDYixNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsVUFBVTtRQUN2QyxDQUFDLENBQUMsV0FBVyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLO1FBQ2hELENBQUMsQ0FBQyxhQUFhLENBQUM7SUFDbEIsTUFBTSxtQkFBbUIsR0FBRyxPQUFPLENBQUMsVUFBVTtRQUM1QyxDQUFDLENBQUMsV0FBVyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVO1FBQ3JELENBQUMsQ0FBQyxrQkFBa0IsQ0FBQztJQUV2QixNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsVUFBVTtRQUN4QyxDQUFDLENBQUMsU0FBUyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRO1FBQ2pELENBQUMsQ0FBQyxjQUFjLENBQUM7SUFDbkIsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsVUFBVTtRQUMxQyxDQUFDLENBQUMsaUJBQWlCLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVU7UUFDM0QsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO0lBQ3JCLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxVQUFVO1FBQ2hDLENBQUMsQ0FBQyxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVU7UUFDakQsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUVYLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVO1FBQ25DLENBQUMsQ0FBQyxVQUFVLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7UUFDNUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNkLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxVQUFVO1FBQ3BDLENBQUMsQ0FBQyxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU07UUFDN0MsQ0FBQyxDQUFDLFVBQVUsQ0FBQztJQUNmLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxVQUFVO1FBQ3RDLENBQUMsQ0FBQyxhQUFhLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7UUFDL0MsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUNqQixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsVUFBVTtRQUNsQyxDQUFDLENBQUMsU0FBUyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1FBQzNDLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDYixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsVUFBVTtRQUNsQyxDQUFDLENBQUMsU0FBUyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1FBQzNDLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDYixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsVUFBVTtRQUNyQyxDQUFDLENBQUMsWUFBWSxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1FBQzlDLENBQUMsQ0FBQyxXQUFXLENBQUM7SUFDaEIsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFVBQVU7UUFDbEMsQ0FBQyxDQUFDLFNBQVMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUMzQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBRWIsdUVBQXVFO0lBQ3ZFLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxVQUFVO1FBQ3BDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxVQUFVLFVBQVU7UUFDakMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztJQUNmLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxVQUFVO1FBQ3JDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxVQUFVLFdBQVc7UUFDbEMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztJQUNoQixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxVQUFVLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBRXZFLE9BQU87UUFDTCxTQUFTO1FBQ1QsY0FBYztRQUNkLG1CQUFtQjtRQUNuQixlQUFlO1FBQ2YsaUJBQWlCO1FBQ2pCLE9BQU87UUFDUCxXQUFXO1FBQ1gsWUFBWTtRQUNaLE1BQU07UUFFTixVQUFVO1FBQ1YsV0FBVztRQUNYLGFBQWE7UUFDYixTQUFTO1FBQ1QsU0FBUztRQUNULFlBQVk7UUFDWixTQUFTO0tBQ1YsQ0FBQztBQUNKLENBQUM7QUF5R0QsTUFBTSxVQUFVLGVBQWUsQ0FJN0IsT0FJRDtJQUVDLE1BQU0sRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDaEUsTUFBTSxFQUNKLFdBQVcsRUFDWCxTQUFTLEVBQ1QsT0FBTyxFQUNQLG1CQUFtQixFQUNuQixjQUFjLEVBQ2QsZUFBZSxFQUNmLGlCQUFpQixFQUVqQixVQUFVLEVBQ1YsU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ1osU0FBUyxFQUNULFdBQVcsRUFDWCxhQUFhLEdBQ2QsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUVoQyxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUVsRSxPQUFPLGtCQUFrQixDQUN2QixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNmLENBQUMsU0FBUyxDQUFDLEVBQUUsTUFBTTtRQUNuQixDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQStCO1FBQ2pELENBQUMsVUFBVSxDQUFDLEVBQUUsU0FBMEI7S0FDekMsQ0FBQyxDQUFDLEVBQ0gsWUFBWSxDQUFDLENBQUMsS0FBOEIsRUFBRSxFQUFFO1FBQzlDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQWdCLENBQUM7UUFDbkQsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FFdkMsQ0FBQztRQUVGLE9BQU87WUFDTCxDQUFDLG1CQUFtQixDQUFDLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUNuQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUM5QztTQUNGLENBQUM7SUFDSixDQUFDLENBQUMsRUFDRixXQUFXLENBQ1QsQ0FBQyxLQUE0RCxFQUFFLEVBQUU7UUFDL0QsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzVDLE9BQU87WUFDTCxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsTUFBUyxFQUFRLEVBQUU7Z0JBQ3JDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDN0MsQ0FBQztZQUNELENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLEVBQVksRUFBRSxRQUFpQixFQUFRLEVBQUU7Z0JBQzdELFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUE4QixFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUNyRCxDQUFDLGNBQWMsQ0FBQyxFQUFFO3dCQUNoQixHQUFJLEtBQUssQ0FBQyxjQUFjLENBQStCO3dCQUN2RCxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVE7cUJBQ2Y7aUJBQ0YsQ0FBQyxDQUFDLENBQUM7WUFDTixDQUFDO1lBQ0QsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLElBQW1CLEVBQUU7Z0JBQ25DLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQWMsQ0FBQztnQkFDN0MsQ0FBQyxHQUFHLEVBQUUsQ0FDSixLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBRWxFLElBQUksQ0FBQztvQkFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztvQkFDaEQsVUFBVSxDQUNSLEtBQUssRUFDTCxNQUFNO3dCQUNKLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDO3dCQUNoRCxDQUFDLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUMzQixDQUFDO29CQUNGLENBQUMsR0FBRyxFQUFFLENBQ0osS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNuRSxDQUFDO2dCQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ1gsQ0FBQyxHQUFHLEVBQUUsQ0FDSixLQUFLLENBQUMsWUFBWSxDQUFDO3dCQUNuQixVQUFVLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQzVDLE1BQU0sQ0FBQyxDQUFDO2dCQUNWLENBQUM7WUFDSCxDQUFDO1lBQ0QsQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBWSxFQUFpQixFQUFFO2dCQUNuRCxDQUFDLEdBQUcsRUFBRSxDQUNKLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFFbEUsSUFBSSxDQUFDO29CQUNILE1BQU0sT0FBTyxHQUFHLE1BQU0sV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDL0MsQ0FBQyxHQUFHLEVBQUUsQ0FDSixLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ2pFLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQy9DLENBQUM7Z0JBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDWCxDQUFDLEdBQUcsRUFBRSxDQUNKLEtBQUssQ0FBQyxZQUFZLENBQUM7d0JBQ25CLFVBQVUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDNUMsTUFBTSxDQUFDLENBQUM7Z0JBQ1YsQ0FBQztZQUNILENBQUM7WUFDRCxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsT0FBVSxFQUFRLEVBQUU7Z0JBQ3BDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDL0MsQ0FBQztZQUNELENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQVMsRUFBaUIsRUFBRTtnQkFDOUMsVUFBVSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztnQkFDNUMsQ0FBQyxHQUFHLEVBQUUsQ0FDSixLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBRWxFLElBQUksQ0FBQztvQkFDSCxNQUFNLE9BQU8sR0FBRyxNQUFNLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ2pELFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7b0JBQzdDLFVBQVUsQ0FDUixLQUFLLEVBQ0wsTUFBTTt3QkFDSixDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQzt3QkFDNUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FDdkIsQ0FBQztvQkFDRixDQUFDLEdBQUcsRUFBRSxDQUNKLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDbkUsQ0FBQztnQkFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUNYLENBQUMsR0FBRyxFQUFFLENBQ0osS0FBSyxDQUFDLFlBQVksQ0FBQzt3QkFDbkIsVUFBVSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUM1QyxNQUFNLENBQUMsQ0FBQztnQkFDVixDQUFDO1lBQ0gsQ0FBQztZQUNELENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQVMsRUFBaUIsRUFBRTtnQkFDOUMsVUFBVSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztnQkFDNUMsQ0FBQyxHQUFHLEVBQUUsQ0FDSixLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBRWxFLElBQUksQ0FBQztvQkFDSCxNQUFNLE9BQU8sR0FBRyxNQUFNLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ2pELFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7b0JBRTdDLE1BQU0sU0FBUyxHQUFHO3dCQUNoQixFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUU7d0JBQ2QsT0FBTyxFQUFFLE9BQU87cUJBQ2pCLENBQUM7b0JBRUYsTUFBTSxPQUFPLEdBQUcsQ0FBQyxVQUFrQixFQUFFLEVBQUUsQ0FDckMsWUFBWSxDQUFDLFNBQVMsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7b0JBRTFDLFVBQVUsQ0FDUixLQUFLLEVBQ0wsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FDbkQsQ0FBQztvQkFDRixDQUFDLEdBQUcsRUFBRSxDQUNKLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDbkUsQ0FBQztnQkFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUNYLENBQUMsR0FBRyxFQUFFLENBQ0osS0FBSyxDQUFDLFlBQVksQ0FBQzt3QkFDbkIsVUFBVSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUM1QyxNQUFNLENBQUMsQ0FBQztnQkFDVixDQUFDO1lBQ0gsQ0FBQztZQUNELENBQUMsWUFBWSxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQWEsRUFBaUIsRUFBRTtnQkFDckQsQ0FBQyxHQUFHLEVBQUUsQ0FDSixLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBRWxFLElBQUksQ0FBQztvQkFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3JELFVBQVUsQ0FDUixLQUFLLEVBQ0wsTUFBTTt3QkFDSixDQUFDLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQzt3QkFDaEQsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FDM0IsQ0FBQztvQkFDRixDQUFDLEdBQUcsRUFBRSxDQUNKLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDbkUsQ0FBQztnQkFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUNYLENBQUMsR0FBRyxFQUFFLENBQ0osS0FBSyxDQUFDLFlBQVksQ0FBQzt3QkFDbkIsVUFBVSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUM1QyxNQUFNLENBQUMsQ0FBQztnQkFDVixDQUFDO1lBQ0gsQ0FBQztZQUNELENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQVMsRUFBaUIsRUFBRTtnQkFDOUMsVUFBVSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztnQkFDNUMsQ0FBQyxHQUFHLEVBQUUsQ0FDSixLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBRWxFLElBQUksQ0FBQztvQkFDSCxNQUFNLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ2pDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7b0JBQy9DLFVBQVUsQ0FDUixLQUFLLEVBQ0wsTUFBTTt3QkFDSixDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLENBQUM7d0JBQ2pELENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUM1QixDQUFDO29CQUNGLENBQUMsR0FBRyxFQUFFLENBQ0osS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNuRSxDQUFDO2dCQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ1gsQ0FBQyxHQUFHLEVBQUUsQ0FDSixLQUFLLENBQUMsWUFBWSxDQUFDO3dCQUNuQixVQUFVLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQzVDLE1BQU0sQ0FBQyxDQUFDO2dCQUNWLENBQUM7WUFDSCxDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUMsQ0FDRixDQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvdmlkZXJUb2tlbiwgU2lnbmFsLCBjb21wdXRlZCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBFbXB0eUZlYXR1cmVSZXN1bHQsXG4gIFNpZ25hbFN0b3JlRmVhdHVyZSxcbiAgV3JpdGFibGVTdGF0ZVNvdXJjZSxcbiAgcGF0Y2hTdGF0ZSxcbiAgc2lnbmFsU3RvcmVGZWF0dXJlLFxuICB3aXRoQ29tcHV0ZWQsXG4gIHdpdGhNZXRob2RzLFxuICB3aXRoU3RhdGUsXG59IGZyb20gJ0BuZ3J4L3NpZ25hbHMnO1xuaW1wb3J0IHtcbiAgRW50aXR5SWQsXG4gIE5hbWVkRW50aXR5U3RhdGUsXG4gIGFkZEVudGl0eSxcbiAgcmVtb3ZlRW50aXR5LFxuICBzZXRBbGxFbnRpdGllcyxcbiAgdXBkYXRlRW50aXR5LFxufSBmcm9tICdAbmdyeC9zaWduYWxzL2VudGl0aWVzJztcbmltcG9ydCB7IEVudGl0eVN0YXRlIH0gZnJvbSAnLi9zaGFyZWQvc2lnbmFsLXN0b3JlLW1vZGVscyc7XG5pbXBvcnQge1xuICBDYWxsU3RhdGUsXG4gIE5hbWVkQ2FsbFN0YXRlU2xpY2UsXG4gIGdldENhbGxTdGF0ZUtleXMsXG4gIHNldEVycm9yLFxuICBzZXRMb2FkZWQsXG4gIHNldExvYWRpbmcsXG59IGZyb20gJy4vd2l0aC1jYWxsLXN0YXRlJztcblxuZXhwb3J0IHR5cGUgRmlsdGVyID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5leHBvcnQgdHlwZSBFbnRpdHkgPSB7IGlkOiBFbnRpdHlJZCB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFTZXJ2aWNlPEUgZXh0ZW5kcyBFbnRpdHksIEYgZXh0ZW5kcyBGaWx0ZXI+IHtcbiAgbG9hZChmaWx0ZXI6IEYpOiBQcm9taXNlPEVbXT47XG5cbiAgbG9hZEJ5SWQoaWQ6IEVudGl0eUlkKTogUHJvbWlzZTxFPjtcblxuICBjcmVhdGUoZW50aXR5OiBFKTogUHJvbWlzZTxFPjtcblxuICB1cGRhdGUoZW50aXR5OiBFKTogUHJvbWlzZTxFPjtcblxuICB1cGRhdGVBbGwoZW50aXR5OiBFW10pOiBQcm9taXNlPEVbXT47XG5cbiAgZGVsZXRlKGVudGl0eTogRSk6IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYXBpdGFsaXplKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0ciA/IHN0clswXS50b1VwcGVyQ2FzZSgpICsgc3RyLnN1YnN0cmluZygxKSA6IHN0cjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGFTZXJ2aWNlS2V5cyhvcHRpb25zOiB7IGNvbGxlY3Rpb24/OiBzdHJpbmcgfSkge1xuICBjb25zdCBmaWx0ZXJLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb25cbiAgICA/IGAke29wdGlvbnMuY29sbGVjdGlvbn1GaWx0ZXJgXG4gICAgOiAnZmlsdGVyJztcbiAgY29uc3Qgc2VsZWN0ZWRJZHNLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb25cbiAgICA/IGBzZWxlY3RlZCR7Y2FwaXRhbGl6ZShvcHRpb25zLmNvbGxlY3Rpb24pfUlkc2BcbiAgICA6ICdzZWxlY3RlZElkcyc7XG4gIGNvbnN0IHNlbGVjdGVkRW50aXRpZXNLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb25cbiAgICA/IGBzZWxlY3RlZCR7Y2FwaXRhbGl6ZShvcHRpb25zLmNvbGxlY3Rpb24pfUVudGl0aWVzYFxuICAgIDogJ3NlbGVjdGVkRW50aXRpZXMnO1xuXG4gIGNvbnN0IHVwZGF0ZUZpbHRlcktleSA9IG9wdGlvbnMuY29sbGVjdGlvblxuICAgID8gYHVwZGF0ZSR7Y2FwaXRhbGl6ZShvcHRpb25zLmNvbGxlY3Rpb24pfUZpbHRlcmBcbiAgICA6ICd1cGRhdGVGaWx0ZXInO1xuICBjb25zdCB1cGRhdGVTZWxlY3RlZEtleSA9IG9wdGlvbnMuY29sbGVjdGlvblxuICAgID8gYHVwZGF0ZVNlbGVjdGVkJHtjYXBpdGFsaXplKG9wdGlvbnMuY29sbGVjdGlvbil9RW50aXRpZXNgXG4gICAgOiAndXBkYXRlU2VsZWN0ZWQnO1xuICBjb25zdCBsb2FkS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uXG4gICAgPyBgbG9hZCR7Y2FwaXRhbGl6ZShvcHRpb25zLmNvbGxlY3Rpb24pfUVudGl0aWVzYFxuICAgIDogJ2xvYWQnO1xuXG4gIGNvbnN0IGN1cnJlbnRLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb25cbiAgICA/IGBjdXJyZW50JHtjYXBpdGFsaXplKG9wdGlvbnMuY29sbGVjdGlvbil9YFxuICAgIDogJ2N1cnJlbnQnO1xuICBjb25zdCBsb2FkQnlJZEtleSA9IG9wdGlvbnMuY29sbGVjdGlvblxuICAgID8gYGxvYWQke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1CeUlkYFxuICAgIDogJ2xvYWRCeUlkJztcbiAgY29uc3Qgc2V0Q3VycmVudEtleSA9IG9wdGlvbnMuY29sbGVjdGlvblxuICAgID8gYHNldEN1cnJlbnQke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1gXG4gICAgOiAnc2V0Q3VycmVudCc7XG4gIGNvbnN0IGNyZWF0ZUtleSA9IG9wdGlvbnMuY29sbGVjdGlvblxuICAgID8gYGNyZWF0ZSR7Y2FwaXRhbGl6ZShvcHRpb25zLmNvbGxlY3Rpb24pfWBcbiAgICA6ICdjcmVhdGUnO1xuICBjb25zdCB1cGRhdGVLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb25cbiAgICA/IGB1cGRhdGUke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1gXG4gICAgOiAndXBkYXRlJztcbiAgY29uc3QgdXBkYXRlQWxsS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uXG4gICAgPyBgdXBkYXRlQWxsJHtjYXBpdGFsaXplKG9wdGlvbnMuY29sbGVjdGlvbil9YFxuICAgIDogJ3VwZGF0ZUFsbCc7XG4gIGNvbnN0IGRlbGV0ZUtleSA9IG9wdGlvbnMuY29sbGVjdGlvblxuICAgID8gYGRlbGV0ZSR7Y2FwaXRhbGl6ZShvcHRpb25zLmNvbGxlY3Rpb24pfWBcbiAgICA6ICdkZWxldGUnO1xuXG4gIC8vIFRPRE86IFRha2UgdGhlc2UgZnJvbSBAbmdyeC9zaWduYWxzL2VudGl0aWVzLCB3aGVuIHRoZXkgYXJlIGV4cG9ydGVkXG4gIGNvbnN0IGVudGl0aWVzS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uXG4gICAgPyBgJHtvcHRpb25zLmNvbGxlY3Rpb259RW50aXRpZXNgXG4gICAgOiAnZW50aXRpZXMnO1xuICBjb25zdCBlbnRpdHlNYXBLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb25cbiAgICA/IGAke29wdGlvbnMuY29sbGVjdGlvbn1FbnRpdHlNYXBgXG4gICAgOiAnZW50aXR5TWFwJztcbiAgY29uc3QgaWRzS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYCR7b3B0aW9ucy5jb2xsZWN0aW9ufUlkc2AgOiAnaWRzJztcblxuICByZXR1cm4ge1xuICAgIGZpbHRlcktleSxcbiAgICBzZWxlY3RlZElkc0tleSxcbiAgICBzZWxlY3RlZEVudGl0aWVzS2V5LFxuICAgIHVwZGF0ZUZpbHRlcktleSxcbiAgICB1cGRhdGVTZWxlY3RlZEtleSxcbiAgICBsb2FkS2V5LFxuICAgIGVudGl0aWVzS2V5LFxuICAgIGVudGl0eU1hcEtleSxcbiAgICBpZHNLZXksXG5cbiAgICBjdXJyZW50S2V5LFxuICAgIGxvYWRCeUlkS2V5LFxuICAgIHNldEN1cnJlbnRLZXksXG4gICAgY3JlYXRlS2V5LFxuICAgIHVwZGF0ZUtleSxcbiAgICB1cGRhdGVBbGxLZXksXG4gICAgZGVsZXRlS2V5LFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBOYW1lZERhdGFTZXJ2aWNlU3RhdGU8XG4gIEUgZXh0ZW5kcyBFbnRpdHksXG4gIEYgZXh0ZW5kcyBGaWx0ZXIsXG4gIENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmcsXG4+ID0ge1xuICBbSyBpbiBDb2xsZWN0aW9uIGFzIGAke0t9RmlsdGVyYF06IEY7XG59ICYge1xuICBbSyBpbiBDb2xsZWN0aW9uIGFzIGBzZWxlY3RlZCR7Q2FwaXRhbGl6ZTxLPn1JZHNgXTogUmVjb3JkPEVudGl0eUlkLCBib29sZWFuPjtcbn0gJiB7XG4gIFtLIGluIENvbGxlY3Rpb24gYXMgYGN1cnJlbnQke0NhcGl0YWxpemU8Sz59YF06IEU7XG59O1xuXG5leHBvcnQgdHlwZSBEYXRhU2VydmljZVN0YXRlPEUgZXh0ZW5kcyBFbnRpdHksIEYgZXh0ZW5kcyBGaWx0ZXI+ID0ge1xuICBmaWx0ZXI6IEY7XG4gIHNlbGVjdGVkSWRzOiBSZWNvcmQ8RW50aXR5SWQsIGJvb2xlYW4+O1xuICBjdXJyZW50OiBFO1xufTtcblxuZXhwb3J0IHR5cGUgRGF0YVNlcnZpY2VDb21wdXRlZDxFIGV4dGVuZHMgRW50aXR5PiA9IHtcbiAgc2VsZWN0ZWRFbnRpdGllczogU2lnbmFsPEVbXT47XG59O1xuXG5leHBvcnQgdHlwZSBOYW1lZERhdGFTZXJ2aWNlQ29tcHV0ZWQ8XG4gIEUgZXh0ZW5kcyBFbnRpdHksXG4gIENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmcsXG4+ID0ge1xuICBbSyBpbiBDb2xsZWN0aW9uIGFzIGBzZWxlY3RlZCR7Q2FwaXRhbGl6ZTxLPn1FbnRpdGllc2BdOiBTaWduYWw8RVtdPjtcbn07XG5cbmV4cG9ydCB0eXBlIE5hbWVkRGF0YVNlcnZpY2VNZXRob2RzPFxuICBFIGV4dGVuZHMgRW50aXR5LFxuICBGIGV4dGVuZHMgRmlsdGVyLFxuICBDb2xsZWN0aW9uIGV4dGVuZHMgc3RyaW5nLFxuPiA9IHtcbiAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgdXBkYXRlJHtDYXBpdGFsaXplPEs+fUZpbHRlcmBdOiAoZmlsdGVyOiBGKSA9PiB2b2lkO1xufSAmIHtcbiAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgdXBkYXRlU2VsZWN0ZWQke0NhcGl0YWxpemU8Sz59RW50aXRpZXNgXTogKFxuICAgIGlkOiBFbnRpdHlJZCxcbiAgICBzZWxlY3RlZDogYm9vbGVhbixcbiAgKSA9PiB2b2lkO1xufSAmIHtcbiAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgbG9hZCR7Q2FwaXRhbGl6ZTxLPn1FbnRpdGllc2BdOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufSAmIHtcbiAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgc2V0Q3VycmVudCR7Q2FwaXRhbGl6ZTxLPn1gXTogKGVudGl0eTogRSkgPT4gdm9pZDtcbn0gJiB7XG4gIFtLIGluIENvbGxlY3Rpb24gYXMgYGxvYWQke0NhcGl0YWxpemU8Sz59QnlJZGBdOiAoXG4gICAgaWQ6IEVudGl0eUlkLFxuICApID0+IFByb21pc2U8dm9pZD47XG59ICYge1xuICBbSyBpbiBDb2xsZWN0aW9uIGFzIGBjcmVhdGUke0NhcGl0YWxpemU8Sz59YF06IChlbnRpdHk6IEUpID0+IFByb21pc2U8dm9pZD47XG59ICYge1xuICBbSyBpbiBDb2xsZWN0aW9uIGFzIGB1cGRhdGUke0NhcGl0YWxpemU8Sz59YF06IChlbnRpdHk6IEUpID0+IFByb21pc2U8dm9pZD47XG59ICYge1xuICBbSyBpbiBDb2xsZWN0aW9uIGFzIGB1cGRhdGVBbGwke0NhcGl0YWxpemU8Sz59YF06IChcbiAgICBlbnRpdHk6IEVbXSxcbiAgKSA9PiBQcm9taXNlPHZvaWQ+O1xufSAmIHtcbiAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgZGVsZXRlJHtDYXBpdGFsaXplPEs+fWBdOiAoZW50aXR5OiBFKSA9PiBQcm9taXNlPHZvaWQ+O1xufTtcblxuZXhwb3J0IHR5cGUgRGF0YVNlcnZpY2VNZXRob2RzPEUgZXh0ZW5kcyBFbnRpdHksIEYgZXh0ZW5kcyBGaWx0ZXI+ID0ge1xuICB1cGRhdGVGaWx0ZXI6IChmaWx0ZXI6IEYpID0+IHZvaWQ7XG4gIHVwZGF0ZVNlbGVjdGVkOiAoaWQ6IEVudGl0eUlkLCBzZWxlY3RlZDogYm9vbGVhbikgPT4gdm9pZDtcbiAgbG9hZDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBzZXRDdXJyZW50KGVudGl0eTogRSk6IHZvaWQ7XG4gIGxvYWRCeUlkKGlkOiBFbnRpdHlJZCk6IFByb21pc2U8dm9pZD47XG4gIGNyZWF0ZShlbnRpdHk6IEUpOiBQcm9taXNlPHZvaWQ+O1xuICB1cGRhdGUoZW50aXR5OiBFKTogUHJvbWlzZTx2b2lkPjtcbiAgdXBkYXRlQWxsKGVudGl0aWVzOiBFW10pOiBQcm9taXNlPHZvaWQ+O1xuICBkZWxldGUoZW50aXR5OiBFKTogUHJvbWlzZTx2b2lkPjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoRGF0YVNlcnZpY2U8XG4gIEUgZXh0ZW5kcyBFbnRpdHksXG4gIEYgZXh0ZW5kcyBGaWx0ZXIsXG4gIENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmcsXG4+KG9wdGlvbnM6IHtcbiAgZGF0YVNlcnZpY2VUeXBlOiBQcm92aWRlclRva2VuPERhdGFTZXJ2aWNlPEUsIEY+PjtcbiAgZmlsdGVyOiBGO1xuICBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uO1xufSk6IFNpZ25hbFN0b3JlRmVhdHVyZTxcbiAgRW1wdHlGZWF0dXJlUmVzdWx0ICYge1xuICAgIHN0YXRlOiBOYW1lZENhbGxTdGF0ZVNsaWNlPENvbGxlY3Rpb24+ICYgTmFtZWRFbnRpdHlTdGF0ZTxFLCBDb2xsZWN0aW9uPjtcbiAgfSxcbiAge1xuICAgIHN0YXRlOiBOYW1lZERhdGFTZXJ2aWNlU3RhdGU8RSwgRiwgQ29sbGVjdGlvbj47XG4gICAgcHJvcHM6IE5hbWVkRGF0YVNlcnZpY2VDb21wdXRlZDxFLCBDb2xsZWN0aW9uPjtcbiAgICBtZXRob2RzOiBOYW1lZERhdGFTZXJ2aWNlTWV0aG9kczxFLCBGLCBDb2xsZWN0aW9uPjtcbiAgfVxuPjtcbmV4cG9ydCBmdW5jdGlvbiB3aXRoRGF0YVNlcnZpY2U8RSBleHRlbmRzIEVudGl0eSwgRiBleHRlbmRzIEZpbHRlcj4ob3B0aW9uczoge1xuICBkYXRhU2VydmljZVR5cGU6IFByb3ZpZGVyVG9rZW48RGF0YVNlcnZpY2U8RSwgRj4+O1xuICBmaWx0ZXI6IEY7XG59KTogU2lnbmFsU3RvcmVGZWF0dXJlPFxuICBFbXB0eUZlYXR1cmVSZXN1bHQgJiB7IHN0YXRlOiB7IGNhbGxTdGF0ZTogQ2FsbFN0YXRlIH0gJiBFbnRpdHlTdGF0ZTxFPiB9LFxuICB7XG4gICAgc3RhdGU6IERhdGFTZXJ2aWNlU3RhdGU8RSwgRj47XG4gICAgcHJvcHM6IERhdGFTZXJ2aWNlQ29tcHV0ZWQ8RT47XG4gICAgbWV0aG9kczogRGF0YVNlcnZpY2VNZXRob2RzPEUsIEY+O1xuICB9XG4+O1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aERhdGFTZXJ2aWNlPFxuICBFIGV4dGVuZHMgRW50aXR5LFxuICBGIGV4dGVuZHMgRmlsdGVyLFxuICBDb2xsZWN0aW9uIGV4dGVuZHMgc3RyaW5nLFxuPihvcHRpb25zOiB7XG4gIGRhdGFTZXJ2aWNlVHlwZTogUHJvdmlkZXJUb2tlbjxEYXRhU2VydmljZTxFLCBGPj47XG4gIGZpbHRlcjogRjtcbiAgY29sbGVjdGlvbj86IENvbGxlY3Rpb247XG59KTogLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuU2lnbmFsU3RvcmVGZWF0dXJlPGFueSwgYW55PiB7XG4gIGNvbnN0IHsgZGF0YVNlcnZpY2VUeXBlLCBmaWx0ZXIsIGNvbGxlY3Rpb246IHByZWZpeCB9ID0gb3B0aW9ucztcbiAgY29uc3Qge1xuICAgIGVudGl0aWVzS2V5LFxuICAgIGZpbHRlcktleSxcbiAgICBsb2FkS2V5LFxuICAgIHNlbGVjdGVkRW50aXRpZXNLZXksXG4gICAgc2VsZWN0ZWRJZHNLZXksXG4gICAgdXBkYXRlRmlsdGVyS2V5LFxuICAgIHVwZGF0ZVNlbGVjdGVkS2V5LFxuXG4gICAgY3VycmVudEtleSxcbiAgICBjcmVhdGVLZXksXG4gICAgdXBkYXRlS2V5LFxuICAgIHVwZGF0ZUFsbEtleSxcbiAgICBkZWxldGVLZXksXG4gICAgbG9hZEJ5SWRLZXksXG4gICAgc2V0Q3VycmVudEtleSxcbiAgfSA9IGdldERhdGFTZXJ2aWNlS2V5cyhvcHRpb25zKTtcblxuICBjb25zdCB7IGNhbGxTdGF0ZUtleSB9ID0gZ2V0Q2FsbFN0YXRlS2V5cyh7IGNvbGxlY3Rpb246IHByZWZpeCB9KTtcblxuICByZXR1cm4gc2lnbmFsU3RvcmVGZWF0dXJlKFxuICAgIHdpdGhTdGF0ZSgoKSA9PiAoe1xuICAgICAgW2ZpbHRlcktleV06IGZpbHRlcixcbiAgICAgIFtzZWxlY3RlZElkc0tleV06IHt9IGFzIFJlY29yZDxFbnRpdHlJZCwgYm9vbGVhbj4sXG4gICAgICBbY3VycmVudEtleV06IHVuZGVmaW5lZCBhcyBFIHwgdW5kZWZpbmVkLFxuICAgIH0pKSxcbiAgICB3aXRoQ29tcHV0ZWQoKHN0b3JlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4ge1xuICAgICAgY29uc3QgZW50aXRpZXMgPSBzdG9yZVtlbnRpdGllc0tleV0gYXMgU2lnbmFsPEVbXT47XG4gICAgICBjb25zdCBzZWxlY3RlZElkcyA9IHN0b3JlW3NlbGVjdGVkSWRzS2V5XSBhcyBTaWduYWw8XG4gICAgICAgIFJlY29yZDxFbnRpdHlJZCwgYm9vbGVhbj5cbiAgICAgID47XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtzZWxlY3RlZEVudGl0aWVzS2V5XTogY29tcHV0ZWQoKCkgPT5cbiAgICAgICAgICBlbnRpdGllcygpLmZpbHRlcigoZSkgPT4gc2VsZWN0ZWRJZHMoKVtlLmlkXSksXG4gICAgICAgICksXG4gICAgICB9O1xuICAgIH0pLFxuICAgIHdpdGhNZXRob2RzKFxuICAgICAgKHN0b3JlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiAmIFdyaXRhYmxlU3RhdGVTb3VyY2U8b2JqZWN0PikgPT4ge1xuICAgICAgICBjb25zdCBkYXRhU2VydmljZSA9IGluamVjdChkYXRhU2VydmljZVR5cGUpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIFt1cGRhdGVGaWx0ZXJLZXldOiAoZmlsdGVyOiBGKTogdm9pZCA9PiB7XG4gICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IFtmaWx0ZXJLZXldOiBmaWx0ZXIgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbdXBkYXRlU2VsZWN0ZWRLZXldOiAoaWQ6IEVudGl0eUlkLCBzZWxlY3RlZDogYm9vbGVhbik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgKHN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gKHtcbiAgICAgICAgICAgICAgW3NlbGVjdGVkSWRzS2V5XToge1xuICAgICAgICAgICAgICAgIC4uLihzdGF0ZVtzZWxlY3RlZElkc0tleV0gYXMgUmVjb3JkPEVudGl0eUlkLCBib29sZWFuPiksXG4gICAgICAgICAgICAgICAgW2lkXTogc2VsZWN0ZWQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbbG9hZEtleV06IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IHN0b3JlW2ZpbHRlcktleV0gYXMgU2lnbmFsPEY+O1xuICAgICAgICAgICAgKCgpID0+XG4gICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0TG9hZGluZyhwcmVmaXgpKSkoKTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGF0YVNlcnZpY2UubG9hZChmaWx0ZXIoKSk7XG4gICAgICAgICAgICAgIHBhdGNoU3RhdGUoXG4gICAgICAgICAgICAgICAgc3RvcmUsXG4gICAgICAgICAgICAgICAgcHJlZml4XG4gICAgICAgICAgICAgICAgICA/IHNldEFsbEVudGl0aWVzKHJlc3VsdCwgeyBjb2xsZWN0aW9uOiBwcmVmaXggfSlcbiAgICAgICAgICAgICAgICAgIDogc2V0QWxsRW50aXRpZXMocmVzdWx0KSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgKCgpID0+XG4gICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRMb2FkZWQocHJlZml4KSkpKCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICgoKSA9PlxuICAgICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiZcbiAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCBzZXRFcnJvcihlLCBwcmVmaXgpKSkoKTtcbiAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFtsb2FkQnlJZEtleV06IGFzeW5jIChpZDogRW50aXR5SWQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgICgoKSA9PlxuICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldExvYWRpbmcocHJlZml4KSkpKCk7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBhd2FpdCBkYXRhU2VydmljZS5sb2FkQnlJZChpZCk7XG4gICAgICAgICAgICAgICgoKSA9PlxuICAgICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0TG9hZGVkKHByZWZpeCkpKSgpO1xuICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IFtjdXJyZW50S2V5XTogY3VycmVudCB9KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgKCgpID0+XG4gICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJlxuICAgICAgICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHNldEVycm9yKGUsIHByZWZpeCkpKSgpO1xuICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgW3NldEN1cnJlbnRLZXldOiAoY3VycmVudDogRSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBbY3VycmVudEtleV06IGN1cnJlbnQgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbY3JlYXRlS2V5XTogYXN5bmMgKGVudGl0eTogRSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBbY3VycmVudEtleV06IGVudGl0eSB9KTtcbiAgICAgICAgICAgICgoKSA9PlxuICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldExvYWRpbmcocHJlZml4KSkpKCk7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWQgPSBhd2FpdCBkYXRhU2VydmljZS5jcmVhdGUoZW50aXR5KTtcbiAgICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBbY3VycmVudEtleV06IGNyZWF0ZWQgfSk7XG4gICAgICAgICAgICAgIHBhdGNoU3RhdGUoXG4gICAgICAgICAgICAgICAgc3RvcmUsXG4gICAgICAgICAgICAgICAgcHJlZml4XG4gICAgICAgICAgICAgICAgICA/IGFkZEVudGl0eShjcmVhdGVkLCB7IGNvbGxlY3Rpb246IHByZWZpeCB9KVxuICAgICAgICAgICAgICAgICAgOiBhZGRFbnRpdHkoY3JlYXRlZCksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICgoKSA9PlxuICAgICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0TG9hZGVkKHByZWZpeCkpKSgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAoKCkgPT5cbiAgICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmXG4gICAgICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0RXJyb3IoZSwgcHJlZml4KSkpKCk7XG4gICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbdXBkYXRlS2V5XTogYXN5bmMgKGVudGl0eTogRSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBbY3VycmVudEtleV06IGVudGl0eSB9KTtcbiAgICAgICAgICAgICgoKSA9PlxuICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldExvYWRpbmcocHJlZml4KSkpKCk7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWQgPSBhd2FpdCBkYXRhU2VydmljZS51cGRhdGUoZW50aXR5KTtcbiAgICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBbY3VycmVudEtleV06IHVwZGF0ZWQgfSk7XG5cbiAgICAgICAgICAgICAgY29uc3QgdXBkYXRlQXJnID0ge1xuICAgICAgICAgICAgICAgIGlkOiB1cGRhdGVkLmlkLFxuICAgICAgICAgICAgICAgIGNoYW5nZXM6IHVwZGF0ZWQsXG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgY29uc3QgdXBkYXRlciA9IChjb2xsZWN0aW9uOiBzdHJpbmcpID0+XG4gICAgICAgICAgICAgICAgdXBkYXRlRW50aXR5KHVwZGF0ZUFyZywgeyBjb2xsZWN0aW9uIH0pO1xuXG4gICAgICAgICAgICAgIHBhdGNoU3RhdGUoXG4gICAgICAgICAgICAgICAgc3RvcmUsXG4gICAgICAgICAgICAgICAgcHJlZml4ID8gdXBkYXRlcihwcmVmaXgpIDogdXBkYXRlRW50aXR5KHVwZGF0ZUFyZyksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICgoKSA9PlxuICAgICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0TG9hZGVkKHByZWZpeCkpKSgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAoKCkgPT5cbiAgICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmXG4gICAgICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0RXJyb3IoZSwgcHJlZml4KSkpKCk7XG4gICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbdXBkYXRlQWxsS2V5XTogYXN5bmMgKGVudGl0aWVzOiBFW10pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgICgoKSA9PlxuICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldExvYWRpbmcocHJlZml4KSkpKCk7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRhdGFTZXJ2aWNlLnVwZGF0ZUFsbChlbnRpdGllcyk7XG4gICAgICAgICAgICAgIHBhdGNoU3RhdGUoXG4gICAgICAgICAgICAgICAgc3RvcmUsXG4gICAgICAgICAgICAgICAgcHJlZml4XG4gICAgICAgICAgICAgICAgICA/IHNldEFsbEVudGl0aWVzKHJlc3VsdCwgeyBjb2xsZWN0aW9uOiBwcmVmaXggfSlcbiAgICAgICAgICAgICAgICAgIDogc2V0QWxsRW50aXRpZXMocmVzdWx0KSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgKCgpID0+XG4gICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRMb2FkZWQocHJlZml4KSkpKCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICgoKSA9PlxuICAgICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiZcbiAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCBzZXRFcnJvcihlLCBwcmVmaXgpKSkoKTtcbiAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFtkZWxldGVLZXldOiBhc3luYyAoZW50aXR5OiBFKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IFtjdXJyZW50S2V5XTogZW50aXR5IH0pO1xuICAgICAgICAgICAgKCgpID0+XG4gICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0TG9hZGluZyhwcmVmaXgpKSkoKTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgYXdhaXQgZGF0YVNlcnZpY2UuZGVsZXRlKGVudGl0eSk7XG4gICAgICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgW2N1cnJlbnRLZXldOiB1bmRlZmluZWQgfSk7XG4gICAgICAgICAgICAgIHBhdGNoU3RhdGUoXG4gICAgICAgICAgICAgICAgc3RvcmUsXG4gICAgICAgICAgICAgICAgcHJlZml4XG4gICAgICAgICAgICAgICAgICA/IHJlbW92ZUVudGl0eShlbnRpdHkuaWQsIHsgY29sbGVjdGlvbjogcHJlZml4IH0pXG4gICAgICAgICAgICAgICAgICA6IHJlbW92ZUVudGl0eShlbnRpdHkuaWQpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAoKCkgPT5cbiAgICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldExvYWRlZChwcmVmaXgpKSkoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgKCgpID0+XG4gICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJlxuICAgICAgICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHNldEVycm9yKGUsIHByZWZpeCkpKSgpO1xuICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICksXG4gICk7XG59XG4iXX0=","/** With pagination comes in two flavors the first one is local pagination or in memory pagination. For example we have 2000 items which we want\n * to display in a table and the response payload is small enough to be stored in the memory. But we can not display all 2000 items at once\n * so we need to paginate the data. The second flavor is server side pagination where the response payload is too large to be stored in the memory\n * and we need to fetch the data from the server in chunks. In the second case we 'could' also cache the data in the memory but that could lead to\n * other problems like memory leaks and stale data. So we will not cache the data in the memory in the second case.\n * This feature implements the local pagination.\n */\nimport { computed } from '@angular/core';\nimport { signalStoreFeature, withComputed, withState, } from '@ngrx/signals';\nimport { capitalize } from './with-data-service';\nexport function withPagination(options) {\n const { pageKey, pageSizeKey, entitiesKey, selectedPageEntitiesKey, totalCountKey, pageCountKey, pageNavigationArrayMaxKey, pageNavigationArrayKey, hasNextPageKey, hasPreviousPageKey, } = createPaginationKeys(options);\n return signalStoreFeature(withState({\n [pageKey]: 0,\n [pageSizeKey]: 10,\n [pageNavigationArrayMaxKey]: 7,\n }), withComputed((store) => {\n const entities = store[entitiesKey];\n const page = store[pageKey];\n const pageSize = store[pageSizeKey];\n const pageNavigationArrayMax = store[pageNavigationArrayMaxKey];\n return {\n // The derived enitites which are displayed on the current page\n [selectedPageEntitiesKey]: computed(() => {\n const pageSizeValue = pageSize();\n const pageValue = page();\n return entities().slice(pageValue * pageSizeValue, (pageValue + 1) * pageSizeValue);\n }),\n [totalCountKey]: computed(() => entities().length),\n [pageCountKey]: computed(() => {\n const totalCountValue = entities().length;\n const pageSizeValue = pageSize();\n if (totalCountValue === 0) {\n return 0;\n }\n return Math.ceil(totalCountValue / pageSizeValue);\n }),\n [pageNavigationArrayKey]: computed(() => createPageArray(page(), pageSize(), entities().length, pageNavigationArrayMax())),\n [hasNextPageKey]: computed(() => {\n return page() < pageSize();\n }),\n [hasPreviousPageKey]: computed(() => {\n return page() > 1;\n }),\n };\n }));\n}\nexport function gotoPage(page, options) {\n const { pageKey } = createPaginationKeys(options);\n return {\n [pageKey]: page,\n };\n}\nexport function setPageSize(pageSize, options) {\n const { pageSizeKey } = createPaginationKeys(options);\n return {\n [pageSizeKey]: pageSize,\n };\n}\nexport function nextPage(options) {\n const { pageKey } = createPaginationKeys(options);\n return (state) => {\n const currentPage = state[pageKey];\n return { [pageKey]: currentPage + 1 };\n };\n}\nexport function previousPage(options) {\n const { pageKey } = createPaginationKeys(options);\n return (state) => {\n const currentPage = state[pageKey];\n return { [pageKey]: currentPage - 1 };\n };\n}\nexport function firstPage(options) {\n const { pageKey } = createPaginationKeys(options);\n return { [pageKey]: 0 };\n}\nexport function setMaxPageNavigationArrayItems(maxPageNavigationArrayItems, options) {\n const { pageNavigationArrayMaxKey } = createPaginationKeys(options);\n return {\n [pageNavigationArrayMaxKey]: maxPageNavigationArrayItems,\n };\n}\nfunction createPaginationKeys(options) {\n const entitiesKey = options?.collection\n ? `${options.collection}Entities`\n : 'entities';\n const selectedPageEntitiesKey = options?.collection\n ? `selectedPage${capitalize(options?.collection)}Entities`\n : 'selectedPageEntities';\n const pageKey = options?.collection\n ? `${options.collection}CurrentPage`\n : 'currentPage';\n const pageSizeKey = options?.collection\n ? `${options.collection}PageSize`\n : 'pageSize';\n const totalCountKey = options?.collection\n ? `${options.collection}TotalCount`\n : 'totalCount';\n const pageCountKey = options?.collection\n ? `${options.collection}PageCount`\n : 'pageCount';\n const pageNavigationArrayMaxKey = options?.collection\n ? `${options.collection}PageNavigationArrayMax`\n : 'pageNavigationArrayMax';\n const pageNavigationArrayKey = options?.collection\n ? `${options.collection}PageNavigationArray`\n : 'pageNavigationArray';\n const hasNextPageKey = options?.collection\n ? `hasNext${capitalize(options.collection)}Page`\n : 'hasNextPage';\n const hasPreviousPageKey = options?.collection\n ? `hasPrevious${capitalize(options.collection)}Page`\n : 'hasPreviousPage';\n return {\n pageKey,\n pageSizeKey,\n entitiesKey,\n selectedPageEntitiesKey,\n totalCountKey,\n pageCountKey,\n pageNavigationArrayKey,\n pageNavigationArrayMaxKey,\n hasNextPageKey,\n hasPreviousPageKey,\n };\n}\nexport function createPageArray(currentPage, itemsPerPage, totalItems, paginationRange) {\n // Convert paginationRange to number in case it's a string\n paginationRange = +paginationRange;\n // Calculate total number of pages\n const totalPages = Math.max(Math.ceil(totalItems / itemsPerPage), 1);\n const halfWay = Math.ceil(paginationRange / 2);\n const isStart = currentPage <= halfWay;\n const isEnd = totalPages - halfWay < currentPage;\n const isMiddle = !isStart && !isEnd;\n const ellipsesNeeded = paginationRange < totalPages;\n const pages = [];\n for (let i = 1; i <= totalPages && i <= paginationRange; i++) {\n let pageNumber = i;\n if (i === paginationRange) {\n pageNumber = totalPages;\n }\n else if (ellipsesNeeded) {\n if (isEnd) {\n pageNumber = totalPages - paginationRange + i;\n }\n else if (isMiddle) {\n pageNumber = currentPage - halfWay + i;\n }\n }\n const openingEllipsesNeeded = i === 2 && (isMiddle || isEnd);\n const closingEllipsesNeeded = i === paginationRange - 1 && (isMiddle || isStart);\n const label = ellipsesNeeded && (openingEllipsesNeeded || closingEllipsesNeeded)\n ? '...'\n : pageNumber;\n pages.push({ label, value: pageNumber });\n }\n return pages;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1wYWdpbmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRvb2xraXQvc3JjL2xpYi93aXRoLXBhZ2luYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFVLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBR0wsa0JBQWtCLEVBQ2xCLFlBQVksRUFDWixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBdUdqRCxNQUFNLFVBQVUsY0FBYyxDQUErQixPQUc1RDtJQUNDLE1BQU0sRUFDSixPQUFPLEVBQ1AsV0FBVyxFQUNYLFdBQVcsRUFDWCx1QkFBdUIsRUFDdkIsYUFBYSxFQUNiLFlBQVksRUFDWix5QkFBeUIsRUFDekIsc0JBQXNCLEVBQ3RCLGNBQWMsRUFDZCxrQkFBa0IsR0FDbkIsR0FBRyxvQkFBb0IsQ0FBYSxPQUFPLENBQUMsQ0FBQztJQUU5QyxPQUFPLGtCQUFrQixDQUN2QixTQUFTLENBQUM7UUFDUixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWixDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUU7UUFDakIsQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLENBQUM7S0FDL0IsQ0FBQyxFQUNGLFlBQVksQ0FBQyxDQUFDLEtBQThCLEVBQUUsRUFBRTtRQUM5QyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFnQixDQUFDO1FBQ25ELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQW1CLENBQUM7UUFDOUMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBbUIsQ0FBQztRQUN0RCxNQUFNLHNCQUFzQixHQUFHLEtBQUssQ0FDbEMseUJBQXlCLENBQ1IsQ0FBQztRQUVwQixPQUFPO1lBQ0wsK0RBQStEO1lB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QkFBcUIsSUFBSSxxQkFBcUIsQ0FBQztZQUNoRSxDQUFDLENBQUMsS0FBSztZQUNQLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFFakIsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIFdpdGggcGFnaW5hdGlvbiBjb21lcyBpbiB0d28gZmxhdm9ycyB0aGUgZmlyc3Qgb25lIGlzIGxvY2FsIHBhZ2luYXRpb24gb3IgaW4gbWVtb3J5IHBhZ2luYXRpb24uIEZvciBleGFtcGxlIHdlIGhhdmUgMjAwMCBpdGVtcyB3aGljaCB3ZSB3YW50XG4gKiB0byBkaXNwbGF5IGluIGEgdGFibGUgYW5kIHRoZSByZXNwb25zZSBwYXlsb2FkIGlzIHNtYWxsIGVub3VnaCB0byBiZSBzdG9yZWQgaW4gdGhlIG1lbW9yeS4gQnV0IHdlIGNhbiBub3QgZGlzcGxheSBhbGwgMjAwMCBpdGVtcyBhdCBvbmNlXG4gKiBzbyB3ZSBuZWVkIHRvIHBhZ2luYXRlIHRoZSBkYXRhLiBUaGUgc2Vjb25kIGZsYXZvciBpcyBzZXJ2ZXIgc2lkZSBwYWdpbmF0aW9uIHdoZXJlIHRoZSByZXNwb25zZSBwYXlsb2FkIGlzIHRvbyBsYXJnZSB0byBiZSBzdG9yZWQgaW4gdGhlIG1lbW9yeVxuICogYW5kIHdlIG5lZWQgdG8gZmV0Y2ggdGhlIGRhdGEgZnJvbSB0aGUgc2VydmVyIGluIGNodW5rcy4gSW4gdGhlIHNlY29uZCBjYXNlIHdlICdjb3VsZCcgYWxzbyBjYWNoZSB0aGUgZGF0YSBpbiB0aGUgbWVtb3J5IGJ1dCB0aGF0IGNvdWxkIGxlYWQgdG9cbiAqIG90aGVyIHByb2JsZW1zIGxpa2UgbWVtb3J5IGxlYWtzIGFuZCBzdGFsZSBkYXRhLiBTbyB3ZSB3aWxsIG5vdCBjYWNoZSB0aGUgZGF0YSBpbiB0aGUgbWVtb3J5IGluIHRoZSBzZWNvbmQgY2FzZS5cbiAqIFRoaXMgZmVhdHVyZSBpbXBsZW1lbnRzIHRoZSBsb2NhbCBwYWdpbmF0aW9uLlxuICovXG5cbmltcG9ydCB7IFNpZ25hbCwgY29tcHV0ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEVtcHR5RmVhdHVyZVJlc3VsdCxcbiAgU2lnbmFsU3RvcmVGZWF0dXJlLFxuICBzaWduYWxTdG9yZUZlYXR1cmUsXG4gIHdpdGhDb21wdXRlZCxcbiAgd2l0aFN0YXRlLFxufSBmcm9tICdAbmdyeC9zaWduYWxzJztcbmltcG9ydCB7IGNhcGl0YWxpemUgfSBmcm9tICcuL3dpdGgtZGF0YS1zZXJ2aWNlJztcblxuLy8gVGhpcyBpcyBhIHZpcnR1YWwgcGFnZSB3aGljaCBpcyBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSBwYWdpbmF0aW9uIGNvbnRyb2xcbmV4cG9ydCB0eXBlIFBhZ2UgPSB7IGxhYmVsOiBzdHJpbmcgfCBudW1iZXI7IHZhbHVlOiBudW1iZXIgfTtcblxuZXhwb3J0IHR5cGUgTmFtZWRQYWdpbmF0aW9uU2VydmljZVN0YXRlPEUsIENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+ID0ge1xuICBbSyBpbiBDb2xsZWN0aW9uIGFzIGBzZWxlY3RlZFBhZ2Uke0NhcGl0YWxpemU8Sz59RW50aXRpZXNgXTogQXJyYXk8RT47XG59ICYge1xuICBbSyBpbiBDb2xsZWN0aW9uIGFzIGAke0xvd2VyY2FzZTxLPn1DdXJyZW50UGFnZWBdOiBudW1iZXI7XG59ICYge1xuICBbSyBpbiBDb2xsZWN0aW9uIGFzIGAke0xvd2VyY2FzZTxLPn1QYWdlU2l6ZWBdOiBudW1iZXI7XG59ICYge1xuICBbSyBpbiBDb2xsZWN0aW9uIGFzIGAke0xvd2VyY2FzZTxLPn1Ub3RhbENvdW50YF06IG51bWJlcjtcbn0gJiB7XG4gIFtLIGluIENvbGxlY3Rpb24gYXMgYCR7TG93ZXJjYXNlPEs+fVBhZ2VDb3VudGBdOiBudW1iZXI7XG59ICYge1xuICBbSyBpbiBDb2xsZWN0aW9uIGFzIGAke0xvd2VyY2FzZTxLPn1QYWdlTmF2aWdhdGlvbkFycmF5YF06IG51bWJlcjtcbn0gJiB7XG4gIFtLIGluIENvbGxlY3Rpb24gYXMgYCR7TG93ZXJjYXNlPEs+fVBhZ2VOYXZpZ2F0aW9uQXJyYXlNYXhgXTogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgTmFtZWRQYWdpbmF0aW9uU2VydmljZVNpZ25hbHM8RSwgQ29sbGVjdGlvbiBleHRlbmRzIHN0cmluZz4gPSB7XG4gIFtLIGluIENvbGxlY3Rpb24gYXMgYHNlbGVjdGVkUGFnZSR7Q2FwaXRhbGl6ZTxLPn1FbnRpdGllc2BdOiBTaWduYWw8RVtdPjtcbn0gJiB7XG4gIFtLIGluIENvbGxlY3Rpb24gYXMgYCR7TG93ZXJjYXNlPEs+fUN1cnJlbnRQYWdlYF06IFNpZ25hbDxudW1iZXI+O1xufSAmIHtcbiAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgJHtMb3dlcmNhc2U8Sz59UGFnZVNpemVgXTogU2lnbmFsPG51bWJlcj47XG59ICYge1xuICBbSyBpbiBDb2xsZWN0aW9uIGFzIGAke0xvd2VyY2FzZTxLPn1Ub3RhbENvdW50YF06IFNpZ25hbDxudW1iZXI+O1xufSAmIHtcbiAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgJHtMb3dlcmNhc2U8Sz59UGFnZUNvdW50YF06IFNpZ25hbDxudW1iZXI+O1xufSAmIHtcbiAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgJHtMb3dlcmNhc2U8Sz59UGFnZU5hdmlnYXRpb25BcnJheWBdOiBTaWduYWw8UGFnZVtdPjtcbn0gJiB7XG4gIFtLIGluIENvbGxlY3Rpb24gYXMgYCR7TG93ZXJjYXNlPEs+fVBhZ2VOYXZpZ2F0aW9uQXJyYXlNYXhgXTogU2lnbmFsPG51bWJlcj47XG59ICYge1xuICBbSyBpbiBDb2xsZWN0aW9uIGFzIGBoYXNOZXh0JHtDYXBpdGFsaXplPEs+fVBhZ2VgXTogU2lnbmFsPGJvb2xlYW4+O1xufSAmIHtcbiAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgaGFzUHJldmlvdXMke0NhcGl0YWxpemU8Sz59UGFnZWBdOiBTaWduYWw8Ym9vbGVhbj47XG59O1xuXG5leHBvcnQgdHlwZSBQYWdpbmF0aW9uU2VydmljZVN0YXRlPEU+ID0ge1xuICBzZWxlY3RlZFBhZ2VFbnRpdGllczogQXJyYXk8RT47XG4gIGN1cnJlbnRQYWdlOiBudW1iZXI7XG4gIHBhZ2VTaXplOiBudW1iZXI7XG4gIHRvdGFsQ291bnQ6IG51bWJlcjtcbiAgcGFnZUNvdW50OiBudW1iZXI7XG4gIHBhZ2VOYXZpZ2F0aW9uQXJyYXk6IFBhZ2VbXTtcbiAgcGFnZU5hdmlnYXRpb25BcnJheU1heDogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgUGFnaW5hdGlvblNlcnZpY2VTaWduYWxzPEU+ID0ge1xuICBzZWxlY3RlZFBhZ2VFbnRpdGllczogU2lnbmFsPEVbXT47XG4gIGN1cnJlbnRQYWdlOiBTaWduYWw8bnVtYmVyPjtcbiAgcGFnZVNpemU6IFNpZ25hbDxudW1iZXI+O1xuICB0b3RhbENvdW50OiBTaWduYWw8bnVtYmVyPjtcbiAgcGFnZUNvdW50OiBTaWduYWw8bnVtYmVyPjtcbiAgcGFnZU5hdmlnYXRpb25BcnJheTogU2lnbmFsPFBhZ2VbXT47XG4gIHBhZ2VOYXZpZ2F0aW9uQXJyYXlNYXg6IFNpZ25hbDxudW1iZXI+O1xuICBoYXNOZXh0UGFnZTogU2lnbmFsPGJvb2xlYW4+O1xuICBoYXNQcmV2aW91c1BhZ2U6IFNpZ25hbDxib29sZWFuPjtcbn07XG5cbnR5cGUgUGFnZVN0YXRlPENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmcgfCB1bmRlZmluZWQ+ID1cbiAgQ29sbGVjdGlvbiBleHRlbmRzIHN0cmluZ1xuICAgID8ge1xuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGAke0xvd2VyY2FzZTxLPn1DdXJyZW50UGFnZWBdOiBudW1iZXI7XG4gICAgICB9XG4gICAgOiB7IGN1cnJlbnRQYWdlOiBudW1iZXIgfTtcblxudHlwZSBQYWdlU2l6ZVN0YXRlPENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmcgfCB1bmRlZmluZWQ+ID1cbiAgQ29sbGVjdGlvbiBleHRlbmRzIHN0cmluZ1xuICAgID8ge1xuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGAke0xvd2VyY2FzZTxLPn1QYWdlU2l6ZWBdOiBudW1iZXI7XG4gICAgICB9XG4gICAgOiB7IHBhZ2VTaXplOiBudW1iZXIgfTtcblxuZXhwb3J0IHR5cGUgU2V0UGFnaW5hdGlvblN0YXRlPFxuICBFLFxuICBDb2xsZWN0aW9uIGV4dGVuZHMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuPiA9IENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmdcbiAgPyBOYW1lZFBhZ2luYXRpb25TZXJ2aWNlU3RhdGU8RSwgQ29sbGVjdGlvbj5cbiAgOiBQYWdpbmF0aW9uU2VydmljZVN0YXRlPEU+O1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFBhZ2luYXRpb248RSwgQ29sbGVjdGlvbiBleHRlbmRzIHN0cmluZz4ob3B0aW9uczoge1xuICBlbnRpdHk6IEU7XG4gIGNvbGxlY3Rpb246IENvbGxlY3Rpb247XG59KTogU2lnbmFsU3RvcmVGZWF0dXJlPFxuICBFbXB0eUZlYXR1cmVSZXN1bHQsXG4gIEVtcHR5RmVhdHVyZVJlc3VsdCAmIHtcbiAgICBzdGF0ZTogTmFtZWRQYWdpbmF0aW9uU2VydmljZVN0YXRlPEUsIENvbGxlY3Rpb24+O1xuICAgIHByb3BzOiBOYW1lZFBhZ2luYXRpb25TZXJ2aWNlU2lnbmFsczxFLCBDb2xsZWN0aW9uPjtcbiAgfVxuPjtcblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhQYWdpbmF0aW9uPEU+KCk6IFNpZ25hbFN0b3JlRmVhdHVyZTxcbiAgRW1wdHlGZWF0dXJlUmVzdWx0LFxuICBFbXB0eUZlYXR1cmVSZXN1bHQgJiB7XG4gICAgc3RhdGU6IFBhZ2luYXRpb25TZXJ2aWNlU3RhdGU8RT47XG4gICAgcHJvcHM6IFBhZ2luYXRpb25TZXJ2aWNlU2lnbmFsczxFPjtcbiAgfVxuPjtcblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhQYWdpbmF0aW9uPEUsIENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+KG9wdGlvbnM/OiB7XG4gIGVudGl0eTogRTtcbiAgY29sbGVjdGlvbjogQ29sbGVjdGlvbjtcbn0pOiBTaWduYWxTdG9yZUZlYXR1cmUge1xuICBjb25zdCB7XG4gICAgcGFnZUtleSxcbiAgICBwYWdlU2l6ZUtleSxcbiAgICBlbnRpdGllc0tleSxcbiAgICBzZWxlY3RlZFBhZ2VFbnRpdGllc0tleSxcbiAgICB0b3RhbENvdW50S2V5LFxuICAgIHBhZ2VDb3VudEtleSxcbiAgICBwYWdlTmF2aWdhdGlvbkFycmF5TWF4S2V5LFxuICAgIHBhZ2VOYXZpZ2F0aW9uQXJyYXlLZXksXG4gICAgaGFzTmV4dFBhZ2VLZXksXG4gICAgaGFzUHJldmlvdXNQYWdlS2V5LFxuICB9ID0gY3JlYXRlUGFnaW5hdGlvbktleXM8Q29sbGVjdGlvbj4ob3B0aW9ucyk7XG5cbiAgcmV0dXJuIHNpZ25hbFN0b3JlRmVhdHVyZShcbiAgICB3aXRoU3RhdGUoe1xuICAgICAgW3BhZ2VLZXldOiAwLFxuICAgICAgW3BhZ2VTaXplS2V5XTogMTAsXG4gICAgICBbcGFnZU5hdmlnYXRpb25BcnJheU1heEtleV06IDcsXG4gICAgfSksXG4gICAgd2l0aENvbXB1dGVkKChzdG9yZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICAgIGNvbnN0IGVudGl0aWVzID0gc3RvcmVbZW50aXRpZXNLZXldIGFzIFNpZ25hbDxFW10+O1xuICAgICAgY29uc3QgcGFnZSA9IHN0b3JlW3BhZ2VLZXldIGFzIFNpZ25hbDxudW1iZXI+O1xuICAgICAgY29uc3QgcGFnZVNpemUgPSBzdG9yZVtwYWdlU2l6ZUtleV0gYXMgU2lnbmFsPG51bWJlcj47XG4gICAgICBjb25zdCBwYWdlTmF2aWdhdGlvbkFycmF5TWF4ID0gc3RvcmVbXG4gICAgICAgIHBhZ2VOYXZpZ2F0aW9uQXJyYXlNYXhLZXlcbiAgICAgIF0gYXMgU2lnbmFsPG51bWJlcj47XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC8vIFRoZSBkZXJpdmVkIGVuaXRpdGVzIHdoaWNoIGFyZSBkaXNwbGF5ZWQgb24gdGhlIGN1cnJlbnQgcGFnZVxuICAgICAgICBbc2VsZWN0ZWRQYWdlRW50aXRpZXNLZXldOiBjb21wdXRlZDxFW10+KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBwYWdlU2l6ZVZhbHVlID0gcGFnZVNpemUoKTtcbiAgICAgICAgICBjb25zdCBwYWdlVmFsdWUgPSBwYWdlKCk7XG5cbiAgICAgICAgICByZXR1cm4gZW50aXRpZXMoKS5zbGljZShcbiAgICAgICAgICAgIHBhZ2VWYWx1ZSAqIHBhZ2VTaXplVmFsdWUsXG4gICAgICAgICAgICAocGFnZVZhbHVlICsgMSkgKiBwYWdlU2l6ZVZhbHVlLFxuICAgICAgICAgICkgYXMgRVtdO1xuICAgICAgICB9KSxcbiAgICAgICAgW3RvdGFsQ291bnRLZXldOiBjb21wdXRlZCgoKSA9PiBlbnRpdGllcygpLmxlbmd0aCksXG4gICAgICAgIFtwYWdlQ291bnRLZXldOiBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdG90YWxDb3VudFZhbHVlID0gZW50aXRpZXMoKS5sZW5ndGg7XG4gICAgICAgICAgY29uc3QgcGFnZVNpemVWYWx1ZSA9IHBhZ2VTaXplKCk7XG5cbiAgICAgICAgICBpZiAodG90YWxDb3VudFZhbHVlID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKHRvdGFsQ291bnRWYWx1ZSAvIHBhZ2VTaXplVmFsdWUpO1xuICAgICAgICB9KSxcbiAgICAgICAgW3BhZ2VOYXZpZ2F0aW9uQXJyYXlLZXldOiBjb21wdXRlZCgoKSA9PlxuICAgICAgICAgIGNyZWF0ZVBhZ2VBcnJheShcbiAgICAgICAgICAgIHBhZ2UoKSxcbiAgICAgICAgICAgIHBhZ2VTaXplKCksXG4gICAgICAgICAgICBlbnRpdGllcygpLmxlbmd0aCxcbiAgICAgICAgICAgIHBhZ2VOYXZpZ2F0aW9uQXJyYXlNYXgoKSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuXG4gICAgICAgIFtoYXNOZXh0UGFnZUtleV06IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcGFnZSgpIDwgcGFnZVNpemUoKTtcbiAgICAgICAgfSksXG5cbiAgICAgICAgW2hhc1ByZXZpb3VzUGFnZUtleV06IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcGFnZSgpID4gMTtcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH0pLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ290b1BhZ2U8Q29sbGVjdGlvbiBleHRlbmRzIHN0cmluZz4oXG4gIHBhZ2U6IG51bWJlcixcbiAgb3B0aW9ucz86IHtcbiAgICBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uO1xuICB9LFxuKTogUGFnZVN0YXRlPENvbGxlY3Rpb24+IHtcbiAgY29uc3QgeyBwYWdlS2V5IH0gPSBjcmVhdGVQYWdpbmF0aW9uS2V5czxDb2xsZWN0aW9uPihvcHRpb25zKTtcblxuICByZXR1cm4ge1xuICAgIFtwYWdlS2V5XTogcGFnZSxcbiAgfSBhcyBQYWdlU3RhdGU8Q29sbGVjdGlvbj47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRQYWdlU2l6ZTxDb2xsZWN0aW9uIGV4dGVuZHMgc3RyaW5nPihcbiAgcGFnZVNpemU6IG51bWJlcixcbiAgb3B0aW9ucz86IHtcbiAgICBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uO1xuICB9LFxuKSB7XG4gIGNvbnN0IHsgcGFnZVNpemVLZXkgfSA9IGNyZWF0ZVBhZ2luYXRpb25LZXlzPENvbGxlY3Rpb24+KG9wdGlvbnMpO1xuXG4gIHJldHVybiB7XG4gICAgW3BhZ2VTaXplS2V5XTogcGFnZVNpemUsXG4gIH0gYXMgUGFnZVNpemVTdGF0ZTxDb2xsZWN0aW9uPjtcbn1cblxudHlwZSBTZXRQYWdlU3RhdGU8Q29sbGVjdGlvbiBleHRlbmRzIHN0cmluZyB8IHVuZGVmaW5lZD4gPSAoXG4gIHN0YXRlOiBQYWdlU3RhdGU8Q29sbGVjdGlvbj4sXG4pID0+IFBhZ2VTdGF0ZTxDb2xsZWN0aW9uPjtcblxuZXhwb3J0IGZ1bmN0aW9uIG5leHRQYWdlPENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+KG9wdGlvbnM/OiB7XG4gIGNvbGxlY3Rpb246IENvbGxlY3Rpb247XG59KTogU2V0UGFnZVN0YXRlPENvbGxlY3Rpb24+IHtcbiAgY29uc3QgeyBwYWdlS2V5IH0gPSBjcmVhdGVQYWdpbmF0aW9uS2V5czxDb2xsZWN0aW9uPihvcHRpb25zKTtcblxuICByZXR1cm4gKHN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+KSA9PiB7XG4gICAgY29uc3QgY3VycmVudFBhZ2UgPSBzdGF0ZVtwYWdlS2V5XTtcblxuICAgIHJldHVybiB7IFtwYWdlS2V5XTogY3VycmVudFBhZ2UgKyAxIH0gYXMgUGFnZVN0YXRlPENvbGxlY3Rpb24+O1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJldmlvdXNQYWdlPENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+KG9wdGlvbnM/OiB7XG4gIGNvbGxlY3Rpb246IENvbGxlY3Rpb247XG59KTogU2V0UGFnZVN0YXRlPENvbGxlY3Rpb24+IHtcbiAgY29uc3QgeyBwYWdlS2V5IH0gPSBjcmVhdGVQYWdpbmF0aW9uS2V5czxDb2xsZWN0aW9uPihvcHRpb25zKTtcblxuICByZXR1cm4gKHN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+KSA9PiB7XG4gICAgY29uc3QgY3VycmVudFBhZ2UgPSBzdGF0ZVtwYWdlS2V5XTtcblxuICAgIHJldHVybiB7IFtwYWdlS2V5XTogY3VycmVudFBhZ2UgLSAxIH0gYXMgUGFnZVN0YXRlPENvbGxlY3Rpb24+O1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlyc3RQYWdlPENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+KG9wdGlvbnM/OiB7XG4gIGNvbGxlY3Rpb246IENvbGxlY3Rpb247XG59KSB7XG4gIGNvbnN0IHsgcGFnZUtleSB9ID0gY3JlYXRlUGFnaW5hdGlvbktleXM8Q29sbGVjdGlvbj4ob3B0aW9ucyk7XG5cbiAgcmV0dXJuIHsgW3BhZ2VLZXldOiAwIH0gYXMgUGFnZVN0YXRlPENvbGxlY3Rpb24+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0TWF4UGFnZU5hdmlnYXRpb25BcnJheUl0ZW1zPEUsIENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+KFxuICBtYXhQYWdlTmF2aWdhdGlvbkFycmF5SXRlbXM6IG51bWJlcixcbiAgb3B0aW9ucz86IHtcbiAgICBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uO1xuICB9LFxuKTogUGFydGlhbDxTZXRQYWdpbmF0aW9uU3RhdGU8RSwgQ29sbGVjdGlvbj4+IHtcbiAgY29uc3QgeyBwYWdlTmF2aWdhdGlvbkFycmF5TWF4S2V5IH0gPVxuICAgIGNyZWF0ZVBhZ2luYXRpb25LZXlzPENvbGxlY3Rpb24+KG9wdGlvbnMpO1xuXG4gIHJldHVybiB7XG4gICAgW3BhZ2VOYXZpZ2F0aW9uQXJyYXlNYXhLZXldOiBtYXhQYWdlTmF2aWdhdGlvbkFycmF5SXRlbXMsXG4gIH0gYXMgUGFydGlhbDxTZXRQYWdpbmF0aW9uU3RhdGU8RSwgQ29sbGVjdGlvbj4+O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVQYWdpbmF0aW9uS2V5czxDb2xsZWN0aW9uIGV4dGVuZHMgc3RyaW5nPihcbiAgb3B0aW9uczogeyBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uIH0gfCB1bmRlZmluZWQsXG4pIHtcbiAgY29uc3QgZW50aXRpZXNLZXkgPSBvcHRpb25zPy5jb2xsZWN0aW9uXG4gICAgPyBgJHtvcHRpb25zLmNvbGxlY3Rpb259RW50aXRpZXNgXG4gICAgOiAnZW50aXRpZXMnO1xuXG4gIGNvbnN0IHNlbGVjdGVkUGFnZUVudGl0aWVzS2V5ID0gb3B0aW9ucz8uY29sbGVjdGlvblxuICAgID8gYHNlbGVjdGVkUGFnZSR7Y2FwaXRhbGl6ZShvcHRpb25zPy5jb2xsZWN0aW9uKX1FbnRpdGllc2BcbiAgICA6ICdzZWxlY3RlZFBhZ2VFbnRpdGllcyc7XG5cbiAgY29uc3QgcGFnZUtleSA9IG9wdGlvbnM/LmNvbGxlY3Rpb25cbiAgICA/IGAke29wdGlvbnMuY29sbGVjdGlvbn1DdXJyZW50UGFnZWBcbiAgICA6ICdjdXJyZW50UGFnZSc7XG5cbiAgY29uc3QgcGFnZVNpemVLZXkgPSBvcHRpb25zPy5jb2xsZWN0aW9uXG4gICAgPyBgJHtvcHRpb25zLmNvbGxlY3Rpb259UGFnZVNpemVgXG4gICAgOiAncGFnZVNpemUnO1xuXG4gIGNvbnN0IHRvdGFsQ291bnRLZXkgPSBvcHRpb25zPy5jb2xsZWN0aW9uXG4gICAgPyBgJHtvcHRpb25zLmNvbGxlY3Rpb259VG90YWxDb3VudGBcbiAgICA6ICd0b3RhbENvdW50JztcblxuICBjb25zdCBwYWdlQ291bnRLZXkgPSBvcHRpb25zPy5jb2xsZWN0aW9uXG4gICAgPyBgJHtvcHRpb25zLmNvbGxlY3Rpb259UGFnZUNvdW50YFxuICAgIDogJ3BhZ2VDb3VudCc7XG5cbiAgY29uc3QgcGFnZU5hdmlnYXRpb25BcnJheU1heEtleSA9IG9wdGlvbnM/LmNvbGxlY3Rpb25cbiAgICA/IGAke29wdGlvbnMuY29sbGVjdGlvbn1QYWdlTmF2aWdhdGlvbkFycmF5TWF4YFxuICAgIDogJ3BhZ2VOYXZpZ2F0aW9uQXJyYXlNYXgnO1xuXG4gIGNvbnN0IHBhZ2VOYXZpZ2F0aW9uQXJyYXlLZXkgPSBvcHRpb25zPy5jb2xsZWN0aW9uXG4gICAgPyBgJHtvcHRpb25zLmNvbGxlY3Rpb259UGFnZU5hdmlnYXRpb25BcnJheWBcbiAgICA6ICdwYWdlTmF2aWdhdGlvbkFycmF5JztcblxuICBjb25zdCBoYXNOZXh0UGFnZUtleSA9IG9wdGlvbnM/LmNvbGxlY3Rpb25cbiAgICA/IGBoYXNOZXh0JHtjYXBpdGFsaXplKG9wdGlvbnMuY29sbGVjdGlvbil9UGFnZWBcbiAgICA6ICdoYXNOZXh0UGFnZSc7XG5cbiAgY29uc3QgaGFzUHJldmlvdXNQYWdlS2V5ID0gb3B0aW9ucz8uY29sbGVjdGlvblxuICAgID8gYGhhc1ByZXZpb3VzJHtjYXBpdGFsaXplKG9wdGlvbnMuY29sbGVjdGlvbil9UGFnZWBcbiAgICA6ICdoYXNQcmV2aW91c1BhZ2UnO1xuXG4gIHJldHVybiB7XG4gICAgcGFnZUtleSxcbiAgICBwYWdlU2l6ZUtleSxcbiAgICBlbnRpdGllc0tleSxcbiAgICBzZWxlY3RlZFBhZ2VFbnRpdGllc0tleSxcbiAgICB0b3RhbENvdW50S2V5LFxuICAgIHBhZ2VDb3VudEtleSxcbiAgICBwYWdlTmF2aWdhdGlvbkFycmF5S2V5LFxuICAgIHBhZ2VOYXZpZ2F0aW9uQXJyYXlNYXhLZXksXG4gICAgaGFzTmV4dFBhZ2VLZXksXG4gICAgaGFzUHJldmlvdXNQYWdlS2V5LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGFnZUFycmF5KFxuICBjdXJyZW50UGFnZTogbnVtYmVyLFxuICBpdGVtc1BlclBhZ2U6IG51bWJlcixcbiAgdG90YWxJdGVtczogbnVtYmVyLFxuICBwYWdpbmF0aW9uUmFuZ2U6IG51bWJlcixcbik6IFBhZ2VbXSB7XG4gIC8vIENvbnZlcnQgcGFnaW5hdGlvblJhbmdlIHRvIG51bWJlciBpbiBjYXNlIGl0J3MgYSBzdHJpbmdcbiAgcGFnaW5hdGlvblJhbmdlID0gK3BhZ2luYXRpb25SYW5nZTtcblxuICAvLyBDYWxjdWxhdGUgdG90YWwgbnVtYmVyIG9mIHBhZ2VzXG4gIGNvbnN0IHRvdGFsUGFnZXMgPSBNYXRoLm1heChNYXRoLmNlaWwodG90YWxJdGVtcyAvIGl0ZW1zUGVyUGFnZSksIDEpO1xuICBjb25zdCBoYWxmV2F5ID0gTWF0aC5jZWlsKHBhZ2luYXRpb25SYW5nZSAvIDIpO1xuXG4gIGNvbnN0IGlzU3RhcnQgPSBjdXJyZW50UGFnZSA8PSBoYWxmV2F5O1xuICBjb25zdCBpc0VuZCA9IHRvdGFsUGFnZXMgLSBoYWxmV2F5IDwgY3VycmVudFBhZ2U7XG4gIGNvbnN0IGlzTWlkZGxlID0gIWlzU3RhcnQgJiYgIWlzRW5kO1xuXG4gIGNvbnN0IGVsbGlwc2VzTmVlZGVkID0gcGFnaW5hdGlvblJhbmdlIDwgdG90YWxQYWdlcztcbiAgY29uc3QgcGFnZXM6IFBhZ2VbXSA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAxOyBpIDw9IHRvdGFsUGFnZXMgJiYgaSA8PSBwYWdpbmF0aW9uUmFuZ2U7IGkrKykge1xuICAgIGxldCBwYWdlTnVtYmVyID0gaTtcblxuICAgIGlmIChpID09PSBwYWdpbmF0aW9uUmFuZ2UpIHtcbiAgICAgIHBhZ2VOdW1iZXIgPSB0b3RhbFBhZ2VzO1xuICAgIH0gZWxzZSBpZiAoZWxsaXBzZXNOZWVkZWQpIHtcbiAgICAgIGlmIChpc0VuZCkge1xuICAgICAgICBwYWdlTnVtYmVyID0gdG90YWxQYWdlcyAtIHBhZ2luYXRpb25SYW5nZSArIGk7XG4gICAgICB9IGVsc2UgaWYgKGlzTWlkZGxlKSB7XG4gICAgICAgIHBhZ2VOdW1iZXIgPSBjdXJyZW50UGFnZSAtIGhhbGZXYXkgKyBpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9wZW5pbmdFbGxpcHNlc05lZWRlZCA9IGkgPT09IDIgJiYgKGlzTWlkZGxlIHx8IGlzRW5kKTtcbiAgICBjb25zdCBjbG9zaW5nRWxsaXBzZXNOZWVkZWQgPVxuICAgICAgaSA9PT0gcGFnaW5hdGlvblJhbmdlIC0gMSAmJiAoaXNNaWRkbGUgfHwgaXNTdGFydCk7XG5cbiAgICBjb25zdCBsYWJlbCA9XG4gICAgICBlbGxpcHNlc05lZWRlZCAmJiAob3BlbmluZ0VsbGlwc2VzTmVlZGVkIHx8IGNsb3NpbmdFbGxpcHNlc05lZWRlZClcbiAgICAgICAgPyAnLi4uJ1xuICAgICAgICA6IHBhZ2VOdW1iZXI7XG5cbiAgICBwYWdlcy5wdXNoKHsgbGFiZWwsIHZhbHVlOiBwYWdlTnVtYmVyIH0pO1xuICB9XG5cbiAgcmV0dXJuIHBhZ2VzO1xufVxuIl19","import { getState, patchState, signalStoreFeature, withHooks, withMethods, withProps, } from '@ngrx/signals';\n/**\n * Adds a `resetState` method to the store, which resets the state\n * to the initial state.\n *\n * If you want to set a custom initial state, you can use {@link setResetState}.\n */\nexport function withReset() {\n return signalStoreFeature(withProps(() => ({ _resetState: { value: {} } })), withMethods((store) => {\n // workaround to TS excessive property check\n const methods = {\n resetState() {\n patchState(store, store._resetState.value);\n },\n __setResetState__(state) {\n store._resetState.value = state;\n },\n };\n return methods;\n }), withHooks((store) => ({\n onInit() {\n store._resetState.value = getState(store);\n },\n })));\n}\n/**\n * Sets the reset state of the store to the given state.\n *\n * Throws an error if the store is not configured with {@link withReset}.\n * @param store the instance of a SignalStore\n * @param state the state to set as the reset state\n */\nexport function setResetState(store, state) {\n if (!('__setResetState__' in store)) {\n throw new Error('Cannot set reset state, since store is not configured with withReset()');\n }\n store.__setResetState__(state);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1yZXNldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10b29sa2l0L3NyYy9saWIvd2l0aC1yZXNldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsUUFBUSxFQUNSLFVBQVUsRUFDVixrQkFBa0IsRUFFbEIsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFNdkI7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsU0FBUztJQUN2QixPQUFPLGtCQUFrQixDQUN2QixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFDakQsV0FBVyxDQUFDLENBQUMsS0FBSyxFQUFpQixFQUFFO1FBQ25DLDRDQUE0QztRQUM1QyxNQUFNLE9BQU8sR0FBRztZQUNkLFVBQVU7Z0JBQ1IsVUFBVSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdDLENBQUM7WUFDRCxpQkFBaUIsQ0FBQyxLQUFhO2dCQUM3QixLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDbEMsQ0FBQztTQUNGLENBQUM7UUFFRixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEIsTUFBTTtZQUNKLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxDQUFDO0tBQ0YsQ0FBQyxDQUFDLENBQ0osQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUMzQixLQUF5QixFQUN6QixLQUFZO0lBRVosSUFBSSxDQUFDLENBQUMsbUJBQW1CLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNwQyxNQUFNLElBQUksS0FBSyxDQUNiLHdFQUF3RSxDQUN6RSxDQUFDO0lBQ0osQ0FBQztJQUNBLEtBQUssQ0FBQyxpQkFBNEMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZ2V0U3RhdGUsXG4gIHBhdGNoU3RhdGUsXG4gIHNpZ25hbFN0b3JlRmVhdHVyZSxcbiAgU3RhdGVTb3VyY2UsXG4gIHdpdGhIb29rcyxcbiAgd2l0aE1ldGhvZHMsXG4gIHdpdGhQcm9wcyxcbn0gZnJvbSAnQG5ncngvc2lnbmFscyc7XG5cbmV4cG9ydCB0eXBlIFB1YmxpY01ldGhvZHMgPSB7XG4gIHJlc2V0U3RhdGUoKTogdm9pZDtcbn07XG5cbi8qKlxuICogQWRkcyBhIGByZXNldFN0YXRlYCBtZXRob2QgdG8gdGhlIHN0b3JlLCB3aGljaCByZXNldHMgdGhlIHN0YXRlXG4gKiB0byB0aGUgaW5pdGlhbCBzdGF0ZS5cbiAqXG4gKiBJZiB5b3Ugd2FudCB0byBzZXQgYSBjdXN0b20gaW5pdGlhbCBzdGF0ZSwgeW91IGNhbiB1c2Uge0BsaW5rIHNldFJlc2V0U3RhdGV9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFJlc2V0KCkge1xuICByZXR1cm4gc2lnbmFsU3RvcmVGZWF0dXJlKFxuICAgIHdpdGhQcm9wcygoKSA9PiAoeyBfcmVzZXRTdGF0ZTogeyB2YWx1ZToge30gfSB9KSksXG4gICAgd2l0aE1ldGhvZHMoKHN0b3JlKTogUHVibGljTWV0aG9kcyA9PiB7XG4gICAgICAvLyB3b3JrYXJvdW5kIHRvIFRTIGV4Y2Vzc2l2ZSBwcm9wZXJ0eSBjaGVja1xuICAgICAgY29uc3QgbWV0aG9kcyA9IHtcbiAgICAgICAgcmVzZXRTdGF0ZSgpIHtcbiAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCBzdG9yZS5fcmVzZXRTdGF0ZS52YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIF9fc2V0UmVzZXRTdGF0ZV9fKHN0YXRlOiBvYmplY3QpIHtcbiAgICAgICAgICBzdG9yZS5fcmVzZXRTdGF0ZS52YWx1ZSA9IHN0YXRlO1xuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIG1ldGhvZHM7XG4gICAgfSksXG4gICAgd2l0aEhvb2tzKChzdG9yZSkgPT4gKHtcbiAgICAgIG9uSW5pdCgpIHtcbiAgICAgICAgc3RvcmUuX3Jlc2V0U3RhdGUudmFsdWUgPSBnZXRTdGF0ZShzdG9yZSk7XG4gICAgICB9LFxuICAgIH0pKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSByZXNldCBzdGF0ZSBvZiB0aGUgc3RvcmUgdG8gdGhlIGdpdmVuIHN0YXRlLlxuICpcbiAqIFRocm93cyBhbiBlcnJvciBpZiB0aGUgc3RvcmUgaXMgbm90IGNvbmZpZ3VyZWQgd2l0aCB7QGxpbmsgd2l0aFJlc2V0fS5cbiAqIEBwYXJhbSBzdG9yZSB0aGUgaW5zdGFuY2Ugb2YgYSBTaWduYWxTdG9yZVxuICogQHBhcmFtIHN0YXRlIHRoZSBzdGF0ZSB0byBzZXQgYXMgdGhlIHJlc2V0IHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRSZXNldFN0YXRlPFN0YXRlIGV4dGVuZHMgb2JqZWN0PihcbiAgc3RvcmU6IFN0YXRlU291cmNlPFN0YXRlPixcbiAgc3RhdGU6IFN0YXRlLFxuKTogdm9pZCB7XG4gIGlmICghKCdfX3NldFJlc2V0U3RhdGVfXycgaW4gc3RvcmUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0Nhbm5vdCBzZXQgcmVzZXQgc3RhdGUsIHNpbmNlIHN0b3JlIGlzIG5vdCBjb25maWd1cmVkIHdpdGggd2l0aFJlc2V0KCknLFxuICAgICk7XG4gIH1cbiAgKHN0b3JlLl9fc2V0UmVzZXRTdGF0ZV9fIGFzIChzdGF0ZTogU3RhdGUpID0+IHZvaWQpKHN0YXRlKTtcbn1cbiJdfQ==","import { isSignal, signal, untracked } from '@angular/core';\nimport { patchState, signalStoreFeature, watchState, withComputed, withHooks, withMethods, } from '@ngrx/signals';\nimport { capitalize } from './with-data-service';\nconst defaultOptions = {\n maxStackSize: 100,\n keys: [],\n skip: 0,\n};\nexport function getUndoRedoKeys(collections) {\n if (collections) {\n return collections.flatMap((c) => [\n `${c}EntityMap`,\n `${c}Ids`,\n `selected${capitalize(c)}Ids`,\n `${c}Filter`,\n ]);\n }\n return ['entityMap', 'ids', 'selectedIds', 'filter'];\n}\nexport function withUndoRedo(options) {\n let previous = null;\n let skipOnce = false;\n const normalized = {\n ...defaultOptions,\n ...options,\n };\n //\n // Design Decision: This feature has its own\n // internal state.\n //\n const undoStack = [];\n const redoStack = [];\n const canUndo = signal(false, ...(ngDevMode ? [{ debugName: \"canUndo\" }] : []));\n const canRedo = signal(false, ...(ngDevMode ? [{ debugName: \"canRedo\" }] : []));\n const updateInternal = () => {\n canUndo.set(undoStack.length !== 0);\n canRedo.set(redoStack.length !== 0);\n };\n const keys = [...getUndoRedoKeys(normalized.collections), ...normalized.keys];\n return signalStoreFeature(withComputed(() => ({\n canUndo: canUndo.asReadonly(),\n canRedo: canRedo.asReadonly(),\n })), withMethods((store) => ({\n undo() {\n const item = undoStack.pop();\n if (item && previous) {\n redoStack.push(previous);\n }\n if (item) {\n skipOnce = true;\n patchState(store, item);\n previous = item;\n }\n updateInternal();\n },\n redo() {\n const item = redoStack.pop();\n if (item && previous) {\n undoStack.push(previous);\n }\n if (item) {\n skipOnce = true;\n patchState(store, item);\n previous = item;\n }\n updateInternal();\n },\n clearStack() {\n undoStack.splice(0);\n redoStack.splice(0);\n previous = null;\n updateInternal();\n },\n })), withHooks({\n onInit(store) {\n watchState(store, () => {\n const cand = keys.reduce((acc, key) => {\n const s = store[key];\n if (s && isSignal(s)) {\n return {\n ...acc,\n [key]: s(),\n };\n }\n return acc;\n }, {});\n if (normalized.skip > 0) {\n normalized.skip--;\n return;\n }\n if (skipOnce) {\n skipOnce = false;\n return;\n }\n //\n // Deep Comparison to prevent duplicated entries\n // on the stack. This can e.g. happen after an undo\n // if the component sends back the undone filter\n // to the store.\n //\n if (JSON.stringify(cand) === JSON.stringify(previous)) {\n return;\n }\n // Clear redoStack after recorded action\n redoStack.splice(0);\n if (previous) {\n undoStack.push(previous);\n }\n if (redoStack.length > normalized.maxStackSize) {\n undoStack.unshift();\n }\n previous = cand;\n // Don't propogate current reactive context\n untracked(() => updateInternal());\n });\n },\n }));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC11bmRvLXJlZG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL3dpdGgtdW5kby1yZWRvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEVBSUwsVUFBVSxFQUNWLGtCQUFrQixFQUNsQixVQUFVLEVBQ1YsWUFBWSxFQUNaLFNBQVMsRUFDVCxXQUFXLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBV2pELE1BQU0sY0FBYyxHQUE4QjtJQUNoRCxZQUFZLEVBQUUsR0FBRztJQUNqQixJQUFJLEVBQUUsRUFBRTtJQUNSLElBQUksRUFBRSxDQUFDO0NBQ1IsQ0FBQztBQUVGLE1BQU0sVUFBVSxlQUFlLENBQUMsV0FBc0I7SUFDcEQsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNoQixPQUFPLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2hDLEdBQUcsQ0FBQyxXQUFXO1lBQ2YsR0FBRyxDQUFDLEtBQUs7WUFDVCxXQUFXLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSztZQUM3QixHQUFHLENBQUMsUUFBUTtTQUNiLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQW9CRCxNQUFNLFVBQVUsWUFBWSxDQUMxQixPQUFnQztJQWVoQyxJQUFJLFFBQVEsR0FBcUIsSUFBSSxDQUFDO0lBQ3RDLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztJQUVyQixNQUFNLFVBQVUsR0FBRztRQUNqQixHQUFHLGNBQWM7UUFDakIsR0FBRyxPQUFPO0tB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QUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUVQLElBQUksVUFBVSxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDeEIsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNsQixPQUFPO2dCQUNULENBQUM7Z0JBRUQsSUFBSSxRQUFRLEVBQUUsQ0FBQztvQkFDYixRQUFRLEdBQUcsS0FBSyxDQUFDO29CQUNqQixPQUFPO2dCQUNULENBQUM7Z0JBRUQsRUFBRTtnQkFDRixnREFBZ0Q7Z0JBQ2hELG1EQUFtRDtnQkFDbkQsZ0RBQWdEO2dCQUNoRCxnQkFBZ0I7Z0JBQ2hCLEVBQUU7Z0JBQ0YsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztvQkFDdEQsT0FBTztnQkFDVCxDQUFDO2dCQUVELHdDQUF3QztnQkFDeEMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFcEIsSUFBSSxRQUFRLEVBQUUsQ0FBQztvQkFDYixTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMzQixDQUFDO2dCQUVELElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQy9DLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDdEIsQ0FBQztnQkFFRCxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUVoQiwyQ0FBMkM7Z0JBQzNDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUNGLENBQUMsQ0FDSCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNpZ25hbCwgaXNTaWduYWwsIHNpZ25hbCwgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBFbXB0eUZlYXR1cmVSZXN1bHQsXG4gIFNpZ25hbFN0b3JlRmVhdHVyZSxcbiAgU2lnbmFsU3RvcmVGZWF0dXJlUmVzdWx0LFxuICBwYXRjaFN0YXRlLFxuICBzaWduYWxTdG9yZUZlYXR1cmUsXG4gIHdhdGNoU3RhdGUsXG4gIHdpdGhDb21wdXRlZCxcbiAgd2l0aEhvb2tzLFxuICB3aXRoTWV0aG9kcyxcbn0gZnJvbSAnQG5ncngvc2lnbmFscyc7XG5pbXBvcnQgeyBjYXBpdGFsaXplIH0gZnJvbSAnLi93aXRoLWRhdGEtc2VydmljZSc7XG5cbmV4cG9ydCB0eXBlIFN0YWNrSXRlbSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgdHlwZSBOb3JtYWxpemVkVW5kb1JlZG9PcHRpb25zID0ge1xuICBtYXhTdGFja1NpemU6IG51bWJlcjtcbiAgY29sbGVjdGlvbnM/OiBzdHJpbmdbXTtcbiAga2V5czogc3RyaW5nW107XG4gIHNraXA6IG51bWJlcjtcbn07XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBOb3JtYWxpemVkVW5kb1JlZG9PcHRpb25zID0ge1xuICBtYXhTdGFja1NpemU6IDEwMCxcbiAga2V5czogW10sXG4gIHNraXA6IDAsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VW5kb1JlZG9LZXlzKGNvbGxlY3Rpb25zPzogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIGlmIChjb2xsZWN0aW9ucykge1xuICAgIHJldHVybiBjb2xsZWN0aW9ucy5mbGF0TWFwKChjKSA9PiBbXG4gICAgICBgJHtjfUVudGl0eU1hcGAsXG4gICAgICBgJHtjfUlkc2AsXG4gICAgICBgc2VsZWN0ZWQke2NhcGl0YWxpemUoYyl9SWRzYCxcbiAgICAgIGAke2N9RmlsdGVyYCxcbiAgICBdKTtcbiAgfVxuICByZXR1cm4gWydlbnRpdHlNYXAnLCAnaWRzJywgJ3NlbGVjdGVkSWRzJywgJ2ZpbHRlciddO1xufVxuXG50eXBlIE5vbk5ldmVyPFQ+ID0gVCBleHRlbmRzIG5ldmVyID8gbmV2ZXIgOiBUO1xuXG50eXBlIEV4dHJhY3RFbnRpdHlDb2xsZWN0aW9uPFQ+ID0gVCBleHRlbmRzIGAke2luZmVyIFV9RW50aXRpZXNgID8gVSA6IG5ldmVyO1xuXG50eXBlIEV4dHJhY3RFbnRpdHlDb2xsZWN0aW9uczxTdG9yZSBleHRlbmRzIFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdD4gPVxuICBOb25OZXZlcjxcbiAgICB7XG4gICAgICBbSyBpbiBrZXlvZiBTdG9yZVsncHJvcHMnXV06IEV4dHJhY3RFbnRpdHlDb2xsZWN0aW9uPEs+O1xuICAgIH1ba2V5b2YgU3RvcmVbJ3Byb3BzJ11dXG4gID47XG5cbnR5cGUgT3B0aW9uc0ZvclN0YXRlPFN0b3JlIGV4dGVuZHMgU2lnbmFsU3RvcmVGZWF0dXJlUmVzdWx0PiA9IFBhcnRpYWw8XG4gIE9taXQ8Tm9ybWFsaXplZFVuZG9SZWRvT3B0aW9ucywgJ2NvbGxlY3Rpb25zJyB8ICdrZXlzJz5cbj4gJiB7XG4gIGNvbGxlY3Rpb25zPzogRXh0cmFjdEVudGl0eUNvbGxlY3Rpb25zPFN0b3JlPltdO1xuICBrZXlzPzogKGtleW9mIFN0b3JlWydzdGF0ZSddKVtdO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhVbmRvUmVkbzxJbnB1dCBleHRlbmRzIEVtcHR5RmVhdHVyZVJlc3VsdD4oXG4gIG9wdGlvbnM/OiBPcHRpb25zRm9yU3RhdGU8SW5wdXQ+LFxuKTogU2lnbmFsU3RvcmVGZWF0dXJlPFxuICBJbnB1dCxcbiAgRW1wdHlGZWF0dXJlUmVzdWx0ICYge1xuICAgIHByb3BzOiB7XG4gICAgICBjYW5VbmRvOiBTaWduYWw8Ym9vbGVhbj47XG4gICAgICBjYW5SZWRvOiBTaWduYWw8Ym9vbGVhbj47XG4gICAgfTtcbiAgICBtZXRob2RzOiB7XG4gICAgICB1bmRvOiAoKSA9PiB2b2lkO1xuICAgICAgcmVkbzogKCkgPT4gdm9pZDtcbiAgICAgIGNsZWFyU3RhY2s6ICgpID0+IHZvaWQ7XG4gICAgfTtcbiAgfVxuPiB7XG4gIGxldCBwcmV2aW91czogU3RhY2tJdGVtIHwgbnVsbCA9IG51bGw7XG4gIGxldCBza2lwT25jZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB7XG4gICAgLi4uZGVmYXVsdE9wdGlvbnMsXG4gICAgLi4ub3B0aW9ucyxcbiAgfTtcblxuICAvL1xuICAvLyBEZXNpZ24gRGVjaXNpb246IFRoaXMgZmVhdHVyZSBoYXMgaXRzIG93blxuICAvLyBpbnRlcm5hbCBzdGF0ZS5cbiAgLy9cblxuICBjb25zdCB1bmRvU3RhY2s6IFN0YWNrSXRlbVtdID0gW107XG4gIGNvbnN0IHJlZG9TdGFjazogU3RhY2tJdGVtW10gPSBbXTtcblxuICBjb25zdCBjYW5VbmRvID0gc2lnbmFsKGZhbHNlKTtcbiAgY29uc3QgY2FuUmVkbyA9IHNpZ25hbChmYWxzZSk7XG5cbiAgY29uc3QgdXBkYXRlSW50ZXJuYWwgPSAoKSA9PiB7XG4gICAgY2FuVW5kby5zZXQodW5kb1N0YWNrLmxlbmd0aCAhPT0gMCk7XG4gICAgY2FuUmVkby5zZXQocmVkb1N0YWNrLmxlbmd0aCAhPT0gMCk7XG4gIH07XG5cbiAgY29uc3Qga2V5cyA9IFsuLi5nZXRVbmRvUmVkb0tleXMobm9ybWFsaXplZC5jb2xsZWN0aW9ucyksIC4uLm5vcm1hbGl6ZWQua2V5c107XG5cbiAgcmV0dXJuIHNpZ25hbFN0b3JlRmVhdHVyZShcbiAgICB3aXRoQ29tcHV0ZWQoKCkgPT4gKHtcbiAgICAgIGNhblVuZG86IGNhblVuZG8uYXNSZWFkb25seSgpLFxuICAgICAgY2FuUmVkbzogY2FuUmVkby5hc1JlYWRvbmx5KCksXG4gICAgfSkpLFxuICAgIHdpdGhNZXRob2RzKChzdG9yZSkgPT4gKHtcbiAgICAgIHVuZG8oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB1bmRvU3RhY2sucG9wKCk7XG5cbiAgICAgICAgaWYgKGl0ZW0gJiYgcHJldmlvdXMpIHtcbiAgICAgICAgICByZWRvU3RhY2sucHVzaChwcmV2aW91cyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgIHNraXBPbmNlID0gdHJ1ZTtcbiAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCBpdGVtKTtcbiAgICAgICAgICBwcmV2aW91cyA9IGl0ZW07XG4gICAgICAgIH1cblxuICAgICAgICB1cGRhdGVJbnRlcm5hbCgpO1xuICAgICAgfSxcbiAgICAgIHJlZG8oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSByZWRvU3RhY2sucG9wKCk7XG5cbiAgICAgICAgaWYgKGl0ZW0gJiYgcHJldmlvdXMpIHtcbiAgICAgICAgICB1bmRvU3RhY2sucHVzaChwcmV2aW91cyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgIHNraXBPbmNlID0gdHJ1ZTtcbiAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCBpdGVtKTtcbiAgICAgICAgICBwcmV2aW91cyA9IGl0ZW07XG4gICAgICAgIH1cblxuICAgICAgICB1cGRhdGVJbnRlcm5hbCgpO1xuICAgICAgfSxcbiAgICAgIGNsZWFyU3RhY2soKTogdm9pZCB7XG4gICAgICAgIHVuZG9TdGFjay5zcGxpY2UoMCk7XG4gICAgICAgIHJlZG9TdGFjay5zcGxpY2UoMCk7XG4gICAgICAgIHByZXZpb3VzID0gbnVsbDtcbiAgICAgICAgdXBkYXRlSW50ZXJuYWwoKTtcbiAgICAgIH0sXG4gICAgfSkpLFxuICAgIHdpdGhIb29rcyh7XG4gICAgICBvbkluaXQoc3RvcmUpIHtcbiAgICAgICAgd2F0Y2hTdGF0ZShzdG9yZSwgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNhbmQgPSBrZXlzLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHMgPSAoc3RvcmUgYXMgUmVjb3JkPHN0cmluZyB8IGtleW9mIElucHV0WydzdGF0ZSddLCB1bmtub3duPilbXG4gICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmIChzICYmIGlzU2lnbmFsKHMpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uYWNjLFxuICAgICAgICAgICAgICAgIFtrZXldOiBzKCksXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH0sIHt9KTtcblxuICAgICAgICAgIGlmIChub3JtYWxpemVkLnNraXAgPiAwKSB7XG4gICAgICAgICAgICBub3JtYWxpemVkLnNraXAtLTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2tpcE9uY2UpIHtcbiAgICAgICAgICAgIHNraXBPbmNlID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBEZWVwIENvbXBhcmlzb24gdG8gcHJldmVudCBkdXBsaWNhdGVkIGVudHJpZXNcbiAgICAgICAgICAvLyBvbiB0aGUgc3RhY2suIFRoaXMgY2FuIGUuZy4gaGFwcGVuIGFmdGVyIGFuIHVuZG9cbiAgICAgICAgICAvLyBpZiB0aGUgY29tcG9uZW50IHNlbmRzIGJhY2sgdGhlIHVuZG9uZSBmaWx0ZXJcbiAgICAgICAgICAvLyB0byB0aGUgc3RvcmUuXG4gICAgICAgICAgLy9cbiAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoY2FuZCkgPT09IEpTT04uc3RyaW5naWZ5KHByZXZpb3VzKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENsZWFyIHJlZG9TdGFjayBhZnRlciByZWNvcmRlZCBhY3Rpb25cbiAgICAgICAgICByZWRvU3RhY2suc3BsaWNlKDApO1xuXG4gICAgICAgICAgaWYgKHByZXZpb3VzKSB7XG4gICAgICAgICAgICB1bmRvU3RhY2sucHVzaChwcmV2aW91cyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJlZG9TdGFjay5sZW5ndGggPiBub3JtYWxpemVkLm1heFN0YWNrU2l6ZSkge1xuICAgICAgICAgICAgdW5kb1N0YWNrLnVuc2hpZnQoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcmV2aW91cyA9IGNhbmQ7XG5cbiAgICAgICAgICAvLyBEb24ndCBwcm9wb2dhdGUgY3VycmVudCByZWFjdGl2ZSBjb250ZXh0XG4gICAgICAgICAgdW50cmFja2VkKCgpID0+IHVwZGF0ZUludGVybmFsKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgfSksXG4gICk7XG59XG4iXX0=","/**\n * Deep freezes a state object along its properties with primitive values\n * on the first level.\n *\n * The reason for this is that the final state is a merge of all\n * root properties of all states, i.e. `withState`,....\n *\n * Since the root object will not be part of the state (shadow clone),\n * we are not freezing it.\n */\nexport function deepFreeze(target, \n// if empty all properties will be frozen\npropertyNamesToBeFrozen, \n// also means that we are on the first level\nisRoot = true) {\n const runPropertyNameCheck = propertyNamesToBeFrozen.length > 0;\n for (const key of Reflect.ownKeys(target)) {\n if (runPropertyNameCheck && !propertyNamesToBeFrozen.includes(key)) {\n continue;\n }\n const propValue = target[key];\n if (isRecordLike(propValue) && !Object.isFrozen(propValue)) {\n Object.freeze(propValue);\n deepFreeze(propValue, [], false);\n }\n else if (isRoot) {\n Object.defineProperty(target, key, {\n value: propValue,\n writable: false,\n configurable: false,\n });\n }\n }\n}\nfunction isRecordLike(target) {\n return typeof target === 'object' && target !== null;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcC1mcmVlemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL2ltbXV0YWJsZS1zdGF0ZS9kZWVwLWZyZWV6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFFSCxNQUFNLFVBQVUsVUFBVSxDQUN4QixNQUFTO0FBQ1QseUNBQXlDO0FBQ3pDLHVCQUE0QztBQUM1Qyw0Q0FBNEM7QUFDNUMsTUFBTSxHQUFHLElBQUk7SUFFYixNQUFNLG9CQUFvQixHQUFHLHVCQUF1QixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDaEUsS0FBSyxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDMUMsSUFBSSxvQkFBb0IsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ25FLFNBQVM7UUFDWCxDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLElBQUksWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzNELE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDekIsVUFBVSxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkMsQ0FBQzthQUFNLElBQUksTUFBTSxFQUFFLENBQUM7WUFDbEIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO2dCQUNqQyxLQUFLLEVBQUUsU0FBUztnQkFDaEIsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsWUFBWSxFQUFFLEtBQUs7YUFDcEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQ25CLE1BQWU7SUFFZixPQUFPLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLEtBQUssSUFBSSxDQUFDO0FBQ3ZELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERlZXAgZnJlZXplcyBhIHN0YXRlIG9iamVjdCBhbG9uZyBpdHMgcHJvcGVydGllcyB3aXRoIHByaW1pdGl2ZSB2YWx1ZXNcbiAqIG9uIHRoZSBmaXJzdCBsZXZlbC5cbiAqXG4gKiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgdGhlIGZpbmFsIHN0YXRlIGlzIGEgbWVyZ2Ugb2YgYWxsXG4gKiByb290IHByb3BlcnRpZXMgb2YgYWxsIHN0YXRlcywgaS5lLiBgd2l0aFN0YXRlYCwuLi4uXG4gKlxuICogU2luY2UgdGhlIHJvb3Qgb2JqZWN0IHdpbGwgbm90IGJlIHBhcnQgb2YgdGhlIHN0YXRlIChzaGFkb3cgY2xvbmUpLFxuICogd2UgYXJlIG5vdCBmcmVlemluZyBpdC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGVlcEZyZWV6ZTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZyB8IHN5bWJvbCwgdW5rbm93bj4+KFxuICB0YXJnZXQ6IFQsXG4gIC8vIGlmIGVtcHR5IGFsbCBwcm9wZXJ0aWVzIHdpbGwgYmUgZnJvemVuXG4gIHByb3BlcnR5TmFtZXNUb0JlRnJvemVuOiAoc3RyaW5nIHwgc3ltYm9sKVtdLFxuICAvLyBhbHNvIG1lYW5zIHRoYXQgd2UgYXJlIG9uIHRoZSBmaXJzdCBsZXZlbFxuICBpc1Jvb3QgPSB0cnVlLFxuKTogdm9pZCB7XG4gIGNvbnN0IHJ1blByb3BlcnR5TmFtZUNoZWNrID0gcHJvcGVydHlOYW1lc1RvQmVGcm96ZW4ubGVuZ3RoID4gMDtcbiAgZm9yIChjb25zdCBrZXkgb2YgUmVmbGVjdC5vd25LZXlzKHRhcmdldCkpIHtcbiAgICBpZiAocnVuUHJvcGVydHlOYW1lQ2hlY2sgJiYgIXByb3BlcnR5TmFtZXNUb0JlRnJvemVuLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3BWYWx1ZSA9IHRhcmdldFtrZXldO1xuICAgIGlmIChpc1JlY29yZExpa2UocHJvcFZhbHVlKSAmJiAhT2JqZWN0LmlzRnJvemVuKHByb3BWYWx1ZSkpIHtcbiAgICAgIE9iamVjdC5mcmVlemUocHJvcFZhbHVlKTtcbiAgICAgIGRlZXBGcmVlemUocHJvcFZhbHVlLCBbXSwgZmFsc2UpO1xuICAgIH0gZWxzZSBpZiAoaXNSb290KSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHtcbiAgICAgICAgdmFsdWU6IHByb3BWYWx1ZSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzUmVjb3JkTGlrZShcbiAgdGFyZ2V0OiB1bmtub3duLFxuKTogdGFyZ2V0IGlzIFJlY29yZDxzdHJpbmcgfCBzeW1ib2wsIHVua25vd24+IHtcbiAgcmV0dXJuIHR5cGVvZiB0YXJnZXQgPT09ICdvYmplY3QnICYmIHRhcmdldCAhPT0gbnVsbDtcbn1cbiJdfQ==","import { isDevMode as ngIsInDevMode } from '@angular/core';\n// necessary wrapper function to test prod mode\nexport function isDevMode() {\n return ngIsInDevMode();\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtZGV2LW1vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL2ltbXV0YWJsZS1zdGF0ZS9pcy1kZXYtbW9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxJQUFJLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzRCwrQ0FBK0M7QUFDL0MsTUFBTSxVQUFVLFNBQVM7SUFDdkIsT0FBTyxhQUFhLEVBQUUsQ0FBQztBQUN6QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNEZXZNb2RlIGFzIG5nSXNJbkRldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLy8gbmVjZXNzYXJ5IHdyYXBwZXIgZnVuY3Rpb24gdG8gdGVzdCBwcm9kIG1vZGVcbmV4cG9ydCBmdW5jdGlvbiBpc0Rldk1vZGUoKSB7XG4gIHJldHVybiBuZ0lzSW5EZXZNb2RlKCk7XG59XG4iXX0=","import { getState, signalStoreFeature, watchState, withHooks, withState, } from '@ngrx/signals';\nimport { deepFreeze } from './deep-freeze';\nimport { isDevMode } from './is-dev-mode';\nexport function withImmutableState(stateOrFactory, options) {\n const immutableState = typeof stateOrFactory === 'function' ? stateOrFactory() : stateOrFactory;\n const stateKeys = Reflect.ownKeys(immutableState);\n const applyFreezing = isDevMode() || options?.enableInProduction === true;\n return signalStoreFeature(withState(immutableState), withHooks((store) => ({\n onInit() {\n if (!applyFreezing) {\n return;\n }\n /**\n * `immutableState` will be initially frozen. That is because\n * of potential mutations outside the SignalStore\n *\n * ```ts\n * const initialState = {user: {id: 1}};\n * signalStore(withImmutableState(initialState));\n *\n * initialState.user.id = 2; // must throw immutability\n * ```\n */\n deepFreeze(getState(store), stateKeys);\n watchState(store, (state) => {\n deepFreeze(state, stateKeys);\n });\n },\n })));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1pbW11dGFibGUtc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL2ltbXV0YWJsZS1zdGF0ZS93aXRoLWltbXV0YWJsZS1zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsUUFBUSxFQUNSLGtCQUFrQixFQUdsQixVQUFVLEVBQ1YsU0FBUyxFQUNULFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFpRzFDLE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsY0FBcUMsRUFDckMsT0FBMEM7SUFLMUMsTUFBTSxjQUFjLEdBQ2xCLE9BQU8sY0FBYyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztJQUMzRSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRWxELE1BQU0sYUFBYSxHQUFHLFNBQVMsRUFBRSxJQUFJLE9BQU8sRUFBRSxrQkFBa0IsS0FBSyxJQUFJLENBQUM7SUFDMUUsT0FBTyxrQkFBa0IsQ0FDdkIsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUN6QixTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEIsTUFBTTtZQUNKLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDbkIsT0FBTztZQUNULENBQUM7WUFDRDs7Ozs7Ozs7OztlQVVHO1lBQ0gsVUFBVSxDQUNSLFFBQVEsQ0FBQyxLQUFLLENBQXFDLEVBQ25ELFNBQVMsQ0FDVixDQUFDO1lBRUYsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUMxQixVQUFVLENBQUMsS0FBeUMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNuRSxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7S0FDRixDQUFDLENBQUMsQ0FDSixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEVtcHR5RmVhdHVyZVJlc3VsdCxcbiAgZ2V0U3RhdGUsXG4gIHNpZ25hbFN0b3JlRmVhdHVyZSxcbiAgU2lnbmFsU3RvcmVGZWF0dXJlLFxuICBTaWduYWxTdG9yZUZlYXR1cmVSZXN1bHQsXG4gIHdhdGNoU3RhdGUsXG4gIHdpdGhIb29rcyxcbiAgd2l0aFN0YXRlLFxufSBmcm9tICdAbmdyeC9zaWduYWxzJztcbmltcG9ydCB7IGRlZXBGcmVlemUgfSBmcm9tICcuL2RlZXAtZnJlZXplJztcbmltcG9ydCB7IGlzRGV2TW9kZSB9IGZyb20gJy4vaXMtZGV2LW1vZGUnO1xuXG4vKipcbiAqIFN0YXJ0aW5nIGZyb20gdjIwLCB0aGUgcm9vdCBwcm9wZXJ0aWVzIG9mIHRoZSBzdGF0ZSBvYmplY3RcbiAqIGFyZSBhbGwgb2YgdHlwZSBgV3JpdGFibGVTaWduYWxgLlxuICpcbiAqIFRoYXQgbWVhbnMsIHdlIGNhbm5vdCBmcmVlemUgcm9vdCBwcm9wZXJ0aWVzLCB3aGljaCBhcmUgb2YgYVxuICogcHJpbWl0aXZlIGRhdGEgdHlwZS5cbiAqXG4gKiBUaGlzIGlzIGEgYnJlYWtpbmcgY2hhbmdlLCBiZWNhdXNlIGluIHYxOSB0aGUgc3RhdGUgd2FzIGEgU2lnbmFsLlxuICogV2UgaGFkIHRoZSBwb3NzaWJpbGl0eSB0byBmcmVlemUgdGhhdCBTaWduYWwnc1xuICogb2JqZWN0IGFuZCBjb3VsZCB0aGVyZWZvcmUgcHJvdmlkZSBpbW11dGFiaWxpdHkgZm9yXG4gKiByb290IHByb3BlcnRpZXMgb2YgcHJpbWl0aXZlIGRhdGEgdHlwZXMuXG4gKlxuICogRm9yIGV4YW1wbGU6XG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IHN0YXRlID0ge1xuICogICBpZDogMSwgLy8gd2FzIGZyb3plbiBpbiB2MTksIGJ1dCBub3QgaW4gPj0gdjIwXG4gKiAgIGFkZHJlc3M6IHtcbiAqICAgICBzdHJlZXQ6ICdNYWluIFN0JyxcbiAqICAgICBjaXR5OiAnU3ByaW5nZmllbGQnLFxuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuXG4vKipcbiAqIFByZXZlbnRzIG11dGF0aW9uIG9mIHRoZSBzdGF0ZS5cbiAqXG4gKiBUaGlzIGlzIGRvbmUgYnkgYXBwbHlpbmcgYE9iamVjdC5mcmVlemVgIHRvIGVhY2ggcm9vdFxuICogcHJvcGVydHkgb2YgdGhlIHN0YXRlLiBBbnkgbXV0YWJsZSBjaGFuZ2Ugd2l0aGluXG4gKiBvciBvdXRzaWRlIHRoZSBgU2lnbmFsU3RvcmVgIHdpbGwgdGhyb3cgYW4gZXJyb3IuXG4gKlxuICogUm9vdCBwcm9wZXJ0aWVzIG9mIHRoZSBzdGF0ZSBoYXZpbmcgYSBwcmltaXRpdmUgZGF0YSB0eXBlXG4gKiBhcmUgbm90IHN1cHBvcnRlZC5cbiAqXG4gKiAgKiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGB0c1xuICogY29uc3Qgc3RhdGUgPSB7XG4gKiAgIC8vIOKblO+4jyBhcmUgbm90IGZyb3plbiAtPiBtdXRhYmxlIGNoYW5nZXMgcG9zc2libGVcbiAqICAgaWQ6IDEsXG4gKlxuICogICAvLyDinIUgYXJlIGZyb3plbiAtPiBtdXRhYmxlIGNoYW5nZXMgdGhyb3dcbiAqICAgYWRkcmVzczoge1xuICogICAgIHN0cmVldDogJ01haW4gU3QnLFxuICogICAgIGNpdHk6ICdTcHJpbmdmaWVsZCcsXG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzdGF0ZSB0aGUgc3RhdGUgb2JqZWN0XG4gKiBAcGFyYW0gb3B0aW9ucyBlbmFibGUgcHJvdGVjdGlvbiBpbiBwcm9kdWN0aW9uIChkZWZhdWx0OiBmYWxzZSlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhJbW11dGFibGVTdGF0ZTxTdGF0ZSBleHRlbmRzIG9iamVjdD4oXG4gIHN0YXRlOiBTdGF0ZSxcbiAgb3B0aW9ucz86IHsgZW5hYmxlSW5Qcm9kdWN0aW9uPzogYm9vbGVhbiB9LFxuKTogU2lnbmFsU3RvcmVGZWF0dXJlPFxuICBTaWduYWxTdG9yZUZlYXR1cmVSZXN1bHQsXG4gIEVtcHR5RmVhdHVyZVJlc3VsdCAmIHsgc3RhdGU6IFN0YXRlIH1cbj47XG4vKipcbiAqIFByZXZlbnRzIG11dGF0aW9uIG9mIHRoZSBzdGF0ZS5cbiAqXG4gKiBUaGlzIGlzIGRvbmUgYnkgYXBwbHlpbmcgYE9iamVjdC5mcmVlemVgIHRvIGVhY2ggcm9vdFxuICogcHJvcGVydHkgb2YgdGhlIHN0YXRlLiBBbnkgbXV0YWJsZSBjaGFuZ2Ugd2l0aGluXG4gKiBvciBvdXRzaWRlIHRoZSBgU2lnbmFsU3RvcmVgIHdpbGwgdGhyb3cgYW4gZXJyb3IuXG4gKlxuICogUm9vdCBwcm9wZXJ0aWVzIG9mIHRoZSBzdGF0ZSBoYXZpbmcgYSBwcmltaXRpdmUgZGF0YSB0eXBlXG4gKiBhcmUgbm90IHN1cHBvcnRlZC5cbiAqXG4gKiAgKiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGB0c1xuICogY29uc3Qgc3RhdGUgPSB7XG4gKiAgIC8vIOKblO+4jyBhcmUgbm90IGZyb3plbiAtPiBtdXRhYmxlIGNoYW5nZXMgcG9zc2libGVcbiAqICAgaWQ6IDEsXG4gKlxuICogICAvLyDinIUgYXJlIGZyb3plbiAtPiBtdXRhYmxlIGNoYW5nZXMgdGhyb3dcbiAqICAgYWRkcmVzczoge1xuICogICAgIHN0cmVldDogJ01haW4gU3QnLFxuICogICAgIGNpdHk6ICdTcHJpbmdmaWVsZCcsXG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzdGF0ZUZhY3RvcnkgYSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIHN0YXRlIG9iamVjdFxuICogQHBhcmFtIG9wdGlvbnMgZW5hYmxlIHByb3RlY3Rpb24gaW4gcHJvZHVjdGlvbiAoZGVmYXVsdDogZmFsc2UpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoSW1tdXRhYmxlU3RhdGU8U3RhdGUgZXh0ZW5kcyBvYmplY3Q+KFxuICBzdGF0ZUZhY3Rvcnk6ICgpID0+IFN0YXRlLFxuICBvcHRpb25zPzogeyBlbmFibGVJblByb2R1Y3Rpb24/OiBib29sZWFuIH0sXG4pOiBTaWduYWxTdG9yZUZlYXR1cmU8XG4gIFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdCxcbiAgRW1wdHlGZWF0dXJlUmVzdWx0ICYgeyBzdGF0ZTogU3RhdGUgfVxuPjtcbmV4cG9ydCBmdW5jdGlvbiB3aXRoSW1tdXRhYmxlU3RhdGU8U3RhdGUgZXh0ZW5kcyBvYmplY3Q+KFxuICBzdGF0ZU9yRmFjdG9yeTogU3RhdGUgfCAoKCkgPT4gU3RhdGUpLFxuICBvcHRpb25zPzogeyBlbmFibGVJblByb2R1Y3Rpb24/OiBib29sZWFuIH0sXG4pOiBTaWduYWxTdG9yZUZlYXR1cmU8XG4gIFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdCxcbiAgRW1wdHlGZWF0dXJlUmVzdWx0ICYgeyBzdGF0ZTogU3RhdGUgfVxuPiB7XG4gIGNvbnN0IGltbXV0YWJsZVN0YXRlID1cbiAgICB0eXBlb2Ygc3RhdGVPckZhY3RvcnkgPT09ICdmdW5jdGlvbicgPyBzdGF0ZU9yRmFjdG9yeSgpIDogc3RhdGVPckZhY3Rvcnk7XG4gIGNvbnN0IHN0YXRlS2V5cyA9IFJlZmxlY3Qub3duS2V5cyhpbW11dGFibGVTdGF0ZSk7XG5cbiAgY29uc3QgYXBwbHlGcmVlemluZyA9IGlzRGV2TW9kZSgpIHx8IG9wdGlvbnM/LmVuYWJsZUluUHJvZHVjdGlvbiA9PT0gdHJ1ZTtcbiAgcmV0dXJuIHNpZ25hbFN0b3JlRmVhdHVyZShcbiAgICB3aXRoU3RhdGUoaW1tdXRhYmxlU3RhdGUpLFxuICAgIHdpdGhIb29rcygoc3RvcmUpID0+ICh7XG4gICAgICBvbkluaXQoKSB7XG4gICAgICAgIGlmICghYXBwbHlGcmVlemluZykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogYGltbXV0YWJsZVN0YXRlYCB3aWxsIGJlIGluaXRpYWxseSBmcm96ZW4uIFRoYXQgaXMgYmVjYXVzZVxuICAgICAgICAgKiBvZiBwb3RlbnRpYWwgbXV0YXRpb25zIG91dHNpZGUgdGhlIFNpZ25hbFN0b3JlXG4gICAgICAgICAqXG4gICAgICAgICAqIGBgYHRzXG4gICAgICAgICAqIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHt1c2VyOiB7aWQ6IDF9fTtcbiAgICAgICAgICogc2lnbmFsU3RvcmUod2l0aEltbXV0YWJsZVN0YXRlKGluaXRpYWxTdGF0ZSkpO1xuICAgICAgICAgKlxuICAgICAgICAgKiBpbml0aWFsU3RhdGUudXNlci5pZCA9IDI7IC8vIG11c3QgdGhyb3cgaW1tdXRhYmlsaXR5XG4gICAgICAgICAqIGBgYFxuICAgICAgICAgKi9cbiAgICAgICAgZGVlcEZyZWV6ZShcbiAgICAgICAgICBnZXRTdGF0ZShzdG9yZSkgYXMgUmVjb3JkPHN0cmluZyB8IHN5bWJvbCwgdW5rbm93bj4sXG4gICAgICAgICAgc3RhdGVLZXlzLFxuICAgICAgICApO1xuXG4gICAgICAgIHdhdGNoU3RhdGUoc3RvcmUsIChzdGF0ZSkgPT4ge1xuICAgICAgICAgIGRlZXBGcmVlemUoc3RhdGUgYXMgUmVjb3JkPHN0cmluZyB8IHN5bWJvbCwgdW5rbm93bj4sIHN0YXRlS2V5cyk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9KSksXG4gICk7XG59XG4iXX0=","import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport const keyPath = 'ngrxToolkitKeyPath';\nexport const dbName = 'ngrxToolkitDb';\nexport const storeName = 'ngrxToolkitStore';\nexport const VERSION = 1;\nexport class IndexedDBService {\n /**\n * write to indexedDB\n * @param key\n * @param data\n */\n async setItem(key, data) {\n const db = await this.openDB();\n const tx = db.transaction(storeName, 'readwrite');\n const store = tx.objectStore(storeName);\n store.put({\n [keyPath]: key,\n value: data,\n });\n return new Promise((resolve, reject) => {\n tx.oncomplete = () => {\n db.close();\n resolve();\n };\n tx.onerror = () => {\n db.close();\n reject();\n };\n });\n }\n /**\n * read from indexedDB\n * @param key\n */\n async getItem(key) {\n const db = await this.openDB();\n const tx = db.transaction(storeName, 'readonly');\n const store = tx.objectStore(storeName);\n const request = store.get(key);\n return new Promise((resolve, reject) => {\n request.onsuccess = () => {\n db.close();\n // localStorage(sessionStorage) returns null if the key does not exist\n // Similarly, indexedDB should return null\n if (request.result === undefined) {\n resolve(null);\n }\n resolve(request.result?.['value']);\n };\n request.onerror = () => {\n db.close();\n reject();\n };\n });\n }\n /**\n * delete indexedDB\n * @param key\n */\n async clear(key) {\n const db = await this.openDB();\n const tx = db.transaction(storeName, 'readwrite');\n const store = tx.objectStore(storeName);\n const request = store.delete(key);\n return new Promise((resolve, reject) => {\n request.onsuccess = () => {\n db.close();\n resolve();\n };\n request.onerror = () => {\n db.close();\n reject();\n };\n });\n }\n /**\n * open indexedDB\n */\n async openDB() {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(dbName, VERSION);\n request.onupgradeneeded = () => {\n const db = request.result;\n if (!db.objectStoreNames.contains(storeName)) {\n db.createObjectStore(storeName, { keyPath });\n }\n };\n request.onsuccess = () => {\n resolve(request.result);\n };\n request.onerror = () => {\n reject(request.error);\n };\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: IndexedDBService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: IndexedDBService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: IndexedDBService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXhlZGRiLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL3N0b3JhZ2Utc3luYy9pbnRlcm5hbC9pbmRleGVkZGIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUUzQyxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsb0JBQW9CLENBQUM7QUFFNUMsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQUM7QUFFNUMsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFXLENBQVUsQ0FBQztBQUcxQyxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQVcsRUFBRSxJQUFZO1FBQ3JDLE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRS9CLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRWxELE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFeEMsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUNSLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRztZQUNkLEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxFQUFFLENBQUMsVUFBVSxHQUFHLEdBQVMsRUFBRTtnQkFDekIsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQyxDQUFDO1lBRUYsRUFBRSxDQUFDLE9BQU8sR0FBRyxHQUFTLEVBQUU7Z0JBQ3RCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDWCxNQUFNLEVBQUUsQ0FBQztZQUNYLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBVztRQUN2QixNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUUvQixNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUVqRCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXhDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFL0IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxPQUFPLENBQUMsU0FBUyxHQUFHLEdBQVMsRUFBRTtnQkFDN0IsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLHNFQUFzRTtnQkFDdEUsMENBQTBDO2dCQUMxQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQ2pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEIsQ0FBQztnQkFDRCxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDckMsQ0FBQyxDQUFDO1lBRUYsT0FBTyxDQUFDLE9BQU8sR0FBRyxHQUFTLEVBQUU7Z0JBQzNCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDWCxNQUFNLEVBQUUsQ0FBQztZQUNYLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBVztRQUNyQixNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUUvQixNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUVsRCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXhDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFbEMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxPQUFPLENBQUMsU0FBUyxHQUFHLEdBQVMsRUFBRTtnQkFDN0IsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQyxDQUFDO1lBRUYsT0FBTyxDQUFDLE9BQU8sR0FBRyxHQUFTLEVBQUU7Z0JBQzNCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDWCxNQUFNLEVBQUUsQ0FBQztZQUNYLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLE1BQU07UUFDbEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUVoRCxPQUFPLENBQUMsZUFBZSxHQUFHLEdBQUcsRUFBRTtnQkFDN0IsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFFMUIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztvQkFDN0MsRUFBRSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQy9DLENBQUM7WUFDSCxDQUFDLENBQUM7WUFFRixPQUFPLENBQUMsU0FBUyxHQUFHLEdBQVMsRUFBRTtnQkFDN0IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxQixDQUFDLENBQUM7WUFFRixPQUFPLENBQUMsT0FBTyxHQUFHLEdBQVMsRUFBRTtnQkFDM0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QixDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBL0dVLGdCQUFnQjtrSEFBaEIsZ0JBQWdCLGNBREgsTUFBTTs7MkZBQ25CLGdCQUFnQjtrQkFENUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBrZXlQYXRoID0gJ25ncnhUb29sa2l0S2V5UGF0aCc7XG5cbmV4cG9ydCBjb25zdCBkYk5hbWUgPSAnbmdyeFRvb2xraXREYic7XG5cbmV4cG9ydCBjb25zdCBzdG9yZU5hbWUgPSAnbmdyeFRvb2xraXRTdG9yZSc7XG5cbmV4cG9ydCBjb25zdCBWRVJTSU9OOiBudW1iZXIgPSAxIGFzIGNvbnN0O1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEluZGV4ZWREQlNlcnZpY2Uge1xuICAvKipcbiAgICogd3JpdGUgdG8gaW5kZXhlZERCXG4gICAqIEBwYXJhbSBrZXlcbiAgICogQHBhcmFtIGRhdGFcbiAgICovXG4gIGFzeW5jIHNldEl0ZW0oa2V5OiBzdHJpbmcsIGRhdGE6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGRiID0gYXdhaXQgdGhpcy5vcGVuREIoKTtcblxuICAgIGNvbnN0IHR4ID0gZGIudHJhbnNhY3Rpb24oc3RvcmVOYW1lLCAncmVhZHdyaXRlJyk7XG5cbiAgICBjb25zdCBzdG9yZSA9IHR4Lm9iamVjdFN0b3JlKHN0b3JlTmFtZSk7XG5cbiAgICBzdG9yZS5wdXQoe1xuICAgICAgW2tleVBhdGhdOiBrZXksXG4gICAgICB2YWx1ZTogZGF0YSxcbiAgICB9KTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0eC5vbmNvbXBsZXRlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICBkYi5jbG9zZSgpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9O1xuXG4gICAgICB0eC5vbmVycm9yID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICBkYi5jbG9zZSgpO1xuICAgICAgICByZWplY3QoKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogcmVhZCBmcm9tIGluZGV4ZWREQlxuICAgKiBAcGFyYW0ga2V5XG4gICAqL1xuICBhc3luYyBnZXRJdGVtKGtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgY29uc3QgZGIgPSBhd2FpdCB0aGlzLm9wZW5EQigpO1xuXG4gICAgY29uc3QgdHggPSBkYi50cmFuc2FjdGlvbihzdG9yZU5hbWUsICdyZWFkb25seScpO1xuXG4gICAgY29uc3Qgc3RvcmUgPSB0eC5vYmplY3RTdG9yZShzdG9yZU5hbWUpO1xuXG4gICAgY29uc3QgcmVxdWVzdCA9IHN0b3JlLmdldChrZXkpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICBkYi5jbG9zZSgpO1xuICAgICAgICAvLyBsb2NhbFN0b3JhZ2Uoc2Vzc2lvblN0b3JhZ2UpIHJldHVybnMgbnVsbCBpZiB0aGUga2V5IGRvZXMgbm90IGV4aXN0XG4gICAgICAgIC8vIFNpbWlsYXJseSwgaW5kZXhlZERCIHNob3VsZCByZXR1cm4gbnVsbFxuICAgICAgICBpZiAocmVxdWVzdC5yZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShyZXF1ZXN0LnJlc3VsdD8uWyd2YWx1ZSddKTtcbiAgICAgIH07XG5cbiAgICAgIHJlcXVlc3Qub25lcnJvciA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgZGIuY2xvc2UoKTtcbiAgICAgICAgcmVqZWN0KCk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGRlbGV0ZSBpbmRleGVkREJcbiAgICogQHBhcmFtIGtleVxuICAgKi9cbiAgYXN5bmMgY2xlYXIoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBkYiA9IGF3YWl0IHRoaXMub3BlbkRCKCk7XG5cbiAgICBjb25zdCB0eCA9IGRiLnRyYW5zYWN0aW9uKHN0b3JlTmFtZSwgJ3JlYWR3cml0ZScpO1xuXG4gICAgY29uc3Qgc3RvcmUgPSB0eC5vYmplY3RTdG9yZShzdG9yZU5hbWUpO1xuXG4gICAgY29uc3QgcmVxdWVzdCA9IHN0b3JlLmRlbGV0ZShrZXkpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICBkYi5jbG9zZSgpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9O1xuXG4gICAgICByZXF1ZXN0Lm9uZXJyb3IgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgIHJlamVjdCgpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIGluZGV4ZWREQlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBvcGVuREIoKTogUHJvbWlzZTxJREJEYXRhYmFzZT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGJOYW1lLCBWRVJTSU9OKTtcblxuICAgICAgcmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRiID0gcmVxdWVzdC5yZXN1bHQ7XG5cbiAgICAgICAgaWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKHN0b3JlTmFtZSkpIHtcbiAgICAgICAgICBkYi5jcmVhdGVPYmplY3RTdG9yZShzdG9yZU5hbWUsIHsga2V5UGF0aCB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIHJlc29sdmUocmVxdWVzdC5yZXN1bHQpO1xuICAgICAgfTtcblxuICAgICAgcmVxdWVzdC5vbmVycm9yID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICByZWplY3QocmVxdWVzdC5lcnJvcik7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG59XG4iXX0=","/**\n * AsyncFeatureResult is used as the public interface that users interact with\n * when calling `withIndexedDB`. It intentionally omits the internal SYNC_STATUS\n * property to avoid TypeScript error TS4058 (return type of public method\n * includes private type).\n *\n * For internal implementation, we use AsyncStoreForFactory which includes\n * the SYNC_STATUS property needed for state management.\n */\nexport const SYNC_STATUS = Symbol('SYNC_STATUS');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRvb2xraXQvc3JjL2xpYi9zdG9yYWdlLXN5bmMvaW50ZXJuYWwvbW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTZCQTs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTaWduYWwsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFbXB0eUZlYXR1cmVSZXN1bHQsIFdyaXRhYmxlU3RhdGVTb3VyY2UgfSBmcm9tICdAbmdyeC9zaWduYWxzJztcbmltcG9ydCB7IFN5bmNDb25maWcgfSBmcm9tICcuLi93aXRoLXN0b3JhZ2Utc3luYyc7XG5cbmV4cG9ydCB0eXBlIFN5bmNNZXRob2RzID0ge1xuICBjbGVhclN0b3JhZ2UoKTogdm9pZDtcbiAgcmVhZEZyb21TdG9yYWdlKCk6IHZvaWQ7XG4gIHdyaXRlVG9TdG9yYWdlKCk6IHZvaWQ7XG59O1xuXG5leHBvcnQgdHlwZSBTeW5jRmVhdHVyZVJlc3VsdCA9IEVtcHR5RmVhdHVyZVJlc3VsdCAmIHtcbiAgbWV0aG9kczogU3luY01ldGhvZHM7XG59O1xuXG5leHBvcnQgdHlwZSBTeW5jU3RvcmVGb3JGYWN0b3J5PFN0YXRlIGV4dGVuZHMgb2JqZWN0PiA9XG4gIFdyaXRhYmxlU3RhdGVTb3VyY2U8U3RhdGU+O1xuXG5leHBvcnQgdHlwZSBTeW5jU3RvcmFnZVN0cmF0ZWd5PFN0YXRlIGV4dGVuZHMgb2JqZWN0PiA9ICgoXG4gIGNvbmZpZzogUmVxdWlyZWQ8U3luY0NvbmZpZzxTdGF0ZT4+LFxuICBzdG9yZTogU3luY1N0b3JlRm9yRmFjdG9yeTxTdGF0ZT4sXG4gIHVzZVN0dWJzOiBib29sZWFuLFxuKSA9PiBTeW5jTWV0aG9kcykgJiB7IHR5cGU6ICdzeW5jJyB9O1xuXG5leHBvcnQgdHlwZSBBc3luY01ldGhvZHMgPSB7XG4gIGNsZWFyU3RvcmFnZSgpOiBQcm9taXNlPHZvaWQ+O1xuICByZWFkRnJvbVN0b3JhZ2UoKTogUHJvbWlzZTx2b2lkPjtcbiAgd3JpdGVUb1N0b3JhZ2UoKTogUHJvbWlzZTx2b2lkPjtcbn07XG5cbi8qKlxuICogQXN5bmNGZWF0dXJlUmVzdWx0IGlzIHVzZWQgYXMgdGhlIHB1YmxpYyBpbnRlcmZhY2UgdGhhdCB1c2VycyBpbnRlcmFjdCB3aXRoXG4gKiB3aGVuIGNhbGxpbmcgYHdpdGhJbmRleGVkREJgLiBJdCBpbnRlbnRpb25hbGx5IG9taXRzIHRoZSBpbnRlcm5hbCBTWU5DX1NUQVRVU1xuICogcHJvcGVydHkgdG8gYXZvaWQgVHlwZVNjcmlwdCBlcnJvciBUUzQwNTggKHJldHVybiB0eXBlIG9mIHB1YmxpYyBtZXRob2RcbiAqIGluY2x1ZGVzIHByaXZhdGUgdHlwZSkuXG4gKlxuICogRm9yIGludGVybmFsIGltcGxlbWVudGF0aW9uLCB3ZSB1c2UgQXN5bmNTdG9yZUZvckZhY3Rvcnkgd2hpY2ggaW5jbHVkZXNcbiAqIHRoZSBTWU5DX1NUQVRVUyBwcm9wZXJ0eSBuZWVkZWQgZm9yIHN0YXRlIG1hbmFnZW1lbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBTWU5DX1NUQVRVUyA9IFN5bWJvbCgnU1lOQ19TVEFUVVMnKTtcbmV4cG9ydCB0eXBlIFN5bmNTdGF0dXMgPSAnaWRsZScgfCAnc3luY2luZycgfCAnc3luY2VkJztcblxuLy8gS2VlcGluZyBpdCBpbnRlcm5hbCBhdm9pZHMgVFM0MDU4IGVycm9yXG5leHBvcnQgdHlwZSBJbnRlcm5hbEFzeW5jUHJvcHMgPSBBc3luY0ZlYXR1cmVSZXN1bHRbJ3Byb3BzJ10gJiB7XG4gIFtTWU5DX1NUQVRVU106IFdyaXRhYmxlU2lnbmFsPFN5bmNTdGF0dXM+O1xufTtcblxuZXhwb3J0IHR5cGUgQXN5bmNGZWF0dXJlUmVzdWx0ID0gRW1wdHlGZWF0dXJlUmVzdWx0ICYge1xuICBtZXRob2RzOiBBc3luY01ldGhvZHM7XG4gIHByb3BzOiB7XG4gICAgaXNTeW5jZWQ6IFNpZ25hbDxib29sZWFuPjtcbiAgICB3aGVuU3luY2VkOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICB9O1xufTtcblxuZXhwb3J0IHR5cGUgQXN5bmNTdG9yZUZvckZhY3Rvcnk8U3RhdGUgZXh0ZW5kcyBvYmplY3Q+ID1cbiAgV3JpdGFibGVTdGF0ZVNvdXJjZTxTdGF0ZT4gJiBJbnRlcm5hbEFzeW5jUHJvcHM7XG5cbmV4cG9ydCB0eXBlIEFzeW5jU3RvcmFnZVN0cmF0ZWd5PFN0YXRlIGV4dGVuZHMgb2JqZWN0PiA9ICgoXG4gIGNvbmZpZzogUmVxdWlyZWQ8U3luY0NvbmZpZzxTdGF0ZT4+LFxuICBzdG9yZTogQXN5bmNTdG9yZUZvckZhY3Rvcnk8U3RhdGU+LFxuICB1c2VTdHViczogYm9vbGVhbixcbikgPT4gQXN5bmNNZXRob2RzKSAmIHsgdHlwZTogJ2FzeW5jJyB9O1xuIl19","import { inject } from '@angular/core';\nimport { getState, patchState } from '@ngrx/signals';\nimport { IndexedDBService } from '../internal/indexeddb.service';\nimport { SYNC_STATUS, } from '../internal/models';\nexport function withIndexedDB() {\n function factory({ key, parse, select, stringify }, store, useStubs) {\n if (useStubs) {\n return {\n clearStorage: () => Promise.resolve(),\n readFromStorage: () => Promise.resolve(),\n writeToStorage: () => Promise.resolve(),\n };\n }\n const indexeddbService = inject(IndexedDBService);\n function warnOnSyncing(mode) {\n if (store[SYNC_STATUS]() === 'syncing') {\n const prettyMode = mode === 'read' ? 'Reading' : 'Writing';\n console.warn(`${prettyMode} to Store (${key}) happened during an ongoing synchronization process.`, 'Please ensure that the store is not in syncing state via `store.whenSynced()`.', 'Alternatively, you can disable the autoSync by passing `autoSync: false` in the config.');\n }\n }\n return {\n /**\n * Removes the item stored in storage.\n */\n async clearStorage() {\n warnOnSyncing('write');\n store[SYNC_STATUS].set('syncing');\n patchState(store, {});\n await indexeddbService.clear(key);\n store[SYNC_STATUS].set('synced');\n },\n /**\n * Reads item from storage and patches the state.\n */\n async readFromStorage() {\n warnOnSyncing('read');\n store[SYNC_STATUS].set('syncing');\n const stateString = await indexeddbService.getItem(key);\n if (stateString) {\n patchState(store, parse(stateString));\n }\n store[SYNC_STATUS].set('synced');\n },\n /**\n * Writes selected portion to storage.\n */\n async writeToStorage() {\n warnOnSyncing('write');\n store[SYNC_STATUS].set('syncing');\n const slicedState = select(getState(store));\n await indexeddbService.setItem(key, stringify(slicedState));\n store[SYNC_STATUS].set('synced');\n },\n };\n }\n factory.type = 'async';\n return factory;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1pbmRleGVkLWRiLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRvb2xraXQvc3JjL2xpYi9zdG9yYWdlLXN5bmMvZmVhdHVyZXMvd2l0aC1pbmRleGVkLWRiLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUlMLFdBQVcsR0FDWixNQUFNLG9CQUFvQixDQUFDO0FBRzVCLE1BQU0sVUFBVSxhQUFhO0lBRzNCLFNBQVMsT0FBTyxDQUNkLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUErQixFQUM5RCxLQUFrQyxFQUNsQyxRQUFpQjtRQUVqQixJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsT0FBTztnQkFDTCxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRTtnQkFDckMsZUFBZSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7Z0JBQ3hDLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFO2FBQ3hDLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUVsRCxTQUFTLGFBQWEsQ0FBQyxJQUFzQjtZQUMzQyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN2QyxNQUFNLFVBQVUsR0FBRyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDM0QsT0FBTyxDQUFDLElBQUksQ0FDVixHQUFHLFVBQVUsY0FBYyxHQUFHLHVEQUF1RCxFQUNyRixnRkFBZ0YsRUFDaEYseUZBQXlGLENBQzFGLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU87WUFDTDs7ZUFFRztZQUNILEtBQUssQ0FBQyxZQUFZO2dCQUNoQixhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3ZCLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2xDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3RCLE1BQU0sZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25DLENBQUM7WUFFRDs7ZUFFRztZQUNILEtBQUssQ0FBQyxlQUFlO2dCQUNuQixhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3RCLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2xDLE1BQU0sV0FBVyxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN4RCxJQUFJLFdBQVcsRUFBRSxDQUFDO29CQUNoQixVQUFVLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxDQUFDO2dCQUNELEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbkMsQ0FBQztZQUVEOztlQUVHO1lBQ0gsS0FBSyxDQUFDLGNBQWM7Z0JBQ2xCLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDdkIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDbEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBVSxDQUFDO2dCQUNyRCxNQUFNLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQzVELEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbkMsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFnQixDQUFDO0lBRWhDLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldFN0YXRlLCBwYXRjaFN0YXRlIH0gZnJvbSAnQG5ncngvc2lnbmFscyc7XG5pbXBvcnQgeyBJbmRleGVkREJTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJuYWwvaW5kZXhlZGRiLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQXN5bmNNZXRob2RzLFxuICBBc3luY1N0b3JhZ2VTdHJhdGVneSxcbiAgQXN5bmNTdG9yZUZvckZhY3RvcnksXG4gIFNZTkNfU1RBVFVTLFxufSBmcm9tICcuLi9pbnRlcm5hbC9tb2RlbHMnO1xuaW1wb3J0IHsgU3luY0NvbmZpZyB9IGZyb20gJy4uL3dpdGgtc3RvcmFnZS1zeW5jJztcblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhJbmRleGVkREI8XG4gIFN0YXRlIGV4dGVuZHMgb2JqZWN0LFxuPigpOiBBc3luY1N0b3JhZ2VTdHJhdGVneTxTdGF0ZT4ge1xuICBmdW5jdGlvbiBmYWN0b3J5KFxuICAgIHsga2V5LCBwYXJzZSwgc2VsZWN0LCBzdHJpbmdpZnkgfTogUmVxdWlyZWQ8U3luY0NvbmZpZzxTdGF0ZT4+LFxuICAgIHN0b3JlOiBBc3luY1N0b3JlRm9yRmFjdG9yeTxTdGF0ZT4sXG4gICAgdXNlU3R1YnM6IGJvb2xlYW4sXG4gICk6IEFzeW5jTWV0aG9kcyB7XG4gICAgaWYgKHVzZVN0dWJzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjbGVhclN0b3JhZ2U6ICgpID0+IFByb21pc2UucmVzb2x2ZSgpLFxuICAgICAgICByZWFkRnJvbVN0b3JhZ2U6ICgpID0+IFByb21pc2UucmVzb2x2ZSgpLFxuICAgICAgICB3cml0ZVRvU3RvcmFnZTogKCkgPT4gUHJvbWlzZS5yZXNvbHZlKCksXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGluZGV4ZWRkYlNlcnZpY2UgPSBpbmplY3QoSW5kZXhlZERCU2VydmljZSk7XG5cbiAgICBmdW5jdGlvbiB3YXJuT25TeW5jaW5nKG1vZGU6ICdyZWFkJyB8ICd3cml0ZScpOiB2b2lkIHtcbiAgICAgIGlmIChzdG9yZVtTWU5DX1NUQVRVU10oKSA9PT0gJ3N5bmNpbmcnKSB7XG4gICAgICAgIGNvbnN0IHByZXR0eU1vZGUgPSBtb2RlID09PSAncmVhZCcgPyAnUmVhZGluZycgOiAnV3JpdGluZyc7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgJHtwcmV0dHlNb2RlfSB0byBTdG9yZSAoJHtrZXl9KSBoYXBwZW5lZCBkdXJpbmcgYW4gb25nb2luZyBzeW5jaHJvbml6YXRpb24gcHJvY2Vzcy5gLFxuICAgICAgICAgICdQbGVhc2UgZW5zdXJlIHRoYXQgdGhlIHN0b3JlIGlzIG5vdCBpbiBzeW5jaW5nIHN0YXRlIHZpYSBgc3RvcmUud2hlblN5bmNlZCgpYC4nLFxuICAgICAgICAgICdBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGRpc2FibGUgdGhlIGF1dG9TeW5jIGJ5IHBhc3NpbmcgYGF1dG9TeW5jOiBmYWxzZWAgaW4gdGhlIGNvbmZpZy4nLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAvKipcbiAgICAgICAqIFJlbW92ZXMgdGhlIGl0ZW0gc3RvcmVkIGluIHN0b3JhZ2UuXG4gICAgICAgKi9cbiAgICAgIGFzeW5jIGNsZWFyU3RvcmFnZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgd2Fybk9uU3luY2luZygnd3JpdGUnKTtcbiAgICAgICAgc3RvcmVbU1lOQ19TVEFUVVNdLnNldCgnc3luY2luZycpO1xuICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7fSk7XG4gICAgICAgIGF3YWl0IGluZGV4ZWRkYlNlcnZpY2UuY2xlYXIoa2V5KTtcbiAgICAgICAgc3RvcmVbU1lOQ19TVEFUVVNdLnNldCgnc3luY2VkJyk7XG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIFJlYWRzIGl0ZW0gZnJvbSBzdG9yYWdlIGFuZCBwYXRjaGVzIHRoZSBzdGF0ZS5cbiAgICAgICAqL1xuICAgICAgYXN5bmMgcmVhZEZyb21TdG9yYWdlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB3YXJuT25TeW5jaW5nKCdyZWFkJyk7XG4gICAgICAgIHN0b3JlW1NZTkNfU1RBVFVTXS5zZXQoJ3N5bmNpbmcnKTtcbiAgICAgICAgY29uc3Qgc3RhdGVTdHJpbmcgPSBhd2FpdCBpbmRleGVkZGJTZXJ2aWNlLmdldEl0ZW0oa2V5KTtcbiAgICAgICAgaWYgKHN0YXRlU3RyaW5nKSB7XG4gICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgcGFyc2Uoc3RhdGVTdHJpbmcpKTtcbiAgICAgICAgfVxuICAgICAgICBzdG9yZVtTWU5DX1NUQVRVU10uc2V0KCdzeW5jZWQnKTtcbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogV3JpdGVzIHNlbGVjdGVkIHBvcnRpb24gdG8gc3RvcmFnZS5cbiAgICAgICAqL1xuICAgICAgYXN5bmMgd3JpdGVUb1N0b3JhZ2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHdhcm5PblN5bmNpbmcoJ3dyaXRlJyk7XG4gICAgICAgIHN0b3JlW1NZTkNfU1RBVFVTXS5zZXQoJ3N5bmNpbmcnKTtcbiAgICAgICAgY29uc3Qgc2xpY2VkU3RhdGUgPSBzZWxlY3QoZ2V0U3RhdGUoc3RvcmUpKSBhcyBTdGF0ZTtcbiAgICAgICAgYXdhaXQgaW5kZXhlZGRiU2VydmljZS5zZXRJdGVtKGtleSwgc3RyaW5naWZ5KHNsaWNlZFN0YXRlKSk7XG4gICAgICAgIHN0b3JlW1NZTkNfU1RBVFVTXS5zZXQoJ3N5bmNlZCcpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG4gIGZhY3RvcnkudHlwZSA9ICdhc3luYycgYXMgY29uc3Q7XG5cbiAgcmV0dXJuIGZhY3Rvcnk7XG59XG4iXX0=","import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class LocalStorageService {\n getItem(key) {\n return localStorage.getItem(key);\n }\n setItem(key, data) {\n return localStorage.setItem(key, data);\n }\n clear(key) {\n return localStorage.removeItem(key);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: LocalStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: LocalStorageService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: LocalStorageService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRvb2xraXQvc3JjL2xpYi9zdG9yYWdlLXN5bmMvaW50ZXJuYWwvbG9jYWwtc3RvcmFnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTTNDLE1BQU0sT0FBTyxtQkFBbUI7SUFDOUIsT0FBTyxDQUFDLEdBQVc7UUFDakIsT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxPQUFPLENBQUMsR0FBVyxFQUFFLElBQVk7UUFDL0IsT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQVc7UUFDZixPQUFPLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEMsQ0FBQzs4R0FYVSxtQkFBbUI7a0hBQW5CLG1CQUFtQixjQUZsQixNQUFNOzsyRkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt9IGZyb20gJy4vbW9kZWxzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIExvY2FsU3RvcmFnZVNlcnZpY2Uge1xuICBnZXRJdGVtKGtleTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gIH1cblxuICBzZXRJdGVtKGtleTogc3RyaW5nLCBkYXRhOiBzdHJpbmcpOiB2b2lkIHtcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBkYXRhKTtcbiAgfVxuXG4gIGNsZWFyKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gIH1cbn1cbiJdfQ==","import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class SessionStorageService {\n getItem(key) {\n return sessionStorage.getItem(key);\n }\n setItem(key, data) {\n return sessionStorage.setItem(key, data);\n }\n clear(key) {\n return sessionStorage.removeItem(key);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: SessionStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: SessionStorageService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: SessionStorageService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi1zdG9yYWdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL3N0b3JhZ2Utc3luYy9pbnRlcm5hbC9zZXNzaW9uLXN0b3JhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8scUJBQXFCO0lBQ2hDLE9BQU8sQ0FBQyxHQUFXO1FBQ2pCLE9BQU8sY0FBYyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsT0FBTyxDQUFDLEdBQVcsRUFBRSxJQUFZO1FBQy9CLE9BQU8sY0FBYyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELEtBQUssQ0FBQyxHQUFXO1FBQ2YsT0FBTyxjQUFjLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7OEdBWFUscUJBQXFCO2tIQUFyQixxQkFBcUIsY0FGcEIsTUFBTTs7MkZBRVAscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFNlc3Npb25TdG9yYWdlU2VydmljZSB7XG4gIGdldEl0ZW0oa2V5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICB9XG5cbiAgc2V0SXRlbShrZXk6IHN0cmluZywgZGF0YTogc3RyaW5nKTogdm9pZCB7XG4gICAgcmV0dXJuIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oa2V5LCBkYXRhKTtcbiAgfVxuXG4gIGNsZWFyKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgcmV0dXJuIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcbiAgfVxufVxuIl19","import { inject } from '@angular/core';\nimport { getState, patchState } from '@ngrx/signals';\nimport { LocalStorageService } from '../internal/local-storage.service';\nimport { SessionStorageService } from '../internal/session-storage.service';\nexport function withLocalStorage() {\n return createSyncMethods(LocalStorageService);\n}\nexport function withSessionStorage() {\n return createSyncMethods(SessionStorageService);\n}\nfunction createSyncMethods(Storage) {\n function factory({ key, parse, select, stringify }, store, useStubs) {\n if (useStubs) {\n return {\n clearStorage: () => undefined,\n readFromStorage: () => undefined,\n writeToStorage: () => undefined,\n };\n }\n const storage = inject(Storage);\n return {\n clearStorage() {\n storage.clear(key);\n },\n readFromStorage() {\n const stateString = storage.getItem(key);\n if (stateString) {\n patchState(store, parse(stateString));\n }\n },\n writeToStorage() {\n const slicedState = select(getState(store));\n storage.setItem(key, stringify(slicedState));\n },\n };\n }\n factory.type = 'sync';\n return factory;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1sb2NhbC1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRvb2xraXQvc3JjL2xpYi9zdG9yYWdlLXN5bmMvZmVhdHVyZXMvd2l0aC1sb2NhbC1zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQVEsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFeEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFHNUUsTUFBTSxVQUFVLGdCQUFnQjtJQUc5QixPQUFPLGlCQUFpQixDQUFRLG1CQUFtQixDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0I7SUFDaEMsT0FBTyxpQkFBaUIsQ0FBUSxxQkFBcUIsQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUN4QixPQUEwRDtJQUUxRCxTQUFTLE9BQU8sQ0FDZCxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBK0IsRUFDOUQsS0FBaUMsRUFDakMsUUFBaUI7UUFFakIsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLE9BQU87Z0JBQ0wsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVM7Z0JBQzdCLGVBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTO2dCQUNoQyxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUzthQUNoQyxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVoQyxPQUFPO1lBQ0wsWUFBWTtnQkFDVixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLENBQUM7WUFFRCxlQUFlO2dCQUNiLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBRXpDLElBQUksV0FBVyxFQUFFLENBQUM7b0JBQ2hCLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDLENBQUM7WUFDSCxDQUFDO1lBRUQsY0FBYztnQkFDWixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFVLENBQUM7Z0JBQ3JELE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQy9DLENBQUM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sQ0FBQyxJQUFJLEdBQUcsTUFBZSxDQUFDO0lBRS9CLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldFN0YXRlLCBwYXRjaFN0YXRlIH0gZnJvbSAnQG5ncngvc2lnbmFscyc7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJuYWwvbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IFN5bmNTdG9yYWdlU3RyYXRlZ3ksIFN5bmNTdG9yZUZvckZhY3RvcnkgfSBmcm9tICcuLi9pbnRlcm5hbC9tb2RlbHMnO1xuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJuYWwvc2Vzc2lvbi1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3luY0NvbmZpZyB9IGZyb20gJy4uL3dpdGgtc3RvcmFnZS1zeW5jJztcblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhMb2NhbFN0b3JhZ2U8XG4gIFN0YXRlIGV4dGVuZHMgb2JqZWN0LFxuPigpOiBTeW5jU3RvcmFnZVN0cmF0ZWd5PFN0YXRlPiB7XG4gIHJldHVybiBjcmVhdGVTeW5jTWV0aG9kczxTdGF0ZT4oTG9jYWxTdG9yYWdlU2VydmljZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoU2Vzc2lvblN0b3JhZ2U8U3RhdGUgZXh0ZW5kcyBvYmplY3Q+KCkge1xuICByZXR1cm4gY3JlYXRlU3luY01ldGhvZHM8U3RhdGU+KFNlc3Npb25TdG9yYWdlU2VydmljZSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN5bmNNZXRob2RzPFN0YXRlIGV4dGVuZHMgb2JqZWN0PihcbiAgU3RvcmFnZTogVHlwZTxMb2NhbFN0b3JhZ2VTZXJ2aWNlIHwgU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlPixcbik6IFN5bmNTdG9yYWdlU3RyYXRlZ3k8U3RhdGU+IHtcbiAgZnVuY3Rpb24gZmFjdG9yeShcbiAgICB7IGtleSwgcGFyc2UsIHNlbGVjdCwgc3RyaW5naWZ5IH06IFJlcXVpcmVkPFN5bmNDb25maWc8U3RhdGU+PixcbiAgICBzdG9yZTogU3luY1N0b3JlRm9yRmFjdG9yeTxTdGF0ZT4sXG4gICAgdXNlU3R1YnM6IGJvb2xlYW4sXG4gICkge1xuICAgIGlmICh1c2VTdHVicykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2xlYXJTdG9yYWdlOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgICAgIHJlYWRGcm9tU3RvcmFnZTogKCkgPT4gdW5kZWZpbmVkLFxuICAgICAgICB3cml0ZVRvU3RvcmFnZTogKCkgPT4gdW5kZWZpbmVkLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdG9yYWdlID0gaW5qZWN0KFN0b3JhZ2UpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNsZWFyU3RvcmFnZSgpOiB2b2lkIHtcbiAgICAgICAgc3RvcmFnZS5jbGVhcihrZXkpO1xuICAgICAgfSxcblxuICAgICAgcmVhZEZyb21TdG9yYWdlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGF0ZVN0cmluZyA9IHN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuXG4gICAgICAgIGlmIChzdGF0ZVN0cmluZykge1xuICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHBhcnNlKHN0YXRlU3RyaW5nKSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIHdyaXRlVG9TdG9yYWdlKCkge1xuICAgICAgICBjb25zdCBzbGljZWRTdGF0ZSA9IHNlbGVjdChnZXRTdGF0ZShzdG9yZSkpIGFzIFN0YXRlO1xuICAgICAgICBzdG9yYWdlLnNldEl0ZW0oa2V5LCBzdHJpbmdpZnkoc2xpY2VkU3RhdGUpKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuICBmYWN0b3J5LnR5cGUgPSAnc3luYycgYXMgY29uc3Q7XG5cbiAgcmV0dXJuIGZhY3Rvcnk7XG59XG4iXX0=","import { isPlatformServer } from '@angular/common';\nimport { computed, effect, inject, PLATFORM_ID, signal } from '@angular/core';\nimport { getState, signalStoreFeature, watchState, withHooks, withMethods, withProps, } from '@ngrx/signals';\nimport { withLocalStorage, withSessionStorage, } from './features/with-local-storage';\nimport { SYNC_STATUS, } from './internal/models';\nexport function withStorageSync(configOrKey, storageStrategy) {\n if (typeof configOrKey !== 'string' &&\n configOrKey.storage &&\n storageStrategy) {\n throw new Error('You can either pass a storage strategy or a config with storage, but not both.');\n }\n const config = {\n autoSync: true,\n select: (state) => state,\n parse: JSON.parse,\n stringify: JSON.stringify,\n storage: () => localStorage,\n ...(typeof configOrKey === 'string' ? { key: configOrKey } : configOrKey),\n };\n const factory = storageStrategy ??\n (config.storage() === localStorage\n ? withLocalStorage()\n : withSessionStorage());\n if (factory.type === 'sync') {\n return createSyncStorageSync(factory, config);\n }\n else {\n return createAsyncStorageSync(factory, config);\n }\n}\nfunction createSyncStorageSync(factory, config) {\n return signalStoreFeature(withMethods((store, platformId = inject(PLATFORM_ID)) => {\n return factory(config, store, isPlatformServer(platformId));\n }), withHooks({\n onInit(store, platformId = inject(PLATFORM_ID)) {\n if (isPlatformServer(platformId)) {\n return;\n }\n if (config.autoSync) {\n store.readFromStorage();\n watchState(store, () => store.writeToStorage());\n }\n },\n }));\n}\nfunction createAsyncStorageSync(factory, config) {\n return signalStoreFeature(withProps(() => {\n const props = {\n /*\n // we need to have that as property (and not state)\n // Otherwise the state watcher fires when updating the sync status\n */\n [SYNC_STATUS]: signal('idle'),\n };\n const resolves = [];\n effect(() => {\n const syncStatus = props[SYNC_STATUS]();\n if (syncStatus === 'synced') {\n resolves.forEach((resolve) => resolve());\n resolves.splice(0, resolves.length);\n }\n });\n return {\n ...props,\n isSynced: computed(() => props[SYNC_STATUS]() === 'synced'),\n whenSynced: () => new Promise((resolve) => {\n if (props[SYNC_STATUS]() === 'synced') {\n resolve();\n }\n else {\n resolves.push(resolve);\n }\n }),\n };\n }), withMethods((store, platformId = inject(PLATFORM_ID)) => {\n return factory(config, store, isPlatformServer(platformId));\n }), withHooks({\n async onInit(store, platformId = inject(PLATFORM_ID)) {\n if (isPlatformServer(platformId)) {\n return;\n }\n const initialState = JSON.stringify(getState(store));\n if (config.autoSync) {\n let startWatching = false;\n watchState(store, () => {\n if (!startWatching) {\n const currentState = JSON.stringify(getState(store));\n // Necessary because getState returns always a new object\n if (currentState === initialState) {\n return;\n }\n console.warn(`Writing to Store (${config.key}) happened before the state was initially read from storage.`, 'Please ensure that the store is not in syncing state via `store.whenSynced()` before writing to the state.', 'Alternatively, you can disable autoSync by passing `autoSync: false` in the config.');\n return;\n }\n return store.writeToStorage();\n });\n await store.readFromStorage();\n startWatching = true;\n }\n },\n }));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1zdG9yYWdlLXN5bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL3N0b3JhZ2Utc3luYy93aXRoLXN0b3JhZ2Utc3luYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RSxPQUFPLEVBRUwsUUFBUSxFQUNSLGtCQUFrQixFQUdsQixVQUFVLEVBQ1YsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixrQkFBa0IsR0FDbkIsTUFBTSwrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLEVBR0wsV0FBVyxHQUdaLE1BQU0sbUJBQW1CLENBQUM7QUEyRTNCLE1BQU0sVUFBVSxlQUFlLENBQzdCLFdBQWdELEVBQ2hELGVBRXVDO0lBS3ZDLElBQ0UsT0FBTyxXQUFXLEtBQUssUUFBUTtRQUMvQixXQUFXLENBQUMsT0FBTztRQUNuQixlQUFlLEVBQ2YsQ0FBQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0ZBQWdGLENBQ2pGLENBQUM7SUFDSixDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQXlDO1FBQ25ELFFBQVEsRUFBRSxJQUFJO1FBQ2QsTUFBTSxFQUFFLENBQUMsS0FBcUIsRUFBRSxFQUFFLENBQUMsS0FBSztRQUN4QyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7UUFDakIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1FBQ3pCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxZQUFZO1FBQzNCLEdBQUcsQ0FBQyxPQUFPLFdBQVcsS0FBSyxRQUFRLENBQUMsQ0FBQyxD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LENBQUM7QUFDekUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUGxhdGZvcm1TZXJ2ZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBQTEFURk9STV9JRCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBFbXB0eUZlYXR1cmVSZXN1bHQsXG4gIGdldFN0YXRlLFxuICBzaWduYWxTdG9yZUZlYXR1cmUsXG4gIFNpZ25hbFN0b3JlRmVhdHVyZSxcbiAgU2lnbmFsU3RvcmVGZWF0dXJlUmVzdWx0LFxuICB3YXRjaFN0YXRlLFxuICB3aXRoSG9va3MsXG4gIHdpdGhNZXRob2RzLFxuICB3aXRoUHJvcHMsXG59IGZyb20gJ0BuZ3J4L3NpZ25hbHMnO1xuaW1wb3J0IHtcbiAgd2l0aExvY2FsU3RvcmFnZSxcbiAgd2l0aFNlc3Npb25TdG9yYWdlLFxufSBmcm9tICcuL2ZlYXR1cmVzL3dpdGgtbG9jYWwtc3RvcmFnZSc7XG5pbXBvcnQge1xuICBBc3luY0ZlYXR1cmVSZXN1bHQsXG4gIEFzeW5jU3RvcmFnZVN0cmF0ZWd5LFxuICBTWU5DX1NUQVRVUyxcbiAgU3luY0ZlYXR1cmVSZXN1bHQsXG4gIFN5bmNTdG9yYWdlU3RyYXRlZ3ksXG59IGZyb20gJy4vaW50ZXJuYWwvbW9kZWxzJztcblxuZXhwb3J0IHR5cGUgU3luY0NvbmZpZzxTdGF0ZT4gPSB7XG4gIC8qKlxuICAgKiBUaGUga2V5IHdoaWNoIGlzIHVzZWQgdG8gYWNjZXNzIHRoZSBzdG9yYWdlLlxuICAgKi9cbiAga2V5OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGbGFnIGluZGljYXRpbmcgaWYgdGhlIHN0b3JlIHNob3VsZCByZWFkIGZyb20gc3RvcmFnZSBvbiBpbml0IGFuZCB3cml0ZSB0byBzdG9yYWdlIG9uIGV2ZXJ5IHN0YXRlIGNoYW5nZS5cbiAgICpcbiAgICogYHRydWVgIGJ5IGRlZmF1bHRcbiAgICovXG4gIGF1dG9TeW5jPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHRvIHNlbGVjdCB0aGF0IHBvcnRpb24gb2YgdGhlIHN0YXRlIHdoaWNoIHNob3VsZCBiZSBzdG9yZWQuXG4gICAqXG4gICAqIFJldHVybnMgdGhlIHdob2xlIHN0YXRlIG9iamVjdCBieSBkZWZhdWx0XG4gICAqL1xuICBzZWxlY3Q/OiAoc3RhdGU6IFN0YXRlKSA9PiB1bmtub3duO1xuICAvKipcbiAgICogRnVuY3Rpb24gdXNlZCB0byBwYXJzZSB0aGUgc3RhdGUgY29taW5nIGZyb20gc3RvcmFnZS5cbiAgICpcbiAgICogYEpTT04ucGFyc2UoKWAgYnkgZGVmYXVsdFxuICAgKi9cbiAgcGFyc2U/OiAoc3RhdGVTdHJpbmc6IHN0cmluZykgPT4gU3RhdGU7XG4gIC8qKlxuICAgKiBGdW5jdGlvbiB1c2VkIHRvIHRyYW5zZm9ybSB0aGUgc3RhdGUgaW50byBhIHN0cmluZyByZXByZXNlbnRhdGlvbi5cbiAgICpcbiAgICogYEpTT04uc3RyaW5naWZ5KClgIGJ5IGRlZmF1bHRcbiAgICovXG4gIHN0cmluZ2lmeT86IChzdGF0ZTogU3RhdGUpID0+IHN0cmluZztcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayB3aXRoU2Vzc2lvblN0b3JhZ2V9IGluc3RlYWQuXG4gICAqIEZhY3RvcnkgZnVuY3Rpb24gdXNlZCB0byBzd2l0Y2ggdG8gc2Vzc2lvblN0b3JhZ2UuXG4gICAqXG4gICAqIGBsb2NhbFN0b3JhZ2VgIGJ5IGRlZmF1bHRcbiAgICovXG4gIHN0b3JhZ2U/OiAoKSA9PiBTdG9yYWdlO1xufTtcblxuLy8gb25seSBrZXlcbmV4cG9ydCBmdW5jdGlvbiB3aXRoU3RvcmFnZVN5bmM8SW5wdXQgZXh0ZW5kcyBTaWduYWxTdG9yZUZlYXR1cmVSZXN1bHQ+KFxuICBrZXk6IHN0cmluZyxcbik6IFNpZ25hbFN0b3JlRmVhdHVyZTxJbnB1dCwgU3luY0ZlYXR1cmVSZXN1bHQ+O1xuXG4vLyBrZXkgKyBpbmRleGVkZGJcbmV4cG9ydCBmdW5jdGlvbiB3aXRoU3RvcmFnZVN5bmM8SW5wdXQgZXh0ZW5kcyBTaWduYWxTdG9yZUZlYXR1cmVSZXN1bHQ+KFxuICBrZXk6IHN0cmluZyxcbiAgc3RvcmFnZVN0cmF0ZWd5OiBBc3luY1N0b3JhZ2VTdHJhdGVneTxJbnB1dFsnc3RhdGUnXT4sXG4pOiBTaWduYWxTdG9yZUZlYXR1cmU8SW5wdXQsIEFzeW5jRmVhdHVyZVJlc3VsdD47XG5cbi8vIGtleSArIGxvY2FsU3RvcmFnZShvciBzZXNzaW9uU3RvcmFnZSlcbmV4cG9ydCBmdW5jdGlvbiB3aXRoU3RvcmFnZVN5bmM8SW5wdXQgZXh0ZW5kcyBTaWduYWxTdG9yZUZlYXR1cmVSZXN1bHQ+KFxuICBrZXk6IHN0cmluZyxcbiAgc3RvcmFnZVN0cmF0ZWd5OiBTeW5jU3RvcmFnZVN0cmF0ZWd5PElucHV0WydzdGF0ZSddPixcbik6IFNpZ25hbFN0b3JlRmVhdHVyZTxJbnB1dCwgU3luY0ZlYXR1cmVSZXN1bHQ+O1xuXG4vLyBjb25maWcgKyBsb2NhbFN0b3JhZ2VcbmV4cG9ydCBmdW5jdGlvbiB3aXRoU3RvcmFnZVN5bmM8SW5wdXQgZXh0ZW5kcyBTaWduYWxTdG9yZUZlYXR1cmVSZXN1bHQ+KFxuICBjb25maWc6IFN5bmNDb25maWc8SW5wdXRbJ3N0YXRlJ10+LFxuKTogU2lnbmFsU3RvcmVGZWF0dXJlPElucHV0LCBTeW5jRmVhdHVyZVJlc3VsdD47XG5cbi8vIGNvbmZpZyArIGluZGV4ZWRkYlxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhTdG9yYWdlU3luYzxJbnB1dCBleHRlbmRzIFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdD4oXG4gIGNvbmZpZzogU3luY0NvbmZpZzxJbnB1dFsnc3RhdGUnXT4sXG4gIHN0b3JhZ2VTdHJhdGVneTogQXN5bmNTdG9yYWdlU3RyYXRlZ3k8SW5wdXRbJ3N0YXRlJ10+LFxuKTogU2lnbmFsU3RvcmVGZWF0dXJlPElucHV0LCBBc3luY0ZlYXR1cmVSZXN1bHQ+O1xuXG4vLyBjb25maWcgKyBsb2NhbFN0b3JhZ2Uob3Igc2Vzc2lvblN0b3JhZ2UpXG5leHBvcnQgZnVuY3Rpb24gd2l0aFN0b3JhZ2VTeW5jPElucHV0IGV4dGVuZHMgU2lnbmFsU3RvcmVGZWF0dXJlUmVzdWx0PihcbiAgY29uZmlnOiBTeW5jQ29uZmlnPElucHV0WydzdGF0ZSddPixcbiAgc3RvcmFnZVN0cmF0ZWd5OiBTeW5jU3RvcmFnZVN0cmF0ZWd5PElucHV0WydzdGF0ZSddPixcbik6IFNpZ25hbFN0b3JlRmVhdHVyZTxJbnB1dCwgU3luY0ZlYXR1cmVSZXN1bHQ+O1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFN0b3JhZ2VTeW5jPElucHV0IGV4dGVuZHMgU2lnbmFsU3RvcmVGZWF0dXJlUmVzdWx0PihcbiAgY29uZmlnT3JLZXk6IFN5bmNDb25maWc8SW5wdXRbJ3N0YXRlJ10+IHwgc3RyaW5nLFxuICBzdG9yYWdlU3RyYXRlZ3k/OlxuICAgIHwgQXN5bmNTdG9yYWdlU3RyYXRlZ3k8SW5wdXRbJ3N0YXRlJ10+XG4gICAgfCBTeW5jU3RvcmFnZVN0cmF0ZWd5PElucHV0WydzdGF0ZSddPixcbik6IFNpZ25hbFN0b3JlRmVhdHVyZTxcbiAgSW5wdXQsXG4gIEVtcHR5RmVhdHVyZVJlc3VsdCAmIChTeW5jRmVhdHVyZVJlc3VsdCB8IEFzeW5jRmVhdHVyZVJlc3VsdClcbj4ge1xuICBpZiAoXG4gICAgdHlwZW9mIGNvbmZpZ09yS2V5ICE9PSAnc3RyaW5nJyAmJlxuICAgIGNvbmZpZ09yS2V5LnN0b3JhZ2UgJiZcbiAgICBzdG9yYWdlU3RyYXRlZ3lcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ1lvdSBjYW4gZWl0aGVyIHBhc3MgYSBzdG9yYWdlIHN0cmF0ZWd5IG9yIGEgY29uZmlnIHdpdGggc3RvcmFnZSwgYnV0IG5vdCBib3RoLicsXG4gICAgKTtcbiAgfVxuICBjb25zdCBjb25maWc6IFJlcXVpcmVkPFN5bmNDb25maWc8SW5wdXRbJ3N0YXRlJ10+PiA9IHtcbiAgICBhdXRvU3luYzogdHJ1ZSxcbiAgICBzZWxlY3Q6IChzdGF0ZTogSW5wdXRbJ3N0YXRlJ10pID0+IHN0YXRlLFxuICAgIHBhcnNlOiBKU09OLnBhcnNlLFxuICAgIHN0cmluZ2lmeTogSlNPTi5zdHJpbmdpZnksXG4gICAgc3RvcmFnZTogKCkgPT4gbG9jYWxTdG9yYWdlLFxuICAgIC4uLih0eXBlb2YgY29uZmlnT3JLZXkgPT09ICdzdHJpbmcnID8geyBrZXk6IGNvbmZpZ09yS2V5IH0gOiBjb25maWdPcktleSksXG4gIH07XG5cbiAgY29uc3QgZmFjdG9yeSA9XG4gICAgc3RvcmFnZVN0cmF0ZWd5ID8/XG4gICAgKGNvbmZpZy5zdG9yYWdlKCkgPT09IGxvY2FsU3RvcmFnZVxuICAgICAgPyB3aXRoTG9jYWxTdG9yYWdlKClcbiAgICAgIDogd2l0aFNlc3Npb25TdG9yYWdlKCkpO1xuXG4gIGlmIChmYWN0b3J5LnR5cGUgPT09ICdzeW5jJykge1xuICAgIHJldHVybiBjcmVhdGVTeW5jU3RvcmFnZVN5bmMoZmFjdG9yeSwgY29uZmlnKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY3JlYXRlQXN5bmNTdG9yYWdlU3luYyhmYWN0b3J5LCBjb25maWcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN5bmNTdG9yYWdlU3luYyhcbiAgZmFjdG9yeTogU3luY1N0b3JhZ2VTdHJhdGVneTxvYmplY3Q+LFxuICBjb25maWc6IFJlcXVpcmVkPFN5bmNDb25maWc8b2JqZWN0Pj4sXG4pIHtcbiAgcmV0dXJuIHNpZ25hbFN0b3JlRmVhdHVyZShcbiAgICB3aXRoTWV0aG9kcygoc3RvcmUsIHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpKSA9PiB7XG4gICAgICByZXR1cm4gZmFjdG9yeShjb25maWcsIHN0b3JlLCBpc1BsYXRmb3JtU2VydmVyKHBsYXRmb3JtSWQpKTtcbiAgICB9KSxcbiAgICB3aXRoSG9va3Moe1xuICAgICAgb25Jbml0KHN0b3JlLCBwbGF0Zm9ybUlkID0gaW5qZWN0KFBMQVRGT1JNX0lEKSkge1xuICAgICAgICBpZiAoaXNQbGF0Zm9ybVNlcnZlcihwbGF0Zm9ybUlkKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuYXV0b1N5bmMpIHtcbiAgICAgICAgICBzdG9yZS5yZWFkRnJvbVN0b3JhZ2UoKTtcbiAgICAgICAgICB3YXRjaFN0YXRlKHN0b3JlLCAoKSA9PiBzdG9yZS53cml0ZVRvU3RvcmFnZSgpKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KSxcbiAgKSBzYXRpc2ZpZXMgU2lnbmFsU3RvcmVGZWF0dXJlPEVtcHR5RmVhdHVyZVJlc3VsdCwgU3luY0ZlYXR1cmVSZXN1bHQ+O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBc3luY1N0b3JhZ2VTeW5jKFxuICBmYWN0b3J5OiBBc3luY1N0b3JhZ2VTdHJhdGVneTxvYmplY3Q+LFxuICBjb25maWc6IFJlcXVpcmVkPFN5bmNDb25maWc8b2JqZWN0Pj4sXG4pIHtcbiAgcmV0dXJuIHNpZ25hbFN0b3JlRmVhdHVyZShcbiAgICB3aXRoUHJvcHMoKCkgPT4ge1xuICAgICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICAgIC8qXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gaGF2ZSB0aGF0IGFzIHByb3BlcnR5IChhbmQgbm90IHN0YXRlKVxuICAgICAgICAvLyBPdGhlcndpc2UgdGhlIHN0YXRlIHdhdGNoZXIgZmlyZXMgd2hlbiB1cGRhdGluZyB0aGUgc3luYyBzdGF0dXNcbiAgICAgICAgKi9cbiAgICAgICAgW1NZTkNfU1RBVFVTXTogc2lnbmFsPCdpZGxlJyB8ICdzeW5jaW5nJyB8ICdzeW5jZWQnPignaWRsZScpLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzb2x2ZXMgPSBbXSBhcyAoKCkgPT4gdm9pZClbXTtcblxuICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgY29uc3Qgc3luY1N0YXR1cyA9IHByb3BzW1NZTkNfU1RBVFVTXSgpO1xuICAgICAgICBpZiAoc3luY1N0YXR1cyA9PT0gJ3N5bmNlZCcpIHtcbiAgICAgICAgICByZXNvbHZlcy5mb3JFYWNoKChyZXNvbHZlKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICAgIHJlc29sdmVzLnNwbGljZSgwLCByZXNvbHZlcy5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgIGlzU3luY2VkOiBjb21wdXRlZCgoKSA9PiBwcm9wc1tTWU5DX1NUQVRVU10oKSA9PT0gJ3N5bmNlZCcpLFxuICAgICAgICB3aGVuU3luY2VkOiAoKSA9PlxuICAgICAgICAgIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBpZiAocHJvcHNbU1lOQ19TVEFUVVNdKCkgPT09ICdzeW5jZWQnKSB7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc29sdmVzLnB1c2gocmVzb2x2ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH0pLFxuICAgIHdpdGhNZXRob2RzKChzdG9yZSwgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCkpID0+IHtcbiAgICAgIHJldHVybiBmYWN0b3J5KGNvbmZpZywgc3RvcmUsIGlzUGxhdGZvcm1TZXJ2ZXIocGxhdGZvcm1JZCkpO1xuICAgIH0pLFxuICAgIHdpdGhIb29rcyh7XG4gICAgICBhc3luYyBvbkluaXQoc3RvcmUsIHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpKSB7XG4gICAgICAgIGlmIChpc1BsYXRmb3JtU2VydmVyKHBsYXRmb3JtSWQpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5pdGlhbFN0YXRlID0gSlNPTi5zdHJpbmdpZnkoZ2V0U3RhdGUoc3RvcmUpKTtcbiAgICAgICAgaWYgKGNvbmZpZy5hdXRvU3luYykge1xuICAgICAgICAgIGxldCBzdGFydFdhdGNoaW5nID0gZmFsc2U7XG4gICAgICAgICAgd2F0Y2hTdGF0ZShzdG9yZSwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFzdGFydFdhdGNoaW5nKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IEpTT04uc3RyaW5naWZ5KGdldFN0YXRlKHN0b3JlKSk7XG5cbiAgICAgICAgICAgICAgLy8gTmVjZXNzYXJ5IGJlY2F1c2UgZ2V0U3RhdGUgcmV0dXJucyBhbHdheXMgYSBuZXcgb2JqZWN0XG4gICAgICAgICAgICAgIGlmIChjdXJyZW50U3RhdGUgPT09IGluaXRpYWxTdGF0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICBgV3JpdGluZyB0byBTdG9yZSAoJHtjb25maWcua2V5fSkgaGFwcGVuZWQgYmVmb3JlIHRoZSBzdGF0ZSB3YXMgaW5pdGlhbGx5IHJlYWQgZnJvbSBzdG9yYWdlLmAsXG4gICAgICAgICAgICAgICAgJ1BsZWFzZSBlbnN1cmUgdGhhdCB0aGUgc3RvcmUgaXMgbm90IGluIHN5bmNpbmcgc3RhdGUgdmlhIGBzdG9yZS53aGVuU3luY2VkKClgIGJlZm9yZSB3cml0aW5nIHRvIHRoZSBzdGF0ZS4nLFxuICAgICAgICAgICAgICAgICdBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGRpc2FibGUgYXV0b1N5bmMgYnkgcGFzc2luZyBgYXV0b1N5bmM6IGZhbHNlYCBpbiB0aGUgY29uZmlnLicsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdG9yZS53cml0ZVRvU3RvcmFnZSgpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgYXdhaXQgc3RvcmUucmVhZEZyb21TdG9yYWdlKCk7XG4gICAgICAgICAgc3RhcnRXYXRjaGluZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSksXG4gICkgc2F0aXNmaWVzIFNpZ25hbFN0b3JlRmVhdHVyZTxFbXB0eUZlYXR1cmVSZXN1bHQsIEFzeW5jRmVhdHVyZVJlc3VsdD47XG59XG4iXX0=","import { signalStoreFeature, withState, } from '@ngrx/signals';\n/**\n * `withConditional` activates a feature based on a given condition.\n *\n * **Use Cases**\n * - Conditionally activate features based on the **store state** or other criteria.\n * - Choose between **two different implementations** of a feature.\n *\n * **Type Constraints**\n * Both features must have **exactly the same state, props, and methods**.\n * Otherwise, a type error will occur.\n *\n *\n * **Usage**\n *\n * ```typescript\n * const withUser = signalStoreFeature(\n * withState({ id: 1, name: 'Konrad' }),\n * withHooks(store => ({\n * onInit() {\n * // user loading logic\n * }\n * }))\n * );\n *\n * function withFakeUser() {\n * return signalStoreFeature(\n * withState({ id: 0, name: 'anonymous' })\n * );\n * }\n *\n * signalStore(\n * withMethods(() => ({\n * useRealUser: () => true\n * })),\n * withConditional((store) => store.useRealUser(), withUser, withFakeUser)\n * )\n * ```\n *\n * @param condition - A function that determines which feature to activate based on the store state.\n * @param featureIfTrue - The feature to activate if the condition evaluates to `true`.\n * @param featureIfFalse - The feature to activate if the condition evaluates to `false`.\n * @returns A `SignalStoreFeature` that applies the selected feature based on the condition.\n */\nexport function withConditional(condition, featureIfTrue, featureIfFalse) {\n return (store) => {\n const conditionStore = {\n ...store['stateSignals'],\n ...store['props'],\n ...store['methods'],\n };\n return condition(conditionStore)\n ? featureIfTrue(store)\n : featureIfFalse(store);\n };\n}\nexport const emptyFeature = signalStoreFeature(withState({}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1jb25kaXRpb25hbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10b29sa2l0L3NyYy9saWIvd2l0aC1jb25kaXRpb25hbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsa0JBQWtCLEVBSWxCLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMENHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FJN0IsU0FFWSxFQUNaLGFBQXlELEVBQ3pELGNBQW1FO0lBRW5FLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNmLE1BQU0sY0FBYyxHQUFHO1lBQ3JCLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQztZQUN4QixHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDakIsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1NBQ3BCLENBQUM7UUFDRixPQUFPLFNBQVMsQ0FBQyxjQUFjLENBQUM7WUFDOUIsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7WUFDdEIsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgc2lnbmFsU3RvcmVGZWF0dXJlLFxuICBTaWduYWxTdG9yZUZlYXR1cmUsXG4gIFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdCxcbiAgU3RhdGVTaWduYWxzLFxuICB3aXRoU3RhdGUsXG59IGZyb20gJ0BuZ3J4L3NpZ25hbHMnO1xuXG4vKipcbiAqIGB3aXRoQ29uZGl0aW9uYWxgIGFjdGl2YXRlcyBhIGZlYXR1cmUgYmFzZWQgb24gYSBnaXZlbiBjb25kaXRpb24uXG4gKlxuICogKipVc2UgQ2FzZXMqKlxuICogLSBDb25kaXRpb25hbGx5IGFjdGl2YXRlIGZlYXR1cmVzIGJhc2VkIG9uIHRoZSAqKnN0b3JlIHN0YXRlKiogb3Igb3RoZXIgY3JpdGVyaWEuXG4gKiAtIENob29zZSBiZXR3ZWVuICoqdHdvIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMqKiBvZiBhIGZlYXR1cmUuXG4gKlxuICogKipUeXBlIENvbnN0cmFpbnRzKipcbiAqIEJvdGggZmVhdHVyZXMgbXVzdCBoYXZlICoqZXhhY3RseSB0aGUgc2FtZSBzdGF0ZSwgcHJvcHMsIGFuZCBtZXRob2RzKiouXG4gKiBPdGhlcndpc2UsIGEgdHlwZSBlcnJvciB3aWxsIG9jY3VyLlxuICpcbiAqXG4gKiAqKlVzYWdlKipcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCB3aXRoVXNlciA9IHNpZ25hbFN0b3JlRmVhdHVyZShcbiAqICAgd2l0aFN0YXRlKHsgaWQ6IDEsIG5hbWU6ICdLb25yYWQnIH0pLFxuICogICB3aXRoSG9va3Moc3RvcmUgPT4gKHtcbiAqICAgICBvbkluaXQoKSB7XG4gKiAgICAgICAvLyB1c2VyIGxvYWRpbmcgbG9naWNcbiAqICAgICB9XG4gKiAgIH0pKVxuICogKTtcbiAqXG4gKiBmdW5jdGlvbiB3aXRoRmFrZVVzZXIoKSB7XG4gKiAgIHJldHVybiBzaWduYWxTdG9yZUZlYXR1cmUoXG4gKiAgICAgd2l0aFN0YXRlKHsgaWQ6IDAsIG5hbWU6ICdhbm9ueW1vdXMnIH0pXG4gKiAgICk7XG4gKiB9XG4gKlxuICogc2lnbmFsU3RvcmUoXG4gKiAgIHdpdGhNZXRob2RzKCgpID0+ICh7XG4gKiAgICAgdXNlUmVhbFVzZXI6ICgpID0+IHRydWVcbiAqICAgfSkpLFxuICogICB3aXRoQ29uZGl0aW9uYWwoKHN0b3JlKSA9PiBzdG9yZS51c2VSZWFsVXNlcigpLCB3aXRoVXNlciwgd2l0aEZha2VVc2VyKVxuICogKVxuICogYGBgXG4gKlxuICogQHBhcmFtIGNvbmRpdGlvbiAtIEEgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoaWNoIGZlYXR1cmUgdG8gYWN0aXZhdGUgYmFzZWQgb24gdGhlIHN0b3JlIHN0YXRlLlxuICogQHBhcmFtIGZlYXR1cmVJZlRydWUgLSBUaGUgZmVhdHVyZSB0byBhY3RpdmF0ZSBpZiB0aGUgY29uZGl0aW9uIGV2YWx1YXRlcyB0byBgdHJ1ZWAuXG4gKiBAcGFyYW0gZmVhdHVyZUlmRmFsc2UgLSBUaGUgZmVhdHVyZSB0byBhY3RpdmF0ZSBpZiB0aGUgY29uZGl0aW9uIGV2YWx1YXRlcyB0byBgZmFsc2VgLlxuICogQHJldHVybnMgQSBgU2lnbmFsU3RvcmVGZWF0dXJlYCB0aGF0IGFwcGxpZXMgdGhlIHNlbGVjdGVkIGZlYXR1cmUgYmFzZWQgb24gdGhlIGNvbmRpdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhDb25kaXRpb25hbDxcbiAgSW5wdXQgZXh0ZW5kcyBTaWduYWxTdG9yZUZlYXR1cmVSZXN1bHQsXG4gIE91dHB1dCBleHRlbmRzIFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdCxcbj4oXG4gIGNvbmRpdGlvbjogKFxuICAgIHN0b3JlOiBTdGF0ZVNpZ25hbHM8SW5wdXRbJ3N0YXRlJ10+ICYgSW5wdXRbJ3Byb3BzJ10gJiBJbnB1dFsnbWV0aG9kcyddLFxuICApID0+IGJvb2xlYW4sXG4gIGZlYXR1cmVJZlRydWU6IFNpZ25hbFN0b3JlRmVhdHVyZTxOb0luZmVyPElucHV0PiwgT3V0cHV0PixcbiAgZmVhdHVyZUlmRmFsc2U6IFNpZ25hbFN0b3JlRmVhdHVyZTxOb0luZmVyPElucHV0PiwgTm9JbmZlcjxPdXRwdXQ+Pixcbik6IFNpZ25hbFN0b3JlRmVhdHVyZTxJbnB1dCwgT3V0cHV0PiB7XG4gIHJldHVybiAoc3RvcmUpID0+IHtcbiAgICBjb25zdCBjb25kaXRpb25TdG9yZSA9IHtcbiAgICAgIC4uLnN0b3JlWydzdGF0ZVNpZ25hbHMnXSxcbiAgICAgIC4uLnN0b3JlWydwcm9wcyddLFxuICAgICAgLi4uc3RvcmVbJ21ldGhvZHMnXSxcbiAgICB9O1xuICAgIHJldHVybiBjb25kaXRpb24oY29uZGl0aW9uU3RvcmUpXG4gICAgICA/IGZlYXR1cmVJZlRydWUoc3RvcmUpXG4gICAgICA6IGZlYXR1cmVJZkZhbHNlKHN0b3JlKTtcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IGVtcHR5RmVhdHVyZSA9IHNpZ25hbFN0b3JlRmVhdHVyZSh3aXRoU3RhdGUoe30pKTtcbiJdfQ==","/**\n * @deprecated Use `import { withFeature } from '@ngrx/signals'` instead, starting with `ngrx/signals` 19.1: https://ngrx.io/guide/signals/signal-store/custom-store-features#connecting-a-custom-feature-with-the-store\n *\n * Allows to pass properties, methods, or signals from a SignalStore\n * to a feature.\n *\n * Typically, a `signalStoreFeature` can have input constraints on\n *\n * ```typescript\n * function withSum(a: Signal<number>, b: Signal<number>) {\n * return signalStoreFeature(\n * withComputed(() => ({\n * sum: computed(() => a() + b())\n * }))\n * );\n * }\n *\n * signalStore(\n * withState({ a: 1, b: 2 }),\n * withFeatureFactory((store) => withSum(store.a, store.b))\n * );\n * ```\n * @param factoryFn\n */\nexport function withFeatureFactory(factoryFn) {\n return (store) => {\n const storeForFactory = {\n ...store['stateSignals'],\n ...store['props'],\n ...store['methods'],\n };\n const feature = factoryFn(storeForFactory);\n return feature(store);\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1mZWF0dXJlLWZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL3dpdGgtZmVhdHVyZS1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVlBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FJaEMsU0FFc0M7SUFFdEMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ2YsTUFBTSxlQUFlLEdBQUc7WUFDdEIsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO1lBQ3hCLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUNqQixHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7U0FDTSxDQUFDO1FBRTVCLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUUzQyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgU2lnbmFsU3RvcmVGZWF0dXJlLFxuICBTaWduYWxTdG9yZUZlYXR1cmVSZXN1bHQsXG4gIFN0YXRlU2lnbmFscyxcbn0gZnJvbSAnQG5ncngvc2lnbmFscyc7XG5cbnR5cGUgU3RvcmVGb3JGYWN0b3J5PElucHV0IGV4dGVuZHMgU2lnbmFsU3RvcmVGZWF0dXJlUmVzdWx0PiA9IFN0YXRlU2lnbmFsczxcbiAgSW5wdXRbJ3N0YXRlJ11cbj4gJlxuICBJbnB1dFsncHJvcHMnXSAmXG4gIElucHV0WydtZXRob2RzJ107XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGBpbXBvcnQgeyB3aXRoRmVhdHVyZSB9IGZyb20gJ0BuZ3J4L3NpZ25hbHMnYCBpbnN0ZWFkLCBzdGFydGluZyB3aXRoIGBuZ3J4L3NpZ25hbHNgIDE5LjE6IGh0dHBzOi8vbmdyeC5pby9ndWlkZS9zaWduYWxzL3NpZ25hbC1zdG9yZS9jdXN0b20tc3RvcmUtZmVhdHVyZXMjY29ubmVjdGluZy1hLWN1c3RvbS1mZWF0dXJlLXdpdGgtdGhlLXN0b3JlXG4gKlxuICogQWxsb3dzIHRvIHBhc3MgcHJvcGVydGllcywgbWV0aG9kcywgb3Igc2lnbmFscyBmcm9tIGEgU2lnbmFsU3RvcmVcbiAqIHRvIGEgZmVhdHVyZS5cbiAqXG4gKiBUeXBpY2FsbHksIGEgYHNpZ25hbFN0b3JlRmVhdHVyZWAgY2FuIGhhdmUgaW5wdXQgY29uc3RyYWludHMgb25cbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBmdW5jdGlvbiB3aXRoU3VtKGE6IFNpZ25hbDxudW1iZXI+LCBiOiBTaWduYWw8bnVtYmVyPikge1xuICogICByZXR1cm4gc2lnbmFsU3RvcmVGZWF0dXJlKFxuICogICAgIHdpdGhDb21wdXRlZCgoKSA9PiAoe1xuICogICAgICAgc3VtOiBjb21wdXRlZCgoKSA9PiBhKCkgKyBiKCkpXG4gKiAgICAgfSkpXG4gKiAgICk7XG4gKiB9XG4gKlxuICogc2lnbmFsU3RvcmUoXG4gKiAgIHdpdGhTdGF0ZSh7IGE6IDEsIGI6IDIgfSksXG4gKiAgIHdpdGhGZWF0dXJlRmFjdG9yeSgoc3RvcmUpID0+IHdpdGhTdW0oc3RvcmUuYSwgc3RvcmUuYikpXG4gKiApO1xuICogYGBgXG4gKiBAcGFyYW0gZmFjdG9yeUZuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoRmVhdHVyZUZhY3Rvcnk8XG4gIElucHV0IGV4dGVuZHMgU2lnbmFsU3RvcmVGZWF0dXJlUmVzdWx0LFxuICBPdXRwdXQgZXh0ZW5kcyBTaWduYWxTdG9yZUZlYXR1cmVSZXN1bHQsXG4+KFxuICBmYWN0b3J5Rm46IChcbiAgICBzdG9yZTogU3RvcmVGb3JGYWN0b3J5PElucHV0PixcbiAgKSA9PiBTaWduYWxTdG9yZUZlYXR1cmU8SW5wdXQsIE91dHB1dD4sXG4pOiBTaWduYWxTdG9yZUZlYXR1cmU8SW5wdXQsIE91dHB1dD4ge1xuICByZXR1cm4gKHN0b3JlKSA9PiB7XG4gICAgY29uc3Qgc3RvcmVGb3JGYWN0b3J5ID0ge1xuICAgICAgLi4uc3RvcmVbJ3N0YXRlU2lnbmFscyddLFxuICAgICAgLi4uc3RvcmVbJ3Byb3BzJ10sXG4gICAgICAuLi5zdG9yZVsnbWV0aG9kcyddLFxuICAgIH0gYXMgU3RvcmVGb3JGYWN0b3J5PElucHV0PjtcblxuICAgIGNvbnN0IGZlYXR1cmUgPSBmYWN0b3J5Rm4oc3RvcmVGb3JGYWN0b3J5KTtcblxuICAgIHJldHVybiBmZWF0dXJlKHN0b3JlKTtcbiAgfTtcbn1cbiJdfQ==","import { concatMap, exhaustMap, mergeMap, switchMap, } from 'rxjs';\nexport const switchOp = {\n rxJsOperator: switchMap,\n exhaustSemantics: false,\n};\nexport const mergeOp = {\n rxJsOperator: mergeMap,\n exhaustSemantics: false,\n};\nexport const concatOp = {\n rxJsOperator: concatMap,\n exhaustSemantics: false,\n};\nexport const exhaustOp = {\n rxJsOperator: exhaustMap,\n exhaustSemantics: true,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhdHRlbmluZy1vcGVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10b29sa2l0L3NyYy9saWIvZmxhdHRlbmluZy1vcGVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixRQUFRLEVBSVIsU0FBUyxHQUNWLE1BQU0sTUFBTSxDQUFDO0FBZWQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUF1QjtJQUMxQyxZQUFZLEVBQUUsU0FBUztJQUN2QixnQkFBZ0IsRUFBRSxLQUFLO0NBQ3hCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQXVCO0lBQ3pDLFlBQVksRUFBRSxRQUFRO0lBQ3RCLGdCQUFnQixFQUFFLEtBQUs7Q0FDeEIsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBdUI7SUFDMUMsWUFBWSxFQUFFLFNBQVM7SUFDdkIsZ0JBQWdCLEVBQUUsS0FBSztDQUN4QixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUF1QjtJQUMzQyxZQUFZLEVBQUUsVUFBVTtJQUN4QixnQkFBZ0IsRUFBRSxJQUFJO0NBQ3ZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBjb25jYXRNYXAsXG4gIGV4aGF1c3RNYXAsXG4gIG1lcmdlTWFwLFxuICBPYnNlcnZhYmxlSW5wdXQsXG4gIE9ic2VydmVkVmFsdWVPZixcbiAgT3BlcmF0b3JGdW5jdGlvbixcbiAgc3dpdGNoTWFwLFxufSBmcm9tICdyeGpzJztcblxuZXhwb3J0IHR5cGUgUnhKc0ZsYXR0ZW5pbmdPcGVyYXRvciA9IDxULCBPIGV4dGVuZHMgT2JzZXJ2YWJsZUlucHV0PHVua25vd24+PihcbiAgcHJvamVjdDogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyKSA9PiBPLFxuKSA9PiBPcGVyYXRvckZ1bmN0aW9uPFQsIE9ic2VydmVkVmFsdWVPZjxPPj47XG5cbi8qKlxuICogQSB3cmFwcGVyIGZvciBhbiBSeEpTIGZsYXR0ZW5pbmcgb3BlcmF0b3IuXG4gKiBUaGlzIHdyYXBwZXIgaW5mb3JtcyBhYm91dCB3aGV0aGVyIHRoZSBvcGVyYXRvciBoYXMgZXhoYXVzdCBzZW1hbnRpY3Mgb3Igbm90LlxuICovXG5leHBvcnQgdHlwZSBGbGF0dGVuaW5nT3BlcmF0b3IgPSB7XG4gIHJ4SnNPcGVyYXRvcjogUnhKc0ZsYXR0ZW5pbmdPcGVyYXRvcjtcbiAgZXhoYXVzdFNlbWFudGljczogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBzd2l0Y2hPcDogRmxhdHRlbmluZ09wZXJhdG9yID0ge1xuICByeEpzT3BlcmF0b3I6IHN3aXRjaE1hcCxcbiAgZXhoYXVzdFNlbWFudGljczogZmFsc2UsXG59O1xuXG5leHBvcnQgY29uc3QgbWVyZ2VPcDogRmxhdHRlbmluZ09wZXJhdG9yID0ge1xuICByeEpzT3BlcmF0b3I6IG1lcmdlTWFwLFxuICBleGhhdXN0U2VtYW50aWNzOiBmYWxzZSxcbn07XG5cbmV4cG9ydCBjb25zdCBjb25jYXRPcDogRmxhdHRlbmluZ09wZXJhdG9yID0ge1xuICByeEpzT3BlcmF0b3I6IGNvbmNhdE1hcCxcbiAgZXhoYXVzdFNlbWFudGljczogZmFsc2UsXG59O1xuXG5leHBvcnQgY29uc3QgZXhoYXVzdE9wOiBGbGF0dGVuaW5nT3BlcmF0b3IgPSB7XG4gIHJ4SnNPcGVyYXRvcjogZXhoYXVzdE1hcCxcbiAgZXhoYXVzdFNlbWFudGljczogdHJ1ZSxcbn07XG4iXX0=","import { computed, DestroyRef, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { catchError, defer, EMPTY, finalize, Subject, tap, } from 'rxjs';\nimport { concatOp } from '../flattening-operator';\n/**\n * Creates a mutation that leverages RxJS.\n *\n * For each mutation the following options can be defined:\n * - `operation`: A function that defines the mutation logic. It returns an Observable.\n * - `onSuccess`: A callback that is called when the mutation is successful.\n * - `onError`: A callback that is called when the mutation fails.\n * - `operator`: An optional wrapper of an RxJS flattening operator. By default `concat` sematics are used.\n * - `injector`: An optional Angular injector to use for dependency injection.\n *\n * The `operation` is the only mandatory option.\n *\n * The returned mutation can be called as an async function and returns a Promise.\n * This promise informs about whether the mutation was successful, failed, or aborted\n * (due to switchMap or exhaustMap semantics).\n *\n * The mutation also provides several Signals such as error, status or isPending (see below).\n *\n * Example usage without Store:\n *\n * ```typescript\n * const counterSignal = signal(0);\n *\n * const increment = rxMutation({\n * operation: (param: Param) => {\n * return calcSum(this.counterSignal(), param.value);\n * },\n * operator: concatOp,\n * onSuccess: (result) => {\n * this.counterSignal.set(result);\n * },\n * onError: (error) => {\n * console.error('Error occurred:', error);\n * },\n * });\n *\n * const error = increment.error;\n * const isPending = increment.isPending;\n * const status = increment.status;\n * const value = increment.value;\n * const hasValue = increment.hasValue;\n *\n * async function incrementCounter() {\n * const result = await increment({ value: 1 });\n * if (result.status === 'success') {\n * console.log('Success:', result.value);\n * }\n * if (result.status === 'error') {\n * console.log('Error:', result.error);\n * }\n * if (result.status === 'aborted') {\n * console.log('Operation aborted');\n * }\n * }\n *\n * function calcSum(a: number, b: number): Observable<number> {\n * return of(result).pipe(delay(500));\n * }\n * ```\n *\n * @param options\n * @returns the actual mutation function along tracking data as properties/methods\n */\nexport function rxMutation(optionsOrOperation) {\n const inputSubject = new Subject();\n const options = typeof optionsOrOperation === 'function'\n ? { operation: optionsOrOperation }\n : optionsOrOperation;\n const flatteningOp = options.operator ?? concatOp;\n const destroyRef = options.injector?.get(DestroyRef) ?? inject(DestroyRef);\n const callCount = signal(0, ...(ngDevMode ? [{ debugName: \"callCount\" }] : []));\n const errorSignal = signal(undefined, ...(ngDevMode ? [{ debugName: \"errorSignal\" }] : []));\n const idle = signal(true, ...(ngDevMode ? [{ debugName: \"idle\" }] : []));\n const isPending = computed(() => callCount() > 0, ...(ngDevMode ? [{ debugName: \"isPending\" }] : []));\n const value = signal(undefined, ...(ngDevMode ? [{ debugName: \"value\" }] : []));\n const isSuccess = computed(() => !idle() && !isPending() && !errorSignal(), ...(ngDevMode ? [{ debugName: \"isSuccess\" }] : []));\n const hasValue = function () {\n return typeof value() !== 'undefined';\n };\n const status = computed(() => {\n if (idle()) {\n return 'idle';\n }\n if (callCount() > 0) {\n return 'pending';\n }\n if (errorSignal()) {\n return 'error';\n }\n return 'success';\n }, ...(ngDevMode ? [{ debugName: \"status\" }] : []));\n const initialInnerStatus = 'idle';\n let innerStatus = initialInnerStatus;\n inputSubject\n .pipe(flatteningOp.rxJsOperator((input) => defer(() => {\n callCount.update((c) => c + 1);\n idle.set(false);\n return options.operation(input.param).pipe(tap((result) => {\n options.onSuccess?.(result, input.param);\n innerStatus = 'success';\n errorSignal.set(undefined);\n value.set(result);\n }), catchError((error) => {\n options.onError?.(error, input.param);\n errorSignal.set(error);\n value.set(undefined);\n innerStatus = 'error';\n return EMPTY;\n }), finalize(() => {\n callCount.update((c) => c - 1);\n if (innerStatus === 'success') {\n input.resolve({\n status: 'success',\n value: value(),\n });\n }\n else if (innerStatus === 'error') {\n input.resolve({\n status: 'error',\n error: errorSignal(),\n });\n }\n else {\n input.resolve({\n status: 'aborted',\n });\n }\n innerStatus = initialInnerStatus;\n }));\n })), takeUntilDestroyed(destroyRef))\n .subscribe();\n const mutationFn = (param) => {\n return new Promise((resolve) => {\n if (callCount() > 0 && flatteningOp.exhaustSemantics) {\n resolve({\n status: 'aborted',\n });\n }\n else {\n inputSubject.next({\n param,\n resolve,\n });\n }\n });\n };\n const mutation = mutationFn;\n mutation.status = status;\n mutation.isPending = isPending;\n mutation.error = errorSignal;\n mutation.value = value;\n mutation.hasValue = hasValue;\n mutation.isSuccess = isSuccess;\n return mutation;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicngtbXV0YXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL211dGF0aW9uL3J4LW11dGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBWSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUNMLFVBQVUsRUFDVixLQUFLLEVBQ0wsS0FBSyxFQUNMLFFBQVEsRUFFUixPQUFPLEVBQ1AsR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUFFLFFBQVEsRUFBc0IsTUFBTSx3QkFBd0IsQ0FBQztBQWF0RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4REc7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUN4QixrQkFFNEM7SUFFNUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxPQUFPLEVBRzVCLENBQUM7SUFFTCxNQUFNLE9BQU8sR0FDWCxPQUFPLGtCQUFrQixLQUFLLFVBQVU7UUFDdEMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFO1FBQ25DLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQztJQUV6QixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQztJQUVsRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFM0UsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLENBQUMscURBQUMsQ0FBQztJQUM1QixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQVUsU0FBUyx1REFBQyxD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ZWYsIGluamVjdCwgSW5qZWN0b3IsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtcbiAgY2F0Y2hFcnJvcixcbiAgZGVmZXIsXG4gIEVNUFRZLFxuICBmaW5hbGl6ZSxcbiAgT2JzZXJ2YWJsZSxcbiAgU3ViamVjdCxcbiAgdGFwLFxufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgY29uY2F0T3AsIEZsYXR0ZW5pbmdPcGVyYXRvciB9IGZyb20gJy4uL2ZsYXR0ZW5pbmctb3BlcmF0b3InO1xuaW1wb3J0IHsgTXV0YXRpb24sIE11dGF0aW9uUmVzdWx0LCBNdXRhdGlvblN0YXR1cyB9IGZyb20gJy4vbXV0YXRpb24nO1xuXG5leHBvcnQgdHlwZSBPcGVyYXRpb248UGFyYW1ldGVyLCBSZXN1bHQ+ID0gKHBhcmFtOiBQYXJhbWV0ZXIpID0+IFJlc3VsdDtcblxuZXhwb3J0IGludGVyZmFjZSBSeE11dGF0aW9uT3B0aW9uczxQYXJhbWV0ZXIsIFJlc3VsdD4ge1xuICBvcGVyYXRpb246IE9wZXJhdGlvbjxQYXJhbWV0ZXIsIE9ic2VydmFibGU8UmVzdWx0Pj47XG4gIG9uU3VjY2Vzcz86IChyZXN1bHQ6IFJlc3VsdCwgcGFyYW06IFBhcmFtZXRlcikgPT4gdm9pZDtcbiAgb25FcnJvcj86IChlcnJvcjogdW5rbm93biwgcGFyYW06IFBhcmFtZXRlcikgPT4gdm9pZDtcbiAgb3BlcmF0b3I/OiBGbGF0dGVuaW5nT3BlcmF0b3I7XG4gIGluamVjdG9yPzogSW5qZWN0b3I7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG11dGF0aW9uIHRoYXQgbGV2ZXJhZ2VzIFJ4SlMuXG4gKlxuICogRm9yIGVhY2ggbXV0YXRpb24gdGhlIGZvbGxvd2luZyBvcHRpb25zIGNhbiBiZSBkZWZpbmVkOlxuICogLSBgb3BlcmF0aW9uYDogQSBmdW5jdGlvbiB0aGF0IGRlZmluZXMgdGhlIG11dGF0aW9uIGxvZ2ljLiBJdCByZXR1cm5zIGFuIE9ic2VydmFibGUuXG4gKiAtIGBvblN1Y2Nlc3NgOiBBIGNhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIG11dGF0aW9uIGlzIHN1Y2Nlc3NmdWwuXG4gKiAtIGBvbkVycm9yYDogQSBjYWxsYmFjayB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSBtdXRhdGlvbiBmYWlscy5cbiAqIC0gYG9wZXJhdG9yYDogQW4gb3B0aW9uYWwgd3JhcHBlciBvZiBhbiBSeEpTIGZsYXR0ZW5pbmcgb3BlcmF0b3IuIEJ5IGRlZmF1bHQgYGNvbmNhdGAgc2VtYXRpY3MgYXJlIHVzZWQuXG4gKiAtIGBpbmplY3RvcmA6IEFuIG9wdGlvbmFsIEFuZ3VsYXIgaW5qZWN0b3IgdG8gdXNlIGZvciBkZXBlbmRlbmN5IGluamVjdGlvbi5cbiAqXG4gKiBUaGUgYG9wZXJhdGlvbmAgaXMgdGhlIG9ubHkgbWFuZGF0b3J5IG9wdGlvbi5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgbXV0YXRpb24gY2FuIGJlIGNhbGxlZCBhcyBhbiBhc3luYyBmdW5jdGlvbiBhbmQgcmV0dXJucyBhIFByb21pc2UuXG4gKiBUaGlzIHByb21pc2UgaW5mb3JtcyBhYm91dCB3aGV0aGVyIHRoZSBtdXRhdGlvbiB3YXMgc3VjY2Vzc2Z1bCwgZmFpbGVkLCBvciBhYm9ydGVkXG4gKiAoZHVlIHRvIHN3aXRjaE1hcCBvciBleGhhdXN0TWFwIHNlbWFudGljcykuXG4gKlxuICogVGhlIG11dGF0aW9uIGFsc28gcHJvdmlkZXMgc2V2ZXJhbCBTaWduYWxzIHN1Y2ggYXMgZXJyb3IsIHN0YXR1cyBvciBpc1BlbmRpbmcgKHNlZSBiZWxvdykuXG4gKlxuICogRXhhbXBsZSB1c2FnZSB3aXRob3V0IFN0b3JlOlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGNvdW50ZXJTaWduYWwgPSBzaWduYWwoMCk7XG4gKlxuICogY29uc3QgaW5jcmVtZW50ID0gcnhNdXRhdGlvbih7XG4gKiAgIG9wZXJhdGlvbjogKHBhcmFtOiBQYXJhbSkgPT4ge1xuICogICAgIHJldHVybiBjYWxjU3VtKHRoaXMuY291bnRlclNpZ25hbCgpLCBwYXJhbS52YWx1ZSk7XG4gKiAgIH0sXG4gKiAgIG9wZXJhdG9yOiBjb25jYXRPcCxcbiAqICAgb25TdWNjZXNzOiAocmVzdWx0KSA9PiB7XG4gKiAgICAgdGhpcy5jb3VudGVyU2lnbmFsLnNldChyZXN1bHQpO1xuICogICB9LFxuICogICBvbkVycm9yOiAoZXJyb3IpID0+IHtcbiAqICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBvY2N1cnJlZDonLCBlcnJvcik7XG4gKiAgIH0sXG4gKiB9KTtcbiAqXG4gKiBjb25zdCBlcnJvciA9IGluY3JlbWVudC5lcnJvcjtcbiAqIGNvbnN0IGlzUGVuZGluZyA9IGluY3JlbWVudC5pc1BlbmRpbmc7XG4gKiBjb25zdCBzdGF0dXMgPSBpbmNyZW1lbnQuc3RhdHVzO1xuICogY29uc3QgdmFsdWUgPSBpbmNyZW1lbnQudmFsdWU7XG4gKiBjb25zdCBoYXNWYWx1ZSA9IGluY3JlbWVudC5oYXNWYWx1ZTtcbiAqXG4gKiBhc3luYyBmdW5jdGlvbiBpbmNyZW1lbnRDb3VudGVyKCkge1xuICogICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGluY3JlbWVudCh7IHZhbHVlOiAxIH0pO1xuICogICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAnc3VjY2VzcycpIHtcbiAqICAgICAgIGNvbnNvbGUubG9nKCdTdWNjZXNzOicsIHJlc3VsdC52YWx1ZSk7XG4gKiAgICAgfVxuICogICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAnZXJyb3InKSB7XG4gKiAgICAgICBjb25zb2xlLmxvZygnRXJyb3I6JywgcmVzdWx0LmVycm9yKTtcbiAqICAgICB9XG4gKiAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdhYm9ydGVkJykge1xuICogICAgICAgY29uc29sZS5sb2coJ09wZXJhdGlvbiBhYm9ydGVkJyk7XG4gKiAgICAgfVxuICogfVxuICpcbiAqIGZ1bmN0aW9uIGNhbGNTdW0oYTogbnVtYmVyLCBiOiBudW1iZXIpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICogICByZXR1cm4gb2YocmVzdWx0KS5waXBlKGRlbGF5KDUwMCkpO1xuICogfVxuICogYGBgXG4gKlxuICogQHBhcmFtIG9wdGlvbnNcbiAqIEByZXR1cm5zIHRoZSBhY3R1YWwgbXV0YXRpb24gZnVuY3Rpb24gYWxvbmcgdHJhY2tpbmcgZGF0YSBhcyBwcm9wZXJ0aWVzL21ldGhvZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ4TXV0YXRpb248UGFyYW1ldGVyLCBSZXN1bHQ+KFxuICBvcHRpb25zT3JPcGVyYXRpb246XG4gICAgfCBSeE11dGF0aW9uT3B0aW9uczxQYXJhbWV0ZXIsIFJlc3VsdD5cbiAgICB8IE9wZXJhdGlvbjxQYXJhbWV0ZXIsIE9ic2VydmFibGU8UmVzdWx0Pj4sXG4pOiBNdXRhdGlvbjxQYXJhbWV0ZXIsIFJlc3VsdD4ge1xuICBjb25zdCBpbnB1dFN1YmplY3QgPSBuZXcgU3ViamVjdDx7XG4gICAgcGFyYW06IFBhcmFtZXRlcjtcbiAgICByZXNvbHZlOiAocmVzdWx0OiBNdXRhdGlvblJlc3VsdDxSZXN1bHQ+KSA9PiB2b2lkO1xuICB9PigpO1xuXG4gIGNvbnN0IG9wdGlvbnMgPVxuICAgIHR5cGVvZiBvcHRpb25zT3JPcGVyYXRpb24gPT09ICdmdW5jdGlvbidcbiAgICAgID8geyBvcGVyYXRpb246IG9wdGlvbnNPck9wZXJhdGlvbiB9XG4gICAgICA6IG9wdGlvbnNPck9wZXJhdGlvbjtcblxuICBjb25zdCBmbGF0dGVuaW5nT3AgPSBvcHRpb25zLm9wZXJhdG9yID8/IGNvbmNhdE9wO1xuXG4gIGNvbnN0IGRlc3Ryb3lSZWYgPSBvcHRpb25zLmluamVjdG9yPy5nZXQoRGVzdHJveVJlZikgPz8gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gIGNvbnN0IGNhbGxDb3VudCA9IHNpZ25hbCgwKTtcbiAgY29uc3QgZXJyb3JTaWduYWwgPSBzaWduYWw8dW5rbm93bj4odW5kZWZpbmVkKTtcbiAgY29uc3QgaWRsZSA9IHNpZ25hbCh0cnVlKTtcbiAgY29uc3QgaXNQZW5kaW5nID0gY29tcHV0ZWQoKCkgPT4gY2FsbENvdW50KCkgPiAwKTtcbiAgY29uc3QgdmFsdWUgPSBzaWduYWw8UmVzdWx0IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBjb25zdCBpc1N1Y2Nlc3MgPSBjb21wdXRlZCgoKSA9PiAhaWRsZSgpICYmICFpc1BlbmRpbmcoKSAmJiAhZXJyb3JTaWduYWwoKSk7XG5cbiAgY29uc3QgaGFzVmFsdWUgPSBmdW5jdGlvbiAoXG4gICAgdGhpczogTXV0YXRpb248UGFyYW1ldGVyLCBSZXN1bHQ+LFxuICApOiB0aGlzIGlzIE11dGF0aW9uPEV4Y2x1ZGU8UGFyYW1ldGVyLCB1bmRlZmluZWQ+LCBSZXN1bHQ+IHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlKCkgIT09ICd1bmRlZmluZWQnO1xuICB9O1xuXG4gIGNvbnN0IHN0YXR1cyA9IGNvbXB1dGVkPE11dGF0aW9uU3RhdHVzPigoKSA9PiB7XG4gICAgaWYgKGlkbGUoKSkge1xuICAgICAgcmV0dXJuICdpZGxlJztcbiAgICB9XG4gICAgaWYgKGNhbGxDb3VudCgpID4gMCkge1xuICAgICAgcmV0dXJuICdwZW5kaW5nJztcbiAgICB9XG4gICAgaWYgKGVycm9yU2lnbmFsKCkpIHtcbiAgICAgIHJldHVybiAnZXJyb3InO1xuICAgIH1cbiAgICByZXR1cm4gJ3N1Y2Nlc3MnO1xuICB9KTtcblxuICBjb25zdCBpbml0aWFsSW5uZXJTdGF0dXM6IE11dGF0aW9uU3RhdHVzID0gJ2lkbGUnO1xuICBsZXQgaW5uZXJTdGF0dXM6IE11dGF0aW9uU3RhdHVzID0gaW5pdGlhbElubmVyU3RhdHVzO1xuXG4gIGlucHV0U3ViamVjdFxuICAgIC5waXBlKFxuICAgICAgZmxhdHRlbmluZ09wLnJ4SnNPcGVyYXRvcigoaW5wdXQpID0+XG4gICAgICAgIGRlZmVyKCgpID0+IHtcbiAgICAgICAgICBjYWxsQ291bnQudXBkYXRlKChjKSA9PiBjICsgMSk7XG4gICAgICAgICAgaWRsZS5zZXQoZmFsc2UpO1xuICAgICAgICAgIHJldHVybiBvcHRpb25zLm9wZXJhdGlvbihpbnB1dC5wYXJhbSkucGlwZShcbiAgICAgICAgICAgIHRhcCgocmVzdWx0OiBSZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgb3B0aW9ucy5vblN1Y2Nlc3M/LihyZXN1bHQsIGlucHV0LnBhcmFtKTtcbiAgICAgICAgICAgICAgaW5uZXJTdGF0dXMgPSAnc3VjY2Vzcyc7XG4gICAgICAgICAgICAgIGVycm9yU2lnbmFsLnNldCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICB2YWx1ZS5zZXQocmVzdWx0KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgICAgb3B0aW9ucy5vbkVycm9yPy4oZXJyb3IsIGlucHV0LnBhcmFtKTtcbiAgICAgICAgICAgICAgZXJyb3JTaWduYWwuc2V0KGVycm9yKTtcbiAgICAgICAgICAgICAgdmFsdWUuc2V0KHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgIGlubmVyU3RhdHVzID0gJ2Vycm9yJztcbiAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgIGNhbGxDb3VudC51cGRhdGUoKGMpID0+IGMgLSAxKTtcblxuICAgICAgICAgICAgICBpZiAoaW5uZXJTdGF0dXMgPT09ICdzdWNjZXNzJykge1xuICAgICAgICAgICAgICAgIGlucHV0LnJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUoKSBhcyBSZXN1bHQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5uZXJTdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgICAgICBpbnB1dC5yZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvclNpZ25hbCgpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlucHV0LnJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnYWJvcnRlZCcsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpbm5lclN0YXR1cyA9IGluaXRpYWxJbm5lclN0YXR1cztcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZChkZXN0cm95UmVmKSxcbiAgICApXG4gICAgLnN1YnNjcmliZSgpO1xuXG4gIGNvbnN0IG11dGF0aW9uRm4gPSAocGFyYW06IFBhcmFtZXRlcikgPT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxNdXRhdGlvblJlc3VsdDxSZXN1bHQ+PigocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKGNhbGxDb3VudCgpID4gMCAmJiBmbGF0dGVuaW5nT3AuZXhoYXVzdFNlbWFudGljcykge1xuICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICBzdGF0dXM6ICdhYm9ydGVkJyxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnB1dFN1YmplY3QubmV4dCh7XG4gICAgICAgICAgcGFyYW0sXG4gICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgbXV0YXRpb24gPSBtdXRhdGlvbkZuIGFzIE11dGF0aW9uPFBhcmFtZXRlciwgUmVzdWx0PjtcbiAgbXV0YXRpb24uc3RhdHVzID0gc3RhdHVzO1xuICBtdXRhdGlvbi5pc1BlbmRpbmcgPSBpc1BlbmRpbmc7XG4gIG11dGF0aW9uLmVycm9yID0gZXJyb3JTaWduYWw7XG4gIG11dGF0aW9uLnZhbHVlID0gdmFsdWU7XG4gIG11dGF0aW9uLmhhc1ZhbHVlID0gaGFzVmFsdWU7XG4gIG11dGF0aW9uLmlzU3VjY2VzcyA9IGlzU3VjY2VzcztcbiAgcmV0dXJuIG11dGF0aW9uO1xufVxuIl19","//** Types for `withResource` */\nimport { isSignal, } from '@angular/core';\nimport { signalStoreFeature, withLinkedState, withMethods, withProps, } from '@ngrx/signals';\nexport function withResource(resourceFactory) {\n return (store) => {\n const resourceOrDictionary = resourceFactory({\n ...store.stateSignals,\n ...store.props,\n ...store.methods,\n });\n if (isResourceRef(resourceOrDictionary)) {\n return createUnnamedResource(resourceOrDictionary)(store);\n }\n else {\n return createNamedResource(resourceOrDictionary)(store);\n }\n };\n}\nfunction createUnnamedResource(resource) {\n function hasValue() {\n return resource.hasValue();\n }\n return signalStoreFeature(withLinkedState(() => ({ value: resource.value })), withProps(() => ({\n status: resource.status,\n error: resource.error,\n isLoading: resource.isLoading,\n })), withMethods(() => ({\n hasValue,\n _reload: () => resource.reload(),\n })));\n}\nfunction createNamedResource(dictionary) {\n const keys = Object.keys(dictionary);\n const state = keys.reduce((state, resourceName) => ({\n ...state,\n [`${resourceName}Value`]: dictionary[resourceName].value,\n }), {});\n const props = keys.reduce((props, resourceName) => ({\n ...props,\n [`${resourceName}Status`]: dictionary[resourceName].status,\n [`${resourceName}Error`]: dictionary[resourceName].error,\n [`${resourceName}IsLoading`]: dictionary[resourceName].isLoading,\n }), {});\n const methods = keys.reduce((methods, resourceName) => {\n return {\n ...methods,\n [`${resourceName}HasValue`]: () => dictionary[resourceName].hasValue(),\n [`_${resourceName}Reload`]: () => dictionary[resourceName].reload(),\n };\n }, {});\n return signalStoreFeature(withLinkedState(() => state), withProps(() => props), withMethods(() => methods));\n}\nexport function isResourceRef(value) {\n return (value !== null &&\n typeof value === 'object' &&\n 'value' in value &&\n isSignal(value.value) &&\n 'status' in value &&\n 'error' in value &&\n 'isLoading' in value &&\n 'hasValue' in value &&\n 'reload' in value);\n}\n//** Implementation of `mapToResource` */\n/**\n * @experimental\n * @description\n *\n * Maps a named resource to type `Resource<T>`.\n *\n * @usageNotes\n *\n * ```ts\n * const store = signalStore(\n * withState({ userId: undefined as number | undefined }),\n * withResource(({ userId }) => ({\n * user: httpResource<User[]>(() => '/users', { defaultValue: [] }),\n * }))\n * );\n * const userResource = mapToResource(store, 'user');\n * userResource satisfies Resource<User[]>;\n * ```\n *\n * @param store The store instance to map the resource to.\n * @param name The name of the resource to map.\n * @returns `ResourceRef<T>`\n */\nexport function mapToResource(store, name) {\n const resourceName = String(name);\n function hasValue() {\n return store[`${resourceName}HasValue`]();\n }\n return {\n value: store[`${resourceName}Value`],\n status: store[`${resourceName}Status`],\n error: store[`${resourceName}Error`],\n isLoading: store[`${resourceName}IsLoading`],\n hasValue,\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1yZXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10b29sa2l0L3NyYy9saWIvd2l0aC1yZXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQ0FBZ0M7QUFFaEMsT0FBTyxFQUNMLFFBQVEsR0FNVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsa0JBQWtCLEVBSWxCLGVBQWUsRUFDZixXQUFXLEVBQ1gsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBMEh2QixNQUFNLFVBQVUsWUFBWSxDQUkxQixlQUVvRDtJQUVwRCxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDZixNQUFNLG9CQUFvQixHQUFHLGVBQWUsQ0FBQztZQUMzQyxHQUFHLEtBQUssQ0FBQyxZQUFZO1lBQ3JCLEdBQUcsS0FBSyxDQUFDLEtBQUs7WUFDZCxHQUFHLEtBQUssQ0FBQyxPQUFPO1NBQ2pCLENBQUMsQ0FBQztRQUVILElBQUksYUFBYSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQztZQUN4QyxPQUFPLHFCQUFxQixDQUFDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUQsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLG1CQUFtQixDQUFDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUQsQ0FBQztJQUNILENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUM1QixRQUFvQztJQUVwQyxTQUFTLFFBQVE7UUFDZixPQUFPLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsT0FBTyxrQkFBa0IsQ0FDdkIsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFDbEQsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7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RCxPQUFPO1FBQ0wsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLFlBQVksT0FBTyxDQUFDO1FBQ3BDLE1BQU0sRUFBRSxLQUFLLENBQUMsR0FBRyxZQUFZLFFBQVEsQ0FBQztRQUN0QyxLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUcsWUFBWSxPQUFPLENBQUM7UUFDcEMsU0FBUyxFQUFFLEtBQUssQ0FBQyxHQUFHLFlBQVksV0FBVyxDQUFDO1FBQzVDLFFBQVE7S0FDc0IsQ0FBQztBQUNuQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8qKiBUeXBlcyBmb3IgYHdpdGhSZXNvdXJjZWAgKi9cblxuaW1wb3J0IHtcbiAgaXNTaWduYWwsXG4gIFJlc291cmNlLFxuICBSZXNvdXJjZVJlZixcbiAgUmVzb3VyY2VTdGF0dXMsXG4gIFNpZ25hbCxcbiAgV3JpdGFibGVTaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgc2lnbmFsU3RvcmVGZWF0dXJlLFxuICBTaWduYWxTdG9yZUZlYXR1cmUsXG4gIFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdCxcbiAgU3RhdGVTaWduYWxzLFxuICB3aXRoTGlua2VkU3RhdGUsXG4gIHdpdGhNZXRob2RzLFxuICB3aXRoUHJvcHMsXG59IGZyb20gJ0BuZ3J4L3NpZ25hbHMnO1xuXG5leHBvcnQgdHlwZSBSZXNvdXJjZVJlc3VsdDxUPiA9IHtcbiAgc3RhdGU6IHsgdmFsdWU6IFQgfTtcbiAgcHJvcHM6IHtcbiAgICBzdGF0dXM6IFNpZ25hbDxSZXNvdXJjZVN0YXR1cz47XG4gICAgZXJyb3I6IFNpZ25hbDxFcnJvciB8IHVuZGVmaW5lZD47XG4gICAgaXNMb2FkaW5nOiBTaWduYWw8Ym9vbGVhbj47XG4gIH07XG4gIG1ldGhvZHM6IHtcbiAgICBoYXNWYWx1ZSgpOiB0aGlzIGlzIFJlc291cmNlPEV4Y2x1ZGU8VCwgdW5kZWZpbmVkPj47XG4gICAgX3JlbG9hZCgpOiBib29sZWFuO1xuICB9O1xufTtcblxuZXhwb3J0IHR5cGUgUmVzb3VyY2VEaWN0aW9uYXJ5ID0gUmVjb3JkPHN0cmluZywgUmVzb3VyY2VSZWY8dW5rbm93bj4+O1xuXG5leHBvcnQgdHlwZSBOYW1lZFJlc291cmNlUmVzdWx0PFQgZXh0ZW5kcyBSZXNvdXJjZURpY3Rpb25hcnk+ID0ge1xuICBzdGF0ZToge1xuICAgIFtQcm9wIGluIGtleW9mIFQgYXMgYCR7UHJvcCAmXG4gICAgICBzdHJpbmd9VmFsdWVgXTogVFtQcm9wXVsndmFsdWUnXSBleHRlbmRzIFNpZ25hbDxpbmZlciBTPiA/IFMgOiBuZXZlcjtcbiAgfTtcbiAgcHJvcHM6IHtcbiAgICBbUHJvcCBpbiBrZXlvZiBUIGFzIGAke1Byb3AgJiBzdHJpbmd9U3RhdHVzYF06IFNpZ25hbDxSZXNvdXJjZVN0YXR1cz47XG4gIH0gJiB7XG4gICAgW1Byb3AgaW4ga2V5b2YgVCBhcyBgJHtQcm9wICYgc3RyaW5nfUVycm9yYF06IFNpZ25hbDxFcnJvciB8IHVuZGVmaW5lZD47XG4gIH0gJiB7XG4gICAgW1Byb3AgaW4ga2V5b2YgVCBhcyBgJHtQcm9wICYgc3RyaW5nfUlzTG9hZGluZ2BdOiBTaWduYWw8Ym9vbGVhbj47XG4gIH07XG4gIG1ldGhvZHM6IHtcbiAgICBbUHJvcCBpbiBrZXlvZiBUIGFzIGAke1Byb3AgJiBzdHJpbmd9SGFzVmFsdWVgXTogKCkgPT4gdGhpcyBpcyBSZXNvdXJjZTxcbiAgICAgIEV4Y2x1ZGU8VFtQcm9wXVsndmFsdWUnXSwgdW5kZWZpbmVkPlxuICAgID47XG4gIH0gJiB7XG4gICAgW1Byb3AgaW4ga2V5b2YgVCBhcyBgXyR7UHJvcCAmIHN0cmluZ31SZWxvYWRgXTogKCkgPT4gYm9vbGVhbjtcbiAgfTtcbn07XG5cbi8vKiogSW1wbGVtZW50YXRpb24gb2YgYHdpdGhSZXNvdXJjZWAgKi9cblxuLyoqXG4gKiBAZXhwZXJpbWVudGFsXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiBJbnRlZ3JhdGVzIGEgYFJlc291cmNlYCBpbnRvIHRoZSBTaWduYWxTdG9yZSBhbmQgbWFrZXMgdGhlIHN0b3JlIGluc3RhbmNlXG4gKiBpbXBsZW1lbnQgdGhlIGBSZXNvdXJjZWAgaW50ZXJmYWNlLlxuICpcbiAqIFRoZSByZXNvdXJjZeKAmXMgdmFsdWUgaXMgc3RvcmVkIHVuZGVyIHRoZSBgdmFsdWVgIGtleSBpbiB0aGUgc3RhdGVcbiAqIGFuZCBpcyBleHBvc2VkIGFzIGEgYERlZXBTaWduYWxgLlxuICpcbiAqIEl0IGNhbiBhbHNvIGJlIHVwZGF0ZWQgdmlhIGBwYXRjaFN0YXRlYC5cbiAqXG4gKiBAdXNhZ2VOb3Rlc1xuICpcbiAqIGBgYHRzXG4gKiBjb25zdCBVc2VyU3RvcmUgPSBzaWduYWxTdG9yZShcbiAqICAgd2l0aFN0YXRlKHsgdXNlcklkOiB1bmRlZmluZWQgYXMgbnVtYmVyIHwgdW5kZWZpbmVkIH0pLFxuICogICB3aXRoUmVzb3VyY2UoKHsgdXNlcklkIH0pID0+XG4gKiAgICAgaHR0cFJlc291cmNlPFVzZXI+KCgpID0+XG4gKiAgICAgICB1c2VySWQgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGAvdXNlcnMvJHt1c2VySWR9YFxuICogICAgIClcbiAqICAgKVxuICogKTtcbiAqXG4gKiBjb25zdCB1c2VyU3RvcmUgPSBuZXcgVXNlclN0b3JlKCk7XG4gKiB1c2VyU3RvcmUudmFsdWUoKTsgLy8gVXNlciB8IHVuZGVmaW5lZFxuICogYGBgXG4gKlxuICogQHBhcmFtIHJlc291cmNlRmFjdG9yeSBBIGZhY3RvcnkgZnVuY3Rpb24gdGhhdCByZWNlaXZlcyB0aGUgc3RvcmUncyBzdGF0ZSBzaWduYWxzLFxuICogbWV0aG9kcywgYW5kIHByb3BzLiBOZWVkcyB0byByZXR1cm4gYSBgUmVzb3VyY2VSZWZgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFJlc291cmNlPFxuICBJbnB1dCBleHRlbmRzIFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdCxcbiAgUmVzb3VyY2VWYWx1ZSxcbj4oXG4gIHJlc291cmNlRmFjdG9yeTogKFxuICAgIHN0b3JlOiBJbnB1dFsncHJvcHMnXSAmIElucHV0WydtZXRob2RzJ10gJiBTdGF0ZVNpZ25hbHM8SW5wdXRbJ3N0YXRlJ10+LFxuICApID0+IFJlc291cmNlUmVmPFJlc291cmNlVmFsdWU+LFxuKTogU2lnbmFsU3RvcmVGZWF0dXJlPElucHV0LCBSZXNvdXJjZVJlc3VsdDxSZXNvdXJjZVZhbHVlPj47XG5cbi8qKlxuICogQGV4cGVyaW1lbnRhbFxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogSW50ZWdyYXRlcyBtdWx0aXBsZSByZXNvdXJjZXMgaW50byB0aGUgU2lnbmFsU3RvcmUuIEVhY2ggcmVzb3VyY2UgaXNcbiAqIHJlZ2lzdGVyZWQgYnkgbmFtZSwgd2hpY2ggaXMgdXNlZCBhcyBhIHByZWZpeCB3aGVuIHNwcmVhZGluZyB0aGUgbWVtYmVyc1xuICogb2YgYFJlc291cmNlYCBvbnRvIHRoZSBzdG9yZS5cbiAqXG4gKiBFYWNoIHJlc291cmNl4oCZcyB2YWx1ZSBpcyBwYXJ0IG9mIHRoZSBzdGF0ZSwgc3RvcmVkIHVuZGVyIHRoZSBgdmFsdWVgIGtleVxuICogd2l0aCB0aGUgcmVzb3VyY2UgbmFtZSBhcyBwcmVmaXguIFZhbHVlcyBhcmUgZXhwb3NlZCBhcyBgRGVlcFNpZ25hbGBzIGFuZFxuICogY2FuIGJlIHVwZGF0ZWQgdmlhIGBwYXRjaFN0YXRlYC5cbiAqXG4gKiBAdXNhZ2VOb3Rlc1xuICpcbiAqIGBgYHRzXG4gKiBjb25zdCBVc2VyU3RvcmUgPSBzaWduYWxTdG9yZShcbiAqICAgd2l0aFN0YXRlKHsgdXNlcklkOiB1bmRlZmluZWQgYXMgbnVtYmVyIHwgdW5kZWZpbmVkIH0pLFxuICogICB3aXRoUmVzb3VyY2UoKHsgdXNlcklkIH0pID0+ICh7XG4gKiAgICAgbGlzdDogaHR0cFJlc291cmNlPFVzZXJbXT4oKCkgPT4gJy91c2VycycsIHsgZGVmYXVsdFZhbHVlOiBbXSB9KSxcbiAqICAgICBkZXRhaWw6IGh0dHBSZXNvdXJjZTxVc2VyPigoKSA9PlxuICogICAgICAgdXNlcklkID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBgL3VzZXJzLyR7dXNlcklkfWBcbiAqICAgICApLFxuICogICB9KSlcbiAqICk7XG4gKlxuICogY29uc3QgdXNlclN0b3JlID0gbmV3IFVzZXJTdG9yZSgpO1xuICogdXNlclN0b3JlLmxpc3RWYWx1ZSgpOyAvLyBbXVxuICogdXNlclN0b3JlLmRldGFpbFZhbHVlKCk7IC8vIFVzZXIgfCB1bmRlZmluZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSByZXNvdXJjZUZhY3RvcnkgQSBmYWN0b3J5IGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZXMgdGhlIHN0b3JlJ3MgcHJvcHMsXG4gKiBtZXRob2RzLCBhbmQgc3RhdGUgc2lnbmFscy4gSXQgbXVzdCByZXR1cm4gYSBgUmVjb3JkPHN0cmluZywgUmVzb3VyY2VSZWY+YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhSZXNvdXJjZTxcbiAgSW5wdXQgZXh0ZW5kcyBTaWduYWxTdG9yZUZlYXR1cmVSZXN1bHQsXG4gIERpY3Rpb25hcnkgZXh0ZW5kcyBSZXNvdXJjZURpY3Rpb25hcnksXG4+KFxuICByZXNvdXJjZUZhY3Rvcnk6IChcbiAgICBzdG9yZTogSW5wdXRbJ3Byb3BzJ10gJiBJbnB1dFsnbWV0aG9kcyddICYgU3RhdGVTaWduYWxzPElucHV0WydzdGF0ZSddPixcbiAgKSA9PiBEaWN0aW9uYXJ5LFxuKTogU2lnbmFsU3RvcmVGZWF0dXJlPElucHV0LCBOYW1lZFJlc291cmNlUmVzdWx0PERpY3Rpb25hcnk+PjtcblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhSZXNvdXJjZTxcbiAgSW5wdXQgZXh0ZW5kcyBTaWduYWxTdG9yZUZlYXR1cmVSZXN1bHQsXG4gIFJlc291cmNlVmFsdWUsXG4+KFxuICByZXNvdXJjZUZhY3Rvcnk6IChcbiAgICBzdG9yZTogSW5wdXRbJ3Byb3BzJ10gJiBJbnB1dFsnbWV0aG9kcyddICYgU3RhdGVTaWduYWxzPElucHV0WydzdGF0ZSddPixcbiAgKSA9PiBSZXNvdXJjZVJlZjxSZXNvdXJjZVZhbHVlPiB8IFJlc291cmNlRGljdGlvbmFyeSxcbik6IFNpZ25hbFN0b3JlRmVhdHVyZTxJbnB1dD4ge1xuICByZXR1cm4gKHN0b3JlKSA9PiB7XG4gICAgY29uc3QgcmVzb3VyY2VPckRpY3Rpb25hcnkgPSByZXNvdXJjZUZhY3Rvcnkoe1xuICAgICAgLi4uc3RvcmUuc3RhdGVTaWduYWxzLFxuICAgICAgLi4uc3RvcmUucHJvcHMsXG4gICAgICAuLi5zdG9yZS5tZXRob2RzLFxuICAgIH0pO1xuXG4gICAgaWYgKGlzUmVzb3VyY2VSZWYocmVzb3VyY2VPckRpY3Rpb25hcnkpKSB7XG4gICAgICByZXR1cm4gY3JlYXRlVW5uYW1lZFJlc291cmNlKHJlc291cmNlT3JEaWN0aW9uYXJ5KShzdG9yZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjcmVhdGVOYW1lZFJlc291cmNlKHJlc291cmNlT3JEaWN0aW9uYXJ5KShzdG9yZSk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVVbm5hbWVkUmVzb3VyY2U8UmVzb3VyY2VWYWx1ZT4oXG4gIHJlc291cmNlOiBSZXNvdXJjZVJlZjxSZXNvdXJjZVZhbHVlPixcbikge1xuICBmdW5jdGlvbiBoYXNWYWx1ZSgpOiB0aGlzIGlzIFJlc291cmNlPEV4Y2x1ZGU8UmVzb3VyY2VWYWx1ZSwgdW5kZWZpbmVkPj4ge1xuICAgIHJldHVybiByZXNvdXJjZS5oYXNWYWx1ZSgpO1xuICB9XG5cbiAgcmV0dXJuIHNpZ25hbFN0b3JlRmVhdHVyZShcbiAgICB3aXRoTGlua2VkU3RhdGUoKCkgPT4gKHsgdmFsdWU6IHJlc291cmNlLnZhbHVlIH0pKSxcbiAgICB3aXRoUHJvcHMoKCkgPT4gKHtcbiAgICAgIHN0YXR1czogcmVzb3VyY2Uuc3RhdHVzLFxuICAgICAgZXJyb3I6IHJlc291cmNlLmVycm9yLFxuICAgICAgaXNMb2FkaW5nOiByZXNvdXJjZS5pc0xvYWRpbmcsXG4gICAgfSkpLFxuICAgIHdpdGhNZXRob2RzKCgpID0+ICh7XG4gICAgICBoYXNWYWx1ZSxcbiAgICAgIF9yZWxvYWQ6ICgpID0+IHJlc291cmNlLnJlbG9hZCgpLFxuICAgIH0pKSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTmFtZWRSZXNvdXJjZTxEaWN0aW9uYXJ5IGV4dGVuZHMgUmVzb3VyY2VEaWN0aW9uYXJ5PihcbiAgZGljdGlvbmFyeTogRGljdGlvbmFyeSxcbikge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGljdGlvbmFyeSk7XG5cbiAgY29uc3Qgc3RhdGU6IFJlY29yZDxzdHJpbmcsIFdyaXRhYmxlU2lnbmFsPHVua25vd24+PiA9IGtleXMucmVkdWNlKFxuICAgIChzdGF0ZSwgcmVzb3VyY2VOYW1lKSA9PiAoe1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBbYCR7cmVzb3VyY2VOYW1lfVZhbHVlYF06IGRpY3Rpb25hcnlbcmVzb3VyY2VOYW1lXS52YWx1ZSxcbiAgICB9KSxcbiAgICB7fSxcbiAgKTtcblxuICBjb25zdCBwcm9wczogUmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+PiA9IGtleXMucmVkdWNlKFxuICAgIChwcm9wcywgcmVzb3VyY2VOYW1lKSA9PiAoe1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBbYCR7cmVzb3VyY2VOYW1lfVN0YXR1c2BdOiBkaWN0aW9uYXJ5W3Jlc291cmNlTmFtZV0uc3RhdHVzLFxuICAgICAgW2Ake3Jlc291cmNlTmFtZX1FcnJvcmBdOiBkaWN0aW9uYXJ5W3Jlc291cmNlTmFtZV0uZXJyb3IsXG4gICAgICBbYCR7cmVzb3VyY2VOYW1lfUlzTG9hZGluZ2BdOiBkaWN0aW9uYXJ5W3Jlc291cmNlTmFtZV0uaXNMb2FkaW5nLFxuICAgIH0pLFxuICAgIHt9LFxuICApO1xuXG4gIGNvbnN0IG1ldGhvZHM6IFJlY29yZDxzdHJpbmcsICgpID0+IGJvb2xlYW4+ID0ga2V5cy5yZWR1Y2UoXG4gICAgKG1ldGhvZHMsIHJlc291cmNlTmFtZSkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubWV0aG9kcyxcbiAgICAgICAgW2Ake3Jlc291cmNlTmFtZX1IYXNWYWx1ZWBdOiAoKSA9PiBkaWN0aW9uYXJ5W3Jlc291cmNlTmFtZV0uaGFzVmFsdWUoKSxcbiAgICAgICAgW2BfJHtyZXNvdXJjZU5hbWV9UmVsb2FkYF06ICgpID0+IGRpY3Rpb25hcnlbcmVzb3VyY2VOYW1lXS5yZWxvYWQoKSxcbiAgICAgIH07XG4gICAgfSxcbiAgICB7fSxcbiAgKTtcblxuICByZXR1cm4gc2lnbmFsU3RvcmVGZWF0dXJlKFxuICAgIHdpdGhMaW5rZWRTdGF0ZSgoKSA9PiBzdGF0ZSksXG4gICAgd2l0aFByb3BzKCgpID0+IHByb3BzKSxcbiAgICB3aXRoTWV0aG9kcygoKSA9PiBtZXRob2RzKSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVzb3VyY2VSZWYodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZXNvdXJjZVJlZjx1bmtub3duPiB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgJ3ZhbHVlJyBpbiB2YWx1ZSAmJlxuICAgIGlzU2lnbmFsKHZhbHVlLnZhbHVlKSAmJlxuICAgICdzdGF0dXMnIGluIHZhbHVlICYmXG4gICAgJ2Vycm9yJyBpbiB2YWx1ZSAmJlxuICAgICdpc0xvYWRpbmcnIGluIHZhbHVlICYmXG4gICAgJ2hhc1ZhbHVlJyBpbiB2YWx1ZSAmJlxuICAgICdyZWxvYWQnIGluIHZhbHVlXG4gICk7XG59XG5cbi8vKiogVHlwZXMgZm9yIGBtYXBUb1Jlc291cmNlYCAqL1xuXG50eXBlIE5hbWVkUmVzb3VyY2U8TmFtZSBleHRlbmRzIHN0cmluZywgVD4gPSB7XG4gIFtQcm9wIGluIGAke05hbWV9VmFsdWVgXTogU2lnbmFsPFQ+O1xufSAmIHtcbiAgW1Byb3AgaW4gYCR7TmFtZX1TdGF0dXNgXTogU2lnbmFsPFJlc291cmNlU3RhdHVzPjtcbn0gJiB7XG4gIFtQcm9wIGluIGAke05hbWV9RXJyb3JgXTogU2lnbmFsPEVycm9yIHwgdW5kZWZpbmVkPjtcbn0gJiB7XG4gIFtQcm9wIGluIGAke05hbWV9SXNMb2FkaW5nYF06IFNpZ25hbDxib29sZWFuPjtcbn0gJiB7XG4gIFtQcm9wIGluIGAke05hbWV9SGFzVmFsdWVgXTogKCkgPT4gYm9vbGVhbjtcbn07XG5cbnR5cGUgSXNWYWxpZFJlc291cmNlTmFtZTxcbiAgTmFtZSBleHRlbmRzIHN0cmluZyxcbiAgU3RvcmUgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbj4gPVxuICBTdG9yZVtgJHtOYW1lfVZhbHVlYF0gZXh0ZW5kcyBTaWduYWw8aW5mZXIgUz5cbiAgICA/IFN0b3JlIGV4dGVuZHMgTmFtZWRSZXNvdXJjZTxOYW1lLCBTPlxuICAgICAgPyB0cnVlXG4gICAgICA6IGZhbHNlXG4gICAgOiBmYWxzZTtcblxudHlwZSBSZXNvdXJjZU5hbWVzPFN0b3JlIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0ga2V5b2Yge1xuICBbUHJvcCBpbiBrZXlvZiBTdG9yZSBhcyBQcm9wIGV4dGVuZHMgYCR7aW5mZXIgTmFtZX1WYWx1ZWBcbiAgICA/IElzVmFsaWRSZXNvdXJjZU5hbWU8TmFtZSwgU3RvcmU+IGV4dGVuZHMgdHJ1ZVxuICAgICAgPyBOYW1lXG4gICAgICA6IG5ldmVyXG4gICAgOiBuZXZlcl06IFN0b3JlW1Byb3BdIGV4dGVuZHMgU2lnbmFsPGluZmVyIFM+ID8gUyA6IG5ldmVyO1xufTtcblxudHlwZSBNYXBwZWRSZXNvdXJjZTxcbiAgU3RvcmUgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgTmFtZSBleHRlbmRzIHN0cmluZyxcbj4gPSBSZXNvdXJjZTxTdG9yZVtgJHtOYW1lfVZhbHVlYF0gZXh0ZW5kcyBTaWduYWw8aW5mZXIgUz4gPyBTIDogbmV2ZXI+O1xuXG4vLyoqIEltcGxlbWVudGF0aW9uIG9mIGBtYXBUb1Jlc291cmNlYCAqL1xuXG4vKipcbiAqIEBleHBlcmltZW50YWxcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIE1hcHMgYSBuYW1lZCByZXNvdXJjZSB0byB0eXBlIGBSZXNvdXJjZTxUPmAuXG4gKlxuICogQHVzYWdlTm90ZXNcbiAqXG4gKiBgYGB0c1xuICogY29uc3Qgc3RvcmUgPSBzaWduYWxTdG9yZShcbiAqICAgd2l0aFN0YXRlKHsgdXNlcklkOiB1bmRlZmluZWQgYXMgbnVtYmVyIHwgdW5kZWZpbmVkIH0pLFxuICogICB3aXRoUmVzb3VyY2UoKHsgdXNlcklkIH0pID0+ICh7XG4gKiAgICAgdXNlcjogaHR0cFJlc291cmNlPFVzZXJbXT4oKCkgPT4gJy91c2VycycsIHsgZGVmYXVsdFZhbHVlOiBbXSB9KSxcbiAqICAgfSkpXG4gKiApO1xuICogY29uc3QgdXNlclJlc291cmNlID0gbWFwVG9SZXNvdXJjZShzdG9yZSwgJ3VzZXInKTtcbiAqIHVzZXJSZXNvdXJjZSBzYXRpc2ZpZXMgUmVzb3VyY2U8VXNlcltdPjtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzdG9yZSBUaGUgc3RvcmUgaW5zdGFuY2UgdG8gbWFwIHRoZSByZXNvdXJjZSB0by5cbiAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSB0byBtYXAuXG4gKiBAcmV0dXJucyBgUmVzb3VyY2VSZWY8VD5gXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXBUb1Jlc291cmNlPFxuICBOYW1lIGV4dGVuZHMgUmVzb3VyY2VOYW1lczxTdG9yZT4sXG4gIFN0b3JlIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4+KHN0b3JlOiBTdG9yZSwgbmFtZTogTmFtZSk6IE1hcHBlZFJlc291cmNlPFN0b3JlLCBOYW1lPiB7XG4gIGNvbnN0IHJlc291cmNlTmFtZSA9IFN0cmluZyhuYW1lKTtcblxuICBmdW5jdGlvbiBoYXNWYWx1ZSgpOiB0aGlzIGlzIFJlc291cmNlPFxuICAgIEV4Y2x1ZGU8TWFwcGVkUmVzb3VyY2U8U3RvcmUsIE5hbWU+LCB1bmRlZmluZWQ+XG4gID4ge1xuICAgIHJldHVybiAoc3RvcmVbYCR7cmVzb3VyY2VOYW1lfUhhc1ZhbHVlYF0gYXMgKCkgPT4gYm9vbGVhbikoKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdmFsdWU6IHN0b3JlW2Ake3Jlc291cmNlTmFtZX1WYWx1ZWBdLFxuICAgIHN0YXR1czogc3RvcmVbYCR7cmVzb3VyY2VOYW1lfVN0YXR1c2BdLFxuICAgIGVycm9yOiBzdG9yZVtgJHtyZXNvdXJjZU5hbWV9RXJyb3JgXSxcbiAgICBpc0xvYWRpbmc6IHN0b3JlW2Ake3Jlc291cmNlTmFtZX1Jc0xvYWRpbmdgXSxcbiAgICBoYXNWYWx1ZSxcbiAgfSBhcyBNYXBwZWRSZXNvdXJjZTxTdG9yZSwgTmFtZT47XG59XG4iXX0=","import { computed, linkedSignal } from '@angular/core';\nimport { signalStoreFeature, withComputed, withLinkedState, } from '@ngrx/signals';\nimport { isResourceRef, withResource, } from './with-resource';\nexport function withEntityResources(entityResourceFactory) {\n return (store) => {\n const resourceOrDict = entityResourceFactory({\n ...store.stateSignals,\n ...store.props,\n ...store.methods,\n });\n if (isResourceRef(resourceOrDict)) {\n return createUnnamedEntityResource(resourceOrDict)(store);\n }\n return createNamedEntityResources(resourceOrDict)(store);\n };\n}\nfunction createUnnamedEntityResource(resource) {\n const { idsLinked, entityMapLinked, entitiesSignal } = createEntityDerivations(resource.value);\n return signalStoreFeature(withResource(() => resource), withLinkedState(() => ({\n entityMap: entityMapLinked,\n ids: idsLinked,\n })), withComputed(() => ({\n entities: entitiesSignal,\n })));\n}\nfunction createNamedEntityResources(dictionary) {\n const keys = Object.keys(dictionary);\n const linkedState = {};\n const computedProps = {};\n keys.forEach((name) => {\n const ref = dictionary[name];\n const { idsLinked, entityMapLinked, entitiesSignal } = createEntityDerivations(ref.value);\n linkedState[`${String(name)}EntityMap`] = entityMapLinked;\n linkedState[`${String(name)}Ids`] = idsLinked;\n computedProps[`${String(name)}Entities`] = entitiesSignal;\n });\n return signalStoreFeature(withResource(() => dictionary), withLinkedState(() => linkedState), withComputed(() => computedProps));\n}\n/**\n * @internal\n * @description\n *\n * Creates the three entity-related signals (`ids`, `entityMap`, `entities`) from\n * a single source signal of entities. This mirrors the public contract of\n * `withEntities()`:\n * - `ids`: derived list of entity ids\n * - `entityMap`: map of id -> entity\n * - `entities`: projection of `ids` through `entityMap`\n *\n * Implementation details:\n * - Uses `withLinkedState` + `linkedSignal` for `ids` and `entityMap` so they are\n * writable state signals in the store (updaters like `addEntity` can mutate them).\n * - `entities` is a pure `computed` derived from `ids` and `entityMap`, matching\n * the pattern in `withEntities` where `entities` is computed from the two bases.\n *\n * Why not `watchState` or `effect`?\n * - `watchState` would fire for any state change in the store, not just changes\n * to the underlying resource value. That would cause unnecessary recomputation\n * and make it harder to reason about updates.\n * - `effect` would introduce side-effects and lifecycle management for syncing,\n * which is heavier and not aligned with this feature's goal to be purely\n * derived from signals. Using linked signals keeps the data flow declarative\n * and avoids imperative syncing code.\n */\nfunction createEntityDerivations(source) {\n const idsLinked = linkedSignal({\n source,\n computation: (list) => (list ?? []).map((e) => e.id),\n });\n const entityMapLinked = linkedSignal({\n source,\n computation: (list) => {\n const map = {};\n for (const item of list ?? []) {\n map[item.id] = item;\n }\n return map;\n },\n });\n const entitiesSignal = computed(() => {\n const ids = idsLinked();\n const map = entityMapLinked();\n return ids.map((id) => map[id]);\n }, ...(ngDevMode ? [{ debugName: \"entitiesSignal\" }] : []));\n return { idsLinked, entityMapLinked, entitiesSignal };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1lbnRpdHktcmVzb3VyY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRvb2xraXQvc3JjL2xpYi93aXRoLWVudGl0eS1yZXNvdXJjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QixRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFJTCxrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLGVBQWUsR0FDaEIsTUFBTSxlQUFlLENBQUM7QUFRdkIsT0FBTyxFQUdMLGFBQWEsRUFDYixZQUFZLEdBQ2IsTUFBTSxpQkFBaUIsQ0FBQztBQXNGekIsTUFBTSxVQUFVLG1CQUFtQixDQUlqQyxxQkFFa0Q7SUFFbEQsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ2YsTUFBTSxjQUFjLEdBQUcscUJBQXFCLENBQUM7WUFDM0MsR0FBRyxLQUFLLENBQUMsWUFBWTtZQUNyQixHQUFHLEtBQUssQ0FBQyxLQUFLO1lBQ2QsR0FBRyxLQUFLLENBQUMsT0FBTztTQUNqQixDQUFDLENBQUM7UUFFSCxJQUFJLGFBQWEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sMkJBQTJCLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUNELE9BQU8sMEJBQTBCLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0QsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsMkJBQTJCLENBRWxDLFFBQVc7SUFFWCxNQUFNLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsR0FDbEQsdUJBQXVCLENBQ3JCLFFBQVEsQ0FBQyxLQUErQyxDQUN6RCxDQUFDO0lBRUosT0FBTyxrQkFBa0IsQ0FDdkIsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUM1QixlQUFlLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNyQixTQUFTLEVBQUUsZUFBZTtRQUMxQixHQUFHLEVBQUUsU0FBUztLQUNmLENBQUMsQ0FBQyxFQUNILFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2xCLFFBQVEsRUFBRSxjQUFjO0tBQ3pCLENBQUMsQ0FBQyxDQUNKLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUywwQkFBMEIsQ0FDakMsVUFBc0I7SUFFdEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVyQyxNQUFNLFdBQVcsR0FBb0MsRUFBRSxDQUFDO0lBQ3hELE1BQU0sYUFBYSxHQUFvQyxFQUFFLENBQUM7SUFFMUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ3BCLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU3QixNQUFNLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsR0FDbEQsdUJBQXVCLENBQ3JCLEdBQUcsQ0FBQyxLQUErQyxDQUNwRCxDQUFDO1FBRUosV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxlQUFlLENBQUM7UUFDMUQsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUM7UUFDOUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxjQUFjLENBQUM7SUFDNUQsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLGtCQUFrQixDQUN2QixZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQzlCLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFDbEMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUNsQyxDQUFDO0FBQ0osQ0FBQztBQWdGRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUNILFNBQVMsdUJBQXVCLENBQzlCLE1BQThDO0lBRTlDLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQztRQUM3QixNQUFNO1FBQ04sV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDckQsQ0FBQyxDQUFDO0lBRUgsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDO1FBQ25DLE1BQU07UUFDTixXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNwQixNQUFNLEdBQUcsR0FBRyxFQUF5QixDQUFDO1lBQ3RDLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDO2dCQUM5QixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQVMsQ0FBQztZQUMzQixDQUFDO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUNuQyxNQUFNLEdBQUcsR0FBRyxTQUFTLEVBQUUsQ0FBQztRQUN4QixNQUFNLEdBQUcsR0FBRyxlQUFlLEVBQUUsQ0FBQztRQUM5QixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBaUIsQ0FBQztJQUNsRCxDQUFDLDBEQUFDLENBQUM7SUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsQ0FBQztBQUN4RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVzb3VyY2VSZWYsIFNpZ25hbCwgY29tcHV0ZWQsIGxpbmtlZFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgU2lnbmFsU3RvcmVGZWF0dXJlLFxuICBTaWduYWxTdG9yZUZlYXR1cmVSZXN1bHQsXG4gIFN0YXRlU2lnbmFscyxcbiAgc2lnbmFsU3RvcmVGZWF0dXJlLFxuICB3aXRoQ29tcHV0ZWQsXG4gIHdpdGhMaW5rZWRTdGF0ZSxcbn0gZnJvbSAnQG5ncngvc2lnbmFscyc7XG5pbXBvcnQge1xuICBFbnRpdHlJZCxcbiAgRW50aXR5UHJvcHMsXG4gIEVudGl0eVN0YXRlLFxuICBOYW1lZEVudGl0eVByb3BzLFxuICBOYW1lZEVudGl0eVN0YXRlLFxufSBmcm9tICdAbmdyeC9zaWduYWxzL2VudGl0aWVzJztcbmltcG9ydCB7XG4gIE5hbWVkUmVzb3VyY2VSZXN1bHQsXG4gIFJlc291cmNlUmVzdWx0LFxuICBpc1Jlc291cmNlUmVmLFxuICB3aXRoUmVzb3VyY2UsXG59IGZyb20gJy4vd2l0aC1yZXNvdXJjZSc7XG5cbi8qKlxuICogQGV4cGVyaW1lbnRhbFxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogSW50ZWdyYXRlcyBhcnJheS1iYXNlZCBgUmVzb3VyY2VgIGRhdGEgaW50byBFbnRpdHktc3R5bGUgc3RhdGUgZm9yIE5nUnggU2lnbmFsU3RvcmUuXG4gKiBUaGlzIGZlYXR1cmUgYnVpbGRzIG9uIHtAbGluayB3aXRoUmVzb3VyY2V9IHRvIHByb3ZpZGUgYW4gZW50aXR5IHZpZXcgb3ZlclxuICogYXJyYXkgcmVzb3VyY2VzLlxuICpcbiAqIC0gRm9yIGEgc2luZ2xlICh1bm5hbWVkKSByZXNvdXJjZTogZXhwb3NlcyBgdmFsdWVgLCBgc3RhdHVzYCwgYGVycm9yYCwgYGlzTG9hZGluZ2BcbiAqICAgZnJvbSB0aGUgdW5kZXJseWluZyByZXNvdXJjZSAodmlhIGB3aXRoUmVzb3VyY2VgKSwgYW5kIGRlcml2ZXNcbiAqICAgYGlkc2AsIGBlbnRpdHlNYXBgLCBhbmQgYGVudGl0aWVzYCB2aWEgYHdpdGhMaW5rZWRTdGF0ZWAvYHdpdGhDb21wdXRlZGAuXG4gKiAtIEZvciBtdWx0aXBsZSAobmFtZWQpIHJlc291cmNlczogcmVnaXN0ZXJzIGVhY2ggcmVzb3VyY2UgYnkgbmFtZSBhbmQgZXhwb3Nlc1xuICogICB0aGUgc2FtZSBtZW1iZXJzIHByZWZpeGVkIHdpdGggdGhlIHJlc291cmNlIG5hbWUsIGUuZy4gYHRvZG9zSWRzYCxcbiAqICAgYHRvZG9zRW50aXR5TWFwYCwgYHRvZG9zRW50aXRpZXNgLCBhbG9uZyB3aXRoIGB0b2Rvc1ZhbHVlYCwgYHRvZG9zU3RhdHVzYCwgZXRjLlxuICpcbiAqIE5vIGVmZmVjdHMgYXJlIHVzZWQuIEFsbCBkZXJpdmVkIHNpZ25hbHMgYXJlIGxpbmtlZCB0byB0aGUgcmVzb3VyY2UncyB2YWx1ZVxuICogdGhyb3VnaCBgd2l0aExpbmtlZFN0YXRlYCwgc28gZW50aXR5IHVwZGF0ZXJzIHN1Y2ggYXMgYGFkZEVudGl0eWAsIGB1cGRhdGVFbnRpdHlgLFxuICogYW5kIGByZW1vdmVFbnRpdHlgIG11dGF0ZSB0aGUgc3RvcmUncyBlbnRpdHkgdmlldyB3aXRob3V0IGRpcmVjdGx5IHdyaXRpbmcgdG8gdGhlXG4gKiByZXNvdXJjZS4gVGhlIHNvdXJjZSBvZiB0cnV0aCByZW1haW5zIHRoZSByZXNvdXJjZSB2YWx1ZS5cbiAqXG4gKiBAdXNhZ2VOb3Rlc1xuICpcbiAqIFVubmFtZWQgcmVzb3VyY2UgZXhhbXBsZTpcbiAqXG4gKiBgYGB0c1xuICogdHlwZSBUb2RvID0geyBpZDogbnVtYmVyOyB0aXRsZTogc3RyaW5nOyBjb21wbGV0ZWQ6IGJvb2xlYW4gfTtcbiAqXG4gKiBjb25zdCBTdG9yZSA9IHNpZ25hbFN0b3JlKFxuICogICB7IHByb3ZpZGVkSW46ICdyb290JyB9LFxuICogICB3aXRoRW50aXR5UmVzb3VyY2VzKCgpID0+XG4gKiAgICAgcmVzb3VyY2UoeyBsb2FkZXI6ICgpID0+IFByb21pc2UucmVzb2x2ZShbXSBhcyBUb2RvW10pLCBkZWZhdWx0VmFsdWU6IFtdIH0pLFxuICogICApLFxuICogKTtcbiAqXG4gKiBjb25zdCBzdG9yZSA9IFRlc3RCZWQuaW5qZWN0KFN0b3JlKTtcbiAqIHN0b3JlLnN0YXR1cygpOyAgICAvLyAnaWRsZScgfCAnbG9hZGluZycgfCAncmVzb2x2ZWQnIHwgJ2Vycm9yJ1xuICogc3RvcmUudmFsdWUoKTsgICAgIC8vIFRvZG9bXVxuICogc3RvcmUuaWRzKCk7ICAgICAgIC8vIEVudGl0eUlkW11cbiAqIHN0b3JlLmVudGl0eU1hcCgpOyAvLyBSZWNvcmQ8RW50aXR5SWQsIFRvZG8+XG4gKiBzdG9yZS5lbnRpdGllcygpOyAgLy8gVG9kb1tdXG4gKlxuICogLy8gV29ya3Mgd2l0aCBAbmdyeC9zaWduYWxzL2VudGl0aWVzIHVwZGF0ZXJzXG4gKiBwYXRjaFN0YXRlKHN0b3JlLCBhZGRFbnRpdHkoeyBpZDogMSwgdGl0bGU6ICdYJywgY29tcGxldGVkOiBmYWxzZSB9KSk7XG4gKiBgYGBcbiAqXG4gKiBOYW1lZCByZXNvdXJjZXMgZXhhbXBsZTpcbiAqXG4gKiBgYGB0c1xuICogY29uc3QgU3RvcmUgPSBzaWduYWxTdG9yZShcbiAqICAgeyBwcm92aWRlZEluOiAncm9vdCcgfSxcbiAqICAgd2l0aEVudGl0eVJlc291cmNlcygoKSA9PiAoe1xuICogICAgIHRvZG9zOiByZXNvdXJjZSh7IGxvYWRlcjogKCkgPT4gUHJvbWlzZS5yZXNvbHZlKFtdIGFzIFRvZG9bXSksIGRlZmF1bHRWYWx1ZTogW10gfSksXG4gKiAgICAgcHJvamVjdHM6IHJlc291cmNlKHsgbG9hZGVyOiAoKSA9PiBQcm9taXNlLnJlc29sdmUoW10gYXMgeyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmcgfVtdKSwgZGVmYXVsdFZhbHVlOiBbXSB9KSxcbiAqICAgfSkpLFxuICogKTtcbiAqXG4gKiBjb25zdCBzdG9yZSA9IFRlc3RCZWQuaW5qZWN0KFN0b3JlKTtcbiAqIHN0b3JlLnRvZG9zVmFsdWUoKTtcbiAqIHN0b3JlLnRvZG9zSWRzKCk7XG4gKiBzdG9yZS50b2Rvc0VudGl0eU1hcCgpO1xuICogc3RvcmUudG9kb3NFbnRpdGllcygpO1xuICogcGF0Y2hTdGF0ZShzdG9yZSwgYWRkRW50aXR5KHsgaWQ6IDIsIHRpdGxlOiAnWScsIGNvbXBsZXRlZDogdHJ1ZSB9LCB7IGNvbGxlY3Rpb246ICd0b2RvcycgfSkpO1xuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgd2l0aFJlc291cmNlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aEVudGl0eVJlc291cmNlczxcbiAgSW5wdXQgZXh0ZW5kcyBTaWduYWxTdG9yZUZlYXR1cmVSZXN1bHQsXG4gIEVudGl0eSBleHRlbmRzIHsgaWQ6IEVudGl0eUlkIH0sXG4+KFxuICByZXNvdXJjZUZhY3Rvcnk6IChcbiAgICBzdG9yZTogSW5wdXRbJ3Byb3BzJ10gJiBJbnB1dFsnbWV0aG9kcyddICYgU3RhdGVTaWduYWxzPElucHV0WydzdGF0ZSddPixcbiAgKSA9PiBSZXNvdXJjZVJlZjxyZWFkb25seSBFbnRpdHlbXSB8IEVudGl0eVtdIHwgdW5kZWZpbmVkPixcbik6IFNpZ25hbFN0b3JlRmVhdHVyZTxJbnB1dCwgRW50aXR5UmVzb3VyY2VSZXN1bHQ8RW50aXR5Pj47XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoRW50aXR5UmVzb3VyY2VzPFxuICBJbnB1dCBleHRlbmRzIFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdCxcbiAgRGljdGlvbmFyeSBleHRlbmRzIEVudGl0eURpY3Rpb25hcnksXG4+KFxuICByZXNvdXJjZUZhY3Rvcnk6IChcbiAgICBzdG9yZTogSW5wdXRbJ3Byb3BzJ10gJiBJbnB1dFsnbWV0aG9kcyddICYgU3RhdGVTaWduYWxzPElucHV0WydzdGF0ZSddPixcbiAgKSA9PiBEaWN0aW9uYXJ5LFxuKTogU2lnbmFsU3RvcmVGZWF0dXJlPElucHV0LCBOYW1lZEVudGl0eVJlc291cmNlUmVzdWx0PERpY3Rpb25hcnk+PjtcblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhFbnRpdHlSZXNvdXJjZXM8XG4gIElucHV0IGV4dGVuZHMgU2lnbmFsU3RvcmVGZWF0dXJlUmVzdWx0LFxuICBSZXNvdXJjZVZhbHVlIGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdIHwgdW5rbm93bltdIHwgdW5kZWZpbmVkLFxuPihcbiAgZW50aXR5UmVzb3VyY2VGYWN0b3J5OiAoXG4gICAgc3RvcmU6IElucHV0Wydwcm9wcyddICYgSW5wdXRbJ21ldGhvZHMnXSAmIFN0YXRlU2lnbmFsczxJbnB1dFsnc3RhdGUnXT4sXG4gICkgPT4gUmVzb3VyY2VSZWY8UmVzb3VyY2VWYWx1ZT4gfCBFbnRpdHlEaWN0aW9uYXJ5LFxuKTogU2lnbmFsU3RvcmVGZWF0dXJlPElucHV0PiB7XG4gIHJldHVybiAoc3RvcmUpID0+IHtcbiAgICBjb25zdCByZXNvdXJjZU9yRGljdCA9IGVudGl0eVJlc291cmNlRmFjdG9yeSh7XG4gICAgICAuLi5zdG9yZS5zdGF0ZVNpZ25hbHMsXG4gICAgICAuLi5zdG9yZS5wcm9wcyxcbiAgICAgIC4uLnN0b3JlLm1ldGhvZHMsXG4gICAgfSk7XG5cbiAgICBpZiAoaXNSZXNvdXJjZVJlZihyZXNvdXJjZU9yRGljdCkpIHtcbiAgICAgIHJldHVybiBjcmVhdGVVbm5hbWVkRW50aXR5UmVzb3VyY2UocmVzb3VyY2VPckRpY3QpKHN0b3JlKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZU5hbWVkRW50aXR5UmVzb3VyY2VzKHJlc291cmNlT3JEaWN0KShzdG9yZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVVubmFtZWRFbnRpdHlSZXNvdXJjZTxcbiAgUiBleHRlbmRzIFJlc291cmNlUmVmPHJlYWRvbmx5IHVua25vd25bXSB8IHVua25vd25bXSB8IHVuZGVmaW5lZD4sXG4+KHJlc291cmNlOiBSKSB7XG4gIHR5cGUgRSA9IEluZmVyRW50aXR5RnJvbVJlZjxSPiAmIHsgaWQ6IEVudGl0eUlkIH07XG4gIGNvbnN0IHsgaWRzTGlua2VkLCBlbnRpdHlNYXBMaW5rZWQsIGVudGl0aWVzU2lnbmFsIH0gPVxuICAgIGNyZWF0ZUVudGl0eURlcml2YXRpb25zPEU+KFxuICAgICAgcmVzb3VyY2UudmFsdWUgYXMgU2lnbmFsPHJlYWRvbmx5IEVbXSB8IEVbXSB8IHVuZGVmaW5lZD4sXG4gICAgKTtcblxuICByZXR1cm4gc2lnbmFsU3RvcmVGZWF0dXJlKFxuICAgIHdpdGhSZXNvdXJjZSgoKSA9PiByZXNvdXJjZSksXG4gICAgd2l0aExpbmtlZFN0YXRlKCgpID0+ICh7XG4gICAgICBlbnRpdHlNYXA6IGVudGl0eU1hcExpbmtlZCxcbiAgICAgIGlkczogaWRzTGlua2VkLFxuICAgIH0pKSxcbiAgICB3aXRoQ29tcHV0ZWQoKCkgPT4gKHtcbiAgICAgIGVudGl0aWVzOiBlbnRpdGllc1NpZ25hbCxcbiAgICB9KSksXG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU5hbWVkRW50aXR5UmVzb3VyY2VzPERpY3Rpb25hcnkgZXh0ZW5kcyBFbnRpdHlEaWN0aW9uYXJ5PihcbiAgZGljdGlvbmFyeTogRGljdGlvbmFyeSxcbikge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGljdGlvbmFyeSk7XG5cbiAgY29uc3QgbGlua2VkU3RhdGU6IFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4gPSB7fTtcbiAgY29uc3QgY29tcHV0ZWRQcm9wczogUmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+PiA9IHt9O1xuXG4gIGtleXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgIGNvbnN0IHJlZiA9IGRpY3Rpb25hcnlbbmFtZV07XG4gICAgdHlwZSBFID0gSW5mZXJFbnRpdHlGcm9tUmVmPHR5cGVvZiByZWY+ICYgeyBpZDogRW50aXR5SWQgfTtcbiAgICBjb25zdCB7IGlkc0xpbmtlZCwgZW50aXR5TWFwTGlua2VkLCBlbnRpdGllc1NpZ25hbCB9ID1cbiAgICAgIGNyZWF0ZUVudGl0eURlcml2YXRpb25zPEU+KFxuICAgICAgICByZWYudmFsdWUgYXMgU2lnbmFsPHJlYWRvbmx5IEVbXSB8IEVbXSB8IHVuZGVmaW5lZD4sXG4gICAgICApO1xuXG4gICAgbGlua2VkU3RhdGVbYCR7U3RyaW5nKG5hbWUpfUVudGl0eU1hcGBdID0gZW50aXR5TWFwTGlua2VkO1xuICAgIGxpbmtlZFN0YXRlW2Ake1N0cmluZyhuYW1lKX1JZHNgXSA9IGlkc0xpbmtlZDtcbiAgICBjb21wdXRlZFByb3BzW2Ake1N0cmluZyhuYW1lKX1FbnRpdGllc2BdID0gZW50aXRpZXNTaWduYWw7XG4gIH0pO1xuXG4gIHJldHVybiBzaWduYWxTdG9yZUZlYXR1cmUoXG4gICAgd2l0aFJlc291cmNlKCgpID0+IGRpY3Rpb25hcnkpLFxuICAgIHdpdGhMaW5rZWRTdGF0ZSgoKSA9PiBsaW5rZWRTdGF0ZSksXG4gICAgd2l0aENvbXB1dGVkKCgpID0+IGNvbXB1dGVkUHJvcHMpLFxuICApO1xufVxuXG4vLyBUeXBlcyBmb3IgYHdpdGhFbnRpdHlSZXNvdXJjZXNgXG4vKipcbiAqIEBpbnRlcm5hbFxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogVHlwZSBjb21wb3NpdGlvbiBub3Rlczogd2UgaW50ZW50aW9uYWxseSBkbyBub3QgZHVwbGljYXRlIG9yIHJlLWRlY2xhcmVcbiAqIHR5cGVzIHRoYXQgYWxyZWFkeSBleGlzdCBpbiBgQG5ncngvc2lnbmFscy9lbnRpdGllc2Agb3IgaW4gdGhpcyBsaWJyYXJ5J3NcbiAqIGB3aXRoLXJlc291cmNlYCBmZWF0dXJlLiBJbnN0ZWFkLCB3ZSBjb21wb3NlIHRoZSByZXN1bHRpbmcgQVBJIHZpYVxuICogaW50ZXJzZWN0aW9ucyBvZiB0aG9zZSBwdWJsaWMgY29udHJhY3RzLlxuICpcbiAqIFJhdGlvbmFsZTpcbiAqIC0gS2VlcHMgb3VyIHR5cGVzIGluIHN5bmMgd2l0aCB1cHN0cmVhbSBzb3VyY2VzIGFuZCBhdm9pZHMgZHJpZnQuXG4gKiAtIFJlZHVjZXMgbWFpbnRlbmFuY2Ugb3ZlcmhlYWQgYW5kIGR1cGxpY2F0aW9uLlxuICogLSBFbnN1cmVzIGNvbnN1bWVycyBiZW5lZml0IGF1dG9tYXRpY2FsbHkgZnJvbSB1cHN0cmVhbSB0eXBpbmcgZml4ZXMuXG4gKlxuICogQ29uY3JldGVseTpcbiAqIC0gRm9yIHVubmFtZWQgcmVzb3VyY2VzIHdlIHJldHVybiBgUmVzb3VyY2VSZXN1bHQ8RW50aXR5PmAgaW50ZXJzZWN0ZWQgd2l0aFxuICogICBgRW50aXR5U3RhdGU8RW50aXR5PmAgYW5kIGBFbnRpdHlQcm9wczxFbnRpdHk+YC5cbiAqIC0gRm9yIG5hbWVkIHJlc291cmNlcyB3ZSByZXR1cm4gYE5hbWVkUmVzb3VyY2VSZXN1bHQ8VD5gIGludGVyc2VjdGVkIHdpdGhcbiAqICAgYE5hbWVkRW50aXR5U3RhdGU8RSwgTmFtZT5gIGFuZCBgTmFtZWRFbnRpdHlQcm9wczxFLCBOYW1lPmAgZm9yIGVhY2ggZW50cnkuXG4gKi9cbmV4cG9ydCB0eXBlIEVudGl0eVJlc291cmNlUmVzdWx0PEVudGl0eT4gPSB7XG4gIHN0YXRlOiBSZXNvdXJjZVJlc3VsdDxFbnRpdHk+WydzdGF0ZSddICYgRW50aXR5U3RhdGU8RW50aXR5PjtcbiAgcHJvcHM6IFJlc291cmNlUmVzdWx0PEVudGl0eT5bJ3Byb3BzJ10gJiBFbnRpdHlQcm9wczxFbnRpdHk+O1xuICBtZXRob2RzOiBSZXNvdXJjZVJlc3VsdDxFbnRpdHk+WydtZXRob2RzJ107XG59O1xuXG4vLyBHZW5lcmljIGhlbHBlcnMgZm9yIGluZmVycmluZyBlbnRpdHkgdHlwZXMgYW5kIG1lcmdpbmcgdW5pb25zXG50eXBlIEFycmF5RWxlbWVudDxUPiA9IFQgZXh0ZW5kcyByZWFkb25seSAoaW5mZXIgRSlbXSB8IChpbmZlciBFKVtdID8gRSA6IG5ldmVyO1xuXG50eXBlIEluZmVyRW50aXR5RnJvbVNpZ25hbDxUPiA9XG4gIFQgZXh0ZW5kcyBTaWduYWw8aW5mZXIgVj4gPyBBcnJheUVsZW1lbnQ8Vj4gOiBuZXZlcjtcblxudHlwZSBJbmZlckVudGl0eUZyb21SZWY8XG4gIFIgZXh0ZW5kcyBSZXNvdXJjZVJlZjxyZWFkb25seSB1bmtub3duW10gfCB1bmtub3duW10gfCB1bmRlZmluZWQ+LFxuPiA9IFJbJ3ZhbHVlJ10gZXh0ZW5kcyBTaWduYWw8aW5mZXIgVj4gPyBBcnJheUVsZW1lbnQ8Vj4gOiBuZXZlcjtcblxudHlwZSBNZXJnZVVuaW9uPFU+ID0gKFUgZXh0ZW5kcyB1bmtub3duID8gKGs6IFUpID0+IHZvaWQgOiBuZXZlcikgZXh0ZW5kcyAoXG4gIGs6IGluZmVyIEksXG4pID0+IHZvaWRcbiAgPyBJXG4gIDogbmV2ZXI7XG5cbmV4cG9ydCB0eXBlIEVudGl0eURpY3Rpb25hcnkgPSBSZWNvcmQ8XG4gIHN0cmluZyxcbiAgUmVzb3VyY2VSZWY8cmVhZG9ubHkgdW5rbm93bltdIHwgdW5rbm93bltdIHwgdW5kZWZpbmVkPlxuPjtcblxudHlwZSBNZXJnZU5hbWVkRW50aXR5U3RhdGVzPFQgZXh0ZW5kcyBFbnRpdHlEaWN0aW9uYXJ5PiA9IE1lcmdlVW5pb248XG4gIHtcbiAgICBbUHJvcCBpbiBrZXlvZiBUXTogUHJvcCBleHRlbmRzIHN0cmluZ1xuICAgICAgPyBJbmZlckVudGl0eUZyb21TaWduYWw8VFtQcm9wXVsndmFsdWUnXT4gZXh0ZW5kcyBpbmZlciBFXG4gICAgICAgID8gRSBleHRlbmRzIG5ldmVyXG4gICAgICAgICAgPyBuZXZlclxuICAgICAgICAgIDogTmFtZWRFbnRpdHlTdGF0ZTxFLCBQcm9wPlxuICAgICAgICA6IG5ldmVyXG4gICAgICA6IG5ldmVyO1xuICB9W2tleW9mIFRdXG4+O1xuXG50eXBlIE1lcmdlTmFtZWRFbnRpdHlQcm9wczxUIGV4dGVuZHMgRW50aXR5RGljdGlvbmFyeT4gPSBNZXJnZVVuaW9uPFxuICB7XG4gICAgW1Byb3AgaW4ga2V5b2YgVF06IFByb3AgZXh0ZW5kcyBzdHJpbmdcbiAgICAgID8gSW5mZXJFbnRpdHlGcm9tU2lnbmFsPFRbUHJvcF1bJ3ZhbHVlJ10+IGV4dGVuZHMgaW5mZXIgRVxuICAgICAgICA/IEUgZXh0ZW5kcyBuZXZlclxuICAgICAgICAgID8gbmV2ZXJcbiAgICAgICAgICA6IE5hbWVkRW50aXR5UHJvcHM8RSwgUHJvcD5cbiAgICAgICAgOiBuZXZlclxuICAgICAgOiBuZXZlcjtcbiAgfVtrZXlvZiBUXVxuPjtcblxuZXhwb3J0IHR5cGUgTmFtZWRFbnRpdHlSZXNvdXJjZVJlc3VsdDxUIGV4dGVuZHMgRW50aXR5RGljdGlvbmFyeT4gPSB7XG4gIHN0YXRlOiBOYW1lZFJlc291cmNlUmVzdWx0PFQ+WydzdGF0ZSddICYgTWVyZ2VOYW1lZEVudGl0eVN0YXRlczxUPjtcbiAgcHJvcHM6IE5hbWVkUmVzb3VyY2VSZXN1bHQ8VD5bJ3Byb3BzJ10gJiBNZXJnZU5hbWVkRW50aXR5UHJvcHM8VD47XG4gIG1ldGhvZHM6IE5hbWVkUmVzb3VyY2VSZXN1bHQ8VD5bJ21ldGhvZHMnXTtcbn07XG5cbi8qKlxuICogQGludGVybmFsXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiBDcmVhdGVzIHRoZSB0aHJlZSBlbnRpdHktcmVsYXRlZCBzaWduYWxzIChgaWRzYCwgYGVudGl0eU1hcGAsIGBlbnRpdGllc2ApIGZyb21cbiAqIGEgc2luZ2xlIHNvdXJjZSBzaWduYWwgb2YgZW50aXRpZXMuIFRoaXMgbWlycm9ycyB0aGUgcHVibGljIGNvbnRyYWN0IG9mXG4gKiBgd2l0aEVudGl0aWVzKClgOlxuICogLSBgaWRzYDogZGVyaXZlZCBsaXN0IG9mIGVudGl0eSBpZHNcbiAqIC0gYGVudGl0eU1hcGA6IG1hcCBvZiBpZCAtPiBlbnRpdHlcbiAqIC0gYGVudGl0aWVzYDogcHJvamVjdGlvbiBvZiBgaWRzYCB0aHJvdWdoIGBlbnRpdHlNYXBgXG4gKlxuICogSW1wbGVtZW50YXRpb24gZGV0YWlsczpcbiAqIC0gVXNlcyBgd2l0aExpbmtlZFN0YXRlYCArIGBsaW5rZWRTaWduYWxgIGZvciBgaWRzYCBhbmQgYGVudGl0eU1hcGAgc28gdGhleSBhcmVcbiAqICAgd3JpdGFibGUgc3RhdGUgc2lnbmFscyBpbiB0aGUgc3RvcmUgKHVwZGF0ZXJzIGxpa2UgYGFkZEVudGl0eWAgY2FuIG11dGF0ZSB0aGVtKS5cbiAqIC0gYGVudGl0aWVzYCBpcyBhIHB1cmUgYGNvbXB1dGVkYCBkZXJpdmVkIGZyb20gYGlkc2AgYW5kIGBlbnRpdHlNYXBgLCBtYXRjaGluZ1xuICogICB0aGUgcGF0dGVybiBpbiBgd2l0aEVudGl0aWVzYCB3aGVyZSBgZW50aXRpZXNgIGlzIGNvbXB1dGVkIGZyb20gdGhlIHR3byBiYXNlcy5cbiAqXG4gKiBXaHkgbm90IGB3YXRjaFN0YXRlYCBvciBgZWZmZWN0YD9cbiAqIC0gYHdhdGNoU3RhdGVgIHdvdWxkIGZpcmUgZm9yIGFueSBzdGF0ZSBjaGFuZ2UgaW4gdGhlIHN0b3JlLCBub3QganVzdCBjaGFuZ2VzXG4gKiAgIHRvIHRoZSB1bmRlcmx5aW5nIHJlc291cmNlIHZhbHVlLiBUaGF0IHdvdWxkIGNhdXNlIHVubmVjZXNzYXJ5IHJlY29tcHV0YXRpb25cbiAqICAgYW5kIG1ha2UgaXQgaGFyZGVyIHRvIHJlYXNvbiBhYm91dCB1cGRhdGVzLlxuICogLSBgZWZmZWN0YCB3b3VsZCBpbnRyb2R1Y2Ugc2lkZS1lZmZlY3RzIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudCBmb3Igc3luY2luZyxcbiAqICAgd2hpY2ggaXMgaGVhdmllciBhbmQgbm90IGFsaWduZWQgd2l0aCB0aGlzIGZlYXR1cmUncyBnb2FsIHRvIGJlIHB1cmVseVxuICogICBkZXJpdmVkIGZyb20gc2lnbmFscy4gVXNpbmcgbGlua2VkIHNpZ25hbHMga2VlcHMgdGhlIGRhdGEgZmxvdyBkZWNsYXJhdGl2ZVxuICogICBhbmQgYXZvaWRzIGltcGVyYXRpdmUgc3luY2luZyBjb2RlLlxuICovXG5mdW5jdGlvbiBjcmVhdGVFbnRpdHlEZXJpdmF0aW9uczxFIGV4dGVuZHMgeyBpZDogRW50aXR5SWQgfT4oXG4gIHNvdXJjZTogU2lnbmFsPHJlYWRvbmx5IEVbXSB8IEVbXSB8IHVuZGVmaW5lZD4sXG4pIHtcbiAgY29uc3QgaWRzTGlua2VkID0gbGlua2VkU2lnbmFsKHtcbiAgICBzb3VyY2UsXG4gICAgY29tcHV0YXRpb246IChsaXN0KSA9PiAobGlzdCA/PyBbXSkubWFwKChlKSA9PiBlLmlkKSxcbiAgfSk7XG5cbiAgY29uc3QgZW50aXR5TWFwTGlua2VkID0gbGlua2VkU2lnbmFsKHtcbiAgICBzb3VyY2UsXG4gICAgY29tcHV0YXRpb246IChsaXN0KSA9PiB7XG4gICAgICBjb25zdCBtYXAgPSB7fSBhcyBSZWNvcmQ8RW50aXR5SWQsIEU+O1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGxpc3QgPz8gW10pIHtcbiAgICAgICAgbWFwW2l0ZW0uaWRdID0gaXRlbSBhcyBFO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1hcDtcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCBlbnRpdGllc1NpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBpZHMgPSBpZHNMaW5rZWQoKTtcbiAgICBjb25zdCBtYXAgPSBlbnRpdHlNYXBMaW5rZWQoKTtcbiAgICByZXR1cm4gaWRzLm1hcCgoaWQpID0+IG1hcFtpZF0pIGFzIHJlYWRvbmx5IEVbXTtcbiAgfSk7XG5cbiAgcmV0dXJuIHsgaWRzTGlua2VkLCBlbnRpdHlNYXBMaW5rZWQsIGVudGl0aWVzU2lnbmFsIH07XG59XG4iXX0=","import { signalStoreFeature, withComputed, withMethods, } from '@ngrx/signals';\nexport function withMutations(mutationsFactory) {\n return (store) => {\n // TODO: Is this the correct usage?\n const source = store;\n const mutations = mutationsFactory({\n ...source,\n ...store.props,\n ...store.methods,\n ...store.stateSignals,\n });\n const feature = createMutationsFeature(mutations);\n return feature(store);\n };\n}\nfunction createMutationsFeature(mutations) {\n const keys = Object.keys(mutations);\n const feature = signalStoreFeature(withMethods(() => keys.reduce((acc, key) => ({\n ...acc,\n [key]: async (params) => {\n const mutation = mutations[key];\n if (!mutation) {\n throw new Error(`Mutation ${key} not found`);\n }\n const result = await mutation(params);\n return result;\n },\n }), {})), withComputed(() => keys.reduce((acc, key) => ({\n ...acc,\n [`${key}IsPending`]: mutations[key].isPending,\n [`${key}Status`]: mutations[key].status,\n [`${key}Error`]: mutations[key].error,\n }), {})));\n return feature;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1tdXRhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL3dpdGgtbXV0YXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFFTCxrQkFBa0IsRUFLbEIsWUFBWSxFQUNaLFdBQVcsR0FFWixNQUFNLGVBQWUsQ0FBQztBQTRFdkIsTUFBTSxVQUFVLGFBQWEsQ0FJM0IsZ0JBRVc7SUFFWCxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDZixtQ0FBbUM7UUFDbkMsTUFBTSxNQUFNLEdBQUcsS0FBK0MsQ0FBQztRQUMvRCxNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQztZQUNqQyxHQUFHLE1BQU07WUFDVCxHQUFHLEtBQUssQ0FBQyxLQUFLO1lBQ2QsR0FBRyxLQUFLLENBQUMsT0FBTztZQUNoQixHQUFHLEtBQUssQ0FBQyxZQUFZO1NBQ3RCLENBQUMsQ0FBQztRQUVILE1BQU0sT0FBTyxHQUFHLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUM3QixTQUFpQjtJQUVqQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRXBDLE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUNoQyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FDVCxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDYixHQUFHLEdBQUc7UUFDTixDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFhLEVBQUUsRUFBRTtZQUM3QixNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQyxDQUFDO1lBQy9DLENBQUM7WUFDRCxNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0QyxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO0tBQ0YsQ0FBQyxFQUNGLEVBQXVCLENBQ3hCLENBQ0YsRUFDRCxZQUFZLENBQUMsR0FBRyxFQUFFLENBQ2hCLElBQUksQ0FBQyxNQUFNLENBQ1QsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2IsR0FBRyxHQUFHO1FBQ04sQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVM7UUFDN0MsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU07UUFDdkMsQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUs7S0FDdEMsQ0FBQyxFQUNGLEVBQWdDLENBQ2pDLENBQ0YsQ0FDRixDQUFDO0lBQ0YsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRW1wdHlGZWF0dXJlUmVzdWx0LFxuICBzaWduYWxTdG9yZUZlYXR1cmUsXG4gIFNpZ25hbFN0b3JlRmVhdHVyZSxcbiAgU2lnbmFsU3RvcmVGZWF0dXJlUmVzdWx0LFxuICBTdGF0ZVNpZ25hbHMsXG4gIFN0YXRlU291cmNlLFxuICB3aXRoQ29tcHV0ZWQsXG4gIHdpdGhNZXRob2RzLFxuICBXcml0YWJsZVN0YXRlU291cmNlLFxufSBmcm9tICdAbmdyeC9zaWduYWxzJztcbmltcG9ydCB7IE11dGF0aW9uLCBNdXRhdGlvblN0YXR1cyB9IGZyb20gJy4vbXV0YXRpb24vbXV0YXRpb24nO1xuXG4vLyBOYW1lZE11dGF0aW9uTWV0aG9kcyBiZWxvdyB3aWxsIGluZmVyIHRoZSBhY3R1YWwgcGFyYW1ldGVyIGFuZCByZXR1cm4gdHlwZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG50eXBlIE11dGF0aW9uc0RpY3Rpb25hcnkgPSBSZWNvcmQ8c3RyaW5nLCBNdXRhdGlvbjxhbnksIGFueT4+O1xuXG4vLyB3aXRoTWV0aG9kcyB1c2VzIFJlY29yZDxzdHJpbmcsIEZ1bmN0aW9uPiBpbnRlcm5hbGx5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1mdW5jdGlvbi10eXBlXG5leHBvcnQgdHlwZSBNZXRob2RzRGljdGlvbmFyeSA9IFJlY29yZDxzdHJpbmcsIEZ1bmN0aW9uPjtcblxudHlwZSBOYW1lZE11dGF0aW9uUHJvcHM8VCBleHRlbmRzIE11dGF0aW9uc0RpY3Rpb25hcnk+ID0ge1xuICBbUHJvcCBpbiBrZXlvZiBUIGFzIGAke1Byb3AgJiBzdHJpbmd9SXNQZW5kaW5nYF06IFNpZ25hbDxib29sZWFuPjtcbn0gJiB7XG4gIFtQcm9wIGluIGtleW9mIFQgYXMgYCR7UHJvcCAmIHN0cmluZ31TdGF0dXNgXTogU2lnbmFsPE11dGF0aW9uU3RhdHVzPjtcbn0gJiB7XG4gIFtQcm9wIGluIGtleW9mIFQgYXMgYCR7UHJvcCAmIHN0cmluZ31FcnJvcmBdOiBTaWduYWw8RXJyb3IgfCB1bmRlZmluZWQ+O1xufTtcblxudHlwZSBOYW1lZE11dGF0aW9uTWV0aG9kczxUIGV4dGVuZHMgTXV0YXRpb25zRGljdGlvbmFyeT4gPSB7XG4gIFtQcm9wIGluIGtleW9mIFQgYXMgYCR7UHJvcCAmIHN0cmluZ31gXTogVFtQcm9wXSBleHRlbmRzIE11dGF0aW9uPFxuICAgIGluZmVyIFAsXG4gICAgaW5mZXIgUlxuICA+XG4gICAgPyBNdXRhdGlvbjxQLCBSPlxuICAgIDogbmV2ZXI7XG59O1xuXG5leHBvcnQgdHlwZSBOYW1lZE11dGF0aW9uUmVzdWx0PFQgZXh0ZW5kcyBNdXRhdGlvbnNEaWN0aW9uYXJ5PiA9XG4gIEVtcHR5RmVhdHVyZVJlc3VsdCAmIHtcbiAgICBwcm9wczogTmFtZWRNdXRhdGlvblByb3BzPFQ+O1xuICAgIG1ldGhvZHM6IE5hbWVkTXV0YXRpb25NZXRob2RzPFQ+O1xuICB9O1xuXG4vKipcbiAqIEFkZHMgbXV0YXRpb24gbWV0aG9kcyB0byB0aGUgc3RvcmUuIEFsc28sIGZvciBlYWNoIG11dGF0aW9uIG1ldGhvZCwgc2V2ZXJhbFxuICogU2lnbmFscyBhcmUgYWRkZWQgaW5mb3JtaW5nIGFib3V0IHRoZSBtdXRhdGlvbidzIHN0YXR1cyBhbmQgZXJyb3JzLlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGV4cG9ydCB0eXBlIFBhcmFtcyA9IHtcbiAqICAgdmFsdWU6IG51bWJlcjtcbiAqIH07XG4gKlxuICogZXhwb3J0IGNvbnN0IENvdW50ZXJTdG9yZSA9IHNpZ25hbFN0b3JlKFxuICogICB7IHByb3ZpZGVkSW46ICdyb290JyB9LFxuICogICB3aXRoU3RhdGUoeyBjb3VudGVyOiAwIH0pLFxuICogICB3aXRoTXV0YXRpb25zKChzdG9yZSkgPT4gKHtcbiAqICAgICBpbmNyZW1lbnQ6IHJ4TXV0YXRpb24oeyAuLi4gfSksXG4gKiAgIH0pKSxcbiAqICk7XG4gKiBgYGBcbiAqXG4gKiBUaGVyZSBhcmUgc2V2ZXJhbCB0eXBlcyBvZiBtdXRhdGlvbnMuIEluIHRoZSBleGFtcGxlIHNob3duLCBhbiB7QGxpbmsgbW9kdWxlOnJ4LW11dGF0aW9uLnJ4TXV0YXRpb24gfCByeE11dGF0aW9ufVxuICogbGV2ZXJhZ2luZyBSeEpTIGlzIHVzZWRcbiAqXG4gKiBGb3IgdGhlIGRlZmluZWQgYGluY3JlbWVudGAgbXV0YXRpb24sIHNldmVyYWwgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIGFuZFxuICogbWV0aG9kcyBhcmUgYWRkZWQgdG8gdGhlIHN0b3JlOlxuICogLSBgaW5jcmVtZW50KHBhcmFtczogUGFyYW1zKTogUHJvbWlzZTxNdXRhdGlvblJlc3VsdDxudW1iZXI+PmA6IFRoZSBtdXRhdGlvbiBtZXRob2QuXG4gKiAtIGBpbmNyZW1lbnRJc1BlbmRpbmdgOiBBIHNpZ25hbCBpbmRpY2F0aW5nIGlmIHRoZSBtdXRhdGlvbiBpcyBpbiBwcm9ncmVzcy5cbiAqIC0gYGluY3JlbWVudFN0YXR1c2A6IEEgc2lnbmFsIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIG11dGF0aW9uLlxuICogLSBgaW5jcmVtZW50RXJyb3JgOiBBIHNpZ25hbCBjb250YWluaW5nIGFueSBlcnJvciB0aGF0IG9jY3VycmVkIGR1cmluZyB0aGUgbXV0YXRpb24uXG4gKlxuICogQHBhcmFtIG11dGF0aW9uc0ZhY3RvcnlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhNdXRhdGlvbnM8XG4gIElucHV0IGV4dGVuZHMgU2lnbmFsU3RvcmVGZWF0dXJlUmVzdWx0LFxuICBSZXN1bHQgZXh0ZW5kcyBNdXRhdGlvbnNEaWN0aW9uYXJ5LFxuPihcbiAgbXV0YXRpb25zRmFjdG9yeTogKFxuICAgIHN0b3JlOiBJbnB1dFsncHJvcHMnXSAmXG4gICAgICBJbnB1dFsnbWV0aG9kcyddICZcbiAgICAgIFdyaXRhYmxlU3RhdGVTb3VyY2U8SW5wdXRbJ3N0YXRlJ10+ICZcbiAgICAgIFN0YXRlU2lnbmFsczxJbnB1dFsnc3RhdGUnXT4sXG4gICkgPT4gUmVzdWx0LFxuKTogU2lnbmFsU3RvcmVGZWF0dXJlPElucHV0LCBOYW1lZE11dGF0aW9uUmVzdWx0PFJlc3VsdD4+O1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aE11dGF0aW9uczxcbiAgSW5wdXQgZXh0ZW5kcyBTaWduYWxTdG9yZUZlYXR1cmVSZXN1bHQsXG4gIFJlc3VsdCBleHRlbmRzIE11dGF0aW9uc0RpY3Rpb25hcnksXG4+KFxuICBtdXRhdGlvbnNGYWN0b3J5OiAoXG4gICAgc3RvcmU6IElucHV0Wydwcm9wcyddICYgSW5wdXRbJ21ldGhvZHMnXSAmIFN0YXRlU291cmNlPElucHV0WydzdGF0ZSddPixcbiAgKSA9PiBSZXN1bHQsXG4pOiBTaWduYWxTdG9yZUZlYXR1cmU8SW5wdXQ+IHtcbiAgcmV0dXJuIChzdG9yZSkgPT4ge1xuICAgIC8vIFRPRE86IElzIHRoaXMgdGhlIGNvcnJlY3QgdXNhZ2U/XG4gICAgY29uc3Qgc291cmNlID0gc3RvcmUgYXMgU3RhdGVTb3VyY2U8dHlwZW9mIHN0b3JlLnN0YXRlU2lnbmFscz47XG4gICAgY29uc3QgbXV0YXRpb25zID0gbXV0YXRpb25zRmFjdG9yeSh7XG4gICAgICAuLi5zb3VyY2UsXG4gICAgICAuLi5zdG9yZS5wcm9wcyxcbiAgICAgIC4uLnN0b3JlLm1ldGhvZHMsXG4gICAgICAuLi5zdG9yZS5zdGF0ZVNpZ25hbHMsXG4gICAgfSk7XG5cbiAgICBjb25zdCBmZWF0dXJlID0gY3JlYXRlTXV0YXRpb25zRmVhdHVyZShtdXRhdGlvbnMpO1xuICAgIHJldHVybiBmZWF0dXJlKHN0b3JlKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTXV0YXRpb25zRmVhdHVyZTxSZXN1bHQgZXh0ZW5kcyBNdXRhdGlvbnNEaWN0aW9uYXJ5PihcbiAgbXV0YXRpb25zOiBSZXN1bHQsXG4pIHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG11dGF0aW9ucyk7XG5cbiAgY29uc3QgZmVhdHVyZSA9IHNpZ25hbFN0b3JlRmVhdHVyZShcbiAgICB3aXRoTWV0aG9kcygoKSA9PlxuICAgICAga2V5cy5yZWR1Y2UoXG4gICAgICAgIChhY2MsIGtleSkgPT4gKHtcbiAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgW2tleV06IGFzeW5jIChwYXJhbXM6IG5ldmVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtdXRhdGlvbiA9IG11dGF0aW9uc1trZXldO1xuICAgICAgICAgICAgaWYgKCFtdXRhdGlvbikge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE11dGF0aW9uICR7a2V5fSBub3QgZm91bmRgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG11dGF0aW9uKHBhcmFtcyk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgICB7fSBhcyBNZXRob2RzRGljdGlvbmFyeSxcbiAgICAgICksXG4gICAgKSxcbiAgICB3aXRoQ29tcHV0ZWQoKCkgPT5cbiAgICAgIGtleXMucmVkdWNlKFxuICAgICAgICAoYWNjLCBrZXkpID0+ICh7XG4gICAgICAgICAgLi4uYWNjLFxuICAgICAgICAgIFtgJHtrZXl9SXNQZW5kaW5nYF06IG11dGF0aW9uc1trZXldLmlzUGVuZGluZyxcbiAgICAgICAgICBbYCR7a2V5fVN0YXR1c2BdOiBtdXRhdGlvbnNba2V5XS5zdGF0dXMsXG4gICAgICAgICAgW2Ake2tleX1FcnJvcmBdOiBtdXRhdGlvbnNba2V5XS5lcnJvcixcbiAgICAgICAgfSksXG4gICAgICAgIHt9IGFzIE5hbWVkTXV0YXRpb25Qcm9wczxSZXN1bHQ+LFxuICAgICAgKSxcbiAgICApLFxuICApO1xuICByZXR1cm4gZmVhdHVyZTtcbn1cbiJdfQ==","import { HttpClient, HttpEventType, HttpResponse, } from '@angular/common/http';\nimport { inject, signal } from '@angular/core';\nimport { defer, filter, map, tap } from 'rxjs';\nimport { rxMutation } from './rx-mutation';\n/**\n * Creates an HTTP mutation.\n *\n * ```typescript\n * export type Params = {\n * value: number;\n * };\n *\n * export type CounterResponse = {\n * // httpbin.org echos the request using the\n * // json property\n * json: { counter: number };\n * };\n *\n * const simpleSaveUser = httpMutation({\n * request: (userData: AddUserEntry) => ({\n * url: 'api/users',\n * body: userData,\n * }),\n * parse: Boolean,\n * })\n *\n * const saveUser = httpMutation({\n * request: (p: Params) => ({\n * url: `https://httpbin.org/post`,\n * method: 'POST',\n * body: { counter: p.value },\n * headers: { 'Content-Type': 'application/json' },\n * }),\n * onSuccess: (response: CounterResponse) => {\n * console.log('Counter sent to server:', response);\n * },\n * onError: (error) => {\n * console.error('Failed to send counter:', error);\n * },\n * });\n *\n * const result = await this.saveUser({ value: 17 });\n * if (result.status === 'success') {\n * console.log('Successfully saved to server:', result.value);\n * }\n * else if (result.status === 'error') {\n * console.log('Failed to save:', result.error);\n * }\n * else {\n * console.log('Operation aborted');\n * }\n * ```\n *\n * @param options The options for the HTTP mutation.\n * @returns The HTTP mutation.\n */\nexport function httpMutation(optionsOrRequest) {\n const httpClient = inject(HttpClient);\n const options = typeof optionsOrRequest === 'function'\n ? { request: optionsOrRequest }\n : optionsOrRequest;\n const parse = options.parse ?? ((raw) => raw);\n const uploadProgress = signal(undefined, ...(ngDevMode ? [{ debugName: \"uploadProgress\" }] : []));\n const downloadProgress = signal(undefined, ...(ngDevMode ? [{ debugName: \"downloadProgress\" }] : []));\n const headers = signal(undefined, ...(ngDevMode ? [{ debugName: \"headers\" }] : []));\n const statusCode = signal(undefined, ...(ngDevMode ? [{ debugName: \"statusCode\" }] : []));\n const mutation = rxMutation({\n ...options,\n operation: (param) => {\n const httpRequest = options.request(param);\n return defer(() => {\n uploadProgress.set(undefined);\n downloadProgress.set(undefined);\n headers.set(undefined);\n statusCode.set(undefined);\n return httpClient\n .request(httpRequest.method, httpRequest.url, {\n ...httpRequest,\n observe: 'events',\n responseType: 'json',\n })\n .pipe(tap((response) => {\n if (response.type === HttpEventType.UploadProgress) {\n uploadProgress.set(response);\n }\n else if (response.type === HttpEventType.DownloadProgress) {\n downloadProgress.set(response);\n }\n }), filter((event) => event instanceof HttpResponse), tap((response) => {\n headers.set(response.headers);\n statusCode.set(response.status.toString());\n }), map((event) => parse(event.body)));\n });\n },\n });\n mutation.uploadProgress = uploadProgress;\n mutation.downloadProgress = downloadProgress;\n mutation.statusCode = statusCode;\n mutation.headers = headers;\n return mutation;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1tdXRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10b29sa2l0L3NyYy9saWIvbXV0YXRpb24vaHR0cC1tdXRhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUVWLGFBQWEsRUFJYixZQUFZLEdBQ2IsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsTUFBTSxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9DLE9BQU8sRUFBRSxVQUFVLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBOEM5RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbURHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FDMUIsZ0JBRStDO0lBRS9DLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUV0QyxNQUFNLE9BQU8sR0FDWCxPQUFPLGdCQUFnQixLQUFLLFVBQVU7UUFDcEMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFO1FBQy9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztJQUV2QixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFZLEVBQUUsRUFBRSxDQUFDLEdBQWEsQ0FBQyxDQUFDO0lBRWpFLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBZ0MsU0FBUywwREFBQyxDQUFDO0lBQ3hFLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFnQyxTQUFTLDREQUFDLENBQUM7SUFDMUUsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUEwQixTQUFTLG1EQUFDLENBQUM7SUFDM0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFxQixTQUFTLHNEQUFDLENBQUM7SUFFekQsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDO1FBQzFCLEdBQUcsT0FBTztRQUNWLFNBQVMsRUFBRSxDQUFDLEtBQWdCLEVBQUUsRUFBRTtZQUM5QixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTNDLE9BQU8sS0FBSyxDQUFDLEdBQUcsRUFBRTtnQkFDaEIsY0FBYyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDOUIsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNoQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN2QixVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUUxQixPQUFPLFVBQVU7cUJBQ2QsT0FBTyxDQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLEdBQUcsRUFBRTtvQkFDcEQsR0FBRyxXQUFXO29CQUNkLE9BQU8sRUFBRSxRQUFRO29CQUNqQixZQUFZLEVBQUUsTUFBTTtpQkFDckIsQ0FBQztxQkFDRCxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7b0JBQ2YsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFDbkQsY0FBYyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDL0IsQ0FBQzt5QkFBTSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLGdCQUFnQixFQUFFLENBQUM7d0JBQzVELGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDakMsQ0FBQztnQkFDSCxDQUFDLENBQUMsRUFDRixNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssWUFBWSxZQUFZLENBQUMsRUFDaEQsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7b0JBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQzlCLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUM3QyxDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDbEMsQ0FBQztZQUNOLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUNGLENBQW9DLENBQUM7SUFFdEMsUUFBUSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7SUFDekMsUUFBUSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO0lBQzdDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQ2pDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBRTNCLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBIdHRwQ2xpZW50LFxuICBIdHRwQ29udGV4dCxcbiAgSHR0cEV2ZW50VHlwZSxcbiAgSHR0cEhlYWRlcnMsXG4gIEh0dHBQYXJhbXMsXG4gIEh0dHBQcm9ncmVzc0V2ZW50LFxuICBIdHRwUmVzcG9uc2UsXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGluamVjdCwgU2lnbmFsLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRlZmVyLCBmaWx0ZXIsIG1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNdXRhdGlvbiB9IGZyb20gJy4vbXV0YXRpb24nO1xuaW1wb3J0IHsgcnhNdXRhdGlvbiwgUnhNdXRhdGlvbk9wdGlvbnMgfSBmcm9tICcuL3J4LW11dGF0aW9uJztcblxuLy8gVGhlIEh0dHBDbGllbnQgZGVmaW5lcyB0aGVzZSB0eXBlcyBhcyBwYXJ0IG9mIHRoZSBtZXRob2Qgc2lnbmF0dXJlIGFuZFxuLy8gbm90IGFzIGEgbmFtZWQgdHlwZVxuZXhwb3J0IHR5cGUgSHR0cE11dGF0aW9uUmVxdWVzdCA9IHtcbiAgdXJsOiBzdHJpbmc7XG4gIG1ldGhvZDogc3RyaW5nO1xuICBib2R5PzogdW5rbm93bjtcbiAgaGVhZGVycz86IEh0dHBIZWFkZXJzIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+O1xuICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbjtcbiAgcGFyYW1zPzpcbiAgICB8IEh0dHBQYXJhbXNcbiAgICB8IFJlY29yZDxcbiAgICAgICAgc3RyaW5nLFxuICAgICAgICBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgUmVhZG9ubHlBcnJheTxzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPlxuICAgICAgPjtcbiAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbiAgY3JlZGVudGlhbHM/OiBSZXF1ZXN0Q3JlZGVudGlhbHM7XG4gIGtlZXBhbGl2ZT86IGJvb2xlYW47XG4gIHByaW9yaXR5PzogUmVxdWVzdFByaW9yaXR5O1xuICBjYWNoZT86IFJlcXVlc3RDYWNoZTtcbiAgbW9kZT86IFJlcXVlc3RNb2RlO1xuICByZWRpcmVjdD86IFJlcXVlc3RSZWRpcmVjdDtcbiAgdHJhbnNmZXJDYWNoZT86XG4gICAgfCB7XG4gICAgICAgIGluY2x1ZGVIZWFkZXJzPzogc3RyaW5nW107XG4gICAgICB9XG4gICAgfCBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgSHR0cE11dGF0aW9uT3B0aW9uczxQYXJhbWV0ZXIsIFJlc3VsdD4gPSBPbWl0PFxuICBSeE11dGF0aW9uT3B0aW9uczxQYXJhbWV0ZXIsIE5vSW5mZXI8UmVzdWx0Pj4sXG4gICdvcGVyYXRpb24nXG4+ICYge1xuICByZXF1ZXN0OiAocGFyYW06IFBhcmFtZXRlcikgPT4gSHR0cE11dGF0aW9uUmVxdWVzdDtcbiAgcGFyc2U/OiAocmVzcG9uc2U6IHVua25vd24pID0+IFJlc3VsdDtcbn07XG5cbmV4cG9ydCB0eXBlIEh0dHBNdXRhdGlvbjxQYXJhbWV0ZXIsIFJlc3VsdD4gPSBNdXRhdGlvbjxQYXJhbWV0ZXIsIFJlc3VsdD4gJiB7XG4gIHVwbG9hZFByb2dyZXNzOiBTaWduYWw8SHR0cFByb2dyZXNzRXZlbnQgfCB1bmRlZmluZWQ+O1xuICBkb3dubG9hZFByb2dyZXNzOiBTaWduYWw8SHR0cFByb2dyZXNzRXZlbnQgfCB1bmRlZmluZWQ+O1xuICBoZWFkZXJzOiBTaWduYWw8SHR0cEhlYWRlcnMgfCB1bmRlZmluZWQ+O1xuICBzdGF0dXNDb2RlOiBTaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPjtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBIVFRQIG11dGF0aW9uLlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGV4cG9ydCB0eXBlIFBhcmFtcyA9IHtcbiAqICAgdmFsdWU6IG51bWJlcjtcbiAqIH07XG4gKlxuICogZXhwb3J0IHR5cGUgQ291bnRlclJlc3BvbnNlID0ge1xuICogICAvLyBodHRwYmluLm9yZyBlY2hvcyB0aGUgcmVxdWVzdCB1c2luZyB0aGVcbiAqICAgLy8ganNvbiBwcm9wZXJ0eVxuICogICBqc29uOiB7IGNvdW50ZXI6IG51bWJlciB9O1xuICogfTtcbiAqXG4gKiBjb25zdCBzaW1wbGVTYXZlVXNlciA9IGh0dHBNdXRhdGlvbih7XG4gKiAgIHJlcXVlc3Q6ICh1c2VyRGF0YTogQWRkVXNlckVudHJ5KSA9PiAoe1xuICogICAgIHVybDogJ2FwaS91c2VycycsXG4gKiAgICAgYm9keTogdXNlckRhdGEsXG4gKiAgIH0pLFxuICogICBwYXJzZTogQm9vbGVhbixcbiAqIH0pXG4gKlxuICogY29uc3Qgc2F2ZVVzZXIgPSBodHRwTXV0YXRpb24oe1xuICogICByZXF1ZXN0OiAocDogUGFyYW1zKSA9PiAoe1xuICogICAgIHVybDogYGh0dHBzOi8vaHR0cGJpbi5vcmcvcG9zdGAsXG4gKiAgICAgbWV0aG9kOiAnUE9TVCcsXG4gKiAgICAgYm9keTogeyBjb3VudGVyOiBwLnZhbHVlIH0sXG4gKiAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gKiAgIH0pLFxuICogICBvblN1Y2Nlc3M6IChyZXNwb25zZTogQ291bnRlclJlc3BvbnNlKSA9PiB7XG4gKiAgICAgY29uc29sZS5sb2coJ0NvdW50ZXIgc2VudCB0byBzZXJ2ZXI6JywgcmVzcG9uc2UpO1xuICogICB9LFxuICogICBvbkVycm9yOiAoZXJyb3IpID0+IHtcbiAqICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gc2VuZCBjb3VudGVyOicsIGVycm9yKTtcbiAqICAgfSxcbiAqIH0pO1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc2F2ZVVzZXIoeyB2YWx1ZTogMTcgfSk7XG4gKiBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnKSB7XG4gKiAgIGNvbnNvbGUubG9nKCdTdWNjZXNzZnVsbHkgc2F2ZWQgdG8gc2VydmVyOicsIHJlc3VsdC52YWx1ZSk7XG4gKiB9XG4gKiBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSAnZXJyb3InKSB7XG4gKiAgIGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gc2F2ZTonLCByZXN1bHQuZXJyb3IpO1xuICogfVxuICogZWxzZSB7XG4gKiAgIGNvbnNvbGUubG9nKCdPcGVyYXRpb24gYWJvcnRlZCcpO1xuICogfVxuICogYGBgXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIHRoZSBIVFRQIG11dGF0aW9uLlxuICogQHJldHVybnMgVGhlIEhUVFAgbXV0YXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBodHRwTXV0YXRpb248UGFyYW1ldGVyLCBSZXN1bHQ+KFxuICBvcHRpb25zT3JSZXF1ZXN0OlxuICAgIHwgSHR0cE11dGF0aW9uT3B0aW9uczxQYXJhbWV0ZXIsIFJlc3VsdD5cbiAgICB8ICgocGFyYW06IFBhcmFtZXRlcikgPT4gSHR0cE11dGF0aW9uUmVxdWVzdCksXG4pOiBIdHRwTXV0YXRpb248UGFyYW1ldGVyLCBSZXN1bHQ+IHtcbiAgY29uc3QgaHR0cENsaWVudCA9IGluamVjdChIdHRwQ2xpZW50KTtcblxuICBjb25zdCBvcHRpb25zID1cbiAgICB0eXBlb2Ygb3B0aW9uc09yUmVxdWVzdCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyB7IHJlcXVlc3Q6IG9wdGlvbnNPclJlcXVlc3QgfVxuICAgICAgOiBvcHRpb25zT3JSZXF1ZXN0O1xuXG4gIGNvbnN0IHBhcnNlID0gb3B0aW9ucy5wYXJzZSA/PyAoKHJhdzogdW5rbm93bikgPT4gcmF3IGFzIFJlc3VsdCk7XG5cbiAgY29uc3QgdXBsb2FkUHJvZ3Jlc3MgPSBzaWduYWw8SHR0cFByb2dyZXNzRXZlbnQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIGNvbnN0IGRvd25sb2FkUHJvZ3Jlc3MgPSBzaWduYWw8SHR0cFByb2dyZXNzRXZlbnQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIGNvbnN0IGhlYWRlcnMgPSBzaWduYWw8SHR0cEhlYWRlcnMgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIGNvbnN0IHN0YXR1c0NvZGUgPSBzaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIGNvbnN0IG11dGF0aW9uID0gcnhNdXRhdGlvbih7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBvcGVyYXRpb246IChwYXJhbTogUGFyYW1ldGVyKSA9PiB7XG4gICAgICBjb25zdCBodHRwUmVxdWVzdCA9IG9wdGlvbnMucmVxdWVzdChwYXJhbSk7XG5cbiAgICAgIHJldHVybiBkZWZlcigoKSA9PiB7XG4gICAgICAgIHVwbG9hZFByb2dyZXNzLnNldCh1bmRlZmluZWQpO1xuICAgICAgICBkb3dubG9hZFByb2dyZXNzLnNldCh1bmRlZmluZWQpO1xuICAgICAgICBoZWFkZXJzLnNldCh1bmRlZmluZWQpO1xuICAgICAgICBzdGF0dXNDb2RlLnNldCh1bmRlZmluZWQpO1xuXG4gICAgICAgIHJldHVybiBodHRwQ2xpZW50XG4gICAgICAgICAgLnJlcXVlc3Q8UmVzdWx0PihodHRwUmVxdWVzdC5tZXRob2QsIGh0dHBSZXF1ZXN0LnVybCwge1xuICAgICAgICAgICAgLi4uaHR0cFJlcXVlc3QsXG4gICAgICAgICAgICBvYnNlcnZlOiAnZXZlbnRzJyxcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChyZXNwb25zZS50eXBlID09PSBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgdXBsb2FkUHJvZ3Jlc3Muc2V0KHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS50eXBlID09PSBIdHRwRXZlbnRUeXBlLkRvd25sb2FkUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICBkb3dubG9hZFByb2dyZXNzLnNldChyZXNwb25zZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZmlsdGVyKChldmVudCkgPT4gZXZlbnQgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UpLFxuICAgICAgICAgICAgdGFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICBoZWFkZXJzLnNldChyZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICAgICAgc3RhdHVzQ29kZS5zZXQocmVzcG9uc2Uuc3RhdHVzLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBtYXAoKGV2ZW50KSA9PiBwYXJzZShldmVudC5ib2R5KSksXG4gICAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gIH0pIGFzIEh0dHBNdXRhdGlvbjxQYXJhbWV0ZXIsIFJlc3VsdD47XG5cbiAgbXV0YXRpb24udXBsb2FkUHJvZ3Jlc3MgPSB1cGxvYWRQcm9ncmVzcztcbiAgbXV0YXRpb24uZG93bmxvYWRQcm9ncmVzcyA9IGRvd25sb2FkUHJvZ3Jlc3M7XG4gIG11dGF0aW9uLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlO1xuICBtdXRhdGlvbi5oZWFkZXJzID0gaGVhZGVycztcblxuICByZXR1cm4gbXV0YXRpb247XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1hcmNoaXRlY3RzLW5ncngtdG9vbGtpdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvbmdyeC10b29sa2l0L3NyYy9hbmd1bGFyLWFyY2hpdGVjdHMtbmdyeC10b29sa2l0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["originalPatchState","patchState","ngIsInDevMode"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"angular-architects-ngrx-toolkit.mjs","sources":["../../../../libs/ngrx-toolkit/src/lib/devtools/internal/devtools-feature.ts","../../../../libs/ngrx-toolkit/src/lib/devtools/features/with-disabled-name-indicies.ts","../../../../libs/ngrx-toolkit/src/lib/shared/throw-if-null.ts","../../../../libs/ngrx-toolkit/src/lib/devtools/internal/glitch-tracker.service.ts","../../../../libs/ngrx-toolkit/src/lib/devtools/features/with-glitch-tracking.ts","../../../../libs/ngrx-toolkit/src/lib/devtools/features/with-mapper.ts","../../../../libs/ngrx-toolkit/src/lib/devtools/provide-devtools-config.ts","../../../../libs/ngrx-toolkit/src/lib/devtools/internal/default-tracker.ts","../../../../libs/ngrx-toolkit/src/lib/devtools/internal/current-action-names.ts","../../../../libs/ngrx-toolkit/src/lib/devtools/internal/devtools-syncer.service.ts","../../../../libs/ngrx-toolkit/src/lib/devtools/with-devtools.ts","../../../../libs/ngrx-toolkit/src/lib/devtools/rename-devtools-name.ts","../../../../libs/ngrx-toolkit/src/lib/devtools/update-state.ts","../../../../libs/ngrx-toolkit/src/lib/devtools/with-dev-tools-stub.ts","../../../../libs/ngrx-toolkit/src/lib/devtools/with-tracked-reducer.ts","../../../../libs/ngrx-toolkit/src/lib/assertions/assertions.ts","../../../../libs/ngrx-toolkit/src/lib/with-redux.ts","../../../../libs/ngrx-toolkit/src/lib/undo-redo/clear-undo-redo.ts","../../../../libs/ngrx-toolkit/src/lib/with-call-state.ts","../../../../libs/ngrx-toolkit/src/lib/with-data-service.ts","../../../../libs/ngrx-toolkit/src/lib/undo-redo/with-undo-redo.ts","../../../../libs/ngrx-toolkit/src/lib/with-pagination.ts","../../../../libs/ngrx-toolkit/src/lib/with-reset.ts","../../../../libs/ngrx-toolkit/src/lib/immutable-state/deep-freeze.ts","../../../../libs/ngrx-toolkit/src/lib/immutable-state/is-dev-mode.ts","../../../../libs/ngrx-toolkit/src/lib/immutable-state/with-immutable-state.ts","../../../../libs/ngrx-toolkit/src/lib/storage-sync/internal/indexeddb.service.ts","../../../../libs/ngrx-toolkit/src/lib/storage-sync/internal/models.ts","../../../../libs/ngrx-toolkit/src/lib/storage-sync/features/with-indexed-db.ts","../../../../libs/ngrx-toolkit/src/lib/storage-sync/internal/local-storage.service.ts","../../../../libs/ngrx-toolkit/src/lib/storage-sync/internal/session-storage.service.ts","../../../../libs/ngrx-toolkit/src/lib/storage-sync/features/with-local-storage.ts","../../../../libs/ngrx-toolkit/src/lib/storage-sync/with-storage-sync.ts","../../../../libs/ngrx-toolkit/src/lib/with-conditional.ts","../../../../libs/ngrx-toolkit/src/lib/with-feature-factory.ts","../../../../libs/ngrx-toolkit/src/lib/flattening-operator.ts","../../../../libs/ngrx-toolkit/src/lib/mutation/rx-mutation.ts","../../../../libs/ngrx-toolkit/src/lib/with-resource.ts","../../../../libs/ngrx-toolkit/src/lib/with-entity-resources.ts","../../../../libs/ngrx-toolkit/src/lib/with-mutations.ts","../../../../libs/ngrx-toolkit/src/lib/mutation/http-mutation.ts","../../../../libs/ngrx-toolkit/src/angular-architects-ngrx-toolkit.ts"],"sourcesContent":["import { Tracker } from './models';\n\nexport const DEVTOOLS_FEATURE = Symbol('DEVTOOLS_FEATURE');\n\nexport type Mapper = (state: object) => object;\n\nexport type DevtoolsOptions = {\n name?: string; // defines the name of the feature\n indexNames?: boolean; // defines if names should be indexed.\n map?: Mapper; // defines a mapper for the state.\n tracker?: new () => Tracker; // defines a tracker for the state\n};\n\nexport type DevtoolsInnerOptions = {\n indexNames: boolean;\n map: Mapper;\n tracker: Tracker;\n};\n\n/**\n * A DevtoolsFeature adds or modifies the behavior of the\n * devtools extension.\n *\n * We use them (function calls) instead of a config object,\n * because of tree-shaking.\n */\nexport type DevtoolsFeature = {\n [DEVTOOLS_FEATURE]: true;\n} & Partial<DevtoolsOptions>;\n\nexport function createDevtoolsFeature(\n options: DevtoolsOptions,\n): DevtoolsFeature {\n return {\n [DEVTOOLS_FEATURE]: true,\n ...options,\n };\n}\n","import { createDevtoolsFeature } from '../internal/devtools-feature';\n\n/**\n * If multiple instances of the same SignalStore class\n * exist, their devtool names are indexed.\n *\n * For example:\n *\n * ```typescript\n * const Store = signalStore(\n * withDevtools('flights')\n * )\n *\n * const store1 = new Store(); // will show up as 'flights'\n * const store2 = new Store(); // will show up as 'flights-1'\n * ```\n *\n * With adding `withDisabledNameIndices` to the store:\n * ```typescript\n * const Store = signalStore(\n * withDevtools('flights', withDisabledNameIndices())\n * )\n *\n * const store1 = new Store(); // will show up as 'flights'\n * const store2 = new Store(); //💥 throws an error\n * ```\n *\n */\nexport function withDisabledNameIndices() {\n return createDevtoolsFeature({ indexNames: false });\n}\n","export function throwIfNull<T>(obj: T): NonNullable<T> {\n if (obj === null || obj === undefined) {\n throw new Error('');\n }\n\n return obj;\n}\n","import { Injectable } from '@angular/core';\nimport { getState, StateSource, watchState } from '@ngrx/signals';\nimport { throwIfNull } from '../../shared/throw-if-null';\nimport { Tracker, TrackerStores } from './models';\n\ntype Stores = Record<\n string,\n { destroyWatcher: () => void; store: StateSource<object> }\n>;\n\n/**\n * Internal Service used by {@link withGlitchTracking}. It does not rely\n * on `effect` as {@link DefaultTracker} does but uses the NgRx function\n * `watchState` to track all state changes.\n */\n@Injectable({ providedIn: 'root' })\nexport class GlitchTrackerService implements Tracker {\n #stores: Stores = {};\n #callback: ((changedState: Record<string, object>) => void) | undefined;\n\n get stores() {\n return Object.entries(this.#stores).reduce((acc, [id, { store }]) => {\n acc[id] = store;\n return acc;\n }, {} as TrackerStores);\n }\n\n onChange(callback: (changedState: Record<string, object>) => void): void {\n this.#callback = callback;\n }\n\n removeStore(id: string): void {\n this.#stores = Object.entries(this.#stores).reduce(\n (newStore, [storeId, value]) => {\n if (storeId !== id) {\n newStore[storeId] = value;\n } else {\n value.destroyWatcher();\n }\n return newStore;\n },\n {} as Stores,\n );\n\n throwIfNull(this.#callback)({});\n }\n\n track(id: string, store: StateSource<object>): void {\n const watcher = watchState(store, (state) => {\n throwIfNull(this.#callback)({ [id]: state });\n });\n\n this.#stores[id] = { destroyWatcher: watcher.destroy, store };\n }\n\n notifyRenamedStore(id: string): void {\n if (Object.keys(this.#stores).includes(id) && this.#callback) {\n this.#callback({ [id]: getState(this.#stores[id].store) });\n }\n }\n}\n","import { createDevtoolsFeature } from '../internal/devtools-feature';\nimport { GlitchTrackerService } from '../internal/glitch-tracker.service';\n\nexport const GLITCH_TRACKING_FEATURE = 'GLITCH_TRACKING_FEATURE';\n\n/**\n * It tracks all state changes of the State, including intermediary updates\n * that are typically suppressed by Angular's glitch-free mechanism.\n *\n * This feature is especially useful for debugging.\n *\n * Example:\n *\n * ```typescript\n * const Store = signalStore(\n * { providedIn: 'root' },\n * withState({ count: 0 }),\n * withDevtools('counter', withGlitchTracking()),\n * withMethods((store) => ({\n * increase: () =>\n * patchState(store, (value) => ({ count: value.count + 1 })),\n * }))\n * );\n *\n * // would show up in the DevTools with value 0\n * const store = inject(Store);\n *\n * store.increase(); // would show up in the DevTools with value 1\n * store.increase(); // would show up in the DevTools with value 2\n * store.increase(); // would show up in the DevTools with value 3\n * ```\n *\n * Without `withGlitchTracking`, the DevTools would only show the final value of 3.\n */\nexport function withGlitchTracking() {\n return createDevtoolsFeature({\n name: GLITCH_TRACKING_FEATURE,\n tracker: GlitchTrackerService,\n });\n}\n","import { createDevtoolsFeature, Mapper } from '../internal/devtools-feature';\n\n/**\n * Allows you to define a function to map the state.\n *\n * It is needed for huge states, that slows down the Devtools and where\n * you don't need to see the whole state or other reasons.\n *\n * Example:\n *\n * ```typescript\n * const initialState = {\n * id: 1,\n * email: 'john.list@host.com',\n * name: 'John List',\n * enteredPassword: ''\n * }\n *\n * const Store = signalStore(\n * withState(initialState),\n * withDevtools(\n * 'user',\n * withMapper(state => ({...state, enteredPassword: '***' }))\n * )\n * )\n * ```\n *\n * @param map function which maps the state\n */\nexport function withMapper<State extends object>(\n map: (state: State) => Record<string, unknown>,\n) {\n return createDevtoolsFeature({ map: map as Mapper });\n}\n","import { InjectionToken, ValueProvider } from '@angular/core';\n\n/**\n * Provides the configuration options for connecting to the Redux DevTools Extension.\n */\nexport function provideDevtoolsConfig(\n config: ReduxDevtoolsConfig,\n): ValueProvider {\n return {\n provide: REDUX_DEVTOOLS_CONFIG,\n useValue: config,\n };\n}\n\n/**\n * Injection token for the configuration options for connecting to the Redux DevTools Extension.\n */\nexport const REDUX_DEVTOOLS_CONFIG = new InjectionToken<ReduxDevtoolsConfig>(\n 'ReduxDevtoolsConfig',\n);\n\n/**\n * Options for connecting to the Redux DevTools Extension.\n * @example\n * const devToolsOptions: ReduxDevtoolsConfig = {\n * name: 'My App',\n * };\n */\nexport type ReduxDevtoolsConfig = {\n /** Optional name for the devtools instance. If empty, \"NgRx SignalStore\" will be used. */\n name?: string;\n};\n","import { effect, Injectable, signal } from '@angular/core';\nimport { getState, StateSource } from '@ngrx/signals';\nimport { Tracker, TrackerStores } from './models';\n\n@Injectable({ providedIn: 'root' })\nexport class DefaultTracker implements Tracker {\n readonly #stores = signal<TrackerStores>({});\n\n get stores(): TrackerStores {\n return this.#stores();\n }\n\n #trackCallback: undefined | ((changedState: Record<string, object>) => void);\n\n #trackingEffect = effect(() => {\n if (this.#trackCallback === undefined) {\n throw new Error('no callback function defined');\n }\n const stores = this.#stores();\n\n const fullState = Object.entries(stores).reduce(\n (acc, [id, store]) => {\n return { ...acc, [id]: getState(store) };\n },\n {} as Record<string, object>,\n );\n\n this.#trackCallback(fullState);\n });\n\n track(id: string, store: StateSource<object>): void {\n this.#stores.update((value) => ({\n ...value,\n [id]: store,\n }));\n }\n\n onChange(callback: (changedState: Record<string, object>) => void): void {\n this.#trackCallback = callback;\n }\n\n removeStore(id: string) {\n this.#stores.update((stores) =>\n Object.entries(stores).reduce((newStore, [storeId, state]) => {\n if (storeId !== id) {\n newStore[storeId] = state;\n }\n return newStore;\n }, {} as TrackerStores),\n );\n }\n\n notifyRenamedStore(id: string): void {\n if (this.#stores()[id]) {\n this.#stores.update((stores) => {\n return { ...stores };\n });\n }\n }\n}\n","export const currentActionNames = new Set<string>();\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n inject,\n Injectable,\n NgZone,\n OnDestroy,\n PLATFORM_ID,\n} from '@angular/core';\nimport { StateSource } from '@ngrx/signals';\nimport { REDUX_DEVTOOLS_CONFIG } from '../provide-devtools-config';\nimport { currentActionNames } from './current-action-names';\nimport { DevtoolsInnerOptions } from './devtools-feature';\nimport { Connection, StoreRegistry, Tracker } from './models';\n\nconst dummyConnection: Connection = {\n send: () => void true,\n};\n\n/**\n * A service provided by the root injector is\n * required because the synchronization runs\n * globally.\n *\n * The SignalStore could be provided in a component.\n * If the effect starts in the injection\n * context of the SignalStore, the complete sync\n * process would shut down once the component gets\n * destroyed.\n */\n@Injectable({ providedIn: 'root' })\nexport class DevtoolsSyncer implements OnDestroy {\n /**\n * Stores all SignalStores that are connected to the\n * DevTools along their options, names and id.\n */\n #stores: StoreRegistry = {};\n readonly #isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n readonly #trackers = [] as Tracker[];\n readonly #devtoolsConfig = {\n name: 'NgRx SignalStore',\n ...inject(REDUX_DEVTOOLS_CONFIG, { optional: true }),\n };\n\n /**\n * Maintains the current states of all stores to avoid conflicts\n * between glitch-free and glitched trackers when used simultaneously.\n *\n * The challenge lies in ensuring that glitched trackers do not\n * interfere with the synchronization process of glitch-free trackers.\n * Specifically, glitched trackers could cause the synchronization to\n * read the current state of stores managed by glitch-free trackers.\n *\n * Therefore, the synchronization process doesn't read the state from\n * each store, but relies on #currentState.\n *\n * Please note, that here the key is the name and not the id.\n */\n #currentState: Record<string, object> = {};\n #currentId = 1;\n\n readonly #connection: Connection = inject(NgZone).runOutsideAngular(() =>\n this.#isBrowser\n ? window.__REDUX_DEVTOOLS_EXTENSION__\n ? window.__REDUX_DEVTOOLS_EXTENSION__.connect(this.#devtoolsConfig)\n : dummyConnection\n : dummyConnection,\n );\n\n constructor() {\n if (!this.#isBrowser) {\n return;\n }\n }\n\n ngOnDestroy(): void {\n currentActionNames.clear();\n }\n\n syncToDevTools(changedStatePerId: Record<string, object>) {\n const mappedChangedStatePerName = Object.entries(changedStatePerId).reduce(\n (acc, [id, store]) => {\n const { options, name } = this.#stores[id];\n acc[name] = options.map(store);\n return acc;\n },\n {} as Record<string, object>,\n );\n this.#currentState = {\n ...this.#currentState,\n ...mappedChangedStatePerName,\n };\n\n const names = Array.from(currentActionNames);\n const type = names.length ? names.join(', ') : 'Store Update';\n currentActionNames.clear();\n\n this.#connection.send({ type }, this.#currentState);\n }\n\n getNextId() {\n return String(this.#currentId++);\n }\n\n /**\n * Consumer provides the id. That is because we can only start\n * tracking the store in the init hook.\n * Unfortunately, methods for renaming having the final id\n * need to be defined already before.\n * That's why `withDevtools` requests first the id and\n * then registers itself later.\n */\n addStore(\n id: string,\n name: string,\n store: StateSource<object>,\n options: DevtoolsInnerOptions,\n ) {\n let storeName = name;\n const names = Object.values(this.#stores).map((store) => store.name);\n\n if (names.includes(storeName)) {\n // const { options } = throwIfNull(\n // Object.values(this.#stores).find((store) => store.name === storeName)\n // );\n if (!options.indexNames) {\n throw new Error(`An instance of the store ${storeName} already exists. \\\nEnable automatic indexing via withDevTools('${storeName}', { indexNames: true }), or rename it upon instantiation.`);\n }\n }\n\n for (let i = 1; names.includes(storeName); i++) {\n storeName = `${name}-${i}`;\n }\n this.#stores[id] = { name: storeName, options };\n\n const tracker = options.tracker;\n if (!this.#trackers.includes(tracker)) {\n this.#trackers.push(tracker);\n }\n\n tracker.onChange((changedState) => this.syncToDevTools(changedState));\n tracker.track(id, store);\n }\n\n removeStore(id: string) {\n const name = this.#stores[id].name;\n this.#stores = Object.entries(this.#stores).reduce(\n (newStore, [storeId, value]) => {\n if (storeId !== id) {\n newStore[storeId] = value;\n }\n return newStore;\n },\n {} as StoreRegistry,\n );\n\n this.#currentState = Object.entries(this.#currentState).reduce(\n (newState, [storeName, state]) => {\n if (storeName !== name) {\n newState[storeName] = state;\n }\n return newState;\n },\n {} as Record<string, object>,\n );\n\n for (const tracker of this.#trackers) {\n tracker.removeStore(id);\n }\n }\n\n /**\n * Renames a store identified by its internal id. If the store has already\n * been removed (e.g. due to component destruction), this is a no-op.\n */\n renameStore(id: string, newName: string) {\n const storeEntry = this.#stores[id];\n if (!storeEntry) {\n return;\n }\n const oldName = storeEntry.name;\n\n if (oldName === newName) {\n return;\n }\n\n const otherStoreNames = Object.entries(this.#stores)\n .filter(([entryId]) => entryId !== id)\n .map(([, s]) => s.name);\n if (otherStoreNames.includes(newName)) {\n throw new Error(\n `NgRx Toolkit/DevTools: cannot rename from ${oldName} to ${newName}. ${newName} is already assigned to another SignalStore instance.`,\n );\n }\n\n this.#stores = Object.entries(this.#stores).reduce(\n (newStore, [entryId, value]) => {\n if (entryId === id) {\n newStore[entryId] = { ...value, name: newName };\n } else {\n newStore[entryId] = value;\n }\n return newStore;\n },\n {} as StoreRegistry,\n );\n\n // we don't rename in #currentState but wait for tracker to notify\n // us with a changed state that contains that name.\n this.#currentState = Object.entries(this.#currentState).reduce(\n (newState, [storeName, state]) => {\n if (storeName !== oldName) {\n newState[storeName] = state;\n }\n return newState;\n },\n {} as Record<string, object>,\n );\n\n this.#trackers.forEach((tracker) => tracker.notifyRenamedStore(id));\n }\n}\n","import { inject } from '@angular/core';\nimport {\n EmptyFeatureResult,\n SignalStoreFeature,\n signalStoreFeature,\n withHooks,\n withMethods,\n withProps,\n} from '@ngrx/signals';\nimport { DefaultTracker } from './internal/default-tracker';\nimport {\n DevtoolsFeature as DevtoolsFeatureInternal,\n DevtoolsInnerOptions,\n} from './internal/devtools-feature';\nimport { DevtoolsSyncer } from './internal/devtools-syncer.service';\nimport { ReduxDevtoolsExtension } from './internal/models';\n\n// Users requested that we export this type: https://github.com/angular-architects/ngrx-toolkit/issues/178\nexport type DevtoolsFeature = DevtoolsFeatureInternal;\n\ndeclare global {\n interface Window {\n __REDUX_DEVTOOLS_EXTENSION__: ReduxDevtoolsExtension | undefined;\n }\n}\n\nexport const renameDevtoolsMethodName = '___renameDevtoolsName';\nexport const uniqueDevtoolsId = '___uniqueDevtoolsId';\n// Used to declare the existence of the devtools extension\nexport const DEVTOOL_FEATURE_NAMES = Symbol('DEVTOOL_PROP');\n\n/**\n * Adds this store as a feature state to the Redux DevTools.\n *\n * By default, the action name is 'Store Update'. You can\n * change that via the {@link updateState} method, which has as second\n * parameter the action name.\n *\n * The standalone function {@link renameDevtoolsName} can rename\n * the store name.\n *\n * @param name name of the store as it should appear in the DevTools\n * @param features features to extend or modify the behavior of the Devtools\n */\nexport function withDevtools(name: string, ...features: DevtoolsFeature[]) {\n return signalStoreFeature(\n withMethods(() => {\n const syncer = inject(DevtoolsSyncer);\n\n const id = syncer.getNextId();\n\n // TODO: use withProps and symbols\n return {\n [renameDevtoolsMethodName]: (newName: string) => {\n syncer.renameStore(id, newName);\n },\n [uniqueDevtoolsId]: () => id,\n } as Record<string, (newName?: unknown) => unknown>;\n }),\n withProps(() => ({\n [DEVTOOL_FEATURE_NAMES]: features.filter(Boolean).map((f) => f.name),\n })),\n withHooks((store) => {\n const syncer = inject(DevtoolsSyncer);\n const id = String(store[uniqueDevtoolsId]());\n return {\n onInit() {\n const finalOptions: DevtoolsInnerOptions = {\n indexNames: !features.some((f) => f.indexNames === false),\n map: features.find((f) => f.map)?.map ?? ((state) => state),\n tracker: inject(\n features.find((f) => f.tracker)?.tracker || DefaultTracker,\n ),\n };\n\n syncer.addStore(id, name, store, finalOptions);\n },\n onDestroy() {\n syncer.removeStore(id);\n },\n };\n }),\n ) as SignalStoreFeature<\n EmptyFeatureResult,\n EmptyFeatureResult & { props: { [DEVTOOL_FEATURE_NAMES]: string[] } }\n >;\n}\n","import { StateSource } from '@ngrx/signals';\nimport { renameDevtoolsMethodName } from './with-devtools';\n\n/**\n * Renames the name of a store how it appears in the Devtools.\n * @param store instance of the SignalStore\n * @param newName new name for the Devtools\n */\nexport function renameDevtoolsName<State extends object>(\n store: StateSource<State>,\n newName: string,\n): void {\n const renameMethod = (store as Record<string, (newName: string) => void>)[\n renameDevtoolsMethodName\n ];\n if (!renameMethod) {\n throw new Error(\"Devtools extensions haven't been added to this store.\");\n }\n\n renameMethod(newName);\n}\n","import {\n patchState as originalPatchState,\n PartialStateUpdater,\n WritableStateSource,\n} from '@ngrx/signals';\nimport { currentActionNames } from './internal/current-action-names';\n\ntype PatchFn = typeof originalPatchState extends (\n arg1: infer First,\n ...args: infer Rest\n) => infer Returner\n ? (state: First, action: string, ...rest: Rest) => Returner\n : never;\n\n/**\n * @deprecated Has been renamed to `updateState`\n */\nexport const patchState: PatchFn = (state, action, ...rest) => {\n updateState(state, action, ...rest);\n};\n\n/**\n * Wrapper of `patchState` for DevTools integration. Next to updating the state,\n * it also sends the action to the DevTools.\n * @param stateSource state of Signal Store\n * @param action name of action how it will show in DevTools\n * @param updaters updater functions or objects\n */\nexport function updateState<State extends object>(\n stateSource: WritableStateSource<State>,\n action: string,\n ...updaters: Array<\n Partial<NoInfer<State>> | PartialStateUpdater<NoInfer<State>>\n >\n): void {\n currentActionNames.add(action);\n return originalPatchState(stateSource, ...updaters);\n}\n","import { signalStoreFeature, withProps } from '@ngrx/signals';\nimport { GLITCH_TRACKING_FEATURE } from './features/with-glitch-tracking';\nimport { DEVTOOL_FEATURE_NAMES, withDevtools } from './with-devtools';\n/**\n * Stub for DevTools integration. Can be used to disable DevTools in production.\n */\nexport const withDevToolsStub: typeof withDevtools = () =>\n signalStoreFeature(\n withProps(() => ({\n [DEVTOOL_FEATURE_NAMES]: [GLITCH_TRACKING_FEATURE],\n })),\n );\n","import { inject, untracked } from '@angular/core';\nimport {\n EmptyFeatureResult,\n getState,\n PartialStateUpdater,\n SignalStoreFeature,\n signalStoreFeature,\n type,\n withHooks,\n} from '@ngrx/signals';\nimport {\n EventCreator,\n ReducerEvents,\n withEventHandlers,\n} from '@ngrx/signals/events';\nimport { tap } from 'rxjs/operators';\nimport { GLITCH_TRACKING_FEATURE } from './features/with-glitch-tracking';\nimport { updateState } from './update-state';\nimport { DEVTOOL_FEATURE_NAMES } from './with-devtools';\n\nexport function withTrackedReducer<State extends object>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...caseReducers: CaseReducerResult<State, any>[]\n): SignalStoreFeature<\n EmptyFeatureResult & {\n state: State;\n },\n EmptyFeatureResult\n> {\n return signalStoreFeature(\n {\n state: type<State>(),\n },\n withEventHandlers((store, events = inject(ReducerEvents)) =>\n caseReducers.map((caseReducer) =>\n events.on(...caseReducer.events).pipe(\n tap((event) => {\n const state = untracked(() => getState(store));\n const result = caseReducer.reducer(event, state);\n const updaters = Array.isArray(result) ? result : [result];\n\n updateState(store, event.type, ...updaters);\n }),\n ),\n ),\n ),\n withHooks((store) => ({\n onInit() {\n if (!(DEVTOOL_FEATURE_NAMES in store)) {\n throw new Error(\n `In order to use withTrackedReducer, you must first enable the devtools feature via withDevtools('[your store name]', withGlitchTracking())`,\n );\n }\n if (\n !(store[DEVTOOL_FEATURE_NAMES] as string[]).includes(\n GLITCH_TRACKING_FEATURE,\n )\n ) {\n throw new Error(\n `In order to use withTrackedReducer, you must first enable the glitch tracking devtools feature via withDevtools('[your store name]', withGlitchTracking())`,\n );\n }\n },\n })),\n );\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype CaseReducerResult<State extends object, EventCreators extends any[]> = {\n reducer: CaseReducer<State, EventCreators>;\n events: EventCreators;\n};\n\ntype CaseReducer<\n State extends object,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n EventCreators extends EventCreator<string, any>[],\n> = (\n event: { [K in keyof EventCreators]: ReturnType<EventCreators[K]> }[number],\n state: State,\n) =>\n | Partial<State>\n | PartialStateUpdater<State>\n | Array<Partial<State> | PartialStateUpdater<State>>;\n","import { ActionsFnSpecs } from '../with-redux';\n\nexport function assertActionFnSpecs(\n obj: unknown,\n): asserts obj is ActionsFnSpecs {\n if (!obj || typeof obj !== 'object') {\n throw new Error('%o is not an Action Specification');\n }\n}\n","import {\n EmptyFeatureResult,\n SignalStoreFeature,\n SignalStoreFeatureResult,\n WritableStateSource,\n} from '@ngrx/signals';\nimport { Observable, Subject } from 'rxjs';\nimport { assertActionFnSpecs } from './assertions/assertions';\n\n/** Actions **/\n\ntype Payload = Record<string, unknown>;\n\ntype ActionFn<\n Type extends string = string,\n ActionPayload extends Payload = Payload,\n> = ((payload: ActionPayload) => ActionPayload & { type: Type }) & {\n type: Type;\n};\n\ntype ActionFns = Record<string, ActionFn>;\n\nexport type ActionsFnSpecs = Record<string, Payload>;\n\ntype ActionFnCreator<Spec extends ActionsFnSpecs> = {\n [ActionName in keyof Spec]: (Record<never, never> extends Spec[ActionName]\n ? () => Spec[ActionName] & { type: ActionName }\n : (\n payload: Spec[ActionName],\n ) => Spec[ActionName] & { type: ActionName }) & {\n type: ActionName & string;\n };\n};\n\ntype ActionFnPayload<Action> = Action extends (payload: infer Payload) => void\n ? Payload\n : never;\n\ntype ActionFnsCreator<Spec extends ActionsFnSpecs> = Spec extends {\n private: Record<string, Payload>;\n public: Record<string, Payload>;\n}\n ? ActionFnCreator<Spec['private']> & ActionFnCreator<Spec['public']>\n : ActionFnCreator<Spec>;\n\ntype PublicActionFns<Spec extends ActionsFnSpecs> = Spec extends {\n public: Record<string, Payload>;\n}\n ? ActionFnCreator<Spec['public']>\n : ActionFnCreator<Spec>;\n\nexport function payload<Type extends Payload>(): Type {\n return {} as Type;\n}\n\nexport const noPayload = {};\n\n/** Reducer **/\n\ntype ReducerFunction<ReducerAction, State> = (\n state: State,\n action: ActionFnPayload<ReducerAction>,\n) => void;\n\ntype ReducerFactory<StateActionFns extends ActionFns, State> = (\n actions: StateActionFns,\n on: <ReducerAction extends { type: string }>(\n action: ReducerAction,\n reducerFn: ReducerFunction<ReducerAction, State>,\n ) => void,\n) => void;\n\n/**\n * Creates a reducer function to separate the reducer logic into another file.\n *\n * ```typescript\n * interface FlightState {\n * flights: Flight[];\n * effect1: boolean;\n * effect2: boolean;\n * }\n *\n * const initialState: FlightState = {\n * flights: [],\n * effect1: false,\n * effect2: false,\n * };\n *\n * const actions = {\n * init: noPayload,\n * updateEffect1: payload<{ value: boolean }>(),\n * updateEffect2: payload<{ value: boolean }>(),\n * };\n *\n * const reducer = createReducer<FlightState, typeof actions>((actions, on) => {\n * on(actions.updateEffect1, (state, { value }) => {\n * patchState(state, { effect1: value });\n * });\n *\n * on(actions.updateEffect2, (state, { value }) => {\n * patchState(state, { effect2: value });\n * });\n * });\n *\n * signalStore(\n * withState(initialState),\n * withRedux({\n * actions,\n * reducer,\n * })\n * );\n * ```\n * @param reducerFactory\n */\nexport function createReducer<\n State extends object,\n Actions extends ActionsFnSpecs,\n>(\n reducerFactory: ReducerFactory<\n ActionFnsCreator<Actions>,\n WritableStateSource<State>\n >,\n) {\n return reducerFactory;\n}\n\n/** Effect **/\n\ntype EffectsFactory<StateActionFns extends ActionFns> = (\n actions: StateActionFns,\n create: <EffectAction extends { type: string }>(\n action: EffectAction,\n ) => Observable<ActionFnPayload<EffectAction>>,\n) => Record<string, Observable<unknown>>;\n\n/**\n * @deprecated Use NgRx's `@ngrx/signals/events` starting in 19.2\n *\n * Creates the effects function to separate the effects logic into another file.\n *\n * ```typescript\n * interface FlightState {\n * flights: Flight[];\n * effect1: boolean;\n * effect2: boolean;\n * }\n *\n * const initialState: FlightState = {\n * flights: [],\n * effect1: false,\n * effect2: false,\n * };\n *\n * const actions = {\n * init: noPayload,\n * updateEffect1: payload<{ value: boolean }>(),\n * updateEffect2: payload<{ value: boolean }>(),\n * };\n *\n * const effects = createEffects(actions, (actions, create) => {\n * return {\n * init1$: create(actions.init).pipe(\n * map(() => actions.updateEffect1({ value: true }))\n * ),\n * init2$: create(actions.init).pipe(\n * map(() => actions.updateEffect2({ value: true }))\n * ),\n * };\n * });\n *\n * signalStore(\n * withState(initialState),\n * withRedux({\n * actions,\n * effects,\n * })\n * );\n * ```\n * @param actions\n * @param effectsFactory\n */\nexport function createEffects<Actions extends ActionsFnSpecs>(\n actions: Actions,\n effectsFactory: EffectsFactory<ActionFnsCreator<Actions>>,\n) {\n return effectsFactory;\n}\n\n// internal types\n\n/**\n * Record which holds all effects for a specific action type.\n * The values are Subject which the effect are subscribed to.\n * `createActionFns` will call next on these subjects.\n */\ntype EffectsRegistry = Record<string, Subject<ActionFnPayload<unknown>>[]>;\n\nfunction createActionFns<Spec extends ActionsFnSpecs>(\n actionFnSpecs: Spec,\n reducerRegistry: Record<\n string,\n (state: unknown, payload: ActionFnPayload<unknown>) => void\n >,\n effectsRegistry: EffectsRegistry,\n state: unknown,\n) {\n const actionFns: Record<string, ActionFn> = {};\n\n for (const type in actionFnSpecs) {\n const actionFn = (payload: Payload) => {\n const fullPayload = { ...payload, type };\n const reducer = reducerRegistry[type];\n if (reducer) {\n (reducer as (state: unknown, payload: unknown) => void)(\n state,\n fullPayload as unknown,\n );\n }\n const effectSubjects = effectsRegistry[type];\n if (effectSubjects?.length) {\n for (const effectSubject of effectSubjects) {\n (effectSubject as unknown as Subject<unknown>).next(fullPayload);\n }\n }\n return fullPayload;\n };\n actionFn.type = type.toString();\n actionFns[type] = actionFn;\n }\n\n return actionFns;\n}\n\nfunction createPublicAndAllActionsFns<Spec extends ActionsFnSpecs>(\n actionFnSpecs: Spec,\n reducerRegistry: Record<\n string,\n (state: unknown, payload: ActionFnPayload<unknown>) => void\n >,\n effectsRegistry: EffectsRegistry,\n state: unknown,\n): { all: ActionFns; publics: ActionFns } {\n if ('public' in actionFnSpecs || 'private' in actionFnSpecs) {\n const privates = actionFnSpecs['private'] || {};\n const publics = actionFnSpecs['public'] || {};\n\n assertActionFnSpecs(privates);\n assertActionFnSpecs(publics);\n\n const privateActionFns = createActionFns(\n privates,\n reducerRegistry,\n effectsRegistry,\n state,\n );\n const publicActionFns = createActionFns(\n publics,\n reducerRegistry,\n effectsRegistry,\n state,\n );\n\n return {\n all: { ...privateActionFns, ...publicActionFns },\n publics: publicActionFns,\n };\n }\n\n const actionFns = createActionFns(\n actionFnSpecs,\n reducerRegistry,\n effectsRegistry,\n state,\n );\n\n return { all: actionFns, publics: actionFns };\n}\n\nfunction fillReducerRegistry(\n reducer: ReducerFactory<ActionFns, unknown>,\n actionFns: ActionFns,\n reducerRegistry: Record<\n string,\n (state: unknown, payload: ActionFnPayload<unknown>) => void\n >,\n) {\n function on(\n action: { type: string },\n reducerFn: (state: unknown, payload: ActionFnPayload<unknown>) => void,\n ) {\n reducerRegistry[action.type] = reducerFn;\n }\n\n reducer(actionFns, on);\n\n return reducerRegistry;\n}\n\nfunction fillEffects(\n effects: EffectsFactory<ActionFns>,\n actionFns: ActionFns,\n effectsRegistry: EffectsRegistry = {},\n): Observable<unknown>[] {\n function create(action: { type: string }) {\n const subject = new Subject<ActionFnPayload<unknown>>();\n if (!(action.type in effectsRegistry)) {\n effectsRegistry[action.type] = [];\n }\n effectsRegistry[action.type].push(subject);\n return subject.asObservable();\n }\n\n const effectObservables = effects(actionFns, create);\n return Object.values(effectObservables);\n}\n\nfunction startSubscriptions(observables: Observable<unknown>[]) {\n return observables.map((observable) => observable.subscribe());\n}\n\nfunction processRedux<Spec extends ActionsFnSpecs, ReturnType>(\n actionFnSpecs: Spec,\n reducer: ReducerFactory<ActionFns, unknown>,\n effects: EffectsFactory<ActionFns>,\n store: unknown,\n) {\n const reducerRegistry: Record<\n string,\n (state: unknown, payload: ActionFnPayload<unknown>) => void\n > = {};\n const effectsRegistry: Record<string, Subject<ActionFnPayload<unknown>>[]> =\n {};\n const actionsMap = createPublicAndAllActionsFns(\n actionFnSpecs,\n reducerRegistry,\n effectsRegistry,\n store,\n );\n const actionFns = actionsMap.all;\n const publicActionsFns = actionsMap.publics;\n\n fillReducerRegistry(reducer, actionFns, reducerRegistry);\n const effectObservables = fillEffects(effects, actionFns, effectsRegistry);\n const subscriptions = startSubscriptions(effectObservables);\n\n return {\n methods: publicActionsFns as ReturnType,\n subscriptions: subscriptions,\n };\n}\n\n/**\n * @param redux redux\n *\n * properties do not start with `with` since they are not extension functions on their own.\n *\n * no dependency to NgRx\n *\n * actions are passed to reducer and effects, but it is also possible to use other actions.\n * effects provide forAction and do not return anything. that is important because effects should stay inaccessible\n */\nexport function withRedux<\n Spec extends ActionsFnSpecs,\n Input extends SignalStoreFeatureResult,\n StateActionFns extends ActionFnsCreator<Spec> = ActionFnsCreator<Spec>,\n PublicStoreActionFns extends PublicActionFns<Spec> = PublicActionFns<Spec>,\n>(redux: {\n actions: Spec;\n reducer: ReducerFactory<StateActionFns, WritableStateSource<Input['state']>>;\n effects: EffectsFactory<StateActionFns>;\n}): SignalStoreFeature<\n Input,\n EmptyFeatureResult & { methods: PublicStoreActionFns }\n> {\n return (store) => {\n const { methods } = processRedux<Spec, PublicStoreActionFns>(\n redux.actions,\n redux.reducer as ReducerFactory<ActionFns, unknown>,\n redux.effects as EffectsFactory<ActionFns>,\n store,\n );\n return {\n ...store,\n methods: { ...store.methods, ...methods },\n };\n };\n}\n","import { StateSource } from '@ngrx/signals';\n\nexport type ClearUndoRedoOptions<TState extends object> = {\n lastRecord: Partial<TState> | null;\n};\n\nexport type ClearUndoRedoFn<TState extends object> = (\n opts?: ClearUndoRedoOptions<TState>,\n) => void;\n\nexport function clearUndoRedo<TState extends object>(\n store: StateSource<TState>,\n opts?: ClearUndoRedoOptions<TState>,\n): void {\n if (canClearUndoRedo(store)) {\n store.__clearUndoRedo__(opts);\n } else {\n throw new Error(\n 'Cannot clear undoRedo, since store is not configured with withUndoRedo()',\n );\n }\n}\n\nfunction canClearUndoRedo<TState extends object>(\n store: StateSource<TState>,\n): store is StateSource<TState> & {\n __clearUndoRedo__: ClearUndoRedoFn<TState>;\n} {\n if (\n '__clearUndoRedo__' in store &&\n typeof store.__clearUndoRedo__ === 'function'\n ) {\n return true;\n } else {\n return false;\n }\n}\n","import { Signal, computed } from '@angular/core';\nimport {\n EmptyFeatureResult,\n SignalStoreFeature,\n signalStoreFeature,\n withComputed,\n withState,\n} from '@ngrx/signals';\n\nexport type CallState = 'init' | 'loading' | 'loaded' | { error: string };\n\nexport type CallStateSlice = {\n callState: CallState;\n};\n\nexport type NamedCallStateSlice<Collection extends string> = {\n [K in keyof CallStateSlice as Collection extends ''\n ? `${Collection}${K}`\n : `${Collection}${Capitalize<K>}`]: CallStateSlice[K];\n};\n\nexport type CallStateSignals = {\n loading: Signal<boolean>;\n loaded: Signal<boolean>;\n error: Signal<string | null>;\n};\n\nexport type NamedCallStateSignals<Prop extends string> = {\n [K in keyof CallStateSignals as Prop extends ''\n ? `${Prop}${K}`\n : `${Prop}${Capitalize<K>}`]: CallStateSignals[K];\n};\n\nexport type SetCallState<Prop extends string | undefined> = Prop extends string\n ? NamedCallStateSlice<Prop>\n : CallStateSlice;\n\nexport function deriveCallStateKeys<Collection extends string>(\n collection?: Collection,\n) {\n return {\n callStateKey: collection ? `${collection}CallState` : 'callState',\n loadingKey: collection ? `${collection}Loading` : 'loading',\n loadedKey: collection ? `${collection}Loaded` : 'loaded',\n errorKey: collection ? `${collection}Error` : 'error',\n };\n}\n\nexport function getCallStateKeys(config?: { collection?: string }) {\n const prop = config?.collection;\n return deriveCallStateKeys(prop);\n}\n\nexport function getCollectionArray(\n config: { collection?: string } | { collections?: string[] },\n) {\n return 'collections' in config\n ? config.collections\n : 'collection' in config && config.collection\n ? [config.collection]\n : undefined;\n}\n\nexport function withCallState<Collection extends string>(config: {\n collections: Collection[];\n}): SignalStoreFeature<\n EmptyFeatureResult,\n EmptyFeatureResult & {\n state: NamedCallStateSlice<Collection>;\n props: NamedCallStateSignals<Collection>;\n }\n>;\nexport function withCallState<Collection extends string>(config: {\n collection: Collection;\n}): SignalStoreFeature<\n EmptyFeatureResult,\n EmptyFeatureResult & {\n state: NamedCallStateSlice<Collection>;\n props: NamedCallStateSignals<Collection>;\n }\n>;\nexport function withCallState(): SignalStoreFeature<\n EmptyFeatureResult,\n EmptyFeatureResult & {\n state: CallStateSlice;\n props: CallStateSignals;\n }\n>;\nexport function withCallState<Collection extends string>(\n config?:\n | {\n collection: Collection;\n }\n | {\n collections: Collection[];\n },\n): SignalStoreFeature {\n return signalStoreFeature(\n withState(() => {\n if (!config) {\n return { callState: 'init' };\n }\n const collections = getCollectionArray(config);\n if (collections) {\n return collections.reduce(\n (acc, cur) => ({\n ...acc,\n ...{ [cur ? `${cur}CallState` : 'callState']: 'init' },\n }),\n {},\n );\n }\n\n return { callState: 'init' };\n }),\n withComputed((state: Record<string, Signal<unknown>>) => {\n if (config) {\n const collections = getCollectionArray(config);\n if (collections) {\n return collections.reduce<Record<string, Signal<unknown>>>(\n (acc, cur: string) => {\n const { callStateKey, errorKey, loadedKey, loadingKey } =\n deriveCallStateKeys(cur);\n const callState = state[callStateKey] as Signal<CallState>;\n return {\n ...acc,\n [loadingKey]: computed(() => callState() === 'loading'),\n [loadedKey]: computed(() => callState() === 'loaded'),\n [errorKey]: computed(() => {\n const v = callState();\n return typeof v === 'object' ? v.error : null;\n }),\n };\n },\n {},\n );\n }\n }\n const { callStateKey, errorKey, loadedKey, loadingKey } =\n deriveCallStateKeys();\n const callState = state[callStateKey] as Signal<CallState>;\n return {\n [loadingKey]: computed(() => callState() === 'loading'),\n [loadedKey]: computed(() => callState() === 'loaded'),\n [errorKey]: computed(() => {\n const v = callState();\n return typeof v === 'object' ? v.error : null;\n }),\n };\n }),\n );\n}\n\nexport function setLoading<Prop extends string | undefined = undefined>(\n prop?: Prop,\n): SetCallState<Prop> {\n if (prop) {\n return { [`${prop}CallState`]: 'loading' } as SetCallState<Prop>;\n }\n\n return { callState: 'loading' } as SetCallState<Prop>;\n}\n\nexport function setLoaded<Prop extends string | undefined = undefined>(\n prop?: Prop,\n): SetCallState<Prop> {\n if (prop) {\n return { [`${prop}CallState`]: 'loaded' } as SetCallState<Prop>;\n } else {\n return { callState: 'loaded' } as SetCallState<Prop>;\n }\n}\n\nexport function setError<Prop extends string | undefined = undefined>(\n error: unknown,\n prop?: Prop,\n): SetCallState<Prop> {\n let errorMessage: string;\n\n if (!error) {\n errorMessage = '';\n } else if (typeof error === 'object' && 'message' in error) {\n errorMessage = String(error.message);\n } else {\n errorMessage = String(error);\n }\n\n if (prop) {\n return {\n [`${prop}CallState`]: { error: errorMessage },\n } as SetCallState<Prop>;\n } else {\n return { callState: { error: errorMessage } } as SetCallState<Prop>;\n }\n}\n","import { ProviderToken, Signal, computed, inject } from '@angular/core';\nimport {\n EmptyFeatureResult,\n SignalStoreFeature,\n WritableStateSource,\n patchState,\n signalStoreFeature,\n withComputed,\n withMethods,\n withState,\n} from '@ngrx/signals';\nimport {\n EntityId,\n NamedEntityState,\n addEntity,\n removeEntity,\n setAllEntities,\n updateEntity,\n} from '@ngrx/signals/entities';\nimport { EntityState } from './shared/signal-store-models';\nimport {\n CallState,\n NamedCallStateSlice,\n getCallStateKeys,\n setError,\n setLoaded,\n setLoading,\n} from './with-call-state';\n\nexport type Filter = Record<string, unknown>;\nexport type Entity = { id: EntityId };\n\nexport interface DataService<E extends Entity, F extends Filter> {\n load(filter: F): Promise<E[]>;\n\n loadById(id: EntityId): Promise<E>;\n\n create(entity: E): Promise<E>;\n\n update(entity: E): Promise<E>;\n\n updateAll(entity: E[]): Promise<E[]>;\n\n delete(entity: E): Promise<void>;\n}\n\nexport function capitalize(str: string): string {\n return str ? str[0].toUpperCase() + str.substring(1) : str;\n}\n\nexport function getDataServiceKeys(options: { collection?: string }) {\n const filterKey = options.collection\n ? `${options.collection}Filter`\n : 'filter';\n const selectedIdsKey = options.collection\n ? `selected${capitalize(options.collection)}Ids`\n : 'selectedIds';\n const selectedEntitiesKey = options.collection\n ? `selected${capitalize(options.collection)}Entities`\n : 'selectedEntities';\n\n const updateFilterKey = options.collection\n ? `update${capitalize(options.collection)}Filter`\n : 'updateFilter';\n const updateSelectedKey = options.collection\n ? `updateSelected${capitalize(options.collection)}Entities`\n : 'updateSelected';\n const loadKey = options.collection\n ? `load${capitalize(options.collection)}Entities`\n : 'load';\n\n const currentKey = options.collection\n ? `current${capitalize(options.collection)}`\n : 'current';\n const loadByIdKey = options.collection\n ? `load${capitalize(options.collection)}ById`\n : 'loadById';\n const setCurrentKey = options.collection\n ? `setCurrent${capitalize(options.collection)}`\n : 'setCurrent';\n const createKey = options.collection\n ? `create${capitalize(options.collection)}`\n : 'create';\n const updateKey = options.collection\n ? `update${capitalize(options.collection)}`\n : 'update';\n const updateAllKey = options.collection\n ? `updateAll${capitalize(options.collection)}`\n : 'updateAll';\n const deleteKey = options.collection\n ? `delete${capitalize(options.collection)}`\n : 'delete';\n\n // TODO: Take these from @ngrx/signals/entities, when they are exported\n const entitiesKey = options.collection\n ? `${options.collection}Entities`\n : 'entities';\n const entityMapKey = options.collection\n ? `${options.collection}EntityMap`\n : 'entityMap';\n const idsKey = options.collection ? `${options.collection}Ids` : 'ids';\n\n return {\n filterKey,\n selectedIdsKey,\n selectedEntitiesKey,\n updateFilterKey,\n updateSelectedKey,\n loadKey,\n entitiesKey,\n entityMapKey,\n idsKey,\n\n currentKey,\n loadByIdKey,\n setCurrentKey,\n createKey,\n updateKey,\n updateAllKey,\n deleteKey,\n };\n}\n\nexport type NamedDataServiceState<\n E extends Entity,\n F extends Filter,\n Collection extends string,\n> = {\n [K in Collection as `${K}Filter`]: F;\n} & {\n [K in Collection as `selected${Capitalize<K>}Ids`]: Record<EntityId, boolean>;\n} & {\n [K in Collection as `current${Capitalize<K>}`]: E;\n};\n\nexport type DataServiceState<E extends Entity, F extends Filter> = {\n filter: F;\n selectedIds: Record<EntityId, boolean>;\n current: E;\n};\n\nexport type DataServiceComputed<E extends Entity> = {\n selectedEntities: Signal<E[]>;\n};\n\nexport type NamedDataServiceComputed<\n E extends Entity,\n Collection extends string,\n> = {\n [K in Collection as `selected${Capitalize<K>}Entities`]: Signal<E[]>;\n};\n\nexport type NamedDataServiceMethods<\n E extends Entity,\n F extends Filter,\n Collection extends string,\n> = {\n [K in Collection as `update${Capitalize<K>}Filter`]: (filter: F) => void;\n} & {\n [K in Collection as `updateSelected${Capitalize<K>}Entities`]: (\n id: EntityId,\n selected: boolean,\n ) => void;\n} & {\n [K in Collection as `load${Capitalize<K>}Entities`]: () => Promise<void>;\n} & {\n [K in Collection as `setCurrent${Capitalize<K>}`]: (entity: E) => void;\n} & {\n [K in Collection as `load${Capitalize<K>}ById`]: (\n id: EntityId,\n ) => Promise<void>;\n} & {\n [K in Collection as `create${Capitalize<K>}`]: (entity: E) => Promise<void>;\n} & {\n [K in Collection as `update${Capitalize<K>}`]: (entity: E) => Promise<void>;\n} & {\n [K in Collection as `updateAll${Capitalize<K>}`]: (\n entity: E[],\n ) => Promise<void>;\n} & {\n [K in Collection as `delete${Capitalize<K>}`]: (entity: E) => Promise<void>;\n};\n\nexport type DataServiceMethods<E extends Entity, F extends Filter> = {\n updateFilter: (filter: F) => void;\n updateSelected: (id: EntityId, selected: boolean) => void;\n load: () => Promise<void>;\n\n setCurrent(entity: E): void;\n loadById(id: EntityId): Promise<void>;\n create(entity: E): Promise<void>;\n update(entity: E): Promise<void>;\n updateAll(entities: E[]): Promise<void>;\n delete(entity: E): Promise<void>;\n};\n\nexport function withDataService<\n E extends Entity,\n F extends Filter,\n Collection extends string,\n>(options: {\n dataServiceType: ProviderToken<DataService<E, F>>;\n filter: F;\n collection: Collection;\n}): SignalStoreFeature<\n EmptyFeatureResult & {\n state: NamedCallStateSlice<Collection> & NamedEntityState<E, Collection>;\n },\n {\n state: NamedDataServiceState<E, F, Collection>;\n props: NamedDataServiceComputed<E, Collection>;\n methods: NamedDataServiceMethods<E, F, Collection>;\n }\n>;\nexport function withDataService<E extends Entity, F extends Filter>(options: {\n dataServiceType: ProviderToken<DataService<E, F>>;\n filter: F;\n}): SignalStoreFeature<\n EmptyFeatureResult & { state: { callState: CallState } & EntityState<E> },\n {\n state: DataServiceState<E, F>;\n props: DataServiceComputed<E>;\n methods: DataServiceMethods<E, F>;\n }\n>;\n\nexport function withDataService<\n E extends Entity,\n F extends Filter,\n Collection extends string,\n>(options: {\n dataServiceType: ProviderToken<DataService<E, F>>;\n filter: F;\n collection?: Collection;\n}): /* eslint-disable @typescript-eslint/no-explicit-any */\nSignalStoreFeature<any, any> {\n const { dataServiceType, filter, collection: prefix } = options;\n const {\n entitiesKey,\n filterKey,\n loadKey,\n selectedEntitiesKey,\n selectedIdsKey,\n updateFilterKey,\n updateSelectedKey,\n\n currentKey,\n createKey,\n updateKey,\n updateAllKey,\n deleteKey,\n loadByIdKey,\n setCurrentKey,\n } = getDataServiceKeys(options);\n\n const { callStateKey } = getCallStateKeys({ collection: prefix });\n\n return signalStoreFeature(\n withState(() => ({\n [filterKey]: filter,\n [selectedIdsKey]: {} as Record<EntityId, boolean>,\n [currentKey]: undefined as E | undefined,\n })),\n withComputed((store: Record<string, unknown>) => {\n const entities = store[entitiesKey] as Signal<E[]>;\n const selectedIds = store[selectedIdsKey] as Signal<\n Record<EntityId, boolean>\n >;\n\n return {\n [selectedEntitiesKey]: computed(() =>\n entities().filter((e) => selectedIds()[e.id]),\n ),\n };\n }),\n withMethods(\n (store: Record<string, unknown> & WritableStateSource<object>) => {\n const dataService = inject(dataServiceType);\n return {\n [updateFilterKey]: (filter: F): void => {\n patchState(store, { [filterKey]: filter });\n },\n [updateSelectedKey]: (id: EntityId, selected: boolean): void => {\n patchState(store, (state: Record<string, unknown>) => ({\n [selectedIdsKey]: {\n ...(state[selectedIdsKey] as Record<EntityId, boolean>),\n [id]: selected,\n },\n }));\n },\n [loadKey]: async (): Promise<void> => {\n const filter = store[filterKey] as Signal<F>;\n (() =>\n store[callStateKey] && patchState(store, setLoading(prefix)))();\n\n try {\n const result = await dataService.load(filter());\n patchState(\n store,\n prefix\n ? setAllEntities(result, { collection: prefix })\n : setAllEntities(result),\n );\n (() =>\n store[callStateKey] && patchState(store, setLoaded(prefix)))();\n } catch (e) {\n (() =>\n store[callStateKey] &&\n patchState(store, setError(e, prefix)))();\n throw e;\n }\n },\n [loadByIdKey]: async (id: EntityId): Promise<void> => {\n (() =>\n store[callStateKey] && patchState(store, setLoading(prefix)))();\n\n try {\n const current = await dataService.loadById(id);\n (() =>\n store[callStateKey] && patchState(store, setLoaded(prefix)))();\n patchState(store, { [currentKey]: current });\n } catch (e) {\n (() =>\n store[callStateKey] &&\n patchState(store, setError(e, prefix)))();\n throw e;\n }\n },\n [setCurrentKey]: (current: E): void => {\n patchState(store, { [currentKey]: current });\n },\n [createKey]: async (entity: E): Promise<void> => {\n patchState(store, { [currentKey]: entity });\n (() =>\n store[callStateKey] && patchState(store, setLoading(prefix)))();\n\n try {\n const created = await dataService.create(entity);\n patchState(store, { [currentKey]: created });\n patchState(\n store,\n prefix\n ? addEntity(created, { collection: prefix })\n : addEntity(created),\n );\n (() =>\n store[callStateKey] && patchState(store, setLoaded(prefix)))();\n } catch (e) {\n (() =>\n store[callStateKey] &&\n patchState(store, setError(e, prefix)))();\n throw e;\n }\n },\n [updateKey]: async (entity: E): Promise<void> => {\n patchState(store, { [currentKey]: entity });\n (() =>\n store[callStateKey] && patchState(store, setLoading(prefix)))();\n\n try {\n const updated = await dataService.update(entity);\n patchState(store, { [currentKey]: updated });\n\n const updateArg = {\n id: updated.id,\n changes: updated,\n };\n\n const updater = (collection: string) =>\n updateEntity(updateArg, { collection });\n\n patchState(\n store,\n prefix ? updater(prefix) : updateEntity(updateArg),\n );\n (() =>\n store[callStateKey] && patchState(store, setLoaded(prefix)))();\n } catch (e) {\n (() =>\n store[callStateKey] &&\n patchState(store, setError(e, prefix)))();\n throw e;\n }\n },\n [updateAllKey]: async (entities: E[]): Promise<void> => {\n (() =>\n store[callStateKey] && patchState(store, setLoading(prefix)))();\n\n try {\n const result = await dataService.updateAll(entities);\n patchState(\n store,\n prefix\n ? setAllEntities(result, { collection: prefix })\n : setAllEntities(result),\n );\n (() =>\n store[callStateKey] && patchState(store, setLoaded(prefix)))();\n } catch (e) {\n (() =>\n store[callStateKey] &&\n patchState(store, setError(e, prefix)))();\n throw e;\n }\n },\n [deleteKey]: async (entity: E): Promise<void> => {\n patchState(store, { [currentKey]: entity });\n (() =>\n store[callStateKey] && patchState(store, setLoading(prefix)))();\n\n try {\n await dataService.delete(entity);\n patchState(store, { [currentKey]: undefined });\n patchState(\n store,\n prefix\n ? removeEntity(entity.id, { collection: prefix })\n : removeEntity(entity.id),\n );\n (() =>\n store[callStateKey] && patchState(store, setLoaded(prefix)))();\n } catch (e) {\n (() =>\n store[callStateKey] &&\n patchState(store, setError(e, prefix)))();\n throw e;\n }\n },\n };\n },\n ),\n );\n}\n","import { Signal, isSignal, signal, untracked } from '@angular/core';\nimport {\n EmptyFeatureResult,\n SignalStoreFeature,\n SignalStoreFeatureResult,\n patchState,\n signalStoreFeature,\n watchState,\n withComputed,\n withHooks,\n withMethods,\n} from '@ngrx/signals';\nimport { capitalize } from '../with-data-service';\nimport { ClearUndoRedoOptions } from './clear-undo-redo';\n\nexport type StackItem = Record<string, unknown>;\n\nexport type NormalizedUndoRedoOptions = {\n maxStackSize: number;\n collections?: string[];\n keys: string[];\n skip: number;\n};\n\nconst defaultOptions: NormalizedUndoRedoOptions = {\n maxStackSize: 100,\n keys: [],\n skip: 0,\n};\n\nexport function getUndoRedoKeys(collections?: string[]): string[] {\n if (collections) {\n return collections.flatMap((c) => [\n `${c}EntityMap`,\n `${c}Ids`,\n `selected${capitalize(c)}Ids`,\n `${c}Filter`,\n ]);\n }\n return ['entityMap', 'ids', 'selectedIds', 'filter'];\n}\n\ntype NonNever<T> = T extends never ? never : T;\n\ntype ExtractEntityCollection<T> = T extends `${infer U}Entities` ? U : never;\n\ntype ExtractEntityCollections<Store extends SignalStoreFeatureResult> =\n NonNever<\n {\n [K in keyof Store['props']]: ExtractEntityCollection<K>;\n }[keyof Store['props']]\n >;\n\ntype OptionsForState<Store extends SignalStoreFeatureResult> = Partial<\n Omit<NormalizedUndoRedoOptions, 'collections' | 'keys'>\n> & {\n collections?: ExtractEntityCollections<Store>[];\n keys?: (keyof Store['state'])[];\n};\n\nexport function withUndoRedo<Input extends EmptyFeatureResult>(\n options?: OptionsForState<Input>,\n): SignalStoreFeature<\n Input,\n EmptyFeatureResult & {\n props: {\n canUndo: Signal<boolean>;\n canRedo: Signal<boolean>;\n };\n methods: {\n undo: () => void;\n redo: () => void;\n /** @deprecated Use {@link clearUndoRedo} instead. */\n clearStack: () => void;\n };\n }\n> {\n let lastRecord: StackItem | null = null;\n let skipOnce = false;\n\n const normalized = {\n ...defaultOptions,\n ...options,\n };\n\n //\n // Design Decision: This feature has its own\n // internal state.\n //\n\n const undoStack: StackItem[] = [];\n const redoStack: StackItem[] = [];\n\n const canUndo = signal(false);\n const canRedo = signal(false);\n\n const updateInternal = () => {\n canUndo.set(undoStack.length !== 0);\n canRedo.set(redoStack.length !== 0);\n };\n\n const keys = [...getUndoRedoKeys(normalized.collections), ...normalized.keys];\n\n return signalStoreFeature(\n withComputed(() => ({\n canUndo: canUndo.asReadonly(),\n canRedo: canRedo.asReadonly(),\n })),\n withMethods((store) => ({\n undo(): void {\n const item = undoStack.pop();\n\n if (item && lastRecord) {\n redoStack.push(lastRecord);\n }\n\n if (item) {\n skipOnce = true;\n patchState(store, item);\n lastRecord = item;\n }\n\n updateInternal();\n },\n redo(): void {\n const item = redoStack.pop();\n\n if (item && lastRecord) {\n undoStack.push(lastRecord);\n }\n\n if (item) {\n skipOnce = true;\n patchState(store, item);\n lastRecord = item;\n }\n\n updateInternal();\n },\n __clearUndoRedo__(opts?: ClearUndoRedoOptions<Input['state']>): void {\n undoStack.splice(0);\n redoStack.splice(0);\n\n if (opts) {\n lastRecord = opts.lastRecord;\n }\n\n updateInternal();\n },\n })),\n withMethods((store) => ({\n /** @deprecated Use {@link clearUndoRedo} instead. */\n clearStack(): void {\n store.__clearUndoRedo__();\n },\n })),\n withHooks({\n onInit(store) {\n watchState(store, () => {\n const cand = keys.reduce((acc, key) => {\n const s = (store as Record<string | keyof Input['state'], unknown>)[\n key\n ];\n if (s && isSignal(s)) {\n return {\n ...acc,\n [key]: s(),\n };\n }\n return acc;\n }, {});\n\n if (normalized.skip > 0) {\n normalized.skip--;\n return;\n }\n\n if (skipOnce) {\n skipOnce = false;\n return;\n }\n\n //\n // Deep Comparison to prevent duplicated entries\n // on the stack. This can e.g. happen after an undo\n // if the component sends back the undone filter\n // to the store.\n //\n if (JSON.stringify(cand) === JSON.stringify(lastRecord)) {\n return;\n }\n\n // Clear redoStack after recorded action\n redoStack.splice(0);\n\n if (lastRecord) {\n undoStack.push(lastRecord);\n }\n\n if (redoStack.length > normalized.maxStackSize) {\n undoStack.unshift();\n }\n\n lastRecord = cand;\n\n // Don't propogate current reactive context\n untracked(() => updateInternal());\n });\n },\n }),\n );\n}\n","/** With pagination comes in two flavors the first one is local pagination or in memory pagination. For example we have 2000 items which we want\n * to display in a table and the response payload is small enough to be stored in the memory. But we can not display all 2000 items at once\n * so we need to paginate the data. The second flavor is server side pagination where the response payload is too large to be stored in the memory\n * and we need to fetch the data from the server in chunks. In the second case we 'could' also cache the data in the memory but that could lead to\n * other problems like memory leaks and stale data. So we will not cache the data in the memory in the second case.\n * This feature implements the local pagination.\n */\n\nimport { Signal, computed } from '@angular/core';\nimport {\n EmptyFeatureResult,\n SignalStoreFeature,\n signalStoreFeature,\n withComputed,\n withState,\n} from '@ngrx/signals';\nimport { capitalize } from './with-data-service';\n\n// This is a virtual page which is can be used to create a pagination control\nexport type Page = { label: string | number; value: number };\n\nexport type NamedPaginationServiceState<E, Collection extends string> = {\n [K in Collection as `selectedPage${Capitalize<K>}Entities`]: Array<E>;\n} & {\n [K in Collection as `${Lowercase<K>}CurrentPage`]: number;\n} & {\n [K in Collection as `${Lowercase<K>}PageSize`]: number;\n} & {\n [K in Collection as `${Lowercase<K>}TotalCount`]: number;\n} & {\n [K in Collection as `${Lowercase<K>}PageCount`]: number;\n} & {\n [K in Collection as `${Lowercase<K>}PageNavigationArray`]: number;\n} & {\n [K in Collection as `${Lowercase<K>}PageNavigationArrayMax`]: number;\n};\n\nexport type NamedPaginationServiceSignals<E, Collection extends string> = {\n [K in Collection as `selectedPage${Capitalize<K>}Entities`]: Signal<E[]>;\n} & {\n [K in Collection as `${Lowercase<K>}CurrentPage`]: Signal<number>;\n} & {\n [K in Collection as `${Lowercase<K>}PageSize`]: Signal<number>;\n} & {\n [K in Collection as `${Lowercase<K>}TotalCount`]: Signal<number>;\n} & {\n [K in Collection as `${Lowercase<K>}PageCount`]: Signal<number>;\n} & {\n [K in Collection as `${Lowercase<K>}PageNavigationArray`]: Signal<Page[]>;\n} & {\n [K in Collection as `${Lowercase<K>}PageNavigationArrayMax`]: Signal<number>;\n} & {\n [K in Collection as `hasNext${Capitalize<K>}Page`]: Signal<boolean>;\n} & {\n [K in Collection as `hasPrevious${Capitalize<K>}Page`]: Signal<boolean>;\n};\n\nexport type PaginationServiceState<E> = {\n selectedPageEntities: Array<E>;\n currentPage: number;\n pageSize: number;\n totalCount: number;\n pageCount: number;\n pageNavigationArray: Page[];\n pageNavigationArrayMax: number;\n};\n\nexport type PaginationServiceSignals<E> = {\n selectedPageEntities: Signal<E[]>;\n currentPage: Signal<number>;\n pageSize: Signal<number>;\n totalCount: Signal<number>;\n pageCount: Signal<number>;\n pageNavigationArray: Signal<Page[]>;\n pageNavigationArrayMax: Signal<number>;\n hasNextPage: Signal<boolean>;\n hasPreviousPage: Signal<boolean>;\n};\n\ntype PageState<Collection extends string | undefined> =\n Collection extends string\n ? {\n [K in Collection as `${Lowercase<K>}CurrentPage`]: number;\n }\n : { currentPage: number };\n\ntype PageSizeState<Collection extends string | undefined> =\n Collection extends string\n ? {\n [K in Collection as `${Lowercase<K>}PageSize`]: number;\n }\n : { pageSize: number };\n\nexport type SetPaginationState<\n E,\n Collection extends string | undefined,\n> = Collection extends string\n ? NamedPaginationServiceState<E, Collection>\n : PaginationServiceState<E>;\n\nexport function withPagination<E, Collection extends string>(options: {\n entity: E;\n collection: Collection;\n}): SignalStoreFeature<\n EmptyFeatureResult,\n EmptyFeatureResult & {\n state: NamedPaginationServiceState<E, Collection>;\n props: NamedPaginationServiceSignals<E, Collection>;\n }\n>;\n\nexport function withPagination<E>(): SignalStoreFeature<\n EmptyFeatureResult,\n EmptyFeatureResult & {\n state: PaginationServiceState<E>;\n props: PaginationServiceSignals<E>;\n }\n>;\n\nexport function withPagination<E, Collection extends string>(options?: {\n entity: E;\n collection: Collection;\n}): SignalStoreFeature {\n const {\n pageKey,\n pageSizeKey,\n entitiesKey,\n selectedPageEntitiesKey,\n totalCountKey,\n pageCountKey,\n pageNavigationArrayMaxKey,\n pageNavigationArrayKey,\n hasNextPageKey,\n hasPreviousPageKey,\n } = createPaginationKeys<Collection>(options);\n\n return signalStoreFeature(\n withState({\n [pageKey]: 0,\n [pageSizeKey]: 10,\n [pageNavigationArrayMaxKey]: 7,\n }),\n withComputed((store: Record<string, unknown>) => {\n const entities = store[entitiesKey] as Signal<E[]>;\n const page = store[pageKey] as Signal<number>;\n const pageSize = store[pageSizeKey] as Signal<number>;\n const pageNavigationArrayMax = store[\n pageNavigationArrayMaxKey\n ] as Signal<number>;\n\n return {\n // The derived enitites which are displayed on the current page\n [selectedPageEntitiesKey]: computed<E[]>(() => {\n const pageSizeValue = pageSize();\n const pageValue = page();\n\n return entities().slice(\n pageValue * pageSizeValue,\n (pageValue + 1) * pageSizeValue,\n ) as E[];\n }),\n [totalCountKey]: computed(() => entities().length),\n [pageCountKey]: computed(() => {\n const totalCountValue = entities().length;\n const pageSizeValue = pageSize();\n\n if (totalCountValue === 0) {\n return 0;\n }\n\n return Math.ceil(totalCountValue / pageSizeValue);\n }),\n [pageNavigationArrayKey]: computed(() =>\n createPageArray(\n page(),\n pageSize(),\n entities().length,\n pageNavigationArrayMax(),\n ),\n ),\n\n [hasNextPageKey]: computed(() => {\n return page() < pageSize();\n }),\n\n [hasPreviousPageKey]: computed(() => {\n return page() > 1;\n }),\n };\n }),\n );\n}\n\nexport function gotoPage<Collection extends string>(\n page: number,\n options?: {\n collection: Collection;\n },\n): PageState<Collection> {\n const { pageKey } = createPaginationKeys<Collection>(options);\n\n return {\n [pageKey]: page,\n } as PageState<Collection>;\n}\n\nexport function setPageSize<Collection extends string>(\n pageSize: number,\n options?: {\n collection: Collection;\n },\n) {\n const { pageSizeKey } = createPaginationKeys<Collection>(options);\n\n return {\n [pageSizeKey]: pageSize,\n } as PageSizeState<Collection>;\n}\n\ntype SetPageState<Collection extends string | undefined> = (\n state: PageState<Collection>,\n) => PageState<Collection>;\n\nexport function nextPage<Collection extends string>(options?: {\n collection: Collection;\n}): SetPageState<Collection> {\n const { pageKey } = createPaginationKeys<Collection>(options);\n\n return (state: Record<string, number>) => {\n const currentPage = state[pageKey];\n\n return { [pageKey]: currentPage + 1 } as PageState<Collection>;\n };\n}\n\nexport function previousPage<Collection extends string>(options?: {\n collection: Collection;\n}): SetPageState<Collection> {\n const { pageKey } = createPaginationKeys<Collection>(options);\n\n return (state: Record<string, number>) => {\n const currentPage = state[pageKey];\n\n return { [pageKey]: currentPage - 1 } as PageState<Collection>;\n };\n}\n\nexport function firstPage<Collection extends string>(options?: {\n collection: Collection;\n}) {\n const { pageKey } = createPaginationKeys<Collection>(options);\n\n return { [pageKey]: 0 } as PageState<Collection>;\n}\n\nexport function setMaxPageNavigationArrayItems<E, Collection extends string>(\n maxPageNavigationArrayItems: number,\n options?: {\n collection: Collection;\n },\n): Partial<SetPaginationState<E, Collection>> {\n const { pageNavigationArrayMaxKey } =\n createPaginationKeys<Collection>(options);\n\n return {\n [pageNavigationArrayMaxKey]: maxPageNavigationArrayItems,\n } as Partial<SetPaginationState<E, Collection>>;\n}\n\nfunction createPaginationKeys<Collection extends string>(\n options: { collection: Collection } | undefined,\n) {\n const entitiesKey = options?.collection\n ? `${options.collection}Entities`\n : 'entities';\n\n const selectedPageEntitiesKey = options?.collection\n ? `selectedPage${capitalize(options?.collection)}Entities`\n : 'selectedPageEntities';\n\n const pageKey = options?.collection\n ? `${options.collection}CurrentPage`\n : 'currentPage';\n\n const pageSizeKey = options?.collection\n ? `${options.collection}PageSize`\n : 'pageSize';\n\n const totalCountKey = options?.collection\n ? `${options.collection}TotalCount`\n : 'totalCount';\n\n const pageCountKey = options?.collection\n ? `${options.collection}PageCount`\n : 'pageCount';\n\n const pageNavigationArrayMaxKey = options?.collection\n ? `${options.collection}PageNavigationArrayMax`\n : 'pageNavigationArrayMax';\n\n const pageNavigationArrayKey = options?.collection\n ? `${options.collection}PageNavigationArray`\n : 'pageNavigationArray';\n\n const hasNextPageKey = options?.collection\n ? `hasNext${capitalize(options.collection)}Page`\n : 'hasNextPage';\n\n const hasPreviousPageKey = options?.collection\n ? `hasPrevious${capitalize(options.collection)}Page`\n : 'hasPreviousPage';\n\n return {\n pageKey,\n pageSizeKey,\n entitiesKey,\n selectedPageEntitiesKey,\n totalCountKey,\n pageCountKey,\n pageNavigationArrayKey,\n pageNavigationArrayMaxKey,\n hasNextPageKey,\n hasPreviousPageKey,\n };\n}\n\nexport function createPageArray(\n currentPage: number,\n itemsPerPage: number,\n totalItems: number,\n paginationRange: number,\n): Page[] {\n // Convert paginationRange to number in case it's a string\n paginationRange = +paginationRange;\n\n // Calculate total number of pages\n const totalPages = Math.max(Math.ceil(totalItems / itemsPerPage), 1);\n const halfWay = Math.ceil(paginationRange / 2);\n\n const isStart = currentPage <= halfWay;\n const isEnd = totalPages - halfWay < currentPage;\n const isMiddle = !isStart && !isEnd;\n\n const ellipsesNeeded = paginationRange < totalPages;\n const pages: Page[] = [];\n\n for (let i = 1; i <= totalPages && i <= paginationRange; i++) {\n let pageNumber = i;\n\n if (i === paginationRange) {\n pageNumber = totalPages;\n } else if (ellipsesNeeded) {\n if (isEnd) {\n pageNumber = totalPages - paginationRange + i;\n } else if (isMiddle) {\n pageNumber = currentPage - halfWay + i;\n }\n }\n\n const openingEllipsesNeeded = i === 2 && (isMiddle || isEnd);\n const closingEllipsesNeeded =\n i === paginationRange - 1 && (isMiddle || isStart);\n\n const label =\n ellipsesNeeded && (openingEllipsesNeeded || closingEllipsesNeeded)\n ? '...'\n : pageNumber;\n\n pages.push({ label, value: pageNumber });\n }\n\n return pages;\n}\n","import {\n getState,\n patchState,\n signalStoreFeature,\n StateSource,\n withHooks,\n withMethods,\n withProps,\n} from '@ngrx/signals';\n\nexport type PublicMethods = {\n resetState(): void;\n};\n\n/**\n * Adds a `resetState` method to the store, which resets the state\n * to the initial state.\n *\n * If you want to set a custom initial state, you can use {@link setResetState}.\n */\nexport function withReset() {\n return signalStoreFeature(\n withProps(() => ({ _resetState: { value: {} } })),\n withMethods((store): PublicMethods => {\n // workaround to TS excessive property check\n const methods = {\n resetState() {\n patchState(store, store._resetState.value);\n },\n __setResetState__(state: object) {\n store._resetState.value = state;\n },\n };\n\n return methods;\n }),\n withHooks((store) => ({\n onInit() {\n store._resetState.value = getState(store);\n },\n })),\n );\n}\n\n/**\n * Sets the reset state of the store to the given state.\n *\n * Throws an error if the store is not configured with {@link withReset}.\n * @param store the instance of a SignalStore\n * @param state the state to set as the reset state\n */\nexport function setResetState<State extends object>(\n store: StateSource<State>,\n state: State,\n): void {\n if (!('__setResetState__' in store)) {\n throw new Error(\n 'Cannot set reset state, since store is not configured with withReset()',\n );\n }\n (store.__setResetState__ as (state: State) => void)(state);\n}\n","/**\n * Deep freezes a state object along its properties with primitive values\n * on the first level.\n *\n * The reason for this is that the final state is a merge of all\n * root properties of all states, i.e. `withState`,....\n *\n * Since the root object will not be part of the state (shadow clone),\n * we are not freezing it.\n */\n\nexport function deepFreeze<T extends Record<string | symbol, unknown>>(\n target: T,\n // if empty all properties will be frozen\n propertyNamesToBeFrozen: (string | symbol)[],\n // also means that we are on the first level\n isRoot = true,\n): void {\n const runPropertyNameCheck = propertyNamesToBeFrozen.length > 0;\n for (const key of Reflect.ownKeys(target)) {\n if (runPropertyNameCheck && !propertyNamesToBeFrozen.includes(key)) {\n continue;\n }\n\n const propValue = target[key];\n if (isRecordLike(propValue) && !Object.isFrozen(propValue)) {\n Object.freeze(propValue);\n deepFreeze(propValue, [], false);\n } else if (isRoot) {\n Object.defineProperty(target, key, {\n value: propValue,\n writable: false,\n configurable: false,\n });\n }\n }\n}\n\nfunction isRecordLike(\n target: unknown,\n): target is Record<string | symbol, unknown> {\n return typeof target === 'object' && target !== null;\n}\n","import { isDevMode as ngIsInDevMode } from '@angular/core';\n\n// necessary wrapper function to test prod mode\nexport function isDevMode() {\n return ngIsInDevMode();\n}\n","import {\n EmptyFeatureResult,\n getState,\n signalStoreFeature,\n SignalStoreFeature,\n SignalStoreFeatureResult,\n watchState,\n withHooks,\n withState,\n} from '@ngrx/signals';\nimport { deepFreeze } from './deep-freeze';\nimport { isDevMode } from './is-dev-mode';\n\n/**\n * Starting from v20, the root properties of the state object\n * are all of type `WritableSignal`.\n *\n * That means, we cannot freeze root properties, which are of a\n * primitive data type.\n *\n * This is a breaking change, because in v19 the state was a Signal.\n * We had the possibility to freeze that Signal's\n * object and could therefore provide immutability for\n * root properties of primitive data types.\n *\n * For example:\n *\n * ```ts\n * const state = {\n * id: 1, // was frozen in v19, but not in >= v20\n * address: {\n * street: 'Main St',\n * city: 'Springfield',\n * }\n * }\n * ```\n */\n\n/**\n * Prevents mutation of the state.\n *\n * This is done by applying `Object.freeze` to each root\n * property of the state. Any mutable change within\n * or outside the `SignalStore` will throw an error.\n *\n * Root properties of the state having a primitive data type\n * are not supported.\n *\n * * For example:\n *\n * ```ts\n * const state = {\n * // ⛔️ are not frozen -> mutable changes possible\n * id: 1,\n *\n * // ✅ are frozen -> mutable changes throw\n * address: {\n * street: 'Main St',\n * city: 'Springfield',\n * }\n * }\n * ```\n *\n * @param state the state object\n * @param options enable protection in production (default: false)\n */\nexport function withImmutableState<State extends object>(\n state: State,\n options?: { enableInProduction?: boolean },\n): SignalStoreFeature<\n SignalStoreFeatureResult,\n EmptyFeatureResult & { state: State }\n>;\n/**\n * Prevents mutation of the state.\n *\n * This is done by applying `Object.freeze` to each root\n * property of the state. Any mutable change within\n * or outside the `SignalStore` will throw an error.\n *\n * Root properties of the state having a primitive data type\n * are not supported.\n *\n * * For example:\n *\n * ```ts\n * const state = {\n * // ⛔️ are not frozen -> mutable changes possible\n * id: 1,\n *\n * // ✅ are frozen -> mutable changes throw\n * address: {\n * street: 'Main St',\n * city: 'Springfield',\n * }\n * }\n * ```\n *\n * @param stateFactory a function returning the state object\n * @param options enable protection in production (default: false)\n */\nexport function withImmutableState<State extends object>(\n stateFactory: () => State,\n options?: { enableInProduction?: boolean },\n): SignalStoreFeature<\n SignalStoreFeatureResult,\n EmptyFeatureResult & { state: State }\n>;\nexport function withImmutableState<State extends object>(\n stateOrFactory: State | (() => State),\n options?: { enableInProduction?: boolean },\n): SignalStoreFeature<\n SignalStoreFeatureResult,\n EmptyFeatureResult & { state: State }\n> {\n const immutableState =\n typeof stateOrFactory === 'function' ? stateOrFactory() : stateOrFactory;\n const stateKeys = Reflect.ownKeys(immutableState);\n\n const applyFreezing = isDevMode() || options?.enableInProduction === true;\n return signalStoreFeature(\n withState(immutableState),\n withHooks((store) => ({\n onInit() {\n if (!applyFreezing) {\n return;\n }\n /**\n * `immutableState` will be initially frozen. That is because\n * of potential mutations outside the SignalStore\n *\n * ```ts\n * const initialState = {user: {id: 1}};\n * signalStore(withImmutableState(initialState));\n *\n * initialState.user.id = 2; // must throw immutability\n * ```\n */\n deepFreeze(\n getState(store) as Record<string | symbol, unknown>,\n stateKeys,\n );\n\n watchState(store, (state) => {\n deepFreeze(state as Record<string | symbol, unknown>, stateKeys);\n });\n },\n })),\n );\n}\n","import { Injectable } from '@angular/core';\n\nexport const keyPath = 'ngrxToolkitKeyPath';\n\nexport const dbName = 'ngrxToolkitDb';\n\nexport const storeName = 'ngrxToolkitStore';\n\nexport const VERSION: number = 1 as const;\n\n@Injectable({ providedIn: 'root' })\nexport class IndexedDBService {\n /**\n * write to indexedDB\n * @param key\n * @param data\n */\n async setItem(key: string, data: string): Promise<void> {\n const db = await this.openDB();\n\n const tx = db.transaction(storeName, 'readwrite');\n\n const store = tx.objectStore(storeName);\n\n store.put({\n [keyPath]: key,\n value: data,\n });\n\n return new Promise((resolve, reject) => {\n tx.oncomplete = (): void => {\n db.close();\n resolve();\n };\n\n tx.onerror = (): void => {\n db.close();\n reject();\n };\n });\n }\n\n /**\n * read from indexedDB\n * @param key\n */\n async getItem(key: string): Promise<string | null> {\n const db = await this.openDB();\n\n const tx = db.transaction(storeName, 'readonly');\n\n const store = tx.objectStore(storeName);\n\n const request = store.get(key);\n\n return new Promise((resolve, reject) => {\n request.onsuccess = (): void => {\n db.close();\n // localStorage(sessionStorage) returns null if the key does not exist\n // Similarly, indexedDB should return null\n if (request.result === undefined) {\n resolve(null);\n }\n resolve(request.result?.['value']);\n };\n\n request.onerror = (): void => {\n db.close();\n reject();\n };\n });\n }\n\n /**\n * delete indexedDB\n * @param key\n */\n async clear(key: string): Promise<void> {\n const db = await this.openDB();\n\n const tx = db.transaction(storeName, 'readwrite');\n\n const store = tx.objectStore(storeName);\n\n const request = store.delete(key);\n\n return new Promise((resolve, reject) => {\n request.onsuccess = (): void => {\n db.close();\n resolve();\n };\n\n request.onerror = (): void => {\n db.close();\n reject();\n };\n });\n }\n\n /**\n * open indexedDB\n */\n private async openDB(): Promise<IDBDatabase> {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(dbName, VERSION);\n\n request.onupgradeneeded = () => {\n const db = request.result;\n\n if (!db.objectStoreNames.contains(storeName)) {\n db.createObjectStore(storeName, { keyPath });\n }\n };\n\n request.onsuccess = (): void => {\n resolve(request.result);\n };\n\n request.onerror = (): void => {\n reject(request.error);\n };\n });\n }\n}\n","import { Signal, WritableSignal } from '@angular/core';\nimport { EmptyFeatureResult, WritableStateSource } from '@ngrx/signals';\nimport { SyncConfig } from '../with-storage-sync';\n\nexport type SyncMethods = {\n clearStorage(): void;\n readFromStorage(): void;\n writeToStorage(): void;\n};\n\nexport type SyncFeatureResult = EmptyFeatureResult & {\n methods: SyncMethods;\n};\n\nexport type SyncStoreForFactory<State extends object> =\n WritableStateSource<State>;\n\nexport type SyncStorageStrategy<State extends object> = ((\n config: Required<SyncConfig<State>>,\n store: SyncStoreForFactory<State>,\n useStubs: boolean,\n) => SyncMethods) & { type: 'sync' };\n\nexport type AsyncMethods = {\n clearStorage(): Promise<void>;\n readFromStorage(): Promise<void>;\n writeToStorage(): Promise<void>;\n};\n\n/**\n * AsyncFeatureResult is used as the public interface that users interact with\n * when calling `withIndexedDB`. It intentionally omits the internal SYNC_STATUS\n * property to avoid TypeScript error TS4058 (return type of public method\n * includes private type).\n *\n * For internal implementation, we use AsyncStoreForFactory which includes\n * the SYNC_STATUS property needed for state management.\n */\nexport const SYNC_STATUS = Symbol('SYNC_STATUS');\nexport type SyncStatus = 'idle' | 'syncing' | 'synced';\n\n// Keeping it internal avoids TS4058 error\nexport type InternalAsyncProps = AsyncFeatureResult['props'] & {\n [SYNC_STATUS]: WritableSignal<SyncStatus>;\n};\n\nexport type AsyncFeatureResult = EmptyFeatureResult & {\n methods: AsyncMethods;\n props: {\n isSynced: Signal<boolean>;\n whenSynced: () => Promise<void>;\n };\n};\n\nexport type AsyncStoreForFactory<State extends object> =\n WritableStateSource<State> & InternalAsyncProps;\n\nexport type AsyncStorageStrategy<State extends object> = ((\n config: Required<SyncConfig<State>>,\n store: AsyncStoreForFactory<State>,\n useStubs: boolean,\n) => AsyncMethods) & { type: 'async' };\n","import { inject } from '@angular/core';\nimport { getState, patchState } from '@ngrx/signals';\nimport { IndexedDBService } from '../internal/indexeddb.service';\nimport {\n AsyncMethods,\n AsyncStorageStrategy,\n AsyncStoreForFactory,\n SYNC_STATUS,\n} from '../internal/models';\nimport { SyncConfig } from '../with-storage-sync';\n\nexport function withIndexedDB<\n State extends object,\n>(): AsyncStorageStrategy<State> {\n function factory(\n { key, parse, select, stringify }: Required<SyncConfig<State>>,\n store: AsyncStoreForFactory<State>,\n useStubs: boolean,\n ): AsyncMethods {\n if (useStubs) {\n return {\n clearStorage: () => Promise.resolve(),\n readFromStorage: () => Promise.resolve(),\n writeToStorage: () => Promise.resolve(),\n };\n }\n\n const indexeddbService = inject(IndexedDBService);\n\n function warnOnSyncing(mode: 'read' | 'write'): void {\n if (store[SYNC_STATUS]() === 'syncing') {\n const prettyMode = mode === 'read' ? 'Reading' : 'Writing';\n console.warn(\n `${prettyMode} to Store (${key}) happened during an ongoing synchronization process.`,\n 'Please ensure that the store is not in syncing state via `store.whenSynced()`.',\n 'Alternatively, you can disable the autoSync by passing `autoSync: false` in the config.',\n );\n }\n }\n\n return {\n /**\n * Removes the item stored in storage.\n */\n async clearStorage(): Promise<void> {\n warnOnSyncing('write');\n store[SYNC_STATUS].set('syncing');\n patchState(store, {});\n await indexeddbService.clear(key);\n store[SYNC_STATUS].set('synced');\n },\n\n /**\n * Reads item from storage and patches the state.\n */\n async readFromStorage(): Promise<void> {\n warnOnSyncing('read');\n store[SYNC_STATUS].set('syncing');\n const stateString = await indexeddbService.getItem(key);\n if (stateString) {\n patchState(store, parse(stateString));\n }\n store[SYNC_STATUS].set('synced');\n },\n\n /**\n * Writes selected portion to storage.\n */\n async writeToStorage(): Promise<void> {\n warnOnSyncing('write');\n store[SYNC_STATUS].set('syncing');\n const slicedState = select(getState(store)) as State;\n await indexeddbService.setItem(key, stringify(slicedState));\n store[SYNC_STATUS].set('synced');\n },\n };\n }\n factory.type = 'async' as const;\n\n return factory;\n}\n","import { Injectable } from '@angular/core';\nimport {} from './models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LocalStorageService {\n getItem(key: string): string | null {\n return localStorage.getItem(key);\n }\n\n setItem(key: string, data: string): void {\n return localStorage.setItem(key, data);\n }\n\n clear(key: string): void {\n return localStorage.removeItem(key);\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SessionStorageService {\n getItem(key: string): string | null {\n return sessionStorage.getItem(key);\n }\n\n setItem(key: string, data: string): void {\n return sessionStorage.setItem(key, data);\n }\n\n clear(key: string): void {\n return sessionStorage.removeItem(key);\n }\n}\n","import { inject, Type } from '@angular/core';\nimport { getState, patchState } from '@ngrx/signals';\nimport { LocalStorageService } from '../internal/local-storage.service';\nimport { SyncStorageStrategy, SyncStoreForFactory } from '../internal/models';\nimport { SessionStorageService } from '../internal/session-storage.service';\nimport { SyncConfig } from '../with-storage-sync';\n\nexport function withLocalStorage<\n State extends object,\n>(): SyncStorageStrategy<State> {\n return createSyncMethods<State>(LocalStorageService);\n}\n\nexport function withSessionStorage<State extends object>() {\n return createSyncMethods<State>(SessionStorageService);\n}\n\nfunction createSyncMethods<State extends object>(\n Storage: Type<LocalStorageService | SessionStorageService>,\n): SyncStorageStrategy<State> {\n function factory(\n { key, parse, select, stringify }: Required<SyncConfig<State>>,\n store: SyncStoreForFactory<State>,\n useStubs: boolean,\n ) {\n if (useStubs) {\n return {\n clearStorage: () => undefined,\n readFromStorage: () => undefined,\n writeToStorage: () => undefined,\n };\n }\n\n const storage = inject(Storage);\n\n return {\n clearStorage(): void {\n storage.clear(key);\n },\n\n readFromStorage(): void {\n const stateString = storage.getItem(key);\n\n if (stateString) {\n patchState(store, parse(stateString));\n }\n },\n\n writeToStorage() {\n const slicedState = select(getState(store)) as State;\n storage.setItem(key, stringify(slicedState));\n },\n };\n }\n factory.type = 'sync' as const;\n\n return factory;\n}\n","import { isPlatformServer } from '@angular/common';\nimport { computed, effect, inject, PLATFORM_ID, signal } from '@angular/core';\nimport {\n EmptyFeatureResult,\n getState,\n signalStoreFeature,\n SignalStoreFeature,\n SignalStoreFeatureResult,\n watchState,\n withHooks,\n withMethods,\n withProps,\n} from '@ngrx/signals';\nimport {\n withLocalStorage,\n withSessionStorage,\n} from './features/with-local-storage';\nimport {\n AsyncFeatureResult,\n AsyncStorageStrategy,\n SYNC_STATUS,\n SyncFeatureResult,\n SyncStorageStrategy,\n} from './internal/models';\n\nexport type SyncConfig<State> = {\n /**\n * The key which is used to access the storage.\n */\n key: string;\n /**\n * Flag indicating if the store should read from storage on init and write to storage on every state change.\n *\n * `true` by default\n */\n autoSync?: boolean;\n /**\n * Function to select that portion of the state which should be stored.\n *\n * Returns the whole state object by default\n */\n select?: (state: State) => unknown;\n /**\n * Function used to parse the state coming from storage.\n *\n * `JSON.parse()` by default\n */\n parse?: (stateString: string) => State;\n /**\n * Function used to transform the state into a string representation.\n *\n * `JSON.stringify()` by default\n */\n stringify?: (state: State) => string;\n\n /**\n * @deprecated Use {@link withSessionStorage} instead.\n * Factory function used to switch to sessionStorage.\n *\n * `localStorage` by default\n */\n storage?: () => Storage;\n};\n\n// only key\nexport function withStorageSync<Input extends SignalStoreFeatureResult>(\n key: string,\n): SignalStoreFeature<Input, SyncFeatureResult>;\n\n// key + indexeddb\nexport function withStorageSync<Input extends SignalStoreFeatureResult>(\n key: string,\n storageStrategy: AsyncStorageStrategy<Input['state']>,\n): SignalStoreFeature<Input, AsyncFeatureResult>;\n\n// key + localStorage(or sessionStorage)\nexport function withStorageSync<Input extends SignalStoreFeatureResult>(\n key: string,\n storageStrategy: SyncStorageStrategy<Input['state']>,\n): SignalStoreFeature<Input, SyncFeatureResult>;\n\n// config + localStorage\nexport function withStorageSync<Input extends SignalStoreFeatureResult>(\n config: SyncConfig<Input['state']>,\n): SignalStoreFeature<Input, SyncFeatureResult>;\n\n// config + indexeddb\nexport function withStorageSync<Input extends SignalStoreFeatureResult>(\n config: SyncConfig<Input['state']>,\n storageStrategy: AsyncStorageStrategy<Input['state']>,\n): SignalStoreFeature<Input, AsyncFeatureResult>;\n\n// config + localStorage(or sessionStorage)\nexport function withStorageSync<Input extends SignalStoreFeatureResult>(\n config: SyncConfig<Input['state']>,\n storageStrategy: SyncStorageStrategy<Input['state']>,\n): SignalStoreFeature<Input, SyncFeatureResult>;\n\nexport function withStorageSync<Input extends SignalStoreFeatureResult>(\n configOrKey: SyncConfig<Input['state']> | string,\n storageStrategy?:\n | AsyncStorageStrategy<Input['state']>\n | SyncStorageStrategy<Input['state']>,\n): SignalStoreFeature<\n Input,\n EmptyFeatureResult & (SyncFeatureResult | AsyncFeatureResult)\n> {\n if (\n typeof configOrKey !== 'string' &&\n configOrKey.storage &&\n storageStrategy\n ) {\n throw new Error(\n 'You can either pass a storage strategy or a config with storage, but not both.',\n );\n }\n const config: Required<SyncConfig<Input['state']>> = {\n autoSync: true,\n select: (state: Input['state']) => state,\n parse: JSON.parse,\n stringify: JSON.stringify,\n storage: () => localStorage,\n ...(typeof configOrKey === 'string' ? { key: configOrKey } : configOrKey),\n };\n\n const factory =\n storageStrategy ??\n (config.storage() === localStorage\n ? withLocalStorage()\n : withSessionStorage());\n\n if (factory.type === 'sync') {\n return createSyncStorageSync(factory, config);\n } else {\n return createAsyncStorageSync(factory, config);\n }\n}\n\nfunction createSyncStorageSync(\n factory: SyncStorageStrategy<object>,\n config: Required<SyncConfig<object>>,\n) {\n return signalStoreFeature(\n withMethods((store, platformId = inject(PLATFORM_ID)) => {\n return factory(config, store, isPlatformServer(platformId));\n }),\n withHooks({\n onInit(store, platformId = inject(PLATFORM_ID)) {\n if (isPlatformServer(platformId)) {\n return;\n }\n\n if (config.autoSync) {\n store.readFromStorage();\n watchState(store, () => store.writeToStorage());\n }\n },\n }),\n ) satisfies SignalStoreFeature<EmptyFeatureResult, SyncFeatureResult>;\n}\n\nfunction createAsyncStorageSync(\n factory: AsyncStorageStrategy<object>,\n config: Required<SyncConfig<object>>,\n) {\n return signalStoreFeature(\n withProps(() => {\n const props = {\n /*\n // we need to have that as property (and not state)\n // Otherwise the state watcher fires when updating the sync status\n */\n [SYNC_STATUS]: signal<'idle' | 'syncing' | 'synced'>('idle'),\n };\n\n const resolves = [] as (() => void)[];\n\n effect(() => {\n const syncStatus = props[SYNC_STATUS]();\n if (syncStatus === 'synced') {\n resolves.forEach((resolve) => resolve());\n resolves.splice(0, resolves.length);\n }\n });\n\n return {\n ...props,\n isSynced: computed(() => props[SYNC_STATUS]() === 'synced'),\n whenSynced: () =>\n new Promise<void>((resolve) => {\n if (props[SYNC_STATUS]() === 'synced') {\n resolve();\n } else {\n resolves.push(resolve);\n }\n }),\n };\n }),\n withMethods((store, platformId = inject(PLATFORM_ID)) => {\n return factory(config, store, isPlatformServer(platformId));\n }),\n withHooks({\n async onInit(store, platformId = inject(PLATFORM_ID)) {\n if (isPlatformServer(platformId)) {\n return;\n }\n\n const initialState = JSON.stringify(getState(store));\n if (config.autoSync) {\n let startWatching = false;\n watchState(store, () => {\n if (!startWatching) {\n const currentState = JSON.stringify(getState(store));\n\n // Necessary because getState returns always a new object\n if (currentState === initialState) {\n return;\n }\n\n console.warn(\n `Writing to Store (${config.key}) happened before the state was initially read from storage.`,\n 'Please ensure that the store is not in syncing state via `store.whenSynced()` before writing to the state.',\n 'Alternatively, you can disable autoSync by passing `autoSync: false` in the config.',\n );\n return;\n }\n return store.writeToStorage();\n });\n\n await store.readFromStorage();\n startWatching = true;\n }\n },\n }),\n ) satisfies SignalStoreFeature<EmptyFeatureResult, AsyncFeatureResult>;\n}\n","import {\n signalStoreFeature,\n SignalStoreFeature,\n SignalStoreFeatureResult,\n StateSignals,\n withState,\n} from '@ngrx/signals';\n\n/**\n * `withConditional` activates a feature based on a given condition.\n *\n * **Use Cases**\n * - Conditionally activate features based on the **store state** or other criteria.\n * - Choose between **two different implementations** of a feature.\n *\n * **Type Constraints**\n * Both features must have **exactly the same state, props, and methods**.\n * Otherwise, a type error will occur.\n *\n *\n * **Usage**\n *\n * ```typescript\n * const withUser = signalStoreFeature(\n * withState({ id: 1, name: 'Konrad' }),\n * withHooks(store => ({\n * onInit() {\n * // user loading logic\n * }\n * }))\n * );\n *\n * function withFakeUser() {\n * return signalStoreFeature(\n * withState({ id: 0, name: 'anonymous' })\n * );\n * }\n *\n * signalStore(\n * withMethods(() => ({\n * useRealUser: () => true\n * })),\n * withConditional((store) => store.useRealUser(), withUser, withFakeUser)\n * )\n * ```\n *\n * @param condition - A function that determines which feature to activate based on the store state.\n * @param featureIfTrue - The feature to activate if the condition evaluates to `true`.\n * @param featureIfFalse - The feature to activate if the condition evaluates to `false`.\n * @returns A `SignalStoreFeature` that applies the selected feature based on the condition.\n */\nexport function withConditional<\n Input extends SignalStoreFeatureResult,\n Output extends SignalStoreFeatureResult,\n>(\n condition: (\n store: StateSignals<Input['state']> & Input['props'] & Input['methods'],\n ) => boolean,\n featureIfTrue: SignalStoreFeature<NoInfer<Input>, Output>,\n featureIfFalse: SignalStoreFeature<NoInfer<Input>, NoInfer<Output>>,\n): SignalStoreFeature<Input, Output> {\n return (store) => {\n const conditionStore = {\n ...store['stateSignals'],\n ...store['props'],\n ...store['methods'],\n };\n return condition(conditionStore)\n ? featureIfTrue(store)\n : featureIfFalse(store);\n };\n}\n\nexport const emptyFeature = signalStoreFeature(withState({}));\n","import {\n SignalStoreFeature,\n SignalStoreFeatureResult,\n StateSignals,\n} from '@ngrx/signals';\n\ntype StoreForFactory<Input extends SignalStoreFeatureResult> = StateSignals<\n Input['state']\n> &\n Input['props'] &\n Input['methods'];\n\n/**\n * @deprecated Use `import { withFeature } from '@ngrx/signals'` instead, starting with `ngrx/signals` 19.1: https://ngrx.io/guide/signals/signal-store/custom-store-features#connecting-a-custom-feature-with-the-store\n *\n * Allows to pass properties, methods, or signals from a SignalStore\n * to a feature.\n *\n * Typically, a `signalStoreFeature` can have input constraints on\n *\n * ```typescript\n * function withSum(a: Signal<number>, b: Signal<number>) {\n * return signalStoreFeature(\n * withComputed(() => ({\n * sum: computed(() => a() + b())\n * }))\n * );\n * }\n *\n * signalStore(\n * withState({ a: 1, b: 2 }),\n * withFeatureFactory((store) => withSum(store.a, store.b))\n * );\n * ```\n * @param factoryFn\n */\nexport function withFeatureFactory<\n Input extends SignalStoreFeatureResult,\n Output extends SignalStoreFeatureResult,\n>(\n factoryFn: (\n store: StoreForFactory<Input>,\n ) => SignalStoreFeature<Input, Output>,\n): SignalStoreFeature<Input, Output> {\n return (store) => {\n const storeForFactory = {\n ...store['stateSignals'],\n ...store['props'],\n ...store['methods'],\n } as StoreForFactory<Input>;\n\n const feature = factoryFn(storeForFactory);\n\n return feature(store);\n };\n}\n","import {\n concatMap,\n exhaustMap,\n mergeMap,\n ObservableInput,\n ObservedValueOf,\n OperatorFunction,\n switchMap,\n} from 'rxjs';\n\nexport type RxJsFlatteningOperator = <T, O extends ObservableInput<unknown>>(\n project: (value: T, index: number) => O,\n) => OperatorFunction<T, ObservedValueOf<O>>;\n\n/**\n * A wrapper for an RxJS flattening operator.\n * This wrapper informs about whether the operator has exhaust semantics or not.\n */\nexport type FlatteningOperator = {\n rxJsOperator: RxJsFlatteningOperator;\n exhaustSemantics: boolean;\n};\n\nexport const switchOp: FlatteningOperator = {\n rxJsOperator: switchMap,\n exhaustSemantics: false,\n};\n\nexport const mergeOp: FlatteningOperator = {\n rxJsOperator: mergeMap,\n exhaustSemantics: false,\n};\n\nexport const concatOp: FlatteningOperator = {\n rxJsOperator: concatMap,\n exhaustSemantics: false,\n};\n\nexport const exhaustOp: FlatteningOperator = {\n rxJsOperator: exhaustMap,\n exhaustSemantics: true,\n};\n","import { computed, DestroyRef, inject, Injector, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n catchError,\n defer,\n EMPTY,\n finalize,\n Observable,\n Subject,\n tap,\n} from 'rxjs';\n\nimport { concatOp, FlatteningOperator } from '../flattening-operator';\nimport { Mutation, MutationResult, MutationStatus } from './mutation';\n\nexport type Operation<Parameter, Result> = (param: Parameter) => Result;\n\nexport interface RxMutationOptions<Parameter, Result> {\n operation: Operation<Parameter, Observable<Result>>;\n onSuccess?: (result: Result, param: Parameter) => void;\n onError?: (error: unknown, param: Parameter) => void;\n operator?: FlatteningOperator;\n injector?: Injector;\n}\n\n/**\n * Creates a mutation that leverages RxJS.\n *\n * For each mutation the following options can be defined:\n * - `operation`: A function that defines the mutation logic. It returns an Observable.\n * - `onSuccess`: A callback that is called when the mutation is successful.\n * - `onError`: A callback that is called when the mutation fails.\n * - `operator`: An optional wrapper of an RxJS flattening operator. By default `concat` sematics are used.\n * - `injector`: An optional Angular injector to use for dependency injection.\n *\n * The `operation` is the only mandatory option.\n *\n * The returned mutation can be called as an async function and returns a Promise.\n * This promise informs about whether the mutation was successful, failed, or aborted\n * (due to switchMap or exhaustMap semantics).\n *\n * The mutation also provides several Signals such as error, status or isPending (see below).\n *\n * Example usage without Store:\n *\n * ```typescript\n * const counterSignal = signal(0);\n *\n * const increment = rxMutation({\n * operation: (param: Param) => {\n * return calcSum(this.counterSignal(), param.value);\n * },\n * operator: concatOp,\n * onSuccess: (result) => {\n * this.counterSignal.set(result);\n * },\n * onError: (error) => {\n * console.error('Error occurred:', error);\n * },\n * });\n *\n * const error = increment.error;\n * const isPending = increment.isPending;\n * const status = increment.status;\n * const value = increment.value;\n * const hasValue = increment.hasValue;\n *\n * async function incrementCounter() {\n * const result = await increment({ value: 1 });\n * if (result.status === 'success') {\n * console.log('Success:', result.value);\n * }\n * if (result.status === 'error') {\n * console.log('Error:', result.error);\n * }\n * if (result.status === 'aborted') {\n * console.log('Operation aborted');\n * }\n * }\n *\n * function calcSum(a: number, b: number): Observable<number> {\n * return of(result).pipe(delay(500));\n * }\n * ```\n *\n * @param options\n * @returns the actual mutation function along tracking data as properties/methods\n */\nexport function rxMutation<Parameter, Result>(\n optionsOrOperation:\n | RxMutationOptions<Parameter, Result>\n | Operation<Parameter, Observable<Result>>,\n): Mutation<Parameter, Result> {\n const inputSubject = new Subject<{\n param: Parameter;\n resolve: (result: MutationResult<Result>) => void;\n }>();\n\n const options =\n typeof optionsOrOperation === 'function'\n ? { operation: optionsOrOperation }\n : optionsOrOperation;\n\n const flatteningOp = options.operator ?? concatOp;\n\n const destroyRef = options.injector?.get(DestroyRef) ?? inject(DestroyRef);\n\n const callCount = signal(0);\n const errorSignal = signal<unknown>(undefined);\n const idle = signal(true);\n const isPending = computed(() => callCount() > 0);\n const value = signal<Result | undefined>(undefined);\n const isSuccess = computed(() => !idle() && !isPending() && !errorSignal());\n\n const hasValue = function (\n this: Mutation<Parameter, Result>,\n ): this is Mutation<Exclude<Parameter, undefined>, Result> {\n return typeof value() !== 'undefined';\n };\n\n const status = computed<MutationStatus>(() => {\n if (idle()) {\n return 'idle';\n }\n if (callCount() > 0) {\n return 'pending';\n }\n if (errorSignal()) {\n return 'error';\n }\n return 'success';\n });\n\n const initialInnerStatus: MutationStatus = 'idle';\n let innerStatus: MutationStatus = initialInnerStatus;\n\n inputSubject\n .pipe(\n flatteningOp.rxJsOperator((input) =>\n defer(() => {\n callCount.update((c) => c + 1);\n idle.set(false);\n return options.operation(input.param).pipe(\n tap((result: Result) => {\n options.onSuccess?.(result, input.param);\n innerStatus = 'success';\n errorSignal.set(undefined);\n value.set(result);\n }),\n catchError((error: unknown) => {\n options.onError?.(error, input.param);\n errorSignal.set(error);\n value.set(undefined);\n innerStatus = 'error';\n return EMPTY;\n }),\n finalize(() => {\n callCount.update((c) => c - 1);\n\n if (innerStatus === 'success') {\n input.resolve({\n status: 'success',\n value: value() as Result,\n });\n } else if (innerStatus === 'error') {\n input.resolve({\n status: 'error',\n error: errorSignal(),\n });\n } else {\n input.resolve({\n status: 'aborted',\n });\n }\n\n innerStatus = initialInnerStatus;\n }),\n );\n }),\n ),\n takeUntilDestroyed(destroyRef),\n )\n .subscribe();\n\n const mutationFn = (param: Parameter) => {\n return new Promise<MutationResult<Result>>((resolve) => {\n if (callCount() > 0 && flatteningOp.exhaustSemantics) {\n resolve({\n status: 'aborted',\n });\n } else {\n inputSubject.next({\n param,\n resolve,\n });\n }\n });\n };\n\n const mutation = mutationFn as Mutation<Parameter, Result>;\n mutation.status = status;\n mutation.isPending = isPending;\n mutation.error = errorSignal;\n mutation.value = value;\n mutation.hasValue = hasValue;\n mutation.isSuccess = isSuccess;\n return mutation;\n}\n","//** Types for `withResource` */\n\nimport {\n isSignal,\n Resource,\n ResourceRef,\n ResourceStatus,\n Signal,\n untracked,\n WritableSignal,\n} from '@angular/core';\nimport {\n signalStoreFeature,\n SignalStoreFeature,\n SignalStoreFeatureResult,\n StateSignals,\n withLinkedState,\n withMethods,\n withProps,\n} from '@ngrx/signals';\n\nexport type ResourceResult<T> = {\n state: { value: T };\n props: {\n status: Signal<ResourceStatus>;\n error: Signal<Error | undefined>;\n isLoading: Signal<boolean>;\n };\n methods: {\n hasValue(): this is Resource<Exclude<T, undefined>>;\n _reload(): boolean;\n };\n};\n\nexport type ResourceDictionary = Record<string, ResourceRef<unknown>>;\n\nexport type NamedResourceResult<\n T extends ResourceDictionary,\n HasUndefinedErrorHandling extends boolean,\n> = {\n state: {\n [Prop in keyof T as `${Prop &\n string}Value`]: T[Prop]['value'] extends Signal<infer S>\n ? HasUndefinedErrorHandling extends true\n ? S | undefined\n : S\n : never;\n };\n props: {\n [Prop in keyof T as `${Prop & string}Status`]: Signal<ResourceStatus>;\n } & {\n [Prop in keyof T as `${Prop & string}Error`]: Signal<Error | undefined>;\n } & {\n [Prop in keyof T as `${Prop & string}IsLoading`]: Signal<boolean>;\n };\n methods: {\n [Prop in keyof T as `${Prop & string}HasValue`]: () => this is Resource<\n Exclude<T[Prop]['value'], undefined>\n >;\n } & {\n [Prop in keyof T as `_${Prop & string}Reload`]: () => boolean;\n };\n};\n\nexport type ErrorHandling = 'native' | 'undefined value' | 'previous value';\n\nexport type ResourceOptions = {\n errorHandling?: ErrorHandling;\n};\n\nconst defaultOptions: Required<ResourceOptions> = {\n errorHandling: 'undefined value',\n};\n\n//** Implementation of `withResource` */\n\n/**\n * @experimental\n * @description\n *\n * Integrates a `Resource` into the SignalStore and makes the store instance\n * implement the `Resource` interface.\n *\n * The resource's value is stored under the `value` key in the state\n * and is exposed as a `DeepSignal`.\n *\n * It can also be updated via `patchState`.\n *\n * @usageNotes\n *\n * ```ts\n * const UserStore = signalStore(\n * withState({ userId: undefined as number | undefined }),\n * withResource(({ userId }) =>\n * httpResource<User>(() =>\n * userId === undefined ? undefined : `/users/${userId}`\n * )\n * )\n * );\n *\n * const userStore = new UserStore();\n * userStore.value(); // User | undefined\n * ```\n *\n * @param resourceFactory A factory function that receives the store's state signals,\n * methods, and props.\n * @param resourceOptions Allows configuration of the error handling behavior.\n */\nexport function withResource<\n Input extends SignalStoreFeatureResult,\n ResourceValue,\n>(\n resourceFactory: (\n store: Input['props'] & Input['methods'] & StateSignals<Input['state']>,\n ) => ResourceRef<ResourceValue>,\n): SignalStoreFeature<Input, ResourceResult<ResourceValue | undefined>>;\n\nexport function withResource<\n Input extends SignalStoreFeatureResult,\n ResourceValue,\n>(\n resourceFactory: (\n store: Input['props'] & Input['methods'] & StateSignals<Input['state']>,\n ) => ResourceRef<ResourceValue>,\n resourceOptions: { errorHandling: 'undefined value' },\n): SignalStoreFeature<Input, ResourceResult<ResourceValue | undefined>>;\n\nexport function withResource<\n Input extends SignalStoreFeatureResult,\n ResourceValue,\n>(\n resourceFactory: (\n store: Input['props'] & Input['methods'] & StateSignals<Input['state']>,\n ) => ResourceRef<ResourceValue>,\n resourceOptions?: ResourceOptions,\n): SignalStoreFeature<Input, ResourceResult<ResourceValue>>;\n\n/**\n * @experimental\n * @description\n *\n * Integrates multiple resources into the SignalStore. Each resource is\n * registered by name, which is used as a prefix when spreading the members\n * of `Resource` onto the store.\n *\n * Each resource’s value is part of the state, stored under the `value` key\n * with the resource name as prefix. Values are exposed as `DeepSignal`s and\n * can be updated via `patchState`.\n *\n * @usageNotes\n *\n * ```ts\n * const UserStore = signalStore(\n * withState({ userId: undefined as number | undefined }),\n * withResource(({ userId }) => ({\n * list: httpResource<User[]>(() => '/users', { defaultValue: [] }),\n * detail: httpResource<User>(() =>\n * userId === undefined ? undefined : `/users/${userId}`\n * ),\n * }))\n * );\n *\n * const userStore = new UserStore();\n * userStore.listValue(); // []\n * userStore.detailValue(); // User | undefined\n * ```\n *\n * @param resourceFactory A factory function that receives the store's props,\n * methods, and state signals. It must return a `Record<string, ResourceRef>`.\n * @param resourceOptions Allows to configure the error handling behavior.\n */\nexport function withResource<\n Input extends SignalStoreFeatureResult,\n Dictionary extends ResourceDictionary,\n>(\n resourceFactory: (\n store: Input['props'] & Input['methods'] & StateSignals<Input['state']>,\n ) => Dictionary,\n): SignalStoreFeature<Input, NamedResourceResult<Dictionary, true>>;\n\nexport function withResource<\n Input extends SignalStoreFeatureResult,\n Dictionary extends ResourceDictionary,\n>(\n resourceFactory: (\n store: Input['props'] & Input['methods'] & StateSignals<Input['state']>,\n ) => Dictionary,\n resourceOptions: { errorHandling: 'undefined value' },\n): SignalStoreFeature<Input, NamedResourceResult<Dictionary, true>>;\n\nexport function withResource<\n Input extends SignalStoreFeatureResult,\n Dictionary extends ResourceDictionary,\n>(\n resourceFactory: (\n store: Input['props'] & Input['methods'] & StateSignals<Input['state']>,\n ) => Dictionary,\n resourceOptions?: ResourceOptions,\n): SignalStoreFeature<Input, NamedResourceResult<Dictionary, false>>;\n\nexport function withResource<\n Input extends SignalStoreFeatureResult,\n ResourceValue,\n>(\n resourceFactory: (\n store: Input['props'] & Input['methods'] & StateSignals<Input['state']>,\n ) => ResourceRef<ResourceValue> | ResourceDictionary,\n resourceOptions?: ResourceOptions,\n): SignalStoreFeature<Input> {\n const options: Required<ResourceOptions> = {\n ...defaultOptions,\n ...(resourceOptions || {}),\n };\n return (store) => {\n const resourceOrDictionary = resourceFactory({\n ...store.stateSignals,\n ...store.props,\n ...store.methods,\n });\n\n if (isResourceRef(resourceOrDictionary)) {\n return createUnnamedResource(\n resourceOrDictionary,\n options.errorHandling,\n )(store);\n } else {\n return createNamedResource(\n resourceOrDictionary,\n options.errorHandling,\n )(store);\n }\n };\n}\n\nfunction createUnnamedResource<ResourceValue>(\n resource: ResourceRef<ResourceValue>,\n errorHandling: ErrorHandling,\n) {\n function hasValue(): this is Resource<Exclude<ResourceValue, undefined>> {\n return resource.hasValue();\n }\n\n return signalStoreFeature(\n withLinkedState(() => ({\n value: valueSignalForErrorHandling(resource, errorHandling),\n })),\n withProps(() => ({\n status: resource.status,\n error: resource.error,\n isLoading: resource.isLoading,\n })),\n withMethods(() => ({\n hasValue,\n _reload: () => resource.reload(),\n })),\n );\n}\n\nfunction createNamedResource<Dictionary extends ResourceDictionary>(\n dictionary: Dictionary,\n errorHandling: ErrorHandling,\n) {\n const keys = Object.keys(dictionary);\n\n const state: Record<string, WritableSignal<unknown>> = keys.reduce(\n (state, resourceName) => ({\n ...state,\n [`${resourceName}Value`]: valueSignalForErrorHandling(\n dictionary[resourceName],\n errorHandling,\n ),\n }),\n {},\n );\n\n const props: Record<string, Signal<unknown>> = keys.reduce(\n (props, resourceName) => ({\n ...props,\n [`${resourceName}Status`]: dictionary[resourceName].status,\n [`${resourceName}Error`]: dictionary[resourceName].error,\n [`${resourceName}IsLoading`]: dictionary[resourceName].isLoading,\n }),\n {},\n );\n\n const methods: Record<string, () => boolean> = keys.reduce(\n (methods, resourceName) => {\n return {\n ...methods,\n [`${resourceName}HasValue`]: () => dictionary[resourceName].hasValue(),\n [`_${resourceName}Reload`]: () => dictionary[resourceName].reload(),\n };\n },\n {},\n );\n\n return signalStoreFeature(\n withLinkedState(() => state),\n withProps(() => props),\n withMethods(() => methods),\n );\n}\n\nexport function isResourceRef(value: unknown): value is ResourceRef<unknown> {\n return (\n value !== null &&\n typeof value === 'object' &&\n 'value' in value &&\n isSignal(value.value) &&\n 'status' in value &&\n 'error' in value &&\n 'isLoading' in value &&\n 'hasValue' in value &&\n 'reload' in value\n );\n}\n\n//** Types for `mapToResource` */\n\ntype NamedResource<Name extends string, T> = {\n [Prop in `${Name}Value`]: Signal<T>;\n} & {\n [Prop in `${Name}Status`]: Signal<ResourceStatus>;\n} & {\n [Prop in `${Name}Error`]: Signal<Error | undefined>;\n} & {\n [Prop in `${Name}IsLoading`]: Signal<boolean>;\n} & {\n [Prop in `${Name}HasValue`]: () => boolean;\n};\n\ntype IsValidResourceName<\n Name extends string,\n Store extends Record<string, unknown>,\n> =\n Store[`${Name}Value`] extends Signal<infer S>\n ? Store extends NamedResource<Name, S>\n ? true\n : false\n : false;\n\nexport type ResourceNames<Store extends Record<string, unknown>> = keyof {\n [Prop in keyof Store as Prop extends `${infer Name}Value`\n ? IsValidResourceName<Name, Store> extends true\n ? Name\n : never\n : never]: Store[Prop] extends Signal<infer S> ? S : never;\n};\n\ntype MappedResource<\n Store extends Record<string, unknown>,\n Name extends string,\n> = Resource<Store[`${Name}Value`] extends Signal<infer S> ? S : never>;\n\n//** Implementation of `mapToResource` */\n\n/**\n * @experimental\n * @description\n *\n * Maps a named resource to type `Resource<T>`.\n *\n * @usageNotes\n *\n * ```ts\n * const store = signalStore(\n * withState({ userId: undefined as number | undefined }),\n * withResource(({ userId }) => ({\n * user: httpResource<User[]>(() => '/users', { defaultValue: [] }),\n * }))\n * );\n * const userResource = mapToResource(store, 'user');\n * userResource satisfies Resource<User[]>;\n * ```\n *\n * @param store The store instance to map the resource to.\n * @param name The name of the resource to map.\n * @returns `ResourceRef<T>`\n */\nexport function mapToResource<\n Name extends ResourceNames<Store>,\n Store extends Record<string, unknown>,\n>(store: Store, name: Name): MappedResource<Store, Name> {\n const resourceName = String(name);\n\n function hasValue(): this is Resource<\n Exclude<MappedResource<Store, Name>, undefined>\n > {\n return (store[`${resourceName}HasValue`] as () => boolean)();\n }\n\n return {\n value: store[`${resourceName}Value`],\n status: store[`${resourceName}Status`],\n error: store[`${resourceName}Error`],\n isLoading: store[`${resourceName}IsLoading`],\n hasValue,\n } as MappedResource<Store, Name>;\n}\n\n/**\n * Strategies to work around the error throwing behavior of the Resource API.\n *\n * The original idea was to use a `linkedSignal` as the state's value Signal. It would mean\n * that we can leverage the `computation` callback to handle the error. The downside is that\n * changes to that signal will not be reflected in the underlying resource, i.e. the resource\n * will not switch to status `local`.\n *\n * 1. An option to fix that would be to put the `linkedSignal` as property in the SignalStore,\n * where it would have the name `value`. Given, we apply a `DeepSignal` to it, it would not\n * break from the outside. The original value would be put into the state behind a hidden Symbol\n * as property name. In order to update the state, users will get an updater function, called\n * `setResource`.\n *\n * That works perfectly for unnamed resources, but could cause potential problems\n * for named resources, when they are defined multiple times, i.e. calling `withResource`\n * multiple times. The reason is that, we would have to hide their values in the state again\n * behind a symbol, but that would be a property which gets defined once, and would get new\n * subproperties (the values of the resources) added per additional `withResource` call.\n *\n * Using a separate updated method is a common SignalStore pattern, which is also used\n * in `withEntities`.\n *\n * For named resources, `setResource` would come with a name as first parameter.\n *\n * We saw in earlier experiments that there are TypeScript-specific challenges.\n *\n * Pros:\n * - Uses Angular's native `linkedSignal` and isn't a hackish approach\n * - Status transitions to 'local' work correctly (via direct `res.value.set()` in `setResource`)\n * - Works with `patchState`/`getState` (`linkedSignal` handles errors on read)\n * - Clear, explicit API with dedicated `setResource()` method\n *\n * Cons:\n * - Requires API change: users must use `setResource()` instead of `patchState(store, { value })`\n * - Named resources with multiple `withResource` calls: hidden state management becomes complex\n *\n * 2. A possible alternative would be to use a Proxy on value. Instead of using a `linkedSignal`,\n * we can leave the value signal as is and create a proxy around it that intercepts the get/call\n * operation and handles the error. The downside is that we need to implement the proxy ourselves,\n * which is not as clean as using a `linkedSignal`. On the other hand, there are indicators that\n * in future version of Angular, there are better ways of handling errors, which means that this\n * approach is only temporary.\n *\n * It could also happen, that we are getting some sort of \"Mapped Signal\", where not just the\n * reading (as in `linkedSignal`) but also the writing is handled.\n *\n * Pros:\n * - No API changes: `patchState(store, { value: x })` works naturally\n * - Status transitions to 'local' work correctly (writes go directly to original signal)\n * - Works with `patchState`/`getState` (proxy intercepts reads and handles errors)\n * - Uniform solution: same approach for both named and unnamed resources\n * - Transparent: looks and behaves like a normal signal from the outside\n *\n * Cons:\n * - Manual implementation: must properly handle all signal methods (`set`, `update`, `asReadonly`, etc.)\n * - Dependency tracking: need to verify proxy doesn't break Angular's reactivity system\n * - More complex proxy logic required for 'previous value' strategy (caching previous values)\n * - Less \"Angular-native\": doesn't leverage `linkedSignal`'s built-in reactivity guarantees\n *\n * =====\n *\n * The decision was made to use the proxy approach, because it is temporary and will not be\n * a breaking change.\n */\nfunction valueSignalForErrorHandling<T>(\n res: ResourceRef<T>,\n errorHandling: 'undefined value',\n): WritableSignal<T | undefined>;\n\nfunction valueSignalForErrorHandling<T>(\n res: ResourceRef<T>,\n errorHandling: ErrorHandling,\n): WritableSignal<T>;\n\nfunction valueSignalForErrorHandling<T>(\n res: ResourceRef<T>,\n errorHandling: ErrorHandling,\n): WritableSignal<T | undefined> {\n const originalSignal = res.value;\n\n switch (errorHandling) {\n case 'native':\n return originalSignal;\n case 'undefined value': {\n return new Proxy(originalSignal, {\n apply(target) {\n const status = untracked(() => res.status());\n try {\n // Always call the underlying signal to ensure reactivity.\n const value = target();\n if (status === 'error') {\n return undefined;\n }\n return value;\n } catch (error) {\n if (status === 'error') {\n return undefined;\n }\n throw error;\n }\n },\n });\n }\n case 'previous value': {\n let previousValue: T | undefined = undefined;\n let hasPreviousValue = false;\n\n return new Proxy(originalSignal, {\n apply(target) {\n const status = untracked(() => res.status());\n try {\n // Always call the underlying signal to ensure reactivity.\n const value = target();\n if (status === 'error') {\n if (!hasPreviousValue) {\n throw new Error(\n 'Impossible state: previous value is not available -> resource was initialized with error',\n );\n }\n return previousValue;\n }\n previousValue = value;\n hasPreviousValue = true;\n return value;\n } catch (error) {\n if (status === 'error') {\n if (!hasPreviousValue) {\n throw new Error(\n 'Impossible state: previous value is not available -> resource was initialized with error',\n );\n }\n return previousValue;\n }\n throw error;\n }\n },\n });\n }\n }\n}\n","import { ResourceRef, Signal, isSignal, linkedSignal } from '@angular/core';\nimport {\n SignalStoreFeature,\n SignalStoreFeatureResult,\n StateSignals,\n signalStoreFeature,\n withComputed,\n withLinkedState,\n} from '@ngrx/signals';\nimport {\n EntityId,\n EntityProps,\n EntityState,\n NamedEntityProps,\n NamedEntityState,\n} from '@ngrx/signals/entities';\nimport {\n NamedResourceResult,\n ResourceResult,\n isResourceRef,\n withResource,\n} from './with-resource';\n\n/**\n * @experimental\n * @description\n *\n * Integrates array-based `Resource` data into Entity-style state for NgRx SignalStore.\n * This feature builds on {@link withResource} to provide an entity view over\n * array resources.\n *\n * - For a single (unnamed) resource: exposes `value`, `status`, `error`, `isLoading`\n * from the underlying resource (via `withResource`), and derives\n * `ids`, `entityMap`, and `entities` via `withLinkedState`/`withComputed`.\n * - For multiple (named) resources: registers each resource by name and exposes\n * the same members prefixed with the resource name, e.g. `todosIds`,\n * `todosEntityMap`, `todosEntities`, along with `todosValue`, `todosStatus`, etc.\n *\n * No effects are used. All derived signals are linked to the resource's value\n * through `withLinkedState`, so entity updaters such as `addEntity`, `updateEntity`,\n * and `removeEntity` mutate the store's entity view without directly writing to the\n * resource. The source of truth remains the resource value.\n *\n * @usageNotes\n *\n * Unnamed resource example:\n *\n * ```ts\n * type Todo = { id: number; title: string; completed: boolean };\n *\n * const Store = signalStore(\n * { providedIn: 'root' },\n * withEntityResources(() =>\n * resource({ loader: () => Promise.resolve([] as Todo[]), defaultValue: [] }),\n * ),\n * );\n *\n * const store = TestBed.inject(Store);\n * store.status(); // 'idle' | 'loading' | 'resolved' | 'error' | 'local'\n * store.value(); // Todo[]\n * store.ids(); // EntityId[]\n * store.entityMap(); // Record<EntityId, Todo>\n * store.entities(); // Todo[]\n *\n * // Works with @ngrx/signals/entities updaters\n * patchState(store, addEntity({ id: 1, title: 'X', completed: false }));\n * ```\n *\n * Named resources example:\n *\n * ```ts\n * const Store = signalStore(\n * { providedIn: 'root' },\n * withEntityResources(() => ({\n * todos: resource({ loader: () => Promise.resolve([] as Todo[]), defaultValue: [] }),\n * projects: resource({ loader: () => Promise.resolve([] as { id: number; name: string }[]), defaultValue: [] }),\n * })),\n * );\n *\n * const store = TestBed.inject(Store);\n * store.todosValue();\n * store.todosIds();\n * store.todosEntityMap();\n * store.todosEntities();\n * patchState(store, addEntity({ id: 2, title: 'Y', completed: true }, { collection: 'todos' }));\n * ```\n *\n * @see {@link withResource}\n */\nexport function withEntityResources<\n Input extends SignalStoreFeatureResult,\n Entity extends { id: EntityId },\n>(\n resourceFactory: (\n store: Input['props'] & Input['methods'] & StateSignals<Input['state']>,\n ) => ResourceRef<TypedEntityResourceValue<Entity>>,\n): SignalStoreFeature<Input, EntityResourceResult<Entity>>;\n\nexport function withEntityResources<\n Input extends SignalStoreFeatureResult,\n Dictionary extends EntityDictionary,\n>(\n resourceFactory: (\n store: Input['props'] & Input['methods'] & StateSignals<Input['state']>,\n ) => Dictionary,\n): SignalStoreFeature<Input, NamedEntityResourceResult<Dictionary>>;\n\nexport function withEntityResources<\n Input extends SignalStoreFeatureResult,\n ResourceValue extends EntityResourceValue,\n>(\n entityResourceFactory: (\n store: Input['props'] & Input['methods'] & StateSignals<Input['state']>,\n ) => ResourceRef<ResourceValue> | EntityDictionary,\n): SignalStoreFeature<Input> {\n return (store) => {\n const resourceOrDict = entityResourceFactory({\n ...store.stateSignals,\n ...store.props,\n ...store.methods,\n });\n\n if (isResourceRef(resourceOrDict)) {\n return createUnnamedEntityResource(resourceOrDict)(store);\n }\n return createNamedEntityResources(resourceOrDict)(store);\n };\n}\n\n/**\n * We cannot use the value of `resource` directly, but\n * have to use the one created through {@link withResource}\n * because {@link withResource} creates a Proxy around the resource value\n * to avoid the error throwing behavior of the Resource API.\n */\nfunction createUnnamedEntityResource<E extends Entity>(\n resource: ResourceRef<TypedEntityResourceValue<E>>,\n) {\n return signalStoreFeature(\n withResource(() => resource),\n withLinkedState(({ value }) => {\n const { ids, entityMap } = createEntityDerivations(value);\n\n return {\n entityMap,\n ids,\n };\n }),\n withComputed(({ ids, entityMap }) => ({\n entities: createComputedEntities(ids, entityMap),\n })),\n );\n}\n\n/**\n * See {@link createUnnamedEntityResource} for why we cannot use the value of `resource` directly.\n */\nfunction createNamedEntityResources<Dictionary extends EntityDictionary>(\n dictionary: Dictionary,\n) {\n const keys = Object.keys(dictionary);\n\n const stateFactories = keys.map((name) => {\n return (store: Record<string, unknown>) => {\n const resourceValue = store[\n `${name}Value`\n ] as Signal<EntityResourceValue>;\n if (!isSignal(resourceValue)) {\n throw new Error(`Resource's value ${name}Value does not exist`);\n }\n\n const { ids, entityMap } = createEntityDerivations(resourceValue);\n\n return {\n [`${name}EntityMap`]: entityMap,\n [`${name}Ids`]: ids,\n };\n };\n });\n\n const computedFactories = keys.map((name) => {\n return (store: Record<string, unknown>) => {\n const ids = store[`${name}Ids`] as Signal<EntityId[]>;\n const entityMap = store[`${name}EntityMap`] as Signal<\n Record<EntityId, Entity>\n >;\n\n if (!isSignal(ids)) {\n throw new Error(`Entity Resource's ids ${name}Ids does not exist`);\n }\n if (!isSignal(entityMap)) {\n throw new Error(\n `Entity Resource's entityMap ${name}EntityMap does not exist`,\n );\n }\n\n return {\n [`${name}Entities`]: createComputedEntities(ids, entityMap),\n };\n };\n });\n\n return signalStoreFeature(\n withResource(() => dictionary),\n withLinkedState((store) =>\n stateFactories.reduce(\n (acc, factory) => ({ ...acc, ...factory(store) }),\n {},\n ),\n ),\n withComputed((store) =>\n computedFactories.reduce(\n (acc, factory) => ({ ...acc, ...factory(store) }),\n {},\n ),\n ),\n );\n}\n\n// Types for `withEntityResources`\n/**\n * @internal\n * @description\n *\n * Type composition notes: we intentionally do not duplicate or re-declare\n * types that already exist in `@ngrx/signals/entities` or in this library's\n * `with-resource` feature. Instead, we compose the resulting API via\n * intersections of those public contracts.\n *\n * Rationale:\n * - Keeps our types in sync with upstream sources and avoids drift.\n * - Reduces maintenance overhead and duplication.\n * - Ensures consumers benefit automatically from upstream typing fixes.\n *\n * Concretely:\n * - For unnamed resources we return `ResourceResult<Entity>` intersected with\n * `EntityState<Entity>` and `EntityProps<Entity>`.\n * - For named resources we return `NamedResourceResult<T>` intersected with\n * `NamedEntityState<E, Name>` and `NamedEntityProps<E, Name>` for each entry.\n */\nexport type EntityResourceResult<Entity> = {\n state: ResourceResult<Entity>['state'] & EntityState<Entity>;\n props: ResourceResult<Entity>['props'] & EntityProps<Entity>;\n methods: ResourceResult<Entity>['methods'];\n};\n\n// Generic helpers for inferring entity types and merging unions\ntype ArrayElement<T> = T extends readonly (infer E)[] | (infer E)[] ? E : never;\n\ntype InferEntityFromSignal<T> =\n T extends Signal<infer V> ? ArrayElement<V> : never;\n\ntype MergeUnion<U> = (U extends unknown ? (k: U) => void : never) extends (\n k: infer I,\n) => void\n ? I\n : never;\n\ntype Entity = { id: EntityId };\n\ntype EntityResourceValue = Entity[] | (Entity[] | undefined);\n\ntype TypedEntityResourceValue<E extends Entity> = E[] | (E[] | undefined);\n\nexport type EntityDictionary = Record<string, ResourceRef<EntityResourceValue>>;\n\ntype MergeNamedEntityStates<T extends EntityDictionary> = MergeUnion<\n {\n [Prop in keyof T]: Prop extends string\n ? InferEntityFromSignal<T[Prop]['value']> extends infer E\n ? E extends never\n ? never\n : NamedEntityState<E, Prop>\n : never\n : never;\n }[keyof T]\n>;\n\ntype MergeNamedEntityProps<T extends EntityDictionary> = MergeUnion<\n {\n [Prop in keyof T]: Prop extends string\n ? InferEntityFromSignal<T[Prop]['value']> extends infer E\n ? E extends never\n ? never\n : NamedEntityProps<E, Prop>\n : never\n : never;\n }[keyof T]\n>;\n\nexport type NamedEntityResourceResult<T extends EntityDictionary> = {\n state: NamedResourceResult<T, false>['state'] & MergeNamedEntityStates<T>;\n props: NamedResourceResult<T, false>['props'] & MergeNamedEntityProps<T>;\n methods: NamedResourceResult<T, false>['methods'];\n};\n\n/**\n * @internal\n * @description\n *\n * Creates the two entity-related state properties (`ids`, `entityMap`) from\n * a single source signal of entities. This mirrors the public contract of\n * `withEntities()`:\n * - `ids`: derived list of entity ids\n * - `entityMap`: map of id -> entity\n *\n * Implementation details:\n * - Uses `withLinkedState` + `linkedSignal` for `ids` and `entityMap` so they are\n * writable state signals in the store (updaters like `addEntity` can mutate them).\n * - `entities` is a pure `computed` derived from `ids` and `entityMap`, matching\n * the pattern in `withEntities` where `entities` is computed from the two bases.\n *\n * Why not `watchState` or `effect`?\n * - `watchState` would fire for any state change in the store, not just changes\n * to the underlying resource value. That would cause unnecessary recomputation\n * and make it harder to reason about updates.\n * - `effect` would introduce side-effects and lifecycle management for syncing,\n * which is heavier and not aligned with this feature's goal to be purely\n * derived from signals. Using linked signals keeps the data flow declarative\n * and avoids imperative syncing code.\n */\nfunction createEntityDerivations<E extends Entity>(\n source: Signal<TypedEntityResourceValue<E>>,\n) {\n const ids = linkedSignal({\n source,\n computation: (list) => (list ?? []).map((e) => e.id),\n });\n\n const entityMap = linkedSignal({\n source,\n computation: (list) => {\n const map = {} as Record<EntityId, E>;\n for (const item of list ?? []) {\n map[item.id] = item as E;\n }\n return map;\n },\n });\n\n return { ids, entityMap };\n}\n\nfunction createComputedEntities<E extends Entity>(\n ids: Signal<EntityId[]>,\n entityMap: Signal<Record<EntityId, E>>,\n) {\n return () => {\n return ids().map((id) => entityMap()[id]);\n };\n}\n","import { Signal } from '@angular/core';\nimport {\n EmptyFeatureResult,\n signalStoreFeature,\n SignalStoreFeature,\n SignalStoreFeatureResult,\n StateSignals,\n StateSource,\n withComputed,\n withMethods,\n WritableStateSource,\n} from '@ngrx/signals';\nimport { Mutation, MutationStatus } from './mutation/mutation';\n\n// NamedMutationMethods below will infer the actual parameter and return types\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype MutationsDictionary = Record<string, Mutation<any, any>>;\n\n// withMethods uses Record<string, Function> internally\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nexport type MethodsDictionary = Record<string, Function>;\n\ntype NamedMutationProps<T extends MutationsDictionary> = {\n [Prop in keyof T as `${Prop & string}IsPending`]: Signal<boolean>;\n} & {\n [Prop in keyof T as `${Prop & string}Status`]: Signal<MutationStatus>;\n} & {\n [Prop in keyof T as `${Prop & string}Error`]: Signal<Error | undefined>;\n};\n\ntype NamedMutationMethods<T extends MutationsDictionary> = {\n [Prop in keyof T as `${Prop & string}`]: T[Prop] extends Mutation<\n infer P,\n infer R\n >\n ? Mutation<P, R>\n : never;\n};\n\nexport type NamedMutationResult<T extends MutationsDictionary> =\n EmptyFeatureResult & {\n props: NamedMutationProps<T>;\n methods: NamedMutationMethods<T>;\n };\n\n/**\n * Adds mutation methods to the store. Also, for each mutation method, several\n * Signals are added informing about the mutation's status and errors.\n *\n * ```typescript\n * export type Params = {\n * value: number;\n * };\n *\n * export const CounterStore = signalStore(\n * { providedIn: 'root' },\n * withState({ counter: 0 }),\n * withMutations((store) => ({\n * increment: rxMutation({ ... }),\n * })),\n * );\n * ```\n *\n * There are several types of mutations. In the example shown, an {@link module:rx-mutation.rxMutation | rxMutation}\n * leveraging RxJS is used\n *\n * For the defined `increment` mutation, several the following properties and\n * methods are added to the store:\n * - `increment(params: Params): Promise<MutationResult<number>>`: The mutation method.\n * - `incrementIsPending`: A signal indicating if the mutation is in progress.\n * - `incrementStatus`: A signal representing the current status of the mutation.\n * - `incrementError`: A signal containing any error that occurred during the mutation.\n *\n * @param mutationsFactory\n */\nexport function withMutations<\n Input extends SignalStoreFeatureResult,\n Result extends MutationsDictionary,\n>(\n mutationsFactory: (\n store: Input['props'] &\n Input['methods'] &\n WritableStateSource<Input['state']> &\n StateSignals<Input['state']>,\n ) => Result,\n): SignalStoreFeature<Input, NamedMutationResult<Result>>;\n\nexport function withMutations<\n Input extends SignalStoreFeatureResult,\n Result extends MutationsDictionary,\n>(\n mutationsFactory: (\n store: Input['props'] & Input['methods'] & StateSource<Input['state']>,\n ) => Result,\n): SignalStoreFeature<Input> {\n return (store) => {\n // TODO: Is this the correct usage?\n const source = store as StateSource<typeof store.stateSignals>;\n const mutations = mutationsFactory({\n ...source,\n ...store.props,\n ...store.methods,\n ...store.stateSignals,\n });\n\n const feature = createMutationsFeature(mutations);\n return feature(store);\n };\n}\n\nfunction createMutationsFeature<Result extends MutationsDictionary>(\n mutations: Result,\n) {\n const keys = Object.keys(mutations);\n\n const feature = signalStoreFeature(\n withMethods(() =>\n keys.reduce(\n (acc, key) => ({\n ...acc,\n [key]: async (params: never) => {\n const mutation = mutations[key];\n if (!mutation) {\n throw new Error(`Mutation ${key} not found`);\n }\n const result = await mutation(params);\n return result;\n },\n }),\n {} as MethodsDictionary,\n ),\n ),\n withComputed(() =>\n keys.reduce(\n (acc, key) => ({\n ...acc,\n [`${key}IsPending`]: mutations[key].isPending,\n [`${key}Status`]: mutations[key].status,\n [`${key}Error`]: mutations[key].error,\n }),\n {} as NamedMutationProps<Result>,\n ),\n ),\n );\n return feature;\n}\n","import {\n HttpClient,\n HttpContext,\n HttpEventType,\n HttpHeaders,\n HttpParams,\n HttpProgressEvent,\n HttpResponse,\n} from '@angular/common/http';\nimport { inject, Signal, signal } from '@angular/core';\nimport { defer, filter, map, tap } from 'rxjs';\nimport { Mutation } from './mutation';\nimport { rxMutation, RxMutationOptions } from './rx-mutation';\n\n// The HttpClient defines these types as part of the method signature and\n// not as a named type\nexport type HttpMutationRequest = {\n url: string;\n method: string;\n body?: unknown;\n headers?: HttpHeaders | Record<string, string | string[]>;\n context?: HttpContext;\n reportProgress?: boolean;\n params?:\n | HttpParams\n | Record<\n string,\n string | number | boolean | ReadonlyArray<string | number | boolean>\n >;\n withCredentials?: boolean;\n credentials?: RequestCredentials;\n keepalive?: boolean;\n priority?: RequestPriority;\n cache?: RequestCache;\n mode?: RequestMode;\n redirect?: RequestRedirect;\n transferCache?:\n | {\n includeHeaders?: string[];\n }\n | boolean;\n};\n\nexport type HttpMutationOptions<Parameter, Result> = Omit<\n RxMutationOptions<Parameter, NoInfer<Result>>,\n 'operation'\n> & {\n request: (param: Parameter) => HttpMutationRequest;\n parse?: (response: unknown) => Result;\n};\n\nexport type HttpMutation<Parameter, Result> = Mutation<Parameter, Result> & {\n uploadProgress: Signal<HttpProgressEvent | undefined>;\n downloadProgress: Signal<HttpProgressEvent | undefined>;\n headers: Signal<HttpHeaders | undefined>;\n statusCode: Signal<string | undefined>;\n};\n\n/**\n * Creates an HTTP mutation.\n *\n * ```typescript\n * export type Params = {\n * value: number;\n * };\n *\n * export type CounterResponse = {\n * // httpbin.org echos the request using the\n * // json property\n * json: { counter: number };\n * };\n *\n * const simpleSaveUser = httpMutation({\n * request: (userData: AddUserEntry) => ({\n * url: 'api/users',\n * body: userData,\n * }),\n * parse: Boolean,\n * })\n *\n * const saveUser = httpMutation({\n * request: (p: Params) => ({\n * url: `https://httpbin.org/post`,\n * method: 'POST',\n * body: { counter: p.value },\n * headers: { 'Content-Type': 'application/json' },\n * }),\n * onSuccess: (response: CounterResponse) => {\n * console.log('Counter sent to server:', response);\n * },\n * onError: (error) => {\n * console.error('Failed to send counter:', error);\n * },\n * });\n *\n * const result = await this.saveUser({ value: 17 });\n * if (result.status === 'success') {\n * console.log('Successfully saved to server:', result.value);\n * }\n * else if (result.status === 'error') {\n * console.log('Failed to save:', result.error);\n * }\n * else {\n * console.log('Operation aborted');\n * }\n * ```\n *\n * @param options The options for the HTTP mutation.\n * @returns The HTTP mutation.\n */\nexport function httpMutation<Parameter, Result>(\n optionsOrRequest:\n | HttpMutationOptions<Parameter, Result>\n | ((param: Parameter) => HttpMutationRequest),\n): HttpMutation<Parameter, Result> {\n const httpClient = inject(HttpClient);\n\n const options =\n typeof optionsOrRequest === 'function'\n ? { request: optionsOrRequest }\n : optionsOrRequest;\n\n const parse = options.parse ?? ((raw: unknown) => raw as Result);\n\n const uploadProgress = signal<HttpProgressEvent | undefined>(undefined);\n const downloadProgress = signal<HttpProgressEvent | undefined>(undefined);\n const headers = signal<HttpHeaders | undefined>(undefined);\n const statusCode = signal<string | undefined>(undefined);\n\n const mutation = rxMutation({\n ...options,\n operation: (param: Parameter) => {\n const httpRequest = options.request(param);\n\n return defer(() => {\n uploadProgress.set(undefined);\n downloadProgress.set(undefined);\n headers.set(undefined);\n statusCode.set(undefined);\n\n return httpClient\n .request<Result>(httpRequest.method, httpRequest.url, {\n ...httpRequest,\n observe: 'events',\n responseType: 'json',\n })\n .pipe(\n tap((response) => {\n if (response.type === HttpEventType.UploadProgress) {\n uploadProgress.set(response);\n } else if (response.type === HttpEventType.DownloadProgress) {\n downloadProgress.set(response);\n }\n }),\n filter((event) => event instanceof HttpResponse),\n tap((response) => {\n headers.set(response.headers);\n statusCode.set(response.status.toString());\n }),\n map((event) => parse(event.body)),\n );\n });\n },\n }) as HttpMutation<Parameter, Result>;\n\n mutation.uploadProgress = uploadProgress;\n mutation.downloadProgress = downloadProgress;\n mutation.statusCode = statusCode;\n mutation.headers = headers;\n\n return mutation;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["originalPatchState","patchState","defaultOptions","ngIsInDevMode","tap"],"mappings":"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"}
|