diff --git a/packages/svelte/src/internal/client/dev/debug.js b/packages/svelte/src/internal/client/dev/debug.js index 2513d15c971d..0bd937daa025 100644 --- a/packages/svelte/src/internal/client/dev/debug.js +++ b/packages/svelte/src/internal/client/dev/debug.js @@ -514,3 +514,17 @@ export function log_inconsistent_branches(effect) { return true; } + +/** + * Stringify a derived function, removing `$.track_reactivity_loss` and `$.get` etc + * @param {Function} fn + */ +export function stringify_derived(fn) { + return `{${fn + .toString() + .replace(/^async \(\) => /, '') + .replace(/^\(/, '') + .replace(/\$\.get\((.+?)\)/g, (_, name) => name) + .replace(/\$\.track_reactivity_loss\((.+?)\)\(\)/g, (_, name) => name) + .replace(/\)$/, '')}}`; +} diff --git a/packages/svelte/src/internal/client/reactivity/deriveds.js b/packages/svelte/src/internal/client/reactivity/deriveds.js index 728ef1d214e3..28f5c984fbe9 100644 --- a/packages/svelte/src/internal/client/reactivity/deriveds.js +++ b/packages/svelte/src/internal/client/reactivity/deriveds.js @@ -47,6 +47,7 @@ import { batch_values, current_batch, previous_batch } from './batch.js'; import { increment_pending, unset_context } from './async.js'; import { deferred, includes, noop } from '../../shared/utils.js'; import { set_signal_status, update_derived_status } from './status.js'; +import { stringify_derived } from '../dev/debug.js'; /** * This allows us to track 'reactivity loss' that occurs when signals @@ -120,7 +121,7 @@ export function async_derived(fn, label, location) { var promise = /** @type {Promise} */ (/** @type {unknown} */ (undefined)); var signal = source(/** @type {V} */ (UNINITIALIZED)); - if (DEV) signal.label = label ?? fn.toString(); + if (DEV) signal.label = label ?? stringify_derived(fn); // only suspend in async deriveds created on initialisation var should_suspend = !active_reaction;