Skip to content

Commit 76c60a6

Browse files
refactor(core): move signal toString to primitives (angular#60365)
This change pushes the toString implementation of signal getters down to the primitives package so it can be shared with other frameworks. Closes angular#59990 PR Close angular#60365
1 parent 4a107ed commit 76c60a6

File tree

3 files changed

+27
-0
lines changed

3 files changed

+27
-0
lines changed

packages/core/primitives/signals/src/computed.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ import {
1919
runPostProducerCreatedFn,
2020
} from './graph';
2121

22+
// Required as the signals library is in a separate package, so we need to explicitly ensure the
23+
// global `ngDevMode` type is defined.
24+
declare const ngDevMode: boolean | undefined;
25+
2226
/**
2327
* A computation, which derives a value from a declarative reactive expression.
2428
*
@@ -76,8 +80,15 @@ export function createComputed<T>(
7680

7781
return node.value;
7882
};
83+
7984
(computed as ComputedGetter<T>)[SIGNAL] = node;
85+
if (typeof ngDevMode !== 'undefined' && ngDevMode) {
86+
const debugName = node.debugName ? ' (' + node.debugName + ')' : '';
87+
computed.toString = () => `[Computed${debugName}: ${node.value}]`;
88+
}
89+
8090
runPostProducerCreatedFn(node);
91+
8192
return computed as unknown as ComputedGetter<T>;
8293
}
8394

packages/core/primitives/signals/src/linked_signal.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ import {
2121
} from './graph';
2222
import {signalSetFn, signalUpdateFn} from './signal';
2323

24+
// Required as the signals library is in a separate package, so we need to explicitly ensure the
25+
// global `ngDevMode` type is defined.
26+
declare const ngDevMode: boolean | undefined;
27+
2428
export type ComputationFn<S, D> = (source: S, previous?: {source: S; value: D}) => D;
2529

2630
export interface LinkedSignalNode<S, D> extends ReactiveNode {
@@ -87,7 +91,13 @@ export function createLinkedSignal<S, D>(
8791

8892
const getter = linkedSignalGetter as LinkedSignalGetter<S, D>;
8993
getter[SIGNAL] = node;
94+
if (typeof ngDevMode !== 'undefined' && ngDevMode) {
95+
const debugName = node.debugName ? ' (' + node.debugName + ')' : '';
96+
getter.toString = () => `[LinkedSignal${debugName}: ${node.value}]`;
97+
}
98+
9099
runPostProducerCreatedFn(node);
100+
91101
return getter;
92102
}
93103

packages/core/primitives/signals/src/signal.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,13 @@ export function createSignal<T>(initialValue: T, equal?: ValueEqualityFn<T>): Si
5959
return node.value;
6060
}) as SignalGetter<T>;
6161
(getter as any)[SIGNAL] = node;
62+
if (typeof ngDevMode !== 'undefined' && ngDevMode) {
63+
const debugName = node.debugName ? ' (' + node.debugName + ')' : '';
64+
getter.toString = () => `[Signal${debugName}: ${node.value}]`;
65+
}
66+
6267
runPostProducerCreatedFn(node);
68+
6369
return getter;
6470
}
6571

0 commit comments

Comments
 (0)