cli-node-graph 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +69 -0
- package/dist/analysis/CircularDependencyAnalyzer.d.ts +13 -0
- package/dist/analysis/CircularDependencyAnalyzer.d.ts.map +1 -0
- package/dist/analysis/CircularDependencyAnalyzer.js +15 -0
- package/dist/analysis/CircularDependencyAnalyzer.js.map +1 -0
- package/dist/analysis/DeadCodeAnalyzer.d.ts +13 -0
- package/dist/analysis/DeadCodeAnalyzer.d.ts.map +1 -0
- package/dist/analysis/DeadCodeAnalyzer.js +37 -0
- package/dist/analysis/DeadCodeAnalyzer.js.map +1 -0
- package/dist/analysis/DependencyAnalyzer.d.ts +16 -0
- package/dist/analysis/DependencyAnalyzer.d.ts.map +1 -0
- package/dist/analysis/DependencyAnalyzer.js +26 -0
- package/dist/analysis/DependencyAnalyzer.js.map +1 -0
- package/dist/analysis/ImpactAnalyzer.d.ts +16 -0
- package/dist/analysis/ImpactAnalyzer.d.ts.map +1 -0
- package/dist/analysis/ImpactAnalyzer.js +26 -0
- package/dist/analysis/ImpactAnalyzer.js.map +1 -0
- package/dist/analysis/LayerViolationAnalyzer.d.ts +31 -0
- package/dist/analysis/LayerViolationAnalyzer.d.ts.map +1 -0
- package/dist/analysis/LayerViolationAnalyzer.js +71 -0
- package/dist/analysis/LayerViolationAnalyzer.js.map +1 -0
- package/dist/cli/ProjectLoader.d.ts +13 -0
- package/dist/cli/ProjectLoader.d.ts.map +1 -0
- package/dist/cli/ProjectLoader.js +48 -0
- package/dist/cli/ProjectLoader.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +139 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config/AnalysisConfig.d.ts +22 -0
- package/dist/config/AnalysisConfig.d.ts.map +1 -0
- package/dist/config/AnalysisConfig.js +6 -0
- package/dist/config/AnalysisConfig.js.map +1 -0
- package/dist/exporters/CytoscapeExporter.d.ts +18 -0
- package/dist/exporters/CytoscapeExporter.d.ts.map +1 -0
- package/dist/exporters/CytoscapeExporter.js +85 -0
- package/dist/exporters/CytoscapeExporter.js.map +1 -0
- package/dist/exporters/DotExporter.d.ts +13 -0
- package/dist/exporters/DotExporter.d.ts.map +1 -0
- package/dist/exporters/DotExporter.js +38 -0
- package/dist/exporters/DotExporter.js.map +1 -0
- package/dist/exporters/GraphExporter.d.ts +7 -0
- package/dist/exporters/GraphExporter.d.ts.map +1 -0
- package/dist/exporters/GraphExporter.js +2 -0
- package/dist/exporters/GraphExporter.js.map +1 -0
- package/dist/exporters/GraphMLExporter.d.ts +8 -0
- package/dist/exporters/GraphMLExporter.d.ts.map +1 -0
- package/dist/exporters/GraphMLExporter.js +30 -0
- package/dist/exporters/GraphMLExporter.js.map +1 -0
- package/dist/exporters/JsonExporter.d.ts +8 -0
- package/dist/exporters/JsonExporter.d.ts.map +1 -0
- package/dist/exporters/JsonExporter.js +16 -0
- package/dist/exporters/JsonExporter.js.map +1 -0
- package/dist/graph/EdgeFactory.d.ts +13 -0
- package/dist/graph/EdgeFactory.d.ts.map +1 -0
- package/dist/graph/EdgeFactory.js +15 -0
- package/dist/graph/EdgeFactory.js.map +1 -0
- package/dist/graph/Graph.d.ts +37 -0
- package/dist/graph/Graph.d.ts.map +1 -0
- package/dist/graph/Graph.js +137 -0
- package/dist/graph/Graph.js.map +1 -0
- package/dist/graph/GraphAlgorithms.d.ts +28 -0
- package/dist/graph/GraphAlgorithms.d.ts.map +1 -0
- package/dist/graph/GraphAlgorithms.js +233 -0
- package/dist/graph/GraphAlgorithms.js.map +1 -0
- package/dist/graph/GraphBuilder.d.ts +10 -0
- package/dist/graph/GraphBuilder.d.ts.map +1 -0
- package/dist/graph/GraphBuilder.js +71 -0
- package/dist/graph/GraphBuilder.js.map +1 -0
- package/dist/graph/NodeFactory.d.ts +21 -0
- package/dist/graph/NodeFactory.d.ts.map +1 -0
- package/dist/graph/NodeFactory.js +53 -0
- package/dist/graph/NodeFactory.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/model/EdgeKind.d.ts +22 -0
- package/dist/model/EdgeKind.d.ts.map +1 -0
- package/dist/model/EdgeKind.js +23 -0
- package/dist/model/EdgeKind.js.map +1 -0
- package/dist/model/GraphEdge.d.ts +22 -0
- package/dist/model/GraphEdge.d.ts.map +1 -0
- package/dist/model/GraphEdge.js +2 -0
- package/dist/model/GraphEdge.js.map +1 -0
- package/dist/model/GraphNode.d.ts +22 -0
- package/dist/model/GraphNode.d.ts.map +1 -0
- package/dist/model/GraphNode.js +2 -0
- package/dist/model/GraphNode.js.map +1 -0
- package/dist/model/NodeKind.d.ts +21 -0
- package/dist/model/NodeKind.d.ts.map +1 -0
- package/dist/model/NodeKind.js +22 -0
- package/dist/model/NodeKind.js.map +1 -0
- package/dist/parser/ASTWalker.d.ts +21 -0
- package/dist/parser/ASTWalker.d.ts.map +1 -0
- package/dist/parser/ASTWalker.js +23 -0
- package/dist/parser/ASTWalker.js.map +1 -0
- package/dist/parser/ProgramFactory.d.ts +15 -0
- package/dist/parser/ProgramFactory.d.ts.map +1 -0
- package/dist/parser/ProgramFactory.js +65 -0
- package/dist/parser/ProgramFactory.js.map +1 -0
- package/dist/parser/visitors/CallVisitor.d.ts +17 -0
- package/dist/parser/visitors/CallVisitor.d.ts.map +1 -0
- package/dist/parser/visitors/CallVisitor.js +111 -0
- package/dist/parser/visitors/CallVisitor.js.map +1 -0
- package/dist/parser/visitors/ClassVisitor.d.ts +14 -0
- package/dist/parser/visitors/ClassVisitor.d.ts.map +1 -0
- package/dist/parser/visitors/ClassVisitor.js +87 -0
- package/dist/parser/visitors/ClassVisitor.js.map +1 -0
- package/dist/parser/visitors/DecoratorVisitor.d.ts +13 -0
- package/dist/parser/visitors/DecoratorVisitor.d.ts.map +1 -0
- package/dist/parser/visitors/DecoratorVisitor.js +65 -0
- package/dist/parser/visitors/DecoratorVisitor.js.map +1 -0
- package/dist/parser/visitors/EnumVisitor.d.ts +11 -0
- package/dist/parser/visitors/EnumVisitor.d.ts.map +1 -0
- package/dist/parser/visitors/EnumVisitor.js +26 -0
- package/dist/parser/visitors/EnumVisitor.js.map +1 -0
- package/dist/parser/visitors/ExportVisitor.d.ts +16 -0
- package/dist/parser/visitors/ExportVisitor.d.ts.map +1 -0
- package/dist/parser/visitors/ExportVisitor.js +95 -0
- package/dist/parser/visitors/ExportVisitor.js.map +1 -0
- package/dist/parser/visitors/FunctionVisitor.d.ts +14 -0
- package/dist/parser/visitors/FunctionVisitor.d.ts.map +1 -0
- package/dist/parser/visitors/FunctionVisitor.js +74 -0
- package/dist/parser/visitors/FunctionVisitor.js.map +1 -0
- package/dist/parser/visitors/HeritageVisitor.d.ts +14 -0
- package/dist/parser/visitors/HeritageVisitor.d.ts.map +1 -0
- package/dist/parser/visitors/HeritageVisitor.js +87 -0
- package/dist/parser/visitors/HeritageVisitor.js.map +1 -0
- package/dist/parser/visitors/ImportVisitor.d.ts +14 -0
- package/dist/parser/visitors/ImportVisitor.d.ts.map +1 -0
- package/dist/parser/visitors/ImportVisitor.js +96 -0
- package/dist/parser/visitors/ImportVisitor.js.map +1 -0
- package/dist/parser/visitors/InterfaceVisitor.d.ts +11 -0
- package/dist/parser/visitors/InterfaceVisitor.d.ts.map +1 -0
- package/dist/parser/visitors/InterfaceVisitor.js +28 -0
- package/dist/parser/visitors/InterfaceVisitor.js.map +1 -0
- package/dist/parser/visitors/MethodVisitor.d.ts +11 -0
- package/dist/parser/visitors/MethodVisitor.d.ts.map +1 -0
- package/dist/parser/visitors/MethodVisitor.js +30 -0
- package/dist/parser/visitors/MethodVisitor.js.map +1 -0
- package/dist/parser/visitors/TypeReferenceVisitor.d.ts +15 -0
- package/dist/parser/visitors/TypeReferenceVisitor.d.ts.map +1 -0
- package/dist/parser/visitors/TypeReferenceVisitor.js +85 -0
- package/dist/parser/visitors/TypeReferenceVisitor.js.map +1 -0
- package/dist/parser/visitors/VariableVisitor.d.ts +11 -0
- package/dist/parser/visitors/VariableVisitor.d.ts.map +1 -0
- package/dist/parser/visitors/VariableVisitor.js +27 -0
- package/dist/parser/visitors/VariableVisitor.js.map +1 -0
- package/dist/parser/visitors/context.d.ts +54 -0
- package/dist/parser/visitors/context.d.ts.map +1 -0
- package/dist/parser/visitors/context.js +117 -0
- package/dist/parser/visitors/context.js.map +1 -0
- package/dist/resolver/ModuleResolver.d.ts +16 -0
- package/dist/resolver/ModuleResolver.d.ts.map +1 -0
- package/dist/resolver/ModuleResolver.js +40 -0
- package/dist/resolver/ModuleResolver.js.map +1 -0
- package/dist/resolver/SymbolResolver.d.ts +15 -0
- package/dist/resolver/SymbolResolver.d.ts.map +1 -0
- package/dist/resolver/SymbolResolver.js +62 -0
- package/dist/resolver/SymbolResolver.js.map +1 -0
- package/dist/resolver/TypeResolver.d.ts +13 -0
- package/dist/resolver/TypeResolver.d.ts.map +1 -0
- package/dist/resolver/TypeResolver.js +32 -0
- package/dist/resolver/TypeResolver.js.map +1 -0
- package/dist/utils/cache.d.ts +12 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +38 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/id.d.ts +7 -0
- package/dist/utils/id.d.ts.map +1 -0
- package/dist/utils/id.js +15 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/utils/path.d.ts +9 -0
- package/dist/utils/path.d.ts.map +1 -0
- package/dist/utils/path.js +18 -0
- package/dist/utils/path.js.map +1 -0
- package/docs/ARCHITECTURE.md +100 -0
- package/docs/CLI.md +62 -0
- package/package.json +58 -0
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { EdgeKind } from '../model/EdgeKind.js';
|
|
2
|
+
/** Graph algorithms for dependency analysis. */
|
|
3
|
+
export class GraphAlgorithms {
|
|
4
|
+
graph;
|
|
5
|
+
constructor(graph) {
|
|
6
|
+
this.graph = graph;
|
|
7
|
+
}
|
|
8
|
+
/** Kahn's algorithm topological sort. Returns empty if cycles exist. */
|
|
9
|
+
topologicalSort(nodeIds) {
|
|
10
|
+
const ids = nodeIds ?? this.graph.getNodes().map((n) => n.id);
|
|
11
|
+
const idSet = new Set(ids);
|
|
12
|
+
const inDegree = new Map();
|
|
13
|
+
const adjacency = new Map();
|
|
14
|
+
for (const id of ids) {
|
|
15
|
+
inDegree.set(id, 0);
|
|
16
|
+
adjacency.set(id, []);
|
|
17
|
+
}
|
|
18
|
+
for (const edge of this.graph.getEdges()) {
|
|
19
|
+
if (!idSet.has(edge.source) || !idSet.has(edge.target))
|
|
20
|
+
continue;
|
|
21
|
+
if (this.isDependencyEdge(edge)) {
|
|
22
|
+
adjacency.get(edge.source)?.push(edge.target);
|
|
23
|
+
inDegree.set(edge.target, (inDegree.get(edge.target) ?? 0) + 1);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const queue = [...ids].filter((id) => (inDegree.get(id) ?? 0) === 0);
|
|
27
|
+
const result = [];
|
|
28
|
+
while (queue.length > 0) {
|
|
29
|
+
const current = queue.shift();
|
|
30
|
+
result.push(current);
|
|
31
|
+
for (const neighbor of adjacency.get(current) ?? []) {
|
|
32
|
+
const deg = (inDegree.get(neighbor) ?? 1) - 1;
|
|
33
|
+
inDegree.set(neighbor, deg);
|
|
34
|
+
if (deg === 0)
|
|
35
|
+
queue.push(neighbor);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return result.length === ids.length ? result : [];
|
|
39
|
+
}
|
|
40
|
+
/** Tarjan's algorithm for strongly connected components. */
|
|
41
|
+
stronglyConnectedComponents(nodeIds) {
|
|
42
|
+
const ids = nodeIds ?? this.graph.getNodes().map((n) => n.id);
|
|
43
|
+
const idSet = new Set(ids);
|
|
44
|
+
const adjacency = this.buildAdjacencyList(idSet, true);
|
|
45
|
+
let index = 0;
|
|
46
|
+
const stack = [];
|
|
47
|
+
const onStack = new Set();
|
|
48
|
+
const indices = new Map();
|
|
49
|
+
const lowLink = new Map();
|
|
50
|
+
const components = [];
|
|
51
|
+
const strongConnect = (v) => {
|
|
52
|
+
indices.set(v, index);
|
|
53
|
+
lowLink.set(v, index);
|
|
54
|
+
index++;
|
|
55
|
+
stack.push(v);
|
|
56
|
+
onStack.add(v);
|
|
57
|
+
for (const w of adjacency.get(v) ?? []) {
|
|
58
|
+
if (!indices.has(w)) {
|
|
59
|
+
strongConnect(w);
|
|
60
|
+
lowLink.set(v, Math.min(lowLink.get(v), lowLink.get(w)));
|
|
61
|
+
}
|
|
62
|
+
else if (onStack.has(w)) {
|
|
63
|
+
lowLink.set(v, Math.min(lowLink.get(v), indices.get(w)));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (lowLink.get(v) === indices.get(v)) {
|
|
67
|
+
const component = [];
|
|
68
|
+
let w;
|
|
69
|
+
do {
|
|
70
|
+
w = stack.pop();
|
|
71
|
+
onStack.delete(w);
|
|
72
|
+
component.push(w);
|
|
73
|
+
} while (w !== v);
|
|
74
|
+
components.push(component);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
for (const id of ids) {
|
|
78
|
+
if (!indices.has(id))
|
|
79
|
+
strongConnect(id);
|
|
80
|
+
}
|
|
81
|
+
return components;
|
|
82
|
+
}
|
|
83
|
+
/** Detect all cycles (SCCs with more than one node or self-loops). */
|
|
84
|
+
detectCycles() {
|
|
85
|
+
const selfLoops = this.graph
|
|
86
|
+
.getEdges()
|
|
87
|
+
.filter((e) => e.source === e.target)
|
|
88
|
+
.map((e) => [e.source]);
|
|
89
|
+
const sccs = this.stronglyConnectedComponents().filter((c) => c.length > 1);
|
|
90
|
+
return [...selfLoops, ...sccs];
|
|
91
|
+
}
|
|
92
|
+
/** BFS shortest path between two nodes. */
|
|
93
|
+
shortestPath(from, to) {
|
|
94
|
+
if (from === to)
|
|
95
|
+
return [from];
|
|
96
|
+
const adjacency = this.buildAdjacencyList(new Set(this.graph.getNodes().map((n) => n.id)), true);
|
|
97
|
+
const visited = new Set([from]);
|
|
98
|
+
const queue = [{ node: from, path: [from] }];
|
|
99
|
+
while (queue.length > 0) {
|
|
100
|
+
const { node, path } = queue.shift();
|
|
101
|
+
for (const neighbor of adjacency.get(node) ?? []) {
|
|
102
|
+
if (neighbor === to)
|
|
103
|
+
return [...path, neighbor];
|
|
104
|
+
if (!visited.has(neighbor)) {
|
|
105
|
+
visited.add(neighbor);
|
|
106
|
+
queue.push({ node: neighbor, path: [...path, neighbor] });
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
/** Maximum dependency depth from a node. */
|
|
113
|
+
dependencyDepth(nodeId) {
|
|
114
|
+
const adjacency = this.buildAdjacencyList(new Set(this.graph.getNodes().map((n) => n.id)), true);
|
|
115
|
+
const memo = new Map();
|
|
116
|
+
const depth = (id, visiting) => {
|
|
117
|
+
if (memo.has(id))
|
|
118
|
+
return memo.get(id);
|
|
119
|
+
if (visiting.has(id))
|
|
120
|
+
return 0;
|
|
121
|
+
visiting.add(id);
|
|
122
|
+
let max = 0;
|
|
123
|
+
for (const neighbor of adjacency.get(id) ?? []) {
|
|
124
|
+
max = Math.max(max, 1 + depth(neighbor, visiting));
|
|
125
|
+
}
|
|
126
|
+
visiting.delete(id);
|
|
127
|
+
memo.set(id, max);
|
|
128
|
+
return max;
|
|
129
|
+
};
|
|
130
|
+
return depth(nodeId, new Set());
|
|
131
|
+
}
|
|
132
|
+
/** Get all nodes reachable downstream from a starting node. */
|
|
133
|
+
downstream(nodeId) {
|
|
134
|
+
const adjacency = this.buildAdjacencyList(new Set(this.graph.getNodes().map((n) => n.id)), true);
|
|
135
|
+
const result = new Set();
|
|
136
|
+
const stack = [nodeId];
|
|
137
|
+
while (stack.length > 0) {
|
|
138
|
+
const current = stack.pop();
|
|
139
|
+
for (const neighbor of adjacency.get(current) ?? []) {
|
|
140
|
+
if (!result.has(neighbor)) {
|
|
141
|
+
result.add(neighbor);
|
|
142
|
+
stack.push(neighbor);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return result;
|
|
147
|
+
}
|
|
148
|
+
/** Get all nodes that depend on a given node (reverse lookup). */
|
|
149
|
+
reverseDependencies(nodeId) {
|
|
150
|
+
const adjacency = this.buildAdjacencyList(new Set(this.graph.getNodes().map((n) => n.id)), false);
|
|
151
|
+
const result = new Set();
|
|
152
|
+
const stack = [nodeId];
|
|
153
|
+
while (stack.length > 0) {
|
|
154
|
+
const current = stack.pop();
|
|
155
|
+
for (const neighbor of adjacency.get(current) ?? []) {
|
|
156
|
+
if (!result.has(neighbor)) {
|
|
157
|
+
result.add(neighbor);
|
|
158
|
+
stack.push(neighbor);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return result;
|
|
163
|
+
}
|
|
164
|
+
/** Expand neighborhood to N hops. */
|
|
165
|
+
neighborhood(nodeId, hops) {
|
|
166
|
+
const result = new Set([nodeId]);
|
|
167
|
+
let frontier = new Set([nodeId]);
|
|
168
|
+
for (let i = 0; i < hops; i++) {
|
|
169
|
+
const next = new Set();
|
|
170
|
+
for (const id of frontier) {
|
|
171
|
+
for (const edge of [...this.graph.getOutgoingEdges(id), ...this.graph.getIncomingEdges(id)]) {
|
|
172
|
+
const neighbor = edge.source === id ? edge.target : edge.source;
|
|
173
|
+
if (!result.has(neighbor)) {
|
|
174
|
+
result.add(neighbor);
|
|
175
|
+
next.add(neighbor);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
frontier = next;
|
|
180
|
+
}
|
|
181
|
+
return result;
|
|
182
|
+
}
|
|
183
|
+
/** Compute transitive closure for dependency edges. */
|
|
184
|
+
transitiveClosure(nodeIds) {
|
|
185
|
+
const idSet = new Set(nodeIds);
|
|
186
|
+
const adjacency = this.buildAdjacencyList(idSet, true);
|
|
187
|
+
const closure = new Set();
|
|
188
|
+
for (const start of nodeIds) {
|
|
189
|
+
const reachable = this.downstreamFromAdjacency(start, adjacency);
|
|
190
|
+
for (const node of reachable) {
|
|
191
|
+
closure.add(`${start}->${node}`);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return closure;
|
|
195
|
+
}
|
|
196
|
+
downstreamFromAdjacency(start, adjacency) {
|
|
197
|
+
const result = new Set();
|
|
198
|
+
const stack = [start];
|
|
199
|
+
while (stack.length > 0) {
|
|
200
|
+
const current = stack.pop();
|
|
201
|
+
for (const neighbor of adjacency.get(current) ?? []) {
|
|
202
|
+
if (!result.has(neighbor)) {
|
|
203
|
+
result.add(neighbor);
|
|
204
|
+
stack.push(neighbor);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return result;
|
|
209
|
+
}
|
|
210
|
+
buildAdjacencyList(nodeIds, forward) {
|
|
211
|
+
const adjacency = new Map();
|
|
212
|
+
for (const id of nodeIds)
|
|
213
|
+
adjacency.set(id, []);
|
|
214
|
+
for (const edge of this.graph.getEdges()) {
|
|
215
|
+
if (!this.isDependencyEdge(edge))
|
|
216
|
+
continue;
|
|
217
|
+
const src = forward ? edge.source : edge.target;
|
|
218
|
+
const tgt = forward ? edge.target : edge.source;
|
|
219
|
+
if (nodeIds.has(src) && nodeIds.has(tgt)) {
|
|
220
|
+
adjacency.get(src)?.push(tgt);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return adjacency;
|
|
224
|
+
}
|
|
225
|
+
isDependencyEdge(edge) {
|
|
226
|
+
return (edge.kind === EdgeKind.DEPENDS_ON ||
|
|
227
|
+
edge.kind === EdgeKind.IMPORTS ||
|
|
228
|
+
edge.kind === EdgeKind.CALLS ||
|
|
229
|
+
edge.kind === EdgeKind.EXTENDS ||
|
|
230
|
+
edge.kind === EdgeKind.IMPLEMENTS);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=GraphAlgorithms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphAlgorithms.js","sourceRoot":"","sources":["../../src/graph/GraphAlgorithms.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { AnalysisConfig } from '../config/AnalysisConfig.js';
|
|
2
|
+
import { Graph } from './Graph.js';
|
|
3
|
+
/** Orchestrates the full graph construction pipeline. */
|
|
4
|
+
export declare class GraphBuilder {
|
|
5
|
+
private readonly programFactory;
|
|
6
|
+
private readonly nodeFactory;
|
|
7
|
+
private readonly edgeFactory;
|
|
8
|
+
build(config: AnalysisConfig): Graph;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=GraphBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphBuilder.d.ts","sourceRoot":"","sources":["../../src/graph/GraphBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAElE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAsBnC,yDAAyD;AACzD,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IACvD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IAEjD,KAAK,CAAC,MAAM,EAAE,cAAc,GAAG,KAAK;CAoDrC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { EdgeFactory } from './EdgeFactory.js';
|
|
2
|
+
import { Graph } from './Graph.js';
|
|
3
|
+
import { NodeFactory } from './NodeFactory.js';
|
|
4
|
+
import { ASTWalker } from '../parser/ASTWalker.js';
|
|
5
|
+
import { ProgramFactory } from '../parser/ProgramFactory.js';
|
|
6
|
+
import { ModuleResolver, PathResolver } from '../resolver/ModuleResolver.js';
|
|
7
|
+
import { SymbolResolver } from '../resolver/SymbolResolver.js';
|
|
8
|
+
import { TypeResolver } from '../resolver/TypeResolver.js';
|
|
9
|
+
import { CallVisitor } from '../parser/visitors/CallVisitor.js';
|
|
10
|
+
import { ClassVisitor } from '../parser/visitors/ClassVisitor.js';
|
|
11
|
+
import { DecoratorVisitor } from '../parser/visitors/DecoratorVisitor.js';
|
|
12
|
+
import { EnumVisitor } from '../parser/visitors/EnumVisitor.js';
|
|
13
|
+
import { ExportVisitor } from '../parser/visitors/ExportVisitor.js';
|
|
14
|
+
import { FunctionVisitor } from '../parser/visitors/FunctionVisitor.js';
|
|
15
|
+
import { HeritageVisitor } from '../parser/visitors/HeritageVisitor.js';
|
|
16
|
+
import { ImportVisitor } from '../parser/visitors/ImportVisitor.js';
|
|
17
|
+
import { InterfaceVisitor } from '../parser/visitors/InterfaceVisitor.js';
|
|
18
|
+
import { MethodVisitor } from '../parser/visitors/MethodVisitor.js';
|
|
19
|
+
import { TypeReferenceVisitor } from '../parser/visitors/TypeReferenceVisitor.js';
|
|
20
|
+
import { VariableVisitor } from '../parser/visitors/VariableVisitor.js';
|
|
21
|
+
import { toPosixPath } from '../utils/path.js';
|
|
22
|
+
/** Orchestrates the full graph construction pipeline. */
|
|
23
|
+
export class GraphBuilder {
|
|
24
|
+
programFactory = new ProgramFactory();
|
|
25
|
+
nodeFactory = new NodeFactory();
|
|
26
|
+
edgeFactory = new EdgeFactory();
|
|
27
|
+
build(config) {
|
|
28
|
+
const programResult = this.programFactory.create(config);
|
|
29
|
+
const graph = new Graph();
|
|
30
|
+
const projectNode = this.nodeFactory.project(toPosixPath(programResult.projectRoot).split('/').pop() ?? 'project', toPosixPath(programResult.projectRoot));
|
|
31
|
+
graph.addNode(projectNode);
|
|
32
|
+
const pathResolver = new PathResolver(programResult.projectRoot);
|
|
33
|
+
const moduleResolver = new ModuleResolver();
|
|
34
|
+
const symbolResolver = new SymbolResolver(programResult.checker);
|
|
35
|
+
const typeResolver = new TypeResolver(programResult.checker);
|
|
36
|
+
const ctx = {
|
|
37
|
+
graph,
|
|
38
|
+
nodeFactory: this.nodeFactory,
|
|
39
|
+
edgeFactory: this.edgeFactory,
|
|
40
|
+
symbolResolver,
|
|
41
|
+
typeResolver,
|
|
42
|
+
moduleResolver,
|
|
43
|
+
pathResolver,
|
|
44
|
+
projectRoot: programResult.projectRoot,
|
|
45
|
+
symbolNodeMap: new Map(),
|
|
46
|
+
fileNodeMap: new Map(),
|
|
47
|
+
};
|
|
48
|
+
const visitors = [
|
|
49
|
+
new ImportVisitor(ctx),
|
|
50
|
+
new ExportVisitor(ctx),
|
|
51
|
+
new ClassVisitor(ctx),
|
|
52
|
+
new InterfaceVisitor(ctx),
|
|
53
|
+
new EnumVisitor(ctx),
|
|
54
|
+
new FunctionVisitor(ctx),
|
|
55
|
+
new MethodVisitor(ctx),
|
|
56
|
+
new VariableVisitor(ctx),
|
|
57
|
+
new CallVisitor(ctx),
|
|
58
|
+
new DecoratorVisitor(ctx),
|
|
59
|
+
new TypeReferenceVisitor(ctx),
|
|
60
|
+
new HeritageVisitor(ctx),
|
|
61
|
+
];
|
|
62
|
+
const walker = new ASTWalker(visitors);
|
|
63
|
+
walker.walk(programResult.sourceFiles, {
|
|
64
|
+
checker: programResult.checker,
|
|
65
|
+
program: programResult.program,
|
|
66
|
+
projectRoot: programResult.projectRoot,
|
|
67
|
+
});
|
|
68
|
+
return graph;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=GraphBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphBuilder.js","sourceRoot":"","sources":["../../src/graph/GraphBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAExE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,yDAAyD;AACzD,MAAM,OAAO,YAAY;IACN,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;IACtC,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IAChC,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IAEjD,KAAK,CAAC,MAAsB;QAC1B,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;QAE1B,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAC1C,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,SAAS,EACpE,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,CACvC,CAAC;QACF,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAE3B,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QACjE,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;QAC5C,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACjE,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAE7D,MAAM,GAAG,GAAsB;YAC7B,KAAK;YACL,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,cAAc;YACd,YAAY;YACZ,cAAc;YACd,YAAY;YACZ,WAAW,EAAE,aAAa,CAAC,WAAW;YACtC,aAAa,EAAE,IAAI,GAAG,EAAE;YACxB,WAAW,EAAE,IAAI,GAAG,EAAE;SACvB,CAAC;QAEF,MAAM,QAAQ,GAAG;YACf,IAAI,aAAa,CAAC,GAAG,CAAC;YACtB,IAAI,aAAa,CAAC,GAAG,CAAC;YACtB,IAAI,YAAY,CAAC,GAAG,CAAC;YACrB,IAAI,gBAAgB,CAAC,GAAG,CAAC;YACzB,IAAI,WAAW,CAAC,GAAG,CAAC;YACpB,IAAI,eAAe,CAAC,GAAG,CAAC;YACxB,IAAI,aAAa,CAAC,GAAG,CAAC;YACtB,IAAI,eAAe,CAAC,GAAG,CAAC;YACxB,IAAI,WAAW,CAAC,GAAG,CAAC;YACpB,IAAI,gBAAgB,CAAC,GAAG,CAAC;YACzB,IAAI,oBAAoB,CAAC,GAAG,CAAC;YAC7B,IAAI,eAAe,CAAC,GAAG,CAAC;SACzB,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;YACrC,OAAO,EAAE,aAAa,CAAC,OAAO;YAC9B,OAAO,EAAE,aAAa,CAAC,OAAO;YAC9B,WAAW,EAAE,aAAa,CAAC,WAAW;SACvC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { SourceRange } from '../model/GraphNode.js';
|
|
2
|
+
import { NodeKind } from '../model/NodeKind.js';
|
|
3
|
+
import type { GraphNode, NodeMetadata } from '../model/GraphNode.js';
|
|
4
|
+
/** Factory for creating consistently structured graph nodes. */
|
|
5
|
+
export declare class NodeFactory {
|
|
6
|
+
create(params: {
|
|
7
|
+
kind: NodeKind;
|
|
8
|
+
label: string;
|
|
9
|
+
file?: string;
|
|
10
|
+
line?: number;
|
|
11
|
+
column?: number;
|
|
12
|
+
range?: SourceRange;
|
|
13
|
+
metadata?: NodeMetadata;
|
|
14
|
+
idOverride?: string;
|
|
15
|
+
}): GraphNode;
|
|
16
|
+
project(label: string, rootPath: string): GraphNode;
|
|
17
|
+
folder(label: string, path: string): GraphNode;
|
|
18
|
+
file(label: string, filePath: string): GraphNode;
|
|
19
|
+
package(label: string, packageName: string): GraphNode;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=NodeFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeFactory.d.ts","sourceRoot":"","sources":["../../src/graph/NodeFactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrE,gEAAgE;AAChE,qBAAa,WAAW;IACtB,MAAM,CAAC,MAAM,EAAE;QACb,IAAI,EAAE,QAAQ,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,WAAW,CAAC;QACpB,QAAQ,CAAC,EAAE,YAAY,CAAC;QACxB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,SAAS;IAiBb,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS;IASnD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS;IAS9C,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS;IAUhD,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS;CAQvD"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { NodeKind } from '../model/NodeKind.js';
|
|
2
|
+
import { nodeId } from '../utils/id.js';
|
|
3
|
+
/** Factory for creating consistently structured graph nodes. */
|
|
4
|
+
export class NodeFactory {
|
|
5
|
+
create(params) {
|
|
6
|
+
const file = params.file ?? '';
|
|
7
|
+
const id = params.idOverride ?? nodeId(params.kind, file, params.label, params.line);
|
|
8
|
+
return {
|
|
9
|
+
id,
|
|
10
|
+
label: params.label,
|
|
11
|
+
kind: params.kind,
|
|
12
|
+
file: params.file,
|
|
13
|
+
line: params.line,
|
|
14
|
+
column: params.column,
|
|
15
|
+
range: params.range,
|
|
16
|
+
metadata: params.metadata ?? {},
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
project(label, rootPath) {
|
|
20
|
+
return this.create({
|
|
21
|
+
kind: NodeKind.Project,
|
|
22
|
+
label,
|
|
23
|
+
idOverride: `Project:${rootPath}`,
|
|
24
|
+
metadata: { rootPath },
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
folder(label, path) {
|
|
28
|
+
return this.create({
|
|
29
|
+
kind: NodeKind.Folder,
|
|
30
|
+
label,
|
|
31
|
+
idOverride: `Folder:${path}`,
|
|
32
|
+
metadata: { path },
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
file(label, filePath) {
|
|
36
|
+
return this.create({
|
|
37
|
+
kind: NodeKind.File,
|
|
38
|
+
label,
|
|
39
|
+
file: filePath,
|
|
40
|
+
idOverride: `File:${filePath}`,
|
|
41
|
+
metadata: { path: filePath },
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
package(label, packageName) {
|
|
45
|
+
return this.create({
|
|
46
|
+
kind: NodeKind.Package,
|
|
47
|
+
label,
|
|
48
|
+
idOverride: `Package:${packageName}`,
|
|
49
|
+
metadata: { packageName },
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=NodeFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeFactory.js","sourceRoot":"","sources":["../../src/graph/NodeFactory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,gEAAgE;AAChE,MAAM,OAAO,WAAW;IACtB,MAAM,CAAC,MASN;QACC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QAC/B,MAAM,EAAE,GACN,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAE5E,OAAO;YACL,EAAE;YACF,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;SAChC,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,KAAa,EAAE,QAAgB;QACrC,OAAO,IAAI,CAAC,MAAM,CAAC;YACjB,IAAI,EAAE,QAAQ,CAAC,OAAO;YACtB,KAAK;YACL,UAAU,EAAE,WAAW,QAAQ,EAAE;YACjC,QAAQ,EAAE,EAAE,QAAQ,EAAE;SACvB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,KAAa,EAAE,IAAY;QAChC,OAAO,IAAI,CAAC,MAAM,CAAC;YACjB,IAAI,EAAE,QAAQ,CAAC,MAAM;YACrB,KAAK;YACL,UAAU,EAAE,UAAU,IAAI,EAAE;YAC5B,QAAQ,EAAE,EAAE,IAAI,EAAE;SACnB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,KAAa,EAAE,QAAgB;QAClC,OAAO,IAAI,CAAC,MAAM,CAAC;YACjB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,KAAK;YACL,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,QAAQ,QAAQ,EAAE;YAC9B,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,KAAa,EAAE,WAAmB;QACxC,OAAO,IAAI,CAAC,MAAM,CAAC;YACjB,IAAI,EAAE,QAAQ,CAAC,OAAO;YACtB,KAAK;YACL,UAAU,EAAE,WAAW,WAAW,EAAE;YACpC,QAAQ,EAAE,EAAE,WAAW,EAAE;SAC1B,CAAC,CAAC;IACL,CAAC;CACF"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export type { AnalysisConfig, LayerRule } from './config/AnalysisConfig.js';
|
|
2
|
+
export { DEFAULT_CONFIG } from './config/AnalysisConfig.js';
|
|
3
|
+
export { NodeKind } from './model/NodeKind.js';
|
|
4
|
+
export { EdgeKind } from './model/EdgeKind.js';
|
|
5
|
+
export type { GraphNode, SourceRange, NodeMetadata } from './model/GraphNode.js';
|
|
6
|
+
export type { GraphEdge, EdgeMetadata, EdgeConfidence } from './model/GraphEdge.js';
|
|
7
|
+
export { Graph } from './graph/Graph.js';
|
|
8
|
+
export { GraphBuilder } from './graph/GraphBuilder.js';
|
|
9
|
+
export { GraphAlgorithms } from './graph/GraphAlgorithms.js';
|
|
10
|
+
export { NodeFactory } from './graph/NodeFactory.js';
|
|
11
|
+
export { EdgeFactory } from './graph/EdgeFactory.js';
|
|
12
|
+
export { ProgramFactory } from './parser/ProgramFactory.js';
|
|
13
|
+
export type { ProgramResult } from './parser/ProgramFactory.js';
|
|
14
|
+
export { ASTWalker } from './parser/ASTWalker.js';
|
|
15
|
+
export type { ASTVisitor, VisitorContext } from './parser/ASTWalker.js';
|
|
16
|
+
export { ModuleResolver, PathResolver } from './resolver/ModuleResolver.js';
|
|
17
|
+
export { SymbolResolver } from './resolver/SymbolResolver.js';
|
|
18
|
+
export { TypeResolver } from './resolver/TypeResolver.js';
|
|
19
|
+
export { CircularDependencyAnalyzer } from './analysis/CircularDependencyAnalyzer.js';
|
|
20
|
+
export type { CycleReport } from './analysis/CircularDependencyAnalyzer.js';
|
|
21
|
+
export { DeadCodeAnalyzer } from './analysis/DeadCodeAnalyzer.js';
|
|
22
|
+
export type { DeadCodeReport } from './analysis/DeadCodeAnalyzer.js';
|
|
23
|
+
export { ImpactAnalyzer } from './analysis/ImpactAnalyzer.js';
|
|
24
|
+
export type { ImpactReport } from './analysis/ImpactAnalyzer.js';
|
|
25
|
+
export { DependencyAnalyzer } from './analysis/DependencyAnalyzer.js';
|
|
26
|
+
export type { DependencyReport } from './analysis/DependencyAnalyzer.js';
|
|
27
|
+
export { LayerViolationAnalyzer, computeStats } from './analysis/LayerViolationAnalyzer.js';
|
|
28
|
+
export type { LayerViolationReport, GraphStats } from './analysis/LayerViolationAnalyzer.js';
|
|
29
|
+
export type { GraphExporter } from './exporters/GraphExporter.js';
|
|
30
|
+
export { JsonExporter } from './exporters/JsonExporter.js';
|
|
31
|
+
export { DotExporter, MermaidExporter } from './exporters/DotExporter.js';
|
|
32
|
+
export { GraphMLExporter } from './exporters/GraphMLExporter.js';
|
|
33
|
+
export { CytoscapeExporter, ReactFlowExporter, Neo4jExporter } from './exporters/CytoscapeExporter.js';
|
|
34
|
+
export { ProjectLoader } from './cli/ProjectLoader.js';
|
|
35
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACjF,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEpF,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,YAAY,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAExE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAC;AACtF,YAAY,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,YAAY,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,YAAY,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,YAAY,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAC5F,YAAY,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAE7F,YAAY,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEvG,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export { DEFAULT_CONFIG } from './config/AnalysisConfig.js';
|
|
2
|
+
export { NodeKind } from './model/NodeKind.js';
|
|
3
|
+
export { EdgeKind } from './model/EdgeKind.js';
|
|
4
|
+
export { Graph } from './graph/Graph.js';
|
|
5
|
+
export { GraphBuilder } from './graph/GraphBuilder.js';
|
|
6
|
+
export { GraphAlgorithms } from './graph/GraphAlgorithms.js';
|
|
7
|
+
export { NodeFactory } from './graph/NodeFactory.js';
|
|
8
|
+
export { EdgeFactory } from './graph/EdgeFactory.js';
|
|
9
|
+
export { ProgramFactory } from './parser/ProgramFactory.js';
|
|
10
|
+
export { ASTWalker } from './parser/ASTWalker.js';
|
|
11
|
+
export { ModuleResolver, PathResolver } from './resolver/ModuleResolver.js';
|
|
12
|
+
export { SymbolResolver } from './resolver/SymbolResolver.js';
|
|
13
|
+
export { TypeResolver } from './resolver/TypeResolver.js';
|
|
14
|
+
export { CircularDependencyAnalyzer } from './analysis/CircularDependencyAnalyzer.js';
|
|
15
|
+
export { DeadCodeAnalyzer } from './analysis/DeadCodeAnalyzer.js';
|
|
16
|
+
export { ImpactAnalyzer } from './analysis/ImpactAnalyzer.js';
|
|
17
|
+
export { DependencyAnalyzer } from './analysis/DependencyAnalyzer.js';
|
|
18
|
+
export { LayerViolationAnalyzer, computeStats } from './analysis/LayerViolationAnalyzer.js';
|
|
19
|
+
export { JsonExporter } from './exporters/JsonExporter.js';
|
|
20
|
+
export { DotExporter, MermaidExporter } from './exporters/DotExporter.js';
|
|
21
|
+
export { GraphMLExporter } from './exporters/GraphMLExporter.js';
|
|
22
|
+
export { CytoscapeExporter, ReactFlowExporter, Neo4jExporter } from './exporters/CytoscapeExporter.js';
|
|
23
|
+
export { ProjectLoader } from './cli/ProjectLoader.js';
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAI/C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGlD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAC;AAEtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEtE,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAI5F,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEvG,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** All supported edge kinds in the knowledge graph. */
|
|
2
|
+
export declare enum EdgeKind {
|
|
3
|
+
IMPORTS = "IMPORTS",
|
|
4
|
+
EXPORTS = "EXPORTS",
|
|
5
|
+
CALLS = "CALLS",
|
|
6
|
+
REFERENCES = "REFERENCES",
|
|
7
|
+
EXTENDS = "EXTENDS",
|
|
8
|
+
IMPLEMENTS = "IMPLEMENTS",
|
|
9
|
+
CREATES = "CREATES",
|
|
10
|
+
USES = "USES",
|
|
11
|
+
RETURNS = "RETURNS",
|
|
12
|
+
ACCEPTS = "ACCEPTS",
|
|
13
|
+
DECLARES = "DECLARES",
|
|
14
|
+
BELONGS_TO = "BELONGS_TO",
|
|
15
|
+
CONTAINS = "CONTAINS",
|
|
16
|
+
DEPENDS_ON = "DEPENDS_ON",
|
|
17
|
+
INJECTS = "INJECTS",
|
|
18
|
+
DECORATED_BY = "DECORATED_BY",
|
|
19
|
+
DYNAMIC_IMPORT = "DYNAMIC_IMPORT",
|
|
20
|
+
TYPE_REFERENCE = "TYPE_REFERENCE"
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=EdgeKind.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EdgeKind.d.ts","sourceRoot":"","sources":["../../src/model/EdgeKind.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,oBAAY,QAAQ;IAClB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,UAAU,eAAe;IACzB,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,UAAU,eAAe;IACzB,QAAQ,aAAa;IACrB,UAAU,eAAe;IACzB,OAAO,YAAY;IACnB,YAAY,iBAAiB;IAC7B,cAAc,mBAAmB;IACjC,cAAc,mBAAmB;CAClC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** All supported edge kinds in the knowledge graph. */
|
|
2
|
+
export var EdgeKind;
|
|
3
|
+
(function (EdgeKind) {
|
|
4
|
+
EdgeKind["IMPORTS"] = "IMPORTS";
|
|
5
|
+
EdgeKind["EXPORTS"] = "EXPORTS";
|
|
6
|
+
EdgeKind["CALLS"] = "CALLS";
|
|
7
|
+
EdgeKind["REFERENCES"] = "REFERENCES";
|
|
8
|
+
EdgeKind["EXTENDS"] = "EXTENDS";
|
|
9
|
+
EdgeKind["IMPLEMENTS"] = "IMPLEMENTS";
|
|
10
|
+
EdgeKind["CREATES"] = "CREATES";
|
|
11
|
+
EdgeKind["USES"] = "USES";
|
|
12
|
+
EdgeKind["RETURNS"] = "RETURNS";
|
|
13
|
+
EdgeKind["ACCEPTS"] = "ACCEPTS";
|
|
14
|
+
EdgeKind["DECLARES"] = "DECLARES";
|
|
15
|
+
EdgeKind["BELONGS_TO"] = "BELONGS_TO";
|
|
16
|
+
EdgeKind["CONTAINS"] = "CONTAINS";
|
|
17
|
+
EdgeKind["DEPENDS_ON"] = "DEPENDS_ON";
|
|
18
|
+
EdgeKind["INJECTS"] = "INJECTS";
|
|
19
|
+
EdgeKind["DECORATED_BY"] = "DECORATED_BY";
|
|
20
|
+
EdgeKind["DYNAMIC_IMPORT"] = "DYNAMIC_IMPORT";
|
|
21
|
+
EdgeKind["TYPE_REFERENCE"] = "TYPE_REFERENCE";
|
|
22
|
+
})(EdgeKind || (EdgeKind = {}));
|
|
23
|
+
//# sourceMappingURL=EdgeKind.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EdgeKind.js","sourceRoot":"","sources":["../../src/model/EdgeKind.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,MAAM,CAAN,IAAY,QAmBX;AAnBD,WAAY,QAAQ;IAClB,+BAAmB,CAAA;IACnB,+BAAmB,CAAA;IACnB,2BAAe,CAAA;IACf,qCAAyB,CAAA;IACzB,+BAAmB,CAAA;IACnB,qCAAyB,CAAA;IACzB,+BAAmB,CAAA;IACnB,yBAAa,CAAA;IACb,+BAAmB,CAAA;IACnB,+BAAmB,CAAA;IACnB,iCAAqB,CAAA;IACrB,qCAAyB,CAAA;IACzB,iCAAqB,CAAA;IACrB,qCAAyB,CAAA;IACzB,+BAAmB,CAAA;IACnB,yCAA6B,CAAA;IAC7B,6CAAiC,CAAA;IACjC,6CAAiC,CAAA;AACnC,CAAC,EAnBW,QAAQ,KAAR,QAAQ,QAmBnB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { EdgeKind } from './EdgeKind.js';
|
|
2
|
+
/** Confidence level for inferred relationships. */
|
|
3
|
+
export type EdgeConfidence = 'high' | 'medium' | 'low';
|
|
4
|
+
/** Arbitrary metadata attached to a graph edge. */
|
|
5
|
+
export type EdgeMetadata = Record<string, string | number | boolean | string[] | undefined>;
|
|
6
|
+
/** An edge in the codebase knowledge graph. */
|
|
7
|
+
export interface GraphEdge {
|
|
8
|
+
id: string;
|
|
9
|
+
source: string;
|
|
10
|
+
target: string;
|
|
11
|
+
kind: EdgeKind;
|
|
12
|
+
metadata: EdgeMetadata;
|
|
13
|
+
}
|
|
14
|
+
/** Standard edge metadata fields. */
|
|
15
|
+
export interface EdgeLocationMetadata extends EdgeMetadata {
|
|
16
|
+
file?: string;
|
|
17
|
+
line?: number;
|
|
18
|
+
column?: number;
|
|
19
|
+
confidence?: EdgeConfidence;
|
|
20
|
+
static?: boolean;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=GraphEdge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphEdge.d.ts","sourceRoot":"","sources":["../../src/model/GraphEdge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,mDAAmD;AACnD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEvD,mDAAmD;AACnD,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;AAE5F,+CAA+C;AAC/C,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED,qCAAqC;AACrC,MAAM,WAAW,oBAAqB,SAAQ,YAAY;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphEdge.js","sourceRoot":"","sources":["../../src/model/GraphEdge.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { NodeKind } from './NodeKind.js';
|
|
2
|
+
/** Source location range within a file. */
|
|
3
|
+
export interface SourceRange {
|
|
4
|
+
startLine: number;
|
|
5
|
+
startColumn: number;
|
|
6
|
+
endLine: number;
|
|
7
|
+
endColumn: number;
|
|
8
|
+
}
|
|
9
|
+
/** Arbitrary metadata attached to a graph node. */
|
|
10
|
+
export type NodeMetadata = Record<string, string | number | boolean | string[] | undefined>;
|
|
11
|
+
/** A node in the codebase knowledge graph. */
|
|
12
|
+
export interface GraphNode {
|
|
13
|
+
id: string;
|
|
14
|
+
label: string;
|
|
15
|
+
kind: NodeKind;
|
|
16
|
+
file?: string;
|
|
17
|
+
line?: number;
|
|
18
|
+
column?: number;
|
|
19
|
+
range?: SourceRange;
|
|
20
|
+
metadata: NodeMetadata;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=GraphNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphNode.d.ts","sourceRoot":"","sources":["../../src/model/GraphNode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,2CAA2C;AAC3C,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,mDAAmD;AACnD,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;AAE5F,8CAA8C;AAC9C,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,YAAY,CAAC;CACxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphNode.js","sourceRoot":"","sources":["../../src/model/GraphNode.ts"],"names":[],"mappings":""}
|