Security News
Oracle Drags Its Feet in the JavaScript Trademark Dispute
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
A graph processing and visualization library for JavaScript (port of NetworkX for Python).
JSNetworkX allows you to build, process and analyze graphs in JavaScript. It can be used together with D3.js in the browser to create interactive graph visualizations.
It is a port of NetworkX (v1.6), a popular graph library for Python, to JavaScript. Extensive information can be found on:
Install from npm:
npm install jsnetworkx
Download jsnetworkx.js and include it in your page with
<script src="/path/to/jsnetworkx.js"></script>
This will create the global variable jsnx
, with which all functions can be
accessed.
JSNetworkX consists of multiple parts which work closely together:
Graph
, DiGraph
, MultiGraph
and MultiDiGraph
) to model
the dataMost classes and functions are available on the root object (jsnx
in
browsers, require('jsnetworkx')
in Node).
Information about which algorithms are available and the API of the classes, can be found in the auto-generated API documentation.
// var jsnx = require('jsnetworkx'); // in Node
// a tree of height 4 with fan-out 2
var G = jsnx.balancedTree(2, 4);
// Computest the shortest path between node 2 and 6
var path = jsnx.bidirectionalShortestPath(G, 2, 7);
// [ 2, 0, 1, 3, 7 ]
// or asynchronously
jsnx.genBidirectionalShortestPath(G, 2, 7).then(function(path) {
// path = [ 2, 0, 1, 3, 7 ]
});
More examples can we found on the website.
All the algorithms are implement in a synchronous fashion (for now at least).
However, many algorithms are also available as asynchronous version. Their
names are gen<SyncFunctionName>
(see example above) and they return a
Promise.
This is achieved in browsers by creating a WebWorker. The WebWorker has
to be passed the path to the jsnetworkx.js
file. You have to set the path
explicitly if the file is not located at the root:
jsnx.workerPath = '/path/to/jsnetworkx.js';
In Node, a subprocess will be spawned (no setup is required).
Caveat: In both cases the input data has to be serialized before it can be set to the worker or subprocess. However, not every value can be serialized, in which case JSNetworkX will use the synchronous version instead. If you encounter a situation where a value is not serialized, but it should be serializable, please file an issue.
Many methods return generators or Maps. In an ES2015 environment, these can be
easily consumed with a for/of
loop or Array.from
.
If those are not available to you, JSNetworkX provides two helper methods for
iterating iterables and converting them to arrays: jsnx.forEach
and
jsnx.toArray
You can contribute by:
If you plan on converting/porting a specific part, please create an issue beforehand.
JSNetworkX is written in ES2015 (ES6) and Babel is used to convert it to ES5. For the browser, all modules are bundled together with browserify.
To build JSNetworkX, all dependencies have to be installed via
npm install
npm run build:browser
creates jsnetworkx.js
, a minified version for production.
npm run build:browser:dev
npm run watch:browser
Creates jsnetworkx-dev.js
, an unminified version with inline source maps for
development. The second version automatically rebuilds the file on change.
npm run build:node
Transforms all modules to ES5 and saves them inside the node/
directory.
npm run build:node:dev
Same as above but with inline source maps. These modules are also used to tun the unit tests.
npm run watch:node
Incrementally transform modules when files change.
Tests are stored in the respective __tests__
directories and have to follow
the naming convention <testname>-test.js
. The tests can be run with
npm test
# or
npm run test:fast # if you also run `npm run watch:node`
This will run all tests by default. To consider only those files whose path
matches a specific string, pass the -g
option:
# Runs all digraph tests but no graph tests
npm test:fast -- -g digraph
The difference between npm test
and npm run test:fast
is that the former
will always transplile all files from ES6 to ES5 first. This is slow and
annoying during development. Therefore you can use
npm run watch:node
to automatically convert only the changed file and run npm run test:fast
to
quickly test them.
Ideally, every module has corresponding unit test. If you port a module from NetworkX, make sure to implement the same tests.
We use istanbul to generate a coverage report. We are not enforcing any coverage yet, but there should not be a regression. The report can be created via
npm run cover
and written to coverage/
.
v0.3.0
clustering
is available as genClustering
. Those methods return a Promise
and will
delegate to a web worker in browsers. In Node.js, a new process will be
spawned.stickyDrag
. If set to true
, the dragged node will keep
its new position after dragging and is not subject to the force layout.
D3 example.underscore_method_names
to camelCaseMethodNames
.{type, name, n, list}
as first argument instead of an array [type, name, n, list]
.{n1: ..., n2: ..., ...}
and n1
, n2
, ... would have been treated as nodes.
Instead, any object that implements the [ES6 iterator protocol][iterator]
can be used.
This includes (by default) arrays and generator functions.new
anymore. I.e. you have to use
var G = new jsnx.Graph();
instead of var G = jsnx.Graph();
. That's because
ES6 classes cannot be called without new
.cumulative_sum
, generate_unique_node
and
is_list_of_ints
have been removed, since there was no need for them.balancedTree
doesn't set the height to 2
anymore if the branching factor is
1
. So balancedTree(1, 4)
is equivalent to pathGraph(4)
.camelCase
now instead of
under_score
.FAQs
A graph processing and visualization library for JavaScript (port of NetworkX for Python).
The npm package jsnetworkx receives a total of 174 weekly downloads. As such, jsnetworkx popularity was classified as not popular.
We found that jsnetworkx 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
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.
Security News
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.