@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.
@@ -3,10 +3,17 @@
3
3
  * 注意:依赖 dotenv 包
4
4
  */
5
5
  export declare class EnvReader {
6
- readonly envFile: string;
6
+ readonly envFiles: string | string[];
7
7
  envsFromFile: Record<string, string>;
8
- constructor(envFile: string);
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
  }
@@ -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
- envFile;
8
+ envFiles;
8
9
  envsFromFile = {};
9
- constructor(envFile) {
10
- this.envFile = envFile;
10
+ constructor(envFiles) {
11
+ this.envFiles = envFiles;
11
12
  dotenv.config({
12
- path: this.envFile,
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.envsFromFile[key] ?? process.env[key];
33
+ const value = this.getRaw(key);
18
34
  if (value === undefined)
19
35
  return defaults;
20
- if (typeof defaults === 'number') {
21
- const numValue = parseInt(value, 10);
22
- return isFinite(numValue) ? numValue : defaults;
23
- }
24
- else if (typeof defaults === 'boolean') {
25
- return ['1', 'true'].includes(value.toLowerCase().trim());
26
- }
27
- else {
28
- return value;
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
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anjianshi/utils",
3
- "version": "2.1.1",
3
+ "version": "2.1.3",
4
4
  "description": "Common JavaScript Utils",
5
5
  "homepage": "https://github.com/anjianshi/js-packages/utils",
6
6
  "bugs": {