From a537ebe4079e58683a0680f712255d07cba41ff0 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 11 Feb 2026 12:50:42 -0500 Subject: [PATCH] fix --- .../server/visitors/AssignmentExpression.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/svelte/src/compiler/phases/3-transform/server/visitors/AssignmentExpression.js b/packages/svelte/src/compiler/phases/3-transform/server/visitors/AssignmentExpression.js index b2ed578662..e6a1a86aa8 100644 --- a/packages/svelte/src/compiler/phases/3-transform/server/visitors/AssignmentExpression.js +++ b/packages/svelte/src/compiler/phases/3-transform/server/visitors/AssignmentExpression.js @@ -102,11 +102,15 @@ function build_assignment(operator, left, right, context) { const binding = context.state.scope.get(object.name); - if (binding?.kind === 'derived') { - // TODO pretty sure it's more complicated than this — need to - // handle different operators and mutations. - // (but also: when would writing to a derived during SSR ever be ok?) - return b.call(binding.node, right); + // TODO 6.0 this won't work perfectly: once a derived is written to, it will + // no longer recompute. It might be better to disallow writing to deriveds + // on the server, to prevent this bug occurring + if (binding?.kind === 'derived' && object === left) { + let value = /** @type {Expression} */ ( + context.visit(build_assignment_value(operator, left, right)) + ); + + return b.call(binding.node, value); } return null;