diff --git a/src/compiler/compile/render_dom/wrappers/Element/index.ts b/src/compiler/compile/render_dom/wrappers/Element/index.ts index 9b14d1cd6c9..06a33f97488 100644 --- a/src/compiler/compile/render_dom/wrappers/Element/index.ts +++ b/src/compiler/compile/render_dom/wrappers/Element/index.ts @@ -272,7 +272,7 @@ export default class ElementWrapper extends Wrapper { ); if (parent_node === '@_document.head') { - block.builders.destroy.add_line(`@detach(${node});`); + block.builders.destroy.add_conditional('detaching', `@detach(${node});`); } } else { block.builders.mount.add_line(`@insert(#target, ${node}, anchor);`); diff --git a/test/js/samples/head-no-whitespace/expected.js b/test/js/samples/head-no-whitespace/expected.js index 457df77dc86..dbdd82f358b 100644 --- a/test/js/samples/head-no-whitespace/expected.js +++ b/test/js/samples/head-no-whitespace/expected.js @@ -33,8 +33,10 @@ function create_fragment(ctx) { o: noop, d(detaching) { - detach(meta0); - detach(meta1); + if (detaching) { + detach(meta0); + detach(meta1); + } } }; } diff --git a/test/runtime/samples/head-detached-in-dynamic-component/A.svelte b/test/runtime/samples/head-detached-in-dynamic-component/A.svelte new file mode 100644 index 00000000000..f05488e3e4e --- /dev/null +++ b/test/runtime/samples/head-detached-in-dynamic-component/A.svelte @@ -0,0 +1,5 @@ + + + + +A \ No newline at end of file diff --git a/test/runtime/samples/head-detached-in-dynamic-component/B.svelte b/test/runtime/samples/head-detached-in-dynamic-component/B.svelte new file mode 100644 index 00000000000..943b307cc30 --- /dev/null +++ b/test/runtime/samples/head-detached-in-dynamic-component/B.svelte @@ -0,0 +1,5 @@ + + + + +B \ No newline at end of file diff --git a/test/runtime/samples/head-detached-in-dynamic-component/_config.js b/test/runtime/samples/head-detached-in-dynamic-component/_config.js new file mode 100644 index 00000000000..e18589e10e1 --- /dev/null +++ b/test/runtime/samples/head-detached-in-dynamic-component/_config.js @@ -0,0 +1,15 @@ +export default { + html: ` + A + `, + + test({ assert, component, window }) { + component.x = false; + + const meta = window.document.querySelectorAll('meta'); + + assert.equal(meta.length, 1); + assert.equal(meta[0].name, 'description'); + assert.equal(meta[0].content, 'B'); + } +}; diff --git a/test/runtime/samples/head-detached-in-dynamic-component/main.svelte b/test/runtime/samples/head-detached-in-dynamic-component/main.svelte new file mode 100644 index 00000000000..e4acd7737ad --- /dev/null +++ b/test/runtime/samples/head-detached-in-dynamic-component/main.svelte @@ -0,0 +1,8 @@ + + + \ No newline at end of file