Skip to content

Commit 64ee32c

Browse files
authored
Revert "fix: lazily create sources for Set (#11946)" (#11966)
This reverts commit 48fa658.
1 parent 388f210 commit 64ee32c

File tree

4 files changed

+54
-54
lines changed

4 files changed

+54
-54
lines changed

.changeset/thin-spoons-float.md

Lines changed: 0 additions & 5 deletions
This file was deleted.

packages/svelte/src/reactivity/set.js

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ export class ReactiveSet extends Set {
4747
for (const method of read_methods) {
4848
// @ts-ignore
4949
proto[method] = function (...v) {
50-
this.#read_all();
5150
get(this.#version);
5251
// @ts-ignore
5352
return set_proto[method].apply(this, v);
@@ -87,30 +86,14 @@ export class ReactiveSet extends Set {
8786
return super.has(value);
8887
}
8988

90-
#read_all() {
91-
var sources = this.#sources;
92-
93-
if (sources.size !== super.size) {
94-
for (let value of super.values()) {
95-
var s = sources.get(value);
96-
97-
if (s === undefined) {
98-
s = source(true);
99-
sources.set(value, s);
100-
}
101-
102-
get(s);
103-
}
104-
}
105-
}
106-
10789
/** @param {T} value */
10890
add(value) {
10991
var sources = this.#sources;
11092
var res = super.add(value);
11193
var s = sources.get(value);
11294

11395
if (s === undefined) {
96+
sources.set(value, source(true));
11497
set(this.#size, super.size);
11598
increment(this.#version);
11699
} else {
@@ -151,19 +134,16 @@ export class ReactiveSet extends Set {
151134
}
152135

153136
keys() {
154-
this.#read_all();
155137
get(this.#version);
156138
return super.keys();
157139
}
158140

159141
values() {
160-
this.#read_all();
161142
get(this.#version);
162143
return super.values();
163144
}
164145

165146
entries() {
166-
this.#read_all();
167147
get(this.#version);
168148
return super.entries();
169149
}
Lines changed: 38 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,50 @@
11
import { flushSync } from '../../../../src/index-client';
2-
import { ok, test } from '../../test';
2+
import { test } from '../../test';
33

44
export default test({
5-
html: `<button>delete initial</button><button>add</button><button>delete</button><button>clear</button><div id="output"><p>1</p><div>0</div></div>`,
5+
html: `<button>add</button><button>delete</button><button>clear</button>`,
66

77
test({ assert, target }) {
8-
const [btn, btn2, btn3, btn4] = target.querySelectorAll('button');
9-
const output = target.querySelector('#output');
10-
ok(output);
8+
const [btn, btn2, btn3] = target.querySelectorAll('button');
119

12-
flushSync(() => btn?.click());
13-
assert.htmlEqual(output.innerHTML, `<p>0</p>`);
10+
flushSync(() => {
11+
btn?.click();
12+
});
1413

15-
flushSync(() => btn2?.click());
16-
assert.htmlEqual(output.innerHTML, `<p>1</p><div>1</div>`);
14+
assert.htmlEqual(
15+
target.innerHTML,
16+
`<button>add</button><button>delete</button><button>clear</button><div>1</div>`
17+
);
1718

18-
flushSync(() => btn2?.click());
19-
flushSync(() => btn2?.click());
20-
assert.htmlEqual(output.innerHTML, `<p>3</p><div>1</div><div>2</div><div>3</div>`);
19+
flushSync(() => {
20+
btn?.click();
21+
});
2122

22-
flushSync(() => btn3?.click());
23-
assert.htmlEqual(output.innerHTML, `<p>2</p><div>1</div><div>2</div>`);
23+
flushSync(() => {
24+
btn?.click();
25+
});
2426

25-
flushSync(() => btn4?.click());
26-
assert.htmlEqual(output.innerHTML, `<p>0</p>`);
27+
assert.htmlEqual(
28+
target.innerHTML,
29+
`<button>add</button><button>delete</button><button>clear</button><div>1</div><div>2</div><div>3</div>`
30+
);
31+
32+
flushSync(() => {
33+
btn2?.click();
34+
});
35+
36+
assert.htmlEqual(
37+
target.innerHTML,
38+
`<button>add</button><button>delete</button><button>clear</button><div>1</div><div>2</div>`
39+
);
40+
41+
flushSync(() => {
42+
btn3?.click();
43+
});
44+
45+
assert.htmlEqual(
46+
target.innerHTML,
47+
`<button>add</button><button>delete</button><button>clear</button>`
48+
);
2749
}
2850
});
Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,21 @@
11
<script>
2-
import { Set } from 'svelte/reactivity';
2+
import {Set} from 'svelte/reactivity';
33
4-
let state = new Set([0]);
4+
let state = new Set();
55
</script>
66

7-
<button onclick={() => state.delete(0)}>delete initial</button>
8-
<button onclick={() => state.add(state.size + 1)}>add</button>
9-
<button onclick={() => state.delete(state.size)}>delete</button>
10-
<button onclick={() => state.clear()}>clear</button>
7+
<button onclick={() => {
8+
state.add(state.size + 1);
9+
}}>add</button>
1110

12-
<div id="output">
13-
<p>{state.size}</p>
11+
<button onclick={() => {
12+
state.delete(state.size);
13+
}}>delete</button>
1414

15-
{#each state as item}
16-
<div>{item}</div>
17-
{/each}
18-
</div>
15+
<button onclick={() => {
16+
state.clear();
17+
}}>clear</button>
18+
19+
{#each state as item}
20+
<div>{item}</div>
21+
{/each}

0 commit comments

Comments
 (0)