( chart: RenderTreeState, )
| 153 | } |
| 154 | |
| 155 | export function buildRenderTreeDebugTree( |
| 156 | chart: RenderTreeState, |
| 157 | ): RenderTreeDebugNode | null { |
| 158 | const root = chart.nodes.get(RENDER_TREE_ROOT_ID_OLD); |
| 159 | if (!root) { |
| 160 | return null; |
| 161 | } |
| 162 | |
| 163 | const visited = new Set<string>(); |
| 164 | |
| 165 | const buildNode = (node: RenderNode): RenderTreeDebugNode => { |
| 166 | if (visited.has(node.id)) { |
| 167 | return { |
| 168 | id: node.id, |
| 169 | type: node.type, |
| 170 | parentId: node.parentId, |
| 171 | active: getRenderNodeActive(chart, node.id), |
| 172 | depth: getRenderNodeDepth(chart, node.id), |
| 173 | children: [], |
| 174 | }; |
| 175 | } |
| 176 | visited.add(node.id); |
| 177 | |
| 178 | return { |
| 179 | id: node.id, |
| 180 | type: node.type, |
| 181 | parentId: node.parentId, |
| 182 | active: getRenderNodeActive(chart, node.id), |
| 183 | depth: getRenderNodeDepth(chart, node.id), |
| 184 | children: node.children |
| 185 | .map((childId) => chart.nodes.get(childId)) |
| 186 | .filter((child): child is RenderNode => Boolean(child)) |
| 187 | .map((child) => buildNode(child)), |
| 188 | }; |
| 189 | }; |
| 190 | |
| 191 | return buildNode(root); |
| 192 | } |
| 193 | |
| 194 | export function logRenderTreeDebugTree( |
| 195 | chart: RenderTreeState, |
no test coverage detected