@praxisjs/store 2.0.3 → 2.0.5

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.
@@ -1,358 +0,0 @@
1
- import { describe, it, expect, beforeEach, vi } from "vitest";
2
- import { clearPlugins, useStorePlugin } from "../plugin-registry";
3
- import { createStore } from "../create-store";
4
- import { Storable, store, ReactiveStore } from "../decorators";
5
- // Isolate global plugins between tests
6
- beforeEach(() => clearPlugins());
7
- // ── createStore — per-store plugins ──────────────────────────────────────────
8
- describe("createStore — per-store plugins (options.plugins)", () => {
9
- it("onInit receives storeName and store reference", () => {
10
- const ctx = {};
11
- const plugin = {
12
- name: "p",
13
- onInit(context) { ctx.storeName = context.storeName; ctx.store = context.store; },
14
- };
15
- createStore({ count: 0 }, { name: "counter", plugins: [plugin] });
16
- expect(ctx.storeName).toBe("counter");
17
- expect(ctx.store).toBeDefined();
18
- });
19
- it("storeName defaults to 'anonymous' when not provided", () => {
20
- let received = "";
21
- createStore({ count: 0 }, { plugins: [{ name: "p", onInit({ storeName }) { received = storeName; } }] });
22
- expect(received).toBe("anonymous");
23
- });
24
- it("onMutation fires when a signal is set", () => {
25
- const mutations = [];
26
- const s = createStore({ count: 0 }, {
27
- name: "counter",
28
- plugins: [{ name: "p", onMutation(m) { mutations.push(m); } }],
29
- })();
30
- s.count = 5;
31
- expect(mutations).toHaveLength(1);
32
- expect(mutations[0]).toMatchObject({ key: "count", value: 5, prevValue: 0, storeName: "counter" });
33
- });
34
- it("onMutation fires per key when $patch is called", () => {
35
- const keys = [];
36
- const s = createStore({ a: 1, b: 2 }, {
37
- name: "s",
38
- plugins: [{ name: "p", onMutation({ key }) { keys.push(key); } }],
39
- })();
40
- s.$patch({ a: 10, b: 20 });
41
- expect(keys).toContain("a");
42
- expect(keys).toContain("b");
43
- });
44
- it("onMutation does NOT fire for $reset", () => {
45
- const mutations = [];
46
- const s = createStore({ count: 0 }, {
47
- plugins: [{ name: "p", onMutation({ key }) { mutations.push(key); } }],
48
- })();
49
- s.count = 99;
50
- mutations.length = 0;
51
- s.$reset();
52
- expect(mutations).toHaveLength(0);
53
- });
54
- it("onAction fires before the method; onActionDone fires after", () => {
55
- const log = [];
56
- const s = createStore({
57
- count: 0,
58
- increment() { log.push("run"); this.count++; },
59
- }, {
60
- name: "s",
61
- plugins: [{
62
- name: "p",
63
- onAction({ name }) { log.push(`before:${name}`); },
64
- onActionDone({ name, result }) { log.push(`done:${name}:${String(result)}`); },
65
- }],
66
- })();
67
- s.increment();
68
- expect(log).toEqual(["before:increment", "run", "done:increment:undefined"]);
69
- });
70
- it("onActionDone resolves with value for async actions", async () => {
71
- const results = [];
72
- const s = createStore({ async fetch() { return 42; } }, { plugins: [{ name: "p", onActionDone(r) { results.push(r); } }] })();
73
- await s.fetch();
74
- expect(results[0].result).toBe(42);
75
- expect(results[0].error).toBeUndefined();
76
- });
77
- it("onActionDone receives error when async action rejects", async () => {
78
- const results = [];
79
- const boom = new Error("boom");
80
- const s = createStore({ async fail() { throw boom; } }, { plugins: [{ name: "p", onActionDone(r) { results.push(r); } }] })();
81
- await expect(s.fail()).rejects.toThrow("boom");
82
- expect(results[0].error).toBe(boom);
83
- expect(results[0].result).toBeUndefined();
84
- });
85
- it("onInit extend() adds properties to the store", () => {
86
- const s = createStore({ count: 0 }, {
87
- plugins: [{
88
- name: "p",
89
- onInit({ extend }) { extend({ $version: "2.0" }); },
90
- }],
91
- })();
92
- expect(s.$version).toBe("2.0");
93
- });
94
- it("extended functions are bound to the store proxy", () => {
95
- let capturedStore;
96
- const s = createStore({ count: 0 }, {
97
- plugins: [{
98
- name: "p",
99
- onInit({ extend }) {
100
- extend({ $self() { capturedStore = this; } });
101
- },
102
- }],
103
- })();
104
- s.$self();
105
- expect(capturedStore).toBe(s);
106
- });
107
- it("multiple per-store plugins run in order", () => {
108
- const log = [];
109
- const s = createStore({ x: 0 }, {
110
- plugins: [
111
- { name: "a", onMutation() { log.push("a"); } },
112
- { name: "b", onMutation() { log.push("b"); } },
113
- ],
114
- })();
115
- s.x = 1;
116
- expect(log).toEqual(["a", "b"]);
117
- });
118
- it("$subscribe, $reset, $patch, $state are NOT tracked as actions", () => {
119
- const actions = [];
120
- const s = createStore({ count: 0 }, {
121
- plugins: [{ name: "p", onAction({ name }) { actions.push(name); } }],
122
- })();
123
- s.$state();
124
- s.$patch({ count: 1 });
125
- s.$reset();
126
- expect(actions).toHaveLength(0);
127
- });
128
- it("no plugins — store behaves identically to baseline", () => {
129
- const s = createStore({ count: 0, increment() { this.count++; } })();
130
- s.increment();
131
- expect(s.count).toBe(1);
132
- });
133
- });
134
- // ── createStore — global plugins ─────────────────────────────────────────────
135
- describe("createStore — global plugins (useStorePlugin)", () => {
136
- it("global plugin fires for any store created after registration", () => {
137
- const storenames = [];
138
- useStorePlugin({ name: "g", onInit({ storeName }) { storenames.push(storeName); } });
139
- createStore({ x: 0 }, { name: "alpha" });
140
- createStore({ y: 0 }, { name: "beta" });
141
- expect(storenames).toEqual(["alpha", "beta"]);
142
- });
143
- it("global + per-store plugins both fire: global first", () => {
144
- const log = [];
145
- useStorePlugin({ name: "global", onMutation() { log.push("global"); } });
146
- const s = createStore({ x: 0 }, {
147
- plugins: [{ name: "local", onMutation() { log.push("local"); } }],
148
- })();
149
- s.x = 1;
150
- expect(log).toEqual(["global", "local"]);
151
- });
152
- it("plugin registered after createStore does NOT receive events", () => {
153
- const mutations = [];
154
- const s = createStore({ x: 0 }, { name: "s" })();
155
- useStorePlugin({ name: "late", onMutation() { mutations.push(1); } });
156
- s.x = 5;
157
- expect(mutations).toHaveLength(0);
158
- });
159
- });
160
- // ── class-based stores — per-store plugins ────────────────────────────────────
161
- describe("@Storable({ plugins }) — per-store plugins", () => {
162
- it("onInit receives the class name as storeName", () => {
163
- let received = "";
164
- class SessionStore extends ReactiveStore {
165
- token = "";
166
- }
167
- Storable({ plugins: [{ name: "p", onInit({ storeName }) { received = storeName; } }] })(SessionStore, {});
168
- store(SessionStore);
169
- expect(received).toBe("SessionStore");
170
- });
171
- it("onMutation fires when a property is set on the singleton", () => {
172
- const mutations = [];
173
- class FlagsStore extends ReactiveStore {
174
- enabled = false;
175
- }
176
- Storable({ plugins: [{ name: "p", onMutation(m) { mutations.push(m); } }] })(FlagsStore, {});
177
- const s = store(FlagsStore);
178
- s.enabled = true;
179
- const m = mutations.find((x) => x.key === "enabled");
180
- expect(m?.value).toBe(true);
181
- expect(m?.prevValue).toBe(false);
182
- expect(m?.storeName).toBe("FlagsStore");
183
- });
184
- it("onAction and onActionDone fire for store methods", () => {
185
- const log = [];
186
- class CounterStore2 extends ReactiveStore {
187
- count = 0;
188
- increment() { this.count++; }
189
- }
190
- Storable({
191
- plugins: [{
192
- name: "p",
193
- onAction({ name }) { log.push(`before:${name}`); },
194
- onActionDone({ name }) { log.push(`done:${name}`); },
195
- }],
196
- })(CounterStore2, {});
197
- store(CounterStore2).increment();
198
- expect(log).toContain("before:increment");
199
- expect(log).toContain("done:increment");
200
- });
201
- it("onInit extend() — non-function value is returned directly", () => {
202
- class TagStore extends ReactiveStore {
203
- }
204
- Storable({ plugins: [{ name: "p", onInit({ extend }) { extend({ $tag: "ok" }); } }] })(TagStore, {});
205
- expect(store(TagStore).$tag).toBe("ok");
206
- });
207
- it("onInit extend() — function value is bound to the proxy", () => {
208
- let capturedThis;
209
- class SelfStore extends ReactiveStore {
210
- }
211
- Storable({
212
- plugins: [{
213
- name: "p",
214
- onInit({ extend }) {
215
- extend({ $self() { capturedThis = this; } });
216
- },
217
- }],
218
- })(SelfStore, {});
219
- const s = store(SelfStore);
220
- s.$self();
221
- expect(capturedThis).toBe(s);
222
- });
223
- it("onMutation does NOT fire when Reflect.set returns false (non-writable property)", () => {
224
- const mutations = [];
225
- class ReadonlyStore extends ReactiveStore {
226
- get fixed() { return 42; }
227
- }
228
- Storable({ plugins: [{ name: "p", onMutation({ key }) { mutations.push(key); } }] })(ReadonlyStore, {});
229
- const s = store(ReadonlyStore);
230
- // `fixed` has no setter — Reflect.set returns false, onMutation must NOT fire
231
- Reflect.set(s, "fixed", 99);
232
- expect(mutations).not.toContain("fixed");
233
- });
234
- it("$-prefixed methods are NOT tracked as actions", () => {
235
- const actions = [];
236
- class OpStore extends ReactiveStore {
237
- value = 0;
238
- $internal() { this.value = 1; }
239
- }
240
- Storable({ plugins: [{ name: "p", onAction({ name }) { actions.push(name); } }] })(OpStore, {});
241
- store(OpStore).$internal();
242
- expect(actions).not.toContain("$internal");
243
- });
244
- it("onActionDone fires with resolved value for async methods (lines 30-35 in apply-plugins)", async () => {
245
- const results = [];
246
- class AsyncStore extends ReactiveStore {
247
- async fetch() { return 99; }
248
- }
249
- Storable({ plugins: [{ name: "p", onActionDone(r) { results.push(r); } }] })(AsyncStore, {});
250
- await store(AsyncStore).fetch();
251
- expect(results[0].result).toBe(99);
252
- expect(results[0].error).toBeUndefined();
253
- });
254
- it("onActionDone fires with error when async method rejects (lines 36-39 in apply-plugins)", async () => {
255
- const results = [];
256
- const boom = new Error("async-fail");
257
- class FailStore extends ReactiveStore {
258
- async fail() { throw boom; }
259
- }
260
- Storable({ plugins: [{ name: "p", onActionDone(r) { results.push(r); } }] })(FailStore, {});
261
- await expect(store(FailStore).fail()).rejects.toThrow("async-fail");
262
- expect(results[0].error).toBe(boom);
263
- expect(results[0].result).toBeUndefined();
264
- });
265
- it("setting a symbol key on the proxy is a no-op and returns true (lines 53-54 in apply-plugins)", () => {
266
- class SymStore extends ReactiveStore {
267
- value = 0;
268
- }
269
- Storable({ plugins: [{ name: "p", onMutation() { } }] })(SymStore, {});
270
- const s = store(SymStore);
271
- const sym = Symbol("test");
272
- expect(() => {
273
- s[sym] = "ignored";
274
- }).not.toThrow();
275
- expect(s[sym]).toBe("ignored");
276
- });
277
- it("no plugins — class-based store works identically to baseline", () => {
278
- class BareStore extends ReactiveStore {
279
- value = 7;
280
- }
281
- Storable()(BareStore, {});
282
- const s = store(BareStore);
283
- s.value = 42;
284
- expect(s.value).toBe(42);
285
- });
286
- });
287
- // ── class-based stores — global plugins ───────────────────────────────────────
288
- describe("class-based store — global plugins", () => {
289
- it("global plugin fires for class-based stores", () => {
290
- const names = [];
291
- useStorePlugin({ name: "g", onInit({ storeName }) { names.push(storeName); } });
292
- class GlobalTestStore extends ReactiveStore {
293
- }
294
- Storable()(GlobalTestStore, {});
295
- store(GlobalTestStore);
296
- expect(names).toContain("GlobalTestStore");
297
- });
298
- it("global + per-store plugins both fire: global first", () => {
299
- const log = [];
300
- useStorePlugin({ name: "global", onMutation() { log.push("global"); } });
301
- class MixStore extends ReactiveStore {
302
- x = 0;
303
- }
304
- Storable({ plugins: [{ name: "local", onMutation() { log.push("local"); } }] })(MixStore, {});
305
- store(MixStore).x = 1;
306
- expect(log).toEqual(["global", "local"]);
307
- });
308
- });
309
- // ── real-world plugin patterns ────────────────────────────────────────────────
310
- describe("built-in plugin patterns", () => {
311
- it("logger plugin: records mutations and action calls", () => {
312
- const log = [];
313
- const logger = {
314
- name: "logger",
315
- onMutation({ storeName, key, value }) {
316
- log.push(`[${storeName}] ${key} = ${JSON.stringify(value)}`);
317
- },
318
- onAction({ storeName, name }) {
319
- log.push(`[${storeName}] ${name}()`);
320
- },
321
- };
322
- const s = createStore({
323
- count: 0,
324
- increment() { this.count++; },
325
- }, { name: "counter", plugins: [logger] })();
326
- s.increment();
327
- expect(log).toContain("[counter] increment()");
328
- expect(log).toContain('[counter] count = 1');
329
- });
330
- it("persistence plugin: restores state onInit and saves onMutation", () => {
331
- const storage = { count: 99 };
332
- let savedCount;
333
- const persistPlugin = {
334
- name: "persist",
335
- onInit({ store: s, storeName }) {
336
- if (storeName === "counter" && typeof storage.count === "number") {
337
- s.count = storage.count;
338
- }
339
- },
340
- onMutation({ key, value }) {
341
- if (key === "count")
342
- savedCount = value;
343
- },
344
- };
345
- const s = createStore({ count: 0 }, { name: "counter", plugins: [persistPlugin] })();
346
- expect(s.count).toBe(99);
347
- s.count = 55;
348
- expect(savedCount).toBe(55);
349
- });
350
- it("spy plugin: action wrapping does not break return values", () => {
351
- const spy = vi.fn();
352
- const s = createStore({ double(n) { return n * 2; } }, { plugins: [{ name: "spy", onActionDone({ name, result }) { spy(name, result); } }] })();
353
- const result = s.double(5);
354
- expect(result).toBe(10);
355
- expect(spy).toHaveBeenCalledWith("double", 10);
356
- });
357
- });
358
- //# sourceMappingURL=plugins.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugins.test.js","sourceRoot":"","sources":["../../src/__tests__/plugins.test.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import type { StorePlugin } from "./plugin-types.js";
2
- export interface CreateStoreOptions {
3
- name?: string;
4
- plugins?: StorePlugin[];
5
- }
6
- export declare function createStore<T extends Record<string, unknown>>(definition: T & ThisType<T>, options?: CreateStoreOptions): () => T;
7
- //# sourceMappingURL=create-store.d.ts.map
@@ -1 +0,0 @@
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,WA2GjC"}
@@ -1,114 +0,0 @@
1
- import { signal, effect } from "@praxisjs/core/internal";
2
- import { getGlobalPlugins } from "./plugin-registry.js";
3
- export function createStore(definition, options = {}) {
4
- const storeName = options.name ?? "anonymous";
5
- const initialState = {};
6
- const methods = {};
7
- for (const [key, value] of Object.entries(definition)) {
8
- if (typeof value === "function")
9
- methods[key] = value;
10
- else
11
- initialState[key] = value;
12
- }
13
- const signals = {};
14
- for (const [key, value] of Object.entries(initialState)) {
15
- signals[key] = signal(value);
16
- }
17
- const activePlugins = [...getGlobalPlugins(), ...(options.plugins ?? [])];
18
- const extensions = {};
19
- const store = new Proxy({}, {
20
- get(_t, key) {
21
- if (typeof key !== "string")
22
- return undefined;
23
- if (key in extensions) {
24
- const ext = extensions[key];
25
- return typeof ext === "function"
26
- ? ext.bind(store)
27
- : ext;
28
- }
29
- if (key in methods) {
30
- return (...args) => {
31
- for (const p of activePlugins)
32
- p.onAction?.({ name: key, args, storeName });
33
- const result = methods[key].call(store, ...args);
34
- if (result instanceof Promise) {
35
- return result
36
- .then((resolved) => {
37
- for (const p of activePlugins)
38
- p.onActionDone?.({ name: key, args, storeName, result: resolved });
39
- return resolved;
40
- })
41
- .catch((err) => {
42
- for (const p of activePlugins)
43
- p.onActionDone?.({ name: key, args, storeName, result: undefined, error: err });
44
- throw err;
45
- });
46
- }
47
- for (const p of activePlugins)
48
- p.onActionDone?.({ name: key, args, storeName, result });
49
- return result;
50
- };
51
- }
52
- if (key === "$subscribe")
53
- return subscribe;
54
- if (key === "$reset")
55
- return reset;
56
- if (key === "$patch")
57
- return patch;
58
- if (key === "$state")
59
- return getState;
60
- if (key in signals)
61
- return signals[key]();
62
- const desc = Object.getOwnPropertyDescriptor(definition, key);
63
- if (desc?.get)
64
- return desc.get.call(store);
65
- return undefined;
66
- },
67
- set(_t, key, value) {
68
- if (typeof key !== "string")
69
- return true;
70
- if (key in signals) {
71
- const prevValue = signals[key]();
72
- signals[key].set(value);
73
- for (const p of activePlugins)
74
- p.onMutation?.({ key, value, prevValue, storeName });
75
- return true;
76
- }
77
- return false;
78
- },
79
- });
80
- for (const plugin of activePlugins) {
81
- plugin.onInit?.({
82
- store: store,
83
- storeName,
84
- extend(props) {
85
- Object.assign(extensions, props);
86
- },
87
- });
88
- }
89
- function getState() {
90
- const s = {};
91
- for (const k of Object.keys(signals))
92
- s[k] = signals[k]();
93
- return s;
94
- }
95
- function subscribe(fn) {
96
- return effect(() => {
97
- fn(getState());
98
- });
99
- }
100
- function reset() {
101
- for (const [k, v] of Object.entries(initialState))
102
- signals[k].set(v);
103
- }
104
- function patch(partial) {
105
- for (const [k, v] of Object.entries(partial)) {
106
- if (v === undefined)
107
- continue;
108
- if (k in signals)
109
- Reflect.set(store, k, v);
110
- }
111
- }
112
- return () => store;
113
- }
114
- //# sourceMappingURL=create-store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-store.js","sourceRoot":"","sources":["../src/create-store.ts"],"names":[],"mappings":"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"}