1semver(1) -- The semantic versioner for npm 2=========================================== 3 4## Install 5 6```bash 7npm install --save semver 8```` 9 10## Usage 11 12As a node module: 13 14```js 15const semver = require('semver') 16 17semver.valid('1.2.3') // '1.2.3' 18semver.valid('a.b.c') // null 19semver.clean(' =v1.2.3 ') // '1.2.3' 20semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true 21semver.gt('1.2.3', '9.8.7') // false 22semver.lt('1.2.3', '9.8.7') // true 23semver.minVersion('>=1.0.0') // '1.0.0' 24semver.valid(semver.coerce('v2')) // '2.0.0' 25semver.valid(semver.coerce('42.6.7.9.3-alpha')) // '42.6.7' 26``` 27 28As a command-line utility: 29 30``` 31$ semver -h 32 33A JavaScript implementation of the https://semver.org/ specification 34Copyright Isaac Z. Schlueter 35 36Usage: semver [options] <version> [<version> [...]] 37Prints valid versions sorted by SemVer precedence 38 39Options: 40-r --range <range> 41 Print versions that match the specified range. 42 43-i --increment [<level>] 44 Increment a version by the specified level. Level can 45 be one of: major, minor, patch, premajor, preminor, 46 prepatch, or prerelease. Default level is 'patch'. 47 Only one version may be specified. 48 49--preid <identifier> 50 Identifier to be used to prefix premajor, preminor, 51 prepatch or prerelease version increments. 52 53-l --loose 54 Interpret versions and ranges loosely 55 56-p --include-prerelease 57 Always include prerelease versions in range matching 58 59-c --coerce 60 Coerce a string into SemVer if possible 61 (does not imply --loose) 62 63Program exits successfully if any valid version satisfies 64all supplied ranges, and prints all satisfying versions. 65 66If no satisfying versions are found, then exits failure. 67 68Versions are printed in ascending order, so supplying 69multiple versions to the utility will just sort them. 70``` 71 72## Versions 73 74A "version" is described by the `v2.0.0` specification found at 75<https://semver.org/>. 76 77A leading `"="` or `"v"` character is stripped off and ignored. 78 79## Ranges 80 81A `version range` is a set of `comparators` which specify versions 82that satisfy the range. 83 84A `comparator` is composed of an `operator` and a `version`. The set 85of primitive `operators` is: 86 87* `<` Less than 88* `<=` Less than or equal to 89* `>` Greater than 90* `>=` Greater than or equal to 91* `=` Equal. If no operator is specified, then equality is assumed, 92 so this operator is optional, but MAY be included. 93 94For example, the comparator `>=1.2.7` would match the versions 95`1.2.7`, `1.2.8`, `2.5.3`, and `1.3.9`, but not the versions `1.2.6` 96or `1.1.0`. 97 98Comparators can be joined by whitespace to form a `comparator set`, 99which is satisfied by the **intersection** of all of the comparators 100it includes. 101 102A range is composed of one or more comparator sets, joined by `||`. A 103version matches a range if and only if every comparator in at least 104one of the `||`-separated comparator sets is satisfied by the version. 105 106For example, the range `>=1.2.7 <1.3.0` would match the versions 107`1.2.7`, `1.2.8`, and `1.2.99`, but not the versions `1.2.6`, `1.3.0`, 108or `1.1.0`. 109 110The range `1.2.7 || >=1.2.9 <2.0.0` would match the versions `1.2.7`, 111`1.2.9`, and `1.4.6`, but not the versions `1.2.8` or `2.0.0`. 112 113### Prerelease Tags 114 115If a version has a prerelease tag (for example, `1.2.3-alpha.3`) then 116it will only be allowed to satisfy comparator sets if at least one 117comparator with the same `[major, minor, patch]` tuple also has a 118prerelease tag. 119 120For example, the range `>1.2.3-alpha.3` would be allowed to match the 121version `1.2.3-alpha.7`, but it would *not* be satisfied by 122`3.4.5-alpha.9`, even though `3.4.5-alpha.9` is technically "greater 123than" `1.2.3-alpha.3` according to the SemVer sort rules. The version 124range only accepts prerelease tags on the `1.2.3` version. The 125version `3.4.5` *would* satisfy the range, because it does not have a 126prerelease flag, and `3.4.5` is greater than `1.2.3-alpha.7`. 127 128The purpose for this behavior is twofold. First, prerelease versions 129frequently are updated very quickly, and contain many breaking changes 130that are (by the author's design) not yet fit for public consumption. 131Therefore, by default, they are excluded from range matching 132semantics. 133 134Second, a user who has opted into using a prerelease version has 135clearly indicated the intent to use *that specific* set of 136alpha/beta/rc versions. By including a prerelease tag in the range, 137the user is indicating that they are aware of the risk. However, it 138is still not appropriate to assume that they have opted into taking a 139similar risk on the *next* set of prerelease versions. 140 141Note that this behavior can be suppressed (treating all prerelease 142versions as if they were normal versions, for the purpose of range 143matching) by setting the `includePrerelease` flag on the options 144object to any 145[functions](https://github.com/npm/node-semver#functions) that do 146range matching. 147 148#### Prerelease Identifiers 149 150The method `.inc` takes an additional `identifier` string argument that 151will append the value of the string as a prerelease identifier: 152 153```javascript 154semver.inc('1.2.3', 'prerelease', 'beta') 155// '1.2.4-beta.0' 156``` 157 158command-line example: 159 160```bash 161$ semver 1.2.3 -i prerelease --preid beta 1621.2.4-beta.0 163``` 164 165Which then can be used to increment further: 166 167```bash 168$ semver 1.2.4-beta.0 -i prerelease 1691.2.4-beta.1 170``` 171 172### Advanced Range Syntax 173 174Advanced range syntax desugars to primitive comparators in 175deterministic ways. 176 177Advanced ranges may be combined in the same way as primitive 178comparators using white space or `||`. 179 180#### Hyphen Ranges `X.Y.Z - A.B.C` 181 182Specifies an inclusive set. 183 184* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4` 185 186If a partial version is provided as the first version in the inclusive 187range, then the missing pieces are replaced with zeroes. 188 189* `1.2 - 2.3.4` := `>=1.2.0 <=2.3.4` 190 191If a partial version is provided as the second version in the 192inclusive range, then all versions that start with the supplied parts 193of the tuple are accepted, but nothing that would be greater than the 194provided tuple parts. 195 196* `1.2.3 - 2.3` := `>=1.2.3 <2.4.0` 197* `1.2.3 - 2` := `>=1.2.3 <3.0.0` 198 199#### X-Ranges `1.2.x` `1.X` `1.2.*` `*` 200 201Any of `X`, `x`, or `*` may be used to "stand in" for one of the 202numeric values in the `[major, minor, patch]` tuple. 203 204* `*` := `>=0.0.0` (Any version satisfies) 205* `1.x` := `>=1.0.0 <2.0.0` (Matching major version) 206* `1.2.x` := `>=1.2.0 <1.3.0` (Matching major and minor versions) 207 208A partial version range is treated as an X-Range, so the special 209character is in fact optional. 210 211* `""` (empty string) := `*` := `>=0.0.0` 212* `1` := `1.x.x` := `>=1.0.0 <2.0.0` 213* `1.2` := `1.2.x` := `>=1.2.0 <1.3.0` 214 215#### Tilde Ranges `~1.2.3` `~1.2` `~1` 216 217Allows patch-level changes if a minor version is specified on the 218comparator. Allows minor-level changes if not. 219 220* `~1.2.3` := `>=1.2.3 <1.(2+1).0` := `>=1.2.3 <1.3.0` 221* `~1.2` := `>=1.2.0 <1.(2+1).0` := `>=1.2.0 <1.3.0` (Same as `1.2.x`) 222* `~1` := `>=1.0.0 <(1+1).0.0` := `>=1.0.0 <2.0.0` (Same as `1.x`) 223* `~0.2.3` := `>=0.2.3 <0.(2+1).0` := `>=0.2.3 <0.3.0` 224* `~0.2` := `>=0.2.0 <0.(2+1).0` := `>=0.2.0 <0.3.0` (Same as `0.2.x`) 225* `~0` := `>=0.0.0 <(0+1).0.0` := `>=0.0.0 <1.0.0` (Same as `0.x`) 226* `~1.2.3-beta.2` := `>=1.2.3-beta.2 <1.3.0` Note that prereleases in 227 the `1.2.3` version will be allowed, if they are greater than or 228 equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but 229 `1.2.4-beta.2` would not, because it is a prerelease of a 230 different `[major, minor, patch]` tuple. 231 232#### Caret Ranges `^1.2.3` `^0.2.5` `^0.0.4` 233 234Allows changes that do not modify the left-most non-zero digit in the 235`[major, minor, patch]` tuple. In other words, this allows patch and 236minor updates for versions `1.0.0` and above, patch updates for 237versions `0.X >=0.1.0`, and *no* updates for versions `0.0.X`. 238 239Many authors treat a `0.x` version as if the `x` were the major 240"breaking-change" indicator. 241 242Caret ranges are ideal when an author may make breaking changes 243between `0.2.4` and `0.3.0` releases, which is a common practice. 244However, it presumes that there will *not* be breaking changes between 245`0.2.4` and `0.2.5`. It allows for changes that are presumed to be 246additive (but non-breaking), according to commonly observed practices. 247 248* `^1.2.3` := `>=1.2.3 <2.0.0` 249* `^0.2.3` := `>=0.2.3 <0.3.0` 250* `^0.0.3` := `>=0.0.3 <0.0.4` 251* `^1.2.3-beta.2` := `>=1.2.3-beta.2 <2.0.0` Note that prereleases in 252 the `1.2.3` version will be allowed, if they are greater than or 253 equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but 254 `1.2.4-beta.2` would not, because it is a prerelease of a 255 different `[major, minor, patch]` tuple. 256* `^0.0.3-beta` := `>=0.0.3-beta <0.0.4` Note that prereleases in the 257 `0.0.3` version *only* will be allowed, if they are greater than or 258 equal to `beta`. So, `0.0.3-pr.2` would be allowed. 259 260When parsing caret ranges, a missing `patch` value desugars to the 261number `0`, but will allow flexibility within that value, even if the 262major and minor versions are both `0`. 263 264* `^1.2.x` := `>=1.2.0 <2.0.0` 265* `^0.0.x` := `>=0.0.0 <0.1.0` 266* `^0.0` := `>=0.0.0 <0.1.0` 267 268A missing `minor` and `patch` values will desugar to zero, but also 269allow flexibility within those values, even if the major version is 270zero. 271 272* `^1.x` := `>=1.0.0 <2.0.0` 273* `^0.x` := `>=0.0.0 <1.0.0` 274 275### Range Grammar 276 277Putting all this together, here is a Backus-Naur grammar for ranges, 278for the benefit of parser authors: 279 280```bnf 281range-set ::= range ( logical-or range ) * 282logical-or ::= ( ' ' ) * '||' ( ' ' ) * 283range ::= hyphen | simple ( ' ' simple ) * | '' 284hyphen ::= partial ' - ' partial 285simple ::= primitive | partial | tilde | caret 286primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial 287partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? 288xr ::= 'x' | 'X' | '*' | nr 289nr ::= '0' | ['1'-'9'] ( ['0'-'9'] ) * 290tilde ::= '~' partial 291caret ::= '^' partial 292qualifier ::= ( '-' pre )? ( '+' build )? 293pre ::= parts 294build ::= parts 295parts ::= part ( '.' part ) * 296part ::= nr | [-0-9A-Za-z]+ 297``` 298 299## Functions 300 301All methods and classes take a final `options` object argument. All 302options in this object are `false` by default. The options supported 303are: 304 305- `loose` Be more forgiving about not-quite-valid semver strings. 306 (Any resulting output will always be 100% strict compliant, of 307 course.) For backwards compatibility reasons, if the `options` 308 argument is a boolean value instead of an object, it is interpreted 309 to be the `loose` param. 310- `includePrerelease` Set to suppress the [default 311 behavior](https://github.com/npm/node-semver#prerelease-tags) of 312 excluding prerelease tagged versions from ranges unless they are 313 explicitly opted into. 314 315Strict-mode Comparators and Ranges will be strict about the SemVer 316strings that they parse. 317 318* `valid(v)`: Return the parsed version, or null if it's not valid. 319* `inc(v, release)`: Return the version incremented by the release 320 type (`major`, `premajor`, `minor`, `preminor`, `patch`, 321 `prepatch`, or `prerelease`), or null if it's not valid 322 * `premajor` in one call will bump the version up to the next major 323 version and down to a prerelease of that major version. 324 `preminor`, and `prepatch` work the same way. 325 * If called from a non-prerelease version, the `prerelease` will work the 326 same as `prepatch`. It increments the patch version, then makes a 327 prerelease. If the input version is already a prerelease it simply 328 increments it. 329* `prerelease(v)`: Returns an array of prerelease components, or null 330 if none exist. Example: `prerelease('1.2.3-alpha.1') -> ['alpha', 1]` 331* `major(v)`: Return the major version number. 332* `minor(v)`: Return the minor version number. 333* `patch(v)`: Return the patch version number. 334* `intersects(r1, r2, loose)`: Return true if the two supplied ranges 335 or comparators intersect. 336* `parse(v)`: Attempt to parse a string as a semantic version, returning either 337 a `SemVer` object or `null`. 338 339### Comparison 340 341* `gt(v1, v2)`: `v1 > v2` 342* `gte(v1, v2)`: `v1 >= v2` 343* `lt(v1, v2)`: `v1 < v2` 344* `lte(v1, v2)`: `v1 <= v2` 345* `eq(v1, v2)`: `v1 == v2` This is true if they're logically equivalent, 346 even if they're not the exact same string. You already know how to 347 compare strings. 348* `neq(v1, v2)`: `v1 != v2` The opposite of `eq`. 349* `cmp(v1, comparator, v2)`: Pass in a comparison string, and it'll call 350 the corresponding function above. `"==="` and `"!=="` do simple 351 string comparison, but are included for completeness. Throws if an 352 invalid comparison string is provided. 353* `compare(v1, v2)`: Return `0` if `v1 == v2`, or `1` if `v1` is greater, or `-1` if 354 `v2` is greater. Sorts in ascending order if passed to `Array.sort()`. 355* `rcompare(v1, v2)`: The reverse of compare. Sorts an array of versions 356 in descending order when passed to `Array.sort()`. 357* `diff(v1, v2)`: Returns difference between two versions by the release type 358 (`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`), 359 or null if the versions are the same. 360 361### Comparators 362 363* `intersects(comparator)`: Return true if the comparators intersect 364 365### Ranges 366 367* `validRange(range)`: Return the valid range or null if it's not valid 368* `satisfies(version, range)`: Return true if the version satisfies the 369 range. 370* `maxSatisfying(versions, range)`: Return the highest version in the list 371 that satisfies the range, or `null` if none of them do. 372* `minSatisfying(versions, range)`: Return the lowest version in the list 373 that satisfies the range, or `null` if none of them do. 374* `minVersion(range)`: Return the lowest version that can possibly match 375 the given range. 376* `gtr(version, range)`: Return `true` if version is greater than all the 377 versions possible in the range. 378* `ltr(version, range)`: Return `true` if version is less than all the 379 versions possible in the range. 380* `outside(version, range, hilo)`: Return true if the version is outside 381 the bounds of the range in either the high or low direction. The 382 `hilo` argument must be either the string `'>'` or `'<'`. (This is 383 the function called by `gtr` and `ltr`.) 384* `intersects(range)`: Return true if any of the ranges comparators intersect 385 386Note that, since ranges may be non-contiguous, a version might not be 387greater than a range, less than a range, *or* satisfy a range! For 388example, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9` 389until `2.0.0`, so the version `1.2.10` would not be greater than the 390range (because `2.0.1` satisfies, which is higher), nor less than the 391range (since `1.2.8` satisfies, which is lower), and it also does not 392satisfy the range. 393 394If you want to know if a version satisfies or does not satisfy a 395range, use the `satisfies(version, range)` function. 396 397### Coercion 398 399* `coerce(version)`: Coerces a string to semver if possible 400 401This aims to provide a very forgiving translation of a non-semver string to 402semver. It looks for the first digit in a string, and consumes all 403remaining characters which satisfy at least a partial semver (e.g., `1`, 404`1.2`, `1.2.3`) up to the max permitted length (256 characters). Longer 405versions are simply truncated (`4.6.3.9.2-alpha2` becomes `4.6.3`). All 406surrounding text is simply ignored (`v3.4 replaces v3.3.1` becomes 407`3.4.0`). Only text which lacks digits will fail coercion (`version one` 408is not valid). The maximum length for any semver component considered for 409coercion is 16 characters; longer components will be ignored 410(`10000000000000000.4.7.4` becomes `4.7.4`). The maximum value for any 411semver component is `Number.MAX_SAFE_INTEGER || (2**53 - 1)`; higher value 412components are invalid (`9999999999999999.4.7.4` is likely invalid). 413