func printGraph()

in internal/cmd/tree/util.go [29:88]


func printGraph(g graph.Graph, typeFilter string) {
	elements := make([]graph.Node, 0)
	fromLinks := make(map[graph.Node][]graph.Node)
	toLinks := make(map[graph.Node][]graph.Node)

	for _, el := range g.Nodes() {
		if el.Type == typeFilter {
			elements = append(elements, el)
			froms := g.Get(el)

			if allLinks || len(froms) > 0 {
				fromLinks[el] = froms
			}

			if twoWayTree {
				tos := g.GetReverse(el)

				if allLinks || len(tos) > 0 {
					toLinks[el] = tos
				}
			}
		}
	}

	if len(fromLinks) == 0 && len(toLinks) == 0 {
		return
	}

	fmt.Printf("%s:\n", typeFilter)

	for _, el := range elements {
		if !allLinks && len(fromLinks[el]) == 0 && len(toLinks[el]) == 0 {
			continue
		}

		fmt.Printf("  %s:\n", console.Yellow(el.Name))

		if allLinks || len(fromLinks[el]) > 0 {
			if len(fromLinks[el]) == 0 {
				fmt.Println("    DependsOn: []")
			} else {
				fmt.Println("    DependsOn:")
				printLinks(fromLinks[el], "Parameters")
				printLinks(fromLinks[el], "Resources")
				printLinks(fromLinks[el], "Outputs")
			}
		}

		if twoWayTree && (allLinks || len(toLinks[el]) > 0) {
			if len(toLinks[el]) == 0 {
				fmt.Println("    UsedBy: []")
			} else {
				fmt.Println("    UsedBy:")
				printLinks(toLinks[el], "Parameters")
				printLinks(toLinks[el], "Resources")
				printLinks(toLinks[el], "Outputs")
			}
		}
	}
}