aboutsummaryrefslogtreecommitdiff
path: root/node_modules/es5-ext/json/safe-stringify.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/es5-ext/json/safe-stringify.js')
-rw-r--r--node_modules/es5-ext/json/safe-stringify.js41
1 files changed, 41 insertions, 0 deletions
diff --git a/node_modules/es5-ext/json/safe-stringify.js b/node_modules/es5-ext/json/safe-stringify.js
new file mode 100644
index 000000000..f2562541a
--- /dev/null
+++ b/node_modules/es5-ext/json/safe-stringify.js
@@ -0,0 +1,41 @@
+"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(",") +
+ "}"
+ );
+ }
+};