62 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			62 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
							 |