@serenity-js/core
Version:
The core Serenity/JS framework, providing the Screenplay Pattern interfaces, as well as the test reporting and integration infrastructure
51 lines • 1.41 kB
JavaScript
import semver from 'semver';
import { ensure, isDefined, isString, Predicate, TinyType } from 'tiny-types';
/**
* A tiny type describing a version number, like `1.2.3`
*/
export class Version extends TinyType {
version;
static fromJSON(version) {
return new Version(version);
}
constructor(version) {
super();
this.version = version;
ensure('version', version, isDefined(), isString(), isValid());
}
isLowerThan(other) {
return semver.lt(this.version, other.version, { loose: false });
}
isAtMost(other) {
return semver.lte(this.version, other.version, { loose: false });
}
/**
* @param other
*/
isAtLeast(other) {
return semver.gte(this.version, other.version, { loose: false });
}
isHigherThan(other) {
return semver.gt(this.version, other.version, { loose: false });
}
/**
* @returns
* Major version number of a given package version, i.e. `1` in `1.2.3`
*/
major() {
return Number(this.version.split('.')[0]);
}
satisfies(range) {
return semver.satisfies(this.version, range, { loose: false });
}
toString() {
return `${this.version}`;
}
}
/**
* @package
*/
function isValid() {
return Predicate.to(`be a valid version number`, (version) => !!semver.valid(version));
}
//# sourceMappingURL=Version.js.map