75 lines
1.5 KiB
JavaScript
75 lines
1.5 KiB
JavaScript
"use strict";
|
|
|
|
require("core-js/modules/es.array.for-each");
|
|
|
|
require("core-js/modules/web.dom-collections.for-each");
|
|
|
|
var SemVer = require('../classes/semver');
|
|
|
|
var Range = require('../classes/range');
|
|
|
|
var gt = require('../functions/gt');
|
|
|
|
var minVersion = function minVersion(range, loose) {
|
|
range = new Range(range, loose);
|
|
var minver = new SemVer('0.0.0');
|
|
|
|
if (range.test(minver)) {
|
|
return minver;
|
|
}
|
|
|
|
minver = new SemVer('0.0.0-0');
|
|
|
|
if (range.test(minver)) {
|
|
return minver;
|
|
}
|
|
|
|
minver = null;
|
|
|
|
for (var i = 0; i < range.set.length; ++i) {
|
|
var comparators = range.set[i];
|
|
comparators.forEach(function (comparator) {
|
|
// Clone to avoid manipulating the comparator's semver object.
|
|
var compver = new SemVer(comparator.semver.version);
|
|
|
|
switch (comparator.operator) {
|
|
case '>':
|
|
if (compver.prerelease.length === 0) {
|
|
compver.patch++;
|
|
} else {
|
|
compver.prerelease.push(0);
|
|
}
|
|
|
|
compver.raw = compver.format();
|
|
|
|
/* fallthrough */
|
|
|
|
case '':
|
|
case '>=':
|
|
if (!minver || gt(minver, compver)) {
|
|
minver = compver;
|
|
}
|
|
|
|
break;
|
|
|
|
case '<':
|
|
case '<=':
|
|
/* Ignore maximum versions */
|
|
break;
|
|
|
|
/* istanbul ignore next */
|
|
|
|
default:
|
|
throw new Error("Unexpected operation: ".concat(comparator.operator));
|
|
}
|
|
});
|
|
}
|
|
|
|
if (minver && range.test(minver)) {
|
|
return minver;
|
|
}
|
|
|
|
return null;
|
|
};
|
|
|
|
module.exports = minVersion; |