fix: allow for an offscreen_anchor per renderer

pull/18058/head
paoloricciuti 4 months ago
parent 84ee6a0e55
commit 184eaeface

@ -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<WeakKey, TemplateNode>} */
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;
}

Loading…
Cancel
Save