error-class-utils
Version:
Properly create error classes
45 lines (26 loc) • 766 B
JavaScript
import{isObject}from"./is_object.js";
import{validateError}from"./validate.js";
export const ensureCorrectClass=(error,newTarget)=>{
validateError(error);
validateNewTarget(newTarget);
const newTargetProto=newTarget.prototype;
if(Object.getPrototypeOf(error)!==newTargetProto){
Object.setPrototypeOf(error,newTargetProto)
}
if(
typeof newTargetProto.constructor==="function"&&
error.constructor!==newTargetProto.constructor)
{
delete error.constructor
}
};
const validateNewTarget=(newTarget)=>{
if(newTarget===undefined){
throw new TypeError(
"This must be called directly inside the class's constructor."
)
}
if(typeof newTarget!=="function"||!isObject(newTarget.prototype)){
throw new TypeError("The second argument must be `new.target`.")
}
};