mirror of
https://github.com/nodejs/node.git
synced 2025-05-13 01:44:38 +00:00

PR-URL: https://github.com/nodejs/node/pull/37496 Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Richard Lau <rlau@redhat.com> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Beth Griggs <bgriggs@redhat.com>
48 lines
933 B
JavaScript
48 lines
933 B
JavaScript
'use strict';
|
|
|
|
function assign(obj, props) {
|
|
for (const key in props) {
|
|
Object.defineProperty(obj, key, {
|
|
value: props[key],
|
|
enumerable: true,
|
|
configurable: true,
|
|
});
|
|
}
|
|
|
|
return obj;
|
|
}
|
|
|
|
function createError(err, code, props) {
|
|
if (!err || typeof err === 'string') {
|
|
throw new TypeError('Please pass an Error to err-code');
|
|
}
|
|
|
|
if (!props) {
|
|
props = {};
|
|
}
|
|
|
|
if (typeof code === 'object') {
|
|
props = code;
|
|
code = undefined;
|
|
}
|
|
|
|
if (code != null) {
|
|
props.code = code;
|
|
}
|
|
|
|
try {
|
|
return assign(err, props);
|
|
} catch (_) {
|
|
props.message = err.message;
|
|
props.stack = err.stack;
|
|
|
|
const ErrClass = function () {};
|
|
|
|
ErrClass.prototype = Object.create(Object.getPrototypeOf(err));
|
|
|
|
return assign(new ErrClass(), props);
|
|
}
|
|
}
|
|
|
|
module.exports = createError;
|