diff --git a/packages/svelte/src/internal/client/dev/tracing.js b/packages/svelte/src/internal/client/dev/tracing.js index b6131d9138..7c3fc31ee7 100644 --- a/packages/svelte/src/internal/client/dev/tracing.js +++ b/packages/svelte/src/internal/client/dev/tracing.js @@ -6,14 +6,20 @@ import { DERIVED, PROXY_PATH_SYMBOL, STATE_SYMBOL } from '#client/constants'; import { effect_tracking } from '../reactivity/effects.js'; import { active_reaction } from '../runtime.js'; -/** @type {{ reaction: Reaction | null, entries: Map } | null} */ +/** + * @typedef {{ + * traces: Error[]; + * }} TraceEntry + */ + +/** @type {{ reaction: Reaction | null, entries: Map } | null} */ export let tracing_expressions = null; /** * @param {Value} signal - * @param {Error[]} [traces] + * @param {TraceEntry} [entry] */ -function log_entry(signal, traces = []) { +function log_entry(signal, entry) { const value = signal.trace_need_increase ? signal.trace_v : signal.v; if (value === UNINITIALIZED) { @@ -54,9 +60,11 @@ function log_entry(signal, traces = []) { console.log(signal.updated); } - for (var trace of traces) { - // eslint-disable-next-line no-console - console.log(trace); + if (entry) { + for (var trace of entry.traces) { + // eslint-disable-next-line no-console + console.log(trace); + } } // eslint-disable-next-line no-console diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index e7025e2096..e150d80776 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -777,18 +777,19 @@ export function get(signal) { var trace = get_stack('TracedAt'); if (trace) { - var traces = tracing_expressions.entries.get(signal); + var entry = tracing_expressions.entries.get(signal); - if (traces === undefined) { - tracing_expressions.entries.set(signal, (traces = [])); + if (entry === undefined) { + entry = { traces: [] }; + tracing_expressions.entries.set(signal, entry); } - var last = traces.at(-1); + var last = entry.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); + entry.traces.push(trace); } } }