From 3cc5a94c15f5874b7c12f7cc5cf03f8f07b476ba Mon Sep 17 00:00:00 2001 From: ekmartin Date: Mon, 7 Dec 2015 19:58:14 +0100 Subject: [PATCH] Add prerelase(v) that returns prerelease components, fixes #133 --- README.md | 2 ++ semver.js | 6 ++++++ test/prerelease.js | 26 ++++++++++++++++++++++++++ 3 files changed, 34 insertions(+) create mode 100644 test/prerelease.js diff --git a/README.md b/README.md index ab6a1559..27b044ec 100644 --- a/README.md +++ b/README.md @@ -289,6 +289,8 @@ strings that they parse. same as `prepatch`. It increments the patch version, then makes a prerelease. If the input version is already a prerelease it simply increments it. +* `prerelease(v)`: Returns an array of prerelease components, or null + if none exist. Example: `prerelease('1.2.3-alpha.1') -> ['alpha', 1]` * `major(v)`: Return the major version number. * `minor(v)`: Return the minor version number. * `patch(v)`: Return the patch version number. diff --git a/semver.js b/semver.js index d9d8713b..b2d7298c 100644 --- a/semver.js +++ b/semver.js @@ -1186,3 +1186,9 @@ function outside(version, range, hilo, loose) { } return true; } + +exports.prerelease = prerelease; +function prerelease(version, loose) { + var parsed = parse(version, loose); + return (parsed && parsed.prerelease.length) ? parsed.prerelease : null; +} diff --git a/test/prerelease.js b/test/prerelease.js new file mode 100644 index 00000000..a6df7a63 --- /dev/null +++ b/test/prerelease.js @@ -0,0 +1,26 @@ +var tap = require('tap'); +var test = tap.test; +var semver = require('../semver.js'); +var prerelease = semver.prerelease; + +test('\nprerelease', function(t) { + // [prereleaseParts, version, loose] + [ + [['alpha', 1], '1.2.2-alpha.1'], + [[1], '0.6.1-1'], + [['beta', 2], '1.0.0-beta.2'], + [['pre'], 'v0.5.4-pre'], + [['alpha', 1], '1.2.2-alpha.1', false], + [['beta'], '0.6.1beta', true], + [null, '1.0.0', true], + [null, '~2.0.0-alpha.1', false], + [null, 'invalid version'], + ].forEach(function(tuple) { + var expected = tuple[0]; + var version = tuple[1]; + var loose = tuple[2]; + var msg = 'prerelease(' + version + ')'; + t.same(prerelease(version, loose), expected, msg); + }); + t.end(); +});