Skip to content

Commit 74db9f4

Browse files
BridgeARMylesBorins
authored andcommitted
assert,util: lazy load comparison functions
PR-URL: #20567 Reviewed-By: Gus Caplan <[email protected]> Reviewed-By: Matteo Collina <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Jeremiah Senkpiel <[email protected]>
1 parent 2361f64 commit 74db9f4

File tree

2 files changed

+22
-9
lines changed

2 files changed

+22
-9
lines changed

lib/assert.js

+14-4
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,6 @@
2121
'use strict';
2222

2323
const { Buffer } = require('buffer');
24-
const {
25-
isDeepEqual,
26-
isDeepStrictEqual
27-
} = require('internal/util/comparisons');
2824
const { codes: {
2925
ERR_AMBIGUOUS_ARGUMENT,
3026
ERR_INVALID_ARG_TYPE,
@@ -36,6 +32,15 @@ const { inspect, types: { isPromise, isRegExp } } = require('util');
3632
const { EOL } = require('internal/constants');
3733
const { NativeModule } = require('internal/bootstrap/loaders');
3834

35+
let isDeepEqual;
36+
let isDeepStrictEqual;
37+
38+
function lazyLoadComparison() {
39+
const comparison = require('internal/util/comparisons');
40+
isDeepEqual = comparison.isDeepEqual;
41+
isDeepStrictEqual = comparison.isDeepStrictEqual;
42+
}
43+
3944
// Escape control characters but not \n and \t to keep the line breaks and
4045
// indentation intact.
4146
// eslint-disable-next-line no-control-regex
@@ -284,6 +289,7 @@ assert.notEqual = function notEqual(actual, expected, message) {
284289

285290
// The equivalence assertion tests a deep equality relation.
286291
assert.deepEqual = function deepEqual(actual, expected, message) {
292+
if (isDeepEqual === undefined) lazyLoadComparison();
287293
if (!isDeepEqual(actual, expected)) {
288294
innerFail({
289295
actual,
@@ -297,6 +303,7 @@ assert.deepEqual = function deepEqual(actual, expected, message) {
297303

298304
// The non-equivalence assertion tests for any deep inequality.
299305
assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
306+
if (isDeepEqual === undefined) lazyLoadComparison();
300307
if (isDeepEqual(actual, expected)) {
301308
innerFail({
302309
actual,
@@ -310,6 +317,7 @@ assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
310317
/* eslint-enable */
311318

312319
assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
320+
if (isDeepEqual === undefined) lazyLoadComparison();
313321
if (!isDeepStrictEqual(actual, expected)) {
314322
innerFail({
315323
actual,
@@ -323,6 +331,7 @@ assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
323331

324332
assert.notDeepStrictEqual = notDeepStrictEqual;
325333
function notDeepStrictEqual(actual, expected, message) {
334+
if (isDeepEqual === undefined) lazyLoadComparison();
326335
if (isDeepStrictEqual(actual, expected)) {
327336
innerFail({
328337
actual,
@@ -439,6 +448,7 @@ function expectedException(actual, expected, msg) {
439448
if (expected instanceof Error) {
440449
keys.push('name', 'message');
441450
}
451+
if (isDeepEqual === undefined) lazyLoadComparison();
442452
for (const key of keys) {
443453
if (typeof actual[key] === 'string' &&
444454
isRegExp(expected[key]) &&

lib/util.js

+8-5
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,6 @@ const {
6464
isTypedArray
6565
} = types;
6666

67-
const {
68-
isDeepStrictEqual
69-
} = require('internal/util/comparisons');
70-
7167
const {
7268
customInspectSymbol,
7369
deprecate,
@@ -95,6 +91,7 @@ const dateToISOString = Date.prototype.toISOString;
9591
const errorToString = Error.prototype.toString;
9692

9793
let CIRCULAR_ERROR_MESSAGE;
94+
let internalDeepEqual;
9895

9996
/* eslint-disable */
10097
const strEscapeSequencesRegExp = /[\x00-\x1f\x27\x5c]/;
@@ -1261,7 +1258,13 @@ module.exports = exports = {
12611258
isArray: Array.isArray,
12621259
isBoolean,
12631260
isBuffer,
1264-
isDeepStrictEqual,
1261+
isDeepStrictEqual(a, b) {
1262+
if (internalDeepEqual === undefined) {
1263+
internalDeepEqual = require('internal/util/comparisons')
1264+
.isDeepStrictEqual;
1265+
}
1266+
return internalDeepEqual(a, b);
1267+
},
12651268
isNull,
12661269
isNullOrUndefined,
12671270
isNumber,

0 commit comments

Comments
 (0)