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 1800479a68..bf6041abcd 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
@@ -2351,12 +2351,15 @@ export function server_component(analysis, options) {
if (options.dev) push_args.push(b.id(analysis.name));
const component_block = b.block([
- b.stmt(b.call('$.push', ...push_args)),
.../** @type {import('estree').Statement[]} */ (instance.body),
- .../** @type {import('estree').Statement[]} */ (template.body),
- b.stmt(b.call('$.pop'))
+ .../** @type {import('estree').Statement[]} */ (template.body)
]);
+ if (analysis.needs_context || options.dev) {
+ component_block.body.unshift(b.stmt(b.call('$.push', ...push_args)));
+ component_block.body.push(b.stmt(b.call('$.pop')));
+ }
+
if (analysis.uses_rest_props) {
/** @type {string[]} */
const named_props = analysis.exports.map(({ name, alias }) => alias ?? name);
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 c4d2da79d1..dc0724ea9a 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
@@ -2,8 +2,6 @@ import * as $ from "svelte/internal/server";
import TextInput from './Child.svelte';
export default function Bind_component_snippet($$payload, $$props) {
- $.push();
-
let value = '';
const _snippet = snippet;
@@ -37,5 +35,4 @@ export default function Bind_component_snippet($$payload, $$props) {
} while (!$$settled);
$.assign_payload($$payload, $$inner_payload);
- $.pop();
}
\ 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 9f00d97ad4..dfd5203a0b 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,9 +1,7 @@
import * as $ from "svelte/internal/server";
export default function Bind_this($$payload, $$props) {
- $.push();
$$payload.out += ``;
Foo($$payload, {});
$$payload.out += ``;
- $.pop();
}
\ 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 7686334ab2..0161655811 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,12 +1,9 @@
import * as $ from "svelte/internal/server";
export default function Main($$payload, $$props) {
- $.push();
-
// needs to be a snapshot test because jsdom does auto-correct the attribute casing
let x = 'test';
let y = () => 'test';
$$payload.out += `
`;
- $.pop();
}
\ 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 9086725386..2f6f50ef2d 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,8 +1,6 @@
import * as $ from "svelte/internal/server";
export default function Each_string_template($$payload, $$props) {
- $.push();
-
const each_array = $.ensure_array_like(['foo', 'bar', 'baz']);
$$payload.out += ``;
@@ -16,5 +14,4 @@ export default function Each_string_template($$payload, $$props) {
}
$$payload.out += "";
- $.pop();
}
\ 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 b096c4b6c0..6a5afe0d61 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,8 +1,6 @@
import * as $ from "svelte/internal/server";
export default function Function_prop_no_getter($$payload, $$props) {
- $.push();
-
let count = 0;
function onmouseup() {
@@ -24,5 +22,4 @@ export default function Function_prop_no_getter($$payload, $$props) {
});
$$payload.out += ``;
- $.pop();
}
\ No newline at end of file
diff --git a/packages/svelte/tests/snapshot/samples/hello-world/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/hello-world/_expected/server/index.svelte.js
index 6f9e3cf0c5..a3d808796c 100644
--- a/packages/svelte/tests/snapshot/samples/hello-world/_expected/server/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/hello-world/_expected/server/index.svelte.js
@@ -1,7 +1,5 @@
import * as $ from "svelte/internal/server";
export default function Hello_world($$payload, $$props) {
- $.push();
$$payload.out += `hello world
`;
- $.pop();
}
\ No newline at end of file
diff --git a/packages/svelte/tests/snapshot/samples/hmr/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/hmr/_expected/server/index.svelte.js
index 69927bbfb9..35a7408010 100644
--- a/packages/svelte/tests/snapshot/samples/hmr/_expected/server/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/hmr/_expected/server/index.svelte.js
@@ -1,7 +1,5 @@
import * as $ from "svelte/internal/server";
export default function Hmr($$payload, $$props) {
- $.push();
$$payload.out += `hello world
`;
- $.pop();
}
\ No newline at end of file
diff --git a/packages/svelte/tests/snapshot/samples/state-proxy-literal/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/state-proxy-literal/_expected/server/index.svelte.js
index 81f1cf1346..2e0ff3b390 100644
--- a/packages/svelte/tests/snapshot/samples/state-proxy-literal/_expected/server/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/state-proxy-literal/_expected/server/index.svelte.js
@@ -1,8 +1,6 @@
import * as $ from "svelte/internal/server";
export default function State_proxy_literal($$payload, $$props) {
- $.push();
-
let str = '';
let tpl = ``;
@@ -14,5 +12,4 @@ export default function State_proxy_literal($$payload, $$props) {
}
$$payload.out += ` `;
- $.pop();
}
\ No newline at end of file
diff --git a/packages/svelte/tests/snapshot/samples/svelte-element/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/svelte-element/_expected/server/index.svelte.js
index 2cf8edd1ee..2513822d91 100644
--- a/packages/svelte/tests/snapshot/samples/svelte-element/_expected/server/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/svelte-element/_expected/server/index.svelte.js
@@ -1,12 +1,9 @@
import * as $ from "svelte/internal/server";
export default function Svelte_element($$payload, $$props) {
- $.push();
-
let { tag = 'hr' } = $$props;
$$payload.out += ``;
if (tag) $.element($$payload, tag, () => {}, () => {});
$$payload.out += ``;
- $.pop();
}
\ No newline at end of file