Comparing version 1.1.0 to 2.0.0
123
lib/index.js
@@ -0,4 +1,6 @@ | ||
'use strict'; | ||
// Load modules | ||
var Hoek = require('hoek'); | ||
const Hoek = require('hoek'); | ||
@@ -8,3 +10,3 @@ | ||
var internals = {}; | ||
const internals = {}; | ||
@@ -21,4 +23,2 @@ | ||
var self = this; | ||
options = options || {}; | ||
@@ -28,6 +28,6 @@ | ||
var before = [].concat(options.before || []); | ||
var after = [].concat(options.after || []); | ||
var group = options.group || '?'; | ||
var sort = options.sort || 0; // Used for merging only | ||
const before = [].concat(options.before || []); | ||
const after = [].concat(options.after || []); | ||
const group = options.group || '?'; | ||
const sort = options.sort || 0; // Used for merging only | ||
@@ -39,6 +39,6 @@ Hoek.assert(before.indexOf(group) === -1, 'Item cannot come before itself:', group); | ||
([].concat(nodes)).forEach(function (node, i) { | ||
([].concat(nodes)).forEach((node, i) => { | ||
var item = { | ||
seq: self._items.length, | ||
const item = { | ||
seq: this._items.length, | ||
sort: sort, | ||
@@ -51,3 +51,3 @@ before: before, | ||
self._items.push(item); | ||
this._items.push(item); | ||
}); | ||
@@ -57,3 +57,3 @@ | ||
var error = this._sort(); | ||
const error = this._sort(); | ||
Hoek.assert(!error, 'item', (group !== '?' ? 'added into group ' + group : ''), 'created a dependencies error'); | ||
@@ -68,7 +68,7 @@ | ||
others = [].concat(others); | ||
for (var o = 0, ol = others.length; o < ol; ++o) { | ||
var other = others[o]; | ||
for (let i = 0; i < others.length; ++i) { | ||
const other = others[i]; | ||
if (other) { | ||
for (var i = 0, il = other._items.length; i < il; ++i) { | ||
var item = Hoek.shallow(other._items[i]); | ||
for (let j = 0; j < other._items.length; ++j) { | ||
const item = Hoek.shallow(other._items[j]); | ||
this._items.push(item); | ||
@@ -82,7 +82,7 @@ } | ||
this._items.sort(internals.mergeSort); | ||
for (i = 0, il = this._items.length; i < il; ++i) { | ||
for (let i = 0; i < this._items.length; ++i) { | ||
this._items[i].seq = i; | ||
} | ||
var error = this._sort(); | ||
const error = this._sort(); | ||
Hoek.assert(!error, 'merge created a dependencies error'); | ||
@@ -104,10 +104,10 @@ | ||
var groups = {}; | ||
var graph = {}; | ||
var graphAfters = {}; | ||
const groups = {}; | ||
const graph = {}; | ||
const graphAfters = {}; | ||
for (var i = 0, il = this._items.length; i < il; ++i) { | ||
var item = this._items[i]; | ||
var seq = item.seq; // Unique across all items | ||
var group = item.group; | ||
for (let i = 0; i < this._items.length; ++i) { | ||
const item = this._items[i]; | ||
const seq = item.seq; // Unique across all items | ||
const group = item.group; | ||
@@ -125,4 +125,4 @@ // Determine Groups | ||
var after = item.after; | ||
for (var j = 0, jl = after.length; j < jl; ++j) { | ||
const after = item.after; | ||
for (let j = 0; j < after.length; ++j) { | ||
graphAfters[after[j]] = (graphAfters[after[j]] || []).concat(seq); | ||
@@ -134,13 +134,13 @@ } | ||
var graphNodes = Object.keys(graph); | ||
for (i = 0, il = graphNodes.length; i < il; ++i) { | ||
var node = graphNodes[i]; | ||
var expandedGroups = []; | ||
let graphNodes = Object.keys(graph); | ||
for (let i = 0; i < graphNodes.length; ++i) { | ||
const node = graphNodes[i]; | ||
const expandedGroups = []; | ||
var graphNodeItems = Object.keys(graph[node]); | ||
for (j = 0, jl = graphNodeItems.length; j < jl; ++j) { | ||
group = graph[node][graphNodeItems[j]]; | ||
const graphNodeItems = Object.keys(graph[node]); | ||
for (let j = 0; j < graphNodeItems.length; ++j) { | ||
const group = graph[node][graphNodeItems[j]]; | ||
groups[group] = groups[group] || []; | ||
for (var k = 0, kl = groups[group].length; k < kl; ++k) { | ||
for (let k = 0; k < groups[group].length; ++k) { | ||
@@ -155,9 +155,9 @@ expandedGroups.push(groups[group][k]); | ||
var afterNodes = Object.keys(graphAfters); | ||
for (i = 0, il = afterNodes.length; i < il; ++i) { | ||
group = afterNodes[i]; | ||
const afterNodes = Object.keys(graphAfters); | ||
for (let i = 0; i < afterNodes.length; ++i) { | ||
const group = afterNodes[i]; | ||
if (groups[group]) { | ||
for (j = 0, jl = groups[group].length; j < jl; ++j) { | ||
node = groups[group][j]; | ||
for (let j = 0; j < groups[group].length; ++j) { | ||
const node = groups[group][j]; | ||
graph[node] = graph[node].concat(graphAfters[group]); | ||
@@ -170,10 +170,10 @@ } | ||
var children; | ||
var ancestors = {}; | ||
let children; | ||
const ancestors = {}; | ||
graphNodes = Object.keys(graph); | ||
for (i = 0, il = graphNodes.length; i < il; ++i) { | ||
node = graphNodes[i]; | ||
for (let i = 0; i < graphNodes.length; ++i) { | ||
const node = graphNodes[i]; | ||
children = graph[node]; | ||
for (j = 0, jl = children.length; j < jl; ++j) { | ||
for (let j = 0; j < children.length; ++j) { | ||
ancestors[children[j]] = (ancestors[children[j]] || []).concat(node); | ||
@@ -185,11 +185,11 @@ } | ||
var visited = {}; | ||
var sorted = []; | ||
const visited = {}; | ||
const sorted = []; | ||
for (i = 0, il = this._items.length; i < il; ++i) { | ||
var next = i; | ||
for (let i = 0; i < this._items.length; ++i) { | ||
let next = i; | ||
if (ancestors[i]) { | ||
next = null; | ||
for (j = 0, jl = this._items.length; j < jl; ++j) { | ||
for (let j = 0; j < this._items.length; ++j) { | ||
if (visited[j] === true) { | ||
@@ -203,6 +203,6 @@ continue; | ||
var shouldSeeCount = ancestors[j].length; | ||
var seenCount = 0; | ||
for (var l = 0, ll = shouldSeeCount; l < ll; ++l) { | ||
if (sorted.indexOf(ancestors[j][l]) >= 0) { | ||
const shouldSeeCount = ancestors[j].length; | ||
let seenCount = 0; | ||
for (let k = 0; k < shouldSeeCount; ++k) { | ||
if (sorted.indexOf(ancestors[j][k]) >= 0) { | ||
++seenCount; | ||
@@ -230,13 +230,12 @@ } | ||
var seqIndex = {}; | ||
for (i = 0, il = this._items.length; i < il; ++i) { | ||
item = this._items[i]; | ||
const seqIndex = {}; | ||
for (let i = 0; i < this._items.length; ++i) { | ||
const item = this._items[i]; | ||
seqIndex[item.seq] = item; | ||
} | ||
var sortedNodes = []; | ||
this._items = sorted.map(function (value) { | ||
const sortedNodes = []; | ||
this._items = sorted.map((value) => { | ||
var sortedItem = seqIndex[value]; | ||
const sortedItem = seqIndex[value]; | ||
sortedNodes.push(sortedItem.node); | ||
@@ -243,0 +242,0 @@ return sortedItem; |
{ | ||
"name": "topo", | ||
"description": "Topological sorting with grouping support", | ||
"version": "1.1.0", | ||
"version": "2.0.0", | ||
"repository": "git://github.com/hapijs/topo", | ||
@@ -14,10 +14,10 @@ "main": "lib/index.js", | ||
"engines": { | ||
"node": ">=0.10.40" | ||
"node": ">=4.0.0" | ||
}, | ||
"dependencies": { | ||
"hoek": "2.x.x" | ||
"hoek": "3.x.x" | ||
}, | ||
"devDependencies": { | ||
"lab": "6.x.x", | ||
"code": "1.x.x" | ||
"code": "2.x.x", | ||
"lab": "7.x.x" | ||
}, | ||
@@ -24,0 +24,0 @@ "scripts": { |
@@ -0,7 +1,9 @@ | ||
'use strict'; | ||
// Load modules | ||
var Code = require('code'); | ||
var Lab = require('lab'); | ||
var Hoek = require('hoek'); | ||
var Topo = require('..'); | ||
const Code = require('code'); | ||
const Lab = require('lab'); | ||
const Hoek = require('hoek'); | ||
const Topo = require('..'); | ||
@@ -11,3 +13,3 @@ | ||
var internals = {}; | ||
const internals = {}; | ||
@@ -17,16 +19,16 @@ | ||
var lab = exports.lab = Lab.script(); | ||
var describe = lab.describe; | ||
var it = lab.it; | ||
var expect = Code.expect; | ||
const lab = exports.lab = Lab.script(); | ||
const describe = lab.describe; | ||
const it = lab.it; | ||
const expect = Code.expect; | ||
describe('Topo', function () { | ||
describe('Topo', () => { | ||
var testDeps = function (scenario) { | ||
const testDeps = function (scenario) { | ||
var topo = new Topo(); | ||
scenario.forEach(function (record, i) { | ||
const topo = new Topo(); | ||
scenario.forEach((record, i) => { | ||
var options = record.before || record.after || record.group ? { before: record.before, after: record.after, group: record.group } : null; | ||
const options = record.before || record.after || record.group ? { before: record.before, after: record.after, group: record.group } : null; | ||
topo.add(record.id, options); | ||
@@ -38,5 +40,5 @@ }); | ||
it('sorts dependencies', function (done) { | ||
it('sorts dependencies', (done) => { | ||
var scenario = [ | ||
const scenario = [ | ||
{ id: '0', before: 'a' }, | ||
@@ -58,5 +60,5 @@ { id: '1', after: 'f', group: 'a' }, | ||
it('sorts dependencies (before as array)', function (done) { | ||
it('sorts dependencies (before as array)', (done) => { | ||
var scenario = [ | ||
const scenario = [ | ||
{ id: '0', group: 'a' }, | ||
@@ -71,5 +73,5 @@ { id: '1', group: 'b' }, | ||
it('sorts dependencies (after as array)', function (done) { | ||
it('sorts dependencies (after as array)', (done) => { | ||
var scenario = [ | ||
const scenario = [ | ||
{ id: '0', after: ['a', 'b'] }, | ||
@@ -85,5 +87,5 @@ { id: '1', group: 'a' }, | ||
it('sorts dependencies (seq)', function (done) { | ||
it('sorts dependencies (seq)', (done) => { | ||
var scenario = [ | ||
const scenario = [ | ||
{ id: '0' }, | ||
@@ -99,16 +101,16 @@ { id: '1' }, | ||
it('sorts dependencies (explicitly using after or before)', function (done) { | ||
it('sorts dependencies (explicitly using after or before)', (done) => { | ||
var set = '0123456789abcdefghijklmnopqrstuvwxyz'; | ||
var groups = set.split(''); | ||
const set = '0123456789abcdefghijklmnopqrstuvwxyz'; | ||
const groups = set.split(''); | ||
// Use Fisher-Yates for shuffling | ||
var fisherYates = function (array) { | ||
const fisherYates = function (array) { | ||
var i = array.length; | ||
let i = array.length; | ||
while (--i) { | ||
var j = Math.floor(Math.random() * (i + 1)); | ||
var tempi = array[i]; | ||
var tempj = array[j]; | ||
const j = Math.floor(Math.random() * (i + 1)); | ||
const tempi = array[i]; | ||
const tempj = array[j]; | ||
array[i] = tempj; | ||
@@ -119,13 +121,13 @@ array[j] = tempi; | ||
var scenarioAfter = []; | ||
var scenarioBefore = []; | ||
for (var i = 0, il = groups.length; i < il; ++i) { | ||
var item = { | ||
const scenarioAfter = []; | ||
const scenarioBefore = []; | ||
for (let i = 0; i < groups.length; ++i) { | ||
const item = { | ||
id: groups[i], | ||
group: groups[i] | ||
}; | ||
var afterMod = { | ||
const afterMod = { | ||
after: i ? groups.slice(0, i) : [] | ||
}; | ||
var beforeMod = { | ||
const beforeMod = { | ||
before: groups.slice(i + 1) | ||
@@ -146,5 +148,5 @@ }; | ||
it('throws on circular dependency', function (done) { | ||
it('throws on circular dependency', (done) => { | ||
var scenario = [ | ||
const scenario = [ | ||
{ id: '0', before: 'a', group: 'b' }, | ||
@@ -155,3 +157,3 @@ { id: '1', before: 'c', group: 'a' }, | ||
expect(function () { | ||
expect(() => { | ||
@@ -164,7 +166,7 @@ testDeps(scenario); | ||
describe('merge()', function () { | ||
describe('merge()', () => { | ||
it('merges objects', function (done) { | ||
it('merges objects', (done) => { | ||
var topo = new Topo(); | ||
const topo = new Topo(); | ||
topo.add('0', { before: 'a' }); | ||
@@ -177,3 +179,3 @@ topo.add('2', { before: 'a' }); | ||
var other = new Topo(); | ||
const other = new Topo(); | ||
other.add('1', { after: 'f', group: 'a' }); | ||
@@ -191,5 +193,5 @@ other.add('3', { before: ['b', 'c'], group: 'a' }); | ||
it('merges objects (explicit sort)', function (done) { | ||
it('merges objects (explicit sort)', (done) => { | ||
var topo = new Topo(); | ||
const topo = new Topo(); | ||
topo.add('0', { before: 'a', sort: 1 }); | ||
@@ -202,3 +204,3 @@ topo.add('2', { before: 'a', sort: 2 }); | ||
var other = new Topo(); | ||
const other = new Topo(); | ||
other.add('1', { after: 'f', group: 'a', sort: 6 }); | ||
@@ -216,5 +218,5 @@ other.add('3', { before: ['b', 'c'], group: 'a', sort: 7 }); | ||
it('merges objects (mixed sort)', function (done) { | ||
it('merges objects (mixed sort)', (done) => { | ||
var topo = new Topo(); | ||
const topo = new Topo(); | ||
topo.add('0', { before: 'a', sort: 1 }); | ||
@@ -227,3 +229,3 @@ topo.add('2', { before: 'a', sort: 3 }); | ||
var other = new Topo(); | ||
const other = new Topo(); | ||
other.add('1', { after: 'f', group: 'a', sort: 2 }); | ||
@@ -241,5 +243,5 @@ other.add('3', { before: ['b', 'c'], group: 'a', sort: 4 }); | ||
it('merges objects (multiple)', function (done) { | ||
it('merges objects (multiple)', (done) => { | ||
var topo1 = new Topo(); | ||
const topo1 = new Topo(); | ||
topo1.add('0', { before: 'a', sort: 1 }); | ||
@@ -249,7 +251,7 @@ topo1.add('2', { before: 'a', sort: 3 }); | ||
var topo2 = new Topo(); | ||
const topo2 = new Topo(); | ||
topo2.add('6', { group: 'd', sort: 7 }); | ||
topo2.add('8', { before: 'd', sort: 9 }); | ||
var other = new Topo(); | ||
const other = new Topo(); | ||
other.add('1', { after: 'f', group: 'a', sort: 2 }); | ||
@@ -267,12 +269,12 @@ other.add('3', { before: ['b', 'c'], group: 'a', sort: 4 }); | ||
it('throws on circular dependency', function (done) { | ||
it('throws on circular dependency', (done) => { | ||
var topo = new Topo(); | ||
const topo = new Topo(); | ||
topo.add('0', { before: 'a', group: 'b' }); | ||
topo.add('1', { before: 'c', group: 'a' }); | ||
var other = new Topo(); | ||
const other = new Topo(); | ||
other.add('2', { before: 'b', group: 'c' }); | ||
expect(function () { | ||
expect(() => { | ||
@@ -279,0 +281,0 @@ topo.merge(other); |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
368
19894
+ Addedhoek@3.0.4(transitive)
- Removedhoek@2.16.3(transitive)
Updatedhoek@3.x.x