/* eslint no-console:0 */ const color = require('colorette'); const { inspect } = require('util'); const { isFunction, isNil, isString } = require('lodash'); class Logger { constructor(config) { const { log: { debug, warn, error, deprecate, inspectionDepth, enableColors, } = {}, } = config; this._inspectionDepth = inspectionDepth || 5; this._enableColors = resolveIsEnabledColors(enableColors); this._debug = debug; this._warn = warn; this._error = error; this._deprecate = deprecate; } _log(message, userFn, colorFn) { if (!isNil(userFn) && !isFunction(userFn)) { throw new TypeError('Extensions to knex logger must be functions!'); } if (isFunction(userFn)) { userFn(message); return; } if (!isString(message)) { message = inspect(message, { depth: this._inspectionDepth, colors: this._enableColors, }); } console.log(colorFn ? colorFn(message) : message); } debug(message) { this._log(message, this._debug); } warn(message) { this._log(message, this._warn, color.yellow); } error(message) { this._log(message, this._error, color.red); } deprecate(method, alternative) { const message = `${method} is deprecated, please use ${alternative}`; this._log(message, this._deprecate, color.yellow); } } function resolveIsEnabledColors(enableColorsParam) { if (!isNil(enableColorsParam)) { return enableColorsParam; } if (process && process.stdout) { return process.stdout.isTTY; } return false; } module.exports = Logger;