@unique-nft/api
Version:
Definitely typed JS API for the Unique Network blockchain
85 lines (62 loc) • 2.2 kB
text/typescript
export class Semver {
protected _major: number
protected _minor: number
protected _patch: number
constructor(semver: [number, number, number]) {
this._major = semver[0]
this._minor = semver[1]
this._patch = semver[2]
}
get major() {
return this._major
}
get minor() {
return this._minor
}
get patch() {
return this._patch
}
toString() {
return `${this.major}.${this.minor}.${this.patch}`
}
private static parseToArray(version: string): null | [number, number, number] {
if (typeof version !== "string") return null
const [main] = version.split('+')[0].split('-').map(i => i.split('.'))
const major = parseInt(main[0])
if (isNaN(major)) return null
const minor = parseInt(main[1])
const patch = parseInt(main[2])
return [major, isNaN(minor) ? 0 : minor, isNaN(patch) ? 0 : patch]
}
static fromString(version: string): Semver {
const parsed = Semver.parseToArray(version)
if (!parsed) throw new Error(`Semver.fromString: wrong version string value: "${version}"`)
return new Semver(parsed)
}
static isValid(version: string): boolean {
return typeof version === 'string' && Semver.parseToArray(version) !== null
}
isGteThan(version: string) {
const parsed = Semver.parseToArray(version)
if (!parsed) return false
if (this._major > parsed[0]) return true
if (this._major < parsed[0]) return false
if (this._minor > parsed[1]) return true
if (this._minor < parsed[1]) return false
return this._patch >= parsed[2]
}
isLessThan(version: string) {
const parsed = Semver.parseToArray(version)
if (!parsed) return false
if (this._major < parsed[0]) return true
if (this._major > parsed[0]) return false
if (this._minor < parsed[1]) return true
if (this._minor > parsed[1]) return false
return this._patch < parsed[2]
}
isEqual(version: string) {
const parsed = Semver.parseToArray(version)
if (!parsed) return false
return this._major === parsed[0] && this._minor === parsed[1] && this._patch === parsed[2]
}
}