61 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const SemVer = require('../classes/semver')
 | |
| const Range = require('../classes/range')
 | |
| const gt = require('../functions/gt')
 | |
| 
 | |
| const minVersion = (range, loose) => {
 | |
|   range = new Range(range, loose)
 | |
| 
 | |
|   let 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 (let i = 0; i < range.set.length; ++i) {
 | |
|     const comparators = range.set[i]
 | |
| 
 | |
|     let setMin = null
 | |
|     comparators.forEach((comparator) => {
 | |
|       // Clone to avoid manipulating the comparator's semver object.
 | |
|       const 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 (!setMin || gt(compver, setMin)) {
 | |
|             setMin = compver
 | |
|           }
 | |
|           break
 | |
|         case '<':
 | |
|         case '<=':
 | |
|           /* Ignore maximum versions */
 | |
|           break
 | |
|         /* istanbul ignore next */
 | |
|         default:
 | |
|           throw new Error(`Unexpected operation: ${comparator.operator}`)
 | |
|       }
 | |
|     })
 | |
|     if (setMin && (!minver || gt(minver, setMin))) {
 | |
|       minver = setMin
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   if (minver && range.test(minver)) {
 | |
|     return minver
 | |
|   }
 | |
| 
 | |
|   return null
 | |
| }
 | |
| module.exports = minVersion
 |