ntts
Version:
A CLI tool for refactoring an existing NodeJs application to a fully functional TypeScript application.
45 lines (44 loc) • 2.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var VersionCalculator = /** @class */ (function () {
function VersionCalculator() {
}
VersionCalculator.closestVersion = function (targetVersion, versionList) {
var versions = versionList
.filter(function (version) { return VersionCalculator.validVersion(version); })
.map(function (version) { return VersionCalculator.versionList(version); });
var _a = VersionCalculator.versionList(targetVersion), targetMajor = _a[0], targetMinor = _a[1];
var major = VersionCalculator.closestTargetVersion(versions, targetMajor, 0);
var filteredByMajor = VersionCalculator.filterByClosestVersion(versions, major, 0);
var minor = VersionCalculator.bestMinorVersion(filteredByMajor, targetMinor, major - targetMajor);
var filteredByMinor = VersionCalculator.filterByClosestVersion(filteredByMajor, minor, 1);
var patch = VersionCalculator.limitTargetVersion(filteredByMinor, 2, Math.max);
return [major, minor, patch].join('.');
};
VersionCalculator.closestTargetVersion = function (versionList, targetVersion, index) { return versionList
.reduce(function (closest, version) {
var versionDistance = targetVersion - version[index];
var closestDistance = targetVersion - closest;
if (Math.abs(versionDistance) < Math.abs(closestDistance)
|| (Math.abs(versionDistance) === Math.abs(closestDistance) && version[index] > closest)) {
return version[index];
}
return closest;
}, versionList[0][index]); };
VersionCalculator.limitTargetVersion = function (versionList, index, condition) { return condition.apply(void 0, versionList.map(function (version) { return version[index]; })); };
VersionCalculator.versionList = function (version) { return version.split('.').map(function (v) { return +v; }); };
VersionCalculator.validVersion = function (version) { return /^\d+\.\d+\.\d+$/.test(version); };
VersionCalculator.filterByClosestVersion = function (versions, target, index) { return versions
.filter(function (version) { return version[index] === target; }); };
VersionCalculator.bestMinorVersion = function (versions, targetMinor, majorDistance) {
if (majorDistance === 0) {
return VersionCalculator.closestTargetVersion(versions, targetMinor, 1);
}
if (majorDistance > 0) {
return VersionCalculator.limitTargetVersion(versions, 1, Math.min);
}
return VersionCalculator.limitTargetVersion(versions, 1, Math.max);
};
return VersionCalculator;
}());
exports.default = VersionCalculator;