rc-config-loader 4.1.0 → 4.1.2
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/lib/rc-config-loader.d.ts +2 -12
- package/lib/rc-config-loader.js +8 -10
- package/lib/rc-config-loader.js.map +1 -1
- package/lib/types.d.ts +21 -0
- package/lib/types.js +3 -0
- package/lib/types.js.map +1 -0
- package/package.json +19 -19
- package/src/rc-config-loader.ts +26 -39
- package/src/types.ts +32 -0
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
packageJSON?: boolean | {
|
|
3
|
-
fieldName: string;
|
|
4
|
-
};
|
|
5
|
-
configFileName?: string;
|
|
6
|
-
defaultExtension?: string | string[];
|
|
7
|
-
cwd?: string;
|
|
8
|
-
}
|
|
1
|
+
import type { PossibleUndefined, rcConfigLoaderOption, rcConfigResult } from "./types";
|
|
9
2
|
/**
|
|
10
3
|
* Find and load rcfile, return { config, filePath }
|
|
11
4
|
* If not found any rcfile, throw an Error.
|
|
@@ -13,7 +6,4 @@ export interface rcConfigLoaderOption {
|
|
|
13
6
|
* @param {rcConfigLoaderOption} [opts]
|
|
14
7
|
* @returns {{ config: Object, filePath:string } | undefined}
|
|
15
8
|
*/
|
|
16
|
-
export declare function rcFile<R extends {}>(pkgName: string, opts?: rcConfigLoaderOption):
|
|
17
|
-
config: R;
|
|
18
|
-
filePath: string;
|
|
19
|
-
} | undefined;
|
|
9
|
+
export declare function rcFile<R extends {}>(pkgName: string, opts?: rcConfigLoaderOption): PossibleUndefined<rcConfigResult<R>>;
|
package/lib/rc-config-loader.js
CHANGED
|
@@ -17,14 +17,12 @@ const defaultLoaderByExt = {
|
|
|
17
17
|
".js": loadJSConfigFile,
|
|
18
18
|
".json": loadJSONConfigFile,
|
|
19
19
|
".yaml": loadYAMLConfigFile,
|
|
20
|
-
".yml": loadYAMLConfigFile
|
|
20
|
+
".yml": loadYAMLConfigFile
|
|
21
21
|
};
|
|
22
22
|
const defaultOptions = {
|
|
23
|
-
// does look for `package.json`
|
|
24
23
|
packageJSON: false,
|
|
25
|
-
// treat default(no ext file) as some extension
|
|
26
24
|
defaultExtension: [".json", ".yaml", ".yml", ".js", ".cjs"],
|
|
27
|
-
cwd: process.cwd()
|
|
25
|
+
cwd: process.cwd()
|
|
28
26
|
};
|
|
29
27
|
const selectLoader = (defaultLoaderByExt, extension) => {
|
|
30
28
|
if (!defaultOptions.defaultExtension.includes(extension)) {
|
|
@@ -57,7 +55,7 @@ function rcFile(pkgName, opts = {}) {
|
|
|
57
55
|
loadersByOrder,
|
|
58
56
|
configFileName,
|
|
59
57
|
packageJSON,
|
|
60
|
-
packageJSONFieldName
|
|
58
|
+
packageJSONFieldName
|
|
61
59
|
});
|
|
62
60
|
}
|
|
63
61
|
exports.rcFile = rcFile;
|
|
@@ -68,7 +66,7 @@ exports.rcFile = rcFile;
|
|
|
68
66
|
* filePath: string
|
|
69
67
|
* }}
|
|
70
68
|
*/
|
|
71
|
-
function findConfig({ parts, loaderByExt, loadersByOrder, configFileName, packageJSON, packageJSONFieldName
|
|
69
|
+
function findConfig({ parts, loaderByExt, loadersByOrder, configFileName, packageJSON, packageJSONFieldName }) {
|
|
72
70
|
const extensions = Object.keys(loaderByExt);
|
|
73
71
|
while (extensions.length) {
|
|
74
72
|
const ext = extensions.shift();
|
|
@@ -87,7 +85,7 @@ function findConfig({ parts, loaderByExt, loadersByOrder, configFileName, packag
|
|
|
87
85
|
}
|
|
88
86
|
return {
|
|
89
87
|
config: result,
|
|
90
|
-
filePath: configLocation
|
|
88
|
+
filePath: configLocation
|
|
91
89
|
};
|
|
92
90
|
}
|
|
93
91
|
for (let i = 0; i < loaders.length; i++) {
|
|
@@ -98,7 +96,7 @@ function findConfig({ parts, loaderByExt, loadersByOrder, configFileName, packag
|
|
|
98
96
|
}
|
|
99
97
|
return {
|
|
100
98
|
config: result,
|
|
101
|
-
filePath: configLocation
|
|
99
|
+
filePath: configLocation
|
|
102
100
|
};
|
|
103
101
|
}
|
|
104
102
|
}
|
|
@@ -109,7 +107,7 @@ function findConfig({ parts, loaderByExt, loadersByOrder, configFileName, packag
|
|
|
109
107
|
if (pkgJSON[packageJSONFieldName]) {
|
|
110
108
|
return {
|
|
111
109
|
config: pkgJSON[packageJSONFieldName],
|
|
112
|
-
filePath: pkgJSONLoc
|
|
110
|
+
filePath: pkgJSONLoc
|
|
113
111
|
};
|
|
114
112
|
}
|
|
115
113
|
}
|
|
@@ -129,7 +127,7 @@ function loadJSConfigFile(filePath, suppress) {
|
|
|
129
127
|
debug(`Loading JavaScript config file: ${filePath}`);
|
|
130
128
|
try {
|
|
131
129
|
const content = fs_1.default.readFileSync(filePath, "utf-8");
|
|
132
|
-
return require_from_string_1.default(content, filePath);
|
|
130
|
+
return (0, require_from_string_1.default)(content, filePath);
|
|
133
131
|
}
|
|
134
132
|
catch (error) {
|
|
135
133
|
debug(`Error reading JavaScript file: ${filePath}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rc-config-loader.js","sourceRoot":"","sources":["../src/rc-config-loader.ts"],"names":[],"mappings":";;;;;;AAAA,iBAAiB;AACjB,sBAAsB;AACtB,6CAA6C;AAC7C,gDAAwB;AACxB,4CAAoB;AACpB,8EAAoD;AACpD,kDAA0B;
|
|
1
|
+
{"version":3,"file":"rc-config-loader.js","sourceRoot":"","sources":["../src/rc-config-loader.ts"],"names":[],"mappings":"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"}
|
package/lib/types.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare type ExtensionName = ".cjs" | ".js" | ".json" | ".yaml" | ".yml";
|
|
2
|
+
export declare type RequiredOption = "packageJSON" | "defaultExtension" | "cwd";
|
|
3
|
+
export declare type Loader = <R extends {}>(fileName: string, supperes: boolean) => R;
|
|
4
|
+
export declare type ExtensionLoaderMap = Record<ExtensionName, Loader>;
|
|
5
|
+
export declare type PossibleUndefined<T> = T | undefined;
|
|
6
|
+
export interface rcConfigResult<R extends Record<string, unknown>> {
|
|
7
|
+
config: R;
|
|
8
|
+
filePath: string;
|
|
9
|
+
}
|
|
10
|
+
export interface rcConfigLoaderOption {
|
|
11
|
+
/** does look for `package.json` */
|
|
12
|
+
packageJSON?: boolean | {
|
|
13
|
+
fieldName: string;
|
|
14
|
+
};
|
|
15
|
+
/** if config file name is not same with packageName, set the name */
|
|
16
|
+
configFileName?: string;
|
|
17
|
+
/** treat default(no ext file) as some extension */
|
|
18
|
+
defaultExtension?: ExtensionName | ExtensionName[];
|
|
19
|
+
/** where start to load */
|
|
20
|
+
cwd?: string;
|
|
21
|
+
}
|
package/lib/types.js
ADDED
package/lib/types.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rc-config-loader",
|
|
3
|
-
"version": "4.1.
|
|
3
|
+
"version": "4.1.2",
|
|
4
4
|
"description": "load config file from .{product}rc.{json,yml,js}",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"config",
|
|
@@ -33,10 +33,11 @@
|
|
|
33
33
|
},
|
|
34
34
|
"scripts": {
|
|
35
35
|
"build": "tsc -p .",
|
|
36
|
-
"prettier": "prettier --write '**/*.{js,jsx,ts,tsx,css}'",
|
|
37
36
|
"prepublish": "npm run --if-present build",
|
|
38
37
|
"test": "mocha \"test/**/*.{js,ts}\"",
|
|
39
|
-
"watch": "tsc -p . --watch"
|
|
38
|
+
"watch": "tsc -p . --watch",
|
|
39
|
+
"format": "prettier --write \"**/*.{js,jsx,ts,tsx,css}\"",
|
|
40
|
+
"prepare": "git config --local core.hooksPath .githooks"
|
|
40
41
|
},
|
|
41
42
|
"husky": {
|
|
42
43
|
"hooks": {
|
|
@@ -50,27 +51,26 @@
|
|
|
50
51
|
]
|
|
51
52
|
},
|
|
52
53
|
"prettier": {
|
|
54
|
+
"singleQuote": false,
|
|
53
55
|
"printWidth": 120,
|
|
54
|
-
"tabWidth": 4
|
|
56
|
+
"tabWidth": 4,
|
|
57
|
+
"trailingComma": "none"
|
|
55
58
|
},
|
|
56
59
|
"dependencies": {
|
|
57
|
-
"debug": "^4.
|
|
58
|
-
"js-yaml": "^4.
|
|
59
|
-
"json5": "^2.
|
|
60
|
+
"debug": "^4.3.4",
|
|
61
|
+
"js-yaml": "^4.1.0",
|
|
62
|
+
"json5": "^2.2.2",
|
|
60
63
|
"require-from-string": "^2.0.2"
|
|
61
64
|
},
|
|
62
65
|
"devDependencies": {
|
|
63
|
-
"@types/
|
|
64
|
-
"@types/
|
|
65
|
-
"@types/
|
|
66
|
-
"
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
"
|
|
72
|
-
"ts-node": "^9.1.1",
|
|
73
|
-
"ts-node-test-register": "^9.0.1",
|
|
74
|
-
"typescript": "^4.1.3"
|
|
66
|
+
"@types/mocha": "^9.1.0",
|
|
67
|
+
"@types/node": "^17.0.23",
|
|
68
|
+
"@types/require-from-string": "^1.2.1",
|
|
69
|
+
"lint-staged": "^12.3.7",
|
|
70
|
+
"mocha": "^9.2.2",
|
|
71
|
+
"prettier": "^2.6.2",
|
|
72
|
+
"ts-node": "^10.7.0",
|
|
73
|
+
"ts-node-test-register": "^10.0.0",
|
|
74
|
+
"typescript": "^4.6.3"
|
|
75
75
|
}
|
|
76
76
|
}
|
package/src/rc-config-loader.ts
CHANGED
|
@@ -5,42 +5,34 @@ import path from "path";
|
|
|
5
5
|
import fs from "fs";
|
|
6
6
|
import requireFromString from "require-from-string";
|
|
7
7
|
import JSON5 from "json5";
|
|
8
|
+
import type {
|
|
9
|
+
PossibleUndefined,
|
|
10
|
+
rcConfigLoaderOption,
|
|
11
|
+
rcConfigResult,
|
|
12
|
+
RequiredOption,
|
|
13
|
+
ExtensionName,
|
|
14
|
+
ExtensionLoaderMap,
|
|
15
|
+
Loader
|
|
16
|
+
} from "./types";
|
|
8
17
|
|
|
9
18
|
const debug = require("debug")("rc-config-loader");
|
|
10
|
-
|
|
19
|
+
|
|
20
|
+
const defaultLoaderByExt: ExtensionLoaderMap = {
|
|
11
21
|
".cjs": loadJSConfigFile,
|
|
12
22
|
".js": loadJSConfigFile,
|
|
13
23
|
".json": loadJSONConfigFile,
|
|
14
24
|
".yaml": loadYAMLConfigFile,
|
|
15
|
-
".yml": loadYAMLConfigFile
|
|
25
|
+
".yml": loadYAMLConfigFile
|
|
16
26
|
};
|
|
17
27
|
|
|
18
|
-
const defaultOptions
|
|
19
|
-
|
|
28
|
+
const defaultOptions: Required<Pick<rcConfigLoaderOption, RequiredOption>> &
|
|
29
|
+
Omit<rcConfigLoaderOption, RequiredOption> = {
|
|
20
30
|
packageJSON: false,
|
|
21
|
-
// treat default(no ext file) as some extension
|
|
22
31
|
defaultExtension: [".json", ".yaml", ".yml", ".js", ".cjs"],
|
|
23
|
-
cwd: process.cwd()
|
|
32
|
+
cwd: process.cwd()
|
|
24
33
|
};
|
|
25
34
|
|
|
26
|
-
|
|
27
|
-
// does look for `package.json`
|
|
28
|
-
packageJSON?:
|
|
29
|
-
| boolean
|
|
30
|
-
| {
|
|
31
|
-
fieldName: string;
|
|
32
|
-
};
|
|
33
|
-
// if config file name is not same with packageName, set the name
|
|
34
|
-
configFileName?: string;
|
|
35
|
-
// treat default(no ext file) as some extension
|
|
36
|
-
defaultExtension?: string | string[];
|
|
37
|
-
// where start to load
|
|
38
|
-
cwd?: string;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
type Loader = <R extends object>(fileName: string, suppress: boolean) => R;
|
|
42
|
-
|
|
43
|
-
const selectLoader = (defaultLoaderByExt: { [index: string]: Loader }, extension: string) => {
|
|
35
|
+
const selectLoader = (defaultLoaderByExt: ExtensionLoaderMap, extension: ExtensionName): Loader => {
|
|
44
36
|
if (!defaultOptions.defaultExtension.includes(extension)) {
|
|
45
37
|
throw new Error(`${extension} is not supported.`);
|
|
46
38
|
}
|
|
@@ -57,12 +49,7 @@ const selectLoader = (defaultLoaderByExt: { [index: string]: Loader }, extension
|
|
|
57
49
|
export function rcFile<R extends {}>(
|
|
58
50
|
pkgName: string,
|
|
59
51
|
opts: rcConfigLoaderOption = {}
|
|
60
|
-
):
|
|
61
|
-
| {
|
|
62
|
-
config: R;
|
|
63
|
-
filePath: string;
|
|
64
|
-
}
|
|
65
|
-
| undefined {
|
|
52
|
+
): PossibleUndefined<rcConfigResult<R>> {
|
|
66
53
|
// path/to/config or basename of config file.
|
|
67
54
|
const configFileName = opts.configFileName || `.${pkgName}rc`;
|
|
68
55
|
const defaultExtension = opts.defaultExtension || defaultOptions.defaultExtension;
|
|
@@ -77,7 +64,7 @@ export function rcFile<R extends {}>(
|
|
|
77
64
|
|
|
78
65
|
const loaderByExt = {
|
|
79
66
|
...defaultLoaderByExt,
|
|
80
|
-
"": loadersByOrder
|
|
67
|
+
"": loadersByOrder
|
|
81
68
|
};
|
|
82
69
|
return findConfig<R>({
|
|
83
70
|
parts,
|
|
@@ -85,7 +72,7 @@ export function rcFile<R extends {}>(
|
|
|
85
72
|
loadersByOrder,
|
|
86
73
|
configFileName,
|
|
87
74
|
packageJSON,
|
|
88
|
-
packageJSONFieldName
|
|
75
|
+
packageJSONFieldName
|
|
89
76
|
});
|
|
90
77
|
}
|
|
91
78
|
|
|
@@ -102,7 +89,7 @@ function findConfig<R extends {}>({
|
|
|
102
89
|
loadersByOrder,
|
|
103
90
|
configFileName,
|
|
104
91
|
packageJSON,
|
|
105
|
-
packageJSONFieldName
|
|
92
|
+
packageJSONFieldName
|
|
106
93
|
}: {
|
|
107
94
|
parts: string[];
|
|
108
95
|
loaderByExt: {
|
|
@@ -136,7 +123,7 @@ function findConfig<R extends {}>({
|
|
|
136
123
|
}
|
|
137
124
|
return {
|
|
138
125
|
config: result,
|
|
139
|
-
filePath: configLocation
|
|
126
|
+
filePath: configLocation
|
|
140
127
|
};
|
|
141
128
|
}
|
|
142
129
|
for (let i = 0; i < loaders.length; i++) {
|
|
@@ -147,7 +134,7 @@ function findConfig<R extends {}>({
|
|
|
147
134
|
}
|
|
148
135
|
return {
|
|
149
136
|
config: result,
|
|
150
|
-
filePath: configLocation
|
|
137
|
+
filePath: configLocation
|
|
151
138
|
};
|
|
152
139
|
}
|
|
153
140
|
}
|
|
@@ -159,7 +146,7 @@ function findConfig<R extends {}>({
|
|
|
159
146
|
if (pkgJSON[packageJSONFieldName]) {
|
|
160
147
|
return {
|
|
161
148
|
config: pkgJSON[packageJSONFieldName],
|
|
162
|
-
filePath: pkgJSONLoc
|
|
149
|
+
filePath: pkgJSONLoc
|
|
163
150
|
};
|
|
164
151
|
}
|
|
165
152
|
}
|
|
@@ -183,7 +170,7 @@ function loadJSConfigFile(filePath: string, suppress: boolean) {
|
|
|
183
170
|
try {
|
|
184
171
|
const content = fs.readFileSync(filePath, "utf-8");
|
|
185
172
|
return requireFromString(content, filePath);
|
|
186
|
-
} catch (error) {
|
|
173
|
+
} catch (error: any) {
|
|
187
174
|
debug(`Error reading JavaScript file: ${filePath}`);
|
|
188
175
|
if (!suppress) {
|
|
189
176
|
error.message = `Cannot read config file: ${filePath}\nError: ${error.message}`;
|
|
@@ -197,7 +184,7 @@ function loadJSONConfigFile(filePath: string, suppress: boolean) {
|
|
|
197
184
|
|
|
198
185
|
try {
|
|
199
186
|
return JSON5.parse(readFile(filePath));
|
|
200
|
-
} catch (error) {
|
|
187
|
+
} catch (error: any) {
|
|
201
188
|
debug(`Error reading JSON file: ${filePath}`);
|
|
202
189
|
if (!suppress) {
|
|
203
190
|
error.message = `Cannot read config file: ${filePath}\nError: ${error.message}`;
|
|
@@ -217,7 +204,7 @@ function loadYAMLConfigFile(filePath: string, suppress: boolean) {
|
|
|
217
204
|
try {
|
|
218
205
|
// empty YAML file can be null, so always use
|
|
219
206
|
return yaml.load(readFile(filePath)) || {};
|
|
220
|
-
} catch (error) {
|
|
207
|
+
} catch (error: any) {
|
|
221
208
|
debug(`Error reading YAML file: ${filePath}`);
|
|
222
209
|
if (!suppress) {
|
|
223
210
|
error.message = `Cannot read config file: ${filePath}\nError: ${error.message}`;
|
package/src/types.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export type ExtensionName = ".cjs" | ".js" | ".json" | ".yaml" | ".yml";
|
|
2
|
+
|
|
3
|
+
export type RequiredOption = "packageJSON" | "defaultExtension" | "cwd";
|
|
4
|
+
|
|
5
|
+
export type Loader = <R extends {}>(fileName: string, supperes: boolean) => R;
|
|
6
|
+
|
|
7
|
+
export type ExtensionLoaderMap = Record<ExtensionName, Loader>;
|
|
8
|
+
|
|
9
|
+
export type PossibleUndefined<T> = T | undefined;
|
|
10
|
+
|
|
11
|
+
export interface rcConfigResult<R extends Record<string, unknown>> {
|
|
12
|
+
config: R;
|
|
13
|
+
filePath: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface rcConfigLoaderOption {
|
|
17
|
+
/** does look for `package.json` */
|
|
18
|
+
packageJSON?:
|
|
19
|
+
| boolean
|
|
20
|
+
| {
|
|
21
|
+
fieldName: string;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
/** if config file name is not same with packageName, set the name */
|
|
25
|
+
configFileName?: string;
|
|
26
|
+
|
|
27
|
+
/** treat default(no ext file) as some extension */
|
|
28
|
+
defaultExtension?: ExtensionName | ExtensionName[];
|
|
29
|
+
|
|
30
|
+
/** where start to load */
|
|
31
|
+
cwd?: string;
|
|
32
|
+
}
|