Dist-Zilla-Plugin-JSAN

 view release on metacpan or  search on metacpan

share/semver.js  view on Meta::CPAN

    case "==": return eq(v1, v2)
    case "!=": return neq(v1, v2)
    case "===": return v1 === v2
    case "!==": return v1 !== v2
    default: throw new Error("Y U NO USE VALID COMPARATOR!? "+c)
  }
}

// return v1 > v2
function num (v) {
  return v === undefined ? -1 : parseInt((v||"0").replace(/[^0-9]+/g, ''), 10)
}
function gt (v1, v2) {
  v1 = exports.parse(v1)
  v2 = exports.parse(v2)
  if (!v1 || !v2) return false

  for (var i = 1; i < 5; i ++) {
    v1[i] = num(v1[i])
    v2[i] = num(v2[i])
    if (v1[i] > v2[i]) return true
    else if (v1[i] !== v2[i]) return false
  }
  // no tag is > than any tag, or use lexicographical order.
  var tag1 = v1[5] || ""
    , tag2 = v2[5] || ""

  // kludge: null means they were equal.  falsey, and detectable.
  // embarrassingly overclever, though, I know.
  return tag1 === tag2 ? null
         : !tag1 ? true
         : !tag2 ? false
         : tag1 > tag2
}

function inc (version, release) {
  version = exports.parse(version)
  if (!version) return null

  var parsedIndexLookup =
    { 'major': 1
    , 'minor': 2
    , 'patch': 3
    , 'build': 4 }
  var incIndex = parsedIndexLookup[release]
  if (incIndex === undefined) return null

  var current = num(version[incIndex])
  version[incIndex] = current === -1 ? 1 : current + 1

  for (var i = incIndex + 1; i < 5; i ++) {
    if (num(version[i]) !== -1) version[i] = "0"
  }

  if (version[4]) version[4] = "-" + version[4]
  version[5] = ""

  return stringify(version)
}

if (module === require.main) {  // tests below

var tap = require("tap")
  , test = tap.test

tap.plan(5)

test("\ncomparison tests", function (t) {
; [ ["0.0.0", "0.0.0foo"]
  , ["0.0.1", "0.0.0"]
  , ["1.0.0", "0.9.9"]
  , ["0.10.0", "0.9.0"]
  , ["0.99.0", "0.10.0"]
  , ["2.0.0", "1.2.3"]
  , ["v0.0.0", "0.0.0foo"]
  , ["v0.0.1", "0.0.0"]
  , ["v1.0.0", "0.9.9"]
  , ["v0.10.0", "0.9.0"]
  , ["v0.99.0", "0.10.0"]
  , ["v2.0.0", "1.2.3"]
  , ["0.0.0", "v0.0.0foo"]
  , ["0.0.1", "v0.0.0"]
  , ["1.0.0", "v0.9.9"]
  , ["0.10.0", "v0.9.0"]
  , ["0.99.0", "v0.10.0"]
  , ["2.0.0", "v1.2.3"]
  , ["1.2.3", "1.2.3-asdf"]
  , ["1.2.3-4", "1.2.3"]
  , ["1.2.3-4-foo", "1.2.3"]
  , ["1.2.3-5", "1.2.3-5-foo"]
  , ["1.2.3-5", "1.2.3-4"]
  , ["1.2.3-5-foo", "1.2.3-5-Foo"]
  ].forEach(function (v) {
    var v0 = v[0]
      , v1 = v[1]
    t.ok(gt(v0, v1), "gt('"+v0+"', '"+v1+"')")
    t.ok(lt(v1, v0), "lt('"+v1+"', '"+v0+"')")
    t.ok(!gt(v1, v0), "!gt('"+v1+"', '"+v0+"')")
    t.ok(!lt(v0, v1), "!lt('"+v0+"', '"+v1+"')")
    t.ok(eq(v0, v0), "eq('"+v0+"', '"+v0+"')")
    t.ok(eq(v1, v1), "eq('"+v1+"', '"+v1+"')")
    t.ok(neq(v0, v1), "neq('"+v0+"', '"+v1+"')")
    t.ok(cmp(v1, "==", v1), "cmp('"+v1+"' == '"+v1+"')")
    t.ok(cmp(v0, ">=", v1), "cmp('"+v0+"' >= '"+v1+"')")
    t.ok(cmp(v1, "<=", v0), "cmp('"+v1+"' <= '"+v0+"')")
    t.ok(cmp(v0, "!=", v1), "cmp('"+v0+"' != '"+v1+"')")
  })
  t.end()
})

test("\nequality tests", function (t) {
; [ ["1.2.3", "v1.2.3"]
  , ["1.2.3", "=1.2.3"]
  , ["1.2.3", "v 1.2.3"]
  , ["1.2.3", "= 1.2.3"]
  , ["1.2.3", " v1.2.3"]
  , ["1.2.3", " =1.2.3"]
  , ["1.2.3", " v 1.2.3"]
  , ["1.2.3", " = 1.2.3"]
  , ["1.2.3-0", "v1.2.3-0"]
  , ["1.2.3-0", "=1.2.3-0"]
  , ["1.2.3-0", "v 1.2.3-0"]
  , ["1.2.3-0", "= 1.2.3-0"]



( run in 2.422 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )