-
Notifications
You must be signed in to change notification settings - Fork 525
Closed
Labels
Bugthing that needs fixingthing that needs fixing
Description
What / Why
inc
when called with an instance ofSemVer
will affect the providedSemVer
object (if no opts are given, see Steps to Reproduce). This leads to unexpected behaviour for a function that could be expected to be pure.
When
- n/a
Where
- n/a
How
Current Behavior
inc
will do the operation on the SemVer object provided in parameters, except if semver is created with loose
or includePrereleaseSemVer
.
Steps to Reproduce
const { SemVer, inc } = require("semver");
const { equal } = require("assert");
const initalStrVer = "1.0.0";
const initialSemver = new SemVer(initalStrVer);
const looseSemver = new SemVer(initalStrVer, { loose: true });
const includePrereleaseSemVer = new SemVer(initalStrVer, {
includePrerelease: true,
});
inc(initialSemver, "minor");
inc(looseSemver, "minor");
inc(includePrereleaseSemVer, "minor");
inc(initalStrVer, "minor");
equal(initalStrVer, looseSemver.version); // ✔️ Pass
equal(initalStrVer, includePrereleaseSemVer.version); // ✔️ Pass
equal(initalStrVer, initialSemver.version); // ❌ AssertionError [ERR_ASSERTION]: '1.0.0' == '1.1.0'
Expected Behavior
inc
should never modify the provided SemVer object.
Who
- n/a
References
Metadata
Metadata
Assignees
Labels
Bugthing that needs fixingthing that needs fixing