${$.escape(title)}
we don't need to traverse these nodes
or
these
ones
${$.html(content)}these
trailing
nodes
can
be
completely
ignored
diff --git a/packages/svelte/src/compiler/phases/2-analyze/visitors/AwaitExpression.js b/packages/svelte/src/compiler/phases/2-analyze/visitors/AwaitExpression.js index 5e449afb98..14b43dd0fa 100644 --- a/packages/svelte/src/compiler/phases/2-analyze/visitors/AwaitExpression.js +++ b/packages/svelte/src/compiler/phases/2-analyze/visitors/AwaitExpression.js @@ -43,7 +43,7 @@ export function AwaitExpression(node, context) { e.legacy_await_invalid(node); } - context.state.analysis.suspends_without_fallback ||= !context.state.boundary?.metadata.pending; + context.state.analysis.suspends_without_fallback ||= context.state.ast_type === 'instance'; } context.next(); diff --git a/packages/svelte/src/compiler/phases/3-transform/server/transform-server.js b/packages/svelte/src/compiler/phases/3-transform/server/transform-server.js index 84f4779ba0..287ffd1a2e 100644 --- a/packages/svelte/src/compiler/phases/3-transform/server/transform-server.js +++ b/packages/svelte/src/compiler/phases/3-transform/server/transform-server.js @@ -238,16 +238,16 @@ export function server_component(analysis, options) { template.body.push(b.stmt(b.call('$.bind_props', b.id('$$props'), b.object(props)))); } - const component_block = b.block([ - call_child_payload( - b.block([ - .../** @type {Statement[]} */ (instance.body), - .../** @type {Statement[]} */ (template.body) - ]), - analysis.suspends_without_fallback - ) + let component_block = b.block([ + .../** @type {Statement[]} */ (instance.body), + .../** @type {Statement[]} */ (template.body) ]); + // TODO 'suspends_without_fallback' is probably a misnomer now + if (analysis.suspends_without_fallback) { + component_block = b.block([call_child_payload(component_block, true)]); + } + // trick esrap into including comments component_block.loc = instance.loc; diff --git a/packages/svelte/tests/snapshot/samples/async-each-fallback-hoisting/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/async-each-fallback-hoisting/_expected/server/index.svelte.js index 29b6460b99..d497aefa0d 100644 --- a/packages/svelte/tests/snapshot/samples/async-each-fallback-hoisting/_expected/server/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/async-each-fallback-hoisting/_expected/server/index.svelte.js @@ -2,28 +2,26 @@ import * as $ from 'svelte/internal/server'; export default function Async_each_fallback_hoisting($$payload) { $$payload.child(async ($$payload) => { - $$payload.child(async ($$payload) => { - const each_array = $.ensure_array_like(await Promise.resolve([])); + const each_array = $.ensure_array_like(await Promise.resolve([])); - if (each_array.length !== 0) { - $$payload.push(''); + if (each_array.length !== 0) { + $$payload.push(''); - for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) { - let item = each_array[$$index]; - - $$payload.child(async ($$payload) => { - $$payload.push(`${$.escape(await Promise.reject('This should never be reached'))}`); - }); - } - } else { - $$payload.push(''); + for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) { + let item = each_array[$$index]; $$payload.child(async ($$payload) => { - $$payload.push(`${$.escape(await Promise.resolve(4))}`); + $$payload.push(`${$.escape(await Promise.reject('This should never be reached'))}`); }); } + } else { + $$payload.push(''); + + $$payload.child(async ($$payload) => { + $$payload.push(`${$.escape(await Promise.resolve(4))}`); + }); + } - $$payload.push(``); - }); + $$payload.push(``); }); } \ No newline at end of file diff --git a/packages/svelte/tests/snapshot/samples/async-each-hoisting/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/async-each-hoisting/_expected/server/index.svelte.js index 55e45c43a6..a2223cf87f 100644 --- a/packages/svelte/tests/snapshot/samples/async-each-hoisting/_expected/server/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/async-each-hoisting/_expected/server/index.svelte.js @@ -1,25 +1,23 @@ import * as $ from 'svelte/internal/server'; export default function Async_each_hoisting($$payload) { - $$payload.child(async ($$payload) => { - const first = Promise.resolve(1); - const second = Promise.resolve(2); - const third = Promise.resolve(3); + const first = Promise.resolve(1); + const second = Promise.resolve(2); + const third = Promise.resolve(3); - $$payload.child(async ($$payload) => { - const each_array = $.ensure_array_like(await Promise.resolve([first, second, third])); + $$payload.child(async ($$payload) => { + const each_array = $.ensure_array_like(await Promise.resolve([first, second, third])); - $$payload.push(``); + $$payload.push(``); - for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) { - let item = each_array[$$index]; + for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) { + let item = each_array[$$index]; - $$payload.child(async ($$payload) => { - $$payload.push(`${$.escape(await item)}`); - }); - } + $$payload.child(async ($$payload) => { + $$payload.push(`${$.escape(await item)}`); + }); + } - $$payload.push(``); - }); + $$payload.push(``); }); } \ No newline at end of file diff --git a/packages/svelte/tests/snapshot/samples/async-if-alternate-hoisting/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/async-if-alternate-hoisting/_expected/server/index.svelte.js index a6225be0a4..d297d63202 100644 --- a/packages/svelte/tests/snapshot/samples/async-if-alternate-hoisting/_expected/server/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/async-if-alternate-hoisting/_expected/server/index.svelte.js @@ -2,22 +2,20 @@ import * as $ from 'svelte/internal/server'; export default function Async_if_alternate_hoisting($$payload) { $$payload.child(async ($$payload) => { - $$payload.child(async ($$payload) => { - if (await Promise.resolve(false)) { - $$payload.push(''); + if (await Promise.resolve(false)) { + $$payload.push(''); - $$payload.child(async ($$payload) => { - $$payload.push(`${$.escape(await Promise.reject('no no no'))}`); - }); - } else { - $$payload.push(''); + $$payload.child(async ($$payload) => { + $$payload.push(`${$.escape(await Promise.reject('no no no'))}`); + }); + } else { + $$payload.push(''); - $$payload.child(async ($$payload) => { - $$payload.push(`${$.escape(await Promise.resolve('yes yes yes'))}`); - }); - } + $$payload.child(async ($$payload) => { + $$payload.push(`${$.escape(await Promise.resolve('yes yes yes'))}`); + }); + } - $$payload.push(``); - }); + $$payload.push(``); }); } \ No newline at end of file diff --git a/packages/svelte/tests/snapshot/samples/async-if-hoisting/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/async-if-hoisting/_expected/server/index.svelte.js index eb15069682..6ec5ff92a0 100644 --- a/packages/svelte/tests/snapshot/samples/async-if-hoisting/_expected/server/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/async-if-hoisting/_expected/server/index.svelte.js @@ -2,22 +2,20 @@ import * as $ from 'svelte/internal/server'; export default function Async_if_hoisting($$payload) { $$payload.child(async ($$payload) => { - $$payload.child(async ($$payload) => { - if (await Promise.resolve(true)) { - $$payload.push(''); + if (await Promise.resolve(true)) { + $$payload.push(''); - $$payload.child(async ($$payload) => { - $$payload.push(`${$.escape(await Promise.resolve('yes yes yes'))}`); - }); - } else { - $$payload.push(''); + $$payload.child(async ($$payload) => { + $$payload.push(`${$.escape(await Promise.resolve('yes yes yes'))}`); + }); + } else { + $$payload.push(''); - $$payload.child(async ($$payload) => { - $$payload.push(`${$.escape(await Promise.reject('no no no'))}`); - }); - } + $$payload.child(async ($$payload) => { + $$payload.push(`${$.escape(await Promise.reject('no no no'))}`); + }); + } - $$payload.push(``); - }); + $$payload.push(``); }); } \ No newline at end of file diff --git a/packages/svelte/tests/snapshot/samples/await-block-scope/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/await-block-scope/_expected/server/index.svelte.js index affe2e4be3..c0e3512178 100644 --- a/packages/svelte/tests/snapshot/samples/await-block-scope/_expected/server/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/await-block-scope/_expected/server/index.svelte.js @@ -1,16 +1,14 @@ import * as $ from 'svelte/internal/server'; export default function Await_block_scope($$payload) { - $$payload.child(($$payload) => { - let counter = { count: 0 }; - const promise = Promise.resolve(counter); + let counter = { count: 0 }; + const promise = Promise.resolve(counter); - function increment() { - counter.count += 1; - } + function increment() { + counter.count += 1; + } - $$payload.push(` `); - $.await($$payload, promise, () => {}, (counter) => {}); - $$payload.push(` ${$.escape(counter.count)}`); - }); + $$payload.push(` `); + $.await($$payload, promise, () => {}, (counter) => {}); + $$payload.push(` ${$.escape(counter.count)}`); } \ No newline at end of file diff --git a/packages/svelte/tests/snapshot/samples/bind-component-snippet/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/bind-component-snippet/_expected/server/index.svelte.js index e2be5dc5b7..f2b687489b 100644 --- a/packages/svelte/tests/snapshot/samples/bind-component-snippet/_expected/server/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/bind-component-snippet/_expected/server/index.svelte.js @@ -6,33 +6,31 @@ function snippet($$payload) { } export default function Bind_component_snippet($$payload) { - $$payload.child(($$payload) => { - let value = ''; - const _snippet = snippet; - let $$settled = true; - let $$inner_payload; + let value = ''; + const _snippet = snippet; + let $$settled = true; + let $$inner_payload; - function $$render_inner($$payload) { - TextInput($$payload, { - get value() { - return value; - }, + function $$render_inner($$payload) { + TextInput($$payload, { + get value() { + return value; + }, - set value($$value) { - value = $$value; - $$settled = false; - } - }); + set value($$value) { + value = $$value; + $$settled = false; + } + }); - $$payload.push(` value: ${$.escape(value)}`); - } + $$payload.push(` value: ${$.escape(value)}`); + } - do { - $$settled = true; - $$inner_payload = $$payload.copy(); - $$render_inner($$inner_payload); - } while (!$$settled); + do { + $$settled = true; + $$inner_payload = $$payload.copy(); + $$render_inner($$inner_payload); + } while (!$$settled); - $$payload.subsume($$inner_payload); - }); + $$payload.subsume($$inner_payload); } \ No newline at end of file diff --git a/packages/svelte/tests/snapshot/samples/bind-this/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/bind-this/_expected/server/index.svelte.js index 286da319ed..148573766f 100644 --- a/packages/svelte/tests/snapshot/samples/bind-this/_expected/server/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/bind-this/_expected/server/index.svelte.js @@ -1,7 +1,5 @@ import * as $ from 'svelte/internal/server'; export default function Bind_this($$payload) { - $$payload.child(($$payload) => { - Foo($$payload, {}); - }); + Foo($$payload, {}); } \ No newline at end of file diff --git a/packages/svelte/tests/snapshot/samples/class-state-field-constructor-assignment/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/class-state-field-constructor-assignment/_expected/server/index.svelte.js index f91874e7c1..abfc264fea 100644 --- a/packages/svelte/tests/snapshot/samples/class-state-field-constructor-assignment/_expected/server/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/class-state-field-constructor-assignment/_expected/server/index.svelte.js @@ -3,38 +3,36 @@ import * as $ from 'svelte/internal/server'; export default function Class_state_field_constructor_assignment($$payload, $$props) { $.push(); - $$payload.child(($$payload) => { - class Foo { - a = 0; - #b; - #foo = $.derived(() => ({ bar: this.a * 2 })); - - get foo() { - return this.#foo(); - } - - set foo($$value) { - return this.#foo($$value); - } - - #bar = $.derived(() => ({ baz: this.foo })); - - get bar() { - return this.#bar(); - } - - set bar($$value) { - return this.#bar($$value); - } - - constructor() { - this.a = 1; - this.#b = 2; - this.foo.bar = 3; - this.bar = 4; - } + class Foo { + a = 0; + #b; + #foo = $.derived(() => ({ bar: this.a * 2 })); + + get foo() { + return this.#foo(); + } + + set foo($$value) { + return this.#foo($$value); + } + + #bar = $.derived(() => ({ baz: this.foo })); + + get bar() { + return this.#bar(); + } + + set bar($$value) { + return this.#bar($$value); + } + + constructor() { + this.a = 1; + this.#b = 2; + this.foo.bar = 3; + this.bar = 4; } - }); + } $.pop(); } \ No newline at end of file diff --git a/packages/svelte/tests/snapshot/samples/delegated-locally-declared-shadowed/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/delegated-locally-declared-shadowed/_expected/server/index.svelte.js index a442386d9b..8f6aec31e2 100644 --- a/packages/svelte/tests/snapshot/samples/delegated-locally-declared-shadowed/_expected/server/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/delegated-locally-declared-shadowed/_expected/server/index.svelte.js @@ -1,15 +1,13 @@ import * as $ from 'svelte/internal/server'; export default function Delegated_locally_declared_shadowed($$payload) { - $$payload.child(($$payload) => { - const each_array = $.ensure_array_like({ length: 1 }); + const each_array = $.ensure_array_like({ length: 1 }); - $$payload.push(``); + $$payload.push(``); - for (let index = 0, $$length = each_array.length; index < $$length; index++) { - $$payload.push(``); - } + for (let index = 0, $$length = each_array.length; index < $$length; index++) { + $$payload.push(``); + } - $$payload.push(``); - }); + $$payload.push(``); } \ No newline at end of file diff --git a/packages/svelte/tests/snapshot/samples/dynamic-attributes-casing/_expected/server/main.svelte.js b/packages/svelte/tests/snapshot/samples/dynamic-attributes-casing/_expected/server/main.svelte.js index ef79df5e1d..deaeaf6bfa 100644 --- a/packages/svelte/tests/snapshot/samples/dynamic-attributes-casing/_expected/server/main.svelte.js +++ b/packages/svelte/tests/snapshot/samples/dynamic-attributes-casing/_expected/server/main.svelte.js @@ -1,10 +1,10 @@ import * as $ from 'svelte/internal/server'; export default function Main($$payload) { - $$payload.child(($$payload) => { - let x = 'test'; - let y = () => 'test'; + // needs to be a snapshot test because jsdom does auto-correct the attribute casing + let x = 'test'; - $$payload.push(`
index: ${$.escape(i)}
`); - } + for (let i = 0, $$length = each_array.length; i < $$length; i++) { + $$payload.push(`index: ${$.escape(i)}
`); + } - $$payload.push(``); - }); + $$payload.push(``); } \ No newline at end of file diff --git a/packages/svelte/tests/snapshot/samples/each-string-template/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/each-string-template/_expected/server/index.svelte.js index 1b935b96e0..6544baad6f 100644 --- a/packages/svelte/tests/snapshot/samples/each-string-template/_expected/server/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/each-string-template/_expected/server/index.svelte.js @@ -1,17 +1,15 @@ import * as $ from 'svelte/internal/server'; export default function Each_string_template($$payload) { - $$payload.child(($$payload) => { - const each_array = $.ensure_array_like(['foo', 'bar', 'baz']); + const each_array = $.ensure_array_like(['foo', 'bar', 'baz']); - $$payload.push(``); + $$payload.push(``); - for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) { - let thing = each_array[$$index]; + for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) { + let thing = each_array[$$index]; - $$payload.push(`${$.escape(thing)}, `); - } + $$payload.push(`${$.escape(thing)}, `); + } - $$payload.push(``); - }); + $$payload.push(``); } \ No newline at end of file diff --git a/packages/svelte/tests/snapshot/samples/function-prop-no-getter/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/function-prop-no-getter/_expected/server/index.svelte.js index 49c3642811..03b3fb93d7 100644 --- a/packages/svelte/tests/snapshot/samples/function-prop-no-getter/_expected/server/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/function-prop-no-getter/_expected/server/index.svelte.js @@ -1,27 +1,25 @@ import * as $ from 'svelte/internal/server'; export default function Function_prop_no_getter($$payload) { - $$payload.child(($$payload) => { - let count = 0; + let count = 0; - function onmouseup() { - count += 2; - } + function onmouseup() { + count += 2; + } - const plusOne = (num) => num + 1; + const plusOne = (num) => num + 1; - Button($$payload, { - onmousedown: () => count += 1, - onmouseup, - onmouseenter: () => count = plusOne(count), + Button($$payload, { + onmousedown: () => count += 1, + onmouseup, + onmouseenter: () => count = plusOne(count), - children: ($$payload) => { - $$payload.child(($$payload) => { - $$payload.push(`clicks: ${$.escape(count)}`); - }); - }, + children: ($$payload) => { + $$payload.child(($$payload) => { + $$payload.push(`clicks: ${$.escape(count)}`); + }); + }, - $$slots: { default: true } - }); + $$slots: { default: true } }); } \ No newline at end of file diff --git a/packages/svelte/tests/snapshot/samples/functional-templating/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/functional-templating/_expected/server/index.svelte.js index d0d7092dc8..e23a50cff5 100644 --- a/packages/svelte/tests/snapshot/samples/functional-templating/_expected/server/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/functional-templating/_expected/server/index.svelte.js @@ -1,7 +1,5 @@ import * as $ from 'svelte/internal/server'; export default function Functional_templating($$payload) { - $$payload.child(($$payload) => { - $$payload.push(`child element
another child element
child element
another child element
0
${$.escape(location.href)}
`); - Child($$payload, { prop: encodeURIComponent('hello') }); - $$payload.push(``); - }); + $$payload.push(`0
${$.escape(location.href)}
`); + Child($$payload, { prop: encodeURIComponent('hello') }); + $$payload.push(``); } \ No newline at end of file diff --git a/packages/svelte/tests/snapshot/samples/skip-static-subtree/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/skip-static-subtree/_expected/server/index.svelte.js index 8e22d31463..e49480f682 100644 --- a/packages/svelte/tests/snapshot/samples/skip-static-subtree/_expected/server/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/skip-static-subtree/_expected/server/index.svelte.js @@ -1,9 +1,7 @@ import * as $ from 'svelte/internal/server'; export default function Skip_static_subtree($$payload, $$props) { - $$payload.child(($$payload) => { - let { title, content } = $$props; + let { title, content } = $$props; - $$payload.push(`we don't need to traverse these nodes
or
these
ones
${$.html(content)}these
trailing
nodes
can
be
completely
ignored
we don't need to traverse these nodes
or
these
ones
${$.html(content)}these
trailing
nodes
can
be
completely
ignored
${$.escape(text1())}${$.escape(text2())}
`); - }); + $$payload.push(`${$.escape(text1())}${$.escape(text2())}
`); } \ No newline at end of file