Skip to content

Commit 290dfa5

Browse files
committed
fix: more exhaustive check during SvelteMap.set in deriveds
1 parent 7be3afb commit 290dfa5

File tree

4 files changed

+17
-6
lines changed

4 files changed

+17
-6
lines changed

.changeset/sweet-candles-poke.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: more exhaustive check during `SvelteMap.set` in deriveds

packages/svelte/src/reactivity/map.js

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { DEV } from 'esm-env';
33
import { source, set } from '../internal/client/reactivity/sources.js';
44
import { get } from '../internal/client/runtime.js';
55
import { increment } from './utils.js';
6+
import { DERIVED } from '../internal/client/constants.js';
67

78
/**
89
* @template K
@@ -102,12 +103,10 @@ export class SvelteMap extends Map {
102103
increment(version);
103104
} else if (prev_res !== value) {
104105
increment(s);
105-
// If no one listening to this property and is listening to the version, or
106-
// the inverse, then we should increment the version to be safe
107-
if (
108-
(s.reactions === null && version.reactions !== null) ||
109-
(s.reactions !== null && version.reactions === null)
110-
) {
106+
107+
// if not every reaction of s is a reaction of version we need to also include version
108+
const needs_version_increase = !s.reactions?.every((r) => version.reactions?.includes(r));
109+
if (needs_version_increase) {
111110
increment(version);
112111
}
113112
}

packages/svelte/tests/runtime-runes/samples/derived-map/_config.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ import { test } from '../../test';
33

44
export default test({
55
html: `Loading`,
6+
compileOptions: {
7+
// dev: true
8+
},
69

710
async test({ assert, target }) {
811
await Promise.resolve();

packages/svelte/tests/runtime-runes/samples/derived-map/main.svelte

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@
2424
}
2525
2626
const value = $derived(get_async(1));
27+
const value2 = $derived(get_async(1));
28+
// both values are read before the set
29+
value;
30+
value2;
2731
</script>
2832

2933
{#if value instanceof Promise}

0 commit comments

Comments
 (0)