1 | const fs = require('fs');
|
2 | const path = require('path');
|
3 | const findDominantFile = require('find-dominant-file');
|
4 | const each = require('lodash/each');
|
5 | const kebabCase = require('lodash/kebabCase');
|
6 | const chalk = require('chalk');
|
7 |
|
8 | const updateRcFile = (app, undefaultOptions, wd) => {
|
9 | if (!app.rcFile) return;
|
10 | let filename = findDominantFile(wd, app.rcFile);
|
11 | if (!filename) {
|
12 | filename = path.join(wd, app.rcFile);
|
13 | }
|
14 | let content;
|
15 | if (fs.existsSync(filename)) {
|
16 | content = JSON.parse(fs.readFileSync(filename).toString());
|
17 | } else {
|
18 | content = {};
|
19 | }
|
20 | each(undefaultOptions, (value, name) => {
|
21 | if (value === '__delete__') {
|
22 | console.log(`${chalk.green('config'.padStart(12))} delete '${name}'`);
|
23 | delete content[name];
|
24 | } else {
|
25 | if (content[name] !== undefined) {
|
26 | console.log(`${chalk.green('config'.padStart(12))} overwrite \
|
27 | '--${kebabCase(name)}=${value}'`);
|
28 | } else {
|
29 | console.log(`${chalk.green('config'.padStart(12))} add \
|
30 | '--${kebabCase(name)}=${value}'`);
|
31 |
|
32 | }
|
33 | content[name] = value;
|
34 | }
|
35 | });
|
36 | fs.writeFileSync(filename, JSON.stringify(content, null, 2));
|
37 | };
|
38 |
|
39 | module.exports = updateRcFile;
|