diff --git a/packages/core/primitives/signals/src/graph.ts b/packages/core/primitives/signals/src/graph.ts index de12b63dfdd2e..81fa8cb02c768 100644 --- a/packages/core/primitives/signals/src/graph.ts +++ b/packages/core/primitives/signals/src/graph.ts @@ -60,6 +60,7 @@ export const REACTIVE_NODE: ReactiveNode = { producerMustRecompute: () => false, producerRecomputeValue: () => {}, consumerMarkedDirty: () => {}, + consumerOnSignalRead: () => {}, }; /** @@ -156,6 +157,11 @@ export interface ReactiveNode { producerMustRecompute(node: unknown): boolean; producerRecomputeValue(node: unknown): void; consumerMarkedDirty(node: unknown): void; + + /** + * Called when a signal is read within this consumer. + */ + consumerOnSignalRead(node: unknown): void; } interface ConsumerNode extends ReactiveNode { @@ -185,6 +191,8 @@ export function producerAccessed(node: ReactiveNode): void { return; } + activeConsumer.consumerOnSignalRead(node); + // This producer is the `idx`th dependency of `activeConsumer`. const idx = activeConsumer.nextProducerIndex++;