From 80141bf211355beeaf43e07ef57e147eca10b3c6 Mon Sep 17 00:00:00 2001
From: Craig Jennings <1683368+craig-jennings@users.noreply.github.com>
Date: Mon, 22 Apr 2024 11:23:34 -0500
Subject: [PATCH 1/4] fix: avoid hoisting error by using 'let' instead of 'var'
---
.../src/internal/client/dom/elements/attributes.js | 2 +-
.../samples/event-attribute-after-spread/_config.js | 13 +++++++++++++
.../event-attribute-after-spread/main.svelte | 7 +++++++
3 files changed, 21 insertions(+), 1 deletion(-)
create mode 100644 packages/svelte/tests/runtime-runes/samples/event-attribute-after-spread/_config.js
create mode 100644 packages/svelte/tests/runtime-runes/samples/event-attribute-after-spread/main.svelte
diff --git a/packages/svelte/src/internal/client/dom/elements/attributes.js b/packages/svelte/src/internal/client/dom/elements/attributes.js
index 67e336744fc7..a2ecdd983064 100644
--- a/packages/svelte/src/internal/client/dom/elements/attributes.js
+++ b/packages/svelte/src/internal/client/dom/elements/attributes.js
@@ -111,7 +111,7 @@ export function set_attributes(element, prev, next, lowercase_attributes, css_ha
var events = [];
for (key in next) {
- var value = next[key];
+ let value = next[key];
if (value === prev?.[key]) continue;
var prefix = key[0] + key[1]; // this is faster than key.slice(0, 2)
diff --git a/packages/svelte/tests/runtime-runes/samples/event-attribute-after-spread/_config.js b/packages/svelte/tests/runtime-runes/samples/event-attribute-after-spread/_config.js
new file mode 100644
index 000000000000..09975947e647
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/event-attribute-after-spread/_config.js
@@ -0,0 +1,13 @@
+import { test } from '../../test';
+
+export default test({
+ async test({ assert, target }) {
+ const input = target.querySelector('input');
+
+ input?.dispatchEvent(new Event('input', { bubbles: true }));
+
+ await Promise.resolve();
+
+ assert.htmlEqual(target.innerHTML, 'true ');
+ }
+});
diff --git a/packages/svelte/tests/runtime-runes/samples/event-attribute-after-spread/main.svelte b/packages/svelte/tests/runtime-runes/samples/event-attribute-after-spread/main.svelte
new file mode 100644
index 000000000000..c854071f3e0a
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/event-attribute-after-spread/main.svelte
@@ -0,0 +1,7 @@
+
+
+{changed}
+ (changed = true)} class="hello" />
From b45c7d09f15ff011ceffef01c4192a4ff47b8a59 Mon Sep 17 00:00:00 2001
From: Craig Jennings <1683368+craig-jennings@users.noreply.github.com>
Date: Mon, 22 Apr 2024 12:35:55 -0500
Subject: [PATCH 2/4] chore: add changeset
---
.changeset/plenty-starfishes-dress.md | 5 +++++
1 file changed, 5 insertions(+)
create mode 100644 .changeset/plenty-starfishes-dress.md
diff --git a/.changeset/plenty-starfishes-dress.md b/.changeset/plenty-starfishes-dress.md
new file mode 100644
index 000000000000..38b2201e9e14
--- /dev/null
+++ b/.changeset/plenty-starfishes-dress.md
@@ -0,0 +1,5 @@
+---
+"svelte": patch
+---
+
+fix: avoid hoisting error by using 'let' instead of 'var'
From d77699f4882e3a6e97c451e885f9058e4a07c1d0 Mon Sep 17 00:00:00 2001
From: Simon H <5968653+dummdidumm@users.noreply.github.com>
Date: Mon, 22 Apr 2024 19:49:59 +0200
Subject: [PATCH 3/4] Update
packages/svelte/src/internal/client/dom/elements/attributes.js
---
packages/svelte/src/internal/client/dom/elements/attributes.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/packages/svelte/src/internal/client/dom/elements/attributes.js b/packages/svelte/src/internal/client/dom/elements/attributes.js
index a2ecdd983064..7c920492f311 100644
--- a/packages/svelte/src/internal/client/dom/elements/attributes.js
+++ b/packages/svelte/src/internal/client/dom/elements/attributes.js
@@ -111,6 +111,7 @@ export function set_attributes(element, prev, next, lowercase_attributes, css_ha
var events = [];
for (key in next) {
+ // let instead of var because referenced in a closure
let value = next[key];
if (value === prev?.[key]) continue;
From 583de86140dd1bc916f15ba73af1f46dbd146581 Mon Sep 17 00:00:00 2001
From: Craig Jennings <1683368+craig-jennings@users.noreply.github.com>
Date: Mon, 22 Apr 2024 13:05:31 -0500
Subject: [PATCH 4/4] fix: scope 'event_name' and 'opts' correctly as well
---
.../svelte/src/internal/client/dom/elements/attributes.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/packages/svelte/src/internal/client/dom/elements/attributes.js b/packages/svelte/src/internal/client/dom/elements/attributes.js
index 7c920492f311..58519d9baa0f 100644
--- a/packages/svelte/src/internal/client/dom/elements/attributes.js
+++ b/packages/svelte/src/internal/client/dom/elements/attributes.js
@@ -120,8 +120,8 @@ export function set_attributes(element, prev, next, lowercase_attributes, css_ha
if (prefix === 'on') {
/** @type {{ capture?: true }} */
- var opts = {};
- var event_name = key.slice(2);
+ const opts = {};
+ let event_name = key.slice(2);
var delegated = DelegatedEvents.includes(event_name);
if (