Skip to content

Commit ac921d8

Browse files
committed
address feedback
1 parent d1b974c commit ac921d8

File tree

4 files changed

+34
-38
lines changed

4 files changed

+34
-38
lines changed

packages/svelte/src/reactivity/map.js

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,10 @@ export class ReactiveMap extends Map {
2424
if (DEV) new Map(value);
2525

2626
if (value) {
27-
var sources = this.#sources;
28-
2927
for (var [key, v] of value) {
30-
sources.set(key, source(Symbol()));
3128
super.set(key, v);
3229
}
33-
34-
this.#size.v = sources.size;
30+
this.#size.v = super.size;
3531
}
3632
}
3733

@@ -45,9 +41,9 @@ export class ReactiveMap extends Map {
4541
var s = sources.get(key);
4642

4743
if (s === undefined) {
48-
// If we're working with a non-primitive then we can generate a signal for it
49-
if (typeof key !== 'object' || key === null) {
50-
s = source(UNINITIALIZED);
44+
var ret = super.get(key);
45+
if (ret !== undefined) {
46+
s = source(Symbol());
5147
sources.set(key, s);
5248
} else {
5349
// We should always track the version in case
@@ -58,7 +54,7 @@ export class ReactiveMap extends Map {
5854
}
5955

6056
get(s);
61-
return super.has(key);
57+
return true;
6258
}
6359

6460
/**
@@ -73,14 +69,18 @@ export class ReactiveMap extends Map {
7369

7470
/** @param {K} key */
7571
get(key) {
76-
var s = this.#sources.get(key);
72+
var sources = this.#sources;
73+
var s = sources.get(key);
7774

7875
if (s === undefined) {
79-
// Re-use the has code-path to init the signal if needed and also
80-
// register to the version if needed.
81-
this.has(key);
82-
s = this.#sources.get(key);
83-
if (s === undefined) {
76+
var ret = super.get(key);
77+
if (ret !== undefined) {
78+
s = source(Symbol());
79+
sources.set(key, s);
80+
} else {
81+
// We should always track the version in case
82+
// the Set ever gets this value in the future.
83+
get(this.#version);
8484
return undefined;
8585
}
8686
}
@@ -117,10 +117,7 @@ export class ReactiveMap extends Map {
117117
var res = super.delete(key);
118118

119119
if (s !== undefined) {
120-
// Remove non-primitive keys
121-
if (typeof key === 'object' && key !== null) {
122-
sources.delete(key);
123-
}
120+
sources.delete(key);
124121
set(this.#size, super.size);
125122
set(s, UNINITIALIZED);
126123
this.#increment_version();
@@ -132,15 +129,14 @@ export class ReactiveMap extends Map {
132129
clear() {
133130
var sources = this.#sources;
134131

135-
if (sources.size !== 0) {
132+
if (super.size !== 0) {
136133
set(this.#size, 0);
137134
for (var s of sources.values()) {
138135
set(s, UNINITIALIZED);
139136
}
140137
this.#increment_version();
138+
sources.clear();
141139
}
142-
143-
sources.clear();
144140
super.clear();
145141
}
146142

@@ -164,6 +160,7 @@ export class ReactiveMap extends Map {
164160
}
165161

166162
get size() {
167-
return get(this.#size);
163+
get(this.#size);
164+
return super.size;
168165
}
169166
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ 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, []]);
39+
assert.deepEqual(log, [5, true, [1, 2, 3, 4, 5], 4, false, [1, 2, 4, 5], 0, false, []]);
4040

4141
cleanup();
4242
});
@@ -207,7 +207,7 @@ test('not invoking reactivity when value is not in the map after changes', () =>
207207
});
208208
});
209209

210-
assert.deepEqual(log, [1, undefined, undefined, 1]);
210+
assert.deepEqual(log, [1, undefined, undefined, undefined, 1, undefined]);
211211

212212
cleanup();
213213
});

packages/svelte/src/reactivity/set.js

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,10 @@ export class ReactiveSet extends Set {
2727
if (DEV) new Set(value);
2828

2929
if (value) {
30-
var sources = this.#sources;
31-
3230
for (var element of value) {
33-
sources.set(element, source(true));
3431
super.add(element);
3532
}
36-
37-
this.#size.v = sources.size;
33+
this.#size.v = super.size;
3834
}
3935

4036
if (!inited) this.#init();
@@ -77,9 +73,9 @@ export class ReactiveSet extends Set {
7773
var s = sources.get(value);
7874

7975
if (s === undefined) {
80-
// If we're working with a non-primitive then we can generate a signal for it
81-
if (typeof value !== 'object' || value === null) {
82-
s = source(false);
76+
var ret = super.has(value);
77+
if (ret) {
78+
s = source(true);
8379
sources.set(value, s);
8480
} else {
8581
// We should always track the version in case
@@ -129,15 +125,14 @@ export class ReactiveSet extends Set {
129125
clear() {
130126
var sources = this.#sources;
131127

132-
if (sources.size !== 0) {
128+
if (super.size !== 0) {
133129
set(this.#size, 0);
134130
for (var s of sources.values()) {
135131
set(s, false);
136132
}
137133
this.#increment_version();
134+
sources.clear();
138135
}
139-
140-
sources.clear();
141136
super.clear();
142137
}
143138

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ test('set.values()', () => {
3030
set.clear();
3131
});
3232

33-
assert.deepEqual(log, [5, true, [1, 2, 3, 4, 5], 4, false, [1, 2, 4, 5], 0, []]);
33+
assert.deepEqual(log, [5, true, [1, 2, 3, 4, 5], 4, false, [1, 2, 4, 5], 0, false, []]);
3434

3535
cleanup();
3636
});
@@ -143,8 +143,12 @@ test('not invoking reactivity when value is not in the set after changes', () =>
143143
false,
144144
'has 2',
145145
false,
146+
'has 3',
147+
false,
146148
'has 2',
147-
true
149+
true,
150+
'has 3',
151+
false
148152
]);
149153

150154
cleanup();

0 commit comments

Comments
 (0)