diff --git a/.changeset/clear-birds-invite.md b/.changeset/clear-birds-invite.md new file mode 100644 index 0000000000..3c1b73d845 --- /dev/null +++ b/.changeset/clear-birds-invite.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: ensure `$inspect` after top level await doesn't break builds diff --git a/packages/svelte/src/compiler/phases/3-transform/shared/transform-async.js b/packages/svelte/src/compiler/phases/3-transform/shared/transform-async.js index 95b9f585d3..5c8f901d7c 100644 --- a/packages/svelte/src/compiler/phases/3-transform/shared/transform-async.js +++ b/packages/svelte/src/compiler/phases/3-transform/shared/transform-async.js @@ -95,7 +95,8 @@ export function transform_body(instance_body, runner, transform) { ); if (expression.type === 'EmptyStatement') { - return null; + // Keep indices stable for async sequencing while avoiding array holes in run([...]). + return b.thunk(b.void0, false); } return expression.type === 'AwaitExpression' diff --git a/packages/svelte/tests/runtime-runes/samples/async-inspect-build/_config.js b/packages/svelte/tests/runtime-runes/samples/async-inspect-build/_config.js new file mode 100644 index 0000000000..58dd53c762 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/async-inspect-build/_config.js @@ -0,0 +1,10 @@ +import { tick } from 'svelte'; +import { test } from '../../test'; + +export default test({ + ssrHtml: 'works', + async test({ assert, target }) { + await tick(); + assert.htmlEqual(target.innerHTML, 'works'); + } +}); diff --git a/packages/svelte/tests/runtime-runes/samples/async-inspect-build/main.svelte b/packages/svelte/tests/runtime-runes/samples/async-inspect-build/main.svelte new file mode 100644 index 0000000000..a138475293 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/async-inspect-build/main.svelte @@ -0,0 +1,7 @@ + + +works diff --git a/packages/svelte/tests/snapshot/samples/async-top-level-inspect-server/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/async-top-level-inspect-server/_expected/client/index.svelte.js index e8aa8dfa11..668c936e4e 100644 --- a/packages/svelte/tests/snapshot/samples/async-top-level-inspect-server/_expected/client/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/async-top-level-inspect-server/_expected/client/index.svelte.js @@ -6,7 +6,7 @@ var root = $.from_html(`
`); export default function Async_top_level_inspect_server($$anchor) { var data; - var $$promises = $.run([async () => data = await Promise.resolve(42),,]); + var $$promises = $.run([async () => data = await Promise.resolve(42), () => void 0]); var p = root(); var text = $.child(p, true); diff --git a/packages/svelte/tests/snapshot/samples/async-top-level-inspect-server/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/async-top-level-inspect-server/_expected/server/index.svelte.js index cff5f2d569..5c3afc75d7 100644 --- a/packages/svelte/tests/snapshot/samples/async-top-level-inspect-server/_expected/server/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/async-top-level-inspect-server/_expected/server/index.svelte.js @@ -3,7 +3,7 @@ import * as $ from 'svelte/internal/server'; export default function Async_top_level_inspect_server($$renderer) { var data; - var $$promises = $$renderer.run([async () => data = await Promise.resolve(42),,]); + var $$promises = $$renderer.run([async () => data = await Promise.resolve(42), () => void 0]); $$renderer.push(`
`); $$renderer.async([$$promises[1]], ($$renderer) => $$renderer.push(() => $.escape(data)));