UNPKG

npm-count

Version:

a npm/download-counts wrapper

72 lines (53 loc) 2.29 kB
'use strict'; 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'];