UNPKG

npm-pd

Version:

A beautiful CLI dashboard for NPM publishers

115 lines (96 loc) 3.49 kB
"use strict"; exports.__esModule = true; exports.releasesFrequency = releasesFrequency; exports.commitsFrequency = commitsFrequency; exports.openIssues = openIssues; exports.isFinished = isFinished; var _lodash = require("lodash"); var _semver = _interopRequireDefault(require("semver")); var _moment = _interopRequireDefault(require("moment")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function releasesFrequency(collected) { var releases = collected.metadata.releases; if (!releases) { return { lastMonthReleases: 0, lastQuarterReleases: 0, lastYearReleases: 0, lastTwoYearsReleases: 0 }; } var range30 = (0, _lodash.find)(releases, function (range) { return _moment["default"].utc(range.to).diff(range.from, 'd') === 30; }); var range180 = (0, _lodash.find)(releases, function (range) { return _moment["default"].utc(range.to).diff(range.from, 'd') === 180; }); var range365 = (0, _lodash.find)(releases, function (range) { return _moment["default"].utc(range.to).diff(range.from, 'd') === 365; }); var range730 = (0, _lodash.find)(releases, function (range) { return _moment["default"].utc(range.to).diff(range.from, 'd') === 730; }); if (!range30 || !range180 || !range365 || !range730) { throw new Error('Could not find entry in releases'); } return { lastMonthReleases: range30.count / (30 / 90), lastQuarterReleases: range180.count / (180 / 90), lastYearReleases: range365.count / (365 / 90), lastTwoYearsReleases: range730.count / (730 / 90) }; } function commitsFrequency(collected) { var commits = collected.github && collected.github.commits; if (!commits) { return { lastMonthCommits: 0, lastQuarterCommits: 0, lastYearCommits: 0 }; } var range30 = (0, _lodash.find)(commits, function (range) { return _moment["default"].utc(range.to).diff(range.from, 'd') === 30; }); var range180 = (0, _lodash.find)(commits, function (range) { return _moment["default"].utc(range.to).diff(range.from, 'd') === 180; }); var range365 = (0, _lodash.find)(commits, function (range) { return _moment["default"].utc(range.to).diff(range.from, 'd') === 365; }); if (!range30 || !range180 || !range365) { throw new Error('Could not find entry in commits'); } return { lastMonthCommits: range30.count / (30 / 30), lastQuarterCommits: range180.count / (180 / 30), lastYearCommits: range365.count / (365 / 30) }; } function openIssues(collected) { var issues = collected.github && collected.github.issues; if (!issues || issues.isDisabled || !issues.count) { return { totalIssues: 0 }; } else { return { totalIssues: issues.count }; } } function isFinished(collected) { var isStable = _semver["default"].gte(collected.metadata.version, '1.0.0', true); var isNotDeprecated = !collected.metadata.deprecated; var hasFewIssues = (0, _lodash.get)(collected, 'github.issues.openCount', Infinity) < 15; var hasREADME = Boolean(collected.metadata.readme); var hasTests = Boolean(collected.metadata.hasTestScript); return { isStable: Number(isStable), isNotDeprecated: Number(isNotDeprecated), hasFewIssues: Number(hasFewIssues), hasREADME: Number(hasREADME), hasTests: Number(hasTests), finished: Number(isStable && isNotDeprecated && hasFewIssues && hasREADME && hasTests) }; }