Files
replace-in-file/bin/cli.js
Adam Reis dc3ea7368e 3.0.0
- Drop deprecated API
- Drop support for Node 4 and 5
- Refactor and clean up code base
- Leverage destructuring
- Option to disable globs (#33)
- Update readme
2017-09-14 14:23:05 +12:00

57 lines
1.5 KiB
JavaScript
Executable File

#!/usr/bin/env node
'use strict';
/**
* Dependencies
*/
const {argv} = require('yargs');
const replace = require('../lib/replace-in-file');
const loadConfig = require('../lib/helpers/load-config');
const combineConfig = require('../lib/helpers/combine-config');
const errorHandler = require('../lib/helpers/error-handler');
const successHandler = require('../lib/helpers/success-handler');
//Extract parameters
const {configFile} = argv;
//Verify arguments
if (argv._.length < 3 && !configFile) {
errorHandler('Replace in file needs at least 3 arguments');
}
//Load config and combine with passed arguments
const config = loadConfig(configFile);
const options = combineConfig(config, argv);
//Extract settings
const {from, to, files, isRegex, verbose} = options;
//Single star globs already get expanded in the command line
options.files = files.reduce((files, file) => {
return files.concat(file.split(','));
}, []);
//If the isRegex flag is passed, convert the from parameter to a RegExp object
if (isRegex) {
const flags = from.replace(/.*\/([gimy]*)$/, '$1');
const pattern = from.replace(new RegExp(`^/(.*?)/${flags}$`), '$1');
try {
options.from = new RegExp(pattern, flags);
}
catch (error) {
errorHandler(error, 'Error creating RegExp from `from` parameter');
}
}
//Log
console.log(`Replacing '${from}' with '${to}'`);
//Replace
try {
const changes = replace.sync(options);
successHandler(changes, verbose);
}
catch (error) {
errorHandler(error);
}