diff --git a/src/tools/impact.ts b/src/tools/impact.ts index 843d967..0b5c53f 100644 --- a/src/tools/impact.ts +++ b/src/tools/impact.ts @@ -256,25 +256,22 @@ export async function componentGraph( nodes: Array<{ id: string; name: string; type: string }>; edges: Array<{ from: string; to: string; type: string }>; }> { - const nodes = component_id - ? await query<{ id: string; name: string; type: string }>( - `WITH RECURSIVE deps AS ( - SELECT id, name, type FROM components WHERE id = $1 - UNION - SELECT c.id, c.name, c.type FROM components c - JOIN component_dependencies cd ON c.id = cd.depends_on - JOIN deps d ON cd.component_id = d.id - UNION - SELECT c.id, c.name, c.type FROM components c - JOIN component_dependencies cd ON c.id = cd.component_id - JOIN deps d ON cd.depends_on = d.id - ) - SELECT DISTINCT id, name, type FROM deps`, - [component_id] - ) - : await query<{ id: string; name: string; type: string }>( - 'SELECT id, name, type FROM components' - ); + let nodes: Array<{ id: string; name: string; type: string }>; + + if (component_id) { + // Get component and its direct dependencies + dependents + nodes = await query<{ id: string; name: string; type: string }>( + `SELECT DISTINCT c.id, c.name, c.type FROM components c + WHERE c.id = $1 + OR c.id IN (SELECT depends_on FROM component_dependencies WHERE component_id = $1) + OR c.id IN (SELECT component_id FROM component_dependencies WHERE depends_on = $1)`, + [component_id] + ); + } else { + nodes = await query<{ id: string; name: string; type: string }>( + 'SELECT id, name, type FROM components' + ); + } const nodeIds = nodes.map(n => n.id); const edges = nodeIds.length > 0