fix: fix string name of reactive map and set iterator

pull/11169/head
tanhauhau 2 years ago
parent f90639d89c
commit f7bc647aa3

@ -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,9 @@ export function map(iterable, fn) {
}
return { done: true, value: undefined };
},
get [Symbol.toStringTag]() {
return name;
}
};
}

@ -0,0 +1,12 @@
import { flushSync } from '../../../../src/index-client';
import { test } from '../../test';
export default test({
solo: true,
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