Closed
Description
(Not sure if this is a feature request or a bug...)
Is your feature request related to a problem? Please describe.
I've implemented a custom store that's essentially:
function createMapStore(initial) {
const backingStore = writable(initial);
const { subscribe, update } = backingStore;
const set = (key, value) => update(m => Object.assign({}, m, {[key]: value}));
return {
subscribe,
set,
remove: (key) => set(key, undefined),
keys: derived(backingStore, bs => Object.keys(bs)),
values: derived(backingStore, bs => Object.values(bs)),
entries: derived(backingStore, bs => Object.entries(bs)),
}
}
In theory this would allow me to do things like
{#each $store.values as value}
However, this doesn't appear to work. I get the following error:
bundle.js:1505 Uncaught TypeError: Cannot read property 'length' of undefined
at create_fragment$4 (bundle.js:1505)
at init (bundle.js:390)
at new Home (bundle.js:1577)
at Array.create_default_slot_3 (bundle.js:2548)
at create_slot (bundle.js:48)
at create_if_block (bundle.js:1080)
at create_fragment$3 (bundle.js:1128)
at init (bundle.js:390)
at new TabPanel (bundle.js:1239)
at Array.create_default_slot$2 (bundle.js:2674)
bundle.js:89 Uncaught (in promise) TypeError: Cannot read property 'removeAttribute' of undefined
at attr (bundle.js:89)
at attr_dev (bundle.js:455)
at update (bundle.js:856)
at updateProfile (<anonymous>:49:7)
at Object.block.p (<anonymous>:261:9)
at update (bundle.js:188)
at flush (bundle.js:162)
I can work around this by doing:
<script>
import { store } from './stores.js';
$: values = store.values;
</script>
{#each $values as item}
Describe the solution you'd like
Ideally, I'd simply be able to do:
<script>
import { store } from './stores.js';
</script>
{#each store.values as item}
Describe alternatives you've considered
See the $: values = store.values;
approach above.
How important is this feature to you?
It's not super important, but so far Svelte has had excellent emphasis on ergonomics, so it's a bit of a shame that this doesn't work.