UNPKG

@ant-design/pro-utils

Version:
94 lines (88 loc) 3.01 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.compareVersions = void 0; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/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 (0, _typeof2.default)(a) !== (0, _typeof2.default)(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 = (0, _slicedToArray2.default)(_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). */ var compareVersions = exports.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; };