npm-pd
Version:
A beautiful CLI dashboard for NPM publishers
115 lines (96 loc) • 3.49 kB
JavaScript
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)
};
}
;