Skip to content

Commit 044475d

Browse files
committed
wip
1 parent a544f25 commit 044475d

File tree

2 files changed

+14
-2
lines changed
  • packages/svelte

2 files changed

+14
-2
lines changed

packages/svelte/src/internal/client/dom/blocks/boundary.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import {
44
BOUNDARY_EFFECT,
55
BOUNDARY_SUSPENDED,
6+
DERIVED,
67
DIRTY,
78
EFFECT_PRESERVED,
89
EFFECT_RAN,
@@ -34,7 +35,7 @@ import { DEV } from 'esm-env';
3435
import { from_async_derived, set_from_async_derived } from '../../reactivity/deriveds.js';
3536
import { raf } from '../../timing.js';
3637
import { loop } from '../../loop.js';
37-
import { mark_reactions } from '../../reactivity/sources.js';
38+
import { internal_set, mark_reactions } from '../../reactivity/sources.js';
3839

3940
const ASYNC_INCREMENT = Symbol();
4041
const ASYNC_DECREMENT = Symbol();
@@ -165,9 +166,16 @@ export function boundary(node, props, children) {
165166

166167
// @ts-ignore
167168
var forks = boundary.fn.forks;
169+
168170
for (var [signal, entry] of forks) {
169171
if (signal.v !== entry.v) {
170-
mark_reactions(signal, DIRTY);
172+
if ((signal.f & DERIVED) === 0) {
173+
var val = signal.v;
174+
signal.v = entry.v;
175+
internal_set(signal, val);
176+
} else {
177+
mark_reactions(signal, DIRTY);
178+
}
171179
}
172180
}
173181
forks.clear();

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,11 @@ export default test({
3232
await Promise.resolve();
3333
await Promise.resolve();
3434
await Promise.resolve();
35+
await Promise.resolve();
36+
await Promise.resolve();
37+
await Promise.resolve();
3538
await tick();
39+
flushSync();
3640
assert.htmlEqual(target.innerHTML, '<p>84</p>');
3741

3842
d = deferred();

0 commit comments

Comments
 (0)