in src/models/GraphBundler.js [91:138]
mergeNodes(nodes) {
const newNode = Node.merge(nodes);
newNode.id = this.nodes.length;
this.nodes.push(newNode);
nodes.forEach(n => { n.merged = true; });
newNode.rightLinks = chain(nodes)
.flatMap(n => n.rightLinks)
.groupBy(l => l.target.id)
.mapValues(links => {
const target = links[0].target;
target.leftLinks = target.leftLinks
.filter(l => !l.source.merged);
const link = new Link(
newNode,
links[0].target,
sum(links.map(l => l.freq))
);
target.leftLinks.push(link);
return link;
})
.values()
.value();
this.addLinks(newNode.rightLinks);
newNode.leftLinks = chain(nodes)
.flatMap(n => n.leftLinks)
.groupBy(l => l.source.id)
.mapValues(links => {
const source = links[0].source;
source.rightLinks = source.rightLinks
.filter(l => !l.target.merged);
const link = new Link(
links[0].source,
newNode,
sum(links.map(l => l.freq))
);
source.rightLinks.push(link);
return link;
})
.values()
.value();
this.addLinks(newNode.leftLinks);
return newNode;
}