123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- import { isNumber } from 'lodash';
- const versionPattern = /^(\d+)(?:\.(\d+))?(?:\.(\d+))?(?:-([0-9A-Za-z\.]+))?/;
- export class SemVersion {
- major: number;
- minor: number;
- patch: number;
- meta: string;
- constructor(version: string) {
- this.major = 0;
- this.minor = 0;
- this.patch = 0;
- this.meta = '';
- const match = versionPattern.exec(version);
- if (match) {
- this.major = Number(match[1]);
- this.minor = Number(match[2] || 0);
- this.patch = Number(match[3] || 0);
- this.meta = match[4];
- }
- }
- isGtOrEq(version: string): boolean {
- const compared = new SemVersion(version);
- for (let i = 0; i < this.comparable.length; ++i) {
- if (this.comparable[i] > compared.comparable[i]) {
- return true;
- }
- if (this.comparable[i] < compared.comparable[i]) {
- return false;
- }
- }
- return true;
- }
- isValid(): boolean {
- return isNumber(this.major);
- }
- get comparable() {
- return [this.major, this.minor, this.patch];
- }
- }
- export function isVersionGtOrEq(a: string, b: string): boolean {
- const aSemver = new SemVersion(a);
- return aSemver.isGtOrEq(b);
- }
|