UNPKG

postman-runtime

Version:

Underlying library of executing Postman Collections

74 lines (65 loc) 1.69 kB
/** * All timing related functions within the runner is maintained in this module. Things like recording time with label, * computing elapsed time between two labels, etc all go in here. * * @module Run~Timer */ var /** * @const * @type {string} */ NUMBER = 'number', Timings; // constructor /** * An instance of a timer can record times with a label associated with it. * * @constructor * @private * @param {Object.<Number>} records create the timer instance with one or more labels and their timestamp. */ Timings = function Timings (records) { // eslint-disable-next-line guard-for-in for (var prop in records) { this[prop] = parseInt(records[prop], 10); } }; /** * Create a new instance of timer. Equivalent to doing new {@link Timer}(records:Object.<Number>); * * @param {Object.<Number>} records - * @returns {Timings} */ Timings.create = function (records) { return new Timings(records); }; /** * Record the current time with the label specified. * * @param {String} label - * @returns {Number} * * @example * var t = new Timings(); * t.record('start'); * * console.log(t.toObject()); // logs {start: 1246333 } */ Timings.prototype.record = function (label) { return (this[label] = Date.now()); }; /** * Serialise a timing instance to an Object that can then be later used as a source to recreate another timing instance. * * @returns {Object.<Number>} */ Timings.prototype.toObject = function () { var obj = {}, prop; for (prop in this) { if (typeof this[prop] === NUMBER) { obj[prop] = this[prop]; } } return obj; }; module.exports = Timings;