@ngrx/signals 18.0.0-rc.2 → 18.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/entities/src/index.d.ts +1 -1
  2. package/entities/src/with-entities.d.ts +4 -16
  3. package/esm2022/entities/src/index.mjs +1 -1
  4. package/esm2022/entities/src/with-entities.mjs +1 -1
  5. package/esm2022/rxjs-interop/src/rx-method.mjs +1 -1
  6. package/esm2022/src/index.mjs +2 -3
  7. package/esm2022/src/signal-state.mjs +7 -7
  8. package/esm2022/src/signal-store-assertions.mjs +15 -0
  9. package/esm2022/src/signal-store-feature.mjs +1 -1
  10. package/esm2022/src/signal-store-models.mjs +1 -1
  11. package/esm2022/src/signal-store.mjs +13 -10
  12. package/esm2022/src/state-source.mjs +48 -0
  13. package/esm2022/src/ts-helpers.mjs +1 -1
  14. package/esm2022/src/with-computed.mjs +3 -7
  15. package/esm2022/src/with-hooks.mjs +6 -6
  16. package/esm2022/src/with-methods.mjs +5 -9
  17. package/esm2022/src/with-state.mjs +6 -9
  18. package/fesm2022/ngrx-signals-entities.mjs.map +1 -1
  19. package/fesm2022/ngrx-signals-rxjs-interop.mjs.map +1 -1
  20. package/fesm2022/ngrx-signals.mjs +83 -51
  21. package/fesm2022/ngrx-signals.mjs.map +1 -1
  22. package/migrations/18_0_0-rc_3-protected-state/index.js +93 -0
  23. package/migrations/18_0_0-rc_3-protected-state/index.js.map +1 -0
  24. package/migrations/18_0_0-rc_3-writablestatesource/index.js +43 -0
  25. package/migrations/18_0_0-rc_3-writablestatesource/index.js.map +1 -0
  26. package/migrations/migration.json +12 -1
  27. package/package.json +1 -1
  28. package/rxjs-interop/src/rx-method.d.ts +1 -2
  29. package/src/index.d.ts +4 -5
  30. package/src/signal-state.d.ts +2 -3
  31. package/src/signal-store-assertions.d.ts +2 -0
  32. package/src/signal-store-feature.d.ts +26 -19
  33. package/src/signal-store-models.d.ts +2 -21
  34. package/src/signal-store.d.ts +140 -89
  35. package/src/state-source.d.ts +18 -0
  36. package/src/ts-helpers.d.ts +3 -0
  37. package/src/with-computed.d.ts +4 -2
  38. package/src/with-hooks.d.ts +3 -3
  39. package/src/with-methods.d.ts +5 -3
  40. package/src/with-state.d.ts +6 -2
  41. package/esm2022/src/get-state.mjs +0 -5
  42. package/esm2022/src/helpers.mjs +0 -9
  43. package/esm2022/src/patch-state.mjs +0 -8
  44. package/esm2022/src/state-signal.mjs +0 -2
  45. package/src/get-state.d.ts +0 -2
  46. package/src/helpers.d.ts +0 -1
  47. package/src/patch-state.d.ts +0 -4
  48. package/src/state-signal.d.ts +0 -5
