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 |