diff --git a/packages/core/primitives/signals/src/computed.ts b/packages/core/primitives/signals/src/computed.ts index 42ee5322ec6..c8519f40df9 100644 --- a/packages/core/primitives/signals/src/computed.ts +++ b/packages/core/primitives/signals/src/computed.ts @@ -19,6 +19,10 @@ import { runPostProducerCreatedFn, } from './graph'; +// Required as the signals library is in a separate package, so we need to explicitly ensure the +// global `ngDevMode` type is defined. +declare const ngDevMode: boolean | undefined; + /** * A computation, which derives a value from a declarative reactive expression. * @@ -76,8 +80,15 @@ export function createComputed( return node.value; }; + (computed as ComputedGetter)[SIGNAL] = node; + if (typeof ngDevMode !== 'undefined' && ngDevMode) { + const debugName = node.debugName ? ' (' + node.debugName + ')' : ''; + computed.toString = () => `[Computed${debugName}: ${node.value}]`; + } + runPostProducerCreatedFn(node); + return computed as unknown as ComputedGetter; } diff --git a/packages/core/primitives/signals/src/linked_signal.ts b/packages/core/primitives/signals/src/linked_signal.ts index 31997a3f62e..2caecfc374f 100644 --- a/packages/core/primitives/signals/src/linked_signal.ts +++ b/packages/core/primitives/signals/src/linked_signal.ts @@ -21,6 +21,10 @@ import { } from './graph'; import {signalSetFn, signalUpdateFn} from './signal'; +// Required as the signals library is in a separate package, so we need to explicitly ensure the +// global `ngDevMode` type is defined. +declare const ngDevMode: boolean | undefined; + export type ComputationFn = (source: S, previous?: {source: S; value: D}) => D; export interface LinkedSignalNode extends ReactiveNode { @@ -87,7 +91,13 @@ export function createLinkedSignal( const getter = linkedSignalGetter as LinkedSignalGetter; getter[SIGNAL] = node; + if (typeof ngDevMode !== 'undefined' && ngDevMode) { + const debugName = node.debugName ? ' (' + node.debugName + ')' : ''; + getter.toString = () => `[LinkedSignal${debugName}: ${node.value}]`; + } + runPostProducerCreatedFn(node); + return getter; } diff --git a/packages/core/primitives/signals/src/signal.ts b/packages/core/primitives/signals/src/signal.ts index 13e187eb7af..93efc5bbecf 100644 --- a/packages/core/primitives/signals/src/signal.ts +++ b/packages/core/primitives/signals/src/signal.ts @@ -59,7 +59,13 @@ export function createSignal(initialValue: T, equal?: ValueEqualityFn): Si return node.value; }) as SignalGetter; (getter as any)[SIGNAL] = node; + if (typeof ngDevMode !== 'undefined' && ngDevMode) { + const debugName = node.debugName ? ' (' + node.debugName + ')' : ''; + getter.toString = () => `[Signal${debugName}: ${node.value}]`; + } + runPostProducerCreatedFn(node); + return getter; }