48 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			48 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								// given a set of versions and a range, create a "simplified" range
							 | 
						||
| 
								 | 
							
								// that includes the same versions that the original range does
							 | 
						||
| 
								 | 
							
								// If the original range is shorter than the simplified one, return that.
							 | 
						||
| 
								 | 
							
								const satisfies = require('../functions/satisfies.js')
							 | 
						||
| 
								 | 
							
								const compare = require('../functions/compare.js')
							 | 
						||
| 
								 | 
							
								module.exports = (versions, range, options) => {
							 | 
						||
| 
								 | 
							
								  const set = []
							 | 
						||
| 
								 | 
							
								  let first = null
							 | 
						||
| 
								 | 
							
								  let prev = null
							 | 
						||
| 
								 | 
							
								  const v = versions.sort((a, b) => compare(a, b, options))
							 | 
						||
| 
								 | 
							
								  for (const version of v) {
							 | 
						||
| 
								 | 
							
								    const included = satisfies(version, range, options)
							 | 
						||
| 
								 | 
							
								    if (included) {
							 | 
						||
| 
								 | 
							
								      prev = version
							 | 
						||
| 
								 | 
							
								      if (!first) {
							 | 
						||
| 
								 | 
							
								        first = version
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								      if (prev) {
							 | 
						||
| 
								 | 
							
								        set.push([first, prev])
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      prev = null
							 | 
						||
| 
								 | 
							
								      first = null
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  if (first) {
							 | 
						||
| 
								 | 
							
								    set.push([first, null])
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const ranges = []
							 | 
						||
| 
								 | 
							
								  for (const [min, max] of set) {
							 | 
						||
| 
								 | 
							
								    if (min === max) {
							 | 
						||
| 
								 | 
							
								      ranges.push(min)
							 | 
						||
| 
								 | 
							
								    } else if (!max && min === v[0]) {
							 | 
						||
| 
								 | 
							
								      ranges.push('*')
							 | 
						||
| 
								 | 
							
								    } else if (!max) {
							 | 
						||
| 
								 | 
							
								      ranges.push(`>=${min}`)
							 | 
						||
| 
								 | 
							
								    } else if (min === v[0]) {
							 | 
						||
| 
								 | 
							
								      ranges.push(`<=${max}`)
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								      ranges.push(`${min} - ${max}`)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  const simplified = ranges.join(' || ')
							 | 
						||
| 
								 | 
							
								  const original = typeof range.raw === 'string' ? range.raw : String(range)
							 | 
						||
| 
								 | 
							
								  return simplified.length < original.length ? simplified : range
							 | 
						||
| 
								 | 
							
								}
							 |