UNPKG

replace-in-file

Version:

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

65 lines (64 loc) • 2.31 kB
/** * Run processors */ export function runProcessors(contents, processor, file) { //Ensure array and prepare result const processors = Array.isArray(processor) ? processor : [processor]; //Run processors const newContents = processors .reduce((contents, processor) => processor(contents, file), contents); //Check if contents changed and prepare result const hasChanged = (newContents !== contents); const result = { file, hasChanged }; //Return along with new contents return [result, newContents]; } /** * Helper to process in a single file (sync) */ export function processSync(file, processor, config) { //Extract relevant config and read file contents const { encoding, dry, fsSync } = config; const contents = fsSync.readFileSync(file, encoding); //Process contents const [result, newContents] = runProcessors(contents, processor, file); //Contents changed and not a dry run? Write to file if (result.hasChanged && !dry) { fsSync.writeFileSync(file, newContents, encoding); } //Return result return result; } /** * Run processors (async) */ export async function runProcessorsAsync(contents, processorAsync, file) { //Ensure array and prepare result const processorAsyncs = Array.isArray(processorAsync) ? processorAsync : [processorAsync]; //Run processors let newContents = contents; for (const processor of processorAsyncs) { newContents = await processor(newContents, file); } //Check if contents changed and prepare result const hasChanged = (newContents !== contents); const result = { file, hasChanged }; //Return along with new contents return [result, newContents]; } /** * Helper to process in a single file (async) */ export async function processAsync(file, processor, config) { //Extract relevant config and read file contents const { encoding, dry, fs } = config; const contents = await fs.readFile(file, encoding); //Make replacements const [result, newContents] = await runProcessorsAsync(contents, processor, file); //Contents changed and not a dry run? Write to file if (result.hasChanged && !dry) { await fs.writeFile(file, newContents, encoding); } //Return result return result; }