safe-json-value
Version:
⛑️ JSON serialization should never fail
72 lines (66 loc) • 891 B
JavaScript
import{recurseArray}from"./array.js";
import{isObject}from"./is_object.js";
import{recurseObject}from"./object.js";
export const checkCycleThenRecurse=({
value,
changes,
ancestors,
path,
size,
newSize,
maxSize,
recurse
})=>{
if(!isObject(value)){
return{value,size:newSize}
}
if(ancestors.has(value)){
changes.push({
path,
oldValue:value,
newValue:undefined,
reason:"unsafeCycle"
});
return{value:undefined,size}
}
ancestors.add(value);
const{value:valueA,size:newSizeA}=recurseValue({
value,
changes,
ancestors,
path,
size:newSize,
maxSize,
recurse
});
ancestors.delete(value);
return{value:valueA,size:newSizeA}
};
const recurseValue=({
value,
changes,
ancestors,
path,
size,
maxSize,
recurse
})=>
Array.isArray(value)?
recurseArray({
array:value,
changes,
ancestors,
path,
size,
maxSize,
recurse
}):
recurseObject({
object:value,
changes,
ancestors,
path,
size,
maxSize,
recurse
});