@@ -1,19 +1,15 @@
1
- import { excludeKeys } from './helpers';
1
+ import { assertUniqueStoreMembers } from './signal-store-assertions';
2
2
  export function withComputed(signalsFactory) {
3
3
  return (store) => {
4
4
  const computedSignals = signalsFactory({
5
5
  ...store.stateSignals,
6
6
  ...store.computedSignals,
7
7
  });
8
- const computedSignalsKeys = Object.keys(computedSignals);
9
- const stateSignals = excludeKeys(store.stateSignals, computedSignalsKeys);
10
- const methods = excludeKeys(store.methods, computedSignalsKeys);
8
+ assertUniqueStoreMembers(store, Object.keys(computedSignals));
11
9
  return {
12
10
  ...store,
13
- stateSignals,
14
11
  computedSignals: { ...store.computedSignals, ...computedSignals },
15
- methods,
16
12
  };
17
13
  };
18
14
  }
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1jb21wdXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL21vZHVsZXMvc2lnbmFscy9zcmMvd2l0aC1jb21wdXRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBV3hDLE1BQU0sVUFBVSxZQUFZLENBSTFCLGNBRW9CO0lBS3BCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNmLE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQztZQUNyQyxHQUFHLEtBQUssQ0FBQyxZQUFZO1lBQ3JCLEdBQUcsS0FBSyxDQUFDLGVBQWU7U0FDekIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDMUUsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUVoRSxPQUFPO1lBQ0wsR0FBRyxLQUFLO1lBQ1IsWUFBWTtZQUNaLGVBQWUsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLGVBQWUsRUFBRSxHQUFHLGVBQWUsRUFBRTtZQUNqRSxPQUFPO1NBQ3NELENBQUM7SUFDbEUsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4Y2x1ZGVLZXlzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7XG4gIEVtcHR5RmVhdHVyZVJlc3VsdCxcbiAgSW5uZXJTaWduYWxTdG9yZSxcbiAgU2lnbmFsc0RpY3Rpb25hcnksXG4gIFNpZ25hbFN0b3JlRmVhdHVyZSxcbiAgU2lnbmFsU3RvcmVGZWF0dXJlUmVzdWx0LFxuICBTdGF0ZVNpZ25hbHMsXG59IGZyb20gJy4vc2lnbmFsLXN0b3JlLW1vZGVscyc7XG5pbXBvcnQgeyBQcmV0dGlmeSB9IGZyb20gJy4vdHMtaGVscGVycyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoQ29tcHV0ZWQ8XG4gIElucHV0IGV4dGVuZHMgU2lnbmFsU3RvcmVGZWF0dXJlUmVzdWx0LFxuICBDb21wdXRlZFNpZ25hbHMgZXh0ZW5kcyBTaWduYWxzRGljdGlvbmFyeVxuPihcbiAgc2lnbmFsc0ZhY3Rvcnk6IChcbiAgICBzdG9yZTogUHJldHRpZnk8U3RhdGVTaWduYWxzPElucHV0WydzdGF0ZSddPiAmIElucHV0Wydjb21wdXRlZCddPlxuICApID0+IENvbXB1dGVkU2lnbmFsc1xuKTogU2lnbmFsU3RvcmVGZWF0dXJlPFxuICBJbnB1dCxcbiAgRW1wdHlGZWF0dXJlUmVzdWx0ICYgeyBjb21wdXRlZDogQ29tcHV0ZWRTaWduYWxzIH1cbj4ge1xuICByZXR1cm4gKHN0b3JlKSA9PiB7XG4gICAgY29uc3QgY29tcHV0ZWRTaWduYWxzID0gc2lnbmFsc0ZhY3Rvcnkoe1xuICAgICAgLi4uc3RvcmUuc3RhdGVTaWduYWxzLFxuICAgICAgLi4uc3RvcmUuY29tcHV0ZWRTaWduYWxzLFxuICAgIH0pO1xuICAgIGNvbnN0IGNvbXB1dGVkU2lnbmFsc0tleXMgPSBPYmplY3Qua2V5cyhjb21wdXRlZFNpZ25hbHMpO1xuICAgIGNvbnN0IHN0YXRlU2lnbmFscyA9IGV4Y2x1ZGVLZXlzKHN0b3JlLnN0YXRlU2lnbmFscywgY29tcHV0ZWRTaWduYWxzS2V5cyk7XG4gICAgY29uc3QgbWV0aG9kcyA9IGV4Y2x1ZGVLZXlzKHN0b3JlLm1ldGhvZHMsIGNvbXB1dGVkU2lnbmFsc0tleXMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0b3JlLFxuICAgICAgc3RhdGVTaWduYWxzLFxuICAgICAgY29tcHV0ZWRTaWduYWxzOiB7IC4uLnN0b3JlLmNvbXB1dGVkU2lnbmFscywgLi4uY29tcHV0ZWRTaWduYWxzIH0sXG4gICAgICBtZXRob2RzLFxuICAgIH0gYXMgSW5uZXJTaWduYWxTdG9yZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgQ29tcHV0ZWRTaWduYWxzPjtcbiAgfTtcbn1cbiJdfQ==
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1jb21wdXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL21vZHVsZXMvc2lnbmFscy9zcmMvd2l0aC1jb21wdXRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQVVyRSxNQUFNLFVBQVUsWUFBWSxDQUkxQixjQUVvQjtJQUtwQixPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDZixNQUFNLGVBQWUsR0FBRyxjQUFjLENBQUM7WUFDckMsR0FBRyxLQUFLLENBQUMsWUFBWTtZQUNyQixHQUFHLEtBQUssQ0FBQyxlQUFlO1NBQ3pCLENBQUMsQ0FBQztRQUNILHdCQUF3QixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFFOUQsT0FBTztZQUNMLEdBQUcsS0FBSztZQUNSLGVBQWUsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLGVBQWUsRUFBRSxHQUFHLGVBQWUsRUFBRTtTQUNKLENBQUM7SUFDbEUsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFzc2VydFVuaXF1ZVN0b3JlTWVtYmVycyB9IGZyb20gJy4vc2lnbmFsLXN0b3JlLWFzc2VydGlvbnMnO1xuaW1wb3J0IHtcbiAgSW5uZXJTaWduYWxTdG9yZSxcbiAgU2lnbmFsc0RpY3Rpb25hcnksXG4gIFNpZ25hbFN0b3JlRmVhdHVyZSxcbiAgU2lnbmFsU3RvcmVGZWF0dXJlUmVzdWx0LFxuICBTdGF0ZVNpZ25hbHMsXG59IGZyb20gJy4vc2lnbmFsLXN0b3JlLW1vZGVscyc7XG5pbXBvcnQgeyBQcmV0dGlmeSB9IGZyb20gJy4vdHMtaGVscGVycyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoQ29tcHV0ZWQ8XG4gIElucHV0IGV4dGVuZHMgU2lnbmFsU3RvcmVGZWF0dXJlUmVzdWx0LFxuICBDb21wdXRlZFNpZ25hbHMgZXh0ZW5kcyBTaWduYWxzRGljdGlvbmFyeVxuPihcbiAgc2lnbmFsc0ZhY3Rvcnk6IChcbiAgICBzdG9yZTogUHJldHRpZnk8U3RhdGVTaWduYWxzPElucHV0WydzdGF0ZSddPiAmIElucHV0Wydjb21wdXRlZCddPlxuICApID0+IENvbXB1dGVkU2lnbmFsc1xuKTogU2lnbmFsU3RvcmVGZWF0dXJlPFxuICBJbnB1dCxcbiAgeyBzdGF0ZToge307IGNvbXB1dGVkOiBDb21wdXRlZFNpZ25hbHM7IG1ldGhvZHM6IHt9IH1cbj4ge1xuICByZXR1cm4gKHN0b3JlKSA9PiB7XG4gICAgY29uc3QgY29tcHV0ZWRTaWduYWxzID0gc2lnbmFsc0ZhY3Rvcnkoe1xuICAgICAgLi4uc3RvcmUuc3RhdGVTaWduYWxzLFxuICAgICAgLi4uc3RvcmUuY29tcHV0ZWRTaWduYWxzLFxuICAgIH0pO1xuICAgIGFzc2VydFVuaXF1ZVN0b3JlTWVtYmVycyhzdG9yZSwgT2JqZWN0LmtleXMoY29tcHV0ZWRTaWduYWxzKSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RvcmUsXG4gICAgICBjb21wdXRlZFNpZ25hbHM6IHsgLi4uc3RvcmUuY29tcHV0ZWRTaWduYWxzLCAuLi5jb21wdXRlZFNpZ25hbHMgfSxcbiAgICB9IGFzIElubmVyU2lnbmFsU3RvcmU8UmVjb3JkPHN0cmluZywgdW5rbm93bj4sIENvbXB1dGVkU2lnbmFscz47XG4gIH07XG59XG4iXX0=
@@ -1,14 +1,14 @@
1
- import { STATE_SIGNAL } from './state-signal';
1
+ import { STATE_SOURCE } from './state-source';
2
2
  export function withHooks(hooksOrFactory) {
3
3
  return (store) => {
4
- const storeProps = {
5
- [STATE_SIGNAL]: store[STATE_SIGNAL],
4
+ const storeMembers = {
5
+ [STATE_SOURCE]: store[STATE_SOURCE],
6
6
  ...store.stateSignals,
7
7
  ...store.computedSignals,
8
8
  ...store.methods,
9
9
  };
10
10
  const hooks = typeof hooksOrFactory === 'function'
11
- ? hooksOrFactory(storeProps)
11
+ ? hooksOrFactory(storeMembers)
12
12
  : hooksOrFactory;
13
13
  const createHook = (name) => {
14
14
  const hook = hooks[name];
@@ -18,7 +18,7 @@ export function withHooks(hooksOrFactory) {
18
18
  if (currentHook) {
19
19
  currentHook();
20
20
  }
21
- hook(storeProps);
21
+ hook(storeMembers);
22
22
  }
23
23
  : currentHook;
24
24
  };
@@ -31,4 +31,4 @@ export function withHooks(hooksOrFactory) {
31
31
  };
32
32
  };
33
33
  }
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1ob29rcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL21vZHVsZXMvc2lnbmFscy9zcmMvd2l0aC1ob29rcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFzQzNELE1BQU0sVUFBVSxTQUFTLENBQ3ZCLGNBS3VCO0lBRXZCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNmLE1BQU0sVUFBVSxHQUFHO1lBQ2pCLENBQUMsWUFBWSxDQUFDLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQztZQUNuQyxHQUFHLEtBQUssQ0FBQyxZQUFZO1lBQ3JCLEdBQUcsS0FBSyxDQUFDLGVBQWU7WUFDeEIsR0FBRyxLQUFLLENBQUMsT0FBTztTQUNqQixDQUFDO1FBQ0YsTUFBTSxLQUFLLEdBQ1QsT0FBTyxjQUFjLEtBQUssVUFBVTtZQUNsQyxDQUFDLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQztZQUM1QixDQUFDLENBQUMsY0FBYyxDQUFDO1FBQ3JCLE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBd0IsRUFBRSxFQUFFO1lBQzlDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXRDLE9BQU8sSUFBSTtnQkFDVCxDQUFDLENBQUMsR0FBRyxFQUFFO29CQUNILElBQUksV0FBVyxFQUFFLENBQUM7d0JBQ2hCLFdBQVcsRUFBRSxDQUFDO29CQUNoQixDQUFDO29CQUVELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDbkIsQ0FBQztnQkFDSCxDQUFDLENBQUMsV0FBVyxDQUFDO1FBQ2xCLENBQUMsQ0FBQztRQUVGLE9BQU87WUFDTCxHQUFHLEtBQUs7WUFDUixLQUFLLEVBQUU7Z0JBQ0wsTUFBTSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQzVCLFNBQVMsRUFBRSxVQUFVLENBQUMsV0FBVyxDQUFDO2FBQ25DO1NBQ0YsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTVEFURV9TSUdOQUwsIFN0YXRlU2lnbmFsIH0gZnJvbSAnLi9zdGF0ZS1zaWduYWwnO1xuaW1wb3J0IHtcbiAgRW1wdHlGZWF0dXJlUmVzdWx0LFxuICBTaWduYWxTdG9yZUZlYXR1cmUsXG4gIFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdCxcbiAgU3RhdGVTaWduYWxzLFxufSBmcm9tICcuL3NpZ25hbC1zdG9yZS1tb2RlbHMnO1xuaW1wb3J0IHsgUHJldHRpZnkgfSBmcm9tICcuL3RzLWhlbHBlcnMnO1xuXG50eXBlIEhvb2tGbjxJbnB1dCBleHRlbmRzIFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdD4gPSAoXG4gIHN0b3JlOiBQcmV0dGlmeTxcbiAgICBTdGF0ZVNpZ25hbHM8SW5wdXRbJ3N0YXRlJ10+ICZcbiAgICAgIElucHV0Wydjb21wdXRlZCddICZcbiAgICAgIElucHV0WydtZXRob2RzJ10gJlxuICAgICAgU3RhdGVTaWduYWw8UHJldHRpZnk8SW5wdXRbJ3N0YXRlJ10+PlxuICA+XG4pID0+IHZvaWQ7XG5cbnR5cGUgSG9va3NGYWN0b3J5PElucHV0IGV4dGVuZHMgU2lnbmFsU3RvcmVGZWF0dXJlUmVzdWx0PiA9IChcbiAgc3RvcmU6IFByZXR0aWZ5PFxuICAgIFN0YXRlU2lnbmFsczxJbnB1dFsnc3RhdGUnXT4gJlxuICAgICAgSW5wdXRbJ2NvbXB1dGVkJ10gJlxuICAgICAgSW5wdXRbJ21ldGhvZHMnXSAmXG4gICAgICBTdGF0ZVNpZ25hbDxQcmV0dGlmeTxJbnB1dFsnc3RhdGUnXT4+XG4gID5cbikgPT4ge1xuICBvbkluaXQ/OiAoKSA9PiB2b2lkO1xuICBvbkRlc3Ryb3k/OiAoKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhIb29rczxJbnB1dCBleHRlbmRzIFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdD4oaG9va3M6IHtcbiAgb25Jbml0PzogSG9va0ZuPElucHV0PjtcbiAgb25EZXN0cm95PzogSG9va0ZuPElucHV0Pjtcbn0pOiBTaWduYWxTdG9yZUZlYXR1cmU8SW5wdXQsIEVtcHR5RmVhdHVyZVJlc3VsdD47XG5leHBvcnQgZnVuY3Rpb24gd2l0aEhvb2tzPElucHV0IGV4dGVuZHMgU2lnbmFsU3RvcmVGZWF0dXJlUmVzdWx0PihcbiAgaG9va3M6IEhvb2tzRmFjdG9yeTxJbnB1dD5cbik6IFNpZ25hbFN0b3JlRmVhdHVyZTxJbnB1dCwgRW1wdHlGZWF0dXJlUmVzdWx0PjtcblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhIb29rczxJbnB1dCBleHRlbmRzIFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdD4oXG4gIGhvb2tzT3JGYWN0b3J5OlxuICAgIHwge1xuICAgICAgICBvbkluaXQ/OiBIb29rRm48SW5wdXQ+O1xuICAgICAgICBvbkRlc3Ryb3k/OiBIb29rRm48SW5wdXQ+O1xuICAgICAgfVxuICAgIHwgSG9va3NGYWN0b3J5PElucHV0PlxuKTogU2lnbmFsU3RvcmVGZWF0dXJlPElucHV0LCBFbXB0eUZlYXR1cmVSZXN1bHQ+IHtcbiAgcmV0dXJuIChzdG9yZSkgPT4ge1xuICAgIGNvbnN0IHN0b3JlUHJvcHMgPSB7XG4gICAgICBbU1RBVEVfU0lHTkFMXTogc3RvcmVbU1RBVEVfU0lHTkFMXSxcbiAgICAgIC4uLnN0b3JlLnN0YXRlU2lnbmFscyxcbiAgICAgIC4uLnN0b3JlLmNvbXB1dGVkU2lnbmFscyxcbiAgICAgIC4uLnN0b3JlLm1ldGhvZHMsXG4gICAgfTtcbiAgICBjb25zdCBob29rcyA9XG4gICAgICB0eXBlb2YgaG9va3NPckZhY3RvcnkgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBob29rc09yRmFjdG9yeShzdG9yZVByb3BzKVxuICAgICAgICA6IGhvb2tzT3JGYWN0b3J5O1xuICAgIGNvbnN0IGNyZWF0ZUhvb2sgPSAobmFtZToga2V5b2YgdHlwZW9mIGhvb2tzKSA9PiB7XG4gICAgICBjb25zdCBob29rID0gaG9va3NbbmFtZV07XG4gICAgICBjb25zdCBjdXJyZW50SG9vayA9IHN0b3JlLmhvb2tzW25hbWVdO1xuXG4gICAgICByZXR1cm4gaG9va1xuICAgICAgICA/ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50SG9vaykge1xuICAgICAgICAgICAgICBjdXJyZW50SG9vaygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBob29rKHN0b3JlUHJvcHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgOiBjdXJyZW50SG9vaztcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0b3JlLFxuICAgICAgaG9va3M6IHtcbiAgICAgICAgb25Jbml0OiBjcmVhdGVIb29rKCdvbkluaXQnKSxcbiAgICAgICAgb25EZXN0cm95OiBjcmVhdGVIb29rKCdvbkRlc3Ryb3knKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfTtcbn1cbiJdfQ==
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1ob29rcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL21vZHVsZXMvc2lnbmFscy9zcmMvd2l0aC1ob29rcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUF1QixNQUFNLGdCQUFnQixDQUFDO0FBc0NuRSxNQUFNLFVBQVUsU0FBUyxDQUN2QixjQUt1QjtJQUV2QixPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDZixNQUFNLFlBQVksR0FBRztZQUNuQixDQUFDLFlBQVksQ0FBQyxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUM7WUFDbkMsR0FBRyxLQUFLLENBQUMsWUFBWTtZQUNyQixHQUFHLEtBQUssQ0FBQyxlQUFlO1lBQ3hCLEdBQUcsS0FBSyxDQUFDLE9BQU87U0FDakIsQ0FBQztRQUNGLE1BQU0sS0FBSyxHQUNULE9BQU8sY0FBYyxLQUFLLFVBQVU7WUFDbEMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUM7WUFDOUIsQ0FBQyxDQUFDLGNBQWMsQ0FBQztRQUNyQixNQUFNLFVBQVUsR0FBRyxDQUFDLElBQXdCLEVBQUUsRUFBRTtZQUM5QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUV0QyxPQUFPLElBQUk7Z0JBQ1QsQ0FBQyxDQUFDLEdBQUcsRUFBRTtvQkFDSCxJQUFJLFdBQVcsRUFBRSxDQUFDO3dCQUNoQixXQUFXLEVBQUUsQ0FBQztvQkFDaEIsQ0FBQztvQkFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3JCLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLFdBQVcsQ0FBQztRQUNsQixDQUFDLENBQUM7UUFFRixPQUFPO1lBQ0wsR0FBRyxLQUFLO1lBQ1IsS0FBSyxFQUFFO2dCQUNMLE1BQU0sRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO2dCQUM1QixTQUFTLEVBQUUsVUFBVSxDQUFDLFdBQVcsQ0FBQzthQUNuQztTQUNGLENBQUM7SUFDSixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU1RBVEVfU09VUkNFLCBXcml0YWJsZVN0YXRlU291cmNlIH0gZnJvbSAnLi9zdGF0ZS1zb3VyY2UnO1xuaW1wb3J0IHtcbiAgRW1wdHlGZWF0dXJlUmVzdWx0LFxuICBTaWduYWxTdG9yZUZlYXR1cmUsXG4gIFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdCxcbiAgU3RhdGVTaWduYWxzLFxufSBmcm9tICcuL3NpZ25hbC1zdG9yZS1tb2RlbHMnO1xuaW1wb3J0IHsgUHJldHRpZnkgfSBmcm9tICcuL3RzLWhlbHBlcnMnO1xuXG50eXBlIEhvb2tGbjxJbnB1dCBleHRlbmRzIFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdD4gPSAoXG4gIHN0b3JlOiBQcmV0dGlmeTxcbiAgICBTdGF0ZVNpZ25hbHM8SW5wdXRbJ3N0YXRlJ10+ICZcbiAgICAgIElucHV0Wydjb21wdXRlZCddICZcbiAgICAgIElucHV0WydtZXRob2RzJ10gJlxuICAgICAgV3JpdGFibGVTdGF0ZVNvdXJjZTxQcmV0dGlmeTxJbnB1dFsnc3RhdGUnXT4+XG4gID5cbikgPT4gdm9pZDtcblxudHlwZSBIb29rc0ZhY3Rvcnk8SW5wdXQgZXh0ZW5kcyBTaWduYWxTdG9yZUZlYXR1cmVSZXN1bHQ+ID0gKFxuICBzdG9yZTogUHJldHRpZnk8XG4gICAgU3RhdGVTaWduYWxzPElucHV0WydzdGF0ZSddPiAmXG4gICAgICBJbnB1dFsnY29tcHV0ZWQnXSAmXG4gICAgICBJbnB1dFsnbWV0aG9kcyddICZcbiAgICAgIFdyaXRhYmxlU3RhdGVTb3VyY2U8UHJldHRpZnk8SW5wdXRbJ3N0YXRlJ10+PlxuICA+XG4pID0+IHtcbiAgb25Jbml0PzogKCkgPT4gdm9pZDtcbiAgb25EZXN0cm95PzogKCkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoSG9va3M8SW5wdXQgZXh0ZW5kcyBTaWduYWxTdG9yZUZlYXR1cmVSZXN1bHQ+KGhvb2tzOiB7XG4gIG9uSW5pdD86IEhvb2tGbjxJbnB1dD47XG4gIG9uRGVzdHJveT86IEhvb2tGbjxJbnB1dD47XG59KTogU2lnbmFsU3RvcmVGZWF0dXJlPElucHV0LCBFbXB0eUZlYXR1cmVSZXN1bHQ+O1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhIb29rczxJbnB1dCBleHRlbmRzIFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdD4oXG4gIGhvb2tzOiBIb29rc0ZhY3Rvcnk8SW5wdXQ+XG4pOiBTaWduYWxTdG9yZUZlYXR1cmU8SW5wdXQsIEVtcHR5RmVhdHVyZVJlc3VsdD47XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoSG9va3M8SW5wdXQgZXh0ZW5kcyBTaWduYWxTdG9yZUZlYXR1cmVSZXN1bHQ+KFxuICBob29rc09yRmFjdG9yeTpcbiAgICB8IHtcbiAgICAgICAgb25Jbml0PzogSG9va0ZuPElucHV0PjtcbiAgICAgICAgb25EZXN0cm95PzogSG9va0ZuPElucHV0PjtcbiAgICAgIH1cbiAgICB8IEhvb2tzRmFjdG9yeTxJbnB1dD5cbik6IFNpZ25hbFN0b3JlRmVhdHVyZTxJbnB1dCwgRW1wdHlGZWF0dXJlUmVzdWx0PiB7XG4gIHJldHVybiAoc3RvcmUpID0+IHtcbiAgICBjb25zdCBzdG9yZU1lbWJlcnMgPSB7XG4gICAgICBbU1RBVEVfU09VUkNFXTogc3RvcmVbU1RBVEVfU09VUkNFXSxcbiAgICAgIC4uLnN0b3JlLnN0YXRlU2lnbmFscyxcbiAgICAgIC4uLnN0b3JlLmNvbXB1dGVkU2lnbmFscyxcbiAgICAgIC4uLnN0b3JlLm1ldGhvZHMsXG4gICAgfTtcbiAgICBjb25zdCBob29rcyA9XG4gICAgICB0eXBlb2YgaG9va3NPckZhY3RvcnkgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBob29rc09yRmFjdG9yeShzdG9yZU1lbWJlcnMpXG4gICAgICAgIDogaG9va3NPckZhY3Rvcnk7XG4gICAgY29uc3QgY3JlYXRlSG9vayA9IChuYW1lOiBrZXlvZiB0eXBlb2YgaG9va3MpID0+IHtcbiAgICAgIGNvbnN0IGhvb2sgPSBob29rc1tuYW1lXTtcbiAgICAgIGNvbnN0IGN1cnJlbnRIb29rID0gc3RvcmUuaG9va3NbbmFtZV07XG5cbiAgICAgIHJldHVybiBob29rXG4gICAgICAgID8gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRIb29rKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRIb29rKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGhvb2soc3RvcmVNZW1iZXJzKTtcbiAgICAgICAgICB9XG4gICAgICAgIDogY3VycmVudEhvb2s7XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zdG9yZSxcbiAgICAgIGhvb2tzOiB7XG4gICAgICAgIG9uSW5pdDogY3JlYXRlSG9vaygnb25Jbml0JyksXG4gICAgICAgIG9uRGVzdHJveTogY3JlYXRlSG9vaygnb25EZXN0cm95JyksXG4gICAgICB9LFxuICAgIH07XG4gIH07XG59XG4iXX0=
@@ -1,22 +1,18 @@
1
- import { excludeKeys } from './helpers';
2
- import { STATE_SIGNAL } from './state-signal';
1
+ import { STATE_SOURCE } from './state-source';
2
+ import { assertUniqueStoreMembers } from './signal-store-assertions';
3
3
  export function withMethods(methodsFactory) {
4
4
  return (store) => {
5
5
  const methods = methodsFactory({
6
- [STATE_SIGNAL]: store[STATE_SIGNAL],
6
+ [STATE_SOURCE]: store[STATE_SOURCE],
7
7
  ...store.stateSignals,
8
8
  ...store.computedSignals,
9
9
  ...store.methods,
10
10
  });
11
- const methodsKeys = Object.keys(methods);
12
- const stateSignals = excludeKeys(store.stateSignals, methodsKeys);
13
- const computedSignals = excludeKeys(store.computedSignals, methodsKeys);
11
+ assertUniqueStoreMembers(store, Object.keys(methods));
14
12
  return {
15
13
  ...store,
16
- stateSignals,
17
- computedSignals,
18
14
  methods: { ...store.methods, ...methods },
19
15
  };
20
16
  };
21
17
  }
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1tZXRob2RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9zaWduYWxzL3NyYy93aXRoLW1ldGhvZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFZM0QsTUFBTSxVQUFVLFdBQVcsQ0FJekIsY0FPWTtJQUVaLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNmLE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQztZQUM3QixDQUFDLFlBQVksQ0FBQyxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUM7WUFDbkMsR0FBRyxLQUFLLENBQUMsWUFBWTtZQUNyQixHQUFHLEtBQUssQ0FBQyxlQUFlO1lBQ3hCLEdBQUcsS0FBSyxDQUFDLE9BQU87U0FDakIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QyxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNsRSxNQUFNLGVBQWUsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUV4RSxPQUFPO1lBQ0wsR0FBRyxLQUFLO1lBQ1IsWUFBWTtZQUNaLGVBQWU7WUFDZixPQUFPLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUU7U0FDK0IsQ0FBQztJQUM3RSxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhjbHVkZUtleXMgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgU1RBVEVfU0lHTkFMLCBTdGF0ZVNpZ25hbCB9IGZyb20gJy4vc3RhdGUtc2lnbmFsJztcbmltcG9ydCB7XG4gIEVtcHR5RmVhdHVyZVJlc3VsdCxcbiAgSW5uZXJTaWduYWxTdG9yZSxcbiAgTWV0aG9kc0RpY3Rpb25hcnksXG4gIFNpZ25hbHNEaWN0aW9uYXJ5LFxuICBTaWduYWxTdG9yZUZlYXR1cmUsXG4gIFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdCxcbiAgU3RhdGVTaWduYWxzLFxufSBmcm9tICcuL3NpZ25hbC1zdG9yZS1tb2RlbHMnO1xuaW1wb3J0IHsgUHJldHRpZnkgfSBmcm9tICcuL3RzLWhlbHBlcnMnO1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aE1ldGhvZHM8XG4gIElucHV0IGV4dGVuZHMgU2lnbmFsU3RvcmVGZWF0dXJlUmVzdWx0LFxuICBNZXRob2RzIGV4dGVuZHMgTWV0aG9kc0RpY3Rpb25hcnlcbj4oXG4gIG1ldGhvZHNGYWN0b3J5OiAoXG4gICAgc3RvcmU6IFByZXR0aWZ5PFxuICAgICAgU3RhdGVTaWduYWxzPElucHV0WydzdGF0ZSddPiAmXG4gICAgICAgIElucHV0Wydjb21wdXRlZCddICZcbiAgICAgICAgSW5wdXRbJ21ldGhvZHMnXSAmXG4gICAgICAgIFN0YXRlU2lnbmFsPFByZXR0aWZ5PElucHV0WydzdGF0ZSddPj5cbiAgICA+XG4gICkgPT4gTWV0aG9kc1xuKTogU2lnbmFsU3RvcmVGZWF0dXJlPElucHV0LCBFbXB0eUZlYXR1cmVSZXN1bHQgJiB7IG1ldGhvZHM6IE1ldGhvZHMgfT4ge1xuICByZXR1cm4gKHN0b3JlKSA9PiB7XG4gICAgY29uc3QgbWV0aG9kcyA9IG1ldGhvZHNGYWN0b3J5KHtcbiAgICAgIFtTVEFURV9TSUdOQUxdOiBzdG9yZVtTVEFURV9TSUdOQUxdLFxuICAgICAgLi4uc3RvcmUuc3RhdGVTaWduYWxzLFxuICAgICAgLi4uc3RvcmUuY29tcHV0ZWRTaWduYWxzLFxuICAgICAgLi4uc3RvcmUubWV0aG9kcyxcbiAgICB9KTtcbiAgICBjb25zdCBtZXRob2RzS2V5cyA9IE9iamVjdC5rZXlzKG1ldGhvZHMpO1xuICAgIGNvbnN0IHN0YXRlU2lnbmFscyA9IGV4Y2x1ZGVLZXlzKHN0b3JlLnN0YXRlU2lnbmFscywgbWV0aG9kc0tleXMpO1xuICAgIGNvbnN0IGNvbXB1dGVkU2lnbmFscyA9IGV4Y2x1ZGVLZXlzKHN0b3JlLmNvbXB1dGVkU2lnbmFscywgbWV0aG9kc0tleXMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0b3JlLFxuICAgICAgc3RhdGVTaWduYWxzLFxuICAgICAgY29tcHV0ZWRTaWduYWxzLFxuICAgICAgbWV0aG9kczogeyAuLi5zdG9yZS5tZXRob2RzLCAuLi5tZXRob2RzIH0sXG4gICAgfSBhcyBJbm5lclNpZ25hbFN0b3JlPFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBTaWduYWxzRGljdGlvbmFyeSwgTWV0aG9kcz47XG4gIH07XG59XG4iXX0=
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1tZXRob2RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9zaWduYWxzL3NyYy93aXRoLW1ldGhvZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBdUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQVdyRSxNQUFNLFVBQVUsV0FBVyxDQUl6QixjQU9ZO0lBRVosT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ2YsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDO1lBQzdCLENBQUMsWUFBWSxDQUFDLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQztZQUNuQyxHQUFHLEtBQUssQ0FBQyxZQUFZO1lBQ3JCLEdBQUcsS0FBSyxDQUFDLGVBQWU7WUFDeEIsR0FBRyxLQUFLLENBQUMsT0FBTztTQUNqQixDQUFDLENBQUM7UUFDSCx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBRXRELE9BQU87WUFDTCxHQUFHLEtBQUs7WUFDUixPQUFPLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUU7U0FDK0IsQ0FBQztJQUM3RSxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU1RBVEVfU09VUkNFLCBXcml0YWJsZVN0YXRlU291cmNlIH0gZnJvbSAnLi9zdGF0ZS1zb3VyY2UnO1xuaW1wb3J0IHsgYXNzZXJ0VW5pcXVlU3RvcmVNZW1iZXJzIH0gZnJvbSAnLi9zaWduYWwtc3RvcmUtYXNzZXJ0aW9ucyc7XG5pbXBvcnQge1xuICBJbm5lclNpZ25hbFN0b3JlLFxuICBNZXRob2RzRGljdGlvbmFyeSxcbiAgU2lnbmFsc0RpY3Rpb25hcnksXG4gIFNpZ25hbFN0b3JlRmVhdHVyZSxcbiAgU2lnbmFsU3RvcmVGZWF0dXJlUmVzdWx0LFxuICBTdGF0ZVNpZ25hbHMsXG59IGZyb20gJy4vc2lnbmFsLXN0b3JlLW1vZGVscyc7XG5pbXBvcnQgeyBQcmV0dGlmeSB9IGZyb20gJy4vdHMtaGVscGVycyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoTWV0aG9kczxcbiAgSW5wdXQgZXh0ZW5kcyBTaWduYWxTdG9yZUZlYXR1cmVSZXN1bHQsXG4gIE1ldGhvZHMgZXh0ZW5kcyBNZXRob2RzRGljdGlvbmFyeVxuPihcbiAgbWV0aG9kc0ZhY3Rvcnk6IChcbiAgICBzdG9yZTogUHJldHRpZnk8XG4gICAgICBTdGF0ZVNpZ25hbHM8SW5wdXRbJ3N0YXRlJ10+ICZcbiAgICAgICAgSW5wdXRbJ2NvbXB1dGVkJ10gJlxuICAgICAgICBJbnB1dFsnbWV0aG9kcyddICZcbiAgICAgICAgV3JpdGFibGVTdGF0ZVNvdXJjZTxQcmV0dGlmeTxJbnB1dFsnc3RhdGUnXT4+XG4gICAgPlxuICApID0+IE1ldGhvZHNcbik6IFNpZ25hbFN0b3JlRmVhdHVyZTxJbnB1dCwgeyBzdGF0ZToge307IGNvbXB1dGVkOiB7fTsgbWV0aG9kczogTWV0aG9kcyB9PiB7XG4gIHJldHVybiAoc3RvcmUpID0+IHtcbiAgICBjb25zdCBtZXRob2RzID0gbWV0aG9kc0ZhY3Rvcnkoe1xuICAgICAgW1NUQVRFX1NPVVJDRV06IHN0b3JlW1NUQVRFX1NPVVJDRV0sXG4gICAgICAuLi5zdG9yZS5zdGF0ZVNpZ25hbHMsXG4gICAgICAuLi5zdG9yZS5jb21wdXRlZFNpZ25hbHMsXG4gICAgICAuLi5zdG9yZS5tZXRob2RzLFxuICAgIH0pO1xuICAgIGFzc2VydFVuaXF1ZVN0b3JlTWVtYmVycyhzdG9yZSwgT2JqZWN0LmtleXMobWV0aG9kcykpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0b3JlLFxuICAgICAgbWV0aG9kczogeyAuLi5zdG9yZS5tZXRob2RzLCAuLi5tZXRob2RzIH0sXG4gICAgfSBhcyBJbm5lclNpZ25hbFN0b3JlPFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBTaWduYWxzRGljdGlvbmFyeSwgTWV0aG9kcz47XG4gIH07XG59XG4iXX0=
@@ -1,27 +1,24 @@
1
1
  import { computed } from '@angular/core';
2
+ import { assertUniqueStoreMembers } from './signal-store-assertions';
2
3
  import { toDeepSignal } from './deep-signal';
3
- import { excludeKeys } from './helpers';
4
- import { STATE_SIGNAL } from './state-signal';
4
+ import { STATE_SOURCE } from './state-source';
5
5
  export function withState(stateOrFactory) {
6
6
  return (store) => {
7
7
  const state = typeof stateOrFactory === 'function' ? stateOrFactory() : stateOrFactory;
8
8
  const stateKeys = Object.keys(state);
9
- store[STATE_SIGNAL].update((currentState) => ({
9
+ assertUniqueStoreMembers(store, stateKeys);
10
+ store[STATE_SOURCE].update((currentState) => ({
10
11
  ...currentState,
11
12
  ...state,
12
13
  }));
13
14
  const stateSignals = stateKeys.reduce((acc, key) => {
14
- const sliceSignal = computed(() => store[STATE_SIGNAL]()[key]);
15
+ const sliceSignal = computed(() => store[STATE_SOURCE]()[key]);
15
16
  return { ...acc, [key]: toDeepSignal(sliceSignal) };
16
17
  }, {});
17
- const computedSignals = excludeKeys(store.computedSignals, stateKeys);
18
- const methods = excludeKeys(store.methods, stateKeys);
19
18
  return {
20
19
  ...store,
21
20
  stateSignals: { ...store.stateSignals, ...stateSignals },
22
- computedSignals,
23
- methods,
24
21
  };
25
22
  };
26
23
  }
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL21vZHVsZXMvc2lnbmFscy9zcmMvd2l0aC1zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFxQjlDLE1BQU0sVUFBVSxTQUFTLENBQ3ZCLGNBQXFDO0lBS3JDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNmLE1BQU0sS0FBSyxHQUNULE9BQU8sY0FBYyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztRQUMzRSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXJDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDNUMsR0FBRyxZQUFZO1lBQ2YsR0FBRyxLQUFLO1NBQ1QsQ0FBQyxDQUFDLENBQUM7UUFFSixNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ2pELE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FDMUIsR0FBRyxFQUFFLENBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxFQUE4QixDQUFDLEdBQUcsQ0FBQyxDQUM5RCxDQUFDO1lBQ0YsT0FBTyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsWUFBWSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFDdEQsQ0FBQyxFQUFFLEVBQXVCLENBQUMsQ0FBQztRQUM1QixNQUFNLGVBQWUsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN0RSxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUV0RCxPQUFPO1lBQ0wsR0FBRyxLQUFLO1lBQ1IsWUFBWSxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLEdBQUcsWUFBWSxFQUFFO1lBQ3hELGVBQWU7WUFDZixPQUFPO1NBQ21CLENBQUM7SUFDL0IsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b0RlZXBTaWduYWwgfSBmcm9tICcuL2RlZXAtc2lnbmFsJztcbmltcG9ydCB7IGV4Y2x1ZGVLZXlzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IFNUQVRFX1NJR05BTCB9IGZyb20gJy4vc3RhdGUtc2lnbmFsJztcbmltcG9ydCB7XG4gIEVtcHR5RmVhdHVyZVJlc3VsdCxcbiAgSW5uZXJTaWduYWxTdG9yZSxcbiAgU2lnbmFsc0RpY3Rpb25hcnksXG4gIFNpZ25hbFN0b3JlRmVhdHVyZSxcbiAgU2lnbmFsU3RvcmVGZWF0dXJlUmVzdWx0LFxufSBmcm9tICcuL3NpZ25hbC1zdG9yZS1tb2RlbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFN0YXRlPFN0YXRlIGV4dGVuZHMgb2JqZWN0PihcbiAgc3RhdGVGYWN0b3J5OiAoKSA9PiBTdGF0ZVxuKTogU2lnbmFsU3RvcmVGZWF0dXJlPFxuICBFbXB0eUZlYXR1cmVSZXN1bHQsXG4gIEVtcHR5RmVhdHVyZVJlc3VsdCAmIHsgc3RhdGU6IFN0YXRlIH1cbj47XG5leHBvcnQgZnVuY3Rpb24gd2l0aFN0YXRlPFN0YXRlIGV4dGVuZHMgb2JqZWN0PihcbiAgc3RhdGU6IFN0YXRlXG4pOiBTaWduYWxTdG9yZUZlYXR1cmU8XG4gIEVtcHR5RmVhdHVyZVJlc3VsdCxcbiAgRW1wdHlGZWF0dXJlUmVzdWx0ICYgeyBzdGF0ZTogU3RhdGUgfVxuPjtcbmV4cG9ydCBmdW5jdGlvbiB3aXRoU3RhdGU8U3RhdGUgZXh0ZW5kcyBvYmplY3Q+KFxuICBzdGF0ZU9yRmFjdG9yeTogU3RhdGUgfCAoKCkgPT4gU3RhdGUpXG4pOiBTaWduYWxTdG9yZUZlYXR1cmU8XG4gIFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdCxcbiAgRW1wdHlGZWF0dXJlUmVzdWx0ICYgeyBzdGF0ZTogU3RhdGUgfVxuPiB7XG4gIHJldHVybiAoc3RvcmUpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9XG4gICAgICB0eXBlb2Ygc3RhdGVPckZhY3RvcnkgPT09ICdmdW5jdGlvbicgPyBzdGF0ZU9yRmFjdG9yeSgpIDogc3RhdGVPckZhY3Rvcnk7XG4gICAgY29uc3Qgc3RhdGVLZXlzID0gT2JqZWN0LmtleXMoc3RhdGUpO1xuXG4gICAgc3RvcmVbU1RBVEVfU0lHTkFMXS51cGRhdGUoKGN1cnJlbnRTdGF0ZSkgPT4gKHtcbiAgICAgIC4uLmN1cnJlbnRTdGF0ZSxcbiAgICAgIC4uLnN0YXRlLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IHN0YXRlU2lnbmFscyA9IHN0YXRlS2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICBjb25zdCBzbGljZVNpZ25hbCA9IGNvbXB1dGVkKFxuICAgICAgICAoKSA9PiAoc3RvcmVbU1RBVEVfU0lHTkFMXSgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldXG4gICAgICApO1xuICAgICAgcmV0dXJuIHsgLi4uYWNjLCBba2V5XTogdG9EZWVwU2lnbmFsKHNsaWNlU2lnbmFsKSB9O1xuICAgIH0sIHt9IGFzIFNpZ25hbHNEaWN0aW9uYXJ5KTtcbiAgICBjb25zdCBjb21wdXRlZFNpZ25hbHMgPSBleGNsdWRlS2V5cyhzdG9yZS5jb21wdXRlZFNpZ25hbHMsIHN0YXRlS2V5cyk7XG4gICAgY29uc3QgbWV0aG9kcyA9IGV4Y2x1ZGVLZXlzKHN0b3JlLm1ldGhvZHMsIHN0YXRlS2V5cyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RvcmUsXG4gICAgICBzdGF0ZVNpZ25hbHM6IHsgLi4uc3RvcmUuc3RhdGVTaWduYWxzLCAuLi5zdGF0ZVNpZ25hbHMgfSxcbiAgICAgIGNvbXB1dGVkU2lnbmFscyxcbiAgICAgIG1ldGhvZHMsXG4gICAgfSBhcyBJbm5lclNpZ25hbFN0b3JlPFN0YXRlPjtcbiAgfTtcbn1cbiJdfQ==
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL21vZHVsZXMvc2lnbmFscy9zcmMvd2l0aC1zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBcUI5QyxNQUFNLFVBQVUsU0FBUyxDQUN2QixjQUFxQztJQUtyQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDZixNQUFNLEtBQUssR0FDVCxPQUFPLGNBQWMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7UUFDM0UsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVyQyx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFM0MsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM1QyxHQUFHLFlBQVk7WUFDZixHQUFHLEtBQUs7U0FDVCxDQUFDLENBQUMsQ0FBQztRQUVKLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDakQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUMxQixHQUFHLEVBQUUsQ0FBRSxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQThCLENBQUMsR0FBRyxDQUFDLENBQzlELENBQUM7WUFDRixPQUFPLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxZQUFZLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUN0RCxDQUFDLEVBQUUsRUFBdUIsQ0FBQyxDQUFDO1FBRTVCLE9BQU87WUFDTCxHQUFHLEtBQUs7WUFDUixZQUFZLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxZQUFZLEVBQUUsR0FBRyxZQUFZLEVBQUU7U0FDOUIsQ0FBQztJQUMvQixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGFzc2VydFVuaXF1ZVN0b3JlTWVtYmVycyB9IGZyb20gJy4vc2lnbmFsLXN0b3JlLWFzc2VydGlvbnMnO1xuaW1wb3J0IHsgdG9EZWVwU2lnbmFsIH0gZnJvbSAnLi9kZWVwLXNpZ25hbCc7XG5pbXBvcnQgeyBTVEFURV9TT1VSQ0UgfSBmcm9tICcuL3N0YXRlLXNvdXJjZSc7XG5pbXBvcnQge1xuICBFbXB0eUZlYXR1cmVSZXN1bHQsXG4gIElubmVyU2lnbmFsU3RvcmUsXG4gIFNpZ25hbHNEaWN0aW9uYXJ5LFxuICBTaWduYWxTdG9yZUZlYXR1cmUsXG4gIFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdCxcbn0gZnJvbSAnLi9zaWduYWwtc3RvcmUtbW9kZWxzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhTdGF0ZTxTdGF0ZSBleHRlbmRzIG9iamVjdD4oXG4gIHN0YXRlRmFjdG9yeTogKCkgPT4gU3RhdGVcbik6IFNpZ25hbFN0b3JlRmVhdHVyZTxcbiAgRW1wdHlGZWF0dXJlUmVzdWx0LFxuICB7IHN0YXRlOiBTdGF0ZTsgY29tcHV0ZWQ6IHt9OyBtZXRob2RzOiB7fSB9XG4+O1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhTdGF0ZTxTdGF0ZSBleHRlbmRzIG9iamVjdD4oXG4gIHN0YXRlOiBTdGF0ZVxuKTogU2lnbmFsU3RvcmVGZWF0dXJlPFxuICBFbXB0eUZlYXR1cmVSZXN1bHQsXG4gIHsgc3RhdGU6IFN0YXRlOyBjb21wdXRlZDoge307IG1ldGhvZHM6IHt9IH1cbj47XG5leHBvcnQgZnVuY3Rpb24gd2l0aFN0YXRlPFN0YXRlIGV4dGVuZHMgb2JqZWN0PihcbiAgc3RhdGVPckZhY3Rvcnk6IFN0YXRlIHwgKCgpID0+IFN0YXRlKVxuKTogU2lnbmFsU3RvcmVGZWF0dXJlPFxuICBTaWduYWxTdG9yZUZlYXR1cmVSZXN1bHQsXG4gIHsgc3RhdGU6IFN0YXRlOyBjb21wdXRlZDoge307IG1ldGhvZHM6IHt9IH1cbj4ge1xuICByZXR1cm4gKHN0b3JlKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPVxuICAgICAgdHlwZW9mIHN0YXRlT3JGYWN0b3J5ID09PSAnZnVuY3Rpb24nID8gc3RhdGVPckZhY3RvcnkoKSA6IHN0YXRlT3JGYWN0b3J5O1xuICAgIGNvbnN0IHN0YXRlS2V5cyA9IE9iamVjdC5rZXlzKHN0YXRlKTtcblxuICAgIGFzc2VydFVuaXF1ZVN0b3JlTWVtYmVycyhzdG9yZSwgc3RhdGVLZXlzKTtcblxuICAgIHN0b3JlW1NUQVRFX1NPVVJDRV0udXBkYXRlKChjdXJyZW50U3RhdGUpID0+ICh7XG4gICAgICAuLi5jdXJyZW50U3RhdGUsXG4gICAgICAuLi5zdGF0ZSxcbiAgICB9KSk7XG5cbiAgICBjb25zdCBzdGF0ZVNpZ25hbHMgPSBzdGF0ZUtleXMucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgY29uc3Qgc2xpY2VTaWduYWwgPSBjb21wdXRlZChcbiAgICAgICAgKCkgPT4gKHN0b3JlW1NUQVRFX1NPVVJDRV0oKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XVxuICAgICAgKTtcbiAgICAgIHJldHVybiB7IC4uLmFjYywgW2tleV06IHRvRGVlcFNpZ25hbChzbGljZVNpZ25hbCkgfTtcbiAgICB9LCB7fSBhcyBTaWduYWxzRGljdGlvbmFyeSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RvcmUsXG4gICAgICBzdGF0ZVNpZ25hbHM6IHsgLi4uc3RvcmUuc3RhdGVTaWduYWxzLCAuLi5zdGF0ZVNpZ25hbHMgfSxcbiAgICB9IGFzIElubmVyU2lnbmFsU3RvcmU8U3RhdGU+O1xuICB9O1xufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"ngrx-signals-entities.mjs","sources":["../../../../modules/signals/entities/src/models.ts","../../../../modules/signals/entities/src/helpers.ts","../../../../modules/signals/entities/src/updaters/add-entity.ts","../../../../modules/signals/entities/src/updaters/add-entities.ts","../../../../modules/signals/entities/src/updaters/remove-entity.ts","../../../../modules/signals/entities/src/updaters/remove-entities.ts","../../../../modules/signals/entities/src/updaters/remove-all-entities.ts","../../../../modules/signals/entities/src/updaters/set-entity.ts","../../../../modules/signals/entities/src/updaters/set-entities.ts","../../../../modules/signals/entities/src/updaters/set-all-entities.ts","../../../../modules/signals/entities/src/updaters/update-entity.ts","../../../../modules/signals/entities/src/updaters/update-entities.ts","../../../../modules/signals/entities/src/updaters/update-all-entities.ts","../../../../modules/signals/entities/src/entity-config.ts","../../../../modules/signals/entities/src/with-entities.ts","../../../../modules/signals/entities/ngrx-signals-entities.ts"],"sourcesContent":["import { Signal } from '@angular/core';\n\nexport type EntityId = string | number;\n\nexport type EntityMap<Entity> = Record<EntityId, Entity>;\n\nexport type EntityState<Entity> = {\n entityMap: EntityMap<Entity>;\n ids: EntityId[];\n};\n\nexport type NamedEntityState<Entity, Collection extends string> = {\n [K in keyof EntityState<Entity> as `${Collection}${Capitalize<K>}`]: EntityState<Entity>[K];\n};\n\nexport type EntityComputed<Entity> = {\n entities: Signal<Entity[]>;\n};\n\nexport type NamedEntityComputed<Entity, Collection extends string> = {\n [K in keyof EntityComputed<Entity> as `${Collection}${Capitalize<K>}`]: EntityComputed<Entity>[K];\n};\n\nexport type SelectEntityId<Entity> = (entity: Entity) => EntityId;\n\nexport type EntityPredicate<Entity> = (entity: Entity) => boolean;\n\nexport type EntityChanges<Entity> =\n | Partial<Entity>\n | ((entity: Entity) => Partial<Entity>);\n\nexport enum DidMutate {\n None,\n Entities,\n Both,\n}\n","import {\n DidMutate,\n EntityChanges,\n EntityId,\n EntityPredicate,\n EntityState,\n SelectEntityId,\n} from './models';\n\ndeclare const ngDevMode: unknown;\nconst defaultSelectId: SelectEntityId<{ id: EntityId }> = (entity) => entity.id;\n\nexport function getEntityIdSelector(config?: {\n selectId?: SelectEntityId<any>;\n}): SelectEntityId<any> {\n return config?.selectId ?? defaultSelectId;\n}\n\nexport function getEntityStateKeys(config?: { collection?: string }): {\n entityMapKey: string;\n idsKey: string;\n entitiesKey: string;\n} {\n const collection = config?.collection;\n const entityMapKey =\n collection === undefined ? 'entityMap' : `${collection}EntityMap`;\n const idsKey = collection === undefined ? 'ids' : `${collection}Ids`;\n const entitiesKey =\n collection === undefined ? 'entities' : `${collection}Entities`;\n\n return { entityMapKey, idsKey, entitiesKey };\n}\n\nexport function cloneEntityState(\n state: Record<string, any>,\n stateKeys: {\n entityMapKey: string;\n idsKey: string;\n }\n): EntityState<any> {\n return {\n entityMap: { ...state[stateKeys.entityMapKey] },\n ids: [...state[stateKeys.idsKey]],\n };\n}\n\nexport function getEntityUpdaterResult(\n state: EntityState<any>,\n stateKeys: {\n entityMapKey: string;\n idsKey: string;\n },\n didMutate: DidMutate\n): Record<string, any> {\n switch (didMutate) {\n case DidMutate.Both: {\n return {\n [stateKeys.entityMapKey]: state.entityMap,\n [stateKeys.idsKey]: state.ids,\n };\n }\n case DidMutate.Entities: {\n return { [stateKeys.entityMapKey]: state.entityMap };\n }\n default: {\n return {};\n }\n }\n}\n\nexport function addEntityMutably(\n state: EntityState<any>,\n entity: any,\n selectId: SelectEntityId<any>\n): DidMutate {\n const id = selectId(entity);\n\n if (state.entityMap[id]) {\n return DidMutate.None;\n }\n\n state.entityMap[id] = entity;\n state.ids.push(id);\n\n return DidMutate.Both;\n}\n\nexport function addEntitiesMutably(\n state: EntityState<any>,\n entities: any[],\n selectId: SelectEntityId<any>\n): DidMutate {\n let didMutate = DidMutate.None;\n\n for (const entity of entities) {\n const result = addEntityMutably(state, entity, selectId);\n\n if (result === DidMutate.Both) {\n didMutate = result;\n }\n }\n\n return didMutate;\n}\n\nexport function setEntityMutably(\n state: EntityState<any>,\n entity: any,\n selectId: SelectEntityId<any>\n): DidMutate {\n const id = selectId(entity);\n\n if (state.entityMap[id]) {\n state.entityMap[id] = entity;\n return DidMutate.Entities;\n }\n\n state.entityMap[id] = entity;\n state.ids.push(id);\n\n return DidMutate.Both;\n}\n\nexport function setEntitiesMutably(\n state: EntityState<any>,\n entities: any[],\n selectId: SelectEntityId<any>\n): DidMutate {\n let didMutate = DidMutate.None;\n\n for (const entity of entities) {\n const result = setEntityMutably(state, entity, selectId);\n\n if (didMutate === DidMutate.Both) {\n continue;\n }\n\n didMutate = result;\n }\n\n return didMutate;\n}\n\nexport function removeEntitiesMutably(\n state: EntityState<any>,\n idsOrPredicate: EntityId[] | EntityPredicate<any>\n): DidMutate {\n const ids = Array.isArray(idsOrPredicate)\n ? idsOrPredicate\n : state.ids.filter((id) => idsOrPredicate(state.entityMap[id]));\n let didMutate = DidMutate.None;\n\n for (const id of ids) {\n if (state.entityMap[id]) {\n delete state.entityMap[id];\n didMutate = DidMutate.Both;\n }\n }\n\n if (didMutate === DidMutate.Both) {\n state.ids = state.ids.filter((id) => id in state.entityMap);\n }\n\n return didMutate;\n}\n\nexport function updateEntitiesMutably(\n state: EntityState<any>,\n idsOrPredicate: EntityId[] | EntityPredicate<any>,\n changes: EntityChanges<any>,\n selectId: SelectEntityId<any>\n): DidMutate {\n const ids = Array.isArray(idsOrPredicate)\n ? idsOrPredicate\n : state.ids.filter((id) => idsOrPredicate(state.entityMap[id]));\n let newIds: Record<EntityId, EntityId> | undefined = undefined;\n let didMutate = DidMutate.None;\n\n for (const id of ids) {\n const entity = state.entityMap[id];\n\n if (entity) {\n const changesRecord =\n typeof changes === 'function' ? changes(entity) : changes;\n state.entityMap[id] = { ...entity, ...changesRecord };\n didMutate = DidMutate.Entities;\n\n const newId = selectId(state.entityMap[id]);\n if (newId !== id) {\n state.entityMap[newId] = state.entityMap[id];\n delete state.entityMap[id];\n\n newIds = newIds || {};\n newIds[id] = newId;\n }\n }\n }\n\n if (newIds) {\n state.ids = state.ids.map((id) => newIds[id] ?? id);\n didMutate = DidMutate.Both;\n }\n\n if (ngDevMode && state.ids.length !== Object.keys(state.entityMap).length) {\n console.warn(\n '@ngrx/signals/entities: Entities with IDs:',\n ids,\n 'are not updated correctly.',\n 'Make sure to apply valid changes when using `updateEntity`,',\n '`updateEntities`, and `updateAllEntities` updaters.'\n );\n }\n\n return didMutate;\n}\n","import { PartialStateUpdater } from '@ngrx/signals';\nimport {\n EntityId,\n EntityState,\n NamedEntityState,\n SelectEntityId,\n} from '../models';\nimport {\n addEntityMutably,\n cloneEntityState,\n getEntityIdSelector,\n getEntityStateKeys,\n getEntityUpdaterResult,\n} from '../helpers';\n\nexport function addEntity<Entity extends { id: EntityId }>(\n entity: Entity\n): PartialStateUpdater<EntityState<Entity>>;\nexport function addEntity<Entity, Collection extends string>(\n entity: Entity,\n config: { collection: Collection; selectId: SelectEntityId<NoInfer<Entity>> }\n): PartialStateUpdater<NamedEntityState<Entity, Collection>>;\nexport function addEntity<\n Entity extends { id: EntityId },\n Collection extends string\n>(\n entity: Entity,\n config: { collection: Collection }\n): PartialStateUpdater<NamedEntityState<Entity, Collection>>;\nexport function addEntity<Entity>(\n entity: Entity,\n config: { selectId: SelectEntityId<NoInfer<Entity>> }\n): PartialStateUpdater<EntityState<Entity>>;\nexport function addEntity(\n entity: any,\n config?: { collection?: string; selectId?: SelectEntityId<any> }\n): PartialStateUpdater<EntityState<any> | NamedEntityState<any, string>> {\n const selectId = getEntityIdSelector(config);\n const stateKeys = getEntityStateKeys(config);\n\n return (state) => {\n const clonedState = cloneEntityState(state, stateKeys);\n const didMutate = addEntityMutably(clonedState, entity, selectId);\n\n return getEntityUpdaterResult(clonedState, stateKeys, didMutate);\n };\n}\n","import { PartialStateUpdater } from '@ngrx/signals';\nimport {\n EntityId,\n EntityState,\n NamedEntityState,\n SelectEntityId,\n} from '../models';\nimport {\n addEntitiesMutably,\n cloneEntityState,\n getEntityIdSelector,\n getEntityStateKeys,\n getEntityUpdaterResult,\n} from '../helpers';\n\nexport function addEntities<Entity extends { id: EntityId }>(\n entities: Entity[]\n): PartialStateUpdater<EntityState<Entity>>;\nexport function addEntities<Entity, Collection extends string>(\n entities: Entity[],\n config: { collection: Collection; selectId: SelectEntityId<NoInfer<Entity>> }\n): PartialStateUpdater<NamedEntityState<Entity, Collection>>;\nexport function addEntities<\n Entity extends { id: EntityId },\n Collection extends string\n>(\n entities: Entity[],\n config: { collection: Collection }\n): PartialStateUpdater<NamedEntityState<Entity, Collection>>;\nexport function addEntities<Entity>(\n entities: Entity[],\n config: { selectId: SelectEntityId<NoInfer<Entity>> }\n): PartialStateUpdater<EntityState<Entity>>;\nexport function addEntities(\n entities: any[],\n config?: { collection?: string; selectId?: SelectEntityId<any> }\n): PartialStateUpdater<EntityState<any> | NamedEntityState<any, string>> {\n const selectId = getEntityIdSelector(config);\n const stateKeys = getEntityStateKeys(config);\n\n return (state) => {\n const clonedState = cloneEntityState(state, stateKeys);\n const didMutate = addEntitiesMutably(clonedState, entities, selectId);\n\n return getEntityUpdaterResult(clonedState, stateKeys, didMutate);\n };\n}\n","import { PartialStateUpdater } from '@ngrx/signals';\nimport { EntityId, EntityState, NamedEntityState } from '../models';\nimport {\n cloneEntityState,\n getEntityStateKeys,\n getEntityUpdaterResult,\n removeEntitiesMutably,\n} from '../helpers';\n\nexport function removeEntity(\n id: EntityId\n): PartialStateUpdater<EntityState<any>>;\nexport function removeEntity<Collection extends string>(\n id: EntityId,\n config: { collection: Collection }\n): PartialStateUpdater<NamedEntityState<any, Collection>>;\nexport function removeEntity(\n id: EntityId,\n config?: { collection?: string }\n): PartialStateUpdater<EntityState<any> | NamedEntityState<any, string>> {\n const stateKeys = getEntityStateKeys(config);\n\n return (state) => {\n const clonedState = cloneEntityState(state, stateKeys);\n const didMutate = removeEntitiesMutably(clonedState, [id]);\n\n return getEntityUpdaterResult(clonedState, stateKeys, didMutate);\n };\n}\n","import { PartialStateUpdater } from '@ngrx/signals';\nimport {\n EntityId,\n EntityPredicate,\n EntityState,\n NamedEntityState,\n} from '../models';\nimport {\n cloneEntityState,\n getEntityStateKeys,\n getEntityUpdaterResult,\n removeEntitiesMutably,\n} from '../helpers';\n\nexport function removeEntities(\n ids: EntityId[]\n): PartialStateUpdater<EntityState<any>>;\nexport function removeEntities<Entity>(\n predicate: EntityPredicate<Entity>\n): PartialStateUpdater<EntityState<Entity>>;\nexport function removeEntities<Collection extends string>(\n ids: EntityId[],\n config: { collection: Collection }\n): PartialStateUpdater<NamedEntityState<any, Collection>>;\nexport function removeEntities<\n Collection extends string,\n State extends NamedEntityState<any, Collection>,\n Entity = State extends NamedEntityState<infer E, Collection> ? E : never\n>(\n predicate: EntityPredicate<Entity>,\n config: { collection: Collection }\n): PartialStateUpdater<State>;\nexport function removeEntities(\n idsOrPredicate: EntityId[] | EntityPredicate<any>,\n config?: { collection?: string }\n): PartialStateUpdater<EntityState<any> | NamedEntityState<any, string>> {\n const stateKeys = getEntityStateKeys(config);\n\n return (state) => {\n const clonedState = cloneEntityState(state, stateKeys);\n const didMutate = removeEntitiesMutably(clonedState, idsOrPredicate);\n\n return getEntityUpdaterResult(clonedState, stateKeys, didMutate);\n };\n}\n","import { PartialStateUpdater } from '@ngrx/signals';\nimport { EntityState, NamedEntityState } from '../models';\nimport { getEntityStateKeys } from '../helpers';\n\nexport function removeAllEntities(): PartialStateUpdater<EntityState<any>>;\nexport function removeAllEntities<Collection extends string>(config: {\n collection: Collection;\n}): PartialStateUpdater<NamedEntityState<any, Collection>>;\nexport function removeAllEntities(config?: {\n collection?: string;\n}): PartialStateUpdater<EntityState<any> | NamedEntityState<any, string>> {\n const stateKeys = getEntityStateKeys(config);\n\n return () => ({\n [stateKeys.entityMapKey]: {},\n [stateKeys.idsKey]: [],\n });\n}\n","import { PartialStateUpdater } from '@ngrx/signals';\nimport {\n EntityId,\n EntityState,\n NamedEntityState,\n SelectEntityId,\n} from '../models';\nimport {\n cloneEntityState,\n getEntityIdSelector,\n getEntityStateKeys,\n getEntityUpdaterResult,\n setEntityMutably,\n} from '../helpers';\n\nexport function setEntity<Entity extends { id: EntityId }>(\n entity: Entity\n): PartialStateUpdater<EntityState<Entity>>;\nexport function setEntity<Entity, Collection extends string>(\n entity: Entity,\n config: { collection: Collection; selectId: SelectEntityId<NoInfer<Entity>> }\n): PartialStateUpdater<NamedEntityState<Entity, Collection>>;\nexport function setEntity<\n Entity extends { id: EntityId },\n Collection extends string\n>(\n entity: Entity,\n config: { collection: Collection }\n): PartialStateUpdater<NamedEntityState<Entity, Collection>>;\nexport function setEntity<Entity>(\n entity: Entity,\n config: { selectId: SelectEntityId<NoInfer<Entity>> }\n): PartialStateUpdater<EntityState<Entity>>;\nexport function setEntity(\n entity: any,\n config?: { collection?: string; selectId?: SelectEntityId<any> }\n): PartialStateUpdater<EntityState<any> | NamedEntityState<any, string>> {\n const selectId = getEntityIdSelector(config);\n const stateKeys = getEntityStateKeys(config);\n\n return (state) => {\n const clonedState = cloneEntityState(state, stateKeys);\n const didMutate = setEntityMutably(clonedState, entity, selectId);\n\n return getEntityUpdaterResult(clonedState, stateKeys, didMutate);\n };\n}\n","import { PartialStateUpdater } from '@ngrx/signals';\nimport {\n EntityId,\n EntityState,\n NamedEntityState,\n SelectEntityId,\n} from '../models';\nimport {\n cloneEntityState,\n getEntityIdSelector,\n getEntityStateKeys,\n getEntityUpdaterResult,\n setEntitiesMutably,\n} from '../helpers';\n\nexport function setEntities<Entity extends { id: EntityId }>(\n entities: Entity[]\n): PartialStateUpdater<EntityState<Entity>>;\nexport function setEntities<Entity, Collection extends string>(\n entities: Entity[],\n config: { collection: Collection; selectId: SelectEntityId<NoInfer<Entity>> }\n): PartialStateUpdater<NamedEntityState<Entity, Collection>>;\nexport function setEntities<\n Entity extends { id: EntityId },\n Collection extends string\n>(\n entities: Entity[],\n config: { collection: Collection }\n): PartialStateUpdater<NamedEntityState<Entity, Collection>>;\nexport function setEntities<Entity>(\n entities: Entity[],\n config: { selectId: SelectEntityId<NoInfer<Entity>> }\n): PartialStateUpdater<EntityState<Entity>>;\nexport function setEntities(\n entities: any[],\n config?: { collection?: string; selectId?: SelectEntityId<any> }\n): PartialStateUpdater<EntityState<any> | NamedEntityState<any, string>> {\n const selectId = getEntityIdSelector(config);\n const stateKeys = getEntityStateKeys(config);\n\n return (state) => {\n const clonedState = cloneEntityState(state, stateKeys);\n const didMutate = setEntitiesMutably(clonedState, entities, selectId);\n\n return getEntityUpdaterResult(clonedState, stateKeys, didMutate);\n };\n}\n","import { PartialStateUpdater } from '@ngrx/signals';\nimport {\n EntityId,\n EntityState,\n NamedEntityState,\n SelectEntityId,\n} from '../models';\nimport {\n getEntityIdSelector,\n getEntityStateKeys,\n setEntitiesMutably,\n} from '../helpers';\n\nexport function setAllEntities<Entity extends { id: EntityId }>(\n entities: Entity[]\n): PartialStateUpdater<EntityState<Entity>>;\nexport function setAllEntities<Entity, Collection extends string>(\n entities: Entity[],\n config: { collection: Collection; selectId: SelectEntityId<NoInfer<Entity>> }\n): PartialStateUpdater<NamedEntityState<Entity, Collection>>;\nexport function setAllEntities<\n Entity extends { id: EntityId },\n Collection extends string\n>(\n entities: Entity[],\n config: { collection: Collection }\n): PartialStateUpdater<NamedEntityState<Entity, Collection>>;\nexport function setAllEntities<Entity>(\n entities: Entity[],\n config: { selectId: SelectEntityId<NoInfer<Entity>> }\n): PartialStateUpdater<EntityState<Entity>>;\nexport function setAllEntities(\n entities: any[],\n config?: { collection?: string; selectId?: SelectEntityId<any> }\n): PartialStateUpdater<EntityState<any> | NamedEntityState<any, string>> {\n const selectId = getEntityIdSelector(config);\n const stateKeys = getEntityStateKeys(config);\n\n return () => {\n const state: EntityState<any> = { entityMap: {}, ids: [] };\n setEntitiesMutably(state, entities, selectId);\n\n return {\n [stateKeys.entityMapKey]: state.entityMap,\n [stateKeys.idsKey]: state.ids,\n };\n };\n}\n","import { PartialStateUpdater } from '@ngrx/signals';\nimport {\n EntityChanges,\n EntityId,\n EntityState,\n NamedEntityState,\n SelectEntityId,\n} from '../models';\nimport {\n cloneEntityState,\n getEntityIdSelector,\n getEntityStateKeys,\n getEntityUpdaterResult,\n updateEntitiesMutably,\n} from '../helpers';\n\nexport function updateEntity<\n Collection extends string,\n State extends NamedEntityState<any, Collection>,\n Entity = State extends NamedEntityState<infer E, Collection> ? E : never\n>(\n update: {\n id: EntityId;\n changes: EntityChanges<NoInfer<Entity>>;\n },\n config: {\n collection: Collection;\n selectId: SelectEntityId<NoInfer<Entity>>;\n }\n): PartialStateUpdater<State>;\nexport function updateEntity<\n Collection extends string,\n State extends NamedEntityState<any, Collection>,\n Entity = State extends NamedEntityState<\n infer E extends { id: EntityId },\n Collection\n >\n ? E\n : never\n>(\n update: {\n id: EntityId;\n changes: EntityChanges<NoInfer<Entity>>;\n },\n config: { collection: Collection }\n): PartialStateUpdater<State>;\nexport function updateEntity<Entity>(\n update: {\n id: EntityId;\n changes: EntityChanges<NoInfer<Entity>>;\n },\n config: { selectId: SelectEntityId<NoInfer<Entity>> }\n): PartialStateUpdater<EntityState<Entity>>;\nexport function updateEntity<Entity extends { id: EntityId }>(update: {\n id: EntityId;\n changes: EntityChanges<NoInfer<Entity>>;\n}): PartialStateUpdater<EntityState<Entity>>;\nexport function updateEntity(\n update: {\n id: EntityId;\n changes: EntityChanges<any>;\n },\n config?: { collection?: string; selectId?: SelectEntityId<any> }\n): PartialStateUpdater<EntityState<any> | NamedEntityState<any, string>> {\n const selectId = getEntityIdSelector(config);\n const stateKeys = getEntityStateKeys(config);\n\n return (state) => {\n const clonedState = cloneEntityState(state, stateKeys);\n const didMutate = updateEntitiesMutably(\n clonedState,\n [update.id],\n update.changes,\n selectId\n );\n\n return getEntityUpdaterResult(clonedState, stateKeys, didMutate);\n };\n}\n","import { PartialStateUpdater } from '@ngrx/signals';\nimport {\n EntityChanges,\n EntityId,\n EntityPredicate,\n EntityState,\n NamedEntityState,\n SelectEntityId,\n} from '../models';\nimport {\n cloneEntityState,\n getEntityIdSelector,\n getEntityStateKeys,\n getEntityUpdaterResult,\n updateEntitiesMutably,\n} from '../helpers';\n\nexport function updateEntities<\n Collection extends string,\n State extends NamedEntityState<any, Collection>,\n Entity = State extends NamedEntityState<infer E, Collection> ? E : never\n>(\n update: {\n ids: EntityId[];\n changes: EntityChanges<NoInfer<Entity>>;\n },\n config: {\n collection: Collection;\n selectId: SelectEntityId<NoInfer<Entity>>;\n }\n): PartialStateUpdater<State>;\nexport function updateEntities<\n Collection extends string,\n State extends NamedEntityState<any, Collection>,\n Entity = State extends NamedEntityState<infer E, Collection> ? E : never\n>(\n update: {\n predicate: EntityPredicate<Entity>;\n changes: EntityChanges<NoInfer<Entity>>;\n },\n config: {\n collection: Collection;\n selectId: SelectEntityId<NoInfer<Entity>>;\n }\n): PartialStateUpdater<State>;\nexport function updateEntities<\n Collection extends string,\n State extends NamedEntityState<any, Collection>,\n Entity = State extends NamedEntityState<\n infer E extends { id: EntityId },\n Collection\n >\n ? E\n : never\n>(\n update: {\n ids: EntityId[];\n changes: EntityChanges<NoInfer<Entity>>;\n },\n config: { collection: Collection }\n): PartialStateUpdater<State>;\nexport function updateEntities<\n Collection extends string,\n State extends NamedEntityState<any, Collection>,\n Entity = State extends NamedEntityState<\n infer E extends { id: EntityId },\n Collection\n >\n ? E\n : never\n>(\n update: {\n predicate: EntityPredicate<Entity>;\n changes: EntityChanges<NoInfer<Entity>>;\n },\n config: { collection: Collection }\n): PartialStateUpdater<State>;\nexport function updateEntities<Entity>(\n update: {\n ids: EntityId[];\n changes: EntityChanges<NoInfer<Entity>>;\n },\n config: { selectId: SelectEntityId<NoInfer<Entity>> }\n): PartialStateUpdater<EntityState<Entity>>;\nexport function updateEntities<Entity>(\n update: {\n predicate: EntityPredicate<Entity>;\n changes: EntityChanges<NoInfer<Entity>>;\n },\n config: { selectId: SelectEntityId<NoInfer<Entity>> }\n): PartialStateUpdater<EntityState<Entity>>;\nexport function updateEntities<Entity extends { id: EntityId }>(update: {\n ids: EntityId[];\n changes: EntityChanges<NoInfer<Entity>>;\n}): PartialStateUpdater<EntityState<Entity>>;\nexport function updateEntities<Entity extends { id: EntityId }>(update: {\n predicate: EntityPredicate<Entity>;\n changes: EntityChanges<NoInfer<Entity>>;\n}): PartialStateUpdater<EntityState<Entity>>;\nexport function updateEntities(\n update: ({ ids: EntityId[] } | { predicate: EntityPredicate<any> }) & {\n changes: EntityChanges<any>;\n },\n config?: { collection?: string; selectId?: SelectEntityId<any> }\n): PartialStateUpdater<EntityState<any> | NamedEntityState<any, string>> {\n const selectId = getEntityIdSelector(config);\n const stateKeys = getEntityStateKeys(config);\n const idsOrPredicate = 'ids' in update ? update.ids : update.predicate;\n\n return (state) => {\n const clonedState = cloneEntityState(state, stateKeys);\n const didMutate = updateEntitiesMutably(\n clonedState,\n idsOrPredicate,\n update.changes,\n selectId\n );\n\n return getEntityUpdaterResult(clonedState, stateKeys, didMutate);\n };\n}\n","import { PartialStateUpdater } from '@ngrx/signals';\nimport {\n EntityChanges,\n EntityId,\n EntityState,\n NamedEntityState,\n SelectEntityId,\n} from '../models';\nimport {\n cloneEntityState,\n getEntityIdSelector,\n getEntityStateKeys,\n getEntityUpdaterResult,\n updateEntitiesMutably,\n} from '../helpers';\n\nexport function updateAllEntities<\n Collection extends string,\n State extends NamedEntityState<any, Collection>,\n Entity = State extends NamedEntityState<infer E, Collection> ? E : never\n>(\n changes: EntityChanges<NoInfer<Entity>>,\n config: {\n collection: Collection;\n selectId: SelectEntityId<NoInfer<Entity>>;\n }\n): PartialStateUpdater<State>;\nexport function updateAllEntities<\n Collection extends string,\n State extends NamedEntityState<any, Collection>,\n Entity = State extends NamedEntityState<\n infer E extends { id: EntityId },\n Collection\n >\n ? E\n : never\n>(\n changes: EntityChanges<NoInfer<Entity>>,\n config: { collection: Collection }\n): PartialStateUpdater<State>;\nexport function updateAllEntities<Entity>(\n changes: EntityChanges<NoInfer<Entity>>,\n config: { selectId: SelectEntityId<NoInfer<Entity>> }\n): PartialStateUpdater<EntityState<Entity>>;\nexport function updateAllEntities<Entity extends { id: EntityId }>(\n changes: EntityChanges<NoInfer<Entity>>\n): PartialStateUpdater<EntityState<Entity>>;\nexport function updateAllEntities(\n changes: EntityChanges<any>,\n config?: { collection?: string; selectId?: SelectEntityId<any> }\n): PartialStateUpdater<EntityState<any> | NamedEntityState<any, string>> {\n const selectId = getEntityIdSelector(config);\n const stateKeys = getEntityStateKeys(config);\n\n return (state) => {\n const clonedState = cloneEntityState(state, stateKeys);\n const didMutate = updateEntitiesMutably(\n clonedState,\n (state as Record<string, any>)[stateKeys.idsKey],\n changes,\n selectId\n );\n\n return getEntityUpdaterResult(clonedState, stateKeys, didMutate);\n };\n}\n","import { SelectEntityId } from './models';\n\nexport function entityConfig<Entity, Collection extends string>(config: {\n entity: Entity;\n collection: Collection;\n selectId: SelectEntityId<NoInfer<Entity>>;\n}): typeof config;\nexport function entityConfig<Entity>(config: {\n entity: Entity;\n selectId: SelectEntityId<NoInfer<Entity>>;\n}): typeof config;\nexport function entityConfig<Entity, Collection extends string>(config: {\n entity: Entity;\n collection: Collection;\n}): typeof config;\nexport function entityConfig<Entity>(config: { entity: Entity }): typeof config;\nexport function entityConfig<Entity>(config: {\n entity: Entity;\n collection?: string;\n selectId?: SelectEntityId<Entity>;\n}): typeof config {\n return config;\n}\n","import { computed, Signal } from '@angular/core';\nimport {\n SignalStoreFeature,\n signalStoreFeature,\n withComputed,\n withState,\n} from '@ngrx/signals';\nimport {\n EntityComputed,\n EntityId,\n EntityMap,\n EntityState,\n NamedEntityComputed,\n NamedEntityState,\n} from './models';\nimport { getEntityStateKeys } from './helpers';\n\nexport function withEntities<Entity>(): SignalStoreFeature<\n { state: {}; computed: {}; methods: {} },\n {\n state: EntityState<Entity>;\n computed: EntityComputed<Entity>;\n methods: {};\n }\n>;\nexport function withEntities<Entity, Collection extends string>(config: {\n entity: Entity;\n collection: Collection;\n}): SignalStoreFeature<\n { state: {}; computed: {}; methods: {} },\n {\n state: NamedEntityState<Entity, Collection>;\n computed: NamedEntityComputed<Entity, Collection>;\n methods: {};\n }\n>;\nexport function withEntities<Entity>(config: {\n entity: Entity;\n}): SignalStoreFeature<\n { state: {}; computed: {}; methods: {} },\n {\n state: EntityState<Entity>;\n computed: EntityComputed<Entity>;\n methods: {};\n }\n>;\nexport function withEntities<Entity>(config?: {\n entity: Entity;\n collection?: string;\n}): SignalStoreFeature {\n const { entityMapKey, idsKey, entitiesKey } = getEntityStateKeys(config);\n\n return signalStoreFeature(\n withState({\n [entityMapKey]: {},\n [idsKey]: [],\n }),\n withComputed((store: Record<string, Signal<unknown>>) => ({\n [entitiesKey]: computed(() => {\n const entityMap = store[entityMapKey]() as EntityMap<Entity>;\n const ids = store[idsKey]() as EntityId[];\n\n return ids.map((id) => entityMap[id]);\n }),\n }))\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngrx-signals-entities.mjs","sources":["../../../../modules/signals/entities/src/models.ts","../../../../modules/signals/entities/src/helpers.ts","../../../../modules/signals/entities/src/updaters/add-entity.ts","../../../../modules/signals/entities/src/updaters/add-entities.ts","../../../../modules/signals/entities/src/updaters/remove-entity.ts","../../../../modules/signals/entities/src/updaters/remove-entities.ts","../../../../modules/signals/entities/src/updaters/remove-all-entities.ts","../../../../modules/signals/entities/src/updaters/set-entity.ts","../../../../modules/signals/entities/src/updaters/set-entities.ts","../../../../modules/signals/entities/src/updaters/set-all-entities.ts","../../../../modules/signals/entities/src/updaters/update-entity.ts","../../../../modules/signals/entities/src/updaters/update-entities.ts","../../../../modules/signals/entities/src/updaters/update-all-entities.ts","../../../../modules/signals/entities/src/entity-config.ts","../../../../modules/signals/entities/src/with-entities.ts","../../../../modules/signals/entities/ngrx-signals-entities.ts"],"sourcesContent":["import { Signal } from '@angular/core';\n\nexport type EntityId = string | number;\n\nexport type EntityMap<Entity> = Record<EntityId, Entity>;\n\nexport type EntityState<Entity> = {\n entityMap: EntityMap<Entity>;\n ids: EntityId[];\n};\n\nexport type NamedEntityState<Entity, Collection extends string> = {\n [K in keyof EntityState<Entity> as `${Collection}${Capitalize<K>}`]: EntityState<Entity>[K];\n};\n\nexport type EntityComputed<Entity> = {\n entities: Signal<Entity[]>;\n};\n\nexport type NamedEntityComputed<Entity, Collection extends string> = {\n [K in keyof EntityComputed<Entity> as `${Collection}${Capitalize<K>}`]: EntityComputed<Entity>[K];\n};\n\nexport type SelectEntityId<Entity> = (entity: Entity) => EntityId;\n\nexport type EntityPredicate<Entity> = (entity: Entity) => boolean;\n\nexport type EntityChanges<Entity> =\n | Partial<Entity>\n | ((entity: Entity) => Partial<Entity>);\n\nexport enum DidMutate {\n None,\n Entities,\n Both,\n}\n","import {\n DidMutate,\n EntityChanges,\n EntityId,\n EntityPredicate,\n EntityState,\n SelectEntityId,\n} from './models';\n\ndeclare const ngDevMode: unknown;\nconst defaultSelectId: SelectEntityId<{ id: EntityId }> = (entity) => entity.id;\n\nexport function getEntityIdSelector(config?: {\n selectId?: SelectEntityId<any>;\n}): SelectEntityId<any> {\n return config?.selectId ?? defaultSelectId;\n}\n\nexport function getEntityStateKeys(config?: { collection?: string }): {\n entityMapKey: string;\n idsKey: string;\n entitiesKey: string;\n} {\n const collection = config?.collection;\n const entityMapKey =\n collection === undefined ? 'entityMap' : `${collection}EntityMap`;\n const idsKey = collection === undefined ? 'ids' : `${collection}Ids`;\n const entitiesKey =\n collection === undefined ? 'entities' : `${collection}Entities`;\n\n return { entityMapKey, idsKey, entitiesKey };\n}\n\nexport function cloneEntityState(\n state: Record<string, any>,\n stateKeys: {\n entityMapKey: string;\n idsKey: string;\n }\n): EntityState<any> {\n return {\n entityMap: { ...state[stateKeys.entityMapKey] },\n ids: [...state[stateKeys.idsKey]],\n };\n}\n\nexport function getEntityUpdaterResult(\n state: EntityState<any>,\n stateKeys: {\n entityMapKey: string;\n idsKey: string;\n },\n didMutate: DidMutate\n): Record<string, any> {\n switch (didMutate) {\n case DidMutate.Both: {\n return {\n [stateKeys.entityMapKey]: state.entityMap,\n [stateKeys.idsKey]: state.ids,\n };\n }\n case DidMutate.Entities: {\n return { [stateKeys.entityMapKey]: state.entityMap };\n }\n default: {\n return {};\n }\n }\n}\n\nexport function addEntityMutably(\n state: EntityState<any>,\n entity: any,\n selectId: SelectEntityId<any>\n): DidMutate {\n const id = selectId(entity);\n\n if (state.entityMap[id]) {\n return DidMutate.None;\n }\n\n state.entityMap[id] = entity;\n state.ids.push(id);\n\n return DidMutate.Both;\n}\n\nexport function addEntitiesMutably(\n state: EntityState<any>,\n entities: any[],\n selectId: SelectEntityId<any>\n): DidMutate {\n let didMutate = DidMutate.None;\n\n for (const entity of entities) {\n const result = addEntityMutably(state, entity, selectId);\n\n if (result === DidMutate.Both) {\n didMutate = result;\n }\n }\n\n return didMutate;\n}\n\nexport function setEntityMutably(\n state: EntityState<any>,\n entity: any,\n selectId: SelectEntityId<any>\n): DidMutate {\n const id = selectId(entity);\n\n if (state.entityMap[id]) {\n state.entityMap[id] = entity;\n return DidMutate.Entities;\n }\n\n state.entityMap[id] = entity;\n state.ids.push(id);\n\n return DidMutate.Both;\n}\n\nexport function setEntitiesMutably(\n state: EntityState<any>,\n entities: any[],\n selectId: SelectEntityId<any>\n): DidMutate {\n let didMutate = DidMutate.None;\n\n for (const entity of entities) {\n const result = setEntityMutably(state, entity, selectId);\n\n if (didMutate === DidMutate.Both) {\n continue;\n }\n\n didMutate = result;\n }\n\n return didMutate;\n}\n\nexport function removeEntitiesMutably(\n state: EntityState<any>,\n idsOrPredicate: EntityId[] | EntityPredicate<any>\n): DidMutate {\n const ids = Array.isArray(idsOrPredicate)\n ? idsOrPredicate\n : state.ids.filter((id) => idsOrPredicate(state.entityMap[id]));\n let didMutate = DidMutate.None;\n\n for (const id of ids) {\n if (state.entityMap[id]) {\n delete state.entityMap[id];\n didMutate = DidMutate.Both;\n }\n }\n\n if (didMutate === DidMutate.Both) {\n state.ids = state.ids.filter((id) => id in state.entityMap);\n }\n\n return didMutate;\n}\n\nexport function updateEntitiesMutably(\n state: EntityState<any>,\n idsOrPredicate: EntityId[] | EntityPredicate<any>,\n changes: EntityChanges<any>,\n selectId: SelectEntityId<any>\n): DidMutate {\n const ids = Array.isArray(idsOrPredicate)\n ? idsOrPredicate\n : state.ids.filter((id) => idsOrPredicate(state.entityMap[id]));\n let newIds: Record<EntityId, EntityId> | undefined = undefined;\n let didMutate = DidMutate.None;\n\n for (const id of ids) {\n const entity = state.entityMap[id];\n\n if (entity) {\n const changesRecord =\n typeof changes === 'function' ? changes(entity) : changes;\n state.entityMap[id] = { ...entity, ...changesRecord };\n didMutate = DidMutate.Entities;\n\n const newId = selectId(state.entityMap[id]);\n if (newId !== id) {\n state.entityMap[newId] = state.entityMap[id];\n delete state.entityMap[id];\n\n newIds = newIds || {};\n newIds[id] = newId;\n }\n }\n }\n\n if (newIds) {\n state.ids = state.ids.map((id) => newIds[id] ?? id);\n didMutate = DidMutate.Both;\n }\n\n if (ngDevMode && state.ids.length !== Object.keys(state.entityMap).length) {\n console.warn(\n '@ngrx/signals/entities: Entities with IDs:',\n ids,\n 'are not updated correctly.',\n 'Make sure to apply valid changes when using `updateEntity`,',\n '`updateEntities`, and `updateAllEntities` updaters.'\n );\n }\n\n return didMutate;\n}\n","import { PartialStateUpdater } from '@ngrx/signals';\nimport {\n EntityId,\n EntityState,\n NamedEntityState,\n SelectEntityId,\n} from '../models';\nimport {\n addEntityMutably,\n cloneEntityState,\n getEntityIdSelector,\n getEntityStateKeys,\n getEntityUpdaterResult,\n} from '../helpers';\n\nexport function addEntity<Entity extends { id: EntityId }>(\n entity: Entity\n): PartialStateUpdater<EntityState<Entity>>;\nexport function addEntity<Entity, Collection extends string>(\n entity: Entity,\n config: { collection: Collection; selectId: SelectEntityId<NoInfer<Entity>> }\n): PartialStateUpdater<NamedEntityState<Entity, Collection>>;\nexport function addEntity<\n Entity extends { id: EntityId },\n Collection extends string\n>(\n entity: Entity,\n config: { collection: Collection }\n): PartialStateUpdater<NamedEntityState<Entity, Collection>>;\nexport function addEntity<Entity>(\n entity: Entity,\n config: { selectId: SelectEntityId<NoInfer<Entity>> }\n): PartialStateUpdater<EntityState<Entity>>;\nexport function addEntity(\n entity: any,\n config?: { collection?: string; selectId?: SelectEntityId<any> }\n): PartialStateUpdater<EntityState<any> | NamedEntityState<any, string>> {\n const selectId = getEntityIdSelector(config);\n const stateKeys = getEntityStateKeys(config);\n\n return (state) => {\n const clonedState = cloneEntityState(state, stateKeys);\n const didMutate = addEntityMutably(clonedState, entity, selectId);\n\n return getEntityUpdaterResult(clonedState, stateKeys, didMutate);\n };\n}\n","import { PartialStateUpdater } from '@ngrx/signals';\nimport {\n EntityId,\n EntityState,\n NamedEntityState,\n SelectEntityId,\n} from '../models';\nimport {\n addEntitiesMutably,\n cloneEntityState,\n getEntityIdSelector,\n getEntityStateKeys,\n getEntityUpdaterResult,\n} from '../helpers';\n\nexport function addEntities<Entity extends { id: EntityId }>(\n entities: Entity[]\n): PartialStateUpdater<EntityState<Entity>>;\nexport function addEntities<Entity, Collection extends string>(\n entities: Entity[],\n config: { collection: Collection; selectId: SelectEntityId<NoInfer<Entity>> }\n): PartialStateUpdater<NamedEntityState<Entity, Collection>>;\nexport function addEntities<\n Entity extends { id: EntityId },\n Collection extends string\n>(\n entities: Entity[],\n config: { collection: Collection }\n): PartialStateUpdater<NamedEntityState<Entity, Collection>>;\nexport function addEntities<Entity>(\n entities: Entity[],\n config: { selectId: SelectEntityId<NoInfer<Entity>> }\n): PartialStateUpdater<EntityState<Entity>>;\nexport function addEntities(\n entities: any[],\n config?: { collection?: string; selectId?: SelectEntityId<any> }\n): PartialStateUpdater<EntityState<any> | NamedEntityState<any, string>> {\n const selectId = getEntityIdSelector(config);\n const stateKeys = getEntityStateKeys(config);\n\n return (state) => {\n const clonedState = cloneEntityState(state, stateKeys);\n const didMutate = addEntitiesMutably(clonedState, entities, selectId);\n\n return getEntityUpdaterResult(clonedState, stateKeys, didMutate);\n };\n}\n","import { PartialStateUpdater } from '@ngrx/signals';\nimport { EntityId, EntityState, NamedEntityState } from '../models';\nimport {\n cloneEntityState,\n getEntityStateKeys,\n getEntityUpdaterResult,\n removeEntitiesMutably,\n} from '../helpers';\n\nexport function removeEntity(\n id: EntityId\n): PartialStateUpdater<EntityState<any>>;\nexport function removeEntity<Collection extends string>(\n id: EntityId,\n config: { collection: Collection }\n): PartialStateUpdater<NamedEntityState<any, Collection>>;\nexport function removeEntity(\n id: EntityId,\n config?: { collection?: string }\n): PartialStateUpdater<EntityState<any> | NamedEntityState<any, string>> {\n const stateKeys = getEntityStateKeys(config);\n\n return (state) => {\n const clonedState = cloneEntityState(state, stateKeys);\n const didMutate = removeEntitiesMutably(clonedState, [id]);\n\n return getEntityUpdaterResult(clonedState, stateKeys, didMutate);\n };\n}\n","import { PartialStateUpdater } from '@ngrx/signals';\nimport {\n EntityId,\n EntityPredicate,\n EntityState,\n NamedEntityState,\n} from '../models';\nimport {\n cloneEntityState,\n getEntityStateKeys,\n getEntityUpdaterResult,\n removeEntitiesMutably,\n} from '../helpers';\n\nexport function removeEntities(\n ids: EntityId[]\n): PartialStateUpdater<EntityState<any>>;\nexport function removeEntities<Entity>(\n predicate: EntityPredicate<Entity>\n): PartialStateUpdater<EntityState<Entity>>;\nexport function removeEntities<Collection extends string>(\n ids: EntityId[],\n config: { collection: Collection }\n): PartialStateUpdater<NamedEntityState<any, Collection>>;\nexport function removeEntities<\n Collection extends string,\n State extends NamedEntityState<any, Collection>,\n Entity = State extends NamedEntityState<infer E, Collection> ? E : never\n>(\n predicate: EntityPredicate<Entity>,\n config: { collection: Collection }\n): PartialStateUpdater<State>;\nexport function removeEntities(\n idsOrPredicate: EntityId[] | EntityPredicate<any>,\n config?: { collection?: string }\n): PartialStateUpdater<EntityState<any> | NamedEntityState<any, string>> {\n const stateKeys = getEntityStateKeys(config);\n\n return (state) => {\n const clonedState = cloneEntityState(state, stateKeys);\n const didMutate = removeEntitiesMutably(clonedState, idsOrPredicate);\n\n return getEntityUpdaterResult(clonedState, stateKeys, didMutate);\n };\n}\n","import { PartialStateUpdater } from '@ngrx/signals';\nimport { EntityState, NamedEntityState } from '../models';\nimport { getEntityStateKeys } from '../helpers';\n\nexport function removeAllEntities(): PartialStateUpdater<EntityState<any>>;\nexport function removeAllEntities<Collection extends string>(config: {\n collection: Collection;\n}): PartialStateUpdater<NamedEntityState<any, Collection>>;\nexport function removeAllEntities(config?: {\n collection?: string;\n}): PartialStateUpdater<EntityState<any> | NamedEntityState<any, string>> {\n const stateKeys = getEntityStateKeys(config);\n\n return () => ({\n [stateKeys.entityMapKey]: {},\n [stateKeys.idsKey]: [],\n });\n}\n","import { PartialStateUpdater } from '@ngrx/signals';\nimport {\n EntityId,\n EntityState,\n NamedEntityState,\n SelectEntityId,\n} from '../models';\nimport {\n cloneEntityState,\n getEntityIdSelector,\n getEntityStateKeys,\n getEntityUpdaterResult,\n setEntityMutably,\n} from '../helpers';\n\nexport function setEntity<Entity extends { id: EntityId }>(\n entity: Entity\n): PartialStateUpdater<EntityState<Entity>>;\nexport function setEntity<Entity, Collection extends string>(\n entity: Entity,\n config: { collection: Collection; selectId: SelectEntityId<NoInfer<Entity>> }\n): PartialStateUpdater<NamedEntityState<Entity, Collection>>;\nexport function setEntity<\n Entity extends { id: EntityId },\n Collection extends string\n>(\n entity: Entity,\n config: { collection: Collection }\n): PartialStateUpdater<NamedEntityState<Entity, Collection>>;\nexport function setEntity<Entity>(\n entity: Entity,\n config: { selectId: SelectEntityId<NoInfer<Entity>> }\n): PartialStateUpdater<EntityState<Entity>>;\nexport function setEntity(\n entity: any,\n config?: { collection?: string; selectId?: SelectEntityId<any> }\n): PartialStateUpdater<EntityState<any> | NamedEntityState<any, string>> {\n const selectId = getEntityIdSelector(config);\n const stateKeys = getEntityStateKeys(config);\n\n return (state) => {\n const clonedState = cloneEntityState(state, stateKeys);\n const didMutate = setEntityMutably(clonedState, entity, selectId);\n\n return getEntityUpdaterResult(clonedState, stateKeys, didMutate);\n };\n}\n","import { PartialStateUpdater } from '@ngrx/signals';\nimport {\n EntityId,\n EntityState,\n NamedEntityState,\n SelectEntityId,\n} from '../models';\nimport {\n cloneEntityState,\n getEntityIdSelector,\n getEntityStateKeys,\n getEntityUpdaterResult,\n setEntitiesMutably,\n} from '../helpers';\n\nexport function setEntities<Entity extends { id: EntityId }>(\n entities: Entity[]\n): PartialStateUpdater<EntityState<Entity>>;\nexport function setEntities<Entity, Collection extends string>(\n entities: Entity[],\n config: { collection: Collection; selectId: SelectEntityId<NoInfer<Entity>> }\n): PartialStateUpdater<NamedEntityState<Entity, Collection>>;\nexport function setEntities<\n Entity extends { id: EntityId },\n Collection extends string\n>(\n entities: Entity[],\n config: { collection: Collection }\n): PartialStateUpdater<NamedEntityState<Entity, Collection>>;\nexport function setEntities<Entity>(\n entities: Entity[],\n config: { selectId: SelectEntityId<NoInfer<Entity>> }\n): PartialStateUpdater<EntityState<Entity>>;\nexport function setEntities(\n entities: any[],\n config?: { collection?: string; selectId?: SelectEntityId<any> }\n): PartialStateUpdater<EntityState<any> | NamedEntityState<any, string>> {\n const selectId = getEntityIdSelector(config);\n const stateKeys = getEntityStateKeys(config);\n\n return (state) => {\n const clonedState = cloneEntityState(state, stateKeys);\n const didMutate = setEntitiesMutably(clonedState, entities, selectId);\n\n return getEntityUpdaterResult(clonedState, stateKeys, didMutate);\n };\n}\n","import { PartialStateUpdater } from '@ngrx/signals';\nimport {\n EntityId,\n EntityState,\n NamedEntityState,\n SelectEntityId,\n} from '../models';\nimport {\n getEntityIdSelector,\n getEntityStateKeys,\n setEntitiesMutably,\n} from '../helpers';\n\nexport function setAllEntities<Entity extends { id: EntityId }>(\n entities: Entity[]\n): PartialStateUpdater<EntityState<Entity>>;\nexport function setAllEntities<Entity, Collection extends string>(\n entities: Entity[],\n config: { collection: Collection; selectId: SelectEntityId<NoInfer<Entity>> }\n): PartialStateUpdater<NamedEntityState<Entity, Collection>>;\nexport function setAllEntities<\n Entity extends { id: EntityId },\n Collection extends string\n>(\n entities: Entity[],\n config: { collection: Collection }\n): PartialStateUpdater<NamedEntityState<Entity, Collection>>;\nexport function setAllEntities<Entity>(\n entities: Entity[],\n config: { selectId: SelectEntityId<NoInfer<Entity>> }\n): PartialStateUpdater<EntityState<Entity>>;\nexport function setAllEntities(\n entities: any[],\n config?: { collection?: string; selectId?: SelectEntityId<any> }\n): PartialStateUpdater<EntityState<any> | NamedEntityState<any, string>> {\n const selectId = getEntityIdSelector(config);\n const stateKeys = getEntityStateKeys(config);\n\n return () => {\n const state: EntityState<any> = { entityMap: {}, ids: [] };\n setEntitiesMutably(state, entities, selectId);\n\n return {\n [stateKeys.entityMapKey]: state.entityMap,\n [stateKeys.idsKey]: state.ids,\n };\n };\n}\n","import { PartialStateUpdater } from '@ngrx/signals';\nimport {\n EntityChanges,\n EntityId,\n EntityState,\n NamedEntityState,\n SelectEntityId,\n} from '../models';\nimport {\n cloneEntityState,\n getEntityIdSelector,\n getEntityStateKeys,\n getEntityUpdaterResult,\n updateEntitiesMutably,\n} from '../helpers';\n\nexport function updateEntity<\n Collection extends string,\n State extends NamedEntityState<any, Collection>,\n Entity = State extends NamedEntityState<infer E, Collection> ? E : never\n>(\n update: {\n id: EntityId;\n changes: EntityChanges<NoInfer<Entity>>;\n },\n config: {\n collection: Collection;\n selectId: SelectEntityId<NoInfer<Entity>>;\n }\n): PartialStateUpdater<State>;\nexport function updateEntity<\n Collection extends string,\n State extends NamedEntityState<any, Collection>,\n Entity = State extends NamedEntityState<\n infer E extends { id: EntityId },\n Collection\n >\n ? E\n : never\n>(\n update: {\n id: EntityId;\n changes: EntityChanges<NoInfer<Entity>>;\n },\n config: { collection: Collection }\n): PartialStateUpdater<State>;\nexport function updateEntity<Entity>(\n update: {\n id: EntityId;\n changes: EntityChanges<NoInfer<Entity>>;\n },\n config: { selectId: SelectEntityId<NoInfer<Entity>> }\n): PartialStateUpdater<EntityState<Entity>>;\nexport function updateEntity<Entity extends { id: EntityId }>(update: {\n id: EntityId;\n changes: EntityChanges<NoInfer<Entity>>;\n}): PartialStateUpdater<EntityState<Entity>>;\nexport function updateEntity(\n update: {\n id: EntityId;\n changes: EntityChanges<any>;\n },\n config?: { collection?: string; selectId?: SelectEntityId<any> }\n): PartialStateUpdater<EntityState<any> | NamedEntityState<any, string>> {\n const selectId = getEntityIdSelector(config);\n const stateKeys = getEntityStateKeys(config);\n\n return (state) => {\n const clonedState = cloneEntityState(state, stateKeys);\n const didMutate = updateEntitiesMutably(\n clonedState,\n [update.id],\n update.changes,\n selectId\n );\n\n return getEntityUpdaterResult(clonedState, stateKeys, didMutate);\n };\n}\n","import { PartialStateUpdater } from '@ngrx/signals';\nimport {\n EntityChanges,\n EntityId,\n EntityPredicate,\n EntityState,\n NamedEntityState,\n SelectEntityId,\n} from '../models';\nimport {\n cloneEntityState,\n getEntityIdSelector,\n getEntityStateKeys,\n getEntityUpdaterResult,\n updateEntitiesMutably,\n} from '../helpers';\n\nexport function updateEntities<\n Collection extends string,\n State extends NamedEntityState<any, Collection>,\n Entity = State extends NamedEntityState<infer E, Collection> ? E : never\n>(\n update: {\n ids: EntityId[];\n changes: EntityChanges<NoInfer<Entity>>;\n },\n config: {\n collection: Collection;\n selectId: SelectEntityId<NoInfer<Entity>>;\n }\n): PartialStateUpdater<State>;\nexport function updateEntities<\n Collection extends string,\n State extends NamedEntityState<any, Collection>,\n Entity = State extends NamedEntityState<infer E, Collection> ? E : never\n>(\n update: {\n predicate: EntityPredicate<Entity>;\n changes: EntityChanges<NoInfer<Entity>>;\n },\n config: {\n collection: Collection;\n selectId: SelectEntityId<NoInfer<Entity>>;\n }\n): PartialStateUpdater<State>;\nexport function updateEntities<\n Collection extends string,\n State extends NamedEntityState<any, Collection>,\n Entity = State extends NamedEntityState<\n infer E extends { id: EntityId },\n Collection\n >\n ? E\n : never\n>(\n update: {\n ids: EntityId[];\n changes: EntityChanges<NoInfer<Entity>>;\n },\n config: { collection: Collection }\n): PartialStateUpdater<State>;\nexport function updateEntities<\n Collection extends string,\n State extends NamedEntityState<any, Collection>,\n Entity = State extends NamedEntityState<\n infer E extends { id: EntityId },\n Collection\n >\n ? E\n : never\n>(\n update: {\n predicate: EntityPredicate<Entity>;\n changes: EntityChanges<NoInfer<Entity>>;\n },\n config: { collection: Collection }\n): PartialStateUpdater<State>;\nexport function updateEntities<Entity>(\n update: {\n ids: EntityId[];\n changes: EntityChanges<NoInfer<Entity>>;\n },\n config: { selectId: SelectEntityId<NoInfer<Entity>> }\n): PartialStateUpdater<EntityState<Entity>>;\nexport function updateEntities<Entity>(\n update: {\n predicate: EntityPredicate<Entity>;\n changes: EntityChanges<NoInfer<Entity>>;\n },\n config: { selectId: SelectEntityId<NoInfer<Entity>> }\n): PartialStateUpdater<EntityState<Entity>>;\nexport function updateEntities<Entity extends { id: EntityId }>(update: {\n ids: EntityId[];\n changes: EntityChanges<NoInfer<Entity>>;\n}): PartialStateUpdater<EntityState<Entity>>;\nexport function updateEntities<Entity extends { id: EntityId }>(update: {\n predicate: EntityPredicate<Entity>;\n changes: EntityChanges<NoInfer<Entity>>;\n}): PartialStateUpdater<EntityState<Entity>>;\nexport function updateEntities(\n update: ({ ids: EntityId[] } | { predicate: EntityPredicate<any> }) & {\n changes: EntityChanges<any>;\n },\n config?: { collection?: string; selectId?: SelectEntityId<any> }\n): PartialStateUpdater<EntityState<any> | NamedEntityState<any, string>> {\n const selectId = getEntityIdSelector(config);\n const stateKeys = getEntityStateKeys(config);\n const idsOrPredicate = 'ids' in update ? update.ids : update.predicate;\n\n return (state) => {\n const clonedState = cloneEntityState(state, stateKeys);\n const didMutate = updateEntitiesMutably(\n clonedState,\n idsOrPredicate,\n update.changes,\n selectId\n );\n\n return getEntityUpdaterResult(clonedState, stateKeys, didMutate);\n };\n}\n","import { PartialStateUpdater } from '@ngrx/signals';\nimport {\n EntityChanges,\n EntityId,\n EntityState,\n NamedEntityState,\n SelectEntityId,\n} from '../models';\nimport {\n cloneEntityState,\n getEntityIdSelector,\n getEntityStateKeys,\n getEntityUpdaterResult,\n updateEntitiesMutably,\n} from '../helpers';\n\nexport function updateAllEntities<\n Collection extends string,\n State extends NamedEntityState<any, Collection>,\n Entity = State extends NamedEntityState<infer E, Collection> ? E : never\n>(\n changes: EntityChanges<NoInfer<Entity>>,\n config: {\n collection: Collection;\n selectId: SelectEntityId<NoInfer<Entity>>;\n }\n): PartialStateUpdater<State>;\nexport function updateAllEntities<\n Collection extends string,\n State extends NamedEntityState<any, Collection>,\n Entity = State extends NamedEntityState<\n infer E extends { id: EntityId },\n Collection\n >\n ? E\n : never\n>(\n changes: EntityChanges<NoInfer<Entity>>,\n config: { collection: Collection }\n): PartialStateUpdater<State>;\nexport function updateAllEntities<Entity>(\n changes: EntityChanges<NoInfer<Entity>>,\n config: { selectId: SelectEntityId<NoInfer<Entity>> }\n): PartialStateUpdater<EntityState<Entity>>;\nexport function updateAllEntities<Entity extends { id: EntityId }>(\n changes: EntityChanges<NoInfer<Entity>>\n): PartialStateUpdater<EntityState<Entity>>;\nexport function updateAllEntities(\n changes: EntityChanges<any>,\n config?: { collection?: string; selectId?: SelectEntityId<any> }\n): PartialStateUpdater<EntityState<any> | NamedEntityState<any, string>> {\n const selectId = getEntityIdSelector(config);\n const stateKeys = getEntityStateKeys(config);\n\n return (state) => {\n const clonedState = cloneEntityState(state, stateKeys);\n const didMutate = updateEntitiesMutably(\n clonedState,\n (state as Record<string, any>)[stateKeys.idsKey],\n changes,\n selectId\n );\n\n return getEntityUpdaterResult(clonedState, stateKeys, didMutate);\n };\n}\n","import { SelectEntityId } from './models';\n\nexport function entityConfig<Entity, Collection extends string>(config: {\n entity: Entity;\n collection: Collection;\n selectId: SelectEntityId<NoInfer<Entity>>;\n}): typeof config;\nexport function entityConfig<Entity>(config: {\n entity: Entity;\n selectId: SelectEntityId<NoInfer<Entity>>;\n}): typeof config;\nexport function entityConfig<Entity, Collection extends string>(config: {\n entity: Entity;\n collection: Collection;\n}): typeof config;\nexport function entityConfig<Entity>(config: { entity: Entity }): typeof config;\nexport function entityConfig<Entity>(config: {\n entity: Entity;\n collection?: string;\n selectId?: SelectEntityId<Entity>;\n}): typeof config {\n return config;\n}\n","import { computed, Signal } from '@angular/core';\nimport {\n EmptyFeatureResult,\n SignalStoreFeature,\n signalStoreFeature,\n withComputed,\n withState,\n} from '@ngrx/signals';\nimport {\n EntityComputed,\n EntityId,\n EntityMap,\n EntityState,\n NamedEntityComputed,\n NamedEntityState,\n} from './models';\nimport { getEntityStateKeys } from './helpers';\n\nexport function withEntities<Entity>(): SignalStoreFeature<\n EmptyFeatureResult,\n {\n state: EntityState<Entity>;\n computed: EntityComputed<Entity>;\n methods: {};\n }\n>;\nexport function withEntities<Entity, Collection extends string>(config: {\n entity: Entity;\n collection: Collection;\n}): SignalStoreFeature<\n EmptyFeatureResult,\n {\n state: NamedEntityState<Entity, Collection>;\n computed: NamedEntityComputed<Entity, Collection>;\n methods: {};\n }\n>;\nexport function withEntities<Entity>(config: {\n entity: Entity;\n}): SignalStoreFeature<\n EmptyFeatureResult,\n {\n state: EntityState<Entity>;\n computed: EntityComputed<Entity>;\n methods: {};\n }\n>;\nexport function withEntities<Entity>(config?: {\n entity: Entity;\n collection?: string;\n}): SignalStoreFeature {\n const { entityMapKey, idsKey, entitiesKey } = getEntityStateKeys(config);\n\n return signalStoreFeature(\n withState({\n [entityMapKey]: {},\n [idsKey]: [],\n }),\n withComputed((store: Record<string, Signal<unknown>>) => ({\n [entitiesKey]: computed(() => {\n const entityMap = store[entityMapKey]() as EntityMap<Entity>;\n const ids = store[idsKey]() as EntityId[];\n\n return ids.map((id) => entityMap[id]);\n }),\n }))\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ngrx-signals-rxjs-interop.mjs","sources":["../../../../modules/signals/rxjs-interop/src/rx-method.ts","../../../../modules/signals/rxjs-interop/ngrx-signals-rxjs-interop.ts"],"sourcesContent":["import {\n assertInInjectionContext,\n DestroyRef,\n effect,\n inject,\n Injector,\n isSignal,\n Signal,\n untracked,\n} from '@angular/core';\nimport { isObservable, noop, Observable, Subject, Unsubscribable } from 'rxjs';\n\ntype RxMethodInput<Input> = Input | Observable<Input> | Signal<Input>;\n\ntype RxMethod<Input> = ((input: RxMethodInput<Input>) => Unsubscribable) &\n Unsubscribable;\n\nexport function rxMethod<Input>(\n generator: (source$: Observable<Input>) => Observable<unknown>,\n config?: { injector?: Injector }\n): RxMethod<Input> {\n if (!config?.injector) {\n assertInInjectionContext(rxMethod);\n }\n\n const injector = config?.injector ?? inject(Injector);\n const destroyRef = injector.get(DestroyRef);\n const source$ = new Subject<Input>();\n\n const sourceSub = generator(source$).subscribe();\n destroyRef.onDestroy(() => sourceSub.unsubscribe());\n\n const rxMethodFn = (input: RxMethodInput<Input>) => {\n if (isSignal(input)) {\n const watcher = effect(\n () => {\n const value = input();\n untracked(() => source$.next(value));\n },\n { injector }\n );\n const instanceSub = { unsubscribe: () => watcher.destroy() };\n sourceSub.add(instanceSub);\n\n return instanceSub;\n }\n\n if (isObservable(input)) {\n const instanceSub = input.subscribe((value) => source$.next(value));\n sourceSub.add(instanceSub);\n\n return instanceSub;\n }\n\n source$.next(input);\n return { unsubscribe: noop };\n };\n rxMethodFn.unsubscribe = sourceSub.unsubscribe.bind(sourceSub);\n\n return rxMethodFn;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;AAiBgB,SAAA,QAAQ,CACtB,SAA8D,EAC9D,MAAgC,EAAA;AAEhC,IAAA,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE;QACrB,wBAAwB,CAAC,QAAQ,CAAC,CAAC;KACpC;IAED,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAC5C,IAAA,MAAM,OAAO,GAAG,IAAI,OAAO,EAAS,CAAC;IAErC,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;IACjD,UAAU,CAAC,SAAS,CAAC,MAAM,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;AAEpD,IAAA,MAAM,UAAU,GAAG,CAAC,KAA2B,KAAI;AACjD,QAAA,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;AACnB,YAAA,MAAM,OAAO,GAAG,MAAM,CACpB,MAAK;AACH,gBAAA,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC;gBACtB,SAAS,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACvC,aAAC,EACD,EAAE,QAAQ,EAAE,CACb,CAAC;AACF,YAAA,MAAM,WAAW,GAAG,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;AAC7D,YAAA,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAE3B,YAAA,OAAO,WAAW,CAAC;SACpB;AAED,QAAA,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;AACvB,YAAA,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACpE,YAAA,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAE3B,YAAA,OAAO,WAAW,CAAC;SACpB;AAED,QAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpB,QAAA,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAC/B,KAAC,CAAC;IACF,UAAU,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAE/D,IAAA,OAAO,UAAU,CAAC;AACpB;;AC5DA;;AAEG;;;;"}
1
+ {"version":3,"file":"ngrx-signals-rxjs-interop.mjs","sources":["../../../../modules/signals/rxjs-interop/src/rx-method.ts","../../../../modules/signals/rxjs-interop/ngrx-signals-rxjs-interop.ts"],"sourcesContent":["import {\n assertInInjectionContext,\n DestroyRef,\n effect,\n inject,\n Injector,\n isSignal,\n Signal,\n untracked,\n} from '@angular/core';\nimport { isObservable, noop, Observable, Subject, Unsubscribable } from 'rxjs';\n\ntype RxMethod<Input> = ((\n input: Input | Signal<Input> | Observable<Input>\n) => Unsubscribable) &\n Unsubscribable;\n\nexport function rxMethod<Input>(\n generator: (source$: Observable<Input>) => Observable<unknown>,\n config?: { injector?: Injector }\n): RxMethod<Input> {\n if (!config?.injector) {\n assertInInjectionContext(rxMethod);\n }\n\n const injector = config?.injector ?? inject(Injector);\n const destroyRef = injector.get(DestroyRef);\n const source$ = new Subject<Input>();\n\n const sourceSub = generator(source$).subscribe();\n destroyRef.onDestroy(() => sourceSub.unsubscribe());\n\n const rxMethodFn = (input: Input | Signal<Input> | Observable<Input>) => {\n if (isSignal(input)) {\n const watcher = effect(\n () => {\n const value = input();\n untracked(() => source$.next(value));\n },\n { injector }\n );\n const instanceSub = { unsubscribe: () => watcher.destroy() };\n sourceSub.add(instanceSub);\n\n return instanceSub;\n }\n\n if (isObservable(input)) {\n const instanceSub = input.subscribe((value) => source$.next(value));\n sourceSub.add(instanceSub);\n\n return instanceSub;\n }\n\n source$.next(input);\n return { unsubscribe: noop };\n };\n rxMethodFn.unsubscribe = sourceSub.unsubscribe.bind(sourceSub);\n\n return rxMethodFn;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;AAiBgB,SAAA,QAAQ,CACtB,SAA8D,EAC9D,MAAgC,EAAA;AAEhC,IAAA,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE;QACrB,wBAAwB,CAAC,QAAQ,CAAC,CAAC;KACpC;IAED,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAC5C,IAAA,MAAM,OAAO,GAAG,IAAI,OAAO,EAAS,CAAC;IAErC,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;IACjD,UAAU,CAAC,SAAS,CAAC,MAAM,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;AAEpD,IAAA,MAAM,UAAU,GAAG,CAAC,KAAgD,KAAI;AACtE,QAAA,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;AACnB,YAAA,MAAM,OAAO,GAAG,MAAM,CACpB,MAAK;AACH,gBAAA,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC;gBACtB,SAAS,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACvC,aAAC,EACD,EAAE,QAAQ,EAAE,CACb,CAAC;AACF,YAAA,MAAM,WAAW,GAAG,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;AAC7D,YAAA,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAE3B,YAAA,OAAO,WAAW,CAAC;SACpB;AAED,QAAA,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;AACvB,YAAA,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACpE,YAAA,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAE3B,YAAA,OAAO,WAAW,CAAC;SACpB;AAED,QAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpB,QAAA,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAC/B,KAAC,CAAC;IACF,UAAU,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAE/D,IAAA,OAAO,UAAU,CAAC;AACpB;;AC5DA;;AAEG;;;;"}
@@ -1,17 +1,51 @@
1
1
  import * as i0 from '@angular/core';
2
- import { untracked, isSignal, computed, signal, inject, DestroyRef, Injectable } from '@angular/core';
2
+ import { assertInInjectionContext, inject, Injector, DestroyRef, untracked, isSignal, computed, signal, Injectable } from '@angular/core';
3
+ import { SIGNAL } from '@angular/core/primitives/signals';
3
4
 
4
- const STATE_SIGNAL = Symbol('STATE_SIGNAL');
5
-
6
- function getState(stateSignal) {
7
- return stateSignal[STATE_SIGNAL]();
8
- }
9
-
10
- function patchState(stateSignal, ...updaters) {
11
- stateSignal[STATE_SIGNAL].update((currentState) => updaters.reduce((nextState, updater) => ({
5
+ const STATE_WATCHERS = new WeakMap();
6
+ const STATE_SOURCE = Symbol('STATE_SOURCE');
7
+ function patchState(stateSource, ...updaters) {
8
+ stateSource[STATE_SOURCE].update((currentState) => updaters.reduce((nextState, updater) => ({
12
9
  ...nextState,
13
10
  ...(typeof updater === 'function' ? updater(nextState) : updater),
14
11
  }), currentState));
12
+ notifyWatchers(stateSource);
13
+ }
14
+ function getState(stateSource) {
15
+ return stateSource[STATE_SOURCE]();
16
+ }
17
+ function watchState(stateSource, watcher, config) {
18
+ if (!config?.injector) {
19
+ assertInInjectionContext(watchState);
20
+ }
21
+ const injector = config?.injector ?? inject(Injector);
22
+ const destroyRef = injector.get(DestroyRef);
23
+ addWatcher(stateSource, watcher);
24
+ watcher(getState(stateSource));
25
+ const destroy = () => removeWatcher(stateSource, watcher);
26
+ destroyRef.onDestroy(destroy);
27
+ return { destroy };
28
+ }
29
+ function getWatchers(stateSource) {
30
+ return STATE_WATCHERS.get(stateSource[STATE_SOURCE][SIGNAL]) || [];
31
+ }
32
+ function notifyWatchers(stateSource) {
33
+ const watchers = getWatchers(stateSource);
34
+ for (const watcher of watchers) {
35
+ const state = untracked(() => getState(stateSource));
36
+ watcher(state);
37
+ }
38
+ }
39
+ function addWatcher(stateSource, watcher) {
40
+ const watchers = getWatchers(stateSource);
41
+ STATE_WATCHERS.set(stateSource[STATE_SOURCE][SIGNAL], [
42
+ ...watchers,
43
+ watcher,
44
+ ]);
45
+ }
46
+ function removeWatcher(stateSource, watcher) {
47
+ const watchers = getWatchers(stateSource);
48
+ STATE_WATCHERS.set(stateSource[STATE_SOURCE][SIGNAL], watchers.filter((w) => w !== watcher));
15
49
  }
16
50
 
17
51
  function toDeepSignal(signal) {
@@ -39,28 +73,31 @@ function isRecord(value) {
39
73
  }
40
74
 
41
75
  function signalState(initialState) {
42
- const stateSignal = signal(initialState);
43
- const deepSignal = toDeepSignal(stateSignal.asReadonly());
44
- Object.defineProperty(deepSignal, STATE_SIGNAL, {
45
- value: stateSignal,
76
+ const stateSource = signal(initialState);
77
+ const signalState = toDeepSignal(stateSource.asReadonly());
78
+ Object.defineProperty(signalState, STATE_SOURCE, {
79
+ value: stateSource,
46
80
  });
47
- return deepSignal;
81
+ return signalState;
48
82
  }
49
83
 
50
84
  function signalStore(...args) {
51
85
  const signalStoreArgs = [...args];
52
- const config = 'providedIn' in signalStoreArgs[0]
53
- ? signalStoreArgs.shift()
54
- : {};
86
+ const config = typeof signalStoreArgs[0] === 'function'
87
+ ? {}
88
+ : signalStoreArgs.shift();
55
89
  const features = signalStoreArgs;
56
90
  class SignalStore {
57
91
  constructor() {
58
92
  const innerStore = features.reduce((store, feature) => feature(store), getInitialInnerStore());
59
93
  const { stateSignals, computedSignals, methods, hooks } = innerStore;
60
- const props = { ...stateSignals, ...computedSignals, ...methods };
61
- this[STATE_SIGNAL] = innerStore[STATE_SIGNAL];
62
- for (const key in props) {
63
- this[key] = props[key];
94
+ const storeMembers = { ...stateSignals, ...computedSignals, ...methods };
95
+ this[STATE_SOURCE] =
96
+ config.protectedState === false
97
+ ? innerStore[STATE_SOURCE]
98
+ : innerStore[STATE_SOURCE].asReadonly();
99
+ for (const key in storeMembers) {
100
+ this[key] = storeMembers[key];
64
101
  }
65
102
  const { onInit, onDestroy } = hooks;
66
103
  if (onInit) {
@@ -81,7 +118,7 @@ function signalStore(...args) {
81
118
  }
82
119
  function getInitialInnerStore() {
83
120
  return {
84
- [STATE_SIGNAL]: signal({}),
121
+ [STATE_SOURCE]: signal({}),
85
122
  stateSignals: {},
86
123
  computedSignals: {},
87
124
  methods: {},
@@ -99,13 +136,19 @@ function type() {
99
136
  return undefined;
100
137
  }
101
138
 
102
- function excludeKeys(obj, keys) {
103
- return Object.keys(obj).reduce((acc, key) => {
104
- if (!keys.includes(key)) {
105
- acc[key] = obj[key];
106
- }
107
- return acc;
108
- }, {});
139
+ function assertUniqueStoreMembers(store, newMemberKeys) {
140
+ if (!ngDevMode) {
141
+ return;
142
+ }
143
+ const storeMembers = {
144
+ ...store.stateSignals,
145
+ ...store.computedSignals,
146
+ ...store.methods,
147
+ };
148
+ const overriddenKeys = Object.keys(storeMembers).filter((memberKey) => newMemberKeys.includes(memberKey));
149
+ if (overriddenKeys.length > 0) {
150
+ console.warn('@ngrx/signals: SignalStore members cannot be overridden.', 'Trying to override:', overriddenKeys.join(', '));
151
+ }
109
152
  }
110
153
 
111
154
  function withComputed(signalsFactory) {
@@ -114,28 +157,24 @@ function withComputed(signalsFactory) {
114
157
  ...store.stateSignals,
115
158
  ...store.computedSignals,
116
159
  });
117
- const computedSignalsKeys = Object.keys(computedSignals);
118
- const stateSignals = excludeKeys(store.stateSignals, computedSignalsKeys);
119
- const methods = excludeKeys(store.methods, computedSignalsKeys);
160
+ assertUniqueStoreMembers(store, Object.keys(computedSignals));
120
161
  return {
121
162
  ...store,
122
- stateSignals,
123
163
  computedSignals: { ...store.computedSignals, ...computedSignals },
124
- methods,
125
164
  };
126
165
  };
127
166
  }
128
167
 
129
168
  function withHooks(hooksOrFactory) {
130
169
  return (store) => {
131
- const storeProps = {
132
- [STATE_SIGNAL]: store[STATE_SIGNAL],
170
+ const storeMembers = {
171
+ [STATE_SOURCE]: store[STATE_SOURCE],
133
172
  ...store.stateSignals,
134
173
  ...store.computedSignals,
135
174
  ...store.methods,
136
175
  };
137
176
  const hooks = typeof hooksOrFactory === 'function'
138
- ? hooksOrFactory(storeProps)
177
+ ? hooksOrFactory(storeMembers)
139
178
  : hooksOrFactory;
140
179
  const createHook = (name) => {
141
180
  const hook = hooks[name];
@@ -145,7 +184,7 @@ function withHooks(hooksOrFactory) {
145
184
  if (currentHook) {
146
185
  currentHook();
147
186
  }
148
- hook(storeProps);
187
+ hook(storeMembers);
149
188
  }
150
189
  : currentHook;
151
190
  };
@@ -162,18 +201,14 @@ function withHooks(hooksOrFactory) {
162
201
  function withMethods(methodsFactory) {
163
202
  return (store) => {
164
203
  const methods = methodsFactory({
165
- [STATE_SIGNAL]: store[STATE_SIGNAL],
204
+ [STATE_SOURCE]: store[STATE_SOURCE],
166
205
  ...store.stateSignals,
167
206
  ...store.computedSignals,
168
207
  ...store.methods,
169
208
  });
170
- const methodsKeys = Object.keys(methods);
171
- const stateSignals = excludeKeys(store.stateSignals, methodsKeys);
172
- const computedSignals = excludeKeys(store.computedSignals, methodsKeys);
209
+ assertUniqueStoreMembers(store, Object.keys(methods));
173
210
  return {
174
211
  ...store,
175
- stateSignals,
176
- computedSignals,
177
212
  methods: { ...store.methods, ...methods },
178
213
  };
179
214
  };
@@ -183,21 +218,18 @@ function withState(stateOrFactory) {
183
218
  return (store) => {
184
219
  const state = typeof stateOrFactory === 'function' ? stateOrFactory() : stateOrFactory;
185
220
  const stateKeys = Object.keys(state);
186
- store[STATE_SIGNAL].update((currentState) => ({
221
+ assertUniqueStoreMembers(store, stateKeys);
222
+ store[STATE_SOURCE].update((currentState) => ({
187
223
  ...currentState,
188
224
  ...state,
189
225
  }));
190
226
  const stateSignals = stateKeys.reduce((acc, key) => {
191
- const sliceSignal = computed(() => store[STATE_SIGNAL]()[key]);
227
+ const sliceSignal = computed(() => store[STATE_SOURCE]()[key]);
192
228
  return { ...acc, [key]: toDeepSignal(sliceSignal) };
193
229
  }, {});
194
- const computedSignals = excludeKeys(store.computedSignals, stateKeys);
195
- const methods = excludeKeys(store.methods, stateKeys);
196
230
  return {
197
231
  ...store,
198
232
  stateSignals: { ...store.stateSignals, ...stateSignals },
199
- computedSignals,
200
- methods,
201
233
  };
202
234
  };
203
235
  }
@@ -206,5 +238,5 @@ function withState(stateOrFactory) {
206
238
  * Generated bundle index. Do not edit.
207
239
  */
208
240
 
209
- export { getState, patchState, signalState, signalStore, signalStoreFeature, type, withComputed, withHooks, withMethods, withState };
241
+ export { getState, patchState, signalState, signalStore, signalStoreFeature, type, watchState, withComputed, withHooks, withMethods, withState };
210
242
  //# sourceMappingURL=ngrx-signals.mjs.map