mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
26 lines
809 B
26 lines
809 B
'use strict';
|
|
|
|
var compact = require('../array/#/compact')
|
|
, isObject = require('../object/is-object')
|
|
, toArray = require('../object/to-array')
|
|
|
|
, isArray = Array.isArray, stringify = JSON.stringify;
|
|
|
|
module.exports = function self(value/*, replacer, space*/) {
|
|
var replacer = arguments[1], space = arguments[2];
|
|
try {
|
|
return stringify(value, replacer, space);
|
|
} catch (e) {
|
|
if (!isObject(value)) return;
|
|
if (typeof value.toJSON === 'function') return;
|
|
if (isArray(value)) {
|
|
return '[' +
|
|
compact.call(value.map(function (value) { return self(value, replacer, space); })) + ']';
|
|
}
|
|
return '{' + compact.call(toArray(value, function (value, key) {
|
|
value = self(value, replacer, space);
|
|
if (!value) return;
|
|
return stringify(key) + ':' + value;
|
|
})).join(',') + '}';
|
|
}
|
|
};
|
|
|