Content-Length: 387054 | pFad | http://github.com/angular/angular/commit/ef78167512bdcd5aea9f5d66ae76f59957ac7dea

42 feat(devtools): update get signal graph · angular/angular@ef78167 · GitHub
Skip to content

Commit ef78167

Browse files
committed
feat(devtools): update get signal graph
add a function that we can inspect to jump to the source of a signal, and give every signal a unique id that devtools can use to match signals across calls to getSignalGraph
1 parent b0ee7ff commit ef78167

File tree

1 file changed

+28
-5
lines changed

1 file changed

+28
-5
lines changed

packages/core/src/render3/util/signal_debug.ts

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,11 @@ import {
2828

2929
export interface DebugSignalGraphNode {
3030
kind: string;
31+
id: string;
32+
epoch: number;
3133
label?: string;
3234
value?: unknown;
35+
debuggableFn?: () => unknown;
3336
}
3437

3538
export interface DebugSignalGraphEdge {
@@ -84,6 +87,9 @@ function getTemplateConsumer(injector: NodeInjector): ReactiveLViewConsumer | nu
8487
return templateLView[REACTIVE_TEMPLATE_CONSUMER];
8588
}
8689

90+
const signalDebugMap = new WeakMap<ReactiveNode, string>();
91+
let counter = 0;
92+
8793
function getNodesAndEdgesFromSignalMap(signalMap: ReadonlyMap<ReactiveNode, ReactiveNode[]>): {
8894
nodes: DebugSignalGraphNode[];
8995
edges: DebugSignalGraphEdge[];
@@ -95,27 +101,44 @@ function getNodesAndEdgesFromSignalMap(signalMap: ReadonlyMap<ReactiveNode, Reac
95101
for (const [consumer, producers] of signalMap.entries()) {
96102
const consumerIndex = nodes.indexOf(consumer);
97103

104+
let id = signalDebugMap.get(consumer);
105+
if (!id) {
106+
counter++;
107+
id = `${consumer.debugName}-${counter}`;
108+
signalDebugMap.set(consumer, id);
109+
}
110+
98111
// collect node
99-
if (isComputedNode(consumer) || isSignalNode(consumer)) {
112+
if (isComputedNode(consumer)) {
100113
debugSignalGraphNodes.push({
101114
label: consumer.debugName,
102115
value: consumer.value,
103116
kind: consumer.kind,
117+
epoch: consumer.version,
118+
debuggableFn: consumer.computation,
119+
id,
104120
});
105-
} else if (isTemplateEffectNode(consumer)) {
121+
} else if (isSignalNode(consumer)) {
106122
debugSignalGraphNodes.push({
107-
label: consumer.debugName ?? consumer.lView?.[HOST]?.tagName?.toLowerCase?.(),
123+
label: consumer.debugName,
124+
value: consumer.value,
108125
kind: consumer.kind,
126+
epoch: consumer.version,
127+
id,
109128
});
110-
} else if (isEffectNode(consumer)) {
129+
} else if (isTemplateEffectNode(consumer)) {
111130
debugSignalGraphNodes.push({
112-
label: consumer.debugName,
131+
label: consumer.debugName ?? consumer.lView?.[HOST]?.tagName?.toLowerCase?.(),
113132
kind: consumer.kind,
133+
epoch: consumer.version,
134+
id,
114135
});
115136
} else {
116137
debugSignalGraphNodes.push({
117138
label: consumer.debugName,
118139
kind: consumer.kind,
140+
epoch: consumer.version,
141+
id,
119142
});
120143
}
121144

0 commit comments

Comments
 (0)








ApplySandwichStrip

pFad - (p)hone/(F)rame/(a)nonymizer/(d)eclutterfier!      Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

Fetched URL: http://github.com/angular/angular/commit/ef78167512bdcd5aea9f5d66ae76f59957ac7dea

Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy