import { get, isEmpty, map, size, split, trimStart } from 'lodash' const toVerArr = (ver) => { const v = trimStart(ver, 'v') let vParts = split(v, '.') if (isEmpty(vParts)) { vParts = ['0'] } return map(vParts, (v) => { let vNum = parseInt(v) return isNaN(vNum) ? 0 : vNum }) } /** * compare two version strings * @param {string} v1 * @param {string} v2 * @return {number} */ export const compareVersion = (v1, v2) => { if (v1 !== v2) { const v1Nums = toVerArr(v1) const v2Nums = toVerArr(v2) const length = Math.max(size(v1Nums), size(v2Nums)) for (let i = 0; i < length; i++) { const num1 = get(v1Nums, i, 0) const num2 = get(v2Nums, i, 0) if (num1 !== num2) { return num1 > num2 ? 1 : -1 } } } return 0 }