node-powertools
Advanced tools
Comparing version 0.0.18 to 0.0.19
@@ -163,2 +163,6 @@ (function (root, factory) { | ||
Powertools.stringify = function (obj, replacer, spaces, cycleReplacer) { | ||
return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces); | ||
}; | ||
// Helpers | ||
@@ -182,2 +186,24 @@ function getKeys(obj, prefix) { | ||
// https://github.com/moll/json-stringify-safe/blob/master/stringify.js | ||
function serializer(replacer, cycleReplacer) { | ||
var stack = [], keys = [] | ||
if (cycleReplacer == null) cycleReplacer = function(key, value) { | ||
if (stack[0] === value) return "[Circular ~]" | ||
return "[Circular ~." + keys.slice(0, stack.indexOf(value)).join(".") + "]" | ||
} | ||
return function(key, value) { | ||
if (stack.length > 0) { | ||
var thisPos = stack.indexOf(this) | ||
~thisPos ? stack.splice(thisPos + 1) : stack.push(this) | ||
~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key) | ||
if (~stack.indexOf(value)) value = cycleReplacer.call(this, key, value) | ||
} | ||
else stack.push(value) | ||
return replacer == null ? value : replacer.call(this, key, value) | ||
} | ||
} | ||
function forceString(input) { | ||
@@ -184,0 +210,0 @@ if (typeof input === 'string') { |
{ | ||
"name": "node-powertools", | ||
"version": "0.0.18", | ||
"version": "0.0.19", | ||
"description": "Powerful assistive functions for Node and Browser environments.", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
@@ -163,2 +163,6 @@ (function (root, factory) { | ||
Powertools.stringify = function (obj, replacer, spaces, cycleReplacer) { | ||
return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces); | ||
}; | ||
// Helpers | ||
@@ -182,2 +186,24 @@ function getKeys(obj, prefix) { | ||
// https://github.com/moll/json-stringify-safe/blob/master/stringify.js | ||
function serializer(replacer, cycleReplacer) { | ||
var stack = [], keys = [] | ||
if (cycleReplacer == null) cycleReplacer = function(key, value) { | ||
if (stack[0] === value) return "[Circular ~]" | ||
return "[Circular ~." + keys.slice(0, stack.indexOf(value)).join(".") + "]" | ||
} | ||
return function(key, value) { | ||
if (stack.length > 0) { | ||
var thisPos = stack.indexOf(this) | ||
~thisPos ? stack.splice(thisPos + 1) : stack.push(this) | ||
~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key) | ||
if (~stack.indexOf(value)) value = cycleReplacer.call(this, key, value) | ||
} | ||
else stack.push(value) | ||
return replacer == null ? value : replacer.call(this, key, value) | ||
} | ||
} | ||
function forceString(input) { | ||
@@ -184,0 +210,0 @@ if (typeof input === 'string') { |
36302
737