-
-
Notifications
You must be signed in to change notification settings - Fork 306
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
recursion in deepEqual() on object graphs with cycles #434
Comments
Ugh, tested with |
Tested with Let me know if you'd accept a PR to switch to that? |
One thing you can do, is call a custom stringify on both objects, and then compare them after calling JSON parse on them. const obj1 = {}; // has circular references
const obj2 = {}; // has circular references
const parsed1 = JSON.parse(customStringify(obj1));
const parsed2 = JSON.parse(customStringify(obj2)); // then compare the two parsed objects, with a deep equals routine Using a custom stringify function like this, which ignores circular references: export const customStringify = function (v: any) {
const cache = new Map();
return JSON.stringify(v, function (key, value) {
if (typeof value === 'object' && value !== null) {
if (cache.get(value)) {
// Circular reference found, discard key
return;
}
// Store value in our collection
cache.set(value, true);
}
return value;
});
}; |
My work-around for now is just to import A work-around won't provide good feedback though, for example I could just overwrite |
For starters, I wanted to see if The |
I'm really not a fan of switching which dep we're using here. I think the appropriate path is continuing to pursue the relevant change in |
@ljharb why? |
@ljharb I wasn't trying to be short with you, if I came off that way :-) I am genuinely asking, why wouldn't you switch to a more current/maintained package? From my perspective, What's better or more appropriate about enhancing |
why not both? use both libs? / make both libs available/exposed |
@ORESoftware how? (and why?) |
@mindplay-dk mainly because there could be any number of edge cases the tests (unfortunately) don't cover, so it could break people, and because the original author of I'd like to see a PR open on deep-equal, which could be reviewed, and then let's see if we can get it merged and released - before trying to make a potentially risky change in tape. |
I now maintain Follow inspect-js/node-deep-equal#19 for an underlying fix to support circular references. |
- See nodejs/node@d3aafd0 - Fixes #19 - Will allow tape-testing/tape#434 to be fixed
v2 of deep-equal will resolve this, which will be included in v5 of tape. |
deep-equal is upgraded in 898a6e7; closing. Once v5 is out, this will be resolved. |
I have an object graph with cycles, and I'm testing with
tape
, and it keeps on throwingRangeError: Maximum call stack size exceeded
.I traced it back to this issue in
deep-equal
.It was reported march'15, and it doesn't look like
deep-equal
has received much maintenance, so maybe it's time to consider switching to eitherfast-deep-equal
ordeep-eql
, both of which seem to be more popular and more recently active?Although I didn't see a test-case with circular references in any of those two projects' tests either.
If you let me know how you'd like to address this issue, I can try to help?
The text was updated successfully, but these errors were encountered: