diff --git a/.changeset/gentle-emus-walk.md b/.changeset/gentle-emus-walk.md new file mode 100644 index 0000000000..760b952856 --- /dev/null +++ b/.changeset/gentle-emus-walk.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: set server context after async transformError diff --git a/packages/svelte/src/internal/server/renderer.js b/packages/svelte/src/internal/server/renderer.js index 9f71d53f6d..c6966090dc 100644 --- a/packages/svelte/src/internal/server/renderer.js +++ b/packages/svelte/src/internal/server/renderer.js @@ -293,6 +293,7 @@ export class Renderer { } child.promise = /** @type {Promise} */ (result).then((transformed) => { + set_ssr_context(parent_context); child.#out.push(``); failed_snippet(child, transformed, noop); child.#out.push(BLOCK_CLOSE); diff --git a/packages/svelte/tests/runtime-runes/samples/async-error-boundary-3/_config.js b/packages/svelte/tests/runtime-runes/samples/async-error-boundary-3/_config.js new file mode 100644 index 0000000000..02daf60bc6 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/async-error-boundary-3/_config.js @@ -0,0 +1,16 @@ +import { tick } from 'svelte'; +import { test } from '../../test'; + +export default test({ + solo: true, + mode: ['hydrate', 'async-server', 'client'], + ssrHtml: '

caught: error (hello)

', + transformError: () => { + return Promise.resolve('error'); + }, + + async test({ assert, target }) { + await tick(); + assert.htmlEqual(target.innerHTML, '

caught: error (hello)

'); + } +}); diff --git a/packages/svelte/tests/runtime-runes/samples/async-error-boundary-3/child.svelte b/packages/svelte/tests/runtime-runes/samples/async-error-boundary-3/child.svelte new file mode 100644 index 0000000000..90d4c14cfc --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/async-error-boundary-3/child.svelte @@ -0,0 +1,14 @@ + + +{#if error} +

caught: {await error} ({context})

+{:else} + {(() => { + throw 'catch me'; + })()} +{/if} diff --git a/packages/svelte/tests/runtime-runes/samples/async-error-boundary-3/main.svelte b/packages/svelte/tests/runtime-runes/samples/async-error-boundary-3/main.svelte new file mode 100644 index 0000000000..a467f7500f --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/async-error-boundary-3/main.svelte @@ -0,0 +1,19 @@ + + + + + + {#snippet failed(error)} + + {/snippet} + + +