var toString = Object.prototype.toString; var errorToString = Error.prototype.toString; var regExpToString = RegExp.prototype.toString; var symbolToString = typeof Symbol !== 'undefined' ? Symbol.prototype.toString : function () { return ''; }; var SYMBOL_REGEXP = /^Symbol\((.*)\)(.*)$/; function printNumber(val) { if (val != +val) return 'NaN'; var isNegativeZero = val === 0 && 1 / val < 0; return isNegativeZero ? '-0' : '' + val; } function printSimpleValue(val, quoteStrings) { if (quoteStrings === void 0) { quoteStrings = false; } if (val == null || val === true || val === false) return '' + val; var typeOf = typeof val; if (typeOf === 'number') return printNumber(val); if (typeOf === 'string') return quoteStrings ? "\"" + val + "\"" : val; if (typeOf === 'function') return '[Function ' + (val.name || 'anonymous') + ']'; if (typeOf === 'symbol') return symbolToString.call(val).replace(SYMBOL_REGEXP, 'Symbol($1)'); var tag = toString.call(val).slice(8, -1); if (tag === 'Date') return isNaN(val.getTime()) ? '' + val : val.toISOString(val); if (tag === 'Error' || val instanceof Error) return '[' + errorToString.call(val) + ']'; if (tag === 'RegExp') return regExpToString.call(val); return null; } export default function printValue(value, quoteStrings) { var result = printSimpleValue(value, quoteStrings); if (result !== null) return result; return JSON.stringify(value, function (key, value) { var result = printSimpleValue(this[key], quoteStrings); if (result !== null) return result; return value; }, 2); }