From df666c3ce3e530888535722f0fde466c03910174 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Sun, 26 Oct 2025 12:24:40 -0400 Subject: [PATCH] reduce diff --- .../compiler/phases/3-transform/client/visitors/DebugTag.js | 2 +- .../phases/3-transform/client/visitors/RegularElement.js | 3 +-- .../phases/3-transform/client/visitors/RenderTag.js | 2 +- .../phases/3-transform/client/visitors/SlotElement.js | 2 +- .../phases/3-transform/client/visitors/shared/component.js | 2 +- .../phases/3-transform/client/visitors/shared/element.js | 2 +- .../phases/3-transform/client/visitors/shared/utils.js | 6 +++--- packages/svelte/src/internal/client/dom/blocks/async.js | 2 +- packages/svelte/src/internal/client/dom/blocks/html.js | 2 +- .../svelte/src/internal/client/dom/elements/attributes.js | 2 +- packages/svelte/src/internal/client/reactivity/effects.js | 5 ++--- .../_expected/client/index.svelte.js | 4 ++-- .../async-each-hoisting/_expected/client/index.svelte.js | 2 +- .../_expected/client/index.svelte.js | 4 ++-- .../async-if-hoisting/_expected/client/index.svelte.js | 4 ++-- .../await-block-scope/_expected/client/index.svelte.js | 2 +- .../bind-component-snippet/_expected/client/index.svelte.js | 2 +- .../_expected/client/main.svelte.js | 3 +-- .../each-string-template/_expected/client/index.svelte.js | 2 +- .../_expected/client/index.svelte.js | 2 +- .../_expected/client/index.svelte.js | 2 +- .../skip-static-subtree/_expected/client/index.svelte.js | 2 +- .../text-nodes-deriveds/_expected/client/index.svelte.js | 2 +- 23 files changed, 29 insertions(+), 32 deletions(-) diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/DebugTag.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/DebugTag.js index 0711897c7b..ef9a070859 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/DebugTag.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/DebugTag.js @@ -23,6 +23,6 @@ export function DebugTag(node, context) { const call = b.call('console.log', object); context.state.init.push( - b.stmt(b.call('$.template_effect', b.array([]), b.thunk(b.block([b.stmt(call), b.debugger])))) + b.stmt(b.call('$.template_effect', b.thunk(b.block([b.stmt(call), b.debugger])))) ); } diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/RegularElement.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/RegularElement.js index 264b8c3e34..3998770a71 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/RegularElement.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/RegularElement.js @@ -476,7 +476,6 @@ function setup_select_synchronization(value_binding, context) { b.stmt( b.call( '$.template_effect', - b.array([]), b.thunk( b.block([b.stmt(/** @type {Expression} */ (context.visit(bound))), b.stmt(invalidator)]) ) @@ -655,7 +654,7 @@ function build_custom_element_attribute_update_assignment(node_id, attribute, co // this is different from other updates — it doesn't get grouped, // because set_custom_element_data may not be idempotent - const update = has_state ? b.call('$.template_effect', b.array([]), b.thunk(call)) : call; + const update = has_state ? b.call('$.template_effect', b.thunk(call)) : call; context.state.init.push(b.stmt(update)); } diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/RenderTag.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/RenderTag.js index 71e8b2ad77..86b414d9ab 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/RenderTag.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/RenderTag.js @@ -73,7 +73,7 @@ export function RenderTag(node, context) { const async_values = memoizer.async_values(); const blockers = memoizer.blockers(); - if (async_values || blockers.elements.length > 0) { + if (async_values || blockers) { context.state.init.push( b.stmt( b.call( diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/SlotElement.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/SlotElement.js index 5c3e59ad6c..294e5fdfc2 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/SlotElement.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/SlotElement.js @@ -76,7 +76,7 @@ export function SlotElement(node, context) { const async_values = memoizer.async_values(); const blockers = memoizer.blockers(); - if (async_values || blockers.elements.length > 0) { + if (async_values || blockers) { context.state.init.push( b.stmt( b.call( diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/component.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/component.js index 55cff6cc37..9a87c4c0e8 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/component.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/component.js @@ -502,7 +502,7 @@ export function build_component(node, component_name, context) { const async_values = memoizer.async_values(); const blockers = memoizer.blockers(); - if (async_values || blockers.elements.length > 0) { + if (async_values || blockers) { return b.stmt( b.call( '$.async', diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/element.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/element.js index eb38f50530..436d262d3a 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/element.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/element.js @@ -86,10 +86,10 @@ export function build_attribute_effect( b.call( '$.attribute_effect', element_id, - memoizer.blockers(), b.arrow(ids, b.object(values)), memoizer.sync_values(), memoizer.async_values(), + memoizer.blockers(), element.metadata.scoped && context.state.analysis.css.hash !== '' && b.literal(context.state.analysis.css.hash), diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/utils.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/utils.js index 7e71244dd5..83bc5da3e3 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/utils.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/utils.js @@ -60,7 +60,7 @@ export class Memoizer { } blockers() { - return b.array([...this.#blockers]); + return this.#blockers.size > 0 ? b.array([...this.#blockers]) : undefined; } deriveds(runes = true) { @@ -191,7 +191,6 @@ export function build_render_statement(state) { return b.stmt( b.call( '$.template_effect', - memoizer.blockers(), b.arrow( ids, state.update.length === 1 && state.update[0].type === 'ExpressionStatement' @@ -199,7 +198,8 @@ export function build_render_statement(state) { : b.block(state.update) ), memoizer.sync_values(), - memoizer.async_values() + memoizer.async_values(), + memoizer.blockers() ) ); } diff --git a/packages/svelte/src/internal/client/dom/blocks/async.js b/packages/svelte/src/internal/client/dom/blocks/async.js index db4ebc5934..d1c970fff7 100644 --- a/packages/svelte/src/internal/client/dom/blocks/async.js +++ b/packages/svelte/src/internal/client/dom/blocks/async.js @@ -18,7 +18,7 @@ import { get_boundary } from './boundary.js'; * @param {Array<() => Promise>} expressions * @param {(anchor: TemplateNode, ...deriveds: Value[]) => void} fn */ -export function async(node, blockers, expressions = [], fn) { +export function async(node, blockers = [], expressions = [], fn) { var boundary = get_boundary(); var batch = /** @type {Batch} */ (current_batch); var blocking = !boundary.is_pending(); diff --git a/packages/svelte/src/internal/client/dom/blocks/html.js b/packages/svelte/src/internal/client/dom/blocks/html.js index 2dd1da149b..d7190abc66 100644 --- a/packages/svelte/src/internal/client/dom/blocks/html.js +++ b/packages/svelte/src/internal/client/dom/blocks/html.js @@ -46,7 +46,7 @@ export function html(node, get_value, svg = false, mathml = false, skip_warning var value = ''; - template_effect([], () => { + template_effect(() => { var effect = /** @type {Effect} */ (active_effect); if (value === (value = get_value() ?? '')) { diff --git a/packages/svelte/src/internal/client/dom/elements/attributes.js b/packages/svelte/src/internal/client/dom/elements/attributes.js index a5ad3a31a8..97bad28be3 100644 --- a/packages/svelte/src/internal/client/dom/elements/attributes.js +++ b/packages/svelte/src/internal/client/dom/elements/attributes.js @@ -490,10 +490,10 @@ function set_attributes( */ export function attribute_effect( element, - blockers, fn, sync = [], async = [], + blockers = [], css_hash, should_remove_defaults = false, skip_warning = false diff --git a/packages/svelte/src/internal/client/reactivity/effects.js b/packages/svelte/src/internal/client/reactivity/effects.js index e50d7aa689..4a9fce7286 100644 --- a/packages/svelte/src/internal/client/reactivity/effects.js +++ b/packages/svelte/src/internal/client/reactivity/effects.js @@ -362,13 +362,12 @@ export function render_effect(fn, flags = 0) { } /** - * @param {Array>} blockers * @param {(...expressions: any) => void | (() => void)} fn * @param {Array<() => any>} sync * @param {Array<() => Promise>} async - * @param {Promise} [blocker] + * @param {Array>} blockers */ -export function template_effect(blockers, fn, sync = [], async = [], blocker) { +export function template_effect(fn, sync = [], async = [], blockers = []) { flatten(blockers, sync, async, (values) => { create_effect(RENDER_EFFECT, () => fn(...values.map(get)), true); }); diff --git a/packages/svelte/tests/snapshot/samples/async-each-fallback-hoisting/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/async-each-fallback-hoisting/_expected/client/index.svelte.js index 69d240cd17..6f1c40988d 100644 --- a/packages/svelte/tests/snapshot/samples/async-each-fallback-hoisting/_expected/client/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/async-each-fallback-hoisting/_expected/client/index.svelte.js @@ -17,7 +17,7 @@ export default function Async_each_fallback_hoisting($$anchor) { var text = $.text(); - $.template_effect([], ($0) => $.set_text(text, $0), void 0, [() => Promise.reject('This should never be reached')]); + $.template_effect(($0) => $.set_text(text, $0), void 0, [() => Promise.reject('This should never be reached')]); $.append($$anchor, text); }, ($$anchor) => { @@ -25,7 +25,7 @@ export default function Async_each_fallback_hoisting($$anchor) { var text_1 = $.text(); - $.template_effect([], ($0) => $.set_text(text_1, $0), void 0, [() => Promise.resolve(4)]); + $.template_effect(($0) => $.set_text(text_1, $0), void 0, [() => Promise.resolve(4)]); $.append($$anchor, text_1); } ); diff --git a/packages/svelte/tests/snapshot/samples/async-each-hoisting/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/async-each-hoisting/_expected/client/index.svelte.js index 4805066dac..17a32e4cc7 100644 --- a/packages/svelte/tests/snapshot/samples/async-each-hoisting/_expected/client/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/async-each-hoisting/_expected/client/index.svelte.js @@ -15,7 +15,7 @@ export default function Async_each_hoisting($$anchor) { var text = $.text(); - $.template_effect([], ($0) => $.set_text(text, $0), void 0, [() => $.get(item)]); + $.template_effect(($0) => $.set_text(text, $0), void 0, [() => $.get(item)]); $.append($$anchor, text); }); }); diff --git a/packages/svelte/tests/snapshot/samples/async-if-alternate-hoisting/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/async-if-alternate-hoisting/_expected/client/index.svelte.js index 3657621791..d86001e273 100644 --- a/packages/svelte/tests/snapshot/samples/async-if-alternate-hoisting/_expected/client/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/async-if-alternate-hoisting/_expected/client/index.svelte.js @@ -10,14 +10,14 @@ export default function Async_if_alternate_hoisting($$anchor) { var consequent = ($$anchor) => { var text = $.text(); - $.template_effect([], ($0) => $.set_text(text, $0), void 0, [() => Promise.reject('no no no')]); + $.template_effect(($0) => $.set_text(text, $0), void 0, [() => Promise.reject('no no no')]); $.append($$anchor, text); }; var alternate = ($$anchor) => { var text_1 = $.text(); - $.template_effect([], ($0) => $.set_text(text_1, $0), void 0, [() => Promise.resolve('yes yes yes')]); + $.template_effect(($0) => $.set_text(text_1, $0), void 0, [() => Promise.resolve('yes yes yes')]); $.append($$anchor, text_1); }; diff --git a/packages/svelte/tests/snapshot/samples/async-if-hoisting/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/async-if-hoisting/_expected/client/index.svelte.js index ffeee0c470..5cdb6978d9 100644 --- a/packages/svelte/tests/snapshot/samples/async-if-hoisting/_expected/client/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/async-if-hoisting/_expected/client/index.svelte.js @@ -10,14 +10,14 @@ export default function Async_if_hoisting($$anchor) { var consequent = ($$anchor) => { var text = $.text(); - $.template_effect([], ($0) => $.set_text(text, $0), void 0, [() => Promise.resolve('yes yes yes')]); + $.template_effect(($0) => $.set_text(text, $0), void 0, [() => Promise.resolve('yes yes yes')]); $.append($$anchor, text); }; var alternate = ($$anchor) => { var text_1 = $.text(); - $.template_effect([], ($0) => $.set_text(text_1, $0), void 0, [() => Promise.reject('no no no')]); + $.template_effect(($0) => $.set_text(text_1, $0), void 0, [() => Promise.reject('no no no')]); $.append($$anchor, text_1); }; diff --git a/packages/svelte/tests/snapshot/samples/await-block-scope/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/await-block-scope/_expected/client/index.svelte.js index b756dbad94..a78d8911cd 100644 --- a/packages/svelte/tests/snapshot/samples/await-block-scope/_expected/client/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/await-block-scope/_expected/client/index.svelte.js @@ -26,7 +26,7 @@ export default function Await_block_scope($$anchor) { var text_1 = $.sibling(node); - $.template_effect([], () => { + $.template_effect(() => { $.set_text(text, `clicks: ${counter.count ?? ''}`); $.set_text(text_1, ` ${counter.count ?? ''}`); }); diff --git a/packages/svelte/tests/snapshot/samples/bind-component-snippet/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/bind-component-snippet/_expected/client/index.svelte.js index 8e05aa55b0..f3850d1471 100644 --- a/packages/svelte/tests/snapshot/samples/bind-component-snippet/_expected/client/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/bind-component-snippet/_expected/client/index.svelte.js @@ -30,6 +30,6 @@ export default function Bind_component_snippet($$anchor) { var text_1 = $.sibling(node); - $.template_effect([], () => $.set_text(text_1, ` value: ${$.get(value) ?? ''}`)); + $.template_effect(() => $.set_text(text_1, ` value: ${$.get(value) ?? ''}`)); $.append($$anchor, fragment); } \ No newline at end of file diff --git a/packages/svelte/tests/snapshot/samples/dynamic-attributes-casing/_expected/client/main.svelte.js b/packages/svelte/tests/snapshot/samples/dynamic-attributes-casing/_expected/client/main.svelte.js index 1250633be2..6fb7cbf183 100644 --- a/packages/svelte/tests/snapshot/samples/dynamic-attributes-casing/_expected/client/main.svelte.js +++ b/packages/svelte/tests/snapshot/samples/dynamic-attributes-casing/_expected/client/main.svelte.js @@ -25,10 +25,9 @@ export default function Main($$anchor) { var svg_1 = $.sibling(div_1, 2); var custom_element_1 = $.sibling(svg_1, 2); - $.template_effect([], () => $.set_custom_element_data(custom_element_1, 'fooBar', y())); + $.template_effect(() => $.set_custom_element_data(custom_element_1, 'fooBar', y())); $.template_effect( - [], ($0, $1) => { $.set_attribute(div_1, 'foobar', $0); $.set_attribute(svg_1, 'viewBox', $1); diff --git a/packages/svelte/tests/snapshot/samples/each-string-template/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/each-string-template/_expected/client/index.svelte.js index 4ff7796e59..c0626bd416 100644 --- a/packages/svelte/tests/snapshot/samples/each-string-template/_expected/client/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/each-string-template/_expected/client/index.svelte.js @@ -11,7 +11,7 @@ export default function Each_string_template($$anchor) { var text = $.text(); - $.template_effect([], () => $.set_text(text, `${thing ?? ''}, `)); + $.template_effect(() => $.set_text(text, `${thing ?? ''}, `)); $.append($$anchor, text); }); diff --git a/packages/svelte/tests/snapshot/samples/function-prop-no-getter/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/function-prop-no-getter/_expected/client/index.svelte.js index 1556d59583..ff1ca35dac 100644 --- a/packages/svelte/tests/snapshot/samples/function-prop-no-getter/_expected/client/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/function-prop-no-getter/_expected/client/index.svelte.js @@ -20,7 +20,7 @@ export default function Function_prop_no_getter($$anchor) { var text = $.text(); - $.template_effect([], () => $.set_text(text, `clicks: ${$.get(count) ?? ''}`)); + $.template_effect(() => $.set_text(text, `clicks: ${$.get(count) ?? ''}`)); $.append($$anchor, text); }, diff --git a/packages/svelte/tests/snapshot/samples/nullish-coallescence-omittance/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/nullish-coallescence-omittance/_expected/client/index.svelte.js index f09a0af0e9..3cc5c882e1 100644 --- a/packages/svelte/tests/snapshot/samples/nullish-coallescence-omittance/_expected/client/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/nullish-coallescence-omittance/_expected/client/index.svelte.js @@ -26,7 +26,7 @@ export default function Nullish_coallescence_omittance($$anchor) { var h1_1 = $.sibling(button, 2); h1_1.textContent = 'Hello, world'; - $.template_effect([], () => $.set_text(text, `Count is ${$.get(count) ?? ''}`)); + $.template_effect(() => $.set_text(text, `Count is ${$.get(count) ?? ''}`)); $.append($$anchor, fragment); } diff --git a/packages/svelte/tests/snapshot/samples/skip-static-subtree/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/skip-static-subtree/_expected/client/index.svelte.js index 801edce055..78147659ff 100644 --- a/packages/svelte/tests/snapshot/samples/skip-static-subtree/_expected/client/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/skip-static-subtree/_expected/client/index.svelte.js @@ -44,6 +44,6 @@ export default function Skip_static_subtree($$anchor, $$props) { var img = $.sibling(select, 2); $.next(2); - $.template_effect([], () => $.set_text(text, $$props.title)); + $.template_effect(() => $.set_text(text, $$props.title)); $.append($$anchor, fragment); } \ No newline at end of file diff --git a/packages/svelte/tests/snapshot/samples/text-nodes-deriveds/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/text-nodes-deriveds/_expected/client/index.svelte.js index 2e49b8af23..de05f6af20 100644 --- a/packages/svelte/tests/snapshot/samples/text-nodes-deriveds/_expected/client/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/text-nodes-deriveds/_expected/client/index.svelte.js @@ -19,6 +19,6 @@ export default function Text_nodes_deriveds($$anchor) { var text = $.child(p); $.reset(p); - $.template_effect([], ($0, $1) => $.set_text(text, `${$0 ?? ''}${$1 ?? ''}`), [text1, text2]); + $.template_effect(($0, $1) => $.set_text(text, `${$0 ?? ''}${$1 ?? ''}`), [text1, text2]); $.append($$anchor, p); } \ No newline at end of file