diff --git a/.changeset/bright-pants-send.md b/.changeset/bright-pants-send.md new file mode 100644 index 0000000000..8a877961ec --- /dev/null +++ b/.changeset/bright-pants-send.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: properly hydrate await in `{@html}` diff --git a/packages/svelte/src/compiler/phases/3-transform/server/visitors/HtmlTag.js b/packages/svelte/src/compiler/phases/3-transform/server/visitors/HtmlTag.js index 08fd2133ee..3f423fa60d 100644 --- a/packages/svelte/src/compiler/phases/3-transform/server/visitors/HtmlTag.js +++ b/packages/svelte/src/compiler/phases/3-transform/server/visitors/HtmlTag.js @@ -2,7 +2,7 @@ /** @import { AST } from '#compiler' */ /** @import { ComponentContext } from '../types.js' */ import * as b from '#compiler/builders'; -import { create_push } from './shared/utils.js'; +import { block_close, block_open, create_push } from './shared/utils.js'; /** * @param {AST.HtmlTag} node @@ -12,5 +12,15 @@ export function HtmlTag(node, context) { const expression = /** @type {Expression} */ (context.visit(node.expression)); const call = b.call('$.html', expression); + const has_await = node.metadata.expression.has_await; + + if (has_await) { + context.state.template.push(block_open); + } + context.state.template.push(create_push(call, node.metadata.expression, true)); + + if (has_await) { + context.state.template.push(block_close); + } } diff --git a/packages/svelte/tests/runtime-runes/samples/await-html-hydration/_config.js b/packages/svelte/tests/runtime-runes/samples/await-html-hydration/_config.js new file mode 100644 index 0000000000..e7983a3de9 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/await-html-hydration/_config.js @@ -0,0 +1,7 @@ +import { test } from '../../test'; + +export default test({ + skip_no_async: true, + mode: ['hydrate'], + async test() {} +}); diff --git a/packages/svelte/tests/runtime-runes/samples/await-html-hydration/main.svelte b/packages/svelte/tests/runtime-runes/samples/await-html-hydration/main.svelte new file mode 100644 index 0000000000..3b9ce94e61 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/await-html-hydration/main.svelte @@ -0,0 +1 @@ +