0
0
mirror of https://github.com/sveltejs/svelte.git synced 2024-11-24 16:29:46 +01:00

chore: simplify signal capturing logic (#14281)

This commit is contained in:
Dominic Gannaway 2024-11-13 00:18:51 +00:00 committed by GitHub
parent f5a7d49216
commit 25d9aa1828
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 7 additions and 10 deletions

View File

@ -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)

View File

@ -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<Value> | 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) {