From ffc1f6bd5e8f4da52c5087013227cf6d06c1c644 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Sun, 13 Jul 2025 13:51:00 -0400 Subject: [PATCH] dry out --- .../3-transform/client/visitors/EachBlock.js | 32 +++++++------------ 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/EachBlock.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/EachBlock.js index 789465ac16..225a4f617c 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/EachBlock.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/EachBlock.js @@ -313,7 +313,8 @@ export function EachBlock(node, context) { } const { has_await } = node.metadata.expression; - const thunk = b.thunk(collection, has_await); + const get_collection = b.thunk(collection, has_await); + const thunk = has_await ? b.thunk(b.call('$.get', b.id('$$collection'))) : get_collection; const render_args = [b.id('$$anchor'), item]; if (uses_index || collection_id) render_args.push(index); @@ -323,7 +324,7 @@ export function EachBlock(node, context) { const args = [ context.state.node, b.literal(flags), - has_await ? b.thunk(b.call('$.get', b.id('$$collection'))) : thunk, + thunk, key_function, b.arrow(render_args, b.block(declarations.concat(block.body))) ]; @@ -334,36 +335,25 @@ export function EachBlock(node, context) { ); } + const statements = [add_svelte_meta(b.call('$.each', ...args), node, 'each')]; + + if (dev && node.metadata.keyed) { + statements.unshift(b.stmt(b.call('$.validate_each_keys', thunk, key_function))); + } + if (has_await) { - const statements = [add_svelte_meta(b.call('$.each', ...args), node, 'each')]; - if (dev && node.metadata.keyed) { - statements.unshift( - b.stmt( - b.call( - '$.validate_each_keys', - b.thunk(b.call('$.get', b.id('$$collection'))), - key_function - ) - ) - ); - } context.state.init.push( b.stmt( b.call( '$.async', context.state.node, - b.array([thunk]), + b.array([get_collection]), b.arrow([context.state.node, b.id('$$collection')], b.block(statements)) ) ) ); } else { - if (dev && node.metadata.keyed) { - context.state.init.push( - b.stmt(b.call('$.validate_each_keys', b.thunk(collection), key_function)) - ); - } - context.state.init.push(add_svelte_meta(b.call('$.each', ...args), node, 'each')); + context.state.init.push(...statements); } }