easy-signal 5.0.1 → 5.0.3

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
@@ -208,6 +208,57 @@ const count = store(0);
208
208
  const newValue = await afterChange(count);
209
209
  ```
210
210
 
211
+ ### Store Classes
212
+
213
+ `ReadonlyStoreClass<T>` and `StoreClass<T>` are base classes for building your own store-like classes. Use them when
214
+ you want a class that behaves as a store without manually delegating `.state` and `.subscribe()`.
215
+
216
+ ```ts
217
+ import { ReadonlyStoreClass } from 'easy-signal';
218
+
219
+ class Timer extends ReadonlyStoreClass<number> {
220
+ constructor() {
221
+ super(0, set => {
222
+ const id = setInterval(() => set(Date.now()), 1000);
223
+ return () => clearInterval(id);
224
+ });
225
+ }
226
+ }
227
+
228
+ const timer = new Timer();
229
+ timer.subscribe(value => console.log(value)); // reactive
230
+ console.log(timer.state); // current value
231
+ ```
232
+
233
+ `StoreClass<T>` extends `ReadonlyStoreClass<T>` and exposes the `.state` setter publicly:
234
+
235
+ ```ts
236
+ import { StoreClass } from 'easy-signal';
237
+
238
+ class Counter extends StoreClass<number> {
239
+ constructor() {
240
+ super(0);
241
+ }
242
+
243
+ increment() {
244
+ this.state++;
245
+ }
246
+ }
247
+ ```
248
+
249
+ The `ReadonlyStore<T>` and `Store<T>` interfaces remain available for typing. Use `implements` for the type contract
250
+ and `extends` for the base class:
251
+
252
+ ```ts
253
+ import type { ReadonlyStore } from 'easy-signal';
254
+
255
+ function logStore(store: ReadonlyStore<number>) {
256
+ store.subscribe(v => console.log(v));
257
+ }
258
+
259
+ logStore(new Timer()); // works — Timer satisfies ReadonlyStore<number>
260
+ ```
261
+
211
262
  ### `clearAllContext`
212
263
 
213
264
  Reset the global reactive context. Useful for test isolation:
package/dist/store.d.ts CHANGED
@@ -18,15 +18,26 @@ export interface Store<T> extends ReadonlyStore<T> {
18
18
  * Get or set the current value.
19
19
  */
20
20
  state: T;
21
- /**
22
- * Update the value using the provided function and inform subscribers.
23
- */
24
- update(fn: Updater<T>): void;
25
21
  }
26
22
  /**
27
23
  * Clear the global reactive store context. Useful for testing to ensure a clean state between tests.
28
24
  */
29
25
  export declare function clearAllContext(): void;
26
+ export declare class ReadonlyStoreClass<T> {
27
+ #private;
28
+ constructor(initialValue?: T, start?: StartStopNotifier<T>);
29
+ get state(): T;
30
+ protected set state(value: T);
31
+ /**
32
+ * Subscribe to changes with a callback. Returns an unsubscribe function.
33
+ * Pass `false` as the second argument to skip the immediate initial call.
34
+ */
35
+ subscribe: (callback: Subscriber<T>, noInit?: false) => Unsubscriber;
36
+ }
37
+ export declare class StoreClass<T> extends ReadonlyStoreClass<T> {
38
+ get state(): T;
39
+ set state(value: T);
40
+ }
30
41
  /**
31
42
  * Creates a `ReadonlyStore` that allows reading by subscription.
32
43
  */
package/dist/store.js CHANGED
@@ -1,3 +1,15 @@
1
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
+ if (kind === "m") throw new TypeError("Private method is not writable");
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
5
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
6
+ };
7
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
+ };
12
+ var _ReadonlyStoreClass_store;
1
13
  const noop = () => { };
2
14
  const subscribersKey = Symbol();
3
15
  // Ensure 2 versions of the store library can work together
@@ -14,6 +26,28 @@ export function clearAllContext() {
14
26
  root.context = null;
15
27
  root.subscriberQueue = new Map();
16
28
  }
29
+ export class ReadonlyStoreClass {
30
+ constructor(initialValue, start) {
31
+ _ReadonlyStoreClass_store.set(this, void 0);
32
+ __classPrivateFieldSet(this, _ReadonlyStoreClass_store, store(initialValue, start), "f");
33
+ this.subscribe = __classPrivateFieldGet(this, _ReadonlyStoreClass_store, "f").subscribe;
34
+ }
35
+ get state() {
36
+ return __classPrivateFieldGet(this, _ReadonlyStoreClass_store, "f").state;
37
+ }
38
+ set state(value) {
39
+ __classPrivateFieldGet(this, _ReadonlyStoreClass_store, "f").state = value;
40
+ }
41
+ }
42
+ _ReadonlyStoreClass_store = new WeakMap();
43
+ export class StoreClass extends ReadonlyStoreClass {
44
+ get state() {
45
+ return super.state;
46
+ }
47
+ set state(value) {
48
+ super.state = value;
49
+ }
50
+ }
17
51
  /**
18
52
  * Creates a `ReadonlyStore` that allows reading by subscription.
19
53
  */
@@ -104,7 +138,6 @@ export function store(value, start = noop) {
104
138
  set state(newValue) {
105
139
  set(newValue);
106
140
  },
107
- update,
108
141
  subscribe,
109
142
  };
110
143
  }
package/dist/store.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "easy-signal",
3
- "version": "5.0.1",
3
+ "version": "5.0.3",
4
4
  "description": "Two types of signals: event signals for subscribing to and emitting events, and reactive store signals for tracking and reacting to state changes.",
5
5
  "main": "dist/index.js",
6
+ "type": "module",
6
7
  "types": "dist/index.d.ts",
7
8
  "exports": {
8
9
  ".": {
package/src/store.ts CHANGED
@@ -22,11 +22,6 @@ export interface Store<T> extends ReadonlyStore<T> {
22
22
  * Get or set the current value.
23
23
  */
24
24
  state: T;
25
-
26
- /**
27
- * Update the value using the provided function and inform subscribers.
28
- */
29
- update(fn: Updater<T>): void;
30
25
  }
31
26
 
32
27
  type Context = {
@@ -60,6 +55,40 @@ export function clearAllContext() {
60
55
  root.subscriberQueue = new Map();
61
56
  }
62
57
 
58
+ export class ReadonlyStoreClass<T> {
59
+ #store: Store<T>;
60
+
61
+ constructor(initialValue?: T, start?: StartStopNotifier<T>) {
62
+ this.#store = store(initialValue, start);
63
+ this.subscribe = this.#store.subscribe;
64
+ }
65
+
66
+ get state(): T {
67
+ return this.#store.state;
68
+ }
69
+
70
+ protected set state(value: T) {
71
+ this.#store.state = value;
72
+ }
73
+
74
+ /**
75
+ * Subscribe to changes with a callback. Returns an unsubscribe function.
76
+ * Pass `false` as the second argument to skip the immediate initial call.
77
+ */
78
+ subscribe: (callback: Subscriber<T>, noInit?: false) => Unsubscriber;
79
+ }
80
+
81
+ export class StoreClass<T> extends ReadonlyStoreClass<T> {
82
+
83
+ get state(): T {
84
+ return super.state;
85
+ }
86
+
87
+ set state(value: T) {
88
+ super.state = value;
89
+ }
90
+ }
91
+
63
92
  /**
64
93
  * Creates a `ReadonlyStore` that allows reading by subscription.
65
94
  */
@@ -162,7 +191,6 @@ export function store<T>(value: T, start: StartStopNotifier<T> = noop): Store<T>
162
191
  set state(newValue: T) {
163
192
  set(newValue);
164
193
  },
165
- update,
166
194
  subscribe,
167
195
  };
168
196
  }
package/tsconfig.json CHANGED
@@ -2,7 +2,8 @@
2
2
  "compilerOptions": {
3
3
  "target": "es2021",
4
4
  "declaration": true,
5
- "moduleResolution": "node",
5
+ "module": "ES2022",
6
+ "moduleResolution": "bundler",
6
7
  "sourceMap": true,
7
8
  "esModuleInterop": true,
8
9
  "allowSyntheticDefaultImports": true,