diff --git a/lib/handlebars/helpers/log.js b/lib/handlebars/helpers/log.js index 799ec6b2..33cb178c 100644 --- a/lib/handlebars/helpers/log.js +++ b/lib/handlebars/helpers/log.js @@ -1,6 +1,6 @@ export default function (instance) { instance.registerHelper('log', function (/* message, options */) { - let args = [undefined], + let args = [undefined, undefined], options = arguments[arguments.length - 1]; for (let i = 0; i < arguments.length - 1; i++) { args.push(arguments[i]); @@ -14,6 +14,12 @@ export default function (instance) { } args[0] = level; + if (options.hash.depth != null) { + args[1] = options.hash.depth; + } else if (options.data && options.data.depth != null) { + args[1] = options.data.depth; + } + instance.log(...args); }); } diff --git a/lib/handlebars/logger.js b/lib/handlebars/logger.js index a7022ef0..a9dbe02e 100644 --- a/lib/handlebars/logger.js +++ b/lib/handlebars/logger.js @@ -3,6 +3,7 @@ import { indexOf } from './utils'; let logger = { methodMap: ['debug', 'info', 'warn', 'error'], level: 'info', + depth: 2, // Maps a given level value to the `methodMap` indexes above. lookupLevel: function (level) { @@ -18,9 +19,19 @@ let logger = { return level; }, + convertDepth: function (depth) { + depth = parseInt(depth, 10); + if (isNaN(depth) || depth < 0) { + depth = logger.depth; + } + + return depth; + }, + // Can be overridden in the host environment - log: function (level, ...message) { + log: function (level, depth, ...message) { level = logger.lookupLevel(level); + depth = logger.convertDepth(depth); if ( typeof console !== 'undefined' && @@ -31,6 +42,21 @@ let logger = { if (!console[method]) { method = 'log'; } + + const isNodeEnvironment = + typeof process !== 'undefined' && + process.versions && // eslint-disable-line no-undef + process.versions.node; // eslint-disable-line no-undef + if (isNodeEnvironment && depth !== 2) { + const { inspect } = import('util'); + message = message.map((msg) => { + return inspect(msg, { + depth: depth, + colors: true, + }); + }); + } + console[method](...message); // eslint-disable-line no-console } },