npm-pd
Version:
A beautiful CLI dashboard for NPM publishers
144 lines (119 loc) • 4.85 kB
JavaScript
exports.__esModule = true;
exports.formatPublisher = formatPublisher;
var _ora = _interopRequireDefault(require("ora"));
var _cliTable = _interopRequireDefault(require("cli-table3"));
var _npmsIoClient = require("npms-io-client");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
var sorters = {
name: function name(a, b) {
return b["package"].name.localeCompare(a["package"].name);
},
version: function version(a, b) {
return b["package"].version.localeCompare(a["package"].version);
},
date: function date(a, b) {
return new Date(a["package"].date).getTime() - new Date(b["package"].date).getTime();
},
quality: function quality(a, b) {
return a.score.detail.quality - b.score.detail.quality;
},
popularity: function popularity(a, b) {
return a.score.detail.popularity - b.score.detail.popularity;
},
maintenance: function maintenance(a, b) {
return a.score.detail.maintenance - b.score.detail.maintenance;
},
score: function score(a, b) {
return a.score["final"] - b.score["final"];
}
};
function getScope(org) {
if (org == null ? void 0 : org.startsWith("@")) {
return org.slice(1);
} else {
return org;
}
}
var pageSize = 250;
function nextPage(query, options, pageNum) {
if (pageNum === void 0) {
pageNum = 0;
}
return new Promise(function (resolve) {
(0, _npmsIoClient.getSearch)(query, pageNum * pageSize, pageSize).then(function (_ref) {
var results = _ref.results;
if (results.length < pageSize) {
resolve(results);
} else {
nextPage(query, options, pageNum + 1).then(function (next) {
resolve(results.concat(next));
});
}
});
});
}
function sort(packages, options) {
var _options$sort;
var sorted = packages.sort(sorters[(_options$sort = options.sort) != null ? _options$sort : "date"]);
if (options.reverse) {
return sorted;
} else {
return sorted.reverse();
}
}
function filter(packages, options) {
if (options.org) {
return packages.filter(function (result) {
return result["package"].scope === getScope(options.org);
});
} else {
return packages;
}
}
function limit(packages, options) {
if (options.limit) {
return packages.slice(0, options.limit);
} else {
return packages;
}
}
function getPublisher(_x, _x2, _x3) {
return _getPublisher.apply(this, arguments);
}
function _getPublisher() {
_getPublisher = _asyncToGenerator(function* (name, claim, options) {
var _nextPage;
return nextPage((_nextPage = {}, _nextPage[claim] = name, _nextPage), options).then(function (results) {
return limit(sort(filter(results, options), options), options);
});
});
return _getPublisher.apply(this, arguments);
}
function setDefaults(options) {
return _extends({
deprecated: false
}, options);
}
function formatPublisher(_x4, _x5, _x6) {
return _formatPublisher.apply(this, arguments);
}
function _formatPublisher() {
_formatPublisher = _asyncToGenerator(function* (name, claim, options) {
var spinner = (0, _ora["default"])("Fetching packages...").start();
getPublisher(name, claim, setDefaults(options)).then(function (rows) {
var table = new _cliTable["default"]({
head: ["Last Update", "Name", "Version", "Quality", "Popularity", "Maintenance", "Score"]
});
table.push.apply(table, rows.map(function (row) {
return [new Date(row["package"].date).toLocaleDateString(), row["package"].name, row["package"].version, row.score.detail.quality.toFixed(4), row.score.detail.popularity.toFixed(4), row.score.detail.maintenance.toFixed(4), row.score["final"].toFixed(4)];
}));
spinner.stop();
console.log(table.toString());
});
});
return _formatPublisher.apply(this, arguments);
}
;