0
0
Fork 0
mirror of https://github.com/liabru/matter-js.git synced 2024-11-27 09:50:52 -05:00

add support for > and >= operators in plugin version ranges

This commit is contained in:
liabru 2020-12-30 22:28:08 +00:00
parent f71d4c0a50
commit 07927162fc

View file

@ -266,6 +266,8 @@ var Common = require('./Common');
* Only the following range types are supported: * Only the following range types are supported:
* - Tilde ranges e.g. `~1.2.3` * - Tilde ranges e.g. `~1.2.3`
* - Caret ranges e.g. `^1.2.3` * - Caret ranges e.g. `^1.2.3`
* - Greater than ranges e.g. `>1.2.3`
* - Greater than or equal ranges e.g. `>=1.2.3`
* - Exact version e.g. `1.2.3` * - Exact version e.g. `1.2.3`
* - Any version `*` * - Any version `*`
* @method versionParse * @method versionParse
@ -273,29 +275,28 @@ var Common = require('./Common');
* @return {object} The version range parsed into its components. * @return {object} The version range parsed into its components.
*/ */
Plugin.versionParse = function(range) { Plugin.versionParse = function(range) {
var pattern = /^\*|[\^~]?\d+\.\d+\.\d+(-[0-9A-Za-z-]+)?$/; var pattern = /^(\*)|(\^|~|>=|>)?\s*((\d+)\.(\d+)\.(\d+))(-[0-9A-Za-z-]+)?$/;
if (!pattern.test(range)) { if (!pattern.test(range)) {
Common.warn('Plugin.versionParse:', range, 'is not a valid version or range.'); Common.warn('Plugin.versionParse:', range, 'is not a valid version or range.');
} }
var identifiers = range.split('-'); var parts = pattern.exec(range);
range = identifiers[0]; var major = Number(parts[4]);
var minor = Number(parts[5]);
var isRange = isNaN(Number(range[0])), var patch = Number(parts[6]);
version = isRange ? range.substr(1) : range,
parts = Common.map(version.split('.'), function(part) {
return Number(part);
});
return { return {
isRange: isRange, isRange: Boolean(parts[1] || parts[2]),
version: version, version: parts[3],
range: range, range: range,
operator: isRange ? range[0] : '', operator: parts[1] || parts[2] || '',
parts: parts, major: major,
prerelease: identifiers[1], minor: minor,
number: parts[0] * 1e8 + parts[1] * 1e4 + parts[2] patch: patch,
parts: [major, minor, patch],
prerelease: parts[7],
number: major * 1e8 + minor * 1e4 + patch
}; };
}; };
@ -311,30 +312,36 @@ var Common = require('./Common');
Plugin.versionSatisfies = function(version, range) { Plugin.versionSatisfies = function(version, range) {
range = range || '*'; range = range || '*';
var rangeParsed = Plugin.versionParse(range), var r = Plugin.versionParse(range),
rangeParts = rangeParsed.parts, v = Plugin.versionParse(version);
versionParsed = Plugin.versionParse(version),
versionParts = versionParsed.parts;
if (rangeParsed.isRange) { if (r.isRange) {
if (rangeParsed.operator === '*' || version === '*') { if (r.operator === '*' || version === '*') {
return true; return true;
} }
if (rangeParsed.operator === '~') { if (r.operator === '>') {
return versionParts[0] === rangeParts[0] && versionParts[1] === rangeParts[1] && versionParts[2] >= rangeParts[2]; return v.number > r.number;
} }
if (rangeParsed.operator === '^') { if (r.operator === '>=') {
if (rangeParts[0] > 0) { return v.number >= r.number;
return versionParts[0] === rangeParts[0] && versionParsed.number >= rangeParsed.number;
} }
if (rangeParts[1] > 0) { if (r.operator === '~') {
return versionParts[1] === rangeParts[1] && versionParts[2] >= rangeParts[2]; return v.major === r.major && v.minor === r.minor && v.patch >= r.patch;
} }
return versionParts[2] === rangeParts[2]; if (r.operator === '^') {
if (r.major > 0) {
return v.major === r.major && v.number >= r.number;
}
if (r.minor > 0) {
return v.minor === r.minor && v.patch >= r.patch;
}
return v.patch === r.patch;
} }
} }