qlogger
Version:
very fast easily customizable logger
47 lines (45 loc) • 1.44 kB
JavaScript
var jex = require('json-exec');
function toJsonString( str ) {
// return ((str.length > 80) || /[\"\\\x00-\x1f\0x007f-\0xffff]/g.test(str)) ? JSON.stringify(str) : '"' + str + '"';
return ((str.length > 80) || /[^0-9a-zA-Z_-]/g.test(str)) ? JSON.stringify(str) : '"' + str + '"';
}
function toJsonHash( hash ) {
var str = '';
var keys = Object.keys(hash);
for (var i=0; i<keys.length; i++) {
var key = keys[i], value = hash[key];
var valueStr = toJsonValue(value);
if (valueStr !== undefined) {
if (str) str += ',';
str += toJsonString(key) + ':' + valueStr;
}
}
return str;
}
function toJsonArray( array ) {
var str = '';
for (var i = 0; i < array.length; i++) {
if (str) str += ',';
var valueStr = toJsonValue(array[i]);
str += valueStr !== undefined ? valueStr : 'null';
}
return str;
}
function toJsonValue( value ) {
switch (typeof value) {
case 'string':
return toJsonString(value);
case 'number':
case 'boolean':
return '' + value;
case 'object':
if (value === null) return 'null';
if (typeof value.toJSON === 'function') return toJsonString(value.toJSON());
if (Array.isArray(value)) return '[' + toJsonArray(array) + ']';
return '{' + toJsonHash(value) + '}';
default:
case 'undefined':
case 'function':
break;
}
}