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.

38 lines
887 B

4 years ago
"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 null;
if (typeof value.toJSON === "function") return null;
if (isArray(value)) {
return (
"[" +
compact.call(value.map(function (item) { return self(item, replacer, space); })) +
"]"
);
}
return (
"{" +
compact
.call(
toArray(value, function (item, key) {
item = self(item, replacer, space);
if (!item) return null;
return stringify(key) + ":" + item;
})
)
.join(",") +
"}"
);
}
};