diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index 6138341c05..ea366aa9ce 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -825,17 +825,16 @@ export function get(signal) { /** * @template V * @param {import('./types.js').Signal} signal - * @param {V} value - * @returns {V} + * @returns {void} */ -export function set(signal, value) { +function attach_trace(signal) { if (DEV && (signal.f & SOURCE) !== 0) { let stack_debug = null; try { const error = new Error(); stack_debug = error.stack ?.split('\n') - ?.at(2) + ?.at(3) ?.replace(/\s+at\s+/, ''); } catch { // Do nothing @@ -848,6 +847,16 @@ export function set(signal, value) { debug_source.d = stack_debug; } } +} + +/** + * @template V + * @param {import('./types.js').Signal} signal + * @param {V} value + * @returns {V} + */ +export function set(signal, value) { + attach_trace(signal); set_signal_value(signal, value); return value; } @@ -921,7 +930,8 @@ export function invalidate_inner_signals(fn) { * @param {V} value */ export function mutate(source, value) { - set( + attach_trace(source); + set_signal_value( source, untrack(() => get(source)) ); @@ -1596,7 +1606,8 @@ export function bubble_event($$props, event) { */ export function increment(signal) { const value = get(signal); - set(signal, value + 1); + attach_trace(signal); + set_signal_value(signal, value + 1); return value; } @@ -1616,7 +1627,8 @@ export function increment_store(store, store_value) { */ export function decrement(signal) { const value = get(signal); - set(signal, value - 1); + attach_trace(signal); + set_signal_value(signal, value - 1); return value; } @@ -1636,7 +1648,8 @@ export function decrement_store(store, store_value) { */ export function increment_pre(signal) { const value = get(signal) + 1; - set(signal, value); + attach_trace(signal); + set_signal_value(signal, value); return value; } @@ -1657,7 +1670,8 @@ export function increment_pre_store(store, store_value) { */ export function decrement_pre(signal) { const value = get(signal) - 1; - set(signal, value); + attach_trace(signal); + set_signal_value(signal, value); return value; } diff --git a/packages/svelte/tests/runtime-runes/samples/log-trace/_config.js b/packages/svelte/tests/runtime-runes/samples/log-trace/_config.js index 473c2c515e..e8895b47ba 100644 --- a/packages/svelte/tests/runtime-runes/samples/log-trace/_config.js +++ b/packages/svelte/tests/runtime-runes/samples/log-trace/_config.js @@ -30,7 +30,7 @@ export default test({ await Promise.resolve(); assert.deepEqual(log[0], 0); - assert.deepEqual(log[1].startsWith('$log.trace: Module.increment'), true); + assert.deepEqual(log[1].startsWith('$log.trace: HTMLButtonElement.on_click'), true); assert.deepEqual(log[2], 1); } });