Skip to content

Instantly share code, notes, and snippets.

@DavidWells
Created November 1, 2019 18:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DavidWells/8be947f2beb4de48e7247e48fd547dbf to your computer and use it in GitHub Desktop.
Save DavidWells/8be947f2beb4de48e7247e48fd547dbf to your computer and use it in GitHub Desktop.
// NUM . NUM . NUM -beta.3.4 (optional) +build.meta.data (ignore)
var SEMVER = /^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(-[\da-z-]+(?:\.[\da-z-]+)*)?(?:\+[\da-z-]+(?:\.[\da-z-]+)*)?$/i
var SIMPLE_NUMBER = /^(0|[1-9][0-9]*)$/
function semverCmp(ver1, ver2) {
if (ver1 === ver2) return 0
var match1 = ver1.match(SEMVER), match2 = ver2.match(SEMVER)
if (!match1) return match2 ? 1 : 0
if (!match2) return -1
for (var i = 1; i <= 3; i++) {
var num1 = +match1[i], num2 = +match2[i]
if (num1 < num2) return -1
if (num1 > num2) return 1
}
if (!match1[4]) return match2[4] ? 1 : 0
if (!match2[4]) return -1
var preRels1 = match1[4].slice(1).split('.'), preRels2 = match2[4].slice(1).split('.')
for (i = 0; i < Math.max(preRels1.length, preRels2.length); i++) {
var preRel1 = SIMPLE_NUMBER.test(preRels1[i]) ? +preRels1[i] : preRels1[i]
var preRel2 = SIMPLE_NUMBER.test(preRels2[i]) ? +preRels2[i] : preRels2[i]
if (i >= preRels1.length || (typeof preRel2 == 'string' && typeof preRel1 == 'number')) return -1
if (i >= preRels2.length || (typeof preRel1 == 'string' && typeof preRel2 == 'number')) return 1
if (preRel1 < preRel2) return -1
if (preRel1 > preRel2) return 1
}
return 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment