/
index.js
90 lines (67 loc) · 2.03 KB
/
index.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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
'use strict';
var RegClient = require('silent-npm-registry-client');
var Os = require('os');
var Semver = require('semver');
var options = {
registry: 'https://registry.npmjs.org/',
cache: Os.tmpDir() + '/nodesecurity'
};
var client = new RegClient(options);
var getPackageJson = function (module, cb) {
console.error('The getPackageJson method is deprecated');
client.get(options.registry + module.name, {}, function (err, pkg) {
if (err) {
return cb(err);
}
if (pkg.time && pkg.time.unpublished) {
var error = new Error('404 - Unpublished module');
error.code = 'E404';
error.pkgid = module.name;
return cb(error);
}
// try to get a version
var version = Semver.maxSatisfying(Object.keys(pkg.versions), module.version);
// check dist tags if none found
if (!version) {
version = pkg['dist-tags'] && pkg['dist-tags'].latest;
}
var doc;
if (pkg.versions) {
doc = pkg.versions[version];
}
if (!doc) {
error = new Error('404 - Unknown module');
error.code = 'E404';
error.pkgid = module.name;
return cb(error);
}
cb(null, doc);
});
};
var getShrinkwrapDependencies = function (shrinkwrap, cb) {
var results = {};
var _parseModule = function (module, path, name) {
var moduleName = (name || module.name) + '@' + module.version;
if (results[moduleName]) {
results[moduleName].paths.push(path.concat([moduleName]));
}
else {
results[moduleName] = {
name: name || module.name,
version: module.version,
paths: [path.concat([moduleName])]
};
}
var children = Object.keys(module.dependencies || {});
for (var i = 0, il = children.length; i < il; ++i) {
var child = children[i];
_parseModule(module.dependencies[child], path.concat([moduleName]), child);
}
};
_parseModule(shrinkwrap, []);
return cb(null, results);
};
module.exports = {
getPackageJson: getPackageJson,
getShrinkwrapDependencies: getShrinkwrapDependencies
};