You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.5 KiB
68 lines
1.5 KiB
'use strict';
|
|
|
|
const Base = require('./base');
|
|
const utils = require('../utils');
|
|
const config = require('../config');
|
|
|
|
/**
|
|
* 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;
|
|
|