47 lines
1.6 KiB
JavaScript
47 lines
1.6 KiB
JavaScript
|
"use strict";
|
||
|
|
||
|
exports.__esModule = true;
|
||
|
exports.default = printValue;
|
||
|
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;
|
||
|
}
|
||
|
|
||
|
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);
|
||
|
}
|
||
|
|
||
|
module.exports = exports["default"];
|