mirror of
https://github.com/DanielnetoDotCom/YouPHPTube
synced 2025-10-03 17:59:55 +02:00
69 lines
1.4 KiB
JavaScript
69 lines
1.4 KiB
JavaScript
'use strict';
|
|
|
|
/**
|
|
* @typedef {{ [key: string]: any }} Extensions
|
|
* @typedef {Error} Err
|
|
* @property {string} message
|
|
*/
|
|
|
|
/**
|
|
*
|
|
* @param {Error} obj
|
|
* @param {Extensions} props
|
|
* @returns {Error & Extensions}
|
|
*/
|
|
function assign(obj, props) {
|
|
for (const key in props) {
|
|
Object.defineProperty(obj, key, {
|
|
value: props[key],
|
|
enumerable: true,
|
|
configurable: true,
|
|
});
|
|
}
|
|
|
|
return obj;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param {any} err - An Error
|
|
* @param {string|Extensions} code - A string code or props to set on the error
|
|
* @param {Extensions} [props] - Props to set on the error
|
|
* @returns {Error & Extensions}
|
|
*/
|
|
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 = '';
|
|
}
|
|
|
|
if (code) {
|
|
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));
|
|
|
|
// @ts-ignore
|
|
const output = assign(new ErrClass(), props);
|
|
|
|
return output;
|
|
}
|
|
}
|
|
|
|
module.exports = createError;
|