solace
Version:
Alternative to console log which automatically beautifies the output
149 lines (115 loc) • 5.17 kB
JavaScript
'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'];