From 5d078faaf30253274f4029cd175aabc12d8a6432 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Thu, 27 Jun 2024 16:56:42 -0400 Subject: [PATCH] tweaks --- .../phases/3-transform/client/visitors/template.js | 13 +++++++------ .../src/internal/client/dom/blocks/snippet.js | 9 ++++----- .../src/internal/client/reactivity/effects.js | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/template.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/template.js index 55c07e0822..8c2738a40c 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/template.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/template.js @@ -1863,11 +1863,9 @@ export const template_visitors = { const is_reactive = callee.type !== 'Identifier' || context.state.scope.get(callee.name)?.kind !== 'normal'; - /** @type {import('estree').Expression[]} */ - const args = [context.state.node]; - for (const arg of raw_args) { - args.push(b.thunk(/** @type {import('estree').Expression} */ (context.visit(arg)))); - } + const args = raw_args.map((arg) => + b.thunk(/** @type {import('estree').Expression} */ (context.visit(arg))) + ); let snippet_function = /** @type {import('estree').Expression} */ (context.visit(callee)); if (context.state.options.dev) { @@ -1875,12 +1873,15 @@ export const template_visitors = { } if (is_reactive) { - context.state.init.push(b.stmt(b.call('$.snippet', b.thunk(snippet_function), ...args))); + context.state.init.push( + b.stmt(b.call('$.snippet', context.state.node, b.thunk(snippet_function), ...args)) + ); } else { context.state.init.push( b.stmt( (node.expression.type === 'CallExpression' ? b.call : b.maybe_call)( snippet_function, + context.state.node, ...args ) ) diff --git a/packages/svelte/src/internal/client/dom/blocks/snippet.js b/packages/svelte/src/internal/client/dom/blocks/snippet.js index 00676a1c9e..5602f7baf2 100644 --- a/packages/svelte/src/internal/client/dom/blocks/snippet.js +++ b/packages/svelte/src/internal/client/dom/blocks/snippet.js @@ -2,26 +2,25 @@ import { add_snippet_symbol } from '../../../shared/validate.js'; import { EFFECT_TRANSPARENT } from '../../constants.js'; import { branch, block, destroy_effect } from '../../reactivity/effects.js'; import { - current_component_context, dev_current_component_function, set_dev_current_component_function } from '../../runtime.js'; /** * @template {(node: import('#client').TemplateNode, ...args: any[]) => import('#client').Dom} SnippetFn + * @param {import('#client').TemplateNode} anchor * @param {() => SnippetFn | null | undefined} get_snippet - * @param {import('#client').TemplateNode} node * @param {(() => any)[]} args * @returns {void} */ -export function snippet(get_snippet, node, ...args) { +export function snippet(anchor, get_snippet, ...args) { /** @type {SnippetFn | null | undefined} */ var snippet; /** @type {import('#client').Effect | null} */ var snippet_effect; - block(null, EFFECT_TRANSPARENT, () => { + block(anchor, EFFECT_TRANSPARENT, () => { if (snippet === (snippet = get_snippet())) return; if (snippet_effect) { @@ -30,7 +29,7 @@ export function snippet(get_snippet, node, ...args) { } if (snippet) { - snippet_effect = branch(() => /** @type {SnippetFn} */ (snippet)(node, ...args)); + snippet_effect = branch(() => /** @type {SnippetFn} */ (snippet)(anchor, ...args)); } }); } diff --git a/packages/svelte/src/internal/client/reactivity/effects.js b/packages/svelte/src/internal/client/reactivity/effects.js index f5ab407305..035d20dc16 100644 --- a/packages/svelte/src/internal/client/reactivity/effects.js +++ b/packages/svelte/src/internal/client/reactivity/effects.js @@ -341,7 +341,7 @@ export function execute_effect_teardown(effect) { export function destroy_effect(effect, remove_dom = true) { var removed = false; - if (remove_dom || (effect.f & HEAD_EFFECT) !== 0) { + if ((remove_dom || (effect.f & HEAD_EFFECT) !== 0) && effect.nodes !== null) { var start = get_first_node(effect); var end = get_last_node(effect);