1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- // 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 min = 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 (!min)
- min = version
- } else {
- if (prev) {
- set.push([min, prev])
- }
- prev = null
- min = null
- }
- }
- if (min)
- set.push([min, 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
- }
|