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