rc-config-loader 2.0.0 → 2.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -2
- package/lib/rc-config-loader.d.ts +3 -3
- package/lib/rc-config-loader.js +165 -115
- package/lib/rc-config-loader.js.map +1 -1
- package/package.json +39 -18
- package/src/rc-config-loader.d.ts +3 -3
- package/src/rc-config-loader.js +67 -55
package/README.md
CHANGED
|
@@ -11,6 +11,8 @@ Find and load a configuration object from:
|
|
|
11
11
|
- a `package.json` property if it is needed
|
|
12
12
|
- a JSON or YAML, JS "rc file"
|
|
13
13
|
- `.<product>rc` or `.<product>rc.json` or `.<product>rc.js` or`.<product>rc.yml`, `.<product>rc.yaml`
|
|
14
|
+
- TypeScript support
|
|
15
|
+
- Includes `.d.ts`
|
|
14
16
|
|
|
15
17
|
## Difference
|
|
16
18
|
|
|
@@ -22,7 +24,8 @@ Find and load a configuration object from:
|
|
|
22
24
|
|
|
23
25
|
### with [cosmiconfig](https://github.com/davidtheclark/cosmiconfig "cosmiconfig")
|
|
24
26
|
|
|
25
|
-
- Sync loading
|
|
27
|
+
- <del>Sync loading</del>
|
|
28
|
+
- [cosmiconfig@3+](https://github.com/davidtheclark/cosmiconfig/blob/master/CHANGELOG.md#300) support `sync` option
|
|
26
29
|
|
|
27
30
|
## Install
|
|
28
31
|
|
|
@@ -51,7 +54,7 @@ export default function rcConfigLoader(packageName: string, options?: rcConfigLo
|
|
|
51
54
|
`rcConfigLoader` return `{ config, filePath }` object.
|
|
52
55
|
|
|
53
56
|
- `config`: it is config object
|
|
54
|
-
- `filePath`: path to config file
|
|
57
|
+
- `filePath`: absolute path to config file
|
|
55
58
|
|
|
56
59
|
If not found config file, return `undefined`.
|
|
57
60
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
export interface rcConfigLoaderOption {
|
|
2
2
|
// does look for `package.json`
|
|
3
|
-
packageJSON?: boolean
|
|
3
|
+
packageJSON?: boolean;
|
|
4
4
|
// if config file name is not same with packageName, set the name
|
|
5
5
|
configFileName?: string;
|
|
6
6
|
// treat default(no ext file) as some extension
|
|
7
|
-
defaultExtension?: string | string[]
|
|
7
|
+
defaultExtension?: string | string[];
|
|
8
8
|
// where start to load
|
|
9
9
|
cwd?: string;
|
|
10
10
|
}
|
|
11
|
-
export default function rcConfigLoader(packageName: string, options?: rcConfigLoaderOption): Object;
|
|
11
|
+
export default function rcConfigLoader(packageName: string, options?: rcConfigLoaderOption): Object;
|
package/lib/rc-config-loader.js
CHANGED
|
@@ -3,164 +3,214 @@
|
|
|
3
3
|
// Original https://github.com/zkochan/rcfile
|
|
4
4
|
"use strict";
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
7
7
|
|
|
8
8
|
var path = require("path");
|
|
9
|
+
|
|
9
10
|
var debug = require("debug")("rc-config-loader");
|
|
10
|
-
|
|
11
|
+
|
|
12
|
+
var requireFromString = require("require-from-string");
|
|
13
|
+
|
|
11
14
|
var JSON5 = require("json5");
|
|
15
|
+
|
|
12
16
|
var fs = require("fs");
|
|
17
|
+
|
|
13
18
|
var pathExists = require("path-exists");
|
|
19
|
+
|
|
14
20
|
var objectAssign = require("object-assign");
|
|
21
|
+
|
|
15
22
|
var keys = require("object-keys");
|
|
16
|
-
var emptyConfig = undefined;
|
|
17
23
|
|
|
18
24
|
var defaultLoaderByExt = {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
25
|
+
".js": loadJSConfigFile,
|
|
26
|
+
".json": loadJSONConfigFile,
|
|
27
|
+
".yaml": loadYAMLConfigFile,
|
|
28
|
+
".yml": loadYAMLConfigFile
|
|
23
29
|
};
|
|
24
|
-
|
|
25
30
|
var defaultOptions = {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
+
// does look for `package.json`
|
|
32
|
+
packageJSON: false,
|
|
33
|
+
// treat default(no ext file) as some extension
|
|
34
|
+
defaultExtension: [".json", ".yaml", ".yml", ".js"],
|
|
35
|
+
cwd: process.cwd()
|
|
31
36
|
};
|
|
32
|
-
|
|
33
37
|
/**
|
|
34
38
|
* @param {string} pkgName
|
|
35
39
|
* @param {rcConfigLoaderOption} [opts]
|
|
36
|
-
* @returns {
|
|
40
|
+
* @returns {{ config: Object, filePath:string } | undefined}
|
|
37
41
|
*/
|
|
42
|
+
|
|
38
43
|
module.exports = function rcConfigLoader(pkgName) {
|
|
39
|
-
|
|
44
|
+
var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
45
|
+
// path/to/config or basename of config file.
|
|
46
|
+
var configFileName = opts.configFileName || ".".concat(pkgName, "rc");
|
|
47
|
+
var defaultExtension = opts.defaultExtension || defaultOptions.defaultExtension;
|
|
48
|
+
var cwd = opts.cwd || defaultOptions.cwd;
|
|
49
|
+
var packageJSON = opts.packageJSON || defaultOptions.packageJSON;
|
|
50
|
+
var packageJSONFieldName = _typeof(packageJSON) === "object" ? packageJSON.fieldName : pkgName;
|
|
51
|
+
var parts = splitPath(cwd);
|
|
52
|
+
var loaders = Array.isArray(defaultExtension) ? defaultExtension.map(function (extension) {
|
|
53
|
+
return defaultLoaderByExt[extension];
|
|
54
|
+
}) : defaultLoaderByExt[defaultExtension];
|
|
55
|
+
var loaderByExt = objectAssign({}, defaultLoaderByExt, {
|
|
56
|
+
"": loaders
|
|
57
|
+
});
|
|
58
|
+
return findConfig({
|
|
59
|
+
parts: parts,
|
|
60
|
+
loaderByExt: loaderByExt,
|
|
61
|
+
configFileName: configFileName,
|
|
62
|
+
packageJSON: packageJSON,
|
|
63
|
+
packageJSONFieldName: packageJSONFieldName
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
*
|
|
68
|
+
* @param {string[]} parts
|
|
69
|
+
* @param {Object} loaderByExt
|
|
70
|
+
* @param {string} configFileName
|
|
71
|
+
* @param {boolean|Object} packageJSON
|
|
72
|
+
* @param {string} packageJSONFieldName
|
|
73
|
+
* @returns {{
|
|
74
|
+
* config: string,
|
|
75
|
+
* filePath: string
|
|
76
|
+
* }|undefined}
|
|
77
|
+
*/
|
|
40
78
|
|
|
41
|
-
// path/to/config or basename of config file.
|
|
42
|
-
var configFileName = opts.configFileName || "." + pkgName + "rc";
|
|
43
|
-
var defaultExtension = opts.defaultExtension || defaultOptions.defaultExtension;
|
|
44
|
-
var cwd = opts.cwd || defaultOptions.cwd;
|
|
45
|
-
var packageJSON = opts.packageJSON || defaultOptions.packageJSON;
|
|
46
|
-
var packageJSONFieldName = (typeof packageJSON === "undefined" ? "undefined" : _typeof(packageJSON)) === "object" ? packageJSON.fieldName : pkgName;
|
|
47
79
|
|
|
48
|
-
|
|
80
|
+
function findConfig(_ref) {
|
|
81
|
+
var parts = _ref.parts,
|
|
82
|
+
loaderByExt = _ref.loaderByExt,
|
|
83
|
+
configFileName = _ref.configFileName,
|
|
84
|
+
packageJSON = _ref.packageJSON,
|
|
85
|
+
packageJSONFieldName = _ref.packageJSONFieldName;
|
|
86
|
+
var exts = keys(loaderByExt);
|
|
49
87
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
88
|
+
while (exts.length) {
|
|
89
|
+
var ext = exts.shift();
|
|
90
|
+
var configLocation = join(parts, configFileName + ext);
|
|
53
91
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
92
|
+
if (!pathExists.sync(configLocation)) {
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
57
95
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
if (!Array.isArray(_loaders)) {
|
|
73
|
-
var loader = _loaders;
|
|
74
|
-
return {
|
|
75
|
-
config: loader(configLocation),
|
|
76
|
-
filePath: configLocation
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
for (var i = 0; i < _loaders.length; i++) {
|
|
80
|
-
var _loader = _loaders[i];
|
|
81
|
-
var result = _loader(configLocation, true);
|
|
82
|
-
if (result) {
|
|
83
|
-
return {
|
|
84
|
-
config: result,
|
|
85
|
-
filePath: configLocation
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
if (packageJSON) {
|
|
92
|
-
var pkgJSONLoc = join(parts, "package.json");
|
|
93
|
-
if (pathExists.sync(pkgJSONLoc)) {
|
|
94
|
-
var pkgJSON = require(pkgJSONLoc);
|
|
95
|
-
if (pkgJSON[packageJSONFieldName]) {
|
|
96
|
-
return {
|
|
97
|
-
config: pkgJSON[packageJSONFieldName],
|
|
98
|
-
filePath: pkgJSONLoc
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
if (parts.pop()) {
|
|
104
|
-
return findConfig();
|
|
105
|
-
}
|
|
106
|
-
return emptyConfig;
|
|
96
|
+
var loaders = loaderByExt[ext];
|
|
97
|
+
|
|
98
|
+
if (!Array.isArray(loaders)) {
|
|
99
|
+
var loader = loaders;
|
|
100
|
+
var result = loader(configLocation);
|
|
101
|
+
|
|
102
|
+
if (!result) {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return {
|
|
107
|
+
config: result,
|
|
108
|
+
filePath: configLocation
|
|
109
|
+
};
|
|
107
110
|
}
|
|
108
|
-
|
|
111
|
+
|
|
112
|
+
for (var i = 0; i < loaders.length; i++) {
|
|
113
|
+
var _loader = loaders[i];
|
|
114
|
+
|
|
115
|
+
var _result = _loader(configLocation, true);
|
|
116
|
+
|
|
117
|
+
if (!_result) {
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
return {
|
|
122
|
+
config: _result,
|
|
123
|
+
filePath: configLocation
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
if (packageJSON) {
|
|
129
|
+
var pkgJSONLoc = join(parts, "package.json");
|
|
130
|
+
|
|
131
|
+
if (pathExists.sync(pkgJSONLoc)) {
|
|
132
|
+
var pkgJSON = require(pkgJSONLoc);
|
|
133
|
+
|
|
134
|
+
if (pkgJSON[packageJSONFieldName]) {
|
|
135
|
+
return {
|
|
136
|
+
config: pkgJSON[packageJSONFieldName],
|
|
137
|
+
filePath: pkgJSONLoc
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (parts.pop()) {
|
|
144
|
+
return findConfig({
|
|
145
|
+
parts: parts,
|
|
146
|
+
loaderByExt: loaderByExt,
|
|
147
|
+
configFileName: configFileName,
|
|
148
|
+
packageJSON: packageJSON,
|
|
149
|
+
packageJSONFieldName: packageJSONFieldName
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
return undefined;
|
|
154
|
+
}
|
|
109
155
|
|
|
110
156
|
function splitPath(x) {
|
|
111
|
-
|
|
157
|
+
return path.resolve(x || "").split(path.sep);
|
|
112
158
|
}
|
|
113
159
|
|
|
114
160
|
function join(parts, filename) {
|
|
115
|
-
|
|
161
|
+
return path.resolve(parts.join(path.sep) + path.sep, filename);
|
|
116
162
|
}
|
|
117
163
|
|
|
118
164
|
function loadJSConfigFile(filePath, suppress) {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
165
|
+
debug("Loading JavaScript config file: ".concat(filePath));
|
|
166
|
+
|
|
167
|
+
try {
|
|
168
|
+
var content = fs.readFileSync(filePath, "utf-8");
|
|
169
|
+
return requireFromString(content, filePath);
|
|
170
|
+
} catch (e) {
|
|
171
|
+
debug("Error reading JavaScript file: ".concat(filePath));
|
|
172
|
+
|
|
173
|
+
if (!suppress) {
|
|
174
|
+
e.message = "Cannot read config file: ".concat(filePath, "\nError: ").concat(e.message);
|
|
175
|
+
throw e;
|
|
128
176
|
}
|
|
177
|
+
}
|
|
129
178
|
}
|
|
130
179
|
|
|
131
180
|
function loadJSONConfigFile(filePath, suppress) {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
181
|
+
debug("Loading JSON config file: ".concat(filePath));
|
|
182
|
+
|
|
183
|
+
try {
|
|
184
|
+
return JSON5.parse(readFile(filePath));
|
|
185
|
+
} catch (e) {
|
|
186
|
+
debug("Error reading JSON file: ".concat(filePath));
|
|
187
|
+
|
|
188
|
+
if (!suppress) {
|
|
189
|
+
e.message = "Cannot read config file: ".concat(filePath, "\nError: ").concat(e.message);
|
|
190
|
+
throw e;
|
|
142
191
|
}
|
|
192
|
+
}
|
|
143
193
|
}
|
|
144
194
|
|
|
145
195
|
function readFile(filePath) {
|
|
146
|
-
|
|
196
|
+
return fs.readFileSync(filePath, "utf8");
|
|
147
197
|
}
|
|
148
198
|
|
|
149
199
|
function loadYAMLConfigFile(filePath, suppress) {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
}
|
|
200
|
+
debug("Loading YAML config file: ".concat(filePath)); // lazy load YAML to improve performance when not used
|
|
201
|
+
|
|
202
|
+
var yaml = require("js-yaml");
|
|
203
|
+
|
|
204
|
+
try {
|
|
205
|
+
// empty YAML file can be null, so always use
|
|
206
|
+
return yaml.safeLoad(readFile(filePath)) || {};
|
|
207
|
+
} catch (e) {
|
|
208
|
+
debug("Error reading YAML file: ".concat(filePath));
|
|
209
|
+
|
|
210
|
+
if (!suppress) {
|
|
211
|
+
e.message = "Cannot read config file: ".concat(filePath, "\nError: ").concat(e.message);
|
|
212
|
+
throw e;
|
|
164
213
|
}
|
|
214
|
+
}
|
|
165
215
|
}
|
|
166
216
|
//# sourceMappingURL=rc-config-loader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/rc-config-loader.js"],"names":["path","require","debug","requireUncached","JSON5","fs","pathExists","objectAssign","keys","emptyConfig","undefined","defaultLoaderByExt","loadJSConfigFile","loadJSONConfigFile","loadYAMLConfigFile","defaultOptions","packageJSON","defaultExtension","cwd","process","module","exports","rcConfigLoader","pkgName","opts","configFileName","packageJSONFieldName","fieldName","parts","splitPath","loaders","Array","isArray","map","extension","loaderByExt","findConfig","exts","length","ext","shift","configLocation","join","sync","loader","config","filePath","i","result","pkgJSONLoc","pkgJSON","pop","x","resolve","split","sep","filename","suppress","e","message","parse","readFile","readFileSync","yaml","safeLoad"],"mappings":"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","file":"rc-config-loader.js","sourcesContent":["// MIT © 2017 azu\n// MIT © Zoltan Kochan\n// Original https://github.com/zkochan/rcfile\n\"use strict\";\nconst path = require(\"path\");\nconst debug = require(\"debug\")(\"rc-config-loader\");\nconst requireUncached = require(\"require-uncached\");\nconst JSON5 = require(\"json5\");\nconst fs = require(\"fs\");\nconst pathExists = require(\"path-exists\");\nconst objectAssign = require(\"object-assign\");\nconst keys = require(\"object-keys\");\nconst emptyConfig = undefined;\n\nconst defaultLoaderByExt = {\n \".js\": loadJSConfigFile,\n \".json\": loadJSONConfigFile,\n \".yaml\": loadYAMLConfigFile,\n \".yml\": loadYAMLConfigFile,\n};\n\nconst defaultOptions = {\n // does look for `package.json`\n packageJSON: false,\n // treat default(no ext file) as some extension\n defaultExtension: \".json\",\n cwd: process.cwd()\n};\n\n/**\n * @param {string} pkgName\n * @param {rcConfigLoaderOption} [opts]\n * @returns {object}\n */\nmodule.exports = function rcConfigLoader(pkgName, opts = {}) {\n // path/to/config or basename of config file.\n const configFileName = opts.configFileName || `.${pkgName}rc`;\n const defaultExtension = opts.defaultExtension || defaultOptions.defaultExtension;\n const cwd = opts.cwd || defaultOptions.cwd;\n const packageJSON = opts.packageJSON || defaultOptions.packageJSON;\n const packageJSONFieldName = typeof packageJSON === \"object\"\n ? packageJSON.fieldName\n : pkgName;\n\n const parts = splitPath(cwd);\n\n const loaders = Array.isArray(defaultExtension)\n ? defaultExtension.map((extension) => defaultLoaderByExt[extension])\n : defaultLoaderByExt[defaultExtension];\n\n const loaderByExt = objectAssign({}, defaultLoaderByExt, {\n \"\": loaders,\n });\n\n return findConfig(parts);\n\n /**\n * @returns {object} always return object\n */\n function findConfig() {\n const exts = keys(loaderByExt);\n while (exts.length) {\n const ext = exts.shift();\n const configLocation = join(parts, configFileName + ext);\n if (!pathExists.sync(configLocation)) {\n continue;\n }\n const loaders = loaderByExt[ext];\n if (!Array.isArray(loaders)) {\n const loader = loaders;\n return {\n config: loader(configLocation),\n filePath: configLocation\n };\n }\n for (let i = 0; i < loaders.length; i++) {\n const loader = loaders[i];\n const result = loader(configLocation, true);\n if (result) {\n return {\n config: result,\n filePath: configLocation\n };\n }\n }\n }\n\n if (packageJSON) {\n const pkgJSONLoc = join(parts, \"package.json\");\n if (pathExists.sync(pkgJSONLoc)) {\n const pkgJSON = require(pkgJSONLoc);\n if (pkgJSON[packageJSONFieldName]) {\n return {\n config: pkgJSON[packageJSONFieldName],\n filePath: pkgJSONLoc\n };\n }\n }\n }\n if (parts.pop()) {\n return findConfig();\n }\n return emptyConfig;\n }\n};\n\nfunction splitPath(x) {\n return path.resolve(x || \"\").split(path.sep);\n}\n\nfunction join(parts, filename) {\n return path.resolve(parts.join(path.sep) + path.sep, filename);\n}\n\nfunction loadJSConfigFile(filePath, suppress) {\n debug(`Loading JS config file: ${filePath}`);\n try {\n return requireUncached(filePath);\n } catch (e) {\n debug(`Error reading JavaScript file: ${filePath}`);\n if (!suppress) {\n e.message = `Cannot read config file: ${filePath}\\nError: ${e.message}`;\n throw e;\n }\n }\n}\n\nfunction loadJSONConfigFile(filePath, suppress) {\n debug(`Loading JSON config file: ${filePath}`);\n\n try {\n return JSON5.parse(readFile(filePath));\n } catch (e) {\n debug(`Error reading JSON file: ${filePath}`);\n if (!suppress) {\n e.message = `Cannot read config file: ${filePath}\\nError: ${e.message}`;\n throw e;\n }\n }\n}\n\nfunction readFile(filePath) {\n return fs.readFileSync(filePath, \"utf8\");\n}\n\nfunction loadYAMLConfigFile(filePath, suppress) {\n debug(`Loading YAML config file: ${filePath}`);\n\n // lazy load YAML to improve performance when not used\n const yaml = require(\"js-yaml\");\n\n try {\n // empty YAML file can be null, so always use\n return yaml.safeLoad(readFile(filePath)) || {};\n } catch (e) {\n debug(`Error reading YAML file: ${filePath}`);\n if (!suppress) {\n e.message = `Cannot read config file: ${filePath}\\nError: ${e.message}`;\n throw e;\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/rc-config-loader.js"],"names":["path","require","debug","requireFromString","JSON5","fs","pathExists","objectAssign","keys","defaultLoaderByExt","loadJSConfigFile","loadJSONConfigFile","loadYAMLConfigFile","defaultOptions","packageJSON","defaultExtension","cwd","process","module","exports","rcConfigLoader","pkgName","opts","configFileName","packageJSONFieldName","fieldName","parts","splitPath","loaders","Array","isArray","map","extension","loaderByExt","findConfig","exts","length","ext","shift","configLocation","join","sync","loader","result","config","filePath","i","pkgJSONLoc","pkgJSON","pop","undefined","x","resolve","split","sep","filename","suppress","content","readFileSync","e","message","parse","readFile","yaml","safeLoad"],"mappings":"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","sourcesContent":["// MIT © 2017 azu\n// MIT © Zoltan Kochan\n// Original https://github.com/zkochan/rcfile\n\"use strict\";\nconst path = require(\"path\");\nconst debug = require(\"debug\")(\"rc-config-loader\");\nconst requireFromString = require(\"require-from-string\");\nconst JSON5 = require(\"json5\");\nconst fs = require(\"fs\");\nconst pathExists = require(\"path-exists\");\nconst objectAssign = require(\"object-assign\");\nconst keys = require(\"object-keys\");\n\nconst defaultLoaderByExt = {\n \".js\": loadJSConfigFile,\n \".json\": loadJSONConfigFile,\n \".yaml\": loadYAMLConfigFile,\n \".yml\": loadYAMLConfigFile\n};\n\nconst defaultOptions = {\n // does look for `package.json`\n packageJSON: false,\n // treat default(no ext file) as some extension\n defaultExtension: [\".json\", \".yaml\", \".yml\", \".js\"],\n cwd: process.cwd()\n};\n\n/**\n * @param {string} pkgName\n * @param {rcConfigLoaderOption} [opts]\n * @returns {{ config: Object, filePath:string } | undefined}\n */\nmodule.exports = function rcConfigLoader(pkgName, opts = {}) {\n // path/to/config or basename of config file.\n const configFileName = opts.configFileName || `.${pkgName}rc`;\n const defaultExtension = opts.defaultExtension || defaultOptions.defaultExtension;\n const cwd = opts.cwd || defaultOptions.cwd;\n const packageJSON = opts.packageJSON || defaultOptions.packageJSON;\n const packageJSONFieldName = typeof packageJSON === \"object\" ? packageJSON.fieldName : pkgName;\n\n const parts = splitPath(cwd);\n\n const loaders = Array.isArray(defaultExtension)\n ? defaultExtension.map(extension => defaultLoaderByExt[extension])\n : defaultLoaderByExt[defaultExtension];\n\n const loaderByExt = objectAssign({}, defaultLoaderByExt, {\n \"\": loaders\n });\n\n return findConfig({ parts, loaderByExt, configFileName, packageJSON, packageJSONFieldName });\n};\n\n/**\n *\n * @param {string[]} parts\n * @param {Object} loaderByExt\n * @param {string} configFileName\n * @param {boolean|Object} packageJSON\n * @param {string} packageJSONFieldName\n * @returns {{\n * config: string,\n * filePath: string\n * }|undefined}\n */\nfunction findConfig({ parts, loaderByExt, configFileName, packageJSON, packageJSONFieldName }) {\n const exts = keys(loaderByExt);\n while (exts.length) {\n const ext = exts.shift();\n const configLocation = join(parts, configFileName + ext);\n if (!pathExists.sync(configLocation)) {\n continue;\n }\n const loaders = loaderByExt[ext];\n if (!Array.isArray(loaders)) {\n const loader = loaders;\n const result = loader(configLocation);\n if (!result) {\n continue;\n }\n return {\n config: result,\n filePath: configLocation\n };\n }\n for (let i = 0; i < loaders.length; i++) {\n const loader = loaders[i];\n const result = loader(configLocation, true);\n if (!result) {\n continue;\n }\n return {\n config: result,\n filePath: configLocation\n };\n }\n }\n\n if (packageJSON) {\n const pkgJSONLoc = join(parts, \"package.json\");\n if (pathExists.sync(pkgJSONLoc)) {\n const pkgJSON = require(pkgJSONLoc);\n if (pkgJSON[packageJSONFieldName]) {\n return {\n config: pkgJSON[packageJSONFieldName],\n filePath: pkgJSONLoc\n };\n }\n }\n }\n if (parts.pop()) {\n return findConfig({ parts, loaderByExt, configFileName, packageJSON, packageJSONFieldName });\n }\n return undefined;\n}\n\nfunction splitPath(x) {\n return path.resolve(x || \"\").split(path.sep);\n}\n\nfunction join(parts, filename) {\n return path.resolve(parts.join(path.sep) + path.sep, filename);\n}\n\nfunction loadJSConfigFile(filePath, suppress) {\n debug(`Loading JavaScript config file: ${filePath}`);\n try {\n const content = fs.readFileSync(filePath, \"utf-8\");\n return requireFromString(content, filePath);\n } catch (e) {\n debug(`Error reading JavaScript file: ${filePath}`);\n if (!suppress) {\n e.message = `Cannot read config file: ${filePath}\\nError: ${e.message}`;\n throw e;\n }\n }\n}\n\nfunction loadJSONConfigFile(filePath, suppress) {\n debug(`Loading JSON config file: ${filePath}`);\n\n try {\n return JSON5.parse(readFile(filePath));\n } catch (e) {\n debug(`Error reading JSON file: ${filePath}`);\n if (!suppress) {\n e.message = `Cannot read config file: ${filePath}\\nError: ${e.message}`;\n throw e;\n }\n }\n}\n\nfunction readFile(filePath) {\n return fs.readFileSync(filePath, \"utf8\");\n}\n\nfunction loadYAMLConfigFile(filePath, suppress) {\n debug(`Loading YAML config file: ${filePath}`);\n\n // lazy load YAML to improve performance when not used\n const yaml = require(\"js-yaml\");\n\n try {\n // empty YAML file can be null, so always use\n return yaml.safeLoad(readFile(filePath)) || {};\n } catch (e) {\n debug(`Error reading YAML file: ${filePath}`);\n if (!suppress) {\n e.message = `Cannot read config file: ${filePath}\\nError: ${e.message}`;\n throw e;\n }\n }\n}\n"],"file":"rc-config-loader.js"}
|
package/package.json
CHANGED
|
@@ -10,14 +10,15 @@
|
|
|
10
10
|
"src/"
|
|
11
11
|
],
|
|
12
12
|
"name": "rc-config-loader",
|
|
13
|
-
"version": "2.0.
|
|
13
|
+
"version": "2.0.4",
|
|
14
14
|
"description": "load config file from .{product}rc.{json,yml,js}",
|
|
15
15
|
"main": "lib/rc-config-loader.js",
|
|
16
16
|
"scripts": {
|
|
17
17
|
"test": "mocha test/",
|
|
18
18
|
"build": "cross-env NODE_ENV=production babel src --out-dir lib --copy-files --source-maps",
|
|
19
19
|
"watch": "babel src --out-dir lib --watch --source-maps",
|
|
20
|
-
"prepublish": "npm run --if-present build"
|
|
20
|
+
"prepublish": "npm run --if-present build",
|
|
21
|
+
"prettier": "prettier --write '**/*.{js,jsx,ts,tsx,css}'"
|
|
21
22
|
},
|
|
22
23
|
"keywords": [
|
|
23
24
|
"rc",
|
|
@@ -37,24 +38,44 @@
|
|
|
37
38
|
},
|
|
38
39
|
"homepage": "https://github.com/azu/rc-config-loader",
|
|
39
40
|
"dependencies": {
|
|
40
|
-
"debug": "^
|
|
41
|
-
"js-yaml": "^3.
|
|
42
|
-
"json5": "^
|
|
41
|
+
"debug": "^4.1.1",
|
|
42
|
+
"js-yaml": "^3.12.0",
|
|
43
|
+
"json5": "^2.1.0",
|
|
43
44
|
"object-assign": "^4.1.0",
|
|
44
|
-
"object-keys": "^1.0.
|
|
45
|
-
"path-exists": "^
|
|
46
|
-
"require-
|
|
45
|
+
"object-keys": "^1.0.12",
|
|
46
|
+
"path-exists": "^3.0.0",
|
|
47
|
+
"require-from-string": "^2.0.2"
|
|
47
48
|
},
|
|
48
49
|
"devDependencies": {
|
|
49
|
-
"babel
|
|
50
|
-
"babel
|
|
51
|
-
"babel
|
|
52
|
-
"babel
|
|
53
|
-
"babel-
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
50
|
+
"@babel/cli": "^7.0.0",
|
|
51
|
+
"@babel/core": "^7.0.0",
|
|
52
|
+
"@babel/preset-env": "^7.0.0",
|
|
53
|
+
"@babel/register": "^7.0.0",
|
|
54
|
+
"babel-preset-jsdoc-to-assert": "^5.0.0",
|
|
55
|
+
"babel-preset-power-assert": "^3.0.0",
|
|
56
|
+
"chai": "^4.2.0",
|
|
57
|
+
"cross-env": "^5.2.0",
|
|
58
|
+
"eslint": "^6.0.1",
|
|
59
|
+
"husky": "^3.0.0",
|
|
60
|
+
"lint-staged": "^9.1.0",
|
|
61
|
+
"mocha": "^6.1.4",
|
|
62
|
+
"power-assert": "^1.4.2",
|
|
63
|
+
"prettier": "^1.8.2"
|
|
64
|
+
},
|
|
65
|
+
"prettier": {
|
|
66
|
+
"printWidth": 120,
|
|
67
|
+
"tabWidth": 4
|
|
68
|
+
},
|
|
69
|
+
"lint-staged": {
|
|
70
|
+
"*.{js,jsx,ts,tsx,css}": [
|
|
71
|
+
"prettier --write",
|
|
72
|
+
"git add"
|
|
73
|
+
]
|
|
74
|
+
},
|
|
75
|
+
"husky": {
|
|
76
|
+
"hooks": {
|
|
77
|
+
"post-commit": "git reset",
|
|
78
|
+
"pre-commit": "lint-staged"
|
|
79
|
+
}
|
|
59
80
|
}
|
|
60
81
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
export interface rcConfigLoaderOption {
|
|
2
2
|
// does look for `package.json`
|
|
3
|
-
packageJSON?: boolean
|
|
3
|
+
packageJSON?: boolean;
|
|
4
4
|
// if config file name is not same with packageName, set the name
|
|
5
5
|
configFileName?: string;
|
|
6
6
|
// treat default(no ext file) as some extension
|
|
7
|
-
defaultExtension?: string | string[]
|
|
7
|
+
defaultExtension?: string | string[];
|
|
8
8
|
// where start to load
|
|
9
9
|
cwd?: string;
|
|
10
10
|
}
|
|
11
|
-
export default function rcConfigLoader(packageName: string, options?: rcConfigLoaderOption): Object;
|
|
11
|
+
export default function rcConfigLoader(packageName: string, options?: rcConfigLoaderOption): Object;
|
package/src/rc-config-loader.js
CHANGED
|
@@ -4,33 +4,32 @@
|
|
|
4
4
|
"use strict";
|
|
5
5
|
const path = require("path");
|
|
6
6
|
const debug = require("debug")("rc-config-loader");
|
|
7
|
-
const
|
|
7
|
+
const requireFromString = require("require-from-string");
|
|
8
8
|
const JSON5 = require("json5");
|
|
9
9
|
const fs = require("fs");
|
|
10
10
|
const pathExists = require("path-exists");
|
|
11
11
|
const objectAssign = require("object-assign");
|
|
12
12
|
const keys = require("object-keys");
|
|
13
|
-
const emptyConfig = undefined;
|
|
14
13
|
|
|
15
14
|
const defaultLoaderByExt = {
|
|
16
15
|
".js": loadJSConfigFile,
|
|
17
16
|
".json": loadJSONConfigFile,
|
|
18
17
|
".yaml": loadYAMLConfigFile,
|
|
19
|
-
".yml": loadYAMLConfigFile
|
|
18
|
+
".yml": loadYAMLConfigFile
|
|
20
19
|
};
|
|
21
20
|
|
|
22
21
|
const defaultOptions = {
|
|
23
22
|
// does look for `package.json`
|
|
24
23
|
packageJSON: false,
|
|
25
24
|
// treat default(no ext file) as some extension
|
|
26
|
-
defaultExtension: ".json",
|
|
25
|
+
defaultExtension: [".json", ".yaml", ".yml", ".js"],
|
|
27
26
|
cwd: process.cwd()
|
|
28
27
|
};
|
|
29
28
|
|
|
30
29
|
/**
|
|
31
30
|
* @param {string} pkgName
|
|
32
31
|
* @param {rcConfigLoaderOption} [opts]
|
|
33
|
-
* @returns {
|
|
32
|
+
* @returns {{ config: Object, filePath:string } | undefined}
|
|
34
33
|
*/
|
|
35
34
|
module.exports = function rcConfigLoader(pkgName, opts = {}) {
|
|
36
35
|
// path/to/config or basename of config file.
|
|
@@ -38,71 +37,83 @@ module.exports = function rcConfigLoader(pkgName, opts = {}) {
|
|
|
38
37
|
const defaultExtension = opts.defaultExtension || defaultOptions.defaultExtension;
|
|
39
38
|
const cwd = opts.cwd || defaultOptions.cwd;
|
|
40
39
|
const packageJSON = opts.packageJSON || defaultOptions.packageJSON;
|
|
41
|
-
const packageJSONFieldName = typeof packageJSON === "object"
|
|
42
|
-
? packageJSON.fieldName
|
|
43
|
-
: pkgName;
|
|
40
|
+
const packageJSONFieldName = typeof packageJSON === "object" ? packageJSON.fieldName : pkgName;
|
|
44
41
|
|
|
45
42
|
const parts = splitPath(cwd);
|
|
46
43
|
|
|
47
44
|
const loaders = Array.isArray(defaultExtension)
|
|
48
|
-
? defaultExtension.map(
|
|
45
|
+
? defaultExtension.map(extension => defaultLoaderByExt[extension])
|
|
49
46
|
: defaultLoaderByExt[defaultExtension];
|
|
50
47
|
|
|
51
48
|
const loaderByExt = objectAssign({}, defaultLoaderByExt, {
|
|
52
|
-
"": loaders
|
|
49
|
+
"": loaders
|
|
53
50
|
});
|
|
54
51
|
|
|
55
|
-
return findConfig(parts);
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
52
|
+
return findConfig({ parts, loaderByExt, configFileName, packageJSON, packageJSONFieldName });
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
*
|
|
57
|
+
* @param {string[]} parts
|
|
58
|
+
* @param {Object} loaderByExt
|
|
59
|
+
* @param {string} configFileName
|
|
60
|
+
* @param {boolean|Object} packageJSON
|
|
61
|
+
* @param {string} packageJSONFieldName
|
|
62
|
+
* @returns {{
|
|
63
|
+
* config: string,
|
|
64
|
+
* filePath: string
|
|
65
|
+
* }|undefined}
|
|
66
|
+
*/
|
|
67
|
+
function findConfig({ parts, loaderByExt, configFileName, packageJSON, packageJSONFieldName }) {
|
|
68
|
+
const exts = keys(loaderByExt);
|
|
69
|
+
while (exts.length) {
|
|
70
|
+
const ext = exts.shift();
|
|
71
|
+
const configLocation = join(parts, configFileName + ext);
|
|
72
|
+
if (!pathExists.sync(configLocation)) {
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
const loaders = loaderByExt[ext];
|
|
76
|
+
if (!Array.isArray(loaders)) {
|
|
77
|
+
const loader = loaders;
|
|
78
|
+
const result = loader(configLocation);
|
|
79
|
+
if (!result) {
|
|
66
80
|
continue;
|
|
67
81
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
const result = loader(configLocation, true);
|
|
79
|
-
if (result) {
|
|
80
|
-
return {
|
|
81
|
-
config: result,
|
|
82
|
-
filePath: configLocation
|
|
83
|
-
};
|
|
84
|
-
}
|
|
82
|
+
return {
|
|
83
|
+
config: result,
|
|
84
|
+
filePath: configLocation
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
for (let i = 0; i < loaders.length; i++) {
|
|
88
|
+
const loader = loaders[i];
|
|
89
|
+
const result = loader(configLocation, true);
|
|
90
|
+
if (!result) {
|
|
91
|
+
continue;
|
|
85
92
|
}
|
|
93
|
+
return {
|
|
94
|
+
config: result,
|
|
95
|
+
filePath: configLocation
|
|
96
|
+
};
|
|
86
97
|
}
|
|
98
|
+
}
|
|
87
99
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
}
|
|
100
|
+
if (packageJSON) {
|
|
101
|
+
const pkgJSONLoc = join(parts, "package.json");
|
|
102
|
+
if (pathExists.sync(pkgJSONLoc)) {
|
|
103
|
+
const pkgJSON = require(pkgJSONLoc);
|
|
104
|
+
if (pkgJSON[packageJSONFieldName]) {
|
|
105
|
+
return {
|
|
106
|
+
config: pkgJSON[packageJSONFieldName],
|
|
107
|
+
filePath: pkgJSONLoc
|
|
108
|
+
};
|
|
98
109
|
}
|
|
99
110
|
}
|
|
100
|
-
if (parts.pop()) {
|
|
101
|
-
return findConfig();
|
|
102
|
-
}
|
|
103
|
-
return emptyConfig;
|
|
104
111
|
}
|
|
105
|
-
|
|
112
|
+
if (parts.pop()) {
|
|
113
|
+
return findConfig({ parts, loaderByExt, configFileName, packageJSON, packageJSONFieldName });
|
|
114
|
+
}
|
|
115
|
+
return undefined;
|
|
116
|
+
}
|
|
106
117
|
|
|
107
118
|
function splitPath(x) {
|
|
108
119
|
return path.resolve(x || "").split(path.sep);
|
|
@@ -113,9 +124,10 @@ function join(parts, filename) {
|
|
|
113
124
|
}
|
|
114
125
|
|
|
115
126
|
function loadJSConfigFile(filePath, suppress) {
|
|
116
|
-
debug(`Loading
|
|
127
|
+
debug(`Loading JavaScript config file: ${filePath}`);
|
|
117
128
|
try {
|
|
118
|
-
|
|
129
|
+
const content = fs.readFileSync(filePath, "utf-8");
|
|
130
|
+
return requireFromString(content, filePath);
|
|
119
131
|
} catch (e) {
|
|
120
132
|
debug(`Error reading JavaScript file: ${filePath}`);
|
|
121
133
|
if (!suppress) {
|