UNPKG

beautiful-error

Version:

💣 Prettify error messages and stacks 💥

76 lines (61 loc) • 1.24 kB
import isErrorInstance from"is-error-instance"; export const callCustom=({ error, errorString, custom, recursiveBeautiful })=>{ if(typeof error[custom]!=="function"||CUSTOM_MAP.has(error)){ return errorString } const newErrorString=callBeautifulMethod({ error, errorString, custom, recursiveBeautiful }); return validateReturnValue(newErrorString,recursiveBeautiful) }; const callBeautifulMethod=({ error, errorString, custom, recursiveBeautiful })=>{ CUSTOM_MAP.add(error); try{ return error[custom](errorString) }catch(cause){ return serializeError(cause,recursiveBeautiful) }finally{ CUSTOM_MAP.delete(error) } }; const serializeError=(error,recursiveBeautiful)=>{ if(!isErrorInstance(error)){ return recursiveBeautiful(error) } CUSTOM_MAP.add(error); try{ return recursiveBeautiful(error) }finally{ CUSTOM_MAP.delete(error) } }; const CUSTOM_MAP=new WeakSet; const validateReturnValue=(errorString,recursiveBeautiful)=>{ if(typeof errorString==="string"){ return errorString } const error=new TypeError( `'error.beautiful()' must return a string, not: ${safeString(errorString)}` ); return recursiveBeautiful(error) }; const safeString=(value)=>{ try{ return String(value) }catch(error){ return safeString(error) } };