From ec52c75cc4e4d256ea1cab1d6204cdeb3e10d23c Mon Sep 17 00:00:00 2001
From: Dominic Gannaway <trueadm@users.noreply.github.com>
Date: Wed, 21 Feb 2024 15:24:36 +0000
Subject: [PATCH] fix: permit whitespace within template scripts (#10591)

---
 .changeset/rotten-experts-relax.md                     |  5 +++++
 .../phases/3-transform/client/visitors/template.js     |  2 +-
 .../runtime-legacy/samples/head-script/_config.js      |  8 ++++++++
 .../runtime-legacy/samples/head-script/main.svelte     | 10 ++++++++++
 4 files changed, 24 insertions(+), 1 deletion(-)
 create mode 100644 .changeset/rotten-experts-relax.md
 create mode 100644 packages/svelte/tests/runtime-legacy/samples/head-script/_config.js
 create mode 100644 packages/svelte/tests/runtime-legacy/samples/head-script/main.svelte

diff --git a/.changeset/rotten-experts-relax.md b/.changeset/rotten-experts-relax.md
new file mode 100644
index 0000000000..e5a7e3bbe4
--- /dev/null
+++ b/.changeset/rotten-experts-relax.md
@@ -0,0 +1,5 @@
+---
+"svelte": patch
+---
+
+fix: permit whitespace within template scripts
diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/template.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/template.js
index fd48fda1b7..1b95031bb6 100644
--- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/template.js
+++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/template.js
@@ -2081,7 +2081,7 @@ export const template_visitors = {
 			node.fragment.nodes,
 			context.path,
 			child_metadata.namespace,
-			state.preserve_whitespace,
+			node.name === 'script' || state.preserve_whitespace,
 			state.options.preserveComments
 		);
 
diff --git a/packages/svelte/tests/runtime-legacy/samples/head-script/_config.js b/packages/svelte/tests/runtime-legacy/samples/head-script/_config.js
new file mode 100644
index 0000000000..31acab66a3
--- /dev/null
+++ b/packages/svelte/tests/runtime-legacy/samples/head-script/_config.js
@@ -0,0 +1,8 @@
+import { test } from '../../test';
+
+export default test({
+	test({ assert, component, window }) {
+		document.dispatchEvent(new Event('DOMContentLoaded'));
+		assert.equal(window.document.querySelector('button')?.textContent, 'Hello world');
+	}
+});
diff --git a/packages/svelte/tests/runtime-legacy/samples/head-script/main.svelte b/packages/svelte/tests/runtime-legacy/samples/head-script/main.svelte
new file mode 100644
index 0000000000..8284f84a59
--- /dev/null
+++ b/packages/svelte/tests/runtime-legacy/samples/head-script/main.svelte
@@ -0,0 +1,10 @@
+<svelte:head>
+	<script>
+		// A comment
+		const val = 'Hello world';
+		document.addEventListener('DOMContentLoaded', () => {
+			document.querySelector('button').textContent = val;
+		});
+	</script>
+</svelte:head>
+<button />