mirror of
https://github.com/tiny-craft/tiny-rdm.git
synced 2025-05-04 15:08:04 +08:00
37 lines
880 B
JavaScript
37 lines
880 B
JavaScript
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
|
|
}
|