/
worker.js
executable file
·63 lines (56 loc) · 1.52 KB
/
worker.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/env node
'use strict'
var npm = require('npm')
var dependencies = {}
npm.load({ 'dry-run': true }, function () {
npm.install(function (err, _, topNode) {
if (err) {
report('ERROR', err)
} else {
recursivelyParseDependencies(topNode)
report('SUCCESS', dependencies)
}
})
})
function addDependencyVersion (name, version, pkg) {
if (dependencies[name]) {
dependencies[name][version] = pkg
} else {
var val = {}
val[version] = pkg
dependencies[name] = val
}
}
function parseThenAddDependencyVersion (node) {
if (node && node.package) {
try {
var id = node.package._id
var parts = id.split('@')
var version = parts.pop()
var name = parts.join('@')
report('DEBUG', 'dep: ' + name + ' - ' + version)
addDependencyVersion(name, version, node.package)
} catch (e) {
var msg = new Error([e, 'failed parsing dependency', JSON.stringify(node.package)].join('\n'))
report('ERROR', msg)
}
}
}
function recursivelyParseDependencies (node) {
if (node && node.children) {
for (var i = node.children.length; i > 0; i--) {
parseThenAddDependencyVersion(node.children[i])
}
for (var j = node.children.length; j > 0; j--) {
recursivelyParseDependencies(node.children[j])
}
}
}
function report (type, data) {
if (process.send) {
process.send({ status: type, data: data })
} else {
var method = type === 'ERROR' ? 'error' : type === 'SUCCESS' ? 'log' : 'debug'
console[method](data)
}
}