-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlib-config.cjs
62 lines (52 loc) · 1.93 KB
/
lib-config.cjs
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
/* Copyright 2014 Open Ag Data Alliance
*
* Licensed under the Apache License, Version 2.0 (the 'License');
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an 'AS IS' BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
"use strict";
module.exports = (defaults) => {
// We use nconf in dependencies, so we have to play games here. If npm/yarn
// factors nconf up node_modules then our dependencies get the same nconf
// instance as we do, allowing them to mutate each others keys. This ensures we
// get our own nconf --- yes it is ugly. Thank you node.js for assuming we
// always want your hidden cache.
delete require.cache[require.resolve("nconf")];
var nconf = require("nconf");
var fs = require("fs");
nconf.use("memory");
// Order of precedence: argv, env, config file, defaults
nconf.argv();
// parseValues: true will parse "true" and "false" as booleans, numbers as numbers, etc.
nconf.env({ separator: "__", parseValues: true });
// Load an external (optional) config file
var config = nconf.get("config");
if (config) {
if (!fs.existsSync(config)) {
throw new Error("Could not find config file: " + config);
}
nconf.use("literal", require(config));
}
if (defaults) {
nconf.defaults(defaults);
}
nconf.setObject = function (object, path) {
path = path || "";
Object.keys(object).forEach(function (key) {
if (typeof object[key] === "[object]") {
nconf.setObject(object[key], path + key + ":");
} else {
nconf.set(path + key, object[key]);
}
});
};
return nconf;
};