function deepCopy(x) { if (x == null || x == undefined) { return x; } else if (x instanceof Date) { return new Date(x.valueOf()); } else if (x instanceof Array) { const res = new Array(); x.forEach((element) => res.push(deepCopy(element))); return res; } else if (typeof x === "object") { const res = {}; for (const prop in x) { res[prop] = deepCopy(x[prop]); } const sort = (o) => Object.keys(o) .sort() .reduce((final, key) => { final[key] = o[key]; return final; }, {}); return sort(res); } else { return x; } } function deepEquality(a, b) { if (typeof a !== typeof b) { return false; } return JSON.stringify(deepCopy(a)) === JSON.stringify(deepCopy(b)); } module.exports = { deepCopy, deepEquality, };