@nexe/config-manager 0.1.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.
Files changed (71) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +208 -0
  3. package/dist/config-manager.d.ts +34 -0
  4. package/dist/config-manager.d.ts.map +1 -0
  5. package/dist/config-manager.js +138 -0
  6. package/dist/config-manager.js.map +1 -0
  7. package/dist/debug/consul-debug.d.ts +6 -0
  8. package/dist/debug/consul-debug.d.ts.map +1 -0
  9. package/dist/debug/consul-debug.js +53 -0
  10. package/dist/debug/consul-debug.js.map +1 -0
  11. package/dist/decorators.d.ts +12 -0
  12. package/dist/decorators.d.ts.map +1 -0
  13. package/dist/decorators.js +29 -0
  14. package/dist/decorators.js.map +1 -0
  15. package/dist/examples/annotation-example.d.ts +1 -0
  16. package/dist/examples/annotation-example.d.ts.map +1 -0
  17. package/dist/examples/annotation-example.js +273 -0
  18. package/dist/examples/annotation-example.js.map +1 -0
  19. package/dist/examples/config-example.d.ts +1 -0
  20. package/dist/examples/config-example.d.ts.map +1 -0
  21. package/dist/examples/config-example.js +83 -0
  22. package/dist/examples/config-example.js.map +1 -0
  23. package/dist/examples/consul-config-example.v2.d.ts +1 -0
  24. package/dist/examples/consul-config-example.v2.d.ts.map +1 -0
  25. package/dist/examples/consul-config-example.v2.js +145 -0
  26. package/dist/examples/consul-config-example.v2.js.map +1 -0
  27. package/dist/examples/database-config.d.ts +1 -0
  28. package/dist/examples/database-config.d.ts.map +1 -0
  29. package/dist/examples/database-config.js +23 -0
  30. package/dist/examples/database-config.js.map +1 -0
  31. package/dist/examples/hot-reload-test.d.ts +1 -0
  32. package/dist/examples/hot-reload-test.d.ts.map +1 -0
  33. package/dist/examples/hot-reload-test.js +65 -0
  34. package/dist/examples/hot-reload-test.js.map +1 -0
  35. package/dist/factory.d.ts +45 -0
  36. package/dist/factory.d.ts.map +1 -0
  37. package/dist/factory.js +46 -0
  38. package/dist/factory.js.map +1 -0
  39. package/dist/index.d.ts +5 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +5 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/interfaces.d.ts +100 -0
  44. package/dist/interfaces.d.ts.map +1 -0
  45. package/dist/interfaces.js +6 -0
  46. package/dist/interfaces.js.map +1 -0
  47. package/dist/sources/consul-config-source.d.ts +79 -0
  48. package/dist/sources/consul-config-source.d.ts.map +1 -0
  49. package/dist/sources/consul-config-source.js +332 -0
  50. package/dist/sources/consul-config-source.js.map +1 -0
  51. package/dist/sources/environment-config-source.d.ts +34 -0
  52. package/dist/sources/environment-config-source.d.ts.map +1 -0
  53. package/dist/sources/environment-config-source.js +77 -0
  54. package/dist/sources/environment-config-source.js.map +1 -0
  55. package/dist/sources/index.d.ts +6 -0
  56. package/dist/sources/index.d.ts.map +1 -0
  57. package/dist/sources/index.js +6 -0
  58. package/dist/sources/index.js.map +1 -0
  59. package/dist/sources/json-config-source.d.ts +57 -0
  60. package/dist/sources/json-config-source.d.ts.map +1 -0
  61. package/dist/sources/json-config-source.js +153 -0
  62. package/dist/sources/json-config-source.js.map +1 -0
  63. package/dist/sources/remote-api-config-source.d.ts +62 -0
  64. package/dist/sources/remote-api-config-source.d.ts.map +1 -0
  65. package/dist/sources/remote-api-config-source.js +169 -0
  66. package/dist/sources/remote-api-config-source.js.map +1 -0
  67. package/dist/sources/yaml-config-source.d.ts +57 -0
  68. package/dist/sources/yaml-config-source.d.ts.map +1 -0
  69. package/dist/sources/yaml-config-source.js +163 -0
  70. package/dist/sources/yaml-config-source.js.map +1 -0
  71. package/package.json +66 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consul-config-source.js","sourceRoot":"","sources":["../../src/sources/consul-config-source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { IConfigSource } from '../interfaces';
