handle-cli-error
Version:
💣 Error handler for CLI applications 💥
48 lines (37 loc) • 1.03 kB
JavaScript
import isPlainObj from"is-plain-obj";
import{removeUndefined}from"./default.js";
export const applyClassesOpts=(name,opts={})=>{
if(!isPlainObj(opts)){
throw new Error(`options must be a plain object: ${opts}`)
}
const{classes={},...optsA}=opts;
validateObject(classes,"classes");
const classesOpts=classes[name]||classes.default||{};
validateObject(classesOpts,`classes.${name}`);
const beautifulErrorOpts={
...splitOpts(optsA).beautifulErrorOpts,
classes:Object.fromEntries(
Object.entries(classes).map(pickBeautifulErrorOpts)
)
};
const optsB=splitOpts({
...optsA,
...removeUndefined(classesOpts)
}).opts;
return{opts:optsB,beautifulErrorOpts}
};
export const validateObject=(value,optName)=>{
if(!isPlainObj(value)){
throw new Error(`"${optName}" must be a plain object: ${value}`)
}
};
const pickBeautifulErrorOpts=([name,opts])=>[
name,
splitOpts(opts).beautifulErrorOpts];
const splitOpts=({
silent,
exitCode,
timeout,
log,
...beautifulErrorOpts
})=>({opts:{silent,exitCode,timeout,log},beautifulErrorOpts});