SemVish
A versioning interpretter that can process multiple versioning schemes such as
- SemVer
<Max>-<Min>
<Max>-<Min>-<release>
<Max>
<Max>-<release>
<release>
Passes some 1290 tests (mostly from node-semver)
Install
$ [sudo] npm install semvish
Motivation
jsDelivr needed a multi version comparitor scheme
API
Borrows directly from node-semver
's API
clean
process a SemVer-ish string to a SemVer compliant string
// => 1.2.0 // => 1.2.0 // => 1.2.0-beta1 // => 1.2.0-beta1 // => 1.2.0-alpha1 // => 1.2.0-alpha1 // => 1.0.0 // => 1.0.0-rc1 // => 1.0.0-rc1 // => 0.0.0-alpha1 // Handes prefixs and trims strings for all inputs (pretty much every stupid scheme I've ever seen) // => 1.2.0 // => 1.2.0 // => 1.2.0 // => 1.2.0 // => 1.2.0 // => 1.2.0 // => 1.2.0
-
valid
is some string semverish? -
satisfies(version, range, loose)
: whethere a given (SemVish) version matches a semver range - currently only supports semver ranges so^2015-20-15
and similar will not work, instead use^0.0.0-2015-20-15
. -
gt(v1, v2)
:v1 > v2
-
gte(v1, v2)
:v1 >= v2
-
lt(v1, v2)
:v1 < v2
-
lte(v1, v2)
:v1 <= v2
-
eq(v1, v2)
:v1 == v2
This is true if they're logically equivalent, even if they're not the exact same string. You already know how to compare strings. -
neq(v1, v2)
:v1 != v2
The opposite ofeq
. -
cmp(v1, comparator, v2)
: Pass in a comparison string, and it'll call the corresponding function above."==="
and"!=="
do simple string comparison, but are included for completeness. Throws if an invalid comparison string is provided. -
compare(v1, v2)
: Return0
ifv1 == v2
, or1
ifv1
is greater, or-1
ifv2
is greater. Sorts in ascending order if passed toArray.sort()
. -
rcompare(v1, v2)
: The reverse of compare. Sorts an array of versions in descending order when passed toArray.sort()
.
Differences from semver spec
- Minorly divergent (see #1) in the way pre-releases are handled: prereleases are compared naturally while the semver spec states that
Precedence for two pre-release versions with the same major, minor, and patch version MUST be determined by comparing each dot separated identifier from left to right until a difference is found as follows: identifiers consisting of only digits are compared numerically and identifiers with letters or hyphens are compared lexically in ASCII sort order.
Therefore as defined by Semver
: 0.0.0-a100 < 0.0.0-a2
. This minor rule limited us in the alternate supported versioning schemes so we forked the handling.