Skip to content

Commit 93a9d8a

Browse files
Hypercubedisaacs
authored andcommitted
Added functions to extract major, minor, patch version
1 parent d2806e6 commit 93a9d8a

File tree

3 files changed

+90
-0
lines changed

3 files changed

+90
-0
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,9 @@ strings that they parse.
248248
same as `prepatch`. It increments the patch version, then makes a
249249
prerelease. If the input version is already a prerelease it simply
250250
increments it.
251+
* `major(v)`: Return the major version number.
252+
* `minor(v)`: Return the minor version number.
253+
* `patch(v)`: Return the patch version number.
251254

252255
### Comparison
253256

semver.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -515,6 +515,21 @@ function rcompareIdentifiers(a, b) {
515515
return compareIdentifiers(b, a);
516516
}
517517

518+
exports.major = major;
519+
function major(a, loose) {
520+
return new SemVer(a, loose).major;
521+
}
522+
523+
exports.minor = minor;
524+
function minor(a, loose) {
525+
return new SemVer(a, loose).minor;
526+
}
527+
528+
exports.patch = patch;
529+
function patch(a, loose) {
530+
return new SemVer(a, loose).patch;
531+
}
532+
518533
exports.compare = compare;
519534
function compare(a, b, loose) {
520535
return new SemVer(a, loose).compare(b);

test/majorMinorPatch.js

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
var tap = require('tap');
2+
var test = tap.test;
3+
var semver = require('../semver.js');
4+
5+
test('\nmajor tests', function(t) {
6+
// [range, version]
7+
// Version should be detectable despite extra characters
8+
[
9+
['1.2.3', 1],
10+
[' 1.2.3 ', 1],
11+
[' 2.2.3-4 ', 2],
12+
[' 3.2.3-pre ', 3],
13+
['v5.2.3', 5],
14+
[' v8.2.3 ', 8],
15+
['\t13.2.3', 13],
16+
['=21.2.3', 21, true],
17+
['v=34.2.3', 34, true]
18+
].forEach(function(tuple) {
19+
var range = tuple[0];
20+
var version = tuple[1];
21+
var loose = tuple[2] || false;
22+
var msg = 'major(' + range + ') = ' + version;
23+
t.equal(semver.major(range, loose), version, msg);
24+
});
25+
t.end();
26+
});
27+
28+
test('\nminor tests', function(t) {
29+
// [range, version]
30+
// Version should be detectable despite extra characters
31+
[
32+
['1.1.3', 1],
33+
[' 1.1.3 ', 1],
34+
[' 1.2.3-4 ', 2],
35+
[' 1.3.3-pre ', 3],
36+
['v1.5.3', 5],
37+
[' v1.8.3 ', 8],
38+
['\t1.13.3', 13],
39+
['=1.21.3', 21, true],
40+
['v=1.34.3', 34, true]
41+
].forEach(function(tuple) {
42+
var range = tuple[0];
43+
var version = tuple[1];
44+
var loose = tuple[2] || false;
45+
var msg = 'minor(' + range + ') = ' + version;
46+
t.equal(semver.minor(range, loose), version, msg);
47+
});
48+
t.end();
49+
});
50+
51+
test('\npatch tests', function(t) {
52+
// [range, version]
53+
// Version should be detectable despite extra characters
54+
[
55+
['1.2.1', 1],
56+
[' 1.2.1 ', 1],
57+
[' 1.2.2-4 ', 2],
58+
[' 1.2.3-pre ', 3],
59+
['v1.2.5', 5],
60+
[' v1.2.8 ', 8],
61+
['\t1.2.13', 13],
62+
['=1.2.21', 21, true],
63+
['v=1.2.34', 34, true]
64+
].forEach(function(tuple) {
65+
var range = tuple[0];
66+
var version = tuple[1];
67+
var loose = tuple[2] || false;
68+
var msg = 'patch(' + range + ') = ' + version;
69+
t.equal(semver.patch(range, loose), version, msg);
70+
});
71+
t.end();
72+
});

0 commit comments

Comments
 (0)