Skip to content

Commit 35783c3

Browse files
committed
complete revert
1 parent 1ece2eb commit 35783c3

File tree

5 files changed

+47
-12
lines changed

5 files changed

+47
-12
lines changed

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,23 @@ function log_entry(signal, entry) {
2626
return;
2727
}
2828

29+
if (signal.trace) {
30+
var previous_captured_signals = captured_signals;
31+
var captured = new Set();
32+
set_captured_signals(captured);
33+
34+
try {
35+
untrack(signal.trace);
36+
} finally {
37+
set_captured_signals(previous_captured_signals);
38+
}
39+
40+
if (captured.size > 0) {
41+
for (const dep of captured) log_entry(dep);
42+
return;
43+
}
44+
}
45+
2946
const type = (signal.f & DERIVED) !== 0 ? '$derived' : '$state';
3047
const current_reaction = /** @type {Reaction} */ (active_reaction);
3148
const dirty = signal.wv > current_reaction.wv || current_reaction.wv === 0;

packages/svelte/src/internal/client/dom/blocks/each.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -524,6 +524,16 @@ function create_item(
524524
var v = reactive ? (mutable ? mutable_source(value) : source(value)) : value;
525525
var i = (flags & EACH_INDEX_REACTIVE) === 0 ? index : source(index);
526526

527+
if (DEV && reactive) {
528+
// For tracing purposes, we need to link the source signal we create with the
529+
// collection + index so that tracing works as intended
530+
/** @type {Value} */ (v).trace = () => {
531+
var collection_index = typeof i === 'number' ? index : i.v;
532+
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
533+
get_collection()[collection_index];
534+
};
535+
}
536+
527537
/** @type {EachItem} */
528538
var item = {
529539
i,

packages/svelte/src/internal/client/reactivity/sources.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ export function source(v, stack) {
7070
signal.created = stack ?? get_stack('CreatedAt');
7171
signal.updated = null;
7272
signal.set_during_effect = false;
73+
signal.trace = null;
7374
}
7475

7576
return signal;

packages/svelte/src/internal/client/reactivity/types.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ export interface Value<V = unknown> extends Signal {
2929
* increment the write version so that it shows up as dirty when the effect re-runs
3030
*/
3131
set_during_effect?: boolean;
32+
/** A function that retrieves the underlying source, used for each block item signals */
33+
trace?: null | (() => void);
3234
}
3335

3436
export interface Reaction extends Signal {

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

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -773,22 +773,27 @@ export function get(signal) {
773773
active_reaction !== null &&
774774
tracing_expressions.reaction === active_reaction
775775
) {
776-
var trace = get_stack('TracedAt');
776+
// Used when mapping state between special blocks like `each`
777+
if (signal.trace) {
778+
signal.trace();
779+
} else {
780+
var trace = get_stack('TracedAt');
777781

778-
if (trace) {
779-
var entry = tracing_expressions.entries.get(signal);
782+
if (trace) {
783+
var entry = tracing_expressions.entries.get(signal);
780784

781-
if (entry === undefined) {
782-
entry = { traces: [] };
783-
tracing_expressions.entries.set(signal, entry);
784-
}
785+
if (entry === undefined) {
786+
entry = { traces: [] };
787+
tracing_expressions.entries.set(signal, entry);
788+
}
785789

786-
var last = entry.traces[entry.traces.length - 1];
790+
var last = entry.traces[entry.traces.length - 1];
787791

788-
// traces can be duplicated, e.g. by `snapshot` invoking both
789-
// both `getOwnPropertyDescriptor` and `get` traps at once
790-
if (trace.stack !== last?.stack) {
791-
entry.traces.push(trace);
792+
// traces can be duplicated, e.g. by `snapshot` invoking both
793+
// both `getOwnPropertyDescriptor` and `get` traps at once
794+
if (trace.stack !== last?.stack) {
795+
entry.traces.push(trace);
796+
}
792797
}
793798
}
794799
}

0 commit comments

Comments
 (0)