Do not combine pre-release and any match
Closed this issue · 3 comments
sounisi5011 commented
any match (eg *
) does not match pre-release.
const semver = require('semver');
semver.satisfies('1.2.3-alpha', '* || >=1.2.3-0') === true
semver.satisfies('1.2.3-alpha', '*') === false
Therefore, it is wrong to convert '* ||> = 1.2.3-0'
to '*'
.
intersect('* || >=1.2.3-0') !== '* || >=1.2.3-0'
// return: '*'
sounisi5011 commented
This result is also incorrect.
intersect('*', '>=1.2.3-0') !== '>=1.2.3'
// return: '>=1.2.3-0'
'*'
does not match 1.2.3 prerelease.
'>=1.2.3-0'
will only match 1.2.3 or higher.
Thus, the correct intersection is '>=1.2.3'
.
sounisi5011 commented
Apparently, there is a problem with the prerelease version range merge itself.
intersect('^1.2.3-alpha || ^1.2.4-beta') !== '^1.2.3-alpha || ^1.2.4-beta'
// return: '>=1.2.3-alpha <2.0.0'
semver.satisfies('1.2.2', '^1.2.3-alpha || ^1.2.4-beta') === false
semver.satisfies('1.2.2', '>=1.2.3-alpha <2.0.0') === false
semver.satisfies('1.2.3-alpha', '^1.2.3-alpha || ^1.2.4-beta') === true
semver.satisfies('1.2.3-alpha', '>=1.2.3-alpha <2.0.0') === true
semver.satisfies('1.2.3', '^1.2.3-alpha || ^1.2.4-beta') === true
semver.satisfies('1.2.3', '>=1.2.3-alpha <2.0.0') === true
semver.satisfies('1.2.4-beta', '^1.2.3-alpha || ^1.2.4-beta') === true
semver.satisfies('1.2.4-beta', '>=1.2.3-alpha <2.0.0') !== true // incorrect!
semver.satisfies('1.2.4', '^1.2.3-alpha || ^1.2.4-beta') === true
semver.satisfies('1.2.4', '>=1.2.3-alpha <2.0.0') === true
semver.satisfies('1.2.5', '^1.2.3-alpha || ^1.2.4-beta') === true
semver.satisfies('1.2.5', '>=1.2.3-alpha <2.0.0') === true
sounisi5011 commented
Related:
semver-range-intersect/test/index.ts
Lines 280 to 286 in 2338bb1