Skip to content

Commit 5969b09

Browse files
committed
waterfall detection
1 parent 51e50ec commit 5969b09

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import {
2222
} from '../runtime.js';
2323
import { equals, safe_equals } from './equality.js';
2424
import * as e from '../errors.js';
25+
import * as w from '../warnings.js';
2526
import { block, destroy_effect } from './effects.js';
2627
import { inspect_effects, internal_set, set_inspect_effects, source } from './sources.js';
2728
import { get_stack } from '../dev/tracing.js';
@@ -37,6 +38,8 @@ export function set_from_async_derived(v) {
3738
from_async_derived = v;
3839
}
3940

41+
export const recent_async_deriveds = new Set();
42+
4043
/**
4144
* @template V
4245
* @param {() => V} fn
@@ -117,6 +120,17 @@ export function async_derived(fn) {
117120
from_async_derived = null;
118121

119122
internal_set(value, v);
123+
124+
if (DEV) {
125+
recent_async_deriveds.add(value);
126+
127+
setTimeout(() => {
128+
if (recent_async_deriveds.has(value)) {
129+
w.await_waterfall();
130+
recent_async_deriveds.delete(value);
131+
}
132+
});
133+
}
120134
}
121135
} catch (e) {
122136
handle_error(e, parent, null, parent.ctx);

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import {
3838
destroy_derived_effects,
3939
execute_derived,
4040
from_async_derived,
41+
recent_async_deriveds,
4142
update_derived
4243
} from './reactivity/deriveds.js';
4344
import * as e from './errors.js';
@@ -1064,6 +1065,8 @@ export function get(signal) {
10641065
entry.read.push(get_stack('TracedAt'));
10651066
}
10661067
}
1068+
1069+
recent_async_deriveds.delete(signal);
10671070
}
10681071

10691072
return signal.v;

0 commit comments

Comments
 (0)