1semver(1) -- The semantic versioner for npm 2=========================================== 3 4## Install 5 6```bash 7npm install 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 28You can also just load the module for the function that you care about, if 29you'd like to minimize your footprint. 30 31```js 32// load the whole API at once in a single object 33const semver = require('semver') 34 35// or just load the bits you need 36// all of them listed here, just pick and choose what you want 37 38// classes 39const SemVer = require('semver/classes/semver') 40const Comparator = require('semver/classes/comparator') 41const Range = require('semver/classes/range') 42 43// functions for working with versions 44const semverParse = require('semver/functions/parse') 45const semverValid = require('semver/functions/valid') 46const semverClean = require('semver/functions/clean') 47const semverInc = require('semver/functions/inc') 48const semverDiff = require('semver/functions/diff') 49const semverMajor = require('semver/functions/major') 50const semverMinor = require('semver/functions/minor') 51const semverPatch = require('semver/functions/patch') 52const semverPrerelease = require('semver/functions/prerelease') 53const semverCompare = require('semver/functions/compare') 54const semverRcompare = require('semver/functions/rcompare') 55const semverCompareLoose = require('semver/functions/compare-loose') 56const semverCompareBuild = require('semver/functions/compare-build') 57const semverSort = require('semver/functions/sort') 58const semverRsort = require('semver/functions/rsort') 59 60// low-level comparators between versions 61const semverGt = require('semver/functions/gt') 62const semverLt = require('semver/functions/lt') 63const semverEq = require('semver/functions/eq') 64const semverNeq = require('semver/functions/neq') 65const semverGte = require('semver/functions/gte') 66const semverLte = require('semver/functions/lte') 67const semverCmp = require('semver/functions/cmp') 68const semverCoerce = require('semver/functions/coerce') 69 70// working with ranges 71const semverSatisfies = require('semver/functions/satisfies') 72const semverMaxSatisfying = require('semver/ranges/max-satisfying') 73const semverMinSatisfying = require('semver/ranges/min-satisfying') 74const semverToComparators = require('semver/ranges/to-comparators') 75const semverMinVersion = require('semver/ranges/min-version') 76const semverValidRange = require('semver/ranges/valid') 77const semverOutside = require('semver/ranges/outside') 78const semverGtr = require('semver/ranges/gtr') 79const semverLtr = require('semver/ranges/ltr') 80const semverIntersects = require('semver/ranges/intersects') 81const simplifyRange = require('semver/ranges/simplify') 82const rangeSubset = require('semver/ranges/subset') 83``` 84 85As a command-line utility: 86 87``` 88$ semver -h 89 90A JavaScript implementation of the https://semver.org/ specification 91Copyright Isaac Z. Schlueter 92 93Usage: semver [options] <version> [<version> [...]] 94Prints valid versions sorted by SemVer precedence 95 96Options: 97-r --range <range> 98 Print versions that match the specified range. 99 100-i --increment [<level>] 101 Increment a version by the specified level. Level can 102 be one of: major, minor, patch, premajor, preminor, 103 prepatch, or prerelease. Default level is 'patch'. 104 Only one version may be specified. 105 106--preid <identifier> 107 Identifier to be used to prefix premajor, preminor, 108 prepatch or prerelease version increments. 109 110-l --loose 111 Interpret versions and ranges loosely 112 113-n <0|1> 114 This is the base to be used for the prerelease identifier. 115 116-p --include-prerelease 117 Always include prerelease versions in range matching 118 119-c --coerce 120 Coerce a string into SemVer if possible 121 (does not imply --loose) 122 123--rtl 124 Coerce version strings right to left 125 126--ltr 127 Coerce version strings left to right (default) 128 129Program exits successfully if any valid version satisfies 130all supplied ranges, and prints all satisfying versions. 131 132If no satisfying versions are found, then exits failure. 133 134Versions are printed in ascending order, so supplying 135multiple versions to the utility will just sort them. 136``` 137 138## Versions 139 140A "version" is described by the `v2.0.0` specification found at 141<https://semver.org/>. 142 143A leading `"="` or `"v"` character is stripped off and ignored. 144 145## Ranges 146 147A `version range` is a set of `comparators` which specify versions 148that satisfy the range. 149 150A `comparator` is composed of an `operator` and a `version`. The set 151of primitive `operators` is: 152 153* `<` Less than 154* `<=` Less than or equal to 155* `>` Greater than 156* `>=` Greater than or equal to 157* `=` Equal. If no operator is specified, then equality is assumed, 158 so this operator is optional, but MAY be included. 159 160For example, the comparator `>=1.2.7` would match the versions 161`1.2.7`, `1.2.8`, `2.5.3`, and `1.3.9`, but not the versions `1.2.6` 162or `1.1.0`. The comparator `>1` is equivalent to `>=2.0.0` and 163would match the versions `2.0.0` and `3.1.0`, but not the versions 164`1.0.1` or `1.1.0`. 165 166Comparators can be joined by whitespace to form a `comparator set`, 167which is satisfied by the **intersection** of all of the comparators 168it includes. 169 170A range is composed of one or more comparator sets, joined by `||`. A 171version matches a range if and only if every comparator in at least 172one of the `||`-separated comparator sets is satisfied by the version. 173 174For example, the range `>=1.2.7 <1.3.0` would match the versions 175`1.2.7`, `1.2.8`, and `1.2.99`, but not the versions `1.2.6`, `1.3.0`, 176or `1.1.0`. 177 178The range `1.2.7 || >=1.2.9 <2.0.0` would match the versions `1.2.7`, 179`1.2.9`, and `1.4.6`, but not the versions `1.2.8` or `2.0.0`. 180 181### Prerelease Tags 182 183If a version has a prerelease tag (for example, `1.2.3-alpha.3`) then 184it will only be allowed to satisfy comparator sets if at least one 185comparator with the same `[major, minor, patch]` tuple also has a 186prerelease tag. 187 188For example, the range `>1.2.3-alpha.3` would be allowed to match the 189version `1.2.3-alpha.7`, but it would *not* be satisfied by 190`3.4.5-alpha.9`, even though `3.4.5-alpha.9` is technically "greater 191than" `1.2.3-alpha.3` according to the SemVer sort rules. The version 192range only accepts prerelease tags on the `1.2.3` version. The 193version `3.4.5` *would* satisfy the range, because it does not have a 194prerelease flag, and `3.4.5` is greater than `1.2.3-alpha.7`. 195 196The purpose for this behavior is twofold. First, prerelease versions 197frequently are updated very quickly, and contain many breaking changes 198that are (by the author's design) not yet fit for public consumption. 199Therefore, by default, they are excluded from range matching 200semantics. 201 202Second, a user who has opted into using a prerelease version has 203clearly indicated the intent to use *that specific* set of 204alpha/beta/rc versions. By including a prerelease tag in the range, 205the user is indicating that they are aware of the risk. However, it 206is still not appropriate to assume that they have opted into taking a 207similar risk on the *next* set of prerelease versions. 208 209Note that this behavior can be suppressed (treating all prerelease 210versions as if they were normal versions, for the purpose of range 211matching) by setting the `includePrerelease` flag on the options 212object to any 213[functions](https://github.com/npm/node-semver#functions) that do 214range matching. 215 216#### Prerelease Identifiers 217 218The method `.inc` takes an additional `identifier` string argument that 219will append the value of the string as a prerelease identifier: 220 221```javascript 222semver.inc('1.2.3', 'prerelease', 'beta') 223// '1.2.4-beta.0' 224``` 225 226command-line example: 227 228```bash 229$ semver 1.2.3 -i prerelease --preid beta 2301.2.4-beta.0 231``` 232 233Which then can be used to increment further: 234 235```bash 236$ semver 1.2.4-beta.0 -i prerelease 2371.2.4-beta.1 238``` 239 240#### Prerelease Identifier Base 241 242The method `.inc` takes an optional parameter 'identifierBase' string 243that will let you let your prerelease number as zero-based or one-based. 244Set to `false` to omit the prerelease number altogether. 245If you do not specify this parameter, it will default to zero-based. 246 247```javascript 248semver.inc('1.2.3', 'prerelease', 'beta', '1') 249// '1.2.4-beta.1' 250``` 251 252```javascript 253semver.inc('1.2.3', 'prerelease', 'beta', false) 254// '1.2.4-beta' 255``` 256 257command-line example: 258 259```bash 260$ semver 1.2.3 -i prerelease --preid beta -n 1 2611.2.4-beta.1 262``` 263 264```bash 265$ semver 1.2.3 -i prerelease --preid beta -n false 2661.2.4-beta 267``` 268 269### Advanced Range Syntax 270 271Advanced range syntax desugars to primitive comparators in 272deterministic ways. 273 274Advanced ranges may be combined in the same way as primitive 275comparators using white space or `||`. 276 277#### Hyphen Ranges `X.Y.Z - A.B.C` 278 279Specifies an inclusive set. 280 281* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4` 282 283If a partial version is provided as the first version in the inclusive 284range, then the missing pieces are replaced with zeroes. 285 286* `1.2 - 2.3.4` := `>=1.2.0 <=2.3.4` 287 288If a partial version is provided as the second version in the 289inclusive range, then all versions that start with the supplied parts 290of the tuple are accepted, but nothing that would be greater than the 291provided tuple parts. 292 293* `1.2.3 - 2.3` := `>=1.2.3 <2.4.0-0` 294* `1.2.3 - 2` := `>=1.2.3 <3.0.0-0` 295 296#### X-Ranges `1.2.x` `1.X` `1.2.*` `*` 297 298Any of `X`, `x`, or `*` may be used to "stand in" for one of the 299numeric values in the `[major, minor, patch]` tuple. 300 301* `*` := `>=0.0.0` (Any non-prerelease version satisfies, unless 302 `includePrerelease` is specified, in which case any version at all 303 satisfies) 304* `1.x` := `>=1.0.0 <2.0.0-0` (Matching major version) 305* `1.2.x` := `>=1.2.0 <1.3.0-0` (Matching major and minor versions) 306 307A partial version range is treated as an X-Range, so the special 308character is in fact optional. 309 310* `""` (empty string) := `*` := `>=0.0.0` 311* `1` := `1.x.x` := `>=1.0.0 <2.0.0-0` 312* `1.2` := `1.2.x` := `>=1.2.0 <1.3.0-0` 313 314#### Tilde Ranges `~1.2.3` `~1.2` `~1` 315 316Allows patch-level changes if a minor version is specified on the 317comparator. Allows minor-level changes if not. 318 319* `~1.2.3` := `>=1.2.3 <1.(2+1).0` := `>=1.2.3 <1.3.0-0` 320* `~1.2` := `>=1.2.0 <1.(2+1).0` := `>=1.2.0 <1.3.0-0` (Same as `1.2.x`) 321* `~1` := `>=1.0.0 <(1+1).0.0` := `>=1.0.0 <2.0.0-0` (Same as `1.x`) 322* `~0.2.3` := `>=0.2.3 <0.(2+1).0` := `>=0.2.3 <0.3.0-0` 323* `~0.2` := `>=0.2.0 <0.(2+1).0` := `>=0.2.0 <0.3.0-0` (Same as `0.2.x`) 324* `~0` := `>=0.0.0 <(0+1).0.0` := `>=0.0.0 <1.0.0-0` (Same as `0.x`) 325* `~1.2.3-beta.2` := `>=1.2.3-beta.2 <1.3.0-0` Note that prereleases in 326 the `1.2.3` version will be allowed, if they are greater than or 327 equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but 328 `1.2.4-beta.2` would not, because it is a prerelease of a 329 different `[major, minor, patch]` tuple. 330 331#### Caret Ranges `^1.2.3` `^0.2.5` `^0.0.4` 332 333Allows changes that do not modify the left-most non-zero element in the 334`[major, minor, patch]` tuple. In other words, this allows patch and 335minor updates for versions `1.0.0` and above, patch updates for 336versions `0.X >=0.1.0`, and *no* updates for versions `0.0.X`. 337 338Many authors treat a `0.x` version as if the `x` were the major 339"breaking-change" indicator. 340 341Caret ranges are ideal when an author may make breaking changes 342between `0.2.4` and `0.3.0` releases, which is a common practice. 343However, it presumes that there will *not* be breaking changes between 344`0.2.4` and `0.2.5`. It allows for changes that are presumed to be 345additive (but non-breaking), according to commonly observed practices. 346 347* `^1.2.3` := `>=1.2.3 <2.0.0-0` 348* `^0.2.3` := `>=0.2.3 <0.3.0-0` 349* `^0.0.3` := `>=0.0.3 <0.0.4-0` 350* `^1.2.3-beta.2` := `>=1.2.3-beta.2 <2.0.0-0` Note that prereleases in 351 the `1.2.3` version will be allowed, if they are greater than or 352 equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but 353 `1.2.4-beta.2` would not, because it is a prerelease of a 354 different `[major, minor, patch]` tuple. 355* `^0.0.3-beta` := `>=0.0.3-beta <0.0.4-0` Note that prereleases in the 356 `0.0.3` version *only* will be allowed, if they are greater than or 357 equal to `beta`. So, `0.0.3-pr.2` would be allowed. 358 359When parsing caret ranges, a missing `patch` value desugars to the 360number `0`, but will allow flexibility within that value, even if the 361major and minor versions are both `0`. 362 363* `^1.2.x` := `>=1.2.0 <2.0.0-0` 364* `^0.0.x` := `>=0.0.0 <0.1.0-0` 365* `^0.0` := `>=0.0.0 <0.1.0-0` 366 367A missing `minor` and `patch` values will desugar to zero, but also 368allow flexibility within those values, even if the major version is 369zero. 370 371* `^1.x` := `>=1.0.0 <2.0.0-0` 372* `^0.x` := `>=0.0.0 <1.0.0-0` 373 374### Range Grammar 375 376Putting all this together, here is a Backus-Naur grammar for ranges, 377for the benefit of parser authors: 378 379```bnf 380range-set ::= range ( logical-or range ) * 381logical-or ::= ( ' ' ) * '||' ( ' ' ) * 382range ::= hyphen | simple ( ' ' simple ) * | '' 383hyphen ::= partial ' - ' partial 384simple ::= primitive | partial | tilde | caret 385primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial 386partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? 387xr ::= 'x' | 'X' | '*' | nr 388nr ::= '0' | ['1'-'9'] ( ['0'-'9'] ) * 389tilde ::= '~' partial 390caret ::= '^' partial 391qualifier ::= ( '-' pre )? ( '+' build )? 392pre ::= parts 393build ::= parts 394parts ::= part ( '.' part ) * 395part ::= nr | [-0-9A-Za-z]+ 396``` 397 398## Functions 399 400All methods and classes take a final `options` object argument. All 401options in this object are `false` by default. The options supported 402are: 403 404- `loose` Be more forgiving about not-quite-valid semver strings. 405 (Any resulting output will always be 100% strict compliant, of 406 course.) For backwards compatibility reasons, if the `options` 407 argument is a boolean value instead of an object, it is interpreted 408 to be the `loose` param. 409- `includePrerelease` Set to suppress the [default 410 behavior](https://github.com/npm/node-semver#prerelease-tags) of 411 excluding prerelease tagged versions from ranges unless they are 412 explicitly opted into. 413 414Strict-mode Comparators and Ranges will be strict about the SemVer 415strings that they parse. 416 417* `valid(v)`: Return the parsed version, or null if it's not valid. 418* `inc(v, release)`: Return the version incremented by the release 419 type (`major`, `premajor`, `minor`, `preminor`, `patch`, 420 `prepatch`, or `prerelease`), or null if it's not valid 421 * `premajor` in one call will bump the version up to the next major 422 version and down to a prerelease of that major version. 423 `preminor`, and `prepatch` work the same way. 424 * If called from a non-prerelease version, the `prerelease` will work the 425 same as `prepatch`. It increments the patch version, then makes a 426 prerelease. If the input version is already a prerelease it simply 427 increments it. 428* `prerelease(v)`: Returns an array of prerelease components, or null 429 if none exist. Example: `prerelease('1.2.3-alpha.1') -> ['alpha', 1]` 430* `major(v)`: Return the major version number. 431* `minor(v)`: Return the minor version number. 432* `patch(v)`: Return the patch version number. 433* `intersects(r1, r2, loose)`: Return true if the two supplied ranges 434 or comparators intersect. 435* `parse(v)`: Attempt to parse a string as a semantic version, returning either 436 a `SemVer` object or `null`. 437 438### Comparison 439 440* `gt(v1, v2)`: `v1 > v2` 441* `gte(v1, v2)`: `v1 >= v2` 442* `lt(v1, v2)`: `v1 < v2` 443* `lte(v1, v2)`: `v1 <= v2` 444* `eq(v1, v2)`: `v1 == v2` This is true if they're logically equivalent, 445 even if they're not the exact same string. You already know how to 446 compare strings. 447* `neq(v1, v2)`: `v1 != v2` The opposite of `eq`. 448* `cmp(v1, comparator, v2)`: Pass in a comparison string, and it'll call 449 the corresponding function above. `"==="` and `"!=="` do simple 450 string comparison, but are included for completeness. Throws if an 451 invalid comparison string is provided. 452* `compare(v1, v2)`: Return `0` if `v1 == v2`, or `1` if `v1` is greater, or `-1` if 453 `v2` is greater. Sorts in ascending order if passed to `Array.sort()`. 454* `rcompare(v1, v2)`: The reverse of compare. Sorts an array of versions 455 in descending order when passed to `Array.sort()`. 456* `compareBuild(v1, v2)`: The same as `compare` but considers `build` when two versions 457 are equal. Sorts in ascending order if passed to `Array.sort()`. 458 `v2` is greater. Sorts in ascending order if passed to `Array.sort()`. 459* `diff(v1, v2)`: Returns difference between two versions by the release type 460 (`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`), 461 or null if the versions are the same. 462 463### Comparators 464 465* `intersects(comparator)`: Return true if the comparators intersect 466 467### Ranges 468 469* `validRange(range)`: Return the valid range or null if it's not valid 470* `satisfies(version, range)`: Return true if the version satisfies the 471 range. 472* `maxSatisfying(versions, range)`: Return the highest version in the list 473 that satisfies the range, or `null` if none of them do. 474* `minSatisfying(versions, range)`: Return the lowest version in the list 475 that satisfies the range, or `null` if none of them do. 476* `minVersion(range)`: Return the lowest version that can possibly match 477 the given range. 478* `gtr(version, range)`: Return `true` if version is greater than all the 479 versions possible in the range. 480* `ltr(version, range)`: Return `true` if version is less than all the 481 versions possible in the range. 482* `outside(version, range, hilo)`: Return true if the version is outside 483 the bounds of the range in either the high or low direction. The 484 `hilo` argument must be either the string `'>'` or `'<'`. (This is 485 the function called by `gtr` and `ltr`.) 486* `intersects(range)`: Return true if any of the ranges comparators intersect 487* `simplifyRange(versions, range)`: Return a "simplified" range that 488 matches the same items in `versions` list as the range specified. Note 489 that it does *not* guarantee that it would match the same versions in all 490 cases, only for the set of versions provided. This is useful when 491 generating ranges by joining together multiple versions with `||` 492 programmatically, to provide the user with something a bit more 493 ergonomic. If the provided range is shorter in string-length than the 494 generated range, then that is returned. 495* `subset(subRange, superRange)`: Return `true` if the `subRange` range is 496 entirely contained by the `superRange` range. 497 498Note that, since ranges may be non-contiguous, a version might not be 499greater than a range, less than a range, *or* satisfy a range! For 500example, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9` 501until `2.0.0`, so the version `1.2.10` would not be greater than the 502range (because `2.0.1` satisfies, which is higher), nor less than the 503range (since `1.2.8` satisfies, which is lower), and it also does not 504satisfy the range. 505 506If you want to know if a version satisfies or does not satisfy a 507range, use the `satisfies(version, range)` function. 508 509### Coercion 510 511* `coerce(version, options)`: Coerces a string to semver if possible 512 513This aims to provide a very forgiving translation of a non-semver string to 514semver. It looks for the first digit in a string, and consumes all 515remaining characters which satisfy at least a partial semver (e.g., `1`, 516`1.2`, `1.2.3`) up to the max permitted length (256 characters). Longer 517versions are simply truncated (`4.6.3.9.2-alpha2` becomes `4.6.3`). All 518surrounding text is simply ignored (`v3.4 replaces v3.3.1` becomes 519`3.4.0`). Only text which lacks digits will fail coercion (`version one` 520is not valid). The maximum length for any semver component considered for 521coercion is 16 characters; longer components will be ignored 522(`10000000000000000.4.7.4` becomes `4.7.4`). The maximum value for any 523semver component is `Number.MAX_SAFE_INTEGER || (2**53 - 1)`; higher value 524components are invalid (`9999999999999999.4.7.4` is likely invalid). 525 526If the `options.rtl` flag is set, then `coerce` will return the right-most 527coercible tuple that does not share an ending index with a longer coercible 528tuple. For example, `1.2.3.4` will return `2.3.4` in rtl mode, not 529`4.0.0`. `1.2.3/4` will return `4.0.0`, because the `4` is not a part of 530any other overlapping SemVer tuple. 531 532If the `options.includePrerelease` flag is set, then the `coerce` result will contain 533prerelease and build parts of a version. For example, `1.2.3.4-rc.1+rev.2` 534will preserve prerelease `rc.1` and build `rev.2` in the result. 535 536### Clean 537 538* `clean(version)`: Clean a string to be a valid semver if possible 539 540This will return a cleaned and trimmed semver version. If the provided 541version is not valid a null will be returned. This does not work for 542ranges. 543 544ex. 545* `s.clean(' = v 2.1.5foo')`: `null` 546* `s.clean(' = v 2.1.5foo', { loose: true })`: `'2.1.5-foo'` 547* `s.clean(' = v 2.1.5-foo')`: `null` 548* `s.clean(' = v 2.1.5-foo', { loose: true })`: `'2.1.5-foo'` 549* `s.clean('=v2.1.5')`: `'2.1.5'` 550* `s.clean(' =v2.1.5')`: `'2.1.5'` 551* `s.clean(' 2.1.5 ')`: `'2.1.5'` 552* `s.clean('~1.0.0')`: `null` 553 554## Constants 555 556As a convenience, helper constants are exported to provide information about what `node-semver` supports: 557 558### `RELEASE_TYPES` 559 560- major 561- premajor 562- minor 563- preminor 564- patch 565- prepatch 566- prerelease 567 568``` 569const semver = require('semver'); 570 571if (semver.RELEASE_TYPES.includes(arbitraryUserInput)) { 572 console.log('This is a valid release type!'); 573} else { 574 console.warn('This is NOT a valid release type!'); 575} 576``` 577 578### `SEMVER_SPEC_VERSION` 579 5802.0.0 581 582``` 583const semver = require('semver'); 584 585console.log('We are currently using the semver specification version:', semver.SEMVER_SPEC_VERSION); 586``` 587 588## Exported Modules 589 590<!-- 591TODO: Make sure that all of these items are documented (classes aren't, 592eg), and then pull the module name into the documentation for that specific 593thing. 594--> 595 596You may pull in just the part of this semver utility that you need, if you 597are sensitive to packing and tree-shaking concerns. The main 598`require('semver')` export uses getter functions to lazily load the parts 599of the API that are used. 600 601The following modules are available: 602 603* `require('semver')` 604* `require('semver/classes')` 605* `require('semver/classes/comparator')` 606* `require('semver/classes/range')` 607* `require('semver/classes/semver')` 608* `require('semver/functions/clean')` 609* `require('semver/functions/cmp')` 610* `require('semver/functions/coerce')` 611* `require('semver/functions/compare')` 612* `require('semver/functions/compare-build')` 613* `require('semver/functions/compare-loose')` 614* `require('semver/functions/diff')` 615* `require('semver/functions/eq')` 616* `require('semver/functions/gt')` 617* `require('semver/functions/gte')` 618* `require('semver/functions/inc')` 619* `require('semver/functions/lt')` 620* `require('semver/functions/lte')` 621* `require('semver/functions/major')` 622* `require('semver/functions/minor')` 623* `require('semver/functions/neq')` 624* `require('semver/functions/parse')` 625* `require('semver/functions/patch')` 626* `require('semver/functions/prerelease')` 627* `require('semver/functions/rcompare')` 628* `require('semver/functions/rsort')` 629* `require('semver/functions/satisfies')` 630* `require('semver/functions/sort')` 631* `require('semver/functions/valid')` 632* `require('semver/ranges/gtr')` 633* `require('semver/ranges/intersects')` 634* `require('semver/ranges/ltr')` 635* `require('semver/ranges/max-satisfying')` 636* `require('semver/ranges/min-satisfying')` 637* `require('semver/ranges/min-version')` 638* `require('semver/ranges/outside')` 639* `require('semver/ranges/to-comparators')` 640* `require('semver/ranges/valid')` 641