gulp-execa
Version:
Gulp.js command execution for humans
57 lines (40 loc) • 1.1 kB
JavaScript
import{excludeKeys}from"filter-obj";
import isPlainObj from"is-plain-obj";
import{validate}from"jest-validate";
import{throwError}from"../error.js";
import{validateCustom}from"./custom.js";
import{addDebug}from"./debug.js";
export const parseOpts=({opts={},defaultOpts={},forcedOpts={}})=>{
validateBasic(opts);
const optsA=excludeKeys(opts,isUndefined);
validateOpts({opts:optsA,defaultOpts,forcedOpts});
const optsB={...DEFAULT_OPTS,...defaultOpts,...optsA,...forcedOpts};
const optsC=addDebug({opts:optsB});
return optsC
};
const validateBasic=(opts)=>{
if(!isPlainObj(opts)){
throwError(`Options must be a plain object: ${opts}`)
}
};
const isUndefined=(key,value)=>value===undefined;
const validateOpts=({opts,defaultOpts,forcedOpts})=>{
validateCustom({opts});
const exampleConfig=excludeKeys(
{...EXAMPLE_OPTS,...defaultOpts},
(key)=>Object.hasOwn(forcedOpts,key)
);
try{
validate(opts,{exampleConfig,unknown:()=>{}})
}catch(error){
throwError(error,{showStack:false})
}
};
const DEFAULT_OPTS={
debug:true,
preferLocal:true
};
const EXAMPLE_OPTS={
...DEFAULT_OPTS,
echo:true
};