MCPcopy
hub / github.com/angular/angular / createLinkedSignal

Function createLinkedSignal

packages/core/primitives/signals/src/linked_signal.ts:67–104  ·  view source on GitHub ↗
(
  sourceFn: () => S,
  computationFn: ComputationFn<S, D>,
  equalityFn?: ValueEqualityFn<D>,
)

Source from the content-addressed store, hash-verified

65};
66
67export function createLinkedSignal<S, D>(
68 sourceFn: () => S,
69 computationFn: ComputationFn<S, D>,
70 equalityFn?: ValueEqualityFn<D>,
71): LinkedSignalGetter<S, D> {
72 const node: LinkedSignalNode<S, D> = Object.create(LINKED_SIGNAL_NODE);
73
74 node.source = sourceFn;
75 node.computation = computationFn;
76 if (equalityFn != undefined) {
77 node.equal = equalityFn;
78 }
79
80 const linkedSignalGetter = () => {
81 // Check if the value needs updating before returning it.
82 producerUpdateValueVersion(node);
83
84 // Record that someone looked at this signal.
85 producerAccessed(node);
86
87 if (node.value === ERRORED) {
88 throw node.error;
89 }
90
91 return node.value;
92 };
93
94 const getter = linkedSignalGetter as LinkedSignalGetter<S, D>;
95 getter[SIGNAL] = node;
96 if (typeof ngDevMode !== 'undefined' && ngDevMode) {
97 getter.toString = () =>
98 `[LinkedSignal${node.debugName ? ' (' + node.debugName + ')' : ''}: ${String(node.value)}]`;
99 }
100
101 runPostProducerCreatedFn(node);
102
103 return getter;
104}
105
106export function linkedSignalSetFn<S, D>(node: LinkedSignalNode<S, D>, newValue: D) {
107 producerUpdateValueVersion(node);

Callers 1

linkedSignalFunction · 0.90

Calls 2

runPostProducerCreatedFnFunction · 0.90
createMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…