From 5256e491eb8c0353c664989c1b1b51e057723352 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Fri, 6 Jun 2025 08:31:22 -0400 Subject: [PATCH] WIP --- .../src/internal/client/error-handling.js | 2 +- .../svelte/src/internal/client/runtime.js | 25 +++++++++---------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/packages/svelte/src/internal/client/error-handling.js b/packages/svelte/src/internal/client/error-handling.js index 410b1e4a80..c462b207ce 100644 --- a/packages/svelte/src/internal/client/error-handling.js +++ b/packages/svelte/src/internal/client/error-handling.js @@ -77,7 +77,7 @@ function should_rethrow_error(effect) { * @param {Error} error * @param {Effect} effect */ -function adjust_error(error, effect) { +export function adjust_error(error, effect) { if (adjusted_errors.has(error)) return; adjusted_errors.add(error); diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index 7745f975f8..0199f22069 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -40,7 +40,7 @@ import { set_component_context, set_dev_current_component_function } from './context.js'; -import { handle_error, invoke_error_boundary } from './error-handling.js'; +import { adjust_error, handle_error, invoke_error_boundary } from './error-handling.js'; let is_flushing = false; @@ -345,18 +345,17 @@ export function update_reaction(reaction) { return result; } catch (error) { - // TODO think we can just use active_effect here? - var effect = get_effect(reaction); - - if (effect) { - if ((effect.f & EFFECT_RAN) !== 0) { - invoke_error_boundary(error, effect); - } else if ((effect.f & BOUNDARY_EFFECT) !== 0) { - // invoke directly - effect.fn(error); - } else { - throw error; - } + var effect = /** @type {Effect} */ (active_effect); + + if (DEV && error instanceof Error) { + adjust_error(error, effect); + } + + if ((effect.f & EFFECT_RAN) !== 0) { + invoke_error_boundary(error, effect); + } else if ((effect.f & BOUNDARY_EFFECT) !== 0) { + // invoke directly + effect.fn(error); } else { throw error; }