Skip to content

Commit d1976c0

Browse files
fix: fix string name of reactive map and set iterator (#11169)
* fix: fix string name of reactive map and set iterator * remove solo: true * lint --------- Co-authored-by: Rich Harris <[email protected]>
1 parent dd9a8a2 commit d1976c0

File tree

6 files changed

+39
-5
lines changed

6 files changed

+39
-5
lines changed

.changeset/shy-fishes-drive.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: fix string name of reactive map and set iterator

packages/svelte/src/reactivity/map.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,14 +136,15 @@ export class ReactiveMap extends Map {
136136

137137
values() {
138138
get(this.#version);
139-
return map(this.#sources.values(), get);
139+
return map(this.#sources.values(), get, 'Map Iterator');
140140
}
141141

142142
entries() {
143143
get(this.#version);
144144
return map(
145145
this.#sources.entries(),
146-
([key, source]) => /** @type {[K, V]} */ ([key, get(source)])
146+
([key, source]) => /** @type {[K, V]} */ ([key, get(source)]),
147+
'Map Iterator'
147148
);
148149
}
149150

packages/svelte/src/reactivity/set.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,15 +132,15 @@ export class ReactiveSet extends Set {
132132

133133
keys() {
134134
get(this.#version);
135-
return this.#sources.keys();
135+
return map(this.#sources.keys(), (key) => key, 'Set Iterator');
136136
}
137137

138138
values() {
139139
return this.keys();
140140
}
141141

142142
entries() {
143-
return map(this.keys(), (key) => /** @type {[T, T]} */ ([key, key]));
143+
return map(this.keys(), (key) => /** @type {[T, T]} */ ([key, key]), 'Set Iterator');
144144
}
145145

146146
[Symbol.iterator]() {

packages/svelte/src/reactivity/utils.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@
33
* @template U
44
* @param {Iterable<T>} iterable
55
* @param {(value: T) => U} fn
6+
* @param {string} name
67
* @returns {IterableIterator<U>}
78
*/
8-
export function map(iterable, fn) {
9+
export function map(iterable, fn, name) {
910
return {
1011
[Symbol.iterator]: get_this,
1112
next() {
@@ -14,6 +15,10 @@ export function map(iterable, fn) {
1415
}
1516

1617
return { done: true, value: undefined };
18+
},
19+
// @ts-expect-error
20+
get [Symbol.toStringTag]() {
21+
return name;
1722
}
1823
};
1924
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { test } from '../../test';
2+
3+
export default test({
4+
html: `
5+
<div>[object Set Iterator] [object Set Iterator] [object Set Iterator]</div>
6+
<div>[object Set Iterator] [object Set Iterator] [object Set Iterator]</div>
7+
<div>[object Map Iterator] [object Map Iterator] [object Map Iterator]</div>
8+
<div>[object Map Iterator] [object Map Iterator] [object Map Iterator]</div>
9+
`
10+
});
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<script>
2+
import { Set as ReactiveSet, Map as ReactiveMap } from 'svelte/reactivity';
3+
4+
let map = new Map();
5+
let set = new Set();
6+
let rmap = new ReactiveMap();
7+
let rset = new ReactiveSet();
8+
</script>
9+
10+
<div>{rset.entries()} {rset.keys()} {rset.values()}</div>
11+
<div>{set.entries()} {set.keys()} {set.values()}</div>
12+
<div>{rmap.entries()} {rmap.keys()} {rmap.values()}</div>
13+
<div>{map.entries()} {map.keys()} {map.values()}</div>

0 commit comments

Comments
 (0)