From 051e0e3ebe74a409d4656f6352ee5c2104125754 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Fri, 6 Jun 2025 06:42:57 -0400 Subject: [PATCH] WIP --- .../src/internal/client/reactivity/effects.js | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/packages/svelte/src/internal/client/reactivity/effects.js b/packages/svelte/src/internal/client/reactivity/effects.js index 36be1ecd04..ca1da7f9cd 100644 --- a/packages/svelte/src/internal/client/reactivity/effects.js +++ b/packages/svelte/src/internal/client/reactivity/effects.js @@ -332,16 +332,23 @@ export function render_effect(fn) { * @returns {Effect} */ export function template_effect(fn, thunks = [], d = derived) { - const deriveds = thunks.map(d); - const effect = () => fn(...deriveds.map(get)); - if (DEV) { - define_property(effect, 'name', { - value: '{expression}' + // wrap the effect so that we can decorate stack trace with `in {expression}` + // (TODO maybe there's a better approach?) + return render_effect(() => { + var outer = /** @type {Effect} */ (active_effect); + var inner = () => fn(...deriveds.map(get)); + + define_property(outer.fn, 'name', { value: '{expression}' }); + define_property(inner, 'name', { value: '{expression}' }); + + const deriveds = thunks.map(d); + block(inner); }); } - return block(effect); + const deriveds = thunks.map(d); + return block(() => fn(...deriveds.map(get))); } /**