diff --git a/.changeset/rotten-seals-train.md b/.changeset/rotten-seals-train.md new file mode 100644 index 000000000000..efbaaba471d9 --- /dev/null +++ b/.changeset/rotten-seals-train.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: hmr infinite loop with await in template (#17369) diff --git a/packages/svelte/src/internal/client/reactivity/batch.js b/packages/svelte/src/internal/client/reactivity/batch.js index 6f941c7ff231..49928d7104de 100644 --- a/packages/svelte/src/internal/client/reactivity/batch.js +++ b/packages/svelte/src/internal/client/reactivity/batch.js @@ -237,7 +237,10 @@ export class Batch { } else if (async_mode_flag && (flags & (RENDER_EFFECT | MANAGED_EFFECT)) !== 0) { target.render_effects.push(effect); } else if (is_dirty(effect)) { - if ((effect.f & BLOCK_EFFECT) !== 0) this.#dirty_effects.add(effect); + // only track block effects when deferred to prevent infinite HMR loops (#17369) + if ((effect.f & BLOCK_EFFECT) !== 0 && this.is_deferred()) { + this.#dirty_effects.add(effect); + } update_effect(effect); }