UNPKG

beautiful-error

Version:

💣 Prettify error messages and stacks 💥

66 lines (53 loc) • 1.47 kB
import{validateHeader}from"../header.js"; import{validateIcon}from"../icon.js"; import{applyClassesOpts,getClassesOpts,validateObject}from"./classes.js"; import{applyDefaultOpts}from"./default.js"; export const validateOptions=(opts)=>{ normalizeOptions(opts) }; export const normalizeOptions=(opts={})=>{ validateObject(opts,"The options"); const{classes,opts:optsA}=getClassesOpts(opts); return Object.fromEntries( Object.keys(classes).map((name)=>[ name, normalizeClassOptions(name,classes,optsA)] ) ) }; const normalizeClassOptions=(name,classes,opts)=>{ const classOpts=applyClassesOpts(name,classes,opts); Object.entries(classOpts).forEach(validateOpt); return applyDefaultOpts(classOpts) }; const validateOpt=([optName,optValue])=>{ if(optValue===undefined){ return } const validator=VALIDATORS[optName]; if(validator===undefined){ throw new Error(`'${optName}' is an unknown option`) } validator(optValue,optName) }; const validateBoolean=(value,optName)=>{ if(typeof value!=="boolean"){ throw new TypeError(`The option '${optName}' must be a boolean: ${value}`) } }; const validateStringOrSymbol=(value,optName)=>{ if(typeof value!=="string"&&typeof value!=="symbol"){ throw new TypeError( `The option '${optName}' must be a string or a symbol: ${value}` ) } }; const VALIDATORS={ stack:validateBoolean, cause:validateBoolean, props:validateBoolean, colors:validateBoolean, icon:validateIcon, header:validateHeader, custom:validateStringOrSymbol };