1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 | 'use strict';
|
9 |
|
10 | var bold = require('ansi-bold');
|
11 | var red = require('ansi-red');
|
12 | var async = require('async');
|
13 | var filter = require('filter-object');
|
14 | var request = require('min-request');
|
15 |
|
16 | module.exports = function get(repos, pattern, cb) {
|
17 | if (typeof pattern === 'function') {
|
18 | cb = pattern; pattern = '*';
|
19 | }
|
20 |
|
21 | async.reduce(arrayify(repos), [], function(acc, repo, next) {
|
22 | pkg(repo, 'latest', function (err, json) {
|
23 | if (err) {
|
24 | console.log(red(err + ': "') + bold(repo) + '"');
|
25 | return next(err);
|
26 | }
|
27 | next(null, acc.concat(filter(json, pattern)));
|
28 | });
|
29 | }, cb);
|
30 | };
|
31 |
|
32 | function arrayify(val) {
|
33 | return !Array.isArray(val) ? [val] : val;
|
34 | }
|
35 |
|
36 | function pkg(name, version, cb) {
|
37 | var url = 'https://registry.npmjs.org/' + name + '/';
|
38 |
|
39 | if (typeof version !== 'string') {
|
40 | cb = version;
|
41 | version = '';
|
42 | }
|
43 | request(url + version, {}, function (err, res) {
|
44 | if (err) return cb(err);
|
45 | cb(null, JSON.parse(res.body));
|
46 | });
|
47 | }
|