import { assertEquals } from "https://deno.land/std@0.224.0/testing/asserts.ts"; /** * Proof of Concept: Dependency Graphing (Adjacency Matrices) * * Demonstrates mathematically calculating the "blast radius" of a code change * by representing component dependencies as an adjacency matrix and using * graph traversal to find impacted nodes. */ // Adjacency matrix for a simple app: // Nodes: [0: Auth, 1: Database, 2: API Route, 3: UI Component] // Matrix[i][j] = 1 means Node i depends on Node j const matrix = [ [0, 1, 0, 0], // Auth depends on Database [0, 0, 0, 0], // Database has no outgoing dependencies [1, 1, 0, 0], // API Route depends on Auth and Database [0, 0, 1, 0], // UI Component depends on API Route ]; const nodes = ["Auth", "Database", "API Route", "UI Component"]; // Find all nodes that depend on a given node (blast radius) function calculateBlastRadius(changedNodeIndex: number): number[] { const impacted = new Set(); const queue = [changedNodeIndex]; while (queue.length > 0) { const current = queue.shift()!; // Find who depends on `current` for (let i = 0; i < matrix.length; i++) { if (matrix[i][current] === 1 && !impacted.has(i)) { impacted.add(i); queue.push(i); } } } return Array.from(impacted); } if (import.meta.main) { console.log("Running Dependency Graphing PoC tests..."); try { const changedNode = 1; // "Database" changed console.log( `If '${nodes[changedNode]}' changes, calculating blast radius...`, ); const impactedIndices = calculateBlastRadius(changedNode); const impactedNames = impactedIndices.map((i) => nodes[i]); console.log(`Impacted components:`, impactedNames); // If Database changes, Auth and API Route depend on it directly. // UI Component depends on API Route. So all others should be impacted. assertEquals(impactedIndices.length, 3); console.log( "✅ Dependency Graphing PoC successful: Blast radius calculated correctly.", ); } catch (err) { console.error("❌ Dependency Graphing PoC failed:", err); Deno.exit(1); } }