From 25d9aa18286a0fead03f8556eddf71eccf350194 Mon Sep 17 00:00:00 2001 From: Dominic Gannaway Date: Wed, 13 Nov 2024 00:18:51 +0000 Subject: [PATCH] chore: simplify signal capturing logic (#14281) --- .../svelte/src/internal/client/reactivity/props.js | 4 ++-- packages/svelte/src/internal/client/runtime.js | 13 +++++-------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/packages/svelte/src/internal/client/reactivity/props.js b/packages/svelte/src/internal/client/reactivity/props.js index ae934c01a5..dbfb8f0337 100644 --- a/packages/svelte/src/internal/client/reactivity/props.js +++ b/packages/svelte/src/internal/client/reactivity/props.js @@ -13,7 +13,7 @@ import { derived, derived_safe_equal } from './deriveds.js'; import { active_effect, get, - is_signals_recorded, + captured_signals, set_active_effect, untrack, update @@ -390,7 +390,7 @@ export function prop(props, key, flags, fallback) { return function (/** @type {any} */ value, /** @type {boolean} */ mutation) { // legacy nonsense — need to ensure the source is invalidated when necessary // also needed for when handling inspect logic so we can inspect the correct source signal - if (is_signals_recorded) { + if (captured_signals !== null) { // set this so that we don't reset to the parent value if `d` // is invalidated because of `invalidate_inner_signals` (rather // than because the parent or child value changed) diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index e9f1c773e6..5b5b488824 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -128,8 +128,8 @@ let current_version = 0; // to prevent memory leaks, we skip adding the reaction. export let skip_reaction = false; // Handle collecting all signals which are read during a specific time frame -export let is_signals_recorded = false; -let captured_signals = new Set(); +/** @type {Set | null} */ +export let captured_signals = null; // Handling runtime component context /** @type {ComponentContext | null} */ @@ -732,7 +732,7 @@ export function get(signal) { return value; } - if (is_signals_recorded) { + if (captured_signals !== null) { captured_signals.add(signal); } @@ -800,21 +800,18 @@ export function safe_get(signal) { * @param {() => any} fn */ export function invalidate_inner_signals(fn) { - var previous_is_signals_recorded = is_signals_recorded; var previous_captured_signals = captured_signals; - is_signals_recorded = true; captured_signals = new Set(); var captured = captured_signals; var signal; try { untrack(fn); - } finally { - is_signals_recorded = previous_is_signals_recorded; - if (is_signals_recorded) { + if (previous_captured_signals !== null) { for (signal of captured_signals) { previous_captured_signals.add(signal); } } + } finally { captured_signals = previous_captured_signals; } for (signal of captured) {