1 | const SemVer = require('../classes/semver')
|
2 | const Range = require('../classes/range')
|
3 | const gt = require('../functions/gt')
|
4 |
|
5 | const 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 |
|
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 |
|
34 | case '':
|
35 | case '>=':
|
36 | if (!minver || gt(minver, compver)) {
|
37 | minver = compver
|
38 | }
|
39 | break
|
40 | case '<':
|
41 | case '<=':
|
42 |
|
43 | break
|
44 |
|
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 | }
|
57 | module.exports = minVersion
|