@esportsplus/reactivity 0.36.4 → 0.36.6
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/build/system.js +5 -0
- package/package.json +2 -2
- package/pnpm-workspace.yaml +1 -1
- package/src/system.ts +4 -0
- package/test/flush.test.ts +49 -1
package/build/system.js
CHANGED
|
@@ -679,7 +679,12 @@ const read = (node) => {
|
|
|
679
679
|
}
|
|
680
680
|
let height = node.height;
|
|
681
681
|
if (height >= observer.height) {
|
|
682
|
+
let queued = observer.state & STATE_IN_HEAP;
|
|
683
|
+
if (queued)
|
|
684
|
+
deleteFromHeap(observer);
|
|
682
685
|
observer.height = height + 1;
|
|
686
|
+
if (queued)
|
|
687
|
+
insertIntoHeap(observer);
|
|
683
688
|
}
|
|
684
689
|
if (height >= heap_i || node.state & STATE_NOTIFY_MASK) {
|
|
685
690
|
pull(node);
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"@esportsplus/utilities": "^0.28.3"
|
|
5
5
|
},
|
|
6
6
|
"devDependencies": {
|
|
7
|
-
"@esportsplus/typescript": "^0.34.
|
|
7
|
+
"@esportsplus/typescript": "^0.34.3",
|
|
8
8
|
"@types/node": "^26.4.1",
|
|
9
9
|
"vite": "^8.2.2",
|
|
10
10
|
"vitest": "^5.0.0"
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
},
|
|
37
37
|
"type": "module",
|
|
38
38
|
"types": "build/index.d.ts",
|
|
39
|
-
"version": "0.36.
|
|
39
|
+
"version": "0.36.6",
|
|
40
40
|
"scripts": {
|
|
41
41
|
"agent:bench": "vitest bench --run",
|
|
42
42
|
"agent:test": "tsc --noEmit && vitest run",
|
package/pnpm-workspace.yaml
CHANGED
|
@@ -2,7 +2,7 @@ allowBuilds:
|
|
|
2
2
|
esbuild: true
|
|
3
3
|
minimumReleaseAgeExclude:
|
|
4
4
|
- '@esportsplus/utilities@0.28.1 || 0.28.3'
|
|
5
|
-
- '@esportsplus/typescript@0.31.0 || 0.32.0 || 0.33.0 || 0.33.2 || 0.33.4 || 0.34.1'
|
|
5
|
+
- '@esportsplus/typescript@0.31.0 || 0.32.0 || 0.33.0 || 0.33.2 || 0.33.4 || 0.34.1 || 0.34.3'
|
|
6
6
|
- tsc-alias@1.9.4
|
|
7
7
|
- '@vitest/mocker@5.0.0'
|
|
8
8
|
- '@vitest/spy@5.0.0'
|
package/src/system.ts
CHANGED
|
@@ -1006,7 +1006,11 @@ const read = <T>(node: Signal<T> | Computed<T>): T => {
|
|
|
1006
1006
|
let height = (node as Computed<T>).height;
|
|
1007
1007
|
|
|
1008
1008
|
if (height >= observer.height) {
|
|
1009
|
+
let queued = observer.state & STATE_IN_HEAP;
|
|
1010
|
+
|
|
1011
|
+
if (queued) deleteFromHeap(observer);
|
|
1009
1012
|
observer.height = height + 1;
|
|
1013
|
+
if (queued) insertIntoHeap(observer);
|
|
1010
1014
|
}
|
|
1011
1015
|
|
|
1012
1016
|
if (height >= heap_i || (node as Computed<T>).state & STATE_NOTIFY_MASK) {
|
package/test/flush.test.ts
CHANGED
|
@@ -1,8 +1,56 @@
|
|
|
1
1
|
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { batch, computed, effect, flush, read, signal, write } from '~/system';
|
|
2
|
+
import { batch, computed, effect, flush, read, root, signal, write } from '~/system';
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
describe('flush()', () => {
|
|
6
|
+
it('settles a requeued effect that discovers a deeper computed dependency', () => {
|
|
7
|
+
let runs = 0,
|
|
8
|
+
values: number[] = [],
|
|
9
|
+
trigger = signal(false),
|
|
10
|
+
source = signal(1);
|
|
11
|
+
|
|
12
|
+
let dispose = root((dispose) => {
|
|
13
|
+
let deep = computed(() => read(source));
|
|
14
|
+
|
|
15
|
+
for (let i = 0; i < 4; i++) {
|
|
16
|
+
let previous = deep;
|
|
17
|
+
deep = computed(() => read(previous) + 1);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
effect(() => {
|
|
21
|
+
runs++;
|
|
22
|
+
|
|
23
|
+
if (read(trigger)) {
|
|
24
|
+
write(trigger, false);
|
|
25
|
+
values.push(read(deep));
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
return dispose;
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
try {
|
|
33
|
+
write(trigger, true);
|
|
34
|
+
flush();
|
|
35
|
+
|
|
36
|
+
expect(runs).toBe(3);
|
|
37
|
+
expect(values).toEqual([5]);
|
|
38
|
+
|
|
39
|
+
write(trigger, true);
|
|
40
|
+
flush();
|
|
41
|
+
|
|
42
|
+
expect(runs).toBe(5);
|
|
43
|
+
expect(values).toEqual([5, 5]);
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
dispose();
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
write(trigger, true);
|
|
50
|
+
flush();
|
|
51
|
+
expect(runs).toBe(5);
|
|
52
|
+
});
|
|
53
|
+
|
|
6
54
|
it('runs the dependent effect synchronously before returning', () => {
|
|
7
55
|
let runs = 0,
|
|
8
56
|
s = signal(0);
|