@vlian/framework 1.1.0 → 1.2.1

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 (80) hide show
  1. package/README.md +35 -1
  2. package/dist/core/config/ConfigLoader.cjs +90 -8
  3. package/dist/core/config/ConfigLoader.cjs.map +1 -1
  4. package/dist/core/config/ConfigLoader.d.ts +20 -4
  5. package/dist/core/config/ConfigLoader.d.ts.map +1 -1
  6. package/dist/core/config/ConfigLoader.js +90 -8
  7. package/dist/core/config/ConfigLoader.js.map +1 -1
  8. package/dist/core/error/ErrorBoundary.cjs +23 -9
  9. package/dist/core/error/ErrorBoundary.cjs.map +1 -1
  10. package/dist/core/error/ErrorBoundary.d.ts.map +1 -1
  11. package/dist/core/error/ErrorBoundary.js +23 -9
  12. package/dist/core/error/ErrorBoundary.js.map +1 -1
  13. package/dist/core/error/ErrorHandler.cjs +277 -0
  14. package/dist/core/error/ErrorHandler.cjs.map +1 -0
  15. package/dist/core/error/ErrorHandler.d.ts +172 -0
  16. package/dist/core/error/ErrorHandler.d.ts.map +1 -0
  17. package/dist/core/error/ErrorHandler.js +261 -0
  18. package/dist/core/error/ErrorHandler.js.map +1 -0
  19. package/dist/core/error/index.cjs +10 -0
  20. package/dist/core/error/index.cjs.map +1 -1
  21. package/dist/core/error/index.d.ts +2 -0
  22. package/dist/core/error/index.d.ts.map +1 -1
  23. package/dist/core/error/index.js +1 -0
  24. package/dist/core/error/index.js.map +1 -1
  25. package/dist/core/startup/initializeServices.cjs +69 -24
  26. package/dist/core/startup/initializeServices.cjs.map +1 -1
  27. package/dist/core/startup/initializeServices.d.ts +9 -2
  28. package/dist/core/startup/initializeServices.d.ts.map +1 -1
  29. package/dist/core/startup/initializeServices.js +73 -26
  30. package/dist/core/startup/initializeServices.js.map +1 -1
  31. package/dist/core/startup/renderApp.cjs +100 -61
  32. package/dist/core/startup/renderApp.cjs.map +1 -1
  33. package/dist/core/startup/renderApp.d.ts +2 -2
  34. package/dist/core/startup/renderApp.d.ts.map +1 -1
  35. package/dist/core/startup/renderApp.js +101 -62
  36. package/dist/core/startup/renderApp.js.map +1 -1
  37. package/dist/core/startup/startApp.cjs +7 -0
  38. package/dist/core/startup/startApp.cjs.map +1 -1
  39. package/dist/core/startup/startApp.d.ts.map +1 -1
  40. package/dist/core/startup/startApp.js +7 -0
  41. package/dist/core/startup/startApp.js.map +1 -1
  42. package/dist/index.umd.js +32434 -39098
  43. package/dist/index.umd.js.map +1 -1
  44. package/dist/request/core/RequestClient.cjs +20 -1
  45. package/dist/request/core/RequestClient.cjs.map +1 -1
  46. package/dist/request/core/RequestClient.d.ts +8 -0
  47. package/dist/request/core/RequestClient.d.ts.map +1 -1
  48. package/dist/request/core/RequestClient.js +20 -1
  49. package/dist/request/core/RequestClient.js.map +1 -1
  50. package/dist/request/index.cjs +3 -0
  51. package/dist/request/index.cjs.map +1 -1
  52. package/dist/request/index.d.ts +2 -2
  53. package/dist/request/index.d.ts.map +1 -1
  54. package/dist/request/index.js +1 -1
  55. package/dist/request/index.js.map +1 -1
  56. package/dist/request/plugin/index.cjs +4 -0
  57. package/dist/request/plugin/index.cjs.map +1 -1
  58. package/dist/request/plugin/index.d.ts +1 -0
  59. package/dist/request/plugin/index.d.ts.map +1 -1
  60. package/dist/request/plugin/index.js +1 -0
  61. package/dist/request/plugin/index.js.map +1 -1
  62. package/dist/request/plugin/queue.cjs +140 -0
  63. package/dist/request/plugin/queue.cjs.map +1 -0
  64. package/dist/request/plugin/queue.d.ts +92 -0
  65. package/dist/request/plugin/queue.d.ts.map +1 -0
  66. package/dist/request/plugin/queue.js +156 -0
  67. package/dist/request/plugin/queue.js.map +1 -0
  68. package/dist/request/utils/RequestQueueManager.cjs +168 -0
  69. package/dist/request/utils/RequestQueueManager.cjs.map +1 -0
  70. package/dist/request/utils/RequestQueueManager.d.ts +75 -0
  71. package/dist/request/utils/RequestQueueManager.d.ts.map +1 -0
  72. package/dist/request/utils/RequestQueueManager.js +160 -0
  73. package/dist/request/utils/RequestQueueManager.js.map +1 -0
  74. package/dist/request/utils/index.cjs +4 -0
  75. package/dist/request/utils/index.cjs.map +1 -1
  76. package/dist/request/utils/index.d.ts +1 -0
  77. package/dist/request/utils/index.d.ts.map +1 -1
  78. package/dist/request/utils/index.js +1 -0
  79. package/dist/request/utils/index.js.map +1 -1
  80. package/package.json +40 -6
