Skip to content

Commit 7405041

Browse files
committed
fix: get rid of data duplication in reactive set
1 parent c42f193 commit 7405041

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed

packages/svelte/src/reactivity/set.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ export class ReactiveSet extends Set {
3131

3232
for (var element of value) {
3333
sources.set(element, source(true));
34-
super.add(element);
3534
}
3635

3736
this.#size.v = sources.size;
@@ -97,7 +96,7 @@ export class ReactiveSet extends Set {
9796
this.#increment_version();
9897
}
9998

100-
return super.add(value);
99+
return this;
101100
}
102101

103102
/** @param {T} value */
@@ -106,13 +105,14 @@ export class ReactiveSet extends Set {
106105
var s = sources.get(value);
107106

108107
if (s !== undefined) {
109-
sources.delete(value);
108+
var removed = sources.delete(value);
110109
set(this.#size, sources.size);
111110
set(s, false);
112111
this.#increment_version();
112+
return removed;
113113
}
114114

115-
return super.delete(value);
115+
return false;
116116
}
117117

118118
clear() {
@@ -127,7 +127,6 @@ export class ReactiveSet extends Set {
127127
}
128128

129129
sources.clear();
130-
super.clear();
131130
}
132131

133132
keys() {

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,3 +77,12 @@ test('set.has(...)', () => {
7777

7878
cleanup();
7979
});
80+
81+
test('set.delete(...)', () => {
82+
const set = new ReactiveSet([1, 2, 3]);
83+
84+
assert.equal(set.delete(3), true);
85+
assert.equal(set.delete(3), false);
86+
87+
assert.deepEqual(Array.from(set.values()), [1, 2]);
88+
});

0 commit comments

Comments
 (0)