Blame view

node_modules/bower/lib/util/semver.js 1.92 KB
2dda2e10   Administrator   generator ignore
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
  var semver = require('semver');
  var mout = require('mout');
  
  function maxSatisfying(versions, range, strictMatch) {
      var version;
      var filteredVersions;
  
      // Filter only valid versions, since semver.maxSatisfying() throws an error
      versions = versions.filter(function (version) {
          return semver.valid(version);
      });
  
      // Exact version & range match
      if (semver.valid(range)) {
          version = mout.array.find(versions, function (version) {
              return version === range;
          });
          if (version) {
              return version;
          }
      }
  
      range = typeof range === 'string' ? range.trim() : range;
  
      // When strict match is enabled give priority to non-pre-releases
      // We do this by filtering every pre-release version
      if (strictMatch) {
          filteredVersions = versions.map(function (version) {
              return !isPreRelease(version) ? version : null;
          });
  
          version = semver.maxSatisfying(filteredVersions, range);
          if (version) {
              return version;
          }
      }
  
      // Fallback to regular semver max satisfies
      return semver.maxSatisfying(versions, range);
  }
  
  function maxSatisfyingIndex(versions, range, strictMatch) {
      var version = maxSatisfying(versions, range, strictMatch);
  
      if (!version) {
          return -1;
      }
  
      return versions.indexOf(version);
  }
  
  function clean(version) {
      var parsed = semver.parse(version);
  
      if (!parsed) {
          return null;
      }
  
      // Keep builds!
      return parsed.version + (parsed.build.length ? '+' + parsed.build.join('.') : '');
  }
  
  function isPreRelease(version) {
      var parsed = semver.parse(version);
      return parsed && parsed.prerelease && parsed.prerelease.length;
  }
  
  // Export a semver like object but with our custom functions
  mout.object.mixIn(module.exports, semver, {
      maxSatisfying: maxSatisfying,
      maxSatisfyingIndex: maxSatisfyingIndex,
      clean: clean,
      valid: clean
  });