@angular-architects/ngrx-toolkit 0.0.4 → 0.0.7

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.
@@ -0,0 +1,56 @@
1
+ import { isPlatformServer } from '@angular/common';
2
+ import { PLATFORM_ID, effect, inject } from '@angular/core';
3
+ import { getState, patchState, signalStoreFeature, withHooks, withMethods, } from '@ngrx/signals';
4
+ const NOOP = () => { };
5
+ const StorageSyncStub = {
6
+ clearStorage: NOOP,
7
+ readFromStorage: NOOP,
8
+ writeToStorage: NOOP,
9
+ };
10
+ export function withStorageSync(configOrKey) {
11
+ const { key, autoSync = true, select = (state) => state, parse = JSON.parse, stringify = JSON.stringify, storage: storageFactory = () => localStorage, } = typeof configOrKey === 'string' ? { key: configOrKey } : configOrKey;
12
+ return signalStoreFeature(withMethods((store, platformId = inject(PLATFORM_ID)) => {
13
+ if (isPlatformServer(platformId)) {
14
+ console.warn(`'withStorageSync' provides non-functional implementation due to server-side execution`);
15
+ return StorageSyncStub;
16
+ }
17
+ const storage = storageFactory();
18
+ return {
19
+ /**
20
+ * Removes the item stored in storage.
21
+ */
22
+ clearStorage() {
23
+ storage.removeItem(key);
24
+ },
25
+ /**
26
+ * Reads item from storage and patches the state.
27
+ */
28
+ readFromStorage() {
29
+ const stateString = storage.getItem(key);
30
+ if (stateString) {
31
+ patchState(store, parse(stateString));
32
+ }
33
+ },
34
+ /**
35
+ * Writes selected portion to storage.
36
+ */
37
+ writeToStorage() {
38
+ const slicedState = select(getState(store));
39
+ storage.setItem(key, stringify(slicedState));
40
+ },
41
+ };
42
+ }), withHooks({
43
+ onInit(store, platformId = inject(PLATFORM_ID)) {
44
+ if (isPlatformServer(platformId)) {
45
+ return;
46
+ }
47
+ if (autoSync) {
48
+ store.readFromStorage();
49
+ effect(() => {
50
+ store.writeToStorage();
51
+ });
52
+ }
53
+ },
54
+ }));
55
+ }
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1zdG9yYWdlLXN5bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL3dpdGgtc3RvcmFnZS1zeW5jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBRUwsUUFBUSxFQUNSLFVBQVUsRUFDVixrQkFBa0IsRUFDbEIsU0FBUyxFQUNULFdBQVcsR0FDWixNQUFNLGVBQWUsQ0FBQztBQVV2QixNQUFNLElBQUksR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7QUFZdEIsTUFBTSxlQUFlLEdBR047SUFDYixZQUFZLEVBQUUsSUFBSTtJQUNsQixlQUFlLEVBQUUsSUFBSTtJQUNyQixjQUFjLEVBQUUsSUFBSTtDQUNyQixDQUFDO0FBc0RGLE1BQU0sVUFBVSxlQUFlLENBSTdCLFdBQWdEO0lBRWhELE1BQU0sRUFDSixHQUFHLEVBQ0gsUUFBUSxHQUFHLElBQUksRUFDZixNQUFNLEdBQUcsQ0FBQyxLQUFZLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFDaEMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQ2xCLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUMxQixPQUFPLEVBQUUsY0FBYyxHQUFHLEdBQUcsRUFBRSxDQUFDLFlBQVksR0FDN0MsR0FBRyxPQUFPLFdBQVcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7SUFFekUsT0FBTyxrQkFBa0IsQ0FDdkIsV0FBVyxDQUFDLENBQUMsS0FBSyxFQUFFLFVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRTtRQUN0RCxJQUFJLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ2hDLE9BQU8sQ0FBQyxJQUFJLENBQ1YsdUZBQXVGLENBQ3hGLENBQUM7WUFDRixPQUFPLGVBQWUsQ0FBQztTQUN4QjtRQUVELE1BQU0sT0FBTyxHQUFHLGNBQWMsRUFBRSxDQUFDO1FBRWpDLE9BQU87WUFDTDs7ZUFFRztZQUNILFlBQVk7Z0JBQ1YsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQixDQUFDO1lBQ0Q7O2VBRUc7WUFDSCxlQUFlO2dCQUNiLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3pDLElBQUksV0FBVyxFQUFFO29CQUNmLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZDO1lBQ0gsQ0FBQztZQUNEOztlQUVHO1lBQ0gsY0FBYztnQkFDWixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBVSxDQUFDLENBQUM7Z0JBQ3JELE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQy9DLENBQUM7U0FDRixDQUFDO0lBQ0osQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDO1FBQ1IsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztZQUM1QyxJQUFJLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUNoQyxPQUFPO2FBQ1I7WUFFRCxJQUFJLFFBQVEsRUFBRTtnQkFDWixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBRXhCLE1BQU0sQ0FBQyxHQUFHLEVBQUU7b0JBQ1YsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN6QixDQUFDLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQztLQUNGLENBQUMsQ0FDSCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUGxhdGZvcm1TZXJ2ZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUExBVEZPUk1fSUQsIGVmZmVjdCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBTaWduYWxTdG9yZUZlYXR1cmUsXG4gIGdldFN0YXRlLFxuICBwYXRjaFN0YXRlLFxuICBzaWduYWxTdG9yZUZlYXR1cmUsXG4gIHdpdGhIb29rcyxcbiAgd2l0aE1ldGhvZHMsXG59IGZyb20gJ0BuZ3J4L3NpZ25hbHMnO1xuaW1wb3J0IHsgRW10cHkgfSBmcm9tICcuL3NoYXJlZC9lbXB0eSc7XG5cbnR5cGUgU2lnbmFsU3RvcmVGZWF0dXJlSW5wdXQ8U3RhdGU+ID0gUGljazxcbiAgUGFyYW1ldGVyczxTaWduYWxTdG9yZUZlYXR1cmU+WzBdLFxuICAnc2lnbmFscycgfCAnbWV0aG9kcydcbj4gJiB7XG4gIHN0YXRlOiBTdGF0ZTtcbn07XG5cbmNvbnN0IE5PT1AgPSAoKSA9PiB7fTtcblxudHlwZSBXaXRoU3RvcmFnZVN5bmNGZWF0dXJlUmVzdWx0ID0ge1xuICBzdGF0ZTogRW10cHk7XG4gIHNpZ25hbHM6IEVtdHB5O1xuICBtZXRob2RzOiB7XG4gICAgY2xlYXJTdG9yYWdlKCk6IHZvaWQ7XG4gICAgcmVhZEZyb21TdG9yYWdlKCk6IHZvaWQ7XG4gICAgd3JpdGVUb1N0b3JhZ2UoKTogdm9pZDtcbiAgfTtcbn07XG5cbmNvbnN0IFN0b3JhZ2VTeW5jU3R1YjogUGljazxcbiAgV2l0aFN0b3JhZ2VTeW5jRmVhdHVyZVJlc3VsdCxcbiAgJ21ldGhvZHMnXG4+WydtZXRob2RzJ10gPSB7XG4gIGNsZWFyU3RvcmFnZTogTk9PUCxcbiAgcmVhZEZyb21TdG9yYWdlOiBOT09QLFxuICB3cml0ZVRvU3RvcmFnZTogTk9PUCxcbn07XG5cbmV4cG9ydCB0eXBlIFN5bmNDb25maWc8U3RhdGU+ID0ge1xuICAvKipcbiAgICogVGhlIGtleSB3aGljaCBpcyB1c2VkIHRvIGFjY2VzcyB0aGUgc3RvcmFnZS5cbiAgICovXG4gIGtleTogc3RyaW5nO1xuICAvKipcbiAgICogRmxhZyBpbmRpY2F0aW5nIGlmIHRoZSBzdG9yZSBzaG91bGQgcmVhZCBmcm9tIHN0b3JhZ2Ugb24gaW5pdCBhbmQgd3JpdGUgdG8gc3RvcmFnZSBvbiBldmVyeSBzdGF0ZSBjaGFuZ2UuXG4gICAqXG4gICAqIGB0cnVlYCBieSBkZWZhdWx0XG4gICAqL1xuICBhdXRvU3luYz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBzZWxlY3QgdGhhdCBwb3J0aW9uIG9mIHRoZSBzdGF0ZSB3aGljaCBzaG91bGQgYmUgc3RvcmVkLlxuICAgKlxuICAgKiBSZXR1cm5zIHRoZSB3aG9sZSBzdGF0ZSBvYmplY3QgYnkgZGVmYXVsdFxuICAgKi9cbiAgc2VsZWN0PzogKHN0YXRlOiBTdGF0ZSkgPT4gUGFydGlhbDxTdGF0ZT47XG4gIC8qKlxuICAgKiBGdW5jdGlvbiB1c2VkIHRvIHBhcnNlIHRoZSBzdGF0ZSBjb21pbmcgZnJvbSBzdG9yYWdlLlxuICAgKlxuICAgKiBgSlNPTi5wYXJzZSgpYCBieSBkZWZhdWx0XG4gICAqL1xuICBwYXJzZT86IChzdGF0ZVN0cmluZzogc3RyaW5nKSA9PiBTdGF0ZTtcbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHVzZWQgdG8gdHJhbmZvcm0gdGhlIHN0YXRlIGludG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uXG4gICAqXG4gICAqIGBKU09OLnN0cmluZ2lmeSgpYCBieSBkZWZhdWx0XG4gICAqL1xuICBzdHJpbmdpZnk/OiAoc3RhdGU6IFN0YXRlKSA9PiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGYWN0b3J5IGZ1bmN0aW9uIHVzZWQgdG8gc2VsZWN0IHRoZSBzdG9yYWdlLlxuICAgKlxuICAgKiBgbG9jYWxzdG9yYWdlYCBieSBkZWZhdWx0XG4gICAqL1xuICBzdG9yYWdlPzogKCkgPT4gU3RvcmFnZTtcbn07XG5cbi8qKlxuICogRW5hYmxlcyBzdG9yZSBzeW5jaHJvbml6YXRpb24gd2l0aCBzdG9yYWdlLlxuICpcbiAqIE9ubHkgd29ya3Mgb24gYnJvd3NlciBwbGF0Zm9ybS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhTdG9yYWdlU3luYzxcbiAgU3RhdGUgZXh0ZW5kcyBvYmplY3QsXG4gIElucHV0IGV4dGVuZHMgU2lnbmFsU3RvcmVGZWF0dXJlSW5wdXQ8U3RhdGU+XG4+KGtleTogc3RyaW5nKTogU2lnbmFsU3RvcmVGZWF0dXJlPElucHV0LCBXaXRoU3RvcmFnZVN5bmNGZWF0dXJlUmVzdWx0PjtcbmV4cG9ydCBmdW5jdGlvbiB3aXRoU3RvcmFnZVN5bmM8XG4gIFN0YXRlIGV4dGVuZHMgb2JqZWN0LFxuICBJbnB1dCBleHRlbmRzIFNpZ25hbFN0b3JlRmVhdHVyZUlucHV0PFN0YXRlPlxuPihcbiAgY29uZmlnOiBTeW5jQ29uZmlnPElucHV0WydzdGF0ZSddPlxuKTogU2lnbmFsU3RvcmVGZWF0dXJlPElucHV0LCBXaXRoU3RvcmFnZVN5bmNGZWF0dXJlUmVzdWx0PjtcbmV4cG9ydCBmdW5jdGlvbiB3aXRoU3RvcmFnZVN5bmM8XG4gIFN0YXRlIGV4dGVuZHMgb2JqZWN0LFxuICBJbnB1dCBleHRlbmRzIFNpZ25hbFN0b3JlRmVhdHVyZUlucHV0PFN0YXRlPlxuPihcbiAgY29uZmlnT3JLZXk6IFN5bmNDb25maWc8SW5wdXRbJ3N0YXRlJ10+IHwgc3RyaW5nXG4pOiBTaWduYWxTdG9yZUZlYXR1cmU8SW5wdXQsIFdpdGhTdG9yYWdlU3luY0ZlYXR1cmVSZXN1bHQ+IHtcbiAgY29uc3Qge1xuICAgIGtleSxcbiAgICBhdXRvU3luYyA9IHRydWUsXG4gICAgc2VsZWN0ID0gKHN0YXRlOiBTdGF0ZSkgPT4gc3RhdGUsXG4gICAgcGFyc2UgPSBKU09OLnBhcnNlLFxuICAgIHN0cmluZ2lmeSA9IEpTT04uc3RyaW5naWZ5LFxuICAgIHN0b3JhZ2U6IHN0b3JhZ2VGYWN0b3J5ID0gKCkgPT4gbG9jYWxTdG9yYWdlLFxuICB9ID0gdHlwZW9mIGNvbmZpZ09yS2V5ID09PSAnc3RyaW5nJyA/IHsga2V5OiBjb25maWdPcktleSB9IDogY29uZmlnT3JLZXk7XG5cbiAgcmV0dXJuIHNpZ25hbFN0b3JlRmVhdHVyZShcbiAgICB3aXRoTWV0aG9kcygoc3RvcmUsIHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpKSA9PiB7XG4gICAgICBpZiAoaXNQbGF0Zm9ybVNlcnZlcihwbGF0Zm9ybUlkKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYCd3aXRoU3RvcmFnZVN5bmMnIHByb3ZpZGVzIG5vbi1mdW5jdGlvbmFsIGltcGxlbWVudGF0aW9uIGR1ZSB0byBzZXJ2ZXItc2lkZSBleGVjdXRpb25gXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBTdG9yYWdlU3luY1N0dWI7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0b3JhZ2UgPSBzdG9yYWdlRmFjdG9yeSgpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAvKipcbiAgICAgICAgICogUmVtb3ZlcyB0aGUgaXRlbSBzdG9yZWQgaW4gc3RvcmFnZS5cbiAgICAgICAgICovXG4gICAgICAgIGNsZWFyU3RvcmFnZSgpOiB2b2lkIHtcbiAgICAgICAgICBzdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlYWRzIGl0ZW0gZnJvbSBzdG9yYWdlIGFuZCBwYXRjaGVzIHRoZSBzdGF0ZS5cbiAgICAgICAgICovXG4gICAgICAgIHJlYWRGcm9tU3RvcmFnZSgpOiB2b2lkIHtcbiAgICAgICAgICBjb25zdCBzdGF0ZVN0cmluZyA9IHN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgICAgICAgIGlmIChzdGF0ZVN0cmluZykge1xuICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgcGFyc2Uoc3RhdGVTdHJpbmcpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXcml0ZXMgc2VsZWN0ZWQgcG9ydGlvbiB0byBzdG9yYWdlLlxuICAgICAgICAgKi9cbiAgICAgICAgd3JpdGVUb1N0b3JhZ2UoKTogdm9pZCB7XG4gICAgICAgICAgY29uc3Qgc2xpY2VkU3RhdGUgPSBzZWxlY3QoZ2V0U3RhdGUoc3RvcmUpIGFzIFN0YXRlKTtcbiAgICAgICAgICBzdG9yYWdlLnNldEl0ZW0oa2V5LCBzdHJpbmdpZnkoc2xpY2VkU3RhdGUpKTtcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSksXG4gICAgd2l0aEhvb2tzKHtcbiAgICAgIG9uSW5pdChzdG9yZSwgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCkpIHtcbiAgICAgICAgaWYgKGlzUGxhdGZvcm1TZXJ2ZXIocGxhdGZvcm1JZCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXV0b1N5bmMpIHtcbiAgICAgICAgICBzdG9yZS5yZWFkRnJvbVN0b3JhZ2UoKTtcblxuICAgICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBzdG9yZS53cml0ZVRvU3RvcmFnZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pXG4gICk7XG59XG4iXX0=
@@ -1,8 +1,10 @@
1
- import { patchState as patchState$1, withState, withComputed, signalStoreFeature, withMethods, withHooks } from '@ngrx/signals';
2
- import { signal, effect, PLATFORM_ID, inject, computed, isSignal, untracked } from '@angular/core';
1
+ import { patchState as patchState$1, withState, withComputed, signalStoreFeature, withMethods, withHooks, getState } from '@ngrx/signals';
2
+ import * as i0 from '@angular/core';
3
+ import { signal, effect, PLATFORM_ID, inject, computed, isSignal, untracked, Injectable, ENVIRONMENT_INITIALIZER, makeEnvironmentProviders, Injector } from '@angular/core';
3
4
  import { isPlatformServer } from '@angular/common';
4
- import { Subject } from 'rxjs';
5
+ import { Subject, tap, pipe, map } from 'rxjs';
5
6
  import { setAllEntities, addEntity, updateEntity, removeEntity } from '@ngrx/signals/entities';
7
+ import { rxMethod } from '@ngrx/signals/rxjs-interop';
6
8
 
7
9
  const storeRegistry = signal({});
8
10
  let currentActionNames = new Set();
@@ -97,7 +99,7 @@ function createActionFns(actionFnSpecs, reducerRegistry, effectsRegistry, state)
97
99
  const fullPayload = { ...payload, type };
98
100
  const reducer = reducerRegistry[type];
99
101
  if (reducer) {
100
- reducer(fullPayload, state);
102
+ reducer(state, fullPayload);
101
103
  }
102
104
  const effectSubject = effectsRegistry[type];
103
105
  if (effectSubject) {
@@ -235,23 +237,23 @@ function setError(error, prop) {
235
237
  }
236
238
  }
237
239
 
238
- function capitalize(str) {
240
+ function capitalize$1(str) {
239
241
  return str ? str[0].toUpperCase() + str.substring(1) : str;
240
242
  }
241
243
  function getDataServiceKeys(options) {
242
244
  const filterKey = options.collection ? `${options.collection}Filter` : 'filter';
243
- const selectedIdsKey = options.collection ? `selected${capitalize(options.collection)}Ids` : 'selectedIds';
244
- const selectedEntitiesKey = options.collection ? `selected${capitalize(options.collection)}Entities` : 'selectedEntities';
245
- const updateFilterKey = options.collection ? `update${capitalize(options.collection)}Filter` : 'updateFilter';
246
- const updateSelectedKey = options.collection ? `updateSelected${capitalize(options.collection)}Entities` : 'updateSelected';
247
- const loadKey = options.collection ? `load${capitalize(options.collection)}Entities` : 'load';
248
- const currentKey = options.collection ? `current${capitalize(options.collection)}` : 'current';
249
- const loadByIdKey = options.collection ? `load${capitalize(options.collection)}ById` : 'loadById';
250
- const setCurrentKey = options.collection ? `setCurrent${capitalize(options.collection)}` : 'setCurrent';
251
- const createKey = options.collection ? `create${capitalize(options.collection)}` : 'create';
252
- const updateKey = options.collection ? `update${capitalize(options.collection)}` : 'update';
253
- const updateAllKey = options.collection ? `updateAll${capitalize(options.collection)}` : 'updateAll';
254
- const deleteKey = options.collection ? `delete${capitalize(options.collection)}` : 'delete';
245
+ const selectedIdsKey = options.collection ? `selected${capitalize$1(options.collection)}Ids` : 'selectedIds';
246
+ const selectedEntitiesKey = options.collection ? `selected${capitalize$1(options.collection)}Entities` : 'selectedEntities';
247
+ const updateFilterKey = options.collection ? `update${capitalize$1(options.collection)}Filter` : 'updateFilter';
248
+ const updateSelectedKey = options.collection ? `updateSelected${capitalize$1(options.collection)}Entities` : 'updateSelected';
249
+ const loadKey = options.collection ? `load${capitalize$1(options.collection)}Entities` : 'load';
250
+ const currentKey = options.collection ? `current${capitalize$1(options.collection)}` : 'current';
251
+ const loadByIdKey = options.collection ? `load${capitalize$1(options.collection)}ById` : 'loadById';
252
+ const setCurrentKey = options.collection ? `setCurrent${capitalize$1(options.collection)}` : 'setCurrent';
253
+ const createKey = options.collection ? `create${capitalize$1(options.collection)}` : 'create';
254
+ const updateKey = options.collection ? `update${capitalize$1(options.collection)}` : 'update';
255
+ const updateAllKey = options.collection ? `updateAll${capitalize$1(options.collection)}` : 'updateAll';
256
+ const deleteKey = options.collection ? `delete${capitalize$1(options.collection)}` : 'delete';
255
257
  // TODO: Take these from @ngrx/signals/entities, when they are exported
256
258
  const entitiesKey = options.collection ? `${options.collection}Entities` : 'entities';
257
259
  const entityMapKey = options.collection ? `${options.collection}EntityMap` : 'entityMap';
@@ -397,7 +399,7 @@ const defaultOptions = {
397
399
  };
398
400
  function getUndoRedoKeys(collections) {
399
401
  if (collections) {
400
- return collections.flatMap(c => [`${c}EntityMap`, `${c}Ids`, `selected${capitalize(c)}Ids`, `${c}Filter`]);
402
+ return collections.flatMap(c => [`${c}EntityMap`, `${c}Ids`, `selected${capitalize$1(c)}Ids`, `${c}Filter`]);
401
403
  }
402
404
  return ['entityMap', 'ids', 'selectedIds', 'filter'];
403
405
  }
@@ -482,9 +484,170 @@ function withUndoRedo(options = {}) {
482
484
  }));
483
485
  }
484
486
 
487
+ const NOOP = () => { };
488
+ const StorageSyncStub = {
489
+ clearStorage: NOOP,
490
+ readFromStorage: NOOP,
491
+ writeToStorage: NOOP,
492
+ };
493
+ function withStorageSync(configOrKey) {
494
+ const { key, autoSync = true, select = (state) => state, parse = JSON.parse, stringify = JSON.stringify, storage: storageFactory = () => localStorage, } = typeof configOrKey === 'string' ? { key: configOrKey } : configOrKey;
495
+ return signalStoreFeature(withMethods((store, platformId = inject(PLATFORM_ID)) => {
496
+ if (isPlatformServer(platformId)) {
497
+ console.warn(`'withStorageSync' provides non-functional implementation due to server-side execution`);
498
+ return StorageSyncStub;
499
+ }
500
+ const storage = storageFactory();
501
+ return {
502
+ /**
503
+ * Removes the item stored in storage.
504
+ */
505
+ clearStorage() {
506
+ storage.removeItem(key);
507
+ },
508
+ /**
509
+ * Reads item from storage and patches the state.
510
+ */
511
+ readFromStorage() {
512
+ const stateString = storage.getItem(key);
513
+ if (stateString) {
514
+ patchState$1(store, parse(stateString));
515
+ }
516
+ },
517
+ /**
518
+ * Writes selected portion to storage.
519
+ */
520
+ writeToStorage() {
521
+ const slicedState = select(getState(store));
522
+ storage.setItem(key, stringify(slicedState));
523
+ },
524
+ };
525
+ }), withHooks({
526
+ onInit(store, platformId = inject(PLATFORM_ID)) {
527
+ if (isPlatformServer(platformId)) {
528
+ return;
529
+ }
530
+ if (autoSync) {
531
+ store.readFromStorage();
532
+ effect(() => {
533
+ store.writeToStorage();
534
+ });
535
+ }
536
+ },
537
+ }));
538
+ }
539
+
540
+ function isUnsubscribable(fn) {
541
+ return !!fn?.unsubscribe;
542
+ }
543
+ function capitalize(str) {
544
+ return str ? str[0].toUpperCase() + str.substring(1) : str;
545
+ }
546
+ function isActionCreator(action) {
547
+ return (typeof action === 'function' &&
548
+ action &&
549
+ action.type &&
550
+ typeof action.type === 'string');
551
+ }
552
+
553
+ class SignalReduxStore {
554
+ constructor() {
555
+ this.mapperDict = {};
556
+ this.dispatch = rxMethod(pipe(tap((action) => {
557
+ const callbacks = this.mapperDict[action.type];
558
+ if (callbacks?.storeMethod) {
559
+ if (isUnsubscribable(callbacks.storeMethod) &&
560
+ callbacks.resultMethod) {
561
+ return callbacks.storeMethod(action, (a) => {
562
+ const resultAction = callbacks.resultMethod?.(a);
563
+ this.dispatch(resultAction);
564
+ });
565
+ }
566
+ return callbacks?.storeMethod(action);
567
+ }
568
+ return;
569
+ })));
570
+ }
571
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
572
+ connectFeatureStore(mappers) {
573
+ mappers.forEach(mapper => mapper.types.forEach(action => this.mapperDict[action] = {
574
+ storeMethod: mapper.storeMethod,
575
+ resultMethod: mapper.resultMethod
576
+ }));
577
+ }
578
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: SignalReduxStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
579
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: SignalReduxStore, providedIn: 'root' }); }
580
+ }
581
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: SignalReduxStore, decorators: [{
582
+ type: Injectable,
583
+ args: [{
584
+ providedIn: 'root'
585
+ }]
586
+ }] });
587
+ function injectReduxDispatch() {
588
+ return inject(SignalReduxStore).dispatch;
589
+ }
590
+
591
+ function mapAction(...args) {
592
+ let resultMethod = args.pop();
593
+ let storeMethod = args.pop();
594
+ if (isActionCreator(storeMethod)) {
595
+ args.push(storeMethod);
596
+ storeMethod = resultMethod || storeMethod;
597
+ resultMethod = undefined;
598
+ }
599
+ const types = args.map((creator) => creator.type);
600
+ return {
601
+ types,
602
+ storeMethod,
603
+ resultMethod
604
+ };
605
+ }
606
+ function withActionMappers(...mappers) {
607
+ return mappers;
608
+ }
609
+ function createReduxState(storeName, signalStore, withActionMappers) {
610
+ const isRootProvider = signalStore?.ɵprov?.providedIn === 'root';
611
+ return {
612
+ [`provide${capitalize(storeName)}Store`]: (connectReduxDevtools = false) => makeEnvironmentProviders([
613
+ isRootProvider ? [] : signalStore,
614
+ {
615
+ provide: ENVIRONMENT_INITIALIZER,
616
+ multi: true,
617
+ useFactory: (signalReduxStore = inject(SignalReduxStore), store = inject(signalStore)) => () => {
618
+ if (connectReduxDevtools) {
619
+ // addStoreToReduxDevtools(store, storeName, false);
620
+ }
621
+ signalReduxStore.connectFeatureStore(withActionMappers(store));
622
+ }
623
+ }
624
+ ]),
625
+ [`inject${capitalize(storeName)}Store`]: () => Object.assign(inject(signalStore), { dispatch: injectReduxDispatch() })
626
+ };
627
+ }
628
+
629
+ function reduxMethod(generator, resultMethodOrConfig, config) {
630
+ const injector = inject(Injector);
631
+ if (typeof resultMethodOrConfig === 'function') {
632
+ let unsubscribable;
633
+ const inputResultFn = ((input, resultMethod = resultMethodOrConfig) => {
634
+ const rxMethodWithResult = rxMethod(pipe(generator, map(resultMethod)), {
635
+ ...(config || {}),
636
+ injector: config?.injector || injector
637
+ });
638
+ const rxWithInput = rxMethodWithResult(input);
639
+ unsubscribable = { unsubscribe: rxWithInput.unsubscribe.bind(rxWithInput) };
640
+ return rxWithInput;
641
+ });
642
+ inputResultFn.unsubscribe = () => unsubscribable?.unsubscribe();
643
+ return inputResultFn;
644
+ }
645
+ return rxMethod(generator, resultMethodOrConfig);
646
+ }
647
+
485
648
  /**
486
649
  * Generated bundle index. Do not edit.
487
650
  */
488
651
 
