const out = require('./console-out'); module.exports = { combineBypassData }; /** * Combine different types of bypass data * @param generator - The generator object involved * @param bypassArr - The array of overwritten properties * @param plopArgV - The original args passed to plop without using names */ function combineBypassData(generator, bypassArr, plopArgV) { // Get named prompts that are passed to the command line const promptNames = generator.prompts.map((prompt) => prompt.name); // Check if bypassArr is too long for promptNames if (bypassArr.length > promptNames.length) { console.error(chalk.red('[PLOP] ') + 'Too many bypass arguments passed for "' + generator.name + '"'); out.getHelpMessage(generator); process.exit(1); } let namedBypassArr = []; if (Object.keys(plopArgV).length > 0) { // Let's make sure we made no whoopsy-poos (AKA passing incorrect inputs) let errors = false; Object.keys(plopArgV).forEach((arg) => { if (!(promptNames.find((name) => name === arg)) && arg !== '_') { console.error(chalk.red('[PLOP] ') + '"' + arg + '"' + ' is an invalid argument for "' + generator.name + '"'); errors = true; } }); if (errors) { out.getHelpMessage(generator); process.exit(1); } namedBypassArr = promptNames.map((name) => plopArgV[name] ? plopArgV[name] : undefined); } // merge the bypass data with named bypass values const mergedBypass = mergeArrays(bypassArr, namedBypassArr); // clean up `undefined` values return mergedBypass.map(v => v === undefined ? '_' : v); } function mergeArrays(baseArr, overlay) { const length = Math.max(baseArr.length, overlay.length); return (new Array(length)).fill().map( (v, i) => overlay[i] !== undefined ? overlay[i] : baseArr[i] ); }