From 1f56578d35ac39bf1a9b1be0f4900081987f722d Mon Sep 17 00:00:00 2001 From: Miguel Marcondes Date: Mon, 21 Apr 2025 14:17:08 -0300 Subject: [PATCH 1/6] util: enhance isError function to support new Error check --- lib/internal/util.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/internal/util.js b/lib/internal/util.js index 98dc3f81201084..80d1c8f33fcfa4 100644 --- a/lib/internal/util.js +++ b/lib/internal/util.js @@ -96,7 +96,7 @@ function isError(e) { // An error could be an instance of Error while not being a native error // or could be from a different realm and not be instance of Error but still // be a native error. - return isNativeError(e) || e instanceof Error; + return Error.isError ? Error.isError(e) : isNativeError(e) || e instanceof Error; } // Keep a list of deprecation codes that have been warned on so we only warn on From 377df24eab30c3010f8227d5e7ed42c6fea842b5 Mon Sep 17 00:00:00 2001 From: Miguel Marcondes Date: Thu, 8 May 2025 10:01:21 -0300 Subject: [PATCH 2/6] util: replace isNativeError with ErrorIsError --- lib/internal/util.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/internal/util.js b/lib/internal/util.js index 80d1c8f33fcfa4..83028f5ed0674c 100644 --- a/lib/internal/util.js +++ b/lib/internal/util.js @@ -7,6 +7,7 @@ const { ArrayPrototypeSort, Error, ErrorCaptureStackTrace, + ErrorIsError, FunctionPrototypeCall, NumberParseInt, ObjectDefineProperties, @@ -66,7 +67,7 @@ const { }, sleep: _sleep, } = internalBinding('util'); -const { isNativeError, isPromise } = internalBinding('types'); +const { isPromise } = internalBinding('types'); const { getOptionValue } = require('internal/options'); const assert = require('internal/assert'); const { encodings } = internalBinding('string_decoder'); @@ -96,7 +97,7 @@ function isError(e) { // An error could be an instance of Error while not being a native error // or could be from a different realm and not be instance of Error but still // be a native error. - return Error.isError ? Error.isError(e) : isNativeError(e) || e instanceof Error; + return ErrorIsError(e) || e instanceof Error; } // Keep a list of deprecation codes that have been warned on so we only warn on From 4dd9cfc423147f53c2462f89bc93610211d3634e Mon Sep 17 00:00:00 2001 From: Miguel Marcondes Date: Thu, 8 May 2025 10:10:06 -0300 Subject: [PATCH 3/6] util: replace isNativeError with ErrorIsError in inspect --- lib/internal/util/inspect.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/internal/util/inspect.js b/lib/internal/util/inspect.js index 375a0091209161..708e44acd72073 100644 --- a/lib/internal/util/inspect.js +++ b/lib/internal/util/inspect.js @@ -31,6 +31,7 @@ const { DatePrototypeToISOString, DatePrototypeToString, Error, + ErrorIsError, ErrorPrototype, ErrorPrototypeToString, Function, @@ -165,7 +166,6 @@ const { isMap, isMapIterator, isModuleNamespaceObject, - isNativeError, isPromise, isSet, isSetIterator, @@ -793,7 +793,7 @@ function getKeys(value, showHidden) { try { keys = ObjectKeys(value); } catch (err) { - assert(isNativeError(err) && err.name === 'ReferenceError' && + assert(ErrorIsError(err) && err.name === 'ReferenceError' && isModuleNamespaceObject(value)); keys = ObjectGetOwnPropertyNames(value); } @@ -1750,7 +1750,7 @@ function formatNamespaceObject(keys, ctx, value, recurseTimes) { output[i] = formatProperty(ctx, value, recurseTimes, keys[i], kObjectType); } catch (err) { - assert(isNativeError(err) && err.name === 'ReferenceError'); + assert(ErrorIsError(err) && err.name === 'ReferenceError'); // Use the existing functionality. This makes sure the indentation and // line breaks are always correct. Otherwise it is very difficult to keep // this aligned, even though this is a hacky way of dealing with this. From e60b3dd9a0fca0512d1f1c5833fe7116c430c4cb Mon Sep 17 00:00:00 2001 From: Miguel Marcondes Date: Thu, 8 May 2025 10:18:21 -0300 Subject: [PATCH 4/6] util: replace isNativeError with ErrorIsError in comparison --- lib/internal/util/comparisons.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/internal/util/comparisons.js b/lib/internal/util/comparisons.js index 178c6aceeff7d7..408674687ad432 100644 --- a/lib/internal/util/comparisons.js +++ b/lib/internal/util/comparisons.js @@ -16,6 +16,7 @@ const { Date, DatePrototypeGetTime, Error, + ErrorIsError, Float32Array, Float64Array, Function, @@ -103,7 +104,6 @@ const { isMap, isRegExp, isSet, - isNativeError, isBoxedPrimitive, isNumberObject, isStringObject, @@ -383,7 +383,7 @@ function objectComparisonStart(val1, val2, mode, memos) { isRegExp(val2) || isAnyArrayBuffer(val2) || isBoxedPrimitive(val2) || - isNativeError(val2) || + ErrorIsError(val2) || val2 instanceof Error) { return false; } else if (isURL(val1)) { From 891901b6c932d4aaa095305a16012a560f3ad44b Mon Sep 17 00:00:00 2001 From: Miguel Marcondes Date: Thu, 8 May 2025 10:29:19 -0300 Subject: [PATCH 5/6] test: replace isNativeError with ErrorIsError in internal util helper --- test/parallel/test-internal-util-helpers.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/test/parallel/test-internal-util-helpers.js b/test/parallel/test-internal-util-helpers.js index 01e99d52420d40..0fb5543a07325b 100644 --- a/test/parallel/test-internal-util-helpers.js +++ b/test/parallel/test-internal-util-helpers.js @@ -3,9 +3,11 @@ require('../common'); const assert = require('assert'); -const { types } = require('util'); const { assignFunctionName, isError } = require('internal/util'); const vm = require('vm'); +const { + ErrorIsError +} = require('internal/test/binding').primordials; // Special cased errors. Test the internal function which is used in // `util.inspect()`, the `repl` and maybe more. This verifies that errors from @@ -15,7 +17,7 @@ const vm = require('vm'); // actual errors. { const fake = { [Symbol.toStringTag]: 'Error' }; - assert(!types.isNativeError(fake)); + assert(!ErrorIsError(fake)); assert(!(fake instanceof Error)); assert(!isError(fake)); @@ -24,14 +26,14 @@ const vm = require('vm'); Object.getPrototypeOf(err), Object.getOwnPropertyDescriptors(err)); Object.defineProperty(err, 'message', { value: err.message }); - assert(types.isNativeError(err)); - assert(!types.isNativeError(newErr)); + assert(ErrorIsError(err)); + assert(!ErrorIsError(newErr)); assert(newErr instanceof Error); assert(isError(newErr)); const context = vm.createContext({}); const differentRealmErr = vm.runInContext('new Error()', context); - assert(types.isNativeError(differentRealmErr)); + assert(ErrorIsError(differentRealmErr)); assert(!(differentRealmErr instanceof Error)); assert(isError(differentRealmErr)); } From d1049a59ead3afd0c96031809fb8cfbca362f2c4 Mon Sep 17 00:00:00 2001 From: Miguel Marcondes Date: Thu, 8 May 2025 10:29:37 -0300 Subject: [PATCH 6/6] util: replace isNativeError with ErrorIsError in test util --- test/parallel/test-util.js | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/test/parallel/test-util.js b/test/parallel/test-util.js index 1ecddc829a0fdb..653c79a4126c58 100644 --- a/test/parallel/test-util.js +++ b/test/parallel/test-util.js @@ -26,6 +26,9 @@ const assert = require('assert'); const util = require('util'); const errors = require('internal/errors'); const context = require('vm').runInNewContext; +const { + ErrorIsError +} = require('internal/test/binding').primordials; // isArray assert.strictEqual(util.isArray([]), true); @@ -52,30 +55,30 @@ assert.deepStrictEqual(util._extend({ a: 1, b: 2 }, { b: 3 }), { a: 1, b: 3 }); assert.strictEqual(util.toUSVString('string\ud801'), 'string\ufffd'); { - assert.strictEqual(util.types.isNativeError(new Error()), true); - assert.strictEqual(util.types.isNativeError(new TypeError()), true); - assert.strictEqual(util.types.isNativeError(new SyntaxError()), true); - assert.strictEqual(util.types.isNativeError(new (context('Error'))()), true); + assert.strictEqual(ErrorIsError(new Error()), true); + assert.strictEqual(ErrorIsError(new TypeError()), true); + assert.strictEqual(ErrorIsError(new SyntaxError()), true); + assert.strictEqual(ErrorIsError(new (context('Error'))()), true); assert.strictEqual( - util.types.isNativeError(new (context('TypeError'))()), + ErrorIsError(new (context('TypeError'))()), true ); assert.strictEqual( - util.types.isNativeError(new (context('SyntaxError'))()), + ErrorIsError(new (context('SyntaxError'))()), true ); - assert.strictEqual(util.types.isNativeError({}), false); + assert.strictEqual(ErrorIsError({}), false); assert.strictEqual( - util.types.isNativeError({ name: 'Error', message: '' }), + ErrorIsError({ name: 'Error', message: '' }), false ); - assert.strictEqual(util.types.isNativeError([]), false); + assert.strictEqual(ErrorIsError([]), false); assert.strictEqual( - util.types.isNativeError({ __proto__: Error.prototype }), + ErrorIsError({ __proto__: Error.prototype }), false ); assert.strictEqual( - util.types.isNativeError(new errors.codes.ERR_IPC_CHANNEL_CLOSED()), + ErrorIsError(new errors.codes.ERR_IPC_CHANNEL_CLOSED()), true ); }