2
+ /**
3
+ * 环境变量配置源
4
+ */
5
+ export declare class EnvironmentConfigSource implements IConfigSource {
6
+ private prefix;
7
+ /**
8
+ * @param prefix 环境变量前缀,例如:'APP_'
9
+ */
10
+ constructor(prefix?: string);
11
+ /**
12
+ * 从环境变量加载配置
13
+ */
14
+ load(key?: string, _pathPrefix?: string): Promise<unknown>;
15
+ /**
16
+ * 获取配置源名称
17
+ */
18
+ getName(): string;
19
+ /**
20
+ * 环境变量配置不支持热更新
21
+ */
22
+ supportsHotReload(): boolean;
23
+ /**
24
+ * 转换环境变量键名
25
+ * 将点分隔的配置键转换为下划线分隔的环境变量键
26
+ * 例如:'app.server.port' -> 'APP_SERVER_PORT'
27
+ */
28
+ private getEnvKey;
29
+ /**
30
+ * 尝试解析环境变量值
31
+ */
32
+ private parseValue;
33
+ }
34
+ //# sourceMappingURL=environment-config-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment-config-source.d.ts","sourceRoot":"","sources":["../../src/sources/environment-config-source.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD;;GAEG;AACH,qBACa,uBAAwB,YAAW,aAAa;IAC3D,OAAO,CAAC,MAAM,CAAS;IAEvB;;OAEG;gBACS,MAAM,SAAK;IAIvB;;OAEG;IACG,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAShE;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;OAEG;IACH,iBAAiB,IAAI,OAAO;IAI5B;;;;OAIG;IACH,OAAO,CAAC,SAAS;IAIjB;;OAEG;IACH,OAAO,CAAC,UAAU;CA0BnB"}
@@ -0,0 +1,77 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { injectable } from 'tsyringe';
3
+ /**
4
+ * 环境变量配置源
5
+ */
6
+ let EnvironmentConfigSource = class EnvironmentConfigSource {
7
+ /**
8
+ * @param prefix 环境变量前缀,例如:'APP_'
9
+ */
10
+ constructor(prefix = '') {
11
+ this.prefix = prefix;
12
+ }
13
+ /**
14
+ * 从环境变量加载配置
15
+ */
16
+ async load(key, _pathPrefix) {
17
+ if (!key) {
18
+ return undefined;
19
+ }
20
+ const envKey = this.getEnvKey(key);
21
+ const value = process.env[envKey];
22
+ return this.parseValue(value);
23
+ }
24
+ /**
25
+ * 获取配置源名称
26
+ */
27
+ getName() {
28
+ return 'EnvironmentConfigSource';
29
+ }
30
+ /**
31
+ * 环境变量配置不支持热更新
32
+ */
33
+ supportsHotReload() {
34
+ return false;
35
+ }
36
+ /**
37
+ * 转换环境变量键名
38
+ * 将点分隔的配置键转换为下划线分隔的环境变量键
39
+ * 例如:'app.server.port' -> 'APP_SERVER_PORT'
40
+ */
41
+ getEnvKey(key) {
42
+ return `${this.prefix}${key.replace(/\./g, '_').toUpperCase()}`;
43
+ }
44
+ /**
45
+ * 尝试解析环境变量值
46
+ */
47
+ parseValue(value) {
48
+ if (value === undefined) {
49
+ return undefined;
50
+ }
51
+ // 尝试解析为数字
52
+ if (/^-?\d+(\.\d+)?$/.test(value)) {
53
+ return Number(value);
54
+ }
55
+ // 尝试解析为布尔值
56
+ if (value.toLowerCase() === 'true') {
57
+ return true;
58
+ }
59
+ if (value.toLowerCase() === 'false') {
60
+ return false;
61
+ }
62
+ // 尝试解析为JSON
63
+ try {
64
+ return JSON.parse(value);
65
+ }
66
+ catch {
67
+ // 如果不是JSON,则返回原始字符串
68
+ return value;
69
+ }
70
+ }
71
+ };
72
+ EnvironmentConfigSource = __decorate([
73
+ injectable(),
74
+ __metadata("design:paramtypes", [Object])
75
+ ], EnvironmentConfigSource);
76
+ export { EnvironmentConfigSource };
77
+ //# sourceMappingURL=environment-config-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment-config-source.js","sourceRoot":"","sources":["../../src/sources/environment-config-source.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGtC;;GAEG;AAEI,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAGlC;;OAEG;IACH,YAAY,MAAM,GAAG,EAAE;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,GAAY,EAAE,WAAoB;QAC3C,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,OAAO;QACL,OAAO,yBAAyB,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;OAIG;IACK,SAAS,CAAC,GAAW;QAC3B,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;IAClE,CAAC;IAED;;OAEG;IACK,UAAU,CAAC,KAAyB;QAC1C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,UAAU;QACV,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QAED,WAAW;QACX,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC;YACpC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,YAAY;QACZ,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,oBAAoB;YACpB,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF,CAAA;AA1EY,uBAAuB;IADnC,UAAU,EAAE;;GACA,uBAAuB,CA0EnC"}
@@ -0,0 +1,6 @@
1
+ export * from './consul-config-source';
2
+ export * from './environment-config-source';
3
+ export * from './json-config-source';
4
+ export * from './remote-api-config-source';
5
+ export * from './yaml-config-source';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sources/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from './consul-config-source';
2
+ export * from './environment-config-source';
3
+ export * from './json-config-source';
4
+ export * from './remote-api-config-source';
5
+ export * from './yaml-config-source';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sources/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,57 @@
1
+ import type { IConfigSource } from '../interfaces';
2
+ /**
3
+ * JSON配置文件源
4
+ */
5
+ export declare class JsonConfigSource implements IConfigSource {
6
+ private watchChanges;
7
+ private filePath;
8
+ private cache;
9
+ private watcher;
10
+ private callbacks;
11
+ /**
12
+ * @param filePath 配置文件路径
13
+ * @param watchChanges 是否监听文件变化
14
+ */
15
+ constructor(filePath: string, watchChanges?: boolean);
16
+ /**
17
+ * 从JSON文件加载配置
18
+ */
19
+ load(key?: string, _pathPrefix?: string): Promise<unknown>;
20
+ /**
21
+ * 获取配置源名称
22
+ */
23
+ getName(): string;
24
+ /**
25
+ * 是否支持热更新
26
+ */
27
+ supportsHotReload(): boolean;
28
+ /**
29
+ * 订阅配置变更
30
+ */
31
+ subscribe(key: string, callback: (value: unknown) => void): void;
32
+ /**
33
+ * 取消订阅配置变更
34
+ */
35
+ unsubscribe(key: string): void;
36
+ /**
37
+ * 设置文件变更监听器
38
+ */
39
+ private setupWatcher;
40
+ /**
41
+ * 处理文件变更
42
+ */
43
+ private handleFileChange;
44
+ /**
45
+ * 加载文件到缓存
46
+ */
47
+ private loadFile;
48
+ /**
49
+ * 获取嵌套对象的属性值
50
+ */
51
+ private getNestedValue;
52
+ /**
53
+ * 关闭资源
54
+ */
55
+ dispose(): void;
56
+ }
57
+ //# sourceMappingURL=json-config-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-config-source.d.ts","sourceRoot":"","sources":["../../src/sources/json-config-source.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAInD;;GAEG;AACH,qBACa,gBAAiB,YAAW,aAAa;IAYlD,OAAO,CAAC,YAAY;IAXtB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,SAAS,CAAmD;IAEpE;;;OAGG;gBAED,QAAQ,EAAE,MAAM,EACR,YAAY,UAAQ;IAQ9B;;OAEG;IACG,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmBhE;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;OAEG;IACH,iBAAiB,IAAI,OAAO;IAI5B;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAWhE;;OAEG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI9B;;OAEG;IACH,OAAO,CAAC,YAAY;IAuBpB;;OAEG;YACW,gBAAgB;IAe9B;;OAEG;YACW,QAAQ;IAWtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAkBtB;;OAEG;IACH,OAAO,IAAI,IAAI;CAMhB"}
@@ -0,0 +1,153 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { createLogger } from '@nexe/logger';
3
+ import * as fs from 'fs';
4
+ import { readFile } from 'fs/promises';
5
+ import * as path from 'path';
6
+ import { injectable } from 'tsyringe';
7
+ const logger = createLogger('JsonConfigSource');
8
+ /**
9
+ * JSON配置文件源
10
+ */
11
+ let JsonConfigSource = class JsonConfigSource {
12
+ /**
13
+ * @param filePath 配置文件路径
14
+ * @param watchChanges 是否监听文件变化
15
+ */
16
+ constructor(filePath, watchChanges = false) {
17
+ this.watchChanges = watchChanges;
18
+ this.cache = {};
19
+ this.watcher = null;
20
+ this.callbacks = new Map();
21
+ this.filePath = path.resolve(filePath);
22
+ if (this.watchChanges) {
23
+ this.setupWatcher();
24
+ }
25
+ }
26
+ /**
27
+ * 从JSON文件加载配置
28
+ */
29
+ async load(key, _pathPrefix) {
30
+ try {
31
+ if (Object.keys(this.cache).length === 0) {
32
+ await this.loadFile();
33
+ }
34
+ if (!key) {
35
+ return this.cache;
36
+ }
37
+ return this.getNestedValue(this.cache, key);
38
+ }
39
+ catch (error) {
40
+ logger.error(`从JSON加载配置失败: ${error instanceof Error ? error.message : String(error)}`);
41
+ return undefined;
42
+ }
43
+ }
44
+ /**
45
+ * 获取配置源名称
46
+ */
47
+ getName() {
48
+ return `JsonConfigSource(${this.filePath})`;
49
+ }
50
+ /**
51
+ * 是否支持热更新
52
+ */
53
+ supportsHotReload() {
54
+ return this.watchChanges;
55
+ }
56
+ /**
57
+ * 订阅配置变更
58
+ */
59
+ subscribe(key, callback) {
60
+ if (!this.supportsHotReload()) {
61
+ logger.warn('此配置源未启用热更新,无法订阅变更');
62
+ return;
63
+ }
64
+ const callbacks = this.callbacks.get(key) ?? [];
65
+ callbacks.push(callback);
66
+ this.callbacks.set(key, callbacks);
67
+ }
68
+ /**
69
+ * 取消订阅配置变更
70
+ */
71
+ unsubscribe(key) {
72
+ this.callbacks.delete(key);
73
+ }
74
+ /**
75
+ * 设置文件变更监听器
76
+ */
77
+ setupWatcher() {
78
+ try {
79
+ // 先确保文件存在
80
+ if (!fs.existsSync(this.filePath)) {
81
+ logger.warn(`配置文件不存在: ${this.filePath}`);
82
+ return;
83
+ }
84
+ // 监听文件变更
85
+ this.watcher = fs.watch(this.filePath, () => {
86
+ this.handleFileChange().catch(error => {
87
+ logger.error(`处理文件变更时出错: ${error instanceof Error ? error.message : String(error)}`);
88
+ });
89
+ });
90
+ }
91
+ catch (error) {
92
+ logger.error(`设置文件监听失败: ${error instanceof Error ? error.message : String(error)}`);
93
+ }
94
+ }
95
+ /**
96
+ * 处理文件变更
97
+ */
98
+ async handleFileChange() {
99
+ const oldCache = { ...this.cache };
100
+ await this.loadFile();
101
+ // 通知所有订阅者
102
+ this.callbacks.forEach((callbacks, key) => {
103
+ const newValue = this.getNestedValue(this.cache, key);
104
+ const oldValue = this.getNestedValue(oldCache, key);
105
+ if (JSON.stringify(newValue) !== JSON.stringify(oldValue)) {
106
+ callbacks.forEach(callback => callback(newValue));
107
+ }
108
+ });
109
+ }
110
+ /**
111
+ * 加载文件到缓存
112
+ */
113
+ async loadFile() {
114
+ try {
115
+ const content = await readFile(this.filePath, 'utf-8');
116
+ this.cache = JSON.parse(content);
117
+ }
118
+ catch (error) {
119
+ throw new Error(`加载JSON文件失败: ${error instanceof Error ? error.message : String(error)}`);
120
+ }
121
+ }
122
+ /**
123
+ * 获取嵌套对象的属性值
124
+ */
125
+ getNestedValue(obj, key) {
126
+ const parts = key.split('.');
127
+ let current = obj;
128
+ for (const part of parts) {
129
+ if (current === undefined ||
130
+ current === null ||
131
+ typeof current !== 'object') {
132
+ return undefined;
133
+ }
134
+ current = current[part];
135
+ }
136
+ return current;
137
+ }
138
+ /**
139
+ * 关闭资源
140
+ */
141
+ dispose() {
142
+ if (this.watcher) {
143
+ this.watcher.close();
144
+ this.watcher = null;
145
+ }
146
+ }
147
+ };
148
+ JsonConfigSource = __decorate([
149
+ injectable(),
150
+ __metadata("design:paramtypes", [String, Object])
151
+ ], JsonConfigSource);
152
+ export { JsonConfigSource };
153
+ //# sourceMappingURL=json-config-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-config-source.js","sourceRoot":"","sources":["../../src/sources/json-config-source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import type { IConfigSource } from '../interfaces';
2
+ /**
3
+ * 远程API配置源
4
+ */
5
+ export declare class RemoteApiConfigSource implements IConfigSource {
6
+ private baseUrl;
7
+ private headers;
8
+ private pollingInterval?;
9
+ private pollingTimer?;
10
+ private cache;
11
+ private callbacks;
12
+ /**
13
+ * @param baseUrl 远程API基础URL
14
+ * @param headers 请求头
15
+ * @param pollingInterval 轮询间隔(毫秒),如果设置则启用轮询更新
16
+ */
17
+ constructor(baseUrl: string, headers?: Record<string, string>, pollingInterval?: number);
18
+ /**
19
+ * 从远程API加载配置
20
+ */
21
+ load(key?: string, _pathPrefix?: string): Promise<unknown>;
22
+ /**
23
+ * 获取配置源名称
24
+ */
25
+ getName(): string;
26
+ /**
27
+ * 是否支持热更新
28
+ */
29
+ supportsHotReload(): boolean;
30
+ /**
31
+ * 订阅配置变更
32
+ */
33
+ subscribe(key: string, callback: (value: unknown) => void): void;
34
+ /**
35
+ * 取消订阅配置变更
36
+ */
37
+ unsubscribe(key: string): void;
38
+ /**
39
+ * 开始轮询更新
40
+ */
41
+ private startPolling;
42
+ /**
43
+ * 轮询检查配置变更
44
+ */
45
+ private pollForChanges;
46
+ /**
47
+ * 获取特定键的配置值
48
+ */
49
+ /**
50
+ * 获取所有配置
51
+ */
52
+ private fetchAllConfig;
53
+ /**
54
+ * 获取嵌套对象的属性值
55
+ */
56
+ private getNestedValue;
57
+ /**
58
+ * 关闭资源
59
+ */
60
+ dispose(): void;
61
+ }
62
+ //# sourceMappingURL=remote-api-config-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-api-config-source.d.ts","sourceRoot":"","sources":["../../src/sources/remote-api-config-source.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGnD;;GAEG;AACH,qBACa,qBAAsB,YAAW,aAAa;IACzD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,YAAY,CAAC,CAAiB;IACtC,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,SAAS,CAAmD;IAEpE;;;;OAIG;gBAED,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EACpC,eAAe,CAAC,EAAE,MAAM;IAW1B;;OAEG;IACG,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmBhE;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;OAEG;IACH,iBAAiB,IAAI,OAAO;IAI5B;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAWhE;;OAEG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI9B;;OAEG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;YACW,cAAc;IAe5B;;OAEG;IAsBH;;OAEG;YACW,cAAc;IAoB5B;;OAEG;IACH,OAAO,CAAC,cAAc;IAkBtB;;OAEG;IACH,OAAO,IAAI,IAAI;CAMhB"}
@@ -0,0 +1,169 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { createLogger } from '@nexe/logger';
3
+ import { injectable } from 'tsyringe';
4
+ const logger = createLogger('RemoteApiConfigSource');
5
+ /**
6
+ * 远程API配置源
7
+ */
8
+ let RemoteApiConfigSource = class RemoteApiConfigSource {
9
+ /**
10
+ * @param baseUrl 远程API基础URL
11
+ * @param headers 请求头
12
+ * @param pollingInterval 轮询间隔(毫秒),如果设置则启用轮询更新
13
+ */
14
+ constructor(baseUrl, headers = {}, pollingInterval) {
15
+ this.cache = {};
16
+ this.callbacks = new Map();
17
+ this.baseUrl = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl;
18
+ this.headers = headers;
19
+ this.pollingInterval = pollingInterval;
20
+ if (this.pollingInterval && this.pollingInterval > 0) {
21
+ this.startPolling();
22
+ }
23
+ }
24
+ /**
25
+ * 从远程API加载配置
26
+ */
27
+ async load(key, _pathPrefix) {
28
+ try {
29
+ if (Object.keys(this.cache).length === 0) {
30
+ await this.fetchAllConfig();
31
+ }
32
+ if (!key) {
33
+ return this.cache;
34
+ }
35
+ return this.getNestedValue(this.cache, key);
36
+ }
37
+ catch (error) {
38
+ logger.error(`从远程API加载配置失败: ${error instanceof Error ? error.message : String(error)}`);
39
+ return undefined;
40
+ }
41
+ }
42
+ /**
43
+ * 获取配置源名称
44
+ */
45
+ getName() {
46
+ return `RemoteApiConfigSource(${this.baseUrl})`;
47
+ }
48
+ /**
49
+ * 是否支持热更新
50
+ */
51
+ supportsHotReload() {
52
+ return !!this.pollingInterval;
53
+ }
54
+ /**
55
+ * 订阅配置变更
56
+ */
57
+ subscribe(key, callback) {
58
+ if (!this.supportsHotReload()) {
59
+ logger.warn('此配置源未启用热更新,无法订阅变更');
60
+ return;
61
+ }
62
+ const callbacks = this.callbacks.get(key) ?? [];
63
+ callbacks.push(callback);
64
+ this.callbacks.set(key, callbacks);
65
+ }
66
+ /**
67
+ * 取消订阅配置变更
68
+ */
69
+ unsubscribe(key) {
70
+ this.callbacks.delete(key);
71
+ }
72
+ /**
73
+ * 开始轮询更新
74
+ */
75
+ startPolling() {
76
+ if (this.pollingTimer) {
77
+ clearInterval(this.pollingTimer);
78
+ }
79
+ this.pollingTimer = setInterval(() => {
80
+ this.pollForChanges().catch(error => {
81
+ logger.error(`轮询配置更新失败: ${error instanceof Error ? error.message : String(error)}`);
82
+ });
83
+ }, this.pollingInterval);
84
+ }
85
+ /**
86
+ * 轮询检查配置变更
87
+ */
88
+ async pollForChanges() {
89
+ const oldCache = { ...this.cache };
90
+ await this.fetchAllConfig();
91
+ // 通知所有订阅者
92
+ this.callbacks.forEach((callbacks, key) => {
93
+ const newValue = this.getNestedValue(this.cache, key);
94
+ const oldValue = this.getNestedValue(oldCache, key);
95
+ if (JSON.stringify(newValue) !== JSON.stringify(oldValue)) {
96
+ callbacks.forEach(callback => callback(newValue));
97
+ }
98
+ });
99
+ }
100
+ /**
101
+ * 获取特定键的配置值
102
+ */
103
+ // private async fetchConfig(key: string): Promise<unknown> {
104
+ // try {
105
+ // const url = `${this.baseUrl}/config/${encodeURIComponent(key)}`;
106
+ // const response = await fetch(url, { headers: this.headers });
107
+ // if (!response.ok) {
108
+ // throw new Error(
109
+ // `API返回错误: ${response.status} ${response.statusText}`,
110
+ // );
111
+ // }
112
+ // const data = await response.json() as { value?: unknown };
113
+ // return data.value; // 根据实际API响应格式调整
114
+ // } catch (error) {
115
+ // logger.error(
116
+ // `获取配置值失败: ${error instanceof Error ? error.message : String(error)}`,
117
+ // );
118
+ // return undefined;
119
+ // }
120
+ // }
121
+ /**
122
+ * 获取所有配置
123
+ */
124
+ async fetchAllConfig() {
125
+ try {
126
+ const url = `${this.baseUrl}/config`;
127
+ const response = await fetch(url, { headers: this.headers });
128
+ if (!response.ok) {
129
+ throw new Error(`API返回错误: ${response.status} ${response.statusText}`);
130
+ }
131
+ const data = (await response.json());
132
+ this.cache = data;
133
+ }
134
+ catch (error) {
135
+ throw new Error(`获取所有配置失败: ${error instanceof Error ? error.message : String(error)}`);
136
+ }
137
+ }
138
+ /**
139
+ * 获取嵌套对象的属性值
140
+ */
141
+ getNestedValue(obj, key) {
142
+ const parts = key.split('.');
143
+ let current = obj;
144
+ for (const part of parts) {
145
+ if (current === undefined ||
146
+ current === null ||
147
+ typeof current !== 'object') {
148
+ return undefined;
149
+ }
150
+ current = current[part];
151
+ }
152
+ return current;
153
+ }
154
+ /**
155
+ * 关闭资源
156
+ */
157
+ dispose() {
158
+ if (this.pollingTimer) {
159
+ clearInterval(this.pollingTimer);
160
+ this.pollingTimer = undefined;
161
+ }
162
+ }
163
+ };
164
+ RemoteApiConfigSource = __decorate([
165
+ injectable(),
166
+ __metadata("design:paramtypes", [String, Object, Number])
167
+ ], RemoteApiConfigSource);
168
+ export { RemoteApiConfigSource };
169
+ //# sourceMappingURL=remote-api-config-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-api-config-source.js","sourceRoot":"","sources":["../../src/sources/remote-api-config-source.ts"],"names":[],"mappings":"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"}