deps-iterator
Iterator for walking dependency graph. Cycles will be detected.
Usage
var Deps = require('deps-iterator');
var iter = Deps(records, opts);
-
records
: Array. Each element contains a node and its dependencies. -
opts
: Object. Optional.key
: String. way to get the key. ('id')deps
: String | Function. way to get the deps. ('deps')keepDepsOrder
: Boolean. Iftrue
, the order ofdeps
matters.(true)
-
iter
:Iterable
used to walk the dependency graph
for (var node of iter)
iter.on('cycle', cb)
See example below.
Examples
for..of keepDepsOrder:false
var Deps = ;var records = id: 0 deps: 1 2 id: 1 deps: id: 2 deps: 3 id: 3 deps: id: 4 deps: 5 3 id: 5 deps: 3 ;var iter = ;var ordered = ;for var node of iter ordered;console;console;
output:
⌘ node examples/no-cycle.js
ordered:
[ { id: 1, deps: [] },
{ id: 3, deps: [] },
{ id: 2, deps: [ 3 ] },
{ id: 0, deps: [ 1, 2 ] },
{ id: 5, deps: [ 3 ] },
{ id: 4, deps: [ 5, 3 ] } ]
for..of keepDepsOrder:true
var Deps = ;var records = id: 0 deps: 1 2 id: 1 deps: id: 2 deps: 3 id: 3 deps: id: 4 deps: 5 3 id: 5 deps: 3 ;var iter = ;var ordered = ;for var node of iter ordered;console;console;
output:
⌘ node examples/keepDepsOrder.js
ordered:
[ { id: 1, deps: [] },
{ id: 5, deps: [ 3 ] },
{ id: 3, deps: [] },
{ id: 2, deps: [ 3 ] },
{ id: 0, deps: [ 1, 2 ] },
{ id: 4, deps: [ 5, 3 ] } ]
.on('cycle', cb)
var Deps = ;var records = id: 0 deps: 1 id: 1 deps: 2 id: 2 deps: 0 3 id: 3 deps: 4 id: 4 deps: 2 id: 5 deps: 3 ;var iter = ;iter;var ordered = ;for var node of iter ordered;console;console;
output:
⌘ node examples/cycle.js
ordered:
[ { id: 4, deps: [ 2 ] },
{ id: 3, deps: [ 4 ] },
{ id: 2, deps: [ 0, 3 ] },
{ id: 1, deps: [ 2 ] },
{ id: 0, deps: [ 1 ] },
{ id: 5, deps: [ 3 ] } ]
cycle: [ '0', '1', '2', '0' ]
cycle: [ '2', '3', '4', '2' ]
various deps
var JSONStream = ;var rs = ; var Deps = ;var records = id: './entry.css' deps: './deps/a.css': '/Users/zoubin/example/deps/a.css' './deps/b.css': '/Users/zoubin/example/deps/b.css' id: '/Users/zoubin/example/deps/b.css' deps: {} id: '/Users/zoubin/example/deps/a.css' deps: {} ;var iter = ; for var node of iter rs;rs;rs;
output:
⌘ node examples/deps.js
[
{"id":"/Users/zoubin/example/deps/a.css","deps":{}}
,
{"id":"/Users/zoubin/example/deps/b.css","deps":{}}
,
{"id":"./entry.css","deps":{"./deps/a.css":"/Users/zoubin/example/deps/a.css","./deps/b.css":"/Users/zoubin/example/deps/b.css"}}
]