UNPKG

syncpack

Version:

Manage multiple package.json files, such as in Lerna Monorepos and Yarn/Pnpm Workspaces

54 lines (53 loc) 1.7 kB
"use strict"; exports.__esModule = true; exports.getHighestVersion = void 0; var semver_1 = require("semver"); var constants_1 = require("../../constants"); var is_semver_1 = require("./is-semver"); 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) { return versions.reduce(function (rawHighest, raw) { var version = semver_1.valid(semver_1.coerce(raw)); var highest = semver_1.valid(semver_1.coerce(rawHighest)); if (raw === '*' || rawHighest === '*') { return '*'; } if (!is_semver_1.isSemver(raw) || version === null) { return rawHighest; } if (highest === null) { return raw; } if (semver_1.gt(version, highest)) { return raw; } if (semver_1.eq(version, highest) && getRangeScore(raw) > getRangeScore(rawHighest)) { return raw; } return rawHighest; }, null); };