timing.js
8.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.Duration = exports.Timer = void 0;
require("source-map-support/register");
var _lodash = _interopRequireDefault(require("lodash"));
const NS_PER_S = 1e9;
const NS_PER_MS = 1e6;
class Duration {
constructor(nanos) {
this._nanos = nanos;
}
get nanos() {
return this._nanos;
}
get asNanoSeconds() {
return this.nanos;
}
get asMilliSeconds() {
return this.nanos / NS_PER_MS;
}
get asSeconds() {
return this.nanos / NS_PER_S;
}
toString() {
return this.asMilliSeconds.toFixed(0);
}
}
exports.Duration = Duration;
class Timer {
constructor() {
this._startTime = null;
}
get startTime() {
return this._startTime;
}
start() {
if (!_lodash.default.isNull(this.startTime)) {
throw new Error('Timer has already been started.');
}
this._startTime = _lodash.default.isFunction(process.hrtime.bigint) ? process.hrtime.bigint() : process.hrtime();
return this;
}
getDuration() {
if (_lodash.default.isNull(this.startTime)) {
throw new Error(`Unable to get duration. Timer was not started`);
}
let nanoDuration;
if (_lodash.default.isArray(this.startTime)) {
const [seconds, nanos] = process.hrtime(this.startTime);
nanoDuration = seconds * NS_PER_S + nanos;
} else if (typeof this.startTime === 'bigint' && _lodash.default.isFunction(process.hrtime.bigint)) {
const endTime = process.hrtime.bigint();
nanoDuration = Number(endTime - this.startTime);
} else {
throw new Error(`Unable to get duration. Start time '${this.startTime}' cannot be parsed`);
}
return new Duration(nanoDuration);
}
toString() {
try {
return this.getDuration().toString();
} catch (err) {
return `<err: ${err.message}>`;
}
}
}
exports.Timer = Timer;
var _default = Timer;
exports.default = _default;require('source-map-support').install();
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90aW1pbmcuanMiXSwibmFtZXMiOlsiTlNfUEVSX1MiLCJOU19QRVJfTVMiLCJEdXJhdGlvbiIsImNvbnN0cnVjdG9yIiwibmFub3MiLCJfbmFub3MiLCJhc05hbm9TZWNvbmRzIiwiYXNNaWxsaVNlY29uZHMiLCJhc1NlY29uZHMiLCJ0b1N0cmluZyIsInRvRml4ZWQiLCJUaW1lciIsIl9zdGFydFRpbWUiLCJzdGFydFRpbWUiLCJzdGFydCIsIl8iLCJpc051bGwiLCJFcnJvciIsImlzRnVuY3Rpb24iLCJwcm9jZXNzIiwiaHJ0aW1lIiwiYmlnaW50IiwiZ2V0RHVyYXRpb24iLCJuYW5vRHVyYXRpb24iLCJpc0FycmF5Iiwic2Vjb25kcyIsImVuZFRpbWUiLCJOdW1iZXIiLCJlcnIiLCJtZXNzYWdlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUdBLE1BQU1BLFFBQVEsR0FBRyxHQUFqQjtBQUNBLE1BQU1DLFNBQVMsR0FBRyxHQUFsQjs7QUFNQSxNQUFNQyxRQUFOLENBQWU7QUFDYkMsRUFBQUEsV0FBVyxDQUFFQyxLQUFGLEVBQVM7QUFDbEIsU0FBS0MsTUFBTCxHQUFjRCxLQUFkO0FBQ0Q7O0FBRUQsTUFBSUEsS0FBSixHQUFhO0FBQ1gsV0FBTyxLQUFLQyxNQUFaO0FBQ0Q7O0FBT0QsTUFBSUMsYUFBSixHQUFxQjtBQUNuQixXQUFPLEtBQUtGLEtBQVo7QUFDRDs7QUFPRCxNQUFJRyxjQUFKLEdBQXNCO0FBQ3BCLFdBQU8sS0FBS0gsS0FBTCxHQUFhSCxTQUFwQjtBQUNEOztBQU9ELE1BQUlPLFNBQUosR0FBaUI7QUFDZixXQUFPLEtBQUtKLEtBQUwsR0FBYUosUUFBcEI7QUFDRDs7QUFFRFMsRUFBQUEsUUFBUSxHQUFJO0FBRVYsV0FBTyxLQUFLRixjQUFMLENBQW9CRyxPQUFwQixDQUE0QixDQUE1QixDQUFQO0FBQ0Q7O0FBdkNZOzs7O0FBMENmLE1BQU1DLEtBQU4sQ0FBWTtBQUlWUixFQUFBQSxXQUFXLEdBQUk7QUFDYixTQUFLUyxVQUFMLEdBQWtCLElBQWxCO0FBQ0Q7O0FBRUQsTUFBSUMsU0FBSixHQUFpQjtBQUNmLFdBQU8sS0FBS0QsVUFBWjtBQUNEOztBQU9ERSxFQUFBQSxLQUFLLEdBQUk7QUFDUCxRQUFJLENBQUNDLGdCQUFFQyxNQUFGLENBQVMsS0FBS0gsU0FBZCxDQUFMLEVBQStCO0FBQzdCLFlBQU0sSUFBSUksS0FBSixDQUFVLGlDQUFWLENBQU47QUFDRDs7QUFFRCxTQUFLTCxVQUFMLEdBQWtCRyxnQkFBRUcsVUFBRixDQUFhQyxPQUFPLENBQUNDLE1BQVIsQ0FBZUMsTUFBNUIsSUFDZEYsT0FBTyxDQUFDQyxNQUFSLENBQWVDLE1BQWYsRUFEYyxHQUVkRixPQUFPLENBQUNDLE1BQVIsRUFGSjtBQUdBLFdBQU8sSUFBUDtBQUNEOztBQU9ERSxFQUFBQSxXQUFXLEdBQUk7QUFDYixRQUFJUCxnQkFBRUMsTUFBRixDQUFTLEtBQUtILFNBQWQsQ0FBSixFQUE4QjtBQUM1QixZQUFNLElBQUlJLEtBQUosQ0FBVywrQ0FBWCxDQUFOO0FBQ0Q7O0FBRUQsUUFBSU0sWUFBSjs7QUFDQSxRQUFJUixnQkFBRVMsT0FBRixDQUFVLEtBQUtYLFNBQWYsQ0FBSixFQUErQjtBQUU3QixZQUFNLENBQUNZLE9BQUQsRUFBVXJCLEtBQVYsSUFBbUJlLE9BQU8sQ0FBQ0MsTUFBUixDQUFlLEtBQUtQLFNBQXBCLENBQXpCO0FBQ0FVLE1BQUFBLFlBQVksR0FBR0UsT0FBTyxHQUFHekIsUUFBVixHQUFxQkksS0FBcEM7QUFDRCxLQUpELE1BSU8sSUFBSSxPQUFPLEtBQUtTLFNBQVosS0FBMEIsUUFBMUIsSUFBc0NFLGdCQUFFRyxVQUFGLENBQWFDLE9BQU8sQ0FBQ0MsTUFBUixDQUFlQyxNQUE1QixDQUExQyxFQUErRTtBQUVwRixZQUFNSyxPQUFPLEdBQUdQLE9BQU8sQ0FBQ0MsTUFBUixDQUFlQyxNQUFmLEVBQWhCO0FBRUFFLE1BQUFBLFlBQVksR0FBR0ksTUFBTSxDQUFDRCxPQUFPLEdBQUcsS0FBS2IsU0FBaEIsQ0FBckI7QUFDRCxLQUxNLE1BS0E7QUFDTCxZQUFNLElBQUlJLEtBQUosQ0FBVyx1Q0FBc0MsS0FBS0osU0FBVSxvQkFBaEUsQ0FBTjtBQUNEOztBQUVELFdBQU8sSUFBSVgsUUFBSixDQUFhcUIsWUFBYixDQUFQO0FBQ0Q7O0FBRURkLEVBQUFBLFFBQVEsR0FBSTtBQUNWLFFBQUk7QUFDRixhQUFPLEtBQUthLFdBQUwsR0FBbUJiLFFBQW5CLEVBQVA7QUFDRCxLQUZELENBRUUsT0FBT21CLEdBQVAsRUFBWTtBQUNaLGFBQVEsU0FBUUEsR0FBRyxDQUFDQyxPQUFRLEdBQTVCO0FBQ0Q7QUFDRjs7QUE3RFM7OztlQWtFR2xCLEsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5cbmNvbnN0IE5TX1BFUl9TID0gMWU5O1xuY29uc3QgTlNfUEVSX01TID0gMWU2O1xuXG5cbi8qKlxuICogQ2xhc3MgcmVwcmVzZW50aW5nIGEgZHVyYXRpb24sIGVuY2Fwc3VsYXRpbmcgdGhlIG51bWJlciBhbmQgdW5pdHMuXG4gKi9cbmNsYXNzIER1cmF0aW9uIHtcbiAgY29uc3RydWN0b3IgKG5hbm9zKSB7XG4gICAgdGhpcy5fbmFub3MgPSBuYW5vcztcbiAgfVxuXG4gIGdldCBuYW5vcyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25hbm9zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZHVyYXRpb24gYXMgbmFub3NlY29uZHNcbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn0gVGhlIGR1cmF0aW9uIGFzIG5hbm9zZWNvbmRzXG4gICAqL1xuICBnZXQgYXNOYW5vU2Vjb25kcyAoKSB7XG4gICAgcmV0dXJuIHRoaXMubmFub3M7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkdXJhdGlvbiBjb252ZXJ0ZWQgaW50byBtaWxsaXNlY29uZHNcbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn0gVGhlIGR1cmF0aW9uIGFzIG1pbGxpc2Vjb25kc1xuICAgKi9cbiAgZ2V0IGFzTWlsbGlTZWNvbmRzICgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW5vcyAvIE5TX1BFUl9NUztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGR1cmF0aW9uIGNvbnZlcnRlZCBpbnRvIHNlY29uZHNcbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn0gVGhlIGR1cmF0aW9uIGZhcyBzZWNvbmRzXG4gICAqL1xuICBnZXQgYXNTZWNvbmRzICgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW5vcyAvIE5TX1BFUl9TO1xuICB9XG5cbiAgdG9TdHJpbmcgKCkge1xuICAgIC8vIGRlZmF1bHQgdG8gbWlsbGlzZWNvbmRzLCByb3VuZGVkXG4gICAgcmV0dXJuIHRoaXMuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKTtcbiAgfVxufVxuXG5jbGFzcyBUaW1lciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdGltZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLl9zdGFydFRpbWUgPSBudWxsO1xuICB9XG5cbiAgZ2V0IHN0YXJ0VGltZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0VGltZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCB0aGUgdGltZXJcbiAgICpcbiAgICogQHJldHVybiB7VGltZXJ9IFRoZSBjdXJyZW50IGluc3RhbmNlLCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIHN0YXJ0ICgpIHtcbiAgICBpZiAoIV8uaXNOdWxsKHRoaXMuc3RhcnRUaW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaW1lciBoYXMgYWxyZWFkeSBiZWVuIHN0YXJ0ZWQuJyk7XG4gICAgfVxuICAgIC8vIG9uY2UgTm9kZSAxMCBpcyBubyBsb25nZXIgc3VwcG9ydGVkLCB0aGlzIGNoZWNrIGNhbiBiZSByZW1vdmVkXG4gICAgdGhpcy5fc3RhcnRUaW1lID0gXy5pc0Z1bmN0aW9uKHByb2Nlc3MuaHJ0aW1lLmJpZ2ludClcbiAgICAgID8gcHJvY2Vzcy5ocnRpbWUuYmlnaW50KClcbiAgICAgIDogcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGR1cmF0aW9uIHNpbmNlIHRoZSB0aW1lciB3YXMgc3RhcnRlZFxuICAgKlxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn0gdGhlIGR1cmF0aW9uXG4gICAqL1xuICBnZXREdXJhdGlvbiAoKSB7XG4gICAgaWYgKF8uaXNOdWxsKHRoaXMuc3RhcnRUaW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZ2V0IGR1cmF0aW9uLiBUaW1lciB3YXMgbm90IHN0YXJ0ZWRgKTtcbiAgICB9XG5cbiAgICBsZXQgbmFub0R1cmF0aW9uO1xuICAgIGlmIChfLmlzQXJyYXkodGhpcy5zdGFydFRpbWUpKSB7XG4gICAgICAvLyBzdGFydFRpbWUgd2FzIGNyZWF0ZWQgdXNpbmcgcHJvY2Vzcy5ocnRpbWUoKVxuICAgICAgY29uc3QgW3NlY29uZHMsIG5hbm9zXSA9IHByb2Nlc3MuaHJ0aW1lKHRoaXMuc3RhcnRUaW1lKTtcbiAgICAgIG5hbm9EdXJhdGlvbiA9IHNlY29uZHMgKiBOU19QRVJfUyArIG5hbm9zO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuc3RhcnRUaW1lID09PSAnYmlnaW50JyAmJiBfLmlzRnVuY3Rpb24ocHJvY2Vzcy5ocnRpbWUuYmlnaW50KSkge1xuICAgICAgLy8gc3RhcnRUaW1lIHdhcyBjcmVhdGVkIHVzaW5nIHByb2Nlc3MuaHJ0aW1lLmJpZ2ludCgpXG4gICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUuYmlnaW50KCk7XG4gICAgICAvLyBnZXQgdGhlIGRpZmZlcmVuY2UsIGFuZCBjb252ZXJ0IHRvIG51bWJlclxuICAgICAgbmFub0R1cmF0aW9uID0gTnVtYmVyKGVuZFRpbWUgLSB0aGlzLnN0YXJ0VGltZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGdldCBkdXJhdGlvbi4gU3RhcnQgdGltZSAnJHt0aGlzLnN0YXJ0VGltZX0nIGNhbm5vdCBiZSBwYXJzZWRgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IER1cmF0aW9uKG5hbm9EdXJhdGlvbik7XG4gIH1cblxuICB0b1N0cmluZyAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmdldER1cmF0aW9uKCkudG9TdHJpbmcoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiBgPGVycjogJHtlcnIubWVzc2FnZX0+YDtcbiAgICB9XG4gIH1cbn1cblxuXG5leHBvcnQgeyBUaW1lciwgRHVyYXRpb24gfTtcbmV4cG9ydCBkZWZhdWx0IFRpbWVyO1xuIl0sImZpbGUiOiJsaWIvdGltaW5nLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=