38 lines
888 B
JavaScript
38 lines
888 B
JavaScript
"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(",") +
|
|
"}"
|
|
);
|
|
}
|
|
};
|