errors: add useOriginalName to internal/errors
This allows us to tell the type of the errors without using instanceof, which is necessary in WPT harness. PR-URL: https://github.com/nodejs/node/pull/22556 Reviewed-By: John-David Dalton <john.david.dalton@gmail.com> Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Refael Ackermann <refack@gmail.com>
This commit is contained in:
parent
ab5f789e3f
commit
e692a09802
@ -151,6 +151,8 @@ function makeSystemErrorWithCode(key) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let useOriginalName = false;
|
||||||
|
|
||||||
function makeNodeErrorWithCode(Base, key) {
|
function makeNodeErrorWithCode(Base, key) {
|
||||||
return class NodeError extends Base {
|
return class NodeError extends Base {
|
||||||
constructor(...args) {
|
constructor(...args) {
|
||||||
@ -158,6 +160,9 @@ function makeNodeErrorWithCode(Base, key) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get name() {
|
get name() {
|
||||||
|
if (useOriginalName) {
|
||||||
|
return super.name;
|
||||||
|
}
|
||||||
return `${super.name} [${key}]`;
|
return `${super.name} [${key}]`;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -437,7 +442,12 @@ module.exports = {
|
|||||||
getMessage,
|
getMessage,
|
||||||
SystemError,
|
SystemError,
|
||||||
codes,
|
codes,
|
||||||
E // This is exported only to facilitate testing.
|
// This is exported only to facilitate testing.
|
||||||
|
E,
|
||||||
|
// This allows us to tell the type of the errors without using
|
||||||
|
// instanceof, which is necessary in WPT harness.
|
||||||
|
get useOriginalName() { return useOriginalName; },
|
||||||
|
set useOriginalName(value) { useOriginalName = value; }
|
||||||
};
|
};
|
||||||
|
|
||||||
// To declare an error message, use the E(sym, val, def) function above. The sym
|
// To declare an error message, use the E(sym, val, def) function above. The sym
|
||||||
|
35
test/parallel/test-internal-error-original-names.js
Normal file
35
test/parallel/test-internal-error-original-names.js
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
// Flags: --expose-internals
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// This tests `internal/errors.useOriginalName`
|
||||||
|
// This testing feature is needed to allows us to assert the types of
|
||||||
|
// errors without using instanceof, which is necessary in WPT harness.
|
||||||
|
// Refs: https://github.com/nodejs/node/pull/22556
|
||||||
|
|
||||||
|
require('../common');
|
||||||
|
const assert = require('assert');
|
||||||
|
const errors = require('internal/errors');
|
||||||
|
|
||||||
|
|
||||||
|
errors.E('TEST_ERROR_1', 'Error for testing purposes: %s',
|
||||||
|
Error);
|
||||||
|
{
|
||||||
|
const err = new errors.codes.TEST_ERROR_1('test');
|
||||||
|
assert(err instanceof Error);
|
||||||
|
assert.strictEqual(err.name, 'Error [TEST_ERROR_1]');
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
errors.useOriginalName = true;
|
||||||
|
const err = new errors.codes.TEST_ERROR_1('test');
|
||||||
|
assert(err instanceof Error);
|
||||||
|
assert.strictEqual(err.name, 'Error');
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
errors.useOriginalName = false;
|
||||||
|
const err = new errors.codes.TEST_ERROR_1('test');
|
||||||
|
assert(err instanceof Error);
|
||||||
|
assert.strictEqual(err.name, 'Error [TEST_ERROR_1]');
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user