From 01f1937a98ff26589524fb1c8bcab0de2649133f Mon Sep 17 00:00:00 2001 From: Paolo Ricciuti Date: Sun, 15 Feb 2026 10:44:23 +0100 Subject: [PATCH] fix: take async into consideration for dev delegated handlers (#17710) Closes #17709 ### Before submitting the PR, please make sure you do the following - [x] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [x] Prefix your PR title with `feat:`, `fix:`, `chore:`, or `docs:`. - [x] This message body should clearly illustrate what problems it solves. - [x] Ideally, include a test that fails without this PR but passes with it. - [x] If this PR changes code within `packages/svelte/src`, add a changeset (`npx changeset`). ### Tests and linting - [x] Run the tests with `pnpm test` and lint the project with `pnpm lint` --- .changeset/lemon-mails-guess.md | 5 +++++ .../phases/3-transform/client/visitors/shared/events.js | 3 ++- .../samples/event-handler-async-delegated/_config.js | 9 +++++++++ .../samples/event-handler-async-delegated/main.svelte | 8 ++++++++ 4 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 .changeset/lemon-mails-guess.md create mode 100644 packages/svelte/tests/runtime-runes/samples/event-handler-async-delegated/_config.js create mode 100644 packages/svelte/tests/runtime-runes/samples/event-handler-async-delegated/main.svelte diff --git a/.changeset/lemon-mails-guess.md b/.changeset/lemon-mails-guess.md new file mode 100644 index 0000000000..9156bac953 --- /dev/null +++ b/.changeset/lemon-mails-guess.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: take async into consideration for dev delegated handlers diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/events.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/events.js index 9485a33b3d..f01bf08694 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/events.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/events.js @@ -70,7 +70,8 @@ export function build_event(context, event_name, handler, capture, passive, dele fn = b.function( b.id(name), handler.params, - handler.body.type === 'BlockStatement' ? handler.body : b.block([b.return(handler.body)]) + handler.body.type === 'BlockStatement' ? handler.body : b.block([b.return(handler.body)]), + handler.async ); } diff --git a/packages/svelte/tests/runtime-runes/samples/event-handler-async-delegated/_config.js b/packages/svelte/tests/runtime-runes/samples/event-handler-async-delegated/_config.js new file mode 100644 index 0000000000..eb5b2a1675 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/event-handler-async-delegated/_config.js @@ -0,0 +1,9 @@ +import { flushSync } from 'svelte'; +import { test } from '../../test'; + +export default test({ + compileOptions: { + dev: true + }, + async test() {} +}); diff --git a/packages/svelte/tests/runtime-runes/samples/event-handler-async-delegated/main.svelte b/packages/svelte/tests/runtime-runes/samples/event-handler-async-delegated/main.svelte new file mode 100644 index 0000000000..bffcad6059 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/event-handler-async-delegated/main.svelte @@ -0,0 +1,8 @@ +