diff --git a/packages/svelte/src/internal/client/dom/blocks/each.js b/packages/svelte/src/internal/client/dom/blocks/each.js index bee21178ae..429e2f5442 100644 --- a/packages/svelte/src/internal/client/dom/blocks/each.js +++ b/packages/svelte/src/internal/client/dom/blocks/each.js @@ -168,8 +168,11 @@ function destroy_effects(state, to_destroy, remove_dom = true) { } } -/** @type {TemplateNode} */ -var offscreen_anchor; +// we need to handle the case of multiple renderers so we need to use a WeakMap of offscreen anchors rather than a single variable. +// we also need the dom_weak_key since `null` is not a viable WeakKey +/** @type {WeakMap} */ +var offscreen_anchors = new WeakMap(); +var dom_weak_key = {}; /** * Returns an anchor node suitable for offscreen rendering. @@ -179,15 +182,18 @@ var offscreen_anchor; * @returns {TemplateNode} */ function get_offscreen_anchor() { - if (offscreen_anchor !== undefined) return offscreen_anchor; + // not doing it inline to please typescript + var cached = offscreen_anchors.get(renderer ?? dom_weak_key); + if (cached) return cached; - offscreen_anchor = create_text(); + var offscreen_anchor = create_text(); if (renderer) { var fragment = create_fragment(); append_child(fragment, offscreen_anchor); } + offscreen_anchors.set(renderer ?? dom_weak_key, offscreen_anchor); return offscreen_anchor; }