@serenity-js/core
Version:
The core Serenity/JS framework, providing the Screenplay Pattern interfaces, as well as the test reporting and integration infrastructure
70 lines • 3.03 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.Duration = void 0;
const tiny_types_1 = require("tiny-types");
/**
* Represents a duration in milliseconds between two [timestamps](https://serenity-js.org/api/core/class/Timestamp/).
*
* @group Time
*/
class Duration extends tiny_types_1.TinyType {
milliseconds;
static msPerSecond = 1000;
static msPerMinute = Duration.msPerSecond * 60;
static msPerHour = Duration.msPerMinute * 60;
static msPerDay = Duration.msPerHour * 24;
static msPerYear = Duration.msPerDay * 365;
static ofMilliseconds = (milliseconds) => new Duration(milliseconds);
static ofSeconds = (seconds) => Duration.ofMilliseconds(seconds * Duration.msPerSecond);
static ofMinutes = (minutes) => Duration.ofMilliseconds(minutes * Duration.msPerMinute);
static ofHours = (hours) => Duration.ofMilliseconds(hours * Duration.msPerHour);
static ofDays = (days) => Duration.ofMilliseconds(days * Duration.msPerDay);
static ofYears = (years) => Duration.ofMilliseconds(years * Duration.msPerYear);
static fromJSON({ milliseconds }) {
return Duration.ofMilliseconds(milliseconds);
}
constructor(milliseconds) {
super();
this.milliseconds = milliseconds;
(0, tiny_types_1.ensure)('duration', milliseconds, (0, tiny_types_1.isInteger)(), (0, tiny_types_1.isGreaterThanOrEqualTo)(0));
}
isLessThan(another) {
return this.milliseconds < another.milliseconds;
}
isLessThanOrEqualTo(another) {
return this.milliseconds <= another.milliseconds;
}
isGreaterThan(another) {
return this.milliseconds > another.milliseconds;
}
isGreaterThanOrEqualTo(another) {
return this.milliseconds >= another.milliseconds;
}
plus(another) {
return new Duration(this.milliseconds + another.milliseconds);
}
inMilliseconds() {
return this.milliseconds;
}
toString() {
const ms = this.milliseconds;
const levels = [
[Math.floor(ms / Duration.msPerYear), 'y'],
[Math.floor((ms % Duration.msPerYear) / Duration.msPerDay), 'd'],
[Math.floor(((ms % Duration.msPerYear) % Duration.msPerDay) / Duration.msPerHour), 'h'],
[Math.floor((((ms % Duration.msPerYear) % Duration.msPerDay) % Duration.msPerHour) / Duration.msPerMinute), 'm'],
[Math.floor((((ms % Duration.msPerYear) % Duration.msPerDay) % Duration.msPerHour) % Duration.msPerMinute / Duration.msPerSecond), 's'],
[(((ms % Duration.msPerYear) % Duration.msPerDay) % Duration.msPerHour) % Duration.msPerMinute % Duration.msPerSecond, 'ms'],
];
return levels.reduce((acc, l, i) => l[0] > 0 || i === levels.length
? `${acc} ${l[0]}${l[1]}`
: acc, '').trim() || '0ms';
}
toJSON() {
return {
milliseconds: this.milliseconds,
};
}
}
exports.Duration = Duration;
//# sourceMappingURL=Duration.js.map
;