Skip to content

Commit f66b757

Browse files
committed
fix: add tests covering nested react objects
fixes #264
1 parent c40fadb commit f66b757

File tree

3 files changed

+135
-1
lines changed

3 files changed

+135
-1
lines changed

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
"@commitlint/config-conventional": "^19.6.0",
4444
"@react-hookz/eslint-config": "^4.1.6",
4545
"@react-hookz/eslint-formatter-gha": "^3.0.2",
46+
"@semantic-release/exec": "^6.0.3",
4647
"@vitest/browser": "^2.1.8",
4748
"@vitest/coverage-v8": "^2.1.8",
4849
"commitlint": "^19.6.0",
@@ -51,6 +52,7 @@
5152
"fast-deep-equal": "^3.1.3",
5253
"husky": "^9.0.10",
5354
"lint-staged": "^15.2.1",
55+
"pinst": "^3.0.0",
5456
"react-fast-compare": "^3.2.2",
5557
"rimraf": "^6.0.1",
5658
"semantic-release": "^24.2.0",

src/index.test.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,24 @@ runSuite(simpleTestSuites, isEqualReactSimple);
3030

3131
runSuite(complexTestSuites, isEqual);
3232
runSuite(complexTestSuites, isEqualReact);
33+
34+
it('should not throw on nested react elements with circular references #264', () => {
35+
const children1: Record<any, any> = {a: 1, bax: 'qux', foo: 'bar', $$typeof: 'component'};
36+
children1.__v = children1;
37+
const children2: Record<any, any> = {a: 1, bax: 'qux', foo: 'bar', $$typeof: 'component'};
38+
children2.__v = children2;
39+
40+
const propsPrevious = {children: children1};
41+
const propsNext = {children: children2};
42+
43+
expect(() => {
44+
isEqualReact(propsPrevious, propsNext);
45+
}).not.toThrow();
46+
expect(() => {
47+
isEqualReactSimple(propsPrevious, propsNext);
48+
}).not.toThrow();
49+
50+
expect(() => {
51+
isEqual(propsPrevious, propsNext);
52+
}).toThrow('Maximum call stack size exceeded');
53+
});

yarn.lock

Lines changed: 112 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1265,6 +1265,7 @@ __metadata:
12651265
"@commitlint/config-conventional": "npm:^19.6.0"
12661266
"@react-hookz/eslint-config": "npm:^4.1.6"
12671267
"@react-hookz/eslint-formatter-gha": "npm:^3.0.2"
1268+
"@semantic-release/exec": "npm:^6.0.3"
12681269
"@vitest/browser": "npm:^2.1.8"
12691270
"@vitest/coverage-v8": "npm:^2.1.8"
12701271
commitlint: "npm:^19.6.0"
@@ -1273,6 +1274,7 @@ __metadata:
12731274
fast-deep-equal: "npm:^3.1.3"
12741275
husky: "npm:^9.0.10"
12751276
lint-staged: "npm:^15.2.1"
1277+
pinst: "npm:^3.0.0"
12761278
react-fast-compare: "npm:^3.2.2"
12771279
rimraf: "npm:^6.0.1"
12781280
semantic-release: "npm:^24.2.0"
@@ -1491,13 +1493,36 @@ __metadata:
14911493
languageName: node
14921494
linkType: hard
14931495

1496+
"@semantic-release/error@npm:^3.0.0":
1497+
version: 3.0.0
1498+
resolution: "@semantic-release/error@npm:3.0.0"
1499+
checksum: 10c0/51f06d11186a6efc543b44996ca1c368a77c6ed18dd823f0362188c37b7ef32f3580bd17654f594e6a72b931ebe69b44bbcb1ee16c755a1d3e44dcb652b47275
1500+
languageName: node
1501+
linkType: hard
1502+
14941503
"@semantic-release/error@npm:^4.0.0":
14951504
version: 4.0.0
14961505
resolution: "@semantic-release/error@npm:4.0.0"
14971506
checksum: 10c0/c97fcfbd341765f7c7430bdb32d5f04c61ee15c3eeec374823fbb157640ad03453f24e3a85241bddb29e193b69c6aab480e4d16e76adabb052c01bfbd1698c18
14981507
languageName: node
14991508
linkType: hard
15001509

1510+
"@semantic-release/exec@npm:^6.0.3":
1511+
version: 6.0.3
1512+
resolution: "@semantic-release/exec@npm:6.0.3"
1513+
dependencies:
1514+
"@semantic-release/error": "npm:^3.0.0"
1515+
aggregate-error: "npm:^3.0.0"
1516+
debug: "npm:^4.0.0"
1517+
execa: "npm:^5.0.0"
1518+
lodash: "npm:^4.17.4"
1519+
parse-json: "npm:^5.0.0"
1520+
peerDependencies:
1521+
semantic-release: ">=18.0.0"
1522+
checksum: 10c0/87c1f5dcd96e8b51cfa084ff2fd570fa1e2b6368064fba54403797636279e1159b62c199b3e8219d31189acfe8aa6f1b596f6cda6508fd3e1a7e5739c86a1a65
1523+
languageName: node
1524+
linkType: hard
1525+
15011526
"@semantic-release/github@npm:^11.0.0":
15021527
version: 11.0.1
15031528
resolution: "@semantic-release/github@npm:11.0.1"
@@ -4299,6 +4324,23 @@ __metadata:
42994324
languageName: node
43004325
linkType: hard
43014326

4327+
"execa@npm:^5.0.0":
4328+
version: 5.1.1
4329+
resolution: "execa@npm:5.1.1"
4330+
dependencies:
4331+
cross-spawn: "npm:^7.0.3"
4332+
get-stream: "npm:^6.0.0"
4333+
human-signals: "npm:^2.1.0"
4334+
is-stream: "npm:^2.0.0"
4335+
merge-stream: "npm:^2.0.0"
4336+
npm-run-path: "npm:^4.0.1"
4337+
onetime: "npm:^5.1.2"
4338+
signal-exit: "npm:^3.0.3"
4339+
strip-final-newline: "npm:^2.0.0"
4340+
checksum: 10c0/c8e615235e8de4c5addf2fa4c3da3e3aa59ce975a3e83533b4f6a71750fb816a2e79610dc5f1799b6e28976c9ae86747a36a606655bf8cb414a74d8d507b304f
4341+
languageName: node
4342+
linkType: hard
4343+
43024344
"execa@npm:^8.0.0, execa@npm:~8.0.1":
43034345
version: 8.0.1
43044346
resolution: "execa@npm:8.0.1"
@@ -5043,6 +5085,13 @@ __metadata:
50435085
languageName: node
50445086
linkType: hard
50455087

5088+
"human-signals@npm:^2.1.0":
5089+
version: 2.1.0
5090+
resolution: "human-signals@npm:2.1.0"
5091+
checksum: 10c0/695edb3edfcfe9c8b52a76926cd31b36978782062c0ed9b1192b36bebc75c4c87c82e178dfcb0ed0fc27ca59d434198aac0bd0be18f5781ded775604db22304a
5092+
languageName: node
5093+
linkType: hard
5094+
50465095
"human-signals@npm:^5.0.0":
50475096
version: 5.0.0
50485097
resolution: "human-signals@npm:5.0.0"
@@ -5583,6 +5632,13 @@ __metadata:
55835632
languageName: node
55845633
linkType: hard
55855634

5635+
"is-stream@npm:^2.0.0":
5636+
version: 2.0.1
5637+
resolution: "is-stream@npm:2.0.1"
5638+
checksum: 10c0/7c284241313fc6efc329b8d7f08e16c0efeb6baab1b4cd0ba579eb78e5af1aa5da11e68559896a2067cd6c526bd29241dda4eb1225e627d5aa1a89a76d4635a5
5639+
languageName: node
5640+
linkType: hard
5641+
55865642
"is-stream@npm:^3.0.0":
55875643
version: 3.0.0
55885644
resolution: "is-stream@npm:3.0.0"
@@ -6341,6 +6397,13 @@ __metadata:
63416397
languageName: node
63426398
linkType: hard
63436399

6400+
"lodash@npm:^4.17.4":
6401+
version: 4.17.21
6402+
resolution: "lodash@npm:4.17.21"
6403+
checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c
6404+
languageName: node
6405+
linkType: hard
6406+
63446407
"log-update@npm:^6.1.0":
63456408
version: 6.1.0
63466409
resolution: "log-update@npm:6.1.0"
@@ -7023,6 +7086,13 @@ __metadata:
70237086
languageName: node
70247087
linkType: hard
70257088

7089+
"mimic-fn@npm:^2.1.0":
7090+
version: 2.1.0
7091+
resolution: "mimic-fn@npm:2.1.0"
7092+
checksum: 10c0/b26f5479d7ec6cc2bce275a08f146cf78f5e7b661b18114e2506dd91ec7ec47e7a25bf4360e5438094db0560bcc868079fb3b1fb3892b833c1ecbf63f80c95a4
7093+
languageName: node
7094+
linkType: hard
7095+
70267096
"mimic-fn@npm:^4.0.0":
70277097
version: 4.0.0
70287098
resolution: "mimic-fn@npm:4.0.0"
@@ -7532,6 +7602,15 @@ __metadata:
75327602
languageName: node
75337603
linkType: hard
75347604

7605+
"npm-run-path@npm:^4.0.1":
7606+
version: 4.0.1
7607+
resolution: "npm-run-path@npm:4.0.1"
7608+
dependencies:
7609+
path-key: "npm:^3.0.0"
7610+
checksum: 10c0/6f9353a95288f8455cf64cbeb707b28826a7f29690244c1e4bb61ec573256e021b6ad6651b394eb1ccfd00d6ec50147253aba2c5fe58a57ceb111fad62c519ac
7611+
languageName: node
7612+
linkType: hard
7613+
75357614
"npm-run-path@npm:^5.1.0":
75367615
version: 5.3.0
75377616
resolution: "npm-run-path@npm:5.3.0"
@@ -7722,6 +7801,15 @@ __metadata:
77227801
languageName: node
77237802
linkType: hard
77247803

7804+
"onetime@npm:^5.1.2":
7805+
version: 5.1.2
7806+
resolution: "onetime@npm:5.1.2"
7807+
dependencies:
7808+
mimic-fn: "npm:^2.1.0"
7809+
checksum: 10c0/ffcef6fbb2692c3c40749f31ea2e22677a876daea92959b8a80b521d95cca7a668c884d8b2045d1d8ee7d56796aa405c405462af112a1477594cc63531baeb8f
7810+
languageName: node
7811+
linkType: hard
7812+
77257813
"onetime@npm:^6.0.0":
77267814
version: 6.0.0
77277815
resolution: "onetime@npm:6.0.0"
@@ -8101,7 +8189,7 @@ __metadata:
81018189
languageName: node
81028190
linkType: hard
81038191

8104-
"path-key@npm:^3.1.0":
8192+
"path-key@npm:^3.0.0, path-key@npm:^3.1.0":
81058193
version: 3.1.1
81068194
resolution: "path-key@npm:3.1.1"
81078195
checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c
@@ -8214,6 +8302,15 @@ __metadata:
82148302
languageName: node
82158303
linkType: hard
82168304

8305+
"pinst@npm:^3.0.0":
8306+
version: 3.0.0
8307+
resolution: "pinst@npm:3.0.0"
8308+
bin:
8309+
pinst: bin.js
8310+
checksum: 10c0/abb1ed62ea2acb2207a7a860715bdb26ecbde74ede8fad5f6200194f3e22db25e2b7a49af05e5cc7fc05384709c651e0000323f0077d7239060c4b68c8acd428
8311+
languageName: node
8312+
linkType: hard
8313+
82178314
"pkg-conf@npm:^2.1.0":
82188315
version: 2.1.0
82198316
resolution: "pkg-conf@npm:2.1.0"
@@ -9084,6 +9181,13 @@ __metadata:
90849181
languageName: node
90859182
linkType: hard
90869183

9184+
"signal-exit@npm:^3.0.3":
9185+
version: 3.0.7
9186+
resolution: "signal-exit@npm:3.0.7"
9187+
checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912
9188+
languageName: node
9189+
linkType: hard
9190+
90879191
"signal-exit@npm:^4.0.1, signal-exit@npm:^4.1.0":
90889192
version: 4.1.0
90899193
resolution: "signal-exit@npm:4.1.0"
@@ -9494,6 +9598,13 @@ __metadata:
94949598
languageName: node
94959599
linkType: hard
94969600

9601+
"strip-final-newline@npm:^2.0.0":
9602+
version: 2.0.0
9603+
resolution: "strip-final-newline@npm:2.0.0"
9604+
checksum: 10c0/bddf8ccd47acd85c0e09ad7375409d81653f645fda13227a9d459642277c253d877b68f2e5e4d819fe75733b0e626bac7e954c04f3236f6d196f79c94fa4a96f
9605+
languageName: node
9606+
linkType: hard
9607+
94979608
"strip-final-newline@npm:^3.0.0":
94989609
version: 3.0.0
94999610
resolution: "strip-final-newline@npm:3.0.0"

0 commit comments

Comments
 (0)