UNPKG

ntts

Version:

A CLI tool for refactoring an existing NodeJs application to a fully functional TypeScript application.

45 lines (44 loc) 2.73 kB
"use strict"; 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;