From 786b50a48d42269499d9a373ab619671ff49218c Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Fri, 6 Jun 2025 11:24:54 -0400 Subject: [PATCH] tidy up --- .../src/internal/client/error-handling.js | 19 +++++++++---- .../svelte/src/internal/client/runtime.js | 27 +++++-------------- 2 files changed, 20 insertions(+), 26 deletions(-) diff --git a/packages/svelte/src/internal/client/error-handling.js b/packages/svelte/src/internal/client/error-handling.js index 9613cfa798..66e93bea10 100644 --- a/packages/svelte/src/internal/client/error-handling.js +++ b/packages/svelte/src/internal/client/error-handling.js @@ -2,8 +2,9 @@ import { DEV } from 'esm-env'; import { FILENAME } from '../../constants.js'; import { is_firefox } from './dom/operations.js'; -import { BOUNDARY_EFFECT } from './constants.js'; +import { BOUNDARY_EFFECT, EFFECT_RAN } from './constants.js'; import { define_property } from '../shared/utils.js'; +import { active_effect } from './runtime.js'; // Used for DEV time error handling /** @param {WeakSet} value */ @@ -11,14 +12,22 @@ const adjusted_errors = new WeakSet(); /** * @param {unknown} error - * @param {Effect} effect */ -export function handle_error(error, effect) { +export function handle_error(error) { + var effect = /** @type {Effect} */ (active_effect); + if (DEV && error instanceof Error) { adjust_error(error, effect); } - invoke_error_boundary(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; + } } /** @@ -52,7 +61,7 @@ export function invoke_error_boundary(error, effect) { * @param {Error} error * @param {Effect} effect */ -export function adjust_error(error, effect) { +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 0199f22069..a60a25ad06 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -1,4 +1,4 @@ -/** @import { ComponentContext, Derived, Effect, Reaction, Signal, Source, Value } from '#client' */ +/** @import { Derived, Effect, Reaction, Signal, Source, Value } from '#client' */ import { DEV } from 'esm-env'; import { define_property, get_descriptors, get_prototype_of, index_of } from '../shared/utils.js'; import { @@ -22,9 +22,7 @@ import { ROOT_EFFECT, LEGACY_DERIVED_PROP, DISCONNECTED, - BOUNDARY_EFFECT, - EFFECT_IS_UPDATING, - EFFECT_RAN + EFFECT_IS_UPDATING } from './constants.js'; import { flush_tasks } from './dom/task.js'; import { internal_set, old_values } from './reactivity/sources.js'; @@ -40,7 +38,7 @@ import { set_component_context, set_dev_current_component_function } from './context.js'; -import { adjust_error, handle_error, invoke_error_boundary } from './error-handling.js'; +import { handle_error, invoke_error_boundary } from './error-handling.js'; let is_flushing = false; @@ -345,20 +343,7 @@ export function update_reaction(reaction) { return result; } catch (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; - } + handle_error(error); } finally { new_deps = previous_deps; skipped_deps = previous_skipped_deps; @@ -532,14 +517,14 @@ function infinite_loop_guard() { if (last_scheduled_effect !== null) { if (DEV) { try { - handle_error(error, last_scheduled_effect); + invoke_error_boundary(error, last_scheduled_effect); } catch (e) { // Only log the effect stack if the error is re-thrown log_effect_stack(); throw e; } } else { - handle_error(error, last_scheduled_effect); + invoke_error_boundary(error, last_scheduled_effect); } } else { if (DEV) {