489
- export { capitalize, getCallStateKeys, getDataServiceKeys, getUndoRedoKeys, noPayload, patchState, payload, setError, setLoaded, setLoading, withCallState, withDataService, withDevtools, withRedux, withUndoRedo };
652
+ export { capitalize$1 as capitalize, createReduxState, getCallStateKeys, getDataServiceKeys, getUndoRedoKeys, mapAction, noPayload, patchState, payload, reduxMethod, setError, setLoaded, setLoading, withActionMappers, withCallState, withDataService, withDevtools, withRedux, withStorageSync, withUndoRedo };
490
653
  //# sourceMappingURL=angular-architects-ngrx-toolkit.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"angular-architects-ngrx-toolkit.mjs","sources":["../../../../libs/ngrx-toolkit/src/lib/with-devtools.ts","../../../../libs/ngrx-toolkit/src/lib/assertions/assertions.ts","../../../../libs/ngrx-toolkit/src/lib/with-redux.ts","../../../../libs/ngrx-toolkit/src/lib/with-call-state.ts","../../../../libs/ngrx-toolkit/src/lib/with-data-service.ts","../../../../libs/ngrx-toolkit/src/lib/with-undo-redo.ts","../../../../libs/ngrx-toolkit/src/angular-architects-ngrx-toolkit.ts"],"sourcesContent":["import {\n patchState as originalPatchState,\n SignalStoreFeature,\n} from '@ngrx/signals';\nimport { SignalStoreFeatureResult } from '@ngrx/signals/src/signal-store-models';\nimport { effect, inject, PLATFORM_ID, signal, Signal } from '@angular/core';\nimport { isPlatformServer } from '@angular/common';\n\ndeclare global {\n interface Window {\n __REDUX_DEVTOOLS_EXTENSION__:\n | {\n connect: (options: { name: string }) => {\n send: (action: Action, state: Record<string, unknown>) => void;\n };\n }\n | undefined;\n }\n}\n\ntype EmptyFeatureResult = { state: {}; signals: {}; methods: {} };\nexport type Action = { type: string };\n\nconst storeRegistry = signal<Record<string, Signal<unknown>>>({});\n\nlet currentActionNames = new Set<string>();\n\nlet synchronizationInitialized = false;\n\nfunction initSynchronization() {\n effect(() => {\n if (!connection) {\n return;\n }\n\n const stores = storeRegistry();\n const rootState: Record<string, unknown> = {};\n for (const name in stores) {\n const store = stores[name];\n rootState[name] = store();\n }\n\n const names = Array.from(currentActionNames);\n const type = names.length ? names.join(', ') : 'Store Update';\n currentActionNames = new Set<string>();\n\n connection.send({ type }, rootState);\n });\n}\n\nfunction getValueFromSymbol(obj: unknown, symbol: symbol) {\n if (typeof obj === 'object' && obj && symbol in obj) {\n return (obj as { [key: symbol]: any })[symbol];\n }\n}\n\nfunction getStoreSignal(store: unknown): Signal<unknown> {\n const [signalStateKey] = Object.getOwnPropertySymbols(store);\n if (!signalStateKey) {\n throw new Error('Cannot find State Signal');\n }\n\n return getValueFromSymbol(store, signalStateKey);\n}\n\ntype ConnectResponse = {\n send: (action: Action, state: Record<string, unknown>) => void;\n};\nlet connection: ConnectResponse | undefined;\n\n/**\n * required for testing. is not exported during build\n */\nexport function reset() {\n connection = undefined;\n synchronizationInitialized = false;\n storeRegistry.set({});\n}\n\n/**\n * @param name store's name as it should appear in the DevTools\n */\nexport function withDevtools<Input extends SignalStoreFeatureResult>(\n name: string\n): SignalStoreFeature<Input, EmptyFeatureResult> {\n return (store) => {\n const isServer = isPlatformServer(inject(PLATFORM_ID));\n if (isServer) {\n return store;\n }\n\n const extensions = window.__REDUX_DEVTOOLS_EXTENSION__;\n if (!extensions) {\n return store;\n }\n\n if (!connection) {\n connection = extensions.connect({\n name: 'NgRx Signal Store',\n });\n }\n\n const storeSignal = getStoreSignal(store);\n storeRegistry.update((value) => ({\n ...value,\n [name]: storeSignal,\n }));\n\n if (!synchronizationInitialized) {\n initSynchronization();\n synchronizationInitialized = true;\n }\n\n return store;\n };\n}\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\nexport const patchState: PatchFn = (state, action, ...rest) => {\n currentActionNames.add(action);\n return originalPatchState(state, ...rest);\n};\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 { Observable, Subject, Subscription } from 'rxjs';\nimport { SignalStoreFeature } from '@ngrx/signals';\nimport {\n EmptyFeatureResult,\n SignalStoreFeatureResult,\n} from '@ngrx/signals/src/signal-store-models';\nimport { StateSignal } from '@ngrx/signals/src/state-signal';\nimport { assertActionFnSpecs } from './assertions/assertions';\nimport { effect } from '@angular/core';\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]: ((\n payload: Spec[ActionName]\n ) => Spec[ActionName] & { type: ActionName }) & { type: ActionName & string };\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 action: ActionFnPayload<ReducerAction>,\n state: State\n) => void;\n\ntype ReducerFactory<StateActionFns extends ActionFns, State> = (\n actions: StateActionFns,\n on: <ReducerAction extends { type: string }>(\n action: ReducerAction,\n reducerFn: ReducerFunction<ActionFnPayload<ReducerAction>, State>\n ) => void\n) => void;\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\nfunction createActionFns<Spec extends ActionsFnSpecs>(\n actionFnSpecs: Spec,\n reducerRegistry: Record<\n string,\n (payload: ActionFnPayload<unknown>, state: unknown) => void\n >,\n effectsRegistry: Record<string, Subject<ActionFnPayload<unknown>>>,\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 (payload: unknown, state: unknown) => void)(\n fullPayload as unknown,\n state\n );\n }\n const effectSubject = effectsRegistry[type];\n if (effectSubject) {\n (effectSubject as unknown as Subject<unknown>).next(fullPayload);\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 (payload: ActionFnPayload<unknown>, state: unknown) => void\n >,\n effectsRegistry: Record<string, Subject<ActionFnPayload<unknown>>>,\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 (payload: ActionFnPayload<unknown>, state: unknown) => void\n >\n) {\n function on(\n action: { type: string },\n reducerFn: (payload: ActionFnPayload<unknown>, state: 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: Record<string, Subject<ActionFnPayload<unknown>>> = {}\n): Observable<unknown>[] {\n function create(action: { type: string }) {\n const subject = new Subject<ActionFnPayload<unknown>>();\n effectsRegistry[action.type] = 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 (payload: ActionFnPayload<unknown>, state: unknown) => void\n > = {};\n const effectsRegistry: Record<string, Subject<ActionFnPayload<unknown>>> = {};\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, StateSignal<Input['state']>>;\n effects: EffectsFactory<StateActionFns>;\n}): SignalStoreFeature<\n Input,\n EmptyFeatureResult & { methods: PublicStoreActionFns }\n> {\n return (store) => {\n const { methods, subscriptions } = 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,\n };\n };\n}\n","import { Signal, computed } from '@angular/core';\nimport {\n SignalStoreFeature,\n signalStoreFeature,\n withComputed,\n withState,\n} from '@ngrx/signals';\nimport { Emtpy } from './shared/empty';\n\nexport type CallState = 'init' | 'loading' | 'loaded' | { error: string };\n\nexport type NamedCallStateSlice<Collection extends string> = {\n [K in Collection as `${K}CallState`]: CallState;\n};\n\nexport type CallStateSlice = {\n callState: CallState\n}\n\nexport type NamedCallStateSignals<Prop extends string> = {\n [K in Prop as `${K}Loading`]: Signal<boolean>;\n} & {\n [K in Prop as `${K}Loaded`]: Signal<boolean>;\n } & {\n [K in Prop as `${K}Error`]: Signal<string | null>;\n } \n\nexport type CallStateSignals = {\n loading: Signal<boolean>;\n loaded: Signal<boolean>;\n error: Signal<string | null>\n} \n\nexport function getCallStateKeys(config?: { collection?: string }) {\n const prop = config?.collection;\n return {\n callStateKey: prop ? `${config.collection}CallState` : 'callState',\n loadingKey: prop ? `${config.collection}Loading` : 'loading',\n loadedKey: prop ? `${config.collection}Loaded` : 'loaded',\n errorKey: prop ? `${config.collection}Error` : 'error',\n };\n}\n\nexport function withCallState<Collection extends string>(config: {\n collection: Collection;\n}): SignalStoreFeature<\n { state: Emtpy, signals: Emtpy, methods: Emtpy },\n {\n state: NamedCallStateSlice<Collection>,\n signals: NamedCallStateSignals<Collection>,\n methods: Emtpy\n }\n>;\nexport function withCallState(): SignalStoreFeature<\n { state: Emtpy, signals: Emtpy, methods: Emtpy },\n {\n state: CallStateSlice,\n signals: CallStateSignals,\n methods: Emtpy\n }\n>;\nexport function withCallState<Collection extends string>(config?: {\n collection: Collection;\n}): SignalStoreFeature {\n const { callStateKey, errorKey, loadedKey, loadingKey } =\n getCallStateKeys(config);\n\n return signalStoreFeature(\n withState({ [callStateKey]: 'init' }),\n withComputed((state: Record<string, Signal<unknown>>) => {\n\n const callState = state[callStateKey] as Signal<CallState>;\n\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>(\n prop?: Prop\n): NamedCallStateSlice<Prop> | CallStateSlice {\n if (prop) {\n return { [`${prop}CallState`]: 'loading' } as NamedCallStateSlice<Prop>;\n }\n\n return { callState: 'loading' };\n}\n\nexport function setLoaded<Prop extends string>(\n prop?: Prop\n): NamedCallStateSlice<Prop> | CallStateSlice {\n\n if (prop) {\n return { [`${prop}CallState`]: 'loaded' } as NamedCallStateSlice<Prop>;\n }\n else {\n return { callState: 'loaded' };\n\n }\n}\n\nexport function setError<Prop extends string>(\n error: unknown,\n prop?: Prop,\n ): NamedCallStateSlice<Prop> | CallStateSlice {\n\n let errorMessage = '';\n\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 \n\n if (prop) {\n return { [`${prop}CallState`]: { error: errorMessage } } as NamedCallStateSlice<Prop>;\n }\n else {\n return { callState: { error: errorMessage } };\n }\n}\n","import { ProviderToken, Signal, computed, inject } from \"@angular/core\";\nimport { SignalStoreFeature, patchState, signalStoreFeature, withComputed, withMethods, withState } from \"@ngrx/signals\";\nimport { CallState, getCallStateKeys, setError, setLoaded, setLoading } from \"./with-call-state\";\nimport { setAllEntities, EntityId, addEntity, updateEntity, removeEntity } from \"@ngrx/signals/entities\";\nimport { EntityState, NamedEntitySignals } from \"@ngrx/signals/entities/src/models\";\nimport { StateSignal } from \"@ngrx/signals/src/state-signal\";\nimport { Emtpy } from \"./shared/empty\";\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 loadById(id: EntityId): Promise<E>;\n create(entity: E): Promise<E>;\n update(entity: E): Promise<E>;\n updateAll(entity: E[]): Promise<E[]>;\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 ? `${options.collection}Filter` : 'filter';\n const selectedIdsKey = options.collection ? `selected${capitalize(options.collection)}Ids` : 'selectedIds';\n const selectedEntitiesKey = options.collection ? `selected${capitalize(options.collection)}Entities` : 'selectedEntities';\n\n const updateFilterKey = options.collection ? `update${capitalize(options.collection)}Filter` : 'updateFilter';\n const updateSelectedKey = options.collection ? `updateSelected${capitalize(options.collection)}Entities` : 'updateSelected';\n const loadKey = options.collection ? `load${capitalize(options.collection)}Entities` : 'load';\n\n const currentKey = options.collection ? `current${capitalize(options.collection)}` : 'current';\n const loadByIdKey = options.collection ? `load${capitalize(options.collection)}ById` : 'loadById';\n const setCurrentKey = options.collection ? `setCurrent${capitalize(options.collection)}` : 'setCurrent';\n const createKey = options.collection ? `create${capitalize(options.collection)}` : 'create';\n const updateKey = options.collection ? `update${capitalize(options.collection)}` : 'update';\n const updateAllKey = options.collection ? `updateAll${capitalize(options.collection)}` : 'updateAll';\n const deleteKey = options.collection ? `delete${capitalize(options.collection)}` : 'delete';\n\n // TODO: Take these from @ngrx/signals/entities, when they are exported\n const entitiesKey = options.collection ? `${options.collection}Entities` : 'entities';\n const entityMapKey = options.collection ? `${options.collection}EntityMap` : '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<E extends Entity, F extends Filter, 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 NamedDataServiceSignals<E extends Entity, Collection extends string> =\n {\n [K in Collection as `selected${Capitalize<K>}Entities`]: Signal<E[]>;\n }\n\nexport type DataServiceSignals<E extends Entity> =\n {\n selectedEntities: Signal<E[]>;\n }\n\nexport type NamedDataServiceMethods<E extends Entity, F extends Filter, Collection extends string> =\n {\n [K in Collection as `update${Capitalize<K>}Filter`]: (filter: F) => void;\n } &\n {\n [K in Collection as `updateSelected${Capitalize<K>}Entities`]: (id: EntityId, selected: boolean) => void;\n } &\n {\n [K in Collection as `load${Capitalize<K>}Entities`]: () => Promise<void>;\n } &\n\n {\n [K in Collection as `setCurrent${Capitalize<K>}`]: (entity: E) => void;\n } &\n {\n [K in Collection as `load${Capitalize<K>}ById`]: (id: EntityId) => Promise<void>;\n } &\n {\n [K in Collection as `create${Capitalize<K>}`]: (entity: E) => Promise<void>;\n } &\n {\n [K in Collection as `update${Capitalize<K>}`]: (entity: E) => Promise<void>;\n } &\n {\n [K in Collection as `updateAll${Capitalize<K>}`]: (entity: E[]) => Promise<void>;\n } &\n {\n [K in Collection as `delete${Capitalize<K>}`]: (entity: E) => Promise<void>;\n };\n\n\nexport type DataServiceMethods<E extends Entity, F extends Filter> =\n {\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 type Empty = Record<string, never>\n\nexport function withDataService<E extends Entity, F extends Filter, Collection extends string>(options: { dataServiceType: ProviderToken<DataService<E, F>>, filter: F, collection: Collection }): SignalStoreFeature<\n {\n state: Emtpy,\n // These alternatives break type inference:\n // state: { callState: CallState } & NamedEntityState<E, Collection>,\n // state: NamedEntityState<E, Collection>,\n\n signals: NamedEntitySignals<E, Collection>,\n methods: Emtpy,\n },\n {\n state: NamedDataServiceState<E, F, Collection>\n signals: NamedDataServiceSignals<E, Collection>\n methods: NamedDataServiceMethods<E, F, Collection>\n }\n>;\nexport function withDataService<E extends Entity, F extends Filter>(options: { dataServiceType: ProviderToken<DataService<E, F>>, filter: F }): SignalStoreFeature<\n {\n state: { callState: CallState } & EntityState<E>\n signals: Emtpy,\n methods: Emtpy,\n },\n {\n state: DataServiceState<E, F>\n signals: DataServiceSignals<E>\n methods: DataServiceMethods<E, F>\n }>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function withDataService<E extends Entity, F extends Filter, Collection extends string>(options: { dataServiceType: ProviderToken<DataService<E, F>>, filter: F, collection?: Collection }): SignalStoreFeature<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<Record<EntityId, boolean>>;\n\n return {\n [selectedEntitiesKey]: computed(() => entities().filter(e => selectedIds()[e.id]))\n }\n }),\n withMethods((store: Record<string, unknown> & StateSignal<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 store[callStateKey] && patchState(store, setLoading(prefix));\n\n try {\n const result = await dataService.load(filter());\n patchState(store, prefix ? setAllEntities(result, { collection: prefix }) : setAllEntities(result));\n store[callStateKey] && patchState(store, setLoaded(prefix));\n }\n catch (e) {\n store[callStateKey] && patchState(store, setError(e, prefix));\n throw e;\n }\n },\n [loadByIdKey]: async (id: EntityId): Promise<void> => {\n store[callStateKey] && patchState(store, setLoading(prefix));\n\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] && 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 store[callStateKey] && patchState(store, setLoading(prefix));\n\n try {\n const created = await dataService.create(entity);\n patchState(store, { [currentKey]: created });\n patchState(store, prefix ? addEntity(created, { collection: prefix }) : addEntity(created));\n store[callStateKey] && patchState(store, setLoaded(prefix));\n }\n catch (e) {\n store[callStateKey] && patchState(store, setError(e, prefix));\n throw e;\n }\n },\n [updateKey]: async (entity: E): Promise<void> => {\n patchState(store, { [currentKey]: entity });\n store[callStateKey] && patchState(store, setLoading(prefix));\n\n try {\n const updated = await dataService.update(entity);\n patchState(store, { [currentKey]: updated });\n // Why do we need this cast to Partial<Entity>?\n const updateArg = { id: updated.id, changes: updated as Partial<Entity> };\n patchState(store, prefix ? updateEntity(updateArg, { collection: prefix }) : updateEntity(updateArg));\n store[callStateKey] && patchState(store, setLoaded(prefix));\n }\n catch (e) {\n store[callStateKey] && patchState(store, setError(e, prefix));\n throw e;\n }\n },\n [updateAllKey]: async (entities: E[]): Promise<void> => {\n store[callStateKey] && patchState(store, setLoading(prefix));\n\n try {\n const result = await dataService.updateAll(entities);\n patchState(store, prefix ? setAllEntities(result, { collection: prefix }) : setAllEntities(result));\n store[callStateKey] && patchState(store, setLoaded(prefix));\n }\n catch (e) {\n store[callStateKey] && patchState(store, setError(e, prefix));\n throw e;\n }\n },\n [deleteKey]: async (entity: E): Promise<void> => {\n patchState(store, { [currentKey]: entity });\n store[callStateKey] && patchState(store, setLoading(prefix));\n\n try {\n await dataService.delete(entity);\n patchState(store, { [currentKey]: undefined });\n patchState(store, prefix ? removeEntity(entity.id, { collection: prefix }) : removeEntity(entity.id));\n store[callStateKey] && patchState(store, setLoaded(prefix));\n }\n catch (e) {\n store[callStateKey] && patchState(store, setError(e, prefix));\n throw e;\n }\n },\n };\n })\n );\n}\n","import { SignalStoreFeature, patchState, signalStoreFeature, withComputed, withHooks, withMethods } from \"@ngrx/signals\";\nimport { EntityId, EntityMap, EntityState } from \"@ngrx/signals/entities\";\nimport { Signal, effect, signal, untracked, isSignal } from \"@angular/core\";\nimport { EntitySignals, NamedEntitySignals } from \"@ngrx/signals/entities/src/models\";\nimport { Entity, capitalize } from \"./with-data-service\";\nimport { Emtpy } from \"./shared/empty\";\n\nexport type StackItem = Record<string, unknown>;\n\nexport type NormalizedUndoRedoOptions = {\n maxStackSize: number;\n collections?: string[]\n}\n\nconst defaultOptions: NormalizedUndoRedoOptions = {\n maxStackSize: 100\n};\n\nexport type NamedUndoRedoState<Collection extends string> = {\n [K in Collection as `${K}EntityMap`]: EntityMap<Entity>;\n} & {\n [K in Collection as `${K}Ids`]: EntityId[];\n }\n\nexport type NamedUndoRedoSignals<Collection extends string> = {\n [K in Collection as `${K}Entities`]: Signal<Entity[]>\n}\n\nexport function getUndoRedoKeys(collections?: string[]): string[] {\n if (collections) {\n return collections.flatMap(c => [`${c}EntityMap`, `${c}Ids`, `selected${capitalize(c)}Ids`, `${c}Filter`])\n }\n return ['entityMap', 'ids', 'selectedIds', 'filter'];\n}\n\nexport function withUndoRedo<Collection extends string>(options?: { maxStackSize?: number; collections: Collection[] }): SignalStoreFeature<\n {\n state: Emtpy,\n // This alternative breaks type inference:\n // state: NamedEntityState<Entity, Collection>\n signals: NamedEntitySignals<Entity, Collection>,\n methods: Emtpy\n },\n {\n state: Emtpy,\n signals: {\n canUndo: Signal<boolean>,\n canRedo: Signal<boolean>\n },\n methods: {\n undo: () => void,\n redo: () => void\n }\n }>;\n\nexport function withUndoRedo(options?: { maxStackSize?: number }): SignalStoreFeature<\n {\n state: EntityState<Entity>,\n signals: EntitySignals<Entity>,\n methods: Emtpy\n },\n {\n state: Emtpy,\n signals: {\n canUndo: Signal<boolean>,\n canRedo: Signal<boolean>\n },\n methods: {\n undo: () => void,\n redo: () => void\n }\n }>;\n\nexport function withUndoRedo<Collection extends string>(options: {\n maxStackSize?: number;\n collections?: Collection[]\n} = {}): \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nSignalStoreFeature<any, any> {\n let previous: 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);\n\n return signalStoreFeature(\n\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 && previous) {\n redoStack.push(previous);\n }\n\n if (item) {\n skipOnce = true;\n patchState(store, item);\n previous = item;\n }\n\n updateInternal();\n },\n redo(): void {\n const item = redoStack.pop();\n\n if (item && previous) {\n undoStack.push(previous);\n }\n\n if (item) {\n skipOnce = true;\n patchState(store, item);\n previous = item;\n }\n\n updateInternal();\n }\n })),\n withHooks({\n onInit(store: Record<string, unknown>) {\n effect(() => {\n\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\n if (skipOnce) {\n skipOnce = false;\n return;\n }\n\n // Clear redoStack after recorded action\n redoStack.splice(0);\n\n if (previous) {\n undoStack.push(previous);\n }\n\n if (redoStack.length > normalized.maxStackSize) {\n undoStack.unshift();\n }\n\n previous = cand;\n\n // Don't propogate current reactive context\n untracked(() => updateInternal());\n })\n }\n })\n\n )\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["originalPatchState","patchState"],"mappings":"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"}
