Created
July 15, 2022 13:58
-
-
Save renzocastro/8560b3734c2b093b31fab8e19dd9cedf to your computer and use it in GitHub Desktop.
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
class Version { | |
private _major: number; | |
private _minor: number; | |
private _patch: number; | |
toString = (): string => `${this._major}.${this._minor}.${this._patch}`; | |
constructor(versionStr: string) { | |
if (versionStr) { | |
const versionRegexp = /([0-9]+).([0-9]+).([0-9]+)$/ | |
const versionMatch = versionStr.trim().match(versionRegexp); | |
if (versionMatch && versionMatch.length) { | |
this._major = parseInt(versionMatch[1]); | |
this._minor = parseInt(versionMatch[2]); | |
this._patch = parseInt(versionMatch[3]); | |
} | |
} | |
} | |
get major() { | |
return this._major; | |
} | |
get minor() { | |
return this._minor; | |
} | |
get patch() { | |
return this._patch; | |
} | |
static parse(version: string): Version { | |
return new Version(version); | |
} | |
isValid() { | |
return !isNaN(this._major) && !isNaN(this._minor) && !isNaN(this._patch); | |
} | |
compare(version: Version): number | |
compare(version: string): number | |
compare(version): number { | |
const [ LOWER, EQUAL, GREATER ] = [ -1, 0, 1 ]; | |
const versionObj = (typeof version === 'string' ? Version.parse(version) : version); | |
if (versionObj.isValid()) { | |
const majorResult = (this.major === versionObj.major ? EQUAL : (this.major > versionObj.major ? GREATER : LOWER)); | |
const minorResult = (this.minor === versionObj.minor ? EQUAL : (this.minor > versionObj.minor ? GREATER : LOWER)); | |
const patchResult = (this.patch === versionObj.patch ? EQUAL : (this.patch > versionObj.patch ? GREATER : LOWER)); | |
return (majorResult === EQUAL ? (minorResult === EQUAL ? patchResult : minorResult) : majorResult); | |
} else { | |
throw new Error('Invalid version ' + (version && version.toString())); | |
} | |
} | |
gt(version: Version): boolean | |
gt(version: string): boolean | |
gt(version): boolean { | |
return this.compare(version) === 1; | |
} | |
lt(version: Version): boolean | |
lt(version: string): boolean | |
lt(version): boolean { | |
return this.compare(version) === -1; | |
} | |
equal(version: Version): boolean | |
equal(version: string): boolean | |
equal(version): boolean { | |
return this.compare(version) === 0; | |
} | |
} | |
const version = '2.34.8'; | |
const versionToCompare = '2.33.4'; | |
console.log(version, versionToCompare, Version.parse(version).gt(versionToCompare)); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Demo
https://codepen.io/otakurzo/pen/ZExBZGZ