rc-config-loader 3.0.0 → 4.0.0
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 -4
- package/lib/rc-config-loader.js +58 -61
- package/lib/rc-config-loader.js.map +1 -1
- package/package.json +16 -16
- package/src/rc-config-loader.ts +16 -18
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# rc-config-loader [](https://github.com/azu/rc-config-loader/actions?query=workflow%3A"test")
|
|
2
2
|
|
|
3
3
|
Load config from `.{product}rc.{json,yml,js}` file.
|
|
4
4
|
|
|
@@ -26,9 +26,10 @@ Find and load a configuration object from:
|
|
|
26
26
|
|
|
27
27
|
- <del>Sync loading</del>
|
|
28
28
|
- [cosmiconfig@3+](https://github.com/davidtheclark/cosmiconfig/blob/master/CHANGELOG.md#300) support `sync` option
|
|
29
|
-
- Built-in TypeScript support
|
|
29
|
+
- <del>Built-in TypeScript support</del>
|
|
30
|
+
- [comisconfig@6*](https://github.com/davidtheclark/cosmiconfig/blob/master/CHANGELOG.md#600) is written by TypeScript
|
|
30
31
|
|
|
31
|
-
If you want to async support and customize loader,
|
|
32
|
+
If you want to async support and customize loader, recommended to use [cosmiconfig](https://github.com/davidtheclark/cosmiconfig).
|
|
32
33
|
|
|
33
34
|
## Install
|
|
34
35
|
|
|
@@ -91,7 +92,7 @@ function loadRcFile(rcFileName){
|
|
|
91
92
|
if (!results) {
|
|
92
93
|
return {};
|
|
93
94
|
}
|
|
94
|
-
return config;
|
|
95
|
+
return results.config;
|
|
95
96
|
} catch (error) {
|
|
96
97
|
// Found it, but it is parsing error
|
|
97
98
|
return {} ; // default value
|
package/lib/rc-config-loader.js
CHANGED
|
@@ -3,30 +3,31 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.rcFile = void 0;
|
|
6
7
|
// MIT © 2017 azu
|
|
7
8
|
// MIT © Zoltan Kochan
|
|
8
9
|
// Original https://github.com/zkochan/rcfile
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
const fs_1 = __importDefault(require("fs"));
|
|
12
|
+
const require_from_string_1 = __importDefault(require("require-from-string"));
|
|
13
|
+
const json5_1 = __importDefault(require("json5"));
|
|
14
|
+
const debug = require("debug")("rc-config-loader");
|
|
15
|
+
const defaultLoaderByExt = {
|
|
15
16
|
".js": loadJSConfigFile,
|
|
16
17
|
".json": loadJSONConfigFile,
|
|
17
18
|
".yaml": loadYAMLConfigFile,
|
|
18
|
-
".yml": loadYAMLConfigFile
|
|
19
|
+
".yml": loadYAMLConfigFile,
|
|
19
20
|
};
|
|
20
|
-
|
|
21
|
+
const defaultOptions = {
|
|
21
22
|
// does look for `package.json`
|
|
22
23
|
packageJSON: false,
|
|
23
24
|
// treat default(no ext file) as some extension
|
|
24
25
|
defaultExtension: [".json", ".yaml", ".yml", ".js"],
|
|
25
|
-
cwd: process.cwd()
|
|
26
|
+
cwd: process.cwd(),
|
|
26
27
|
};
|
|
27
|
-
|
|
28
|
+
const selectLoader = (defaultLoaderByExt, extension) => {
|
|
28
29
|
if (![".json", ".yaml", ".yml", ".js"].includes(extension)) {
|
|
29
|
-
throw new Error(extension
|
|
30
|
+
throw new Error(`${extension} is not supported.`);
|
|
30
31
|
}
|
|
31
32
|
return defaultLoaderByExt[extension];
|
|
32
33
|
};
|
|
@@ -37,28 +38,25 @@ var selectLoader = function (defaultLoaderByExt, extension) {
|
|
|
37
38
|
* @param {rcConfigLoaderOption} [opts]
|
|
38
39
|
* @returns {{ config: Object, filePath:string } | undefined}
|
|
39
40
|
*/
|
|
40
|
-
function rcFile(pkgName, opts) {
|
|
41
|
-
if (opts === void 0) { opts = {}; }
|
|
41
|
+
function rcFile(pkgName, opts = {}) {
|
|
42
42
|
// path/to/config or basename of config file.
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
? defaultExtension.map(
|
|
43
|
+
const configFileName = opts.configFileName || `.${pkgName}rc`;
|
|
44
|
+
const defaultExtension = opts.defaultExtension || defaultOptions.defaultExtension;
|
|
45
|
+
const cwd = opts.cwd || defaultOptions.cwd;
|
|
46
|
+
const packageJSON = opts.packageJSON || defaultOptions.packageJSON;
|
|
47
|
+
const packageJSONFieldName = typeof packageJSON === "object" ? packageJSON.fieldName : pkgName;
|
|
48
|
+
const parts = splitPath(cwd);
|
|
49
|
+
const loadersByOrder = Array.isArray(defaultExtension)
|
|
50
|
+
? defaultExtension.map((extension) => selectLoader(defaultLoaderByExt, extension))
|
|
51
51
|
: selectLoader(defaultLoaderByExt, defaultExtension);
|
|
52
|
-
|
|
53
|
-
"": loadersByOrder
|
|
54
|
-
});
|
|
52
|
+
const loaderByExt = Object.assign(Object.assign({}, defaultLoaderByExt), { "": loadersByOrder });
|
|
55
53
|
return findConfig({
|
|
56
|
-
parts
|
|
57
|
-
loaderByExt
|
|
58
|
-
loadersByOrder
|
|
59
|
-
configFileName
|
|
60
|
-
packageJSON
|
|
61
|
-
packageJSONFieldName
|
|
54
|
+
parts,
|
|
55
|
+
loaderByExt,
|
|
56
|
+
loadersByOrder,
|
|
57
|
+
configFileName,
|
|
58
|
+
packageJSON,
|
|
59
|
+
packageJSONFieldName,
|
|
62
60
|
});
|
|
63
61
|
}
|
|
64
62
|
exports.rcFile = rcFile;
|
|
@@ -69,55 +67,54 @@ exports.rcFile = rcFile;
|
|
|
69
67
|
* filePath: string
|
|
70
68
|
* }}
|
|
71
69
|
*/
|
|
72
|
-
function findConfig(
|
|
73
|
-
|
|
74
|
-
var extensions = Object.keys(loaderByExt);
|
|
70
|
+
function findConfig({ parts, loaderByExt, loadersByOrder, configFileName, packageJSON, packageJSONFieldName, }) {
|
|
71
|
+
const extensions = Object.keys(loaderByExt);
|
|
75
72
|
while (extensions.length) {
|
|
76
|
-
|
|
73
|
+
const ext = extensions.shift();
|
|
77
74
|
// may be ext is "". if it .<product>rc
|
|
78
|
-
|
|
75
|
+
const configLocation = join(parts, configFileName + ext);
|
|
79
76
|
if (!fs_1.default.existsSync(configLocation)) {
|
|
80
77
|
continue;
|
|
81
78
|
}
|
|
82
79
|
// if ext === ""(empty string):, use ordered loaders
|
|
83
|
-
|
|
80
|
+
const loaders = ext ? loaderByExt[ext] : loadersByOrder;
|
|
84
81
|
if (!Array.isArray(loaders)) {
|
|
85
|
-
|
|
86
|
-
|
|
82
|
+
const loader = loaders;
|
|
83
|
+
const result = loader(configLocation, false);
|
|
87
84
|
if (!result) {
|
|
88
85
|
continue;
|
|
89
86
|
}
|
|
90
87
|
return {
|
|
91
88
|
config: result,
|
|
92
|
-
filePath: configLocation
|
|
89
|
+
filePath: configLocation,
|
|
93
90
|
};
|
|
94
91
|
}
|
|
95
|
-
for (
|
|
96
|
-
|
|
97
|
-
|
|
92
|
+
for (let i = 0; i < loaders.length; i++) {
|
|
93
|
+
const loader = loaders[i];
|
|
94
|
+
const result = loader(configLocation, true);
|
|
98
95
|
if (!result) {
|
|
99
96
|
continue;
|
|
100
97
|
}
|
|
101
98
|
return {
|
|
102
99
|
config: result,
|
|
103
|
-
filePath: configLocation
|
|
100
|
+
filePath: configLocation,
|
|
104
101
|
};
|
|
105
102
|
}
|
|
106
103
|
}
|
|
107
104
|
if (packageJSON) {
|
|
108
|
-
|
|
105
|
+
const pkgJSONLoc = join(parts, "package.json");
|
|
109
106
|
if (fs_1.default.existsSync(pkgJSONLoc)) {
|
|
110
|
-
|
|
107
|
+
const pkgJSON = require(pkgJSONLoc);
|
|
111
108
|
if (pkgJSON[packageJSONFieldName]) {
|
|
112
109
|
return {
|
|
113
110
|
config: pkgJSON[packageJSONFieldName],
|
|
114
|
-
filePath: pkgJSONLoc
|
|
111
|
+
filePath: pkgJSONLoc,
|
|
115
112
|
};
|
|
116
113
|
}
|
|
117
114
|
}
|
|
118
115
|
}
|
|
119
116
|
if (parts.pop()) {
|
|
120
|
-
return findConfig({ parts
|
|
117
|
+
return findConfig({ parts, loaderByExt, loadersByOrder, configFileName, packageJSON, packageJSONFieldName });
|
|
121
118
|
}
|
|
122
119
|
return;
|
|
123
120
|
}
|
|
@@ -128,28 +125,28 @@ function join(parts, filename) {
|
|
|
128
125
|
return path_1.default.resolve(parts.join(path_1.default.sep) + path_1.default.sep, filename);
|
|
129
126
|
}
|
|
130
127
|
function loadJSConfigFile(filePath, suppress) {
|
|
131
|
-
debug(
|
|
128
|
+
debug(`Loading JavaScript config file: ${filePath}`);
|
|
132
129
|
try {
|
|
133
|
-
|
|
134
|
-
return
|
|
130
|
+
const content = fs_1.default.readFileSync(filePath, "utf-8");
|
|
131
|
+
return require_from_string_1.default(content, filePath);
|
|
135
132
|
}
|
|
136
133
|
catch (error) {
|
|
137
|
-
debug(
|
|
134
|
+
debug(`Error reading JavaScript file: ${filePath}`);
|
|
138
135
|
if (!suppress) {
|
|
139
|
-
error.message =
|
|
136
|
+
error.message = `Cannot read config file: ${filePath}\nError: ${error.message}`;
|
|
140
137
|
throw error;
|
|
141
138
|
}
|
|
142
139
|
}
|
|
143
140
|
}
|
|
144
141
|
function loadJSONConfigFile(filePath, suppress) {
|
|
145
|
-
debug(
|
|
142
|
+
debug(`Loading JSON config file: ${filePath}`);
|
|
146
143
|
try {
|
|
147
|
-
return
|
|
144
|
+
return json5_1.default.parse(readFile(filePath));
|
|
148
145
|
}
|
|
149
146
|
catch (error) {
|
|
150
|
-
debug(
|
|
147
|
+
debug(`Error reading JSON file: ${filePath}`);
|
|
151
148
|
if (!suppress) {
|
|
152
|
-
error.message =
|
|
149
|
+
error.message = `Cannot read config file: ${filePath}\nError: ${error.message}`;
|
|
153
150
|
throw error;
|
|
154
151
|
}
|
|
155
152
|
}
|
|
@@ -158,17 +155,17 @@ function readFile(filePath) {
|
|
|
158
155
|
return fs_1.default.readFileSync(filePath, "utf8");
|
|
159
156
|
}
|
|
160
157
|
function loadYAMLConfigFile(filePath, suppress) {
|
|
161
|
-
debug(
|
|
158
|
+
debug(`Loading YAML config file: ${filePath}`);
|
|
162
159
|
// lazy load YAML to improve performance when not used
|
|
163
|
-
|
|
160
|
+
const yaml = require("js-yaml");
|
|
164
161
|
try {
|
|
165
162
|
// empty YAML file can be null, so always use
|
|
166
|
-
return yaml.
|
|
163
|
+
return yaml.load(readFile(filePath)) || {};
|
|
167
164
|
}
|
|
168
165
|
catch (error) {
|
|
169
|
-
debug(
|
|
166
|
+
debug(`Error reading YAML file: ${filePath}`);
|
|
170
167
|
if (!suppress) {
|
|
171
|
-
error.message =
|
|
168
|
+
error.message = `Cannot read config file: ${filePath}\nError: ${error.message}`;
|
|
172
169
|
throw error;
|
|
173
170
|
}
|
|
174
171
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rc-config-loader.js","sourceRoot":"","sources":["../src/rc-config-loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rc-config-loader.js","sourceRoot":"","sources":["../src/rc-config-loader.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rc-config-loader",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"description": "load config file from .{product}rc.{json,yml,js}",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"config",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"test": "test"
|
|
33
33
|
},
|
|
34
34
|
"scripts": {
|
|
35
|
-
"build": "
|
|
35
|
+
"build": "tsc -p .",
|
|
36
36
|
"prettier": "prettier --write '**/*.{js,jsx,ts,tsx,css}'",
|
|
37
37
|
"prepublish": "npm run --if-present build",
|
|
38
38
|
"test": "mocha \"test/**/*.{js,ts}\"",
|
|
@@ -46,8 +46,7 @@
|
|
|
46
46
|
},
|
|
47
47
|
"lint-staged": {
|
|
48
48
|
"*.{js,jsx,ts,tsx,css}": [
|
|
49
|
-
"prettier --write"
|
|
50
|
-
"git add"
|
|
49
|
+
"prettier --write"
|
|
51
50
|
]
|
|
52
51
|
},
|
|
53
52
|
"prettier": {
|
|
@@ -56,21 +55,22 @@
|
|
|
56
55
|
},
|
|
57
56
|
"dependencies": {
|
|
58
57
|
"debug": "^4.1.1",
|
|
59
|
-
"js-yaml": "^
|
|
60
|
-
"json5": "^2.1.
|
|
58
|
+
"js-yaml": "^4.0.0",
|
|
59
|
+
"json5": "^2.1.2",
|
|
61
60
|
"require-from-string": "^2.0.2"
|
|
62
61
|
},
|
|
63
62
|
"devDependencies": {
|
|
64
|
-
"@types/
|
|
65
|
-
"@types/
|
|
63
|
+
"@types/json5": "^0.0.30",
|
|
64
|
+
"@types/mocha": "^8.2.0",
|
|
65
|
+
"@types/node": "^14.14.20",
|
|
66
|
+
"@types/require-from-string": "^1.2.0",
|
|
66
67
|
"chai": "^4.2.0",
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
"
|
|
72
|
-
"ts-node": "^
|
|
73
|
-
"
|
|
74
|
-
"typescript": "^3.6.4"
|
|
68
|
+
"husky": "^4.2.3",
|
|
69
|
+
"lint-staged": "^10.1.1",
|
|
70
|
+
"mocha": "^8.2.1",
|
|
71
|
+
"prettier": "^2.0.2",
|
|
72
|
+
"ts-node": "^9.1.1",
|
|
73
|
+
"ts-node-test-register": "^9.0.1",
|
|
74
|
+
"typescript": "^4.1.3"
|
|
75
75
|
}
|
|
76
76
|
}
|
package/src/rc-config-loader.ts
CHANGED
|
@@ -3,16 +3,15 @@
|
|
|
3
3
|
// Original https://github.com/zkochan/rcfile
|
|
4
4
|
import path from "path";
|
|
5
5
|
import fs from "fs";
|
|
6
|
+
import requireFromString from "require-from-string";
|
|
7
|
+
import JSON5 from "json5";
|
|
6
8
|
|
|
7
9
|
const debug = require("debug")("rc-config-loader");
|
|
8
|
-
const requireFromString = require("require-from-string");
|
|
9
|
-
const JSON5 = require("json5");
|
|
10
|
-
|
|
11
10
|
const defaultLoaderByExt = {
|
|
12
11
|
".js": loadJSConfigFile,
|
|
13
12
|
".json": loadJSONConfigFile,
|
|
14
13
|
".yaml": loadYAMLConfigFile,
|
|
15
|
-
".yml": loadYAMLConfigFile
|
|
14
|
+
".yml": loadYAMLConfigFile,
|
|
16
15
|
};
|
|
17
16
|
|
|
18
17
|
const defaultOptions = {
|
|
@@ -20,7 +19,7 @@ const defaultOptions = {
|
|
|
20
19
|
packageJSON: false,
|
|
21
20
|
// treat default(no ext file) as some extension
|
|
22
21
|
defaultExtension: [".json", ".yaml", ".yml", ".js"],
|
|
23
|
-
cwd: process.cwd()
|
|
22
|
+
cwd: process.cwd(),
|
|
24
23
|
};
|
|
25
24
|
|
|
26
25
|
export interface rcConfigLoaderOption {
|
|
@@ -72,19 +71,20 @@ export function rcFile<R extends {}>(
|
|
|
72
71
|
|
|
73
72
|
const parts = splitPath(cwd);
|
|
74
73
|
const loadersByOrder = Array.isArray(defaultExtension)
|
|
75
|
-
? defaultExtension.map(extension => selectLoader(defaultLoaderByExt, extension))
|
|
74
|
+
? defaultExtension.map((extension) => selectLoader(defaultLoaderByExt, extension))
|
|
76
75
|
: selectLoader(defaultLoaderByExt, defaultExtension);
|
|
77
76
|
|
|
78
|
-
const loaderByExt =
|
|
79
|
-
|
|
80
|
-
|
|
77
|
+
const loaderByExt = {
|
|
78
|
+
...defaultLoaderByExt,
|
|
79
|
+
"": loadersByOrder,
|
|
80
|
+
};
|
|
81
81
|
return findConfig<R>({
|
|
82
82
|
parts,
|
|
83
83
|
loaderByExt,
|
|
84
84
|
loadersByOrder,
|
|
85
85
|
configFileName,
|
|
86
86
|
packageJSON,
|
|
87
|
-
packageJSONFieldName
|
|
87
|
+
packageJSONFieldName,
|
|
88
88
|
});
|
|
89
89
|
}
|
|
90
90
|
|
|
@@ -101,11 +101,11 @@ function findConfig<R extends {}>({
|
|
|
101
101
|
loadersByOrder,
|
|
102
102
|
configFileName,
|
|
103
103
|
packageJSON,
|
|
104
|
-
packageJSONFieldName
|
|
104
|
+
packageJSONFieldName,
|
|
105
105
|
}: {
|
|
106
106
|
parts: string[];
|
|
107
107
|
loaderByExt: {
|
|
108
|
-
[index: string]: Loader;
|
|
108
|
+
[index: string]: Loader | Loader[];
|
|
109
109
|
};
|
|
110
110
|
loadersByOrder: Loader | Loader[];
|
|
111
111
|
configFileName: string;
|
|
@@ -135,7 +135,7 @@ function findConfig<R extends {}>({
|
|
|
135
135
|
}
|
|
136
136
|
return {
|
|
137
137
|
config: result,
|
|
138
|
-
filePath: configLocation
|
|
138
|
+
filePath: configLocation,
|
|
139
139
|
};
|
|
140
140
|
}
|
|
141
141
|
for (let i = 0; i < loaders.length; i++) {
|
|
@@ -146,7 +146,7 @@ function findConfig<R extends {}>({
|
|
|
146
146
|
}
|
|
147
147
|
return {
|
|
148
148
|
config: result,
|
|
149
|
-
filePath: configLocation
|
|
149
|
+
filePath: configLocation,
|
|
150
150
|
};
|
|
151
151
|
}
|
|
152
152
|
}
|
|
@@ -158,7 +158,7 @@ function findConfig<R extends {}>({
|
|
|
158
158
|
if (pkgJSON[packageJSONFieldName]) {
|
|
159
159
|
return {
|
|
160
160
|
config: pkgJSON[packageJSONFieldName],
|
|
161
|
-
filePath: pkgJSONLoc
|
|
161
|
+
filePath: pkgJSONLoc,
|
|
162
162
|
};
|
|
163
163
|
}
|
|
164
164
|
}
|
|
@@ -211,13 +211,11 @@ function readFile(filePath: string) {
|
|
|
211
211
|
|
|
212
212
|
function loadYAMLConfigFile(filePath: string, suppress: boolean) {
|
|
213
213
|
debug(`Loading YAML config file: ${filePath}`);
|
|
214
|
-
|
|
215
214
|
// lazy load YAML to improve performance when not used
|
|
216
215
|
const yaml = require("js-yaml");
|
|
217
|
-
|
|
218
216
|
try {
|
|
219
217
|
// empty YAML file can be null, so always use
|
|
220
|
-
return yaml.
|
|
218
|
+
return yaml.load(readFile(filePath)) || {};
|
|
221
219
|
} catch (error) {
|
|
222
220
|
debug(`Error reading YAML file: ${filePath}`);
|
|
223
221
|
if (!suppress) {
|