Skip to content

Commit ac8e098

Browse files
committed
fix: serialize thenables in hydratable
1 parent 6d696be commit ac8e098

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

.changeset/puny-dots-change.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: serialize thenables in `hydratable`

packages/svelte/src/internal/server/hydratable.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { async_mode_flag } from '../flags/index.js';
33
import { get_render_context } from './render-context.js';
44
import * as e from './errors.js';
55
import * as devalue from 'devalue';
6-
import { get_stack } from '../shared/dev.js';
76
import { DEV } from 'esm-env';
87
import { get_user_code_location } from './dev.js';
98

@@ -56,8 +55,14 @@ function encode(key, value, unresolved) {
5655
let uid = 1;
5756

5857
entry.serialized = devalue.uneval(entry.value, (value, uneval) => {
59-
if (value instanceof Promise) {
60-
const p = value
58+
if (
59+
value instanceof Promise ||
60+
(typeof value === 'object' &&
61+
value !== null &&
62+
'then' in value &&
63+
typeof value.then === 'function')
64+
) {
65+
const p = Promise.resolve(value)
6166
.then((v) => `r(${uneval(v)})`)
6267
.catch((devalue_error) =>
6368
e.hydratable_serialization_failed(

0 commit comments

Comments
 (0)