node-semver icon indicating copy to clipboard operation
node-semver copied to clipboard

[BUG]semver.Range returns pre-release version even when includePrerelease is set to false

Open alan-agius4 opened this issue 4 years ago • 2 comments
trafficstars

What / Why

new semver.Range returns prerelease semver version even when includePrerelease is set to false with version 7.3.5.

How

Current Behavior

const semver = require('semver');
new semver.Range('^12.0.0 || ^13.0.0-rc.0', { includePrerelease: false})


options: Object {}
loose: false
includePrerelease: false
raw: "^12.0.0 || ^13.0.0-rc.0"
range: ">=12.0.0 <13.0.0-0||>=13.0.0-rc.0 <14.0.0-0"

Expected Behavior

range doesn't include pre-releases when includePrerelease is set to false.

+ range: ">=12.0.0 <13.0.0-0"
- range: ">=12.0.0 <13.0.0-0||>=13.0.0-rc.0 <14.0.0-0"

alan-agius4 avatar Aug 17 '21 08:08 alan-agius4

I wouldn’t expect that; the option is whether non prerelease ranges should include it. An explicit prerelease range I’d expect will always include it.

ljharb avatar Aug 17 '21 15:08 ljharb

I had the same confusion when I was first looking at this package. I at first thought that it would make sense that new semver.Range(range, { includePrerelease: true}) included all prerelease; new semver.Range(range, { includePrerelease: false}) included no prerelease; and new semver.Range(range) included prerelease per the rules about prerelease matching.

It would be clearer if the parameter were named includeAllPrerelease. That is what I have done in my own package.

WalkerCodeRanger avatar Dec 26 '22 18:12 WalkerCodeRanger