context-scoped-state 0.0.8 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -50,10 +50,12 @@ class CounterStore extends Store<{ count: number }> {
50
50
  }
51
51
 
52
52
  increment() {
53
- this.setState({ count: this.getState().count + 1 });
53
+ // Callback-based: receives current state, returns new state
54
+ this.setState(state => ({ count: state.count + 1 }));
54
55
  }
55
56
 
56
57
  decrement() {
58
+ // Direct value: pass the new state directly
57
59
  this.setState({ count: this.getState().count - 1 });
58
60
  }
59
61
  }
@@ -90,6 +92,31 @@ function App() {
90
92
 
91
93
  That's it. One hook export gives you the hook and its `.Context` provider. No extra setup needed.
92
94
 
95
+ ### Partial State Updates with patchState
96
+
97
+ For stores with multiple properties, use `patchState` to update only specific fields:
98
+
99
+ ```tsx
100
+ class UserStore extends Store<{ name: string; age: number; email: string }> {
101
+ protected getInitialState() {
102
+ return { name: '', age: 0, email: '' };
103
+ }
104
+
105
+ updateName(name: string) {
106
+ // Only updates name, preserves age and email
107
+ this.patchState({ name });
108
+ }
109
+
110
+ incrementAge() {
111
+ // Callback-based: receives current state, returns partial update
112
+ this.patchState(state => ({ age: state.age + 1 }));
113
+ }
114
+ }
115
+ ```
116
+
117
+ - `setState` — Replaces the entire state
118
+ - `patchState` — Merges partial updates into existing state
119
+
93
120
  ## Examples
94
121
 
95
122
  ### Independent Nested Stores
package/dist/index.js CHANGED
@@ -1,16 +1,16 @@
1
1
  import { jsx as C } from "react/jsx-runtime";
2
2
  import b, { useSyncExternalStore as H } from "react";
3
- var _ = function(e, r) {
4
- return _ = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(t, n) {
3
+ var m = function(e, r) {
4
+ return m = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(t, n) {
5
5
  t.__proto__ = n;
6
6
  } || function(t, n) {
7
7
  for (var o in n) Object.prototype.hasOwnProperty.call(n, o) && (t[o] = n[o]);
8
- }, _(e, r);
8
+ }, m(e, r);
9
9
  };
10
10
  function p(e, r) {
11
11
  if (typeof r != "function" && r !== null)
12
12
  throw new TypeError("Class extends value " + String(r) + " is not a constructor or null");
13
- _(e, r);
13
+ m(e, r);
14
14
  function t() {
15
15
  this.constructor = e;
16
16
  }
@@ -26,7 +26,7 @@ function w(e) {
26
26
  };
27
27
  throw new TypeError(r ? "Object is not iterable." : "Symbol.iterator is not defined.");
28
28
  }
29
- function E(e, r) {
29
+ function x(e, r) {
30
30
  var t = typeof Symbol == "function" && e[Symbol.iterator];
31
31
  if (!t) return e;
32
32
  var n = t.call(e), o, i = [], s;
@@ -43,7 +43,7 @@ function E(e, r) {
43
43
  }
44
44
  return i;
45
45
  }
46
- function x(e, r, t) {
46
+ function E(e, r, t) {
47
47
  if (t || arguments.length === 2) for (var n = 0, o = r.length, i; n < o; n++)
48
48
  (i || !(n in r)) && (i || (i = Array.prototype.slice.call(r, 0, n)), i[n] = r[n]);
49
49
  return e.concat(i || Array.prototype.slice.call(r));
@@ -57,7 +57,7 @@ function U(e) {
57
57
  }, t = e(r);
58
58
  return t.prototype = Object.create(Error.prototype), t.prototype.constructor = t, t;
59
59
  }
60
- var m = U(function(e) {
60
+ var _ = U(function(e) {
61
61
  return function(t) {
62
62
  e(this), this.message = t ? t.length + ` errors occurred during unsubscription:
63
63
  ` + t.map(function(n, o) {
@@ -104,7 +104,7 @@ var S = (function() {
104
104
  try {
105
105
  j();
106
106
  } catch (a) {
107
- i = a instanceof m ? a.errors : [a];
107
+ i = a instanceof _ ? a.errors : [a];
108
108
  }
109
109
  var P = this._finalizers;
110
110
  if (P) {
@@ -115,7 +115,7 @@ var S = (function() {
115
115
  try {
116
116
  A(V);
117
117
  } catch (a) {
118
- i = i ?? [], a instanceof m ? i = x(x([], E(i)), E(a.errors)) : i.push(a);
118
+ i = i ?? [], a instanceof _ ? i = E(E([], x(i)), x(a.errors)) : i.push(a);
119
119
  }
120
120
  }
121
121
  } catch (a) {
@@ -129,7 +129,7 @@ var S = (function() {
129
129
  }
130
130
  }
131
131
  if (i)
132
- throw new m(i);
132
+ throw new _(i);
133
133
  }
134
134
  }, e.prototype.add = function(r) {
135
135
  var t;
@@ -173,7 +173,7 @@ var $ = {
173
173
  setTimeout: function(e, r) {
174
174
  for (var t = [], n = 2; n < arguments.length; n++)
175
175
  t[n - 2] = arguments[n];
176
- return setTimeout.apply(void 0, x([e, r], E(t)));
176
+ return setTimeout.apply(void 0, E([e, r], x(t)));
177
177
  },
178
178
  clearTimeout: function(e) {
179
179
  return clearTimeout(e);
@@ -497,7 +497,12 @@ class et {
497
497
  }
498
498
  state;
499
499
  setState(r) {
500
- this._stateSubject.next(r);
500
+ const t = typeof r == "function" ? r(this._stateSubject.value) : r;
501
+ this._stateSubject.next(t);
502
+ }
503
+ patchState(r) {
504
+ const t = this._stateSubject.value, n = typeof r == "function" ? r(t) : r;
505
+ this._stateSubject.next({ ...t, ...n });
501
506
  }
502
507
  }
503
508
  function nt(e) {
@@ -5,7 +5,8 @@ declare abstract class Store<T> {
5
5
  getState(): T;
6
6
  state$(): import('rxjs').Observable<T>;
7
7
  state: T;
8
- protected setState(newState: T): void;
8
+ protected setState(newState: T | ((currentState: T) => T)): void;
9
+ protected patchState(partialState: Partial<T> | ((currentState: T) => Partial<T>)): void;
9
10
  }
10
11
  export { Store };
11
12
  //# sourceMappingURL=Store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Store.d.ts","sourceRoot":"","sources":["../../src/lib/Store.ts"],"names":[],"mappings":"AAEA,uBAAe,KAAK,CAAC,CAAC;IACpB,SAAS,CAAC,QAAQ,CAAC,eAAe,IAAI,CAAC;IAEvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;;IAOnD,QAAQ,IAAI,CAAC;IAIb,MAAM;IAIC,KAAK,EAAE,CAAC,CAAC;IAEhB,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI;CAGtC;AAED,OAAO,EAAE,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"Store.d.ts","sourceRoot":"","sources":["../../src/lib/Store.ts"],"names":[],"mappings":"AAEA,uBAAe,KAAK,CAAC,CAAC;IACpB,SAAS,CAAC,QAAQ,CAAC,eAAe,IAAI,CAAC;IAEvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;;IAOnD,QAAQ,IAAI,CAAC;IAIb,MAAM;IAIC,KAAK,EAAE,CAAC,CAAC;IAEhB,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI;IAQhE,SAAS,CAAC,UAAU,CAClB,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,GAC3D,IAAI;CAQR;AAED,OAAO,EAAE,KAAK,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "context-scoped-state",
3
- "version": "0.0.8",
3
+ "version": "0.0.9",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "repository": {