From 158a242f90dc7bbc77d989b1cdcb049f00b28e39 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 10 Jun 2025 20:56:22 -0400 Subject: [PATCH] tidy up types, fix duplication --- .../svelte/src/internal/client/dev/tracing.js | 22 ++++++++----------- .../svelte/src/internal/client/runtime.js | 21 +++++++++++++----- 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/packages/svelte/src/internal/client/dev/tracing.js b/packages/svelte/src/internal/client/dev/tracing.js index 88d1907a26..d66e4e46ae 100644 --- a/packages/svelte/src/internal/client/dev/tracing.js +++ b/packages/svelte/src/internal/client/dev/tracing.js @@ -6,14 +6,14 @@ import { DERIVED, PROXY_PATH_SYMBOL, STATE_SYMBOL } from '#client/constants'; import { effect_tracking } from '../reactivity/effects.js'; import { active_reaction, captured_signals, set_captured_signals, untrack } from '../runtime.js'; -/** @type {{ reaction: Reaction | null, entries: Map } | null} */ +/** @type {{ reaction: Reaction | null, entries: Map } | null} */ export let tracing_expressions = null; /** - * @param { Value } signal - * @param { { read: Error[] } } [entry] + * @param {Value} signal + * @param {Error[]} [traces] */ -function log_entry(signal, entry) { +function log_entry(signal, traces = []) { const debug = signal.debug; const value = signal.trace_need_increase ? signal.trace_v : signal.v; @@ -74,13 +74,9 @@ function log_entry(signal, entry) { console.log(signal.updated); } - const read = entry?.read; - - if (read && read.length > 0) { - for (var stack of read) { - // eslint-disable-next-line no-console - console.log(stack); - } + for (var trace of traces) { + // eslint-disable-next-line no-console + console.log(trace); } // eslint-disable-next-line no-console @@ -116,8 +112,8 @@ export function trace(label, fn) { tracing_expressions = null; - for (const [signal, entry] of entries) { - log_entry(signal, entry); + for (const [signal, traces] of entries) { + log_entry(signal, traces); } // eslint-disable-next-line no-console console.groupEnd(); diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index 51402ac88c..528db059e8 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -783,14 +783,23 @@ export function get(signal) { if (signal.debug) { signal.debug(); } else if (signal.created) { - var entry = tracing_expressions.entries.get(signal); + var trace = get_stack('TracedAt'); - if (entry === undefined) { - entry = { read: [] }; - tracing_expressions.entries.set(signal, entry); - } + if (trace) { + var traces = tracing_expressions.entries.get(signal); + + if (traces === undefined) { + tracing_expressions.entries.set(signal, (traces = [])); + } - entry.read.push(get_stack('TracedAt')); + var last = traces.at(-1); + + // traces can be duplicated, e.g. by `snapshot` invoking both + // both `getOwnPropertyDescriptor` and `get` traps at once + if (trace.stack !== last?.stack) { + traces.push(trace); + } + } } }