Skip to content

Commit 0a7de87

Browse files
authored
fix: address map reactivity regression (#11882)
1 parent 35f92cf commit 0a7de87

File tree

3 files changed

+38
-3
lines changed

3 files changed

+38
-3
lines changed

.changeset/lovely-zebras-own.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"svelte": patch
3+
---
4+
5+
fix: address map reactivity regression

packages/svelte/src/reactivity/map.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,18 +140,25 @@ export class ReactiveMap extends Map {
140140
super.clear();
141141
}
142142

143+
#read_all() {
144+
get(this.#version);
145+
for (var [, s] of this.#sources) {
146+
get(s);
147+
}
148+
}
149+
143150
keys() {
144151
get(this.#version);
145152
return super.keys();
146153
}
147154

148155
values() {
149-
get(this.#version);
156+
this.#read_all();
150157
return super.values();
151158
}
152159

153160
entries() {
154-
get(this.#version);
161+
this.#read_all();
155162
return super.entries();
156163
}
157164

packages/svelte/src/reactivity/map.test.ts

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,30 @@ test('map.values()', () => {
3636
map.clear();
3737
});
3838

39-
assert.deepEqual(log, [5, true, [1, 2, 3, 4, 5], 4, false, [1, 2, 4, 5], 0, false, []]);
39+
flushSync(() => {
40+
map.set(3, 3);
41+
});
42+
43+
flushSync(() => {
44+
map.set(3, 4);
45+
});
46+
47+
assert.deepEqual(log, [
48+
5,
49+
true,
50+
[1, 2, 3, 4, 5],
51+
4,
52+
false,
53+
[1, 2, 4, 5],
54+
0,
55+
false,
56+
[],
57+
1,
58+
true,
59+
[3],
60+
true,
61+
[4]
62+
]);
4063

4164
cleanup();
4265
});

0 commit comments

Comments
 (0)