-
-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathmaintainer.js
68 lines (60 loc) · 1.51 KB
/
maintainer.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
'use strict';
const Base = require('./base.js');
const utils = require('../utils.js');
const config = require('../config.js');
/**
* Maintainer constructor. Create an instance of an npm maintainer by maintainer name.
*
* ```js
* const maintainer = new Maintainer('doowb');
* ```
*
* @param {String} `name` Name of the npm maintainer to get information about.
* @name Maintainer
* @api public
*/
class Maintainer extends Base {
constructor(name) {
super();
this.name = name;
this.config = utils.clone(config);
}
/**
* Get the repositories owned by this maintainer.
*
* ```js
* maintainer.repos()
* .then(function(repos) {
* console.log(repos);
* }, function(err) {
* console.error(err);
* });
* ```
*
* @return {Promise} Returns array of repository names when promise resolves.
* @name .repos
* @api public
*/
async repos() {
if (!this.cache.has('repos')) {
let from = 0;
let size = 250;
let url = `${this.config.registry}-/v1/search?text=maintainer:${this.name}&size=${size}`;
let results = [];
await utils.paged(url, (_, res, acc) => {
let { objects, total } = res.data;
results.push(...objects);
if (total >= (from + size)) {
from += size;
return `${url}&from=${from}`;
}
});
this.cache.set('repos', results.map(obj => obj.package.name));
}
return this.cache.get('repos');
}
}
/**
* Exposes `Maintainer`
*/
module.exports = Maintainer;