Created
June 4, 2020 16:17
-
-
Save yoshixmk/0e432604f6ea2049277a53335918ab9e to your computer and use it in GitHub Desktop.
jamashita
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
export interface IVersion<T extends IVersion<T>> { | |
// greater than | |
gt(other: T): boolean; | |
// greater than or equals | |
gte(other: T): boolean; | |
// less than | |
lt(other: T): boolean; | |
// less than or equals | |
lte(other: T): boolean; | |
// equals | |
eq(other: T): boolean; | |
} | |
class Semver implements IVersion<Semver> { | |
private mager: number; | |
private minar: number; | |
private patch: number; | |
private constructor(mager: number, minar: number, patch: number) { | |
this.mager = mager; | |
this.minar = minar; | |
this.patch = patch; | |
} | |
public static ofString(str: string): Semver { | |
const versions: string[] = str.split("."); | |
if (versions === undefined || versions.length !== 3) { | |
throw Error("Invalid parameter"); | |
} | |
return new Semver( | |
Number.parseInt(versions[0]), | |
Number.parseInt(versions[1]), | |
Number.parseInt(versions[2]), | |
); | |
} | |
gt(other: Semver): boolean { | |
if (this.mager > other.mager) { | |
return true; | |
} | |
if (this.minar > other.minar) { | |
return true; | |
} | |
return this.patch > other.patch; | |
} | |
gte(other: Semver): boolean { | |
if (this.gt(other)) { | |
return true; | |
} | |
return this.eq(other); | |
} | |
lt(other: Semver): boolean { | |
if (this.mager < other.mager) { | |
return true; | |
} | |
if (this.minar < other.minar) { | |
return true; | |
} | |
return this.patch < other.patch; | |
} | |
lte(other: Semver): boolean { | |
if (this.lt(other)) { | |
return true; | |
} | |
return this.eq(other); | |
} | |
eq(other: Semver): boolean { | |
return this == other; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment