@vlian/framework 1.2.59 → 1.2.61
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/dist/analytics/index.cjs +1 -22
- package/dist/analytics.umd.js +1 -1
- package/dist/components/LocaleSwitch.cjs +1 -116
- package/dist/components/ThemeSwitch.cjs +1 -115
- package/dist/components/index.cjs +1 -20
- package/dist/components/persistence.cjs +1 -58
- package/dist/core/Test.cjs +1 -64
- package/dist/core/app/AppContext.cjs +1 -348
- package/dist/core/app/AppContext.types.cjs +1 -4
- package/dist/core/app/BasicLayout.cjs +1 -122
- package/dist/core/app/DefaultApp.cjs +1 -150
- package/dist/core/app/index.cjs +1 -41
- package/dist/core/config/AppConfig.cjs +1 -139
- package/dist/core/config/ConfigLoader.cjs +1 -323
- package/dist/core/config/ConfigValidator.cjs +2 -133
- package/dist/core/config/index.cjs +1 -28
- package/dist/core/dev/DevTools.cjs +1 -226
- package/dist/core/error/ErrorBoundary.cjs +1 -401
- package/dist/core/error/ErrorHandler.cjs +1 -275
- package/dist/core/error/index.cjs +1 -34
- package/dist/core/event/AppEventBus.cjs +1 -444
- package/dist/core/event/frameworkEvents.cjs +1 -141
- package/dist/core/event/hooks.cjs +1 -69
- package/dist/core/event/index.cjs +1 -41
- package/dist/core/event/types.cjs +1 -62
- package/dist/core/event/useEventBus.cjs +1 -25
- package/dist/core/index.cjs +1 -140
- package/dist/core/initialization/InitializationErrorThrower.cjs +1 -75
- package/dist/core/initialization/index.cjs +1 -26
- package/dist/core/initialization/initialization.cjs +1 -64
- package/dist/core/initialization/initializationErrorState.cjs +1 -66
- package/dist/core/kernel/defaultAdapters.cjs +1 -184
- package/dist/core/kernel/errors.cjs +1 -69
- package/dist/core/kernel/index.cjs +1 -20
- package/dist/core/kernel/startKernel.cjs +1 -200
- package/dist/core/kernel/types.cjs +1 -4
- package/dist/core/middleware.cjs +1 -73
- package/dist/core/plugin/PluginEventBus.cjs +1 -298
- package/dist/core/plugin/PluginSandbox.cjs +1 -137
- package/dist/core/plugin.cjs +1 -494
- package/dist/core/router/RouterManager.cjs +1 -286
- package/dist/core/router/adapter/AdapterManager.cjs +1 -235
- package/dist/core/router/adapter/index.cjs +1 -22
- package/dist/core/router/adapter/react-router/ReactRouterAdapter.cjs +1 -128
- package/dist/core/router/adapter/react-router/index.cjs +1 -20
- package/dist/core/router/adapter/types.cjs +1 -6
- package/dist/core/router/dev/RouterDevTools.cjs +1 -260
- package/dist/core/router/dev/index.cjs +1 -20
- package/dist/core/router/dynamic/DynamicRouteManager.cjs +1 -193
- package/dist/core/router/dynamic/index.cjs +1 -20
- package/dist/core/router/errors/RouterError.cjs +1 -61
- package/dist/core/router/errors/index.cjs +1 -20
- package/dist/core/router/index.cjs +1 -36
- package/dist/core/router/lifecycle/RouterLifecycleManager.cjs +1 -144
- package/dist/core/router/lifecycle/index.cjs +1 -20
- package/dist/core/router/middleware/RouterMiddlewareManager.cjs +1 -193
- package/dist/core/router/middleware/auth.cjs +1 -66
- package/dist/core/router/middleware/index.cjs +1 -22
- package/dist/core/router/middleware/types.cjs +1 -6
- package/dist/core/router/monitoring/RouterMonitoring.cjs +1 -227
- package/dist/core/router/monitoring/index.cjs +1 -20
- package/dist/core/router/navigation/RouterNavigation.cjs +1 -239
- package/dist/core/router/navigation/index.cjs +1 -20
- package/dist/core/router/performance/RouteCache.cjs +1 -305
- package/dist/core/router/performance/RoutePreloader.cjs +1 -292
- package/dist/core/router/performance/index.cjs +1 -21
- package/dist/core/router/plugin/RouterPluginManager.cjs +1 -262
- package/dist/core/router/plugin/index.cjs +1 -21
- package/dist/core/router/plugin/types.cjs +1 -39
- package/dist/core/router/types.cjs +1 -4
- package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.cjs +1 -129
- package/dist/core/router/utils/adapters/react-router/transform.cjs +1 -250
- package/dist/core/router/utils/transform.cjs +1 -780
- package/dist/core/router/validation/RouterConfigValidator.cjs +2 -83
- package/dist/core/router/validation/index.cjs +1 -21
- package/dist/core/router/validation/schema.cjs +1 -159
- package/dist/core/router/version/RouteVersionManager.cjs +1 -205
- package/dist/core/router/version/index.cjs +1 -20
- package/dist/core/splash/SplashScreen.cjs +1 -341
- package/dist/core/splash/index.cjs +1 -22
- package/dist/core/splash/splashScreenUtils.cjs +1 -38
- package/dist/core/startup/AppInstance.cjs +1 -239
- package/dist/core/startup/environment.cjs +1 -169
- package/dist/core/startup/index.cjs +1 -23
- package/dist/core/startup/initializeServices.cjs +1 -226
- package/dist/core/startup/performanceTracker.cjs +1 -179
- package/dist/core/startup/renderApp.cjs +1 -314
- package/dist/core/startup/startApp.cjs +1 -317
- package/dist/core/types.cjs +1 -4
- package/dist/index.cjs +1 -52
- package/dist/index.umd.cjs +1 -27
- package/dist/index.umd.js +1 -1
- package/dist/kernel/constants.cjs +1 -65
- package/dist/kernel/index.cjs +1 -38
- package/dist/kernel/kernel.cjs +1 -295
- package/dist/kernel/manager/cacheManager.cjs +1 -46
- package/dist/kernel/manager/i18n/I18nManager.cjs +1 -91
- package/dist/kernel/manager/i18n/i18n.persistence.cjs +1 -60
- package/dist/kernel/manager/i18n/i18n.schema.cjs +1 -86
- package/dist/kernel/manager/i18n/index.cjs +1 -11
- package/dist/kernel/manager/i18nManager.cjs +1 -11
- package/dist/kernel/manager/index.cjs +1 -28
- package/dist/kernel/manager/logger/LoggerManager.cjs +1 -107
- package/dist/kernel/manager/logger/index.cjs +1 -11
- package/dist/kernel/manager/logger/logger.persistence.cjs +1 -62
- package/dist/kernel/manager/logger/logger.schema.cjs +1 -74
- package/dist/kernel/manager/loggerManager.cjs +1 -11
- package/dist/kernel/manager/theme/ThemeManager.cjs +1 -84
- package/dist/kernel/manager/theme/index.cjs +1 -11
- package/dist/kernel/manager/theme/theme.dom.cjs +1 -61
- package/dist/kernel/manager/theme/theme.persistence.cjs +1 -57
- package/dist/kernel/manager/theme/theme.schema.cjs +1 -122
- package/dist/kernel/manager/themeManager.cjs +1 -11
- package/dist/kernel/types.cjs +1 -4
- package/dist/library/index.cjs +1 -19
- package/dist/library/locale/index.cjs +1 -39
- package/dist/library/locale/langs/en-us/index.cjs +1 -32
- package/dist/library/locale/langs/zh-cn/index.cjs +1 -32
- package/dist/library/locale/types.cjs +1 -4
- package/dist/library/storage/cache.cjs +1 -243
- package/dist/library/storage/encryption.cjs +1 -147
- package/dist/library/storage/index.cjs +1 -124
- package/dist/state/StateManager.cjs +1 -166
- package/dist/state/adapters/AdapterFactory.cjs +1 -89
- package/dist/state/adapters/DefaultAdapter.cjs +1 -75
- package/dist/state/adapters/ReduxAdapter.cjs +1 -443
- package/dist/state/adapters/ZustandAdapter.cjs +1 -69
- package/dist/state/adapters/index.cjs +1 -44
- package/dist/state/adapters/types.cjs +1 -20
- package/dist/state/core/DerivedStateInstance.cjs +1 -174
- package/dist/state/core/StateInstance.cjs +1 -170
- package/dist/state/core/StateRegistry.cjs +1 -110
- package/dist/state/core/StateScope.cjs +1 -137
- package/dist/state/core/index.cjs +1 -30
- package/dist/state/index.cjs +1 -30
- package/dist/state/types.cjs +1 -12
- package/dist/state.umd.js +1 -1
- package/dist/types.cjs +1 -4
- package/dist/utils/analytics.cjs +1 -217
- package/dist/utils/configSecurity.cjs +3 -182
- package/dist/utils/csrf.cjs +1 -18
- package/dist/utils/errors/ErrorCodes.cjs +1 -25
- package/dist/utils/errors.cjs +1 -111
- package/dist/utils/index.cjs +1 -135
- package/dist/utils/logger.cjs +1 -25
- package/dist/utils/logger.types.cjs +1 -11
- package/dist/utils/monitoring.cjs +1 -18
- package/dist/utils/performance.cjs +1 -22
- package/dist/utils/resourceLoader.cjs +1 -22
- package/dist/utils/runtimeSecurity.cjs +1 -11
- package/dist/utils/security.cjs +1 -19
- package/dist/utils/traceId.cjs +1 -37
- package/dist/utils/validation.cjs +1 -19
- package/package.json +12 -3
|
@@ -1,275 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* 统一错误处理器
|
|
3
|
-
*
|
|
4
|
-
* 优化:
|
|
5
|
-
* 1. 统一错误处理策略:记录、上报、恢复、降级
|
|
6
|
-
* 2. 错误分类:致命、可恢复、警告
|
|
7
|
-
* 3. 错误恢复机制:自动重试、降级方案
|
|
8
|
-
*/ "use strict";
|
|
9
|
-
Object.defineProperty(exports, "__esModule", {
|
|
10
|
-
value: true
|
|
11
|
-
});
|
|
12
|
-
function _export(target, all) {
|
|
13
|
-
for(var name in all)Object.defineProperty(target, name, {
|
|
14
|
-
enumerable: true,
|
|
15
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
_export(exports, {
|
|
19
|
-
get ErrorHandler () {
|
|
20
|
-
return ErrorHandler;
|
|
21
|
-
},
|
|
22
|
-
get ErrorHandlingStrategy () {
|
|
23
|
-
return ErrorHandlingStrategy;
|
|
24
|
-
},
|
|
25
|
-
get getDefaultErrorHandler () {
|
|
26
|
-
return getDefaultErrorHandler;
|
|
27
|
-
},
|
|
28
|
-
get setDefaultErrorHandler () {
|
|
29
|
-
return setDefaultErrorHandler;
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
const _logger = require("@vlian/logger");
|
|
33
|
-
const _utils = require("@vlian/utils");
|
|
34
|
-
function _define_property(obj, key, value) {
|
|
35
|
-
if (key in obj) {
|
|
36
|
-
Object.defineProperty(obj, key, {
|
|
37
|
-
value: value,
|
|
38
|
-
enumerable: true,
|
|
39
|
-
configurable: true,
|
|
40
|
-
writable: true
|
|
41
|
-
});
|
|
42
|
-
} else {
|
|
43
|
-
obj[key] = value;
|
|
44
|
-
}
|
|
45
|
-
return obj;
|
|
46
|
-
}
|
|
47
|
-
var ErrorHandlingStrategy = /*#__PURE__*/ function(ErrorHandlingStrategy) {
|
|
48
|
-
/**
|
|
49
|
-
* 记录错误(日志)
|
|
50
|
-
*/ ErrorHandlingStrategy["LOG"] = "LOG";
|
|
51
|
-
/**
|
|
52
|
-
* 上报错误(监控服务)
|
|
53
|
-
*/ ErrorHandlingStrategy["REPORT"] = "REPORT";
|
|
54
|
-
/**
|
|
55
|
-
* 尝试恢复错误
|
|
56
|
-
*/ ErrorHandlingStrategy["RECOVER"] = "RECOVER";
|
|
57
|
-
/**
|
|
58
|
-
* 降级处理
|
|
59
|
-
*/ ErrorHandlingStrategy["FALLBACK"] = "FALLBACK";
|
|
60
|
-
/**
|
|
61
|
-
* 忽略错误
|
|
62
|
-
*/ ErrorHandlingStrategy["IGNORE"] = "IGNORE";
|
|
63
|
-
return ErrorHandlingStrategy;
|
|
64
|
-
}({});
|
|
65
|
-
let ErrorHandler = class ErrorHandler {
|
|
66
|
-
/**
|
|
67
|
-
* 设置监控服务
|
|
68
|
-
*/ setMonitoring(monitoring) {
|
|
69
|
-
this.monitoring = monitoring;
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* 处理错误
|
|
73
|
-
*
|
|
74
|
-
* @param error - 错误对象
|
|
75
|
-
* @param context - 错误上下文
|
|
76
|
-
* @returns 错误处理结果
|
|
77
|
-
*/ async handleError(error, context) {
|
|
78
|
-
// 标准化错误对象
|
|
79
|
-
const normalizedError = _utils.errorUtils.normalizeError(error);
|
|
80
|
-
// 创建包含上下文信息的错误对象(由于 context 是只读的,需要创建新对象)
|
|
81
|
-
const errorWithContext = context ? new _utils.FrameworkError(normalizedError.message, normalizedError.type, normalizedError.severity, {
|
|
82
|
-
code: normalizedError.code,
|
|
83
|
-
originalError: normalizedError.originalError,
|
|
84
|
-
context: {
|
|
85
|
-
...normalizedError.context,
|
|
86
|
-
...context
|
|
87
|
-
},
|
|
88
|
-
recoverable: normalizedError.recoverable
|
|
89
|
-
}) : normalizedError;
|
|
90
|
-
// 确定处理策略
|
|
91
|
-
const strategies = this.determineStrategies(errorWithContext);
|
|
92
|
-
// 执行处理策略
|
|
93
|
-
const handled = await this.executeStrategies(errorWithContext, strategies);
|
|
94
|
-
// 尝试恢复错误
|
|
95
|
-
let recoveredValue;
|
|
96
|
-
let recoverable = false;
|
|
97
|
-
if (handled && errorWithContext.recoverable && this.config.recoveryOptions) {
|
|
98
|
-
const recoveryResult = await this.attemptRecovery(errorWithContext);
|
|
99
|
-
recoverable = recoveryResult.recoverable;
|
|
100
|
-
recoveredValue = recoveryResult.value;
|
|
101
|
-
}
|
|
102
|
-
return {
|
|
103
|
-
handled,
|
|
104
|
-
recoverable,
|
|
105
|
-
recoveredValue,
|
|
106
|
-
strategies,
|
|
107
|
-
error: errorWithContext
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* 确定错误处理策略
|
|
112
|
-
*/ determineStrategies(error) {
|
|
113
|
-
// 1. 检查错误类型对应的策略
|
|
114
|
-
if (this.config.typeStrategies[error.type]) {
|
|
115
|
-
return this.config.typeStrategies[error.type];
|
|
116
|
-
}
|
|
117
|
-
// 2. 检查错误严重程度对应的策略
|
|
118
|
-
if (this.config.severityStrategies[error.severity]) {
|
|
119
|
-
return this.config.severityStrategies[error.severity];
|
|
120
|
-
}
|
|
121
|
-
// 3. 使用默认策略
|
|
122
|
-
return this.config.defaultStrategies;
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* 执行处理策略
|
|
126
|
-
*/ async executeStrategies(error, strategies) {
|
|
127
|
-
let handled = false;
|
|
128
|
-
for (const strategy of strategies){
|
|
129
|
-
try {
|
|
130
|
-
switch(strategy){
|
|
131
|
-
case "LOG":
|
|
132
|
-
this.logError(error);
|
|
133
|
-
handled = true;
|
|
134
|
-
break;
|
|
135
|
-
case "REPORT":
|
|
136
|
-
await this.reportError(error);
|
|
137
|
-
handled = true;
|
|
138
|
-
break;
|
|
139
|
-
case "RECOVER":
|
|
140
|
-
// 恢复策略在 handleError 中统一处理
|
|
141
|
-
handled = true;
|
|
142
|
-
break;
|
|
143
|
-
case "FALLBACK":
|
|
144
|
-
// 降级策略在 attemptRecovery 中处理
|
|
145
|
-
handled = true;
|
|
146
|
-
break;
|
|
147
|
-
case "IGNORE":
|
|
148
|
-
// 忽略错误,不做任何处理
|
|
149
|
-
handled = true;
|
|
150
|
-
break;
|
|
151
|
-
}
|
|
152
|
-
} catch (strategyError) {
|
|
153
|
-
_logger.logger.warn(`错误处理策略 ${strategy} 执行失败:`, strategyError);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
return handled;
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* 记录错误
|
|
160
|
-
*/ logError(error) {
|
|
161
|
-
const errorInfo = _utils.errorUtils.extractErrorInfo(error);
|
|
162
|
-
// 根据错误严重程度选择日志级别
|
|
163
|
-
switch(error.severity){
|
|
164
|
-
case _utils.ErrorSeverity.CRITICAL:
|
|
165
|
-
case _utils.ErrorSeverity.HIGH:
|
|
166
|
-
_logger.logger.error('错误:', errorInfo);
|
|
167
|
-
break;
|
|
168
|
-
case _utils.ErrorSeverity.MEDIUM:
|
|
169
|
-
_logger.logger.warn('警告:', errorInfo);
|
|
170
|
-
break;
|
|
171
|
-
case _utils.ErrorSeverity.LOW:
|
|
172
|
-
_logger.logger.info('信息:', errorInfo);
|
|
173
|
-
break;
|
|
174
|
-
}
|
|
175
|
-
// 开发环境显示详细错误信息
|
|
176
|
-
if (this.config.showDetailedErrorsInDev && process.env.NODE_ENV === 'development') {
|
|
177
|
-
const detailedError = _utils.errorUtils.formatErrorForDev(error);
|
|
178
|
-
console.error(detailedError);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* 上报错误
|
|
183
|
-
*/ async reportError(error) {
|
|
184
|
-
if (!this.monitoring) {
|
|
185
|
-
_logger.logger.debug('监控服务未配置,跳过错误上报');
|
|
186
|
-
return;
|
|
187
|
-
}
|
|
188
|
-
try {
|
|
189
|
-
this.monitoring.captureError(error, {
|
|
190
|
-
severity: error.severity,
|
|
191
|
-
type: error.type,
|
|
192
|
-
code: error.code,
|
|
193
|
-
context: error.context
|
|
194
|
-
});
|
|
195
|
-
} catch (reportError) {
|
|
196
|
-
_logger.logger.warn('错误上报失败:', reportError);
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
/**
|
|
200
|
-
* 尝试恢复错误
|
|
201
|
-
*/ async attemptRecovery(error) {
|
|
202
|
-
const options = this.config.recoveryOptions;
|
|
203
|
-
if (!options) {
|
|
204
|
-
return {
|
|
205
|
-
recoverable: false
|
|
206
|
-
};
|
|
207
|
-
}
|
|
208
|
-
const maxRetries = options.maxRetries ?? 3;
|
|
209
|
-
const retryDelay = options.retryDelay ?? 1000;
|
|
210
|
-
const exponentialBackoff = options.exponentialBackoff ?? true;
|
|
211
|
-
const shouldRetry = options.shouldRetry ?? (()=>true);
|
|
212
|
-
// 如果有降级方案,先尝试降级
|
|
213
|
-
if (options.fallback) {
|
|
214
|
-
try {
|
|
215
|
-
const fallbackValue = await Promise.resolve(options.fallback());
|
|
216
|
-
_logger.logger.info('错误已通过降级方案恢复');
|
|
217
|
-
return {
|
|
218
|
-
recoverable: true,
|
|
219
|
-
value: fallbackValue
|
|
220
|
-
};
|
|
221
|
-
} catch (fallbackError) {
|
|
222
|
-
_logger.logger.warn('降级方案执行失败:', fallbackError);
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
// 尝试重试(如果错误可恢复且满足重试条件)
|
|
226
|
-
if (error.recoverable && shouldRetry(error, 0)) {
|
|
227
|
-
for(let attempt = 0; attempt < maxRetries; attempt++){
|
|
228
|
-
if (!shouldRetry(error, attempt)) {
|
|
229
|
-
break;
|
|
230
|
-
}
|
|
231
|
-
const delay = exponentialBackoff ? retryDelay * Math.pow(2, attempt) : retryDelay;
|
|
232
|
-
_logger.logger.debug(`错误恢复重试 ${attempt + 1}/${maxRetries},${delay}ms 后重试...`);
|
|
233
|
-
await new Promise((resolve)=>setTimeout(resolve, delay));
|
|
234
|
-
// 这里应该调用原始操作的重试逻辑
|
|
235
|
-
// 由于错误处理器不知道原始操作,这里只返回可恢复状态
|
|
236
|
-
// 实际的重试应该在调用方实现
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
return {
|
|
240
|
-
recoverable: error.recoverable
|
|
241
|
-
};
|
|
242
|
-
}
|
|
243
|
-
/**
|
|
244
|
-
* 创建错误处理器的便捷方法
|
|
245
|
-
*/ static create(config) {
|
|
246
|
-
return new ErrorHandler(config);
|
|
247
|
-
}
|
|
248
|
-
constructor(config = {}){
|
|
249
|
-
_define_property(this, "config", void 0);
|
|
250
|
-
_define_property(this, "monitoring", void 0);
|
|
251
|
-
this.monitoring = config.monitoring;
|
|
252
|
-
this.config = {
|
|
253
|
-
defaultStrategies: config.defaultStrategies ?? [
|
|
254
|
-
"LOG",
|
|
255
|
-
"REPORT"
|
|
256
|
-
],
|
|
257
|
-
severityStrategies: config.severityStrategies ?? {},
|
|
258
|
-
typeStrategies: config.typeStrategies ?? {},
|
|
259
|
-
recoveryOptions: config.recoveryOptions ?? {},
|
|
260
|
-
showDetailedErrorsInDev: config.showDetailedErrorsInDev ?? true
|
|
261
|
-
};
|
|
262
|
-
}
|
|
263
|
-
};
|
|
264
|
-
/**
|
|
265
|
-
* 默认错误处理器实例(单例)
|
|
266
|
-
*/ let defaultErrorHandler = null;
|
|
267
|
-
function getDefaultErrorHandler() {
|
|
268
|
-
if (!defaultErrorHandler) {
|
|
269
|
-
defaultErrorHandler = new ErrorHandler();
|
|
270
|
-
}
|
|
271
|
-
return defaultErrorHandler;
|
|
272
|
-
}
|
|
273
|
-
function setDefaultErrorHandler(handler) {
|
|
274
|
-
defaultErrorHandler = handler;
|
|
275
|
-
}
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get ErrorHandler(){return ErrorHandler},get ErrorHandlingStrategy(){return ErrorHandlingStrategy},get getDefaultErrorHandler(){return getDefaultErrorHandler},get setDefaultErrorHandler(){return setDefaultErrorHandler}});const _logger=require("@vlian/logger");const _utils=require("@vlian/utils");function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}var ErrorHandlingStrategy=/*#__PURE__*/function(ErrorHandlingStrategy){ErrorHandlingStrategy["LOG"]="LOG";ErrorHandlingStrategy["REPORT"]="REPORT";ErrorHandlingStrategy["RECOVER"]="RECOVER";ErrorHandlingStrategy["FALLBACK"]="FALLBACK";ErrorHandlingStrategy["IGNORE"]="IGNORE";return ErrorHandlingStrategy}({});let ErrorHandler=class ErrorHandler{setMonitoring(monitoring){this.monitoring=monitoring}async handleError(error,context){const normalizedError=_utils.errorUtils.normalizeError(error);const errorWithContext=context?new _utils.FrameworkError(normalizedError.message,normalizedError.type,normalizedError.severity,{code:normalizedError.code,originalError:normalizedError.originalError,context:{...normalizedError.context,...context},recoverable:normalizedError.recoverable}):normalizedError;const strategies=this.determineStrategies(errorWithContext);const handled=await this.executeStrategies(errorWithContext,strategies);let recoveredValue;let recoverable=false;if(handled&&errorWithContext.recoverable&&this.config.recoveryOptions){const recoveryResult=await this.attemptRecovery(errorWithContext);recoverable=recoveryResult.recoverable;recoveredValue=recoveryResult.value}return{handled,recoverable,recoveredValue,strategies,error:errorWithContext}}determineStrategies(error){if(this.config.typeStrategies[error.type]){return this.config.typeStrategies[error.type]}if(this.config.severityStrategies[error.severity]){return this.config.severityStrategies[error.severity]}return this.config.defaultStrategies}async executeStrategies(error,strategies){let handled=false;for(const strategy of strategies){try{switch(strategy){case"LOG":this.logError(error);handled=true;break;case"REPORT":await this.reportError(error);handled=true;break;case"RECOVER":handled=true;break;case"FALLBACK":handled=true;break;case"IGNORE":handled=true;break}}catch(strategyError){_logger.logger.warn(`错误处理策略 ${strategy} 执行失败:`,strategyError)}}return handled}logError(error){const errorInfo=_utils.errorUtils.extractErrorInfo(error);switch(error.severity){case _utils.ErrorSeverity.CRITICAL:case _utils.ErrorSeverity.HIGH:_logger.logger.error("错误:",errorInfo);break;case _utils.ErrorSeverity.MEDIUM:_logger.logger.warn("警告:",errorInfo);break;case _utils.ErrorSeverity.LOW:_logger.logger.info("信息:",errorInfo);break}if(this.config.showDetailedErrorsInDev&&process.env.NODE_ENV==="development"){const detailedError=_utils.errorUtils.formatErrorForDev(error);console.error(detailedError)}}async reportError(error){if(!this.monitoring){_logger.logger.debug("监控服务未配置,跳过错误上报");return}try{this.monitoring.captureError(error,{severity:error.severity,type:error.type,code:error.code,context:error.context})}catch(reportError){_logger.logger.warn("错误上报失败:",reportError)}}async attemptRecovery(error){const options=this.config.recoveryOptions;if(!options){return{recoverable:false}}const maxRetries=options.maxRetries??3;const retryDelay=options.retryDelay??1e3;const exponentialBackoff=options.exponentialBackoff??true;const shouldRetry=options.shouldRetry??(()=>true);if(options.fallback){try{const fallbackValue=await Promise.resolve(options.fallback());_logger.logger.info("错误已通过降级方案恢复");return{recoverable:true,value:fallbackValue}}catch(fallbackError){_logger.logger.warn("降级方案执行失败:",fallbackError)}}if(error.recoverable&&shouldRetry(error,0)){for(let attempt=0;attempt<maxRetries;attempt++){if(!shouldRetry(error,attempt)){break}const delay=exponentialBackoff?retryDelay*Math.pow(2,attempt):retryDelay;_logger.logger.debug(`错误恢复重试 ${attempt+1}/${maxRetries},${delay}ms 后重试...`);await new Promise(resolve=>setTimeout(resolve,delay))}}return{recoverable:error.recoverable}}static create(config){return new ErrorHandler(config)}constructor(config={}){_define_property(this,"config",void 0);_define_property(this,"monitoring",void 0);this.monitoring=config.monitoring;this.config={defaultStrategies:config.defaultStrategies??["LOG","REPORT"],severityStrategies:config.severityStrategies??{},typeStrategies:config.typeStrategies??{},recoveryOptions:config.recoveryOptions??{},showDetailedErrorsInDev:config.showDetailedErrorsInDev??true}}};let defaultErrorHandler=null;function getDefaultErrorHandler(){if(!defaultErrorHandler){defaultErrorHandler=new ErrorHandler}return defaultErrorHandler}function setDefaultErrorHandler(handler){defaultErrorHandler=handler}
|
|
@@ -1,34 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* 错误处理模块统一导出
|
|
3
|
-
*/ "use strict";
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
function _export(target, all) {
|
|
8
|
-
for(var name in all)Object.defineProperty(target, name, {
|
|
9
|
-
enumerable: true,
|
|
10
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
|
-
_export(exports, {
|
|
14
|
-
get ErrorBoundary () {
|
|
15
|
-
return _ErrorBoundary.ErrorBoundary;
|
|
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
|
-
},
|
|
26
|
-
get useErrorHandler () {
|
|
27
|
-
return _ErrorBoundary.useErrorHandler;
|
|
28
|
-
},
|
|
29
|
-
get withErrorBoundary () {
|
|
30
|
-
return _ErrorBoundary.withErrorBoundary;
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
const _ErrorBoundary = require("./ErrorBoundary");
|
|
34
|
-
const _ErrorHandler = require("./ErrorHandler");
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get ErrorBoundary(){return _ErrorBoundary.ErrorBoundary},get ErrorHandler(){return _ErrorHandler.ErrorHandler},get getDefaultErrorHandler(){return _ErrorHandler.getDefaultErrorHandler},get setDefaultErrorHandler(){return _ErrorHandler.setDefaultErrorHandler},get useErrorHandler(){return _ErrorBoundary.useErrorHandler},get withErrorBoundary(){return _ErrorBoundary.withErrorBoundary}});const _ErrorBoundary=require("./ErrorBoundary");const _ErrorHandler=require("./ErrorHandler");
|