UNPKG

1.34 kBJavaScriptView Raw
1'use strict';
2
3const timers = {};
4
5module.exports = {
6 start,
7 pause,
8 stop,
9 clear,
10 msDiff
11};
12
13/**
14 * Start timer with 'id'
15 * @param {String} id
16 */
17function start(id) {
18 if (!timers[id]) {
19 timers[id] = {
20 start: 0,
21 elapsed: 0
22 };
23 }
24 timers[id].start = process.hrtime();
25}
26
27/**
28 * Pause timer with 'id'
29 * @param {String} id
30 * @returns {null}
31 */
32function pause(id) {
33 if (!timers[id]) return start(id);
34
35 timers[id].elapsed += msDiff(process.hrtime(), timers[id].start);
36}
37
38/**
39 * Stop timer with 'id' and return elapsed
40 * @param {String} id
41 * @param {Boolean} formatted
42 * @returns {Number}
43 */
44function stop(id, formatted) {
45 const elapsed = timers[id].elapsed + msDiff(process.hrtime(), timers[id].start);
46
47 clear(id);
48 return formatted ? format(elapsed) : elapsed;
49}
50
51/**
52 * clear timer with 'id'
53 * @param {String} id
54 */
55function clear(id) {
56 delete timers[id];
57}
58
59/**
60 * Retrieve difference in ms
61 * @param {Array} t1
62 * @param {Array} t2
63 * @returns {Number}
64 */
65function msDiff(t1, t2) {
66 t1 = (t1[0] * 1e9 + t1[1]) / 1e6;
67 t2 = (t2[0] * 1e9 + t2[1]) / 1e6;
68 return Math.ceil((t1 - t2) * 100) / 100;
69}
70
71/**
72 * Format 't'
73 * @param {Number} t
74 * @returns {String}
75 */
76function format(t) {
77 if (t < 1000) return `${Math.round(t)}ms`;
78 return `${Math.floor(t / 1000 * 100) / 100}s`;
79}