all files / clay-log/plugins/ _utils.js

100% Statements 15/15
100% Branches 4/4
100% Functions 3/3
100% Lines 15/15
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                     36× 22×   21× 21×       21× 20×                
const { noop } = require('pino/lib/tools');
 
/**
 * Applies plug-in code to select active log-levels before eventually
 * calling the core pino logger.
 *
 * @param {function} func: The plug-in function.
 * @param {string[]} levels: An optional array of log-levels to apply a plug-in to.
 * @returns {Object} The wrapped pino instance.
 */
function wrap(func, levels = []) {
  levels = new Set(levels);
 
  return function (logger) {
    Object.keys(logger.levels.values)
      .filter(level => levels.has(level) || levels.size == 0)
      .filter(level => logger[level] !== noop)
      .forEach((level) => {
        const _level = logger[level];
        logger[level] = function(data, msg) {
            func(data, msg);
            return _level.apply(logger, [data, msg]);
        }
        // Sinon needs to spy on the original function, not the wrapped function.
        // This conditional allows us to test if data was enriched.
        if (process.env.NODE_ENV === 'test') {
          logger[level]._original = _level;
        }
      });
    return logger;
  };
}
 
module.exports = {
  wrap
}