beautiful-error
Version:
💣 Prettify error messages and stacks 💥
93 lines (59 loc) • 1.3 kB
JavaScript
import isErrorInstance from"is-error-instance";
export const omitStack=(error,stack)=>{
if(!stack){
recurseObject(error,omitStackProp)
}
};
const omitStackProp=(object)=>{
if(
!isErrorInstance(object)||
typeof object.stack!=="string"||
object.stack==="")
{
return
}
setNonEnumProp(object,STACK_SYM,object.stack);
delete object.stack
};
export const restoreStack=(error,stack)=>{
if(!stack){
recurseObject(error,restoreStackProp)
}
};
const restoreStackProp=(object)=>{
if(object[STACK_SYM]===undefined){
return
}
setNonEnumProp(object,"stack",object[STACK_SYM]);
delete object[STACK_SYM]
};
const STACK_SYM=Symbol("stack");
const setNonEnumProp=(object,propName,value)=>{
Object.defineProperty(object,propName,{
value,
enumerable:false,
writable:true,
configurable:true
})
};
const recurseObject=(value,callFunc)=>{
recurseValue(value,callFunc,0)
};
const recurseValue=(value,callFunc,depth)=>{
if(
typeof value!=="object"||
value===null||
depth>=PRINT_MAX_DEPTH+2)
{
return
}
callFunc(value);
Reflect.ownKeys(value).forEach((key)=>{
recurseValue(value[key],callFunc,depth+1)
})
};
export const PRINT_MAX_DEPTH=2;
export const omitStackBracket=(errorString,message)=>
errorString.startsWith("[")?
errorString.slice(1).replace(`${message}]`,message):
errorString;