87 lines
2.6 KiB
JavaScript
87 lines
2.6 KiB
JavaScript
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
import _typeof from "@babel/runtime/helpers/esm/typeof";
|
|
var semver = /^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i;
|
|
|
|
/**
|
|
* @param {string} s
|
|
*/
|
|
var isWildcard = function isWildcard(s) {
|
|
return s === '*' || s === 'x' || s === 'X';
|
|
};
|
|
/**
|
|
* @param {string} v
|
|
*/
|
|
var tryParse = function tryParse(v) {
|
|
var n = parseInt(v, 10);
|
|
return isNaN(n) ? v : n;
|
|
};
|
|
/**
|
|
* @param {string|number} a
|
|
* @param {string|number} b
|
|
*/
|
|
var forceType = function forceType(a, b) {
|
|
return _typeof(a) !== _typeof(b) ? [String(a), String(b)] : [a, b];
|
|
};
|
|
|
|
/**
|
|
* @param {string} a
|
|
* @param {string} b
|
|
* @returns number
|
|
*/
|
|
var compareStrings = function compareStrings(a, b) {
|
|
if (isWildcard(a) || isWildcard(b)) return 0;
|
|
var _forceType = forceType(tryParse(a), tryParse(b)),
|
|
_forceType2 = _slicedToArray(_forceType, 2),
|
|
ap = _forceType2[0],
|
|
bp = _forceType2[1];
|
|
if (ap > bp) return 1;
|
|
if (ap < bp) return -1;
|
|
return 0;
|
|
};
|
|
/**
|
|
* @param {string|RegExpMatchArray} a
|
|
* @param {string|RegExpMatchArray} b
|
|
* @returns number
|
|
*/
|
|
var compareSegments = function compareSegments(a, b) {
|
|
for (var i = 0; i < Math.max(a.length, b.length); i++) {
|
|
var r = compareStrings(a[i] || '0', b[i] || '0');
|
|
if (r !== 0) return r;
|
|
}
|
|
return 0;
|
|
};
|
|
/**
|
|
* @param {string} version
|
|
* @returns RegExpMatchArray
|
|
*/
|
|
var validateAndParse = function validateAndParse(version) {
|
|
var _match$shift;
|
|
var match = version.match(semver);
|
|
match === null || match === void 0 || (_match$shift = match.shift) === null || _match$shift === void 0 || _match$shift.call(match);
|
|
return match;
|
|
};
|
|
|
|
/**
|
|
* Compare [semver](https://semver.org/) version strings to find greater, equal or lesser.
|
|
* This library supports the full semver specification, including comparing versions with different number of digits like `1.0.0`, `1.0`, `1`, and pre-release versions like `1.0.0-alpha`.
|
|
* @param v1 - First version to compare
|
|
* @param v2 - Second version to compare
|
|
* @returns Numeric value compatible with the [Array.sort(fn) interface](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#Parameters).
|
|
*/
|
|
export var compareVersions = function compareVersions(v1, v2) {
|
|
// validate input and split into segments
|
|
var n1 = validateAndParse(v1);
|
|
var n2 = validateAndParse(v2);
|
|
|
|
// pop off the patch
|
|
var p1 = n1.pop();
|
|
var p2 = n2.pop();
|
|
|
|
// validate numbers
|
|
var r = compareSegments(n1, n2);
|
|
if (r !== 0) return r;
|
|
if (p1 || p2) {
|
|
return p1 ? -1 : 1;
|
|
}
|
|
return 0;
|
|
}; |