'use strict' // [range, canonical result, options] // null result means it's not a valid range // '*' is the return value from functions.validRange(), but // new Range().range will be '' in those cases const { MAX_SAFE_INTEGER } = require('../../internal/constants') module.exports = [ ['1.0.0 - 2.0.0', '>=1.0.0 <=2.0.0'], ['1.0.0 - 2.0.0', '>=1.0.0-0 <2.0.1-0', { includePrerelease: true }], ['1 - 2', '>=1.0.0 <3.0.0-0'], ['1 - 2', '>=1.0.0-0 <3.0.0-0', { includePrerelease: true }], ['1.0 - 2.0', '>=1.0.0 <2.1.0-0'], ['1.0 - 2.0', '>=1.0.0-0 <2.1.0-0', { includePrerelease: true }], ['1.0.0', '1.0.0', { loose: false }], ['>=*', '*'], ['', '*'], ['*', '*'], ['>=1.0.0', '>=1.0.0'], ['>1.0.0', '>1.0.0'], ['<=2.0.0', '<=2.0.0'], ['1', '>=1.0.0 <2.0.0-0'], ['<2.0.0', '<2.0.0'], ['>= 1.0.0', '>=1.0.0'], ['>= 1.0.0', '>=1.0.0'], ['>= 1.0.0', '>=1.0.0'], ['> 1.0.0', '>1.0.0'], ['> 1.0.0', '>1.0.0'], ['<= 2.0.0', '<=2.0.0'], ['<= 2.0.0', '<=2.0.0'], ['<= 2.0.0', '<=2.0.0'], ['< 2.0.0', '<2.0.0'], ['<\t2.0.0', '<2.0.0'], ['>=0.1.97', '>=0.1.97'], ['0.1.20 || 1.2.4', '0.1.20||1.2.4'], ['>=0.2.3 || <0.0.1', '>=0.2.3||<0.0.1'], ['||', '*'], ['2.x.x', '>=2.0.0 <3.0.0-0'], ['1.2.x', '>=1.2.0 <1.3.0-0'], ['1.2.x || 2.x', '>=1.2.0 <1.3.0-0||>=2.0.0 <3.0.0-0'], ['1.x.5', null], ['1.*.5', null], ['1.x.5 || 2.x', null], ['x.1', null], ['x.1.2', null], ['x.x.1', null], ['x', '*'], ['2.*.*', '>=2.0.0 <3.0.0-0'], ['1.2.*', '>=1.2.0 <1.3.0-0'], ['1.2.* || 2.*', '>=1.2.0 <1.3.0-0||>=2.0.0 <3.0.0-0'], ['2', '>=2.0.0 <3.0.0-0'], ['2.3', '>=2.3.0 <2.4.0-0'], ['~2.4', '>=2.4.0 <2.5.0-0'], ['~>3.2.1', '>=3.2.1 <3.3.0-0'], ['~1', '>=1.0.0 <2.0.0-0'], ['~>1', '>=1.0.0 <2.0.0-0'], ['~> 1', '>=1.0.0 <2.0.0-0'], ['~1.0', '>=1.0.0 <1.1.0-0'], ['~ 1.0', '>=1.0.0 <1.1.0-0'], // tilde with includePrerelease must lower-bound at -0 just like the // equivalent x-range (e.g. ~1.2 is documented as the same as 1.2.x), // so that prereleases such as 1.2.0-rc match. See #512. ['~1', '>=1.0.0-0 <2.0.0-0', { includePrerelease: true }], ['~1.x', '>=1.0.0-0 <2.0.0-0', { includePrerelease: true }], ['~1.2', '>=1.2.0-0 <1.3.0-0', { includePrerelease: true }], ['~1.2.x', '>=1.2.0-0 <1.3.0-0', { includePrerelease: true }], ['~0.0', '<0.1.0-0', { includePrerelease: true }], // a fully-specified tilde keeps its exact lower bound (matches caret), // and an explicit prerelease is preserved as-is ['~1.2.3', '>=1.2.3 <1.3.0-0', { includePrerelease: true }], ['~1.2.3-beta.4', '>=1.2.3-beta.4 <1.3.0-0', { includePrerelease: true }], ['^0', '<1.0.0-0'], ['^ 1', '>=1.0.0 <2.0.0-0'], ['^0.1', '>=0.1.0 <0.2.0-0'], ['^1.0', '>=1.0.0 <2.0.0-0'], ['^1.2', '>=1.2.0 <2.0.0-0'], ['^0.0.1', '>=0.0.1 <0.0.2-0'], ['^0.0.1-beta', '>=0.0.1-beta <0.0.2-0'], ['^0.1.2', '>=0.1.2 <0.2.0-0'], ['^1.2.3', '>=1.2.3 <2.0.0-0'], ['^1.2.3-beta.4', '>=1.2.3-beta.4 <2.0.0-0'], ['<1', '<1.0.0-0'], ['< 1', '<1.0.0-0'], ['>=1', '>=1.0.0'], ['>= 1', '>=1.0.0'], ['<1.2', '<1.2.0-0'], ['< 1.2', '<1.2.0-0'], ['>01.02.03', '>1.2.3', true], ['>01.02.03', null], ['~1.2.3beta', '>=1.2.3-beta <1.3.0-0', { loose: true }], ['~1.2.3beta', null], ['^ 1.2 ^ 1', '>=1.2.0 <2.0.0-0 >=1.0.0'], ['1.2 - 3.4.5', '>=1.2.0 <=3.4.5'], ['1.2.3 - 3.4', '>=1.2.3 <3.5.0-0'], ['1.2 - 3.4', '>=1.2.0 <3.5.0-0'], ['>1', '>=2.0.0'], ['>1.2', '>=1.3.0'], ['>X', '<0.0.0-0'], ['* 2.x', '<0.0.0-0'], ['>x 2.x || * || =09090', null], ['>=09090', '>=9090.0.0', true], ['>=09090-0', null, { includePrerelease: true }], ['>=09090-0', null, { loose: true, includePrerelease: true }], [`^${MAX_SAFE_INTEGER}.0.0`, null], [`=${MAX_SAFE_INTEGER}.0.0`, `${MAX_SAFE_INTEGER}.0.0`], [`^${MAX_SAFE_INTEGER - 1}.0.0`, `>=${MAX_SAFE_INTEGER - 1}.0.0 <${MAX_SAFE_INTEGER}.0.0-0`], // x-ranges with build metadata ['1.x.x+build >2.x+build', '>=1.0.0 <2.0.0-0 >=3.0.0', null], ['>=1.x+build <2.x.x+build', '>=1.0.0 <2.0.0-0', null], ['1.x.x+build || 2.x.x+build', '>=1.0.0 <2.0.0-0||>=2.0.0 <3.0.0-0', null], ['1.x+build.123', '>=1.0.0 <2.0.0-0', null], ['1.x.x+meta-data', '>=1.0.0 <2.0.0-0', null], ['1.x.x+build.123 >2.x.x+meta-data', '>=1.0.0 <2.0.0-0 >=3.0.0', null], ['1.x.x+build <2.x.x+meta', '>=1.0.0 <2.0.0-0', null], ['>1.x+build <=2.x.x+meta', '>=2.0.0 <3.0.0-0', null], [' 1.x.x+build >2.x.x+build ', '>=1.0.0 <2.0.0-0 >=3.0.0', null], ['^1.x+build', '>=1.0.0 <2.0.0-0', null], ['^1.x.x+build', '>=1.0.0 <2.0.0-0', null], ['^1.2.x+build', '>=1.2.0 <2.0.0-0', null], ['^1.x+meta-data', '>=1.0.0 <2.0.0-0', null], ['^1.x.x+build.123', '>=1.0.0 <2.0.0-0', null], ['~1.x+build', '>=1.0.0 <2.0.0-0', null], ['~1.x.x+build', '>=1.0.0 <2.0.0-0', null], ['~1.2.x+build', '>=1.2.0 <1.3.0-0', null], ['~1.x+meta-data', '>=1.0.0 <2.0.0-0', null], ['~1.x.x+build.123', '>=1.0.0 <2.0.0-0', null], ['^1.x.x+build || ~2.x.x+meta', '>=1.0.0 <2.0.0-0||>=2.0.0 <3.0.0-0', null], ['~1.x.x+build >2.x+meta', '>=1.0.0 <2.0.0-0 >=3.0.0', null], ['^1.x+build.123 <2.x.x+meta-data', '>=1.0.0 <2.0.0-0', null], // // x-ranges with prerelease and build ['1.x.x-alpha+build', '>=1.0.0 <2.0.0-0', null], ['>1.x.x-alpha+build', '>=2.0.0', null], ['>=1.x.x-alpha+build <2.x.x+build', '>=1.0.0 <2.0.0-0', null], ['1.x.x-alpha+build || 2.x.x+build', '>=1.0.0 <2.0.0-0||>=2.0.0 <3.0.0-0', null], // long build metadata must be stripped, not bled into the version ['4.17.0+' + 'a'.repeat(250) + '3', '4.17.0', { loose: true }], ['4.17.0+' + 'a'.repeat(251), '4.17.0', { loose: true }], ['v1.0+' + 'a'.repeat(249) + 'x6', '>=1.0.0 <1.1.0-0', null], ['1.2.3+' + 'a'.repeat(251) + ' - 2.0.0', '>=1.2.3 <=2.0.0', null], ['1.2.3+' + 'a'.repeat(251) + ' - 2.0.0', '>=1.2.3 <=2.0.0', { loose: true }], ['> 1.2.3+' + 'a'.repeat(251), '>1.2.3', null], ['>= 1.2.3+' + 'a'.repeat(251), '>=1.2.3', { loose: true }], ['~1.2.3+' + 'a'.repeat(251), '>=1.2.3 <1.3.0-0', null], ['^1.2.3+' + 'a'.repeat(251), '>=1.2.3 <2.0.0-0', null], ['1.2.3+sha512.' + 'a'.repeat(251), '1.2.3', { loose: true }], ['1.2.3+sha256.' + 'a'.repeat(200) + '.' + 'b'.repeat(200), '1.2.3', { loose: true }], ['1.2.3+' + 'a'.repeat(251) + ' || 2.0.0+' + 'b'.repeat(251), '1.2.3||2.0.0', { loose: true }], ]