diff --git a/bin/cli.js b/bin/cli.js index edc02d2..56044fc 100755 --- a/bin/cli.js +++ b/bin/cli.js @@ -4,22 +4,60 @@ /** * Dependencies */ +const path = require('path'); const chalk = require('chalk'); const argv = require('yargs').argv; const replace = require('../lib/replace-in-file'); //Verify arguments -if (argv._.length < 3) { +if (argv._.length < 3 && !argv.config) { console.error(chalk.red('Replace in file needs at least 3 arguments')); process.exit(1); } -//Collect main arguments -let from = argv._.shift(); -const to = argv._.shift(); +let from, to, files; + +// If --config is set, load config file +if (argv.config) { + //Read config file + let config; + try { + config = require(path.join(process.cwd(), argv.config)); + } + catch (e) { + console.error(chalk.red('Cannot load config file')); + console.error(e); + process.exit(1); + } + from = config.from; + to = config.to; + if (typeof config.files === 'string') { + config.files = [config.files]; + } + files = config.files; +} + +if (!from === undefined) { + from = argv._.shift(); +} +if (!to === undefined) { + to = argv._.shift(); +} +if (!files) { + files = argv._; +} + +if (!from === undefined || !to === undefined) { + console.error(chalk.red('Must set from & to options')); + process.exit(1); +} +if (!files) { + console.error(chalk.red('Must pass a list of files')); + process.exit(1); +} //Single star globs already get expanded in the command line -const files = argv._.reduce((files, file) => { +files = files.reduce((files, file) => { return files.concat(file.split(',')); }, []);