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