in packages/cdk-graph-plugin-diagram/src/internal/graphviz/diagram.ts [143:221]
function visit(
gNode: Graph.Node,
parent: Diagram.Subgraph | Diagram.Diagram
) {
if (gNode.isDestroyed) return;
let entity: Diagram.Container | Diagram.Node;
switch (gNode.nodeType) {
case NodeTypeEnum.RESOURCE: {
entity = new Diagram.ResourceNode(gNode as Graph.ResourceNode);
break;
}
case NodeTypeEnum.CFN_RESOURCE: {
entity = new Diagram.CfnResourceNode(gNode as Graph.CfnResourceNode);
break;
}
case NodeTypeEnum.NESTED_STACK: {
entity = new Diagram.NestedStackCluster(gNode as Graph.NestedStackNode);
break;
}
case NodeTypeEnum.STACK: {
if (
GraphTheme.instance.rendering.stack &&
new RegExp(GraphTheme.instance.rendering.stack).test(gNode.id) ===
false
) {
// Ignore non-matching root stacks
return;
}
entity = new Diagram.StackCluster(gNode as Graph.StackNode);
break;
}
default: {
if (gNode.isLeaf) {
if (gNode.hasFlag(FlagEnum.CUSTOM_RESOURCE)) {
entity = new Diagram.CustomResourceNode(gNode);
} else {
entity = new Diagram.Node(gNode);
}
} else {
entity = new Diagram.Cluster(gNode);
gNode.addFlag(FlagEnum.CLUSTER);
}
break;
}
}
if (nodePositions && entity instanceof Diagram.Node) {
if (entity.graphNode.id in nodePositions) {
entity.position = nodePositions[entity.graphNode.id]!;
}
}
if (entity instanceof ImageNode && entity.image) {
diagram.trackImage(entity.image);
}
if (parent instanceof Diagram.Container && parent.linkChildren) {
edgeResolve.trackEdge(new ChildLink(parent, entity));
}
if (gNode.isLeaf) {
entities.set(gNode.uuid, entity);
parent.addNode(entity as Diagram.Node);
} else {
if (entity instanceof Diagram.Node) {
entity = asContainer(entity);
}
parent.addSubgraph(entity as Diagram.Container);
entities.set(gNode.uuid, entity);
gNode.children.forEach((child) =>
visit(child, entity as Diagram.Container)
);
}
}