UNPKG

solace

Version:

Alternative to console log which automatically beautifies the output

149 lines (115 loc) 5.17 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var _joi = require('joi'); var _joi2 = _interopRequireDefault(_joi); var _lodash = require('lodash'); var _lodash2 = _interopRequireDefault(_lodash); var _moment = require('moment'); var _moment2 = _interopRequireDefault(_moment); var _machineJs = require('./machine.js'); var _machineJs2 = _interopRequireDefault(_machineJs); var _beautifulJs = require('./beautiful.js'); var _beautifulJs2 = _interopRequireDefault(_beautifulJs); var _outlineJs = require('./outline.js'); var _outlineJs2 = _interopRequireDefault(_outlineJs); var MACHINE = 'machine'; var BEAUTIFUL = 'beautiful'; var OUTLINE = 'outline'; var confSchema = _joi2['default'].object().keys({ standardOut: _joi2['default'].object(), standardErr: _joi2['default'].object(), defaultTheme: _joi2['default'].string().valid(MACHINE, BEAUTIFUL, OUTLINE) }); var optionsSchema = _joi2['default'].object().keys({ title: _joi2['default'].string(), theme: _joi2['default'].string().valid(MACHINE, BEAUTIFUL, OUTLINE) }); var isValueSimple = function isValueSimple(value) { return _lodash2['default'].isBoolean(value) || _lodash2['default'].isDate(value) || _lodash2['default'].isNumber(value) || _lodash2['default'].isString(value) || _lodash2['default'].isNull(value); }; var isArrayOfSimpleValues = function isArrayOfSimpleValues(values) { return _lodash2['default'].every(values, isValueSimple); }; var isArrayOfSimpleObjects = function isArrayOfSimpleObjects(values) { return _lodash2['default'].every(values, isArrayOfSimpleValues); }; exports['default'] = function (cfg) { _joi2['default'].assert(cfg, confSchema); var stdOut = cfg.standardOut ? cfg.standardOut : process.stdout; var stdErr = cfg.standardErr ? cfg.standardErr : process.stderr; var themes = { machine: _machineJs2['default'], beautiful: _beautifulJs2['default'], outline: _outlineJs2['default'] }; var defaultTheme = cfg.defaultTheme ? cfg.defaultTheme : BEAUTIFUL; var log = function log(message) { var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; _joi2['default'].assert(options, optionsSchema); var themeName = options.theme ? options.theme : defaultTheme; var theme = themes[themeName]; /* Error ?*/ var isError = _lodash2['default'].isError(message); var isNaN = _lodash2['default'].isNaN(message); var isUndefined = _lodash2['default'].isUndefined(message); var isFunction = _lodash2['default'].isFunction(message); /* Simple value ?*/ var isNull = _lodash2['default'].isNull(message); var isBoolean = _lodash2['default'].isBoolean(message); var isDate = _lodash2['default'].isDate(message); var isNumber = _lodash2['default'].isNumber(message); var isRegExp = _lodash2['default'].isRegExp(message); var isString = _lodash2['default'].isString(message); /* Complex object ?*/ var isObject = _lodash2['default'].isObject(message); var isPlainObject = _lodash2['default'].isPlainObject(message); /* Array ?*/ var isArray = _lodash2['default'].isArray(message); var isArguments = _lodash2['default'].isArguments(message); var isTypedArray = _lodash2['default'].isTypedArray(message); var useStdErr = isError || isFunction || isNaN || isUndefined; var messager = useStdErr ? stdErr : stdOut; if (useStdErr) { var errMsg = [isError ? '' + message : '', isNaN ? 'value is not a number' : '', isUndefined ? 'value is undefined' : '', isFunction ? 'value is a function' : ''].join(''); theme.writeError(messager, errMsg, options); return message; } var isSimpleValue = isNull || isBoolean || isDate || isNumber || isRegExp || isString; if (isSimpleValue) { var simpleMsg = [isNull ? 'value is null' : '', isBoolean ? '' + message : '', isDate ? (0, _moment2['default'])(message).format() : '', isNumber ? '' + message : '', isRegExp ? '' + message : '', isString ? '' + message : ''].join(''); theme.writeSimpleValue(messager, simpleMsg, options); return message; } var isArr = isArray || isArguments || isTypedArray; if (isArr) { var isEmptyArray = _lodash2['default'].isEmpty(message); if (isEmptyArray) { theme.writeEmptyArray(messager, message, options); return message; } if (isArrayOfSimpleValues(message)) { theme.writeArrayOfSimpleValues(messager, message, options); return message; } if (isArrayOfSimpleObjects(message)) { theme.writeArrayOfSimpleObjects(messager, message, options); return message; } theme.writeObject(messager, message, options); return message; } var isObj = isObject || isPlainObject; if (isObj) { var messageObj = isPlainObject ? message : _lodash2['default'].toPlainObject(message); theme.writeObject(messager, messageObj, options); return message; } }; return { log: log }; }; module.exports = exports['default'];