From 8118efd115d7ca19b5cae17970cc4db16b844701 Mon Sep 17 00:00:00 2001 From: Dominic Gannaway Date: Thu, 23 Nov 2023 10:00:39 +0000 Subject: [PATCH] fix: handle undefined bubble events (#9614) Fixes #9610 --- .changeset/forty-comics-invent.md | 5 +++++ packages/svelte/src/internal/client/runtime.js | 2 +- .../samples/event-handler-undefined/_config.js | 14 ++++++++++++++ .../samples/event-handler-undefined/main.svelte | 1 + 4 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 .changeset/forty-comics-invent.md create mode 100644 packages/svelte/tests/runtime-legacy/samples/event-handler-undefined/_config.js create mode 100644 packages/svelte/tests/runtime-legacy/samples/event-handler-undefined/main.svelte diff --git a/.changeset/forty-comics-invent.md b/.changeset/forty-comics-invent.md new file mode 100644 index 0000000000..e507f3621d --- /dev/null +++ b/.changeset/forty-comics-invent.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: handle undefined bubble events diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index 57ee1ac24f..db5cf7be30 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -1530,7 +1530,7 @@ export function bubble_event($$props, event) { const events = /** @type {Record} */ (unwrap($$props).$$events)?.[ event.type ]; - const callbacks = is_array(events) ? events.slice() : [events]; + const callbacks = is_array(events) ? events.slice() : events == null ? [] : [events]; let fn; for (fn of callbacks) { // Preserve "this" context diff --git a/packages/svelte/tests/runtime-legacy/samples/event-handler-undefined/_config.js b/packages/svelte/tests/runtime-legacy/samples/event-handler-undefined/_config.js new file mode 100644 index 0000000000..662164af47 --- /dev/null +++ b/packages/svelte/tests/runtime-legacy/samples/event-handler-undefined/_config.js @@ -0,0 +1,14 @@ +import { flushSync } from 'svelte'; +import { test } from '../../test'; + +export default test({ + async test({ assert, target }) { + const input = target.querySelector('input'); + + flushSync(() => { + input?.click(); + }); + + assert.htmlEqual(target.innerHTML, ``); + } +}); diff --git a/packages/svelte/tests/runtime-legacy/samples/event-handler-undefined/main.svelte b/packages/svelte/tests/runtime-legacy/samples/event-handler-undefined/main.svelte new file mode 100644 index 0000000000..770c17901c --- /dev/null +++ b/packages/svelte/tests/runtime-legacy/samples/event-handler-undefined/main.svelte @@ -0,0 +1 @@ +