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