@@ -138,6 +138,17 @@ const graphNodesTotalMap = new Map<string, GraphNodesTotalData>()
138
138
const modulesMap = new Map < string , GraphNodesTotalData > ( )
139
139
const moduleReferences = new Map < string , { path : string , displayPath : string , mod : ModuleInfo } [ ] > ( )
140
140
141
+ const uniqueNodes = ( nodes : Node [ ] ) => nodes . reduce < Node [ ] > ( ( prev , node ) => {
142
+ if ( ! prev . some ( n => n . id === node . id ) )
143
+ prev . push ( node )
144
+ return prev
145
+ } , [ ] )
146
+ const uniqueEdges = ( edges : Edge [ ] ) => edges . reduce < Edge [ ] > ( ( prev , edge ) => {
147
+ if ( ! prev . some ( e => e . from === edge . from && e . to === edge . to ) )
148
+ prev . push ( edge )
149
+ return prev
150
+ } , [ ] )
151
+
141
152
export function cleanupGraphRelatedStates ( ) {
142
153
graphNodesTotal . value = [ ]
143
154
graphNodesTotalMap . clear ( )
@@ -209,8 +220,8 @@ function updateGraph() {
209
220
}
210
221
}
211
222
212
- graphNodes . add ( matchedNodes )
213
- graphEdges . add ( matchedEdges )
223
+ graphNodes . add ( uniqueNodes ( matchedNodes ) )
224
+ graphEdges . add ( uniqueEdges ( matchedEdges ) )
214
225
}
215
226
216
227
function recursivelyGetNodeByDep ( node : SearcherNode [ ] ) {
@@ -314,6 +325,8 @@ export function parseGraphRawData(modules: ModuleInfo[], root: string) {
314
325
edges . push ( getEdge ( mod . id , dep ) )
315
326
} )
316
327
const incrementalDeps = uniqueDeps . filter ( dep => ! nodeData . mod . deps . includes ( dep ) )
328
+ if ( ! incrementalDeps . length )
329
+ return
317
330
nodeData . mod . deps . push ( ...incrementalDeps )
318
331
totalEdges . push ( ...edges )
319
332
return
@@ -367,8 +380,9 @@ export function parseGraphRawData(modules: ModuleInfo[], root: string) {
367
380
}
368
381
} )
369
382
// set initial data
383
+ // nodes has been unique in `modules.forEach`
370
384
graphNodes . add ( totalNode . slice ( ) )
371
- graphEdges . add ( totalEdges . slice ( ) )
385
+ graphEdges . add ( uniqueEdges ( totalEdges ) )
372
386
}
373
387
// #endregion
374
388
@@ -449,17 +463,23 @@ export function getGraphFilterDataset() {
449
463
return dataset
450
464
}
451
465
452
- function recursivelyGetGraphNodeData ( nodeId : string ) : GraphNodesTotalData [ ] {
466
+ // max depth is 20
467
+ function recursivelyGetGraphNodeData ( nodeId : string , depth = 0 ) : GraphNodesTotalData [ ] {
453
468
const node = modulesMap . get ( nodeId )
454
- if ( ! node )
469
+ depth += 1
470
+ if ( ! node || depth > 20 )
455
471
return [ ]
456
472
const result = [ node ]
457
473
node . mod . deps . forEach ( ( dep ) => {
458
474
const node = modulesMap . get ( dep )
459
475
if ( node )
460
- result . push ( ...recursivelyGetGraphNodeData ( node . mod . id ) )
476
+ result . push ( ...recursivelyGetGraphNodeData ( node . mod . id , depth ) )
461
477
} )
462
478
// unique result
463
- return Array . from ( new Set ( result ) )
479
+ return result . reduce < GraphNodesTotalData [ ] > ( ( prev , node ) => {
480
+ if ( ! prev . some ( n => n . mod . id === node . mod . id ) )
481
+ prev . push ( node )
482
+ return prev
483
+ } , [ ] )
464
484
}
465
485
// #endregion
0 commit comments