diff --git a/packages/svelte/src/compiler/phases/2-analyze/visitors/CallExpression.js b/packages/svelte/src/compiler/phases/2-analyze/visitors/CallExpression.js index 8be793c4a5..995b1d79f8 100644 --- a/packages/svelte/src/compiler/phases/2-analyze/visitors/CallExpression.js +++ b/packages/svelte/src/compiler/phases/2-analyze/visitors/CallExpression.js @@ -115,7 +115,8 @@ export function CallExpression(node, context) { if ( (!(parent.type === 'VariableDeclarator' || parent.type === 'ReturnStatement') || get_parent(context.path, -3).type === 'ConstTag') && - !(parent.type === 'PropertyDefinition' && !parent.static && !parent.computed) + !(parent.type === 'PropertyDefinition' && !parent.static && !parent.computed) && + !(parent.type === 'ArrowFunctionExpression' && parent.body === node) ) { e.state_invalid_placement(node, rune); } diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/CallExpression.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/CallExpression.js index 1cd35e2ec0..aa718b9988 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/CallExpression.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/CallExpression.js @@ -11,6 +11,7 @@ import { should_proxy } from '../utils.js'; * @param {Context} context */ export function CallExpression(node, context) { + const parent = context.path.at(-1); switch (get_rune(node, context.state.scope)) { case '$host': return b.id('$$props.$$host'); @@ -35,7 +36,10 @@ export function CallExpression(node, context) { case '$inspect().with': return transform_inspect_rune(node, context); case '$state': - if (context.path.at(-1)?.type === 'ReturnStatement') { + if ( + parent?.type === 'ReturnStatement' || + (parent?.type === 'ArrowFunctionExpression' && parent.body === node) + ) { if ( node.arguments[0] && should_proxy(