Fix semver comparison
This commit is contained in:
parent
f008e9f3f3
commit
6e06694fd6
|
@ -6,3 +6,4 @@ import './image'
|
||||||
import './markdown'
|
import './markdown'
|
||||||
import './request'
|
import './request'
|
||||||
import './validator'
|
import './validator'
|
||||||
|
import './version'
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
|
||||||
|
|
||||||
|
import { expect } from 'chai'
|
||||||
|
import { compareSemVer } from '@shared/core-utils'
|
||||||
|
|
||||||
|
describe('Version', function () {
|
||||||
|
|
||||||
|
it('Should correctly compare two stable versions', async function () {
|
||||||
|
expect(compareSemVer('3.4.0', '3.5.0')).to.be.below(0)
|
||||||
|
expect(compareSemVer('3.5.0', '3.4.0')).to.be.above(0)
|
||||||
|
|
||||||
|
expect(compareSemVer('3.4.0', '4.1.0')).to.be.below(0)
|
||||||
|
expect(compareSemVer('4.1.0', '3.4.0')).to.be.above(0)
|
||||||
|
|
||||||
|
expect(compareSemVer('3.4.0', '3.4.1')).to.be.below(0)
|
||||||
|
expect(compareSemVer('3.4.1', '3.4.0')).to.be.above(0)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('Should correctly compare two unstable version', async function () {
|
||||||
|
expect(compareSemVer('3.4.0-alpha', '3.4.0-beta.1')).to.be.below(0)
|
||||||
|
expect(compareSemVer('3.4.0-alpha.1', '3.4.0-beta.1')).to.be.below(0)
|
||||||
|
expect(compareSemVer('3.4.0-beta.1', '3.4.0-beta.2')).to.be.below(0)
|
||||||
|
expect(compareSemVer('3.4.0-beta.1', '3.5.0-alpha.1')).to.be.below(0)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('Should correctly compare a stable and unstable versions', async function () {
|
||||||
|
expect(compareSemVer('3.4.0', '3.4.1-beta.1')).to.be.below(0)
|
||||||
|
expect(compareSemVer('3.4.0-beta.1', '3.4.0-beta.2')).to.be.below(0)
|
||||||
|
expect(compareSemVer('3.4.0-beta.1', '3.4.0')).to.be.below(0)
|
||||||
|
})
|
||||||
|
})
|
|
@ -1,18 +1,9 @@
|
||||||
// Thanks https://stackoverflow.com/a/16187766
|
// Thanks https://gist.github.com/iwill/a83038623ba4fef6abb9efca87ae9ccb
|
||||||
function compareSemVer (a: string, b: string) {
|
function compareSemVer (a: string, b: string) {
|
||||||
const regExStrip0 = /(\.0+)+$/
|
if (a.startsWith(b + '-')) return -1
|
||||||
const segmentsA = a.replace(regExStrip0, '').split('.')
|
if (b.startsWith(a + '-')) return 1
|
||||||
const segmentsB = b.replace(regExStrip0, '').split('.')
|
|
||||||
|
|
||||||
const l = Math.min(segmentsA.length, segmentsB.length)
|
return a.localeCompare(b, undefined, { numeric: true, sensitivity: 'case', caseFirst: 'upper' })
|
||||||
|
|
||||||
for (let i = 0; i < l; i++) {
|
|
||||||
const diff = parseInt(segmentsA[i], 10) - parseInt(segmentsB[i], 10)
|
|
||||||
|
|
||||||
if (diff) return diff
|
|
||||||
}
|
|
||||||
|
|
||||||
return segmentsA.length - segmentsB.length
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export {
|
export {
|
||||||
|
|
Loading…
Reference in New Issue