1 | #!/usr/bin/env node
|
2 | 'use strict';
|
3 |
|
4 |
|
5 |
|
6 |
|
7 | const {argv} = require('yargs');
|
8 | const replace = require('../lib/replace-in-file');
|
9 | const loadConfig = require('../lib/helpers/load-config');
|
10 | const combineConfig = require('../lib/helpers/combine-config');
|
11 | const errorHandler = require('../lib/helpers/error-handler');
|
12 | const successHandler = require('../lib/helpers/success-handler');
|
13 |
|
14 |
|
15 | const {configFile} = argv;
|
16 |
|
17 |
|
18 | if (argv._.length < 3 && !configFile) {
|
19 | errorHandler('Replace in file needs at least 3 arguments');
|
20 | }
|
21 |
|
22 |
|
23 | const config = loadConfig(configFile);
|
24 | const options = combineConfig(config, argv);
|
25 |
|
26 |
|
27 | const {from, to, files, isRegex, verbose, quiet} = options;
|
28 |
|
29 |
|
30 | options.files = files.reduce((files, file) => {
|
31 | return files.concat(file.split(','));
|
32 | }, []);
|
33 |
|
34 |
|
35 | if (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 |
|
47 | if (!quiet) {
|
48 | console.log(`Replacing '${from}' with '${to}'`);
|
49 | }
|
50 |
|
51 |
|
52 | try {
|
53 | const results = replace.sync(options);
|
54 | if (!quiet) {
|
55 | successHandler(results, verbose);
|
56 | }
|
57 | }
|
58 | catch (error) {
|
59 | errorHandler(error);
|
60 | }
|