semver 7.1.1 → 7.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -25,6 +25,62 @@ semver.valid(semver.coerce('v2')) // '2.0.0'
25
25
  semver.valid(semver.coerce('42.6.7.9.3-alpha')) // '42.6.7'
26
26
  ```
27
27
 
28
+ You can also just load the module for the function that you care about, if
29
+ you'd like to minimize your footprint.
30
+
31
+ ```js
32
+ // load the whole API at once in a single object
33
+ const 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
39
+ const SemVer = require('semver/classes/semver')
40
+ const Comparator = require('semver/classes/comparator')
41
+ const Range = require('semver/classes/range')
42
+
43
+ // functions for working with versions
44
+ const semverParse = require('semver/functions/parse')
45
+ const semverValid = require('semver/functions/valid')
46
+ const semverClean = require('semver/functions/clean')
47
+ const semverInc = require('semver/functions/inc')
48
+ const semverDiff = require('semver/functions/diff')
49
+ const semverMajor = require('semver/functions/major')
50
+ const semverMinor = require('semver/functions/minor')
51
+ const semverPatch = require('semver/functions/patch')
52
+ const semverPrerelease = require('semver/functions/prerelease')
53
+ const semverCompare = require('semver/functions/compare')
54
+ const semverRcompare = require('semver/functions/rcompare')
55
+ const semverCompareLoose = require('semver/functions/compare-loose')
56
+ const semverCompareBuild = require('semver/functions/compare-build')
57
+ const semverSort = require('semver/functions/sort')
58
+ const semverRsort = require('semver/functions/rsort')
59
+
60
+ // low-level comparators between versions
61
+ const semverGt = require('semver/functions/gt')
62
+ const semverLt = require('semver/functions/lt')
63
+ const semverEq = require('semver/functions/eq')
64
+ const semverNeq = require('semver/functions/neq')
65
+ const semverGte = require('semver/functions/gte')
66
+ const semverLte = require('semver/functions/lte')
67
+ const semverCmp = require('semver/functions/cmp')
68
+ const semverCoerce = require('semver/functions/coerce')
69
+
70
+ // working with ranges
71
+ const semverSatisfies = require('semver/functions/satisfies')
72
+ const semverMaxSatisfying = require('semver/ranges/max-satisfying')
73
+ const semverMinSatisfying = require('semver/ranges/min-satisfying')
74
+ const semverToComparators = require('semver/ranges/to-comparators')
75
+ const semverMinVersion = require('semver/ranges/min-version')
76
+ const semverValidRange = require('semver/ranges/valid')
77
+ const semverOutside = require('semver/ranges/outside')
78
+ const semverGtr = require('semver/ranges/gtr')
79
+ const semverLtr = require('semver/ranges/ltr')
80
+ const semverIntersects = require('semver/ranges/intersects')
81
+ const simplifyRange = require('semver/ranges/simplify')
82
+ ```
83
+
28
84
  As a command-line utility:
29
85
 
30
86
  ```
@@ -391,6 +447,14 @@ strings that they parse.
391
447
  `hilo` argument must be either the string `'>'` or `'<'`. (This is
392
448
  the function called by `gtr` and `ltr`.)
393
449
  * `intersects(range)`: Return true if any of the ranges comparators intersect
450
+ * `simplifyRange(versions, range)`: Return a "simplified" range that
451
+ matches the same items in `versions` list as the range specified. Note
452
+ that it does *not* guarantee that it would match the same versions in all
453
+ cases, only for the set of versions provided. This is useful when
454
+ generating ranges by joining together multiple versions with `||`
455
+ programmatically, to provide the user with something a bit more
456
+ ergonomic. If the provided range is shorter in string-length than the
457
+ generated range, then that is returned.
394
458
 
395
459
  Note that, since ranges may be non-contiguous, a version might not be
396
460
  greater than a range, less than a range, *or* satisfy a range! For
package/functions/diff.js CHANGED
@@ -7,11 +7,9 @@ const diff = (version1, version2) => {
7
7
  } else {
8
8
  const v1 = parse(version1)
9
9
  const v2 = parse(version2)
10
- let prefix = ''
11
- if (v1.prerelease.length || v2.prerelease.length) {
12
- prefix = 'pre'
13
- var defaultResult = 'prerelease'
14
- }
10
+ const hasPre = v1.prerelease.length || v2.prerelease.length
11
+ const prefix = hasPre ? 'pre' : ''
12
+ const defaultResult = hasPre ? 'prerelease' : ''
15
13
  for (const key in v1) {
16
14
  if (key === 'major' || key === 'minor' || key === 'patch') {
17
15
  if (v1[key] !== v2[key]) {
package/index.js CHANGED
@@ -1,64 +1,47 @@
1
- const lrCache = {}
2
- const lazyRequire = (path, subkey) => {
3
- const module = lrCache[path] || (lrCache[path] = require(path))
4
- return subkey ? module[subkey] : module
1
+ // just pre-load all the stuff that index.js lazily exports
2
+ const internalRe = require('./internal/re')
3
+ module.exports = {
4
+ re: internalRe.re,
5
+ src: internalRe.src,
6
+ tokens: internalRe.t,
7
+ SEMVER_SPEC_VERSION: require('./internal/constants').SEMVER_SPEC_VERSION,
8
+ SemVer: require('./classes/semver'),
9
+ compareIdentifiers: require('./internal/identifiers').compareIdentifiers,
10
+ rcompareIdentifiers: require('./internal/identifiers').rcompareIdentifiers,
11
+ parse: require('./functions/parse'),
12
+ valid: require('./functions/valid'),
13
+ clean: require('./functions/clean'),
14
+ inc: require('./functions/inc'),
15
+ diff: require('./functions/diff'),
16
+ major: require('./functions/major'),
17
+ minor: require('./functions/minor'),
18
+ patch: require('./functions/patch'),
19
+ prerelease: require('./functions/prerelease'),
20
+ compare: require('./functions/compare'),
21
+ rcompare: require('./functions/rcompare'),
22
+ compareLoose: require('./functions/compare-loose'),
23
+ compareBuild: require('./functions/compare-build'),
24
+ sort: require('./functions/sort'),
25
+ rsort: require('./functions/rsort'),
26
+ gt: require('./functions/gt'),
27
+ lt: require('./functions/lt'),
28
+ eq: require('./functions/eq'),
29
+ neq: require('./functions/neq'),
30
+ gte: require('./functions/gte'),
31
+ lte: require('./functions/lte'),
32
+ cmp: require('./functions/cmp'),
33
+ coerce: require('./functions/coerce'),
34
+ Comparator: require('./classes/comparator'),
35
+ Range: require('./classes/range'),
36
+ satisfies: require('./functions/satisfies'),
37
+ toComparators: require('./ranges/to-comparators'),
38
+ maxSatisfying: require('./ranges/max-satisfying'),
39
+ minSatisfying: require('./ranges/min-satisfying'),
40
+ minVersion: require('./ranges/min-version'),
41
+ validRange: require('./ranges/valid'),
42
+ outside: require('./ranges/outside'),
43
+ gtr: require('./ranges/gtr'),
44
+ ltr: require('./ranges/ltr'),
45
+ intersects: require('./ranges/intersects'),
46
+ simplifyRange: require('./ranges/simplify'),
5
47
  }
6
-
7
- const lazyExport = (key, path, subkey) => {
8
- Object.defineProperty(exports, key, {
9
- get: () => {
10
- const res = lazyRequire(path, subkey)
11
- Object.defineProperty(exports, key, {
12
- value: res,
13
- enumerable: true,
14
- configurable: true
15
- })
16
- return res
17
- },
18
- configurable: true,
19
- enumerable: true
20
- })
21
- }
22
-
23
- lazyExport('re', './internal/re', 're')
24
- lazyExport('src', './internal/re', 'src')
25
- lazyExport('tokens', './internal/re', 't')
26
- lazyExport('SEMVER_SPEC_VERSION', './internal/constants', 'SEMVER_SPEC_VERSION')
27
- lazyExport('SemVer', './classes/semver')
28
- lazyExport('compareIdentifiers', './internal/identifiers', 'compareIdentifiers')
29
- lazyExport('rcompareIdentifiers', './internal/identifiers', 'rcompareIdentifiers')
30
- lazyExport('parse', './functions/parse')
31
- lazyExport('valid', './functions/valid')
32
- lazyExport('clean', './functions/clean')
33
- lazyExport('inc', './functions/inc')
34
- lazyExport('diff', './functions/diff')
35
- lazyExport('major', './functions/major')
36
- lazyExport('minor', './functions/minor')
37
- lazyExport('patch', './functions/patch')
38
- lazyExport('prerelease', './functions/prerelease')
39
- lazyExport('compare', './functions/compare')
40
- lazyExport('rcompare', './functions/rcompare')
41
- lazyExport('compareLoose', './functions/compare-loose')
42
- lazyExport('compareBuild', './functions/compare-build')
43
- lazyExport('sort', './functions/sort')
44
- lazyExport('rsort', './functions/rsort')
45
- lazyExport('gt', './functions/gt')
46
- lazyExport('lt', './functions/lt')
47
- lazyExport('eq', './functions/eq')
48
- lazyExport('neq', './functions/neq')
49
- lazyExport('gte', './functions/gte')
50
- lazyExport('lte', './functions/lte')
51
- lazyExport('cmp', './functions/cmp')
52
- lazyExport('coerce', './functions/coerce')
53
- lazyExport('Comparator', './classes/comparator')
54
- lazyExport('Range', './classes/range')
55
- lazyExport('satisfies', './functions/satisfies')
56
- lazyExport('toComparators', './ranges/to-comparators')
57
- lazyExport('maxSatisfying', './ranges/max-satisfying')
58
- lazyExport('minSatisfying', './ranges/min-satisfying')
59
- lazyExport('minVersion', './ranges/min-version')
60
- lazyExport('validRange', './ranges/valid')
61
- lazyExport('outside', './ranges/outside')
62
- lazyExport('gtr', './ranges/gtr')
63
- lazyExport('ltr', './ranges/ltr')
64
- lazyExport('intersects', './ranges/intersects')
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "semver",
3
- "version": "7.1.1",
3
+ "version": "7.2.1",
4
4
  "description": "The semantic version parser used by npm.",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -19,12 +19,12 @@
19
19
  "semver": "./bin/semver.js"
20
20
  },
21
21
  "files": [
22
- "bin",
22
+ "bin/**/*.js",
23
23
  "range.bnf",
24
- "classes",
25
- "functions",
26
- "internal",
27
- "ranges",
24
+ "classes/**/*.js",
25
+ "functions/**/*.js",
26
+ "internal/**/*.js",
27
+ "ranges/**/*.js",
28
28
  "index.js",
29
29
  "preload.js"
30
30
  ],
package/preload.js CHANGED
@@ -1,46 +1,2 @@
1
- // just pre-load all the stuff that index.js lazily exports
2
- const internalRe = require('./internal/re')
3
- module.exports = {
4
- re: internalRe.re,
5
- src: internalRe.src,
6
- tokens: internalRe.t,
7
- SEMVER_SPEC_VERSION: require('./internal/constants').SEMVER_SPEC_VERSION,
8
- SemVer: require('./classes/semver'),
9
- compareIdentifiers: require('./internal/identifiers').compareIdentifiers,
10
- rcompareIdentifiers: require('./internal/identifiers').rcompareIdentifiers,
11
- parse: require('./functions/parse'),
12
- valid: require('./functions/valid'),
13
- clean: require('./functions/clean'),
14
- inc: require('./functions/inc'),
15
- diff: require('./functions/diff'),
16
- major: require('./functions/major'),
17
- minor: require('./functions/minor'),
18
- patch: require('./functions/patch'),
19
- prerelease: require('./functions/prerelease'),
20
- compare: require('./functions/compare'),
21
- rcompare: require('./functions/rcompare'),
22
- compareLoose: require('./functions/compare-loose'),
23
- compareBuild: require('./functions/compare-build'),
24
- sort: require('./functions/sort'),
25
- rsort: require('./functions/rsort'),
26
- gt: require('./functions/gt'),
27
- lt: require('./functions/lt'),
28
- eq: require('./functions/eq'),
29
- neq: require('./functions/neq'),
30
- gte: require('./functions/gte'),
31
- lte: require('./functions/lte'),
32
- cmp: require('./functions/cmp'),
33
- coerce: require('./functions/coerce'),
34
- Comparator: require('./classes/comparator'),
35
- Range: require('./classes/range'),
36
- satisfies: require('./functions/satisfies'),
37
- toComparators: require('./ranges/to-comparators'),
38
- maxSatisfying: require('./ranges/max-satisfying'),
39
- minSatisfying: require('./ranges/min-satisfying'),
40
- minVersion: require('./ranges/min-version'),
41
- validRange: require('./ranges/valid'),
42
- outside: require('./ranges/outside'),
43
- gtr: require('./ranges/gtr'),
44
- ltr: require('./ranges/ltr'),
45
- intersects: require('./ranges/intersects'),
46
- }
1
+ // XXX remove in v8 or beyond
2
+ module.exports = require('./index.js')
@@ -0,0 +1,44 @@
1
+ // given a set of versions and a range, create a "simplified" range
2
+ // that includes the same versions that the original range does
3
+ // If the original range is shorter than the simplified one, return that.
4
+ const satisfies = require('../functions/satisfies.js')
5
+ const compare = require('../functions/compare.js')
6
+ module.exports = (versions, range, options) => {
7
+ const set = []
8
+ let min = null
9
+ let prev = null
10
+ const v = versions.sort((a, b) => compare(a, b, options))
11
+ for (const version of v) {
12
+ const included = satisfies(version, range, options)
13
+ if (included) {
14
+ prev = version
15
+ if (!min)
16
+ min = version
17
+ } else {
18
+ if (prev) {
19
+ set.push([min, prev])
20
+ }
21
+ prev = null
22
+ min = null
23
+ }
24
+ }
25
+ if (min)
26
+ set.push([min, null])
27
+
28
+ const ranges = []
29
+ for (const [min, max] of set) {
30
+ if (min === max)
31
+ ranges.push(min)
32
+ else if (!max && min === v[0])
33
+ ranges.push('*')
34
+ else if (!max)
35
+ ranges.push(`>=${min}`)
36
+ else if (min === v[0])
37
+ ranges.push(`<=${max}`)
38
+ else
39
+ ranges.push(`${min} - ${max}`)
40
+ }
41
+ const simplified = ranges.join(' || ')
42
+ const original = typeof range.raw === 'string' ? range.raw : String(range)
43
+ return simplified.length < original.length ? simplified : range
44
+ }