@@ -0,0 +1,172 @@
1
+ /**
2
+ * 统一错误处理器
3
+ *
4
+ * 优化:
5
+ * 1. 统一错误处理策略:记录、上报、恢复、降级
6
+ * 2. 错误分类:致命、可恢复、警告
7
+ * 3. 错误恢复机制:自动重试、降级方案
8
+ */
9
+ import { ErrorSeverity, ErrorType, FrameworkError } from '../../utils/errors';
10
+ import type { MonitoringService } from '../../utils/monitoring';
11
+ /**
12
+ * 错误处理策略
13
+ */
14
+ export declare enum ErrorHandlingStrategy {
15
+ /**
16
+ * 记录错误(日志)
17
+ */
18
+ LOG = "LOG",
19
+ /**
20
+ * 上报错误(监控服务)
21
+ */
22
+ REPORT = "REPORT",
23
+ /**
24
+ * 尝试恢复错误
25
+ */
26
+ RECOVER = "RECOVER",
27
+ /**
28
+ * 降级处理
29
+ */
30
+ FALLBACK = "FALLBACK",
31
+ /**
32
+ * 忽略错误
33
+ */
34
+ IGNORE = "IGNORE"
35
+ }
36
+ /**
37
+ * 错误恢复选项
38
+ */
39
+ export interface ErrorRecoveryOptions {
40
+ /**
41
+ * 最大重试次数
42
+ * @default 3
43
+ */
44
+ maxRetries?: number;
45
+ /**
46
+ * 重试延迟(毫秒)
47
+ * @default 1000
48
+ */
49
+ retryDelay?: number;
50
+ /**
51
+ * 是否启用指数退避
52
+ * @default true
53
+ */
54
+ exponentialBackoff?: boolean;
55
+ /**
56
+ * 重试条件函数
57
+ */
58
+ shouldRetry?: (error: unknown, attempt: number) => boolean;
59
+ /**
60
+ * 降级方案函数
61
+ */
62
+ fallback?: () => Promise<unknown> | unknown;
63
+ }
64
+ /**
65
+ * 错误处理配置
66
+ */
67
+ export interface ErrorHandlerConfig {
68
+ /**
69
+ * 监控服务实例(可选)
70
+ */
71
+ monitoring?: MonitoringService;
72
+ /**
73
+ * 默认错误处理策略
74
+ * @default [ErrorHandlingStrategy.LOG, ErrorHandlingStrategy.REPORT]
75
+ */
76
+ defaultStrategies?: ErrorHandlingStrategy[];
77
+ /**
78
+ * 错误严重程度对应的处理策略
79
+ */
80
+ severityStrategies?: Partial<Record<ErrorSeverity, ErrorHandlingStrategy[]>>;
81
+ /**
82
+ * 错误类型对应的处理策略
83
+ */
84
+ typeStrategies?: Partial<Record<ErrorType, ErrorHandlingStrategy[]>>;
85
+ /**
86
+ * 错误恢复选项
87
+ */
88
+ recoveryOptions?: ErrorRecoveryOptions;
89
+ /**
90
+ * 是否在开发环境显示详细错误信息
91
+ * @default true
92
+ */
93
+ showDetailedErrorsInDev?: boolean;
94
+ }
95
+ /**
96
+ * 错误处理结果
97
+ */
98
+ export interface ErrorHandleResult {
99
+ /**
100
+ * 是否已处理
101
+ */
102
+ handled: boolean;
103
+ /**
104
+ * 是否可恢复
105
+ */
106
+ recoverable: boolean;
107
+ /**
108
+ * 恢复后的结果(如果已恢复)
109
+ */
110
+ recoveredValue?: unknown;
111
+ /**
112
+ * 使用的处理策略
113
+ */
114
+ strategies: ErrorHandlingStrategy[];
115
+ /**
116
+ * 错误信息
117
+ */
118
+ error: FrameworkError;
119
+ }
120
+ /**
121
+ * 统一错误处理器
122
+ */
123
+ export declare class ErrorHandler {
124
+ private config;
125
+ private monitoring?;
126
+ constructor(config?: ErrorHandlerConfig);
127
+ /**
128
+ * 设置监控服务
129
+ */
130
+ setMonitoring(monitoring: MonitoringService): void;
131
+ /**
132
+ * 处理错误
133
+ *
134
+ * @param error - 错误对象
135
+ * @param context - 错误上下文
136
+ * @returns 错误处理结果
137
+ */
138
+ handleError(error: unknown, context?: Record<string, unknown>): Promise<ErrorHandleResult>;
139
+ /**
140
+ * 确定错误处理策略
141
+ */
142
+ private determineStrategies;
143
+ /**
144
+ * 执行处理策略
145
+ */
146
+ private executeStrategies;
147
+ /**
148
+ * 记录错误
149
+ */
150
+ private logError;
151
+ /**
152
+ * 上报错误
153
+ */
154
+ private reportError;
155
+ /**
156
+ * 尝试恢复错误
157
+ */
158
+ private attemptRecovery;
159
+ /**
160
+ * 创建错误处理器的便捷方法
161
+ */
162
+ static create(config?: ErrorHandlerConfig): ErrorHandler;
163
+ }
164
+ /**
165
+ * 获取默认错误处理器
166
+ */
167
+ export declare function getDefaultErrorHandler(): ErrorHandler;
168
+ /**
169
+ * 设置默认错误处理器
170
+ */
171
+ export declare function setDefaultErrorHandler(handler: ErrorHandler): void;
172
+ //# sourceMappingURL=ErrorHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorHandler.d.ts","sourceRoot":"","sources":["../../../src/core/error/ErrorHandler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAc,aAAa,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE;;GAEG;AACH,oBAAY,qBAAqB;IAC/B;;OAEG;IACH,GAAG,QAAQ;IACX;;OAEG;IACH,MAAM,WAAW;IACjB;;OAEG;IACH,OAAO,YAAY;IACnB;;OAEG;IACH,QAAQ,aAAa;IACrB;;OAEG;IACH,MAAM,WAAW;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3D;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAC5C;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC;IAC7E;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC;IACrE;;OAEG;IACH,eAAe,CAAC,EAAE,oBAAoB,CAAC;IACvC;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,WAAW,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,UAAU,EAAE,qBAAqB,EAAE,CAAC;IACpC;;OAEG;IACH,KAAK,EAAE,cAAc,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAmD;IACjE,OAAO,CAAC,UAAU,CAAC,CAAoB;gBAE3B,MAAM,GAAE,kBAAuB;IAc3C;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI;IAIlD;;;;;;OAMG;IACG,WAAW,CACf,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,iBAAiB,CAAC;IA8C7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAe3B;;OAEG;YACW,iBAAiB;IA0C/B;;OAEG;IACH,OAAO,CAAC,QAAQ;IAwBhB;;OAEG;YACW,WAAW;IAkBzB;;OAEG;YACW,eAAe;IAgD7B;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,YAAY;CAGzD;AAOD;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,YAAY,CAKrD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAElE"}
@@ -0,0 +1,261 @@
1
+ function _define_property(obj, key, value) {
2
+ if (key in obj) {
3
+ Object.defineProperty(obj, key, {
4
+ value: value,
5
+ enumerable: true,
6
+ configurable: true,
7
+ writable: true
8
+ });
9
+ } else {
10
+ obj[key] = value;
11
+ }
12
+ return obj;
13
+ }
14
+ /**
15
+ * 统一错误处理器
16
+ *
17
+ * 优化:
18
+ * 1. 统一错误处理策略:记录、上报、恢复、降级
19
+ * 2. 错误分类:致命、可恢复、警告
20
+ * 3. 错误恢复机制:自动重试、降级方案
21
+ */ import { logger } from "../../utils";
22
+ import { errorUtils, ErrorSeverity, FrameworkError } from "../../utils/errors";
23
+ /**
24
+ * 错误处理策略
25
+ */ export var ErrorHandlingStrategy = /*#__PURE__*/ function(ErrorHandlingStrategy) {
26
+ /**
27
+ * 记录错误(日志)
28
+ */ ErrorHandlingStrategy["LOG"] = "LOG";
29
+ /**
30
+ * 上报错误(监控服务)
31
+ */ ErrorHandlingStrategy["REPORT"] = "REPORT";
32
+ /**
33
+ * 尝试恢复错误
34
+ */ ErrorHandlingStrategy["RECOVER"] = "RECOVER";
35
+ /**
36
+ * 降级处理
37
+ */ ErrorHandlingStrategy["FALLBACK"] = "FALLBACK";
38
+ /**
39
+ * 忽略错误
40
+ */ ErrorHandlingStrategy["IGNORE"] = "IGNORE";
41
+ return ErrorHandlingStrategy;
42
+ }({});
43
+ /**
44
+ * 统一错误处理器
45
+ */ export class ErrorHandler {
46
+ /**
47
+ * 设置监控服务
48
+ */ setMonitoring(monitoring) {
49
+ this.monitoring = monitoring;
50
+ }
51
+ /**
52
+ * 处理错误
53
+ *
54
+ * @param error - 错误对象
55
+ * @param context - 错误上下文
56
+ * @returns 错误处理结果
57
+ */ async handleError(error, context) {
58
+ // 标准化错误对象
59
+ const normalizedError = errorUtils.normalizeError(error);
60
+ // 创建包含上下文信息的错误对象(由于 context 是只读的,需要创建新对象)
61
+ const errorWithContext = context ? new FrameworkError(normalizedError.message, normalizedError.type, normalizedError.severity, {
62
+ code: normalizedError.code,
63
+ originalError: normalizedError.originalError,
64
+ context: {
65
+ ...normalizedError.context,
66
+ ...context
67
+ },
68
+ recoverable: normalizedError.recoverable
69
+ }) : normalizedError;
70
+ // 确定处理策略
71
+ const strategies = this.determineStrategies(errorWithContext);
72
+ // 执行处理策略
73
+ const handled = await this.executeStrategies(errorWithContext, strategies);
74
+ // 尝试恢复错误
75
+ let recoveredValue;
76
+ let recoverable = false;
77
+ if (handled && errorWithContext.recoverable && this.config.recoveryOptions) {
78
+ const recoveryResult = await this.attemptRecovery(errorWithContext);
79
+ recoverable = recoveryResult.recoverable;
80
+ recoveredValue = recoveryResult.value;
81
+ }
82
+ return {
83
+ handled,
84
+ recoverable,
85
+ recoveredValue,
86
+ strategies,
87
+ error: errorWithContext
88
+ };
89
+ }
90
+ /**
91
+ * 确定错误处理策略
92
+ */ determineStrategies(error) {
93
+ // 1. 检查错误类型对应的策略
94
+ if (this.config.typeStrategies[error.type]) {
95
+ return this.config.typeStrategies[error.type];
96
+ }
97
+ // 2. 检查错误严重程度对应的策略
98
+ if (this.config.severityStrategies[error.severity]) {
99
+ return this.config.severityStrategies[error.severity];
100
+ }
101
+ // 3. 使用默认策略
102
+ return this.config.defaultStrategies;
103
+ }
104
+ /**
105
+ * 执行处理策略
106
+ */ async executeStrategies(error, strategies) {
107
+ let handled = false;
108
+ for (const strategy of strategies){
109
+ try {
110
+ switch(strategy){
111
+ case "LOG":
112
+ this.logError(error);
113
+ handled = true;
114
+ break;
115
+ case "REPORT":
116
+ await this.reportError(error);
117
+ handled = true;
118
+ break;
119
+ case "RECOVER":
120
+ // 恢复策略在 handleError 中统一处理
121
+ handled = true;
122
+ break;
123
+ case "FALLBACK":
124
+ // 降级策略在 attemptRecovery 中处理
125
+ handled = true;
126
+ break;
127
+ case "IGNORE":
128
+ // 忽略错误,不做任何处理
129
+ handled = true;
130
+ break;
131
+ }
132
+ } catch (strategyError) {
133
+ logger.warn(`错误处理策略 ${strategy} 执行失败:`, strategyError);
134
+ }
135
+ }
136
+ return handled;
137
+ }
138
+ /**
139
+ * 记录错误
140
+ */ logError(error) {
141
+ const errorInfo = errorUtils.extractErrorInfo(error);
142
+ // 根据错误严重程度选择日志级别
143
+ switch(error.severity){
144
+ case ErrorSeverity.CRITICAL:
145
+ case ErrorSeverity.HIGH:
146
+ logger.error('错误:', errorInfo);
147
+ break;
148
+ case ErrorSeverity.MEDIUM:
149
+ logger.warn('警告:', errorInfo);
150
+ break;
151
+ case ErrorSeverity.LOW:
152
+ logger.info('信息:', errorInfo);
153
+ break;
154
+ }
155
+ // 开发环境显示详细错误信息
156
+ if (this.config.showDetailedErrorsInDev && process.env.NODE_ENV === 'development') {
157
+ const detailedError = errorUtils.formatErrorForDev(error);
158
+ console.error(detailedError);
159
+ }
160
+ }
161
+ /**
162
+ * 上报错误
163
+ */ async reportError(error) {
164
+ if (!this.monitoring) {
165
+ logger.debug('监控服务未配置,跳过错误上报');
166
+ return;
167
+ }
168
+ try {
169
+ this.monitoring.captureError(error, {
170
+ severity: error.severity,
171
+ type: error.type,
172
+ code: error.code,
173
+ context: error.context
174
+ });
175
+ } catch (reportError) {
176
+ logger.warn('错误上报失败:', reportError);
177
+ }
178
+ }
179
+ /**
180
+ * 尝试恢复错误
181
+ */ async attemptRecovery(error) {
182
+ const options = this.config.recoveryOptions;
183
+ if (!options) {
184
+ return {
185
+ recoverable: false
186
+ };
187
+ }
188
+ const maxRetries = options.maxRetries ?? 3;
189
+ const retryDelay = options.retryDelay ?? 1000;
190
+ const exponentialBackoff = options.exponentialBackoff ?? true;
191
+ const shouldRetry = options.shouldRetry ?? (()=>true);
192
+ // 如果有降级方案,先尝试降级
193
+ if (options.fallback) {
194
+ try {
195
+ const fallbackValue = await Promise.resolve(options.fallback());
196
+ logger.info('错误已通过降级方案恢复');
197
+ return {
198
+ recoverable: true,
199
+ value: fallbackValue
200
+ };
201
+ } catch (fallbackError) {
202
+ logger.warn('降级方案执行失败:', fallbackError);
203
+ }
204
+ }
205
+ // 尝试重试(如果错误可恢复且满足重试条件)
206
+ if (error.recoverable && shouldRetry(error, 0)) {
207
+ for(let attempt = 0; attempt < maxRetries; attempt++){
208
+ if (!shouldRetry(error, attempt)) {
209
+ break;
210
+ }
211
+ const delay = exponentialBackoff ? retryDelay * Math.pow(2, attempt) : retryDelay;
212
+ logger.debug(`错误恢复重试 ${attempt + 1}/${maxRetries},${delay}ms 后重试...`);
213
+ await new Promise((resolve)=>setTimeout(resolve, delay));
214
+ // 这里应该调用原始操作的重试逻辑
215
+ // 由于错误处理器不知道原始操作,这里只返回可恢复状态
216
+ // 实际的重试应该在调用方实现
217
+ }
218
+ }
219
+ return {
220
+ recoverable: error.recoverable
221
+ };
222
+ }
223
+ /**
224
+ * 创建错误处理器的便捷方法
225
+ */ static create(config) {
226
+ return new ErrorHandler(config);
227
+ }
228
+ constructor(config = {}){
229
+ _define_property(this, "config", void 0);
230
+ _define_property(this, "monitoring", void 0);
231
+ this.monitoring = config.monitoring;
232
+ this.config = {
233
+ defaultStrategies: config.defaultStrategies ?? [
234
+ "LOG",
235
+ "REPORT"
236
+ ],
237
+ severityStrategies: config.severityStrategies ?? {},
238
+ typeStrategies: config.typeStrategies ?? {},
239
+ recoveryOptions: config.recoveryOptions ?? {},
240
+ showDetailedErrorsInDev: config.showDetailedErrorsInDev ?? true
241
+ };
242
+ }
243
+ }
244
+ /**
245
+ * 默认错误处理器实例(单例)
246
+ */ let defaultErrorHandler = null;
247
+ /**
248
+ * 获取默认错误处理器
249
+ */ export function getDefaultErrorHandler() {
250
+ if (!defaultErrorHandler) {
251
+ defaultErrorHandler = new ErrorHandler();
252
+ }
253
+ return defaultErrorHandler;
254
+ }
255
+ /**
256
+ * 设置默认错误处理器
257
+ */ export function setDefaultErrorHandler(handler) {
258
+ defaultErrorHandler = handler;
259
+ }
260
+
261
+ //# sourceMappingURL=ErrorHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/error/ErrorHandler.ts"],"sourcesContent":["/**\n * 统一错误处理器\n * \n * 优化:\n * 1. 统一错误处理策略:记录、上报、恢复、降级\n * 2. 错误分类:致命、可恢复、警告\n * 3. 错误恢复机制:自动重试、降级方案\n */\n\nimport { logger } from '../../utils';\nimport { errorUtils, ErrorSeverity, ErrorType, FrameworkError } from '../../utils/errors';\nimport type { MonitoringService } from '../../utils/monitoring';\n\n/**\n * 错误处理策略\n */\nexport enum ErrorHandlingStrategy {\n /**\n * 记录错误(日志)\n */\n LOG = 'LOG',\n /**\n * 上报错误(监控服务)\n */\n REPORT = 'REPORT',\n /**\n * 尝试恢复错误\n */\n RECOVER = 'RECOVER',\n /**\n * 降级处理\n */\n FALLBACK = 'FALLBACK',\n /**\n * 忽略错误\n */\n IGNORE = 'IGNORE',\n}\n\n/**\n * 错误恢复选项\n */\nexport interface ErrorRecoveryOptions {\n /**\n * 最大重试次数\n * @default 3\n */\n maxRetries?: number;\n /**\n * 重试延迟(毫秒)\n * @default 1000\n */\n retryDelay?: number;\n /**\n * 是否启用指数退避\n * @default true\n */\n exponentialBackoff?: boolean;\n /**\n * 重试条件函数\n */\n shouldRetry?: (error: unknown, attempt: number) => boolean;\n /**\n * 降级方案函数\n */\n fallback?: () => Promise<unknown> | unknown;\n}\n\n/**\n * 错误处理配置\n */\nexport interface ErrorHandlerConfig {\n /**\n * 监控服务实例(可选)\n */\n monitoring?: MonitoringService;\n /**\n * 默认错误处理策略\n * @default [ErrorHandlingStrategy.LOG, ErrorHandlingStrategy.REPORT]\n */\n defaultStrategies?: ErrorHandlingStrategy[];\n /**\n * 错误严重程度对应的处理策略\n */\n severityStrategies?: Partial<Record<ErrorSeverity, ErrorHandlingStrategy[]>>;\n /**\n * 错误类型对应的处理策略\n */\n typeStrategies?: Partial<Record<ErrorType, ErrorHandlingStrategy[]>>;\n /**\n * 错误恢复选项\n */\n recoveryOptions?: ErrorRecoveryOptions;\n /**\n * 是否在开发环境显示详细错误信息\n * @default true\n */\n showDetailedErrorsInDev?: boolean;\n}\n\n/**\n * 错误处理结果\n */\nexport interface ErrorHandleResult {\n /**\n * 是否已处理\n */\n handled: boolean;\n /**\n * 是否可恢复\n */\n recoverable: boolean;\n /**\n * 恢复后的结果(如果已恢复)\n */\n recoveredValue?: unknown;\n /**\n * 使用的处理策略\n */\n strategies: ErrorHandlingStrategy[];\n /**\n * 错误信息\n */\n error: FrameworkError;\n}\n\n/**\n * 统一错误处理器\n */\nexport class ErrorHandler {\n private config: Omit<Required<ErrorHandlerConfig>, 'monitoring'>;\n private monitoring?: MonitoringService;\n\n constructor(config: ErrorHandlerConfig = {}) {\n this.monitoring = config.monitoring;\n this.config = {\n defaultStrategies: config.defaultStrategies ?? [\n ErrorHandlingStrategy.LOG,\n ErrorHandlingStrategy.REPORT,\n ],\n severityStrategies: config.severityStrategies ?? {},\n typeStrategies: config.typeStrategies ?? {},\n recoveryOptions: config.recoveryOptions ?? {},\n showDetailedErrorsInDev: config.showDetailedErrorsInDev ?? true,\n };\n }\n\n /**\n * 设置监控服务\n */\n setMonitoring(monitoring: MonitoringService): void {\n this.monitoring = monitoring;\n }\n\n /**\n * 处理错误\n * \n * @param error - 错误对象\n * @param context - 错误上下文\n * @returns 错误处理结果\n */\n async handleError(\n error: unknown,\n context?: Record<string, unknown>\n ): Promise<ErrorHandleResult> {\n // 标准化错误对象\n const normalizedError = errorUtils.normalizeError(error);\n \n // 创建包含上下文信息的错误对象(由于 context 是只读的,需要创建新对象)\n const errorWithContext: FrameworkError = context\n ? new FrameworkError(\n normalizedError.message,\n normalizedError.type,\n normalizedError.severity,\n {\n code: normalizedError.code,\n originalError: normalizedError.originalError,\n context: {\n ...normalizedError.context,\n ...context,\n },\n recoverable: normalizedError.recoverable,\n }\n )\n : normalizedError;\n\n // 确定处理策略\n const strategies = this.determineStrategies(errorWithContext);\n \n // 执行处理策略\n const handled = await this.executeStrategies(errorWithContext, strategies);\n\n // 尝试恢复错误\n let recoveredValue: unknown | undefined;\n let recoverable = false;\n if (handled && errorWithContext.recoverable && this.config.recoveryOptions) {\n const recoveryResult = await this.attemptRecovery(errorWithContext);\n recoverable = recoveryResult.recoverable;\n recoveredValue = recoveryResult.value;\n }\n\n return {\n handled,\n recoverable,\n recoveredValue,\n strategies,\n error: errorWithContext,\n };\n }\n\n /**\n * 确定错误处理策略\n */\n private determineStrategies(error: FrameworkError): ErrorHandlingStrategy[] {\n // 1. 检查错误类型对应的策略\n if (this.config.typeStrategies[error.type]) {\n return this.config.typeStrategies[error.type]!;\n }\n\n // 2. 检查错误严重程度对应的策略\n if (this.config.severityStrategies[error.severity]) {\n return this.config.severityStrategies[error.severity]!;\n }\n\n // 3. 使用默认策略\n return this.config.defaultStrategies;\n }\n\n /**\n * 执行处理策略\n */\n private async executeStrategies(\n error: FrameworkError,\n strategies: ErrorHandlingStrategy[]\n ): Promise<boolean> {\n let handled = false;\n\n for (const strategy of strategies) {\n try {\n switch (strategy) {\n case ErrorHandlingStrategy.LOG:\n this.logError(error);\n handled = true;\n break;\n\n case ErrorHandlingStrategy.REPORT:\n await this.reportError(error);\n handled = true;\n break;\n\n case ErrorHandlingStrategy.RECOVER:\n // 恢复策略在 handleError 中统一处理\n handled = true;\n break;\n\n case ErrorHandlingStrategy.FALLBACK:\n // 降级策略在 attemptRecovery 中处理\n handled = true;\n break;\n\n case ErrorHandlingStrategy.IGNORE:\n // 忽略错误,不做任何处理\n handled = true;\n break;\n }\n } catch (strategyError) {\n logger.warn(`错误处理策略 ${strategy} 执行失败:`, strategyError);\n }\n }\n\n return handled;\n }\n\n /**\n * 记录错误\n */\n private logError(error: FrameworkError): void {\n const errorInfo = errorUtils.extractErrorInfo(error);\n \n // 根据错误严重程度选择日志级别\n switch (error.severity) {\n case ErrorSeverity.CRITICAL:\n case ErrorSeverity.HIGH:\n logger.error('错误:', errorInfo);\n break;\n case ErrorSeverity.MEDIUM:\n logger.warn('警告:', errorInfo);\n break;\n case ErrorSeverity.LOW:\n logger.info('信息:', errorInfo);\n break;\n }\n\n // 开发环境显示详细错误信息\n if (this.config.showDetailedErrorsInDev && process.env.NODE_ENV === 'development') {\n const detailedError = errorUtils.formatErrorForDev(error);\n console.error(detailedError);\n }\n }\n\n /**\n * 上报错误\n */\n private async reportError(error: FrameworkError): Promise<void> {\n if (!this.monitoring) {\n logger.debug('监控服务未配置,跳过错误上报');\n return;\n }\n\n try {\n this.monitoring.captureError(error, {\n severity: error.severity,\n type: error.type,\n code: error.code,\n context: error.context,\n });\n } catch (reportError) {\n logger.warn('错误上报失败:', reportError);\n }\n }\n\n /**\n * 尝试恢复错误\n */\n private async attemptRecovery(\n error: FrameworkError\n ): Promise<{ recoverable: boolean; value?: unknown }> {\n const options = this.config.recoveryOptions;\n if (!options) {\n return { recoverable: false };\n }\n\n const maxRetries = options.maxRetries ?? 3;\n const retryDelay = options.retryDelay ?? 1000;\n const exponentialBackoff = options.exponentialBackoff ?? true;\n const shouldRetry = options.shouldRetry ?? (() => true);\n\n // 如果有降级方案,先尝试降级\n if (options.fallback) {\n try {\n const fallbackValue = await Promise.resolve(options.fallback());\n logger.info('错误已通过降级方案恢复');\n return { recoverable: true, value: fallbackValue };\n } catch (fallbackError) {\n logger.warn('降级方案执行失败:', fallbackError);\n }\n }\n\n // 尝试重试(如果错误可恢复且满足重试条件)\n if (error.recoverable && shouldRetry(error, 0)) {\n for (let attempt = 0; attempt < maxRetries; attempt++) {\n if (!shouldRetry(error, attempt)) {\n break;\n }\n\n const delay = exponentialBackoff\n ? retryDelay * Math.pow(2, attempt)\n : retryDelay;\n\n logger.debug(`错误恢复重试 ${attempt + 1}/${maxRetries},${delay}ms 后重试...`);\n\n await new Promise(resolve => setTimeout(resolve, delay));\n\n // 这里应该调用原始操作的重试逻辑\n // 由于错误处理器不知道原始操作,这里只返回可恢复状态\n // 实际的重试应该在调用方实现\n }\n }\n\n return { recoverable: error.recoverable };\n }\n\n /**\n * 创建错误处理器的便捷方法\n */\n static create(config?: ErrorHandlerConfig): ErrorHandler {\n return new ErrorHandler(config);\n }\n}\n\n/**\n * 默认错误处理器实例(单例)\n */\nlet defaultErrorHandler: ErrorHandler | null = null;\n\n/**\n * 获取默认错误处理器\n */\nexport function getDefaultErrorHandler(): ErrorHandler {\n if (!defaultErrorHandler) {\n defaultErrorHandler = new ErrorHandler();\n }\n return defaultErrorHandler;\n}\n\n/**\n * 设置默认错误处理器\n */\nexport function setDefaultErrorHandler(handler: ErrorHandler): void {\n defaultErrorHandler = handler;\n}\n"],"names":["logger","errorUtils","ErrorSeverity","FrameworkError","ErrorHandlingStrategy","ErrorHandler","setMonitoring","monitoring","handleError","error","context","normalizedError","normalizeError","errorWithContext","message","type","severity","code","originalError","recoverable","strategies","determineStrategies","handled","executeStrategies","recoveredValue","config","recoveryOptions","recoveryResult","attemptRecovery","value","typeStrategies","severityStrategies","defaultStrategies","strategy","logError","reportError","strategyError","warn","errorInfo","extractErrorInfo","CRITICAL","HIGH","MEDIUM","LOW","info","showDetailedErrorsInDev","process","env","NODE_ENV","detailedError","formatErrorForDev","console","debug","captureError","options","maxRetries","retryDelay","exponentialBackoff","shouldRetry","fallback","fallbackValue","Promise","resolve","fallbackError","attempt","delay","Math","pow","setTimeout","create","defaultErrorHandler","getDefaultErrorHandler","setDefaultErrorHandler","handler"],"mappings":"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"}
@@ -14,6 +14,15 @@ _export(exports, {
14
14
  get ErrorBoundary () {
15
15
  return _ErrorBoundary.ErrorBoundary;
16
16
  },
17
+ get ErrorHandler () {
18
+ return _ErrorHandler.ErrorHandler;
19
+ },
20
+ get getDefaultErrorHandler () {
21
+ return _ErrorHandler.getDefaultErrorHandler;
22
+ },
23
+ get setDefaultErrorHandler () {
24
+ return _ErrorHandler.setDefaultErrorHandler;
25
+ },
17
26
  get useErrorHandler () {
18
27
  return _ErrorBoundary.useErrorHandler;
19
28
  },
@@ -22,5 +31,6 @@ _export(exports, {
22
31
  }
23
32
  });
24
33
  const _ErrorBoundary = require("./ErrorBoundary");
34
+ const _ErrorHandler = require("./ErrorHandler");
25
35
 
26
36
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/error/index.ts"],"sourcesContent":["/**\n * 错误处理模块统一导出\n */\n\nexport { ErrorBoundary, withErrorBoundary, useErrorHandler } from './ErrorBoundary';\nexport type { ErrorBoundaryProps } from './ErrorBoundary';\n"],"names":["ErrorBoundary","useErrorHandler","withErrorBoundary"],"mappings":"AAAA;;CAEC;;;;;;;;;;;QAEQA;eAAAA,4BAAa;;QAAqBC;eAAAA,8BAAe;;QAAlCC;eAAAA,gCAAiB;;;+BAAyB"}
1
+ {"version":3,"sources":["../../../src/core/error/index.ts"],"sourcesContent":["/**\n * 错误处理模块统一导出\n */\n\nexport { ErrorBoundary, withErrorBoundary, useErrorHandler } from './ErrorBoundary';\nexport type { ErrorBoundaryProps } from './ErrorBoundary';\nexport { ErrorHandler, getDefaultErrorHandler, setDefaultErrorHandler } from './ErrorHandler';\nexport type {\n ErrorHandlingStrategy,\n ErrorHandlerConfig,\n ErrorHandleResult,\n ErrorRecoveryOptions,\n} from './ErrorHandler';"],"names":["ErrorBoundary","ErrorHandler","getDefaultErrorHandler","setDefaultErrorHandler","useErrorHandler","withErrorBoundary"],"mappings":"AAAA;;CAEC;;;;;;;;;;;QAEQA;eAAAA,4BAAa;;QAEbC;eAAAA,0BAAY;;QAAEC;eAAAA,oCAAsB;;QAAEC;eAAAA,oCAAsB;;QAF1BC;eAAAA,8BAAe;;QAAlCC;eAAAA,gCAAiB;;;+BAAyB;8BAEW"}
@@ -3,4 +3,6 @@
3
3
  */
4
4
  export { ErrorBoundary, withErrorBoundary, useErrorHandler } from './ErrorBoundary';
5
5
  export type { ErrorBoundaryProps } from './ErrorBoundary';
6
+ export { ErrorHandler, getDefaultErrorHandler, setDefaultErrorHandler } from './ErrorHandler';
7
+ export type { ErrorHandlingStrategy, ErrorHandlerConfig, ErrorHandleResult, ErrorRecoveryOptions, } from './ErrorHandler';
6
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/error/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACpF,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/error/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACpF,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC9F,YAAY,EACV,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC"}
@@ -1,5 +1,6 @@
1
1
  /**
2
2
  * 错误处理模块统一导出
3
3
  */ export { ErrorBoundary, withErrorBoundary, useErrorHandler } from "./ErrorBoundary";
4
+ export { ErrorHandler, getDefaultErrorHandler, setDefaultErrorHandler } from "./ErrorHandler";
4
5
 
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/error/index.ts"],"sourcesContent":["/**\n * 错误处理模块统一导出\n */\n\nexport { ErrorBoundary, withErrorBoundary, useErrorHandler } from './ErrorBoundary';\nexport type { ErrorBoundaryProps } from './ErrorBoundary';\n"],"names":["ErrorBoundary","withErrorBoundary","useErrorHandler"],"mappings":"AAAA;;CAEC,GAED,SAASA,aAAa,EAAEC,iBAAiB,EAAEC,eAAe,QAAQ,kBAAkB"}
1
+ {"version":3,"sources":["../../../src/core/error/index.ts"],"sourcesContent":["/**\n * 错误处理模块统一导出\n */\n\nexport { ErrorBoundary, withErrorBoundary, useErrorHandler } from './ErrorBoundary';\nexport type { ErrorBoundaryProps } from './ErrorBoundary';\nexport { ErrorHandler, getDefaultErrorHandler, setDefaultErrorHandler } from './ErrorHandler';\nexport type {\n ErrorHandlingStrategy,\n ErrorHandlerConfig,\n ErrorHandleResult,\n ErrorRecoveryOptions,\n} from './ErrorHandler';"],"names":["ErrorBoundary","withErrorBoundary","useErrorHandler","ErrorHandler","getDefaultErrorHandler","setDefaultErrorHandler"],"mappings":"AAAA;;CAEC,GAED,SAASA,aAAa,EAAEC,iBAAiB,EAAEC,eAAe,QAAQ,kBAAkB;AAEpF,SAASC,YAAY,EAAEC,sBAAsB,EAAEC,sBAAsB,QAAQ,iBAAiB"}