UNPKG

1.55 kBJavaScriptView Raw
1#!/usr/bin/env node
2'use strict';
3
4/**
5 * Dependencies
6 */
7const {argv} = require('yargs');
8const replace = require('../lib/replace-in-file');
9const loadConfig = require('../lib/helpers/load-config');
10const combineConfig = require('../lib/helpers/combine-config');
11const errorHandler = require('../lib/helpers/error-handler');
12const successHandler = require('../lib/helpers/success-handler');
13
14//Extract parameters
15const {configFile} = argv;
16
17//Verify arguments
18if (argv._.length < 3 && !configFile) {
19 errorHandler('Replace in file needs at least 3 arguments');
20}
21
22//Load config and combine with passed arguments
23const config = loadConfig(configFile);
24const options = combineConfig(config, argv);
25
26//Extract settings
27const {from, to, files, isRegex, verbose, quiet} = options;
28
29//Single star globs already get expanded in the command line
30options.files = files.reduce((files, file) => {
31 return files.concat(file.split(','));
32}, []);
33
34//If the isRegex flag is passed, convert the from parameter to a RegExp object
35if (isRegex) {
36 const flags = from.replace(/.*\/([gimyus]*)$/, '$1');
37 const pattern = from.replace(new RegExp(`^/(.*?)/${flags}$`), '$1');
38 try {
39 options.from = new RegExp(pattern, flags);
40 }
41 catch (error) {
42 errorHandler(error, 'Error creating RegExp from `from` parameter');
43 }
44}
45
46//Log
47if (!quiet) {
48 console.log(`Replacing '${from}' with '${to}'`);
49}
50
51//Replace
52try {
53 const results = replace.sync(options);
54 if (!quiet) {
55 successHandler(results, verbose);
56 }
57}
58catch (error) {
59 errorHandler(error);
60}