2025-03-29 15:51:03 -04:00

60 lines
1.5 KiB
JavaScript

#!/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');
/**
* Main routine
*/
async function main() {
//Extract parameters
const {configFile} = argv;
//Verify arguments
if (argv._.length < 3 && !configFile) {
throw new Error('Replace in file needs at least 3 arguments');
}
//Load config and combine with passed arguments
const config = await loadConfig(configFile);
const options = combineConfig(config, argv);
//Extract settings
const {from, to, files, isRegex, verbose, quiet} = 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(/.*\/([gimyus]*)$/, '$1');
const pattern = from.replace(new RegExp(`^/(.*?)/${flags}$`), '$1');
options.from = new RegExp(pattern, flags);
}
//Log
if (!quiet) {
console.log(`Replacing '${from}' with '${to}'`);
}
//Replace
const results = replace.sync(options);
if (!quiet) {
successHandler(results, verbose);
}
}
//Call main routine
main().catch(error => errorHandler(error));