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 <rich.harris@vercel.com>
pull/11162/head
Tan Li Hau 1 year ago committed by GitHub
parent dd9a8a2578
commit d1976c07ff
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -0,0 +1,5 @@
---
"svelte": patch
---
fix: fix string name of reactive map and set iterator

@ -136,14 +136,15 @@ export class ReactiveMap extends Map {
values() {
get(this.#version);
return map(this.#sources.values(), get);
return map(this.#sources.values(), get, 'Map Iterator');
}
entries() {
get(this.#version);
return map(
this.#sources.entries(),
([key, source]) => /** @type {[K, V]} */ ([key, get(source)])
([key, source]) => /** @type {[K, V]} */ ([key, get(source)]),
'Map Iterator'
);
}

@ -132,7 +132,7 @@ export class ReactiveSet extends Set {
keys() {
get(this.#version);
return this.#sources.keys();
return map(this.#sources.keys(), (key) => key, 'Set Iterator');
}
values() {
@ -140,7 +140,7 @@ export class ReactiveSet extends Set {
}
entries() {
return map(this.keys(), (key) => /** @type {[T, T]} */ ([key, key]));
return map(this.keys(), (key) => /** @type {[T, T]} */ ([key, key]), 'Set Iterator');
}
[Symbol.iterator]() {

@ -3,9 +3,10 @@
* @template U
* @param {Iterable<T>} iterable
* @param {(value: T) => U} fn
* @param {string} name
* @returns {IterableIterator<U>}
*/
export function map(iterable, fn) {
export function map(iterable, fn, name) {
return {
[Symbol.iterator]: get_this,
next() {
@ -14,6 +15,10 @@ export function map(iterable, fn) {
}
return { done: true, value: undefined };
},
// @ts-expect-error
get [Symbol.toStringTag]() {
return name;
}
};
}

@ -0,0 +1,10 @@
import { test } from '../../test';
export default test({
html: `
<div>[object Set Iterator] [object Set Iterator] [object Set Iterator]</div>
<div>[object Set Iterator] [object Set Iterator] [object Set Iterator]</div>
<div>[object Map Iterator] [object Map Iterator] [object Map Iterator]</div>
<div>[object Map Iterator] [object Map Iterator] [object Map Iterator]</div>
`
});

@ -0,0 +1,13 @@
<script>
import { Set as ReactiveSet, Map as ReactiveMap } from 'svelte/reactivity';
let map = new Map();
let set = new Set();
let rmap = new ReactiveMap();
let rset = new ReactiveSet();
</script>
<div>{rset.entries()} {rset.keys()} {rset.values()}</div>
<div>{set.entries()} {set.keys()} {set.values()}</div>
<div>{rmap.entries()} {rmap.keys()} {rmap.values()}</div>
<div>{map.entries()} {map.keys()} {map.values()}</div>
Loading…
Cancel
Save