Skip to content

Commit 51e50ec

Browse files
committed
add test, tidy up
1 parent 148ffd2 commit 51e50ec

File tree

3 files changed

+72
-26
lines changed

3 files changed

+72
-26
lines changed

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

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -969,15 +969,6 @@ export function get(signal) {
969969
captured_signals.add(signal);
970970
}
971971

972-
if (DEV && from_async_derived) {
973-
var tracking = (from_async_derived.f & REACTION_IS_UPDATING) !== 0;
974-
var was_read = from_async_derived.deps !== null && from_async_derived.deps.includes(signal);
975-
976-
if (!tracking && !was_read) {
977-
w.await_reactivity_loss();
978-
}
979-
}
980-
981972
// Register the dependency on the current reaction signal.
982973
if (active_reaction !== null && !untracking) {
983974
if (derived_sources !== null && derived_sources.includes(signal)) {
@@ -1043,25 +1034,35 @@ export function get(signal) {
10431034
}
10441035
}
10451036

1046-
if (
1047-
DEV &&
1048-
tracing_mode_flag &&
1049-
tracing_expressions !== null &&
1050-
active_reaction !== null &&
1051-
tracing_expressions.reaction === active_reaction
1052-
) {
1053-
// Used when mapping state between special blocks like `each`
1054-
if (signal.debug) {
1055-
signal.debug();
1056-
} else if (signal.created) {
1057-
var entry = tracing_expressions.entries.get(signal);
1058-
1059-
if (entry === undefined) {
1060-
entry = { read: [] };
1061-
tracing_expressions.entries.set(signal, entry);
1037+
if (DEV) {
1038+
if (from_async_derived) {
1039+
var tracking = (from_async_derived.f & REACTION_IS_UPDATING) !== 0;
1040+
var was_read = from_async_derived.deps !== null && from_async_derived.deps.includes(signal);
1041+
1042+
if (!tracking && !was_read) {
1043+
w.await_reactivity_loss();
10621044
}
1045+
}
10631046

1064-
entry.read.push(get_stack('TracedAt'));
1047+
if (
1048+
tracing_mode_flag &&
1049+
tracing_expressions !== null &&
1050+
active_reaction !== null &&
1051+
tracing_expressions.reaction === active_reaction
1052+
) {
1053+
// Used when mapping state between special blocks like `each`
1054+
if (signal.debug) {
1055+
signal.debug();
1056+
} else if (signal.created) {
1057+
var entry = tracing_expressions.entries.get(signal);
1058+
1059+
if (entry === undefined) {
1060+
entry = { read: [] };
1061+
tracing_expressions.entries.set(signal, entry);
1062+
}
1063+
1064+
entry.read.push(get_stack('TracedAt'));
1065+
}
10651066
}
10661067
}
10671068

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { flushSync, tick } from 'svelte';
2+
import { test } from '../../test';
3+
4+
export default test({
5+
compileOptions: {
6+
dev: true
7+
},
8+
9+
html: `<button>a</button><button>b</button><p>pending</p>`,
10+
11+
async test({ assert, target, warnings }) {
12+
await Promise.resolve();
13+
await Promise.resolve();
14+
await Promise.resolve();
15+
await Promise.resolve();
16+
await Promise.resolve();
17+
await Promise.resolve();
18+
await Promise.resolve();
19+
await Promise.resolve();
20+
await tick();
21+
flushSync();
22+
assert.htmlEqual(target.innerHTML, '<button>a</button><button>b</button><h1>3</h1>');
23+
24+
assert.deepEqual(warnings, ['Detected reactivity loss']);
25+
}
26+
});
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<script>
2+
let a = $state(1);
3+
let b = $state(2);
4+
5+
async function a_plus_b() {
6+
return await a + await b;
7+
}
8+
</script>
9+
10+
<button onclick={() => a++}>a</button>
11+
<button onclick={() => b++}>b</button>
12+
13+
<svelte:boundary>
14+
<h1>{await a_plus_b()}</h1>
15+
16+
{#snippet pending()}
17+
<p>pending</p>
18+
{/snippet}
19+
</svelte:boundary>

0 commit comments

Comments
 (0)