# All files / lib/winston profiler.js

83.33% Statements 10/12
62.5% Branches 5/8
100% Functions 2/2
83.33% Lines 10/12

Press n or j to go to the next uncovered block, b, p or k for the previous block.

    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

    7x

    3x
    1x

    2x
    2x

    2x

    2x
    2x
    2x

    2x

     /**
     * profiler.js: TODO: add file header description.
     *
     * (C) 2010 Charlie Robbins
     * MIT LICENCE
     */

    'use strict';

    /**
     * TODO: add class description.
     * @type {Profiler}
     * @private
     */
    module.exports = class Profiler {
      /**
       * Constructor function for the Profiler instance used by
       * `Logger.prototype.startTimer`. When done is called the timer will finish
       * and log the duration.
       * @param {!Logger} logger - TODO: add param description.
       * @private
       */
      constructor(logger) {
        if (!logger) {
          throw new Error('Logger is required for profiling.');
        }

        this.logger = logger;
        this.start = Date.now();
      }

      /**
       * Ends the current timer (i.e. Profiler) instance and logs the `msg` along
       * with the duration since creation.
       * @returns {mixed} - TODO: add return description.
       * @private
       */
      done(...args) {
        Iif (typeof args[args.length - 1] === 'function') {
          // eslint-disable-next-line no-console
          console.warn('Callback function no longer supported as of winston@3.0.0');
          args.pop();
        }

        const info = typeof args[args.length - 1] === 'object' ? args.pop() : {};
        info.level = info.level || 'info';
        info.durationMs = (Date.now()) - this.start;

        return this.logger.write(info);
      }
    };