Skip to content

Commit 08cdfbc

Browse files
Merge pull request #190 from haggholm/avoid-useless-mutation
Do not mutate objects when values do not change
2 parents 8e8fb5a + 81eb6c0 commit 08cdfbc

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

lib/dereference.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,19 @@ function crawl (obj, path, pathFromRoot, parents, $refs, options) {
5757
if ($Ref.isAllowed$Ref(value, options)) {
5858
dereferenced = dereference$Ref(value, keyPath, keyPathFromRoot, parents, $refs, options);
5959
circular = dereferenced.circular;
60-
obj[key] = dereferenced.value;
60+
// Avoid pointless mutations; breaks frozen objects to no profit
61+
if (obj[key] !== dereferenced.value) {
62+
obj[key] = dereferenced.value;
63+
}
6164
}
6265
else {
6366
if (parents.indexOf(value) === -1) {
6467
dereferenced = crawl(value, keyPath, keyPathFromRoot, parents, $refs, options);
6568
circular = dereferenced.circular;
66-
obj[key] = dereferenced.value;
69+
// Avoid pointless mutations; breaks frozen objects to no profit
70+
if (obj[key] !== dereferenced.value) {
71+
obj[key] = dereferenced.value;
72+
}
6773
}
6874
else {
6975
circular = foundCircularReference(keyPath, $refs, options);

0 commit comments

Comments
 (0)