@praxisjs/store 2.0.3 → 2.0.4
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/CHANGELOG.md +10 -0
- package/dist/__tests__/create-store.test.js +40 -0
- package/dist/__tests__/create-store.test.js.map +1 -1
- package/dist/create-store.d.ts.map +1 -1
- package/dist/create-store.js +44 -31
- package/dist/create-store.js.map +1 -1
- package/package.json +3 -3
- package/src/__tests__/create-store.test.ts +50 -0
- package/src/create-store.ts +40 -27
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# @praxisjs/store
|
|
2
2
|
|
|
3
|
+
## 2.0.4
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 055d5b3: `createStore` actions keep a stable wrapper identity, `$patch()` and `$reset()` run in a single batch, and the previous value passed to `onMutation` is read untracked.
|
|
8
|
+
- Updated dependencies [a97a37c]
|
|
9
|
+
- Updated dependencies [c7a5950]
|
|
10
|
+
- @praxisjs/core@2.2.0
|
|
11
|
+
- @praxisjs/decorators@1.7.0
|
|
12
|
+
|
|
3
13
|
## 2.0.3
|
|
4
14
|
|
|
5
15
|
### Patch Changes
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { effect } from "@praxisjs/core/internal";
|
|
2
3
|
import { createStore } from "../create-store";
|
|
3
4
|
function makeCounter() {
|
|
4
5
|
return createStore({
|
|
@@ -183,4 +184,43 @@ describe("createStore", () => {
|
|
|
183
184
|
expect(storeB.count).toBe(0); // independent — storeB unaffected
|
|
184
185
|
});
|
|
185
186
|
});
|
|
187
|
+
describe("createStore — grouped updates and stable actions", () => {
|
|
188
|
+
function makeStore() {
|
|
189
|
+
return createStore({ a: 1, b: 2, c: 3, bump() { return; } })();
|
|
190
|
+
}
|
|
191
|
+
function countRuns(read) {
|
|
192
|
+
let runs = 0;
|
|
193
|
+
effect(() => {
|
|
194
|
+
read();
|
|
195
|
+
runs++;
|
|
196
|
+
});
|
|
197
|
+
runs = 0;
|
|
198
|
+
return () => runs;
|
|
199
|
+
}
|
|
200
|
+
it("returns the same wrapper for an action on every read", () => {
|
|
201
|
+
const s = makeStore();
|
|
202
|
+
expect(s.bump).toBe(s.bump);
|
|
203
|
+
});
|
|
204
|
+
it("$patch re-runs dependents once for several keys", () => {
|
|
205
|
+
const s = makeStore();
|
|
206
|
+
const runs = countRuns(() => { void s.a; void s.b; void s.c; });
|
|
207
|
+
s.$patch({ a: 10, b: 20, c: 30 });
|
|
208
|
+
expect(runs()).toBe(1);
|
|
209
|
+
expect([s.a, s.b, s.c]).toEqual([10, 20, 30]);
|
|
210
|
+
});
|
|
211
|
+
it("$reset re-runs dependents once for several keys", () => {
|
|
212
|
+
const s = makeStore();
|
|
213
|
+
s.$patch({ a: 10, b: 20, c: 30 });
|
|
214
|
+
const runs = countRuns(() => { void s.a; void s.b; void s.c; });
|
|
215
|
+
s.$reset();
|
|
216
|
+
expect(runs()).toBe(1);
|
|
217
|
+
expect([s.a, s.b, s.c]).toEqual([1, 2, 3]);
|
|
218
|
+
});
|
|
219
|
+
it("writing a key inside an effect does not subscribe that effect to it", () => {
|
|
220
|
+
const s = makeStore();
|
|
221
|
+
const runs = countRuns(() => { s.a = 5; });
|
|
222
|
+
s.a = 99;
|
|
223
|
+
expect(runs()).toBe(0);
|
|
224
|
+
});
|
|
225
|
+
});
|
|
186
226
|
//# sourceMappingURL=create-store.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-store.test.js","sourceRoot":"","sources":["../../src/__tests__/create-store.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"create-store.test.js","sourceRoot":"","sources":["../../src/__tests__/create-store.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-store.d.ts","sourceRoot":"","sources":["../src/create-store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3D,UAAU,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,EAC3B,OAAO,GAAE,kBAAuB,
|
|
1
|
+
{"version":3,"file":"create-store.d.ts","sourceRoot":"","sources":["../src/create-store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3D,UAAU,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,EAC3B,OAAO,GAAE,kBAAuB,WAwHjC"}
|
package/dist/create-store.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { batch, effect, peek, signal } from "@praxisjs/core/internal";
|
|
2
2
|
import { getGlobalPlugins } from "./plugin-registry.js";
|
|
3
3
|
export function createStore(definition, options = {}) {
|
|
4
4
|
const storeName = options.name ?? "anonymous";
|
|
@@ -16,6 +16,9 @@ export function createStore(definition, options = {}) {
|
|
|
16
16
|
}
|
|
17
17
|
const activePlugins = [...getGlobalPlugins(), ...(options.plugins ?? [])];
|
|
18
18
|
const extensions = {};
|
|
19
|
+
// A stable wrapper per action, so `store.action` is the same function on every read
|
|
20
|
+
// (listener identity, memoised props) and isn't re-allocated on each access.
|
|
21
|
+
const wrappedActions = new Map();
|
|
19
22
|
const store = new Proxy({}, {
|
|
20
23
|
get(_t, key) {
|
|
21
24
|
if (typeof key !== "string")
|
|
@@ -27,27 +30,32 @@ export function createStore(definition, options = {}) {
|
|
|
27
30
|
: ext;
|
|
28
31
|
}
|
|
29
32
|
if (key in methods) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
33
|
+
let wrapped = wrappedActions.get(key);
|
|
34
|
+
if (!wrapped) {
|
|
35
|
+
wrapped = (...args) => {
|
|
36
|
+
for (const p of activePlugins)
|
|
37
|
+
p.onAction?.({ name: key, args, storeName });
|
|
38
|
+
const result = methods[key].call(store, ...args);
|
|
39
|
+
if (result instanceof Promise) {
|
|
40
|
+
return result
|
|
41
|
+
.then((resolved) => {
|
|
42
|
+
for (const p of activePlugins)
|
|
43
|
+
p.onActionDone?.({ name: key, args, storeName, result: resolved });
|
|
44
|
+
return resolved;
|
|
45
|
+
})
|
|
46
|
+
.catch((err) => {
|
|
47
|
+
for (const p of activePlugins)
|
|
48
|
+
p.onActionDone?.({ name: key, args, storeName, result: undefined, error: err });
|
|
49
|
+
throw err;
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
for (const p of activePlugins)
|
|
53
|
+
p.onActionDone?.({ name: key, args, storeName, result });
|
|
54
|
+
return result;
|
|
55
|
+
};
|
|
56
|
+
wrappedActions.set(key, wrapped);
|
|
57
|
+
}
|
|
58
|
+
return wrapped;
|
|
51
59
|
}
|
|
52
60
|
if (key === "$subscribe")
|
|
53
61
|
return subscribe;
|
|
@@ -68,7 +76,7 @@ export function createStore(definition, options = {}) {
|
|
|
68
76
|
if (typeof key !== "string")
|
|
69
77
|
return true;
|
|
70
78
|
if (key in signals) {
|
|
71
|
-
const prevValue = signals[key]
|
|
79
|
+
const prevValue = peek(signals[key]);
|
|
72
80
|
signals[key].set(value);
|
|
73
81
|
for (const p of activePlugins)
|
|
74
82
|
p.onMutation?.({ key, value, prevValue, storeName });
|
|
@@ -97,17 +105,22 @@ export function createStore(definition, options = {}) {
|
|
|
97
105
|
fn(getState());
|
|
98
106
|
});
|
|
99
107
|
}
|
|
108
|
+
// Grouped so dependents re-run once for the whole operation, not once per key.
|
|
100
109
|
function reset() {
|
|
101
|
-
|
|
102
|
-
|
|
110
|
+
batch(() => {
|
|
111
|
+
for (const [k, v] of Object.entries(initialState))
|
|
112
|
+
signals[k].set(v);
|
|
113
|
+
});
|
|
103
114
|
}
|
|
104
115
|
function patch(partial) {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
116
|
+
batch(() => {
|
|
117
|
+
for (const [k, v] of Object.entries(partial)) {
|
|
118
|
+
if (v === undefined)
|
|
119
|
+
continue;
|
|
120
|
+
if (k in signals)
|
|
121
|
+
Reflect.set(store, k, v);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
111
124
|
}
|
|
112
125
|
return () => store;
|
|
113
126
|
}
|
package/dist/create-store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-store.js","sourceRoot":"","sources":["../src/create-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"create-store.js","sourceRoot":"","sources":["../src/create-store.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisjs/store",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
"typescript": "^6.0.3"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@praxisjs/core": "2.
|
|
18
|
-
"@praxisjs/decorators": "1.
|
|
17
|
+
"@praxisjs/core": "2.2.0",
|
|
18
|
+
"@praxisjs/decorators": "1.7.0"
|
|
19
19
|
},
|
|
20
20
|
"scripts": {
|
|
21
21
|
"build": "tsc",
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { describe, it, expect } from "vitest";
|
|
2
2
|
|
|
3
|
+
import { effect } from "@praxisjs/core/internal";
|
|
4
|
+
|
|
3
5
|
import { createStore } from "../create-store";
|
|
4
6
|
|
|
5
7
|
function makeCounter() {
|
|
@@ -230,3 +232,51 @@ describe("createStore", () => {
|
|
|
230
232
|
expect(storeB.count).toBe(0); // independent — storeB unaffected
|
|
231
233
|
});
|
|
232
234
|
});
|
|
235
|
+
|
|
236
|
+
describe("createStore — grouped updates and stable actions", () => {
|
|
237
|
+
function makeStore() {
|
|
238
|
+
return createStore({ a: 1, b: 2, c: 3, bump() { return; } })() as unknown as {
|
|
239
|
+
a: number; b: number; c: number; bump: () => void;
|
|
240
|
+
$patch: (p: Record<string, unknown>) => void; $reset: () => void;
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
function countRuns(read: () => void) {
|
|
245
|
+
let runs = 0;
|
|
246
|
+
effect(() => {
|
|
247
|
+
read();
|
|
248
|
+
runs++;
|
|
249
|
+
});
|
|
250
|
+
runs = 0;
|
|
251
|
+
return () => runs;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
it("returns the same wrapper for an action on every read", () => {
|
|
255
|
+
const s = makeStore();
|
|
256
|
+
expect(s.bump).toBe(s.bump);
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
it("$patch re-runs dependents once for several keys", () => {
|
|
260
|
+
const s = makeStore();
|
|
261
|
+
const runs = countRuns(() => { void s.a; void s.b; void s.c; });
|
|
262
|
+
s.$patch({ a: 10, b: 20, c: 30 });
|
|
263
|
+
expect(runs()).toBe(1);
|
|
264
|
+
expect([s.a, s.b, s.c]).toEqual([10, 20, 30]);
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
it("$reset re-runs dependents once for several keys", () => {
|
|
268
|
+
const s = makeStore();
|
|
269
|
+
s.$patch({ a: 10, b: 20, c: 30 });
|
|
270
|
+
const runs = countRuns(() => { void s.a; void s.b; void s.c; });
|
|
271
|
+
s.$reset();
|
|
272
|
+
expect(runs()).toBe(1);
|
|
273
|
+
expect([s.a, s.b, s.c]).toEqual([1, 2, 3]);
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
it("writing a key inside an effect does not subscribe that effect to it", () => {
|
|
277
|
+
const s = makeStore();
|
|
278
|
+
const runs = countRuns(() => { s.a = 5; });
|
|
279
|
+
s.a = 99;
|
|
280
|
+
expect(runs()).toBe(0);
|
|
281
|
+
});
|
|
282
|
+
});
|
package/src/create-store.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { batch, effect, peek, signal } from "@praxisjs/core/internal";
|
|
2
2
|
|
|
3
3
|
import { getGlobalPlugins } from "./plugin-registry.js";
|
|
4
4
|
|
|
@@ -30,6 +30,9 @@ export function createStore<T extends Record<string, unknown>>(
|
|
|
30
30
|
|
|
31
31
|
const activePlugins = [...getGlobalPlugins(), ...(options.plugins ?? [])];
|
|
32
32
|
const extensions: Record<string, unknown> = {};
|
|
33
|
+
// A stable wrapper per action, so `store.action` is the same function on every read
|
|
34
|
+
// (listener identity, memoised props) and isn't re-allocated on each access.
|
|
35
|
+
const wrappedActions = new Map<string, (...args: unknown[]) => unknown>();
|
|
33
36
|
|
|
34
37
|
const store = new Proxy({} as T, {
|
|
35
38
|
get(_t, key: string | symbol) {
|
|
@@ -41,26 +44,31 @@ export function createStore<T extends Record<string, unknown>>(
|
|
|
41
44
|
: ext;
|
|
42
45
|
}
|
|
43
46
|
if (key in methods) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
47
|
+
let wrapped = wrappedActions.get(key);
|
|
48
|
+
if (!wrapped) {
|
|
49
|
+
wrapped = (...args: unknown[]): unknown => {
|
|
50
|
+
for (const p of activePlugins) p.onAction?.({ name: key, args, storeName });
|
|
51
|
+
const result = methods[key].call(store, ...args);
|
|
52
|
+
if (result instanceof Promise) {
|
|
53
|
+
return result
|
|
54
|
+
.then((resolved: unknown) => {
|
|
55
|
+
for (const p of activePlugins)
|
|
56
|
+
p.onActionDone?.({ name: key, args, storeName, result: resolved });
|
|
57
|
+
return resolved;
|
|
58
|
+
})
|
|
59
|
+
.catch((err: unknown) => {
|
|
60
|
+
for (const p of activePlugins)
|
|
61
|
+
p.onActionDone?.({ name: key, args, storeName, result: undefined, error: err });
|
|
62
|
+
throw err;
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
for (const p of activePlugins)
|
|
66
|
+
p.onActionDone?.({ name: key, args, storeName, result });
|
|
67
|
+
return result;
|
|
68
|
+
};
|
|
69
|
+
wrappedActions.set(key, wrapped);
|
|
70
|
+
}
|
|
71
|
+
return wrapped;
|
|
64
72
|
}
|
|
65
73
|
if (key === "$subscribe") return subscribe;
|
|
66
74
|
if (key === "$reset") return reset;
|
|
@@ -74,7 +82,7 @@ export function createStore<T extends Record<string, unknown>>(
|
|
|
74
82
|
set(_t, key: string | symbol, value: unknown) {
|
|
75
83
|
if (typeof key !== "string") return true;
|
|
76
84
|
if (key in signals) {
|
|
77
|
-
const prevValue = signals[key]
|
|
85
|
+
const prevValue = peek(signals[key]);
|
|
78
86
|
signals[key].set(value);
|
|
79
87
|
for (const p of activePlugins)
|
|
80
88
|
p.onMutation?.({ key, value, prevValue, storeName });
|
|
@@ -106,15 +114,20 @@ export function createStore<T extends Record<string, unknown>>(
|
|
|
106
114
|
});
|
|
107
115
|
}
|
|
108
116
|
|
|
117
|
+
// Grouped so dependents re-run once for the whole operation, not once per key.
|
|
109
118
|
function reset(): void {
|
|
110
|
-
|
|
119
|
+
batch(() => {
|
|
120
|
+
for (const [k, v] of Object.entries(initialState)) signals[k].set(v);
|
|
121
|
+
});
|
|
111
122
|
}
|
|
112
123
|
|
|
113
124
|
function patch(partial: Partial<Record<string, unknown>>): void {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
125
|
+
batch(() => {
|
|
126
|
+
for (const [k, v] of Object.entries(partial)) {
|
|
127
|
+
if (v === undefined) continue;
|
|
128
|
+
if (k in signals) Reflect.set(store as object, k, v);
|
|
129
|
+
}
|
|
130
|
+
});
|
|
118
131
|
}
|
|
119
132
|
|
|
120
133
|
return () => store;
|