UNPKG

replace-in-file

Version:

A simple utility to quickly replace text in one or more files.

58 lines (56 loc) • 2.08 kB
#!/usr/bin/env node import yargs from 'yargs'; import { hideBin } from 'yargs/helpers'; import { replaceInFile, replaceInFileSync } from "../src/replace-in-file.js"; import { loadConfig, combineConfig } from "../src/helpers/config.js"; import { errorHandler, successHandler } from "../src/helpers/handlers.js"; /** * Main routine */ async function main() { //Extract parameters const argv = await yargs(hideBin(process.argv)).argv; const { configFile } = argv; //Display help if (argv.help || argv.h) { return console.log(` Usage: replace-in-file from to from to some/file.js,some/**/glob.js Available options (all are optional): --configFile Path to JSON config file --ignore Files to ignore (comma separated) --encoding File encoding (default is utf-8) --disableGlobs Disable glob expansion --verbose Show additional information --quiet Suppress output --dry Dry run (no changes made) --streaming Stream files instead of reading them into memory (for large files) --maxMatchLength Max regex match length across chunk boundaries when streaming --help, -h Show this help information `); } //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 = configFile ? await loadConfig(configFile) : {}; const options = combineConfig(config, argv); //Extract settings const { from, to, files, verbose, quiet } = options; //Single star globs already get expanded in the command line options.files = files.flatMap(file => file.split(',')); //Log if (!quiet) { console.log(`Replacing '${from}' with '${to}'`); } //Replace, streaming if configured const results = options.streaming ? await replaceInFile(options) : replaceInFileSync(options); if (!quiet) { successHandler(results, verbose); } } //Call main routine main().catch(error => errorHandler(error));