@anjianshi/utils 2.1.1 → 2.1.3
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/env-node/env-reader.d.ts +9 -2
- package/env-node/env-reader.js +37 -15
- package/package.json +1 -1
package/env-node/env-reader.d.ts
CHANGED
|
@@ -3,10 +3,17 @@
|
|
|
3
3
|
* 注意:依赖 dotenv 包
|
|
4
4
|
*/
|
|
5
5
|
export declare class EnvReader {
|
|
6
|
-
readonly
|
|
6
|
+
readonly envFiles: string | string[];
|
|
7
7
|
envsFromFile: Record<string, string>;
|
|
8
|
-
constructor(
|
|
8
|
+
constructor(envFiles: string | string[]);
|
|
9
|
+
protected toNumber(raw: string): number | undefined;
|
|
10
|
+
protected toBoolean(raw: string): boolean | undefined;
|
|
11
|
+
getRaw(key: string): string | undefined;
|
|
9
12
|
get(key: string, defaults: string): string;
|
|
10
13
|
get(key: string, defaults: number): number;
|
|
11
14
|
get(key: string, defaults: boolean): boolean;
|
|
15
|
+
get<T extends unknown[] | Record<string, unknown>>(key: string, defaults: T): T;
|
|
16
|
+
getNumber(key: string): number | undefined;
|
|
17
|
+
getBoolean(key: string): boolean | undefined;
|
|
18
|
+
getJSON<T>(key: string): T | undefined;
|
|
12
19
|
}
|
package/env-node/env-reader.js
CHANGED
|
@@ -1,31 +1,53 @@
|
|
|
1
1
|
import * as dotenv from 'dotenv';
|
|
2
|
+
import { safeParseJSON } from '../lang/string.js';
|
|
2
3
|
/**
|
|
3
4
|
* 读取 .env 文件,并获取格式化后的数据
|
|
4
5
|
* 注意:依赖 dotenv 包
|
|
5
6
|
*/
|
|
6
7
|
export class EnvReader {
|
|
7
|
-
|
|
8
|
+
envFiles;
|
|
8
9
|
envsFromFile = {};
|
|
9
|
-
constructor(
|
|
10
|
-
this.
|
|
10
|
+
constructor(envFiles) {
|
|
11
|
+
this.envFiles = envFiles;
|
|
11
12
|
dotenv.config({
|
|
12
|
-
path: this.
|
|
13
|
+
path: this.envFiles,
|
|
13
14
|
processEnv: this.envsFromFile, // 把从 .env 文件读到的内容写入到此实例的属性,而不是 process.env
|
|
14
15
|
});
|
|
15
16
|
}
|
|
17
|
+
toNumber(raw) {
|
|
18
|
+
const num = parseInt(raw, 10);
|
|
19
|
+
return isFinite(num) ? num : undefined;
|
|
20
|
+
}
|
|
21
|
+
toBoolean(raw) {
|
|
22
|
+
const formatted = raw.toLowerCase().trim();
|
|
23
|
+
if (['1', 'true', 'on'].includes(formatted))
|
|
24
|
+
return true;
|
|
25
|
+
if (['0', 'false', 'off'].includes(formatted))
|
|
26
|
+
return false;
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
getRaw(key) {
|
|
30
|
+
return this.envsFromFile[key] ?? process.env[key];
|
|
31
|
+
}
|
|
16
32
|
get(key, defaults) {
|
|
17
|
-
const value = this.
|
|
33
|
+
const value = this.getRaw(key);
|
|
18
34
|
if (value === undefined)
|
|
19
35
|
return defaults;
|
|
20
|
-
if (typeof defaults === 'number')
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
else if (typeof defaults === '
|
|
25
|
-
return
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
36
|
+
if (typeof defaults === 'number')
|
|
37
|
+
return this.toNumber(value) ?? defaults;
|
|
38
|
+
else if (typeof defaults === 'boolean')
|
|
39
|
+
return this.toBoolean(value) ?? defaults;
|
|
40
|
+
else if (Array.isArray(defaults) || typeof defaults === 'object')
|
|
41
|
+
return safeParseJSON(value) ?? defaults;
|
|
42
|
+
return value;
|
|
43
|
+
}
|
|
44
|
+
getNumber(key) {
|
|
45
|
+
return this.toNumber(this.getRaw(key) ?? '');
|
|
46
|
+
}
|
|
47
|
+
getBoolean(key) {
|
|
48
|
+
return this.toBoolean(this.getRaw(key) ?? '');
|
|
49
|
+
}
|
|
50
|
+
getJSON(key) {
|
|
51
|
+
return safeParseJSON(this.getRaw(key) ?? '');
|
|
30
52
|
}
|
|
31
53
|
}
|