1
+ {"version":3,"file":"angular-architects-ngrx-toolkit.mjs","sources":["../../../../libs/ngrx-toolkit/src/lib/with-devtools.ts","../../../../libs/ngrx-toolkit/src/lib/assertions/assertions.ts","../../../../libs/ngrx-toolkit/src/lib/with-redux.ts","../../../../libs/ngrx-toolkit/src/lib/with-call-state.ts","../../../../libs/ngrx-toolkit/src/lib/with-data-service.ts","../../../../libs/ngrx-toolkit/src/lib/with-undo-redo.ts","../../../../libs/ngrx-toolkit/src/lib/with-storage-sync.ts","../../../../libs/ngrx-toolkit/src/lib/redux-connector/util.ts","../../../../libs/ngrx-toolkit/src/lib/redux-connector/signal-redux-store.ts","../../../../libs/ngrx-toolkit/src/lib/redux-connector/create-redux.ts","../../../../libs/ngrx-toolkit/src/lib/redux-connector/rxjs-interop/redux-method.ts","../../../../libs/ngrx-toolkit/src/angular-architects-ngrx-toolkit.ts"],"sourcesContent":["import {\n patchState as originalPatchState,\n SignalStoreFeature,\n} from '@ngrx/signals';\nimport { SignalStoreFeatureResult } from '@ngrx/signals/src/signal-store-models';\nimport { effect, inject, PLATFORM_ID, signal, Signal } from '@angular/core';\nimport { isPlatformServer } from '@angular/common';\n\ndeclare global {\n interface Window {\n __REDUX_DEVTOOLS_EXTENSION__:\n | {\n connect: (options: { name: string }) => {\n send: (action: Action, state: Record<string, unknown>) => void;\n };\n }\n | undefined;\n }\n}\n\ntype EmptyFeatureResult = { state: {}; signals: {}; methods: {} };\nexport type Action = { type: string };\n\nconst storeRegistry = signal<Record<string, Signal<unknown>>>({});\n\nlet currentActionNames = new Set<string>();\n\nlet synchronizationInitialized = false;\n\nfunction initSynchronization() {\n effect(() => {\n if (!connection) {\n return;\n }\n\n const stores = storeRegistry();\n const rootState: Record<string, unknown> = {};\n for (const name in stores) {\n const store = stores[name];\n rootState[name] = store();\n }\n\n const names = Array.from(currentActionNames);\n const type = names.length ? names.join(', ') : 'Store Update';\n currentActionNames = new Set<string>();\n\n connection.send({ type }, rootState);\n });\n}\n\nfunction getValueFromSymbol(obj: unknown, symbol: symbol) {\n if (typeof obj === 'object' && obj && symbol in obj) {\n return (obj as { [key: symbol]: any })[symbol];\n }\n}\n\nfunction getStoreSignal(store: unknown): Signal<unknown> {\n const [signalStateKey] = Object.getOwnPropertySymbols(store);\n if (!signalStateKey) {\n throw new Error('Cannot find State Signal');\n }\n\n return getValueFromSymbol(store, signalStateKey);\n}\n\ntype ConnectResponse = {\n send: (action: Action, state: Record<string, unknown>) => void;\n};\nlet connection: ConnectResponse | undefined;\n\n/**\n * required for testing. is not exported during build\n */\nexport function reset() {\n connection = undefined;\n synchronizationInitialized = false;\n storeRegistry.set({});\n}\n\n/**\n * @param name store's name as it should appear in the DevTools\n */\nexport function withDevtools<Input extends SignalStoreFeatureResult>(\n name: string\n): SignalStoreFeature<Input, EmptyFeatureResult> {\n return (store) => {\n const isServer = isPlatformServer(inject(PLATFORM_ID));\n if (isServer) {\n return store;\n }\n\n const extensions = window.__REDUX_DEVTOOLS_EXTENSION__;\n if (!extensions) {\n return store;\n }\n\n if (!connection) {\n connection = extensions.connect({\n name: 'NgRx Signal Store',\n });\n }\n\n const storeSignal = getStoreSignal(store);\n storeRegistry.update((value) => ({\n ...value,\n [name]: storeSignal,\n }));\n\n if (!synchronizationInitialized) {\n initSynchronization();\n synchronizationInitialized = true;\n }\n\n return store;\n };\n}\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\nexport const patchState: PatchFn = (state, action, ...rest) => {\n currentActionNames.add(action);\n return originalPatchState(state, ...rest);\n};\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 { Observable, Subject } from 'rxjs';\nimport { SignalStoreFeature } from '@ngrx/signals';\nimport {\n EmptyFeatureResult,\n SignalStoreFeatureResult,\n} from '@ngrx/signals/src/signal-store-models';\nimport { StateSignal } from '@ngrx/signals/src/state-signal';\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]: ((\n payload: Spec[ActionName]\n ) => Spec[ActionName] & { type: ActionName }) & { type: ActionName & string };\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/** 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\nfunction createActionFns<Spec extends ActionsFnSpecs>(\n actionFnSpecs: Spec,\n reducerRegistry: Record<\n string,\n (state: unknown, payload: ActionFnPayload<unknown>) => void\n >,\n effectsRegistry: Record<string, Subject<ActionFnPayload<unknown>>>,\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 effectSubject = effectsRegistry[type];\n if (effectSubject) {\n (effectSubject as unknown as Subject<unknown>).next(fullPayload);\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: Record<string, Subject<ActionFnPayload<unknown>>>,\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: Record<string, Subject<ActionFnPayload<unknown>>> = {}\n): Observable<unknown>[] {\n function create(action: { type: string }) {\n const subject = new Subject<ActionFnPayload<unknown>>();\n effectsRegistry[action.type] = 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 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, StateSignal<Input['state']>>;\n effects: EffectsFactory<StateActionFns>;\n}): SignalStoreFeature<\n Input,\n EmptyFeatureResult & { methods: PublicStoreActionFns }\n> {\n return (store) => {\n const { methods, subscriptions } = 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,\n };\n };\n}\n","import { Signal, computed } from '@angular/core';\nimport {\n SignalStoreFeature,\n signalStoreFeature,\n withComputed,\n withState,\n} from '@ngrx/signals';\nimport { Emtpy } from './shared/empty';\n\nexport type CallState = 'init' | 'loading' | 'loaded' | { error: string };\n\nexport type NamedCallStateSlice<Collection extends string> = {\n [K in Collection as `${K}CallState`]: CallState;\n};\n\nexport type CallStateSlice = {\n callState: CallState\n}\n\nexport type NamedCallStateSignals<Prop extends string> = {\n [K in Prop as `${K}Loading`]: Signal<boolean>;\n} & {\n [K in Prop as `${K}Loaded`]: Signal<boolean>;\n } & {\n [K in Prop as `${K}Error`]: Signal<string | null>;\n }\n\nexport type CallStateSignals = {\n loading: Signal<boolean>;\n loaded: Signal<boolean>;\n error: Signal<string | null>\n}\n\nexport type SetCallState<Prop extends string | undefined> = Prop extends string\n ? NamedCallStateSlice<Prop>\n : CallStateSlice;\n\nexport function getCallStateKeys(config?: { collection?: string }) {\n const prop = config?.collection;\n return {\n callStateKey: prop ? `${config.collection}CallState` : 'callState',\n loadingKey: prop ? `${config.collection}Loading` : 'loading',\n loadedKey: prop ? `${config.collection}Loaded` : 'loaded',\n errorKey: prop ? `${config.collection}Error` : 'error',\n };\n}\n\nexport function withCallState<Collection extends string>(config: {\n collection: Collection;\n}): SignalStoreFeature<\n { state: Emtpy, signals: Emtpy, methods: Emtpy },\n {\n state: NamedCallStateSlice<Collection>,\n signals: NamedCallStateSignals<Collection>,\n methods: Emtpy\n }\n>;\nexport function withCallState(): SignalStoreFeature<\n { state: Emtpy, signals: Emtpy, methods: Emtpy },\n {\n state: CallStateSlice,\n signals: CallStateSignals,\n methods: Emtpy\n }\n>;\nexport function withCallState<Collection extends string>(config?: {\n collection: Collection;\n}): SignalStoreFeature {\n const { callStateKey, errorKey, loadedKey, loadingKey } =\n getCallStateKeys(config);\n\n return signalStoreFeature(\n withState({ [callStateKey]: 'init' }),\n withComputed((state: Record<string, Signal<unknown>>) => {\n\n const callState = state[callStateKey] as Signal<CallState>;\n\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\n if (prop) {\n return { [`${prop}CallState`]: 'loaded' } as SetCallState<Prop>;\n }\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\n let errorMessage = '';\n\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 \n\n if (prop) {\n return { [`${prop}CallState`]: { error: errorMessage } } as SetCallState<Prop>;\n }\n else {\n return { callState: { error: errorMessage } } as SetCallState<Prop>;\n }\n}\n","import { ProviderToken, Signal, computed, inject } from \"@angular/core\";\nimport { SignalStoreFeature, patchState, signalStoreFeature, withComputed, withMethods, withState } from \"@ngrx/signals\";\nimport { CallState, getCallStateKeys, setError, setLoaded, setLoading } from \"./with-call-state\";\nimport { setAllEntities, EntityId, addEntity, updateEntity, removeEntity } from \"@ngrx/signals/entities\";\nimport { EntityState, NamedEntitySignals } from \"@ngrx/signals/entities/src/models\";\nimport { StateSignal } from \"@ngrx/signals/src/state-signal\";\nimport { Emtpy } from \"./shared/empty\";\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 loadById(id: EntityId): Promise<E>;\n create(entity: E): Promise<E>;\n update(entity: E): Promise<E>;\n updateAll(entity: E[]): Promise<E[]>;\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 ? `${options.collection}Filter` : 'filter';\n const selectedIdsKey = options.collection ? `selected${capitalize(options.collection)}Ids` : 'selectedIds';\n const selectedEntitiesKey = options.collection ? `selected${capitalize(options.collection)}Entities` : 'selectedEntities';\n\n const updateFilterKey = options.collection ? `update${capitalize(options.collection)}Filter` : 'updateFilter';\n const updateSelectedKey = options.collection ? `updateSelected${capitalize(options.collection)}Entities` : 'updateSelected';\n const loadKey = options.collection ? `load${capitalize(options.collection)}Entities` : 'load';\n\n const currentKey = options.collection ? `current${capitalize(options.collection)}` : 'current';\n const loadByIdKey = options.collection ? `load${capitalize(options.collection)}ById` : 'loadById';\n const setCurrentKey = options.collection ? `setCurrent${capitalize(options.collection)}` : 'setCurrent';\n const createKey = options.collection ? `create${capitalize(options.collection)}` : 'create';\n const updateKey = options.collection ? `update${capitalize(options.collection)}` : 'update';\n const updateAllKey = options.collection ? `updateAll${capitalize(options.collection)}` : 'updateAll';\n const deleteKey = options.collection ? `delete${capitalize(options.collection)}` : 'delete';\n\n // TODO: Take these from @ngrx/signals/entities, when they are exported\n const entitiesKey = options.collection ? `${options.collection}Entities` : 'entities';\n const entityMapKey = options.collection ? `${options.collection}EntityMap` : '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<E extends Entity, F extends Filter, 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 NamedDataServiceSignals<E extends Entity, Collection extends string> =\n {\n [K in Collection as `selected${Capitalize<K>}Entities`]: Signal<E[]>;\n }\n\nexport type DataServiceSignals<E extends Entity> =\n {\n selectedEntities: Signal<E[]>;\n }\n\nexport type NamedDataServiceMethods<E extends Entity, F extends Filter, Collection extends string> =\n {\n [K in Collection as `update${Capitalize<K>}Filter`]: (filter: F) => void;\n } &\n {\n [K in Collection as `updateSelected${Capitalize<K>}Entities`]: (id: EntityId, selected: boolean) => void;\n } &\n {\n [K in Collection as `load${Capitalize<K>}Entities`]: () => Promise<void>;\n } &\n\n {\n [K in Collection as `setCurrent${Capitalize<K>}`]: (entity: E) => void;\n } &\n {\n [K in Collection as `load${Capitalize<K>}ById`]: (id: EntityId) => Promise<void>;\n } &\n {\n [K in Collection as `create${Capitalize<K>}`]: (entity: E) => Promise<void>;\n } &\n {\n [K in Collection as `update${Capitalize<K>}`]: (entity: E) => Promise<void>;\n } &\n {\n [K in Collection as `updateAll${Capitalize<K>}`]: (entity: E[]) => Promise<void>;\n } &\n {\n [K in Collection as `delete${Capitalize<K>}`]: (entity: E) => Promise<void>;\n };\n\n\nexport type DataServiceMethods<E extends Entity, F extends Filter> =\n {\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 type Empty = Record<string, never>\n\nexport function withDataService<E extends Entity, F extends Filter, Collection extends string>(options: { dataServiceType: ProviderToken<DataService<E, F>>, filter: F, collection: Collection }): SignalStoreFeature<\n {\n state: Emtpy,\n // These alternatives break type inference:\n // state: { callState: CallState } & NamedEntityState<E, Collection>,\n // state: NamedEntityState<E, Collection>,\n\n signals: NamedEntitySignals<E, Collection>,\n methods: Emtpy,\n },\n {\n state: NamedDataServiceState<E, F, Collection>\n signals: NamedDataServiceSignals<E, Collection>\n methods: NamedDataServiceMethods<E, F, Collection>\n }\n>;\nexport function withDataService<E extends Entity, F extends Filter>(options: { dataServiceType: ProviderToken<DataService<E, F>>, filter: F }): SignalStoreFeature<\n {\n state: { callState: CallState } & EntityState<E>\n signals: Emtpy,\n methods: Emtpy,\n },\n {\n state: DataServiceState<E, F>\n signals: DataServiceSignals<E>\n methods: DataServiceMethods<E, F>\n }>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function withDataService<E extends Entity, F extends Filter, Collection extends string>(options: { dataServiceType: ProviderToken<DataService<E, F>>, filter: F, collection?: Collection }): SignalStoreFeature<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<Record<EntityId, boolean>>;\n\n return {\n [selectedEntitiesKey]: computed(() => entities().filter(e => selectedIds()[e.id]))\n }\n }),\n withMethods((store: Record<string, unknown> & StateSignal<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 store[callStateKey] && patchState(store, setLoading(prefix));\n\n try {\n const result = await dataService.load(filter());\n patchState(store, prefix ? setAllEntities(result, { collection: prefix }) : setAllEntities(result));\n store[callStateKey] && patchState(store, setLoaded(prefix));\n }\n catch (e) {\n store[callStateKey] && patchState(store, setError(e, prefix));\n throw e;\n }\n },\n [loadByIdKey]: async (id: EntityId): Promise<void> => {\n store[callStateKey] && patchState(store, setLoading(prefix));\n\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] && 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 store[callStateKey] && patchState(store, setLoading(prefix));\n\n try {\n const created = await dataService.create(entity);\n patchState(store, { [currentKey]: created });\n patchState(store, prefix ? addEntity(created, { collection: prefix }) : addEntity(created));\n store[callStateKey] && patchState(store, setLoaded(prefix));\n }\n catch (e) {\n store[callStateKey] && patchState(store, setError(e, prefix));\n throw e;\n }\n },\n [updateKey]: async (entity: E): Promise<void> => {\n patchState(store, { [currentKey]: entity });\n store[callStateKey] && patchState(store, setLoading(prefix));\n\n try {\n const updated = await dataService.update(entity);\n patchState(store, { [currentKey]: updated });\n // Why do we need this cast to Partial<Entity>?\n const updateArg = { id: updated.id, changes: updated as Partial<Entity> };\n patchState(store, prefix ? updateEntity(updateArg, { collection: prefix }) : updateEntity(updateArg));\n store[callStateKey] && patchState(store, setLoaded(prefix));\n }\n catch (e) {\n store[callStateKey] && patchState(store, setError(e, prefix));\n throw e;\n }\n },\n [updateAllKey]: async (entities: E[]): Promise<void> => {\n store[callStateKey] && patchState(store, setLoading(prefix));\n\n try {\n const result = await dataService.updateAll(entities);\n patchState(store, prefix ? setAllEntities(result, { collection: prefix }) : setAllEntities(result));\n store[callStateKey] && patchState(store, setLoaded(prefix));\n }\n catch (e) {\n store[callStateKey] && patchState(store, setError(e, prefix));\n throw e;\n }\n },\n [deleteKey]: async (entity: E): Promise<void> => {\n patchState(store, { [currentKey]: entity });\n store[callStateKey] && patchState(store, setLoading(prefix));\n\n try {\n await dataService.delete(entity);\n patchState(store, { [currentKey]: undefined });\n patchState(store, prefix ? removeEntity(entity.id, { collection: prefix }) : removeEntity(entity.id));\n store[callStateKey] && patchState(store, setLoaded(prefix));\n }\n catch (e) {\n store[callStateKey] && patchState(store, setError(e, prefix));\n throw e;\n }\n },\n };\n })\n );\n}\n","import { SignalStoreFeature, patchState, signalStoreFeature, withComputed, withHooks, withMethods } from \"@ngrx/signals\";\nimport { EntityId, EntityMap, EntityState } from \"@ngrx/signals/entities\";\nimport { Signal, effect, signal, untracked, isSignal } from \"@angular/core\";\nimport { EntitySignals, NamedEntitySignals } from \"@ngrx/signals/entities/src/models\";\nimport { Entity, capitalize } from \"./with-data-service\";\nimport { Emtpy } from \"./shared/empty\";\n\nexport type StackItem = Record<string, unknown>;\n\nexport type NormalizedUndoRedoOptions = {\n maxStackSize: number;\n collections?: string[]\n}\n\nconst defaultOptions: NormalizedUndoRedoOptions = {\n maxStackSize: 100\n};\n\nexport type NamedUndoRedoState<Collection extends string> = {\n [K in Collection as `${K}EntityMap`]: EntityMap<Entity>;\n} & {\n [K in Collection as `${K}Ids`]: EntityId[];\n }\n\nexport type NamedUndoRedoSignals<Collection extends string> = {\n [K in Collection as `${K}Entities`]: Signal<Entity[]>\n}\n\nexport function getUndoRedoKeys(collections?: string[]): string[] {\n if (collections) {\n return collections.flatMap(c => [`${c}EntityMap`, `${c}Ids`, `selected${capitalize(c)}Ids`, `${c}Filter`])\n }\n return ['entityMap', 'ids', 'selectedIds', 'filter'];\n}\n\nexport function withUndoRedo<Collection extends string>(options?: { maxStackSize?: number; collections: Collection[] }): SignalStoreFeature<\n {\n state: Emtpy,\n // This alternative breaks type inference:\n // state: NamedEntityState<Entity, Collection>\n signals: NamedEntitySignals<Entity, Collection>,\n methods: Emtpy\n },\n {\n state: Emtpy,\n signals: {\n canUndo: Signal<boolean>,\n canRedo: Signal<boolean>\n },\n methods: {\n undo: () => void,\n redo: () => void\n }\n }>;\n\nexport function withUndoRedo(options?: { maxStackSize?: number }): SignalStoreFeature<\n {\n state: EntityState<Entity>,\n signals: EntitySignals<Entity>,\n methods: Emtpy\n },\n {\n state: Emtpy,\n signals: {\n canUndo: Signal<boolean>,\n canRedo: Signal<boolean>\n },\n methods: {\n undo: () => void,\n redo: () => void\n }\n }>;\n\nexport function withUndoRedo<Collection extends string>(options: {\n maxStackSize?: number;\n collections?: Collection[]\n} = {}): \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nSignalStoreFeature<any, any> {\n let previous: 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);\n\n return signalStoreFeature(\n\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 && previous) {\n redoStack.push(previous);\n }\n\n if (item) {\n skipOnce = true;\n patchState(store, item);\n previous = item;\n }\n\n updateInternal();\n },\n redo(): void {\n const item = redoStack.pop();\n\n if (item && previous) {\n undoStack.push(previous);\n }\n\n if (item) {\n skipOnce = true;\n patchState(store, item);\n previous = item;\n }\n\n updateInternal();\n }\n })),\n withHooks({\n onInit(store: Record<string, unknown>) {\n effect(() => {\n\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\n if (skipOnce) {\n skipOnce = false;\n return;\n }\n\n // Clear redoStack after recorded action\n redoStack.splice(0);\n\n if (previous) {\n undoStack.push(previous);\n }\n\n if (redoStack.length > normalized.maxStackSize) {\n undoStack.unshift();\n }\n\n previous = cand;\n\n // Don't propogate current reactive context\n untracked(() => updateInternal());\n })\n }\n })\n\n )\n}\n","import { isPlatformServer } from '@angular/common';\nimport { PLATFORM_ID, effect, inject } from '@angular/core';\nimport {\n SignalStoreFeature,\n getState,\n patchState,\n signalStoreFeature,\n withHooks,\n withMethods,\n} from '@ngrx/signals';\nimport { Emtpy } from './shared/empty';\n\ntype SignalStoreFeatureInput<State> = Pick<\n Parameters<SignalStoreFeature>[0],\n 'signals' | 'methods'\n> & {\n state: State;\n};\n\nconst NOOP = () => {};\n\ntype WithStorageSyncFeatureResult = {\n state: Emtpy;\n signals: Emtpy;\n methods: {\n clearStorage(): void;\n readFromStorage(): void;\n writeToStorage(): void;\n };\n};\n\nconst StorageSyncStub: Pick<\n WithStorageSyncFeatureResult,\n 'methods'\n>['methods'] = {\n clearStorage: NOOP,\n readFromStorage: NOOP,\n writeToStorage: NOOP,\n};\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) => Partial<State>;\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 tranform the state into a string representation.\n *\n * `JSON.stringify()` by default\n */\n stringify?: (state: State) => string;\n /**\n * Factory function used to select the storage.\n *\n * `localstorage` by default\n */\n storage?: () => Storage;\n};\n\n/**\n * Enables store synchronization with storage.\n *\n * Only works on browser platform.\n */\nexport function withStorageSync<\n State extends object,\n Input extends SignalStoreFeatureInput<State>\n>(key: string): SignalStoreFeature<Input, WithStorageSyncFeatureResult>;\nexport function withStorageSync<\n State extends object,\n Input extends SignalStoreFeatureInput<State>\n>(\n config: SyncConfig<Input['state']>\n): SignalStoreFeature<Input, WithStorageSyncFeatureResult>;\nexport function withStorageSync<\n State extends object,\n Input extends SignalStoreFeatureInput<State>\n>(\n configOrKey: SyncConfig<Input['state']> | string\n): SignalStoreFeature<Input, WithStorageSyncFeatureResult> {\n const {\n key,\n autoSync = true,\n select = (state: State) => state,\n parse = JSON.parse,\n stringify = JSON.stringify,\n storage: storageFactory = () => localStorage,\n } = typeof configOrKey === 'string' ? { key: configOrKey } : configOrKey;\n\n return signalStoreFeature(\n withMethods((store, platformId = inject(PLATFORM_ID)) => {\n if (isPlatformServer(platformId)) {\n console.warn(\n `'withStorageSync' provides non-functional implementation due to server-side execution`\n );\n return StorageSyncStub;\n }\n\n const storage = storageFactory();\n\n return {\n /**\n * Removes the item stored in storage.\n */\n clearStorage(): void {\n storage.removeItem(key);\n },\n /**\n * Reads item from storage and patches the state.\n */\n readFromStorage(): void {\n const stateString = storage.getItem(key);\n if (stateString) {\n patchState(store, parse(stateString));\n }\n },\n /**\n * Writes selected portion to storage.\n */\n writeToStorage(): void {\n const slicedState = select(getState(store) as State);\n storage.setItem(key, stringify(slicedState));\n },\n };\n }),\n withHooks({\n onInit(store, platformId = inject(PLATFORM_ID)) {\n if (isPlatformServer(platformId)) {\n return;\n }\n\n if (autoSync) {\n store.readFromStorage();\n\n effect(() => {\n store.writeToStorage();\n });\n }\n },\n })\n );\n}\n","import { Action } from '@ngrx/store';\nimport { Unsubscribable } from 'rxjs';\n\n\nexport function isUnsubscribable<F extends (...args: unknown[]) => unknown>(\n fn: F | (F & Unsubscribable)\n): fn is F & Unsubscribable {\n return !!(fn as any as F & Unsubscribable)?.unsubscribe;\n}\n\nexport function capitalize(str: string): string {\n return str ? str[0].toUpperCase() + str.substring(1) : str;\n}\n\nexport function isActionCreator(action: any): action is Action {\n return (\n typeof action === 'function' &&\n action &&\n action.type &&\n typeof action.type === 'string'\n );\n}\n","import { Injectable, inject } from \"@angular/core\";\nimport { rxMethod } from \"@ngrx/signals/rxjs-interop\";\nimport { Action, ActionCreator } from \"@ngrx/store\";\nimport { pipe, tap } from \"rxjs\";\nimport { MapperTypes } from \"./model\";\nimport { isUnsubscribable } from \"./util\";\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SignalReduxStore {\n private mapperDict: Record<string, {\n storeMethod: (...args: unknown[]) => unknown,\n resultMethod?: (...args: unknown[]) => unknown,\n }> = {};\n\n dispatch = rxMethod<Action>(pipe(\n tap((action: Action) => {\n const callbacks = this.mapperDict[action.type];\n if (callbacks?.storeMethod) {\n if (\n isUnsubscribable(callbacks.storeMethod) &&\n callbacks.resultMethod\n ) {\n return callbacks.storeMethod(action, (a: Action) => {\n const resultAction = callbacks.resultMethod?.(a) as Action;\n this.dispatch(resultAction);\n });\n }\n\n return callbacks?.storeMethod(action);\n }\n\n return;\n })\n ));\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n connectFeatureStore(mappers: MapperTypes<ActionCreator<any, any>[]>[]): void {\n mappers.forEach(\n mapper => mapper.types.forEach(\n action => this.mapperDict[action] = {\n storeMethod: mapper.storeMethod,\n resultMethod: mapper.resultMethod\n }\n )\n );\n }\n}\n\nexport function injectReduxDispatch() {\n return inject(SignalReduxStore).dispatch;\n}\n","import { ENVIRONMENT_INITIALIZER, inject, makeEnvironmentProviders } from \"@angular/core\";\nimport { ActionCreator, ActionType } from \"@ngrx/store/src/models\";\nimport { CreateReduxState, ExtractActionTypes, MapperTypes, Store } from \"./model\";\nimport { SignalReduxStore, injectReduxDispatch } from \"./signal-redux-store\";\nimport { capitalize, isActionCreator } from \"./util\";\n\n\nexport function mapAction<\n Creators extends readonly ActionCreator[]\n>(\n ...args: [\n ...creators: Creators,\n storeMethod: (action: ActionType<Creators[number]>) => unknown\n ]\n): MapperTypes<Creators>;\nexport function mapAction<\n Creators extends readonly ActionCreator[],\n T\n>(\n ...args: [\n ...creators: Creators,\n storeMethod: (action: ActionType<Creators[number]>, resultMethod: (input: T) => unknown) => unknown,\n resultMethod: (input: T) => unknown\n ]\n): MapperTypes<Creators>;\nexport function mapAction<\n Creators extends readonly ActionCreator[]\n>(\n ...args: [\n ...creators: Creators,\n storeMethod: (action: ActionType<Creators[number]>) => unknown,\n resultMethod?: (input: unknown) => unknown\n ]\n): MapperTypes<Creators> {\n let resultMethod = args.pop() as unknown as ((input: unknown) => unknown ) | undefined;\n let storeMethod = args.pop() as unknown as (action: ActionType<Creators[number]>) => unknown;\n\n if (isActionCreator(storeMethod)) {\n args.push(storeMethod);\n storeMethod = resultMethod || storeMethod;\n resultMethod = undefined;\n }\n\n const types = (args as unknown as Creators).map(\n (creator) => creator.type\n ) as unknown as ExtractActionTypes<Creators>;\n\n return {\n types,\n storeMethod,\n resultMethod\n };\n}\n\nexport function withActionMappers(\n ...mappers: MapperTypes<ActionCreator<any, any>[]>[]\n): MapperTypes<ActionCreator<any, any>[]>[] {\n return mappers;\n}\n\nexport function createReduxState<\n StoreName extends string,\n STORE extends Store\n>(\n storeName: StoreName,\n signalStore: STORE,\n withActionMappers: (store: InstanceType<STORE>) => MapperTypes<ActionCreator<any, any>[]>[],\n): CreateReduxState<StoreName, STORE> {\n const isRootProvider = (signalStore as any)?.ɵprov?.providedIn === 'root';\n return {\n [`provide${capitalize(storeName)}Store`]: (connectReduxDevtools = false) => makeEnvironmentProviders([\n isRootProvider? [] : signalStore,\n {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useFactory: (\n signalReduxStore = inject(SignalReduxStore),\n store = inject(signalStore)\n ) => () => {\n if (connectReduxDevtools) {\n // addStoreToReduxDevtools(store, storeName, false);\n }\n signalReduxStore.connectFeatureStore(\n withActionMappers(store)\n );\n }\n }\n ]),\n [`inject${capitalize(storeName)}Store`]: () => Object.assign(\n inject(signalStore),\n { dispatch: injectReduxDispatch() }\n )\n } as CreateReduxState<StoreName, STORE>;\n}\n","import { Injector, Signal, inject } from \"@angular/core\";\nimport { rxMethod } from \"@ngrx/signals/rxjs-interop\";\nimport { Observable, Unsubscribable, map, pipe } from \"rxjs\";\n\n\ntype RxMethodInput<Input> = Input | Observable<Input> | Signal<Input>;\n\ntype RxMethod<Input, MethodInput = Input, MethodResult = unknown> = ((\n input: RxMethodInput<Input>,\n resultMethod: (input: MethodInput) => MethodResult\n) => Unsubscribable) & Unsubscribable;\n\nexport function reduxMethod<Input, MethodInput = Input>(\n generator: (source$: Observable<Input>) => Observable<MethodInput>,\n config?: { injector?: Injector }\n): RxMethod<Input, MethodInput>;\nexport function reduxMethod<Input, MethodInput = Input, MethodResult = unknown>(\n generator: (source$: Observable<Input>) => Observable<MethodInput>,\n resultMethod: (input: MethodInput) => MethodResult,\n config?: {\n injector?: Injector\n }\n): RxMethod<Input, MethodInput, MethodResult>;\nexport function reduxMethod<Input, MethodInput = Input, MethodResult = unknown>(\n generator: (source$: Observable<Input>) => Observable<MethodInput>,\n resultMethodOrConfig?: ((input: MethodInput) => MethodResult) | {\n injector?: Injector\n },\n config?: {\n injector?: Injector\n }\n): RxMethod<Input, MethodInput, MethodResult> {\n const injector = inject(Injector);\n\n if (typeof resultMethodOrConfig === 'function') {\n let unsubscribable: Unsubscribable;\n const inputResultFn = ((\n input: RxMethodInput<Input>,\n resultMethod = resultMethodOrConfig\n ) => {\n\n const rxMethodWithResult = rxMethod<Input>(pipe(\n generator,\n map(resultMethod)\n ), {\n ...(config || {}),\n injector: config?.injector || injector\n });\n const rxWithInput = rxMethodWithResult(input);\n unsubscribable = { unsubscribe: rxWithInput.unsubscribe.bind(rxWithInput) };\n\n return rxWithInput;\n }) as RxMethod<Input, MethodInput, MethodResult>;\n\n inputResultFn.unsubscribe = () => unsubscribable?.unsubscribe();\n\n return inputResultFn;\n }\n\n return rxMethod<Input>(generator, resultMethodOrConfig);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["originalPatchState","capitalize","patchState"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -3,3 +3,6 @@ export * from './lib/with-redux';
3
3
  export * from './lib/with-call-state';
4
4
  export * from './lib/with-undo-redo';
5
5
  export * from './lib/with-data-service';
6
+ export { withStorageSync, SyncConfig } from './lib/with-storage-sync';
7
+ export * from './lib/redux-connector';
8
+ export * from './lib/redux-connector/rxjs-interop';