diff --git a/.changeset/pink-lamps-leave.md b/.changeset/pink-lamps-leave.md new file mode 100644 index 000000000000..7ca9d8736229 --- /dev/null +++ b/.changeset/pink-lamps-leave.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: add setters to `$derived` class properties diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/ClassBody.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/ClassBody.js index 5787b590a8f9..24c20d7f947f 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/ClassBody.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/ClassBody.js @@ -142,30 +142,17 @@ export function ClassBody(node, context) { // get foo() { return this.#foo; } body.push(b.method('get', definition.key, [], [b.return(b.call('$.get', member))])); - if (field.kind === 'state' || field.kind === 'raw_state') { - // set foo(value) { this.#foo = value; } - const value = b.id('value'); - - body.push( - b.method( - 'set', - definition.key, - [value], - [b.stmt(b.call('$.set', member, value, field.kind === 'state' && b.true))] - ) - ); - } - - if (dev && (field.kind === 'derived' || field.kind === 'derived_by')) { - body.push( - b.method( - 'set', - definition.key, - [b.id('_')], - [b.throw_error(`Cannot update a derived property ('${name}')`)] - ) - ); - } + // set foo(value) { this.#foo = value; } + const val = b.id('value'); + + body.push( + b.method( + 'set', + definition.key, + [val], + [b.stmt(b.call('$.set', member, val, field.kind === 'state' && b.true))] + ) + ); } continue; }