From 3394b62cd720176725f7f2a93ffb4695dcafcfbb Mon Sep 17 00:00:00 2001 From: Pat Cavit Date: Fri, 1 May 2020 00:22:43 -0700 Subject: [PATCH] WIP: destroy components before their immediate parents This feels hacky beyond belief, maybe there's a better way to know where in the `block.chunks.destroy` to put thate statement? Should `block.chunks` get a new array, `componentDestroys` or something? --- .../compile/render_dom/wrappers/InlineComponent/index.ts | 4 ++-- test/js/samples/component-static-var/expected.js | 2 +- test/js/samples/non-imported-component/expected.js | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/compiler/compile/render_dom/wrappers/InlineComponent/index.ts b/src/compiler/compile/render_dom/wrappers/InlineComponent/index.ts index 4b1e787cbe..55286c3d56 100644 --- a/src/compiler/compile/render_dom/wrappers/InlineComponent/index.ts +++ b/src/compiler/compile/render_dom/wrappers/InlineComponent/index.ts @@ -484,7 +484,7 @@ export default class InlineComponentWrapper extends Wrapper { b`if (${name}) @transition_out(${name}.$$.fragment, #local);` ); - block.chunks.destroy.push(b`if (${name}) @destroy_component(${name}, ${parent_node ? null : 'detaching'});`); + block.chunks.destroy.splice(-1, 0, b`if (${name}) @destroy_component(${name}, ${parent_node ? null : 'detaching'});`); } else { const expression = this.node.name === 'svelte:self' ? component.name @@ -523,7 +523,7 @@ export default class InlineComponentWrapper extends Wrapper { `); } - block.chunks.destroy.push(b` + block.chunks.destroy.splice(-1, 0, b` @destroy_component(${name}, ${parent_node ? null : 'detaching'}); `); diff --git a/test/js/samples/component-static-var/expected.js b/test/js/samples/component-static-var/expected.js index c032a0636d..b4031a70ad 100644 --- a/test/js/samples/component-static-var/expected.js +++ b/test/js/samples/component-static-var/expected.js @@ -69,8 +69,8 @@ function create_fragment(ctx) { }, d(detaching) { destroy_component(foo, detaching); - if (detaching) detach(t0); destroy_component(bar, detaching); + if (detaching) detach(t0); if (detaching) detach(t1); if (detaching) detach(input); dispose(); diff --git a/test/js/samples/non-imported-component/expected.js b/test/js/samples/non-imported-component/expected.js index 2784fd17ac..621a40c5c5 100644 --- a/test/js/samples/non-imported-component/expected.js +++ b/test/js/samples/non-imported-component/expected.js @@ -48,8 +48,8 @@ function create_fragment(ctx) { }, d(detaching) { destroy_component(imported, detaching); - if (detaching) detach(t); destroy_component(nonimported, detaching); + if (detaching) detach(t); } }; }