79 lines
2.3 KiB
JavaScript

'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports.default =
jsonStringify;var _repeatString = require('repeat-string');var _repeatString2 = _interopRequireDefault(_repeatString);var _type = require('./type');var _type2 = _interopRequireDefault(_type);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}function jsonStringify(object, depth) {
depth = depth || 1;
switch ((0, _type2.default)(object)) {
case 'boolean':
case 'regexp':
case 'symbol':
return object.toString();
case 'null':
case 'undefined':
return '[' + object + ']';
case 'array':
case 'object':
return jsonStringifyProperties(object, depth);
case 'number':
if (object === 0 && 1 / object === -Infinity) {
return '-0';
} else {
return object.toString();
}
case 'date':
return jsonStringifyDate(object);
case 'buffer':
return jsonStringifyBuffer(object, depth);
default:
if (object === '[Function]' || object === '[Circular]') {
return object;
} else {
return JSON.stringify(object); // string
}}
}
function jsonStringifyBuffer(object, depth) {var _object$toJSON =
object.toJSON(),data = _object$toJSON.data;
return '[Buffer: ' + jsonStringify(data, depth) + ']';
}
function jsonStringifyDate(object) {
var str = void 0;
if (isNaN(object.getTime())) {
str = object.toString();
} else {
str = object.toISOString();
}
return '[Date: ' + str + ']';
}
function jsonStringifyProperties(object, depth) {
var space = 2 * depth;
var start = (0, _type2.default)(object) === 'array' ? '[' : '{';
var end = (0, _type2.default)(object) === 'array' ? ']' : '}';
var length = typeof object.length === 'number' ? object.length : Object.keys(object).length;
var addedProperties = 0;
var str = start;
for (var prop in object) {
if (Object.prototype.hasOwnProperty.call(object, prop)) {
addedProperties += 1;
str += '\n' + (0, _repeatString2.default)(' ', space) + (
(0, _type2.default)(object) === 'array' ? '' : '"' + prop + '": ') +
jsonStringify(object[prop], depth + 1) + (
addedProperties === length ? '' : ',');
}
}
if (str.length !== 1) {
str += '\n' + (0, _repeatString2.default)(' ', space - 2);
}
return str + end;
}