Skip to content

Commit 158a242

Browse files
committed
tidy up types, fix duplication
1 parent 0368635 commit 158a242

File tree

2 files changed

+24
-19
lines changed

2 files changed

+24
-19
lines changed

packages/svelte/src/internal/client/dev/tracing.js

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@ import { DERIVED, PROXY_PATH_SYMBOL, STATE_SYMBOL } from '#client/constants';
66
import { effect_tracking } from '../reactivity/effects.js';
77
import { active_reaction, captured_signals, set_captured_signals, untrack } from '../runtime.js';
88

9-
/** @type {{ reaction: Reaction | null, entries: Map<any, any> } | null} */
9+
/** @type {{ reaction: Reaction | null, entries: Map<Value, Error[]> } | null} */
1010
export let tracing_expressions = null;
1111

1212
/**
13-
* @param { Value } signal
14-
* @param { { read: Error[] } } [entry]
13+
* @param {Value} signal
14+
* @param {Error[]} [traces]
1515
*/
16-
function log_entry(signal, entry) {
16+
function log_entry(signal, traces = []) {
1717
const debug = signal.debug;
1818
const value = signal.trace_need_increase ? signal.trace_v : signal.v;
1919

@@ -74,13 +74,9 @@ function log_entry(signal, entry) {
7474
console.log(signal.updated);
7575
}
7676

77-
const read = entry?.read;
78-
79-
if (read && read.length > 0) {
80-
for (var stack of read) {
81-
// eslint-disable-next-line no-console
82-
console.log(stack);
83-
}
77+
for (var trace of traces) {
78+
// eslint-disable-next-line no-console
79+
console.log(trace);
8480
}
8581

8682
// eslint-disable-next-line no-console
@@ -116,8 +112,8 @@ export function trace(label, fn) {
116112

117113
tracing_expressions = null;
118114

119-
for (const [signal, entry] of entries) {
120-
log_entry(signal, entry);
115+
for (const [signal, traces] of entries) {
116+
log_entry(signal, traces);
121117
}
122118
// eslint-disable-next-line no-console
123119
console.groupEnd();

packages/svelte/src/internal/client/runtime.js

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -783,14 +783,23 @@ export function get(signal) {
783783
if (signal.debug) {
784784
signal.debug();
785785
} else if (signal.created) {
786-
var entry = tracing_expressions.entries.get(signal);
786+
var trace = get_stack('TracedAt');
787787

788-
if (entry === undefined) {
789-
entry = { read: [] };
790-
tracing_expressions.entries.set(signal, entry);
791-
}
788+
if (trace) {
789+
var traces = tracing_expressions.entries.get(signal);
790+
791+
if (traces === undefined) {
792+
tracing_expressions.entries.set(signal, (traces = []));
793+
}
792794

793-
entry.read.push(get_stack('TracedAt'));
795+
var last = traces.at(-1);
796+
797+
// traces can be duplicated, e.g. by `snapshot` invoking both
798+
// both `getOwnPropertyDescriptor` and `get` traps at once
799+
if (trace.stack !== last?.stack) {
800+
traces.push(trace);
801+
}
802+
}
794803
}
795804
}
796805

0 commit comments

Comments
 (0)