Skip to content

Instantly share code, notes, and snippets.

@fionnachan
Created October 10, 2018 13:58
Show Gist options
  • Save fionnachan/13ce16aaa3bf04276aaf76c4bc288178 to your computer and use it in GitHub Desktop.
Save fionnachan/13ce16aaa3bf04276aaf76c4bc288178 to your computer and use it in GitHub Desktop.
Check Semantic Versioning 2nd attempt
const correctSemverRange = (ver, range) => {
const shouldMatch = {
'^': [['=', '>', ''], ['=', '=', '>=']],
'~': [['=', '=', '>=']],
'default': [['=', '=', '=']]
};
const rangeSymbol = (isNaN(parseInt(range.substring(0, 1)))) ? range.substring(0, 1) : 'default';
const verNumArr = ver.split('.');
let rangeNumArr = range.split('.');
let result = false;
if (rangeSymbol !== 'default') {
rangeNumArr[0] = rangeNumArr[0].substring(1);
}
const compareHelper = {
'=': (x, y) => parseInt(x) === parseInt(y),
'>': (x, y) => parseInt(x) > parseInt(y),
'>=': (x, y) => parseInt(x) >= parseInt(y),
'': (x, y) => true
}
shouldMatch[rangeSymbol].some((cond) => {
for (let i = 0, arrLength = verNumArr.length; i < arrLength; i++) {
result = compareHelper[cond[i]](verNumArr[i], rangeNumArr[i]);
if (!result) { break; }
}
return result;
});
return result;
}
correctSemverRange("1.12.4", "~1.12.0");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment