Skip to content

Commit 87e11ab

Browse files
lib: simplify isDeepStrictEqual options handling
1 parent b3a4f56 commit 87e11ab

File tree

5 files changed

+22
-30
lines changed

5 files changed

+22
-30
lines changed

doc/api/util.md

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1565,16 +1565,15 @@ changes:
15651565

15661566
* `val1` {any}
15671567
* `val2` {any}
1568-
* `options` {Object}
1569-
* `skipPrototypeComparison` {boolean} If `true`, prototype and constructor
1570-
comparison is skipped during deep strict equality check. **Default:** `false`.
1568+
* `skipPrototypeComparison` {boolean} If `true`, prototype and constructor
1569+
comparison is skipped during deep strict equality check. **Default:** `false`.
15711570
* Returns: {boolean}
15721571

15731572
Returns `true` if there is deep strict equality between `val1` and `val2`.
15741573
Otherwise, returns `false`.
15751574

15761575
By default, deep strict equality includes comparison of object prototypes and
1577-
constructors. When `options.skipPrototypeComparison` is `true`, objects with
1576+
constructors. When `skipPrototypeComparison` is `true`, objects with
15781577
different prototypes or constructors can still be considered equal if their
15791578
enumerable properties are deeply strictly equal.
15801579

@@ -1600,7 +1599,7 @@ const bar = new Bar(1);
16001599
console.log(util.isDeepStrictEqual(foo, bar));
16011600
// false
16021601

1603-
console.log(util.isDeepStrictEqual(foo, bar, { skipPrototypeComparison: true }));
1602+
console.log(util.isDeepStrictEqual(foo, bar, true));
16041603
// true
16051604
```
16061605

lib/assert.js

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -313,10 +313,7 @@ Assert.prototype.deepStrictEqual = function deepStrictEqual(actual, expected, me
313313
throw new ERR_MISSING_ARGS('actual', 'expected');
314314
}
315315
if (isDeepEqual === undefined) lazyLoadComparison();
316-
if (!isDeepStrictEqual(actual, expected, {
317-
__proto__: null,
318-
skipPrototypeComparison: this?.[kOptions]?.skipPrototypeComparison,
319-
})) {
316+
if (!isDeepStrictEqual(actual, expected, this?.[kOptions]?.skipPrototypeComparison)) {
320317
innerFail({
321318
actual,
322319
expected,
@@ -342,10 +339,7 @@ function notDeepStrictEqual(actual, expected, message) {
342339
throw new ERR_MISSING_ARGS('actual', 'expected');
343340
}
344341
if (isDeepEqual === undefined) lazyLoadComparison();
345-
if (isDeepStrictEqual(actual, expected, {
346-
__proto__: null,
347-
skipPrototypeComparison: this?.[kOptions]?.skipPrototypeComparison,
348-
})) {
342+
if (isDeepStrictEqual(actual, expected, this?.[kOptions]?.skipPrototypeComparison)) {
349343
innerFail({
350344
actual,
351345
expected,

lib/internal/util/comparisons.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1028,8 +1028,8 @@ module.exports = {
10281028
isDeepEqual(val1, val2) {
10291029
return detectCycles(val1, val2, kLoose);
10301030
},
1031-
isDeepStrictEqual(val1, val2, options) {
1032-
if (options?.skipPrototypeComparison) {
1031+
isDeepStrictEqual(val1, val2, skipPrototypeComparison) {
1032+
if (skipPrototypeComparison) {
10331033
return detectCycles(val1, val2, kStrictWithoutPrototypes);
10341034
}
10351035
return detectCycles(val1, val2, kStrict);

lib/util.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -487,11 +487,11 @@ module.exports = {
487487
isArray: deprecate(ArrayIsArray,
488488
'The `util.isArray` API is deprecated. Please use `Array.isArray()` instead.',
489489
'DEP0044'),
490-
isDeepStrictEqual(a, b, options) {
490+
isDeepStrictEqual(a, b, skipPrototypeComparison) {
491491
if (internalDeepEqual === undefined) {
492492
internalDeepEqual = require('internal/util/comparisons').isDeepStrictEqual;
493493
}
494-
return internalDeepEqual(a, b, options);
494+
return internalDeepEqual(a, b, skipPrototypeComparison);
495495
},
496496
promisify,
497497
stripVTControlCharacters,

test/parallel/test-util-isDeepStrictEqual.js

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -94,9 +94,9 @@ function notUtilIsDeepStrict(a, b) {
9494
utilIsDeepStrict(a, b);
9595
}
9696

97-
// Handle `skipPrototypeComparison` option for isDeepStrictEqual
97+
// Handle `skipPrototypeComparison` for isDeepStrictEqual
9898
{
99-
test('util.isDeepStrictEqual with skipPrototypeComparison option', () => {
99+
test('util.isDeepStrictEqual with skipPrototypeComparison', () => {
100100
function ClassA(value) { this.value = value; }
101101

102102
function ClassB(value) { this.value = value; }
@@ -105,22 +105,22 @@ function notUtilIsDeepStrict(a, b) {
105105
const objB = new ClassB(42);
106106

107107
assert.strictEqual(util.isDeepStrictEqual(objA, objB), false);
108-
assert.strictEqual(util.isDeepStrictEqual(objA, objB, { skipPrototypeComparison: true }), true);
108+
assert.strictEqual(util.isDeepStrictEqual(objA, objB, true), true);
109109

110110
const objC = new ClassB(99);
111-
assert.strictEqual(util.isDeepStrictEqual(objA, objC, { skipPrototypeComparison: true }), false);
111+
assert.strictEqual(util.isDeepStrictEqual(objA, objC, true), false);
112112

113113
const nestedA = { obj: new ClassA('test'), num: 123 };
114114
const nestedB = { obj: new ClassB('test'), num: 123 };
115115

116116
assert.strictEqual(util.isDeepStrictEqual(nestedA, nestedB), false);
117-
assert.strictEqual(util.isDeepStrictEqual(nestedA, nestedB, { skipPrototypeComparison: true }), true);
117+
assert.strictEqual(util.isDeepStrictEqual(nestedA, nestedB, true), true);
118118

119119
const uint8Array = new Uint8Array([1, 2, 3]);
120120
const buffer = Buffer.from([1, 2, 3]);
121121

122122
assert.strictEqual(util.isDeepStrictEqual(uint8Array, buffer), false);
123-
assert.strictEqual(util.isDeepStrictEqual(uint8Array, buffer, { skipPrototypeComparison: true }), true);
123+
assert.strictEqual(util.isDeepStrictEqual(uint8Array, buffer, true), true);
124124
});
125125

126126
test('util.isDeepStrictEqual skipPrototypeComparison with complex scenarios', () => {
@@ -135,24 +135,23 @@ function notUtilIsDeepStrict(a, b) {
135135
const legacyParent = new LegacyParent(1);
136136

137137
assert.strictEqual(util.isDeepStrictEqual(modernParent, legacyParent), false);
138-
assert.strictEqual(util.isDeepStrictEqual(modernParent, legacyParent, { skipPrototypeComparison: true }), true);
138+
assert.strictEqual(util.isDeepStrictEqual(modernParent, legacyParent, true), true);
139139

140140
const modern = new Child(1, 2);
141141
const legacy = new LegacyChild(1, 2);
142142

143143
assert.strictEqual(util.isDeepStrictEqual(modern, legacy), false);
144-
assert.strictEqual(util.isDeepStrictEqual(modern, legacy, { skipPrototypeComparison: true }), true);
144+
assert.strictEqual(util.isDeepStrictEqual(modern, legacy, true), true);
145145

146146
const literal = { name: 'test', values: [1, 2, 3] };
147147
function Constructor(name, values) { this.name = name; this.values = values; }
148148
const constructed = new Constructor('test', [1, 2, 3]);
149149

150150
assert.strictEqual(util.isDeepStrictEqual(literal, constructed), false);
151-
assert.strictEqual(util.isDeepStrictEqual(literal, constructed, { skipPrototypeComparison: true }), true);
151+
assert.strictEqual(util.isDeepStrictEqual(literal, constructed, true), true);
152152

153-
assert.strictEqual(util.isDeepStrictEqual(literal, constructed, {}), false);
154-
assert.strictEqual(util.isDeepStrictEqual(literal, constructed, { skipPrototypeComparison: false }), false);
155-
assert.strictEqual(util.isDeepStrictEqual(literal, constructed, { skipPrototypeComparison: null }), false);
156-
assert.strictEqual(util.isDeepStrictEqual(literal, constructed, { skipPrototypeComparison: undefined }), false);
153+
assert.strictEqual(util.isDeepStrictEqual(literal, constructed, false), false);
154+
assert.strictEqual(util.isDeepStrictEqual(literal, constructed, null), false);
155+
assert.strictEqual(util.isDeepStrictEqual(literal, constructed, undefined), false);
157156
});
158157
}

0 commit comments

Comments
 (0)