UNPKG

1.61 kBJavaScriptView Raw
1'use strict';
2
3var semver = require('semver');
4
5//
6// Introduce semver on the module's exports so we can still use all it's
7// methods while improving and extending it.
8//
9Object.keys(semver).forEach(function introduce(method) {
10 exports[method] = semver[method];
11});
12
13/**
14 * Test if a given version number is a pre-release.
15 *
16 * @param {String} version The version number.
17 * @returns {Boolean}
18 * @api public
19 */
20exports.prerelease = function prerelease(version) {
21 var parsed = semver.parse(version);
22
23 return parsed
24 && parsed.prerelease
25 && parsed.prerelease.length;
26};
27
28/**
29 * A more versitile maxSatisfying method for semver.
30 *
31 * @param {Array} versions Array of version numbers to get the greatest from.
32 * @param {String} range The version number it should find.
33 * @param {boolean} strict Strict match.
34 * @returns {String|Undefined} Version number that matches.
35 * @api public
36 */
37exports.maxSatisfying = function maxSatisfying(versions, range, strict) {
38 //
39 // Make sure we only get valid version numbers
40 //
41 versions = versions.filter(function filter (version) {
42 return semver.valid(version);
43 });
44
45 range = typeof range === 'string'
46 ? range.trim()
47 : range;
48
49 //
50 // Exact version & range match.
51 //
52 if (semver.valid(range) && ~versions.indexOf(range)) {
53 return range;
54 }
55
56 if (strict && (!range || range === '*')) {
57 var version = semver.maxSatisfying(versions.map(function map(version) {
58 return !exports.prerelease(version) ? version : null;
59 }), range);
60
61 if (version) return version;
62 }
63
64 return semver.maxSatisfying(versions, range);
65};