chalk-string
Version:
Chalk with style strings
70 lines (55 loc) • 1.37 kB
JavaScript
const normalizeRgbArgs=(args,method)=>{
if(args.length!==3){
throw new TypeError(
`There must be 3 arguments with "${method}", not ${args.length}`
)
}
const argsA=args.map(Number);
argsA.forEach((arg,index)=>{
validateRgbArg(arg,args[index],method)
});
return argsA
};
const validateRgbArg=(arg,input,method)=>{
if(!Number.isInteger(arg)||String(arg)!==input){
throw new TypeError(`Argument "${arg}" must be an integer with "${method}"`)
}
if(arg>MAX_RGB){
throw new TypeError(
`Argument "${arg}" must be less than ${MAX_RGB} with "${method}"`
)
}
};
const MAX_RGB=255;
const normalizeHexArgs=(args,method)=>{
if(args.length!==1){
throw new TypeError(
`There must be exactly one argument with "${method}", not ${args.length}`
)
}
validateHexArg(args[0],method);
return args
};
const validateHexArg=(arg,method)=>{
if(arg.includes("#")){
throw new TypeError(`Argument "${arg}" must not include # with "${method}"`)
}
if(!HEX_LENGTH.has(arg.length)){
throw new TypeError(
`Argument "${arg}" must have 3 or 6 characters with "${method}"`
)
}
if(!HEX_REGEXP.test(arg)){
throw new TypeError(
`Argument "${arg}" must be an hexadecimal string with "${method}"`
)
}
};
const HEX_LENGTH=new Set([3,6]);
const HEX_REGEXP=/^[a-f\d]{3,6}$/iu;
export const ARGS_METHODS={
rgb:normalizeRgbArgs,
bgRgb:normalizeRgbArgs,
hex:normalizeHexArgs,
bgHex:normalizeHexArgs
};