UNPKG

1.4 kBJavaScriptView Raw
1const SemVer = require('../classes/semver')
2const Range = require('../classes/range')
3const gt = require('../functions/gt')
4
5const minVersion = (range, loose) => {
6 range = new Range(range, loose)
7
8 let minver = new SemVer('0.0.0')
9 if (range.test(minver)) {
10 return minver
11 }
12
13 minver = new SemVer('0.0.0-0')
14 if (range.test(minver)) {
15 return minver
16 }
17
18 minver = null
19 for (let i = 0; i < range.set.length; ++i) {
20 const comparators = range.set[i]
21
22 comparators.forEach((comparator) => {
23 // Clone to avoid manipulating the comparator's semver object.
24 const compver = new SemVer(comparator.semver.version)
25 switch (comparator.operator) {
26 case '>':
27 if (compver.prerelease.length === 0) {
28 compver.patch++
29 } else {
30 compver.prerelease.push(0)
31 }
32 compver.raw = compver.format()
33 /* fallthrough */
34 case '':
35 case '>=':
36 if (!minver || gt(minver, compver)) {
37 minver = compver
38 }
39 break
40 case '<':
41 case '<=':
42 /* Ignore maximum versions */
43 break
44 /* istanbul ignore next */
45 default:
46 throw new Error(`Unexpected operation: ${comparator.operator}`)
47 }
48 })
49 }
50
51 if (minver && range.test(minver)) {
52 return minver
53 }
54
55 return null
56}
57module.exports = minVersion