| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 | // 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}
 |