Skip to content

Commit b2e9be2

Browse files
authored
fix: improve ssr code generation for class property $derived (#10661)
* fix: improve ssr code generation for class property $derived * fix ts
1 parent 99e1665 commit b2e9be2

File tree

4 files changed

+46
-1
lines changed

4 files changed

+46
-1
lines changed

.changeset/rotten-poems-applaud.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"svelte": patch
3+
---
4+
5+
fix: improve ssr code generation for class property $derived

packages/svelte/src/compiler/phases/3-transform/server/transform-server.js

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -545,7 +545,7 @@ const javascript_visitors_runes = {
545545
if (node.value != null && node.value.type === 'CallExpression') {
546546
const rune = get_rune(node.value, state.scope);
547547

548-
if (rune === '$state' || rune === '$state.frozen' || rune === '$derived') {
548+
if (rune === '$state' || rune === '$state.frozen') {
549549
return {
550550
...node,
551551
value:
@@ -554,6 +554,26 @@ const javascript_visitors_runes = {
554554
: /** @type {import('estree').Expression} */ (visit(node.value.arguments[0]))
555555
};
556556
}
557+
if (rune === '$derived') {
558+
return {
559+
type: 'MethodDefinition',
560+
kind: 'get',
561+
key: node.key,
562+
computed: false,
563+
static: false,
564+
value: b.function(
565+
null,
566+
[],
567+
b.block([
568+
b.return(
569+
node.value.arguments.length === 0
570+
? null
571+
: /** @type {import('estree').Expression} */ (visit(node.value.arguments[0]))
572+
)
573+
])
574+
)
575+
};
576+
}
557577
if (rune === '$derived.by') {
558578
return {
559579
...node,
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { test } from '../../test';
2+
3+
export default test({
4+
html: `2`
5+
});
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<script>
2+
export class Counter {
3+
count = $state(0);
4+
doubled = $derived(this.count * 2);
5+
6+
constructor(initialCount = 0) {
7+
this.count = initialCount;
8+
}
9+
}
10+
11+
const counter = new Counter(1);
12+
</script>
13+
14+
{counter.doubled}
15+

0 commit comments

Comments
 (0)