UNPKG

@fto-consult/node-utils

Version:

Bibliothèque d'outils pour application nodeJS

56 lines (47 loc) • 1.57 kB
/*** compare two npm packages versions @param {string} current, current version @param {string} other, other version @param {options} options object : @return {int}, if 0 then versions are equals, if -1 then current are less than other if 1 then current are greater than other */ module.exports = function compareNPMVersions(v1, v2, options) { v1 = typeof v1 =="string" && v1 || ''; v2 = typeof v2 =="string" && v2 || ""; var lexicographical = options && options.lexicographical, zeroExtend = options && options.zeroExtend, v1parts = v1.split('.'), v2parts = v2.split('.'); function isValidPart(x) { return (lexicographical ? /^\d+[A-Za-z]*$/ : /^\d+$/).test(x); } if (!v1parts.every(isValidPart) || !v2parts.every(isValidPart)) { return NaN; } if (zeroExtend) { while (v1parts.length < v2parts.length) v1parts.push("0"); while (v2parts.length < v1parts.length) v2parts.push("0"); } if (!lexicographical) { v1parts = v1parts.map(Number); v2parts = v2parts.map(Number); } for (var i = 0; i < v1parts.length; ++i) { if (v2parts.length == i) { return 1; } if (v1parts[i] == v2parts[i]) { continue; } else if (v1parts[i] > v2parts[i]) { return 1; } else { return -1; } } if (v1parts.length != v2parts.length) { return -1; } return 0; }