Security News
tea.xyz Spam Plagues npm and RubyGems Package Registries
Tea.xyz, a crypto project aimed at rewarding open source contributions, is once again facing backlash due to an influx of spam packages flooding public package registries.
ngraph.graph
Advanced tools
Readme
Graph data structure for javascript. This library belongs to a family of javascript graph packages called ngraph.
With npm do:
npm install ngraph.graph
Or download from CDN:
<script src='https://unpkg.com/ngraph.graph@20.0.1/dist/ngraph.graph.min.js'></script>
If you download from CDN the library will be available under createGraph
global name.
Create a graph with no edges and no nodes:
var createGraph = require('ngraph.graph');
var g = createGraph();
The graph g
can be grown in two ways. You can add one node at a time:
g.addNode('hello');
g.addNode('world');
Now graph g
contains two nodes: hello
and world
. You can also use addLink()
method to grow a graph. Calling this method with nodes which are not present in
the graph creates them:
g.addLink('space', 'bar'); // now graph 'g' has two new nodes: 'space' and 'bar'
If nodes already present in the graph 'addLink()' makes them connected:
// Only a link between 'hello' and 'world' is created. No new nodes.
g.addLink('hello', 'world');
The most common and convenient choices are numbers and strings. You can
associate arbitrary data with node via optional second argument of addNode()
method:
// Node 'world' is associated with a string object 'custom data'
g.addNode('world', 'custom data');
// You can associate arbitrary objects with node:
g.addNode('server', {
status: 'on',
ip: '127.0.0.1'
});
// to get data back use `data` property of node:
var server = g.getNode('server');
console.log(server.data); // prints associated object
You can also associate arbitrary object with a link using third optional
argument of addLink()
method:
// A link between nodes '1' and '2' is now associated with object 'x'
g.addLink(1, 2, x);
After you created a graph one of the most common things to do is to enumerate its nodes/links to perform an operation.
g.forEachNode(function(node){
console.log(node.id, node.data);
});
The function takes callback which accepts current node. Node object may contain
internal information. node.id
and node.data
represent parameters passed to
the g.addNode(id, data)
method and they are guaranteed to be present in future
versions of the library.
To enumerate all links in the graph use forEachLink()
method:
g.forEachLink(function(link) {
console.dir(link);
});
To enumerate all links for a specific node use forEachLinkedNode()
method:
g.forEachLinkedNode('hello', function(linkedNode, link){
console.log("Connected node: ", linkedNode.id, linkedNode.data);
console.dir(link); // link object itself
});
This method always enumerates both inbound and outbound links. If you want to get only outbound links, pass third optional argument:
g.forEachLinkedNode('hello',
function(linkedNode, link) { /* ... */ },
true // enumerate only outbound links
);
To get a particular node object use getNode()
method. E.g.:
var world = g.getNode('world'); // returns 'world' node
console.log(world.id, world.data);
To get a particular link object use getLink()
method:
var helloWorldLink = g.getLink('hello', 'world'); // returns a link from 'hello' to 'world'
console.log(helloWorldLink);
To remove a node or a link from a graph use removeNode()
or removeLink()
correspondingly:
g.removeNode('space');
// Removing link is a bit harder, since method requires actual link object:
g.forEachLinkedNode('hello', function(linkedNode, link){
g.removeLink(link);
});
You can also remove all nodes and links by calling
g.clear();
Whenever someone changes your graph you can listen to notifications:
g.on('changed', function(changes) {
console.dir(changes); // prints array of change records
});
g.add(42); // this will trigger 'changed event'
Each change record holds information:
ChangeRecord = {
changeType: add|remove|update - describes type of this change
node: - only present when this record reflects a node change, represents actual node
link: - only present when this record reflects a link change, represents actual link
}
Sometimes it is desirable to react only on bulk changes. ngraph.graph supports
this via beginUpdate()
/endUpdate()
methods:
g.beginUpdate();
for(var i = 0; i < 100; ++i) {
g.addLink(i, i + 1); // no events are triggered here
}
g.endUpdate(); // this triggers all listeners of 'changed' event
If you want to stop listen to events use off()
method:
g.off('changed', yourHandler); // no longer interested in changes from graph
For more information about events, please follow to ngraph.events
BSD 3-clause
FAQs
graph data structure
The npm package ngraph.graph receives a total of 19,559 weekly downloads. As such, ngraph.graph popularity was classified as popular.
We found that ngraph.graph demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Tea.xyz, a crypto project aimed at rewarding open source contributions, is once again facing backlash due to an influx of spam packages flooding public package registries.
Security News
As cyber threats become more autonomous, AI-powered defenses are crucial for businesses to stay ahead of attackers who can exploit software vulnerabilities at scale.
Security News
UnitedHealth Group disclosed that the ransomware attack on Change Healthcare compromised protected health information for millions in the U.S., with estimated costs to the company expected to reach $1 billion.