blakeembrey/javascript-stringify

allow identifier when maxDepth/maxValues is hit

Opened this issue · 1 comments

currently when using maxDepth/ maxValue, there is no way to know if a item is an empty object/undefined or if its been truncated by this param, I propose adding either a custom text param, or at least a flag to set default text variables to tell the client that the data is truncated and not in fact empty/undefined

max depth example

//currently
const obj = {"hello":{"world":{"i am":"an Object"}}}
stringify(obj,null,null,{maxDepth:2}); 
//outputs: '{hello:{world:{}}}'

// unknown if depth has been reached or if "world" key just goes to an empty object

//feature with same object
const str = "[JSON max depth has been reached]"
stringify(obj,null,null,{maxDepth:2, maxDepthText: str}); 
//outputs:'{hello:{world:[JSON max depth has been reached]}}'

max value example

//currently
const obj2 = {"hello":{"world":{"i": "am","an": "Object"}, test1: true, test2:false}}
stringify(obj2,null,null,{maxValues:3}); 
//outputs:'{hello:{world:{}}}'

// unknown if value limt has been reached or if the value for the  "hello" key just has an object with a "world" key

//feature with same object
const str = "max values for object reached"
stringify(obj,null,null,{maxValues:3, maxValuesText: str}); 
//outputs: '{hello:{world:{"..." : "max values for object reached" }, "...": "max values for object reached"}}'
// notice not "..." for both test1 and test2, just 1 "..." for the object that is missing keys

This is a great idea. Could use a Symbol for this. Or even allow specifying any value that should be stringified itself (or already stringified).