refactor(core): move signal toString to primitives (#60365)

This change pushes the toString implementation of signal getters
down to the primitives package so it can be shared with other
frameworks.

Closes #59990

PR Close #60365
This commit is contained in:
Pawel Kozlowski 2025-03-13 10:50:27 +01:00 committed by Jessica Janiuk
parent 4a107ed7af
commit 76c60a609f
3 changed files with 27 additions and 0 deletions

View file

@ -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<T>(
return node.value;
};
(computed as ComputedGetter<T>)[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<T>;
}

View file

@ -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<S, D> = (source: S, previous?: {source: S; value: D}) => D;
export interface LinkedSignalNode<S, D> extends ReactiveNode {
@ -87,7 +91,13 @@ export function createLinkedSignal<S, D>(
const getter = linkedSignalGetter as LinkedSignalGetter<S, D>;
getter[SIGNAL] = node;
if (typeof ngDevMode !== 'undefined' && ngDevMode) {
const debugName = node.debugName ? ' (' + node.debugName + ')' : '';
getter.toString = () => `[LinkedSignal${debugName}: ${node.value}]`;
}
runPostProducerCreatedFn(node);
return getter;
}

View file

@ -59,7 +59,13 @@ export function createSignal<T>(initialValue: T, equal?: ValueEqualityFn<T>): Si
return node.value;
}) as SignalGetter<T>;
(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;
}