UNPKG

@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
"use strict"; 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