npm-count
Version:
a npm/download-counts wrapper
72 lines (53 loc) • 2.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _request = require('request');
var _request2 = _interopRequireDefault(_request);
var _bluebird = require('bluebird');
var _bluebird2 = _interopRequireDefault(_bluebird);
var _immutable = require('immutable');
var _immutable2 = _interopRequireDefault(_immutable);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } // dependencies
// private
var requestAsync = _bluebird2.default.promisify(_request2.default);
var api = 'https://api.npmjs.org/downloads';
/**
* fetch the stats via https://github.com/npm/download-counts
*
* @module fetchBulkQuery
* @param {(string|array<string>)} names - package names
* @param {object} [options]
* @param {string} [options.type='point'] - api type
* @param {string} [options.period='last-day'] - stats period
* @param {string} [options.requestOptions={json:true,gzip:true}] - pass to `request`
* @returns {promise<object>} always key-value stats (e.g: {name: stats, ...})
* @see https://github.com/npm/download-counts#readme
*/
exports.default = function (names) {
var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
var opts = _immutable2.default.fromJS({
type: 'point',
period: 'last-day',
requestOptions: {
json: true,
gzip: true
}
}).mergeDeep(options).toJS();
var params = typeof names === 'string' ? [names] : names;
var url = api + '/' + opts.type + '/' + opts.period + '/' + encodeURIComponent(params.join(','));
return requestAsync(url, opts.requestOptions).then(function (_ref) {
var body = _ref.body;
if (body.error) {
return {}; // e.g. {"error":"reason description"}
}
// transform key-value stats
// パッケージ名をカンマで区切るとjsonの書式が変わるので、カンマ区切りの時の書式に合わせる
if (params.length === 1) {
return _defineProperty({}, body.package, body);
}
return body;
});
};
module.exports = exports['default'];