Skip to content

Commit e2a9938

Browse files
andrewseguinAndrewKushnir
authored andcommitted
fix(core): explicitly cast signal node value to String
If the computed's `toString` is called and `node.value` is a Symbol, the browser will throw an exception `ERROR TypeError: Cannot convert a Symbol value to a string` Symbols cannot be implicitly changed to strings. This change changes the conversion to be explicit by wrapping `node.value` with `String()` This can be reproduced if you create a computed with `createComputed(computation, equal)` and call `toString()` while `node.value` is something like `Symbol(UNSET)`
1 parent d67d8f7 commit e2a9938

File tree

3 files changed

+3
-3
lines changed

3 files changed

+3
-3
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ export function createComputed<T>(
8484
(computed as ComputedGetter<T>)[SIGNAL] = node;
8585
if (typeof ngDevMode !== 'undefined' && ngDevMode) {
8686
const debugName = node.debugName ? ' (' + node.debugName + ')' : '';
87-
computed.toString = () => `[Computed${debugName}: ${node.value}]`;
87+
computed.toString = () => `[Computed${debugName}: ${String(node.value)}]`;
8888
}
8989

9090
runPostProducerCreatedFn(node);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ export function createLinkedSignal<S, D>(
9494
getter[SIGNAL] = node;
9595
if (typeof ngDevMode !== 'undefined' && ngDevMode) {
9696
const debugName = node.debugName ? ' (' + node.debugName + ')' : '';
97-
getter.toString = () => `[LinkedSignal${debugName}: ${node.value}]`;
97+
getter.toString = () => `[LinkedSignal${debugName}: ${String(node.value)}]`;
9898
}
9999

100100
runPostProducerCreatedFn(node);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ export function createSignal<T>(
6363
(getter as any)[SIGNAL] = node;
6464
if (typeof ngDevMode !== 'undefined' && ngDevMode) {
6565
const debugName = node.debugName ? ' (' + node.debugName + ')' : '';
66-
getter.toString = () => `[Signal${debugName}: ${node.value}]`;
66+
getter.toString = () => `[Signal${debugName}: ${String(node.value)}]`;
6767
}
6868

6969
runPostProducerCreatedFn(node);

0 commit comments

Comments
 (0)