Skip to content

Commit 17d95ea

Browse files
committed
assert,util: lazy load comparison functions
PR-URL: nodejs#20567 Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
1 parent e0c71ca commit 17d95ea

File tree

2 files changed

+22
-9
lines changed

2 files changed

+22
-9
lines changed

lib/assert.js

Lines changed: 14 additions & 4 deletions
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,
@@ -37,6 +33,15 @@ const { inspect, types: { isPromise, isRegExp } } = require('util');
3733
const { EOL } = require('internal/constants');
3834
const { NativeModule } = require('internal/bootstrap/loaders');
3935

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

286291
// The equivalence assertion tests a deep equality relation.
287292
assert.deepEqual = function deepEqual(actual, expected, message) {
293+
if (isDeepEqual === undefined) lazyLoadComparison();
288294
if (!isDeepEqual(actual, expected)) {
289295
innerFail({
290296
actual,
@@ -298,6 +304,7 @@ assert.deepEqual = function deepEqual(actual, expected, message) {
298304

299305
// The non-equivalence assertion tests for any deep inequality.
300306
assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
307+
if (isDeepEqual === undefined) lazyLoadComparison();
301308
if (isDeepEqual(actual, expected)) {
302309
innerFail({
303310
actual,
@@ -311,6 +318,7 @@ assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
311318
/* eslint-enable */
312319

313320
assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
321+
if (isDeepEqual === undefined) lazyLoadComparison();
314322
if (!isDeepStrictEqual(actual, expected)) {
315323
innerFail({
316324
actual,
@@ -324,6 +332,7 @@ assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
324332

325333
assert.notDeepStrictEqual = notDeepStrictEqual;
326334
function notDeepStrictEqual(actual, expected, message) {
335+
if (isDeepEqual === undefined) lazyLoadComparison();
327336
if (isDeepStrictEqual(actual, expected)) {
328337
innerFail({
329338
actual,
@@ -437,6 +446,7 @@ function expectedException(actual, expected, msg) {
437446
throw new ERR_INVALID_ARG_VALUE('error',
438447
expected, 'may not be an empty object');
439448
}
449+
if (isDeepEqual === undefined) lazyLoadComparison();
440450
for (const key of keys) {
441451
if (typeof actual[key] === 'string' &&
442452
isRegExp(expected[key]) &&

lib/util.js

Lines changed: 8 additions & 5 deletions
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)