check for pre-release identifier in semverCompare

pull/640/head
gabrielburnworth 2018-01-23 14:39:05 -08:00
parent aa1bde57bd
commit 366e7878ea
2 changed files with 52 additions and 6 deletions

View File

@ -1,7 +1,7 @@
import { semverCompare, SemverResult, minFwVersionCheck } from "../version";
describe("semver compare", () => {
it("knows when RIGHT_IS_GREATER", () => {
it("knows when RIGHT_IS_GREATER: numeric", () => {
expect(semverCompare("3.1.6", "4.0.0"))
.toBe(SemverResult.RIGHT_IS_GREATER);
@ -13,12 +13,25 @@ describe("semver compare", () => {
expect(semverCompare("1.1.9", "2.0.2"))
.toBe(SemverResult.RIGHT_IS_GREATER);
});
it("knows when RIGHT_IS_GREATER: undefined", () => {
expect(semverCompare("", "1.0.0"))
.toBe(SemverResult.RIGHT_IS_GREATER);
expect(semverCompare("x.y.z", "1.0.0"))
.toBe(SemverResult.RIGHT_IS_GREATER);
});
it("knows when LEFT_IS_GREATER", () => {
it("knows when RIGHT_IS_GREATER: pre-release identifiers", () => {
expect(semverCompare("6.1.0", "6.1.1-beta"))
.toBe(SemverResult.RIGHT_IS_GREATER);
expect(semverCompare("1.1.1-beta", "1.1.1"))
.toBe(SemverResult.RIGHT_IS_GREATER);
});
it("knows when LEFT_IS_GREATER: numeric", () => {
expect(semverCompare("4.0.0", "3.1.6"))
.toBe(SemverResult.LEFT_IS_GREATER);
@ -30,13 +43,33 @@ describe("semver compare", () => {
expect(semverCompare("2.0.2", "1.1.9"))
.toBe(SemverResult.LEFT_IS_GREATER);
});
it("knows when LEFT_IS_GREATER: undefined", () => {
expect(semverCompare("1.0.0", ""))
.toBe(SemverResult.LEFT_IS_GREATER);
expect(semverCompare("1.0.0", "x.y.z"))
.toBe(SemverResult.LEFT_IS_GREATER);
expect(semverCompare("x.y.z", "1.0.0"))
.toBe(SemverResult.RIGHT_IS_GREATER);
});
it("knows when LEFT_IS_GREATER: pre-release identifiers", () => {
expect(semverCompare("6.1.1-beta", "6.1.0"))
.toBe(SemverResult.LEFT_IS_GREATER);
expect(semverCompare("1.1.1", "1.1.1-beta"))
.toBe(SemverResult.LEFT_IS_GREATER);
});
it("knows when EQUAL", () => {
expect(semverCompare("1.1.1", "1.1.1"))
.toBe(SemverResult.EQUAL);
expect(semverCompare("", ""))
.toBe(SemverResult.EQUAL);
expect(semverCompare("1.1.1-beta", "1.1.1-beta"))
.toBe(SemverResult.EQUAL);
});
});

View File

@ -7,8 +7,12 @@ export enum SemverResult {
}
// CREDIT: https://github.com/substack/semver-compare
export function semverCompare(left: string, right: string): SemverResult {
const pa: Array<string | undefined> = left.split(".");
const pb: Array<string | undefined> = right.split(".");
const leftSemVer = left.split("-")[0];
const rightSemVer = right.split("-")[0];
const leftHasSuffix = left.includes("-");
const rightHasSuffix = right.includes("-");
const pa: Array<string | undefined> = leftSemVer.split(".");
const pb: Array<string | undefined> = rightSemVer.split(".");
for (let i = 0; i < 3; i++) {
const num_left = Number(pa[i]);
const num_right = Number(pb[i]);
@ -31,6 +35,15 @@ export function semverCompare(left: string, right: string): SemverResult {
}
// num_left === num_right. Check presence of pre-release identifiers.
if (!leftHasSuffix && rightHasSuffix) {
return SemverResult.LEFT_IS_GREATER;
}
if (leftHasSuffix && !rightHasSuffix) {
return SemverResult.RIGHT_IS_GREATER;
}
return SemverResult.EQUAL;
}