chore: simplify signal capturing logic (#14281)

pull/13429/merge
Dominic Gannaway 3 days ago committed by GitHub
parent f5a7d49216
commit 25d9aa1828
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -13,7 +13,7 @@ import { derived, derived_safe_equal } from './deriveds.js';
import { import {
active_effect, active_effect,
get, get,
is_signals_recorded, captured_signals,
set_active_effect, set_active_effect,
untrack, untrack,
update update
@ -390,7 +390,7 @@ export function prop(props, key, flags, fallback) {
return function (/** @type {any} */ value, /** @type {boolean} */ mutation) { return function (/** @type {any} */ value, /** @type {boolean} */ mutation) {
// legacy nonsense — need to ensure the source is invalidated when necessary // 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 // 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` // set this so that we don't reset to the parent value if `d`
// is invalidated because of `invalidate_inner_signals` (rather // is invalidated because of `invalidate_inner_signals` (rather
// than because the parent or child value changed) // than because the parent or child value changed)

@ -128,8 +128,8 @@ let current_version = 0;
// to prevent memory leaks, we skip adding the reaction. // to prevent memory leaks, we skip adding the reaction.
export let skip_reaction = false; export let skip_reaction = false;
// Handle collecting all signals which are read during a specific time frame // Handle collecting all signals which are read during a specific time frame
export let is_signals_recorded = false; /** @type {Set<Value> | null} */
let captured_signals = new Set(); export let captured_signals = null;
// Handling runtime component context // Handling runtime component context
/** @type {ComponentContext | null} */ /** @type {ComponentContext | null} */
@ -732,7 +732,7 @@ export function get(signal) {
return value; return value;
} }
if (is_signals_recorded) { if (captured_signals !== null) {
captured_signals.add(signal); captured_signals.add(signal);
} }
@ -800,21 +800,18 @@ export function safe_get(signal) {
* @param {() => any} fn * @param {() => any} fn
*/ */
export function invalidate_inner_signals(fn) { export function invalidate_inner_signals(fn) {
var previous_is_signals_recorded = is_signals_recorded;
var previous_captured_signals = captured_signals; var previous_captured_signals = captured_signals;
is_signals_recorded = true;
captured_signals = new Set(); captured_signals = new Set();
var captured = captured_signals; var captured = captured_signals;
var signal; var signal;
try { try {
untrack(fn); untrack(fn);
} finally { if (previous_captured_signals !== null) {
is_signals_recorded = previous_is_signals_recorded;
if (is_signals_recorded) {
for (signal of captured_signals) { for (signal of captured_signals) {
previous_captured_signals.add(signal); previous_captured_signals.add(signal);
} }
} }
} finally {
captured_signals = previous_captured_signals; captured_signals = previous_captured_signals;
} }
for (signal of captured) { for (signal of captured) {

Loading…
Cancel
Save