You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
933 B
47 lines
933 B
'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;
|
|
|