Skip to content

Commit a7eaeb5

Browse files
committed
fix deletions
1 parent 3bf2a31 commit a7eaeb5

File tree

1 file changed

+26
-23
lines changed
  • packages/svelte/src/reactivity

1 file changed

+26
-23
lines changed

packages/svelte/src/reactivity/set.js

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -79,56 +79,59 @@ export class ReactiveSet extends Set {
7979
set(this.#version, this.#version.v + 1);
8080
}
8181

82-
/**
83-
* @param {T} value
84-
*/
82+
/** @param {T} value */
8583
has(value) {
8684
let possible_source = this.#sources.get(value);
85+
8786
if (possible_source === undefined) {
8887
get(this.#version);
8988
return false;
9089
}
90+
9191
return get(possible_source);
9292
}
9393

94-
/**
95-
* @param {T} value
96-
*/
94+
/** @param {T} value */
9795
add(value) {
9896
const sources = this.#sources;
99-
let possible_source = sources.get(value);
100-
if (possible_source === undefined) {
101-
possible_source = source(true);
102-
sources.set(value, possible_source);
103-
this.#increment_version();
104-
super.add(value);
97+
98+
if (!sources.has(value)) {
99+
sources.set(value, source(true));
105100
set(this.#size, sources.size);
101+
this.#increment_version();
106102
}
107-
return this;
103+
104+
return super.add(value);
108105
}
109106

110-
/**
111-
* @param {T} value
112-
*/
107+
/** @param {T} value */
113108
delete(value) {
114109
const sources = this.#sources;
115-
let possible_source = sources.get(value);
116-
if (possible_source !== undefined) {
110+
111+
let source = sources.get(value);
112+
if (source !== undefined) {
117113
sources.delete(value);
118-
this.#increment_version();
119114
set(this.#size, sources.size);
115+
set(source, false);
116+
this.#increment_version();
120117
}
118+
121119
return super.delete(value);
122120
}
123121

124122
clear() {
125123
const sources = this.#sources;
126-
super.clear();
127-
sources.clear();
128-
if (this.#size.v !== sources.size) {
129-
this.#increment_version();
124+
125+
if (sources.size !== 0) {
130126
set(this.#size, 0);
127+
for (const source of sources.values()) {
128+
set(source, false);
129+
}
130+
this.#increment_version();
131131
}
132+
133+
sources.clear();
134+
super.clear();
132135
}
133136

134137
keys() {

0 commit comments

Comments
 (0)