syncpack
Version:
Manage multiple package.json files, such as in Lerna Monorepos and Yarn/Pnpm Workspaces
73 lines (72 loc) • 2.55 kB
JavaScript
var __values = (this && this.__values) || function(o) {
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
if (m) return m.call(o);
if (o && typeof o.length === "number") return {
next: function () {
if (o && i >= o.length) o = void 0;
return { value: o && o[i++], done: !o };
}
};
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
};
exports.__esModule = true;
exports.getHighestVersion = void 0;
var semver_1 = require("semver");
var constants_1 = require("../../constants");
var getRange = function (version) { return version.slice(0, version.search(/[0-9]/)); };
var getRangeScore = function (version) {
if (version === null)
return 0;
if (version === constants_1.RANGE_ANY)
return 8;
var range = getRange(version);
if (range === constants_1.RANGE_GT)
return 7;
if (range === constants_1.RANGE_GTE)
return 6;
if (range === constants_1.RANGE_MINOR)
return 5;
if (version.indexOf('.x') !== -1)
return 4;
if (range === constants_1.RANGE_PATCH)
return 3;
if (range === constants_1.RANGE_EXACT)
return 2;
if (range === constants_1.RANGE_LTE)
return 1;
if (range === constants_1.RANGE_LT)
return 0;
return 0;
};
exports.getHighestVersion = function (versions) {
var e_1, _a;
var rawHighest = null;
try {
for (var versions_1 = __values(versions), versions_1_1 = versions_1.next(); !versions_1_1.done; versions_1_1 = versions_1.next()) {
var raw = versions_1_1.value;
if (raw === '*')
return raw;
var version = semver_1.valid(semver_1.coerce(raw));
if (version === null)
continue;
var highest = semver_1.valid(semver_1.coerce(rawHighest));
if (highest === null ||
semver_1.gt(version, highest) ||
(semver_1.eq(version, highest) && getRangeScore(raw) > getRangeScore(rawHighest))) {
rawHighest = raw;
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (versions_1_1 && !versions_1_1.done && (_a = versions_1["return"])) _a.call(versions_1);
}
finally { if (e_1) throw e_1.error; }
}
if (rawHighest === null) {
throw new Error("Failed to find highest version of " + versions.join(', '));
}
return rawHighest;
};
;