( initialValue: T, equal?: ValueEqualityFn<T>, )
| 51 | * Creates a `Signal` getter, setter, and updater function. |
| 52 | */ |
| 53 | export function createSignal<T>( |
| 54 | initialValue: T, |
| 55 | equal?: ValueEqualityFn<T>, |
| 56 | ): [SignalGetter<T>, SignalSetter<T>, SignalUpdater<T>] { |
| 57 | const node: SignalNode<T> = Object.create(SIGNAL_NODE); |
| 58 | node.value = initialValue; |
| 59 | if (equal !== undefined) { |
| 60 | node.equal = equal; |
| 61 | } |
| 62 | const getter = (() => signalGetFn(node)) as SignalGetter<T>; |
| 63 | (getter as any)[SIGNAL] = node; |
| 64 | if (typeof ngDevMode !== 'undefined' && ngDevMode) { |
| 65 | getter.toString = () => |
| 66 | `[Signal${node.debugName ? ' (' + node.debugName + ')' : ''}: ${String(node.value)}]`; |
| 67 | } |
| 68 | |
| 69 | runPostProducerCreatedFn(node); |
| 70 | const set = (newValue: T) => signalSetFn(node, newValue); |
| 71 | const update = (updateFn: (value: T) => T) => signalUpdateFn(node, updateFn); |
| 72 | return [getter, set, update]; |
| 73 | } |
| 74 | |
| 75 | export function setPostSignalSetFn(fn: ReactiveHookFn | null): ReactiveHookFn | null { |
| 76 | const prev = postSignalSetFn; |
no test coverage detected
searching dependent graphs…