@praxisjs/core 2.2.0 → 2.3.0

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.
Files changed (116) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/component/internals.d.ts +12 -2
  3. package/dist/component/internals.d.ts.map +1 -1
  4. package/dist/component/internals.js +25 -7
  5. package/dist/component/internals.js.map +1 -1
  6. package/dist/internal.d.ts +3 -2
  7. package/dist/internal.d.ts.map +1 -1
  8. package/dist/internal.js +3 -2
  9. package/dist/internal.js.map +1 -1
  10. package/dist/signal/batch.d.ts +1 -3
  11. package/dist/signal/batch.d.ts.map +1 -1
  12. package/dist/signal/batch.js +4 -30
  13. package/dist/signal/batch.js.map +1 -1
  14. package/dist/signal/computed.d.ts.map +1 -1
  15. package/dist/signal/computed.js +13 -66
  16. package/dist/signal/computed.js.map +1 -1
  17. package/dist/signal/effect.d.ts +6 -14
  18. package/dist/signal/effect.d.ts.map +1 -1
  19. package/dist/signal/effect.js +11 -83
  20. package/dist/signal/effect.js.map +1 -1
  21. package/dist/signal/graph.d.ts +111 -0
  22. package/dist/signal/graph.d.ts.map +1 -0
  23. package/dist/signal/graph.js +513 -0
  24. package/dist/signal/graph.js.map +1 -0
  25. package/dist/signal/index.d.ts +1 -0
  26. package/dist/signal/index.d.ts.map +1 -1
  27. package/dist/signal/index.js +1 -0
  28. package/dist/signal/index.js.map +1 -1
  29. package/dist/signal/peek.d.ts.map +1 -1
  30. package/dist/signal/peek.js +2 -9
  31. package/dist/signal/peek.js.map +1 -1
  32. package/dist/signal/selector.d.ts +5 -0
  33. package/dist/signal/selector.d.ts.map +1 -0
  34. package/dist/signal/selector.js +128 -0
  35. package/dist/signal/selector.js.map +1 -0
  36. package/dist/signal/signal.d.ts +0 -5
  37. package/dist/signal/signal.d.ts.map +1 -1
  38. package/dist/signal/signal.js +11 -70
  39. package/dist/signal/signal.js.map +1 -1
  40. package/package.json +13 -4
  41. package/src/component/internals.ts +35 -10
  42. package/src/internal.ts +26 -0
  43. package/src/signal/batch.ts +5 -33
  44. package/src/signal/computed.ts +13 -66
  45. package/src/signal/effect.ts +12 -92
  46. package/src/signal/graph.ts +562 -0
  47. package/src/signal/index.ts +1 -0
  48. package/src/signal/peek.ts +2 -8
  49. package/src/signal/selector.ts +140 -0
  50. package/src/signal/signal.ts +11 -74
  51. package/dist/__tests__/batch.test.d.ts +0 -2
  52. package/dist/__tests__/batch.test.d.ts.map +0 -1
  53. package/dist/__tests__/batch.test.js +0 -124
  54. package/dist/__tests__/batch.test.js.map +0 -1
  55. package/dist/__tests__/component.test.d.ts +0 -2
  56. package/dist/__tests__/component.test.d.ts.map +0 -1
  57. package/dist/__tests__/component.test.js +0 -124
  58. package/dist/__tests__/component.test.js.map +0 -1
  59. package/dist/__tests__/computed.test.d.ts +0 -2
  60. package/dist/__tests__/computed.test.d.ts.map +0 -1
  61. package/dist/__tests__/computed.test.js +0 -289
  62. package/dist/__tests__/computed.test.js.map +0 -1
  63. package/dist/__tests__/effect.test.d.ts +0 -2
  64. package/dist/__tests__/effect.test.d.ts.map +0 -1
  65. package/dist/__tests__/effect.test.js +0 -200
  66. package/dist/__tests__/effect.test.js.map +0 -1
  67. package/dist/__tests__/peek.test.d.ts +0 -2
  68. package/dist/__tests__/peek.test.d.ts.map +0 -1
  69. package/dist/__tests__/peek.test.js +0 -26
  70. package/dist/__tests__/peek.test.js.map +0 -1
  71. package/dist/__tests__/persisted-signal.test.d.ts +0 -2
  72. package/dist/__tests__/persisted-signal.test.d.ts.map +0 -1
  73. package/dist/__tests__/persisted-signal.test.js +0 -252
  74. package/dist/__tests__/persisted-signal.test.js.map +0 -1
  75. package/dist/__tests__/reactive.test.d.ts +0 -2
  76. package/dist/__tests__/reactive.test.d.ts.map +0 -1
  77. package/dist/__tests__/reactive.test.js +0 -299
  78. package/dist/__tests__/reactive.test.js.map +0 -1
  79. package/dist/__tests__/resource-focus.test.d.ts +0 -2
  80. package/dist/__tests__/resource-focus.test.d.ts.map +0 -1
  81. package/dist/__tests__/resource-focus.test.js +0 -50
  82. package/dist/__tests__/resource-focus.test.js.map +0 -1
  83. package/dist/__tests__/resource-server-pass.test.d.ts +0 -2
  84. package/dist/__tests__/resource-server-pass.test.d.ts.map +0 -1
  85. package/dist/__tests__/resource-server-pass.test.js +0 -78
  86. package/dist/__tests__/resource-server-pass.test.js.map +0 -1
  87. package/dist/__tests__/resource.test.d.ts +0 -2
  88. package/dist/__tests__/resource.test.d.ts.map +0 -1
  89. package/dist/__tests__/resource.test.js +0 -336
  90. package/dist/__tests__/resource.test.js.map +0 -1
  91. package/dist/__tests__/signal.test.d.ts +0 -2
  92. package/dist/__tests__/signal.test.d.ts.map +0 -1
  93. package/dist/__tests__/signal.test.js +0 -254
  94. package/dist/__tests__/signal.test.js.map +0 -1
  95. package/dist/__tests__/synced.test.d.ts +0 -2
  96. package/dist/__tests__/synced.test.d.ts.map +0 -1
  97. package/dist/__tests__/synced.test.js +0 -142
  98. package/dist/__tests__/synced.test.js.map +0 -1
  99. package/dist/__tests__/track.test.d.ts +0 -2
  100. package/dist/__tests__/track.test.d.ts.map +0 -1
  101. package/dist/__tests__/track.test.js +0 -54
  102. package/dist/__tests__/track.test.js.map +0 -1
  103. package/src/__tests__/batch.test.ts +0 -138
  104. package/src/__tests__/component.test.ts +0 -165
  105. package/src/__tests__/computed.test.ts +0 -333
  106. package/src/__tests__/effect.test.ts +0 -241
  107. package/src/__tests__/peek.test.ts +0 -31
  108. package/src/__tests__/persisted-signal.test.ts +0 -305
  109. package/src/__tests__/reactive.test.ts +0 -343
  110. package/src/__tests__/resource-focus.test.ts +0 -61
  111. package/src/__tests__/resource-server-pass.test.ts +0 -90
  112. package/src/__tests__/resource.test.ts +0 -421
  113. package/src/__tests__/signal.test.ts +0 -291
  114. package/src/__tests__/synced.test.ts +0 -173
  115. package/src/__tests__/track.test.ts +0 -61
  116. package/tsconfig.json +0 -8
