/
load-rc.js
81 lines (68 loc) · 1.82 KB
/
load-rc.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
"use strict";
const os = require("os");
const Fs = require("fs");
const Path = require("path");
const Yaml = require("yamljs");
const Ini = require("ini");
const _ = require("lodash");
const logger = require("../lib/logger");
const assert = require("assert");
const defaultRc = require("./default-rc");
const Promise = require("bluebird");
const npmConfig = require("./config/npm-config");
function readRc(fname) {
const rcFname = Path.basename(fname);
try {
const rcData = Fs.readFileSync(fname).toString();
let rc;
try {
assert(rcFname === ".fynrc" && rcData.startsWith("---"));
rc = Yaml.parse(rcData);
logger.debug(`Loaded ${rcFname} YAML RC`, fname, JSON.stringify(rc));
} catch (e) {
rc = Ini.parse(rcData);
logger.debug(`Loaded ${rcFname} ini RC`, fname, JSON.stringify(rc));
}
return rc;
} catch (e) {
if (e.code !== "ENOENT") {
logger.error(`Failed to process ${rcFname} RC file`, fname, e.message);
}
return {};
}
}
function loadRc(cwd) {
const npmrcData = [];
if (cwd === false) {
return {
npmrc: {}
};
}
const homeDir = os.homedir();
const files = [
process.env.NPM_CONFIG_GLOBALCONFIG,
Path.join(process.env.PREFIX || "", "/etc/npmrc"),
process.env.NPM_CONFIG_USERCONFIG,
Path.join(homeDir, ".npmrc"),
Path.join(homeDir, ".fynrc"),
Path.join(cwd, ".npmrc"),
Path.join(cwd, ".fynrc")
].filter(x => x);
const data = files.map(fp => {
const x = readRc(fp);
if (fp.endsWith("npmrc")) {
npmrcData.push(x);
}
return x;
});
const all = _.merge.apply(_, [{}, npmConfig.defaults, defaultRc].concat(data));
const npmrc = _.merge.apply(_, [{}, npmConfig.defaults].concat(npmrcData));
return {
all,
npmrc,
data,
npmrcData,
files
};
}
module.exports = loadRc;