diff --git a/.changeset/swift-starfishes-knock.md b/.changeset/swift-starfishes-knock.md new file mode 100644 index 0000000000..790b3fe697 --- /dev/null +++ b/.changeset/swift-starfishes-knock.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: flush when pending boundaries resolve diff --git a/packages/svelte/src/internal/client/dom/blocks/boundary.js b/packages/svelte/src/internal/client/dom/blocks/boundary.js index 6dde40d889..88f4a85e20 100644 --- a/packages/svelte/src/internal/client/dom/blocks/boundary.js +++ b/packages/svelte/src/internal/client/dom/blocks/boundary.js @@ -285,6 +285,13 @@ export class Boundary { this.#anchor.before(this.#offscreen_fragment); this.#offscreen_fragment = null; } + + // TODO this feels like a little bit of a kludge, but until we + // overhaul the boundary/batch relationship it's probably + // the most pragmatic solution available to us + queue_micro_task(() => { + Batch.ensure().flush(); + }); } } diff --git a/packages/svelte/tests/runtime-runes/samples/async-attachment-in-block/_config.js b/packages/svelte/tests/runtime-runes/samples/async-attachment-in-block/_config.js new file mode 100644 index 0000000000..97da1bf835 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/async-attachment-in-block/_config.js @@ -0,0 +1,11 @@ +import { tick } from 'svelte'; +import { test } from '../../test'; + +export default test({ + mode: ['client', 'hydrate'], + + async test({ assert, target }) { + await tick(); + assert.htmlEqual(target.innerHTML, '