@@ -1,289 +0,0 @@
1
- import { describe, it, expect, vi } from "vitest";
2
- import { computed, writableComputed } from "../signal/computed";
3
- import { effect } from "../signal/effect";
4
- import { signal } from "../signal/signal";
5
- describe("computed", () => {
6
- it("derives value from signal", () => {
7
- const s = signal(4);
8
- const doubled = computed(() => s() * 2);
9
- expect(doubled()).toBe(8);
10
- });
11
- it("updates when source signal changes", () => {
12
- const s = signal(3);
13
- const triple = computed(() => s() * 3);
14
- s.set(5);
15
- expect(triple()).toBe(15);
16
- });
17
- it("is lazy — does not recompute until accessed", () => {
18
- const s = signal(1);
19
- const fn = vi.fn(() => s() + 1);
20
- const c = computed(fn);
21
- expect(fn).not.toHaveBeenCalled();
22
- c();
23
- expect(fn).toHaveBeenCalledOnce();
24
- });
25
- it("caches value between reads when source has not changed", () => {
26
- const s = signal(2);
27
- const fn = vi.fn(() => s() * 10);
28
- const c = computed(fn);
29
- c();
30
- c();
31
- expect(fn).toHaveBeenCalledOnce();
32
- });
33
- it("recomputes after source change", () => {
34
- const s = signal(1);
35
- const fn = vi.fn(() => s() + 100);
36
- const c = computed(fn);
37
- c();
38
- s.set(2);
39
- c();
40
- expect(fn).toHaveBeenCalledTimes(2);
41
- });
42
- it("marks __isComputed = true", () => {
43
- const c = computed(() => 42);
44
- expect(c.__isComputed).toBe(true);
45
- });
46
- it("chained computed values update correctly", () => {
47
- const s = signal(1);
48
- const doubled = computed(() => s() * 2);
49
- const quadrupled = computed(() => doubled() * 2);
50
- expect(quadrupled()).toBe(4);
51
- s.set(3);
52
- expect(quadrupled()).toBe(12);
53
- });
54
- it("coalesces subscriber notifications when multiple dependencies change in the same tick", async () => {
55
- const first = signal("John");
56
- const last = signal("Doe");
57
- const fullName = computed(() => `${first()} ${last()}`);
58
- const calls = [];
59
- fullName.subscribe((v) => calls.push(v));
60
- expect(calls).toEqual(["John Doe"]); // immediate on subscribe
61
- first.set("Jane");
62
- last.set("Smith");
63
- await Promise.resolve();
64
- // Both changes in the same tick → single notification with final value
65
- expect(calls).toEqual(["John Doe", "Jane Smith"]);
66
- });
67
- it("subscribe fires immediately with computed value", () => {
68
- const s = signal(5);
69
- const c = computed(() => s() + 1);
70
- const received = [];
71
- c.subscribe((v) => received.push(v));
72
- expect(received).toEqual([6]);
73
- });
74
- it("subscribe fires when source changes", async () => {
75
- const s = signal(0);
76
- const c = computed(() => s() * 3);
77
- const received = [];
78
- c.subscribe((v) => received.push(v));
79
- s.set(2);
80
- await Promise.resolve();
81
- s.set(4);
82
- await Promise.resolve();
83
- expect(received).toEqual([0, 6, 12]);
84
- });
85
- it("unsubscribe stops receiving updates", () => {
86
- const s = signal(0);
87
- const c = computed(() => s() + 1);
88
- const received = [];
89
- const unsub = c.subscribe((v) => received.push(v));
90
- unsub();
91
- s.set(10);
92
- expect(received).toEqual([1]);
93
- });
94
- it("computeFn that throws propagates the error on read", () => {
95
- const s = signal(true);
96
- const c = computed(() => {
97
- if (s())
98
- throw new Error("compute error");
99
- return 0;
100
- });
101
- expect(() => c()).toThrow("compute error");
102
- });
103
- it("dynamic dependency: switches tracked signal based on condition", () => {
104
- const toggle = signal(true);
105
- const a = signal(10);
106
- const b = signal(20);
107
- const c = computed(() => (toggle() ? a() : b()));
108
- expect(c()).toBe(10);
109
- a.set(11);
110
- expect(c()).toBe(11);
111
- toggle.set(false);
112
- expect(c()).toBe(20);
113
- b.set(21);
114
- expect(c()).toBe(21);
115
- });
116
- it("dynamic dependency: stale branch changes do not dirty the computed", () => {
117
- const toggle = signal(true);
118
- const a = signal(10);
119
- const b = signal(20);
120
- const fn = vi.fn(() => (toggle() ? a() : b()));
121
- const c = computed(fn);
122
- expect(c()).toBe(10);
123
- toggle.set(false);
124
- expect(c()).toBe(20);
125
- expect(fn).toHaveBeenCalledTimes(2);
126
- a.set(11);
127
- expect(c()).toBe(20);
128
- expect(fn).toHaveBeenCalledTimes(2);
129
- b.set(21);
130
- expect(c()).toBe(21);
131
- expect(fn).toHaveBeenCalledTimes(3);
132
- });
133
- it("unsubscribe then re-subscribe works correctly", async () => {
134
- const s = signal(1);
135
- const c = computed(() => s() * 3);
136
- const received = [];
137
- const unsub = c.subscribe((v) => received.push(v));
138
- unsub();
139
- // Re-subscribe
140
- c.subscribe((v) => received.push(v));
141
- s.set(2);
142
- await Promise.resolve();
143
- expect(received).toContain(6);
144
- });
145
- it("dirty remains true after computeFn throws — next read recomputes instead of returning stale cache", () => {
146
- const s = signal(true);
147
- const fn = vi.fn(() => {
148
- if (s())
149
- throw new Error("compute error");
150
- return 42;
151
- });
152
- const c = computed(fn);
153
- // First read — throws, dirty stays true
154
- expect(() => c()).toThrow("compute error");
155
- expect(fn).toHaveBeenCalledTimes(1);
156
- // Second read while still throwing — must recompute, not return stale
157
- expect(() => c()).toThrow("compute error");
158
- expect(fn).toHaveBeenCalledTimes(2);
159
- // Fix the source and read — should now succeed
160
- s.set(false);
161
- expect(c()).toBe(42);
162
- expect(fn).toHaveBeenCalledTimes(3);
163
- });
164
- it("circular dependency between two computed values throws or does not hang", () => {
165
- // This test documents behavior: circular deps must not cause infinite loops
166
- // We use a signal to break potential infinite recursion via dirty flag
167
- const s = signal(0);
168
- let aVal = 0;
169
- let bVal = 0;
170
- const a = computed(() => {
171
- s(); // track signal to make dirty
172
- return bVal + 1;
173
- });
174
- const b = computed(() => {
175
- s(); // track signal to make dirty
176
- return aVal + 1;
177
- });
178
- // Manually reading without cross-dependency reads to avoid true circularity
179
- aVal = a();
180
- bVal = b();
181
- expect(aVal).toBeGreaterThanOrEqual(1);
182
- expect(bVal).toBeGreaterThanOrEqual(1);
183
- });
184
- it("microtask guard: skips notifySubs when leaf subscriber unsubscribes before microtask fires", async () => {
185
- const s = signal(0);
186
- const c = computed(() => s() * 2);
187
- const results = [];
188
- const unsub = c.subscribe((v) => results.push(v));
189
- // results = [0]
190
- s.set(1); // markDirty: queues microtask (scheduled = true)
191
- unsub(); // removes leaf subscriber BEFORE microtask fires → leafHolder.subs = null
192
- await Promise.resolve(); // microtask: if (leafHolder.subs !== null) → FALSE → no notify
193
- expect(results).toEqual([0]); // no update received after unsubscribe
194
- });
195
- it("skips re-scheduling leaf notification when already scheduled (!scheduled false branch)", async () => {
196
- const s = signal(0);
197
- const c = computed(() => s() * 2);
198
- const results = [];
199
- c.subscribe((v) => results.push(v));
200
- // results = [0] after initial subscribe
201
- s.set(1); // markDirty: scheduled = true, microtask queued
202
- c(); // re-computes: dirty = false (scheduled still true)
203
- s.set(2); // markDirty: dirty=false → proceeds, but !scheduled is false → no second microtask
204
- await Promise.resolve(); // microtask runs, subscriber notified with current value
205
- expect(results).toContain(4); // 2 * 2
206
- });
207
- it("double unsubscribe on computed does not crash", () => {
208
- const s = signal(1);
209
- const c = computed(() => s() + 1);
210
- const unsub = c.subscribe(() => { });
211
- expect(() => {
212
- unsub();
213
- unsub();
214
- }).not.toThrow();
215
- });
216
- });
217
- describe("writableComputed", () => {
218
- it("read returns the getter value", () => {
219
- const s = signal(5);
220
- const wc = writableComputed(() => s() * 2, (_v) => { });
221
- expect(wc()).toBe(10);
222
- });
223
- it("set calls the setter", () => {
224
- const s = signal(0);
225
- const wc = writableComputed(() => s(), (v) => { s.set(v); });
226
- wc.set(42);
227
- expect(s()).toBe(42);
228
- expect(wc()).toBe(42);
229
- });
230
- it("update applies the updater and calls the setter", () => {
231
- const s = signal(10);
232
- const wc = writableComputed(() => s(), (v) => { s.set(v); });
233
- wc.update((current) => current + 5);
234
- expect(s()).toBe(15);
235
- expect(wc()).toBe(15);
236
- });
237
- it("marks __isWritableComputed = true", () => {
238
- const wc = writableComputed(() => 1, (_v) => { });
239
- expect(wc.__isWritableComputed).toBe(true);
240
- });
241
- it("inherits __isComputed = true from computed", () => {
242
- const wc = writableComputed(() => 1, (_v) => { });
243
- expect(wc.__isComputed).toBe(true);
244
- });
245
- it("recomputes when underlying signal changes", () => {
246
- const s = signal(3);
247
- const wc = writableComputed(() => s() * 2, (_v) => { });
248
- expect(wc()).toBe(6);
249
- s.set(7);
250
- expect(wc()).toBe(14);
251
- });
252
- });
253
- describe("computed.dispose", () => {
254
- it("does nothing while an effect still depends on it", async () => {
255
- const s = signal(1);
256
- const c = computed(() => s() * 2);
257
- let seen = 0;
258
- effect(() => {
259
- seen = c();
260
- });
261
- c.dispose();
262
- s.set(2);
263
- await Promise.resolve();
264
- expect(seen).toBe(4);
265
- });
266
- it("does nothing while another computed depends on it", () => {
267
- const s = signal(1);
268
- const inner = computed(() => s() * 2);
269
- const outer = computed(() => inner() + 1);
270
- expect(outer()).toBe(3);
271
- inner.dispose();
272
- s.set(2);
273
- expect(outer()).toBe(5);
274
- });
275
- it("recomputes from scratch when read again after disposal", () => {
276
- const getter = vi.fn(() => 42);
277
- const c = computed(getter);
278
- c();
279
- c.dispose();
280
- expect(c()).toBe(42);
281
- expect(getter).toHaveBeenCalledTimes(2);
282
- });
283
- it("is safe on a computed that was never read", () => {
284
- const c = computed(() => 1);
285
- expect(() => { c.dispose(); }).not.toThrow();
286
- expect(c()).toBe(1);
287
- });
288
- });
289
- //# sourceMappingURL=computed.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"computed.test.js","sourceRoot":"","sources":["../../src/__tests__/computed.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=effect.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"effect.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/effect.test.ts"],"names":[],"mappings":""}
@@ -1,200 +0,0 @@
1
- import { describe, it, expect, vi } from "vitest";
2
- import { effect, track, activeEffect, cleanupEffectDeps, recordDependency, } from "../signal/effect";
3
- import { batch } from "../signal/batch";
4
- import { signal } from "../signal/signal";
5
- describe("effect", () => {
6
- it("runs immediately on creation", () => {
7
- const ran = vi.fn();
8
- effect(ran);
9
- expect(ran).toHaveBeenCalledOnce();
10
- });
11
- it("re-runs when a tracked signal changes", () => {
12
- const s = signal(1);
13
- const values = [];
14
- effect(() => {
15
- values.push(s());
16
- });
17
- s.set(2);
18
- s.set(3);
19
- expect(values).toEqual([1, 2, 3]);
20
- });
21
- it("stop() calls the cleanup function", () => {
22
- const cleanupFn = vi.fn();
23
- const stop = effect(() => cleanupFn);
24
- stop();
25
- expect(cleanupFn).toHaveBeenCalledOnce();
26
- });
27
- it("calls cleanup function before re-run", () => {
28
- const s = signal(0);
29
- const order = [];
30
- effect(() => {
31
- const v = s();
32
- order.push(`run:${v}`);
33
- return () => order.push(`cleanup`);
34
- });
35
- s.set(1);
36
- expect(order).toEqual(["run:0", "cleanup", "run:1"]);
37
- });
38
- it("tracks multiple signals", () => {
39
- const a = signal(1);
40
- const b = signal(10);
41
- const sums = [];
42
- effect(() => {
43
- sums.push(a() + b());
44
- });
45
- a.set(2);
46
- b.set(20);
47
- expect(sums).toEqual([11, 12, 22]);
48
- });
49
- it("stop() prevents future re-runs", () => {
50
- const s = signal(0);
51
- const values = [];
52
- const stop = effect(() => {
53
- values.push(s());
54
- });
55
- stop();
56
- s.set(99);
57
- expect(values).toEqual([0]); // only initial run
58
- });
59
- it("drops dependencies that are no longer read", () => {
60
- const useA = signal(true);
61
- const a = signal(1);
62
- const b = signal(10);
63
- const values = [];
64
- effect(() => {
65
- values.push(useA() ? a() : b());
66
- });
67
- useA.set(false);
68
- expect(values).toEqual([1, 10]);
69
- a.set(2);
70
- expect(values).toEqual([1, 10]);
71
- b.set(20);
72
- expect(values).toEqual([1, 10, 20]);
73
- });
74
- it("does not skip other subscribers when one effect changes subscriptions while notifying", () => {
75
- const useOther = signal(false);
76
- const source = signal(0);
77
- const other = signal(100);
78
- const first = vi.fn();
79
- const second = vi.fn();
80
- effect(() => {
81
- first(useOther() ? other() : source());
82
- });
83
- effect(() => {
84
- second(source());
85
- });
86
- useOther.set(true);
87
- first.mockClear();
88
- second.mockClear();
89
- source.set(1);
90
- expect(first).not.toHaveBeenCalled();
91
- expect(second).toHaveBeenCalledWith(1);
92
- });
93
- it("effect with no reactive dependencies runs once only", () => {
94
- const ran = vi.fn();
95
- effect(() => {
96
- ran(); // no signal reads
97
- });
98
- expect(ran).toHaveBeenCalledTimes(1);
99
- // No signal changes possible — just verify it doesn't re-run spontaneously
100
- expect(ran).toHaveBeenCalledTimes(1);
101
- });
102
- it("stop() with no cleanup function does not throw", () => {
103
- const stop = effect(() => { });
104
- expect(() => stop()).not.toThrow();
105
- });
106
- it("cleanup is re-invoked before each re-run", () => {
107
- const s = signal(0);
108
- const cleanupCount = { n: 0 };
109
- effect(() => {
110
- s(); // track
111
- return () => { cleanupCount.n++; };
112
- });
113
- s.set(1);
114
- s.set(2);
115
- // cleanup called once before second run, once before third run
116
- expect(cleanupCount.n).toBe(2);
117
- });
118
- it("stop() called multiple times does not crash or double-clean", () => {
119
- const cleanupFn = vi.fn();
120
- const stop = effect(() => cleanupFn);
121
- expect(() => {
122
- stop();
123
- stop();
124
- stop();
125
- }).not.toThrow();
126
- // cleanup is only called once (on first stop)
127
- expect(cleanupFn).toHaveBeenCalledTimes(1);
128
- });
129
- it("ignores a queued run after the effect was stopped", () => {
130
- const s = signal(0);
131
- const values = [];
132
- const stop = effect(() => {
133
- values.push(s());
134
- });
135
- batch(() => {
136
- s.set(1);
137
- stop();
138
- });
139
- expect(values).toEqual([0]);
140
- });
141
- it("cleanupEffectDeps handles empty, single, and array dependency holders", () => {
142
- const tracked = vi.fn();
143
- const other = vi.fn();
144
- const emptyHolder = { subs: null };
145
- const singleHolder = { subs: tracked };
146
- const arrayHolder = { subs: [tracked, other] };
147
- const unmatchedSingleHolder = { subs: other };
148
- const unmatchedArrayHolder = { subs: [other] };
149
- recordDependency(tracked, emptyHolder);
150
- recordDependency(tracked, singleHolder);
151
- recordDependency(tracked, arrayHolder);
152
- recordDependency(tracked, unmatchedSingleHolder);
153
- recordDependency(tracked, unmatchedArrayHolder);
154
- cleanupEffectDeps(tracked);
155
- expect(emptyHolder.subs).toBeNull();
156
- expect(singleHolder.subs).toBeNull();
157
- expect(arrayHolder.subs).toEqual([other]);
158
- expect(unmatchedSingleHolder.subs).toBe(other);
159
- expect(unmatchedArrayHolder.subs).toEqual([other]);
160
- });
161
- it("cleanupEffectDeps handles Set dependency holders, emptying them to null", () => {
162
- const tracked = vi.fn();
163
- const other = vi.fn();
164
- const sharedHolder = { subs: new Set([tracked, other]) };
165
- const soleHolder = { subs: new Set([tracked]) };
166
- recordDependency(tracked, sharedHolder);
167
- recordDependency(tracked, soleHolder);
168
- cleanupEffectDeps(tracked);
169
- expect([...sharedHolder.subs]).toEqual([other]);
170
- expect(soleHolder.subs).toBeNull();
171
- });
172
- it("exception inside nested track() restores outer activeEffect", () => {
173
- const s = signal(0);
174
- const outer = vi.fn();
175
- let outerEffectRef;
176
- effect(() => {
177
- outer();
178
- s(); // track
179
- outerEffectRef = activeEffect;
180
- });
181
- // Now do a track that throws — outer activeEffect must be restored
182
- try {
183
- track(() => { throw new Error("inner throws"); });
184
- }
185
- catch {
186
- // expected
187
- }
188
- expect(activeEffect).toBeNull();
189
- });
190
- it("activeEffect is null after a track() that throws", () => {
191
- try {
192
- track(() => { throw new Error("boom"); });
193
- }
194
- catch {
195
- // expected
196
- }
197
- expect(activeEffect).toBeNull();
198
- });
199
- });
200
- //# sourceMappingURL=effect.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"effect.test.js","sourceRoot":"","sources":["../../src/__tests__/effect.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=peek.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"peek.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/peek.test.ts"],"names":[],"mappings":""}
@@ -1,26 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { computed } from "../signal/computed";
3
- import { effect } from "../signal/effect";
4
- import { peek } from "../signal/peek";
5
- import { signal } from "../signal/signal";
6
- describe("peek", () => {
7
- it("returns the current value without tracking", () => {
8
- const s = signal(42);
9
- expect(peek(s)).toBe(42);
10
- });
11
- it("does not subscribe the active effect when peeked", () => {
12
- const s = signal(1);
13
- const runs = [];
14
- effect(() => {
15
- runs.push(peek(s)); // peek — should not subscribe
16
- });
17
- s.set(99); // should NOT trigger re-run
18
- expect(runs).toEqual([1]);
19
- });
20
- it("works with computed values", () => {
21
- const s = signal(5);
22
- const c = computed(() => s() * 2);
23
- expect(peek(c)).toBe(10);
24
- });
25
- });
26
- //# sourceMappingURL=peek.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"peek.test.js","sourceRoot":"","sources":["../../src/__tests__/peek.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;IACpB,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,IAAI,GAAa,EAAE,CAAC;QAE1B,MAAM,CAAC,GAAG,EAAE;YACV,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,8BAA8B;QACpD,CAAC,CAAC,CAAC;QAEH,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,4BAA4B;QACvC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=persisted-signal.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"persisted-signal.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/persisted-signal.test.ts"],"names":[],"mappings":""}