Skip to content

Instantly share code, notes, and snippets.

@renzocastro
Created July 15, 2022 13:58
Show Gist options
  • Save renzocastro/8560b3734c2b093b31fab8e19dd9cedf to your computer and use it in GitHub Desktop.
Save renzocastro/8560b3734c2b093b31fab8e19dd9cedf to your computer and use it in GitHub Desktop.
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));
@renzocastro
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment