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 +51 -0
- package/dist/store.d.ts +15 -4
- package/dist/store.js +34 -1
- package/dist/store.js.map +1 -1
- package/package.json +2 -1
- package/src/store.ts +34 -6
- package/tsconfig.json +2 -1
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":"
|
|
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.
|
|
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